@merkl/api 0.10.263 → 0.10.265

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 (35) hide show
  1. package/dist/database/api/.generated/edge.js +6 -4
  2. package/dist/database/api/.generated/index-browser.js +3 -1
  3. package/dist/database/api/.generated/index.d.ts +3 -1
  4. package/dist/database/api/.generated/index.js +6 -4
  5. package/dist/database/api/.generated/package.json +1 -1
  6. package/dist/database/api/.generated/schema.prisma +2 -0
  7. package/dist/database/api/.generated/wasm.js +3 -1
  8. package/dist/database/api/seeder/resources/protocol.d.ts +7 -0
  9. package/dist/database/api/seeder/resources/protocol.js +1 -0
  10. package/dist/src/backgroundJobs/jobs/campaignsCacheUpdater.js +0 -4
  11. package/dist/src/eden/index.d.ts +15 -15
  12. package/dist/src/entities/opportunity.js +35 -0
  13. package/dist/src/index.d.ts +5 -5
  14. package/dist/src/libs/campaigns/campaignTypes/SILODynamicData.d.ts +1 -1
  15. package/dist/src/libs/campaigns/campaignTypes/SILODynamicData.js +6 -4
  16. package/dist/src/libs/campaigns/campaignTypes/VestDynamicData.d.ts +5 -0
  17. package/dist/src/libs/campaigns/campaignTypes/VestDynamicData.js +61 -0
  18. package/dist/src/libs/campaigns/campaignsDynamicData.js +4 -0
  19. package/dist/src/libs/positions/prepareFetch.js +26 -0
  20. package/dist/src/modules/v4/campaign/campaign.controller.d.ts +2 -2
  21. package/dist/src/modules/v4/campaign/campaign.model.d.ts +3 -0
  22. package/dist/src/modules/v4/campaign/campaign.model.js +1 -0
  23. package/dist/src/modules/v4/opportunity/opportunity.controller.d.ts +3 -3
  24. package/dist/src/modules/v4/opportunity/opportunity.model.d.ts +2 -0
  25. package/dist/src/modules/v4/opportunity/opportunity.service.d.ts +5 -5
  26. package/dist/src/modules/v4/opportunity/opportunity.service.js +16 -6
  27. package/dist/src/modules/v4/opportunity/subservices/getIonMetadata.service.d.ts +3 -0
  28. package/dist/src/modules/v4/opportunity/subservices/getIonMetadata.service.js +13 -0
  29. package/dist/src/modules/v4/opportunity/subservices/getVestMetaData.d.ts +3 -0
  30. package/dist/src/modules/v4/opportunity/subservices/getVestMetaData.js +10 -0
  31. package/dist/src/modules/v4/protocol/protocol.model.d.ts +1 -1
  32. package/dist/src/modules/v4/protocol/protocol.model.js +1 -0
  33. package/dist/src/modules/v4/router.d.ts +5 -5
  34. package/dist/tsconfig.package.tsbuildinfo +1 -1
  35. package/package.json +1 -1
@@ -125,7 +125,7 @@ declare const eden: {
125
125
  } & {
126
126
  price?: number | null | undefined;
127
127
  })[];
128
- mainProtocol: "morpho" | "aura" | "poolside" | "gearbox" | "fluid" | "compound" | "ionic" | "layerbank" | "moonwell" | "fenix" | "syncswap" | "beefy" | "aerodrome" | "velodrome" | "curve" | "akron" | "dragonswap" | "koi" | "baseswap" | "zkswap" | "rfx" | "woofi" | "zkSwapThreePool" | "venus" | "reactor_fusion" | "balancer" | "aave" | "arthswap" | "camelot" | "crust" | "horiza" | "izumi" | "kim" | "pancakeswap-v3" | "quickswap-algebra" | "quickswap-uni" | "ramses" | "retro" | "stryke" | "stryke-pcs" | "stryke-sushi" | "sushiswap-v3" | "swapr" | "thruster" | "uniswap-v3" | "voltage" | "zero" | "supswap-v3" | "thirdtrade" | "uniswap-v2" | "syncswap-v3" | "neptune" | "radiant" | "euler" | "sturdy" | "frax" | "silo" | "coumpound" | "dolomite" | "badger" | "ajna" | "ion" | "eigenlayer" | undefined;
128
+ mainProtocol: "morpho" | "aura" | "poolside" | "gearbox" | "fluid" | "compound" | "ionic" | "layerbank" | "moonwell" | "fenix" | "syncswap" | "beefy" | "aerodrome" | "velodrome" | "curve" | "akron" | "dragonswap" | "koi" | "baseswap" | "zkswap" | "rfx" | "woofi" | "zkSwapThreePool" | "venus" | "reactor_fusion" | "balancer" | "aave" | "arthswap" | "camelot" | "crust" | "horiza" | "izumi" | "kim" | "pancakeswap-v3" | "quickswap-algebra" | "quickswap-uni" | "ramses" | "retro" | "stryke" | "stryke-pcs" | "stryke-sushi" | "sushiswap-v3" | "swapr" | "thruster" | "uniswap-v3" | "voltage" | "zero" | "supswap-v3" | "thirdtrade" | "uniswap-v2" | "syncswap-v3" | "neptune" | "radiant" | "euler" | "sturdy" | "frax" | "silo" | "coumpound" | "dolomite" | "badger" | "ajna" | "ion" | "eigenlayer" | "vest" | undefined;
129
129
  depositUrl: any;
130
130
  tags: string[];
131
131
  };
