@arkade-os/sdk 0.4.61 → 0.4.62

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/{asyncStorageTaskQueue-BWDxp3Dr.d.cts → asyncStorageTaskQueue-B53mOTCw.d.cts} +1 -1
  8. package/dist/{asyncStorageTaskQueue-Cq9FpKv6.d.ts → asyncStorageTaskQueue-Df-CTfTE.d.ts} +1 -1
  9. package/dist/{chunk-AUEXB42T.js → chunk-2IZW6AEK.js} +247 -84
  10. package/dist/chunk-2IZW6AEK.js.map +1 -0
  11. package/dist/{chunk-SF5NKAUA.cjs → chunk-G53HASDV.cjs} +48 -48
  12. package/dist/{chunk-SF5NKAUA.cjs.map → chunk-G53HASDV.cjs.map} +1 -1
  13. package/dist/{chunk-GDI2A65Z.js → chunk-H2ZAJOQA.js} +4 -4
  14. package/dist/{chunk-GDI2A65Z.js.map → chunk-H2ZAJOQA.js.map} +1 -1
  15. package/dist/{chunk-2JHN5RCY.cjs → chunk-I6EDUE75.cjs} +17 -17
  16. package/dist/{chunk-2JHN5RCY.cjs.map → chunk-I6EDUE75.cjs.map} +1 -1
  17. package/dist/{chunk-XLHN5L2O.js → chunk-I7RLG6VX.js} +4 -4
  18. package/dist/{chunk-XLHN5L2O.js.map → chunk-I7RLG6VX.js.map} +1 -1
  19. package/dist/{chunk-6O5OLYTZ.js → chunk-L7S5KC5B.js} +3 -3
  20. package/dist/{chunk-6O5OLYTZ.js.map → chunk-L7S5KC5B.js.map} +1 -1
  21. package/dist/{chunk-FNCQJLR2.cjs → chunk-OH2XLTXE.cjs} +3 -3
  22. package/dist/{chunk-FNCQJLR2.cjs.map → chunk-OH2XLTXE.cjs.map} +1 -1
  23. package/dist/{chunk-XMRB74HA.cjs → chunk-PWWA4DBL.cjs} +10 -10
  24. package/dist/{chunk-XMRB74HA.cjs.map → chunk-PWWA4DBL.cjs.map} +1 -1
  25. package/dist/{chunk-XFYFREPH.cjs → chunk-QRSR4HV4.cjs} +17 -17
  26. package/dist/{chunk-XFYFREPH.cjs.map → chunk-QRSR4HV4.cjs.map} +1 -1
  27. package/dist/{chunk-YVQNHELA.js → chunk-RMBI6P4N.js} +3 -3
  28. package/dist/{chunk-YVQNHELA.js.map → chunk-RMBI6P4N.js.map} +1 -1
  29. package/dist/{chunk-PVY6DMN5.js → chunk-URT2RVGB.js} +3 -3
  30. package/dist/{chunk-PVY6DMN5.js.map → chunk-URT2RVGB.js.map} +1 -1
  31. package/dist/{chunk-3NUDA3MB.cjs → chunk-Z2OZMKFV.cjs} +641 -476
  32. package/dist/chunk-Z2OZMKFV.cjs.map +1 -0
  33. package/dist/contracts/handlers/index.cjs +9 -9
  34. package/dist/contracts/handlers/index.d.cts +3 -3
  35. package/dist/contracts/handlers/index.d.ts +3 -3
  36. package/dist/contracts/handlers/index.js +2 -2
  37. package/dist/{delegate-BySzD37I.d.ts → delegate-BjYJJsml.d.ts} +1 -1
  38. package/dist/{delegate-C4Rl6h9l.d.cts → delegate-CC1gcvuC.d.cts} +1 -1
  39. package/dist/{index-C29VNcxC.d.ts → index-C888wFEV.d.ts} +2 -2
  40. package/dist/{index-BcRCHnzN.d.cts → index-CwBr7qzV.d.cts} +71 -12
  41. package/dist/{index-BcRCHnzN.d.ts → index-CwBr7qzV.d.ts} +71 -12
  42. package/dist/{index-Butfkm-K.d.cts → index-Cz5_WaQP.d.cts} +2 -2
  43. package/dist/index.cjs +274 -266
  44. package/dist/index.d.cts +105 -19
  45. package/dist/index.d.ts +105 -19
  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-BTq3rMpI.d.cts → taskRunner-BMUndClz.d.cts} +1 -1
  56. package/dist/{taskRunner-DxMJYJ7Y.d.ts → taskRunner-DZWUsSzA.d.ts} +1 -1
  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 +16 -16
  62. package/dist/wallet/expo/index.cjs.map +1 -1
  63. package/dist/wallet/expo/index.d.cts +5 -5
  64. package/dist/wallet/expo/index.d.ts +5 -5
  65. package/dist/wallet/expo/index.js +7 -7
  66. package/dist/wallet/expo/index.js.map +1 -1
  67. package/dist/{wallet-DrSsUden.d.cts → wallet-Dpjx6CJ7.d.ts} +14 -5
  68. package/dist/{wallet-BVIfg2ic.d.ts → wallet-H3f14est.d.cts} +14 -5
  69. package/dist/worker/expo/index.cjs +9 -9
  70. package/dist/worker/expo/index.d.cts +4 -4
  71. package/dist/worker/expo/index.d.ts +4 -4
  72. package/dist/worker/expo/index.js +5 -5
  73. package/package.json +1 -1
  74. package/dist/chunk-3NUDA3MB.cjs.map +0 -1
  75. package/dist/chunk-AUEXB42T.js.map +0 -1
@@ -1,8 +1,8 @@
1
1
  'use strict';
2
2
 
