@continuumdao/ctm-mpc-defi 0.2.0 → 0.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (100) hide show
  1. package/README.md +20 -78
  2. package/dist/agent/catalog.cjs +563 -5
  3. package/dist/agent/catalog.cjs.map +1 -1
  4. package/dist/agent/catalog.d.ts +166 -20
  5. package/dist/agent/catalog.js +551 -7
  6. package/dist/agent/catalog.js.map +1 -1
  7. package/dist/agent/skills/aave-v4/SKILL.md +43 -0
  8. package/dist/agent/skills/curve-dao/SKILL.md +13 -0
  9. package/dist/agent/skills/ethena/SKILL.md +10 -0
  10. package/dist/agent/skills/euler-v2/SKILL.md +10 -0
  11. package/dist/agent/skills/lido/SKILL.md +22 -0
  12. package/dist/agent/skills/maple-syrup/SKILL.md +10 -0
  13. package/dist/agent/skills/sky/SKILL.md +10 -0
  14. package/dist/agent/skills/uniswap-v4/SKILL.md +22 -0
  15. package/dist/chains/evm/index.cjs +79 -224
  16. package/dist/chains/evm/index.cjs.map +1 -1
  17. package/dist/chains/evm/index.d.ts +26 -26
  18. package/dist/chains/evm/index.js +69 -209
  19. package/dist/chains/evm/index.js.map +1 -1
  20. package/dist/chains/near/index.d.ts +1 -1
  21. package/dist/chains/solana/index.d.ts +1 -1
  22. package/dist/core/index.cjs +68 -106
  23. package/dist/core/index.cjs.map +1 -1
  24. package/dist/core/index.d.ts +21 -36
  25. package/dist/core/index.js +57 -96
  26. package/dist/core/index.js.map +1 -1
  27. package/dist/{envelope-CcE5Cz_q.d.ts → envelope-CpBUh9eP.d.ts} +1 -1
  28. package/dist/index.cjs +356 -1855
  29. package/dist/index.cjs.map +1 -1
  30. package/dist/index.d.ts +7 -11
  31. package/dist/index.js +332 -1826
  32. package/dist/index.js.map +1 -1
  33. package/dist/protocols/evm/aave-v4/index.cjs +1152 -669
  34. package/dist/protocols/evm/aave-v4/index.cjs.map +1 -1
  35. package/dist/protocols/evm/aave-v4/index.d.ts +418 -3
  36. package/dist/protocols/evm/aave-v4/index.js +1126 -670
  37. package/dist/protocols/evm/aave-v4/index.js.map +1 -1
  38. package/dist/protocols/evm/curve-dao/index.cjs +257 -131
  39. package/dist/protocols/evm/curve-dao/index.cjs.map +1 -1
  40. package/dist/protocols/evm/curve-dao/index.d.ts +69 -5
  41. package/dist/protocols/evm/curve-dao/index.js +242 -124
  42. package/dist/protocols/evm/curve-dao/index.js.map +1 -1
  43. package/dist/protocols/evm/ethena/index.cjs +394 -402
  44. package/dist/protocols/evm/ethena/index.cjs.map +1 -1
  45. package/dist/protocols/evm/ethena/index.d.ts +47 -3
  46. package/dist/protocols/evm/ethena/index.js +390 -404
  47. package/dist/protocols/evm/ethena/index.js.map +1 -1
  48. package/dist/protocols/evm/euler-v2/index.cjs +2810 -1191
  49. package/dist/protocols/evm/euler-v2/index.cjs.map +1 -1
  50. package/dist/protocols/evm/euler-v2/index.d.ts +465 -3
  51. package/dist/protocols/evm/euler-v2/index.js +2761 -1192
  52. package/dist/protocols/evm/euler-v2/index.js.map +1 -1
  53. package/dist/protocols/evm/lido/index.cjs +351 -236
  54. package/dist/protocols/evm/lido/index.cjs.map +1 -1
  55. package/dist/protocols/evm/lido/index.d.ts +34 -4
  56. package/dist/protocols/evm/lido/index.js +348 -238
  57. package/dist/protocols/evm/lido/index.js.map +1 -1
  58. package/dist/protocols/evm/maple/index.cjs +390 -395
  59. package/dist/protocols/evm/maple/index.cjs.map +1 -1
  60. package/dist/protocols/evm/maple/index.d.ts +23 -3
  61. package/dist/protocols/evm/maple/index.js +390 -397
  62. package/dist/protocols/evm/maple/index.js.map +1 -1
  63. package/dist/protocols/evm/sky/index.cjs +454 -232
  64. package/dist/protocols/evm/sky/index.cjs.map +1 -1
  65. package/dist/protocols/evm/sky/index.d.ts +57 -3
  66. package/dist/protocols/evm/sky/index.js +444 -231
  67. package/dist/protocols/evm/sky/index.js.map +1 -1
  68. package/dist/protocols/evm/uniswap-v4/index.cjs +423 -658
  69. package/dist/protocols/evm/uniswap-v4/index.cjs.map +1 -1
  70. package/dist/protocols/evm/uniswap-v4/index.d.ts +3 -4
  71. package/dist/protocols/evm/uniswap-v4/index.js +422 -657
  72. package/dist/protocols/evm/uniswap-v4/index.js.map +1 -1
  73. package/dist/{registry-oMKlO_5z.d.ts → registry-Bv5o37_w.d.ts} +1 -1
  74. package/dist/{types-Ce2qNHai.d.cts → types-BfjWdw1j.d.ts} +3 -1
  75. package/dist/{types-5u863Fd9.d.ts → types-DUeNJLr9.d.ts} +1 -1
  76. package/package.json +7 -6
  77. package/dist/agent/catalog.d.cts +0 -939
  78. package/dist/chains/evm/index.d.cts +0 -64
  79. package/dist/chains/near/index.d.cts +0 -37
  80. package/dist/chains/solana/index.d.cts +0 -40
  81. package/dist/core/index.d.cts +0 -43
  82. package/dist/envelope-DYDPnrHZ.d.cts +0 -35
  83. package/dist/index.d.cts +0 -16
  84. package/dist/keygen-CfNp8yKJ.d.cts +0 -9
  85. package/dist/keygen-DsINazx8.d.ts +0 -9
  86. package/dist/nodeRead-BnmSaMGO.d.cts +0 -8
  87. package/dist/nodeRead-BnmSaMGO.d.ts +0 -8
  88. package/dist/protocols/evm/aave-v4/index.d.cts +0 -500
  89. package/dist/protocols/evm/curve-dao/index.d.cts +0 -147
  90. package/dist/protocols/evm/ethena/index.d.cts +0 -161
  91. package/dist/protocols/evm/euler-v2/index.d.cts +0 -317
  92. package/dist/protocols/evm/lido/index.d.cts +0 -120
  93. package/dist/protocols/evm/maple/index.d.cts +0 -109
  94. package/dist/protocols/evm/sky/index.d.cts +0 -218
  95. package/dist/protocols/evm/uniswap-v4/index.d.cts +0 -324
  96. package/dist/registry-BwZoE668.d.cts +0 -8
  97. package/dist/txParams-BC7ogvdR.d.cts +0 -19
  98. package/dist/txParams-BC7ogvdR.d.ts +0 -19
  99. package/dist/types-B8idm_gu.d.cts +0 -34
  100. package/dist/types-Ce2qNHai.d.ts +0 -57
