@arkade-os/sdk 0.4.55 → 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-Do9Lqfsp.d.cts → ark-CJgH_pmn.d.cts} +25 -2
  8. package/dist/{ark-Do9Lqfsp.d.ts → ark-CJgH_pmn.d.ts} +25 -2
  9. package/dist/{asyncStorageTaskQueue-DOnBOEDn.d.ts → asyncStorageTaskQueue-BeeZbf-Q.d.ts} +2 -2
  10. package/dist/{asyncStorageTaskQueue-C3DYxvAT.d.cts → asyncStorageTaskQueue-BlrsUUX_.d.cts} +2 -2
  11. package/dist/{chunk-C6UYPHTQ.cjs → chunk-A7TOVUYG.cjs} +9 -9
  12. package/dist/{chunk-C6UYPHTQ.cjs.map → chunk-A7TOVUYG.cjs.map} +1 -1
  13. package/dist/{chunk-ENWR2F2P.js → chunk-ASUJNZ63.js} +3 -3
  14. package/dist/{chunk-ENWR2F2P.js.map → chunk-ASUJNZ63.js.map} +1 -1
  15. package/dist/{chunk-LAONNMM5.js → chunk-C4SVRVNM.js} +4 -4
  16. package/dist/{chunk-LAONNMM5.js.map → chunk-C4SVRVNM.js.map} +1 -1
  17. package/dist/{chunk-SG4X7SEC.js → chunk-CPS7V4A3.js} +4 -4
  18. package/dist/{chunk-SG4X7SEC.js.map → chunk-CPS7V4A3.js.map} +1 -1
  19. package/dist/{chunk-CSS74VCN.cjs → chunk-EZBKSWEL.cjs} +17 -17
  20. package/dist/{chunk-CSS74VCN.cjs.map → chunk-EZBKSWEL.cjs.map} +1 -1
  21. package/dist/{chunk-ZPL34T2Q.cjs → chunk-KEG4AAKX.cjs} +568 -413
  22. package/dist/chunk-KEG4AAKX.cjs.map +1 -0
  23. package/dist/{chunk-OWCPXRGP.cjs → chunk-KUN5ZRMW.cjs} +4 -3
  24. package/dist/chunk-KUN5ZRMW.cjs.map +1 -0
  25. package/dist/{chunk-QO3IKBYL.js → chunk-NIZPFPUM.js} +192 -49
  26. package/dist/chunk-NIZPFPUM.js.map +1 -0
  27. package/dist/{chunk-V2TOHHPW.cjs → chunk-OWTKOMJZ.cjs} +40 -40
  28. package/dist/{chunk-V2TOHHPW.cjs.map → chunk-OWTKOMJZ.cjs.map} +1 -1
  29. package/dist/{chunk-QMPNPZ2T.js → chunk-P6L2W5IL.js} +3 -3
  30. package/dist/{chunk-QMPNPZ2T.js.map → chunk-P6L2W5IL.js.map} +1 -1
  31. package/dist/{chunk-JCJ5WFS3.js → chunk-PUNBWFIV.js} +4 -3
  32. package/dist/chunk-PUNBWFIV.js.map +1 -0
  33. package/dist/{chunk-G7DOBFQN.cjs → chunk-YK6NP5KX.cjs} +15 -15
  34. package/dist/{chunk-G7DOBFQN.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-DmhFrtdq.d.ts → delegate-DM3YECSY.d.ts} +1 -1
  40. package/dist/{delegate-C0iIBxen.d.cts → delegate-Dk-OJVdf.d.cts} +1 -1
  41. package/dist/{index-BnLM1XxA.d.cts → index-Cig0RkTf.d.cts} +2 -2
  42. package/dist/{index-BNt4wcSh.d.ts → index-CnE7Gnvb.d.ts} +2 -2
  43. package/dist/index.cjs +259 -211
  44. package/dist/index.d.cts +43 -12
  45. package/dist/index.d.ts +43 -12
  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-RwUvgQ5M.d.cts → taskRunner-CnGSTaAJ.d.cts} +2 -2
  56. package/dist/{taskRunner-Bgs-0I3x.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-5Aou-V5n.d.ts → wallet-D6_S0n6B.d.ts} +124 -4
  66. package/dist/{wallet-Ck7BH8zR.d.cts → wallet-DvRIQBBY.d.cts} +124 -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-JCJ5WFS3.js.map +0 -1
  73. package/dist/chunk-OWCPXRGP.cjs.map +0 -1
  74. package/dist/chunk-QO3IKBYL.js.map +0 -1
  75. package/dist/chunk-ZPL34T2Q.cjs.map +0 -1
@@ -1,8 +1,8 @@
1
1
  'use strict';
2
2
 
3
- var chunkG7DOBFQN_cjs = require('./chunk-G7DOBFQN.cjs');
4
- var chunkV2TOHHPW_cjs = require('./chunk-V2TOHHPW.cjs');
5
- var chunkOWCPXRGP_cjs = require('./chunk-OWCPXRGP.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 = chunkOWCPXRGP_cjs.getArkPsbtFields(tx.root, 0, chunkOWCPXRGP_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 = chunkOWCPXRGP_cjs.getArkPsbtFields(g.root, 0, chunkOWCPXRGP_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 = chunkV2TOHHPW_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 chunkV2TOHHPW_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 = chunkV2TOHHPW_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 = chunkV2TOHHPW_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 chunkV2TOHHPW_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 chunkV2TOHHPW_cjs.deriveDescriptorLeafPubKey(this.descriptor);
854
+ return chunkOWTKOMJZ_cjs.deriveDescriptorLeafPubKey(this.descriptor);
855
855
  }
