@defisaver/positions-sdk 2.1.159-shifter-v2-dev → 2.1.160-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 (108) hide show
  1. package/cjs/aaveV2/index.js +0 -2
  2. package/cjs/constants/index.d.ts +1 -0
  3. package/cjs/constants/index.js +4 -1
  4. package/cjs/fluid/index.d.ts +0 -5
  5. package/cjs/fluid/index.js +1 -36
  6. package/cjs/helpers/aaveHelpers/index.js +0 -3
  7. package/cjs/helpers/aaveV4Helpers/index.js +0 -1
  8. package/cjs/helpers/compoundHelpers/index.js +0 -2
  9. package/cjs/helpers/curveUsdHelpers/index.js +0 -2
  10. package/cjs/helpers/fluidHelpers/index.js +0 -1
  11. package/cjs/helpers/liquityV2Helpers/index.js +0 -1
  12. package/cjs/helpers/llamaLendHelpers/index.js +0 -2
  13. package/cjs/helpers/makerHelpers/index.d.ts +1 -1
  14. package/cjs/helpers/makerHelpers/index.js +2 -2
  15. package/cjs/helpers/morphoBlueHelpers/index.js +3 -6
  16. package/cjs/helpers/morphoMidnightHelpers/index.js +0 -2
  17. package/cjs/helpers/sparkHelpers/index.js +0 -1
  18. package/cjs/liquity/index.js +1 -8
  19. package/cjs/maker/index.d.ts +2 -7
  20. package/cjs/maker/index.js +12 -32
  21. package/cjs/markets/index.d.ts +0 -1
  22. package/cjs/markets/index.js +1 -3
  23. package/cjs/portfolio/index.d.ts +1 -5
  24. package/cjs/portfolio/index.js +0 -272
  25. package/cjs/savings/morphoVaults/index.js +2 -2
  26. package/cjs/types/aave.d.ts +0 -2
  27. package/cjs/types/aaveV4.d.ts +0 -1
  28. package/cjs/types/compound.d.ts +0 -2
  29. package/cjs/types/fluid.d.ts +0 -1
  30. package/cjs/types/liquity.d.ts +0 -1
  31. package/cjs/types/liquityV2.d.ts +0 -2
  32. package/cjs/types/maker.d.ts +0 -1
  33. package/cjs/types/morphoBlue.d.ts +0 -2
  34. package/cjs/types/morphoMidnight.d.ts +0 -1
  35. package/cjs/types/portfolio.d.ts +10 -26
  36. package/cjs/types/spark.d.ts +0 -2
  37. package/esm/aaveV2/index.js +0 -2
  38. package/esm/constants/index.d.ts +1 -0
  39. package/esm/constants/index.js +3 -0
  40. package/esm/fluid/index.d.ts +0 -5
  41. package/esm/fluid/index.js +0 -33
  42. package/esm/helpers/aaveHelpers/index.js +0 -3
  43. package/esm/helpers/aaveV4Helpers/index.js +0 -1
  44. package/esm/helpers/compoundHelpers/index.js +0 -2
  45. package/esm/helpers/curveUsdHelpers/index.js +0 -2
  46. package/esm/helpers/fluidHelpers/index.js +0 -1
  47. package/esm/helpers/liquityV2Helpers/index.js +0 -1
  48. package/esm/helpers/llamaLendHelpers/index.js +0 -2
  49. package/esm/helpers/makerHelpers/index.d.ts +1 -1
  50. package/esm/helpers/makerHelpers/index.js +2 -2
  51. package/esm/helpers/morphoBlueHelpers/index.js +4 -7
  52. package/esm/helpers/morphoMidnightHelpers/index.js +0 -2
  53. package/esm/helpers/sparkHelpers/index.js +0 -1
  54. package/esm/liquity/index.js +1 -8
  55. package/esm/maker/index.d.ts +2 -7
  56. package/esm/maker/index.js +13 -31
  57. package/esm/markets/index.d.ts +0 -1
  58. package/esm/markets/index.js +0 -1
  59. package/esm/portfolio/index.d.ts +1 -5
  60. package/esm/portfolio/index.js +3 -274
  61. package/esm/savings/morphoVaults/index.js +2 -2
  62. package/esm/types/aave.d.ts +0 -2
  63. package/esm/types/aaveV4.d.ts +0 -1
  64. package/esm/types/compound.d.ts +0 -2
  65. package/esm/types/fluid.d.ts +0 -1
  66. package/esm/types/liquity.d.ts +0 -1
  67. package/esm/types/liquityV2.d.ts +0 -2
  68. package/esm/types/maker.d.ts +0 -1
  69. package/esm/types/morphoBlue.d.ts +0 -2
  70. package/esm/types/morphoMidnight.d.ts +0 -1
  71. package/esm/types/portfolio.d.ts +10 -26
  72. package/esm/types/spark.d.ts +0 -2
  73. package/package.json +1 -1
  74. package/src/aaveV2/index.ts +0 -2
  75. package/src/constants/index.ts +5 -1
  76. package/src/fluid/index.ts +0 -40
  77. package/src/helpers/aaveHelpers/index.ts +0 -3
  78. package/src/helpers/aaveV4Helpers/index.ts +0 -1
  79. package/src/helpers/compoundHelpers/index.ts +0 -2
  80. package/src/helpers/curveUsdHelpers/index.ts +0 -2
  81. package/src/helpers/fluidHelpers/index.ts +0 -1
  82. package/src/helpers/liquityV2Helpers/index.ts +0 -1
  83. package/src/helpers/llamaLendHelpers/index.ts +0 -2
  84. package/src/helpers/makerHelpers/index.ts +1 -2
  85. package/src/helpers/morphoBlueHelpers/index.ts +6 -7
  86. package/src/helpers/morphoMidnightHelpers/index.ts +0 -2
  87. package/src/helpers/sparkHelpers/index.ts +0 -1
  88. package/src/liquity/index.ts +1 -8
  89. package/src/maker/index.ts +29 -62
  90. package/src/markets/index.ts +1 -2
  91. package/src/portfolio/index.ts +2 -257
  92. package/src/savings/morphoVaults/index.ts +2 -3
  93. package/src/types/aave.ts +0 -3
  94. package/src/types/aaveV4.ts +0 -1
  95. package/src/types/compound.ts +0 -2
  96. package/src/types/fluid.ts +0 -1
  97. package/src/types/liquity.ts +0 -2
  98. package/src/types/liquityV2.ts +0 -2
  99. package/src/types/maker.ts +0 -2
  100. package/src/types/morphoBlue.ts +0 -2
  101. package/src/types/morphoMidnight.ts +0 -1
  102. package/src/types/portfolio.ts +12 -31
  103. package/src/types/spark.ts +0 -2
  104. package/cjs/markets/maker/index.d.ts +0 -1
  105. package/cjs/markets/maker/index.js +0 -13
  106. package/esm/markets/maker/index.d.ts +0 -1
  107. package/esm/markets/maker/index.js +0 -10
  108. package/src/markets/maker/index.ts +0 -10
