@defisaver/positions-sdk 2.1.127-midnight-8-dev → 2.1.127-midnight-10-dev

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 (119) hide show
  1. package/cjs/aaveV4/index.js +26 -10
  2. package/cjs/aaveV4/merkl.d.ts +2 -1
  3. package/cjs/aaveV4/merkl.js +42 -35
  4. package/cjs/config/contracts.d.ts +0 -938
  5. package/cjs/config/contracts.js +2 -8
  6. package/cjs/contracts.d.ts +0 -23433
  7. package/cjs/contracts.js +2 -3
  8. package/cjs/helpers/aaveV4Helpers/index.d.ts +7 -1
  9. package/cjs/helpers/aaveV4Helpers/index.js +22 -10
  10. package/cjs/helpers/index.d.ts +0 -1
  11. package/cjs/helpers/index.js +1 -2
  12. package/cjs/helpers/morphoMidnightHelpers/index.d.ts +4 -57
  13. package/cjs/helpers/morphoMidnightHelpers/index.js +15 -72
  14. package/cjs/helpers/morphoMidnightHelpers/rate.d.ts +4 -0
  15. package/cjs/helpers/morphoMidnightHelpers/rate.js +14 -1
  16. package/cjs/helpers/morphoMidnightHelpers/tenor.d.ts +8 -4
  17. package/cjs/helpers/morphoMidnightHelpers/tenor.js +12 -14
  18. package/cjs/index.d.ts +1 -2
  19. package/cjs/index.js +1 -3
  20. package/cjs/markets/index.d.ts +0 -1
  21. package/cjs/markets/index.js +1 -3
  22. package/cjs/markets/morphoBlue/index.d.ts +6 -0
  23. package/cjs/markets/morphoBlue/index.js +53 -2
  24. package/cjs/portfolio/discovery.d.ts +1 -1
  25. package/cjs/portfolio/discovery.js +1 -1
  26. package/cjs/portfolio/index.js +0 -32
  27. package/cjs/services/utils.d.ts +1 -0
  28. package/cjs/services/utils.js +3 -1
  29. package/cjs/staking/staking.js +1 -2
  30. package/cjs/types/aaveV4.d.ts +5 -0
  31. package/cjs/types/common.d.ts +4 -0
  32. package/cjs/types/common.js +6 -1
  33. package/cjs/types/index.d.ts +0 -1
  34. package/cjs/types/index.js +0 -1
  35. package/cjs/types/merkl.d.ts +3 -4
  36. package/cjs/types/morphoBlue.d.ts +3 -0
  37. package/cjs/types/morphoBlue.js +3 -0
  38. package/cjs/types/portfolio.d.ts +0 -4
  39. package/esm/aaveV4/index.js +27 -11
  40. package/esm/aaveV4/merkl.d.ts +2 -1
  41. package/esm/aaveV4/merkl.js +41 -35
  42. package/esm/config/contracts.d.ts +0 -938
  43. package/esm/config/contracts.js +0 -6
  44. package/esm/contracts.d.ts +0 -23433
  45. package/esm/contracts.js +0 -1
  46. package/esm/helpers/aaveV4Helpers/index.d.ts +7 -1
  47. package/esm/helpers/aaveV4Helpers/index.js +21 -10
  48. package/esm/helpers/index.d.ts +0 -1
  49. package/esm/helpers/index.js +0 -1
  50. package/esm/helpers/morphoMidnightHelpers/index.d.ts +4 -57
  51. package/esm/helpers/morphoMidnightHelpers/index.js +14 -73
  52. package/esm/helpers/morphoMidnightHelpers/rate.d.ts +4 -0
  53. package/esm/helpers/morphoMidnightHelpers/rate.js +12 -0
  54. package/esm/helpers/morphoMidnightHelpers/tenor.d.ts +8 -4
  55. package/esm/helpers/morphoMidnightHelpers/tenor.js +12 -13
  56. package/esm/index.d.ts +1 -2
  57. package/esm/index.js +1 -2
  58. package/esm/markets/index.d.ts +0 -1
  59. package/esm/markets/index.js +0 -1
  60. package/esm/markets/morphoBlue/index.d.ts +6 -0
  61. package/esm/markets/morphoBlue/index.js +48 -0
  62. package/esm/portfolio/discovery.d.ts +1 -1
  63. package/esm/portfolio/discovery.js +1 -1
  64. package/esm/portfolio/index.js +1 -33
  65. package/esm/services/utils.d.ts +1 -0
  66. package/esm/services/utils.js +1 -0
  67. package/esm/staking/staking.js +1 -2
  68. package/esm/types/aaveV4.d.ts +5 -0
  69. package/esm/types/common.d.ts +4 -0
  70. package/esm/types/common.js +5 -0
  71. package/esm/types/index.d.ts +0 -1
  72. package/esm/types/index.js +0 -1
  73. package/esm/types/merkl.d.ts +3 -4
  74. package/esm/types/morphoBlue.d.ts +3 -0
  75. package/esm/types/morphoBlue.js +3 -0
  76. package/esm/types/portfolio.d.ts +0 -4
  77. package/package.json +1 -1
  78. package/src/aaveV4/index.ts +29 -11
  79. package/src/aaveV4/merkl.ts +41 -32
  80. package/src/config/contracts.ts +0 -6
  81. package/src/contracts.ts +0 -1
  82. package/src/helpers/aaveV4Helpers/index.ts +22 -9
  83. package/src/helpers/index.ts +0 -1
  84. package/src/helpers/morphoMidnightHelpers/index.ts +16 -69
  85. package/src/helpers/morphoMidnightHelpers/rate.ts +25 -0
  86. package/src/helpers/morphoMidnightHelpers/tenor.ts +12 -16
  87. package/src/index.ts +0 -2
  88. package/src/markets/index.ts +0 -1
  89. package/src/markets/morphoBlue/index.ts +49 -1
  90. package/src/portfolio/discovery.ts +1 -1
  91. package/src/portfolio/index.ts +0 -33
  92. package/src/services/utils.ts +2 -0
  93. package/src/staking/staking.ts +1 -2
  94. package/src/types/aaveV4.ts +5 -0
  95. package/src/types/common.ts +5 -0
  96. package/src/types/index.ts +0 -1
  97. package/src/types/merkl.ts +3 -3
  98. package/src/types/morphoBlue.ts +3 -0
  99. package/src/types/portfolio.ts +0 -4
  100. package/cjs/eulerV2/index.d.ts +0 -47
  101. package/cjs/eulerV2/index.js +0 -225
  102. package/cjs/helpers/eulerHelpers/index.d.ts +0 -22
  103. package/cjs/helpers/eulerHelpers/index.js +0 -231
  104. package/cjs/markets/euler/index.d.ts +0 -8
  105. package/cjs/markets/euler/index.js +0 -30
  106. package/cjs/types/euler.d.ts +0 -153
  107. package/cjs/types/euler.js +0 -14
  108. package/esm/eulerV2/index.d.ts +0 -47
  109. package/esm/eulerV2/index.js +0 -215
  110. package/esm/helpers/eulerHelpers/index.d.ts +0 -22
  111. package/esm/helpers/eulerHelpers/index.js +0 -218
  112. package/esm/markets/euler/index.d.ts +0 -8
  113. package/esm/markets/euler/index.js +0 -24
  114. package/esm/types/euler.d.ts +0 -153
  115. package/esm/types/euler.js +0 -11
  116. package/src/eulerV2/index.ts +0 -331
  117. package/src/helpers/eulerHelpers/index.ts +0 -232
  118. package/src/markets/euler/index.ts +0 -27
  119. package/src/types/euler.ts +0 -178
