@merkl/api 0.10.352 → 0.10.354

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 (48) hide show
  1. package/dist/database/api/.generated/edge.js +10 -4
  2. package/dist/database/api/.generated/index-browser.js +7 -1
  3. package/dist/database/api/.generated/index.d.ts +7 -1
  4. package/dist/database/api/.generated/index.js +10 -4
  5. package/dist/database/api/.generated/package.json +1 -1
  6. package/dist/database/api/.generated/schema.prisma +6 -0
  7. package/dist/database/api/.generated/wasm.js +7 -1
  8. package/dist/src/eden/index.d.ts +251 -22
  9. package/dist/src/index.d.ts +89 -6
  10. package/dist/src/jobs/breakdowns.d.ts +1 -0
  11. package/dist/src/jobs/breakdowns.js +55 -0
  12. package/dist/src/jobs/etl/pendings.d.ts +1 -0
  13. package/dist/src/jobs/etl/pendings.js +74 -0
  14. package/dist/src/jobs/etl/reward-breakdowns.d.ts +1 -0
  15. package/dist/src/jobs/etl/reward-breakdowns.js +82 -0
  16. package/dist/src/jobs/etl/rewards.d.ts +1 -0
  17. package/dist/src/jobs/etl/rewards.js +102 -0
  18. package/dist/src/jobs/rewards.d.ts +1 -0
  19. package/dist/src/jobs/rewards.js +74 -0
  20. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/GenericProcessor.d.ts +4 -0
  21. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/GenericProcessor.js +2 -1
  22. package/dist/src/modules/v4/bucket/bucket.service.d.ts +4 -1
  23. package/dist/src/modules/v4/bucket/bucket.service.js +83 -2
  24. package/dist/src/modules/v4/campaign/campaign.controller.d.ts +2 -2
  25. package/dist/src/modules/v4/campaign/campaign.model.d.ts +3 -0
  26. package/dist/src/modules/v4/dynamicData/dynamicData.controller.d.ts +72 -0
  27. package/dist/src/modules/v4/dynamicData/dynamicData.controller.js +16 -1
  28. package/dist/src/modules/v4/dynamicData/dynamicData.model.d.ts +101 -0
  29. package/dist/src/modules/v4/dynamicData/dynamicData.model.js +47 -0
  30. package/dist/src/modules/v4/dynamicData/dynamicData.service.d.ts +13 -1
  31. package/dist/src/modules/v4/dynamicData/dynamicData.service.js +52 -1
  32. package/dist/src/modules/v4/opportunity/opportunity.controller.d.ts +3 -3
  33. package/dist/src/modules/v4/opportunity/opportunity.model.d.ts +6 -0
  34. package/dist/src/modules/v4/opportunity/opportunity.service.d.ts +2 -2
  35. package/dist/src/modules/v4/opportunity/opportunity.service.js +4 -0
  36. package/dist/src/modules/v4/opportunity/subservices/getHyperdriveMetadata.service.d.ts +3 -0
  37. package/dist/src/modules/v4/opportunity/subservices/getHyperdriveMetadata.service.js +15 -0
  38. package/dist/src/modules/v4/programPayload/programPayload.controller.d.ts +12 -1
  39. package/dist/src/modules/v4/programPayload/programPayload.controller.js +3 -2
  40. package/dist/src/modules/v4/programPayload/programPayload.repository.d.ts +4 -1
  41. package/dist/src/modules/v4/programPayload/programPayload.repository.js +101 -16
  42. package/dist/src/modules/v4/programPayload/programPayload.service.d.ts +4 -4
  43. package/dist/src/modules/v4/programPayload/programPayload.service.js +30 -13
  44. package/dist/src/modules/v4/protocol/protocol.model.d.ts +1 -1
  45. package/dist/src/modules/v4/protocol/protocol.model.js +1 -0
  46. package/dist/src/modules/v4/router.d.ts +89 -6
  47. package/dist/tsconfig.package.tsbuildinfo +1 -1
  48. package/package.json +4 -2
@@ -37,6 +37,78 @@ export declare const DynamicDataController: Elysia<"/dynamic-data", false, {
37
37
  };
38
38
  };
39
39
  };
