@arkade-os/sdk 0.4.56 → 0.4.57

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 (75) hide show
  1. package/dist/adapters/expo.cjs +5 -5
  2. package/dist/adapters/expo.d.cts +2 -2
  3. package/dist/adapters/expo.d.ts +2 -2
  4. package/dist/adapters/expo.js +3 -3
  5. package/dist/adapters/indexedDB.cjs +5 -5
  6. package/dist/adapters/indexedDB.js +4 -4
  7. package/dist/{ark-Cgsd9tMd.d.cts → ark-CJgH_pmn.d.cts} +20 -1
  8. package/dist/{ark-Cgsd9tMd.d.ts → ark-CJgH_pmn.d.ts} +20 -1
  9. package/dist/{asyncStorageTaskQueue-CXz4PRBW.d.ts → asyncStorageTaskQueue-BeeZbf-Q.d.ts} +2 -2
  10. package/dist/{asyncStorageTaskQueue-C0ZsDE60.d.cts → asyncStorageTaskQueue-BlrsUUX_.d.cts} +2 -2
  11. package/dist/{chunk-IMVKQQHU.cjs → chunk-A7TOVUYG.cjs} +9 -9
  12. package/dist/{chunk-IMVKQQHU.cjs.map → chunk-A7TOVUYG.cjs.map} +1 -1
  13. package/dist/{chunk-NN7BNNF5.js → chunk-ASUJNZ63.js} +3 -3
  14. package/dist/{chunk-NN7BNNF5.js.map → chunk-ASUJNZ63.js.map} +1 -1
  15. package/dist/{chunk-5IMBONCK.js → chunk-C4SVRVNM.js} +4 -4
  16. package/dist/{chunk-5IMBONCK.js.map → chunk-C4SVRVNM.js.map} +1 -1
  17. package/dist/{chunk-VNDVUM2W.js → chunk-CPS7V4A3.js} +4 -4
  18. package/dist/{chunk-VNDVUM2W.js.map → chunk-CPS7V4A3.js.map} +1 -1
  19. package/dist/{chunk-MXPBHDOI.cjs → chunk-EZBKSWEL.cjs} +17 -17
  20. package/dist/{chunk-MXPBHDOI.cjs.map → chunk-EZBKSWEL.cjs.map} +1 -1
  21. package/dist/{chunk-ENRRZFZ4.cjs → chunk-KEG4AAKX.cjs} +511 -409
  22. package/dist/chunk-KEG4AAKX.cjs.map +1 -0
  23. package/dist/{chunk-CDWLZQQW.cjs → chunk-KUN5ZRMW.cjs} +4 -3
  24. package/dist/chunk-KUN5ZRMW.cjs.map +1 -0
  25. package/dist/{chunk-T22257HW.js → chunk-NIZPFPUM.js} +136 -44
  26. package/dist/chunk-NIZPFPUM.js.map +1 -0
  27. package/dist/{chunk-37XKN5DZ.cjs → chunk-OWTKOMJZ.cjs} +40 -40
  28. package/dist/{chunk-37XKN5DZ.cjs.map → chunk-OWTKOMJZ.cjs.map} +1 -1
  29. package/dist/{chunk-OOPDT2WV.js → chunk-P6L2W5IL.js} +3 -3
  30. package/dist/{chunk-OOPDT2WV.js.map → chunk-P6L2W5IL.js.map} +1 -1
  31. package/dist/{chunk-IFGN2GB2.js → chunk-PUNBWFIV.js} +4 -3
  32. package/dist/chunk-PUNBWFIV.js.map +1 -0
  33. package/dist/{chunk-24YNIQSW.cjs → chunk-YK6NP5KX.cjs} +15 -15
  34. package/dist/{chunk-24YNIQSW.cjs.map → chunk-YK6NP5KX.cjs.map} +1 -1
  35. package/dist/contracts/handlers/index.cjs +8 -8
  36. package/dist/contracts/handlers/index.d.cts +3 -3
  37. package/dist/contracts/handlers/index.d.ts +3 -3
  38. package/dist/contracts/handlers/index.js +2 -2
  39. package/dist/{delegate-CZPXtd2F.d.ts → delegate-DM3YECSY.d.ts} +1 -1
  40. package/dist/{delegate-xXT8O-Kn.d.cts → delegate-Dk-OJVdf.d.cts} +1 -1
  41. package/dist/{index-BYG2eKOA.d.cts → index-Cig0RkTf.d.cts} +2 -2
  42. package/dist/{index-BBJ466mM.d.ts → index-CnE7Gnvb.d.ts} +2 -2
  43. package/dist/index.cjs +253 -213
  44. package/dist/index.d.cts +12 -10
  45. package/dist/index.d.ts +12 -10
  46. package/dist/index.js +4 -4
  47. package/dist/repositories/realm/index.cjs +19 -19
  48. package/dist/repositories/realm/index.d.cts +2 -2
  49. package/dist/repositories/realm/index.d.ts +2 -2
  50. package/dist/repositories/realm/index.js +5 -5
  51. package/dist/repositories/sqlite/index.cjs +18 -18
  52. package/dist/repositories/sqlite/index.d.cts +2 -2
  53. package/dist/repositories/sqlite/index.d.ts +2 -2
  54. package/dist/repositories/sqlite/index.js +5 -5
  55. package/dist/{taskRunner-BG1PRFps.d.cts → taskRunner-CnGSTaAJ.d.cts} +2 -2
  56. package/dist/{taskRunner-C46NnRsY.d.ts → taskRunner-F7tWzsrC.d.ts} +2 -2
  57. package/dist/wallet/expo/background.cjs +14 -14
  58. package/dist/wallet/expo/background.d.cts +3 -3
  59. package/dist/wallet/expo/background.d.ts +3 -3
  60. package/dist/wallet/expo/background.js +6 -6
  61. package/dist/wallet/expo/index.cjs +14 -14
  62. package/dist/wallet/expo/index.d.cts +4 -4
  63. package/dist/wallet/expo/index.d.ts +4 -4
  64. package/dist/wallet/expo/index.js +5 -5
  65. package/dist/{wallet-DuCm55EC.d.ts → wallet-D6_S0n6B.d.ts} +107 -4
  66. package/dist/{wallet-1yWg75gN.d.cts → wallet-DvRIQBBY.d.cts} +107 -4
  67. package/dist/worker/expo/index.cjs +9 -9
  68. package/dist/worker/expo/index.d.cts +4 -4
  69. package/dist/worker/expo/index.d.ts +4 -4
  70. package/dist/worker/expo/index.js +5 -5
  71. package/package.json +1 -1
  72. package/dist/chunk-CDWLZQQW.cjs.map +0 -1
  73. package/dist/chunk-ENRRZFZ4.cjs.map +0 -1
  74. package/dist/chunk-IFGN2GB2.js.map +0 -1
  75. package/dist/chunk-T22257HW.js.map +0 -1
@@ -1,8 +1,8 @@
1
1
  'use strict';
2
2
 
