@gvnrdao/dh-sdk 0.0.311 → 0.0.313

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.
package/dist/index.js CHANGED
@@ -88,13 +88,15 @@ var init_deployment_addresses = __esm({
88
88
  PositionDelegateRegistry: "0x482369De283622E7b05731875ec137d4E3D208F9",
89
89
  FeeRecipientRegistry: "0x95795F8403DDb629E8527B2934C4e71f5fC0C374",
90
90
  BitcoinWithdrawalAddressRegistry: "0x6376D392097F0A81e51BD83960A97EA20eaf1dbe",
91
- CarryAgentRegistry: "0x5595CB538D44E6Cf179D20364fD631D0477e69f7"
91
+ CarryAgentRegistry: "0x5595CB538D44E6Cf179D20364fD631D0477e69f7",
92
+ AgentDelegationRegistry: "0xA6040Ee7c52220634C6cC565885d6956C95Faaf5",
93
+ DHAgentDelegate: "0x3Ea189b22Db147A7c79fF3FD8AaDfA8B0Bd0f4FB"
92
94
  },
93
95
  upgraded: {
94
96
  PositionManager: {
95
- previousImplementation: "0x1B113E63FA5b1Cd0cCaf28CACE83EAb9621c8e8A",
96
- newImplementation: "0x3a493909920DF104D4048c2c20270B9DAFC81716",
97
- upgradedAt: "2026-07-03T20:18:00.987Z",
97
+ previousImplementation: "0x3a493909920DF104D4048c2c20270B9DAFC81716",
98
+ newImplementation: "0x607a80aee6eF425C7eC7bA5230E5FAFC95B0388F",
99
+ upgradedAt: "2026-07-23T23:55:25.994Z",
98
100
  upgradedBy: "0xF20986F02420EF443AE9BE5092FB8A4975cF3aA6",
99
101
  reason: "Shared upgrade script: PositionManager implementation update"
100
102
  },
@@ -321,7 +323,7 @@ var init_deployment_addresses = __esm({
321
323
  CIRCUIT_BREAKER_MODULE_IMPL: "0xF6277dEF72D51312CC99616B5380f34Eb7603D75",
322
324
  ADMIN_MODULE_IMPL: "0xBBA86246169f81a307Fafff02C1e3D8456aab973",
323
325
  POSITION_MANAGER_VIEWS_IMPL: "0xA455B542cFb36AF8451fc420dB89e590E5c87cef",
324
- POSITION_MANAGER_IMPL: "0x3a493909920DF104D4048c2c20270B9DAFC81716",
326
+ POSITION_MANAGER_IMPL: "0x607a80aee6eF425C7eC7bA5230E5FAFC95B0388F",
325
327
  SIMPLE_PSM_V2: "0x19EcF7BA26e054fd4Ff06009A03070103dbBB058",
326
328
  SIMPLE_PSM_V2_IMPL: "0xE38010BE47B389922A1cd4b533470F0af7d20101",
327
329
  UCD_TOKEN_IMPL: "0xa6C8C4cfc7DD3dCE5F1259A4a1eAf8461aA8CeC8",
@@ -352,7 +354,10 @@ var init_deployment_addresses = __esm({
352
354
  BITCOIN_WITHDRAWAL_ADDRESS_REGISTRY: "0x6376D392097F0A81e51BD83960A97EA20eaf1dbe",
353
355
  BITCOIN_WITHDRAWAL_ADDRESS_REGISTRY_IMPL: "0xFF270BC4470dBA80430Bd1a3a66EB691599354fA",
354
356
  CARRY_AGENT_REGISTRY: "0x5595CB538D44E6Cf179D20364fD631D0477e69f7",
355
- CARRY_AGENT_REGISTRY_IMPL: "0x1b11a3D5e46F3672E643c997f0d569DFf0b64a01"
357
+ CARRY_AGENT_REGISTRY_IMPL: "0x1b11a3D5e46F3672E643c997f0d569DFf0b64a01",
358
+ AGENT_DELEGATION_REGISTRY: "0xA6040Ee7c52220634C6cC565885d6956C95Faaf5",
359
+ AGENT_DELEGATION_REGISTRY_IMPL: "0x4cCB77306A1EE0F1F686EeF83B66eD8796E6dd90",
360
+ DH_AGENT_DELEGATE: "0x3Ea189b22Db147A7c79fF3FD8AaDfA8B0Bd0f4FB"
356
361
  }
357
362
  };
358
363
  SEPOLIA_CONTRACTS = {
@@ -381,7 +386,9 @@ var init_deployment_addresses = __esm({
381
386
  PositionDelegateRegistry: "0x482369De283622E7b05731875ec137d4E3D208F9",
382
387
  FeeRecipientRegistry: "0x95795F8403DDb629E8527B2934C4e71f5fC0C374",
383
388
  BitcoinWithdrawalAddressRegistry: "0x6376D392097F0A81e51BD83960A97EA20eaf1dbe",
384
- CarryAgentRegistry: "0x5595CB538D44E6Cf179D20364fD631D0477e69f7"
389
+ CarryAgentRegistry: "0x5595CB538D44E6Cf179D20364fD631D0477e69f7",
390
+ AgentDelegationRegistry: "0xA6040Ee7c52220634C6cC565885d6956C95Faaf5",
391
+ DHAgentDelegate: "0x3Ea189b22Db147A7c79fF3FD8AaDfA8B0Bd0f4FB"
385
392
  };
386
393
  MAINNET_DEPLOYMENT = {
387
394
  network: "mainnet",
@@ -1303,30 +1310,30 @@ var require_pkg_src = __commonJS({
1303
1310
  }
1304
1311
  },
1305
1312
  btcTransactionSigner: {
1306
- cid: "QmSJkQAw5SJ39EGEwzWZJ39ApNN4834VgKS5rhm25YCgfk",
1313
+ cid: "QmZFzjpdwpiBxHPv3t1mhjv8hfPRD1hPZGJ7jUU9w6V2Ca",
1307
1314
  authorizedCidHex: cidToHex(
1308
- "QmSJkQAw5SJ39EGEwzWZJ39ApNN4834VgKS5rhm25YCgfk"
1315
+ "QmZFzjpdwpiBxHPv3t1mhjv8hfPRD1hPZGJ7jUU9w6V2Ca"
1309
1316
  ),
1310
1317
  name: "Btc Transaction Signer",
1311
1318
  description: "Production Btc Transaction Signer",
1312
1319
  version: "1.1.1",
1313
1320
  deployed: true,
1314
- deployedAt: 1784316496778,
1315
- size: 63679,
1316
- hash: "b12aa725797af5ef07f8e6945f05741f583d6e479a4670b1121e97c58fe63191"
1321
+ deployedAt: 1785173232972,
1322
+ size: 66562,
1323
+ hash: "13639ec13bfed381c3c9d81e17e37917446ba30d04d4d8e45809a6868139c3cb"
1317
1324
  },
1318
1325
  ucdMintValidator: {
1319
- cid: "QmYVRMfiSC641JPbE819szSDw3YrG6uSrZc27CZkyYTGtW",
1326
+ cid: "Qmb1TPCaNYRTHsnhZrE1J4BtVYNWBnWSneXRqyAco1XKku",
1320
1327
  authorizedCidHex: cidToHex(
1321
- "QmYVRMfiSC641JPbE819szSDw3YrG6uSrZc27CZkyYTGtW"
1328
+ "Qmb1TPCaNYRTHsnhZrE1J4BtVYNWBnWSneXRqyAco1XKku"
1322
1329
  ),
1323
1330
  name: "Ucd Mint Validator",
1324
1331
  description: "Production Ucd Mint Validator",
1325
1332
  version: "1.2.1",
1326
1333
  deployed: true,
1327
- deployedAt: 1784316505431,
1328
- size: 80381,
1329
- hash: "132a0a8e6e9a1b85d02e00c0e57eaa371d825717255a28c9e644e4b521760026",
1334
+ deployedAt: 1785173240530,
1335
+ size: 81596,
1336
+ hash: "fdaa7abb4ad28ae1f20f5cd6e3e03e5a8787fd6ac05938f51070ed16844f80f5",
1330
1337
  validatorWalletAddress: "0x82DB9F515957aA380B596C6eA2Bd30CEF181f236",
1331
1338
  pkp: {
1332
1339
  publicKey: "0x041ab17cd91fc5c0b761eea6092d032807561b621b82c488826776e04a9158d61ba64d809a4729f0501289d980732cb06d8dfd06999dd9c8efd2f495dad78b31bb",
@@ -1334,17 +1341,17 @@ var require_pkg_src = __commonJS({
1334
1341
  }
1335
1342
  },
1336
1343
  processPaymentValidator: {
1337
- cid: "QmadmdFDH6sS7YLusUuuLkkt7n51iUj1bJ5KKTLhmro2iQ",
1344
+ cid: "QmWSSAgmLtfVsRawHU2Uf72Xw4hM5T5Jcx2n7EVmEHQD1E",
1338
1345
  authorizedCidHex: cidToHex(
1339
- "QmadmdFDH6sS7YLusUuuLkkt7n51iUj1bJ5KKTLhmro2iQ"
1346
+ "QmWSSAgmLtfVsRawHU2Uf72Xw4hM5T5Jcx2n7EVmEHQD1E"
1340
1347
  ),
1341
1348
  name: "Process Payment Validator",
1342
1349
  description: "Production Process Payment Validator",
1343
1350
  version: "1.2.1",
1344
1351
  deployed: true,
1345
- deployedAt: 1784316520125,
1346
- size: 76534,
1347
- hash: "dbdf43d3f1636e0ee883d349ca28f24c5c38ed7e062b76ca75498aaf5fe594ea",
1352
+ deployedAt: 1785173245463,
1353
+ size: 77593,
1354
+ hash: "0f1015e51702abd9834e295ea12ac8dbd906909d25f72ad6a509c061e625c75d",
1348
1355
  validatorWalletAddress: "0x82DB9F515957aA380B596C6eA2Bd30CEF181f236",
1349
1356
  pkp: {
1350
1357
  publicKey: "0x04cfccb9b6c7addc79469c0e9fafebef4c70801302c62cdb26b610723a9b8527d23f98a40158c7340d83fd0e62d02b5ec74c12f7a86d98e8c6973b4811110f19ad",
@@ -1352,17 +1359,17 @@ var require_pkg_src = __commonJS({
1352
1359
  }
1353
1360
  },
1354
1361
  extendPositionValidator: {
1355
- cid: "QmespREceysQ7WPqGKg1VpHB3hf8zsreMY8HSjiQ2xoAN4",
1362
+ cid: "QmZyx9qUVyWu7deCJFLZxB1WDVRBgobs1Vm6m4ECGMbpkS",
1356
1363
  authorizedCidHex: cidToHex(
1357
- "QmespREceysQ7WPqGKg1VpHB3hf8zsreMY8HSjiQ2xoAN4"
1364
+ "QmZyx9qUVyWu7deCJFLZxB1WDVRBgobs1Vm6m4ECGMbpkS"
1358
1365
  ),
1359
1366
  name: "Extend Position Validator",
1360
1367
  description: "Production Extend Position Validator",
1361
1368
  version: "1.2.1",
1362
1369
  deployed: true,
1363
- deployedAt: 1784316534278,
1364
- size: 74352,
1365
- hash: "c17bfc9abef16f2372316a14c14281e2acc98afdd1662d095360f1d1c5383f1d",
1370
+ deployedAt: 1785173255906,
1371
+ size: 75372,
1372
+ hash: "545dc96a7e9b4d0aaadf239127b804a92df60b6b5b2fbb3203ef7de9ad97980a",
1366
1373
  validatorWalletAddress: "0x82DB9F515957aA380B596C6eA2Bd30CEF181f236",
1367
1374
  pkp: {
1368
1375
  publicKey: "0x04e52338f6a0c3362800f1a94c4c8f08be5030dde0fa217388c53d1c1a4790f4443c9f2886b2d2d8f4b75a9a156e9b028011b1a1cf7648da0e556aa980ec692836",
@@ -1370,17 +1377,17 @@ var require_pkg_src = __commonJS({
1370
1377
  }
1371
1378
  },
1372
1379
  btcWithdrawal: {
1373
- cid: "QmexvpfHPacjsVcqNHHLyJhSnnAPLgbWmWd9N3NDLDvYds",
1380
+ cid: "QmXKsozVz832mvU5xgvFnAAms1kfQrHAKj1areHfkDkoK7",
1374
1381
  authorizedCidHex: cidToHex(
1375
- "QmexvpfHPacjsVcqNHHLyJhSnnAPLgbWmWd9N3NDLDvYds"
1382
+ "QmXKsozVz832mvU5xgvFnAAms1kfQrHAKj1areHfkDkoK7"
1376
1383
  ),
1377
1384
  name: "Btc Withdrawal",
1378
1385
  description: "Production Btc Withdrawal",
1379
- version: "1.2.3",
1386
+ version: "1.2.1",
1380
1387
  deployed: true,
1381
- deployedAt: 1784585746901,
1382
- size: 92027,
1383
- hash: "7b4f4eab1f0c08b8b5b1c9cdb1064dd403ec13f57765919f62dec67fb8ba3c69",
1388
+ deployedAt: 1785173260209,
1389
+ size: 92692,
1390
+ hash: "18ade8e4f0c79896eee613d16c86de135f1d3daaa0fa056bcdbcaa0dff793c77",
1384
1391
  validatorWalletAddress: "0x82DB9F515957aA380B596C6eA2Bd30CEF181f236",
1385
1392
  pkp: {
1386
1393
  publicKey: "0x043616787c5432415c24378c4ef48de2bcd6bb7b575b837e3cff09171802662da7105d79586c7659677a0ecbaddac4cce06cb2a11f69a16fa0c4d7002ac7d51a4d",
@@ -1388,17 +1395,17 @@ var require_pkg_src = __commonJS({
1388
1395
  }
1389
1396
  },
1390
1397
  liquidationValidator: {
1391
- cid: "QmZJnGq2HEYW1XYZPSodyRCrbDhTcLDT8x4z76EiPg8Xcx",
1398
+ cid: "Qme6aGADhiszkQbZL977E6nmBacd2PEB7K9Hs8puVrscNx",
1392
1399
  authorizedCidHex: cidToHex(
1393
- "QmZJnGq2HEYW1XYZPSodyRCrbDhTcLDT8x4z76EiPg8Xcx"
1400
+ "Qme6aGADhiszkQbZL977E6nmBacd2PEB7K9Hs8puVrscNx"
1394
1401
  ),
1395
1402
  name: "Liquidation Validator",
1396
1403
  description: "Production Liquidation Validator",
1397
1404
  version: "1.2.1",
1398
1405
  deployed: true,
1399
- deployedAt: 1784316560010,
1400
- size: 66523,
1401
- hash: "f74d0163c47d7db04d1547f72c3a9bc1e5b499669089cc6464479a361462ce81",
1406
+ deployedAt: 1785173262533,
1407
+ size: 66846,
1408
+ hash: "b35ee7706d733d625faa4dbe37f73c8e20f0c1befa897cd7875e827de52003de",
1402
1409
  validatorWalletAddress: "0x82DB9F515957aA380B596C6eA2Bd30CEF181f236",
1403
1410
  pkp: {
1404
1411
  publicKey: "0x041a241de58976c13e3d7ca5a18e494f7330151e3818706135d50176e78ffb673e58b11f0b67a87c73fade6c6b27d6e7a7377ea9f4c10bf31880f1d725f18cc6f8",
@@ -1424,17 +1431,17 @@ var require_pkg_src = __commonJS({
1424
1431
  }
1425
1432
  },
1426
1433
  loanVaultBtcBalance: {
1427
- cid: "QmVKSkgY8e5X6v6yRD4H2wpU2oX2kbeKYh4fjPepg71mqu",
1434
+ cid: "QmaeQoHYvcMYobNbu9hQavGDudi8AXoW9tg3YHrvy1g2A4",
1428
1435
  authorizedCidHex: cidToHex(
1429
- "QmVKSkgY8e5X6v6yRD4H2wpU2oX2kbeKYh4fjPepg71mqu"
1436
+ "QmaeQoHYvcMYobNbu9hQavGDudi8AXoW9tg3YHrvy1g2A4"
1430
1437
  ),
1431
1438
  name: "Loan Vault Btc Balance",
1432
1439
  description: "Production Loan Vault Btc Balance",
1433
1440
  version: "1.2.1",
1434
1441
  deployed: true,
1435
- deployedAt: 1784316574669,
1436
- size: 56477,
1437
- hash: "917535f2911055b2ade2204fd868dd8b7294c7ade23e82aea488aeb0872e35d7",
1442
+ deployedAt: 1785173271802,
1443
+ size: 56800,
1444
+ hash: "a059133214e6ba0a73d655a15600c4b33e361fb340c98f8eecaf8ab7b95aaf83",
1438
1445
  validatorWalletAddress: "0x82DB9F515957aA380B596C6eA2Bd30CEF181f236",
1439
1446
  pkp: {
1440
1447
  publicKey: "0x043616787c5432415c24378c4ef48de2bcd6bb7b575b837e3cff09171802662da7105d79586c7659677a0ecbaddac4cce06cb2a11f69a16fa0c4d7002ac7d51a4d",
@@ -1448,17 +1455,17 @@ var require_pkg_src = __commonJS({
1448
1455
  // Requires BitcoinProviderRegistry.addAllowedCid(chainId, keccak256(utf8(cid)))
1449
1456
  // on each target chain (the action decrypts registry slots). No OAR entry.
1450
1457
  btcAddressBalance: {
1451
- cid: "QmcYFLDbhQArk5gQK44Xj8CnYEAbnaNsei92sUHpRuFmZA",
1458
+ cid: "QmUXUtU9r1HhQVYgkXPN5s19SKXanhn4pMsCtFEP3GK4Kj",
1452
1459
  authorizedCidHex: cidToHex(
1453
- "QmcYFLDbhQArk5gQK44Xj8CnYEAbnaNsei92sUHpRuFmZA"
1460
+ "QmUXUtU9r1HhQVYgkXPN5s19SKXanhn4pMsCtFEP3GK4Kj"
1454
1461
  ),
1455
1462
  name: "Btc Address Balance",
1456
1463
  description: "Address-only signed total BTC balance via registry consensus (no positionId, no price)",
1457
1464
  version: "0.2.1",
1458
1465
  deployed: true,
1459
- deployedAt: 1784316590403,
1460
- size: 26986,
1461
- hash: "49fb14265f3208916f12806df04492900bd08fb1b14d9651ee6278cd9ae4a428",
1466
+ deployedAt: 1785173280221,
1467
+ size: 27309,
1468
+ hash: "f0d08938713d9d89a56a3a386cacbc2b57afd5ad367ea82d827d40e1bfc70989",
1462
1469
  validatorWalletAddress: "0x82DB9F515957aA380B596C6eA2Bd30CEF181f236",
1463
1470
  pkp: {
1464
1471
  publicKey: "0x0498cbb31facfa26e3ec83ccdabfe4fe341ca0282e0c3cb81da7113723b9726e1e49efa92165cc3faa66ced4454cea56dbab12267852d6525a55d7c4f128b912cd",
@@ -1492,17 +1499,17 @@ var require_pkg_src = __commonJS({
1492
1499
  hash: "03ee5be239c91c735d2c95db89a0d1b77e602cfc18af8eb64b3281fddcd90a72"
1493
1500
  },
1494
1501
  staleSpendRecoveryValidator: {
1495
- cid: "QmcLrhiM1JwVi5w3QFxBYi1V4DaFT3Kk9MhPywyMnTsEwK",
1502
+ cid: "QmXQWT8V4wjuvH8BbC7xrkYxsVu5AKfvfWcS7jnYfrexYm",
1496
1503
  authorizedCidHex: cidToHex(
1497
- "QmcLrhiM1JwVi5w3QFxBYi1V4DaFT3Kk9MhPywyMnTsEwK"
1504
+ "QmXQWT8V4wjuvH8BbC7xrkYxsVu5AKfvfWcS7jnYfrexYm"
1498
1505
  ),
1499
1506
  name: "Stale Spend Recovery Validator",
1500
1507
  description: "Production Stale Spend Recovery Validator",
1501
1508
  version: "1.1.2",
1502
1509
  deployed: true,
1503
- deployedAt: 1784316604502,
1504
- size: 36785,
1505
- hash: "28bfe44970541fefe3bae8bd54f25e8775d7cc61b5832a40ba1c18587b6b6358",
1510
+ deployedAt: 1785173285829,
1511
+ size: 37108,
1512
+ hash: "04de5fc5b6f5131dc1544e3d3d187a1f9ef9616ffd12483d119f9102b3671791",
1506
1513
  validatorWalletAddress: "0x82DB9F515957aA380B596C6eA2Bd30CEF181f236",
1507
1514
  pkp: {
1508
1515
  publicKey: "0x046da0ad6da7dd4a0063cbeac6f2bdb6a9889c2178b23470833356a8ee5630f7f0eee0db348d9d9aaaadd23eccf0063c8f68ee5e446abe30b882bf1de4c932bc21",
@@ -1510,17 +1517,17 @@ var require_pkg_src = __commonJS({
1510
1517
  }
1511
1518
  },
1512
1519
  btcUtxoInvalidator: {
1513
- cid: "QmRue1EAjuJwCDTtTH4czdkkmDEfNpT7iudvwtjaRs6AdA",
1520
+ cid: "Qmc9W2dgGpRax5Q2nXw8ciGF9RHjWj1y9v2MMWNbrCwnZb",
1514
1521
  authorizedCidHex: cidToHex(
1515
- "QmRue1EAjuJwCDTtTH4czdkkmDEfNpT7iudvwtjaRs6AdA"
1522
+ "Qmc9W2dgGpRax5Q2nXw8ciGF9RHjWj1y9v2MMWNbrCwnZb"
1516
1523
  ),
1517
1524
  name: "Btc Utxo Invalidator",
1518
1525
  description: "Production Btc Utxo Invalidator",
1519
1526
  version: "1.0.0",
1520
1527
  deployed: true,
1521
- deployedAt: 1784801043540,
1522
- size: 60717,
1523
- hash: "2ca9736edf3d54bba7445491920cba28429029c32a2f2830cad831a37a3cb310"
1528
+ deployedAt: 1785173292828,
1529
+ size: 61410,
1530
+ hash: "9ca3817ea626b4ebca184e20cae827a8a982f48d6cd1497e81bb4469aa282627"
1524
1531
  }
1525
1532
  };
1526
1533
  function getDeploymentsForNetwork(network) {
@@ -2266,7 +2273,7 @@ ${errorReport}`);
2266
2273
  }
2267
2274
  init_debug_logger();
2268
2275
  init_session_signature_cache();
2269
- var import_ethers17 = require("ethers");
2276
+ var import_ethers18 = require("ethers");
2270
2277
  var EXPIRED_LOAN_MIN_LIQUIDATION_THRESHOLD_BPS = 11e3;
2271
2278
  var GRACE_PERIOD_DAYS = 30;
2272
2279
  var SATOSHIS_PER_BITCOIN = 100000000n;
@@ -5040,6 +5047,7 @@ ${auth.clientId}`;
5040
5047
  ],
5041
5048
  allowArbitraryBitcoinProvider: true,
5042
5049
  allowArbitraryEvmRpc: true,
5050
+ pinContractAddresses: false,
5043
5051
  allowDevSinglePriceProvider: true,
5044
5052
  minBitcoinBalanceConfirmations: 1,
5045
5053
  minBitcoinSpendConfirmations: 1,
@@ -5060,6 +5068,7 @@ ${auth.clientId}`;
5060
5068
  ],
5061
5069
  allowArbitraryBitcoinProvider: false,
5062
5070
  allowArbitraryEvmRpc: false,
5071
+ pinContractAddresses: true,
5063
5072
  allowDevSinglePriceProvider: false,
5064
5073
  minBitcoinBalanceConfirmations: 1,
5065
5074
  minBitcoinSpendConfirmations: 1,
@@ -5080,6 +5089,7 @@ ${auth.clientId}`;
5080
5089
  ],
5081
5090
  allowArbitraryBitcoinProvider: false,
5082
5091
  allowArbitraryEvmRpc: false,
5092
+ pinContractAddresses: true,
5083
5093
  allowDevSinglePriceProvider: false,
5084
5094
  minBitcoinBalanceConfirmations: 6,
5085
5095
  minBitcoinSpendConfirmations: 6,
@@ -5096,12 +5106,12 @@ ${auth.clientId}`;
5096
5106
  }
5097
5107
  async function executeVaultSnapshot(params) {
5098
5108
  global.ethers = {
5099
- ...import_ethers17.ethers,
5109
+ ...import_ethers18.ethers,
5100
5110
  providers: {
5101
- StaticJsonRpcProvider: import_ethers17.ethers.JsonRpcProvider
5111
+ StaticJsonRpcProvider: import_ethers18.ethers.JsonRpcProvider
5102
5112
  },
5103
- Contract: import_ethers17.ethers.Contract,
5104
- utils: import_ethers17.ethers
5113
+ Contract: import_ethers18.ethers.Contract,
5114
+ utils: import_ethers18.ethers
5105
5115
  // v6 moved utils to top level
5106
5116
  };
5107
5117
  global.Lit = {
@@ -5373,7 +5383,9 @@ function getSepoliaConfig() {
5373
5383
  feeRecipientRegistry: SEPOLIA_CONTRACTS.FeeRecipientRegistry || "",
5374
5384
  positionDelegateRegistry: SEPOLIA_CONTRACTS.PositionDelegateRegistry || "",
5375
5385
  bitcoinWithdrawalAddressRegistry: SEPOLIA_CONTRACTS.BitcoinWithdrawalAddressRegistry || "",
5376
- carryAgentRegistry: SEPOLIA_CONTRACTS.CarryAgentRegistry || ""
5386
+ carryAgentRegistry: SEPOLIA_CONTRACTS.CarryAgentRegistry || "",
5387
+ agentDelegationRegistry: SEPOLIA_CONTRACTS.AgentDelegationRegistry || "",
5388
+ dhAgentDelegate: SEPOLIA_CONTRACTS.DHAgentDelegate || ""
5377
5389
  },
5378
5390
  subgraphs: {
5379
5391
  // Lazy getter for the same module-init snapshot reason as serviceEndpoint.
@@ -5414,7 +5426,9 @@ function getMainnetConfig() {
5414
5426
  feeRecipientRegistry: MAINNET_CONTRACTS.FeeRecipientRegistry || "",
5415
5427
  positionDelegateRegistry: MAINNET_CONTRACTS.PositionDelegateRegistry || "",
5416
5428
  bitcoinWithdrawalAddressRegistry: MAINNET_CONTRACTS.BitcoinWithdrawalAddressRegistry || "",
5417
- carryAgentRegistry: MAINNET_CONTRACTS.CarryAgentRegistry || ""
5429
+ carryAgentRegistry: MAINNET_CONTRACTS.CarryAgentRegistry || "",
5430
+ agentDelegationRegistry: MAINNET_CONTRACTS.AgentDelegationRegistry || "",
5431
+ dhAgentDelegate: MAINNET_CONTRACTS.DHAgentDelegate || ""
5418
5432
  },
5419
5433
  subgraphs: {
5420
5434
  diamondHandsUrl: "https://gateway-arbitrum.network.thegraph.com/api/subgraphs/id/CCTPsdYqco2jChDLLBQTbdJWwoukVoMt1cXeR9ti6r9A"
@@ -5574,6 +5588,8 @@ __export(src_exports, {
5574
5588
  ErrorSeverity: () => ErrorSeverity,
5575
5589
  EventHelpers: () => EventHelpers,
5576
5590
  LOCALHOST_CONTRACTS: () => LOCALHOST_CONTRACTS,
5591
+ LOGIN_TYPES: () => LOGIN_TYPES,
5592
+ LOGIN_TYPES_WITH_AUDIENCE: () => LOGIN_TYPES_WITH_AUDIENCE,
5577
5593
  LRUCache: () => LRUCache,
5578
5594
  LoanCreator: () => LoanCreator,
5579
5595
  LoanQuery: () => LoanQuery,
@@ -5596,6 +5612,8 @@ __export(src_exports, {
5596
5612
  buildBtcExecuteEnvelope: () => buildBtcExecuteEnvelope,
5597
5613
  buildInvalidateMessageHash: () => buildInvalidateMessageHash,
5598
5614
  buildInvalidateStaleSpendEnvelope: () => buildInvalidateStaleSpendEnvelope,
5615
+ buildLoginDomain: () => buildLoginDomain,
5616
+ buildSignedLoginPayload: () => buildSignedLoginPayload,
5599
5617
  collectFailures: () => collectFailures,
5600
5618
  collectSuccesses: () => collectSuccesses,
5601
5619
  combine: () => combine,
@@ -5646,7 +5664,7 @@ __export(src_exports, {
5646
5664
  module.exports = __toCommonJS(src_exports);
5647
5665
 
5648
5666
  // src/modules/diamond-hands-sdk.ts
5649
- var import_ethers15 = require("ethers");
5667
+ var import_ethers17 = require("ethers");
5650
5668
 
5651
5669
  // src/types/result.ts
5652
5670
  function success(value) {
@@ -6700,6 +6718,7 @@ function isLoginRejection(error) {
6700
6718
  var ServerSession = class {
6701
6719
  signer;
6702
6720
  serviceEndpoint;
6721
+ loginAudience;
6703
6722
  chainId;
6704
6723
  store;
6705
6724
  onSignaturePrompt;
@@ -6730,6 +6749,10 @@ var ServerSession = class {
6730
6749
  assertSafeServiceEndpoint(opts.serviceEndpoint);
6731
6750
  this.signer = opts.signer;
6732
6751
  this.serviceEndpoint = opts.serviceEndpoint.replace(/\/+$/, "");
6752
+ this.loginAudience = (opts.loginAudience ?? this.serviceEndpoint).replace(
6753
+ /\/+$/,
6754
+ ""
6755
+ );
6733
6756
  this.chainId = opts.chainId;
6734
6757
  this.store = opts.persistSession === false ? null : opts.sessionStore ?? createDefaultSessionStore();
6735
6758
  this.onSignaturePrompt = opts.onSignaturePrompt;
@@ -6829,6 +6852,53 @@ var ServerSession = class {
6829
6852
  );
6830
6853
  }
6831
6854
  }
6855
+ /**
6856
+ * Adopt a login envelope signed ELSEWHERE and exchange it for a session now.
6857
+ *
6858
+ * The browser frontend collects one wallet signature and spends it at both the
6859
+ * api and this service, so the envelope is minted outside the SDK. Without this
6860
+ * seam the SDK would mint its own — a second wallet prompt, which for a
6861
+ * multi-sig Safe is another full propose-and-confirm ceremony across owners.
6862
+ *
6863
+ * Must be called PROMPTLY after signing. Each server pins the nonce on FIRST
6864
+ * use and requires that first use to be fresh (±120s EOA, ±600s contract
6865
+ * wallet); the stores are independent, so a late hand-off is rejected as
6866
+ * `stale_first_use` even though the other service already accepted it. After a
6867
+ * successful first use, silent re-mint covers the next 24h.
6868
+ *
6869
+ * No-ops the prompt path entirely: on success the session is cached and
6870
+ * persisted exactly as a self-minted login would be.
6871
+ */
6872
+ adoptLoginPayload(payload) {
6873
+ const gen = this.generation;
6874
+ const notCleared = () => gen === this.generation;
6875
+ const attempt = (async () => {
6876
+ if (payload?.chainId !== this.chainId) {
6877
+ throw new Error(
6878
+ `ServerSession: cannot adopt a login for chain ${payload?.chainId} \u2014 this session is on ${this.chainId}`
6879
+ );
6880
+ }
6881
+ const payloadAddress = payload.message?.address?.toLowerCase();
6882
+ const signerAddress = (await this.signer.getAddress()).toLowerCase();
6883
+ if (!payloadAddress || payloadAddress !== signerAddress) {
6884
+ throw new Error(
6885
+ "ServerSession: cannot adopt a login signed by a different address"
6886
+ );
6887
+ }
6888
+ const session = await this.login(payload);
6889
+ if (notCleared()) {
6890
+ this.persist(payload, session);
6891
+ this.cached = session;
6892
+ this.promptBackoff = null;
6893
+ }
6894
+ return session;
6895
+ })();
6896
+ this.inFlight = attempt;
6897
+ return attempt.then(() => void 0).finally(() => {
6898
+ if (notCleared())
6899
+ this.inFlight = null;
6900
+ });
6901
+ }
6832
6902
  /**
6833
6903
  * Resolve a session WITHOUT ever prompting for a wallet signature: a live
6834
6904
  * cached token, else the persisted JWT (adopted if still fresh, otherwise
@@ -6901,7 +6971,7 @@ var ServerSession = class {
6901
6971
  const payload = await buildSignedLoginPayload(
6902
6972
  this.signer,
6903
6973
  this.chainId,
6904
- this.serviceEndpoint,
6974
+ this.loginAudience,
6905
6975
  reuse
6906
6976
  );
6907
6977
  if (storeKey && !reuse) {
@@ -9369,7 +9439,14 @@ var LoanCreator = class {
9369
9439
  if (!positionIdResult.success) {
9370
9440
  return failure(positionIdResult.error);
9371
9441
  }
9372
- const positionId = positionIdResult.value;
9442
+ const confirmedIdResult = await this.confirmPositionId(
9443
+ receipt,
9444
+ positionIdResult.value
9445
+ );
9446
+ if (!confirmedIdResult.success) {
9447
+ return failure(confirmedIdResult.error);
9448
+ }
9449
+ const positionId = confirmedIdResult.value;
9373
9450
  const result = {
9374
9451
  success: true,
9375
9452
  transactionHash: receipt.hash,
@@ -9520,8 +9597,9 @@ var LoanCreator = class {
9520
9597
  hash: tx.hash
9521
9598
  });
9522
9599
  }
9600
+ const confirmations = await this.createPositionConfirmations();
9523
9601
  const receipt = await Promise.race([
9524
- tx.wait(1),
9602
+ tx.wait(confirmations),
9525
9603
  new Promise(
9526
9604
  (_, reject) => setTimeout(
9527
9605
  () => reject(new Error("Transaction confirmation timeout")),
@@ -9643,6 +9721,88 @@ var LoanCreator = class {
9643
9721
  );
9644
9722
  }
9645
9723
  }
9724
+ /**
9725
+ * Confirmation depth to wait for before trusting `positionId` from a receipt.
9726
+ *
9727
+ * Deeper is safer but slower, so local chains (instant mining, no reorgs) stay at 1.
9728
+ * Override with `createPositionConfirmations` when a chain needs more.
9729
+ */
9730
+ async createPositionConfirmations() {
9731
+ const configured = this.config.createPositionConfirmations;
9732
+ if (typeof configured === "number" && configured >= 1)
9733
+ return configured;
9734
+ try {
9735
+ const network = await this.config.contractManager.getProvider().getNetwork();
9736
+ const chainId = Number(network.chainId);
9737
+ if (chainId === 31337 || chainId === 1337)
9738
+ return 1;
9739
+ } catch {
9740
+ }
9741
+ return 3;
9742
+ }
9743
+ /**
9744
+ * Re-read the receipt after confirmations and re-derive `positionId`, so a reorg
9745
+ * cannot leave the caller holding an id that never survived to the canonical chain.
9746
+ *
9747
+ * Returns the authoritative id. If the re-read disagrees with what was first
9748
+ * extracted, the fresh value wins and the divergence is logged loudly — silently
9749
+ * returning a phantom id is how this surfaced as a `PositionNotFound()` hundreds of
9750
+ * lines downstream, long after the real cause.
9751
+ */
9752
+ async confirmPositionId(receipt, extractedId) {
9753
+ let authoritativeId = extractedId;
9754
+ try {
9755
+ const provider = this.config.contractManager.getProvider();
9756
+ const fresh = await provider.getTransactionReceipt(receipt.hash);
9757
+ if (!fresh) {
9758
+ return failure(
9759
+ new SDKError({
9760
+ message: `Loan creation receipt ${receipt.hash} is no longer on-chain after confirmation (dropped or reorged). The position, if any, must be rediscovered before use.`,
9761
+ category: "CONTRACT" /* CONTRACT */,
9762
+ severity: "HIGH" /* HIGH */,
9763
+ originalError: new Error("Receipt vanished after confirmation")
9764
+ })
9765
+ );
9766
+ }
9767
+ const reExtracted = this.extractPositionId(
9768
+ fresh
9769
+ );
9770
+ if (reExtracted.success && reExtracted.value !== extractedId) {
9771
+ log.warn(
9772
+ "\u26A0\uFE0F positionId changed after confirmation \u2014 the block was reorged and the transaction re-executed with a different block.timestamp/positionCounter. Using the canonical value.",
9773
+ { transactionHash: receipt.hash, before: extractedId, after: reExtracted.value }
9774
+ );
9775
+ authoritativeId = reExtracted.value;
9776
+ }
9777
+ } catch (e) {
9778
+ log.warn("Could not re-read loan creation receipt for confirmation", {
9779
+ error: e?.message ?? String(e)
9780
+ });
9781
+ }
9782
+ const coreAddress = this.config.contractManager.getContractAddresses().positionManagerCore;
9783
+ if (coreAddress) {
9784
+ try {
9785
+ const core = new import_ethers11.Contract(
9786
+ coreAddress,
9787
+ [
9788
+ "function getPositionDetails(bytes32) view returns (tuple(bytes32 positionId, bytes32 pkpId, uint256 ucdDebt, string vaultAddress, address borrower, uint40 createdAt, uint40 lastUpdated, uint16 selectedTerm, uint40 expiryAt, uint8 status))"
9789
+ ],
9790
+ this.config.contractManager.getProvider()
9791
+ );
9792
+ await core.getFunction("getPositionDetails")(authoritativeId);
9793
+ } catch {
9794
+ return failure(
9795
+ new SDKError({
9796
+ message: `Loan creation reported positionId ${authoritativeId}, but no such position exists on-chain (tx ${receipt.hash}). This usually means the block was reorged after the receipt was read. Retry loan creation; do not use this id.`,
9797
+ category: "CONTRACT" /* CONTRACT */,
9798
+ severity: "HIGH" /* HIGH */,
9799
+ originalError: new Error("positionId not found on-chain after creation")
9800
+ })
9801
+ );
9802
+ }
9803
+ }
9804
+ return success(authoritativeId);
9805
+ }
9646
9806
  /**
9647
9807
  * Extract position ID from transaction receipt
9648
9808
  */
@@ -16056,180 +16216,1955 @@ var SimplePSMV2__factory = class extends import_ethers14.ContractFactory {
16056
16216
  }
16057
16217
  };
16058
16218
 
16059
- // src/modules/mock/mock-token-manager.module.ts
16060
- var MockTokenManager = class {
16061
- config;
16062
- constructor(config) {
16063
- this.config = config;
16064
- if (this.isProductionNetwork()) {
16065
- log.warn("\u26A0\uFE0F MockTokenManager initialized on production network", {
16066
- network: config.network
16067
- });
16068
- }
16069
- }
16070
- /**
16071
- * Mint mock BTC tokens
16072
- *
16073
- * @param amount - Amount to mint in satoshis
16074
- * @param recipient - Recipient address
16075
- * @returns Transaction result
16076
- */
16077
- async mintMockBTC(amount, recipient) {
16078
- if (this.config.debug) {
16079
- log.info("\u{1FA99} Minting mock BTC", {
16080
- amount: amount.toString(),
16081
- recipient
16082
- });
16083
- }
16084
- if (this.isProductionNetwork()) {
16085
- return failure(
16086
- new SDKError({
16087
- message: "Cannot mint mock tokens on production network",
16088
- category: "CONFIGURATION" /* CONFIGURATION */,
16089
- severity: "HIGH" /* HIGH */,
16090
- originalError: new Error("Production network detected")
16091
- })
16092
- );
16093
- }
16094
- return tryCatchAsync(
16095
- async () => {
16096
- const signerResult = this.config.contractManager.getSigner();
16097
- if (!signerResult.success) {
16098
- throw signerResult.error;
16099
- }
16100
- throw new Error("Mock BTC contract not yet integrated");
16101
- },
16102
- (error) => new SDKError({
16103
- message: "Failed to mint mock BTC",
16104
- category: "CONTRACT" /* CONTRACT */,
16105
- severity: "MEDIUM" /* MEDIUM */,
16106
- originalError: error instanceof Error ? error : new Error(String(error)),
16107
- context: { amount: amount.toString(), recipient }
16108
- })
16109
- );
16110
- }
16111
- /**
16112
- * Approve mock BTC spending
16113
- *
16114
- * @param spender - Spender address
16115
- * @param amount - Amount to approve in satoshis
16116
- * @returns Transaction result
16117
- */
16118
- async approveMockBTC(spender, amount) {
16119
- if (this.config.debug) {
16120
- log.info("\u2705 Approving mock BTC spending", {
16121
- spender,
16122
- amount: amount.toString()
16123
- });
16124
- }
16125
- if (this.isProductionNetwork()) {
16126
- return failure(
16127
- new SDKError({
16128
- message: "Cannot approve mock tokens on production network",
16129
- category: "CONFIGURATION" /* CONFIGURATION */,
16130
- severity: "HIGH" /* HIGH */,
16131
- originalError: new Error("Production network detected")
16132
- })
16133
- );
16134
- }
16135
- return tryCatchAsync(
16136
- async () => {
16137
- const signerResult = this.config.contractManager.getSigner();
16138
- if (!signerResult.success) {
16139
- throw signerResult.error;
16140
- }
16141
- throw new Error("Mock BTC contract not yet integrated");
16142
- },
16143
- (error) => new SDKError({
16144
- message: "Failed to approve mock BTC",
16145
- category: "CONTRACT" /* CONTRACT */,
16146
- severity: "MEDIUM" /* MEDIUM */,
16147
- originalError: error instanceof Error ? error : new Error(String(error)),
16148
- context: { spender, amount: amount.toString() }
16149
- })
16150
- );
16151
- }
16152
- /**
16153
- * Get mock BTC balance
16154
- *
16155
- * @param address - Address to query
16156
- * @returns Balance in satoshis
16157
- */
16158
- async getMockBTCBalance(address) {
16159
- if (this.config.debug) {
16160
- log.info("\u{1F50D} Querying mock BTC balance", { address });
16161
- }
16162
- return tryCatchAsync(
16163
- async () => {
16164
- throw new Error("Mock BTC contract not yet integrated");
16219
+ // src/contracts/typechain-contracts/factories/src/agent/AgentDelegationRegistry__factory.ts
16220
+ var import_ethers15 = require("ethers");
16221
+ var _abi2 = [
16222
+ {
16223
+ inputs: [],
16224
+ stateMutability: "nonpayable",
16225
+ type: "constructor"
16226
+ },
16227
+ {
16228
+ inputs: [],
16229
+ name: "AccessControlBadConfirmation",
16230
+ type: "error"
16231
+ },
16232
+ {
16233
+ inputs: [
16234
+ {
16235
+ internalType: "address",
16236
+ name: "account",
16237
+ type: "address"
16165
16238
  },
16166
- (error) => new SDKError({
16167
- message: "Failed to get mock BTC balance",
16168
- category: "CONTRACT" /* CONTRACT */,
16169
- severity: "MEDIUM" /* MEDIUM */,
16170
- originalError: error instanceof Error ? error : new Error(String(error)),
16171
- context: { address }
16172
- })
16173
- );
16174
- }
16175
- /**
16176
- * Check if current network is production (mainnet)
16177
- */
16178
- isProductionNetwork() {
16179
- return this.config.network.toLowerCase().includes("mainnet");
16180
- }
16181
- };
16182
- function createMockTokenManager(config) {
16183
- try {
16184
- const manager = new MockTokenManager(config);
16185
- return success(manager);
16186
- } catch (error) {
16187
- return failure(
16188
- new SDKError({
16189
- message: "Failed to create MockTokenManager",
16190
- category: "INITIALIZATION" /* INITIALIZATION */,
16191
- severity: "HIGH" /* HIGH */,
16192
- originalError: error instanceof Error ? error : new Error(String(error))
16193
- })
16194
- );
16195
- }
16196
- }
16197
-
16198
- // src/modules/diamond-hands-sdk.ts
16199
- var import_dh_lit_ops = require("@gvnrdao/dh-lit-ops");
16200
- var import_dh_lit_actions2 = __toESM(require_pkg_src());
16201
-
16202
- // src/utils/telegram-messaging.utils.ts
16203
- var TelegramBot = null;
16204
- try {
16205
- if (typeof window === "undefined" && typeof global !== "undefined") {
16206
- TelegramBot = require("node-telegram-bot-api");
16207
- }
16208
- } catch (error) {
16209
- log.warn("Telegram bot API not available", {
16210
- error: error instanceof Error ? error.message : String(error)
16211
- });
16212
- }
16213
- function formatMintMessage(mintAmount, loanId, txHash) {
16214
- return `\u2705 DH SDK: ${mintAmount} UCD was minted for loan id: ${loanId} Tx: https://sepolia.etherscan.io/tx/${txHash}`;
16215
- }
16216
- function formatPartialPaymentMessage(paymentAmount, loanId, txHash) {
16217
- return `\u2705 DH SDK: ${paymentAmount} UCD was repaid for loan id: ${loanId} Tx: https://sepolia.etherscan.io/tx/${txHash}`;
16218
- }
16219
- function formatPartialPaymentFailureMessage(paymentAmount, loanId, txHash) {
16220
- const baseMessage = `\u274C DH SDK: FAILED to repay ${paymentAmount} UCD for loan id: ${loanId}`;
16221
- if (txHash) {
16222
- return `${baseMessage} Tx: https://sepolia.etherscan.io/tx/${txHash}`;
16223
- }
16224
- return baseMessage;
16225
- }
16226
- function formatLoanCreationMessage(positionId, pkpId, vaultAddress) {
16227
- const vault = vaultAddress || "unknown";
16228
- return `\u2705 DH SDK: A new loan was created Id: ${positionId} Pkp: ${pkpId} Regtest BTC vault: ${vault}`;
16229
- }
16230
- function formatBTCWithdrawalFailureMessage(withdrawalAmount, btcVault, btcDestinationAddress, loanId) {
16231
- const formattedAmount = formatBTCAmount(withdrawalAmount);
16232
- return `\u274C DH SDK: BTC withdrawal FAILED: ${formattedAmount} from ${btcVault} to ${btcDestinationAddress} for loan id: ${loanId}`;
16239
+ {
16240
+ internalType: "bytes32",
16241
+ name: "neededRole",
16242
+ type: "bytes32"
16243
+ }
16244
+ ],
16245
+ name: "AccessControlUnauthorizedAccount",
16246
+ type: "error"
16247
+ },
16248
+ {
16249
+ inputs: [
16250
+ {
16251
+ internalType: "address",
16252
+ name: "target",
16253
+ type: "address"
16254
+ }
16255
+ ],
16256
+ name: "AddressEmptyCode",
16257
+ type: "error"
16258
+ },
16259
+ {
16260
+ inputs: [],
16261
+ name: "AgentAddressReused",
16262
+ type: "error"
16263
+ },
16264
+ {
16265
+ inputs: [],
16266
+ name: "AgentIsActiveUseRotate",
16267
+ type: "error"
16268
+ },
16269
+ {
16270
+ inputs: [],
16271
+ name: "AgentNotActive",
16272
+ type: "error"
16273
+ },
16274
+ {
16275
+ inputs: [],
16276
+ name: "CannotUpgradeToSelf",
16277
+ type: "error"
16278
+ },
16279
+ {
16280
+ inputs: [
16281
+ {
16282
+ internalType: "address",
16283
+ name: "implementation",
16284
+ type: "address"
16285
+ }
16286
+ ],
16287
+ name: "ERC1967InvalidImplementation",
16288
+ type: "error"
16289
+ },
16290
+ {
16291
+ inputs: [],
16292
+ name: "ERC1967NonPayable",
16293
+ type: "error"
16294
+ },
16295
+ {
16296
+ inputs: [],
16297
+ name: "EnforcedPause",
16298
+ type: "error"
16299
+ },
16300
+ {
16301
+ inputs: [],
16302
+ name: "ExceedsMaxTtl",
16303
+ type: "error"
16304
+ },
16305
+ {
16306
+ inputs: [],
16307
+ name: "ExpectedPause",
16308
+ type: "error"
16309
+ },
16310
+ {
16311
+ inputs: [],
16312
+ name: "FailedCall",
16313
+ type: "error"
16314
+ },
16315
+ {
16316
+ inputs: [],
16317
+ name: "FloorBelowProtocolMin",
16318
+ type: "error"
16319
+ },
16320
+ {
16321
+ inputs: [],
16322
+ name: "ImplementationNotDeployed",
16323
+ type: "error"
16324
+ },
16325
+ {
16326
+ inputs: [],
16327
+ name: "InvalidAddress",
16328
+ type: "error"
16329
+ },
16330
+ {
16331
+ inputs: [],
16332
+ name: "InvalidFloor",
16333
+ type: "error"
16334
+ },
16335
+ {
16336
+ inputs: [],
16337
+ name: "InvalidInitialization",
16338
+ type: "error"
16339
+ },
16340
+ {
16341
+ inputs: [],
16342
+ name: "InvalidPositionId",
16343
+ type: "error"
16344
+ },
16345
+ {
16346
+ inputs: [],
16347
+ name: "NoActiveAgent",
16348
+ type: "error"
16349
+ },
16350
+ {
16351
+ inputs: [],
16352
+ name: "NotAdminModule",
16353
+ type: "error"
16354
+ },
16355
+ {
16356
+ inputs: [],
16357
+ name: "NotAuthorizedConsumer",
16358
+ type: "error"
16359
+ },
16360
+ {
16361
+ inputs: [],
16362
+ name: "NotBorrowerOrRegistrar",
16363
+ type: "error"
16364
+ },
16365
+ {
16366
+ inputs: [],
16367
+ name: "NotContract",
16368
+ type: "error"
16369
+ },
16370
+ {
16371
+ inputs: [],
16372
+ name: "NotInitializing",
16373
+ type: "error"
16374
+ },
16375
+ {
16376
+ inputs: [],
16377
+ name: "NotUserOrRegistrar",
16378
+ type: "error"
16379
+ },
16380
+ {
16381
+ inputs: [],
16382
+ name: "PositionNotActive",
16383
+ type: "error"
16384
+ },
16385
+ {
16386
+ inputs: [],
16387
+ name: "PositionNotDelegable",
16388
+ type: "error"
16389
+ },
16390
+ {
16391
+ inputs: [],
16392
+ name: "RenewalCapReached",
16393
+ type: "error"
16394
+ },
16395
+ {
16396
+ inputs: [],
16397
+ name: "ScopeNotGranted",
16398
+ type: "error"
16399
+ },
16400
+ {
16401
+ inputs: [],
16402
+ name: "UUPSUnauthorizedCallContext",
16403
+ type: "error"
16404
+ },
16405
+ {
16406
+ inputs: [
16407
+ {
16408
+ internalType: "bytes32",
16409
+ name: "slot",
16410
+ type: "bytes32"
16411
+ }
16412
+ ],
16413
+ name: "UUPSUnsupportedProxiableUUID",
16414
+ type: "error"
16415
+ },
16416
+ {
16417
+ inputs: [],
16418
+ name: "UnauthorizedUnpause",
16419
+ type: "error"
16420
+ },
16421
+ {
16422
+ inputs: [],
16423
+ name: "UnexpectedRoleGrantFailure",
16424
+ type: "error"
16425
+ },
16426
+ {
16427
+ inputs: [],
16428
+ name: "ValidUntilInPast",
16429
+ type: "error"
16430
+ },
16431
+ {
16432
+ anonymous: false,
16433
+ inputs: [
16434
+ {
16435
+ indexed: true,
16436
+ internalType: "address",
16437
+ name: "oldAdminModule",
16438
+ type: "address"
16439
+ },
16440
+ {
16441
+ indexed: true,
16442
+ internalType: "address",
16443
+ name: "newAdminModule",
16444
+ type: "address"
16445
+ }
16446
+ ],
16447
+ name: "AdminModuleUpdated",
16448
+ type: "event"
16449
+ },
16450
+ {
16451
+ anonymous: false,
16452
+ inputs: [
16453
+ {
16454
+ indexed: false,
16455
+ internalType: "uint32",
16456
+ name: "oldBps",
16457
+ type: "uint32"
16458
+ },
16459
+ {
16460
+ indexed: false,
16461
+ internalType: "uint32",
16462
+ name: "newBps",
16463
+ type: "uint32"
16464
+ }
16465
+ ],
16466
+ name: "AgentMintFloorMinUpdated",
16467
+ type: "event"
16468
+ },
16469
+ {
16470
+ anonymous: false,
16471
+ inputs: [
16472
+ {
16473
+ indexed: true,
16474
+ internalType: "address",
16475
+ name: "user",
16476
+ type: "address"
16477
+ },
16478
+ {
16479
+ indexed: true,
16480
+ internalType: "address",
16481
+ name: "agent",
16482
+ type: "address"
16483
+ },
16484
+ {
16485
+ indexed: false,
16486
+ internalType: "uint64",
16487
+ name: "validUntil",
16488
+ type: "uint64"
16489
+ }
16490
+ ],
16491
+ name: "AgentRegistered",
16492
+ type: "event"
16493
+ },
16494
+ {
16495
+ anonymous: false,
16496
+ inputs: [
16497
+ {
16498
+ indexed: true,
16499
+ internalType: "address",
16500
+ name: "user",
16501
+ type: "address"
16502
+ },
16503
+ {
16504
+ indexed: true,
16505
+ internalType: "address",
16506
+ name: "agent",
16507
+ type: "address"
16508
+ },
16509
+ {
16510
+ indexed: false,
16511
+ internalType: "bytes32",
16512
+ name: "reason",
16513
+ type: "bytes32"
16514
+ }
16515
+ ],
16516
+ name: "AgentRevoked",
16517
+ type: "event"
16518
+ },
16519
+ {
16520
+ anonymous: false,
16521
+ inputs: [
16522
+ {
16523
+ indexed: true,
16524
+ internalType: "address",
16525
+ name: "user",
16526
+ type: "address"
16527
+ },
16528
+ {
16529
+ indexed: true,
16530
+ internalType: "address",
16531
+ name: "oldAgent",
16532
+ type: "address"
16533
+ },
16534
+ {
16535
+ indexed: true,
16536
+ internalType: "address",
16537
+ name: "newAgent",
16538
+ type: "address"
16539
+ },
16540
+ {
16541
+ indexed: false,
16542
+ internalType: "uint64",
16543
+ name: "validUntil",
16544
+ type: "uint64"
16545
+ }
16546
+ ],
16547
+ name: "AgentRotated",
16548
+ type: "event"
16549
+ },
16550
+ {
16551
+ anonymous: false,
16552
+ inputs: [
16553
+ {
16554
+ indexed: true,
16555
+ internalType: "address",
16556
+ name: "previous",
16557
+ type: "address"
16558
+ },
16559
+ {
16560
+ indexed: true,
16561
+ internalType: "address",
16562
+ name: "next",
16563
+ type: "address"
16564
+ }
16565
+ ],
16566
+ name: "AuthorizedConsumerUpdated",
16567
+ type: "event"
16568
+ },
16569
+ {
16570
+ anonymous: false,
16571
+ inputs: [
16572
+ {
16573
+ indexed: true,
16574
+ internalType: "bytes32",
16575
+ name: "positionId",
16576
+ type: "bytes32"
16577
+ },
16578
+ {
16579
+ indexed: true,
16580
+ internalType: "address",
16581
+ name: "borrower",
16582
+ type: "address"
16583
+ }
16584
+ ],
16585
+ name: "AutoMintDisabled",
16586
+ type: "event"
16587
+ },
16588
+ {
16589
+ anonymous: false,
16590
+ inputs: [
16591
+ {
16592
+ indexed: true,
16593
+ internalType: "bytes32",
16594
+ name: "positionId",
16595
+ type: "bytes32"
16596
+ },
16597
+ {
16598
+ indexed: true,
16599
+ internalType: "address",
16600
+ name: "borrower",
16601
+ type: "address"
16602
+ },
16603
+ {
16604
+ indexed: false,
16605
+ internalType: "uint32",
16606
+ name: "minCollateralRatioBps",
16607
+ type: "uint32"
16608
+ }
16609
+ ],
16610
+ name: "AutoMintEnabled",
16611
+ type: "event"
16612
+ },
16613
+ {
16614
+ anonymous: false,
16615
+ inputs: [
16616
+ {
16617
+ indexed: true,
16618
+ internalType: "bytes32",
16619
+ name: "positionId",
16620
+ type: "bytes32"
16621
+ },
16622
+ {
16623
+ indexed: true,
16624
+ internalType: "address",
16625
+ name: "borrower",
16626
+ type: "address"
16627
+ }
16628
+ ],
16629
+ name: "AutoRenewDisabled",
16630
+ type: "event"
16631
+ },
16632
+ {
16633
+ anonymous: false,
16634
+ inputs: [
16635
+ {
16636
+ indexed: true,
16637
+ internalType: "bytes32",
16638
+ name: "positionId",
16639
+ type: "bytes32"
16640
+ },
16641
+ {
16642
+ indexed: true,
16643
+ internalType: "address",
16644
+ name: "borrower",
16645
+ type: "address"
16646
+ },
16647
+ {
16648
+ indexed: false,
16649
+ internalType: "uint32",
16650
+ name: "maxRenewals",
16651
+ type: "uint32"
16652
+ },
16653
+ {
16654
+ indexed: false,
16655
+ internalType: "uint40",
16656
+ name: "maxEndTimestamp",
16657
+ type: "uint40"
16658
+ }
16659
+ ],
16660
+ name: "AutoRenewEnabled",
16661
+ type: "event"
16662
+ },
16663
+ {
16664
+ anonymous: false,
16665
+ inputs: [
16666
+ {
16667
+ indexed: true,
16668
+ internalType: "bytes32",
16669
+ name: "positionId",
16670
+ type: "bytes32"
16671
+ },
16672
+ {
16673
+ indexed: true,
16674
+ internalType: "address",
16675
+ name: "borrower",
16676
+ type: "address"
16677
+ }
16678
+ ],
16679
+ name: "AutoRepayDisabled",
16680
+ type: "event"
16681
+ },
16682
+ {
16683
+ anonymous: false,
16684
+ inputs: [
16685
+ {
16686
+ indexed: true,
16687
+ internalType: "bytes32",
16688
+ name: "positionId",
16689
+ type: "bytes32"
16690
+ },
16691
+ {
16692
+ indexed: true,
16693
+ internalType: "address",
16694
+ name: "borrower",
16695
+ type: "address"
16696
+ }
16697
+ ],
16698
+ name: "AutoRepayEnabled",
16699
+ type: "event"
16700
+ },
16701
+ {
16702
+ anonymous: false,
16703
+ inputs: [
16704
+ {
16705
+ indexed: true,
16706
+ internalType: "address",
16707
+ name: "caller",
16708
+ type: "address"
16709
+ },
16710
+ {
16711
+ indexed: false,
16712
+ internalType: "uint256",
16713
+ name: "timestamp",
16714
+ type: "uint256"
16715
+ }
16716
+ ],
16717
+ name: "ContractPaused",
16718
+ type: "event"
16719
+ },
16720
+ {
16721
+ anonymous: false,
16722
+ inputs: [
16723
+ {
16724
+ indexed: true,
16725
+ internalType: "address",
16726
+ name: "caller",
16727
+ type: "address"
16728
+ },
16729
+ {
16730
+ indexed: false,
16731
+ internalType: "uint256",
16732
+ name: "timestamp",
16733
+ type: "uint256"
16734
+ }
16735
+ ],
16736
+ name: "ContractUnpaused",
16737
+ type: "event"
16738
+ },
16739
+ {
16740
+ anonymous: false,
16741
+ inputs: [
16742
+ {
16743
+ indexed: true,
16744
+ internalType: "address",
16745
+ name: "oldImplementation",
16746
+ type: "address"
16747
+ },
16748
+ {
16749
+ indexed: true,
16750
+ internalType: "address",
16751
+ name: "newImplementation",
16752
+ type: "address"
16753
+ },
16754
+ {
16755
+ indexed: false,
16756
+ internalType: "string",
16757
+ name: "version",
16758
+ type: "string"
16759
+ },
16760
+ {
16761
+ indexed: false,
16762
+ internalType: "uint256",
16763
+ name: "timestamp",
16764
+ type: "uint256"
16765
+ }
16766
+ ],
16767
+ name: "ContractUpgraded",
16768
+ type: "event"
16769
+ },
16770
+ {
16771
+ anonymous: false,
16772
+ inputs: [
16773
+ {
16774
+ indexed: false,
16775
+ internalType: "uint64",
16776
+ name: "version",
16777
+ type: "uint64"
16778
+ }
16779
+ ],
16780
+ name: "Initialized",
16781
+ type: "event"
16782
+ },
16783
+ {
16784
+ anonymous: false,
16785
+ inputs: [
16786
+ {
16787
+ indexed: false,
16788
+ internalType: "uint64",
16789
+ name: "oldTtl",
16790
+ type: "uint64"
16791
+ },
16792
+ {
16793
+ indexed: false,
16794
+ internalType: "uint64",
16795
+ name: "newTtl",
16796
+ type: "uint64"
16797
+ }
16798
+ ],
16799
+ name: "MaxAgentTtlUpdated",
16800
+ type: "event"
16801
+ },
16802
+ {
16803
+ anonymous: false,
16804
+ inputs: [
16805
+ {
16806
+ indexed: true,
16807
+ internalType: "bytes32",
16808
+ name: "positionId",
16809
+ type: "bytes32"
16810
+ },
16811
+ {
16812
+ indexed: false,
16813
+ internalType: "uint32",
16814
+ name: "oldFloorBps",
16815
+ type: "uint32"
16816
+ },
16817
+ {
16818
+ indexed: false,
16819
+ internalType: "uint32",
16820
+ name: "newFloorBps",
16821
+ type: "uint32"
16822
+ }
16823
+ ],
16824
+ name: "MintCollateralFloorUpdated",
16825
+ type: "event"
16826
+ },
16827
+ {
16828
+ anonymous: false,
16829
+ inputs: [
16830
+ {
16831
+ indexed: false,
16832
+ internalType: "address",
16833
+ name: "account",
16834
+ type: "address"
16835
+ }
16836
+ ],
16837
+ name: "Paused",
16838
+ type: "event"
16839
+ },
16840
+ {
16841
+ anonymous: false,
16842
+ inputs: [
16843
+ {
16844
+ indexed: true,
16845
+ internalType: "bytes32",
16846
+ name: "positionId",
16847
+ type: "bytes32"
16848
+ },
16849
+ {
16850
+ indexed: false,
16851
+ internalType: "uint32",
16852
+ name: "renewalsUsed",
16853
+ type: "uint32"
16854
+ }
16855
+ ],
16856
+ name: "RenewalRecorded",
16857
+ type: "event"
16858
+ },
16859
+ {
16860
+ anonymous: false,
16861
+ inputs: [
16862
+ {
16863
+ indexed: true,
16864
+ internalType: "bytes32",
16865
+ name: "role",
16866
+ type: "bytes32"
16867
+ },
16868
+ {
16869
+ indexed: true,
16870
+ internalType: "bytes32",
16871
+ name: "previousAdminRole",
16872
+ type: "bytes32"
16873
+ },
16874
+ {
16875
+ indexed: true,
16876
+ internalType: "bytes32",
16877
+ name: "newAdminRole",
16878
+ type: "bytes32"
16879
+ }
16880
+ ],
16881
+ name: "RoleAdminChanged",
16882
+ type: "event"
16883
+ },
16884
+ {
16885
+ anonymous: false,
16886
+ inputs: [
16887
+ {
16888
+ indexed: true,
16889
+ internalType: "bytes32",
16890
+ name: "role",
16891
+ type: "bytes32"
16892
+ },
16893
+ {
16894
+ indexed: true,
16895
+ internalType: "address",
16896
+ name: "account",
16897
+ type: "address"
16898
+ },
16899
+ {
16900
+ indexed: true,
16901
+ internalType: "address",
16902
+ name: "sender",
16903
+ type: "address"
16904
+ }
16905
+ ],
16906
+ name: "RoleGranted",
16907
+ type: "event"
16908
+ },
16909
+ {
16910
+ anonymous: false,
16911
+ inputs: [
16912
+ {
16913
+ indexed: true,
16914
+ internalType: "bytes32",
16915
+ name: "role",
16916
+ type: "bytes32"
16917
+ },
16918
+ {
16919
+ indexed: true,
16920
+ internalType: "address",
16921
+ name: "account",
16922
+ type: "address"
16923
+ },
16924
+ {
16925
+ indexed: true,
16926
+ internalType: "address",
16927
+ name: "sender",
16928
+ type: "address"
16929
+ }
16930
+ ],
16931
+ name: "RoleRevoked",
16932
+ type: "event"
16933
+ },
16934
+ {
16935
+ anonymous: false,
16936
+ inputs: [
16937
+ {
16938
+ indexed: false,
16939
+ internalType: "address",
16940
+ name: "account",
16941
+ type: "address"
16942
+ }
16943
+ ],
16944
+ name: "Unpaused",
16945
+ type: "event"
16946
+ },
16947
+ {
16948
+ anonymous: false,
16949
+ inputs: [
16950
+ {
16951
+ indexed: true,
16952
+ internalType: "address",
16953
+ name: "implementation",
16954
+ type: "address"
16955
+ }
16956
+ ],
16957
+ name: "Upgraded",
16958
+ type: "event"
16959
+ },
16960
+ {
16961
+ inputs: [],
16962
+ name: "DEFAULT_ADMIN_ROLE",
16963
+ outputs: [
16964
+ {
16965
+ internalType: "bytes32",
16966
+ name: "",
16967
+ type: "bytes32"
16968
+ }
16969
+ ],
16970
+ stateMutability: "view",
16971
+ type: "function"
16972
+ },
16973
+ {
16974
+ inputs: [],
16975
+ name: "EMERGENCY_PAUSE_ROLE",
16976
+ outputs: [
16977
+ {
16978
+ internalType: "bytes32",
16979
+ name: "",
16980
+ type: "bytes32"
16981
+ }
16982
+ ],
16983
+ stateMutability: "view",
16984
+ type: "function"
16985
+ },
16986
+ {
16987
+ inputs: [],
16988
+ name: "REGISTRAR_ROLE",
16989
+ outputs: [
16990
+ {
16991
+ internalType: "bytes32",
16992
+ name: "",
16993
+ type: "bytes32"
16994
+ }
16995
+ ],
16996
+ stateMutability: "view",
16997
+ type: "function"
16998
+ },
16999
+ {
17000
+ inputs: [],
17001
+ name: "SCOPE_MINT",
17002
+ outputs: [
17003
+ {
17004
+ internalType: "uint32",
17005
+ name: "",
17006
+ type: "uint32"
17007
+ }
17008
+ ],
17009
+ stateMutability: "view",
17010
+ type: "function"
17011
+ },
17012
+ {
17013
+ inputs: [],
17014
+ name: "SCOPE_RENEW",
17015
+ outputs: [
17016
+ {
17017
+ internalType: "uint32",
17018
+ name: "",
17019
+ type: "uint32"
17020
+ }
17021
+ ],
17022
+ stateMutability: "view",
17023
+ type: "function"
17024
+ },
17025
+ {
17026
+ inputs: [],
17027
+ name: "SCOPE_REPAY",
17028
+ outputs: [
17029
+ {
17030
+ internalType: "uint32",
17031
+ name: "",
17032
+ type: "uint32"
17033
+ }
17034
+ ],
17035
+ stateMutability: "view",
17036
+ type: "function"
17037
+ },
17038
+ {
17039
+ inputs: [],
17040
+ name: "UPGRADE_INTERFACE_VERSION",
17041
+ outputs: [
17042
+ {
17043
+ internalType: "string",
17044
+ name: "",
17045
+ type: "string"
17046
+ }
17047
+ ],
17048
+ stateMutability: "view",
17049
+ type: "function"
17050
+ },
17051
+ {
17052
+ inputs: [],
17053
+ name: "VERSION",
17054
+ outputs: [
17055
+ {
17056
+ internalType: "string",
17057
+ name: "",
17058
+ type: "string"
17059
+ }
17060
+ ],
17061
+ stateMutability: "view",
17062
+ type: "function"
17063
+ },
17064
+ {
17065
+ inputs: [],
17066
+ name: "adminModule",
17067
+ outputs: [
17068
+ {
17069
+ internalType: "address",
17070
+ name: "",
17071
+ type: "address"
17072
+ }
17073
+ ],
17074
+ stateMutability: "view",
17075
+ type: "function"
17076
+ },
17077
+ {
17078
+ inputs: [],
17079
+ name: "agentMintFloorMinBps",
17080
+ outputs: [
17081
+ {
17082
+ internalType: "uint32",
17083
+ name: "",
17084
+ type: "uint32"
17085
+ }
17086
+ ],
17087
+ stateMutability: "view",
17088
+ type: "function"
17089
+ },
17090
+ {
17091
+ inputs: [
17092
+ {
17093
+ internalType: "address",
17094
+ name: "user",
17095
+ type: "address"
17096
+ }
17097
+ ],
17098
+ name: "agentOf",
17099
+ outputs: [
17100
+ {
17101
+ components: [
17102
+ {
17103
+ internalType: "address",
17104
+ name: "agent",
17105
+ type: "address"
17106
+ },
17107
+ {
17108
+ internalType: "uint64",
17109
+ name: "validUntil",
17110
+ type: "uint64"
17111
+ },
17112
+ {
17113
+ internalType: "enum IAgentDelegateRegistryBase.AgentStatus",
17114
+ name: "status",
17115
+ type: "uint8"
17116
+ },
17117
+ {
17118
+ internalType: "uint64",
17119
+ name: "registeredAt",
17120
+ type: "uint64"
17121
+ },
17122
+ {
17123
+ internalType: "uint64",
17124
+ name: "revokedAt",
17125
+ type: "uint64"
17126
+ }
17127
+ ],
17128
+ internalType: "struct IAgentDelegateRegistryBase.AgentRecord",
17129
+ name: "",
17130
+ type: "tuple"
17131
+ }
17132
+ ],
17133
+ stateMutability: "view",
17134
+ type: "function"
17135
+ },
17136
+ {
17137
+ inputs: [],
17138
+ name: "authorizedConsumer",
17139
+ outputs: [
17140
+ {
17141
+ internalType: "address",
17142
+ name: "",
17143
+ type: "address"
17144
+ }
17145
+ ],
17146
+ stateMutability: "view",
17147
+ type: "function"
17148
+ },
17149
+ {
17150
+ inputs: [
17151
+ {
17152
+ internalType: "bytes32",
17153
+ name: "positionId",
17154
+ type: "bytes32"
17155
+ },
17156
+ {
17157
+ internalType: "address",
17158
+ name: "caller",
17159
+ type: "address"
17160
+ }
17161
+ ],
17162
+ name: "canMint",
17163
+ outputs: [
17164
+ {
17165
+ internalType: "bool",
17166
+ name: "ok",
17167
+ type: "bool"
17168
+ },
17169
+ {
17170
+ internalType: "enum IAgentDelegationRegistry.DenyReason",
17171
+ name: "reason",
17172
+ type: "uint8"
17173
+ },
17174
+ {
17175
+ internalType: "uint32",
17176
+ name: "effectiveFloorBps",
17177
+ type: "uint32"
17178
+ }
17179
+ ],
17180
+ stateMutability: "view",
17181
+ type: "function"
17182
+ },
17183
+ {
17184
+ inputs: [
17185
+ {
17186
+ internalType: "bytes32",
17187
+ name: "positionId",
17188
+ type: "bytes32"
17189
+ },
17190
+ {
17191
+ internalType: "address",
17192
+ name: "caller",
17193
+ type: "address"
17194
+ }
17195
+ ],
17196
+ name: "canRenew",
17197
+ outputs: [
17198
+ {
17199
+ internalType: "bool",
17200
+ name: "ok",
17201
+ type: "bool"
17202
+ },
17203
+ {
17204
+ internalType: "enum IAgentDelegationRegistry.DenyReason",
17205
+ name: "reason",
17206
+ type: "uint8"
17207
+ }
17208
+ ],
17209
+ stateMutability: "view",
17210
+ type: "function"
17211
+ },
17212
+ {
17213
+ inputs: [
17214
+ {
17215
+ internalType: "bytes32",
17216
+ name: "positionId",
17217
+ type: "bytes32"
17218
+ },
17219
+ {
17220
+ internalType: "address",
17221
+ name: "caller",
17222
+ type: "address"
17223
+ }
17224
+ ],
17225
+ name: "canRepay",
17226
+ outputs: [
17227
+ {
17228
+ internalType: "bool",
17229
+ name: "ok",
17230
+ type: "bool"
17231
+ },
17232
+ {
17233
+ internalType: "enum IAgentDelegationRegistry.DenyReason",
17234
+ name: "reason",
17235
+ type: "uint8"
17236
+ }
17237
+ ],
17238
+ stateMutability: "view",
17239
+ type: "function"
17240
+ },
17241
+ {
17242
+ inputs: [],
17243
+ name: "core",
17244
+ outputs: [
17245
+ {
17246
+ internalType: "contract IPositionManagerCore",
17247
+ name: "",
17248
+ type: "address"
17249
+ }
17250
+ ],
17251
+ stateMutability: "view",
17252
+ type: "function"
17253
+ },
17254
+ {
17255
+ inputs: [
17256
+ {
17257
+ internalType: "bytes32",
17258
+ name: "positionId",
17259
+ type: "bytes32"
17260
+ }
17261
+ ],
17262
+ name: "disableAutoMint",
17263
+ outputs: [],
17264
+ stateMutability: "nonpayable",
17265
+ type: "function"
17266
+ },
17267
+ {
17268
+ inputs: [
17269
+ {
17270
+ internalType: "bytes32",
17271
+ name: "positionId",
17272
+ type: "bytes32"
17273
+ }
17274
+ ],
17275
+ name: "disableAutoRenew",
17276
+ outputs: [],
17277
+ stateMutability: "nonpayable",
17278
+ type: "function"
17279
+ },
17280
+ {
17281
+ inputs: [
17282
+ {
17283
+ internalType: "bytes32",
17284
+ name: "positionId",
17285
+ type: "bytes32"
17286
+ }
17287
+ ],
17288
+ name: "disableAutoRepay",
17289
+ outputs: [],
17290
+ stateMutability: "nonpayable",
17291
+ type: "function"
17292
+ },
17293
+ {
17294
+ inputs: [
17295
+ {
17296
+ internalType: "bytes32",
17297
+ name: "positionId",
17298
+ type: "bytes32"
17299
+ },
17300
+ {
17301
+ internalType: "uint32",
17302
+ name: "minCollateralRatioBps",
17303
+ type: "uint32"
17304
+ }
17305
+ ],
17306
+ name: "enableAutoMint",
17307
+ outputs: [],
17308
+ stateMutability: "nonpayable",
17309
+ type: "function"
17310
+ },
17311
+ {
17312
+ inputs: [
17313
+ {
17314
+ internalType: "bytes32",
17315
+ name: "positionId",
17316
+ type: "bytes32"
17317
+ },
17318
+ {
17319
+ internalType: "uint32",
17320
+ name: "maxRenewals",
17321
+ type: "uint32"
17322
+ },
17323
+ {
17324
+ internalType: "uint40",
17325
+ name: "maxEndTimestamp",
17326
+ type: "uint40"
17327
+ }
17328
+ ],
17329
+ name: "enableAutoRenew",
17330
+ outputs: [],
17331
+ stateMutability: "nonpayable",
17332
+ type: "function"
17333
+ },
17334
+ {
17335
+ inputs: [
17336
+ {
17337
+ internalType: "bytes32",
17338
+ name: "positionId",
17339
+ type: "bytes32"
17340
+ }
17341
+ ],
17342
+ name: "enableAutoRepay",
17343
+ outputs: [],
17344
+ stateMutability: "nonpayable",
17345
+ type: "function"
17346
+ },
17347
+ {
17348
+ inputs: [
17349
+ {
17350
+ internalType: "bytes32",
17351
+ name: "positionId",
17352
+ type: "bytes32"
17353
+ }
17354
+ ],
17355
+ name: "getLoanGrant",
17356
+ outputs: [
17357
+ {
17358
+ components: [
17359
+ {
17360
+ internalType: "address",
17361
+ name: "borrower",
17362
+ type: "address"
17363
+ },
17364
+ {
17365
+ internalType: "uint32",
17366
+ name: "scopeBits",
17367
+ type: "uint32"
17368
+ },
17369
+ {
17370
+ internalType: "uint32",
17371
+ name: "maxRenewals",
17372
+ type: "uint32"
17373
+ },
17374
+ {
17375
+ internalType: "uint32",
17376
+ name: "renewalsUsed",
17377
+ type: "uint32"
17378
+ },
17379
+ {
17380
+ internalType: "uint40",
17381
+ name: "maxEndTimestamp",
17382
+ type: "uint40"
17383
+ },
17384
+ {
17385
+ internalType: "uint32",
17386
+ name: "minCollateralRatioBps",
17387
+ type: "uint32"
17388
+ }
17389
+ ],
17390
+ internalType: "struct IAgentDelegationRegistry.LoanGrant",
17391
+ name: "",
17392
+ type: "tuple"
17393
+ }
17394
+ ],
17395
+ stateMutability: "view",
17396
+ type: "function"
17397
+ },
17398
+ {
17399
+ inputs: [
17400
+ {
17401
+ internalType: "bytes32",
17402
+ name: "role",
17403
+ type: "bytes32"
17404
+ }
17405
+ ],
17406
+ name: "getRoleAdmin",
17407
+ outputs: [
17408
+ {
17409
+ internalType: "bytes32",
17410
+ name: "",
17411
+ type: "bytes32"
17412
+ }
17413
+ ],
17414
+ stateMutability: "view",
17415
+ type: "function"
17416
+ },
17417
+ {
17418
+ inputs: [
17419
+ {
17420
+ internalType: "bytes32",
17421
+ name: "role",
17422
+ type: "bytes32"
17423
+ },
17424
+ {
17425
+ internalType: "uint256",
17426
+ name: "index",
17427
+ type: "uint256"
17428
+ }
17429
+ ],
17430
+ name: "getRoleMember",
17431
+ outputs: [
17432
+ {
17433
+ internalType: "address",
17434
+ name: "",
17435
+ type: "address"
17436
+ }
17437
+ ],
17438
+ stateMutability: "view",
17439
+ type: "function"
17440
+ },
17441
+ {
17442
+ inputs: [
17443
+ {
17444
+ internalType: "bytes32",
17445
+ name: "role",
17446
+ type: "bytes32"
17447
+ }
17448
+ ],
17449
+ name: "getRoleMemberCount",
17450
+ outputs: [
17451
+ {
17452
+ internalType: "uint256",
17453
+ name: "",
17454
+ type: "uint256"
17455
+ }
17456
+ ],
17457
+ stateMutability: "view",
17458
+ type: "function"
17459
+ },
17460
+ {
17461
+ inputs: [
17462
+ {
17463
+ internalType: "bytes32",
17464
+ name: "role",
17465
+ type: "bytes32"
17466
+ }
17467
+ ],
17468
+ name: "getRoleMembers",
17469
+ outputs: [
17470
+ {
17471
+ internalType: "address[]",
17472
+ name: "",
17473
+ type: "address[]"
17474
+ }
17475
+ ],
17476
+ stateMutability: "view",
17477
+ type: "function"
17478
+ },
17479
+ {
17480
+ inputs: [
17481
+ {
17482
+ internalType: "bytes32",
17483
+ name: "role",
17484
+ type: "bytes32"
17485
+ },
17486
+ {
17487
+ internalType: "address",
17488
+ name: "account",
17489
+ type: "address"
17490
+ }
17491
+ ],
17492
+ name: "grantRole",
17493
+ outputs: [],
17494
+ stateMutability: "nonpayable",
17495
+ type: "function"
17496
+ },
17497
+ {
17498
+ inputs: [
17499
+ {
17500
+ internalType: "bytes32",
17501
+ name: "role",
17502
+ type: "bytes32"
17503
+ },
17504
+ {
17505
+ internalType: "address",
17506
+ name: "account",
17507
+ type: "address"
17508
+ }
17509
+ ],
17510
+ name: "hasRole",
17511
+ outputs: [
17512
+ {
17513
+ internalType: "bool",
17514
+ name: "",
17515
+ type: "bool"
17516
+ }
17517
+ ],
17518
+ stateMutability: "view",
17519
+ type: "function"
17520
+ },
17521
+ {
17522
+ inputs: [
17523
+ {
17524
+ internalType: "address",
17525
+ name: "admin",
17526
+ type: "address"
17527
+ },
17528
+ {
17529
+ internalType: "address",
17530
+ name: "adminModule_",
17531
+ type: "address"
17532
+ },
17533
+ {
17534
+ internalType: "address",
17535
+ name: "registrar",
17536
+ type: "address"
17537
+ },
17538
+ {
17539
+ internalType: "address",
17540
+ name: "pauser",
17541
+ type: "address"
17542
+ },
17543
+ {
17544
+ internalType: "contract IPositionManagerCore",
17545
+ name: "core_",
17546
+ type: "address"
17547
+ }
17548
+ ],
17549
+ name: "initialize",
17550
+ outputs: [],
17551
+ stateMutability: "nonpayable",
17552
+ type: "function"
17553
+ },
17554
+ {
17555
+ inputs: [
17556
+ {
17557
+ internalType: "uint32",
17558
+ name: "floorMinBps",
17559
+ type: "uint32"
17560
+ }
17561
+ ],
17562
+ name: "initializeV2",
17563
+ outputs: [],
17564
+ stateMutability: "nonpayable",
17565
+ type: "function"
17566
+ },
17567
+ {
17568
+ inputs: [
17569
+ {
17570
+ internalType: "address",
17571
+ name: "user",
17572
+ type: "address"
17573
+ }
17574
+ ],
17575
+ name: "isAgentActive",
17576
+ outputs: [
17577
+ {
17578
+ internalType: "bool",
17579
+ name: "",
17580
+ type: "bool"
17581
+ }
17582
+ ],
17583
+ stateMutability: "view",
17584
+ type: "function"
17585
+ },
17586
+ {
17587
+ inputs: [
17588
+ {
17589
+ internalType: "address",
17590
+ name: "",
17591
+ type: "address"
17592
+ }
17593
+ ],
17594
+ name: "keyOfAgent",
17595
+ outputs: [
17596
+ {
17597
+ internalType: "bytes32",
17598
+ name: "",
17599
+ type: "bytes32"
17600
+ }
17601
+ ],
17602
+ stateMutability: "view",
17603
+ type: "function"
17604
+ },
17605
+ {
17606
+ inputs: [],
17607
+ name: "maxAgentTtl",
17608
+ outputs: [
17609
+ {
17610
+ internalType: "uint64",
17611
+ name: "",
17612
+ type: "uint64"
17613
+ }
17614
+ ],
17615
+ stateMutability: "view",
17616
+ type: "function"
17617
+ },
17618
+ {
17619
+ inputs: [],
17620
+ name: "pause",
17621
+ outputs: [],
17622
+ stateMutability: "nonpayable",
17623
+ type: "function"
17624
+ },
17625
+ {
17626
+ inputs: [],
17627
+ name: "paused",
17628
+ outputs: [
17629
+ {
17630
+ internalType: "bool",
17631
+ name: "",
17632
+ type: "bool"
17633
+ }
17634
+ ],
17635
+ stateMutability: "view",
17636
+ type: "function"
17637
+ },
17638
+ {
17639
+ inputs: [],
17640
+ name: "proxiableUUID",
17641
+ outputs: [
17642
+ {
17643
+ internalType: "bytes32",
17644
+ name: "",
17645
+ type: "bytes32"
17646
+ }
17647
+ ],
17648
+ stateMutability: "view",
17649
+ type: "function"
17650
+ },
17651
+ {
17652
+ inputs: [
17653
+ {
17654
+ internalType: "bytes32",
17655
+ name: "positionId",
17656
+ type: "bytes32"
17657
+ }
17658
+ ],
17659
+ name: "recordRenewal",
17660
+ outputs: [],
17661
+ stateMutability: "nonpayable",
17662
+ type: "function"
17663
+ },
17664
+ {
17665
+ inputs: [
17666
+ {
17667
+ internalType: "address",
17668
+ name: "user",
17669
+ type: "address"
17670
+ },
17671
+ {
17672
+ internalType: "address",
17673
+ name: "agent",
17674
+ type: "address"
17675
+ },
17676
+ {
17677
+ internalType: "uint64",
17678
+ name: "validUntil",
17679
+ type: "uint64"
17680
+ }
17681
+ ],
17682
+ name: "registerAgent",
17683
+ outputs: [],
17684
+ stateMutability: "nonpayable",
17685
+ type: "function"
17686
+ },
17687
+ {
17688
+ inputs: [
17689
+ {
17690
+ internalType: "bytes32",
17691
+ name: "role",
17692
+ type: "bytes32"
17693
+ },
17694
+ {
17695
+ internalType: "address",
17696
+ name: "callerConfirmation",
17697
+ type: "address"
17698
+ }
17699
+ ],
17700
+ name: "renounceRole",
17701
+ outputs: [],
17702
+ stateMutability: "nonpayable",
17703
+ type: "function"
17704
+ },
17705
+ {
17706
+ inputs: [
17707
+ {
17708
+ internalType: "address",
17709
+ name: "user",
17710
+ type: "address"
17711
+ },
17712
+ {
17713
+ internalType: "bytes32",
17714
+ name: "reason",
17715
+ type: "bytes32"
17716
+ }
17717
+ ],
17718
+ name: "revokeAgent",
17719
+ outputs: [],
17720
+ stateMutability: "nonpayable",
17721
+ type: "function"
17722
+ },
17723
+ {
17724
+ inputs: [
17725
+ {
17726
+ internalType: "bytes32",
17727
+ name: "role",
17728
+ type: "bytes32"
17729
+ },
17730
+ {
17731
+ internalType: "address",
17732
+ name: "account",
17733
+ type: "address"
17734
+ }
17735
+ ],
17736
+ name: "revokeRole",
17737
+ outputs: [],
17738
+ stateMutability: "nonpayable",
17739
+ type: "function"
17740
+ },
17741
+ {
17742
+ inputs: [
17743
+ {
17744
+ internalType: "address",
17745
+ name: "user",
17746
+ type: "address"
17747
+ },
17748
+ {
17749
+ internalType: "address",
17750
+ name: "newAgent",
17751
+ type: "address"
17752
+ },
17753
+ {
17754
+ internalType: "uint64",
17755
+ name: "validUntil",
17756
+ type: "uint64"
17757
+ }
17758
+ ],
17759
+ name: "rotateAgent",
17760
+ outputs: [],
17761
+ stateMutability: "nonpayable",
17762
+ type: "function"
17763
+ },
17764
+ {
17765
+ inputs: [
17766
+ {
17767
+ internalType: "address",
17768
+ name: "newAdminModule",
17769
+ type: "address"
17770
+ }
17771
+ ],
17772
+ name: "setAdminModule",
17773
+ outputs: [],
17774
+ stateMutability: "nonpayable",
17775
+ type: "function"
17776
+ },
17777
+ {
17778
+ inputs: [
17779
+ {
17780
+ internalType: "uint32",
17781
+ name: "bps",
17782
+ type: "uint32"
17783
+ }
17784
+ ],
17785
+ name: "setAgentMintFloorMin",
17786
+ outputs: [],
17787
+ stateMutability: "nonpayable",
17788
+ type: "function"
17789
+ },
17790
+ {
17791
+ inputs: [
17792
+ {
17793
+ internalType: "address",
17794
+ name: "consumer",
17795
+ type: "address"
17796
+ }
17797
+ ],
17798
+ name: "setAuthorizedConsumer",
17799
+ outputs: [],
17800
+ stateMutability: "nonpayable",
17801
+ type: "function"
17802
+ },
17803
+ {
17804
+ inputs: [
17805
+ {
17806
+ internalType: "uint64",
17807
+ name: "newMaxAgentTtl",
17808
+ type: "uint64"
17809
+ }
17810
+ ],
17811
+ name: "setMaxAgentTtl",
17812
+ outputs: [],
17813
+ stateMutability: "nonpayable",
17814
+ type: "function"
17815
+ },
17816
+ {
17817
+ inputs: [
17818
+ {
17819
+ internalType: "bytes32",
17820
+ name: "positionId",
17821
+ type: "bytes32"
17822
+ },
17823
+ {
17824
+ internalType: "uint32",
17825
+ name: "newFloorBps",
17826
+ type: "uint32"
17827
+ }
17828
+ ],
17829
+ name: "setMintCollateralFloor",
17830
+ outputs: [],
17831
+ stateMutability: "nonpayable",
17832
+ type: "function"
17833
+ },
17834
+ {
17835
+ inputs: [
17836
+ {
17837
+ internalType: "bytes4",
17838
+ name: "interfaceId",
17839
+ type: "bytes4"
17840
+ }
17841
+ ],
17842
+ name: "supportsInterface",
17843
+ outputs: [
17844
+ {
17845
+ internalType: "bool",
17846
+ name: "",
17847
+ type: "bool"
17848
+ }
17849
+ ],
17850
+ stateMutability: "view",
17851
+ type: "function"
17852
+ },
17853
+ {
17854
+ inputs: [],
17855
+ name: "unpause",
17856
+ outputs: [],
17857
+ stateMutability: "nonpayable",
17858
+ type: "function"
17859
+ },
17860
+ {
17861
+ inputs: [
17862
+ {
17863
+ internalType: "address",
17864
+ name: "newImplementation",
17865
+ type: "address"
17866
+ },
17867
+ {
17868
+ internalType: "bytes",
17869
+ name: "data",
17870
+ type: "bytes"
17871
+ }
17872
+ ],
17873
+ name: "upgradeToAndCall",
17874
+ outputs: [],
17875
+ stateMutability: "payable",
17876
+ type: "function"
17877
+ },
17878
+ {
17879
+ inputs: [
17880
+ {
17881
+ internalType: "address",
17882
+ name: "agent",
17883
+ type: "address"
17884
+ }
17885
+ ],
17886
+ name: "userOfAgent",
17887
+ outputs: [
17888
+ {
17889
+ internalType: "address",
17890
+ name: "",
17891
+ type: "address"
17892
+ }
17893
+ ],
17894
+ stateMutability: "view",
17895
+ type: "function"
17896
+ }
17897
+ ];
17898
+ var _bytecode2 = "0x60a080604052346100ea57306080527ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460ff8160401c166100d9576002600160401b03196001600160401b03821601610073575b60405161308690816100f0823960805181818161121b015261140e0152f35b6001600160401b0319166001600160401b039081177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005581527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a13880610054565b63f92ee8a960e01b60005260046000fd5b600080fdfe608080604052600436101561001357600080fd5b60003560e01c90816301ffc9a7146120b4575080630d33f3c2146120905780630f3f4a94146120445780631459457a14611cfd578063188787e814611c2b57806318c38b8914611b1a5780631b02993114611aa65780631d44454114611a0b578063248a9ca3146119e55780632ec22d4c1461191c5780632f0647ce1461189d5780632f2ff15d1461186c57806336568abe14611826578063392f1087146117db5780633f4ba83a146116e35780633f5aadc9146116745780634f1ef28614611392578063523403631461129b5780635273b6f61461127257806352d1902d14611208578063554c4f4b14611178578063561b7f8a146110145780635bc26aea14610f875780635c975abb14610f575780636289d18c14610ed65780636711cc0b14610eba5780636e852a7814610da95780637e35bf6e14610d755780638343f67414610d485780638456cb5914610c525780638f33527f14610c185780639010d07c14610bc457806391d1485414610b6a5780639b9d30c114610b41578063a19af3f614610a7c578063a217fddf14610a60578063a3246ad31461099e578063a878086414610982578063ac3c0e3014610875578063ad3cb1cc1461082e578063b3fad6381461074b578063c34e9c261461072f578063c6fbbb87146105dd578063ca15c873146105a4578063d547741f1461056c578063dd71d99a1461052a578063e0922fa11461047d578063e187828314610454578063f2f4eb261461042b578063f68e955314610402578063fd437d39146102945763ffa1ad741461025b57600080fd5b3461028f57600036600319011261028f5761028b610277612282565b60405191829160208352602083019061225d565b0390f35b600080fd5b3461028f57606036600319011261028f576102ad612137565b6102b5612121565b906102be612224565b336000908152600080516020612f9a833981519152602052604090205490919060ff16156103db576001600160a01b031660008181526001602052604090208054939060e085901c60ff1660038110156103c5576001036103b45781600160209261034b877fc5d5c5bbf10444998e0ea6d4725e79027b574e1c14ec929279e8a9a95c6c6e919688612c79565b818060a01b038316828060a01b031982541617815561036a878261243b565b0180546001600160401b031916426001600160401b03908116919091179091556001600160a01b0391821660008181526002855260409081902087905551969091168652951693a4005b632437e77160e11b60005260046000fd5b634e487b7160e01b600052602160045260246000fd5b63e2517d3f60e01b6000523360045260008051602061301a83398151915260245260446000fd5b3461028f57600036600319011261028f57602060405160008051602061301a8339815191528152f35b3461028f57600036600319011261028f576003546040516001600160a01b039091168152602090f35b3461028f57600036600319011261028f576004546040516001600160a01b039091168152602090f35b3461028f57602036600319011261028f576004356001600160401b0381169081810361028f576000546001600160a01b038116330361051957600160a01b600160e01b0319811660a092831b600160a01b600160e01b031617600055604080519190921c6001600160401b0316815260208101929092527f9c195448332abd01f716db873b329752ea02f19d33f7e311fb0daf082c4edd0391a1005b6349db3bd360e01b60005260046000fd5b3461028f57602036600319011261028f576001600160a01b0361054b612137565b166000526002602052602060018060a01b0360406000205416604051908152f35b3461028f57604036600319011261028f576105a260043561058b612121565b9061059d61059882612302565b612a2c565b612abe565b005b3461028f57602036600319011261028f57600435600052600080516020612f1a8339815191526020526020604060002054604051908152f35b3461028f57602036600319011261028f5760043560018060a01b036004541633141580610708575b6106f757600081815260056020526040902080546001600160a01b038116156106e65760018160a01c16156106e65763ffffffff8160c01c1680151590816106d8575b506106c75760e01c6001019063ffffffff82116106b15780546001600160e01b031660e083901b6001600160e01b03191617905560405163ffffffff90911681527f859a3b34c0d733a1033c6089d4d18643a0705b707970a0d0d79c84423f089da190602090a2005b634e487b7160e01b600052601160045260246000fd5b638a6ea6bf60e01b60005260046000fd5b90508160e01c101584610648565b6360eb6c2360e01b60005260046000fd5b634b95b20b60e11b60005260046000fd5b50336000908152600080516020612f9a833981519152602052604090205460ff1615610605565b3461028f57600036600319011261028f57602060405160028152f35b3461028f57602036600319011261028f57600060a060405161076c816121cb565b8281528260208201528260408201528260608201528260808201520152600435600052600560205260c0604060002063ffffffff604051916107ad836121cb565b64ffffffffff8154938360018060a01b03861695868352816020840195818360a01c168752816001604087019282868e1c168452606088019560e01c86520154978160a060808901988a8c168a52019960281c1689526040519a8b52511660208a0152511660408801525116606086015251166080840152511660a0820152f35b3461028f57600036600319011261028f5761028b604080519061085181836121e6565b60058252640352e302e360dc1b60208301525191829160208352602083019061225d565b3461028f57602036600319011261028f5761088e612137565b6000608060405161089e8161219a565b828152826020820152826040820152826060820152015260018060a01b0316600052600160205260406000206040516108d68161219a565b81546001600160a01b038116825260a081901c6001600160401b03166020830190815292604083019160e01c60ff169060038210156103c557908252600101546001600160401b0380821660608501908152604092831c821660808601908152925194516001600160a01b03168552945116602084015290519260038410156103c557604083019390935291516001600160401b0390811660608301529151909116608082015260a090f35b3461028f57600036600319011261028f57602060405160018152f35b3461028f57602036600319011261028f57600435600052600080516020612f1a83398151915260205260406000206040518060208354918281520190819360005260206000209060005b818110610a4a57505050816109fe9103826121e6565b6040519182916020830190602084525180915260408301919060005b818110610a28575050500390f35b82516001600160a01b0316845285945060209384019390920191600101610a1a565b82548452602090930192600192830192016109e8565b3461028f57600036600319011261028f57602060405160008152f35b3461028f57604036600319011261028f57600435610a98612174565b90610aa1612639565b63ffffffff600654169163ffffffff811692808410908115610b38575b50610b275760206001610b147f1da95b87b4c773f68c1447ffc5644e41a8a8887d55065beb64852014cf7140be93610af586612684565b9390610b0e600463ffffffff835460a01c1617826122a5565b016122c8565b6040519485526001600160a01b031693a3005b634346c13160e01b60005260046000fd5b90501584610abe565b3461028f57600036600319011261028f576020604051600080516020612f5a8339815191528152f35b3461028f57604036600319011261028f57610b83612121565b600435600052600080516020612ffa83398151915260205260406000209060018060a01b0316600052602052602060ff604060002054166040519015158152f35b3461028f57604036600319011261028f57600435600052600080516020612f1a8339815191526020526020610bff6024356040600020612d46565b905460405160039290921b1c6001600160a01b03168152f35b3461028f57602036600319011261028f576001600160a01b03610c39612137565b1660005260026020526020604060002054604051908152f35b3461028f57600036600319011261028f573360009081527f0ac8cc3d209806126662940717264973110c39045b305f6ba49613325a615e09602052604090205460ff1615610d2157610ca2612639565b600160ff1960008051602061303a83398151915254161760008051602061303a833981519152557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586020604051338152a16040514281527f80170b5fcdd2bf1e0660ef4b8851f86685f64d41b1a19de1471947ece8725aac60203392a2005b63e2517d3f60e01b60005233600452600080516020612f5a83398151915260245260446000fd5b3461028f57600036600319011261028f5760005460405160a09190911c6001600160401b03168152602090f35b3461028f57604036600319011261028f57610d99610d91612121565b6004356123a5565b9061028b6040519283928361215a565b3461028f57604036600319011261028f57610dc2612137565b336000908152600080516020612f9a833981519152602052604090205460ff161580610ea7575b610e97576001600160a01b03166000818152600160205260409020805460e01c60ff1660038110156103c5576001036103b457805460ff60e01b198116600160e11b1782556001919091018054600160401b600160801b03191642604090811b600160401b600160801b0316919091179091555160243581526001600160a01b0390911691907fc0499cc07ed9d734deec6857802d3f0fa8d5afaf79a7008beb8ba7bef62a271b90602090a3005b62fca64560e31b60005260046000fd5b50336001600160a01b0382161415610de9565b3461028f57600036600319011261028f57602060405160048152f35b3461028f57602036600319011261028f57610eef612187565b6000546001600160a01b031633036105195763ffffffff8116908115610f4657600080516020612fda83398151915291610f4163ffffffff9260065492841984161760065560405193849316836122eb565b0390a1005b6338f3377360e21b60005260046000fd5b3461028f57600036600319011261028f57602060ff60008051602061303a83398151915254166040519015158152f35b3461028f57602036600319011261028f57610fa0612137565b6000546001600160a01b0381169033829003610519576001600160a01b038316928315611003573b15610ff2576001600160a01b03191682176000908155600080516020612fba8339815191529080a3005b636f7c43f160e01b60005260046000fd5b63e6c4247b60e01b60005260046000fd5b3461028f57606036600319011261028f5761102d612137565b611035612121565b61103d612224565b91611046612639565b336000908152600080516020612f9a833981519152602052604090205460ff161580611165575b610e97576001600160a01b03166000818152600160205260409020805491929160e01c60ff1660038110156103c55760011461115457816020916110d3867ff223dc085722c94c84dcf67427e225799be616382a2a484d378f8921c69a20339587612c79565b80546001600160a01b0319166001600160a01b0383161781556110f6868261243b565b6001810180546001600160801b031916426001600160401b0390811691909117909155815460ff60e01b1916600160e01b179091556001600160a01b03919091166000818152600284526040908190208690555195909116855293a3005b639d2c8fdf60e01b60005260046000fd5b50336001600160a01b038216141561106d565b3461028f57602036600319011261028f576001600160a01b03611199612137565b166000526001602052604060002060ff60008051602061303a833981519152541615806111ec575b602091816111d5575b506040519015158152f35b5460a01c6001600160401b031642109050826111ca565b5060ff815460e01c169060038210156103c557906001146111c1565b3461028f57600036600319011261028f577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163003611261576020604051600080516020612f7a8339815191528152f35b63703e46dd60e11b60005260046000fd5b3461028f57600036600319011261028f576000546040516001600160a01b039091168152602090f35b3461028f57602036600319011261028f57600435600081815260056020526040902080546001600160a01b0381169291908315908115611383575b506106e657336000908152600080516020612f9a833981519152602052604090205460ff161580611379575b611368578061131e63fffffffe611341935460a01c16826122a5565b80546001600160c01b0316815560018101805464ffffffffff1916905582612a02565b7fa5ffbdba01b15df97334e34ad816b9986b6057a5ddc97aba93b7e8ccd21759ed600080a3005b630a606ec360e11b60005260046000fd5b5082331415611302565b6001915060a01c1615846112d6565b604036600319011261028f576113a6612137565b602435906001600160401b03821161028f573660238301121561028f578160040135906113d282612209565b916113e060405193846121e6565b8083526020830193366024838301011161028f57816000926024602093018737840101526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016308114908115611651575b50611261576000546001600160a01b03163303610519576001600160a01b03811692831561100357813b156116405730841461163157600080516020612f7a8339815191525484611488612282565b7f6ea8b34d59b2818d3f37a08dddaa06f5886b9c20c907b36f03ca6528e106e86f6114be6040519260408452604084019061225d565b4260208401526001600160a01b038516929081900390a36040516352d1902d60e01b8152602081600481895afa600091816115fd575b5061150e5785634c9c8ce360e01b60005260045260246000fd5b9081600080516020612f7a8339815191528793036115e95750833b156115d4576001600160a01b0319168117600080516020612f7a833981519152557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a28251156115b957600080916105a2945190845af43d156115b1573d9161159483612209565b926115a260405194856121e6565b83523d6000602085013e612eb8565b606091612eb8565b505050346115c357005b63b398979f60e01b60005260046000fd5b50634c9c8ce360e01b60005260045260246000fd5b632a87526960e21b60005260045260246000fd5b9091506020813d602011611629575b81611619602093836121e6565b8101031261028f575190876114f4565b3d915061160c565b614e8d60eb1b60005260046000fd5b632e07c4bd60e11b60005260046000fd5b600080516020612f7a833981519152546001600160a01b03161415905084611439565b3461028f57602036600319011261028f57600435611690612639565b6116b261169c82612684565b9190600263ffffffff825460a01c1617906122a5565b6001600160a01b0316907fc2713e691344add4705edc62a0ee5aede95ba66ad68f97316efef9cb50644edd600080a3005b3461028f57600036600319011261028f57336000908152600080516020612f9a833981519152602052604090205460ff1615806117c6575b6117b55760008051602061303a8339815191525460ff8116156117a45760ff191660008051602061303a833981519152557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6020604051338152a16040514281527f107553d8191d85b405879cf752997865edd48d94e20bda4dd27223c94b31a7cc60203392a2005b638dfc202b60e01b60005260046000fd5b63659a07b360e11b60005260046000fd5b506000546001600160a01b031633141561171b565b3461028f57604036600319011261028f57606061181e63ffffffff611809611801612121565b600435612323565b9193906040519415158552602085019061214d565b166040820152f35b3461028f57604036600319011261028f5761183f612121565b336001600160a01b0382160361185b576105a290600435612abe565b63334bd91960e11b60005260046000fd5b3461028f57604036600319011261028f576105a260043561188b612121565b9061189861059882612302565b612a76565b3461028f57602036600319011261028f576004356118eb6118bd82612990565b91906118d363fffffffb825460a01c16826122a5565b60018101805463ffffffff60281b1916905583612a02565b6001600160a01b0316907f09cb4ec44cdef8489412844b9682f87f7900758fa2bd7e039113e9125e538e0f600080a3005b3461028f57602036600319011261028f57600435600081815260056020526040902080546001600160a01b03811692919083159081156119d6575b506106e657336000908152600080516020612f9a833981519152602052604090205460ff1615806119cc575b611368578061199f63fffffffd6119a5935460a01c16826122a5565b82612a02565b7fb390ab029eab314bd18190ebe73d7e5c1c336beaa5c83ac22578378dc9ccc405600080a3005b5082331415611983565b6002915060a01c161584611957565b3461028f57602036600319011261028f576020611a03600435612302565b604051908152f35b3461028f57604036600319011261028f57600435611a27612174565b63ffffffff600654168063ffffffff831610908115611a9d575b50610b27577e8a218591d4362499c38c38eb1c12e7a7cc97a9068818d1fe6046a42ba4a5ba906001611a7284612990565b5001611a898263ffffffff835460281c16926122c8565b611a98604051928392836122eb565b0390a2005b90501583611a41565b3461028f57602036600319011261028f57611abf612137565b6000546001600160a01b0316330361051957600480546001600160a01b039283166001600160a01b0319821681179092559091167f8556037c5648b2d5b51736f07a8fa4d099812ef06abf79a5731be619b111e4d4600080a3005b3461028f57602036600319011261028f57611b33612187565b60008051602061305a8339815191525460ff8160401c16908115611c13575b50611c025760008051602061305a833981519152805460026001600160401b0319821681179092556000546001600160481b031990911690911791906001600160a01b031633036105195763ffffffff168015610f4657604081600080516020612fda8339815191529263ffffffff196006541617600655815190600082526020820152a160008051602061305a83398151915255600080516020612f3a833981519152602060405160028152a1005b63f92ee8a960e01b60005260046000fd5b60026001600160401b03919091161015905082611b52565b3461028f57606036600319011261028f57600435611c47612174565b9060443564ffffffffff811680910361028f57604060017ef8e9f2101420b089a9228a3e9fa546f669754196824e19ec1adab7cab1f2e992611c87612639565b611c9085612684565b9290611ca88263ffffffff835460a01c1617826122a5565b805463ffffffff60c01b60c08a901b1663ffffffff60c01b199091161760e083901b83900316815501805464ffffffffff191682179055825163ffffffff909616865260208601526001600160a01b031693a3005b3461028f5760a036600319011261028f57611d16612137565b611d1e612121565b906044356001600160a01b03811680820361028f576064356001600160a01b0381169182820361028f576084356001600160a01b038116949085900361028f5760008051602061305a83398151915254604081901c60ff161596906001600160401b03168015908161203c575b6001149081612032575b159081612029575b50611c025760008051602061305a83398151915280546001600160401b031916600117905586612004575b611dd0612b02565b611dd8612b02565b611de0612b02565b611de8612b02565b6001600160a01b038116908115611003578315611003578515611003576001600160a01b038916988915611003573b15610ff257611e27906000612b30565b9081611fbd575b5015611f0257611e4c9060008051602061301a833981519152612b30565b9081611f68575b5015611f0257611e7190600080516020612f5a833981519152612b30565b9081611f13575b5015611f0257600080546001600160a01b031916841781556040519390600080516020612fba8339815191528180a3801561100357803b15610ff257600380546001600160a01b031916919091179055611ece57005b60008051602061305a833981519152805460ff60401b1916905560018152600080516020612f3a83398151915290602090a1005b63cf5a8e3360e01b60005260046000fd5b600080516020612f5a833981519152600052600080516020612f1a833981519152602052611f61907ffff5b43478fa6840382eb63777e0da6941d320b940e3f70f0ea4780feff95827612d74565b5084611e78565b60008051602061301a833981519152600052600080516020612f1a833981519152602052611fb6907f32d31393d541a265984ec379cddd8b1fcbe5f2b0eb8ad81dddfead454f135eaa612d74565b5086611e53565b60008052600080516020612f1a833981519152602052611ffd907f615f0f9e84155bea8cc509fe18befeb1baf65611e38a6ba60964480fb29dfd44612d74565b5088611e2e565b60008051602061305a833981519152805460ff60401b1916600160401b179055611dc8565b90501589611d9d565b303b159150611d95565b889150611d8b565b3461028f57604036600319011261028f57612075612060612121565b60043560005260056020526040600020612464565b600a8110156103c55761028b9060405191818392158361215a565b3461028f57600036600319011261028f57602063ffffffff60065416604051908152f35b3461028f57602036600319011261028f576004359063ffffffff60e01b821680920361028f57602091635a05180f60e01b81149081156120f6575b5015158152f35b637965db0b60e01b811491508115612110575b50836120ef565b6301ffc9a760e01b14905083612109565b602435906001600160a01b038216820361028f57565b600435906001600160a01b038216820361028f57565b90600a8210156103c55752565b9015158152604081019291612172916020019061214d565b565b6024359063ffffffff8216820361028f57565b6004359063ffffffff8216820361028f57565b60a081019081106001600160401b038211176121b557604052565b634e487b7160e01b600052604160045260246000fd5b60c081019081106001600160401b038211176121b557604052565b601f909101601f19168101906001600160401b038211908210176121b557604052565b6001600160401b0381116121b557601f01601f191660200190565b604435906001600160401b038216820361028f57565b60005b83811061224d5750506000910152565b818101518382015260200161223d565b906020916122768151809281855285808601910161223a565b601f01601f1916010190565b604051906122916040836121e6565b6005825264312e312e3160d81b6020830152565b805463ffffffff60a01b191660a09290921b63ffffffff60a01b16919091179055565b805463ffffffff60281b191660289290921b63ffffffff60281b16919091179055565b63ffffffff91821681529116602082015260400190565b600052600080516020612ffa83398151915260205260016040600020015490565b600052600560205261233a60406000209182612521565b600a8110156103c5578061239b5750600163ffffffff91015460281c1663ffffffff6006541681158015612393575b6123865780821061237f57505b60019160009190565b9050612376565b5050600090600390600090565b508015612369565b6000929091508290565b60005260056020526123bc604060002091826125ad565b600a8110156103c557806124335750805463ffffffff8160c01c168015159182612425575b505061241c576001015464ffffffffff168015159081612411575b5061240957600190600090565b600090600990565b9050421015386123fc565b50600090600890565b60e01c1015905038806123e1565b600092909150565b8054600160a01b600160e01b03191660a09290921b600160a01b600160e01b0316919091179055565b60ff60008051602061303a833981519152541661251a57546001600160a01b0381169081156125125760a01c6002161561250b5760005260016020526040600020549060ff8260e01c1660038110156103c5578015612503576002146124fc574260a083901c6001600160401b031611156124f5576001600160a01b039081169116036124f057600090565b600790565b5050600690565b5050600590565b505050600490565b5050600390565b505050600290565b5050600190565b60ff60008051602061303a833981519152541661251a57546001600160a01b0381169081156125125760a01c6004161561250b5760005260016020526040600020549060ff8260e01c1660038110156103c5578015612503576002146124fc574260a083901c6001600160401b031611156124f5576001600160a01b039081169116036124f057600090565b60ff60008051602061303a833981519152541661251a57546001600160a01b0381169081156125125760a01c6001161561250b5760005260016020526040600020549060ff8260e01c1660038110156103c5578015612503576002146124fc574260a083901c6001600160401b031611156124f5576001600160a01b039081169116036124f057600090565b60ff60008051602061303a833981519152541661265257565b63d93c066560e01b60005260046000fd5b519064ffffffffff8216820361028f57565b519061ffff8216820361028f57565b801561297f57600354604051638d34875560e01b8152600481018390529190600090839060249082906001600160a01b03165afa918215612973576000926127c8575b506080820151336000908152600080516020612f9a83398151915260205260409020546001600160a01b03909116929060ff1615806127be575b61136857610120015160088110156103c5576003811490600082156127b0575b821561279f575b505061278e5781600052600160205260ff60406000205460e01c1660038110156103c55760010361277d57600090815260056020526040902080546001600160a01b0319166001600160a01b03831617815591565b632e68d1d360e21b60005260046000fd5b63e9f6db8560e01b60005260046000fd5b9091506103c5576007143880612728565b506005811491506000612721565b5082331415612701565b90913d8082843e6127d981846121e6565b820191602081840312612953578051906001600160401b03821161295b5701906101a08284031261295057604051926101a084016001600160401b0381118582101761295f5760409081528351855260208085015190860152838101519085015260608301516001600160401b03811161295b57830181601f8201121561295b5780519061286682612209565b9261287460405194856121e6565b828452602083830101116129575790612893916020808501910161223a565b606084015260808201516001600160a01b03811681036129535760808401526128be60a08301612663565b60a08401526128cf60c08301612663565b60c08401526128e060e08301612675565b60e08401526128f26101008301612663565b610100840152610120820151906008821015612950575061294391610180916101208501526129246101408201612663565b6101408501526129376101608201612675565b61016085015201612663565b61018082015290386126c7565b80fd5b5080fd5b8380fd5b8280fd5b634e487b7160e01b83526041600452602483fd5b6040513d6000823e3d90fd5b637bb0b62160e01b60005260046000fd5b6000908152600560205260409020805490916001600160a01b0382169182159081156129f3575b506106e657336000908152600080516020612f9a833981519152602052604090205460ff1615806129e9575b61136857565b50813314156129e3565b6004915060a01c1615386129b7565b905460a01c63ffffffff1615612a155750565b600052600560205260006001604082208281550155565b6000818152600080516020612ffa8339815191526020908152604080832033845290915290205460ff1615612a5e5750565b63e2517d3f60e01b6000523360045260245260446000fd5b612a808282612b30565b9182612a8b57505090565b6000918252600080516020612f1a8339815191526020526040909120612aba916001600160a01b031690612d74565b5090565b612ac88282612bd9565b9182612ad357505090565b6000918252600080516020612f1a8339815191526020526040909120612aba916001600160a01b031690612de5565b60ff60008051602061305a8339815191525460401c1615612b1f57565b631afcd79f60e31b60005260046000fd5b6000818152600080516020612ffa833981519152602090815260408083206001600160a01b038616845290915290205460ff16612bd2576000818152600080516020612ffa833981519152602090815260408083206001600160a01b0395909516808452949091528120805460ff19166001179055339291907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9080a4600190565b5050600090565b6000818152600080516020612ffa833981519152602090815260408083206001600160a01b038616845290915290205460ff1615612bd2576000818152600080516020612ffa833981519152602090815260408083206001600160a01b0395909516808452949091528120805460ff19169055339291907ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9080a4600190565b9081158015612d35575b611003576001600160a01b0316600090815260026020526040902054801515919082612d2a575b5050612d19576001600160401b031642811115612d085760005460a01c6001600160401b03168015159182612cf3575b5050612ce257565b63e774e7b560e01b60005260046000fd5b9091504281039081116106b157113880612cda565b63efa7aefd60e01b60005260046000fd5b633b53f64f60e21b60005260046000fd5b141590503880612caa565b506001600160a01b03811615612c83565b8054821015612d5e5760005260206000200190600090565b634e487b7160e01b600052603260045260246000fd5b6001810190826000528160205260406000205415600014612ddd578054600160401b8110156121b557612dc8612db1826001879401855584612d46565b819391549060031b91821b91600019901b19161790565b90555491600052602052604060002055600190565b505050600090565b9060018201918160005282602052604060002054801515600014612eaf5760001981018181116106b15782546000198101919082116106b157818103612e78575b50505080548015612e62576000190190612e408282612d46565b8154906000199060031b1b191690555560005260205260006040812055600190565b634e487b7160e01b600052603160045260246000fd5b612e98612e88612db19386612d46565b90549060031b1c92839286612d46565b905560005283602052604060002055388080612e26565b50505050600090565b90612ede5750805115612ecd57602081519101fd5b63d6bda27560e01b60005260046000fd5b81511580612f10575b612eef575090565b639996b31560e01b60009081526001600160a01b0391909116600452602490fd5b50803b15612ee756fec1f6fe24621ce81ec5827caf0253cadb74709b061630e6b55e82371705932000c7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d275027301df982f5215b4963a854cf9c73219df80cb6acd8f098189c9480c7bbc360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc07966f2ab141347034724e9b2a472c2f77f5cd745aeba27cacba797b8fcb708617dc5b1290f7495d7f8cc68476e6941aaf510598fa925d0d2720edc8805a846cd37bc77615afefc793aa17d75d4249a9b517ba91b0e54a49c9c4a44b3d7e228302dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800edcc084d3dcd65a1f7f23c65c46722faca6953d28e43150a467cf43e5c309238cd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00a164736f6c6343000822000a";
17899
+ var isSuperArgs2 = (xs) => xs.length > 1;
17900
+ var AgentDelegationRegistry__factory = class extends import_ethers15.ContractFactory {
17901
+ constructor(...args) {
17902
+ if (isSuperArgs2(args)) {
17903
+ super(...args);
17904
+ } else {
17905
+ super(_abi2, _bytecode2, args[0]);
17906
+ }
17907
+ }
17908
+ getDeployTransaction(overrides) {
17909
+ return super.getDeployTransaction(overrides || {});
17910
+ }
17911
+ deploy(overrides) {
17912
+ return super.deploy(overrides || {});
17913
+ }
17914
+ connect(runner) {
17915
+ return super.connect(runner);
17916
+ }
17917
+ static bytecode = _bytecode2;
17918
+ static abi = _abi2;
17919
+ static createInterface() {
17920
+ return new import_ethers15.Interface(_abi2);
17921
+ }
17922
+ static connect(address, runner) {
17923
+ return new import_ethers15.Contract(
17924
+ address,
17925
+ _abi2,
17926
+ runner
17927
+ );
17928
+ }
17929
+ };
17930
+
17931
+ // src/utils/position-delegate.utils.ts
17932
+ var import_ethers16 = require("ethers");
17933
+ var POSITION_DELEGATE_REGISTRY_ABI = [
17934
+ "function positionDelegate(bytes32 positionId) view returns (address)",
17935
+ "function setPositionDelegate(bytes32 positionId, address newDelegate) external",
17936
+ "event PositionDelegateUpdated(bytes32 indexed positionId, address indexed oldDelegate, address indexed newDelegate)"
17937
+ ];
17938
+ async function setPositionDelegate(positionId, delegate, signer, registryAddress) {
17939
+ const registry = new import_ethers16.Contract(
17940
+ registryAddress,
17941
+ POSITION_DELEGATE_REGISTRY_ABI,
17942
+ signer
17943
+ );
17944
+ return registry["setPositionDelegate"](positionId, delegate);
17945
+ }
17946
+ async function getPositionDelegate(positionId, provider, registryAddress) {
17947
+ const registry = new import_ethers16.Contract(
17948
+ registryAddress,
17949
+ POSITION_DELEGATE_REGISTRY_ABI,
17950
+ provider
17951
+ );
17952
+ return registry["positionDelegate"](positionId);
17953
+ }
17954
+
17955
+ // src/utils/agent-delegation.utils.ts
17956
+ async function mintAgentPkp(params) {
17957
+ const { serviceEndpoint, authHeader, timeoutMs = 3e4 } = params;
17958
+ if (!serviceEndpoint) {
17959
+ throw new Error(
17960
+ "serviceEndpoint is required to mint an agent PKP (SDK must be in service mode)"
17961
+ );
17962
+ }
17963
+ const url = `${serviceEndpoint}/api/lit/pkp/mint-agent`;
17964
+ const controller = new AbortController();
17965
+ const timeout = setTimeout(() => controller.abort(), timeoutMs);
17966
+ try {
17967
+ const headers = {
17968
+ "Content-Type": "application/json",
17969
+ ...authHeader ? await authHeader() : {}
17970
+ };
17971
+ const response = await fetch(url, {
17972
+ method: "POST",
17973
+ headers,
17974
+ body: "{}",
17975
+ signal: controller.signal
17976
+ });
17977
+ if (!response.ok) {
17978
+ throw new Error(
17979
+ `Agent PKP mint failed (${response.status}): ${await response.text()}`
17980
+ );
17981
+ }
17982
+ const data = await response.json();
17983
+ if (!data.success || !data.walletAddress) {
17984
+ throw new Error(
17985
+ `Agent PKP mint returned no address: ${data.error ?? JSON.stringify(data)}`
17986
+ );
17987
+ }
17988
+ return data.walletAddress;
17989
+ } finally {
17990
+ clearTimeout(timeout);
17991
+ }
17992
+ }
17993
+
17994
+ // src/modules/mock/mock-token-manager.module.ts
17995
+ var MockTokenManager = class {
17996
+ config;
17997
+ constructor(config) {
17998
+ this.config = config;
17999
+ if (this.isProductionNetwork()) {
18000
+ log.warn("\u26A0\uFE0F MockTokenManager initialized on production network", {
18001
+ network: config.network
18002
+ });
18003
+ }
18004
+ }
18005
+ /**
18006
+ * Mint mock BTC tokens
18007
+ *
18008
+ * @param amount - Amount to mint in satoshis
18009
+ * @param recipient - Recipient address
18010
+ * @returns Transaction result
18011
+ */
18012
+ async mintMockBTC(amount, recipient) {
18013
+ if (this.config.debug) {
18014
+ log.info("\u{1FA99} Minting mock BTC", {
18015
+ amount: amount.toString(),
18016
+ recipient
18017
+ });
18018
+ }
18019
+ if (this.isProductionNetwork()) {
18020
+ return failure(
18021
+ new SDKError({
18022
+ message: "Cannot mint mock tokens on production network",
18023
+ category: "CONFIGURATION" /* CONFIGURATION */,
18024
+ severity: "HIGH" /* HIGH */,
18025
+ originalError: new Error("Production network detected")
18026
+ })
18027
+ );
18028
+ }
18029
+ return tryCatchAsync(
18030
+ async () => {
18031
+ const signerResult = this.config.contractManager.getSigner();
18032
+ if (!signerResult.success) {
18033
+ throw signerResult.error;
18034
+ }
18035
+ throw new Error("Mock BTC contract not yet integrated");
18036
+ },
18037
+ (error) => new SDKError({
18038
+ message: "Failed to mint mock BTC",
18039
+ category: "CONTRACT" /* CONTRACT */,
18040
+ severity: "MEDIUM" /* MEDIUM */,
18041
+ originalError: error instanceof Error ? error : new Error(String(error)),
18042
+ context: { amount: amount.toString(), recipient }
18043
+ })
18044
+ );
18045
+ }
18046
+ /**
18047
+ * Approve mock BTC spending
18048
+ *
18049
+ * @param spender - Spender address
18050
+ * @param amount - Amount to approve in satoshis
18051
+ * @returns Transaction result
18052
+ */
18053
+ async approveMockBTC(spender, amount) {
18054
+ if (this.config.debug) {
18055
+ log.info("\u2705 Approving mock BTC spending", {
18056
+ spender,
18057
+ amount: amount.toString()
18058
+ });
18059
+ }
18060
+ if (this.isProductionNetwork()) {
18061
+ return failure(
18062
+ new SDKError({
18063
+ message: "Cannot approve mock tokens on production network",
18064
+ category: "CONFIGURATION" /* CONFIGURATION */,
18065
+ severity: "HIGH" /* HIGH */,
18066
+ originalError: new Error("Production network detected")
18067
+ })
18068
+ );
18069
+ }
18070
+ return tryCatchAsync(
18071
+ async () => {
18072
+ const signerResult = this.config.contractManager.getSigner();
18073
+ if (!signerResult.success) {
18074
+ throw signerResult.error;
18075
+ }
18076
+ throw new Error("Mock BTC contract not yet integrated");
18077
+ },
18078
+ (error) => new SDKError({
18079
+ message: "Failed to approve mock BTC",
18080
+ category: "CONTRACT" /* CONTRACT */,
18081
+ severity: "MEDIUM" /* MEDIUM */,
18082
+ originalError: error instanceof Error ? error : new Error(String(error)),
18083
+ context: { spender, amount: amount.toString() }
18084
+ })
18085
+ );
18086
+ }
18087
+ /**
18088
+ * Get mock BTC balance
18089
+ *
18090
+ * @param address - Address to query
18091
+ * @returns Balance in satoshis
18092
+ */
18093
+ async getMockBTCBalance(address) {
18094
+ if (this.config.debug) {
18095
+ log.info("\u{1F50D} Querying mock BTC balance", { address });
18096
+ }
18097
+ return tryCatchAsync(
18098
+ async () => {
18099
+ throw new Error("Mock BTC contract not yet integrated");
18100
+ },
18101
+ (error) => new SDKError({
18102
+ message: "Failed to get mock BTC balance",
18103
+ category: "CONTRACT" /* CONTRACT */,
18104
+ severity: "MEDIUM" /* MEDIUM */,
18105
+ originalError: error instanceof Error ? error : new Error(String(error)),
18106
+ context: { address }
18107
+ })
18108
+ );
18109
+ }
18110
+ /**
18111
+ * Check if current network is production (mainnet)
18112
+ */
18113
+ isProductionNetwork() {
18114
+ return this.config.network.toLowerCase().includes("mainnet");
18115
+ }
18116
+ };
18117
+ function createMockTokenManager(config) {
18118
+ try {
18119
+ const manager = new MockTokenManager(config);
18120
+ return success(manager);
18121
+ } catch (error) {
18122
+ return failure(
18123
+ new SDKError({
18124
+ message: "Failed to create MockTokenManager",
18125
+ category: "INITIALIZATION" /* INITIALIZATION */,
18126
+ severity: "HIGH" /* HIGH */,
18127
+ originalError: error instanceof Error ? error : new Error(String(error))
18128
+ })
18129
+ );
18130
+ }
18131
+ }
18132
+
18133
+ // src/modules/diamond-hands-sdk.ts
18134
+ var import_dh_lit_ops = require("@gvnrdao/dh-lit-ops");
18135
+ var import_dh_lit_actions2 = __toESM(require_pkg_src());
18136
+
18137
+ // src/utils/telegram-messaging.utils.ts
18138
+ var TelegramBot = null;
18139
+ try {
18140
+ if (typeof window === "undefined" && typeof global !== "undefined") {
18141
+ TelegramBot = require("node-telegram-bot-api");
18142
+ }
18143
+ } catch (error) {
18144
+ log.warn("Telegram bot API not available", {
18145
+ error: error instanceof Error ? error.message : String(error)
18146
+ });
18147
+ }
18148
+ function formatMintMessage(mintAmount, loanId, txHash) {
18149
+ return `\u2705 DH SDK: ${mintAmount} UCD was minted for loan id: ${loanId} Tx: https://sepolia.etherscan.io/tx/${txHash}`;
18150
+ }
18151
+ function formatPartialPaymentMessage(paymentAmount, loanId, txHash) {
18152
+ return `\u2705 DH SDK: ${paymentAmount} UCD was repaid for loan id: ${loanId} Tx: https://sepolia.etherscan.io/tx/${txHash}`;
18153
+ }
18154
+ function formatPartialPaymentFailureMessage(paymentAmount, loanId, txHash) {
18155
+ const baseMessage = `\u274C DH SDK: FAILED to repay ${paymentAmount} UCD for loan id: ${loanId}`;
18156
+ if (txHash) {
18157
+ return `${baseMessage} Tx: https://sepolia.etherscan.io/tx/${txHash}`;
18158
+ }
18159
+ return baseMessage;
18160
+ }
18161
+ function formatLoanCreationMessage(positionId, pkpId, vaultAddress) {
18162
+ const vault = vaultAddress || "unknown";
18163
+ return `\u2705 DH SDK: A new loan was created Id: ${positionId} Pkp: ${pkpId} Regtest BTC vault: ${vault}`;
18164
+ }
18165
+ function formatBTCWithdrawalFailureMessage(withdrawalAmount, btcVault, btcDestinationAddress, loanId) {
18166
+ const formattedAmount = formatBTCAmount(withdrawalAmount);
18167
+ return `\u274C DH SDK: BTC withdrawal FAILED: ${formattedAmount} from ${btcVault} to ${btcDestinationAddress} for loan id: ${loanId}`;
16233
18168
  }
16234
18169
  function formatLoanRenewalMessage(positionId, txHash) {
16235
18170
  return `\u2705 DH SDK: Loan id ${positionId} was successfully renewed. Tx: https://sepolia.etherscan.io/tx/${txHash}`;
@@ -16545,6 +18480,32 @@ var DiamondHandsSDK = class _DiamondHandsSDK {
16545
18480
  await this.serverSession.clearPersisted();
16546
18481
  }
16547
18482
  }
18483
+ /**
18484
+ * Establish the lit-ops-server session from a login envelope the CALLER already
18485
+ * had signed, instead of prompting the wallet for one.
18486
+ *
18487
+ * For a host that authenticates several services from one wallet signature (the
18488
+ * browser frontend signs once and spends the same envelope at the api and here),
18489
+ * this is what turns two wallet prompts into one — and for a multi-sig Safe each
18490
+ * prompt saved is a whole propose-and-confirm ceremony across owners.
18491
+ *
18492
+ * Call it PROMPTLY after signing: each server pins the nonce on first use and
18493
+ * requires that first use to be fresh (±120s EOA, ±600s contract wallet), and
18494
+ * the two servers' replay stores are independent, so a late hand-off is rejected
18495
+ * as stale even though the other service already accepted the same envelope.
18496
+ * Once accepted, silent re-mint covers the next 24h with no further prompts.
18497
+ *
18498
+ * Requires `loginAudience` to be configured to a value BOTH servers accept —
18499
+ * otherwise this service rejects the envelope as `audience_mismatch`.
18500
+ *
18501
+ * Throws if the exchange fails, so a caller can fall back to the prompt path.
18502
+ * No-op in standalone mode (no server session to prime).
18503
+ */
18504
+ async primeServerSession(payload) {
18505
+ if (!this.serverSession)
18506
+ return;
18507
+ await this.serverSession.adoptLoginPayload(payload);
18508
+ }
16548
18509
  /**
16549
18510
  * Audit H-9: invalidate the LoanQuery cache so subsequent reads return
16550
18511
  * the post-write state. We clear the entire loan-query cache (not just
@@ -16640,7 +18601,7 @@ var DiamondHandsSDK = class _DiamondHandsSDK {
16640
18601
  */
16641
18602
  constructor(config) {
16642
18603
  if (!config.provider && config.ethRpcUrl) {
16643
- config.provider = new import_ethers15.JsonRpcProvider(config.ethRpcUrl);
18604
+ config.provider = new import_ethers17.JsonRpcProvider(config.ethRpcUrl);
16644
18605
  }
16645
18606
  this.config = config;
16646
18607
  if (config.debug) {
@@ -16656,6 +18617,7 @@ var DiamondHandsSDK = class _DiamondHandsSDK {
16656
18617
  this.serverSession = new ServerSession({
16657
18618
  signer: config.authSigner ?? config.contractSigner,
16658
18619
  serviceEndpoint: config.serviceEndpoint,
18620
+ loginAudience: config.loginAudience,
16659
18621
  chainId: config.chainId,
16660
18622
  persistSession: config.sessionPersistence?.enabled,
16661
18623
  sessionStore: config.sessionPersistence?.store,
@@ -16914,7 +18876,7 @@ var DiamondHandsSDK = class _DiamondHandsSDK {
16914
18876
  const network = await config.provider.getNetwork();
16915
18877
  chainId = Number(network.chainId);
16916
18878
  } else if (config.ethRpcUrl) {
16917
- const tempProvider = new import_ethers15.JsonRpcProvider(
18879
+ const tempProvider = new import_ethers17.JsonRpcProvider(
16918
18880
  config.ethRpcUrl
16919
18881
  );
16920
18882
  const network = await tempProvider.getNetwork();
@@ -17450,7 +19412,7 @@ var DiamondHandsSDK = class _DiamondHandsSDK {
17450
19412
  }
17451
19413
  const loanOps = this.loanOps();
17452
19414
  const protocolConfig = await loanOps.getProtocolConfig();
17453
- const requestAmountWei = (0, import_ethers15.parseEther)(
19415
+ const requestAmountWei = (0, import_ethers17.parseEther)(
17454
19416
  request.amount.toString()
17455
19417
  );
17456
19418
  const minLoanValueWei = BigInt(protocolConfig.minimumLoanValueWei);
@@ -17532,7 +19494,7 @@ var DiamondHandsSDK = class _DiamondHandsSDK {
17532
19494
  pkpNftAddress,
17533
19495
  this.getChipotlePublicKeyFallback()
17534
19496
  );
17535
- pkpEthAddress = (0, import_ethers15.computeAddress)(pkpPublicKey);
19497
+ pkpEthAddress = (0, import_ethers17.computeAddress)(pkpPublicKey);
17536
19498
  pkpCache.set(request.positionId, {
17537
19499
  publicKey: pkpPublicKey,
17538
19500
  ethAddress: pkpEthAddress,
@@ -17861,8 +19823,8 @@ var DiamondHandsSDK = class _DiamondHandsSDK {
17861
19823
  throw new Error(`Position not found: ${request.positionId}`);
17862
19824
  }
17863
19825
  const currentDebt = position.ucdDebt.toString();
17864
- const ucdDebtHash = (0, import_ethers15.keccak256)(import_ethers15.AbiCoder.defaultAbiCoder().encode(["uint256"], [currentDebt]));
17865
- const contractHash = (0, import_ethers15.keccak256)(import_ethers15.AbiCoder.defaultAbiCoder().encode(
19826
+ const ucdDebtHash = (0, import_ethers17.keccak256)(import_ethers17.AbiCoder.defaultAbiCoder().encode(["uint256"], [currentDebt]));
19827
+ const contractHash = (0, import_ethers17.keccak256)(import_ethers17.AbiCoder.defaultAbiCoder().encode(
17866
19828
  ["address", "address", "address", "address"],
17867
19829
  [
17868
19830
  positionManagerAddress,
@@ -17931,7 +19893,7 @@ var DiamondHandsSDK = class _DiamondHandsSDK {
17931
19893
  const coreAbi = [
17932
19894
  "function getPositionDetails(bytes32) view returns (tuple(bytes32 positionId, bytes32 pkpId, uint256 ucdDebt, string vaultAddress, address borrower, uint40 createdAt, uint40 lastUpdated, uint16 selectedTerm, uint40 expiryAt, uint8 status, uint40 previousExpiryAt, uint16 totalTerm))"
17933
19895
  ];
17934
- const positionCore = new import_ethers15.Contract(
19896
+ const positionCore = new import_ethers17.Contract(
17935
19897
  coreAddress,
17936
19898
  coreAbi,
17937
19899
  this.getSignerOrThrow().provider
@@ -17939,8 +19901,8 @@ var DiamondHandsSDK = class _DiamondHandsSDK {
17939
19901
  const currentPosition = await positionCore["getPositionDetails"](
17940
19902
  positionIdBytes32
17941
19903
  );
17942
- const currentDebtHash = (0, import_ethers15.keccak256)(
17943
- import_ethers15.AbiCoder.defaultAbiCoder().encode(
19904
+ const currentDebtHash = (0, import_ethers17.keccak256)(
19905
+ import_ethers17.AbiCoder.defaultAbiCoder().encode(
17944
19906
  ["uint256"],
17945
19907
  [currentPosition.ucdDebt]
17946
19908
  )
@@ -17987,7 +19949,7 @@ var DiamondHandsSDK = class _DiamondHandsSDK {
17987
19949
  "function getCurrentQuantum() view returns (uint256)",
17988
19950
  "function isQuantumValid(bytes32,uint256) view returns (bool)"
17989
19951
  ];
17990
- const registry = new import_ethers15.Contract(
19952
+ const registry = new import_ethers17.Contract(
17991
19953
  registryAddress,
17992
19954
  registryAbi,
17993
19955
  this.getSignerOrThrow().provider
@@ -18103,7 +20065,7 @@ var DiamondHandsSDK = class _DiamondHandsSDK {
18103
20065
  });
18104
20066
  }
18105
20067
  const signatureHexMint = finalSignature.startsWith("0x") ? finalSignature : "0x" + finalSignature;
18106
- const mintIface = new import_ethers15.Interface(positionManagerAbi);
20068
+ const mintIface = new import_ethers17.Interface(positionManagerAbi);
18107
20069
  const mintCalldata = mintIface.encodeFunctionData("mintUCD", [
18108
20070
  positionIdBytes32,
18109
20071
  validationResponse.mintAmount,
@@ -18139,7 +20101,7 @@ var DiamondHandsSDK = class _DiamondHandsSDK {
18139
20101
  if (viewsAddress) {
18140
20102
  let diagnosis = null;
18141
20103
  try {
18142
- const views = new import_ethers15.Contract(
20104
+ const views = new import_ethers17.Contract(
18143
20105
  viewsAddress,
18144
20106
  [
18145
20107
  "function diagnoseMintUCD(bytes32,uint256,uint256,uint256,uint256,uint256,bytes32,bytes32,bytes32,uint256,bytes) view returns (string)"
@@ -18249,7 +20211,7 @@ Message: ${causeMessage}${quantumContext}${mintDebtDiagnostics}`
18249
20211
  if (receipt.logs && receipt.logs.length > 0) {
18250
20212
  for (const receiptLog of receipt.logs) {
18251
20213
  if (receiptLog.topics && receiptLog.topics[0] === "0x08c379a0") {
18252
- const iface = new import_ethers15.Interface([
20214
+ const iface = new import_ethers17.Interface([
18253
20215
  "error Error(string)"
18254
20216
  ]);
18255
20217
  const decoded = iface.decodeErrorResult("Error", receiptLog.data);
@@ -18266,7 +20228,7 @@ Message: ${causeMessage}${quantumContext}${mintDebtDiagnostics}`
18266
20228
  const minimalAbi = [
18267
20229
  "event UCDMintedWithAuthorization(bytes32 indexed positionId, address indexed borrower, uint256 mintAmount, uint256 mintFee, uint256 newDebt, uint256 newCollateral, uint256 btcPrice, uint256 quantumTimestamp, bytes32 authorizedSpendsHash)"
18268
20230
  ];
18269
- const iface = new import_ethers15.Interface(minimalAbi);
20231
+ const iface = new import_ethers17.Interface(minimalAbi);
18270
20232
  for (const receiptLog of receipt.logs) {
18271
20233
  const parsed = (() => {
18272
20234
  const logIface = iface;
@@ -18453,7 +20415,7 @@ Message: ${causeMessage}${quantumContext}${mintDebtDiagnostics}`
18453
20415
  pkpNftAddress,
18454
20416
  this.getChipotlePublicKeyFallback()
18455
20417
  );
18456
- const pkpEthAddress = (0, import_ethers15.computeAddress)(pkpPublicKey);
20418
+ const pkpEthAddress = (0, import_ethers17.computeAddress)(pkpPublicKey);
18457
20419
  pkpData = {
18458
20420
  publicKey: pkpPublicKey,
18459
20421
  ethAddress: pkpEthAddress,
@@ -18855,7 +20817,7 @@ Message: ${causeMessage}${quantumContext}${mintDebtDiagnostics}`
18855
20817
  }
18856
20818
  const loanOpsForUcd = loanOpsForUcdResult.value;
18857
20819
  const ucdTokenAddress = await loanOpsForUcd.ucdToken();
18858
- const ucdToken = new import_ethers15.Contract(
20820
+ const ucdToken = new import_ethers17.Contract(
18859
20821
  ucdTokenAddress,
18860
20822
  [
18861
20823
  "function balanceOf(address) view returns (uint256)",
@@ -18871,9 +20833,9 @@ Message: ${causeMessage}${quantumContext}${mintDebtDiagnostics}`
18871
20833
  if (ucdBalance < debtWei) {
18872
20834
  return {
18873
20835
  success: false,
18874
- error: `Insufficient UCD balance for liquidation: ${(0, import_ethers15.formatEther)(
20836
+ error: `Insufficient UCD balance for liquidation: ${(0, import_ethers17.formatEther)(
18875
20837
  ucdBalance
18876
- )} UCD (need ${(0, import_ethers15.formatEther)(debtWei)} UCD)`,
20838
+ )} UCD (need ${(0, import_ethers17.formatEther)(debtWei)} UCD)`,
18877
20839
  positionId: request.positionId,
18878
20840
  wasLiquidated: false
18879
20841
  };
@@ -18882,7 +20844,7 @@ Message: ${causeMessage}${quantumContext}${mintDebtDiagnostics}`
18882
20844
  if (request.skipUcdApproval) {
18883
20845
  return {
18884
20846
  success: false,
18885
- error: `Insufficient UCD allowance for UCDController: need at least ${(0, import_ethers15.formatEther)(
20847
+ error: `Insufficient UCD allowance for UCDController: need at least ${(0, import_ethers17.formatEther)(
18886
20848
  debtWei
18887
20849
  )} UCD, or omit skipUcdApproval to let the SDK submit approve`,
18888
20850
  positionId: request.positionId,
@@ -19389,7 +21351,7 @@ Message: ${causeMessage}${quantumContext}${mintDebtDiagnostics}`
19389
21351
  if (typeof signatureBytes === "string" && signatureBytes.startsWith("{")) {
19390
21352
  try {
19391
21353
  const parsed = JSON.parse(signatureBytes);
19392
- signatureBytes = parsed.signature ?? (parsed.r && parsed.s && parsed.v ? import_ethers15.Signature.from({
21354
+ signatureBytes = parsed.signature ?? (parsed.r && parsed.s && parsed.v ? import_ethers17.Signature.from({
19393
21355
  r: parsed.r,
19394
21356
  s: parsed.s,
19395
21357
  v: parsed.v
@@ -19400,7 +21362,7 @@ Message: ${causeMessage}${quantumContext}${mintDebtDiagnostics}`
19400
21362
  if (!signatureBytes.startsWith("0x")) {
19401
21363
  signatureBytes = "0x" + signatureBytes;
19402
21364
  }
19403
- const extendIface = new import_ethers15.Interface([
21365
+ const extendIface = new import_ethers17.Interface([
19404
21366
  "function extendPosition(bytes32 positionId, uint256 selectedTerm, uint256 quantumTimestamp, uint256 btcPrice, uint256 availableBTCBalance, uint256 proRataRenewalFee, bytes calldata extensionValidatorSignature) external returns (bool)"
19405
21367
  ]);
19406
21368
  const extendCalldata = extendIface.encodeFunctionData("extendPosition", [
@@ -19950,7 +21912,7 @@ Message: ${causeMessage}${quantumContext}${mintDebtDiagnostics}`
19950
21912
  ` Converting payment amount: ${request.paymentAmount} (type: ${typeof request.paymentAmount})`
19951
21913
  );
19952
21914
  }
19953
- const paymentAmountWei = (0, import_ethers15.parseEther)(
21915
+ const paymentAmountWei = (0, import_ethers17.parseEther)(
19954
21916
  request.paymentAmount.toString()
19955
21917
  );
19956
21918
  if (this.config.debug) {
@@ -20012,7 +21974,7 @@ Message: ${causeMessage}${quantumContext}${mintDebtDiagnostics}`
20012
21974
  };
20013
21975
  }
20014
21976
  const ucdTokenAddress = await loanOps.ucdToken();
20015
- const ucdToken = new import_ethers15.Contract(
21977
+ const ucdToken = new import_ethers17.Contract(
20016
21978
  ucdTokenAddress,
20017
21979
  [
20018
21980
  "function balanceOf(address) view returns (uint256)",
@@ -20022,31 +21984,41 @@ Message: ${causeMessage}${quantumContext}${mintDebtDiagnostics}`
20022
21984
  signer
20023
21985
  );
20024
21986
  const signerAddress = await signer.getAddress();
21987
+ let fundsSource = signerAddress;
21988
+ try {
21989
+ const posView = await this.getPositionDetailsView(request.positionId);
21990
+ if (posView?.borrower)
21991
+ fundsSource = posView.borrower;
21992
+ } catch {
21993
+ }
21994
+ const isSelfRepay = fundsSource.toLowerCase() === signerAddress.toLowerCase();
20025
21995
  const [balance, allowance] = await Promise.all([
20026
- ucdToken["balanceOf"](signerAddress),
20027
- ucdToken["allowance"](signerAddress, positionManagerAddress)
21996
+ ucdToken["balanceOf"](fundsSource),
21997
+ ucdToken["allowance"](fundsSource, positionManagerAddress)
20028
21998
  ]);
20029
21999
  if (this.config.debug) {
20030
- log.info(` UCD Balance: ${(0, import_ethers15.formatEther)(balance)} UCD`);
20031
- log.info(
20032
- ` UCD Allowance: ${(0, import_ethers15.formatEther)(allowance)} UCD`
20033
- );
22000
+ log.info(` UCD funds source: ${fundsSource}${isSelfRepay ? " (self)" : " (borrower; agent submitting)"}`);
22001
+ log.info(` UCD Balance: ${(0, import_ethers17.formatEther)(balance)} UCD`);
22002
+ log.info(` UCD Allowance: ${(0, import_ethers17.formatEther)(allowance)} UCD`);
20034
22003
  log.info(` Required: ${request.paymentAmount} UCD`);
20035
22004
  }
20036
22005
  if (balance < paymentAmountWei) {
20037
22006
  return {
20038
22007
  success: false,
20039
- error: `Insufficient UCD balance: ${(0, import_ethers15.formatEther)(
22008
+ error: `Insufficient UCD balance: ${(0, import_ethers17.formatEther)(
20040
22009
  balance
20041
- )} UCD (need ${request.paymentAmount} UCD)`
22010
+ )} UCD (need ${request.paymentAmount} UCD)${isSelfRepay ? "" : ` \u2014 borrower ${fundsSource} lacks funds`}`
20042
22011
  };
20043
22012
  }
20044
22013
  if (allowance < paymentAmountWei) {
22014
+ if (!isSelfRepay) {
22015
+ return {
22016
+ success: false,
22017
+ error: `Borrower ${fundsSource} has insufficient UCD allowance to PositionManager (${(0, import_ethers17.formatEther)(allowance)} UCD, need ${request.paymentAmount}). The borrower must approve PositionManager before a delegated agent can repay.`
22018
+ };
22019
+ }
20045
22020
  if (this.config.debug) {
20046
- log.info(
20047
- " Insufficient allowance, sending approval transaction...",
20048
- {}
20049
- );
22021
+ log.info(" Insufficient allowance, sending approval transaction...", {});
20050
22022
  }
20051
22023
  const approveTx = await ucdToken["approve"](
20052
22024
  positionManagerAddress,
@@ -20054,16 +22026,13 @@ Message: ${causeMessage}${quantumContext}${mintDebtDiagnostics}`
20054
22026
  );
20055
22027
  if (this.config.debug) {
20056
22028
  log.info(` Approval tx sent: ${approveTx.hash}`);
20057
- log.info(" Waiting for approval confirmation...", {});
20058
22029
  }
20059
22030
  await approveTx.wait();
20060
22031
  if (this.config.debug) {
20061
22032
  log.info(" \u2705 UCD approval confirmed", {});
20062
22033
  }
20063
- } else {
20064
- if (this.config.debug) {
20065
- log.info(" \u2705 Sufficient allowance already exists", {});
20066
- }
22034
+ } else if (this.config.debug) {
22035
+ log.info(" \u2705 Sufficient allowance already exists", {});
20067
22036
  }
20068
22037
  let auth;
20069
22038
  try {
@@ -20305,7 +22274,7 @@ Message: ${causeMessage}${quantumContext}${mintDebtDiagnostics}`
20305
22274
  const paymentSigner = this.getSignerOrThrow();
20306
22275
  const paymentFrom = await paymentSigner.getAddress();
20307
22276
  const paymentProvider = contractManager.getProvider();
20308
- const paymentIface = new import_ethers15.Interface([
22277
+ const paymentIface = new import_ethers17.Interface([
20309
22278
  "function makePayment(bytes32 positionId, uint256 paymentAmount, uint256 quantumTimestamp, uint256 btcPrice, bytes calldata paymentValidatorSignature) external returns (bool)"
20310
22279
  ]);
20311
22280
  const paymentCalldata = paymentIface.encodeFunctionData("makePayment", [
@@ -20622,7 +22591,7 @@ Message: ${causeMessage}${quantumContext}${mintDebtDiagnostics}`
20622
22591
  const pkpId = position.pkpId;
20623
22592
  if (litValidatorAddr && pkpId) {
20624
22593
  try {
20625
- const litValidator = new import_ethers15.Contract(
22594
+ const litValidator = new import_ethers17.Contract(
20626
22595
  litValidatorAddr,
20627
22596
  ["function pkpOwners(bytes32) view returns (address)"],
20628
22597
  this.getProviderOrThrow()
@@ -20630,7 +22599,7 @@ Message: ${causeMessage}${quantumContext}${mintDebtDiagnostics}`
20630
22599
  const owner = await litValidator.pkpOwners(
20631
22600
  pkpId
20632
22601
  );
20633
- if (owner && owner !== import_ethers15.ZeroAddress) {
22602
+ if (owner && owner !== import_ethers17.ZeroAddress) {
20634
22603
  controller = owner;
20635
22604
  }
20636
22605
  } catch {
@@ -20682,7 +22651,7 @@ Message: ${causeMessage}${quantumContext}${mintDebtDiagnostics}`
20682
22651
  pkpNftAddress,
20683
22652
  this.getChipotlePublicKeyFallback()
20684
22653
  );
20685
- pkpEthAddress = (0, import_ethers15.computeAddress)(pkpPublicKey);
22654
+ pkpEthAddress = (0, import_ethers17.computeAddress)(pkpPublicKey);
20686
22655
  pkpCache.set(positionId, {
20687
22656
  publicKey: pkpPublicKey,
20688
22657
  ethAddress: pkpEthAddress,
@@ -21045,7 +23014,7 @@ Message: ${causeMessage}${quantumContext}${mintDebtDiagnostics}`
21045
23014
  utxoVout: withdrawalParams.utxoVout
21046
23015
  });
21047
23016
  }
21048
- const withdrawIface = new import_ethers15.Interface([
23017
+ const withdrawIface = new import_ethers17.Interface([
21049
23018
  "function withdrawBTC((bytes32 positionId, bytes32 actionHash, bytes32 authorizedSpendsHash, bytes32 ucdDebtHash, bytes32 contractBundleHash, string withdrawalAddress, uint256 totalDeduction, uint256 newCollateral, uint256 quantumTimestamp, uint256 btcPrice, string utxoTxid, uint32 utxoVout) params, bytes withdrawalValidatorSignature, bytes btcSpendAuthSignature) external returns (bool)"
21050
23019
  ]);
21051
23020
  const withdrawCalldata = withdrawIface.encodeFunctionData("withdrawBTC", [
@@ -21237,7 +23206,7 @@ Message: ${causeMessage}${quantumContext}${mintDebtDiagnostics}`
21237
23206
  }
21238
23207
  const pkpId = positionDetails.pkpId;
21239
23208
  const vaultAddress = positionDetails.vaultAddress;
21240
- if (!pkpId || pkpId === import_ethers15.ZeroHash) {
23209
+ if (!pkpId || pkpId === import_ethers17.ZeroHash) {
21241
23210
  return { success: false, error: "Position has no PKP" };
21242
23211
  }
21243
23212
  if (!vaultAddress) {
@@ -21257,7 +23226,7 @@ Message: ${causeMessage}${quantumContext}${mintDebtDiagnostics}`
21257
23226
  if (!publicKey) {
21258
23227
  return { success: false, error: "Failed to resolve PKP public key" };
21259
23228
  }
21260
- const chipotlePkpAddress = (0, import_ethers15.computeAddress)(publicKey);
23229
+ const chipotlePkpAddress = (0, import_ethers17.computeAddress)(publicKey);
21261
23230
  const STANDALONE_CHAIN_NAMES = {
21262
23231
  1: "ethereum",
21263
23232
  11155111: "sepolia",
@@ -21607,7 +23576,7 @@ Message: ${causeMessage}${quantumContext}${mintDebtDiagnostics}`
21607
23576
  const btcSpendAuthorizerAbi = [
21608
23577
  "function getAuthorizedSpends(bytes32) view returns (tuple(string txid, uint32 vout, uint256 satoshis, string targetAddress, uint256 targetAmount, uint256 authorizedAt)[])"
21609
23578
  ];
21610
- const btcSpendAuthorizer = new import_ethers15.Contract(
23579
+ const btcSpendAuthorizer = new import_ethers17.Contract(
21611
23580
  btcSpendAuthorizerAddress,
21612
23581
  btcSpendAuthorizerAbi,
21613
23582
  this.getProviderOrThrow()
@@ -21693,7 +23662,7 @@ Message: ${causeMessage}${quantumContext}${mintDebtDiagnostics}`
21693
23662
  const abi = [
21694
23663
  "function getAuthorizedSpends(bytes32) view returns (tuple(string txid, uint32 vout, uint256 satoshis, string targetAddress, uint256 targetAmount, uint256 authorizedAt)[])"
21695
23664
  ];
21696
- const contract = new import_ethers15.Contract(
23665
+ const contract = new import_ethers17.Contract(
21697
23666
  btcSpendAuthorizerAddress,
21698
23667
  abi,
21699
23668
  this.getProviderOrThrow()
@@ -21707,7 +23676,7 @@ Message: ${causeMessage}${quantumContext}${mintDebtDiagnostics}`
21707
23676
  targetAddress: spend.targetAddress,
21708
23677
  targetAmount: Number(spend.targetAmount),
21709
23678
  authorizedAt: Number(spend.authorizedAt),
21710
- utxoKey: (0, import_ethers15.solidityPackedKeccak256)(
23679
+ utxoKey: (0, import_ethers17.solidityPackedKeccak256)(
21711
23680
  ["string", "uint32"],
21712
23681
  [spend.txid, Number(spend.vout)]
21713
23682
  )
@@ -21880,7 +23849,7 @@ Message: ${causeMessage}${quantumContext}${mintDebtDiagnostics}`
21880
23849
  error: attRes.error ?? attRes.reason ?? `LIT recovery attestation rejected${attRes.failedStep ? ` at step ${attRes.failedStep}` : ""}`
21881
23850
  };
21882
23851
  }
21883
- const btcSpendAuthorizer = new import_ethers15.Contract(
23852
+ const btcSpendAuthorizer = new import_ethers17.Contract(
21884
23853
  btcSpendAuthorizerAddress,
21885
23854
  [
21886
23855
  "function cancelStaleSpendWithProof(bytes32 positionId, bytes32 utxoKey, uint256 authorizedAt, string calldata invalidatorTxid, uint256 attestationTimestamp, bytes calldata litSignature) external"
@@ -21977,7 +23946,7 @@ Message: ${causeMessage}${quantumContext}${mintDebtDiagnostics}`
21977
23946
  const positionDetails = await this.getPositionDetailsView(
21978
23947
  params.positionId
21979
23948
  );
21980
- if (!positionDetails?.pkpId || positionDetails.pkpId === import_ethers15.ZeroHash) {
23949
+ if (!positionDetails?.pkpId || positionDetails.pkpId === import_ethers17.ZeroHash) {
21981
23950
  return { success: false, error: "Position has no PKP" };
21982
23951
  }
21983
23952
  const pkpCache = this.cacheManager.getCache("pkp-data", {
@@ -21994,7 +23963,7 @@ Message: ${causeMessage}${quantumContext}${mintDebtDiagnostics}`
21994
23963
  if (!publicKey) {
21995
23964
  return { success: false, error: "Failed to resolve PKP public key" };
21996
23965
  }
21997
- const chipotlePkpAddress = (0, import_ethers15.computeAddress)(publicKey);
23966
+ const chipotlePkpAddress = (0, import_ethers17.computeAddress)(publicKey);
21998
23967
  const dc = this.config.contractAddresses || {};
21999
23968
  const chainName = chainId === 1 ? "ethereum" : chainId === 11155111 ? "sepolia" : chainId === 1337 || chainId === 31337 ? "hardhat" : void 0;
22000
23969
  if (!chainName) {
@@ -22570,10 +24539,10 @@ Message: ${causeMessage}${quantumContext}${mintDebtDiagnostics}`
22570
24539
  "function allowance(address owner, address spender) view returns (uint256)",
22571
24540
  "function approve(address spender, uint256 amount) returns (bool)"
22572
24541
  ];
22573
- const stablecoin = new import_ethers15.Contract(params.stablecoinAddress, erc20Abi, params.signer);
24542
+ const stablecoin = new import_ethers17.Contract(params.stablecoinAddress, erc20Abi, params.signer);
22574
24543
  const allowance = await stablecoin.allowance(signerAddress, psmAddress);
22575
24544
  if (allowance < params.amountWei) {
22576
- const approveTx = await stablecoin.approve(psmAddress, import_ethers15.MaxUint256);
24545
+ const approveTx = await stablecoin.approve(psmAddress, import_ethers17.MaxUint256);
22577
24546
  await approveTx.wait();
22578
24547
  }
22579
24548
  const psm = SimplePSMV2__factory.connect(psmAddress, params.signer);
@@ -22608,10 +24577,10 @@ Message: ${causeMessage}${quantumContext}${mintDebtDiagnostics}`
22608
24577
  "function allowance(address owner, address spender) view returns (uint256)",
22609
24578
  "function approve(address spender, uint256 amount) returns (bool)"
22610
24579
  ];
22611
- const ucdToken = new import_ethers15.Contract(ucdAddress, erc20Abi, params.signer);
24580
+ const ucdToken = new import_ethers17.Contract(ucdAddress, erc20Abi, params.signer);
22612
24581
  const allowance = await ucdToken.allowance(signerAddress, ucdControllerAddress);
22613
24582
  if (allowance < params.ucdAmountWei) {
22614
- const approveTx = await ucdToken.approve(ucdControllerAddress, import_ethers15.MaxUint256);
24583
+ const approveTx = await ucdToken.approve(ucdControllerAddress, import_ethers17.MaxUint256);
22615
24584
  await approveTx.wait();
22616
24585
  }
22617
24586
  const psm = SimplePSMV2__factory.connect(psmAddress, params.signer);
@@ -22630,6 +24599,132 @@ Message: ${causeMessage}${quantumContext}${mintDebtDiagnostics}`
22630
24599
  * @throws if timeout is reached before subgraph catches up
22631
24600
  */
22632
24601
  // ============================================================================
24602
+ // HIGH-LEVEL API - Agent Delegation (auto-renew) — SEPOLIA ONLY
24603
+ // ============================================================================
24604
+ /** Guard: the AgentDelegationRegistry MVP is deployed on Sepolia only. */
24605
+ async assertAgentDelegationSepolia() {
24606
+ const chainId = Number((await this.getProviderOrThrow().getNetwork()).chainId);
24607
+ if (chainId !== 11155111) {
24608
+ throw new SDKError({
24609
+ message: `Agent auto-renew delegation is Sepolia-only (chainId 11155111); got ${chainId}`,
24610
+ category: "NETWORK" /* NETWORK */,
24611
+ severity: "HIGH" /* HIGH */
24612
+ });
24613
+ }
24614
+ const addr = this.config.contractAddresses?.agentDelegationRegistry;
24615
+ if (!addr) {
24616
+ throw new SDKError({
24617
+ message: "AgentDelegationRegistry address not configured \u2014 provide contractAddresses.agentDelegationRegistry",
24618
+ category: "CONFIGURATION" /* CONFIGURATION */,
24619
+ severity: "HIGH" /* HIGH */
24620
+ });
24621
+ }
24622
+ return addr;
24623
+ }
24624
+ /**
24625
+ * Read a position's auto-renew delegation state (used to drive the Enable/Disable toggle).
24626
+ * Pure view — no signer required.
24627
+ */
24628
+ async getAutoRenewStatus(positionId, user) {
24629
+ const addr = await this.assertAgentDelegationSepolia();
24630
+ const registry = AgentDelegationRegistry__factory.connect(addr, this.getProviderOrThrow());
24631
+ const pid = this.toBytes32(positionId);
24632
+ const grant = await registry.getLoanGrant(pid);
24633
+ const enabled = grant.borrower !== "0x0000000000000000000000000000000000000000" && (Number(grant.scopeBits) & 1) !== 0;
24634
+ const agentActive = user ? await registry.isAgentActive(user) : null;
24635
+ const canRenew = user ? await registry.canRenew(pid, user).then((r) => ({ ok: r.ok, reason: Number(r.reason) })) : null;
24636
+ return {
24637
+ enabled,
24638
+ borrower: grant.borrower,
24639
+ maxRenewals: Number(grant.maxRenewals),
24640
+ renewalsUsed: Number(grant.renewalsUsed),
24641
+ agentActive,
24642
+ canRenew
24643
+ };
24644
+ }
24645
+ /**
24646
+ * Enable auto-renew delegation for a position. Orchestrates the first-time setup: if the
24647
+ * borrower has no active agent, mints a fresh per-user agent PKP (via lit-ops-server) and
24648
+ * registers it, then records the position's renew grant. Borrower-signed.
24649
+ */
24650
+ async enableAutoRenew(positionId, options) {
24651
+ const addr = await this.assertAgentDelegationSepolia();
24652
+ const pdrAddr = this.config.contractAddresses?.positionDelegateRegistry;
24653
+ if (!pdrAddr) {
24654
+ throw new SDKError({
24655
+ message: "PositionDelegateRegistry address not configured \u2014 required to authorize the renewal agent (contractAddresses.positionDelegateRegistry)",
24656
+ category: "CONFIGURATION" /* CONFIGURATION */,
24657
+ severity: "HIGH" /* HIGH */
24658
+ });
24659
+ }
24660
+ const signer = this.getSignerOrThrow();
24661
+ const user = await signer.getAddress();
24662
+ const registry = AgentDelegationRegistry__factory.connect(addr, signer);
24663
+ const pid = this.toBytes32(positionId);
24664
+ let agentAddress;
24665
+ const hasActiveAgent = await registry.isAgentActive(user);
24666
+ if (hasActiveAgent) {
24667
+ agentAddress = (await registry.agentOf(user)).agent;
24668
+ } else {
24669
+ agentAddress = await mintAgentPkp({
24670
+ serviceEndpoint: this.config.serviceEndpoint,
24671
+ authHeader: this.serverSession ? () => this.serverSession.getAuthHeader() : void 0
24672
+ });
24673
+ const validitySeconds = options?.agentValiditySeconds ?? 90 * 24 * 60 * 60;
24674
+ const validUntil = Math.floor(Date.now() / 1e3) + validitySeconds;
24675
+ const regTx = await registry.registerAgent(user, agentAddress, validUntil);
24676
+ await regTx.wait();
24677
+ }
24678
+ const currentDelegate = await getPositionDelegate(pid, signer, pdrAddr).catch(
24679
+ () => null
24680
+ );
24681
+ if (!currentDelegate || currentDelegate.toLowerCase() !== agentAddress.toLowerCase()) {
24682
+ const delTx = await setPositionDelegate(pid, agentAddress, signer, pdrAddr);
24683
+ await delTx.wait();
24684
+ }
24685
+ const tx = await registry.enableAutoRenew(
24686
+ pid,
24687
+ options?.maxRenewals ?? 0,
24688
+ options?.maxEndTimestamp ?? 0
24689
+ );
24690
+ const receipt = await tx.wait();
24691
+ return { hash: tx.hash, blockNumber: receipt?.blockNumber ?? 0, agentAddress };
24692
+ }
24693
+ /** Disable auto-renew delegation for a position (clears the grant). Borrower-signed. */
24694
+ async disableAutoRenew(positionId) {
24695
+ const addr = await this.assertAgentDelegationSepolia();
24696
+ const signer = this.getSignerOrThrow();
24697
+ const user = await signer.getAddress();
24698
+ const registry = AgentDelegationRegistry__factory.connect(addr, signer);
24699
+ const pid = this.toBytes32(positionId);
24700
+ const pdrAddr = this.config.contractAddresses?.positionDelegateRegistry;
24701
+ if (!pdrAddr) {
24702
+ throw new SDKError({
24703
+ message: "PositionDelegateRegistry address not configured \u2014 required to clear the renewal agent's Gate-1 authorization (contractAddresses.positionDelegateRegistry)",
24704
+ category: "CONFIGURATION" /* CONFIGURATION */,
24705
+ severity: "HIGH" /* HIGH */
24706
+ });
24707
+ }
24708
+ {
24709
+ const [currentDelegate, userAgent] = await Promise.all([
24710
+ getPositionDelegate(pid, signer, pdrAddr).catch(() => null),
24711
+ registry.agentOf(user).then((a) => a.agent).catch(() => null)
24712
+ ]);
24713
+ if (currentDelegate && userAgent && currentDelegate.toLowerCase() === userAgent.toLowerCase()) {
24714
+ const clearTx = await setPositionDelegate(
24715
+ pid,
24716
+ "0x0000000000000000000000000000000000000000",
24717
+ signer,
24718
+ pdrAddr
24719
+ );
24720
+ await clearTx.wait();
24721
+ }
24722
+ }
24723
+ const tx = await registry.disableAutoRenew(pid);
24724
+ const receipt = await tx.wait();
24725
+ return { hash: tx.hash, blockNumber: receipt?.blockNumber ?? 0 };
24726
+ }
24727
+ // ============================================================================
22633
24728
  // HIGH-LEVEL API - Bitcoin Operations
22634
24729
  // ============================================================================
22635
24730
  /**
@@ -22823,7 +24918,7 @@ Message: ${causeMessage}${quantumContext}${mintDebtDiagnostics}`
22823
24918
  const maxUcdWhole = BigInt(result[3].toString());
22824
24919
  return success({
22825
24920
  liquidationThreshold: result[0].toString(),
22826
- minimumLoanValueUcd: (0, import_ethers15.formatUnits)(result[2], 18),
24921
+ minimumLoanValueUcd: (0, import_ethers17.formatUnits)(result[2], 18),
22827
24922
  minimumLoanValueWei: result[2].toString(),
22828
24923
  maxSingleLoanValueUcd: maxUcdWhole.toString(),
22829
24924
  maxSingleLoanValueWei: (maxUcdWhole * 10n ** 18n).toString()
@@ -22860,7 +24955,7 @@ Message: ${causeMessage}${quantumContext}${mintDebtDiagnostics}`
22860
24955
  const balanceWei = await provider.getBalance(address);
22861
24956
  return success({
22862
24957
  balanceWei: balanceWei.toString(),
22863
- balanceEth: (0, import_ethers15.formatEther)(balanceWei)
24958
+ balanceEth: (0, import_ethers17.formatEther)(balanceWei)
22864
24959
  });
22865
24960
  } catch (error) {
22866
24961
  return failure(new SDKError({
@@ -23250,7 +25345,7 @@ Message: ${causeMessage}${quantumContext}${mintDebtDiagnostics}`
23250
25345
  * Convert decimal position ID to bytes32 format
23251
25346
  */
23252
25347
  toBytes32(value) {
23253
- return (0, import_ethers15.zeroPadValue)((0, import_ethers15.toBeHex)(BigInt(value)), 32);
25348
+ return (0, import_ethers17.zeroPadValue)((0, import_ethers17.toBeHex)(BigInt(value)), 32);
23254
25349
  }
23255
25350
  /**
23256
25351
  * Check if an error indicates a technical failure vs business logic rejection
@@ -23291,7 +25386,7 @@ Message: ${causeMessage}${quantumContext}${mintDebtDiagnostics}`
23291
25386
  const coreModuleAbi = [
23292
25387
  "function getPositionDetails(bytes32) view returns (tuple(bytes32 positionId, bytes32 pkpId, uint256 ucdDebt, string vaultAddress, address borrower, uint40 createdAt, uint40 lastUpdated, uint16 selectedTerm, uint40 expiryAt, uint8 status, uint40 previousExpiryAt, uint16 totalTerm))"
23293
25388
  ];
23294
- const coreModule = new import_ethers15.Contract(
25389
+ const coreModule = new import_ethers17.Contract(
23295
25390
  coreModuleAddress,
23296
25391
  coreModuleAbi,
23297
25392
  provider
@@ -23358,7 +25453,7 @@ Message: ${causeMessage}${quantumContext}${mintDebtDiagnostics}`
23358
25453
  const corePositionAbi = [
23359
25454
  "function getPositionDetails(bytes32) view returns (tuple(bytes32 positionId, bytes32 pkpId, uint256 ucdDebt, string vaultAddress, address borrower, uint40 createdAt, uint40 lastUpdated, uint16 selectedTerm, uint40 expiryAt, uint8 status, uint40 previousExpiryAt, uint16 totalTerm))"
23360
25455
  ];
23361
- const corePositionContract = new import_ethers15.Contract(
25456
+ const corePositionContract = new import_ethers17.Contract(
23362
25457
  coreAddress,
23363
25458
  corePositionAbi,
23364
25459
  provider
@@ -23369,7 +25464,7 @@ Message: ${causeMessage}${quantumContext}${mintDebtDiagnostics}`
23369
25464
  positionIdBytes32
23370
25465
  );
23371
25466
  const positionIdFromCore = corePosition?.positionId || corePosition?.[0] || null;
23372
- if (positionIdFromCore && positionIdFromCore !== import_ethers15.ZeroHash && positionIdFromCore !== "0x0000000000000000000000000000000000000000000000000000000000000000") {
25467
+ if (positionIdFromCore && positionIdFromCore !== import_ethers17.ZeroHash && positionIdFromCore !== "0x0000000000000000000000000000000000000000000000000000000000000000") {
23373
25468
  if (this.config.debug) {
23374
25469
  log.info("Position exists in core contract", {
23375
25470
  positionId,
@@ -23437,7 +25532,7 @@ Message: ${causeMessage}${quantumContext}${mintDebtDiagnostics}`
23437
25532
  throw new Error("loanOperationsManager address not configured");
23438
25533
  }
23439
25534
  const runner = this.config.contractSigner || this.getProviderOrThrow();
23440
- const contract = new import_ethers15.Contract(
25535
+ const contract = new import_ethers17.Contract(
23441
25536
  addr.loanOperationsManager,
23442
25537
  [
23443
25538
  "function getProtocolConfig() external view returns (uint256 liquidationThreshold, uint256 minimumLoanValueUcd, uint256 minimumLoanValueWei, uint256 maxSingleLoanValueUcd)"
@@ -23450,7 +25545,7 @@ Message: ${causeMessage}${quantumContext}${mintDebtDiagnostics}`
23450
25545
  const maxUcdWhole = BigInt(result[3].toString());
23451
25546
  return {
23452
25547
  liquidationThreshold: result[0].toString(),
23453
- minimumLoanValueUcd: (0, import_ethers15.formatUnits)(result[2], 18),
25548
+ minimumLoanValueUcd: (0, import_ethers17.formatUnits)(result[2], 18),
23454
25549
  minimumLoanValueWei: result[2].toString(),
23455
25550
  maxSingleLoanValueUcd: maxUcdWhole.toString(),
23456
25551
  maxSingleLoanValueWei: (maxUcdWhole * 10n ** 18n).toString()
@@ -23468,8 +25563,8 @@ Message: ${causeMessage}${quantumContext}${mintDebtDiagnostics}`
23468
25563
  const MIN_REVEAL_DELAY = 60;
23469
25564
  const MAX_RANDOM_DELAY = 240;
23470
25565
  const entropyInput = positionId + quantumTimestamp.toString();
23471
- const hash = (0, import_ethers15.keccak256)(
23472
- (0, import_ethers15.toUtf8Bytes)(entropyInput)
25566
+ const hash = (0, import_ethers17.keccak256)(
25567
+ (0, import_ethers17.toUtf8Bytes)(entropyInput)
23473
25568
  );
23474
25569
  const randomValue = BigInt(hash);
23475
25570
  const randomDelay = Number(randomValue % BigInt(MAX_RANDOM_DELAY));
@@ -23494,12 +25589,12 @@ Message: ${causeMessage}${quantumContext}${mintDebtDiagnostics}`
23494
25589
  const rawPositionId = /^0x/i.test(params.positionId.trim()) ? params.positionId.trim().slice(2) : params.positionId.trim();
23495
25590
  const canonicalPositionId = "0x" + rawPositionId.padStart(64, "0").toLowerCase();
23496
25591
  const intentTimestamp = Math.floor(Date.now() / 1e3);
23497
- const intentActionHash = (0, import_ethers15.keccak256)((0, import_ethers15.toUtf8Bytes)("liquidate-position"));
23498
- const intentHash = (0, import_ethers15.solidityPackedKeccak256)(
25592
+ const intentActionHash = (0, import_ethers17.keccak256)((0, import_ethers17.toUtf8Bytes)("liquidate-position"));
25593
+ const intentHash = (0, import_ethers17.solidityPackedKeccak256)(
23499
25594
  ["bytes32", "uint256", "uint256", "address", "bytes32"],
23500
25595
  [canonicalPositionId, intentTimestamp, chainId, intentSigner, intentActionHash]
23501
25596
  );
23502
- const intentSignature = await signer.signMessage((0, import_ethers15.getBytes)(intentHash));
25597
+ const intentSignature = await signer.signMessage((0, import_ethers17.getBytes)(intentHash));
23503
25598
  const response = await fetch(endpoint, {
23504
25599
  method: "POST",
23505
25600
  headers: { "Content-Type": "application/json" },
@@ -23551,7 +25646,7 @@ Message: ${causeMessage}${quantumContext}${mintDebtDiagnostics}`
23551
25646
  const vrfSeedRaw = await lmResult.value["vrfSeeds"](positionId);
23552
25647
  const vrfSeed = BigInt(vrfSeedRaw.toString());
23553
25648
  if (vrfSeed !== 0n) {
23554
- const finalEntropy = (0, import_ethers15.solidityPackedKeccak256)(
25649
+ const finalEntropy = (0, import_ethers17.solidityPackedKeccak256)(
23555
25650
  ["uint256", "uint256", "bytes32"],
23556
25651
  [vrfSeed, BigInt(quantumTimestamp.toString()), positionId]
23557
25652
  );
@@ -23827,30 +25922,6 @@ var EventHelpers = {
23827
25922
  });
23828
25923
  }
23829
25924
  };
23830
-
23831
- // src/utils/position-delegate.utils.ts
23832
- var import_ethers16 = require("ethers");
23833
- var POSITION_DELEGATE_REGISTRY_ABI = [
23834
- "function positionDelegate(bytes32 positionId) view returns (address)",
23835
- "function setPositionDelegate(bytes32 positionId, address newDelegate) external",
23836
- "event PositionDelegateUpdated(bytes32 indexed positionId, address indexed oldDelegate, address indexed newDelegate)"
23837
- ];
23838
- async function setPositionDelegate(positionId, delegate, signer, registryAddress) {
23839
- const registry = new import_ethers16.Contract(
23840
- registryAddress,
23841
- POSITION_DELEGATE_REGISTRY_ABI,
23842
- signer
23843
- );
23844
- return registry["setPositionDelegate"](positionId, delegate);
23845
- }
23846
- async function getPositionDelegate(positionId, provider, registryAddress) {
23847
- const registry = new import_ethers16.Contract(
23848
- registryAddress,
23849
- POSITION_DELEGATE_REGISTRY_ABI,
23850
- provider
23851
- );
23852
- return registry["positionDelegate"](positionId);
23853
- }
23854
25925
  // Annotate the CommonJS export names for ESM import in node:
23855
25926
  0 && (module.exports = {
23856
25927
  ALL_CONTRACTS,
@@ -23866,6 +25937,8 @@ async function getPositionDelegate(positionId, provider, registryAddress) {
23866
25937
  ErrorSeverity,
23867
25938
  EventHelpers,
23868
25939
  LOCALHOST_CONTRACTS,
25940
+ LOGIN_TYPES,
25941
+ LOGIN_TYPES_WITH_AUDIENCE,
23869
25942
  LRUCache,
23870
25943
  LoanCreator,
23871
25944
  LoanQuery,
@@ -23888,6 +25961,8 @@ async function getPositionDelegate(positionId, provider, registryAddress) {
23888
25961
  buildBtcExecuteEnvelope,
23889
25962
  buildInvalidateMessageHash,
23890
25963
  buildInvalidateStaleSpendEnvelope,
25964
+ buildLoginDomain,
25965
+ buildSignedLoginPayload,
23891
25966
  collectFailures,
23892
25967
  collectSuccesses,
23893
25968
  combine,