40
+ } & {
41
+ "dynamic-data": {
42
+ "from-config": {
43
+ post: {
44
+ body: {
45
+ id?: string | undefined;
46
+ tags?: string[] | undefined;
47
+ identifier?: string | undefined;
48
+ subType?: number | undefined;
49
+ chain?: {} | undefined;
50
+ chainId?: number | undefined;
51
+ startTimestamp?: string | undefined;
52
+ endTimestamp?: string | undefined;
53
+ distributionChainId?: number | undefined;
54
+ campaignId?: string | undefined;
55
+ rewardTokenId?: string | undefined;
56
+ amount?: string | undefined;
57
+ opportunityId?: string | undefined;
58
+ creatorAddress?: string | undefined;
59
+ campaignStatus?: {} | undefined;
60
+ rewardToken?: {} | undefined;
61
+ rewardTokenAddress?: string | undefined;
62
+ distributionChain?: {} | undefined;
63
+ opportunityIdentifier?: string | undefined;
64
+ type: "INVALID" | "ERC20" | "CLAMM" | "ERC20_SNAPSHOT" | "JSON_AIRDROP" | "SILO" | "RADIANT" | "MORPHO" | "DOLOMITE" | "BADGER" | "COMPOUND" | "AJNA" | "EULER" | "UNISWAP_V4" | "ION" | "EIGENLAYER" | "ERC20TRANSFERS" | "ERC20LOGPROCESSOR" | "ERC20REBASELOGPROCESSOR" | "VEST" | "ERC20_FIX_APR" | "HYPERDRIVELOGPROCESSOR" | "HYPERDRIVELOGFIXPROCESSOR";
65
+ params: {};
66
+ computeChainId: number;
67
+ };
68
+ params: {};
69
+ query: unknown;
70
+ headers: {
71
+ authorization: string;
72
+ };
73
+ response: {
74
+ [x: string]: any;
75
+ 200: any;
76
+ };
77
+ };
78
+ };
79
+ };
80
+ } & {
81
+ "dynamic-data": {
82
+ "from-existing": {
83
+ get: {
84
+ body: unknown;
85
+ params: {};
86
+ query: {
87
+ type?: "INVALID" | "ERC20" | "CLAMM" | "ERC20_SNAPSHOT" | "JSON_AIRDROP" | "SILO" | "RADIANT" | "MORPHO" | "DOLOMITE" | "BADGER" | "COMPOUND" | "AJNA" | "EULER" | "UNISWAP_V4" | "ION" | "EIGENLAYER" | "ERC20TRANSFERS" | "ERC20LOGPROCESSOR" | "ERC20REBASELOGPROCESSOR" | "VEST" | "ERC20_FIX_APR" | "HYPERDRIVELOGPROCESSOR" | "HYPERDRIVELOGFIXPROCESSOR" | undefined;
88
+ items?: number | undefined;
89
+ subType?: number | undefined;
90
+ page?: number | undefined;
91
+ chainId?: number | undefined;
92
+ startTimestamp?: string | undefined;
93
+ endTimestamp?: string | undefined;
94
+ tokenAddress?: string | undefined;
95
+ mainParameter?: string | undefined;
96
+ campaignId?: string | undefined;
97
+ opportunityId?: string | undefined;
98
+ test?: boolean | undefined;
99
+ creatorTag?: string | undefined;
100
+ tokenSymbol?: string | undefined;
101
+ };
102
+ headers: {
103
+ authorization: string;
104
+ };
105
+ response: {
106
+ [x: string]: any;
107
+ 200: any;
108
+ };
109
+ };
110
+ };
111
+ };
40
112
  }, {
41
113
  derive: {};
42
114
  resolve: {};
@@ -1,7 +1,8 @@
1
1
  import { AuthorizationHeadersDto, BackOfficeGuard } from "../../../guards/BackOffice.guard";
2
2
  import Elysia from "elysia";
3
3
  import { throwOnUnsupportedChainId } from "src/utils/throw";
4
- import { DynamicDataSourceIdentifier } from "./dynamicData.model";
4
+ import { GetCampaignQueryDto } from "../campaign";
5
+ import { DynamicDataSourceIdentifier, SimplifiedCampaignDto } from "./dynamicData.model";
5
6
  import { DynamicDataService } from "./dynamicData.service";
6
7
  // ─── DynamicDatas Controller ───────────────────────────────────────────────────────
7
8
  export const DynamicDataController = new Elysia({
@@ -16,4 +17,18 @@ export const DynamicDataController = new Elysia({
16
17
  BackOfficeGuard({ headers });
17
18
  throwOnUnsupportedChainId(query.chainId);
18
19
  },
20
+ })
21
+ .post("/from-config", async ({ body }) => await DynamicDataService.queryDynamicData(body), {
22
+ body: SimplifiedCampaignDto,
23
+ headers: AuthorizationHeadersDto,
24
+ beforeHandle: ({ headers }) => {
25
+ BackOfficeGuard({ headers });
26
+ },
27
+ })
28
+ .get("/from-existing", async ({ query }) => await DynamicDataService.queryDynamicDataFromCampaignId(query), {
29
+ query: GetCampaignQueryDto,
30
+ headers: AuthorizationHeadersDto,
31
+ beforeHandle: ({ headers }) => {
32
+ BackOfficeGuard({ headers });
33
+ },
19
34
  });
@@ -1,5 +1,106 @@
1
+ import type { SinglePayloadInputDto } from "../programPayload";
1
2
  export declare const DynamicDataSourceIdentifier: import("@sinclair/typebox").TObject<{
2
3
  chainId: import("@sinclair/typebox").TNumber;
3
4
  tokenAddress: import("@sinclair/typebox").TString;
4
5
  }>;
6
+ export declare const DynamicDataExtendedDto: import("@sinclair/typebox").TObject<{
7
+ targetTokenSymbol: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
8
+ }>;
9
+ export declare const SimplifiedCampaignDto: import("@sinclair/typebox").TObject<{
10
+ id: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
11
+ distributionChainId: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
12
+ rewardTokenId: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
13
+ opportunityId: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
14
+ computeChainId: import("@sinclair/typebox").TNumber;
15
+ chainId: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
16
+ campaignId: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
17
+ identifier: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
18
+ creatorAddress: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
19
+ type: import("@sinclair/typebox").TEnum<{
20
+ INVALID: "INVALID";
21
+ ERC20: "ERC20";
22
+ CLAMM: "CLAMM";
23
+ ERC20_SNAPSHOT: "ERC20_SNAPSHOT";
24
+ JSON_AIRDROP: "JSON_AIRDROP";
25
+ SILO: "SILO";
26
+ RADIANT: "RADIANT";
27
+ MORPHO: "MORPHO";
28
+ DOLOMITE: "DOLOMITE";
29
+ BADGER: "BADGER";
30
+ COMPOUND: "COMPOUND";
31
+ AJNA: "AJNA";
32
+ EULER: "EULER";
33
+ UNISWAP_V4: "UNISWAP_V4";
34
+ ION: "ION";
35
+ EIGENLAYER: "EIGENLAYER";
36
+ ERC20TRANSFERS: "ERC20TRANSFERS";
37
+ ERC20LOGPROCESSOR: "ERC20LOGPROCESSOR";
38
+ ERC20REBASELOGPROCESSOR: "ERC20REBASELOGPROCESSOR";
39
+ VEST: "VEST";
40
+ ERC20_FIX_APR: "ERC20_FIX_APR";
41
+ HYPERDRIVELOGPROCESSOR: "HYPERDRIVELOGPROCESSOR";
42
+ HYPERDRIVELOGFIXPROCESSOR: "HYPERDRIVELOGFIXPROCESSOR";
43
+ }>;
44
+ subType: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
45
+ rewardTokenAddress: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
46
+ amount: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
47
+ opportunityIdentifier: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
48
+ startTimestamp: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
49
+ endTimestamp: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
50
+ params: import("@sinclair/typebox").TObject<{}>;
51
+ tags: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TArray<import("@sinclair/typebox").TString>>;
52
+ chain: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{}>>;
53
+ rewardToken: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{}>>;
54
+ distributionChain: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{}>>;
55
+ campaignStatus: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{}>>;
56
+ }>;
57
+ export declare const FilledCampaignDto: import("@sinclair/typebox").TObject<{
58
+ id: import("@sinclair/typebox").TString;
59
+ distributionChainId: import("@sinclair/typebox").TNumber;
60
+ rewardTokenId: import("@sinclair/typebox").TString;
61
+ opportunityId: import("@sinclair/typebox").TString;
62
+ computeChainId: import("@sinclair/typebox").TNumber;
63
+ chainId: import("@sinclair/typebox").TNumber;
64
+ campaignId: import("@sinclair/typebox").TString;
65
+ identifier: import("@sinclair/typebox").TString;
66
+ creatorAddress: import("@sinclair/typebox").TString;
67
+ type: import("@sinclair/typebox").TEnum<{
68
+ INVALID: "INVALID";
69
+ ERC20: "ERC20";
70
+ CLAMM: "CLAMM";
71
+ ERC20_SNAPSHOT: "ERC20_SNAPSHOT";
72
+ JSON_AIRDROP: "JSON_AIRDROP";
73
+ SILO: "SILO";
74
+ RADIANT: "RADIANT";
75
+ MORPHO: "MORPHO";
76
+ DOLOMITE: "DOLOMITE";
77
+ BADGER: "BADGER";
78
+ COMPOUND: "COMPOUND";
79
+ AJNA: "AJNA";
80
+ EULER: "EULER";
81
+ UNISWAP_V4: "UNISWAP_V4";
82
+ ION: "ION";
83
+ EIGENLAYER: "EIGENLAYER";
84
+ ERC20TRANSFERS: "ERC20TRANSFERS";
85
+ ERC20LOGPROCESSOR: "ERC20LOGPROCESSOR";
86
+ ERC20REBASELOGPROCESSOR: "ERC20REBASELOGPROCESSOR";
87
+ VEST: "VEST";
88
+ ERC20_FIX_APR: "ERC20_FIX_APR";
89
+ HYPERDRIVELOGPROCESSOR: "HYPERDRIVELOGPROCESSOR";
90
+ HYPERDRIVELOGFIXPROCESSOR: "HYPERDRIVELOGFIXPROCESSOR";
91
+ }>;
92
+ subType: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
93
+ rewardTokenAddress: import("@sinclair/typebox").TString;
94
+ amount: import("@sinclair/typebox").TString;
95
+ opportunityIdentifier: import("@sinclair/typebox").TString;
96
+ startTimestamp: import("@sinclair/typebox").TString;
97
+ endTimestamp: import("@sinclair/typebox").TString;
98
+ campaignParameters: import("@sinclair/typebox").TObject<{}>;
99
+ }>;
5
100
  export type DynamicDataSourceModel = typeof DynamicDataSourceIdentifier.static;
101
+ export type SimplifiedCampaignDtoModel = typeof SimplifiedCampaignDto.static;
102
+ export type FilledCampaignDtoModel = typeof FilledCampaignDto.static;
103
+ export type DynamicDataExtendedDtoModel = typeof DynamicDataExtendedDto.static;
104
+ export type SinglePayloadInputDtoModelExtended = typeof SinglePayloadInputDto.static & {
105
+ targetTokenSymbol: string;
106
+ };
@@ -1,6 +1,53 @@
1
+ import { CampaignType } from "../../../../database/api/.generated";
1
2
  import { t } from "elysia";
2
3
  // ─── DTOs ────────────────────────────────────────────────────────────────────
3
4
  export const DynamicDataSourceIdentifier = t.Object({
4
5
  chainId: t.Numeric(),
5
6
  tokenAddress: t.String(),
6
7
  });
8
+ export const DynamicDataExtendedDto = t.Object({
9
+ targetTokenSymbol: t.Optional(t.String()),
10
+ });
11
+ export const SimplifiedCampaignDto = t.Object({
12
+ id: t.Optional(t.String()),
13
+ distributionChainId: t.Optional(t.Number()),
14
+ rewardTokenId: t.Optional(t.String()),
15
+ opportunityId: t.Optional(t.String()),
16
+ computeChainId: t.Number(),
17
+ chainId: t.Optional(t.Number()),
18
+ campaignId: t.Optional(t.String()),
19
+ identifier: t.Optional(t.String()),
20
+ creatorAddress: t.Optional(t.String()),
21
+ type: t.Enum(CampaignType),
22
+ subType: t.Optional(t.Number()),
23
+ rewardTokenAddress: t.Optional(t.String()),
24
+ amount: t.Optional(t.String()),
25
+ opportunityIdentifier: t.Optional(t.String()),
26
+ startTimestamp: t.Optional(t.String()),
27
+ endTimestamp: t.Optional(t.String()),
28
+ params: t.Object({}),
29
+ tags: t.Optional(t.Array(t.String())),
30
+ chain: t.Optional(t.Object({})),
31
+ rewardToken: t.Optional(t.Object({})),
32
+ distributionChain: t.Optional(t.Object({})),
33
+ campaignStatus: t.Optional(t.Object({})),
34
+ });
35
+ export const FilledCampaignDto = t.Object({
36
+ id: t.String(),
37
+ distributionChainId: t.Number(),
38
+ rewardTokenId: t.String(),
39
+ opportunityId: t.String(),
40
+ computeChainId: t.Number(),
41
+ chainId: t.Number(),
42
+ campaignId: t.String(),
43
+ identifier: t.String(),
44
+ creatorAddress: t.String(),
45
+ type: t.Enum(CampaignType),
46
+ subType: t.Optional(t.Number()),
47
+ rewardTokenAddress: t.String(),
48
+ amount: t.String(),
49
+ opportunityIdentifier: t.String(),
50
+ startTimestamp: t.String(),
51
+ endTimestamp: t.String(),
52
+ campaignParameters: t.Object({}),
53
+ });
@@ -1,4 +1,7 @@
1
- import { type ChainId } from "@sdk";
1
+ import { CampaignType } from "../../../../database/api/.generated";
2
+ import { Campaign, type ChainId } from "@sdk";
3
+ import { type GetCampaignQueryModel } from "../campaign";
4
+ import type { SimplifiedCampaignDtoModel } from "./dynamicData.model";
2
5
  type output = {
3
6
  tvl: number;
4
7
  totalSupply: number;
@@ -8,7 +11,16 @@ type output = {
8
11
  type: string;
9
12
  };
10
13
  export declare class DynamicDataService {
14
+ #private;
11
15
  /** Fetches a single price */
12
16
  static queryERC20DynamicData(chainId: ChainId, tokenAddress: string): Promise<output>;
17
+ static queryDynamicData(campaign: SimplifiedCampaignDtoModel): Promise<any>;
18
+ static queryDynamicDataFromCampaignId(query: GetCampaignQueryModel): Promise<any>;
19
+ /**
20
+ * Returns the campaign type index from the CampaignType enum
21
+ * @param type CampaignType as db-related enum for v4
22
+ * @returns index of Campaign enum from sdk
23
+ */
24
+ static getV3FromType(type: CampaignType): Campaign;
13
25
  }
14
26
  export {};
@@ -1,7 +1,10 @@
1
1
  import { campaignsDynamicData } from "../../../libs/campaigns/campaignsDynamicData";
2
2
  import { executeSimple } from "../../../utils/execute";
3
3
  import { log } from "../../../utils/logger";
4
+ import { CampaignType } from "../../../../database/api/.generated";
4
5
  import { Campaign, NETWORK_LABELS } from "@sdk";
6
+ import { CampaignService, campaignTypeToEnumMap } from "../campaign";
7
+ import { CampaignRepository } from "../campaign/campaign.repository";
5
8
  export class DynamicDataService {
6
9
  // ─── DynamicDatas ──────────────────────────────────────────────────────────
7
10
  /** Fetches a single price */
@@ -25,13 +28,13 @@ export class DynamicDataService {
25
28
  decimalsRewardToken: 18,
26
29
  decimalsTargetToken: 18,
27
30
  duration: 30,
31
+ whitelist: [],
28
32
  forwarders: [],
29
33
  hooks: [],
30
34
  shouldIgnore: false,
31
35
  symbolRewardToken: "EXR",
32
36
  symbolTargetToken: "EXT",
33
37
  targetToken: tokenAddress,
34
- whitelist: [],
35
38
  },
36
39
  campaignType: Campaign.ERC20,
37
40
  },
@@ -47,4 +50,52 @@ export class DynamicDataService {
47
50
  type: result[0]?.type ?? "defaultType",
48
51
  };
49
52
  }
53
+ static async queryDynamicData(campaign) {
54
+ const campaignParameters = {
55
+ type: campaign.type,
56
+ computeChainId: campaign.computeChainId,
57
+ chainId: campaign.chainId ? campaign.chainId : campaign.computeChainId,
58
+ subType: campaign.subType,
59
+ rewardTokenAddress: campaign.rewardTokenAddress ? campaign.rewardTokenAddress : "0xdefault",
60
+ amount: campaign.amount ? campaign.amount : "1000000000000000000", // 1 EXR in wei
61
+ startTimestamp: campaign.startTimestamp ? campaign.startTimestamp : Math.floor(Date.now() / 1000).toString(), // current timestamp
62
+ endTimestamp: campaign.endTimestamp
63
+ ? campaign.endTimestamp
64
+ : (Math.floor(Date.now() / 1000) + 30 * 24 * 60 * 60).toString(), // 30 days from now
65
+ creatorAddress: campaign.creatorAddress ? campaign.creatorAddress : "0xdefaultcreatoraddress",
66
+ campaignParameters: campaign.params,
67
+ campaignId: "0xdefaultid",
68
+ opportunityIdentifier: "0xdefaultopportunityid",
69
+ id: "0xdefaultid",
70
+ distributionChainId: campaign.distributionChainId ? campaign.distributionChainId : 1,
71
+ rewardTokenId: campaign.rewardTokenId ? campaign.rewardTokenId : "0xdefaultrewardtokenid",
72
+ opportunityId: campaign.opportunityId ? campaign.opportunityId : "0xdefaultopportunityid",
73
+ identifier: campaign.identifier ? campaign.identifier : "defaultidentifier",
74
+ };
75
+ return await DynamicDataService.#getDynamicData(campaignParameters);
76
+ }
77
+ static async queryDynamicDataFromCampaignId(query) {
78
+ const campaigns = await CampaignRepository.findMany(query);
79
+ const campaign = campaigns[0];
80
+ return DynamicDataService.queryDynamicData(CampaignService.format(campaign));
81
+ }
82
+ /**
83
+ * Returns the campaign type index from the CampaignType enum
84
+ * @param type CampaignType as db-related enum for v4
85
+ * @returns index of Campaign enum from sdk
86
+ */
87
+ static getV3FromType(type) {
88
+ return Object.entries(campaignTypeToEnumMap).find(([v4]) => v4 === type)?.[1];
89
+ }
90
+ /**
91
+ * build/fetch metadata of a campaign's opportunity
92
+ * @param campaign
93
+ * @returns {OpportunityMetadata}
94
+ */
95
+ static async #getDynamicData(campaign) {
96
+ // const campaignType = DynamicDataService.getV3FromType(campaign.type);
97
+ if (campaign.type !== CampaignType.INVALID) {
98
+ return await CampaignService.fetchDynamicData(campaign.computeChainId, campaign.type, [campaign]);
99
+ }
100
+ }
50
101
  }
