@arkade-os/sdk 0.4.68 → 0.4.70

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-PJR63FTK.cjs → chunk-3KW4TWP2.cjs} +17 -17
  11. package/dist/{chunk-PJR63FTK.cjs.map → chunk-3KW4TWP2.cjs.map} +1 -1
  12. package/dist/{chunk-6YUACVX4.cjs → chunk-3OKEUDHU.cjs} +49 -49
  13. package/dist/{chunk-6YUACVX4.cjs.map → chunk-3OKEUDHU.cjs.map} +1 -1
  14. package/dist/{chunk-EJOFL5WH.cjs → chunk-57636V35.cjs} +3 -3
  15. package/dist/{chunk-EJOFL5WH.cjs.map → chunk-57636V35.cjs.map} +1 -1
  16. package/dist/{chunk-45FKMOJH.js → chunk-6UM55KPZ.js} +3 -3
  17. package/dist/{chunk-45FKMOJH.js.map → chunk-6UM55KPZ.js.map} +1 -1
  18. package/dist/{chunk-4KCVS4ZN.cjs → chunk-B73Q75IL.cjs} +10 -10
  19. package/dist/{chunk-4KCVS4ZN.cjs.map → chunk-B73Q75IL.cjs.map} +1 -1
  20. package/dist/{chunk-33Q2RFET.js → chunk-F5E7LI6G.js} +3 -3
  21. package/dist/{chunk-33Q2RFET.js.map → chunk-F5E7LI6G.js.map} +1 -1
  22. package/dist/{chunk-GQ4NMQGR.js → chunk-IUFTICRY.js} +4 -4
  23. package/dist/{chunk-GQ4NMQGR.js.map → chunk-IUFTICRY.js.map} +1 -1
  24. package/dist/{chunk-JGMSZIE4.cjs → chunk-JJ7AXR4O.cjs} +17 -17
  25. package/dist/{chunk-JGMSZIE4.cjs.map → chunk-JJ7AXR4O.cjs.map} +1 -1
  26. package/dist/{chunk-VBHXBI7F.js → chunk-JVHO6XHG.js} +435 -55
  27. package/dist/chunk-JVHO6XHG.js.map +1 -0
  28. package/dist/{chunk-4CMXV5SF.js → chunk-TXSF2DKX.js} +3 -3
  29. package/dist/{chunk-4CMXV5SF.js.map → chunk-TXSF2DKX.js.map} +1 -1
  30. package/dist/{chunk-G4I6PU5H.js → chunk-UG3EZDLF.js} +4 -4
  31. package/dist/{chunk-G4I6PU5H.js.map → chunk-UG3EZDLF.js.map} +1 -1
  32. package/dist/{chunk-WCJVKFAP.cjs → chunk-XTCOSZ34.cjs} +870 -483
  33. package/dist/chunk-XTCOSZ34.cjs.map +1 -0
  34. package/dist/contracts/handlers/index.cjs +9 -9
  35. package/dist/contracts/handlers/index.d.cts +3 -3
  36. package/dist/contracts/handlers/index.d.ts +3 -3
  37. package/dist/contracts/handlers/index.js +2 -2
  38. package/dist/{delegate-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 +318 -290
  47. package/dist/index.d.cts +97 -21
  48. package/dist/index.d.ts +97 -21
  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 +2 -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 chunk3KW4TWP2_cjs = require('./chunk-3KW4TWP2.cjs');
4
+ var chunk3OKEUDHU_cjs = require('./chunk-3OKEUDHU.cjs');
5
+ var chunk57636V35_cjs = require('./chunk-57636V35.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 = chunk57636V35_cjs.getArkPsbtFields(tx.root, 0, chunk57636V35_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 = chunk57636V35_cjs.getArkPsbtFields(g.root, 0, chunk57636V35_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
+ chunk57636V35_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 = chunk3OKEUDHU_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 chunk3OKEUDHU_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 = chunk3OKEUDHU_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
+ chunk57636V35_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 = chunk3OKEUDHU_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 chunk3OKEUDHU_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 chunk3OKEUDHU_cjs.deriveDescriptorLeafPubKey(this.descriptor);
882
882
  }
883
883
  async compressedPublicKey() {
884
- return chunk6YUACVX4_cjs.deriveDescriptorLeafCompressedPubKey(this.descriptor);
884
+ return chunk3OKEUDHU_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 && chunk3OKEUDHU_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 = chunk3OKEUDHU_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 chunk3OKEUDHU_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 chunk3OKEUDHU_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 chunk3OKEUDHU_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 } = chunk57636V35_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 = chunk3OKEUDHU_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 chunk57636V35_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: chunk57636V35_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 chunk57636V35_cjs.rateGate.runHttp(url, () => chunk57636V35_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[chunk57636V35_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 chunk57636V35_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 chunk57636V35_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 chunk57636V35_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 chunk57636V35_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 chunk57636V35_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 chunk57636V35_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 chunk57636V35_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 chunk57636V35_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,48 @@ 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
+ let tipBlocks = await chunk57636V35_cjs.baseFetch(`${this.baseUrl}/blocks`);
2042
+ if (tipBlocks.status === 404) {
2043
+ tipBlocks = await chunk57636V35_cjs.baseFetch(`${this.baseUrl}/v1/blocks`);
2044
+ }
1820
2045
  if (!tipBlocks.ok) {
1821
2046
  throw new Error(`Failed to get chain tip: ${tipBlocks.statusText}`);
1822
2047
  }
@@ -1830,12 +2055,14 @@ var EsploraProvider = class {
1830
2055
  const hash = tip[0].id;
1831
2056
  return {
1832
2057
  height: tip[0].height,
2058
+ // `mediantime`, never `timestamp`: the latter is the header's own
2059
+ // `nTime`, and this field is specified as MTP.
1833
2060
  time: tip[0].mediantime,
1834
2061
  hash
1835
2062
  };
1836
2063
  }
1837
2064
  async broadcastPackage(parent, child) {
1838
- const response = await chunkEJOFL5WH_cjs.baseFetch(`${this.baseUrl}/txs/package`, {
2065
+ const response = await chunk57636V35_cjs.baseFetch(`${this.baseUrl}/txs/package`, {
1839
2066
  method: "POST",
1840
2067
  headers: {
1841
2068
  "Content-Type": "application/json"
@@ -1851,7 +2078,7 @@ var EsploraProvider = class {
1851
2078
  return result;
1852
2079
  }
1853
2080
  async broadcastTx(tx) {
1854
- const response = await chunkEJOFL5WH_cjs.baseFetch(`${this.baseUrl}/tx`, {
2081
+ const response = await chunk57636V35_cjs.baseFetch(`${this.baseUrl}/tx`, {
1855
2082
  method: "POST",
1856
2083
  headers: {
1857
2084
  "Content-Type": "text/plain"
@@ -1895,6 +2122,9 @@ var isExplorerTransaction = (tx) => {
1895
2122
  (vout) => typeof vout.scriptpubkey_address === "string" && typeof vout.value === "number"
1896
2123
  ) && typeof tx.status === "object" && typeof tx.status.confirmed === "boolean";
1897
2124
  };
2125
+ var MAX_POLL_BACKOFF_EXPONENT = 4;
2126
+ var RECONNECT_BASE_DELAY_MS = 1e3;
2127
+ var MAX_RECONNECT_BACKOFF_EXPONENT = 5;
1898
2128
  var getVarIntSize = (n) => {
1899
2129
  if (n < 253) return 1;
1900
2130
  if (n <= 65535) return 3;
@@ -2031,7 +2261,7 @@ function findP2AOutput(tx) {
2031
2261
  var CHILD_DUST_AMOUNT = 546;
2032
2262
  function buildAnchorChild(params) {
2033
2263
  const { parent, feeRate, fundingCoins, changeAddress, tapInternalKey, network } = params;
2034
- const child = new chunkEJOFL5WH_cjs.Transaction({ version: 3, allowLegacyWitnessUtxo: true });
2264
+ const child = new chunk57636V35_cjs.Transaction({ version: 3, allowLegacyWitnessUtxo: true });
2035
2265
  child.addInput(findP2AOutput(parent));
2036
2266
  const estimator = TxWeightEstimator.create().addP2AInput();
2037
2267
  for (const _ of fundingCoins) {
@@ -2079,7 +2309,7 @@ function buildForfeitTx(inputs, forfeitPkScript, txLocktime) {
2079
2309
  );
2080
2310
  }
2081
2311
  function buildForfeitTxWithOutput(inputs, output, txLocktime) {
2082
- const tx = new chunkEJOFL5WH_cjs.Transaction({
2312
+ const tx = new chunk57636V35_cjs.Transaction({
2083
2313
  version: 3,
2084
2314
  lockTime: txLocktime
2085
2315
  });
@@ -2155,7 +2385,7 @@ function validateVtxoTxGraph(graph, roundTransaction, sweepTapTreeRoot) {
2155
2385
  if (previousScriptKey.length !== 32) {
2156
2386
  throw new Error(`parent output ${childIndex} has invalid script`);
2157
2387
  }
2158
- const cosigners = chunkEJOFL5WH_cjs.getArkPsbtFields(child.root, 0, chunkEJOFL5WH_cjs.CosignerPublicKey);
2388
+ const cosigners = chunk57636V35_cjs.getArkPsbtFields(child.root, 0, chunk57636V35_cjs.CosignerPublicKey);
2159
2389
  if (cosigners.length === 0) {
2160
2390
  throw ErrMissingCosignersPublicKeys;
2161
2391
  }
@@ -2213,7 +2443,7 @@ var EmulatorPacket = class _EmulatorPacket {
2213
2443
  return new _EmulatorPacket(entries);
2214
2444
  }
2215
2445
  static fromBytes(data) {
2216
- const reader = new chunkPJR63FTK_cjs.BufferReader(data);
2446
+ const reader = new chunk3KW4TWP2_cjs.BufferReader(data);
2217
2447
  const entryCount = reader.readCompactSize();
2218
2448
  const entries = [];
2219
2449
  for (let i = 0; i < entryCount; i++) {
@@ -2231,7 +2461,7 @@ var EmulatorPacket = class _EmulatorPacket {
2231
2461
  return _EmulatorPacket.PACKET_TYPE;
2232
2462
  }
2233
2463
  serialize() {
2234
- const writer = new chunkPJR63FTK_cjs.BufferWriter();
2464
+ const writer = new chunk3KW4TWP2_cjs.BufferWriter();
2235
2465
  writer.writeCompactSize(this.entries.length);
2236
2466
  for (const entry of this.entries) {
2237
2467
  writer.writeUint16LE(entry.vin);
@@ -2318,7 +2548,7 @@ var Extension = class _Extension {
2318
2548
  `expected magic prefix ${base.hex.encode(ARKADE_MAGIC)}, got ${base.hex.encode(payload.slice(0, Math.min(payload.length, ARKADE_MAGIC.length)))}`
2319
2549
  );
2320
2550
  }
2321
- const reader = new chunkPJR63FTK_cjs.BufferReader(payload.slice(ARKADE_MAGIC.length));
2551
+ const reader = new chunk3KW4TWP2_cjs.BufferReader(payload.slice(ARKADE_MAGIC.length));
2322
2552
  const packets = [];
2323
2553
  while (reader.remaining() > 0) {
2324
2554
  const packetType = reader.readByte();
@@ -2392,7 +2622,7 @@ var Extension = class _Extension {
2392
2622
  */
2393
2623
  getAssetPacket() {
2394
2624
  for (const p of this.packets) {
2395
- if (p instanceof chunkPJR63FTK_cjs.Packet) {
2625
+ if (p instanceof chunk3KW4TWP2_cjs.Packet) {
2396
2626
  return p;
2397
2627
  }
2398
2628
  }
@@ -2430,8 +2660,8 @@ var Extension = class _Extension {
2430
2660
  };
2431
2661
  function parsePacket(packetType, data) {
2432
2662
  switch (packetType) {
2433
- case chunkPJR63FTK_cjs.Packet.PACKET_TYPE:
2434
- return chunkPJR63FTK_cjs.Packet.fromBytes(data);
2663
+ case chunk3KW4TWP2_cjs.Packet.PACKET_TYPE:
2664
+ return chunk3KW4TWP2_cjs.Packet.fromBytes(data);
2435
2665
  case EmulatorPacket.PACKET_TYPE:
2436
2666
  return EmulatorPacket.fromBytes(data);
2437
2667
  default:
@@ -2478,16 +2708,16 @@ function buildOpReturnScript(data) {
2478
2708
  }
2479
2709
  return script;
2480
2710
  }
2481
- var ErrOffchainOutputNotFound = (address) => new chunkEJOFL5WH_cjs.ServerResponseMismatchError(`offchain send output not found: ${address}`);
2482
- var ErrInvalidAssetOutputAmount = (got, want, assetId) => new chunkEJOFL5WH_cjs.ServerResponseMismatchError(
2711
+ var ErrOffchainOutputNotFound = (address) => new chunk57636V35_cjs.ServerResponseMismatchError(`offchain send output not found: ${address}`);
2712
+ var ErrInvalidAssetOutputAmount = (got, want, assetId) => new chunk57636V35_cjs.ServerResponseMismatchError(
2483
2713
  `invalid asset output amount for ${assetId}: got ${got}, want ${want}`
2484
2714
  );
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(
2715
+ var ErrAssetGroupNotFound = (assetId) => new chunk57636V35_cjs.ServerResponseMismatchError(`asset group not found in batch leaf: ${assetId}`);
2716
+ var ErrAssetOutputNotFound = (assetId, outputIndex) => new chunk57636V35_cjs.ServerResponseMismatchError(
2487
2717
  `asset output not found in asset group ${assetId} at index ${outputIndex}`
2488
2718
  );
2489
- var ErrOnchainOutputNotFound = (address) => new chunkEJOFL5WH_cjs.ServerResponseMismatchError(`onchain output not found: ${address}`);
2490
- var ErrUnvalidatedOffchainOutput = (address) => new chunkEJOFL5WH_cjs.ServerResponseMismatchError(
2719
+ var ErrOnchainOutputNotFound = (address) => new chunk57636V35_cjs.ServerResponseMismatchError(`onchain output not found: ${address}`);
2720
+ var ErrUnvalidatedOffchainOutput = (address) => new chunk57636V35_cjs.ServerResponseMismatchError(
2491
2721
  `offchain output ${address} cannot be validated: virtual output tree signing did not run`
2492
2722
  );
2493
2723
  var ErrInvalidOnchainOutputAmount = (address) => new Error(`invalid onchain output amount: ${address}`);
@@ -2496,7 +2726,7 @@ var ErrInvalidOffchainOutputAmount = (address) => new Error(`invalid offchain ou
2496
2726
  function assertFinalCommitmentMatchesValidated(finalCommitmentTx, validatedCommitmentTxid, context) {
2497
2727
  if (!validatedCommitmentTxid) return;
2498
2728
  if (finalCommitmentTx.id === validatedCommitmentTxid) return;
2499
- throw new chunkEJOFL5WH_cjs.ServerResponseMismatchError(
2729
+ throw new chunk57636V35_cjs.ServerResponseMismatchError(
2500
2730
  `${context}: finalization commitment tx ${finalCommitmentTx.id} differs from the validated commitment tx ${validatedCommitmentTxid}`
2501
2731
  );
2502
2732
  }
@@ -2506,7 +2736,7 @@ function validateBatchRecipients(commitmentTx, vtxoTreeLeaves, recipients, netwo
2506
2736
  for (const recipient of recipients) {
2507
2737
  let arkAddress;
2508
2738
  try {
2509
- arkAddress = chunkEJOFL5WH_cjs.ArkAddress.decode(recipient.address);
2739
+ arkAddress = chunk57636V35_cjs.ArkAddress.decode(recipient.address);
2510
2740
  } catch {
2511
2741
  validateOnchainRecipient(commitmentTx, recipient, network, usedOnchainOutputs);
2512
2742
  continue;
@@ -2518,7 +2748,7 @@ function validateBatchRecipientsWithoutTree(commitmentTx, recipients, network) {
2518
2748
  const usedOnchainOutputs = /* @__PURE__ */ new Set();
2519
2749
  for (const recipient of recipients) {
2520
2750
  try {
2521
- chunkEJOFL5WH_cjs.ArkAddress.decode(recipient.address);
2751
+ chunk57636V35_cjs.ArkAddress.decode(recipient.address);
2522
2752
  } catch {
2523
2753
  validateOnchainRecipient(commitmentTx, recipient, network, usedOnchainOutputs);
2524
2754
  continue;
@@ -2751,7 +2981,7 @@ function assetMintResolver() {
2751
2981
  if (!tx.assets?.length || !tx.key.arkTxid) return void 0;
2752
2982
  const minted = tx.assets.filter((a) => {
2753
2983
  try {
2754
- return base.hex.encode(chunkPJR63FTK_cjs.AssetId.fromString(a.assetId).txid) === tx.key.arkTxid;
2984
+ return base.hex.encode(chunk3KW4TWP2_cjs.AssetId.fromString(a.assetId).txid) === tx.key.arkTxid;
2755
2985
  } catch {
2756
2986
  return false;
2757
2987
  }
@@ -2794,7 +3024,7 @@ function createAssetPacket(assetInputs, receivers, changeReceiver) {
2794
3024
  const existing = inputsByAssetId.get(asset.assetId);
2795
3025
  inputsByAssetId.set(asset.assetId, [
2796
3026
  ...existing ?? [],
2797
- chunkPJR63FTK_cjs.AssetInput.create(inputIndex, asset.amount)
3027
+ chunk3KW4TWP2_cjs.AssetInput.create(inputIndex, asset.amount)
2798
3028
  ]);
2799
3029
  }
2800
3030
  }
@@ -2806,7 +3036,7 @@ function createAssetPacket(assetInputs, receivers, changeReceiver) {
2806
3036
  const existing = outputsByAssetId.get(asset.assetId);
2807
3037
  outputsByAssetId.set(asset.assetId, [
2808
3038
  ...existing ?? [],
2809
- chunkPJR63FTK_cjs.AssetOutput.create(outputIndex, asset.amount)
3039
+ chunk3KW4TWP2_cjs.AssetOutput.create(outputIndex, asset.amount)
2810
3040
  ]);
2811
3041
  }
2812
3042
  }
@@ -2817,7 +3047,7 @@ function createAssetPacket(assetInputs, receivers, changeReceiver) {
2817
3047
  const existing = outputsByAssetId.get(asset.assetId);
2818
3048
  outputsByAssetId.set(asset.assetId, [
2819
3049
  ...existing ?? [],
2820
- chunkPJR63FTK_cjs.AssetOutput.create(outputIndex, asset.amount)
3050
+ chunk3KW4TWP2_cjs.AssetOutput.create(outputIndex, asset.amount)
2821
3051
  ]);
2822
3052
  }
2823
3053
  }
@@ -2826,11 +3056,11 @@ function createAssetPacket(assetInputs, receivers, changeReceiver) {
2826
3056
  for (const assetIdStr of allAssetIds) {
2827
3057
  const inputs = inputsByAssetId.get(assetIdStr);
2828
3058
  const outputs = outputsByAssetId.get(assetIdStr);
2829
- const assetId = chunkPJR63FTK_cjs.AssetId.fromString(assetIdStr);
2830
- const group = chunkPJR63FTK_cjs.AssetGroup.create(assetId, null, inputs ?? [], outputs ?? [], []);
3059
+ const assetId = chunk3KW4TWP2_cjs.AssetId.fromString(assetIdStr);
3060
+ const group = chunk3KW4TWP2_cjs.AssetGroup.create(assetId, null, inputs ?? [], outputs ?? [], []);
2831
3061
  groups.push(group);
2832
3062
  }
2833
- return chunkPJR63FTK_cjs.Packet.create(groups);
3063
+ return chunk3KW4TWP2_cjs.Packet.create(groups);
2834
3064
  }
2835
3065
  function selectCoinsWithAsset(coins, assetId, requiredAmount) {
2836
3066
  const coinsWithAsset = coins.filter((coin) => coin.assets?.some((a) => a.assetId === assetId));
@@ -2867,7 +3097,7 @@ function selectedCoinsToAssetInputs(selectedCoins) {
2867
3097
  }
2868
3098
  function toXOnlySignerHex(pubkeyHex) {
2869
3099
  const bytes = base.hex.decode(pubkeyHex);
2870
- if (bytes.length === 32 || bytes.length === 33) return base.hex.encode(chunk6YUACVX4_cjs.toXOnly(bytes, "signer key"));
3100
+ if (bytes.length === 32 || bytes.length === 33) return base.hex.encode(chunk3OKEUDHU_cjs.toXOnly(bytes, "signer key"));
2871
3101
  throw new Error(`invalid signer pubkey length: expected 32 or 33 bytes, got ${bytes.length}`);
2872
3102
  }
2873
3103
  function signerSetFromInfo(info) {
@@ -2914,13 +3144,13 @@ var toTimelock = (value) => ({
2914
3144
  var toSeconds = (t) => t.type === "seconds" ? t.value : t.value * NOMINAL_BLOCK_SECONDS;
2915
3145
  function assertTimelockInPolicy(timelock, policy, label, overrideOption) {
2916
3146
  if (policy.requireSeconds && timelock.type === "blocks") {
2917
- throw new chunkEJOFL5WH_cjs.ServerResponseMismatchError(
3147
+ throw new chunk57636V35_cjs.ServerResponseMismatchError(
2918
3148
  `${label} rejected: block-typed timelocks are not accepted (got ${timelock.value})`
2919
3149
  );
2920
3150
  }
2921
3151
  const seconds = toSeconds(timelock);
2922
3152
  if (seconds < policy.minSeconds) {
2923
- throw new chunkEJOFL5WH_cjs.ServerResponseMismatchError(
3153
+ throw new chunk57636V35_cjs.ServerResponseMismatchError(
2924
3154
  `${label} rejected: ${timelock.value} ${timelock.type} is below the ${policy.minSeconds}s floor; pass ${overrideOption}: ${seconds}n to Wallet.create to lower it`
2925
3155
  );
2926
3156
  }
@@ -2941,7 +3171,7 @@ function resolveBatchExpiryPolicy(network, overrides) {
2941
3171
  }
2942
3172
  function assertValidBatchExpiry(batchExpiry, policy) {
2943
3173
  if (policy.advertisedVtxoTreeExpiry !== void 0 && batchExpiry !== policy.advertisedVtxoTreeExpiry) {
2944
- throw new chunkEJOFL5WH_cjs.ServerResponseMismatchError(
3174
+ throw new chunk57636V35_cjs.ServerResponseMismatchError(
2945
3175
  `batch expiry rejected: ${batchExpiry} does not match the advertised vtxoTreeExpiry ${policy.advertisedVtxoTreeExpiry}`
2946
3176
  );
2947
3177
  }
@@ -2971,21 +3201,21 @@ function resolveCheckpointExitDelayPolicy(network, overrides) {
2971
3201
  function assertValidServerUnrollScript(checkpointTapscript, policy) {
2972
3202
  let script;
2973
3203
  try {
2974
- script = chunkEJOFL5WH_cjs.CSVMultisigTapscript.decode(base.hex.decode(checkpointTapscript));
3204
+ script = chunk57636V35_cjs.CSVMultisigTapscript.decode(base.hex.decode(checkpointTapscript));
2975
3205
  } catch (e) {
2976
- throw new chunkEJOFL5WH_cjs.ServerResponseMismatchError(
3206
+ throw new chunk57636V35_cjs.ServerResponseMismatchError(
2977
3207
  `checkpoint exit delay rejected: invalid checkpointTapscript from server (${e instanceof Error ? e.message : String(e)})`
2978
3208
  );
2979
3209
  }
2980
3210
  if (policy.advertisedForfeitPubkey !== void 0) {
2981
3211
  const { pubkeys } = script.params;
2982
3212
  if (pubkeys.length !== 1) {
2983
- throw new chunkEJOFL5WH_cjs.ServerResponseMismatchError(
3213
+ throw new chunk57636V35_cjs.ServerResponseMismatchError(
2984
3214
  `checkpoint exit delay rejected: checkpointTapscript must commit to exactly one pubkey, got ${pubkeys.length} [${pubkeys.map(base.hex.encode).join(", ")}]`
2985
3215
  );
2986
3216
  }
2987
3217
  if (!utils_js.equalBytes(pubkeys[0], policy.advertisedForfeitPubkey)) {
2988
- throw new chunkEJOFL5WH_cjs.ServerResponseMismatchError(
3218
+ throw new chunk57636V35_cjs.ServerResponseMismatchError(
2989
3219
  `checkpoint exit delay rejected: checkpointTapscript pubkey ${base.hex.encode(pubkeys[0])} does not match the advertised forfeitPubkey ${base.hex.encode(policy.advertisedForfeitPubkey)}`
2990
3220
  );
2991
3221
  }
@@ -3029,8 +3259,8 @@ function buildOffchainTx(inputs, outputs, serverUnrollScript) {
3029
3259
  function buildVirtualTx(inputs, outputs) {
3030
3260
  let lockTime = 0n;
3031
3261
  for (const input of inputs) {
3032
- const tapscript = chunkEJOFL5WH_cjs.decodeTapscript(chunkEJOFL5WH_cjs.scriptFromTapLeafScript(input.tapLeafScript));
3033
- if (chunkEJOFL5WH_cjs.CLTVMultisigTapscript.is(tapscript)) {
3262
+ const tapscript = chunk57636V35_cjs.decodeTapscript(chunk57636V35_cjs.scriptFromTapLeafScript(input.tapLeafScript));
3263
+ if (chunk57636V35_cjs.CLTVMultisigTapscript.is(tapscript)) {
3034
3264
  if (lockTime !== 0n) {
3035
3265
  if (isSeconds(lockTime) !== isSeconds(tapscript.params.absoluteTimelock)) {
3036
3266
  throw new Error("cannot mix seconds and blocks locktime");
@@ -3041,7 +3271,7 @@ function buildVirtualTx(inputs, outputs) {
3041
3271
  }
3042
3272
  }
3043
3273
  }
3044
- const tx = new chunkEJOFL5WH_cjs.Transaction({
3274
+ const tx = new chunk57636V35_cjs.Transaction({
3045
3275
  version: 3,
3046
3276
  lockTime: Number(lockTime)
3047
3277
  });
@@ -3051,12 +3281,12 @@ function buildVirtualTx(inputs, outputs) {
3051
3281
  index: input.vout,
3052
3282
  sequence: lockTime ? btcSigner.DEFAULT_SEQUENCE - 1 : void 0,
3053
3283
  witnessUtxo: {
3054
- script: chunkEJOFL5WH_cjs.VtxoScript.decode(input.tapTree).pkScript,
3284
+ script: chunk57636V35_cjs.VtxoScript.decode(input.tapTree).pkScript,
3055
3285
  amount: BigInt(input.value)
3056
3286
  },
3057
3287
  tapLeafScript: [input.tapLeafScript]
3058
3288
  });
3059
- chunkEJOFL5WH_cjs.setArkPsbtField(tx, i, chunkEJOFL5WH_cjs.VtxoTaprootTree, input.tapTree);
3289
+ chunk57636V35_cjs.setArkPsbtField(tx, i, chunk57636V35_cjs.VtxoTaprootTree, input.tapTree);
3060
3290
  }
3061
3291
  for (const output of outputs) {
3062
3292
  tx.addOutput(output);
@@ -3065,8 +3295,8 @@ function buildVirtualTx(inputs, outputs) {
3065
3295
  return tx;
3066
3296
  }
3067
3297
  function buildCheckpointTx(vtxo, serverUnrollScript) {
3068
- const collaborativeClosure = chunkEJOFL5WH_cjs.decodeTapscript(chunkEJOFL5WH_cjs.scriptFromTapLeafScript(vtxo.tapLeafScript));
3069
- const checkpointVtxoScript = new chunkEJOFL5WH_cjs.VtxoScript([
3298
+ const collaborativeClosure = chunk57636V35_cjs.decodeTapscript(chunk57636V35_cjs.scriptFromTapLeafScript(vtxo.tapLeafScript));
3299
+ const checkpointVtxoScript = new chunk57636V35_cjs.VtxoScript([
3070
3300
  serverUnrollScript.script,
3071
3301
  collaborativeClosure.script
3072
3302
  ]);
@@ -3142,7 +3372,7 @@ function verifyTapscriptSignatures(tx, inputIndex, requiredSigners, excludePubke
3142
3372
  const sighashType = signature.length === 65 ? signature[64] : btcSigner.SigHash.DEFAULT;
3143
3373
  const sig = signature.subarray(0, 64);
3144
3374
  if (!allowedSighashTypes.includes(sighashType)) {
3145
- const sighashName = chunkEJOFL5WH_cjs.formatSighash(sighashType);
3375
+ const sighashName = chunk57636V35_cjs.formatSighash(sighashType);
3146
3376
  throw new Error(
3147
3377
  `Unallowed sighash type ${sighashName} for input ${inputIndex}, pubkey ${pubKeyHex}.`
3148
3378
  );
@@ -3216,7 +3446,7 @@ function combineTapscriptSigs(signedTx, originalTx) {
3216
3446
  }
3217
3447
  function isValidArkAddress(address) {
3218
3448
  try {
3219
- chunkEJOFL5WH_cjs.ArkAddress.decode(address);
3449
+ chunk57636V35_cjs.ArkAddress.decode(address);
3220
3450
  return true;
3221
3451
  } catch (e) {
3222
3452
  return false;
@@ -3224,16 +3454,16 @@ function isValidArkAddress(address) {
3224
3454
  }
3225
3455
  function matchServerCheckpoints(serverCheckpointTxs, expectedCheckpoints, context) {
3226
3456
  if (serverCheckpointTxs.length !== expectedCheckpoints.length) {
3227
- throw new chunkEJOFL5WH_cjs.ServerResponseMismatchError(
3457
+ throw new chunk57636V35_cjs.ServerResponseMismatchError(
3228
3458
  `${context} returned ${serverCheckpointTxs.length} checkpoints, expected ${expectedCheckpoints.length}`
3229
3459
  );
3230
3460
  }
3231
3461
  const byTxid = new Map(expectedCheckpoints.map((c) => [c.id, c]));
3232
3462
  return serverCheckpointTxs.map((encoded, index) => {
3233
- const server = chunkEJOFL5WH_cjs.Transaction.fromPSBT(base.base64.decode(encoded));
3463
+ const server = chunk57636V35_cjs.Transaction.fromPSBT(base.base64.decode(encoded));
3234
3464
  const local = byTxid.get(server.id);
3235
3465
  if (!local) {
3236
- throw new chunkEJOFL5WH_cjs.ServerResponseMismatchError(
3466
+ throw new chunk57636V35_cjs.ServerResponseMismatchError(
3237
3467
  `${context} checkpoint ${index} txid ${server.id} does not match any submitted checkpoint`
3238
3468
  );
3239
3469
  }
@@ -3243,14 +3473,14 @@ function matchServerCheckpoints(serverCheckpointTxs, expectedCheckpoints, contex
3243
3473
  }
3244
3474
  function assertSubmittedArkTxid(response, signedArkTx, context) {
3245
3475
  if (response.arkTxid !== signedArkTx.id) {
3246
- throw new chunkEJOFL5WH_cjs.ServerResponseMismatchError(
3476
+ throw new chunk57636V35_cjs.ServerResponseMismatchError(
3247
3477
  `${context} returned ark txid ${response.arkTxid}, expected ${signedArkTx.id}`
3248
3478
  );
3249
3479
  }
3250
3480
  if (response.finalArkTx === void 0) return;
3251
- const finalTxid = chunkEJOFL5WH_cjs.Transaction.fromPSBT(base.base64.decode(response.finalArkTx)).id;
3481
+ const finalTxid = chunk57636V35_cjs.Transaction.fromPSBT(base.base64.decode(response.finalArkTx)).id;
3252
3482
  if (finalTxid !== signedArkTx.id) {
3253
- throw new chunkEJOFL5WH_cjs.ServerResponseMismatchError(
3483
+ throw new chunk57636V35_cjs.ServerResponseMismatchError(
3254
3484
  `${context} returned final ark tx ${finalTxid}, expected ${signedArkTx.id}`
3255
3485
  );
3256
3486
  }
@@ -3269,10 +3499,10 @@ function assertServerSignedLeaf(serverTx, localTx, inputIndex, serverPubkeyHex,
3269
3499
  [serverPubkeyHex],
3270
3500
  void 0,
3271
3501
  void 0,
3272
- payment_js.tapLeafHash(chunkEJOFL5WH_cjs.scriptFromTapLeafScript(leaf))
3502
+ payment_js.tapLeafHash(chunk57636V35_cjs.scriptFromTapLeafScript(leaf))
3273
3503
  );
3274
3504
  } catch (error) {
3275
- throw new chunkEJOFL5WH_cjs.ServerResponseMismatchError(
3505
+ throw new chunk57636V35_cjs.ServerResponseMismatchError(
3276
3506
  `${context}: input ${inputIndex} is not signed by the server on the leaf being spent (${error instanceof Error ? error.message : String(error)})`
3277
3507
  );
3278
3508
  }
@@ -3281,20 +3511,20 @@ function assertCheckpointsMatchInputs(checkpoints, inputs, unrollCandidates, con
3281
3511
  const byOutpoint = new Map(inputs.map((input) => [`${input.txid}:${input.vout}`, input]));
3282
3512
  for (const [index, checkpoint] of checkpoints.entries()) {
3283
3513
  if (checkpoint.inputsLength !== 1) {
3284
- throw new chunkEJOFL5WH_cjs.ServerResponseMismatchError(
3514
+ throw new chunk57636V35_cjs.ServerResponseMismatchError(
3285
3515
  `${context}: checkpoint ${index} spends ${checkpoint.inputsLength} inputs, expected 1`
3286
3516
  );
3287
3517
  }
3288
3518
  const spent = checkpoint.getInput(0);
3289
3519
  if (!spent.txid || spent.index === void 0) {
3290
- throw new chunkEJOFL5WH_cjs.ServerResponseMismatchError(
3520
+ throw new chunk57636V35_cjs.ServerResponseMismatchError(
3291
3521
  `${context}: checkpoint ${index} has no input outpoint`
3292
3522
  );
3293
3523
  }
3294
3524
  const outpoint = `${base.hex.encode(spent.txid)}:${spent.index}`;
3295
3525
  const input = byOutpoint.get(outpoint);
3296
3526
  if (!input) {
3297
- throw new chunkEJOFL5WH_cjs.ServerResponseMismatchError(
3527
+ throw new chunk57636V35_cjs.ServerResponseMismatchError(
3298
3528
  `${context}: checkpoint ${index} spends ${outpoint}, which is not one of the requested virtual outputs`
3299
3529
  );
3300
3530
  }
@@ -3302,7 +3532,7 @@ function assertCheckpointsMatchInputs(checkpoints, inputs, unrollCandidates, con
3302
3532
  (unroll) => buildCheckpointTx(input, unroll).tx.id === checkpoint.id
3303
3533
  );
3304
3534
  if (!rebuilt) {
3305
- throw new chunkEJOFL5WH_cjs.ServerResponseMismatchError(
3535
+ throw new chunk57636V35_cjs.ServerResponseMismatchError(
3306
3536
  `${context}: checkpoint ${index} txid ${checkpoint.id} differs from the checkpoint built locally for ${outpoint}`
3307
3537
  );
3308
3538
  }
@@ -3328,9 +3558,9 @@ async function submitOffchainTx(provider, offchainTx, signer, hooks, options) {
3328
3558
  const matched = matchServerCheckpoints(signedCheckpointTxs, offchainTx.checkpoints, "submitTx");
3329
3559
  matched.forEach(({ server }, index) => {
3330
3560
  try {
3331
- chunkEJOFL5WH_cjs.assertAllowedSighashTypes(server);
3561
+ chunk57636V35_cjs.assertAllowedSighashTypes(server);
3332
3562
  } catch (error) {
3333
- throw new chunkEJOFL5WH_cjs.ServerResponseMismatchError(
3563
+ throw new chunk57636V35_cjs.ServerResponseMismatchError(
3334
3564
  `submitTx checkpoint ${index}: ${error instanceof Error ? error.message : String(error)}`
3335
3565
  );
3336
3566
  }
@@ -3338,12 +3568,12 @@ async function submitOffchainTx(provider, offchainTx, signer, hooks, options) {
3338
3568
  const verify = options?.verifyServerSignatures;
3339
3569
  if (verify) {
3340
3570
  if (response.finalArkTx === void 0) {
3341
- throw new chunkEJOFL5WH_cjs.ServerResponseMismatchError(
3571
+ throw new chunk57636V35_cjs.ServerResponseMismatchError(
3342
3572
  "submitTx: server returned no final ark tx to verify its signatures against"
3343
3573
  );
3344
3574
  }
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"));
3575
+ const finalArkTx = chunk57636V35_cjs.Transaction.fromPSBT(base.base64.decode(response.finalArkTx));
3576
+ const serverPubkeyHex = base.hex.encode(chunk3OKEUDHU_cjs.toXOnly(verify.serverPubkey, "server key"));
3347
3577
  for (let i = 0; i < offchainTx.arkTx.inputsLength; i++) {
3348
3578
  assertServerSignedLeaf(
3349
3579
  finalArkTx,
@@ -3399,12 +3629,12 @@ function claimWithPreimageIdentity(identity, preimage) {
3399
3629
  return {
3400
3630
  ...identity,
3401
3631
  sign: async (tx, inputIndexes) => {
3402
- const signed = chunkEJOFL5WH_cjs.Transaction.fromPSBT(
3632
+ const signed = chunk57636V35_cjs.Transaction.fromPSBT(
3403
3633
  (await identity.sign(tx.clone(), inputIndexes)).toPSBT()
3404
3634
  );
3405
3635
  const indexes = inputIndexes ?? Array.from({ length: signed.inputsLength }, (_, i) => i);
3406
3636
  for (const index of indexes) {
3407
- chunkEJOFL5WH_cjs.setArkPsbtField(signed, index, chunkEJOFL5WH_cjs.ConditionWitness, [preimage]);
3637
+ chunk57636V35_cjs.setArkPsbtField(signed, index, chunk57636V35_cjs.ConditionWitness, [preimage]);
3408
3638
  }
3409
3639
  return signed;
3410
3640
  }
@@ -3596,7 +3826,7 @@ function extendCoinWithTapscript(boardingTapscript, utxo) {
3596
3826
  };
3597
3827
  }
3598
3828
  function deriveContractTapscripts(contract) {
3599
- const handler = chunk6YUACVX4_cjs.contractHandlers.get(contract.type);
3829
+ const handler = chunk3OKEUDHU_cjs.contractHandlers.get(contract.type);
3600
3830
  if (!handler) {
3601
3831
  throw new Error(`No handler for contract type '${contract.type}'`);
3602
3832
  }
@@ -3667,7 +3897,7 @@ function getRandomId() {
3667
3897
  }
3668
3898
  function isValidArkAddress2(address) {
3669
3899
  try {
3670
- chunkEJOFL5WH_cjs.ArkAddress.decode(address);
3900
+ chunk57636V35_cjs.ArkAddress.decode(address);
3671
3901
  return true;
3672
3902
  } catch (e) {
3673
3903
  return false;
@@ -3695,7 +3925,7 @@ function assertRecipientArkAddress(encoded, address, context) {
3695
3925
  function assertTapTreeDerivesAddress(encoded, tapTree, address) {
3696
3926
  let derived;
3697
3927
  try {
3698
- derived = chunkEJOFL5WH_cjs.VtxoScript.decode(tapTree).pkScript;
3928
+ derived = chunk57636V35_cjs.VtxoScript.decode(tapTree).pkScript;
3699
3929
  } catch (e) {
3700
3930
  throw new Error(
3701
3931
  `Invalid tapTree for ${encoded}: ${e instanceof Error ? e.message : String(e)}`
@@ -3712,7 +3942,7 @@ function validateRecipients(recipients, dustAmount, context) {
3712
3942
  for (const recipient of recipients) {
3713
3943
  let address;
3714
3944
  try {
3715
- address = chunkEJOFL5WH_cjs.ArkAddress.decode(recipient.address);
3945
+ address = chunk57636V35_cjs.ArkAddress.decode(recipient.address);
3716
3946
  } catch (e) {
3717
3947
  throw new Error(`Invalid Arkade address: ${recipient.address}`);
3718
3948
  }
@@ -3737,7 +3967,7 @@ function validateRecipients(recipients, dustAmount, context) {
3737
3967
 
3738
3968
  // src/contracts/spendability.ts
3739
3969
  function isContractGenericallySpendable(contract) {
3740
- return chunk6YUACVX4_cjs.contractHandlers.get(contract.type)?.isGenericallySpendable?.(contract) === true;
3970
+ return chunk3OKEUDHU_cjs.contractHandlers.get(contract.type)?.isGenericallySpendable?.(contract) === true;
3741
3971
  }
3742
3972
  function gatedContracts(contracts) {
3743
3973
  const gated = /* @__PURE__ */ new Map();
@@ -3750,7 +3980,7 @@ function gateExclusion(gated) {
3750
3980
  return (vtxo) => {
3751
3981
  const type = vtxo.script === void 0 ? void 0 : gated.get(vtxo.script);
3752
3982
  if (type === void 0) return void 0;
3753
- if (!chunk6YUACVX4_cjs.contractHandlers.has(type)) {
3983
+ if (!chunk3OKEUDHU_cjs.contractHandlers.has(type)) {
3754
3984
  return `at ${vtxo.script} (contract type '${type}') has no handler registered in this build`;
3755
3985
  }
3756
3986
  return `at ${vtxo.script} (contract type '${type}') is not generically spendable`;
@@ -3786,7 +4016,7 @@ function selectPendingRecoveryOutpoints(contractsWithVtxos, signerSet, nowSecond
3786
4016
  continue;
3787
4017
  }
3788
4018
  for (const v of vtxos) {
3789
- if (!chunkEJOFL5WH_cjs.hasTerminalSpend(v) && !v.isSwept && !v.isUnrolled) {
4019
+ if (!chunk57636V35_cjs.hasTerminalSpend(v) && !v.isSwept && !v.isUnrolled) {
3790
4020
  out.add(`${v.txid}:${v.vout}`);
3791
4021
  }
3792
4022
  }
@@ -3821,10 +4051,10 @@ function byValueDescending(vtxos) {
3821
4051
  return [...vtxos].sort((a, b) => b.value - a.value);
3822
4052
  }
3823
4053
  async function fetchTimeHeight(wallet) {
3824
- return chunkEJOFL5WH_cjs.resolveTimeHeight(wallet.onchainProvider);
4054
+ return chunk57636V35_cjs.resolveTimeHeight(wallet.onchainProvider);
3825
4055
  }
3826
4056
  function canMigrateBySend(vtxo, now) {
3827
- if (!chunkEJOFL5WH_cjs.canSpendOffchain(vtxo, now)) return false;
4057
+ if (!chunk57636V35_cjs.canSpendOffchain(vtxo, now)) return false;
3828
4058
  return vtxo.expiresAt !== void 0 || vtxo.expiresAtHeight !== void 0;
3829
4059
  }
3830
4060
  function byExpiryAscending(vtxos, now) {
@@ -3832,7 +4062,7 @@ function byExpiryAscending(vtxos, now) {
3832
4062
  if (vtxo.isSwept) return -Infinity;
3833
4063
  if (vtxo.expiresAt !== void 0) return vtxo.expiresAt.getTime();
3834
4064
  if (vtxo.expiresAtHeight !== void 0) {
3835
- return chunkEJOFL5WH_cjs.isPastExpiry(vtxo, now) ? -Infinity : Infinity;
4065
+ return chunk57636V35_cjs.isPastExpiry(vtxo, now) ? -Infinity : Infinity;
3836
4066
  }
3837
4067
  return Infinity;
3838
4068
  };
@@ -3859,7 +4089,7 @@ function priceSettlementInputs(vtxos, estimator) {
3859
4089
  const payable = [];
3860
4090
  const net = /* @__PURE__ */ new Map();
3861
4091
  for (const vtxo of vtxos) {
3862
- const inputFee = estimator.evalOffchainInput(chunkEJOFL5WH_cjs.toOffchainInputFeeParams(vtxo));
4092
+ const inputFee = estimator.evalOffchainInput(chunk57636V35_cjs.toOffchainInputFeeParams(vtxo));
3863
4093
  if (inputFee.satoshis >= vtxo.value) {
3864
4094
  continue;
3865
4095
  }
@@ -3885,7 +4115,7 @@ function deductOffchainOutputFee(subtotal, estimator, arkAddress) {
3885
4115
  }
3886
4116
  const outputFee = estimator.evalOffchainOutput({
3887
4117
  amount: subtotal,
3888
- script: base.hex.encode(chunkEJOFL5WH_cjs.ArkAddress.decode(arkAddress).pkScript)
4118
+ script: base.hex.encode(chunk57636V35_cjs.ArkAddress.decode(arkAddress).pkScript)
3889
4119
  });
3890
4120
  return subtotal - BigInt(outputFee.satoshis);
3891
4121
  }
@@ -3903,10 +4133,10 @@ var DEFAULT_SETTLEMENT_CONFIG = {
3903
4133
  };
3904
4134
  function getRecoverableVtxos(vtxos, dustAmount, now) {
3905
4135
  return vtxos.filter((vtxo) => {
3906
- if (chunkEJOFL5WH_cjs.canRecoverOnchain(vtxo, now)) {
4136
+ if (chunk57636V35_cjs.canRecoverOnchain(vtxo, now)) {
3907
4137
  return true;
3908
4138
  }
3909
- if (chunkEJOFL5WH_cjs.canSpendOffchain(vtxo, now) && vtxo.isPreconfirmed && isSubdust(vtxo, dustAmount)) {
4139
+ if (chunk57636V35_cjs.canSpendOffchain(vtxo, now) && vtxo.isPreconfirmed && isSubdust(vtxo, dustAmount)) {
3910
4140
  return true;
3911
4141
  }
3912
4142
  return false;
@@ -3938,7 +4168,7 @@ function getRecoverableWithSubdust(vtxos, dustAmount, now) {
3938
4168
  function isVtxoExpiringSoon(vtxo, thresholdMs) {
3939
4169
  if (vtxo.isUnrolled) return false;
3940
4170
  const realThresholdMs = thresholdMs <= 100 ? DEFAULT_THRESHOLD_MS : thresholdMs;
3941
- const expiresAt = chunkEJOFL5WH_cjs.normalizeVtxo(vtxo).expiresAt;
4171
+ const expiresAt = chunk57636V35_cjs.normalizeVtxo(vtxo).expiresAt;
3942
4172
  if (expiresAt === void 0) return false;
3943
4173
  const now = Date.now();
3944
4174
  const batchExpiry = expiresAt.getTime();
@@ -3949,7 +4179,7 @@ function getExpiringAndRecoverableVtxos(vtxos, thresholdMs, dustAmount, now) {
3949
4179
  return vtxos.filter(
3950
4180
  // The leading exclusion covers the `isSubdust` arm too, which is a value
3951
4181
  // 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))
4182
+ (vtxo) => !vtxo.isUnrolled && (isVtxoExpiringSoon(vtxo, thresholdMs) || chunk57636V35_cjs.canRecoverOnchain(vtxo, now) || isSubdust(vtxo, dustAmount))
3953
4183
  );
3954
4184
  }
3955
4185
  function isMigrationCapable(wallet) {
@@ -4548,11 +4778,11 @@ var VtxoManager = class _VtxoManager {
4548
4778
  `Sweep not economical: output ${outputAmount} sats after ${fee} sats fee is below dust (${dustAmount} sats)`
4549
4779
  );
4550
4780
  }
4551
- const tx = new chunkEJOFL5WH_cjs.Transaction();
4781
+ const tx = new chunk57636V35_cjs.Transaction();
4552
4782
  for (const utxo of expiredUtxos) {
4553
- const utxoScript = chunkEJOFL5WH_cjs.VtxoScript.decode(utxo.tapTree);
4783
+ const utxoScript = chunk57636V35_cjs.VtxoScript.decode(utxo.tapTree);
4554
4784
  const utxoExitLeaf = utxoScript.leaves.find(
4555
- (leaf) => chunkEJOFL5WH_cjs.CSVMultisigTapscript.isScriptValid(chunkEJOFL5WH_cjs.scriptFromTapLeafScript(leaf)) === true
4785
+ (leaf) => chunk57636V35_cjs.CSVMultisigTapscript.isScriptValid(chunk57636V35_cjs.scriptFromTapLeafScript(leaf)) === true
4556
4786
  );
4557
4787
  if (!utxoExitLeaf) {
4558
4788
  throw new Error(
@@ -4567,7 +4797,7 @@ var VtxoManager = class _VtxoManager {
4567
4797
  amount: BigInt(utxo.value)
4568
4798
  },
4569
4799
  tapLeafScript: [utxoExitLeaf],
4570
- sequence: chunkEJOFL5WH_cjs.getSequence(utxoExitLeaf)
4800
+ sequence: chunk57636V35_cjs.getSequence(utxoExitLeaf)
4571
4801
  });
4572
4802
  }
4573
4803
  tx.addOutputAddress(boardingAddress, outputAmount, this.getNetwork());
@@ -4810,8 +5040,8 @@ var VtxoManager = class _VtxoManager {
4810
5040
  const cls = classifyAgainstSignerSet(serverPubKey, signerSet, nowSeconds);
4811
5041
  if (cls.status === "CURRENT") continue;
4812
5042
  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);
5043
+ const recoverable = live.filter((v) => v.isSwept && !chunk57636V35_cjs.hasTerminalSpend(v));
5044
+ const spendable = live.filter((v) => !chunk57636V35_cjs.hasTerminalSpend(v) && !v.isSwept);
4815
5045
  const value = spendable.reduce((sum, v) => sum + v.value, 0);
4816
5046
  let recoverableCount = 0;
4817
5047
  let recoverableValue = 0;
@@ -4824,7 +5054,7 @@ var VtxoManager = class _VtxoManager {
4824
5054
  awaitingSweepCount = spendable.length;
4825
5055
  awaitingSweepValue = value;
4826
5056
  for (const v of spendable) {
4827
- const exp = chunkEJOFL5WH_cjs.toBatchExpiry(v);
5057
+ const exp = chunk57636V35_cjs.toBatchExpiry(v);
4828
5058
  if (exp !== void 0 && (nextSweepEta === void 0 || exp < nextSweepEta)) {
4829
5059
  nextSweepEta = exp;
4830
5060
  }
@@ -5085,7 +5315,7 @@ var VtxoManager = class _VtxoManager {
5085
5315
  /** Decodes the boarding tapscript exit path to extract the CSV timelock. */
5086
5316
  getBoardingTimelock() {
5087
5317
  const wallet = this.getSweepWallet();
5088
- const exitScript = chunkEJOFL5WH_cjs.CSVMultisigTapscript.decode(
5318
+ const exitScript = chunk57636V35_cjs.CSVMultisigTapscript.decode(
5089
5319
  base.hex.decode(wallet.boardingTapscript.exitScript)
5090
5320
  );
5091
5321
  return exitScript.params.timelock;
@@ -5216,8 +5446,8 @@ var VtxoManager = class _VtxoManager {
5216
5446
  * or doesn't carry the metadata.
5217
5447
  */
5218
5448
  extractSpentOutpoint(error) {
5219
- const ark = chunkEJOFL5WH_cjs.maybeArkError(error);
5220
- if (!chunkEJOFL5WH_cjs.isArkError(ark, chunkEJOFL5WH_cjs.ArkErrorName.VTXO_ALREADY_SPENT)) return void 0;
5449
+ const ark = chunk57636V35_cjs.maybeArkError(error);
5450
+ if (!chunk57636V35_cjs.isArkError(ark, chunk57636V35_cjs.ArkErrorName.VTXO_ALREADY_SPENT)) return void 0;
5221
5451
  const raw = ark.metadata?.vtxo_outpoint;
5222
5452
  if (typeof raw !== "string") return void 0;
5223
5453
  const [txid, voutStr] = raw.split(":");
@@ -5407,7 +5637,7 @@ var VtxoManager = class _VtxoManager {
5407
5637
  if (filteredVtxos.length >= MAX_VTXOS_PER_SETTLEMENT) {
5408
5638
  break;
5409
5639
  }
5410
- const inputFee = estimator.evalOffchainInput(chunkEJOFL5WH_cjs.toOffchainInputFeeParams(v));
5640
+ const inputFee = estimator.evalOffchainInput(chunk57636V35_cjs.toOffchainInputFeeParams(v));
5411
5641
  if (inputFee.satoshis >= v.value) {
5412
5642
  continue;
5413
5643
  }
@@ -5427,7 +5657,7 @@ var VtxoManager = class _VtxoManager {
5427
5657
  const arkAddress = await this.wallet.getAddress();
5428
5658
  const outputFee = estimator.evalOffchainOutput({
5429
5659
  amount: totalAmount,
5430
- script: base.hex.encode(chunkEJOFL5WH_cjs.ArkAddress.decode(arkAddress).pkScript)
5660
+ script: base.hex.encode(chunk57636V35_cjs.ArkAddress.decode(arkAddress).pkScript)
5431
5661
  });
5432
5662
  totalAmount -= BigInt(outputFee.satoshis);
5433
5663
  if (totalAmount < dustAmount) return;
@@ -5507,7 +5737,7 @@ var ArkNote = class _ArkNote {
5507
5737
  this.value = value;
5508
5738
  this.HRP = HRP;
5509
5739
  const preimageHash = utils_js.sha256(this.preimage);
5510
- this.vtxoScript = new chunkEJOFL5WH_cjs.VtxoScript([noteTapscript(preimageHash)]);
5740
+ this.vtxoScript = new chunk57636V35_cjs.VtxoScript([noteTapscript(preimageHash)]);
5511
5741
  const leaf = this.vtxoScript.leaves[0];
5512
5742
  this.txid = base.hex.encode(new Uint8Array(preimageHash).reverse());
5513
5743
  this.tapTree = this.vtxoScript.encode();
@@ -5674,7 +5904,7 @@ var ArkadeCash = class _ArkadeCash {
5674
5904
  const privateKey = data.slice(1, 33);
5675
5905
  const serverPubKey = data.slice(33, 65);
5676
5906
  const sequence = new DataView(data.buffer, data.byteOffset + 65, 4).getUint32(0, false);
5677
- const csvTimelock = chunkEJOFL5WH_cjs.sequenceToTimelock(sequence);
5907
+ const csvTimelock = chunk57636V35_cjs.sequenceToTimelock(sequence);
5678
5908
  return new _ArkadeCash(privateKey, serverPubKey, csvTimelock, decoded.prefix);
5679
5909
  }
5680
5910
  toString() {
@@ -5682,7 +5912,7 @@ var ArkadeCash = class _ArkadeCash {
5682
5912
  data[0] = _ArkadeCash.Version;
5683
5913
  data.set(this._privateKey, 1);
5684
5914
  data.set(this._serverPubKey, 33);
5685
- const sequence = chunkEJOFL5WH_cjs.timelockToSequence(this.csvTimelock);
5915
+ const sequence = chunk57636V35_cjs.timelockToSequence(this.csvTimelock);
5686
5916
  new DataView(data.buffer, data.byteOffset + 65, 4).setUint32(0, sequence, false);
5687
5917
  const words = base.bech32m.toWords(data);
5688
5918
  return base.bech32m.encode(this.hrp, words, 1023);
@@ -5691,7 +5921,7 @@ var ArkadeCash = class _ArkadeCash {
5691
5921
  return SingleKey.fromPrivateKey(this._privateKey);
5692
5922
  }
5693
5923
  get vtxoScript() {
5694
- return new chunk6YUACVX4_cjs.DefaultVtxo.Script({
5924
+ return new chunk3OKEUDHU_cjs.DefaultVtxo.Script({
5695
5925
  pubKey: this._publicKey,
5696
5926
  serverPubKey: this._serverPubKey,
5697
5927
  csvTimelock: this.csvTimelock
@@ -5952,7 +6182,7 @@ async function captureExitBranch(params) {
5952
6182
  const nonCommitment = ordered.filter((c) => chainTxTypeToChainedExit(c.type) !== 1 /* Commitment */).map((c) => c.txid);
5953
6183
  if (nonCommitment.length > 0) {
5954
6184
  for (const psbt of await resolver.getVirtualTxs(nonCommitment)) {
5955
- psbtByTxid.set(chunkEJOFL5WH_cjs.Transaction.fromPSBT(base.base64.decode(psbt)).id, psbt);
6185
+ psbtByTxid.set(chunk57636V35_cjs.Transaction.fromPSBT(base.base64.decode(psbt)).id, psbt);
5956
6186
  }
5957
6187
  }
5958
6188
  }
@@ -5995,10 +6225,10 @@ var IndexerExitDataSource = class {
5995
6225
  while (hasMore) {
5996
6226
  const { chain: page, page: meta } = await this.indexer.getVtxoChain(
5997
6227
  { txid: vtxo.txid, vout: vtxo.vout },
5998
- { pageIndex, pageSize: chunkEJOFL5WH_cjs.DEFAULT_PAGE_SIZE }
6228
+ { pageIndex, pageSize: chunk57636V35_cjs.DEFAULT_PAGE_SIZE }
5999
6229
  );
6000
6230
  chain.push(...page);
6001
- hasMore = meta ? page.length === chunkEJOFL5WH_cjs.DEFAULT_PAGE_SIZE : false;
6231
+ hasMore = meta ? page.length === chunk57636V35_cjs.DEFAULT_PAGE_SIZE : false;
6002
6232
  pageIndex++;
6003
6233
  }
6004
6234
  return chain;
@@ -6010,12 +6240,12 @@ var IndexerExitDataSource = class {
6010
6240
  while (hasMore) {
6011
6241
  const { txs, page } = await this.indexer.getVirtualTxs(txids, {
6012
6242
  pageIndex,
6013
- pageSize: chunkEJOFL5WH_cjs.DEFAULT_PAGE_SIZE
6243
+ pageSize: chunk57636V35_cjs.DEFAULT_PAGE_SIZE
6014
6244
  });
6015
6245
  for (const psbt of txs) {
6016
- out.set(chunkEJOFL5WH_cjs.Transaction.fromPSBT(base.base64.decode(psbt)).id, psbt);
6246
+ out.set(chunk57636V35_cjs.Transaction.fromPSBT(base.base64.decode(psbt)).id, psbt);
6017
6247
  }
6018
- hasMore = page ? txs.length === chunkEJOFL5WH_cjs.DEFAULT_PAGE_SIZE : false;
6248
+ hasMore = page ? txs.length === chunk57636V35_cjs.DEFAULT_PAGE_SIZE : false;
6019
6249
  pageIndex++;
6020
6250
  }
6021
6251
  return out;
@@ -6036,7 +6266,7 @@ function chainedTxTypeToChainTxType(t) {
6036
6266
  }
6037
6267
  }
6038
6268
  function psbtInputTxids(psbtBase64) {
6039
- const tx = chunkEJOFL5WH_cjs.Transaction.fromPSBT(base.base64.decode(psbtBase64));
6269
+ const tx = chunk57636V35_cjs.Transaction.fromPSBT(base.base64.decode(psbtBase64));
6040
6270
  const ids = [];
6041
6271
  for (let i = 0; i < tx.inputsLength; i++) {
6042
6272
  const txid = tx.getInput(i).txid;
@@ -6395,10 +6625,10 @@ async function resolveArkInfo(arkProvider, walletRepository) {
6395
6625
  try {
6396
6626
  info = await arkProvider.getInfo();
6397
6627
  } catch (err) {
6398
- if (!chunkEJOFL5WH_cjs.isRetryableProviderError(err)) throw err;
6628
+ if (!chunk57636V35_cjs.isRetryableProviderError(err)) throw err;
6399
6629
  const snapshot = await loadArkInfoSnapshot(walletRepository);
6400
6630
  if (!snapshot) {
6401
- throw new chunkEJOFL5WH_cjs.ProviderUnavailableError(
6631
+ throw new chunk57636V35_cjs.ProviderUnavailableError(
6402
6632
  "Arkade server info is unavailable and no cached snapshot exists",
6403
6633
  { cause: err }
6404
6634
  );
@@ -6788,7 +7018,7 @@ function collectArkTxidsNeedingCreatedAt(vtxos) {
6788
7018
  return [...txids];
6789
7019
  }
6790
7020
  async function buildTransactionHistory(vtxos, allBoardingTxs, commitmentsToIgnore, resolveTxCreatedAt) {
6791
- const fromOldestVtxo = vtxos.map(chunkEJOFL5WH_cjs.normalizeVtxo).sort((a, b) => a.createdAt.getTime() - b.createdAt.getTime());
7021
+ const fromOldestVtxo = vtxos.map(chunk57636V35_cjs.normalizeVtxo).sort((a, b) => a.createdAt.getTime() - b.createdAt.getTime());
6792
7022
  const txidsNeedingCreatedAt = resolveTxCreatedAt ? collectArkTxidsNeedingCreatedAt(fromOldestVtxo) : [];
6793
7023
  const resolvedCreatedAt = resolveTxCreatedAt && txidsNeedingCreatedAt.length > 0 ? await resolveTxCreatedAt(txidsNeedingCreatedAt) : /* @__PURE__ */ new Map();
6794
7024
  const unmatchedSettledBoardingTxs = allBoardingTxs.filter(isSettledBoardingReceive).sort((a, b) => a.createdAt - b.createdAt);
@@ -6952,7 +7182,7 @@ var AssetManager = class extends ReadonlyAssetManager {
6952
7182
  const virtualCoins = await this.wallet.getSpendableVtxos({
6953
7183
  withRecoverable: false
6954
7184
  });
6955
- const controlAssetRef = params.controlAssetId ? chunkPJR63FTK_cjs.AssetRef.fromId(chunkPJR63FTK_cjs.AssetId.fromString(params.controlAssetId)) : null;
7185
+ const controlAssetRef = params.controlAssetId ? chunk3KW4TWP2_cjs.AssetRef.fromId(chunk3KW4TWP2_cjs.AssetId.fromString(params.controlAssetId)) : null;
6956
7186
  const coinSelection = selectVirtualCoins(virtualCoins, Number(this.wallet.dustAmount));
6957
7187
  let totalBtcSelected = 0n;
6958
7188
  const assetChanges = /* @__PURE__ */ new Map();
@@ -6965,8 +7195,8 @@ var AssetManager = class extends ReadonlyAssetManager {
6965
7195
  }
6966
7196
  }
6967
7197
  const groups = [];
6968
- const issuedAssetOutput = chunkPJR63FTK_cjs.AssetOutput.create(0, params.amount);
6969
- const issuedAssetGroup = chunkPJR63FTK_cjs.AssetGroup.create(
7198
+ const issuedAssetOutput = chunk3KW4TWP2_cjs.AssetOutput.create(0, params.amount);
7199
+ const issuedAssetGroup = chunk3KW4TWP2_cjs.AssetGroup.create(
6970
7200
  null,
6971
7201
  controlAssetRef,
6972
7202
  [],
@@ -6981,28 +7211,28 @@ var AssetManager = class extends ReadonlyAssetManager {
6981
7211
  for (const [inputIndex, assets] of assetInputs) {
6982
7212
  for (const asset of assets) {
6983
7213
  if (asset.assetId !== assetId) continue;
6984
- changeInputs.push(chunkPJR63FTK_cjs.AssetInput.create(inputIndex, asset.amount));
7214
+ changeInputs.push(chunk3KW4TWP2_cjs.AssetInput.create(inputIndex, asset.amount));
6985
7215
  }
6986
7216
  }
6987
7217
  groups.push(
6988
- chunkPJR63FTK_cjs.AssetGroup.create(
6989
- chunkPJR63FTK_cjs.AssetId.fromString(assetId),
7218
+ chunk3KW4TWP2_cjs.AssetGroup.create(
7219
+ chunk3KW4TWP2_cjs.AssetId.fromString(assetId),
6990
7220
  null,
6991
7221
  changeInputs,
6992
- [chunkPJR63FTK_cjs.AssetOutput.create(0, amount)],
7222
+ [chunk3KW4TWP2_cjs.AssetOutput.create(0, amount)],
6993
7223
  []
6994
7224
  )
6995
7225
  );
6996
7226
  }
6997
7227
  }
6998
7228
  const address = await this.wallet.getAddress();
6999
- const outputAddress = chunkEJOFL5WH_cjs.ArkAddress.decode(address);
7229
+ const outputAddress = chunk57636V35_cjs.ArkAddress.decode(address);
7000
7230
  const outputs = [
7001
7231
  {
7002
7232
  script: outputAddress.pkScript,
7003
7233
  amount: BigInt(totalBtcSelected)
7004
7234
  },
7005
- Extension.create([chunkPJR63FTK_cjs.Packet.create(groups)]).txOut()
7235
+ Extension.create([chunk3KW4TWP2_cjs.Packet.create(groups)]).txOut()
7006
7236
  ];
7007
7237
  const { arkTxid } = await this.wallet.buildAndSubmitOffchainTx(
7008
7238
  coinSelection.inputs,
@@ -7010,7 +7240,7 @@ var AssetManager = class extends ReadonlyAssetManager {
7010
7240
  );
7011
7241
  return {
7012
7242
  arkTxId: arkTxid,
7013
- assetId: chunkPJR63FTK_cjs.AssetId.create(arkTxid, 0).toString()
7243
+ assetId: chunk3KW4TWP2_cjs.AssetId.create(arkTxid, 0).toString()
7014
7244
  };
7015
7245
  }
7016
7246
  /**
@@ -7082,16 +7312,16 @@ var AssetManager = class extends ReadonlyAssetManager {
7082
7312
  for (const [inputIndex, assets] of assetInputs) {
7083
7313
  for (const asset of assets) {
7084
7314
  if (asset.assetId !== params.assetId) continue;
7085
- reissueInputs.push(chunkPJR63FTK_cjs.AssetInput.create(inputIndex, asset.amount));
7315
+ reissueInputs.push(chunk3KW4TWP2_cjs.AssetInput.create(inputIndex, asset.amount));
7086
7316
  }
7087
7317
  }
7088
7318
  const totalAssetAmount = assetToReissueAmount + params.amount;
7089
- const reissueAssetIdObj = chunkPJR63FTK_cjs.AssetId.fromString(params.assetId);
7090
- const reissueAssetGroup = chunkPJR63FTK_cjs.AssetGroup.create(
7319
+ const reissueAssetIdObj = chunk3KW4TWP2_cjs.AssetId.fromString(params.assetId);
7320
+ const reissueAssetGroup = chunk3KW4TWP2_cjs.AssetGroup.create(
7091
7321
  reissueAssetIdObj,
7092
7322
  null,
7093
7323
  reissueInputs,
7094
- [chunkPJR63FTK_cjs.AssetOutput.create(0, totalAssetAmount)],
7324
+ [chunk3KW4TWP2_cjs.AssetOutput.create(0, totalAssetAmount)],
7095
7325
  []
7096
7326
  );
7097
7327
  const groups = [reissueAssetGroup];
@@ -7100,27 +7330,27 @@ var AssetManager = class extends ReadonlyAssetManager {
7100
7330
  for (const [inputIndex, assets] of assetInputs) {
7101
7331
  for (const asset of assets) {
7102
7332
  if (asset.assetId !== assetId) continue;
7103
- changeInputs.push(chunkPJR63FTK_cjs.AssetInput.create(inputIndex, asset.amount));
7333
+ changeInputs.push(chunk3KW4TWP2_cjs.AssetInput.create(inputIndex, asset.amount));
7104
7334
  }
7105
7335
  }
7106
7336
  groups.push(
7107
- chunkPJR63FTK_cjs.AssetGroup.create(
7108
- chunkPJR63FTK_cjs.AssetId.fromString(assetId),
7337
+ chunk3KW4TWP2_cjs.AssetGroup.create(
7338
+ chunk3KW4TWP2_cjs.AssetId.fromString(assetId),
7109
7339
  null,
7110
7340
  changeInputs,
7111
- [chunkPJR63FTK_cjs.AssetOutput.create(0, amount)],
7341
+ [chunk3KW4TWP2_cjs.AssetOutput.create(0, amount)],
7112
7342
  []
7113
7343
  )
7114
7344
  );
7115
7345
  }
7116
7346
  const address = await this.wallet.getAddress();
7117
- const outputAddress = chunkEJOFL5WH_cjs.ArkAddress.decode(address);
7347
+ const outputAddress = chunk57636V35_cjs.ArkAddress.decode(address);
7118
7348
  const outputs = [
7119
7349
  {
7120
7350
  script: outputAddress.pkScript,
7121
7351
  amount: BigInt(totalBtcSelected)
7122
7352
  },
7123
- Extension.create([chunkPJR63FTK_cjs.Packet.create(groups)]).txOut()
7353
+ Extension.create([chunk3KW4TWP2_cjs.Packet.create(groups)]).txOut()
7124
7354
  ];
7125
7355
  const { arkTxid } = await this.wallet.buildAndSubmitOffchainTx(selectedCoins, outputs);
7126
7356
  return arkTxid;
@@ -7187,27 +7417,27 @@ var AssetManager = class extends ReadonlyAssetManager {
7187
7417
  for (const [inputIndex, assets] of assetInputs) {
7188
7418
  for (const asset of assets) {
7189
7419
  if (asset.assetId !== assetId) continue;
7190
- changeInputs.push(chunkPJR63FTK_cjs.AssetInput.create(inputIndex, asset.amount));
7420
+ changeInputs.push(chunk3KW4TWP2_cjs.AssetInput.create(inputIndex, asset.amount));
7191
7421
  }
7192
7422
  }
7193
7423
  groups.push(
7194
- chunkPJR63FTK_cjs.AssetGroup.create(
7195
- chunkPJR63FTK_cjs.AssetId.fromString(assetId),
7424
+ chunk3KW4TWP2_cjs.AssetGroup.create(
7425
+ chunk3KW4TWP2_cjs.AssetId.fromString(assetId),
7196
7426
  null,
7197
7427
  changeInputs,
7198
- amount > 0n ? [chunkPJR63FTK_cjs.AssetOutput.create(0, amount)] : [],
7428
+ amount > 0n ? [chunk3KW4TWP2_cjs.AssetOutput.create(0, amount)] : [],
7199
7429
  []
7200
7430
  )
7201
7431
  );
7202
7432
  }
7203
7433
  const address = await this.wallet.getAddress();
7204
- const outputAddress = chunkEJOFL5WH_cjs.ArkAddress.decode(address);
7434
+ const outputAddress = chunk57636V35_cjs.ArkAddress.decode(address);
7205
7435
  const outputs = [
7206
7436
  {
7207
7437
  script: outputAddress.pkScript,
7208
7438
  amount: BigInt(totalBtcSelected)
7209
7439
  },
7210
- Extension.create([chunkPJR63FTK_cjs.Packet.create(groups)]).txOut()
7440
+ Extension.create([chunk3KW4TWP2_cjs.Packet.create(groups)]).txOut()
7211
7441
  ];
7212
7442
  const { arkTxid } = await this.wallet.buildAndSubmitOffchainTx(selectedCoins, outputs);
7213
7443
  return arkTxid;
@@ -7232,7 +7462,7 @@ function castMetadata(metadata) {
7232
7462
  } else {
7233
7463
  throw new Error("Invalid metadata value type");
7234
7464
  }
7235
- md.push(chunkPJR63FTK_cjs.Metadata.create(textEncoder.encode(key), valueBytes));
7465
+ md.push(chunk3KW4TWP2_cjs.Metadata.create(textEncoder.encode(key), valueBytes));
7236
7466
  }
7237
7467
  return md;
7238
7468
  }
@@ -7253,10 +7483,10 @@ var DelegateManagerImpl = class {
7253
7483
  if (vtxos.length === 0) {
7254
7484
  return { delegated: [], failed: [] };
7255
7485
  }
7256
- const destinationScript = chunkEJOFL5WH_cjs.ArkAddress.decode(destination).pkScript;
7486
+ const destinationScript = chunk57636V35_cjs.ArkAddress.decode(destination).pkScript;
7257
7487
  const arkInfo = await this.arkInfoProvider.getInfo();
7258
7488
  const delegateInfo = await this.delegateProvider.getDelegateInfo();
7259
- const eligible = vtxos.map(chunkEJOFL5WH_cjs.normalizeVtxo).filter(
7489
+ const eligible = vtxos.map(chunk57636V35_cjs.normalizeVtxo).filter(
7260
7490
  (v) => isAnnotated(v) && findDelegateTapLeaf(v, delegateInfo.pubkey) !== void 0
7261
7491
  );
7262
7492
  if (eligible.length === 0) {
@@ -7285,11 +7515,11 @@ var DelegateManagerImpl = class {
7285
7515
  const groupByExpiry = /* @__PURE__ */ new Map();
7286
7516
  let recoverableVtxos = [];
7287
7517
  for (const vtxo of eligible) {
7288
- if (chunkEJOFL5WH_cjs.canRecoverOnchain(vtxo, now)) {
7518
+ if (chunk57636V35_cjs.canRecoverOnchain(vtxo, now)) {
7289
7519
  recoverableVtxos.push(vtxo);
7290
7520
  continue;
7291
7521
  }
7292
- const expiry = chunkEJOFL5WH_cjs.toBatchExpiry(vtxo);
7522
+ const expiry = chunk57636V35_cjs.toBatchExpiry(vtxo);
7293
7523
  if (!expiry) continue;
7294
7524
  const dayKey = getDayTimestamp(expiry);
7295
7525
  groupByExpiry.set(dayKey, [...groupByExpiry.get(dayKey) ?? [], vtxo]);
@@ -7354,7 +7584,7 @@ async function delegate(identity, delegateProvider, arkInfo, delegateInfo, vtxos
7354
7584
  }
7355
7585
  if (!delegateAt) {
7356
7586
  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);
7587
+ const expiryTimestamp = vtxos.filter((coin) => !chunk57636V35_cjs.canRecoverOnchain(coin, now) && chunk57636V35_cjs.toBatchExpiry(coin)).reduce((min, coin) => Math.min(min, chunk57636V35_cjs.toBatchExpiry(coin)), Number.MAX_SAFE_INTEGER);
7358
7588
  if (!expiryTimestamp || expiryTimestamp === Number.MAX_SAFE_INTEGER) {
7359
7589
  delegateAt = new Date(Date.now() + 1 * 60 * 1e3);
7360
7590
  } else {
@@ -7383,7 +7613,7 @@ async function delegate(identity, delegateProvider, arkInfo, delegateInfo, vtxos
7383
7613
  let amount = 0n;
7384
7614
  for (const coin of vtxos) {
7385
7615
  const inputFee = estimator.evalOffchainInput({
7386
- ...chunkEJOFL5WH_cjs.toOffchainInputFeeParams(coin),
7616
+ ...chunk57636V35_cjs.toOffchainInputFeeParams(coin),
7387
7617
  type: "vtxo"
7388
7618
  });
7389
7619
  if (inputFee.value >= coin.value) {
@@ -7397,7 +7627,7 @@ async function delegate(identity, delegateProvider, arkInfo, delegateInfo, vtxos
7397
7627
  const delegateFee = BigInt(Number(fee));
7398
7628
  if (delegateFee > 0n) {
7399
7629
  outputs.push({
7400
- script: chunkEJOFL5WH_cjs.ArkAddress.decode(delegateAddress).pkScript,
7630
+ script: chunk57636V35_cjs.ArkAddress.decode(delegateAddress).pkScript,
7401
7631
  amount: delegateFee
7402
7632
  });
7403
7633
  }
@@ -7430,10 +7660,10 @@ async function delegate(identity, delegateProvider, arkInfo, delegateInfo, vtxos
7430
7660
  destinationScript
7431
7661
  );
7432
7662
  const forfeitOutputScript = btcSigner.OutScript.encode(
7433
- btcSigner.Address(chunkEJOFL5WH_cjs.getNetwork(network)).decode(forfeitAddress)
7663
+ btcSigner.Address(chunk57636V35_cjs.getNetwork(network)).decode(forfeitAddress)
7434
7664
  );
7435
7665
  const forfeits = await Promise.all(
7436
- vtxos.filter((v) => !chunkEJOFL5WH_cjs.canRecoverOnchain(v, { timestamp: /* @__PURE__ */ new Date() })).map(async (coin) => {
7666
+ vtxos.filter((v) => !chunk57636V35_cjs.canRecoverOnchain(v, { timestamp: /* @__PURE__ */ new Date() })).map(async (coin) => {
7437
7667
  const forfeit = await makeDelegateForfeitTx(
7438
7668
  coin,
7439
7669
  dust,
@@ -7458,7 +7688,7 @@ async function makeDelegateForfeitTx(input, connectorAmount, delegatePubkey, for
7458
7688
  index: input.vout,
7459
7689
  witnessUtxo: {
7460
7690
  amount: BigInt(input.value),
7461
- script: chunkEJOFL5WH_cjs.VtxoScript.decode(input.tapTree).pkScript
7691
+ script: chunk57636V35_cjs.VtxoScript.decode(input.tapTree).pkScript
7462
7692
  },
7463
7693
  sighashType: btcSigner.SigHash.ALL_ANYONECANPAY,
7464
7694
  tapLeafScript: [delegateTapLeaf]
@@ -7516,7 +7746,7 @@ async function makeSignedDelegateIntent(identity, coins, outputs, onchainOutputs
7516
7746
  expire_at: 0,
7517
7747
  cosigners_public_keys: cosignerPubKeys
7518
7748
  };
7519
- const proof = chunkEJOFL5WH_cjs.Intent.create(message, coins, outputs);
7749
+ const proof = chunk57636V35_cjs.Intent.create(message, coins, outputs);
7520
7750
  const signedProof = await identity.sign(proof);
7521
7751
  return {
7522
7752
  proof: base.base64.encode(signedProof.toPSBT()),
@@ -7534,10 +7764,10 @@ function getDayTimestamp(timestamp) {
7534
7764
  function findDelegateTapLeaf(vtxo, delegatePubkey) {
7535
7765
  if (!vtxo.tapTree) return void 0;
7536
7766
  const pk = delegatePubkey.length === 66 ? delegatePubkey.slice(2) : delegatePubkey;
7537
- const vtxoScript = chunkEJOFL5WH_cjs.VtxoScript.decode(vtxo.tapTree);
7767
+ const vtxoScript = chunk57636V35_cjs.VtxoScript.decode(vtxo.tapTree);
7538
7768
  return vtxoScript.leaves.find((tapLeaf) => {
7539
- const arkTapscript = chunkEJOFL5WH_cjs.decodeTapscript(chunkEJOFL5WH_cjs.scriptFromTapLeafScript(tapLeaf));
7540
- if (!chunkEJOFL5WH_cjs.MultisigTapscript.is(arkTapscript)) return false;
7769
+ const arkTapscript = chunk57636V35_cjs.decodeTapscript(chunk57636V35_cjs.scriptFromTapLeafScript(tapLeaf));
7770
+ if (!chunk57636V35_cjs.MultisigTapscript.is(arkTapscript)) return false;
7541
7771
  return arkTapscript.params.pubkeys.map(base.hex.encode).includes(pk);
7542
7772
  });
7543
7773
  }
@@ -7818,7 +8048,7 @@ function createManagedConnection(dbName, version, initDatabase2) {
7818
8048
  };
7819
8049
  }
7820
8050
  function scriptFromArkAddress(address) {
7821
- return base.hex.encode(chunkEJOFL5WH_cjs.ArkAddress.decode(address).pkScript);
8051
+ return base.hex.encode(chunk57636V35_cjs.ArkAddress.decode(address).pkScript);
7822
8052
  }
7823
8053
 
7824
8054
  // src/repositories/indexedDB/schema.ts
@@ -8313,7 +8543,7 @@ function validateVtxosForScript(vtxos, script, context) {
8313
8543
  }
8314
8544
  async function getVtxosForContract(repo, contract) {
8315
8545
  const vtxos = repo.getVtxosForScript ? await repo.getVtxosForScript(contract.script) : filterVtxosForScript(await repo.getVtxos(contract.address), contract.script);
8316
- return vtxos.map(chunkEJOFL5WH_cjs.normalizeVtxo);
8546
+ return vtxos.map(chunk57636V35_cjs.normalizeVtxo);
8317
8547
  }
8318
8548
  async function saveVtxosForContract(repo, contract, vtxos) {
8319
8549
  if (repo.saveVtxosForScript) {
@@ -8455,7 +8685,7 @@ function decodeArkContract(encoded) {
8455
8685
  }
8456
8686
  function contractFromArkContract(encoded, options = {}) {
8457
8687
  const parsed = decodeArkContract(encoded);
8458
- const handler = chunk6YUACVX4_cjs.contractHandlers.get(parsed.type);
8688
+ const handler = chunk3OKEUDHU_cjs.contractHandlers.get(parsed.type);
8459
8689
  if (!handler) {
8460
8690
  throw new Error(`No handler registered for contract type '${parsed.type}'`);
8461
8691
  }
@@ -8469,9 +8699,9 @@ function contractFromArkContract(encoded, options = {}) {
8469
8699
  metadata: options.metadata
8470
8700
  };
8471
8701
  }
8472
- function contractFromArkContractWithAddress(encoded, serverPubKey, addressPrefix = chunkEJOFL5WH_cjs.DEFAULT_NETWORK.hrp, options = {}) {
8702
+ function contractFromArkContractWithAddress(encoded, serverPubKey, addressPrefix = chunk57636V35_cjs.DEFAULT_NETWORK.hrp, options = {}) {
8473
8703
  const parsed = decodeArkContract(encoded);
8474
- const handler = chunk6YUACVX4_cjs.contractHandlers.getOrThrow(parsed.type);
8704
+ const handler = chunk3OKEUDHU_cjs.contractHandlers.getOrThrow(parsed.type);
8475
8705
  const params = parsed.data;
8476
8706
  const vtxoScript = handler.createScript(params);
8477
8707
  return {
@@ -8725,9 +8955,9 @@ var ContractWatcher = class {
8725
8955
  this.connectionState = "connected";
8726
8956
  this.reconnectAttempts = 0;
8727
8957
  this.listenLoop().catch((e) => {
8728
- if (chunkEJOFL5WH_cjs.isEventSourceError(e)) {
8958
+ if (chunk57636V35_cjs.isEventSourceError(e)) {
8729
8959
  console.debug("ContractWatcher subscription disconnected; reconnecting");
8730
- } else if (!chunkEJOFL5WH_cjs.isEventSourceUnavailableError(e)) {
8960
+ } else if (!chunk57636V35_cjs.isEventSourceUnavailableError(e)) {
8731
8961
  console.error(e);
8732
8962
  }
8733
8963
  this.connectionState = "disconnected";
@@ -8739,7 +8969,7 @@ var ContractWatcher = class {
8739
8969
  this.scheduleReconnect();
8740
8970
  });
8741
8971
  } catch (error) {
8742
- if (!chunkEJOFL5WH_cjs.isEventSourceUnavailableError(error)) {
8972
+ if (!chunk57636V35_cjs.isEventSourceUnavailableError(error)) {
8743
8973
  console.error("ContractWatcher connection failed:", error);
8744
8974
  }
8745
8975
  this.connectionState = "disconnected";
@@ -8765,7 +8995,7 @@ var ContractWatcher = class {
8765
8995
  * slower; what it loses is push latency.
8766
8996
  */
8767
8997
  reportEventSourceUnavailable(error) {
8768
- if (!chunkEJOFL5WH_cjs.isEventSourceUnavailableError(error)) return false;
8998
+ if (!chunk57636V35_cjs.isEventSourceUnavailableError(error)) return false;
8769
8999
  if (!this.eventSourceReported) {
8770
9000
  this.eventSourceReported = true;
8771
9001
  console.warn(
@@ -8981,14 +9211,14 @@ var ContractWatcher = class {
8981
9211
  const timestamp = Date.now();
8982
9212
  if (update.newVtxos?.length) {
8983
9213
  this.processSubscriptionVtxos(
8984
- update.newVtxos.map(chunkEJOFL5WH_cjs.normalizeVtxo),
9214
+ update.newVtxos.map(chunk57636V35_cjs.normalizeVtxo),
8985
9215
  "vtxo_received",
8986
9216
  timestamp
8987
9217
  );
8988
9218
  }
8989
9219
  if (update.spentVtxos?.length) {
8990
9220
  this.processSubscriptionVtxos(
8991
- update.spentVtxos.map(chunkEJOFL5WH_cjs.normalizeVtxo),
9221
+ update.spentVtxos.map(chunk57636V35_cjs.normalizeVtxo),
8992
9222
  "vtxo_spent",
8993
9223
  timestamp
8994
9224
  );
@@ -9083,7 +9313,7 @@ var NON_TERMINAL_INTENT_STATES = ALL_INTENT_STATES.filter(
9083
9313
  (s) => !isTerminalIntentState(s)
9084
9314
  );
9085
9315
  function isConsumed(vtxo) {
9086
- return vtxo !== void 0 && chunkEJOFL5WH_cjs.hasTerminalSpend(vtxo);
9316
+ return vtxo !== void 0 && chunk57636V35_cjs.hasTerminalSpend(vtxo);
9087
9317
  }
9088
9318
  async function classifyIntent(intent, vtxosByOutpoint, now) {
9089
9319
  if (isTerminalIntentState(intent.state)) return void 0;
@@ -9126,7 +9356,7 @@ async function reconcileIntents(deps) {
9126
9356
  let vtxosByOutpoint = /* @__PURE__ */ new Map();
9127
9357
  if (outpoints.length > 0) {
9128
9358
  try {
9129
- const { vtxos } = await chunkEJOFL5WH_cjs.getNormalizedVtxos(deps.indexerProvider, { outpoints });
9359
+ const { vtxos } = await chunk57636V35_cjs.getNormalizedVtxos(deps.indexerProvider, { outpoints });
9130
9360
  vtxosByOutpoint = new Map(vtxos.map((v) => [outpointKey(v), v]));
9131
9361
  } catch (e) {
9132
9362
  console.error("reconcileIntents: failed to fetch input VTXO state", e);
@@ -9300,7 +9530,7 @@ var ContractManager = class _ContractManager {
9300
9530
  await this.reconcileWatched();
9301
9531
  this.markSyncOnline();
9302
9532
  } catch (err) {
9303
- if (!chunkEJOFL5WH_cjs.isRetryableProviderError(err)) throw err;
9533
+ if (!chunk57636V35_cjs.isRetryableProviderError(err)) throw err;
9304
9534
  this.markSyncDegraded(err);
9305
9535
  }
9306
9536
  this.initialized = true;
@@ -9432,7 +9662,7 @@ var ContractManager = class _ContractManager {
9432
9662
  const from = Math.max(0, watermark - lookAhead.size);
9433
9663
  const to = watermark + lookAhead.size;
9434
9664
  const deps = lookAhead.candidateDeps();
9435
- const handlers = chunk6YUACVX4_cjs.contractHandlers.getRegisteredTypes().map((t) => chunk6YUACVX4_cjs.contractHandlers.get(t)).filter(hasCandidates);
9665
+ const handlers = chunk3OKEUDHU_cjs.contractHandlers.getRegisteredTypes().map((t) => chunk3OKEUDHU_cjs.contractHandlers.get(t)).filter(hasCandidates);
9436
9666
  const band = /* @__PURE__ */ new Map();
9437
9667
  for (let index = from; index <= to; index++) {
9438
9668
  const descriptor = lookAhead.materialize(index);
@@ -9443,7 +9673,7 @@ var ContractManager = class _ContractManager {
9443
9673
  index,
9444
9674
  params: {
9445
9675
  ...candidate,
9446
- ...chunk6YUACVX4_cjs.speculativeReceiveMetadata(descriptor)
9676
+ ...chunk3OKEUDHU_cjs.speculativeReceiveMetadata(descriptor)
9447
9677
  }
9448
9678
  });
9449
9679
  }
@@ -9505,7 +9735,7 @@ var ContractManager = class _ContractManager {
9505
9735
  });
9506
9736
  for (const entry of pending) entry.catchUpPending = false;
9507
9737
  } catch (err) {
9508
- if (!chunkEJOFL5WH_cjs.isRetryableProviderError(err)) throw err;
9738
+ if (!chunk57636V35_cjs.isRetryableProviderError(err)) throw err;
9509
9739
  this.markSyncDegraded(err);
9510
9740
  }
9511
9741
  }
@@ -9555,7 +9785,7 @@ var ContractManager = class _ContractManager {
9555
9785
  await this.fetchContractVxosFromIndexer([contract]);
9556
9786
  this.markSyncOnline();
9557
9787
  } catch (err) {
9558
- if (!chunkEJOFL5WH_cjs.isRetryableProviderError(err)) throw err;
9788
+ if (!chunk57636V35_cjs.isRetryableProviderError(err)) throw err;
9559
9789
  this.markSyncDegraded(err);
9560
9790
  }
9561
9791
  await this.watcher.addContract(contract);
@@ -9592,7 +9822,7 @@ var ContractManager = class _ContractManager {
9592
9822
  return result;
9593
9823
  }
9594
9824
  async upsertContractRow(params) {
9595
- const handler = chunk6YUACVX4_cjs.contractHandlers.get(params.type);
9825
+ const handler = chunk3OKEUDHU_cjs.contractHandlers.get(params.type);
9596
9826
  if (!handler) {
9597
9827
  throw new Error(`No handler registered for contract type '${params.type}'`);
9598
9828
  }
@@ -9692,7 +9922,7 @@ var ContractManager = class _ContractManager {
9692
9922
  `scanContracts: batchSize must be a positive integer (got ${String(opts.batchSize)})`
9693
9923
  );
9694
9924
  }
9695
- const registered = chunk6YUACVX4_cjs.contractHandlers.getRegisteredTypes().map((t) => chunk6YUACVX4_cjs.contractHandlers.get(t)).filter(isDiscoverable);
9925
+ const registered = chunk3OKEUDHU_cjs.contractHandlers.getRegisteredTypes().map((t) => chunk3OKEUDHU_cjs.contractHandlers.get(t)).filter(isDiscoverable);
9696
9926
  const discoverables = [
9697
9927
  ...registered.filter((h) => h.type === "boarding"),
9698
9928
  ...registered.filter((h) => h.type !== "boarding")
@@ -9827,7 +10057,7 @@ var ContractManager = class _ContractManager {
9827
10057
  await this.syncContracts({ contracts, pageSize });
9828
10058
  this.markSyncOnline();
9829
10059
  } catch (err) {
9830
- if (!chunkEJOFL5WH_cjs.isRetryableProviderError(err)) throw err;
10060
+ if (!chunk57636V35_cjs.isRetryableProviderError(err)) throw err;
9831
10061
  this.markSyncDegraded(err);
9832
10062
  }
9833
10063
  const vtxos = await this.getVtxosForContracts(contracts);
@@ -9848,7 +10078,7 @@ var ContractManager = class _ContractManager {
9848
10078
  }
9849
10079
  const tapscriptCache = tapscripts ?? /* @__PURE__ */ new Map();
9850
10080
  return vtxos.map(
9851
- (vtxo) => extendVirtualCoinForContract(chunkEJOFL5WH_cjs.normalizeVtxo(vtxo), byScript, tapscriptCache)
10081
+ (vtxo) => extendVirtualCoinForContract(chunk57636V35_cjs.normalizeVtxo(vtxo), byScript, tapscriptCache)
9852
10082
  );
9853
10083
  }
9854
10084
  /** @inheritdoc */
@@ -9892,14 +10122,14 @@ var ContractManager = class _ContractManager {
9892
10122
  const byScript = new Map(contracts.map((contract) => [contract.script, contract]));
9893
10123
  const asking = vtxos.filter((vtxo) => {
9894
10124
  const contract = byScript.get(vtxo.script);
9895
- return contract !== void 0 && chunk6YUACVX4_cjs.contractHandlers.get(contract.type)?.assertSpendableNow !== void 0;
10125
+ return contract !== void 0 && chunk3OKEUDHU_cjs.contractHandlers.get(contract.type)?.assertSpendableNow !== void 0;
9896
10126
  });
9897
10127
  if (asking.length === 0) return refused;
9898
10128
  const tip = await this.currentChainTip();
9899
10129
  const walletKey = await walletPubKey?.();
9900
10130
  for (const vtxo of asking) {
9901
10131
  const contract = byScript.get(vtxo.script);
9902
- const handler = chunk6YUACVX4_cjs.contractHandlers.get(contract.type);
10132
+ const handler = chunk3OKEUDHU_cjs.contractHandlers.get(contract.type);
9903
10133
  if (!handler?.assertSpendableNow) continue;
9904
10134
  const context = {
9905
10135
  collaborative: true,
@@ -9914,7 +10144,7 @@ var ContractManager = class _ContractManager {
9914
10144
  // the next handler to answer a CSV question would meet a
9915
10145
  // TypeError instead of a `false`. Carry the coin only when it
9916
10146
  // really is one.
9917
- vtxo: chunkEJOFL5WH_cjs.isVirtualCoin(vtxo) && "status" in vtxo ? vtxo : void 0
10147
+ vtxo: chunk57636V35_cjs.isVirtualCoin(vtxo) && "status" in vtxo ? vtxo : void 0
9918
10148
  };
9919
10149
  try {
9920
10150
  await handler.assertSpendableNow(
@@ -10070,7 +10300,7 @@ var ContractManager = class _ContractManager {
10070
10300
  const { contractScript, collaborative = true, walletPubKey, vtxo } = options;
10071
10301
  const [contract] = await this.getContracts({ script: contractScript });
10072
10302
  if (!contract) return [];
10073
- const handler = chunk6YUACVX4_cjs.contractHandlers.get(contract.type);
10303
+ const handler = chunk3OKEUDHU_cjs.contractHandlers.get(contract.type);
10074
10304
  if (!handler) return [];
10075
10305
  const script = handler.createScript(contract.params);
10076
10306
  const tip = await this.currentChainTip();
@@ -10098,7 +10328,7 @@ var ContractManager = class _ContractManager {
10098
10328
  const { contractScript, collaborative = true, walletPubKey } = options;
10099
10329
  const [contract] = await this.getContracts({ script: contractScript });
10100
10330
  if (!contract) return [];
10101
- const handler = chunk6YUACVX4_cjs.contractHandlers.get(contract.type);
10331
+ const handler = chunk3OKEUDHU_cjs.contractHandlers.get(contract.type);
10102
10332
  if (!handler) return [];
10103
10333
  const script = handler.createScript(contract.params);
10104
10334
  const context = {
@@ -10154,7 +10384,7 @@ var ContractManager = class _ContractManager {
10154
10384
  }
10155
10385
  async refreshOutpoints(outpoints) {
10156
10386
  if (outpoints.length === 0) return;
10157
- const { vtxos } = await chunkEJOFL5WH_cjs.getNormalizedVtxos(this.config.indexerProvider, {
10387
+ const { vtxos } = await chunk57636V35_cjs.getNormalizedVtxos(this.config.indexerProvider, {
10158
10388
  outpoints
10159
10389
  });
10160
10390
  if (vtxos.length === 0) return;
@@ -10233,7 +10463,7 @@ var ContractManager = class _ContractManager {
10233
10463
  break;
10234
10464
  }
10235
10465
  } catch (err) {
10236
- if (!chunkEJOFL5WH_cjs.isRetryableProviderError(err)) throw err;
10466
+ if (!chunk57636V35_cjs.isRetryableProviderError(err)) throw err;
10237
10467
  this.markSyncDegraded(err);
10238
10468
  }
10239
10469
  this.emitEvent(event);
@@ -10312,7 +10542,7 @@ var ContractManager = class _ContractManager {
10312
10542
  */
10313
10543
  async reconcilePendingFrontier(contracts) {
10314
10544
  const scriptToContract = new Map(contracts.map((c) => [c.script, c]));
10315
- const vtxos = await chunkEJOFL5WH_cjs.getAllNormalizedVtxos(
10545
+ const vtxos = await chunk57636V35_cjs.getAllNormalizedVtxos(
10316
10546
  this.config.indexerProvider,
10317
10547
  contracts.map((c) => c.script),
10318
10548
  { pendingOnly: true }
@@ -10395,7 +10625,7 @@ var ContractManager = class _ContractManager {
10395
10625
  }
10396
10626
  return result;
10397
10627
  }
10398
- async fetchContractVtxosBulk(contracts, pageSize = chunkEJOFL5WH_cjs.DEFAULT_PAGE_SIZE, syncWindow) {
10628
+ async fetchContractVtxosBulk(contracts, pageSize = chunk57636V35_cjs.DEFAULT_PAGE_SIZE, syncWindow) {
10399
10629
  if (contracts.length === 0) {
10400
10630
  return { vtxosByScript: /* @__PURE__ */ new Map(), promoted: /* @__PURE__ */ new Map() };
10401
10631
  }
@@ -10411,7 +10641,7 @@ var ContractManager = class _ContractManager {
10411
10641
  before: syncWindow.before
10412
10642
  }
10413
10643
  } : {};
10414
- const vtxos = await chunkEJOFL5WH_cjs.getAllNormalizedVtxos(
10644
+ const vtxos = await chunk57636V35_cjs.getAllNormalizedVtxos(
10415
10645
  this.config.indexerProvider,
10416
10646
  contracts.map((c) => c.script),
10417
10647
  { ...windowOpts, pageSize }
@@ -10556,7 +10786,7 @@ var deserializeTapLeaf = (t) => {
10556
10786
  const s = base.hex.decode(t.s);
10557
10787
  return [cb, s];
10558
10788
  };
10559
- var deserializeVtxo = (o) => chunkEJOFL5WH_cjs.normalizeVtxo({
10789
+ var deserializeVtxo = (o) => chunk57636V35_cjs.normalizeVtxo({
10560
10790
  ...o,
10561
10791
  createdAt: new Date(o.createdAt),
10562
10792
  tapTree: base.hex.decode(o.tapTree),
@@ -11379,7 +11609,7 @@ var HDDescriptorProvider = class _HDDescriptorProvider {
11379
11609
  */
11380
11610
  materializeDescriptorAt(index) {
11381
11611
  const descriptor = this.identity.descriptor;
11382
- const network = chunk6YUACVX4_cjs.isMainnetDescriptor(descriptor) ? descriptorsScure.networks.bitcoin : descriptorsScure.networks.testnet;
11612
+ const network = chunk3OKEUDHU_cjs.isMainnetDescriptor(descriptor) ? descriptorsScure.networks.bitcoin : descriptorsScure.networks.testnet;
11383
11613
  const expansion = descriptorsScure.expand({ descriptor, network, index });
11384
11614
  const keyInfo = expansion.expansionMap?.["@0"];
11385
11615
  if (!keyInfo?.keyExpression) {
@@ -11527,7 +11757,7 @@ var WalletReceiveRotator = class _WalletReceiveRotator {
11527
11757
  const provider = await resolveDescriptorProvider(config, setup.walletRepository);
11528
11758
  if (!provider) return void 0;
11529
11759
  const allowSilentFallback = (config.walletMode ?? "auto") === "auto";
11530
- const expectedContractType = setup.offchainTapscript instanceof chunk6YUACVX4_cjs.DelegateVtxo.Script ? "delegate" : "default";
11760
+ const expectedContractType = setup.offchainTapscript instanceof chunk3OKEUDHU_cjs.DelegateVtxo.Script ? "delegate" : "default";
11531
11761
  const factoryOpts = {
11532
11762
  walletRepository: setup.walletRepository,
11533
11763
  contractRepository: setup.contractRepository,
@@ -11728,7 +11958,7 @@ var WalletReceiveRotator = class _WalletReceiveRotator {
11728
11958
  };
11729
11959
  function deriveLeafPubkey(descriptor) {
11730
11960
  try {
11731
- return chunk6YUACVX4_cjs.deriveDescriptorLeafPubKey(descriptor);
11961
+ return chunk3OKEUDHU_cjs.deriveDescriptorLeafPubKey(descriptor);
11732
11962
  } catch (e) {
11733
11963
  throw new NonRangeableDescriptorError(
11734
11964
  "Cannot derive leaf pubkey: descriptor is not a materialized, parsable tr(...) shape.",
@@ -11740,7 +11970,7 @@ function buildReceiveContract(current, descriptor, hrp, tagSource) {
11740
11970
  const pubKey = deriveLeafPubkey(descriptor);
11741
11971
  const tapscript = rebuildTapscript(current, pubKey);
11742
11972
  const serverPubKey = tapscript.options.serverPubKey;
11743
- const csvTimelock = chunkEJOFL5WH_cjs.timelockToSequence(tapscript.options.csvTimelock).toString();
11973
+ const csvTimelock = chunk57636V35_cjs.timelockToSequence(tapscript.options.csvTimelock).toString();
11744
11974
  const base$1 = {
11745
11975
  script: base.hex.encode(tapscript.pkScript),
11746
11976
  address: tapscript.address(hrp, serverPubKey).encode(),
@@ -11751,11 +11981,11 @@ function buildReceiveContract(current, descriptor, hrp, tagSource) {
11751
11981
  // index-0 key. Without it, spends produce unsigned PSBTs that the
11752
11982
  // server rejects with `INVALID_PSBT_INPUT (5): missing tapscript spend sig`.
11753
11983
  metadata: {
11754
- ...tagSource && { source: chunk6YUACVX4_cjs.WALLET_RECEIVE_SOURCE },
11984
+ ...tagSource && { source: chunk3OKEUDHU_cjs.WALLET_RECEIVE_SOURCE },
11755
11985
  signingDescriptor: descriptor
11756
11986
  }
11757
11987
  };
11758
- const params = tapscript instanceof chunk6YUACVX4_cjs.DelegateVtxo.Script ? {
11988
+ const params = tapscript instanceof chunk3OKEUDHU_cjs.DelegateVtxo.Script ? {
11759
11989
  ...base$1,
11760
11990
  type: "delegate",
11761
11991
  params: {
@@ -11776,10 +12006,10 @@ function buildReceiveContract(current, descriptor, hrp, tagSource) {
11776
12006
  return { tapscript, params };
11777
12007
  }
11778
12008
  function rebuildTapscript(current, pubKey) {
11779
- if (current instanceof chunk6YUACVX4_cjs.DelegateVtxo.Script) {
11780
- return new chunk6YUACVX4_cjs.DelegateVtxo.Script({ ...current.options, pubKey });
12009
+ if (current instanceof chunk3OKEUDHU_cjs.DelegateVtxo.Script) {
12010
+ return new chunk3OKEUDHU_cjs.DelegateVtxo.Script({ ...current.options, pubKey });
11781
12011
  }
11782
- return new chunk6YUACVX4_cjs.DefaultVtxo.Script({ ...current.options, pubKey });
12012
+ return new chunk3OKEUDHU_cjs.DefaultVtxo.Script({ ...current.options, pubKey });
11783
12013
  }
11784
12014
  async function pickActiveReceive(contractRepository, serverPubKey, expectedType) {
11785
12015
  const candidates = await contractRepository.getContracts({
@@ -11788,7 +12018,7 @@ async function pickActiveReceive(contractRepository, serverPubKey, expectedType)
11788
12018
  });
11789
12019
  const serverPubKeyHex = base.hex.encode(serverPubKey);
11790
12020
  const matching = candidates.filter(
11791
- (c) => c.params.serverPubKey === serverPubKeyHex && c.metadata?.source === chunk6YUACVX4_cjs.WALLET_RECEIVE_SOURCE
12021
+ (c) => c.params.serverPubKey === serverPubKeyHex && c.metadata?.source === chunk3OKEUDHU_cjs.WALLET_RECEIVE_SOURCE
11792
12022
  ).sort((a, b) => {
11793
12023
  if (b.createdAt !== a.createdAt) return b.createdAt - a.createdAt;
11794
12024
  return signingDescriptorIndex(b.metadata?.signingDescriptor) - signingDescriptorIndex(a.metadata?.signingDescriptor);
@@ -11844,7 +12074,7 @@ function computeOffchainBalance(vtxos, caps) {
11844
12074
  }
11845
12075
  };
11846
12076
  for (const vtxo of vtxos) {
11847
- if (chunkEJOFL5WH_cjs.hasTerminalSpend(vtxo)) continue;
12077
+ if (chunk57636V35_cjs.hasTerminalSpend(vtxo)) continue;
11848
12078
  addAssets(owned, vtxo);
11849
12079
  if (vtxo.isUnrolled) {
11850
12080
  unrolled += vtxo.value;
@@ -11854,11 +12084,11 @@ function computeOffchainBalance(vtxos, caps) {
11854
12084
  pendingRecovery += vtxo.value;
11855
12085
  continue;
11856
12086
  }
11857
- if (chunkEJOFL5WH_cjs.canRecoverOnchain(vtxo, now)) {
12087
+ if (chunk57636V35_cjs.canRecoverOnchain(vtxo, now)) {
11858
12088
  recoverable += vtxo.value;
11859
12089
  continue;
11860
12090
  }
11861
- if (!chunkEJOFL5WH_cjs.canSpendOffchain(vtxo, now)) continue;
12091
+ if (!chunk57636V35_cjs.canSpendOffchain(vtxo, now)) continue;
11862
12092
  if (vtxo.isPreconfirmed) {
11863
12093
  preconfirmed += vtxo.value;
11864
12094
  } else {
@@ -12028,12 +12258,12 @@ var InputSignerRouter = class {
12028
12258
  };
12029
12259
 
12030
12260
  // src/wallet/wallet.ts
12031
- var getArkadeServerUrl = ({ arkServerUrl }) => arkServerUrl || chunkEJOFL5WH_cjs.DEFAULT_ARKADE_SERVER_URL;
12261
+ var getArkadeServerUrl = ({ arkServerUrl }) => arkServerUrl || chunk57636V35_cjs.DEFAULT_ARKADE_SERVER_URL;
12032
12262
  function intentProofJobs(coins) {
12033
12263
  if (coins.length === 0) return [];
12034
12264
  const coinJobs = coins.map((coin, i) => ({
12035
12265
  index: i + 1,
12036
- lookupScript: chunkEJOFL5WH_cjs.VtxoScript.decode(coin.tapTree).pkScript
12266
+ lookupScript: chunk57636V35_cjs.VtxoScript.decode(coin.tapTree).pkScript
12037
12267
  }));
12038
12268
  return [{ index: 0, lookupScript: coinJobs[0].lookupScript }, ...coinJobs];
12039
12269
  }
@@ -12065,7 +12295,7 @@ function dedupeTimelocks(timelocks) {
12065
12295
  const seen = /* @__PURE__ */ new Set();
12066
12296
  const deduped = [];
12067
12297
  for (const timelock of timelocks) {
12068
- const sequence = chunkEJOFL5WH_cjs.timelockToSequence(timelock).toString();
12298
+ const sequence = chunk57636V35_cjs.timelockToSequence(timelock).toString();
12069
12299
  if (seen.has(sequence)) continue;
12070
12300
  seen.add(sequence);
12071
12301
  deduped.push(timelock);
@@ -12082,7 +12312,7 @@ async function resolveBoardingBootTapscript(contractRepository, serverPubKey, ba
12082
12312
  state: "active"
12083
12313
  });
12084
12314
  const newest = candidates.filter(
12085
- (c) => c.params.serverPubKey === serverPubKeyHex && c.metadata?.source === chunk6YUACVX4_cjs.WALLET_RECEIVE_SOURCE
12315
+ (c) => c.params.serverPubKey === serverPubKeyHex && c.metadata?.source === chunk3OKEUDHU_cjs.WALLET_RECEIVE_SOURCE
12086
12316
  ).sort((a, b) => {
12087
12317
  if (b.createdAt !== a.createdAt) return b.createdAt - a.createdAt;
12088
12318
  return signingDescriptorIndex(b.metadata?.signingDescriptor) - signingDescriptorIndex(a.metadata?.signingDescriptor);
@@ -12090,7 +12320,7 @@ async function resolveBoardingBootTapscript(contractRepository, serverPubKey, ba
12090
12320
  if (!newest?.params.pubKey) return baseline;
12091
12321
  try {
12092
12322
  const pubKey = base.hex.decode(newest.params.pubKey);
12093
- return new chunk6YUACVX4_cjs.DefaultVtxo.Script({ ...baseline.options, pubKey });
12323
+ return new chunk3OKEUDHU_cjs.DefaultVtxo.Script({ ...baseline.options, pubKey });
12094
12324
  } catch (e) {
12095
12325
  console.warn("Skipping malformed boarding contract at boot", newest.script, e);
12096
12326
  return baseline;
@@ -12109,10 +12339,10 @@ function filterSnapshotVtxos(snapshot, filter, pendingSpendOutpoints) {
12109
12339
  if (vtxo.isUnrolled) {
12110
12340
  return !!f.withUnrolled;
12111
12341
  }
12112
- if (chunkEJOFL5WH_cjs.hasTerminalSpend(vtxo)) {
12342
+ if (chunk57636V35_cjs.hasTerminalSpend(vtxo)) {
12113
12343
  return false;
12114
12344
  }
12115
- if (!f.withRecoverable && chunkEJOFL5WH_cjs.canRecoverOnchain(vtxo, now)) {
12345
+ if (!f.withRecoverable && chunk57636V35_cjs.canRecoverOnchain(vtxo, now)) {
12116
12346
  return false;
12117
12347
  }
12118
12348
  return true;
@@ -12452,7 +12682,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
12452
12682
  */
12453
12683
  static async setupWalletConfig(config, pubKey) {
12454
12684
  const arkadeServerUrl = getArkadeServerUrl(config);
12455
- const arkProvider = config.arkProvider || new chunkEJOFL5WH_cjs.RestArkProvider(arkadeServerUrl);
12685
+ const arkProvider = config.arkProvider || new chunk57636V35_cjs.RestArkProvider(arkadeServerUrl);
12456
12686
  let indexerProvider = config.indexerProvider;
12457
12687
  if (!indexerProvider) {
12458
12688
  let indexerUrl = config.indexerUrl;
@@ -12469,7 +12699,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
12469
12699
  indexerUrl = arkadeServerUrl;
12470
12700
  }
12471
12701
  }
12472
- indexerProvider = new chunkPJR63FTK_cjs.RestIndexerProvider(indexerUrl);
12702
+ indexerProvider = new chunk3KW4TWP2_cjs.RestIndexerProvider(indexerUrl);
12473
12703
  }
12474
12704
  const walletRepository = config.storage?.walletRepository ?? new IndexedDBWalletRepository();
12475
12705
  const contractRepository = config.storage?.contractRepository ?? new IndexedDBContractRepository();
@@ -12478,7 +12708,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
12478
12708
  source: serverInfoSource,
12479
12709
  lastOnlineAt: serverInfoLastOnlineAt
12480
12710
  } = await resolveArkInfo(arkProvider, walletRepository);
12481
- const network = chunkEJOFL5WH_cjs.getNetwork(info.network);
12711
+ const network = chunk57636V35_cjs.getNetwork(info.network);
12482
12712
  if ("descriptor" in config.identity) {
12483
12713
  const descriptor = config.identity.descriptor;
12484
12714
  const identityIsMainnet = !descriptor.includes("tpub");
@@ -12518,18 +12748,18 @@ var ReadonlyWallet = class _ReadonlyWallet {
12518
12748
  value: info.boardingExitDelay,
12519
12749
  type: info.boardingExitDelay < 512n ? "blocks" : "seconds"
12520
12750
  };
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;
12751
+ const serverPubKey = chunk3OKEUDHU_cjs.toXOnly(base.hex.decode(info.signerPubkey), "ark signer key");
12752
+ const delegatePubKey = config.delegateProvider ? await config.delegateProvider.getDelegateInfo().then((info2) => chunk3OKEUDHU_cjs.toXOnly(base.hex.decode(info2.pubkey), "delegate key")).catch(() => void 0) : config.delegatorProvider ? await config.delegatorProvider.getDelegateInfo().then((info2) => chunk3OKEUDHU_cjs.toXOnly(base.hex.decode(info2.pubkey), "delegate key")).catch(() => void 0) : void 0;
12523
12753
  const offchainOptions = {
12524
12754
  pubKey,
12525
12755
  serverPubKey,
12526
12756
  csvTimelock: exitTimelock
12527
12757
  };
12528
- const offchainTapscript = !delegatePubKey ? new chunk6YUACVX4_cjs.DefaultVtxo.Script(offchainOptions) : new chunk6YUACVX4_cjs.DelegateVtxo.Script({ ...offchainOptions, delegatePubKey });
12529
- const boardingTapscript = chunk6YUACVX4_cjs.BoardingContractHandler.createScript({
12758
+ const offchainTapscript = !delegatePubKey ? new chunk3OKEUDHU_cjs.DefaultVtxo.Script(offchainOptions) : new chunk3OKEUDHU_cjs.DelegateVtxo.Script({ ...offchainOptions, delegatePubKey });
12759
+ const boardingTapscript = chunk3OKEUDHU_cjs.BoardingContractHandler.createScript({
12530
12760
  pubKey: base.hex.encode(pubKey),
12531
12761
  serverPubKey: base.hex.encode(serverPubKey),
12532
- csvTimelock: chunkEJOFL5WH_cjs.timelockToSequence(boardingTimelock).toString()
12762
+ csvTimelock: chunk57636V35_cjs.timelockToSequence(boardingTimelock).toString()
12533
12763
  });
12534
12764
  return {
12535
12765
  arkProvider,
@@ -12695,7 +12925,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
12695
12925
  if (!filter?.withUnrolled) {
12696
12926
  logExcludedVtxos(
12697
12927
  "getSpendableVtxos",
12698
- snapshot.flatMap((contract) => contract.vtxos).filter((vtxo) => vtxo.isUnrolled && !chunkEJOFL5WH_cjs.hasTerminalSpend(vtxo)),
12928
+ snapshot.flatMap((contract) => contract.vtxos).filter((vtxo) => vtxo.isUnrolled && !chunk57636V35_cjs.hasTerminalSpend(vtxo)),
12699
12929
  [() => UNROLLED_REASON]
12700
12930
  );
12701
12931
  }
@@ -12838,7 +13068,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
12838
13068
  const response = await contractManager.getContractsWithVtxos();
12839
13069
  const allVtxos = response.flatMap((_) => _.vtxos);
12840
13070
  const { boardingTxs, commitmentsToIgnore } = await this.getBoardingTxs();
12841
- const resolveTxCreatedAt = (txids) => chunkEJOFL5WH_cjs.fetchVtxoCreatedAtByTxid(this.indexerProvider, txids);
13071
+ const resolveTxCreatedAt = (txids) => chunk57636V35_cjs.fetchVtxoCreatedAtByTxid(this.indexerProvider, txids);
12842
13072
  return buildTransactionHistory(
12843
13073
  allVtxos,
12844
13074
  boardingTxs,
@@ -12932,7 +13162,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
12932
13162
  },
12933
13163
  isUnrolled: true,
12934
13164
  ...boardingFacts,
12935
- virtualStatus: chunkEJOFL5WH_cjs.toVirtualStatus(boardingFacts),
13165
+ virtualStatus: chunk57636V35_cjs.toVirtualStatus(boardingFacts),
12936
13166
  spentBy: "",
12937
13167
  createdAt: tx.status.confirmed ? new Date(tx.status.block_time * 1e3) : /* @__PURE__ */ new Date(0),
12938
13168
  script: scriptHex
@@ -12988,9 +13218,9 @@ var ReadonlyWallet = class _ReadonlyWallet {
12988
13218
  async getBoardingTapscripts(allowedSigners) {
12989
13219
  const byScript = /* @__PURE__ */ new Map();
12990
13220
  const add = (s) => byScript.set(base.hex.encode(s.pkScript), s);
12991
- const boardingCsv = this.boardingTapscript.options.csvTimelock ?? chunk6YUACVX4_cjs.DefaultVtxo.Script.DEFAULT_TIMELOCK;
13221
+ const boardingCsv = this.boardingTapscript.options.csvTimelock ?? chunk3OKEUDHU_cjs.DefaultVtxo.Script.DEFAULT_TIMELOCK;
12992
13222
  add(
12993
- new chunk6YUACVX4_cjs.DefaultVtxo.Script({
13223
+ new chunk3OKEUDHU_cjs.DefaultVtxo.Script({
12994
13224
  pubKey: await this.identity.xOnlyPublicKey(),
12995
13225
  serverPubKey: this.boardingTapscript.options.serverPubKey,
12996
13226
  csvTimelock: boardingCsv
@@ -13005,7 +13235,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
13005
13235
  for (const c of boardingContracts) {
13006
13236
  if (!allowed.has(toXOnlySignerHex(c.params.serverPubKey))) continue;
13007
13237
  try {
13008
- add(chunk6YUACVX4_cjs.BoardingContractHandler.createScript(c.params));
13238
+ add(chunk3OKEUDHU_cjs.BoardingContractHandler.createScript(c.params));
13009
13239
  } catch (e) {
13010
13240
  console.warn("Skipping malformed boarding contract", c.script, e);
13011
13241
  }
@@ -13043,7 +13273,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
13043
13273
  // Per-row CSV delay decoded from THIS tapscript's exit leaf —
13044
13274
  // not the wallet's current boarding timelock, which a signer
13045
13275
  // rotation may have changed.
13046
- csvTimelock: chunkEJOFL5WH_cjs.CSVMultisigTapscript.decode(base.hex.decode(tapscript.exitScript)).params.timelock,
13276
+ csvTimelock: chunk57636V35_cjs.CSVMultisigTapscript.decode(base.hex.decode(tapscript.exitScript)).params.timelock,
13047
13277
  coins: utxos
13048
13278
  });
13049
13279
  }
@@ -13176,7 +13406,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
13176
13406
  /** Fetch Arkade transaction ids that are still pending final settlement. */
13177
13407
  async fetchPendingTxs() {
13178
13408
  const scripts = await this.getWalletScripts();
13179
- const vtxos = await chunkEJOFL5WH_cjs.getAllNormalizedVtxos(this.indexerProvider, scripts);
13409
+ const vtxos = await chunk57636V35_cjs.getAllNormalizedVtxos(this.indexerProvider, scripts);
13180
13410
  return vtxos.filter(
13181
13411
  (vtxo) => (vtxo.isSpent || vtxo.isPreconfirmed && !vtxo.isSwept) && vtxo.arkTxId !== void 0
13182
13412
  ).map((_) => _.arkTxId);
@@ -13207,7 +13437,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
13207
13437
  });
13208
13438
  for (const contract of contracts) {
13209
13439
  if (map.has(contract.script)) continue;
13210
- const handler = chunk6YUACVX4_cjs.contractHandlers.get(contract.type);
13440
+ const handler = chunk3OKEUDHU_cjs.contractHandlers.get(contract.type);
13211
13441
  if (handler) {
13212
13442
  const script = handler.createScript(contract.params);
13213
13443
  map.set(contract.script, script);
@@ -13319,7 +13549,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
13319
13549
  }
13320
13550
  });
13321
13551
  const baselinePubkey = await this.identity.xOnlyPublicKey();
13322
- const delegatePubKey = this.offchainTapscript instanceof chunk6YUACVX4_cjs.DelegateVtxo.Script ? this.offchainTapscript.options.delegatePubKey : void 0;
13552
+ const delegatePubKey = this.offchainTapscript instanceof chunk3OKEUDHU_cjs.DelegateVtxo.Script ? this.offchainTapscript.options.delegatePubKey : void 0;
13323
13553
  const baselineSigners = [
13324
13554
  this.offchainTapscript.options.serverPubKey,
13325
13555
  ...[...this._deprecatedSigners.keys()].map((h) => base.hex.decode(h))
@@ -13327,8 +13557,8 @@ var ReadonlyWallet = class _ReadonlyWallet {
13327
13557
  const seenBaselineScripts = /* @__PURE__ */ new Set();
13328
13558
  for (const serverPubKey of baselineSigners) {
13329
13559
  for (const csvTimelock of this.walletContractTimelocks) {
13330
- const csvTimelockStr = chunkEJOFL5WH_cjs.timelockToSequence(csvTimelock).toString();
13331
- const defaultScript = new chunk6YUACVX4_cjs.DefaultVtxo.Script({
13560
+ const csvTimelockStr = chunk57636V35_cjs.timelockToSequence(csvTimelock).toString();
13561
+ const defaultScript = new chunk3OKEUDHU_cjs.DefaultVtxo.Script({
13332
13562
  pubKey: baselinePubkey,
13333
13563
  serverPubKey,
13334
13564
  csvTimelock
@@ -13349,7 +13579,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
13349
13579
  });
13350
13580
  }
13351
13581
  if (delegatePubKey) {
13352
- const delegateScript = new chunk6YUACVX4_cjs.DelegateVtxo.Script({
13582
+ const delegateScript = new chunk3OKEUDHU_cjs.DelegateVtxo.Script({
13353
13583
  pubKey: baselinePubkey,
13354
13584
  serverPubKey,
13355
13585
  delegatePubKey,
@@ -13373,9 +13603,9 @@ var ReadonlyWallet = class _ReadonlyWallet {
13373
13603
  }
13374
13604
  }
13375
13605
  }
13376
- const boardingCsvTimelock = this.boardingTapscript.options.csvTimelock ?? chunk6YUACVX4_cjs.DefaultVtxo.Script.DEFAULT_TIMELOCK;
13606
+ const boardingCsvTimelock = this.boardingTapscript.options.csvTimelock ?? chunk3OKEUDHU_cjs.DefaultVtxo.Script.DEFAULT_TIMELOCK;
13377
13607
  for (const serverPubKey of baselineSigners) {
13378
- const baselineBoarding = new chunk6YUACVX4_cjs.DefaultVtxo.Script({
13608
+ const baselineBoarding = new chunk3OKEUDHU_cjs.DefaultVtxo.Script({
13379
13609
  pubKey: baselinePubkey,
13380
13610
  serverPubKey,
13381
13611
  csvTimelock: boardingCsvTimelock
@@ -13388,7 +13618,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
13388
13618
  params: {
13389
13619
  pubKey: base.hex.encode(baselineBoarding.options.pubKey),
13390
13620
  serverPubKey: base.hex.encode(serverPubKey),
13391
- csvTimelock: chunkEJOFL5WH_cjs.timelockToSequence(boardingCsvTimelock).toString()
13621
+ csvTimelock: chunk57636V35_cjs.timelockToSequence(boardingCsvTimelock).toString()
13392
13622
  },
13393
13623
  script: boardingScriptHex,
13394
13624
  address: baselineBoarding.address(this.network.hrp, serverPubKey).encode(),
@@ -13588,7 +13818,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
13588
13818
  serverPubKey: this.offchainTapscript.options.serverPubKey,
13589
13819
  deprecatedSignerPubKeys: [...this._deprecatedSigners.keys()].map((h) => base.hex.decode(h)),
13590
13820
  csvTimelocks: this.walletContractTimelocks,
13591
- delegatePubKey: this.offchainTapscript instanceof chunk6YUACVX4_cjs.DelegateVtxo.Script ? this.offchainTapscript.options.delegatePubKey : void 0
13821
+ delegatePubKey: this.offchainTapscript instanceof chunk3OKEUDHU_cjs.DelegateVtxo.Script ? this.offchainTapscript.options.delegatePubKey : void 0
13592
13822
  };
13593
13823
  }
13594
13824
  _signerRouter;
@@ -13833,7 +14063,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
13833
14063
  const [row] = await manager.getContracts({ script: base.hex.encode(display.pkScript) });
13834
14064
  const persisted = row?.metadata?.signingDescriptor;
13835
14065
  if (typeof persisted === "string") return persisted;
13836
- return chunk6YUACVX4_cjs.identityDescriptor(this.identity);
14066
+ return chunk3OKEUDHU_cjs.identityDescriptor(this.identity);
13837
14067
  }
13838
14068
  /**
13839
14069
  * Build, persist and shape one address of `type` owned by `descriptor` —
@@ -13849,7 +14079,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
13849
14079
  async mintAddress(manager, type, descriptor, tagSource, allocated) {
13850
14080
  if (type === "boarding") {
13851
14081
  const built2 = this.buildBoardingContract(
13852
- chunk6YUACVX4_cjs.deriveDescriptorLeafPubKey(descriptor),
14082
+ chunk3OKEUDHU_cjs.deriveDescriptorLeafPubKey(descriptor),
13853
14083
  descriptor,
13854
14084
  tagSource
13855
14085
  );
@@ -13894,11 +14124,11 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
13894
14124
  * {@link buildReceiveContract}.
13895
14125
  */
13896
14126
  buildBoardingContract(pubKey, descriptor, tagSource) {
13897
- const tapscript = new chunk6YUACVX4_cjs.DefaultVtxo.Script({
14127
+ const tapscript = new chunk3OKEUDHU_cjs.DefaultVtxo.Script({
13898
14128
  ...this._boardingTapscript.options,
13899
14129
  pubKey
13900
14130
  });
13901
- const csvTimelock = tapscript.options.csvTimelock ?? chunk6YUACVX4_cjs.DefaultVtxo.Script.DEFAULT_TIMELOCK;
14131
+ const csvTimelock = tapscript.options.csvTimelock ?? chunk3OKEUDHU_cjs.DefaultVtxo.Script.DEFAULT_TIMELOCK;
13902
14132
  return {
13903
14133
  tapscript,
13904
14134
  params: {
@@ -13906,13 +14136,13 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
13906
14136
  params: {
13907
14137
  pubKey: base.hex.encode(pubKey),
13908
14138
  serverPubKey: base.hex.encode(tapscript.options.serverPubKey),
13909
- csvTimelock: chunkEJOFL5WH_cjs.timelockToSequence(csvTimelock).toString()
14139
+ csvTimelock: chunk57636V35_cjs.timelockToSequence(csvTimelock).toString()
13910
14140
  },
13911
14141
  script: base.hex.encode(tapscript.pkScript),
13912
14142
  address: tapscript.address(this.network.hrp, this.arkServerPublicKey).encode(),
13913
14143
  state: "active",
13914
14144
  metadata: {
13915
- ...tagSource && { source: chunk6YUACVX4_cjs.WALLET_RECEIVE_SOURCE },
14145
+ ...tagSource && { source: chunk3OKEUDHU_cjs.WALLET_RECEIVE_SOURCE },
13916
14146
  signingDescriptor: descriptor
13917
14147
  }
13918
14148
  }
@@ -13941,7 +14171,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
13941
14171
  if (this._descriptorProvider instanceof HDDescriptorProvider) {
13942
14172
  return (await this.getContractManager()).getNextSigningDescriptor();
13943
14173
  }
13944
- return chunk6YUACVX4_cjs.identityDescriptor(this.identity);
14174
+ return chunk3OKEUDHU_cjs.identityDescriptor(this.identity);
13945
14175
  }
13946
14176
  /**
13947
14177
  * @see HDAllocationCapable.advanceSigningDescriptorWatermark
@@ -14037,7 +14267,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
14037
14267
  * the stable public API.
14038
14268
  */
14039
14269
  async rotateServerSigner(newServerPubKey, checkpointTapscript) {
14040
- const xonly = chunk6YUACVX4_cjs.toXOnly(newServerPubKey, "ark signer key");
14270
+ const xonly = chunk3OKEUDHU_cjs.toXOnly(newServerPubKey, "ark signer key");
14041
14271
  const newServerUnrollScript = assertValidServerUnrollScript(
14042
14272
  checkpointTapscript,
14043
14273
  resolveCheckpointExitDelayPolicy(this.network, this.checkpointExitDelayPolicy)
@@ -14066,21 +14296,21 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
14066
14296
  const [currentBoardingRow] = await manager.getContracts({
14067
14297
  script: currentBoardingScript
14068
14298
  });
14069
- const newOffchain = this.offchainTapscript instanceof chunk6YUACVX4_cjs.DelegateVtxo.Script ? new chunk6YUACVX4_cjs.DelegateVtxo.Script({
14299
+ const newOffchain = this.offchainTapscript instanceof chunk3OKEUDHU_cjs.DelegateVtxo.Script ? new chunk3OKEUDHU_cjs.DelegateVtxo.Script({
14070
14300
  ...this.offchainTapscript.options,
14071
14301
  serverPubKey: xonly
14072
- }) : new chunk6YUACVX4_cjs.DefaultVtxo.Script({
14302
+ }) : new chunk3OKEUDHU_cjs.DefaultVtxo.Script({
14073
14303
  ...this.offchainTapscript.options,
14074
14304
  serverPubKey: xonly
14075
14305
  });
14076
- const newBoarding = new chunk6YUACVX4_cjs.DefaultVtxo.Script({
14306
+ const newBoarding = new chunk3OKEUDHU_cjs.DefaultVtxo.Script({
14077
14307
  ...this._boardingTapscript.options,
14078
14308
  serverPubKey: xonly
14079
14309
  });
14080
- const offchainCsv = chunkEJOFL5WH_cjs.timelockToSequence(newOffchain.options.csvTimelock).toString();
14310
+ const offchainCsv = chunk57636V35_cjs.timelockToSequence(newOffchain.options.csvTimelock).toString();
14081
14311
  const newOffchainScript = base.hex.encode(newOffchain.pkScript);
14082
14312
  const newOffchainAddress = newOffchain.address(this.network.hrp, xonly).encode();
14083
- if (newOffchain instanceof chunk6YUACVX4_cjs.DelegateVtxo.Script) {
14313
+ if (newOffchain instanceof chunk3OKEUDHU_cjs.DelegateVtxo.Script) {
14084
14314
  await manager.createContract({
14085
14315
  type: "delegate",
14086
14316
  params: {
@@ -14108,13 +14338,13 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
14108
14338
  metadata: currentOffchainRow?.metadata
14109
14339
  });
14110
14340
  }
14111
- const boardingCsv = newBoarding.options.csvTimelock ?? chunk6YUACVX4_cjs.DefaultVtxo.Script.DEFAULT_TIMELOCK;
14341
+ const boardingCsv = newBoarding.options.csvTimelock ?? chunk3OKEUDHU_cjs.DefaultVtxo.Script.DEFAULT_TIMELOCK;
14112
14342
  await manager.createContract({
14113
14343
  type: "boarding",
14114
14344
  params: {
14115
14345
  pubKey: base.hex.encode(newBoarding.options.pubKey),
14116
14346
  serverPubKey: base.hex.encode(xonly),
14117
- csvTimelock: chunkEJOFL5WH_cjs.timelockToSequence(boardingCsv).toString()
14347
+ csvTimelock: chunk57636V35_cjs.timelockToSequence(boardingCsv).toString()
14118
14348
  },
14119
14349
  script: base.hex.encode(newBoarding.pkScript),
14120
14350
  address: newBoarding.address(this.network.hrp, xonly).encode(),
@@ -14147,14 +14377,14 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
14147
14377
  _restoreInFlight;
14148
14378
  _addPendingSpends(inputs) {
14149
14379
  for (const input of inputs) {
14150
- if (chunkEJOFL5WH_cjs.isVirtualCoin(input)) {
14380
+ if (chunk57636V35_cjs.isVirtualCoin(input)) {
14151
14381
  this._pendingSpendOutpoints.add(`${input.txid}:${input.vout}`);
14152
14382
  }
14153
14383
  }
14154
14384
  }
14155
14385
  _removePendingSpends(inputs) {
14156
14386
  for (const input of inputs) {
14157
- if (chunkEJOFL5WH_cjs.isVirtualCoin(input)) {
14387
+ if (chunk57636V35_cjs.isVirtualCoin(input)) {
14158
14388
  this._pendingSpendOutpoints.delete(`${input.txid}:${input.vout}`);
14159
14389
  }
14160
14390
  }
@@ -14212,13 +14442,13 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
14212
14442
  const manager = await this.getContractManager();
14213
14443
  const provider = this._descriptorProvider;
14214
14444
  const hd = provider instanceof HDDescriptorProvider;
14215
- const staticDescriptor = hd ? void 0 : await chunk6YUACVX4_cjs.identityDescriptor(this.identity);
14445
+ const staticDescriptor = hd ? void 0 : await chunk3OKEUDHU_cjs.identityDescriptor(this.identity);
14216
14446
  const materialize = (index) => hd ? provider.materializeDescriptorAt(index) : staticDescriptor;
14217
- const delegatePubKey = this.offchainTapscript instanceof chunk6YUACVX4_cjs.DelegateVtxo.Script ? this.offchainTapscript.options.delegatePubKey : void 0;
14447
+ const delegatePubKey = this.offchainTapscript instanceof chunk3OKEUDHU_cjs.DelegateVtxo.Script ? this.offchainTapscript.options.delegatePubKey : void 0;
14218
14448
  const arkInfo = await this.arkProvider.getInfo();
14219
- const currentSignerPubKey = chunk6YUACVX4_cjs.toXOnly(base.hex.decode(arkInfo.signerPubkey), "ark signer key");
14449
+ const currentSignerPubKey = chunk3OKEUDHU_cjs.toXOnly(base.hex.decode(arkInfo.signerPubkey), "ark signer key");
14220
14450
  const deprecatedSignerPubKeys = arkInfo.deprecatedSigners.map(
14221
- (s) => chunk6YUACVX4_cjs.toXOnly(base.hex.decode(s.pubkey), "deprecated signer key")
14451
+ (s) => chunk3OKEUDHU_cjs.toXOnly(base.hex.decode(s.pubkey), "deprecated signer key")
14222
14452
  );
14223
14453
  const deps = {
14224
14454
  indexerProvider: this.indexerProvider,
@@ -14233,7 +14463,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
14233
14463
  csvTimelocks: this.walletContractTimelocks,
14234
14464
  // Boarding-exit CSV so the boarding handler can build its
14235
14465
  // candidate script (distinct from the unilateral-exit matrix).
14236
- boardingTimelock: this.boardingTapscript.options.csvTimelock ?? chunk6YUACVX4_cjs.DefaultVtxo.Script.DEFAULT_TIMELOCK,
14466
+ boardingTimelock: this.boardingTapscript.options.csvTimelock ?? chunk3OKEUDHU_cjs.DefaultVtxo.Script.DEFAULT_TIMELOCK,
14237
14467
  delegatePubKey
14238
14468
  };
14239
14469
  const result = await manager.scanContracts({
@@ -14347,7 +14577,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
14347
14577
  throw new Error("Invalid configured public key");
14348
14578
  }
14349
14579
  const setup = await ReadonlyWallet.setupWalletConfig(config, pubkey);
14350
- const forfeitPubkey = chunk6YUACVX4_cjs.toXOnly(base.hex.decode(setup.info.forfeitPubkey), "forfeit key");
14580
+ const forfeitPubkey = chunk3OKEUDHU_cjs.toXOnly(base.hex.decode(setup.info.forfeitPubkey), "forfeit key");
14351
14581
  const forfeitAddress = btcSigner.Address(setup.network).decode(setup.info.forfeitAddress);
14352
14582
  const forfeitOutputScript = btcSigner.OutScript.encode(forfeitAddress);
14353
14583
  const checkpointExitDelayOverrides = {
@@ -14496,7 +14726,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
14496
14726
  inputs: params.selectedVtxos,
14497
14727
  changeAmount: BigInt(changeAmount)
14498
14728
  };
14499
- const outputAddress = chunkEJOFL5WH_cjs.ArkAddress.decode(params.address);
14729
+ const outputAddress = chunk57636V35_cjs.ArkAddress.decode(params.address);
14500
14730
  assertRecipientArkAddress(
14501
14731
  params.address,
14502
14732
  outputAddress,
@@ -14562,13 +14792,13 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
14562
14792
  void this.logUngatedInputs("settle({ inputs })", params.inputs);
14563
14793
  }
14564
14794
  const offchainAddress = await this.getAddress();
14565
- const offchainPkScript = chunkEJOFL5WH_cjs.ArkAddress.decode(offchainAddress).pkScript;
14795
+ const offchainPkScript = chunk57636V35_cjs.ArkAddress.decode(offchainAddress).pkScript;
14566
14796
  const offchainOutputScript = base.hex.encode(offchainPkScript);
14567
14797
  if (!params) {
14568
14798
  const { fees, vtxoMaxAmount } = await this.arkProvider.getInfo();
14569
14799
  const estimator = new Estimator(fees.intentFee);
14570
14800
  let amount = 0;
14571
- const exitScript = chunkEJOFL5WH_cjs.CSVMultisigTapscript.decode(
14801
+ const exitScript = chunk57636V35_cjs.CSVMultisigTapscript.decode(
14572
14802
  base.hex.decode(this.boardingTapscript.exitScript)
14573
14803
  );
14574
14804
  const boardingTimelock = exitScript.params.timelock;
@@ -14597,7 +14827,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
14597
14827
  if (filteredVtxos.length >= MAX_VTXOS_PER_SETTLEMENT) {
14598
14828
  break;
14599
14829
  }
14600
- const inputFee = estimator.evalOffchainInput(chunkEJOFL5WH_cjs.toOffchainInputFeeParams(vtxo));
14830
+ const inputFee = estimator.evalOffchainInput(chunk57636V35_cjs.toOffchainInputFeeParams(vtxo));
14601
14831
  if (inputFee.satoshis >= vtxo.value) {
14602
14832
  continue;
14603
14833
  }
@@ -14644,7 +14874,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
14644
14874
  let script;
14645
14875
  let arkAddress;
14646
14876
  try {
14647
- arkAddress = chunkEJOFL5WH_cjs.ArkAddress.decode(output.address);
14877
+ arkAddress = chunk57636V35_cjs.ArkAddress.decode(output.address);
14648
14878
  } catch {
14649
14879
  arkAddress = void 0;
14650
14880
  }
@@ -14734,7 +14964,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
14734
14964
  const abortController = new AbortController();
14735
14965
  let stream;
14736
14966
  let committedTxid;
14737
- const settleInputVtxos = params.inputs.filter(chunkEJOFL5WH_cjs.isVirtualCoin);
14967
+ const settleInputVtxos = params.inputs.filter(chunk57636V35_cjs.isVirtualCoin);
14738
14968
  const contractManager = await this.getContractManager();
14739
14969
  await contractManager.assertAnnotatable(settleInputVtxos);
14740
14970
  await contractManager.assertSpendableNow?.(
@@ -14846,7 +15076,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
14846
15076
  async maybeRotateBoardingAfterBoard(inputs) {
14847
15077
  if (!this._descriptorProvider) return;
14848
15078
  const consumedBoarding = inputs.some(
14849
- (input) => typeof input !== "string" && !chunkEJOFL5WH_cjs.isVirtualCoin(input)
15079
+ (input) => typeof input !== "string" && !chunk57636V35_cjs.isVirtualCoin(input)
14850
15080
  );
14851
15081
  if (!consumedBoarding) return;
14852
15082
  try {
@@ -14870,7 +15100,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
14870
15100
  let connectorIndex = 0;
14871
15101
  const connectorsLeaves = connectorsGraph?.leaves() || [];
14872
15102
  for (const input of inputs) {
14873
- if (!chunkEJOFL5WH_cjs.isVirtualCoin(input)) {
15103
+ if (!chunk57636V35_cjs.isVirtualCoin(input)) {
14874
15104
  for (let i = 0; i < settlementPsbt.inputsLength; i++) {
14875
15105
  const settlementInput = settlementPsbt.getInput(i);
14876
15106
  if (!settlementInput.txid || settlementInput.index === void 0) {
@@ -14901,7 +15131,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
14901
15131
  }
14902
15132
  continue;
14903
15133
  }
14904
- if (chunkEJOFL5WH_cjs.canRecoverOnchain(input, { timestamp: /* @__PURE__ */ new Date() }) || isSubdust({ value: input.value }, this.dustAmount)) {
15134
+ if (chunk57636V35_cjs.canRecoverOnchain(input, { timestamp: /* @__PURE__ */ new Date() }) || isSubdust({ value: input.value }, this.dustAmount)) {
14905
15135
  continue;
14906
15136
  }
14907
15137
  if (connectorsLeaves.length === 0) {
@@ -14929,7 +15159,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
14929
15159
  index: input.vout,
14930
15160
  witnessUtxo: {
14931
15161
  amount: BigInt(input.value),
14932
- script: chunkEJOFL5WH_cjs.VtxoScript.decode(input.tapTree).pkScript
15162
+ script: chunk57636V35_cjs.VtxoScript.decode(input.tapTree).pkScript
14933
15163
  },
14934
15164
  sighashType: btcSigner.SigHash.DEFAULT,
14935
15165
  tapLeafScript: [input.forfeitTapLeafScript]
@@ -14948,7 +15178,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
14948
15178
  forfeitTx = await this._signerRouter.sign(forfeitTx, [
14949
15179
  {
14950
15180
  index: 0,
14951
- lookupScript: chunkEJOFL5WH_cjs.VtxoScript.decode(input.tapTree).pkScript
15181
+ lookupScript: chunk57636V35_cjs.VtxoScript.decode(input.tapTree).pkScript
14952
15182
  }
14953
15183
  ]);
14954
15184
  signedForfeits.push(base.base64.encode(forfeitTx.toPSBT()));
@@ -15006,7 +15236,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
15006
15236
  resolveBatchExpiryPolicy(this.network, this.batchExpiryPolicy)
15007
15237
  );
15008
15238
  await this.arkProvider.confirmRegistration(intentId);
15009
- const sweepTapscript = chunkEJOFL5WH_cjs.CSVMultisigTapscript.encode({
15239
+ const sweepTapscript = chunk57636V35_cjs.CSVMultisigTapscript.encode({
15010
15240
  timelock,
15011
15241
  pubkeys: [this.forfeitPubkey]
15012
15242
  }).script;
@@ -15021,10 +15251,10 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
15021
15251
  throw new Error("Sweep tap tree root not set");
15022
15252
  }
15023
15253
  const xOnlyPublicKeys = event.cosignersPublicKeys.map(
15024
- (k) => base.hex.encode(chunk6YUACVX4_cjs.toXOnly(base.hex.decode(k), "cosigner key"))
15254
+ (k) => base.hex.encode(chunk3OKEUDHU_cjs.toXOnly(base.hex.decode(k), "cosigner key"))
15025
15255
  );
15026
15256
  const signerPublicKey = await session.getPublicKey();
15027
- const xonlySignerPublicKey = chunk6YUACVX4_cjs.toXOnly(signerPublicKey, "signer key");
15257
+ const xonlySignerPublicKey = chunk3OKEUDHU_cjs.toXOnly(signerPublicKey, "signer key");
15028
15258
  if (!xOnlyPublicKeys.includes(base.hex.encode(xonlySignerPublicKey))) {
15029
15259
  return { skip: true };
15030
15260
  }
@@ -15114,9 +15344,9 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
15114
15344
  ...existing ?? {},
15115
15345
  intentTxId,
15116
15346
  registerProof: intent.proof,
15117
- registerProofMessage: chunkEJOFL5WH_cjs.Intent.encodeMessage(intent.message),
15347
+ registerProofMessage: chunk57636V35_cjs.Intent.encodeMessage(intent.message),
15118
15348
  deleteProof: deleteIntent.proof,
15119
- deleteProofMessage: chunkEJOFL5WH_cjs.Intent.encodeMessage(deleteIntent.message),
15349
+ deleteProofMessage: chunk57636V35_cjs.Intent.encodeMessage(deleteIntent.message),
15120
15350
  intentVtxos: inputs.map((i) => ({
15121
15351
  txid: i.txid,
15122
15352
  vout: i.vout
@@ -15148,7 +15378,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
15148
15378
  try {
15149
15379
  return await this.arkProvider.registerIntent(intent);
15150
15380
  } catch (error) {
15151
- if (error instanceof chunkEJOFL5WH_cjs.ArkError && error.code === 0 && error.message.includes("duplicated input")) {
15381
+ if (error instanceof chunk57636V35_cjs.ArkError && error.code === 0 && error.message.includes("duplicated input")) {
15152
15382
  const deleteIntent = await this.makeDeleteIntentSignature(inputs);
15153
15383
  await this.arkProvider.deleteIntent(deleteIntent);
15154
15384
  return this.arkProvider.registerIntent(intent);
@@ -15164,7 +15394,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
15164
15394
  expire_at: 0,
15165
15395
  cosigners_public_keys: cosignerPubKeys
15166
15396
  };
15167
- const proof = chunkEJOFL5WH_cjs.Intent.create(message, coins, outputs);
15397
+ const proof = chunk57636V35_cjs.Intent.create(message, coins, outputs);
15168
15398
  const signedProof = await this._signerRouter.sign(proof, intentProofJobs(coins));
15169
15399
  return {
15170
15400
  proof: base.base64.encode(signedProof.toPSBT()),
@@ -15176,7 +15406,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
15176
15406
  type: "delete",
15177
15407
  expire_at: 0
15178
15408
  };
15179
- const proof = chunkEJOFL5WH_cjs.Intent.create(message, coins, []);
15409
+ const proof = chunk57636V35_cjs.Intent.create(message, coins, []);
15180
15410
  const signedProof = await this._signerRouter.sign(proof, intentProofJobs(coins));
15181
15411
  return {
15182
15412
  proof: base.base64.encode(signedProof.toPSBT()),
@@ -15188,7 +15418,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
15188
15418
  type: "get-pending-tx",
15189
15419
  expire_at: 0
15190
15420
  };
15191
- const proof = chunkEJOFL5WH_cjs.Intent.create(message, coins, []);
15421
+ const proof = chunk57636V35_cjs.Intent.create(message, coins, []);
15192
15422
  const signedProof = await this._signerRouter.sign(proof, intentProofJobs(coins));
15193
15423
  return {
15194
15424
  proof: base.base64.encode(signedProof.toPSBT()),
@@ -15209,7 +15439,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
15209
15439
  if (!vtxos || vtxos.length === 0) {
15210
15440
  const scriptMap = await this.getScriptMap();
15211
15441
  const allExtended = [];
15212
- const fetchedVtxos = await chunkEJOFL5WH_cjs.getAllNormalizedVtxos(this.indexerProvider, [
15442
+ const fetchedVtxos = await chunk57636V35_cjs.getAllNormalizedVtxos(this.indexerProvider, [
15213
15443
  ...scriptMap.keys()
15214
15444
  ]);
15215
15445
  for (const vtxo of fetchedVtxos) {
@@ -15253,7 +15483,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
15253
15483
  try {
15254
15484
  const checkpointTxs = pendingTx.signedCheckpointTxs.map((c) => {
15255
15485
  const tx = btcSigner.Transaction.fromPSBT(base.base64.decode(c));
15256
- chunkEJOFL5WH_cjs.assertAllowedSighashTypes(tx);
15486
+ chunk57636V35_cjs.assertAllowedSighashTypes(tx);
15257
15487
  return tx;
15258
15488
  });
15259
15489
  assertCheckpointsMatchInputs(
@@ -15325,11 +15555,11 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
15325
15555
  * against the current key alone would leave it pending forever.
15326
15556
  */
15327
15557
  checkpointUnrollCandidates(info) {
15328
- const current = chunkEJOFL5WH_cjs.CSVMultisigTapscript.decode(base.hex.decode(info.checkpointTapscript));
15558
+ const current = chunk57636V35_cjs.CSVMultisigTapscript.decode(base.hex.decode(info.checkpointTapscript));
15329
15559
  const candidates = [this._serverUnrollScript, current];
15330
15560
  for (const deprecated of signerSetFromInfo(info).deprecated.keys()) {
15331
15561
  candidates.push(
15332
- chunkEJOFL5WH_cjs.CSVMultisigTapscript.encode({
15562
+ chunk57636V35_cjs.CSVMultisigTapscript.encode({
15333
15563
  ...current.params,
15334
15564
  pubkeys: [base.hex.decode(deprecated)]
15335
15565
  })
@@ -15420,7 +15650,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
15420
15650
  if (vtxos.length === 0) {
15421
15651
  throw new Error("No VTXOs found for this arkadeCash");
15422
15652
  }
15423
- const myPkScript = chunkEJOFL5WH_cjs.ArkAddress.decode(await this.getAddress()).pkScript;
15653
+ const myPkScript = chunk57636V35_cjs.ArkAddress.decode(await this.getAddress()).pkScript;
15424
15654
  let { spendable, unclaimed } = this.classifyCashVtxos(vtxos);
15425
15655
  let swept = 0;
15426
15656
  const drainable = vtxos.filter(
@@ -15496,7 +15726,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
15496
15726
  const spendable = [];
15497
15727
  const unclaimed = [];
15498
15728
  for (const vtxo of vtxos) {
15499
- if (chunkEJOFL5WH_cjs.hasTerminalSpend(vtxo)) {
15729
+ if (chunk57636V35_cjs.hasTerminalSpend(vtxo)) {
15500
15730
  unclaimed.push(cashReport(vtxo, "already-spent"));
15501
15731
  } else if (vtxo.isUnrolled) {
15502
15732
  unclaimed.push(cashReport(vtxo, "exited"));
@@ -15518,7 +15748,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
15518
15748
  const all = [];
15519
15749
  const seen = /* @__PURE__ */ new Set();
15520
15750
  for (let pageIndex = 0; ; pageIndex++) {
15521
- const { vtxos, page } = await chunkEJOFL5WH_cjs.getNormalizedVtxos(this.indexerProvider, {
15751
+ const { vtxos, page } = await chunk57636V35_cjs.getNormalizedVtxos(this.indexerProvider, {
15522
15752
  scripts,
15523
15753
  pageIndex,
15524
15754
  pageSize
@@ -15565,7 +15795,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
15565
15795
  for (let i = 0; i < inputs.length; i += MAX_INPUTS_PER_INTENT) {
15566
15796
  const batch = inputs.slice(i, i + MAX_INPUTS_PER_INTENT);
15567
15797
  const message = { type: "get-pending-tx", expire_at: 0 };
15568
- const proof = chunkEJOFL5WH_cjs.Intent.create(message, batch, []);
15798
+ const proof = chunk57636V35_cjs.Intent.create(message, batch, []);
15569
15799
  const signedProof = await identity.sign(
15570
15800
  proof,
15571
15801
  Array.from({ length: batch.length + 1 }, (_, j) => j)
@@ -15587,7 +15817,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
15587
15817
  try {
15588
15818
  const checkpointTxs = pendingTx.signedCheckpointTxs.map((checkpoint) => {
15589
15819
  const tx = btcSigner.Transaction.fromPSBT(base.base64.decode(checkpoint));
15590
- chunkEJOFL5WH_cjs.assertAllowedSighashTypes(tx);
15820
+ chunk57636V35_cjs.assertAllowedSighashTypes(tx);
15591
15821
  return tx;
15592
15822
  });
15593
15823
  assertCheckpointsMatchInputs(
@@ -15786,7 +16016,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
15786
16016
  script: recipient.script,
15787
16017
  amount: BigInt(recipient.amount),
15788
16018
  // Already checked against the recipient address in `validateRecipients`.
15789
- ...recipient.tapTree ? { tapTree: chunkEJOFL5WH_cjs.TapTreeCoder.decode(recipient.tapTree) } : {}
16019
+ ...recipient.tapTree ? { tapTree: chunk57636V35_cjs.TapTreeCoder.decode(recipient.tapTree) } : {}
15790
16020
  }));
15791
16021
  const totalBtcOutput = outputs.reduce((sum, o) => sum + Number(o.amount), 0);
15792
16022
  let changeAmount = totalBtcSelected - totalBtcOutput;
@@ -15930,10 +16160,10 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
15930
16160
  const serverPubKey = this.arkServerPublicKey;
15931
16161
  const serverUnrollScript = this.serverUnrollScript;
15932
16162
  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);
16163
+ const normalizedInputs = inputs.map(chunk57636V35_cjs.normalizeVtxo);
16164
+ const at = now ?? await chunk57636V35_cjs.resolveTimeHeight(this.onchainProvider);
15935
16165
  for (const input of normalizedInputs) {
15936
- if (!chunkEJOFL5WH_cjs.canSpendOffchain(input, at)) {
16166
+ if (!chunk57636V35_cjs.canSpendOffchain(input, at)) {
15937
16167
  throw new Error(
15938
16168
  `sendSelectedVtxosToSelf: input ${input.txid}:${input.vout} is not cooperatively spendable`
15939
16169
  );
@@ -16003,7 +16233,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
16003
16233
  );
16004
16234
  const arkTxJobs = inputs.map((input, index) => ({
16005
16235
  index,
16006
- lookupScript: chunkEJOFL5WH_cjs.VtxoScript.decode(input.tapTree).pkScript
16236
+ lookupScript: chunk57636V35_cjs.VtxoScript.decode(input.tapTree).pkScript
16007
16237
  }));
16008
16238
  const identity = this.identity;
16009
16239
  const signer = {
@@ -16089,14 +16319,14 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
16089
16319
  const spentBy = checkpointIdByOutpoint.get(`${vtxo.txid}:${vtxo.vout}`);
16090
16320
  spentVtxos.push({
16091
16321
  ...spentFacts,
16092
- virtualStatus: chunkEJOFL5WH_cjs.toVirtualStatus(spentFacts),
16322
+ virtualStatus: chunk57636V35_cjs.toVirtualStatus(spentFacts),
16093
16323
  ...spentBy ? { spentBy } : {},
16094
16324
  arkTxId: arkTxid
16095
16325
  });
16096
16326
  for (const id of vtxo.commitmentTxIds) {
16097
16327
  commitmentTxIds.add(id);
16098
16328
  }
16099
- const vtxoExpiry = chunkEJOFL5WH_cjs.toBatchExpiry(vtxo);
16329
+ const vtxoExpiry = chunk57636V35_cjs.toBatchExpiry(vtxo);
16100
16330
  if (vtxoExpiry) {
16101
16331
  batchExpiry = Math.min(batchExpiry, vtxoExpiry);
16102
16332
  }
@@ -16109,7 +16339,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
16109
16339
  isSwept: false,
16110
16340
  isPreconfirmed: true,
16111
16341
  commitmentTxIds: Array.from(commitmentTxIds),
16112
- ...chunkEJOFL5WH_cjs.parseLegacyExpiry(batchExpiry)
16342
+ ...chunk57636V35_cjs.parseLegacyExpiry(batchExpiry)
16113
16343
  };
16114
16344
  changeVtxo = {
16115
16345
  txid: arkTxid,
@@ -16121,7 +16351,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
16121
16351
  tapTree: offchainTapscript.encode(),
16122
16352
  value: Number(changeAmount),
16123
16353
  ...changeFacts,
16124
- virtualStatus: chunkEJOFL5WH_cjs.toVirtualStatus(changeFacts),
16354
+ virtualStatus: chunk57636V35_cjs.toVirtualStatus(changeFacts),
16125
16355
  spentBy: "",
16126
16356
  status: {
16127
16357
  confirmed: false
@@ -16190,12 +16420,12 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
16190
16420
  const spentVtxos = [];
16191
16421
  const inputArkTxIds = /* @__PURE__ */ new Set();
16192
16422
  const boardingRemovalsByAddress = /* @__PURE__ */ new Map();
16193
- const vtxoInputs = inputs.filter(chunkEJOFL5WH_cjs.isVirtualCoin);
16423
+ const vtxoInputs = inputs.filter(chunk57636V35_cjs.isVirtualCoin);
16194
16424
  const cm = await this.getContractManager();
16195
16425
  const annotatedVtxos = await cm.annotateVtxos(vtxoInputs);
16196
16426
  const annotatedByKey = new Map(annotatedVtxos.map((v) => [`${v.txid}:${v.vout}`, v]));
16197
16427
  for (const input of inputs) {
16198
- if (chunkEJOFL5WH_cjs.isVirtualCoin(input)) {
16428
+ if (chunk57636V35_cjs.isVirtualCoin(input)) {
16199
16429
  const outpoint = `${input.txid}:${input.vout}`;
16200
16430
  const vtxo = annotatedByKey.get(outpoint);
16201
16431
  if (!vtxo) {
@@ -16207,13 +16437,13 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
16207
16437
  const settledFacts = { ...vtxo, isSpent: true };
16208
16438
  spentVtxos.push({
16209
16439
  ...settledFacts,
16210
- virtualStatus: chunkEJOFL5WH_cjs.toVirtualStatus(settledFacts),
16440
+ virtualStatus: chunk57636V35_cjs.toVirtualStatus(settledFacts),
16211
16441
  settledBy: commitmentTxid
16212
16442
  });
16213
16443
  } else {
16214
16444
  let sourceAddress;
16215
16445
  try {
16216
- sourceAddress = chunkEJOFL5WH_cjs.VtxoScript.decode(input.tapTree).onchainAddress(
16446
+ sourceAddress = chunk57636V35_cjs.VtxoScript.decode(input.tapTree).onchainAddress(
16217
16447
  this.network
16218
16448
  );
16219
16449
  } catch {
@@ -16271,9 +16501,9 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
16271
16501
  }
16272
16502
  };
16273
16503
  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;
16504
+ const sortedCoins = coins.map(chunk57636V35_cjs.normalizeVtxo).sort((a, b) => {
16505
+ const expiryA = chunk57636V35_cjs.toBatchExpiry(a) || Number.MAX_SAFE_INTEGER;
16506
+ const expiryB = chunk57636V35_cjs.toBatchExpiry(b) || Number.MAX_SAFE_INTEGER;
16277
16507
  if (expiryA !== expiryB) {
16278
16508
  return expiryA - expiryB;
16279
16509
  }
@@ -16300,19 +16530,53 @@ function selectVirtualCoins(coins, targetAmount) {
16300
16530
  changeAmount
16301
16531
  };
16302
16532
  }
16303
- async function waitForIncomingFunds(wallet) {
16533
+ var AbortError = class extends Error {
16534
+ constructor(message = "Operation aborted") {
16535
+ super(message);
16536
+ this.name = "AbortError";
16537
+ }
16538
+ };
16539
+ function abortReason(signal) {
16540
+ const { reason } = signal;
16541
+ if (reason instanceof Error) return reason;
16542
+ return new AbortError(typeof reason === "string" ? reason : void 0);
16543
+ }
16544
+ async function waitForIncomingFunds(wallet, options) {
16545
+ const { signal, timeoutMs } = options ?? {};
16546
+ if (signal?.aborted) throw abortReason(signal);
16304
16547
  let stopFunc;
16305
16548
  let settled = false;
16306
- return new Promise((resolve) => {
16549
+ let timeoutId;
16550
+ let onAbort;
16551
+ return new Promise((resolve, reject) => {
16552
+ const settle = (deliver) => {
16553
+ if (settled) return;
16554
+ settled = true;
16555
+ if (timeoutId !== void 0) clearTimeout(timeoutId);
16556
+ if (onAbort) signal?.removeEventListener("abort", onAbort);
16557
+ stopFunc?.();
16558
+ deliver();
16559
+ };
16560
+ const cancel = (reason) => settle(() => reject(reason));
16561
+ if (signal) {
16562
+ onAbort = () => cancel(abortReason(signal));
16563
+ signal.addEventListener("abort", onAbort);
16564
+ }
16565
+ if (timeoutMs !== void 0) {
16566
+ timeoutId = setTimeout(
16567
+ () => cancel(new AbortError(`waitForIncomingFunds timed out after ${timeoutMs}ms`)),
16568
+ timeoutMs
16569
+ );
16570
+ }
16307
16571
  wallet.notifyIncomingFunds((funds) => {
16308
16572
  const hasFunds = funds.type === "utxo" ? funds.coins.length > 0 : funds.newVtxos.length > 0;
16309
16573
  if (settled || !hasFunds) return;
16310
- settled = true;
16311
- resolve(funds);
16312
- stopFunc?.();
16574
+ settle(() => resolve(funds));
16313
16575
  }).then((stop) => {
16314
16576
  stopFunc = stop;
16315
16577
  if (settled) stop();
16578
+ }).catch((error) => {
16579
+ cancel(error);
16316
16580
  });
16317
16581
  });
16318
16582
  }
@@ -16608,7 +16872,7 @@ var MessageBus = class {
16608
16872
  this.initialized = true;
16609
16873
  }
16610
16874
  async buildServices(config) {
16611
- const arkProvider = new chunkEJOFL5WH_cjs.RestArkProvider(config.arkServer.url);
16875
+ const arkProvider = new chunk57636V35_cjs.RestArkProvider(config.arkServer.url);
16612
16876
  const storage = {
16613
16877
  walletRepository: this.walletRepository,
16614
16878
  contractRepository: this.contractRepository,
@@ -16950,7 +17214,7 @@ var offboardNetworkNames = [
16950
17214
  function offboardDestinationScript(destinationAddress) {
16951
17215
  for (const networkName of offboardNetworkNames) {
16952
17216
  try {
16953
- const network = chunkEJOFL5WH_cjs.networks[networkName];
17217
+ const network = chunk57636V35_cjs.networks[networkName];
16954
17218
  const addr = btcSigner.Address(network).decode(destinationAddress);
16955
17219
  return btcSigner.OutScript.encode(addr);
16956
17220
  } catch {
@@ -17014,7 +17278,7 @@ var Ramps = class {
17014
17278
  }
17015
17279
  amount = amount ?? totalAmount;
17016
17280
  const offchainAddress = await this.wallet.getAddress();
17017
- const offchainAddr = chunkEJOFL5WH_cjs.ArkAddress.decode(offchainAddress);
17281
+ const offchainAddr = chunk57636V35_cjs.ArkAddress.decode(offchainAddress);
17018
17282
  const offchainScript = base.hex.encode(offchainAddr.pkScript);
17019
17283
  const outputFee = estimator.evalOffchainOutput({
17020
17284
  amount,
@@ -17074,7 +17338,7 @@ var Ramps = class {
17074
17338
  const filteredVtxos = [];
17075
17339
  let totalAmount = 0n;
17076
17340
  for (const vtxo of vtxos) {
17077
- const inputFee = estimator.evalOffchainInput(chunkEJOFL5WH_cjs.toOffchainInputFeeParams(vtxo));
17341
+ const inputFee = estimator.evalOffchainInput(chunk57636V35_cjs.toOffchainInputFeeParams(vtxo));
17078
17342
  if (inputFee.satoshis >= vtxo.value) {
17079
17343
  continue;
17080
17344
  }
@@ -17910,7 +18174,7 @@ var WalletMessageHandler = class {
17910
18174
  // Wallet methods
17911
18175
  async handleInitWallet({ payload }) {
17912
18176
  const { arkServerUrl } = payload;
17913
- this.indexerProvider = new chunkPJR63FTK_cjs.RestIndexerProvider(arkServerUrl);
18177
+ this.indexerProvider = new chunk3KW4TWP2_cjs.RestIndexerProvider(arkServerUrl);
17914
18178
  await this.onWalletInitialized();
17915
18179
  }
17916
18180
  /**
@@ -18199,7 +18463,7 @@ var WalletMessageHandler = class {
18199
18463
  if (v.isUnrolled) {
18200
18464
  return withUnrolled;
18201
18465
  }
18202
- if (chunkEJOFL5WH_cjs.hasTerminalSpend(v)) {
18466
+ if (chunk57636V35_cjs.hasTerminalSpend(v)) {
18203
18467
  return false;
18204
18468
  }
18205
18469
  if (includeRecoverable) {
@@ -18208,10 +18472,10 @@ var WalletMessageHandler = class {
18208
18472
  if (dustAmount != null && isSubdust(v, dustAmount)) {
18209
18473
  return false;
18210
18474
  }
18211
- if (chunkEJOFL5WH_cjs.isRecoverable(v)) {
18475
+ if (chunk57636V35_cjs.isRecoverable(v)) {
18212
18476
  return false;
18213
18477
  }
18214
- if (chunkEJOFL5WH_cjs.isExpired(v)) {
18478
+ if (chunk57636V35_cjs.isExpired(v)) {
18215
18479
  return false;
18216
18480
  }
18217
18481
  return true;
@@ -18309,7 +18573,7 @@ var WalletMessageHandler = class {
18309
18573
  if (!this.readonlyWallet) return null;
18310
18574
  const { boardingTxs, commitmentsToIgnore } = await this.readonlyWallet.getBoardingTxs();
18311
18575
  const indexerProvider = this.indexerProvider;
18312
- const resolveTxCreatedAt = indexerProvider ? (txids) => chunkEJOFL5WH_cjs.fetchVtxoCreatedAtByTxid(indexerProvider, txids) : void 0;
18576
+ const resolveTxCreatedAt = indexerProvider ? (txids) => chunk57636V35_cjs.fetchVtxoCreatedAtByTxid(indexerProvider, txids) : void 0;
18313
18577
  return buildTransactionHistory(vtxos, boardingTxs, commitmentsToIgnore, resolveTxCreatedAt);
18314
18578
  }
18315
18579
  async ensureContractEventBroadcasting() {
@@ -19005,7 +19269,7 @@ var ServiceWorkerReadonlyWallet = class _ServiceWorkerReadonlyWallet {
19005
19269
  };
19006
19270
  try {
19007
19271
  const response = await this.sendMessage(message);
19008
- return response.payload.vtxos.map(chunkEJOFL5WH_cjs.normalizeVtxo);
19272
+ return response.payload.vtxos.map(chunk57636V35_cjs.normalizeVtxo);
19009
19273
  } catch (error) {
19010
19274
  throw new Error(`Failed to get vtxos: ${error}`);
19011
19275
  }
@@ -19030,7 +19294,7 @@ var ServiceWorkerReadonlyWallet = class _ServiceWorkerReadonlyWallet {
19030
19294
  };
19031
19295
  try {
19032
19296
  const response = await this.sendMessage(message);
19033
- return response.payload.vtxos.map(chunkEJOFL5WH_cjs.normalizeVtxo);
19297
+ return response.payload.vtxos.map(chunk57636V35_cjs.normalizeVtxo);
19034
19298
  } catch (error) {
19035
19299
  throw new Error(`Failed to get spendable vtxos: ${error}`);
19036
19300
  }
@@ -19161,7 +19425,7 @@ var ServiceWorkerReadonlyWallet = class _ServiceWorkerReadonlyWallet {
19161
19425
  };
19162
19426
  try {
19163
19427
  const response = await sendContractMessage(message);
19164
- return response.payload.vtxos.map(chunkEJOFL5WH_cjs.normalizeVtxo);
19428
+ return response.payload.vtxos.map(chunk57636V35_cjs.normalizeVtxo);
19165
19429
  } catch (e) {
19166
19430
  throw new Error("Failed to annotate vtxos");
19167
19431
  }
@@ -19762,7 +20026,7 @@ var ServiceWorkerWallet = class _ServiceWorkerWallet extends ServiceWorkerReadon
19762
20026
  };
19763
20027
  try {
19764
20028
  const response = await wallet.sendMessage(message);
19765
- return response.payload.vtxos.map(chunkEJOFL5WH_cjs.normalizeVtxo);
20029
+ return response.payload.vtxos.map(chunk57636V35_cjs.normalizeVtxo);
19766
20030
  } catch (e) {
19767
20031
  throw new Error(`Failed to get expiring vtxos: ${e}`);
19768
20032
  }
@@ -19874,12 +20138,12 @@ var OnchainWallet = class _OnchainWallet {
19874
20138
  * @returns Configured onchain wallet
19875
20139
  * @throws Error if the configured identity cannot produce a valid x-only public key
19876
20140
  */
19877
- static async create(identity, networkName = chunkEJOFL5WH_cjs.DEFAULT_NETWORK_NAME, provider) {
20141
+ static async create(identity, networkName = chunk57636V35_cjs.DEFAULT_NETWORK_NAME, provider) {
19878
20142
  const pubkey = await identity.xOnlyPublicKey();
19879
20143
  if (!pubkey) {
19880
20144
  throw new Error("Invalid configured public key");
19881
20145
  }
19882
- const network = chunkEJOFL5WH_cjs.getNetwork(networkName);
20146
+ const network = chunk57636V35_cjs.getNetwork(networkName);
19883
20147
  const onchainProvider = provider || new EsploraProvider(ESPLORA_URL[networkName]);
19884
20148
  const onchainP2TR = btcSigner.p2tr(pubkey, void 0, network);
19885
20149
  return new _OnchainWallet(identity, network, onchainP2TR, onchainProvider);
@@ -19985,7 +20249,7 @@ var OnchainWallet = class _OnchainWallet {
19985
20249
  if (!inputs) {
19986
20250
  throw new Error("Fee estimation failed");
19987
20251
  }
19988
- let tx = new chunkEJOFL5WH_cjs.Transaction();
20252
+ let tx = new chunk57636V35_cjs.Transaction();
19989
20253
  for (const input of inputs) {
19990
20254
  tx.addInput({
19991
20255
  txid: input.txid,
@@ -20043,7 +20307,7 @@ var OnchainWallet = class _OnchainWallet {
20043
20307
  * @throws If the parent has no anchor, or funding cannot be selected/signed
20044
20308
  */
20045
20309
  async bumpAnchor(parentHex, feeRate) {
20046
- const parent = chunkEJOFL5WH_cjs.Transaction.fromRaw(base.hex.decode(parentHex));
20310
+ const parent = chunk57636V35_cjs.Transaction.fromRaw(base.hex.decode(parentHex));
20047
20311
  const coins = (await this.getCoins()).filter((c) => c.status.confirmed);
20048
20312
  const child = await this.buildBumpPackage(parent, feeRate, coins);
20049
20313
  return [parent.hex, child.hex];
@@ -20142,6 +20406,7 @@ var ListUnspentMethod = "blockchain.scripthash.listunspent";
20142
20406
  var MISSING_TRANSACTION = "missingtransaction";
20143
20407
  var MAX_FETCH_TRANSACTIONS_ATTEMPTS = 5;
20144
20408
  var BLOCK_HEADER_SIZE = 80;
20409
+ var MTP_WINDOW = 11;
20145
20410
  function parseBlockHeader(headerHex) {
20146
20411
  const headerBytes = base.hex.decode(headerHex);
20147
20412
  if (headerBytes.length !== BLOCK_HEADER_SIZE) {
@@ -20448,6 +20713,8 @@ var ElectrumOnchainProvider = class {
20448
20713
  ws;
20449
20714
  network;
20450
20715
  chain;
20716
+ mtpCache;
20717
+ mtpInflight;
20451
20718
  async getCoins(address) {
20452
20719
  const script = this.encodeAddress(address);
20453
20720
  const scriptHash = toScriptHash(script);
@@ -20703,15 +20970,58 @@ var ElectrumOnchainProvider = class {
20703
20970
  blockTime
20704
20971
  };
20705
20972
  }
20973
+ /** `time` is median-time-past, per {@link OnchainProvider.getChainTip};
20974
+ * Electrum serves raw headers and no MTP, so it is computed here. */
20706
20975
  async getChainTip() {
20707
20976
  const tip = await this.chain.subscribeHeaders();
20708
20977
  const { hash, timestamp } = parseBlockHeader(tip.hex);
20709
20978
  return {
20710
20979
  height: tip.height,
20711
- time: timestamp,
20980
+ time: await this.medianTimePast(tip.height, timestamp, hash),
20712
20981
  hash
20713
20982
  };
20714
20983
  }
20984
+ /**
20985
+ * Consensus's `GetMedianTimePast`, ending at and including `height`.
20986
+ *
20987
+ * Cached per tip HASH, not height: this runs on every balance read, and
20988
+ * hashing means a reorg at the same height recomputes rather than serving
20989
+ * the orphaned chain's median.
20990
+ */
20991
+ async medianTimePast(height, tipTime, hash) {
20992
+ if (this.mtpCache?.hash === hash) return this.mtpCache.mtp;
20993
+ if (this.mtpInflight?.hash === hash) return this.mtpInflight.mtp;
20994
+ const mtp = this.readMedianTimePast(height, tipTime, hash).finally(() => {
20995
+ this.mtpInflight = void 0;
20996
+ });
20997
+ this.mtpInflight = { hash, mtp };
20998
+ return mtp;
20999
+ }
21000
+ /** Degrades to the tip's `nTime` rather than throwing — a caller that
21001
+ * cannot read the tip at all is worse off. */
21002
+ async readMedianTimePast(height, tipTime, hash) {
21003
+ const heights = [];
21004
+ for (let h = height - 1; h >= 0 && heights.length < MTP_WINDOW - 1; h--) heights.push(h);
21005
+ if (heights.length === 0) return tipTime;
21006
+ let timestamps;
21007
+ try {
21008
+ const headers = await this.chain.fetchBlockHeaders(heights);
21009
+ timestamps = [
21010
+ tipTime,
21011
+ ...headers.map((header) => parseBlockHeader(header.hex).timestamp)
21012
+ ];
21013
+ } catch (e) {
21014
+ console.warn(
21015
+ "Failed to fetch the median-time-past window; using the tip's own time",
21016
+ e
21017
+ );
21018
+ return tipTime;
21019
+ }
21020
+ timestamps.sort((a, b) => a - b);
21021
+ const mtp = timestamps[Math.floor(timestamps.length / 2)];
21022
+ this.mtpCache = { hash, mtp };
21023
+ return mtp;
21024
+ }
20715
21025
  async watchAddresses(addresses, eventCallback) {
20716
21026
  const scripts = addresses.map((addr) => this.encodeAddress(addr));
20717
21027
  const scriptHashes = scripts.map(toScriptHash);
@@ -20904,7 +21214,7 @@ async function resolvePrevTxs(txids, source, onchain) {
20904
21214
  try {
20905
21215
  const { txs } = await source.getVirtualTxs(wanted);
20906
21216
  for (const psbt of txs) {
20907
- const tx = chunkEJOFL5WH_cjs.Transaction.fromPSBT(base.base64.decode(psbt));
21217
+ const tx = chunk57636V35_cjs.Transaction.fromPSBT(base.base64.decode(psbt));
20908
21218
  resolved.set(tx.id, tx.toBytes());
20909
21219
  }
20910
21220
  } catch (err) {
@@ -20937,7 +21247,7 @@ async function resolvePrevTxs(txids, source, onchain) {
20937
21247
  async function attachPrevArkTxs(tx, txids, source, onchain) {
20938
21248
  const pending = [];
20939
21249
  for (let i = 0; i < tx.inputsLength; i++) {
20940
- if (chunkEJOFL5WH_cjs.getArkPsbtFields(tx, i, chunkEJOFL5WH_cjs.PrevArkTxField).length === 0) pending.push(i);
21250
+ if (chunk57636V35_cjs.getArkPsbtFields(tx, i, chunk57636V35_cjs.PrevArkTxField).length === 0) pending.push(i);
20941
21251
  }
20942
21252
  if (pending.length === 0) return;
20943
21253
  const resolved = await resolvePrevTxs(
@@ -20946,13 +21256,13 @@ async function attachPrevArkTxs(tx, txids, source, onchain) {
20946
21256
  onchain
20947
21257
  );
20948
21258
  for (const i of pending) {
20949
- chunkEJOFL5WH_cjs.setArkPsbtField(tx, i, chunkEJOFL5WH_cjs.PrevArkTxField, resolved.get(txidAt(txids, i)));
21259
+ chunk57636V35_cjs.setArkPsbtField(tx, i, chunk57636V35_cjs.PrevArkTxField, resolved.get(txidAt(txids, i)));
20950
21260
  }
20951
21261
  }
20952
21262
  async function attachPrevoutTxs(tx, source) {
20953
21263
  const pending = [];
20954
21264
  for (let i = 0; i < tx.inputsLength; i++) {
20955
- if (chunkEJOFL5WH_cjs.getArkPsbtFields(tx, i, chunkEJOFL5WH_cjs.PrevoutTxField).length > 0) continue;
21265
+ if (chunk57636V35_cjs.getArkPsbtFields(tx, i, chunk57636V35_cjs.PrevoutTxField).length > 0) continue;
20956
21266
  const input = tx.getInput(i);
20957
21267
  if (!input?.txid) throw new PrevTxUnavailableError(`input ${i} has no outpoint`);
20958
21268
  pending.push({ index: i, txid: base.hex.encode(input.txid) });
@@ -20963,7 +21273,7 @@ async function attachPrevoutTxs(tx, source) {
20963
21273
  resolved.set(txid, await source.getRawTransaction(txid));
20964
21274
  }
20965
21275
  for (const { index, txid } of pending) {
20966
- chunkEJOFL5WH_cjs.setArkPsbtField(tx, index, chunkEJOFL5WH_cjs.PrevoutTxField, resolved.get(txid));
21276
+ chunk57636V35_cjs.setArkPsbtField(tx, index, chunk57636V35_cjs.PrevoutTxField, resolved.get(txid));
20967
21277
  }
20968
21278
  }
20969
21279
  async function withPrevTxs(coins, source, onchain) {
@@ -20989,7 +21299,7 @@ exports.BIP322 = void 0;
20989
21299
  async function sign2(message, identity, network) {
20990
21300
  const xOnlyPubKey = await identity.xOnlyPublicKey();
20991
21301
  const payment = btcSigner.p2tr(xOnlyPubKey, void 0, network);
20992
- const toSpend = chunkEJOFL5WH_cjs.craftToSpendTx(message, payment.script, TAG_BIP322);
21302
+ const toSpend = chunk57636V35_cjs.craftToSpendTx(message, payment.script, TAG_BIP322);
20993
21303
  const toSign = craftBIP322ToSignP2TR(toSpend, payment.script, xOnlyPubKey);
20994
21304
  const signed = await identity.sign(toSign, [0]);
20995
21305
  signed.finalizeIdx(0);
@@ -21047,7 +21357,7 @@ function verifyP2TR(message, witnessItems, pkScript, pubkey) {
21047
21357
  if (sighashType !== btcSigner.SigHash.DEFAULT && sighashType !== btcSigner.SigHash.ALL) {
21048
21358
  return false;
21049
21359
  }
21050
- const toSpend = chunkEJOFL5WH_cjs.craftToSpendTx(message, pkScript, TAG_BIP322);
21360
+ const toSpend = chunk57636V35_cjs.craftToSpendTx(message, pkScript, TAG_BIP322);
21051
21361
  const toSign = craftBIP322ToSignP2TR(toSpend, pkScript, pubkey);
21052
21362
  const sighash = toSign.preimageWitnessV1(0, [pkScript], sighashType, [0n]);
21053
21363
  const rawSig = sig.length === 65 ? sig.subarray(0, 64) : sig;
@@ -21068,7 +21378,7 @@ function verifyP2WPKH(message, witnessItems, pkScript, addressHash) {
21068
21378
  }
21069
21379
  const sighashType = sigWithHash[sigWithHash.length - 1];
21070
21380
  const derSig = sigWithHash.subarray(0, sigWithHash.length - 1);
21071
- const toSpend = chunkEJOFL5WH_cjs.craftToSpendTx(message, pkScript, TAG_BIP322);
21381
+ const toSpend = chunk57636V35_cjs.craftToSpendTx(message, pkScript, TAG_BIP322);
21072
21382
  const toSign = craftBIP322ToSignSimple(toSpend, pkScript);
21073
21383
  const scriptCode = btcSigner.OutScript.encode({ type: "pkh", hash: addressHash });
21074
21384
  const sighash = toSign.preimageWitnessV0(0, scriptCode, sighashType, 0n);
@@ -21121,7 +21431,7 @@ function encodeCompactSize(n) {
21121
21431
  return buf;
21122
21432
  }
21123
21433
  function craftBIP322ToSignP2TR(toSpend, pkScript, tapInternalKey) {
21124
- const tx = new chunkEJOFL5WH_cjs.Transaction({ version: 0 });
21434
+ const tx = new chunk57636V35_cjs.Transaction({ version: 0 });
21125
21435
  tx.addInput({
21126
21436
  txid: toSpend.id,
21127
21437
  index: 0,
@@ -21135,12 +21445,12 @@ function craftBIP322ToSignP2TR(toSpend, pkScript, tapInternalKey) {
21135
21445
  });
21136
21446
  tx.addOutput({
21137
21447
  amount: 0n,
21138
- script: chunkEJOFL5WH_cjs.OP_RETURN_EMPTY_PKSCRIPT
21448
+ script: chunk57636V35_cjs.OP_RETURN_EMPTY_PKSCRIPT
21139
21449
  });
21140
21450
  return tx;
21141
21451
  }
21142
21452
  function craftBIP322ToSignSimple(toSpend, pkScript) {
21143
- const tx = new chunkEJOFL5WH_cjs.Transaction({ version: 0 });
21453
+ const tx = new chunk57636V35_cjs.Transaction({ version: 0 });
21144
21454
  tx.addInput({
21145
21455
  txid: toSpend.id,
21146
21456
  index: 0,
@@ -21152,7 +21462,7 @@ function craftBIP322ToSignSimple(toSpend, pkScript) {
21152
21462
  });
21153
21463
  tx.addOutput({
21154
21464
  amount: 0n,
21155
- script: chunkEJOFL5WH_cjs.OP_RETURN_EMPTY_PKSCRIPT
21465
+ script: chunk57636V35_cjs.OP_RETURN_EMPTY_PKSCRIPT
21156
21466
  });
21157
21467
  return tx;
21158
21468
  }
@@ -21283,7 +21593,7 @@ var RestEmulatorProvider = class {
21283
21593
  }
21284
21594
  };
21285
21595
  function finalizeVirtualTx(type, psbtBase64) {
21286
- const tx = chunkEJOFL5WH_cjs.Transaction.fromPSBT(base.base64.decode(psbtBase64));
21596
+ const tx = chunk57636V35_cjs.Transaction.fromPSBT(base.base64.decode(psbtBase64));
21287
21597
  if (type === "INDEXER_CHAINED_TX_TYPE_TREE" /* TREE */) {
21288
21598
  const input = tx.getInput(0);
21289
21599
  if (!input) {
@@ -21310,14 +21620,14 @@ var ExitPathError = class extends Error {
21310
21620
  reason;
21311
21621
  };
21312
21622
  function delayWeight(sequence) {
21313
- const t = chunkEJOFL5WH_cjs.sequenceToTimelock(sequence);
21623
+ const t = chunk57636V35_cjs.sequenceToTimelock(sequence);
21314
21624
  return t.type === "blocks" ? Number(t.value) : Number(t.value) / 600;
21315
21625
  }
21316
21626
  async function resolveUnilateralPath(params) {
21317
21627
  const { vtxo, scriptHex, contractRepository } = params;
21318
21628
  const contract = contractRepository ? (await contractRepository.getContracts({ script: scriptHex }))[0] : void 0;
21319
21629
  if (contract) {
21320
- const handler = chunk6YUACVX4_cjs.contractHandlers.get(contract.type);
21630
+ const handler = chunk3OKEUDHU_cjs.contractHandlers.get(contract.type);
21321
21631
  if (!handler) {
21322
21632
  throw new ExitPathError(
21323
21633
  "no-handler",
@@ -21340,12 +21650,12 @@ async function resolveUnilateralPath(params) {
21340
21650
  paths.sort((a, b) => delayWeight(a.sequence) - delayWeight(b.sequence));
21341
21651
  return { selection: paths[0], label: `${contract.type}:unilateral` };
21342
21652
  }
21343
- const decoded = chunkEJOFL5WH_cjs.VtxoScript.decode(vtxo.tapTree);
21653
+ const decoded = chunk57636V35_cjs.VtxoScript.decode(vtxo.tapTree);
21344
21654
  let best;
21345
21655
  for (const exit of decoded.exitPaths()) {
21346
21656
  const leaf = decoded.findLeaf(base.hex.encode(exit.script));
21347
21657
  if (!leaf) continue;
21348
- const sequence = chunkEJOFL5WH_cjs.timelockToSequence(exit.params.timelock);
21658
+ const sequence = chunk57636V35_cjs.timelockToSequence(exit.params.timelock);
21349
21659
  const weight = delayWeight(sequence);
21350
21660
  if (!best || weight < best.weight) {
21351
21661
  best = { selection: { leaf, sequence }, weight };
@@ -21565,7 +21875,7 @@ async function prepareUnrollTransaction(wallet, vtxoTxIds, outputAddress) {
21565
21875
  let totalAmount = 0n;
21566
21876
  const txWeightEstimator = TxWeightEstimator.create();
21567
21877
  for (const vtxo of vtxos) {
21568
- if (!chunkEJOFL5WH_cjs.canSweepOnchain(vtxo)) {
21878
+ if (!chunk57636V35_cjs.canSweepOnchain(vtxo)) {
21569
21879
  throw new Error(
21570
21880
  `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
21881
  );
@@ -21576,14 +21886,14 @@ async function prepareUnrollTransaction(wallet, vtxoTxIds, outputAddress) {
21576
21886
  }
21577
21887
  const resolved = await resolveUnilateralPath({
21578
21888
  vtxo,
21579
- scriptHex: base.hex.encode(chunkEJOFL5WH_cjs.VtxoScript.decode(vtxo.tapTree).pkScript),
21889
+ scriptHex: base.hex.encode(chunk57636V35_cjs.VtxoScript.decode(vtxo.tapTree).pkScript),
21580
21890
  contractRepository: wallet.contractRepository,
21581
21891
  walletPubKeyHex: base.hex.encode(await wallet.identity.xOnlyPublicKey()),
21582
21892
  currentTime: Date.now()
21583
21893
  });
21584
21894
  const spendingLeaf = resolved.selection.leaf;
21585
21895
  const sequence = resolved.selection.sequence;
21586
- const timelock = chunkEJOFL5WH_cjs.sequenceToTimelock(sequence);
21896
+ const timelock = chunk57636V35_cjs.sequenceToTimelock(sequence);
21587
21897
  const elapsed = timelock.type === "blocks" ? chainTip.height >= txStatus.blockHeight + Number(timelock.value) : chainTip.time >= txStatus.blockTime + Number(timelock.value);
21588
21898
  if (!elapsed) {
21589
21899
  throw new Error(`no available exit path found for vtxo ${vtxo.txid}:${vtxo.vout}`);
@@ -21596,7 +21906,7 @@ async function prepareUnrollTransaction(wallet, vtxoTxIds, outputAddress) {
21596
21906
  sequence,
21597
21907
  witnessUtxo: {
21598
21908
  amount: BigInt(vtxo.value),
21599
- script: chunkEJOFL5WH_cjs.VtxoScript.decode(vtxo.tapTree).pkScript
21909
+ script: chunk57636V35_cjs.VtxoScript.decode(vtxo.tapTree).pkScript
21600
21910
  },
21601
21911
  sighashType: btcSigner.SigHash.DEFAULT
21602
21912
  });
@@ -21606,7 +21916,7 @@ async function prepareUnrollTransaction(wallet, vtxoTxIds, outputAddress) {
21606
21916
  btcSigner.TaprootControlBlock.encode(spendingLeaf[0]).length
21607
21917
  );
21608
21918
  }
21609
- const tx = new chunkEJOFL5WH_cjs.Transaction({ version: 2 });
21919
+ const tx = new chunk57636V35_cjs.Transaction({ version: 2 });
21610
21920
  for (const input of inputs) {
21611
21921
  tx.addInput(input);
21612
21922
  }
@@ -21689,7 +21999,7 @@ async function buildSignedSweep(params) {
21689
21999
  `uneconomic vtxo ${vtxo.txid}:${vtxo.vout}: value ${vtxo.value} - fee ${fee} < dust`
21690
22000
  );
21691
22001
  }
21692
- const tx = new chunkEJOFL5WH_cjs.Transaction({ version: 2 });
22002
+ const tx = new chunk57636V35_cjs.Transaction({ version: 2 });
21693
22003
  tx.addInput({
21694
22004
  txid: vtxo.txid,
21695
22005
  index: vtxo.vout,
@@ -21714,7 +22024,7 @@ async function buildSignedSweep(params) {
21714
22024
  finalScriptWitness: [
21715
22025
  tapScriptSig[0][1],
21716
22026
  ...path.extraWitness,
21717
- chunkEJOFL5WH_cjs.scriptFromTapLeafScript(path.leaf),
22027
+ chunk57636V35_cjs.scriptFromTapLeafScript(path.leaf),
21718
22028
  btcSigner.TaprootControlBlock.encode(controlBlock)
21719
22029
  ]
21720
22030
  });
@@ -21744,7 +22054,7 @@ async function resolveFeeRate(opts) {
21744
22054
  }
21745
22055
  async function selectExitVtxos(opts) {
21746
22056
  if (!opts.vtxos) return opts.wallet.getVtxos();
21747
- const res = await chunkEJOFL5WH_cjs.getNormalizedVtxos(opts.wallet.indexerProvider, { outpoints: opts.vtxos });
22057
+ const res = await chunk57636V35_cjs.getNormalizedVtxos(opts.wallet.indexerProvider, { outpoints: opts.vtxos });
21748
22058
  const tapTrees = /* @__PURE__ */ new Map();
21749
22059
  const out = [];
21750
22060
  for (const vtxo of res.vtxos) {
@@ -21759,7 +22069,7 @@ async function selectExitVtxos(opts) {
21759
22069
  `no contract registered for vtxo script ${vtxo.script} \u2014 register the contract before exiting`
21760
22070
  );
21761
22071
  }
21762
- const handler = chunk6YUACVX4_cjs.contractHandlers.get(contract.type);
22072
+ const handler = chunk3OKEUDHU_cjs.contractHandlers.get(contract.type);
21763
22073
  if (!handler) {
21764
22074
  throw new Error(`no contract handler registered for type '${contract.type}'`);
21765
22075
  }
@@ -21789,7 +22099,7 @@ async function computeExitLayout(opts, feeRate) {
21789
22099
  if (pendingNodes.length > 0) {
21790
22100
  const txs = await resolver.getVirtualTxs(pendingNodes.map((n) => n.txid));
21791
22101
  for (const psbt of txs) {
21792
- psbts.set(chunkEJOFL5WH_cjs.Transaction.fromPSBT(base.base64.decode(psbt)).id, psbt);
22102
+ psbts.set(chunk57636V35_cjs.Transaction.fromPSBT(base.base64.decode(psbt)).id, psbt);
21793
22103
  }
21794
22104
  }
21795
22105
  const childVsize = Number(
@@ -21825,7 +22135,7 @@ async function computeExitLayout(opts, feeRate) {
21825
22135
  try {
21826
22136
  const resolved = await resolveUnilateralPath({
21827
22137
  vtxo,
21828
- scriptHex: base.hex.encode(chunkEJOFL5WH_cjs.VtxoScript.decode(vtxo.tapTree).pkScript),
22138
+ scriptHex: base.hex.encode(chunk57636V35_cjs.VtxoScript.decode(vtxo.tapTree).pkScript),
21829
22139
  contractRepository: wallet.contractRepository,
21830
22140
  walletPubKeyHex,
21831
22141
  currentTime: Date.now()
@@ -21844,7 +22154,7 @@ async function computeExitLayout(opts, feeRate) {
21844
22154
  });
21845
22155
  continue;
21846
22156
  }
21847
- const t = chunkEJOFL5WH_cjs.sequenceToTimelock(resolved.selection.sequence);
22157
+ const t = chunk57636V35_cjs.sequenceToTimelock(resolved.selection.sequence);
21848
22158
  const delay = { type: t.type, value: Number(t.value) };
21849
22159
  infos.push({ outpoint, value: vtxo.value, sweepFee, path: resolved.label, delay });
21850
22160
  sweeps.push({ vtxo, resolved, sweepFee, delay });
@@ -22245,7 +22555,7 @@ async function prepare(opts) {
22245
22555
  txid: sweep.vtxo.txid,
22246
22556
  vout: sweep.vtxo.vout,
22247
22557
  value: sweep.vtxo.value,
22248
- pkScript: chunkEJOFL5WH_cjs.VtxoScript.decode(sweep.vtxo.tapTree).pkScript
22558
+ pkScript: chunk57636V35_cjs.VtxoScript.decode(sweep.vtxo.tapTree).pkScript
22249
22559
  },
22250
22560
  path: sweep.resolved.selection,
22251
22561
  outputAddress: opts.sweepAddress,
@@ -22333,7 +22643,7 @@ async function prepare(opts) {
22333
22643
  if (newFee <= splitterFee) break;
22334
22644
  splitterFee = newFee;
22335
22645
  }
22336
- const splitter = new chunkEJOFL5WH_cjs.Transaction({ version: 2 });
22646
+ const splitter = new chunk57636V35_cjs.Transaction({ version: 2 });
22337
22647
  for (const coin of selected.inputs) {
22338
22648
  splitter.addInput({
22339
22649
  txid: coin.txid,
@@ -22477,41 +22787,41 @@ var UnilateralExit = {
22477
22787
  // src/arkade/index.ts
22478
22788
  var arkade_exports = {};
22479
22789
  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,
22790
+ ARKADE_OP: () => chunk3OKEUDHU_cjs.ARKADE_OP,
22791
+ ARKADE_OPCODES: () => chunk3OKEUDHU_cjs.ARKADE_OPCODES,
22792
+ ARKADE_OPCODE_NAMES: () => chunk3OKEUDHU_cjs.ARKADE_OPCODE_NAMES,
22793
+ ARKADE_OPCODE_VALUES: () => chunk3OKEUDHU_cjs.ARKADE_OPCODE_VALUES,
22794
+ ARKADE_OPS: () => chunk3OKEUDHU_cjs.ARKADE_OPS,
22485
22795
  Arkade: () => Arkade,
22486
22796
  ArkadeContract: () => ArkadeContract,
22487
- ArkadeProgramScript: () => chunk6YUACVX4_cjs.ArkadeProgramScript,
22488
- ArkadeScript: () => chunk6YUACVX4_cjs.ArkadeScript,
22797
+ ArkadeProgramScript: () => chunk3OKEUDHU_cjs.ArkadeProgramScript,
22798
+ ArkadeScript: () => chunk3OKEUDHU_cjs.ArkadeScript,
22489
22799
  ArkadeTransactionBuilder: () => ArkadeTransactionBuilder,
22490
- BigNum: () => chunk6YUACVX4_cjs.bignum_exports,
22800
+ BigNum: () => chunk3OKEUDHU_cjs.bignum_exports,
22491
22801
  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,
22802
+ OPCODE_NAMES: () => chunk3OKEUDHU_cjs.OPCODE_NAMES,
22803
+ OPCODE_VALUES: () => chunk3OKEUDHU_cjs.OPCODE_VALUES,
22804
+ SUPPORTED_PROGRAM_VERSION: () => chunk3OKEUDHU_cjs.SUPPORTED_PROGRAM_VERSION,
22495
22805
  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,
22806
+ arkadeScriptHash: () => chunk3OKEUDHU_cjs.arkadeScriptHash,
22807
+ arkadeWitnessHash: () => chunk3OKEUDHU_cjs.arkadeWitnessHash,
22808
+ asmToBytes: () => chunk3OKEUDHU_cjs.asmToBytes,
22809
+ bytesToASM: () => chunk3OKEUDHU_cjs.bytesToASM,
22810
+ computeArkadeScriptPublicKey: () => chunk3OKEUDHU_cjs.computeArkadeScriptPublicKey,
22501
22811
  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
22812
+ deserializeArkadeContractParams: () => chunk3OKEUDHU_cjs.deserializeArkadeContractParams,
22813
+ fromASM: () => chunk3OKEUDHU_cjs.fromASM,
22814
+ getOpcodeName: () => chunk3OKEUDHU_cjs.getOpcodeName,
22815
+ getOpcodeValue: () => chunk3OKEUDHU_cjs.getOpcodeValue,
22816
+ parseArtifact: () => chunk3OKEUDHU_cjs.parseArtifact,
22817
+ resolveAsm: () => chunk3OKEUDHU_cjs.resolveAsm,
22818
+ serializeArkadeContractParams: () => chunk3OKEUDHU_cjs.serializeArkadeContractParams,
22819
+ stringifyArtifact: () => chunk3OKEUDHU_cjs.stringifyArtifact,
22820
+ toASM: () => chunk3OKEUDHU_cjs.toASM,
22821
+ validateProgram: () => chunk3OKEUDHU_cjs.validateProgram,
22822
+ witnessRefToBytes: () => chunk3OKEUDHU_cjs.witnessRefToBytes
22513
22823
  });
22514
- var isVtxoCoin = (input) => chunkEJOFL5WH_cjs.isVirtualCoin(input);
22824
+ var isVtxoCoin = (input) => chunk57636V35_cjs.isVirtualCoin(input);
22515
22825
  function createArkadeBatchHandler(intentId, inputs, signer, signedProof, message, session, arkProvider, emulator, network, recipients, batchExpiryPolicy) {
22516
22826
  let batchId;
22517
22827
  let sweepTapTreeRoot;
@@ -22532,23 +22842,23 @@ function createArkadeBatchHandler(intentId, inputs, signer, signedProof, message
22532
22842
  );
22533
22843
  await arkProvider.confirmRegistration(intentId);
22534
22844
  batchId = event.id;
22535
- const sweepTapscript = chunkEJOFL5WH_cjs.CSVMultisigTapscript.encode({
22845
+ const sweepTapscript = chunk57636V35_cjs.CSVMultisigTapscript.encode({
22536
22846
  timelock,
22537
- pubkeys: [chunk6YUACVX4_cjs.toXOnly(base.hex.decode(info.forfeitPubkey), "forfeit key")]
22847
+ pubkeys: [chunk3OKEUDHU_cjs.toXOnly(base.hex.decode(info.forfeitPubkey), "forfeit key")]
22538
22848
  }).script;
22539
22849
  sweepTapTreeRoot = payment_js.tapLeafHash(sweepTapscript);
22540
22850
  return { skip: false };
22541
22851
  },
22542
22852
  onTreeSigningStarted: async (event, vtxoTree) => {
22543
22853
  const signerPubKey = await session.getPublicKey();
22544
- const xonlySignerPubKey = chunk6YUACVX4_cjs.toXOnly(signerPubKey, "signer key");
22854
+ const xonlySignerPubKey = chunk3OKEUDHU_cjs.toXOnly(signerPubKey, "signer key");
22545
22855
  const xOnlyPubkeys = event.cosignersPublicKeys.map(
22546
- (k) => base.hex.encode(chunk6YUACVX4_cjs.toXOnly(base.hex.decode(k), "cosigner key"))
22856
+ (k) => base.hex.encode(chunk3OKEUDHU_cjs.toXOnly(base.hex.decode(k), "cosigner key"))
22547
22857
  );
22548
22858
  if (!xOnlyPubkeys.includes(base.hex.encode(xonlySignerPubKey))) {
22549
22859
  return { skip: true };
22550
22860
  }
22551
- const commitmentTx = chunkEJOFL5WH_cjs.Transaction.fromPSBT(base.base64.decode(event.unsignedCommitmentTx));
22861
+ const commitmentTx = chunk57636V35_cjs.Transaction.fromPSBT(base.base64.decode(event.unsignedCommitmentTx));
22552
22862
  validateVtxoTxGraph(vtxoTree, commitmentTx, sweepTapTreeRoot);
22553
22863
  if (recipients && recipients.length > 0) {
22554
22864
  validateBatchRecipients(commitmentTx, vtxoTree.leaves(), recipients, network);
@@ -22580,7 +22890,7 @@ function createArkadeBatchHandler(intentId, inputs, signer, signedProof, message
22580
22890
  if (connectorTree) {
22581
22891
  validateConnectorsTxGraph(event.commitmentTx, connectorTree);
22582
22892
  }
22583
- let commitmentPsbt = chunkEJOFL5WH_cjs.Transaction.fromPSBT(base.base64.decode(event.commitmentTx));
22893
+ let commitmentPsbt = chunk57636V35_cjs.Transaction.fromPSBT(base.base64.decode(event.commitmentTx));
22584
22894
  assertFinalCommitmentMatchesValidated(
22585
22895
  commitmentPsbt,
22586
22896
  validatedCommitmentTxid,
@@ -22615,7 +22925,7 @@ function createArkadeBatchHandler(intentId, inputs, signer, signedProof, message
22615
22925
  boardingIndices.push(boardingIdx);
22616
22926
  continue;
22617
22927
  }
22618
- if (chunkEJOFL5WH_cjs.isRecoverable(input) || isSubdust(input, info.dust)) {
22928
+ if (chunk57636V35_cjs.isRecoverable(input) || isSubdust(input, info.dust)) {
22619
22929
  continue;
22620
22930
  }
22621
22931
  if (connectorIndex >= connectorLeaves.length) {
@@ -22636,7 +22946,7 @@ function createArkadeBatchHandler(intentId, inputs, signer, signedProof, message
22636
22946
  index: input.vout,
22637
22947
  witnessUtxo: {
22638
22948
  amount: BigInt(input.value),
22639
- script: chunkEJOFL5WH_cjs.VtxoScript.decode(input.tapTree).pkScript
22949
+ script: chunk57636V35_cjs.VtxoScript.decode(input.tapTree).pkScript
22640
22950
  },
22641
22951
  sighashType: btcSigner.SigHash.DEFAULT,
22642
22952
  tapLeafScript: [input.forfeitTapLeafScript]
@@ -22727,16 +23037,16 @@ var Arkade = class _Arkade {
22727
23037
  /** Connect and resolve the server key, checkpoint closure and (if present) the co-signer key. */
22728
23038
  static async connect(opts) {
22729
23039
  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;
23040
+ const serverKey = chunk3OKEUDHU_cjs.toXOnly(base.hex.decode(info.signerPubkey), "ark signer key");
23041
+ const checkpoint = chunk57636V35_cjs.CSVMultisigTapscript.decode(base.hex.decode(info.checkpointTapscript));
23042
+ const network = opts.network ?? chunk57636V35_cjs.DEFAULT_NETWORK;
22733
23043
  let emulatorKey;
22734
23044
  if (opts.emulator) {
22735
- emulatorKey = base.hex.decode(chunkEJOFL5WH_cjs.resolveEmulatorPubkey(network, opts.emulatorPubkey));
23045
+ emulatorKey = base.hex.decode(chunk57636V35_cjs.resolveEmulatorPubkey(network, opts.emulatorPubkey));
22736
23046
  }
22737
23047
  let userKey;
22738
23048
  if (opts.identity) {
22739
- userKey = chunk6YUACVX4_cjs.toXOnly(await opts.identity.xOnlyPublicKey(), "identity key");
23049
+ userKey = chunk3OKEUDHU_cjs.toXOnly(await opts.identity.xOnlyPublicKey(), "identity key");
22740
23050
  }
22741
23051
  return new _Arkade({
22742
23052
  arkProvider: opts.arkade,
@@ -22762,7 +23072,7 @@ var Arkade = class _Arkade {
22762
23072
  * key respectively; explicit args always win.
22763
23073
  */
22764
23074
  contract(program, args = {}) {
22765
- const declared = (program.params ?? []).map(chunk6YUACVX4_cjs.inputName);
23075
+ const declared = (program.params ?? []).map(chunk3OKEUDHU_cjs.inputName);
22766
23076
  if (declared.includes("server") && args.server === void 0) {
22767
23077
  args = { ...args, server: this.serverKey };
22768
23078
  }
@@ -22782,7 +23092,7 @@ var ArkadeContract = class _ArkadeContract {
22782
23092
  userKey: client.userKey,
22783
23093
  emulatorKey: client.emulatorKey
22784
23094
  };
22785
- this.vtxoScript = new chunk6YUACVX4_cjs.ArkadeProgramScript(program, args, this.keys);
23095
+ this.vtxoScript = new chunk3OKEUDHU_cjs.ArkadeProgramScript(program, args, this.keys);
22786
23096
  this.tapTree = this.vtxoScript.encode();
22787
23097
  this.compiled = this.vtxoScript.compiled;
22788
23098
  }
@@ -22810,7 +23120,7 @@ var ArkadeContract = class _ArkadeContract {
22810
23120
  `ArkadeContract.fromContract: expected contract type 'arkade', got '${contract.type}'`
22811
23121
  );
22812
23122
  }
22813
- const typed = chunk6YUACVX4_cjs.deserializeArkadeContractParams(contract.params);
23123
+ const typed = chunk3OKEUDHU_cjs.deserializeArkadeContractParams(contract.params);
22814
23124
  return new _ArkadeContract(client, typed.program, typed.args, {
22815
23125
  serverKey: typed.serverKey,
22816
23126
  userKey: typed.userKey,
@@ -22851,7 +23161,7 @@ var ArkadeContract = class _ArkadeContract {
22851
23161
  toContractParams() {
22852
23162
  return {
22853
23163
  type: "arkade",
22854
- params: chunk6YUACVX4_cjs.serializeArkadeContractParams({
23164
+ params: chunk3OKEUDHU_cjs.serializeArkadeContractParams({
22855
23165
  program: this.program,
22856
23166
  args: this.args,
22857
23167
  serverKey: this.keys.serverKey,
@@ -22901,18 +23211,18 @@ var ArkadeContract = class _ArkadeContract {
22901
23211
  if (registered) {
22902
23212
  const [withVtxos] = await manager.getContractsWithVtxos({ script: scriptHex });
22903
23213
  return (withVtxos?.vtxos ?? []).filter(
22904
- (v) => !chunkEJOFL5WH_cjs.hasTerminalSpend(v) && !v.isUnrolled
23214
+ (v) => !chunk57636V35_cjs.hasTerminalSpend(v) && !v.isUnrolled
22905
23215
  );
22906
23216
  }
22907
23217
  }
22908
23218
  if (!this.client.indexer) {
22909
23219
  throw new Error("ArkadeContract.getUtxos: an indexer is required");
22910
23220
  }
22911
- const { vtxos } = await chunkEJOFL5WH_cjs.getNormalizedVtxos(this.client.indexer, {
23221
+ const { vtxos } = await chunk57636V35_cjs.getNormalizedVtxos(this.client.indexer, {
22912
23222
  scripts: [scriptHex],
22913
23223
  spendableOnly: true
22914
23224
  });
22915
- return vtxos.filter((v) => !chunkEJOFL5WH_cjs.hasTerminalSpend(v) && !v.isUnrolled);
23225
+ return vtxos.filter((v) => !chunk57636V35_cjs.hasTerminalSpend(v) && !v.isUnrolled);
22916
23226
  }
22917
23227
  /** Total spendable balance (requires an indexer). */
22918
23228
  async getBalance() {
@@ -23010,7 +23320,7 @@ var ArkadeTransactionBuilder = class {
23010
23320
  this.contract.client.checkpoint
23011
23321
  );
23012
23322
  if (coin.sourceTx) {
23013
- chunkEJOFL5WH_cjs.setArkPsbtField(arkTx, 0, chunkEJOFL5WH_cjs.PrevArkTxField, coin.sourceTx);
23323
+ chunk57636V35_cjs.setArkPsbtField(arkTx, 0, chunk57636V35_cjs.PrevArkTxField, coin.sourceTx);
23014
23324
  }
23015
23325
  if (this.fn.arkadeScript) {
23016
23326
  const indexer = this.contract.client.indexer;
@@ -23027,8 +23337,8 @@ var ArkadeTransactionBuilder = class {
23027
23337
  }
23028
23338
  const condition = (def.tapscript.witness ?? []).map((w) => this.witnessBytes(w));
23029
23339
  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);
23340
+ chunk57636V35_cjs.setArkPsbtField(arkTx, 0, chunk57636V35_cjs.ConditionWitness, condition);
23341
+ chunk57636V35_cjs.setArkPsbtField(checkpoints[0], 0, chunk57636V35_cjs.ConditionWitness, condition);
23032
23342
  }
23033
23343
  const packets = [];
23034
23344
  if (this.assetSpecs.length > 0) {
@@ -23067,7 +23377,7 @@ var ArkadeTransactionBuilder = class {
23067
23377
  base.base64.encode(signedArk2.toPSBT()),
23068
23378
  signedCps.map((c) => base.base64.encode(c.toPSBT()))
23069
23379
  );
23070
- const txid = chunkEJOFL5WH_cjs.Transaction.fromPSBT(base.base64.decode(res2.signedArkTx)).id;
23380
+ const txid = chunk57636V35_cjs.Transaction.fromPSBT(base.base64.decode(res2.signedArkTx)).id;
23071
23381
  return {
23072
23382
  txid,
23073
23383
  signedArkTx: res2.signedArkTx,
@@ -23126,23 +23436,23 @@ var ArkadeTransactionBuilder = class {
23126
23436
  }
23127
23437
  buildAssetPacket() {
23128
23438
  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(
23439
+ const id = typeof s.assetId === "string" ? chunk3KW4TWP2_cjs.AssetId.fromString(s.assetId) : chunk3KW4TWP2_cjs.AssetId.fromBytes(s.assetId);
23440
+ return chunk3KW4TWP2_cjs.AssetGroup.create(
23131
23441
  id,
23132
23442
  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))
23443
+ s.inputs.map((i) => chunk3KW4TWP2_cjs.AssetInput.create(i.vin, i.amount)),
23444
+ s.outputs.map((o) => chunk3KW4TWP2_cjs.AssetOutput.create(o.vout, o.amount)),
23445
+ (s.metadata ?? []).map((m) => chunk3KW4TWP2_cjs.Metadata.create(m.key, m.value))
23136
23446
  );
23137
23447
  });
23138
- return chunkPJR63FTK_cjs.Packet.create(groups);
23448
+ return chunk3KW4TWP2_cjs.Packet.create(groups);
23139
23449
  }
23140
23450
  witnessBytes(ref) {
23141
- return chunk6YUACVX4_cjs.witnessRefToBytes(ref, this.args, this.contract.args);
23451
+ return chunk3OKEUDHU_cjs.witnessRefToBytes(ref, this.args, this.contract.args);
23142
23452
  }
23143
23453
  };
23144
23454
  function bindInputs(fn, callArgs) {
23145
- const names = (fn.def.inputs ?? []).map(chunk6YUACVX4_cjs.inputName);
23455
+ const names = (fn.def.inputs ?? []).map(chunk3OKEUDHU_cjs.inputName);
23146
23456
  if (callArgs.length !== names.length) {
23147
23457
  throw new Error(`${fn.name}: expected ${names.length} argument(s), got ${callArgs.length}`);
23148
23458
  }
@@ -23335,6 +23645,33 @@ function tryResolveSendAmount(raw, amount) {
23335
23645
  const amt = amount ?? BIP21.amountSats(raw);
23336
23646
  return amt !== void 0 && Number.isInteger(amt) && amt > 0 ? amt : void 0;
23337
23647
  }
23648
+ function assetsOf(req) {
23649
+ return req.assets ?? [];
23650
+ }
23651
+ function assertNoAssets(railId, req) {
23652
+ const assets = assetsOf(req);
23653
+ if (assets.length > 0) {
23654
+ throw new Error(
23655
+ `${railId}: cannot deliver ${assets.map((a) => a.assetId).join(", ")} \u2014 this rail moves BTC only`
23656
+ );
23657
+ }
23658
+ }
23659
+ function resolveAssetAmount(railId, req) {
23660
+ const assets = assetsOf(req);
23661
+ if (assets.length !== 1) {
23662
+ throw new Error(`${railId}: expected exactly one asset to pay, got ${assets.length}`);
23663
+ }
23664
+ const [asset] = assets;
23665
+ if (typeof asset.amount !== "bigint" || asset.amount <= 0n) {
23666
+ throw new Error(
23667
+ `${railId}: invalid amount ${String(asset.amount)} of ${asset.assetId} (expected a positive bigint of atomic units)`
23668
+ );
23669
+ }
23670
+ if (typeof asset.assetId !== "string" || asset.assetId.length === 0) {
23671
+ throw new Error(`${railId}: an asset amount must name an asset`);
23672
+ }
23673
+ return asset;
23674
+ }
23338
23675
 
23339
23676
  // src/payment/handle.ts
23340
23677
  function makeHandle(id, run) {
@@ -23457,8 +23794,10 @@ function arkRail() {
23457
23794
  return {
23458
23795
  id: "ark",
23459
23796
  match: (req) => arkTarget(req.raw) !== void 0,
23797
+ available: (req) => assetsOf(req).length === 0,
23460
23798
  quote: async (req, ctx) => {
23461
23799
  const address = arkTarget(req.raw);
23800
+ assertNoAssets("ark", req);
23462
23801
  const amt = resolveSendAmount("ark", req.raw, req.amount);
23463
23802
  return {
23464
23803
  railId: "ark",
@@ -23475,6 +23814,41 @@ function arkRail() {
23475
23814
  }
23476
23815
  };
23477
23816
  }
23817
+
23818
+ // src/payment/rails/arkAsset.ts
23819
+ var ASSET_CARRIER_SATS = 330;
23820
+ function arkAssetRail() {
23821
+ return {
23822
+ id: "ark-asset",
23823
+ match: (req) => arkTarget(req.raw) !== void 0,
23824
+ // A malformed asset is `quote()`'s to name, not this rail's to drop.
23825
+ available: (req) => assetsOf(req).length > 0,
23826
+ quote: async (req, ctx) => {
23827
+ const address = arkTarget(req.raw);
23828
+ const asset = resolveAssetAmount("ark-asset", req);
23829
+ if (req.amount !== void 0) assertSendableAmount("ark-asset", req.amount);
23830
+ const carrier = tryResolveSendAmount(req.raw, req.amount) ?? ASSET_CARRIER_SATS;
23831
+ return {
23832
+ railId: "ark-asset",
23833
+ amount: carrier,
23834
+ fee: 0,
23835
+ total: carrier,
23836
+ assets: { delivered: asset, spent: asset },
23837
+ send: async () => makeHandle("ark-asset", async (emit) => {
23838
+ const txid = await ctx.wallet.send({
23839
+ address,
23840
+ amount: carrier,
23841
+ assets: [asset]
23842
+ });
23843
+ const result = { railId: "ark-asset", txid };
23844
+ emit({ status: "settled", result });
23845
+ return result;
23846
+ })
23847
+ };
23848
+ }
23849
+ };
23850
+ }
23851
+ var walletFeeSource = (wallet) => async () => (await wallet.arkProvider.getInfo()).fees;
23478
23852
  var GROSS_UP_MAX_ROUNDS = 8;
23479
23853
  function grossUpOffboard(net, feeInfo, script) {
23480
23854
  const estimator = new Estimator(feeInfo?.intentFee ?? {});
@@ -23487,14 +23861,20 @@ function grossUpOffboard(net, feeInfo, script) {
23487
23861
  }
23488
23862
  return { gross, fee: gross - net };
23489
23863
  }
23490
- function onchainRail() {
23864
+ function onchainRail(deps) {
23865
+ if (typeof deps?.feeInfo !== "function") {
23866
+ throw new Error("onchain rail: a feeInfo source is required");
23867
+ }
23491
23868
  return {
23492
23869
  id: "onchain",
23493
23870
  match: (req) => btcTarget(req.raw) !== void 0,
23871
+ // BTC only: an Arkade asset has no L1 representation to offboard to.
23872
+ available: (req) => assetsOf(req).length === 0,
23494
23873
  quote: async (req, ctx) => {
23874
+ assertNoAssets("onchain", req);
23495
23875
  const address = btcTarget(req.raw);
23496
23876
  const amt = resolveSendAmount("onchain", req.raw, req.amount);
23497
- const { fees } = await ctx.wallet.arkProvider.getInfo();
23877
+ const fees = await deps.feeInfo();
23498
23878
  const script = base.hex.encode(offboardDestinationScript(address));
23499
23879
  const { gross, fee } = grossUpOffboard(amt, fees, script);
23500
23880
  return {
@@ -23521,8 +23901,8 @@ function onchainRail() {
23521
23901
  function createDefaultPaymentRouter(wallet) {
23522
23902
  return new PaymentRouter({
23523
23903
  wallet,
23524
- prefs: { priority: ["ark", "lightning", "onchain"] }
23525
- }).use(arkRail()).use(onchainRail());
23904
+ prefs: { priority: ["ark", "ark-asset", "lightning", "onchain"] }
23905
+ }).use(arkRail()).use(arkAssetRail()).use(onchainRail({ feeInfo: walletFeeSource(wallet) }));
23526
23906
  }
23527
23907
  /*! Bundled license information:
23528
23908
 
@@ -23533,6 +23913,8 @@ function createDefaultPaymentRouter(wallet) {
23533
23913
  exports.ARKADE_MAGIC = ARKADE_MAGIC;
23534
23914
  exports.ARKADE_SALTED_PREIMAGE_TAG = ARKADE_SALTED_PREIMAGE_TAG;
23535
23915
  exports.ARKADE_SWAP_PREIMAGE_TAG = ARKADE_SWAP_PREIMAGE_TAG;
23916
+ exports.ASSET_CARRIER_SATS = ASSET_CARRIER_SATS;
23917
+ exports.AbortError = AbortError;
23536
23918
  exports.ActivityRegistry = ActivityRegistry;
23537
23919
  exports.AmbiguousRouteError = AmbiguousRouteError;
23538
23920
  exports.ArkNote = ArkNote;
@@ -23626,16 +24008,19 @@ exports.WalletNotInitializedError = WalletNotInitializedError;
23626
24008
  exports.WalletRepositoryImpl = WalletRepositoryImpl;
23627
24009
  exports.WsElectrumChainSource = WsElectrumChainSource;
23628
24010
  exports.adoptContractDescriptor = adoptContractDescriptor;
24011
+ exports.arkAssetRail = arkAssetRail;
23629
24012
  exports.arkRail = arkRail;
23630
24013
  exports.arkTarget = arkTarget;
23631
24014
  exports.arkade_exports = arkade_exports;
23632
24015
  exports.assertFinalCommitmentMatchesValidated = assertFinalCommitmentMatchesValidated;
23633
24016
  exports.assertIntentIdUnique = assertIntentIdUnique;
24017
+ exports.assertNoAssets = assertNoAssets;
23634
24018
  exports.assertSendableAmount = assertSendableAmount;
23635
24019
  exports.assertSubmittedArkTxid = assertSubmittedArkTxid;
23636
24020
  exports.assertValidBatchExpiry = assertValidBatchExpiry;
23637
24021
  exports.assertValidServerUnrollScript = assertValidServerUnrollScript;
23638
24022
  exports.assetMintResolver = assetMintResolver;
24023
+ exports.assetsOf = assetsOf;
23639
24024
  exports.attachPrevArkTxs = attachPrevArkTxs;
23640
24025
  exports.attachPrevoutTxs = attachPrevoutTxs;
23641
24026
  exports.awaitTransaction = awaitTransaction;
@@ -23719,6 +24104,7 @@ exports.promisifyRequest = promisifyRequest;
23719
24104
  exports.provisionClaimSecret = provisionClaimSecret;
23720
24105
  exports.provisionRefundKey = provisionRefundKey;
23721
24106
  exports.requiresMigration = requiresMigration;
24107
+ exports.resolveAssetAmount = resolveAssetAmount;
23722
24108
  exports.resolveBatchExpiryPolicy = resolveBatchExpiryPolicy;
23723
24109
  exports.resolveCheckpointExitDelayPolicy = resolveCheckpointExitDelayPolicy;
23724
24110
  exports.resolveDescriptorSigner = resolveDescriptorSigner;
@@ -23745,7 +24131,8 @@ exports.validateConnectorsTxGraph = validateConnectorsTxGraph;
23745
24131
  exports.validateVtxoTxGraph = validateVtxoTxGraph;
23746
24132
  exports.verifyTapscriptSignatures = verifyTapscriptSignatures;
23747
24133
  exports.waitForIncomingFunds = waitForIncomingFunds;
24134
+ exports.walletFeeSource = walletFeeSource;
23748
24135
  exports.warnAndFilterVtxosForScript = warnAndFilterVtxosForScript;
23749
24136
  exports.withPrevTxs = withPrevTxs;
23750
- //# sourceMappingURL=chunk-WCJVKFAP.cjs.map
23751
- //# sourceMappingURL=chunk-WCJVKFAP.cjs.map
24137
+ //# sourceMappingURL=chunk-XTCOSZ34.cjs.map
24138
+ //# sourceMappingURL=chunk-XTCOSZ34.cjs.map