@merkl/api 0.19.14 → 0.19.16

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/src/eden/index.d.ts +656 -279
  2. package/dist/src/engine/erc20SubTypeProcessors/helpers/tokenType.d.ts +3 -1
  3. package/dist/src/engine/erc20SubTypeProcessors/helpers/tokenType.js +4 -0
  4. package/dist/src/engine/erc20SubTypeProcessors/implementations/BEXRewardGaugeProcessor.d.ts +51 -0
  5. package/dist/src/engine/erc20SubTypeProcessors/implementations/BEXRewardGaugeProcessor.js +102 -0
  6. package/dist/src/engine/erc20SubTypeProcessors/implementations/processorMapping.js +3 -0
  7. package/dist/src/engine/erc20SubTypeProcessors/subtypesRound1.js +4 -0
  8. package/dist/src/engine/opportunityMetadata/factory.js +1 -1
  9. package/dist/src/engine/opportunityMetadata/implementations/Ajna.d.ts +3 -1
  10. package/dist/src/engine/opportunityMetadata/implementations/Ajna.js +6 -0
  11. package/dist/src/engine/opportunityMetadata/implementations/{Ambiant.d.ts → Ambient.d.ts} +2 -0
  12. package/dist/src/engine/opportunityMetadata/implementations/{Ambiant.js → Ambient.js} +5 -1
  13. package/dist/src/engine/opportunityMetadata/implementations/Badger.d.ts +2 -0
  14. package/dist/src/engine/opportunityMetadata/implementations/Badger.js +5 -0
  15. package/dist/src/engine/opportunityMetadata/implementations/Clamm.d.ts +27 -0
  16. package/dist/src/engine/opportunityMetadata/implementations/Clamm.js +145 -1
  17. package/dist/src/engine/opportunityMetadata/implementations/Compound.d.ts +2 -0
  18. package/dist/src/engine/opportunityMetadata/implementations/Compound.js +4 -0
  19. package/dist/src/engine/opportunityMetadata/implementations/Erc20.d.ts +2 -0
  20. package/dist/src/engine/opportunityMetadata/implementations/Erc20.js +4 -0
  21. package/dist/src/engine/opportunityMetadata/implementations/Euler.d.ts +2 -0
  22. package/dist/src/engine/opportunityMetadata/implementations/Euler.js +4 -0
  23. package/dist/src/engine/opportunityMetadata/implementations/EventBased.d.ts +3 -0
  24. package/dist/src/engine/opportunityMetadata/implementations/EventBased.js +4 -0
  25. package/dist/src/engine/opportunityMetadata/implementations/Hyperdrive.d.ts +2 -0
  26. package/dist/src/engine/opportunityMetadata/implementations/Hyperdrive.js +5 -0
  27. package/dist/src/engine/opportunityMetadata/implementations/JsonAirdrop.d.ts +8 -0
  28. package/dist/src/engine/opportunityMetadata/implementations/JsonAirdrop.js +4 -0
  29. package/dist/src/engine/opportunityMetadata/implementations/Morpho.d.ts +2 -0
  30. package/dist/src/engine/opportunityMetadata/implementations/Morpho.js +17 -1
  31. package/dist/src/index.d.ts +169 -0
  32. package/dist/src/jobs/set-dungeon-keeper.js +8 -1
  33. package/dist/src/modules/v4/campaign/campaign.controller.d.ts +169 -0
  34. package/dist/src/modules/v4/campaign/campaign.controller.js +62 -0
  35. package/dist/src/modules/v4/dynamicData/dynamicData.service.d.ts +2 -2
  36. package/dist/src/modules/v4/dynamicData/dynamicData.service.js +5 -4
  37. package/dist/src/modules/v4/opportunity/opportunity.service.d.ts +16 -25
  38. package/dist/src/modules/v4/opportunity/opportunity.service.js +34 -34
  39. package/dist/src/modules/v4/programPayload/programPayload.repository.d.ts +3 -15
  40. package/dist/src/modules/v4/programPayload/programPayload.repository.js +3 -36
  41. package/dist/src/modules/v4/protocol/protocol.model.d.ts +1 -1
  42. package/dist/src/modules/v4/protocol/protocol.model.js +0 -1
  43. package/dist/src/modules/v4/router.d.ts +169 -0
  44. package/dist/src/utils/decodeCalls.js +9 -1
  45. package/dist/src/utils/encodeCalls.js +9 -1
  46. package/dist/src/utils/generateCardName.js +3 -0
  47. package/dist/tsconfig.package.tsbuildinfo +1 -1
  48. package/package.json +1 -1