@@ -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" | "ERC20TRANSFERS" | "ERC20LOGPROCESSOR" | "ERC20REBASELOGPROCESSOR" | "VEST";
24
+ type: "INVALID" | "ERC20" | "CLAMM" | "ERC20_SNAPSHOT" | "JSON_AIRDROP" | "SILO" | "RADIANT" | "MORPHO" | "DOLOMITE" | "BADGER" | "COMPOUND" | "AJNA" | "EULER" | "UNISWAP_V4" | "ION" | "EIGENLAYER" | "ERC20TRANSFERS" | "ERC20LOGPROCESSOR" | "ERC20REBASELOGPROCESSOR" | "VEST" | "ERC20_FIX_APR" | "HYPERDRIVELOGPROCESSOR" | "HYPERDRIVELOGFIXPROCESSOR";
25
25
  tokens: {
26
26
  chainId: number;
27
27
  address: string;
@@ -29,7 +29,7 @@ export declare const OpportunityController: Elysia<"/opportunities", false, {
29
29
  status: "NONE" | "PAST" | "LIVE" | "SOON";
30
30
  identifier: string;
31
31
  chainId: number;
32
- action: "INVALID" | "POOL" | "HOLD" | "DROP" | "LEND" | "BORROW";
32
+ action: "INVALID" | "POOL" | "HOLD" | "DROP" | "LEND" | "BORROW" | "LP" | "LONG" | "SHORT";
33
33
  };
34
34
  params: {};
35
35
  query: unknown;
@@ -90,7 +90,7 @@ export declare const OpportunityController: Elysia<"/opportunities", false, {
90
90
  } & {
91
91
  price?: number | null | undefined;
92
92
  })[];
