@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.
- package/dist/src/eden/index.d.ts +656 -279
- package/dist/src/engine/erc20SubTypeProcessors/helpers/tokenType.d.ts +3 -1
- package/dist/src/engine/erc20SubTypeProcessors/helpers/tokenType.js +4 -0
- package/dist/src/engine/erc20SubTypeProcessors/implementations/BEXRewardGaugeProcessor.d.ts +51 -0
- package/dist/src/engine/erc20SubTypeProcessors/implementations/BEXRewardGaugeProcessor.js +102 -0
- package/dist/src/engine/erc20SubTypeProcessors/implementations/processorMapping.js +3 -0
- package/dist/src/engine/erc20SubTypeProcessors/subtypesRound1.js +4 -0
- package/dist/src/engine/opportunityMetadata/factory.js +1 -1
- package/dist/src/engine/opportunityMetadata/implementations/Ajna.d.ts +3 -1
- package/dist/src/engine/opportunityMetadata/implementations/Ajna.js +6 -0
- package/dist/src/engine/opportunityMetadata/implementations/{Ambiant.d.ts → Ambient.d.ts} +2 -0
- package/dist/src/engine/opportunityMetadata/implementations/{Ambiant.js → Ambient.js} +5 -1
- package/dist/src/engine/opportunityMetadata/implementations/Badger.d.ts +2 -0
- package/dist/src/engine/opportunityMetadata/implementations/Badger.js +5 -0
- package/dist/src/engine/opportunityMetadata/implementations/Clamm.d.ts +27 -0
- package/dist/src/engine/opportunityMetadata/implementations/Clamm.js +145 -1
- package/dist/src/engine/opportunityMetadata/implementations/Compound.d.ts +2 -0
- package/dist/src/engine/opportunityMetadata/implementations/Compound.js +4 -0
- package/dist/src/engine/opportunityMetadata/implementations/Erc20.d.ts +2 -0
- package/dist/src/engine/opportunityMetadata/implementations/Erc20.js +4 -0
- package/dist/src/engine/opportunityMetadata/implementations/Euler.d.ts +2 -0
- package/dist/src/engine/opportunityMetadata/implementations/Euler.js +4 -0
- package/dist/src/engine/opportunityMetadata/implementations/EventBased.d.ts +3 -0
- package/dist/src/engine/opportunityMetadata/implementations/EventBased.js +4 -0
- package/dist/src/engine/opportunityMetadata/implementations/Hyperdrive.d.ts +2 -0
- package/dist/src/engine/opportunityMetadata/implementations/Hyperdrive.js +5 -0
- package/dist/src/engine/opportunityMetadata/implementations/JsonAirdrop.d.ts +8 -0
- package/dist/src/engine/opportunityMetadata/implementations/JsonAirdrop.js +4 -0
- package/dist/src/engine/opportunityMetadata/implementations/Morpho.d.ts +2 -0
- package/dist/src/engine/opportunityMetadata/implementations/Morpho.js +17 -1
- package/dist/src/index.d.ts +169 -0
- package/dist/src/jobs/set-dungeon-keeper.js +8 -1
- package/dist/src/modules/v4/campaign/campaign.controller.d.ts +169 -0
- package/dist/src/modules/v4/campaign/campaign.controller.js +62 -0
- package/dist/src/modules/v4/dynamicData/dynamicData.service.d.ts +2 -2
- package/dist/src/modules/v4/dynamicData/dynamicData.service.js +5 -4
- package/dist/src/modules/v4/opportunity/opportunity.service.d.ts +16 -25
- package/dist/src/modules/v4/opportunity/opportunity.service.js +34 -34
- package/dist/src/modules/v4/programPayload/programPayload.repository.d.ts +3 -15
- package/dist/src/modules/v4/programPayload/programPayload.repository.js +3 -36
- package/dist/src/modules/v4/protocol/protocol.model.d.ts +1 -1
- package/dist/src/modules/v4/protocol/protocol.model.js +0 -1
- package/dist/src/modules/v4/router.d.ts +169 -0
- package/dist/src/utils/decodeCalls.js +9 -1
- package/dist/src/utils/encodeCalls.js +9 -1
- package/dist/src/utils/generateCardName.js +3 -0
- package/dist/tsconfig.package.tsbuildinfo +1 -1
- 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
|
}
|
package/dist/src/index.d.ts
CHANGED
@@ -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: {
|
@@ -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
|
-
|
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
|
*/
|