@merkl/api 0.10.362 → 0.10.378

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 (84) hide show
  1. package/README.md +78 -14
  2. package/dist/database/api/.generated/edge.js +21 -6
  3. package/dist/database/api/.generated/index-browser.js +18 -3
  4. package/dist/database/api/.generated/index.d.ts +1746 -256
  5. package/dist/database/api/.generated/index.js +21 -6
  6. package/dist/database/api/.generated/package.json +1 -1
  7. package/dist/database/api/.generated/schema.prisma +12 -2
  8. package/dist/database/api/.generated/wasm.js +18 -3
  9. package/dist/src/eden/index.d.ts +1041 -140
  10. package/dist/src/entities/campaign.js +2 -1
  11. package/dist/src/entities/opportunity.js +169 -3
  12. package/dist/src/index.d.ts +340 -9
  13. package/dist/src/libs/campaigns/campaignTypes/ERC20DynamicData.js +45 -54
  14. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/helpers/tokenType.d.ts +3 -1
  15. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/helpers/tokenType.js +4 -0
  16. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/ERC4626Processor.d.ts +34 -0
  17. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/ERC4626Processor.js +36 -0
  18. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/processorMapping.js +3 -0
  19. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/subtypesRound1.js +4 -1
  20. package/dist/src/libs/campaigns/campaignTypes/HyperdriveDynamicData.d.ts +5 -0
  21. package/dist/src/libs/campaigns/campaignTypes/HyperdriveDynamicData.js +76 -0
  22. package/dist/src/libs/campaigns/campaignsDynamicData.js +8 -0
  23. package/dist/src/modules/v4/campaign/campaign.controller.d.ts +2 -0
  24. package/dist/src/modules/v4/campaign/campaign.model.d.ts +1 -0
  25. package/dist/src/modules/v4/campaign/campaign.model.js +1 -0
  26. package/dist/src/modules/v4/campaign/campaign.repository.d.ts +63 -1
  27. package/dist/src/modules/v4/campaign/campaign.repository.js +15 -10
  28. package/dist/src/modules/v4/computedValue/computedValue.controller.d.ts +7 -4
  29. package/dist/src/modules/v4/computedValue/computedValue.controller.js +7 -5
  30. package/dist/src/modules/v4/computedValue/computedValue.model.js +12 -4
  31. package/dist/src/modules/v4/computedValue/computedValue.repository.d.ts +8 -5
  32. package/dist/src/modules/v4/computedValue/computedValue.repository.js +7 -3
  33. package/dist/src/modules/v4/computedValue/computedValue.service.d.ts +7 -4
  34. package/dist/src/modules/v4/computedValue/computedValue.service.js +10 -0
  35. package/dist/src/modules/v4/creator/creator.controller.d.ts +118 -0
  36. package/dist/src/modules/v4/creator/creator.controller.js +30 -0
  37. package/dist/src/modules/v4/creator/creator.model.d.ts +29 -0
  38. package/dist/src/modules/v4/creator/creator.model.js +18 -0
  39. package/dist/src/modules/v4/creator/creator.repository.d.ts +40 -0
  40. package/dist/src/modules/v4/creator/creator.repository.js +63 -0
  41. package/dist/src/modules/v4/creator/creator.service.d.ts +61 -0
  42. package/dist/src/modules/v4/creator/creator.service.js +44 -0
  43. package/dist/src/modules/v4/creator/index.d.ts +3 -0
  44. package/dist/src/modules/v4/creator/index.js +3 -0
  45. package/dist/src/modules/v4/dynamicData/dynamicData.controller.d.ts +3 -4
  46. package/dist/src/modules/v4/dynamicData/dynamicData.controller.js +1 -1
  47. package/dist/src/modules/v4/dynamicData/dynamicData.model.d.ts +1 -0
  48. package/dist/src/modules/v4/dynamicData/dynamicData.model.js +1 -0
  49. package/dist/src/modules/v4/dynamicData/dynamicData.service.d.ts +6 -3
  50. package/dist/src/modules/v4/dynamicData/dynamicData.service.js +50 -9
  51. package/dist/src/modules/v4/opportunity/opportunity.controller.d.ts +171 -1
  52. package/dist/src/modules/v4/opportunity/opportunity.controller.js +14 -0
  53. package/dist/src/modules/v4/opportunity/opportunity.model.d.ts +0 -1
  54. package/dist/src/modules/v4/opportunity/opportunity.repository.d.ts +185 -0
  55. package/dist/src/modules/v4/opportunity/opportunity.repository.js +41 -0
  56. package/dist/src/modules/v4/opportunity/opportunity.service.d.ts +151 -1
  57. package/dist/src/modules/v4/opportunity/opportunity.service.js +45 -2
  58. package/dist/src/modules/v4/opportunity/subservices/getHyperdriveMetadata.service.d.ts +1 -1
  59. package/dist/src/modules/v4/opportunity/subservices/getHyperdriveMetadata.service.js +2 -2
  60. package/dist/src/modules/v4/programPayload/programPayload.controller.d.ts +30 -0
  61. package/dist/src/modules/v4/programPayload/programPayload.controller.js +12 -1
  62. package/dist/src/modules/v4/programPayload/programPayload.model.d.ts +21 -1
  63. package/dist/src/modules/v4/programPayload/programPayload.model.js +12 -0
  64. package/dist/src/modules/v4/programPayload/programPayload.repository.d.ts +13 -2
  65. package/dist/src/modules/v4/programPayload/programPayload.repository.js +230 -83
  66. package/dist/src/modules/v4/programPayload/programPayload.service.d.ts +2 -1
  67. package/dist/src/modules/v4/programPayload/programPayload.service.js +42 -2
  68. package/dist/src/modules/v4/protocol/protocol.controller.d.ts +1 -0
  69. package/dist/src/modules/v4/protocol/protocol.model.d.ts +1 -0
  70. package/dist/src/modules/v4/protocol/protocol.model.js +1 -0
  71. package/dist/src/modules/v4/reward/reward.repository.d.ts +2 -1
  72. package/dist/src/modules/v4/reward/reward.repository.js +12 -1
  73. package/dist/src/modules/v4/reward/reward.service.js +5 -2
  74. package/dist/src/modules/v4/router.d.ts +340 -9
  75. package/dist/src/modules/v4/router.js +3 -1
  76. package/dist/src/modules/v4/user/user.controller.d.ts +28 -0
  77. package/dist/src/modules/v4/user/user.controller.js +5 -0
  78. package/dist/src/modules/v4/user/user.repository.d.ts +5 -0
  79. package/dist/src/modules/v4/user/user.service.d.ts +5 -0
  80. package/dist/src/utils/decodeCalls.js +7 -1
  81. package/dist/src/utils/encodeCalls.js +19 -1
  82. package/dist/src/utils/generateCardName.js +3 -0
  83. package/dist/tsconfig.package.tsbuildinfo +1 -1
  84. package/package.json +6 -2
