@arkade-os/sdk 0.4.61 → 0.4.63

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 (78) hide show
  1. package/README.md +20 -0
  2. package/dist/adapters/expo.cjs +5 -5
  3. package/dist/adapters/expo.d.cts +2 -2
  4. package/dist/adapters/expo.d.ts +2 -2
  5. package/dist/adapters/expo.js +3 -3
  6. package/dist/adapters/indexedDB.cjs +5 -5
  7. package/dist/adapters/indexedDB.js +4 -4
  8. package/dist/{asyncStorageTaskQueue-BWDxp3Dr.d.cts → asyncStorageTaskQueue-CIUEhv2t.d.cts} +2 -2
  9. package/dist/{asyncStorageTaskQueue-Cq9FpKv6.d.ts → asyncStorageTaskQueue-LT-xvvDN.d.ts} +2 -2
  10. package/dist/{chunk-FNCQJLR2.cjs → chunk-AB67CMHS.cjs} +3 -3
  11. package/dist/{chunk-FNCQJLR2.cjs.map → chunk-AB67CMHS.cjs.map} +1 -1
  12. package/dist/{chunk-3NUDA3MB.cjs → chunk-COOBS7ET.cjs} +646 -476
  13. package/dist/chunk-COOBS7ET.cjs.map +1 -0
  14. package/dist/{chunk-YVQNHELA.js → chunk-CZFAMS57.js} +3 -3
  15. package/dist/{chunk-YVQNHELA.js.map → chunk-CZFAMS57.js.map} +1 -1
  16. package/dist/{chunk-GDI2A65Z.js → chunk-FKKERGKA.js} +4 -4
  17. package/dist/{chunk-GDI2A65Z.js.map → chunk-FKKERGKA.js.map} +1 -1
  18. package/dist/{chunk-XMRB74HA.cjs → chunk-K56BNZV3.cjs} +10 -10
  19. package/dist/{chunk-XMRB74HA.cjs.map → chunk-K56BNZV3.cjs.map} +1 -1
  20. package/dist/{chunk-XLHN5L2O.js → chunk-KWW74O2F.js} +4 -4
  21. package/dist/{chunk-XLHN5L2O.js.map → chunk-KWW74O2F.js.map} +1 -1
  22. package/dist/{chunk-2JHN5RCY.cjs → chunk-LG5GY73A.cjs} +17 -17
  23. package/dist/{chunk-2JHN5RCY.cjs.map → chunk-LG5GY73A.cjs.map} +1 -1
  24. package/dist/{chunk-PVY6DMN5.js → chunk-MA32NXUV.js} +3 -3
  25. package/dist/{chunk-PVY6DMN5.js.map → chunk-MA32NXUV.js.map} +1 -1
  26. package/dist/{chunk-6O5OLYTZ.js → chunk-OAESYVZQ.js} +3 -3
  27. package/dist/{chunk-6O5OLYTZ.js.map → chunk-OAESYVZQ.js.map} +1 -1
  28. package/dist/{chunk-SF5NKAUA.cjs → chunk-OL7V43WS.cjs} +48 -48
  29. package/dist/{chunk-SF5NKAUA.cjs.map → chunk-OL7V43WS.cjs.map} +1 -1
  30. package/dist/{chunk-XFYFREPH.cjs → chunk-P6XYE27K.cjs} +17 -17
  31. package/dist/{chunk-XFYFREPH.cjs.map → chunk-P6XYE27K.cjs.map} +1 -1
  32. package/dist/{chunk-AUEXB42T.js → chunk-X7MMBB7S.js} +252 -84
  33. package/dist/chunk-X7MMBB7S.js.map +1 -0
  34. package/dist/contracts/handlers/index.cjs +9 -9
  35. package/dist/contracts/handlers/index.d.cts +3 -3
  36. package/dist/contracts/handlers/index.d.ts +3 -3
  37. package/dist/contracts/handlers/index.js +2 -2
  38. package/dist/{delegate-C4Rl6h9l.d.cts → delegate-BBQW61ym.d.cts} +1 -1
  39. package/dist/{delegate-BySzD37I.d.ts → delegate-Dv_9OVHv.d.ts} +1 -1
  40. package/dist/{index-C29VNcxC.d.ts → index-Bxe9kBFs.d.ts} +2 -2
  41. package/dist/{index-BcRCHnzN.d.cts → index-CFOMyVMt.d.cts} +88 -12
  42. package/dist/{index-BcRCHnzN.d.ts → index-CFOMyVMt.d.ts} +88 -12
  43. package/dist/{index-Butfkm-K.d.cts → index-aZycGEsQ.d.cts} +2 -2
  44. package/dist/index.cjs +274 -266
  45. package/dist/index.d.cts +116 -20
  46. package/dist/index.d.ts +116 -20
  47. package/dist/index.js +4 -4
  48. package/dist/repositories/realm/index.cjs +19 -19
  49. package/dist/repositories/realm/index.d.cts +2 -2
  50. package/dist/repositories/realm/index.d.ts +2 -2
  51. package/dist/repositories/realm/index.js +5 -5
  52. package/dist/repositories/sqlite/index.cjs +27 -18
  53. package/dist/repositories/sqlite/index.cjs.map +1 -1
  54. package/dist/repositories/sqlite/index.d.cts +20 -3
  55. package/dist/repositories/sqlite/index.d.ts +20 -3
  56. package/dist/repositories/sqlite/index.js +13 -6
  57. package/dist/repositories/sqlite/index.js.map +1 -1
  58. package/dist/{taskRunner-BTq3rMpI.d.cts → taskRunner-BJ6_AnLq.d.cts} +2 -2
  59. package/dist/{taskRunner-DxMJYJ7Y.d.ts → taskRunner-BQb0W1XG.d.ts} +2 -2
  60. package/dist/wallet/expo/background.cjs +14 -14
  61. package/dist/wallet/expo/background.d.cts +3 -3
  62. package/dist/wallet/expo/background.d.ts +3 -3
  63. package/dist/wallet/expo/background.js +6 -6
  64. package/dist/wallet/expo/index.cjs +16 -16
  65. package/dist/wallet/expo/index.cjs.map +1 -1
  66. package/dist/wallet/expo/index.d.cts +5 -5
  67. package/dist/wallet/expo/index.d.ts +5 -5
  68. package/dist/wallet/expo/index.js +7 -7
  69. package/dist/wallet/expo/index.js.map +1 -1
  70. package/dist/{wallet-BVIfg2ic.d.ts → wallet-C2NvHjWB.d.cts} +14 -5
  71. package/dist/{wallet-DrSsUden.d.cts → wallet-DJUnN939.d.ts} +14 -5
  72. package/dist/worker/expo/index.cjs +9 -9
  73. package/dist/worker/expo/index.d.cts +4 -4
  74. package/dist/worker/expo/index.d.ts +4 -4
  75. package/dist/worker/expo/index.js +5 -5
  76. package/package.json +1 -1
  77. package/dist/chunk-3NUDA3MB.cjs.map +0 -1
  78. 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 chunkLG5GY73A_cjs = require('./chunk-LG5GY73A.cjs');
4
+ var chunkOL7V43WS_cjs = require('./chunk-OL7V43WS.cjs');
5
+ var chunkAB67CMHS_cjs = require('./chunk-AB67CMHS.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 = chunkAB67CMHS_cjs.getArkPsbtFields(tx.root, 0, chunkAB67CMHS_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 = chunkAB67CMHS_cjs.getArkPsbtFields(g.root, 0, chunkAB67CMHS_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 = chunkOL7V43WS_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 chunkOL7V43WS_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 = chunkOL7V43WS_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 = chunkOL7V43WS_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 chunkOL7V43WS_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 chunkOL7V43WS_cjs.deriveDescriptorLeafPubKey(this.descriptor);
855
880
  }