@@ -27,7 +27,6 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
27
27
  };
28
28
  Object.defineProperty(exports, "__esModule", { value: true });
29
29
  exports.getPortfolioData = getPortfolioData;
30
- exports.getShifterPortfolioData = getShifterPortfolioData;
31
30
  const decimal_js_1 = __importDefault(require("decimal.js"));
32
31
  const common_1 = require("../types/common");
33
32
  const markets_1 = require("../markets");
@@ -620,275 +619,4 @@ function getPortfolioData(provider_1, network_1, defaultProvider_1, addresses_1)
620
619
  };
621
620
  });
622
621
  }
623
- function getShifterPortfolioData(provider_1, network_1, defaultProvider_1, addresses_1) {
624
- return __awaiter(this, arguments, void 0, function* (provider, network, defaultProvider, addresses, isSim = false) {
625
- const isMainnet = network === common_1.NetworkNumber.Eth;
626
- const isFluidSupported = [common_1.NetworkNumber.Eth, common_1.NetworkNumber.Arb, common_1.NetworkNumber.Base, common_1.NetworkNumber.Plasma].includes(network);
627
- const morphoMarkets = Object.values((0, markets_1.MorphoBlueMarkets)(network)).filter((market) => market.chainIds.includes(network));
628
- const compoundV3Markets = Object.values((0, markets_1.CompoundMarkets)(network)).filter((market) => market.chainIds.includes(network) && market.value !== types_1.CompoundVersions.CompoundV2);
629
- const sparkMarkets = Object.values((0, markets_1.SparkMarkets)(network)).filter((market) => market.chainIds.includes(network));
630
- 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));
631
- const aaveV2Markets = [types_1.AaveVersions.AaveV2].map((version) => (0, markets_1.AaveMarkets)(network)[version]).filter((market) => market.chainIds.includes(network));
632
- const compoundV2Markets = [types_1.CompoundVersions.CompoundV2].map((version) => (0, markets_1.CompoundMarkets)(network)[version]).filter((market) => market.chainIds.includes(network));
633
- const crvUsdMarkets = Object.values((0, markets_1.CrvUsdMarkets)(network)).filter((market) => market.chainIds.includes(network));
634
- const llamaLendMarkets = [common_1.NetworkNumber.Eth, common_1.NetworkNumber.Arb].includes(network) ? Object.values((0, markets_1.LlamaLendMarkets)(network)).filter((market) => market.chainIds.includes(network)) : [];
635
- const liquityV2Markets = [common_1.NetworkNumber.Eth].includes(network) ? Object.values((0, markets_1.LiquityV2Markets)(network)) : [];
636
- const aaveV4Spokes = Object.values((0, markets_1.AaveV4Spokes)(network)).filter((market) => market.chainIds.includes(network));
637
- const args = [network, { batch: { multicall: { batchSize: isSim ? 2000 : 2500000 } } }];
638
- const client = (0, viem_1.getViemProvider)(provider, ...args);
639
- const defaultClient = (0, viem_1.getViemProvider)(defaultProvider, ...args);
640
- const markets = {
641
- morphoMarketsData: {},
642
- morphoMidnightMarketsData: {}, // Morpho Midnight is not fetched for the shifter; key kept so the payload shape is stable
643
- compoundV3MarketsData: {},
644
- sparkMarketsData: {},
645
- aaveV3MarketsData: {},
646
- aaveV2MarketsData: {},
647
- compoundV2MarketsData: {},
648
- crvUsdMarketsData: {},
649
- llamaLendMarketsData: {},
650
- liquityV2MarketsData: {},
651
- aaveV4SpokesData: {},
652
- fluidMarketsData: {},
653
- makerMarketsData: {},
654
- };
655
- const makerCdps = {};
656
- const positions = {};
657
- for (const address of addresses) {
658
- positions[address.toLowerCase()] = {
659
- aaveV3: {},
660
- aaveV4: {},
661
- morphoBlue: {},
662
- morphoMidnight: {}, // not fetched for the shifter (see markets above)
663
- compoundV3: {},
664
- spark: {},
665
- maker: {},
666
- aaveV2: {},
667
- compoundV2: {},
668
- liquity: {},
669
- crvUsd: {},
670
- llamaLend: {},
671
- fluid: {
672
- error: '',
673
- data: {},
674
- },
675
- };
676
- }
677
- yield Promise.allSettled([
678
- // === MARKET DATA (needs to be fetched first) ===
679
- ...morphoMarkets.map((market) => __awaiter(this, void 0, void 0, function* () {
680
- markets.morphoMarketsData[market.value] = yield (0, morphoBlue_1._getMorphoBluePortfolioMarketData)(client, network, market);
681
- })),
682
- ...compoundV3Markets.map((market) => __awaiter(this, void 0, void 0, function* () {
683
- markets.compoundV3MarketsData[market.value] = yield (0, compoundV3_1._getCompoundV3MarketsData)(client, network, market, defaultClient);
684
- })),
685
- ...sparkMarkets.map((market) => __awaiter(this, void 0, void 0, function* () {
686
- markets.sparkMarketsData[market.value] = yield (0, spark_1._getSparkMarketsData)(client, network, market);
687
- })),
688
- ...aaveV3Markets.map((market) => __awaiter(this, void 0, void 0, function* () {
689
- markets.aaveV3MarketsData[market.value] = yield (0, aaveV3_1._getAaveV3MarketData)(client, network, market);
690
- })),
691
- ...aaveV4Spokes.map((spoke) => __awaiter(this, void 0, void 0, function* () {
692
- markets.aaveV4SpokesData[spoke.value] = yield (0, aaveV4_1._getAaveV4SpokeData)(client, network, spoke);
693
- })),
694
- ...aaveV2Markets.map((market) => __awaiter(this, void 0, void 0, function* () {
695
- markets.aaveV2MarketsData[market.value] = yield (0, aaveV2_1._getAaveV2MarketsData)(client, network, market);
696
- })),
697
- ...compoundV2Markets.map((market) => __awaiter(this, void 0, void 0, function* () {
698
- markets.compoundV2MarketsData[market.value] = yield (0, compoundV2_1._getCompoundV2MarketsData)(client, network);
699
- })),
700
- ...crvUsdMarkets.map((market) => __awaiter(this, void 0, void 0, function* () {
701
- markets.crvUsdMarketsData[market.value] = yield (0, curveUsd_1._getCurveUsdGlobalData)(client, network, market);
702
- })),
703
- ...llamaLendMarkets.map((market) => __awaiter(this, void 0, void 0, function* () {
704
- markets.llamaLendMarketsData[market.value] = yield (0, llamaLend_1._getLlamaLendGlobalData)(client, network, market);
705
- })),
706
- ...liquityV2Markets.map((market) => __awaiter(this, void 0, void 0, function* () {
707
- markets.liquityV2MarketsData[market.value] = yield (0, liquityV2_1._getLiquityV2MarketData)(client, network, market);
708
- })),
709
- (() => __awaiter(this, void 0, void 0, function* () {
710
- if (!isFluidSupported)
711
- return;
712
- try {
713
- markets.fluidMarketsData = yield (0, fluid_1._getAllFluidMarketDataPortfolio)(client, network);
714
- }
715
- catch (error) {
716
- console.error('Error fetching Fluid markets data:', error);
717
- }
718
- }))(),
719
- (() => __awaiter(this, void 0, void 0, function* () {
720
- if (!isMainnet)
721
- return; // Maker CDPs are only available on mainnet
722
- try {
723
- markets.makerMarketsData = yield (0, maker_1._getMakerIlksData)(client, network, markets_1.MakerActiveIlks);
724
- }
725
- catch (error) {
726
- console.error('Error fetching Maker ilks data:', error);
727
- }
728
- }))(),
729
- // === INDEPENDENT USER DATA (doesn't depend on market data) ===
730
- ...addresses.map((address) => __awaiter(this, void 0, void 0, function* () {
731
- if (!isMainnet)
732
- return; // Maker CDPs are only available on mainnet
733
- const makerCdp = yield (0, maker_1._getUserCdps)(client, network, address);
734
- makerCdps[address.toLowerCase()] = makerCdp;
735
- })),
736
- ...addresses.map((address) => __awaiter(this, void 0, void 0, function* () {
737
- try {
738
- if (!isFluidSupported)
739
- return; // Fluid is not available on Optimism
740
- const userPositions = (yield (0, fluid_1._getUserPositionsPortfolio)(client, network, address));
741
- for (const position of userPositions) {
742
- if (position.userData && new decimal_js_1.default(position.userData.suppliedUsd).gt(0)) {
743
- positions[address.toLowerCase()].fluid.data[position.userData.nftId] = position.userData;
744
- }
745
- }
746
- }
747
- catch (error) {
748
- console.error(`Error fetching Fluid positions for address ${address}:`, error);
749
- positions[address.toLowerCase()].fluid = {
750
- error: `Error fetching Fluid positions for address ${address}`,
751
- data: {},
752
- };
753
- }
754
- })),
755
- ]);
756
- yield Promise.all([
757
- ...aaveV3Markets.map((market) => addresses.map((address) => __awaiter(this, void 0, void 0, function* () {
758
- try {
759
- const accData = yield (0, aaveV3_1._getAaveV3AccountData)(client, network, address, Object.assign({ selectedMarket: market }, markets.aaveV3MarketsData[market.value]));
760
- if (new decimal_js_1.default(accData.suppliedUsd).gt(0))
761
- positions[address.toLowerCase()].aaveV3[market.value] = { error: '', data: accData };
762
- }
763
- catch (error) {
764
- console.error(`Error fetching AaveV3 account data for address ${address} on market ${market.value}:`, error);
765
- positions[address.toLowerCase()].aaveV3[market.value] = { error: `Error fetching AaveV3 account data for address ${address} on market ${market.value}`, data: null };
766
- }
767
- }))).flat(),
768
- ...aaveV4Spokes.map((spoke) => addresses.map((address) => __awaiter(this, void 0, void 0, function* () {
769
- try {
770
- const accData = yield (0, aaveV4_1._getAaveV4AccountData)(client, network, markets.aaveV4SpokesData[spoke.value], address);
771
- if (new decimal_js_1.default(accData.suppliedUsd).gt(0))
772
- positions[address.toLowerCase()].aaveV4[spoke.value] = { error: '', data: accData };
773
- }
774
- catch (error) {
775
- console.error(`Error fetching AaveV4 account data for address ${address} on spoke ${spoke.value}:`, error);
776
- positions[address.toLowerCase()].aaveV4[spoke.value] = { error: `Error fetching AaveV4 account data for address ${address} on spoke ${spoke.value}`, data: null };
777
- }
778
- }))).flat(),
779
- ...morphoMarkets.map((market) => addresses.map((address) => __awaiter(this, void 0, void 0, function* () {
780
- try {
781
- const accData = yield (0, morphoBlue_1._getMorphoBlueAccountData)(client, network, address, market, markets.morphoMarketsData[market.value]);
782
- if (new decimal_js_1.default(accData.suppliedUsd).gt(0))
783
- positions[address.toLowerCase()].morphoBlue[market.value] = { error: '', data: accData };
784
- }
785
- catch (error) {
786
- console.error(`Error fetching MorphoBlue account data for address ${address} on market ${market.value}:`, error);
787
- positions[address.toLowerCase()].morphoBlue[market.value] = { error: `Error fetching MorphoBlue account data for address ${address} on market ${market.value}`, data: null };
788
- }
789
- }))).flat(),
790
- ...compoundV3Markets.map((market) => addresses.map((address) => __awaiter(this, void 0, void 0, function* () {
791
- try {
792
- const accData = yield (0, compoundV3_1._getCompoundV3AccountData)(client, network, address, constants_1.ZERO_ADDRESS, { selectedMarket: market, assetsData: markets.compoundV3MarketsData[market.value].assetsData });
793
- if (new decimal_js_1.default(accData.suppliedUsd).gt(0))
794
- positions[address.toLowerCase()].compoundV3[market.value] = { error: '', data: accData };
795
- }
796
- catch (error) {
797
- console.error(`Error fetching CompoundV3 account data for address ${address} on market ${market.value}:`, error);
798
- positions[address.toLowerCase()].compoundV3[market.value] = { error: `Error fetching CompoundV3 account data for address ${address} on market ${market.value}`, data: null };
799
- }
800
- }))).flat(),
801
- ...sparkMarkets.map((market) => addresses.map((address) => __awaiter(this, void 0, void 0, function* () {
802
- try {
803
- const accData = yield (0, spark_1._getSparkAccountData)(client, network, address, { selectedMarket: market, assetsData: markets.sparkMarketsData[market.value].assetsData, eModeCategoriesData: markets.sparkMarketsData[market.value].eModeCategoriesData });
804
- if (new decimal_js_1.default(accData.suppliedUsd).gt(0))
805
- positions[address.toLowerCase()].spark[market.value] = { error: '', data: accData };
806
- }
807
- catch (error) {
808
- console.error(`Error fetching Spark account data for address ${address} on market ${market.value}:`, error);
809
- positions[address.toLowerCase()].spark[market.value] = { error: `Error fetching Spark account data for address ${address} on market ${market.value}`, data: null };
810
- }
811
- }))).flat(),
812
- ...addresses.map((address) => __awaiter(this, void 0, void 0, function* () {
813
- var _a;
814
- return (_a = makerCdps[address.toLowerCase()]) === null || _a === void 0 ? void 0 : _a.map((cdpInfo) => __awaiter(this, void 0, void 0, function* () {
815
- try {
816
- // reuse ilk data fetched for the markets payload; ilks outside the active set are fetched on demand
817
- const cdpData = yield (0, maker_1._getMakerCdpData)(client, network, cdpInfo, markets.makerMarketsData[cdpInfo.ilkLabel]);
818
- if (cdpData) {
819
- positions[address.toLowerCase()].maker[cdpInfo.id] = { error: '', data: cdpData };
820
- }
821
- }
822
- catch (error) {
823
- console.error(`Error fetching Maker CDP data for address ${address} with ID ${cdpInfo.id}:`, error);
824
- positions[address.toLowerCase()].maker[cdpInfo.id] = { error: `Error fetching Maker CDP data for address ${address} with ID ${cdpInfo.id}`, data: null };
825
- }
826
- }));
827
- })).flat(),
828
- ...aaveV2Markets.map((market) => addresses.map((address) => __awaiter(this, void 0, void 0, function* () {
829
- try {
830
- const accData = yield (0, aaveV2_1._getAaveV2AccountData)(client, network, address, markets.aaveV2MarketsData[market.value].assetsData, market);
831
- if (new decimal_js_1.default(accData.suppliedUsd).gt(0))
832
- positions[address.toLowerCase()].aaveV2[market.value] = { error: '', data: accData };
833
- }
834
- catch (error) {
835
- console.error(`Error fetching AaveV2 account data for address ${address}:`, error);
836
- positions[address.toLowerCase()].aaveV2[market.value] = { error: `Error fetching AaveV2 account data for address ${address}`, data: null };
837
- }
838
- }))).flat(),
839
- ...compoundV2Markets.map((market) => addresses.map((address) => __awaiter(this, void 0, void 0, function* () {
840
- try {
841
- const accData = yield (0, compoundV2_1._getCompoundV2AccountData)(client, network, address, markets.compoundV2MarketsData[market.value].assetsData);
842
- if (new decimal_js_1.default(accData.suppliedUsd).gt(0))
843
- positions[address.toLowerCase()].compoundV2[market.value] = { error: '', data: accData };
844
- }
845
- catch (error) {
846
- console.error(`Error fetching CompoundV2 account data for address ${address}:`, error);
847
- positions[address.toLowerCase()].compoundV2[market.value] = { error: `Error fetching CompoundV2 account data for address ${address}`, data: null };
848
- }
849
- }))).flat(),
850
- ...addresses.map((address) => __awaiter(this, void 0, void 0, function* () {
851
- try {
852
- if (!isMainnet)
853
- return; // Liquity trove info is only available on mainnet
854
- const troveInfo = yield (0, liquity_1._getLiquityTroveInfo)(client, network, address);
855
- if (new decimal_js_1.default(troveInfo.collateral).gt(0))
856
- positions[address.toLowerCase()].liquity = { error: '', data: troveInfo };
857
- }
858
- catch (error) {
859
- console.error(`Error fetching Liquity trove info for address ${address}:`, error);
860
- positions[address.toLowerCase()].liquity = { error: `Error fetching Liquity trove info for address ${address}`, data: null };
861
- }
862
- })),
863
- ...crvUsdMarkets.map((market) => addresses.map((address) => __awaiter(this, void 0, void 0, function* () {
864
- try {
865
- const accData = yield (0, curveUsd_1._getCurveUsdUserData)(client, network, address, market, markets.crvUsdMarketsData[market.value].activeBand);
866
- if (new decimal_js_1.default(accData.suppliedUsd).gt(0) || new decimal_js_1.default(accData.borrowedUsd).gt(0)) {
867
- positions[address.toLowerCase()].crvUsd[market.value] = { error: '', data: Object.assign(Object.assign({}, accData), { borrowRate: markets.crvUsdMarketsData[market.value].borrowRate }) };
868
- }
869
- }
870
- catch (error) {
871
- console.error(`Error fetching Curve USD account data for address ${address} on market ${market.value}:`, error);
872
- positions[address.toLowerCase()].crvUsd[market.value] = { error: `Error fetching Curve USD account data for address ${address} on market ${market.value}`, data: null };
873
- }
874
- }))).flat(),
875
- ...llamaLendMarkets.map((market) => addresses.map((address) => __awaiter(this, void 0, void 0, function* () {
876
- try {
877
- const accData = yield (0, llamaLend_1._getLlamaLendUserData)(client, network, address, market, markets.llamaLendMarketsData[market.value]);
878
- if (new decimal_js_1.default(accData.suppliedUsd).gt(0) || new decimal_js_1.default(accData.borrowedUsd).gt(0)) {
879
- positions[address.toLowerCase()].llamaLend[market.value] = { error: '', data: Object.assign(Object.assign({}, accData), { borrowRate: markets.llamaLendMarketsData[market.value].borrowRate }) };
880
- }
881
- }
882
- catch (error) {
883
- console.error(`Error fetching LlamaLend account data for address ${address} on market ${market.value}:`, error);
884
- positions[address.toLowerCase()].llamaLend[market.value] = { error: `Error fetching LlamaLend account data for address ${address} on market ${market.value}`, data: null };
885
- }
886
- }))).flat(),
887
- ]);
888
- return {
889
- positions,
890
- markets,
891
- };
892
- });
893
- }
894
622
  __exportStar(require("./discovery"), exports);