@@ -1,6 +1,5 @@
1
- import { d as ProtocolModule } from '../../../types-Ce2qNHai.js';
1
+ import { b as KeyGenSubsetForPermit, e as ProtocolModule } from '../../../types-BfjWdw1j.js';
2
2
  import { Address } from 'viem';
3
- import { K as KeyGenSubsetForPermit } from '../../../keygen-DsINazx8.js';
4
3
 
5
4
  /** Stay below on-chain max borrow LTV when computing per-round headroom (basis points). */
6
5
  declare const EULER_SAME_ASSET_BORROW_PROTOCOL_HEADROOM_BPS = 50n;
@@ -311,7 +310,470 @@ declare function buildEvmMultisignBodyEulerV2BorrowCollateralWithdrawBatch(args:
311
310
  messageToSign: string;
312
311
  }>;
313
312
 
313
+ /** Goldsky GraphQL endpoints from Euler docs (single hosted project). */
314
+ declare const EULER_V2_GOLDSKY_SUBGRAPH_URL_BY_CHAIN_ID: Readonly<Record<number, string>>;
315
+ type EulerV2AssetModes = {
316
+ lend: boolean;
317
+ borrow: boolean;
318
+ earn: boolean;
319
+ };
320
+ declare function eulerV2GoldskyUrlForChain(chainId: number): string | undefined;
321
+ declare function resolveEulerWrappedNativeToken(chainId: number): Promise<string | null>;
322
+ /** Wrapped gas-token contracts for this chain (Aave + Euler fallbacks); lowercased. Use to fix bad `decimals()` on WETH-class assets. */
323
+ declare function eulerWrappedGasTokenAliasesLower(chainId: number): Promise<ReadonlySet<string>>;
324
+ /** Maps native gas row (`0x000…0`) to wrapped ERC20 for Euler underlying lookups. */
325
+ declare function eulerV2KeyForNodeAssetRow(args: {
326
+ contractAddress: string;
327
+ nativeWrapped: string | null;
328
+ }): string | null;
329
+ /** GraphQL POST to the Euler Goldsky subgraph for `chainId`. */
330
+ declare function eulerV2QueryGraphQl<T>(chainId: number, query: string, variables?: Record<string, unknown>): Promise<T>;
331
+ /** Goldsky `trackingActiveAccount.deposits` (encoded like borrows: 0x + 40-hex sub + 40-hex eVault). */
332
+ declare function fetchEulerV2TrackingDepositEntries(args: {
333
+ chainId: number;
334
+ mainAddress: Address;
335
+ }): Promise<readonly string[]>;
336
+ type EulerV2ChainAssetCache = {
337
+ nativeWrapped: string | null;
338
+ /** Lowercase address → EVK / Earn modes */
339
+ modesByUnderlying: ReadonlyMap<string, EulerV2AssetModes>;
340
+ };
341
+ declare function fetchEulerV2ChainAssetCache(chainId: number): Promise<EulerV2ChainAssetCache>;
342
+ /** Cached per chain id for the lifetime of the JS realm (same pattern as Aave v4 token cache). */
343
+ declare function ensureEulerV2ChainAssetCache(chainId: number): Promise<EulerV2ChainAssetCache>;
344
+
345
+ /** Resolved cap when EVK `AmountCap` raw word is 0 (“not set”). */
346
+ declare const EULER_EVAULT_CAP_UNLIMITED_WEI: bigint;
347
+ /** @deprecated Use {@link EULER_EVAULT_CAP_UNLIMITED_WEI}. */
348
+ declare const EULER_EVAULT_SUPPLY_CAP_UNLIMITED_WEI: bigint;
349
+ /**
350
+ * When `true`, {@link fetchEulerVaultOnChainLendMetricsForVaults} drives Lend/Borrow vault gates and UI fields.
351
+ * When `false`, the app uses Goldsky subgraph `eulerVaults` caps and `state` (cash / totalBorrows) instead.
352
+ */
353
+ declare const EULER_V2_PREFER_ON_CHAIN_LEND_METRICS = false;
354
+ /**
355
+ * EVK `AmountCap`: raw uint16 0 ⇒ “not set” ⇒ unlimited ({@link UINT256_MAX} wei).
356
+ * See `AmountCapLib.resolve` in euler-vault-kit.
357
+ */
358
+ declare function resolveEulerAmountCapToWei(rawCap16: number | bigint): bigint;
359
+ /** @deprecated Use {@link resolveEulerAmountCapToWei}. */
360
+ declare const resolveEulerAmountCapToSupplyWei: typeof resolveEulerAmountCapToWei;
361
+ /**
362
+ * Goldsky `eulerVaults.supplyCap` / `borrowCap` are the **uint16 AmountCap** words from `caps()`,
363
+ * not resolved underlying wei. Values ≤ `0xffff` must use {@link resolveEulerAmountCapToWei}.
364
+ * Larger values are treated as already-resolved wei.
365
+ */
366
+ declare function eulerSubgraphVaultCapToUnderlyingWei(raw: string | undefined | null): bigint;
367
+ type EulerVaultOnChainLendMetrics = {
368
+ rawSupplyCap16: number;
369
+ rawBorrowCap16: number;
370
+ supplyCapWei: bigint;
371
+ borrowCapWei: bigint;
372
+ /** Idle underlying in the vault (matches subgraph `state.cash`). */
373
+ cashWei: bigint;
374
+ totalBorrowsWei: bigint;
375
+ /** ERC-4626 total assets; used with {@link supplyCapWei} for max new supply. */
376
+ totalAssetsWei: bigint;
377
+ };
378
+ /**
379
+ * Subgraph caps + `state` fields shaped like {@link fetchEulerVaultOnChainLendMetrics}.
380
+ * Uses `cashWei + totalBorrowsWei` for {@link totalAssetsWei} (same decomposition as the EVK balance sheet the indexer tracks).
381
+ */
382
+ declare function eulerVaultLendMetricsFromIndexerVaultState(args: {
383
+ supplyCapRaw: string | null | undefined;
384
+ borrowCapRaw: string | null | undefined;
385
+ cashWei: bigint;
386
+ totalBorrowsWei: bigint;
387
+ totalAssetsWei: bigint;
388
+ }): EulerVaultOnChainLendMetrics;
389
+ declare function formatEulerResolvedCapOrCashForUi(wei: bigint, decimals: number, symbolSuffix: string): string;
390
+ /** Max new supply (deposit) wei: headroom under resolved supply cap using on-chain `totalAssets`. */
391
+ declare function eulerVaultMaxNewSupplyWei(metrics: EulerVaultOnChainLendMetrics): bigint;
392
+ /** Upper bound for a new borrow: min(cash, borrowCap − totalBorrows) when the borrow cap is finite; `borrowCapWei === 0` disables borrowing. */
393
+ declare function eulerVaultMaxNewBorrowWei(metrics: EulerVaultOnChainLendMetrics): bigint;
394
+ declare function fetchEulerVaultOnChainLendMetrics(args: {
395
+ rpcUrl: string;
396
+ chainId: number;
397
+ evault: Address;
398
+ }): Promise<EulerVaultOnChainLendMetrics>;
399
+ type EulerVaultOnChainLendMetricsResult = {
400
+ ok: true;
401
+ data: EulerVaultOnChainLendMetrics;
402
+ } | {
403
+ ok: false;
404
+ message: string;
405
+ };
406
+ /** Batch with bounded concurrency (RPC friendly). */
407
+ declare function fetchEulerVaultOnChainLendMetricsForVaults(args: {
408
+ rpcUrl: string;
409
+ chainId: number;
410
+ vaults: readonly {
411
+ key: string;
412
+ evault: string;
413
+ }[];
414
+ }): Promise<ReadonlyMap<string, EulerVaultOnChainLendMetricsResult>>;
415
+
416
+ /** Annual APY stored as a ray (1e27); supply or borrow from subgraph state. */
417
+ declare function formatEulerRayApyPercent(apyRay: bigint): string;
418
+ /** @deprecated Use {@link formatEulerRayApyPercent}. */
419
+ declare const formatEulerRaySupplyApyPercent: typeof formatEulerRayApyPercent;
420
+ type EulerV2IsolatedLendMarketRow = {
421
+ vaultId: string;
422
+ /** Checksummed eVault address for explorers / copy. */
423
+ evaultAddress: string;
424
+ marketName: string;
425
+ decimals: number;
426
+ cash: bigint;
427
+ totalBorrows: bigint;
428
+ supplyApyPercentLabel: string;
429
+ borrowApyPercentLabel: string;
430
+ totalSupplyFormatted: string;
431
+ availableLiquidityFormatted: string;
432
+ utilizationPercentLabel: string;
433
+ supplyCapFormatted: string;
434
+ borrowCapFormatted: string;
435
+ interestFeeLabel: string;
436
+ stateIndexedDisplay: string;
437
+ perspectives: readonly string[];
438
+ /** Ethereum Vault Connector (EVC) contract for `batch(...)`. */
439
+ evcAddress: string | null;
440
+ oracleAddress: string | null;
441
+ unitOfAccountAddress: string | null;
442
+ borrowAssetAddressLower: string | null;
443
+ governonAdminChecksum: string | null;
444
+ borrowApyRay: bigint;
445
+ /** Caps, cash, borrows, and total-assets proxy from Goldsky (same shape as on-chain reads). */
446
+ indexerLendMetrics: EulerVaultOnChainLendMetrics;
447
+ collateralTokens: readonly {
448
+ vaultId: string;
449
+ /** Collateral eVault (checksummed) for on-chain LTV + deposit target. */
450
+ collateralEvaultAddress: string | null;
451
+ collateralDecimals: number;
452
+ collateralAssetAddressLower: string | null;
453
+ collateralSupplyApyPercentLabel: string;
454
+ underlyingSymbol: string;
455
+ underlyingName: string | null;
456
+ vaultMarketLabel: string;
457
+ }[];
458
+ };
459
+ /** One borrow-vault × collateral-vault pair (flattened from {@link EulerV2IsolatedLendMarketRow}). */
460
+ type EulerV2BorrowCollateralRow = {
461
+ pairKey: string;
462
+ borrowVaultId: string;
463
+ borrowEvaultAddress: string;
464
+ borrowMarketName: string;
465
+ borrowDecimals: number;
466
+ borrowApyPercentLabel: string;
467
+ borrowCash: bigint;
468
+ borrowTotalBorrows: bigint;
469
+ netApyPercentLabel: string;
470
+ utilizationPercentLabel: string;
471
+ availableLiquidityFormatted: string;
472
+ evcAddress: string | null;
473
+ oracleAddress: string | null;
474
+ unitOfAccountAddress: string | null;
475
+ borrowAssetAddressLower: string | null;
476
+ governonAdminChecksum: string | null;
477
+ collateralVaultId: string;
478
+ collateralEvaultAddress: string | null;
479
+ collateralSymbol: string;
480
+ collateralName: string | null;
481
+ collateralVaultLabel: string;
482
+ collateralDecimals: number;
483
+ collateralAssetAddressLower: string | null;
484
+ collateralSupplyApyPercentLabel: string;
485
+ borrowIndexerLendMetrics: EulerVaultOnChainLendMetrics;
486
+ };
487
+ declare function flattenEulerV2BorrowCollateralRows(markets: readonly EulerV2IsolatedLendMarketRow[]): EulerV2BorrowCollateralRow[];
488
+ declare function fetchEulerV2IsolatedLendMarketsForRowAsset(args: {
489
+ chainId: number;
490
+ /** Assets panel contract address (native row mapped via Euler cache). */
491
+ contractAddress: string;
492
+ rpcUrl?: string | undefined;
493
+ nodeErc20ByAddress?: ReadonlyMap<string, {
494
+ name: string;
495
+ symbol: string;
496
+ }> | undefined;
497
+ /** Shown asset symbol (helps match Euler app-style “Product SYMBOL” titles). */
498
+ suppliedAssetSymbol?: string | undefined;
499
+ }): Promise<EulerV2IsolatedLendMarketRow[]>;
500
+
501
+ /** Curated earn vault addresses from euler-labels (non-deprecated only). */
502
+ declare function fetchEulerLabelsEarnVaultAllowlist(chainId: number): Promise<ReadonlySet<string>>;
503
+ /** Map lowercase address → entity display name from entities.json. */
504
+ declare function fetchEulerLabelsEntityNameByAddress(chainId: number): Promise<ReadonlyMap<string, string>>;
505
+ /** Dialog focus metadata: which Earn vault the deposit batch targets (mirrors lend flow vault meta). */
506
+ type EulerV2EarnFlowVaultMeta = {
507
+ earnVaultIdLower: string;
508
+ evaultAddress: string;
509
+ vaultMarketLabel: string;
510
+ curatorDisplayName: string;
511
+ };
512
+ type EulerV2EarnStrategyRow = {
513
+ strategyVaultIdLower: string;
514
+ strategySymbol: string;
515
+ supplyApyPercentLabel: string;
516
+ allocatedAssetsWei: bigint;
517
+ allocatedHumanLabel: string;
518
+ /** Share of vault total assets (TVL). */
519
+ allocationPercentOfTvlLabel: string;
520
+ allocationCapHumanLabel: string;
521
+ /** True when cap is unbounded (uint256 max in-contract, or Goldsky subgraph no-cap sentinel). */
522
+ allocationCapUnlimited: boolean;
523
+ };
524
+ type EulerV2EarnOfferingRow = {
525
+ vaultIdLower: string;
526
+ evaultAddress: string;
527
+ vaultName: string;
528
+ curatorDisplayName: string;
529
+ strategyCount: number;
530
+ supplyApyPercentLabel: string;
531
+ totalAssetsWei: bigint;
532
+ totalAssetsHumanLabel: string;
533
+ availableLiquidityWei: bigint;
534
+ availableLiquidityHumanLabel: string;
535
+ performanceFeePercentLabel: string;
536
+ underlyingDecimals: number;
537
+ strategies: readonly EulerV2EarnStrategyRow[];
538
+ };
539
+ declare function fetchEulerV2EarnOfferingsForRowAsset(args: {
540
+ chainId: number;
541
+ contractAddress: string;
542
+ underlyingDecimals: number;
543
+ suppliedAssetSymbol?: string | undefined;
544
+ }): Promise<EulerV2EarnOfferingRow[]>;
545
+
546
+ /** Row shown on the Euler dialog Positions tab after a deposit request is created from this UI. */
547
+ type EulerV2LendUiPosition = {
548
+ id: string;
549
+ chainId: number;
550
+ vaultId: string;
551
+ evaultAddress: string;
552
+ marketName: string;
553
+ underlyingSymbol: string;
554
+ amountHuman: string;
555
+ createdAtMs: number;
556
+ signRequestId: string | null;
557
+ /** Chain supply: `convertToAssets(balanceOf)` raw underlying wei (for client-side display if `decimals()` is wrong). */
558
+ underlyingAssetsWei?: string;
559
+ /** Chain supply: vault `asset()` lowercased. */
560
+ underlyingAssetAddressLower?: string;
561
+ /** Isolated lend vault vs curated Euler Earn vault vs borrow liability. */
562
+ positionKind?: 'lend' | 'earn' | 'borrow';
563
+ /** Vault underlying decimals (chain-loaded supply rows) — redeem amount parsing when Assets dialog context is unset. */
564
+ underlyingAssetDecimals?: number;
565
+ /** Borrow: EVC account address. Lend/Earn (chain-loaded): vault share holder for `balanceOf` / `maxWithdraw` when not the key address. */
566
+ subAccountAddress?: string;
567
+ /** Borrow: liability vault’s configured collateral eVault (LTV pair), if resolved. */
568
+ collateralEvaultAddress?: string | null;
569
+ /** Borrow: EVC core from indexer / RPC. */
570
+ evcAddress?: string | null;
571
+ /** Borrow: underlying ERC20 of the liability vault. */
572
+ borrowAssetAddressLower?: string | null;
573
+ /** Borrow: decimals of the borrowed asset (for repay amount parsing). */
574
+ borrowAssetDecimals?: number;
575
+ /** Borrow: snapshot from last load; same as amountHuman when fresh. */
576
+ borrowDebtHuman?: string;
577
+ /** Borrow: collateral underlying (eVault asset) for withdraw UX. */
578
+ collateralAssetAddressLower?: string | null;
579
+ collateralAssetDecimals?: number;
580
+ collateralUnderlyingSymbol?: string | null;
581
+ /** Borrow: liability / collateral value ratio from accountLiquidity (borrowing), as 0–100+ percentage. */
582
+ currentLtvPercent?: number | null;
583
+ /** Borrow: max borrow LTV (vault vs collateral) in basis points. */
584
+ maxLtvBps?: number | null;
585
+ /** Borrow: liquidation LTV in basis points. */
586
+ liquidationLtvBps?: number | null;
587
+ };
588
+ type EulerV2LendPositionDraft = Omit<EulerV2LendUiPosition, 'id' | 'createdAtMs' | 'signRequestId'>;
589
+
590
+ /** Parse `trackingActiveAccount.borrows` entry: 0x + 40-hex subaccount + 40-hex vault. */
591
+ declare function parseEulerTrackingBorrowEntry(entry: string): {
592
+ subAccount: Address;
593
+ borrowVault: Address;
594
+ } | null;
595
+ declare function fetchEulerV2TrackingBorrowEntries(args: {
596
+ chainId: number;
597
+ mainAddress: Address;
598
+ }): Promise<readonly string[]>;
599
+ /**
600
+ * Load borrow vault rows for `mainAddress` from the Euler tracking subgraph (`borrows`) plus RPC, and supplement
601
+ * pairs from `deposits` + on-chain `debtOf` when the indexer lags. Rows with zero debt are kept when the
602
+ * sub-account still has collateral to withdraw (`maxWithdraw` or vault shares).
603
+ */
604
+ declare function loadEulerV2BorrowPositionsForOwner(args: {
605
+ chainId: number;
606
+ rpcUrl: string;
607
+ mainAddress: Address;
608
+ }): Promise<EulerV2LendUiPosition[]>;
609
+ /** Live liability vault debt for repay max button / validation. */
610
+ declare function fetchEulerV2BorrowDebtWei(args: {
611
+ chainId: number;
612
+ rpcUrl: string;
613
+ borrowVault: Address;
614
+ subAccount: Address;
615
+ }): Promise<bigint>;
616
+
617
+ /**
618
+ * On-chain lend / earn vault positions: Goldsky `trackingActiveAccount.deposits` + RPC share balances and `convertToAssets`.
619
+ * Encoding matches borrow tracking entries: `0x` + 40-hex sub-account + 40-hex eVault (see portfolio aggregation).
620
+ */
621
+ declare function loadEulerV2LendSupplyPositionsForOwner(args: {
622
+ chainId: number;
623
+ rpcUrl: string;
624
+ mainAddress: Address;
625
+ }): Promise<EulerV2LendUiPosition[]>;
626
+ /** Prefer indexer+RPC supply rows over session duplicates (same vault / kind / share holder). */
627
+ declare function mergeEulerV2PositionsTabRows(args: {
628
+ borrow: readonly EulerV2LendUiPosition[];
629
+ chainSupply: readonly EulerV2LendUiPosition[];
630
+ session: readonly EulerV2LendUiPosition[];
631
+ mainAddressLower: string;
632
+ }): EulerV2LendUiPosition[];
633
+
634
+ type EulerV2BorrowPairRisk = {
635
+ maxLtvBps: number;
636
+ liquidationLtvBps: number;
637
+ };
638
+ /**
639
+ * Read borrow / liquidation LTV from the liability eVault for a collateral eVault address.
640
+ */
641
+ declare function fetchEulerV2BorrowPairLtvs(args: {
642
+ chainId: number;
643
+ rpcUrl: string;
644
+ borrowEvault: Address;
645
+ collateralEvault: Address;
646
+ }): Promise<EulerV2BorrowPairRisk | null>;
647
+ type EulerV2BorrowOracleQuoteSnapshot = {
648
+ /** UoA out for `10^borrowDecimals` wei of borrow asset (one full token if decimals match). */
649
+ oneBorrowUnitUoAWei: bigint;
650
+ /** UoA out for `collateralAmountHuman` of collateral (human → wei using collateralDecimals). */
651
+ collateralUoAWei: bigint;
652
+ };
653
+ /**
654
+ * Uses the liability vault’s oracle (same oracle address the vault uses for account health).
655
+ */
656
+ declare function fetchEulerV2BorrowOracleQuoteSnapshot(args: {
657
+ chainId: number;
658
+ rpcUrl: string;
659
+ oracle: Address;
660
+ unitOfAccount: Address;
661
+ borrowAsset: Address;
662
+ borrowDecimals: number;
663
+ collateralAsset: Address;
664
+ collateralDecimals: number;
665
+ collateralAmountHuman: string;
666
+ }): Promise<EulerV2BorrowOracleQuoteSnapshot | null>;
667
+ /** `borrowHuman ≈ collateralUoA * (ltvPct/100) / oneBorrowUnitUoA` with BigInt rounding down. */
668
+ declare function estimateBorrowHumanFromLtv(args: {
669
+ collateralUoAWei: bigint;
670
+ oneBorrowUnitUoAWei: bigint;
671
+ ltvPercent: number;
672
+ borrowDecimals: number;
673
+ }): string;
674
+ /**
675
+ * Max collateral wei such that borrow at `ltvPercent` is ≤ `maxBorrowWei`, capped by wallet.
676
+ * Uses oracle UoA at **full wallet balance**; assumes `getQuote` scales linearly in collateral amount.
677
+ */
678
+ declare function maxCollateralWeiCappedByBorrowLiquidity(args: {
679
+ walletBalWei: bigint;
680
+ maxBorrowWei: bigint;
681
+ collateralFullUoAWei: bigint;
682
+ oneBorrowUnitUoAWei: bigint;
683
+ ltvPercent: number;
684
+ borrowDecimals: number;
685
+ }): bigint;
686
+
687
+ /** Matches `RewardToken` / `ERC20WrapperLocked.LOCK_NORMALIZATION_FACTOR`. */
688
+ declare const REUL_LOCK_DAY_SEC = 86400n;
689
+ /** Matches `RewardToken` linear vesting: 180 days from lock timestamp. */
690
+ declare const REUL_FULL_VEST_SEC: bigint;
691
+ declare const eulerReulUnlockAbi: readonly [{
692
+ readonly name: "withdrawToByLockTimestamps";
693
+ readonly type: "function";
694
+ readonly stateMutability: "nonpayable";
695
+ readonly inputs: readonly [{
696
+ readonly type: "address";
697
+ readonly name: "account";
698
+ }, {
699
+ readonly type: "uint256[]";
700
+ readonly name: "lockTimestamps";
701
+ }, {
702
+ readonly type: "bool";
703
+ readonly name: "allowRemainderLoss";
704
+ }];
705
+ readonly outputs: readonly [{
706
+ readonly type: "bool";
707
+ }];
708
+ }];
709
+ type EulerReulVestingTranche = {
710
+ reulToken: Address;
711
+ lockTimestampSec: bigint;
712
+ lockedAmountWei: bigint;
713
+ /** EUL (underlying) to wallet if unlocking now. */
714
+ unlockToWalletWei: bigint;
715
+ /** EUL sent to remainder receiver when unlocking early (forfeiture). */
716
+ remainderWei: bigint;
717
+ /** Unix second when this tranche can be fully unlocked with no remainder. */
718
+ fullVestTimestampSec: bigint;
719
+ /** Same as `remainderWei === 0n`. */
720
+ isFullyVested: boolean;
721
+ };
722
+ declare function fetchEulerReulVestingTranches(args: {
723
+ rpcUrl: string;
724
+ chainId: number;
725
+ reulToken: Address;
726
+ user: Address;
727
+ }): Promise<readonly EulerReulVestingTranche[]>;
728
+ declare function encodeEulerReulWithdrawToByLockTimestampsData(args: {
729
+ recipient: Address;
730
+ lockTimestampsSec: readonly bigint[];
731
+ allowRemainderLoss: boolean;
732
+ }): `0x${string}`;
733
+ /** Gas fallback for `withdrawToByLockTimestamps` (batch). */
734
+ declare const EULER_REUL_UNLOCK_GAS_FALLBACK = 500000n;
735
+
736
+ /** If `base` already mentions the asset symbol, don’t append it again. */
737
+ declare function eulerLabelsAppendUnderlyingIfDistinct(base: string, underlyingSymbol: string): string;
738
+ /**
739
+ * Map lowercase eVault address → Euler dApp label base (product name or vault override name).
740
+ * Returns empty map on HTTP/parse errors (caller keeps subgraph names).
741
+ */
742
+ declare function fetchEulerLabelsVaultNameMap(chainId: number): Promise<ReadonlyMap<string, string>>;
743
+ declare function eulerLabelsLookupLabelForVault(labelMap: ReadonlyMap<string, string>, evaultAddress: string): string | undefined;
744
+
745
+ /** CoinGecko `usd` per 1 token, keyed by lowercase contract address. */
746
+ declare function fetchCoingeckoTokenUsdByContract(args: {
747
+ chainId: number;
748
+ contractAddressesLower: readonly string[];
749
+ }): Promise<Map<string, number>>;
750
+ type EulerV2PortfolioUsdSnapshot = {
751
+ totalSuppliedUsd: number | null;
752
+ totalBorrowedUsd: number | null;
753
+ netAssetValueUsd: number | null;
754
+ /** True when any non-zero position lacked a CoinGecko USD price. */
755
+ partialPricing: boolean;
756
+ /** No CoinGecko `platform` mapping for this chain — USD not available. */
757
+ pricingUnavailable: boolean;
758
+ error: string | null;
759
+ };
760
+ /**
761
+ * Supplied (deposit vault shares → assets), borrowed (`debtOf`), and NAV in USD via CoinGecko token prices.
762
+ * Best-effort: chains without CoinGecko platform mapping return `pricingUnavailable`.
763
+ */
764
+ declare function loadEulerV2PortfolioUsdSnapshot(args: {
765
+ chainId: number;
766
+ rpcUrl: string;
767
+ mainAddress: Address;
768
+ }): Promise<EulerV2PortfolioUsdSnapshot>;
769
+
770
+ /**
771
+ * Euler V2: EVM chain IDs that have a Goldsky subgraph endpoint listed in Euler docs.
772
+ * @see https://docs.euler.finance/developers/data-querying/subgraphs
773
+ */
774
+ declare function loadEulerV2SupportedChainIds(): Promise<ReadonlySet<number>>;
775
+
314
776
  declare const EULER_V2_PROTOCOL_ID = "euler-v2";
