@merkl/api 0.10.209 → 0.10.211

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 (61) 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 +27 -0
  9. package/dist/database/api/seeder/resources/protocol.js +16 -0
  10. package/dist/src/eden/index.d.ts +201 -9
  11. package/dist/src/entities/opportunity.js +37 -1
  12. package/dist/src/index.d.ts +77 -3
  13. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/helpers/tokenType.d.ts +2 -1
  14. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/helpers/tokenType.js +4 -0
  15. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/curveNPoolProcessor.d.ts +39 -0
  16. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/curveNPoolProcessor.js +81 -0
  17. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/processorMapping.js +2 -0
  18. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/subtypesRound1.js +2 -0
  19. package/dist/src/libs/campaigns/campaignTypes/EigenLayerDynamicData.d.ts +3 -0
  20. package/dist/src/libs/campaigns/campaignTypes/EigenLayerDynamicData.js +67 -0
  21. package/dist/src/libs/campaigns/campaignsDynamicData.js +4 -0
  22. package/dist/src/libs/positions/EigenLayer/index.d.ts +6 -0
  23. package/dist/src/libs/positions/EigenLayer/index.js +53 -0
  24. package/dist/src/libs/positions/ajna/index.d.ts +4 -39
  25. package/dist/src/libs/positions/ajna/index.js +2 -2
  26. package/dist/src/libs/positions/badger/index.d.ts +3 -24
  27. package/dist/src/libs/positions/badger/index.js +1 -1
  28. package/dist/src/libs/positions/index.js +4 -0
  29. package/dist/src/libs/positions/morpho/index.d.ts +4 -38
  30. package/dist/src/libs/positions/prepareFetch.js +29 -1
  31. package/dist/src/libs/positions/types.d.ts +55 -0
  32. package/dist/src/modules/v4/campaign/campaign.controller.d.ts +2 -2
  33. package/dist/src/modules/v4/campaign/campaign.model.d.ts +4 -0
  34. package/dist/src/modules/v4/campaign/campaign.model.js +2 -0
  35. package/dist/src/modules/v4/dynamicData/dynamicData.controller.d.ts +1 -0
  36. package/dist/src/modules/v4/dynamicData/dynamicData.service.d.ts +1 -0
  37. package/dist/src/modules/v4/dynamicData/dynamicData.service.js +1 -0
  38. package/dist/src/modules/v4/opportunity/opportunity.controller.d.ts +1 -1
  39. package/dist/src/modules/v4/opportunity/opportunity.model.d.ts +2 -0
  40. package/dist/src/modules/v4/opportunity/opportunity.service.js +3 -0
  41. package/dist/src/modules/v4/opportunity/subservices/getEigenLayerMetadata.service.d.ts +3 -0
  42. package/dist/src/modules/v4/opportunity/subservices/getEigenLayerMetadata.service.js +9 -0
  43. package/dist/src/modules/v4/programPayload/index.d.ts +3 -0
  44. package/dist/src/modules/v4/programPayload/index.js +3 -0
  45. package/dist/src/modules/v4/programPayload/programPayload.controller.d.ts +93 -0
  46. package/dist/src/modules/v4/programPayload/programPayload.controller.js +38 -0
  47. package/dist/src/modules/v4/programPayload/programPayload.model.d.ts +122 -0
  48. package/dist/src/modules/v4/programPayload/programPayload.model.js +130 -0
  49. package/dist/src/modules/v4/programPayload/programPayload.repository.d.ts +39 -0
  50. package/dist/src/modules/v4/programPayload/programPayload.repository.js +359 -0
  51. package/dist/src/modules/v4/programPayload/programPayload.service.d.ts +8 -0
  52. package/dist/src/modules/v4/programPayload/programPayload.service.js +92 -0
  53. package/dist/src/modules/v4/protocol/protocol.model.d.ts +1 -1
  54. package/dist/src/modules/v4/protocol/protocol.model.js +2 -0
  55. package/dist/src/modules/v4/router.d.ts +77 -3
  56. package/dist/src/modules/v4/router.js +3 -1
  57. package/dist/src/utils/decodeCalls.js +5 -3
  58. package/dist/src/utils/encodeCalls.js +11 -13
  59. package/dist/src/utils/generateCardName.js +2 -0
  60. package/dist/tsconfig.package.tsbuildinfo +1 -1
  61. package/package.json +1 -1