@@ -10,6 +10,14 @@ export declare class JsonAirdropMetadata implements MetadataBuilder<campaignType
10
10
  address: string;
11
11
  }[];
12
12
  mainProtocol: string | undefined;
13
+ depositUrl?: undefined;
14
+ } | {
15
+ action: "DROP";
16
+ name: string;
17
+ tokens: never[];
18
+ mainProtocol: string | undefined;
19
+ depositUrl: any;
13
20
  }>;
21
+ static generateUrl(_computeChainId: ChainId, params: CampaignParameters<campaignType>["campaignParameters"]): any;
14
22
  }
15
23
  export {};
@@ -32,7 +32,11 @@ export class JsonAirdropMetadata {
32
32
  name: `${prefix} ${params.symbolRewardToken}`,
33
33
  tokens: [],
34
34
  mainProtocol: aavePrefix || aciPrefix ? "aave" : undefined,
35
+ depositUrl: JsonAirdropMetadata.generateUrl(computeChainId, params),
35
36
  };
36
37
  }
37
38
  }
39
+ static generateUrl(_computeChainId, params) {
40
+ return params.jsonUrl;
41
+ }
38
42
  }
@@ -10,6 +10,8 @@ export declare class MorphoMetadata implements MetadataBuilder<campaignType> {
10
10
  }[];
11
11
  name: string;
12
12
  mainProtocol: string;
13
+ depositUrl: string | undefined;
13
14
  }>;
15
+ static generateUrl(computeChainId: ChainId, params: CampaignParameters<campaignType>["campaignParameters"], subType: CampaignParameters<campaignType>["campaignSubType"]): string | undefined;
14
16
  }
15
17
  export {};
@@ -1,5 +1,5 @@
1
1
  import { OpportunityAction } from "@db/api";
2
- import { BN2Number } from "@sdk";
2
+ import { BN2Number, MorphoSubCampaignType, NETWORK_LABELS, } from "@sdk";
3
3
  export class MorphoMetadata {
4
4
  async build(computeChainId, params, subType) {
5
5
  const morphoParams = params;
@@ -16,6 +16,22 @@ export class MorphoMetadata {
16
16
  tokens: [{ chainId: computeChainId, address: params.targetToken }],
17
17
  name: subtype.name,
18
18
  mainProtocol: "morpho",
19
+ depositUrl: MorphoMetadata.generateUrl(computeChainId, params, subType),
19
20
  };
20
21
  }
22
+ static generateUrl(computeChainId, params, subType) {
23
+ switch (subType) {
24
+ case MorphoSubCampaignType.META: {
25
+ return `https://app.morpho.org/vault?vault=${params.targetToken}&network=${NETWORK_LABELS[computeChainId]?.toLowerCase()}`;
26
+ }
27
+ case MorphoSubCampaignType.SUPPLY_BLUE: {
28
+ return `https://app.morpho.org/?network=${NETWORK_LABELS[computeChainId]?.toLowerCase()}`;
29
+ }
30
+ case MorphoSubCampaignType.BORROWING_BLUE:
31
+ case MorphoSubCampaignType.COLLATERAL_BLUE: {
32
+ const typedParams = params;
33
+ return `https://app.morpho.org/market?id=${typedParams.marketId}&network=${NETWORK_LABELS[computeChainId]?.toLowerCase()}`;
34
+ }
35
+ }
36
+ }
21
37
  }
@@ -1246,6 +1246,175 @@ declare const app: Elysia<"", false, {
1246
1246
  };
1247
1247
  };
1248
1248
  };
