@merkl/api 0.20.72 → 0.20.73
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/database/api/.generated/drizzle/schema.d.ts +17 -0
- package/dist/database/api/.generated/drizzle/schema.js +1 -0
- package/dist/database/api/.generated/drizzle/schema.ts +1 -0
- package/dist/database/api/.generated/edge.js +4 -3
- package/dist/database/api/.generated/index-browser.js +1 -0
- package/dist/database/api/.generated/index.d.ts +69 -1
- package/dist/database/api/.generated/index.js +4 -3
- package/dist/database/api/.generated/package.json +1 -1
- package/dist/database/api/.generated/schema.prisma +24 -23
- package/dist/database/api/.generated/wasm.js +1 -0
- package/dist/src/eden/index.d.ts +99 -37
- package/dist/src/engine/dynamicData/utils/getEulerV2Vaults.js +7 -6
- package/dist/src/index.d.ts +27 -17
- package/dist/src/jobs/update-euler-vaults.js +3 -1
- package/dist/src/modules/v4/campaign/campaign.controller.d.ts +3 -0
- package/dist/src/modules/v4/campaign/campaign.repository.d.ts +5 -0
- package/dist/src/modules/v4/campaign/campaign.service.d.ts +9 -0
- package/dist/src/modules/v4/campaign/campaign.service.js +10 -1
- package/dist/src/modules/v4/opportunity/opportunity.controller.d.ts +7 -0
- package/dist/src/modules/v4/opportunity/opportunity.model.d.ts +3 -0
- package/dist/src/modules/v4/opportunity/opportunity.model.js +4 -1
- package/dist/src/modules/v4/opportunity/opportunity.repository.d.ts +9 -0
- package/dist/src/modules/v4/opportunity/opportunity.repository.js +0 -1
- package/dist/src/modules/v4/opportunity/opportunity.service.d.ts +12 -0
- package/dist/src/modules/v4/opportunity/opportunity.service.js +4 -3
- package/dist/src/modules/v4/protocol/protocol.repository.d.ts +1 -0
- package/dist/src/modules/v4/reward/reward.repository.d.ts +1 -0
- package/dist/src/modules/v4/reward/reward.service.d.ts +8 -0
- package/dist/src/modules/v4/router.d.ts +12 -0
- package/dist/src/modules/v4/user/user.controller.d.ts +2 -0
- package/dist/src/routes/v3/euler.d.ts +16 -18
- package/dist/src/routes/v3/euler.js +20 -11
- package/dist/src/routes/v3/router.d.ts +15 -17
- package/dist/src/utils/error.d.ts +6 -0
- package/dist/src/utils/error.js +12 -0
- package/dist/tsconfig.package.tsbuildinfo +1 -1
- package/package.json +1 -1
@@ -107,7 +107,7 @@ async function computeCollatListAndReturnVaults(chainId, vaults) {
|
|
107
107
|
}
|
108
108
|
catch { }
|
109
109
|
vault.collaterals.push({
|
110
|
-
address: collat.collateral,
|
110
|
+
address: getAddress(collat.collateral),
|
111
111
|
symbol: symbolCollateral,
|
112
112
|
symbolUnderlying: symbolUnderlying,
|
113
113
|
borrowLTV: collat.borrowLTV.toString(),
|
@@ -129,7 +129,7 @@ export async function getEulerV2Vaults(chainId) {
|
|
129
129
|
let vaults = [];
|
130
130
|
// 0_ Fetch all euler vaults from database
|
131
131
|
const storedVaults = await apiDbClient.logged.findMany({
|
132
|
-
where: { type: LoggedEntityType.EULER },
|
132
|
+
where: { type: LoggedEntityType.EULER, ...(!!chainId && { chainId: chainId }) },
|
133
133
|
});
|
134
134
|
const res = await Promise.all(chainIdArray.map(async (chainId) => {
|
135
135
|
let vaultsPerChain = [];
|
@@ -137,7 +137,7 @@ export async function getEulerV2Vaults(chainId) {
|
|
137
137
|
try {
|
138
138
|
// 1_ Get latest euler vaults from chain
|
139
139
|
const storedVaultsPerChain = storedVaults.filter(vault => vault.chainId === chainId);
|
140
|
-
log.info(
|
140
|
+
log.info(`🎈 found ${storedVaultsPerChain.length} already stored vaults on ${NETWORK_LABELS[chainId]}`);
|
141
141
|
let fromBlock;
|
142
142
|
if (storedVaultsPerChain.length > 0) {
|
143
143
|
fromBlock = Math.max(...storedVaultsPerChain.map(vault => vault.fetchAtBlock)) + 1;
|
@@ -156,9 +156,9 @@ export async function getEulerV2Vaults(chainId) {
|
|
156
156
|
const aux = EulerEVKInterface.decodeEventLog("EVaultCreated", log.data, log.topics);
|
157
157
|
const name = (await EulerVault__factory.connect(log.address, providers[chainId]).name()).split(" ");
|
158
158
|
const vaultName = (await fetchEulerVaultName(getAddress(log.address), chainId)) ?? name[name.length - 1];
|
159
|
-
|
159
|
+
// Match previous typings
|
160
160
|
return {
|
161
|
-
address: log.address.toString(),
|
161
|
+
address: getAddress(log.address.toString()),
|
162
162
|
asset: aux[1].toString(),
|
163
163
|
fetchedAtBlock: Number(log.blockNumber),
|
164
164
|
chainId: chainId,
|
@@ -193,7 +193,7 @@ export async function getEulerV2Vaults(chainId) {
|
|
193
193
|
fetchAtBlock: vault.fetchedAtBlock,
|
194
194
|
caughtFromAddress: EULER_ADDRESSES[vault.chainId].VAULT_FACTORY,
|
195
195
|
chainId: vault.chainId,
|
196
|
-
address: vault.address,
|
196
|
+
address: getAddress(vault.address),
|
197
197
|
entityData: vault,
|
198
198
|
id: Bun.hash(`${vault.address}-${vault.chainId}`).toString(),
|
199
199
|
type: LoggedEntityType.EULER,
|
@@ -205,6 +205,7 @@ export async function getEulerV2Vaults(chainId) {
|
|
205
205
|
throw new Error("Error while saving vaults to API database (`Logged` table)");
|
206
206
|
}
|
207
207
|
}
|
208
|
+
// Add to exising vaults
|
208
209
|
if (storedVaults.length > 0) {
|
209
210
|
vaults = vaults.concat(storedVaults.map(v => v.entityData));
|
210
211
|
}
|
package/dist/src/index.d.ts
CHANGED
@@ -199,6 +199,7 @@ declare const app: Elysia<"", false, {
|
|
199
199
|
tvl: number;
|
200
200
|
apr: number;
|
201
201
|
dailyRewards: number;
|
202
|
+
lastCampaignCreatedAt: Date;
|
202
203
|
} | null;
|
203
204
|
};
|
204
205
|
};
|
@@ -239,6 +240,7 @@ declare const app: Elysia<"", false, {
|
|
239
240
|
tvl: number;
|
240
241
|
apr: number;
|
241
242
|
dailyRewards: number;
|
243
|
+
lastCampaignCreatedAt: Date;
|
242
244
|
};
|
243
245
|
};
|
244
246
|
};
|
@@ -482,6 +484,7 @@ declare const app: Elysia<"", false, {
|
|
482
484
|
tvl: number;
|
483
485
|
apr: number;
|
484
486
|
dailyRewards: number;
|
487
|
+
lastCampaignCreatedAt: Date;
|
485
488
|
};
|
486
489
|
id: string;
|
487
490
|
type: string;
|
@@ -497,6 +500,7 @@ declare const app: Elysia<"", false, {
|
|
497
500
|
id: string;
|
498
501
|
depositUrl: string | undefined;
|
499
502
|
explorerAddress: string | undefined;
|
503
|
+
lastCampaignCreatedAt: string;
|
500
504
|
tokens: ({
|
501
505
|
symbol: string;
|
502
506
|
id: string;
|
@@ -675,6 +679,7 @@ declare const app: Elysia<"", false, {
|
|
675
679
|
tvl: number;
|
676
680
|
apr: number;
|
677
681
|
dailyRewards: number;
|
682
|
+
lastCampaignCreatedAt: string;
|
678
683
|
};
|
679
684
|
readonly 404: {
|
680
685
|
name: string;
|
@@ -807,6 +812,7 @@ declare const app: Elysia<"", false, {
|
|
807
812
|
tvl: number;
|
808
813
|
apr: number;
|
809
814
|
dailyRewards: number;
|
815
|
+
lastCampaignCreatedAt: string;
|
810
816
|
campaigns: {
|
811
817
|
creator?: {
|
812
818
|
tags?: string[] | undefined;
|
@@ -973,6 +979,7 @@ declare const app: Elysia<"", false, {
|
|
973
979
|
tvl: number;
|
974
980
|
apr: number;
|
975
981
|
dailyRewards: number;
|
982
|
+
lastCampaignCreatedAt: string;
|
976
983
|
campaigns: {
|
977
984
|
creator?: {
|
978
985
|
tags?: string[] | undefined;
|
@@ -1416,6 +1423,7 @@ declare const app: Elysia<"", false, {
|
|
1416
1423
|
tvl: number;
|
1417
1424
|
apr: number;
|
1418
1425
|
dailyRewards: number;
|
1426
|
+
lastCampaignCreatedAt: Date;
|
1419
1427
|
};
|
1420
1428
|
id: string;
|
1421
1429
|
type: string;
|
@@ -1501,6 +1509,7 @@ declare const app: Elysia<"", false, {
|
|
1501
1509
|
tvl: number;
|
1502
1510
|
apr: number;
|
1503
1511
|
dailyRewards: number;
|
1512
|
+
lastCampaignCreatedAt: Date;
|
1504
1513
|
};
|
1505
1514
|
id: string;
|
1506
1515
|
type: string;
|
@@ -1687,6 +1696,7 @@ declare const app: Elysia<"", false, {
|
|
1687
1696
|
tvl: number;
|
1688
1697
|
apr: number;
|
1689
1698
|
dailyRewards: number;
|
1699
|
+
lastCampaignCreatedAt: Date;
|
1690
1700
|
};
|
1691
1701
|
id: string;
|
1692
1702
|
type: string;
|
@@ -3543,6 +3553,7 @@ declare const app: Elysia<"", false, {
|
|
3543
3553
|
tvl: number;
|
3544
3554
|
apr: number;
|
3545
3555
|
dailyRewards: number;
|
3556
|
+
lastCampaignCreatedAt: Date;
|
3546
3557
|
};
|
3547
3558
|
pending: string;
|
3548
3559
|
reason: string;
|
@@ -3662,6 +3673,7 @@ declare const app: Elysia<"", false, {
|
|
3662
3673
|
tvl: number;
|
3663
3674
|
apr: number;
|
3664
3675
|
dailyRewards: number;
|
3676
|
+
lastCampaignCreatedAt: Date;
|
3665
3677
|
};
|
3666
3678
|
pending: string;
|
3667
3679
|
reason: string;
|
@@ -5354,34 +5366,34 @@ declare const app: Elysia<"", false, {
|
|
5354
5366
|
} & {
|
5355
5367
|
v3: {
|
5356
5368
|
euler: {
|
5357
|
-
|
5358
|
-
|
5359
|
-
|
5360
|
-
|
5361
|
-
|
5362
|
-
|
5363
|
-
|
5369
|
+
index: {
|
5370
|
+
get: {
|
5371
|
+
body: unknown;
|
5372
|
+
params: {};
|
5373
|
+
query: unknown;
|
5374
|
+
headers: unknown;
|
5375
|
+
response: {
|
5376
|
+
200: EulerVaultType[];
|
5377
|
+
};
|
5364
5378
|
};
|
5365
5379
|
};
|
5366
|
-
}
|
5367
|
-
} & {
|
5368
|
-
euler: {
|
5380
|
+
} & {
|
5369
5381
|
":chainId": {
|
5370
5382
|
get: {
|
5371
5383
|
body: unknown;
|
5372
5384
|
params: {
|
5373
5385
|
chainId: number;
|
5374
5386
|
};
|
5375
|
-
query:
|
5387
|
+
query: {
|
5388
|
+
vaultAddress?: string | undefined;
|
5389
|
+
};
|
5376
5390
|
headers: unknown;
|
5377
5391
|
response: {
|
5378
5392
|
200: EulerVaultType[];
|
5379
5393
|
};
|
5380
5394
|
};
|
5381
5395
|
};
|
5382
|
-
}
|
5383
|
-
} & {
|
5384
|
-
euler: {
|
5396
|
+
} & {
|
5385
5397
|
update: {
|
5386
5398
|
post: {
|
5387
5399
|
body: unknown;
|
@@ -5395,9 +5407,7 @@ declare const app: Elysia<"", false, {
|
|
5395
5407
|
};
|
5396
5408
|
};
|
5397
5409
|
};
|
5398
|
-
}
|
5399
|
-
} & {
|
5400
|
-
euler: {
|
5410
|
+
} & {
|
5401
5411
|
update: {
|
5402
5412
|
":chainId": {
|
5403
5413
|
post: {
|
@@ -2,9 +2,11 @@ import { Redis } from "@/cache";
|
|
2
2
|
import { getEulerV2Vaults, updateEulerVaultsCollatInDatabase } from "@/engine/dynamicData/utils/getEulerV2Vaults";
|
3
3
|
import { logger } from "@/utils/logger";
|
4
4
|
(async () => {
|
5
|
-
await Redis.safeSet("EulerV2Vaults", await getEulerV2Vaults());
|
6
5
|
try {
|
6
|
+
// First update collat values in database
|
7
7
|
await updateEulerVaultsCollatInDatabase();
|
8
|
+
// Second update Redis cache
|
9
|
+
await Redis.safeSet("EulerV2Vaults", await getEulerV2Vaults());
|
8
10
|
}
|
9
11
|
catch (e) {
|
10
12
|
console.error(e);
|
@@ -256,6 +256,7 @@ export declare const CampaignController: Elysia<"/campaigns", false, {
|
|
256
256
|
tvl: number;
|
257
257
|
apr: number;
|
258
258
|
dailyRewards: number;
|
259
|
+
lastCampaignCreatedAt: Date;
|
259
260
|
};
|
260
261
|
id: string;
|
261
262
|
type: string;
|
@@ -341,6 +342,7 @@ export declare const CampaignController: Elysia<"/campaigns", false, {
|
|
341
342
|
tvl: number;
|
342
343
|
apr: number;
|
343
344
|
dailyRewards: number;
|
345
|
+
lastCampaignCreatedAt: Date;
|
344
346
|
};
|
345
347
|
id: string;
|
346
348
|
type: string;
|
@@ -527,6 +529,7 @@ export declare const CampaignController: Elysia<"/campaigns", false, {
|
|
527
529
|
tvl: number;
|
528
530
|
apr: number;
|
529
531
|
dailyRewards: number;
|
532
|
+
lastCampaignCreatedAt: Date;
|
530
533
|
};
|
531
534
|
id: string;
|
532
535
|
type: string;
|
@@ -318,6 +318,7 @@ export declare abstract class CampaignRepository {
|
|
318
318
|
tvl: number;
|
319
319
|
apr: number;
|
320
320
|
dailyRewards: number;
|
321
|
+
lastCampaignCreatedAt: Date;
|
321
322
|
};
|
322
323
|
} & {
|
323
324
|
id: string;
|
@@ -365,6 +366,7 @@ export declare abstract class CampaignRepository {
|
|
365
366
|
tvl: number;
|
366
367
|
apr: number;
|
367
368
|
dailyRewards: number;
|
369
|
+
lastCampaignCreatedAt: Date;
|
368
370
|
};
|
369
371
|
} & {
|
370
372
|
id: string;
|
@@ -428,6 +430,7 @@ export declare abstract class CampaignRepository {
|
|
428
430
|
tvl: number;
|
429
431
|
apr: number;
|
430
432
|
dailyRewards: number;
|
433
|
+
lastCampaignCreatedAt: Date;
|
431
434
|
};
|
432
435
|
} & {
|
433
436
|
id: string;
|
@@ -611,6 +614,7 @@ export declare abstract class CampaignRepository {
|
|
611
614
|
tvl: number;
|
612
615
|
apr: number;
|
613
616
|
dailyRewards: number;
|
617
|
+
lastCampaignCreatedAt: Date;
|
614
618
|
};
|
615
619
|
Creator: {
|
616
620
|
tags: string[];
|
@@ -694,6 +698,7 @@ export declare abstract class CampaignRepository {
|
|
694
698
|
tvl: number;
|
695
699
|
apr: number;
|
696
700
|
dailyRewards: number;
|
701
|
+
lastCampaignCreatedAt: Date;
|
697
702
|
};
|
698
703
|
Creator: {
|
699
704
|
tags: string[];
|
@@ -25,6 +25,7 @@ export declare abstract class CampaignService {
|
|
25
25
|
tvl: number;
|
26
26
|
apr: number;
|
27
27
|
dailyRewards: number;
|
28
|
+
lastCampaignCreatedAt: Date;
|
28
29
|
};
|
29
30
|
} & {
|
30
31
|
id: string;
|
@@ -64,6 +65,7 @@ export declare abstract class CampaignService {
|
|
64
65
|
tvl: number;
|
65
66
|
apr: number;
|
66
67
|
dailyRewards: number;
|
68
|
+
lastCampaignCreatedAt: Date;
|
67
69
|
};
|
68
70
|
} & {
|
69
71
|
id: string;
|
@@ -119,6 +121,7 @@ export declare abstract class CampaignService {
|
|
119
121
|
tvl: number;
|
120
122
|
apr: number;
|
121
123
|
dailyRewards: number;
|
124
|
+
lastCampaignCreatedAt: Date;
|
122
125
|
};
|
123
126
|
} & {
|
124
127
|
id: string;
|
@@ -256,6 +259,7 @@ export declare abstract class CampaignService {
|
|
256
259
|
tvl: number;
|
257
260
|
apr: number;
|
258
261
|
dailyRewards: number;
|
262
|
+
lastCampaignCreatedAt: Date;
|
259
263
|
};
|
260
264
|
id: string;
|
261
265
|
type: string;
|
@@ -328,6 +332,7 @@ export declare abstract class CampaignService {
|
|
328
332
|
tvl: number;
|
329
333
|
apr: number;
|
330
334
|
dailyRewards: number;
|
335
|
+
lastCampaignCreatedAt: Date;
|
331
336
|
};
|
332
337
|
id: string;
|
333
338
|
type: string;
|
@@ -401,6 +406,7 @@ export declare abstract class CampaignService {
|
|
401
406
|
tvl: number;
|
402
407
|
apr: number;
|
403
408
|
dailyRewards: number;
|
409
|
+
lastCampaignCreatedAt: Date;
|
404
410
|
};
|
405
411
|
id: string;
|
406
412
|
type: string;
|
@@ -474,6 +480,7 @@ export declare abstract class CampaignService {
|
|
474
480
|
tvl: number;
|
475
481
|
apr: number;
|
476
482
|
dailyRewards: number;
|
483
|
+
lastCampaignCreatedAt: Date;
|
477
484
|
};
|
478
485
|
id: string;
|
479
486
|
type: string;
|
@@ -595,6 +602,7 @@ export declare abstract class CampaignService {
|
|
595
602
|
tvl: number;
|
596
603
|
apr: number;
|
597
604
|
dailyRewards: number;
|
605
|
+
lastCampaignCreatedAt: Date;
|
598
606
|
};
|
599
607
|
Creator: {
|
600
608
|
tags: string[];
|
@@ -748,6 +756,7 @@ export declare abstract class CampaignService {
|
|
748
756
|
tvl: number;
|
749
757
|
apr: number;
|
750
758
|
dailyRewards: number;
|
759
|
+
lastCampaignCreatedAt: Date;
|
751
760
|
};
|
752
761
|
id: string;
|
753
762
|
type: string;
|
@@ -3,11 +3,12 @@ import { OpportunityService } from "@/modules/v4/opportunity";
|
|
3
3
|
import { StatusService } from "@/modules/v4/status/status.service";
|
4
4
|
import { TokenRepository } from "@/modules/v4/token/token.repository";
|
5
5
|
import { TokenService } from "@/modules/v4/token/token.service";
|
6
|
-
import { CannotParseOpportunity, InvalidParameter } from "@/utils/error";
|
6
|
+
import { CannotParseOpportunity, CannotUpdateOpportunityLastCreatedAt, InvalidParameter } from "@/utils/error";
|
7
7
|
import { log } from "@/utils/logger";
|
8
8
|
import { Campaign as CampaignEnum, NETWORK_LABELS, } from "@sdk";
|
9
9
|
import { utils } from "ethers";
|
10
10
|
import moment from "moment";
|
11
|
+
import { OpportunityRepository } from "../opportunity/opportunity.repository";
|
11
12
|
import { CampaignRepository } from "./campaign.repository";
|
12
13
|
export class CampaignService {
|
13
14
|
static hashId(campaign) {
|
@@ -40,6 +41,14 @@ export class CampaignService {
|
|
40
41
|
console.error(e);
|
41
42
|
throw new CannotParseOpportunity(campaign.campaignId, campaign.chainId, campaign.type);
|
42
43
|
}
|
44
|
+
if (!!CampaignRepository.findUnique(id)) {
|
45
|
+
try {
|
46
|
+
await OpportunityRepository.update(id, { lastCampaignCreatedAt: new Date() });
|
47
|
+
}
|
48
|
+
catch {
|
49
|
+
throw new CannotUpdateOpportunityLastCreatedAt(campaign.campaignId, campaign.chainId, campaign.type);
|
50
|
+
}
|
51
|
+
}
|
43
52
|
return await CampaignRepository.upsert({ id, ...campaign });
|
44
53
|
}
|
45
54
|
/**
|
@@ -54,6 +54,7 @@ export declare const OpportunityController: Elysia<"/opportunities", false, {
|
|
54
54
|
tvl: number;
|
55
55
|
apr: number;
|
56
56
|
dailyRewards: number;
|
57
|
+
lastCampaignCreatedAt: Date;
|
57
58
|
} | null;
|
58
59
|
};
|
59
60
|
};
|
@@ -94,6 +95,7 @@ export declare const OpportunityController: Elysia<"/opportunities", false, {
|
|
94
95
|
tvl: number;
|
95
96
|
apr: number;
|
96
97
|
dailyRewards: number;
|
98
|
+
lastCampaignCreatedAt: Date;
|
97
99
|
};
|
98
100
|
};
|
99
101
|
};
|
@@ -337,6 +339,7 @@ export declare const OpportunityController: Elysia<"/opportunities", false, {
|
|
337
339
|
tvl: number;
|
338
340
|
apr: number;
|
339
341
|
dailyRewards: number;
|
342
|
+
lastCampaignCreatedAt: Date;
|
340
343
|
};
|
341
344
|
id: string;
|
342
345
|
type: string;
|
@@ -352,6 +355,7 @@ export declare const OpportunityController: Elysia<"/opportunities", false, {
|
|
352
355
|
id: string;
|
353
356
|
depositUrl: string | undefined;
|
354
357
|
explorerAddress: string | undefined;
|
358
|
+
lastCampaignCreatedAt: string;
|
355
359
|
tokens: ({
|
356
360
|
symbol: string;
|
357
361
|
id: string;
|
@@ -530,6 +534,7 @@ export declare const OpportunityController: Elysia<"/opportunities", false, {
|
|
530
534
|
tvl: number;
|
531
535
|
apr: number;
|
532
536
|
dailyRewards: number;
|
537
|
+
lastCampaignCreatedAt: string;
|
533
538
|
};
|
534
539
|
readonly 404: {
|
535
540
|
name: string;
|
@@ -662,6 +667,7 @@ export declare const OpportunityController: Elysia<"/opportunities", false, {
|
|
662
667
|
tvl: number;
|
663
668
|
apr: number;
|
664
669
|
dailyRewards: number;
|
670
|
+
lastCampaignCreatedAt: string;
|
665
671
|
campaigns: {
|
666
672
|
creator?: {
|
667
673
|
tags?: string[] | undefined;
|
@@ -828,6 +834,7 @@ export declare const OpportunityController: Elysia<"/opportunities", false, {
|
|
828
834
|
tvl: number;
|
829
835
|
apr: number;
|
830
836
|
dailyRewards: number;
|
837
|
+
lastCampaignCreatedAt: string;
|
831
838
|
campaigns: {
|
832
839
|
creator?: {
|
833
840
|
tags?: string[] | undefined;
|
@@ -18,6 +18,7 @@ export type Opportunity = Resource<"Opportunity", "mainProtocolId" | "manualOver
|
|
18
18
|
explorerAddress?: string;
|
19
19
|
chain: Chain["model"];
|
20
20
|
tokens: Token["model"][];
|
21
|
+
lastCampaignCreatedAt: string;
|
21
22
|
protocol?: Protocol["model"];
|
22
23
|
aprRecord?: AprRecord["model"];
|
23
24
|
tvlRecord?: TvlRecord["model"];
|
@@ -121,6 +122,7 @@ export declare const OpportunityResourceDto: import("@sinclair/typebox").TObject
|
|
121
122
|
amount: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TBigInt, import("@sinclair/typebox").TString]>;
|
122
123
|
}>>;
|
123
124
|
}>>;
|
125
|
+
lastCampaignCreatedAt: import("@sinclair/typebox").TString;
|
124
126
|
protocol: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TObject<{
|
125
127
|
id: import("@sinclair/typebox").TString;
|
126
128
|
name: import("@sinclair/typebox").TString;
|
@@ -176,6 +178,7 @@ export declare const OpportunityWithCampaignsResourceDto: import("@sinclair/type
|
|
176
178
|
tvl: import("@sinclair/typebox").TNumber;
|
177
179
|
apr: import("@sinclair/typebox").TNumber;
|
178
180
|
dailyRewards: import("@sinclair/typebox").TNumber;
|
181
|
+
lastCampaignCreatedAt: import("@sinclair/typebox").TString;
|
179
182
|
aprRecord: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
|
180
183
|
cumulated: import("@sinclair/typebox").TNumber;
|
181
184
|
timestamp: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TBigInt, import("@sinclair/typebox").TString]>;
|
@@ -28,6 +28,7 @@ export const OpportunityResourceDto = t.Object({
|
|
28
28
|
aprRecord: t.Optional(AprRecordResourceDto),
|
29
29
|
tvlRecord: t.Optional(TvlRecordResourceDto),
|
30
30
|
rewardsRecord: t.Optional(DailyRewardsRecordResourceDto),
|
31
|
+
lastCampaignCreatedAt: t.String({ format: "date" }),
|
31
32
|
protocol: t.Optional(t.Union([ProtocolResourceDto, t.Null()])),
|
32
33
|
});
|
33
34
|
export const OpportunityWithCampaignsResourceDto = t.Composite([
|
@@ -77,7 +78,9 @@ export const GetOpportunitiesQueryDto = t.Object({
|
|
77
78
|
rewardTokenSymbol: t.Optional(t.String({
|
78
79
|
description: "Filter by opportunity that have at least 1 campaigns where the reward token has this symbol",
|
79
80
|
})),
|
80
|
-
sort: t.Optional(t.RegExp(/(apr|tvl|rewards)/, {
|
81
|
+
sort: t.Optional(t.RegExp(/(apr|tvl|rewards|lastCampaignCreatedAt)/, {
|
82
|
+
description: "Sort by `apr`, `tvl`, `rewards` or last campaign creation date",
|
83
|
+
})),
|
81
84
|
order: t.Optional(t.RegExp(/desc|asc/, {
|
82
85
|
description: "`asc` to sort in ascending order or `desc` to sort in descending order.",
|
83
86
|
default: "desc",
|
@@ -25,6 +25,7 @@ export declare abstract class OpportunityRepository {
|
|
25
25
|
tvl: number;
|
26
26
|
apr: number;
|
27
27
|
dailyRewards: number;
|
28
|
+
lastCampaignCreatedAt: Date;
|
28
29
|
} | null>;
|
29
30
|
static findUnique(id: string): Promise<({
|
30
31
|
Chain: {
|
@@ -184,6 +185,7 @@ export declare abstract class OpportunityRepository {
|
|
184
185
|
tvl: number;
|
185
186
|
apr: number;
|
186
187
|
dailyRewards: number;
|
188
|
+
lastCampaignCreatedAt: Date;
|
187
189
|
}) | null>;
|
188
190
|
static findUniqueOrThrow(id: string, withTest?: boolean, withPoints?: boolean, withCampaigns?: boolean): Promise<{
|
189
191
|
Chain: {
|
@@ -327,6 +329,7 @@ export declare abstract class OpportunityRepository {
|
|
327
329
|
tvl: number;
|
328
330
|
apr: number;
|
329
331
|
dailyRewards: number;
|
332
|
+
lastCampaignCreatedAt: Date;
|
330
333
|
}>;
|
331
334
|
/**
|
332
335
|
* Gets opportunities and campaigns for which filtered on campaigns
|
@@ -528,6 +531,7 @@ export declare abstract class OpportunityRepository {
|
|
528
531
|
tvl: number;
|
529
532
|
apr: number;
|
530
533
|
dailyRewards: number;
|
534
|
+
lastCampaignCreatedAt: Date;
|
531
535
|
})[]>;
|
532
536
|
static findMany(query: GetOpportunitiesQueryModel): Promise<({
|
533
537
|
Chain: {
|
@@ -678,6 +682,7 @@ export declare abstract class OpportunityRepository {
|
|
678
682
|
tvl: number;
|
679
683
|
apr: number;
|
680
684
|
dailyRewards: number;
|
685
|
+
lastCampaignCreatedAt: Date;
|
681
686
|
})[]>;
|
682
687
|
/**
|
683
688
|
* @dev Live campaigns here can be:
|
@@ -880,6 +885,7 @@ export declare abstract class OpportunityRepository {
|
|
880
885
|
tvl: number;
|
881
886
|
apr: number;
|
882
887
|
dailyRewards: number;
|
888
|
+
lastCampaignCreatedAt: Date;
|
883
889
|
})[]>;
|
884
890
|
static countMany(query: GetOpportunitiesQueryModel): Promise<number>;
|
885
891
|
/**
|
@@ -939,6 +945,7 @@ export declare abstract class OpportunityRepository {
|
|
939
945
|
tvl: number;
|
940
946
|
apr: number;
|
941
947
|
dailyRewards: number;
|
948
|
+
lastCampaignCreatedAt: Date;
|
942
949
|
};
|
943
950
|
}>;
|
944
951
|
static updateStatus(id: string, status: Status): Promise<{
|
@@ -957,6 +964,7 @@ export declare abstract class OpportunityRepository {
|
|
957
964
|
tvl: number;
|
958
965
|
apr: number;
|
959
966
|
dailyRewards: number;
|
967
|
+
lastCampaignCreatedAt: Date;
|
960
968
|
}>;
|
961
969
|
static update(id: string, data: Partial<Opportunity["raw"]>): Promise<{
|
962
970
|
id: string;
|
@@ -974,6 +982,7 @@ export declare abstract class OpportunityRepository {
|
|
974
982
|
tvl: number;
|
975
983
|
apr: number;
|
976
984
|
dailyRewards: number;
|
985
|
+
lastCampaignCreatedAt: Date;
|
977
986
|
}>;
|
978
987
|
static updateMany(ids: string[], data: Partial<Opportunity["raw"]>): Promise<import("database/api/.generated/runtime/library").GetBatchResult>;
|
979
988
|
static aggregateSum(field: keyof Prisma.OpportunitySumAggregateInputType, query: GetOpportunitiesQueryModel): Promise<{
|
@@ -320,7 +320,6 @@ export class OpportunityRepository {
|
|
320
320
|
const withPoints = query.point ?? false;
|
321
321
|
const withCampaigns = query.campaigns ?? false;
|
322
322
|
const args = OpportunityRepository.#transformQueryToPrismaFilters(query);
|
323
|
-
const search = query.search ?? undefined;
|
324
323
|
return await apiDbClient.opportunity.findMany({
|
325
324
|
take: items === 0 ? undefined : items,
|
326
325
|
skip: page * items,
|
@@ -22,6 +22,7 @@ export declare abstract class OpportunityService {
|
|
22
22
|
tvl: number;
|
23
23
|
apr: number;
|
24
24
|
dailyRewards: number;
|
25
|
+
lastCampaignCreatedAt: Date;
|
25
26
|
}>;
|
26
27
|
static deleteOverrides(id: string, overridesToDelete: OpportunityManualOverride[]): Promise<{
|
27
28
|
id: string;
|
@@ -72,6 +73,7 @@ export declare abstract class OpportunityService {
|
|
72
73
|
tvl: number;
|
73
74
|
apr: number;
|
74
75
|
dailyRewards: number;
|
76
|
+
lastCampaignCreatedAt: Date;
|
75
77
|
} | null>;
|
76
78
|
/**
|
77
79
|
* @param upsert whether to update the opportunity if it already exists in database
|
@@ -229,6 +231,7 @@ export declare abstract class OpportunityService {
|
|
229
231
|
tvl: number;
|
230
232
|
apr: number;
|
231
233
|
dailyRewards: number;
|
234
|
+
lastCampaignCreatedAt: string;
|
232
235
|
campaigns: {
|
233
236
|
creator?: {
|
234
237
|
tags?: string[] | undefined;
|
@@ -367,6 +370,7 @@ export declare abstract class OpportunityService {
|
|
367
370
|
tvl: number;
|
368
371
|
apr: number;
|
369
372
|
dailyRewards: number;
|
373
|
+
lastCampaignCreatedAt: string;
|
370
374
|
campaigns: {
|
371
375
|
creator?: {
|
372
376
|
tags?: string[] | undefined;
|
@@ -538,6 +542,7 @@ export declare abstract class OpportunityService {
|
|
538
542
|
tvl: number;
|
539
543
|
apr: number;
|
540
544
|
dailyRewards: number;
|
545
|
+
lastCampaignCreatedAt: Date;
|
541
546
|
};
|
542
547
|
id: string;
|
543
548
|
type: string;
|
@@ -553,6 +558,7 @@ export declare abstract class OpportunityService {
|
|
553
558
|
id: string;
|
554
559
|
depositUrl: string | undefined;
|
555
560
|
explorerAddress: string | undefined;
|
561
|
+
lastCampaignCreatedAt: string;
|
556
562
|
tokens: ({
|
557
563
|
symbol: string;
|
558
564
|
id: string;
|
@@ -711,6 +717,7 @@ export declare abstract class OpportunityService {
|
|
711
717
|
tvl: number;
|
712
718
|
apr: number;
|
713
719
|
dailyRewards: number;
|
720
|
+
lastCampaignCreatedAt: Date;
|
714
721
|
};
|
715
722
|
id: string;
|
716
723
|
type: string;
|
@@ -726,6 +733,7 @@ export declare abstract class OpportunityService {
|
|
726
733
|
id: string;
|
727
734
|
depositUrl: string | undefined;
|
728
735
|
explorerAddress: string | undefined;
|
736
|
+
lastCampaignCreatedAt: string;
|
729
737
|
tokens: ({
|
730
738
|
symbol: string;
|
731
739
|
id: string;
|
@@ -877,6 +885,7 @@ export declare abstract class OpportunityService {
|
|
877
885
|
tvl: number;
|
878
886
|
apr: number;
|
879
887
|
dailyRewards: number;
|
888
|
+
lastCampaignCreatedAt: Date;
|
880
889
|
};
|
881
890
|
id: string;
|
882
891
|
type: string;
|
@@ -892,6 +901,7 @@ export declare abstract class OpportunityService {
|
|
892
901
|
id: string;
|
893
902
|
depositUrl: string | undefined;
|
894
903
|
explorerAddress: string | undefined;
|
904
|
+
lastCampaignCreatedAt: string;
|
895
905
|
tokens: ({
|
896
906
|
symbol: string;
|
897
907
|
id: string;
|
@@ -934,6 +944,7 @@ export declare abstract class OpportunityService {
|
|
934
944
|
id: string;
|
935
945
|
depositUrl: string | undefined;
|
936
946
|
explorerAddress: string | undefined;
|
947
|
+
lastCampaignCreatedAt: string;
|
937
948
|
tokens: ({
|
938
949
|
symbol: string;
|
939
950
|
id: string;
|
@@ -998,6 +1009,7 @@ export declare abstract class OpportunityService {
|
|
998
1009
|
tvl: number;
|
999
1010
|
apr: number;
|
1000
1011
|
dailyRewards: number;
|
1012
|
+
lastCampaignCreatedAt: Date;
|
1001
1013
|
}>;
|
1002
1014
|
static updateMany(ids: string[], data: Partial<Opportunity["raw"]>): Promise<import("database/api/.generated/runtime/library").GetBatchResult>;
|
1003
1015
|
}
|
@@ -221,15 +221,16 @@ export class OpportunityService {
|
|
221
221
|
return formated;
|
222
222
|
}
|
223
223
|
static formatResponseBase(opportunity) {
|
224
|
-
let { mainProtocolId, id, Tokens, Chain, Protocols, MainProtocol, manualOverrides, ...opp } = opportunity;
|
224
|
+
let { mainProtocolId, id, Tokens, Chain, Protocols, MainProtocol, lastCampaignCreatedAt, depositUrl, explorerAddress, manualOverrides, ...opp } = opportunity;
|
225
225
|
if (mainProtocolId === "unknown") {
|
226
226
|
MainProtocol = null;
|
227
227
|
}
|
228
228
|
return {
|
229
229
|
...opp,
|
230
230
|
id,
|
231
|
-
depositUrl:
|
232
|
-
explorerAddress:
|
231
|
+
depositUrl: depositUrl ?? undefined,
|
232
|
+
explorerAddress: explorerAddress ?? undefined,
|
233
|
+
lastCampaignCreatedAt: lastCampaignCreatedAt.toISOString(),
|
233
234
|
tokens: Tokens.map(t => TokenService.format(t)),
|
234
235
|
chain: Chain,
|
235
236
|
protocol: MainProtocol ?? undefined,
|