@@ -0,0 +1,67 @@
1
+ import { BN2Number, ChainInteractionService, EigenLayerStrategyInterface, EigenLayerStrategy__factory, YEAR, } from "@sdk";
2
+ import { log } from "../../../utils/logger";
3
+ import { Pricer } from "../../../utils/pricer";
4
+ export async function EigenLayerDynamicData(_chainId, campaigns) {
5
+ const pricer = await Pricer.load();
6
+ const calls = [];
7
+ for (const campaign of campaigns) {
8
+ calls.push({
9
+ allowFailure: true,
10
+ callData: EigenLayerStrategyInterface.encodeFunctionData("totalShares"),
11
+ target: campaign.campaignParameters.strategy,
12
+ });
13
+ }
14
+ return {
15
+ cached: false,
16
+ call: {
17
+ callData: calls,
18
+ handler: () => { },
19
+ reducer: async (result) => {
20
+ let i = 0;
21
+ const dynamicData = [];
22
+ for (const campaign of campaigns) {
23
+ let totalSupplyShares;
24
+ let totalSupplyStrategy;
25
+ try {
26
+ totalSupplyShares = EigenLayerStrategyInterface.decodeFunctionResult("totalShares", result[i++])[0];
27
+ }
28
+ catch {
29
+ log.warn(`Error getting totalShares for campaign ${campaign.campaignId} and strategy ${campaign.campaignParameters.strategy}`);
30
+ totalSupplyShares = 0.0000001;
31
+ }
32
+ try {
33
+ totalSupplyStrategy = BN2Number(await EigenLayerStrategy__factory.connect(campaign.campaignParameters.strategy, ChainInteractionService(campaign.computeChainId).provider()).sharesToUnderlying(totalSupplyShares), campaign.campaignParameters.decimalsUnderlyingToken);
34
+ }
35
+ catch {
36
+ log.warn(`Error getting totalSupply for campaign ${campaign.campaignId} and strategy ${campaign.campaignParameters.strategy}`);
37
+ totalSupplyStrategy = 0.0000001;
38
+ }
39
+ const priceRewardToken = (await pricer.get({
40
+ address: campaign.rewardToken,
41
+ chainId: campaign.chainId,
42
+ symbol: campaign.campaignParameters.symbolRewardToken,
43
+ })) ?? 0;
44
+ const priceTargetToken = (await pricer.get({
45
+ address: campaign.campaignParameters.underlyingToken,
46
+ chainId: campaign.computeChainId,
47
+ symbol: campaign.campaignParameters.symbolUnderlyingToken,
48
+ })) ?? 0;
49
+ const tvl = totalSupplyStrategy * priceTargetToken;
50
+ dynamicData.push({
51
+ ...campaign,
52
+ apr: (priceRewardToken *
53
+ BN2Number(campaign.amount, campaign.campaignParameters.decimalsRewardToken) *
54
+ YEAR *
55
+ 100) /
56
+ campaign.campaignParameters.duration /
57
+ (totalSupplyStrategy * priceTargetToken),
58
+ totalSupplyTargetToken: totalSupplyStrategy,
59
+ tvl,
60
+ priceRewardToken: priceRewardToken,
61
+ });
62
+ }
63
+ return dynamicData;
64
+ },
65
+ },
66
+ };
67
+ }
@@ -8,6 +8,7 @@ import { CompoundDynamicData } from "./campaignTypes/CompoundDynamicData";
8
8
  import { DolomiteDynamicData } from "./campaignTypes/DolomiteDynamicData";
9
9
  import { ERC20DynamicData } from "./campaignTypes/ERC20DynamicData";
10
10
  import { ERC20_SNAPSHOTDynamicData } from "./campaignTypes/ERC20_SNAPSHOTDynamicData";
11
+ import { EigenLayerDynamicData } from "./campaignTypes/EigenLayerDynamicData";
11
12
  import { EulerDynamicData } from "./campaignTypes/EulerDynamicData";
12
13
  import { JSON_AIRDROPDynamicData } from "./campaignTypes/JSON_AIRDROPDynamicData";
13
14
  import { MORPHODynamicData } from "./campaignTypes/MORPHODynamicData";