1249
+ } & {
1250
+ "dry-run": {
1251
+ ":campaignId": {
1252
+ "dynamic-data": {
1253
+ get: {
1254
+ body: unknown;
1255
+ params: {
1256
+ campaignId: string;
1257
+ };
1258
+ query: unknown;
1259
+ headers: {
1260
+ authorization: string;
1261
+ };
1262
+ response: {
1263
+ 200: unknown[];
1264
+ };
1265
+ };
1266
+ };
1267
+ };
1268
+ };
1269
+ } & {
1270
+ "dry-run": {
1271
+ ":campaignId": {
1272
+ "meta-data": {
1273
+ get: {
1274
+ body: unknown;
1275
+ params: {
1276
+ campaignId: string;
1277
+ };
1278
+ query: unknown;
1279
+ headers: {
1280
+ authorization: string;
1281
+ };
1282
+ response: {
1283
+ 200: {
1284
+ id: string;
1285
+ chainId: number;
1286
+ type: string;
1287
+ identifier: string;
1288
+ name: string;
1289
+ status: "PAST" | "LIVE" | "SOON";
1290
+ action: any;
1291
+ tokens: ({
1292
+ symbol: string;
1293
+ id: string;
1294
+ name: string | null;
1295
+ icon: string;
1296
+ address: string;
1297
+ chainId: number;
1298
+ decimals: number;
1299
+ verified: boolean;
1300
+ isTest: boolean;
1301
+ isPoint: boolean;
1302
+ isNative: boolean;
1303
+ } & {
1304
+ price?: number | null | undefined;
1305
+ })[][];
1306
+ mainProtocol: string | undefined;
1307
+ depositUrl: any;
1308
+ tags: string[];
1309
+ };
1310
+ };
1311
+ };
1312
+ };
1313
+ };
1314
+ };
1315
+ } & {
1316
+ index: {
1317
+ get: {
1318
+ body: unknown;
1319
+ params: {};
1320
+ query: {
1321
+ type?: string | undefined;
1322
+ status?: "NONE" | "PAST" | "LIVE" | "SOON" | undefined;
1323
+ items?: number | undefined;
1324
+ subType?: number | undefined;
1325
+ page?: number | undefined;
1326
+ types?: string[] | undefined;
1327
+ campaignId?: string | undefined;
1328
+ opportunityId?: string | undefined;
1329
+ startTimestamp?: string | undefined;
1330
+ endTimestamp?: string | undefined;
1331
+ creatorAddress?: string | undefined;
1332
+ chainId?: number | undefined;
1333
+ creatorId?: string | undefined;
1334
+ mainParameter?: string | undefined;
1335
+ point?: boolean | undefined;
1336
+ tokenAddress?: string | undefined;
1337
+ test?: boolean | undefined;
1338
+ creatorTag?: string | undefined;
1339
+ distributionChainIds?: number[] | undefined;
1340
+ tokenSymbol?: string | undefined;
1341
+ withOpportunity?: boolean | undefined;
1342
+ createdAfter?: Date | null | undefined;
1343
+ };
1344
+ headers: unknown;
1345
+ response: {
1346
+ 200: {
1347
+ params: any;
1348
+ chain: {
1349
+ id: number;
1350
+ name: string;
1351
+ icon: string;
1352
+ };
1353
+ endTimestamp: number;
1354
+ startTimestamp: number;
1355
+ rewardToken: {
1356
+ symbol: string;
1357
+ id: string;
1358
+ name: string | null;
1359
+ icon: string;
1360
+ address: string;
1361
+ chainId: number;
1362
+ decimals: number;
1363
+ verified: boolean;
1364
+ isTest: boolean;
1365
+ isPoint: boolean;
1366
+ isNative: boolean;
1367
+ } & {
1368
+ price?: number | null | undefined;
1369
+ };
1370
+ distributionChain: {
1371
+ id: number;
1372
+ name: string;
1373
+ icon: string;
1374
+ } | undefined;
1375
+ campaignStatus: {
1376
+ computedUntil: number;
1377
+ processingStarted: number;
1378
+ error: string;
1379
+ status: import("@db/api").$Enums.RunStatus;
1380
+ details: import("database/api/.generated/runtime/library").JsonValue;
1381
+ campaignId: string;
1382
+ } | undefined;
1383
+ creatorAddress: string;
1384
+ creator: {
1385
+ tags: string[];
1386
+ address: string;
1387
+ creatorId: string | null;
1388
+ };
1389
+ createdAt: string;
1390
+ Opportunity: {
1391
+ id: string;
1392
+ name: string;
1393
+ type: string;
1394
+ status: import("@db/api").$Enums.Status;
1395
+ tags: string[];
1396
+ identifier: string;
1397
+ action: import("@db/api").$Enums.OpportunityAction;
1398
+ chainId: number;
1399
+ depositUrl: string | null;
1400
+ mainProtocolId: string | null;
1401
+ tvl: number;
1402
+ apr: number;
1403
+ dailyRewards: number;
1404
+ };
1405
+ id: string;
1406
+ type: string;
1407
+ subType: number | null;
1408
+ computeChainId: number;
1409
+ distributionChainId: number;
1410
+ campaignId: string;
1411
+ rewardTokenId: string;
1412
+ amount: string;
1413
+ opportunityId: string;
1414
+ }[];
1415
+ };
1416
+ };
1417
+ };
1249
1418
  } & {
1250
1419
  ":id": {
1251
1420
  get: {
@@ -79,4 +79,11 @@ async function main() {
79
79
  .replace("@merkl.xyz", "");
80
80
  await assignRole(notionId);
81
81
  }
82
- await main();
82
+ try {
83
+ await main();
84
+ process.exit(0);
85
+ }
86
+ catch (err) {
87
+ console.error(err);
88
+ process.exit(1);
89
+ }
@@ -163,6 +163,175 @@ export declare const CampaignController: Elysia<"/campaigns", false, {
163
163
  };
164
164
  };
165
165
  };
166
+ } & {
167
+ "dry-run": {
168
+ ":campaignId": {
169
+ "dynamic-data": {
170
+ get: {
171
+ body: unknown;
172
+ params: {
173
+ campaignId: string;
174
+ };
175
+ query: unknown;
176
+ headers: {
177
+ authorization: string;
178
+ };
179
+ response: {
180
+ 200: unknown[];
181
+ };
182
+ };
183
+ };
184
+ };
185
+ };
186
+ } & {
187
+ "dry-run": {
188
+ ":campaignId": {
189
+ "meta-data": {
190
+ get: {
191
+ body: unknown;
192
+ params: {
193
+ campaignId: string;
194
+ };
195
+ query: unknown;
196
+ headers: {
197
+ authorization: string;
198
+ };
199
+ response: {
200
+ 200: {
201
+ id: string;
202
+ chainId: number;
203
+ type: string;
204
+ identifier: string;
205
+ name: string;
206
+ status: "PAST" | "LIVE" | "SOON";
207
+ action: any;
208
+ tokens: ({
209
+ symbol: string;
210
+ id: string;
211
+ name: string | null;
212
+ icon: string;
213
+ address: string;
214
+ chainId: number;
215
+ decimals: number;
216
+ verified: boolean;
217
+ isTest: boolean;
218
+ isPoint: boolean;
219
+ isNative: boolean;
220
+ } & {
221
+ price?: number | null | undefined;
222
+ })[][];
223
+ mainProtocol: string | undefined;
224
+ depositUrl: any;
225
+ tags: string[];
226
+ };
227
+ };
228
+ };
229
+ };
230
+ };
231
+ };
232
+ } & {
233
+ index: {
234
+ get: {
235
+ body: unknown;
236
+ params: {};
237
+ query: {
238
+ type?: string | undefined;
239
+ status?: "NONE" | "PAST" | "LIVE" | "SOON" | undefined;
240
+ items?: number | undefined;
241
+ subType?: number | undefined;
242
+ page?: number | undefined;
243
+ types?: string[] | undefined;
244
+ campaignId?: string | undefined;
245
+ opportunityId?: string | undefined;
246
+ startTimestamp?: string | undefined;
247
+ endTimestamp?: string | undefined;
248
+ creatorAddress?: string | undefined;
249
+ chainId?: number | undefined;
250
+ creatorId?: string | undefined;
251
+ mainParameter?: string | undefined;
252
+ point?: boolean | undefined;
253
+ tokenAddress?: string | undefined;
254
+ test?: boolean | undefined;
255
+ creatorTag?: string | undefined;
256
+ distributionChainIds?: number[] | undefined;
257
+ tokenSymbol?: string | undefined;
258
+ withOpportunity?: boolean | undefined;
259
+ createdAfter?: Date | null | undefined;
260
+ };
261
+ headers: unknown;
262
+ response: {
263
+ 200: {
264
+ params: any;
265
+ chain: {
266
+ id: number;
267
+ name: string;
268
+ icon: string;
269
+ };
270
+ endTimestamp: number;
271
+ startTimestamp: number;
272
+ rewardToken: {
273
+ symbol: string;
274
+ id: string;
275
+ name: string | null;
276
+ icon: string;
277
+ address: string;
278
+ chainId: number;
279
+ decimals: number;
280
+ verified: boolean;
281
+ isTest: boolean;
282
+ isPoint: boolean;
283
+ isNative: boolean;
284
+ } & {
285
+ price?: number | null | undefined;
286
+ };
287
+ distributionChain: {
288
+ id: number;
289
+ name: string;
290
+ icon: string;
291
+ } | undefined;
292
+ campaignStatus: {
293
+ computedUntil: number;
294
+ processingStarted: number;
295
+ error: string;
296
+ status: import("@db/api").$Enums.RunStatus;
297
+ details: import("database/api/.generated/runtime/library").JsonValue;
298
+ campaignId: string;
299
+ } | undefined;
300
+ creatorAddress: string;
301
+ creator: {
302
+ tags: string[];
303
+ address: string;
304
+ creatorId: string | null;
305
+ };
306
+ createdAt: string;
307
+ Opportunity: {
308
+ id: string;
309
+ name: string;
310
+ type: string;
311
+ status: import("@db/api").$Enums.Status;
312
+ tags: string[];
313
+ identifier: string;
314
+ action: import("@db/api").$Enums.OpportunityAction;
315
+ chainId: number;
316
+ depositUrl: string | null;
317
+ mainProtocolId: string | null;
318
+ tvl: number;
319
+ apr: number;
320
+ dailyRewards: number;
321
+ };
322
+ id: string;
323
+ type: string;
324
+ subType: number | null;
325
+ computeChainId: number;
326
+ distributionChainId: number;
327
+ campaignId: string;
328
+ rewardTokenId: string;
329
+ amount: string;
330
+ opportunityId: string;
331
+ }[];
332
+ };
333
+ };
334
+ };
166
335
  } & {
167
336
  ":id": {
168
337
  get: {
@@ -6,6 +6,7 @@ import { Campaign } from "@sdk";
6
6
  import Elysia, { t } from "elysia";
7
7
  import { throwOnUnsupportedChainId } from "src/utils/throw";
8
8
  import { DynamicDataService } from "../dynamicData/dynamicData.service";
9
+ import { OpportunityService } from "../opportunity";
9
10
  import { CampaignResourceDto, CreateCampaignDto, GetCampaignQueryDto, RemoveManualOverrideDto, UpdateCampaignCreatorDto, UpdateCampaignDto, UpdateMetaDataCampaignDto, } from "./campaign.model";
10
11
  import { CampaignService } from "./campaign.service";
11
12
  // ─── Campaigns Controller ────────────────────────────────────────────────────
@@ -66,6 +67,67 @@ export const CampaignController = new Elysia({ prefix: "/campaigns", detail: { t
66
67
  };
67
68
  return await DynamicDataService.updateForCampaigns([campaignV3]);
68
69
  }, { beforeHandle: BackOfficeGuard, headers: AuthorizationHeadersDto, detail: { hide: true } })
70
+ // ─── Test Dynamic and MetaData ──────────────────────────────────────────────
71
+ .get("/dry-run/:campaignId/dynamic-data", async ({ params }) => {
72
+ const id = (await CampaignService.findMany({ campaignId: params.campaignId, test: true }))[0].id;
73
+ if (!id)
74
+ throw new NotFoundError();
75
+ const campaign = await CampaignService.findUniqueOrThrow(id, true);
76
+ const campaignV3 = {
77
+ amount: campaign.amount,
78
+ campaignId: campaign.campaignId,
79
+ mainParameter: campaign.Opportunity.identifier,
80
+ campaignParameters: campaign.params,
81
+ campaignSubType: campaign.subType,
82
+ campaignType: Campaign[campaign.type],
83
+ chainId: campaign.distributionChainId,
84
+ computeChainId: campaign.computeChainId,
85
+ creator: campaign.creatorAddress,
86
+ endTimestamp: Number(campaign.endTimestamp),
87
+ rewardToken: campaign.RewardToken.address,
88
+ startTimestamp: Number(campaign.startTimestamp),
89
+ index: 0,
90
+ };
91
+ return await DynamicDataService.updateForCampaigns([campaignV3], true);
92
+ }, { beforeHandle: BackOfficeGuard, headers: AuthorizationHeadersDto, detail: { hide: true } })
93
+ .get("/dry-run/:campaignId/meta-data", async ({ params }) => {
94
+ const id = (await CampaignService.findMany({ campaignId: params.campaignId, test: true }))[0].id;
95
+ if (!id)
96
+ throw new NotFoundError();
97
+ const campaign = await CampaignService.findUniqueOrThrow(id, true);
98
+ const campaignV3 = {
99
+ amount: campaign.amount,
100
+ campaignId: campaign.campaignId,
101
+ mainParameter: campaign.Opportunity.identifier,
102
+ campaignParameters: campaign.params,
103
+ campaignSubType: campaign.subType,
104
+ chainId: campaign.distributionChainId,
105
+ computeChainId: campaign.computeChainId,
106
+ creator: campaign.creatorAddress,
107
+ endTimestamp: campaign.endTimestamp.toString(),
108
+ rewardToken: campaign.RewardToken.address,
109
+ startTimestamp: campaign.startTimestamp.toString(),
110
+ index: 0,
111
+ type: Campaign[campaign.type],
112
+ params: JSON.stringify(campaign.params),
113
+ rewardTokenAddress: campaign.RewardToken.address,
114
+ opportunityIdentifier: campaign.Opportunity.identifier,
115
+ };
116
+ return await OpportunityService.fakeCreateFromCampaign(campaignV3);
117
+ }, { beforeHandle: BackOfficeGuard, headers: AuthorizationHeadersDto, detail: { hide: true } })
118
+ // ─── Get Many Campaigns ──────────────────────────────────────────────
119
+ .get("/", async ({ query }) => {
120
+ if (query.items === 0)
121
+ throw new HttpError("Bad Request: Cannot retrieve 0 items", 400);
122
+ return await CampaignService.findMany(query);
123
+ }, {
124
+ query: GetCampaignQueryDto,
125
+ response: t.Array(CampaignResourceDto),
126
+ detail: {
127
+ description: `**Retrieve Multiple Campaigns**
128
+ <p>This endpoint enables you to search for campaigns by providing specific criteria through query parameters.</p>`,
129
+ },
130
+ })
69
131
  // ─── Get One Campaign ────────────────────────────────────────────────
70
132
  .get("/:id", async ({ params }) => {
71
133
  try {
@@ -9,6 +9,6 @@ export declare class DynamicDataService {
9
9
  priceTargetToken: number;
10
10
  type: string;
11
11
  }>;
12
- static updateForCampaignType(campaigns: CampaignParameters<CampaignEnum>[], type: Campaign): Promise<unknown[]>;
13
- static updateForCampaigns(campaigns: CampaignParameters<CampaignEnum>[]): Promise<unknown[]>;
12
+ static updateForCampaignType(campaigns: CampaignParameters<CampaignEnum>[], type: Campaign, dryRun?: boolean): Promise<unknown[]>;
13
+ static updateForCampaigns(campaigns: CampaignParameters<CampaignEnum>[], dryRun?: boolean): Promise<unknown[]>;
14
14
  }
@@ -52,7 +52,7 @@ export class DynamicDataService {
52
52
  type: result[0]?.type ?? "defaultType",
53
53
  };
54
54
  }
55
- static async updateForCampaignType(campaigns, type) {
55
+ static async updateForCampaignType(campaigns, type, dryRun = false) {
56
56
  const chainId = campaigns[0].computeChainId;
57
57
  const dynamicDataArray = [];
58
58
  const dynamicData = await dynamicDataBuilderFactory(typeof type === "number" ? type : Campaign[type]).build(chainId, campaigns);
@@ -78,7 +78,8 @@ export class DynamicDataService {
78
78
  type: Campaign[+type],
79
79
  });
80
80
  try {
81
- await OpportunityRepository.updateRecords(opportunityId, apr, tvl, dailyRewards);
81
+ if (!dryRun)
82
+ await OpportunityRepository.updateRecords(opportunityId, apr, tvl, dailyRewards);
82
83
  }
83
84
  catch (err) {
84
85
  throw new HttpError("Failed to update dynamic data", 500, {
@@ -97,7 +98,7 @@ export class DynamicDataService {
97
98
  }
98
99
  return dynamicDataArray;
99
100
  }
100
- static async updateForCampaigns(campaigns) {
101
+ static async updateForCampaigns(campaigns, dryRun = false) {
101
102
  const campaignTypeToCampaigns = new Map();
102
103
  for (const campaign of campaigns) {
103
104
  const type = campaign.campaignType;
@@ -113,7 +114,7 @@ export class DynamicDataService {
113
114
  try {
114
115
  log.info(`updating dynamic data for ${campaigns.length} campaigns of type ${CampaignEnum[campaignType]}`);
115
116
  try {
116
- dynamicDataArray.push(await DynamicDataService.updateForCampaignType(campaigns, campaignType));
117
+ dynamicDataArray.push(await DynamicDataService.updateForCampaignType(campaigns, campaignType, dryRun));
117
118
  }
118
119
  catch (err) {
119
120
  console.error(`Failed to update dynamic data for campaign type ${CampaignEnum[campaignType]}`, err);
@@ -32,8 +32,23 @@ export declare abstract class OpportunityService {
32
32
  type: string;
33
33
  identifier: string;
34
34
  name: string;
35
- status: "SOON";
35
+ status: "PAST" | "LIVE" | "SOON";
36
36
  action: OpportunityAction;
37
+ tokens: ({
38
+ symbol: string;
39
+ id: string;
40
+ name: string | null;
41
+ icon: string;
42
+ address: string;
43
+ chainId: number;
44
+ decimals: number;
45
+ verified: boolean;
46
+ isTest: boolean;
47
+ isPoint: boolean;
48
+ isNative: boolean;
49
+ } & {
50
+ price?: number | null | undefined;
51
+ })[][];
37
52
  mainProtocol: string | undefined;
38
53
  depositUrl: any;
39
54
  tags: string[];
@@ -80,30 +95,6 @@ export declare abstract class OpportunityService {
80
95
  apr: number;
81
96
  dailyRewards: number;
82
97
  }>;
83
- static updateStatusFromCampaign(campaign: Omit<CreateCampaignModel, "id">, upsert?: boolean): Promise<{
84
- id: string;
85
- chainId: number;
86
- type: string;
87
- identifier: string;
88
- name: string;
89
- status: "PAST" | "LIVE" | "SOON";
90
- action: OpportunityAction;
91
- tokens: {
92
- price?: number | null | undefined;
93
- symbol: string;
94
- id: string;
95
- name: string | null;
96
- icon: string;
97
- address: string;
98
- chainId: number;
99
- decimals: number;
100
- verified: boolean;
101
- isTest: boolean;
102
- }[];
103
- mainProtocol: string | undefined;
104
- depositUrl: string | undefined;
105
- tags: string[];
106
- }>;
107
98
  /**
108
99
  * deletes and recreates an opportunity with fresh data
109
100
  */