@arkade-os/sdk 0.5.0-rc.0 → 0.5.0-rc.2

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 +34 -1
  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-CdF_ELX8.d.cts → asyncStorageTaskQueue-BuDvgWh6.d.cts} +1 -1
  9. package/dist/{asyncStorageTaskQueue-BCzN3Y45.d.ts → asyncStorageTaskQueue-C5rBYlru.d.ts} +1 -1
  10. package/dist/{chunk-KTU44AEH.js → chunk-3R476TDV.js} +4 -4
  11. package/dist/{chunk-KTU44AEH.js.map → chunk-3R476TDV.js.map} +1 -1
  12. package/dist/{chunk-HL7EC2Z5.cjs → chunk-43FKNLX4.cjs} +50 -50
  13. package/dist/{chunk-HL7EC2Z5.cjs.map → chunk-43FKNLX4.cjs.map} +1 -1
  14. package/dist/{chunk-FVTJJQNM.js → chunk-4PKLULWT.js} +3 -3
  15. package/dist/{chunk-FVTJJQNM.js.map → chunk-4PKLULWT.js.map} +1 -1
  16. package/dist/{chunk-ABJPM4JF.js → chunk-6DNR46C7.js} +4 -4
  17. package/dist/{chunk-ABJPM4JF.js.map → chunk-6DNR46C7.js.map} +1 -1
  18. package/dist/{chunk-PB5KJI4U.cjs → chunk-D25O4EGY.cjs} +10 -10
  19. package/dist/{chunk-PB5KJI4U.cjs.map → chunk-D25O4EGY.cjs.map} +1 -1
  20. package/dist/{chunk-5MJHZHG7.cjs → chunk-GMZZQXV5.cjs} +863 -484
  21. package/dist/chunk-GMZZQXV5.cjs.map +1 -0
  22. package/dist/{chunk-RXWKCEZP.cjs → chunk-HLCGYOIH.cjs} +17 -17
  23. package/dist/{chunk-RXWKCEZP.cjs.map → chunk-HLCGYOIH.cjs.map} +1 -1
  24. package/dist/{chunk-PPG6W34P.js → chunk-ISO4TI5J.js} +3 -3
  25. package/dist/{chunk-PPG6W34P.js.map → chunk-ISO4TI5J.js.map} +1 -1
  26. package/dist/{chunk-6AFUNKK7.cjs → chunk-JZWLXNHV.cjs} +3 -3
  27. package/dist/{chunk-6AFUNKK7.cjs.map → chunk-JZWLXNHV.cjs.map} +1 -1
  28. package/dist/{chunk-CZ32XADN.cjs → chunk-NVZJSKZS.cjs} +17 -17
  29. package/dist/{chunk-CZ32XADN.cjs.map → chunk-NVZJSKZS.cjs.map} +1 -1
  30. package/dist/{chunk-JYP7YXT2.js → chunk-ZOTXDOS5.js} +4 -4
  31. package/dist/{chunk-JYP7YXT2.js.map → chunk-ZOTXDOS5.js.map} +1 -1
  32. package/dist/{chunk-6F2Q32KA.js → chunk-ZRNQV6HV.js} +425 -52
  33. package/dist/chunk-ZRNQV6HV.js.map +1 -0
  34. package/dist/contracts/handlers/index.cjs +9 -9
  35. package/dist/contracts/handlers/index.d.cts +3 -3
  36. package/dist/contracts/handlers/index.d.ts +3 -3
  37. package/dist/contracts/handlers/index.js +2 -2
  38. package/dist/{delegate-DLIOBQ5x.d.cts → delegate-1yp1HyP7.d.cts} +1 -1
  39. package/dist/{delegate-Dyn5L80J.d.ts → delegate-BAX5QftB.d.ts} +1 -1
  40. package/dist/{hdWalletCapable-Dt3MUiGE.d.cts → hdWalletCapable-CmEU0NP1.d.ts} +49 -5
  41. package/dist/{hdWalletCapable-D9tooZ6F.d.ts → hdWalletCapable-eJgaT-ec.d.cts} +49 -5
  42. package/dist/{index-D9tXd-tN.d.ts → index-Bem5vKzX.d.ts} +2 -2
  43. package/dist/{index-Udm5V2xW.d.cts → index-DUxufw76.d.cts} +53 -1
  44. package/dist/{index-Udm5V2xW.d.ts → index-DUxufw76.d.ts} +53 -1
  45. package/dist/{index-D3hmsuKs.d.cts → index-W_oMcOmG.d.cts} +2 -2
  46. package/dist/index.cjs +318 -294
  47. package/dist/index.d.cts +81 -14
  48. package/dist/index.d.ts +81 -14
  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-ZdS16Ypm.d.ts → taskRunner-D_iPiZIi.d.ts} +1 -1
  59. package/dist/{taskRunner-DxZciNaa.d.cts → taskRunner-Dr3NStc0.d.cts} +1 -1
  60. package/dist/wallet/expo/background.cjs +14 -14
  61. package/dist/wallet/expo/background.d.cts +3 -3
  62. package/dist/wallet/expo/background.d.ts +3 -3
  63. package/dist/wallet/expo/background.js +6 -6
  64. package/dist/wallet/expo/index.cjs +14 -14
  65. package/dist/wallet/expo/index.d.cts +4 -4
  66. package/dist/wallet/expo/index.d.ts +4 -4
  67. package/dist/wallet/expo/index.js +5 -5
  68. package/dist/worker/expo/index.cjs +9 -9
  69. package/dist/worker/expo/index.d.cts +4 -4
  70. package/dist/worker/expo/index.d.ts +4 -4
  71. package/dist/worker/expo/index.js +5 -5
  72. package/package.json +1 -1
  73. package/dist/chunk-5MJHZHG7.cjs.map +0 -1
  74. package/dist/chunk-6F2Q32KA.js.map +0 -1
@@ -1,8 +1,8 @@
1
1
  'use strict';
2
2
 