@@ -61,6 +62,9 @@ export async function campaignsDynamicData(chainId, campaigns, type) {
61
62
  case Campaign.COMPOUND: {
62
63
  return CompoundDynamicData(chainId, campaigns);
63
64
  }
65
+ case Campaign.EIGENLAYER: {
66
+ return EigenLayerDynamicData(chainId, campaigns);
67
+ }
64
68
  }
65
69
  return {
66
70
  cached: false,
@@ -0,0 +1,6 @@
1
+ import { type MerklChainId } from "@sdk";
2
+ import type { UncachedResult } from "../../../utils/execute";
3
+ import type { EigenLayerFetchedCampaign, PositionType } from "../types";
4
+ export declare function getEigenLayerUserPositions(user: string, _chainId: MerklChainId, campaigns: {
5
+ [mainparameter: string]: EigenLayerFetchedCampaign;
6
+ }): Promise<UncachedResult<PositionType>>;
@@ -0,0 +1,53 @@
1
+ import { BN2Number, ChainInteractionService, EigenLayerStrategyInterface, EigenLayerStrategy__factory, } from "@sdk";
2
+ export async function getEigenLayerUserPositions(user, _chainId, campaigns) {
3
+ /**
4
+ * Fetch user positions
5
+ */
6
+ const calls = [];
7
+ for (const mainParameter of Object.keys(campaigns)) {
8
+ calls.push({
9
+ allowFailure: true,
10
+ callData: EigenLayerStrategyInterface.encodeFunctionData("shares", [user]),
11
+ target: campaigns[mainParameter].strategy,
12
+ });
13
+ }
14
+ return {
15
+ cached: false,
16
+ call: {
17
+ callData: calls,
18
+ handler: () => { },
19
+ reducer: async (result) => {
20
+ let j = 0;
21
+ const finalRes = {};
22
+ for (const campaignId of Object.keys(campaigns)) {
23
+ let userShares = 0;
24
+ let userSupply = 0;
25
+ const strategy = campaigns[campaignId].strategy;
26
+ userShares = EigenLayerStrategyInterface.decodeFunctionResult("shares", result[j++])[0];
27
+ userSupply = BN2Number(await EigenLayerStrategy__factory.connect(strategy, ChainInteractionService(_chainId).provider()).sharesToUnderlying(userShares), campaigns[campaignId].decimals);
28
+ const res = {
29
+ userPositions: [],
30
+ decimals: campaigns[campaignId].decimals,
31
+ totalSupply: BN2Number(campaigns[campaignId].totalSupplyTargetToken, campaigns[campaignId].decimals),
32
+ userTVL: 0,
33
+ };
34
+ if (userSupply > 0) {
35
+ res.userPositions.push({
36
+ balance: userSupply,
37
+ token: strategy,
38
+ origin: "Direct",
39
+ totalSupply: campaigns.campaignId.totalSupplyTargetToken,
40
+ tvl: campaigns[campaignId].tvl,
41
+ });
42
+ // to modify
43
+ }
44
+ // Add to final result if there are positions
45
+ if (res.userPositions.length > 0) {
46
+ finalRes[`14_${campaignId}`] = { ...res };
47
+ }
48
+ }
49
+ return finalRes;
50
+ },
51
+ },
52
+ };
53
+ }
@@ -1,41 +1,6 @@
1
- import { type Forwarder, type ForwarderParameters, type MerklChainId } from "@sdk";
1
+ import { type MerklChainId } from "@sdk";
2
2
  import type { UncachedResult } from "../../../utils/execute";
3
- export type UserPosition = {
4
- balance: number;
5
- token: string;
6
- origin: string;
7
- totalSupply: number;
8
- tvl: number;
9
- };
10
- export type FetchedCampaign = {
11
- rewardToken: string;
12
- targetToken: string;
13
- symbolRewardToken: string;
14
- subtype: number;
15
- tvl: number;
16
- poolId: string;
17
- decimals: number;
18
- totalSupplyTargetToken: number;
19
- computedtotalSupply: number;
20
- amount: number;
21
- forwarders?: {
22
- [address: string]: ForwarderParameters<Forwarder>;
23
- };
24
- };
25
- export type MorphoPositionType = {
26
- [mainParameter: string]: {
27
- userPositions: UserPosition[];
28
- decimals: number;
29
- totalSupply: number;
30
- userTVL: number;
31
- };
32
- };
33
- export type Res = {
34
- userPositions: UserPosition[];
35
- decimals: number;
36
- totalSupply: number;
37
- userTVL: number;
38
- };
3
+ import type { AjnaFetchedCampaign, PositionType } from "../types";
39
4
  export declare function getAjnaUserPositions(user: string, _chainId: MerklChainId, campaigns: {
40
- [mainparameter: string]: FetchedCampaign;
41
- }): Promise<UncachedResult<MorphoPositionType>>;
5
+ [mainparameter: string]: AjnaFetchedCampaign;
6
+ }): Promise<UncachedResult<PositionType>>;
@@ -1,5 +1,5 @@
1
1
  import { batchMulticallCallWithRetry } from "../../../utils/generic";