3
- var chunk24YNIQSW_cjs = require('./chunk-24YNIQSW.cjs');
4
- var chunk37XKN5DZ_cjs = require('./chunk-37XKN5DZ.cjs');
5
- var chunkCDWLZQQW_cjs = require('./chunk-CDWLZQQW.cjs');
3
+ var chunkYK6NP5KX_cjs = require('./chunk-YK6NP5KX.cjs');
4
+ var chunkOWTKOMJZ_cjs = require('./chunk-OWTKOMJZ.cjs');
5
+ var chunkKUN5ZRMW_cjs = require('./chunk-KUN5ZRMW.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 = chunkCDWLZQQW_cjs.getArkPsbtFields(tx.root, 0, chunkCDWLZQQW_cjs.CosignerPublicKey).map(
191
+ const cosigners = chunkKUN5ZRMW_cjs.getArkPsbtFields(tx.root, 0, chunkKUN5ZRMW_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 = chunkCDWLZQQW_cjs.getArkPsbtFields(g.root, 0, chunkCDWLZQQW_cjs.CosignerPublicKey).map((c) => c.key);
243
+ const cosigners = chunkKUN5ZRMW_cjs.getArkPsbtFields(g.root, 0, chunkKUN5ZRMW_cjs.CosignerPublicKey).map((c) => c.key);
244
244
  const { finalKey } = aggregateKeys(cosigners, true, {
245
245
  taprootTweak: this.scriptRoot
246
246
  });
@@ -419,7 +419,7 @@ var SeedIdentity = class _SeedIdentity {
419
419
  let network;
420
420
  if ("descriptor" in opts && typeof opts.descriptor === "string") {
421
421
  descriptor = opts.descriptor;
422
- network = chunk37XKN5DZ_cjs.isMainnetDescriptor(descriptor) ? descriptorsScure.networks.bitcoin : descriptorsScure.networks.testnet;
422
+ network = chunkOWTKOMJZ_cjs.isMainnetDescriptor(descriptor) ? descriptorsScure.networks.bitcoin : descriptorsScure.networks.testnet;
423
423
  } else {
424
424
  network = opts.isMainnet ?? true ? descriptorsScure.networks.bitcoin : descriptorsScure.networks.testnet;
425
425
  descriptor = descriptorsScure.scriptExpressions.trBIP32({
@@ -504,7 +504,7 @@ var SeedIdentity = class _SeedIdentity {
504
504
  * `StaticDescriptorProvider` for legacy single-key wallets.
505
505
  */
506
506
  isOurs(descriptor) {
507
- return chunk37XKN5DZ_cjs.descriptorIsOurs(descriptor, this.descriptor, utils_js.pubSchnorr(this.derivedKey));
507
+ return chunkOWTKOMJZ_cjs.descriptorIsOurs(descriptor, this.descriptor, utils_js.pubSchnorr(this.derivedKey));
508
508
  }
509
509
  /**
510
510
  * Signs each request with the key derived from its descriptor.
@@ -553,7 +553,7 @@ var SeedIdentity = class _SeedIdentity {
553
553
  }
554
554
  // ── internal helpers ─────────────────────────────────────────────
555
555
  derivePrivateKeyForDescriptor(descriptor) {
556
- const network = chunk37XKN5DZ_cjs.isMainnetDescriptor(descriptor) ? descriptorsScure.networks.bitcoin : descriptorsScure.networks.testnet;
556
+ const network = chunkOWTKOMJZ_cjs.isMainnetDescriptor(descriptor) ? descriptorsScure.networks.bitcoin : descriptorsScure.networks.testnet;
557
557
  const expansion = descriptorsScure.expand({ descriptor, network });
558
558
  if (expansion.isRanged) {
559
559
  throw new Error(
@@ -639,7 +639,7 @@ var ReadonlyDescriptorIdentity = class _ReadonlyDescriptorIdentity {
639
639
  */
640
640
  descriptor;
641
641
  constructor(descriptor) {
642
- const network = chunk37XKN5DZ_cjs.isMainnetDescriptor(descriptor) ? descriptorsScure.networks.bitcoin : descriptorsScure.networks.testnet;
642
+ const network = chunkOWTKOMJZ_cjs.isMainnetDescriptor(descriptor) ? descriptorsScure.networks.bitcoin : descriptorsScure.networks.testnet;
643
643
  let expansion;
644
644
  try {
645
645
  expansion = descriptorsScure.expand({ descriptor, network, index: 0 });
@@ -689,7 +689,7 @@ var ReadonlyDescriptorIdentity = class _ReadonlyDescriptorIdentity {
689
689
  * `StaticDescriptorProvider` for legacy single-key wallets.
690
690
  */
691
691
  isOurs(descriptor) {
692
- return chunk37XKN5DZ_cjs.descriptorIsOurs(descriptor, this.descriptor, this.indexZero.pubkey);
692
+ return chunkOWTKOMJZ_cjs.descriptorIsOurs(descriptor, this.descriptor, this.indexZero.pubkey);
693
693
  }
694
694
  };
695
695
  function serializeSeedOwnedSigningIdentity(identity) {
@@ -851,10 +851,10 @@ var DescriptorIdentity = class {
851
851
  this.base = base;
852
852
  }
853
853
  async xOnlyPublicKey() {
854
- return chunk37XKN5DZ_cjs.deriveDescriptorLeafPubKey(this.descriptor);
854
+ return chunkOWTKOMJZ_cjs.deriveDescriptorLeafPubKey(this.descriptor);
855
855
  }
856
856
  async compressedPublicKey() {
857
- return chunk37XKN5DZ_cjs.deriveDescriptorLeafCompressedPubKey(this.descriptor);
857
+ return chunkOWTKOMJZ_cjs.deriveDescriptorLeafCompressedPubKey(this.descriptor);
858
858
  }
859
859
  async sign(tx, inputIndexes) {
860
860
  const [signed] = await this.signer.signWithDescriptor([
@@ -1061,14 +1061,14 @@ var RestDelegateProvider = class {
1061
1061
  */
1062
1062
  async delegate(intent, forfeitTxs, options) {
1063
1063
  const url = `${this.url}/v1/delegate`;
1064
- const response = await chunkCDWLZQQW_cjs.baseFetch(url, {
1064
+ const response = await chunkKUN5ZRMW_cjs.baseFetch(url, {
1065
1065
  method: "POST",
1066
1066
  headers: {
1067
1067
  "Content-Type": "application/json"
1068
1068
  },
1069
1069
  body: JSON.stringify({
1070
1070
  intent: {
1071
- message: chunkCDWLZQQW_cjs.Intent.encodeMessage(intent.message),
1071
+ message: chunkKUN5ZRMW_cjs.Intent.encodeMessage(intent.message),
1072
1072
  proof: intent.proof
1073
1073
  },
1074
1074
  forfeit_txs: forfeitTxs,
@@ -1088,7 +1088,7 @@ var RestDelegateProvider = class {
1088
1088
  */
1089
1089
  async getDelegateInfo() {
1090
1090
  const url = `${this.url}/v1/delegator/info`;
1091
- const response = await chunkCDWLZQQW_cjs.rateGate.runHttp(url, () => chunkCDWLZQQW_cjs.baseFetch(url));
1091
+ const response = await chunkKUN5ZRMW_cjs.rateGate.runHttp(url, () => chunkKUN5ZRMW_cjs.baseFetch(url));
1092
1092
  if (!response.ok) {
1093
1093
  const errorText2 = await response.text();
1094
1094
  throw new Error(`Failed to get delegate info: ${errorText2}`);
@@ -1115,7 +1115,7 @@ var ESPLORA_URL = {
1115
1115
  regtest: "http://localhost:3000/api"
1116
1116
  };
1117
1117
  var EsploraProvider = class {
1118
- constructor(baseUrl = ESPLORA_URL[chunkCDWLZQQW_cjs.DEFAULT_NETWORK_NAME], opts) {
1118
+ constructor(baseUrl = ESPLORA_URL[chunkKUN5ZRMW_cjs.DEFAULT_NETWORK_NAME], opts) {
1119
1119
  this.baseUrl = baseUrl;
1120
1120
  this.pollingInterval = opts?.pollingInterval ?? 15e3;
1121
1121
  this.forcePolling = opts?.forcePolling ?? false;
@@ -1124,14 +1124,14 @@ var EsploraProvider = class {
1124
1124
  pollingInterval;
1125
1125
  forcePolling;
1126
1126
  async getCoins(address) {
1127
- const response = await chunkCDWLZQQW_cjs.baseFetch(`${this.baseUrl}/address/${address}/utxo`);
1127
+ const response = await chunkKUN5ZRMW_cjs.baseFetch(`${this.baseUrl}/address/${address}/utxo`);
1128
1128
  if (!response.ok) {
1129
1129
  throw new Error(`Failed to fetch UTXOs: ${response.statusText}`);
1130
1130
  }
1131
1131
  return response.json();
1132
1132
  }
1133
1133
  async getFeeRate() {
1134
- const response = await chunkCDWLZQQW_cjs.baseFetch(`${this.baseUrl}/fee-estimates`);
1134
+ const response = await chunkKUN5ZRMW_cjs.baseFetch(`${this.baseUrl}/fee-estimates`);
1135
1135
  if (response.status === 404) {
1136
1136
  return void 0;
1137
1137
  }
@@ -1152,7 +1152,7 @@ var EsploraProvider = class {
1152
1152
  }
1153
1153
  }
1154
1154
  async getTxOutspends(txid) {
1155
- const response = await chunkCDWLZQQW_cjs.baseFetch(`${this.baseUrl}/tx/${txid}/outspends`);
1155
+ const response = await chunkKUN5ZRMW_cjs.baseFetch(`${this.baseUrl}/tx/${txid}/outspends`);
1156
1156
  if (!response.ok) {
1157
1157
  const error = await response.text();
1158
1158
  throw new Error(`Failed to get transaction outspends: ${error}`);
@@ -1160,7 +1160,7 @@ var EsploraProvider = class {
1160
1160
  return response.json();
1161
1161
  }
1162
1162
  async getTransactions(address) {
1163
- const response = await chunkCDWLZQQW_cjs.baseFetch(`${this.baseUrl}/address/${address}/txs`);
1163
+ const response = await chunkKUN5ZRMW_cjs.baseFetch(`${this.baseUrl}/address/${address}/txs`);
1164
1164
  if (!response.ok) {
1165
1165
  const error = await response.text();
1166
1166
  throw new Error(`Failed to get transactions: ${error}`);
@@ -1168,7 +1168,7 @@ var EsploraProvider = class {
1168
1168
  return response.json();
1169
1169
  }
1170
1170
  async getTxStatus(txid) {
1171
- const txresponse = await chunkCDWLZQQW_cjs.baseFetch(`${this.baseUrl}/tx/${txid}`);
1171
+ const txresponse = await chunkKUN5ZRMW_cjs.baseFetch(`${this.baseUrl}/tx/${txid}`);
1172
1172
  if (!txresponse.ok) {
1173
1173
  throw new Error(txresponse.statusText);
1174
1174
  }
@@ -1176,7 +1176,7 @@ var EsploraProvider = class {
1176
1176
  if (!tx.status.confirmed) {
1177
1177
  return { confirmed: false };
1178
1178
  }
1179
- const response = await chunkCDWLZQQW_cjs.baseFetch(`${this.baseUrl}/tx/${txid}/status`);
1179
+ const response = await chunkKUN5ZRMW_cjs.baseFetch(`${this.baseUrl}/tx/${txid}/status`);
1180
1180
  if (!response.ok) {
1181
1181
  throw new Error(`Failed to get transaction status: ${response.statusText}`);
1182
1182
  }
@@ -1260,7 +1260,7 @@ var EsploraProvider = class {
1260
1260
  return stopFunc;
1261
1261
  }
1262
1262
  async getChainTip() {
1263
- const tipBlocks = await chunkCDWLZQQW_cjs.baseFetch(`${this.baseUrl}/blocks`);
1263
+ const tipBlocks = await chunkKUN5ZRMW_cjs.baseFetch(`${this.baseUrl}/blocks`);
1264
1264
  if (!tipBlocks.ok) {
1265
1265
  throw new Error(`Failed to get chain tip: ${tipBlocks.statusText}`);
1266
1266
  }
@@ -1279,7 +1279,7 @@ var EsploraProvider = class {
1279
1279
  };
1280
1280
  }
1281
1281
  async broadcastPackage(parent, child) {
1282
- const response = await chunkCDWLZQQW_cjs.baseFetch(`${this.baseUrl}/txs/package`, {
1282
+ const response = await chunkKUN5ZRMW_cjs.baseFetch(`${this.baseUrl}/txs/package`, {
1283
1283
  method: "POST",
1284
1284
  headers: {
1285
1285
  "Content-Type": "application/json"
@@ -1293,7 +1293,7 @@ var EsploraProvider = class {
1293
1293
  return response.json();
1294
1294
  }
1295
1295
  async broadcastTx(tx) {
1296
- const response = await chunkCDWLZQQW_cjs.baseFetch(`${this.baseUrl}/tx`, {
1296
+ const response = await chunkKUN5ZRMW_cjs.baseFetch(`${this.baseUrl}/tx`, {
1297
1297
  method: "POST",
1298
1298
  headers: {
1299
1299
  "Content-Type": "text/plain"
@@ -1455,7 +1455,7 @@ function findP2AOutput(tx) {
1455
1455
  var CHILD_DUST_AMOUNT = 546;
1456
1456
  function buildAnchorChild(params) {
1457
1457
  const { parent, feeRate, fundingCoins, changeAddress, tapInternalKey, network } = params;
1458
- const child = new chunkCDWLZQQW_cjs.Transaction({ version: 3, allowLegacyWitnessUtxo: true });
1458
+ const child = new chunkKUN5ZRMW_cjs.Transaction({ version: 3, allowLegacyWitnessUtxo: true });
1459
1459
  child.addInput(findP2AOutput(parent));
1460
1460
  const estimator = TxWeightEstimator.create().addP2AInput();
1461
1461
  for (const _ of fundingCoins) {
@@ -1503,7 +1503,7 @@ function buildForfeitTx(inputs, forfeitPkScript, txLocktime) {
1503
1503
  );
1504
1504
  }
1505
1505
  function buildForfeitTxWithOutput(inputs, output, txLocktime) {
1506
- const tx = new chunkCDWLZQQW_cjs.Transaction({
1506
+ const tx = new chunkKUN5ZRMW_cjs.Transaction({
1507
1507
  version: 3,
1508
1508
  lockTime: txLocktime
1509
1509
  });
@@ -1579,7 +1579,7 @@ function validateVtxoTxGraph(graph, roundTransaction, sweepTapTreeRoot) {
1579
1579
  if (previousScriptKey.length !== 32) {
1580
1580
  throw new Error(`parent output ${childIndex} has invalid script`);
1581
1581
  }
1582
- const cosigners = chunkCDWLZQQW_cjs.getArkPsbtFields(child.root, 0, chunkCDWLZQQW_cjs.CosignerPublicKey);
1582
+ const cosigners = chunkKUN5ZRMW_cjs.getArkPsbtFields(child.root, 0, chunkKUN5ZRMW_cjs.CosignerPublicKey);
1583
1583
  if (cosigners.length === 0) {
1584
1584
  throw ErrMissingCosignersPublicKeys;
1585
1585
  }
@@ -1637,7 +1637,7 @@ var EmulatorPacket = class _EmulatorPacket {
1637
1637
  return new _EmulatorPacket(entries);
1638
1638
  }
1639
1639
  static fromBytes(data) {
1640
- const reader = new chunk24YNIQSW_cjs.BufferReader(data);
1640
+ const reader = new chunkYK6NP5KX_cjs.BufferReader(data);
1641
1641
  const entryCount = reader.readCompactSize();
1642
1642
  const entries = [];
1643
1643
  for (let i = 0; i < entryCount; i++) {
@@ -1655,7 +1655,7 @@ var EmulatorPacket = class _EmulatorPacket {
1655
1655
  return _EmulatorPacket.PACKET_TYPE;
1656
1656
  }
1657
1657
  serialize() {
1658
- const writer = new chunk24YNIQSW_cjs.BufferWriter();
1658
+ const writer = new chunkYK6NP5KX_cjs.BufferWriter();
1659
1659
  writer.writeCompactSize(this.entries.length);
1660
1660
  for (const entry of this.entries) {
1661
1661
  writer.writeUint16LE(entry.vin);
@@ -1742,7 +1742,7 @@ var Extension = class _Extension {
1742
1742
  `expected magic prefix ${base.hex.encode(ARKADE_MAGIC)}, got ${base.hex.encode(payload.slice(0, Math.min(payload.length, ARKADE_MAGIC.length)))}`
1743
1743
  );
1744
1744
  }
1745
- const reader = new chunk24YNIQSW_cjs.BufferReader(payload.slice(ARKADE_MAGIC.length));
1745
+ const reader = new chunkYK6NP5KX_cjs.BufferReader(payload.slice(ARKADE_MAGIC.length));
1746
1746
  const packets = [];
1747
1747
  while (reader.remaining() > 0) {
1748
1748
  const packetType = reader.readByte();
@@ -1816,7 +1816,7 @@ var Extension = class _Extension {
1816
1816
  */
1817
1817
  getAssetPacket() {
1818
1818
  for (const p of this.packets) {
1819
- if (p instanceof chunk24YNIQSW_cjs.Packet) {
1819
+ if (p instanceof chunkYK6NP5KX_cjs.Packet) {
1820
1820
  return p;
1821
1821
  }
1822
1822
  }
@@ -1854,8 +1854,8 @@ var Extension = class _Extension {
1854
1854
  };
1855
1855
  function parsePacket(packetType, data) {
1856
1856
  switch (packetType) {
1857
- case chunk24YNIQSW_cjs.Packet.PACKET_TYPE:
1858
- return chunk24YNIQSW_cjs.Packet.fromBytes(data);
1857
+ case chunkYK6NP5KX_cjs.Packet.PACKET_TYPE:
1858
+ return chunkYK6NP5KX_cjs.Packet.fromBytes(data);
1859
1859
  case EmulatorPacket.PACKET_TYPE:
1860
1860
  return EmulatorPacket.fromBytes(data);
1861
1861
  default:
@@ -1902,16 +1902,16 @@ function buildOpReturnScript(data) {
1902
1902
  }
1903
1903
  return script;
1904
1904
  }
1905
- var ErrOffchainOutputNotFound = (address) => new chunkCDWLZQQW_cjs.ServerResponseMismatchError(`offchain send output not found: ${address}`);
1906
- var ErrInvalidAssetOutputAmount = (got, want, assetId) => new chunkCDWLZQQW_cjs.ServerResponseMismatchError(
1905
+ var ErrOffchainOutputNotFound = (address) => new chunkKUN5ZRMW_cjs.ServerResponseMismatchError(`offchain send output not found: ${address}`);
1906
+ var ErrInvalidAssetOutputAmount = (got, want, assetId) => new chunkKUN5ZRMW_cjs.ServerResponseMismatchError(
1907
1907
  `invalid asset output amount for ${assetId}: got ${got}, want ${want}`
1908
1908
  );
1909
- var ErrAssetGroupNotFound = (assetId) => new chunkCDWLZQQW_cjs.ServerResponseMismatchError(`asset group not found in batch leaf: ${assetId}`);
1910
- var ErrAssetOutputNotFound = (assetId, outputIndex) => new chunkCDWLZQQW_cjs.ServerResponseMismatchError(
1909
+ var ErrAssetGroupNotFound = (assetId) => new chunkKUN5ZRMW_cjs.ServerResponseMismatchError(`asset group not found in batch leaf: ${assetId}`);
1910
+ var ErrAssetOutputNotFound = (assetId, outputIndex) => new chunkKUN5ZRMW_cjs.ServerResponseMismatchError(
1911
1911
  `asset output not found in asset group ${assetId} at index ${outputIndex}`
1912
1912
  );
1913
- var ErrOnchainOutputNotFound = (address) => new chunkCDWLZQQW_cjs.ServerResponseMismatchError(`onchain output not found: ${address}`);
1914
- var ErrUnvalidatedOffchainOutput = (address) => new chunkCDWLZQQW_cjs.ServerResponseMismatchError(
1913
+ var ErrOnchainOutputNotFound = (address) => new chunkKUN5ZRMW_cjs.ServerResponseMismatchError(`onchain output not found: ${address}`);
1914
+ var ErrUnvalidatedOffchainOutput = (address) => new chunkKUN5ZRMW_cjs.ServerResponseMismatchError(
1915
1915
  `offchain output ${address} cannot be validated: virtual output tree signing did not run`
1916
1916
  );
1917
1917
  var ErrInvalidOnchainOutputAmount = (address) => new Error(`invalid onchain output amount: ${address}`);
@@ -1920,7 +1920,7 @@ var ErrInvalidOffchainOutputAmount = (address) => new Error(`invalid offchain ou
1920
1920
  function assertFinalCommitmentMatchesValidated(finalCommitmentTx, validatedCommitmentTxid, context) {
1921
1921
  if (!validatedCommitmentTxid) return;
1922
1922
  if (finalCommitmentTx.id === validatedCommitmentTxid) return;
1923
- throw new chunkCDWLZQQW_cjs.ServerResponseMismatchError(
1923
+ throw new chunkKUN5ZRMW_cjs.ServerResponseMismatchError(
1924
1924
  `${context}: finalization commitment tx ${finalCommitmentTx.id} differs from the validated commitment tx ${validatedCommitmentTxid}`
1925
1925
  );
1926
1926
  }
@@ -1930,7 +1930,7 @@ function validateBatchRecipients(commitmentTx, vtxoTreeLeaves, recipients, netwo
1930
1930
  for (const recipient of recipients) {
1931
1931
  let arkAddress;
1932
1932
  try {
1933
- arkAddress = chunkCDWLZQQW_cjs.ArkAddress.decode(recipient.address);
1933
+ arkAddress = chunkKUN5ZRMW_cjs.ArkAddress.decode(recipient.address);
1934
1934
  } catch {
1935
1935
  validateOnchainRecipient(commitmentTx, recipient, network, usedOnchainOutputs);
1936
1936
  continue;
@@ -1942,7 +1942,7 @@ function validateBatchRecipientsWithoutTree(commitmentTx, recipients, network) {
1942
1942
  const usedOnchainOutputs = /* @__PURE__ */ new Set();
1943
1943
  for (const recipient of recipients) {
1944
1944
  try {
1945
- chunkCDWLZQQW_cjs.ArkAddress.decode(recipient.address);
1945
+ chunkKUN5ZRMW_cjs.ArkAddress.decode(recipient.address);
1946
1946
  } catch {
1947
1947
  validateOnchainRecipient(commitmentTx, recipient, network, usedOnchainOutputs);
1948
1948
  continue;
@@ -2173,7 +2173,7 @@ function assetMintResolver() {
2173
2173
  if (!tx.assets?.length || !tx.key.arkTxid) return void 0;
2174
2174
  const minted = tx.assets.filter((a) => {
2175
2175
  try {
2176
- return base.hex.encode(chunk24YNIQSW_cjs.AssetId.fromString(a.assetId).txid) === tx.key.arkTxid;
2176
+ return base.hex.encode(chunkYK6NP5KX_cjs.AssetId.fromString(a.assetId).txid) === tx.key.arkTxid;
2177
2177
  } catch {
2178
2178
  return false;
2179
2179
  }
@@ -2216,7 +2216,7 @@ function createAssetPacket(assetInputs, receivers, changeReceiver) {
2216
2216
  const existing = inputsByAssetId.get(asset.assetId);
2217
2217
  inputsByAssetId.set(asset.assetId, [
2218
2218
  ...existing ?? [],
2219
- chunk24YNIQSW_cjs.AssetInput.create(inputIndex, asset.amount)
2219
+ chunkYK6NP5KX_cjs.AssetInput.create(inputIndex, asset.amount)
2220
2220
  ]);
2221
2221
  }
2222
2222
  }
@@ -2228,7 +2228,7 @@ function createAssetPacket(assetInputs, receivers, changeReceiver) {
2228
2228
  const existing = outputsByAssetId.get(asset.assetId);
2229
2229
  outputsByAssetId.set(asset.assetId, [
2230
2230
  ...existing ?? [],
2231
- chunk24YNIQSW_cjs.AssetOutput.create(outputIndex, asset.amount)
2231
+ chunkYK6NP5KX_cjs.AssetOutput.create(outputIndex, asset.amount)
2232
2232
  ]);
2233
2233
  }
2234
2234
  }
@@ -2239,7 +2239,7 @@ function createAssetPacket(assetInputs, receivers, changeReceiver) {
2239
2239
  const existing = outputsByAssetId.get(asset.assetId);
2240
2240
  outputsByAssetId.set(asset.assetId, [
2241
2241
  ...existing ?? [],
2242
- chunk24YNIQSW_cjs.AssetOutput.create(outputIndex, asset.amount)
2242
+ chunkYK6NP5KX_cjs.AssetOutput.create(outputIndex, asset.amount)
2243
2243
  ]);
2244
2244
  }
2245
2245
  }
@@ -2248,11 +2248,11 @@ function createAssetPacket(assetInputs, receivers, changeReceiver) {
2248
2248
  for (const assetIdStr of allAssetIds) {
2249
2249
  const inputs = inputsByAssetId.get(assetIdStr);
2250
2250
  const outputs = outputsByAssetId.get(assetIdStr);
2251
- const assetId = chunk24YNIQSW_cjs.AssetId.fromString(assetIdStr);
2252
- const group = chunk24YNIQSW_cjs.AssetGroup.create(assetId, null, inputs ?? [], outputs ?? [], []);
2251
+ const assetId = chunkYK6NP5KX_cjs.AssetId.fromString(assetIdStr);
2252
+ const group = chunkYK6NP5KX_cjs.AssetGroup.create(assetId, null, inputs ?? [], outputs ?? [], []);
2253
2253
  groups.push(group);
2254
2254
  }
2255
- return chunk24YNIQSW_cjs.Packet.create(groups);
2255
+ return chunkYK6NP5KX_cjs.Packet.create(groups);
2256
2256
  }
2257
2257
  function selectCoinsWithAsset(coins, assetId, requiredAmount) {
2258
2258
  const coinsWithAsset = coins.filter((coin) => coin.assets?.some((a) => a.assetId === assetId));
@@ -2326,6 +2326,83 @@ function classifyContractSigner(contractServerPubKeyHex, info, nowSeconds = Math
2326
2326
  function isCooperativelyMigratable(status) {
2327
2327
  return status === "MIGRATABLE" || status === "DUE_NOW";
2328
2328
  }
2329
+
2330
+ // src/wallet/timelockPolicy.ts
2331
+ var isRegtest = (network) => network.bech32 === "bcrt";
2332
+ var NOMINAL_BLOCK_SECONDS = 600n;
2333
+ var toTimelock = (value) => ({
2334
+ value,
2335
+ type: value >= 512n ? "seconds" : "blocks"
2336
+ });
2337
+ var toSeconds = (t) => t.type === "seconds" ? t.value : t.value * NOMINAL_BLOCK_SECONDS;
2338
+ function assertTimelockInPolicy(timelock, policy, label) {
2339
+ if (policy.requireSeconds && timelock.type === "blocks") {
2340
+ throw new chunkKUN5ZRMW_cjs.ServerResponseMismatchError(
2341
+ `${label} rejected: block-typed timelocks are not accepted (got ${timelock.value})`
2342
+ );
2343
+ }
2344
+ const seconds = toSeconds(timelock);
2345
+ if (seconds < policy.minSeconds) {
2346
+ throw new chunkKUN5ZRMW_cjs.ServerResponseMismatchError(
2347
+ `${label} rejected: ${timelock.value} ${timelock.type} is below the ${policy.minSeconds}s floor`
2348
+ );
2349
+ }
2350
+ return timelock;
2351
+ }
2352
+ function assertTimelockWithinFloor(value, policy, label) {
2353
+ return assertTimelockInPolicy(toTimelock(value), policy, label);
2354
+ }
2355
+
2356
+ // src/wallet/batchExpiry.ts
2357
+ var DEFAULT_MIN_BATCH_EXPIRY_SECONDS = 86400n;
2358
+ var REGTEST_MIN_BATCH_EXPIRY_SECONDS = 6000n;
2359
+ function defaultBatchExpiryPolicy(network) {
2360
+ return isRegtest(network) ? { minSeconds: REGTEST_MIN_BATCH_EXPIRY_SECONDS, requireSeconds: false } : { minSeconds: DEFAULT_MIN_BATCH_EXPIRY_SECONDS, requireSeconds: true };
2361
+ }
2362
+ function resolveBatchExpiryPolicy(network, overrides) {
2363
+ return { ...defaultBatchExpiryPolicy(network), ...overrides };
2364
+ }
2365
+ function assertValidBatchExpiry(batchExpiry, policy) {
2366
+ if (policy.advertisedVtxoTreeExpiry !== void 0 && batchExpiry !== policy.advertisedVtxoTreeExpiry) {
2367
+ throw new chunkKUN5ZRMW_cjs.ServerResponseMismatchError(
2368
+ `batch expiry rejected: ${batchExpiry} does not match the advertised vtxoTreeExpiry ${policy.advertisedVtxoTreeExpiry}`
2369
+ );
2370
+ }
2371
+ return assertTimelockWithinFloor(batchExpiry, policy, "batch expiry");
2372
+ }
2373
+ var DEFAULT_MIN_CHECKPOINT_EXIT_DELAY_SECONDS = 86400n;
2374
+ var REGTEST_MIN_CHECKPOINT_EXIT_DELAY_SECONDS = 1200n;
2375
+ function defaultCheckpointExitDelayPolicy(network) {
2376
+ return isRegtest(network) ? { minSeconds: REGTEST_MIN_CHECKPOINT_EXIT_DELAY_SECONDS, requireSeconds: false } : { minSeconds: DEFAULT_MIN_CHECKPOINT_EXIT_DELAY_SECONDS, requireSeconds: true };
2377
+ }
2378
+ function resolveCheckpointExitDelayPolicy(network, overrides) {
2379
+ return { ...defaultCheckpointExitDelayPolicy(network), ...overrides };
2380
+ }
2381
+ function assertValidServerUnrollScript(checkpointTapscript, policy) {
2382
+ let script;
2383
+ try {
2384
+ script = chunkKUN5ZRMW_cjs.CSVMultisigTapscript.decode(base.hex.decode(checkpointTapscript));
2385
+ } catch (e) {
2386
+ throw new chunkKUN5ZRMW_cjs.ServerResponseMismatchError(
2387
+ `checkpoint exit delay rejected: invalid checkpointTapscript from server (${e instanceof Error ? e.message : String(e)})`
2388
+ );
2389
+ }
2390
+ if (policy.advertisedForfeitPubkey !== void 0) {
2391
+ const { pubkeys } = script.params;
2392
+ if (pubkeys.length !== 1) {
2393
+ throw new chunkKUN5ZRMW_cjs.ServerResponseMismatchError(
2394
+ `checkpoint exit delay rejected: checkpointTapscript must commit to exactly one pubkey, got ${pubkeys.length} [${pubkeys.map(base.hex.encode).join(", ")}]`
2395
+ );
2396
+ }
2397
+ if (!utils_js.equalBytes(pubkeys[0], policy.advertisedForfeitPubkey)) {
2398
+ throw new chunkKUN5ZRMW_cjs.ServerResponseMismatchError(
2399
+ `checkpoint exit delay rejected: checkpointTapscript pubkey ${base.hex.encode(pubkeys[0])} does not match the advertised forfeitPubkey ${base.hex.encode(policy.advertisedForfeitPubkey)}`
2400
+ );
2401
+ }
2402
+ }
2403
+ assertTimelockInPolicy(script.params.timelock, policy, "checkpoint exit delay");
2404
+ return script;
2405
+ }
2329
2406
  function buildOffchainTx(inputs, outputs, serverUnrollScript) {
2330
2407
  const MAX_OP_RETURN = 2;
2331
2408
  let countOpReturn = 0;
@@ -2357,8 +2434,8 @@ function buildOffchainTx(inputs, outputs, serverUnrollScript) {
2357
2434
  function buildVirtualTx(inputs, outputs) {
2358
2435
  let lockTime = 0n;
2359
2436
  for (const input of inputs) {
2360
- const tapscript = chunkCDWLZQQW_cjs.decodeTapscript(chunkCDWLZQQW_cjs.scriptFromTapLeafScript(input.tapLeafScript));
2361
- if (chunkCDWLZQQW_cjs.CLTVMultisigTapscript.is(tapscript)) {
2437
+ const tapscript = chunkKUN5ZRMW_cjs.decodeTapscript(chunkKUN5ZRMW_cjs.scriptFromTapLeafScript(input.tapLeafScript));
2438
+ if (chunkKUN5ZRMW_cjs.CLTVMultisigTapscript.is(tapscript)) {
2362
2439
  if (lockTime !== 0n) {
2363
2440
  if (isSeconds(lockTime) !== isSeconds(tapscript.params.absoluteTimelock)) {
2364
2441
  throw new Error("cannot mix seconds and blocks locktime");
@@ -2369,7 +2446,7 @@ function buildVirtualTx(inputs, outputs) {
2369
2446
  }
2370
2447
  }
2371
2448
  }
2372
- const tx = new chunkCDWLZQQW_cjs.Transaction({
2449
+ const tx = new chunkKUN5ZRMW_cjs.Transaction({
2373
2450
  version: 3,
2374
2451
  lockTime: Number(lockTime)
2375
2452
  });
@@ -2379,12 +2456,12 @@ function buildVirtualTx(inputs, outputs) {
2379
2456
  index: input.vout,
2380
2457
  sequence: lockTime ? btcSigner.DEFAULT_SEQUENCE - 1 : void 0,
2381
2458
  witnessUtxo: {
2382
- script: chunkCDWLZQQW_cjs.VtxoScript.decode(input.tapTree).pkScript,
2459
+ script: chunkKUN5ZRMW_cjs.VtxoScript.decode(input.tapTree).pkScript,
2383
2460
  amount: BigInt(input.value)
2384
2461
  },
2385
2462
  tapLeafScript: [input.tapLeafScript]
2386
2463
  });
2387
- chunkCDWLZQQW_cjs.setArkPsbtField(tx, i, chunkCDWLZQQW_cjs.VtxoTaprootTree, input.tapTree);
2464
+ chunkKUN5ZRMW_cjs.setArkPsbtField(tx, i, chunkKUN5ZRMW_cjs.VtxoTaprootTree, input.tapTree);
2388
2465
  }
2389
2466
  for (const output of outputs) {
2390
2467
  tx.addOutput(output);
@@ -2393,8 +2470,8 @@ function buildVirtualTx(inputs, outputs) {
2393
2470
  return tx;
2394
2471
  }
2395
2472
  function buildCheckpointTx(vtxo, serverUnrollScript) {
2396
- const collaborativeClosure = chunkCDWLZQQW_cjs.decodeTapscript(chunkCDWLZQQW_cjs.scriptFromTapLeafScript(vtxo.tapLeafScript));
2397
- const checkpointVtxoScript = new chunkCDWLZQQW_cjs.VtxoScript([
2473
+ const collaborativeClosure = chunkKUN5ZRMW_cjs.decodeTapscript(chunkKUN5ZRMW_cjs.scriptFromTapLeafScript(vtxo.tapLeafScript));
2474
+ const checkpointVtxoScript = new chunkKUN5ZRMW_cjs.VtxoScript([
2398
2475
  serverUnrollScript.script,
2399
2476
  collaborativeClosure.script
2400
2477
  ]);
@@ -2547,7 +2624,7 @@ function combineTapscriptSigs(signedTx, originalTx) {
2547
2624
  }
2548
2625
  function isValidArkAddress(address) {
2549
2626
  try {
2550
- chunkCDWLZQQW_cjs.ArkAddress.decode(address);
2627
+ chunkKUN5ZRMW_cjs.ArkAddress.decode(address);
2551
2628
  return true;
2552
2629
  } catch (e) {
2553
2630
  return false;
@@ -2555,16 +2632,16 @@ function isValidArkAddress(address) {
2555
2632
  }
2556
2633
  function matchServerCheckpoints(serverCheckpointTxs, expectedCheckpoints, context) {
2557
2634
  if (serverCheckpointTxs.length !== expectedCheckpoints.length) {
2558
- throw new chunkCDWLZQQW_cjs.ServerResponseMismatchError(
2635
+ throw new chunkKUN5ZRMW_cjs.ServerResponseMismatchError(
2559
2636
  `${context} returned ${serverCheckpointTxs.length} checkpoints, expected ${expectedCheckpoints.length}`
2560
2637
  );
2561
2638
  }
2562
2639
  const byTxid = new Map(expectedCheckpoints.map((c) => [c.id, c]));
2563
2640
  return serverCheckpointTxs.map((encoded, index) => {
2564
- const server = chunkCDWLZQQW_cjs.Transaction.fromPSBT(base.base64.decode(encoded));
2641
+ const server = chunkKUN5ZRMW_cjs.Transaction.fromPSBT(base.base64.decode(encoded));
2565
2642
  const local = byTxid.get(server.id);
2566
2643
  if (!local) {
2567
- throw new chunkCDWLZQQW_cjs.ServerResponseMismatchError(
2644
+ throw new chunkKUN5ZRMW_cjs.ServerResponseMismatchError(
2568
2645
  `${context} checkpoint ${index} txid ${server.id} does not match any submitted checkpoint`
2569
2646
  );
2570
2647
  }
@@ -2574,14 +2651,14 @@ function matchServerCheckpoints(serverCheckpointTxs, expectedCheckpoints, contex
2574
2651
  }
2575
2652
  function assertSubmittedArkTxid(response, signedArkTx, context) {
2576
2653
  if (response.arkTxid !== signedArkTx.id) {
2577
- throw new chunkCDWLZQQW_cjs.ServerResponseMismatchError(
2654
+ throw new chunkKUN5ZRMW_cjs.ServerResponseMismatchError(
2578
2655
  `${context} returned ark txid ${response.arkTxid}, expected ${signedArkTx.id}`
2579
2656
  );
2580
2657
  }
2581
2658
  if (response.finalArkTx === void 0) return;
2582
- const finalTxid = chunkCDWLZQQW_cjs.Transaction.fromPSBT(base.base64.decode(response.finalArkTx)).id;
2659
+ const finalTxid = chunkKUN5ZRMW_cjs.Transaction.fromPSBT(base.base64.decode(response.finalArkTx)).id;
2583
2660
  if (finalTxid !== signedArkTx.id) {
2584
- throw new chunkCDWLZQQW_cjs.ServerResponseMismatchError(
2661
+ throw new chunkKUN5ZRMW_cjs.ServerResponseMismatchError(
2585
2662
  `${context} returned final ark tx ${finalTxid}, expected ${signedArkTx.id}`
2586
2663
  );
2587
2664
  }
@@ -2590,20 +2667,20 @@ function assertCheckpointsMatchInputs(checkpoints, inputs, unrollCandidates, con
2590
2667
  const byOutpoint = new Map(inputs.map((input) => [`${input.txid}:${input.vout}`, input]));
2591
2668
  for (const [index, checkpoint] of checkpoints.entries()) {
2592
2669
  if (checkpoint.inputsLength !== 1) {
2593
- throw new chunkCDWLZQQW_cjs.ServerResponseMismatchError(
2670
+ throw new chunkKUN5ZRMW_cjs.ServerResponseMismatchError(
2594
2671
  `${context}: checkpoint ${index} spends ${checkpoint.inputsLength} inputs, expected 1`
2595
2672
  );
2596
2673
  }
2597
2674
  const spent = checkpoint.getInput(0);
2598
2675
  if (!spent.txid || spent.index === void 0) {
2599
- throw new chunkCDWLZQQW_cjs.ServerResponseMismatchError(
2676
+ throw new chunkKUN5ZRMW_cjs.ServerResponseMismatchError(
2600
2677
  `${context}: checkpoint ${index} has no input outpoint`
2601
2678
  );
2602
2679
  }
2603
2680
  const outpoint = `${base.hex.encode(spent.txid)}:${spent.index}`;
2604
2681
  const input = byOutpoint.get(outpoint);
2605
2682
  if (!input) {
2606
- throw new chunkCDWLZQQW_cjs.ServerResponseMismatchError(
2683
+ throw new chunkKUN5ZRMW_cjs.ServerResponseMismatchError(
2607
2684
  `${context}: checkpoint ${index} spends ${outpoint}, which is not one of the requested virtual outputs`
2608
2685
  );
2609
2686
  }
@@ -2611,7 +2688,7 @@ function assertCheckpointsMatchInputs(checkpoints, inputs, unrollCandidates, con
2611
2688
  (unroll) => buildCheckpointTx(input, unroll).tx.id === checkpoint.id
2612
2689
  );
2613
2690
  if (!rebuilt) {
2614
- throw new chunkCDWLZQQW_cjs.ServerResponseMismatchError(
2691
+ throw new chunkKUN5ZRMW_cjs.ServerResponseMismatchError(
2615
2692
  `${context}: checkpoint ${index} txid ${checkpoint.id} differs from the checkpoint built locally for ${outpoint}`
2616
2693
  );
2617
2694
  }
@@ -2845,7 +2922,7 @@ function extendCoinWithTapscript(boardingTapscript, utxo) {
2845
2922
  };
2846
2923
  }
2847
2924
  function deriveContractTapscripts(contract) {
2848
- const handler = chunk37XKN5DZ_cjs.contractHandlers.get(contract.type);
2925
+ const handler = chunkOWTKOMJZ_cjs.contractHandlers.get(contract.type);
2849
2926
  if (!handler) {
2850
2927
  throw new Error(`No handler for contract type '${contract.type}'`);
2851
2928
  }
@@ -2916,7 +2993,7 @@ function getRandomId() {
2916
2993
  }
2917
2994
  function isValidArkAddress2(address) {
2918
2995
  try {
2919
- chunkCDWLZQQW_cjs.ArkAddress.decode(address);
2996
+ chunkKUN5ZRMW_cjs.ArkAddress.decode(address);
2920
2997
  return true;
2921
2998
  } catch (e) {
2922
2999
  return false;
@@ -2946,7 +3023,7 @@ function validateRecipients(recipients, dustAmount, context) {
2946
3023
  for (const recipient of recipients) {
2947
3024
  let address;
2948
3025
  try {
2949
- address = chunkCDWLZQQW_cjs.ArkAddress.decode(recipient.address);
3026
+ address = chunkKUN5ZRMW_cjs.ArkAddress.decode(recipient.address);
2950
3027
  } catch (e) {
2951
3028
  throw new Error(`Invalid Arkade address: ${recipient.address}`);
2952
3029
  }
@@ -2975,7 +3052,7 @@ function selectPendingRecoveryOutpoints(contractsWithVtxos, signerSet, nowSecond
2975
3052
  continue;
2976
3053
  }
2977
3054
  for (const v of vtxos) {
2978
- if (!chunkCDWLZQQW_cjs.hasTerminalSpend(v) && !v.isSwept) out.add(`${v.txid}:${v.vout}`);
3055
+ if (!chunkKUN5ZRMW_cjs.hasTerminalSpend(v) && !v.isSwept) out.add(`${v.txid}:${v.vout}`);
2979
3056
  }
2980
3057
  }
2981
3058
  return out;
@@ -3008,10 +3085,10 @@ function byValueDescending(vtxos) {
3008
3085
  return [...vtxos].sort((a, b) => b.value - a.value);
3009
3086
  }
3010
3087
  async function fetchTimeHeight(wallet) {
3011
- return chunkCDWLZQQW_cjs.resolveTimeHeight(wallet.onchainProvider);
3088
+ return chunkKUN5ZRMW_cjs.resolveTimeHeight(wallet.onchainProvider);
3012
3089
  }
3013
3090
  function canMigrateBySend(vtxo, now) {
3014
- if (!chunkCDWLZQQW_cjs.canSpendOffchain(vtxo, now)) return false;
3091
+ if (!chunkKUN5ZRMW_cjs.canSpendOffchain(vtxo, now)) return false;
3015
3092
  return vtxo.expiresAt !== void 0 || vtxo.expiresAtHeight !== void 0;
3016
3093
  }
3017
3094
  function byExpiryAscending(vtxos, now) {
@@ -3019,7 +3096,7 @@ function byExpiryAscending(vtxos, now) {
3019
3096
  if (vtxo.isSwept) return -Infinity;
3020
3097
  if (vtxo.expiresAt !== void 0) return vtxo.expiresAt.getTime();
3021
3098
  if (vtxo.expiresAtHeight !== void 0) {
3022
- return chunkCDWLZQQW_cjs.isPastExpiry(vtxo, now) ? -Infinity : Infinity;
3099
+ return chunkKUN5ZRMW_cjs.isPastExpiry(vtxo, now) ? -Infinity : Infinity;
3023
3100
  }
3024
3101
  return Infinity;
3025
3102
  };
@@ -3056,10 +3133,10 @@ var DEFAULT_SETTLEMENT_CONFIG = {
3056
3133
  };
3057
3134
  function getRecoverableVtxos(vtxos, dustAmount, now) {
3058
3135
  return vtxos.filter((vtxo) => {
3059
- if (chunkCDWLZQQW_cjs.canRecoverOnchain(vtxo, now)) {
3136
+ if (chunkKUN5ZRMW_cjs.canRecoverOnchain(vtxo, now)) {
3060
3137
  return true;
3061
3138
  }
3062
- if (chunkCDWLZQQW_cjs.canSpendOffchain(vtxo, now) && vtxo.isPreconfirmed && isSubdust(vtxo, dustAmount)) {
3139
+ if (chunkKUN5ZRMW_cjs.canSpendOffchain(vtxo, now) && vtxo.isPreconfirmed && isSubdust(vtxo, dustAmount)) {
3063
3140
  return true;
3064
3141
  }
3065
3142
  return false;
@@ -3090,7 +3167,7 @@ function getRecoverableWithSubdust(vtxos, dustAmount, now) {
3090
3167
  }
3091
3168
  function isVtxoExpiringSoon(vtxo, thresholdMs) {
3092
3169
  const realThresholdMs = thresholdMs <= 100 ? DEFAULT_THRESHOLD_MS : thresholdMs;
3093
- const expiresAt = chunkCDWLZQQW_cjs.normalizeVtxo(vtxo).expiresAt;
3170
+ const expiresAt = chunkKUN5ZRMW_cjs.normalizeVtxo(vtxo).expiresAt;
3094
3171
  if (expiresAt === void 0) return false;
3095
3172
  const now = Date.now();
3096
3173
  const batchExpiry = expiresAt.getTime();
@@ -3099,7 +3176,7 @@ function isVtxoExpiringSoon(vtxo, thresholdMs) {
3099
3176
  }
3100
3177
  function getExpiringAndRecoverableVtxos(vtxos, thresholdMs, dustAmount, now) {
3101
3178
  return vtxos.filter(
3102
- (vtxo) => isVtxoExpiringSoon(vtxo, thresholdMs) || chunkCDWLZQQW_cjs.canRecoverOnchain(vtxo, now) || isSubdust(vtxo, dustAmount)
3179
+ (vtxo) => isVtxoExpiringSoon(vtxo, thresholdMs) || chunkKUN5ZRMW_cjs.canRecoverOnchain(vtxo, now) || isSubdust(vtxo, dustAmount)
3103
3180
  );
3104
3181
  }
3105
3182
  function isMigrationCapable(wallet) {
@@ -3581,11 +3658,11 @@ var VtxoManager = class _VtxoManager {
3581
3658
  `Sweep not economical: output ${outputAmount} sats after ${fee} sats fee is below dust (${dustAmount} sats)`
3582
3659
  );
3583
3660
  }
3584
- const tx = new chunkCDWLZQQW_cjs.Transaction();
3661
+ const tx = new chunkKUN5ZRMW_cjs.Transaction();
3585
3662
  for (const utxo of expiredUtxos) {
3586
- const utxoScript = chunkCDWLZQQW_cjs.VtxoScript.decode(utxo.tapTree);
3663
+ const utxoScript = chunkKUN5ZRMW_cjs.VtxoScript.decode(utxo.tapTree);
3587
3664
  const utxoExitLeaf = utxoScript.leaves.find(
3588
- (leaf) => chunkCDWLZQQW_cjs.CSVMultisigTapscript.isScriptValid(chunkCDWLZQQW_cjs.scriptFromTapLeafScript(leaf)) === true
3665
+ (leaf) => chunkKUN5ZRMW_cjs.CSVMultisigTapscript.isScriptValid(chunkKUN5ZRMW_cjs.scriptFromTapLeafScript(leaf)) === true
3589
3666
  );
3590
3667
  if (!utxoExitLeaf) {
3591
3668
  throw new Error(
@@ -3600,7 +3677,7 @@ var VtxoManager = class _VtxoManager {
3600
3677
  amount: BigInt(utxo.value)
3601
3678
  },
3602
3679
  tapLeafScript: [utxoExitLeaf],
3603
- sequence: chunkCDWLZQQW_cjs.getSequence(utxoExitLeaf)
3680
+ sequence: chunkKUN5ZRMW_cjs.getSequence(utxoExitLeaf)
3604
3681
  });
3605
3682
  }
3606
3683
  tx.addOutputAddress(boardingAddress, outputAmount, this.getNetwork());
@@ -3834,8 +3911,8 @@ var VtxoManager = class _VtxoManager {
3834
3911
  if (!serverPubKey) continue;
3835
3912
  const cls = classifyAgainstSignerSet(serverPubKey, signerSet, nowSeconds);
3836
3913
  if (cls.status === "CURRENT") continue;
3837
- const recoverable = vtxos.filter((v) => v.isSwept && !chunkCDWLZQQW_cjs.hasTerminalSpend(v));
3838
- const spendable = vtxos.filter((v) => !chunkCDWLZQQW_cjs.hasTerminalSpend(v) && !v.isSwept);
3914
+ const recoverable = vtxos.filter((v) => v.isSwept && !chunkKUN5ZRMW_cjs.hasTerminalSpend(v));
3915
+ const spendable = vtxos.filter((v) => !chunkKUN5ZRMW_cjs.hasTerminalSpend(v) && !v.isSwept);
3839
3916
  const value = spendable.reduce((sum, v) => sum + v.value, 0);
3840
3917
  let recoverableCount = 0;
3841
3918
  let recoverableValue = 0;
@@ -3848,7 +3925,7 @@ var VtxoManager = class _VtxoManager {
3848
3925
  awaitingSweepCount = spendable.length;
3849
3926
  awaitingSweepValue = value;
3850
3927
  for (const v of spendable) {
3851
- const exp = chunkCDWLZQQW_cjs.toBatchExpiry(v);
3928
+ const exp = chunkKUN5ZRMW_cjs.toBatchExpiry(v);
3852
3929
  if (exp !== void 0 && (nextSweepEta === void 0 || exp < nextSweepEta)) {
3853
3930
  nextSweepEta = exp;
3854
3931
  }
@@ -4109,7 +4186,7 @@ var VtxoManager = class _VtxoManager {
4109
4186
  /** Decodes the boarding tapscript exit path to extract the CSV timelock. */
4110
4187
  getBoardingTimelock() {
4111
4188
  const wallet = this.getSweepWallet();
4112
- const exitScript = chunkCDWLZQQW_cjs.CSVMultisigTapscript.decode(
4189
+ const exitScript = chunkKUN5ZRMW_cjs.CSVMultisigTapscript.decode(
4113
4190
  base.hex.decode(wallet.boardingTapscript.exitScript)
4114
4191
  );
4115
4192
  return exitScript.params.timelock;
@@ -4240,8 +4317,8 @@ var VtxoManager = class _VtxoManager {
4240
4317
  * or doesn't carry the metadata.
4241
4318
  */
4242
4319
  extractSpentOutpoint(error) {
4243
- const ark = chunkCDWLZQQW_cjs.maybeArkError(error);
4244
- if (!chunkCDWLZQQW_cjs.isArkError(ark, chunkCDWLZQQW_cjs.ArkErrorName.VTXO_ALREADY_SPENT)) return void 0;
4320
+ const ark = chunkKUN5ZRMW_cjs.maybeArkError(error);
4321
+ if (!chunkKUN5ZRMW_cjs.isArkError(ark, chunkKUN5ZRMW_cjs.ArkErrorName.VTXO_ALREADY_SPENT)) return void 0;
4245
4322
  const raw = ark.metadata?.vtxo_outpoint;
4246
4323
  if (typeof raw !== "string") return void 0;
4247
4324
  const [txid, voutStr] = raw.split(":");
@@ -4431,7 +4508,7 @@ var VtxoManager = class _VtxoManager {
4431
4508
  if (filteredVtxos.length >= MAX_VTXOS_PER_SETTLEMENT) {
4432
4509
  break;
4433
4510
  }
4434
- const inputFee = estimator.evalOffchainInput(chunkCDWLZQQW_cjs.toOffchainInputFeeParams(v));
4511
+ const inputFee = estimator.evalOffchainInput(chunkKUN5ZRMW_cjs.toOffchainInputFeeParams(v));
4435
4512
  if (inputFee.satoshis >= v.value) {
4436
4513
  continue;
4437
4514
  }
@@ -4451,7 +4528,7 @@ var VtxoManager = class _VtxoManager {
4451
4528
  const arkAddress = await this.wallet.getAddress();
4452
4529
  const outputFee = estimator.evalOffchainOutput({
4453
4530
  amount: totalAmount,
4454
- script: base.hex.encode(chunkCDWLZQQW_cjs.ArkAddress.decode(arkAddress).pkScript)
4531
+ script: base.hex.encode(chunkKUN5ZRMW_cjs.ArkAddress.decode(arkAddress).pkScript)
4455
4532
  });
4456
4533
  totalAmount -= BigInt(outputFee.satoshis);
4457
4534
  if (totalAmount < dustAmount) return;
@@ -4531,7 +4608,7 @@ var ArkNote = class _ArkNote {
4531
4608
  this.value = value;
4532
4609
  this.HRP = HRP;
4533
4610
  const preimageHash = utils_js.sha256(this.preimage);
4534
- this.vtxoScript = new chunkCDWLZQQW_cjs.VtxoScript([noteTapscript(preimageHash)]);
4611
+ this.vtxoScript = new chunkKUN5ZRMW_cjs.VtxoScript([noteTapscript(preimageHash)]);
4535
4612
  const leaf = this.vtxoScript.leaves[0];
4536
4613
  this.txid = base.hex.encode(new Uint8Array(preimageHash).reverse());
4537
4614
  this.tapTree = this.vtxoScript.encode();
@@ -4698,7 +4775,7 @@ var ArkadeCash = class _ArkadeCash {
4698
4775
  const privateKey = data.slice(1, 33);
4699
4776
  const serverPubKey = data.slice(33, 65);
4700
4777
  const sequence = new DataView(data.buffer, data.byteOffset + 65, 4).getUint32(0, false);
4701
- const csvTimelock = chunkCDWLZQQW_cjs.sequenceToTimelock(sequence);
4778
+ const csvTimelock = chunkKUN5ZRMW_cjs.sequenceToTimelock(sequence);
4702
4779
  return new _ArkadeCash(privateKey, serverPubKey, csvTimelock, decoded.prefix);
4703
4780
  }
4704
4781
  toString() {
@@ -4706,7 +4783,7 @@ var ArkadeCash = class _ArkadeCash {
4706
4783
  data[0] = _ArkadeCash.Version;
4707
4784
  data.set(this._privateKey, 1);
4708
4785
  data.set(this._serverPubKey, 33);
4709
- const sequence = chunkCDWLZQQW_cjs.timelockToSequence(this.csvTimelock);
4786
+ const sequence = chunkKUN5ZRMW_cjs.timelockToSequence(this.csvTimelock);
4710
4787
  new DataView(data.buffer, data.byteOffset + 65, 4).setUint32(0, sequence, false);
4711
4788
  const words = base.bech32m.toWords(data);
4712
4789
  return base.bech32m.encode(this.hrp, words, 1023);
@@ -4715,7 +4792,7 @@ var ArkadeCash = class _ArkadeCash {
4715
4792
  return SingleKey.fromPrivateKey(this._privateKey);
4716
4793
  }
4717
4794
  get vtxoScript() {
4718
- return new chunk37XKN5DZ_cjs.DefaultVtxo.Script({
4795
+ return new chunkOWTKOMJZ_cjs.DefaultVtxo.Script({
4719
4796
  pubKey: this._publicKey,
4720
4797
  serverPubKey: this._serverPubKey,
4721
4798
  csvTimelock: this.csvTimelock
@@ -4976,7 +5053,7 @@ async function captureExitBranch(params) {
4976
5053
  const nonCommitment = ordered.filter((c) => chainTxTypeToChainedExit(c.type) !== 1 /* Commitment */).map((c) => c.txid);
4977
5054
  if (nonCommitment.length > 0) {
4978
5055
  for (const psbt of await resolver.getVirtualTxs(nonCommitment)) {
4979
- psbtByTxid.set(chunkCDWLZQQW_cjs.Transaction.fromPSBT(base.base64.decode(psbt)).id, psbt);
5056
+ psbtByTxid.set(chunkKUN5ZRMW_cjs.Transaction.fromPSBT(base.base64.decode(psbt)).id, psbt);
4980
5057
  }
4981
5058
  }
4982
5059
  }
@@ -5019,10 +5096,10 @@ var IndexerExitDataSource = class {
5019
5096
  while (hasMore) {
5020
5097
  const { chain: page, page: meta } = await this.indexer.getVtxoChain(
5021
5098
  { txid: vtxo.txid, vout: vtxo.vout },
5022
- { pageIndex, pageSize: chunkCDWLZQQW_cjs.DEFAULT_PAGE_SIZE }
5099
+ { pageIndex, pageSize: chunkKUN5ZRMW_cjs.DEFAULT_PAGE_SIZE }
5023
5100
  );
5024
5101
  chain.push(...page);
5025
- hasMore = meta ? page.length === chunkCDWLZQQW_cjs.DEFAULT_PAGE_SIZE : false;
5102
+ hasMore = meta ? page.length === chunkKUN5ZRMW_cjs.DEFAULT_PAGE_SIZE : false;
5026
5103
  pageIndex++;
5027
5104
  }
5028
5105
  return chain;
@@ -5034,12 +5111,12 @@ var IndexerExitDataSource = class {
5034
5111
  while (hasMore) {
5035
5112
  const { txs, page } = await this.indexer.getVirtualTxs(txids, {
5036
5113
  pageIndex,
5037
- pageSize: chunkCDWLZQQW_cjs.DEFAULT_PAGE_SIZE
5114
+ pageSize: chunkKUN5ZRMW_cjs.DEFAULT_PAGE_SIZE
5038
5115
  });
5039
5116
  for (const psbt of txs) {
5040
- out.set(chunkCDWLZQQW_cjs.Transaction.fromPSBT(base.base64.decode(psbt)).id, psbt);
5117
+ out.set(chunkKUN5ZRMW_cjs.Transaction.fromPSBT(base.base64.decode(psbt)).id, psbt);
5041
5118
  }
5042
- hasMore = page ? txs.length === chunkCDWLZQQW_cjs.DEFAULT_PAGE_SIZE : false;
5119
+ hasMore = page ? txs.length === chunkKUN5ZRMW_cjs.DEFAULT_PAGE_SIZE : false;
5043
5120
  pageIndex++;
5044
5121
  }
5045
5122
  return out;
@@ -5060,7 +5137,7 @@ function chainedTxTypeToChainTxType(t) {
5060
5137
  }
5061
5138
  }
5062
5139
  function psbtInputTxids(psbtBase64) {
5063
- const tx = chunkCDWLZQQW_cjs.Transaction.fromPSBT(base.base64.decode(psbtBase64));
5140
+ const tx = chunkKUN5ZRMW_cjs.Transaction.fromPSBT(base.base64.decode(psbtBase64));
5064
5141
  const ids = [];
5065
5142
  for (let i = 0; i < tx.inputsLength; i++) {
5066
5143
  const txid = tx.getInput(i).txid;
@@ -5240,6 +5317,7 @@ function serializeArkInfoSnapshot(info, savedAt) {
5240
5317
  forfeitPubkey: info.forfeitPubkey,
5241
5318
  unilateralExitDelay: info.unilateralExitDelay.toString(),
5242
5319
  boardingExitDelay: info.boardingExitDelay.toString(),
5320
+ vtxoTreeExpiry: info.vtxoTreeExpiry?.toString(),
5243
5321
  sessionDuration: info.sessionDuration.toString(),
5244
5322
  dust: info.dust.toString(),
5245
5323
  fees: info.fees,
@@ -5289,6 +5367,7 @@ function hydrateArkInfo(snapshot) {
5289
5367
  sessionDuration: BigInt(a.sessionDuration),
5290
5368
  signerPubkey: a.signerPubkey,
5291
5369
  unilateralExitDelay: BigInt(a.unilateralExitDelay),
5370
+ vtxoTreeExpiry: a.vtxoTreeExpiry !== void 0 ? BigInt(a.vtxoTreeExpiry) : void 0,
5292
5371
  utxoMaxAmount: BigInt(a.utxoMaxAmount),
5293
5372
  utxoMinAmount: BigInt(a.utxoMinAmount),
5294
5373
  version: a.version,
@@ -5361,6 +5440,9 @@ function parseStoredArkInfoSnapshot(raw) {
5361
5440
  ]) {
5362
5441
  assertDecimalString(a[field], `arkInfo.${field}`);
5363
5442
  }
5443
+ if (a.vtxoTreeExpiry !== void 0) {
5444
+ assertDecimalString(a.vtxoTreeExpiry, "arkInfo.vtxoTreeExpiry");
5445
+ }
5364
5446
  assertFeeInfo(a.fees, "arkInfo.fees");
5365
5447
  if (!Array.isArray(a.deprecatedSigners)) {
5366
5448
  throw new MalformedArkInfoSnapshotError("arkInfo.deprecatedSigners must be an array");
@@ -5408,10 +5490,10 @@ async function resolveArkInfo(arkProvider, walletRepository) {
5408
5490
  try {
5409
5491
  info = await arkProvider.getInfo();
5410
5492
  } catch (err) {
5411
- if (!chunkCDWLZQQW_cjs.isRetryableProviderError(err)) throw err;
5493
+ if (!chunkKUN5ZRMW_cjs.isRetryableProviderError(err)) throw err;
5412
5494
  const snapshot = await loadArkInfoSnapshot(walletRepository);
5413
5495
  if (!snapshot) {
5414
- throw new chunkCDWLZQQW_cjs.ProviderUnavailableError(
5496
+ throw new chunkKUN5ZRMW_cjs.ProviderUnavailableError(
5415
5497
  "Arkade server info is unavailable and no cached snapshot exists",
5416
5498
  { cause: err }
5417
5499
  );
@@ -5794,7 +5876,7 @@ function collectArkTxidsNeedingCreatedAt(vtxos) {
5794
5876
  return [...txids];
5795
5877
  }
5796
5878
  async function buildTransactionHistory(vtxos, allBoardingTxs, commitmentsToIgnore, resolveTxCreatedAt) {
5797
- const fromOldestVtxo = vtxos.map(chunkCDWLZQQW_cjs.normalizeVtxo).sort((a, b) => a.createdAt.getTime() - b.createdAt.getTime());
5879
+ const fromOldestVtxo = vtxos.map(chunkKUN5ZRMW_cjs.normalizeVtxo).sort((a, b) => a.createdAt.getTime() - b.createdAt.getTime());
5798
5880
  const txidsNeedingCreatedAt = resolveTxCreatedAt ? collectArkTxidsNeedingCreatedAt(fromOldestVtxo) : [];
5799
5881
  const resolvedCreatedAt = resolveTxCreatedAt && txidsNeedingCreatedAt.length > 0 ? await resolveTxCreatedAt(txidsNeedingCreatedAt) : /* @__PURE__ */ new Map();
5800
5882
  const unmatchedSettledBoardingTxs = allBoardingTxs.filter(isSettledBoardingReceive).sort((a, b) => a.createdAt - b.createdAt);
@@ -5958,7 +6040,7 @@ var AssetManager = class extends ReadonlyAssetManager {
5958
6040
  const virtualCoins = await this.wallet.getVtxos({
5959
6041
  withRecoverable: false
5960
6042
  });
5961
- const controlAssetRef = params.controlAssetId ? chunk24YNIQSW_cjs.AssetRef.fromId(chunk24YNIQSW_cjs.AssetId.fromString(params.controlAssetId)) : null;
6043
+ const controlAssetRef = params.controlAssetId ? chunkYK6NP5KX_cjs.AssetRef.fromId(chunkYK6NP5KX_cjs.AssetId.fromString(params.controlAssetId)) : null;
5962
6044
  const coinSelection = selectVirtualCoins(virtualCoins, Number(this.wallet.dustAmount));
5963
6045
  let totalBtcSelected = 0n;
5964
6046
  const assetChanges = /* @__PURE__ */ new Map();
@@ -5971,8 +6053,8 @@ var AssetManager = class extends ReadonlyAssetManager {
5971
6053
  }
5972
6054
  }
5973
6055
  const groups = [];
5974
- const issuedAssetOutput = chunk24YNIQSW_cjs.AssetOutput.create(0, params.amount);
5975
- const issuedAssetGroup = chunk24YNIQSW_cjs.AssetGroup.create(
6056
+ const issuedAssetOutput = chunkYK6NP5KX_cjs.AssetOutput.create(0, params.amount);
6057
+ const issuedAssetGroup = chunkYK6NP5KX_cjs.AssetGroup.create(
5976
6058
  null,
5977
6059
  controlAssetRef,
5978
6060
  [],
@@ -5987,28 +6069,28 @@ var AssetManager = class extends ReadonlyAssetManager {
5987
6069
  for (const [inputIndex, assets] of assetInputs) {
5988
6070
  for (const asset of assets) {
5989
6071
  if (asset.assetId !== assetId) continue;
5990
- changeInputs.push(chunk24YNIQSW_cjs.AssetInput.create(inputIndex, asset.amount));
6072
+ changeInputs.push(chunkYK6NP5KX_cjs.AssetInput.create(inputIndex, asset.amount));
5991
6073
  }
5992
6074
  }
5993
6075
  groups.push(
5994
- chunk24YNIQSW_cjs.AssetGroup.create(
5995
- chunk24YNIQSW_cjs.AssetId.fromString(assetId),
6076
+ chunkYK6NP5KX_cjs.AssetGroup.create(
6077
+ chunkYK6NP5KX_cjs.AssetId.fromString(assetId),
5996
6078
  null,
5997
6079
  changeInputs,
5998
- [chunk24YNIQSW_cjs.AssetOutput.create(0, amount)],
6080
+ [chunkYK6NP5KX_cjs.AssetOutput.create(0, amount)],
5999
6081
  []
6000
6082
  )
6001
6083
  );
6002
6084
  }
6003
6085
  }
6004
6086
  const address = await this.wallet.getAddress();
6005
- const outputAddress = chunkCDWLZQQW_cjs.ArkAddress.decode(address);
6087
+ const outputAddress = chunkKUN5ZRMW_cjs.ArkAddress.decode(address);
6006
6088
  const outputs = [
6007
6089
  {
6008
6090
  script: outputAddress.pkScript,
6009
6091
  amount: BigInt(totalBtcSelected)
6010
6092
  },
6011
- Extension.create([chunk24YNIQSW_cjs.Packet.create(groups)]).txOut()
6093
+ Extension.create([chunkYK6NP5KX_cjs.Packet.create(groups)]).txOut()
6012
6094
  ];
6013
6095
  const { arkTxid } = await this.wallet.buildAndSubmitOffchainTx(
6014
6096
  coinSelection.inputs,
@@ -6016,7 +6098,7 @@ var AssetManager = class extends ReadonlyAssetManager {
6016
6098
  );
6017
6099
  return {
6018
6100
  arkTxId: arkTxid,
6019
- assetId: chunk24YNIQSW_cjs.AssetId.create(arkTxid, 0).toString()
6101
+ assetId: chunkYK6NP5KX_cjs.AssetId.create(arkTxid, 0).toString()
6020
6102
  };
6021
6103
  }
6022
6104
  /**
@@ -6088,16 +6170,16 @@ var AssetManager = class extends ReadonlyAssetManager {
6088
6170
  for (const [inputIndex, assets] of assetInputs) {
6089
6171
  for (const asset of assets) {
6090
6172
  if (asset.assetId !== params.assetId) continue;
6091
- reissueInputs.push(chunk24YNIQSW_cjs.AssetInput.create(inputIndex, asset.amount));
6173
+ reissueInputs.push(chunkYK6NP5KX_cjs.AssetInput.create(inputIndex, asset.amount));
6092
6174
  }
6093
6175
  }
6094
6176
  const totalAssetAmount = assetToReissueAmount + params.amount;
6095
- const reissueAssetIdObj = chunk24YNIQSW_cjs.AssetId.fromString(params.assetId);
6096
- const reissueAssetGroup = chunk24YNIQSW_cjs.AssetGroup.create(
6177
+ const reissueAssetIdObj = chunkYK6NP5KX_cjs.AssetId.fromString(params.assetId);
6178
+ const reissueAssetGroup = chunkYK6NP5KX_cjs.AssetGroup.create(
6097
6179
  reissueAssetIdObj,
6098
6180
  null,
6099
6181
  reissueInputs,
6100
- [chunk24YNIQSW_cjs.AssetOutput.create(0, totalAssetAmount)],
6182
+ [chunkYK6NP5KX_cjs.AssetOutput.create(0, totalAssetAmount)],
6101
6183
  []
6102
6184
  );
6103
6185
  const groups = [reissueAssetGroup];
@@ -6106,27 +6188,27 @@ var AssetManager = class extends ReadonlyAssetManager {
6106
6188
  for (const [inputIndex, assets] of assetInputs) {
6107
6189
  for (const asset of assets) {
6108
6190
  if (asset.assetId !== assetId) continue;
6109
- changeInputs.push(chunk24YNIQSW_cjs.AssetInput.create(inputIndex, asset.amount));
6191
+ changeInputs.push(chunkYK6NP5KX_cjs.AssetInput.create(inputIndex, asset.amount));
6110
6192
  }
6111
6193
  }
6112
6194
  groups.push(
6113
- chunk24YNIQSW_cjs.AssetGroup.create(
6114
- chunk24YNIQSW_cjs.AssetId.fromString(assetId),
6195
+ chunkYK6NP5KX_cjs.AssetGroup.create(
6196
+ chunkYK6NP5KX_cjs.AssetId.fromString(assetId),
6115
6197
  null,
6116
6198
  changeInputs,
6117
- [chunk24YNIQSW_cjs.AssetOutput.create(0, amount)],
6199
+ [chunkYK6NP5KX_cjs.AssetOutput.create(0, amount)],
6118
6200
  []
6119
6201
  )
6120
6202
  );
6121
6203
  }
6122
6204
  const address = await this.wallet.getAddress();
6123
- const outputAddress = chunkCDWLZQQW_cjs.ArkAddress.decode(address);
6205
+ const outputAddress = chunkKUN5ZRMW_cjs.ArkAddress.decode(address);
6124
6206
  const outputs = [
6125
6207
  {
6126
6208
  script: outputAddress.pkScript,
6127
6209
  amount: BigInt(totalBtcSelected)
6128
6210
  },
6129
- Extension.create([chunk24YNIQSW_cjs.Packet.create(groups)]).txOut()
6211
+ Extension.create([chunkYK6NP5KX_cjs.Packet.create(groups)]).txOut()
6130
6212
  ];
6131
6213
  const { arkTxid } = await this.wallet.buildAndSubmitOffchainTx(selectedCoins, outputs);
6132
6214
  return arkTxid;
@@ -6193,27 +6275,27 @@ var AssetManager = class extends ReadonlyAssetManager {
6193
6275
  for (const [inputIndex, assets] of assetInputs) {
6194
6276
  for (const asset of assets) {
6195
6277
  if (asset.assetId !== assetId) continue;
6196
- changeInputs.push(chunk24YNIQSW_cjs.AssetInput.create(inputIndex, asset.amount));
6278
+ changeInputs.push(chunkYK6NP5KX_cjs.AssetInput.create(inputIndex, asset.amount));
6197
6279
  }
6198
6280
  }
6199
6281
  groups.push(
6200
- chunk24YNIQSW_cjs.AssetGroup.create(
6201
- chunk24YNIQSW_cjs.AssetId.fromString(assetId),
6282
+ chunkYK6NP5KX_cjs.AssetGroup.create(
6283
+ chunkYK6NP5KX_cjs.AssetId.fromString(assetId),
6202
6284
  null,
6203
6285
  changeInputs,
6204
- amount > 0n ? [chunk24YNIQSW_cjs.AssetOutput.create(0, amount)] : [],
6286
+ amount > 0n ? [chunkYK6NP5KX_cjs.AssetOutput.create(0, amount)] : [],
6205
6287
  []
6206
6288
  )
6207
6289
  );
6208
6290
  }
6209
6291
  const address = await this.wallet.getAddress();
6210
- const outputAddress = chunkCDWLZQQW_cjs.ArkAddress.decode(address);
6292
+ const outputAddress = chunkKUN5ZRMW_cjs.ArkAddress.decode(address);
6211
6293
  const outputs = [
6212
6294
  {
6213
6295
  script: outputAddress.pkScript,
6214
6296
  amount: BigInt(totalBtcSelected)
6215
6297
  },
6216
- Extension.create([chunk24YNIQSW_cjs.Packet.create(groups)]).txOut()
6298
+ Extension.create([chunkYK6NP5KX_cjs.Packet.create(groups)]).txOut()
6217
6299
  ];
6218
6300
  const { arkTxid } = await this.wallet.buildAndSubmitOffchainTx(selectedCoins, outputs);
6219
6301
  return arkTxid;
@@ -6238,7 +6320,7 @@ function castMetadata(metadata) {
6238
6320
  } else {
6239
6321
  throw new Error("Invalid metadata value type");
6240
6322
  }
6241
- md.push(chunk24YNIQSW_cjs.Metadata.create(textEncoder.encode(key), valueBytes));
6323
+ md.push(chunkYK6NP5KX_cjs.Metadata.create(textEncoder.encode(key), valueBytes));
6242
6324
  }
6243
6325
  return md;
6244
6326
  }
@@ -6259,10 +6341,10 @@ var DelegateManagerImpl = class {
6259
6341
  if (vtxos.length === 0) {
6260
6342
  return { delegated: [], failed: [] };
6261
6343
  }
6262
- const destinationScript = chunkCDWLZQQW_cjs.ArkAddress.decode(destination).pkScript;
6344
+ const destinationScript = chunkKUN5ZRMW_cjs.ArkAddress.decode(destination).pkScript;
6263
6345
  const arkInfo = await this.arkInfoProvider.getInfo();
6264
6346
  const delegateInfo = await this.delegateProvider.getDelegateInfo();
6265
- const eligible = vtxos.map(chunkCDWLZQQW_cjs.normalizeVtxo).filter(
6347
+ const eligible = vtxos.map(chunkKUN5ZRMW_cjs.normalizeVtxo).filter(
6266
6348
  (v) => isAnnotated(v) && findDelegateTapLeaf(v, delegateInfo.pubkey) !== void 0
6267
6349
  );
6268
6350
  if (eligible.length === 0) {
@@ -6291,11 +6373,11 @@ var DelegateManagerImpl = class {
6291
6373
  const groupByExpiry = /* @__PURE__ */ new Map();
6292
6374
  let recoverableVtxos = [];
6293
6375
  for (const vtxo of eligible) {
6294
- if (chunkCDWLZQQW_cjs.canRecoverOnchain(vtxo, now)) {
6376
+ if (chunkKUN5ZRMW_cjs.canRecoverOnchain(vtxo, now)) {
6295
6377
  recoverableVtxos.push(vtxo);
6296
6378
  continue;
6297
6379
  }
6298
- const expiry = chunkCDWLZQQW_cjs.toBatchExpiry(vtxo);
6380
+ const expiry = chunkKUN5ZRMW_cjs.toBatchExpiry(vtxo);
6299
6381
  if (!expiry) continue;
6300
6382
  const dayKey = getDayTimestamp(expiry);
6301
6383
  groupByExpiry.set(dayKey, [...groupByExpiry.get(dayKey) ?? [], vtxo]);
@@ -6360,7 +6442,7 @@ async function delegate(identity, delegateProvider, arkInfo, delegateInfo, vtxos
6360
6442
  }
6361
6443
  if (!delegateAt) {
6362
6444
  const now = { timestamp: /* @__PURE__ */ new Date() };
6363
- const expiryTimestamp = vtxos.filter((coin) => !chunkCDWLZQQW_cjs.canRecoverOnchain(coin, now) && chunkCDWLZQQW_cjs.toBatchExpiry(coin)).reduce((min, coin) => Math.min(min, chunkCDWLZQQW_cjs.toBatchExpiry(coin)), Number.MAX_SAFE_INTEGER);
6445
+ const expiryTimestamp = vtxos.filter((coin) => !chunkKUN5ZRMW_cjs.canRecoverOnchain(coin, now) && chunkKUN5ZRMW_cjs.toBatchExpiry(coin)).reduce((min, coin) => Math.min(min, chunkKUN5ZRMW_cjs.toBatchExpiry(coin)), Number.MAX_SAFE_INTEGER);
6364
6446
  if (!expiryTimestamp || expiryTimestamp === Number.MAX_SAFE_INTEGER) {
6365
6447
  delegateAt = new Date(Date.now() + 1 * 60 * 1e3);
6366
6448
  } else {
@@ -6389,7 +6471,7 @@ async function delegate(identity, delegateProvider, arkInfo, delegateInfo, vtxos
6389
6471
  let amount = 0n;
6390
6472
  for (const coin of vtxos) {
6391
6473
  const inputFee = estimator.evalOffchainInput({
6392
- ...chunkCDWLZQQW_cjs.toOffchainInputFeeParams(coin),
6474
+ ...chunkKUN5ZRMW_cjs.toOffchainInputFeeParams(coin),
6393
6475
  type: "vtxo"
6394
6476
  });
6395
6477
  if (inputFee.value >= coin.value) {
@@ -6403,7 +6485,7 @@ async function delegate(identity, delegateProvider, arkInfo, delegateInfo, vtxos
6403
6485
  const delegateFee = BigInt(Number(fee));
6404
6486
  if (delegateFee > 0n) {
6405
6487
  outputs.push({
6406
- script: chunkCDWLZQQW_cjs.ArkAddress.decode(delegateAddress).pkScript,
6488
+ script: chunkKUN5ZRMW_cjs.ArkAddress.decode(delegateAddress).pkScript,
6407
6489
  amount: delegateFee
6408
6490
  });
6409
6491
  }
@@ -6436,10 +6518,10 @@ async function delegate(identity, delegateProvider, arkInfo, delegateInfo, vtxos
6436
6518
  destinationScript
6437
6519
  );
6438
6520
  const forfeitOutputScript = btcSigner.OutScript.encode(
6439
- btcSigner.Address(chunkCDWLZQQW_cjs.getNetwork(network)).decode(forfeitAddress)
6521
+ btcSigner.Address(chunkKUN5ZRMW_cjs.getNetwork(network)).decode(forfeitAddress)
6440
6522
  );
6441
6523
  const forfeits = await Promise.all(
6442
- vtxos.filter((v) => !chunkCDWLZQQW_cjs.canRecoverOnchain(v, { timestamp: /* @__PURE__ */ new Date() })).map(async (coin) => {
6524
+ vtxos.filter((v) => !chunkKUN5ZRMW_cjs.canRecoverOnchain(v, { timestamp: /* @__PURE__ */ new Date() })).map(async (coin) => {
6443
6525
  const forfeit = await makeDelegateForfeitTx(
6444
6526
  coin,
6445
6527
  dust,
@@ -6464,7 +6546,7 @@ async function makeDelegateForfeitTx(input, connectorAmount, delegatePubkey, for
6464
6546
  index: input.vout,
6465
6547
  witnessUtxo: {
6466
6548
  amount: BigInt(input.value),
6467
- script: chunkCDWLZQQW_cjs.VtxoScript.decode(input.tapTree).pkScript
6549
+ script: chunkKUN5ZRMW_cjs.VtxoScript.decode(input.tapTree).pkScript
6468
6550
  },
6469
6551
  sighashType: btcSigner.SigHash.ALL_ANYONECANPAY,
6470
6552
  tapLeafScript: [delegateTapLeaf]
@@ -6522,7 +6604,7 @@ async function makeSignedDelegateIntent(identity, coins, outputs, onchainOutputs
6522
6604
  expire_at: 0,
6523
6605
  cosigners_public_keys: cosignerPubKeys
6524
6606
  };
6525
- const proof = chunkCDWLZQQW_cjs.Intent.create(message, coins, outputs);
6607
+ const proof = chunkKUN5ZRMW_cjs.Intent.create(message, coins, outputs);
6526
6608
  const signedProof = await identity.sign(proof);
6527
6609
  return {
6528
6610
  proof: base.base64.encode(signedProof.toPSBT()),
@@ -6540,10 +6622,10 @@ function getDayTimestamp(timestamp) {
6540
6622
  function findDelegateTapLeaf(vtxo, delegatePubkey) {
6541
6623
  if (!vtxo.tapTree) return void 0;
6542
6624
  const pk = delegatePubkey.length === 66 ? delegatePubkey.slice(2) : delegatePubkey;
6543
- const vtxoScript = chunkCDWLZQQW_cjs.VtxoScript.decode(vtxo.tapTree);
6625
+ const vtxoScript = chunkKUN5ZRMW_cjs.VtxoScript.decode(vtxo.tapTree);
6544
6626
  return vtxoScript.leaves.find((tapLeaf) => {
6545
- const arkTapscript = chunkCDWLZQQW_cjs.decodeTapscript(chunkCDWLZQQW_cjs.scriptFromTapLeafScript(tapLeaf));
6546
- if (!chunkCDWLZQQW_cjs.MultisigTapscript.is(arkTapscript)) return false;
6627
+ const arkTapscript = chunkKUN5ZRMW_cjs.decodeTapscript(chunkKUN5ZRMW_cjs.scriptFromTapLeafScript(tapLeaf));
6628
+ if (!chunkKUN5ZRMW_cjs.MultisigTapscript.is(arkTapscript)) return false;
6547
6629
  return arkTapscript.params.pubkeys.map(base.hex.encode).includes(pk);
6548
6630
  });
6549
6631
  }
@@ -6731,7 +6813,7 @@ async function closeDatabase(dbName) {
6731
6813
  return true;
6732
6814
  }
6733
6815
  function scriptFromArkAddress(address) {
6734
- return base.hex.encode(chunkCDWLZQQW_cjs.ArkAddress.decode(address).pkScript);
6816
+ return base.hex.encode(chunkKUN5ZRMW_cjs.ArkAddress.decode(address).pkScript);
6735
6817
  }
6736
6818
 
6737
6819
  // src/repositories/indexedDB/schema.ts
@@ -7228,7 +7310,7 @@ function validateVtxosForScript(vtxos, script, context) {
7228
7310
  }
7229
7311
  async function getVtxosForContract(repo, contract) {
7230
7312
  const vtxos = repo.getVtxosForScript ? await repo.getVtxosForScript(contract.script) : filterVtxosForScript(await repo.getVtxos(contract.address), contract.script);
7231
- return vtxos.map(chunkCDWLZQQW_cjs.normalizeVtxo);
7313
+ return vtxos.map(chunkKUN5ZRMW_cjs.normalizeVtxo);
7232
7314
  }
7233
7315
  async function saveVtxosForContract(repo, contract, vtxos) {
7234
7316
  if (repo.saveVtxosForScript) {
@@ -7432,7 +7514,7 @@ var deserializeTapLeaf = (t) => {
7432
7514
  const s = base.hex.decode(t.s);
7433
7515
  return [cb, s];
7434
7516
  };
7435
- var deserializeVtxo = (o) => chunkCDWLZQQW_cjs.normalizeVtxo({
7517
+ var deserializeVtxo = (o) => chunkKUN5ZRMW_cjs.normalizeVtxo({
7436
7518
  ...o,
7437
7519
  createdAt: new Date(o.createdAt),
7438
7520
  tapTree: base.hex.decode(o.tapTree),
@@ -8571,7 +8653,7 @@ var ContractWatcher = class {
8571
8653
  this.connectionState = "connected";
8572
8654
  this.reconnectAttempts = 0;
8573
8655
  this.listenLoop().catch((e) => {
8574
- if (chunkCDWLZQQW_cjs.isEventSourceError(e)) {
8656
+ if (chunkKUN5ZRMW_cjs.isEventSourceError(e)) {
8575
8657
  console.debug("ContractWatcher subscription disconnected; reconnecting");
8576
8658
  } else {
8577
8659
  console.error(e);
@@ -8800,14 +8882,14 @@ var ContractWatcher = class {
8800
8882
  const timestamp = Date.now();
8801
8883
  if (update.newVtxos?.length) {
8802
8884
  this.processSubscriptionVtxos(
8803
- update.newVtxos.map(chunkCDWLZQQW_cjs.normalizeVtxo),
8885
+ update.newVtxos.map(chunkKUN5ZRMW_cjs.normalizeVtxo),
8804
8886
  "vtxo_received",
8805
8887
  timestamp
8806
8888
  );
8807
8889
  }
8808
8890
  if (update.spentVtxos?.length) {
8809
8891
  this.processSubscriptionVtxos(
8810
- update.spentVtxos.map(chunkCDWLZQQW_cjs.normalizeVtxo),
8892
+ update.spentVtxos.map(chunkKUN5ZRMW_cjs.normalizeVtxo),
8811
8893
  "vtxo_spent",
8812
8894
  timestamp
8813
8895
  );
@@ -8940,7 +9022,7 @@ async function reconcileIntents(deps) {
8940
9022
  let vtxosByOutpoint = /* @__PURE__ */ new Map();
8941
9023
  if (outpoints.length > 0) {
8942
9024
  try {
8943
- const { vtxos } = await chunkCDWLZQQW_cjs.getNormalizedVtxos(deps.indexerProvider, { outpoints });
9025
+ const { vtxos } = await chunkKUN5ZRMW_cjs.getNormalizedVtxos(deps.indexerProvider, { outpoints });
8944
9026
  vtxosByOutpoint = new Map(vtxos.map((v) => [outpointKey(v), v]));
8945
9027
  } catch (e) {
8946
9028
  console.error("reconcileIntents: failed to fetch input VTXO state", e);
@@ -9060,7 +9142,7 @@ var ContractManager = class _ContractManager {
9060
9142
  await this.reconcileWatched();
9061
9143
  this.markSyncOnline();
9062
9144
  } catch (err) {
9063
- if (!chunkCDWLZQQW_cjs.isRetryableProviderError(err)) throw err;
9145
+ if (!chunkKUN5ZRMW_cjs.isRetryableProviderError(err)) throw err;
9064
9146
  this.markSyncDegraded(err);
9065
9147
  }
9066
9148
  this.initialized = true;
@@ -9172,7 +9254,7 @@ var ContractManager = class _ContractManager {
9172
9254
  const from = Math.max(0, watermark - lookAhead.size);
9173
9255
  const to = watermark + lookAhead.size;
9174
9256
  const deps = lookAhead.candidateDeps();
9175
- const handlers = chunk37XKN5DZ_cjs.contractHandlers.getRegisteredTypes().map((t) => chunk37XKN5DZ_cjs.contractHandlers.get(t)).filter(hasCandidates);
9257
+ const handlers = chunkOWTKOMJZ_cjs.contractHandlers.getRegisteredTypes().map((t) => chunkOWTKOMJZ_cjs.contractHandlers.get(t)).filter(hasCandidates);
9176
9258
  const band = /* @__PURE__ */ new Map();
9177
9259
  for (let index = from; index <= to; index++) {
9178
9260
  const descriptor = lookAhead.materialize(index);
@@ -9183,7 +9265,7 @@ var ContractManager = class _ContractManager {
9183
9265
  index,
9184
9266
  params: {
9185
9267
  ...candidate,
9186
- ...chunk37XKN5DZ_cjs.speculativeReceiveMetadata(descriptor)
9268
+ ...chunkOWTKOMJZ_cjs.speculativeReceiveMetadata(descriptor)
9187
9269
  }
9188
9270
  });
9189
9271
  }
@@ -9243,7 +9325,7 @@ var ContractManager = class _ContractManager {
9243
9325
  });
9244
9326
  for (const entry of pending) entry.catchUpPending = false;
9245
9327
  } catch (err) {
9246
- if (!chunkCDWLZQQW_cjs.isRetryableProviderError(err)) throw err;
9328
+ if (!chunkKUN5ZRMW_cjs.isRetryableProviderError(err)) throw err;
9247
9329
  this.markSyncDegraded(err);
9248
9330
  }
9249
9331
  }
@@ -9287,7 +9369,7 @@ var ContractManager = class _ContractManager {
9287
9369
  await this.fetchContractVxosFromIndexer([contract]);
9288
9370
  this.markSyncOnline();
9289
9371
  } catch (err) {
9290
- if (!chunkCDWLZQQW_cjs.isRetryableProviderError(err)) throw err;
9372
+ if (!chunkKUN5ZRMW_cjs.isRetryableProviderError(err)) throw err;
9291
9373
  this.markSyncDegraded(err);
9292
9374
  }
9293
9375
  await this.watcher.addContract(contract);
@@ -9324,7 +9406,7 @@ var ContractManager = class _ContractManager {
9324
9406
  return result;
9325
9407
  }
9326
9408
  async upsertContractRow(params) {
9327
- const handler = chunk37XKN5DZ_cjs.contractHandlers.get(params.type);
9409
+ const handler = chunkOWTKOMJZ_cjs.contractHandlers.get(params.type);
9328
9410
  if (!handler) {
9329
9411
  throw new Error(`No handler registered for contract type '${params.type}'`);
9330
9412
  }
@@ -9424,7 +9506,7 @@ var ContractManager = class _ContractManager {
9424
9506
  `scanContracts: batchSize must be a positive integer (got ${String(opts.batchSize)})`
9425
9507
  );
9426
9508
  }
9427
- const registered = chunk37XKN5DZ_cjs.contractHandlers.getRegisteredTypes().map((t) => chunk37XKN5DZ_cjs.contractHandlers.get(t)).filter(isDiscoverable);
9509
+ const registered = chunkOWTKOMJZ_cjs.contractHandlers.getRegisteredTypes().map((t) => chunkOWTKOMJZ_cjs.contractHandlers.get(t)).filter(isDiscoverable);
9428
9510
  const discoverables = [
9429
9511
  ...registered.filter((h) => h.type === "boarding"),
9430
9512
  ...registered.filter((h) => h.type !== "boarding")
@@ -9559,7 +9641,7 @@ var ContractManager = class _ContractManager {
9559
9641
  await this.syncContracts({ contracts, pageSize });
9560
9642
  this.markSyncOnline();
9561
9643
  } catch (err) {
9562
- if (!chunkCDWLZQQW_cjs.isRetryableProviderError(err)) throw err;
9644
+ if (!chunkKUN5ZRMW_cjs.isRetryableProviderError(err)) throw err;
9563
9645
  this.markSyncDegraded(err);
9564
9646
  }
9565
9647
  const vtxos = await this.getVtxosForContracts(contracts);
@@ -9580,7 +9662,7 @@ var ContractManager = class _ContractManager {
9580
9662
  }
9581
9663
  const tapscriptCache = /* @__PURE__ */ new Map();
9582
9664
  return vtxos.map(
9583
- (vtxo) => extendVirtualCoinForContract(chunkCDWLZQQW_cjs.normalizeVtxo(vtxo), byScript, tapscriptCache)
9665
+ (vtxo) => extendVirtualCoinForContract(chunkKUN5ZRMW_cjs.normalizeVtxo(vtxo), byScript, tapscriptCache)
9584
9666
  );
9585
9667
  }
9586
9668
  buildContractsDbFilter(filter) {
@@ -9665,7 +9747,7 @@ var ContractManager = class _ContractManager {
9665
9747
  const { contractScript, collaborative = true, walletPubKey, vtxo } = options;
9666
9748
  const [contract] = await this.getContracts({ script: contractScript });
9667
9749
  if (!contract) return [];
9668
- const handler = chunk37XKN5DZ_cjs.contractHandlers.get(contract.type);
9750
+ const handler = chunkOWTKOMJZ_cjs.contractHandlers.get(contract.type);
9669
9751
  if (!handler) return [];
9670
9752
  const script = handler.createScript(contract.params);
9671
9753
  const context = {
@@ -9685,7 +9767,7 @@ var ContractManager = class _ContractManager {
9685
9767
  const { contractScript, collaborative = true, walletPubKey } = options;
9686
9768
  const [contract] = await this.getContracts({ script: contractScript });
9687
9769
  if (!contract) return [];
9688
- const handler = chunk37XKN5DZ_cjs.contractHandlers.get(contract.type);
9770
+ const handler = chunkOWTKOMJZ_cjs.contractHandlers.get(contract.type);
9689
9771
  if (!handler) return [];
9690
9772
  const script = handler.createScript(contract.params);
9691
9773
  const context = {
@@ -9741,7 +9823,7 @@ var ContractManager = class _ContractManager {
9741
9823
  }
9742
9824
  async refreshOutpoints(outpoints) {
9743
9825
  if (outpoints.length === 0) return;
9744
- const { vtxos } = await chunkCDWLZQQW_cjs.getNormalizedVtxos(this.config.indexerProvider, {
9826
+ const { vtxos } = await chunkKUN5ZRMW_cjs.getNormalizedVtxos(this.config.indexerProvider, {
9745
9827
  outpoints
9746
9828
  });
9747
9829
  if (vtxos.length === 0) return;
@@ -9819,7 +9901,7 @@ var ContractManager = class _ContractManager {
9819
9901
  break;
9820
9902
  }
9821
9903
  } catch (err) {
9822
- if (!chunkCDWLZQQW_cjs.isRetryableProviderError(err)) throw err;
9904
+ if (!chunkKUN5ZRMW_cjs.isRetryableProviderError(err)) throw err;
9823
9905
  this.markSyncDegraded(err);
9824
9906
  }
9825
9907
  this.emitEvent(event);
@@ -9868,7 +9950,7 @@ var ContractManager = class _ContractManager {
9868
9950
  */
9869
9951
  async reconcilePendingFrontier(contracts) {
9870
9952
  const scriptToContract = new Map(contracts.map((c) => [c.script, c]));
9871
- const vtxos = await chunkCDWLZQQW_cjs.getAllNormalizedVtxos(
9953
+ const vtxos = await chunkKUN5ZRMW_cjs.getAllNormalizedVtxos(
9872
9954
  this.config.indexerProvider,
9873
9955
  contracts.map((c) => c.script),
9874
9956
  { pendingOnly: true }
@@ -9949,7 +10031,7 @@ var ContractManager = class _ContractManager {
9949
10031
  }
9950
10032
  return result;
9951
10033
  }
9952
- async fetchContractVtxosBulk(contracts, pageSize = chunkCDWLZQQW_cjs.DEFAULT_PAGE_SIZE, syncWindow) {
10034
+ async fetchContractVtxosBulk(contracts, pageSize = chunkKUN5ZRMW_cjs.DEFAULT_PAGE_SIZE, syncWindow) {
9953
10035
  if (contracts.length === 0) {
9954
10036
  return { vtxosByScript: /* @__PURE__ */ new Map(), promoted: /* @__PURE__ */ new Map() };
9955
10037
  }
@@ -9965,7 +10047,7 @@ var ContractManager = class _ContractManager {
9965
10047
  before: syncWindow.before
9966
10048
  }
9967
10049
  } : {};
9968
- const vtxos = await chunkCDWLZQQW_cjs.getAllNormalizedVtxos(
10050
+ const vtxos = await chunkKUN5ZRMW_cjs.getAllNormalizedVtxos(
9969
10051
  this.config.indexerProvider,
9970
10052
  contracts.map((c) => c.script),
9971
10053
  { ...windowOpts, pageSize }
@@ -10132,7 +10214,7 @@ var HDDescriptorProvider = class _HDDescriptorProvider {
10132
10214
  */
10133
10215
  materializeDescriptorAt(index) {
10134
10216
  const descriptor = this.identity.descriptor;
10135
- const network = chunk37XKN5DZ_cjs.isMainnetDescriptor(descriptor) ? descriptorsScure.networks.bitcoin : descriptorsScure.networks.testnet;
10217
+ const network = chunkOWTKOMJZ_cjs.isMainnetDescriptor(descriptor) ? descriptorsScure.networks.bitcoin : descriptorsScure.networks.testnet;
10136
10218
  const expansion = descriptorsScure.expand({ descriptor, network, index });
10137
10219
  const keyInfo = expansion.expansionMap?.["@0"];
10138
10220
  if (!keyInfo?.keyExpression) {
@@ -10276,7 +10358,7 @@ var WalletReceiveRotator = class _WalletReceiveRotator {
10276
10358
  const provider = await resolveDescriptorProvider(config, setup.walletRepository);
10277
10359
  if (!provider) return void 0;
10278
10360
  const allowSilentFallback = (config.walletMode ?? "auto") === "auto";
10279
- const expectedContractType = setup.offchainTapscript instanceof chunk37XKN5DZ_cjs.DelegateVtxo.Script ? "delegate" : "default";
10361
+ const expectedContractType = setup.offchainTapscript instanceof chunkOWTKOMJZ_cjs.DelegateVtxo.Script ? "delegate" : "default";
10280
10362
  const factoryOpts = {
10281
10363
  walletRepository: setup.walletRepository,
10282
10364
  contractRepository: setup.contractRepository,
@@ -10475,7 +10557,7 @@ var WalletReceiveRotator = class _WalletReceiveRotator {
10475
10557
  };
10476
10558
  function deriveLeafPubkey(descriptor) {
10477
10559
  try {
10478
- return chunk37XKN5DZ_cjs.deriveDescriptorLeafPubKey(descriptor);
10560
+ return chunkOWTKOMJZ_cjs.deriveDescriptorLeafPubKey(descriptor);
10479
10561
  } catch (e) {
10480
10562
  throw new NonRangeableDescriptorError(
10481
10563
  "Cannot derive leaf pubkey: descriptor is not a materialized, parsable tr(...) shape.",
@@ -10487,7 +10569,7 @@ function buildReceiveContract(current, descriptor, hrp, tagSource) {
10487
10569
  const pubKey = deriveLeafPubkey(descriptor);
10488
10570
  const tapscript = rebuildTapscript(current, pubKey);
10489
10571
  const serverPubKey = tapscript.options.serverPubKey;
10490
- const csvTimelock = chunkCDWLZQQW_cjs.timelockToSequence(tapscript.options.csvTimelock).toString();
10572
+ const csvTimelock = chunkKUN5ZRMW_cjs.timelockToSequence(tapscript.options.csvTimelock).toString();
10491
10573
  const base$1 = {
10492
10574
  script: base.hex.encode(tapscript.pkScript),
10493
10575
  address: tapscript.address(hrp, serverPubKey).encode(),
@@ -10498,11 +10580,11 @@ function buildReceiveContract(current, descriptor, hrp, tagSource) {
10498
10580
  // index-0 key. Without it, spends produce unsigned PSBTs that the
10499
10581
  // server rejects with `INVALID_PSBT_INPUT (5): missing tapscript spend sig`.
10500
10582
  metadata: {
10501
- ...{ source: chunk37XKN5DZ_cjs.WALLET_RECEIVE_SOURCE },
10583
+ ...{ source: chunkOWTKOMJZ_cjs.WALLET_RECEIVE_SOURCE },
10502
10584
  signingDescriptor: descriptor
10503
10585
  }
10504
10586
  };
10505
- const params = tapscript instanceof chunk37XKN5DZ_cjs.DelegateVtxo.Script ? {
10587
+ const params = tapscript instanceof chunkOWTKOMJZ_cjs.DelegateVtxo.Script ? {
10506
10588
  ...base$1,
10507
10589
  type: "delegate",
10508
10590
  params: {
@@ -10523,10 +10605,10 @@ function buildReceiveContract(current, descriptor, hrp, tagSource) {
10523
10605
  return { tapscript, params };
10524
10606
  }
10525
10607
  function rebuildTapscript(current, pubKey) {
10526
- if (current instanceof chunk37XKN5DZ_cjs.DelegateVtxo.Script) {
10527
- return new chunk37XKN5DZ_cjs.DelegateVtxo.Script({ ...current.options, pubKey });
10608
+ if (current instanceof chunkOWTKOMJZ_cjs.DelegateVtxo.Script) {
10609
+ return new chunkOWTKOMJZ_cjs.DelegateVtxo.Script({ ...current.options, pubKey });
10528
10610
  }
10529
- return new chunk37XKN5DZ_cjs.DefaultVtxo.Script({ ...current.options, pubKey });
10611
+ return new chunkOWTKOMJZ_cjs.DefaultVtxo.Script({ ...current.options, pubKey });
10530
10612
  }
10531
10613
  async function pickActiveReceive(contractRepository, serverPubKey, expectedType) {
10532
10614
  const candidates = await contractRepository.getContracts({
@@ -10535,7 +10617,7 @@ async function pickActiveReceive(contractRepository, serverPubKey, expectedType)
10535
10617
  });
10536
10618
  const serverPubKeyHex = base.hex.encode(serverPubKey);
10537
10619
  const matching = candidates.filter(
10538
- (c) => c.params.serverPubKey === serverPubKeyHex && c.metadata?.source === chunk37XKN5DZ_cjs.WALLET_RECEIVE_SOURCE
10620
+ (c) => c.params.serverPubKey === serverPubKeyHex && c.metadata?.source === chunkOWTKOMJZ_cjs.WALLET_RECEIVE_SOURCE
10539
10621
  ).sort((a, b) => {
10540
10622
  if (b.createdAt !== a.createdAt) return b.createdAt - a.createdAt;
10541
10623
  return signingDescriptorIndex(b.metadata?.signingDescriptor) - signingDescriptorIndex(a.metadata?.signingDescriptor);
@@ -10711,12 +10793,12 @@ var InputSignerRouter = class {
10711
10793
  };
10712
10794
 
10713
10795
  // src/wallet/wallet.ts
10714
- var getArkadeServerUrl = ({ arkServerUrl }) => arkServerUrl || chunkCDWLZQQW_cjs.DEFAULT_ARKADE_SERVER_URL;
10796
+ var getArkadeServerUrl = ({ arkServerUrl }) => arkServerUrl || chunkKUN5ZRMW_cjs.DEFAULT_ARKADE_SERVER_URL;
10715
10797
  function intentProofJobs(coins) {
10716
10798
  if (coins.length === 0) return [];
10717
10799
  const coinJobs = coins.map((coin, i) => ({
10718
10800
  index: i + 1,
10719
- lookupScript: chunkCDWLZQQW_cjs.VtxoScript.decode(coin.tapTree).pkScript
10801
+ lookupScript: chunkKUN5ZRMW_cjs.VtxoScript.decode(coin.tapTree).pkScript
10720
10802
  }));
10721
10803
  return [{ index: 0, lookupScript: coinJobs[0].lookupScript }, ...coinJobs];
10722
10804
  }
@@ -10741,7 +10823,7 @@ function dedupeTimelocks(timelocks) {
10741
10823
  const seen = /* @__PURE__ */ new Set();
10742
10824
  const deduped = [];
10743
10825
  for (const timelock of timelocks) {
10744
- const sequence = chunkCDWLZQQW_cjs.timelockToSequence(timelock).toString();
10826
+ const sequence = chunkKUN5ZRMW_cjs.timelockToSequence(timelock).toString();
10745
10827
  if (seen.has(sequence)) continue;
10746
10828
  seen.add(sequence);
10747
10829
  deduped.push(timelock);
@@ -10758,7 +10840,7 @@ async function resolveBoardingBootTapscript(contractRepository, serverPubKey, ba
10758
10840
  state: "active"
10759
10841
  });
10760
10842
  const newest = candidates.filter(
10761
- (c) => c.params.serverPubKey === serverPubKeyHex && c.metadata?.source === chunk37XKN5DZ_cjs.WALLET_RECEIVE_SOURCE
10843
+ (c) => c.params.serverPubKey === serverPubKeyHex && c.metadata?.source === chunkOWTKOMJZ_cjs.WALLET_RECEIVE_SOURCE
10762
10844
  ).sort((a, b) => {
10763
10845
  if (b.createdAt !== a.createdAt) return b.createdAt - a.createdAt;
10764
10846
  return signingDescriptorIndex(b.metadata?.signingDescriptor) - signingDescriptorIndex(a.metadata?.signingDescriptor);
@@ -10766,7 +10848,7 @@ async function resolveBoardingBootTapscript(contractRepository, serverPubKey, ba
10766
10848
  if (!newest?.params.pubKey) return baseline;
10767
10849
  try {
10768
10850
  const pubKey = base.hex.decode(newest.params.pubKey);
10769
- return new chunk37XKN5DZ_cjs.DefaultVtxo.Script({ ...baseline.options, pubKey });
10851
+ return new chunkOWTKOMJZ_cjs.DefaultVtxo.Script({ ...baseline.options, pubKey });
10770
10852
  } catch (e) {
10771
10853
  console.warn("Skipping malformed boarding contract at boot", newest.script, e);
10772
10854
  return baseline;
@@ -11100,7 +11182,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
11100
11182
  */
11101
11183
  static async setupWalletConfig(config, pubKey) {
11102
11184
  const arkadeServerUrl = getArkadeServerUrl(config);
11103
- const arkProvider = config.arkProvider || new chunkCDWLZQQW_cjs.RestArkProvider(arkadeServerUrl);
11185
+ const arkProvider = config.arkProvider || new chunkKUN5ZRMW_cjs.RestArkProvider(arkadeServerUrl);
11104
11186
  let indexerProvider = config.indexerProvider;
11105
11187
  if (!indexerProvider) {
11106
11188
  let indexerUrl = config.indexerUrl;
@@ -11117,7 +11199,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
11117
11199
  indexerUrl = arkadeServerUrl;
11118
11200
  }
11119
11201
  }
11120
- indexerProvider = new chunk24YNIQSW_cjs.RestIndexerProvider(indexerUrl);
11202
+ indexerProvider = new chunkYK6NP5KX_cjs.RestIndexerProvider(indexerUrl);
11121
11203
  }
11122
11204
  const walletRepository = config.storage?.walletRepository ?? new IndexedDBWalletRepository();
11123
11205
  const contractRepository = config.storage?.contractRepository ?? new IndexedDBContractRepository();
@@ -11126,7 +11208,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
11126
11208
  source: serverInfoSource,
11127
11209
  lastOnlineAt: serverInfoLastOnlineAt
11128
11210
  } = await resolveArkInfo(arkProvider, walletRepository);
11129
- const network = chunkCDWLZQQW_cjs.getNetwork(info.network);
11211
+ const network = chunkKUN5ZRMW_cjs.getNetwork(info.network);
11130
11212
  if ("descriptor" in config.identity) {
11131
11213
  const descriptor = config.identity.descriptor;
11132
11214
  const identityIsMainnet = !descriptor.includes("tpub");
@@ -11173,11 +11255,11 @@ var ReadonlyWallet = class _ReadonlyWallet {
11173
11255
  serverPubKey,
11174
11256
  csvTimelock: exitTimelock
11175
11257
  };
11176
- const offchainTapscript = !delegatePubKey ? new chunk37XKN5DZ_cjs.DefaultVtxo.Script(offchainOptions) : new chunk37XKN5DZ_cjs.DelegateVtxo.Script({ ...offchainOptions, delegatePubKey });
11177
- const boardingTapscript = chunk37XKN5DZ_cjs.BoardingContractHandler.createScript({
11258
+ const offchainTapscript = !delegatePubKey ? new chunkOWTKOMJZ_cjs.DefaultVtxo.Script(offchainOptions) : new chunkOWTKOMJZ_cjs.DelegateVtxo.Script({ ...offchainOptions, delegatePubKey });
11259
+ const boardingTapscript = chunkOWTKOMJZ_cjs.BoardingContractHandler.createScript({
11178
11260
  pubKey: base.hex.encode(pubKey),
11179
11261
  serverPubKey: base.hex.encode(serverPubKey),
11180
- csvTimelock: chunkCDWLZQQW_cjs.timelockToSequence(boardingTimelock).toString()
11262
+ csvTimelock: chunkKUN5ZRMW_cjs.timelockToSequence(boardingTimelock).toString()
11181
11263
  });
11182
11264
  return {
11183
11265
  arkProvider,
@@ -11283,19 +11365,19 @@ var ReadonlyWallet = class _ReadonlyWallet {
11283
11365
  let pendingRecovery = 0;
11284
11366
  const now = { timestamp: /* @__PURE__ */ new Date() };
11285
11367
  const settled = vtxos.filter(
11286
- (coin) => chunkCDWLZQQW_cjs.canSpendOffchain(coin, now) && !coin.isPreconfirmed && !isPendingRecovery(coin)
11368
+ (coin) => chunkKUN5ZRMW_cjs.canSpendOffchain(coin, now) && !coin.isPreconfirmed && !isPendingRecovery(coin)
11287
11369
  ).reduce((sum, coin) => sum + coin.value, 0);
11288
11370
  const preconfirmed = vtxos.filter(
11289
- (coin) => chunkCDWLZQQW_cjs.canSpendOffchain(coin, now) && coin.isPreconfirmed && !isPendingRecovery(coin)
11371
+ (coin) => chunkKUN5ZRMW_cjs.canSpendOffchain(coin, now) && coin.isPreconfirmed && !isPendingRecovery(coin)
11290
11372
  ).reduce((sum, coin) => sum + coin.value, 0);
11291
- const available = unlockedVtxos.filter((coin) => chunkCDWLZQQW_cjs.canSpendOffchain(coin, now) && !isPendingRecovery(coin)).reduce((sum, coin) => sum + coin.value, 0);
11292
- recoverable = vtxos.filter((coin) => chunkCDWLZQQW_cjs.canRecoverOnchain(coin, now) && !isPendingRecovery(coin)).reduce((sum, coin) => sum + coin.value, 0);
11373
+ const available = unlockedVtxos.filter((coin) => chunkKUN5ZRMW_cjs.canSpendOffchain(coin, now) && !isPendingRecovery(coin)).reduce((sum, coin) => sum + coin.value, 0);
11374
+ recoverable = vtxos.filter((coin) => chunkKUN5ZRMW_cjs.canRecoverOnchain(coin, now) && !isPendingRecovery(coin)).reduce((sum, coin) => sum + coin.value, 0);
11293
11375
  pendingRecovery = vtxos.filter(isPendingRecovery).reduce((sum, coin) => sum + coin.value, 0);
11294
11376
  const totalBoarding = confirmed + unconfirmed;
11295
11377
  const totalOffchain = settled + preconfirmed + recoverable + pendingRecovery;
11296
11378
  const assetBalances = /* @__PURE__ */ new Map();
11297
11379
  for (const vtxo of vtxos) {
11298
- if (chunkCDWLZQQW_cjs.hasTerminalSpend(vtxo)) continue;
11380
+ if (chunkKUN5ZRMW_cjs.hasTerminalSpend(vtxo)) continue;
11299
11381
  if (vtxo.assets) {
11300
11382
  for (const a of vtxo.assets) {
11301
11383
  const current = assetBalances.get(a.assetId) ?? 0n;
@@ -11336,8 +11418,8 @@ var ReadonlyWallet = class _ReadonlyWallet {
11336
11418
  if (this._pendingSpendOutpoints.has(`${vtxo.txid}:${vtxo.vout}`)) {
11337
11419
  return false;
11338
11420
  }
11339
- if (!chunkCDWLZQQW_cjs.hasTerminalSpend(vtxo)) {
11340
- if (!f.withRecoverable && chunkCDWLZQQW_cjs.canRecoverOnchain(vtxo, now)) {
11421
+ if (!chunkKUN5ZRMW_cjs.hasTerminalSpend(vtxo)) {
11422
+ if (!f.withRecoverable && chunkKUN5ZRMW_cjs.canRecoverOnchain(vtxo, now)) {
11341
11423
  return false;
11342
11424
  }
11343
11425
  return true;
@@ -11370,7 +11452,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
11370
11452
  const response = await contractManager.getContractsWithVtxos();
11371
11453
  const allVtxos = response.flatMap((_) => _.vtxos);
11372
11454
  const { boardingTxs, commitmentsToIgnore } = await this.getBoardingTxs();
11373
- const resolveTxCreatedAt = (txids) => chunkCDWLZQQW_cjs.fetchVtxoCreatedAtByTxid(this.indexerProvider, txids);
11455
+ const resolveTxCreatedAt = (txids) => chunkKUN5ZRMW_cjs.fetchVtxoCreatedAtByTxid(this.indexerProvider, txids);
11374
11456
  return buildTransactionHistory(
11375
11457
  allVtxos,
11376
11458
  boardingTxs,
@@ -11464,7 +11546,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
11464
11546
  },
11465
11547
  isUnrolled: true,
11466
11548
  ...boardingFacts,
11467
- virtualStatus: chunkCDWLZQQW_cjs.toVirtualStatus(boardingFacts),
11549
+ virtualStatus: chunkKUN5ZRMW_cjs.toVirtualStatus(boardingFacts),
11468
11550
  spentBy: "",
11469
11551
  createdAt: tx.status.confirmed ? new Date(tx.status.block_time * 1e3) : /* @__PURE__ */ new Date(0),
11470
11552
  script: scriptHex
@@ -11520,9 +11602,9 @@ var ReadonlyWallet = class _ReadonlyWallet {
11520
11602
  async getBoardingTapscripts(allowedSigners) {
11521
11603
  const byScript = /* @__PURE__ */ new Map();
11522
11604
  const add = (s) => byScript.set(base.hex.encode(s.pkScript), s);
11523
- const boardingCsv = this.boardingTapscript.options.csvTimelock ?? chunk37XKN5DZ_cjs.DefaultVtxo.Script.DEFAULT_TIMELOCK;
11605
+ const boardingCsv = this.boardingTapscript.options.csvTimelock ?? chunkOWTKOMJZ_cjs.DefaultVtxo.Script.DEFAULT_TIMELOCK;
11524
11606
  add(
11525
- new chunk37XKN5DZ_cjs.DefaultVtxo.Script({
11607
+ new chunkOWTKOMJZ_cjs.DefaultVtxo.Script({
11526
11608
  pubKey: await this.identity.xOnlyPublicKey(),
11527
11609
  serverPubKey: this.boardingTapscript.options.serverPubKey,
11528
11610
  csvTimelock: boardingCsv
@@ -11537,7 +11619,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
11537
11619
  for (const c of boardingContracts) {
11538
11620
  if (!allowed.has(toXOnlySignerHex(c.params.serverPubKey))) continue;
11539
11621
  try {
11540
- add(chunk37XKN5DZ_cjs.BoardingContractHandler.createScript(c.params));
11622
+ add(chunkOWTKOMJZ_cjs.BoardingContractHandler.createScript(c.params));
11541
11623
  } catch (e) {
11542
11624
  console.warn("Skipping malformed boarding contract", c.script, e);
11543
11625
  }
@@ -11575,7 +11657,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
11575
11657
  // Per-row CSV delay decoded from THIS tapscript's exit leaf —
11576
11658
  // not the wallet's current boarding timelock, which a signer
11577
11659
  // rotation may have changed.
11578
- csvTimelock: chunkCDWLZQQW_cjs.CSVMultisigTapscript.decode(base.hex.decode(tapscript.exitScript)).params.timelock,
11660
+ csvTimelock: chunkKUN5ZRMW_cjs.CSVMultisigTapscript.decode(base.hex.decode(tapscript.exitScript)).params.timelock,
11579
11661
  coins: utxos
11580
11662
  });
11581
11663
  }
@@ -11708,7 +11790,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
11708
11790
  /** Fetch Arkade transaction ids that are still pending final settlement. */
11709
11791
  async fetchPendingTxs() {
11710
11792
  const scripts = await this.getWalletScripts();
11711
- const vtxos = await chunkCDWLZQQW_cjs.getAllNormalizedVtxos(this.indexerProvider, scripts);
11793
+ const vtxos = await chunkKUN5ZRMW_cjs.getAllNormalizedVtxos(this.indexerProvider, scripts);
11712
11794
  return vtxos.filter(
11713
11795
  (vtxo) => (vtxo.isSpent || vtxo.isPreconfirmed && !vtxo.isSwept) && vtxo.arkTxId !== void 0
11714
11796
  ).map((_) => _.arkTxId);
@@ -11739,7 +11821,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
11739
11821
  });
11740
11822
  for (const contract of contracts) {
11741
11823
  if (map.has(contract.script)) continue;
11742
- const handler = chunk37XKN5DZ_cjs.contractHandlers.get(contract.type);
11824
+ const handler = chunkOWTKOMJZ_cjs.contractHandlers.get(contract.type);
11743
11825
  if (handler) {
11744
11826
  const script = handler.createScript(contract.params);
11745
11827
  map.set(contract.script, script);
@@ -11842,7 +11924,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
11842
11924
  lookAhead: this.lookAheadConfig()
11843
11925
  });
11844
11926
  const baselinePubkey = await this.identity.xOnlyPublicKey();
11845
- const delegatePubKey = this.offchainTapscript instanceof chunk37XKN5DZ_cjs.DelegateVtxo.Script ? this.offchainTapscript.options.delegatePubKey : void 0;
11927
+ const delegatePubKey = this.offchainTapscript instanceof chunkOWTKOMJZ_cjs.DelegateVtxo.Script ? this.offchainTapscript.options.delegatePubKey : void 0;
11846
11928
  const baselineSigners = [
11847
11929
  this.offchainTapscript.options.serverPubKey,
11848
11930
  ...[...this._deprecatedSigners.keys()].map((h) => base.hex.decode(h))
@@ -11850,8 +11932,8 @@ var ReadonlyWallet = class _ReadonlyWallet {
11850
11932
  const seenBaselineScripts = /* @__PURE__ */ new Set();
11851
11933
  for (const serverPubKey of baselineSigners) {
11852
11934
  for (const csvTimelock of this.walletContractTimelocks) {
11853
- const csvTimelockStr = chunkCDWLZQQW_cjs.timelockToSequence(csvTimelock).toString();
11854
- const defaultScript = new chunk37XKN5DZ_cjs.DefaultVtxo.Script({
11935
+ const csvTimelockStr = chunkKUN5ZRMW_cjs.timelockToSequence(csvTimelock).toString();
11936
+ const defaultScript = new chunkOWTKOMJZ_cjs.DefaultVtxo.Script({
11855
11937
  pubKey: baselinePubkey,
11856
11938
  serverPubKey,
11857
11939
  csvTimelock
@@ -11872,7 +11954,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
11872
11954
  });
11873
11955
  }
11874
11956
  if (delegatePubKey) {
11875
- const delegateScript = new chunk37XKN5DZ_cjs.DelegateVtxo.Script({
11957
+ const delegateScript = new chunkOWTKOMJZ_cjs.DelegateVtxo.Script({
11876
11958
  pubKey: baselinePubkey,
11877
11959
  serverPubKey,
11878
11960
  delegatePubKey,
@@ -11896,9 +11978,9 @@ var ReadonlyWallet = class _ReadonlyWallet {
11896
11978
  }
11897
11979
  }
11898
11980
  }
11899
- const boardingCsvTimelock = this.boardingTapscript.options.csvTimelock ?? chunk37XKN5DZ_cjs.DefaultVtxo.Script.DEFAULT_TIMELOCK;
11981
+ const boardingCsvTimelock = this.boardingTapscript.options.csvTimelock ?? chunkOWTKOMJZ_cjs.DefaultVtxo.Script.DEFAULT_TIMELOCK;
11900
11982
  for (const serverPubKey of baselineSigners) {
11901
- const baselineBoarding = new chunk37XKN5DZ_cjs.DefaultVtxo.Script({
11983
+ const baselineBoarding = new chunkOWTKOMJZ_cjs.DefaultVtxo.Script({
11902
11984
  pubKey: baselinePubkey,
11903
11985
  serverPubKey,
11904
11986
  csvTimelock: boardingCsvTimelock
@@ -11911,7 +11993,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
11911
11993
  params: {
11912
11994
  pubKey: base.hex.encode(baselineBoarding.options.pubKey),
11913
11995
  serverPubKey: base.hex.encode(serverPubKey),
11914
- csvTimelock: chunkCDWLZQQW_cjs.timelockToSequence(boardingCsvTimelock).toString()
11996
+ csvTimelock: chunkKUN5ZRMW_cjs.timelockToSequence(boardingCsvTimelock).toString()
11915
11997
  },
11916
11998
  script: boardingScriptHex,
11917
11999
  address: baselineBoarding.address(this.network.hrp, serverPubKey).encode(),
@@ -11933,7 +12015,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
11933
12015
  }
11934
12016
  };
11935
12017
  var Wallet2 = class _Wallet extends ReadonlyWallet {
11936
- constructor(identity, network, onchainProvider, arkProvider, indexerProvider, arkServerPublicKey, offchainTapscript, boardingTapscript, serverUnrollScript, forfeitOutputScript, forfeitPubkey, dustAmount, walletRepository, contractRepository, renewalConfig, delegateProvider, watcherConfig, settlementConfig, walletContractTimelocks, receiveRotator, descriptorProvider, lookAheadWindow) {
12018
+ constructor(identity, network, onchainProvider, arkProvider, indexerProvider, arkServerPublicKey, offchainTapscript, boardingTapscript, serverUnrollScript, forfeitOutputScript, forfeitPubkey, dustAmount, walletRepository, contractRepository, renewalConfig, delegateProvider, watcherConfig, settlementConfig, walletContractTimelocks, receiveRotator, descriptorProvider, lookAheadWindow, batchExpiryPolicy, checkpointExitDelayPolicy) {
11937
12019
  super(
11938
12020
  identity,
11939
12021
  network,
@@ -11952,6 +12034,8 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
11952
12034
  this.arkProvider = arkProvider;
11953
12035
  this.forfeitOutputScript = forfeitOutputScript;
11954
12036
  this.forfeitPubkey = forfeitPubkey;
12037
+ this.batchExpiryPolicy = batchExpiryPolicy;
12038
+ this.checkpointExitDelayPolicy = checkpointExitDelayPolicy;
11955
12039
  this.identity = identity;
11956
12040
  this.renewalConfig = {
11957
12041
  enabled: renewalConfig?.enabled ?? false,
@@ -11984,6 +12068,8 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
11984
12068
  arkProvider;
11985
12069
  forfeitOutputScript;
11986
12070
  forfeitPubkey;
12071
+ batchExpiryPolicy;
12072
+ checkpointExitDelayPolicy;
11987
12073
  static MIN_FEE_RATE = 1;
11988
12074
  // sats/vbyte
11989
12075
  identity;
@@ -12085,7 +12171,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
12085
12171
  serverPubKey: this.offchainTapscript.options.serverPubKey,
12086
12172
  deprecatedSignerPubKeys: [...this._deprecatedSigners.keys()].map((h) => base.hex.decode(h)),
12087
12173
  csvTimelocks: this.walletContractTimelocks,
12088
- delegatePubKey: this.offchainTapscript instanceof chunk37XKN5DZ_cjs.DelegateVtxo.Script ? this.offchainTapscript.options.delegatePubKey : void 0
12174
+ delegatePubKey: this.offchainTapscript instanceof chunkOWTKOMJZ_cjs.DelegateVtxo.Script ? this.offchainTapscript.options.delegatePubKey : void 0
12089
12175
  };
12090
12176
  }
12091
12177
  _signerRouter;
@@ -12177,25 +12263,25 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
12177
12263
  return this.getBoardingAddress();
12178
12264
  }
12179
12265
  const descriptor = await provider.getNextSigningDescriptor();
12180
- const pubKey = chunk37XKN5DZ_cjs.deriveDescriptorLeafPubKey(descriptor);
12181
- const newBoarding = new chunk37XKN5DZ_cjs.DefaultVtxo.Script({
12266
+ const pubKey = chunkOWTKOMJZ_cjs.deriveDescriptorLeafPubKey(descriptor);
12267
+ const newBoarding = new chunkOWTKOMJZ_cjs.DefaultVtxo.Script({
12182
12268
  ...this._boardingTapscript.options,
12183
12269
  pubKey
12184
12270
  });
12185
- const csvTimelock = newBoarding.options.csvTimelock ?? chunk37XKN5DZ_cjs.DefaultVtxo.Script.DEFAULT_TIMELOCK;
12271
+ const csvTimelock = newBoarding.options.csvTimelock ?? chunkOWTKOMJZ_cjs.DefaultVtxo.Script.DEFAULT_TIMELOCK;
12186
12272
  const manager = await this.getContractManager();
12187
12273
  await manager.createContract({
12188
12274
  type: "boarding",
12189
12275
  params: {
12190
12276
  pubKey: base.hex.encode(pubKey),
12191
12277
  serverPubKey: base.hex.encode(newBoarding.options.serverPubKey),
12192
- csvTimelock: chunkCDWLZQQW_cjs.timelockToSequence(csvTimelock).toString()
12278
+ csvTimelock: chunkKUN5ZRMW_cjs.timelockToSequence(csvTimelock).toString()
12193
12279
  },
12194
12280
  script: base.hex.encode(newBoarding.pkScript),
12195
12281
  address: newBoarding.address(this.network.hrp, this.arkServerPublicKey).encode(),
12196
12282
  state: "active",
12197
12283
  metadata: {
12198
- source: chunk37XKN5DZ_cjs.WALLET_RECEIVE_SOURCE,
12284
+ source: chunkOWTKOMJZ_cjs.WALLET_RECEIVE_SOURCE,
12199
12285
  signingDescriptor: descriptor
12200
12286
  }
12201
12287
  });
@@ -12282,12 +12368,10 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
12282
12368
  */
12283
12369
  async rotateServerSigner(newServerPubKey, checkpointTapscript) {
12284
12370
  const xonly = toXOnlyPubKey(newServerPubKey);
12285
- let newServerUnrollScript;
12286
- try {
12287
- newServerUnrollScript = chunkCDWLZQQW_cjs.CSVMultisigTapscript.decode(base.hex.decode(checkpointTapscript));
12288
- } catch (e) {
12289
- throw new Error("Invalid checkpointTapscript from server");
12290
- }
12371
+ const newServerUnrollScript = assertValidServerUnrollScript(
12372
+ checkpointTapscript,
12373
+ resolveCheckpointExitDelayPolicy(this.network, this.checkpointExitDelayPolicy)
12374
+ );
12291
12375
  if (utils_js.equalBytes(xonly, this.arkServerPublicKey)) return;
12292
12376
  if (this._receiveRotator) {
12293
12377
  await this._receiveRotator.runExclusive(
@@ -12312,21 +12396,21 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
12312
12396
  const [currentBoardingRow] = await manager.getContracts({
12313
12397
  script: currentBoardingScript
12314
12398
  });
12315
- const newOffchain = this.offchainTapscript instanceof chunk37XKN5DZ_cjs.DelegateVtxo.Script ? new chunk37XKN5DZ_cjs.DelegateVtxo.Script({
12399
+ const newOffchain = this.offchainTapscript instanceof chunkOWTKOMJZ_cjs.DelegateVtxo.Script ? new chunkOWTKOMJZ_cjs.DelegateVtxo.Script({
12316
12400
  ...this.offchainTapscript.options,
12317
12401
  serverPubKey: xonly
12318
- }) : new chunk37XKN5DZ_cjs.DefaultVtxo.Script({
12402
+ }) : new chunkOWTKOMJZ_cjs.DefaultVtxo.Script({
12319
12403
  ...this.offchainTapscript.options,
12320
12404
  serverPubKey: xonly
12321
12405
  });
12322
- const newBoarding = new chunk37XKN5DZ_cjs.DefaultVtxo.Script({
12406
+ const newBoarding = new chunkOWTKOMJZ_cjs.DefaultVtxo.Script({
12323
12407
  ...this._boardingTapscript.options,
12324
12408
  serverPubKey: xonly
12325
12409
  });
12326
- const offchainCsv = chunkCDWLZQQW_cjs.timelockToSequence(newOffchain.options.csvTimelock).toString();
12410
+ const offchainCsv = chunkKUN5ZRMW_cjs.timelockToSequence(newOffchain.options.csvTimelock).toString();
12327
12411
  const newOffchainScript = base.hex.encode(newOffchain.pkScript);
12328
12412
  const newOffchainAddress = newOffchain.address(this.network.hrp, xonly).encode();
12329
- if (newOffchain instanceof chunk37XKN5DZ_cjs.DelegateVtxo.Script) {
12413
+ if (newOffchain instanceof chunkOWTKOMJZ_cjs.DelegateVtxo.Script) {
12330
12414
  await manager.createContract({
12331
12415
  type: "delegate",
12332
12416
  params: {
@@ -12354,13 +12438,13 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
12354
12438
  metadata: currentOffchainRow?.metadata
12355
12439
  });
12356
12440
  }
12357
- const boardingCsv = newBoarding.options.csvTimelock ?? chunk37XKN5DZ_cjs.DefaultVtxo.Script.DEFAULT_TIMELOCK;
12441
+ const boardingCsv = newBoarding.options.csvTimelock ?? chunkOWTKOMJZ_cjs.DefaultVtxo.Script.DEFAULT_TIMELOCK;
12358
12442
  await manager.createContract({
12359
12443
  type: "boarding",
12360
12444
  params: {
12361
12445
  pubKey: base.hex.encode(newBoarding.options.pubKey),
12362
12446
  serverPubKey: base.hex.encode(xonly),
12363
- csvTimelock: chunkCDWLZQQW_cjs.timelockToSequence(boardingCsv).toString()
12447
+ csvTimelock: chunkKUN5ZRMW_cjs.timelockToSequence(boardingCsv).toString()
12364
12448
  },
12365
12449
  script: base.hex.encode(newBoarding.pkScript),
12366
12450
  address: newBoarding.address(this.network.hrp, xonly).encode(),
@@ -12393,14 +12477,14 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
12393
12477
  _restoreInFlight;
12394
12478
  _addPendingSpends(inputs) {
12395
12479
  for (const input of inputs) {
12396
- if (chunkCDWLZQQW_cjs.isVirtualCoin(input)) {
12480
+ if (chunkKUN5ZRMW_cjs.isVirtualCoin(input)) {
12397
12481
  this._pendingSpendOutpoints.add(`${input.txid}:${input.vout}`);
12398
12482
  }
12399
12483
  }
12400
12484
  }
12401
12485
  _removePendingSpends(inputs) {
12402
12486
  for (const input of inputs) {
12403
- if (chunkCDWLZQQW_cjs.isVirtualCoin(input)) {
12487
+ if (chunkKUN5ZRMW_cjs.isVirtualCoin(input)) {
12404
12488
  this._pendingSpendOutpoints.delete(`${input.txid}:${input.vout}`);
12405
12489
  }
12406
12490
  }
@@ -12460,7 +12544,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
12460
12544
  const hd = provider instanceof HDDescriptorProvider;
12461
12545
  const staticDescriptor = hd ? void 0 : `tr(${base.hex.encode(await this.identity.xOnlyPublicKey())})`;
12462
12546
  const materialize = (index) => hd ? provider.materializeDescriptorAt(index) : staticDescriptor;
12463
- const delegatePubKey = this.offchainTapscript instanceof chunk37XKN5DZ_cjs.DelegateVtxo.Script ? this.offchainTapscript.options.delegatePubKey : void 0;
12547
+ const delegatePubKey = this.offchainTapscript instanceof chunkOWTKOMJZ_cjs.DelegateVtxo.Script ? this.offchainTapscript.options.delegatePubKey : void 0;
12464
12548
  const arkInfo = await this.arkProvider.getInfo();
12465
12549
  const currentSignerPubKey = toXOnlyPubKey(base.hex.decode(arkInfo.signerPubkey));
12466
12550
  const deprecatedSignerPubKeys = arkInfo.deprecatedSigners.map(
@@ -12479,7 +12563,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
12479
12563
  csvTimelocks: this.walletContractTimelocks,
12480
12564
  // Boarding-exit CSV so the boarding handler can build its
12481
12565
  // candidate script (distinct from the unilateral-exit matrix).
12482
- boardingTimelock: this.boardingTapscript.options.csvTimelock ?? chunk37XKN5DZ_cjs.DefaultVtxo.Script.DEFAULT_TIMELOCK,
12566
+ boardingTimelock: this.boardingTapscript.options.csvTimelock ?? chunkOWTKOMJZ_cjs.DefaultVtxo.Script.DEFAULT_TIMELOCK,
12483
12567
  delegatePubKey
12484
12568
  };
12485
12569
  const result = await manager.scanContracts({
@@ -12593,16 +12677,17 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
12593
12677
  throw new Error("Invalid configured public key");
12594
12678
  }
12595
12679
  const setup = await ReadonlyWallet.setupWalletConfig(config, pubkey);
12596
- let serverUnrollScript;
12597
- try {
12598
- const raw = base.hex.decode(setup.info.checkpointTapscript);
12599
- serverUnrollScript = chunkCDWLZQQW_cjs.CSVMultisigTapscript.decode(raw);
12600
- } catch (e) {
12601
- throw new Error("Invalid checkpointTapscript from server");
12602
- }
12603
12680
  const forfeitPubkey = base.hex.decode(setup.info.forfeitPubkey).slice(1);
12604
12681
  const forfeitAddress = btcSigner.Address(setup.network).decode(setup.info.forfeitAddress);
12605
12682
  const forfeitOutputScript = btcSigner.OutScript.encode(forfeitAddress);
12683
+ const checkpointExitDelayOverrides = {
12684
+ advertisedForfeitPubkey: forfeitPubkey,
12685
+ ...config.minCheckpointExitDelaySeconds !== void 0 ? { minSeconds: config.minCheckpointExitDelaySeconds } : {}
12686
+ };
12687
+ const serverUnrollScript = assertValidServerUnrollScript(
12688
+ setup.info.checkpointTapscript,
12689
+ resolveCheckpointExitDelayPolicy(setup.network, checkpointExitDelayOverrides)
12690
+ );
12606
12691
  const boot = await WalletReceiveRotator.resolveBoot(config, setup);
12607
12692
  const wallet = new _Wallet(
12608
12693
  config.identity,
@@ -12626,7 +12711,13 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
12626
12711
  setup.walletContractTimelocks,
12627
12712
  boot?.rotator,
12628
12713
  boot?.provider,
12629
- config.lookAheadWindow
12714
+ config.lookAheadWindow,
12715
+ // Pinned at setup rather than refetched per round.
12716
+ {
12717
+ advertisedVtxoTreeExpiry: setup.info.vtxoTreeExpiry,
12718
+ ...config.minBatchExpirySeconds !== void 0 ? { minSeconds: config.minBatchExpirySeconds } : {}
12719
+ },
12720
+ checkpointExitDelayOverrides
12630
12721
  );
12631
12722
  wallet._serverInfoSource = setup.serverInfoSource;
12632
12723
  if (setup.serverInfoSource === "live") {
@@ -12734,7 +12825,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
12734
12825
  inputs: params.selectedVtxos,
12735
12826
  changeAmount: BigInt(changeAmount)
12736
12827
  };
12737
- const outputAddress = chunkCDWLZQQW_cjs.ArkAddress.decode(params.address);
12828
+ const outputAddress = chunkKUN5ZRMW_cjs.ArkAddress.decode(params.address);
12738
12829
  assertRecipientArkAddress(
12739
12830
  params.address,
12740
12831
  outputAddress,
@@ -12792,13 +12883,13 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
12792
12883
  }
12793
12884
  }
12794
12885
  const offchainAddress = await this.getAddress();
12795
- const offchainPkScript = chunkCDWLZQQW_cjs.ArkAddress.decode(offchainAddress).pkScript;
12886
+ const offchainPkScript = chunkKUN5ZRMW_cjs.ArkAddress.decode(offchainAddress).pkScript;
12796
12887
  const offchainOutputScript = base.hex.encode(offchainPkScript);
12797
12888
  if (!params) {
12798
12889
  const { fees, vtxoMaxAmount } = await this.arkProvider.getInfo();
12799
12890
  const estimator = new Estimator(fees.intentFee);
12800
12891
  let amount = 0;
12801
- const exitScript = chunkCDWLZQQW_cjs.CSVMultisigTapscript.decode(
12892
+ const exitScript = chunkKUN5ZRMW_cjs.CSVMultisigTapscript.decode(
12802
12893
  base.hex.decode(this.boardingTapscript.exitScript)
12803
12894
  );
12804
12895
  const boardingTimelock = exitScript.params.timelock;
@@ -12827,7 +12918,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
12827
12918
  if (filteredVtxos.length >= MAX_VTXOS_PER_SETTLEMENT) {
12828
12919
  break;
12829
12920
  }
12830
- const inputFee = estimator.evalOffchainInput(chunkCDWLZQQW_cjs.toOffchainInputFeeParams(vtxo));
12921
+ const inputFee = estimator.evalOffchainInput(chunkKUN5ZRMW_cjs.toOffchainInputFeeParams(vtxo));
12831
12922
  if (inputFee.satoshis >= vtxo.value) {
12832
12923
  continue;
12833
12924
  }
@@ -12874,7 +12965,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
12874
12965
  let script;
12875
12966
  let arkAddress;
12876
12967
  try {
12877
- arkAddress = chunkCDWLZQQW_cjs.ArkAddress.decode(output.address);
12968
+ arkAddress = chunkKUN5ZRMW_cjs.ArkAddress.decode(output.address);
12878
12969
  } catch {
12879
12970
  arkAddress = void 0;
12880
12971
  }
@@ -13066,7 +13157,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
13066
13157
  async maybeRotateBoardingAfterBoard(inputs) {
13067
13158
  if (!this._descriptorProvider) return;
13068
13159
  const consumedBoarding = inputs.some(
13069
- (input) => typeof input !== "string" && !chunkCDWLZQQW_cjs.isVirtualCoin(input)
13160
+ (input) => typeof input !== "string" && !chunkKUN5ZRMW_cjs.isVirtualCoin(input)
13070
13161
  );
13071
13162
  if (!consumedBoarding) return;
13072
13163
  try {
@@ -13090,7 +13181,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
13090
13181
  let connectorIndex = 0;
13091
13182
  const connectorsLeaves = connectorsGraph?.leaves() || [];
13092
13183
  for (const input of inputs) {
13093
- if (!chunkCDWLZQQW_cjs.isVirtualCoin(input)) {
13184
+ if (!chunkKUN5ZRMW_cjs.isVirtualCoin(input)) {
13094
13185
  for (let i = 0; i < settlementPsbt.inputsLength; i++) {
13095
13186
  const settlementInput = settlementPsbt.getInput(i);
13096
13187
  if (!settlementInput.txid || settlementInput.index === void 0) {
@@ -13121,7 +13212,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
13121
13212
  }
13122
13213
  continue;
13123
13214
  }
13124
- if (chunkCDWLZQQW_cjs.canRecoverOnchain(input, { timestamp: /* @__PURE__ */ new Date() }) || isSubdust({ value: input.value }, this.dustAmount)) {
13215
+ if (chunkKUN5ZRMW_cjs.canRecoverOnchain(input, { timestamp: /* @__PURE__ */ new Date() }) || isSubdust({ value: input.value }, this.dustAmount)) {
13125
13216
  continue;
13126
13217
  }
13127
13218
  if (connectorsLeaves.length === 0) {
@@ -13149,7 +13240,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
13149
13240
  index: input.vout,
13150
13241
  witnessUtxo: {
13151
13242
  amount: BigInt(input.value),
13152
- script: chunkCDWLZQQW_cjs.VtxoScript.decode(input.tapTree).pkScript
13243
+ script: chunkKUN5ZRMW_cjs.VtxoScript.decode(input.tapTree).pkScript
13153
13244
  },
13154
13245
  sighashType: btcSigner.SigHash.DEFAULT,
13155
13246
  tapLeafScript: [input.forfeitTapLeafScript]
@@ -13168,7 +13259,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
13168
13259
  forfeitTx = await this._signerRouter.sign(forfeitTx, [
13169
13260
  {
13170
13261
  index: 0,
13171
- lookupScript: chunkCDWLZQQW_cjs.VtxoScript.decode(input.tapTree).pkScript
13262
+ lookupScript: chunkKUN5ZRMW_cjs.VtxoScript.decode(input.tapTree).pkScript
13172
13263
  }
13173
13264
  ]);
13174
13265
  signedForfeits.push(base.base64.encode(forfeitTx.toPSBT()));
@@ -13214,24 +13305,20 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
13214
13305
  const utf8IntentId = new TextEncoder().encode(intentId);
13215
13306
  const intentIdHash = utils_js.sha256(utf8IntentId);
13216
13307
  const intentIdHashStr = base.hex.encode(intentIdHash);
13217
- let skip = true;
13218
- for (const idHash of event.intentIdHashes) {
13219
- if (idHash === intentIdHashStr) {
13220
- if (!this.arkProvider) {
13221
- throw new Error("Arkade provider not configured");
13222
- }
13223
- await this.arkProvider.confirmRegistration(intentId);
13224
- skip = false;
13225
- }
13226
- }
13308
+ const skip = !event.intentIdHashes.includes(intentIdHashStr);
13227
13309
  if (skip) {
13228
13310
  return { skip };
13229
13311
  }
13230
- const sweepTapscript = chunkCDWLZQQW_cjs.CSVMultisigTapscript.encode({
13231
- timelock: {
13232
- value: event.batchExpiry,
13233
- type: event.batchExpiry >= 512n ? "seconds" : "blocks"
13234
- },
13312
+ if (!this.arkProvider) {
13313
+ throw new Error("Arkade provider not configured");
13314
+ }
13315
+ const timelock = assertValidBatchExpiry(
13316
+ event.batchExpiry,
13317
+ resolveBatchExpiryPolicy(this.network, this.batchExpiryPolicy)
13318
+ );
13319
+ await this.arkProvider.confirmRegistration(intentId);
13320
+ const sweepTapscript = chunkKUN5ZRMW_cjs.CSVMultisigTapscript.encode({
13321
+ timelock,
13235
13322
  pubkeys: [this.forfeitPubkey]
13236
13323
  }).script;
13237
13324
  sweepTapTreeRoot = payment_js.tapLeafHash(sweepTapscript);
@@ -13336,9 +13423,9 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
13336
13423
  ...existing ?? {},
13337
13424
  intentTxId,
13338
13425
  registerProof: intent.proof,
13339
- registerProofMessage: chunkCDWLZQQW_cjs.Intent.encodeMessage(intent.message),
13426
+ registerProofMessage: chunkKUN5ZRMW_cjs.Intent.encodeMessage(intent.message),
13340
13427
  deleteProof: deleteIntent.proof,
13341
- deleteProofMessage: chunkCDWLZQQW_cjs.Intent.encodeMessage(deleteIntent.message),
13428
+ deleteProofMessage: chunkKUN5ZRMW_cjs.Intent.encodeMessage(deleteIntent.message),
13342
13429
  intentVtxos: inputs.map((i) => ({
13343
13430
  txid: i.txid,
13344
13431
  vout: i.vout
@@ -13370,7 +13457,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
13370
13457
  try {
13371
13458
  return await this.arkProvider.registerIntent(intent);
13372
13459
  } catch (error) {
13373
- if (error instanceof chunkCDWLZQQW_cjs.ArkError && error.code === 0 && error.message.includes("duplicated input")) {
13460
+ if (error instanceof chunkKUN5ZRMW_cjs.ArkError && error.code === 0 && error.message.includes("duplicated input")) {
13374
13461
  const deleteIntent = await this.makeDeleteIntentSignature(inputs);
13375
13462
  await this.arkProvider.deleteIntent(deleteIntent);
13376
13463
  return this.arkProvider.registerIntent(intent);
@@ -13386,7 +13473,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
13386
13473
  expire_at: 0,
13387
13474
  cosigners_public_keys: cosignerPubKeys
13388
13475
  };
13389
- const proof = chunkCDWLZQQW_cjs.Intent.create(message, coins, outputs);
13476
+ const proof = chunkKUN5ZRMW_cjs.Intent.create(message, coins, outputs);
13390
13477
  const signedProof = await this._signerRouter.sign(proof, intentProofJobs(coins));
13391
13478
  return {
13392
13479
  proof: base.base64.encode(signedProof.toPSBT()),
@@ -13398,7 +13485,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
13398
13485
  type: "delete",
13399
13486
  expire_at: 0
13400
13487
  };
13401
- const proof = chunkCDWLZQQW_cjs.Intent.create(message, coins, []);
13488
+ const proof = chunkKUN5ZRMW_cjs.Intent.create(message, coins, []);
13402
13489
  const signedProof = await this._signerRouter.sign(proof, intentProofJobs(coins));
13403
13490
  return {
13404
13491
  proof: base.base64.encode(signedProof.toPSBT()),
@@ -13410,7 +13497,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
13410
13497
  type: "get-pending-tx",
13411
13498
  expire_at: 0
13412
13499
  };
13413
- const proof = chunkCDWLZQQW_cjs.Intent.create(message, coins, []);
13500
+ const proof = chunkKUN5ZRMW_cjs.Intent.create(message, coins, []);
13414
13501
  const signedProof = await this._signerRouter.sign(proof, intentProofJobs(coins));
13415
13502
  return {
13416
13503
  proof: base.base64.encode(signedProof.toPSBT()),
@@ -13431,7 +13518,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
13431
13518
  if (!vtxos || vtxos.length === 0) {
13432
13519
  const scriptMap = await this.getScriptMap();
13433
13520
  const allExtended = [];
13434
- const fetchedVtxos = await chunkCDWLZQQW_cjs.getAllNormalizedVtxos(this.indexerProvider, [
13521
+ const fetchedVtxos = await chunkKUN5ZRMW_cjs.getAllNormalizedVtxos(this.indexerProvider, [
13435
13522
  ...scriptMap.keys()
13436
13523
  ]);
13437
13524
  for (const vtxo of fetchedVtxos) {
@@ -13545,11 +13632,11 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
13545
13632
  * against the current key alone would leave it pending forever.
13546
13633
  */
13547
13634
  checkpointUnrollCandidates(info) {
13548
- const current = chunkCDWLZQQW_cjs.CSVMultisigTapscript.decode(base.hex.decode(info.checkpointTapscript));
13635
+ const current = chunkKUN5ZRMW_cjs.CSVMultisigTapscript.decode(base.hex.decode(info.checkpointTapscript));
13549
13636
  const candidates = [this._serverUnrollScript, current];
13550
13637
  for (const deprecated of signerSetFromInfo(info).deprecated.keys()) {
13551
13638
  candidates.push(
13552
- chunkCDWLZQQW_cjs.CSVMultisigTapscript.encode({
13639
+ chunkKUN5ZRMW_cjs.CSVMultisigTapscript.encode({
13553
13640
  ...current.params,
13554
13641
  pubkeys: [base.hex.decode(deprecated)]
13555
13642
  })
@@ -13640,7 +13727,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
13640
13727
  if (vtxos.length === 0) {
13641
13728
  throw new Error("No VTXOs found for this arkadeCash");
13642
13729
  }
13643
- const myPkScript = chunkCDWLZQQW_cjs.ArkAddress.decode(await this.getAddress()).pkScript;
13730
+ const myPkScript = chunkKUN5ZRMW_cjs.ArkAddress.decode(await this.getAddress()).pkScript;
13644
13731
  let { spendable, unclaimed } = this.classifyCashVtxos(vtxos);
13645
13732
  let swept = 0;
13646
13733
  const drainable = vtxos.filter((vtxo) => !isSubdust(vtxo, this.dustAmount));
@@ -13667,8 +13754,9 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
13667
13754
  }
13668
13755
  if (spendable.length > 0) {
13669
13756
  const info = await this.arkProvider.getInfo();
13670
- const serverUnrollScript = chunkCDWLZQQW_cjs.CSVMultisigTapscript.decode(
13671
- base.hex.decode(info.checkpointTapscript)
13757
+ const serverUnrollScript = assertValidServerUnrollScript(
13758
+ info.checkpointTapscript,
13759
+ resolveCheckpointExitDelayPolicy(this.network, this.checkpointExitDelayPolicy)
13672
13760
  );
13673
13761
  for (const vtxo of spendable) {
13674
13762
  try {
@@ -13713,7 +13801,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
13713
13801
  const spendable = [];
13714
13802
  const unclaimed = [];
13715
13803
  for (const vtxo of vtxos) {
13716
- if (chunkCDWLZQQW_cjs.hasTerminalSpend(vtxo)) {
13804
+ if (chunkKUN5ZRMW_cjs.hasTerminalSpend(vtxo)) {
13717
13805
  unclaimed.push(cashReport(vtxo, "already-spent"));
13718
13806
  } else if (isSubdust(vtxo, this.dustAmount)) {
13719
13807
  unclaimed.push(cashReport(vtxo, "subdust"));
@@ -13733,7 +13821,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
13733
13821
  const all = [];
13734
13822
  const seen = /* @__PURE__ */ new Set();
13735
13823
  for (let pageIndex = 0; ; pageIndex++) {
13736
- const { vtxos, page } = await chunkCDWLZQQW_cjs.getNormalizedVtxos(this.indexerProvider, {
13824
+ const { vtxos, page } = await chunkKUN5ZRMW_cjs.getNormalizedVtxos(this.indexerProvider, {
13737
13825
  scripts,
13738
13826
  pageIndex,
13739
13827
  pageSize
@@ -13780,7 +13868,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
13780
13868
  for (let i = 0; i < inputs.length; i += MAX_INPUTS_PER_INTENT) {
13781
13869
  const batch = inputs.slice(i, i + MAX_INPUTS_PER_INTENT);
13782
13870
  const message = { type: "get-pending-tx", expire_at: 0 };
13783
- const proof = chunkCDWLZQQW_cjs.Intent.create(message, batch, []);
13871
+ const proof = chunkKUN5ZRMW_cjs.Intent.create(message, batch, []);
13784
13872
  const signedProof = await identity.sign(
13785
13873
  proof,
13786
13874
  Array.from({ length: batch.length + 1 }, (_, j) => j)
@@ -14090,10 +14178,10 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
14090
14178
  const serverPubKey = this.arkServerPublicKey;
14091
14179
  const serverUnrollScript = this.serverUnrollScript;
14092
14180
  const arkAddress = offchainTapscript.address(this.network.hrp, serverPubKey);
14093
- const normalizedInputs = inputs.map(chunkCDWLZQQW_cjs.normalizeVtxo);
14094
- const at = now ?? await chunkCDWLZQQW_cjs.resolveTimeHeight(this.onchainProvider);
14181
+ const normalizedInputs = inputs.map(chunkKUN5ZRMW_cjs.normalizeVtxo);
14182
+ const at = now ?? await chunkKUN5ZRMW_cjs.resolveTimeHeight(this.onchainProvider);
14095
14183
  for (const input of normalizedInputs) {
14096
- if (!chunkCDWLZQQW_cjs.canSpendOffchain(input, at)) {
14184
+ if (!chunkKUN5ZRMW_cjs.canSpendOffchain(input, at)) {
14097
14185
  throw new Error(
14098
14186
  `sendSelectedVtxosToSelf: input ${input.txid}:${input.vout} is not cooperatively spendable`
14099
14187
  );
@@ -14158,7 +14246,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
14158
14246
  );
14159
14247
  const arkTxJobs = inputs.map((input, index) => ({
14160
14248
  index,
14161
- lookupScript: chunkCDWLZQQW_cjs.VtxoScript.decode(input.tapTree).pkScript
14249
+ lookupScript: chunkKUN5ZRMW_cjs.VtxoScript.decode(input.tapTree).pkScript
14162
14250
  }));
14163
14251
  const identity = this.identity;
14164
14252
  const signer = {
@@ -14244,14 +14332,14 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
14244
14332
  const spentBy = checkpointIdByOutpoint.get(`${vtxo.txid}:${vtxo.vout}`);
14245
14333
  spentVtxos.push({
14246
14334
  ...spentFacts,
14247
- virtualStatus: chunkCDWLZQQW_cjs.toVirtualStatus(spentFacts),
14335
+ virtualStatus: chunkKUN5ZRMW_cjs.toVirtualStatus(spentFacts),
14248
14336
  ...spentBy ? { spentBy } : {},
14249
14337
  arkTxId: arkTxid
14250
14338
  });
14251
14339
  for (const id of vtxo.commitmentTxIds) {
14252
14340
  commitmentTxIds.add(id);
14253
14341
  }
14254
- const vtxoExpiry = chunkCDWLZQQW_cjs.toBatchExpiry(vtxo);
14342
+ const vtxoExpiry = chunkKUN5ZRMW_cjs.toBatchExpiry(vtxo);
14255
14343
  if (vtxoExpiry) {
14256
14344
  batchExpiry = Math.min(batchExpiry, vtxoExpiry);
14257
14345
  }
@@ -14264,7 +14352,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
14264
14352
  isSwept: false,
14265
14353
  isPreconfirmed: true,
14266
14354
  commitmentTxIds: Array.from(commitmentTxIds),
14267
- ...chunkCDWLZQQW_cjs.parseLegacyExpiry(batchExpiry)
14355
+ ...chunkKUN5ZRMW_cjs.parseLegacyExpiry(batchExpiry)
14268
14356
  };
14269
14357
  changeVtxo = {
14270
14358
  txid: arkTxid,
@@ -14276,7 +14364,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
14276
14364
  tapTree: offchainTapscript.encode(),
14277
14365
  value: Number(changeAmount),
14278
14366
  ...changeFacts,
14279
- virtualStatus: chunkCDWLZQQW_cjs.toVirtualStatus(changeFacts),
14367
+ virtualStatus: chunkKUN5ZRMW_cjs.toVirtualStatus(changeFacts),
14280
14368
  spentBy: "",
14281
14369
  status: {
14282
14370
  confirmed: false
@@ -14345,12 +14433,12 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
14345
14433
  const spentVtxos = [];
14346
14434
  const inputArkTxIds = /* @__PURE__ */ new Set();
14347
14435
  const boardingRemovalsByAddress = /* @__PURE__ */ new Map();
14348
- const vtxoInputs = inputs.filter(chunkCDWLZQQW_cjs.isVirtualCoin);
14436
+ const vtxoInputs = inputs.filter(chunkKUN5ZRMW_cjs.isVirtualCoin);
14349
14437
  const cm = await this.getContractManager();
14350
14438
  const annotatedVtxos = await cm.annotateVtxos(vtxoInputs);
14351
14439
  const annotatedByKey = new Map(annotatedVtxos.map((v) => [`${v.txid}:${v.vout}`, v]));
14352
14440
  for (const input of inputs) {
14353
- if (chunkCDWLZQQW_cjs.isVirtualCoin(input)) {
14441
+ if (chunkKUN5ZRMW_cjs.isVirtualCoin(input)) {
14354
14442
  const outpoint = `${input.txid}:${input.vout}`;
14355
14443
  const vtxo = annotatedByKey.get(outpoint);
14356
14444
  if (!vtxo) {
@@ -14362,13 +14450,13 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
14362
14450
  const settledFacts = { ...vtxo, isSpent: true };
14363
14451
  spentVtxos.push({
14364
14452
  ...settledFacts,
14365
- virtualStatus: chunkCDWLZQQW_cjs.toVirtualStatus(settledFacts),
14453
+ virtualStatus: chunkKUN5ZRMW_cjs.toVirtualStatus(settledFacts),
14366
14454
  settledBy: commitmentTxid
14367
14455
  });
14368
14456
  } else {
14369
14457
  let sourceAddress;
14370
14458
  try {
14371
- sourceAddress = chunkCDWLZQQW_cjs.VtxoScript.decode(input.tapTree).onchainAddress(
14459
+ sourceAddress = chunkKUN5ZRMW_cjs.VtxoScript.decode(input.tapTree).onchainAddress(
14372
14460
  this.network
14373
14461
  );
14374
14462
  } catch {
@@ -14426,9 +14514,9 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
14426
14514
  }
14427
14515
  };
14428
14516
  function selectVirtualCoins(coins, targetAmount) {
14429
- const sortedCoins = coins.map(chunkCDWLZQQW_cjs.normalizeVtxo).sort((a, b) => {
14430
- const expiryA = chunkCDWLZQQW_cjs.toBatchExpiry(a) || Number.MAX_SAFE_INTEGER;
14431
- const expiryB = chunkCDWLZQQW_cjs.toBatchExpiry(b) || Number.MAX_SAFE_INTEGER;
14517
+ const sortedCoins = coins.map(chunkKUN5ZRMW_cjs.normalizeVtxo).sort((a, b) => {
14518
+ const expiryA = chunkKUN5ZRMW_cjs.toBatchExpiry(a) || Number.MAX_SAFE_INTEGER;
14519
+ const expiryB = chunkKUN5ZRMW_cjs.toBatchExpiry(b) || Number.MAX_SAFE_INTEGER;
14432
14520
  if (expiryA !== expiryB) {
14433
14521
  return expiryA - expiryB;
14434
14522
  }
@@ -14685,7 +14773,7 @@ var MessageBus = class {
14685
14773
  this.initialized = true;
14686
14774
  }
14687
14775
  async buildServices(config) {
14688
- const arkProvider = new chunkCDWLZQQW_cjs.RestArkProvider(config.arkServer.url);
14776
+ const arkProvider = new chunkKUN5ZRMW_cjs.RestArkProvider(config.arkServer.url);
14689
14777
  const storage = {
14690
14778
  walletRepository: this.walletRepository,
14691
14779
  contractRepository: this.contractRepository
@@ -15024,7 +15112,7 @@ var offboardNetworkNames = [
15024
15112
  function offboardDestinationScript(destinationAddress) {
15025
15113
  for (const networkName of offboardNetworkNames) {
15026
15114
  try {
15027
- const network = chunkCDWLZQQW_cjs.networks[networkName];
15115
+ const network = chunkKUN5ZRMW_cjs.networks[networkName];
15028
15116
  const addr = btcSigner.Address(network).decode(destinationAddress);
15029
15117
  return btcSigner.OutScript.encode(addr);
15030
15118
  } catch {
@@ -15088,7 +15176,7 @@ var Ramps = class {
15088
15176
  }
15089
15177
  amount = amount ?? totalAmount;
15090
15178
  const offchainAddress = await this.wallet.getAddress();
15091
- const offchainAddr = chunkCDWLZQQW_cjs.ArkAddress.decode(offchainAddress);
15179
+ const offchainAddr = chunkKUN5ZRMW_cjs.ArkAddress.decode(offchainAddress);
15092
15180
  const offchainScript = base.hex.encode(offchainAddr.pkScript);
15093
15181
  const outputFee = estimator.evalOffchainOutput({
15094
15182
  amount,
@@ -15148,7 +15236,7 @@ var Ramps = class {
15148
15236
  const filteredVtxos = [];
15149
15237
  let totalAmount = 0n;
15150
15238
  for (const vtxo of vtxos) {
15151
- const inputFee = estimator.evalOffchainInput(chunkCDWLZQQW_cjs.toOffchainInputFeeParams(vtxo));
15239
+ const inputFee = estimator.evalOffchainInput(chunkKUN5ZRMW_cjs.toOffchainInputFeeParams(vtxo));
15152
15240
  if (inputFee.satoshis >= vtxo.value) {
15153
15241
  continue;
15154
15242
  }
@@ -15845,7 +15933,7 @@ var WalletMessageHandler = class {
15845
15933
  // Wallet methods
15846
15934
  async handleInitWallet({ payload }) {
15847
15935
  const { arkServerUrl } = payload;
15848
- this.indexerProvider = new chunk24YNIQSW_cjs.RestIndexerProvider(arkServerUrl);
15936
+ this.indexerProvider = new chunkYK6NP5KX_cjs.RestIndexerProvider(arkServerUrl);
15849
15937
  await this.onWalletInitialized();
15850
15938
  }
15851
15939
  async handleGetBalance() {
@@ -15869,12 +15957,12 @@ var WalletMessageHandler = class {
15869
15957
  let recoverable = 0;
15870
15958
  let pendingRecovery = 0;
15871
15959
  for (const vtxo of allVtxos) {
15872
- if (chunkCDWLZQQW_cjs.hasTerminalSpend(vtxo)) continue;
15960
+ if (chunkKUN5ZRMW_cjs.hasTerminalSpend(vtxo)) continue;
15873
15961
  if (pendingOutpoints.has(`${vtxo.txid}:${vtxo.vout}`)) {
15874
15962
  pendingRecovery += vtxo.value;
15875
- } else if (chunkCDWLZQQW_cjs.canRecoverOnchain(vtxo, now)) {
15963
+ } else if (chunkKUN5ZRMW_cjs.canRecoverOnchain(vtxo, now)) {
15876
15964
  recoverable += vtxo.value;
15877
- } else if (chunkCDWLZQQW_cjs.canSpendOffchain(vtxo, now)) {
15965
+ } else if (chunkKUN5ZRMW_cjs.canSpendOffchain(vtxo, now)) {
15878
15966
  if (vtxo.isPreconfirmed) {
15879
15967
  preconfirmed += vtxo.value;
15880
15968
  } else {
@@ -15886,7 +15974,7 @@ var WalletMessageHandler = class {
15886
15974
  const totalOffchain = settled + preconfirmed + recoverable + pendingRecovery;
15887
15975
  const assetBalances = /* @__PURE__ */ new Map();
15888
15976
  for (const vtxo of allVtxos) {
15889
- if (chunkCDWLZQQW_cjs.hasTerminalSpend(vtxo)) continue;
15977
+ if (chunkKUN5ZRMW_cjs.hasTerminalSpend(vtxo)) continue;
15890
15978
  if (vtxo.assets) {
15891
15979
  for (const a of vtxo.assets) {
15892
15980
  const current = assetBalances.get(a.assetId) ?? 0n;
@@ -15922,7 +16010,7 @@ var WalletMessageHandler = class {
15922
16010
  */
15923
16011
  async getSpendableVtxos() {
15924
16012
  const vtxos = await this.getVtxosFromRepo();
15925
- return vtxos.filter((v) => !chunkCDWLZQQW_cjs.hasTerminalSpend(v));
16013
+ return vtxos.filter((v) => !chunkKUN5ZRMW_cjs.hasTerminalSpend(v));
15926
16014
  }
15927
16015
  async onWalletInitialized() {
15928
16016
  if (!this.readonlyWallet || !this.arkProvider || !this.indexerProvider || !this.walletRepository) {
@@ -16134,10 +16222,10 @@ var WalletMessageHandler = class {
16134
16222
  if (dustAmount != null && isSubdust(v, dustAmount)) {
16135
16223
  return false;
16136
16224
  }
16137
- if (chunkCDWLZQQW_cjs.isRecoverable(v)) {
16225
+ if (chunkKUN5ZRMW_cjs.isRecoverable(v)) {
16138
16226
  return false;
16139
16227
  }
16140
- if (chunkCDWLZQQW_cjs.isExpired(v)) {
16228
+ if (chunkKUN5ZRMW_cjs.isExpired(v)) {
16141
16229
  return false;
16142
16230
  }
16143
16231
  return true;
@@ -16209,7 +16297,7 @@ var WalletMessageHandler = class {
16209
16297
  if (!this.readonlyWallet) return null;
16210
16298
  const { boardingTxs, commitmentsToIgnore } = await this.readonlyWallet.getBoardingTxs();
16211
16299
  const indexerProvider = this.indexerProvider;
16212
- const resolveTxCreatedAt = indexerProvider ? (txids) => chunkCDWLZQQW_cjs.fetchVtxoCreatedAtByTxid(indexerProvider, txids) : void 0;
16300
+ const resolveTxCreatedAt = indexerProvider ? (txids) => chunkKUN5ZRMW_cjs.fetchVtxoCreatedAtByTxid(indexerProvider, txids) : void 0;
16213
16301
  return buildTransactionHistory(vtxos, boardingTxs, commitmentsToIgnore, resolveTxCreatedAt);
16214
16302
  }
16215
16303
  async ensureContractEventBroadcasting() {
@@ -16894,7 +16982,7 @@ var ServiceWorkerReadonlyWallet = class _ServiceWorkerReadonlyWallet {
16894
16982
  };
16895
16983
  try {
16896
16984
  const response = await this.sendMessage(message);
16897
- return response.payload.vtxos.map(chunkCDWLZQQW_cjs.normalizeVtxo);
16985
+ return response.payload.vtxos.map(chunkKUN5ZRMW_cjs.normalizeVtxo);
16898
16986
  } catch (error) {
16899
16987
  throw new Error(`Failed to get vtxos: ${error}`);
16900
16988
  }
@@ -17007,7 +17095,7 @@ var ServiceWorkerReadonlyWallet = class _ServiceWorkerReadonlyWallet {
17007
17095
  };
17008
17096
  try {
17009
17097
  const response = await sendContractMessage(message);
17010
- return response.payload.vtxos.map(chunkCDWLZQQW_cjs.normalizeVtxo);
17098
+ return response.payload.vtxos.map(chunkKUN5ZRMW_cjs.normalizeVtxo);
17011
17099
  } catch (e) {
17012
17100
  throw new Error("Failed to annotate vtxos");
17013
17101
  }
@@ -17461,7 +17549,7 @@ var ServiceWorkerWallet = class _ServiceWorkerWallet extends ServiceWorkerReadon
17461
17549
  };
17462
17550
  try {
17463
17551
  const response = await wallet.sendMessage(message);
17464
- return response.payload.vtxos.map(chunkCDWLZQQW_cjs.normalizeVtxo);
17552
+ return response.payload.vtxos.map(chunkKUN5ZRMW_cjs.normalizeVtxo);
17465
17553
  } catch (e) {
17466
17554
  throw new Error(`Failed to get expiring vtxos: ${e}`);
17467
17555
  }
@@ -17573,12 +17661,12 @@ var OnchainWallet = class _OnchainWallet {
17573
17661
  * @returns Configured onchain wallet
17574
17662
  * @throws Error if the configured identity cannot produce a valid x-only public key
17575
17663
  */
17576
- static async create(identity, networkName = chunkCDWLZQQW_cjs.DEFAULT_NETWORK_NAME, provider) {
17664
+ static async create(identity, networkName = chunkKUN5ZRMW_cjs.DEFAULT_NETWORK_NAME, provider) {
17577
17665
  const pubkey = await identity.xOnlyPublicKey();
17578
17666
  if (!pubkey) {
17579
17667
  throw new Error("Invalid configured public key");
17580
17668
  }
17581
- const network = chunkCDWLZQQW_cjs.getNetwork(networkName);
17669
+ const network = chunkKUN5ZRMW_cjs.getNetwork(networkName);
17582
17670
  const onchainProvider = provider || new EsploraProvider(ESPLORA_URL[networkName]);
17583
17671
  const onchainP2TR = btcSigner.p2tr(pubkey, void 0, network);
17584
17672
  return new _OnchainWallet(identity, network, onchainP2TR, onchainProvider);
@@ -17684,7 +17772,7 @@ var OnchainWallet = class _OnchainWallet {
17684
17772
  if (!inputs) {
17685
17773
  throw new Error("Fee estimation failed");
17686
17774
  }
17687
- let tx = new chunkCDWLZQQW_cjs.Transaction();
17775
+ let tx = new chunkKUN5ZRMW_cjs.Transaction();
17688
17776
  for (const input of inputs) {
17689
17777
  tx.addInput({
17690
17778
  txid: input.txid,
@@ -17742,7 +17830,7 @@ var OnchainWallet = class _OnchainWallet {
17742
17830
  * @throws If the parent has no anchor, or funding cannot be selected/signed
17743
17831
  */
17744
17832
  async bumpAnchor(parentHex, feeRate) {
17745
- const parent = chunkCDWLZQQW_cjs.Transaction.fromRaw(base.hex.decode(parentHex));
17833
+ const parent = chunkKUN5ZRMW_cjs.Transaction.fromRaw(base.hex.decode(parentHex));
17746
17834
  const coins = (await this.getCoins()).filter((c) => c.status.confirmed);
17747
17835
  const child = await this.buildBumpPackage(parent, feeRate, coins);
17748
17836
  return [parent.hex, child.hex];
@@ -18507,7 +18595,7 @@ exports.BIP322 = void 0;
18507
18595
  async function sign2(message, identity, network) {
18508
18596
  const xOnlyPubKey = await identity.xOnlyPublicKey();
18509
18597
  const payment = btcSigner.p2tr(xOnlyPubKey, void 0, network);
18510
- const toSpend = chunkCDWLZQQW_cjs.craftToSpendTx(message, payment.script, TAG_BIP322);
18598
+ const toSpend = chunkKUN5ZRMW_cjs.craftToSpendTx(message, payment.script, TAG_BIP322);
18511
18599
  const toSign = craftBIP322ToSignP2TR(toSpend, payment.script, xOnlyPubKey);
18512
18600
  const signed = await identity.sign(toSign, [0]);
18513
18601
  signed.finalizeIdx(0);
@@ -18565,7 +18653,7 @@ function verifyP2TR(message, witnessItems, pkScript, pubkey) {
18565
18653
  if (sighashType !== btcSigner.SigHash.DEFAULT && sighashType !== btcSigner.SigHash.ALL) {
18566
18654
  return false;
18567
18655
  }
18568
- const toSpend = chunkCDWLZQQW_cjs.craftToSpendTx(message, pkScript, TAG_BIP322);
18656
+ const toSpend = chunkKUN5ZRMW_cjs.craftToSpendTx(message, pkScript, TAG_BIP322);
18569
18657
  const toSign = craftBIP322ToSignP2TR(toSpend, pkScript, pubkey);
18570
18658
  const sighash = toSign.preimageWitnessV1(0, [pkScript], sighashType, [0n]);
18571
18659
  const rawSig = sig.length === 65 ? sig.subarray(0, 64) : sig;
@@ -18586,7 +18674,7 @@ function verifyP2WPKH(message, witnessItems, pkScript, addressHash) {
18586
18674
  }
18587
18675
  const sighashType = sigWithHash[sigWithHash.length - 1];
18588
18676
  const derSig = sigWithHash.subarray(0, sigWithHash.length - 1);
18589
- const toSpend = chunkCDWLZQQW_cjs.craftToSpendTx(message, pkScript, TAG_BIP322);
18677
+ const toSpend = chunkKUN5ZRMW_cjs.craftToSpendTx(message, pkScript, TAG_BIP322);
18590
18678
  const toSign = craftBIP322ToSignSimple(toSpend, pkScript);
18591
18679
  const scriptCode = btcSigner.OutScript.encode({ type: "pkh", hash: addressHash });
18592
18680
  const sighash = toSign.preimageWitnessV0(0, scriptCode, sighashType, 0n);
@@ -18639,7 +18727,7 @@ function encodeCompactSize(n) {
18639
18727
  return buf;
18640
18728
  }
18641
18729
  function craftBIP322ToSignP2TR(toSpend, pkScript, tapInternalKey) {
18642
- const tx = new chunkCDWLZQQW_cjs.Transaction({ version: 0 });
18730
+ const tx = new chunkKUN5ZRMW_cjs.Transaction({ version: 0 });
18643
18731
  tx.addInput({
18644
18732
  txid: toSpend.id,
18645
18733
  index: 0,
@@ -18653,12 +18741,12 @@ function craftBIP322ToSignP2TR(toSpend, pkScript, tapInternalKey) {
18653
18741
  });
18654
18742
  tx.addOutput({
18655
18743
  amount: 0n,
18656
- script: chunkCDWLZQQW_cjs.OP_RETURN_EMPTY_PKSCRIPT
18744
+ script: chunkKUN5ZRMW_cjs.OP_RETURN_EMPTY_PKSCRIPT
18657
18745
  });
18658
18746
  return tx;
18659
18747
  }
18660
18748
  function craftBIP322ToSignSimple(toSpend, pkScript) {
18661
- const tx = new chunkCDWLZQQW_cjs.Transaction({ version: 0 });
18749
+ const tx = new chunkKUN5ZRMW_cjs.Transaction({ version: 0 });
18662
18750
  tx.addInput({
18663
18751
  txid: toSpend.id,
18664
18752
  index: 0,
@@ -18670,7 +18758,7 @@ function craftBIP322ToSignSimple(toSpend, pkScript) {
18670
18758
  });
18671
18759
  tx.addOutput({
18672
18760
  amount: 0n,
18673
- script: chunkCDWLZQQW_cjs.OP_RETURN_EMPTY_PKSCRIPT
18761
+ script: chunkKUN5ZRMW_cjs.OP_RETURN_EMPTY_PKSCRIPT
18674
18762
  });
18675
18763
  return tx;
18676
18764
  }
@@ -18801,7 +18889,7 @@ var RestEmulatorProvider = class {
18801
18889
  }
18802
18890
  };
18803
18891
  function finalizeVirtualTx(type, psbtBase64) {
18804
- const tx = chunkCDWLZQQW_cjs.Transaction.fromPSBT(base.base64.decode(psbtBase64));
18892
+ const tx = chunkKUN5ZRMW_cjs.Transaction.fromPSBT(base.base64.decode(psbtBase64));
18805
18893
  if (type === "INDEXER_CHAINED_TX_TYPE_TREE" /* TREE */) {
18806
18894
  const input = tx.getInput(0);
18807
18895
  if (!input) {
@@ -18828,14 +18916,14 @@ var ExitPathError = class extends Error {
18828
18916
  reason;
18829
18917
  };
18830
18918
  function delayWeight(sequence) {
18831
- const t = chunkCDWLZQQW_cjs.sequenceToTimelock(sequence);
18919
+ const t = chunkKUN5ZRMW_cjs.sequenceToTimelock(sequence);
18832
18920
  return t.type === "blocks" ? Number(t.value) : Number(t.value) / 600;
18833
18921
  }
18834
18922
  async function resolveUnilateralPath(params) {
18835
18923
  const { vtxo, scriptHex, contractRepository } = params;
18836
18924
  const contract = contractRepository ? (await contractRepository.getContracts({ script: scriptHex }))[0] : void 0;
18837
18925
  if (contract) {
18838
- const handler = chunk37XKN5DZ_cjs.contractHandlers.get(contract.type);
18926
+ const handler = chunkOWTKOMJZ_cjs.contractHandlers.get(contract.type);
18839
18927
  if (!handler) {
18840
18928
  throw new ExitPathError(
18841
18929
  "no-handler",
@@ -18858,12 +18946,12 @@ async function resolveUnilateralPath(params) {
18858
18946
  paths.sort((a, b) => delayWeight(a.sequence) - delayWeight(b.sequence));
18859
18947
  return { selection: paths[0], label: `${contract.type}:unilateral` };
18860
18948
  }
18861
- const decoded = chunkCDWLZQQW_cjs.VtxoScript.decode(vtxo.tapTree);
18949
+ const decoded = chunkKUN5ZRMW_cjs.VtxoScript.decode(vtxo.tapTree);
18862
18950
  let best;
18863
18951
  for (const exit of decoded.exitPaths()) {
18864
18952
  const leaf = decoded.findLeaf(base.hex.encode(exit.script));
18865
18953
  if (!leaf) continue;
18866
- const sequence = chunkCDWLZQQW_cjs.timelockToSequence(exit.params.timelock);
18954
+ const sequence = chunkKUN5ZRMW_cjs.timelockToSequence(exit.params.timelock);
18867
18955
  const weight = delayWeight(sequence);
18868
18956
  if (!best || weight < best.weight) {
18869
18957
  best = { selection: { leaf, sequence }, weight };
@@ -19049,14 +19137,14 @@ async function prepareUnrollTransaction(wallet, vtxoTxIds, outputAddress) {
19049
19137
  }
19050
19138
  const resolved = await resolveUnilateralPath({
19051
19139
  vtxo,
19052
- scriptHex: base.hex.encode(chunkCDWLZQQW_cjs.VtxoScript.decode(vtxo.tapTree).pkScript),
19140
+ scriptHex: base.hex.encode(chunkKUN5ZRMW_cjs.VtxoScript.decode(vtxo.tapTree).pkScript),
19053
19141
  contractRepository: wallet.contractRepository,
19054
19142
  walletPubKeyHex: base.hex.encode(await wallet.identity.xOnlyPublicKey()),
19055
19143
  currentTime: Date.now()
19056
19144
  });
19057
19145
  const spendingLeaf = resolved.selection.leaf;
19058
19146
  const sequence = resolved.selection.sequence;
19059
- const timelock = chunkCDWLZQQW_cjs.sequenceToTimelock(sequence);
19147
+ const timelock = chunkKUN5ZRMW_cjs.sequenceToTimelock(sequence);
19060
19148
  const elapsed = timelock.type === "blocks" ? chainTip.height >= txStatus.blockHeight + Number(timelock.value) : chainTip.time >= txStatus.blockTime + Number(timelock.value);
19061
19149
  if (!elapsed) {
19062
19150
  throw new Error(`no available exit path found for vtxo ${vtxo.txid}:${vtxo.vout}`);
@@ -19069,7 +19157,7 @@ async function prepareUnrollTransaction(wallet, vtxoTxIds, outputAddress) {
19069
19157
  sequence,
19070
19158
  witnessUtxo: {
19071
19159
  amount: BigInt(vtxo.value),
19072
- script: chunkCDWLZQQW_cjs.VtxoScript.decode(vtxo.tapTree).pkScript
19160
+ script: chunkKUN5ZRMW_cjs.VtxoScript.decode(vtxo.tapTree).pkScript
19073
19161
  },
19074
19162
  sighashType: btcSigner.SigHash.DEFAULT
19075
19163
  });
@@ -19079,7 +19167,7 @@ async function prepareUnrollTransaction(wallet, vtxoTxIds, outputAddress) {
19079
19167
  btcSigner.TaprootControlBlock.encode(spendingLeaf[0]).length
19080
19168
  );
19081
19169
  }
19082
- const tx = new chunkCDWLZQQW_cjs.Transaction({ version: 2 });
19170
+ const tx = new chunkKUN5ZRMW_cjs.Transaction({ version: 2 });
19083
19171
  for (const input of inputs) {
19084
19172
  tx.addInput(input);
19085
19173
  }
@@ -19146,7 +19234,7 @@ async function buildSignedSweep(params) {
19146
19234
  `uneconomic vtxo ${vtxo.txid}:${vtxo.vout}: value ${vtxo.value} - fee ${fee} < dust`
19147
19235
  );
19148
19236
  }
19149
- const tx = new chunkCDWLZQQW_cjs.Transaction({ version: 2 });
19237
+ const tx = new chunkKUN5ZRMW_cjs.Transaction({ version: 2 });
19150
19238
  tx.addInput({
19151
19239
  txid: vtxo.txid,
19152
19240
  index: vtxo.vout,
@@ -19171,7 +19259,7 @@ async function buildSignedSweep(params) {
19171
19259
  finalScriptWitness: [
19172
19260
  tapScriptSig[0][1],
19173
19261
  ...path.extraWitness,
19174
- chunkCDWLZQQW_cjs.scriptFromTapLeafScript(path.leaf),
19262
+ chunkKUN5ZRMW_cjs.scriptFromTapLeafScript(path.leaf),
19175
19263
  btcSigner.TaprootControlBlock.encode(controlBlock)
19176
19264
  ]
19177
19265
  });
@@ -19201,7 +19289,7 @@ async function resolveFeeRate(opts) {
19201
19289
  }
19202
19290
  async function selectExitVtxos(opts) {
19203
19291
  if (!opts.vtxos) return opts.wallet.getVtxos();
19204
- const res = await chunkCDWLZQQW_cjs.getNormalizedVtxos(opts.wallet.indexerProvider, { outpoints: opts.vtxos });
19292
+ const res = await chunkKUN5ZRMW_cjs.getNormalizedVtxos(opts.wallet.indexerProvider, { outpoints: opts.vtxos });
19205
19293
  const tapTrees = /* @__PURE__ */ new Map();
19206
19294
  const out = [];
19207
19295
  for (const vtxo of res.vtxos) {
@@ -19216,7 +19304,7 @@ async function selectExitVtxos(opts) {
19216
19304
  `no contract registered for vtxo script ${vtxo.script} \u2014 register the contract before exiting`
19217
19305
  );
19218
19306
  }
19219
- const handler = chunk37XKN5DZ_cjs.contractHandlers.get(contract.type);
19307
+ const handler = chunkOWTKOMJZ_cjs.contractHandlers.get(contract.type);
19220
19308
  if (!handler) {
19221
19309
  throw new Error(`no contract handler registered for type '${contract.type}'`);
19222
19310
  }
@@ -19246,7 +19334,7 @@ async function computeExitLayout(opts, feeRate) {
19246
19334
  if (pendingNodes.length > 0) {
19247
19335
  const txs = await resolver.getVirtualTxs(pendingNodes.map((n) => n.txid));
19248
19336
  for (const psbt of txs) {
19249
- psbts.set(chunkCDWLZQQW_cjs.Transaction.fromPSBT(base.base64.decode(psbt)).id, psbt);
19337
+ psbts.set(chunkKUN5ZRMW_cjs.Transaction.fromPSBT(base.base64.decode(psbt)).id, psbt);
19250
19338
  }
19251
19339
  }
19252
19340
  const childVsize = Number(
@@ -19282,7 +19370,7 @@ async function computeExitLayout(opts, feeRate) {
19282
19370
  try {
19283
19371
  const resolved = await resolveUnilateralPath({
19284
19372
  vtxo,
19285
- scriptHex: base.hex.encode(chunkCDWLZQQW_cjs.VtxoScript.decode(vtxo.tapTree).pkScript),
19373
+ scriptHex: base.hex.encode(chunkKUN5ZRMW_cjs.VtxoScript.decode(vtxo.tapTree).pkScript),
19286
19374
  contractRepository: wallet.contractRepository,
19287
19375
  walletPubKeyHex,
19288
19376
  currentTime: Date.now()
@@ -19301,7 +19389,7 @@ async function computeExitLayout(opts, feeRate) {
19301
19389
  });
19302
19390
  continue;
19303
19391
  }
19304
- const t = chunkCDWLZQQW_cjs.sequenceToTimelock(resolved.selection.sequence);
19392
+ const t = chunkKUN5ZRMW_cjs.sequenceToTimelock(resolved.selection.sequence);
19305
19393
  const delay = { type: t.type, value: Number(t.value) };
19306
19394
  infos.push({ outpoint, value: vtxo.value, sweepFee, path: resolved.label, delay });
19307
19395
  sweeps.push({ vtxo, resolved, sweepFee, delay });
@@ -19640,7 +19728,7 @@ async function prepare(opts) {
19640
19728
  txid: sweep.vtxo.txid,
19641
19729
  vout: sweep.vtxo.vout,
19642
19730
  value: sweep.vtxo.value,
19643
- pkScript: chunkCDWLZQQW_cjs.VtxoScript.decode(sweep.vtxo.tapTree).pkScript
19731
+ pkScript: chunkKUN5ZRMW_cjs.VtxoScript.decode(sweep.vtxo.tapTree).pkScript
19644
19732
  },
19645
19733
  path: sweep.resolved.selection,
19646
19734
  outputAddress: opts.sweepAddress,
@@ -19725,7 +19813,7 @@ async function prepare(opts) {
19725
19813
  if (newFee <= splitterFee) break;
19726
19814
  splitterFee = newFee;
19727
19815
  }
19728
- const splitter = new chunkCDWLZQQW_cjs.Transaction({ version: 2 });
19816
+ const splitter = new chunkKUN5ZRMW_cjs.Transaction({ version: 2 });
19729
19817
  for (const coin of selected.inputs) {
19730
19818
  splitter.addInput({
19731
19819
  txid: coin.txid,
@@ -19868,42 +19956,42 @@ var UnilateralExit = {
19868
19956
  // src/arkade/index.ts
19869
19957
  var arkade_exports = {};
19870
19958
  chunk5BLDMQED_cjs.__export(arkade_exports, {
19871
- ARKADE_OP: () => chunk37XKN5DZ_cjs.ARKADE_OP,
19872
- ARKADE_OPCODES: () => chunk37XKN5DZ_cjs.ARKADE_OPCODES,
19873
- ARKADE_OPCODE_NAMES: () => chunk37XKN5DZ_cjs.ARKADE_OPCODE_NAMES,
19874
- ARKADE_OPCODE_VALUES: () => chunk37XKN5DZ_cjs.ARKADE_OPCODE_VALUES,
19875
- ARKADE_OPS: () => chunk37XKN5DZ_cjs.ARKADE_OPS,
19959
+ ARKADE_OP: () => chunkOWTKOMJZ_cjs.ARKADE_OP,
19960
+ ARKADE_OPCODES: () => chunkOWTKOMJZ_cjs.ARKADE_OPCODES,
19961
+ ARKADE_OPCODE_NAMES: () => chunkOWTKOMJZ_cjs.ARKADE_OPCODE_NAMES,
19962
+ ARKADE_OPCODE_VALUES: () => chunkOWTKOMJZ_cjs.ARKADE_OPCODE_VALUES,
19963
+ ARKADE_OPS: () => chunkOWTKOMJZ_cjs.ARKADE_OPS,
19876
19964
  Arkade: () => Arkade,
19877
19965
  ArkadeContract: () => ArkadeContract,
19878
- ArkadeProgramScript: () => chunk37XKN5DZ_cjs.ArkadeProgramScript,
19879
- ArkadeScript: () => chunk37XKN5DZ_cjs.ArkadeScript,
19966
+ ArkadeProgramScript: () => chunkOWTKOMJZ_cjs.ArkadeProgramScript,
19967
+ ArkadeScript: () => chunkOWTKOMJZ_cjs.ArkadeScript,
19880
19968
  ArkadeTransactionBuilder: () => ArkadeTransactionBuilder,
19881
- BigNum: () => chunk37XKN5DZ_cjs.bignum_exports,
19969
+ BigNum: () => chunkOWTKOMJZ_cjs.bignum_exports,
19882
19970
  OP: () => btcSigner.OP,
19883
- OPCODE_NAMES: () => chunk37XKN5DZ_cjs.OPCODE_NAMES,
19884
- OPCODE_VALUES: () => chunk37XKN5DZ_cjs.OPCODE_VALUES,
19885
- SUPPORTED_PROGRAM_VERSION: () => chunk37XKN5DZ_cjs.SUPPORTED_PROGRAM_VERSION,
19971
+ OPCODE_NAMES: () => chunkOWTKOMJZ_cjs.OPCODE_NAMES,
19972
+ OPCODE_VALUES: () => chunkOWTKOMJZ_cjs.OPCODE_VALUES,
19973
+ SUPPORTED_PROGRAM_VERSION: () => chunkOWTKOMJZ_cjs.SUPPORTED_PROGRAM_VERSION,
19886
19974
  Script: () => btcSigner.Script,
19887
- arkadeScriptHash: () => chunk37XKN5DZ_cjs.arkadeScriptHash,
19888
- arkadeWitnessHash: () => chunk37XKN5DZ_cjs.arkadeWitnessHash,
19889
- asmToBytes: () => chunk37XKN5DZ_cjs.asmToBytes,
19890
- bytesToASM: () => chunk37XKN5DZ_cjs.bytesToASM,
19891
- computeArkadeScriptPublicKey: () => chunk37XKN5DZ_cjs.computeArkadeScriptPublicKey,
19975
+ arkadeScriptHash: () => chunkOWTKOMJZ_cjs.arkadeScriptHash,
19976
+ arkadeWitnessHash: () => chunkOWTKOMJZ_cjs.arkadeWitnessHash,
19977
+ asmToBytes: () => chunkOWTKOMJZ_cjs.asmToBytes,
19978
+ bytesToASM: () => chunkOWTKOMJZ_cjs.bytesToASM,
19979
+ computeArkadeScriptPublicKey: () => chunkOWTKOMJZ_cjs.computeArkadeScriptPublicKey,
19892
19980
  createArkadeBatchHandler: () => createArkadeBatchHandler,
19893
- deserializeArkadeContractParams: () => chunk37XKN5DZ_cjs.deserializeArkadeContractParams,
19894
- fromASM: () => chunk37XKN5DZ_cjs.fromASM,
19895
- getOpcodeName: () => chunk37XKN5DZ_cjs.getOpcodeName,
19896
- getOpcodeValue: () => chunk37XKN5DZ_cjs.getOpcodeValue,
19897
- parseArtifact: () => chunk37XKN5DZ_cjs.parseArtifact,
19898
- resolveAsm: () => chunk37XKN5DZ_cjs.resolveAsm,
19899
- serializeArkadeContractParams: () => chunk37XKN5DZ_cjs.serializeArkadeContractParams,
19900
- stringifyArtifact: () => chunk37XKN5DZ_cjs.stringifyArtifact,
19901
- toASM: () => chunk37XKN5DZ_cjs.toASM,
19902
- validateProgram: () => chunk37XKN5DZ_cjs.validateProgram,
19903
- witnessRefToBytes: () => chunk37XKN5DZ_cjs.witnessRefToBytes
19981
+ deserializeArkadeContractParams: () => chunkOWTKOMJZ_cjs.deserializeArkadeContractParams,
19982
+ fromASM: () => chunkOWTKOMJZ_cjs.fromASM,
19983
+ getOpcodeName: () => chunkOWTKOMJZ_cjs.getOpcodeName,
19984
+ getOpcodeValue: () => chunkOWTKOMJZ_cjs.getOpcodeValue,
19985
+ parseArtifact: () => chunkOWTKOMJZ_cjs.parseArtifact,
19986
+ resolveAsm: () => chunkOWTKOMJZ_cjs.resolveAsm,
19987
+ serializeArkadeContractParams: () => chunkOWTKOMJZ_cjs.serializeArkadeContractParams,
19988
+ stringifyArtifact: () => chunkOWTKOMJZ_cjs.stringifyArtifact,
19989
+ toASM: () => chunkOWTKOMJZ_cjs.toASM,
19990
+ validateProgram: () => chunkOWTKOMJZ_cjs.validateProgram,
19991
+ witnessRefToBytes: () => chunkOWTKOMJZ_cjs.witnessRefToBytes
19904
19992
  });
19905
- var isVtxoCoin = (input) => chunkCDWLZQQW_cjs.isVirtualCoin(input);
19906
- function createArkadeBatchHandler(intentId, inputs, signer, signedProof, message, session, arkProvider, emulator, network, recipients) {
19993
+ var isVtxoCoin = (input) => chunkKUN5ZRMW_cjs.isVirtualCoin(input);
19994
+ function createArkadeBatchHandler(intentId, inputs, signer, signedProof, message, session, arkProvider, emulator, network, recipients, batchExpiryPolicy) {
19907
19995
  let batchId;
19908
19996
  let sweepTapTreeRoot;
19909
19997
  let validatedCommitmentTxid;
@@ -19913,15 +20001,19 @@ function createArkadeBatchHandler(intentId, inputs, signer, signedProof, message
19913
20001
  const intentIdHash = utils_js.sha256(utf8IntentId);
19914
20002
  const intentIdHashStr = base.hex.encode(intentIdHash);
19915
20003
  if (!event.intentIdHashes.includes(intentIdHashStr)) return { skip: true };
20004
+ const info = await arkProvider.getInfo();
20005
+ const timelock = assertValidBatchExpiry(
20006
+ event.batchExpiry,
20007
+ resolveBatchExpiryPolicy(network, {
20008
+ advertisedVtxoTreeExpiry: info.vtxoTreeExpiry,
20009
+ ...batchExpiryPolicy
20010
+ })
20011
+ );
19916
20012
  await arkProvider.confirmRegistration(intentId);
19917
20013
  batchId = event.id;
19918
- const sweepTapscript = chunkCDWLZQQW_cjs.CSVMultisigTapscript.encode({
19919
- timelock: {
19920
- value: event.batchExpiry,
19921
- // BIP-65: values >= 512 are interpreted as seconds, below as blocks
19922
- type: event.batchExpiry >= 512n ? "seconds" : "blocks"
19923
- },
19924
- pubkeys: [base.hex.decode((await arkProvider.getInfo()).forfeitPubkey).subarray(1)]
20014
+ const sweepTapscript = chunkKUN5ZRMW_cjs.CSVMultisigTapscript.encode({
20015
+ timelock,
20016
+ pubkeys: [base.hex.decode(info.forfeitPubkey).subarray(1)]
19925
20017
  }).script;
19926
20018
  sweepTapTreeRoot = payment_js.tapLeafHash(sweepTapscript);
19927
20019
  return { skip: false };
@@ -19933,7 +20025,7 @@ function createArkadeBatchHandler(intentId, inputs, signer, signedProof, message
19933
20025
  if (!xOnlyPubkeys.includes(base.hex.encode(xonlySignerPubKey))) {
19934
20026
  return { skip: true };
19935
20027
  }
19936
- const commitmentTx = chunkCDWLZQQW_cjs.Transaction.fromPSBT(base.base64.decode(event.unsignedCommitmentTx));
20028
+ const commitmentTx = chunkKUN5ZRMW_cjs.Transaction.fromPSBT(base.base64.decode(event.unsignedCommitmentTx));
19937
20029
  validateVtxoTxGraph(vtxoTree, commitmentTx, sweepTapTreeRoot);
19938
20030
  if (recipients && recipients.length > 0) {
19939
20031
  validateBatchRecipients(commitmentTx, vtxoTree.leaves(), recipients, network);
@@ -19965,7 +20057,7 @@ function createArkadeBatchHandler(intentId, inputs, signer, signedProof, message
19965
20057
  if (connectorTree) {
19966
20058
  validateConnectorsTxGraph(event.commitmentTx, connectorTree);
19967
20059
  }
19968
- let commitmentPsbt = chunkCDWLZQQW_cjs.Transaction.fromPSBT(base.base64.decode(event.commitmentTx));
20060
+ let commitmentPsbt = chunkKUN5ZRMW_cjs.Transaction.fromPSBT(base.base64.decode(event.commitmentTx));
19969
20061
  assertFinalCommitmentMatchesValidated(
19970
20062
  commitmentPsbt,
19971
20063
  validatedCommitmentTxid,
@@ -20000,7 +20092,7 @@ function createArkadeBatchHandler(intentId, inputs, signer, signedProof, message
20000
20092
  boardingIndices.push(boardingIdx);
20001
20093
  continue;
20002
20094
  }
20003
- if (chunkCDWLZQQW_cjs.isRecoverable(input) || isSubdust(input, info.dust)) {
20095
+ if (chunkKUN5ZRMW_cjs.isRecoverable(input) || isSubdust(input, info.dust)) {
20004
20096
  continue;
20005
20097
  }
20006
20098
  if (connectorIndex >= connectorLeaves.length) {
@@ -20021,7 +20113,7 @@ function createArkadeBatchHandler(intentId, inputs, signer, signedProof, message
20021
20113
  index: input.vout,
20022
20114
  witnessUtxo: {
20023
20115
  amount: BigInt(input.value),
20024
- script: chunkCDWLZQQW_cjs.VtxoScript.decode(input.tapTree).pkScript
20116
+ script: chunkKUN5ZRMW_cjs.VtxoScript.decode(input.tapTree).pkScript
20025
20117
  },
20026
20118
  sighashType: btcSigner.SigHash.DEFAULT,
20027
20119
  tapLeafScript: [input.forfeitTapLeafScript]
@@ -20104,7 +20196,7 @@ var Arkade = class _Arkade {
20104
20196
  static async connect(opts) {
20105
20197
  const info = await opts.arkade.getInfo();
20106
20198
  const serverKey = base.hex.decode(info.signerPubkey).slice(1);
20107
- const checkpoint = chunkCDWLZQQW_cjs.CSVMultisigTapscript.decode(base.hex.decode(info.checkpointTapscript));
20199
+ const checkpoint = chunkKUN5ZRMW_cjs.CSVMultisigTapscript.decode(base.hex.decode(info.checkpointTapscript));
20108
20200
  let emulatorKey;
20109
20201
  if (opts.emulator) {
20110
20202
  const eInfo = await opts.emulator.getInfo();
@@ -20118,7 +20210,7 @@ var Arkade = class _Arkade {
20118
20210
  return new _Arkade({
20119
20211
  arkProvider: opts.arkade,
20120
20212
  emulator: opts.emulator,
20121
- network: opts.network ?? chunkCDWLZQQW_cjs.DEFAULT_NETWORK,
20213
+ network: opts.network ?? chunkKUN5ZRMW_cjs.DEFAULT_NETWORK,
20122
20214
  serverKey,
20123
20215
  emulatorKey,
20124
20216
  checkpoint,
@@ -20139,7 +20231,7 @@ var Arkade = class _Arkade {
20139
20231
  * key respectively; explicit args always win.
20140
20232
  */
20141
20233
  contract(program, args = {}) {
20142
- const declared = (program.params ?? []).map(chunk37XKN5DZ_cjs.inputName);
20234
+ const declared = (program.params ?? []).map(chunkOWTKOMJZ_cjs.inputName);
20143
20235
  if (declared.includes("server") && args.server === void 0) {
20144
20236
  args = { ...args, server: this.serverKey };
20145
20237
  }
@@ -20159,7 +20251,7 @@ var ArkadeContract = class _ArkadeContract {
20159
20251
  userKey: client.userKey,
20160
20252
  emulatorKey: client.emulatorKey
20161
20253
  };
20162
- this.vtxoScript = new chunk37XKN5DZ_cjs.ArkadeProgramScript(program, args, this.keys);
20254
+ this.vtxoScript = new chunkOWTKOMJZ_cjs.ArkadeProgramScript(program, args, this.keys);
20163
20255
  this.tapTree = this.vtxoScript.encode();
20164
20256
  this.compiled = this.vtxoScript.compiled;
20165
20257
  }
@@ -20187,7 +20279,7 @@ var ArkadeContract = class _ArkadeContract {
20187
20279
  `ArkadeContract.fromContract: expected contract type 'arkade', got '${contract.type}'`
20188
20280
  );
20189
20281
  }
20190
- const typed = chunk37XKN5DZ_cjs.deserializeArkadeContractParams(contract.params);
20282
+ const typed = chunkOWTKOMJZ_cjs.deserializeArkadeContractParams(contract.params);
20191
20283
  return new _ArkadeContract(client, typed.program, typed.args, {
20192
20284
  serverKey: typed.serverKey,
20193
20285
  userKey: typed.userKey,
@@ -20228,7 +20320,7 @@ var ArkadeContract = class _ArkadeContract {
20228
20320
  toContractParams() {
20229
20321
  return {
20230
20322
  type: "arkade",
20231
- params: chunk37XKN5DZ_cjs.serializeArkadeContractParams({
20323
+ params: chunkOWTKOMJZ_cjs.serializeArkadeContractParams({
20232
20324
  program: this.program,
20233
20325
  args: this.args,
20234
20326
  serverKey: this.keys.serverKey,
@@ -20273,13 +20365,13 @@ var ArkadeContract = class _ArkadeContract {
20273
20365
  const [registered] = await manager.getContracts({ script: scriptHex });
20274
20366
  if (registered) {
20275
20367
  const [withVtxos] = await manager.getContractsWithVtxos({ script: scriptHex });
20276
- return (withVtxos?.vtxos ?? []).filter((v) => !chunkCDWLZQQW_cjs.hasTerminalSpend(v));
20368
+ return (withVtxos?.vtxos ?? []).filter((v) => !chunkKUN5ZRMW_cjs.hasTerminalSpend(v));
20277
20369
  }
20278
20370
  }
20279
20371
  if (!this.client.indexer) {
20280
20372
  throw new Error("ArkadeContract.getUtxos: an indexer is required");
20281
20373
  }
20282
- const { vtxos } = await chunkCDWLZQQW_cjs.getNormalizedVtxos(this.client.indexer, {
20374
+ const { vtxos } = await chunkKUN5ZRMW_cjs.getNormalizedVtxos(this.client.indexer, {
20283
20375
  scripts: [scriptHex],
20284
20376
  spendableOnly: true
20285
20377
  });
@@ -20381,12 +20473,12 @@ var ArkadeTransactionBuilder = class {
20381
20473
  this.contract.client.checkpoint
20382
20474
  );
20383
20475
  if (coin.sourceTx) {
20384
- chunkCDWLZQQW_cjs.setArkPsbtField(arkTx, 0, chunkCDWLZQQW_cjs.PrevArkTxField, coin.sourceTx);
20476
+ chunkKUN5ZRMW_cjs.setArkPsbtField(arkTx, 0, chunkKUN5ZRMW_cjs.PrevArkTxField, coin.sourceTx);
20385
20477
  }
20386
20478
  const condition = (def.tapscript.witness ?? []).map((w) => this.witnessBytes(w));
20387
20479
  if (condition.length > 0) {
20388
- chunkCDWLZQQW_cjs.setArkPsbtField(arkTx, 0, chunkCDWLZQQW_cjs.ConditionWitness, condition);
20389
- chunkCDWLZQQW_cjs.setArkPsbtField(checkpoints[0], 0, chunkCDWLZQQW_cjs.ConditionWitness, condition);
20480
+ chunkKUN5ZRMW_cjs.setArkPsbtField(arkTx, 0, chunkKUN5ZRMW_cjs.ConditionWitness, condition);
20481
+ chunkKUN5ZRMW_cjs.setArkPsbtField(checkpoints[0], 0, chunkKUN5ZRMW_cjs.ConditionWitness, condition);
20390
20482
  }
20391
20483
  const packets = [];
20392
20484
  if (this.assetSpecs.length > 0) {
@@ -20425,7 +20517,7 @@ var ArkadeTransactionBuilder = class {
20425
20517
  base.base64.encode(signedArk2.toPSBT()),
20426
20518
  signedCps.map((c) => base.base64.encode(c.toPSBT()))
20427
20519
  );
20428
- const txid = chunkCDWLZQQW_cjs.Transaction.fromPSBT(base.base64.decode(res2.signedArkTx)).id;
20520
+ const txid = chunkKUN5ZRMW_cjs.Transaction.fromPSBT(base.base64.decode(res2.signedArkTx)).id;
20429
20521
  return {
20430
20522
  txid,
20431
20523
  signedArkTx: res2.signedArkTx,
@@ -20484,23 +20576,23 @@ var ArkadeTransactionBuilder = class {
20484
20576
  }
20485
20577
  buildAssetPacket() {
20486
20578
  const groups = this.assetSpecs.map((s) => {
20487
- const id = typeof s.assetId === "string" ? chunk24YNIQSW_cjs.AssetId.fromString(s.assetId) : chunk24YNIQSW_cjs.AssetId.fromBytes(s.assetId);
20488
- return chunk24YNIQSW_cjs.AssetGroup.create(
20579
+ const id = typeof s.assetId === "string" ? chunkYK6NP5KX_cjs.AssetId.fromString(s.assetId) : chunkYK6NP5KX_cjs.AssetId.fromBytes(s.assetId);
20580
+ return chunkYK6NP5KX_cjs.AssetGroup.create(
20489
20581
  id,
20490
20582
  null,
20491
- s.inputs.map((i) => chunk24YNIQSW_cjs.AssetInput.create(i.vin, i.amount)),
20492
- s.outputs.map((o) => chunk24YNIQSW_cjs.AssetOutput.create(o.vout, o.amount)),
20493
- (s.metadata ?? []).map((m) => chunk24YNIQSW_cjs.Metadata.create(m.key, m.value))
20583
+ s.inputs.map((i) => chunkYK6NP5KX_cjs.AssetInput.create(i.vin, i.amount)),
20584
+ s.outputs.map((o) => chunkYK6NP5KX_cjs.AssetOutput.create(o.vout, o.amount)),
20585
+ (s.metadata ?? []).map((m) => chunkYK6NP5KX_cjs.Metadata.create(m.key, m.value))
20494
20586
  );
20495
20587
  });
20496
- return chunk24YNIQSW_cjs.Packet.create(groups);
20588
+ return chunkYK6NP5KX_cjs.Packet.create(groups);
20497
20589
  }
20498
20590
  witnessBytes(ref) {
20499
- return chunk37XKN5DZ_cjs.witnessRefToBytes(ref, this.args, this.contract.args);
20591
+ return chunkOWTKOMJZ_cjs.witnessRefToBytes(ref, this.args, this.contract.args);
20500
20592
  }
20501
20593
  };
20502
20594
  function bindInputs(fn, callArgs) {
20503
- const names = (fn.def.inputs ?? []).map(chunk37XKN5DZ_cjs.inputName);
20595
+ const names = (fn.def.inputs ?? []).map(chunkOWTKOMJZ_cjs.inputName);
20504
20596
  if (callArgs.length !== names.length) {
20505
20597
  throw new Error(`${fn.name}: expected ${names.length} argument(s), got ${callArgs.length}`);
20506
20598
  }
@@ -20907,7 +20999,7 @@ function decodeArkContract(encoded) {
20907
20999
  }
20908
21000
  function contractFromArkContract(encoded, options = {}) {
20909
21001
  const parsed = decodeArkContract(encoded);
20910
- const handler = chunk37XKN5DZ_cjs.contractHandlers.get(parsed.type);
21002
+ const handler = chunkOWTKOMJZ_cjs.contractHandlers.get(parsed.type);
20911
21003
  if (!handler) {
20912
21004
  throw new Error(`No handler registered for contract type '${parsed.type}'`);
20913
21005
  }
@@ -20921,9 +21013,9 @@ function contractFromArkContract(encoded, options = {}) {
20921
21013
  metadata: options.metadata
20922
21014
  };
20923
21015
  }
20924
- function contractFromArkContractWithAddress(encoded, serverPubKey, addressPrefix = chunkCDWLZQQW_cjs.DEFAULT_NETWORK.hrp, options = {}) {
21016
+ function contractFromArkContractWithAddress(encoded, serverPubKey, addressPrefix = chunkKUN5ZRMW_cjs.DEFAULT_NETWORK.hrp, options = {}) {
20925
21017
  const parsed = decodeArkContract(encoded);
20926
- const handler = chunk37XKN5DZ_cjs.contractHandlers.getOrThrow(parsed.type);
21018
+ const handler = chunkOWTKOMJZ_cjs.contractHandlers.getOrThrow(parsed.type);
20927
21019
  const params = parsed.data;
20928
21020
  const vtxoScript = handler.createScript(params);
20929
21021
  return {
@@ -20956,6 +21048,8 @@ exports.ContractRepositoryImpl = ContractRepositoryImpl;
20956
21048
  exports.ContractWatcher = ContractWatcher;
20957
21049
  exports.DB_VERSION = DB_VERSION;
20958
21050
  exports.DEFAULT_MESSAGE_TIMEOUTS = DEFAULT_MESSAGE_TIMEOUTS;
21051
+ exports.DEFAULT_MIN_BATCH_EXPIRY_SECONDS = DEFAULT_MIN_BATCH_EXPIRY_SECONDS;
21052
+ exports.DEFAULT_MIN_CHECKPOINT_EXIT_DELAY_SECONDS = DEFAULT_MIN_CHECKPOINT_EXIT_DELAY_SECONDS;
20959
21053
  exports.DelegateManagerImpl = DelegateManagerImpl;
20960
21054
  exports.DelegateNotConfiguredError = DelegateNotConfiguredError;
20961
21055
  exports.DelegatorManagerImpl = DelegatorManagerImpl;
@@ -20993,6 +21087,8 @@ exports.MnemonicIdentity = MnemonicIdentity;
20993
21087
  exports.OnchainWallet = OnchainWallet;
20994
21088
  exports.P2A = P2A;
20995
21089
  exports.PaymentRouter = PaymentRouter;
21090
+ exports.REGTEST_MIN_BATCH_EXPIRY_SECONDS = REGTEST_MIN_BATCH_EXPIRY_SECONDS;
21091
+ exports.REGTEST_MIN_CHECKPOINT_EXIT_DELAY_SECONDS = REGTEST_MIN_CHECKPOINT_EXIT_DELAY_SECONDS;
20996
21092
  exports.Ramps = Ramps;
20997
21093
  exports.ReadonlyAssetManager = ReadonlyAssetManager;
20998
21094
  exports.ReadonlyDescriptorIdentity = ReadonlyDescriptorIdentity;
@@ -21025,6 +21121,8 @@ exports.assertFinalCommitmentMatchesValidated = assertFinalCommitmentMatchesVali
21025
21121
  exports.assertIntentIdUnique = assertIntentIdUnique;
21026
21122
  exports.assertSendableAmount = assertSendableAmount;
21027
21123
  exports.assertSubmittedArkTxid = assertSubmittedArkTxid;
21124
+ exports.assertValidBatchExpiry = assertValidBatchExpiry;
21125
+ exports.assertValidServerUnrollScript = assertValidServerUnrollScript;
21028
21126
  exports.assetMintResolver = assetMintResolver;
21029
21127
  exports.boardingResolver = boardingResolver;
21030
21128
  exports.btcTarget = btcTarget;
@@ -21042,6 +21140,8 @@ exports.createDefaultActivityRegistry = createDefaultActivityRegistry;
21042
21140
  exports.createDefaultPaymentRouter = createDefaultPaymentRouter;
21043
21141
  exports.createExitChainResolver = createExitChainResolver;
21044
21142
  exports.decodeArkContract = decodeArkContract;
21143
+ exports.defaultBatchExpiryPolicy = defaultBatchExpiryPolicy;
21144
+ exports.defaultCheckpointExitDelayPolicy = defaultCheckpointExitDelayPolicy;
21045
21145
  exports.deserializeAssets = deserializeAssets;
21046
21146
  exports.deserializeExitPackage = deserializeExitPackage;
21047
21147
  exports.deserializeUtxo = deserializeUtxo;
@@ -21078,6 +21178,8 @@ exports.migrateWalletRepository = migrateWalletRepository;
21078
21178
  exports.onchainRail = onchainRail;
21079
21179
  exports.openDatabase = openDatabase;
21080
21180
  exports.requiresMigration = requiresMigration;
21181
+ exports.resolveBatchExpiryPolicy = resolveBatchExpiryPolicy;
21182
+ exports.resolveCheckpointExitDelayPolicy = resolveCheckpointExitDelayPolicy;
21081
21183
  exports.resolveSendAmount = resolveSendAmount;
21082
21184
  exports.rollbackMigration = rollbackMigration;
21083
21185
  exports.saveVtxosForContract = saveVtxosForContract;
@@ -21098,5 +21200,5 @@ exports.validateVtxoTxGraph = validateVtxoTxGraph;
21098
21200
  exports.verifyTapscriptSignatures = verifyTapscriptSignatures;
21099
21201
  exports.waitForIncomingFunds = waitForIncomingFunds;
21100
21202
  exports.warnAndFilterVtxosForScript = warnAndFilterVtxosForScript;
21101
- //# sourceMappingURL=chunk-ENRRZFZ4.cjs.map
21102
- //# sourceMappingURL=chunk-ENRRZFZ4.cjs.map
21203
+ //# sourceMappingURL=chunk-KEG4AAKX.cjs.map
21204
+ //# sourceMappingURL=chunk-KEG4AAKX.cjs.map