@@ -55,7 +55,7 @@ const morphoVaultsOptions = __importStar(require("./options"));
55
55
  exports.morphoVaultsOptions = morphoVaultsOptions;
56
56
  const viem_1 = require("../../services/viem");
57
57
  const contracts_1 = require("../../contracts");
58
- const MORPHO_BLUE_API = 'https://api.morpho.org/graphql';
58
+ const constants_1 = require("../../constants");
59
59
  // Morpho API caps list page size at 100 items
60
60
  const MORPHO_API_PAGE_SIZE = 100;
61
61
  const vaultsLiquidityQuery = `
@@ -80,7 +80,7 @@ const fetchMorphoVaultsLiquidity = (network, vaults) => __awaiter(void 0, void 0
80
80
  chunks.push(vaults.slice(i, i + MORPHO_API_PAGE_SIZE));
81
81
  const liquidityByAddress = {};
82
82
  yield Promise.all(chunks.map((chunk) => __awaiter(void 0, void 0, void 0, function* () {
83
- const data = yield (0, graphql_request_1.request)(MORPHO_BLUE_API, vaultsLiquidityQuery, {
83
+ const data = yield (0, graphql_request_1.request)(constants_1.MORPHO_API_URL, vaultsLiquidityQuery, {
84
84
  addresses: chunk.map((vault) => vault.address),
85
85
  chainIds: [network],
86
86
  // the BigInt scalar serializes as a JSON number when it fits in Number.MAX_SAFE_INTEGER, a string otherwise
@@ -126,7 +126,6 @@ export interface AavePositionData extends MMPositionData {
126
126
  minRatio: string;
127
127
  collRatio: string;
128
128
  safetyRatioWithLtvZeroFallback?: string;
129
- safetyRatio?: string;
130
129
  suppliedUsd: string;
131
130
  borrowedUsd: string;
132
131
  borrowLimitUsd: string;
@@ -160,7 +159,6 @@ export interface AaveV3AggregatedPositionData {
160
159
  collRatio: string;
161
160
  borrowLimitWithLtvZeroFallbackUsd: string;
162
161
  safetyRatioWithLtvZeroFallback: string;
163
- safetyRatio: string;
164
162
  netApy: string;
165
163
  incentiveUsd: string;
166
164
  totalInterestUsd: string;
@@ -169,7 +169,6 @@ export interface AaveV4AggregatedPositionData {
169
169
  leftToBorrowUsd: string;
170
170
  ratio: string;
171
171
  collRatio: string;
172
- safetyRatio: string;
173
172
  liqRatio: string;
174
173
  liqPercent: string;
175
174
  leveragedType: LeverageType;
@@ -96,7 +96,6 @@ export interface CompoundAggregatedPositionData {
96
96
  leftToBorrowUsd: string;
97
97
  ratio: string;
98
98
  collRatio: string;
99
- safetyRatio: string;
100
99
  netApy: string;
101
100
  incentiveUsd: string;
102
101
  totalInterestUsd: string;
@@ -116,7 +115,6 @@ export interface CompoundAggregatedPositionData {
116
115
  export interface CompoundPositionData extends MMPositionData {
117
116
  ratio: string;
118
117
  minRatio: string;
119
- safetyRatio?: string;
120
118
  suppliedUsd: string;
121
119
  borrowedUsd: string;
122
120
  borrowLimitUsd: string;
@@ -323,7 +323,6 @@ export interface FluidAggregatedVaultData {
323
323
  merklBorrowIncentives: IncentiveData[];
324
324
  ratio: string;
325
325
  collRatio: string;
326
- safetyRatio: string;
327
326
  minRatio: string;
328
327
  totalInterestUsd: string;
329
328
  leveragedType?: LeverageType;
@@ -24,7 +24,6 @@ export interface LiquityTroveInfo {
24
24
  totalETH: string;
25
25
  totalLUSD: string;
26
26
  minCollateralRatio: number;
27
- safetyRatio: string;
28
27
  priceForRecovery: string;
29
28
  debtInFront: string;
30
29
  exposure: string;
@@ -94,7 +94,6 @@ export interface LiquityV2AggregatedTroveData {
94
94
  liquidationPrice: string;
95
95
  ratio: string;
96
96
  collRatio: string;
97
- safetyRatio: string;
98
97
  exposure: string;
99
98
  }
100
99
  export interface LiquityV2TroveData {
@@ -102,7 +101,6 @@ export interface LiquityV2TroveData {
102
101
  troveId: string;
103
102
  ratio: string;
104
103
  collRatio: string;
105
- safetyRatio?: string;
106
104
  liqRatio: string;
107
105
  borrowLimitRatio: string;
108
106
  interestRate: string;
@@ -43,7 +43,6 @@ export interface CdpData {
43
43
  debtAssetMarketPrice: string;
44
44
  liquidationPrice: string;
45
45
  ratio: string;
46
- safetyRatio: string;
47
46
  liqRatio: string;
48
47
  liqPercent: number;
49
48
  assetPrice: string;
@@ -185,7 +185,6 @@ export interface MorphoBlueAggregatedPositionData {
185
185
  totalInterestUsd: string;
186
186
  ltv: string;
187
187
  ratio: string;
188
- safetyRatio: string;
189
188
  leveragedType: LeverageType;
190
189
  leveragedAsset?: string;
191
190
  currentVolatilePairRatio?: string;
@@ -208,7 +207,6 @@ export interface MorphoBluePositionData {
208
207
  totalInterestUsd: string;
209
208
  ltv: string;
210
209
  ratio: string;
211
- safetyRatio?: string;
212
210
  leveragedType: LeverageType;
213
211
  leveragedAsset?: string;
214
212
  currentVolatilePairRatio?: string;
@@ -170,7 +170,6 @@ export interface MorphoMidnightAggregatedPositionData {
170
170
  ltv: string;
171
171
  ratio: string;
172
172
  healthRatio: string;
173
- safetyRatio: string;
174
173
  leveragedType: LeverageType;
175
174
  leveragedAsset?: string;
176
175
  currentVolatilePairRatio?: string;
@@ -1,16 +1,15 @@
1
- import { AaveV2MarketData, AaveV2PositionData, AaveV3MarketData, AaveV3PositionData, AaveVersions } from './aave';
2
- import { AaveV4AccountData, AaveV4SpokeData, AaveV4SpokesType } from './aaveV4';
1
+ import { AaveV2PositionData, AaveV3PositionData, AaveVersions } from './aave';
2
+ import { AaveV4AccountData, AaveV4SpokesType } from './aaveV4';
3
3
  import { EthAddress } from './common';
4
- import { CompoundV2MarketsData, CompoundV2PositionData, CompoundV3MarketsData, CompoundV3PositionData, CompoundVersions } from './compound';
5
- import { CrvUSDGlobalMarketData, CrvUSDUserData, CrvUSDVersions } from './curveUsd';
6
- import { FluidMarketData, FluidVaultData } from './fluid';
4
+ import { CompoundV2PositionData, CompoundV3PositionData, CompoundVersions } from './compound';
5
+ import { CrvUSDUserData, CrvUSDVersions } from './curveUsd';
6
+ import { FluidVaultData } from './fluid';
7
7
  import { LiquityTroveInfo } from './liquity';
8
- import { LiquityV2MarketData } from './liquityV2';
9
- import { LlamaLendGlobalMarketData, LlamaLendUserData, LlamaLendVersionsType } from './llamaLend';
10
- import { CdpData, IlkInfo } from './maker';
11
- import { MorphoBlueMarketInfo, MorphoBluePositionData, MorphoBlueVersions } from './morphoBlue';
12
- import { MorphoMidnightMarketInfo, MorphoMidnightPositionData, MorphoMidnightVersions } from './morphoMidnight';
13
- import { SparkMarketsData, SparkPositionData, SparkVersions } from './spark';
8
+ import { LlamaLendUserData, LlamaLendVersionsType } from './llamaLend';
9
+ import { CdpData } from './maker';
10
+ import { MorphoBluePositionData, MorphoBlueVersions } from './morphoBlue';
11
+ import { MorphoMidnightPositionData, MorphoMidnightVersions } from './morphoMidnight';
12
+ import { SparkPositionData, SparkVersions } from './spark';
14
13
  export interface PortfolioProtocolData<T> {
15
14
  error: string;
16
15
  data: T | null;
@@ -60,18 +59,3 @@ export interface PortfolioPositionsDataForAddress {
60
59
  export interface PortfolioPositionsData {
61
60
  [key: EthAddress]: PortfolioPositionsDataForAddress;
62
61
  }
63
- export interface PortfolioMarketsData {
64
- morphoMarketsData: Record<string, MorphoBlueMarketInfo>;
65
- morphoMidnightMarketsData: Record<string, MorphoMidnightMarketInfo>;
66
- compoundV3MarketsData: Record<string, CompoundV3MarketsData>;
67
- sparkMarketsData: Record<string, SparkMarketsData>;
68
- aaveV3MarketsData: Record<string, AaveV3MarketData>;
69
- aaveV2MarketsData: Record<string, AaveV2MarketData>;
70
- compoundV2MarketsData: Record<string, CompoundV2MarketsData>;
71
- crvUsdMarketsData: Record<string, CrvUSDGlobalMarketData>;
72
- llamaLendMarketsData: Record<string, LlamaLendGlobalMarketData>;
73
- liquityV2MarketsData: Record<string, LiquityV2MarketData>;
74
- aaveV4SpokesData: Record<string, AaveV4SpokeData>;
75
- fluidMarketsData: Record<string, FluidMarketData>;
76
- makerMarketsData: Record<string, IlkInfo>;
77
- }
@@ -85,7 +85,6 @@ export interface SparkAggregatedPositionData {
85
85
  leftToBorrowUsd: string;
86
86
  ratio: string;
87
87
  collRatio: string;
88
- safetyRatio: string;
89
88
  netApy: string;
90
89
  incentiveUsd: string;
91
90
  totalInterestUsd: string;
@@ -105,7 +104,6 @@ export interface SparkPositionData extends MMPositionData {
105
104
  ratio: string;
106
105
  minRatio: string;
107
106
  collRatio: string;
108
- safetyRatio?: string;
109
107
  suppliedUsd: string;
110
108
  borrowedUsd: string;
111
109
  borrowLimitUsd: string;
@@ -167,8 +167,6 @@ export const _getAaveV2AccountData = (provider, network, address, assetsData, ma
167
167
  payload.collRatio = payload.borrowedUsd && payload.borrowedUsd !== '0'
168
168
  ? new Dec(payload.suppliedCollateralUsd).div(payload.borrowedUsd).mul(100).toString()
169
169
  : '0';
170
- // Aave v2 has no LTV-0 fallback (AaveV3View only), so its safety ratio is the plain ratio.
171
- payload.safetyRatio = payload.ratio;
172
170
  // Calculate borrow limits per asset
173
171
  Object.values(payload.usedAssets).forEach((item) => {
174
172
  if (item.isBorrowed) {
@@ -10,3 +10,4 @@ export declare const ZERO_BYTES32 = "0x00000000000000000000000000000000000000000
10
10
  export declare const WAD = 1000000000000000000;
11
11
  export declare const USD_QUOTE = "0x0000000000000000000000000000000000000348";
12
12
  export declare const borrowOperations: string[];
13
+ export declare const MORPHO_API_URL = "https://fe.defisaver.com/api/morpho/graphql";
@@ -10,3 +10,6 @@ export const ZERO_BYTES32 = '0x0000000000000000000000000000000000000000000000000
10
10
  export const WAD = 1e18;
11
11
  export const USD_QUOTE = '0x0000000000000000000000000000000000000348';
12
12
  export const borrowOperations = ['borrow', 'payback'];
13
+ // Proxies Morpho's GraphQL API through the DFS backend, which attaches the private API key
14
+ // for better rate limits (DEV-13673)
15
+ export const MORPHO_API_URL = 'https://fe.defisaver.com/api/morpho/graphql';
@@ -133,7 +133,6 @@ export declare const _getUserPositions: (provider: PublicClient, network: Networ
133
133
  merklBorrowIncentives: import("../types").IncentiveData[];
134
134
  ratio: string;
135
135
  collRatio: string;
136
- safetyRatio: string;
137
136
  minRatio: string;
138
137
  totalInterestUsd: string;
139
138
  leveragedType?: import("../types").LeverageType;
@@ -168,7 +167,6 @@ export declare const getUserPositions: (provider: EthereumProvider, network: Net
168
167
  merklBorrowIncentives: import("../types").IncentiveData[];
169
168
  ratio: string;
170
169
  collRatio: string;
171
- safetyRatio: string;
172
170
  minRatio: string;
173
171
  totalInterestUsd: string;
174
172
  leveragedType?: import("../types").LeverageType;
@@ -203,7 +201,6 @@ export declare const _getUserPositionsPortfolio: (provider: PublicClient, networ
203
201
  merklBorrowIncentives: import("../types").IncentiveData[];
204
202
  ratio: string;
205
203
  collRatio: string;
206
- safetyRatio: string;
207
204
  minRatio: string;
208
205
  totalInterestUsd: string;
209
206
  leveragedType?: import("../types").LeverageType;
@@ -224,5 +221,3 @@ export declare const _getUserPositionsPortfolio: (provider: PublicClient, networ
224
221
  nftId: string;
225
222
  } | undefined;
226
223
  }[]>;
227
- export declare const _getAllFluidMarketDataPortfolio: (provider: PublicClient, network: NetworkNumber) => Promise<Record<string, FluidMarketData>>;
228
- export declare const getAllFluidMarketDataPortfolio: (provider: EthereumProvider, network: NetworkNumber) => Promise<Record<string, FluidMarketData>>;
@@ -1381,36 +1381,3 @@ export const _getUserPositionsPortfolio = (provider, network, user) => __awaiter
1381
1381
  userData: userData[i],
1382
1382
  })).filter(md => md.marketData !== undefined);
1383
1383
  });
1384
- export const _getAllFluidMarketDataPortfolio = (provider, network) => __awaiter(void 0, void 0, void 0, function* () {
1385
- const versions = getFluidVersionsDataForNetwork(network);
1386
- if (versions.length === 0)
1387
- return {};
1388
- const view = FluidViewContractViem(provider, network);
1389
- const vaultsData = yield Promise.all(versions.map((version) => view.read.getVaultData([version.marketAddress])));
1390
- const tokens = Array.from(new Set(vaultsData.map((vaultData) => {
1391
- const vaultTokens = [getAssetInfoByAddress(vaultData.supplyToken0, network).symbol, getAssetInfoByAddress(vaultData.borrowToken0, network).symbol];
1392
- if (vaultData.supplyToken1 && !compareAddresses(ZERO_ADDRESS, vaultData.supplyToken1))
1393
- vaultTokens.push(getAssetInfoByAddress(vaultData.supplyToken1, network).symbol);
1394
- if (vaultData.borrowToken1 && !compareAddresses(ZERO_ADDRESS, vaultData.borrowToken1))
1395
- vaultTokens.push(getAssetInfoByAddress(vaultData.borrowToken1, network).symbol);
1396
- return vaultTokens;
1397
- }).flat()));
1398
- // ETH and WBTC needed for other tokens prices
1399
- if (!tokens.includes('ETH'))
1400
- tokens.push('ETH');
1401
- if (!tokens.includes('WBTC'))
1402
- tokens.push('WBTC');
1403
- const [tokenPrices, merklCampaigns] = yield Promise.all([
1404
- getTokensPricesForPortfolio(tokens, provider, network),
1405
- getFluidMerklCampaigns(network),
1406
- ]);
1407
- const parsedMarketsData = yield Promise.all(vaultsData.map((vaultData) => __awaiter(void 0, void 0, void 0, function* () { return parseMarketData(provider, vaultData, network, tokenPrices); })));
1408
- const marketsData = {};
1409
- parsedMarketsData.forEach((marketData, i) => {
1410
- if (!marketData)
1411
- return;
1412
- marketsData[versions[i].value] = attachFluidMerklIncentives(marketData, merklCampaigns);
1413
- });
1414
- return marketsData;
1415
- });
1416
- export const getAllFluidMarketDataPortfolio = (provider, network) => __awaiter(void 0, void 0, void 0, function* () { return _getAllFluidMarketDataPortfolio(getViemProvider(provider, network, { batch: { multicall: true } }), network); });
@@ -125,9 +125,6 @@ export const aaveAnyGetAggregatedPositionData = (_a) => {
125
125
  return new Dec(suppliedUsd).mul(effectiveLtv);
126
126
  });
127
127
  payload.safetyRatioWithLtvZeroFallback = +payload.suppliedUsd ? new Dec(payload.borrowLimitWithLtvZeroFallbackUsd).div(payload.borrowedUsd).mul(100).toString() : '0';
128
- // Normalised safety ratio (100 = liquidation on every protocol): the automation ratio above, falling back
129
- // to the regular ratio when the fallback carries its '0' placeholder.
130
- payload.safetyRatio = +payload.safetyRatioWithLtvZeroFallback ? payload.safetyRatioWithLtvZeroFallback : payload.ratio;
131
128
  payload.liqRatio = new Dec(payload.borrowLimitUsd).div(payload.liquidationLimitUsd).toString();
132
129
  payload.liqPercent = new Dec(payload.borrowLimitUsd).div(payload.liquidationLimitUsd).mul(100).toString();
133
130
  const { leveragedType, leveragedAsset } = isLeveragedPos(usedAssets);
@@ -208,7 +208,6 @@ export const aaveV4GetAggregatedPositionData = ({ usedAssets, assetsData, networ
208
208
  payload.ratio = +payload.suppliedUsd ? new Dec(payload.borrowLimitUsd).div(payload.borrowedUsd).mul(100).toString() : '0';
209
209
  payload.minRatio = '100';
210
210
  payload.collRatio = +payload.suppliedUsd ? new Dec(payload.suppliedCollateralUsd).div(payload.borrowedUsd).mul(100).toString() : '0';
211
- payload.safetyRatio = payload.ratio;
212
211
  payload.liqRatio = new Dec(payload.borrowLimitUsd).div(payload.liquidationLimitUsd).toString();
213
212
  payload.liqPercent = new Dec(payload.borrowLimitUsd).div(payload.liquidationLimitUsd).mul(100).toString();
214
213
  const { leveragedType, leveragedAsset } = isLeveragedPosAaveV4(usedAssets);
@@ -93,7 +93,6 @@ export const getCompoundV2AggregatedData = (_a) => {
93
93
  payload.collRatio = payload.borrowedUsd && payload.borrowedUsd !== '0'
94
94
  ? new Dec(payload.suppliedCollateralUsd).div(payload.borrowedUsd).mul(100).toString()
95
95
  : '0';
96
- payload.safetyRatio = payload.ratio;
97
96
  // Calculate borrow limits per asset
98
97
  Object.values(usedAssets).forEach((item) => {
99
98
  if (item.isBorrowed) {
@@ -135,7 +134,6 @@ export const getCompoundV3AggregatedData = (_a) => {
135
134
  payload.incentiveUsd = incentiveUsd;
136
135
  payload.totalInterestUsd = totalInterestUsd;
137
136
  payload.minRatio = '100';
138
- payload.safetyRatio = payload.ratio;
139
137
  payload.liqRatio = new Dec(payload.borrowLimitUsd).div(payload.liquidationLimitUsd).toString();
140
138
  payload.liqPercent = new Dec(payload.borrowLimitUsd).div(payload.liquidationLimitUsd).mul(100).toString();
141
139
  payload.minDebt = assetsData[selectedMarket.baseAsset].minDebt;
@@ -28,8 +28,6 @@ export const getCrvUsdAggregatedData = (_a) => {
28
28
  : '0';
29
29
  // this is all approximation
30
30
  payload.minAllowedRatio = mapRange(numOfBands, 4, 50, 115, 140); // collateral ratio
31
- // Collateral ratio rebased so 100 sits on the band-derived minimum (normalised safety ratio, same scale as the other protocols).
32
- payload.safetyRatio = loanExists && payload.minAllowedRatio ? new Dec(payload.ratio).div(payload.minAllowedRatio).mul(100).toString() : '0';
33
31
  payload.collFactor = new Dec(1).div(payload.minAllowedRatio).mul(100).toString(); // collateral factor = 1 / collateral ratio
34
32
  // only take in consideration collAsset
35
33
  payload.borrowLimitUsd = ((_b = usedAssets === null || usedAssets === void 0 ? void 0 : usedAssets[selectedMarket.collAsset]) === null || _b === void 0 ? void 0 : _b.isSupplied)
@@ -78,7 +78,6 @@ export const getFluidAggregatedData = ({ usedAssets, assetsData, marketData, },
78
78
  payload.ratio = +payload.suppliedUsd ? new Dec(payload.borrowLimitUsd).div(payload.borrowedUsd).mul(100).toString() : '0';
79
79
  payload.collRatio = +payload.suppliedUsd ? new Dec(payload.suppliedUsd).div(payload.borrowedUsd).mul(100).toString() : '0';
80
80
  payload.minRatio = marketData.minRatio;
81
- payload.safetyRatio = payload.ratio;
82
81
  const { leveragedType, leveragedAsset } = isLeveragedPos(usedAssets);
83
82
  payload.leveragedType = leveragedType;
84
83
  payload.liquidationPrice = '';
@@ -41,7 +41,6 @@ export const getLiquityV2AggregatedPositionData = ({ usedAssets, assetsData, min
41
41
  payload.leftToBorrowUsd = leftToBorrowUsd.lte('0') ? '0' : leftToBorrowUsd.toString();
42
42
  payload.ratio = (+payload.suppliedUsd && +payload.borrowedUsd) ? new Dec(payload.borrowLimitUsd).div(payload.borrowedUsd).mul(100).toString() : '0';
43
43
  payload.collRatio = (+payload.suppliedUsd && +payload.borrowedUsd) ? new Dec(payload.suppliedUsd).div(payload.borrowedUsd).mul(100).toString() : '0';
44
- payload.safetyRatio = payload.ratio;
45
44
  const { netApy, incentiveUsd, totalInterestUsd } = calculateNetApyLiquityV2(usedAssets, assetsData, interestRate);
46
45
  payload.netApy = netApy;
47
46
  payload.incentiveUsd = incentiveUsd;