@@ -1,8 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.MORPHO_BLUE_PTWEETH_USDA_860 = exports.MORPHO_BLUE_WOETH_ETH_860 = exports.MORPHO_BLUE_OSETH_ETH_860 = exports.MORPHO_BLUE_SWBTC_WBTC_945 = exports.MORPHO_BLUE_LBTC_WBTC_945 = exports.MORPHO_BLUE_MORPHO_USDC_625 = exports.MORPHO_BLUE_SUSDS_USDT_965 = exports.MORPHO_BLUE_LBTC_CBBTC_945 = exports.MORPHO_BLUE_LBTC_USDC_860 = exports.MORPHO_BLUE_SYRUPUSDC_USDC_915 = exports.MORPHO_BLUE_USR_USDC_915 = exports.MORPHO_BLUE_USDE_DAI_777 = exports.MORPHO_BLUE_USDE_DAI_945 = exports.MORPHO_BLUE_USDE_DAI_915 = exports.MORPHO_BLUE_USDE_DAI_860 = exports.MORPHO_BLUE_SUSDE_DAI_777 = exports.MORPHO_BLUE_SUSDE_DAI_945 = exports.MORPHO_BLUE_SUSDE_DAI_915 = exports.MORPHO_BLUE_SUSDE_DAI_860 = exports.MORPHO_BLUE_WSTETH_ETH_965_EXCHANGE_RATE = exports.MORPHO_BLUE_WSTETH_ETH_945_EXCHANGE_RATE = exports.MORPHO_BLUE_WSTETH_ETH_945 = exports.MORPHO_BLUE_WEETH_ETH_945 = exports.MORPHO_BLUE_EZETH_ETH_945 = exports.MORPHO_BLUE_EZETH_ETH_860 = exports.MORPHO_BLUE_RSWETH_ETH_945 = exports.MORPHO_BLUE_RSETH_ETH_945 = exports.MORPHO_BLUE_ETH_USDT_915 = exports.MORPHO_BLUE_USDE_USDTB_915 = exports.MORPHO_BLUE_SUSDE_USDTB_915 = exports.MORPHO_BLUE_SUSDE_USDC_915 = exports.MORPHO_BLUE_CBBTC_USDC_860 = exports.MORPHO_BLUE_CBBTC_ETH_915 = exports.MORPHO_BLUE_TBTC_USDC = exports.MORPHO_BLUE_MKR_DAI_777 = exports.MORPHO_BLUE_MKR_USDC = exports.MORPHO_BLUE_SUSDE_USDT = exports.MORPHO_BLUE_USDE_USDT = exports.MORPHO_BLUE_WSTETH_PYUSD = exports.MORPHO_BLUE_WSTETH_USDA_EXCHANGE_RATE = exports.MORPHO_BLUE_WSTETH_USDT = exports.MORPHO_BLUE_WBTC_ETH = exports.MORPHO_BLUE_WBTC_PYUSD = exports.MORPHO_BLUE_WBTC_USDT = exports.MORPHO_BLUE_ETH_USDC_860 = exports.MORPHO_BLUE_ETH_USDC_915 = exports.MORPHO_BLUE_WBTC_USDC = exports.MORPHO_BLUE_SDAI_USDC = exports.MORPHO_BLUE_WEETH_ETH_860 = exports.MORPHO_BLUE_WSTETH_USDC = void 0;
4
- exports.MORPHO_BLUE_WEETH_ETH_915_BASE = exports.MORPHO_BLUE_CBETH_EURC_860_BASE = exports.MORPHO_BLUE_WETH_EURC_860_BASE = exports.MORPHO_BLUE_CBBTC_EURC_860_BASE = exports.MORPHO_BLUE_WSTETH_EURC_860_BASE = exports.MORPHO_BLUE_LBTC_CBBTC_945_BASE = exports.MORPHO_BLUE_WSUPEROETHB_WETH_915_BASE = exports.MORPHO_BLUE_BSDETH_ETH_860_BASE = exports.MORPHO_BLUE_CBBTC_USDC_860_BASE = exports.MORPHO_BLUE_CBBTC_ETH_915_BASE = exports.MORPHO_BLUE_RETH_ETH_945_BASE = exports.MORPHO_BLUE_RETH_USDC_860_BASE = exports.MORPHO_BLUE_ETH_USDC_860_BASE = exports.MORPHO_BLUE_CBETH_ETH_945_BASE = exports.MORPHO_BLUE_CBETH_ETH_965_BASE = exports.MORPHO_BLUE_WSTETH_USDC_860_BASE = exports.MORPHO_BLUE_WSTETH_USDC_860_BASE_13c42741 = exports.MORPHO_BLUE_WSTETH_ETH_965_BASE = exports.MORPHO_BLUE_WSTETH_ETH_945_BASE = exports.MORPHO_BLUE_CBETH_USDC_860_BASE_1c21c59d = exports.MORPHO_BLUE_CBETH_USDC_860_BASE = exports.MORPHO_BLUE_WBTC_PYUSD_860 = exports.MORPHO_BLUE_WBTC_RLUSD_860 = exports.MORPHO_BLUE_ETH_USDT_860 = exports.MORPHO_BLUE_WEETH_USDT_770 = exports.MORPHO_BLUE_CBBTC_PYUSD_860 = exports.MORPHO_BLUE_SYRUPUSDT_USDT_915 = exports.MORPHO_BLUE_WEETH_USDT_860 = exports.MORPHO_BLUE_CBBTC_ETH_915_12DBF493 = exports.MORPHO_BLUE_WBTC_ETH_915 = exports.MORPHO_BLUE_CBBTC_RLUSD_860 = exports.MORPHO_BLUE_STUSDS_USDC_860 = exports.MORPHO_BLUE_USD3_USDC_915 = exports.MORPHO_BLUE_ETH_USDC_860_94B823E6 = exports.MORPHO_BLUE_WEETH_USDC_770 = exports.MORPHO_BLUE_SYRUPUSDC_RLUSD_915 = exports.MORPHO_BLUE_WSTETH_USDT_860 = exports.MORPHO_BLUE_WBTC_USDT_860 = exports.MORPHO_BLUE_SUSDE_PYUSD_915 = exports.MORPHO_BLUE_LBTC_PYUSD_860 = exports.MORPHO_BLUE_CBBTC_USDT_860 = exports.MORPHO_BLUE_WEETH_PYUSD_860 = exports.MORPHO_BLUE_WEETH_RLUSD_860 = exports.MORPHO_BLUE_CBBTC_USDC_860_BC99DE6A = exports.MORPHO_BLUE_WBTC_USDC_860 = exports.MORPHO_BLUE_SYRUPUSDC_PYUSD_915 = exports.MORPHO_BLUE_WSTETH_USDC_860 = exports.MORPHO_BLUE_KBTC_PYUSD_860 = exports.MORPHO_BLUE_KBTC_RLUSD_860 = exports.MORPHO_BLUE_PRIME_PYUSD_860 = void 0;
5
- exports.findMorphoBlueMarket = exports.MorphoBlueMarkets = exports.MORPHO_BLUE_WBTC_USDT0_860_ARB = exports.MORPHO_BLUE_WSTETH_USDT0_860_ARB = exports.MORPHO_BLUE_ETH_USDT0_860_ARB = exports.MORPHO_BLUE_WEETH_USDT0_860_ARB = exports.MORPHO_BLUE_SUSDS_USDT0_945_ARB = exports.MORPHO_BLUE_WEETH_USDC_860_ARB = exports.MORPHO_BLUE_SUSDS_USDC_945_ARB = exports.MORPHO_BLUE_ETH_USDC_860_ARB = exports.MORPHO_BLUE_WSTETH_USDC_860_ARB = exports.MorphoBlueWBTCUSDC_860_Arb = exports.MORPHO_BLUE_SYRUPUSDC_USDC_915_ARB = exports.MORPHO_BLUE_CBXRP_USDC_625_BASE = exports.MORPHO_BLUE_CBETH_USDC_770_BASE = exports.MORPHO_BLUE_USDE_USDC_915_BASE = exports.MORPHO_BLUE_AERO_USDC_625_BASE = exports.MORPHO_BLUE_EZETH_ETH_777_BASE = exports.MORPHO_BLUE_EZETH_USDC_777_BASE = exports.MORPHO_BLUE_WEETH_ETH_945_BASE = exports.MORPHO_BLUE_WEETH_USDC_777_BASE = void 0;
4
+ exports.MORPHO_BLUE_CBBTC_EURC_860_BASE = exports.MORPHO_BLUE_WSTETH_EURC_860_BASE = exports.MORPHO_BLUE_LBTC_CBBTC_945_BASE = exports.MORPHO_BLUE_WSUPEROETHB_WETH_915_BASE = exports.MORPHO_BLUE_BSDETH_ETH_860_BASE = exports.MORPHO_BLUE_CBBTC_USDC_860_BASE = exports.MORPHO_BLUE_CBBTC_ETH_915_BASE = exports.MORPHO_BLUE_RETH_ETH_945_BASE = exports.MORPHO_BLUE_RETH_USDC_860_BASE = exports.MORPHO_BLUE_ETH_USDC_860_BASE = exports.MORPHO_BLUE_CBETH_ETH_945_BASE = exports.MORPHO_BLUE_CBETH_ETH_965_BASE = exports.MORPHO_BLUE_WSTETH_USDC_860_BASE = exports.MORPHO_BLUE_WSTETH_USDC_860_BASE_13c42741 = exports.MORPHO_BLUE_WSTETH_ETH_965_BASE = exports.MORPHO_BLUE_WSTETH_ETH_945_BASE = exports.MORPHO_BLUE_CBETH_USDC_860_BASE_1c21c59d = exports.MORPHO_BLUE_CBETH_USDC_860_BASE = exports.MORPHO_BLUE_WBTC_PYUSD_860 = exports.MORPHO_BLUE_WBTC_RLUSD_860 = exports.MORPHO_BLUE_ETH_USDT_860 = exports.MORPHO_BLUE_WEETH_USDT_770 = exports.MORPHO_BLUE_CBBTC_PYUSD_860 = exports.MORPHO_BLUE_SYRUPUSDT_USDT_915 = exports.MORPHO_BLUE_WEETH_USDT_860_A6A4C1F1 = exports.MORPHO_BLUE_WEETH_USDT_860 = exports.MORPHO_BLUE_CBBTC_ETH_915_12DBF493 = exports.MORPHO_BLUE_WBTC_ETH_915 = exports.MORPHO_BLUE_CBBTC_RLUSD_860 = exports.MORPHO_BLUE_STUSDS_USDC_860 = exports.MORPHO_BLUE_USD3_USDC_915 = exports.MORPHO_BLUE_ETH_USDC_860_94B823E6 = exports.MORPHO_BLUE_WEETH_USDC_860_85252BB8 = exports.MORPHO_BLUE_WEETH_USDC_860 = exports.MORPHO_BLUE_WEETH_USDC_770 = exports.MORPHO_BLUE_SYRUPUSDC_RLUSD_915 = exports.MORPHO_BLUE_WSTETH_USDT_860 = exports.MORPHO_BLUE_WBTC_USDT_860 = exports.MORPHO_BLUE_SUSDE_PYUSD_915 = exports.MORPHO_BLUE_LBTC_PYUSD_860 = exports.MORPHO_BLUE_CBBTC_USDT_860 = exports.MORPHO_BLUE_WEETH_PYUSD_860 = exports.MORPHO_BLUE_WEETH_RLUSD_860 = exports.MORPHO_BLUE_CBBTC_USDC_860_BC99DE6A = exports.MORPHO_BLUE_WBTC_USDC_860 = exports.MORPHO_BLUE_SYRUPUSDC_PYUSD_915 = exports.MORPHO_BLUE_WSTETH_USDC_860 = exports.MORPHO_BLUE_KBTC_PYUSD_860 = exports.MORPHO_BLUE_KBTC_RLUSD_860 = exports.MORPHO_BLUE_PRIME_PYUSD_860 = void 0;
5
+ exports.findMorphoBlueMarket = exports.MorphoBlueMarkets = exports.MORPHO_BLUE_WBTC_USDT0_860_ARB = exports.MORPHO_BLUE_WSTETH_USDT0_860_ARB = exports.MORPHO_BLUE_ETH_USDT0_860_ARB = exports.MORPHO_BLUE_WEETH_USDT0_860_ARB = exports.MORPHO_BLUE_SUSDS_USDT0_945_ARB = exports.MORPHO_BLUE_WEETH_USDC_860_ARB = exports.MORPHO_BLUE_SUSDS_USDC_945_ARB = exports.MORPHO_BLUE_ETH_USDC_860_ARB = exports.MORPHO_BLUE_WSTETH_USDC_860_ARB = exports.MorphoBlueWBTCUSDC_860_Arb = exports.MORPHO_BLUE_SYRUPUSDC_USDC_915_ARB = exports.MORPHO_BLUE_CBXRP_USDC_625_BASE = exports.MORPHO_BLUE_CBETH_USDC_770_BASE = exports.MORPHO_BLUE_USDE_USDC_915_BASE = exports.MORPHO_BLUE_AERO_USDC_625_BASE = exports.MORPHO_BLUE_EZETH_ETH_777_BASE = exports.MORPHO_BLUE_EZETH_USDC_777_BASE = exports.MORPHO_BLUE_WEETH_ETH_945_BASE = exports.MORPHO_BLUE_WEETH_USDC_777_BASE = exports.MORPHO_BLUE_WEETH_ETH_915_BASE = exports.MORPHO_BLUE_CBETH_EURC_860_BASE = exports.MORPHO_BLUE_WETH_EURC_860_BASE = void 0;
6
6
  const utils_1 = require("../../services/utils");