2
- import { AjnaSubCampaignType, BN2Number, NETWORK_LABELS, PoolInfoUtilsInterface, } from "@sdk";
2
+ import { AjnaSubCampaignType, BN2Number, NETWORK_LABELS, PoolInfoUtilsInterface } from "@sdk";
3
3
  import { POOL_INFO_UTILS } from "@sdk";
4
4
  import axios from "axios";
5
5
  export async function getAjnaUserPositions(user, _chainId, campaigns) {
@@ -28,7 +28,7 @@ export async function getAjnaUserPositions(user, _chainId, campaigns) {
28
28
  call: {
29
29
  callData: calls,
30
30
  handler: () => { },
31
- reducer: async (result) => {
31
+ reducer: async (_result) => {
32
32
  const finalRes = {};
33
33
  const resCalls = await batchMulticallCallWithRetry(_chainId, {
34
34
  calls,
@@ -1,27 +1,6 @@
1
1
  import { type MerklChainId } from "@sdk";
2
2
  import type { UncachedResult } from "../../../utils/execute";
3
- import type { FetchedCampaign } from "../morpho";
4
- export type UserPosition = {
5
- balance: number;
6
- token: string;
7
- origin: string;
8
- totalSupply: number;
9
- tvl: number;
10
- };
11
- export type MorphoPositionType = {
12
- [mainParameter: string]: {
13
- userPositions: UserPosition[];
14
- decimals: number;
15
- totalSupply: number;
16
- userTVL: number;
17
- };
18
- };
19
- export type Res = {
20
- userPositions: UserPosition[];
21
- decimals: number;
22
- totalSupply: number;
23
- userTVL: number;
24
- };
3
+ import type { BadgerFetchedCampaign, PositionType } from "../types";
25
4
  export declare function getBadgerUserPositions(user: string, _chainId: MerklChainId, campaigns: {
26
- [mainparameter: string]: FetchedCampaign;
27
- }): Promise<UncachedResult<MorphoPositionType>>;
5
+ [mainparameter: string]: BadgerFetchedCampaign;
6
+ }): Promise<UncachedResult<PositionType>>;
@@ -70,7 +70,7 @@ export async function getBadgerUserPositions(user, _chainId, campaigns) {
70
70
  if (res.userPositions.length > 0) {
71
71
  finalRes[`9_${campaignId}`] = { ...res };
72
72
  }
73
- i++;
73
+ i = i++;
74
74
  }
75
75
  return finalRes;
76
76
  },
@@ -1,6 +1,7 @@
1
1
  import { Campaign, withTimeout } from "@sdk";
2
2
  import { MERKL_USER_POSITION_FETCHING_GLOBAL_TIMEOUT } from "../../constants";
3
3
  import { executeSimple } from "../../utils/execute";
4
+ import { getEigenLayerUserPositions } from "./EigenLayer";
4
5
  import { getAjnaUserPositions } from "./ajna";
5
6
  import { getBadgerUserPositions } from "./badger";
6
7
  import { getClammUserPositions } from "./clamm";
@@ -42,6 +43,9 @@ chainId, user) {
42
43
  break;
43
44
  case Campaign.COMPOUND:
44
45
  promises.push(withTimeout(executeSimple(chainId, getCompoundUserPositions(user, chainId, positionsToCheck[numkey])), MERKL_USER_POSITION_FETCHING_GLOBAL_TIMEOUT));
46
+ break;
47
+ case Campaign.EIGENLAYER:
48
+ promises.push(withTimeout(executeSimple(chainId, getEigenLayerUserPositions(user, chainId, positionsToCheck[numkey])), MERKL_USER_POSITION_FETCHING_GLOBAL_TIMEOUT));
45
49
  }
46
50
  }
47
51
  return Object.assign({}, ...(await Promise.all(promises)));
@@ -1,40 +1,6 @@
1
- import { type Forwarder, type ForwarderParameters, type MerklChainId } from "@sdk";
1
+ import { type MerklChainId } from "@sdk";
2
2
  import type { UncachedResult } from "../../../utils/execute";
3
- export type MorphoPositionType = {
4
- [mainParameter: string]: {
5
- userPositions: UserPosition[];
6
- decimals: number;
7
- totalSupply: number;
8
- userTVL: number;
9
- };
10
- };
11
- export type FetchedCampaign = {
12
- rewardToken: string;
13
- targetToken: string;
14
- symbolRewardToken: string;
15
- subtype: number;
16
- tvl: number;
17
- marketId: string;
18
- decimals: number;
19
- totalSupplyTargetToken: number;
20
- amount: number;
21
- forwarders?: {
22
- [address: string]: ForwarderParameters<Forwarder>;
23
- };
24
- };
25
- export type UserPosition = {
26
- balance: number;
27
- token: string;
28
- origin: string;
29
- totalSupply: number;
30
- tvl: number;
31
- };
32
- export type Res = {
33
- userPositions: UserPosition[];
34
- decimals: number;
35
- totalSupply: number;
36
- userTVL: number;
37
- };
3
+ import type { MorphoFetchedCampaign, PositionType } from "../types";
38
4
  export declare function getMorphoUserPositions(user: string, _chainId: MerklChainId, campaigns: {
39
- [mainparameter: string]: FetchedCampaign;
40
- }): Promise<UncachedResult<MorphoPositionType>>;
5
+ [mainparameter: string]: MorphoFetchedCampaign;
6
+ }): Promise<UncachedResult<PositionType>>;
@@ -312,8 +312,34 @@ function prepareCompoundFetch(previous, campaign) {
312
312
  };