3
- var chunkCZ32XADN_cjs = require('./chunk-CZ32XADN.cjs');
4
- var chunkHL7EC2Z5_cjs = require('./chunk-HL7EC2Z5.cjs');
5
- var chunk6AFUNKK7_cjs = require('./chunk-6AFUNKK7.cjs');
3
+ var chunkNVZJSKZS_cjs = require('./chunk-NVZJSKZS.cjs');
4
+ var chunk43FKNLX4_cjs = require('./chunk-43FKNLX4.cjs');
5
+ var chunkJZWLXNHV_cjs = require('./chunk-JZWLXNHV.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 = chunk6AFUNKK7_cjs.getArkPsbtFields(tx.root, 0, chunk6AFUNKK7_cjs.CosignerPublicKey).map(
191
+ const cosigners = chunkJZWLXNHV_cjs.getArkPsbtFields(tx.root, 0, chunkJZWLXNHV_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 = chunk6AFUNKK7_cjs.getArkPsbtFields(g.root, 0, chunk6AFUNKK7_cjs.CosignerPublicKey).map((c) => c.key);
243
+ const cosigners = chunkJZWLXNHV_cjs.getArkPsbtFields(g.root, 0, chunkJZWLXNHV_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
- chunk6AFUNKK7_cjs.assertAllowedSighashTypes(txCpy, ALLOWED_SIGHASH);
326
+ chunkJZWLXNHV_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 = chunkHL7EC2Z5_cjs.isMainnetDescriptor(descriptor) ? descriptorsScure.networks.bitcoin : descriptorsScure.networks.testnet;
435
+ network = chunk43FKNLX4_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 chunkHL7EC2Z5_cjs.descriptorIsOurs(descriptor, this.descriptor, utils_js.pubSchnorr(this.derivedKey));
533
+ return chunk43FKNLX4_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 = chunkHL7EC2Z5_cjs.isMainnetDescriptor(descriptor) ? descriptorsScure.networks.bitcoin : descriptorsScure.networks.testnet;
582
+ const network = chunk43FKNLX4_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
- chunk6AFUNKK7_cjs.assertAllowedSighashTypes(txCpy, ALLOWED_SIGHASH2);
607
+ chunkJZWLXNHV_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 = chunkHL7EC2Z5_cjs.isMainnetDescriptor(descriptor) ? descriptorsScure.networks.bitcoin : descriptorsScure.networks.testnet;
669
+ const network = chunk43FKNLX4_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 chunkHL7EC2Z5_cjs.descriptorIsOurs(descriptor, this.descriptor, this.indexZero.pubkey);
719
+ return chunk43FKNLX4_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 chunkHL7EC2Z5_cjs.deriveDescriptorLeafPubKey(this.descriptor);
881
+ return chunk43FKNLX4_cjs.deriveDescriptorLeafPubKey(this.descriptor);
882
882
  }
883
883
  async compressedPublicKey() {
884
- return chunkHL7EC2Z5_cjs.deriveDescriptorLeafCompressedPubKey(this.descriptor);
884
+ return chunk43FKNLX4_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 && chunkHL7EC2Z5_cjs.parseHDDescriptor(descriptor)) {
952
+ if (owner && chunk43FKNLX4_cjs.parseHDDescriptor(descriptor)) {
953
953
  return new DescriptorIdentity({ descriptor, signer: owner, base: identity });
954
954
  }
955
955
  let key;
956
956
  try {
957
- key = chunkHL7EC2Z5_cjs.deriveDescriptorLeafPubKey(descriptor);
957
+ key = chunk43FKNLX4_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 chunkHL7EC2Z5_cjs.parseHDDescriptor(descriptor) !== null;
1332
+ return chunk43FKNLX4_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 chunkHL7EC2Z5_cjs.identityDescriptor(wallet.identity);
1336
+ return allocated ?? await chunk43FKNLX4_cjs.identityDescriptor(wallet.identity);
1337
1337
  }
1338
1338
  async function provisionRefundKey(wallet) {
1339
- const descriptor = await chunkHL7EC2Z5_cjs.identityDescriptor(wallet.identity);
1339
+ const descriptor = await chunk43FKNLX4_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 } = chunk6AFUNKK7_cjs.ArkAddress.decode(address);
1349
+ const { pkScript } = chunkJZWLXNHV_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 = chunkHL7EC2Z5_cjs.deriveDescriptorLeafPubKey(descriptor);
1395
+ expected = chunk43FKNLX4_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 chunk6AFUNKK7_cjs.baseFetch(url, {
1614
+ const response = await chunkJZWLXNHV_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: chunk6AFUNKK7_cjs.Intent.encodeMessage(intent.message),
1621
+ message: chunkJZWLXNHV_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 chunk6AFUNKK7_cjs.rateGate.runHttp(url, () => chunk6AFUNKK7_cjs.baseFetch(url));
1641
+ const response = await chunkJZWLXNHV_cjs.rateGate.runHttp(url, () => chunkJZWLXNHV_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[chunk6AFUNKK7_cjs.DEFAULT_NETWORK_NAME], opts) {
1666
+ constructor(baseUrl = ESPLORA_URL[chunkJZWLXNHV_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 chunk6AFUNKK7_cjs.baseFetch(`${this.baseUrl}/address/${address}/utxo`);
1685
+ const response = await chunkJZWLXNHV_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 chunk6AFUNKK7_cjs.baseFetch(`${this.baseUrl}/fee-estimates`);
1692
+ const response = await chunkJZWLXNHV_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 chunk6AFUNKK7_cjs.baseFetch(`${this.baseUrl}/tx/${txid}/outspends`);
1713
+ const response = await chunkJZWLXNHV_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 chunk6AFUNKK7_cjs.baseFetch(`${this.baseUrl}/address/${address}/txs`);
1721
+ const response = await chunkJZWLXNHV_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 chunkJZWLXNHV_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 chunk6AFUNKK7_cjs.baseFetch(`${this.baseUrl}/tx/${txid}/hex`);
1741
+ const response = await chunkJZWLXNHV_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 chunk6AFUNKK7_cjs.baseFetch(`${this.baseUrl}/tx/${txid}`);
1749
+ const txresponse = await chunkJZWLXNHV_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 chunk6AFUNKK7_cjs.baseFetch(`${this.baseUrl}/tx/${txid}/status`);
1757
+ const response = await chunkJZWLXNHV_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
+ }
1758
1894
  };
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 () => {
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);
1901
+ };
1902
+ const tick = async () => {
1763
1903
  try {
1904
+ const fingerprint = await activityFingerprint();
1905
+ if (!isCurrentLoop()) return;
1906
+ if (fingerprint !== void 0 && fingerprint === lastFingerprint) {
1907
+ failures = 0;
1908
+ schedule();
1909
+ return;
1910
+ }
1764
1911
  const currentTxs = await getAllTxs();
1765
- const newTxs = currentTxs.filter((tx) => !existingTxs.has(txKey2(tx)));
1766
- if (newTxs.length > 0) {
1767
- newTxs.forEach((tx) => existingTxs.add(txKey2(tx)));
1768
- callback(newTxs);
1912
+ if (!isCurrentLoop()) return;
1913
+ lastFingerprint = fingerprint;
1914
+ if (baselined) {
1915
+ report(currentTxs);
1916
+ } else if (anchorHeight !== void 0) {
1917
+ const arrivedAfterStart = (tx) => !tx.status.confirmed || tx.status.block_height === void 0 || tx.status.block_height > anchorHeight;
1918
+ for (const tx of currentTxs) {
1919
+ if (!arrivedAfterStart(tx)) seen.add(txKey2(tx));
1920
+ }
1921
+ baselined = true;
1922
+ report(currentTxs);
1923
+ } else {
1924
+ console.warn(
1925
+ `Esplora address watch established its baseline late for ${addresses.length} address(es); deposits arriving before now may not have been reported`
1926
+ );
1927
+ for (const tx of currentTxs) seen.add(txKey2(tx));
1928
+ baselined = true;
1769
1929
  }
1930
+ failures = 0;
1770
1931
  } catch (error) {
1771
- console.error("Error in polling mechanism:", error);
1932
+ failures = Math.min(failures + 1, MAX_POLL_BACKOFF_EXPONENT);
1933
+ console.error("Error polling watched addresses:", error);
1772
1934
  }
1773
- }, this.pollingInterval);
1935
+ schedule();
1936
+ };
1937
+ await baseline;
1938
+ if (!isCurrentLoop()) return;
1939
+ await tick();
1774
1940
  };
1775
- let ws = null;
1776
- const stopFunc = () => {
1777
- if (ws) ws.close();
1778
- if (intervalId) clearInterval(intervalId);
1941
+ const stopPolling = () => {
1942
+ pollSession++;
1943
+ if (timer) {
1944
+ clearTimeout(timer);
1945
+ timer = null;
1946
+ }
1947
+ pollStarted = false;
1779
1948
  };
1780
- if (this.forcePolling) {
1781
- await poll();
1782
- return stopFunc;
1783
- }
1784
- try {
1785
- ws = new WebSocket(wsUrl);
1786
- ws.addEventListener("open", () => {
1949
+ const handleSocketFailure = () => {
1950
+ if (stopped) return Promise.resolve();
1951
+ scheduleReconnect();
1952
+ return startPolling();
1953
+ };
1954
+ const scheduleReconnect = () => {
1955
+ if (stopped || reconnectTimer !== null) return;
1956
+ const delay = RECONNECT_BASE_DELAY_MS * 2 ** Math.min(reconnectFailures, MAX_RECONNECT_BACKOFF_EXPONENT);
1957
+ reconnectFailures++;
1958
+ reconnectTimer = setTimeout(() => {
1959
+ reconnectTimer = null;
1960
+ connect();
1961
+ }, delay);
1962
+ };
1963
+ const connect = () => {
1964
+ if (stopped) return Promise.resolve();
1965
+ const previous = ws;
1966
+ ws = null;
1967
+ if (previous) {
1968
+ try {
1969
+ previous.close();
1970
+ } catch {
1971
+ }
1972
+ }
1973
+ let socket;
1974
+ try {
1975
+ socket = new WebSocket(wsUrl);
1976
+ } catch {
1977
+ return handleSocketFailure();
1978
+ }
1979
+ ws = socket;
1980
+ const isCurrent = () => !stopped && ws === socket;
1981
+ socket.addEventListener("open", () => {
1982
+ if (!isCurrent()) return;
1983
+ reconnectFailures = 0;
1787
1984
  const subscribeMsg = {
1788
1985
  "track-addresses": addresses
1789
1986
  };
1790
- ws.send(JSON.stringify(subscribeMsg));
1987
+ socket.send(JSON.stringify(subscribeMsg));
1988
+ stopPolling();
1791
1989
  });
1792
- ws.addEventListener("message", (event) => {
1990
+ socket.addEventListener("message", (event) => {
1991
+ if (!isCurrent()) return;
1793
1992
  try {
1794
1993
  const newTxs = [];
1795
1994
  const message = JSON.parse(event.data.toString());
@@ -1801,22 +2000,45 @@ var EsploraProvider = class {
1801
2000
  newTxs.push(...aux[address][type].filter(isExplorerTransaction));
1802
2001
  }
1803
2002
  }
1804
- if (newTxs.length > 0) callback(newTxs);
2003
+ report(newTxs);
1805
2004
  } catch (error) {
1806
2005
  console.error("Failed to process WebSocket message:", error);
1807
2006
  }
1808
2007
  });
1809
- ws.addEventListener("error", async () => {
1810
- await poll();
2008
+ socket.addEventListener("error", () => {
2009
+ if (isCurrent()) void handleSocketFailure();
1811
2010
  });
1812
- } catch {
1813
- if (intervalId) clearInterval(intervalId);
1814
- await poll();
1815
- }
1816
- return stopFunc;
2011
+ socket.addEventListener("close", () => {
2012
+ if (isCurrent()) void handleSocketFailure();
2013
+ });
2014
+ return Promise.resolve();
2015
+ };
2016
+ const teardown = () => {
2017
+ if (stopped) return;
2018
+ stopped = true;
2019
+ onTeardown();
2020
+ if (timer) {
2021
+ clearTimeout(timer);
2022
+ timer = null;
2023
+ }
2024
+ if (reconnectTimer !== null) {
2025
+ clearTimeout(reconnectTimer);
2026
+ reconnectTimer = null;
2027
+ }
2028
+ if (ws) {
2029
+ try {
2030
+ ws.close();
2031
+ } catch {
2032
+ }
2033
+ ws = null;
2034
+ }
2035
+ subscribers.clear();
2036
+ };
2037
+ const started = this.forcePolling ? startPolling() : connect().then(() => baseline);
2038
+ return { subscribers, teardown, started };
1817
2039
  }
1818
2040
  async getChainTip() {
1819
- const tipBlocks = await chunk6AFUNKK7_cjs.baseFetch(`${this.baseUrl}/blocks`);
2041
+ const tipBlocks = await chunkJZWLXNHV_cjs.baseFetch(`${this.baseUrl}/blocks`);
1820
2042
  if (!tipBlocks.ok) {
1821
2043
  throw new Error(`Failed to get chain tip: ${tipBlocks.statusText}`);
1822
2044
  }
@@ -1830,12 +2052,14 @@ var EsploraProvider = class {
1830
2052
  const hash = tip[0].id;
1831
2053
  return {
1832
2054
  height: tip[0].height,
2055
+ // `mediantime`, never `timestamp`: the latter is the header's own
2056
+ // `nTime`, and this field is specified as MTP.
1833
2057
  time: tip[0].mediantime,
1834
2058
  hash
1835
2059
  };
1836
2060
  }
1837
2061
  async broadcastPackage(parent, child) {
1838
- const response = await chunk6AFUNKK7_cjs.baseFetch(`${this.baseUrl}/txs/package`, {
2062
+ const response = await chunkJZWLXNHV_cjs.baseFetch(`${this.baseUrl}/txs/package`, {
1839
2063
  method: "POST",
1840
2064
  headers: {
1841
2065
  "Content-Type": "application/json"
@@ -1851,7 +2075,7 @@ var EsploraProvider = class {
1851
2075
  return result;
1852
2076
  }
1853
2077
  async broadcastTx(tx) {
1854
- const response = await chunk6AFUNKK7_cjs.baseFetch(`${this.baseUrl}/tx`, {
2078
+ const response = await chunkJZWLXNHV_cjs.baseFetch(`${this.baseUrl}/tx`, {
1855
2079
  method: "POST",
1856
2080
  headers: {
1857
2081
  "Content-Type": "text/plain"
@@ -1895,6 +2119,9 @@ var isExplorerTransaction = (tx) => {
1895
2119
  (vout) => typeof vout.scriptpubkey_address === "string" && typeof vout.value === "number"
1896
2120
  ) && typeof tx.status === "object" && typeof tx.status.confirmed === "boolean";
1897
2121
  };
2122
+ var MAX_POLL_BACKOFF_EXPONENT = 4;
2123
+ var RECONNECT_BASE_DELAY_MS = 1e3;
2124
+ var MAX_RECONNECT_BACKOFF_EXPONENT = 5;
1898
2125
  var getVarIntSize = (n) => {
1899
2126
  if (n < 253) return 1;
1900
2127
  if (n <= 65535) return 3;
@@ -2031,7 +2258,7 @@ function findP2AOutput(tx) {
2031
2258
  var CHILD_DUST_AMOUNT = 546;
2032
2259
  function buildAnchorChild(params) {
2033
2260
  const { parent, feeRate, fundingCoins, changeAddress, tapInternalKey, network } = params;
2034
- const child = new chunk6AFUNKK7_cjs.Transaction({ version: 3, allowLegacyWitnessUtxo: true });
2261
+ const child = new chunkJZWLXNHV_cjs.Transaction({ version: 3, allowLegacyWitnessUtxo: true });
2035
2262
  child.addInput(findP2AOutput(parent));
2036
2263
  const estimator = TxWeightEstimator.create().addP2AInput();
2037
2264
  for (const _ of fundingCoins) {
@@ -2079,7 +2306,7 @@ function buildForfeitTx(inputs, forfeitPkScript, txLocktime) {
2079
2306
  );
2080
2307
  }
2081
2308
  function buildForfeitTxWithOutput(inputs, output, txLocktime) {
2082
- const tx = new chunk6AFUNKK7_cjs.Transaction({
2309
+ const tx = new chunkJZWLXNHV_cjs.Transaction({
2083
2310
  version: 3,
2084
2311
  lockTime: txLocktime
2085
2312
  });
@@ -2155,7 +2382,7 @@ function validateVtxoTxGraph(graph, roundTransaction, sweepTapTreeRoot) {
2155
2382
  if (previousScriptKey.length !== 32) {
2156
2383
  throw new Error(`parent output ${childIndex} has invalid script`);
2157
2384
  }
2158
- const cosigners = chunk6AFUNKK7_cjs.getArkPsbtFields(child.root, 0, chunk6AFUNKK7_cjs.CosignerPublicKey);
2385
+ const cosigners = chunkJZWLXNHV_cjs.getArkPsbtFields(child.root, 0, chunkJZWLXNHV_cjs.CosignerPublicKey);
2159
2386
  if (cosigners.length === 0) {
2160
2387
  throw ErrMissingCosignersPublicKeys;
2161
2388
  }
@@ -2213,7 +2440,7 @@ var EmulatorPacket = class _EmulatorPacket {
2213
2440
  return new _EmulatorPacket(entries);
2214
2441
  }
2215
2442
  static fromBytes(data) {
2216
- const reader = new chunkCZ32XADN_cjs.BufferReader(data);
2443
+ const reader = new chunkNVZJSKZS_cjs.BufferReader(data);
2217
2444
  const entryCount = reader.readCompactSize();
2218
2445
  const entries = [];
2219
2446
  for (let i = 0; i < entryCount; i++) {
@@ -2231,7 +2458,7 @@ var EmulatorPacket = class _EmulatorPacket {
2231
2458
  return _EmulatorPacket.PACKET_TYPE;
2232
2459
  }
2233
2460
  serialize() {
2234
- const writer = new chunkCZ32XADN_cjs.BufferWriter();
2461
+ const writer = new chunkNVZJSKZS_cjs.BufferWriter();
2235
2462
  writer.writeCompactSize(this.entries.length);
2236
2463
  for (const entry of this.entries) {
2237
2464
  writer.writeUint16LE(entry.vin);
@@ -2318,7 +2545,7 @@ var Extension = class _Extension {
2318
2545
  `expected magic prefix ${base.hex.encode(ARKADE_MAGIC)}, got ${base.hex.encode(payload.slice(0, Math.min(payload.length, ARKADE_MAGIC.length)))}`
2319
2546
  );
2320
2547
  }
2321
- const reader = new chunkCZ32XADN_cjs.BufferReader(payload.slice(ARKADE_MAGIC.length));
2548
+ const reader = new chunkNVZJSKZS_cjs.BufferReader(payload.slice(ARKADE_MAGIC.length));
2322
2549
  const packets = [];
2323
2550
  while (reader.remaining() > 0) {
2324
2551
  const packetType = reader.readByte();
@@ -2392,7 +2619,7 @@ var Extension = class _Extension {
2392
2619
  */
2393
2620
  getAssetPacket() {
2394
2621
  for (const p of this.packets) {
2395
- if (p instanceof chunkCZ32XADN_cjs.Packet) {
2622
+ if (p instanceof chunkNVZJSKZS_cjs.Packet) {
2396
2623
  return p;
2397
2624
  }
2398
2625
  }
@@ -2430,8 +2657,8 @@ var Extension = class _Extension {
2430
2657
  };
2431
2658
  function parsePacket(packetType, data) {
2432
2659
  switch (packetType) {
2433
- case chunkCZ32XADN_cjs.Packet.PACKET_TYPE:
2434
- return chunkCZ32XADN_cjs.Packet.fromBytes(data);
2660
+ case chunkNVZJSKZS_cjs.Packet.PACKET_TYPE:
2661
+ return chunkNVZJSKZS_cjs.Packet.fromBytes(data);
2435
2662
  case EmulatorPacket.PACKET_TYPE:
2436
2663
  return EmulatorPacket.fromBytes(data);
2437
2664
  default:
@@ -2478,16 +2705,16 @@ function buildOpReturnScript(data) {
2478
2705
  }
2479
2706
  return script;
2480
2707
  }
2481
- var ErrOffchainOutputNotFound = (address) => new chunk6AFUNKK7_cjs.ServerResponseMismatchError(`offchain send output not found: ${address}`);
2482
- var ErrInvalidAssetOutputAmount = (got, want, assetId) => new chunk6AFUNKK7_cjs.ServerResponseMismatchError(
2708
+ var ErrOffchainOutputNotFound = (address) => new chunkJZWLXNHV_cjs.ServerResponseMismatchError(`offchain send output not found: ${address}`);
2709
+ var ErrInvalidAssetOutputAmount = (got, want, assetId) => new chunkJZWLXNHV_cjs.ServerResponseMismatchError(
2483
2710
  `invalid asset output amount for ${assetId}: got ${got}, want ${want}`
2484
2711
  );
2485
- var ErrAssetGroupNotFound = (assetId) => new chunk6AFUNKK7_cjs.ServerResponseMismatchError(`asset group not found in batch leaf: ${assetId}`);
2486
- var ErrAssetOutputNotFound = (assetId, outputIndex) => new chunk6AFUNKK7_cjs.ServerResponseMismatchError(
2712
+ var ErrAssetGroupNotFound = (assetId) => new chunkJZWLXNHV_cjs.ServerResponseMismatchError(`asset group not found in batch leaf: ${assetId}`);
2713
+ var ErrAssetOutputNotFound = (assetId, outputIndex) => new chunkJZWLXNHV_cjs.ServerResponseMismatchError(
2487
2714
  `asset output not found in asset group ${assetId} at index ${outputIndex}`
2488
2715
  );
2489
- var ErrOnchainOutputNotFound = (address) => new chunk6AFUNKK7_cjs.ServerResponseMismatchError(`onchain output not found: ${address}`);
2490
- var ErrUnvalidatedOffchainOutput = (address) => new chunk6AFUNKK7_cjs.ServerResponseMismatchError(
2716
+ var ErrOnchainOutputNotFound = (address) => new chunkJZWLXNHV_cjs.ServerResponseMismatchError(`onchain output not found: ${address}`);
2717
+ var ErrUnvalidatedOffchainOutput = (address) => new chunkJZWLXNHV_cjs.ServerResponseMismatchError(
2491
2718
  `offchain output ${address} cannot be validated: virtual output tree signing did not run`
2492
2719
  );
2493
2720
  var ErrInvalidOnchainOutputAmount = (address) => new Error(`invalid onchain output amount: ${address}`);
@@ -2496,7 +2723,7 @@ var ErrInvalidOffchainOutputAmount = (address) => new Error(`invalid offchain ou
2496
2723
  function assertFinalCommitmentMatchesValidated(finalCommitmentTx, validatedCommitmentTxid, context) {
2497
2724
  if (!validatedCommitmentTxid) return;
2498
2725
  if (finalCommitmentTx.id === validatedCommitmentTxid) return;
2499
- throw new chunk6AFUNKK7_cjs.ServerResponseMismatchError(
2726
+ throw new chunkJZWLXNHV_cjs.ServerResponseMismatchError(
2500
2727
  `${context}: finalization commitment tx ${finalCommitmentTx.id} differs from the validated commitment tx ${validatedCommitmentTxid}`
2501
2728
  );
2502
2729
  }
@@ -2506,7 +2733,7 @@ function validateBatchRecipients(commitmentTx, vtxoTreeLeaves, recipients, netwo
2506
2733
  for (const recipient of recipients) {
2507
2734
  let arkAddress;
2508
2735
  try {
2509
- arkAddress = chunk6AFUNKK7_cjs.ArkAddress.decode(recipient.address);
2736
+ arkAddress = chunkJZWLXNHV_cjs.ArkAddress.decode(recipient.address);
2510
2737
  } catch {
2511
2738
  validateOnchainRecipient(commitmentTx, recipient, network, usedOnchainOutputs);
2512
2739
  continue;
@@ -2518,7 +2745,7 @@ function validateBatchRecipientsWithoutTree(commitmentTx, recipients, network) {
2518
2745
  const usedOnchainOutputs = /* @__PURE__ */ new Set();
2519
2746
  for (const recipient of recipients) {
2520
2747
  try {
2521
- chunk6AFUNKK7_cjs.ArkAddress.decode(recipient.address);
2748
+ chunkJZWLXNHV_cjs.ArkAddress.decode(recipient.address);
2522
2749
  } catch {
2523
2750
  validateOnchainRecipient(commitmentTx, recipient, network, usedOnchainOutputs);
2524
2751
  continue;
@@ -2751,7 +2978,7 @@ function assetMintResolver() {
2751
2978
  if (!tx.assets?.length || !tx.key.arkTxid) return void 0;
2752
2979
  const minted = tx.assets.filter((a) => {
2753
2980
  try {
2754
- return base.hex.encode(chunkCZ32XADN_cjs.AssetId.fromString(a.assetId).txid) === tx.key.arkTxid;
2981
+ return base.hex.encode(chunkNVZJSKZS_cjs.AssetId.fromString(a.assetId).txid) === tx.key.arkTxid;
2755
2982
  } catch {
2756
2983
  return false;
2757
2984
  }
@@ -2794,7 +3021,7 @@ function createAssetPacket(assetInputs, receivers, changeReceiver) {
2794
3021
  const existing = inputsByAssetId.get(asset.assetId);
2795
3022
  inputsByAssetId.set(asset.assetId, [
2796
3023
  ...existing ?? [],
2797
- chunkCZ32XADN_cjs.AssetInput.create(inputIndex, asset.amount)
3024
+ chunkNVZJSKZS_cjs.AssetInput.create(inputIndex, asset.amount)
2798
3025
  ]);
2799
3026
  }
2800
3027
  }
@@ -2806,7 +3033,7 @@ function createAssetPacket(assetInputs, receivers, changeReceiver) {
2806
3033
  const existing = outputsByAssetId.get(asset.assetId);
2807
3034
  outputsByAssetId.set(asset.assetId, [
2808
3035
  ...existing ?? [],
2809
- chunkCZ32XADN_cjs.AssetOutput.create(outputIndex, asset.amount)
3036
+ chunkNVZJSKZS_cjs.AssetOutput.create(outputIndex, asset.amount)
2810
3037
  ]);
2811
3038
  }
2812
3039
  }
@@ -2817,7 +3044,7 @@ function createAssetPacket(assetInputs, receivers, changeReceiver) {
2817
3044
  const existing = outputsByAssetId.get(asset.assetId);
2818
3045
  outputsByAssetId.set(asset.assetId, [
2819
3046
  ...existing ?? [],
2820
- chunkCZ32XADN_cjs.AssetOutput.create(outputIndex, asset.amount)
3047
+ chunkNVZJSKZS_cjs.AssetOutput.create(outputIndex, asset.amount)
2821
3048
  ]);
2822
3049
  }
2823
3050
  }
@@ -2826,11 +3053,11 @@ function createAssetPacket(assetInputs, receivers, changeReceiver) {
2826
3053
  for (const assetIdStr of allAssetIds) {
2827
3054
  const inputs = inputsByAssetId.get(assetIdStr);
2828
3055
  const outputs = outputsByAssetId.get(assetIdStr);
2829
- const assetId = chunkCZ32XADN_cjs.AssetId.fromString(assetIdStr);
2830
- const group = chunkCZ32XADN_cjs.AssetGroup.create(assetId, null, inputs ?? [], outputs ?? [], []);
3056
+ const assetId = chunkNVZJSKZS_cjs.AssetId.fromString(assetIdStr);
3057
+ const group = chunkNVZJSKZS_cjs.AssetGroup.create(assetId, null, inputs ?? [], outputs ?? [], []);
2831
3058
  groups.push(group);
2832
3059
  }
2833
- return chunkCZ32XADN_cjs.Packet.create(groups);
3060
+ return chunkNVZJSKZS_cjs.Packet.create(groups);
2834
3061
  }
2835
3062
  function selectCoinsWithAsset(coins, assetId, requiredAmount) {
2836
3063
  const coinsWithAsset = coins.filter((coin) => coin.assets?.some((a) => a.assetId === assetId));
@@ -2867,7 +3094,7 @@ function selectedCoinsToAssetInputs(selectedCoins) {
2867
3094
  }
2868
3095
  function toXOnlySignerHex(pubkeyHex) {
2869
3096
  const bytes = base.hex.decode(pubkeyHex);
2870
- if (bytes.length === 32 || bytes.length === 33) return base.hex.encode(chunkHL7EC2Z5_cjs.toXOnly(bytes, "signer key"));
3097
+ if (bytes.length === 32 || bytes.length === 33) return base.hex.encode(chunk43FKNLX4_cjs.toXOnly(bytes, "signer key"));
2871
3098
  throw new Error(`invalid signer pubkey length: expected 32 or 33 bytes, got ${bytes.length}`);
2872
3099
  }
2873
3100
  function signerSetFromInfo(info) {
@@ -2914,13 +3141,13 @@ var toTimelock = (value) => ({
2914
3141
  var toSeconds = (t) => t.type === "seconds" ? t.value : t.value * NOMINAL_BLOCK_SECONDS;
2915
3142
  function assertTimelockInPolicy(timelock, policy, label, overrideOption) {
2916
3143
  if (policy.requireSeconds && timelock.type === "blocks") {
2917
- throw new chunk6AFUNKK7_cjs.ServerResponseMismatchError(
3144
+ throw new chunkJZWLXNHV_cjs.ServerResponseMismatchError(
2918
3145
  `${label} rejected: block-typed timelocks are not accepted (got ${timelock.value})`
2919
3146
  );
2920
3147
  }
2921
3148
  const seconds = toSeconds(timelock);
2922
3149
  if (seconds < policy.minSeconds) {
2923
- throw new chunk6AFUNKK7_cjs.ServerResponseMismatchError(
3150
+ throw new chunkJZWLXNHV_cjs.ServerResponseMismatchError(
2924
3151
  `${label} rejected: ${timelock.value} ${timelock.type} is below the ${policy.minSeconds}s floor; pass ${overrideOption}: ${seconds}n to Wallet.create to lower it`
2925
3152
  );
2926
3153
  }
@@ -2941,7 +3168,7 @@ function resolveBatchExpiryPolicy(network, overrides) {
2941
3168
  }
2942
3169
  function assertValidBatchExpiry(batchExpiry, policy) {
2943
3170
  if (policy.advertisedVtxoTreeExpiry !== void 0 && batchExpiry !== policy.advertisedVtxoTreeExpiry) {
2944
- throw new chunk6AFUNKK7_cjs.ServerResponseMismatchError(
3171
+ throw new chunkJZWLXNHV_cjs.ServerResponseMismatchError(
2945
3172
  `batch expiry rejected: ${batchExpiry} does not match the advertised vtxoTreeExpiry ${policy.advertisedVtxoTreeExpiry}`
2946
3173
  );
2947
3174
  }
@@ -2971,21 +3198,21 @@ function resolveCheckpointExitDelayPolicy(network, overrides) {
2971
3198
  function assertValidServerUnrollScript(checkpointTapscript, policy) {
2972
3199
  let script;
2973
3200
  try {
2974
- script = chunk6AFUNKK7_cjs.CSVMultisigTapscript.decode(base.hex.decode(checkpointTapscript));
3201
+ script = chunkJZWLXNHV_cjs.CSVMultisigTapscript.decode(base.hex.decode(checkpointTapscript));
2975
3202
  } catch (e) {
2976
- throw new chunk6AFUNKK7_cjs.ServerResponseMismatchError(
3203
+ throw new chunkJZWLXNHV_cjs.ServerResponseMismatchError(
2977
3204
  `checkpoint exit delay rejected: invalid checkpointTapscript from server (${e instanceof Error ? e.message : String(e)})`
2978
3205
  );
2979
3206
  }
2980
3207
  if (policy.advertisedForfeitPubkey !== void 0) {
2981
3208
  const { pubkeys } = script.params;
2982
3209
  if (pubkeys.length !== 1) {
2983
- throw new chunk6AFUNKK7_cjs.ServerResponseMismatchError(
3210
+ throw new chunkJZWLXNHV_cjs.ServerResponseMismatchError(
2984
3211
  `checkpoint exit delay rejected: checkpointTapscript must commit to exactly one pubkey, got ${pubkeys.length} [${pubkeys.map(base.hex.encode).join(", ")}]`
2985
3212
  );
2986
3213
  }
2987
3214
  if (!utils_js.equalBytes(pubkeys[0], policy.advertisedForfeitPubkey)) {
2988
- throw new chunk6AFUNKK7_cjs.ServerResponseMismatchError(
3215
+ throw new chunkJZWLXNHV_cjs.ServerResponseMismatchError(
2989
3216
  `checkpoint exit delay rejected: checkpointTapscript pubkey ${base.hex.encode(pubkeys[0])} does not match the advertised forfeitPubkey ${base.hex.encode(policy.advertisedForfeitPubkey)}`
2990
3217
  );
2991
3218
  }
@@ -3029,8 +3256,8 @@ function buildOffchainTx(inputs, outputs, serverUnrollScript) {
3029
3256
  function buildVirtualTx(inputs, outputs) {
3030
3257
  let lockTime = 0n;
3031
3258
  for (const input of inputs) {
3032
- const tapscript = chunk6AFUNKK7_cjs.decodeTapscript(chunk6AFUNKK7_cjs.scriptFromTapLeafScript(input.tapLeafScript));
3033
- if (chunk6AFUNKK7_cjs.CLTVMultisigTapscript.is(tapscript)) {
3259
+ const tapscript = chunkJZWLXNHV_cjs.decodeTapscript(chunkJZWLXNHV_cjs.scriptFromTapLeafScript(input.tapLeafScript));
3260
+ if (chunkJZWLXNHV_cjs.CLTVMultisigTapscript.is(tapscript)) {
3034
3261
  if (lockTime !== 0n) {
3035
3262
  if (isSeconds(lockTime) !== isSeconds(tapscript.params.absoluteTimelock)) {
3036
3263
  throw new Error("cannot mix seconds and blocks locktime");
@@ -3041,7 +3268,7 @@ function buildVirtualTx(inputs, outputs) {
3041
3268
  }
3042
3269
  }
3043
3270
  }
3044
- const tx = new chunk6AFUNKK7_cjs.Transaction({
3271
+ const tx = new chunkJZWLXNHV_cjs.Transaction({
3045
3272
  version: 3,
3046
3273
  lockTime: Number(lockTime)
3047
3274
  });
@@ -3051,12 +3278,12 @@ function buildVirtualTx(inputs, outputs) {
3051
3278
  index: input.vout,
3052
3279
  sequence: lockTime ? btcSigner.DEFAULT_SEQUENCE - 1 : void 0,
3053
3280
  witnessUtxo: {
3054
- script: chunk6AFUNKK7_cjs.VtxoScript.decode(input.tapTree).pkScript,
3281
+ script: chunkJZWLXNHV_cjs.VtxoScript.decode(input.tapTree).pkScript,
3055
3282
  amount: BigInt(input.value)
3056
3283
  },
3057
3284
  tapLeafScript: [input.tapLeafScript]
3058
3285
  });
3059
- chunk6AFUNKK7_cjs.setArkPsbtField(tx, i, chunk6AFUNKK7_cjs.VtxoTaprootTree, input.tapTree);
3286
+ chunkJZWLXNHV_cjs.setArkPsbtField(tx, i, chunkJZWLXNHV_cjs.VtxoTaprootTree, input.tapTree);
3060
3287
  }
3061
3288
  for (const output of outputs) {
3062
3289
  tx.addOutput(output);
@@ -3065,8 +3292,8 @@ function buildVirtualTx(inputs, outputs) {
3065
3292
  return tx;
3066
3293
  }
3067
3294
  function buildCheckpointTx(vtxo, serverUnrollScript) {
3068
- const collaborativeClosure = chunk6AFUNKK7_cjs.decodeTapscript(chunk6AFUNKK7_cjs.scriptFromTapLeafScript(vtxo.tapLeafScript));
3069
- const checkpointVtxoScript = new chunk6AFUNKK7_cjs.VtxoScript([
3295
+ const collaborativeClosure = chunkJZWLXNHV_cjs.decodeTapscript(chunkJZWLXNHV_cjs.scriptFromTapLeafScript(vtxo.tapLeafScript));
3296
+ const checkpointVtxoScript = new chunkJZWLXNHV_cjs.VtxoScript([
3070
3297
  serverUnrollScript.script,
3071
3298
  collaborativeClosure.script
3072
3299
  ]);
@@ -3142,7 +3369,7 @@ function verifyTapscriptSignatures(tx, inputIndex, requiredSigners, excludePubke
3142
3369
  const sighashType = signature.length === 65 ? signature[64] : btcSigner.SigHash.DEFAULT;
3143
3370
  const sig = signature.subarray(0, 64);
3144
3371
  if (!allowedSighashTypes.includes(sighashType)) {
3145
- const sighashName = chunk6AFUNKK7_cjs.formatSighash(sighashType);
3372
+ const sighashName = chunkJZWLXNHV_cjs.formatSighash(sighashType);
3146
3373
  throw new Error(
3147
3374
  `Unallowed sighash type ${sighashName} for input ${inputIndex}, pubkey ${pubKeyHex}.`
3148
3375
  );
@@ -3216,7 +3443,7 @@ function combineTapscriptSigs(signedTx, originalTx) {
3216
3443
  }
3217
3444
  function isValidArkAddress(address) {
3218
3445
  try {
3219
- chunk6AFUNKK7_cjs.ArkAddress.decode(address);
3446
+ chunkJZWLXNHV_cjs.ArkAddress.decode(address);
3220
3447
  return true;
3221
3448
  } catch (e) {
3222
3449
  return false;
@@ -3224,16 +3451,16 @@ function isValidArkAddress(address) {
3224
3451
  }
3225
3452
  function matchServerCheckpoints(serverCheckpointTxs, expectedCheckpoints, context) {
3226
3453
  if (serverCheckpointTxs.length !== expectedCheckpoints.length) {
3227
- throw new chunk6AFUNKK7_cjs.ServerResponseMismatchError(
3454
+ throw new chunkJZWLXNHV_cjs.ServerResponseMismatchError(
3228
3455
  `${context} returned ${serverCheckpointTxs.length} checkpoints, expected ${expectedCheckpoints.length}`
3229
3456
  );
3230
3457
  }
3231
3458
  const byTxid = new Map(expectedCheckpoints.map((c) => [c.id, c]));
3232
3459
  return serverCheckpointTxs.map((encoded, index) => {
3233
- const server = chunk6AFUNKK7_cjs.Transaction.fromPSBT(base.base64.decode(encoded));
3460
+ const server = chunkJZWLXNHV_cjs.Transaction.fromPSBT(base.base64.decode(encoded));
3234
3461
  const local = byTxid.get(server.id);
3235
3462
  if (!local) {
3236
- throw new chunk6AFUNKK7_cjs.ServerResponseMismatchError(
3463
+ throw new chunkJZWLXNHV_cjs.ServerResponseMismatchError(
3237
3464
  `${context} checkpoint ${index} txid ${server.id} does not match any submitted checkpoint`
3238
3465
  );
3239
3466
  }
@@ -3243,14 +3470,14 @@ function matchServerCheckpoints(serverCheckpointTxs, expectedCheckpoints, contex
3243
3470
  }
3244
3471
  function assertSubmittedArkTxid(response, signedArkTx, context) {
3245
3472
  if (response.arkTxid !== signedArkTx.id) {
3246
- throw new chunk6AFUNKK7_cjs.ServerResponseMismatchError(
3473
+ throw new chunkJZWLXNHV_cjs.ServerResponseMismatchError(
3247
3474
  `${context} returned ark txid ${response.arkTxid}, expected ${signedArkTx.id}`
3248
3475
  );
3249
3476
  }
3250
3477
  if (response.finalArkTx === void 0) return;
3251
- const finalTxid = chunk6AFUNKK7_cjs.Transaction.fromPSBT(base.base64.decode(response.finalArkTx)).id;
3478
+ const finalTxid = chunkJZWLXNHV_cjs.Transaction.fromPSBT(base.base64.decode(response.finalArkTx)).id;
3252
3479
  if (finalTxid !== signedArkTx.id) {
3253
- throw new chunk6AFUNKK7_cjs.ServerResponseMismatchError(
3480
+ throw new chunkJZWLXNHV_cjs.ServerResponseMismatchError(
3254
3481
  `${context} returned final ark tx ${finalTxid}, expected ${signedArkTx.id}`
3255
3482
  );
3256
3483
  }
@@ -3269,10 +3496,10 @@ function assertServerSignedLeaf(serverTx, localTx, inputIndex, serverPubkeyHex,
3269
3496
  [serverPubkeyHex],
3270
3497
  void 0,
3271
3498
  void 0,
3272
- payment_js.tapLeafHash(chunk6AFUNKK7_cjs.scriptFromTapLeafScript(leaf))
3499
+ payment_js.tapLeafHash(chunkJZWLXNHV_cjs.scriptFromTapLeafScript(leaf))
3273
3500
  );
3274
3501
  } catch (error) {
3275
- throw new chunk6AFUNKK7_cjs.ServerResponseMismatchError(
3502
+ throw new chunkJZWLXNHV_cjs.ServerResponseMismatchError(
3276
3503
  `${context}: input ${inputIndex} is not signed by the server on the leaf being spent (${error instanceof Error ? error.message : String(error)})`
3277
3504
  );
3278
3505
  }
@@ -3281,20 +3508,20 @@ function assertCheckpointsMatchInputs(checkpoints, inputs, unrollCandidates, con
3281
3508
  const byOutpoint = new Map(inputs.map((input) => [`${input.txid}:${input.vout}`, input]));
3282
3509
  for (const [index, checkpoint] of checkpoints.entries()) {
3283
3510
  if (checkpoint.inputsLength !== 1) {
3284
- throw new chunk6AFUNKK7_cjs.ServerResponseMismatchError(
3511
+ throw new chunkJZWLXNHV_cjs.ServerResponseMismatchError(
3285
3512
  `${context}: checkpoint ${index} spends ${checkpoint.inputsLength} inputs, expected 1`
3286
3513
  );
3287
3514
  }
3288
3515
  const spent = checkpoint.getInput(0);
3289
3516
  if (!spent.txid || spent.index === void 0) {
3290
- throw new chunk6AFUNKK7_cjs.ServerResponseMismatchError(
3517
+ throw new chunkJZWLXNHV_cjs.ServerResponseMismatchError(
3291
3518
  `${context}: checkpoint ${index} has no input outpoint`
3292
3519
  );
3293
3520
  }
3294
3521
  const outpoint = `${base.hex.encode(spent.txid)}:${spent.index}`;
3295
3522
  const input = byOutpoint.get(outpoint);
3296
3523
  if (!input) {
3297
- throw new chunk6AFUNKK7_cjs.ServerResponseMismatchError(
3524
+ throw new chunkJZWLXNHV_cjs.ServerResponseMismatchError(
3298
3525
  `${context}: checkpoint ${index} spends ${outpoint}, which is not one of the requested virtual outputs`
3299
3526
  );
3300
3527
  }
@@ -3302,7 +3529,7 @@ function assertCheckpointsMatchInputs(checkpoints, inputs, unrollCandidates, con
3302
3529
  (unroll) => buildCheckpointTx(input, unroll).tx.id === checkpoint.id
3303
3530
  );
3304
3531
  if (!rebuilt) {
3305
- throw new chunk6AFUNKK7_cjs.ServerResponseMismatchError(
3532
+ throw new chunkJZWLXNHV_cjs.ServerResponseMismatchError(
3306
3533
  `${context}: checkpoint ${index} txid ${checkpoint.id} differs from the checkpoint built locally for ${outpoint}`
3307
3534
  );
3308
3535
  }
@@ -3328,9 +3555,9 @@ async function submitOffchainTx(provider, offchainTx, signer, hooks, options) {
3328
3555
  const matched = matchServerCheckpoints(signedCheckpointTxs, offchainTx.checkpoints, "submitTx");
3329
3556
  matched.forEach(({ server }, index) => {
3330
3557
  try {
3331
- chunk6AFUNKK7_cjs.assertAllowedSighashTypes(server);
3558
+ chunkJZWLXNHV_cjs.assertAllowedSighashTypes(server);
3332
3559
  } catch (error) {
3333
- throw new chunk6AFUNKK7_cjs.ServerResponseMismatchError(
3560
+ throw new chunkJZWLXNHV_cjs.ServerResponseMismatchError(
3334
3561
  `submitTx checkpoint ${index}: ${error instanceof Error ? error.message : String(error)}`
3335
3562
  );
3336
3563
  }
@@ -3338,12 +3565,12 @@ async function submitOffchainTx(provider, offchainTx, signer, hooks, options) {
3338
3565
  const verify = options?.verifyServerSignatures;
3339
3566
  if (verify) {
3340
3567
  if (response.finalArkTx === void 0) {
3341
- throw new chunk6AFUNKK7_cjs.ServerResponseMismatchError(
3568
+ throw new chunkJZWLXNHV_cjs.ServerResponseMismatchError(
3342
3569
  "submitTx: server returned no final ark tx to verify its signatures against"
3343
3570
  );
3344
3571
  }
3345
- const finalArkTx = chunk6AFUNKK7_cjs.Transaction.fromPSBT(base.base64.decode(response.finalArkTx));
3346
- const serverPubkeyHex = base.hex.encode(chunkHL7EC2Z5_cjs.toXOnly(verify.serverPubkey, "server key"));
3572
+ const finalArkTx = chunkJZWLXNHV_cjs.Transaction.fromPSBT(base.base64.decode(response.finalArkTx));
3573
+ const serverPubkeyHex = base.hex.encode(chunk43FKNLX4_cjs.toXOnly(verify.serverPubkey, "server key"));
3347
3574
  for (let i = 0; i < offchainTx.arkTx.inputsLength; i++) {
3348
3575
  assertServerSignedLeaf(
3349
3576
  finalArkTx,
@@ -3399,12 +3626,12 @@ function claimWithPreimageIdentity(identity, preimage) {
3399
3626
  return {
3400
3627
  ...identity,
3401
3628
  sign: async (tx, inputIndexes) => {
3402
- const signed = chunk6AFUNKK7_cjs.Transaction.fromPSBT(
3629
+ const signed = chunkJZWLXNHV_cjs.Transaction.fromPSBT(
3403
3630
  (await identity.sign(tx.clone(), inputIndexes)).toPSBT()
3404
3631
  );
3405
3632
  const indexes = inputIndexes ?? Array.from({ length: signed.inputsLength }, (_, i) => i);
3406
3633
  for (const index of indexes) {
3407
- chunk6AFUNKK7_cjs.setArkPsbtField(signed, index, chunk6AFUNKK7_cjs.ConditionWitness, [preimage]);
3634
+ chunkJZWLXNHV_cjs.setArkPsbtField(signed, index, chunkJZWLXNHV_cjs.ConditionWitness, [preimage]);
3408
3635
  }
3409
3636
  return signed;
3410
3637
  }
@@ -3596,7 +3823,7 @@ function extendCoinWithTapscript(boardingTapscript, utxo) {
3596
3823
  };
3597
3824
  }
3598
3825
  function deriveContractTapscripts(contract) {
3599
- const handler = chunkHL7EC2Z5_cjs.contractHandlers.get(contract.type);
3826
+ const handler = chunk43FKNLX4_cjs.contractHandlers.get(contract.type);
3600
3827
  if (!handler) {
3601
3828
  throw new Error(`No handler for contract type '${contract.type}'`);
3602
3829
  }
@@ -3667,7 +3894,7 @@ function getRandomId() {
3667
3894
  }
3668
3895
  function isValidArkAddress2(address) {
3669
3896
  try {
3670
- chunk6AFUNKK7_cjs.ArkAddress.decode(address);
3897
+ chunkJZWLXNHV_cjs.ArkAddress.decode(address);
3671
3898
  return true;
3672
3899
  } catch (e) {
3673
3900
  return false;
@@ -3695,7 +3922,7 @@ function assertRecipientArkadeAddress(encoded, address, context) {
3695
3922
  function assertTapTreeDerivesAddress(encoded, tapTree, address) {
3696
3923
  let derived;
3697
3924
  try {
3698
- derived = chunk6AFUNKK7_cjs.VtxoScript.decode(tapTree).pkScript;
3925
+ derived = chunkJZWLXNHV_cjs.VtxoScript.decode(tapTree).pkScript;
3699
3926
  } catch (e) {
3700
3927
  throw new Error(
3701
3928
  `Invalid tapTree for ${encoded}: ${e instanceof Error ? e.message : String(e)}`
@@ -3712,7 +3939,7 @@ function validateRecipients(recipients, dustAmount, context) {
3712
3939
  for (const recipient of recipients) {
3713
3940
  let address;
3714
3941
  try {
3715
- address = chunk6AFUNKK7_cjs.ArkAddress.decode(recipient.address);
3942
+ address = chunkJZWLXNHV_cjs.ArkAddress.decode(recipient.address);
3716
3943
  } catch (e) {
3717
3944
  throw new Error(`Invalid Arkade address: ${recipient.address}`);
3718
3945
  }
@@ -3737,7 +3964,7 @@ function validateRecipients(recipients, dustAmount, context) {
3737
3964
 
3738
3965
  // src/contracts/spendability.ts
3739
3966
  function isContractGenericallySpendable(contract) {
3740
- return chunkHL7EC2Z5_cjs.contractHandlers.get(contract.type)?.isGenericallySpendable?.(contract) === true;
3967
+ return chunk43FKNLX4_cjs.contractHandlers.get(contract.type)?.isGenericallySpendable?.(contract) === true;
3741
3968
  }
3742
3969
  function gatedContracts(contracts) {
3743
3970
  const gated = /* @__PURE__ */ new Map();
@@ -3750,7 +3977,7 @@ function gateExclusion(gated) {
3750
3977
  return (vtxo) => {
3751
3978
  const type = vtxo.script === void 0 ? void 0 : gated.get(vtxo.script);
3752
3979
  if (type === void 0) return void 0;
3753
- if (!chunkHL7EC2Z5_cjs.contractHandlers.has(type)) {
3980
+ if (!chunk43FKNLX4_cjs.contractHandlers.has(type)) {
3754
3981
  return `at ${vtxo.script} (contract type '${type}') has no handler registered in this build`;
3755
3982
  }
3756
3983
  return `at ${vtxo.script} (contract type '${type}') is not generically spendable`;
@@ -3786,7 +4013,7 @@ function selectPendingRecoveryOutpoints(contractsWithVtxos, signerSet, nowSecond
3786
4013
  continue;
3787
4014
  }
3788
4015
  for (const v of vtxos) {
3789
- if (!chunk6AFUNKK7_cjs.hasTerminalSpend(v) && !v.isSwept && !v.isUnrolled) {
4016
+ if (!chunkJZWLXNHV_cjs.hasTerminalSpend(v) && !v.isSwept && !v.isUnrolled) {
3790
4017
  out.add(`${v.txid}:${v.vout}`);
3791
4018
  }
3792
4019
  }
@@ -3821,10 +4048,10 @@ function byValueDescending(vtxos) {
3821
4048
  return [...vtxos].sort((a, b) => b.value - a.value);
3822
4049
  }
3823
4050
  async function fetchTimeHeight(wallet) {
3824
- return chunk6AFUNKK7_cjs.resolveTimeHeight(wallet.onchainProvider);
4051
+ return chunkJZWLXNHV_cjs.resolveTimeHeight(wallet.onchainProvider);
3825
4052
  }
3826
4053
  function canMigrateBySend(vtxo, now) {
3827
- if (!chunk6AFUNKK7_cjs.canSpendOffchain(vtxo, now)) return false;
4054
+ if (!chunkJZWLXNHV_cjs.canSpendOffchain(vtxo, now)) return false;
3828
4055
  return vtxo.expiresAt !== void 0 || vtxo.expiresAtHeight !== void 0;
3829
4056
  }
3830
4057
  function byExpiryAscending(vtxos, now) {
@@ -3832,7 +4059,7 @@ function byExpiryAscending(vtxos, now) {
3832
4059
  if (vtxo.isSwept) return -Infinity;
3833
4060
  if (vtxo.expiresAt !== void 0) return vtxo.expiresAt.getTime();
3834
4061
  if (vtxo.expiresAtHeight !== void 0) {
3835
- return chunk6AFUNKK7_cjs.isPastExpiry(vtxo, now) ? -Infinity : Infinity;
4062
+ return chunkJZWLXNHV_cjs.isPastExpiry(vtxo, now) ? -Infinity : Infinity;
3836
4063
  }
3837
4064
  return Infinity;
3838
4065
  };
@@ -3859,7 +4086,7 @@ function priceSettlementInputs(vtxos, estimator) {
3859
4086
  const payable = [];
3860
4087
  const net = /* @__PURE__ */ new Map();
3861
4088
  for (const vtxo of vtxos) {
3862
- const inputFee = estimator.evalOffchainInput(chunk6AFUNKK7_cjs.toOffchainInputFeeParams(vtxo));
4089
+ const inputFee = estimator.evalOffchainInput(chunkJZWLXNHV_cjs.toOffchainInputFeeParams(vtxo));
3863
4090
  if (inputFee.satoshis >= vtxo.value) {
3864
4091
  continue;
3865
4092
  }
@@ -3885,7 +4112,7 @@ function deductOffchainOutputFee(subtotal, estimator, arkAddress) {
3885
4112
  }
3886
4113
  const outputFee = estimator.evalOffchainOutput({
3887
4114
  amount: subtotal,
3888
- script: base.hex.encode(chunk6AFUNKK7_cjs.ArkAddress.decode(arkAddress).pkScript)
4115
+ script: base.hex.encode(chunkJZWLXNHV_cjs.ArkAddress.decode(arkAddress).pkScript)
3889
4116
  });
3890
4117
  return subtotal - BigInt(outputFee.satoshis);
3891
4118
  }
@@ -3903,10 +4130,10 @@ var DEFAULT_SETTLEMENT_CONFIG = {
3903
4130
  };
3904
4131
  function getRecoverableVtxos(vtxos, dustAmount, now) {
3905
4132
  return vtxos.filter((vtxo) => {
3906
- if (chunk6AFUNKK7_cjs.canRecoverOnchain(vtxo, now)) {
4133
+ if (chunkJZWLXNHV_cjs.canRecoverOnchain(vtxo, now)) {
3907
4134
  return true;
3908
4135
  }
3909
- if (chunk6AFUNKK7_cjs.canSpendOffchain(vtxo, now) && vtxo.isPreconfirmed && isSubdust(vtxo, dustAmount)) {
4136
+ if (chunkJZWLXNHV_cjs.canSpendOffchain(vtxo, now) && vtxo.isPreconfirmed && isSubdust(vtxo, dustAmount)) {
3910
4137
  return true;
3911
4138
  }
3912
4139
  return false;
@@ -3938,7 +4165,7 @@ function getRecoverableWithSubdust(vtxos, dustAmount, now) {
3938
4165
  function isVtxoExpiringSoon(vtxo, thresholdMs) {
3939
4166
  if (vtxo.isUnrolled) return false;
3940
4167
  const realThresholdMs = thresholdMs <= 100 ? DEFAULT_THRESHOLD_MS : thresholdMs;
3941
- const expiresAt = chunk6AFUNKK7_cjs.normalizeVtxo(vtxo).expiresAt;
4168
+ const expiresAt = chunkJZWLXNHV_cjs.normalizeVtxo(vtxo).expiresAt;
3942
4169
  if (expiresAt === void 0) return false;
3943
4170
  const now = Date.now();
3944
4171
  const batchExpiry = expiresAt.getTime();
@@ -3949,7 +4176,7 @@ function getExpiringAndRecoverableVtxos(vtxos, thresholdMs, dustAmount, now) {
3949
4176
  return vtxos.filter(
3950
4177
  // The leading exclusion covers the `isSubdust` arm too, which is a value
3951
4178
  // property and would otherwise re-admit an exited coin on its own.
3952
- (vtxo) => !vtxo.isUnrolled && (isVtxoExpiringSoon(vtxo, thresholdMs) || chunk6AFUNKK7_cjs.canRecoverOnchain(vtxo, now) || isSubdust(vtxo, dustAmount))
4179
+ (vtxo) => !vtxo.isUnrolled && (isVtxoExpiringSoon(vtxo, thresholdMs) || chunkJZWLXNHV_cjs.canRecoverOnchain(vtxo, now) || isSubdust(vtxo, dustAmount))
3953
4180
  );
3954
4181
  }
3955
4182
  function isMigrationCapable(wallet) {
@@ -4548,11 +4775,11 @@ var VtxoManager = class _VtxoManager {
4548
4775
  `Sweep not economical: output ${outputAmount} sats after ${fee} sats fee is below dust (${dustAmount} sats)`
4549
4776
  );
4550
4777
  }
4551
- const tx = new chunk6AFUNKK7_cjs.Transaction();
4778
+ const tx = new chunkJZWLXNHV_cjs.Transaction();
4552
4779
  for (const utxo of expiredUtxos) {
4553
- const utxoScript = chunk6AFUNKK7_cjs.VtxoScript.decode(utxo.tapTree);
4780
+ const utxoScript = chunkJZWLXNHV_cjs.VtxoScript.decode(utxo.tapTree);
4554
4781
  const utxoExitLeaf = utxoScript.leaves.find(
4555
- (leaf) => chunk6AFUNKK7_cjs.CSVMultisigTapscript.isScriptValid(chunk6AFUNKK7_cjs.scriptFromTapLeafScript(leaf)) === true
4782
+ (leaf) => chunkJZWLXNHV_cjs.CSVMultisigTapscript.isScriptValid(chunkJZWLXNHV_cjs.scriptFromTapLeafScript(leaf)) === true
4556
4783
  );
4557
4784
  if (!utxoExitLeaf) {
4558
4785
  throw new Error(
@@ -4567,7 +4794,7 @@ var VtxoManager = class _VtxoManager {
4567
4794
  amount: BigInt(utxo.value)
4568
4795
  },
4569
4796
  tapLeafScript: [utxoExitLeaf],
4570
- sequence: chunk6AFUNKK7_cjs.getSequence(utxoExitLeaf)
4797
+ sequence: chunkJZWLXNHV_cjs.getSequence(utxoExitLeaf)
4571
4798
  });
4572
4799
  }
4573
4800
  tx.addOutputAddress(boardingAddress, outputAmount, this.getNetwork());
@@ -4810,8 +5037,8 @@ var VtxoManager = class _VtxoManager {
4810
5037
  const cls = classifyAgainstSignerSet(serverPubKey, signerSet, nowSeconds);
4811
5038
  if (cls.status === "CURRENT") continue;
4812
5039
  const live = vtxos.filter((v) => !v.isUnrolled);
4813
- const recoverable = live.filter((v) => v.isSwept && !chunk6AFUNKK7_cjs.hasTerminalSpend(v));
4814
- const spendable = live.filter((v) => !chunk6AFUNKK7_cjs.hasTerminalSpend(v) && !v.isSwept);
5040
+ const recoverable = live.filter((v) => v.isSwept && !chunkJZWLXNHV_cjs.hasTerminalSpend(v));
5041
+ const spendable = live.filter((v) => !chunkJZWLXNHV_cjs.hasTerminalSpend(v) && !v.isSwept);
4815
5042
  const value = spendable.reduce((sum, v) => sum + v.value, 0);
4816
5043
  let recoverableCount = 0;
4817
5044
  let recoverableValue = 0;
@@ -4824,7 +5051,7 @@ var VtxoManager = class _VtxoManager {
4824
5051
  awaitingSweepCount = spendable.length;
4825
5052
  awaitingSweepValue = value;
4826
5053
  for (const v of spendable) {
4827
- const exp = chunk6AFUNKK7_cjs.toBatchExpiry(v);
5054
+ const exp = chunkJZWLXNHV_cjs.toBatchExpiry(v);
4828
5055
  if (exp !== void 0 && (nextSweepEta === void 0 || exp < nextSweepEta)) {
4829
5056
  nextSweepEta = exp;
4830
5057
  }
@@ -5085,7 +5312,7 @@ var VtxoManager = class _VtxoManager {
5085
5312
  /** Decodes the boarding tapscript exit path to extract the CSV timelock. */
5086
5313
  getBoardingTimelock() {
5087
5314
  const wallet = this.getSweepWallet();
5088
- const exitScript = chunk6AFUNKK7_cjs.CSVMultisigTapscript.decode(
5315
+ const exitScript = chunkJZWLXNHV_cjs.CSVMultisigTapscript.decode(
5089
5316
  base.hex.decode(wallet.boardingTapscript.exitScript)
5090
5317
  );
5091
5318
  return exitScript.params.timelock;
@@ -5216,8 +5443,8 @@ var VtxoManager = class _VtxoManager {
5216
5443
  * or doesn't carry the metadata.
5217
5444
  */
5218
5445
  extractSpentOutpoint(error) {
5219
- const ark = chunk6AFUNKK7_cjs.maybeArkError(error);
5220
- if (!chunk6AFUNKK7_cjs.isArkError(ark, chunk6AFUNKK7_cjs.ArkErrorName.VTXO_ALREADY_SPENT)) return void 0;
5446
+ const ark = chunkJZWLXNHV_cjs.maybeArkError(error);
5447
+ if (!chunkJZWLXNHV_cjs.isArkError(ark, chunkJZWLXNHV_cjs.ArkErrorName.VTXO_ALREADY_SPENT)) return void 0;
5221
5448
  const raw = ark.metadata?.vtxo_outpoint;
5222
5449
  if (typeof raw !== "string") return void 0;
5223
5450
  const [txid, voutStr] = raw.split(":");
@@ -5407,7 +5634,7 @@ var VtxoManager = class _VtxoManager {
5407
5634
  if (filteredVtxos.length >= MAX_VTXOS_PER_SETTLEMENT) {
5408
5635
  break;
5409
5636
  }
5410
- const inputFee = estimator.evalOffchainInput(chunk6AFUNKK7_cjs.toOffchainInputFeeParams(v));
5637
+ const inputFee = estimator.evalOffchainInput(chunkJZWLXNHV_cjs.toOffchainInputFeeParams(v));
5411
5638
  if (inputFee.satoshis >= v.value) {
5412
5639
  continue;
5413
5640
  }
@@ -5427,7 +5654,7 @@ var VtxoManager = class _VtxoManager {
5427
5654
  const arkAddress = await this.wallet.getAddress();
5428
5655
  const outputFee = estimator.evalOffchainOutput({
5429
5656
  amount: totalAmount,
5430
- script: base.hex.encode(chunk6AFUNKK7_cjs.ArkAddress.decode(arkAddress).pkScript)
5657
+ script: base.hex.encode(chunkJZWLXNHV_cjs.ArkAddress.decode(arkAddress).pkScript)
5431
5658
  });
5432
5659
  totalAmount -= BigInt(outputFee.satoshis);
5433
5660
  if (totalAmount < dustAmount) return;
@@ -5507,7 +5734,7 @@ var ArkNote = class _ArkNote {
5507
5734
  this.value = value;
5508
5735
  this.HRP = HRP;
5509
5736
  const preimageHash = utils_js.sha256(this.preimage);
5510
- this.vtxoScript = new chunk6AFUNKK7_cjs.VtxoScript([noteTapscript(preimageHash)]);
5737
+ this.vtxoScript = new chunkJZWLXNHV_cjs.VtxoScript([noteTapscript(preimageHash)]);
5511
5738
  const leaf = this.vtxoScript.leaves[0];
5512
5739
  this.txid = base.hex.encode(new Uint8Array(preimageHash).reverse());
5513
5740
  this.tapTree = this.vtxoScript.encode();
@@ -5674,7 +5901,7 @@ var ArkadeCash = class _ArkadeCash {
5674
5901
  const privateKey = data.slice(1, 33);
5675
5902
  const serverPubKey = data.slice(33, 65);
5676
5903
  const sequence = new DataView(data.buffer, data.byteOffset + 65, 4).getUint32(0, false);
5677
- const csvTimelock = chunk6AFUNKK7_cjs.sequenceToTimelock(sequence);
5904
+ const csvTimelock = chunkJZWLXNHV_cjs.sequenceToTimelock(sequence);
5678
5905
  return new _ArkadeCash(privateKey, serverPubKey, csvTimelock, decoded.prefix);
5679
5906
  }
5680
5907
  toString() {
@@ -5682,7 +5909,7 @@ var ArkadeCash = class _ArkadeCash {
5682
5909
  data[0] = _ArkadeCash.Version;
5683
5910
  data.set(this._privateKey, 1);
5684
5911
  data.set(this._serverPubKey, 33);
5685
- const sequence = chunk6AFUNKK7_cjs.timelockToSequence(this.csvTimelock);
5912
+ const sequence = chunkJZWLXNHV_cjs.timelockToSequence(this.csvTimelock);
5686
5913
  new DataView(data.buffer, data.byteOffset + 65, 4).setUint32(0, sequence, false);
5687
5914
  const words = base.bech32m.toWords(data);
5688
5915
  return base.bech32m.encode(this.hrp, words, 1023);
@@ -5691,7 +5918,7 @@ var ArkadeCash = class _ArkadeCash {
5691
5918
  return SingleKey.fromPrivateKey(this._privateKey);
5692
5919
  }
5693
5920
  get vtxoScript() {
5694
- return new chunkHL7EC2Z5_cjs.DefaultVtxo.Script({
5921
+ return new chunk43FKNLX4_cjs.DefaultVtxo.Script({
5695
5922
  pubKey: this._publicKey,
5696
5923
  serverPubKey: this._serverPubKey,
5697
5924
  csvTimelock: this.csvTimelock
@@ -5952,7 +6179,7 @@ async function captureExitBranch(params) {
5952
6179
  const nonCommitment = ordered.filter((c) => chainTxTypeToChainedExit(c.type) !== 1 /* Commitment */).map((c) => c.txid);
5953
6180
  if (nonCommitment.length > 0) {
5954
6181
  for (const psbt of await resolver.getVirtualTxs(nonCommitment)) {
5955
- psbtByTxid.set(chunk6AFUNKK7_cjs.Transaction.fromPSBT(base.base64.decode(psbt)).id, psbt);
6182
+ psbtByTxid.set(chunkJZWLXNHV_cjs.Transaction.fromPSBT(base.base64.decode(psbt)).id, psbt);
5956
6183
  }
5957
6184
  }
5958
6185
  }
@@ -5995,10 +6222,10 @@ var IndexerExitDataSource = class {
5995
6222
  while (hasMore) {
5996
6223
  const { chain: page, page: meta } = await this.indexer.getVtxoChain(
5997
6224
  { txid: vtxo.txid, vout: vtxo.vout },
5998
- { pageIndex, pageSize: chunk6AFUNKK7_cjs.DEFAULT_PAGE_SIZE }
6225
+ { pageIndex, pageSize: chunkJZWLXNHV_cjs.DEFAULT_PAGE_SIZE }
5999
6226
  );
6000
6227
  chain.push(...page);
6001
- hasMore = meta ? page.length === chunk6AFUNKK7_cjs.DEFAULT_PAGE_SIZE : false;
6228
+ hasMore = meta ? page.length === chunkJZWLXNHV_cjs.DEFAULT_PAGE_SIZE : false;
6002
6229
  pageIndex++;
6003
6230
  }
6004
6231
  return chain;
@@ -6010,12 +6237,12 @@ var IndexerExitDataSource = class {
6010
6237
  while (hasMore) {
6011
6238
  const { txs, page } = await this.indexer.getVirtualTxs(txids, {
6012
6239
  pageIndex,
6013
- pageSize: chunk6AFUNKK7_cjs.DEFAULT_PAGE_SIZE
6240
+ pageSize: chunkJZWLXNHV_cjs.DEFAULT_PAGE_SIZE
6014
6241
  });
6015
6242
  for (const psbt of txs) {
6016
- out.set(chunk6AFUNKK7_cjs.Transaction.fromPSBT(base.base64.decode(psbt)).id, psbt);
6243
+ out.set(chunkJZWLXNHV_cjs.Transaction.fromPSBT(base.base64.decode(psbt)).id, psbt);
6017
6244
  }
6018
- hasMore = page ? txs.length === chunk6AFUNKK7_cjs.DEFAULT_PAGE_SIZE : false;
6245
+ hasMore = page ? txs.length === chunkJZWLXNHV_cjs.DEFAULT_PAGE_SIZE : false;
6019
6246
  pageIndex++;
6020
6247
  }
6021
6248
  return out;
@@ -6036,7 +6263,7 @@ function chainedTxTypeToChainTxType(t) {
6036
6263
  }
6037
6264
  }
6038
6265
  function psbtInputTxids(psbtBase64) {
6039
- const tx = chunk6AFUNKK7_cjs.Transaction.fromPSBT(base.base64.decode(psbtBase64));
6266
+ const tx = chunkJZWLXNHV_cjs.Transaction.fromPSBT(base.base64.decode(psbtBase64));
6040
6267
  const ids = [];
6041
6268
  for (let i = 0; i < tx.inputsLength; i++) {
6042
6269
  const txid = tx.getInput(i).txid;
@@ -6395,10 +6622,10 @@ async function resolveArkInfo(arkProvider, walletRepository, opts) {
6395
6622
  try {
6396
6623
  info = await arkProvider.getInfo();
6397
6624
  } catch (err) {
6398
- if (opts?.requireLive || !chunk6AFUNKK7_cjs.isRetryableProviderError(err)) throw err;
6625
+ if (opts?.requireLive || !chunkJZWLXNHV_cjs.isRetryableProviderError(err)) throw err;
6399
6626
  const snapshot = await loadArkInfoSnapshot(walletRepository);
6400
6627
  if (!snapshot) {
6401
- throw new chunk6AFUNKK7_cjs.ProviderUnavailableError(
6628
+ throw new chunkJZWLXNHV_cjs.ProviderUnavailableError(
6402
6629
  "Arkade server info is unavailable and no cached snapshot exists",
6403
6630
  { cause: err }
6404
6631
  );
@@ -6788,7 +7015,7 @@ function collectArkTxidsNeedingCreatedAt(vtxos) {
6788
7015
  return [...txids];
6789
7016
  }
6790
7017
  async function buildTransactionHistory(vtxos, allBoardingTxs, commitmentsToIgnore, resolveTxCreatedAt) {
6791
- const fromOldestVtxo = vtxos.map(chunk6AFUNKK7_cjs.normalizeVtxo).sort((a, b) => a.createdAt.getTime() - b.createdAt.getTime());
7018
+ const fromOldestVtxo = vtxos.map(chunkJZWLXNHV_cjs.normalizeVtxo).sort((a, b) => a.createdAt.getTime() - b.createdAt.getTime());
6792
7019
  const txidsNeedingCreatedAt = resolveTxCreatedAt ? collectArkTxidsNeedingCreatedAt(fromOldestVtxo) : [];
6793
7020
  const resolvedCreatedAt = resolveTxCreatedAt && txidsNeedingCreatedAt.length > 0 ? await resolveTxCreatedAt(txidsNeedingCreatedAt) : /* @__PURE__ */ new Map();
6794
7021
  const unmatchedSettledBoardingTxs = allBoardingTxs.filter(isSettledBoardingReceive).sort((a, b) => a.createdAt - b.createdAt);
@@ -6952,7 +7179,7 @@ var AssetManager = class extends ReadonlyAssetManager {
6952
7179
  const virtualCoins = await this.wallet.getSpendableVtxos({
6953
7180
  withRecoverable: false
6954
7181
  });
6955
- const controlAssetRef = params.controlAssetId ? chunkCZ32XADN_cjs.AssetRef.fromId(chunkCZ32XADN_cjs.AssetId.fromString(params.controlAssetId)) : null;
7182
+ const controlAssetRef = params.controlAssetId ? chunkNVZJSKZS_cjs.AssetRef.fromId(chunkNVZJSKZS_cjs.AssetId.fromString(params.controlAssetId)) : null;
6956
7183
  const coinSelection = selectVirtualCoins(virtualCoins, Number(this.wallet.dustAmount));
6957
7184
  let totalBtcSelected = 0n;
6958
7185
  const assetChanges = /* @__PURE__ */ new Map();
@@ -6965,8 +7192,8 @@ var AssetManager = class extends ReadonlyAssetManager {
6965
7192
  }
6966
7193
  }
6967
7194
  const groups = [];
6968
- const issuedAssetOutput = chunkCZ32XADN_cjs.AssetOutput.create(0, params.amount);
6969
- const issuedAssetGroup = chunkCZ32XADN_cjs.AssetGroup.create(
7195
+ const issuedAssetOutput = chunkNVZJSKZS_cjs.AssetOutput.create(0, params.amount);
7196
+ const issuedAssetGroup = chunkNVZJSKZS_cjs.AssetGroup.create(
6970
7197
  null,
6971
7198
  controlAssetRef,
6972
7199
  [],
@@ -6981,28 +7208,28 @@ var AssetManager = class extends ReadonlyAssetManager {
6981
7208
  for (const [inputIndex, assets] of assetInputs) {
6982
7209
  for (const asset of assets) {
6983
7210
  if (asset.assetId !== assetId) continue;
6984
- changeInputs.push(chunkCZ32XADN_cjs.AssetInput.create(inputIndex, asset.amount));
7211
+ changeInputs.push(chunkNVZJSKZS_cjs.AssetInput.create(inputIndex, asset.amount));
6985
7212
  }
6986
7213
  }
6987
7214
  groups.push(
6988
- chunkCZ32XADN_cjs.AssetGroup.create(
6989
- chunkCZ32XADN_cjs.AssetId.fromString(assetId),
7215
+ chunkNVZJSKZS_cjs.AssetGroup.create(
7216
+ chunkNVZJSKZS_cjs.AssetId.fromString(assetId),
6990
7217
  null,
6991
7218
  changeInputs,
6992
- [chunkCZ32XADN_cjs.AssetOutput.create(0, amount)],
7219
+ [chunkNVZJSKZS_cjs.AssetOutput.create(0, amount)],
6993
7220
  []
6994
7221
  )
6995
7222
  );
6996
7223
  }
6997
7224
  }
6998
7225
  const address = await this.wallet.getAddress();
6999
- const outputAddress = chunk6AFUNKK7_cjs.ArkAddress.decode(address);
7226
+ const outputAddress = chunkJZWLXNHV_cjs.ArkAddress.decode(address);
7000
7227
  const outputs = [
7001
7228
  {
7002
7229
  script: outputAddress.pkScript,
7003
7230
  amount: BigInt(totalBtcSelected)
7004
7231
  },
7005
- Extension.create([chunkCZ32XADN_cjs.Packet.create(groups)]).txOut()
7232
+ Extension.create([chunkNVZJSKZS_cjs.Packet.create(groups)]).txOut()
7006
7233
  ];
7007
7234
  const { arkTxid } = await this.wallet.buildAndSubmitOffchainTx(
7008
7235
  coinSelection.inputs,
@@ -7010,7 +7237,7 @@ var AssetManager = class extends ReadonlyAssetManager {
7010
7237
  );
7011
7238
  return {
7012
7239
  arkTxId: arkTxid,
7013
- assetId: chunkCZ32XADN_cjs.AssetId.create(arkTxid, 0).toString()
7240
+ assetId: chunkNVZJSKZS_cjs.AssetId.create(arkTxid, 0).toString()
7014
7241
  };
7015
7242
  }
7016
7243
  /**
@@ -7082,16 +7309,16 @@ var AssetManager = class extends ReadonlyAssetManager {
7082
7309
  for (const [inputIndex, assets] of assetInputs) {
7083
7310
  for (const asset of assets) {
7084
7311
  if (asset.assetId !== params.assetId) continue;
7085
- reissueInputs.push(chunkCZ32XADN_cjs.AssetInput.create(inputIndex, asset.amount));
7312
+ reissueInputs.push(chunkNVZJSKZS_cjs.AssetInput.create(inputIndex, asset.amount));
7086
7313
  }
7087
7314
  }
7088
7315
  const totalAssetAmount = assetToReissueAmount + params.amount;
7089
- const reissueAssetIdObj = chunkCZ32XADN_cjs.AssetId.fromString(params.assetId);
7090
- const reissueAssetGroup = chunkCZ32XADN_cjs.AssetGroup.create(
7316
+ const reissueAssetIdObj = chunkNVZJSKZS_cjs.AssetId.fromString(params.assetId);
7317
+ const reissueAssetGroup = chunkNVZJSKZS_cjs.AssetGroup.create(
7091
7318
  reissueAssetIdObj,
7092
7319
  null,
7093
7320
  reissueInputs,
7094
- [chunkCZ32XADN_cjs.AssetOutput.create(0, totalAssetAmount)],
7321
+ [chunkNVZJSKZS_cjs.AssetOutput.create(0, totalAssetAmount)],
7095
7322
  []
7096
7323
  );
7097
7324
  const groups = [reissueAssetGroup];
@@ -7100,27 +7327,27 @@ var AssetManager = class extends ReadonlyAssetManager {
7100
7327
  for (const [inputIndex, assets] of assetInputs) {
7101
7328
  for (const asset of assets) {
7102
7329
  if (asset.assetId !== assetId) continue;
7103
- changeInputs.push(chunkCZ32XADN_cjs.AssetInput.create(inputIndex, asset.amount));
7330
+ changeInputs.push(chunkNVZJSKZS_cjs.AssetInput.create(inputIndex, asset.amount));
7104
7331
  }
7105
7332
  }
7106
7333
  groups.push(
7107
- chunkCZ32XADN_cjs.AssetGroup.create(
7108
- chunkCZ32XADN_cjs.AssetId.fromString(assetId),
7334
+ chunkNVZJSKZS_cjs.AssetGroup.create(
7335
+ chunkNVZJSKZS_cjs.AssetId.fromString(assetId),
7109
7336
  null,
7110
7337
  changeInputs,
7111
- [chunkCZ32XADN_cjs.AssetOutput.create(0, amount)],
7338
+ [chunkNVZJSKZS_cjs.AssetOutput.create(0, amount)],
7112
7339
  []
7113
7340
  )
7114
7341
  );
7115
7342
  }
7116
7343
  const address = await this.wallet.getAddress();
7117
- const outputAddress = chunk6AFUNKK7_cjs.ArkAddress.decode(address);
7344
+ const outputAddress = chunkJZWLXNHV_cjs.ArkAddress.decode(address);
7118
7345
  const outputs = [
7119
7346
  {
7120
7347
  script: outputAddress.pkScript,
7121
7348
  amount: BigInt(totalBtcSelected)
7122
7349
  },
7123
- Extension.create([chunkCZ32XADN_cjs.Packet.create(groups)]).txOut()
7350
+ Extension.create([chunkNVZJSKZS_cjs.Packet.create(groups)]).txOut()
7124
7351
  ];
7125
7352
  const { arkTxid } = await this.wallet.buildAndSubmitOffchainTx(selectedCoins, outputs);
7126
7353
  return arkTxid;
@@ -7187,27 +7414,27 @@ var AssetManager = class extends ReadonlyAssetManager {
7187
7414
  for (const [inputIndex, assets] of assetInputs) {
7188
7415
  for (const asset of assets) {
7189
7416
  if (asset.assetId !== assetId) continue;
7190
- changeInputs.push(chunkCZ32XADN_cjs.AssetInput.create(inputIndex, asset.amount));
7417
+ changeInputs.push(chunkNVZJSKZS_cjs.AssetInput.create(inputIndex, asset.amount));
7191
7418
  }
7192
7419
  }
7193
7420
  groups.push(
7194
- chunkCZ32XADN_cjs.AssetGroup.create(
7195
- chunkCZ32XADN_cjs.AssetId.fromString(assetId),
7421
+ chunkNVZJSKZS_cjs.AssetGroup.create(
7422
+ chunkNVZJSKZS_cjs.AssetId.fromString(assetId),
7196
7423
  null,
7197
7424
  changeInputs,
7198
- amount > 0n ? [chunkCZ32XADN_cjs.AssetOutput.create(0, amount)] : [],
7425
+ amount > 0n ? [chunkNVZJSKZS_cjs.AssetOutput.create(0, amount)] : [],
7199
7426
  []
7200
7427
  )
7201
7428
  );
7202
7429
  }
7203
7430
  const address = await this.wallet.getAddress();
7204
- const outputAddress = chunk6AFUNKK7_cjs.ArkAddress.decode(address);
7431
+ const outputAddress = chunkJZWLXNHV_cjs.ArkAddress.decode(address);
7205
7432
  const outputs = [
7206
7433
  {
7207
7434
  script: outputAddress.pkScript,
7208
7435
  amount: BigInt(totalBtcSelected)
7209
7436
  },
7210
- Extension.create([chunkCZ32XADN_cjs.Packet.create(groups)]).txOut()
7437
+ Extension.create([chunkNVZJSKZS_cjs.Packet.create(groups)]).txOut()
7211
7438
  ];
7212
7439
  const { arkTxid } = await this.wallet.buildAndSubmitOffchainTx(selectedCoins, outputs);
7213
7440
  return arkTxid;
@@ -7232,7 +7459,7 @@ function castMetadata(metadata) {
7232
7459
  } else {
7233
7460
  throw new Error("Invalid metadata value type");
7234
7461
  }
7235
- md.push(chunkCZ32XADN_cjs.Metadata.create(textEncoder.encode(key), valueBytes));
7462
+ md.push(chunkNVZJSKZS_cjs.Metadata.create(textEncoder.encode(key), valueBytes));
7236
7463
  }
7237
7464
  return md;
7238
7465
  }
@@ -7253,10 +7480,10 @@ var DelegateManagerImpl = class {
7253
7480
  if (vtxos.length === 0) {
7254
7481
  return { delegated: [], failed: [] };
7255
7482
  }
7256
- const destinationScript = chunk6AFUNKK7_cjs.ArkAddress.decode(destination).pkScript;
7483
+ const destinationScript = chunkJZWLXNHV_cjs.ArkAddress.decode(destination).pkScript;
7257
7484
  const arkInfo = await this.arkInfoProvider.getInfo();
7258
7485
  const delegateInfo = await this.delegateProvider.getDelegateInfo();
7259
- const eligible = vtxos.map(chunk6AFUNKK7_cjs.normalizeVtxo).filter(
7486
+ const eligible = vtxos.map(chunkJZWLXNHV_cjs.normalizeVtxo).filter(
7260
7487
  (v) => isAnnotated(v) && findDelegateTapLeaf(v, delegateInfo.pubkey) !== void 0
7261
7488
  );
7262
7489
  if (eligible.length === 0) {
@@ -7285,11 +7512,11 @@ var DelegateManagerImpl = class {
7285
7512
  const groupByExpiry = /* @__PURE__ */ new Map();
7286
7513
  let recoverableVtxos = [];
7287
7514
  for (const vtxo of eligible) {
7288
- if (chunk6AFUNKK7_cjs.canRecoverOnchain(vtxo, now)) {
7515
+ if (chunkJZWLXNHV_cjs.canRecoverOnchain(vtxo, now)) {
7289
7516
  recoverableVtxos.push(vtxo);
7290
7517
  continue;
7291
7518
  }
7292
- const expiry = chunk6AFUNKK7_cjs.toBatchExpiry(vtxo);
7519
+ const expiry = chunkJZWLXNHV_cjs.toBatchExpiry(vtxo);
7293
7520
  if (!expiry) continue;
7294
7521
  const dayKey = getDayTimestamp(expiry);
7295
7522
  groupByExpiry.set(dayKey, [...groupByExpiry.get(dayKey) ?? [], vtxo]);
@@ -7354,7 +7581,7 @@ async function delegate(identity, delegateProvider, arkInfo, delegateInfo, vtxos
7354
7581
  }
7355
7582
  if (!delegateAt) {
7356
7583
  const now = { timestamp: /* @__PURE__ */ new Date() };
7357
- const expiryTimestamp = vtxos.filter((coin) => !chunk6AFUNKK7_cjs.canRecoverOnchain(coin, now) && chunk6AFUNKK7_cjs.toBatchExpiry(coin)).reduce((min, coin) => Math.min(min, chunk6AFUNKK7_cjs.toBatchExpiry(coin)), Number.MAX_SAFE_INTEGER);
7584
+ const expiryTimestamp = vtxos.filter((coin) => !chunkJZWLXNHV_cjs.canRecoverOnchain(coin, now) && chunkJZWLXNHV_cjs.toBatchExpiry(coin)).reduce((min, coin) => Math.min(min, chunkJZWLXNHV_cjs.toBatchExpiry(coin)), Number.MAX_SAFE_INTEGER);
7358
7585
  if (!expiryTimestamp || expiryTimestamp === Number.MAX_SAFE_INTEGER) {
7359
7586
  delegateAt = new Date(Date.now() + 1 * 60 * 1e3);
7360
7587
  } else {
@@ -7383,7 +7610,7 @@ async function delegate(identity, delegateProvider, arkInfo, delegateInfo, vtxos
7383
7610
  let amount = 0n;
7384
7611
  for (const coin of vtxos) {
7385
7612
  const inputFee = estimator.evalOffchainInput({
7386
- ...chunk6AFUNKK7_cjs.toOffchainInputFeeParams(coin),
7613
+ ...chunkJZWLXNHV_cjs.toOffchainInputFeeParams(coin),
7387
7614
  type: "vtxo"
7388
7615
  });
7389
7616
  if (inputFee.value >= coin.value) {
@@ -7397,7 +7624,7 @@ async function delegate(identity, delegateProvider, arkInfo, delegateInfo, vtxos
7397
7624
  const delegateFee = BigInt(Number(fee));
7398
7625
  if (delegateFee > 0n) {
7399
7626
  outputs.push({
7400
- script: chunk6AFUNKK7_cjs.ArkAddress.decode(delegateAddress).pkScript,
7627
+ script: chunkJZWLXNHV_cjs.ArkAddress.decode(delegateAddress).pkScript,
7401
7628
  amount: delegateFee
7402
7629
  });
7403
7630
  }
@@ -7430,10 +7657,10 @@ async function delegate(identity, delegateProvider, arkInfo, delegateInfo, vtxos
7430
7657
  destinationScript
7431
7658
  );
7432
7659
  const forfeitOutputScript = btcSigner.OutScript.encode(
7433
- btcSigner.Address(chunk6AFUNKK7_cjs.getNetwork(network)).decode(forfeitAddress)
7660
+ btcSigner.Address(chunkJZWLXNHV_cjs.getNetwork(network)).decode(forfeitAddress)
7434
7661
  );
7435
7662
  const forfeits = await Promise.all(
7436
- vtxos.filter((v) => !chunk6AFUNKK7_cjs.canRecoverOnchain(v, { timestamp: /* @__PURE__ */ new Date() })).map(async (coin) => {
7663
+ vtxos.filter((v) => !chunkJZWLXNHV_cjs.canRecoverOnchain(v, { timestamp: /* @__PURE__ */ new Date() })).map(async (coin) => {
7437
7664
  const forfeit = await makeDelegateForfeitTx(
7438
7665
  coin,
7439
7666
  dust,
@@ -7458,7 +7685,7 @@ async function makeDelegateForfeitTx(input, connectorAmount, delegatePubkey, for
7458
7685
  index: input.vout,
7459
7686
  witnessUtxo: {
7460
7687
  amount: BigInt(input.value),
7461
- script: chunk6AFUNKK7_cjs.VtxoScript.decode(input.tapTree).pkScript
7688
+ script: chunkJZWLXNHV_cjs.VtxoScript.decode(input.tapTree).pkScript
7462
7689
  },
7463
7690
  sighashType: btcSigner.SigHash.ALL_ANYONECANPAY,
7464
7691
  tapLeafScript: [delegateTapLeaf]
@@ -7516,7 +7743,7 @@ async function makeSignedDelegateIntent(identity, coins, outputs, onchainOutputs
7516
7743
  expire_at: 0,
7517
7744
  cosigners_public_keys: cosignerPubKeys
7518
7745
  };
7519
- const proof = chunk6AFUNKK7_cjs.Intent.create(message, coins, outputs);
7746
+ const proof = chunkJZWLXNHV_cjs.Intent.create(message, coins, outputs);
7520
7747
  const signedProof = await identity.sign(proof);
7521
7748
  return {
7522
7749
  proof: base.base64.encode(signedProof.toPSBT()),
@@ -7534,10 +7761,10 @@ function getDayTimestamp(timestamp) {
7534
7761
  function findDelegateTapLeaf(vtxo, delegatePubkey) {
7535
7762
  if (!vtxo.tapTree) return void 0;
7536
7763
  const pk = delegatePubkey.length === 66 ? delegatePubkey.slice(2) : delegatePubkey;
7537
- const vtxoScript = chunk6AFUNKK7_cjs.VtxoScript.decode(vtxo.tapTree);
7764
+ const vtxoScript = chunkJZWLXNHV_cjs.VtxoScript.decode(vtxo.tapTree);
7538
7765
  return vtxoScript.leaves.find((tapLeaf) => {
7539
- const arkTapscript = chunk6AFUNKK7_cjs.decodeTapscript(chunk6AFUNKK7_cjs.scriptFromTapLeafScript(tapLeaf));
7540
- if (!chunk6AFUNKK7_cjs.MultisigTapscript.is(arkTapscript)) return false;
7766
+ const arkTapscript = chunkJZWLXNHV_cjs.decodeTapscript(chunkJZWLXNHV_cjs.scriptFromTapLeafScript(tapLeaf));
7767
+ if (!chunkJZWLXNHV_cjs.MultisigTapscript.is(arkTapscript)) return false;
7541
7768
  return arkTapscript.params.pubkeys.map(base.hex.encode).includes(pk);
7542
7769
  });
7543
7770
  }
@@ -7818,7 +8045,7 @@ function createManagedConnection(dbName, version, initDatabase2) {
7818
8045
  };
7819
8046
  }
7820
8047
  function scriptFromArkAddress(address) {
7821
- return base.hex.encode(chunk6AFUNKK7_cjs.ArkAddress.decode(address).pkScript);
8048
+ return base.hex.encode(chunkJZWLXNHV_cjs.ArkAddress.decode(address).pkScript);
7822
8049
  }
7823
8050
 
7824
8051
  // src/repositories/indexedDB/schema.ts
@@ -8313,7 +8540,7 @@ function validateVtxosForScript(vtxos, script, context) {
8313
8540
  }
8314
8541
  async function getVtxosForContract(repo, contract) {
8315
8542
  const vtxos = repo.getVtxosForScript ? await repo.getVtxosForScript(contract.script) : filterVtxosForScript(await repo.getVtxos(contract.address), contract.script);
8316
- return vtxos.map(chunk6AFUNKK7_cjs.normalizeVtxo);
8543
+ return vtxos.map(chunkJZWLXNHV_cjs.normalizeVtxo);
8317
8544
  }
8318
8545
  async function saveVtxosForContract(repo, contract, vtxos) {
8319
8546
  if (repo.saveVtxosForScript) {
@@ -8455,7 +8682,7 @@ function decodeArkContract(encoded) {
8455
8682
  }
8456
8683
  function contractFromArkContract(encoded, options = {}) {
8457
8684
  const parsed = decodeArkContract(encoded);
8458
- const handler = chunkHL7EC2Z5_cjs.contractHandlers.get(parsed.type);
8685
+ const handler = chunk43FKNLX4_cjs.contractHandlers.get(parsed.type);
8459
8686
  if (!handler) {
8460
8687
  throw new Error(`No handler registered for contract type '${parsed.type}'`);
8461
8688
  }
@@ -8469,9 +8696,9 @@ function contractFromArkContract(encoded, options = {}) {
8469
8696
  metadata: options.metadata
8470
8697
  };
8471
8698
  }
8472
- function contractFromArkContractWithAddress(encoded, serverPubKey, addressPrefix = chunk6AFUNKK7_cjs.DEFAULT_NETWORK.hrp, options = {}) {
8699
+ function contractFromArkContractWithAddress(encoded, serverPubKey, addressPrefix = chunkJZWLXNHV_cjs.DEFAULT_NETWORK.hrp, options = {}) {
8473
8700
  const parsed = decodeArkContract(encoded);
8474
- const handler = chunkHL7EC2Z5_cjs.contractHandlers.getOrThrow(parsed.type);
8701
+ const handler = chunk43FKNLX4_cjs.contractHandlers.getOrThrow(parsed.type);
8475
8702
  const params = parsed.data;
8476
8703
  const vtxoScript = handler.createScript(params);
8477
8704
  return {
@@ -8725,9 +8952,9 @@ var ContractWatcher = class {
8725
8952
  this.connectionState = "connected";
8726
8953
  this.reconnectAttempts = 0;
8727
8954
  this.listenLoop().catch((e) => {
8728
- if (chunk6AFUNKK7_cjs.isEventSourceError(e)) {
8955
+ if (chunkJZWLXNHV_cjs.isEventSourceError(e)) {
8729
8956
  console.debug("ContractWatcher subscription disconnected; reconnecting");
8730
- } else if (!chunk6AFUNKK7_cjs.isEventSourceUnavailableError(e)) {
8957
+ } else if (!chunkJZWLXNHV_cjs.isEventSourceUnavailableError(e)) {
8731
8958
  console.error(e);
8732
8959
  }
8733
8960
  this.connectionState = "disconnected";
@@ -8739,7 +8966,7 @@ var ContractWatcher = class {
8739
8966
  this.scheduleReconnect();
8740
8967
  });
8741
8968
  } catch (error) {
8742
- if (!chunk6AFUNKK7_cjs.isEventSourceUnavailableError(error)) {
8969
+ if (!chunkJZWLXNHV_cjs.isEventSourceUnavailableError(error)) {
8743
8970
  console.error("ContractWatcher connection failed:", error);
8744
8971
  }
8745
8972
  this.connectionState = "disconnected";
@@ -8765,7 +8992,7 @@ var ContractWatcher = class {
8765
8992
  * slower; what it loses is push latency.
8766
8993
  */
8767
8994
  reportEventSourceUnavailable(error) {
8768
- if (!chunk6AFUNKK7_cjs.isEventSourceUnavailableError(error)) return false;
8995
+ if (!chunkJZWLXNHV_cjs.isEventSourceUnavailableError(error)) return false;
8769
8996
  if (!this.eventSourceReported) {
8770
8997
  this.eventSourceReported = true;
8771
8998
  console.warn(
@@ -8981,14 +9208,14 @@ var ContractWatcher = class {
8981
9208
  const timestamp = Date.now();
8982
9209
  if (update.newVtxos?.length) {
8983
9210
  this.processSubscriptionVtxos(
8984
- update.newVtxos.map(chunk6AFUNKK7_cjs.normalizeVtxo),
9211
+ update.newVtxos.map(chunkJZWLXNHV_cjs.normalizeVtxo),
8985
9212
  "vtxo_received",
8986
9213
  timestamp
8987
9214
  );
8988
9215
  }
8989
9216
  if (update.spentVtxos?.length) {
8990
9217
  this.processSubscriptionVtxos(
8991
- update.spentVtxos.map(chunk6AFUNKK7_cjs.normalizeVtxo),
9218
+ update.spentVtxos.map(chunkJZWLXNHV_cjs.normalizeVtxo),
8992
9219
  "vtxo_spent",
8993
9220
  timestamp
8994
9221
  );
@@ -9083,7 +9310,7 @@ var NON_TERMINAL_INTENT_STATES = ALL_INTENT_STATES.filter(
9083
9310
  (s) => !isTerminalIntentState(s)
9084
9311
  );
9085
9312
  function isConsumed(vtxo) {
9086
- return vtxo !== void 0 && chunk6AFUNKK7_cjs.hasTerminalSpend(vtxo);
9313
+ return vtxo !== void 0 && chunkJZWLXNHV_cjs.hasTerminalSpend(vtxo);
9087
9314
  }
9088
9315
  async function classifyIntent(intent, vtxosByOutpoint, now) {
9089
9316
  if (isTerminalIntentState(intent.state)) return void 0;
@@ -9126,7 +9353,7 @@ async function reconcileIntents(deps) {
9126
9353
  let vtxosByOutpoint = /* @__PURE__ */ new Map();
9127
9354
  if (outpoints.length > 0) {
9128
9355
  try {
9129
- const { vtxos } = await chunk6AFUNKK7_cjs.getNormalizedVtxos(deps.indexerProvider, { outpoints });
9356
+ const { vtxos } = await chunkJZWLXNHV_cjs.getNormalizedVtxos(deps.indexerProvider, { outpoints });
9130
9357
  vtxosByOutpoint = new Map(vtxos.map((v) => [outpointKey(v), v]));
9131
9358
  } catch (e) {
9132
9359
  console.error("reconcileIntents: failed to fetch input VTXO state", e);
@@ -9300,7 +9527,7 @@ var ContractManager = class _ContractManager {
9300
9527
  await this.reconcileWatched();
9301
9528
  this.markSyncOnline();
9302
9529
  } catch (err) {
9303
- if (!chunk6AFUNKK7_cjs.isRetryableProviderError(err)) throw err;
9530
+ if (!chunkJZWLXNHV_cjs.isRetryableProviderError(err)) throw err;
9304
9531
  this.markSyncDegraded(err);
9305
9532
  }
9306
9533
  this.initialized = true;
@@ -9432,7 +9659,7 @@ var ContractManager = class _ContractManager {
9432
9659
  const from = Math.max(0, watermark - lookAhead.size);
9433
9660
  const to = watermark + lookAhead.size;
9434
9661
  const deps = lookAhead.candidateDeps();
9435
- const handlers = chunkHL7EC2Z5_cjs.contractHandlers.getRegisteredTypes().map((t) => chunkHL7EC2Z5_cjs.contractHandlers.get(t)).filter(hasCandidates);
9662
+ const handlers = chunk43FKNLX4_cjs.contractHandlers.getRegisteredTypes().map((t) => chunk43FKNLX4_cjs.contractHandlers.get(t)).filter(hasCandidates);
9436
9663
  const band = /* @__PURE__ */ new Map();
9437
9664
  for (let index = from; index <= to; index++) {
9438
9665
  const descriptor = lookAhead.materialize(index);
@@ -9443,7 +9670,7 @@ var ContractManager = class _ContractManager {
9443
9670
  index,
9444
9671
  params: {
9445
9672
  ...candidate,
9446
- ...chunkHL7EC2Z5_cjs.speculativeReceiveMetadata(descriptor)
9673
+ ...chunk43FKNLX4_cjs.speculativeReceiveMetadata(descriptor)
9447
9674
  }
9448
9675
  });
9449
9676
  }
@@ -9505,7 +9732,7 @@ var ContractManager = class _ContractManager {
9505
9732
  });
9506
9733
  for (const entry of pending) entry.catchUpPending = false;
9507
9734
  } catch (err) {
9508
- if (!chunk6AFUNKK7_cjs.isRetryableProviderError(err)) throw err;
9735
+ if (!chunkJZWLXNHV_cjs.isRetryableProviderError(err)) throw err;
9509
9736
  this.markSyncDegraded(err);
9510
9737
  }
9511
9738
  }
@@ -9555,7 +9782,7 @@ var ContractManager = class _ContractManager {
9555
9782
  await this.fetchContractVxosFromIndexer([contract]);
9556
9783
  this.markSyncOnline();
9557
9784
  } catch (err) {
9558
- if (!chunk6AFUNKK7_cjs.isRetryableProviderError(err)) throw err;
9785
+ if (!chunkJZWLXNHV_cjs.isRetryableProviderError(err)) throw err;
9559
9786
  this.markSyncDegraded(err);
9560
9787
  }
9561
9788
  await this.watcher.addContract(contract);
@@ -9592,7 +9819,7 @@ var ContractManager = class _ContractManager {
9592
9819
  return result;
9593
9820
  }
9594
9821
  async upsertContractRow(params) {
9595
- const handler = chunkHL7EC2Z5_cjs.contractHandlers.get(params.type);
9822
+ const handler = chunk43FKNLX4_cjs.contractHandlers.get(params.type);
9596
9823
  if (!handler) {
9597
9824
  throw new Error(`No handler registered for contract type '${params.type}'`);
9598
9825
  }
@@ -9692,7 +9919,7 @@ var ContractManager = class _ContractManager {
9692
9919
  `scanContracts: batchSize must be a positive integer (got ${String(opts.batchSize)})`
9693
9920
  );
9694
9921
  }
9695
- const registered = chunkHL7EC2Z5_cjs.contractHandlers.getRegisteredTypes().map((t) => chunkHL7EC2Z5_cjs.contractHandlers.get(t)).filter(isDiscoverable);
9922
+ const registered = chunk43FKNLX4_cjs.contractHandlers.getRegisteredTypes().map((t) => chunk43FKNLX4_cjs.contractHandlers.get(t)).filter(isDiscoverable);
9696
9923
  const discoverables = [
9697
9924
  ...registered.filter((h) => h.type === "boarding"),
9698
9925
  ...registered.filter((h) => h.type !== "boarding")
@@ -9827,7 +10054,7 @@ var ContractManager = class _ContractManager {
9827
10054
  await this.syncContracts({ contracts, pageSize });
9828
10055
  this.markSyncOnline();
9829
10056
  } catch (err) {
9830
- if (!chunk6AFUNKK7_cjs.isRetryableProviderError(err)) throw err;
10057
+ if (!chunkJZWLXNHV_cjs.isRetryableProviderError(err)) throw err;
9831
10058
  this.markSyncDegraded(err);
9832
10059
  }
9833
10060
  const vtxos = await this.getVtxosForContracts(contracts);
@@ -9848,7 +10075,7 @@ var ContractManager = class _ContractManager {
9848
10075
  }
9849
10076
  const tapscriptCache = tapscripts ?? /* @__PURE__ */ new Map();
9850
10077
  return vtxos.map(
9851
- (vtxo) => extendVirtualCoinForContract(chunk6AFUNKK7_cjs.normalizeVtxo(vtxo), byScript, tapscriptCache)
10078
+ (vtxo) => extendVirtualCoinForContract(chunkJZWLXNHV_cjs.normalizeVtxo(vtxo), byScript, tapscriptCache)
9852
10079
  );
9853
10080
  }
9854
10081
  /** @inheritdoc */
@@ -9892,14 +10119,14 @@ var ContractManager = class _ContractManager {
9892
10119
  const byScript = new Map(contracts.map((contract) => [contract.script, contract]));
9893
10120
  const asking = vtxos.filter((vtxo) => {
9894
10121
  const contract = byScript.get(vtxo.script);
9895
- return contract !== void 0 && chunkHL7EC2Z5_cjs.contractHandlers.get(contract.type)?.assertSpendableNow !== void 0;
10122
+ return contract !== void 0 && chunk43FKNLX4_cjs.contractHandlers.get(contract.type)?.assertSpendableNow !== void 0;
9896
10123
  });
9897
10124
  if (asking.length === 0) return refused;
9898
10125
  const tip = await this.currentChainTip();
9899
10126
  const walletKey = await walletPubKey?.();
9900
10127
  for (const vtxo of asking) {
9901
10128
  const contract = byScript.get(vtxo.script);
9902
- const handler = chunkHL7EC2Z5_cjs.contractHandlers.get(contract.type);
10129
+ const handler = chunk43FKNLX4_cjs.contractHandlers.get(contract.type);
9903
10130
  if (!handler?.assertSpendableNow) continue;
9904
10131
  const context = {
9905
10132
  collaborative: true,
@@ -9914,7 +10141,7 @@ var ContractManager = class _ContractManager {
9914
10141
  // the next handler to answer a CSV question would meet a
9915
10142
  // TypeError instead of a `false`. Carry the coin only when it
9916
10143
  // really is one.
9917
- vtxo: chunk6AFUNKK7_cjs.isVirtualCoin(vtxo) && "status" in vtxo ? vtxo : void 0
10144
+ vtxo: chunkJZWLXNHV_cjs.isVirtualCoin(vtxo) && "status" in vtxo ? vtxo : void 0
9918
10145
  };
9919
10146
  try {
9920
10147
  await handler.assertSpendableNow(
@@ -10070,7 +10297,7 @@ var ContractManager = class _ContractManager {
10070
10297
  const { contractScript, collaborative = true, walletPubKey, vtxo } = options;
10071
10298
  const [contract] = await this.getContracts({ script: contractScript });
10072
10299
  if (!contract) return [];
10073
- const handler = chunkHL7EC2Z5_cjs.contractHandlers.get(contract.type);
10300
+ const handler = chunk43FKNLX4_cjs.contractHandlers.get(contract.type);
10074
10301
  if (!handler) return [];
10075
10302
  const script = handler.createScript(contract.params);
10076
10303
  const tip = await this.currentChainTip();
@@ -10098,7 +10325,7 @@ var ContractManager = class _ContractManager {
10098
10325
  const { contractScript, collaborative = true, walletPubKey } = options;
10099
10326
  const [contract] = await this.getContracts({ script: contractScript });
10100
10327
  if (!contract) return [];
10101
- const handler = chunkHL7EC2Z5_cjs.contractHandlers.get(contract.type);
10328
+ const handler = chunk43FKNLX4_cjs.contractHandlers.get(contract.type);
10102
10329
  if (!handler) return [];
10103
10330
  const script = handler.createScript(contract.params);
10104
10331
  const context = {
@@ -10154,7 +10381,7 @@ var ContractManager = class _ContractManager {
10154
10381
  }
10155
10382
  async refreshOutpoints(outpoints) {
10156
10383
  if (outpoints.length === 0) return;
10157
- const { vtxos } = await chunk6AFUNKK7_cjs.getNormalizedVtxos(this.config.indexerProvider, {
10384
+ const { vtxos } = await chunkJZWLXNHV_cjs.getNormalizedVtxos(this.config.indexerProvider, {
10158
10385
  outpoints
10159
10386
  });
10160
10387
  if (vtxos.length === 0) return;
@@ -10233,7 +10460,7 @@ var ContractManager = class _ContractManager {
10233
10460
  break;
10234
10461
  }
10235
10462
  } catch (err) {
10236
- if (!chunk6AFUNKK7_cjs.isRetryableProviderError(err)) throw err;
10463
+ if (!chunkJZWLXNHV_cjs.isRetryableProviderError(err)) throw err;
10237
10464
  this.markSyncDegraded(err);
10238
10465
  }
10239
10466
  this.emitEvent(event);
@@ -10312,7 +10539,7 @@ var ContractManager = class _ContractManager {
10312
10539
  */
10313
10540
  async reconcilePendingFrontier(contracts) {
10314
10541
  const scriptToContract = new Map(contracts.map((c) => [c.script, c]));
10315
- const vtxos = await chunk6AFUNKK7_cjs.getAllNormalizedVtxos(
10542
+ const vtxos = await chunkJZWLXNHV_cjs.getAllNormalizedVtxos(
10316
10543
  this.config.indexerProvider,
10317
10544
  contracts.map((c) => c.script),
10318
10545
  { pendingOnly: true }
@@ -10395,7 +10622,7 @@ var ContractManager = class _ContractManager {
10395
10622
  }
10396
10623
  return result;
10397
10624
  }
10398
- async fetchContractVtxosBulk(contracts, pageSize = chunk6AFUNKK7_cjs.DEFAULT_PAGE_SIZE, syncWindow) {
10625
+ async fetchContractVtxosBulk(contracts, pageSize = chunkJZWLXNHV_cjs.DEFAULT_PAGE_SIZE, syncWindow) {
10399
10626
  if (contracts.length === 0) {
10400
10627
  return { vtxosByScript: /* @__PURE__ */ new Map(), promoted: /* @__PURE__ */ new Map() };
10401
10628
  }
@@ -10411,7 +10638,7 @@ var ContractManager = class _ContractManager {
10411
10638
  before: syncWindow.before
10412
10639
  }
10413
10640
  } : {};
10414
- const vtxos = await chunk6AFUNKK7_cjs.getAllNormalizedVtxos(
10641
+ const vtxos = await chunkJZWLXNHV_cjs.getAllNormalizedVtxos(
10415
10642
  this.config.indexerProvider,
10416
10643
  contracts.map((c) => c.script),
10417
10644
  { ...windowOpts, pageSize }
@@ -10556,7 +10783,7 @@ var deserializeTapLeaf = (t) => {
10556
10783
  const s = base.hex.decode(t.s);
10557
10784
  return [cb, s];
10558
10785
  };
10559
- var deserializeVtxo = (o) => chunk6AFUNKK7_cjs.normalizeVtxo({
10786
+ var deserializeVtxo = (o) => chunkJZWLXNHV_cjs.normalizeVtxo({
10560
10787
  ...o,
10561
10788
  createdAt: new Date(o.createdAt),
10562
10789
  tapTree: base.hex.decode(o.tapTree),
@@ -11379,7 +11606,7 @@ var HDDescriptorProvider = class _HDDescriptorProvider {
11379
11606
  */
11380
11607
  materializeDescriptorAt(index) {
11381
11608
  const descriptor = this.identity.descriptor;
11382
- const network = chunkHL7EC2Z5_cjs.isMainnetDescriptor(descriptor) ? descriptorsScure.networks.bitcoin : descriptorsScure.networks.testnet;
11609
+ const network = chunk43FKNLX4_cjs.isMainnetDescriptor(descriptor) ? descriptorsScure.networks.bitcoin : descriptorsScure.networks.testnet;
11383
11610
  const expansion = descriptorsScure.expand({ descriptor, network, index });
11384
11611
  const keyInfo = expansion.expansionMap?.["@0"];
11385
11612
  if (!keyInfo?.keyExpression) {
@@ -11527,7 +11754,7 @@ var WalletReceiveRotator = class _WalletReceiveRotator {
11527
11754
  const provider = await resolveDescriptorProvider(config, setup.walletRepository);
11528
11755
  if (!provider) return void 0;
11529
11756
  const allowSilentFallback = (config.walletMode ?? "auto") === "auto";
11530
- const expectedContractType = setup.offchainTapscript instanceof chunkHL7EC2Z5_cjs.DelegateVtxo.Script ? "delegate" : "default";
11757
+ const expectedContractType = setup.offchainTapscript instanceof chunk43FKNLX4_cjs.DelegateVtxo.Script ? "delegate" : "default";
11531
11758
  const factoryOpts = {
11532
11759
  walletRepository: setup.walletRepository,
11533
11760
  contractRepository: setup.contractRepository,
@@ -11728,7 +11955,7 @@ var WalletReceiveRotator = class _WalletReceiveRotator {
11728
11955
  };
11729
11956
  function deriveLeafPubkey(descriptor) {
11730
11957
  try {
11731
- return chunkHL7EC2Z5_cjs.deriveDescriptorLeafPubKey(descriptor);
11958
+ return chunk43FKNLX4_cjs.deriveDescriptorLeafPubKey(descriptor);
11732
11959
  } catch (e) {
11733
11960
  throw new NonRangeableDescriptorError(
11734
11961
  "Cannot derive leaf pubkey: descriptor is not a materialized, parsable tr(...) shape.",
@@ -11740,7 +11967,7 @@ function buildReceiveContract(current, descriptor, hrp, tagSource) {
11740
11967
  const pubKey = deriveLeafPubkey(descriptor);
11741
11968
  const tapscript = rebuildTapscript(current, pubKey);
11742
11969
  const serverPubKey = tapscript.options.serverPubKey;
11743
- const csvTimelock = chunk6AFUNKK7_cjs.timelockToSequence(tapscript.options.csvTimelock).toString();
11970
+ const csvTimelock = chunkJZWLXNHV_cjs.timelockToSequence(tapscript.options.csvTimelock).toString();
11744
11971
  const base$1 = {
11745
11972
  script: base.hex.encode(tapscript.pkScript),
11746
11973
  address: tapscript.address(hrp, serverPubKey).encode(),
@@ -11751,11 +11978,11 @@ function buildReceiveContract(current, descriptor, hrp, tagSource) {
11751
11978
  // index-0 key. Without it, spends produce unsigned PSBTs that the
11752
11979
  // server rejects with `INVALID_PSBT_INPUT (5): missing tapscript spend sig`.
11753
11980
  metadata: {
11754
- ...tagSource && { source: chunkHL7EC2Z5_cjs.WALLET_RECEIVE_SOURCE },
11981
+ ...tagSource && { source: chunk43FKNLX4_cjs.WALLET_RECEIVE_SOURCE },
11755
11982
  signingDescriptor: descriptor
11756
11983
  }
11757
11984
  };
11758
- const params = tapscript instanceof chunkHL7EC2Z5_cjs.DelegateVtxo.Script ? {
11985
+ const params = tapscript instanceof chunk43FKNLX4_cjs.DelegateVtxo.Script ? {
11759
11986
  ...base$1,
11760
11987
  type: "delegate",
11761
11988
  params: {
@@ -11776,10 +12003,10 @@ function buildReceiveContract(current, descriptor, hrp, tagSource) {
11776
12003
  return { tapscript, params };
11777
12004
  }
11778
12005
  function rebuildTapscript(current, pubKey) {
11779
- if (current instanceof chunkHL7EC2Z5_cjs.DelegateVtxo.Script) {
11780
- return new chunkHL7EC2Z5_cjs.DelegateVtxo.Script({ ...current.options, pubKey });
12006
+ if (current instanceof chunk43FKNLX4_cjs.DelegateVtxo.Script) {
12007
+ return new chunk43FKNLX4_cjs.DelegateVtxo.Script({ ...current.options, pubKey });
11781
12008
  }
11782
- return new chunkHL7EC2Z5_cjs.DefaultVtxo.Script({ ...current.options, pubKey });
12009
+ return new chunk43FKNLX4_cjs.DefaultVtxo.Script({ ...current.options, pubKey });
11783
12010
  }
11784
12011
  async function pickActiveReceive(contractRepository, serverPubKey, expectedType) {
11785
12012
  const candidates = await contractRepository.getContracts({
@@ -11788,7 +12015,7 @@ async function pickActiveReceive(contractRepository, serverPubKey, expectedType)
11788
12015
  });
11789
12016
  const serverPubKeyHex = base.hex.encode(serverPubKey);
11790
12017
  const matching = candidates.filter(
11791
- (c) => c.params.serverPubKey === serverPubKeyHex && c.metadata?.source === chunkHL7EC2Z5_cjs.WALLET_RECEIVE_SOURCE
12018
+ (c) => c.params.serverPubKey === serverPubKeyHex && c.metadata?.source === chunk43FKNLX4_cjs.WALLET_RECEIVE_SOURCE
11792
12019
  ).sort((a, b) => {
11793
12020
  if (b.createdAt !== a.createdAt) return b.createdAt - a.createdAt;
11794
12021
  return signingDescriptorIndex(b.metadata?.signingDescriptor) - signingDescriptorIndex(a.metadata?.signingDescriptor);
@@ -11844,7 +12071,7 @@ function computeOffchainBalance(vtxos, caps) {
11844
12071
  }
11845
12072
  };
11846
12073
  for (const vtxo of vtxos) {
11847
- if (chunk6AFUNKK7_cjs.hasTerminalSpend(vtxo)) continue;
12074
+ if (chunkJZWLXNHV_cjs.hasTerminalSpend(vtxo)) continue;
11848
12075
  addAssets(owned, vtxo);
11849
12076
  if (vtxo.isUnrolled) {
11850
12077
  unrolled += vtxo.value;
@@ -11854,11 +12081,11 @@ function computeOffchainBalance(vtxos, caps) {
11854
12081
  pendingRecovery += vtxo.value;
11855
12082
  continue;
11856
12083
  }
11857
- if (chunk6AFUNKK7_cjs.canRecoverOnchain(vtxo, now)) {
12084
+ if (chunkJZWLXNHV_cjs.canRecoverOnchain(vtxo, now)) {
11858
12085
  recoverable += vtxo.value;
11859
12086
  continue;
11860
12087
  }
11861
- if (!chunk6AFUNKK7_cjs.canSpendOffchain(vtxo, now)) continue;
12088
+ if (!chunkJZWLXNHV_cjs.canSpendOffchain(vtxo, now)) continue;
11862
12089
  if (vtxo.isPreconfirmed) {
11863
12090
  preconfirmed += vtxo.value;
11864
12091
  } else {
@@ -12028,12 +12255,12 @@ var InputSignerRouter = class {
12028
12255
  };
12029
12256
 
12030
12257
  // src/wallet/wallet.ts
12031
- var getArkadeServerUrl = ({ arkServerUrl }) => arkServerUrl || chunk6AFUNKK7_cjs.DEFAULT_ARKADE_SERVER_URL;
12258
+ var getArkadeServerUrl = ({ arkServerUrl }) => arkServerUrl || chunkJZWLXNHV_cjs.DEFAULT_ARKADE_SERVER_URL;
12032
12259
  function intentProofJobs(coins) {
12033
12260
  if (coins.length === 0) return [];
12034
12261
  const coinJobs = coins.map((coin, i) => ({
12035
12262
  index: i + 1,
12036
- lookupScript: chunk6AFUNKK7_cjs.VtxoScript.decode(coin.tapTree).pkScript
12263
+ lookupScript: chunkJZWLXNHV_cjs.VtxoScript.decode(coin.tapTree).pkScript
12037
12264
  }));
12038
12265
  return [{ index: 0, lookupScript: coinJobs[0].lookupScript }, ...coinJobs];
12039
12266
  }
@@ -12065,7 +12292,7 @@ function dedupeTimelocks(timelocks) {
12065
12292
  const seen = /* @__PURE__ */ new Set();
12066
12293
  const deduped = [];
12067
12294
  for (const timelock of timelocks) {
12068
- const sequence = chunk6AFUNKK7_cjs.timelockToSequence(timelock).toString();
12295
+ const sequence = chunkJZWLXNHV_cjs.timelockToSequence(timelock).toString();
12069
12296
  if (seen.has(sequence)) continue;
12070
12297
  seen.add(sequence);
12071
12298
  deduped.push(timelock);
@@ -12082,7 +12309,7 @@ async function resolveBoardingBootTapscript(contractRepository, serverPubKey, ba
12082
12309
  state: "active"
12083
12310
  });
12084
12311
  const newest = candidates.filter(
12085
- (c) => c.params.serverPubKey === serverPubKeyHex && c.metadata?.source === chunkHL7EC2Z5_cjs.WALLET_RECEIVE_SOURCE
12312
+ (c) => c.params.serverPubKey === serverPubKeyHex && c.metadata?.source === chunk43FKNLX4_cjs.WALLET_RECEIVE_SOURCE
12086
12313
  ).sort((a, b) => {
12087
12314
  if (b.createdAt !== a.createdAt) return b.createdAt - a.createdAt;
12088
12315
  return signingDescriptorIndex(b.metadata?.signingDescriptor) - signingDescriptorIndex(a.metadata?.signingDescriptor);
@@ -12090,7 +12317,7 @@ async function resolveBoardingBootTapscript(contractRepository, serverPubKey, ba
12090
12317
  if (!newest?.params.pubKey) return baseline;
12091
12318
  try {
12092
12319
  const pubKey = base.hex.decode(newest.params.pubKey);
12093
- return new chunkHL7EC2Z5_cjs.DefaultVtxo.Script({ ...baseline.options, pubKey });
12320
+ return new chunk43FKNLX4_cjs.DefaultVtxo.Script({ ...baseline.options, pubKey });
12094
12321
  } catch (e) {
12095
12322
  console.warn("Skipping malformed boarding contract at boot", newest.script, e);
12096
12323
  return baseline;
@@ -12109,10 +12336,10 @@ function filterSnapshotVtxos(snapshot, filter, pendingSpendOutpoints) {
12109
12336
  if (vtxo.isUnrolled) {
12110
12337
  return !!f.withUnrolled;
12111
12338
  }
12112
- if (chunk6AFUNKK7_cjs.hasTerminalSpend(vtxo)) {
12339
+ if (chunkJZWLXNHV_cjs.hasTerminalSpend(vtxo)) {
12113
12340
  return false;
12114
12341
  }
12115
- if (!f.withRecoverable && chunk6AFUNKK7_cjs.canRecoverOnchain(vtxo, now)) {
12342
+ if (!f.withRecoverable && chunkJZWLXNHV_cjs.canRecoverOnchain(vtxo, now)) {
12116
12343
  return false;
12117
12344
  }
12118
12345
  return true;
@@ -12463,7 +12690,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
12463
12690
  async getArkadeReader() {
12464
12691
  const indexer = this.indexerProvider;
12465
12692
  return {
12466
- getVtxos: (opts) => chunk6AFUNKK7_cjs.getNormalizedVtxos(indexer, opts),
12693
+ getVtxos: (opts) => chunkJZWLXNHV_cjs.getNormalizedVtxos(indexer, opts),
12467
12694
  getVirtualTxs: (txids, opts) => indexer.getVirtualTxs(txids, opts)
12468
12695
  };
12469
12696
  }
@@ -12519,7 +12746,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
12519
12746
  */
12520
12747
  static async setupWalletConfig(config, pubKey) {
12521
12748
  const arkadeServerUrl = getArkadeServerUrl(config);
12522
- const arkProvider = config.arkProvider || new chunk6AFUNKK7_cjs.RestArkProvider(arkadeServerUrl);
12749
+ const arkProvider = config.arkProvider || new chunkJZWLXNHV_cjs.RestArkProvider(arkadeServerUrl);
12523
12750
  let indexerProvider = config.indexerProvider;
12524
12751
  if (!indexerProvider) {
12525
12752
  let indexerUrl = config.indexerUrl;
@@ -12536,7 +12763,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
12536
12763
  indexerUrl = arkadeServerUrl;
12537
12764
  }
12538
12765
  }
12539
- indexerProvider = new chunkCZ32XADN_cjs.RestIndexerProvider(indexerUrl);
12766
+ indexerProvider = new chunkNVZJSKZS_cjs.RestIndexerProvider(indexerUrl);
12540
12767
  }
12541
12768
  const walletRepository = config.storage?.walletRepository ?? new IndexedDBWalletRepository();
12542
12769
  const contractRepository = config.storage?.contractRepository ?? new IndexedDBContractRepository();
@@ -12545,7 +12772,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
12545
12772
  source: serverInfoSource,
12546
12773
  lastOnlineAt: serverInfoLastOnlineAt
12547
12774
  } = await resolveArkInfo(arkProvider, walletRepository);
12548
- const network = chunk6AFUNKK7_cjs.networkFromArkadeInfo(info);
12775
+ const network = chunkJZWLXNHV_cjs.networkFromArkadeInfo(info);
12549
12776
  if ("descriptor" in config.identity) {
12550
12777
  const descriptor = config.identity.descriptor;
12551
12778
  const identityIsMainnet = !descriptor.includes("tpub");
@@ -12585,18 +12812,18 @@ var ReadonlyWallet = class _ReadonlyWallet {
12585
12812
  value: info.boardingExitDelay,
12586
12813
  type: info.boardingExitDelay < 512n ? "blocks" : "seconds"
12587
12814
  };
12588
- const serverPubKey = chunkHL7EC2Z5_cjs.toXOnly(base.hex.decode(info.signerPubkey), "ark signer key");
12589
- const delegatePubKey = config.delegateProvider ? await config.delegateProvider.getDelegateInfo().then((info2) => chunkHL7EC2Z5_cjs.toXOnly(base.hex.decode(info2.pubkey), "delegate key")).catch(() => void 0) : config.delegatorProvider ? await config.delegatorProvider.getDelegateInfo().then((info2) => chunkHL7EC2Z5_cjs.toXOnly(base.hex.decode(info2.pubkey), "delegate key")).catch(() => void 0) : void 0;
12815
+ const serverPubKey = chunk43FKNLX4_cjs.toXOnly(base.hex.decode(info.signerPubkey), "ark signer key");
12816
+ const delegatePubKey = config.delegateProvider ? await config.delegateProvider.getDelegateInfo().then((info2) => chunk43FKNLX4_cjs.toXOnly(base.hex.decode(info2.pubkey), "delegate key")).catch(() => void 0) : config.delegatorProvider ? await config.delegatorProvider.getDelegateInfo().then((info2) => chunk43FKNLX4_cjs.toXOnly(base.hex.decode(info2.pubkey), "delegate key")).catch(() => void 0) : void 0;
12590
12817
  const offchainOptions = {
12591
12818
  pubKey,
12592
12819
  serverPubKey,
12593
12820
  csvTimelock: exitTimelock
12594
12821
  };
12595
- const offchainTapscript = !delegatePubKey ? new chunkHL7EC2Z5_cjs.DefaultVtxo.Script(offchainOptions) : new chunkHL7EC2Z5_cjs.DelegateVtxo.Script({ ...offchainOptions, delegatePubKey });
12596
- const boardingTapscript = chunkHL7EC2Z5_cjs.BoardingContractHandler.createScript({
12822
+ const offchainTapscript = !delegatePubKey ? new chunk43FKNLX4_cjs.DefaultVtxo.Script(offchainOptions) : new chunk43FKNLX4_cjs.DelegateVtxo.Script({ ...offchainOptions, delegatePubKey });
12823
+ const boardingTapscript = chunk43FKNLX4_cjs.BoardingContractHandler.createScript({
12597
12824
  pubKey: base.hex.encode(pubKey),
12598
12825
  serverPubKey: base.hex.encode(serverPubKey),
12599
- csvTimelock: chunk6AFUNKK7_cjs.timelockToSequence(boardingTimelock).toString()
12826
+ csvTimelock: chunkJZWLXNHV_cjs.timelockToSequence(boardingTimelock).toString()
12600
12827
  });
12601
12828
  return {
12602
12829
  arkProvider,
@@ -12763,7 +12990,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
12763
12990
  if (!filter?.withUnrolled) {
12764
12991
  logExcludedVtxos(
12765
12992
  "getSpendableVtxos",
12766
- snapshot.flatMap((contract) => contract.vtxos).filter((vtxo) => vtxo.isUnrolled && !chunk6AFUNKK7_cjs.hasTerminalSpend(vtxo)),
12993
+ snapshot.flatMap((contract) => contract.vtxos).filter((vtxo) => vtxo.isUnrolled && !chunkJZWLXNHV_cjs.hasTerminalSpend(vtxo)),
12767
12994
  [() => UNROLLED_REASON]
12768
12995
  );
12769
12996
  }
@@ -12906,7 +13133,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
12906
13133
  const response = await contractManager.getContractsWithVtxos();
12907
13134
  const allVtxos = response.flatMap((_) => _.vtxos);
12908
13135
  const { boardingTxs, commitmentsToIgnore } = await this.getBoardingTxs();
12909
- const resolveTxCreatedAt = (txids) => chunk6AFUNKK7_cjs.fetchVtxoCreatedAtByTxid(this.indexerProvider, txids);
13136
+ const resolveTxCreatedAt = (txids) => chunkJZWLXNHV_cjs.fetchVtxoCreatedAtByTxid(this.indexerProvider, txids);
12910
13137
  return buildTransactionHistory(
12911
13138
  allVtxos,
12912
13139
  boardingTxs,
@@ -13000,7 +13227,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
13000
13227
  },
13001
13228
  isUnrolled: true,
13002
13229
  ...boardingFacts,
13003
- virtualStatus: chunk6AFUNKK7_cjs.toVirtualStatus(boardingFacts),
13230
+ virtualStatus: chunkJZWLXNHV_cjs.toVirtualStatus(boardingFacts),
13004
13231
  spentBy: "",
13005
13232
  createdAt: tx.status.confirmed ? new Date(tx.status.block_time * 1e3) : /* @__PURE__ */ new Date(0),
13006
13233
  script: scriptHex
@@ -13056,9 +13283,9 @@ var ReadonlyWallet = class _ReadonlyWallet {
13056
13283
  async getBoardingTapscripts(allowedSigners) {
13057
13284
  const byScript = /* @__PURE__ */ new Map();
13058
13285
  const add = (s) => byScript.set(base.hex.encode(s.pkScript), s);
13059
- const boardingCsv = this.boardingTapscript.options.csvTimelock ?? chunkHL7EC2Z5_cjs.DefaultVtxo.Script.DEFAULT_TIMELOCK;
13286
+ const boardingCsv = this.boardingTapscript.options.csvTimelock ?? chunk43FKNLX4_cjs.DefaultVtxo.Script.DEFAULT_TIMELOCK;
13060
13287
  add(
13061
- new chunkHL7EC2Z5_cjs.DefaultVtxo.Script({
13288
+ new chunk43FKNLX4_cjs.DefaultVtxo.Script({
13062
13289
  pubKey: await this.identity.xOnlyPublicKey(),
13063
13290
  serverPubKey: this.boardingTapscript.options.serverPubKey,
13064
13291
  csvTimelock: boardingCsv
@@ -13073,7 +13300,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
13073
13300
  for (const c of boardingContracts) {
13074
13301
  if (!allowed.has(toXOnlySignerHex(c.params.serverPubKey))) continue;
13075
13302
  try {
13076
- add(chunkHL7EC2Z5_cjs.BoardingContractHandler.createScript(c.params));
13303
+ add(chunk43FKNLX4_cjs.BoardingContractHandler.createScript(c.params));
13077
13304
  } catch (e) {
13078
13305
  console.warn("Skipping malformed boarding contract", c.script, e);
13079
13306
  }
@@ -13111,7 +13338,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
13111
13338
  // Per-row CSV delay decoded from THIS tapscript's exit leaf —
13112
13339
  // not the wallet's current boarding timelock, which a signer
13113
13340
  // rotation may have changed.
13114
- csvTimelock: chunk6AFUNKK7_cjs.CSVMultisigTapscript.decode(base.hex.decode(tapscript.exitScript)).params.timelock,
13341
+ csvTimelock: chunkJZWLXNHV_cjs.CSVMultisigTapscript.decode(base.hex.decode(tapscript.exitScript)).params.timelock,
13115
13342
  coins: utxos
13116
13343
  });
13117
13344
  }
@@ -13244,7 +13471,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
13244
13471
  /** Fetch Arkade transaction ids that are still pending final settlement. */
13245
13472
  async fetchPendingTxs() {
13246
13473
  const scripts = await this.getWalletScripts();
13247
- const vtxos = await chunk6AFUNKK7_cjs.getAllNormalizedVtxos(this.indexerProvider, scripts);
13474
+ const vtxos = await chunkJZWLXNHV_cjs.getAllNormalizedVtxos(this.indexerProvider, scripts);
13248
13475
  return vtxos.filter(
13249
13476
  (vtxo) => (vtxo.isSpent || vtxo.isPreconfirmed && !vtxo.isSwept) && vtxo.arkTxId !== void 0
13250
13477
  ).map((_) => _.arkTxId);
@@ -13275,7 +13502,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
13275
13502
  });
13276
13503
  for (const contract of contracts) {
13277
13504
  if (map.has(contract.script)) continue;
13278
- const handler = chunkHL7EC2Z5_cjs.contractHandlers.get(contract.type);
13505
+ const handler = chunk43FKNLX4_cjs.contractHandlers.get(contract.type);
13279
13506
  if (handler) {
13280
13507
  const script = handler.createScript(contract.params);
13281
13508
  map.set(contract.script, script);
@@ -13387,7 +13614,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
13387
13614
  }
13388
13615
  });
13389
13616
  const baselinePubkey = await this.identity.xOnlyPublicKey();
13390
- const delegatePubKey = this.offchainTapscript instanceof chunkHL7EC2Z5_cjs.DelegateVtxo.Script ? this.offchainTapscript.options.delegatePubKey : void 0;
13617
+ const delegatePubKey = this.offchainTapscript instanceof chunk43FKNLX4_cjs.DelegateVtxo.Script ? this.offchainTapscript.options.delegatePubKey : void 0;
13391
13618
  const baselineSigners = [
13392
13619
  this.offchainTapscript.options.serverPubKey,
13393
13620
  ...[...this._deprecatedSigners.keys()].map((h) => base.hex.decode(h))
@@ -13395,8 +13622,8 @@ var ReadonlyWallet = class _ReadonlyWallet {
13395
13622
  const seenBaselineScripts = /* @__PURE__ */ new Set();
13396
13623
  for (const serverPubKey of baselineSigners) {
13397
13624
  for (const csvTimelock of this.walletContractTimelocks) {
13398
- const csvTimelockStr = chunk6AFUNKK7_cjs.timelockToSequence(csvTimelock).toString();
13399
- const defaultScript = new chunkHL7EC2Z5_cjs.DefaultVtxo.Script({
13625
+ const csvTimelockStr = chunkJZWLXNHV_cjs.timelockToSequence(csvTimelock).toString();
13626
+ const defaultScript = new chunk43FKNLX4_cjs.DefaultVtxo.Script({
13400
13627
  pubKey: baselinePubkey,
13401
13628
  serverPubKey,
13402
13629
  csvTimelock
@@ -13417,7 +13644,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
13417
13644
  });
13418
13645
  }
13419
13646
  if (delegatePubKey) {
13420
- const delegateScript = new chunkHL7EC2Z5_cjs.DelegateVtxo.Script({
13647
+ const delegateScript = new chunk43FKNLX4_cjs.DelegateVtxo.Script({
13421
13648
  pubKey: baselinePubkey,
13422
13649
  serverPubKey,
13423
13650
  delegatePubKey,
@@ -13441,9 +13668,9 @@ var ReadonlyWallet = class _ReadonlyWallet {
13441
13668
  }
13442
13669
  }
13443
13670
  }
13444
- const boardingCsvTimelock = this.boardingTapscript.options.csvTimelock ?? chunkHL7EC2Z5_cjs.DefaultVtxo.Script.DEFAULT_TIMELOCK;
13671
+ const boardingCsvTimelock = this.boardingTapscript.options.csvTimelock ?? chunk43FKNLX4_cjs.DefaultVtxo.Script.DEFAULT_TIMELOCK;
13445
13672
  for (const serverPubKey of baselineSigners) {
13446
- const baselineBoarding = new chunkHL7EC2Z5_cjs.DefaultVtxo.Script({
13673
+ const baselineBoarding = new chunk43FKNLX4_cjs.DefaultVtxo.Script({
13447
13674
  pubKey: baselinePubkey,
13448
13675
  serverPubKey,
13449
13676
  csvTimelock: boardingCsvTimelock
@@ -13456,7 +13683,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
13456
13683
  params: {
13457
13684
  pubKey: base.hex.encode(baselineBoarding.options.pubKey),
13458
13685
  serverPubKey: base.hex.encode(serverPubKey),
13459
- csvTimelock: chunk6AFUNKK7_cjs.timelockToSequence(boardingCsvTimelock).toString()
13686
+ csvTimelock: chunkJZWLXNHV_cjs.timelockToSequence(boardingCsvTimelock).toString()
13460
13687
  },
13461
13688
  script: boardingScriptHex,
13462
13689
  address: baselineBoarding.address(this.network.hrp, serverPubKey).encode(),
@@ -13655,7 +13882,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
13655
13882
  serverPubKey: this.offchainTapscript.options.serverPubKey,
13656
13883
  deprecatedSignerPubKeys: [...this._deprecatedSigners.keys()].map((h) => base.hex.decode(h)),
13657
13884
  csvTimelocks: this.walletContractTimelocks,
13658
- delegatePubKey: this.offchainTapscript instanceof chunkHL7EC2Z5_cjs.DelegateVtxo.Script ? this.offchainTapscript.options.delegatePubKey : void 0
13885
+ delegatePubKey: this.offchainTapscript instanceof chunk43FKNLX4_cjs.DelegateVtxo.Script ? this.offchainTapscript.options.delegatePubKey : void 0
13659
13886
  };
13660
13887
  }
13661
13888
  _signerRouter;
@@ -13900,7 +14127,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
13900
14127
  const [row] = await manager.getContracts({ script: base.hex.encode(display.pkScript) });
13901
14128
  const persisted = row?.metadata?.signingDescriptor;
13902
14129
  if (typeof persisted === "string") return persisted;
13903
- return chunkHL7EC2Z5_cjs.identityDescriptor(this.identity);
14130
+ return chunk43FKNLX4_cjs.identityDescriptor(this.identity);
13904
14131
  }
13905
14132
  /**
13906
14133
  * Build, persist and shape one address of `type` owned by `descriptor` —
@@ -13916,7 +14143,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
13916
14143
  async mintAddress(manager, type, descriptor, tagSource, allocated) {
13917
14144
  if (type === "boarding") {
13918
14145
  const built2 = this.buildBoardingContract(
13919
- chunkHL7EC2Z5_cjs.deriveDescriptorLeafPubKey(descriptor),
14146
+ chunk43FKNLX4_cjs.deriveDescriptorLeafPubKey(descriptor),
13920
14147
  descriptor,
13921
14148
  tagSource
13922
14149
  );
@@ -13961,11 +14188,11 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
13961
14188
  * {@link buildReceiveContract}.
13962
14189
  */
13963
14190
  buildBoardingContract(pubKey, descriptor, tagSource) {
13964
- const tapscript = new chunkHL7EC2Z5_cjs.DefaultVtxo.Script({
14191
+ const tapscript = new chunk43FKNLX4_cjs.DefaultVtxo.Script({
13965
14192
  ...this._boardingTapscript.options,
13966
14193
  pubKey
13967
14194
  });
13968
- const csvTimelock = tapscript.options.csvTimelock ?? chunkHL7EC2Z5_cjs.DefaultVtxo.Script.DEFAULT_TIMELOCK;
14195
+ const csvTimelock = tapscript.options.csvTimelock ?? chunk43FKNLX4_cjs.DefaultVtxo.Script.DEFAULT_TIMELOCK;
13969
14196
  return {
13970
14197
  tapscript,
13971
14198
  params: {
@@ -13973,13 +14200,13 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
13973
14200
  params: {
13974
14201
  pubKey: base.hex.encode(pubKey),
13975
14202
  serverPubKey: base.hex.encode(tapscript.options.serverPubKey),
13976
- csvTimelock: chunk6AFUNKK7_cjs.timelockToSequence(csvTimelock).toString()
14203
+ csvTimelock: chunkJZWLXNHV_cjs.timelockToSequence(csvTimelock).toString()
13977
14204
  },
13978
14205
  script: base.hex.encode(tapscript.pkScript),
13979
14206
  address: tapscript.address(this.network.hrp, this.arkServerPublicKey).encode(),
13980
14207
  state: "active",
13981
14208
  metadata: {
13982
- ...tagSource && { source: chunkHL7EC2Z5_cjs.WALLET_RECEIVE_SOURCE },
14209
+ ...tagSource && { source: chunk43FKNLX4_cjs.WALLET_RECEIVE_SOURCE },
13983
14210
  signingDescriptor: descriptor
13984
14211
  }
13985
14212
  }
@@ -14008,7 +14235,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
14008
14235
  if (this._descriptorProvider instanceof HDDescriptorProvider) {
14009
14236
  return (await this.getContractManager()).getNextSigningDescriptor();
14010
14237
  }
14011
- return chunkHL7EC2Z5_cjs.identityDescriptor(this.identity);
14238
+ return chunk43FKNLX4_cjs.identityDescriptor(this.identity);
14012
14239
  }
14013
14240
  /**
14014
14241
  * @see HDAllocationCapable.advanceSigningDescriptorWatermark
@@ -14104,7 +14331,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
14104
14331
  * the stable public API.
14105
14332
  */
14106
14333
  async rotateServerSigner(newServerPubKey, checkpointTapscript) {
14107
- const xonly = chunkHL7EC2Z5_cjs.toXOnly(newServerPubKey, "ark signer key");
14334
+ const xonly = chunk43FKNLX4_cjs.toXOnly(newServerPubKey, "ark signer key");
14108
14335
  const newServerUnrollScript = assertValidServerUnrollScript(
14109
14336
  checkpointTapscript,
14110
14337
  resolveCheckpointExitDelayPolicy(this.network, this.checkpointExitDelayPolicy)
@@ -14133,21 +14360,21 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
14133
14360
  const [currentBoardingRow] = await manager.getContracts({
14134
14361
  script: currentBoardingScript
14135
14362
  });
14136
- const newOffchain = this.offchainTapscript instanceof chunkHL7EC2Z5_cjs.DelegateVtxo.Script ? new chunkHL7EC2Z5_cjs.DelegateVtxo.Script({
14363
+ const newOffchain = this.offchainTapscript instanceof chunk43FKNLX4_cjs.DelegateVtxo.Script ? new chunk43FKNLX4_cjs.DelegateVtxo.Script({
14137
14364
  ...this.offchainTapscript.options,
14138
14365
  serverPubKey: xonly
14139
- }) : new chunkHL7EC2Z5_cjs.DefaultVtxo.Script({
14366
+ }) : new chunk43FKNLX4_cjs.DefaultVtxo.Script({
14140
14367
  ...this.offchainTapscript.options,
14141
14368
  serverPubKey: xonly
14142
14369
  });
14143
- const newBoarding = new chunkHL7EC2Z5_cjs.DefaultVtxo.Script({
14370
+ const newBoarding = new chunk43FKNLX4_cjs.DefaultVtxo.Script({
14144
14371
  ...this._boardingTapscript.options,
14145
14372
  serverPubKey: xonly
14146
14373
  });
14147
- const offchainCsv = chunk6AFUNKK7_cjs.timelockToSequence(newOffchain.options.csvTimelock).toString();
14374
+ const offchainCsv = chunkJZWLXNHV_cjs.timelockToSequence(newOffchain.options.csvTimelock).toString();
14148
14375
  const newOffchainScript = base.hex.encode(newOffchain.pkScript);
14149
14376
  const newOffchainAddress = newOffchain.address(this.network.hrp, xonly).encode();
14150
- if (newOffchain instanceof chunkHL7EC2Z5_cjs.DelegateVtxo.Script) {
14377
+ if (newOffchain instanceof chunk43FKNLX4_cjs.DelegateVtxo.Script) {
14151
14378
  await manager.createContract({
14152
14379
  type: "delegate",
14153
14380
  params: {
@@ -14175,13 +14402,13 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
14175
14402
  metadata: currentOffchainRow?.metadata
14176
14403
  });
14177
14404
  }
14178
- const boardingCsv = newBoarding.options.csvTimelock ?? chunkHL7EC2Z5_cjs.DefaultVtxo.Script.DEFAULT_TIMELOCK;
14405
+ const boardingCsv = newBoarding.options.csvTimelock ?? chunk43FKNLX4_cjs.DefaultVtxo.Script.DEFAULT_TIMELOCK;
14179
14406
  await manager.createContract({
14180
14407
  type: "boarding",
14181
14408
  params: {
14182
14409
  pubKey: base.hex.encode(newBoarding.options.pubKey),
14183
14410
  serverPubKey: base.hex.encode(xonly),
14184
- csvTimelock: chunk6AFUNKK7_cjs.timelockToSequence(boardingCsv).toString()
14411
+ csvTimelock: chunkJZWLXNHV_cjs.timelockToSequence(boardingCsv).toString()
14185
14412
  },
14186
14413
  script: base.hex.encode(newBoarding.pkScript),
14187
14414
  address: newBoarding.address(this.network.hrp, xonly).encode(),
@@ -14214,14 +14441,14 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
14214
14441
  _restoreInFlight;
14215
14442
  _addPendingSpends(inputs) {
14216
14443
  for (const input of inputs) {
14217
- if (chunk6AFUNKK7_cjs.isVirtualCoin(input)) {
14444
+ if (chunkJZWLXNHV_cjs.isVirtualCoin(input)) {
14218
14445
  this._pendingSpendOutpoints.add(`${input.txid}:${input.vout}`);
14219
14446
  }
14220
14447
  }
14221
14448
  }
14222
14449
  _removePendingSpends(inputs) {
14223
14450
  for (const input of inputs) {
14224
- if (chunk6AFUNKK7_cjs.isVirtualCoin(input)) {
14451
+ if (chunkJZWLXNHV_cjs.isVirtualCoin(input)) {
14225
14452
  this._pendingSpendOutpoints.delete(`${input.txid}:${input.vout}`);
14226
14453
  }
14227
14454
  }
@@ -14279,13 +14506,13 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
14279
14506
  const manager = await this.getContractManager();
14280
14507
  const provider = this._descriptorProvider;
14281
14508
  const hd = provider instanceof HDDescriptorProvider;
14282
- const staticDescriptor = hd ? void 0 : await chunkHL7EC2Z5_cjs.identityDescriptor(this.identity);
14509
+ const staticDescriptor = hd ? void 0 : await chunk43FKNLX4_cjs.identityDescriptor(this.identity);
14283
14510
  const materialize = (index) => hd ? provider.materializeDescriptorAt(index) : staticDescriptor;
14284
- const delegatePubKey = this.offchainTapscript instanceof chunkHL7EC2Z5_cjs.DelegateVtxo.Script ? this.offchainTapscript.options.delegatePubKey : void 0;
14511
+ const delegatePubKey = this.offchainTapscript instanceof chunk43FKNLX4_cjs.DelegateVtxo.Script ? this.offchainTapscript.options.delegatePubKey : void 0;
14285
14512
  const arkInfo = await this.arkProvider.getInfo();
14286
- const currentSignerPubKey = chunkHL7EC2Z5_cjs.toXOnly(base.hex.decode(arkInfo.signerPubkey), "ark signer key");
14513
+ const currentSignerPubKey = chunk43FKNLX4_cjs.toXOnly(base.hex.decode(arkInfo.signerPubkey), "ark signer key");
14287
14514
  const deprecatedSignerPubKeys = arkInfo.deprecatedSigners.map(
14288
- (s) => chunkHL7EC2Z5_cjs.toXOnly(base.hex.decode(s.pubkey), "deprecated signer key")
14515
+ (s) => chunk43FKNLX4_cjs.toXOnly(base.hex.decode(s.pubkey), "deprecated signer key")
14289
14516
  );
14290
14517
  const deps = {
14291
14518
  indexerProvider: this.indexerProvider,
@@ -14300,7 +14527,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
14300
14527
  csvTimelocks: this.walletContractTimelocks,
14301
14528
  // Boarding-exit CSV so the boarding handler can build its
14302
14529
  // candidate script (distinct from the unilateral-exit matrix).
14303
- boardingTimelock: this.boardingTapscript.options.csvTimelock ?? chunkHL7EC2Z5_cjs.DefaultVtxo.Script.DEFAULT_TIMELOCK,
14530
+ boardingTimelock: this.boardingTapscript.options.csvTimelock ?? chunk43FKNLX4_cjs.DefaultVtxo.Script.DEFAULT_TIMELOCK,
14304
14531
  delegatePubKey
14305
14532
  };
14306
14533
  const result = await manager.scanContracts({
@@ -14429,7 +14656,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
14429
14656
  throw new Error("Invalid configured public key");
14430
14657
  }
14431
14658
  const setup = await ReadonlyWallet.setupWalletConfig(config, pubkey);
14432
- const forfeitPubkey = chunkHL7EC2Z5_cjs.toXOnly(base.hex.decode(setup.info.forfeitPubkey), "forfeit key");
14659
+ const forfeitPubkey = chunk43FKNLX4_cjs.toXOnly(base.hex.decode(setup.info.forfeitPubkey), "forfeit key");
14433
14660
  const forfeitAddress = btcSigner.Address(setup.network).decode(setup.info.forfeitAddress);
14434
14661
  const forfeitOutputScript = btcSigner.OutScript.encode(forfeitAddress);
14435
14662
  const checkpointExitDelayOverrides = {
@@ -14579,7 +14806,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
14579
14806
  inputs: params.selectedVtxos,
14580
14807
  changeAmount: BigInt(changeAmount)
14581
14808
  };
14582
- const outputAddress = chunk6AFUNKK7_cjs.ArkAddress.decode(params.address);
14809
+ const outputAddress = chunkJZWLXNHV_cjs.ArkAddress.decode(params.address);
14583
14810
  assertRecipientArkadeAddress(
14584
14811
  params.address,
14585
14812
  outputAddress,
@@ -14645,13 +14872,13 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
14645
14872
  void this.logUngatedInputs("settle({ inputs })", params.inputs);
14646
14873
  }
14647
14874
  const offchainAddress = await this.getAddress();
14648
- const offchainPkScript = chunk6AFUNKK7_cjs.ArkAddress.decode(offchainAddress).pkScript;
14875
+ const offchainPkScript = chunkJZWLXNHV_cjs.ArkAddress.decode(offchainAddress).pkScript;
14649
14876
  const offchainOutputScript = base.hex.encode(offchainPkScript);
14650
14877
  if (!params) {
14651
14878
  const { fees, vtxoMaxAmount } = await this.arkProvider.getInfo();
14652
14879
  const estimator = new Estimator(fees.intentFee);
14653
14880
  let amount = 0;
14654
- const exitScript = chunk6AFUNKK7_cjs.CSVMultisigTapscript.decode(
14881
+ const exitScript = chunkJZWLXNHV_cjs.CSVMultisigTapscript.decode(
14655
14882
  base.hex.decode(this.boardingTapscript.exitScript)
14656
14883
  );
14657
14884
  const boardingTimelock = exitScript.params.timelock;
@@ -14680,7 +14907,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
14680
14907
  if (filteredVtxos.length >= MAX_VTXOS_PER_SETTLEMENT) {
14681
14908
  break;
14682
14909
  }
14683
- const inputFee = estimator.evalOffchainInput(chunk6AFUNKK7_cjs.toOffchainInputFeeParams(vtxo));
14910
+ const inputFee = estimator.evalOffchainInput(chunkJZWLXNHV_cjs.toOffchainInputFeeParams(vtxo));
14684
14911
  if (inputFee.satoshis >= vtxo.value) {
14685
14912
  continue;
14686
14913
  }
@@ -14727,7 +14954,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
14727
14954
  let script;
14728
14955
  let arkAddress;
14729
14956
  try {
14730
- arkAddress = chunk6AFUNKK7_cjs.ArkAddress.decode(output.address);
14957
+ arkAddress = chunkJZWLXNHV_cjs.ArkAddress.decode(output.address);
14731
14958
  } catch {
14732
14959
  arkAddress = void 0;
14733
14960
  }
@@ -14817,7 +15044,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
14817
15044
  const abortController = new AbortController();
14818
15045
  let stream;
14819
15046
  let committedTxid;
14820
- const settleInputVtxos = params.inputs.filter(chunk6AFUNKK7_cjs.isVirtualCoin);
15047
+ const settleInputVtxos = params.inputs.filter(chunkJZWLXNHV_cjs.isVirtualCoin);
14821
15048
  const contractManager = await this.getContractManager();
14822
15049
  await contractManager.assertAnnotatable(settleInputVtxos);
14823
15050
  await contractManager.assertSpendableNow?.(
@@ -14929,7 +15156,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
14929
15156
  async maybeRotateBoardingAfterBoard(inputs) {
14930
15157
  if (!this._descriptorProvider) return;
14931
15158
  const consumedBoarding = inputs.some(
14932
- (input) => typeof input !== "string" && !chunk6AFUNKK7_cjs.isVirtualCoin(input)
15159
+ (input) => typeof input !== "string" && !chunkJZWLXNHV_cjs.isVirtualCoin(input)
14933
15160
  );
14934
15161
  if (!consumedBoarding) return;
14935
15162
  try {
@@ -14953,7 +15180,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
14953
15180
  let connectorIndex = 0;
14954
15181
  const connectorsLeaves = connectorsGraph?.leaves() || [];
14955
15182
  for (const input of inputs) {
14956
- if (!chunk6AFUNKK7_cjs.isVirtualCoin(input)) {
15183
+ if (!chunkJZWLXNHV_cjs.isVirtualCoin(input)) {
14957
15184
  for (let i = 0; i < settlementPsbt.inputsLength; i++) {
14958
15185
  const settlementInput = settlementPsbt.getInput(i);
14959
15186
  if (!settlementInput.txid || settlementInput.index === void 0) {
@@ -14984,7 +15211,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
14984
15211
  }
14985
15212
  continue;
14986
15213
  }
14987
- if (chunk6AFUNKK7_cjs.canRecoverOnchain(input, { timestamp: /* @__PURE__ */ new Date() }) || isSubdust({ value: input.value }, this.dustAmount)) {
15214
+ if (chunkJZWLXNHV_cjs.canRecoverOnchain(input, { timestamp: /* @__PURE__ */ new Date() }) || isSubdust({ value: input.value }, this.dustAmount)) {
14988
15215
  continue;
14989
15216
  }
14990
15217
  if (connectorsLeaves.length === 0) {
@@ -15012,7 +15239,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
15012
15239
  index: input.vout,
15013
15240
  witnessUtxo: {
15014
15241
  amount: BigInt(input.value),
15015
- script: chunk6AFUNKK7_cjs.VtxoScript.decode(input.tapTree).pkScript
15242
+ script: chunkJZWLXNHV_cjs.VtxoScript.decode(input.tapTree).pkScript
15016
15243
  },
15017
15244
  sighashType: btcSigner.SigHash.DEFAULT,
15018
15245
  tapLeafScript: [input.forfeitTapLeafScript]
@@ -15031,7 +15258,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
15031
15258
  forfeitTx = await this._signerRouter.sign(forfeitTx, [
15032
15259
  {
15033
15260
  index: 0,
15034
- lookupScript: chunk6AFUNKK7_cjs.VtxoScript.decode(input.tapTree).pkScript
15261
+ lookupScript: chunkJZWLXNHV_cjs.VtxoScript.decode(input.tapTree).pkScript
15035
15262
  }
15036
15263
  ]);
15037
15264
  signedForfeits.push(base.base64.encode(forfeitTx.toPSBT()));
@@ -15089,7 +15316,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
15089
15316
  resolveBatchExpiryPolicy(this.network, this.batchExpiryPolicy)
15090
15317
  );
15091
15318
  await this.arkProvider.confirmRegistration(intentId);
15092
- const sweepTapscript = chunk6AFUNKK7_cjs.CSVMultisigTapscript.encode({
15319
+ const sweepTapscript = chunkJZWLXNHV_cjs.CSVMultisigTapscript.encode({
15093
15320
  timelock,
15094
15321
  pubkeys: [this.forfeitPubkey]
15095
15322
  }).script;
@@ -15104,10 +15331,10 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
15104
15331
  throw new Error("Sweep tap tree root not set");
15105
15332
  }
15106
15333
  const xOnlyPublicKeys = event.cosignersPublicKeys.map(
15107
- (k) => base.hex.encode(chunkHL7EC2Z5_cjs.toXOnly(base.hex.decode(k), "cosigner key"))
15334
+ (k) => base.hex.encode(chunk43FKNLX4_cjs.toXOnly(base.hex.decode(k), "cosigner key"))
15108
15335
  );
15109
15336
  const signerPublicKey = await session.getPublicKey();
15110
- const xonlySignerPublicKey = chunkHL7EC2Z5_cjs.toXOnly(signerPublicKey, "signer key");
15337
+ const xonlySignerPublicKey = chunk43FKNLX4_cjs.toXOnly(signerPublicKey, "signer key");
15111
15338
  if (!xOnlyPublicKeys.includes(base.hex.encode(xonlySignerPublicKey))) {
15112
15339
  return { skip: true };
15113
15340
  }
@@ -15197,9 +15424,9 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
15197
15424
  ...existing ?? {},
15198
15425
  intentTxId,
15199
15426
  registerProof: intent.proof,
15200
- registerProofMessage: chunk6AFUNKK7_cjs.Intent.encodeMessage(intent.message),
15427
+ registerProofMessage: chunkJZWLXNHV_cjs.Intent.encodeMessage(intent.message),
15201
15428
  deleteProof: deleteIntent.proof,
15202
- deleteProofMessage: chunk6AFUNKK7_cjs.Intent.encodeMessage(deleteIntent.message),
15429
+ deleteProofMessage: chunkJZWLXNHV_cjs.Intent.encodeMessage(deleteIntent.message),
15203
15430
  intentVtxos: inputs.map((i) => ({
15204
15431
  txid: i.txid,
15205
15432
  vout: i.vout
@@ -15231,7 +15458,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
15231
15458
  try {
15232
15459
  return await this.arkProvider.registerIntent(intent);
15233
15460
  } catch (error) {
15234
- if (error instanceof chunk6AFUNKK7_cjs.ArkError && error.code === 0 && error.message.includes("duplicated input")) {
15461
+ if (error instanceof chunkJZWLXNHV_cjs.ArkError && error.code === 0 && error.message.includes("duplicated input")) {
15235
15462
  const deleteIntent = await this.makeDeleteIntentSignature(inputs);
15236
15463
  await this.arkProvider.deleteIntent(deleteIntent);
15237
15464
  return this.arkProvider.registerIntent(intent);
@@ -15247,7 +15474,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
15247
15474
  expire_at: 0,
15248
15475
  cosigners_public_keys: cosignerPubKeys
15249
15476
  };
15250
- const proof = chunk6AFUNKK7_cjs.Intent.create(message, coins, outputs);
15477
+ const proof = chunkJZWLXNHV_cjs.Intent.create(message, coins, outputs);
15251
15478
  const signedProof = await this._signerRouter.sign(proof, intentProofJobs(coins));
15252
15479
  return {
15253
15480
  proof: base.base64.encode(signedProof.toPSBT()),
@@ -15259,7 +15486,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
15259
15486
  type: "delete",
15260
15487
  expire_at: 0
15261
15488
  };
15262
- const proof = chunk6AFUNKK7_cjs.Intent.create(message, coins, []);
15489
+ const proof = chunkJZWLXNHV_cjs.Intent.create(message, coins, []);
15263
15490
  const signedProof = await this._signerRouter.sign(proof, intentProofJobs(coins));
15264
15491
  return {
15265
15492
  proof: base.base64.encode(signedProof.toPSBT()),
@@ -15271,7 +15498,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
15271
15498
  type: "get-pending-tx",
15272
15499
  expire_at: 0
15273
15500
  };
15274
- const proof = chunk6AFUNKK7_cjs.Intent.create(message, coins, []);
15501
+ const proof = chunkJZWLXNHV_cjs.Intent.create(message, coins, []);
15275
15502
  const signedProof = await this._signerRouter.sign(proof, intentProofJobs(coins));
15276
15503
  return {
15277
15504
  proof: base.base64.encode(signedProof.toPSBT()),
@@ -15292,7 +15519,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
15292
15519
  if (!vtxos || vtxos.length === 0) {
15293
15520
  const scriptMap = await this.getScriptMap();
15294
15521
  const allExtended = [];
15295
- const fetchedVtxos = await chunk6AFUNKK7_cjs.getAllNormalizedVtxos(this.indexerProvider, [
15522
+ const fetchedVtxos = await chunkJZWLXNHV_cjs.getAllNormalizedVtxos(this.indexerProvider, [
15296
15523
  ...scriptMap.keys()
15297
15524
  ]);
15298
15525
  for (const vtxo of fetchedVtxos) {
@@ -15336,7 +15563,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
15336
15563
  try {
15337
15564
  const checkpointTxs = pendingTx.signedCheckpointTxs.map((c) => {
15338
15565
  const tx = btcSigner.Transaction.fromPSBT(base.base64.decode(c));
15339
- chunk6AFUNKK7_cjs.assertAllowedSighashTypes(tx);
15566
+ chunkJZWLXNHV_cjs.assertAllowedSighashTypes(tx);
15340
15567
  return tx;
15341
15568
  });
15342
15569
  assertCheckpointsMatchInputs(
@@ -15408,11 +15635,11 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
15408
15635
  * against the current key alone would leave it pending forever.
15409
15636
  */
15410
15637
  checkpointUnrollCandidates(info) {
15411
- const current = chunk6AFUNKK7_cjs.CSVMultisigTapscript.decode(base.hex.decode(info.checkpointTapscript));
15638
+ const current = chunkJZWLXNHV_cjs.CSVMultisigTapscript.decode(base.hex.decode(info.checkpointTapscript));
15412
15639
  const candidates = [this._serverUnrollScript, current];
15413
15640
  for (const deprecated of signerSetFromInfo(info).deprecated.keys()) {
15414
15641
  candidates.push(
15415
- chunk6AFUNKK7_cjs.CSVMultisigTapscript.encode({
15642
+ chunkJZWLXNHV_cjs.CSVMultisigTapscript.encode({
15416
15643
  ...current.params,
15417
15644
  pubkeys: [base.hex.decode(deprecated)]
15418
15645
  })
@@ -15503,7 +15730,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
15503
15730
  if (vtxos.length === 0) {
15504
15731
  throw new Error("No VTXOs found for this arkadeCash");
15505
15732
  }
15506
- const myPkScript = chunk6AFUNKK7_cjs.ArkAddress.decode(await this.getAddress()).pkScript;
15733
+ const myPkScript = chunkJZWLXNHV_cjs.ArkAddress.decode(await this.getAddress()).pkScript;
15507
15734
  let { spendable, unclaimed } = this.classifyCashVtxos(vtxos);
15508
15735
  let swept = 0;
15509
15736
  const drainable = vtxos.filter(
@@ -15579,7 +15806,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
15579
15806
  const spendable = [];
15580
15807
  const unclaimed = [];
15581
15808
  for (const vtxo of vtxos) {
15582
- if (chunk6AFUNKK7_cjs.hasTerminalSpend(vtxo)) {
15809
+ if (chunkJZWLXNHV_cjs.hasTerminalSpend(vtxo)) {
15583
15810
  unclaimed.push(cashReport(vtxo, "already-spent"));
15584
15811
  } else if (vtxo.isUnrolled) {
15585
15812
  unclaimed.push(cashReport(vtxo, "exited"));
@@ -15601,7 +15828,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
15601
15828
  const all = [];
15602
15829
  const seen = /* @__PURE__ */ new Set();
15603
15830
  for (let pageIndex = 0; ; pageIndex++) {
15604
- const { vtxos, page } = await chunk6AFUNKK7_cjs.getNormalizedVtxos(this.indexerProvider, {
15831
+ const { vtxos, page } = await chunkJZWLXNHV_cjs.getNormalizedVtxos(this.indexerProvider, {
15605
15832
  scripts,
15606
15833
  pageIndex,
15607
15834
  pageSize
@@ -15648,7 +15875,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
15648
15875
  for (let i = 0; i < inputs.length; i += MAX_INPUTS_PER_INTENT) {
15649
15876
  const batch = inputs.slice(i, i + MAX_INPUTS_PER_INTENT);
15650
15877
  const message = { type: "get-pending-tx", expire_at: 0 };
15651
- const proof = chunk6AFUNKK7_cjs.Intent.create(message, batch, []);
15878
+ const proof = chunkJZWLXNHV_cjs.Intent.create(message, batch, []);
15652
15879
  const signedProof = await identity.sign(
15653
15880
  proof,
15654
15881
  Array.from({ length: batch.length + 1 }, (_, j) => j)
@@ -15670,7 +15897,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
15670
15897
  try {
15671
15898
  const checkpointTxs = pendingTx.signedCheckpointTxs.map((checkpoint) => {
15672
15899
  const tx = btcSigner.Transaction.fromPSBT(base.base64.decode(checkpoint));
15673
- chunk6AFUNKK7_cjs.assertAllowedSighashTypes(tx);
15900
+ chunkJZWLXNHV_cjs.assertAllowedSighashTypes(tx);
15674
15901
  return tx;
15675
15902
  });
15676
15903
  assertCheckpointsMatchInputs(
@@ -15869,7 +16096,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
15869
16096
  script: recipient.script,
15870
16097
  amount: BigInt(recipient.amount),
15871
16098
  // Already checked against the recipient address in `validateRecipients`.
15872
- ...recipient.tapTree ? { tapTree: chunk6AFUNKK7_cjs.TapTreeCoder.decode(recipient.tapTree) } : {}
16099
+ ...recipient.tapTree ? { tapTree: chunkJZWLXNHV_cjs.TapTreeCoder.decode(recipient.tapTree) } : {}
15873
16100
  }));
15874
16101
  const totalBtcOutput = outputs.reduce((sum, o) => sum + Number(o.amount), 0);
15875
16102
  let changeAmount = totalBtcSelected - totalBtcOutput;
@@ -16013,10 +16240,10 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
16013
16240
  const serverPubKey = this.arkServerPublicKey;
16014
16241
  const serverUnrollScript = this.serverUnrollScript;
16015
16242
  const arkAddress = offchainTapscript.address(this.network.hrp, serverPubKey);
16016
- const normalizedInputs = inputs.map(chunk6AFUNKK7_cjs.normalizeVtxo);
16017
- const at = now ?? await chunk6AFUNKK7_cjs.resolveTimeHeight(this.onchainProvider);
16243
+ const normalizedInputs = inputs.map(chunkJZWLXNHV_cjs.normalizeVtxo);
16244
+ const at = now ?? await chunkJZWLXNHV_cjs.resolveTimeHeight(this.onchainProvider);
16018
16245
  for (const input of normalizedInputs) {
16019
- if (!chunk6AFUNKK7_cjs.canSpendOffchain(input, at)) {
16246
+ if (!chunkJZWLXNHV_cjs.canSpendOffchain(input, at)) {
16020
16247
  throw new Error(
16021
16248
  `sendSelectedVtxosToSelf: input ${input.txid}:${input.vout} is not cooperatively spendable`
16022
16249
  );
@@ -16086,7 +16313,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
16086
16313
  );
16087
16314
  const arkTxJobs = inputs.map((input, index) => ({
16088
16315
  index,
16089
- lookupScript: chunk6AFUNKK7_cjs.VtxoScript.decode(input.tapTree).pkScript
16316
+ lookupScript: chunkJZWLXNHV_cjs.VtxoScript.decode(input.tapTree).pkScript
16090
16317
  }));
16091
16318
  const identity = this.identity;
16092
16319
  const signer = {
@@ -16172,14 +16399,14 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
16172
16399
  const spentBy = checkpointIdByOutpoint.get(`${vtxo.txid}:${vtxo.vout}`);
16173
16400
  spentVtxos.push({
16174
16401
  ...spentFacts,
16175
- virtualStatus: chunk6AFUNKK7_cjs.toVirtualStatus(spentFacts),
16402
+ virtualStatus: chunkJZWLXNHV_cjs.toVirtualStatus(spentFacts),
16176
16403
  ...spentBy ? { spentBy } : {},
16177
16404
  arkTxId: arkTxid
16178
16405
  });
16179
16406
  for (const id of vtxo.commitmentTxIds) {
16180
16407
  commitmentTxIds.add(id);
16181
16408
  }
16182
- const vtxoExpiry = chunk6AFUNKK7_cjs.toBatchExpiry(vtxo);
16409
+ const vtxoExpiry = chunkJZWLXNHV_cjs.toBatchExpiry(vtxo);
16183
16410
  if (vtxoExpiry) {
16184
16411
  batchExpiry = Math.min(batchExpiry, vtxoExpiry);
16185
16412
  }
@@ -16192,7 +16419,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
16192
16419
  isSwept: false,
16193
16420
  isPreconfirmed: true,
16194
16421
  commitmentTxIds: Array.from(commitmentTxIds),
16195
- ...chunk6AFUNKK7_cjs.parseLegacyExpiry(batchExpiry)
16422
+ ...chunkJZWLXNHV_cjs.parseLegacyExpiry(batchExpiry)
16196
16423
  };
16197
16424
  changeVtxo = {
16198
16425
  txid: arkTxid,
@@ -16204,7 +16431,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
16204
16431
  tapTree: offchainTapscript.encode(),
16205
16432
  value: Number(changeAmount),
16206
16433
  ...changeFacts,
16207
- virtualStatus: chunk6AFUNKK7_cjs.toVirtualStatus(changeFacts),
16434
+ virtualStatus: chunkJZWLXNHV_cjs.toVirtualStatus(changeFacts),
16208
16435
  spentBy: "",
16209
16436
  status: {
16210
16437
  confirmed: false
@@ -16273,12 +16500,12 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
16273
16500
  const spentVtxos = [];
16274
16501
  const inputArkTxIds = /* @__PURE__ */ new Set();
16275
16502
  const boardingRemovalsByAddress = /* @__PURE__ */ new Map();
16276
- const vtxoInputs = inputs.filter(chunk6AFUNKK7_cjs.isVirtualCoin);
16503
+ const vtxoInputs = inputs.filter(chunkJZWLXNHV_cjs.isVirtualCoin);
16277
16504
  const cm = await this.getContractManager();
16278
16505
  const annotatedVtxos = await cm.annotateVtxos(vtxoInputs);
16279
16506
  const annotatedByKey = new Map(annotatedVtxos.map((v) => [`${v.txid}:${v.vout}`, v]));
16280
16507
  for (const input of inputs) {
16281
- if (chunk6AFUNKK7_cjs.isVirtualCoin(input)) {
16508
+ if (chunkJZWLXNHV_cjs.isVirtualCoin(input)) {
16282
16509
  const outpoint = `${input.txid}:${input.vout}`;
16283
16510
  const vtxo = annotatedByKey.get(outpoint);
16284
16511
  if (!vtxo) {
@@ -16290,13 +16517,13 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
16290
16517
  const settledFacts = { ...vtxo, isSpent: true };
16291
16518
  spentVtxos.push({
16292
16519
  ...settledFacts,
16293
- virtualStatus: chunk6AFUNKK7_cjs.toVirtualStatus(settledFacts),
16520
+ virtualStatus: chunkJZWLXNHV_cjs.toVirtualStatus(settledFacts),
16294
16521
  settledBy: commitmentTxid
16295
16522
  });
16296
16523
  } else {
16297
16524
  let sourceAddress;
16298
16525
  try {
16299
- sourceAddress = chunk6AFUNKK7_cjs.VtxoScript.decode(input.tapTree).onchainAddress(
16526
+ sourceAddress = chunkJZWLXNHV_cjs.VtxoScript.decode(input.tapTree).onchainAddress(
16300
16527
  this.network
16301
16528
  );
16302
16529
  } catch {
@@ -16354,9 +16581,9 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
16354
16581
  }
16355
16582
  };
16356
16583
  function selectVirtualCoins(coins, targetAmount) {
16357
- const sortedCoins = coins.map(chunk6AFUNKK7_cjs.normalizeVtxo).sort((a, b) => {
16358
- const expiryA = chunk6AFUNKK7_cjs.toBatchExpiry(a) || Number.MAX_SAFE_INTEGER;
16359
- const expiryB = chunk6AFUNKK7_cjs.toBatchExpiry(b) || Number.MAX_SAFE_INTEGER;
16584
+ const sortedCoins = coins.map(chunkJZWLXNHV_cjs.normalizeVtxo).sort((a, b) => {
16585
+ const expiryA = chunkJZWLXNHV_cjs.toBatchExpiry(a) || Number.MAX_SAFE_INTEGER;
16586
+ const expiryB = chunkJZWLXNHV_cjs.toBatchExpiry(b) || Number.MAX_SAFE_INTEGER;
16360
16587
  if (expiryA !== expiryB) {
16361
16588
  return expiryA - expiryB;
16362
16589
  }
@@ -16383,19 +16610,53 @@ function selectVirtualCoins(coins, targetAmount) {
16383
16610
  changeAmount
16384
16611
  };
16385
16612
  }
16386
- async function waitForIncomingFunds(wallet) {
16613
+ var AbortError = class extends Error {
16614
+ constructor(message = "Operation aborted") {
16615
+ super(message);
16616
+ this.name = "AbortError";
16617
+ }
16618
+ };
16619
+ function abortReason(signal) {
16620
+ const { reason } = signal;
16621
+ if (reason instanceof Error) return reason;
16622
+ return new AbortError(typeof reason === "string" ? reason : void 0);
16623
+ }
16624
+ async function waitForIncomingFunds(wallet, options) {
16625
+ const { signal, timeoutMs } = options ?? {};
16626
+ if (signal?.aborted) throw abortReason(signal);
16387
16627
  let stopFunc;
16388
16628
  let settled = false;
16389
- return new Promise((resolve) => {
16629
+ let timeoutId;
16630
+ let onAbort;
16631
+ return new Promise((resolve, reject) => {
16632
+ const settle = (deliver) => {
16633
+ if (settled) return;
16634
+ settled = true;
16635
+ if (timeoutId !== void 0) clearTimeout(timeoutId);
16636
+ if (onAbort) signal?.removeEventListener("abort", onAbort);
16637
+ stopFunc?.();
16638
+ deliver();
16639
+ };
16640
+ const cancel = (reason) => settle(() => reject(reason));
16641
+ if (signal) {
16642
+ onAbort = () => cancel(abortReason(signal));
16643
+ signal.addEventListener("abort", onAbort);
16644
+ }
16645
+ if (timeoutMs !== void 0) {
16646
+ timeoutId = setTimeout(
16647
+ () => cancel(new AbortError(`waitForIncomingFunds timed out after ${timeoutMs}ms`)),
16648
+ timeoutMs
16649
+ );
16650
+ }
16390
16651
  wallet.notifyIncomingFunds((funds) => {
16391
16652
  const hasFunds = funds.type === "utxo" ? funds.coins.length > 0 : funds.newVtxos.length > 0;
16392
16653
  if (settled || !hasFunds) return;
16393
- settled = true;
16394
- resolve(funds);
16395
- stopFunc?.();
16654
+ settle(() => resolve(funds));
16396
16655
  }).then((stop) => {
16397
16656
  stopFunc = stop;
16398
16657
  if (settled) stop();
16658
+ }).catch((error) => {
16659
+ cancel(error);
16399
16660
  });
16400
16661
  });
16401
16662
  }
@@ -16691,7 +16952,7 @@ var MessageBus = class {
16691
16952
  this.initialized = true;
16692
16953
  }
16693
16954
  async buildServices(config) {
16694
- const arkProvider = new chunk6AFUNKK7_cjs.RestArkProvider(config.arkServer.url);
16955
+ const arkProvider = new chunkJZWLXNHV_cjs.RestArkProvider(config.arkServer.url);
16695
16956
  const storage = {
16696
16957
  walletRepository: this.walletRepository,
16697
16958
  contractRepository: this.contractRepository,
@@ -17036,7 +17297,7 @@ var offboardNetworkNames = [
17036
17297
  function offboardDestinationScript(destinationAddress) {
17037
17298
  for (const networkName of offboardNetworkNames) {
17038
17299
  try {
17039
- const network = chunk6AFUNKK7_cjs.networks[networkName];
17300
+ const network = chunkJZWLXNHV_cjs.networks[networkName];
17040
17301
  const addr = btcSigner.Address(network).decode(destinationAddress);
17041
17302
  return btcSigner.OutScript.encode(addr);
17042
17303
  } catch {
@@ -17100,7 +17361,7 @@ var Ramps = class {
17100
17361
  }
17101
17362
  amount = amount ?? totalAmount;
17102
17363
  const offchainAddress = await this.wallet.getAddress();
17103
- const offchainAddr = chunk6AFUNKK7_cjs.ArkAddress.decode(offchainAddress);
17364
+ const offchainAddr = chunkJZWLXNHV_cjs.ArkAddress.decode(offchainAddress);
17104
17365
  const offchainScript = base.hex.encode(offchainAddr.pkScript);
17105
17366
  const outputFee = estimator.evalOffchainOutput({
17106
17367
  amount,
@@ -17160,7 +17421,7 @@ var Ramps = class {
17160
17421
  const filteredVtxos = [];
17161
17422
  let totalAmount = 0n;
17162
17423
  for (const vtxo of vtxos) {
17163
- const inputFee = estimator.evalOffchainInput(chunk6AFUNKK7_cjs.toOffchainInputFeeParams(vtxo));
17424
+ const inputFee = estimator.evalOffchainInput(chunkJZWLXNHV_cjs.toOffchainInputFeeParams(vtxo));
17164
17425
  if (inputFee.satoshis >= vtxo.value) {
17165
17426
  continue;
17166
17427
  }
@@ -18039,7 +18300,7 @@ var WalletMessageHandler = class {
18039
18300
  // Wallet methods
18040
18301
  async handleInitWallet({ payload }) {
18041
18302
  const { arkServerUrl } = payload;
18042
- this.indexerProvider = new chunkCZ32XADN_cjs.RestIndexerProvider(arkServerUrl);
18303
+ this.indexerProvider = new chunkNVZJSKZS_cjs.RestIndexerProvider(arkServerUrl);
18043
18304
  await this.onWalletInitialized();
18044
18305
  }
18045
18306
  /**
@@ -18328,7 +18589,7 @@ var WalletMessageHandler = class {
18328
18589
  if (v.isUnrolled) {
18329
18590
  return withUnrolled;
18330
18591
  }
18331
- if (chunk6AFUNKK7_cjs.hasTerminalSpend(v)) {
18592
+ if (chunkJZWLXNHV_cjs.hasTerminalSpend(v)) {
18332
18593
  return false;
18333
18594
  }
18334
18595
  if (includeRecoverable) {
@@ -18337,10 +18598,10 @@ var WalletMessageHandler = class {
18337
18598
  if (dustAmount != null && isSubdust(v, dustAmount)) {
18338
18599
  return false;
18339
18600
  }
18340
- if (chunk6AFUNKK7_cjs.isRecoverable(v)) {
18601
+ if (chunkJZWLXNHV_cjs.isRecoverable(v)) {
18341
18602
  return false;
18342
18603
  }
18343
- if (chunk6AFUNKK7_cjs.isExpired(v)) {
18604
+ if (chunkJZWLXNHV_cjs.isExpired(v)) {
18344
18605
  return false;
18345
18606
  }
18346
18607
  return true;
@@ -18438,7 +18699,7 @@ var WalletMessageHandler = class {
18438
18699
  if (!this.readonlyWallet) return null;
18439
18700
  const { boardingTxs, commitmentsToIgnore } = await this.readonlyWallet.getBoardingTxs();
18440
18701
  const indexerProvider = this.indexerProvider;
18441
- const resolveTxCreatedAt = indexerProvider ? (txids) => chunk6AFUNKK7_cjs.fetchVtxoCreatedAtByTxid(indexerProvider, txids) : void 0;
18702
+ const resolveTxCreatedAt = indexerProvider ? (txids) => chunkJZWLXNHV_cjs.fetchVtxoCreatedAtByTxid(indexerProvider, txids) : void 0;
18442
18703
  return buildTransactionHistory(vtxos, boardingTxs, commitmentsToIgnore, resolveTxCreatedAt);
18443
18704
  }
18444
18705
  async ensureContractEventBroadcasting() {
@@ -18501,7 +18762,7 @@ var DEFAULT_MESSAGE_TIMEOUTS = {
18501
18762
  // budget so the worker's snapshot fallback stays reachable before this
18502
18763
  // page deadline fires — lowering it below the budget would time the page
18503
18764
  // out while the worker is still seconds from answering from cache.
18504
- GET_ARKADE_INFO: chunk6AFUNKK7_cjs.INFO_FETCH_TIMEOUT_MS + 8e3,
18765
+ GET_ARKADE_INFO: chunkJZWLXNHV_cjs.INFO_FETCH_TIMEOUT_MS + 8e3,
18505
18766
  INDEXER_GET_VTXOS: 2e4,
18506
18767
  INDEXER_GET_VIRTUAL_TXS: 2e4,
18507
18768
  GET_VTXOS: 2e4,
@@ -19114,7 +19375,7 @@ var ServiceWorkerReadonlyWallet = class _ServiceWorkerReadonlyWallet {
19114
19375
  try {
19115
19376
  const response = await this.sendMessage(message);
19116
19377
  const { vtxos, page } = response.payload;
19117
- return { vtxos: vtxos.map(chunk6AFUNKK7_cjs.normalizeVtxo), page: page && { ...page } };
19378
+ return { vtxos: vtxos.map(chunkJZWLXNHV_cjs.normalizeVtxo), page: page && { ...page } };
19118
19379
  } catch (error) {
19119
19380
  throw new Error(`Failed to get vtxos: ${error}`, { cause: error });
19120
19381
  }
@@ -19218,7 +19479,7 @@ var ServiceWorkerReadonlyWallet = class _ServiceWorkerReadonlyWallet {
19218
19479
  };
19219
19480
  try {
19220
19481
  const response = await this.sendMessage(message);
19221
- return response.payload.vtxos.map(chunk6AFUNKK7_cjs.normalizeVtxo);
19482
+ return response.payload.vtxos.map(chunkJZWLXNHV_cjs.normalizeVtxo);
19222
19483
  } catch (error) {
19223
19484
  throw new Error(`Failed to get vtxos: ${error}`);
19224
19485
  }
@@ -19243,7 +19504,7 @@ var ServiceWorkerReadonlyWallet = class _ServiceWorkerReadonlyWallet {
19243
19504
  };
19244
19505
  try {
19245
19506
  const response = await this.sendMessage(message);
19246
- return response.payload.vtxos.map(chunk6AFUNKK7_cjs.normalizeVtxo);
19507
+ return response.payload.vtxos.map(chunkJZWLXNHV_cjs.normalizeVtxo);
19247
19508
  } catch (error) {
19248
19509
  throw new Error(`Failed to get spendable vtxos: ${error}`);
19249
19510
  }
@@ -19374,7 +19635,7 @@ var ServiceWorkerReadonlyWallet = class _ServiceWorkerReadonlyWallet {
19374
19635
  };
19375
19636
  try {
19376
19637
  const response = await sendContractMessage(message);
19377
- return response.payload.vtxos.map(chunk6AFUNKK7_cjs.normalizeVtxo);
19638
+ return response.payload.vtxos.map(chunkJZWLXNHV_cjs.normalizeVtxo);
19378
19639
  } catch (e) {
19379
19640
  throw new Error("Failed to annotate vtxos");
19380
19641
  }
@@ -20012,7 +20273,7 @@ var ServiceWorkerWallet = class _ServiceWorkerWallet extends ServiceWorkerReadon
20012
20273
  };
20013
20274
  try {
20014
20275
  const response = await wallet.sendMessage(message);
20015
- return response.payload.vtxos.map(chunk6AFUNKK7_cjs.normalizeVtxo);
20276
+ return response.payload.vtxos.map(chunkJZWLXNHV_cjs.normalizeVtxo);
20016
20277
  } catch (e) {
20017
20278
  throw new Error(`Failed to get expiring vtxos: ${e}`);
20018
20279
  }
@@ -20124,12 +20385,12 @@ var OnchainWallet = class _OnchainWallet {
20124
20385
  * @returns Configured onchain wallet
20125
20386
  * @throws Error if the configured identity cannot produce a valid x-only public key
20126
20387
  */
20127
- static async create(identity, networkName = chunk6AFUNKK7_cjs.DEFAULT_NETWORK_NAME, provider) {
20388
+ static async create(identity, networkName = chunkJZWLXNHV_cjs.DEFAULT_NETWORK_NAME, provider) {
20128
20389
  const pubkey = await identity.xOnlyPublicKey();
20129
20390
  if (!pubkey) {
20130
20391
  throw new Error("Invalid configured public key");
20131
20392
  }
20132
- const network = chunk6AFUNKK7_cjs.getNetwork(networkName);
20393
+ const network = chunkJZWLXNHV_cjs.getNetwork(networkName);
20133
20394
  const onchainProvider = provider || new EsploraProvider(ESPLORA_URL[networkName]);
20134
20395
  const onchainP2TR = btcSigner.p2tr(pubkey, void 0, network);
20135
20396
  return new _OnchainWallet(identity, network, onchainP2TR, onchainProvider);
@@ -20235,7 +20496,7 @@ var OnchainWallet = class _OnchainWallet {
20235
20496
  if (!inputs) {
20236
20497
  throw new Error("Fee estimation failed");
20237
20498
  }
20238
- let tx = new chunk6AFUNKK7_cjs.Transaction();
20499
+ let tx = new chunkJZWLXNHV_cjs.Transaction();
20239
20500
  for (const input of inputs) {
20240
20501
  tx.addInput({
20241
20502
  txid: input.txid,
@@ -20293,7 +20554,7 @@ var OnchainWallet = class _OnchainWallet {
20293
20554
  * @throws If the parent has no anchor, or funding cannot be selected/signed
20294
20555
  */
20295
20556
  async bumpAnchor(parentHex, feeRate) {
20296
- const parent = chunk6AFUNKK7_cjs.Transaction.fromRaw(base.hex.decode(parentHex));
20557
+ const parent = chunkJZWLXNHV_cjs.Transaction.fromRaw(base.hex.decode(parentHex));
20297
20558
  const coins = (await this.getCoins()).filter((c) => c.status.confirmed);
20298
20559
  const child = await this.buildBumpPackage(parent, feeRate, coins);
20299
20560
  return [parent.hex, child.hex];
@@ -20392,6 +20653,7 @@ var ListUnspentMethod = "blockchain.scripthash.listunspent";
20392
20653
  var MISSING_TRANSACTION = "missingtransaction";
20393
20654
  var MAX_FETCH_TRANSACTIONS_ATTEMPTS = 5;
20394
20655
  var BLOCK_HEADER_SIZE = 80;
20656
+ var MTP_WINDOW = 11;
20395
20657
  function parseBlockHeader(headerHex) {
20396
20658
  const headerBytes = base.hex.decode(headerHex);
20397
20659
  if (headerBytes.length !== BLOCK_HEADER_SIZE) {
@@ -20698,6 +20960,8 @@ var ElectrumOnchainProvider = class {
20698
20960
  ws;
20699
20961
  network;
20700
20962
  chain;
20963
+ mtpCache;
20964
+ mtpInflight;
20701
20965
  async getCoins(address) {
20702
20966
  const script = this.encodeAddress(address);
20703
20967
  const scriptHash = toScriptHash(script);
@@ -20953,15 +21217,58 @@ var ElectrumOnchainProvider = class {
20953
21217
  blockTime
20954
21218
  };
20955
21219
  }
21220
+ /** `time` is median-time-past, per {@link OnchainProvider.getChainTip};
21221
+ * Electrum serves raw headers and no MTP, so it is computed here. */
20956
21222
  async getChainTip() {
20957
21223
  const tip = await this.chain.subscribeHeaders();
20958
21224
  const { hash, timestamp } = parseBlockHeader(tip.hex);
20959
21225
  return {
20960
21226
  height: tip.height,
20961
- time: timestamp,
21227
+ time: await this.medianTimePast(tip.height, timestamp, hash),
20962
21228
  hash
20963
21229
  };
20964
21230
  }
21231
+ /**
21232
+ * Consensus's `GetMedianTimePast`, ending at and including `height`.
21233
+ *
21234
+ * Cached per tip HASH, not height: this runs on every balance read, and
21235
+ * hashing means a reorg at the same height recomputes rather than serving
21236
+ * the orphaned chain's median.
21237
+ */
21238
+ async medianTimePast(height, tipTime, hash) {
21239
+ if (this.mtpCache?.hash === hash) return this.mtpCache.mtp;
21240
+ if (this.mtpInflight?.hash === hash) return this.mtpInflight.mtp;
21241
+ const mtp = this.readMedianTimePast(height, tipTime, hash).finally(() => {
21242
+ this.mtpInflight = void 0;
21243
+ });
21244
+ this.mtpInflight = { hash, mtp };
21245
+ return mtp;
21246
+ }
21247
+ /** Degrades to the tip's `nTime` rather than throwing — a caller that
21248
+ * cannot read the tip at all is worse off. */
21249
+ async readMedianTimePast(height, tipTime, hash) {
21250
+ const heights = [];
21251
+ for (let h = height - 1; h >= 0 && heights.length < MTP_WINDOW - 1; h--) heights.push(h);
21252
+ if (heights.length === 0) return tipTime;
21253
+ let timestamps;
21254
+ try {
21255
+ const headers = await this.chain.fetchBlockHeaders(heights);
21256
+ timestamps = [
21257
+ tipTime,
21258
+ ...headers.map((header) => parseBlockHeader(header.hex).timestamp)
21259
+ ];
21260
+ } catch (e) {
21261
+ console.warn(
21262
+ "Failed to fetch the median-time-past window; using the tip's own time",
21263
+ e
21264
+ );
21265
+ return tipTime;
21266
+ }
21267
+ timestamps.sort((a, b) => a - b);
21268
+ const mtp = timestamps[Math.floor(timestamps.length / 2)];
21269
+ this.mtpCache = { hash, mtp };
21270
+ return mtp;
21271
+ }
20965
21272
  async watchAddresses(addresses, eventCallback) {
20966
21273
  const scripts = addresses.map((addr) => this.encodeAddress(addr));
20967
21274
  const scriptHashes = scripts.map(toScriptHash);
@@ -21154,7 +21461,7 @@ async function resolvePrevTxs(txids, source, onchain) {
21154
21461
  try {
21155
21462
  const { txs } = await source.getVirtualTxs(wanted);
21156
21463
  for (const psbt of txs) {
21157
- const tx = chunk6AFUNKK7_cjs.Transaction.fromPSBT(base.base64.decode(psbt));
21464
+ const tx = chunkJZWLXNHV_cjs.Transaction.fromPSBT(base.base64.decode(psbt));
21158
21465
  resolved.set(tx.id, tx.toBytes());
21159
21466
  }
21160
21467
  } catch (err) {
@@ -21187,7 +21494,7 @@ async function resolvePrevTxs(txids, source, onchain) {
21187
21494
  async function attachPrevArkTxs(tx, txids, source, onchain) {
21188
21495
  const pending = [];
21189
21496
  for (let i = 0; i < tx.inputsLength; i++) {
21190
- if (chunk6AFUNKK7_cjs.getArkPsbtFields(tx, i, chunk6AFUNKK7_cjs.PrevArkTxField).length === 0) pending.push(i);
21497
+ if (chunkJZWLXNHV_cjs.getArkPsbtFields(tx, i, chunkJZWLXNHV_cjs.PrevArkTxField).length === 0) pending.push(i);
21191
21498
  }
21192
21499
  if (pending.length === 0) return;
21193
21500
  const resolved = await resolvePrevTxs(
@@ -21196,13 +21503,13 @@ async function attachPrevArkTxs(tx, txids, source, onchain) {
21196
21503
  onchain
21197
21504
  );
21198
21505
  for (const i of pending) {
21199
- chunk6AFUNKK7_cjs.setArkPsbtField(tx, i, chunk6AFUNKK7_cjs.PrevArkTxField, resolved.get(txidAt(txids, i)));
21506
+ chunkJZWLXNHV_cjs.setArkPsbtField(tx, i, chunkJZWLXNHV_cjs.PrevArkTxField, resolved.get(txidAt(txids, i)));
21200
21507
  }
21201
21508
  }
21202
21509
  async function attachPrevoutTxs(tx, source) {
21203
21510
  const pending = [];
21204
21511
  for (let i = 0; i < tx.inputsLength; i++) {
21205
- if (chunk6AFUNKK7_cjs.getArkPsbtFields(tx, i, chunk6AFUNKK7_cjs.PrevoutTxField).length > 0) continue;
21512
+ if (chunkJZWLXNHV_cjs.getArkPsbtFields(tx, i, chunkJZWLXNHV_cjs.PrevoutTxField).length > 0) continue;
21206
21513
  const input = tx.getInput(i);
21207
21514
  if (!input?.txid) throw new PrevTxUnavailableError(`input ${i} has no outpoint`);
21208
21515
  pending.push({ index: i, txid: base.hex.encode(input.txid) });
@@ -21213,7 +21520,7 @@ async function attachPrevoutTxs(tx, source) {
21213
21520
  resolved.set(txid, await source.getRawTransaction(txid));
21214
21521
  }
21215
21522
  for (const { index, txid } of pending) {
21216
- chunk6AFUNKK7_cjs.setArkPsbtField(tx, index, chunk6AFUNKK7_cjs.PrevoutTxField, resolved.get(txid));
21523
+ chunkJZWLXNHV_cjs.setArkPsbtField(tx, index, chunkJZWLXNHV_cjs.PrevoutTxField, resolved.get(txid));
21217
21524
  }
21218
21525
  }
21219
21526
  async function withPrevTxs(coins, source, onchain) {
@@ -21239,7 +21546,7 @@ exports.BIP322 = void 0;
21239
21546
  async function sign2(message, identity, network) {
21240
21547
  const xOnlyPubKey = await identity.xOnlyPublicKey();
21241
21548
  const payment = btcSigner.p2tr(xOnlyPubKey, void 0, network);
21242
- const toSpend = chunk6AFUNKK7_cjs.craftToSpendTx(message, payment.script, TAG_BIP322);
21549
+ const toSpend = chunkJZWLXNHV_cjs.craftToSpendTx(message, payment.script, TAG_BIP322);
21243
21550
  const toSign = craftBIP322ToSignP2TR(toSpend, payment.script, xOnlyPubKey);
21244
21551
  const signed = await identity.sign(toSign, [0]);
21245
21552
  signed.finalizeIdx(0);
@@ -21297,7 +21604,7 @@ function verifyP2TR(message, witnessItems, pkScript, pubkey) {
21297
21604
  if (sighashType !== btcSigner.SigHash.DEFAULT && sighashType !== btcSigner.SigHash.ALL) {
21298
21605
  return false;
21299
21606
  }
21300
- const toSpend = chunk6AFUNKK7_cjs.craftToSpendTx(message, pkScript, TAG_BIP322);
21607
+ const toSpend = chunkJZWLXNHV_cjs.craftToSpendTx(message, pkScript, TAG_BIP322);
21301
21608
  const toSign = craftBIP322ToSignP2TR(toSpend, pkScript, pubkey);
21302
21609
  const sighash = toSign.preimageWitnessV1(0, [pkScript], sighashType, [0n]);
21303
21610
  const rawSig = sig.length === 65 ? sig.subarray(0, 64) : sig;
@@ -21318,7 +21625,7 @@ function verifyP2WPKH(message, witnessItems, pkScript, addressHash) {
21318
21625
  }
21319
21626
  const sighashType = sigWithHash[sigWithHash.length - 1];
21320
21627
  const derSig = sigWithHash.subarray(0, sigWithHash.length - 1);
21321
- const toSpend = chunk6AFUNKK7_cjs.craftToSpendTx(message, pkScript, TAG_BIP322);
21628
+ const toSpend = chunkJZWLXNHV_cjs.craftToSpendTx(message, pkScript, TAG_BIP322);
21322
21629
  const toSign = craftBIP322ToSignSimple(toSpend, pkScript);
21323
21630
  const scriptCode = btcSigner.OutScript.encode({ type: "pkh", hash: addressHash });
21324
21631
  const sighash = toSign.preimageWitnessV0(0, scriptCode, sighashType, 0n);
@@ -21371,7 +21678,7 @@ function encodeCompactSize(n) {
21371
21678
  return buf;
21372
21679
  }
21373
21680
  function craftBIP322ToSignP2TR(toSpend, pkScript, tapInternalKey) {
21374
- const tx = new chunk6AFUNKK7_cjs.Transaction({ version: 0 });
21681
+ const tx = new chunkJZWLXNHV_cjs.Transaction({ version: 0 });
21375
21682
  tx.addInput({
21376
21683
  txid: toSpend.id,
21377
21684
  index: 0,
@@ -21385,12 +21692,12 @@ function craftBIP322ToSignP2TR(toSpend, pkScript, tapInternalKey) {
21385
21692
  });
21386
21693
  tx.addOutput({
21387
21694
  amount: 0n,
21388
- script: chunk6AFUNKK7_cjs.OP_RETURN_EMPTY_PKSCRIPT
21695
+ script: chunkJZWLXNHV_cjs.OP_RETURN_EMPTY_PKSCRIPT
21389
21696
  });
21390
21697
  return tx;
21391
21698
  }
21392
21699
  function craftBIP322ToSignSimple(toSpend, pkScript) {
21393
- const tx = new chunk6AFUNKK7_cjs.Transaction({ version: 0 });
21700
+ const tx = new chunkJZWLXNHV_cjs.Transaction({ version: 0 });
21394
21701
  tx.addInput({
21395
21702
  txid: toSpend.id,
21396
21703
  index: 0,
@@ -21402,7 +21709,7 @@ function craftBIP322ToSignSimple(toSpend, pkScript) {
21402
21709
  });
21403
21710
  tx.addOutput({
21404
21711
  amount: 0n,
21405
- script: chunk6AFUNKK7_cjs.OP_RETURN_EMPTY_PKSCRIPT
21712
+ script: chunkJZWLXNHV_cjs.OP_RETURN_EMPTY_PKSCRIPT
21406
21713
  });
21407
21714
  return tx;
21408
21715
  }
@@ -21533,7 +21840,7 @@ var RestEmulatorProvider = class {
21533
21840
  }
21534
21841
  };
21535
21842
  function finalizeVirtualTx(type, psbtBase64) {
21536
- const tx = chunk6AFUNKK7_cjs.Transaction.fromPSBT(base.base64.decode(psbtBase64));
21843
+ const tx = chunkJZWLXNHV_cjs.Transaction.fromPSBT(base.base64.decode(psbtBase64));
21537
21844
  if (type === "INDEXER_CHAINED_TX_TYPE_TREE" /* TREE */) {
21538
21845
  const input = tx.getInput(0);
21539
21846
  if (!input) {
@@ -21560,14 +21867,14 @@ var ExitPathError = class extends Error {
21560
21867
  reason;
21561
21868
  };
21562
21869
  function delayWeight(sequence) {
21563
- const t = chunk6AFUNKK7_cjs.sequenceToTimelock(sequence);
21870
+ const t = chunkJZWLXNHV_cjs.sequenceToTimelock(sequence);
21564
21871
  return t.type === "blocks" ? Number(t.value) : Number(t.value) / 600;
21565
21872
  }
21566
21873
  async function resolveUnilateralPath(params) {
21567
21874
  const { vtxo, scriptHex, contractRepository } = params;
21568
21875
  const contract = contractRepository ? (await contractRepository.getContracts({ script: scriptHex }))[0] : void 0;
21569
21876
  if (contract) {
21570
- const handler = chunkHL7EC2Z5_cjs.contractHandlers.get(contract.type);
21877
+ const handler = chunk43FKNLX4_cjs.contractHandlers.get(contract.type);
21571
21878
  if (!handler) {
21572
21879
  throw new ExitPathError(
21573
21880
  "no-handler",
@@ -21590,12 +21897,12 @@ async function resolveUnilateralPath(params) {
21590
21897
  paths.sort((a, b) => delayWeight(a.sequence) - delayWeight(b.sequence));
21591
21898
  return { selection: paths[0], label: `${contract.type}:unilateral` };
21592
21899
  }
21593
- const decoded = chunk6AFUNKK7_cjs.VtxoScript.decode(vtxo.tapTree);
21900
+ const decoded = chunkJZWLXNHV_cjs.VtxoScript.decode(vtxo.tapTree);
21594
21901
  let best;
21595
21902
  for (const exit of decoded.exitPaths()) {
21596
21903
  const leaf = decoded.findLeaf(base.hex.encode(exit.script));
21597
21904
  if (!leaf) continue;
21598
- const sequence = chunk6AFUNKK7_cjs.timelockToSequence(exit.params.timelock);
21905
+ const sequence = chunkJZWLXNHV_cjs.timelockToSequence(exit.params.timelock);
21599
21906
  const weight = delayWeight(sequence);
21600
21907
  if (!best || weight < best.weight) {
21601
21908
  best = { selection: { leaf, sequence }, weight };
@@ -21815,7 +22122,7 @@ async function prepareUnrollTransaction(wallet, vtxoTxIds, outputAddress) {
21815
22122
  let totalAmount = 0n;
21816
22123
  const txWeightEstimator = TxWeightEstimator.create();
21817
22124
  for (const vtxo of vtxos) {
21818
- if (!chunk6AFUNKK7_cjs.canSweepOnchain(vtxo)) {
22125
+ if (!chunkJZWLXNHV_cjs.canSweepOnchain(vtxo)) {
21819
22126
  throw new Error(
21820
22127
  `Vtxo ${vtxo.txid}:${vtxo.vout} cannot be swept onchain: it is not fully unrolled (use unroll first), or its exit output was already spent`
21821
22128
  );
@@ -21826,14 +22133,14 @@ async function prepareUnrollTransaction(wallet, vtxoTxIds, outputAddress) {
21826
22133
  }
21827
22134
  const resolved = await resolveUnilateralPath({
21828
22135
  vtxo,
21829
- scriptHex: base.hex.encode(chunk6AFUNKK7_cjs.VtxoScript.decode(vtxo.tapTree).pkScript),
22136
+ scriptHex: base.hex.encode(chunkJZWLXNHV_cjs.VtxoScript.decode(vtxo.tapTree).pkScript),
21830
22137
  contractRepository: wallet.contractRepository,
21831
22138
  walletPubKeyHex: base.hex.encode(await wallet.identity.xOnlyPublicKey()),
21832
22139
  currentTime: Date.now()
21833
22140
  });
21834
22141
  const spendingLeaf = resolved.selection.leaf;
21835
22142
  const sequence = resolved.selection.sequence;
21836
- const timelock = chunk6AFUNKK7_cjs.sequenceToTimelock(sequence);
22143
+ const timelock = chunkJZWLXNHV_cjs.sequenceToTimelock(sequence);
21837
22144
  const elapsed = timelock.type === "blocks" ? chainTip.height >= txStatus.blockHeight + Number(timelock.value) : chainTip.time >= txStatus.blockTime + Number(timelock.value);
21838
22145
  if (!elapsed) {
21839
22146
  throw new Error(`no available exit path found for vtxo ${vtxo.txid}:${vtxo.vout}`);
@@ -21846,7 +22153,7 @@ async function prepareUnrollTransaction(wallet, vtxoTxIds, outputAddress) {
21846
22153
  sequence,
21847
22154
  witnessUtxo: {
21848
22155
  amount: BigInt(vtxo.value),
21849
- script: chunk6AFUNKK7_cjs.VtxoScript.decode(vtxo.tapTree).pkScript
22156
+ script: chunkJZWLXNHV_cjs.VtxoScript.decode(vtxo.tapTree).pkScript
21850
22157
  },
21851
22158
  sighashType: btcSigner.SigHash.DEFAULT
21852
22159
  });
@@ -21856,7 +22163,7 @@ async function prepareUnrollTransaction(wallet, vtxoTxIds, outputAddress) {
21856
22163
  btcSigner.TaprootControlBlock.encode(spendingLeaf[0]).length
21857
22164
  );
21858
22165
  }
21859
- const tx = new chunk6AFUNKK7_cjs.Transaction({ version: 2 });
22166
+ const tx = new chunkJZWLXNHV_cjs.Transaction({ version: 2 });
21860
22167
  for (const input of inputs) {
21861
22168
  tx.addInput(input);
21862
22169
  }
@@ -21939,7 +22246,7 @@ async function buildSignedSweep(params) {
21939
22246
  `uneconomic vtxo ${vtxo.txid}:${vtxo.vout}: value ${vtxo.value} - fee ${fee} < dust`
21940
22247
  );
21941
22248
  }
21942
- const tx = new chunk6AFUNKK7_cjs.Transaction({ version: 2 });
22249
+ const tx = new chunkJZWLXNHV_cjs.Transaction({ version: 2 });
21943
22250
  tx.addInput({
21944
22251
  txid: vtxo.txid,
21945
22252
  index: vtxo.vout,
@@ -21964,7 +22271,7 @@ async function buildSignedSweep(params) {
21964
22271
  finalScriptWitness: [
21965
22272
  tapScriptSig[0][1],
21966
22273
  ...path.extraWitness,
21967
- chunk6AFUNKK7_cjs.scriptFromTapLeafScript(path.leaf),
22274
+ chunkJZWLXNHV_cjs.scriptFromTapLeafScript(path.leaf),
21968
22275
  btcSigner.TaprootControlBlock.encode(controlBlock)
21969
22276
  ]
21970
22277
  });
@@ -21994,7 +22301,7 @@ async function resolveFeeRate(opts) {
21994
22301
  }
21995
22302
  async function selectExitVtxos(opts) {
21996
22303
  if (!opts.vtxos) return opts.wallet.getVtxos();
21997
- const res = await chunk6AFUNKK7_cjs.getNormalizedVtxos(opts.wallet.indexerProvider, { outpoints: opts.vtxos });
22304
+ const res = await chunkJZWLXNHV_cjs.getNormalizedVtxos(opts.wallet.indexerProvider, { outpoints: opts.vtxos });
21998
22305
  const tapTrees = /* @__PURE__ */ new Map();
21999
22306
  const out = [];
22000
22307
  for (const vtxo of res.vtxos) {
@@ -22009,7 +22316,7 @@ async function selectExitVtxos(opts) {
22009
22316
  `no contract registered for vtxo script ${vtxo.script} \u2014 register the contract before exiting`
22010
22317
  );
22011
22318
  }
22012
- const handler = chunkHL7EC2Z5_cjs.contractHandlers.get(contract.type);
22319
+ const handler = chunk43FKNLX4_cjs.contractHandlers.get(contract.type);
22013
22320
  if (!handler) {
22014
22321
  throw new Error(`no contract handler registered for type '${contract.type}'`);
22015
22322
  }
@@ -22039,7 +22346,7 @@ async function computeExitLayout(opts, feeRate) {
22039
22346
  if (pendingNodes.length > 0) {
22040
22347
  const txs = await resolver.getVirtualTxs(pendingNodes.map((n) => n.txid));
22041
22348
  for (const psbt of txs) {
22042
- psbts.set(chunk6AFUNKK7_cjs.Transaction.fromPSBT(base.base64.decode(psbt)).id, psbt);
22349
+ psbts.set(chunkJZWLXNHV_cjs.Transaction.fromPSBT(base.base64.decode(psbt)).id, psbt);
22043
22350
  }
22044
22351
  }
22045
22352
  const childVsize = Number(
@@ -22075,7 +22382,7 @@ async function computeExitLayout(opts, feeRate) {
22075
22382
  try {
22076
22383
  const resolved = await resolveUnilateralPath({
22077
22384
  vtxo,
22078
- scriptHex: base.hex.encode(chunk6AFUNKK7_cjs.VtxoScript.decode(vtxo.tapTree).pkScript),
22385
+ scriptHex: base.hex.encode(chunkJZWLXNHV_cjs.VtxoScript.decode(vtxo.tapTree).pkScript),
22079
22386
  contractRepository: wallet.contractRepository,
22080
22387
  walletPubKeyHex,
22081
22388
  currentTime: Date.now()
@@ -22094,7 +22401,7 @@ async function computeExitLayout(opts, feeRate) {
22094
22401
  });
22095
22402
  continue;
22096
22403
  }
22097
- const t = chunk6AFUNKK7_cjs.sequenceToTimelock(resolved.selection.sequence);
22404
+ const t = chunkJZWLXNHV_cjs.sequenceToTimelock(resolved.selection.sequence);
22098
22405
  const delay = { type: t.type, value: Number(t.value) };
22099
22406
  infos.push({ outpoint, value: vtxo.value, sweepFee, path: resolved.label, delay });
22100
22407
  sweeps.push({ vtxo, resolved, sweepFee, delay });
@@ -22495,7 +22802,7 @@ async function prepare(opts) {
22495
22802
  txid: sweep.vtxo.txid,
22496
22803
  vout: sweep.vtxo.vout,
22497
22804
  value: sweep.vtxo.value,
22498
- pkScript: chunk6AFUNKK7_cjs.VtxoScript.decode(sweep.vtxo.tapTree).pkScript
22805
+ pkScript: chunkJZWLXNHV_cjs.VtxoScript.decode(sweep.vtxo.tapTree).pkScript
22499
22806
  },
22500
22807
  path: sweep.resolved.selection,
22501
22808
  outputAddress: opts.sweepAddress,
@@ -22583,7 +22890,7 @@ async function prepare(opts) {
22583
22890
  if (newFee <= splitterFee) break;
22584
22891
  splitterFee = newFee;
22585
22892
  }
22586
- const splitter = new chunk6AFUNKK7_cjs.Transaction({ version: 2 });
22893
+ const splitter = new chunkJZWLXNHV_cjs.Transaction({ version: 2 });
22587
22894
  for (const coin of selected.inputs) {
22588
22895
  splitter.addInput({
22589
22896
  txid: coin.txid,
@@ -22727,41 +23034,41 @@ var UnilateralExit = {
22727
23034
  // src/arkade/index.ts
22728
23035
  var arkade_exports = {};
22729
23036
  chunk5BLDMQED_cjs.__export(arkade_exports, {
22730
- ARKADE_OP: () => chunkHL7EC2Z5_cjs.ARKADE_OP,
22731
- ARKADE_OPCODES: () => chunkHL7EC2Z5_cjs.ARKADE_OPCODES,
22732
- ARKADE_OPCODE_NAMES: () => chunkHL7EC2Z5_cjs.ARKADE_OPCODE_NAMES,
22733
- ARKADE_OPCODE_VALUES: () => chunkHL7EC2Z5_cjs.ARKADE_OPCODE_VALUES,
22734
- ARKADE_OPS: () => chunkHL7EC2Z5_cjs.ARKADE_OPS,
23037
+ ARKADE_OP: () => chunk43FKNLX4_cjs.ARKADE_OP,
23038
+ ARKADE_OPCODES: () => chunk43FKNLX4_cjs.ARKADE_OPCODES,
23039
+ ARKADE_OPCODE_NAMES: () => chunk43FKNLX4_cjs.ARKADE_OPCODE_NAMES,
23040
+ ARKADE_OPCODE_VALUES: () => chunk43FKNLX4_cjs.ARKADE_OPCODE_VALUES,
23041
+ ARKADE_OPS: () => chunk43FKNLX4_cjs.ARKADE_OPS,
22735
23042
  Arkade: () => Arkade,
22736
23043
  ArkadeContract: () => ArkadeContract,
22737
- ArkadeProgramScript: () => chunkHL7EC2Z5_cjs.ArkadeProgramScript,
22738
- ArkadeScript: () => chunkHL7EC2Z5_cjs.ArkadeScript,
23044
+ ArkadeProgramScript: () => chunk43FKNLX4_cjs.ArkadeProgramScript,
23045
+ ArkadeScript: () => chunk43FKNLX4_cjs.ArkadeScript,
22739
23046
  ArkadeTransactionBuilder: () => ArkadeTransactionBuilder,
22740
- BigNum: () => chunkHL7EC2Z5_cjs.bignum_exports,
23047
+ BigNum: () => chunk43FKNLX4_cjs.bignum_exports,
22741
23048
  OP: () => btcSigner.OP,
22742
- OPCODE_NAMES: () => chunkHL7EC2Z5_cjs.OPCODE_NAMES,
22743
- OPCODE_VALUES: () => chunkHL7EC2Z5_cjs.OPCODE_VALUES,
22744
- SUPPORTED_PROGRAM_VERSION: () => chunkHL7EC2Z5_cjs.SUPPORTED_PROGRAM_VERSION,
23049
+ OPCODE_NAMES: () => chunk43FKNLX4_cjs.OPCODE_NAMES,
23050
+ OPCODE_VALUES: () => chunk43FKNLX4_cjs.OPCODE_VALUES,
23051
+ SUPPORTED_PROGRAM_VERSION: () => chunk43FKNLX4_cjs.SUPPORTED_PROGRAM_VERSION,
22745
23052
  Script: () => btcSigner.Script,
22746
- arkadeScriptHash: () => chunkHL7EC2Z5_cjs.arkadeScriptHash,
22747
- arkadeWitnessHash: () => chunkHL7EC2Z5_cjs.arkadeWitnessHash,
22748
- asmToBytes: () => chunkHL7EC2Z5_cjs.asmToBytes,
22749
- bytesToASM: () => chunkHL7EC2Z5_cjs.bytesToASM,
22750
- computeArkadeScriptPublicKey: () => chunkHL7EC2Z5_cjs.computeArkadeScriptPublicKey,
23053
+ arkadeScriptHash: () => chunk43FKNLX4_cjs.arkadeScriptHash,
23054
+ arkadeWitnessHash: () => chunk43FKNLX4_cjs.arkadeWitnessHash,
23055
+ asmToBytes: () => chunk43FKNLX4_cjs.asmToBytes,
23056
+ bytesToASM: () => chunk43FKNLX4_cjs.bytesToASM,
23057
+ computeArkadeScriptPublicKey: () => chunk43FKNLX4_cjs.computeArkadeScriptPublicKey,
22751
23058
  createArkadeBatchHandler: () => createArkadeBatchHandler,
22752
- deserializeArkadeContractParams: () => chunkHL7EC2Z5_cjs.deserializeArkadeContractParams,
22753
- fromASM: () => chunkHL7EC2Z5_cjs.fromASM,
22754
- getOpcodeName: () => chunkHL7EC2Z5_cjs.getOpcodeName,
22755
- getOpcodeValue: () => chunkHL7EC2Z5_cjs.getOpcodeValue,
22756
- parseArtifact: () => chunkHL7EC2Z5_cjs.parseArtifact,
22757
- resolveAsm: () => chunkHL7EC2Z5_cjs.resolveAsm,
22758
- serializeArkadeContractParams: () => chunkHL7EC2Z5_cjs.serializeArkadeContractParams,
22759
- stringifyArtifact: () => chunkHL7EC2Z5_cjs.stringifyArtifact,
22760
- toASM: () => chunkHL7EC2Z5_cjs.toASM,
22761
- validateProgram: () => chunkHL7EC2Z5_cjs.validateProgram,
22762
- witnessRefToBytes: () => chunkHL7EC2Z5_cjs.witnessRefToBytes
23059
+ deserializeArkadeContractParams: () => chunk43FKNLX4_cjs.deserializeArkadeContractParams,
23060
+ fromASM: () => chunk43FKNLX4_cjs.fromASM,
23061
+ getOpcodeName: () => chunk43FKNLX4_cjs.getOpcodeName,
23062
+ getOpcodeValue: () => chunk43FKNLX4_cjs.getOpcodeValue,
23063
+ parseArtifact: () => chunk43FKNLX4_cjs.parseArtifact,
23064
+ resolveAsm: () => chunk43FKNLX4_cjs.resolveAsm,
23065
+ serializeArkadeContractParams: () => chunk43FKNLX4_cjs.serializeArkadeContractParams,
23066
+ stringifyArtifact: () => chunk43FKNLX4_cjs.stringifyArtifact,
23067
+ toASM: () => chunk43FKNLX4_cjs.toASM,
23068
+ validateProgram: () => chunk43FKNLX4_cjs.validateProgram,
23069
+ witnessRefToBytes: () => chunk43FKNLX4_cjs.witnessRefToBytes
22763
23070
  });
22764
- var isVtxoCoin = (input) => chunk6AFUNKK7_cjs.isVirtualCoin(input);
23071
+ var isVtxoCoin = (input) => chunkJZWLXNHV_cjs.isVirtualCoin(input);
22765
23072
  function createArkadeBatchHandler(intentId, inputs, signer, signedProof, message, session, arkProvider, emulator, network, recipients, batchExpiryPolicy) {
22766
23073
  let batchId;
22767
23074
  let sweepTapTreeRoot;
@@ -22782,23 +23089,23 @@ function createArkadeBatchHandler(intentId, inputs, signer, signedProof, message
22782
23089
  );
22783
23090
  await arkProvider.confirmRegistration(intentId);
22784
23091
  batchId = event.id;
22785
- const sweepTapscript = chunk6AFUNKK7_cjs.CSVMultisigTapscript.encode({
23092
+ const sweepTapscript = chunkJZWLXNHV_cjs.CSVMultisigTapscript.encode({
22786
23093
  timelock,
22787
- pubkeys: [chunkHL7EC2Z5_cjs.toXOnly(base.hex.decode(info.forfeitPubkey), "forfeit key")]
23094
+ pubkeys: [chunk43FKNLX4_cjs.toXOnly(base.hex.decode(info.forfeitPubkey), "forfeit key")]
22788
23095
  }).script;
22789
23096
  sweepTapTreeRoot = payment_js.tapLeafHash(sweepTapscript);
22790
23097
  return { skip: false };
22791
23098
  },
22792
23099
  onTreeSigningStarted: async (event, vtxoTree) => {
22793
23100
  const signerPubKey = await session.getPublicKey();
22794
- const xonlySignerPubKey = chunkHL7EC2Z5_cjs.toXOnly(signerPubKey, "signer key");
23101
+ const xonlySignerPubKey = chunk43FKNLX4_cjs.toXOnly(signerPubKey, "signer key");
22795
23102
  const xOnlyPubkeys = event.cosignersPublicKeys.map(
22796
- (k) => base.hex.encode(chunkHL7EC2Z5_cjs.toXOnly(base.hex.decode(k), "cosigner key"))
23103
+ (k) => base.hex.encode(chunk43FKNLX4_cjs.toXOnly(base.hex.decode(k), "cosigner key"))
22797
23104
  );
22798
23105
  if (!xOnlyPubkeys.includes(base.hex.encode(xonlySignerPubKey))) {
22799
23106
  return { skip: true };
22800
23107
  }
22801
- const commitmentTx = chunk6AFUNKK7_cjs.Transaction.fromPSBT(base.base64.decode(event.unsignedCommitmentTx));
23108
+ const commitmentTx = chunkJZWLXNHV_cjs.Transaction.fromPSBT(base.base64.decode(event.unsignedCommitmentTx));
22802
23109
  validateVtxoTxGraph(vtxoTree, commitmentTx, sweepTapTreeRoot);
22803
23110
  if (recipients && recipients.length > 0) {
22804
23111
  validateBatchRecipients(commitmentTx, vtxoTree.leaves(), recipients, network);
@@ -22830,7 +23137,7 @@ function createArkadeBatchHandler(intentId, inputs, signer, signedProof, message
22830
23137
  if (connectorTree) {
22831
23138
  validateConnectorsTxGraph(event.commitmentTx, connectorTree);
22832
23139
  }
22833
- let commitmentPsbt = chunk6AFUNKK7_cjs.Transaction.fromPSBT(base.base64.decode(event.commitmentTx));
23140
+ let commitmentPsbt = chunkJZWLXNHV_cjs.Transaction.fromPSBT(base.base64.decode(event.commitmentTx));
22834
23141
  assertFinalCommitmentMatchesValidated(
22835
23142
  commitmentPsbt,
22836
23143
  validatedCommitmentTxid,
@@ -22865,7 +23172,7 @@ function createArkadeBatchHandler(intentId, inputs, signer, signedProof, message
22865
23172
  boardingIndices.push(boardingIdx);
22866
23173
  continue;
22867
23174
  }
22868
- if (chunk6AFUNKK7_cjs.isRecoverable(input) || isSubdust(input, info.dust)) {
23175
+ if (chunkJZWLXNHV_cjs.isRecoverable(input) || isSubdust(input, info.dust)) {
22869
23176
  continue;
22870
23177
  }
22871
23178
  if (connectorIndex >= connectorLeaves.length) {
@@ -22886,7 +23193,7 @@ function createArkadeBatchHandler(intentId, inputs, signer, signedProof, message
22886
23193
  index: input.vout,
22887
23194
  witnessUtxo: {
22888
23195
  amount: BigInt(input.value),
22889
- script: chunk6AFUNKK7_cjs.VtxoScript.decode(input.tapTree).pkScript
23196
+ script: chunkJZWLXNHV_cjs.VtxoScript.decode(input.tapTree).pkScript
22890
23197
  },
22891
23198
  sighashType: btcSigner.SigHash.DEFAULT,
22892
23199
  tapLeafScript: [input.forfeitTapLeafScript]
@@ -22977,16 +23284,16 @@ var Arkade = class _Arkade {
22977
23284
  /** Connect and resolve the server key, checkpoint closure and (if present) the co-signer key. */
22978
23285
  static async connect(opts) {
22979
23286
  const info = await opts.arkade.getInfo();
22980
- const serverKey = chunkHL7EC2Z5_cjs.toXOnly(base.hex.decode(info.signerPubkey), "ark signer key");
22981
- const checkpoint = chunk6AFUNKK7_cjs.CSVMultisigTapscript.decode(base.hex.decode(info.checkpointTapscript));
22982
- const network = opts.network ?? chunk6AFUNKK7_cjs.DEFAULT_NETWORK;
23287
+ const serverKey = chunk43FKNLX4_cjs.toXOnly(base.hex.decode(info.signerPubkey), "ark signer key");
23288
+ const checkpoint = chunkJZWLXNHV_cjs.CSVMultisigTapscript.decode(base.hex.decode(info.checkpointTapscript));
23289
+ const network = opts.network ?? chunkJZWLXNHV_cjs.DEFAULT_NETWORK;
22983
23290
  let emulatorKey;
22984
23291
  if (opts.emulator) {
22985
- emulatorKey = base.hex.decode(chunk6AFUNKK7_cjs.resolveEmulatorPubkey(network, opts.emulatorPubkey));
23292
+ emulatorKey = base.hex.decode(chunkJZWLXNHV_cjs.resolveEmulatorPubkey(network, opts.emulatorPubkey));
22986
23293
  }
22987
23294
  let userKey;
22988
23295
  if (opts.identity) {
22989
- userKey = chunkHL7EC2Z5_cjs.toXOnly(await opts.identity.xOnlyPublicKey(), "identity key");
23296
+ userKey = chunk43FKNLX4_cjs.toXOnly(await opts.identity.xOnlyPublicKey(), "identity key");
22990
23297
  }
22991
23298
  return new _Arkade({
22992
23299
  arkProvider: opts.arkade,
@@ -23012,7 +23319,7 @@ var Arkade = class _Arkade {
23012
23319
  * key respectively; explicit args always win.
23013
23320
  */
23014
23321
  contract(program, args = {}) {
23015
- const declared = (program.params ?? []).map(chunkHL7EC2Z5_cjs.inputName);
23322
+ const declared = (program.params ?? []).map(chunk43FKNLX4_cjs.inputName);
23016
23323
  if (declared.includes("server") && args.server === void 0) {
23017
23324
  args = { ...args, server: this.serverKey };
23018
23325
  }
@@ -23032,7 +23339,7 @@ var ArkadeContract = class _ArkadeContract {
23032
23339
  userKey: client.userKey,
23033
23340
  emulatorKey: client.emulatorKey
23034
23341
  };
23035
- this.vtxoScript = new chunkHL7EC2Z5_cjs.ArkadeProgramScript(program, args, this.keys);
23342
+ this.vtxoScript = new chunk43FKNLX4_cjs.ArkadeProgramScript(program, args, this.keys);
23036
23343
  this.tapTree = this.vtxoScript.encode();
23037
23344
  this.compiled = this.vtxoScript.compiled;
23038
23345
  }
@@ -23060,7 +23367,7 @@ var ArkadeContract = class _ArkadeContract {
23060
23367
  `ArkadeContract.fromContract: expected contract type 'arkade', got '${contract.type}'`
23061
23368
  );
23062
23369
  }
23063
- const typed = chunkHL7EC2Z5_cjs.deserializeArkadeContractParams(contract.params);
23370
+ const typed = chunk43FKNLX4_cjs.deserializeArkadeContractParams(contract.params);
23064
23371
  return new _ArkadeContract(client, typed.program, typed.args, {
23065
23372
  serverKey: typed.serverKey,
23066
23373
  userKey: typed.userKey,
@@ -23101,7 +23408,7 @@ var ArkadeContract = class _ArkadeContract {
23101
23408
  toContractParams() {
23102
23409
  return {
23103
23410
  type: "arkade",
23104
- params: chunkHL7EC2Z5_cjs.serializeArkadeContractParams({
23411
+ params: chunk43FKNLX4_cjs.serializeArkadeContractParams({
23105
23412
  program: this.program,
23106
23413
  args: this.args,
23107
23414
  serverKey: this.keys.serverKey,
@@ -23151,18 +23458,18 @@ var ArkadeContract = class _ArkadeContract {
23151
23458
  if (registered) {
23152
23459
  const [withVtxos] = await manager.getContractsWithVtxos({ script: scriptHex });
23153
23460
  return (withVtxos?.vtxos ?? []).filter(
23154
- (v) => !chunk6AFUNKK7_cjs.hasTerminalSpend(v) && !v.isUnrolled
23461
+ (v) => !chunkJZWLXNHV_cjs.hasTerminalSpend(v) && !v.isUnrolled
23155
23462
  );
23156
23463
  }
23157
23464
  }
23158
23465
  if (!this.client.indexer) {
23159
23466
  throw new Error("ArkadeContract.getUtxos: an indexer is required");
23160
23467
  }
23161
- const { vtxos } = await chunk6AFUNKK7_cjs.getNormalizedVtxos(this.client.indexer, {
23468
+ const { vtxos } = await chunkJZWLXNHV_cjs.getNormalizedVtxos(this.client.indexer, {
23162
23469
  scripts: [scriptHex],
23163
23470
  spendableOnly: true
23164
23471
  });
23165
- return vtxos.filter((v) => !chunk6AFUNKK7_cjs.hasTerminalSpend(v) && !v.isUnrolled);
23472
+ return vtxos.filter((v) => !chunkJZWLXNHV_cjs.hasTerminalSpend(v) && !v.isUnrolled);
23166
23473
  }
23167
23474
  /** Total spendable balance (requires an indexer). */
23168
23475
  async getBalance() {
@@ -23260,7 +23567,7 @@ var ArkadeTransactionBuilder = class {
23260
23567
  this.contract.client.checkpoint
23261
23568
  );
23262
23569
  if (coin.sourceTx) {
23263
- chunk6AFUNKK7_cjs.setArkPsbtField(arkTx, 0, chunk6AFUNKK7_cjs.PrevArkTxField, coin.sourceTx);
23570
+ chunkJZWLXNHV_cjs.setArkPsbtField(arkTx, 0, chunkJZWLXNHV_cjs.PrevArkTxField, coin.sourceTx);
23264
23571
  }
23265
23572
  if (this.fn.arkadeScript) {
23266
23573
  const indexer = this.contract.client.indexer;
@@ -23277,8 +23584,8 @@ var ArkadeTransactionBuilder = class {
23277
23584
  }
23278
23585
  const condition = (def.tapscript.witness ?? []).map((w) => this.witnessBytes(w));
23279
23586
  if (condition.length > 0) {
23280
- chunk6AFUNKK7_cjs.setArkPsbtField(arkTx, 0, chunk6AFUNKK7_cjs.ConditionWitness, condition);
23281
- chunk6AFUNKK7_cjs.setArkPsbtField(checkpoints[0], 0, chunk6AFUNKK7_cjs.ConditionWitness, condition);
23587
+ chunkJZWLXNHV_cjs.setArkPsbtField(arkTx, 0, chunkJZWLXNHV_cjs.ConditionWitness, condition);
23588
+ chunkJZWLXNHV_cjs.setArkPsbtField(checkpoints[0], 0, chunkJZWLXNHV_cjs.ConditionWitness, condition);
23282
23589
  }
23283
23590
  const packets = [];
23284
23591
  if (this.assetSpecs.length > 0) {
@@ -23317,7 +23624,7 @@ var ArkadeTransactionBuilder = class {
23317
23624
  base.base64.encode(signedArk2.toPSBT()),
23318
23625
  signedCps.map((c) => base.base64.encode(c.toPSBT()))
23319
23626
  );
23320
- const txid = chunk6AFUNKK7_cjs.Transaction.fromPSBT(base.base64.decode(res2.signedArkTx)).id;
23627
+ const txid = chunkJZWLXNHV_cjs.Transaction.fromPSBT(base.base64.decode(res2.signedArkTx)).id;
23321
23628
  return {
23322
23629
  txid,
23323
23630
  signedArkTx: res2.signedArkTx,
@@ -23382,23 +23689,23 @@ var ArkadeTransactionBuilder = class {
23382
23689
  }
23383
23690
  buildAssetPacket() {
23384
23691
  const groups = this.assetSpecs.map((s) => {
23385
- const id = typeof s.assetId === "string" ? chunkCZ32XADN_cjs.AssetId.fromString(s.assetId) : chunkCZ32XADN_cjs.AssetId.fromBytes(s.assetId);
23386
- return chunkCZ32XADN_cjs.AssetGroup.create(
23692
+ const id = typeof s.assetId === "string" ? chunkNVZJSKZS_cjs.AssetId.fromString(s.assetId) : chunkNVZJSKZS_cjs.AssetId.fromBytes(s.assetId);
23693
+ return chunkNVZJSKZS_cjs.AssetGroup.create(
23387
23694
  id,
23388
23695
  null,
23389
- s.inputs.map((i) => chunkCZ32XADN_cjs.AssetInput.create(i.vin, i.amount)),
23390
- s.outputs.map((o) => chunkCZ32XADN_cjs.AssetOutput.create(o.vout, o.amount)),
23391
- (s.metadata ?? []).map((m) => chunkCZ32XADN_cjs.Metadata.create(m.key, m.value))
23696
+ s.inputs.map((i) => chunkNVZJSKZS_cjs.AssetInput.create(i.vin, i.amount)),
23697
+ s.outputs.map((o) => chunkNVZJSKZS_cjs.AssetOutput.create(o.vout, o.amount)),
23698
+ (s.metadata ?? []).map((m) => chunkNVZJSKZS_cjs.Metadata.create(m.key, m.value))
23392
23699
  );
23393
23700
  });
23394
- return chunkCZ32XADN_cjs.Packet.create(groups);
23701
+ return chunkNVZJSKZS_cjs.Packet.create(groups);
23395
23702
  }
23396
23703
  witnessBytes(ref) {
23397
- return chunkHL7EC2Z5_cjs.witnessRefToBytes(ref, this.args, this.contract.args);
23704
+ return chunk43FKNLX4_cjs.witnessRefToBytes(ref, this.args, this.contract.args);
23398
23705
  }
23399
23706
  };
23400
23707
  function bindInputs(fn, callArgs) {
23401
- const names = (fn.def.inputs ?? []).map(chunkHL7EC2Z5_cjs.inputName);
23708
+ const names = (fn.def.inputs ?? []).map(chunk43FKNLX4_cjs.inputName);
23402
23709
  if (callArgs.length !== names.length) {
23403
23710
  throw new Error(`${fn.name}: expected ${names.length} argument(s), got ${callArgs.length}`);
23404
23711
  }
@@ -23592,6 +23899,33 @@ function tryResolveSendAmount(raw, amount) {
23592
23899
  const amt = amount ?? BIP21.amountSats(raw);
23593
23900
  return amt !== void 0 && Number.isInteger(amt) && amt > 0 ? amt : void 0;
23594
23901
  }
23902
+ function assetsOf(req) {
23903
+ return req.assets ?? [];
23904
+ }
23905
+ function assertNoAssets(railId, req) {
23906
+ const assets = assetsOf(req);
23907
+ if (assets.length > 0) {
23908
+ throw new Error(
23909
+ `${railId}: cannot deliver ${assets.map((a) => a.assetId).join(", ")} \u2014 this rail moves BTC only`
23910
+ );
23911
+ }
23912
+ }
23913
+ function resolveAssetAmount(railId, req) {
23914
+ const assets = assetsOf(req);
23915
+ if (assets.length !== 1) {
23916
+ throw new Error(`${railId}: expected exactly one asset to pay, got ${assets.length}`);
23917
+ }
23918
+ const [asset] = assets;
23919
+ if (typeof asset.amount !== "bigint" || asset.amount <= 0n) {
23920
+ throw new Error(
23921
+ `${railId}: invalid amount ${String(asset.amount)} of ${asset.assetId} (expected a positive bigint of atomic units)`
23922
+ );
23923
+ }
23924
+ if (typeof asset.assetId !== "string" || asset.assetId.length === 0) {
23925
+ throw new Error(`${railId}: an asset amount must name an asset`);
23926
+ }
23927
+ return asset;
23928
+ }
23595
23929
 
23596
23930
  // src/payment/handle.ts
23597
23931
  function makeHandle(id, run) {
@@ -23714,8 +24048,10 @@ function arkRail() {
23714
24048
  return {
23715
24049
  id: "ark",
23716
24050
  match: (req) => arkTarget(req.raw) !== void 0,
24051
+ available: (req) => assetsOf(req).length === 0,
23717
24052
  quote: async (req, ctx) => {
23718
24053
  const address = arkTarget(req.raw);
24054
+ assertNoAssets("ark", req);
23719
24055
  const amt = resolveSendAmount("ark", req.raw, req.amount);
23720
24056
  return {
23721
24057
  railId: "ark",
@@ -23732,6 +24068,40 @@ function arkRail() {
23732
24068
  }
23733
24069
  };
23734
24070
  }
24071
+
24072
+ // src/payment/rails/arkAsset.ts
24073
+ var ASSET_CARRIER_SATS = 330;
24074
+ function arkAssetRail() {
24075
+ return {
24076
+ id: "ark-asset",
24077
+ match: (req) => arkTarget(req.raw) !== void 0,
24078
+ // A malformed asset is `quote()`'s to name, not this rail's to drop.
24079
+ available: (req) => assetsOf(req).length > 0,
24080
+ quote: async (req, ctx) => {
24081
+ const address = arkTarget(req.raw);
24082
+ const asset = resolveAssetAmount("ark-asset", req);
24083
+ if (req.amount !== void 0) assertSendableAmount("ark-asset", req.amount);
24084
+ const carrier = tryResolveSendAmount(req.raw, req.amount) ?? ASSET_CARRIER_SATS;
24085
+ return {
24086
+ railId: "ark-asset",
24087
+ amount: carrier,
24088
+ fee: 0,
24089
+ total: carrier,
24090
+ assets: { delivered: asset, spent: asset },
24091
+ send: async () => makeHandle("ark-asset", async (emit) => {
24092
+ const txid = await ctx.wallet.send({
24093
+ address,
24094
+ amount: carrier,
24095
+ assets: [asset]
24096
+ });
24097
+ const result = { railId: "ark-asset", txid };
24098
+ emit({ status: "settled", result });
24099
+ return result;
24100
+ })
24101
+ };
24102
+ }
24103
+ };
24104
+ }
23735
24105
  var GROSS_UP_MAX_ROUNDS = 8;
23736
24106
  function grossUpOffboard(net, feeInfo, script) {
23737
24107
  const estimator = new Estimator(feeInfo?.intentFee ?? {});
@@ -23748,7 +24118,10 @@ function onchainRail() {
23748
24118
  return {
23749
24119
  id: "onchain",
23750
24120
  match: (req) => btcTarget(req.raw) !== void 0,
24121
+ // BTC only: an Arkade asset has no L1 representation to offboard to.
24122
+ available: (req) => assetsOf(req).length === 0,
23751
24123
  quote: async (req, ctx) => {
24124
+ assertNoAssets("onchain", req);
23752
24125
  const address = btcTarget(req.raw);
23753
24126
  const amt = resolveSendAmount("onchain", req.raw, req.amount);
23754
24127
  const { fees } = await ctx.wallet.arkProvider.getInfo();
@@ -23778,8 +24151,8 @@ function onchainRail() {
23778
24151
  function createDefaultPaymentRouter(wallet) {
23779
24152
  return new PaymentRouter({
23780
24153
  wallet,
23781
- prefs: { priority: ["ark", "onchain"] }
23782
- }).use(arkRail()).use(onchainRail());
24154
+ prefs: { priority: ["ark", "ark-asset", "onchain"] }
24155
+ }).use(arkRail()).use(arkAssetRail()).use(onchainRail());
23783
24156
  }
23784
24157
  /*! Bundled license information:
23785
24158
 
@@ -23790,6 +24163,8 @@ function createDefaultPaymentRouter(wallet) {
23790
24163
  exports.ARKADE_MAGIC = ARKADE_MAGIC;
23791
24164
  exports.ARKADE_SALTED_PREIMAGE_TAG = ARKADE_SALTED_PREIMAGE_TAG;
23792
24165
  exports.ARKADE_SWAP_PREIMAGE_TAG = ARKADE_SWAP_PREIMAGE_TAG;
24166
+ exports.ASSET_CARRIER_SATS = ASSET_CARRIER_SATS;
24167
+ exports.AbortError = AbortError;
23793
24168
  exports.ActivityRegistry = ActivityRegistry;
23794
24169
  exports.AmbiguousRouteError = AmbiguousRouteError;
23795
24170
  exports.ArkNote = ArkNote;
@@ -23883,17 +24258,20 @@ exports.WalletNotInitializedError = WalletNotInitializedError;
23883
24258
  exports.WalletRepositoryImpl = WalletRepositoryImpl;
23884
24259
  exports.WsElectrumChainSource = WsElectrumChainSource;
23885
24260
  exports.adoptContractDescriptor = adoptContractDescriptor;
24261
+ exports.arkAssetRail = arkAssetRail;
23886
24262
  exports.arkRail = arkRail;
23887
24263
  exports.arkTarget = arkTarget;
23888
24264
  exports.arkade_exports = arkade_exports;
23889
24265
  exports.assertFinalCommitmentMatchesValidated = assertFinalCommitmentMatchesValidated;
23890
24266
  exports.assertIntentIdUnique = assertIntentIdUnique;
24267
+ exports.assertNoAssets = assertNoAssets;
23891
24268
  exports.assertRecipientArkadeAddress = assertRecipientArkadeAddress;
23892
24269
  exports.assertSendableAmount = assertSendableAmount;
23893
24270
  exports.assertSubmittedArkTxid = assertSubmittedArkTxid;
23894
24271
  exports.assertValidBatchExpiry = assertValidBatchExpiry;
23895
24272
  exports.assertValidServerUnrollScript = assertValidServerUnrollScript;
23896
24273
  exports.assetMintResolver = assetMintResolver;
24274
+ exports.assetsOf = assetsOf;
23897
24275
  exports.attachPrevArkTxs = attachPrevArkTxs;
23898
24276
  exports.attachPrevoutTxs = attachPrevoutTxs;
23899
24277
  exports.awaitTransaction = awaitTransaction;
@@ -23977,6 +24355,7 @@ exports.promisifyRequest = promisifyRequest;
23977
24355
  exports.provisionClaimSecret = provisionClaimSecret;
23978
24356
  exports.provisionRefundKey = provisionRefundKey;
23979
24357
  exports.requiresMigration = requiresMigration;
24358
+ exports.resolveAssetAmount = resolveAssetAmount;
23980
24359
  exports.resolveBatchExpiryPolicy = resolveBatchExpiryPolicy;
23981
24360
  exports.resolveCheckpointExitDelayPolicy = resolveCheckpointExitDelayPolicy;
23982
24361
  exports.resolveDescriptorSigner = resolveDescriptorSigner;
@@ -24005,5 +24384,5 @@ exports.verifyTapscriptSignatures = verifyTapscriptSignatures;
24005
24384
  exports.waitForIncomingFunds = waitForIncomingFunds;
24006
24385
  exports.warnAndFilterVtxosForScript = warnAndFilterVtxosForScript;
24007
24386
  exports.withPrevTxs = withPrevTxs;
24008
- //# sourceMappingURL=chunk-5MJHZHG7.cjs.map
24009
- //# sourceMappingURL=chunk-5MJHZHG7.cjs.map
24387
+ //# sourceMappingURL=chunk-GMZZQXV5.cjs.map
24388
+ //# sourceMappingURL=chunk-GMZZQXV5.cjs.map