93
- mainProtocol: "morpho" | "arthswap" | "baseswap" | "camelot" | "crust" | "fenix" | "horiza" | "izumi" | "kim" | "pancakeswap-v3" | "quickswap-algebra" | "quickswap-uni" | "ramses" | "retro" | "stryke" | "stryke-pcs" | "stryke-sushi" | "sushiswap-v3" | "swapr" | "thruster" | "uniswap-v3" | "voltage" | "zero" | "koi" | "supswap-v3" | "zkswap" | "thirdtrade" | "uniswap-v2" | "velodrome" | "aerodrome" | "balancer" | "curve" | "cross_curve" | "curveNPool" | "aura" | "akron" | "beefy" | "dragonswap" | "poolside" | "syncswap-v3" | "neptune" | "zkSwapThreePool" | "syncswap" | "rfx" | "radiant" | "aave" | "euler" | "gearbox" | "compound" | "sturdy" | "frax" | "ionic" | "moonwell" | "fluid" | "silo" | "coumpound" | "dolomite" | "badger" | "ajna" | "layerbank" | "ion" | "venus" | "woofi" | "reactor_fusion" | "eigenlayer" | "vest" | "zerolend" | undefined;
93
+ mainProtocol: "morpho" | "arthswap" | "baseswap" | "camelot" | "crust" | "fenix" | "horiza" | "izumi" | "kim" | "pancakeswap-v3" | "quickswap-algebra" | "quickswap-uni" | "ramses" | "retro" | "stryke" | "stryke-pcs" | "stryke-sushi" | "sushiswap-v3" | "swapr" | "thruster" | "uniswap-v3" | "voltage" | "zero" | "koi" | "supswap-v3" | "zkswap" | "thirdtrade" | "uniswap-v2" | "velodrome" | "aerodrome" | "balancer" | "curve" | "cross_curve" | "curveNPool" | "aura" | "akron" | "beefy" | "dragonswap" | "poolside" | "syncswap-v3" | "neptune" | "zkSwapThreePool" | "syncswap" | "rfx" | "radiant" | "aave" | "euler" | "gearbox" | "compound" | "sturdy" | "frax" | "ionic" | "moonwell" | "fluid" | "silo" | "coumpound" | "dolomite" | "badger" | "ajna" | "layerbank" | "ion" | "venus" | "woofi" | "reactor_fusion" | "eigenlayer" | "vest" | "zerolend" | "hyperdrive" | undefined;
94
94
  depositUrl: any;