@@ -1,11 +1,12 @@
1
1
  import { NotFoundError } from "../../../errors";
2
- import { CampaignService, campaignTypeToEnumMap } from "../campaign";
2
+ import { CampaignService, campaignTypeToEnumMap, } from "../campaign";
3
3
  import { log } from "../../../utils/logger";
4
4
  import { OpportunityAction, Prisma, Status } from "../../../../database/api/.generated";
5
5
  import { record } from "@elysiajs/opentelemetry";
6
6
  import moment from "moment";
7
7
  import { CacheService } from "../cache";
8
8
  import { TTLPresets } from "../cache/cache.model";
9
+ import { CampaignRepository } from "../campaign/campaign.repository";
9
10
  import { TokenService } from "../token";
10
11
  import { UserService } from "../user";
11
12
  import { OpportunityRepository } from "./opportunity.repository";
@@ -95,6 +96,30 @@ export class OpportunityService {
95
96
  throw "UNKNOWN CAMPAIGN TYPE";
96
97
  }
97
98
  }
99
+ static async fakeCreateFromCampaign(campaign) {
100
+ const campaignType = CampaignService.getTypeFromV3(campaign.type);
101
+ const metadata = await OpportunityService.#getMetadata(campaign);
102
+ metadata.tags = [...((await UserService.findUnique(campaign.creator))?.tags ?? []), ...(campaign?.tags ?? [])];
103
+ const opportunityId = OpportunityService.hashId({
104
+ chainId: campaign.computeChainId,
105
+ identifier: campaign.opportunityIdentifier,
106
+ type: campaignType,
107
+ });
108
+ const params = JSON.parse(campaign.params);
109
+ const opportunity = {
110
+ id: opportunityId,
111
+ chainId: campaign.computeChainId,
112
+ type: campaignType,
113
+ identifier: campaign.opportunityIdentifier, // mainParameter
114
+ name: metadata.name,
115
+ status: Status.SOON,
116
+ action: metadata.action,
117
+ mainProtocol: metadata.mainProtocol,
118
+ depositUrl: !!params.url ? params.url : undefined,
119
+ tags: metadata.tags,
120
+ };
121
+ return opportunity;
122
+ }
98
123
  static async createFromCampaign(campaign, upsert = false) {
99
124
  const campaignType = CampaignService.getTypeFromV3(campaign.type);
100
125
  const metadata = await OpportunityService.#getMetadata(campaign);
@@ -172,6 +197,21 @@ export class OpportunityService {
172
197
  throw err;
173
198
  }
174
199
  }