@@ -415,7 +415,7 @@ declare const eden: {
415
415
  depositUrl?: string | undefined;
416
416
  protocols?: string[] | undefined;
417
417
  mainProtocol?: string | undefined;
418
- type: "INVALID" | "ERC20" | "CLAMM" | "ERC20_SNAPSHOT" | "JSON_AIRDROP" | "SILO" | "RADIANT" | "MORPHO" | "DOLOMITE" | "BADGER" | "COMPOUND" | "AJNA" | "EULER" | "UNISWAP_V4" | "ION" | "EIGENLAYER";
418
+ type: "INVALID" | "ERC20" | "CLAMM" | "ERC20_SNAPSHOT" | "JSON_AIRDROP" | "SILO" | "RADIANT" | "MORPHO" | "DOLOMITE" | "BADGER" | "COMPOUND" | "AJNA" | "EULER" | "UNISWAP_V4" | "ION" | "EIGENLAYER" | "ERC20TRANSFERS" | "VEST";
419
419
  tokens: {
420
420
  chainId: number;
421
421
  address: string;
@@ -468,6 +468,7 @@ declare const eden: {
468
468
  fetch?: RequestInit | undefined;
469
469
  }) => Promise<import("@elysiajs/eden").Treaty.TreatyResponse<{
470
470
  200: {
471
+ apr: number;
471
472
  aprRecord: {
472
473
  cumulated: number;
473
474
  timestamp: bigint;
@@ -552,7 +553,6 @@ declare const eden: {
552
553
  chainId: number;
553
554
  action: import("../../database/api/.generated").$Enums.OpportunityAction;
554
555
  tvl: number;
555
- apr: number;
556
556
  dailyRewards: number;
557
557
  }[];
558
558
  }>>;
@@ -655,7 +655,7 @@ declare const eden: {
655
655
  get: (options: {
656
656
  headers?: Record<string, unknown> | undefined;
657
657
  query: {
658
- type?: "INVALID" | "ERC20" | "CLAMM" | "ERC20_SNAPSHOT" | "JSON_AIRDROP" | "SILO" | "RADIANT" | "MORPHO" | "DOLOMITE" | "BADGER" | "COMPOUND" | "AJNA" | "EULER" | "UNISWAP_V4" | "ION" | "EIGENLAYER" | undefined;
658
+ type?: "INVALID" | "ERC20" | "CLAMM" | "ERC20_SNAPSHOT" | "JSON_AIRDROP" | "SILO" | "RADIANT" | "MORPHO" | "DOLOMITE" | "BADGER" | "COMPOUND" | "AJNA" | "EULER" | "UNISWAP_V4" | "ION" | "EIGENLAYER" | "ERC20TRANSFERS" | "VEST" | undefined;
659
659
  items?: number | undefined;
660
660
  subType?: number | undefined;
661
661
  page?: number | undefined;
@@ -724,7 +724,7 @@ declare const eden: {
724
724
  get: (options: {
725
725
  headers?: Record<string, unknown> | undefined;
726
726
  query: {
727
- type?: "INVALID" | "ERC20" | "CLAMM" | "ERC20_SNAPSHOT" | "JSON_AIRDROP" | "SILO" | "RADIANT" | "MORPHO" | "DOLOMITE" | "BADGER" | "COMPOUND" | "AJNA" | "EULER" | "UNISWAP_V4" | "ION" | "EIGENLAYER" | undefined;
727
+ type?: "INVALID" | "ERC20" | "CLAMM" | "ERC20_SNAPSHOT" | "JSON_AIRDROP" | "SILO" | "RADIANT" | "MORPHO" | "DOLOMITE" | "BADGER" | "COMPOUND" | "AJNA" | "EULER" | "UNISWAP_V4" | "ION" | "EIGENLAYER" | "ERC20TRANSFERS" | "VEST" | undefined;
728
728
  items?: number | undefined;
729
729
  subType?: number | undefined;
730
730
  page?: number | undefined;
@@ -2954,7 +2954,7 @@ export declare const MerklApi: (domain: string | import("elysia").default<"", fa
2954
2954
  depositUrl?: string | undefined;
2955
2955
  protocols?: string[] | undefined;
2956
2956
  mainProtocol?: string | undefined;
2957
- type: "INVALID" | "ERC20" | "CLAMM" | "ERC20_SNAPSHOT" | "JSON_AIRDROP" | "SILO" | "RADIANT" | "MORPHO" | "DOLOMITE" | "BADGER" | "COMPOUND" | "AJNA" | "EULER" | "UNISWAP_V4" | "ION" | "EIGENLAYER";
2957
+ type: "INVALID" | "ERC20" | "CLAMM" | "ERC20_SNAPSHOT" | "JSON_AIRDROP" | "SILO" | "RADIANT" | "MORPHO" | "DOLOMITE" | "BADGER" | "COMPOUND" | "AJNA" | "EULER" | "UNISWAP_V4" | "ION" | "EIGENLAYER" | "ERC20TRANSFERS" | "VEST";
2958
2958
  tokens: {
2959
2959
  chainId: number;
2960
2960
  address: string;
@@ -3023,7 +3023,7 @@ export declare const MerklApi: (domain: string | import("elysia").default<"", fa
3023
3023
  } & {
3024
3024
  price?: number | null | undefined;
3025
3025
  })[];
3026
- mainProtocol: "morpho" | "aura" | "poolside" | "gearbox" | "fluid" | "compound" | "ionic" | "layerbank" | "moonwell" | "fenix" | "syncswap" | "beefy" | "aerodrome" | "velodrome" | "curve" | "akron" | "dragonswap" | "koi" | "baseswap" | "zkswap" | "rfx" | "woofi" | "zkSwapThreePool" | "venus" | "reactor_fusion" | "balancer" | "aave" | "arthswap" | "camelot" | "crust" | "horiza" | "izumi" | "kim" | "pancakeswap-v3" | "quickswap-algebra" | "quickswap-uni" | "ramses" | "retro" | "stryke" | "stryke-pcs" | "stryke-sushi" | "sushiswap-v3" | "swapr" | "thruster" | "uniswap-v3" | "voltage" | "zero" | "supswap-v3" | "thirdtrade" | "uniswap-v2" | "syncswap-v3" | "neptune" | "radiant" | "euler" | "sturdy" | "frax" | "silo" | "coumpound" | "dolomite" | "badger" | "ajna" | "ion" | "eigenlayer" | undefined;
3026
+ mainProtocol: "morpho" | "aura" | "poolside" | "gearbox" | "fluid" | "compound" | "ionic" | "layerbank" | "moonwell" | "fenix" | "syncswap" | "beefy" | "aerodrome" | "velodrome" | "curve" | "akron" | "dragonswap" | "koi" | "baseswap" | "zkswap" | "rfx" | "woofi" | "zkSwapThreePool" | "venus" | "reactor_fusion" | "balancer" | "aave" | "arthswap" | "camelot" | "crust" | "horiza" | "izumi" | "kim" | "pancakeswap-v3" | "quickswap-algebra" | "quickswap-uni" | "ramses" | "retro" | "stryke" | "stryke-pcs" | "stryke-sushi" | "sushiswap-v3" | "swapr" | "thruster" | "uniswap-v3" | "voltage" | "zero" | "supswap-v3" | "thirdtrade" | "uniswap-v2" | "syncswap-v3" | "neptune" | "radiant" | "euler" | "sturdy" | "frax" | "silo" | "coumpound" | "dolomite" | "badger" | "ajna" | "ion" | "eigenlayer" | "vest" | undefined;
3027
3027
  depositUrl: any;
3028
3028
  tags: string[];
3029
3029
  };
@@ -3056,6 +3056,7 @@ export declare const MerklApi: (domain: string | import("elysia").default<"", fa
3056
3056
  headers: unknown;
3057
3057
  response: {
3058
3058
  200: {
3059
+ apr: number;
3059
3060
  aprRecord: {
3060
3061
  cumulated: number;
3061
3062
  timestamp: bigint;
@@ -3140,7 +3141,6 @@ export declare const MerklApi: (domain: string | import("elysia").default<"", fa
3140
3141
  chainId: number;
3141
3142
  action: import("../../database/api/.generated").$Enums.OpportunityAction;
3142
3143
  tvl: number;
3143
- apr: number;
3144
3144
  dailyRewards: number;
3145
3145
  }[];
3146
3146
  };
@@ -3567,7 +3567,7 @@ export declare const MerklApi: (domain: string | import("elysia").default<"", fa
3567
3567
  body: unknown;
3568
3568
  params: {};
3569
3569
  query: {
3570
- type?: "INVALID" | "ERC20" | "CLAMM" | "ERC20_SNAPSHOT" | "JSON_AIRDROP" | "SILO" | "RADIANT" | "MORPHO" | "DOLOMITE" | "BADGER" | "COMPOUND" | "AJNA" | "EULER" | "UNISWAP_V4" | "ION" | "EIGENLAYER" | undefined;
3570
+ type?: "INVALID" | "ERC20" | "CLAMM" | "ERC20_SNAPSHOT" | "JSON_AIRDROP" | "SILO" | "RADIANT" | "MORPHO" | "DOLOMITE" | "BADGER" | "COMPOUND" | "AJNA" | "EULER" | "UNISWAP_V4" | "ION" | "EIGENLAYER" | "ERC20TRANSFERS" | "VEST" | undefined;
3571
3571
  items?: number | undefined;
3572
3572
  subType?: number | undefined;
3573
3573
  page?: number | undefined;
@@ -3639,7 +3639,7 @@ export declare const MerklApi: (domain: string | import("elysia").default<"", fa
3639
3639
  body: unknown;
3640
3640
  params: {};
3641
3641
  query: {
3642
- type?: "INVALID" | "ERC20" | "CLAMM" | "ERC20_SNAPSHOT" | "JSON_AIRDROP" | "SILO" | "RADIANT" | "MORPHO" | "DOLOMITE" | "BADGER" | "COMPOUND" | "AJNA" | "EULER" | "UNISWAP_V4" | "ION" | "EIGENLAYER" | undefined;
3642
+ type?: "INVALID" | "ERC20" | "CLAMM" | "ERC20_SNAPSHOT" | "JSON_AIRDROP" | "SILO" | "RADIANT" | "MORPHO" | "DOLOMITE" | "BADGER" | "COMPOUND" | "AJNA" | "EULER" | "UNISWAP_V4" | "ION" | "EIGENLAYER" | "ERC20TRANSFERS" | "VEST" | undefined;
3643
3643
  items?: number | undefined;
3644
3644
  subType?: number | undefined;
3645
3645
  page?: number | undefined;
@@ -6444,7 +6444,7 @@ export declare const MerklApi: (domain: string | import("elysia").default<"", fa
6444
6444
  } & {
6445
6445
  price?: number | null | undefined;
6446
6446
  })[];
6447
- mainProtocol: "morpho" | "aura" | "poolside" | "gearbox" | "fluid" | "compound" | "ionic" | "layerbank" | "moonwell" | "fenix" | "syncswap" | "beefy" | "aerodrome" | "velodrome" | "curve" | "akron" | "dragonswap" | "koi" | "baseswap" | "zkswap" | "rfx" | "woofi" | "zkSwapThreePool" | "venus" | "reactor_fusion" | "balancer" | "aave" | "arthswap" | "camelot" | "crust" | "horiza" | "izumi" | "kim" | "pancakeswap-v3" | "quickswap-algebra" | "quickswap-uni" | "ramses" | "retro" | "stryke" | "stryke-pcs" | "stryke-sushi" | "sushiswap-v3" | "swapr" | "thruster" | "uniswap-v3" | "voltage" | "zero" | "supswap-v3" | "thirdtrade" | "uniswap-v2" | "syncswap-v3" | "neptune" | "radiant" | "euler" | "sturdy" | "frax" | "silo" | "coumpound" | "dolomite" | "badger" | "ajna" | "ion" | "eigenlayer" | undefined;
6447
+ mainProtocol: "morpho" | "aura" | "poolside" | "gearbox" | "fluid" | "compound" | "ionic" | "layerbank" | "moonwell" | "fenix" | "syncswap" | "beefy" | "aerodrome" | "velodrome" | "curve" | "akron" | "dragonswap" | "koi" | "baseswap" | "zkswap" | "rfx" | "woofi" | "zkSwapThreePool" | "venus" | "reactor_fusion" | "balancer" | "aave" | "arthswap" | "camelot" | "crust" | "horiza" | "izumi" | "kim" | "pancakeswap-v3" | "quickswap-algebra" | "quickswap-uni" | "ramses" | "retro" | "stryke" | "stryke-pcs" | "stryke-sushi" | "sushiswap-v3" | "swapr" | "thruster" | "uniswap-v3" | "voltage" | "zero" | "supswap-v3" | "thirdtrade" | "uniswap-v2" | "syncswap-v3" | "neptune" | "radiant" | "euler" | "sturdy" | "frax" | "silo" | "coumpound" | "dolomite" | "badger" | "ajna" | "ion" | "eigenlayer" | "vest" | undefined;
6448
6448
  depositUrl: any;
6449
6449
  tags: string[];
6450
6450
  };
@@ -6734,7 +6734,7 @@ export declare const MerklApi: (domain: string | import("elysia").default<"", fa
6734
6734
  depositUrl?: string | undefined;
6735
6735
  protocols?: string[] | undefined;
6736
6736
  mainProtocol?: string | undefined;
6737
- type: "INVALID" | "ERC20" | "CLAMM" | "ERC20_SNAPSHOT" | "JSON_AIRDROP" | "SILO" | "RADIANT" | "MORPHO" | "DOLOMITE" | "BADGER" | "COMPOUND" | "AJNA" | "EULER" | "UNISWAP_V4" | "ION" | "EIGENLAYER";
6737
+ type: "INVALID" | "ERC20" | "CLAMM" | "ERC20_SNAPSHOT" | "JSON_AIRDROP" | "SILO" | "RADIANT" | "MORPHO" | "DOLOMITE" | "BADGER" | "COMPOUND" | "AJNA" | "EULER" | "UNISWAP_V4" | "ION" | "EIGENLAYER" | "ERC20TRANSFERS" | "VEST";
6738
6738
  tokens: {
6739
6739
  chainId: number;
6740
6740
  address: string;
@@ -6787,6 +6787,7 @@ export declare const MerklApi: (domain: string | import("elysia").default<"", fa
6787
6787
  fetch?: RequestInit | undefined;
6788
6788
  }) => Promise<import("@elysiajs/eden").Treaty.TreatyResponse<{
6789
6789
  200: {
6790
+ apr: number;
6790
6791
  aprRecord: {
6791
6792
  cumulated: number;
6792
6793
  timestamp: bigint;
@@ -6871,7 +6872,6 @@ export declare const MerklApi: (domain: string | import("elysia").default<"", fa
6871
6872
  chainId: number;
6872
6873
  action: import("../../database/api/.generated").$Enums.OpportunityAction;
6873
6874
  tvl: number;
6874
- apr: number;
6875
6875
  dailyRewards: number;
6876
6876
  }[];
6877
6877
  }>>;
@@ -6974,7 +6974,7 @@ export declare const MerklApi: (domain: string | import("elysia").default<"", fa
6974
6974
  get: (options: {
6975
6975
  headers?: Record<string, unknown> | undefined;
6976
6976
  query: {
6977
- type?: "INVALID" | "ERC20" | "CLAMM" | "ERC20_SNAPSHOT" | "JSON_AIRDROP" | "SILO" | "RADIANT" | "MORPHO" | "DOLOMITE" | "BADGER" | "COMPOUND" | "AJNA" | "EULER" | "UNISWAP_V4" | "ION" | "EIGENLAYER" | undefined;
6977
+ type?: "INVALID" | "ERC20" | "CLAMM" | "ERC20_SNAPSHOT" | "JSON_AIRDROP" | "SILO" | "RADIANT" | "MORPHO" | "DOLOMITE" | "BADGER" | "COMPOUND" | "AJNA" | "EULER" | "UNISWAP_V4" | "ION" | "EIGENLAYER" | "ERC20TRANSFERS" | "VEST" | undefined;
6978
6978
  items?: number | undefined;
6979
6979
  subType?: number | undefined;
6980
6980
  page?: number | undefined;
@@ -7043,7 +7043,7 @@ export declare const MerklApi: (domain: string | import("elysia").default<"", fa
7043
7043
  get: (options: {
7044
7044
  headers?: Record<string, unknown> | undefined;
7045
7045
  query: {
7046
- type?: "INVALID" | "ERC20" | "CLAMM" | "ERC20_SNAPSHOT" | "JSON_AIRDROP" | "SILO" | "RADIANT" | "MORPHO" | "DOLOMITE" | "BADGER" | "COMPOUND" | "AJNA" | "EULER" | "UNISWAP_V4" | "ION" | "EIGENLAYER" | undefined;
7046
+ type?: "INVALID" | "ERC20" | "CLAMM" | "ERC20_SNAPSHOT" | "JSON_AIRDROP" | "SILO" | "RADIANT" | "MORPHO" | "DOLOMITE" | "BADGER" | "COMPOUND" | "AJNA" | "EULER" | "UNISWAP_V4" | "ION" | "EIGENLAYER" | "ERC20TRANSFERS" | "VEST" | undefined;
7047
7047
  items?: number | undefined;
7048
7048
  subType?: number | undefined;
7049
7049
  page?: number | undefined;
@@ -430,6 +430,41 @@ export const extractOpportunities = {
430
430
  };
431
431
  return opportunity;
432
432
  },
433
+ [Campaign.VEST]: (campaign, campaigns, prices) => {
434
+ const { chainId, tvl, campaignParameters: params, computeChainId } = campaign;
435
+ const { active, all } = campaigns;
436
+ const aprBreakdown = active.reduce((res, campaign) => {
437
+ res[`Campaign ${campaign.campaignId.slice(0, 8)}`] = {
438
+ value: campaign.apr ?? 0,
439
+ address: campaign.campaignId,
440
+ type: EAprBreakdownType.DETAILS,
441
+ };
442
+ return res;
443
+ }, {});
444
+ // @Hugo WIP todo for aprBreakdown2
445
+ const aprBreakdown2 = getCampaignsApr(active);
446
+ const opportunity = {
447
+ id: `${Campaign.VEST}_${campaign.mainParameter}`,
448
+ platform: "Vest supply",
449
+ name: ["Vest supply treasury"].join(" "),
450
+ chainId: !computeChainId ? chainId : computeChainId,
451
+ distributionChainId: chainId,
452
+ tvl,
453
+ action: "lend",
454
+ subtype: 0,
455
+ status: getStatus(all),
456
+ tags: getTags(campaigns.all),
457
+ dailyrewards: getDailyRewards(active, prices),
458
+ tokenIcons: ["0x3355df6D4c9C3035724Fd0e3914dE96A5a83aaf4"],
459
+ campaigns: { ...campaigns, type: Campaign.VEST, ids: campaigns.all.map(c => c.campaignId) },
460
+ rewardTokenIcons: getRewardTokenIcons(campaigns.active),
461
+ dailyRewardTokens: getRewardTokens(campaigns.active),
462
+ apr: getApr(active),
463
+ aprBreakdown,
464
+ aprBreakdown2,
465
+ };
466
+ return opportunity;
467
+ },
433
468
  [Campaign.AJNA]: (campaign, campaigns, prices) => {
434
469
  const { chainId, tvl, campaignSubType, campaignParameters: params, computeChainId } = campaign;
435
470
  const { active, all } = campaigns;
@@ -152,7 +152,7 @@ declare const app: Elysia<"", false, {
152
152
  depositUrl?: string | undefined;
153
153
  protocols?: string[] | undefined;
154
154
  mainProtocol?: string | undefined;
155
- type: "INVALID" | "ERC20" | "CLAMM" | "ERC20_SNAPSHOT" | "JSON_AIRDROP" | "SILO" | "RADIANT" | "MORPHO" | "DOLOMITE" | "BADGER" | "COMPOUND" | "AJNA" | "EULER" | "UNISWAP_V4" | "ION" | "EIGENLAYER";
155
+ type: "INVALID" | "ERC20" | "CLAMM" | "ERC20_SNAPSHOT" | "JSON_AIRDROP" | "SILO" | "RADIANT" | "MORPHO" | "DOLOMITE" | "BADGER" | "COMPOUND" | "AJNA" | "EULER" | "UNISWAP_V4" | "ION" | "EIGENLAYER" | "ERC20TRANSFERS" | "VEST";
156
156
  tokens: {
157
157
  chainId: number;
158
158
  address: string;
@@ -221,7 +221,7 @@ declare const app: Elysia<"", false, {
221
221
  } & {
222
222
  price?: number | null | undefined;
223
223
  })[];
224
- mainProtocol: "morpho" | "aura" | "poolside" | "gearbox" | "fluid" | "compound" | "ionic" | "layerbank" | "moonwell" | "fenix" | "syncswap" | "beefy" | "aerodrome" | "velodrome" | "curve" | "akron" | "dragonswap" | "koi" | "baseswap" | "zkswap" | "rfx" | "woofi" | "zkSwapThreePool" | "venus" | "reactor_fusion" | "balancer" | "aave" | "arthswap" | "camelot" | "crust" | "horiza" | "izumi" | "kim" | "pancakeswap-v3" | "quickswap-algebra" | "quickswap-uni" | "ramses" | "retro" | "stryke" | "stryke-pcs" | "stryke-sushi" | "sushiswap-v3" | "swapr" | "thruster" | "uniswap-v3" | "voltage" | "zero" | "supswap-v3" | "thirdtrade" | "uniswap-v2" | "syncswap-v3" | "neptune" | "radiant" | "euler" | "sturdy" | "frax" | "silo" | "coumpound" | "dolomite" | "badger" | "ajna" | "ion" | "eigenlayer" | undefined;
224
+ mainProtocol: "morpho" | "aura" | "poolside" | "gearbox" | "fluid" | "compound" | "ionic" | "layerbank" | "moonwell" | "fenix" | "syncswap" | "beefy" | "aerodrome" | "velodrome" | "curve" | "akron" | "dragonswap" | "koi" | "baseswap" | "zkswap" | "rfx" | "woofi" | "zkSwapThreePool" | "venus" | "reactor_fusion" | "balancer" | "aave" | "arthswap" | "camelot" | "crust" | "horiza" | "izumi" | "kim" | "pancakeswap-v3" | "quickswap-algebra" | "quickswap-uni" | "ramses" | "retro" | "stryke" | "stryke-pcs" | "stryke-sushi" | "sushiswap-v3" | "swapr" | "thruster" | "uniswap-v3" | "voltage" | "zero" | "supswap-v3" | "thirdtrade" | "uniswap-v2" | "syncswap-v3" | "neptune" | "radiant" | "euler" | "sturdy" | "frax" | "silo" | "coumpound" | "dolomite" | "badger" | "ajna" | "ion" | "eigenlayer" | "vest" | undefined;
225
225
  depositUrl: any;
226
226
  tags: string[];
227
227
  };
@@ -254,6 +254,7 @@ declare const app: Elysia<"", false, {
254
254
  headers: unknown;
255
255
  response: {
256
256
  200: {
257
+ apr: number;
257
258
  aprRecord: {
258
259
  cumulated: number;
259
260
  timestamp: bigint;
@@ -338,7 +339,6 @@ declare const app: Elysia<"", false, {
338
339
  chainId: number;
339
340
  action: import("../database/api/.generated").$Enums.OpportunityAction;
340
341
  tvl: number;
341
- apr: number;
342
342
  dailyRewards: number;
343
343
  }[];
344
344
  };
@@ -765,7 +765,7 @@ declare const app: Elysia<"", false, {
765
765
  body: unknown;
766
766
  params: {};
767
767
  query: {
768
- type?: "INVALID" | "ERC20" | "CLAMM" | "ERC20_SNAPSHOT" | "JSON_AIRDROP" | "SILO" | "RADIANT" | "MORPHO" | "DOLOMITE" | "BADGER" | "COMPOUND" | "AJNA" | "EULER" | "UNISWAP_V4" | "ION" | "EIGENLAYER" | undefined;
768
+ type?: "INVALID" | "ERC20" | "CLAMM" | "ERC20_SNAPSHOT" | "JSON_AIRDROP" | "SILO" | "RADIANT" | "MORPHO" | "DOLOMITE" | "BADGER" | "COMPOUND" | "AJNA" | "EULER" | "UNISWAP_V4" | "ION" | "EIGENLAYER" | "ERC20TRANSFERS" | "VEST" | undefined;
769
769
  items?: number | undefined;
770
770
  subType?: number | undefined;
771
771
  page?: number | undefined;
@@ -837,7 +837,7 @@ declare const app: Elysia<"", false, {
837
837
  body: unknown;
838
838
  params: {};
839
839
  query: {
840
- type?: "INVALID" | "ERC20" | "CLAMM" | "ERC20_SNAPSHOT" | "JSON_AIRDROP" | "SILO" | "RADIANT" | "MORPHO" | "DOLOMITE" | "BADGER" | "COMPOUND" | "AJNA" | "EULER" | "UNISWAP_V4" | "ION" | "EIGENLAYER" | undefined;
840
+ type?: "INVALID" | "ERC20" | "CLAMM" | "ERC20_SNAPSHOT" | "JSON_AIRDROP" | "SILO" | "RADIANT" | "MORPHO" | "DOLOMITE" | "BADGER" | "COMPOUND" | "AJNA" | "EULER" | "UNISWAP_V4" | "ION" | "EIGENLAYER" | "ERC20TRANSFERS" | "VEST" | undefined;
841
841
  items?: number | undefined;
842
842
  subType?: number | undefined;
843
843
  page?: number | undefined;
@@ -2,6 +2,6 @@ import { type Campaign, type CampaignDynamicData, type CampaignParameters, type
2
2
  import { utils } from "ethers";
3
3
  import type { UncachedResult } from "../../../utils/execute";
4
4
  export declare const SILO_INTERFACE: utils.Interface;
5
- type ReturnType = Partial<CampaignDynamicData<Campaign.SILO>[]>;
5
+ type ReturnType = Partial<CampaignDynamicData<Campaign.SILO>>[];
6
6
  export declare function SILODynamicData(chainId: MerklChainId, campaigns: CampaignParameters<Campaign.SILO>[]): Promise<UncachedResult<ReturnType>>;
7
7
  export {};
@@ -69,7 +69,9 @@ export async function SILODynamicData(chainId, campaigns) {
69
69
  symbol: campaign.campaignParameters.symbolTargetToken,
70
70
  })) ?? 0;
71
71
  let totalSupplyTargetToken = 0;
72
- for (const _forwarder of campaign.campaignParameters.forwarders) {
72
+ const forwarders = campaign.campaignParameters.forwarders ??
73
+ [];
74
+ for (const _forwarder of forwarders) {
73
75
  if (_forwarder.forwarderType === Forwarder.ERC20) {
74
76
  try {
75
77
  totalSupplyTargetToken += BN2Number(SILO_INTERFACE.decodeFunctionResult("assetStorage", result[i])[3 + campaign.campaignSubType], campaign.campaignParameters.decimalsTargetToken);
@@ -83,8 +85,8 @@ export async function SILODynamicData(chainId, campaigns) {
83
85
  const siloAsset = SILO_INTERFACE.decodeFunctionResult("siloAsset", siloAssetsCallsResults[j].returnData)[0];
84
86
  const siloAssetSymbol = ERC20Interface.decodeFunctionResult("symbol", result[i++])[0];
85
87
  // @BaptistG not sure to get this
86
- campaign.campaignParameters.forwarders[0].siloAsset = siloAsset;
87
- campaign.campaignParameters.forwarders[0].siloAssetSymbol = siloAssetSymbol;
88
+ forwarders[0].siloAsset = siloAsset;
89
+ forwarders[0].siloAssetSymbol = siloAssetSymbol;
88
90
  }
89
91
  }
90
92
  }
@@ -92,7 +94,7 @@ export async function SILODynamicData(chainId, campaigns) {
92
94
  j++;
93
95
  }
94
96
  // Remove all silo forwarders
95
- campaign.campaignParameters.forwarders = campaign.campaignParameters.forwarders.filter(forwarder => forwarder.forwarderType !== Forwarder.SILO);
97
+ campaign.campaignParameters.forwarders = forwarders.filter(forwarder => forwarder.forwarderType !== Forwarder.SILO);
96
98
  dynamicData.push({
97
99
  ...campaign,
98
100
  apr: (priceRewardToken *
@@ -0,0 +1,5 @@
1
+ import { type Campaign, type CampaignDynamicData, type CampaignParameters, type MerklChainId } from "@sdk";
2
+ import type { UncachedResult } from "../../../utils/execute";
3
+ export declare const VEST_TREASURY = "0x7ccF5BbeC69c790D27dA3b5398B9e0d6D6EeC9F3";
4
+ export declare const VEST_TOKEN = "0x3355df6D4c9C3035724Fd0e3914dE96A5a83aaf4";
5
+ export declare function VestDynamicData(_chainId: MerklChainId, campaigns: CampaignParameters<Campaign.VEST>[]): Promise<UncachedResult<Partial<CampaignDynamicData<Campaign.VEST>[]>>>;
@@ -0,0 +1,61 @@
1
+ import { BN2Number, ERC20Interface, YEAR, } from "@sdk";
2
+ import { log } from "../../../utils/logger";
3
+ import { Pricer } from "../../../utils/pricer";
4
+ export const VEST_TREASURY = "0x7ccF5BbeC69c790D27dA3b5398B9e0d6D6EeC9F3";
5
+ export const VEST_TOKEN = "0x3355df6D4c9C3035724Fd0e3914dE96A5a83aaf4";
6
+ export async function VestDynamicData(_chainId, campaigns) {
7
+ const pricer = await Pricer.load();
8
+ const calls = [];
9
+ for (const campaign of campaigns) {
10
+ calls.push({
11
+ allowFailure: true,
12
+ callData: ERC20Interface.encodeFunctionData("balanceOf", [VEST_TREASURY]),
13
+ target: VEST_TOKEN,
14
+ });
15
+ }
16
+ return {
17
+ cached: false,
18
+ call: {
19
+ callData: calls,
20
+ handler: () => { },
21
+ reducer: async (result) => {
22
+ let i = 0;
23
+ const dynamicData = [];
24
+ for (const campaign of campaigns) {
25
+ let totalSupply;
26
+ try {
27
+ totalSupply = ERC20Interface.decodeFunctionResult("balanceOf", result[i++])[0];
28
+ }
29
+ catch {
30
+ log.warn(`Error getting totalSupply for campaign ${campaign.campaignId}`);
31
+ totalSupply = 0.0000001;
32
+ }
33
+ const priceRewardToken = (await pricer.get({
34
+ address: campaign.rewardToken,
35
+ chainId: campaign.chainId,
36
+ symbol: campaign.campaignParameters.symbolRewardToken,
37
+ })) ?? 0;
38
+ const priceTargetToken = (await pricer.get({
39
+ address: VEST_TOKEN,
40
+ chainId: campaign.computeChainId,
41
+ symbol: VEST_TOKEN,
42
+ })) ?? 0;
43
+ const tvl = totalSupply * priceTargetToken;
44
+ dynamicData.push({
45
+ ...campaign,
46
+ apr: (priceRewardToken *
47
+ BN2Number(campaign.amount, campaign.campaignParameters.decimalsRewardToken) *
48
+ YEAR *
49
+ 100) /
50
+ campaign.campaignParameters.duration /
51
+ (totalSupply * priceTargetToken),
52
+ totalSupplyTargetToken: totalSupply,
53
+ tvl,
54
+ priceRewardToken: priceRewardToken,
55
+ });
56
+ }
57
+ return dynamicData;
58
+ },
59
+ },
60
+ };
61
+ }
@@ -14,6 +14,7 @@ import { JSON_AIRDROPDynamicData } from "./campaignTypes/JSON_AIRDROPDynamicData
14
14
  import { MORPHODynamicData } from "./campaignTypes/MORPHODynamicData";
15
15
  import { RadiantDynamicData } from "./campaignTypes/RadiantDynamicData";
16
16
  import { SILODynamicData } from "./campaignTypes/SILODynamicData";
17
+ import { VestDynamicData } from "./campaignTypes/VestDynamicData";
17
18
  export async function campaignsDynamicData(chainId, campaigns, type) {
18
19
  try {
19
20
  const tags = (await engineDbClient.campaignCreators.findMany()).reduce((acc, curr) => {
@@ -65,6 +66,9 @@ export async function campaignsDynamicData(chainId, campaigns, type) {
65
66
  case Campaign.EIGENLAYER: {
66
67
  return EigenLayerDynamicData(chainId, campaigns);
67
68
  }
69
+ case Campaign.VEST: {
70
+ return VestDynamicData(chainId, campaigns);
71
+ }
68
72
  }
69
73
  return {
70
74
  cached: false,
@@ -1,5 +1,6 @@
1
1
  import { Campaign, Forwarder, MorphoSubCampaignType, } from "@sdk";
2
2
  import { utils } from "ethers";
3
+ import { VEST_TOKEN } from "../campaigns/campaignTypes/VestDynamicData";
3
4
  function prepareClammFetch(previous, campaign) {
4
5
  if (campaign.campaignType !== Campaign.CLAMM) {
5
6
  return previous;
@@ -337,6 +338,29 @@ function prepareEigenLayerFetch(previous, campaign) {
337
338
  };
338
339
  return previous;
339
340
  }
341
+ function prepareVestFetch(previous, campaign) {
342
+ if (campaign.campaignType !== Campaign.VEST) {
343
+ return previous;
344
+ }
345
+ const forwarders = {};
346
+ if (campaign.campaignParameters.forwarders && campaign.campaignParameters.forwarders.length > 0) {
347
+ for (const forwarder of campaign.campaignParameters.forwarders) {
348
+ forwarders[utils.getAddress(forwarder.sender)] = forwarder;
349
+ }
350
+ }
351
+ previous[campaign.mainParameter] = {
352
+ rewardToken: campaign.rewardToken,
353
+ symbolRewardToken: campaign.campaignParameters.symbolRewardToken,
354
+ tvl: campaign.tvl,
355
+ forwarders: forwarders,
356
+ targetToken: VEST_TOKEN,
357
+ decimalsTargetToken: 6,
358
+ totalSupplyTargetToken: campaign.totalSupplyTargetToken,
359
+ decimals: 6,
360
+ amount: Number.parseFloat((BigInt(campaign.amount) / BigInt(10 ** campaign.campaignParameters.decimalsRewardToken)).toString()),
361
+ };
362
+ return previous;
363
+ }
340
364
  export function prepareFetch(type, previous, // FIXME
341
365
  campaign //FIXME
342
366
  ) {
@@ -361,6 +385,8 @@ campaign //FIXME
361
385
  return prepareCompoundFetch(previous, campaign);
362
386
  case Campaign.EIGENLAYER:
363
387
  return prepareEigenLayerFetch(previous, campaign);
388
+ case Campaign.VEST:
389
+ return prepareEigenLayerFetch(previous, campaign);
364
390
  default:
365
391
  return previous;
366
392
  }
@@ -61,7 +61,7 @@ export declare const CampaignController: Elysia<"/campaigns", false, {
61
61
  body: unknown;
62
62
  params: {};
63
63
  query: {
64
- type?: "INVALID" | "ERC20" | "CLAMM" | "ERC20_SNAPSHOT" | "JSON_AIRDROP" | "SILO" | "RADIANT" | "MORPHO" | "DOLOMITE" | "BADGER" | "COMPOUND" | "AJNA" | "EULER" | "UNISWAP_V4" | "ION" | "EIGENLAYER" | undefined;
64
+ type?: "INVALID" | "ERC20" | "CLAMM" | "ERC20_SNAPSHOT" | "JSON_AIRDROP" | "SILO" | "RADIANT" | "MORPHO" | "DOLOMITE" | "BADGER" | "COMPOUND" | "AJNA" | "EULER" | "UNISWAP_V4" | "ION" | "EIGENLAYER" | "ERC20TRANSFERS" | "VEST" | undefined;
65
65
  items?: number | undefined;
66
66
  subType?: number | undefined;
67
67
  page?: number | undefined;
@@ -133,7 +133,7 @@ export declare const CampaignController: Elysia<"/campaigns", false, {
133
133
  body: unknown;
134
134
  params: {};
135
135
  query: {
136
- type?: "INVALID" | "ERC20" | "CLAMM" | "ERC20_SNAPSHOT" | "JSON_AIRDROP" | "SILO" | "RADIANT" | "MORPHO" | "DOLOMITE" | "BADGER" | "COMPOUND" | "AJNA" | "EULER" | "UNISWAP_V4" | "ION" | "EIGENLAYER" | undefined;
136
+ type?: "INVALID" | "ERC20" | "CLAMM" | "ERC20_SNAPSHOT" | "JSON_AIRDROP" | "SILO" | "RADIANT" | "MORPHO" | "DOLOMITE" | "BADGER" | "COMPOUND" | "AJNA" | "EULER" | "UNISWAP_V4" | "ION" | "EIGENLAYER" | "ERC20TRANSFERS" | "VEST" | undefined;
137
137
  items?: number | undefined;
138
138
  subType?: number | undefined;
139
139
  page?: number | undefined;
@@ -34,6 +34,7 @@ export declare const campaignTypeToEnumMap: {
34
34
  readonly JSON_AIRDROP: any;
35
35
  readonly UNISWAP_V4: any;
36
36
  readonly EIGENLAYER: any;
37
+ readonly VEST: any;
37
38
  readonly ION: any;
38
39
  };
39
40
  export type ConvertedCampaignType<C extends CampaignType> = (typeof campaignTypeToEnumMap)[C];
@@ -122,6 +123,8 @@ export declare const GetCampaignQueryDto: import("@sinclair/typebox").TObject<{
122
123
  UNISWAP_V4: "UNISWAP_V4";
123
124
  ION: "ION";
124
125
  EIGENLAYER: "EIGENLAYER";
126
+ ERC20TRANSFERS: "ERC20TRANSFERS";
127
+ VEST: "VEST";
125
128
  }>>;
126
129
  subType: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
127
130
  campaignId: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
@@ -21,6 +21,7 @@ export const campaignTypeToEnumMap = {
21
21
  JSON_AIRDROP: CampaignTypeEnum.JSON_AIRDROP,
22
22
  UNISWAP_V4: CampaignTypeEnum.UNISWAP_V4,
23
23
  EIGENLAYER: CampaignTypeEnum.EIGENLAYER,
24
+ VEST: CampaignTypeEnum.VEST,
24
25
  ION: CampaignTypeEnum.ION,
25
26
  };
26
27
  // ─── DTOs ────────────────────────────────────────────────────────────────────
@@ -21,7 +21,7 @@ export declare const OpportunityController: Elysia<"/opportunities", false, {
21
21
  depositUrl?: string | undefined;
22
22
  protocols?: string[] | undefined;
23
23
  mainProtocol?: string | undefined;
24
- type: "INVALID" | "ERC20" | "CLAMM" | "ERC20_SNAPSHOT" | "JSON_AIRDROP" | "SILO" | "RADIANT" | "MORPHO" | "DOLOMITE" | "BADGER" | "COMPOUND" | "AJNA" | "EULER" | "UNISWAP_V4" | "ION" | "EIGENLAYER";
24
+ type: "INVALID" | "ERC20" | "CLAMM" | "ERC20_SNAPSHOT" | "JSON_AIRDROP" | "SILO" | "RADIANT" | "MORPHO" | "DOLOMITE" | "BADGER" | "COMPOUND" | "AJNA" | "EULER" | "UNISWAP_V4" | "ION" | "EIGENLAYER" | "ERC20TRANSFERS" | "VEST";
25
25
  tokens: {
26
26
  chainId: number;
27
27
  address: string;
@@ -90,7 +90,7 @@ export declare const OpportunityController: Elysia<"/opportunities", false, {
90
90
  } & {
91
91
  price?: number | null | undefined;
92
92
  })[];
93
- mainProtocol: "morpho" | "aura" | "poolside" | "gearbox" | "fluid" | "compound" | "ionic" | "layerbank" | "moonwell" | "fenix" | "syncswap" | "beefy" | "aerodrome" | "velodrome" | "curve" | "akron" | "dragonswap" | "koi" | "baseswap" | "zkswap" | "rfx" | "woofi" | "zkSwapThreePool" | "venus" | "reactor_fusion" | "balancer" | "aave" | "arthswap" | "camelot" | "crust" | "horiza" | "izumi" | "kim" | "pancakeswap-v3" | "quickswap-algebra" | "quickswap-uni" | "ramses" | "retro" | "stryke" | "stryke-pcs" | "stryke-sushi" | "sushiswap-v3" | "swapr" | "thruster" | "uniswap-v3" | "voltage" | "zero" | "supswap-v3" | "thirdtrade" | "uniswap-v2" | "syncswap-v3" | "neptune" | "radiant" | "euler" | "sturdy" | "frax" | "silo" | "coumpound" | "dolomite" | "badger" | "ajna" | "ion" | "eigenlayer" | undefined;
93
+ mainProtocol: "morpho" | "aura" | "poolside" | "gearbox" | "fluid" | "compound" | "ionic" | "layerbank" | "moonwell" | "fenix" | "syncswap" | "beefy" | "aerodrome" | "velodrome" | "curve" | "akron" | "dragonswap" | "koi" | "baseswap" | "zkswap" | "rfx" | "woofi" | "zkSwapThreePool" | "venus" | "reactor_fusion" | "balancer" | "aave" | "arthswap" | "camelot" | "crust" | "horiza" | "izumi" | "kim" | "pancakeswap-v3" | "quickswap-algebra" | "quickswap-uni" | "ramses" | "retro" | "stryke" | "stryke-pcs" | "stryke-sushi" | "sushiswap-v3" | "swapr" | "thruster" | "uniswap-v3" | "voltage" | "zero" | "supswap-v3" | "thirdtrade" | "uniswap-v2" | "syncswap-v3" | "neptune" | "radiant" | "euler" | "sturdy" | "frax" | "silo" | "coumpound" | "dolomite" | "badger" | "ajna" | "ion" | "eigenlayer" | "vest" | undefined;
94
94
  depositUrl: any;
95
95
  tags: string[];
96
96
  };
@@ -123,6 +123,7 @@ export declare const OpportunityController: Elysia<"/opportunities", false, {
123
123
  headers: unknown;
124
124
  response: {
125
125
  200: {
126
+ apr: number;
126
127
  aprRecord: {
127
128
  cumulated: number;
128
129
  timestamp: bigint;
@@ -207,7 +208,6 @@ export declare const OpportunityController: Elysia<"/opportunities", false, {
207
208
  chainId: number;
208
209
  action: import("../../../../database/api/.generated").$Enums.OpportunityAction;
209
210
  tvl: number;
210
- apr: number;
211
211
  dailyRewards: number;
212
212
  }[];
213
213
  };
@@ -313,6 +313,8 @@ export declare const CreateOpportunityDto: import("@sinclair/typebox").TObject<{
313
313
  UNISWAP_V4: "UNISWAP_V4";
314
314
  ION: "ION";
315
315
  EIGENLAYER: "EIGENLAYER";
316
+ ERC20TRANSFERS: "ERC20TRANSFERS";
317
+ VEST: "VEST";
316
318
  }>;
317
319
  identifier: import("@sinclair/typebox").TString;
318
320
  name: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
@@ -47,7 +47,7 @@ export declare abstract class OpportunityService {
47
47
  } & {
48
48
  price?: number | null | undefined;
49
49
  })[];
50
- mainProtocol: "morpho" | "aura" | "poolside" | "gearbox" | "fluid" | "compound" | "ionic" | "layerbank" | "moonwell" | "fenix" | "syncswap" | "beefy" | "aerodrome" | "velodrome" | "curve" | "akron" | "dragonswap" | "koi" | "baseswap" | "zkswap" | "rfx" | "woofi" | "zkSwapThreePool" | "venus" | "reactor_fusion" | "balancer" | "aave" | "arthswap" | "camelot" | "crust" | "horiza" | "izumi" | "kim" | "pancakeswap-v3" | "quickswap-algebra" | "quickswap-uni" | "ramses" | "retro" | "stryke" | "stryke-pcs" | "stryke-sushi" | "sushiswap-v3" | "swapr" | "thruster" | "uniswap-v3" | "voltage" | "zero" | "supswap-v3" | "thirdtrade" | "uniswap-v2" | "syncswap-v3" | "neptune" | "radiant" | "euler" | "sturdy" | "frax" | "silo" | "coumpound" | "dolomite" | "badger" | "ajna" | "ion" | "eigenlayer" | undefined;
50
+ mainProtocol: "morpho" | "aura" | "poolside" | "gearbox" | "fluid" | "compound" | "ionic" | "layerbank" | "moonwell" | "fenix" | "syncswap" | "beefy" | "aerodrome" | "velodrome" | "curve" | "akron" | "dragonswap" | "koi" | "baseswap" | "zkswap" | "rfx" | "woofi" | "zkSwapThreePool" | "venus" | "reactor_fusion" | "balancer" | "aave" | "arthswap" | "camelot" | "crust" | "horiza" | "izumi" | "kim" | "pancakeswap-v3" | "quickswap-algebra" | "quickswap-uni" | "ramses" | "retro" | "stryke" | "stryke-pcs" | "stryke-sushi" | "sushiswap-v3" | "swapr" | "thruster" | "uniswap-v3" | "voltage" | "zero" | "supswap-v3" | "thirdtrade" | "uniswap-v2" | "syncswap-v3" | "neptune" | "radiant" | "euler" | "sturdy" | "frax" | "silo" | "coumpound" | "dolomite" | "badger" | "ajna" | "ion" | "eigenlayer" | "vest" | undefined;
51
51
  depositUrl: any;
52
52
  tags: string[];
53
53
  }>;
@@ -75,7 +75,7 @@ export declare abstract class OpportunityService {
75
75
  } & {
76
76
  price?: number | null | undefined;
77
77
  })[];
78
- mainProtocol: "morpho" | "aura" | "poolside" | "gearbox" | "fluid" | "compound" | "ionic" | "layerbank" | "moonwell" | "fenix" | "syncswap" | "beefy" | "aerodrome" | "velodrome" | "curve" | "akron" | "dragonswap" | "koi" | "baseswap" | "zkswap" | "rfx" | "woofi" | "zkSwapThreePool" | "venus" | "reactor_fusion" | "balancer" | "aave" | "arthswap" | "camelot" | "crust" | "horiza" | "izumi" | "kim" | "pancakeswap-v3" | "quickswap-algebra" | "quickswap-uni" | "ramses" | "retro" | "stryke" | "stryke-pcs" | "stryke-sushi" | "sushiswap-v3" | "swapr" | "thruster" | "uniswap-v3" | "voltage" | "zero" | "supswap-v3" | "thirdtrade" | "uniswap-v2" | "syncswap-v3" | "neptune" | "radiant" | "euler" | "sturdy" | "frax" | "silo" | "coumpound" | "dolomite" | "badger" | "ajna" | "ion" | "eigenlayer" | undefined;
78
+ mainProtocol: "morpho" | "aura" | "poolside" | "gearbox" | "fluid" | "compound" | "ionic" | "layerbank" | "moonwell" | "fenix" | "syncswap" | "beefy" | "aerodrome" | "velodrome" | "curve" | "akron" | "dragonswap" | "koi" | "baseswap" | "zkswap" | "rfx" | "woofi" | "zkSwapThreePool" | "venus" | "reactor_fusion" | "balancer" | "aave" | "arthswap" | "camelot" | "crust" | "horiza" | "izumi" | "kim" | "pancakeswap-v3" | "quickswap-algebra" | "quickswap-uni" | "ramses" | "retro" | "stryke" | "stryke-pcs" | "stryke-sushi" | "sushiswap-v3" | "swapr" | "thruster" | "uniswap-v3" | "voltage" | "zero" | "supswap-v3" | "thirdtrade" | "uniswap-v2" | "syncswap-v3" | "neptune" | "radiant" | "euler" | "sturdy" | "frax" | "silo" | "coumpound" | "dolomite" | "badger" | "ajna" | "ion" | "eigenlayer" | "vest" | undefined;
79
79
  depositUrl: any;
80
80
  tags: string[];
81
81
  }>;
@@ -88,6 +88,7 @@ export declare abstract class OpportunityService {
88
88
  * @returns A list of opportunities
89
89
  */
90
90
  static getMany(query: GetOpportunitiesQueryModel): Promise<{
91
+ apr: number;
91
92
  aprRecord: {
92
93
  cumulated: number;
93
94
  timestamp: bigint;
@@ -172,10 +173,10 @@ export declare abstract class OpportunityService {
172
173
  chainId: number;
173
174
  action: import("../../../../database/api/.generated").$Enums.OpportunityAction;
174
175
  tvl: number;
175
- apr: number;
176
176
  dailyRewards: number;
177
177
  }[]>;
178
178
  static findLiveWithFirstCampaign(chainId: MerklChainId): Promise<({
179
+ apr: number;
179
180
  aprRecord: {
180
181
  cumulated: number;
181
182
  timestamp: bigint;
@@ -260,7 +261,6 @@ export declare abstract class OpportunityService {
260
261
  chainId: number;
261
262
  action: import("../../../../database/api/.generated").$Enums.OpportunityAction;
262
263
  tvl: number;
263
- apr: number;
264
264
  dailyRewards: number;
265
265
  } & {
266
266
  campaigns: {
@@ -321,6 +321,7 @@ export declare abstract class OpportunityService {
321
321
  */
322
322
  static countMany(query: GetOpportunitiesQueryModel): Promise<number>;
323
323
  static formatResponse(opportunity: Awaited<ReturnType<typeof OpportunityRepository.findUniqueOrThrow>>): {
324
+ apr: number;
324
325
  aprRecord: {
325
326
  cumulated: number;
326
327
  timestamp: bigint;
@@ -405,7 +406,6 @@ export declare abstract class OpportunityService {
405
406
  chainId: number;
406
407
  action: import("../../../../database/api/.generated").$Enums.OpportunityAction;
407
408
  tvl: number;
408
- apr: number;
409
409
  dailyRewards: number;
410
410
  };
411
411
  static formatResponseBase(opportunity: LightOpportunityFromDB): {