95
95
  tags: string[];
96
96
  };
@@ -317,6 +317,9 @@ export declare const CreateOpportunityDto: import("@sinclair/typebox").TObject<{
317
317
  ERC20LOGPROCESSOR: "ERC20LOGPROCESSOR";
318
318
  ERC20REBASELOGPROCESSOR: "ERC20REBASELOGPROCESSOR";
319
319
  VEST: "VEST";
320
+ ERC20_FIX_APR: "ERC20_FIX_APR";
321
+ HYPERDRIVELOGPROCESSOR: "HYPERDRIVELOGPROCESSOR";
322
+ HYPERDRIVELOGFIXPROCESSOR: "HYPERDRIVELOGFIXPROCESSOR";
320
323
  }>;
321
324
  identifier: import("@sinclair/typebox").TString;
322
325
  name: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
@@ -332,6 +335,9 @@ export declare const CreateOpportunityDto: import("@sinclair/typebox").TObject<{
332
335
  DROP: "DROP";
333
336
  LEND: "LEND";
334
337
  BORROW: "BORROW";
338
+ LP: "LP";
339
+ LONG: "LONG";
340
+ SHORT: "SHORT";
335
341
  INVALID: "INVALID";
336
342
  }>;
337
343
  tokens: import("@sinclair/typebox").TArray<import("@sinclair/typebox").TObject<{
@@ -47,7 +47,7 @@ export declare abstract class OpportunityService {
47
47
  } & {
48
48
  price?: number | null | undefined;
49
49
  })[];