856
881
  async compressedPublicKey() {
857
- return chunkSF5NKAUA_cjs.deriveDescriptorLeafCompressedPubKey(this.descriptor);
882
+ return chunkOL7V43WS_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 && chunkOL7V43WS_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 = chunkOL7V43WS_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 chunkOL7V43WS_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 chunkOL7V43WS_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 = chunkOL7V43WS_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 chunkAB67CMHS_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: chunkAB67CMHS_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 chunkAB67CMHS_cjs.rateGate.runHttp(url, () => chunkAB67CMHS_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[chunkAB67CMHS_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 chunkAB67CMHS_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 chunkAB67CMHS_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 chunkAB67CMHS_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 chunkAB67CMHS_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 chunkAB67CMHS_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 chunkAB67CMHS_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 chunkAB67CMHS_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 chunkAB67CMHS_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 chunkAB67CMHS_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 chunkAB67CMHS_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 chunkAB67CMHS_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 = chunkAB67CMHS_cjs.getArkPsbtFields(child.root, 0, chunkAB67CMHS_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 chunkLG5GY73A_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 chunkLG5GY73A_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 chunkLG5GY73A_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 chunkLG5GY73A_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 chunkLG5GY73A_cjs.Packet.PACKET_TYPE:
2385
+ return chunkLG5GY73A_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 chunkAB67CMHS_cjs.ServerResponseMismatchError(`offchain send output not found: ${address}`);
2433
+ var ErrInvalidAssetOutputAmount = (got, want, assetId) => new chunkAB67CMHS_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 chunkAB67CMHS_cjs.ServerResponseMismatchError(`asset group not found in batch leaf: ${assetId}`);
2437
+ var ErrAssetOutputNotFound = (assetId, outputIndex) => new chunkAB67CMHS_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 chunkAB67CMHS_cjs.ServerResponseMismatchError(`onchain output not found: ${address}`);
2441
+ var ErrUnvalidatedOffchainOutput = (address) => new chunkAB67CMHS_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 chunkAB67CMHS_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 = chunkAB67CMHS_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
+ chunkAB67CMHS_cjs.ArkAddress.decode(recipient.address);
2411
2473
  } catch {
2412
2474
  validateOnchainRecipient(commitmentTx, recipient, network, usedOnchainOutputs);
2413
2475
  continue;
@@ -2523,6 +2585,7 @@ async function buildActivities(txs, resolvers) {
2523
2585
  groupId: a.groupId,
2524
2586
  label: a.label ?? b.label,
2525
2587
  kind: a.kind ?? b.kind,
2588
+ outcome: a.outcome ?? b.outcome,
2526
2589
  metadata: { ...b.metadata, ...a.metadata },
2527
2590
  amount: a.amount ?? b.amount
2528
2591
  });
@@ -2560,6 +2623,7 @@ async function buildActivities(txs, resolvers) {
2560
2623
  b.intent = {
2561
2624
  label: b.intent?.label ?? m.label,
2562
2625
  kind: b.intent?.kind ?? m.kind,
2626
+ outcome: b.intent?.outcome ?? m.outcome,
2563
2627
  metadata: { ...m.metadata, ...b.intent?.metadata }
2564
2628
  };
2565
2629
  b.members.push({ tx, amount: signedAmount(tx, m.amount ?? tx.amount) });
@@ -2638,7 +2702,7 @@ function assetMintResolver() {
2638
2702
  if (!tx.assets?.length || !tx.key.arkTxid) return void 0;
2639
2703
  const minted = tx.assets.filter((a) => {
2640
2704
  try {
2641
- return base.hex.encode(chunk2JHN5RCY_cjs.AssetId.fromString(a.assetId).txid) === tx.key.arkTxid;
2705
+ return base.hex.encode(chunkLG5GY73A_cjs.AssetId.fromString(a.assetId).txid) === tx.key.arkTxid;
2642
2706
  } catch {
2643
2707
  return false;
2644
2708
  }
@@ -2681,7 +2745,7 @@ function createAssetPacket(assetInputs, receivers, changeReceiver) {
2681
2745
  const existing = inputsByAssetId.get(asset.assetId);
2682
2746
  inputsByAssetId.set(asset.assetId, [
2683
2747
  ...existing ?? [],
2684
- chunk2JHN5RCY_cjs.AssetInput.create(inputIndex, asset.amount)
2748
+ chunkLG5GY73A_cjs.AssetInput.create(inputIndex, asset.amount)
2685
2749
  ]);
2686
2750
  }
2687
2751
  }
@@ -2693,7 +2757,7 @@ function createAssetPacket(assetInputs, receivers, changeReceiver) {
2693
2757
  const existing = outputsByAssetId.get(asset.assetId);
2694
2758
  outputsByAssetId.set(asset.assetId, [
2695
2759
  ...existing ?? [],
2696
- chunk2JHN5RCY_cjs.AssetOutput.create(outputIndex, asset.amount)
2760
+ chunkLG5GY73A_cjs.AssetOutput.create(outputIndex, asset.amount)
2697
2761
  ]);
2698
2762
  }
2699
2763
  }
@@ -2704,7 +2768,7 @@ function createAssetPacket(assetInputs, receivers, changeReceiver) {
2704
2768
  const existing = outputsByAssetId.get(asset.assetId);
2705
2769
  outputsByAssetId.set(asset.assetId, [
2706
2770
  ...existing ?? [],
2707
- chunk2JHN5RCY_cjs.AssetOutput.create(outputIndex, asset.amount)
2771
+ chunkLG5GY73A_cjs.AssetOutput.create(outputIndex, asset.amount)
2708
2772
  ]);
2709
2773
  }
2710
2774
  }
@@ -2713,11 +2777,11 @@ function createAssetPacket(assetInputs, receivers, changeReceiver) {
2713
2777
  for (const assetIdStr of allAssetIds) {
2714
2778
  const inputs = inputsByAssetId.get(assetIdStr);
2715
2779
  const outputs = outputsByAssetId.get(assetIdStr);
2716
- const assetId = chunk2JHN5RCY_cjs.AssetId.fromString(assetIdStr);
2717
- const group = chunk2JHN5RCY_cjs.AssetGroup.create(assetId, null, inputs ?? [], outputs ?? [], []);
2780
+ const assetId = chunkLG5GY73A_cjs.AssetId.fromString(assetIdStr);
2781
+ const group = chunkLG5GY73A_cjs.AssetGroup.create(assetId, null, inputs ?? [], outputs ?? [], []);
2718
2782
  groups.push(group);
2719
2783
  }
2720
- return chunk2JHN5RCY_cjs.Packet.create(groups);
2784
+ return chunkLG5GY73A_cjs.Packet.create(groups);
2721
2785
  }
2722
2786
  function selectCoinsWithAsset(coins, assetId, requiredAmount) {
2723
2787
  const coinsWithAsset = coins.filter((coin) => coin.assets?.some((a) => a.assetId === assetId));
@@ -2802,13 +2866,13 @@ var toTimelock = (value) => ({
2802
2866
  var toSeconds = (t) => t.type === "seconds" ? t.value : t.value * NOMINAL_BLOCK_SECONDS;
2803
2867
  function assertTimelockInPolicy(timelock, policy, label, overrideOption) {
2804
2868
  if (policy.requireSeconds && timelock.type === "blocks") {
2805
- throw new chunkFNCQJLR2_cjs.ServerResponseMismatchError(
2869
+ throw new chunkAB67CMHS_cjs.ServerResponseMismatchError(
2806
2870
  `${label} rejected: block-typed timelocks are not accepted (got ${timelock.value})`
2807
2871
  );
2808
2872
  }
2809
2873
  const seconds = toSeconds(timelock);
2810
2874
  if (seconds < policy.minSeconds) {
2811
- throw new chunkFNCQJLR2_cjs.ServerResponseMismatchError(
2875
+ throw new chunkAB67CMHS_cjs.ServerResponseMismatchError(
2812
2876
  `${label} rejected: ${timelock.value} ${timelock.type} is below the ${policy.minSeconds}s floor; pass ${overrideOption}: ${seconds}n to Wallet.create to lower it`
2813
2877
  );
2814
2878
  }
@@ -2829,7 +2893,7 @@ function resolveBatchExpiryPolicy(network, overrides) {
2829
2893
  }
2830
2894
  function assertValidBatchExpiry(batchExpiry, policy) {
2831
2895
  if (policy.advertisedVtxoTreeExpiry !== void 0 && batchExpiry !== policy.advertisedVtxoTreeExpiry) {
2832
- throw new chunkFNCQJLR2_cjs.ServerResponseMismatchError(
2896
+ throw new chunkAB67CMHS_cjs.ServerResponseMismatchError(
2833
2897
  `batch expiry rejected: ${batchExpiry} does not match the advertised vtxoTreeExpiry ${policy.advertisedVtxoTreeExpiry}`
2834
2898
  );
2835
2899
  }
@@ -2859,21 +2923,21 @@ function resolveCheckpointExitDelayPolicy(network, overrides) {
2859
2923
  function assertValidServerUnrollScript(checkpointTapscript, policy) {
2860
2924
  let script;
2861
2925
  try {
2862
- script = chunkFNCQJLR2_cjs.CSVMultisigTapscript.decode(base.hex.decode(checkpointTapscript));
2926
+ script = chunkAB67CMHS_cjs.CSVMultisigTapscript.decode(base.hex.decode(checkpointTapscript));
2863
2927
  } catch (e) {
2864
- throw new chunkFNCQJLR2_cjs.ServerResponseMismatchError(
2928
+ throw new chunkAB67CMHS_cjs.ServerResponseMismatchError(
2865
2929
  `checkpoint exit delay rejected: invalid checkpointTapscript from server (${e instanceof Error ? e.message : String(e)})`
2866
2930
  );
2867
2931
  }
2868
2932
  if (policy.advertisedForfeitPubkey !== void 0) {
2869
2933
  const { pubkeys } = script.params;
2870
2934
  if (pubkeys.length !== 1) {
2871
- throw new chunkFNCQJLR2_cjs.ServerResponseMismatchError(
2935
+ throw new chunkAB67CMHS_cjs.ServerResponseMismatchError(
2872
2936
  `checkpoint exit delay rejected: checkpointTapscript must commit to exactly one pubkey, got ${pubkeys.length} [${pubkeys.map(base.hex.encode).join(", ")}]`
2873
2937
  );
2874
2938
  }
2875
2939
  if (!utils_js.equalBytes(pubkeys[0], policy.advertisedForfeitPubkey)) {
2876
- throw new chunkFNCQJLR2_cjs.ServerResponseMismatchError(
2940
+ throw new chunkAB67CMHS_cjs.ServerResponseMismatchError(
2877
2941
  `checkpoint exit delay rejected: checkpointTapscript pubkey ${base.hex.encode(pubkeys[0])} does not match the advertised forfeitPubkey ${base.hex.encode(policy.advertisedForfeitPubkey)}`
2878
2942
  );
2879
2943
  }
@@ -2917,8 +2981,8 @@ function buildOffchainTx(inputs, outputs, serverUnrollScript) {
2917
2981
  function buildVirtualTx(inputs, outputs) {
2918
2982
  let lockTime = 0n;
2919
2983
  for (const input of inputs) {
2920
- const tapscript = chunkFNCQJLR2_cjs.decodeTapscript(chunkFNCQJLR2_cjs.scriptFromTapLeafScript(input.tapLeafScript));
2921
- if (chunkFNCQJLR2_cjs.CLTVMultisigTapscript.is(tapscript)) {
2984
+ const tapscript = chunkAB67CMHS_cjs.decodeTapscript(chunkAB67CMHS_cjs.scriptFromTapLeafScript(input.tapLeafScript));
2985
+ if (chunkAB67CMHS_cjs.CLTVMultisigTapscript.is(tapscript)) {
2922
2986
  if (lockTime !== 0n) {
2923
2987
  if (isSeconds(lockTime) !== isSeconds(tapscript.params.absoluteTimelock)) {
2924
2988
  throw new Error("cannot mix seconds and blocks locktime");
@@ -2929,7 +2993,7 @@ function buildVirtualTx(inputs, outputs) {
2929
2993
  }
2930
2994
  }
2931
2995
  }
2932
- const tx = new chunkFNCQJLR2_cjs.Transaction({
2996
+ const tx = new chunkAB67CMHS_cjs.Transaction({
2933
2997
  version: 3,
2934
2998
  lockTime: Number(lockTime)
2935
2999
  });
@@ -2939,12 +3003,12 @@ function buildVirtualTx(inputs, outputs) {
2939
3003
  index: input.vout,
2940
3004
  sequence: lockTime ? btcSigner.DEFAULT_SEQUENCE - 1 : void 0,
2941
3005
  witnessUtxo: {
2942
- script: chunkFNCQJLR2_cjs.VtxoScript.decode(input.tapTree).pkScript,
3006
+ script: chunkAB67CMHS_cjs.VtxoScript.decode(input.tapTree).pkScript,
2943
3007
  amount: BigInt(input.value)
2944
3008
  },
2945
3009
  tapLeafScript: [input.tapLeafScript]
2946
3010
  });
2947
- chunkFNCQJLR2_cjs.setArkPsbtField(tx, i, chunkFNCQJLR2_cjs.VtxoTaprootTree, input.tapTree);
3011
+ chunkAB67CMHS_cjs.setArkPsbtField(tx, i, chunkAB67CMHS_cjs.VtxoTaprootTree, input.tapTree);
2948
3012
  }
2949
3013
  for (const output of outputs) {
2950
3014
  tx.addOutput(output);
@@ -2953,8 +3017,8 @@ function buildVirtualTx(inputs, outputs) {
2953
3017
  return tx;
2954
3018
  }
2955
3019
  function buildCheckpointTx(vtxo, serverUnrollScript) {
2956
- const collaborativeClosure = chunkFNCQJLR2_cjs.decodeTapscript(chunkFNCQJLR2_cjs.scriptFromTapLeafScript(vtxo.tapLeafScript));
2957
- const checkpointVtxoScript = new chunkFNCQJLR2_cjs.VtxoScript([
3020
+ const collaborativeClosure = chunkAB67CMHS_cjs.decodeTapscript(chunkAB67CMHS_cjs.scriptFromTapLeafScript(vtxo.tapLeafScript));
3021
+ const checkpointVtxoScript = new chunkAB67CMHS_cjs.VtxoScript([
2958
3022
  serverUnrollScript.script,
2959
3023
  collaborativeClosure.script
2960
3024
  ]);
@@ -3107,7 +3171,7 @@ function combineTapscriptSigs(signedTx, originalTx) {
3107
3171
  }
3108
3172
  function isValidArkAddress(address) {
3109
3173
  try {
3110
- chunkFNCQJLR2_cjs.ArkAddress.decode(address);
3174
+ chunkAB67CMHS_cjs.ArkAddress.decode(address);
3111
3175
  return true;
3112
3176
  } catch (e) {
3113
3177
  return false;
@@ -3115,16 +3179,16 @@ function isValidArkAddress(address) {
3115
3179
  }
3116
3180
  function matchServerCheckpoints(serverCheckpointTxs, expectedCheckpoints, context) {
3117
3181
  if (serverCheckpointTxs.length !== expectedCheckpoints.length) {
3118
- throw new chunkFNCQJLR2_cjs.ServerResponseMismatchError(
3182
+ throw new chunkAB67CMHS_cjs.ServerResponseMismatchError(
3119
3183
  `${context} returned ${serverCheckpointTxs.length} checkpoints, expected ${expectedCheckpoints.length}`
3120
3184
  );
3121
3185
  }
3122
3186
  const byTxid = new Map(expectedCheckpoints.map((c) => [c.id, c]));
3123
3187
  return serverCheckpointTxs.map((encoded, index) => {
3124
- const server = chunkFNCQJLR2_cjs.Transaction.fromPSBT(base.base64.decode(encoded));
3188
+ const server = chunkAB67CMHS_cjs.Transaction.fromPSBT(base.base64.decode(encoded));
3125
3189
  const local = byTxid.get(server.id);
3126
3190
  if (!local) {
3127
- throw new chunkFNCQJLR2_cjs.ServerResponseMismatchError(
3191
+ throw new chunkAB67CMHS_cjs.ServerResponseMismatchError(
3128
3192
  `${context} checkpoint ${index} txid ${server.id} does not match any submitted checkpoint`
3129
3193
  );
3130
3194
  }
@@ -3134,14 +3198,14 @@ function matchServerCheckpoints(serverCheckpointTxs, expectedCheckpoints, contex
3134
3198
  }
3135
3199
  function assertSubmittedArkTxid(response, signedArkTx, context) {
3136
3200
  if (response.arkTxid !== signedArkTx.id) {
3137
- throw new chunkFNCQJLR2_cjs.ServerResponseMismatchError(
3201
+ throw new chunkAB67CMHS_cjs.ServerResponseMismatchError(
3138
3202
  `${context} returned ark txid ${response.arkTxid}, expected ${signedArkTx.id}`
3139
3203
  );
3140
3204
  }
3141
3205
  if (response.finalArkTx === void 0) return;
3142
- const finalTxid = chunkFNCQJLR2_cjs.Transaction.fromPSBT(base.base64.decode(response.finalArkTx)).id;
3206
+ const finalTxid = chunkAB67CMHS_cjs.Transaction.fromPSBT(base.base64.decode(response.finalArkTx)).id;
3143
3207
  if (finalTxid !== signedArkTx.id) {
3144
- throw new chunkFNCQJLR2_cjs.ServerResponseMismatchError(
3208
+ throw new chunkAB67CMHS_cjs.ServerResponseMismatchError(
3145
3209
  `${context} returned final ark tx ${finalTxid}, expected ${signedArkTx.id}`
3146
3210
  );
3147
3211
  }
@@ -3160,10 +3224,10 @@ function assertServerSignedLeaf(serverTx, localTx, inputIndex, serverPubkeyHex,
3160
3224
  [serverPubkeyHex],
3161
3225
  void 0,
3162
3226
  void 0,
3163
- payment_js.tapLeafHash(chunkFNCQJLR2_cjs.scriptFromTapLeafScript(leaf))
3227
+ payment_js.tapLeafHash(chunkAB67CMHS_cjs.scriptFromTapLeafScript(leaf))
3164
3228
  );
3165
3229
  } catch (error) {
3166
- throw new chunkFNCQJLR2_cjs.ServerResponseMismatchError(
3230
+ throw new chunkAB67CMHS_cjs.ServerResponseMismatchError(
3167
3231
  `${context}: input ${inputIndex} is not signed by the server on the leaf being spent (${error instanceof Error ? error.message : String(error)})`
3168
3232
  );
3169
3233
  }
@@ -3172,20 +3236,20 @@ function assertCheckpointsMatchInputs(checkpoints, inputs, unrollCandidates, con
3172
3236
  const byOutpoint = new Map(inputs.map((input) => [`${input.txid}:${input.vout}`, input]));
3173
3237
  for (const [index, checkpoint] of checkpoints.entries()) {
3174
3238
  if (checkpoint.inputsLength !== 1) {
3175
- throw new chunkFNCQJLR2_cjs.ServerResponseMismatchError(
3239
+ throw new chunkAB67CMHS_cjs.ServerResponseMismatchError(
3176
3240
  `${context}: checkpoint ${index} spends ${checkpoint.inputsLength} inputs, expected 1`
3177
3241
  );
3178
3242
  }
3179
3243
  const spent = checkpoint.getInput(0);
3180
3244
  if (!spent.txid || spent.index === void 0) {
3181
- throw new chunkFNCQJLR2_cjs.ServerResponseMismatchError(
3245
+ throw new chunkAB67CMHS_cjs.ServerResponseMismatchError(
3182
3246
  `${context}: checkpoint ${index} has no input outpoint`
3183
3247
  );
3184
3248
  }
3185
3249
  const outpoint = `${base.hex.encode(spent.txid)}:${spent.index}`;
3186
3250
  const input = byOutpoint.get(outpoint);
3187
3251
  if (!input) {
3188
- throw new chunkFNCQJLR2_cjs.ServerResponseMismatchError(
3252
+ throw new chunkAB67CMHS_cjs.ServerResponseMismatchError(
3189
3253
  `${context}: checkpoint ${index} spends ${outpoint}, which is not one of the requested virtual outputs`
3190
3254
  );
3191
3255
  }
@@ -3193,7 +3257,7 @@ function assertCheckpointsMatchInputs(checkpoints, inputs, unrollCandidates, con
3193
3257
  (unroll) => buildCheckpointTx(input, unroll).tx.id === checkpoint.id
3194
3258
  );
3195
3259
  if (!rebuilt) {
3196
- throw new chunkFNCQJLR2_cjs.ServerResponseMismatchError(
3260
+ throw new chunkAB67CMHS_cjs.ServerResponseMismatchError(
3197
3261
  `${context}: checkpoint ${index} txid ${checkpoint.id} differs from the checkpoint built locally for ${outpoint}`
3198
3262
  );
3199
3263
  }
@@ -3220,11 +3284,11 @@ async function submitOffchainTx(provider, offchainTx, signer, hooks, options) {
3220
3284
  const verify = options?.verifyServerSignatures;
3221
3285
  if (verify) {
3222
3286
  if (response.finalArkTx === void 0) {
3223
- throw new chunkFNCQJLR2_cjs.ServerResponseMismatchError(
3287
+ throw new chunkAB67CMHS_cjs.ServerResponseMismatchError(
3224
3288
  "submitTx: server returned no final ark tx to verify its signatures against"
3225
3289
  );
3226
3290
  }
3227
- const finalArkTx = chunkFNCQJLR2_cjs.Transaction.fromPSBT(base.base64.decode(response.finalArkTx));
3291
+ const finalArkTx = chunkAB67CMHS_cjs.Transaction.fromPSBT(base.base64.decode(response.finalArkTx));
3228
3292
  const serverPubkeyHex = base.hex.encode(
3229
3293
  verify.serverPubkey.length === 33 ? verify.serverPubkey.subarray(1) : verify.serverPubkey
3230
3294
  );
@@ -3283,12 +3347,12 @@ function claimWithPreimageIdentity(identity, preimage) {
3283
3347
  return {
3284
3348
  ...identity,
3285
3349
  sign: async (tx, inputIndexes) => {
3286
- const signed = chunkFNCQJLR2_cjs.Transaction.fromPSBT(
3350
+ const signed = chunkAB67CMHS_cjs.Transaction.fromPSBT(
3287
3351
  (await identity.sign(tx.clone(), inputIndexes)).toPSBT()
3288
3352
  );
3289
3353
  const indexes = inputIndexes ?? Array.from({ length: signed.inputsLength }, (_, i) => i);
3290
3354
  for (const index of indexes) {
3291
- chunkFNCQJLR2_cjs.setArkPsbtField(signed, index, chunkFNCQJLR2_cjs.ConditionWitness, [preimage]);
3355
+ chunkAB67CMHS_cjs.setArkPsbtField(signed, index, chunkAB67CMHS_cjs.ConditionWitness, [preimage]);
3292
3356
  }
3293
3357
  return signed;
3294
3358
  }
@@ -3480,7 +3544,7 @@ function extendCoinWithTapscript(boardingTapscript, utxo) {
3480
3544
  };
3481
3545
  }
3482
3546
  function deriveContractTapscripts(contract) {
3483
- const handler = chunkSF5NKAUA_cjs.contractHandlers.get(contract.type);
3547
+ const handler = chunkOL7V43WS_cjs.contractHandlers.get(contract.type);
3484
3548
  if (!handler) {
3485
3549
  throw new Error(`No handler for contract type '${contract.type}'`);
3486
3550
  }
@@ -3551,7 +3615,7 @@ function getRandomId() {
3551
3615
  }
3552
3616
  function isValidArkAddress2(address) {
3553
3617
  try {
3554
- chunkFNCQJLR2_cjs.ArkAddress.decode(address);
3618
+ chunkAB67CMHS_cjs.ArkAddress.decode(address);
3555
3619
  return true;
3556
3620
  } catch (e) {
3557
3621
  return false;
@@ -3576,12 +3640,27 @@ function assertRecipientArkAddress(encoded, address, context) {
3576
3640
  );
3577
3641
  }
3578
3642
  }
3643
+ function assertTapTreeDerivesAddress(encoded, tapTree, address) {
3644
+ let derived;
3645
+ try {
3646
+ derived = chunkAB67CMHS_cjs.VtxoScript.decode(tapTree).pkScript;
3647
+ } catch (e) {
3648
+ throw new Error(
3649
+ `Invalid tapTree for ${encoded}: ${e instanceof Error ? e.message : String(e)}`
3650
+ );
3651
+ }
3652
+ if (base.hex.encode(derived) !== base.hex.encode(address.pkScript)) {
3653
+ throw new Error(
3654
+ `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.`
3655
+ );
3656
+ }
3657
+ }
3579
3658
  function validateRecipients(recipients, dustAmount, context) {
3580
3659
  const validatedRecipients = [];
3581
3660
  for (const recipient of recipients) {
3582
3661
  let address;
3583
3662
  try {
3584
- address = chunkFNCQJLR2_cjs.ArkAddress.decode(recipient.address);
3663
+ address = chunkAB67CMHS_cjs.ArkAddress.decode(recipient.address);
3585
3664
  } catch (e) {
3586
3665
  throw new Error(`Invalid Arkade address: ${recipient.address}`);
3587
3666
  }
@@ -3590,11 +3669,15 @@ function validateRecipients(recipients, dustAmount, context) {
3590
3669
  if (amount <= 0) {
3591
3670
  throw new Error("Amount must be positive");
3592
3671
  }
3672
+ if (recipient.tapTree) {
3673
+ assertTapTreeDerivesAddress(recipient.address, recipient.tapTree, address);
3674
+ }
3593
3675
  validatedRecipients.push({
3594
3676
  address: recipient.address,
3595
3677
  assets: recipient.assets ?? [],
3596
3678
  amount,
3597
- script: amount < dustAmount ? address.subdustPkScript : address.pkScript
3679
+ script: amount < dustAmount ? address.subdustPkScript : address.pkScript,
3680
+ tapTree: recipient.tapTree
3598
3681
  });
3599
3682
  }
3600
3683
  return validatedRecipients;
@@ -3602,7 +3685,7 @@ function validateRecipients(recipients, dustAmount, context) {
3602
3685
 
3603
3686
  // src/contracts/spendability.ts
3604
3687
  function isContractGenericallySpendable(contract) {
3605
- return chunkSF5NKAUA_cjs.contractHandlers.get(contract.type)?.isGenericallySpendable?.(contract) === true;
3688
+ return chunkOL7V43WS_cjs.contractHandlers.get(contract.type)?.isGenericallySpendable?.(contract) === true;
3606
3689
  }
3607
3690
  function gatedContracts(contracts) {
3608
3691
  const gated = /* @__PURE__ */ new Map();
@@ -3615,6 +3698,9 @@ function gateExclusion(gated) {
3615
3698
  return (vtxo) => {
3616
3699
  const type = vtxo.script === void 0 ? void 0 : gated.get(vtxo.script);
3617
3700
  if (type === void 0) return void 0;
3701
+ if (!chunkOL7V43WS_cjs.contractHandlers.has(type)) {
3702
+ return `at ${vtxo.script} (contract type '${type}') has no handler registered in this build`;
3703
+ }
3618
3704
  return `at ${vtxo.script} (contract type '${type}') is not generically spendable`;
3619
3705
  };
3620
3706
  }
@@ -3648,7 +3734,7 @@ function selectPendingRecoveryOutpoints(contractsWithVtxos, signerSet, nowSecond
3648
3734
  continue;
3649
3735
  }
3650
3736
  for (const v of vtxos) {
3651
- if (!chunkFNCQJLR2_cjs.hasTerminalSpend(v) && !v.isSwept) out.add(`${v.txid}:${v.vout}`);
3737
+ if (!chunkAB67CMHS_cjs.hasTerminalSpend(v) && !v.isSwept) out.add(`${v.txid}:${v.vout}`);
3652
3738
  }
3653
3739
  }
3654
3740
  return out;
@@ -3681,10 +3767,10 @@ function byValueDescending(vtxos) {
3681
3767
  return [...vtxos].sort((a, b) => b.value - a.value);
3682
3768
  }
3683
3769
  async function fetchTimeHeight(wallet) {
3684
- return chunkFNCQJLR2_cjs.resolveTimeHeight(wallet.onchainProvider);
3770
+ return chunkAB67CMHS_cjs.resolveTimeHeight(wallet.onchainProvider);
3685
3771
  }
3686
3772
  function canMigrateBySend(vtxo, now) {
3687
- if (!chunkFNCQJLR2_cjs.canSpendOffchain(vtxo, now)) return false;
3773
+ if (!chunkAB67CMHS_cjs.canSpendOffchain(vtxo, now)) return false;
3688
3774
  return vtxo.expiresAt !== void 0 || vtxo.expiresAtHeight !== void 0;
3689
3775
  }
3690
3776
  function byExpiryAscending(vtxos, now) {
@@ -3692,7 +3778,7 @@ function byExpiryAscending(vtxos, now) {
3692
3778
  if (vtxo.isSwept) return -Infinity;
3693
3779
  if (vtxo.expiresAt !== void 0) return vtxo.expiresAt.getTime();
3694
3780
  if (vtxo.expiresAtHeight !== void 0) {
3695
- return chunkFNCQJLR2_cjs.isPastExpiry(vtxo, now) ? -Infinity : Infinity;
3781
+ return chunkAB67CMHS_cjs.isPastExpiry(vtxo, now) ? -Infinity : Infinity;
3696
3782
  }
3697
3783
  return Infinity;
3698
3784
  };
@@ -3719,7 +3805,7 @@ function priceSettlementInputs(vtxos, estimator) {
3719
3805
  const payable = [];
3720
3806
  const net = /* @__PURE__ */ new Map();
3721
3807
  for (const vtxo of vtxos) {
3722
- const inputFee = estimator.evalOffchainInput(chunkFNCQJLR2_cjs.toOffchainInputFeeParams(vtxo));
3808
+ const inputFee = estimator.evalOffchainInput(chunkAB67CMHS_cjs.toOffchainInputFeeParams(vtxo));
3723
3809
  if (inputFee.satoshis >= vtxo.value) {
3724
3810
  continue;
3725
3811
  }
@@ -3745,7 +3831,7 @@ function deductOffchainOutputFee(subtotal, estimator, arkAddress) {
3745
3831
  }
3746
3832
  const outputFee = estimator.evalOffchainOutput({
3747
3833
  amount: subtotal,
3748
- script: base.hex.encode(chunkFNCQJLR2_cjs.ArkAddress.decode(arkAddress).pkScript)
3834
+ script: base.hex.encode(chunkAB67CMHS_cjs.ArkAddress.decode(arkAddress).pkScript)
3749
3835
  });
3750
3836
  return subtotal - BigInt(outputFee.satoshis);
3751
3837
  }
@@ -3763,10 +3849,10 @@ var DEFAULT_SETTLEMENT_CONFIG = {
3763
3849
  };
3764
3850
  function getRecoverableVtxos(vtxos, dustAmount, now) {
3765
3851
  return vtxos.filter((vtxo) => {
3766
- if (chunkFNCQJLR2_cjs.canRecoverOnchain(vtxo, now)) {
3852
+ if (chunkAB67CMHS_cjs.canRecoverOnchain(vtxo, now)) {
3767
3853
  return true;
3768
3854
  }
3769
- if (chunkFNCQJLR2_cjs.canSpendOffchain(vtxo, now) && vtxo.isPreconfirmed && isSubdust(vtxo, dustAmount)) {
3855
+ if (chunkAB67CMHS_cjs.canSpendOffchain(vtxo, now) && vtxo.isPreconfirmed && isSubdust(vtxo, dustAmount)) {
3770
3856
  return true;
3771
3857
  }
3772
3858
  return false;
@@ -3797,7 +3883,7 @@ function getRecoverableWithSubdust(vtxos, dustAmount, now) {
3797
3883
  }
3798
3884
  function isVtxoExpiringSoon(vtxo, thresholdMs) {
3799
3885
  const realThresholdMs = thresholdMs <= 100 ? DEFAULT_THRESHOLD_MS : thresholdMs;
3800
- const expiresAt = chunkFNCQJLR2_cjs.normalizeVtxo(vtxo).expiresAt;
3886
+ const expiresAt = chunkAB67CMHS_cjs.normalizeVtxo(vtxo).expiresAt;
3801
3887
  if (expiresAt === void 0) return false;
3802
3888
  const now = Date.now();
3803
3889
  const batchExpiry = expiresAt.getTime();
@@ -3806,7 +3892,7 @@ function isVtxoExpiringSoon(vtxo, thresholdMs) {
3806
3892
  }
3807
3893
  function getExpiringAndRecoverableVtxos(vtxos, thresholdMs, dustAmount, now) {
3808
3894
  return vtxos.filter(
3809
- (vtxo) => isVtxoExpiringSoon(vtxo, thresholdMs) || chunkFNCQJLR2_cjs.canRecoverOnchain(vtxo, now) || isSubdust(vtxo, dustAmount)
3895
+ (vtxo) => isVtxoExpiringSoon(vtxo, thresholdMs) || chunkAB67CMHS_cjs.canRecoverOnchain(vtxo, now) || isSubdust(vtxo, dustAmount)
3810
3896
  );
3811
3897
  }
3812
3898
  function isMigrationCapable(wallet) {
@@ -4405,11 +4491,11 @@ var VtxoManager = class _VtxoManager {
4405
4491
  `Sweep not economical: output ${outputAmount} sats after ${fee} sats fee is below dust (${dustAmount} sats)`
4406
4492
  );
4407
4493
  }
4408
- const tx = new chunkFNCQJLR2_cjs.Transaction();
4494
+ const tx = new chunkAB67CMHS_cjs.Transaction();
4409
4495
  for (const utxo of expiredUtxos) {
4410
- const utxoScript = chunkFNCQJLR2_cjs.VtxoScript.decode(utxo.tapTree);
4496
+ const utxoScript = chunkAB67CMHS_cjs.VtxoScript.decode(utxo.tapTree);
4411
4497
  const utxoExitLeaf = utxoScript.leaves.find(
4412
- (leaf) => chunkFNCQJLR2_cjs.CSVMultisigTapscript.isScriptValid(chunkFNCQJLR2_cjs.scriptFromTapLeafScript(leaf)) === true
4498
+ (leaf) => chunkAB67CMHS_cjs.CSVMultisigTapscript.isScriptValid(chunkAB67CMHS_cjs.scriptFromTapLeafScript(leaf)) === true
4413
4499
  );
4414
4500
  if (!utxoExitLeaf) {
4415
4501
  throw new Error(
@@ -4424,7 +4510,7 @@ var VtxoManager = class _VtxoManager {
4424
4510
  amount: BigInt(utxo.value)
4425
4511
  },
4426
4512
  tapLeafScript: [utxoExitLeaf],
4427
- sequence: chunkFNCQJLR2_cjs.getSequence(utxoExitLeaf)
4513
+ sequence: chunkAB67CMHS_cjs.getSequence(utxoExitLeaf)
4428
4514
  });
4429
4515
  }
4430
4516
  tx.addOutputAddress(boardingAddress, outputAmount, this.getNetwork());
@@ -4658,8 +4744,8 @@ var VtxoManager = class _VtxoManager {
4658
4744
  if (!serverPubKey) continue;
4659
4745
  const cls = classifyAgainstSignerSet(serverPubKey, signerSet, nowSeconds);
4660
4746
  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);
4747
+ const recoverable = vtxos.filter((v) => v.isSwept && !chunkAB67CMHS_cjs.hasTerminalSpend(v));
4748
+ const spendable = vtxos.filter((v) => !chunkAB67CMHS_cjs.hasTerminalSpend(v) && !v.isSwept);
4663
4749
  const value = spendable.reduce((sum, v) => sum + v.value, 0);
4664
4750
  let recoverableCount = 0;
4665
4751
  let recoverableValue = 0;
@@ -4672,7 +4758,7 @@ var VtxoManager = class _VtxoManager {
4672
4758
  awaitingSweepCount = spendable.length;
4673
4759
  awaitingSweepValue = value;
4674
4760
  for (const v of spendable) {
4675
- const exp = chunkFNCQJLR2_cjs.toBatchExpiry(v);
4761
+ const exp = chunkAB67CMHS_cjs.toBatchExpiry(v);
4676
4762
  if (exp !== void 0 && (nextSweepEta === void 0 || exp < nextSweepEta)) {
4677
4763
  nextSweepEta = exp;
4678
4764
  }
@@ -4933,7 +5019,7 @@ var VtxoManager = class _VtxoManager {
4933
5019
  /** Decodes the boarding tapscript exit path to extract the CSV timelock. */
4934
5020
  getBoardingTimelock() {
4935
5021
  const wallet = this.getSweepWallet();
4936
- const exitScript = chunkFNCQJLR2_cjs.CSVMultisigTapscript.decode(
5022
+ const exitScript = chunkAB67CMHS_cjs.CSVMultisigTapscript.decode(
4937
5023
  base.hex.decode(wallet.boardingTapscript.exitScript)
4938
5024
  );
4939
5025
  return exitScript.params.timelock;
@@ -5064,8 +5150,8 @@ var VtxoManager = class _VtxoManager {
5064
5150
  * or doesn't carry the metadata.
5065
5151
  */
5066
5152
  extractSpentOutpoint(error) {
5067
- const ark = chunkFNCQJLR2_cjs.maybeArkError(error);
5068
- if (!chunkFNCQJLR2_cjs.isArkError(ark, chunkFNCQJLR2_cjs.ArkErrorName.VTXO_ALREADY_SPENT)) return void 0;
5153
+ const ark = chunkAB67CMHS_cjs.maybeArkError(error);
5154
+ if (!chunkAB67CMHS_cjs.isArkError(ark, chunkAB67CMHS_cjs.ArkErrorName.VTXO_ALREADY_SPENT)) return void 0;
5069
5155
  const raw = ark.metadata?.vtxo_outpoint;
5070
5156
  if (typeof raw !== "string") return void 0;
5071
5157
  const [txid, voutStr] = raw.split(":");
@@ -5255,7 +5341,7 @@ var VtxoManager = class _VtxoManager {
5255
5341
  if (filteredVtxos.length >= MAX_VTXOS_PER_SETTLEMENT) {
5256
5342
  break;
5257
5343
  }
5258
- const inputFee = estimator.evalOffchainInput(chunkFNCQJLR2_cjs.toOffchainInputFeeParams(v));
5344
+ const inputFee = estimator.evalOffchainInput(chunkAB67CMHS_cjs.toOffchainInputFeeParams(v));
5259
5345
  if (inputFee.satoshis >= v.value) {
5260
5346
  continue;
5261
5347
  }
@@ -5275,7 +5361,7 @@ var VtxoManager = class _VtxoManager {
5275
5361
  const arkAddress = await this.wallet.getAddress();
5276
5362
  const outputFee = estimator.evalOffchainOutput({
5277
5363
  amount: totalAmount,
5278
- script: base.hex.encode(chunkFNCQJLR2_cjs.ArkAddress.decode(arkAddress).pkScript)
5364
+ script: base.hex.encode(chunkAB67CMHS_cjs.ArkAddress.decode(arkAddress).pkScript)
5279
5365
  });
5280
5366
  totalAmount -= BigInt(outputFee.satoshis);
5281
5367
  if (totalAmount < dustAmount) return;
@@ -5355,7 +5441,7 @@ var ArkNote = class _ArkNote {
5355
5441
  this.value = value;
5356
5442
  this.HRP = HRP;
5357
5443
  const preimageHash = utils_js.sha256(this.preimage);
5358
- this.vtxoScript = new chunkFNCQJLR2_cjs.VtxoScript([noteTapscript(preimageHash)]);
5444
+ this.vtxoScript = new chunkAB67CMHS_cjs.VtxoScript([noteTapscript(preimageHash)]);
5359
5445
  const leaf = this.vtxoScript.leaves[0];
5360
5446
  this.txid = base.hex.encode(new Uint8Array(preimageHash).reverse());
5361
5447
  this.tapTree = this.vtxoScript.encode();
@@ -5522,7 +5608,7 @@ var ArkadeCash = class _ArkadeCash {
5522
5608
  const privateKey = data.slice(1, 33);
5523
5609
  const serverPubKey = data.slice(33, 65);
5524
5610
  const sequence = new DataView(data.buffer, data.byteOffset + 65, 4).getUint32(0, false);
5525
- const csvTimelock = chunkFNCQJLR2_cjs.sequenceToTimelock(sequence);
5611
+ const csvTimelock = chunkAB67CMHS_cjs.sequenceToTimelock(sequence);
5526
5612
  return new _ArkadeCash(privateKey, serverPubKey, csvTimelock, decoded.prefix);
5527
5613
  }
5528
5614
  toString() {
@@ -5530,7 +5616,7 @@ var ArkadeCash = class _ArkadeCash {
5530
5616
  data[0] = _ArkadeCash.Version;
5531
5617
  data.set(this._privateKey, 1);
5532
5618
  data.set(this._serverPubKey, 33);
5533
- const sequence = chunkFNCQJLR2_cjs.timelockToSequence(this.csvTimelock);
5619
+ const sequence = chunkAB67CMHS_cjs.timelockToSequence(this.csvTimelock);
5534
5620
  new DataView(data.buffer, data.byteOffset + 65, 4).setUint32(0, sequence, false);
5535
5621
  const words = base.bech32m.toWords(data);
5536
5622
  return base.bech32m.encode(this.hrp, words, 1023);
@@ -5539,7 +5625,7 @@ var ArkadeCash = class _ArkadeCash {
5539
5625
  return SingleKey.fromPrivateKey(this._privateKey);
5540
5626
  }
5541
5627
  get vtxoScript() {
5542
- return new chunkSF5NKAUA_cjs.DefaultVtxo.Script({
5628
+ return new chunkOL7V43WS_cjs.DefaultVtxo.Script({
5543
5629
  pubKey: this._publicKey,
5544
5630
  serverPubKey: this._serverPubKey,
5545
5631
  csvTimelock: this.csvTimelock
@@ -5800,7 +5886,7 @@ async function captureExitBranch(params) {
5800
5886
  const nonCommitment = ordered.filter((c) => chainTxTypeToChainedExit(c.type) !== 1 /* Commitment */).map((c) => c.txid);
5801
5887
  if (nonCommitment.length > 0) {
5802
5888
  for (const psbt of await resolver.getVirtualTxs(nonCommitment)) {
5803
- psbtByTxid.set(chunkFNCQJLR2_cjs.Transaction.fromPSBT(base.base64.decode(psbt)).id, psbt);
5889
+ psbtByTxid.set(chunkAB67CMHS_cjs.Transaction.fromPSBT(base.base64.decode(psbt)).id, psbt);
5804
5890
  }
5805
5891
  }
5806
5892
  }
@@ -5843,10 +5929,10 @@ var IndexerExitDataSource = class {
5843
5929
  while (hasMore) {
5844
5930
  const { chain: page, page: meta } = await this.indexer.getVtxoChain(
5845
5931
  { txid: vtxo.txid, vout: vtxo.vout },
5846
- { pageIndex, pageSize: chunkFNCQJLR2_cjs.DEFAULT_PAGE_SIZE }
5932
+ { pageIndex, pageSize: chunkAB67CMHS_cjs.DEFAULT_PAGE_SIZE }
5847
5933
  );
5848
5934
  chain.push(...page);
5849
- hasMore = meta ? page.length === chunkFNCQJLR2_cjs.DEFAULT_PAGE_SIZE : false;
5935
+ hasMore = meta ? page.length === chunkAB67CMHS_cjs.DEFAULT_PAGE_SIZE : false;
5850
5936
  pageIndex++;
5851
5937
  }
5852
5938
  return chain;
@@ -5858,12 +5944,12 @@ var IndexerExitDataSource = class {
5858
5944
  while (hasMore) {
5859
5945
  const { txs, page } = await this.indexer.getVirtualTxs(txids, {
5860
5946
  pageIndex,
5861
- pageSize: chunkFNCQJLR2_cjs.DEFAULT_PAGE_SIZE
5947
+ pageSize: chunkAB67CMHS_cjs.DEFAULT_PAGE_SIZE
5862
5948
  });
5863
5949
  for (const psbt of txs) {
5864
- out.set(chunkFNCQJLR2_cjs.Transaction.fromPSBT(base.base64.decode(psbt)).id, psbt);
5950
+ out.set(chunkAB67CMHS_cjs.Transaction.fromPSBT(base.base64.decode(psbt)).id, psbt);
5865
5951
  }
5866
- hasMore = page ? txs.length === chunkFNCQJLR2_cjs.DEFAULT_PAGE_SIZE : false;
5952
+ hasMore = page ? txs.length === chunkAB67CMHS_cjs.DEFAULT_PAGE_SIZE : false;
5867
5953
  pageIndex++;
5868
5954
  }
5869
5955
  return out;
@@ -5884,7 +5970,7 @@ function chainedTxTypeToChainTxType(t) {
5884
5970
  }
5885
5971
  }
5886
5972
  function psbtInputTxids(psbtBase64) {
5887
- const tx = chunkFNCQJLR2_cjs.Transaction.fromPSBT(base.base64.decode(psbtBase64));
5973
+ const tx = chunkAB67CMHS_cjs.Transaction.fromPSBT(base.base64.decode(psbtBase64));
5888
5974
  const ids = [];
5889
5975
  for (let i = 0; i < tx.inputsLength; i++) {
5890
5976
  const txid = tx.getInput(i).txid;
@@ -6237,10 +6323,10 @@ async function resolveArkInfo(arkProvider, walletRepository) {
6237
6323
  try {
6238
6324
  info = await arkProvider.getInfo();
6239
6325
  } catch (err) {
6240
- if (!chunkFNCQJLR2_cjs.isRetryableProviderError(err)) throw err;
6326
+ if (!chunkAB67CMHS_cjs.isRetryableProviderError(err)) throw err;
6241
6327
  const snapshot = await loadArkInfoSnapshot(walletRepository);
6242
6328
  if (!snapshot) {
6243
- throw new chunkFNCQJLR2_cjs.ProviderUnavailableError(
6329
+ throw new chunkAB67CMHS_cjs.ProviderUnavailableError(
6244
6330
  "Arkade server info is unavailable and no cached snapshot exists",
6245
6331
  { cause: err }
6246
6332
  );
@@ -6623,7 +6709,7 @@ function collectArkTxidsNeedingCreatedAt(vtxos) {
6623
6709
  return [...txids];
6624
6710
  }
6625
6711
  async function buildTransactionHistory(vtxos, allBoardingTxs, commitmentsToIgnore, resolveTxCreatedAt) {
6626
- const fromOldestVtxo = vtxos.map(chunkFNCQJLR2_cjs.normalizeVtxo).sort((a, b) => a.createdAt.getTime() - b.createdAt.getTime());
6712
+ const fromOldestVtxo = vtxos.map(chunkAB67CMHS_cjs.normalizeVtxo).sort((a, b) => a.createdAt.getTime() - b.createdAt.getTime());
6627
6713
  const txidsNeedingCreatedAt = resolveTxCreatedAt ? collectArkTxidsNeedingCreatedAt(fromOldestVtxo) : [];
6628
6714
  const resolvedCreatedAt = resolveTxCreatedAt && txidsNeedingCreatedAt.length > 0 ? await resolveTxCreatedAt(txidsNeedingCreatedAt) : /* @__PURE__ */ new Map();
6629
6715
  const unmatchedSettledBoardingTxs = allBoardingTxs.filter(isSettledBoardingReceive).sort((a, b) => a.createdAt - b.createdAt);
@@ -6787,7 +6873,7 @@ var AssetManager = class extends ReadonlyAssetManager {
6787
6873
  const virtualCoins = await this.wallet.getSpendableVtxos({
6788
6874
  withRecoverable: false
6789
6875
  });
6790
- const controlAssetRef = params.controlAssetId ? chunk2JHN5RCY_cjs.AssetRef.fromId(chunk2JHN5RCY_cjs.AssetId.fromString(params.controlAssetId)) : null;
6876
+ const controlAssetRef = params.controlAssetId ? chunkLG5GY73A_cjs.AssetRef.fromId(chunkLG5GY73A_cjs.AssetId.fromString(params.controlAssetId)) : null;
6791
6877
  const coinSelection = selectVirtualCoins(virtualCoins, Number(this.wallet.dustAmount));
6792
6878
  let totalBtcSelected = 0n;
6793
6879
  const assetChanges = /* @__PURE__ */ new Map();
@@ -6800,8 +6886,8 @@ var AssetManager = class extends ReadonlyAssetManager {
6800
6886
  }
6801
6887
  }
6802
6888
  const groups = [];
6803
- const issuedAssetOutput = chunk2JHN5RCY_cjs.AssetOutput.create(0, params.amount);
6804
- const issuedAssetGroup = chunk2JHN5RCY_cjs.AssetGroup.create(
6889
+ const issuedAssetOutput = chunkLG5GY73A_cjs.AssetOutput.create(0, params.amount);
6890
+ const issuedAssetGroup = chunkLG5GY73A_cjs.AssetGroup.create(
6805
6891
  null,
6806
6892
  controlAssetRef,
6807
6893
  [],
@@ -6816,28 +6902,28 @@ var AssetManager = class extends ReadonlyAssetManager {
6816
6902
  for (const [inputIndex, assets] of assetInputs) {
6817
6903
  for (const asset of assets) {
6818
6904
  if (asset.assetId !== assetId) continue;
6819
- changeInputs.push(chunk2JHN5RCY_cjs.AssetInput.create(inputIndex, asset.amount));
6905
+ changeInputs.push(chunkLG5GY73A_cjs.AssetInput.create(inputIndex, asset.amount));
6820
6906
  }
6821
6907
  }
6822
6908
  groups.push(
6823
- chunk2JHN5RCY_cjs.AssetGroup.create(
6824
- chunk2JHN5RCY_cjs.AssetId.fromString(assetId),
6909
+ chunkLG5GY73A_cjs.AssetGroup.create(
6910
+ chunkLG5GY73A_cjs.AssetId.fromString(assetId),
6825
6911
  null,
6826
6912
  changeInputs,
6827
- [chunk2JHN5RCY_cjs.AssetOutput.create(0, amount)],
6913
+ [chunkLG5GY73A_cjs.AssetOutput.create(0, amount)],
6828
6914
  []
6829
6915
  )
6830
6916
  );
6831
6917
  }
6832
6918
  }
6833
6919
  const address = await this.wallet.getAddress();
6834
- const outputAddress = chunkFNCQJLR2_cjs.ArkAddress.decode(address);
6920
+ const outputAddress = chunkAB67CMHS_cjs.ArkAddress.decode(address);
6835
6921
  const outputs = [
6836
6922
  {
6837
6923
  script: outputAddress.pkScript,
6838
6924
  amount: BigInt(totalBtcSelected)
6839
6925
  },
6840
- Extension.create([chunk2JHN5RCY_cjs.Packet.create(groups)]).txOut()
6926
+ Extension.create([chunkLG5GY73A_cjs.Packet.create(groups)]).txOut()
6841
6927
  ];
6842
6928
  const { arkTxid } = await this.wallet.buildAndSubmitOffchainTx(
6843
6929
  coinSelection.inputs,
@@ -6845,7 +6931,7 @@ var AssetManager = class extends ReadonlyAssetManager {
6845
6931
  );
6846
6932
  return {
6847
6933
  arkTxId: arkTxid,
6848
- assetId: chunk2JHN5RCY_cjs.AssetId.create(arkTxid, 0).toString()
6934
+ assetId: chunkLG5GY73A_cjs.AssetId.create(arkTxid, 0).toString()
6849
6935
  };
6850
6936
  }
6851
6937
  /**
@@ -6917,16 +7003,16 @@ var AssetManager = class extends ReadonlyAssetManager {
6917
7003
  for (const [inputIndex, assets] of assetInputs) {
6918
7004
  for (const asset of assets) {
6919
7005
  if (asset.assetId !== params.assetId) continue;
6920
- reissueInputs.push(chunk2JHN5RCY_cjs.AssetInput.create(inputIndex, asset.amount));
7006
+ reissueInputs.push(chunkLG5GY73A_cjs.AssetInput.create(inputIndex, asset.amount));
6921
7007
  }
6922
7008
  }
6923
7009
  const totalAssetAmount = assetToReissueAmount + params.amount;
6924
- const reissueAssetIdObj = chunk2JHN5RCY_cjs.AssetId.fromString(params.assetId);
6925
- const reissueAssetGroup = chunk2JHN5RCY_cjs.AssetGroup.create(
7010
+ const reissueAssetIdObj = chunkLG5GY73A_cjs.AssetId.fromString(params.assetId);
7011
+ const reissueAssetGroup = chunkLG5GY73A_cjs.AssetGroup.create(
6926
7012
  reissueAssetIdObj,
6927
7013
  null,
6928
7014
  reissueInputs,
6929
- [chunk2JHN5RCY_cjs.AssetOutput.create(0, totalAssetAmount)],
7015
+ [chunkLG5GY73A_cjs.AssetOutput.create(0, totalAssetAmount)],
6930
7016
  []
6931
7017
  );
6932
7018
  const groups = [reissueAssetGroup];
@@ -6935,27 +7021,27 @@ var AssetManager = class extends ReadonlyAssetManager {
6935
7021
  for (const [inputIndex, assets] of assetInputs) {
6936
7022
  for (const asset of assets) {
6937
7023
  if (asset.assetId !== assetId) continue;
6938
- changeInputs.push(chunk2JHN5RCY_cjs.AssetInput.create(inputIndex, asset.amount));
7024
+ changeInputs.push(chunkLG5GY73A_cjs.AssetInput.create(inputIndex, asset.amount));
6939
7025
  }
6940
7026
  }
6941
7027
  groups.push(
6942
- chunk2JHN5RCY_cjs.AssetGroup.create(
6943
- chunk2JHN5RCY_cjs.AssetId.fromString(assetId),
7028
+ chunkLG5GY73A_cjs.AssetGroup.create(
7029
+ chunkLG5GY73A_cjs.AssetId.fromString(assetId),
6944
7030
  null,
6945
7031
  changeInputs,
6946
- [chunk2JHN5RCY_cjs.AssetOutput.create(0, amount)],
7032
+ [chunkLG5GY73A_cjs.AssetOutput.create(0, amount)],
6947
7033
  []
6948
7034
  )
6949
7035
  );
6950
7036
  }
6951
7037
  const address = await this.wallet.getAddress();
6952
- const outputAddress = chunkFNCQJLR2_cjs.ArkAddress.decode(address);
7038
+ const outputAddress = chunkAB67CMHS_cjs.ArkAddress.decode(address);
6953
7039
  const outputs = [
6954
7040
  {
6955
7041
  script: outputAddress.pkScript,
6956
7042
  amount: BigInt(totalBtcSelected)
6957
7043
  },
6958
- Extension.create([chunk2JHN5RCY_cjs.Packet.create(groups)]).txOut()
7044
+ Extension.create([chunkLG5GY73A_cjs.Packet.create(groups)]).txOut()
6959
7045
  ];
6960
7046
  const { arkTxid } = await this.wallet.buildAndSubmitOffchainTx(selectedCoins, outputs);
6961
7047
  return arkTxid;
@@ -7022,27 +7108,27 @@ var AssetManager = class extends ReadonlyAssetManager {
7022
7108
  for (const [inputIndex, assets] of assetInputs) {
7023
7109
  for (const asset of assets) {
7024
7110
  if (asset.assetId !== assetId) continue;
7025
- changeInputs.push(chunk2JHN5RCY_cjs.AssetInput.create(inputIndex, asset.amount));
7111
+ changeInputs.push(chunkLG5GY73A_cjs.AssetInput.create(inputIndex, asset.amount));
7026
7112
  }
7027
7113
  }
7028
7114
  groups.push(
7029
- chunk2JHN5RCY_cjs.AssetGroup.create(
7030
- chunk2JHN5RCY_cjs.AssetId.fromString(assetId),
7115
+ chunkLG5GY73A_cjs.AssetGroup.create(
7116
+ chunkLG5GY73A_cjs.AssetId.fromString(assetId),
7031
7117
  null,
7032
7118
  changeInputs,
7033
- amount > 0n ? [chunk2JHN5RCY_cjs.AssetOutput.create(0, amount)] : [],
7119
+ amount > 0n ? [chunkLG5GY73A_cjs.AssetOutput.create(0, amount)] : [],
7034
7120
  []
7035
7121
  )
7036
7122
  );
7037
7123
  }
7038
7124
  const address = await this.wallet.getAddress();
7039
- const outputAddress = chunkFNCQJLR2_cjs.ArkAddress.decode(address);
7125
+ const outputAddress = chunkAB67CMHS_cjs.ArkAddress.decode(address);
7040
7126
  const outputs = [
7041
7127
  {
7042
7128
  script: outputAddress.pkScript,
7043
7129
  amount: BigInt(totalBtcSelected)
7044
7130
  },
7045
- Extension.create([chunk2JHN5RCY_cjs.Packet.create(groups)]).txOut()
7131
+ Extension.create([chunkLG5GY73A_cjs.Packet.create(groups)]).txOut()
7046
7132
  ];
7047
7133
  const { arkTxid } = await this.wallet.buildAndSubmitOffchainTx(selectedCoins, outputs);
7048
7134
  return arkTxid;
@@ -7067,7 +7153,7 @@ function castMetadata(metadata) {
7067
7153
  } else {
7068
7154
  throw new Error("Invalid metadata value type");
7069
7155
  }
7070
- md.push(chunk2JHN5RCY_cjs.Metadata.create(textEncoder.encode(key), valueBytes));
7156
+ md.push(chunkLG5GY73A_cjs.Metadata.create(textEncoder.encode(key), valueBytes));
7071
7157
  }
7072
7158
  return md;
7073
7159
  }
@@ -7088,10 +7174,10 @@ var DelegateManagerImpl = class {
7088
7174
  if (vtxos.length === 0) {
7089
7175
  return { delegated: [], failed: [] };
7090
7176
  }
7091
- const destinationScript = chunkFNCQJLR2_cjs.ArkAddress.decode(destination).pkScript;
7177
+ const destinationScript = chunkAB67CMHS_cjs.ArkAddress.decode(destination).pkScript;
7092
7178
  const arkInfo = await this.arkInfoProvider.getInfo();
7093
7179
  const delegateInfo = await this.delegateProvider.getDelegateInfo();
7094
- const eligible = vtxos.map(chunkFNCQJLR2_cjs.normalizeVtxo).filter(
7180
+ const eligible = vtxos.map(chunkAB67CMHS_cjs.normalizeVtxo).filter(
7095
7181
  (v) => isAnnotated(v) && findDelegateTapLeaf(v, delegateInfo.pubkey) !== void 0
7096
7182
  );
7097
7183
  if (eligible.length === 0) {
@@ -7120,11 +7206,11 @@ var DelegateManagerImpl = class {
7120
7206
  const groupByExpiry = /* @__PURE__ */ new Map();
7121
7207
  let recoverableVtxos = [];
7122
7208
  for (const vtxo of eligible) {
7123
- if (chunkFNCQJLR2_cjs.canRecoverOnchain(vtxo, now)) {
7209
+ if (chunkAB67CMHS_cjs.canRecoverOnchain(vtxo, now)) {
7124
7210
  recoverableVtxos.push(vtxo);
7125
7211
  continue;
7126
7212
  }
7127
- const expiry = chunkFNCQJLR2_cjs.toBatchExpiry(vtxo);
7213
+ const expiry = chunkAB67CMHS_cjs.toBatchExpiry(vtxo);
7128
7214
  if (!expiry) continue;
7129
7215
  const dayKey = getDayTimestamp(expiry);
7130
7216
  groupByExpiry.set(dayKey, [...groupByExpiry.get(dayKey) ?? [], vtxo]);
@@ -7189,7 +7275,7 @@ async function delegate(identity, delegateProvider, arkInfo, delegateInfo, vtxos
7189
7275
  }
7190
7276
  if (!delegateAt) {
7191
7277
  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);
7278
+ const expiryTimestamp = vtxos.filter((coin) => !chunkAB67CMHS_cjs.canRecoverOnchain(coin, now) && chunkAB67CMHS_cjs.toBatchExpiry(coin)).reduce((min, coin) => Math.min(min, chunkAB67CMHS_cjs.toBatchExpiry(coin)), Number.MAX_SAFE_INTEGER);
7193
7279
  if (!expiryTimestamp || expiryTimestamp === Number.MAX_SAFE_INTEGER) {
7194
7280
  delegateAt = new Date(Date.now() + 1 * 60 * 1e3);
7195
7281
  } else {
@@ -7218,7 +7304,7 @@ async function delegate(identity, delegateProvider, arkInfo, delegateInfo, vtxos
7218
7304
  let amount = 0n;
7219
7305
  for (const coin of vtxos) {
7220
7306
  const inputFee = estimator.evalOffchainInput({
7221
- ...chunkFNCQJLR2_cjs.toOffchainInputFeeParams(coin),
7307
+ ...chunkAB67CMHS_cjs.toOffchainInputFeeParams(coin),
7222
7308
  type: "vtxo"
7223
7309
  });
7224
7310
  if (inputFee.value >= coin.value) {
@@ -7232,7 +7318,7 @@ async function delegate(identity, delegateProvider, arkInfo, delegateInfo, vtxos
7232
7318
  const delegateFee = BigInt(Number(fee));
7233
7319
  if (delegateFee > 0n) {
7234
7320
  outputs.push({
7235
- script: chunkFNCQJLR2_cjs.ArkAddress.decode(delegateAddress).pkScript,
7321
+ script: chunkAB67CMHS_cjs.ArkAddress.decode(delegateAddress).pkScript,
7236
7322
  amount: delegateFee
7237
7323
  });
7238
7324
  }
@@ -7265,10 +7351,10 @@ async function delegate(identity, delegateProvider, arkInfo, delegateInfo, vtxos
7265
7351
  destinationScript
7266
7352
  );
7267
7353
  const forfeitOutputScript = btcSigner.OutScript.encode(
7268
- btcSigner.Address(chunkFNCQJLR2_cjs.getNetwork(network)).decode(forfeitAddress)
7354
+ btcSigner.Address(chunkAB67CMHS_cjs.getNetwork(network)).decode(forfeitAddress)
7269
7355
  );
7270
7356
  const forfeits = await Promise.all(
7271
- vtxos.filter((v) => !chunkFNCQJLR2_cjs.canRecoverOnchain(v, { timestamp: /* @__PURE__ */ new Date() })).map(async (coin) => {
7357
+ vtxos.filter((v) => !chunkAB67CMHS_cjs.canRecoverOnchain(v, { timestamp: /* @__PURE__ */ new Date() })).map(async (coin) => {
7272
7358
  const forfeit = await makeDelegateForfeitTx(
7273
7359
  coin,
7274
7360
  dust,
@@ -7293,7 +7379,7 @@ async function makeDelegateForfeitTx(input, connectorAmount, delegatePubkey, for
7293
7379
  index: input.vout,
7294
7380
  witnessUtxo: {
7295
7381
  amount: BigInt(input.value),
7296
- script: chunkFNCQJLR2_cjs.VtxoScript.decode(input.tapTree).pkScript
7382
+ script: chunkAB67CMHS_cjs.VtxoScript.decode(input.tapTree).pkScript
7297
7383
  },
7298
7384
  sighashType: btcSigner.SigHash.ALL_ANYONECANPAY,
7299
7385
  tapLeafScript: [delegateTapLeaf]
@@ -7351,7 +7437,7 @@ async function makeSignedDelegateIntent(identity, coins, outputs, onchainOutputs
7351
7437
  expire_at: 0,
7352
7438
  cosigners_public_keys: cosignerPubKeys
7353
7439
  };
7354
- const proof = chunkFNCQJLR2_cjs.Intent.create(message, coins, outputs);
7440
+ const proof = chunkAB67CMHS_cjs.Intent.create(message, coins, outputs);
7355
7441
  const signedProof = await identity.sign(proof);
7356
7442
  return {
7357
7443
  proof: base.base64.encode(signedProof.toPSBT()),
@@ -7369,10 +7455,10 @@ function getDayTimestamp(timestamp) {
7369
7455
  function findDelegateTapLeaf(vtxo, delegatePubkey) {
7370
7456
  if (!vtxo.tapTree) return void 0;
7371
7457
  const pk = delegatePubkey.length === 66 ? delegatePubkey.slice(2) : delegatePubkey;
7372
- const vtxoScript = chunkFNCQJLR2_cjs.VtxoScript.decode(vtxo.tapTree);
7458
+ const vtxoScript = chunkAB67CMHS_cjs.VtxoScript.decode(vtxo.tapTree);
7373
7459
  return vtxoScript.leaves.find((tapLeaf) => {
7374
- const arkTapscript = chunkFNCQJLR2_cjs.decodeTapscript(chunkFNCQJLR2_cjs.scriptFromTapLeafScript(tapLeaf));
7375
- if (!chunkFNCQJLR2_cjs.MultisigTapscript.is(arkTapscript)) return false;
7460
+ const arkTapscript = chunkAB67CMHS_cjs.decodeTapscript(chunkAB67CMHS_cjs.scriptFromTapLeafScript(tapLeaf));
7461
+ if (!chunkAB67CMHS_cjs.MultisigTapscript.is(arkTapscript)) return false;
7376
7462
  return arkTapscript.params.pubkeys.map(base.hex.encode).includes(pk);
7377
7463
  });
7378
7464
  }
@@ -7560,7 +7646,7 @@ async function closeDatabase(dbName) {
7560
7646
  return true;
7561
7647
  }
7562
7648
  function scriptFromArkAddress(address) {
7563
- return base.hex.encode(chunkFNCQJLR2_cjs.ArkAddress.decode(address).pkScript);
7649
+ return base.hex.encode(chunkAB67CMHS_cjs.ArkAddress.decode(address).pkScript);
7564
7650
  }
7565
7651
 
7566
7652
  // src/repositories/indexedDB/schema.ts
@@ -8057,7 +8143,7 @@ function validateVtxosForScript(vtxos, script, context) {
8057
8143
  }
8058
8144
  async function getVtxosForContract(repo, contract) {
8059
8145
  const vtxos = repo.getVtxosForScript ? await repo.getVtxosForScript(contract.script) : filterVtxosForScript(await repo.getVtxos(contract.address), contract.script);
8060
- return vtxos.map(chunkFNCQJLR2_cjs.normalizeVtxo);
8146
+ return vtxos.map(chunkAB67CMHS_cjs.normalizeVtxo);
8061
8147
  }
8062
8148
  async function saveVtxosForContract(repo, contract, vtxos) {
8063
8149
  if (repo.saveVtxosForScript) {
@@ -8199,7 +8285,7 @@ function decodeArkContract(encoded) {
8199
8285
  }
8200
8286
  function contractFromArkContract(encoded, options = {}) {
8201
8287
  const parsed = decodeArkContract(encoded);
8202
- const handler = chunkSF5NKAUA_cjs.contractHandlers.get(parsed.type);
8288
+ const handler = chunkOL7V43WS_cjs.contractHandlers.get(parsed.type);
8203
8289
  if (!handler) {
8204
8290
  throw new Error(`No handler registered for contract type '${parsed.type}'`);
8205
8291
  }
@@ -8213,9 +8299,9 @@ function contractFromArkContract(encoded, options = {}) {
8213
8299
  metadata: options.metadata
8214
8300
  };
8215
8301
  }
8216
- function contractFromArkContractWithAddress(encoded, serverPubKey, addressPrefix = chunkFNCQJLR2_cjs.DEFAULT_NETWORK.hrp, options = {}) {
8302
+ function contractFromArkContractWithAddress(encoded, serverPubKey, addressPrefix = chunkAB67CMHS_cjs.DEFAULT_NETWORK.hrp, options = {}) {
8217
8303
  const parsed = decodeArkContract(encoded);
8218
- const handler = chunkSF5NKAUA_cjs.contractHandlers.getOrThrow(parsed.type);
8304
+ const handler = chunkOL7V43WS_cjs.contractHandlers.getOrThrow(parsed.type);
8219
8305
  const params = parsed.data;
8220
8306
  const vtxoScript = handler.createScript(params);
8221
8307
  return {
@@ -8469,9 +8555,9 @@ var ContractWatcher = class {
8469
8555
  this.connectionState = "connected";
8470
8556
  this.reconnectAttempts = 0;
8471
8557
  this.listenLoop().catch((e) => {
8472
- if (chunkFNCQJLR2_cjs.isEventSourceError(e)) {
8558
+ if (chunkAB67CMHS_cjs.isEventSourceError(e)) {
8473
8559
  console.debug("ContractWatcher subscription disconnected; reconnecting");
8474
- } else if (!chunkFNCQJLR2_cjs.isEventSourceUnavailableError(e)) {
8560
+ } else if (!chunkAB67CMHS_cjs.isEventSourceUnavailableError(e)) {
8475
8561
  console.error(e);
8476
8562
  }
8477
8563
  this.connectionState = "disconnected";
@@ -8483,7 +8569,7 @@ var ContractWatcher = class {
8483
8569
  this.scheduleReconnect();
8484
8570
  });
8485
8571
  } catch (error) {
8486
- if (!chunkFNCQJLR2_cjs.isEventSourceUnavailableError(error)) {
8572
+ if (!chunkAB67CMHS_cjs.isEventSourceUnavailableError(error)) {
8487
8573
  console.error("ContractWatcher connection failed:", error);
8488
8574
  }
8489
8575
  this.connectionState = "disconnected";
@@ -8509,7 +8595,7 @@ var ContractWatcher = class {
8509
8595
  * slower; what it loses is push latency.
8510
8596
  */
8511
8597
  reportEventSourceUnavailable(error) {
8512
- if (!chunkFNCQJLR2_cjs.isEventSourceUnavailableError(error)) return false;
8598
+ if (!chunkAB67CMHS_cjs.isEventSourceUnavailableError(error)) return false;
8513
8599
  if (!this.eventSourceReported) {
8514
8600
  this.eventSourceReported = true;
8515
8601
  console.warn(
@@ -8725,14 +8811,14 @@ var ContractWatcher = class {
8725
8811
  const timestamp = Date.now();
8726
8812
  if (update.newVtxos?.length) {
8727
8813
  this.processSubscriptionVtxos(
8728
- update.newVtxos.map(chunkFNCQJLR2_cjs.normalizeVtxo),
8814
+ update.newVtxos.map(chunkAB67CMHS_cjs.normalizeVtxo),
8729
8815
  "vtxo_received",
8730
8816
  timestamp
8731
8817
  );
8732
8818
  }
8733
8819
  if (update.spentVtxos?.length) {
8734
8820
  this.processSubscriptionVtxos(
8735
- update.spentVtxos.map(chunkFNCQJLR2_cjs.normalizeVtxo),
8821
+ update.spentVtxos.map(chunkAB67CMHS_cjs.normalizeVtxo),
8736
8822
  "vtxo_spent",
8737
8823
  timestamp
8738
8824
  );
@@ -8865,7 +8951,7 @@ async function reconcileIntents(deps) {
8865
8951
  let vtxosByOutpoint = /* @__PURE__ */ new Map();
8866
8952
  if (outpoints.length > 0) {
8867
8953
  try {
8868
- const { vtxos } = await chunkFNCQJLR2_cjs.getNormalizedVtxos(deps.indexerProvider, { outpoints });
8954
+ const { vtxos } = await chunkAB67CMHS_cjs.getNormalizedVtxos(deps.indexerProvider, { outpoints });
8869
8955
  vtxosByOutpoint = new Map(vtxos.map((v) => [outpointKey(v), v]));
8870
8956
  } catch (e) {
8871
8957
  console.error("reconcileIntents: failed to fetch input VTXO state", e);
@@ -9039,7 +9125,7 @@ var ContractManager = class _ContractManager {
9039
9125
  await this.reconcileWatched();
9040
9126
  this.markSyncOnline();
9041
9127
  } catch (err) {
9042
- if (!chunkFNCQJLR2_cjs.isRetryableProviderError(err)) throw err;
9128
+ if (!chunkAB67CMHS_cjs.isRetryableProviderError(err)) throw err;
9043
9129
  this.markSyncDegraded(err);
9044
9130
  }
9045
9131
  this.initialized = true;
@@ -9171,7 +9257,7 @@ var ContractManager = class _ContractManager {
9171
9257
  const from = Math.max(0, watermark - lookAhead.size);
9172
9258
  const to = watermark + lookAhead.size;
9173
9259
  const deps = lookAhead.candidateDeps();
9174
- const handlers = chunkSF5NKAUA_cjs.contractHandlers.getRegisteredTypes().map((t) => chunkSF5NKAUA_cjs.contractHandlers.get(t)).filter(hasCandidates);
9260
+ const handlers = chunkOL7V43WS_cjs.contractHandlers.getRegisteredTypes().map((t) => chunkOL7V43WS_cjs.contractHandlers.get(t)).filter(hasCandidates);
9175
9261
  const band = /* @__PURE__ */ new Map();
9176
9262
  for (let index = from; index <= to; index++) {
9177
9263
  const descriptor = lookAhead.materialize(index);
@@ -9182,7 +9268,7 @@ var ContractManager = class _ContractManager {
9182
9268
  index,
9183
9269
  params: {
9184
9270
  ...candidate,
9185
- ...chunkSF5NKAUA_cjs.speculativeReceiveMetadata(descriptor)
9271
+ ...chunkOL7V43WS_cjs.speculativeReceiveMetadata(descriptor)
9186
9272
  }
9187
9273
  });
9188
9274
  }
@@ -9244,7 +9330,7 @@ var ContractManager = class _ContractManager {
9244
9330
  });
9245
9331
  for (const entry of pending) entry.catchUpPending = false;
9246
9332
  } catch (err) {
9247
- if (!chunkFNCQJLR2_cjs.isRetryableProviderError(err)) throw err;
9333
+ if (!chunkAB67CMHS_cjs.isRetryableProviderError(err)) throw err;
9248
9334
  this.markSyncDegraded(err);
9249
9335
  }
9250
9336
  }
@@ -9294,7 +9380,7 @@ var ContractManager = class _ContractManager {
9294
9380
  await this.fetchContractVxosFromIndexer([contract]);
9295
9381
  this.markSyncOnline();
9296
9382
  } catch (err) {
9297
- if (!chunkFNCQJLR2_cjs.isRetryableProviderError(err)) throw err;
9383
+ if (!chunkAB67CMHS_cjs.isRetryableProviderError(err)) throw err;
9298
9384
  this.markSyncDegraded(err);
9299
9385
  }
9300
9386
  await this.watcher.addContract(contract);
@@ -9331,7 +9417,7 @@ var ContractManager = class _ContractManager {
9331
9417
  return result;
9332
9418
  }
9333
9419
  async upsertContractRow(params) {
9334
- const handler = chunkSF5NKAUA_cjs.contractHandlers.get(params.type);
9420
+ const handler = chunkOL7V43WS_cjs.contractHandlers.get(params.type);
9335
9421
  if (!handler) {
9336
9422
  throw new Error(`No handler registered for contract type '${params.type}'`);
9337
9423
  }
@@ -9431,7 +9517,7 @@ var ContractManager = class _ContractManager {
9431
9517
  `scanContracts: batchSize must be a positive integer (got ${String(opts.batchSize)})`
9432
9518
  );
9433
9519
  }
9434
- const registered = chunkSF5NKAUA_cjs.contractHandlers.getRegisteredTypes().map((t) => chunkSF5NKAUA_cjs.contractHandlers.get(t)).filter(isDiscoverable);
9520
+ const registered = chunkOL7V43WS_cjs.contractHandlers.getRegisteredTypes().map((t) => chunkOL7V43WS_cjs.contractHandlers.get(t)).filter(isDiscoverable);
9435
9521
  const discoverables = [
9436
9522
  ...registered.filter((h) => h.type === "boarding"),
9437
9523
  ...registered.filter((h) => h.type !== "boarding")
@@ -9566,7 +9652,7 @@ var ContractManager = class _ContractManager {
9566
9652
  await this.syncContracts({ contracts, pageSize });
9567
9653
  this.markSyncOnline();
9568
9654
  } catch (err) {
9569
- if (!chunkFNCQJLR2_cjs.isRetryableProviderError(err)) throw err;
9655
+ if (!chunkAB67CMHS_cjs.isRetryableProviderError(err)) throw err;
9570
9656
  this.markSyncDegraded(err);
9571
9657
  }
9572
9658
  const vtxos = await this.getVtxosForContracts(contracts);
@@ -9587,7 +9673,7 @@ var ContractManager = class _ContractManager {
9587
9673
  }
9588
9674
  const tapscriptCache = tapscripts ?? /* @__PURE__ */ new Map();
9589
9675
  return vtxos.map(
9590
- (vtxo) => extendVirtualCoinForContract(chunkFNCQJLR2_cjs.normalizeVtxo(vtxo), byScript, tapscriptCache)
9676
+ (vtxo) => extendVirtualCoinForContract(chunkAB67CMHS_cjs.normalizeVtxo(vtxo), byScript, tapscriptCache)
9591
9677
  );
9592
9678
  }
9593
9679
  /** @inheritdoc */
@@ -9631,14 +9717,14 @@ var ContractManager = class _ContractManager {
9631
9717
  const byScript = new Map(contracts.map((contract) => [contract.script, contract]));
9632
9718
  const asking = vtxos.filter((vtxo) => {
9633
9719
  const contract = byScript.get(vtxo.script);
9634
- return contract !== void 0 && chunkSF5NKAUA_cjs.contractHandlers.get(contract.type)?.assertSpendableNow !== void 0;
9720
+ return contract !== void 0 && chunkOL7V43WS_cjs.contractHandlers.get(contract.type)?.assertSpendableNow !== void 0;
9635
9721
  });
9636
9722
  if (asking.length === 0) return refused;
9637
9723
  const tip = await this.currentChainTip();
9638
9724
  const walletKey = await walletPubKey?.();
9639
9725
  for (const vtxo of asking) {
9640
9726
  const contract = byScript.get(vtxo.script);
9641
- const handler = chunkSF5NKAUA_cjs.contractHandlers.get(contract.type);
9727
+ const handler = chunkOL7V43WS_cjs.contractHandlers.get(contract.type);
9642
9728
  if (!handler?.assertSpendableNow) continue;
9643
9729
  const context = {
9644
9730
  collaborative: true,
@@ -9653,7 +9739,7 @@ var ContractManager = class _ContractManager {
9653
9739
  // the next handler to answer a CSV question would meet a
9654
9740
  // TypeError instead of a `false`. Carry the coin only when it
9655
9741
  // really is one.
9656
- vtxo: chunkFNCQJLR2_cjs.isVirtualCoin(vtxo) && "status" in vtxo ? vtxo : void 0
9742
+ vtxo: chunkAB67CMHS_cjs.isVirtualCoin(vtxo) && "status" in vtxo ? vtxo : void 0
9657
9743
  };
9658
9744
  try {
9659
9745
  await handler.assertSpendableNow(
@@ -9809,7 +9895,7 @@ var ContractManager = class _ContractManager {
9809
9895
  const { contractScript, collaborative = true, walletPubKey, vtxo } = options;
9810
9896
  const [contract] = await this.getContracts({ script: contractScript });
9811
9897
  if (!contract) return [];
9812
- const handler = chunkSF5NKAUA_cjs.contractHandlers.get(contract.type);
9898
+ const handler = chunkOL7V43WS_cjs.contractHandlers.get(contract.type);
9813
9899
  if (!handler) return [];
9814
9900
  const script = handler.createScript(contract.params);
9815
9901
  const tip = await this.currentChainTip();
@@ -9837,7 +9923,7 @@ var ContractManager = class _ContractManager {
9837
9923
  const { contractScript, collaborative = true, walletPubKey } = options;
9838
9924
  const [contract] = await this.getContracts({ script: contractScript });
9839
9925
  if (!contract) return [];
9840
- const handler = chunkSF5NKAUA_cjs.contractHandlers.get(contract.type);
9926
+ const handler = chunkOL7V43WS_cjs.contractHandlers.get(contract.type);
9841
9927
  if (!handler) return [];
9842
9928
  const script = handler.createScript(contract.params);
9843
9929
  const context = {
@@ -9893,7 +9979,7 @@ var ContractManager = class _ContractManager {
9893
9979
  }
9894
9980
  async refreshOutpoints(outpoints) {
9895
9981
  if (outpoints.length === 0) return;
9896
- const { vtxos } = await chunkFNCQJLR2_cjs.getNormalizedVtxos(this.config.indexerProvider, {
9982
+ const { vtxos } = await chunkAB67CMHS_cjs.getNormalizedVtxos(this.config.indexerProvider, {
9897
9983
  outpoints
9898
9984
  });
9899
9985
  if (vtxos.length === 0) return;
@@ -9972,7 +10058,7 @@ var ContractManager = class _ContractManager {
9972
10058
  break;
9973
10059
  }
9974
10060
  } catch (err) {
9975
- if (!chunkFNCQJLR2_cjs.isRetryableProviderError(err)) throw err;
10061
+ if (!chunkAB67CMHS_cjs.isRetryableProviderError(err)) throw err;
9976
10062
  this.markSyncDegraded(err);
9977
10063
  }
9978
10064
  this.emitEvent(event);
@@ -10051,7 +10137,7 @@ var ContractManager = class _ContractManager {
10051
10137
  */
10052
10138
  async reconcilePendingFrontier(contracts) {
10053
10139
  const scriptToContract = new Map(contracts.map((c) => [c.script, c]));
10054
- const vtxos = await chunkFNCQJLR2_cjs.getAllNormalizedVtxos(
10140
+ const vtxos = await chunkAB67CMHS_cjs.getAllNormalizedVtxos(
10055
10141
  this.config.indexerProvider,
10056
10142
  contracts.map((c) => c.script),
10057
10143
  { pendingOnly: true }
@@ -10134,7 +10220,7 @@ var ContractManager = class _ContractManager {
10134
10220
  }
10135
10221
  return result;
10136
10222
  }
10137
- async fetchContractVtxosBulk(contracts, pageSize = chunkFNCQJLR2_cjs.DEFAULT_PAGE_SIZE, syncWindow) {
10223
+ async fetchContractVtxosBulk(contracts, pageSize = chunkAB67CMHS_cjs.DEFAULT_PAGE_SIZE, syncWindow) {
10138
10224
  if (contracts.length === 0) {
10139
10225
  return { vtxosByScript: /* @__PURE__ */ new Map(), promoted: /* @__PURE__ */ new Map() };
10140
10226
  }
@@ -10150,7 +10236,7 @@ var ContractManager = class _ContractManager {
10150
10236
  before: syncWindow.before
10151
10237
  }
10152
10238
  } : {};
10153
- const vtxos = await chunkFNCQJLR2_cjs.getAllNormalizedVtxos(
10239
+ const vtxos = await chunkAB67CMHS_cjs.getAllNormalizedVtxos(
10154
10240
  this.config.indexerProvider,
10155
10241
  contracts.map((c) => c.script),
10156
10242
  { ...windowOpts, pageSize }
@@ -10295,7 +10381,7 @@ var deserializeTapLeaf = (t) => {
10295
10381
  const s = base.hex.decode(t.s);
10296
10382
  return [cb, s];
10297
10383
  };
10298
- var deserializeVtxo = (o) => chunkFNCQJLR2_cjs.normalizeVtxo({
10384
+ var deserializeVtxo = (o) => chunkAB67CMHS_cjs.normalizeVtxo({
10299
10385
  ...o,
10300
10386
  createdAt: new Date(o.createdAt),
10301
10387
  tapTree: base.hex.decode(o.tapTree),
@@ -11336,7 +11422,7 @@ var HDDescriptorProvider = class _HDDescriptorProvider {
11336
11422
  */
11337
11423
  materializeDescriptorAt(index) {
11338
11424
  const descriptor = this.identity.descriptor;
11339
- const network = chunkSF5NKAUA_cjs.isMainnetDescriptor(descriptor) ? descriptorsScure.networks.bitcoin : descriptorsScure.networks.testnet;
11425
+ const network = chunkOL7V43WS_cjs.isMainnetDescriptor(descriptor) ? descriptorsScure.networks.bitcoin : descriptorsScure.networks.testnet;
11340
11426
  const expansion = descriptorsScure.expand({ descriptor, network, index });
11341
11427
  const keyInfo = expansion.expansionMap?.["@0"];
11342
11428
  if (!keyInfo?.keyExpression) {
@@ -11484,7 +11570,7 @@ var WalletReceiveRotator = class _WalletReceiveRotator {
11484
11570
  const provider = await resolveDescriptorProvider(config, setup.walletRepository);
11485
11571
  if (!provider) return void 0;
11486
11572
  const allowSilentFallback = (config.walletMode ?? "auto") === "auto";
11487
- const expectedContractType = setup.offchainTapscript instanceof chunkSF5NKAUA_cjs.DelegateVtxo.Script ? "delegate" : "default";
11573
+ const expectedContractType = setup.offchainTapscript instanceof chunkOL7V43WS_cjs.DelegateVtxo.Script ? "delegate" : "default";
11488
11574
  const factoryOpts = {
11489
11575
  walletRepository: setup.walletRepository,
11490
11576
  contractRepository: setup.contractRepository,
@@ -11683,7 +11769,7 @@ var WalletReceiveRotator = class _WalletReceiveRotator {
11683
11769
  };
11684
11770
  function deriveLeafPubkey(descriptor) {
11685
11771
  try {
11686
- return chunkSF5NKAUA_cjs.deriveDescriptorLeafPubKey(descriptor);
11772
+ return chunkOL7V43WS_cjs.deriveDescriptorLeafPubKey(descriptor);
11687
11773
  } catch (e) {
11688
11774
  throw new NonRangeableDescriptorError(
11689
11775
  "Cannot derive leaf pubkey: descriptor is not a materialized, parsable tr(...) shape.",
@@ -11695,7 +11781,7 @@ function buildReceiveContract(current, descriptor, hrp, tagSource) {
11695
11781
  const pubKey = deriveLeafPubkey(descriptor);
11696
11782
  const tapscript = rebuildTapscript(current, pubKey);
11697
11783
  const serverPubKey = tapscript.options.serverPubKey;
11698
- const csvTimelock = chunkFNCQJLR2_cjs.timelockToSequence(tapscript.options.csvTimelock).toString();
11784
+ const csvTimelock = chunkAB67CMHS_cjs.timelockToSequence(tapscript.options.csvTimelock).toString();
11699
11785
  const base$1 = {
11700
11786
  script: base.hex.encode(tapscript.pkScript),
11701
11787
  address: tapscript.address(hrp, serverPubKey).encode(),
@@ -11706,11 +11792,11 @@ function buildReceiveContract(current, descriptor, hrp, tagSource) {
11706
11792
  // index-0 key. Without it, spends produce unsigned PSBTs that the
11707
11793
  // server rejects with `INVALID_PSBT_INPUT (5): missing tapscript spend sig`.
11708
11794
  metadata: {
11709
- ...{ source: chunkSF5NKAUA_cjs.WALLET_RECEIVE_SOURCE },
11795
+ ...{ source: chunkOL7V43WS_cjs.WALLET_RECEIVE_SOURCE },
11710
11796
  signingDescriptor: descriptor
11711
11797
  }
11712
11798
  };
11713
- const params = tapscript instanceof chunkSF5NKAUA_cjs.DelegateVtxo.Script ? {
11799
+ const params = tapscript instanceof chunkOL7V43WS_cjs.DelegateVtxo.Script ? {
11714
11800
  ...base$1,
11715
11801
  type: "delegate",
11716
11802
  params: {
@@ -11731,10 +11817,10 @@ function buildReceiveContract(current, descriptor, hrp, tagSource) {
11731
11817
  return { tapscript, params };
11732
11818
  }
11733
11819
  function rebuildTapscript(current, pubKey) {
11734
- if (current instanceof chunkSF5NKAUA_cjs.DelegateVtxo.Script) {
11735
- return new chunkSF5NKAUA_cjs.DelegateVtxo.Script({ ...current.options, pubKey });
11820
+ if (current instanceof chunkOL7V43WS_cjs.DelegateVtxo.Script) {
11821
+ return new chunkOL7V43WS_cjs.DelegateVtxo.Script({ ...current.options, pubKey });
11736
11822
  }
11737
- return new chunkSF5NKAUA_cjs.DefaultVtxo.Script({ ...current.options, pubKey });
11823
+ return new chunkOL7V43WS_cjs.DefaultVtxo.Script({ ...current.options, pubKey });
11738
11824
  }
11739
11825
  async function pickActiveReceive(contractRepository, serverPubKey, expectedType) {
11740
11826
  const candidates = await contractRepository.getContracts({
@@ -11743,7 +11829,7 @@ async function pickActiveReceive(contractRepository, serverPubKey, expectedType)
11743
11829
  });
11744
11830
  const serverPubKeyHex = base.hex.encode(serverPubKey);
11745
11831
  const matching = candidates.filter(
11746
- (c) => c.params.serverPubKey === serverPubKeyHex && c.metadata?.source === chunkSF5NKAUA_cjs.WALLET_RECEIVE_SOURCE
11832
+ (c) => c.params.serverPubKey === serverPubKeyHex && c.metadata?.source === chunkOL7V43WS_cjs.WALLET_RECEIVE_SOURCE
11747
11833
  ).sort((a, b) => {
11748
11834
  if (b.createdAt !== a.createdAt) return b.createdAt - a.createdAt;
11749
11835
  return signingDescriptorIndex(b.metadata?.signingDescriptor) - signingDescriptorIndex(a.metadata?.signingDescriptor);
@@ -11786,6 +11872,8 @@ function computeOffchainBalance(vtxos, caps) {
11786
11872
  let settled = 0;
11787
11873
  let preconfirmed = 0;
11788
11874
  let available = 0;
11875
+ let gated = 0;
11876
+ let intentLocked = 0;
11789
11877
  let recoverable = 0;
11790
11878
  let pendingRecovery = 0;
11791
11879
  const owned = /* @__PURE__ */ new Map();
@@ -11796,23 +11884,27 @@ function computeOffchainBalance(vtxos, caps) {
11796
11884
  }
11797
11885
  };
11798
11886
  for (const vtxo of vtxos) {
11799
- if (chunkFNCQJLR2_cjs.hasTerminalSpend(vtxo)) continue;
11887
+ if (chunkAB67CMHS_cjs.hasTerminalSpend(vtxo)) continue;
11800
11888
  addAssets(owned, vtxo);
11801
11889
  if (isPendingRecovery(vtxo)) {
11802
11890
  pendingRecovery += vtxo.value;
11803
11891
  continue;
11804
11892
  }
11805
- if (chunkFNCQJLR2_cjs.canRecoverOnchain(vtxo, now)) {
11893
+ if (chunkAB67CMHS_cjs.canRecoverOnchain(vtxo, now)) {
11806
11894
  recoverable += vtxo.value;
11807
11895
  continue;
11808
11896
  }
11809
- if (!chunkFNCQJLR2_cjs.canSpendOffchain(vtxo, now)) continue;
11897
+ if (!chunkAB67CMHS_cjs.canSpendOffchain(vtxo, now)) continue;
11810
11898
  if (vtxo.isPreconfirmed) {
11811
11899
  preconfirmed += vtxo.value;
11812
11900
  } else {
11813
11901
  settled += vtxo.value;
11814
11902
  }
11815
- if (isGenericallySpendable(vtxo) && isUnlocked(vtxo)) {
11903
+ if (!isGenericallySpendable(vtxo)) {
11904
+ gated += vtxo.value;
11905
+ } else if (!isUnlocked(vtxo)) {
11906
+ intentLocked += vtxo.value;
11907
+ } else {
11816
11908
  available += vtxo.value;
11817
11909
  addAssets(spendable, vtxo);
11818
11910
  }
@@ -11822,6 +11914,8 @@ function computeOffchainBalance(vtxos, caps) {
11822
11914
  settled,
11823
11915
  preconfirmed,
11824
11916
  available,
11917
+ gated,
11918
+ intentLocked,
11825
11919
  recoverable,
11826
11920
  pendingRecovery,
11827
11921
  total: settled + preconfirmed + recoverable + pendingRecovery,
@@ -11969,15 +12063,26 @@ var InputSignerRouter = class {
11969
12063
  };
11970
12064
 
11971
12065
  // src/wallet/wallet.ts
11972
- var getArkadeServerUrl = ({ arkServerUrl }) => arkServerUrl || chunkFNCQJLR2_cjs.DEFAULT_ARKADE_SERVER_URL;
12066
+ var getArkadeServerUrl = ({ arkServerUrl }) => arkServerUrl || chunkAB67CMHS_cjs.DEFAULT_ARKADE_SERVER_URL;
11973
12067
  function intentProofJobs(coins) {
11974
12068
  if (coins.length === 0) return [];
11975
12069
  const coinJobs = coins.map((coin, i) => ({
11976
12070
  index: i + 1,
11977
- lookupScript: chunkFNCQJLR2_cjs.VtxoScript.decode(coin.tapTree).pkScript
12071
+ lookupScript: chunkAB67CMHS_cjs.VtxoScript.decode(coin.tapTree).pkScript
11978
12072
  }));
11979
12073
  return [{ index: 0, lookupScript: coinJobs[0].lookupScript }, ...coinJobs];
11980
12074
  }
12075
+ function asSendParams(args) {
12076
+ const [first] = args;
12077
+ if (args.length === 1 && first && "recipients" in first) {
12078
+ const params = first;
12079
+ if (params.recipients.length === 0) {
12080
+ throw new Error("At least one receiver is required");
12081
+ }
12082
+ return params;
12083
+ }
12084
+ return { recipients: args };
12085
+ }
11981
12086
  function extractArkProviderUrl(provider) {
11982
12087
  const serverUrl = provider.serverUrl;
11983
12088
  return typeof serverUrl === "string" && serverUrl.length > 0 ? serverUrl : void 0;
@@ -12000,7 +12105,7 @@ function dedupeTimelocks(timelocks) {
12000
12105
  const seen = /* @__PURE__ */ new Set();
12001
12106
  const deduped = [];
12002
12107
  for (const timelock of timelocks) {
12003
- const sequence = chunkFNCQJLR2_cjs.timelockToSequence(timelock).toString();
12108
+ const sequence = chunkAB67CMHS_cjs.timelockToSequence(timelock).toString();
12004
12109
  if (seen.has(sequence)) continue;
12005
12110
  seen.add(sequence);
12006
12111
  deduped.push(timelock);
@@ -12017,7 +12122,7 @@ async function resolveBoardingBootTapscript(contractRepository, serverPubKey, ba
12017
12122
  state: "active"
12018
12123
  });
12019
12124
  const newest = candidates.filter(
12020
- (c) => c.params.serverPubKey === serverPubKeyHex && c.metadata?.source === chunkSF5NKAUA_cjs.WALLET_RECEIVE_SOURCE
12125
+ (c) => c.params.serverPubKey === serverPubKeyHex && c.metadata?.source === chunkOL7V43WS_cjs.WALLET_RECEIVE_SOURCE
12021
12126
  ).sort((a, b) => {
12022
12127
  if (b.createdAt !== a.createdAt) return b.createdAt - a.createdAt;
12023
12128
  return signingDescriptorIndex(b.metadata?.signingDescriptor) - signingDescriptorIndex(a.metadata?.signingDescriptor);
@@ -12025,7 +12130,7 @@ async function resolveBoardingBootTapscript(contractRepository, serverPubKey, ba
12025
12130
  if (!newest?.params.pubKey) return baseline;
12026
12131
  try {
12027
12132
  const pubKey = base.hex.decode(newest.params.pubKey);
12028
- return new chunkSF5NKAUA_cjs.DefaultVtxo.Script({ ...baseline.options, pubKey });
12133
+ return new chunkOL7V43WS_cjs.DefaultVtxo.Script({ ...baseline.options, pubKey });
12029
12134
  } catch (e) {
12030
12135
  console.warn("Skipping malformed boarding contract at boot", newest.script, e);
12031
12136
  return baseline;
@@ -12041,8 +12146,8 @@ function filterSnapshotVtxos(snapshot, filter, pendingSpendOutpoints) {
12041
12146
  if (pendingSpendOutpoints.has(`${vtxo.txid}:${vtxo.vout}`)) {
12042
12147
  return false;
12043
12148
  }
12044
- if (!chunkFNCQJLR2_cjs.hasTerminalSpend(vtxo)) {
12045
- if (!f.withRecoverable && chunkFNCQJLR2_cjs.canRecoverOnchain(vtxo, now)) {
12149
+ if (!chunkAB67CMHS_cjs.hasTerminalSpend(vtxo)) {
12150
+ if (!f.withRecoverable && chunkAB67CMHS_cjs.canRecoverOnchain(vtxo, now)) {
12046
12151
  return false;
12047
12152
  }
12048
12153
  return true;
@@ -12383,7 +12488,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
12383
12488
  */
12384
12489
  static async setupWalletConfig(config, pubKey) {
12385
12490
  const arkadeServerUrl = getArkadeServerUrl(config);
12386
- const arkProvider = config.arkProvider || new chunkFNCQJLR2_cjs.RestArkProvider(arkadeServerUrl);
12491
+ const arkProvider = config.arkProvider || new chunkAB67CMHS_cjs.RestArkProvider(arkadeServerUrl);
12387
12492
  let indexerProvider = config.indexerProvider;
12388
12493
  if (!indexerProvider) {
12389
12494
  let indexerUrl = config.indexerUrl;
@@ -12400,7 +12505,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
12400
12505
  indexerUrl = arkadeServerUrl;
12401
12506
  }
12402
12507
  }
12403
- indexerProvider = new chunk2JHN5RCY_cjs.RestIndexerProvider(indexerUrl);
12508
+ indexerProvider = new chunkLG5GY73A_cjs.RestIndexerProvider(indexerUrl);
12404
12509
  }
12405
12510
  const walletRepository = config.storage?.walletRepository ?? new IndexedDBWalletRepository();
12406
12511
  const contractRepository = config.storage?.contractRepository ?? new IndexedDBContractRepository();
@@ -12409,7 +12514,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
12409
12514
  source: serverInfoSource,
12410
12515
  lastOnlineAt: serverInfoLastOnlineAt
12411
12516
  } = await resolveArkInfo(arkProvider, walletRepository);
12412
- const network = chunkFNCQJLR2_cjs.getNetwork(info.network);
12517
+ const network = chunkAB67CMHS_cjs.getNetwork(info.network);
12413
12518
  if ("descriptor" in config.identity) {
12414
12519
  const descriptor = config.identity.descriptor;
12415
12520
  const identityIsMainnet = !descriptor.includes("tpub");
@@ -12456,11 +12561,11 @@ var ReadonlyWallet = class _ReadonlyWallet {
12456
12561
  serverPubKey,
12457
12562
  csvTimelock: exitTimelock
12458
12563
  };
12459
- const offchainTapscript = !delegatePubKey ? new chunkSF5NKAUA_cjs.DefaultVtxo.Script(offchainOptions) : new chunkSF5NKAUA_cjs.DelegateVtxo.Script({ ...offchainOptions, delegatePubKey });
12460
- const boardingTapscript = chunkSF5NKAUA_cjs.BoardingContractHandler.createScript({
12564
+ const offchainTapscript = !delegatePubKey ? new chunkOL7V43WS_cjs.DefaultVtxo.Script(offchainOptions) : new chunkOL7V43WS_cjs.DelegateVtxo.Script({ ...offchainOptions, delegatePubKey });
12565
+ const boardingTapscript = chunkOL7V43WS_cjs.BoardingContractHandler.createScript({
12461
12566
  pubKey: base.hex.encode(pubKey),
12462
12567
  serverPubKey: base.hex.encode(serverPubKey),
12463
- csvTimelock: chunkFNCQJLR2_cjs.timelockToSequence(boardingTimelock).toString()
12568
+ csvTimelock: chunkAB67CMHS_cjs.timelockToSequence(boardingTimelock).toString()
12464
12569
  });
12465
12570
  return {
12466
12571
  arkProvider,
@@ -12574,6 +12679,8 @@ var ReadonlyWallet = class _ReadonlyWallet {
12574
12679
  settled: offchain.settled,
12575
12680
  preconfirmed: offchain.preconfirmed,
12576
12681
  available: offchain.available,
12682
+ gated: offchain.gated,
12683
+ intentLocked: offchain.intentLocked,
12577
12684
  recoverable: offchain.recoverable,
12578
12685
  pendingRecovery: offchain.pendingRecovery,
12579
12686
  total: totalBoarding + offchain.total,
@@ -12755,7 +12862,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
12755
12862
  const response = await contractManager.getContractsWithVtxos();
12756
12863
  const allVtxos = response.flatMap((_) => _.vtxos);
12757
12864
  const { boardingTxs, commitmentsToIgnore } = await this.getBoardingTxs();
12758
- const resolveTxCreatedAt = (txids) => chunkFNCQJLR2_cjs.fetchVtxoCreatedAtByTxid(this.indexerProvider, txids);
12865
+ const resolveTxCreatedAt = (txids) => chunkAB67CMHS_cjs.fetchVtxoCreatedAtByTxid(this.indexerProvider, txids);
12759
12866
  return buildTransactionHistory(
12760
12867
  allVtxos,
12761
12868
  boardingTxs,
@@ -12849,7 +12956,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
12849
12956
  },
12850
12957
  isUnrolled: true,
12851
12958
  ...boardingFacts,
12852
- virtualStatus: chunkFNCQJLR2_cjs.toVirtualStatus(boardingFacts),
12959
+ virtualStatus: chunkAB67CMHS_cjs.toVirtualStatus(boardingFacts),
12853
12960
  spentBy: "",
12854
12961
  createdAt: tx.status.confirmed ? new Date(tx.status.block_time * 1e3) : /* @__PURE__ */ new Date(0),
12855
12962
  script: scriptHex
@@ -12905,9 +13012,9 @@ var ReadonlyWallet = class _ReadonlyWallet {
12905
13012
  async getBoardingTapscripts(allowedSigners) {
12906
13013
  const byScript = /* @__PURE__ */ new Map();
12907
13014
  const add = (s) => byScript.set(base.hex.encode(s.pkScript), s);
12908
- const boardingCsv = this.boardingTapscript.options.csvTimelock ?? chunkSF5NKAUA_cjs.DefaultVtxo.Script.DEFAULT_TIMELOCK;
13015
+ const boardingCsv = this.boardingTapscript.options.csvTimelock ?? chunkOL7V43WS_cjs.DefaultVtxo.Script.DEFAULT_TIMELOCK;
12909
13016
  add(
12910
- new chunkSF5NKAUA_cjs.DefaultVtxo.Script({
13017
+ new chunkOL7V43WS_cjs.DefaultVtxo.Script({
12911
13018
  pubKey: await this.identity.xOnlyPublicKey(),
12912
13019
  serverPubKey: this.boardingTapscript.options.serverPubKey,
12913
13020
  csvTimelock: boardingCsv
@@ -12922,7 +13029,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
12922
13029
  for (const c of boardingContracts) {
12923
13030
  if (!allowed.has(toXOnlySignerHex(c.params.serverPubKey))) continue;
12924
13031
  try {
12925
- add(chunkSF5NKAUA_cjs.BoardingContractHandler.createScript(c.params));
13032
+ add(chunkOL7V43WS_cjs.BoardingContractHandler.createScript(c.params));
12926
13033
  } catch (e) {
12927
13034
  console.warn("Skipping malformed boarding contract", c.script, e);
12928
13035
  }
@@ -12960,7 +13067,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
12960
13067
  // Per-row CSV delay decoded from THIS tapscript's exit leaf —
12961
13068
  // not the wallet's current boarding timelock, which a signer
12962
13069
  // rotation may have changed.
12963
- csvTimelock: chunkFNCQJLR2_cjs.CSVMultisigTapscript.decode(base.hex.decode(tapscript.exitScript)).params.timelock,
13070
+ csvTimelock: chunkAB67CMHS_cjs.CSVMultisigTapscript.decode(base.hex.decode(tapscript.exitScript)).params.timelock,
12964
13071
  coins: utxos
12965
13072
  });
12966
13073
  }
@@ -13093,7 +13200,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
13093
13200
  /** Fetch Arkade transaction ids that are still pending final settlement. */
13094
13201
  async fetchPendingTxs() {
13095
13202
  const scripts = await this.getWalletScripts();
13096
- const vtxos = await chunkFNCQJLR2_cjs.getAllNormalizedVtxos(this.indexerProvider, scripts);
13203
+ const vtxos = await chunkAB67CMHS_cjs.getAllNormalizedVtxos(this.indexerProvider, scripts);
13097
13204
  return vtxos.filter(
13098
13205
  (vtxo) => (vtxo.isSpent || vtxo.isPreconfirmed && !vtxo.isSwept) && vtxo.arkTxId !== void 0
13099
13206
  ).map((_) => _.arkTxId);
@@ -13124,7 +13231,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
13124
13231
  });
13125
13232
  for (const contract of contracts) {
13126
13233
  if (map.has(contract.script)) continue;
13127
- const handler = chunkSF5NKAUA_cjs.contractHandlers.get(contract.type);
13234
+ const handler = chunkOL7V43WS_cjs.contractHandlers.get(contract.type);
13128
13235
  if (handler) {
13129
13236
  const script = handler.createScript(contract.params);
13130
13237
  map.set(contract.script, script);
@@ -13236,7 +13343,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
13236
13343
  }
13237
13344
  });
13238
13345
  const baselinePubkey = await this.identity.xOnlyPublicKey();
13239
- const delegatePubKey = this.offchainTapscript instanceof chunkSF5NKAUA_cjs.DelegateVtxo.Script ? this.offchainTapscript.options.delegatePubKey : void 0;
13346
+ const delegatePubKey = this.offchainTapscript instanceof chunkOL7V43WS_cjs.DelegateVtxo.Script ? this.offchainTapscript.options.delegatePubKey : void 0;
13240
13347
  const baselineSigners = [
13241
13348
  this.offchainTapscript.options.serverPubKey,
13242
13349
  ...[...this._deprecatedSigners.keys()].map((h) => base.hex.decode(h))
@@ -13244,8 +13351,8 @@ var ReadonlyWallet = class _ReadonlyWallet {
13244
13351
  const seenBaselineScripts = /* @__PURE__ */ new Set();
13245
13352
  for (const serverPubKey of baselineSigners) {
13246
13353
  for (const csvTimelock of this.walletContractTimelocks) {
13247
- const csvTimelockStr = chunkFNCQJLR2_cjs.timelockToSequence(csvTimelock).toString();
13248
- const defaultScript = new chunkSF5NKAUA_cjs.DefaultVtxo.Script({
13354
+ const csvTimelockStr = chunkAB67CMHS_cjs.timelockToSequence(csvTimelock).toString();
13355
+ const defaultScript = new chunkOL7V43WS_cjs.DefaultVtxo.Script({
13249
13356
  pubKey: baselinePubkey,
13250
13357
  serverPubKey,
13251
13358
  csvTimelock
@@ -13266,7 +13373,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
13266
13373
  });
13267
13374
  }
13268
13375
  if (delegatePubKey) {
13269
- const delegateScript = new chunkSF5NKAUA_cjs.DelegateVtxo.Script({
13376
+ const delegateScript = new chunkOL7V43WS_cjs.DelegateVtxo.Script({
13270
13377
  pubKey: baselinePubkey,
13271
13378
  serverPubKey,
13272
13379
  delegatePubKey,
@@ -13290,9 +13397,9 @@ var ReadonlyWallet = class _ReadonlyWallet {
13290
13397
  }
13291
13398
  }
13292
13399
  }
13293
- const boardingCsvTimelock = this.boardingTapscript.options.csvTimelock ?? chunkSF5NKAUA_cjs.DefaultVtxo.Script.DEFAULT_TIMELOCK;
13400
+ const boardingCsvTimelock = this.boardingTapscript.options.csvTimelock ?? chunkOL7V43WS_cjs.DefaultVtxo.Script.DEFAULT_TIMELOCK;
13294
13401
  for (const serverPubKey of baselineSigners) {
13295
- const baselineBoarding = new chunkSF5NKAUA_cjs.DefaultVtxo.Script({
13402
+ const baselineBoarding = new chunkOL7V43WS_cjs.DefaultVtxo.Script({
13296
13403
  pubKey: baselinePubkey,
13297
13404
  serverPubKey,
13298
13405
  csvTimelock: boardingCsvTimelock
@@ -13305,7 +13412,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
13305
13412
  params: {
13306
13413
  pubKey: base.hex.encode(baselineBoarding.options.pubKey),
13307
13414
  serverPubKey: base.hex.encode(serverPubKey),
13308
- csvTimelock: chunkFNCQJLR2_cjs.timelockToSequence(boardingCsvTimelock).toString()
13415
+ csvTimelock: chunkAB67CMHS_cjs.timelockToSequence(boardingCsvTimelock).toString()
13309
13416
  },
13310
13417
  script: boardingScriptHex,
13311
13418
  address: baselineBoarding.address(this.network.hrp, serverPubKey).encode(),
@@ -13484,7 +13591,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
13484
13591
  serverPubKey: this.offchainTapscript.options.serverPubKey,
13485
13592
  deprecatedSignerPubKeys: [...this._deprecatedSigners.keys()].map((h) => base.hex.decode(h)),
13486
13593
  csvTimelocks: this.walletContractTimelocks,
13487
- delegatePubKey: this.offchainTapscript instanceof chunkSF5NKAUA_cjs.DelegateVtxo.Script ? this.offchainTapscript.options.delegatePubKey : void 0
13594
+ delegatePubKey: this.offchainTapscript instanceof chunkOL7V43WS_cjs.DelegateVtxo.Script ? this.offchainTapscript.options.delegatePubKey : void 0
13488
13595
  };
13489
13596
  }
13490
13597
  _signerRouter;
@@ -13578,24 +13685,24 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
13578
13685
  const manager = await this.getContractManager();
13579
13686
  const descriptor = await manager.getNextSigningDescriptor();
13580
13687
  if (!descriptor) return this.getBoardingAddress();
13581
- const pubKey = chunkSF5NKAUA_cjs.deriveDescriptorLeafPubKey(descriptor);
13582
- const newBoarding = new chunkSF5NKAUA_cjs.DefaultVtxo.Script({
13688
+ const pubKey = chunkOL7V43WS_cjs.deriveDescriptorLeafPubKey(descriptor);
13689
+ const newBoarding = new chunkOL7V43WS_cjs.DefaultVtxo.Script({
13583
13690
  ...this._boardingTapscript.options,
13584
13691
  pubKey
13585
13692
  });
13586
- const csvTimelock = newBoarding.options.csvTimelock ?? chunkSF5NKAUA_cjs.DefaultVtxo.Script.DEFAULT_TIMELOCK;
13693
+ const csvTimelock = newBoarding.options.csvTimelock ?? chunkOL7V43WS_cjs.DefaultVtxo.Script.DEFAULT_TIMELOCK;
13587
13694
  await manager.createContract({
13588
13695
  type: "boarding",
13589
13696
  params: {
13590
13697
  pubKey: base.hex.encode(pubKey),
13591
13698
  serverPubKey: base.hex.encode(newBoarding.options.serverPubKey),
13592
- csvTimelock: chunkFNCQJLR2_cjs.timelockToSequence(csvTimelock).toString()
13699
+ csvTimelock: chunkAB67CMHS_cjs.timelockToSequence(csvTimelock).toString()
13593
13700
  },
13594
13701
  script: base.hex.encode(newBoarding.pkScript),
13595
13702
  address: newBoarding.address(this.network.hrp, this.arkServerPublicKey).encode(),
13596
13703
  state: "active",
13597
13704
  metadata: {
13598
- source: chunkSF5NKAUA_cjs.WALLET_RECEIVE_SOURCE,
13705
+ source: chunkOL7V43WS_cjs.WALLET_RECEIVE_SOURCE,
13599
13706
  signingDescriptor: descriptor
13600
13707
  }
13601
13708
  });
@@ -13630,7 +13737,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
13630
13737
  if (this._descriptorProvider instanceof HDDescriptorProvider) {
13631
13738
  return (await this.getContractManager()).getNextSigningDescriptor();
13632
13739
  }
13633
- return chunkSF5NKAUA_cjs.identityDescriptor(this.identity);
13740
+ return chunkOL7V43WS_cjs.identityDescriptor(this.identity);
13634
13741
  }
13635
13742
  /**
13636
13743
  * @see HDAllocationCapable.advanceSigningDescriptorWatermark
@@ -13755,21 +13862,21 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
13755
13862
  const [currentBoardingRow] = await manager.getContracts({
13756
13863
  script: currentBoardingScript
13757
13864
  });
13758
- const newOffchain = this.offchainTapscript instanceof chunkSF5NKAUA_cjs.DelegateVtxo.Script ? new chunkSF5NKAUA_cjs.DelegateVtxo.Script({
13865
+ const newOffchain = this.offchainTapscript instanceof chunkOL7V43WS_cjs.DelegateVtxo.Script ? new chunkOL7V43WS_cjs.DelegateVtxo.Script({
13759
13866
  ...this.offchainTapscript.options,
13760
13867
  serverPubKey: xonly
13761
- }) : new chunkSF5NKAUA_cjs.DefaultVtxo.Script({
13868
+ }) : new chunkOL7V43WS_cjs.DefaultVtxo.Script({
13762
13869
  ...this.offchainTapscript.options,
13763
13870
  serverPubKey: xonly
13764
13871
  });
13765
- const newBoarding = new chunkSF5NKAUA_cjs.DefaultVtxo.Script({
13872
+ const newBoarding = new chunkOL7V43WS_cjs.DefaultVtxo.Script({
13766
13873
  ...this._boardingTapscript.options,
13767
13874
  serverPubKey: xonly
13768
13875
  });
13769
- const offchainCsv = chunkFNCQJLR2_cjs.timelockToSequence(newOffchain.options.csvTimelock).toString();
13876
+ const offchainCsv = chunkAB67CMHS_cjs.timelockToSequence(newOffchain.options.csvTimelock).toString();
13770
13877
  const newOffchainScript = base.hex.encode(newOffchain.pkScript);
13771
13878
  const newOffchainAddress = newOffchain.address(this.network.hrp, xonly).encode();
13772
- if (newOffchain instanceof chunkSF5NKAUA_cjs.DelegateVtxo.Script) {
13879
+ if (newOffchain instanceof chunkOL7V43WS_cjs.DelegateVtxo.Script) {
13773
13880
  await manager.createContract({
13774
13881
  type: "delegate",
13775
13882
  params: {
@@ -13797,13 +13904,13 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
13797
13904
  metadata: currentOffchainRow?.metadata
13798
13905
  });
13799
13906
  }
13800
- const boardingCsv = newBoarding.options.csvTimelock ?? chunkSF5NKAUA_cjs.DefaultVtxo.Script.DEFAULT_TIMELOCK;
13907
+ const boardingCsv = newBoarding.options.csvTimelock ?? chunkOL7V43WS_cjs.DefaultVtxo.Script.DEFAULT_TIMELOCK;
13801
13908
  await manager.createContract({
13802
13909
  type: "boarding",
13803
13910
  params: {
13804
13911
  pubKey: base.hex.encode(newBoarding.options.pubKey),
13805
13912
  serverPubKey: base.hex.encode(xonly),
13806
- csvTimelock: chunkFNCQJLR2_cjs.timelockToSequence(boardingCsv).toString()
13913
+ csvTimelock: chunkAB67CMHS_cjs.timelockToSequence(boardingCsv).toString()
13807
13914
  },
13808
13915
  script: base.hex.encode(newBoarding.pkScript),
13809
13916
  address: newBoarding.address(this.network.hrp, xonly).encode(),
@@ -13836,14 +13943,14 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
13836
13943
  _restoreInFlight;
13837
13944
  _addPendingSpends(inputs) {
13838
13945
  for (const input of inputs) {
13839
- if (chunkFNCQJLR2_cjs.isVirtualCoin(input)) {
13946
+ if (chunkAB67CMHS_cjs.isVirtualCoin(input)) {
13840
13947
  this._pendingSpendOutpoints.add(`${input.txid}:${input.vout}`);
13841
13948
  }
13842
13949
  }
13843
13950
  }
13844
13951
  _removePendingSpends(inputs) {
13845
13952
  for (const input of inputs) {
13846
- if (chunkFNCQJLR2_cjs.isVirtualCoin(input)) {
13953
+ if (chunkAB67CMHS_cjs.isVirtualCoin(input)) {
13847
13954
  this._pendingSpendOutpoints.delete(`${input.txid}:${input.vout}`);
13848
13955
  }
13849
13956
  }
@@ -13901,9 +14008,9 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
13901
14008
  const manager = await this.getContractManager();
13902
14009
  const provider = this._descriptorProvider;
13903
14010
  const hd = provider instanceof HDDescriptorProvider;
13904
- const staticDescriptor = hd ? void 0 : await chunkSF5NKAUA_cjs.identityDescriptor(this.identity);
14011
+ const staticDescriptor = hd ? void 0 : await chunkOL7V43WS_cjs.identityDescriptor(this.identity);
13905
14012
  const materialize = (index) => hd ? provider.materializeDescriptorAt(index) : staticDescriptor;
13906
- const delegatePubKey = this.offchainTapscript instanceof chunkSF5NKAUA_cjs.DelegateVtxo.Script ? this.offchainTapscript.options.delegatePubKey : void 0;
14013
+ const delegatePubKey = this.offchainTapscript instanceof chunkOL7V43WS_cjs.DelegateVtxo.Script ? this.offchainTapscript.options.delegatePubKey : void 0;
13907
14014
  const arkInfo = await this.arkProvider.getInfo();
13908
14015
  const currentSignerPubKey = toXOnlyPubKey(base.hex.decode(arkInfo.signerPubkey));
13909
14016
  const deprecatedSignerPubKeys = arkInfo.deprecatedSigners.map(
@@ -13922,7 +14029,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
13922
14029
  csvTimelocks: this.walletContractTimelocks,
13923
14030
  // Boarding-exit CSV so the boarding handler can build its
13924
14031
  // candidate script (distinct from the unilateral-exit matrix).
13925
- boardingTimelock: this.boardingTapscript.options.csvTimelock ?? chunkSF5NKAUA_cjs.DefaultVtxo.Script.DEFAULT_TIMELOCK,
14032
+ boardingTimelock: this.boardingTapscript.options.csvTimelock ?? chunkOL7V43WS_cjs.DefaultVtxo.Script.DEFAULT_TIMELOCK,
13926
14033
  delegatePubKey
13927
14034
  };
13928
14035
  const result = await manager.scanContracts({
@@ -14185,7 +14292,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
14185
14292
  inputs: params.selectedVtxos,
14186
14293
  changeAmount: BigInt(changeAmount)
14187
14294
  };
14188
- const outputAddress = chunkFNCQJLR2_cjs.ArkAddress.decode(params.address);
14295
+ const outputAddress = chunkAB67CMHS_cjs.ArkAddress.decode(params.address);
14189
14296
  assertRecipientArkAddress(
14190
14297
  params.address,
14191
14298
  outputAddress,
@@ -14251,13 +14358,13 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
14251
14358
  void this.logUngatedInputs("settle({ inputs })", params.inputs);
14252
14359
  }
14253
14360
  const offchainAddress = await this.getAddress();
14254
- const offchainPkScript = chunkFNCQJLR2_cjs.ArkAddress.decode(offchainAddress).pkScript;
14361
+ const offchainPkScript = chunkAB67CMHS_cjs.ArkAddress.decode(offchainAddress).pkScript;
14255
14362
  const offchainOutputScript = base.hex.encode(offchainPkScript);
14256
14363
  if (!params) {
14257
14364
  const { fees, vtxoMaxAmount } = await this.arkProvider.getInfo();
14258
14365
  const estimator = new Estimator(fees.intentFee);
14259
14366
  let amount = 0;
14260
- const exitScript = chunkFNCQJLR2_cjs.CSVMultisigTapscript.decode(
14367
+ const exitScript = chunkAB67CMHS_cjs.CSVMultisigTapscript.decode(
14261
14368
  base.hex.decode(this.boardingTapscript.exitScript)
14262
14369
  );
14263
14370
  const boardingTimelock = exitScript.params.timelock;
@@ -14286,7 +14393,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
14286
14393
  if (filteredVtxos.length >= MAX_VTXOS_PER_SETTLEMENT) {
14287
14394
  break;
14288
14395
  }
14289
- const inputFee = estimator.evalOffchainInput(chunkFNCQJLR2_cjs.toOffchainInputFeeParams(vtxo));
14396
+ const inputFee = estimator.evalOffchainInput(chunkAB67CMHS_cjs.toOffchainInputFeeParams(vtxo));
14290
14397
  if (inputFee.satoshis >= vtxo.value) {
14291
14398
  continue;
14292
14399
  }
@@ -14333,7 +14440,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
14333
14440
  let script;
14334
14441
  let arkAddress;
14335
14442
  try {
14336
- arkAddress = chunkFNCQJLR2_cjs.ArkAddress.decode(output.address);
14443
+ arkAddress = chunkAB67CMHS_cjs.ArkAddress.decode(output.address);
14337
14444
  } catch {
14338
14445
  arkAddress = void 0;
14339
14446
  }
@@ -14423,7 +14530,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
14423
14530
  const abortController = new AbortController();
14424
14531
  let stream;
14425
14532
  let committedTxid;
14426
- const settleInputVtxos = params.inputs.filter(chunkFNCQJLR2_cjs.isVirtualCoin);
14533
+ const settleInputVtxos = params.inputs.filter(chunkAB67CMHS_cjs.isVirtualCoin);
14427
14534
  const contractManager = await this.getContractManager();
14428
14535
  await contractManager.assertAnnotatable(settleInputVtxos);
14429
14536
  await contractManager.assertSpendableNow?.(
@@ -14532,7 +14639,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
14532
14639
  async maybeRotateBoardingAfterBoard(inputs) {
14533
14640
  if (!this._descriptorProvider) return;
14534
14641
  const consumedBoarding = inputs.some(
14535
- (input) => typeof input !== "string" && !chunkFNCQJLR2_cjs.isVirtualCoin(input)
14642
+ (input) => typeof input !== "string" && !chunkAB67CMHS_cjs.isVirtualCoin(input)
14536
14643
  );
14537
14644
  if (!consumedBoarding) return;
14538
14645
  try {
@@ -14556,7 +14663,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
14556
14663
  let connectorIndex = 0;
14557
14664
  const connectorsLeaves = connectorsGraph?.leaves() || [];
14558
14665
  for (const input of inputs) {
14559
- if (!chunkFNCQJLR2_cjs.isVirtualCoin(input)) {
14666
+ if (!chunkAB67CMHS_cjs.isVirtualCoin(input)) {
14560
14667
  for (let i = 0; i < settlementPsbt.inputsLength; i++) {
14561
14668
  const settlementInput = settlementPsbt.getInput(i);
14562
14669
  if (!settlementInput.txid || settlementInput.index === void 0) {
@@ -14587,7 +14694,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
14587
14694
  }
14588
14695
  continue;
14589
14696
  }
14590
- if (chunkFNCQJLR2_cjs.canRecoverOnchain(input, { timestamp: /* @__PURE__ */ new Date() }) || isSubdust({ value: input.value }, this.dustAmount)) {
14697
+ if (chunkAB67CMHS_cjs.canRecoverOnchain(input, { timestamp: /* @__PURE__ */ new Date() }) || isSubdust({ value: input.value }, this.dustAmount)) {
14591
14698
  continue;
14592
14699
  }
14593
14700
  if (connectorsLeaves.length === 0) {
@@ -14615,7 +14722,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
14615
14722
  index: input.vout,
14616
14723
  witnessUtxo: {
14617
14724
  amount: BigInt(input.value),
14618
- script: chunkFNCQJLR2_cjs.VtxoScript.decode(input.tapTree).pkScript
14725
+ script: chunkAB67CMHS_cjs.VtxoScript.decode(input.tapTree).pkScript
14619
14726
  },
14620
14727
  sighashType: btcSigner.SigHash.DEFAULT,
14621
14728
  tapLeafScript: [input.forfeitTapLeafScript]
@@ -14634,7 +14741,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
14634
14741
  forfeitTx = await this._signerRouter.sign(forfeitTx, [
14635
14742
  {
14636
14743
  index: 0,
14637
- lookupScript: chunkFNCQJLR2_cjs.VtxoScript.decode(input.tapTree).pkScript
14744
+ lookupScript: chunkAB67CMHS_cjs.VtxoScript.decode(input.tapTree).pkScript
14638
14745
  }
14639
14746
  ]);
14640
14747
  signedForfeits.push(base.base64.encode(forfeitTx.toPSBT()));
@@ -14692,7 +14799,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
14692
14799
  resolveBatchExpiryPolicy(this.network, this.batchExpiryPolicy)
14693
14800
  );
14694
14801
  await this.arkProvider.confirmRegistration(intentId);
14695
- const sweepTapscript = chunkFNCQJLR2_cjs.CSVMultisigTapscript.encode({
14802
+ const sweepTapscript = chunkAB67CMHS_cjs.CSVMultisigTapscript.encode({
14696
14803
  timelock,
14697
14804
  pubkeys: [this.forfeitPubkey]
14698
14805
  }).script;
@@ -14798,9 +14905,9 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
14798
14905
  ...existing ?? {},
14799
14906
  intentTxId,
14800
14907
  registerProof: intent.proof,
14801
- registerProofMessage: chunkFNCQJLR2_cjs.Intent.encodeMessage(intent.message),
14908
+ registerProofMessage: chunkAB67CMHS_cjs.Intent.encodeMessage(intent.message),
14802
14909
  deleteProof: deleteIntent.proof,
14803
- deleteProofMessage: chunkFNCQJLR2_cjs.Intent.encodeMessage(deleteIntent.message),
14910
+ deleteProofMessage: chunkAB67CMHS_cjs.Intent.encodeMessage(deleteIntent.message),
14804
14911
  intentVtxos: inputs.map((i) => ({
14805
14912
  txid: i.txid,
14806
14913
  vout: i.vout
@@ -14832,7 +14939,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
14832
14939
  try {
14833
14940
  return await this.arkProvider.registerIntent(intent);
14834
14941
  } catch (error) {
14835
- if (error instanceof chunkFNCQJLR2_cjs.ArkError && error.code === 0 && error.message.includes("duplicated input")) {
14942
+ if (error instanceof chunkAB67CMHS_cjs.ArkError && error.code === 0 && error.message.includes("duplicated input")) {
14836
14943
  const deleteIntent = await this.makeDeleteIntentSignature(inputs);
14837
14944
  await this.arkProvider.deleteIntent(deleteIntent);
14838
14945
  return this.arkProvider.registerIntent(intent);
@@ -14848,7 +14955,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
14848
14955
  expire_at: 0,
14849
14956
  cosigners_public_keys: cosignerPubKeys
14850
14957
  };
14851
- const proof = chunkFNCQJLR2_cjs.Intent.create(message, coins, outputs);
14958
+ const proof = chunkAB67CMHS_cjs.Intent.create(message, coins, outputs);
14852
14959
  const signedProof = await this._signerRouter.sign(proof, intentProofJobs(coins));
14853
14960
  return {
14854
14961
  proof: base.base64.encode(signedProof.toPSBT()),
@@ -14860,7 +14967,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
14860
14967
  type: "delete",
14861
14968
  expire_at: 0
14862
14969
  };
14863
- const proof = chunkFNCQJLR2_cjs.Intent.create(message, coins, []);
14970
+ const proof = chunkAB67CMHS_cjs.Intent.create(message, coins, []);
14864
14971
  const signedProof = await this._signerRouter.sign(proof, intentProofJobs(coins));
14865
14972
  return {
14866
14973
  proof: base.base64.encode(signedProof.toPSBT()),
@@ -14872,7 +14979,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
14872
14979
  type: "get-pending-tx",
14873
14980
  expire_at: 0
14874
14981
  };
14875
- const proof = chunkFNCQJLR2_cjs.Intent.create(message, coins, []);
14982
+ const proof = chunkAB67CMHS_cjs.Intent.create(message, coins, []);
14876
14983
  const signedProof = await this._signerRouter.sign(proof, intentProofJobs(coins));
14877
14984
  return {
14878
14985
  proof: base.base64.encode(signedProof.toPSBT()),
@@ -14893,7 +15000,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
14893
15000
  if (!vtxos || vtxos.length === 0) {
14894
15001
  const scriptMap = await this.getScriptMap();
14895
15002
  const allExtended = [];
14896
- const fetchedVtxos = await chunkFNCQJLR2_cjs.getAllNormalizedVtxos(this.indexerProvider, [
15003
+ const fetchedVtxos = await chunkAB67CMHS_cjs.getAllNormalizedVtxos(this.indexerProvider, [
14897
15004
  ...scriptMap.keys()
14898
15005
  ]);
14899
15006
  for (const vtxo of fetchedVtxos) {
@@ -15007,11 +15114,11 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
15007
15114
  * against the current key alone would leave it pending forever.
15008
15115
  */
15009
15116
  checkpointUnrollCandidates(info) {
15010
- const current = chunkFNCQJLR2_cjs.CSVMultisigTapscript.decode(base.hex.decode(info.checkpointTapscript));
15117
+ const current = chunkAB67CMHS_cjs.CSVMultisigTapscript.decode(base.hex.decode(info.checkpointTapscript));
15011
15118
  const candidates = [this._serverUnrollScript, current];
15012
15119
  for (const deprecated of signerSetFromInfo(info).deprecated.keys()) {
15013
15120
  candidates.push(
15014
- chunkFNCQJLR2_cjs.CSVMultisigTapscript.encode({
15121
+ chunkAB67CMHS_cjs.CSVMultisigTapscript.encode({
15015
15122
  ...current.params,
15016
15123
  pubkeys: [base.hex.decode(deprecated)]
15017
15124
  })
@@ -15102,7 +15209,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
15102
15209
  if (vtxos.length === 0) {
15103
15210
  throw new Error("No VTXOs found for this arkadeCash");
15104
15211
  }
15105
- const myPkScript = chunkFNCQJLR2_cjs.ArkAddress.decode(await this.getAddress()).pkScript;
15212
+ const myPkScript = chunkAB67CMHS_cjs.ArkAddress.decode(await this.getAddress()).pkScript;
15106
15213
  let { spendable, unclaimed } = this.classifyCashVtxos(vtxos);
15107
15214
  let swept = 0;
15108
15215
  const drainable = vtxos.filter((vtxo) => !isSubdust(vtxo, this.dustAmount));
@@ -15176,7 +15283,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
15176
15283
  const spendable = [];
15177
15284
  const unclaimed = [];
15178
15285
  for (const vtxo of vtxos) {
15179
- if (chunkFNCQJLR2_cjs.hasTerminalSpend(vtxo)) {
15286
+ if (chunkAB67CMHS_cjs.hasTerminalSpend(vtxo)) {
15180
15287
  unclaimed.push(cashReport(vtxo, "already-spent"));
15181
15288
  } else if (isSubdust(vtxo, this.dustAmount)) {
15182
15289
  unclaimed.push(cashReport(vtxo, "subdust"));
@@ -15196,7 +15303,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
15196
15303
  const all = [];
15197
15304
  const seen = /* @__PURE__ */ new Set();
15198
15305
  for (let pageIndex = 0; ; pageIndex++) {
15199
- const { vtxos, page } = await chunkFNCQJLR2_cjs.getNormalizedVtxos(this.indexerProvider, {
15306
+ const { vtxos, page } = await chunkAB67CMHS_cjs.getNormalizedVtxos(this.indexerProvider, {
15200
15307
  scripts,
15201
15308
  pageIndex,
15202
15309
  pageSize
@@ -15243,7 +15350,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
15243
15350
  for (let i = 0; i < inputs.length; i += MAX_INPUTS_PER_INTENT) {
15244
15351
  const batch = inputs.slice(i, i + MAX_INPUTS_PER_INTENT);
15245
15352
  const message = { type: "get-pending-tx", expire_at: 0 };
15246
- const proof = chunkFNCQJLR2_cjs.Intent.create(message, batch, []);
15353
+ const proof = chunkAB67CMHS_cjs.Intent.create(message, batch, []);
15247
15354
  const signedProof = await identity.sign(
15248
15355
  proof,
15249
15356
  Array.from({ length: batch.length + 1 }, (_, j) => j)
@@ -15313,10 +15420,13 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
15313
15420
  return total;
15314
15421
  }
15315
15422
  /**
15316
- * Send BTC and/or assets to one or more recipients.
15423
+ * Send BTC and/or assets to one or more recipients, passed either as
15424
+ * variadic `Recipient`s or as a single `SendParams` object — the latter
15425
+ * also carries the virtual outputs to spend.
15317
15426
  *
15318
- * @param args - Recipients with their addresses, BTC amounts, and assets
15427
+ * @param args - Recipients, or a `SendParams` object
15319
15428
  * @returns Promise resolving to the Arkade transaction ID
15429
+ * @see SendParams
15320
15430
  *
15321
15431
  * @example
15322
15432
  * ```typescript
@@ -15325,15 +15435,28 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
15325
15435
  * amount: 1000, // (optional, default to dust) btc amount to send to the output
15326
15436
  * assets: [{ assetId: 'abc123...', amount: 50n }] // (optional) list of assets to send
15327
15437
  * });
15438
+ *
15439
+ * // choosing the inputs as well as the outputs
15440
+ * const txid = await wallet.send({
15441
+ * recipients: [{ address: 'ark1q...', amount: 1000 }],
15442
+ * selectedVtxos: mine, // spent as given, nothing added
15443
+ * });
15328
15444
  * ```
15329
15445
  */
15330
15446
  async send(...args) {
15331
- return this._withTxLock(() => this._sendImpl(...args));
15447
+ const params = asSendParams(args);
15448
+ return this._withTxLock(() => this._sendImpl(params));
15332
15449
  }
15333
- async _sendImpl(...args) {
15450
+ async _sendImpl({ recipients: args, selectedVtxos }) {
15334
15451
  if (args.length === 0) {
15335
15452
  throw new Error("At least one receiver is required");
15336
15453
  }
15454
+ if (selectedVtxos && selectedVtxos.length === 0) {
15455
+ throw new Error("send({ selectedVtxos }): no inputs");
15456
+ }
15457
+ if (selectedVtxos) {
15458
+ void this.logUngatedInputs("send({ selectedVtxos })", selectedVtxos);
15459
+ }
15337
15460
  const offchainTapscript = this.offchainTapscript;
15338
15461
  const serverPubKey = this.arkServerPublicKey;
15339
15462
  const serverUnrollScript = this.serverUnrollScript;
@@ -15344,84 +15467,123 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
15344
15467
  Number(this.dustAmount),
15345
15468
  this.recipientAddressContext(serverPubKey)
15346
15469
  );
15347
- const virtualCoins = await this.getSpendableVtxos({
15348
- withRecoverable: false
15349
- });
15470
+ let virtualCoins = [];
15471
+ if (!selectedVtxos) {
15472
+ virtualCoins = await this.getSpendableVtxos({
15473
+ withRecoverable: false
15474
+ });
15475
+ }
15350
15476
  const assetChanges = /* @__PURE__ */ new Map();
15351
- let selectedCoins = [];
15477
+ let selectedCoins = selectedVtxos ? [...selectedVtxos] : [];
15352
15478
  let btcAmountToSelect = 0;
15353
15479
  for (const recipient of recipients) {
15354
15480
  btcAmountToSelect += Math.max(recipient.amount, Number(this.dustAmount));
15355
15481
  }
15356
- for (const recipient of recipients) {
15357
- if (!recipient.assets) {
15358
- continue;
15482
+ if (selectedVtxos) {
15483
+ for (const coin of selectedCoins) {
15484
+ for (const asset of coin.assets ?? []) {
15485
+ const existing = assetChanges.get(asset.assetId) ?? 0n;
15486
+ assetChanges.set(asset.assetId, existing + asset.amount);
15487
+ }
15359
15488
  }
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);
15489
+ for (const recipient of recipients) {
15490
+ for (const asset of recipient.assets) {
15491
+ const remaining = (assetChanges.get(asset.assetId) ?? 0n) - asset.amount;
15492
+ if (remaining < 0n) {
15493
+ throw new Error(
15494
+ `send({ selectedVtxos }): inputs are short ${-remaining} of asset ${asset.assetId}`
15495
+ );
15496
+ }
15497
+ if (remaining === 0n) {
15498
+ assetChanges.delete(asset.assetId);
15499
+ } else {
15500
+ assetChanges.set(asset.assetId, remaining);
15367
15501
  }
15502
+ }
15503
+ }
15504
+ } else {
15505
+ for (const recipient of recipients) {
15506
+ if (!recipient.assets) {
15368
15507
  continue;
15369
15508
  }
15370
- if (existingChange > 0n) {
15371
- amountToSelect -= existingChange;
15372
- assetChanges.delete(receiverAsset.assetId);
15509
+ for (const receiverAsset of recipient.assets) {
15510
+ let amountToSelect = receiverAsset.amount;
15511
+ const existingChange = assetChanges.get(receiverAsset.assetId) ?? 0n;
15512
+ if (existingChange >= amountToSelect) {
15513
+ assetChanges.set(receiverAsset.assetId, existingChange - amountToSelect);
15514
+ if (assetChanges.get(receiverAsset.assetId) === 0n) {
15515
+ assetChanges.delete(receiverAsset.assetId);
15516
+ }
15517
+ continue;
15518
+ }
15519
+ if (existingChange > 0n) {
15520
+ amountToSelect -= existingChange;
15521
+ assetChanges.delete(receiverAsset.assetId);
15522
+ }
15523
+ const availableCoins = virtualCoins.filter(
15524
+ (c) => !selectedCoins.find((sc) => sc.txid === c.txid && sc.vout === c.vout)
15525
+ );
15526
+ const { selected, totalAssetAmount } = selectCoinsWithAsset(
15527
+ availableCoins,
15528
+ receiverAsset.assetId,
15529
+ amountToSelect
15530
+ );
15531
+ for (const coin of selected) {
15532
+ selectedCoins.push(coin);
15533
+ btcAmountToSelect -= coin.value;
15534
+ if (coin.assets) {
15535
+ for (const a of coin.assets) {
15536
+ if (a.assetId === receiverAsset.assetId) {
15537
+ continue;
15538
+ }
15539
+ const existing = assetChanges.get(a.assetId) ?? 0n;
15540
+ assetChanges.set(a.assetId, existing + a.amount);
15541
+ }
15542
+ }
15543
+ }
15544
+ const assetChangeAmount = totalAssetAmount - amountToSelect;
15545
+ if (assetChangeAmount > 0n) {
15546
+ const existing = assetChanges.get(receiverAsset.assetId) ?? 0n;
15547
+ assetChanges.set(receiverAsset.assetId, existing + assetChangeAmount);
15548
+ }
15373
15549
  }
15550
+ }
15551
+ if (btcAmountToSelect > 0) {
15374
15552
  const availableCoins = virtualCoins.filter(
15375
15553
  (c) => !selectedCoins.find((sc) => sc.txid === c.txid && sc.vout === c.vout)
15376
15554
  );
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;
15555
+ const { inputs: btcCoins } = selectVirtualCoins(availableCoins, btcAmountToSelect);
15556
+ for (const coin of btcCoins) {
15385
15557
  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);
15558
+ for (const asset of coin.assets) {
15559
+ const existing = assetChanges.get(asset.assetId) ?? 0n;
15560
+ assetChanges.set(asset.assetId, existing + asset.amount);
15392
15561
  }
15393
15562
  }
15394
15563
  }
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
- }
15564
+ selectedCoins = [...selectedCoins, ...btcCoins];
15400
15565
  }
15401
15566
  }
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
15567
  let totalBtcSelected = selectedCoins.reduce((sum, c) => sum + c.value, 0);
15418
15568
  const outputs = recipients.map((recipient) => ({
15419
15569
  script: recipient.script,
15420
- amount: BigInt(recipient.amount)
15570
+ amount: BigInt(recipient.amount),
15571
+ // Already checked against the recipient address in `validateRecipients`.
15572
+ ...recipient.tapTree ? { tapTree: chunkAB67CMHS_cjs.TapTreeCoder.decode(recipient.tapTree) } : {}
15421
15573
  }));
15422
15574
  const totalBtcOutput = outputs.reduce((sum, o) => sum + Number(o.amount), 0);
15423
15575
  let changeAmount = totalBtcSelected - totalBtcOutput;
15576
+ if (changeAmount < 0) {
15577
+ throw new Error(
15578
+ `send({ selectedVtxos }): inputs total ${totalBtcSelected} sats, outputs need ${totalBtcOutput}`
15579
+ );
15580
+ }
15424
15581
  if (assetChanges.size > 0 && changeAmount < Number(this.dustAmount)) {
15582
+ if (selectedVtxos) {
15583
+ throw new Error(
15584
+ `send({ selectedVtxos }): ${changeAmount} sats of change cannot carry ${assetChanges.size} asset change(s), needs ${this.dustAmount}`
15585
+ );
15586
+ }
15425
15587
  const availableCoins = virtualCoins.filter(
15426
15588
  (c) => !selectedCoins.find((sc) => sc.txid === c.txid && sc.vout === c.vout)
15427
15589
  );
@@ -15551,10 +15713,10 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
15551
15713
  const serverPubKey = this.arkServerPublicKey;
15552
15714
  const serverUnrollScript = this.serverUnrollScript;
15553
15715
  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);
15716
+ const normalizedInputs = inputs.map(chunkAB67CMHS_cjs.normalizeVtxo);
15717
+ const at = now ?? await chunkAB67CMHS_cjs.resolveTimeHeight(this.onchainProvider);
15556
15718
  for (const input of normalizedInputs) {
15557
- if (!chunkFNCQJLR2_cjs.canSpendOffchain(input, at)) {
15719
+ if (!chunkAB67CMHS_cjs.canSpendOffchain(input, at)) {
15558
15720
  throw new Error(
15559
15721
  `sendSelectedVtxosToSelf: input ${input.txid}:${input.vout} is not cooperatively spendable`
15560
15722
  );
@@ -15624,7 +15786,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
15624
15786
  );
15625
15787
  const arkTxJobs = inputs.map((input, index) => ({
15626
15788
  index,
15627
- lookupScript: chunkFNCQJLR2_cjs.VtxoScript.decode(input.tapTree).pkScript
15789
+ lookupScript: chunkAB67CMHS_cjs.VtxoScript.decode(input.tapTree).pkScript
15628
15790
  }));
15629
15791
  const identity = this.identity;
15630
15792
  const signer = {
@@ -15710,14 +15872,14 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
15710
15872
  const spentBy = checkpointIdByOutpoint.get(`${vtxo.txid}:${vtxo.vout}`);
15711
15873
  spentVtxos.push({
15712
15874
  ...spentFacts,
15713
- virtualStatus: chunkFNCQJLR2_cjs.toVirtualStatus(spentFacts),
15875
+ virtualStatus: chunkAB67CMHS_cjs.toVirtualStatus(spentFacts),
15714
15876
  ...spentBy ? { spentBy } : {},
15715
15877
  arkTxId: arkTxid
15716
15878
  });
15717
15879
  for (const id of vtxo.commitmentTxIds) {
15718
15880
  commitmentTxIds.add(id);
15719
15881
  }
15720
- const vtxoExpiry = chunkFNCQJLR2_cjs.toBatchExpiry(vtxo);
15882
+ const vtxoExpiry = chunkAB67CMHS_cjs.toBatchExpiry(vtxo);
15721
15883
  if (vtxoExpiry) {
15722
15884
  batchExpiry = Math.min(batchExpiry, vtxoExpiry);
15723
15885
  }
@@ -15730,7 +15892,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
15730
15892
  isSwept: false,
15731
15893
  isPreconfirmed: true,
15732
15894
  commitmentTxIds: Array.from(commitmentTxIds),
15733
- ...chunkFNCQJLR2_cjs.parseLegacyExpiry(batchExpiry)
15895
+ ...chunkAB67CMHS_cjs.parseLegacyExpiry(batchExpiry)
15734
15896
  };
15735
15897
  changeVtxo = {
15736
15898
  txid: arkTxid,
@@ -15742,7 +15904,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
15742
15904
  tapTree: offchainTapscript.encode(),
15743
15905
  value: Number(changeAmount),
15744
15906
  ...changeFacts,
15745
- virtualStatus: chunkFNCQJLR2_cjs.toVirtualStatus(changeFacts),
15907
+ virtualStatus: chunkAB67CMHS_cjs.toVirtualStatus(changeFacts),
15746
15908
  spentBy: "",
15747
15909
  status: {
15748
15910
  confirmed: false
@@ -15811,12 +15973,12 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
15811
15973
  const spentVtxos = [];
15812
15974
  const inputArkTxIds = /* @__PURE__ */ new Set();
15813
15975
  const boardingRemovalsByAddress = /* @__PURE__ */ new Map();
15814
- const vtxoInputs = inputs.filter(chunkFNCQJLR2_cjs.isVirtualCoin);
15976
+ const vtxoInputs = inputs.filter(chunkAB67CMHS_cjs.isVirtualCoin);
15815
15977
  const cm = await this.getContractManager();
15816
15978
  const annotatedVtxos = await cm.annotateVtxos(vtxoInputs);
15817
15979
  const annotatedByKey = new Map(annotatedVtxos.map((v) => [`${v.txid}:${v.vout}`, v]));
15818
15980
  for (const input of inputs) {
15819
- if (chunkFNCQJLR2_cjs.isVirtualCoin(input)) {
15981
+ if (chunkAB67CMHS_cjs.isVirtualCoin(input)) {
15820
15982
  const outpoint = `${input.txid}:${input.vout}`;
15821
15983
  const vtxo = annotatedByKey.get(outpoint);
15822
15984
  if (!vtxo) {
@@ -15828,13 +15990,13 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
15828
15990
  const settledFacts = { ...vtxo, isSpent: true };
15829
15991
  spentVtxos.push({
15830
15992
  ...settledFacts,
15831
- virtualStatus: chunkFNCQJLR2_cjs.toVirtualStatus(settledFacts),
15993
+ virtualStatus: chunkAB67CMHS_cjs.toVirtualStatus(settledFacts),
15832
15994
  settledBy: commitmentTxid
15833
15995
  });
15834
15996
  } else {
15835
15997
  let sourceAddress;
15836
15998
  try {
15837
- sourceAddress = chunkFNCQJLR2_cjs.VtxoScript.decode(input.tapTree).onchainAddress(
15999
+ sourceAddress = chunkAB67CMHS_cjs.VtxoScript.decode(input.tapTree).onchainAddress(
15838
16000
  this.network
15839
16001
  );
15840
16002
  } catch {
@@ -15892,9 +16054,9 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
15892
16054
  }
15893
16055
  };
15894
16056
  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;
16057
+ const sortedCoins = coins.map(chunkAB67CMHS_cjs.normalizeVtxo).sort((a, b) => {
16058
+ const expiryA = chunkAB67CMHS_cjs.toBatchExpiry(a) || Number.MAX_SAFE_INTEGER;
16059
+ const expiryB = chunkAB67CMHS_cjs.toBatchExpiry(b) || Number.MAX_SAFE_INTEGER;
15898
16060
  if (expiryA !== expiryB) {
15899
16061
  return expiryA - expiryB;
15900
16062
  }
@@ -16154,7 +16316,7 @@ var MessageBus = class {
16154
16316
  this.initialized = true;
16155
16317
  }
16156
16318
  async buildServices(config) {
16157
- const arkProvider = new chunkFNCQJLR2_cjs.RestArkProvider(config.arkServer.url);
16319
+ const arkProvider = new chunkAB67CMHS_cjs.RestArkProvider(config.arkServer.url);
16158
16320
  const storage = {
16159
16321
  walletRepository: this.walletRepository,
16160
16322
  contractRepository: this.contractRepository,
@@ -16496,7 +16658,7 @@ var offboardNetworkNames = [
16496
16658
  function offboardDestinationScript(destinationAddress) {
16497
16659
  for (const networkName of offboardNetworkNames) {
16498
16660
  try {
16499
- const network = chunkFNCQJLR2_cjs.networks[networkName];
16661
+ const network = chunkAB67CMHS_cjs.networks[networkName];
16500
16662
  const addr = btcSigner.Address(network).decode(destinationAddress);
16501
16663
  return btcSigner.OutScript.encode(addr);
16502
16664
  } catch {
@@ -16560,7 +16722,7 @@ var Ramps = class {
16560
16722
  }
16561
16723
  amount = amount ?? totalAmount;
16562
16724
  const offchainAddress = await this.wallet.getAddress();
16563
- const offchainAddr = chunkFNCQJLR2_cjs.ArkAddress.decode(offchainAddress);
16725
+ const offchainAddr = chunkAB67CMHS_cjs.ArkAddress.decode(offchainAddress);
16564
16726
  const offchainScript = base.hex.encode(offchainAddr.pkScript);
16565
16727
  const outputFee = estimator.evalOffchainOutput({
16566
16728
  amount,
@@ -16620,7 +16782,7 @@ var Ramps = class {
16620
16782
  const filteredVtxos = [];
16621
16783
  let totalAmount = 0n;
16622
16784
  for (const vtxo of vtxos) {
16623
- const inputFee = estimator.evalOffchainInput(chunkFNCQJLR2_cjs.toOffchainInputFeeParams(vtxo));
16785
+ const inputFee = estimator.evalOffchainInput(chunkAB67CMHS_cjs.toOffchainInputFeeParams(vtxo));
16624
16786
  if (inputFee.satoshis >= vtxo.value) {
16625
16787
  continue;
16626
16788
  }
@@ -17184,8 +17346,8 @@ var WalletMessageHandler = class {
17184
17346
  });
17185
17347
  }
17186
17348
  case "SEND": {
17187
- const { recipients } = message.payload;
17188
- const txid = await this.wallet.send(...recipients);
17349
+ const { recipients, selectedVtxos } = message.payload;
17350
+ const txid = await (selectedVtxos ? this.wallet.send({ recipients, selectedVtxos }) : this.wallet.send(...recipients));
17189
17351
  return this.tagged({
17190
17352
  id,
17191
17353
  type: "SEND_SUCCESS",
@@ -17387,7 +17549,7 @@ var WalletMessageHandler = class {
17387
17549
  // Wallet methods
17388
17550
  async handleInitWallet({ payload }) {
17389
17551
  const { arkServerUrl } = payload;
17390
- this.indexerProvider = new chunk2JHN5RCY_cjs.RestIndexerProvider(arkServerUrl);
17552
+ this.indexerProvider = new chunkLG5GY73A_cjs.RestIndexerProvider(arkServerUrl);
17391
17553
  await this.onWalletInitialized();
17392
17554
  }
17393
17555
  /**
@@ -17433,6 +17595,8 @@ var WalletMessageHandler = class {
17433
17595
  settled: offchain.settled,
17434
17596
  preconfirmed: offchain.preconfirmed,
17435
17597
  available: offchain.available,
17598
+ gated: offchain.gated,
17599
+ intentLocked: offchain.intentLocked,
17436
17600
  recoverable: offchain.recoverable,
17437
17601
  pendingRecovery: offchain.pendingRecovery,
17438
17602
  total: totalBoarding + offchain.total,
@@ -17652,17 +17816,17 @@ var WalletMessageHandler = class {
17652
17816
  throw new WalletNotInitializedError();
17653
17817
  }
17654
17818
  const allVtxos = await this.getVtxosFromRepo();
17655
- const vtxos = allVtxos.filter((v) => !chunkFNCQJLR2_cjs.hasTerminalSpend(v));
17819
+ const vtxos = allVtxos.filter((v) => !chunkAB67CMHS_cjs.hasTerminalSpend(v));
17656
17820
  const dustAmount = this.readonlyWallet.dustAmount;
17657
17821
  const includeRecoverable = message.payload.filter?.withRecoverable ?? false;
17658
17822
  const filteredVtxos = includeRecoverable ? vtxos : vtxos.filter((v) => {
17659
17823
  if (dustAmount != null && isSubdust(v, dustAmount)) {
17660
17824
  return false;
17661
17825
  }
17662
- if (chunkFNCQJLR2_cjs.isRecoverable(v)) {
17826
+ if (chunkAB67CMHS_cjs.isRecoverable(v)) {
17663
17827
  return false;
17664
17828
  }
17665
- if (chunkFNCQJLR2_cjs.isExpired(v)) {
17829
+ if (chunkAB67CMHS_cjs.isExpired(v)) {
17666
17830
  return false;
17667
17831
  }
17668
17832
  return true;
@@ -17670,7 +17834,7 @@ var WalletMessageHandler = class {
17670
17834
  if (!message.payload.filter?.withUnrolled) {
17671
17835
  return filteredVtxos;
17672
17836
  }
17673
- return filteredVtxos.concat(allVtxos.filter((v) => chunkFNCQJLR2_cjs.hasTerminalSpend(v) && v.isUnrolled));
17837
+ return filteredVtxos.concat(allVtxos.filter((v) => chunkAB67CMHS_cjs.hasTerminalSpend(v) && v.isUnrolled));
17674
17838
  }
17675
17839
  /** Tear down handler subscriptions, then delegate the full wipe to the wallet. */
17676
17840
  async clear() {
@@ -17760,7 +17924,7 @@ var WalletMessageHandler = class {
17760
17924
  if (!this.readonlyWallet) return null;
17761
17925
  const { boardingTxs, commitmentsToIgnore } = await this.readonlyWallet.getBoardingTxs();
17762
17926
  const indexerProvider = this.indexerProvider;
17763
- const resolveTxCreatedAt = indexerProvider ? (txids) => chunkFNCQJLR2_cjs.fetchVtxoCreatedAtByTxid(indexerProvider, txids) : void 0;
17927
+ const resolveTxCreatedAt = indexerProvider ? (txids) => chunkAB67CMHS_cjs.fetchVtxoCreatedAtByTxid(indexerProvider, txids) : void 0;
17764
17928
  return buildTransactionHistory(vtxos, boardingTxs, commitmentsToIgnore, resolveTxCreatedAt);
17765
17929
  }
17766
17930
  async ensureContractEventBroadcasting() {
@@ -18449,7 +18613,7 @@ var ServiceWorkerReadonlyWallet = class _ServiceWorkerReadonlyWallet {
18449
18613
  };
18450
18614
  try {
18451
18615
  const response = await this.sendMessage(message);
18452
- return response.payload.vtxos.map(chunkFNCQJLR2_cjs.normalizeVtxo);
18616
+ return response.payload.vtxos.map(chunkAB67CMHS_cjs.normalizeVtxo);
18453
18617
  } catch (error) {
18454
18618
  throw new Error(`Failed to get vtxos: ${error}`);
18455
18619
  }
@@ -18474,7 +18638,7 @@ var ServiceWorkerReadonlyWallet = class _ServiceWorkerReadonlyWallet {
18474
18638
  };
18475
18639
  try {
18476
18640
  const response = await this.sendMessage(message);
18477
- return response.payload.vtxos.map(chunkFNCQJLR2_cjs.normalizeVtxo);
18641
+ return response.payload.vtxos.map(chunkAB67CMHS_cjs.normalizeVtxo);
18478
18642
  } catch (error) {
18479
18643
  throw new Error(`Failed to get spendable vtxos: ${error}`);
18480
18644
  }
@@ -18605,7 +18769,7 @@ var ServiceWorkerReadonlyWallet = class _ServiceWorkerReadonlyWallet {
18605
18769
  };
18606
18770
  try {
18607
18771
  const response = await sendContractMessage(message);
18608
- return response.payload.vtxos.map(chunkFNCQJLR2_cjs.normalizeVtxo);
18772
+ return response.payload.vtxos.map(chunkAB67CMHS_cjs.normalizeVtxo);
18609
18773
  } catch (e) {
18610
18774
  throw new Error("Failed to annotate vtxos");
18611
18775
  }
@@ -19056,12 +19220,16 @@ var ServiceWorkerWallet = class _ServiceWorkerWallet extends ServiceWorkerReadon
19056
19220
  throw error;
19057
19221
  }
19058
19222
  }
19059
- async send(...recipients) {
19223
+ async send(...args) {
19224
+ const [first] = args;
19225
+ const { recipients, selectedVtxos } = args.length === 1 && first && "recipients" in first ? first : { recipients: args, selectedVtxos: void 0 };
19060
19226
  const message = {
19061
19227
  tag: this.messageTag,
19062
19228
  type: "SEND",
19063
19229
  id: getRandomId(),
19064
- payload: { recipients }
19230
+ // Omitted rather than sent as `undefined`, so an older worker sees
19231
+ // exactly the payload it saw before.
19232
+ payload: selectedVtxos ? { recipients, selectedVtxos } : { recipients }
19065
19233
  };
19066
19234
  try {
19067
19235
  const response = await this.sendMessage(message);
@@ -19173,7 +19341,7 @@ var ServiceWorkerWallet = class _ServiceWorkerWallet extends ServiceWorkerReadon
19173
19341
  };
19174
19342
  try {
19175
19343
  const response = await wallet.sendMessage(message);
19176
- return response.payload.vtxos.map(chunkFNCQJLR2_cjs.normalizeVtxo);
19344
+ return response.payload.vtxos.map(chunkAB67CMHS_cjs.normalizeVtxo);
19177
19345
  } catch (e) {
19178
19346
  throw new Error(`Failed to get expiring vtxos: ${e}`);
19179
19347
  }
@@ -19285,12 +19453,12 @@ var OnchainWallet = class _OnchainWallet {
19285
19453
  * @returns Configured onchain wallet
19286
19454
  * @throws Error if the configured identity cannot produce a valid x-only public key
19287
19455
  */
19288
- static async create(identity, networkName = chunkFNCQJLR2_cjs.DEFAULT_NETWORK_NAME, provider) {
19456
+ static async create(identity, networkName = chunkAB67CMHS_cjs.DEFAULT_NETWORK_NAME, provider) {
19289
19457
  const pubkey = await identity.xOnlyPublicKey();
19290
19458
  if (!pubkey) {
19291
19459
  throw new Error("Invalid configured public key");
19292
19460
  }
19293
- const network = chunkFNCQJLR2_cjs.getNetwork(networkName);
19461
+ const network = chunkAB67CMHS_cjs.getNetwork(networkName);
19294
19462
  const onchainProvider = provider || new EsploraProvider(ESPLORA_URL[networkName]);
19295
19463
  const onchainP2TR = btcSigner.p2tr(pubkey, void 0, network);
19296
19464
  return new _OnchainWallet(identity, network, onchainP2TR, onchainProvider);
@@ -19396,7 +19564,7 @@ var OnchainWallet = class _OnchainWallet {
19396
19564
  if (!inputs) {
19397
19565
  throw new Error("Fee estimation failed");
19398
19566
  }
19399
- let tx = new chunkFNCQJLR2_cjs.Transaction();
19567
+ let tx = new chunkAB67CMHS_cjs.Transaction();
19400
19568
  for (const input of inputs) {
19401
19569
  tx.addInput({
19402
19570
  txid: input.txid,
@@ -19454,7 +19622,7 @@ var OnchainWallet = class _OnchainWallet {
19454
19622
  * @throws If the parent has no anchor, or funding cannot be selected/signed
19455
19623
  */
19456
19624
  async bumpAnchor(parentHex, feeRate) {
19457
- const parent = chunkFNCQJLR2_cjs.Transaction.fromRaw(base.hex.decode(parentHex));
19625
+ const parent = chunkAB67CMHS_cjs.Transaction.fromRaw(base.hex.decode(parentHex));
19458
19626
  const coins = (await this.getCoins()).filter((c) => c.status.confirmed);
19459
19627
  const child = await this.buildBumpPackage(parent, feeRate, coins);
19460
19628
  return [parent.hex, child.hex];
@@ -20219,7 +20387,7 @@ exports.BIP322 = void 0;
20219
20387
  async function sign2(message, identity, network) {
20220
20388
  const xOnlyPubKey = await identity.xOnlyPublicKey();
20221
20389
  const payment = btcSigner.p2tr(xOnlyPubKey, void 0, network);
20222
- const toSpend = chunkFNCQJLR2_cjs.craftToSpendTx(message, payment.script, TAG_BIP322);
20390
+ const toSpend = chunkAB67CMHS_cjs.craftToSpendTx(message, payment.script, TAG_BIP322);
20223
20391
  const toSign = craftBIP322ToSignP2TR(toSpend, payment.script, xOnlyPubKey);
20224
20392
  const signed = await identity.sign(toSign, [0]);
20225
20393
  signed.finalizeIdx(0);
@@ -20277,7 +20445,7 @@ function verifyP2TR(message, witnessItems, pkScript, pubkey) {
20277
20445
  if (sighashType !== btcSigner.SigHash.DEFAULT && sighashType !== btcSigner.SigHash.ALL) {
20278
20446
  return false;
20279
20447
  }
20280
- const toSpend = chunkFNCQJLR2_cjs.craftToSpendTx(message, pkScript, TAG_BIP322);
20448
+ const toSpend = chunkAB67CMHS_cjs.craftToSpendTx(message, pkScript, TAG_BIP322);
20281
20449
  const toSign = craftBIP322ToSignP2TR(toSpend, pkScript, pubkey);
20282
20450
  const sighash = toSign.preimageWitnessV1(0, [pkScript], sighashType, [0n]);
20283
20451
  const rawSig = sig.length === 65 ? sig.subarray(0, 64) : sig;
@@ -20298,7 +20466,7 @@ function verifyP2WPKH(message, witnessItems, pkScript, addressHash) {
20298
20466
  }
20299
20467
  const sighashType = sigWithHash[sigWithHash.length - 1];
20300
20468
  const derSig = sigWithHash.subarray(0, sigWithHash.length - 1);
20301
- const toSpend = chunkFNCQJLR2_cjs.craftToSpendTx(message, pkScript, TAG_BIP322);
20469
+ const toSpend = chunkAB67CMHS_cjs.craftToSpendTx(message, pkScript, TAG_BIP322);
20302
20470
  const toSign = craftBIP322ToSignSimple(toSpend, pkScript);
20303
20471
  const scriptCode = btcSigner.OutScript.encode({ type: "pkh", hash: addressHash });
20304
20472
  const sighash = toSign.preimageWitnessV0(0, scriptCode, sighashType, 0n);
@@ -20351,7 +20519,7 @@ function encodeCompactSize(n) {
20351
20519
  return buf;
20352
20520
  }
20353
20521
  function craftBIP322ToSignP2TR(toSpend, pkScript, tapInternalKey) {
20354
- const tx = new chunkFNCQJLR2_cjs.Transaction({ version: 0 });
20522
+ const tx = new chunkAB67CMHS_cjs.Transaction({ version: 0 });
20355
20523
  tx.addInput({
20356
20524
  txid: toSpend.id,
20357
20525
  index: 0,
@@ -20365,12 +20533,12 @@ function craftBIP322ToSignP2TR(toSpend, pkScript, tapInternalKey) {
20365
20533
  });
20366
20534
  tx.addOutput({
20367
20535
  amount: 0n,
20368
- script: chunkFNCQJLR2_cjs.OP_RETURN_EMPTY_PKSCRIPT
20536
+ script: chunkAB67CMHS_cjs.OP_RETURN_EMPTY_PKSCRIPT
20369
20537
  });
20370
20538
  return tx;
20371
20539
  }
20372
20540
  function craftBIP322ToSignSimple(toSpend, pkScript) {
20373
- const tx = new chunkFNCQJLR2_cjs.Transaction({ version: 0 });
20541
+ const tx = new chunkAB67CMHS_cjs.Transaction({ version: 0 });
20374
20542
  tx.addInput({
20375
20543
  txid: toSpend.id,
20376
20544
  index: 0,
@@ -20382,7 +20550,7 @@ function craftBIP322ToSignSimple(toSpend, pkScript) {
20382
20550
  });
20383
20551
  tx.addOutput({
20384
20552
  amount: 0n,
20385
- script: chunkFNCQJLR2_cjs.OP_RETURN_EMPTY_PKSCRIPT
20553
+ script: chunkAB67CMHS_cjs.OP_RETURN_EMPTY_PKSCRIPT
20386
20554
  });
20387
20555
  return tx;
20388
20556
  }
@@ -20513,7 +20681,7 @@ var RestEmulatorProvider = class {
20513
20681
  }
20514
20682
  };
20515
20683
  function finalizeVirtualTx(type, psbtBase64) {
20516
- const tx = chunkFNCQJLR2_cjs.Transaction.fromPSBT(base.base64.decode(psbtBase64));
20684
+ const tx = chunkAB67CMHS_cjs.Transaction.fromPSBT(base.base64.decode(psbtBase64));
20517
20685
  if (type === "INDEXER_CHAINED_TX_TYPE_TREE" /* TREE */) {
20518
20686
  const input = tx.getInput(0);
20519
20687
  if (!input) {
@@ -20540,14 +20708,14 @@ var ExitPathError = class extends Error {
20540
20708
  reason;
20541
20709
  };
20542
20710
  function delayWeight(sequence) {
20543
- const t = chunkFNCQJLR2_cjs.sequenceToTimelock(sequence);
20711
+ const t = chunkAB67CMHS_cjs.sequenceToTimelock(sequence);
20544
20712
  return t.type === "blocks" ? Number(t.value) : Number(t.value) / 600;
20545
20713
  }
20546
20714
  async function resolveUnilateralPath(params) {
20547
20715
  const { vtxo, scriptHex, contractRepository } = params;
20548
20716
  const contract = contractRepository ? (await contractRepository.getContracts({ script: scriptHex }))[0] : void 0;
20549
20717
  if (contract) {
20550
- const handler = chunkSF5NKAUA_cjs.contractHandlers.get(contract.type);
20718
+ const handler = chunkOL7V43WS_cjs.contractHandlers.get(contract.type);
20551
20719
  if (!handler) {
20552
20720
  throw new ExitPathError(
20553
20721
  "no-handler",
@@ -20570,12 +20738,12 @@ async function resolveUnilateralPath(params) {
20570
20738
  paths.sort((a, b) => delayWeight(a.sequence) - delayWeight(b.sequence));
20571
20739
  return { selection: paths[0], label: `${contract.type}:unilateral` };
20572
20740
  }
20573
- const decoded = chunkFNCQJLR2_cjs.VtxoScript.decode(vtxo.tapTree);
20741
+ const decoded = chunkAB67CMHS_cjs.VtxoScript.decode(vtxo.tapTree);
20574
20742
  let best;
20575
20743
  for (const exit of decoded.exitPaths()) {
20576
20744
  const leaf = decoded.findLeaf(base.hex.encode(exit.script));
20577
20745
  if (!leaf) continue;
20578
- const sequence = chunkFNCQJLR2_cjs.timelockToSequence(exit.params.timelock);
20746
+ const sequence = chunkAB67CMHS_cjs.timelockToSequence(exit.params.timelock);
20579
20747
  const weight = delayWeight(sequence);
20580
20748
  if (!best || weight < best.weight) {
20581
20749
  best = { selection: { leaf, sequence }, weight };
@@ -20761,14 +20929,14 @@ async function prepareUnrollTransaction(wallet, vtxoTxIds, outputAddress) {
20761
20929
  }
20762
20930
  const resolved = await resolveUnilateralPath({
20763
20931
  vtxo,
20764
- scriptHex: base.hex.encode(chunkFNCQJLR2_cjs.VtxoScript.decode(vtxo.tapTree).pkScript),
20932
+ scriptHex: base.hex.encode(chunkAB67CMHS_cjs.VtxoScript.decode(vtxo.tapTree).pkScript),
20765
20933
  contractRepository: wallet.contractRepository,
20766
20934
  walletPubKeyHex: base.hex.encode(await wallet.identity.xOnlyPublicKey()),
20767
20935
  currentTime: Date.now()
20768
20936
  });
20769
20937
  const spendingLeaf = resolved.selection.leaf;
20770
20938
  const sequence = resolved.selection.sequence;
20771
- const timelock = chunkFNCQJLR2_cjs.sequenceToTimelock(sequence);
20939
+ const timelock = chunkAB67CMHS_cjs.sequenceToTimelock(sequence);
20772
20940
  const elapsed = timelock.type === "blocks" ? chainTip.height >= txStatus.blockHeight + Number(timelock.value) : chainTip.time >= txStatus.blockTime + Number(timelock.value);
20773
20941
  if (!elapsed) {
20774
20942
  throw new Error(`no available exit path found for vtxo ${vtxo.txid}:${vtxo.vout}`);
@@ -20781,7 +20949,7 @@ async function prepareUnrollTransaction(wallet, vtxoTxIds, outputAddress) {
20781
20949
  sequence,
20782
20950
  witnessUtxo: {
20783
20951
  amount: BigInt(vtxo.value),
20784
- script: chunkFNCQJLR2_cjs.VtxoScript.decode(vtxo.tapTree).pkScript
20952
+ script: chunkAB67CMHS_cjs.VtxoScript.decode(vtxo.tapTree).pkScript
20785
20953
  },
20786
20954
  sighashType: btcSigner.SigHash.DEFAULT
20787
20955
  });
@@ -20791,7 +20959,7 @@ async function prepareUnrollTransaction(wallet, vtxoTxIds, outputAddress) {
20791
20959
  btcSigner.TaprootControlBlock.encode(spendingLeaf[0]).length
20792
20960
  );
20793
20961
  }
20794
- const tx = new chunkFNCQJLR2_cjs.Transaction({ version: 2 });
20962
+ const tx = new chunkAB67CMHS_cjs.Transaction({ version: 2 });
20795
20963
  for (const input of inputs) {
20796
20964
  tx.addInput(input);
20797
20965
  }
@@ -20858,7 +21026,7 @@ async function buildSignedSweep(params) {
20858
21026
  `uneconomic vtxo ${vtxo.txid}:${vtxo.vout}: value ${vtxo.value} - fee ${fee} < dust`
20859
21027
  );
20860
21028
  }
20861
- const tx = new chunkFNCQJLR2_cjs.Transaction({ version: 2 });
21029
+ const tx = new chunkAB67CMHS_cjs.Transaction({ version: 2 });
20862
21030
  tx.addInput({
20863
21031
  txid: vtxo.txid,
20864
21032
  index: vtxo.vout,
@@ -20883,7 +21051,7 @@ async function buildSignedSweep(params) {
20883
21051
  finalScriptWitness: [
20884
21052
  tapScriptSig[0][1],
20885
21053
  ...path.extraWitness,
20886
- chunkFNCQJLR2_cjs.scriptFromTapLeafScript(path.leaf),
21054
+ chunkAB67CMHS_cjs.scriptFromTapLeafScript(path.leaf),
20887
21055
  btcSigner.TaprootControlBlock.encode(controlBlock)
20888
21056
  ]
20889
21057
  });
@@ -20913,7 +21081,7 @@ async function resolveFeeRate(opts) {
20913
21081
  }
20914
21082
  async function selectExitVtxos(opts) {
20915
21083
  if (!opts.vtxos) return opts.wallet.getVtxos();
20916
- const res = await chunkFNCQJLR2_cjs.getNormalizedVtxos(opts.wallet.indexerProvider, { outpoints: opts.vtxos });
21084
+ const res = await chunkAB67CMHS_cjs.getNormalizedVtxos(opts.wallet.indexerProvider, { outpoints: opts.vtxos });
20917
21085
  const tapTrees = /* @__PURE__ */ new Map();
20918
21086
  const out = [];
20919
21087
  for (const vtxo of res.vtxos) {
@@ -20928,7 +21096,7 @@ async function selectExitVtxos(opts) {
20928
21096
  `no contract registered for vtxo script ${vtxo.script} \u2014 register the contract before exiting`
20929
21097
  );
20930
21098
  }
20931
- const handler = chunkSF5NKAUA_cjs.contractHandlers.get(contract.type);
21099
+ const handler = chunkOL7V43WS_cjs.contractHandlers.get(contract.type);
20932
21100
  if (!handler) {
20933
21101
  throw new Error(`no contract handler registered for type '${contract.type}'`);
20934
21102
  }
@@ -20958,7 +21126,7 @@ async function computeExitLayout(opts, feeRate) {
20958
21126
  if (pendingNodes.length > 0) {
20959
21127
  const txs = await resolver.getVirtualTxs(pendingNodes.map((n) => n.txid));
20960
21128
  for (const psbt of txs) {
20961
- psbts.set(chunkFNCQJLR2_cjs.Transaction.fromPSBT(base.base64.decode(psbt)).id, psbt);
21129
+ psbts.set(chunkAB67CMHS_cjs.Transaction.fromPSBT(base.base64.decode(psbt)).id, psbt);
20962
21130
  }
20963
21131
  }
20964
21132
  const childVsize = Number(
@@ -20994,7 +21162,7 @@ async function computeExitLayout(opts, feeRate) {
20994
21162
  try {
20995
21163
  const resolved = await resolveUnilateralPath({
20996
21164
  vtxo,
20997
- scriptHex: base.hex.encode(chunkFNCQJLR2_cjs.VtxoScript.decode(vtxo.tapTree).pkScript),
21165
+ scriptHex: base.hex.encode(chunkAB67CMHS_cjs.VtxoScript.decode(vtxo.tapTree).pkScript),
20998
21166
  contractRepository: wallet.contractRepository,
20999
21167
  walletPubKeyHex,
21000
21168
  currentTime: Date.now()
@@ -21013,7 +21181,7 @@ async function computeExitLayout(opts, feeRate) {
21013
21181
  });
21014
21182
  continue;
21015
21183
  }
21016
- const t = chunkFNCQJLR2_cjs.sequenceToTimelock(resolved.selection.sequence);
21184
+ const t = chunkAB67CMHS_cjs.sequenceToTimelock(resolved.selection.sequence);
21017
21185
  const delay = { type: t.type, value: Number(t.value) };
21018
21186
  infos.push({ outpoint, value: vtxo.value, sweepFee, path: resolved.label, delay });
21019
21187
  sweeps.push({ vtxo, resolved, sweepFee, delay });
@@ -21352,7 +21520,7 @@ async function prepare(opts) {
21352
21520
  txid: sweep.vtxo.txid,
21353
21521
  vout: sweep.vtxo.vout,
21354
21522
  value: sweep.vtxo.value,
21355
- pkScript: chunkFNCQJLR2_cjs.VtxoScript.decode(sweep.vtxo.tapTree).pkScript
21523
+ pkScript: chunkAB67CMHS_cjs.VtxoScript.decode(sweep.vtxo.tapTree).pkScript
21356
21524
  },
21357
21525
  path: sweep.resolved.selection,
21358
21526
  outputAddress: opts.sweepAddress,
@@ -21437,7 +21605,7 @@ async function prepare(opts) {
21437
21605
  if (newFee <= splitterFee) break;
21438
21606
  splitterFee = newFee;
21439
21607
  }
21440
- const splitter = new chunkFNCQJLR2_cjs.Transaction({ version: 2 });
21608
+ const splitter = new chunkAB67CMHS_cjs.Transaction({ version: 2 });
21441
21609
  for (const coin of selected.inputs) {
21442
21610
  splitter.addInput({
21443
21611
  txid: coin.txid,
@@ -21580,41 +21748,41 @@ var UnilateralExit = {
21580
21748
  // src/arkade/index.ts
21581
21749
  var arkade_exports = {};
21582
21750
  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,
21751
+ ARKADE_OP: () => chunkOL7V43WS_cjs.ARKADE_OP,
21752
+ ARKADE_OPCODES: () => chunkOL7V43WS_cjs.ARKADE_OPCODES,
21753
+ ARKADE_OPCODE_NAMES: () => chunkOL7V43WS_cjs.ARKADE_OPCODE_NAMES,
21754
+ ARKADE_OPCODE_VALUES: () => chunkOL7V43WS_cjs.ARKADE_OPCODE_VALUES,
21755
+ ARKADE_OPS: () => chunkOL7V43WS_cjs.ARKADE_OPS,
21588
21756
  Arkade: () => Arkade,
21589
21757
  ArkadeContract: () => ArkadeContract,
21590
- ArkadeProgramScript: () => chunkSF5NKAUA_cjs.ArkadeProgramScript,
21591
- ArkadeScript: () => chunkSF5NKAUA_cjs.ArkadeScript,
21758
+ ArkadeProgramScript: () => chunkOL7V43WS_cjs.ArkadeProgramScript,
21759
+ ArkadeScript: () => chunkOL7V43WS_cjs.ArkadeScript,
21592
21760
  ArkadeTransactionBuilder: () => ArkadeTransactionBuilder,
21593
- BigNum: () => chunkSF5NKAUA_cjs.bignum_exports,
21761
+ BigNum: () => chunkOL7V43WS_cjs.bignum_exports,
21594
21762
  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,
21763
+ OPCODE_NAMES: () => chunkOL7V43WS_cjs.OPCODE_NAMES,
21764
+ OPCODE_VALUES: () => chunkOL7V43WS_cjs.OPCODE_VALUES,
21765
+ SUPPORTED_PROGRAM_VERSION: () => chunkOL7V43WS_cjs.SUPPORTED_PROGRAM_VERSION,
21598
21766
  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,
21767
+ arkadeScriptHash: () => chunkOL7V43WS_cjs.arkadeScriptHash,
21768
+ arkadeWitnessHash: () => chunkOL7V43WS_cjs.arkadeWitnessHash,
21769
+ asmToBytes: () => chunkOL7V43WS_cjs.asmToBytes,
21770
+ bytesToASM: () => chunkOL7V43WS_cjs.bytesToASM,
21771
+ computeArkadeScriptPublicKey: () => chunkOL7V43WS_cjs.computeArkadeScriptPublicKey,
21604
21772
  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
21773
+ deserializeArkadeContractParams: () => chunkOL7V43WS_cjs.deserializeArkadeContractParams,
21774
+ fromASM: () => chunkOL7V43WS_cjs.fromASM,
21775
+ getOpcodeName: () => chunkOL7V43WS_cjs.getOpcodeName,
21776
+ getOpcodeValue: () => chunkOL7V43WS_cjs.getOpcodeValue,
21777
+ parseArtifact: () => chunkOL7V43WS_cjs.parseArtifact,
21778
+ resolveAsm: () => chunkOL7V43WS_cjs.resolveAsm,
21779
+ serializeArkadeContractParams: () => chunkOL7V43WS_cjs.serializeArkadeContractParams,
21780
+ stringifyArtifact: () => chunkOL7V43WS_cjs.stringifyArtifact,
21781
+ toASM: () => chunkOL7V43WS_cjs.toASM,
21782
+ validateProgram: () => chunkOL7V43WS_cjs.validateProgram,
21783
+ witnessRefToBytes: () => chunkOL7V43WS_cjs.witnessRefToBytes
21616
21784
  });
21617
- var isVtxoCoin = (input) => chunkFNCQJLR2_cjs.isVirtualCoin(input);
21785
+ var isVtxoCoin = (input) => chunkAB67CMHS_cjs.isVirtualCoin(input);
21618
21786
  function createArkadeBatchHandler(intentId, inputs, signer, signedProof, message, session, arkProvider, emulator, network, recipients, batchExpiryPolicy) {
21619
21787
  let batchId;
21620
21788
  let sweepTapTreeRoot;
@@ -21635,7 +21803,7 @@ function createArkadeBatchHandler(intentId, inputs, signer, signedProof, message
21635
21803
  );
21636
21804
  await arkProvider.confirmRegistration(intentId);
21637
21805
  batchId = event.id;
21638
- const sweepTapscript = chunkFNCQJLR2_cjs.CSVMultisigTapscript.encode({
21806
+ const sweepTapscript = chunkAB67CMHS_cjs.CSVMultisigTapscript.encode({
21639
21807
  timelock,
21640
21808
  pubkeys: [base.hex.decode(info.forfeitPubkey).subarray(1)]
21641
21809
  }).script;
@@ -21649,7 +21817,7 @@ function createArkadeBatchHandler(intentId, inputs, signer, signedProof, message
21649
21817
  if (!xOnlyPubkeys.includes(base.hex.encode(xonlySignerPubKey))) {
21650
21818
  return { skip: true };
21651
21819
  }
21652
- const commitmentTx = chunkFNCQJLR2_cjs.Transaction.fromPSBT(base.base64.decode(event.unsignedCommitmentTx));
21820
+ const commitmentTx = chunkAB67CMHS_cjs.Transaction.fromPSBT(base.base64.decode(event.unsignedCommitmentTx));
21653
21821
  validateVtxoTxGraph(vtxoTree, commitmentTx, sweepTapTreeRoot);
21654
21822
  if (recipients && recipients.length > 0) {
21655
21823
  validateBatchRecipients(commitmentTx, vtxoTree.leaves(), recipients, network);
@@ -21681,7 +21849,7 @@ function createArkadeBatchHandler(intentId, inputs, signer, signedProof, message
21681
21849
  if (connectorTree) {
21682
21850
  validateConnectorsTxGraph(event.commitmentTx, connectorTree);
21683
21851
  }
21684
- let commitmentPsbt = chunkFNCQJLR2_cjs.Transaction.fromPSBT(base.base64.decode(event.commitmentTx));
21852
+ let commitmentPsbt = chunkAB67CMHS_cjs.Transaction.fromPSBT(base.base64.decode(event.commitmentTx));
21685
21853
  assertFinalCommitmentMatchesValidated(
21686
21854
  commitmentPsbt,
21687
21855
  validatedCommitmentTxid,
@@ -21716,7 +21884,7 @@ function createArkadeBatchHandler(intentId, inputs, signer, signedProof, message
21716
21884
  boardingIndices.push(boardingIdx);
21717
21885
  continue;
21718
21886
  }
21719
- if (chunkFNCQJLR2_cjs.isRecoverable(input) || isSubdust(input, info.dust)) {
21887
+ if (chunkAB67CMHS_cjs.isRecoverable(input) || isSubdust(input, info.dust)) {
21720
21888
  continue;
21721
21889
  }
21722
21890
  if (connectorIndex >= connectorLeaves.length) {
@@ -21737,7 +21905,7 @@ function createArkadeBatchHandler(intentId, inputs, signer, signedProof, message
21737
21905
  index: input.vout,
21738
21906
  witnessUtxo: {
21739
21907
  amount: BigInt(input.value),
21740
- script: chunkFNCQJLR2_cjs.VtxoScript.decode(input.tapTree).pkScript
21908
+ script: chunkAB67CMHS_cjs.VtxoScript.decode(input.tapTree).pkScript
21741
21909
  },
21742
21910
  sighashType: btcSigner.SigHash.DEFAULT,
21743
21911
  tapLeafScript: [input.forfeitTapLeafScript]
@@ -21829,11 +21997,11 @@ var Arkade = class _Arkade {
21829
21997
  static async connect(opts) {
21830
21998
  const info = await opts.arkade.getInfo();
21831
21999
  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;
22000
+ const checkpoint = chunkAB67CMHS_cjs.CSVMultisigTapscript.decode(base.hex.decode(info.checkpointTapscript));
22001
+ const network = opts.network ?? chunkAB67CMHS_cjs.DEFAULT_NETWORK;
21834
22002
  let emulatorKey;
21835
22003
  if (opts.emulator) {
21836
- emulatorKey = base.hex.decode(chunkFNCQJLR2_cjs.resolveEmulatorPubkey(network, opts.emulatorPubkey));
22004
+ emulatorKey = base.hex.decode(chunkAB67CMHS_cjs.resolveEmulatorPubkey(network, opts.emulatorPubkey));
21837
22005
  }
21838
22006
  let userKey;
21839
22007
  if (opts.identity) {
@@ -21864,7 +22032,7 @@ var Arkade = class _Arkade {
21864
22032
  * key respectively; explicit args always win.
21865
22033
  */
21866
22034
  contract(program, args = {}) {
21867
- const declared = (program.params ?? []).map(chunkSF5NKAUA_cjs.inputName);
22035
+ const declared = (program.params ?? []).map(chunkOL7V43WS_cjs.inputName);
21868
22036
  if (declared.includes("server") && args.server === void 0) {
21869
22037
  args = { ...args, server: this.serverKey };
21870
22038
  }
@@ -21884,7 +22052,7 @@ var ArkadeContract = class _ArkadeContract {
21884
22052
  userKey: client.userKey,
21885
22053
  emulatorKey: client.emulatorKey
21886
22054
  };
21887
- this.vtxoScript = new chunkSF5NKAUA_cjs.ArkadeProgramScript(program, args, this.keys);
22055
+ this.vtxoScript = new chunkOL7V43WS_cjs.ArkadeProgramScript(program, args, this.keys);
21888
22056
  this.tapTree = this.vtxoScript.encode();
21889
22057
  this.compiled = this.vtxoScript.compiled;
21890
22058
  }
@@ -21912,7 +22080,7 @@ var ArkadeContract = class _ArkadeContract {
21912
22080
  `ArkadeContract.fromContract: expected contract type 'arkade', got '${contract.type}'`
21913
22081
  );
21914
22082
  }
21915
- const typed = chunkSF5NKAUA_cjs.deserializeArkadeContractParams(contract.params);
22083
+ const typed = chunkOL7V43WS_cjs.deserializeArkadeContractParams(contract.params);
21916
22084
  return new _ArkadeContract(client, typed.program, typed.args, {
21917
22085
  serverKey: typed.serverKey,
21918
22086
  userKey: typed.userKey,
@@ -21953,7 +22121,7 @@ var ArkadeContract = class _ArkadeContract {
21953
22121
  toContractParams() {
21954
22122
  return {
21955
22123
  type: "arkade",
21956
- params: chunkSF5NKAUA_cjs.serializeArkadeContractParams({
22124
+ params: chunkOL7V43WS_cjs.serializeArkadeContractParams({
21957
22125
  program: this.program,
21958
22126
  args: this.args,
21959
22127
  serverKey: this.keys.serverKey,
@@ -21998,13 +22166,13 @@ var ArkadeContract = class _ArkadeContract {
21998
22166
  const [registered] = await manager.getContracts({ script: scriptHex });
21999
22167
  if (registered) {
22000
22168
  const [withVtxos] = await manager.getContractsWithVtxos({ script: scriptHex });
22001
- return (withVtxos?.vtxos ?? []).filter((v) => !chunkFNCQJLR2_cjs.hasTerminalSpend(v));
22169
+ return (withVtxos?.vtxos ?? []).filter((v) => !chunkAB67CMHS_cjs.hasTerminalSpend(v));
22002
22170
  }
22003
22171
  }
22004
22172
  if (!this.client.indexer) {
22005
22173
  throw new Error("ArkadeContract.getUtxos: an indexer is required");
22006
22174
  }
22007
- const { vtxos } = await chunkFNCQJLR2_cjs.getNormalizedVtxos(this.client.indexer, {
22175
+ const { vtxos } = await chunkAB67CMHS_cjs.getNormalizedVtxos(this.client.indexer, {
22008
22176
  scripts: [scriptHex],
22009
22177
  spendableOnly: true
22010
22178
  });
@@ -22106,12 +22274,12 @@ var ArkadeTransactionBuilder = class {
22106
22274
  this.contract.client.checkpoint
22107
22275
  );
22108
22276
  if (coin.sourceTx) {
22109
- chunkFNCQJLR2_cjs.setArkPsbtField(arkTx, 0, chunkFNCQJLR2_cjs.PrevArkTxField, coin.sourceTx);
22277
+ chunkAB67CMHS_cjs.setArkPsbtField(arkTx, 0, chunkAB67CMHS_cjs.PrevArkTxField, coin.sourceTx);
22110
22278
  }
22111
22279
  const condition = (def.tapscript.witness ?? []).map((w) => this.witnessBytes(w));
22112
22280
  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);
22281
+ chunkAB67CMHS_cjs.setArkPsbtField(arkTx, 0, chunkAB67CMHS_cjs.ConditionWitness, condition);
22282
+ chunkAB67CMHS_cjs.setArkPsbtField(checkpoints[0], 0, chunkAB67CMHS_cjs.ConditionWitness, condition);
22115
22283
  }
22116
22284
  const packets = [];
22117
22285
  if (this.assetSpecs.length > 0) {
@@ -22150,7 +22318,7 @@ var ArkadeTransactionBuilder = class {
22150
22318
  base.base64.encode(signedArk2.toPSBT()),
22151
22319
  signedCps.map((c) => base.base64.encode(c.toPSBT()))
22152
22320
  );
22153
- const txid = chunkFNCQJLR2_cjs.Transaction.fromPSBT(base.base64.decode(res2.signedArkTx)).id;
22321
+ const txid = chunkAB67CMHS_cjs.Transaction.fromPSBT(base.base64.decode(res2.signedArkTx)).id;
22154
22322
  return {
22155
22323
  txid,
22156
22324
  signedArkTx: res2.signedArkTx,
@@ -22209,23 +22377,23 @@ var ArkadeTransactionBuilder = class {
22209
22377
  }
22210
22378
  buildAssetPacket() {
22211
22379
  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(
22380
+ const id = typeof s.assetId === "string" ? chunkLG5GY73A_cjs.AssetId.fromString(s.assetId) : chunkLG5GY73A_cjs.AssetId.fromBytes(s.assetId);
22381
+ return chunkLG5GY73A_cjs.AssetGroup.create(
22214
22382
  id,
22215
22383
  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))
22384
+ s.inputs.map((i) => chunkLG5GY73A_cjs.AssetInput.create(i.vin, i.amount)),
22385
+ s.outputs.map((o) => chunkLG5GY73A_cjs.AssetOutput.create(o.vout, o.amount)),
22386
+ (s.metadata ?? []).map((m) => chunkLG5GY73A_cjs.Metadata.create(m.key, m.value))
22219
22387
  );
22220
22388
  });
22221
- return chunk2JHN5RCY_cjs.Packet.create(groups);
22389
+ return chunkLG5GY73A_cjs.Packet.create(groups);
22222
22390
  }
22223
22391
  witnessBytes(ref) {
22224
- return chunkSF5NKAUA_cjs.witnessRefToBytes(ref, this.args, this.contract.args);
22392
+ return chunkOL7V43WS_cjs.witnessRefToBytes(ref, this.args, this.contract.args);
22225
22393
  }
22226
22394
  };
22227
22395
  function bindInputs(fn, callArgs) {
22228
- const names = (fn.def.inputs ?? []).map(chunkSF5NKAUA_cjs.inputName);
22396
+ const names = (fn.def.inputs ?? []).map(chunkOL7V43WS_cjs.inputName);
22229
22397
  if (callArgs.length !== names.length) {
22230
22398
  throw new Error(`${fn.name}: expected ${names.length} argument(s), got ${callArgs.length}`);
22231
22399
  }
@@ -22614,6 +22782,7 @@ function createDefaultPaymentRouter(wallet) {
22614
22782
  */
22615
22783
 
22616
22784
  exports.ARKADE_MAGIC = ARKADE_MAGIC;
22785
+ exports.ARKADE_SALTED_PREIMAGE_TAG = ARKADE_SALTED_PREIMAGE_TAG;
22617
22786
  exports.ARKADE_SWAP_PREIMAGE_TAG = ARKADE_SWAP_PREIMAGE_TAG;
22618
22787
  exports.ActivityRegistry = ActivityRegistry;
22619
22788
  exports.AmbiguousRouteError = AmbiguousRouteError;
@@ -22717,6 +22886,7 @@ exports.btcTarget = btcTarget;
22717
22886
  exports.buildForfeitTx = buildForfeitTx;
22718
22887
  exports.buildOffchainTx = buildOffchainTx;
22719
22888
  exports.buildPreimageMessage = buildPreimageMessage;
22889
+ exports.buildSaltedPreimageMessage = buildSaltedPreimageMessage;
22720
22890
  exports.claimWithPreimageIdentity = claimWithPreimageIdentity;
22721
22891
  exports.classifyAgainstSignerSet = classifyAgainstSignerSet;
22722
22892
  exports.classifyContractSigner = classifyContractSigner;
@@ -22809,5 +22979,5 @@ exports.validateVtxoTxGraph = validateVtxoTxGraph;
22809
22979
  exports.verifyTapscriptSignatures = verifyTapscriptSignatures;
22810
22980
  exports.waitForIncomingFunds = waitForIncomingFunds;
22811
22981
  exports.warnAndFilterVtxosForScript = warnAndFilterVtxosForScript;
22812
- //# sourceMappingURL=chunk-3NUDA3MB.cjs.map
22813
- //# sourceMappingURL=chunk-3NUDA3MB.cjs.map
22982
+ //# sourceMappingURL=chunk-COOBS7ET.cjs.map
22983
+ //# sourceMappingURL=chunk-COOBS7ET.cjs.map