200
+ /**
201
+ * Finds opportunities based on filters of its campaigns
202
+ * @notice campaigns are filtered as well
203
+ * @param where
204
+ * @returns opportunities
205
+ */
206
+ static async getManyByCampaigns(where) {
207
+ const opportunities = await OpportunityRepository.findManyByCampaigns(CampaignRepository.transformQueryToPrismaFilters(where).where);
208
+ const formatted = opportunities.map(({ Campaigns, ...o }) => {
209
+ const opportunity = OpportunityService.formatResponse(o);
210
+ const campaigns = Campaigns.map(CampaignService.format);
211
+ return Object.assign(opportunity, { campaigns });
212
+ });
213
+ return formatted;
214
+ }
175
215
  static async getUniqueWithCampaignsOrThrow(opportunityId, withTest = false) {
176
216
  const id = typeof opportunityId === "string" ? opportunityId : OpportunityService.hashId(opportunityId);
177
217
  const { Campaigns, ...opportunity } = await OpportunityRepository.findUniqueOrThrowWithCampaigns(id, withTest);
@@ -257,7 +297,10 @@ export class OpportunityService {
257
297
  };
258
298
  }
259
299
  static formatResponseBase(opportunity) {
260
- const { mainProtocolId, id, Tokens, Chain, Protocols, MainProtocol, ...opp } = opportunity;
300
+ let { mainProtocolId, id, Tokens, Chain, Protocols, MainProtocol, ...opp } = opportunity;
301
+ if (mainProtocolId === "unknown") {
302
+ MainProtocol = null;
303
+ }
261
304
  return {
262
305
  ...opp,
263
306
  id,
@@ -1,3 +1,3 @@
1
1
  import type { ChainId, HyperDriveLogCampaign } from "@sdk";
2
2
  import type { OpportunityMetadata } from "../opportunity.model";
3
- export declare const getHyperdriveMetadata: (chainId: ChainId, campaignSubType: HyperDriveLogCampaign["campaignSubType"], params: HyperDriveLogCampaign["campaignParameters"]) => Promise<OpportunityMetadata>;
3
+ export declare const getHyperdriveMetadata: (chainId: ChainId, campaignSubType: HyperDriveLogCampaign["campaignSubType"], params: HyperDriveLogCampaign["campaignParameters"]) => OpportunityMetadata;
@@ -1,7 +1,7 @@
1
1
  import { OpportunityAction } from "../../../../../database/api/.generated";
2
- export const getHyperdriveMetadata = async (chainId, campaignSubType, params) => {
2
+ export const getHyperdriveMetadata = (chainId, campaignSubType, params) => {
3
3
  const subtypes = [
4
- { name: "Add Liquidity on", action: OpportunityAction.LP },
4
+ { name: "Add Liquidity on", action: OpportunityAction.POOL },
5
5
  { name: "Open Long on", action: OpportunityAction.LONG },
6
6
  { name: "Open Short on", action: OpportunityAction.SHORT },
7
7
  ];
@@ -242,6 +242,36 @@ export declare const ProgramPayloadController: Elysia<"/program-payload", false,
242
242
  };
243
243
  };
244
244
  };
245
+ } & {
246
+ "program-payload": {
247
+ parse: {
248
+ "from-campaign-data": {
249
+ post: {
250
+ body: {
251
+ chainId: number;
252
+ startTimestamp: number;
253
+ endTimestamp: number;
254
+ computeChainId: number;
255
+ amount: string;
256
+ rewardToken: string;
257
+ campaignType: number;
258
+ campaignData: string;
259
+ symbolRewardToken: string;
260
+ decimalsRewardToken: number;
261
+ };
262
+ params: {};
263
+ query: unknown;
264
+ headers: {
265
+ authorization: string;
266
+ };
267
+ response: {
268
+ [x: string]: any;
269
+ 200: any;
270
+ };
271
+ };
272
+ };
273
+ };
274
+ };
245
275
  }, {
246
276
  derive: {};
247
277
  resolve: {};
@@ -1,7 +1,8 @@
1
+ import { AuthorizationHeadersDto, BackOfficeGuard } from "../../../guards/BackOffice.guard";
1
2
  // import { AuthorizationHeadersDto, BackOfficeGuard } from "../../../guards/BackOffice.guard";
2
3
  import Elysia, { t } from "elysia";
3
4
  import { throwOnUnsupportedChainId } from "src/utils/throw";
4
- import { CampaignAmountsInputDto, CampaignPayloadInputDto, ProgramPayloadInputDto, SinglePayloadInputDto, } from "./programPayload.model";
5
+ import { CampaignAmountsInputDto, CampaignDataDto, CampaignPayloadInputDto, ProgramPayloadInputDto, SinglePayloadInputDto, } from "./programPayload.model";
5
6
  import { ProgramPayloadService } from "./programPayload.service";
6
7
  // ─── ProgramPaylod Controller ───────────────────────────────────────────────────────
7
8
  export const ProgramPayloadController = new Elysia({ prefix: "/program-payload", detail: { tags: ["ProgramPayload"] } })
@@ -71,4 +72,14 @@ export const ProgramPayloadController = new Elysia({ prefix: "/program-payload",
71
72
  query: t.Object({ debug: t.Optional(t.Boolean({ description: "Debug mode" })) }),
72
73
  body: SinglePayloadInputDto,
73
74
  detail: { description: "BETA FEATURE : Generate the payload from a config file." },
75
+ })
76
+ .post("/parse/from-campaign-data", async ({ body }) => {
77
+ return ProgramPayloadService.buildConfigFromCampaignData(body);
78
+ }, {
79
+ headers: AuthorizationHeadersDto,
80
+ body: CampaignDataDto,
81
+ beforeHandle: ({ headers }) => {
82
+ BackOfficeGuard({ headers });
83
+ },
84
+ detail: { hide: true },
74
85
  });
@@ -9,6 +9,18 @@ export declare const CampaignPayloadInputDto: import("@sinclair/typebox").TObjec
9
9
  endTimestamp: import("@sinclair/typebox").TNumber;
10
10
  amount: import("@sinclair/typebox").TString;
11
11
  }>;