50
- mainProtocol: "morpho" | "arthswap" | "baseswap" | "camelot" | "crust" | "fenix" | "horiza" | "izumi" | "kim" | "pancakeswap-v3" | "quickswap-algebra" | "quickswap-uni" | "ramses" | "retro" | "stryke" | "stryke-pcs" | "stryke-sushi" | "sushiswap-v3" | "swapr" | "thruster" | "uniswap-v3" | "voltage" | "zero" | "koi" | "supswap-v3" | "zkswap" | "thirdtrade" | "uniswap-v2" | "velodrome" | "aerodrome" | "balancer" | "curve" | "cross_curve" | "curveNPool" | "aura" | "akron" | "beefy" | "dragonswap" | "poolside" | "syncswap-v3" | "neptune" | "zkSwapThreePool" | "syncswap" | "rfx" | "radiant" | "aave" | "euler" | "gearbox" | "compound" | "sturdy" | "frax" | "ionic" | "moonwell" | "fluid" | "silo" | "coumpound" | "dolomite" | "badger" | "ajna" | "layerbank" | "ion" | "venus" | "woofi" | "reactor_fusion" | "eigenlayer" | "vest" | "zerolend" | undefined;
50
+ mainProtocol: "morpho" | "arthswap" | "baseswap" | "camelot" | "crust" | "fenix" | "horiza" | "izumi" | "kim" | "pancakeswap-v3" | "quickswap-algebra" | "quickswap-uni" | "ramses" | "retro" | "stryke" | "stryke-pcs" | "stryke-sushi" | "sushiswap-v3" | "swapr" | "thruster" | "uniswap-v3" | "voltage" | "zero" | "koi" | "supswap-v3" | "zkswap" | "thirdtrade" | "uniswap-v2" | "velodrome" | "aerodrome" | "balancer" | "curve" | "cross_curve" | "curveNPool" | "aura" | "akron" | "beefy" | "dragonswap" | "poolside" | "syncswap-v3" | "neptune" | "zkSwapThreePool" | "syncswap" | "rfx" | "radiant" | "aave" | "euler" | "gearbox" | "compound" | "sturdy" | "frax" | "ionic" | "moonwell" | "fluid" | "silo" | "coumpound" | "dolomite" | "badger" | "ajna" | "layerbank" | "ion" | "venus" | "woofi" | "reactor_fusion" | "eigenlayer" | "vest" | "zerolend" | "hyperdrive" | 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" | "arthswap" | "baseswap" | "camelot" | "crust" | "fenix" | "horiza" | "izumi" | "kim" | "pancakeswap-v3" | "quickswap-algebra" | "quickswap-uni" | "ramses" | "retro" | "stryke" | "stryke-pcs" | "stryke-sushi" | "sushiswap-v3" | "swapr" | "thruster" | "uniswap-v3" | "voltage" | "zero" | "koi" | "supswap-v3" | "zkswap" | "thirdtrade" | "uniswap-v2" | "velodrome" | "aerodrome" | "balancer" | "curve" | "cross_curve" | "curveNPool" | "aura" | "akron" | "beefy" | "dragonswap" | "poolside" | "syncswap-v3" | "neptune" | "zkSwapThreePool" | "syncswap" | "rfx" | "radiant" | "aave" | "euler" | "gearbox" | "compound" | "sturdy" | "frax" | "ionic" | "moonwell" | "fluid" | "silo" | "coumpound" | "dolomite" | "badger" | "ajna" | "layerbank" | "ion" | "venus" | "woofi" | "reactor_fusion" | "eigenlayer" | "vest" | "zerolend" | undefined;
78
+ mainProtocol: "morpho" | "arthswap" | "baseswap" | "camelot" | "crust" | "fenix" | "horiza" | "izumi" | "kim" | "pancakeswap-v3" | "quickswap-algebra" | "quickswap-uni" | "ramses" | "retro" | "stryke" | "stryke-pcs" | "stryke-sushi" | "sushiswap-v3" | "swapr" | "thruster" | "uniswap-v3" | "voltage" | "zero" | "koi" | "supswap-v3" | "zkswap" | "thirdtrade" | "uniswap-v2" | "velodrome" | "aerodrome" | "balancer" | "curve" | "cross_curve" | "curveNPool" | "aura" | "akron" | "beefy" | "dragonswap" | "poolside" | "syncswap-v3" | "neptune" | "zkSwapThreePool" | "syncswap" | "rfx" | "radiant" | "aave" | "euler" | "gearbox" | "compound" | "sturdy" | "frax" | "ionic" | "moonwell" | "fluid" | "silo" | "coumpound" | "dolomite" | "badger" | "ajna" | "layerbank" | "ion" | "venus" | "woofi" | "reactor_fusion" | "eigenlayer" | "vest" | "zerolend" | "hyperdrive" | undefined;
79
79
  depositUrl: any;