315
777
  declare const eulerV2ProtocolModule: ProtocolModule;
316
778
 
317
- export { EULER_SAME_ASSET_BORROW_APPROVAL_BUFFER_BPS, EULER_SAME_ASSET_BORROW_MAX_ROUNDS, EULER_SAME_ASSET_BORROW_PROTOCOL_HEADROOM_BPS, EULER_SAME_ASSET_BORROW_RATIO_STOP_EPS_BPS, EULER_V2_ISOLATED_VAULT_DEPOSIT_FALLBACK_GAS, EULER_V2_PROTOCOL_ID, EULER_V2_VAULT_WITHDRAW_FALLBACK_GAS, buildEvmMultisignBodyEulerV2BorrowCollateralDepositBatch, buildEvmMultisignBodyEulerV2BorrowCollateralWithdrawBatch, buildEvmMultisignBodyEulerV2BorrowRepayBatch, buildEvmMultisignBodyEulerV2IsolatedBorrowBatch, buildEvmMultisignBodyEulerV2IsolatedLendDepositBatch, buildEvmMultisignBodyEulerV2VaultWithdraw, clampEulerUnderlyingDecimalsForEulerUi, eulerBorrowAndCollateralSameAsset, eulerSameAssetApproveAmountWithBuffer, eulerSameAssetTotalCollateralPullWei, eulerV2ProtocolModule, fetchEulerBorrowCollateralMaxWithdrawAssetsWei, fetchEulerLendEarnVaultEffectiveMaxWithdrawWei, fetchEulerVaultAssetDecimals, fetchEulerVaultMaxWithdrawWei, fetchEulerVaultUnderlyingMeta, planSameAssetLeveragedBorrows };
779
+ export { EULER_EVAULT_CAP_UNLIMITED_WEI, EULER_EVAULT_SUPPLY_CAP_UNLIMITED_WEI, EULER_REUL_UNLOCK_GAS_FALLBACK, EULER_SAME_ASSET_BORROW_APPROVAL_BUFFER_BPS, EULER_SAME_ASSET_BORROW_MAX_ROUNDS, EULER_SAME_ASSET_BORROW_PROTOCOL_HEADROOM_BPS, EULER_SAME_ASSET_BORROW_RATIO_STOP_EPS_BPS, EULER_V2_GOLDSKY_SUBGRAPH_URL_BY_CHAIN_ID, EULER_V2_ISOLATED_VAULT_DEPOSIT_FALLBACK_GAS, EULER_V2_PREFER_ON_CHAIN_LEND_METRICS, EULER_V2_PROTOCOL_ID, EULER_V2_VAULT_WITHDRAW_FALLBACK_GAS, type EulerReulVestingTranche, type EulerV2AssetModes, type EulerV2BorrowCollateralRow, type EulerV2BorrowOracleQuoteSnapshot, type EulerV2BorrowPairRisk, type EulerV2ChainAssetCache, type EulerV2EarnFlowVaultMeta, type EulerV2EarnOfferingRow, type EulerV2EarnStrategyRow, type EulerV2IsolatedLendMarketRow, type EulerV2LendPositionDraft, type EulerV2LendUiPosition, type EulerV2PortfolioUsdSnapshot, type EulerVaultOnChainLendMetrics, type EulerVaultOnChainLendMetricsResult, REUL_FULL_VEST_SEC, REUL_LOCK_DAY_SEC, buildEvmMultisignBodyEulerV2BorrowCollateralDepositBatch, buildEvmMultisignBodyEulerV2BorrowCollateralWithdrawBatch, buildEvmMultisignBodyEulerV2BorrowRepayBatch, buildEvmMultisignBodyEulerV2IsolatedBorrowBatch, buildEvmMultisignBodyEulerV2IsolatedLendDepositBatch, buildEvmMultisignBodyEulerV2VaultWithdraw, clampEulerUnderlyingDecimalsForEulerUi, encodeEulerReulWithdrawToByLockTimestampsData, ensureEulerV2ChainAssetCache, estimateBorrowHumanFromLtv, eulerBorrowAndCollateralSameAsset, eulerLabelsAppendUnderlyingIfDistinct, eulerLabelsLookupLabelForVault, eulerReulUnlockAbi, eulerSameAssetApproveAmountWithBuffer, eulerSameAssetTotalCollateralPullWei, eulerSubgraphVaultCapToUnderlyingWei, eulerV2GoldskyUrlForChain, eulerV2KeyForNodeAssetRow, eulerV2ProtocolModule, eulerV2QueryGraphQl, eulerVaultLendMetricsFromIndexerVaultState, eulerVaultMaxNewBorrowWei, eulerVaultMaxNewSupplyWei, eulerWrappedGasTokenAliasesLower, fetchCoingeckoTokenUsdByContract, fetchEulerBorrowCollateralMaxWithdrawAssetsWei, fetchEulerLabelsEarnVaultAllowlist, fetchEulerLabelsEntityNameByAddress, fetchEulerLabelsVaultNameMap, fetchEulerLendEarnVaultEffectiveMaxWithdrawWei, fetchEulerReulVestingTranches, fetchEulerV2BorrowDebtWei, fetchEulerV2BorrowOracleQuoteSnapshot, fetchEulerV2BorrowPairLtvs, fetchEulerV2ChainAssetCache, fetchEulerV2EarnOfferingsForRowAsset, fetchEulerV2IsolatedLendMarketsForRowAsset, fetchEulerV2TrackingBorrowEntries, fetchEulerV2TrackingDepositEntries, fetchEulerVaultAssetDecimals, fetchEulerVaultMaxWithdrawWei, fetchEulerVaultOnChainLendMetrics, fetchEulerVaultOnChainLendMetricsForVaults, fetchEulerVaultUnderlyingMeta, flattenEulerV2BorrowCollateralRows, formatEulerRayApyPercent, formatEulerRaySupplyApyPercent, formatEulerResolvedCapOrCashForUi, loadEulerV2BorrowPositionsForOwner, loadEulerV2LendSupplyPositionsForOwner, loadEulerV2PortfolioUsdSnapshot, loadEulerV2SupportedChainIds, maxCollateralWeiCappedByBorrowLiquidity, mergeEulerV2PositionsTabRows, parseEulerTrackingBorrowEntry, planSameAssetLeveragedBorrows, resolveEulerAmountCapToSupplyWei, resolveEulerAmountCapToWei, resolveEulerWrappedNativeToken };