12
+ export declare const CampaignDataDto: import("@sinclair/typebox").TObject<{
13
+ campaignType: import("@sinclair/typebox").TNumber;
14
+ campaignData: import("@sinclair/typebox").TString;
15
+ amount: import("@sinclair/typebox").TString;
16
+ chainId: import("@sinclair/typebox").TNumber;
17
+ computeChainId: import("@sinclair/typebox").TNumber;
18
+ endTimestamp: import("@sinclair/typebox").TNumber;
19
+ rewardToken: import("@sinclair/typebox").TString;
20
+ startTimestamp: import("@sinclair/typebox").TNumber;
21
+ symbolRewardToken: import("@sinclair/typebox").TString;
22
+ decimalsRewardToken: import("@sinclair/typebox").TNumber;
23
+ }>;
12
24
  export declare const SinglePayloadInputDto: import("@sinclair/typebox").TObject<{
13
25
  distributionChainId: import("@sinclair/typebox").TNumber;
14
26
  rewardToken: import("@sinclair/typebox").TString;
@@ -58,6 +70,7 @@ export type CampaignPayloadInputModel = typeof CampaignPayloadInputDto.static;
58
70
  export type ProgramPayloadInputModel = typeof ProgramPayloadInputDto.static;
59
71
  export type CampaignAmountsInputModel = typeof CampaignAmountsInputDto.static;
60
72
  export type SinglePayloadInputDtoModel = typeof SinglePayloadInputDto.static;
73
+ export type CampaignDataDtoModel = typeof CampaignDataDto.static;
61
74
  export type approvalTransaction = {
62
75
  to: string;
63
76
  value: string;
@@ -179,7 +192,14 @@ export type partialConfigIonic = {
179
192
  blacklist: string[];
180
193
  forwarders: string[];
181
194
  };
182
- export type partialConfig = partialConfigERC20 | partialConfigMorpho | partialConfigCLAMM | partialConfigIonic;
195
+ export type partialConfigAirdrop = {
196
+ jsonUrl: string;
197
+ url?: string;
198
+ computeChainId?: MerklChainId;
199
+ hooks?: (HookParameters<HOOK> | string)[];
200
+ campaignType: Campaign;
201
+ };
202
+ export type partialConfig = partialConfigERC20 | partialConfigMorpho | partialConfigCLAMM | partialConfigIonic | partialConfigAirdrop;
183
203
  export declare const safeTemplate: {
184
204
  version: string;
185
205
  chainId: string;
@@ -10,6 +10,18 @@ export const CampaignPayloadInputDto = t.Object({
10
10
  endTimestamp: t.Numeric({ description: "End timestamp for the campaign" }),
11
11
  amount: t.String({ description: "Amount of the reward token to be distributed" }),
12
12
  });
13
+ export const CampaignDataDto = t.Object({
14
+ campaignType: t.Numeric({ description: "Type of the campaign 1 : ERC20, 2: CLAMM , ..." }),
15
+ campaignData: t.String({ description: "Campaign data" }),
16
+ amount: t.String({ description: "Amount of the reward token to be distributed" }),
17
+ chainId: t.Numeric({ description: "Chain ID where the reward tokens will be distributed" }),
18
+ computeChainId: t.Numeric({ description: "Chain ID used for computation" }),
19
+ endTimestamp: t.Numeric({ description: "End timestamp for the campaign" }),
20
+ rewardToken: t.String({ description: "Address of the reward token to be distributed" }),
21
+ startTimestamp: t.Numeric({ description: "Start timestamp for the campaign" }),
22
+ symbolRewardToken: t.String({ description: "Symbol of the reward token" }),
23
+ decimalsRewardToken: t.Numeric({ description: "Decimals of the reward token" }),
24
+ });
13
25
  export const SinglePayloadInputDto = t.Object({
14
26
  distributionChainId: t.Numeric({ description: "Chain ID where the reward tokens will be distributed" }),
15
27
  rewardToken: t.String({ description: "Address of the reward token to be distributed" }),
@@ -35,7 +35,7 @@ export declare enum pufferCampaigns {
35
35
  venus_pufeth = "0xE0ee5dDeBFe0abe0a4Af50299D68b74Cec31668e",
36
36
  unifiBTC = "0x170D847A8320F3B6A77eE15B0CAE430e3eC933a0",
37
37
  unifiUSD = "0x82c40e07277eBb92935f79cE92268F80dDc7caB4",
38
- CARROT_USDC = "0xf00032d0f95e8f43e750c51d0188dca33cc5a8ea"
38
+ CARROT_USDC = "0xf00032d0F95e8f43E750C51d0188DCa33cC5a8eA"
39
39
  }
40
40
  export declare enum zkSyncCampaigns {
41
41
  Izumi_Finance_Zk_Weth = "Izumi Finance ZK/WETH 0xd62bc9f19bd94fde9c41df4b6eb6419ea6b8e25c",
@@ -112,7 +112,18 @@ export declare enum zkSyncCampaigns {
112
112
  ZKSwap_ETH_USDCe_20 = "ZKSwap Finance ETH/USDC v3 0.2pct 0x6480665e22d82b3b9079b44e421a62c185b9bd77",
113
113
  ZKSwap_wstETH_ETH_20 = "ZKSwap Finance wstETH/ETH v3 0.01pct 0xd587b615ac1acb6c1f95242a1bcac512d2cd8122",
114
114
  ZKSwap_wrsETH_ETH_20 = "ZKSwap Finance wrsETH/ETH v3 0.01pct 0xcd6d8b89f24b017dbbdc0c13a99d29edc13e2189",
115
- ZKSwap_ZF_ETH = "ZKSwap Finance ZF/ETH v2 0.1pct ZKSwap Finance ZF/ETH v2 0xd33a17c883d5aa79470cd2522abb213dc4017e01"
115
+ ZKSwap_ZF_ETH = "ZKSwap Finance ZF/ETH v2 0.1pct ZKSwap Finance ZF/ETH v2 0xd33a17c883d5aa79470cd2522abb213dc4017e01",
116
+ raffle_jumper = "raffle jumper 31/01/25",
117
+ airdrop_jumper = "airdrop jumper 31/01/25",
118
+ airdrop_layerswap = "airdrop layerswap 31/01/25",
119
+ Syncswap_USN_USDCe_Range = "SyncSwap USN/USDC.e Range Pool 0xe6ed575d9627942893f12bf9c2cc3c47cd11d002",
120
+ Syncswap_USN_sUSN_Range = "SyncSwap USN/sUSN Range Pool 0x12bf23c2fe929c23ab375199efad425e70c0ece1",
121
+ Izumi_Finance_WETH_WBTC = "Izumi Finance WETH/WBTC 0xee0f2c77b0fd3daaa7fb332c8f6589f73b29ecfc",
122
+ Maverick_WETH_zkETH_Boosted_V2 = "Maverick WETH-zkETH Boosted Position 0.03% Fee 0.10% Width Mode Static 0xfb3874c26729a9ef9c3ea9a05b99a45d75cc1243",
123
+ ZKSwap_WETH_WBTC = "ZKSwap Finance WETH/WBTC v3 0.01pct 0xb6a5cc74a348be4e999a7ba1032de390dd3e993a",
124
+ ReactorFusion_WBTC = "ReactorFusion WBTC 0x0a976e1e7d3052beb46085acbe1e0daccf4a19cf",
125
+ Venus_wUSDM = "Venus wUSDM 0x183de3c349fcf546aae925e1c7f364ea6fb4033c",
126
+ Zerolend_WBTC = "Zerolend WBTC 0x7c65e6ec6feceb333092e6fe69672a3475c591fb"
116
127
  }
117
128
  export declare enum modeCampaigns {
118
129
  Steer_EES_V2_Weth_USDC_Kim_Mode = "SteerEESV2 Kim WETH/USDC 0x468cc91df6f669cae6cdce766995bd7874052fbc",