313
313
  return previous;
314
314
  }
315
+ function prepareEigenLayerFetch(previous, campaign) {
316
+ if (campaign.campaignType !== Campaign.EIGENLAYER) {
317
+ return previous;
318
+ }
319
+ const forwarders = {};
320
+ if (campaign.campaignParameters.forwarders && campaign.campaignParameters.forwarders.length > 0) {
321
+ for (const forwarder of campaign.campaignParameters.forwarders) {
322
+ forwarders[utils.getAddress(forwarder.sender)] = forwarder;
323
+ }
324
+ }
325
+ previous[campaign.mainParameter] = {
326
+ rewardToken: campaign.rewardToken,
327
+ symbolRewardToken: campaign.campaignParameters.symbolRewardToken,
328
+ tvl: campaign.tvl,
329
+ forwarders: forwarders,
330
+ targetToken: campaign.campaignParameters.strategy,
331
+ decimalsTargetToken: campaign.campaignParameters.decimalsUnderlyingToken,
332
+ totalSupplyTargetToken: campaign.totalSupplyTargetToken,
333
+ underlyingToken: campaign.campaignParameters.underlyingToken,
334
+ symbolUnderlyingToken: campaign.campaignParameters.symbolUnderlyingToken,
335
+ decimals: campaign.campaignParameters.decimalsUnderlyingToken,
336
+ amount: Number.parseFloat((BigInt(campaign.amount) / BigInt(10 ** campaign.campaignParameters.decimalsRewardToken)).toString()),
337
+ };
338
+ return previous;
339
+ }
315
340
  export function prepareFetch(type, previous, // FIXME
316
- campaign) {
341
+ campaign //FIXME
342
+ ) {
317
343
  switch (type) {
318
344
  case Campaign.CLAMM:
319
345
  return prepareClammFetch(previous, campaign);
@@ -333,6 +359,8 @@ campaign) {
333
359
  return prepareAjnaFetch(previous, campaign);
334
360
  case Campaign.COMPOUND:
335
361
  return prepareCompoundFetch(previous, campaign);
362
+ case Campaign.EIGENLAYER:
363
+ return prepareEigenLayerFetch(previous, campaign);
336
364
  default:
337
365
  return previous;
338
366
  }
@@ -1,3 +1,42 @@
1
+ import type { Forwarder, ForwarderParameters } from "@sdk";
2
+ export interface BucketData {
3
+ bucket_index: number;
4
+ deposit: string;
5
+ bucket_price: string;
6
+ }
7
+ export type UserPosition = {
8
+ balance: number;
9
+ token: string;
10
+ origin: string;
11
+ totalSupply: number;
12
+ tvl: number;
13
+ };
14
+ export type PositionType = {
15
+ [mainParameter: string]: {
16
+ userPositions: UserPosition[];
17
+ decimals: number;
18
+ totalSupply: number;
19
+ userTVL: number;
20
+ };
21
+ };
22
+ export type FetchedCampaign = {
23
+ computedtotalSupply: number;
24
+ rewardToken: string;
25
+ symbolRewardToken: string;
26
+ tvl: number;
27
+ decimals: number;
28
+ totalSupplyTargetToken: number;
29
+ amount: number;
30
+ forwarders?: {
31
+ [address: string]: ForwarderParameters<Forwarder>;
32
+ };
33
+ };
34
+ export type Res = {
35
+ userPositions: UserPosition[];
36
+ decimals: number;
37
+ totalSupply: number;
38
+ userTVL: number;
39
+ };
1
40
  export type CLAMMPosition = {
2
41
  userPositions: {
3
42
  almAddress: string;
@@ -18,3 +57,19 @@ export type CLAMMPosition = {
18
57
  userTotalLiquidity: number;
19
58
  userInRangeLiquidity: number;
20
59
  };
60
+ export type AjnaFetchedCampaign = FetchedCampaign & {
61
+ subtype: number;
62
+ poolId: string;
63
+ quoteToken: string;
64
+ };
65
+ export type BadgerFetchedCampaign = FetchedCampaign & {
66
+ targetToken: string;
67
+ };
68
+ export type MorphoFetchedCampaign = FetchedCampaign & {
69
+ targetToken: string;
70
+ subtype: number;
71
+ marketId?: string;
72
+ };
73
+ export type EigenLayerFetchedCampaign = FetchedCampaign & {
74
+ strategy: string;
75
+ };
@@ -60,7 +60,7 @@ export declare const CampaignController: Elysia<"/campaigns", false, {
60
60
  body: unknown;
61
61
  params: {};
62
62
  query: {
63
- type?: "INVALID" | "ERC20" | "CLAMM" | "ERC20_SNAPSHOT" | "JSON_AIRDROP" | "SILO" | "RADIANT" | "MORPHO" | "DOLOMITE" | "BADGER" | "COMPOUND" | "AJNA" | "EULER" | "UNISWAP_V4" | undefined;
63
+ type?: "INVALID" | "ERC20" | "CLAMM" | "ERC20_SNAPSHOT" | "JSON_AIRDROP" | "SILO" | "RADIANT" | "MORPHO" | "DOLOMITE" | "BADGER" | "COMPOUND" | "AJNA" | "EULER" | "UNISWAP_V4" | "ION" | "EIGENLAYER" | undefined;
64
64
  items?: number | undefined;
65
65
  subType?: number | undefined;
66
66
  page?: number | undefined;
@@ -132,7 +132,7 @@ export declare const CampaignController: Elysia<"/campaigns", false, {
132
132
  body: unknown;
133
133
  params: {};
134
134
  query: {
135
- type?: "INVALID" | "ERC20" | "CLAMM" | "ERC20_SNAPSHOT" | "JSON_AIRDROP" | "SILO" | "RADIANT" | "MORPHO" | "DOLOMITE" | "BADGER" | "COMPOUND" | "AJNA" | "EULER" | "UNISWAP_V4" | undefined;
135
+ type?: "INVALID" | "ERC20" | "CLAMM" | "ERC20_SNAPSHOT" | "JSON_AIRDROP" | "SILO" | "RADIANT" | "MORPHO" | "DOLOMITE" | "BADGER" | "COMPOUND" | "AJNA" | "EULER" | "UNISWAP_V4" | "ION" | "EIGENLAYER" | undefined;
136
136
  items?: number | undefined;
137
137
  subType?: number | undefined;
138
138
  page?: number | undefined;
@@ -33,6 +33,8 @@ export declare const campaignTypeToEnumMap: {
33
33
  readonly SILO: any;
34
34
  readonly JSON_AIRDROP: any;
35
35
  readonly UNISWAP_V4: any;
36
+ readonly EIGENLAYER: any;
37
+ readonly ION: any;
36
38
  };
37
39
  export type ConvertedCampaignType<C extends CampaignType> = (typeof campaignTypeToEnumMap)[C];
38
40
  export declare const CampaignUniqueDto: import("@sinclair/typebox").TObject<{
@@ -117,6 +119,8 @@ export declare const GetCampaignQueryDto: import("@sinclair/typebox").TObject<{
117
119
  AJNA: "AJNA";
118
120
  EULER: "EULER";
119
121
  UNISWAP_V4: "UNISWAP_V4";
122
+ ION: "ION";
123
+ EIGENLAYER: "EIGENLAYER";
120
124
  }>>;
121
125
  subType: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
122
126
  campaignId: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
@@ -20,6 +20,8 @@ export const campaignTypeToEnumMap = {
20
20
  SILO: CampaignTypeEnum.SILO,
21
21
  JSON_AIRDROP: CampaignTypeEnum.JSON_AIRDROP,
22
22
  UNISWAP_V4: CampaignTypeEnum.UNISWAP_V4,
23
+ EIGENLAYER: CampaignTypeEnum.EIGENLAYER,
24
+ ION: CampaignTypeEnum.ION,
23
25
  };
24
26
  // ─── DTOs ────────────────────────────────────────────────────────────────────
25
27
  export const CampaignUniqueDto = t.Object({
@@ -31,6 +31,7 @@ export declare const DynamicDataController: Elysia<"/dynamic-data", false, {
31
31
  cardName: string;
32
32
  blacklistedSupply: number;
33
33
  priceTargetToken: number;
34
+ type: string;
34
35
  };
35
36
  };
36
37
  };
@@ -5,6 +5,7 @@ type output = {
5
5
  cardName: string;
6
6
  blacklistedSupply: number;
7
7
  priceTargetToken: number;
8
+ type: string;
8
9
  };
9
10
  export declare class DynamicDataService {
10
11
  /** Fetches a single price */
@@ -44,6 +44,7 @@ export class DynamicDataService {
44
44
  blacklistedSupply: result[0]?.typeInfo.blacklistedSupply,
45
45
  cardName: result[0]?.typeInfo.cardName,
46
46
  tvl: result[0]?.typeInfo.tvl,
47
+ type: result[0]?.type ?? "defaultType",
47
48
  };
48
49
  }
49
50
  }
@@ -17,7 +17,7 @@ export declare const OpportunityController: Elysia<"/opportunities", false, {
17
17
  post: {
18
18
  body: {
19
19
  name?: string | undefined;
20
- type: "INVALID" | "ERC20" | "CLAMM" | "ERC20_SNAPSHOT" | "JSON_AIRDROP" | "SILO" | "RADIANT" | "MORPHO" | "DOLOMITE" | "BADGER" | "COMPOUND" | "AJNA" | "EULER" | "UNISWAP_V4";
20
+ type: "INVALID" | "ERC20" | "CLAMM" | "ERC20_SNAPSHOT" | "JSON_AIRDROP" | "SILO" | "RADIANT" | "MORPHO" | "DOLOMITE" | "BADGER" | "COMPOUND" | "AJNA" | "EULER" | "UNISWAP_V4" | "ION" | "EIGENLAYER";
21
21
  tokens: {
22
22
  chainId: number;
23
23
  address: string;
@@ -315,6 +315,8 @@ export declare const CreateOpportunityDto: import("@sinclair/typebox").TObject<{
315
315
  AJNA: "AJNA";
316
316
  EULER: "EULER";
317
317
  UNISWAP_V4: "UNISWAP_V4";
318
+ ION: "ION";
319
+ EIGENLAYER: "EIGENLAYER";
318
320
  }>;
319
321
  identifier: import("@sinclair/typebox").TString;
320
322
  name: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
@@ -12,6 +12,7 @@ import { getBadgerMetadata } from "./subservices/getBadgerMetadata.service";
12
12
  import { getClammMetadata } from "./subservices/getClammMetadata.service";
13
13
  import { getCompoundMetadata } from "./subservices/getCompoundMetadata.service";
14
14
  import { getDolomiteMetadata } from "./subservices/getDolomiteMetadata.service";
15
+ import { getEigenLayerMetadata } from "./subservices/getEigenLayerMetadata.service";
15
16
  import { getErc20Metadata } from "./subservices/getErc20Metadata.service";
16
17
  import { getErc20SnapshotMetadata } from "./subservices/getErc20SnapshotMetadata.service";
17
18
  import { getEulerMetadata } from "./subservices/getEulerMetadata.service";
@@ -64,6 +65,8 @@ export class OpportunityService {
64
65
  return getCompoundMetadata(chainId, campaign.subType, campaignParams);
65
66
  case "AJNA":
66
67
  return getAjnaMetadata(chainId, campaign.subType, campaignParams);
68
+ case "EIGENLAYER":
69
+ return getEigenLayerMetadata(chainId, campaignParams);
67
70
  case "EULER":
68
71
  return getEulerMetadata(chainId, campaign.campaignId, campaign.subType, campaign.rewardTokenAddress, campaign.amount, campaignParams);
69
72
  case "INVALID":
@@ -0,0 +1,3 @@
1
+ import type { ChainId, EigenLayerCampaign } from "@sdk";
2
+ import type { OpportunityMetadata } from "../opportunity.model";
3
+ export declare const getEigenLayerMetadata: (chainId: ChainId, params: EigenLayerCampaign["campaignParameters"]) => Promise<OpportunityMetadata>;
@@ -0,0 +1,9 @@
1
+ import { OpportunityAction } from "../../../../../database/api/.generated";
2
+ export const getEigenLayerMetadata = async (chainId, params) => {
3
+ return {
4
+ action: OpportunityAction.LEND,
5
+ name: ["EigenLayer", "strategy for", params.symbolUnderlyingToken].join(" "),
6
+ tokens: [{ chainId, address: params.underlyingToken }],
7
+ mainProtocol: "eigenlayer",
8
+ };
9
+ };
@@ -0,0 +1,3 @@
1
+ export * from "./programPayload.controller";
2
+ export * from "./programPayload.service";
3
+ export * from "./programPayload.model";
@@ -0,0 +1,3 @@
1
+ export * from "./programPayload.controller";
2
+ export * from "./programPayload.service";
3
+ export * from "./programPayload.model";
@@ -0,0 +1,93 @@
1
+ import Elysia from "elysia";
2
+ export declare const ProgramPayloadController: Elysia<"/program-payload", false, {
3
+ decorator: {};
4
+ store: {};
5
+ derive: {};
6
+ resolve: {};
7
+ }, {
8
+ type: {};
9
+ error: {};
10
+ }, {
11
+ schema: {};
12
+ macro: {};
13
+ macroFn: {};
14
+ }, {
15
+ "program-payload": {
16
+ index: {
17
+ get: {
18
+ body: unknown;
19
+ params: {};
20
+ query: {
21
+ creator: string;
22
+ startTimestamp: number;
23
+ endTimestamp: number;
24
+ campaign: string;
25
+ distributionChainId: number;
26
+ amount: string;
27
+ rewardToken: string;
28
+ program: string;
29
+ };
30
+ headers: unknown;
31
+ response: {
32
+ [x: string]: any;
33
+ 200: any;
34
+ };
35
+ };
36
+ };
37
+ };
38
+ } & {
39
+ "program-payload": {
40
+ config: {
41
+ get: {
42
+ body: unknown;
43
+ params: {};
44
+ query: {
45
+ creator: string;
46
+ startTimestamp: number;
47
+ endTimestamp: number;
48
+ campaign: string;
49
+ distributionChainId: number;
50
+ amount: string;
51
+ rewardToken: string;
52
+ program: string;
53
+ };
54
+ headers: unknown;
55
+ response: {
56
+ [x: string]: any;
57
+ 200: any;
58
+ };
59
+ };
60
+ };
61
+ };
62
+ } & {
63
+ "program-payload": {
64
+ program: {
65
+ get: {
66
+ body: unknown;
67
+ params: {};
68
+ query: {
69
+ creator: string;
70
+ startTimestamp: number;
71
+ endTimestamp: number;
72
+ distributionChainId: number;
73
+ amount: string;
74
+ rewardToken: string;
75
+ program: string;
76
+ };
77
+ headers: unknown;
78
+ response: {
79
+ [x: string]: any;
80
+ 200: any;
81
+ };
82
+ };
83
+ };
84
+ };
85
+ }, {
86
+ derive: {};
87
+ resolve: {};
88
+ schema: {};
89
+ }, {
90
+ derive: {};
91
+ resolve: {};
92
+ schema: {};
93
+ }>;