856
856
  async compressedPublicKey() {
857
- return chunkV2TOHHPW_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 chunkOWCPXRGP_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: chunkOWCPXRGP_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 chunkOWCPXRGP_cjs.rateGate.runHttp(url, () => chunkOWCPXRGP_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[chunkOWCPXRGP_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 chunkOWCPXRGP_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 chunkOWCPXRGP_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 chunkOWCPXRGP_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 chunkOWCPXRGP_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 chunkOWCPXRGP_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 chunkOWCPXRGP_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 chunkOWCPXRGP_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 chunkOWCPXRGP_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 chunkOWCPXRGP_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 chunkOWCPXRGP_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 chunkOWCPXRGP_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 = chunkOWCPXRGP_cjs.getArkPsbtFields(child.root, 0, chunkOWCPXRGP_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 chunkG7DOBFQN_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 chunkG7DOBFQN_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 chunkG7DOBFQN_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 chunkG7DOBFQN_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 chunkG7DOBFQN_cjs.Packet.PACKET_TYPE:
1858
- return chunkG7DOBFQN_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 chunkOWCPXRGP_cjs.ServerResponseMismatchError(`offchain send output not found: ${address}`);
1906
- var ErrInvalidAssetOutputAmount = (got, want, assetId) => new chunkOWCPXRGP_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 chunkOWCPXRGP_cjs.ServerResponseMismatchError(`asset group not found in batch leaf: ${assetId}`);
1910
- var ErrAssetOutputNotFound = (assetId, outputIndex) => new chunkOWCPXRGP_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 chunkOWCPXRGP_cjs.ServerResponseMismatchError(`onchain output not found: ${address}`);
1914
- var ErrUnvalidatedOffchainOutput = (address) => new chunkOWCPXRGP_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 chunkOWCPXRGP_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 = chunkOWCPXRGP_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
- chunkOWCPXRGP_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(chunkG7DOBFQN_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
- chunkG7DOBFQN_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
- chunkG7DOBFQN_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
- chunkG7DOBFQN_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 = chunkG7DOBFQN_cjs.AssetId.fromString(assetIdStr);
2252
- const group = chunkG7DOBFQN_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 chunkG7DOBFQN_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 = chunkOWCPXRGP_cjs.decodeTapscript(chunkOWCPXRGP_cjs.scriptFromTapLeafScript(input.tapLeafScript));
2361
- if (chunkOWCPXRGP_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 chunkOWCPXRGP_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: chunkOWCPXRGP_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
- chunkOWCPXRGP_cjs.setArkPsbtField(tx, i, chunkOWCPXRGP_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 = chunkOWCPXRGP_cjs.decodeTapscript(chunkOWCPXRGP_cjs.scriptFromTapLeafScript(vtxo.tapLeafScript));
2397
- const checkpointVtxoScript = new chunkOWCPXRGP_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
- chunkOWCPXRGP_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 chunkOWCPXRGP_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 = chunkOWCPXRGP_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 chunkOWCPXRGP_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 chunkOWCPXRGP_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 = chunkOWCPXRGP_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 chunkOWCPXRGP_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 chunkOWCPXRGP_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 chunkOWCPXRGP_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 chunkOWCPXRGP_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 chunkOWCPXRGP_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 = chunkV2TOHHPW_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,21 +2993,41 @@ function getRandomId() {
2916
2993
  }
2917
2994
  function isValidArkAddress2(address) {
2918
2995
  try {
2919
- chunkOWCPXRGP_cjs.ArkAddress.decode(address);
2996
+ chunkKUN5ZRMW_cjs.ArkAddress.decode(address);
2920
2997
  return true;
2921
2998
  } catch (e) {
2922
2999
  return false;
2923
3000
  }
2924
3001
  }
2925
- function validateRecipients(recipients, dustAmount) {
3002
+ function assertRecipientArkAddress(encoded, address, context) {
3003
+ if (address.hrp !== context.hrp) {
3004
+ throw new Error(
3005
+ `Invalid Arkade address ${encoded}: expected prefix "${context.hrp}", got "${address.hrp}"`
3006
+ );
3007
+ }
3008
+ const { status } = classifyAgainstSignerSet(
3009
+ base.hex.encode(address.serverPubKey),
3010
+ context.signerSet
3011
+ );
3012
+ if (status === "UNKNOWN_SIGNER") {
3013
+ throw new Error(`Invalid Arkade address ${encoded}: unknown operator signer key`);
3014
+ }
3015
+ if (status === "EXPIRED") {
3016
+ throw new Error(
3017
+ `Invalid Arkade address ${encoded}: operator signer key is past its rotation cutoff`
3018
+ );
3019
+ }
3020
+ }
3021
+ function validateRecipients(recipients, dustAmount, context) {
2926
3022
  const validatedRecipients = [];
2927
3023
  for (const recipient of recipients) {
2928
3024
  let address;
2929
3025
  try {
2930
- address = chunkOWCPXRGP_cjs.ArkAddress.decode(recipient.address);
3026
+ address = chunkKUN5ZRMW_cjs.ArkAddress.decode(recipient.address);
2931
3027
  } catch (e) {
2932
3028
  throw new Error(`Invalid Arkade address: ${recipient.address}`);
2933
3029
  }
3030
+ assertRecipientArkAddress(recipient.address, address, context);
2934
3031
  const amount = recipient.amount || dustAmount;
2935
3032
  if (amount <= 0) {
2936
3033
  throw new Error("Amount must be positive");
@@ -2955,7 +3052,7 @@ function selectPendingRecoveryOutpoints(contractsWithVtxos, signerSet, nowSecond
2955
3052
  continue;
2956
3053
  }
2957
3054
  for (const v of vtxos) {
2958
- if (!chunkOWCPXRGP_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}`);
2959
3056
  }
2960
3057
  }
2961
3058
  return out;
@@ -2988,10 +3085,10 @@ function byValueDescending(vtxos) {
2988
3085
  return [...vtxos].sort((a, b) => b.value - a.value);
2989
3086
  }
2990
3087
  async function fetchTimeHeight(wallet) {
2991
- return chunkOWCPXRGP_cjs.resolveTimeHeight(wallet.onchainProvider);
3088
+ return chunkKUN5ZRMW_cjs.resolveTimeHeight(wallet.onchainProvider);
2992
3089
  }
2993
3090
  function canMigrateBySend(vtxo, now) {
2994
- if (!chunkOWCPXRGP_cjs.canSpendOffchain(vtxo, now)) return false;
3091
+ if (!chunkKUN5ZRMW_cjs.canSpendOffchain(vtxo, now)) return false;
2995
3092
  return vtxo.expiresAt !== void 0 || vtxo.expiresAtHeight !== void 0;
2996
3093
  }
2997
3094
  function byExpiryAscending(vtxos, now) {
@@ -2999,7 +3096,7 @@ function byExpiryAscending(vtxos, now) {
2999
3096
  if (vtxo.isSwept) return -Infinity;
3000
3097
  if (vtxo.expiresAt !== void 0) return vtxo.expiresAt.getTime();
3001
3098
  if (vtxo.expiresAtHeight !== void 0) {
3002
- return chunkOWCPXRGP_cjs.isPastExpiry(vtxo, now) ? -Infinity : Infinity;
3099
+ return chunkKUN5ZRMW_cjs.isPastExpiry(vtxo, now) ? -Infinity : Infinity;
3003
3100
  }
3004
3101
  return Infinity;
3005
3102
  };
@@ -3036,10 +3133,10 @@ var DEFAULT_SETTLEMENT_CONFIG = {
3036
3133
  };
3037
3134
  function getRecoverableVtxos(vtxos, dustAmount, now) {
3038
3135
  return vtxos.filter((vtxo) => {
3039
- if (chunkOWCPXRGP_cjs.canRecoverOnchain(vtxo, now)) {
3136
+ if (chunkKUN5ZRMW_cjs.canRecoverOnchain(vtxo, now)) {
3040
3137
  return true;
3041
3138
  }
3042
- if (chunkOWCPXRGP_cjs.canSpendOffchain(vtxo, now) && vtxo.isPreconfirmed && isSubdust(vtxo, dustAmount)) {
3139
+ if (chunkKUN5ZRMW_cjs.canSpendOffchain(vtxo, now) && vtxo.isPreconfirmed && isSubdust(vtxo, dustAmount)) {
3043
3140
  return true;
3044
3141
  }
3045
3142
  return false;
@@ -3070,7 +3167,7 @@ function getRecoverableWithSubdust(vtxos, dustAmount, now) {
3070
3167
  }
3071
3168
  function isVtxoExpiringSoon(vtxo, thresholdMs) {
3072
3169
  const realThresholdMs = thresholdMs <= 100 ? DEFAULT_THRESHOLD_MS : thresholdMs;
3073
- const expiresAt = chunkOWCPXRGP_cjs.normalizeVtxo(vtxo).expiresAt;
3170
+ const expiresAt = chunkKUN5ZRMW_cjs.normalizeVtxo(vtxo).expiresAt;
3074
3171
  if (expiresAt === void 0) return false;
3075
3172
  const now = Date.now();
3076
3173
  const batchExpiry = expiresAt.getTime();
@@ -3079,7 +3176,7 @@ function isVtxoExpiringSoon(vtxo, thresholdMs) {
3079
3176
  }
3080
3177
  function getExpiringAndRecoverableVtxos(vtxos, thresholdMs, dustAmount, now) {
3081
3178
  return vtxos.filter(
3082
- (vtxo) => isVtxoExpiringSoon(vtxo, thresholdMs) || chunkOWCPXRGP_cjs.canRecoverOnchain(vtxo, now) || isSubdust(vtxo, dustAmount)
3179
+ (vtxo) => isVtxoExpiringSoon(vtxo, thresholdMs) || chunkKUN5ZRMW_cjs.canRecoverOnchain(vtxo, now) || isSubdust(vtxo, dustAmount)
3083
3180
  );
3084
3181
  }
3085
3182
  function isMigrationCapable(wallet) {
@@ -3561,11 +3658,11 @@ var VtxoManager = class _VtxoManager {
3561
3658
  `Sweep not economical: output ${outputAmount} sats after ${fee} sats fee is below dust (${dustAmount} sats)`
3562
3659
  );
3563
3660
  }
3564
- const tx = new chunkOWCPXRGP_cjs.Transaction();
3661
+ const tx = new chunkKUN5ZRMW_cjs.Transaction();
3565
3662
  for (const utxo of expiredUtxos) {
3566
- const utxoScript = chunkOWCPXRGP_cjs.VtxoScript.decode(utxo.tapTree);
3663
+ const utxoScript = chunkKUN5ZRMW_cjs.VtxoScript.decode(utxo.tapTree);
3567
3664
  const utxoExitLeaf = utxoScript.leaves.find(
3568
- (leaf) => chunkOWCPXRGP_cjs.CSVMultisigTapscript.isScriptValid(chunkOWCPXRGP_cjs.scriptFromTapLeafScript(leaf)) === true
3665
+ (leaf) => chunkKUN5ZRMW_cjs.CSVMultisigTapscript.isScriptValid(chunkKUN5ZRMW_cjs.scriptFromTapLeafScript(leaf)) === true
3569
3666
  );
3570
3667
  if (!utxoExitLeaf) {
3571
3668
  throw new Error(
@@ -3580,7 +3677,7 @@ var VtxoManager = class _VtxoManager {
3580
3677
  amount: BigInt(utxo.value)
3581
3678
  },
3582
3679
  tapLeafScript: [utxoExitLeaf],
3583
- sequence: chunkOWCPXRGP_cjs.getSequence(utxoExitLeaf)
3680
+ sequence: chunkKUN5ZRMW_cjs.getSequence(utxoExitLeaf)
3584
3681
  });
3585
3682
  }
3586
3683
  tx.addOutputAddress(boardingAddress, outputAmount, this.getNetwork());
@@ -3814,8 +3911,8 @@ var VtxoManager = class _VtxoManager {
3814
3911
  if (!serverPubKey) continue;
3815
3912
  const cls = classifyAgainstSignerSet(serverPubKey, signerSet, nowSeconds);
3816
3913
  if (cls.status === "CURRENT") continue;
3817
- const recoverable = vtxos.filter((v) => v.isSwept && !chunkOWCPXRGP_cjs.hasTerminalSpend(v));
3818
- const spendable = vtxos.filter((v) => !chunkOWCPXRGP_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);
3819
3916
  const value = spendable.reduce((sum, v) => sum + v.value, 0);
3820
3917
  let recoverableCount = 0;
3821
3918
  let recoverableValue = 0;
@@ -3828,7 +3925,7 @@ var VtxoManager = class _VtxoManager {
3828
3925
  awaitingSweepCount = spendable.length;
3829
3926
  awaitingSweepValue = value;
3830
3927
  for (const v of spendable) {
3831
- const exp = chunkOWCPXRGP_cjs.toBatchExpiry(v);
3928
+ const exp = chunkKUN5ZRMW_cjs.toBatchExpiry(v);
3832
3929
  if (exp !== void 0 && (nextSweepEta === void 0 || exp < nextSweepEta)) {
3833
3930
  nextSweepEta = exp;
3834
3931
  }
@@ -4089,7 +4186,7 @@ var VtxoManager = class _VtxoManager {
4089
4186
  /** Decodes the boarding tapscript exit path to extract the CSV timelock. */
4090
4187
  getBoardingTimelock() {
4091
4188
  const wallet = this.getSweepWallet();
4092
- const exitScript = chunkOWCPXRGP_cjs.CSVMultisigTapscript.decode(
4189
+ const exitScript = chunkKUN5ZRMW_cjs.CSVMultisigTapscript.decode(
4093
4190
  base.hex.decode(wallet.boardingTapscript.exitScript)
4094
4191
  );
4095
4192
  return exitScript.params.timelock;
@@ -4220,8 +4317,8 @@ var VtxoManager = class _VtxoManager {
4220
4317
  * or doesn't carry the metadata.
4221
4318
  */
4222
4319
  extractSpentOutpoint(error) {
4223
- const ark = chunkOWCPXRGP_cjs.maybeArkError(error);
4224
- if (!chunkOWCPXRGP_cjs.isArkError(ark, chunkOWCPXRGP_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;
4225
4322
  const raw = ark.metadata?.vtxo_outpoint;
4226
4323
  if (typeof raw !== "string") return void 0;
4227
4324
  const [txid, voutStr] = raw.split(":");
@@ -4411,7 +4508,7 @@ var VtxoManager = class _VtxoManager {
4411
4508
  if (filteredVtxos.length >= MAX_VTXOS_PER_SETTLEMENT) {
4412
4509
  break;
4413
4510
  }
4414
- const inputFee = estimator.evalOffchainInput(chunkOWCPXRGP_cjs.toOffchainInputFeeParams(v));
4511
+ const inputFee = estimator.evalOffchainInput(chunkKUN5ZRMW_cjs.toOffchainInputFeeParams(v));
4415
4512
  if (inputFee.satoshis >= v.value) {
4416
4513
  continue;
4417
4514
  }
@@ -4431,7 +4528,7 @@ var VtxoManager = class _VtxoManager {
4431
4528
  const arkAddress = await this.wallet.getAddress();
4432
4529
  const outputFee = estimator.evalOffchainOutput({
4433
4530
  amount: totalAmount,
4434
- script: base.hex.encode(chunkOWCPXRGP_cjs.ArkAddress.decode(arkAddress).pkScript)
4531
+ script: base.hex.encode(chunkKUN5ZRMW_cjs.ArkAddress.decode(arkAddress).pkScript)
4435
4532
  });
4436
4533
  totalAmount -= BigInt(outputFee.satoshis);
4437
4534
  if (totalAmount < dustAmount) return;
@@ -4511,7 +4608,7 @@ var ArkNote = class _ArkNote {
4511
4608
  this.value = value;
4512
4609
  this.HRP = HRP;
4513
4610
  const preimageHash = utils_js.sha256(this.preimage);
4514
- this.vtxoScript = new chunkOWCPXRGP_cjs.VtxoScript([noteTapscript(preimageHash)]);
4611
+ this.vtxoScript = new chunkKUN5ZRMW_cjs.VtxoScript([noteTapscript(preimageHash)]);
4515
4612
  const leaf = this.vtxoScript.leaves[0];
4516
4613
  this.txid = base.hex.encode(new Uint8Array(preimageHash).reverse());
4517
4614
  this.tapTree = this.vtxoScript.encode();
@@ -4678,7 +4775,7 @@ var ArkadeCash = class _ArkadeCash {
4678
4775
  const privateKey = data.slice(1, 33);
4679
4776
  const serverPubKey = data.slice(33, 65);
4680
4777
  const sequence = new DataView(data.buffer, data.byteOffset + 65, 4).getUint32(0, false);
4681
- const csvTimelock = chunkOWCPXRGP_cjs.sequenceToTimelock(sequence);
4778
+ const csvTimelock = chunkKUN5ZRMW_cjs.sequenceToTimelock(sequence);
4682
4779
  return new _ArkadeCash(privateKey, serverPubKey, csvTimelock, decoded.prefix);
4683
4780
  }
4684
4781
  toString() {
@@ -4686,7 +4783,7 @@ var ArkadeCash = class _ArkadeCash {
4686
4783
  data[0] = _ArkadeCash.Version;
4687
4784
  data.set(this._privateKey, 1);
4688
4785
  data.set(this._serverPubKey, 33);
4689
- const sequence = chunkOWCPXRGP_cjs.timelockToSequence(this.csvTimelock);
4786
+ const sequence = chunkKUN5ZRMW_cjs.timelockToSequence(this.csvTimelock);
4690
4787
  new DataView(data.buffer, data.byteOffset + 65, 4).setUint32(0, sequence, false);
4691
4788
  const words = base.bech32m.toWords(data);
4692
4789
  return base.bech32m.encode(this.hrp, words, 1023);
@@ -4695,7 +4792,7 @@ var ArkadeCash = class _ArkadeCash {
4695
4792
  return SingleKey.fromPrivateKey(this._privateKey);
4696
4793
  }
4697
4794
  get vtxoScript() {
4698
- return new chunkV2TOHHPW_cjs.DefaultVtxo.Script({
4795
+ return new chunkOWTKOMJZ_cjs.DefaultVtxo.Script({
4699
4796
  pubKey: this._publicKey,
4700
4797
  serverPubKey: this._serverPubKey,
4701
4798
  csvTimelock: this.csvTimelock
@@ -4956,7 +5053,7 @@ async function captureExitBranch(params) {
4956
5053
  const nonCommitment = ordered.filter((c) => chainTxTypeToChainedExit(c.type) !== 1 /* Commitment */).map((c) => c.txid);
4957
5054
  if (nonCommitment.length > 0) {
4958
5055
  for (const psbt of await resolver.getVirtualTxs(nonCommitment)) {
4959
- psbtByTxid.set(chunkOWCPXRGP_cjs.Transaction.fromPSBT(base.base64.decode(psbt)).id, psbt);
5056
+ psbtByTxid.set(chunkKUN5ZRMW_cjs.Transaction.fromPSBT(base.base64.decode(psbt)).id, psbt);
4960
5057
  }
4961
5058
  }
4962
5059
  }
@@ -4999,10 +5096,10 @@ var IndexerExitDataSource = class {
4999
5096
  while (hasMore) {
5000
5097
  const { chain: page, page: meta } = await this.indexer.getVtxoChain(
5001
5098
  { txid: vtxo.txid, vout: vtxo.vout },
5002
- { pageIndex, pageSize: chunkOWCPXRGP_cjs.DEFAULT_PAGE_SIZE }
5099
+ { pageIndex, pageSize: chunkKUN5ZRMW_cjs.DEFAULT_PAGE_SIZE }
5003
5100
  );
5004
5101
  chain.push(...page);
5005
- hasMore = meta ? page.length === chunkOWCPXRGP_cjs.DEFAULT_PAGE_SIZE : false;
5102
+ hasMore = meta ? page.length === chunkKUN5ZRMW_cjs.DEFAULT_PAGE_SIZE : false;
5006
5103
  pageIndex++;
5007
5104
  }
5008
5105
  return chain;
@@ -5014,12 +5111,12 @@ var IndexerExitDataSource = class {
5014
5111
  while (hasMore) {
5015
5112
  const { txs, page } = await this.indexer.getVirtualTxs(txids, {
5016
5113
  pageIndex,
5017
- pageSize: chunkOWCPXRGP_cjs.DEFAULT_PAGE_SIZE
5114
+ pageSize: chunkKUN5ZRMW_cjs.DEFAULT_PAGE_SIZE
5018
5115
  });
5019
5116
  for (const psbt of txs) {
5020
- out.set(chunkOWCPXRGP_cjs.Transaction.fromPSBT(base.base64.decode(psbt)).id, psbt);
5117
+ out.set(chunkKUN5ZRMW_cjs.Transaction.fromPSBT(base.base64.decode(psbt)).id, psbt);
5021
5118
  }
5022
- hasMore = page ? txs.length === chunkOWCPXRGP_cjs.DEFAULT_PAGE_SIZE : false;
5119
+ hasMore = page ? txs.length === chunkKUN5ZRMW_cjs.DEFAULT_PAGE_SIZE : false;
5023
5120
  pageIndex++;
5024
5121
  }
5025
5122
  return out;
@@ -5040,7 +5137,7 @@ function chainedTxTypeToChainTxType(t) {
5040
5137
  }
5041
5138
  }
5042
5139
  function psbtInputTxids(psbtBase64) {
5043
- const tx = chunkOWCPXRGP_cjs.Transaction.fromPSBT(base.base64.decode(psbtBase64));
5140
+ const tx = chunkKUN5ZRMW_cjs.Transaction.fromPSBT(base.base64.decode(psbtBase64));
5044
5141
  const ids = [];
5045
5142
  for (let i = 0; i < tx.inputsLength; i++) {
5046
5143
  const txid = tx.getInput(i).txid;
@@ -5220,6 +5317,7 @@ function serializeArkInfoSnapshot(info, savedAt) {
5220
5317
  forfeitPubkey: info.forfeitPubkey,
5221
5318
  unilateralExitDelay: info.unilateralExitDelay.toString(),
5222
5319
  boardingExitDelay: info.boardingExitDelay.toString(),
5320
+ vtxoTreeExpiry: info.vtxoTreeExpiry?.toString(),
5223
5321
  sessionDuration: info.sessionDuration.toString(),
5224
5322
  dust: info.dust.toString(),
5225
5323
  fees: info.fees,
@@ -5269,6 +5367,7 @@ function hydrateArkInfo(snapshot) {
5269
5367
  sessionDuration: BigInt(a.sessionDuration),
5270
5368
  signerPubkey: a.signerPubkey,
5271
5369
  unilateralExitDelay: BigInt(a.unilateralExitDelay),
5370
+ vtxoTreeExpiry: a.vtxoTreeExpiry !== void 0 ? BigInt(a.vtxoTreeExpiry) : void 0,
5272
5371
  utxoMaxAmount: BigInt(a.utxoMaxAmount),
5273
5372
  utxoMinAmount: BigInt(a.utxoMinAmount),
5274
5373
  version: a.version,
@@ -5341,6 +5440,9 @@ function parseStoredArkInfoSnapshot(raw) {
5341
5440
  ]) {
5342
5441
  assertDecimalString(a[field], `arkInfo.${field}`);
5343
5442
  }
5443
+ if (a.vtxoTreeExpiry !== void 0) {
5444
+ assertDecimalString(a.vtxoTreeExpiry, "arkInfo.vtxoTreeExpiry");
5445
+ }
5344
5446
  assertFeeInfo(a.fees, "arkInfo.fees");
5345
5447
  if (!Array.isArray(a.deprecatedSigners)) {
5346
5448
  throw new MalformedArkInfoSnapshotError("arkInfo.deprecatedSigners must be an array");
@@ -5388,10 +5490,10 @@ async function resolveArkInfo(arkProvider, walletRepository) {
5388
5490
  try {
5389
5491
  info = await arkProvider.getInfo();
5390
5492
  } catch (err) {
5391
- if (!chunkOWCPXRGP_cjs.isRetryableProviderError(err)) throw err;
5493
+ if (!chunkKUN5ZRMW_cjs.isRetryableProviderError(err)) throw err;
5392
5494
  const snapshot = await loadArkInfoSnapshot(walletRepository);
5393
5495
  if (!snapshot) {
5394
- throw new chunkOWCPXRGP_cjs.ProviderUnavailableError(
5496
+ throw new chunkKUN5ZRMW_cjs.ProviderUnavailableError(
5395
5497
  "Arkade server info is unavailable and no cached snapshot exists",
5396
5498
  { cause: err }
5397
5499
  );
@@ -5774,7 +5876,7 @@ function collectArkTxidsNeedingCreatedAt(vtxos) {
5774
5876
  return [...txids];
5775
5877
  }
5776
5878
  async function buildTransactionHistory(vtxos, allBoardingTxs, commitmentsToIgnore, resolveTxCreatedAt) {
5777
- const fromOldestVtxo = vtxos.map(chunkOWCPXRGP_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());
5778
5880
  const txidsNeedingCreatedAt = resolveTxCreatedAt ? collectArkTxidsNeedingCreatedAt(fromOldestVtxo) : [];
5779
5881
  const resolvedCreatedAt = resolveTxCreatedAt && txidsNeedingCreatedAt.length > 0 ? await resolveTxCreatedAt(txidsNeedingCreatedAt) : /* @__PURE__ */ new Map();
5780
5882
  const unmatchedSettledBoardingTxs = allBoardingTxs.filter(isSettledBoardingReceive).sort((a, b) => a.createdAt - b.createdAt);
@@ -5938,7 +6040,7 @@ var AssetManager = class extends ReadonlyAssetManager {
5938
6040
  const virtualCoins = await this.wallet.getVtxos({
5939
6041
  withRecoverable: false
5940
6042
  });
5941
- const controlAssetRef = params.controlAssetId ? chunkG7DOBFQN_cjs.AssetRef.fromId(chunkG7DOBFQN_cjs.AssetId.fromString(params.controlAssetId)) : null;
6043
+ const controlAssetRef = params.controlAssetId ? chunkYK6NP5KX_cjs.AssetRef.fromId(chunkYK6NP5KX_cjs.AssetId.fromString(params.controlAssetId)) : null;
5942
6044
  const coinSelection = selectVirtualCoins(virtualCoins, Number(this.wallet.dustAmount));
5943
6045
  let totalBtcSelected = 0n;
5944
6046
  const assetChanges = /* @__PURE__ */ new Map();
@@ -5951,8 +6053,8 @@ var AssetManager = class extends ReadonlyAssetManager {
5951
6053
  }
5952
6054
  }
5953
6055
  const groups = [];
5954
- const issuedAssetOutput = chunkG7DOBFQN_cjs.AssetOutput.create(0, params.amount);
5955
- const issuedAssetGroup = chunkG7DOBFQN_cjs.AssetGroup.create(
6056
+ const issuedAssetOutput = chunkYK6NP5KX_cjs.AssetOutput.create(0, params.amount);
6057
+ const issuedAssetGroup = chunkYK6NP5KX_cjs.AssetGroup.create(
5956
6058
  null,
5957
6059
  controlAssetRef,
5958
6060
  [],
@@ -5967,28 +6069,28 @@ var AssetManager = class extends ReadonlyAssetManager {
5967
6069
  for (const [inputIndex, assets] of assetInputs) {
5968
6070
  for (const asset of assets) {
5969
6071
  if (asset.assetId !== assetId) continue;
5970
- changeInputs.push(chunkG7DOBFQN_cjs.AssetInput.create(inputIndex, asset.amount));
6072
+ changeInputs.push(chunkYK6NP5KX_cjs.AssetInput.create(inputIndex, asset.amount));
5971
6073
  }
5972
6074
  }
5973
6075
  groups.push(
5974
- chunkG7DOBFQN_cjs.AssetGroup.create(
5975
- chunkG7DOBFQN_cjs.AssetId.fromString(assetId),
6076
+ chunkYK6NP5KX_cjs.AssetGroup.create(
6077
+ chunkYK6NP5KX_cjs.AssetId.fromString(assetId),
5976
6078
  null,
5977
6079
  changeInputs,
5978
- [chunkG7DOBFQN_cjs.AssetOutput.create(0, amount)],
6080
+ [chunkYK6NP5KX_cjs.AssetOutput.create(0, amount)],
5979
6081
  []
5980
6082
  )
5981
6083
  );
5982
6084
  }
5983
6085
  }
5984
6086
  const address = await this.wallet.getAddress();
5985
- const outputAddress = chunkOWCPXRGP_cjs.ArkAddress.decode(address);
6087
+ const outputAddress = chunkKUN5ZRMW_cjs.ArkAddress.decode(address);
5986
6088
  const outputs = [
5987
6089
  {
5988
6090
  script: outputAddress.pkScript,
5989
6091
  amount: BigInt(totalBtcSelected)
5990
6092
  },
5991
- Extension.create([chunkG7DOBFQN_cjs.Packet.create(groups)]).txOut()
6093
+ Extension.create([chunkYK6NP5KX_cjs.Packet.create(groups)]).txOut()
5992
6094
  ];
5993
6095
  const { arkTxid } = await this.wallet.buildAndSubmitOffchainTx(
5994
6096
  coinSelection.inputs,
@@ -5996,7 +6098,7 @@ var AssetManager = class extends ReadonlyAssetManager {
5996
6098
  );
5997
6099
  return {
5998
6100
  arkTxId: arkTxid,
5999
- assetId: chunkG7DOBFQN_cjs.AssetId.create(arkTxid, 0).toString()
6101
+ assetId: chunkYK6NP5KX_cjs.AssetId.create(arkTxid, 0).toString()
6000
6102
  };
6001
6103
  }
6002
6104
  /**
@@ -6068,16 +6170,16 @@ var AssetManager = class extends ReadonlyAssetManager {
6068
6170
  for (const [inputIndex, assets] of assetInputs) {
6069
6171
  for (const asset of assets) {
6070
6172
  if (asset.assetId !== params.assetId) continue;
6071
- reissueInputs.push(chunkG7DOBFQN_cjs.AssetInput.create(inputIndex, asset.amount));
6173
+ reissueInputs.push(chunkYK6NP5KX_cjs.AssetInput.create(inputIndex, asset.amount));
6072
6174
  }
6073
6175
  }
6074
6176
  const totalAssetAmount = assetToReissueAmount + params.amount;
6075
- const reissueAssetIdObj = chunkG7DOBFQN_cjs.AssetId.fromString(params.assetId);
6076
- const reissueAssetGroup = chunkG7DOBFQN_cjs.AssetGroup.create(
6177
+ const reissueAssetIdObj = chunkYK6NP5KX_cjs.AssetId.fromString(params.assetId);
6178
+ const reissueAssetGroup = chunkYK6NP5KX_cjs.AssetGroup.create(
6077
6179
  reissueAssetIdObj,
6078
6180
  null,
6079
6181
  reissueInputs,
6080
- [chunkG7DOBFQN_cjs.AssetOutput.create(0, totalAssetAmount)],
6182
+ [chunkYK6NP5KX_cjs.AssetOutput.create(0, totalAssetAmount)],
6081
6183
  []
6082
6184
  );
6083
6185
  const groups = [reissueAssetGroup];
@@ -6086,27 +6188,27 @@ var AssetManager = class extends ReadonlyAssetManager {
6086
6188
  for (const [inputIndex, assets] of assetInputs) {
6087
6189
  for (const asset of assets) {
6088
6190
  if (asset.assetId !== assetId) continue;
6089
- changeInputs.push(chunkG7DOBFQN_cjs.AssetInput.create(inputIndex, asset.amount));
6191
+ changeInputs.push(chunkYK6NP5KX_cjs.AssetInput.create(inputIndex, asset.amount));
6090
6192
  }
6091
6193
  }
6092
6194
  groups.push(
6093
- chunkG7DOBFQN_cjs.AssetGroup.create(
6094
- chunkG7DOBFQN_cjs.AssetId.fromString(assetId),
6195
+ chunkYK6NP5KX_cjs.AssetGroup.create(
6196
+ chunkYK6NP5KX_cjs.AssetId.fromString(assetId),
6095
6197
  null,
6096
6198
  changeInputs,
6097
- [chunkG7DOBFQN_cjs.AssetOutput.create(0, amount)],
6199
+ [chunkYK6NP5KX_cjs.AssetOutput.create(0, amount)],
6098
6200
  []
6099
6201
  )
6100
6202
  );
6101
6203
  }
6102
6204
  const address = await this.wallet.getAddress();
6103
- const outputAddress = chunkOWCPXRGP_cjs.ArkAddress.decode(address);
6205
+ const outputAddress = chunkKUN5ZRMW_cjs.ArkAddress.decode(address);
6104
6206
  const outputs = [
6105
6207
  {
6106
6208
  script: outputAddress.pkScript,
6107
6209
  amount: BigInt(totalBtcSelected)
6108
6210
  },
6109
- Extension.create([chunkG7DOBFQN_cjs.Packet.create(groups)]).txOut()
6211
+ Extension.create([chunkYK6NP5KX_cjs.Packet.create(groups)]).txOut()
6110
6212
  ];
6111
6213
  const { arkTxid } = await this.wallet.buildAndSubmitOffchainTx(selectedCoins, outputs);
6112
6214
  return arkTxid;
@@ -6173,27 +6275,27 @@ var AssetManager = class extends ReadonlyAssetManager {
6173
6275
  for (const [inputIndex, assets] of assetInputs) {
6174
6276
  for (const asset of assets) {
6175
6277
  if (asset.assetId !== assetId) continue;
6176
- changeInputs.push(chunkG7DOBFQN_cjs.AssetInput.create(inputIndex, asset.amount));
6278
+ changeInputs.push(chunkYK6NP5KX_cjs.AssetInput.create(inputIndex, asset.amount));
6177
6279
  }
6178
6280
  }
6179
6281
  groups.push(
6180
- chunkG7DOBFQN_cjs.AssetGroup.create(
6181
- chunkG7DOBFQN_cjs.AssetId.fromString(assetId),
6282
+ chunkYK6NP5KX_cjs.AssetGroup.create(
6283
+ chunkYK6NP5KX_cjs.AssetId.fromString(assetId),
6182
6284
  null,
6183
6285
  changeInputs,
6184
- amount > 0n ? [chunkG7DOBFQN_cjs.AssetOutput.create(0, amount)] : [],
6286
+ amount > 0n ? [chunkYK6NP5KX_cjs.AssetOutput.create(0, amount)] : [],
6185
6287
  []
6186
6288
  )
6187
6289
  );
6188
6290
  }
6189
6291
  const address = await this.wallet.getAddress();
6190
- const outputAddress = chunkOWCPXRGP_cjs.ArkAddress.decode(address);
6292
+ const outputAddress = chunkKUN5ZRMW_cjs.ArkAddress.decode(address);
6191
6293
  const outputs = [
6192
6294
  {
6193
6295
  script: outputAddress.pkScript,
6194
6296
  amount: BigInt(totalBtcSelected)
6195
6297
  },
6196
- Extension.create([chunkG7DOBFQN_cjs.Packet.create(groups)]).txOut()
6298
+ Extension.create([chunkYK6NP5KX_cjs.Packet.create(groups)]).txOut()
6197
6299
  ];
6198
6300
  const { arkTxid } = await this.wallet.buildAndSubmitOffchainTx(selectedCoins, outputs);
6199
6301
  return arkTxid;
@@ -6218,7 +6320,7 @@ function castMetadata(metadata) {
6218
6320
  } else {
6219
6321
  throw new Error("Invalid metadata value type");
6220
6322
  }
6221
- md.push(chunkG7DOBFQN_cjs.Metadata.create(textEncoder.encode(key), valueBytes));
6323
+ md.push(chunkYK6NP5KX_cjs.Metadata.create(textEncoder.encode(key), valueBytes));
6222
6324
  }
6223
6325
  return md;
6224
6326
  }
@@ -6239,10 +6341,10 @@ var DelegateManagerImpl = class {
6239
6341
  if (vtxos.length === 0) {
6240
6342
  return { delegated: [], failed: [] };
6241
6343
  }
6242
- const destinationScript = chunkOWCPXRGP_cjs.ArkAddress.decode(destination).pkScript;
6344
+ const destinationScript = chunkKUN5ZRMW_cjs.ArkAddress.decode(destination).pkScript;
6243
6345
  const arkInfo = await this.arkInfoProvider.getInfo();
6244
6346
  const delegateInfo = await this.delegateProvider.getDelegateInfo();
6245
- const eligible = vtxos.map(chunkOWCPXRGP_cjs.normalizeVtxo).filter(
6347
+ const eligible = vtxos.map(chunkKUN5ZRMW_cjs.normalizeVtxo).filter(
6246
6348
  (v) => isAnnotated(v) && findDelegateTapLeaf(v, delegateInfo.pubkey) !== void 0
6247
6349
  );
6248
6350
  if (eligible.length === 0) {
@@ -6271,11 +6373,11 @@ var DelegateManagerImpl = class {
6271
6373
  const groupByExpiry = /* @__PURE__ */ new Map();
6272
6374
  let recoverableVtxos = [];
6273
6375
  for (const vtxo of eligible) {
6274
- if (chunkOWCPXRGP_cjs.canRecoverOnchain(vtxo, now)) {
6376
+ if (chunkKUN5ZRMW_cjs.canRecoverOnchain(vtxo, now)) {
6275
6377
  recoverableVtxos.push(vtxo);
6276
6378
  continue;
6277
6379
  }
6278
- const expiry = chunkOWCPXRGP_cjs.toBatchExpiry(vtxo);
6380
+ const expiry = chunkKUN5ZRMW_cjs.toBatchExpiry(vtxo);
6279
6381
  if (!expiry) continue;
6280
6382
  const dayKey = getDayTimestamp(expiry);
6281
6383
  groupByExpiry.set(dayKey, [...groupByExpiry.get(dayKey) ?? [], vtxo]);
@@ -6340,7 +6442,7 @@ async function delegate(identity, delegateProvider, arkInfo, delegateInfo, vtxos
6340
6442
  }
6341
6443
  if (!delegateAt) {
6342
6444
  const now = { timestamp: /* @__PURE__ */ new Date() };
6343
- const expiryTimestamp = vtxos.filter((coin) => !chunkOWCPXRGP_cjs.canRecoverOnchain(coin, now) && chunkOWCPXRGP_cjs.toBatchExpiry(coin)).reduce((min, coin) => Math.min(min, chunkOWCPXRGP_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);
6344
6446
  if (!expiryTimestamp || expiryTimestamp === Number.MAX_SAFE_INTEGER) {
6345
6447
  delegateAt = new Date(Date.now() + 1 * 60 * 1e3);
6346
6448
  } else {
@@ -6369,7 +6471,7 @@ async function delegate(identity, delegateProvider, arkInfo, delegateInfo, vtxos
6369
6471
  let amount = 0n;
6370
6472
  for (const coin of vtxos) {
6371
6473
  const inputFee = estimator.evalOffchainInput({
6372
- ...chunkOWCPXRGP_cjs.toOffchainInputFeeParams(coin),
6474
+ ...chunkKUN5ZRMW_cjs.toOffchainInputFeeParams(coin),
6373
6475
  type: "vtxo"
6374
6476
  });
6375
6477
  if (inputFee.value >= coin.value) {
@@ -6383,7 +6485,7 @@ async function delegate(identity, delegateProvider, arkInfo, delegateInfo, vtxos
6383
6485
  const delegateFee = BigInt(Number(fee));
6384
6486
  if (delegateFee > 0n) {
6385
6487
  outputs.push({
6386
- script: chunkOWCPXRGP_cjs.ArkAddress.decode(delegateAddress).pkScript,
6488
+ script: chunkKUN5ZRMW_cjs.ArkAddress.decode(delegateAddress).pkScript,
6387
6489
  amount: delegateFee
6388
6490
  });
6389
6491
  }
@@ -6416,10 +6518,10 @@ async function delegate(identity, delegateProvider, arkInfo, delegateInfo, vtxos
6416
6518
  destinationScript
6417
6519
  );
6418
6520
  const forfeitOutputScript = btcSigner.OutScript.encode(
6419
- btcSigner.Address(chunkOWCPXRGP_cjs.getNetwork(network)).decode(forfeitAddress)
6521
+ btcSigner.Address(chunkKUN5ZRMW_cjs.getNetwork(network)).decode(forfeitAddress)
6420
6522
  );
6421
6523
  const forfeits = await Promise.all(
6422
- vtxos.filter((v) => !chunkOWCPXRGP_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) => {
6423
6525
  const forfeit = await makeDelegateForfeitTx(
6424
6526
  coin,
6425
6527
  dust,
@@ -6444,7 +6546,7 @@ async function makeDelegateForfeitTx(input, connectorAmount, delegatePubkey, for
6444
6546
  index: input.vout,
6445
6547
  witnessUtxo: {
6446
6548
  amount: BigInt(input.value),
6447
- script: chunkOWCPXRGP_cjs.VtxoScript.decode(input.tapTree).pkScript
6549
+ script: chunkKUN5ZRMW_cjs.VtxoScript.decode(input.tapTree).pkScript
6448
6550
  },
6449
6551
  sighashType: btcSigner.SigHash.ALL_ANYONECANPAY,
6450
6552
  tapLeafScript: [delegateTapLeaf]
@@ -6502,7 +6604,7 @@ async function makeSignedDelegateIntent(identity, coins, outputs, onchainOutputs
6502
6604
  expire_at: 0,
6503
6605
  cosigners_public_keys: cosignerPubKeys
6504
6606
  };
6505
- const proof = chunkOWCPXRGP_cjs.Intent.create(message, coins, outputs);
6607
+ const proof = chunkKUN5ZRMW_cjs.Intent.create(message, coins, outputs);
6506
6608
  const signedProof = await identity.sign(proof);
6507
6609
  return {
6508
6610
  proof: base.base64.encode(signedProof.toPSBT()),
@@ -6520,10 +6622,10 @@ function getDayTimestamp(timestamp) {
6520
6622
  function findDelegateTapLeaf(vtxo, delegatePubkey) {
6521
6623
  if (!vtxo.tapTree) return void 0;
6522
6624
  const pk = delegatePubkey.length === 66 ? delegatePubkey.slice(2) : delegatePubkey;
6523
- const vtxoScript = chunkOWCPXRGP_cjs.VtxoScript.decode(vtxo.tapTree);
6625
+ const vtxoScript = chunkKUN5ZRMW_cjs.VtxoScript.decode(vtxo.tapTree);
6524
6626
  return vtxoScript.leaves.find((tapLeaf) => {
6525
- const arkTapscript = chunkOWCPXRGP_cjs.decodeTapscript(chunkOWCPXRGP_cjs.scriptFromTapLeafScript(tapLeaf));
6526
- if (!chunkOWCPXRGP_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;
6527
6629
  return arkTapscript.params.pubkeys.map(base.hex.encode).includes(pk);
6528
6630
  });
6529
6631
  }
@@ -6711,7 +6813,7 @@ async function closeDatabase(dbName) {
6711
6813
  return true;
6712
6814
  }
6713
6815
  function scriptFromArkAddress(address) {
6714
- return base.hex.encode(chunkOWCPXRGP_cjs.ArkAddress.decode(address).pkScript);
6816
+ return base.hex.encode(chunkKUN5ZRMW_cjs.ArkAddress.decode(address).pkScript);
6715
6817
  }
6716
6818
 
6717
6819
  // src/repositories/indexedDB/schema.ts
@@ -7208,7 +7310,7 @@ function validateVtxosForScript(vtxos, script, context) {
7208
7310
  }
7209
7311
  async function getVtxosForContract(repo, contract) {
7210
7312
  const vtxos = repo.getVtxosForScript ? await repo.getVtxosForScript(contract.script) : filterVtxosForScript(await repo.getVtxos(contract.address), contract.script);
7211
- return vtxos.map(chunkOWCPXRGP_cjs.normalizeVtxo);
7313
+ return vtxos.map(chunkKUN5ZRMW_cjs.normalizeVtxo);
7212
7314
  }
7213
7315
  async function saveVtxosForContract(repo, contract, vtxos) {
7214
7316
  if (repo.saveVtxosForScript) {
@@ -7412,7 +7514,7 @@ var deserializeTapLeaf = (t) => {
7412
7514
  const s = base.hex.decode(t.s);
7413
7515
  return [cb, s];
7414
7516
  };
7415
- var deserializeVtxo = (o) => chunkOWCPXRGP_cjs.normalizeVtxo({
7517
+ var deserializeVtxo = (o) => chunkKUN5ZRMW_cjs.normalizeVtxo({
7416
7518
  ...o,
7417
7519
  createdAt: new Date(o.createdAt),
7418
7520
  tapTree: base.hex.decode(o.tapTree),
@@ -8551,7 +8653,7 @@ var ContractWatcher = class {
8551
8653
  this.connectionState = "connected";
8552
8654
  this.reconnectAttempts = 0;
8553
8655
  this.listenLoop().catch((e) => {
8554
- if (chunkOWCPXRGP_cjs.isEventSourceError(e)) {
8656
+ if (chunkKUN5ZRMW_cjs.isEventSourceError(e)) {
8555
8657
  console.debug("ContractWatcher subscription disconnected; reconnecting");
8556
8658
  } else {
8557
8659
  console.error(e);
@@ -8780,14 +8882,14 @@ var ContractWatcher = class {
8780
8882
  const timestamp = Date.now();
8781
8883
  if (update.newVtxos?.length) {
8782
8884
  this.processSubscriptionVtxos(
8783
- update.newVtxos.map(chunkOWCPXRGP_cjs.normalizeVtxo),
8885
+ update.newVtxos.map(chunkKUN5ZRMW_cjs.normalizeVtxo),
8784
8886
  "vtxo_received",
8785
8887
  timestamp
8786
8888
  );
8787
8889
  }
8788
8890
  if (update.spentVtxos?.length) {
8789
8891
  this.processSubscriptionVtxos(
8790
- update.spentVtxos.map(chunkOWCPXRGP_cjs.normalizeVtxo),
8892
+ update.spentVtxos.map(chunkKUN5ZRMW_cjs.normalizeVtxo),
8791
8893
  "vtxo_spent",
8792
8894
  timestamp
8793
8895
  );
@@ -8920,7 +9022,7 @@ async function reconcileIntents(deps) {
8920
9022
  let vtxosByOutpoint = /* @__PURE__ */ new Map();
8921
9023
  if (outpoints.length > 0) {
8922
9024
  try {
8923
- const { vtxos } = await chunkOWCPXRGP_cjs.getNormalizedVtxos(deps.indexerProvider, { outpoints });
9025
+ const { vtxos } = await chunkKUN5ZRMW_cjs.getNormalizedVtxos(deps.indexerProvider, { outpoints });
8924
9026
  vtxosByOutpoint = new Map(vtxos.map((v) => [outpointKey(v), v]));
8925
9027
  } catch (e) {
8926
9028
  console.error("reconcileIntents: failed to fetch input VTXO state", e);
@@ -9040,7 +9142,7 @@ var ContractManager = class _ContractManager {
9040
9142
  await this.reconcileWatched();
9041
9143
  this.markSyncOnline();
9042
9144
  } catch (err) {
9043
- if (!chunkOWCPXRGP_cjs.isRetryableProviderError(err)) throw err;
9145
+ if (!chunkKUN5ZRMW_cjs.isRetryableProviderError(err)) throw err;
9044
9146
  this.markSyncDegraded(err);
9045
9147
  }
9046
9148
  this.initialized = true;
@@ -9152,7 +9254,7 @@ var ContractManager = class _ContractManager {
9152
9254
  const from = Math.max(0, watermark - lookAhead.size);
9153
9255
  const to = watermark + lookAhead.size;
9154
9256
  const deps = lookAhead.candidateDeps();
9155
- const handlers = chunkV2TOHHPW_cjs.contractHandlers.getRegisteredTypes().map((t) => chunkV2TOHHPW_cjs.contractHandlers.get(t)).filter(hasCandidates);
9257
+ const handlers = chunkOWTKOMJZ_cjs.contractHandlers.getRegisteredTypes().map((t) => chunkOWTKOMJZ_cjs.contractHandlers.get(t)).filter(hasCandidates);
9156
9258
  const band = /* @__PURE__ */ new Map();
9157
9259
  for (let index = from; index <= to; index++) {
9158
9260
  const descriptor = lookAhead.materialize(index);
@@ -9163,7 +9265,7 @@ var ContractManager = class _ContractManager {
9163
9265
  index,
9164
9266
  params: {
9165
9267
  ...candidate,
9166
- ...chunkV2TOHHPW_cjs.speculativeReceiveMetadata(descriptor)
9268
+ ...chunkOWTKOMJZ_cjs.speculativeReceiveMetadata(descriptor)
9167
9269
  }
9168
9270
  });
9169
9271
  }
@@ -9223,7 +9325,7 @@ var ContractManager = class _ContractManager {
9223
9325
  });
9224
9326
  for (const entry of pending) entry.catchUpPending = false;
9225
9327
  } catch (err) {
9226
- if (!chunkOWCPXRGP_cjs.isRetryableProviderError(err)) throw err;
9328
+ if (!chunkKUN5ZRMW_cjs.isRetryableProviderError(err)) throw err;
9227
9329
  this.markSyncDegraded(err);
9228
9330
  }
9229
9331
  }
@@ -9267,7 +9369,7 @@ var ContractManager = class _ContractManager {
9267
9369
  await this.fetchContractVxosFromIndexer([contract]);
9268
9370
  this.markSyncOnline();
9269
9371
  } catch (err) {
9270
- if (!chunkOWCPXRGP_cjs.isRetryableProviderError(err)) throw err;
9372
+ if (!chunkKUN5ZRMW_cjs.isRetryableProviderError(err)) throw err;
9271
9373
  this.markSyncDegraded(err);
9272
9374
  }
9273
9375
  await this.watcher.addContract(contract);
@@ -9304,7 +9406,7 @@ var ContractManager = class _ContractManager {
9304
9406
  return result;
9305
9407
  }
9306
9408
  async upsertContractRow(params) {
9307
- const handler = chunkV2TOHHPW_cjs.contractHandlers.get(params.type);
9409
+ const handler = chunkOWTKOMJZ_cjs.contractHandlers.get(params.type);
9308
9410
  if (!handler) {
9309
9411
  throw new Error(`No handler registered for contract type '${params.type}'`);
9310
9412
  }
@@ -9404,7 +9506,7 @@ var ContractManager = class _ContractManager {
9404
9506
  `scanContracts: batchSize must be a positive integer (got ${String(opts.batchSize)})`
9405
9507
  );
9406
9508
  }
9407
- const registered = chunkV2TOHHPW_cjs.contractHandlers.getRegisteredTypes().map((t) => chunkV2TOHHPW_cjs.contractHandlers.get(t)).filter(isDiscoverable);
9509
+ const registered = chunkOWTKOMJZ_cjs.contractHandlers.getRegisteredTypes().map((t) => chunkOWTKOMJZ_cjs.contractHandlers.get(t)).filter(isDiscoverable);
9408
9510
  const discoverables = [
9409
9511
  ...registered.filter((h) => h.type === "boarding"),
9410
9512
  ...registered.filter((h) => h.type !== "boarding")
@@ -9539,7 +9641,7 @@ var ContractManager = class _ContractManager {
9539
9641
  await this.syncContracts({ contracts, pageSize });
9540
9642
  this.markSyncOnline();
9541
9643
  } catch (err) {
9542
- if (!chunkOWCPXRGP_cjs.isRetryableProviderError(err)) throw err;
9644
+ if (!chunkKUN5ZRMW_cjs.isRetryableProviderError(err)) throw err;
9543
9645
  this.markSyncDegraded(err);
9544
9646
  }
9545
9647
  const vtxos = await this.getVtxosForContracts(contracts);
@@ -9560,7 +9662,7 @@ var ContractManager = class _ContractManager {
9560
9662
  }
9561
9663
  const tapscriptCache = /* @__PURE__ */ new Map();
9562
9664
  return vtxos.map(
9563
- (vtxo) => extendVirtualCoinForContract(chunkOWCPXRGP_cjs.normalizeVtxo(vtxo), byScript, tapscriptCache)
9665
+ (vtxo) => extendVirtualCoinForContract(chunkKUN5ZRMW_cjs.normalizeVtxo(vtxo), byScript, tapscriptCache)
9564
9666
  );
9565
9667
  }
9566
9668
  buildContractsDbFilter(filter) {
@@ -9645,7 +9747,7 @@ var ContractManager = class _ContractManager {
9645
9747
  const { contractScript, collaborative = true, walletPubKey, vtxo } = options;
9646
9748
  const [contract] = await this.getContracts({ script: contractScript });
9647
9749
  if (!contract) return [];
9648
- const handler = chunkV2TOHHPW_cjs.contractHandlers.get(contract.type);
9750
+ const handler = chunkOWTKOMJZ_cjs.contractHandlers.get(contract.type);
9649
9751
  if (!handler) return [];
9650
9752
  const script = handler.createScript(contract.params);
9651
9753
  const context = {
@@ -9665,7 +9767,7 @@ var ContractManager = class _ContractManager {
9665
9767
  const { contractScript, collaborative = true, walletPubKey } = options;
9666
9768
  const [contract] = await this.getContracts({ script: contractScript });
9667
9769
  if (!contract) return [];
9668
- const handler = chunkV2TOHHPW_cjs.contractHandlers.get(contract.type);
9770
+ const handler = chunkOWTKOMJZ_cjs.contractHandlers.get(contract.type);
9669
9771
  if (!handler) return [];
9670
9772
  const script = handler.createScript(contract.params);
9671
9773
  const context = {
@@ -9721,7 +9823,7 @@ var ContractManager = class _ContractManager {
9721
9823
  }
9722
9824
  async refreshOutpoints(outpoints) {
9723
9825
  if (outpoints.length === 0) return;
9724
- const { vtxos } = await chunkOWCPXRGP_cjs.getNormalizedVtxos(this.config.indexerProvider, {
9826
+ const { vtxos } = await chunkKUN5ZRMW_cjs.getNormalizedVtxos(this.config.indexerProvider, {
9725
9827
  outpoints
9726
9828
  });
9727
9829
  if (vtxos.length === 0) return;
@@ -9799,7 +9901,7 @@ var ContractManager = class _ContractManager {
9799
9901
  break;
9800
9902
  }
9801
9903
  } catch (err) {
9802
- if (!chunkOWCPXRGP_cjs.isRetryableProviderError(err)) throw err;
9904
+ if (!chunkKUN5ZRMW_cjs.isRetryableProviderError(err)) throw err;
9803
9905
  this.markSyncDegraded(err);
9804
9906
  }
9805
9907
  this.emitEvent(event);
@@ -9848,7 +9950,7 @@ var ContractManager = class _ContractManager {
9848
9950
  */
9849
9951
  async reconcilePendingFrontier(contracts) {
9850
9952
  const scriptToContract = new Map(contracts.map((c) => [c.script, c]));
9851
- const vtxos = await chunkOWCPXRGP_cjs.getAllNormalizedVtxos(
9953
+ const vtxos = await chunkKUN5ZRMW_cjs.getAllNormalizedVtxos(
9852
9954
  this.config.indexerProvider,
9853
9955
  contracts.map((c) => c.script),
9854
9956
  { pendingOnly: true }
@@ -9929,7 +10031,7 @@ var ContractManager = class _ContractManager {
9929
10031
  }
9930
10032
  return result;
9931
10033
  }
9932
- async fetchContractVtxosBulk(contracts, pageSize = chunkOWCPXRGP_cjs.DEFAULT_PAGE_SIZE, syncWindow) {
10034
+ async fetchContractVtxosBulk(contracts, pageSize = chunkKUN5ZRMW_cjs.DEFAULT_PAGE_SIZE, syncWindow) {
9933
10035
  if (contracts.length === 0) {
9934
10036
  return { vtxosByScript: /* @__PURE__ */ new Map(), promoted: /* @__PURE__ */ new Map() };
9935
10037
  }
@@ -9945,7 +10047,7 @@ var ContractManager = class _ContractManager {
9945
10047
  before: syncWindow.before
9946
10048
  }
9947
10049
  } : {};
9948
- const vtxos = await chunkOWCPXRGP_cjs.getAllNormalizedVtxos(
10050
+ const vtxos = await chunkKUN5ZRMW_cjs.getAllNormalizedVtxos(
9949
10051
  this.config.indexerProvider,
9950
10052
  contracts.map((c) => c.script),
9951
10053
  { ...windowOpts, pageSize }
@@ -10112,7 +10214,7 @@ var HDDescriptorProvider = class _HDDescriptorProvider {
10112
10214
  */
10113
10215
  materializeDescriptorAt(index) {
10114
10216
  const descriptor = this.identity.descriptor;
10115
- const network = chunkV2TOHHPW_cjs.isMainnetDescriptor(descriptor) ? descriptorsScure.networks.bitcoin : descriptorsScure.networks.testnet;
10217
+ const network = chunkOWTKOMJZ_cjs.isMainnetDescriptor(descriptor) ? descriptorsScure.networks.bitcoin : descriptorsScure.networks.testnet;
10116
10218
  const expansion = descriptorsScure.expand({ descriptor, network, index });
10117
10219
  const keyInfo = expansion.expansionMap?.["@0"];
10118
10220
  if (!keyInfo?.keyExpression) {
@@ -10256,7 +10358,7 @@ var WalletReceiveRotator = class _WalletReceiveRotator {
10256
10358
  const provider = await resolveDescriptorProvider(config, setup.walletRepository);
10257
10359
  if (!provider) return void 0;
10258
10360
  const allowSilentFallback = (config.walletMode ?? "auto") === "auto";
10259
- const expectedContractType = setup.offchainTapscript instanceof chunkV2TOHHPW_cjs.DelegateVtxo.Script ? "delegate" : "default";
10361
+ const expectedContractType = setup.offchainTapscript instanceof chunkOWTKOMJZ_cjs.DelegateVtxo.Script ? "delegate" : "default";
10260
10362
  const factoryOpts = {
10261
10363
  walletRepository: setup.walletRepository,
10262
10364
  contractRepository: setup.contractRepository,
@@ -10455,7 +10557,7 @@ var WalletReceiveRotator = class _WalletReceiveRotator {
10455
10557
  };
10456
10558
  function deriveLeafPubkey(descriptor) {
10457
10559
  try {
10458
- return chunkV2TOHHPW_cjs.deriveDescriptorLeafPubKey(descriptor);
10560
+ return chunkOWTKOMJZ_cjs.deriveDescriptorLeafPubKey(descriptor);
10459
10561
  } catch (e) {
10460
10562
  throw new NonRangeableDescriptorError(
10461
10563
  "Cannot derive leaf pubkey: descriptor is not a materialized, parsable tr(...) shape.",
@@ -10467,7 +10569,7 @@ function buildReceiveContract(current, descriptor, hrp, tagSource) {
10467
10569
  const pubKey = deriveLeafPubkey(descriptor);
10468
10570
  const tapscript = rebuildTapscript(current, pubKey);
10469
10571
  const serverPubKey = tapscript.options.serverPubKey;
10470
- const csvTimelock = chunkOWCPXRGP_cjs.timelockToSequence(tapscript.options.csvTimelock).toString();
10572
+ const csvTimelock = chunkKUN5ZRMW_cjs.timelockToSequence(tapscript.options.csvTimelock).toString();
10471
10573
  const base$1 = {
10472
10574
  script: base.hex.encode(tapscript.pkScript),
10473
10575
  address: tapscript.address(hrp, serverPubKey).encode(),
@@ -10478,11 +10580,11 @@ function buildReceiveContract(current, descriptor, hrp, tagSource) {
10478
10580
  // index-0 key. Without it, spends produce unsigned PSBTs that the
10479
10581
  // server rejects with `INVALID_PSBT_INPUT (5): missing tapscript spend sig`.
10480
10582
  metadata: {
10481
- ...{ source: chunkV2TOHHPW_cjs.WALLET_RECEIVE_SOURCE },
10583
+ ...{ source: chunkOWTKOMJZ_cjs.WALLET_RECEIVE_SOURCE },
10482
10584
  signingDescriptor: descriptor
10483
10585
  }
10484
10586
  };
10485
- const params = tapscript instanceof chunkV2TOHHPW_cjs.DelegateVtxo.Script ? {
10587
+ const params = tapscript instanceof chunkOWTKOMJZ_cjs.DelegateVtxo.Script ? {
10486
10588
  ...base$1,
10487
10589
  type: "delegate",
10488
10590
  params: {
@@ -10503,10 +10605,10 @@ function buildReceiveContract(current, descriptor, hrp, tagSource) {
10503
10605
  return { tapscript, params };
10504
10606
  }
10505
10607
  function rebuildTapscript(current, pubKey) {
10506
- if (current instanceof chunkV2TOHHPW_cjs.DelegateVtxo.Script) {
10507
- return new chunkV2TOHHPW_cjs.DelegateVtxo.Script({ ...current.options, pubKey });
10608
+ if (current instanceof chunkOWTKOMJZ_cjs.DelegateVtxo.Script) {
10609
+ return new chunkOWTKOMJZ_cjs.DelegateVtxo.Script({ ...current.options, pubKey });
10508
10610
  }
10509
- return new chunkV2TOHHPW_cjs.DefaultVtxo.Script({ ...current.options, pubKey });
10611
+ return new chunkOWTKOMJZ_cjs.DefaultVtxo.Script({ ...current.options, pubKey });
10510
10612
  }
10511
10613
  async function pickActiveReceive(contractRepository, serverPubKey, expectedType) {
10512
10614
  const candidates = await contractRepository.getContracts({
@@ -10515,7 +10617,7 @@ async function pickActiveReceive(contractRepository, serverPubKey, expectedType)
10515
10617
  });
10516
10618
  const serverPubKeyHex = base.hex.encode(serverPubKey);
10517
10619
  const matching = candidates.filter(
10518
- (c) => c.params.serverPubKey === serverPubKeyHex && c.metadata?.source === chunkV2TOHHPW_cjs.WALLET_RECEIVE_SOURCE
10620
+ (c) => c.params.serverPubKey === serverPubKeyHex && c.metadata?.source === chunkOWTKOMJZ_cjs.WALLET_RECEIVE_SOURCE
10519
10621
  ).sort((a, b) => {
10520
10622
  if (b.createdAt !== a.createdAt) return b.createdAt - a.createdAt;
10521
10623
  return signingDescriptorIndex(b.metadata?.signingDescriptor) - signingDescriptorIndex(a.metadata?.signingDescriptor);
@@ -10691,12 +10793,12 @@ var InputSignerRouter = class {
10691
10793
  };
10692
10794
 
10693
10795
  // src/wallet/wallet.ts
10694
- var getArkadeServerUrl = ({ arkServerUrl }) => arkServerUrl || chunkOWCPXRGP_cjs.DEFAULT_ARKADE_SERVER_URL;
10796
+ var getArkadeServerUrl = ({ arkServerUrl }) => arkServerUrl || chunkKUN5ZRMW_cjs.DEFAULT_ARKADE_SERVER_URL;
10695
10797
  function intentProofJobs(coins) {
10696
10798
  if (coins.length === 0) return [];
10697
10799
  const coinJobs = coins.map((coin, i) => ({
10698
10800
  index: i + 1,
10699
- lookupScript: chunkOWCPXRGP_cjs.VtxoScript.decode(coin.tapTree).pkScript
10801
+ lookupScript: chunkKUN5ZRMW_cjs.VtxoScript.decode(coin.tapTree).pkScript
10700
10802
  }));
10701
10803
  return [{ index: 0, lookupScript: coinJobs[0].lookupScript }, ...coinJobs];
10702
10804
  }
@@ -10721,7 +10823,7 @@ function dedupeTimelocks(timelocks) {
10721
10823
  const seen = /* @__PURE__ */ new Set();
10722
10824
  const deduped = [];
10723
10825
  for (const timelock of timelocks) {
10724
- const sequence = chunkOWCPXRGP_cjs.timelockToSequence(timelock).toString();
10826
+ const sequence = chunkKUN5ZRMW_cjs.timelockToSequence(timelock).toString();
10725
10827
  if (seen.has(sequence)) continue;
10726
10828
  seen.add(sequence);
10727
10829
  deduped.push(timelock);
@@ -10738,7 +10840,7 @@ async function resolveBoardingBootTapscript(contractRepository, serverPubKey, ba
10738
10840
  state: "active"
10739
10841
  });
10740
10842
  const newest = candidates.filter(
10741
- (c) => c.params.serverPubKey === serverPubKeyHex && c.metadata?.source === chunkV2TOHHPW_cjs.WALLET_RECEIVE_SOURCE
10843
+ (c) => c.params.serverPubKey === serverPubKeyHex && c.metadata?.source === chunkOWTKOMJZ_cjs.WALLET_RECEIVE_SOURCE
10742
10844
  ).sort((a, b) => {
10743
10845
  if (b.createdAt !== a.createdAt) return b.createdAt - a.createdAt;
10744
10846
  return signingDescriptorIndex(b.metadata?.signingDescriptor) - signingDescriptorIndex(a.metadata?.signingDescriptor);
@@ -10746,7 +10848,7 @@ async function resolveBoardingBootTapscript(contractRepository, serverPubKey, ba
10746
10848
  if (!newest?.params.pubKey) return baseline;
10747
10849
  try {
10748
10850
  const pubKey = base.hex.decode(newest.params.pubKey);
10749
- return new chunkV2TOHHPW_cjs.DefaultVtxo.Script({ ...baseline.options, pubKey });
10851
+ return new chunkOWTKOMJZ_cjs.DefaultVtxo.Script({ ...baseline.options, pubKey });
10750
10852
  } catch (e) {
10751
10853
  console.warn("Skipping malformed boarding contract at boot", newest.script, e);
10752
10854
  return baseline;
@@ -10996,6 +11098,20 @@ var ReadonlyWallet = class _ReadonlyWallet {
10996
11098
  ...this._deprecatedSigners.keys()
10997
11099
  ]);
10998
11100
  }
11101
+ /**
11102
+ * `serverPubKey` defaults to the live key; spend paths that snapshot it
11103
+ * against mid-flight rotation pass their snapshot, so the check reads from
11104
+ * one rotation epoch.
11105
+ */
11106
+ recipientAddressContext(serverPubKey = this._arkServerPublicKey) {
11107
+ return {
11108
+ hrp: this.network.hrp,
11109
+ signerSet: {
11110
+ active: toXOnlySignerHex(base.hex.encode(serverPubKey)),
11111
+ deprecated: this._deprecatedSigners
11112
+ }
11113
+ };
11114
+ }
10999
11115
  /**
11000
11116
  * Currently-active receive tapscript. Read-only from the outside;
11001
11117
  * mutated only via {@link Wallet.setOffchainTapscriptForRotation}
@@ -11066,7 +11182,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
11066
11182
  */
11067
11183
  static async setupWalletConfig(config, pubKey) {
11068
11184
  const arkadeServerUrl = getArkadeServerUrl(config);
11069
- const arkProvider = config.arkProvider || new chunkOWCPXRGP_cjs.RestArkProvider(arkadeServerUrl);
11185
+ const arkProvider = config.arkProvider || new chunkKUN5ZRMW_cjs.RestArkProvider(arkadeServerUrl);
11070
11186
  let indexerProvider = config.indexerProvider;
11071
11187
  if (!indexerProvider) {
11072
11188
  let indexerUrl = config.indexerUrl;
@@ -11083,7 +11199,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
11083
11199
  indexerUrl = arkadeServerUrl;
11084
11200
  }
11085
11201
  }
11086
- indexerProvider = new chunkG7DOBFQN_cjs.RestIndexerProvider(indexerUrl);
11202
+ indexerProvider = new chunkYK6NP5KX_cjs.RestIndexerProvider(indexerUrl);
11087
11203
  }
11088
11204
  const walletRepository = config.storage?.walletRepository ?? new IndexedDBWalletRepository();
11089
11205
  const contractRepository = config.storage?.contractRepository ?? new IndexedDBContractRepository();
@@ -11092,7 +11208,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
11092
11208
  source: serverInfoSource,
11093
11209
  lastOnlineAt: serverInfoLastOnlineAt
11094
11210
  } = await resolveArkInfo(arkProvider, walletRepository);
11095
- const network = chunkOWCPXRGP_cjs.getNetwork(info.network);
11211
+ const network = chunkKUN5ZRMW_cjs.getNetwork(info.network);
11096
11212
  if ("descriptor" in config.identity) {
11097
11213
  const descriptor = config.identity.descriptor;
11098
11214
  const identityIsMainnet = !descriptor.includes("tpub");
@@ -11139,11 +11255,11 @@ var ReadonlyWallet = class _ReadonlyWallet {
11139
11255
  serverPubKey,
11140
11256
  csvTimelock: exitTimelock
11141
11257
  };
11142
- const offchainTapscript = !delegatePubKey ? new chunkV2TOHHPW_cjs.DefaultVtxo.Script(offchainOptions) : new chunkV2TOHHPW_cjs.DelegateVtxo.Script({ ...offchainOptions, delegatePubKey });
11143
- const boardingTapscript = chunkV2TOHHPW_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({
11144
11260
  pubKey: base.hex.encode(pubKey),
11145
11261
  serverPubKey: base.hex.encode(serverPubKey),
11146
- csvTimelock: chunkOWCPXRGP_cjs.timelockToSequence(boardingTimelock).toString()
11262
+ csvTimelock: chunkKUN5ZRMW_cjs.timelockToSequence(boardingTimelock).toString()
11147
11263
  });
11148
11264
  return {
11149
11265
  arkProvider,
@@ -11249,19 +11365,19 @@ var ReadonlyWallet = class _ReadonlyWallet {
11249
11365
  let pendingRecovery = 0;
11250
11366
  const now = { timestamp: /* @__PURE__ */ new Date() };
11251
11367
  const settled = vtxos.filter(
11252
- (coin) => chunkOWCPXRGP_cjs.canSpendOffchain(coin, now) && !coin.isPreconfirmed && !isPendingRecovery(coin)
11368
+ (coin) => chunkKUN5ZRMW_cjs.canSpendOffchain(coin, now) && !coin.isPreconfirmed && !isPendingRecovery(coin)
11253
11369
  ).reduce((sum, coin) => sum + coin.value, 0);
11254
11370
  const preconfirmed = vtxos.filter(
11255
- (coin) => chunkOWCPXRGP_cjs.canSpendOffchain(coin, now) && coin.isPreconfirmed && !isPendingRecovery(coin)
11371
+ (coin) => chunkKUN5ZRMW_cjs.canSpendOffchain(coin, now) && coin.isPreconfirmed && !isPendingRecovery(coin)
11256
11372
  ).reduce((sum, coin) => sum + coin.value, 0);
11257
- const available = unlockedVtxos.filter((coin) => chunkOWCPXRGP_cjs.canSpendOffchain(coin, now) && !isPendingRecovery(coin)).reduce((sum, coin) => sum + coin.value, 0);
11258
- recoverable = vtxos.filter((coin) => chunkOWCPXRGP_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);
11259
11375
  pendingRecovery = vtxos.filter(isPendingRecovery).reduce((sum, coin) => sum + coin.value, 0);
11260
11376
  const totalBoarding = confirmed + unconfirmed;
11261
11377
  const totalOffchain = settled + preconfirmed + recoverable + pendingRecovery;
11262
11378
  const assetBalances = /* @__PURE__ */ new Map();
11263
11379
  for (const vtxo of vtxos) {
11264
- if (chunkOWCPXRGP_cjs.hasTerminalSpend(vtxo)) continue;
11380
+ if (chunkKUN5ZRMW_cjs.hasTerminalSpend(vtxo)) continue;
11265
11381
  if (vtxo.assets) {
11266
11382
  for (const a of vtxo.assets) {
11267
11383
  const current = assetBalances.get(a.assetId) ?? 0n;
@@ -11302,8 +11418,8 @@ var ReadonlyWallet = class _ReadonlyWallet {
11302
11418
  if (this._pendingSpendOutpoints.has(`${vtxo.txid}:${vtxo.vout}`)) {
11303
11419
  return false;
11304
11420
  }
11305
- if (!chunkOWCPXRGP_cjs.hasTerminalSpend(vtxo)) {
11306
- if (!f.withRecoverable && chunkOWCPXRGP_cjs.canRecoverOnchain(vtxo, now)) {
11421
+ if (!chunkKUN5ZRMW_cjs.hasTerminalSpend(vtxo)) {
11422
+ if (!f.withRecoverable && chunkKUN5ZRMW_cjs.canRecoverOnchain(vtxo, now)) {
11307
11423
  return false;
11308
11424
  }
11309
11425
  return true;
@@ -11336,7 +11452,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
11336
11452
  const response = await contractManager.getContractsWithVtxos();
11337
11453
  const allVtxos = response.flatMap((_) => _.vtxos);
11338
11454
  const { boardingTxs, commitmentsToIgnore } = await this.getBoardingTxs();
11339
- const resolveTxCreatedAt = (txids) => chunkOWCPXRGP_cjs.fetchVtxoCreatedAtByTxid(this.indexerProvider, txids);
11455
+ const resolveTxCreatedAt = (txids) => chunkKUN5ZRMW_cjs.fetchVtxoCreatedAtByTxid(this.indexerProvider, txids);
11340
11456
  return buildTransactionHistory(
11341
11457
  allVtxos,
11342
11458
  boardingTxs,
@@ -11430,7 +11546,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
11430
11546
  },
11431
11547
  isUnrolled: true,
11432
11548
  ...boardingFacts,
11433
- virtualStatus: chunkOWCPXRGP_cjs.toVirtualStatus(boardingFacts),
11549
+ virtualStatus: chunkKUN5ZRMW_cjs.toVirtualStatus(boardingFacts),
11434
11550
  spentBy: "",
11435
11551
  createdAt: tx.status.confirmed ? new Date(tx.status.block_time * 1e3) : /* @__PURE__ */ new Date(0),
11436
11552
  script: scriptHex
@@ -11486,9 +11602,9 @@ var ReadonlyWallet = class _ReadonlyWallet {
11486
11602
  async getBoardingTapscripts(allowedSigners) {
11487
11603
  const byScript = /* @__PURE__ */ new Map();
11488
11604
  const add = (s) => byScript.set(base.hex.encode(s.pkScript), s);
11489
- const boardingCsv = this.boardingTapscript.options.csvTimelock ?? chunkV2TOHHPW_cjs.DefaultVtxo.Script.DEFAULT_TIMELOCK;
11605
+ const boardingCsv = this.boardingTapscript.options.csvTimelock ?? chunkOWTKOMJZ_cjs.DefaultVtxo.Script.DEFAULT_TIMELOCK;
11490
11606
  add(
11491
- new chunkV2TOHHPW_cjs.DefaultVtxo.Script({
11607
+ new chunkOWTKOMJZ_cjs.DefaultVtxo.Script({
11492
11608
  pubKey: await this.identity.xOnlyPublicKey(),
11493
11609
  serverPubKey: this.boardingTapscript.options.serverPubKey,
11494
11610
  csvTimelock: boardingCsv
@@ -11503,7 +11619,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
11503
11619
  for (const c of boardingContracts) {
11504
11620
  if (!allowed.has(toXOnlySignerHex(c.params.serverPubKey))) continue;
11505
11621
  try {
11506
- add(chunkV2TOHHPW_cjs.BoardingContractHandler.createScript(c.params));
11622
+ add(chunkOWTKOMJZ_cjs.BoardingContractHandler.createScript(c.params));
11507
11623
  } catch (e) {
11508
11624
  console.warn("Skipping malformed boarding contract", c.script, e);
11509
11625
  }
@@ -11541,7 +11657,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
11541
11657
  // Per-row CSV delay decoded from THIS tapscript's exit leaf —
11542
11658
  // not the wallet's current boarding timelock, which a signer
11543
11659
  // rotation may have changed.
11544
- csvTimelock: chunkOWCPXRGP_cjs.CSVMultisigTapscript.decode(base.hex.decode(tapscript.exitScript)).params.timelock,
11660
+ csvTimelock: chunkKUN5ZRMW_cjs.CSVMultisigTapscript.decode(base.hex.decode(tapscript.exitScript)).params.timelock,
11545
11661
  coins: utxos
11546
11662
  });
11547
11663
  }
@@ -11674,7 +11790,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
11674
11790
  /** Fetch Arkade transaction ids that are still pending final settlement. */
11675
11791
  async fetchPendingTxs() {
11676
11792
  const scripts = await this.getWalletScripts();
11677
- const vtxos = await chunkOWCPXRGP_cjs.getAllNormalizedVtxos(this.indexerProvider, scripts);
11793
+ const vtxos = await chunkKUN5ZRMW_cjs.getAllNormalizedVtxos(this.indexerProvider, scripts);
11678
11794
  return vtxos.filter(
11679
11795
  (vtxo) => (vtxo.isSpent || vtxo.isPreconfirmed && !vtxo.isSwept) && vtxo.arkTxId !== void 0
11680
11796
  ).map((_) => _.arkTxId);
@@ -11705,7 +11821,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
11705
11821
  });
11706
11822
  for (const contract of contracts) {
11707
11823
  if (map.has(contract.script)) continue;
11708
- const handler = chunkV2TOHHPW_cjs.contractHandlers.get(contract.type);
11824
+ const handler = chunkOWTKOMJZ_cjs.contractHandlers.get(contract.type);
11709
11825
  if (handler) {
11710
11826
  const script = handler.createScript(contract.params);
11711
11827
  map.set(contract.script, script);
@@ -11808,7 +11924,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
11808
11924
  lookAhead: this.lookAheadConfig()
11809
11925
  });
11810
11926
  const baselinePubkey = await this.identity.xOnlyPublicKey();
11811
- const delegatePubKey = this.offchainTapscript instanceof chunkV2TOHHPW_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;
11812
11928
  const baselineSigners = [
11813
11929
  this.offchainTapscript.options.serverPubKey,
11814
11930
  ...[...this._deprecatedSigners.keys()].map((h) => base.hex.decode(h))
@@ -11816,8 +11932,8 @@ var ReadonlyWallet = class _ReadonlyWallet {
11816
11932
  const seenBaselineScripts = /* @__PURE__ */ new Set();
11817
11933
  for (const serverPubKey of baselineSigners) {
11818
11934
  for (const csvTimelock of this.walletContractTimelocks) {
11819
- const csvTimelockStr = chunkOWCPXRGP_cjs.timelockToSequence(csvTimelock).toString();
11820
- const defaultScript = new chunkV2TOHHPW_cjs.DefaultVtxo.Script({
11935
+ const csvTimelockStr = chunkKUN5ZRMW_cjs.timelockToSequence(csvTimelock).toString();
11936
+ const defaultScript = new chunkOWTKOMJZ_cjs.DefaultVtxo.Script({
11821
11937
  pubKey: baselinePubkey,
11822
11938
  serverPubKey,
11823
11939
  csvTimelock
@@ -11838,7 +11954,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
11838
11954
  });
11839
11955
  }
11840
11956
  if (delegatePubKey) {
11841
- const delegateScript = new chunkV2TOHHPW_cjs.DelegateVtxo.Script({
11957
+ const delegateScript = new chunkOWTKOMJZ_cjs.DelegateVtxo.Script({
11842
11958
  pubKey: baselinePubkey,
11843
11959
  serverPubKey,
11844
11960
  delegatePubKey,
@@ -11862,9 +11978,9 @@ var ReadonlyWallet = class _ReadonlyWallet {
11862
11978
  }
11863
11979
  }
11864
11980
  }
11865
- const boardingCsvTimelock = this.boardingTapscript.options.csvTimelock ?? chunkV2TOHHPW_cjs.DefaultVtxo.Script.DEFAULT_TIMELOCK;
11981
+ const boardingCsvTimelock = this.boardingTapscript.options.csvTimelock ?? chunkOWTKOMJZ_cjs.DefaultVtxo.Script.DEFAULT_TIMELOCK;
11866
11982
  for (const serverPubKey of baselineSigners) {
11867
- const baselineBoarding = new chunkV2TOHHPW_cjs.DefaultVtxo.Script({
11983
+ const baselineBoarding = new chunkOWTKOMJZ_cjs.DefaultVtxo.Script({
11868
11984
  pubKey: baselinePubkey,
11869
11985
  serverPubKey,
11870
11986
  csvTimelock: boardingCsvTimelock
@@ -11877,7 +11993,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
11877
11993
  params: {
11878
11994
  pubKey: base.hex.encode(baselineBoarding.options.pubKey),
11879
11995
  serverPubKey: base.hex.encode(serverPubKey),
11880
- csvTimelock: chunkOWCPXRGP_cjs.timelockToSequence(boardingCsvTimelock).toString()
11996
+ csvTimelock: chunkKUN5ZRMW_cjs.timelockToSequence(boardingCsvTimelock).toString()
11881
11997
  },
11882
11998
  script: boardingScriptHex,
11883
11999
  address: baselineBoarding.address(this.network.hrp, serverPubKey).encode(),
@@ -11899,7 +12015,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
11899
12015
  }
11900
12016
  };
11901
12017
  var Wallet2 = class _Wallet extends ReadonlyWallet {
11902
- 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) {
11903
12019
  super(
11904
12020
  identity,
11905
12021
  network,
@@ -11918,6 +12034,8 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
11918
12034
  this.arkProvider = arkProvider;
11919
12035
  this.forfeitOutputScript = forfeitOutputScript;
11920
12036
  this.forfeitPubkey = forfeitPubkey;
12037
+ this.batchExpiryPolicy = batchExpiryPolicy;
12038
+ this.checkpointExitDelayPolicy = checkpointExitDelayPolicy;
11921
12039
  this.identity = identity;
11922
12040
  this.renewalConfig = {
11923
12041
  enabled: renewalConfig?.enabled ?? false,
@@ -11950,6 +12068,8 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
11950
12068
  arkProvider;
11951
12069
  forfeitOutputScript;
11952
12070
  forfeitPubkey;
12071
+ batchExpiryPolicy;
12072
+ checkpointExitDelayPolicy;
11953
12073
  static MIN_FEE_RATE = 1;
11954
12074
  // sats/vbyte
11955
12075
  identity;
@@ -12051,7 +12171,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
12051
12171
  serverPubKey: this.offchainTapscript.options.serverPubKey,
12052
12172
  deprecatedSignerPubKeys: [...this._deprecatedSigners.keys()].map((h) => base.hex.decode(h)),
12053
12173
  csvTimelocks: this.walletContractTimelocks,
12054
- delegatePubKey: this.offchainTapscript instanceof chunkV2TOHHPW_cjs.DelegateVtxo.Script ? this.offchainTapscript.options.delegatePubKey : void 0
12174
+ delegatePubKey: this.offchainTapscript instanceof chunkOWTKOMJZ_cjs.DelegateVtxo.Script ? this.offchainTapscript.options.delegatePubKey : void 0
12055
12175
  };
12056
12176
  }
12057
12177
  _signerRouter;
@@ -12143,25 +12263,25 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
12143
12263
  return this.getBoardingAddress();
12144
12264
  }
12145
12265
  const descriptor = await provider.getNextSigningDescriptor();
12146
- const pubKey = chunkV2TOHHPW_cjs.deriveDescriptorLeafPubKey(descriptor);
12147
- const newBoarding = new chunkV2TOHHPW_cjs.DefaultVtxo.Script({
12266
+ const pubKey = chunkOWTKOMJZ_cjs.deriveDescriptorLeafPubKey(descriptor);
12267
+ const newBoarding = new chunkOWTKOMJZ_cjs.DefaultVtxo.Script({
12148
12268
  ...this._boardingTapscript.options,
12149
12269
  pubKey
12150
12270
  });
12151
- const csvTimelock = newBoarding.options.csvTimelock ?? chunkV2TOHHPW_cjs.DefaultVtxo.Script.DEFAULT_TIMELOCK;
12271
+ const csvTimelock = newBoarding.options.csvTimelock ?? chunkOWTKOMJZ_cjs.DefaultVtxo.Script.DEFAULT_TIMELOCK;
12152
12272
  const manager = await this.getContractManager();
12153
12273
  await manager.createContract({
12154
12274
  type: "boarding",
12155
12275
  params: {
12156
12276
  pubKey: base.hex.encode(pubKey),
12157
12277
  serverPubKey: base.hex.encode(newBoarding.options.serverPubKey),
12158
- csvTimelock: chunkOWCPXRGP_cjs.timelockToSequence(csvTimelock).toString()
12278
+ csvTimelock: chunkKUN5ZRMW_cjs.timelockToSequence(csvTimelock).toString()
12159
12279
  },
12160
12280
  script: base.hex.encode(newBoarding.pkScript),
12161
12281
  address: newBoarding.address(this.network.hrp, this.arkServerPublicKey).encode(),
12162
12282
  state: "active",
12163
12283
  metadata: {
12164
- source: chunkV2TOHHPW_cjs.WALLET_RECEIVE_SOURCE,
12284
+ source: chunkOWTKOMJZ_cjs.WALLET_RECEIVE_SOURCE,
12165
12285
  signingDescriptor: descriptor
12166
12286
  }
12167
12287
  });
@@ -12248,12 +12368,10 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
12248
12368
  */
12249
12369
  async rotateServerSigner(newServerPubKey, checkpointTapscript) {
12250
12370
  const xonly = toXOnlyPubKey(newServerPubKey);
12251
- let newServerUnrollScript;
12252
- try {
12253
- newServerUnrollScript = chunkOWCPXRGP_cjs.CSVMultisigTapscript.decode(base.hex.decode(checkpointTapscript));
12254
- } catch (e) {
12255
- throw new Error("Invalid checkpointTapscript from server");
12256
- }
12371
+ const newServerUnrollScript = assertValidServerUnrollScript(
12372
+ checkpointTapscript,
12373
+ resolveCheckpointExitDelayPolicy(this.network, this.checkpointExitDelayPolicy)
12374
+ );
12257
12375
  if (utils_js.equalBytes(xonly, this.arkServerPublicKey)) return;
12258
12376
  if (this._receiveRotator) {
12259
12377
  await this._receiveRotator.runExclusive(
@@ -12278,21 +12396,21 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
12278
12396
  const [currentBoardingRow] = await manager.getContracts({
12279
12397
  script: currentBoardingScript
12280
12398
  });
12281
- const newOffchain = this.offchainTapscript instanceof chunkV2TOHHPW_cjs.DelegateVtxo.Script ? new chunkV2TOHHPW_cjs.DelegateVtxo.Script({
12399
+ const newOffchain = this.offchainTapscript instanceof chunkOWTKOMJZ_cjs.DelegateVtxo.Script ? new chunkOWTKOMJZ_cjs.DelegateVtxo.Script({
12282
12400
  ...this.offchainTapscript.options,
12283
12401
  serverPubKey: xonly
12284
- }) : new chunkV2TOHHPW_cjs.DefaultVtxo.Script({
12402
+ }) : new chunkOWTKOMJZ_cjs.DefaultVtxo.Script({
12285
12403
  ...this.offchainTapscript.options,
12286
12404
  serverPubKey: xonly
12287
12405
  });
12288
- const newBoarding = new chunkV2TOHHPW_cjs.DefaultVtxo.Script({
12406
+ const newBoarding = new chunkOWTKOMJZ_cjs.DefaultVtxo.Script({
12289
12407
  ...this._boardingTapscript.options,
12290
12408
  serverPubKey: xonly
12291
12409
  });
12292
- const offchainCsv = chunkOWCPXRGP_cjs.timelockToSequence(newOffchain.options.csvTimelock).toString();
12410
+ const offchainCsv = chunkKUN5ZRMW_cjs.timelockToSequence(newOffchain.options.csvTimelock).toString();
12293
12411
  const newOffchainScript = base.hex.encode(newOffchain.pkScript);
12294
12412
  const newOffchainAddress = newOffchain.address(this.network.hrp, xonly).encode();
12295
- if (newOffchain instanceof chunkV2TOHHPW_cjs.DelegateVtxo.Script) {
12413
+ if (newOffchain instanceof chunkOWTKOMJZ_cjs.DelegateVtxo.Script) {
12296
12414
  await manager.createContract({
12297
12415
  type: "delegate",
12298
12416
  params: {
@@ -12320,13 +12438,13 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
12320
12438
  metadata: currentOffchainRow?.metadata
12321
12439
  });
12322
12440
  }
12323
- const boardingCsv = newBoarding.options.csvTimelock ?? chunkV2TOHHPW_cjs.DefaultVtxo.Script.DEFAULT_TIMELOCK;
12441
+ const boardingCsv = newBoarding.options.csvTimelock ?? chunkOWTKOMJZ_cjs.DefaultVtxo.Script.DEFAULT_TIMELOCK;
12324
12442
  await manager.createContract({
12325
12443
  type: "boarding",
12326
12444
  params: {
12327
12445
  pubKey: base.hex.encode(newBoarding.options.pubKey),
12328
12446
  serverPubKey: base.hex.encode(xonly),
12329
- csvTimelock: chunkOWCPXRGP_cjs.timelockToSequence(boardingCsv).toString()
12447
+ csvTimelock: chunkKUN5ZRMW_cjs.timelockToSequence(boardingCsv).toString()
12330
12448
  },
12331
12449
  script: base.hex.encode(newBoarding.pkScript),
12332
12450
  address: newBoarding.address(this.network.hrp, xonly).encode(),
@@ -12359,14 +12477,14 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
12359
12477
  _restoreInFlight;
12360
12478
  _addPendingSpends(inputs) {
12361
12479
  for (const input of inputs) {
12362
- if (chunkOWCPXRGP_cjs.isVirtualCoin(input)) {
12480
+ if (chunkKUN5ZRMW_cjs.isVirtualCoin(input)) {
12363
12481
  this._pendingSpendOutpoints.add(`${input.txid}:${input.vout}`);
12364
12482
  }
12365
12483
  }
12366
12484
  }
12367
12485
  _removePendingSpends(inputs) {
12368
12486
  for (const input of inputs) {
12369
- if (chunkOWCPXRGP_cjs.isVirtualCoin(input)) {
12487
+ if (chunkKUN5ZRMW_cjs.isVirtualCoin(input)) {
12370
12488
  this._pendingSpendOutpoints.delete(`${input.txid}:${input.vout}`);
12371
12489
  }
12372
12490
  }
@@ -12426,7 +12544,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
12426
12544
  const hd = provider instanceof HDDescriptorProvider;
12427
12545
  const staticDescriptor = hd ? void 0 : `tr(${base.hex.encode(await this.identity.xOnlyPublicKey())})`;
12428
12546
  const materialize = (index) => hd ? provider.materializeDescriptorAt(index) : staticDescriptor;
12429
- const delegatePubKey = this.offchainTapscript instanceof chunkV2TOHHPW_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;
12430
12548
  const arkInfo = await this.arkProvider.getInfo();
12431
12549
  const currentSignerPubKey = toXOnlyPubKey(base.hex.decode(arkInfo.signerPubkey));
12432
12550
  const deprecatedSignerPubKeys = arkInfo.deprecatedSigners.map(
@@ -12445,7 +12563,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
12445
12563
  csvTimelocks: this.walletContractTimelocks,
12446
12564
  // Boarding-exit CSV so the boarding handler can build its
12447
12565
  // candidate script (distinct from the unilateral-exit matrix).
12448
- boardingTimelock: this.boardingTapscript.options.csvTimelock ?? chunkV2TOHHPW_cjs.DefaultVtxo.Script.DEFAULT_TIMELOCK,
12566
+ boardingTimelock: this.boardingTapscript.options.csvTimelock ?? chunkOWTKOMJZ_cjs.DefaultVtxo.Script.DEFAULT_TIMELOCK,
12449
12567
  delegatePubKey
12450
12568
  };
12451
12569
  const result = await manager.scanContracts({
@@ -12559,16 +12677,17 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
12559
12677
  throw new Error("Invalid configured public key");
12560
12678
  }
12561
12679
  const setup = await ReadonlyWallet.setupWalletConfig(config, pubkey);
12562
- let serverUnrollScript;
12563
- try {
12564
- const raw = base.hex.decode(setup.info.checkpointTapscript);
12565
- serverUnrollScript = chunkOWCPXRGP_cjs.CSVMultisigTapscript.decode(raw);
12566
- } catch (e) {
12567
- throw new Error("Invalid checkpointTapscript from server");
12568
- }
12569
12680
  const forfeitPubkey = base.hex.decode(setup.info.forfeitPubkey).slice(1);
12570
12681
  const forfeitAddress = btcSigner.Address(setup.network).decode(setup.info.forfeitAddress);
12571
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
+ );
12572
12691
  const boot = await WalletReceiveRotator.resolveBoot(config, setup);
12573
12692
  const wallet = new _Wallet(
12574
12693
  config.identity,
@@ -12592,7 +12711,13 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
12592
12711
  setup.walletContractTimelocks,
12593
12712
  boot?.rotator,
12594
12713
  boot?.provider,
12595
- 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
12596
12721
  );
12597
12722
  wallet._serverInfoSource = setup.serverInfoSource;
12598
12723
  if (setup.serverInfoSource === "live") {
@@ -12700,7 +12825,12 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
12700
12825
  inputs: params.selectedVtxos,
12701
12826
  changeAmount: BigInt(changeAmount)
12702
12827
  };
12703
- const outputAddress = chunkOWCPXRGP_cjs.ArkAddress.decode(params.address);
12828
+ const outputAddress = chunkKUN5ZRMW_cjs.ArkAddress.decode(params.address);
12829
+ assertRecipientArkAddress(
12830
+ params.address,
12831
+ outputAddress,
12832
+ this.recipientAddressContext(serverPubKey)
12833
+ );
12704
12834
  const outputScript = BigInt(params.amount) < this.dustAmount ? outputAddress.subdustPkScript : outputAddress.pkScript;
12705
12835
  const outputs = [
12706
12836
  {
@@ -12753,13 +12883,13 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
12753
12883
  }
12754
12884
  }
12755
12885
  const offchainAddress = await this.getAddress();
12756
- const offchainPkScript = chunkOWCPXRGP_cjs.ArkAddress.decode(offchainAddress).pkScript;
12886
+ const offchainPkScript = chunkKUN5ZRMW_cjs.ArkAddress.decode(offchainAddress).pkScript;
12757
12887
  const offchainOutputScript = base.hex.encode(offchainPkScript);
12758
12888
  if (!params) {
12759
12889
  const { fees, vtxoMaxAmount } = await this.arkProvider.getInfo();
12760
12890
  const estimator = new Estimator(fees.intentFee);
12761
12891
  let amount = 0;
12762
- const exitScript = chunkOWCPXRGP_cjs.CSVMultisigTapscript.decode(
12892
+ const exitScript = chunkKUN5ZRMW_cjs.CSVMultisigTapscript.decode(
12763
12893
  base.hex.decode(this.boardingTapscript.exitScript)
12764
12894
  );
12765
12895
  const boardingTimelock = exitScript.params.timelock;
@@ -12788,7 +12918,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
12788
12918
  if (filteredVtxos.length >= MAX_VTXOS_PER_SETTLEMENT) {
12789
12919
  break;
12790
12920
  }
12791
- const inputFee = estimator.evalOffchainInput(chunkOWCPXRGP_cjs.toOffchainInputFeeParams(vtxo));
12921
+ const inputFee = estimator.evalOffchainInput(chunkKUN5ZRMW_cjs.toOffchainInputFeeParams(vtxo));
12792
12922
  if (inputFee.satoshis >= vtxo.value) {
12793
12923
  continue;
12794
12924
  }
@@ -12830,13 +12960,21 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
12830
12960
  const onchainOutputIndexes = [];
12831
12961
  const outputs = [];
12832
12962
  let hasOffchainOutputs = false;
12963
+ let recipientContext;
12833
12964
  for (const [index, output] of params.outputs.entries()) {
12834
12965
  let script;
12966
+ let arkAddress;
12835
12967
  try {
12836
- const addr = chunkOWCPXRGP_cjs.ArkAddress.decode(output.address);
12837
- script = addr.pkScript;
12838
- hasOffchainOutputs = true;
12968
+ arkAddress = chunkKUN5ZRMW_cjs.ArkAddress.decode(output.address);
12839
12969
  } catch {
12970
+ arkAddress = void 0;
12971
+ }
12972
+ if (arkAddress) {
12973
+ recipientContext ??= this.recipientAddressContext();
12974
+ assertRecipientArkAddress(output.address, arkAddress, recipientContext);
12975
+ script = arkAddress.pkScript;
12976
+ hasOffchainOutputs = true;
12977
+ } else {
12840
12978
  const addr = btcSigner.Address(this.network).decode(output.address);
12841
12979
  script = btcSigner.OutScript.encode(addr);
12842
12980
  onchainOutputIndexes.push(index);
@@ -13019,7 +13157,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
13019
13157
  async maybeRotateBoardingAfterBoard(inputs) {
13020
13158
  if (!this._descriptorProvider) return;
13021
13159
  const consumedBoarding = inputs.some(
13022
- (input) => typeof input !== "string" && !chunkOWCPXRGP_cjs.isVirtualCoin(input)
13160
+ (input) => typeof input !== "string" && !chunkKUN5ZRMW_cjs.isVirtualCoin(input)
13023
13161
  );
13024
13162
  if (!consumedBoarding) return;
13025
13163
  try {
@@ -13043,7 +13181,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
13043
13181
  let connectorIndex = 0;
13044
13182
  const connectorsLeaves = connectorsGraph?.leaves() || [];
13045
13183
  for (const input of inputs) {
13046
- if (!chunkOWCPXRGP_cjs.isVirtualCoin(input)) {
13184
+ if (!chunkKUN5ZRMW_cjs.isVirtualCoin(input)) {
13047
13185
  for (let i = 0; i < settlementPsbt.inputsLength; i++) {
13048
13186
  const settlementInput = settlementPsbt.getInput(i);
13049
13187
  if (!settlementInput.txid || settlementInput.index === void 0) {
@@ -13074,7 +13212,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
13074
13212
  }
13075
13213
  continue;
13076
13214
  }
13077
- if (chunkOWCPXRGP_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)) {
13078
13216
  continue;
13079
13217
  }
13080
13218
  if (connectorsLeaves.length === 0) {
@@ -13102,7 +13240,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
13102
13240
  index: input.vout,
13103
13241
  witnessUtxo: {
13104
13242
  amount: BigInt(input.value),
13105
- script: chunkOWCPXRGP_cjs.VtxoScript.decode(input.tapTree).pkScript
13243
+ script: chunkKUN5ZRMW_cjs.VtxoScript.decode(input.tapTree).pkScript
13106
13244
  },
13107
13245
  sighashType: btcSigner.SigHash.DEFAULT,
13108
13246
  tapLeafScript: [input.forfeitTapLeafScript]
@@ -13121,7 +13259,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
13121
13259
  forfeitTx = await this._signerRouter.sign(forfeitTx, [
13122
13260
  {
13123
13261
  index: 0,
13124
- lookupScript: chunkOWCPXRGP_cjs.VtxoScript.decode(input.tapTree).pkScript
13262
+ lookupScript: chunkKUN5ZRMW_cjs.VtxoScript.decode(input.tapTree).pkScript
13125
13263
  }
13126
13264
  ]);
13127
13265
  signedForfeits.push(base.base64.encode(forfeitTx.toPSBT()));
@@ -13167,24 +13305,20 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
13167
13305
  const utf8IntentId = new TextEncoder().encode(intentId);
13168
13306
  const intentIdHash = utils_js.sha256(utf8IntentId);
13169
13307
  const intentIdHashStr = base.hex.encode(intentIdHash);
13170
- let skip = true;
13171
- for (const idHash of event.intentIdHashes) {
13172
- if (idHash === intentIdHashStr) {
13173
- if (!this.arkProvider) {
13174
- throw new Error("Arkade provider not configured");
13175
- }
13176
- await this.arkProvider.confirmRegistration(intentId);
13177
- skip = false;
13178
- }
13179
- }
13308
+ const skip = !event.intentIdHashes.includes(intentIdHashStr);
13180
13309
  if (skip) {
13181
13310
  return { skip };
13182
13311
  }
13183
- const sweepTapscript = chunkOWCPXRGP_cjs.CSVMultisigTapscript.encode({
13184
- timelock: {
13185
- value: event.batchExpiry,
13186
- type: event.batchExpiry >= 512n ? "seconds" : "blocks"
13187
- },
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,
13188
13322
  pubkeys: [this.forfeitPubkey]
13189
13323
  }).script;
13190
13324
  sweepTapTreeRoot = payment_js.tapLeafHash(sweepTapscript);
@@ -13289,9 +13423,9 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
13289
13423
  ...existing ?? {},
13290
13424
  intentTxId,
13291
13425
  registerProof: intent.proof,
13292
- registerProofMessage: chunkOWCPXRGP_cjs.Intent.encodeMessage(intent.message),
13426
+ registerProofMessage: chunkKUN5ZRMW_cjs.Intent.encodeMessage(intent.message),
13293
13427
  deleteProof: deleteIntent.proof,
13294
- deleteProofMessage: chunkOWCPXRGP_cjs.Intent.encodeMessage(deleteIntent.message),
13428
+ deleteProofMessage: chunkKUN5ZRMW_cjs.Intent.encodeMessage(deleteIntent.message),
13295
13429
  intentVtxos: inputs.map((i) => ({
13296
13430
  txid: i.txid,
13297
13431
  vout: i.vout
@@ -13323,7 +13457,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
13323
13457
  try {
13324
13458
  return await this.arkProvider.registerIntent(intent);
13325
13459
  } catch (error) {
13326
- if (error instanceof chunkOWCPXRGP_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")) {
13327
13461
  const deleteIntent = await this.makeDeleteIntentSignature(inputs);
13328
13462
  await this.arkProvider.deleteIntent(deleteIntent);
13329
13463
  return this.arkProvider.registerIntent(intent);
@@ -13339,7 +13473,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
13339
13473
  expire_at: 0,
13340
13474
  cosigners_public_keys: cosignerPubKeys
13341
13475
  };
13342
- const proof = chunkOWCPXRGP_cjs.Intent.create(message, coins, outputs);
13476
+ const proof = chunkKUN5ZRMW_cjs.Intent.create(message, coins, outputs);
13343
13477
  const signedProof = await this._signerRouter.sign(proof, intentProofJobs(coins));
13344
13478
  return {
13345
13479
  proof: base.base64.encode(signedProof.toPSBT()),
@@ -13351,7 +13485,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
13351
13485
  type: "delete",
13352
13486
  expire_at: 0
13353
13487
  };
13354
- const proof = chunkOWCPXRGP_cjs.Intent.create(message, coins, []);
13488
+ const proof = chunkKUN5ZRMW_cjs.Intent.create(message, coins, []);
13355
13489
  const signedProof = await this._signerRouter.sign(proof, intentProofJobs(coins));
13356
13490
  return {
13357
13491
  proof: base.base64.encode(signedProof.toPSBT()),
@@ -13363,7 +13497,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
13363
13497
  type: "get-pending-tx",
13364
13498
  expire_at: 0
13365
13499
  };
13366
- const proof = chunkOWCPXRGP_cjs.Intent.create(message, coins, []);
13500
+ const proof = chunkKUN5ZRMW_cjs.Intent.create(message, coins, []);
13367
13501
  const signedProof = await this._signerRouter.sign(proof, intentProofJobs(coins));
13368
13502
  return {
13369
13503
  proof: base.base64.encode(signedProof.toPSBT()),
@@ -13384,7 +13518,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
13384
13518
  if (!vtxos || vtxos.length === 0) {
13385
13519
  const scriptMap = await this.getScriptMap();
13386
13520
  const allExtended = [];
13387
- const fetchedVtxos = await chunkOWCPXRGP_cjs.getAllNormalizedVtxos(this.indexerProvider, [
13521
+ const fetchedVtxos = await chunkKUN5ZRMW_cjs.getAllNormalizedVtxos(this.indexerProvider, [
13388
13522
  ...scriptMap.keys()
13389
13523
  ]);
13390
13524
  for (const vtxo of fetchedVtxos) {
@@ -13498,11 +13632,11 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
13498
13632
  * against the current key alone would leave it pending forever.
13499
13633
  */
13500
13634
  checkpointUnrollCandidates(info) {
13501
- const current = chunkOWCPXRGP_cjs.CSVMultisigTapscript.decode(base.hex.decode(info.checkpointTapscript));
13635
+ const current = chunkKUN5ZRMW_cjs.CSVMultisigTapscript.decode(base.hex.decode(info.checkpointTapscript));
13502
13636
  const candidates = [this._serverUnrollScript, current];
13503
13637
  for (const deprecated of signerSetFromInfo(info).deprecated.keys()) {
13504
13638
  candidates.push(
13505
- chunkOWCPXRGP_cjs.CSVMultisigTapscript.encode({
13639
+ chunkKUN5ZRMW_cjs.CSVMultisigTapscript.encode({
13506
13640
  ...current.params,
13507
13641
  pubkeys: [base.hex.decode(deprecated)]
13508
13642
  })
@@ -13593,7 +13727,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
13593
13727
  if (vtxos.length === 0) {
13594
13728
  throw new Error("No VTXOs found for this arkadeCash");
13595
13729
  }
13596
- const myPkScript = chunkOWCPXRGP_cjs.ArkAddress.decode(await this.getAddress()).pkScript;
13730
+ const myPkScript = chunkKUN5ZRMW_cjs.ArkAddress.decode(await this.getAddress()).pkScript;
13597
13731
  let { spendable, unclaimed } = this.classifyCashVtxos(vtxos);
13598
13732
  let swept = 0;
13599
13733
  const drainable = vtxos.filter((vtxo) => !isSubdust(vtxo, this.dustAmount));
@@ -13620,8 +13754,9 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
13620
13754
  }
13621
13755
  if (spendable.length > 0) {
13622
13756
  const info = await this.arkProvider.getInfo();
13623
- const serverUnrollScript = chunkOWCPXRGP_cjs.CSVMultisigTapscript.decode(
13624
- base.hex.decode(info.checkpointTapscript)
13757
+ const serverUnrollScript = assertValidServerUnrollScript(
13758
+ info.checkpointTapscript,
13759
+ resolveCheckpointExitDelayPolicy(this.network, this.checkpointExitDelayPolicy)
13625
13760
  );
13626
13761
  for (const vtxo of spendable) {
13627
13762
  try {
@@ -13666,7 +13801,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
13666
13801
  const spendable = [];
13667
13802
  const unclaimed = [];
13668
13803
  for (const vtxo of vtxos) {
13669
- if (chunkOWCPXRGP_cjs.hasTerminalSpend(vtxo)) {
13804
+ if (chunkKUN5ZRMW_cjs.hasTerminalSpend(vtxo)) {
13670
13805
  unclaimed.push(cashReport(vtxo, "already-spent"));
13671
13806
  } else if (isSubdust(vtxo, this.dustAmount)) {
13672
13807
  unclaimed.push(cashReport(vtxo, "subdust"));
@@ -13686,7 +13821,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
13686
13821
  const all = [];
13687
13822
  const seen = /* @__PURE__ */ new Set();
13688
13823
  for (let pageIndex = 0; ; pageIndex++) {
13689
- const { vtxos, page } = await chunkOWCPXRGP_cjs.getNormalizedVtxos(this.indexerProvider, {
13824
+ const { vtxos, page } = await chunkKUN5ZRMW_cjs.getNormalizedVtxos(this.indexerProvider, {
13690
13825
  scripts,
13691
13826
  pageIndex,
13692
13827
  pageSize
@@ -13733,7 +13868,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
13733
13868
  for (let i = 0; i < inputs.length; i += MAX_INPUTS_PER_INTENT) {
13734
13869
  const batch = inputs.slice(i, i + MAX_INPUTS_PER_INTENT);
13735
13870
  const message = { type: "get-pending-tx", expire_at: 0 };
13736
- const proof = chunkOWCPXRGP_cjs.Intent.create(message, batch, []);
13871
+ const proof = chunkKUN5ZRMW_cjs.Intent.create(message, batch, []);
13737
13872
  const signedProof = await identity.sign(
13738
13873
  proof,
13739
13874
  Array.from({ length: batch.length + 1 }, (_, j) => j)
@@ -13829,7 +13964,11 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
13829
13964
  const serverUnrollScript = this.serverUnrollScript;
13830
13965
  const outputAddress = offchainTapscript.address(this.network.hrp, serverPubKey);
13831
13966
  const address = outputAddress.encode();
13832
- const recipients = validateRecipients(args, Number(this.dustAmount));
13967
+ const recipients = validateRecipients(
13968
+ args,
13969
+ Number(this.dustAmount),
13970
+ this.recipientAddressContext(serverPubKey)
13971
+ );
13833
13972
  const allVirtualCoins = await this.getVtxos({
13834
13973
  withRecoverable: false
13835
13974
  });
@@ -14039,10 +14178,10 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
14039
14178
  const serverPubKey = this.arkServerPublicKey;
14040
14179
  const serverUnrollScript = this.serverUnrollScript;
14041
14180
  const arkAddress = offchainTapscript.address(this.network.hrp, serverPubKey);
14042
- const normalizedInputs = inputs.map(chunkOWCPXRGP_cjs.normalizeVtxo);
14043
- const at = now ?? await chunkOWCPXRGP_cjs.resolveTimeHeight(this.onchainProvider);
14181
+ const normalizedInputs = inputs.map(chunkKUN5ZRMW_cjs.normalizeVtxo);
14182
+ const at = now ?? await chunkKUN5ZRMW_cjs.resolveTimeHeight(this.onchainProvider);
14044
14183
  for (const input of normalizedInputs) {
14045
- if (!chunkOWCPXRGP_cjs.canSpendOffchain(input, at)) {
14184
+ if (!chunkKUN5ZRMW_cjs.canSpendOffchain(input, at)) {
14046
14185
  throw new Error(
14047
14186
  `sendSelectedVtxosToSelf: input ${input.txid}:${input.vout} is not cooperatively spendable`
14048
14187
  );
@@ -14107,7 +14246,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
14107
14246
  );
14108
14247
  const arkTxJobs = inputs.map((input, index) => ({
14109
14248
  index,
14110
- lookupScript: chunkOWCPXRGP_cjs.VtxoScript.decode(input.tapTree).pkScript
14249
+ lookupScript: chunkKUN5ZRMW_cjs.VtxoScript.decode(input.tapTree).pkScript
14111
14250
  }));
14112
14251
  const identity = this.identity;
14113
14252
  const signer = {
@@ -14193,14 +14332,14 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
14193
14332
  const spentBy = checkpointIdByOutpoint.get(`${vtxo.txid}:${vtxo.vout}`);
14194
14333
  spentVtxos.push({
14195
14334
  ...spentFacts,
14196
- virtualStatus: chunkOWCPXRGP_cjs.toVirtualStatus(spentFacts),
14335
+ virtualStatus: chunkKUN5ZRMW_cjs.toVirtualStatus(spentFacts),
14197
14336
  ...spentBy ? { spentBy } : {},
14198
14337
  arkTxId: arkTxid
14199
14338
  });
14200
14339
  for (const id of vtxo.commitmentTxIds) {
14201
14340
  commitmentTxIds.add(id);
14202
14341
  }
14203
- const vtxoExpiry = chunkOWCPXRGP_cjs.toBatchExpiry(vtxo);
14342
+ const vtxoExpiry = chunkKUN5ZRMW_cjs.toBatchExpiry(vtxo);
14204
14343
  if (vtxoExpiry) {
14205
14344
  batchExpiry = Math.min(batchExpiry, vtxoExpiry);
14206
14345
  }
@@ -14213,7 +14352,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
14213
14352
  isSwept: false,
14214
14353
  isPreconfirmed: true,
14215
14354
  commitmentTxIds: Array.from(commitmentTxIds),
14216
- ...chunkOWCPXRGP_cjs.parseLegacyExpiry(batchExpiry)
14355
+ ...chunkKUN5ZRMW_cjs.parseLegacyExpiry(batchExpiry)
14217
14356
  };
14218
14357
  changeVtxo = {
14219
14358
  txid: arkTxid,
@@ -14225,7 +14364,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
14225
14364
  tapTree: offchainTapscript.encode(),
14226
14365
  value: Number(changeAmount),
14227
14366
  ...changeFacts,
14228
- virtualStatus: chunkOWCPXRGP_cjs.toVirtualStatus(changeFacts),
14367
+ virtualStatus: chunkKUN5ZRMW_cjs.toVirtualStatus(changeFacts),
14229
14368
  spentBy: "",
14230
14369
  status: {
14231
14370
  confirmed: false
@@ -14294,12 +14433,12 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
14294
14433
  const spentVtxos = [];
14295
14434
  const inputArkTxIds = /* @__PURE__ */ new Set();
14296
14435
  const boardingRemovalsByAddress = /* @__PURE__ */ new Map();
14297
- const vtxoInputs = inputs.filter(chunkOWCPXRGP_cjs.isVirtualCoin);
14436
+ const vtxoInputs = inputs.filter(chunkKUN5ZRMW_cjs.isVirtualCoin);
14298
14437
  const cm = await this.getContractManager();
14299
14438
  const annotatedVtxos = await cm.annotateVtxos(vtxoInputs);
14300
14439
  const annotatedByKey = new Map(annotatedVtxos.map((v) => [`${v.txid}:${v.vout}`, v]));
14301
14440
  for (const input of inputs) {
14302
- if (chunkOWCPXRGP_cjs.isVirtualCoin(input)) {
14441
+ if (chunkKUN5ZRMW_cjs.isVirtualCoin(input)) {
14303
14442
  const outpoint = `${input.txid}:${input.vout}`;
14304
14443
  const vtxo = annotatedByKey.get(outpoint);
14305
14444
  if (!vtxo) {
@@ -14311,13 +14450,13 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
14311
14450
  const settledFacts = { ...vtxo, isSpent: true };
14312
14451
  spentVtxos.push({
14313
14452
  ...settledFacts,
14314
- virtualStatus: chunkOWCPXRGP_cjs.toVirtualStatus(settledFacts),
14453
+ virtualStatus: chunkKUN5ZRMW_cjs.toVirtualStatus(settledFacts),
14315
14454
  settledBy: commitmentTxid
14316
14455
  });
14317
14456
  } else {
14318
14457
  let sourceAddress;
14319
14458
  try {
14320
- sourceAddress = chunkOWCPXRGP_cjs.VtxoScript.decode(input.tapTree).onchainAddress(
14459
+ sourceAddress = chunkKUN5ZRMW_cjs.VtxoScript.decode(input.tapTree).onchainAddress(
14321
14460
  this.network
14322
14461
  );
14323
14462
  } catch {
@@ -14375,9 +14514,9 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
14375
14514
  }
14376
14515
  };
14377
14516
  function selectVirtualCoins(coins, targetAmount) {
14378
- const sortedCoins = coins.map(chunkOWCPXRGP_cjs.normalizeVtxo).sort((a, b) => {
14379
- const expiryA = chunkOWCPXRGP_cjs.toBatchExpiry(a) || Number.MAX_SAFE_INTEGER;
14380
- const expiryB = chunkOWCPXRGP_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;
14381
14520
  if (expiryA !== expiryB) {
14382
14521
  return expiryA - expiryB;
14383
14522
  }
@@ -14634,7 +14773,7 @@ var MessageBus = class {
14634
14773
  this.initialized = true;
14635
14774
  }
14636
14775
  async buildServices(config) {
14637
- const arkProvider = new chunkOWCPXRGP_cjs.RestArkProvider(config.arkServer.url);
14776
+ const arkProvider = new chunkKUN5ZRMW_cjs.RestArkProvider(config.arkServer.url);
14638
14777
  const storage = {
14639
14778
  walletRepository: this.walletRepository,
14640
14779
  contractRepository: this.contractRepository
@@ -14973,7 +15112,7 @@ var offboardNetworkNames = [
14973
15112
  function offboardDestinationScript(destinationAddress) {
14974
15113
  for (const networkName of offboardNetworkNames) {
14975
15114
  try {
14976
- const network = chunkOWCPXRGP_cjs.networks[networkName];
15115
+ const network = chunkKUN5ZRMW_cjs.networks[networkName];
14977
15116
  const addr = btcSigner.Address(network).decode(destinationAddress);
14978
15117
  return btcSigner.OutScript.encode(addr);
14979
15118
  } catch {
@@ -15037,7 +15176,7 @@ var Ramps = class {
15037
15176
  }
15038
15177
  amount = amount ?? totalAmount;
15039
15178
  const offchainAddress = await this.wallet.getAddress();
15040
- const offchainAddr = chunkOWCPXRGP_cjs.ArkAddress.decode(offchainAddress);
15179
+ const offchainAddr = chunkKUN5ZRMW_cjs.ArkAddress.decode(offchainAddress);
15041
15180
  const offchainScript = base.hex.encode(offchainAddr.pkScript);
15042
15181
  const outputFee = estimator.evalOffchainOutput({
15043
15182
  amount,
@@ -15097,7 +15236,7 @@ var Ramps = class {
15097
15236
  const filteredVtxos = [];
15098
15237
  let totalAmount = 0n;
15099
15238
  for (const vtxo of vtxos) {
15100
- const inputFee = estimator.evalOffchainInput(chunkOWCPXRGP_cjs.toOffchainInputFeeParams(vtxo));
15239
+ const inputFee = estimator.evalOffchainInput(chunkKUN5ZRMW_cjs.toOffchainInputFeeParams(vtxo));
15101
15240
  if (inputFee.satoshis >= vtxo.value) {
15102
15241
  continue;
15103
15242
  }
@@ -15794,7 +15933,7 @@ var WalletMessageHandler = class {
15794
15933
  // Wallet methods
15795
15934
  async handleInitWallet({ payload }) {
15796
15935
  const { arkServerUrl } = payload;
15797
- this.indexerProvider = new chunkG7DOBFQN_cjs.RestIndexerProvider(arkServerUrl);
15936
+ this.indexerProvider = new chunkYK6NP5KX_cjs.RestIndexerProvider(arkServerUrl);
15798
15937
  await this.onWalletInitialized();
15799
15938
  }
15800
15939
  async handleGetBalance() {
@@ -15818,12 +15957,12 @@ var WalletMessageHandler = class {
15818
15957
  let recoverable = 0;
15819
15958
  let pendingRecovery = 0;
15820
15959
  for (const vtxo of allVtxos) {
15821
- if (chunkOWCPXRGP_cjs.hasTerminalSpend(vtxo)) continue;
15960
+ if (chunkKUN5ZRMW_cjs.hasTerminalSpend(vtxo)) continue;
15822
15961
  if (pendingOutpoints.has(`${vtxo.txid}:${vtxo.vout}`)) {
15823
15962
  pendingRecovery += vtxo.value;
15824
- } else if (chunkOWCPXRGP_cjs.canRecoverOnchain(vtxo, now)) {
15963
+ } else if (chunkKUN5ZRMW_cjs.canRecoverOnchain(vtxo, now)) {
15825
15964
  recoverable += vtxo.value;
15826
- } else if (chunkOWCPXRGP_cjs.canSpendOffchain(vtxo, now)) {
15965
+ } else if (chunkKUN5ZRMW_cjs.canSpendOffchain(vtxo, now)) {
15827
15966
  if (vtxo.isPreconfirmed) {
15828
15967
  preconfirmed += vtxo.value;
15829
15968
  } else {
@@ -15835,7 +15974,7 @@ var WalletMessageHandler = class {
15835
15974
  const totalOffchain = settled + preconfirmed + recoverable + pendingRecovery;
15836
15975
  const assetBalances = /* @__PURE__ */ new Map();
15837
15976
  for (const vtxo of allVtxos) {
15838
- if (chunkOWCPXRGP_cjs.hasTerminalSpend(vtxo)) continue;
15977
+ if (chunkKUN5ZRMW_cjs.hasTerminalSpend(vtxo)) continue;
15839
15978
  if (vtxo.assets) {
15840
15979
  for (const a of vtxo.assets) {
15841
15980
  const current = assetBalances.get(a.assetId) ?? 0n;
@@ -15871,7 +16010,7 @@ var WalletMessageHandler = class {
15871
16010
  */
15872
16011
  async getSpendableVtxos() {
15873
16012
  const vtxos = await this.getVtxosFromRepo();
15874
- return vtxos.filter((v) => !chunkOWCPXRGP_cjs.hasTerminalSpend(v));
16013
+ return vtxos.filter((v) => !chunkKUN5ZRMW_cjs.hasTerminalSpend(v));
15875
16014
  }
15876
16015
  async onWalletInitialized() {
15877
16016
  if (!this.readonlyWallet || !this.arkProvider || !this.indexerProvider || !this.walletRepository) {
@@ -16083,10 +16222,10 @@ var WalletMessageHandler = class {
16083
16222
  if (dustAmount != null && isSubdust(v, dustAmount)) {
16084
16223
  return false;
16085
16224
  }
16086
- if (chunkOWCPXRGP_cjs.isRecoverable(v)) {
16225
+ if (chunkKUN5ZRMW_cjs.isRecoverable(v)) {
16087
16226
  return false;
16088
16227
  }
16089
- if (chunkOWCPXRGP_cjs.isExpired(v)) {
16228
+ if (chunkKUN5ZRMW_cjs.isExpired(v)) {
16090
16229
  return false;
16091
16230
  }
16092
16231
  return true;
@@ -16158,7 +16297,7 @@ var WalletMessageHandler = class {
16158
16297
  if (!this.readonlyWallet) return null;
16159
16298
  const { boardingTxs, commitmentsToIgnore } = await this.readonlyWallet.getBoardingTxs();
16160
16299
  const indexerProvider = this.indexerProvider;
16161
- const resolveTxCreatedAt = indexerProvider ? (txids) => chunkOWCPXRGP_cjs.fetchVtxoCreatedAtByTxid(indexerProvider, txids) : void 0;
16300
+ const resolveTxCreatedAt = indexerProvider ? (txids) => chunkKUN5ZRMW_cjs.fetchVtxoCreatedAtByTxid(indexerProvider, txids) : void 0;
16162
16301
  return buildTransactionHistory(vtxos, boardingTxs, commitmentsToIgnore, resolveTxCreatedAt);
16163
16302
  }
16164
16303
  async ensureContractEventBroadcasting() {
@@ -16843,7 +16982,7 @@ var ServiceWorkerReadonlyWallet = class _ServiceWorkerReadonlyWallet {
16843
16982
  };
16844
16983
  try {
16845
16984
  const response = await this.sendMessage(message);
16846
- return response.payload.vtxos.map(chunkOWCPXRGP_cjs.normalizeVtxo);
16985
+ return response.payload.vtxos.map(chunkKUN5ZRMW_cjs.normalizeVtxo);
16847
16986
  } catch (error) {
16848
16987
  throw new Error(`Failed to get vtxos: ${error}`);
16849
16988
  }
@@ -16956,7 +17095,7 @@ var ServiceWorkerReadonlyWallet = class _ServiceWorkerReadonlyWallet {
16956
17095
  };
16957
17096
  try {
16958
17097
  const response = await sendContractMessage(message);
16959
- return response.payload.vtxos.map(chunkOWCPXRGP_cjs.normalizeVtxo);
17098
+ return response.payload.vtxos.map(chunkKUN5ZRMW_cjs.normalizeVtxo);
16960
17099
  } catch (e) {
16961
17100
  throw new Error("Failed to annotate vtxos");
16962
17101
  }
@@ -17410,7 +17549,7 @@ var ServiceWorkerWallet = class _ServiceWorkerWallet extends ServiceWorkerReadon
17410
17549
  };
17411
17550
  try {
17412
17551
  const response = await wallet.sendMessage(message);
17413
- return response.payload.vtxos.map(chunkOWCPXRGP_cjs.normalizeVtxo);
17552
+ return response.payload.vtxos.map(chunkKUN5ZRMW_cjs.normalizeVtxo);
17414
17553
  } catch (e) {
17415
17554
  throw new Error(`Failed to get expiring vtxos: ${e}`);
17416
17555
  }
@@ -17522,12 +17661,12 @@ var OnchainWallet = class _OnchainWallet {
17522
17661
  * @returns Configured onchain wallet
17523
17662
  * @throws Error if the configured identity cannot produce a valid x-only public key
17524
17663
  */
17525
- static async create(identity, networkName = chunkOWCPXRGP_cjs.DEFAULT_NETWORK_NAME, provider) {
17664
+ static async create(identity, networkName = chunkKUN5ZRMW_cjs.DEFAULT_NETWORK_NAME, provider) {
17526
17665
  const pubkey = await identity.xOnlyPublicKey();
17527
17666
  if (!pubkey) {
17528
17667
  throw new Error("Invalid configured public key");
17529
17668
  }
17530
- const network = chunkOWCPXRGP_cjs.getNetwork(networkName);
17669
+ const network = chunkKUN5ZRMW_cjs.getNetwork(networkName);
17531
17670
  const onchainProvider = provider || new EsploraProvider(ESPLORA_URL[networkName]);
17532
17671
  const onchainP2TR = btcSigner.p2tr(pubkey, void 0, network);
17533
17672
  return new _OnchainWallet(identity, network, onchainP2TR, onchainProvider);
@@ -17633,7 +17772,7 @@ var OnchainWallet = class _OnchainWallet {
17633
17772
  if (!inputs) {
17634
17773
  throw new Error("Fee estimation failed");
17635
17774
  }
17636
- let tx = new chunkOWCPXRGP_cjs.Transaction();
17775
+ let tx = new chunkKUN5ZRMW_cjs.Transaction();
17637
17776
  for (const input of inputs) {
17638
17777
  tx.addInput({
17639
17778
  txid: input.txid,
@@ -17691,7 +17830,7 @@ var OnchainWallet = class _OnchainWallet {
17691
17830
  * @throws If the parent has no anchor, or funding cannot be selected/signed
17692
17831
  */
17693
17832
  async bumpAnchor(parentHex, feeRate) {
17694
- const parent = chunkOWCPXRGP_cjs.Transaction.fromRaw(base.hex.decode(parentHex));
17833
+ const parent = chunkKUN5ZRMW_cjs.Transaction.fromRaw(base.hex.decode(parentHex));
17695
17834
  const coins = (await this.getCoins()).filter((c) => c.status.confirmed);
17696
17835
  const child = await this.buildBumpPackage(parent, feeRate, coins);
17697
17836
  return [parent.hex, child.hex];
@@ -18456,7 +18595,7 @@ exports.BIP322 = void 0;
18456
18595
  async function sign2(message, identity, network) {
18457
18596
  const xOnlyPubKey = await identity.xOnlyPublicKey();
18458
18597
  const payment = btcSigner.p2tr(xOnlyPubKey, void 0, network);
18459
- const toSpend = chunkOWCPXRGP_cjs.craftToSpendTx(message, payment.script, TAG_BIP322);
18598
+ const toSpend = chunkKUN5ZRMW_cjs.craftToSpendTx(message, payment.script, TAG_BIP322);
18460
18599
  const toSign = craftBIP322ToSignP2TR(toSpend, payment.script, xOnlyPubKey);
18461
18600
  const signed = await identity.sign(toSign, [0]);
18462
18601
  signed.finalizeIdx(0);
@@ -18514,7 +18653,7 @@ function verifyP2TR(message, witnessItems, pkScript, pubkey) {
18514
18653
  if (sighashType !== btcSigner.SigHash.DEFAULT && sighashType !== btcSigner.SigHash.ALL) {
18515
18654
  return false;
18516
18655
  }
18517
- const toSpend = chunkOWCPXRGP_cjs.craftToSpendTx(message, pkScript, TAG_BIP322);
18656
+ const toSpend = chunkKUN5ZRMW_cjs.craftToSpendTx(message, pkScript, TAG_BIP322);
18518
18657
  const toSign = craftBIP322ToSignP2TR(toSpend, pkScript, pubkey);
18519
18658
  const sighash = toSign.preimageWitnessV1(0, [pkScript], sighashType, [0n]);
18520
18659
  const rawSig = sig.length === 65 ? sig.subarray(0, 64) : sig;
@@ -18535,7 +18674,7 @@ function verifyP2WPKH(message, witnessItems, pkScript, addressHash) {
18535
18674
  }
18536
18675
  const sighashType = sigWithHash[sigWithHash.length - 1];
18537
18676
  const derSig = sigWithHash.subarray(0, sigWithHash.length - 1);
18538
- const toSpend = chunkOWCPXRGP_cjs.craftToSpendTx(message, pkScript, TAG_BIP322);
18677
+ const toSpend = chunkKUN5ZRMW_cjs.craftToSpendTx(message, pkScript, TAG_BIP322);
18539
18678
  const toSign = craftBIP322ToSignSimple(toSpend, pkScript);
18540
18679
  const scriptCode = btcSigner.OutScript.encode({ type: "pkh", hash: addressHash });
18541
18680
  const sighash = toSign.preimageWitnessV0(0, scriptCode, sighashType, 0n);
@@ -18588,7 +18727,7 @@ function encodeCompactSize(n) {
18588
18727
  return buf;
18589
18728
  }
18590
18729
  function craftBIP322ToSignP2TR(toSpend, pkScript, tapInternalKey) {
18591
- const tx = new chunkOWCPXRGP_cjs.Transaction({ version: 0 });
18730
+ const tx = new chunkKUN5ZRMW_cjs.Transaction({ version: 0 });
18592
18731
  tx.addInput({
18593
18732
  txid: toSpend.id,
18594
18733
  index: 0,
@@ -18602,12 +18741,12 @@ function craftBIP322ToSignP2TR(toSpend, pkScript, tapInternalKey) {
18602
18741
  });
18603
18742
  tx.addOutput({
18604
18743
  amount: 0n,
18605
- script: chunkOWCPXRGP_cjs.OP_RETURN_EMPTY_PKSCRIPT
18744
+ script: chunkKUN5ZRMW_cjs.OP_RETURN_EMPTY_PKSCRIPT
18606
18745
  });
18607
18746
  return tx;
18608
18747
  }
18609
18748
  function craftBIP322ToSignSimple(toSpend, pkScript) {
18610
- const tx = new chunkOWCPXRGP_cjs.Transaction({ version: 0 });
18749
+ const tx = new chunkKUN5ZRMW_cjs.Transaction({ version: 0 });
18611
18750
  tx.addInput({
18612
18751
  txid: toSpend.id,
18613
18752
  index: 0,
@@ -18619,7 +18758,7 @@ function craftBIP322ToSignSimple(toSpend, pkScript) {
18619
18758
  });
18620
18759
  tx.addOutput({
18621
18760
  amount: 0n,
18622
- script: chunkOWCPXRGP_cjs.OP_RETURN_EMPTY_PKSCRIPT
18761
+ script: chunkKUN5ZRMW_cjs.OP_RETURN_EMPTY_PKSCRIPT
18623
18762
  });
18624
18763
  return tx;
18625
18764
  }
@@ -18750,7 +18889,7 @@ var RestEmulatorProvider = class {
18750
18889
  }
18751
18890
  };
18752
18891
  function finalizeVirtualTx(type, psbtBase64) {
18753
- const tx = chunkOWCPXRGP_cjs.Transaction.fromPSBT(base.base64.decode(psbtBase64));
18892
+ const tx = chunkKUN5ZRMW_cjs.Transaction.fromPSBT(base.base64.decode(psbtBase64));
18754
18893
  if (type === "INDEXER_CHAINED_TX_TYPE_TREE" /* TREE */) {
18755
18894
  const input = tx.getInput(0);
18756
18895
  if (!input) {
@@ -18777,14 +18916,14 @@ var ExitPathError = class extends Error {
18777
18916
  reason;
18778
18917
  };
18779
18918
  function delayWeight(sequence) {
18780
- const t = chunkOWCPXRGP_cjs.sequenceToTimelock(sequence);
18919
+ const t = chunkKUN5ZRMW_cjs.sequenceToTimelock(sequence);
18781
18920
  return t.type === "blocks" ? Number(t.value) : Number(t.value) / 600;
18782
18921
  }
18783
18922
  async function resolveUnilateralPath(params) {
18784
18923
  const { vtxo, scriptHex, contractRepository } = params;
18785
18924
  const contract = contractRepository ? (await contractRepository.getContracts({ script: scriptHex }))[0] : void 0;
18786
18925
  if (contract) {
18787
- const handler = chunkV2TOHHPW_cjs.contractHandlers.get(contract.type);
18926
+ const handler = chunkOWTKOMJZ_cjs.contractHandlers.get(contract.type);
18788
18927
  if (!handler) {
18789
18928
  throw new ExitPathError(
18790
18929
  "no-handler",
@@ -18807,12 +18946,12 @@ async function resolveUnilateralPath(params) {
18807
18946
  paths.sort((a, b) => delayWeight(a.sequence) - delayWeight(b.sequence));
18808
18947
  return { selection: paths[0], label: `${contract.type}:unilateral` };
18809
18948
  }
18810
- const decoded = chunkOWCPXRGP_cjs.VtxoScript.decode(vtxo.tapTree);
18949
+ const decoded = chunkKUN5ZRMW_cjs.VtxoScript.decode(vtxo.tapTree);
18811
18950
  let best;
18812
18951
  for (const exit of decoded.exitPaths()) {
18813
18952
  const leaf = decoded.findLeaf(base.hex.encode(exit.script));
18814
18953
  if (!leaf) continue;
18815
- const sequence = chunkOWCPXRGP_cjs.timelockToSequence(exit.params.timelock);
18954
+ const sequence = chunkKUN5ZRMW_cjs.timelockToSequence(exit.params.timelock);
18816
18955
  const weight = delayWeight(sequence);
18817
18956
  if (!best || weight < best.weight) {
18818
18957
  best = { selection: { leaf, sequence }, weight };
@@ -18998,14 +19137,14 @@ async function prepareUnrollTransaction(wallet, vtxoTxIds, outputAddress) {
18998
19137
  }
18999
19138
  const resolved = await resolveUnilateralPath({
19000
19139
  vtxo,
19001
- scriptHex: base.hex.encode(chunkOWCPXRGP_cjs.VtxoScript.decode(vtxo.tapTree).pkScript),
19140
+ scriptHex: base.hex.encode(chunkKUN5ZRMW_cjs.VtxoScript.decode(vtxo.tapTree).pkScript),
19002
19141
  contractRepository: wallet.contractRepository,
19003
19142
  walletPubKeyHex: base.hex.encode(await wallet.identity.xOnlyPublicKey()),
19004
19143
  currentTime: Date.now()
19005
19144
  });
19006
19145
  const spendingLeaf = resolved.selection.leaf;
19007
19146
  const sequence = resolved.selection.sequence;
19008
- const timelock = chunkOWCPXRGP_cjs.sequenceToTimelock(sequence);
19147
+ const timelock = chunkKUN5ZRMW_cjs.sequenceToTimelock(sequence);
19009
19148
  const elapsed = timelock.type === "blocks" ? chainTip.height >= txStatus.blockHeight + Number(timelock.value) : chainTip.time >= txStatus.blockTime + Number(timelock.value);
19010
19149
  if (!elapsed) {
19011
19150
  throw new Error(`no available exit path found for vtxo ${vtxo.txid}:${vtxo.vout}`);
@@ -19018,7 +19157,7 @@ async function prepareUnrollTransaction(wallet, vtxoTxIds, outputAddress) {
19018
19157
  sequence,
19019
19158
  witnessUtxo: {
19020
19159
  amount: BigInt(vtxo.value),
19021
- script: chunkOWCPXRGP_cjs.VtxoScript.decode(vtxo.tapTree).pkScript
19160
+ script: chunkKUN5ZRMW_cjs.VtxoScript.decode(vtxo.tapTree).pkScript
19022
19161
  },
19023
19162
  sighashType: btcSigner.SigHash.DEFAULT
19024
19163
  });
@@ -19028,7 +19167,7 @@ async function prepareUnrollTransaction(wallet, vtxoTxIds, outputAddress) {
19028
19167
  btcSigner.TaprootControlBlock.encode(spendingLeaf[0]).length
19029
19168
  );
19030
19169
  }
19031
- const tx = new chunkOWCPXRGP_cjs.Transaction({ version: 2 });
19170
+ const tx = new chunkKUN5ZRMW_cjs.Transaction({ version: 2 });
19032
19171
  for (const input of inputs) {
19033
19172
  tx.addInput(input);
19034
19173
  }
@@ -19095,7 +19234,7 @@ async function buildSignedSweep(params) {
19095
19234
  `uneconomic vtxo ${vtxo.txid}:${vtxo.vout}: value ${vtxo.value} - fee ${fee} < dust`
19096
19235
  );
19097
19236
  }
19098
- const tx = new chunkOWCPXRGP_cjs.Transaction({ version: 2 });
19237
+ const tx = new chunkKUN5ZRMW_cjs.Transaction({ version: 2 });
19099
19238
  tx.addInput({
19100
19239
  txid: vtxo.txid,
19101
19240
  index: vtxo.vout,
@@ -19120,7 +19259,7 @@ async function buildSignedSweep(params) {
19120
19259
  finalScriptWitness: [
19121
19260
  tapScriptSig[0][1],
19122
19261
  ...path.extraWitness,
19123
- chunkOWCPXRGP_cjs.scriptFromTapLeafScript(path.leaf),
19262
+ chunkKUN5ZRMW_cjs.scriptFromTapLeafScript(path.leaf),
19124
19263
  btcSigner.TaprootControlBlock.encode(controlBlock)
19125
19264
  ]
19126
19265
  });
@@ -19150,7 +19289,7 @@ async function resolveFeeRate(opts) {
19150
19289
  }
19151
19290
  async function selectExitVtxos(opts) {
19152
19291
  if (!opts.vtxos) return opts.wallet.getVtxos();
19153
- const res = await chunkOWCPXRGP_cjs.getNormalizedVtxos(opts.wallet.indexerProvider, { outpoints: opts.vtxos });
19292
+ const res = await chunkKUN5ZRMW_cjs.getNormalizedVtxos(opts.wallet.indexerProvider, { outpoints: opts.vtxos });
19154
19293
  const tapTrees = /* @__PURE__ */ new Map();
19155
19294
  const out = [];
19156
19295
  for (const vtxo of res.vtxos) {
@@ -19165,7 +19304,7 @@ async function selectExitVtxos(opts) {
19165
19304
  `no contract registered for vtxo script ${vtxo.script} \u2014 register the contract before exiting`
19166
19305
  );
19167
19306
  }
19168
- const handler = chunkV2TOHHPW_cjs.contractHandlers.get(contract.type);
19307
+ const handler = chunkOWTKOMJZ_cjs.contractHandlers.get(contract.type);
19169
19308
  if (!handler) {
19170
19309
  throw new Error(`no contract handler registered for type '${contract.type}'`);
19171
19310
  }
@@ -19195,7 +19334,7 @@ async function computeExitLayout(opts, feeRate) {
19195
19334
  if (pendingNodes.length > 0) {
19196
19335
  const txs = await resolver.getVirtualTxs(pendingNodes.map((n) => n.txid));
19197
19336
  for (const psbt of txs) {
19198
- psbts.set(chunkOWCPXRGP_cjs.Transaction.fromPSBT(base.base64.decode(psbt)).id, psbt);
19337
+ psbts.set(chunkKUN5ZRMW_cjs.Transaction.fromPSBT(base.base64.decode(psbt)).id, psbt);
19199
19338
  }
19200
19339
  }
19201
19340
  const childVsize = Number(
@@ -19231,7 +19370,7 @@ async function computeExitLayout(opts, feeRate) {
19231
19370
  try {
19232
19371
  const resolved = await resolveUnilateralPath({
19233
19372
  vtxo,
19234
- scriptHex: base.hex.encode(chunkOWCPXRGP_cjs.VtxoScript.decode(vtxo.tapTree).pkScript),
19373
+ scriptHex: base.hex.encode(chunkKUN5ZRMW_cjs.VtxoScript.decode(vtxo.tapTree).pkScript),
19235
19374
  contractRepository: wallet.contractRepository,
19236
19375
  walletPubKeyHex,
19237
19376
  currentTime: Date.now()
@@ -19250,7 +19389,7 @@ async function computeExitLayout(opts, feeRate) {
19250
19389
  });
19251
19390
  continue;
19252
19391
  }
19253
- const t = chunkOWCPXRGP_cjs.sequenceToTimelock(resolved.selection.sequence);
19392
+ const t = chunkKUN5ZRMW_cjs.sequenceToTimelock(resolved.selection.sequence);
19254
19393
  const delay = { type: t.type, value: Number(t.value) };
19255
19394
  infos.push({ outpoint, value: vtxo.value, sweepFee, path: resolved.label, delay });
19256
19395
  sweeps.push({ vtxo, resolved, sweepFee, delay });
@@ -19589,7 +19728,7 @@ async function prepare(opts) {
19589
19728
  txid: sweep.vtxo.txid,
19590
19729
  vout: sweep.vtxo.vout,
19591
19730
  value: sweep.vtxo.value,
19592
- pkScript: chunkOWCPXRGP_cjs.VtxoScript.decode(sweep.vtxo.tapTree).pkScript
19731
+ pkScript: chunkKUN5ZRMW_cjs.VtxoScript.decode(sweep.vtxo.tapTree).pkScript
19593
19732
  },
19594
19733
  path: sweep.resolved.selection,
19595
19734
  outputAddress: opts.sweepAddress,
@@ -19674,7 +19813,7 @@ async function prepare(opts) {
19674
19813
  if (newFee <= splitterFee) break;
19675
19814
  splitterFee = newFee;
19676
19815
  }
19677
- const splitter = new chunkOWCPXRGP_cjs.Transaction({ version: 2 });
19816
+ const splitter = new chunkKUN5ZRMW_cjs.Transaction({ version: 2 });
19678
19817
  for (const coin of selected.inputs) {
19679
19818
  splitter.addInput({
19680
19819
  txid: coin.txid,
@@ -19817,42 +19956,42 @@ var UnilateralExit = {
19817
19956
  // src/arkade/index.ts
19818
19957
  var arkade_exports = {};
19819
19958
  chunk5BLDMQED_cjs.__export(arkade_exports, {
19820
- ARKADE_OP: () => chunkV2TOHHPW_cjs.ARKADE_OP,
19821
- ARKADE_OPCODES: () => chunkV2TOHHPW_cjs.ARKADE_OPCODES,
19822
- ARKADE_OPCODE_NAMES: () => chunkV2TOHHPW_cjs.ARKADE_OPCODE_NAMES,
19823
- ARKADE_OPCODE_VALUES: () => chunkV2TOHHPW_cjs.ARKADE_OPCODE_VALUES,
19824
- ARKADE_OPS: () => chunkV2TOHHPW_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,
19825
19964
  Arkade: () => Arkade,
19826
19965
  ArkadeContract: () => ArkadeContract,
19827
- ArkadeProgramScript: () => chunkV2TOHHPW_cjs.ArkadeProgramScript,
19828
- ArkadeScript: () => chunkV2TOHHPW_cjs.ArkadeScript,
19966
+ ArkadeProgramScript: () => chunkOWTKOMJZ_cjs.ArkadeProgramScript,
19967
+ ArkadeScript: () => chunkOWTKOMJZ_cjs.ArkadeScript,
19829
19968
  ArkadeTransactionBuilder: () => ArkadeTransactionBuilder,
19830
- BigNum: () => chunkV2TOHHPW_cjs.bignum_exports,
19969
+ BigNum: () => chunkOWTKOMJZ_cjs.bignum_exports,
19831
19970
  OP: () => btcSigner.OP,
19832
- OPCODE_NAMES: () => chunkV2TOHHPW_cjs.OPCODE_NAMES,
19833
- OPCODE_VALUES: () => chunkV2TOHHPW_cjs.OPCODE_VALUES,
19834
- SUPPORTED_PROGRAM_VERSION: () => chunkV2TOHHPW_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,
19835
19974
  Script: () => btcSigner.Script,
19836
- arkadeScriptHash: () => chunkV2TOHHPW_cjs.arkadeScriptHash,
19837
- arkadeWitnessHash: () => chunkV2TOHHPW_cjs.arkadeWitnessHash,
19838
- asmToBytes: () => chunkV2TOHHPW_cjs.asmToBytes,
19839
- bytesToASM: () => chunkV2TOHHPW_cjs.bytesToASM,
19840
- computeArkadeScriptPublicKey: () => chunkV2TOHHPW_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,
19841
19980
  createArkadeBatchHandler: () => createArkadeBatchHandler,
19842
- deserializeArkadeContractParams: () => chunkV2TOHHPW_cjs.deserializeArkadeContractParams,
19843
- fromASM: () => chunkV2TOHHPW_cjs.fromASM,
19844
- getOpcodeName: () => chunkV2TOHHPW_cjs.getOpcodeName,
19845
- getOpcodeValue: () => chunkV2TOHHPW_cjs.getOpcodeValue,
19846
- parseArtifact: () => chunkV2TOHHPW_cjs.parseArtifact,
19847
- resolveAsm: () => chunkV2TOHHPW_cjs.resolveAsm,
19848
- serializeArkadeContractParams: () => chunkV2TOHHPW_cjs.serializeArkadeContractParams,
19849
- stringifyArtifact: () => chunkV2TOHHPW_cjs.stringifyArtifact,
19850
- toASM: () => chunkV2TOHHPW_cjs.toASM,
19851
- validateProgram: () => chunkV2TOHHPW_cjs.validateProgram,
19852
- witnessRefToBytes: () => chunkV2TOHHPW_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
19853
19992
  });
19854
- var isVtxoCoin = (input) => chunkOWCPXRGP_cjs.isVirtualCoin(input);
19855
- 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) {
19856
19995
  let batchId;
19857
19996
  let sweepTapTreeRoot;
19858
19997
  let validatedCommitmentTxid;
@@ -19862,15 +20001,19 @@ function createArkadeBatchHandler(intentId, inputs, signer, signedProof, message
19862
20001
  const intentIdHash = utils_js.sha256(utf8IntentId);
19863
20002
  const intentIdHashStr = base.hex.encode(intentIdHash);
19864
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
+ );
19865
20012
  await arkProvider.confirmRegistration(intentId);
19866
20013
  batchId = event.id;
19867
- const sweepTapscript = chunkOWCPXRGP_cjs.CSVMultisigTapscript.encode({
19868
- timelock: {
19869
- value: event.batchExpiry,
19870
- // BIP-65: values >= 512 are interpreted as seconds, below as blocks
19871
- type: event.batchExpiry >= 512n ? "seconds" : "blocks"
19872
- },
19873
- 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)]
19874
20017
  }).script;
19875
20018
  sweepTapTreeRoot = payment_js.tapLeafHash(sweepTapscript);
19876
20019
  return { skip: false };
@@ -19882,7 +20025,7 @@ function createArkadeBatchHandler(intentId, inputs, signer, signedProof, message
19882
20025
  if (!xOnlyPubkeys.includes(base.hex.encode(xonlySignerPubKey))) {
19883
20026
  return { skip: true };
19884
20027
  }
19885
- const commitmentTx = chunkOWCPXRGP_cjs.Transaction.fromPSBT(base.base64.decode(event.unsignedCommitmentTx));
20028
+ const commitmentTx = chunkKUN5ZRMW_cjs.Transaction.fromPSBT(base.base64.decode(event.unsignedCommitmentTx));
19886
20029
  validateVtxoTxGraph(vtxoTree, commitmentTx, sweepTapTreeRoot);
19887
20030
  if (recipients && recipients.length > 0) {
19888
20031
  validateBatchRecipients(commitmentTx, vtxoTree.leaves(), recipients, network);
@@ -19914,7 +20057,7 @@ function createArkadeBatchHandler(intentId, inputs, signer, signedProof, message
19914
20057
  if (connectorTree) {
19915
20058
  validateConnectorsTxGraph(event.commitmentTx, connectorTree);
19916
20059
  }
19917
- let commitmentPsbt = chunkOWCPXRGP_cjs.Transaction.fromPSBT(base.base64.decode(event.commitmentTx));
20060
+ let commitmentPsbt = chunkKUN5ZRMW_cjs.Transaction.fromPSBT(base.base64.decode(event.commitmentTx));
19918
20061
  assertFinalCommitmentMatchesValidated(
19919
20062
  commitmentPsbt,
19920
20063
  validatedCommitmentTxid,
@@ -19949,7 +20092,7 @@ function createArkadeBatchHandler(intentId, inputs, signer, signedProof, message
19949
20092
  boardingIndices.push(boardingIdx);
19950
20093
  continue;
19951
20094
  }
19952
- if (chunkOWCPXRGP_cjs.isRecoverable(input) || isSubdust(input, info.dust)) {
20095
+ if (chunkKUN5ZRMW_cjs.isRecoverable(input) || isSubdust(input, info.dust)) {
19953
20096
  continue;
19954
20097
  }
19955
20098
  if (connectorIndex >= connectorLeaves.length) {
@@ -19970,7 +20113,7 @@ function createArkadeBatchHandler(intentId, inputs, signer, signedProof, message
19970
20113
  index: input.vout,
19971
20114
  witnessUtxo: {
19972
20115
  amount: BigInt(input.value),
19973
- script: chunkOWCPXRGP_cjs.VtxoScript.decode(input.tapTree).pkScript
20116
+ script: chunkKUN5ZRMW_cjs.VtxoScript.decode(input.tapTree).pkScript
19974
20117
  },
19975
20118
  sighashType: btcSigner.SigHash.DEFAULT,
19976
20119
  tapLeafScript: [input.forfeitTapLeafScript]
@@ -20053,7 +20196,7 @@ var Arkade = class _Arkade {
20053
20196
  static async connect(opts) {
20054
20197
  const info = await opts.arkade.getInfo();
20055
20198
  const serverKey = base.hex.decode(info.signerPubkey).slice(1);
20056
- const checkpoint = chunkOWCPXRGP_cjs.CSVMultisigTapscript.decode(base.hex.decode(info.checkpointTapscript));
20199
+ const checkpoint = chunkKUN5ZRMW_cjs.CSVMultisigTapscript.decode(base.hex.decode(info.checkpointTapscript));
20057
20200
  let emulatorKey;
20058
20201
  if (opts.emulator) {
20059
20202
  const eInfo = await opts.emulator.getInfo();
@@ -20067,7 +20210,7 @@ var Arkade = class _Arkade {
20067
20210
  return new _Arkade({
20068
20211
  arkProvider: opts.arkade,
20069
20212
  emulator: opts.emulator,
20070
- network: opts.network ?? chunkOWCPXRGP_cjs.DEFAULT_NETWORK,
20213
+ network: opts.network ?? chunkKUN5ZRMW_cjs.DEFAULT_NETWORK,
20071
20214
  serverKey,
20072
20215
  emulatorKey,
20073
20216
  checkpoint,
@@ -20088,7 +20231,7 @@ var Arkade = class _Arkade {
20088
20231
  * key respectively; explicit args always win.
20089
20232
  */
20090
20233
  contract(program, args = {}) {
20091
- const declared = (program.params ?? []).map(chunkV2TOHHPW_cjs.inputName);
20234
+ const declared = (program.params ?? []).map(chunkOWTKOMJZ_cjs.inputName);
20092
20235
  if (declared.includes("server") && args.server === void 0) {
20093
20236
  args = { ...args, server: this.serverKey };
20094
20237
  }
@@ -20108,7 +20251,7 @@ var ArkadeContract = class _ArkadeContract {
20108
20251
  userKey: client.userKey,
20109
20252
  emulatorKey: client.emulatorKey
20110
20253
  };
20111
- this.vtxoScript = new chunkV2TOHHPW_cjs.ArkadeProgramScript(program, args, this.keys);
20254
+ this.vtxoScript = new chunkOWTKOMJZ_cjs.ArkadeProgramScript(program, args, this.keys);
20112
20255
  this.tapTree = this.vtxoScript.encode();
20113
20256
  this.compiled = this.vtxoScript.compiled;
20114
20257
  }
@@ -20136,7 +20279,7 @@ var ArkadeContract = class _ArkadeContract {
20136
20279
  `ArkadeContract.fromContract: expected contract type 'arkade', got '${contract.type}'`
20137
20280
  );
20138
20281
  }
20139
- const typed = chunkV2TOHHPW_cjs.deserializeArkadeContractParams(contract.params);
20282
+ const typed = chunkOWTKOMJZ_cjs.deserializeArkadeContractParams(contract.params);
20140
20283
  return new _ArkadeContract(client, typed.program, typed.args, {
20141
20284
  serverKey: typed.serverKey,
20142
20285
  userKey: typed.userKey,
@@ -20177,7 +20320,7 @@ var ArkadeContract = class _ArkadeContract {
20177
20320
  toContractParams() {
20178
20321
  return {
20179
20322
  type: "arkade",
20180
- params: chunkV2TOHHPW_cjs.serializeArkadeContractParams({
20323
+ params: chunkOWTKOMJZ_cjs.serializeArkadeContractParams({
20181
20324
  program: this.program,
20182
20325
  args: this.args,
20183
20326
  serverKey: this.keys.serverKey,
@@ -20222,13 +20365,13 @@ var ArkadeContract = class _ArkadeContract {
20222
20365
  const [registered] = await manager.getContracts({ script: scriptHex });
20223
20366
  if (registered) {
20224
20367
  const [withVtxos] = await manager.getContractsWithVtxos({ script: scriptHex });
20225
- return (withVtxos?.vtxos ?? []).filter((v) => !chunkOWCPXRGP_cjs.hasTerminalSpend(v));
20368
+ return (withVtxos?.vtxos ?? []).filter((v) => !chunkKUN5ZRMW_cjs.hasTerminalSpend(v));
20226
20369
  }
20227
20370
  }
20228
20371
  if (!this.client.indexer) {
20229
20372
  throw new Error("ArkadeContract.getUtxos: an indexer is required");
20230
20373
  }
20231
- const { vtxos } = await chunkOWCPXRGP_cjs.getNormalizedVtxos(this.client.indexer, {
20374
+ const { vtxos } = await chunkKUN5ZRMW_cjs.getNormalizedVtxos(this.client.indexer, {
20232
20375
  scripts: [scriptHex],
20233
20376
  spendableOnly: true
20234
20377
  });
@@ -20330,12 +20473,12 @@ var ArkadeTransactionBuilder = class {
20330
20473
  this.contract.client.checkpoint
20331
20474
  );
20332
20475
  if (coin.sourceTx) {
20333
- chunkOWCPXRGP_cjs.setArkPsbtField(arkTx, 0, chunkOWCPXRGP_cjs.PrevArkTxField, coin.sourceTx);
20476
+ chunkKUN5ZRMW_cjs.setArkPsbtField(arkTx, 0, chunkKUN5ZRMW_cjs.PrevArkTxField, coin.sourceTx);
20334
20477
  }
20335
20478
  const condition = (def.tapscript.witness ?? []).map((w) => this.witnessBytes(w));
20336
20479
  if (condition.length > 0) {
20337
- chunkOWCPXRGP_cjs.setArkPsbtField(arkTx, 0, chunkOWCPXRGP_cjs.ConditionWitness, condition);
20338
- chunkOWCPXRGP_cjs.setArkPsbtField(checkpoints[0], 0, chunkOWCPXRGP_cjs.ConditionWitness, condition);
20480
+ chunkKUN5ZRMW_cjs.setArkPsbtField(arkTx, 0, chunkKUN5ZRMW_cjs.ConditionWitness, condition);
20481
+ chunkKUN5ZRMW_cjs.setArkPsbtField(checkpoints[0], 0, chunkKUN5ZRMW_cjs.ConditionWitness, condition);
20339
20482
  }
20340
20483
  const packets = [];
20341
20484
  if (this.assetSpecs.length > 0) {
@@ -20374,7 +20517,7 @@ var ArkadeTransactionBuilder = class {
20374
20517
  base.base64.encode(signedArk2.toPSBT()),
20375
20518
  signedCps.map((c) => base.base64.encode(c.toPSBT()))
20376
20519
  );
20377
- const txid = chunkOWCPXRGP_cjs.Transaction.fromPSBT(base.base64.decode(res2.signedArkTx)).id;
20520
+ const txid = chunkKUN5ZRMW_cjs.Transaction.fromPSBT(base.base64.decode(res2.signedArkTx)).id;
20378
20521
  return {
20379
20522
  txid,
20380
20523
  signedArkTx: res2.signedArkTx,
@@ -20433,23 +20576,23 @@ var ArkadeTransactionBuilder = class {
20433
20576
  }
20434
20577
  buildAssetPacket() {
20435
20578
  const groups = this.assetSpecs.map((s) => {
20436
- const id = typeof s.assetId === "string" ? chunkG7DOBFQN_cjs.AssetId.fromString(s.assetId) : chunkG7DOBFQN_cjs.AssetId.fromBytes(s.assetId);
20437
- return chunkG7DOBFQN_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(
20438
20581
  id,
20439
20582
  null,
20440
- s.inputs.map((i) => chunkG7DOBFQN_cjs.AssetInput.create(i.vin, i.amount)),
20441
- s.outputs.map((o) => chunkG7DOBFQN_cjs.AssetOutput.create(o.vout, o.amount)),
20442
- (s.metadata ?? []).map((m) => chunkG7DOBFQN_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))
20443
20586
  );
20444
20587
  });
20445
- return chunkG7DOBFQN_cjs.Packet.create(groups);
20588
+ return chunkYK6NP5KX_cjs.Packet.create(groups);
20446
20589
  }
20447
20590
  witnessBytes(ref) {
20448
- return chunkV2TOHHPW_cjs.witnessRefToBytes(ref, this.args, this.contract.args);
20591
+ return chunkOWTKOMJZ_cjs.witnessRefToBytes(ref, this.args, this.contract.args);
20449
20592
  }
20450
20593
  };
20451
20594
  function bindInputs(fn, callArgs) {
20452
- const names = (fn.def.inputs ?? []).map(chunkV2TOHHPW_cjs.inputName);
20595
+ const names = (fn.def.inputs ?? []).map(chunkOWTKOMJZ_cjs.inputName);
20453
20596
  if (callArgs.length !== names.length) {
20454
20597
  throw new Error(`${fn.name}: expected ${names.length} argument(s), got ${callArgs.length}`);
20455
20598
  }
@@ -20856,7 +20999,7 @@ function decodeArkContract(encoded) {
20856
20999
  }
20857
21000
  function contractFromArkContract(encoded, options = {}) {
20858
21001
  const parsed = decodeArkContract(encoded);
20859
- const handler = chunkV2TOHHPW_cjs.contractHandlers.get(parsed.type);
21002
+ const handler = chunkOWTKOMJZ_cjs.contractHandlers.get(parsed.type);
20860
21003
  if (!handler) {
20861
21004
  throw new Error(`No handler registered for contract type '${parsed.type}'`);
20862
21005
  }
@@ -20870,9 +21013,9 @@ function contractFromArkContract(encoded, options = {}) {
20870
21013
  metadata: options.metadata
20871
21014
  };
20872
21015
  }
20873
- function contractFromArkContractWithAddress(encoded, serverPubKey, addressPrefix = chunkOWCPXRGP_cjs.DEFAULT_NETWORK.hrp, options = {}) {
21016
+ function contractFromArkContractWithAddress(encoded, serverPubKey, addressPrefix = chunkKUN5ZRMW_cjs.DEFAULT_NETWORK.hrp, options = {}) {
20874
21017
  const parsed = decodeArkContract(encoded);
20875
- const handler = chunkV2TOHHPW_cjs.contractHandlers.getOrThrow(parsed.type);
21018
+ const handler = chunkOWTKOMJZ_cjs.contractHandlers.getOrThrow(parsed.type);
20876
21019
  const params = parsed.data;
20877
21020
  const vtxoScript = handler.createScript(params);
20878
21021
  return {
@@ -20905,6 +21048,8 @@ exports.ContractRepositoryImpl = ContractRepositoryImpl;
20905
21048
  exports.ContractWatcher = ContractWatcher;
20906
21049
  exports.DB_VERSION = DB_VERSION;
20907
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;
20908
21053
  exports.DelegateManagerImpl = DelegateManagerImpl;
20909
21054
  exports.DelegateNotConfiguredError = DelegateNotConfiguredError;
20910
21055
  exports.DelegatorManagerImpl = DelegatorManagerImpl;
@@ -20942,6 +21087,8 @@ exports.MnemonicIdentity = MnemonicIdentity;
20942
21087
  exports.OnchainWallet = OnchainWallet;
20943
21088
  exports.P2A = P2A;
20944
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;
20945
21092
  exports.Ramps = Ramps;
20946
21093
  exports.ReadonlyAssetManager = ReadonlyAssetManager;
20947
21094
  exports.ReadonlyDescriptorIdentity = ReadonlyDescriptorIdentity;
@@ -20970,9 +21117,12 @@ exports.WsElectrumChainSource = WsElectrumChainSource;
20970
21117
  exports.arkRail = arkRail;
20971
21118
  exports.arkTarget = arkTarget;
20972
21119
  exports.arkade_exports = arkade_exports;
21120
+ exports.assertFinalCommitmentMatchesValidated = assertFinalCommitmentMatchesValidated;
20973
21121
  exports.assertIntentIdUnique = assertIntentIdUnique;
20974
21122
  exports.assertSendableAmount = assertSendableAmount;
20975
21123
  exports.assertSubmittedArkTxid = assertSubmittedArkTxid;
21124
+ exports.assertValidBatchExpiry = assertValidBatchExpiry;
21125
+ exports.assertValidServerUnrollScript = assertValidServerUnrollScript;
20976
21126
  exports.assetMintResolver = assetMintResolver;
20977
21127
  exports.boardingResolver = boardingResolver;
20978
21128
  exports.btcTarget = btcTarget;
@@ -20990,6 +21140,8 @@ exports.createDefaultActivityRegistry = createDefaultActivityRegistry;
20990
21140
  exports.createDefaultPaymentRouter = createDefaultPaymentRouter;
20991
21141
  exports.createExitChainResolver = createExitChainResolver;
20992
21142
  exports.decodeArkContract = decodeArkContract;
21143
+ exports.defaultBatchExpiryPolicy = defaultBatchExpiryPolicy;
21144
+ exports.defaultCheckpointExitDelayPolicy = defaultCheckpointExitDelayPolicy;
20993
21145
  exports.deserializeAssets = deserializeAssets;
20994
21146
  exports.deserializeExitPackage = deserializeExitPackage;
20995
21147
  exports.deserializeUtxo = deserializeUtxo;
@@ -21026,6 +21178,8 @@ exports.migrateWalletRepository = migrateWalletRepository;
21026
21178
  exports.onchainRail = onchainRail;
21027
21179
  exports.openDatabase = openDatabase;
21028
21180
  exports.requiresMigration = requiresMigration;
21181
+ exports.resolveBatchExpiryPolicy = resolveBatchExpiryPolicy;
21182
+ exports.resolveCheckpointExitDelayPolicy = resolveCheckpointExitDelayPolicy;
21029
21183
  exports.resolveSendAmount = resolveSendAmount;
21030
21184
  exports.rollbackMigration = rollbackMigration;
21031
21185
  exports.saveVtxosForContract = saveVtxosForContract;
@@ -21040,10 +21194,11 @@ exports.setupServiceWorker = setupServiceWorker;
21040
21194
  exports.signerSetFromInfo = signerSetFromInfo;
21041
21195
  exports.toXOnlySignerHex = toXOnlySignerHex;
21042
21196
  exports.tryResolveSendAmount = tryResolveSendAmount;
21197
+ exports.validateBatchRecipients = validateBatchRecipients;
21043
21198
  exports.validateConnectorsTxGraph = validateConnectorsTxGraph;
21044
21199
  exports.validateVtxoTxGraph = validateVtxoTxGraph;
21045
21200
  exports.verifyTapscriptSignatures = verifyTapscriptSignatures;
21046
21201
  exports.waitForIncomingFunds = waitForIncomingFunds;
21047
21202
  exports.warnAndFilterVtxosForScript = warnAndFilterVtxosForScript;
21048
- //# sourceMappingURL=chunk-ZPL34T2Q.cjs.map
21049
- //# sourceMappingURL=chunk-ZPL34T2Q.cjs.map
21203
+ //# sourceMappingURL=chunk-KEG4AAKX.cjs.map
21204
+ //# sourceMappingURL=chunk-KEG4AAKX.cjs.map