80
80
  tags: string[];
81
81
  }>;
@@ -18,6 +18,7 @@ import { getEigenLayerMetadata } from "./subservices/getEigenLayerMetadata.servi
18
18
  import { getErc20Metadata } from "./subservices/getErc20Metadata.service";
19
19
  import { getErc20SnapshotMetadata } from "./subservices/getErc20SnapshotMetadata.service";
20
20
  import { getEulerMetadata } from "./subservices/getEulerMetadata.service";
21
+ import { getHyperdriveMetadata } from "./subservices/getHyperdriveMetadata.service";
21
22
  import { getJsonAirdropMetadata } from "./subservices/getJsonAirDropMetadata.service";
22
23
  import { getMorphoMetadata } from "./subservices/getMorphoMetadata.service";
23
24
  import { getRadiantMetadata } from "./subservices/getRadiantMetadata.service";
@@ -81,6 +82,9 @@ export class OpportunityService {
81
82
  return getVestMetaData(chainId, campaignParams);
82
83
  case "EULER":
83
84
  return getEulerMetadata(chainId, campaign.campaignId, campaign.subType, campaign.rewardTokenAddress, campaign.amount, campaignParams);
85
+ case "HYPERDRIVELOGPROCESSOR":
86
+ case "HYPERDRIVELOGFIXPROCESSOR":
87
+ return getHyperdriveMetadata(chainId, campaign.subType, campaignParams);
84
88
  case "INVALID":
85
89
  return {
86
90
  name: "Invalid Campaigns",
@@ -0,0 +1,3 @@
1
+ import type { ChainId, HyperDriveLogCampaign } from "@sdk";
2
+ import type { OpportunityMetadata } from "../opportunity.model";
3
+ export declare const getHyperdriveMetadata: (chainId: ChainId, campaignSubType: HyperDriveLogCampaign["campaignSubType"], params: HyperDriveLogCampaign["campaignParameters"]) => Promise<OpportunityMetadata>;
@@ -0,0 +1,15 @@
1
+ import { OpportunityAction } from "../../../../../database/api/.generated";
2
+ export const getHyperdriveMetadata = async (chainId, campaignSubType, params) => {
3
+ const subtypes = [
4
+ { name: "Add Liquidity on", action: OpportunityAction.LP },
5
+ { name: "Open Long on", action: OpportunityAction.LONG },
6
+ { name: "Open Short on", action: OpportunityAction.SHORT },
7
+ ];
8
+ const subtype = subtypes[campaignSubType];
9
+ return {
10
+ action: subtype.action,
11
+ name: [subtype.name, params.symbolTargetToken].join(" "),
12
+ tokens: [{ chainId, address: params.targetToken }],
13
+ mainProtocol: "hyperdrive",
14
+ };
15
+ };
@@ -219,10 +219,21 @@ export declare const ProgramPayloadController: Elysia<"/program-payload", false,
219
219
  campaignType: number;
220
220
  };
221
221
  params: {};
222
- query: unknown;
222
+ query: {
223
+ debug?: boolean | undefined;
224
+ };
223
225
  headers: unknown;
224
226
  response: {
225
227
  200: {
228
+ version: string;
229
+ chainId: string;
230
+ createdAt: number;
231
+ meta: {
232
+ name: string;
233
+ txBuilderVersion: string;
234
+ };
235
+ transactions: import("./programPayload.model").transaction[];
236
+ } | {
226
237
  safePayload: import("./programPayload.model").safePayload;
227
238
  nonEncodedConfig: any;
228
239
  };
@@ -65,9 +65,10 @@ export const ProgramPayloadController = new Elysia({ prefix: "/program-payload",
65
65
  },
66
66
  detail: { description: "Generate the payload with the campaigns and amounts provided" },
67
67
  })
68
- .post("/payload/from-config", async ({ body }) => {
69
- return ProgramPayloadService.buildPayloadFromConfig(body);
68
+ .post("/payload/from-config", async ({ query, body }) => {
69
+ return ProgramPayloadService.buildPayloadFromConfig(body, query.debug);
70
70
  }, {
71
+ query: t.Object({ debug: t.Optional(t.Boolean({ description: "Debug mode" })) }),
71
72
  body: SinglePayloadInputDto,
72
73
  detail: { description: "BETA FEATURE : Generate the payload from a config file." },
73
74
  });
@@ -182,7 +182,10 @@ export declare enum modeCampaigns {
182
182
  Kim_Ichi_SSD_WETH_MODE_Mode = "Kim Ichi SSD WETH/Mode 0x8cfE2A02dfBAbC56aE7e573170E35f88A38BeA55",
183
183
  Kim_Steer_CRS_V2_WETH_MODE_Mode = "Kim Steer CRS V2 WETH/Mode 0x8cfE2A02dfBAbC56aE7e573170E35f88A38BeA55",
184
184
  Kim_Gamma_WETH_MODE_Mode = "Kim Gamma Narrow WETH/Mode 0x8cfE2A02dfBAbC56aE7e573170E35f88A38BeA55",
185
- Kim_V4_WETH_MODE_Mode = "Kim V4 WETH/Mode 0x8cfE2A02dfBAbC56aE7e573170E35f88A38BeA55"
185
+ Kim_V4_WETH_MODE_Mode = "Kim V4 WETH/Mode 0x8cfE2A02dfBAbC56aE7e573170E35f88A38BeA55",
186
+ Ironclad_Borrow_uniBTC_Mode = "Ironclad Borrow uniBTC 0x80215c38DCb6ae91520F8251A077c124e7259688",
187
+ Bedrock_Ionic_Supply_ionuniBTC_Mode = "Bedrock Ionic Supply uniBTC 0xa48750877a83f7dec11f722178c317b54a44d142",
188
+ Bedrock_Ironclad_Supply_uniBTC_Mode = "Bedrock Ironclad Supply uniBTC 0x0F041cf2ae959f39215EFfB50d681Df55D4d90B1"
186
189
  }
187
190
  declare const ModeInterfaceCampaigns: {
188
191
  [key in modeCampaigns]: partialConfig;