7
7
  const types_1 = require("../../types");
8
8
  // MAINNET
@@ -1062,6 +1062,38 @@ const MORPHO_BLUE_WEETH_USDC_770 = (networkId = types_1.NetworkNumber.Eth) => ({
1062
1062
  protocolName: 'morpho-blue',
1063
1063
  });
1064
1064
  exports.MORPHO_BLUE_WEETH_USDC_770 = MORPHO_BLUE_WEETH_USDC_770;
1065
+ const MORPHO_BLUE_WEETH_USDC_860 = (networkId = types_1.NetworkNumber.Eth) => ({
1066
+ chainIds: [types_1.NetworkNumber.Eth],
1067
+ label: 'Morpho',
1068
+ shortLabel: 'weETH/USDC',
1069
+ value: types_1.MorphoBlueVersions.MorphoBlueWeEthUSDC_860,
1070
+ url: 'weethusdc-61765602',
1071
+ loanToken: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48',
1072
+ collateralToken: '0xCd5fE23C85820F7B72D0926FC9b05b43E359b7ee',
1073
+ oracle: '0x5635a2F38c5dFd1d8fDB176d9CB5AEFA07bf6A68',
1074
+ oracleType: types_1.MorphoBlueOracleType.MARKET_RATE,
1075
+ irm: '0x870aC11D48B15DB9a138Cf899d20F13F79Ba00BC',
1076
+ lltv: 0.86,
1077
+ marketId: '0x61765602144e91e5ac9f9e98b8584eae308f9951596fd7f5e0f59f21cd2bf664',
1078
+ protocolName: 'morpho-blue',
1079
+ });
1080
+ exports.MORPHO_BLUE_WEETH_USDC_860 = MORPHO_BLUE_WEETH_USDC_860;
1081
+ const MORPHO_BLUE_WEETH_USDC_860_85252BB8 = (networkId = types_1.NetworkNumber.Eth) => ({
1082
+ chainIds: [types_1.NetworkNumber.Eth],
1083
+ label: 'Morpho',
1084
+ shortLabel: 'weETH/USDC',
1085
+ value: types_1.MorphoBlueVersions.MorphoBlueWeEthUSDC_860_85252bb8,
1086
+ url: 'weethusdc-85252bb8',
1087
+ loanToken: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48',
1088
+ collateralToken: '0xCd5fE23C85820F7B72D0926FC9b05b43E359b7ee',
1089
+ oracle: '0xa3A7A3ceFee206f9d7Fe00eC3C83324ED4228411',
1090
+ oracleType: types_1.MorphoBlueOracleType.MARKET_RATE,
1091
+ irm: '0x870aC11D48B15DB9a138Cf899d20F13F79Ba00BC',
1092
+ lltv: 0.86,
1093
+ marketId: '0x85252bb8485c99bba46fe149c7dd2aad83672640f53c630890673cf1848ba16e',
1094
+ protocolName: 'morpho-blue',
1095
+ });
1096
+ exports.MORPHO_BLUE_WEETH_USDC_860_85252BB8 = MORPHO_BLUE_WEETH_USDC_860_85252BB8;
1065
1097
  const MORPHO_BLUE_ETH_USDC_860_94B823E6 = (networkId = types_1.NetworkNumber.Eth) => ({
1066
1098
  chainIds: [types_1.NetworkNumber.Eth],
1067
1099
  label: 'Morpho',
@@ -1174,6 +1206,22 @@ const MORPHO_BLUE_WEETH_USDT_860 = (networkId = types_1.NetworkNumber.Eth) => ({
1174
1206
  protocolName: 'morpho-blue',
1175
1207
  });
1176
1208
  exports.MORPHO_BLUE_WEETH_USDT_860 = MORPHO_BLUE_WEETH_USDT_860;
1209
+ const MORPHO_BLUE_WEETH_USDT_860_A6A4C1F1 = (networkId = types_1.NetworkNumber.Eth) => ({
1210
+ chainIds: [types_1.NetworkNumber.Eth],
1211
+ label: 'Morpho',
1212
+ shortLabel: 'weETH/USDT',
1213
+ value: types_1.MorphoBlueVersions.MorphoBlueWeEthUSDT_860_a6a4c1f1,
1214
+ url: 'weethusdt-a6a4c1f1',
1215
+ loanToken: '0xdAC17F958D2ee523a2206206994597C13D831ec7',
1216
+ collateralToken: '0xCd5fE23C85820F7B72D0926FC9b05b43E359b7ee',
1217
+ oracle: '0xa3A7A3ceFee206f9d7Fe00eC3C83324ED4228411',
1218
+ oracleType: types_1.MorphoBlueOracleType.MARKET_RATE,
1219
+ irm: '0x870aC11D48B15DB9a138Cf899d20F13F79Ba00BC',
1220
+ lltv: 0.86,
1221
+ marketId: '0xa6a4c1f15490a1ff39d9de3a366b408dd5647a436d8b179726d3e0562aff1292',
1222
+ protocolName: 'morpho-blue',
1223
+ });
1224
+ exports.MORPHO_BLUE_WEETH_USDT_860_A6A4C1F1 = MORPHO_BLUE_WEETH_USDT_860_A6A4C1F1;
1177
1225
  const MORPHO_BLUE_SYRUPUSDT_USDT_915 = (networkId = types_1.NetworkNumber.Eth) => ({
1178
1226
  chainIds: [types_1.NetworkNumber.Eth],
1179
1227
  label: 'Morpho',
@@ -1980,6 +2028,8 @@ const MorphoBlueMarkets = (networkId) => ({
1980
2028
  [types_1.MorphoBlueVersions.MorphoBlueWstEthUSDT_860]: (0, exports.MORPHO_BLUE_WSTETH_USDT_860)(networkId),
1981
2029
  [types_1.MorphoBlueVersions.MorphoBlueSyrupUSDCRLUSD_915]: (0, exports.MORPHO_BLUE_SYRUPUSDC_RLUSD_915)(networkId),
1982
2030
  [types_1.MorphoBlueVersions.MorphoBlueWeEthUSDC_770]: (0, exports.MORPHO_BLUE_WEETH_USDC_770)(networkId),
2031
+ [types_1.MorphoBlueVersions.MorphoBlueWeEthUSDC_860]: (0, exports.MORPHO_BLUE_WEETH_USDC_860)(networkId),
2032
+ [types_1.MorphoBlueVersions.MorphoBlueWeEthUSDC_860_85252bb8]: (0, exports.MORPHO_BLUE_WEETH_USDC_860_85252BB8)(networkId),
1983
2033
  [types_1.MorphoBlueVersions.MorphoBlueEthUSDC_860_94b823e6]: (0, exports.MORPHO_BLUE_ETH_USDC_860_94B823E6)(networkId),
1984
2034
  [types_1.MorphoBlueVersions.MorphoBlueUSD3USDC_915]: (0, exports.MORPHO_BLUE_USD3_USDC_915)(networkId),
1985
2035
  [types_1.MorphoBlueVersions.MorphoBlueStUSDSUSDC_860]: (0, exports.MORPHO_BLUE_STUSDS_USDC_860)(networkId),
@@ -1987,6 +2037,7 @@ const MorphoBlueMarkets = (networkId) => ({
1987
2037
  [types_1.MorphoBlueVersions.MorphoBlueWBTCEth_915]: (0, exports.MORPHO_BLUE_WBTC_ETH_915)(networkId),
1988
2038
  [types_1.MorphoBlueVersions.MorphoBlueCbBTCEth_915_12dbf493]: (0, exports.MORPHO_BLUE_CBBTC_ETH_915_12DBF493)(networkId),
1989
2039
  [types_1.MorphoBlueVersions.MorphoBlueWeEthUSDT_860]: (0, exports.MORPHO_BLUE_WEETH_USDT_860)(networkId),
2040
+ [types_1.MorphoBlueVersions.MorphoBlueWeEthUSDT_860_a6a4c1f1]: (0, exports.MORPHO_BLUE_WEETH_USDT_860_A6A4C1F1)(networkId),
1990
2041
  [types_1.MorphoBlueVersions.MorphoBlueSyrupUSDTUSDT_915]: (0, exports.MORPHO_BLUE_SYRUPUSDT_USDT_915)(networkId),
1991
2042
  [types_1.MorphoBlueVersions.MorphoBlueCbBTCPYUSD_860]: (0, exports.MORPHO_BLUE_CBBTC_PYUSD_860)(networkId),
1992
2043
  [types_1.MorphoBlueVersions.MorphoBlueWeEthUSDT_770]: (0, exports.MORPHO_BLUE_WEETH_USDT_770)(networkId),
@@ -7,7 +7,7 @@ import { EthAddress, EthereumProvider, NetworkNumber } from '../types/common';
7
7
  * Uses one shared, multicall-batched viem client (same pattern as getPortfolioData) so all
8
8
  * per-market reads collapse into a handful of RPC round trips.
9
9
  *
10
- * Not covered: Maker, Liquity, Liquity V2, Fluid, Euler V2 — these already expose cheap,
10
+ * Not covered: Maker, Liquity, Liquity V2, Fluid — these already expose cheap,
11
11
  * user-scoped discovery entry points elsewhere in the SDK (e.g. _getUserCdps, _getUserPositionsPortfolio).
12
12
  */
13
13
  export declare function getUserPositionsExistence(provider: EthereumProvider, network: NetworkNumber, address: EthAddress, isSim?: boolean): Promise<Record<string, boolean>>;
@@ -35,7 +35,7 @@ const hasAnyBalance = (balances) => ([balances.collateral, balances.debt].some((
35
35
  * Uses one shared, multicall-batched viem client (same pattern as getPortfolioData) so all
36
36
  * per-market reads collapse into a handful of RPC round trips.
37
37
  *
38
- * Not covered: Maker, Liquity, Liquity V2, Fluid, Euler V2 — these already expose cheap,
38
+ * Not covered: Maker, Liquity, Liquity V2, Fluid — these already expose cheap,
39
39
  * user-scoped discovery entry points elsewhere in the SDK (e.g. _getUserCdps, _getUserPositionsPortfolio).
40
40
  */
41
41
  function getUserPositionsExistence(provider_1, network_1, address_1) {
@@ -35,7 +35,6 @@ const morphoMidnight_1 = require("../morphoMidnight");
35
35
  const types_1 = require("../types");
36
36
  const compoundV3_1 = require("../compoundV3");
37
37
  const spark_1 = require("../spark");
38
- const eulerV2_1 = require("../eulerV2");
39
38
  const curveUsd_1 = require("../curveUsd");
40
39
  const llamaLend_1 = require("../llamaLend");
41
40
  const aaveV3_1 = require("../aaveV3");
@@ -47,7 +46,6 @@ const viem_1 = require("../services/viem");
47
46
  const liquity_1 = require("../liquity");
48
47
  const liquityV2_1 = require("../liquityV2");
49
48
  const fluid_1 = require("../fluid");
50
- const eulerHelpers_1 = require("../helpers/eulerHelpers");
51
49
  const umbrella_1 = require("../umbrella");
52
50
  const aaveV3_2 = require("../claiming/aaveV3");
53
51
  const compV3_1 = require("../claiming/compV3");
@@ -64,7 +62,6 @@ function getPortfolioData(provider_1, network_1, defaultProvider_1, addresses_1)
64
62
  const morphoMidnightMarkets = Object.values((0, markets_1.MorphoMidnightMarkets)(network)).filter((market) => market.chainIds.includes(network));
65
63
  const compoundV3Markets = Object.values((0, markets_1.CompoundMarkets)(network)).filter((market) => market.chainIds.includes(network) && market.value !== types_1.CompoundVersions.CompoundV2);
66
64
  const sparkMarkets = Object.values((0, markets_1.SparkMarkets)(network)).filter((market) => market.chainIds.includes(network));
67
- const eulerV2Markets = Object.values((0, markets_1.EulerV2Markets)(network)).filter((market) => market.chainIds.includes(network));
68
65
  const aaveV3Markets = [types_1.AaveVersions.AaveV3, types_1.AaveVersions.AaveV3Lido, types_1.AaveVersions.AaveV3Etherfi].map((version) => (0, markets_1.AaveMarkets)(network)[version]).filter((market) => market.chainIds.includes(network));
69
66
  const aaveV2Markets = [types_1.AaveVersions.AaveV2].map((version) => (0, markets_1.AaveMarkets)(network)[version]).filter((market) => market.chainIds.includes(network));
70
67
  const compoundV2Markets = [types_1.CompoundVersions.CompoundV2].map((version) => (0, markets_1.CompoundMarkets)(network)[version]).filter((market) => market.chainIds.includes(network));
@@ -80,7 +77,6 @@ function getPortfolioData(provider_1, network_1, defaultProvider_1, addresses_1)
80
77
  const morphoMidnightMarketsData = {};
81
78
  const compoundV3MarketsData = {};
82
79
  const sparkMarketsData = {};
83
- const eulerV2MarketsData = {};
84
80
  const aaveV3MarketsData = {};
85
81
  const makerCdps = {};
86
82
  const aaveV2MarketsData = {};
@@ -94,7 +90,6 @@ function getPortfolioData(provider_1, network_1, defaultProvider_1, addresses_1)
94
90
  morphoMidnightMarketsData,
95
91
  compoundV3MarketsData,
96
92
  sparkMarketsData,
97
- eulerV2MarketsData,
98
93
  aaveV3MarketsData,
99
94
  aaveV2MarketsData,
100
95
  compoundV2MarketsData,
@@ -115,7 +110,6 @@ function getPortfolioData(provider_1, network_1, defaultProvider_1, addresses_1)
115
110
  morphoMidnight: {},
116
111
  compoundV3: {},
117
112
  spark: {},
118
- eulerV2: {},
119
113
  maker: {},
120
114
  aaveV2: {},
121
115
  compoundV2: {},
@@ -173,10 +167,6 @@ function getPortfolioData(provider_1, network_1, defaultProvider_1, addresses_1)
173
167
  const marketData = yield (0, spark_1._getSparkMarketsData)(client, network, market);
174
168
  sparkMarketsData[market.value] = marketData;
175
169
  })),
176
- ...eulerV2Markets.map((market) => __awaiter(this, void 0, void 0, function* () {
177
- const marketData = yield (0, eulerV2_1._getEulerV2MarketsData)(client, network, market);
178
- eulerV2MarketsData[market.value] = marketData;
179
- })),
180
170
  ...aaveV3Markets.map((market) => __awaiter(this, void 0, void 0, function* () {
181
171
  const marketData = yield (0, aaveV3_1._getAaveV3MarketData)(client, network, market);
182
172
  aaveV3MarketsData[market.value] = marketData;
@@ -559,28 +549,6 @@ function getPortfolioData(provider_1, network_1, defaultProvider_1, addresses_1)
559
549
  positions[address.toLowerCase()].spark[market.value] = { error: `Error fetching Spark account data for address ${address} on market ${market.value}`, data: null };
560
550
  }
561
551
  }))).flat(),
562
- ...eulerV2Markets.map((market) => addresses.map((address) => {
563
- const eulerV2SubAccounts = (0, eulerHelpers_1.getEulerV2SubAccounts)(address);
564
- const eulerV2Addresses = [address, ...eulerV2SubAccounts];
565
- return Promise.all(eulerV2Addresses.map((eulerAddress) => __awaiter(this, void 0, void 0, function* () {
566
- try {
567
- const accData = yield (0, eulerV2_1._getEulerV2AccountData)(client, network, eulerAddress, eulerAddress, Object.assign({ selectedMarket: market }, eulerV2MarketsData[market.value]));
568
- if (new decimal_js_1.default(accData.suppliedUsd).gt(0) || new decimal_js_1.default(accData.borrowedUsd).gt(0)) {
569
- if (!positions[address.toLowerCase()].eulerV2[market.value]) {
570
- positions[address.toLowerCase()].eulerV2[market.value] = {};
571
- }
572
- positions[address.toLowerCase()].eulerV2[market.value][eulerAddress.toLowerCase()] = { error: '', data: accData };
573
- }
574
- }
575
- catch (error) {
576
- console.error(`Error fetching EulerV2 account data for address ${eulerAddress} on market ${market.value}:`, error);
577
- if (!positions[address.toLowerCase()].eulerV2[market.value]) {
578
- positions[address.toLowerCase()].eulerV2[market.value] = {};
579
- }
580
- positions[address.toLowerCase()].eulerV2[market.value][eulerAddress.toLowerCase()] = { error: `Error fetching EulerV2 account data for address ${eulerAddress} on market ${market.value}`, data: null };
581
- }
582
- })));
583
- }).flat()).flat(),
584
552
  ...addresses.map((address) => __awaiter(this, void 0, void 0, function* () {
585
553
  var _a;
586
554
  return (_a = makerCdps[address.toLowerCase()]) === null || _a === void 0 ? void 0 : _a.map((cdpInfo) => __awaiter(this, void 0, void 0, function* () {
@@ -8,6 +8,7 @@ export declare const getAbiItem: (abi: any, methodName: string) => any;
8
8
  export declare const ADDRESS_REGEX: RegExp;
9
9
  export declare const isAddress: (address: string) => boolean;
10
10
  export declare const compareAddresses: (addr1?: string, addr2?: string) => boolean;
11
+ export declare const shortenAddress: (address?: string, start?: number, end?: number) => string;
11
12
  export declare const getWeiAmountForDecimals: (amount: string | number, decimals: number) => string;
12
13
  export declare const getEthAmountForDecimals: (amount: string | number, decimals: string | number) => string;
13
14
  export declare const handleWbtcLegacy: (asset: string) => string;
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.getNativeAssetFromWrapped = exports.getWrappedNativeAssetFromUnwrapped = exports.wxplToXpl = exports.xplToWxpl = exports.ethToWethByAddress = exports.wethToEthByAddress = exports.wethToEth = exports.ethToWeth = exports.convertHybridArraysToObjects = exports.LONGER_TIMEOUT = exports.DEFAULT_TIMEOUT = exports.isMainnetNetwork = exports.isMaxUint = exports.MAXUINT = exports.isEnabledOnBitmap = exports.mapRange = exports.bytesToString = exports.handleWbtcLegacy = exports.getEthAmountForDecimals = exports.getWeiAmountForDecimals = exports.compareAddresses = exports.isAddress = exports.ADDRESS_REGEX = exports.getAbiItem = exports.wstEthToStEth = exports.stEthToWstEth = exports.addToArrayIf = exports.addToObjectIf = exports.isLayer2Network = void 0;
6
+ exports.getNativeAssetFromWrapped = exports.getWrappedNativeAssetFromUnwrapped = exports.wxplToXpl = exports.xplToWxpl = exports.ethToWethByAddress = exports.wethToEthByAddress = exports.wethToEth = exports.ethToWeth = exports.convertHybridArraysToObjects = exports.LONGER_TIMEOUT = exports.DEFAULT_TIMEOUT = exports.isMainnetNetwork = exports.isMaxUint = exports.MAXUINT = exports.isEnabledOnBitmap = exports.mapRange = exports.bytesToString = exports.handleWbtcLegacy = exports.getEthAmountForDecimals = exports.getWeiAmountForDecimals = exports.shortenAddress = exports.compareAddresses = exports.isAddress = exports.ADDRESS_REGEX = exports.getAbiItem = exports.wstEthToStEth = exports.stEthToWstEth = exports.addToArrayIf = exports.addToObjectIf = exports.isLayer2Network = void 0;
7
7
  const decimal_js_1 = __importDefault(require("decimal.js"));
8
8
  const tokens_1 = require("@defisaver/tokens");
9
9
  const common_1 = require("../types/common");
@@ -24,6 +24,8 @@ const isAddress = (address) => typeof address === 'string' && (new RegExp(export
24
24
  exports.isAddress = isAddress;
25
25
  const compareAddresses = (addr1 = '', addr2 = '') => addr1.toLowerCase() === addr2.toLowerCase();
26
26
  exports.compareAddresses = compareAddresses;
27
+ const shortenAddress = (address = '', start = 8, end = 4) => `${address.substring(0, start)}...${address.slice(-end)}`;
28
+ exports.shortenAddress = shortenAddress;
27
29
  const getWeiAmountForDecimals = (amount, decimals) => new decimal_js_1.default(amount).mul(Math.pow(10, decimals)).floor().toString();
28
30
  exports.getWeiAmountForDecimals = getWeiAmountForDecimals;
29
31
  const getEthAmountForDecimals = (amount, decimals) => new decimal_js_1.default(amount).div(Math.pow(10, +decimals)).toString();
@@ -191,9 +191,8 @@ const calculateInterestEarned = (principal, interest, type, apy = false) => {
191
191
  exports.calculateInterestEarned = calculateInterestEarned;
192
192
  const calculateNetApy = ({ usedAssets, assetsData, optionalData, }) => {
193
193
  const sumValues = Object.values(usedAssets).reduce((_acc, usedAsset) => {
194
- var _a;
195
194
  const acc = Object.assign({}, _acc);
196
- const assetData = assetsData[usedAsset.symbol] || assetsData[((_a = usedAsset.vaultAddress) === null || _a === void 0 ? void 0 : _a.toLowerCase()) || ''];
195
+ const assetData = assetsData[usedAsset.symbol];
197
196
  if (usedAsset.isSupplied) {
198
197
  const amount = usedAsset.suppliedUsd;
199
198
  acc.suppliedUsd = new decimal_js_1.default(acc.suppliedUsd).add(amount).toString();
@@ -44,6 +44,11 @@ export interface AaveV4SpokeInfo {
44
44
  value: AaveV4SpokesType;
45
45
  url: string;
46
46
  address: EthAddress;
47
+ /**
48
+ * Known hub addresses, used only to prefetch hub data in parallel with the spoke data.
49
+ * The on-chain reserves are the source of truth — hubs found there but missing here are
50
+ * fetched dynamically, so this list going stale can't break spoke loading.
51
+ */
47
52
  hubs: EthAddress[];
48
53
  }
49
54
  export interface AaveV4SpokeData {
@@ -2,6 +2,10 @@ export declare enum IncentiveKind {
2
2
  Staking = "staking",
3
3
  Reward = "reward"
4
4
  }
5
+ export declare enum IncentiveSide {
6
+ Supply = "supply",
7
+ Borrow = "borrow"
8
+ }
5
9
  export declare enum IncentiveEligibilityId {
6
10
  AaveV3EthenaLiquidLeverage = "0x0dC599DBB180E64E42b87332FDeC3a551445ea44BORROW_BL",
7
11
  AaveV3ArbitrumEthSupply = "0x5d16261c6715a653248269861bbacf68a9774cde",
@@ -1,11 +1,16 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.NetworkNumber = exports.LeverageType = exports.IncentiveEligibilityId = exports.IncentiveKind = void 0;
3
+ exports.NetworkNumber = exports.LeverageType = exports.IncentiveEligibilityId = exports.IncentiveSide = exports.IncentiveKind = void 0;
4
4
  var IncentiveKind;
5
5
  (function (IncentiveKind) {
6
6
  IncentiveKind["Staking"] = "staking";
7
7
  IncentiveKind["Reward"] = "reward";
8
8
  })(IncentiveKind || (exports.IncentiveKind = IncentiveKind = {}));
9
+ var IncentiveSide;
10
+ (function (IncentiveSide) {
11
+ IncentiveSide["Supply"] = "supply";
12
+ IncentiveSide["Borrow"] = "borrow";
13
+ })(IncentiveSide || (exports.IncentiveSide = IncentiveSide = {}));
9
14
  var IncentiveEligibilityId;
10
15
  (function (IncentiveEligibilityId) {
11
16
  IncentiveEligibilityId["AaveV3EthenaLiquidLeverage"] = "0x0dC599DBB180E64E42b87332FDeC3a551445ea44BORROW_BL";
@@ -8,7 +8,6 @@ export * from './maker';
8
8
  export * from './morphoBlue';
9
9
  export * from './morphoMidnight';
10
10
  export * from './llamaLend';
11
- export * from './euler';
12
11
  export * from './fluid';
13
12
  export * from './portfolio';
14
13
  export * from './merit';
@@ -24,7 +24,6 @@ __exportStar(require("./maker"), exports);
24
24
  __exportStar(require("./morphoBlue"), exports);
25
25
  __exportStar(require("./morphoMidnight"), exports);
26
26
  __exportStar(require("./llamaLend"), exports);
27
- __exportStar(require("./euler"), exports);
28
27
  __exportStar(require("./fluid"), exports);
29
28
  __exportStar(require("./portfolio"), exports);
30
29
  __exportStar(require("./merit"), exports);
@@ -1,4 +1,4 @@
1
- import { EthAddress, IncentiveData } from './common';
1
+ import { EthAddress, IncentiveData, IncentiveSide } from './common';
2
2
  export declare enum OpportunityAction {
3
3
  LEND = "LEND",
4
4
  BORROW = "BORROW"
@@ -74,12 +74,11 @@ export type MerkleRewardMap = Record<EthAddress, {
74
74
  borrow?: MerkleRewardInfo;
75
75
  }>;
76
76
  export type AaveV4MerklScopedReward = {
77
- supply?: IncentiveData;
78
- borrow?: IncentiveData;
77
+ [side in IncentiveSide]?: IncentiveData;
79
78
  };
80
79
  /**
81
80
  * Aave V4 Merkl reward campaigns split by scope:
82
- * - `hub`: keyed by underlying token address (lowercase) — rewards for supplying to a hub
81
+ * - `hub`: keyed by `${hubAddress}_${underlyingAddress}` (both lowercase) — rewards for supplying/borrowing via a hub
83
82
  * - `spoke`: keyed by `${spokeAddress}_${underlyingAddress}` (both lowercase) — rewards for supplying/borrowing on a spoke
84
83
  */
85
84
  export type AaveV4MerklRewardMap = {
@@ -66,6 +66,8 @@ export declare enum MorphoBlueVersions {
66
66
  MorphoBlueWstEthUSDT_860 = "morphobluewstethusdt_860",// wstETH/USDT 0.86
67
67
  MorphoBlueSyrupUSDCRLUSD_915 = "morphobluesyrupusdcrlusd_915",// syrupUSDC/RLUSD 0.915
68
68
  MorphoBlueWeEthUSDC_770 = "morphoblueweethusdc_770",// weETH/USDC 0.77
69
+ MorphoBlueWeEthUSDC_860 = "morphoblueweethusdc_860",// weETH/USDC 0.86
70
+ MorphoBlueWeEthUSDC_860_85252bb8 = "morphoblueweethusdc_860_85252bb8",// weETH/USDC 0.86
69
71
  MorphoBlueEthUSDC_860_94b823e6 = "morphoblueethusdc_860_94b823e6",// ETH/USDC 0.86
70
72
  MorphoBlueUSD3USDC_915 = "morphoblueusd3usdc_915",// USD3/USDC 0.915
71
73
  MorphoBlueStUSDSUSDC_860 = "morphobluestusdsusdc_860",// stUSDS/USDC 0.86
@@ -73,6 +75,7 @@ export declare enum MorphoBlueVersions {
73
75
  MorphoBlueWBTCEth_915 = "morphobluewbtceth_915",// WBTC/ETH 0.915
74
76
  MorphoBlueCbBTCEth_915_12dbf493 = "morphobluecbbtceth_915_12dbf493",// cbBTC/ETH 0.915
75
77
  MorphoBlueWeEthUSDT_860 = "morphoblueweethusdt_860",// weETH/USDT 0.86
78
+ MorphoBlueWeEthUSDT_860_a6a4c1f1 = "morphoblueweethusdt_860_a6a4c1f1",// weETH/USDT 0.86
76
79
  MorphoBlueSyrupUSDTUSDT_915 = "morphobluesyrupusdtusdt_915",// syrupUSDT/USDT 0.915
77
80
  MorphoBlueCbBTCPYUSD_860 = "morphobluecbbtcpyusd_860",// cbBTC/PYUSD 0.86
78
81
  MorphoBlueWeEthUSDT_770 = "morphoblueweethusdt_770",// weETH/USDT 0.77
@@ -75,6 +75,8 @@ var MorphoBlueVersions;
75
75
  MorphoBlueVersions["MorphoBlueWstEthUSDT_860"] = "morphobluewstethusdt_860";
76
76
  MorphoBlueVersions["MorphoBlueSyrupUSDCRLUSD_915"] = "morphobluesyrupusdcrlusd_915";
77
77
  MorphoBlueVersions["MorphoBlueWeEthUSDC_770"] = "morphoblueweethusdc_770";
78
+ MorphoBlueVersions["MorphoBlueWeEthUSDC_860"] = "morphoblueweethusdc_860";
79
+ MorphoBlueVersions["MorphoBlueWeEthUSDC_860_85252bb8"] = "morphoblueweethusdc_860_85252bb8";
78
80
  MorphoBlueVersions["MorphoBlueEthUSDC_860_94b823e6"] = "morphoblueethusdc_860_94b823e6";
79
81
  MorphoBlueVersions["MorphoBlueUSD3USDC_915"] = "morphoblueusd3usdc_915";
80
82
  MorphoBlueVersions["MorphoBlueStUSDSUSDC_860"] = "morphobluestusdsusdc_860";
@@ -82,6 +84,7 @@ var MorphoBlueVersions;
82
84
  MorphoBlueVersions["MorphoBlueWBTCEth_915"] = "morphobluewbtceth_915";
83
85
  MorphoBlueVersions["MorphoBlueCbBTCEth_915_12dbf493"] = "morphobluecbbtceth_915_12dbf493";
84
86
  MorphoBlueVersions["MorphoBlueWeEthUSDT_860"] = "morphoblueweethusdt_860";
87
+ MorphoBlueVersions["MorphoBlueWeEthUSDT_860_a6a4c1f1"] = "morphoblueweethusdt_860_a6a4c1f1";
85
88
  MorphoBlueVersions["MorphoBlueSyrupUSDTUSDT_915"] = "morphobluesyrupusdtusdt_915";
86
89
  MorphoBlueVersions["MorphoBlueCbBTCPYUSD_860"] = "morphobluecbbtcpyusd_860";
87
90
  MorphoBlueVersions["MorphoBlueWeEthUSDT_770"] = "morphoblueweethusdt_770";
@@ -3,7 +3,6 @@ import { AaveV4AccountData, AaveV4SpokesType } from './aaveV4';
3
3
  import { EthAddress } from './common';
4
4
  import { CompoundV2PositionData, CompoundV3PositionData, CompoundVersions } from './compound';
5
5
  import { CrvUSDUserData, CrvUSDVersions } from './curveUsd';
6
- import { EulerV2PositionData, EulerV2Versions } from './euler';
7
6
  import { FluidVaultData } from './fluid';
8
7
  import { LiquityTroveInfo } from './liquity';
9
8
  import { LlamaLendUserData, LlamaLendVersionsType } from './llamaLend';
@@ -31,9 +30,6 @@ export interface PortfolioPositionsDataForAddress {
31
30
  spark: {
32
31
  [key in SparkVersions]?: PortfolioProtocolData<SparkPositionData>;
33
32
  };
34
- eulerV2: {
35
- [key in EulerV2Versions]?: Record<EthAddress, PortfolioProtocolData<EulerV2PositionData>>;
36
- };
37
33
  maker: {
38
34
  [key: string]: PortfolioProtocolData<CdpData>;
39
35
  };
@@ -13,7 +13,7 @@ import { getViemProvider } from '../services/viem';
13
13
  import { IncentiveKind, } from '../types';
14
14
  import { AaveV4ViewContractViem } from '../contracts';
15
15
  import { getStakingApy, STAKING_ASSETS } from '../staking';
16
- import { isMaxUint, wethToEth, wethToEthByAddress } from '../services/utils';
16
+ import { isMaxUint, shortenAddress, wethToEth, wethToEthByAddress, } from '../services/utils';
17
17
  import { aaveV4GetAggregatedPositionData, calcUserRiskPremiumBps } from '../helpers/aaveV4Helpers';
18
18
  import { findAaveV4SpokeByAddress, getAaveV4HubByAddress } from '../markets/aaveV4';
19
19
  import { aprToApy } from '../moneymarket';
@@ -39,16 +39,16 @@ const fetchHubData = (viewContract, hubAddress) => __awaiter(void 0, void 0, voi
39
39
  };
40
40
  });
41
41
  const formatReserveAsset = (reserveAsset, hubAsset, reserveId, oracleDecimals, network) => __awaiter(void 0, void 0, void 0, function* () {
42
- var _a, _b, _c, _d, _e, _f;
42
+ var _a, _b, _c, _d, _e, _f, _g, _h;
43
43
  const assetInfo = getAssetInfoByAddress(reserveAsset.underlying, network);
44
44
  // `@defisaver/tokens` returns a placeholder ('?', decimals NaN) when the underlying is not in the
45
45
  // tokens package. Flag it so consumers can render it read-only instead of feeding NaN into amounts.
46
46
  const isUnsupported = assetInfo.symbol === '?';
47
47
  const symbol = wethToEth(assetInfo.symbol);
48
+ // The hub registry only provides display metadata — a hub missing from it (newly deployed by
49
+ // Aave, SDK not yet updated) must not prevent the reserve from loading, so fall back to a
50
+ // generated label instead of failing.
48
51
  const hubInfo = getAaveV4HubByAddress(network, reserveAsset.hub);
49
- if (!hubInfo) {
50
- throw new Error(`Hub not found with address: ${reserveAsset.hub}`);
51
- }
52
52
  const isStakingAsset = STAKING_ASSETS.includes(symbol);
53
53
  const supplyIncentives = [];
54
54
  const borrowIncentives = [];
@@ -108,8 +108,8 @@ const formatReserveAsset = (reserveAsset, hubAsset, reserveId, oracleDecimals, n
108
108
  decimals: reserveAsset.decimals,
109
109
  isUnsupported,
110
110
  underlying: reserveAsset.underlying,
111
- hub: hubInfo.address,
112
- hubName: hubInfo === null || hubInfo === void 0 ? void 0 : hubInfo.label,
111
+ hub: (_g = hubInfo === null || hubInfo === void 0 ? void 0 : hubInfo.address) !== null && _g !== void 0 ? _g : reserveAsset.hub,
112
+ hubName: (_h = hubInfo === null || hubInfo === void 0 ? void 0 : hubInfo.label) !== null && _h !== void 0 ? _h : `Hub ${shortenAddress(reserveAsset.hub)}`,
113
113
  assetId: reserveAsset.assetId,
114
114
  reserveId,
115
115
  paused: reserveAsset.paused,
@@ -147,14 +147,30 @@ export function _getAaveV4SpokeData(provider_1, network_1, market_1) {
147
147
  return __awaiter(this, arguments, void 0, function* (provider, network, market, blockNumber = 'latest') {
148
148
  const viewContract = AaveV4ViewContractViem(provider, network, blockNumber);
149
149
  const hubsData = {};
150
+ const loadHubData = (hubAddress) => __awaiter(this, void 0, void 0, function* () {
151
+ hubsData[hubAddress.toLowerCase()] = yield fetchHubData(viewContract, hubAddress);
152
+ });
153
+ // market.hubs is only a prefetch hint (lets known hubs load in parallel with the spoke data), so
154
+ // failures are tolerated here — any hub the reserves actually reference is (re)fetched below.
150
155
  const [spokeData, merklCampaigns] = yield Promise.all([
151
156
  viewContract.read.getSpokeDataFull([market.address]),
152
157
  getAaveV4MerkleCampaigns(network),
153
- ...market.hubs.map((hubAddress) => __awaiter(this, void 0, void 0, function* () {
154
- hubsData[hubAddress] = yield fetchHubData(viewContract, hubAddress);
155
- })),
158
+ ...market.hubs.map((hubAddress) => loadHubData(hubAddress).catch(() => { })),
156
159
  ]);
157
- const reserveAssetsArray = yield Promise.all(spokeData[1].map((reserveAssetOnChain, index) => __awaiter(this, void 0, void 0, function* () { return formatReserveAsset(reserveAssetOnChain, hubsData[reserveAssetOnChain.hub].assets[reserveAssetOnChain.assetId], index, +spokeData[0].oracleDecimals.toString(), network); })));
160
+ // The on-chain reserves are the source of truth for which hubs the spoke uses — fetch any hub
161
+ // the prefetch didn't cover, so an asset listed from a hub unknown to the SDK can't break the spoke.
162
+ const missingHubs = [...new Set(spokeData[1].map((reserveAsset) => reserveAsset.hub.toLowerCase()))]
163
+ .filter((hubAddress) => !hubsData[hubAddress]);
164
+ yield Promise.all(missingHubs.map(loadHubData));
165
+ const reserveAssetsArray = (yield Promise.all(spokeData[1].map((reserveAssetOnChain, index) => __awaiter(this, void 0, void 0, function* () {
166
+ var _a;
167
+ const hubAsset = (_a = hubsData[reserveAssetOnChain.hub.toLowerCase()]) === null || _a === void 0 ? void 0 : _a.assets[reserveAssetOnChain.assetId];
168
+ // A reserve whose hub-side asset data can't be resolved is skipped instead of failing the
169
+ // whole spoke (position math degrades for that one asset only).
170
+ if (!hubAsset)
171
+ return null;
172
+ return formatReserveAsset(reserveAssetOnChain, hubAsset, index, +spokeData[0].oracleDecimals.toString(), network);
173
+ })))).filter((asset) => asset !== null);
158
174
  const enrichedAssets = reserveAssetsArray.map((asset) => attachAaveV4MerklIncentives(asset, market.address, merklCampaigns));
159
175
  return {
160
176
  assetsData: enrichedAssets.reduce((acc, reserveAsset) => {
@@ -1,4 +1,5 @@
1
- import { AaveV4MerklRewardMap, AaveV4ReserveAssetData, NetworkNumber } from '../types';
1
+ import { AaveV4MerklRewardMap, AaveV4ReserveAssetData, MerklOpportunity, NetworkNumber } from '../types';
2
+ export declare const buildAaveV4MerklRewardMap: (opportunities: MerklOpportunity[], chainId: NetworkNumber) => AaveV4MerklRewardMap;
2
3
  export declare const getAaveV4MerkleCampaigns: (chainId: NetworkNumber) => Promise<AaveV4MerklRewardMap>;
3
4
  /**
4
5
  * Returns a copy of the asset with scope-specific incentive arrays pre-combined with the asset's
@@ -9,14 +9,17 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
9
9
  };
10
10
  import { aprToApy } from '../moneymarket';
11
11
  import { LONGER_TIMEOUT } from '../services/utils';
12
- import { IncentiveKind, OpportunityAction, OpportunityStatus, } from '../types';
12
+ import { IncentiveKind, IncentiveSide, OpportunityAction, OpportunityStatus, } from '../types';
13
13
  /**
14
14
  * Merkl tags Aave V4 reward campaigns by scope via the `type` field:
15
- * - AAVE_V4_HUB_SUPPLY / AAVE_V4_HUB_BORROW → reward tied to a hub (matched per underlying token)
15
+ * - AAVE_V4_HUB_SUPPLY / AAVE_V4_HUB_BORROW → reward tied to a hub (matched per hub contract + underlying)
16
16
  * - AAVE_V4_SPOKE_SUPPLY / AAVE_V4_SPOKE_BORROW → reward tied to a spoke (matched per spoke contract + underlying)
17
- * Hub campaigns identify the underlying via `tokens[0]`; spoke campaigns identify the spoke via `explorerAddress`.
17
+ * Campaigns identify the underlying via `tokens[0]` and the scoping contract (the hub or spoke) via
18
+ * `explorerAddress`. The same underlying exists on several hubs (e.g. USDC on Prime and Paxos), so a
19
+ * hub campaign matched by underlying alone would leak onto every hub's reserves — a campaign whose
20
+ * `explorerAddress` isn't a contract any fetched reserve points to simply never matches.
18
21
  */
19
- const spokeKey = (spokeAddress, underlying) => `${spokeAddress.toLowerCase()}_${underlying.toLowerCase()}`;
22
+ const scopeKey = (scopeAddress, underlying) => `${scopeAddress.toLowerCase()}_${underlying.toLowerCase()}`;
20
23
  const buildIncentive = (opportunity) => {
21
24
  var _a, _b, _c, _d, _e;
22
25
  const rewardToken = (_c = (_b = (_a = opportunity.rewardsRecord) === null || _a === void 0 ? void 0 : _a.breakdowns) === null || _b === void 0 ? void 0 : _b[0]) === null || _c === void 0 ? void 0 : _c.token;
@@ -28,8 +31,37 @@ const buildIncentive = (opportunity) => {
28
31
  description: `Eligible for ${token} rewards through Merkl.${opportunity.description ? `\n${opportunity.description}` : ''}`,
29
32
  };
30
33
  };
31
- export const getAaveV4MerkleCampaigns = (chainId) => __awaiter(void 0, void 0, void 0, function* () {
34
+ export const buildAaveV4MerklRewardMap = (opportunities, chainId) => {
32
35
  const result = { hub: {}, spoke: {} };
36
+ opportunities
37
+ .filter((o) => o.chainId === chainId)
38
+ .filter((o) => o.status === OpportunityStatus.LIVE)
39
+ .filter((o) => typeof o.type === 'string' && o.type.startsWith('AAVE_V4_'))
40
+ .forEach((o) => {
41
+ var _a, _b, _c, _d;
42
+ const underlying = (_c = (_b = (_a = o.tokens) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.address) === null || _c === void 0 ? void 0 : _c.toLowerCase();
43
+ if (!underlying)
44
+ return;
45
+ const scopeAddress = (_d = o.explorerAddress) === null || _d === void 0 ? void 0 : _d.toLowerCase();
46
+ if (!scopeAddress)
47
+ return;
48
+ const side = o.action === OpportunityAction.BORROW ? IncentiveSide.Borrow : IncentiveSide.Supply;
49
+ const incentive = buildIncentive(o);
50
+ const key = scopeKey(scopeAddress, underlying);
51
+ if (o.type.includes('HUB')) {
52
+ if (!result.hub[key])
53
+ result.hub[key] = {};
54
+ result.hub[key][side] = incentive;
55
+ }
56
+ else if (o.type.includes('SPOKE')) {
57
+ if (!result.spoke[key])
58
+ result.spoke[key] = {};
59
+ result.spoke[key][side] = incentive;
60
+ }
61
+ });
62
+ return result;
63
+ };
64
+ export const getAaveV4MerkleCampaigns = (chainId) => __awaiter(void 0, void 0, void 0, function* () {
33
65
  try {
34
66
  const res = yield fetch('https://fe.defisaver.com/api/merkl/opportunities?mainProtocolId=aave&type=AAVE_V4_HUB_SUPPLY,AAVE_V4_HUB_BORROW,AAVE_V4_SPOKE_SUPPLY,AAVE_V4_SPOKE_BORROW', {
35
67
  signal: AbortSignal.timeout(LONGER_TIMEOUT),
@@ -37,37 +69,11 @@ export const getAaveV4MerkleCampaigns = (chainId) => __awaiter(void 0, void 0, v
37
69
  if (!res.ok)
38
70
  throw new Error('Failed to fetch Aave V4 Merkle campaigns');
39
71
  const opportunities = yield res.json();
40
- opportunities
41
- .filter((o) => o.chainId === chainId)
42
- .filter((o) => o.status === OpportunityStatus.LIVE)
43
- .filter((o) => typeof o.type === 'string' && o.type.startsWith('AAVE_V4_'))
44
- .forEach((o) => {
45
- var _a, _b, _c, _d;
46
- const underlying = (_c = (_b = (_a = o.tokens) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.address) === null || _c === void 0 ? void 0 : _c.toLowerCase();
47
- if (!underlying)
48
- return;
49
- const side = o.action === OpportunityAction.BORROW ? 'borrow' : 'supply';
50
- const incentive = buildIncentive(o);
51
- if (o.type.includes('HUB')) {
52
- if (!result.hub[underlying])
53
- result.hub[underlying] = {};
54
- result.hub[underlying][side] = incentive;
55
- }
56
- else if (o.type.includes('SPOKE')) {
57
- const spokeAddress = (_d = o.explorerAddress) === null || _d === void 0 ? void 0 : _d.toLowerCase();
58
- if (!spokeAddress)
59
- return;
60
- const key = spokeKey(spokeAddress, underlying);
61
- if (!result.spoke[key])
62
- result.spoke[key] = {};
63
- result.spoke[key][side] = incentive;
64
- }
65
- });
66
- return result;
72
+ return buildAaveV4MerklRewardMap(opportunities, chainId);
67
73
  }
68
74
  catch (e) {
69
75
  console.error('Failed to fetch Aave V4 Merkle campaigns', e);
70
- return result;
76
+ return { hub: {}, spoke: {} };
71
77
  }
72
78
  });
73
79
  /**
@@ -79,7 +85,7 @@ export const attachAaveV4MerklIncentives = (asset, spokeAddress, campaigns) => {
79
85
  const underlying = (_a = asset.underlying) === null || _a === void 0 ? void 0 : _a.toLowerCase();
80
86
  const baseSupply = asset.supplyIncentives || [];
81
87
  const baseBorrow = asset.borrowIncentives || [];
82
- const spokeScoped = (spokeAddress && underlying) ? campaigns.spoke[spokeKey(spokeAddress, underlying)] : undefined;
83
- const hubScoped = underlying ? campaigns.hub[underlying] : undefined;
88
+ const spokeScoped = (spokeAddress && underlying) ? campaigns.spoke[scopeKey(spokeAddress, underlying)] : undefined;
89
+ const hubScoped = (asset.hub && underlying) ? campaigns.hub[scopeKey(asset.hub, underlying)] : undefined;
84
90
  return Object.assign(Object.assign({}, asset), { spokeSupplyIncentives: (spokeScoped === null || spokeScoped === void 0 ? void 0 : spokeScoped.supply) ? [...baseSupply, spokeScoped.supply] : baseSupply, spokeBorrowIncentives: (spokeScoped === null || spokeScoped === void 0 ? void 0 : spokeScoped.borrow) ? [...baseBorrow, spokeScoped.borrow] : baseBorrow, hubSupplyIncentives: (hubScoped === null || hubScoped === void 0 ? void 0 : hubScoped.supply) ? [...baseSupply, hubScoped.supply] : baseSupply, hubBorrowIncentives: (hubScoped === null || hubScoped === void 0 ? void 0 : hubScoped.borrow) ? [...baseBorrow, hubScoped.borrow] : baseBorrow });
85
91
  };