3
- var chunk2JHN5RCY_cjs = require('./chunk-2JHN5RCY.cjs');
4
- var chunkSF5NKAUA_cjs = require('./chunk-SF5NKAUA.cjs');
5
- var chunkFNCQJLR2_cjs = require('./chunk-FNCQJLR2.cjs');
3
+ var chunkI6EDUE75_cjs = require('./chunk-I6EDUE75.cjs');
4
+ var chunkG53HASDV_cjs = require('./chunk-G53HASDV.cjs');
5
+ var chunkOH2XLTXE_cjs = require('./chunk-OH2XLTXE.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 = chunkFNCQJLR2_cjs.getArkPsbtFields(tx.root, 0, chunkFNCQJLR2_cjs.CosignerPublicKey).map(
191
+ const cosigners = chunkOH2XLTXE_cjs.getArkPsbtFields(tx.root, 0, chunkOH2XLTXE_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 = chunkFNCQJLR2_cjs.getArkPsbtFields(g.root, 0, chunkFNCQJLR2_cjs.CosignerPublicKey).map((c) => c.key);
243
+ const cosigners = chunkOH2XLTXE_cjs.getArkPsbtFields(g.root, 0, chunkOH2XLTXE_cjs.CosignerPublicKey).map((c) => c.key);
244
244
  const { finalKey } = aggregateKeys(cosigners, true, {
245
245
  taprootTweak: this.scriptRoot
246
246
  });
@@ -354,6 +354,18 @@ var SingleKey = class _SingleKey {
354
354
  if (signatureType === "ecdsa") return secp256k1.signAsync(message, this.key, { prehash: false });
355
355
  return secp256k1.schnorr.signAsync(message, this.key);
356
356
  }
357
+ /**
358
+ * BIP-340 sign `messageHash` with aux_rand = 0, so the signature — and
359
+ * anything derived from it — is reproducible from the key alone.
360
+ *
361
+ * What lets a static wallet derive a swap preimage instead of storing one
362
+ * (see `wallet/contractSecrets.ts`). Deliberately NOT `signMessage`, whose
363
+ * schnorr branch draws a random aux_rand: a preimage derived from that is
364
+ * unrecoverable, and the loss would only surface at claim time.
365
+ */
366
+ async signSchnorrDeterministic(messageHash) {
367
+ return secp256k1.schnorr.signAsync(messageHash, this.key, new Uint8Array(32));
368
+ }
357
369
  async toReadonly() {
358
370
  return new ReadonlySingleKey(await this.compressedPublicKey());
359
371
  }
@@ -419,7 +431,7 @@ var SeedIdentity = class _SeedIdentity {
419
431
  let network;
420
432
  if ("descriptor" in opts && typeof opts.descriptor === "string") {
421
433
  descriptor = opts.descriptor;
422
- network = chunkSF5NKAUA_cjs.isMainnetDescriptor(descriptor) ? descriptorsScure.networks.bitcoin : descriptorsScure.networks.testnet;
434
+ network = chunkG53HASDV_cjs.isMainnetDescriptor(descriptor) ? descriptorsScure.networks.bitcoin : descriptorsScure.networks.testnet;
423
435
  } else {
424
436
  network = opts.isMainnet ?? true ? descriptorsScure.networks.bitcoin : descriptorsScure.networks.testnet;
425
437
  descriptor = descriptorsScure.scriptExpressions.trBIP32({
@@ -483,6 +495,19 @@ var SeedIdentity = class _SeedIdentity {
483
495
  async signMessage(message, signatureType = "schnorr") {
484
496
  return this.signMessageWithKey(this.derivedKey, message, signatureType);
485
497
  }
498
+ /**
499
+ * BIP-340 sign `messageHash` with this identity's own key, aux_rand = 0.
500
+ *
501
+ * The descriptor-less sibling of
502
+ * {@link signSchnorrDeterministicWithDescriptor}, for an `auto`-mode wallet
503
+ * whose bare `tr(pubkey)` resolves to the identity itself rather than to a
504
+ * {@link DescriptorIdentity}. Deliberately NOT routed through
505
+ * `signMessage`, whose schnorr branch draws a random aux_rand and would
506
+ * make the "deterministic" signature unreproducible.
507
+ */
508
+ async signSchnorrDeterministic(messageHash) {
509
+ return secp256k1.schnorr.signAsync(messageHash, this.derivedKey, new Uint8Array(32));
510
+ }
486
511
  signerSession() {
487
512
  return TreeSignerSession.random();
488
513
  }
@@ -504,7 +529,7 @@ var SeedIdentity = class _SeedIdentity {
504
529
  * `StaticDescriptorProvider` for legacy single-key wallets.
505
530
  */
506
531
  isOurs(descriptor) {
507
- return chunkSF5NKAUA_cjs.descriptorIsOurs(descriptor, this.descriptor, utils_js.pubSchnorr(this.derivedKey));
532
+ return chunkG53HASDV_cjs.descriptorIsOurs(descriptor, this.descriptor, utils_js.pubSchnorr(this.derivedKey));
508
533
  }
509
534
  /**
510
535
  * Signs each request with the key derived from its descriptor.
@@ -553,7 +578,7 @@ var SeedIdentity = class _SeedIdentity {
553
578
  }
554
579
  // ── internal helpers ─────────────────────────────────────────────
555
580
  derivePrivateKeyForDescriptor(descriptor) {
556
- const network = chunkSF5NKAUA_cjs.isMainnetDescriptor(descriptor) ? descriptorsScure.networks.bitcoin : descriptorsScure.networks.testnet;
581
+ const network = chunkG53HASDV_cjs.isMainnetDescriptor(descriptor) ? descriptorsScure.networks.bitcoin : descriptorsScure.networks.testnet;
557
582
  const expansion = descriptorsScure.expand({ descriptor, network });
558
583
  if (expansion.isRanged) {
559
584
  throw new Error(
@@ -639,7 +664,7 @@ var ReadonlyDescriptorIdentity = class _ReadonlyDescriptorIdentity {
639
664
  */
640
665
  descriptor;
641
666
  constructor(descriptor) {
642
- const network = chunkSF5NKAUA_cjs.isMainnetDescriptor(descriptor) ? descriptorsScure.networks.bitcoin : descriptorsScure.networks.testnet;
667
+ const network = chunkG53HASDV_cjs.isMainnetDescriptor(descriptor) ? descriptorsScure.networks.bitcoin : descriptorsScure.networks.testnet;
643
668
  let expansion;
644
669
  try {
645
670
  expansion = descriptorsScure.expand({ descriptor, network, index: 0 });
@@ -689,7 +714,7 @@ var ReadonlyDescriptorIdentity = class _ReadonlyDescriptorIdentity {
689
714
  * `StaticDescriptorProvider` for legacy single-key wallets.
690
715
  */
691
716
  isOurs(descriptor) {
692
- return chunkSF5NKAUA_cjs.descriptorIsOurs(descriptor, this.descriptor, this.indexZero.pubkey);
717
+ return chunkG53HASDV_cjs.descriptorIsOurs(descriptor, this.descriptor, this.indexZero.pubkey);
693
718
  }
694
719
  };
695
720
  function serializeSeedOwnedSigningIdentity(identity) {
@@ -851,10 +876,10 @@ var DescriptorIdentity = class {
851
876
  this.base = base;
852
877
  }
853
878
  async xOnlyPublicKey() {
854
- return chunkSF5NKAUA_cjs.deriveDescriptorLeafPubKey(this.descriptor);
879
+ return chunkG53HASDV_cjs.deriveDescriptorLeafPubKey(this.descriptor);
855
880
  }
856
881
  async compressedPublicKey() {
857
- return chunkSF5NKAUA_cjs.deriveDescriptorLeafCompressedPubKey(this.descriptor);
882
+ return chunkG53HASDV_cjs.deriveDescriptorLeafCompressedPubKey(this.descriptor);
858
883
  }
859
884
  async sign(tx, inputIndexes) {
860
885
  const [signed] = await this.signer.signWithDescriptor([
@@ -916,12 +941,12 @@ var ForeignDescriptorError = class extends Error {
916
941
  };
917
942
  async function resolveDescriptorSigner(descriptor, identity, provider) {
918
943
  const owner = provider?.isOurs(descriptor) ? provider : isHDCapableIdentity(identity) && identity.isOurs(descriptor) ? identity : void 0;
919
- if (owner && chunkSF5NKAUA_cjs.parseHDDescriptor(descriptor)) {
944
+ if (owner && chunkG53HASDV_cjs.parseHDDescriptor(descriptor)) {
920
945
  return new DescriptorIdentity({ descriptor, signer: owner, base: identity });
921
946
  }
922
947
  let key;
923
948
  try {
924
- key = chunkSF5NKAUA_cjs.deriveDescriptorLeafPubKey(descriptor);
949
+ key = chunkG53HASDV_cjs.deriveDescriptorLeafPubKey(descriptor);
925
950
  } catch {
926
951
  throw new ForeignDescriptorError(descriptor);
927
952
  }
@@ -1261,6 +1286,7 @@ var sha256 = /* @__PURE__ */ createHasher(
1261
1286
  /* @__PURE__ */ oidNist(1)
1262
1287
  );
1263
1288
  var ARKADE_SWAP_PREIMAGE_TAG = "Arkade-RFQ-Preimage-v1";
1289
+ var ARKADE_SALTED_PREIMAGE_TAG = "Arkade-Contract-Preimage-Salted-v1";
1264
1290
  function buildPreimageMessage(xonly, index) {
1265
1291
  if (xonly.length !== 32) {
1266
1292
  throw new Error(`x-only pubkey must be 32 bytes, got ${xonly.length}`);
@@ -1275,13 +1301,27 @@ function buildPreimageMessage(xonly, index) {
1275
1301
  new DataView(message.buffer).setUint32(tag.length + 32, index, true);
1276
1302
  return message;
1277
1303
  }
1304
+ function buildSaltedPreimageMessage(xonly, salt) {
1305
+ if (xonly.length !== 32) {
1306
+ throw new Error(`x-only pubkey must be 32 bytes, got ${xonly.length}`);
1307
+ }
1308
+ if (salt.length !== 32) {
1309
+ throw new Error(`preimage salt must be 32 bytes, got ${salt.length}`);
1310
+ }
1311
+ const tag = new TextEncoder().encode(ARKADE_SALTED_PREIMAGE_TAG);
1312
+ const message = new Uint8Array(tag.length + 32 + 32);
1313
+ message.set(tag, 0);
1314
+ message.set(xonly, tag.length);
1315
+ message.set(salt, tag.length + 32);
1316
+ return message;
1317
+ }
1278
1318
  var PREIMAGE_INDEX = 0;
1279
1319
  function isPerArtifactDescriptor(descriptor) {
1280
- return chunkSF5NKAUA_cjs.parseHDDescriptor(descriptor) !== null;
1320
+ return chunkG53HASDV_cjs.parseHDDescriptor(descriptor) !== null;
1281
1321
  }
1282
1322
  async function provisionDescriptor(wallet) {
1283
1323
  const allocated = isHDAllocationCapable(wallet) ? await wallet.getNextSigningDescriptor() : void 0;
1284
- return allocated ?? await chunkSF5NKAUA_cjs.identityDescriptor(wallet.identity);
1324
+ return allocated ?? await chunkG53HASDV_cjs.identityDescriptor(wallet.identity);
1285
1325
  }
1286
1326
  async function provisionRefundKey(wallet) {
1287
1327
  const descriptor = await provisionDescriptor(wallet);
@@ -1293,21 +1333,43 @@ async function provisionClaimSecret(wallet, opts = {}) {
1293
1333
  throw new Error(`preimage must be 32 bytes, got ${opts.preimage.length}`);
1294
1334
  }
1295
1335
  const { descriptor, pubkey } = await provisionRefundKey(wallet);
1296
- const derivable = !opts.preimage && isPerArtifactDescriptor(descriptor);
1297
- const preimage = opts.preimage ?? (derivable ? await derivePreimage(wallet, descriptor) : randomBytes(32));
1336
+ const claim = async () => {
1337
+ if (opts.preimage) return { preimage: opts.preimage, mustPersistPreimage: true };
1338
+ if (isPerArtifactDescriptor(descriptor)) {
1339
+ return {
1340
+ preimage: await derivePreimage(wallet, descriptor),
1341
+ mustPersistPreimage: false
1342
+ };
1343
+ }
1344
+ const preimageSalt2 = randomBytes(32);
1345
+ try {
1346
+ return {
1347
+ preimage: await derivePreimage(wallet, descriptor, preimageSalt2),
1348
+ preimageSalt: preimageSalt2,
1349
+ mustPersistPreimage: false
1350
+ };
1351
+ } catch (cause) {
1352
+ if (cause instanceof ForeignDescriptorError || cause instanceof WalletCannotSignError) {
1353
+ throw cause;
1354
+ }
1355
+ return { preimage: randomBytes(32), mustPersistPreimage: true };
1356
+ }
1357
+ };
1358
+ const { preimage, preimageSalt, mustPersistPreimage } = await claim();
1298
1359
  return {
1299
1360
  descriptor,
1300
1361
  pubkey,
1301
1362
  preimage,
1302
1363
  paymentHash: sha256(preimage),
1303
- mustPersistPreimage: !derivable
1364
+ ...preimageSalt ? { preimageSalt } : {},
1365
+ mustPersistPreimage
1304
1366
  };
1305
1367
  }
1306
1368
  async function contractSigner(wallet, descriptor) {
1307
1369
  const signer = isHDWalletCapable(wallet) ? await wallet.signerForDescriptor(descriptor) : wallet.identity;
1308
1370
  let expected;
1309
1371
  try {
1310
- expected = chunkSF5NKAUA_cjs.deriveDescriptorLeafPubKey(descriptor);
1372
+ expected = chunkG53HASDV_cjs.deriveDescriptorLeafPubKey(descriptor);
1311
1373
  } catch (cause) {
1312
1374
  throw new ForeignDescriptorError(descriptor, { cause });
1313
1375
  }
@@ -1324,33 +1386,33 @@ var WalletCannotSignError = class extends Error {
1324
1386
  descriptor;
1325
1387
  name = "WalletCannotSignError";
1326
1388
  };
1327
- async function contractPreimage(wallet, descriptor, stored) {
1328
- if (stored) {
1329
- if (stored.length !== 32) {
1330
- throw new Error(`stored preimage must be 32 bytes, got ${stored.length}`);
1389
+ async function contractPreimage(wallet, descriptor, opts = {}) {
1390
+ if (opts.stored) {
1391
+ if (opts.stored.length !== 32) {
1392
+ throw new Error(`stored preimage must be 32 bytes, got ${opts.stored.length}`);
1331
1393
  }
1332
- return stored;
1333
- }
1334
- if (!isPerArtifactDescriptor(descriptor)) {
1335
- throw new Error(
1336
- `descriptor ${descriptor} names no single artifact, so its preimage cannot be derived; none was stored`
1337
- );
1394
+ return opts.stored;
1338
1395
  }
1339
- return derivePreimage(wallet, descriptor);
1396
+ if (isPerArtifactDescriptor(descriptor)) return derivePreimage(wallet, descriptor);
1397
+ if (opts.salt) return derivePreimage(wallet, descriptor, opts.salt);
1398
+ throw new Error(
1399
+ `descriptor ${descriptor} names no single artifact, so its preimage cannot be derived; no salt and no stored preimage were given`
1400
+ );
1340
1401
  }
1341
1402
  function isDeterministicSigner(value) {
1342
1403
  if (typeof value !== "object" || value === null) return false;
1343
1404
  const v = value;
1344
1405
  return typeof v.signSchnorrDeterministic === "function" && typeof v.xOnlyPublicKey === "function";
1345
1406
  }
1346
- async function derivePreimage(wallet, descriptor) {
1407
+ async function derivePreimage(wallet, descriptor, salt) {
1347
1408
  const signer = await contractSigner(wallet, descriptor);
1348
1409
  if (!isDeterministicSigner(signer)) {
1349
1410
  throw new Error(
1350
1411
  `wallet cannot sign deterministically for ${descriptor}; its preimage is not derivable`
1351
1412
  );
1352
1413
  }
1353
- const message = buildPreimageMessage(await signer.xOnlyPublicKey(), PREIMAGE_INDEX);
1414
+ const xonly = await signer.xOnlyPublicKey();
1415
+ const message = salt ? buildSaltedPreimageMessage(xonly, salt) : buildPreimageMessage(xonly, PREIMAGE_INDEX);
1354
1416
  try {
1355
1417
  return sha256(await signer.signSchnorrDeterministic(sha256(message)));
1356
1418
  } catch (cause) {
@@ -1526,14 +1588,14 @@ var RestDelegateProvider = class {
1526
1588
  */
1527
1589
  async delegate(intent, forfeitTxs, options) {
1528
1590
  const url = `${this.url}/v1/delegate`;
1529
- const response = await chunkFNCQJLR2_cjs.baseFetch(url, {
1591
+ const response = await chunkOH2XLTXE_cjs.baseFetch(url, {
1530
1592
  method: "POST",
1531
1593
  headers: {
1532
1594
  "Content-Type": "application/json"
1533
1595
  },
1534
1596
  body: JSON.stringify({
1535
1597
  intent: {
1536
- message: chunkFNCQJLR2_cjs.Intent.encodeMessage(intent.message),
1598
+ message: chunkOH2XLTXE_cjs.Intent.encodeMessage(intent.message),
1537
1599
  proof: intent.proof
1538
1600
  },
1539
1601
  forfeit_txs: forfeitTxs,
@@ -1553,7 +1615,7 @@ var RestDelegateProvider = class {
1553
1615
  */
1554
1616
  async getDelegateInfo() {
1555
1617
  const url = `${this.url}/v1/delegator/info`;
1556
- const response = await chunkFNCQJLR2_cjs.rateGate.runHttp(url, () => chunkFNCQJLR2_cjs.baseFetch(url));
1618
+ const response = await chunkOH2XLTXE_cjs.rateGate.runHttp(url, () => chunkOH2XLTXE_cjs.baseFetch(url));
1557
1619
  if (!response.ok) {
1558
1620
  const errorText2 = await response.text();
1559
1621
  throw new Error(`Failed to get delegate info: ${errorText2}`);
@@ -1580,7 +1642,7 @@ var ESPLORA_URL = {
1580
1642
  regtest: "http://localhost:3000/api"
1581
1643
  };
1582
1644
  var EsploraProvider = class {
1583
- constructor(baseUrl = ESPLORA_URL[chunkFNCQJLR2_cjs.DEFAULT_NETWORK_NAME], opts) {
1645
+ constructor(baseUrl = ESPLORA_URL[chunkOH2XLTXE_cjs.DEFAULT_NETWORK_NAME], opts) {
1584
1646
  this.baseUrl = baseUrl;
1585
1647
  this.pollingInterval = opts?.pollingInterval ?? 15e3;
1586
1648
  this.forcePolling = opts?.forcePolling ?? false;
@@ -1589,14 +1651,14 @@ var EsploraProvider = class {
1589
1651
  pollingInterval;
1590
1652
  forcePolling;
1591
1653
  async getCoins(address) {
1592
- const response = await chunkFNCQJLR2_cjs.baseFetch(`${this.baseUrl}/address/${address}/utxo`);
1654
+ const response = await chunkOH2XLTXE_cjs.baseFetch(`${this.baseUrl}/address/${address}/utxo`);
1593
1655
  if (!response.ok) {
1594
1656
  throw new Error(`Failed to fetch UTXOs: ${response.statusText}`);
1595
1657
  }
1596
1658
  return response.json();
1597
1659
  }
1598
1660
  async getFeeRate() {
1599
- const response = await chunkFNCQJLR2_cjs.baseFetch(`${this.baseUrl}/fee-estimates`);
1661
+ const response = await chunkOH2XLTXE_cjs.baseFetch(`${this.baseUrl}/fee-estimates`);
1600
1662
  if (response.status === 404) {
1601
1663
  return void 0;
1602
1664
  }
@@ -1617,7 +1679,7 @@ var EsploraProvider = class {
1617
1679
  }
1618
1680
  }
1619
1681
  async getTxOutspends(txid) {
1620
- const response = await chunkFNCQJLR2_cjs.baseFetch(`${this.baseUrl}/tx/${txid}/outspends`);
1682
+ const response = await chunkOH2XLTXE_cjs.baseFetch(`${this.baseUrl}/tx/${txid}/outspends`);
1621
1683
  if (!response.ok) {
1622
1684
  const error = await response.text();
1623
1685
  throw new Error(`Failed to get transaction outspends: ${error}`);
@@ -1625,7 +1687,7 @@ var EsploraProvider = class {
1625
1687
  return response.json();
1626
1688
  }
1627
1689
  async getTransactions(address) {
1628
- const response = await chunkFNCQJLR2_cjs.baseFetch(`${this.baseUrl}/address/${address}/txs`);
1690
+ const response = await chunkOH2XLTXE_cjs.baseFetch(`${this.baseUrl}/address/${address}/txs`);
1629
1691
  if (!response.ok) {
1630
1692
  const error = await response.text();
1631
1693
  throw new Error(`Failed to get transactions: ${error}`);
@@ -1633,7 +1695,7 @@ var EsploraProvider = class {
1633
1695
  return response.json();
1634
1696
  }
1635
1697
  async getTxStatus(txid) {
1636
- const txresponse = await chunkFNCQJLR2_cjs.baseFetch(`${this.baseUrl}/tx/${txid}`);
1698
+ const txresponse = await chunkOH2XLTXE_cjs.baseFetch(`${this.baseUrl}/tx/${txid}`);
1637
1699
  if (!txresponse.ok) {
1638
1700
  throw new Error(txresponse.statusText);
1639
1701
  }
@@ -1641,7 +1703,7 @@ var EsploraProvider = class {
1641
1703
  if (!tx.status.confirmed) {
1642
1704
  return { confirmed: false };
1643
1705
  }
1644
- const response = await chunkFNCQJLR2_cjs.baseFetch(`${this.baseUrl}/tx/${txid}/status`);
1706
+ const response = await chunkOH2XLTXE_cjs.baseFetch(`${this.baseUrl}/tx/${txid}/status`);
1645
1707
  if (!response.ok) {
1646
1708
  throw new Error(`Failed to get transaction status: ${response.statusText}`);
1647
1709
  }
@@ -1725,7 +1787,7 @@ var EsploraProvider = class {
1725
1787
  return stopFunc;
1726
1788
  }
1727
1789
  async getChainTip() {
1728
- const tipBlocks = await chunkFNCQJLR2_cjs.baseFetch(`${this.baseUrl}/blocks`);
1790
+ const tipBlocks = await chunkOH2XLTXE_cjs.baseFetch(`${this.baseUrl}/blocks`);
1729
1791
  if (!tipBlocks.ok) {
1730
1792
  throw new Error(`Failed to get chain tip: ${tipBlocks.statusText}`);
1731
1793
  }
@@ -1744,7 +1806,7 @@ var EsploraProvider = class {
1744
1806
  };
1745
1807
  }
1746
1808
  async broadcastPackage(parent, child) {
1747
- const response = await chunkFNCQJLR2_cjs.baseFetch(`${this.baseUrl}/txs/package`, {
1809
+ const response = await chunkOH2XLTXE_cjs.baseFetch(`${this.baseUrl}/txs/package`, {
1748
1810
  method: "POST",
1749
1811
  headers: {
1750
1812
  "Content-Type": "application/json"
@@ -1758,7 +1820,7 @@ var EsploraProvider = class {
1758
1820
  return response.json();
1759
1821
  }
1760
1822
  async broadcastTx(tx) {
1761
- const response = await chunkFNCQJLR2_cjs.baseFetch(`${this.baseUrl}/tx`, {
1823
+ const response = await chunkOH2XLTXE_cjs.baseFetch(`${this.baseUrl}/tx`, {
1762
1824
  method: "POST",
1763
1825
  headers: {
1764
1826
  "Content-Type": "text/plain"
@@ -1920,7 +1982,7 @@ function findP2AOutput(tx) {
1920
1982
  var CHILD_DUST_AMOUNT = 546;
1921
1983
  function buildAnchorChild(params) {
1922
1984
  const { parent, feeRate, fundingCoins, changeAddress, tapInternalKey, network } = params;
1923
- const child = new chunkFNCQJLR2_cjs.Transaction({ version: 3, allowLegacyWitnessUtxo: true });
1985
+ const child = new chunkOH2XLTXE_cjs.Transaction({ version: 3, allowLegacyWitnessUtxo: true });
1924
1986
  child.addInput(findP2AOutput(parent));
1925
1987
  const estimator = TxWeightEstimator.create().addP2AInput();
1926
1988
  for (const _ of fundingCoins) {
@@ -1968,7 +2030,7 @@ function buildForfeitTx(inputs, forfeitPkScript, txLocktime) {
1968
2030
  );
1969
2031
  }
1970
2032
  function buildForfeitTxWithOutput(inputs, output, txLocktime) {
1971
- const tx = new chunkFNCQJLR2_cjs.Transaction({
2033
+ const tx = new chunkOH2XLTXE_cjs.Transaction({
1972
2034
  version: 3,
1973
2035
  lockTime: txLocktime
1974
2036
  });
@@ -2044,7 +2106,7 @@ function validateVtxoTxGraph(graph, roundTransaction, sweepTapTreeRoot) {
2044
2106
  if (previousScriptKey.length !== 32) {
2045
2107
  throw new Error(`parent output ${childIndex} has invalid script`);
2046
2108
  }
2047
- const cosigners = chunkFNCQJLR2_cjs.getArkPsbtFields(child.root, 0, chunkFNCQJLR2_cjs.CosignerPublicKey);
2109
+ const cosigners = chunkOH2XLTXE_cjs.getArkPsbtFields(child.root, 0, chunkOH2XLTXE_cjs.CosignerPublicKey);
2048
2110
  if (cosigners.length === 0) {
2049
2111
  throw ErrMissingCosignersPublicKeys;
2050
2112
  }
@@ -2102,7 +2164,7 @@ var EmulatorPacket = class _EmulatorPacket {
2102
2164
  return new _EmulatorPacket(entries);
2103
2165
  }
2104
2166
  static fromBytes(data) {
2105
- const reader = new chunk2JHN5RCY_cjs.BufferReader(data);
2167
+ const reader = new chunkI6EDUE75_cjs.BufferReader(data);
2106
2168
  const entryCount = reader.readCompactSize();
2107
2169
  const entries = [];
2108
2170
  for (let i = 0; i < entryCount; i++) {
@@ -2120,7 +2182,7 @@ var EmulatorPacket = class _EmulatorPacket {
2120
2182
  return _EmulatorPacket.PACKET_TYPE;
2121
2183
  }
2122
2184
  serialize() {
2123
- const writer = new chunk2JHN5RCY_cjs.BufferWriter();
2185
+ const writer = new chunkI6EDUE75_cjs.BufferWriter();
2124
2186
  writer.writeCompactSize(this.entries.length);
2125
2187
  for (const entry of this.entries) {
2126
2188
  writer.writeUint16LE(entry.vin);
@@ -2207,7 +2269,7 @@ var Extension = class _Extension {
2207
2269
  `expected magic prefix ${base.hex.encode(ARKADE_MAGIC)}, got ${base.hex.encode(payload.slice(0, Math.min(payload.length, ARKADE_MAGIC.length)))}`
2208
2270
  );
2209
2271
  }
2210
- const reader = new chunk2JHN5RCY_cjs.BufferReader(payload.slice(ARKADE_MAGIC.length));
2272
+ const reader = new chunkI6EDUE75_cjs.BufferReader(payload.slice(ARKADE_MAGIC.length));
2211
2273
  const packets = [];
2212
2274
  while (reader.remaining() > 0) {
2213
2275
  const packetType = reader.readByte();
@@ -2281,7 +2343,7 @@ var Extension = class _Extension {
2281
2343
  */
2282
2344
  getAssetPacket() {
2283
2345
  for (const p of this.packets) {
2284
- if (p instanceof chunk2JHN5RCY_cjs.Packet) {
2346
+ if (p instanceof chunkI6EDUE75_cjs.Packet) {
2285
2347
  return p;
2286
2348
  }
2287
2349
  }
@@ -2319,8 +2381,8 @@ var Extension = class _Extension {
2319
2381
  };
2320
2382
  function parsePacket(packetType, data) {
2321
2383
  switch (packetType) {
2322
- case chunk2JHN5RCY_cjs.Packet.PACKET_TYPE:
2323
- return chunk2JHN5RCY_cjs.Packet.fromBytes(data);
2384
+ case chunkI6EDUE75_cjs.Packet.PACKET_TYPE:
2385
+ return chunkI6EDUE75_cjs.Packet.fromBytes(data);
2324
2386
  case EmulatorPacket.PACKET_TYPE:
2325
2387
  return EmulatorPacket.fromBytes(data);
2326
2388
  default:
@@ -2367,16 +2429,16 @@ function buildOpReturnScript(data) {
2367
2429
  }
2368
2430
  return script;
2369
2431
  }
2370
- var ErrOffchainOutputNotFound = (address) => new chunkFNCQJLR2_cjs.ServerResponseMismatchError(`offchain send output not found: ${address}`);
2371
- var ErrInvalidAssetOutputAmount = (got, want, assetId) => new chunkFNCQJLR2_cjs.ServerResponseMismatchError(
2432
+ var ErrOffchainOutputNotFound = (address) => new chunkOH2XLTXE_cjs.ServerResponseMismatchError(`offchain send output not found: ${address}`);
2433
+ var ErrInvalidAssetOutputAmount = (got, want, assetId) => new chunkOH2XLTXE_cjs.ServerResponseMismatchError(
2372
2434
  `invalid asset output amount for ${assetId}: got ${got}, want ${want}`
2373
2435
  );
2374
- var ErrAssetGroupNotFound = (assetId) => new chunkFNCQJLR2_cjs.ServerResponseMismatchError(`asset group not found in batch leaf: ${assetId}`);
2375
- var ErrAssetOutputNotFound = (assetId, outputIndex) => new chunkFNCQJLR2_cjs.ServerResponseMismatchError(
2436
+ var ErrAssetGroupNotFound = (assetId) => new chunkOH2XLTXE_cjs.ServerResponseMismatchError(`asset group not found in batch leaf: ${assetId}`);
2437
+ var ErrAssetOutputNotFound = (assetId, outputIndex) => new chunkOH2XLTXE_cjs.ServerResponseMismatchError(
2376
2438
  `asset output not found in asset group ${assetId} at index ${outputIndex}`
2377
2439
  );
2378
- var ErrOnchainOutputNotFound = (address) => new chunkFNCQJLR2_cjs.ServerResponseMismatchError(`onchain output not found: ${address}`);
2379
- var ErrUnvalidatedOffchainOutput = (address) => new chunkFNCQJLR2_cjs.ServerResponseMismatchError(
2440
+ var ErrOnchainOutputNotFound = (address) => new chunkOH2XLTXE_cjs.ServerResponseMismatchError(`onchain output not found: ${address}`);
2441
+ var ErrUnvalidatedOffchainOutput = (address) => new chunkOH2XLTXE_cjs.ServerResponseMismatchError(
2380
2442
  `offchain output ${address} cannot be validated: virtual output tree signing did not run`
2381
2443
  );
2382
2444
  var ErrInvalidOnchainOutputAmount = (address) => new Error(`invalid onchain output amount: ${address}`);
@@ -2385,7 +2447,7 @@ var ErrInvalidOffchainOutputAmount = (address) => new Error(`invalid offchain ou
2385
2447
  function assertFinalCommitmentMatchesValidated(finalCommitmentTx, validatedCommitmentTxid, context) {
2386
2448
  if (!validatedCommitmentTxid) return;
2387
2449
  if (finalCommitmentTx.id === validatedCommitmentTxid) return;
2388
- throw new chunkFNCQJLR2_cjs.ServerResponseMismatchError(
2450
+ throw new chunkOH2XLTXE_cjs.ServerResponseMismatchError(
2389
2451
  `${context}: finalization commitment tx ${finalCommitmentTx.id} differs from the validated commitment tx ${validatedCommitmentTxid}`
2390
2452
  );
2391
2453
  }
@@ -2395,7 +2457,7 @@ function validateBatchRecipients(commitmentTx, vtxoTreeLeaves, recipients, netwo
2395
2457
  for (const recipient of recipients) {
2396
2458
  let arkAddress;
2397
2459
  try {
2398
- arkAddress = chunkFNCQJLR2_cjs.ArkAddress.decode(recipient.address);
2460
+ arkAddress = chunkOH2XLTXE_cjs.ArkAddress.decode(recipient.address);
2399
2461
  } catch {
2400
2462
  validateOnchainRecipient(commitmentTx, recipient, network, usedOnchainOutputs);
2401
2463
  continue;
@@ -2407,7 +2469,7 @@ function validateBatchRecipientsWithoutTree(commitmentTx, recipients, network) {
2407
2469
  const usedOnchainOutputs = /* @__PURE__ */ new Set();
2408
2470
  for (const recipient of recipients) {
2409
2471
  try {
2410
- chunkFNCQJLR2_cjs.ArkAddress.decode(recipient.address);
2472
+ chunkOH2XLTXE_cjs.ArkAddress.decode(recipient.address);
2411
2473
  } catch {
2412
2474
  validateOnchainRecipient(commitmentTx, recipient, network, usedOnchainOutputs);
2413
2475
  continue;
@@ -2638,7 +2700,7 @@ function assetMintResolver() {
2638
2700
  if (!tx.assets?.length || !tx.key.arkTxid) return void 0;
2639
2701
  const minted = tx.assets.filter((a) => {
2640
2702
  try {
2641
- return base.hex.encode(chunk2JHN5RCY_cjs.AssetId.fromString(a.assetId).txid) === tx.key.arkTxid;
2703
+ return base.hex.encode(chunkI6EDUE75_cjs.AssetId.fromString(a.assetId).txid) === tx.key.arkTxid;
2642
2704
  } catch {
2643
2705
  return false;
2644
2706
  }
@@ -2681,7 +2743,7 @@ function createAssetPacket(assetInputs, receivers, changeReceiver) {
2681
2743
  const existing = inputsByAssetId.get(asset.assetId);
2682
2744
  inputsByAssetId.set(asset.assetId, [
2683
2745
  ...existing ?? [],
2684
- chunk2JHN5RCY_cjs.AssetInput.create(inputIndex, asset.amount)
2746
+ chunkI6EDUE75_cjs.AssetInput.create(inputIndex, asset.amount)
2685
2747
  ]);
2686
2748
  }
2687
2749
  }
@@ -2693,7 +2755,7 @@ function createAssetPacket(assetInputs, receivers, changeReceiver) {
2693
2755
  const existing = outputsByAssetId.get(asset.assetId);
2694
2756
  outputsByAssetId.set(asset.assetId, [
2695
2757
  ...existing ?? [],
2696
- chunk2JHN5RCY_cjs.AssetOutput.create(outputIndex, asset.amount)
2758
+ chunkI6EDUE75_cjs.AssetOutput.create(outputIndex, asset.amount)
2697
2759
  ]);
2698
2760
  }
2699
2761
  }
@@ -2704,7 +2766,7 @@ function createAssetPacket(assetInputs, receivers, changeReceiver) {
2704
2766
  const existing = outputsByAssetId.get(asset.assetId);
2705
2767
  outputsByAssetId.set(asset.assetId, [
2706
2768
  ...existing ?? [],
2707
- chunk2JHN5RCY_cjs.AssetOutput.create(outputIndex, asset.amount)
2769
+ chunkI6EDUE75_cjs.AssetOutput.create(outputIndex, asset.amount)
2708
2770
  ]);
2709
2771
  }
2710
2772
  }
@@ -2713,11 +2775,11 @@ function createAssetPacket(assetInputs, receivers, changeReceiver) {
2713
2775
  for (const assetIdStr of allAssetIds) {
2714
2776
  const inputs = inputsByAssetId.get(assetIdStr);
2715
2777
  const outputs = outputsByAssetId.get(assetIdStr);
2716
- const assetId = chunk2JHN5RCY_cjs.AssetId.fromString(assetIdStr);
2717
- const group = chunk2JHN5RCY_cjs.AssetGroup.create(assetId, null, inputs ?? [], outputs ?? [], []);
2778
+ const assetId = chunkI6EDUE75_cjs.AssetId.fromString(assetIdStr);
2779
+ const group = chunkI6EDUE75_cjs.AssetGroup.create(assetId, null, inputs ?? [], outputs ?? [], []);
2718
2780
  groups.push(group);
2719
2781
  }
2720
- return chunk2JHN5RCY_cjs.Packet.create(groups);
2782
+ return chunkI6EDUE75_cjs.Packet.create(groups);
2721
2783
  }
2722
2784
  function selectCoinsWithAsset(coins, assetId, requiredAmount) {
2723
2785
  const coinsWithAsset = coins.filter((coin) => coin.assets?.some((a) => a.assetId === assetId));
@@ -2802,13 +2864,13 @@ var toTimelock = (value) => ({
2802
2864
  var toSeconds = (t) => t.type === "seconds" ? t.value : t.value * NOMINAL_BLOCK_SECONDS;
2803
2865
  function assertTimelockInPolicy(timelock, policy, label, overrideOption) {
2804
2866
  if (policy.requireSeconds && timelock.type === "blocks") {
2805
- throw new chunkFNCQJLR2_cjs.ServerResponseMismatchError(
2867
+ throw new chunkOH2XLTXE_cjs.ServerResponseMismatchError(
2806
2868
  `${label} rejected: block-typed timelocks are not accepted (got ${timelock.value})`
2807
2869
  );
2808
2870
  }
2809
2871
  const seconds = toSeconds(timelock);
2810
2872
  if (seconds < policy.minSeconds) {
2811
- throw new chunkFNCQJLR2_cjs.ServerResponseMismatchError(
2873
+ throw new chunkOH2XLTXE_cjs.ServerResponseMismatchError(
2812
2874
  `${label} rejected: ${timelock.value} ${timelock.type} is below the ${policy.minSeconds}s floor; pass ${overrideOption}: ${seconds}n to Wallet.create to lower it`
2813
2875
  );
2814
2876
  }
@@ -2829,7 +2891,7 @@ function resolveBatchExpiryPolicy(network, overrides) {
2829
2891
  }
2830
2892
  function assertValidBatchExpiry(batchExpiry, policy) {
2831
2893
  if (policy.advertisedVtxoTreeExpiry !== void 0 && batchExpiry !== policy.advertisedVtxoTreeExpiry) {
2832
- throw new chunkFNCQJLR2_cjs.ServerResponseMismatchError(
2894
+ throw new chunkOH2XLTXE_cjs.ServerResponseMismatchError(
2833
2895
  `batch expiry rejected: ${batchExpiry} does not match the advertised vtxoTreeExpiry ${policy.advertisedVtxoTreeExpiry}`
2834
2896
  );
2835
2897
  }
@@ -2859,21 +2921,21 @@ function resolveCheckpointExitDelayPolicy(network, overrides) {
2859
2921
  function assertValidServerUnrollScript(checkpointTapscript, policy) {
2860
2922
  let script;
2861
2923
  try {
2862
- script = chunkFNCQJLR2_cjs.CSVMultisigTapscript.decode(base.hex.decode(checkpointTapscript));
2924
+ script = chunkOH2XLTXE_cjs.CSVMultisigTapscript.decode(base.hex.decode(checkpointTapscript));
2863
2925
  } catch (e) {
2864
- throw new chunkFNCQJLR2_cjs.ServerResponseMismatchError(
2926
+ throw new chunkOH2XLTXE_cjs.ServerResponseMismatchError(
2865
2927
  `checkpoint exit delay rejected: invalid checkpointTapscript from server (${e instanceof Error ? e.message : String(e)})`
2866
2928
  );
2867
2929
  }
2868
2930
  if (policy.advertisedForfeitPubkey !== void 0) {
2869
2931
  const { pubkeys } = script.params;
2870
2932
  if (pubkeys.length !== 1) {
2871
- throw new chunkFNCQJLR2_cjs.ServerResponseMismatchError(
2933
+ throw new chunkOH2XLTXE_cjs.ServerResponseMismatchError(
2872
2934
  `checkpoint exit delay rejected: checkpointTapscript must commit to exactly one pubkey, got ${pubkeys.length} [${pubkeys.map(base.hex.encode).join(", ")}]`
2873
2935
  );
2874
2936
  }
2875
2937
  if (!utils_js.equalBytes(pubkeys[0], policy.advertisedForfeitPubkey)) {
2876
- throw new chunkFNCQJLR2_cjs.ServerResponseMismatchError(
2938
+ throw new chunkOH2XLTXE_cjs.ServerResponseMismatchError(
2877
2939
  `checkpoint exit delay rejected: checkpointTapscript pubkey ${base.hex.encode(pubkeys[0])} does not match the advertised forfeitPubkey ${base.hex.encode(policy.advertisedForfeitPubkey)}`
2878
2940
  );
2879
2941
  }
@@ -2917,8 +2979,8 @@ function buildOffchainTx(inputs, outputs, serverUnrollScript) {
2917
2979
  function buildVirtualTx(inputs, outputs) {
2918
2980
  let lockTime = 0n;
2919
2981
  for (const input of inputs) {
2920
- const tapscript = chunkFNCQJLR2_cjs.decodeTapscript(chunkFNCQJLR2_cjs.scriptFromTapLeafScript(input.tapLeafScript));
2921
- if (chunkFNCQJLR2_cjs.CLTVMultisigTapscript.is(tapscript)) {
2982
+ const tapscript = chunkOH2XLTXE_cjs.decodeTapscript(chunkOH2XLTXE_cjs.scriptFromTapLeafScript(input.tapLeafScript));
2983
+ if (chunkOH2XLTXE_cjs.CLTVMultisigTapscript.is(tapscript)) {
2922
2984
  if (lockTime !== 0n) {
2923
2985
  if (isSeconds(lockTime) !== isSeconds(tapscript.params.absoluteTimelock)) {
2924
2986
  throw new Error("cannot mix seconds and blocks locktime");
@@ -2929,7 +2991,7 @@ function buildVirtualTx(inputs, outputs) {
2929
2991
  }
2930
2992
  }
2931
2993
  }
2932
- const tx = new chunkFNCQJLR2_cjs.Transaction({
2994
+ const tx = new chunkOH2XLTXE_cjs.Transaction({
2933
2995
  version: 3,
2934
2996
  lockTime: Number(lockTime)
2935
2997
  });
@@ -2939,12 +3001,12 @@ function buildVirtualTx(inputs, outputs) {
2939
3001
  index: input.vout,
2940
3002
  sequence: lockTime ? btcSigner.DEFAULT_SEQUENCE - 1 : void 0,
2941
3003
  witnessUtxo: {
2942
- script: chunkFNCQJLR2_cjs.VtxoScript.decode(input.tapTree).pkScript,
3004
+ script: chunkOH2XLTXE_cjs.VtxoScript.decode(input.tapTree).pkScript,
2943
3005
  amount: BigInt(input.value)
2944
3006
  },
2945
3007
  tapLeafScript: [input.tapLeafScript]
2946
3008
  });
2947
- chunkFNCQJLR2_cjs.setArkPsbtField(tx, i, chunkFNCQJLR2_cjs.VtxoTaprootTree, input.tapTree);
3009
+ chunkOH2XLTXE_cjs.setArkPsbtField(tx, i, chunkOH2XLTXE_cjs.VtxoTaprootTree, input.tapTree);
2948
3010
  }
2949
3011
  for (const output of outputs) {
2950
3012
  tx.addOutput(output);
@@ -2953,8 +3015,8 @@ function buildVirtualTx(inputs, outputs) {
2953
3015
  return tx;
2954
3016
  }
2955
3017
  function buildCheckpointTx(vtxo, serverUnrollScript) {
2956
- const collaborativeClosure = chunkFNCQJLR2_cjs.decodeTapscript(chunkFNCQJLR2_cjs.scriptFromTapLeafScript(vtxo.tapLeafScript));
2957
- const checkpointVtxoScript = new chunkFNCQJLR2_cjs.VtxoScript([
3018
+ const collaborativeClosure = chunkOH2XLTXE_cjs.decodeTapscript(chunkOH2XLTXE_cjs.scriptFromTapLeafScript(vtxo.tapLeafScript));
3019
+ const checkpointVtxoScript = new chunkOH2XLTXE_cjs.VtxoScript([
2958
3020
  serverUnrollScript.script,
2959
3021
  collaborativeClosure.script
2960
3022
  ]);
@@ -3107,7 +3169,7 @@ function combineTapscriptSigs(signedTx, originalTx) {
3107
3169
  }
3108
3170
  function isValidArkAddress(address) {
3109
3171
  try {
3110
- chunkFNCQJLR2_cjs.ArkAddress.decode(address);
3172
+ chunkOH2XLTXE_cjs.ArkAddress.decode(address);
3111
3173
  return true;
3112
3174
  } catch (e) {
3113
3175
  return false;
@@ -3115,16 +3177,16 @@ function isValidArkAddress(address) {
3115
3177
  }
3116
3178
  function matchServerCheckpoints(serverCheckpointTxs, expectedCheckpoints, context) {
3117
3179
  if (serverCheckpointTxs.length !== expectedCheckpoints.length) {
3118
- throw new chunkFNCQJLR2_cjs.ServerResponseMismatchError(
3180
+ throw new chunkOH2XLTXE_cjs.ServerResponseMismatchError(
3119
3181
  `${context} returned ${serverCheckpointTxs.length} checkpoints, expected ${expectedCheckpoints.length}`
3120
3182
  );
3121
3183
  }
3122
3184
  const byTxid = new Map(expectedCheckpoints.map((c) => [c.id, c]));
3123
3185
  return serverCheckpointTxs.map((encoded, index) => {
3124
- const server = chunkFNCQJLR2_cjs.Transaction.fromPSBT(base.base64.decode(encoded));
3186
+ const server = chunkOH2XLTXE_cjs.Transaction.fromPSBT(base.base64.decode(encoded));
3125
3187
  const local = byTxid.get(server.id);
3126
3188
  if (!local) {
3127
- throw new chunkFNCQJLR2_cjs.ServerResponseMismatchError(
3189
+ throw new chunkOH2XLTXE_cjs.ServerResponseMismatchError(
3128
3190
  `${context} checkpoint ${index} txid ${server.id} does not match any submitted checkpoint`
3129
3191
  );
3130
3192
  }
@@ -3134,14 +3196,14 @@ function matchServerCheckpoints(serverCheckpointTxs, expectedCheckpoints, contex
3134
3196
  }
3135
3197
  function assertSubmittedArkTxid(response, signedArkTx, context) {
3136
3198
  if (response.arkTxid !== signedArkTx.id) {
3137
- throw new chunkFNCQJLR2_cjs.ServerResponseMismatchError(
3199
+ throw new chunkOH2XLTXE_cjs.ServerResponseMismatchError(
3138
3200
  `${context} returned ark txid ${response.arkTxid}, expected ${signedArkTx.id}`
3139
3201
  );
3140
3202
  }
3141
3203
  if (response.finalArkTx === void 0) return;
3142
- const finalTxid = chunkFNCQJLR2_cjs.Transaction.fromPSBT(base.base64.decode(response.finalArkTx)).id;
3204
+ const finalTxid = chunkOH2XLTXE_cjs.Transaction.fromPSBT(base.base64.decode(response.finalArkTx)).id;
3143
3205
  if (finalTxid !== signedArkTx.id) {
3144
- throw new chunkFNCQJLR2_cjs.ServerResponseMismatchError(
3206
+ throw new chunkOH2XLTXE_cjs.ServerResponseMismatchError(
3145
3207
  `${context} returned final ark tx ${finalTxid}, expected ${signedArkTx.id}`
3146
3208
  );
3147
3209
  }
@@ -3160,10 +3222,10 @@ function assertServerSignedLeaf(serverTx, localTx, inputIndex, serverPubkeyHex,
3160
3222
  [serverPubkeyHex],
3161
3223
  void 0,
3162
3224
  void 0,
3163
- payment_js.tapLeafHash(chunkFNCQJLR2_cjs.scriptFromTapLeafScript(leaf))
3225
+ payment_js.tapLeafHash(chunkOH2XLTXE_cjs.scriptFromTapLeafScript(leaf))
3164
3226
  );
3165
3227
  } catch (error) {
3166
- throw new chunkFNCQJLR2_cjs.ServerResponseMismatchError(
3228
+ throw new chunkOH2XLTXE_cjs.ServerResponseMismatchError(
3167
3229
  `${context}: input ${inputIndex} is not signed by the server on the leaf being spent (${error instanceof Error ? error.message : String(error)})`
3168
3230
  );
3169
3231
  }
@@ -3172,20 +3234,20 @@ function assertCheckpointsMatchInputs(checkpoints, inputs, unrollCandidates, con
3172
3234
  const byOutpoint = new Map(inputs.map((input) => [`${input.txid}:${input.vout}`, input]));
3173
3235
  for (const [index, checkpoint] of checkpoints.entries()) {
3174
3236
  if (checkpoint.inputsLength !== 1) {
3175
- throw new chunkFNCQJLR2_cjs.ServerResponseMismatchError(
3237
+ throw new chunkOH2XLTXE_cjs.ServerResponseMismatchError(
3176
3238
  `${context}: checkpoint ${index} spends ${checkpoint.inputsLength} inputs, expected 1`
3177
3239
  );
3178
3240
  }
3179
3241
  const spent = checkpoint.getInput(0);
3180
3242
  if (!spent.txid || spent.index === void 0) {
3181
- throw new chunkFNCQJLR2_cjs.ServerResponseMismatchError(
3243
+ throw new chunkOH2XLTXE_cjs.ServerResponseMismatchError(
3182
3244
  `${context}: checkpoint ${index} has no input outpoint`
3183
3245
  );
3184
3246
  }
3185
3247
  const outpoint = `${base.hex.encode(spent.txid)}:${spent.index}`;
3186
3248
  const input = byOutpoint.get(outpoint);
3187
3249
  if (!input) {
3188
- throw new chunkFNCQJLR2_cjs.ServerResponseMismatchError(
3250
+ throw new chunkOH2XLTXE_cjs.ServerResponseMismatchError(
3189
3251
  `${context}: checkpoint ${index} spends ${outpoint}, which is not one of the requested virtual outputs`
3190
3252
  );
3191
3253
  }
@@ -3193,7 +3255,7 @@ function assertCheckpointsMatchInputs(checkpoints, inputs, unrollCandidates, con
3193
3255
  (unroll) => buildCheckpointTx(input, unroll).tx.id === checkpoint.id
3194
3256
  );
3195
3257
  if (!rebuilt) {
3196
- throw new chunkFNCQJLR2_cjs.ServerResponseMismatchError(
3258
+ throw new chunkOH2XLTXE_cjs.ServerResponseMismatchError(
3197
3259
  `${context}: checkpoint ${index} txid ${checkpoint.id} differs from the checkpoint built locally for ${outpoint}`
3198
3260
  );
3199
3261
  }
@@ -3220,11 +3282,11 @@ async function submitOffchainTx(provider, offchainTx, signer, hooks, options) {
3220
3282
  const verify = options?.verifyServerSignatures;
3221
3283
  if (verify) {
3222
3284
  if (response.finalArkTx === void 0) {
3223
- throw new chunkFNCQJLR2_cjs.ServerResponseMismatchError(
3285
+ throw new chunkOH2XLTXE_cjs.ServerResponseMismatchError(
3224
3286
  "submitTx: server returned no final ark tx to verify its signatures against"
3225
3287
  );
3226
3288
  }
3227
- const finalArkTx = chunkFNCQJLR2_cjs.Transaction.fromPSBT(base.base64.decode(response.finalArkTx));
3289
+ const finalArkTx = chunkOH2XLTXE_cjs.Transaction.fromPSBT(base.base64.decode(response.finalArkTx));
3228
3290
  const serverPubkeyHex = base.hex.encode(
3229
3291
  verify.serverPubkey.length === 33 ? verify.serverPubkey.subarray(1) : verify.serverPubkey
3230
3292
  );
@@ -3283,12 +3345,12 @@ function claimWithPreimageIdentity(identity, preimage) {
3283
3345
  return {
3284
3346
  ...identity,
3285
3347
  sign: async (tx, inputIndexes) => {
3286
- const signed = chunkFNCQJLR2_cjs.Transaction.fromPSBT(
3348
+ const signed = chunkOH2XLTXE_cjs.Transaction.fromPSBT(
3287
3349
  (await identity.sign(tx.clone(), inputIndexes)).toPSBT()
3288
3350
  );
3289
3351
  const indexes = inputIndexes ?? Array.from({ length: signed.inputsLength }, (_, i) => i);
3290
3352
  for (const index of indexes) {
3291
- chunkFNCQJLR2_cjs.setArkPsbtField(signed, index, chunkFNCQJLR2_cjs.ConditionWitness, [preimage]);
3353
+ chunkOH2XLTXE_cjs.setArkPsbtField(signed, index, chunkOH2XLTXE_cjs.ConditionWitness, [preimage]);
3292
3354
  }
3293
3355
  return signed;
3294
3356
  }
@@ -3480,7 +3542,7 @@ function extendCoinWithTapscript(boardingTapscript, utxo) {
3480
3542
  };
3481
3543
  }
3482
3544
  function deriveContractTapscripts(contract) {
3483
- const handler = chunkSF5NKAUA_cjs.contractHandlers.get(contract.type);
3545
+ const handler = chunkG53HASDV_cjs.contractHandlers.get(contract.type);
3484
3546
  if (!handler) {
3485
3547
  throw new Error(`No handler for contract type '${contract.type}'`);
3486
3548
  }
@@ -3551,7 +3613,7 @@ function getRandomId() {
3551
3613
  }
3552
3614
  function isValidArkAddress2(address) {
3553
3615
  try {
3554
- chunkFNCQJLR2_cjs.ArkAddress.decode(address);
3616
+ chunkOH2XLTXE_cjs.ArkAddress.decode(address);
3555
3617
  return true;
3556
3618
  } catch (e) {
3557
3619
  return false;
@@ -3576,12 +3638,27 @@ function assertRecipientArkAddress(encoded, address, context) {
3576
3638
  );
3577
3639
  }
3578
3640
  }
3641
+ function assertTapTreeDerivesAddress(encoded, tapTree, address) {
3642
+ let derived;
3643
+ try {
3644
+ derived = chunkOH2XLTXE_cjs.VtxoScript.decode(tapTree).pkScript;
3645
+ } catch (e) {
3646
+ throw new Error(
3647
+ `Invalid tapTree for ${encoded}: ${e instanceof Error ? e.message : String(e)}`
3648
+ );
3649
+ }
3650
+ if (base.hex.encode(derived) !== base.hex.encode(address.pkScript)) {
3651
+ throw new Error(
3652
+ `Invalid tapTree for ${encoded}: derives ${base.hex.encode(derived)}, address is ${base.hex.encode(address.pkScript)}. Expected VtxoScript.encode() form: leaf depths are ignored and the tree is rebuilt in arkd's canonical shape.`
3653
+ );
3654
+ }
3655
+ }
3579
3656
  function validateRecipients(recipients, dustAmount, context) {
3580
3657
  const validatedRecipients = [];
3581
3658
  for (const recipient of recipients) {
3582
3659
  let address;
3583
3660
  try {
3584
- address = chunkFNCQJLR2_cjs.ArkAddress.decode(recipient.address);
3661
+ address = chunkOH2XLTXE_cjs.ArkAddress.decode(recipient.address);
3585
3662
  } catch (e) {
3586
3663
  throw new Error(`Invalid Arkade address: ${recipient.address}`);
3587
3664
  }
@@ -3590,11 +3667,15 @@ function validateRecipients(recipients, dustAmount, context) {
3590
3667
  if (amount <= 0) {
3591
3668
  throw new Error("Amount must be positive");
3592
3669
  }
3670
+ if (recipient.tapTree) {
3671
+ assertTapTreeDerivesAddress(recipient.address, recipient.tapTree, address);
3672
+ }
3593
3673
  validatedRecipients.push({
3594
3674
  address: recipient.address,
3595
3675
  assets: recipient.assets ?? [],
3596
3676
  amount,
3597
- script: amount < dustAmount ? address.subdustPkScript : address.pkScript
3677
+ script: amount < dustAmount ? address.subdustPkScript : address.pkScript,
3678
+ tapTree: recipient.tapTree
3598
3679
  });
3599
3680
  }
3600
3681
  return validatedRecipients;
@@ -3602,7 +3683,7 @@ function validateRecipients(recipients, dustAmount, context) {
3602
3683
 
3603
3684
  // src/contracts/spendability.ts
3604
3685
  function isContractGenericallySpendable(contract) {
3605
- return chunkSF5NKAUA_cjs.contractHandlers.get(contract.type)?.isGenericallySpendable?.(contract) === true;
3686
+ return chunkG53HASDV_cjs.contractHandlers.get(contract.type)?.isGenericallySpendable?.(contract) === true;
3606
3687
  }
3607
3688
  function gatedContracts(contracts) {
3608
3689
  const gated = /* @__PURE__ */ new Map();
@@ -3648,7 +3729,7 @@ function selectPendingRecoveryOutpoints(contractsWithVtxos, signerSet, nowSecond
3648
3729
  continue;
3649
3730
  }
3650
3731
  for (const v of vtxos) {
3651
- if (!chunkFNCQJLR2_cjs.hasTerminalSpend(v) && !v.isSwept) out.add(`${v.txid}:${v.vout}`);
3732
+ if (!chunkOH2XLTXE_cjs.hasTerminalSpend(v) && !v.isSwept) out.add(`${v.txid}:${v.vout}`);
3652
3733
  }
3653
3734
  }
3654
3735
  return out;
@@ -3681,10 +3762,10 @@ function byValueDescending(vtxos) {
3681
3762
  return [...vtxos].sort((a, b) => b.value - a.value);
3682
3763
  }
3683
3764
  async function fetchTimeHeight(wallet) {
3684
- return chunkFNCQJLR2_cjs.resolveTimeHeight(wallet.onchainProvider);
3765
+ return chunkOH2XLTXE_cjs.resolveTimeHeight(wallet.onchainProvider);
3685
3766
  }
3686
3767
  function canMigrateBySend(vtxo, now) {
3687
- if (!chunkFNCQJLR2_cjs.canSpendOffchain(vtxo, now)) return false;
3768
+ if (!chunkOH2XLTXE_cjs.canSpendOffchain(vtxo, now)) return false;
3688
3769
  return vtxo.expiresAt !== void 0 || vtxo.expiresAtHeight !== void 0;
3689
3770
  }
3690
3771
  function byExpiryAscending(vtxos, now) {
@@ -3692,7 +3773,7 @@ function byExpiryAscending(vtxos, now) {
3692
3773
  if (vtxo.isSwept) return -Infinity;
3693
3774
  if (vtxo.expiresAt !== void 0) return vtxo.expiresAt.getTime();
3694
3775
  if (vtxo.expiresAtHeight !== void 0) {
3695
- return chunkFNCQJLR2_cjs.isPastExpiry(vtxo, now) ? -Infinity : Infinity;
3776
+ return chunkOH2XLTXE_cjs.isPastExpiry(vtxo, now) ? -Infinity : Infinity;
3696
3777
  }
3697
3778
  return Infinity;
3698
3779
  };
@@ -3719,7 +3800,7 @@ function priceSettlementInputs(vtxos, estimator) {
3719
3800
  const payable = [];
3720
3801
  const net = /* @__PURE__ */ new Map();
3721
3802
  for (const vtxo of vtxos) {
3722
- const inputFee = estimator.evalOffchainInput(chunkFNCQJLR2_cjs.toOffchainInputFeeParams(vtxo));
3803
+ const inputFee = estimator.evalOffchainInput(chunkOH2XLTXE_cjs.toOffchainInputFeeParams(vtxo));
3723
3804
  if (inputFee.satoshis >= vtxo.value) {
3724
3805
  continue;
3725
3806
  }
@@ -3745,7 +3826,7 @@ function deductOffchainOutputFee(subtotal, estimator, arkAddress) {
3745
3826
  }
3746
3827
  const outputFee = estimator.evalOffchainOutput({
3747
3828
  amount: subtotal,
3748
- script: base.hex.encode(chunkFNCQJLR2_cjs.ArkAddress.decode(arkAddress).pkScript)
3829
+ script: base.hex.encode(chunkOH2XLTXE_cjs.ArkAddress.decode(arkAddress).pkScript)
3749
3830
  });
3750
3831
  return subtotal - BigInt(outputFee.satoshis);
3751
3832
  }
@@ -3763,10 +3844,10 @@ var DEFAULT_SETTLEMENT_CONFIG = {
3763
3844
  };
3764
3845
  function getRecoverableVtxos(vtxos, dustAmount, now) {
3765
3846
  return vtxos.filter((vtxo) => {
3766
- if (chunkFNCQJLR2_cjs.canRecoverOnchain(vtxo, now)) {
3847
+ if (chunkOH2XLTXE_cjs.canRecoverOnchain(vtxo, now)) {
3767
3848
  return true;
3768
3849
  }
3769
- if (chunkFNCQJLR2_cjs.canSpendOffchain(vtxo, now) && vtxo.isPreconfirmed && isSubdust(vtxo, dustAmount)) {
3850
+ if (chunkOH2XLTXE_cjs.canSpendOffchain(vtxo, now) && vtxo.isPreconfirmed && isSubdust(vtxo, dustAmount)) {
3770
3851
  return true;
3771
3852
  }
3772
3853
  return false;
@@ -3797,7 +3878,7 @@ function getRecoverableWithSubdust(vtxos, dustAmount, now) {
3797
3878
  }
3798
3879
  function isVtxoExpiringSoon(vtxo, thresholdMs) {
3799
3880
  const realThresholdMs = thresholdMs <= 100 ? DEFAULT_THRESHOLD_MS : thresholdMs;
3800
- const expiresAt = chunkFNCQJLR2_cjs.normalizeVtxo(vtxo).expiresAt;
3881
+ const expiresAt = chunkOH2XLTXE_cjs.normalizeVtxo(vtxo).expiresAt;
3801
3882
  if (expiresAt === void 0) return false;
3802
3883
  const now = Date.now();
3803
3884
  const batchExpiry = expiresAt.getTime();
@@ -3806,7 +3887,7 @@ function isVtxoExpiringSoon(vtxo, thresholdMs) {
3806
3887
  }
3807
3888
  function getExpiringAndRecoverableVtxos(vtxos, thresholdMs, dustAmount, now) {
3808
3889
  return vtxos.filter(
3809
- (vtxo) => isVtxoExpiringSoon(vtxo, thresholdMs) || chunkFNCQJLR2_cjs.canRecoverOnchain(vtxo, now) || isSubdust(vtxo, dustAmount)
3890
+ (vtxo) => isVtxoExpiringSoon(vtxo, thresholdMs) || chunkOH2XLTXE_cjs.canRecoverOnchain(vtxo, now) || isSubdust(vtxo, dustAmount)
3810
3891
  );
3811
3892
  }
3812
3893
  function isMigrationCapable(wallet) {
@@ -4405,11 +4486,11 @@ var VtxoManager = class _VtxoManager {
4405
4486
  `Sweep not economical: output ${outputAmount} sats after ${fee} sats fee is below dust (${dustAmount} sats)`
4406
4487
  );
4407
4488
  }
4408
- const tx = new chunkFNCQJLR2_cjs.Transaction();
4489
+ const tx = new chunkOH2XLTXE_cjs.Transaction();
4409
4490
  for (const utxo of expiredUtxos) {
4410
- const utxoScript = chunkFNCQJLR2_cjs.VtxoScript.decode(utxo.tapTree);
4491
+ const utxoScript = chunkOH2XLTXE_cjs.VtxoScript.decode(utxo.tapTree);
4411
4492
  const utxoExitLeaf = utxoScript.leaves.find(
4412
- (leaf) => chunkFNCQJLR2_cjs.CSVMultisigTapscript.isScriptValid(chunkFNCQJLR2_cjs.scriptFromTapLeafScript(leaf)) === true
4493
+ (leaf) => chunkOH2XLTXE_cjs.CSVMultisigTapscript.isScriptValid(chunkOH2XLTXE_cjs.scriptFromTapLeafScript(leaf)) === true
4413
4494
  );
4414
4495
  if (!utxoExitLeaf) {
4415
4496
  throw new Error(
@@ -4424,7 +4505,7 @@ var VtxoManager = class _VtxoManager {
4424
4505
  amount: BigInt(utxo.value)
4425
4506
  },
4426
4507
  tapLeafScript: [utxoExitLeaf],
4427
- sequence: chunkFNCQJLR2_cjs.getSequence(utxoExitLeaf)
4508
+ sequence: chunkOH2XLTXE_cjs.getSequence(utxoExitLeaf)
4428
4509
  });
4429
4510
  }
4430
4511
  tx.addOutputAddress(boardingAddress, outputAmount, this.getNetwork());
@@ -4658,8 +4739,8 @@ var VtxoManager = class _VtxoManager {
4658
4739
  if (!serverPubKey) continue;
4659
4740
  const cls = classifyAgainstSignerSet(serverPubKey, signerSet, nowSeconds);
4660
4741
  if (cls.status === "CURRENT") continue;
4661
- const recoverable = vtxos.filter((v) => v.isSwept && !chunkFNCQJLR2_cjs.hasTerminalSpend(v));
4662
- const spendable = vtxos.filter((v) => !chunkFNCQJLR2_cjs.hasTerminalSpend(v) && !v.isSwept);
4742
+ const recoverable = vtxos.filter((v) => v.isSwept && !chunkOH2XLTXE_cjs.hasTerminalSpend(v));
4743
+ const spendable = vtxos.filter((v) => !chunkOH2XLTXE_cjs.hasTerminalSpend(v) && !v.isSwept);
4663
4744
  const value = spendable.reduce((sum, v) => sum + v.value, 0);
4664
4745
  let recoverableCount = 0;
4665
4746
  let recoverableValue = 0;
@@ -4672,7 +4753,7 @@ var VtxoManager = class _VtxoManager {
4672
4753
  awaitingSweepCount = spendable.length;
4673
4754
  awaitingSweepValue = value;
4674
4755
  for (const v of spendable) {
4675
- const exp = chunkFNCQJLR2_cjs.toBatchExpiry(v);
4756
+ const exp = chunkOH2XLTXE_cjs.toBatchExpiry(v);
4676
4757
  if (exp !== void 0 && (nextSweepEta === void 0 || exp < nextSweepEta)) {
4677
4758
  nextSweepEta = exp;
4678
4759
  }
@@ -4933,7 +5014,7 @@ var VtxoManager = class _VtxoManager {
4933
5014
  /** Decodes the boarding tapscript exit path to extract the CSV timelock. */
4934
5015
  getBoardingTimelock() {
4935
5016
  const wallet = this.getSweepWallet();
4936
- const exitScript = chunkFNCQJLR2_cjs.CSVMultisigTapscript.decode(
5017
+ const exitScript = chunkOH2XLTXE_cjs.CSVMultisigTapscript.decode(
4937
5018
  base.hex.decode(wallet.boardingTapscript.exitScript)
4938
5019
  );
4939
5020
  return exitScript.params.timelock;
@@ -5064,8 +5145,8 @@ var VtxoManager = class _VtxoManager {
5064
5145
  * or doesn't carry the metadata.
5065
5146
  */
5066
5147
  extractSpentOutpoint(error) {
5067
- const ark = chunkFNCQJLR2_cjs.maybeArkError(error);
5068
- if (!chunkFNCQJLR2_cjs.isArkError(ark, chunkFNCQJLR2_cjs.ArkErrorName.VTXO_ALREADY_SPENT)) return void 0;
5148
+ const ark = chunkOH2XLTXE_cjs.maybeArkError(error);
5149
+ if (!chunkOH2XLTXE_cjs.isArkError(ark, chunkOH2XLTXE_cjs.ArkErrorName.VTXO_ALREADY_SPENT)) return void 0;
5069
5150
  const raw = ark.metadata?.vtxo_outpoint;
5070
5151
  if (typeof raw !== "string") return void 0;
5071
5152
  const [txid, voutStr] = raw.split(":");
@@ -5255,7 +5336,7 @@ var VtxoManager = class _VtxoManager {
5255
5336
  if (filteredVtxos.length >= MAX_VTXOS_PER_SETTLEMENT) {
5256
5337
  break;
5257
5338
  }
5258
- const inputFee = estimator.evalOffchainInput(chunkFNCQJLR2_cjs.toOffchainInputFeeParams(v));
5339
+ const inputFee = estimator.evalOffchainInput(chunkOH2XLTXE_cjs.toOffchainInputFeeParams(v));
5259
5340
  if (inputFee.satoshis >= v.value) {
5260
5341
  continue;
5261
5342
  }
@@ -5275,7 +5356,7 @@ var VtxoManager = class _VtxoManager {
5275
5356
  const arkAddress = await this.wallet.getAddress();
5276
5357
  const outputFee = estimator.evalOffchainOutput({
5277
5358
  amount: totalAmount,
5278
- script: base.hex.encode(chunkFNCQJLR2_cjs.ArkAddress.decode(arkAddress).pkScript)
5359
+ script: base.hex.encode(chunkOH2XLTXE_cjs.ArkAddress.decode(arkAddress).pkScript)
5279
5360
  });
5280
5361
  totalAmount -= BigInt(outputFee.satoshis);
5281
5362
  if (totalAmount < dustAmount) return;
@@ -5355,7 +5436,7 @@ var ArkNote = class _ArkNote {
5355
5436
  this.value = value;
5356
5437
  this.HRP = HRP;
5357
5438
  const preimageHash = utils_js.sha256(this.preimage);
5358
- this.vtxoScript = new chunkFNCQJLR2_cjs.VtxoScript([noteTapscript(preimageHash)]);
5439
+ this.vtxoScript = new chunkOH2XLTXE_cjs.VtxoScript([noteTapscript(preimageHash)]);
5359
5440
  const leaf = this.vtxoScript.leaves[0];
5360
5441
  this.txid = base.hex.encode(new Uint8Array(preimageHash).reverse());
5361
5442
  this.tapTree = this.vtxoScript.encode();
@@ -5522,7 +5603,7 @@ var ArkadeCash = class _ArkadeCash {
5522
5603
  const privateKey = data.slice(1, 33);
5523
5604
  const serverPubKey = data.slice(33, 65);
5524
5605
  const sequence = new DataView(data.buffer, data.byteOffset + 65, 4).getUint32(0, false);
5525
- const csvTimelock = chunkFNCQJLR2_cjs.sequenceToTimelock(sequence);
5606
+ const csvTimelock = chunkOH2XLTXE_cjs.sequenceToTimelock(sequence);
5526
5607
  return new _ArkadeCash(privateKey, serverPubKey, csvTimelock, decoded.prefix);
5527
5608
  }
5528
5609
  toString() {
@@ -5530,7 +5611,7 @@ var ArkadeCash = class _ArkadeCash {
5530
5611
  data[0] = _ArkadeCash.Version;
5531
5612
  data.set(this._privateKey, 1);
5532
5613
  data.set(this._serverPubKey, 33);
5533
- const sequence = chunkFNCQJLR2_cjs.timelockToSequence(this.csvTimelock);
5614
+ const sequence = chunkOH2XLTXE_cjs.timelockToSequence(this.csvTimelock);
5534
5615
  new DataView(data.buffer, data.byteOffset + 65, 4).setUint32(0, sequence, false);
5535
5616
  const words = base.bech32m.toWords(data);
5536
5617
  return base.bech32m.encode(this.hrp, words, 1023);
@@ -5539,7 +5620,7 @@ var ArkadeCash = class _ArkadeCash {
5539
5620
  return SingleKey.fromPrivateKey(this._privateKey);
5540
5621
  }
5541
5622
  get vtxoScript() {
5542
- return new chunkSF5NKAUA_cjs.DefaultVtxo.Script({
5623
+ return new chunkG53HASDV_cjs.DefaultVtxo.Script({
5543
5624
  pubKey: this._publicKey,
5544
5625
  serverPubKey: this._serverPubKey,
5545
5626
  csvTimelock: this.csvTimelock
@@ -5800,7 +5881,7 @@ async function captureExitBranch(params) {
5800
5881
  const nonCommitment = ordered.filter((c) => chainTxTypeToChainedExit(c.type) !== 1 /* Commitment */).map((c) => c.txid);
5801
5882
  if (nonCommitment.length > 0) {
5802
5883
  for (const psbt of await resolver.getVirtualTxs(nonCommitment)) {
5803
- psbtByTxid.set(chunkFNCQJLR2_cjs.Transaction.fromPSBT(base.base64.decode(psbt)).id, psbt);
5884
+ psbtByTxid.set(chunkOH2XLTXE_cjs.Transaction.fromPSBT(base.base64.decode(psbt)).id, psbt);
5804
5885
  }
5805
5886
  }
5806
5887
  }
@@ -5843,10 +5924,10 @@ var IndexerExitDataSource = class {
5843
5924
  while (hasMore) {
5844
5925
  const { chain: page, page: meta } = await this.indexer.getVtxoChain(
5845
5926
  { txid: vtxo.txid, vout: vtxo.vout },
5846
- { pageIndex, pageSize: chunkFNCQJLR2_cjs.DEFAULT_PAGE_SIZE }
5927
+ { pageIndex, pageSize: chunkOH2XLTXE_cjs.DEFAULT_PAGE_SIZE }
5847
5928
  );
5848
5929
  chain.push(...page);
5849
- hasMore = meta ? page.length === chunkFNCQJLR2_cjs.DEFAULT_PAGE_SIZE : false;
5930
+ hasMore = meta ? page.length === chunkOH2XLTXE_cjs.DEFAULT_PAGE_SIZE : false;
5850
5931
  pageIndex++;
5851
5932
  }
5852
5933
  return chain;
@@ -5858,12 +5939,12 @@ var IndexerExitDataSource = class {
5858
5939
  while (hasMore) {
5859
5940
  const { txs, page } = await this.indexer.getVirtualTxs(txids, {
5860
5941
  pageIndex,
5861
- pageSize: chunkFNCQJLR2_cjs.DEFAULT_PAGE_SIZE
5942
+ pageSize: chunkOH2XLTXE_cjs.DEFAULT_PAGE_SIZE
5862
5943
  });
5863
5944
  for (const psbt of txs) {
5864
- out.set(chunkFNCQJLR2_cjs.Transaction.fromPSBT(base.base64.decode(psbt)).id, psbt);
5945
+ out.set(chunkOH2XLTXE_cjs.Transaction.fromPSBT(base.base64.decode(psbt)).id, psbt);
5865
5946
  }
5866
- hasMore = page ? txs.length === chunkFNCQJLR2_cjs.DEFAULT_PAGE_SIZE : false;
5947
+ hasMore = page ? txs.length === chunkOH2XLTXE_cjs.DEFAULT_PAGE_SIZE : false;
5867
5948
  pageIndex++;
5868
5949
  }
5869
5950
  return out;
@@ -5884,7 +5965,7 @@ function chainedTxTypeToChainTxType(t) {
5884
5965
  }
5885
5966
  }
5886
5967
  function psbtInputTxids(psbtBase64) {
5887
- const tx = chunkFNCQJLR2_cjs.Transaction.fromPSBT(base.base64.decode(psbtBase64));
5968
+ const tx = chunkOH2XLTXE_cjs.Transaction.fromPSBT(base.base64.decode(psbtBase64));
5888
5969
  const ids = [];
5889
5970
  for (let i = 0; i < tx.inputsLength; i++) {
5890
5971
  const txid = tx.getInput(i).txid;
@@ -6237,10 +6318,10 @@ async function resolveArkInfo(arkProvider, walletRepository) {
6237
6318
  try {
6238
6319
  info = await arkProvider.getInfo();
6239
6320
  } catch (err) {
6240
- if (!chunkFNCQJLR2_cjs.isRetryableProviderError(err)) throw err;
6321
+ if (!chunkOH2XLTXE_cjs.isRetryableProviderError(err)) throw err;
6241
6322
  const snapshot = await loadArkInfoSnapshot(walletRepository);
6242
6323
  if (!snapshot) {
6243
- throw new chunkFNCQJLR2_cjs.ProviderUnavailableError(
6324
+ throw new chunkOH2XLTXE_cjs.ProviderUnavailableError(
6244
6325
  "Arkade server info is unavailable and no cached snapshot exists",
6245
6326
  { cause: err }
6246
6327
  );
@@ -6623,7 +6704,7 @@ function collectArkTxidsNeedingCreatedAt(vtxos) {
6623
6704
  return [...txids];
6624
6705
  }
6625
6706
  async function buildTransactionHistory(vtxos, allBoardingTxs, commitmentsToIgnore, resolveTxCreatedAt) {
6626
- const fromOldestVtxo = vtxos.map(chunkFNCQJLR2_cjs.normalizeVtxo).sort((a, b) => a.createdAt.getTime() - b.createdAt.getTime());
6707
+ const fromOldestVtxo = vtxos.map(chunkOH2XLTXE_cjs.normalizeVtxo).sort((a, b) => a.createdAt.getTime() - b.createdAt.getTime());
6627
6708
  const txidsNeedingCreatedAt = resolveTxCreatedAt ? collectArkTxidsNeedingCreatedAt(fromOldestVtxo) : [];
6628
6709
  const resolvedCreatedAt = resolveTxCreatedAt && txidsNeedingCreatedAt.length > 0 ? await resolveTxCreatedAt(txidsNeedingCreatedAt) : /* @__PURE__ */ new Map();
6629
6710
  const unmatchedSettledBoardingTxs = allBoardingTxs.filter(isSettledBoardingReceive).sort((a, b) => a.createdAt - b.createdAt);
@@ -6787,7 +6868,7 @@ var AssetManager = class extends ReadonlyAssetManager {
6787
6868
  const virtualCoins = await this.wallet.getSpendableVtxos({
6788
6869
  withRecoverable: false
6789
6870
  });
6790
- const controlAssetRef = params.controlAssetId ? chunk2JHN5RCY_cjs.AssetRef.fromId(chunk2JHN5RCY_cjs.AssetId.fromString(params.controlAssetId)) : null;
6871
+ const controlAssetRef = params.controlAssetId ? chunkI6EDUE75_cjs.AssetRef.fromId(chunkI6EDUE75_cjs.AssetId.fromString(params.controlAssetId)) : null;
6791
6872
  const coinSelection = selectVirtualCoins(virtualCoins, Number(this.wallet.dustAmount));
6792
6873
  let totalBtcSelected = 0n;
6793
6874
  const assetChanges = /* @__PURE__ */ new Map();
@@ -6800,8 +6881,8 @@ var AssetManager = class extends ReadonlyAssetManager {
6800
6881
  }
6801
6882
  }
6802
6883
  const groups = [];
6803
- const issuedAssetOutput = chunk2JHN5RCY_cjs.AssetOutput.create(0, params.amount);
6804
- const issuedAssetGroup = chunk2JHN5RCY_cjs.AssetGroup.create(
6884
+ const issuedAssetOutput = chunkI6EDUE75_cjs.AssetOutput.create(0, params.amount);
6885
+ const issuedAssetGroup = chunkI6EDUE75_cjs.AssetGroup.create(
6805
6886
  null,
6806
6887
  controlAssetRef,
6807
6888
  [],
@@ -6816,28 +6897,28 @@ var AssetManager = class extends ReadonlyAssetManager {
6816
6897
  for (const [inputIndex, assets] of assetInputs) {
6817
6898
  for (const asset of assets) {
6818
6899
  if (asset.assetId !== assetId) continue;
6819
- changeInputs.push(chunk2JHN5RCY_cjs.AssetInput.create(inputIndex, asset.amount));
6900
+ changeInputs.push(chunkI6EDUE75_cjs.AssetInput.create(inputIndex, asset.amount));
6820
6901
  }
6821
6902
  }
6822
6903
  groups.push(
6823
- chunk2JHN5RCY_cjs.AssetGroup.create(
6824
- chunk2JHN5RCY_cjs.AssetId.fromString(assetId),
6904
+ chunkI6EDUE75_cjs.AssetGroup.create(
6905
+ chunkI6EDUE75_cjs.AssetId.fromString(assetId),
6825
6906
  null,
6826
6907
  changeInputs,
6827
- [chunk2JHN5RCY_cjs.AssetOutput.create(0, amount)],
6908
+ [chunkI6EDUE75_cjs.AssetOutput.create(0, amount)],
6828
6909
  []
6829
6910
  )
6830
6911
  );
6831
6912
  }
6832
6913
  }
6833
6914
  const address = await this.wallet.getAddress();
6834
- const outputAddress = chunkFNCQJLR2_cjs.ArkAddress.decode(address);
6915
+ const outputAddress = chunkOH2XLTXE_cjs.ArkAddress.decode(address);
6835
6916
  const outputs = [
6836
6917
  {
6837
6918
  script: outputAddress.pkScript,
6838
6919
  amount: BigInt(totalBtcSelected)
6839
6920
  },
6840
- Extension.create([chunk2JHN5RCY_cjs.Packet.create(groups)]).txOut()
6921
+ Extension.create([chunkI6EDUE75_cjs.Packet.create(groups)]).txOut()
6841
6922
  ];
6842
6923
  const { arkTxid } = await this.wallet.buildAndSubmitOffchainTx(
6843
6924
  coinSelection.inputs,
@@ -6845,7 +6926,7 @@ var AssetManager = class extends ReadonlyAssetManager {
6845
6926
  );
6846
6927
  return {
6847
6928
  arkTxId: arkTxid,
6848
- assetId: chunk2JHN5RCY_cjs.AssetId.create(arkTxid, 0).toString()
6929
+ assetId: chunkI6EDUE75_cjs.AssetId.create(arkTxid, 0).toString()
6849
6930
  };
6850
6931
  }
6851
6932
  /**
@@ -6917,16 +6998,16 @@ var AssetManager = class extends ReadonlyAssetManager {
6917
6998
  for (const [inputIndex, assets] of assetInputs) {
6918
6999
  for (const asset of assets) {
6919
7000
  if (asset.assetId !== params.assetId) continue;
6920
- reissueInputs.push(chunk2JHN5RCY_cjs.AssetInput.create(inputIndex, asset.amount));
7001
+ reissueInputs.push(chunkI6EDUE75_cjs.AssetInput.create(inputIndex, asset.amount));
6921
7002
  }
6922
7003
  }
6923
7004
  const totalAssetAmount = assetToReissueAmount + params.amount;
6924
- const reissueAssetIdObj = chunk2JHN5RCY_cjs.AssetId.fromString(params.assetId);
6925
- const reissueAssetGroup = chunk2JHN5RCY_cjs.AssetGroup.create(
7005
+ const reissueAssetIdObj = chunkI6EDUE75_cjs.AssetId.fromString(params.assetId);
7006
+ const reissueAssetGroup = chunkI6EDUE75_cjs.AssetGroup.create(
6926
7007
  reissueAssetIdObj,
6927
7008
  null,
6928
7009
  reissueInputs,
6929
- [chunk2JHN5RCY_cjs.AssetOutput.create(0, totalAssetAmount)],
7010
+ [chunkI6EDUE75_cjs.AssetOutput.create(0, totalAssetAmount)],
6930
7011
  []
6931
7012
  );
6932
7013
  const groups = [reissueAssetGroup];
@@ -6935,27 +7016,27 @@ var AssetManager = class extends ReadonlyAssetManager {
6935
7016
  for (const [inputIndex, assets] of assetInputs) {
6936
7017
  for (const asset of assets) {
6937
7018
  if (asset.assetId !== assetId) continue;
6938
- changeInputs.push(chunk2JHN5RCY_cjs.AssetInput.create(inputIndex, asset.amount));
7019
+ changeInputs.push(chunkI6EDUE75_cjs.AssetInput.create(inputIndex, asset.amount));
6939
7020
  }
6940
7021
  }
6941
7022
  groups.push(
6942
- chunk2JHN5RCY_cjs.AssetGroup.create(
6943
- chunk2JHN5RCY_cjs.AssetId.fromString(assetId),
7023
+ chunkI6EDUE75_cjs.AssetGroup.create(
7024
+ chunkI6EDUE75_cjs.AssetId.fromString(assetId),
6944
7025
  null,
6945
7026
  changeInputs,
6946
- [chunk2JHN5RCY_cjs.AssetOutput.create(0, amount)],
7027
+ [chunkI6EDUE75_cjs.AssetOutput.create(0, amount)],
6947
7028
  []
6948
7029
  )
6949
7030
  );
6950
7031
  }
6951
7032
  const address = await this.wallet.getAddress();
6952
- const outputAddress = chunkFNCQJLR2_cjs.ArkAddress.decode(address);
7033
+ const outputAddress = chunkOH2XLTXE_cjs.ArkAddress.decode(address);
6953
7034
  const outputs = [
6954
7035
  {
6955
7036
  script: outputAddress.pkScript,
6956
7037
  amount: BigInt(totalBtcSelected)
6957
7038
  },
6958
- Extension.create([chunk2JHN5RCY_cjs.Packet.create(groups)]).txOut()
7039
+ Extension.create([chunkI6EDUE75_cjs.Packet.create(groups)]).txOut()
6959
7040
  ];
6960
7041
  const { arkTxid } = await this.wallet.buildAndSubmitOffchainTx(selectedCoins, outputs);
6961
7042
  return arkTxid;
@@ -7022,27 +7103,27 @@ var AssetManager = class extends ReadonlyAssetManager {
7022
7103
  for (const [inputIndex, assets] of assetInputs) {
7023
7104
  for (const asset of assets) {
7024
7105
  if (asset.assetId !== assetId) continue;
7025
- changeInputs.push(chunk2JHN5RCY_cjs.AssetInput.create(inputIndex, asset.amount));
7106
+ changeInputs.push(chunkI6EDUE75_cjs.AssetInput.create(inputIndex, asset.amount));
7026
7107
  }
7027
7108
  }
7028
7109
  groups.push(
7029
- chunk2JHN5RCY_cjs.AssetGroup.create(
7030
- chunk2JHN5RCY_cjs.AssetId.fromString(assetId),
7110
+ chunkI6EDUE75_cjs.AssetGroup.create(
7111
+ chunkI6EDUE75_cjs.AssetId.fromString(assetId),
7031
7112
  null,
7032
7113
  changeInputs,
7033
- amount > 0n ? [chunk2JHN5RCY_cjs.AssetOutput.create(0, amount)] : [],
7114
+ amount > 0n ? [chunkI6EDUE75_cjs.AssetOutput.create(0, amount)] : [],
7034
7115
  []
7035
7116
  )
7036
7117
  );
7037
7118
  }
7038
7119
  const address = await this.wallet.getAddress();
7039
- const outputAddress = chunkFNCQJLR2_cjs.ArkAddress.decode(address);
7120
+ const outputAddress = chunkOH2XLTXE_cjs.ArkAddress.decode(address);
7040
7121
  const outputs = [
7041
7122
  {
7042
7123
  script: outputAddress.pkScript,
7043
7124
  amount: BigInt(totalBtcSelected)
7044
7125
  },
7045
- Extension.create([chunk2JHN5RCY_cjs.Packet.create(groups)]).txOut()
7126
+ Extension.create([chunkI6EDUE75_cjs.Packet.create(groups)]).txOut()
7046
7127
  ];
7047
7128
  const { arkTxid } = await this.wallet.buildAndSubmitOffchainTx(selectedCoins, outputs);
7048
7129
  return arkTxid;
@@ -7067,7 +7148,7 @@ function castMetadata(metadata) {
7067
7148
  } else {
7068
7149
  throw new Error("Invalid metadata value type");
7069
7150
  }
7070
- md.push(chunk2JHN5RCY_cjs.Metadata.create(textEncoder.encode(key), valueBytes));
7151
+ md.push(chunkI6EDUE75_cjs.Metadata.create(textEncoder.encode(key), valueBytes));
7071
7152
  }
7072
7153
  return md;
7073
7154
  }
@@ -7088,10 +7169,10 @@ var DelegateManagerImpl = class {
7088
7169
  if (vtxos.length === 0) {
7089
7170
  return { delegated: [], failed: [] };
7090
7171
  }
7091
- const destinationScript = chunkFNCQJLR2_cjs.ArkAddress.decode(destination).pkScript;
7172
+ const destinationScript = chunkOH2XLTXE_cjs.ArkAddress.decode(destination).pkScript;
7092
7173
  const arkInfo = await this.arkInfoProvider.getInfo();
7093
7174
  const delegateInfo = await this.delegateProvider.getDelegateInfo();
7094
- const eligible = vtxos.map(chunkFNCQJLR2_cjs.normalizeVtxo).filter(
7175
+ const eligible = vtxos.map(chunkOH2XLTXE_cjs.normalizeVtxo).filter(
7095
7176
  (v) => isAnnotated(v) && findDelegateTapLeaf(v, delegateInfo.pubkey) !== void 0
7096
7177
  );
7097
7178
  if (eligible.length === 0) {
@@ -7120,11 +7201,11 @@ var DelegateManagerImpl = class {
7120
7201
  const groupByExpiry = /* @__PURE__ */ new Map();
7121
7202
  let recoverableVtxos = [];
7122
7203
  for (const vtxo of eligible) {
7123
- if (chunkFNCQJLR2_cjs.canRecoverOnchain(vtxo, now)) {
7204
+ if (chunkOH2XLTXE_cjs.canRecoverOnchain(vtxo, now)) {
7124
7205
  recoverableVtxos.push(vtxo);
7125
7206
  continue;
7126
7207
  }
7127
- const expiry = chunkFNCQJLR2_cjs.toBatchExpiry(vtxo);
7208
+ const expiry = chunkOH2XLTXE_cjs.toBatchExpiry(vtxo);
7128
7209
  if (!expiry) continue;
7129
7210
  const dayKey = getDayTimestamp(expiry);
7130
7211
  groupByExpiry.set(dayKey, [...groupByExpiry.get(dayKey) ?? [], vtxo]);
@@ -7189,7 +7270,7 @@ async function delegate(identity, delegateProvider, arkInfo, delegateInfo, vtxos
7189
7270
  }
7190
7271
  if (!delegateAt) {
7191
7272
  const now = { timestamp: /* @__PURE__ */ new Date() };
7192
- const expiryTimestamp = vtxos.filter((coin) => !chunkFNCQJLR2_cjs.canRecoverOnchain(coin, now) && chunkFNCQJLR2_cjs.toBatchExpiry(coin)).reduce((min, coin) => Math.min(min, chunkFNCQJLR2_cjs.toBatchExpiry(coin)), Number.MAX_SAFE_INTEGER);
7273
+ const expiryTimestamp = vtxos.filter((coin) => !chunkOH2XLTXE_cjs.canRecoverOnchain(coin, now) && chunkOH2XLTXE_cjs.toBatchExpiry(coin)).reduce((min, coin) => Math.min(min, chunkOH2XLTXE_cjs.toBatchExpiry(coin)), Number.MAX_SAFE_INTEGER);
7193
7274
  if (!expiryTimestamp || expiryTimestamp === Number.MAX_SAFE_INTEGER) {
7194
7275
  delegateAt = new Date(Date.now() + 1 * 60 * 1e3);
7195
7276
  } else {
@@ -7218,7 +7299,7 @@ async function delegate(identity, delegateProvider, arkInfo, delegateInfo, vtxos
7218
7299
  let amount = 0n;
7219
7300
  for (const coin of vtxos) {
7220
7301
  const inputFee = estimator.evalOffchainInput({
7221
- ...chunkFNCQJLR2_cjs.toOffchainInputFeeParams(coin),
7302
+ ...chunkOH2XLTXE_cjs.toOffchainInputFeeParams(coin),
7222
7303
  type: "vtxo"
7223
7304
  });
7224
7305
  if (inputFee.value >= coin.value) {
@@ -7232,7 +7313,7 @@ async function delegate(identity, delegateProvider, arkInfo, delegateInfo, vtxos
7232
7313
  const delegateFee = BigInt(Number(fee));
7233
7314
  if (delegateFee > 0n) {
7234
7315
  outputs.push({
7235
- script: chunkFNCQJLR2_cjs.ArkAddress.decode(delegateAddress).pkScript,
7316
+ script: chunkOH2XLTXE_cjs.ArkAddress.decode(delegateAddress).pkScript,
7236
7317
  amount: delegateFee
7237
7318
  });
7238
7319
  }
@@ -7265,10 +7346,10 @@ async function delegate(identity, delegateProvider, arkInfo, delegateInfo, vtxos
7265
7346
  destinationScript
7266
7347
  );
7267
7348
  const forfeitOutputScript = btcSigner.OutScript.encode(
7268
- btcSigner.Address(chunkFNCQJLR2_cjs.getNetwork(network)).decode(forfeitAddress)
7349
+ btcSigner.Address(chunkOH2XLTXE_cjs.getNetwork(network)).decode(forfeitAddress)
7269
7350
  );
7270
7351
  const forfeits = await Promise.all(
7271
- vtxos.filter((v) => !chunkFNCQJLR2_cjs.canRecoverOnchain(v, { timestamp: /* @__PURE__ */ new Date() })).map(async (coin) => {
7352
+ vtxos.filter((v) => !chunkOH2XLTXE_cjs.canRecoverOnchain(v, { timestamp: /* @__PURE__ */ new Date() })).map(async (coin) => {
7272
7353
  const forfeit = await makeDelegateForfeitTx(
7273
7354
  coin,
7274
7355
  dust,
@@ -7293,7 +7374,7 @@ async function makeDelegateForfeitTx(input, connectorAmount, delegatePubkey, for
7293
7374
  index: input.vout,
7294
7375
  witnessUtxo: {
7295
7376
  amount: BigInt(input.value),
7296
- script: chunkFNCQJLR2_cjs.VtxoScript.decode(input.tapTree).pkScript
7377
+ script: chunkOH2XLTXE_cjs.VtxoScript.decode(input.tapTree).pkScript
7297
7378
  },
7298
7379
  sighashType: btcSigner.SigHash.ALL_ANYONECANPAY,
7299
7380
  tapLeafScript: [delegateTapLeaf]
@@ -7351,7 +7432,7 @@ async function makeSignedDelegateIntent(identity, coins, outputs, onchainOutputs
7351
7432
  expire_at: 0,
7352
7433
  cosigners_public_keys: cosignerPubKeys
7353
7434
  };
7354
- const proof = chunkFNCQJLR2_cjs.Intent.create(message, coins, outputs);
7435
+ const proof = chunkOH2XLTXE_cjs.Intent.create(message, coins, outputs);
7355
7436
  const signedProof = await identity.sign(proof);
7356
7437
  return {
7357
7438
  proof: base.base64.encode(signedProof.toPSBT()),
@@ -7369,10 +7450,10 @@ function getDayTimestamp(timestamp) {
7369
7450
  function findDelegateTapLeaf(vtxo, delegatePubkey) {
7370
7451
  if (!vtxo.tapTree) return void 0;
7371
7452
  const pk = delegatePubkey.length === 66 ? delegatePubkey.slice(2) : delegatePubkey;
7372
- const vtxoScript = chunkFNCQJLR2_cjs.VtxoScript.decode(vtxo.tapTree);
7453
+ const vtxoScript = chunkOH2XLTXE_cjs.VtxoScript.decode(vtxo.tapTree);
7373
7454
  return vtxoScript.leaves.find((tapLeaf) => {
7374
- const arkTapscript = chunkFNCQJLR2_cjs.decodeTapscript(chunkFNCQJLR2_cjs.scriptFromTapLeafScript(tapLeaf));
7375
- if (!chunkFNCQJLR2_cjs.MultisigTapscript.is(arkTapscript)) return false;
7455
+ const arkTapscript = chunkOH2XLTXE_cjs.decodeTapscript(chunkOH2XLTXE_cjs.scriptFromTapLeafScript(tapLeaf));
7456
+ if (!chunkOH2XLTXE_cjs.MultisigTapscript.is(arkTapscript)) return false;
7376
7457
  return arkTapscript.params.pubkeys.map(base.hex.encode).includes(pk);
7377
7458
  });
7378
7459
  }
@@ -7560,7 +7641,7 @@ async function closeDatabase(dbName) {
7560
7641
  return true;
7561
7642
  }
7562
7643
  function scriptFromArkAddress(address) {
7563
- return base.hex.encode(chunkFNCQJLR2_cjs.ArkAddress.decode(address).pkScript);
7644
+ return base.hex.encode(chunkOH2XLTXE_cjs.ArkAddress.decode(address).pkScript);
7564
7645
  }
7565
7646
 
7566
7647
  // src/repositories/indexedDB/schema.ts
@@ -8057,7 +8138,7 @@ function validateVtxosForScript(vtxos, script, context) {
8057
8138
  }
8058
8139
  async function getVtxosForContract(repo, contract) {
8059
8140
  const vtxos = repo.getVtxosForScript ? await repo.getVtxosForScript(contract.script) : filterVtxosForScript(await repo.getVtxos(contract.address), contract.script);
8060
- return vtxos.map(chunkFNCQJLR2_cjs.normalizeVtxo);
8141
+ return vtxos.map(chunkOH2XLTXE_cjs.normalizeVtxo);
8061
8142
  }
8062
8143
  async function saveVtxosForContract(repo, contract, vtxos) {
8063
8144
  if (repo.saveVtxosForScript) {
@@ -8199,7 +8280,7 @@ function decodeArkContract(encoded) {
8199
8280
  }
8200
8281
  function contractFromArkContract(encoded, options = {}) {
8201
8282
  const parsed = decodeArkContract(encoded);
8202
- const handler = chunkSF5NKAUA_cjs.contractHandlers.get(parsed.type);
8283
+ const handler = chunkG53HASDV_cjs.contractHandlers.get(parsed.type);
8203
8284
  if (!handler) {
8204
8285
  throw new Error(`No handler registered for contract type '${parsed.type}'`);
8205
8286
  }
@@ -8213,9 +8294,9 @@ function contractFromArkContract(encoded, options = {}) {
8213
8294
  metadata: options.metadata
8214
8295
  };
8215
8296
  }
8216
- function contractFromArkContractWithAddress(encoded, serverPubKey, addressPrefix = chunkFNCQJLR2_cjs.DEFAULT_NETWORK.hrp, options = {}) {
8297
+ function contractFromArkContractWithAddress(encoded, serverPubKey, addressPrefix = chunkOH2XLTXE_cjs.DEFAULT_NETWORK.hrp, options = {}) {
8217
8298
  const parsed = decodeArkContract(encoded);
8218
- const handler = chunkSF5NKAUA_cjs.contractHandlers.getOrThrow(parsed.type);
8299
+ const handler = chunkG53HASDV_cjs.contractHandlers.getOrThrow(parsed.type);
8219
8300
  const params = parsed.data;
8220
8301
  const vtxoScript = handler.createScript(params);
8221
8302
  return {
@@ -8469,9 +8550,9 @@ var ContractWatcher = class {
8469
8550
  this.connectionState = "connected";
8470
8551
  this.reconnectAttempts = 0;
8471
8552
  this.listenLoop().catch((e) => {
8472
- if (chunkFNCQJLR2_cjs.isEventSourceError(e)) {
8553
+ if (chunkOH2XLTXE_cjs.isEventSourceError(e)) {
8473
8554
  console.debug("ContractWatcher subscription disconnected; reconnecting");
8474
- } else if (!chunkFNCQJLR2_cjs.isEventSourceUnavailableError(e)) {
8555
+ } else if (!chunkOH2XLTXE_cjs.isEventSourceUnavailableError(e)) {
8475
8556
  console.error(e);
8476
8557
  }
8477
8558
  this.connectionState = "disconnected";
@@ -8483,7 +8564,7 @@ var ContractWatcher = class {
8483
8564
  this.scheduleReconnect();
8484
8565
  });
8485
8566
  } catch (error) {
8486
- if (!chunkFNCQJLR2_cjs.isEventSourceUnavailableError(error)) {
8567
+ if (!chunkOH2XLTXE_cjs.isEventSourceUnavailableError(error)) {
8487
8568
  console.error("ContractWatcher connection failed:", error);
8488
8569
  }
8489
8570
  this.connectionState = "disconnected";
@@ -8509,7 +8590,7 @@ var ContractWatcher = class {
8509
8590
  * slower; what it loses is push latency.
8510
8591
  */
8511
8592
  reportEventSourceUnavailable(error) {
8512
- if (!chunkFNCQJLR2_cjs.isEventSourceUnavailableError(error)) return false;
8593
+ if (!chunkOH2XLTXE_cjs.isEventSourceUnavailableError(error)) return false;
8513
8594
  if (!this.eventSourceReported) {
8514
8595
  this.eventSourceReported = true;
8515
8596
  console.warn(
@@ -8725,14 +8806,14 @@ var ContractWatcher = class {
8725
8806
  const timestamp = Date.now();
8726
8807
  if (update.newVtxos?.length) {
8727
8808
  this.processSubscriptionVtxos(
8728
- update.newVtxos.map(chunkFNCQJLR2_cjs.normalizeVtxo),
8809
+ update.newVtxos.map(chunkOH2XLTXE_cjs.normalizeVtxo),
8729
8810
  "vtxo_received",
8730
8811
  timestamp
8731
8812
  );
8732
8813
  }
8733
8814
  if (update.spentVtxos?.length) {
8734
8815
  this.processSubscriptionVtxos(
8735
- update.spentVtxos.map(chunkFNCQJLR2_cjs.normalizeVtxo),
8816
+ update.spentVtxos.map(chunkOH2XLTXE_cjs.normalizeVtxo),
8736
8817
  "vtxo_spent",
8737
8818
  timestamp
8738
8819
  );
@@ -8865,7 +8946,7 @@ async function reconcileIntents(deps) {
8865
8946
  let vtxosByOutpoint = /* @__PURE__ */ new Map();
8866
8947
  if (outpoints.length > 0) {
8867
8948
  try {
8868
- const { vtxos } = await chunkFNCQJLR2_cjs.getNormalizedVtxos(deps.indexerProvider, { outpoints });
8949
+ const { vtxos } = await chunkOH2XLTXE_cjs.getNormalizedVtxos(deps.indexerProvider, { outpoints });
8869
8950
  vtxosByOutpoint = new Map(vtxos.map((v) => [outpointKey(v), v]));
8870
8951
  } catch (e) {
8871
8952
  console.error("reconcileIntents: failed to fetch input VTXO state", e);
@@ -9039,7 +9120,7 @@ var ContractManager = class _ContractManager {
9039
9120
  await this.reconcileWatched();
9040
9121
  this.markSyncOnline();
9041
9122
  } catch (err) {
9042
- if (!chunkFNCQJLR2_cjs.isRetryableProviderError(err)) throw err;
9123
+ if (!chunkOH2XLTXE_cjs.isRetryableProviderError(err)) throw err;
9043
9124
  this.markSyncDegraded(err);
9044
9125
  }
9045
9126
  this.initialized = true;
@@ -9171,7 +9252,7 @@ var ContractManager = class _ContractManager {
9171
9252
  const from = Math.max(0, watermark - lookAhead.size);
9172
9253
  const to = watermark + lookAhead.size;
9173
9254
  const deps = lookAhead.candidateDeps();
9174
- const handlers = chunkSF5NKAUA_cjs.contractHandlers.getRegisteredTypes().map((t) => chunkSF5NKAUA_cjs.contractHandlers.get(t)).filter(hasCandidates);
9255
+ const handlers = chunkG53HASDV_cjs.contractHandlers.getRegisteredTypes().map((t) => chunkG53HASDV_cjs.contractHandlers.get(t)).filter(hasCandidates);
9175
9256
  const band = /* @__PURE__ */ new Map();
9176
9257
  for (let index = from; index <= to; index++) {
9177
9258
  const descriptor = lookAhead.materialize(index);
@@ -9182,7 +9263,7 @@ var ContractManager = class _ContractManager {
9182
9263
  index,
9183
9264
  params: {
9184
9265
  ...candidate,
9185
- ...chunkSF5NKAUA_cjs.speculativeReceiveMetadata(descriptor)
9266
+ ...chunkG53HASDV_cjs.speculativeReceiveMetadata(descriptor)
9186
9267
  }
9187
9268
  });
9188
9269
  }
@@ -9244,7 +9325,7 @@ var ContractManager = class _ContractManager {
9244
9325
  });
9245
9326
  for (const entry of pending) entry.catchUpPending = false;
9246
9327
  } catch (err) {
9247
- if (!chunkFNCQJLR2_cjs.isRetryableProviderError(err)) throw err;
9328
+ if (!chunkOH2XLTXE_cjs.isRetryableProviderError(err)) throw err;
9248
9329
  this.markSyncDegraded(err);
9249
9330
  }
9250
9331
  }
@@ -9294,7 +9375,7 @@ var ContractManager = class _ContractManager {
9294
9375
  await this.fetchContractVxosFromIndexer([contract]);
9295
9376
  this.markSyncOnline();
9296
9377
  } catch (err) {
9297
- if (!chunkFNCQJLR2_cjs.isRetryableProviderError(err)) throw err;
9378
+ if (!chunkOH2XLTXE_cjs.isRetryableProviderError(err)) throw err;
9298
9379
  this.markSyncDegraded(err);
9299
9380
  }
9300
9381
  await this.watcher.addContract(contract);
@@ -9331,7 +9412,7 @@ var ContractManager = class _ContractManager {
9331
9412
  return result;
9332
9413
  }
9333
9414
  async upsertContractRow(params) {
9334
- const handler = chunkSF5NKAUA_cjs.contractHandlers.get(params.type);
9415
+ const handler = chunkG53HASDV_cjs.contractHandlers.get(params.type);
9335
9416
  if (!handler) {
9336
9417
  throw new Error(`No handler registered for contract type '${params.type}'`);
9337
9418
  }
@@ -9431,7 +9512,7 @@ var ContractManager = class _ContractManager {
9431
9512
  `scanContracts: batchSize must be a positive integer (got ${String(opts.batchSize)})`
9432
9513
  );
9433
9514
  }
9434
- const registered = chunkSF5NKAUA_cjs.contractHandlers.getRegisteredTypes().map((t) => chunkSF5NKAUA_cjs.contractHandlers.get(t)).filter(isDiscoverable);
9515
+ const registered = chunkG53HASDV_cjs.contractHandlers.getRegisteredTypes().map((t) => chunkG53HASDV_cjs.contractHandlers.get(t)).filter(isDiscoverable);
9435
9516
  const discoverables = [
9436
9517
  ...registered.filter((h) => h.type === "boarding"),
9437
9518
  ...registered.filter((h) => h.type !== "boarding")
@@ -9566,7 +9647,7 @@ var ContractManager = class _ContractManager {
9566
9647
  await this.syncContracts({ contracts, pageSize });
9567
9648
  this.markSyncOnline();
9568
9649
  } catch (err) {
9569
- if (!chunkFNCQJLR2_cjs.isRetryableProviderError(err)) throw err;
9650
+ if (!chunkOH2XLTXE_cjs.isRetryableProviderError(err)) throw err;
9570
9651
  this.markSyncDegraded(err);
9571
9652
  }
9572
9653
  const vtxos = await this.getVtxosForContracts(contracts);
@@ -9587,7 +9668,7 @@ var ContractManager = class _ContractManager {
9587
9668
  }
9588
9669
  const tapscriptCache = tapscripts ?? /* @__PURE__ */ new Map();
9589
9670
  return vtxos.map(
9590
- (vtxo) => extendVirtualCoinForContract(chunkFNCQJLR2_cjs.normalizeVtxo(vtxo), byScript, tapscriptCache)
9671
+ (vtxo) => extendVirtualCoinForContract(chunkOH2XLTXE_cjs.normalizeVtxo(vtxo), byScript, tapscriptCache)
9591
9672
  );
9592
9673
  }
9593
9674
  /** @inheritdoc */
@@ -9631,14 +9712,14 @@ var ContractManager = class _ContractManager {
9631
9712
  const byScript = new Map(contracts.map((contract) => [contract.script, contract]));
9632
9713
  const asking = vtxos.filter((vtxo) => {
9633
9714
  const contract = byScript.get(vtxo.script);
9634
- return contract !== void 0 && chunkSF5NKAUA_cjs.contractHandlers.get(contract.type)?.assertSpendableNow !== void 0;
9715
+ return contract !== void 0 && chunkG53HASDV_cjs.contractHandlers.get(contract.type)?.assertSpendableNow !== void 0;
9635
9716
  });
9636
9717
  if (asking.length === 0) return refused;
9637
9718
  const tip = await this.currentChainTip();
9638
9719
  const walletKey = await walletPubKey?.();
9639
9720
  for (const vtxo of asking) {
9640
9721
  const contract = byScript.get(vtxo.script);
9641
- const handler = chunkSF5NKAUA_cjs.contractHandlers.get(contract.type);
9722
+ const handler = chunkG53HASDV_cjs.contractHandlers.get(contract.type);
9642
9723
  if (!handler?.assertSpendableNow) continue;
9643
9724
  const context = {
9644
9725
  collaborative: true,
@@ -9653,7 +9734,7 @@ var ContractManager = class _ContractManager {
9653
9734
  // the next handler to answer a CSV question would meet a
9654
9735
  // TypeError instead of a `false`. Carry the coin only when it
9655
9736
  // really is one.
9656
- vtxo: chunkFNCQJLR2_cjs.isVirtualCoin(vtxo) && "status" in vtxo ? vtxo : void 0
9737
+ vtxo: chunkOH2XLTXE_cjs.isVirtualCoin(vtxo) && "status" in vtxo ? vtxo : void 0
9657
9738
  };
9658
9739
  try {
9659
9740
  await handler.assertSpendableNow(
@@ -9809,7 +9890,7 @@ var ContractManager = class _ContractManager {
9809
9890
  const { contractScript, collaborative = true, walletPubKey, vtxo } = options;
9810
9891
  const [contract] = await this.getContracts({ script: contractScript });
9811
9892
  if (!contract) return [];
9812
- const handler = chunkSF5NKAUA_cjs.contractHandlers.get(contract.type);
9893
+ const handler = chunkG53HASDV_cjs.contractHandlers.get(contract.type);
9813
9894
  if (!handler) return [];
9814
9895
  const script = handler.createScript(contract.params);
9815
9896
  const tip = await this.currentChainTip();
@@ -9837,7 +9918,7 @@ var ContractManager = class _ContractManager {
9837
9918
  const { contractScript, collaborative = true, walletPubKey } = options;
9838
9919
  const [contract] = await this.getContracts({ script: contractScript });
9839
9920
  if (!contract) return [];
9840
- const handler = chunkSF5NKAUA_cjs.contractHandlers.get(contract.type);
9921
+ const handler = chunkG53HASDV_cjs.contractHandlers.get(contract.type);
9841
9922
  if (!handler) return [];
9842
9923
  const script = handler.createScript(contract.params);
9843
9924
  const context = {
@@ -9893,7 +9974,7 @@ var ContractManager = class _ContractManager {
9893
9974
  }
9894
9975
  async refreshOutpoints(outpoints) {
9895
9976
  if (outpoints.length === 0) return;
9896
- const { vtxos } = await chunkFNCQJLR2_cjs.getNormalizedVtxos(this.config.indexerProvider, {
9977
+ const { vtxos } = await chunkOH2XLTXE_cjs.getNormalizedVtxos(this.config.indexerProvider, {
9897
9978
  outpoints
9898
9979
  });
9899
9980
  if (vtxos.length === 0) return;
@@ -9972,7 +10053,7 @@ var ContractManager = class _ContractManager {
9972
10053
  break;
9973
10054
  }
9974
10055
  } catch (err) {
9975
- if (!chunkFNCQJLR2_cjs.isRetryableProviderError(err)) throw err;
10056
+ if (!chunkOH2XLTXE_cjs.isRetryableProviderError(err)) throw err;
9976
10057
  this.markSyncDegraded(err);
9977
10058
  }
9978
10059
  this.emitEvent(event);
@@ -10051,7 +10132,7 @@ var ContractManager = class _ContractManager {
10051
10132
  */
10052
10133
  async reconcilePendingFrontier(contracts) {
10053
10134
  const scriptToContract = new Map(contracts.map((c) => [c.script, c]));
10054
- const vtxos = await chunkFNCQJLR2_cjs.getAllNormalizedVtxos(
10135
+ const vtxos = await chunkOH2XLTXE_cjs.getAllNormalizedVtxos(
10055
10136
  this.config.indexerProvider,
10056
10137
  contracts.map((c) => c.script),
10057
10138
  { pendingOnly: true }
@@ -10134,7 +10215,7 @@ var ContractManager = class _ContractManager {
10134
10215
  }
10135
10216
  return result;
10136
10217
  }
10137
- async fetchContractVtxosBulk(contracts, pageSize = chunkFNCQJLR2_cjs.DEFAULT_PAGE_SIZE, syncWindow) {
10218
+ async fetchContractVtxosBulk(contracts, pageSize = chunkOH2XLTXE_cjs.DEFAULT_PAGE_SIZE, syncWindow) {
10138
10219
  if (contracts.length === 0) {
10139
10220
  return { vtxosByScript: /* @__PURE__ */ new Map(), promoted: /* @__PURE__ */ new Map() };
10140
10221
  }
@@ -10150,7 +10231,7 @@ var ContractManager = class _ContractManager {
10150
10231
  before: syncWindow.before
10151
10232
  }
10152
10233
  } : {};
10153
- const vtxos = await chunkFNCQJLR2_cjs.getAllNormalizedVtxos(
10234
+ const vtxos = await chunkOH2XLTXE_cjs.getAllNormalizedVtxos(
10154
10235
  this.config.indexerProvider,
10155
10236
  contracts.map((c) => c.script),
10156
10237
  { ...windowOpts, pageSize }
@@ -10295,7 +10376,7 @@ var deserializeTapLeaf = (t) => {
10295
10376
  const s = base.hex.decode(t.s);
10296
10377
  return [cb, s];
10297
10378
  };
10298
- var deserializeVtxo = (o) => chunkFNCQJLR2_cjs.normalizeVtxo({
10379
+ var deserializeVtxo = (o) => chunkOH2XLTXE_cjs.normalizeVtxo({
10299
10380
  ...o,
10300
10381
  createdAt: new Date(o.createdAt),
10301
10382
  tapTree: base.hex.decode(o.tapTree),
@@ -11336,7 +11417,7 @@ var HDDescriptorProvider = class _HDDescriptorProvider {
11336
11417
  */
11337
11418
  materializeDescriptorAt(index) {
11338
11419
  const descriptor = this.identity.descriptor;
11339
- const network = chunkSF5NKAUA_cjs.isMainnetDescriptor(descriptor) ? descriptorsScure.networks.bitcoin : descriptorsScure.networks.testnet;
11420
+ const network = chunkG53HASDV_cjs.isMainnetDescriptor(descriptor) ? descriptorsScure.networks.bitcoin : descriptorsScure.networks.testnet;
11340
11421
  const expansion = descriptorsScure.expand({ descriptor, network, index });
11341
11422
  const keyInfo = expansion.expansionMap?.["@0"];
11342
11423
  if (!keyInfo?.keyExpression) {
@@ -11484,7 +11565,7 @@ var WalletReceiveRotator = class _WalletReceiveRotator {
11484
11565
  const provider = await resolveDescriptorProvider(config, setup.walletRepository);
11485
11566
  if (!provider) return void 0;
11486
11567
  const allowSilentFallback = (config.walletMode ?? "auto") === "auto";
11487
- const expectedContractType = setup.offchainTapscript instanceof chunkSF5NKAUA_cjs.DelegateVtxo.Script ? "delegate" : "default";
11568
+ const expectedContractType = setup.offchainTapscript instanceof chunkG53HASDV_cjs.DelegateVtxo.Script ? "delegate" : "default";
11488
11569
  const factoryOpts = {
11489
11570
  walletRepository: setup.walletRepository,
11490
11571
  contractRepository: setup.contractRepository,
@@ -11683,7 +11764,7 @@ var WalletReceiveRotator = class _WalletReceiveRotator {
11683
11764
  };
11684
11765
  function deriveLeafPubkey(descriptor) {
11685
11766
  try {
11686
- return chunkSF5NKAUA_cjs.deriveDescriptorLeafPubKey(descriptor);
11767
+ return chunkG53HASDV_cjs.deriveDescriptorLeafPubKey(descriptor);
11687
11768
  } catch (e) {
11688
11769
  throw new NonRangeableDescriptorError(
11689
11770
  "Cannot derive leaf pubkey: descriptor is not a materialized, parsable tr(...) shape.",
@@ -11695,7 +11776,7 @@ function buildReceiveContract(current, descriptor, hrp, tagSource) {
11695
11776
  const pubKey = deriveLeafPubkey(descriptor);
11696
11777
  const tapscript = rebuildTapscript(current, pubKey);
11697
11778
  const serverPubKey = tapscript.options.serverPubKey;
11698
- const csvTimelock = chunkFNCQJLR2_cjs.timelockToSequence(tapscript.options.csvTimelock).toString();
11779
+ const csvTimelock = chunkOH2XLTXE_cjs.timelockToSequence(tapscript.options.csvTimelock).toString();
11699
11780
  const base$1 = {
11700
11781
  script: base.hex.encode(tapscript.pkScript),
11701
11782
  address: tapscript.address(hrp, serverPubKey).encode(),
@@ -11706,11 +11787,11 @@ function buildReceiveContract(current, descriptor, hrp, tagSource) {
11706
11787
  // index-0 key. Without it, spends produce unsigned PSBTs that the
11707
11788
  // server rejects with `INVALID_PSBT_INPUT (5): missing tapscript spend sig`.
11708
11789
  metadata: {
11709
- ...{ source: chunkSF5NKAUA_cjs.WALLET_RECEIVE_SOURCE },
11790
+ ...{ source: chunkG53HASDV_cjs.WALLET_RECEIVE_SOURCE },
11710
11791
  signingDescriptor: descriptor
11711
11792
  }
11712
11793
  };
11713
- const params = tapscript instanceof chunkSF5NKAUA_cjs.DelegateVtxo.Script ? {
11794
+ const params = tapscript instanceof chunkG53HASDV_cjs.DelegateVtxo.Script ? {
11714
11795
  ...base$1,
11715
11796
  type: "delegate",
11716
11797
  params: {
@@ -11731,10 +11812,10 @@ function buildReceiveContract(current, descriptor, hrp, tagSource) {
11731
11812
  return { tapscript, params };
11732
11813
  }
11733
11814
  function rebuildTapscript(current, pubKey) {
11734
- if (current instanceof chunkSF5NKAUA_cjs.DelegateVtxo.Script) {
11735
- return new chunkSF5NKAUA_cjs.DelegateVtxo.Script({ ...current.options, pubKey });
11815
+ if (current instanceof chunkG53HASDV_cjs.DelegateVtxo.Script) {
11816
+ return new chunkG53HASDV_cjs.DelegateVtxo.Script({ ...current.options, pubKey });
11736
11817
  }
11737
- return new chunkSF5NKAUA_cjs.DefaultVtxo.Script({ ...current.options, pubKey });
11818
+ return new chunkG53HASDV_cjs.DefaultVtxo.Script({ ...current.options, pubKey });
11738
11819
  }
11739
11820
  async function pickActiveReceive(contractRepository, serverPubKey, expectedType) {
11740
11821
  const candidates = await contractRepository.getContracts({
@@ -11743,7 +11824,7 @@ async function pickActiveReceive(contractRepository, serverPubKey, expectedType)
11743
11824
  });
11744
11825
  const serverPubKeyHex = base.hex.encode(serverPubKey);
11745
11826
  const matching = candidates.filter(
11746
- (c) => c.params.serverPubKey === serverPubKeyHex && c.metadata?.source === chunkSF5NKAUA_cjs.WALLET_RECEIVE_SOURCE
11827
+ (c) => c.params.serverPubKey === serverPubKeyHex && c.metadata?.source === chunkG53HASDV_cjs.WALLET_RECEIVE_SOURCE
11747
11828
  ).sort((a, b) => {
11748
11829
  if (b.createdAt !== a.createdAt) return b.createdAt - a.createdAt;
11749
11830
  return signingDescriptorIndex(b.metadata?.signingDescriptor) - signingDescriptorIndex(a.metadata?.signingDescriptor);
@@ -11786,6 +11867,8 @@ function computeOffchainBalance(vtxos, caps) {
11786
11867
  let settled = 0;
11787
11868
  let preconfirmed = 0;
11788
11869
  let available = 0;
11870
+ let gated = 0;
11871
+ let intentLocked = 0;
11789
11872
  let recoverable = 0;
11790
11873
  let pendingRecovery = 0;
11791
11874
  const owned = /* @__PURE__ */ new Map();
@@ -11796,23 +11879,27 @@ function computeOffchainBalance(vtxos, caps) {
11796
11879
  }
11797
11880
  };
11798
11881
  for (const vtxo of vtxos) {
11799
- if (chunkFNCQJLR2_cjs.hasTerminalSpend(vtxo)) continue;
11882
+ if (chunkOH2XLTXE_cjs.hasTerminalSpend(vtxo)) continue;
11800
11883
  addAssets(owned, vtxo);
11801
11884
  if (isPendingRecovery(vtxo)) {
11802
11885
  pendingRecovery += vtxo.value;
11803
11886
  continue;
11804
11887
  }
11805
- if (chunkFNCQJLR2_cjs.canRecoverOnchain(vtxo, now)) {
11888
+ if (chunkOH2XLTXE_cjs.canRecoverOnchain(vtxo, now)) {
11806
11889
  recoverable += vtxo.value;
11807
11890
  continue;
11808
11891
  }
11809
- if (!chunkFNCQJLR2_cjs.canSpendOffchain(vtxo, now)) continue;
11892
+ if (!chunkOH2XLTXE_cjs.canSpendOffchain(vtxo, now)) continue;
11810
11893
  if (vtxo.isPreconfirmed) {
11811
11894
  preconfirmed += vtxo.value;
11812
11895
  } else {
11813
11896
  settled += vtxo.value;
11814
11897
  }
11815
- if (isGenericallySpendable(vtxo) && isUnlocked(vtxo)) {
11898
+ if (!isGenericallySpendable(vtxo)) {
11899
+ gated += vtxo.value;
11900
+ } else if (!isUnlocked(vtxo)) {
11901
+ intentLocked += vtxo.value;
11902
+ } else {
11816
11903
  available += vtxo.value;
11817
11904
  addAssets(spendable, vtxo);
11818
11905
  }
@@ -11822,6 +11909,8 @@ function computeOffchainBalance(vtxos, caps) {
11822
11909
  settled,
11823
11910
  preconfirmed,
11824
11911
  available,
11912
+ gated,
11913
+ intentLocked,
11825
11914
  recoverable,
11826
11915
  pendingRecovery,
11827
11916
  total: settled + preconfirmed + recoverable + pendingRecovery,
@@ -11969,15 +12058,26 @@ var InputSignerRouter = class {
11969
12058
  };
11970
12059
 
11971
12060
  // src/wallet/wallet.ts
11972
- var getArkadeServerUrl = ({ arkServerUrl }) => arkServerUrl || chunkFNCQJLR2_cjs.DEFAULT_ARKADE_SERVER_URL;
12061
+ var getArkadeServerUrl = ({ arkServerUrl }) => arkServerUrl || chunkOH2XLTXE_cjs.DEFAULT_ARKADE_SERVER_URL;
11973
12062
  function intentProofJobs(coins) {
11974
12063
  if (coins.length === 0) return [];
11975
12064
  const coinJobs = coins.map((coin, i) => ({
11976
12065
  index: i + 1,
11977
- lookupScript: chunkFNCQJLR2_cjs.VtxoScript.decode(coin.tapTree).pkScript
12066
+ lookupScript: chunkOH2XLTXE_cjs.VtxoScript.decode(coin.tapTree).pkScript
11978
12067
  }));
11979
12068
  return [{ index: 0, lookupScript: coinJobs[0].lookupScript }, ...coinJobs];
11980
12069
  }
12070
+ function asSendParams(args) {
12071
+ const [first] = args;
12072
+ if (args.length === 1 && first && "recipients" in first) {
12073
+ const params = first;
12074
+ if (params.recipients.length === 0) {
12075
+ throw new Error("At least one receiver is required");
12076
+ }
12077
+ return params;
12078
+ }
12079
+ return { recipients: args };
12080
+ }
11981
12081
  function extractArkProviderUrl(provider) {
11982
12082
  const serverUrl = provider.serverUrl;
11983
12083
  return typeof serverUrl === "string" && serverUrl.length > 0 ? serverUrl : void 0;
@@ -12000,7 +12100,7 @@ function dedupeTimelocks(timelocks) {
12000
12100
  const seen = /* @__PURE__ */ new Set();
12001
12101
  const deduped = [];
12002
12102
  for (const timelock of timelocks) {
12003
- const sequence = chunkFNCQJLR2_cjs.timelockToSequence(timelock).toString();
12103
+ const sequence = chunkOH2XLTXE_cjs.timelockToSequence(timelock).toString();
12004
12104
  if (seen.has(sequence)) continue;
12005
12105
  seen.add(sequence);
12006
12106
  deduped.push(timelock);
@@ -12017,7 +12117,7 @@ async function resolveBoardingBootTapscript(contractRepository, serverPubKey, ba
12017
12117
  state: "active"
12018
12118
  });
12019
12119
  const newest = candidates.filter(
12020
- (c) => c.params.serverPubKey === serverPubKeyHex && c.metadata?.source === chunkSF5NKAUA_cjs.WALLET_RECEIVE_SOURCE
12120
+ (c) => c.params.serverPubKey === serverPubKeyHex && c.metadata?.source === chunkG53HASDV_cjs.WALLET_RECEIVE_SOURCE
12021
12121
  ).sort((a, b) => {
12022
12122
  if (b.createdAt !== a.createdAt) return b.createdAt - a.createdAt;
12023
12123
  return signingDescriptorIndex(b.metadata?.signingDescriptor) - signingDescriptorIndex(a.metadata?.signingDescriptor);
@@ -12025,7 +12125,7 @@ async function resolveBoardingBootTapscript(contractRepository, serverPubKey, ba
12025
12125
  if (!newest?.params.pubKey) return baseline;
12026
12126
  try {
12027
12127
  const pubKey = base.hex.decode(newest.params.pubKey);
12028
- return new chunkSF5NKAUA_cjs.DefaultVtxo.Script({ ...baseline.options, pubKey });
12128
+ return new chunkG53HASDV_cjs.DefaultVtxo.Script({ ...baseline.options, pubKey });
12029
12129
  } catch (e) {
12030
12130
  console.warn("Skipping malformed boarding contract at boot", newest.script, e);
12031
12131
  return baseline;
@@ -12041,8 +12141,8 @@ function filterSnapshotVtxos(snapshot, filter, pendingSpendOutpoints) {
12041
12141
  if (pendingSpendOutpoints.has(`${vtxo.txid}:${vtxo.vout}`)) {
12042
12142
  return false;
12043
12143
  }
12044
- if (!chunkFNCQJLR2_cjs.hasTerminalSpend(vtxo)) {
12045
- if (!f.withRecoverable && chunkFNCQJLR2_cjs.canRecoverOnchain(vtxo, now)) {
12144
+ if (!chunkOH2XLTXE_cjs.hasTerminalSpend(vtxo)) {
12145
+ if (!f.withRecoverable && chunkOH2XLTXE_cjs.canRecoverOnchain(vtxo, now)) {
12046
12146
  return false;
12047
12147
  }
12048
12148
  return true;
@@ -12383,7 +12483,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
12383
12483
  */
12384
12484
  static async setupWalletConfig(config, pubKey) {
12385
12485
  const arkadeServerUrl = getArkadeServerUrl(config);
12386
- const arkProvider = config.arkProvider || new chunkFNCQJLR2_cjs.RestArkProvider(arkadeServerUrl);
12486
+ const arkProvider = config.arkProvider || new chunkOH2XLTXE_cjs.RestArkProvider(arkadeServerUrl);
12387
12487
  let indexerProvider = config.indexerProvider;
12388
12488
  if (!indexerProvider) {
12389
12489
  let indexerUrl = config.indexerUrl;
@@ -12400,7 +12500,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
12400
12500
  indexerUrl = arkadeServerUrl;
12401
12501
  }
12402
12502
  }
12403
- indexerProvider = new chunk2JHN5RCY_cjs.RestIndexerProvider(indexerUrl);
12503
+ indexerProvider = new chunkI6EDUE75_cjs.RestIndexerProvider(indexerUrl);
12404
12504
  }
12405
12505
  const walletRepository = config.storage?.walletRepository ?? new IndexedDBWalletRepository();
12406
12506
  const contractRepository = config.storage?.contractRepository ?? new IndexedDBContractRepository();
@@ -12409,7 +12509,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
12409
12509
  source: serverInfoSource,
12410
12510
  lastOnlineAt: serverInfoLastOnlineAt
12411
12511
  } = await resolveArkInfo(arkProvider, walletRepository);
12412
- const network = chunkFNCQJLR2_cjs.getNetwork(info.network);
12512
+ const network = chunkOH2XLTXE_cjs.getNetwork(info.network);
12413
12513
  if ("descriptor" in config.identity) {
12414
12514
  const descriptor = config.identity.descriptor;
12415
12515
  const identityIsMainnet = !descriptor.includes("tpub");
@@ -12456,11 +12556,11 @@ var ReadonlyWallet = class _ReadonlyWallet {
12456
12556
  serverPubKey,
12457
12557
  csvTimelock: exitTimelock
12458
12558
  };
12459
- const offchainTapscript = !delegatePubKey ? new chunkSF5NKAUA_cjs.DefaultVtxo.Script(offchainOptions) : new chunkSF5NKAUA_cjs.DelegateVtxo.Script({ ...offchainOptions, delegatePubKey });
12460
- const boardingTapscript = chunkSF5NKAUA_cjs.BoardingContractHandler.createScript({
12559
+ const offchainTapscript = !delegatePubKey ? new chunkG53HASDV_cjs.DefaultVtxo.Script(offchainOptions) : new chunkG53HASDV_cjs.DelegateVtxo.Script({ ...offchainOptions, delegatePubKey });
12560
+ const boardingTapscript = chunkG53HASDV_cjs.BoardingContractHandler.createScript({
12461
12561
  pubKey: base.hex.encode(pubKey),
12462
12562
  serverPubKey: base.hex.encode(serverPubKey),
12463
- csvTimelock: chunkFNCQJLR2_cjs.timelockToSequence(boardingTimelock).toString()
12563
+ csvTimelock: chunkOH2XLTXE_cjs.timelockToSequence(boardingTimelock).toString()
12464
12564
  });
12465
12565
  return {
12466
12566
  arkProvider,
@@ -12574,6 +12674,8 @@ var ReadonlyWallet = class _ReadonlyWallet {
12574
12674
  settled: offchain.settled,
12575
12675
  preconfirmed: offchain.preconfirmed,
12576
12676
  available: offchain.available,
12677
+ gated: offchain.gated,
12678
+ intentLocked: offchain.intentLocked,
12577
12679
  recoverable: offchain.recoverable,
12578
12680
  pendingRecovery: offchain.pendingRecovery,
12579
12681
  total: totalBoarding + offchain.total,
@@ -12755,7 +12857,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
12755
12857
  const response = await contractManager.getContractsWithVtxos();
12756
12858
  const allVtxos = response.flatMap((_) => _.vtxos);
12757
12859
  const { boardingTxs, commitmentsToIgnore } = await this.getBoardingTxs();
12758
- const resolveTxCreatedAt = (txids) => chunkFNCQJLR2_cjs.fetchVtxoCreatedAtByTxid(this.indexerProvider, txids);
12860
+ const resolveTxCreatedAt = (txids) => chunkOH2XLTXE_cjs.fetchVtxoCreatedAtByTxid(this.indexerProvider, txids);
12759
12861
  return buildTransactionHistory(
12760
12862
  allVtxos,
12761
12863
  boardingTxs,
@@ -12849,7 +12951,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
12849
12951
  },
12850
12952
  isUnrolled: true,
12851
12953
  ...boardingFacts,
12852
- virtualStatus: chunkFNCQJLR2_cjs.toVirtualStatus(boardingFacts),
12954
+ virtualStatus: chunkOH2XLTXE_cjs.toVirtualStatus(boardingFacts),
12853
12955
  spentBy: "",
12854
12956
  createdAt: tx.status.confirmed ? new Date(tx.status.block_time * 1e3) : /* @__PURE__ */ new Date(0),
12855
12957
  script: scriptHex
@@ -12905,9 +13007,9 @@ var ReadonlyWallet = class _ReadonlyWallet {
12905
13007
  async getBoardingTapscripts(allowedSigners) {
12906
13008
  const byScript = /* @__PURE__ */ new Map();
12907
13009
  const add = (s) => byScript.set(base.hex.encode(s.pkScript), s);
12908
- const boardingCsv = this.boardingTapscript.options.csvTimelock ?? chunkSF5NKAUA_cjs.DefaultVtxo.Script.DEFAULT_TIMELOCK;
13010
+ const boardingCsv = this.boardingTapscript.options.csvTimelock ?? chunkG53HASDV_cjs.DefaultVtxo.Script.DEFAULT_TIMELOCK;
12909
13011
  add(
12910
- new chunkSF5NKAUA_cjs.DefaultVtxo.Script({
13012
+ new chunkG53HASDV_cjs.DefaultVtxo.Script({
12911
13013
  pubKey: await this.identity.xOnlyPublicKey(),
12912
13014
  serverPubKey: this.boardingTapscript.options.serverPubKey,
12913
13015
  csvTimelock: boardingCsv
@@ -12922,7 +13024,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
12922
13024
  for (const c of boardingContracts) {
12923
13025
  if (!allowed.has(toXOnlySignerHex(c.params.serverPubKey))) continue;
12924
13026
  try {
12925
- add(chunkSF5NKAUA_cjs.BoardingContractHandler.createScript(c.params));
13027
+ add(chunkG53HASDV_cjs.BoardingContractHandler.createScript(c.params));
12926
13028
  } catch (e) {
12927
13029
  console.warn("Skipping malformed boarding contract", c.script, e);
12928
13030
  }
@@ -12960,7 +13062,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
12960
13062
  // Per-row CSV delay decoded from THIS tapscript's exit leaf —
12961
13063
  // not the wallet's current boarding timelock, which a signer
12962
13064
  // rotation may have changed.
12963
- csvTimelock: chunkFNCQJLR2_cjs.CSVMultisigTapscript.decode(base.hex.decode(tapscript.exitScript)).params.timelock,
13065
+ csvTimelock: chunkOH2XLTXE_cjs.CSVMultisigTapscript.decode(base.hex.decode(tapscript.exitScript)).params.timelock,
12964
13066
  coins: utxos
12965
13067
  });
12966
13068
  }
@@ -13093,7 +13195,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
13093
13195
  /** Fetch Arkade transaction ids that are still pending final settlement. */
13094
13196
  async fetchPendingTxs() {
13095
13197
  const scripts = await this.getWalletScripts();
13096
- const vtxos = await chunkFNCQJLR2_cjs.getAllNormalizedVtxos(this.indexerProvider, scripts);
13198
+ const vtxos = await chunkOH2XLTXE_cjs.getAllNormalizedVtxos(this.indexerProvider, scripts);
13097
13199
  return vtxos.filter(
13098
13200
  (vtxo) => (vtxo.isSpent || vtxo.isPreconfirmed && !vtxo.isSwept) && vtxo.arkTxId !== void 0
13099
13201
  ).map((_) => _.arkTxId);
@@ -13124,7 +13226,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
13124
13226
  });
13125
13227
  for (const contract of contracts) {
13126
13228
  if (map.has(contract.script)) continue;
13127
- const handler = chunkSF5NKAUA_cjs.contractHandlers.get(contract.type);
13229
+ const handler = chunkG53HASDV_cjs.contractHandlers.get(contract.type);
13128
13230
  if (handler) {
13129
13231
  const script = handler.createScript(contract.params);
13130
13232
  map.set(contract.script, script);
@@ -13236,7 +13338,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
13236
13338
  }
13237
13339
  });
13238
13340
  const baselinePubkey = await this.identity.xOnlyPublicKey();
13239
- const delegatePubKey = this.offchainTapscript instanceof chunkSF5NKAUA_cjs.DelegateVtxo.Script ? this.offchainTapscript.options.delegatePubKey : void 0;
13341
+ const delegatePubKey = this.offchainTapscript instanceof chunkG53HASDV_cjs.DelegateVtxo.Script ? this.offchainTapscript.options.delegatePubKey : void 0;
13240
13342
  const baselineSigners = [
13241
13343
  this.offchainTapscript.options.serverPubKey,
13242
13344
  ...[...this._deprecatedSigners.keys()].map((h) => base.hex.decode(h))
@@ -13244,8 +13346,8 @@ var ReadonlyWallet = class _ReadonlyWallet {
13244
13346
  const seenBaselineScripts = /* @__PURE__ */ new Set();
13245
13347
  for (const serverPubKey of baselineSigners) {
13246
13348
  for (const csvTimelock of this.walletContractTimelocks) {
13247
- const csvTimelockStr = chunkFNCQJLR2_cjs.timelockToSequence(csvTimelock).toString();
13248
- const defaultScript = new chunkSF5NKAUA_cjs.DefaultVtxo.Script({
13349
+ const csvTimelockStr = chunkOH2XLTXE_cjs.timelockToSequence(csvTimelock).toString();
13350
+ const defaultScript = new chunkG53HASDV_cjs.DefaultVtxo.Script({
13249
13351
  pubKey: baselinePubkey,
13250
13352
  serverPubKey,
13251
13353
  csvTimelock
@@ -13266,7 +13368,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
13266
13368
  });
13267
13369
  }
13268
13370
  if (delegatePubKey) {
13269
- const delegateScript = new chunkSF5NKAUA_cjs.DelegateVtxo.Script({
13371
+ const delegateScript = new chunkG53HASDV_cjs.DelegateVtxo.Script({
13270
13372
  pubKey: baselinePubkey,
13271
13373
  serverPubKey,
13272
13374
  delegatePubKey,
@@ -13290,9 +13392,9 @@ var ReadonlyWallet = class _ReadonlyWallet {
13290
13392
  }
13291
13393
  }
13292
13394
  }
13293
- const boardingCsvTimelock = this.boardingTapscript.options.csvTimelock ?? chunkSF5NKAUA_cjs.DefaultVtxo.Script.DEFAULT_TIMELOCK;
13395
+ const boardingCsvTimelock = this.boardingTapscript.options.csvTimelock ?? chunkG53HASDV_cjs.DefaultVtxo.Script.DEFAULT_TIMELOCK;
13294
13396
  for (const serverPubKey of baselineSigners) {
13295
- const baselineBoarding = new chunkSF5NKAUA_cjs.DefaultVtxo.Script({
13397
+ const baselineBoarding = new chunkG53HASDV_cjs.DefaultVtxo.Script({
13296
13398
  pubKey: baselinePubkey,
13297
13399
  serverPubKey,
13298
13400
  csvTimelock: boardingCsvTimelock
@@ -13305,7 +13407,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
13305
13407
  params: {
13306
13408
  pubKey: base.hex.encode(baselineBoarding.options.pubKey),
13307
13409
  serverPubKey: base.hex.encode(serverPubKey),
13308
- csvTimelock: chunkFNCQJLR2_cjs.timelockToSequence(boardingCsvTimelock).toString()
13410
+ csvTimelock: chunkOH2XLTXE_cjs.timelockToSequence(boardingCsvTimelock).toString()
13309
13411
  },
13310
13412
  script: boardingScriptHex,
13311
13413
  address: baselineBoarding.address(this.network.hrp, serverPubKey).encode(),
@@ -13484,7 +13586,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
13484
13586
  serverPubKey: this.offchainTapscript.options.serverPubKey,
13485
13587
  deprecatedSignerPubKeys: [...this._deprecatedSigners.keys()].map((h) => base.hex.decode(h)),
13486
13588
  csvTimelocks: this.walletContractTimelocks,
13487
- delegatePubKey: this.offchainTapscript instanceof chunkSF5NKAUA_cjs.DelegateVtxo.Script ? this.offchainTapscript.options.delegatePubKey : void 0
13589
+ delegatePubKey: this.offchainTapscript instanceof chunkG53HASDV_cjs.DelegateVtxo.Script ? this.offchainTapscript.options.delegatePubKey : void 0
13488
13590
  };
13489
13591
  }
13490
13592
  _signerRouter;
@@ -13578,24 +13680,24 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
13578
13680
  const manager = await this.getContractManager();
13579
13681
  const descriptor = await manager.getNextSigningDescriptor();
13580
13682
  if (!descriptor) return this.getBoardingAddress();
13581
- const pubKey = chunkSF5NKAUA_cjs.deriveDescriptorLeafPubKey(descriptor);
13582
- const newBoarding = new chunkSF5NKAUA_cjs.DefaultVtxo.Script({
13683
+ const pubKey = chunkG53HASDV_cjs.deriveDescriptorLeafPubKey(descriptor);
13684
+ const newBoarding = new chunkG53HASDV_cjs.DefaultVtxo.Script({
13583
13685
  ...this._boardingTapscript.options,
13584
13686
  pubKey
13585
13687
  });
13586
- const csvTimelock = newBoarding.options.csvTimelock ?? chunkSF5NKAUA_cjs.DefaultVtxo.Script.DEFAULT_TIMELOCK;
13688
+ const csvTimelock = newBoarding.options.csvTimelock ?? chunkG53HASDV_cjs.DefaultVtxo.Script.DEFAULT_TIMELOCK;
13587
13689
  await manager.createContract({
13588
13690
  type: "boarding",
13589
13691
  params: {
13590
13692
  pubKey: base.hex.encode(pubKey),
13591
13693
  serverPubKey: base.hex.encode(newBoarding.options.serverPubKey),
13592
- csvTimelock: chunkFNCQJLR2_cjs.timelockToSequence(csvTimelock).toString()
13694
+ csvTimelock: chunkOH2XLTXE_cjs.timelockToSequence(csvTimelock).toString()
13593
13695
  },
13594
13696
  script: base.hex.encode(newBoarding.pkScript),
13595
13697
  address: newBoarding.address(this.network.hrp, this.arkServerPublicKey).encode(),
13596
13698
  state: "active",
13597
13699
  metadata: {
13598
- source: chunkSF5NKAUA_cjs.WALLET_RECEIVE_SOURCE,
13700
+ source: chunkG53HASDV_cjs.WALLET_RECEIVE_SOURCE,
13599
13701
  signingDescriptor: descriptor
13600
13702
  }
13601
13703
  });
@@ -13630,7 +13732,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
13630
13732
  if (this._descriptorProvider instanceof HDDescriptorProvider) {
13631
13733
  return (await this.getContractManager()).getNextSigningDescriptor();
13632
13734
  }
13633
- return chunkSF5NKAUA_cjs.identityDescriptor(this.identity);
13735
+ return chunkG53HASDV_cjs.identityDescriptor(this.identity);
13634
13736
  }
13635
13737
  /**
13636
13738
  * @see HDAllocationCapable.advanceSigningDescriptorWatermark
@@ -13755,21 +13857,21 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
13755
13857
  const [currentBoardingRow] = await manager.getContracts({
13756
13858
  script: currentBoardingScript
13757
13859
  });
13758
- const newOffchain = this.offchainTapscript instanceof chunkSF5NKAUA_cjs.DelegateVtxo.Script ? new chunkSF5NKAUA_cjs.DelegateVtxo.Script({
13860
+ const newOffchain = this.offchainTapscript instanceof chunkG53HASDV_cjs.DelegateVtxo.Script ? new chunkG53HASDV_cjs.DelegateVtxo.Script({
13759
13861
  ...this.offchainTapscript.options,
13760
13862
  serverPubKey: xonly
13761
- }) : new chunkSF5NKAUA_cjs.DefaultVtxo.Script({
13863
+ }) : new chunkG53HASDV_cjs.DefaultVtxo.Script({
13762
13864
  ...this.offchainTapscript.options,
13763
13865
  serverPubKey: xonly
13764
13866
  });
13765
- const newBoarding = new chunkSF5NKAUA_cjs.DefaultVtxo.Script({
13867
+ const newBoarding = new chunkG53HASDV_cjs.DefaultVtxo.Script({
13766
13868
  ...this._boardingTapscript.options,
13767
13869
  serverPubKey: xonly
13768
13870
  });
13769
- const offchainCsv = chunkFNCQJLR2_cjs.timelockToSequence(newOffchain.options.csvTimelock).toString();
13871
+ const offchainCsv = chunkOH2XLTXE_cjs.timelockToSequence(newOffchain.options.csvTimelock).toString();
13770
13872
  const newOffchainScript = base.hex.encode(newOffchain.pkScript);
13771
13873
  const newOffchainAddress = newOffchain.address(this.network.hrp, xonly).encode();
13772
- if (newOffchain instanceof chunkSF5NKAUA_cjs.DelegateVtxo.Script) {
13874
+ if (newOffchain instanceof chunkG53HASDV_cjs.DelegateVtxo.Script) {
13773
13875
  await manager.createContract({
13774
13876
  type: "delegate",
13775
13877
  params: {
@@ -13797,13 +13899,13 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
13797
13899
  metadata: currentOffchainRow?.metadata
13798
13900
  });
13799
13901
  }
13800
- const boardingCsv = newBoarding.options.csvTimelock ?? chunkSF5NKAUA_cjs.DefaultVtxo.Script.DEFAULT_TIMELOCK;
13902
+ const boardingCsv = newBoarding.options.csvTimelock ?? chunkG53HASDV_cjs.DefaultVtxo.Script.DEFAULT_TIMELOCK;
13801
13903
  await manager.createContract({
13802
13904
  type: "boarding",
13803
13905
  params: {
13804
13906
  pubKey: base.hex.encode(newBoarding.options.pubKey),
13805
13907
  serverPubKey: base.hex.encode(xonly),
13806
- csvTimelock: chunkFNCQJLR2_cjs.timelockToSequence(boardingCsv).toString()
13908
+ csvTimelock: chunkOH2XLTXE_cjs.timelockToSequence(boardingCsv).toString()
13807
13909
  },
13808
13910
  script: base.hex.encode(newBoarding.pkScript),
13809
13911
  address: newBoarding.address(this.network.hrp, xonly).encode(),
@@ -13836,14 +13938,14 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
13836
13938
  _restoreInFlight;
13837
13939
  _addPendingSpends(inputs) {
13838
13940
  for (const input of inputs) {
13839
- if (chunkFNCQJLR2_cjs.isVirtualCoin(input)) {
13941
+ if (chunkOH2XLTXE_cjs.isVirtualCoin(input)) {
13840
13942
  this._pendingSpendOutpoints.add(`${input.txid}:${input.vout}`);
13841
13943
  }
13842
13944
  }
13843
13945
  }
13844
13946
  _removePendingSpends(inputs) {
13845
13947
  for (const input of inputs) {
13846
- if (chunkFNCQJLR2_cjs.isVirtualCoin(input)) {
13948
+ if (chunkOH2XLTXE_cjs.isVirtualCoin(input)) {
13847
13949
  this._pendingSpendOutpoints.delete(`${input.txid}:${input.vout}`);
13848
13950
  }
13849
13951
  }
@@ -13901,9 +14003,9 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
13901
14003
  const manager = await this.getContractManager();
13902
14004
  const provider = this._descriptorProvider;
13903
14005
  const hd = provider instanceof HDDescriptorProvider;
13904
- const staticDescriptor = hd ? void 0 : await chunkSF5NKAUA_cjs.identityDescriptor(this.identity);
14006
+ const staticDescriptor = hd ? void 0 : await chunkG53HASDV_cjs.identityDescriptor(this.identity);
13905
14007
  const materialize = (index) => hd ? provider.materializeDescriptorAt(index) : staticDescriptor;
13906
- const delegatePubKey = this.offchainTapscript instanceof chunkSF5NKAUA_cjs.DelegateVtxo.Script ? this.offchainTapscript.options.delegatePubKey : void 0;
14008
+ const delegatePubKey = this.offchainTapscript instanceof chunkG53HASDV_cjs.DelegateVtxo.Script ? this.offchainTapscript.options.delegatePubKey : void 0;
13907
14009
  const arkInfo = await this.arkProvider.getInfo();
13908
14010
  const currentSignerPubKey = toXOnlyPubKey(base.hex.decode(arkInfo.signerPubkey));
13909
14011
  const deprecatedSignerPubKeys = arkInfo.deprecatedSigners.map(
@@ -13922,7 +14024,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
13922
14024
  csvTimelocks: this.walletContractTimelocks,
13923
14025
  // Boarding-exit CSV so the boarding handler can build its
13924
14026
  // candidate script (distinct from the unilateral-exit matrix).
13925
- boardingTimelock: this.boardingTapscript.options.csvTimelock ?? chunkSF5NKAUA_cjs.DefaultVtxo.Script.DEFAULT_TIMELOCK,
14027
+ boardingTimelock: this.boardingTapscript.options.csvTimelock ?? chunkG53HASDV_cjs.DefaultVtxo.Script.DEFAULT_TIMELOCK,
13926
14028
  delegatePubKey
13927
14029
  };
13928
14030
  const result = await manager.scanContracts({
@@ -14185,7 +14287,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
14185
14287
  inputs: params.selectedVtxos,
14186
14288
  changeAmount: BigInt(changeAmount)
14187
14289
  };
14188
- const outputAddress = chunkFNCQJLR2_cjs.ArkAddress.decode(params.address);
14290
+ const outputAddress = chunkOH2XLTXE_cjs.ArkAddress.decode(params.address);
14189
14291
  assertRecipientArkAddress(
14190
14292
  params.address,
14191
14293
  outputAddress,
@@ -14251,13 +14353,13 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
14251
14353
  void this.logUngatedInputs("settle({ inputs })", params.inputs);
14252
14354
  }
14253
14355
  const offchainAddress = await this.getAddress();
14254
- const offchainPkScript = chunkFNCQJLR2_cjs.ArkAddress.decode(offchainAddress).pkScript;
14356
+ const offchainPkScript = chunkOH2XLTXE_cjs.ArkAddress.decode(offchainAddress).pkScript;
14255
14357
  const offchainOutputScript = base.hex.encode(offchainPkScript);
14256
14358
  if (!params) {
14257
14359
  const { fees, vtxoMaxAmount } = await this.arkProvider.getInfo();
14258
14360
  const estimator = new Estimator(fees.intentFee);
14259
14361
  let amount = 0;
14260
- const exitScript = chunkFNCQJLR2_cjs.CSVMultisigTapscript.decode(
14362
+ const exitScript = chunkOH2XLTXE_cjs.CSVMultisigTapscript.decode(
14261
14363
  base.hex.decode(this.boardingTapscript.exitScript)
14262
14364
  );
14263
14365
  const boardingTimelock = exitScript.params.timelock;
@@ -14286,7 +14388,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
14286
14388
  if (filteredVtxos.length >= MAX_VTXOS_PER_SETTLEMENT) {
14287
14389
  break;
14288
14390
  }
14289
- const inputFee = estimator.evalOffchainInput(chunkFNCQJLR2_cjs.toOffchainInputFeeParams(vtxo));
14391
+ const inputFee = estimator.evalOffchainInput(chunkOH2XLTXE_cjs.toOffchainInputFeeParams(vtxo));
14290
14392
  if (inputFee.satoshis >= vtxo.value) {
14291
14393
  continue;
14292
14394
  }
@@ -14333,7 +14435,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
14333
14435
  let script;
14334
14436
  let arkAddress;
14335
14437
  try {
14336
- arkAddress = chunkFNCQJLR2_cjs.ArkAddress.decode(output.address);
14438
+ arkAddress = chunkOH2XLTXE_cjs.ArkAddress.decode(output.address);
14337
14439
  } catch {
14338
14440
  arkAddress = void 0;
14339
14441
  }
@@ -14423,7 +14525,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
14423
14525
  const abortController = new AbortController();
14424
14526
  let stream;
14425
14527
  let committedTxid;
14426
- const settleInputVtxos = params.inputs.filter(chunkFNCQJLR2_cjs.isVirtualCoin);
14528
+ const settleInputVtxos = params.inputs.filter(chunkOH2XLTXE_cjs.isVirtualCoin);
14427
14529
  const contractManager = await this.getContractManager();
14428
14530
  await contractManager.assertAnnotatable(settleInputVtxos);
14429
14531
  await contractManager.assertSpendableNow?.(
@@ -14532,7 +14634,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
14532
14634
  async maybeRotateBoardingAfterBoard(inputs) {
14533
14635
  if (!this._descriptorProvider) return;
14534
14636
  const consumedBoarding = inputs.some(
14535
- (input) => typeof input !== "string" && !chunkFNCQJLR2_cjs.isVirtualCoin(input)
14637
+ (input) => typeof input !== "string" && !chunkOH2XLTXE_cjs.isVirtualCoin(input)
14536
14638
  );
14537
14639
  if (!consumedBoarding) return;
14538
14640
  try {
@@ -14556,7 +14658,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
14556
14658
  let connectorIndex = 0;
14557
14659
  const connectorsLeaves = connectorsGraph?.leaves() || [];
14558
14660
  for (const input of inputs) {
14559
- if (!chunkFNCQJLR2_cjs.isVirtualCoin(input)) {
14661
+ if (!chunkOH2XLTXE_cjs.isVirtualCoin(input)) {
14560
14662
  for (let i = 0; i < settlementPsbt.inputsLength; i++) {
14561
14663
  const settlementInput = settlementPsbt.getInput(i);
14562
14664
  if (!settlementInput.txid || settlementInput.index === void 0) {
@@ -14587,7 +14689,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
14587
14689
  }
14588
14690
  continue;
14589
14691
  }
14590
- if (chunkFNCQJLR2_cjs.canRecoverOnchain(input, { timestamp: /* @__PURE__ */ new Date() }) || isSubdust({ value: input.value }, this.dustAmount)) {
14692
+ if (chunkOH2XLTXE_cjs.canRecoverOnchain(input, { timestamp: /* @__PURE__ */ new Date() }) || isSubdust({ value: input.value }, this.dustAmount)) {
14591
14693
  continue;
14592
14694
  }
14593
14695
  if (connectorsLeaves.length === 0) {
@@ -14615,7 +14717,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
14615
14717
  index: input.vout,
14616
14718
  witnessUtxo: {
14617
14719
  amount: BigInt(input.value),
14618
- script: chunkFNCQJLR2_cjs.VtxoScript.decode(input.tapTree).pkScript
14720
+ script: chunkOH2XLTXE_cjs.VtxoScript.decode(input.tapTree).pkScript
14619
14721
  },
14620
14722
  sighashType: btcSigner.SigHash.DEFAULT,
14621
14723
  tapLeafScript: [input.forfeitTapLeafScript]
@@ -14634,7 +14736,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
14634
14736
  forfeitTx = await this._signerRouter.sign(forfeitTx, [
14635
14737
  {
14636
14738
  index: 0,
14637
- lookupScript: chunkFNCQJLR2_cjs.VtxoScript.decode(input.tapTree).pkScript
14739
+ lookupScript: chunkOH2XLTXE_cjs.VtxoScript.decode(input.tapTree).pkScript
14638
14740
  }
14639
14741
  ]);
14640
14742
  signedForfeits.push(base.base64.encode(forfeitTx.toPSBT()));
@@ -14692,7 +14794,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
14692
14794
  resolveBatchExpiryPolicy(this.network, this.batchExpiryPolicy)
14693
14795
  );
14694
14796
  await this.arkProvider.confirmRegistration(intentId);
14695
- const sweepTapscript = chunkFNCQJLR2_cjs.CSVMultisigTapscript.encode({
14797
+ const sweepTapscript = chunkOH2XLTXE_cjs.CSVMultisigTapscript.encode({
14696
14798
  timelock,
14697
14799
  pubkeys: [this.forfeitPubkey]
14698
14800
  }).script;
@@ -14798,9 +14900,9 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
14798
14900
  ...existing ?? {},
14799
14901
  intentTxId,
14800
14902
  registerProof: intent.proof,
14801
- registerProofMessage: chunkFNCQJLR2_cjs.Intent.encodeMessage(intent.message),
14903
+ registerProofMessage: chunkOH2XLTXE_cjs.Intent.encodeMessage(intent.message),
14802
14904
  deleteProof: deleteIntent.proof,
14803
- deleteProofMessage: chunkFNCQJLR2_cjs.Intent.encodeMessage(deleteIntent.message),
14905
+ deleteProofMessage: chunkOH2XLTXE_cjs.Intent.encodeMessage(deleteIntent.message),
14804
14906
  intentVtxos: inputs.map((i) => ({
14805
14907
  txid: i.txid,
14806
14908
  vout: i.vout
@@ -14832,7 +14934,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
14832
14934
  try {
14833
14935
  return await this.arkProvider.registerIntent(intent);
14834
14936
  } catch (error) {
14835
- if (error instanceof chunkFNCQJLR2_cjs.ArkError && error.code === 0 && error.message.includes("duplicated input")) {
14937
+ if (error instanceof chunkOH2XLTXE_cjs.ArkError && error.code === 0 && error.message.includes("duplicated input")) {
14836
14938
  const deleteIntent = await this.makeDeleteIntentSignature(inputs);
14837
14939
  await this.arkProvider.deleteIntent(deleteIntent);
14838
14940
  return this.arkProvider.registerIntent(intent);
@@ -14848,7 +14950,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
14848
14950
  expire_at: 0,
14849
14951
  cosigners_public_keys: cosignerPubKeys
14850
14952
  };
14851
- const proof = chunkFNCQJLR2_cjs.Intent.create(message, coins, outputs);
14953
+ const proof = chunkOH2XLTXE_cjs.Intent.create(message, coins, outputs);
14852
14954
  const signedProof = await this._signerRouter.sign(proof, intentProofJobs(coins));
14853
14955
  return {
14854
14956
  proof: base.base64.encode(signedProof.toPSBT()),
@@ -14860,7 +14962,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
14860
14962
  type: "delete",
14861
14963
  expire_at: 0
14862
14964
  };
14863
- const proof = chunkFNCQJLR2_cjs.Intent.create(message, coins, []);
14965
+ const proof = chunkOH2XLTXE_cjs.Intent.create(message, coins, []);
14864
14966
  const signedProof = await this._signerRouter.sign(proof, intentProofJobs(coins));
14865
14967
  return {
14866
14968
  proof: base.base64.encode(signedProof.toPSBT()),
@@ -14872,7 +14974,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
14872
14974
  type: "get-pending-tx",
14873
14975
  expire_at: 0
14874
14976
  };
14875
- const proof = chunkFNCQJLR2_cjs.Intent.create(message, coins, []);
14977
+ const proof = chunkOH2XLTXE_cjs.Intent.create(message, coins, []);
14876
14978
  const signedProof = await this._signerRouter.sign(proof, intentProofJobs(coins));
14877
14979
  return {
14878
14980
  proof: base.base64.encode(signedProof.toPSBT()),
@@ -14893,7 +14995,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
14893
14995
  if (!vtxos || vtxos.length === 0) {
14894
14996
  const scriptMap = await this.getScriptMap();
14895
14997
  const allExtended = [];
14896
- const fetchedVtxos = await chunkFNCQJLR2_cjs.getAllNormalizedVtxos(this.indexerProvider, [
14998
+ const fetchedVtxos = await chunkOH2XLTXE_cjs.getAllNormalizedVtxos(this.indexerProvider, [
14897
14999
  ...scriptMap.keys()
14898
15000
  ]);
14899
15001
  for (const vtxo of fetchedVtxos) {
@@ -15007,11 +15109,11 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
15007
15109
  * against the current key alone would leave it pending forever.
15008
15110
  */
15009
15111
  checkpointUnrollCandidates(info) {
15010
- const current = chunkFNCQJLR2_cjs.CSVMultisigTapscript.decode(base.hex.decode(info.checkpointTapscript));
15112
+ const current = chunkOH2XLTXE_cjs.CSVMultisigTapscript.decode(base.hex.decode(info.checkpointTapscript));
15011
15113
  const candidates = [this._serverUnrollScript, current];
15012
15114
  for (const deprecated of signerSetFromInfo(info).deprecated.keys()) {
15013
15115
  candidates.push(
15014
- chunkFNCQJLR2_cjs.CSVMultisigTapscript.encode({
15116
+ chunkOH2XLTXE_cjs.CSVMultisigTapscript.encode({
15015
15117
  ...current.params,
15016
15118
  pubkeys: [base.hex.decode(deprecated)]
15017
15119
  })
@@ -15102,7 +15204,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
15102
15204
  if (vtxos.length === 0) {
15103
15205
  throw new Error("No VTXOs found for this arkadeCash");
15104
15206
  }
15105
- const myPkScript = chunkFNCQJLR2_cjs.ArkAddress.decode(await this.getAddress()).pkScript;
15207
+ const myPkScript = chunkOH2XLTXE_cjs.ArkAddress.decode(await this.getAddress()).pkScript;
15106
15208
  let { spendable, unclaimed } = this.classifyCashVtxos(vtxos);
15107
15209
  let swept = 0;
15108
15210
  const drainable = vtxos.filter((vtxo) => !isSubdust(vtxo, this.dustAmount));
@@ -15176,7 +15278,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
15176
15278
  const spendable = [];
15177
15279
  const unclaimed = [];
15178
15280
  for (const vtxo of vtxos) {
15179
- if (chunkFNCQJLR2_cjs.hasTerminalSpend(vtxo)) {
15281
+ if (chunkOH2XLTXE_cjs.hasTerminalSpend(vtxo)) {
15180
15282
  unclaimed.push(cashReport(vtxo, "already-spent"));
15181
15283
  } else if (isSubdust(vtxo, this.dustAmount)) {
15182
15284
  unclaimed.push(cashReport(vtxo, "subdust"));
@@ -15196,7 +15298,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
15196
15298
  const all = [];
15197
15299
  const seen = /* @__PURE__ */ new Set();
15198
15300
  for (let pageIndex = 0; ; pageIndex++) {
15199
- const { vtxos, page } = await chunkFNCQJLR2_cjs.getNormalizedVtxos(this.indexerProvider, {
15301
+ const { vtxos, page } = await chunkOH2XLTXE_cjs.getNormalizedVtxos(this.indexerProvider, {
15200
15302
  scripts,
15201
15303
  pageIndex,
15202
15304
  pageSize
@@ -15243,7 +15345,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
15243
15345
  for (let i = 0; i < inputs.length; i += MAX_INPUTS_PER_INTENT) {
15244
15346
  const batch = inputs.slice(i, i + MAX_INPUTS_PER_INTENT);
15245
15347
  const message = { type: "get-pending-tx", expire_at: 0 };
15246
- const proof = chunkFNCQJLR2_cjs.Intent.create(message, batch, []);
15348
+ const proof = chunkOH2XLTXE_cjs.Intent.create(message, batch, []);
15247
15349
  const signedProof = await identity.sign(
15248
15350
  proof,
15249
15351
  Array.from({ length: batch.length + 1 }, (_, j) => j)
@@ -15313,10 +15415,13 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
15313
15415
  return total;
15314
15416
  }
15315
15417
  /**
15316
- * Send BTC and/or assets to one or more recipients.
15418
+ * Send BTC and/or assets to one or more recipients, passed either as
15419
+ * variadic `Recipient`s or as a single `SendParams` object — the latter
15420
+ * also carries the virtual outputs to spend.
15317
15421
  *
15318
- * @param args - Recipients with their addresses, BTC amounts, and assets
15422
+ * @param args - Recipients, or a `SendParams` object
15319
15423
  * @returns Promise resolving to the Arkade transaction ID
15424
+ * @see SendParams
15320
15425
  *
15321
15426
  * @example
15322
15427
  * ```typescript
@@ -15325,15 +15430,28 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
15325
15430
  * amount: 1000, // (optional, default to dust) btc amount to send to the output
15326
15431
  * assets: [{ assetId: 'abc123...', amount: 50n }] // (optional) list of assets to send
15327
15432
  * });
15433
+ *
15434
+ * // choosing the inputs as well as the outputs
15435
+ * const txid = await wallet.send({
15436
+ * recipients: [{ address: 'ark1q...', amount: 1000 }],
15437
+ * selectedVtxos: mine, // spent as given, nothing added
15438
+ * });
15328
15439
  * ```
15329
15440
  */
15330
15441
  async send(...args) {
15331
- return this._withTxLock(() => this._sendImpl(...args));
15442
+ const params = asSendParams(args);
15443
+ return this._withTxLock(() => this._sendImpl(params));
15332
15444
  }
15333
- async _sendImpl(...args) {
15445
+ async _sendImpl({ recipients: args, selectedVtxos }) {
15334
15446
  if (args.length === 0) {
15335
15447
  throw new Error("At least one receiver is required");
15336
15448
  }
15449
+ if (selectedVtxos && selectedVtxos.length === 0) {
15450
+ throw new Error("send({ selectedVtxos }): no inputs");
15451
+ }
15452
+ if (selectedVtxos) {
15453
+ void this.logUngatedInputs("send({ selectedVtxos })", selectedVtxos);
15454
+ }
15337
15455
  const offchainTapscript = this.offchainTapscript;
15338
15456
  const serverPubKey = this.arkServerPublicKey;
15339
15457
  const serverUnrollScript = this.serverUnrollScript;
@@ -15344,84 +15462,123 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
15344
15462
  Number(this.dustAmount),
15345
15463
  this.recipientAddressContext(serverPubKey)
15346
15464
  );
15347
- const virtualCoins = await this.getSpendableVtxos({
15348
- withRecoverable: false
15349
- });
15465
+ let virtualCoins = [];
15466
+ if (!selectedVtxos) {
15467
+ virtualCoins = await this.getSpendableVtxos({
15468
+ withRecoverable: false
15469
+ });
15470
+ }
15350
15471
  const assetChanges = /* @__PURE__ */ new Map();
15351
- let selectedCoins = [];
15472
+ let selectedCoins = selectedVtxos ? [...selectedVtxos] : [];
15352
15473
  let btcAmountToSelect = 0;
15353
15474
  for (const recipient of recipients) {
15354
15475
  btcAmountToSelect += Math.max(recipient.amount, Number(this.dustAmount));
15355
15476
  }
15356
- for (const recipient of recipients) {
15357
- if (!recipient.assets) {
15358
- continue;
15477
+ if (selectedVtxos) {
15478
+ for (const coin of selectedCoins) {
15479
+ for (const asset of coin.assets ?? []) {
15480
+ const existing = assetChanges.get(asset.assetId) ?? 0n;
15481
+ assetChanges.set(asset.assetId, existing + asset.amount);
15482
+ }
15359
15483
  }
15360
- for (const receiverAsset of recipient.assets) {
15361
- let amountToSelect = receiverAsset.amount;
15362
- const existingChange = assetChanges.get(receiverAsset.assetId) ?? 0n;
15363
- if (existingChange >= amountToSelect) {
15364
- assetChanges.set(receiverAsset.assetId, existingChange - amountToSelect);
15365
- if (assetChanges.get(receiverAsset.assetId) === 0n) {
15366
- assetChanges.delete(receiverAsset.assetId);
15484
+ for (const recipient of recipients) {
15485
+ for (const asset of recipient.assets) {
15486
+ const remaining = (assetChanges.get(asset.assetId) ?? 0n) - asset.amount;
15487
+ if (remaining < 0n) {
15488
+ throw new Error(
15489
+ `send({ selectedVtxos }): inputs are short ${-remaining} of asset ${asset.assetId}`
15490
+ );
15491
+ }
15492
+ if (remaining === 0n) {
15493
+ assetChanges.delete(asset.assetId);
15494
+ } else {
15495
+ assetChanges.set(asset.assetId, remaining);
15367
15496
  }
15497
+ }
15498
+ }
15499
+ } else {
15500
+ for (const recipient of recipients) {
15501
+ if (!recipient.assets) {
15368
15502
  continue;
15369
15503
  }
15370
- if (existingChange > 0n) {
15371
- amountToSelect -= existingChange;
15372
- assetChanges.delete(receiverAsset.assetId);
15504
+ for (const receiverAsset of recipient.assets) {
15505
+ let amountToSelect = receiverAsset.amount;
15506
+ const existingChange = assetChanges.get(receiverAsset.assetId) ?? 0n;
15507
+ if (existingChange >= amountToSelect) {
15508
+ assetChanges.set(receiverAsset.assetId, existingChange - amountToSelect);
15509
+ if (assetChanges.get(receiverAsset.assetId) === 0n) {
15510
+ assetChanges.delete(receiverAsset.assetId);
15511
+ }
15512
+ continue;
15513
+ }
15514
+ if (existingChange > 0n) {
15515
+ amountToSelect -= existingChange;
15516
+ assetChanges.delete(receiverAsset.assetId);
15517
+ }
15518
+ const availableCoins = virtualCoins.filter(
15519
+ (c) => !selectedCoins.find((sc) => sc.txid === c.txid && sc.vout === c.vout)
15520
+ );
15521
+ const { selected, totalAssetAmount } = selectCoinsWithAsset(
15522
+ availableCoins,
15523
+ receiverAsset.assetId,
15524
+ amountToSelect
15525
+ );
15526
+ for (const coin of selected) {
15527
+ selectedCoins.push(coin);
15528
+ btcAmountToSelect -= coin.value;
15529
+ if (coin.assets) {
15530
+ for (const a of coin.assets) {
15531
+ if (a.assetId === receiverAsset.assetId) {
15532
+ continue;
15533
+ }
15534
+ const existing = assetChanges.get(a.assetId) ?? 0n;
15535
+ assetChanges.set(a.assetId, existing + a.amount);
15536
+ }
15537
+ }
15538
+ }
15539
+ const assetChangeAmount = totalAssetAmount - amountToSelect;
15540
+ if (assetChangeAmount > 0n) {
15541
+ const existing = assetChanges.get(receiverAsset.assetId) ?? 0n;
15542
+ assetChanges.set(receiverAsset.assetId, existing + assetChangeAmount);
15543
+ }
15373
15544
  }
15545
+ }
15546
+ if (btcAmountToSelect > 0) {
15374
15547
  const availableCoins = virtualCoins.filter(
15375
15548
  (c) => !selectedCoins.find((sc) => sc.txid === c.txid && sc.vout === c.vout)
15376
15549
  );
15377
- const { selected, totalAssetAmount } = selectCoinsWithAsset(
15378
- availableCoins,
15379
- receiverAsset.assetId,
15380
- amountToSelect
15381
- );
15382
- for (const coin of selected) {
15383
- selectedCoins.push(coin);
15384
- btcAmountToSelect -= coin.value;
15550
+ const { inputs: btcCoins } = selectVirtualCoins(availableCoins, btcAmountToSelect);
15551
+ for (const coin of btcCoins) {
15385
15552
  if (coin.assets) {
15386
- for (const a of coin.assets) {
15387
- if (a.assetId === receiverAsset.assetId) {
15388
- continue;
15389
- }
15390
- const existing = assetChanges.get(a.assetId) ?? 0n;
15391
- assetChanges.set(a.assetId, existing + a.amount);
15553
+ for (const asset of coin.assets) {
15554
+ const existing = assetChanges.get(asset.assetId) ?? 0n;
15555
+ assetChanges.set(asset.assetId, existing + asset.amount);
15392
15556
  }
15393
15557
  }
15394
15558
  }
15395
- const assetChangeAmount = totalAssetAmount - amountToSelect;
15396
- if (assetChangeAmount > 0n) {
15397
- const existing = assetChanges.get(receiverAsset.assetId) ?? 0n;
15398
- assetChanges.set(receiverAsset.assetId, existing + assetChangeAmount);
15399
- }
15559
+ selectedCoins = [...selectedCoins, ...btcCoins];
15400
15560
  }
15401
15561
  }
15402
- if (btcAmountToSelect > 0) {
15403
- const availableCoins = virtualCoins.filter(
15404
- (c) => !selectedCoins.find((sc) => sc.txid === c.txid && sc.vout === c.vout)
15405
- );
15406
- const { inputs: btcCoins } = selectVirtualCoins(availableCoins, btcAmountToSelect);
15407
- for (const coin of btcCoins) {
15408
- if (coin.assets) {
15409
- for (const asset of coin.assets) {
15410
- const existing = assetChanges.get(asset.assetId) ?? 0n;
15411
- assetChanges.set(asset.assetId, existing + asset.amount);
15412
- }
15413
- }
15414
- }
15415
- selectedCoins = [...selectedCoins, ...btcCoins];
15416
- }
15417
15562
  let totalBtcSelected = selectedCoins.reduce((sum, c) => sum + c.value, 0);
15418
15563
  const outputs = recipients.map((recipient) => ({
15419
15564
  script: recipient.script,
15420
- amount: BigInt(recipient.amount)
15565
+ amount: BigInt(recipient.amount),
15566
+ // Already checked against the recipient address in `validateRecipients`.
15567
+ ...recipient.tapTree ? { tapTree: chunkOH2XLTXE_cjs.TapTreeCoder.decode(recipient.tapTree) } : {}
15421
15568
  }));
15422
15569
  const totalBtcOutput = outputs.reduce((sum, o) => sum + Number(o.amount), 0);
15423
15570
  let changeAmount = totalBtcSelected - totalBtcOutput;
15571
+ if (changeAmount < 0) {
15572
+ throw new Error(
15573
+ `send({ selectedVtxos }): inputs total ${totalBtcSelected} sats, outputs need ${totalBtcOutput}`
15574
+ );
15575
+ }
15424
15576
  if (assetChanges.size > 0 && changeAmount < Number(this.dustAmount)) {
15577
+ if (selectedVtxos) {
15578
+ throw new Error(
15579
+ `send({ selectedVtxos }): ${changeAmount} sats of change cannot carry ${assetChanges.size} asset change(s), needs ${this.dustAmount}`
15580
+ );
15581
+ }
15425
15582
  const availableCoins = virtualCoins.filter(
15426
15583
  (c) => !selectedCoins.find((sc) => sc.txid === c.txid && sc.vout === c.vout)
15427
15584
  );
@@ -15551,10 +15708,10 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
15551
15708
  const serverPubKey = this.arkServerPublicKey;
15552
15709
  const serverUnrollScript = this.serverUnrollScript;
15553
15710
  const arkAddress = offchainTapscript.address(this.network.hrp, serverPubKey);
15554
- const normalizedInputs = inputs.map(chunkFNCQJLR2_cjs.normalizeVtxo);
15555
- const at = now ?? await chunkFNCQJLR2_cjs.resolveTimeHeight(this.onchainProvider);
15711
+ const normalizedInputs = inputs.map(chunkOH2XLTXE_cjs.normalizeVtxo);
15712
+ const at = now ?? await chunkOH2XLTXE_cjs.resolveTimeHeight(this.onchainProvider);
15556
15713
  for (const input of normalizedInputs) {
15557
- if (!chunkFNCQJLR2_cjs.canSpendOffchain(input, at)) {
15714
+ if (!chunkOH2XLTXE_cjs.canSpendOffchain(input, at)) {
15558
15715
  throw new Error(
15559
15716
  `sendSelectedVtxosToSelf: input ${input.txid}:${input.vout} is not cooperatively spendable`
15560
15717
  );
@@ -15624,7 +15781,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
15624
15781
  );
15625
15782
  const arkTxJobs = inputs.map((input, index) => ({
15626
15783
  index,
15627
- lookupScript: chunkFNCQJLR2_cjs.VtxoScript.decode(input.tapTree).pkScript
15784
+ lookupScript: chunkOH2XLTXE_cjs.VtxoScript.decode(input.tapTree).pkScript
15628
15785
  }));
15629
15786
  const identity = this.identity;
15630
15787
  const signer = {
@@ -15710,14 +15867,14 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
15710
15867
  const spentBy = checkpointIdByOutpoint.get(`${vtxo.txid}:${vtxo.vout}`);
15711
15868
  spentVtxos.push({
15712
15869
  ...spentFacts,
15713
- virtualStatus: chunkFNCQJLR2_cjs.toVirtualStatus(spentFacts),
15870
+ virtualStatus: chunkOH2XLTXE_cjs.toVirtualStatus(spentFacts),
15714
15871
  ...spentBy ? { spentBy } : {},
15715
15872
  arkTxId: arkTxid
15716
15873
  });
15717
15874
  for (const id of vtxo.commitmentTxIds) {
15718
15875
  commitmentTxIds.add(id);
15719
15876
  }
15720
- const vtxoExpiry = chunkFNCQJLR2_cjs.toBatchExpiry(vtxo);
15877
+ const vtxoExpiry = chunkOH2XLTXE_cjs.toBatchExpiry(vtxo);
15721
15878
  if (vtxoExpiry) {
15722
15879
  batchExpiry = Math.min(batchExpiry, vtxoExpiry);
15723
15880
  }
@@ -15730,7 +15887,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
15730
15887
  isSwept: false,
15731
15888
  isPreconfirmed: true,
15732
15889
  commitmentTxIds: Array.from(commitmentTxIds),
15733
- ...chunkFNCQJLR2_cjs.parseLegacyExpiry(batchExpiry)
15890
+ ...chunkOH2XLTXE_cjs.parseLegacyExpiry(batchExpiry)
15734
15891
  };
15735
15892
  changeVtxo = {
15736
15893
  txid: arkTxid,
@@ -15742,7 +15899,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
15742
15899
  tapTree: offchainTapscript.encode(),
15743
15900
  value: Number(changeAmount),
15744
15901
  ...changeFacts,
15745
- virtualStatus: chunkFNCQJLR2_cjs.toVirtualStatus(changeFacts),
15902
+ virtualStatus: chunkOH2XLTXE_cjs.toVirtualStatus(changeFacts),
15746
15903
  spentBy: "",
15747
15904
  status: {
15748
15905
  confirmed: false
@@ -15811,12 +15968,12 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
15811
15968
  const spentVtxos = [];
15812
15969
  const inputArkTxIds = /* @__PURE__ */ new Set();
15813
15970
  const boardingRemovalsByAddress = /* @__PURE__ */ new Map();
15814
- const vtxoInputs = inputs.filter(chunkFNCQJLR2_cjs.isVirtualCoin);
15971
+ const vtxoInputs = inputs.filter(chunkOH2XLTXE_cjs.isVirtualCoin);
15815
15972
  const cm = await this.getContractManager();
15816
15973
  const annotatedVtxos = await cm.annotateVtxos(vtxoInputs);
15817
15974
  const annotatedByKey = new Map(annotatedVtxos.map((v) => [`${v.txid}:${v.vout}`, v]));
15818
15975
  for (const input of inputs) {
15819
- if (chunkFNCQJLR2_cjs.isVirtualCoin(input)) {
15976
+ if (chunkOH2XLTXE_cjs.isVirtualCoin(input)) {
15820
15977
  const outpoint = `${input.txid}:${input.vout}`;
15821
15978
  const vtxo = annotatedByKey.get(outpoint);
15822
15979
  if (!vtxo) {
@@ -15828,13 +15985,13 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
15828
15985
  const settledFacts = { ...vtxo, isSpent: true };
15829
15986
  spentVtxos.push({
15830
15987
  ...settledFacts,
15831
- virtualStatus: chunkFNCQJLR2_cjs.toVirtualStatus(settledFacts),
15988
+ virtualStatus: chunkOH2XLTXE_cjs.toVirtualStatus(settledFacts),
15832
15989
  settledBy: commitmentTxid
15833
15990
  });
15834
15991
  } else {
15835
15992
  let sourceAddress;
15836
15993
  try {
15837
- sourceAddress = chunkFNCQJLR2_cjs.VtxoScript.decode(input.tapTree).onchainAddress(
15994
+ sourceAddress = chunkOH2XLTXE_cjs.VtxoScript.decode(input.tapTree).onchainAddress(
15838
15995
  this.network
15839
15996
  );
15840
15997
  } catch {
@@ -15892,9 +16049,9 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
15892
16049
  }
15893
16050
  };
15894
16051
  function selectVirtualCoins(coins, targetAmount) {
15895
- const sortedCoins = coins.map(chunkFNCQJLR2_cjs.normalizeVtxo).sort((a, b) => {
15896
- const expiryA = chunkFNCQJLR2_cjs.toBatchExpiry(a) || Number.MAX_SAFE_INTEGER;
15897
- const expiryB = chunkFNCQJLR2_cjs.toBatchExpiry(b) || Number.MAX_SAFE_INTEGER;
16052
+ const sortedCoins = coins.map(chunkOH2XLTXE_cjs.normalizeVtxo).sort((a, b) => {
16053
+ const expiryA = chunkOH2XLTXE_cjs.toBatchExpiry(a) || Number.MAX_SAFE_INTEGER;
16054
+ const expiryB = chunkOH2XLTXE_cjs.toBatchExpiry(b) || Number.MAX_SAFE_INTEGER;
15898
16055
  if (expiryA !== expiryB) {
15899
16056
  return expiryA - expiryB;
15900
16057
  }
@@ -16154,7 +16311,7 @@ var MessageBus = class {
16154
16311
  this.initialized = true;
16155
16312
  }
16156
16313
  async buildServices(config) {
16157
- const arkProvider = new chunkFNCQJLR2_cjs.RestArkProvider(config.arkServer.url);
16314
+ const arkProvider = new chunkOH2XLTXE_cjs.RestArkProvider(config.arkServer.url);
16158
16315
  const storage = {
16159
16316
  walletRepository: this.walletRepository,
16160
16317
  contractRepository: this.contractRepository,
@@ -16496,7 +16653,7 @@ var offboardNetworkNames = [
16496
16653
  function offboardDestinationScript(destinationAddress) {
16497
16654
  for (const networkName of offboardNetworkNames) {
16498
16655
  try {
16499
- const network = chunkFNCQJLR2_cjs.networks[networkName];
16656
+ const network = chunkOH2XLTXE_cjs.networks[networkName];
16500
16657
  const addr = btcSigner.Address(network).decode(destinationAddress);
16501
16658
  return btcSigner.OutScript.encode(addr);
16502
16659
  } catch {
@@ -16560,7 +16717,7 @@ var Ramps = class {
16560
16717
  }
16561
16718
  amount = amount ?? totalAmount;
16562
16719
  const offchainAddress = await this.wallet.getAddress();
16563
- const offchainAddr = chunkFNCQJLR2_cjs.ArkAddress.decode(offchainAddress);
16720
+ const offchainAddr = chunkOH2XLTXE_cjs.ArkAddress.decode(offchainAddress);
16564
16721
  const offchainScript = base.hex.encode(offchainAddr.pkScript);
16565
16722
  const outputFee = estimator.evalOffchainOutput({
16566
16723
  amount,
@@ -16620,7 +16777,7 @@ var Ramps = class {
16620
16777
  const filteredVtxos = [];
16621
16778
  let totalAmount = 0n;
16622
16779
  for (const vtxo of vtxos) {
16623
- const inputFee = estimator.evalOffchainInput(chunkFNCQJLR2_cjs.toOffchainInputFeeParams(vtxo));
16780
+ const inputFee = estimator.evalOffchainInput(chunkOH2XLTXE_cjs.toOffchainInputFeeParams(vtxo));
16624
16781
  if (inputFee.satoshis >= vtxo.value) {
16625
16782
  continue;
16626
16783
  }
@@ -17184,8 +17341,8 @@ var WalletMessageHandler = class {
17184
17341
  });
17185
17342
  }
17186
17343
  case "SEND": {
17187
- const { recipients } = message.payload;
17188
- const txid = await this.wallet.send(...recipients);
17344
+ const { recipients, selectedVtxos } = message.payload;
17345
+ const txid = await (selectedVtxos ? this.wallet.send({ recipients, selectedVtxos }) : this.wallet.send(...recipients));
17189
17346
  return this.tagged({
17190
17347
  id,
17191
17348
  type: "SEND_SUCCESS",
@@ -17387,7 +17544,7 @@ var WalletMessageHandler = class {
17387
17544
  // Wallet methods
17388
17545
  async handleInitWallet({ payload }) {
17389
17546
  const { arkServerUrl } = payload;
17390
- this.indexerProvider = new chunk2JHN5RCY_cjs.RestIndexerProvider(arkServerUrl);
17547
+ this.indexerProvider = new chunkI6EDUE75_cjs.RestIndexerProvider(arkServerUrl);
17391
17548
  await this.onWalletInitialized();
17392
17549
  }
17393
17550
  /**
@@ -17433,6 +17590,8 @@ var WalletMessageHandler = class {
17433
17590
  settled: offchain.settled,
17434
17591
  preconfirmed: offchain.preconfirmed,
17435
17592
  available: offchain.available,
17593
+ gated: offchain.gated,
17594
+ intentLocked: offchain.intentLocked,
17436
17595
  recoverable: offchain.recoverable,
17437
17596
  pendingRecovery: offchain.pendingRecovery,
17438
17597
  total: totalBoarding + offchain.total,
@@ -17652,17 +17811,17 @@ var WalletMessageHandler = class {
17652
17811
  throw new WalletNotInitializedError();
17653
17812
  }
17654
17813
  const allVtxos = await this.getVtxosFromRepo();
17655
- const vtxos = allVtxos.filter((v) => !chunkFNCQJLR2_cjs.hasTerminalSpend(v));
17814
+ const vtxos = allVtxos.filter((v) => !chunkOH2XLTXE_cjs.hasTerminalSpend(v));
17656
17815
  const dustAmount = this.readonlyWallet.dustAmount;
17657
17816
  const includeRecoverable = message.payload.filter?.withRecoverable ?? false;
17658
17817
  const filteredVtxos = includeRecoverable ? vtxos : vtxos.filter((v) => {
17659
17818
  if (dustAmount != null && isSubdust(v, dustAmount)) {
17660
17819
  return false;
17661
17820
  }
17662
- if (chunkFNCQJLR2_cjs.isRecoverable(v)) {
17821
+ if (chunkOH2XLTXE_cjs.isRecoverable(v)) {
17663
17822
  return false;
17664
17823
  }
17665
- if (chunkFNCQJLR2_cjs.isExpired(v)) {
17824
+ if (chunkOH2XLTXE_cjs.isExpired(v)) {
17666
17825
  return false;
17667
17826
  }
17668
17827
  return true;
@@ -17670,7 +17829,7 @@ var WalletMessageHandler = class {
17670
17829
  if (!message.payload.filter?.withUnrolled) {
17671
17830
  return filteredVtxos;
17672
17831
  }
17673
- return filteredVtxos.concat(allVtxos.filter((v) => chunkFNCQJLR2_cjs.hasTerminalSpend(v) && v.isUnrolled));
17832
+ return filteredVtxos.concat(allVtxos.filter((v) => chunkOH2XLTXE_cjs.hasTerminalSpend(v) && v.isUnrolled));
17674
17833
  }
17675
17834
  /** Tear down handler subscriptions, then delegate the full wipe to the wallet. */
17676
17835
  async clear() {
@@ -17760,7 +17919,7 @@ var WalletMessageHandler = class {
17760
17919
  if (!this.readonlyWallet) return null;
17761
17920
  const { boardingTxs, commitmentsToIgnore } = await this.readonlyWallet.getBoardingTxs();
17762
17921
  const indexerProvider = this.indexerProvider;
17763
- const resolveTxCreatedAt = indexerProvider ? (txids) => chunkFNCQJLR2_cjs.fetchVtxoCreatedAtByTxid(indexerProvider, txids) : void 0;
17922
+ const resolveTxCreatedAt = indexerProvider ? (txids) => chunkOH2XLTXE_cjs.fetchVtxoCreatedAtByTxid(indexerProvider, txids) : void 0;
17764
17923
  return buildTransactionHistory(vtxos, boardingTxs, commitmentsToIgnore, resolveTxCreatedAt);
17765
17924
  }
17766
17925
  async ensureContractEventBroadcasting() {
@@ -18449,7 +18608,7 @@ var ServiceWorkerReadonlyWallet = class _ServiceWorkerReadonlyWallet {
18449
18608
  };
18450
18609
  try {
18451
18610
  const response = await this.sendMessage(message);
18452
- return response.payload.vtxos.map(chunkFNCQJLR2_cjs.normalizeVtxo);
18611
+ return response.payload.vtxos.map(chunkOH2XLTXE_cjs.normalizeVtxo);
18453
18612
  } catch (error) {
18454
18613
  throw new Error(`Failed to get vtxos: ${error}`);
18455
18614
  }
@@ -18474,7 +18633,7 @@ var ServiceWorkerReadonlyWallet = class _ServiceWorkerReadonlyWallet {
18474
18633
  };
18475
18634
  try {
18476
18635
  const response = await this.sendMessage(message);
18477
- return response.payload.vtxos.map(chunkFNCQJLR2_cjs.normalizeVtxo);
18636
+ return response.payload.vtxos.map(chunkOH2XLTXE_cjs.normalizeVtxo);
18478
18637
  } catch (error) {
18479
18638
  throw new Error(`Failed to get spendable vtxos: ${error}`);
18480
18639
  }
@@ -18605,7 +18764,7 @@ var ServiceWorkerReadonlyWallet = class _ServiceWorkerReadonlyWallet {
18605
18764
  };
18606
18765
  try {
18607
18766
  const response = await sendContractMessage(message);
18608
- return response.payload.vtxos.map(chunkFNCQJLR2_cjs.normalizeVtxo);
18767
+ return response.payload.vtxos.map(chunkOH2XLTXE_cjs.normalizeVtxo);
18609
18768
  } catch (e) {
18610
18769
  throw new Error("Failed to annotate vtxos");
18611
18770
  }
@@ -19056,12 +19215,16 @@ var ServiceWorkerWallet = class _ServiceWorkerWallet extends ServiceWorkerReadon
19056
19215
  throw error;
19057
19216
  }
19058
19217
  }
19059
- async send(...recipients) {
19218
+ async send(...args) {
19219
+ const [first] = args;
19220
+ const { recipients, selectedVtxos } = args.length === 1 && first && "recipients" in first ? first : { recipients: args, selectedVtxos: void 0 };
19060
19221
  const message = {
19061
19222
  tag: this.messageTag,
19062
19223
  type: "SEND",
19063
19224
  id: getRandomId(),
19064
- payload: { recipients }
19225
+ // Omitted rather than sent as `undefined`, so an older worker sees
19226
+ // exactly the payload it saw before.
19227
+ payload: selectedVtxos ? { recipients, selectedVtxos } : { recipients }
19065
19228
  };
19066
19229
  try {
19067
19230
  const response = await this.sendMessage(message);
@@ -19173,7 +19336,7 @@ var ServiceWorkerWallet = class _ServiceWorkerWallet extends ServiceWorkerReadon
19173
19336
  };
19174
19337
  try {
19175
19338
  const response = await wallet.sendMessage(message);
19176
- return response.payload.vtxos.map(chunkFNCQJLR2_cjs.normalizeVtxo);
19339
+ return response.payload.vtxos.map(chunkOH2XLTXE_cjs.normalizeVtxo);
19177
19340
  } catch (e) {
19178
19341
  throw new Error(`Failed to get expiring vtxos: ${e}`);
19179
19342
  }
@@ -19285,12 +19448,12 @@ var OnchainWallet = class _OnchainWallet {
19285
19448
  * @returns Configured onchain wallet
19286
19449
  * @throws Error if the configured identity cannot produce a valid x-only public key
19287
19450
  */
19288
- static async create(identity, networkName = chunkFNCQJLR2_cjs.DEFAULT_NETWORK_NAME, provider) {
19451
+ static async create(identity, networkName = chunkOH2XLTXE_cjs.DEFAULT_NETWORK_NAME, provider) {
19289
19452
  const pubkey = await identity.xOnlyPublicKey();
19290
19453
  if (!pubkey) {
19291
19454
  throw new Error("Invalid configured public key");
19292
19455
  }
19293
- const network = chunkFNCQJLR2_cjs.getNetwork(networkName);
19456
+ const network = chunkOH2XLTXE_cjs.getNetwork(networkName);
19294
19457
  const onchainProvider = provider || new EsploraProvider(ESPLORA_URL[networkName]);
19295
19458
  const onchainP2TR = btcSigner.p2tr(pubkey, void 0, network);
19296
19459
  return new _OnchainWallet(identity, network, onchainP2TR, onchainProvider);
@@ -19396,7 +19559,7 @@ var OnchainWallet = class _OnchainWallet {
19396
19559
  if (!inputs) {
19397
19560
  throw new Error("Fee estimation failed");
19398
19561
  }
19399
- let tx = new chunkFNCQJLR2_cjs.Transaction();
19562
+ let tx = new chunkOH2XLTXE_cjs.Transaction();
19400
19563
  for (const input of inputs) {
19401
19564
  tx.addInput({
19402
19565
  txid: input.txid,
@@ -19454,7 +19617,7 @@ var OnchainWallet = class _OnchainWallet {
19454
19617
  * @throws If the parent has no anchor, or funding cannot be selected/signed
19455
19618
  */
19456
19619
  async bumpAnchor(parentHex, feeRate) {
19457
- const parent = chunkFNCQJLR2_cjs.Transaction.fromRaw(base.hex.decode(parentHex));
19620
+ const parent = chunkOH2XLTXE_cjs.Transaction.fromRaw(base.hex.decode(parentHex));
19458
19621
  const coins = (await this.getCoins()).filter((c) => c.status.confirmed);
19459
19622
  const child = await this.buildBumpPackage(parent, feeRate, coins);
19460
19623
  return [parent.hex, child.hex];
@@ -20219,7 +20382,7 @@ exports.BIP322 = void 0;
20219
20382
  async function sign2(message, identity, network) {
20220
20383
  const xOnlyPubKey = await identity.xOnlyPublicKey();
20221
20384
  const payment = btcSigner.p2tr(xOnlyPubKey, void 0, network);
20222
- const toSpend = chunkFNCQJLR2_cjs.craftToSpendTx(message, payment.script, TAG_BIP322);
20385
+ const toSpend = chunkOH2XLTXE_cjs.craftToSpendTx(message, payment.script, TAG_BIP322);
20223
20386
  const toSign = craftBIP322ToSignP2TR(toSpend, payment.script, xOnlyPubKey);
20224
20387
  const signed = await identity.sign(toSign, [0]);
20225
20388
  signed.finalizeIdx(0);
@@ -20277,7 +20440,7 @@ function verifyP2TR(message, witnessItems, pkScript, pubkey) {
20277
20440
  if (sighashType !== btcSigner.SigHash.DEFAULT && sighashType !== btcSigner.SigHash.ALL) {
20278
20441
  return false;
20279
20442
  }
20280
- const toSpend = chunkFNCQJLR2_cjs.craftToSpendTx(message, pkScript, TAG_BIP322);
20443
+ const toSpend = chunkOH2XLTXE_cjs.craftToSpendTx(message, pkScript, TAG_BIP322);
20281
20444
  const toSign = craftBIP322ToSignP2TR(toSpend, pkScript, pubkey);
20282
20445
  const sighash = toSign.preimageWitnessV1(0, [pkScript], sighashType, [0n]);
20283
20446
  const rawSig = sig.length === 65 ? sig.subarray(0, 64) : sig;
@@ -20298,7 +20461,7 @@ function verifyP2WPKH(message, witnessItems, pkScript, addressHash) {
20298
20461
  }
20299
20462
  const sighashType = sigWithHash[sigWithHash.length - 1];
20300
20463
  const derSig = sigWithHash.subarray(0, sigWithHash.length - 1);
20301
- const toSpend = chunkFNCQJLR2_cjs.craftToSpendTx(message, pkScript, TAG_BIP322);
20464
+ const toSpend = chunkOH2XLTXE_cjs.craftToSpendTx(message, pkScript, TAG_BIP322);
20302
20465
  const toSign = craftBIP322ToSignSimple(toSpend, pkScript);
20303
20466
  const scriptCode = btcSigner.OutScript.encode({ type: "pkh", hash: addressHash });
20304
20467
  const sighash = toSign.preimageWitnessV0(0, scriptCode, sighashType, 0n);
@@ -20351,7 +20514,7 @@ function encodeCompactSize(n) {
20351
20514
  return buf;
20352
20515
  }
20353
20516
  function craftBIP322ToSignP2TR(toSpend, pkScript, tapInternalKey) {
20354
- const tx = new chunkFNCQJLR2_cjs.Transaction({ version: 0 });
20517
+ const tx = new chunkOH2XLTXE_cjs.Transaction({ version: 0 });
20355
20518
  tx.addInput({
20356
20519
  txid: toSpend.id,
20357
20520
  index: 0,
@@ -20365,12 +20528,12 @@ function craftBIP322ToSignP2TR(toSpend, pkScript, tapInternalKey) {
20365
20528
  });
20366
20529
  tx.addOutput({
20367
20530
  amount: 0n,
20368
- script: chunkFNCQJLR2_cjs.OP_RETURN_EMPTY_PKSCRIPT
20531
+ script: chunkOH2XLTXE_cjs.OP_RETURN_EMPTY_PKSCRIPT
20369
20532
  });
20370
20533
  return tx;
20371
20534
  }
20372
20535
  function craftBIP322ToSignSimple(toSpend, pkScript) {
20373
- const tx = new chunkFNCQJLR2_cjs.Transaction({ version: 0 });
20536
+ const tx = new chunkOH2XLTXE_cjs.Transaction({ version: 0 });
20374
20537
  tx.addInput({
20375
20538
  txid: toSpend.id,
20376
20539
  index: 0,
@@ -20382,7 +20545,7 @@ function craftBIP322ToSignSimple(toSpend, pkScript) {
20382
20545
  });
20383
20546
  tx.addOutput({
20384
20547
  amount: 0n,
20385
- script: chunkFNCQJLR2_cjs.OP_RETURN_EMPTY_PKSCRIPT
20548
+ script: chunkOH2XLTXE_cjs.OP_RETURN_EMPTY_PKSCRIPT
20386
20549
  });
20387
20550
  return tx;
20388
20551
  }
@@ -20513,7 +20676,7 @@ var RestEmulatorProvider = class {
20513
20676
  }
20514
20677
  };
20515
20678
  function finalizeVirtualTx(type, psbtBase64) {
20516
- const tx = chunkFNCQJLR2_cjs.Transaction.fromPSBT(base.base64.decode(psbtBase64));
20679
+ const tx = chunkOH2XLTXE_cjs.Transaction.fromPSBT(base.base64.decode(psbtBase64));
20517
20680
  if (type === "INDEXER_CHAINED_TX_TYPE_TREE" /* TREE */) {
20518
20681
  const input = tx.getInput(0);
20519
20682
  if (!input) {
@@ -20540,14 +20703,14 @@ var ExitPathError = class extends Error {
20540
20703
  reason;
20541
20704
  };
20542
20705
  function delayWeight(sequence) {
20543
- const t = chunkFNCQJLR2_cjs.sequenceToTimelock(sequence);
20706
+ const t = chunkOH2XLTXE_cjs.sequenceToTimelock(sequence);
20544
20707
  return t.type === "blocks" ? Number(t.value) : Number(t.value) / 600;
20545
20708
  }
20546
20709
  async function resolveUnilateralPath(params) {
20547
20710
  const { vtxo, scriptHex, contractRepository } = params;
20548
20711
  const contract = contractRepository ? (await contractRepository.getContracts({ script: scriptHex }))[0] : void 0;
20549
20712
  if (contract) {
20550
- const handler = chunkSF5NKAUA_cjs.contractHandlers.get(contract.type);
20713
+ const handler = chunkG53HASDV_cjs.contractHandlers.get(contract.type);
20551
20714
  if (!handler) {
20552
20715
  throw new ExitPathError(
20553
20716
  "no-handler",
@@ -20570,12 +20733,12 @@ async function resolveUnilateralPath(params) {
20570
20733
  paths.sort((a, b) => delayWeight(a.sequence) - delayWeight(b.sequence));
20571
20734
  return { selection: paths[0], label: `${contract.type}:unilateral` };
20572
20735
  }
20573
- const decoded = chunkFNCQJLR2_cjs.VtxoScript.decode(vtxo.tapTree);
20736
+ const decoded = chunkOH2XLTXE_cjs.VtxoScript.decode(vtxo.tapTree);
20574
20737
  let best;
20575
20738
  for (const exit of decoded.exitPaths()) {
20576
20739
  const leaf = decoded.findLeaf(base.hex.encode(exit.script));
20577
20740
  if (!leaf) continue;
20578
- const sequence = chunkFNCQJLR2_cjs.timelockToSequence(exit.params.timelock);
20741
+ const sequence = chunkOH2XLTXE_cjs.timelockToSequence(exit.params.timelock);
20579
20742
  const weight = delayWeight(sequence);
20580
20743
  if (!best || weight < best.weight) {
20581
20744
  best = { selection: { leaf, sequence }, weight };
@@ -20761,14 +20924,14 @@ async function prepareUnrollTransaction(wallet, vtxoTxIds, outputAddress) {
20761
20924
  }
20762
20925
  const resolved = await resolveUnilateralPath({
20763
20926
  vtxo,
20764
- scriptHex: base.hex.encode(chunkFNCQJLR2_cjs.VtxoScript.decode(vtxo.tapTree).pkScript),
20927
+ scriptHex: base.hex.encode(chunkOH2XLTXE_cjs.VtxoScript.decode(vtxo.tapTree).pkScript),
20765
20928
  contractRepository: wallet.contractRepository,
20766
20929
  walletPubKeyHex: base.hex.encode(await wallet.identity.xOnlyPublicKey()),
20767
20930
  currentTime: Date.now()
20768
20931
  });
20769
20932
  const spendingLeaf = resolved.selection.leaf;
20770
20933
  const sequence = resolved.selection.sequence;
20771
- const timelock = chunkFNCQJLR2_cjs.sequenceToTimelock(sequence);
20934
+ const timelock = chunkOH2XLTXE_cjs.sequenceToTimelock(sequence);
20772
20935
  const elapsed = timelock.type === "blocks" ? chainTip.height >= txStatus.blockHeight + Number(timelock.value) : chainTip.time >= txStatus.blockTime + Number(timelock.value);
20773
20936
  if (!elapsed) {
20774
20937
  throw new Error(`no available exit path found for vtxo ${vtxo.txid}:${vtxo.vout}`);
@@ -20781,7 +20944,7 @@ async function prepareUnrollTransaction(wallet, vtxoTxIds, outputAddress) {
20781
20944
  sequence,
20782
20945
  witnessUtxo: {
20783
20946
  amount: BigInt(vtxo.value),
20784
- script: chunkFNCQJLR2_cjs.VtxoScript.decode(vtxo.tapTree).pkScript
20947
+ script: chunkOH2XLTXE_cjs.VtxoScript.decode(vtxo.tapTree).pkScript
20785
20948
  },
20786
20949
  sighashType: btcSigner.SigHash.DEFAULT
20787
20950
  });
@@ -20791,7 +20954,7 @@ async function prepareUnrollTransaction(wallet, vtxoTxIds, outputAddress) {
20791
20954
  btcSigner.TaprootControlBlock.encode(spendingLeaf[0]).length
20792
20955
  );
20793
20956
  }
20794
- const tx = new chunkFNCQJLR2_cjs.Transaction({ version: 2 });
20957
+ const tx = new chunkOH2XLTXE_cjs.Transaction({ version: 2 });
20795
20958
  for (const input of inputs) {
20796
20959
  tx.addInput(input);
20797
20960
  }
@@ -20858,7 +21021,7 @@ async function buildSignedSweep(params) {
20858
21021
  `uneconomic vtxo ${vtxo.txid}:${vtxo.vout}: value ${vtxo.value} - fee ${fee} < dust`
20859
21022
  );
20860
21023
  }
20861
- const tx = new chunkFNCQJLR2_cjs.Transaction({ version: 2 });
21024
+ const tx = new chunkOH2XLTXE_cjs.Transaction({ version: 2 });
20862
21025
  tx.addInput({
20863
21026
  txid: vtxo.txid,
20864
21027
  index: vtxo.vout,
@@ -20883,7 +21046,7 @@ async function buildSignedSweep(params) {
20883
21046
  finalScriptWitness: [
20884
21047
  tapScriptSig[0][1],
20885
21048
  ...path.extraWitness,
20886
- chunkFNCQJLR2_cjs.scriptFromTapLeafScript(path.leaf),
21049
+ chunkOH2XLTXE_cjs.scriptFromTapLeafScript(path.leaf),
20887
21050
  btcSigner.TaprootControlBlock.encode(controlBlock)
20888
21051
  ]
20889
21052
  });
@@ -20913,7 +21076,7 @@ async function resolveFeeRate(opts) {
20913
21076
  }
20914
21077
  async function selectExitVtxos(opts) {
20915
21078
  if (!opts.vtxos) return opts.wallet.getVtxos();
20916
- const res = await chunkFNCQJLR2_cjs.getNormalizedVtxos(opts.wallet.indexerProvider, { outpoints: opts.vtxos });
21079
+ const res = await chunkOH2XLTXE_cjs.getNormalizedVtxos(opts.wallet.indexerProvider, { outpoints: opts.vtxos });
20917
21080
  const tapTrees = /* @__PURE__ */ new Map();
20918
21081
  const out = [];
20919
21082
  for (const vtxo of res.vtxos) {
@@ -20928,7 +21091,7 @@ async function selectExitVtxos(opts) {
20928
21091
  `no contract registered for vtxo script ${vtxo.script} \u2014 register the contract before exiting`
20929
21092
  );
20930
21093
  }
20931
- const handler = chunkSF5NKAUA_cjs.contractHandlers.get(contract.type);
21094
+ const handler = chunkG53HASDV_cjs.contractHandlers.get(contract.type);
20932
21095
  if (!handler) {
20933
21096
  throw new Error(`no contract handler registered for type '${contract.type}'`);
20934
21097
  }
@@ -20958,7 +21121,7 @@ async function computeExitLayout(opts, feeRate) {
20958
21121
  if (pendingNodes.length > 0) {
20959
21122
  const txs = await resolver.getVirtualTxs(pendingNodes.map((n) => n.txid));
20960
21123
  for (const psbt of txs) {
20961
- psbts.set(chunkFNCQJLR2_cjs.Transaction.fromPSBT(base.base64.decode(psbt)).id, psbt);
21124
+ psbts.set(chunkOH2XLTXE_cjs.Transaction.fromPSBT(base.base64.decode(psbt)).id, psbt);
20962
21125
  }
20963
21126
  }
20964
21127
  const childVsize = Number(
@@ -20994,7 +21157,7 @@ async function computeExitLayout(opts, feeRate) {
20994
21157
  try {
20995
21158
  const resolved = await resolveUnilateralPath({
20996
21159
  vtxo,
20997
- scriptHex: base.hex.encode(chunkFNCQJLR2_cjs.VtxoScript.decode(vtxo.tapTree).pkScript),
21160
+ scriptHex: base.hex.encode(chunkOH2XLTXE_cjs.VtxoScript.decode(vtxo.tapTree).pkScript),
20998
21161
  contractRepository: wallet.contractRepository,
20999
21162
  walletPubKeyHex,
21000
21163
  currentTime: Date.now()
@@ -21013,7 +21176,7 @@ async function computeExitLayout(opts, feeRate) {
21013
21176
  });
21014
21177
  continue;
21015
21178
  }
21016
- const t = chunkFNCQJLR2_cjs.sequenceToTimelock(resolved.selection.sequence);
21179
+ const t = chunkOH2XLTXE_cjs.sequenceToTimelock(resolved.selection.sequence);
21017
21180
  const delay = { type: t.type, value: Number(t.value) };
21018
21181
  infos.push({ outpoint, value: vtxo.value, sweepFee, path: resolved.label, delay });
21019
21182
  sweeps.push({ vtxo, resolved, sweepFee, delay });
@@ -21352,7 +21515,7 @@ async function prepare(opts) {
21352
21515
  txid: sweep.vtxo.txid,
21353
21516
  vout: sweep.vtxo.vout,
21354
21517
  value: sweep.vtxo.value,
21355
- pkScript: chunkFNCQJLR2_cjs.VtxoScript.decode(sweep.vtxo.tapTree).pkScript
21518
+ pkScript: chunkOH2XLTXE_cjs.VtxoScript.decode(sweep.vtxo.tapTree).pkScript
21356
21519
  },
21357
21520
  path: sweep.resolved.selection,
21358
21521
  outputAddress: opts.sweepAddress,
@@ -21437,7 +21600,7 @@ async function prepare(opts) {
21437
21600
  if (newFee <= splitterFee) break;
21438
21601
  splitterFee = newFee;
21439
21602
  }
21440
- const splitter = new chunkFNCQJLR2_cjs.Transaction({ version: 2 });
21603
+ const splitter = new chunkOH2XLTXE_cjs.Transaction({ version: 2 });
21441
21604
  for (const coin of selected.inputs) {
21442
21605
  splitter.addInput({
21443
21606
  txid: coin.txid,
@@ -21580,41 +21743,41 @@ var UnilateralExit = {
21580
21743
  // src/arkade/index.ts
21581
21744
  var arkade_exports = {};
21582
21745
  chunk5BLDMQED_cjs.__export(arkade_exports, {
21583
- ARKADE_OP: () => chunkSF5NKAUA_cjs.ARKADE_OP,
21584
- ARKADE_OPCODES: () => chunkSF5NKAUA_cjs.ARKADE_OPCODES,
21585
- ARKADE_OPCODE_NAMES: () => chunkSF5NKAUA_cjs.ARKADE_OPCODE_NAMES,
21586
- ARKADE_OPCODE_VALUES: () => chunkSF5NKAUA_cjs.ARKADE_OPCODE_VALUES,
21587
- ARKADE_OPS: () => chunkSF5NKAUA_cjs.ARKADE_OPS,
21746
+ ARKADE_OP: () => chunkG53HASDV_cjs.ARKADE_OP,
21747
+ ARKADE_OPCODES: () => chunkG53HASDV_cjs.ARKADE_OPCODES,
21748
+ ARKADE_OPCODE_NAMES: () => chunkG53HASDV_cjs.ARKADE_OPCODE_NAMES,
21749
+ ARKADE_OPCODE_VALUES: () => chunkG53HASDV_cjs.ARKADE_OPCODE_VALUES,
21750
+ ARKADE_OPS: () => chunkG53HASDV_cjs.ARKADE_OPS,
21588
21751
  Arkade: () => Arkade,
21589
21752
  ArkadeContract: () => ArkadeContract,
21590
- ArkadeProgramScript: () => chunkSF5NKAUA_cjs.ArkadeProgramScript,
21591
- ArkadeScript: () => chunkSF5NKAUA_cjs.ArkadeScript,
21753
+ ArkadeProgramScript: () => chunkG53HASDV_cjs.ArkadeProgramScript,
21754
+ ArkadeScript: () => chunkG53HASDV_cjs.ArkadeScript,
21592
21755
  ArkadeTransactionBuilder: () => ArkadeTransactionBuilder,
21593
- BigNum: () => chunkSF5NKAUA_cjs.bignum_exports,
21756
+ BigNum: () => chunkG53HASDV_cjs.bignum_exports,
21594
21757
  OP: () => btcSigner.OP,
21595
- OPCODE_NAMES: () => chunkSF5NKAUA_cjs.OPCODE_NAMES,
21596
- OPCODE_VALUES: () => chunkSF5NKAUA_cjs.OPCODE_VALUES,
21597
- SUPPORTED_PROGRAM_VERSION: () => chunkSF5NKAUA_cjs.SUPPORTED_PROGRAM_VERSION,
21758
+ OPCODE_NAMES: () => chunkG53HASDV_cjs.OPCODE_NAMES,
21759
+ OPCODE_VALUES: () => chunkG53HASDV_cjs.OPCODE_VALUES,
21760
+ SUPPORTED_PROGRAM_VERSION: () => chunkG53HASDV_cjs.SUPPORTED_PROGRAM_VERSION,
21598
21761
  Script: () => btcSigner.Script,
21599
- arkadeScriptHash: () => chunkSF5NKAUA_cjs.arkadeScriptHash,
21600
- arkadeWitnessHash: () => chunkSF5NKAUA_cjs.arkadeWitnessHash,
21601
- asmToBytes: () => chunkSF5NKAUA_cjs.asmToBytes,
21602
- bytesToASM: () => chunkSF5NKAUA_cjs.bytesToASM,
21603
- computeArkadeScriptPublicKey: () => chunkSF5NKAUA_cjs.computeArkadeScriptPublicKey,
21762
+ arkadeScriptHash: () => chunkG53HASDV_cjs.arkadeScriptHash,
21763
+ arkadeWitnessHash: () => chunkG53HASDV_cjs.arkadeWitnessHash,
21764
+ asmToBytes: () => chunkG53HASDV_cjs.asmToBytes,
21765
+ bytesToASM: () => chunkG53HASDV_cjs.bytesToASM,
21766
+ computeArkadeScriptPublicKey: () => chunkG53HASDV_cjs.computeArkadeScriptPublicKey,
21604
21767
  createArkadeBatchHandler: () => createArkadeBatchHandler,
21605
- deserializeArkadeContractParams: () => chunkSF5NKAUA_cjs.deserializeArkadeContractParams,
21606
- fromASM: () => chunkSF5NKAUA_cjs.fromASM,
21607
- getOpcodeName: () => chunkSF5NKAUA_cjs.getOpcodeName,
21608
- getOpcodeValue: () => chunkSF5NKAUA_cjs.getOpcodeValue,
21609
- parseArtifact: () => chunkSF5NKAUA_cjs.parseArtifact,
21610
- resolveAsm: () => chunkSF5NKAUA_cjs.resolveAsm,
21611
- serializeArkadeContractParams: () => chunkSF5NKAUA_cjs.serializeArkadeContractParams,
21612
- stringifyArtifact: () => chunkSF5NKAUA_cjs.stringifyArtifact,
21613
- toASM: () => chunkSF5NKAUA_cjs.toASM,
21614
- validateProgram: () => chunkSF5NKAUA_cjs.validateProgram,
21615
- witnessRefToBytes: () => chunkSF5NKAUA_cjs.witnessRefToBytes
21768
+ deserializeArkadeContractParams: () => chunkG53HASDV_cjs.deserializeArkadeContractParams,
21769
+ fromASM: () => chunkG53HASDV_cjs.fromASM,
21770
+ getOpcodeName: () => chunkG53HASDV_cjs.getOpcodeName,
21771
+ getOpcodeValue: () => chunkG53HASDV_cjs.getOpcodeValue,
21772
+ parseArtifact: () => chunkG53HASDV_cjs.parseArtifact,
21773
+ resolveAsm: () => chunkG53HASDV_cjs.resolveAsm,
21774
+ serializeArkadeContractParams: () => chunkG53HASDV_cjs.serializeArkadeContractParams,
21775
+ stringifyArtifact: () => chunkG53HASDV_cjs.stringifyArtifact,
21776
+ toASM: () => chunkG53HASDV_cjs.toASM,
21777
+ validateProgram: () => chunkG53HASDV_cjs.validateProgram,
21778
+ witnessRefToBytes: () => chunkG53HASDV_cjs.witnessRefToBytes
21616
21779
  });
21617
- var isVtxoCoin = (input) => chunkFNCQJLR2_cjs.isVirtualCoin(input);
21780
+ var isVtxoCoin = (input) => chunkOH2XLTXE_cjs.isVirtualCoin(input);
21618
21781
  function createArkadeBatchHandler(intentId, inputs, signer, signedProof, message, session, arkProvider, emulator, network, recipients, batchExpiryPolicy) {
21619
21782
  let batchId;
21620
21783
  let sweepTapTreeRoot;
@@ -21635,7 +21798,7 @@ function createArkadeBatchHandler(intentId, inputs, signer, signedProof, message
21635
21798
  );
21636
21799
  await arkProvider.confirmRegistration(intentId);
21637
21800
  batchId = event.id;
21638
- const sweepTapscript = chunkFNCQJLR2_cjs.CSVMultisigTapscript.encode({
21801
+ const sweepTapscript = chunkOH2XLTXE_cjs.CSVMultisigTapscript.encode({
21639
21802
  timelock,
21640
21803
  pubkeys: [base.hex.decode(info.forfeitPubkey).subarray(1)]
21641
21804
  }).script;
@@ -21649,7 +21812,7 @@ function createArkadeBatchHandler(intentId, inputs, signer, signedProof, message
21649
21812
  if (!xOnlyPubkeys.includes(base.hex.encode(xonlySignerPubKey))) {
21650
21813
  return { skip: true };
21651
21814
  }
21652
- const commitmentTx = chunkFNCQJLR2_cjs.Transaction.fromPSBT(base.base64.decode(event.unsignedCommitmentTx));
21815
+ const commitmentTx = chunkOH2XLTXE_cjs.Transaction.fromPSBT(base.base64.decode(event.unsignedCommitmentTx));
21653
21816
  validateVtxoTxGraph(vtxoTree, commitmentTx, sweepTapTreeRoot);
21654
21817
  if (recipients && recipients.length > 0) {
21655
21818
  validateBatchRecipients(commitmentTx, vtxoTree.leaves(), recipients, network);
@@ -21681,7 +21844,7 @@ function createArkadeBatchHandler(intentId, inputs, signer, signedProof, message
21681
21844
  if (connectorTree) {
21682
21845
  validateConnectorsTxGraph(event.commitmentTx, connectorTree);
21683
21846
  }
21684
- let commitmentPsbt = chunkFNCQJLR2_cjs.Transaction.fromPSBT(base.base64.decode(event.commitmentTx));
21847
+ let commitmentPsbt = chunkOH2XLTXE_cjs.Transaction.fromPSBT(base.base64.decode(event.commitmentTx));
21685
21848
  assertFinalCommitmentMatchesValidated(
21686
21849
  commitmentPsbt,
21687
21850
  validatedCommitmentTxid,
@@ -21716,7 +21879,7 @@ function createArkadeBatchHandler(intentId, inputs, signer, signedProof, message
21716
21879
  boardingIndices.push(boardingIdx);
21717
21880
  continue;
21718
21881
  }
21719
- if (chunkFNCQJLR2_cjs.isRecoverable(input) || isSubdust(input, info.dust)) {
21882
+ if (chunkOH2XLTXE_cjs.isRecoverable(input) || isSubdust(input, info.dust)) {
21720
21883
  continue;
21721
21884
  }
21722
21885
  if (connectorIndex >= connectorLeaves.length) {
@@ -21737,7 +21900,7 @@ function createArkadeBatchHandler(intentId, inputs, signer, signedProof, message
21737
21900
  index: input.vout,
21738
21901
  witnessUtxo: {
21739
21902
  amount: BigInt(input.value),
21740
- script: chunkFNCQJLR2_cjs.VtxoScript.decode(input.tapTree).pkScript
21903
+ script: chunkOH2XLTXE_cjs.VtxoScript.decode(input.tapTree).pkScript
21741
21904
  },
21742
21905
  sighashType: btcSigner.SigHash.DEFAULT,
21743
21906
  tapLeafScript: [input.forfeitTapLeafScript]
@@ -21829,11 +21992,11 @@ var Arkade = class _Arkade {
21829
21992
  static async connect(opts) {
21830
21993
  const info = await opts.arkade.getInfo();
21831
21994
  const serverKey = base.hex.decode(info.signerPubkey).slice(1);
21832
- const checkpoint = chunkFNCQJLR2_cjs.CSVMultisigTapscript.decode(base.hex.decode(info.checkpointTapscript));
21833
- const network = opts.network ?? chunkFNCQJLR2_cjs.DEFAULT_NETWORK;
21995
+ const checkpoint = chunkOH2XLTXE_cjs.CSVMultisigTapscript.decode(base.hex.decode(info.checkpointTapscript));
21996
+ const network = opts.network ?? chunkOH2XLTXE_cjs.DEFAULT_NETWORK;
21834
21997
  let emulatorKey;
21835
21998
  if (opts.emulator) {
21836
- emulatorKey = base.hex.decode(chunkFNCQJLR2_cjs.resolveEmulatorPubkey(network, opts.emulatorPubkey));
21999
+ emulatorKey = base.hex.decode(chunkOH2XLTXE_cjs.resolveEmulatorPubkey(network, opts.emulatorPubkey));
21837
22000
  }
21838
22001
  let userKey;
21839
22002
  if (opts.identity) {
@@ -21864,7 +22027,7 @@ var Arkade = class _Arkade {
21864
22027
  * key respectively; explicit args always win.
21865
22028
  */
21866
22029
  contract(program, args = {}) {
21867
- const declared = (program.params ?? []).map(chunkSF5NKAUA_cjs.inputName);
22030
+ const declared = (program.params ?? []).map(chunkG53HASDV_cjs.inputName);
21868
22031
  if (declared.includes("server") && args.server === void 0) {
21869
22032
  args = { ...args, server: this.serverKey };
21870
22033
  }
@@ -21884,7 +22047,7 @@ var ArkadeContract = class _ArkadeContract {
21884
22047
  userKey: client.userKey,
21885
22048
  emulatorKey: client.emulatorKey
21886
22049
  };
21887
- this.vtxoScript = new chunkSF5NKAUA_cjs.ArkadeProgramScript(program, args, this.keys);
22050
+ this.vtxoScript = new chunkG53HASDV_cjs.ArkadeProgramScript(program, args, this.keys);
21888
22051
  this.tapTree = this.vtxoScript.encode();
21889
22052
  this.compiled = this.vtxoScript.compiled;
21890
22053
  }
@@ -21912,7 +22075,7 @@ var ArkadeContract = class _ArkadeContract {
21912
22075
  `ArkadeContract.fromContract: expected contract type 'arkade', got '${contract.type}'`
21913
22076
  );
21914
22077
  }
21915
- const typed = chunkSF5NKAUA_cjs.deserializeArkadeContractParams(contract.params);
22078
+ const typed = chunkG53HASDV_cjs.deserializeArkadeContractParams(contract.params);
21916
22079
  return new _ArkadeContract(client, typed.program, typed.args, {
21917
22080
  serverKey: typed.serverKey,
21918
22081
  userKey: typed.userKey,
@@ -21953,7 +22116,7 @@ var ArkadeContract = class _ArkadeContract {
21953
22116
  toContractParams() {
21954
22117
  return {
21955
22118
  type: "arkade",
21956
- params: chunkSF5NKAUA_cjs.serializeArkadeContractParams({
22119
+ params: chunkG53HASDV_cjs.serializeArkadeContractParams({
21957
22120
  program: this.program,
21958
22121
  args: this.args,
21959
22122
  serverKey: this.keys.serverKey,
@@ -21998,13 +22161,13 @@ var ArkadeContract = class _ArkadeContract {
21998
22161
  const [registered] = await manager.getContracts({ script: scriptHex });
21999
22162
  if (registered) {
22000
22163
  const [withVtxos] = await manager.getContractsWithVtxos({ script: scriptHex });
22001
- return (withVtxos?.vtxos ?? []).filter((v) => !chunkFNCQJLR2_cjs.hasTerminalSpend(v));
22164
+ return (withVtxos?.vtxos ?? []).filter((v) => !chunkOH2XLTXE_cjs.hasTerminalSpend(v));
22002
22165
  }
22003
22166
  }
22004
22167
  if (!this.client.indexer) {
22005
22168
  throw new Error("ArkadeContract.getUtxos: an indexer is required");
22006
22169
  }
22007
- const { vtxos } = await chunkFNCQJLR2_cjs.getNormalizedVtxos(this.client.indexer, {
22170
+ const { vtxos } = await chunkOH2XLTXE_cjs.getNormalizedVtxos(this.client.indexer, {
22008
22171
  scripts: [scriptHex],
22009
22172
  spendableOnly: true
22010
22173
  });
@@ -22106,12 +22269,12 @@ var ArkadeTransactionBuilder = class {
22106
22269
  this.contract.client.checkpoint
22107
22270
  );
22108
22271
  if (coin.sourceTx) {
22109
- chunkFNCQJLR2_cjs.setArkPsbtField(arkTx, 0, chunkFNCQJLR2_cjs.PrevArkTxField, coin.sourceTx);
22272
+ chunkOH2XLTXE_cjs.setArkPsbtField(arkTx, 0, chunkOH2XLTXE_cjs.PrevArkTxField, coin.sourceTx);
22110
22273
  }
22111
22274
  const condition = (def.tapscript.witness ?? []).map((w) => this.witnessBytes(w));
22112
22275
  if (condition.length > 0) {
22113
- chunkFNCQJLR2_cjs.setArkPsbtField(arkTx, 0, chunkFNCQJLR2_cjs.ConditionWitness, condition);
22114
- chunkFNCQJLR2_cjs.setArkPsbtField(checkpoints[0], 0, chunkFNCQJLR2_cjs.ConditionWitness, condition);
22276
+ chunkOH2XLTXE_cjs.setArkPsbtField(arkTx, 0, chunkOH2XLTXE_cjs.ConditionWitness, condition);
22277
+ chunkOH2XLTXE_cjs.setArkPsbtField(checkpoints[0], 0, chunkOH2XLTXE_cjs.ConditionWitness, condition);
22115
22278
  }
22116
22279
  const packets = [];
22117
22280
  if (this.assetSpecs.length > 0) {
@@ -22150,7 +22313,7 @@ var ArkadeTransactionBuilder = class {
22150
22313
  base.base64.encode(signedArk2.toPSBT()),
22151
22314
  signedCps.map((c) => base.base64.encode(c.toPSBT()))
22152
22315
  );
22153
- const txid = chunkFNCQJLR2_cjs.Transaction.fromPSBT(base.base64.decode(res2.signedArkTx)).id;
22316
+ const txid = chunkOH2XLTXE_cjs.Transaction.fromPSBT(base.base64.decode(res2.signedArkTx)).id;
22154
22317
  return {
22155
22318
  txid,
22156
22319
  signedArkTx: res2.signedArkTx,
@@ -22209,23 +22372,23 @@ var ArkadeTransactionBuilder = class {
22209
22372
  }
22210
22373
  buildAssetPacket() {
22211
22374
  const groups = this.assetSpecs.map((s) => {
22212
- const id = typeof s.assetId === "string" ? chunk2JHN5RCY_cjs.AssetId.fromString(s.assetId) : chunk2JHN5RCY_cjs.AssetId.fromBytes(s.assetId);
22213
- return chunk2JHN5RCY_cjs.AssetGroup.create(
22375
+ const id = typeof s.assetId === "string" ? chunkI6EDUE75_cjs.AssetId.fromString(s.assetId) : chunkI6EDUE75_cjs.AssetId.fromBytes(s.assetId);
22376
+ return chunkI6EDUE75_cjs.AssetGroup.create(
22214
22377
  id,
22215
22378
  null,
22216
- s.inputs.map((i) => chunk2JHN5RCY_cjs.AssetInput.create(i.vin, i.amount)),
22217
- s.outputs.map((o) => chunk2JHN5RCY_cjs.AssetOutput.create(o.vout, o.amount)),
22218
- (s.metadata ?? []).map((m) => chunk2JHN5RCY_cjs.Metadata.create(m.key, m.value))
22379
+ s.inputs.map((i) => chunkI6EDUE75_cjs.AssetInput.create(i.vin, i.amount)),
22380
+ s.outputs.map((o) => chunkI6EDUE75_cjs.AssetOutput.create(o.vout, o.amount)),
22381
+ (s.metadata ?? []).map((m) => chunkI6EDUE75_cjs.Metadata.create(m.key, m.value))
22219
22382
  );
22220
22383
  });
22221
- return chunk2JHN5RCY_cjs.Packet.create(groups);
22384
+ return chunkI6EDUE75_cjs.Packet.create(groups);
22222
22385
  }
22223
22386
  witnessBytes(ref) {
22224
- return chunkSF5NKAUA_cjs.witnessRefToBytes(ref, this.args, this.contract.args);
22387
+ return chunkG53HASDV_cjs.witnessRefToBytes(ref, this.args, this.contract.args);
22225
22388
  }
22226
22389
  };
22227
22390
  function bindInputs(fn, callArgs) {
22228
- const names = (fn.def.inputs ?? []).map(chunkSF5NKAUA_cjs.inputName);
22391
+ const names = (fn.def.inputs ?? []).map(chunkG53HASDV_cjs.inputName);
22229
22392
  if (callArgs.length !== names.length) {
22230
22393
  throw new Error(`${fn.name}: expected ${names.length} argument(s), got ${callArgs.length}`);
22231
22394
  }
@@ -22614,6 +22777,7 @@ function createDefaultPaymentRouter(wallet) {
22614
22777
  */
22615
22778
 
22616
22779
  exports.ARKADE_MAGIC = ARKADE_MAGIC;
22780
+ exports.ARKADE_SALTED_PREIMAGE_TAG = ARKADE_SALTED_PREIMAGE_TAG;
22617
22781
  exports.ARKADE_SWAP_PREIMAGE_TAG = ARKADE_SWAP_PREIMAGE_TAG;
22618
22782
  exports.ActivityRegistry = ActivityRegistry;
22619
22783
  exports.AmbiguousRouteError = AmbiguousRouteError;
@@ -22717,6 +22881,7 @@ exports.btcTarget = btcTarget;
22717
22881
  exports.buildForfeitTx = buildForfeitTx;
22718
22882
  exports.buildOffchainTx = buildOffchainTx;
22719
22883
  exports.buildPreimageMessage = buildPreimageMessage;
22884
+ exports.buildSaltedPreimageMessage = buildSaltedPreimageMessage;
22720
22885
  exports.claimWithPreimageIdentity = claimWithPreimageIdentity;
22721
22886
  exports.classifyAgainstSignerSet = classifyAgainstSignerSet;
22722
22887
  exports.classifyContractSigner = classifyContractSigner;
@@ -22809,5 +22974,5 @@ exports.validateVtxoTxGraph = validateVtxoTxGraph;
22809
22974
  exports.verifyTapscriptSignatures = verifyTapscriptSignatures;
22810
22975
  exports.waitForIncomingFunds = waitForIncomingFunds;
22811
22976
  exports.warnAndFilterVtxosForScript = warnAndFilterVtxosForScript;
22812
- //# sourceMappingURL=chunk-3NUDA3MB.cjs.map
22813
- //# sourceMappingURL=chunk-3NUDA3MB.cjs.map
22977
+ //# sourceMappingURL=chunk-Z2OZMKFV.cjs.map
22978
+ //# sourceMappingURL=chunk-Z2OZMKFV.cjs.map