@merkl/api 0.10.139 → 0.10.140
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/modules/v4/opportunity/opportunity.repository.d.ts +28 -2
- package/dist/src/modules/v4/opportunity/opportunity.repository.js +16 -1
- package/dist/src/modules/v4/opportunity/opportunity.service.d.ts +2 -1
- package/dist/src/modules/v4/opportunity/opportunity.service.js +30 -0
- package/dist/src/modules/v4/opportunity/subservices/getClammMetadata.service.js +1 -1
- package/dist/src/modules/v4/opportunity/subservices/getDolomiteMetadata.service.js +1 -1
- package/dist/src/modules/v4/opportunity/subservices/getErc20SnapshotMetadata.service.js +1 -1
- package/dist/src/modules/v4/opportunity/subservices/getJsonAirDropMetadata.service.js +3 -3
- package/dist/src/modules/v4/opportunity/subservices/getMorphoMetadata.service.js +2 -2
- package/dist/src/modules/v4/opportunity/subservices/getRadiantMetadata.service.js +1 -1
- package/dist/src/modules/v4/opportunity/subservices/getSiloMetadata.service.js +1 -1
- package/dist/tsconfig.package.tsbuildinfo +1 -1
- package/package.json +1 -1
@@ -254,7 +254,19 @@ export declare abstract class OpportunityRepository {
|
|
254
254
|
dailyRewards: number;
|
255
255
|
}>;
|
256
256
|
static findManyWithCampaigns(filters: Prisma.OpportunityFindManyArgs): Promise<({
|
257
|
-
Campaigns: {
|
257
|
+
Campaigns: ({
|
258
|
+
RewardToken: {
|
259
|
+
symbol: string;
|
260
|
+
name: string | null;
|
261
|
+
id: string;
|
262
|
+
chainId: number;
|
263
|
+
address: string;
|
264
|
+
icon: string;
|
265
|
+
decimals: number;
|
266
|
+
verified: boolean;
|
267
|
+
price: number | null;
|
268
|
+
};
|
269
|
+
} & {
|
258
270
|
type: import("../../../../database/api/.generated").$Enums.CampaignType;
|
259
271
|
id: string;
|
260
272
|
params: Prisma.JsonValue;
|
@@ -268,7 +280,7 @@ export declare abstract class OpportunityRepository {
|
|
268
280
|
amount: string;
|
269
281
|
opportunityId: string;
|
270
282
|
creatorAddress: string;
|
271
|
-
}[];
|
283
|
+
})[];
|
272
284
|
} & {
|
273
285
|
name: string;
|
274
286
|
type: import("../../../../database/api/.generated").$Enums.CampaignType;
|
@@ -462,6 +474,20 @@ export declare abstract class OpportunityRepository {
|
|
462
474
|
apr: number;
|
463
475
|
dailyRewards: number;
|
464
476
|
}>;
|
477
|
+
static updateName(id: string, name: string): Promise<{
|
478
|
+
name: string;
|
479
|
+
type: import("../../../../database/api/.generated").$Enums.CampaignType;
|
480
|
+
id: string;
|
481
|
+
status: import("../../../../database/api/.generated").$Enums.Status;
|
482
|
+
tags: string[];
|
483
|
+
identifier: string;
|
484
|
+
chainId: number;
|
485
|
+
action: import("../../../../database/api/.generated").$Enums.OpportunityAction;
|
486
|
+
mainProtocolId: string | null;
|
487
|
+
tvl: number;
|
488
|
+
apr: number;
|
489
|
+
dailyRewards: number;
|
490
|
+
}>;
|
465
491
|
static aggregateSum(field: keyof Prisma.OpportunitySumAggregateInputType, query: GetOpportunitiesQueryEntity): Promise<{
|
466
492
|
sum: never;
|
467
493
|
}>;
|
@@ -93,7 +93,19 @@ export class OpportunityRepository {
|
|
93
93
|
});
|
94
94
|
}
|
95
95
|
static async findManyWithCampaigns(filters) {
|
96
|
-
return await apiDbClient.opportunity.findMany({
|
96
|
+
return await apiDbClient.opportunity.findMany({
|
97
|
+
...filters,
|
98
|
+
include: {
|
99
|
+
Campaigns: {
|
100
|
+
include: {
|
101
|
+
RewardToken: true,
|
102
|
+
},
|
103
|
+
orderBy: {
|
104
|
+
endTimestamp: "desc",
|
105
|
+
},
|
106
|
+
},
|
107
|
+
},
|
108
|
+
});
|
97
109
|
}
|
98
110
|
static #transformQueryToPrismaFilters(query) {
|
99
111
|
const { page: _page, items: _items, ...filters } = query;
|
@@ -215,6 +227,9 @@ export class OpportunityRepository {
|
|
215
227
|
return await apiDbClient.opportunity.update({ where: { id }, data: { status, apr: 0, dailyRewards: 0 } });
|
216
228
|
return await apiDbClient.opportunity.update({ where: { id }, data: { status } });
|
217
229
|
}
|
230
|
+
static async updateName(id, name) {
|
231
|
+
return await apiDbClient.opportunity.update({ where: { id }, data: { name } });
|
232
|
+
}
|
218
233
|
static async aggregateSum(field, query) {
|
219
234
|
const args = OpportunityRepository.#transformQueryToPrismaFilters(query);
|
220
235
|
const result = await apiDbClient.opportunity.aggregate({
|
@@ -1,6 +1,6 @@
|
|
1
1
|
import { type CreateCampaignModel } from "../campaign";
|
2
2
|
import { Prisma } from "../../../../database/api/.generated";
|
3
|
-
import type
|
3
|
+
import { type ChainId } from "@sdk";
|
4
4
|
import type { CreateOpportunityModel, GetOpportunitiesQueryEntity, LightOpportunityFromDB, OpportunityMetadata, OpportunityUnique } from "./opportunity.model";
|
5
5
|
import { OpportunityRepository } from "./opportunity.repository";
|
6
6
|
export declare abstract class OpportunityService {
|
@@ -17,6 +17,7 @@ export declare abstract class OpportunityService {
|
|
17
17
|
* @returns {OpportunityMetadata}
|
18
18
|
*/
|
19
19
|
static getMetadata(campaign: CreateCampaignModel): Promise<OpportunityMetadata>;
|
20
|
+
static updateNames(): Promise<void>;
|
20
21
|
static updateMetadata(chain: ChainId): Promise<void>;
|
21
22
|
static getUniqueWithCampaignsOrThrow(opportunityId: string | OpportunityUnique): Promise<({
|
22
23
|
aprRecord: {
|
@@ -3,6 +3,7 @@ import { CampaignService } from "../campaign";
|
|
3
3
|
import { log } from "../../../utils/logger";
|
4
4
|
import { OpportunityAction, Prisma } from "../../../../database/api/.generated";
|
5
5
|
import { record } from "@elysiajs/opentelemetry";
|
6
|
+
import { Campaign } from "@sdk";
|
6
7
|
import { CacheService } from "../cache";
|
7
8
|
import { TTLPresets } from "../cache/cache.model";
|
8
9
|
import { OpportunityRepository } from "./opportunity.repository";
|
@@ -75,6 +76,35 @@ export class OpportunityService {
|
|
75
76
|
throw "UNKNOWN CAMPAIGN TYPE";
|
76
77
|
}
|
77
78
|
}
|
79
|
+
static async updateNames() {
|
80
|
+
const opportunities = await OpportunityRepository.findManyWithCampaigns({});
|
81
|
+
log.info(`updating ${opportunities.length} opportunities names`);
|
82
|
+
for (const [i, opp] of opportunities.entries()) {
|
83
|
+
try {
|
84
|
+
const campaignData = opp.Campaigns[0];
|
85
|
+
const campaign = {
|
86
|
+
...campaignData,
|
87
|
+
creator: campaignData.creatorAddress,
|
88
|
+
chainId: campaignData.distributionChainId,
|
89
|
+
rewardTokenAddress: campaignData.RewardToken.address,
|
90
|
+
opportunityIdentifier: opp.identifier,
|
91
|
+
subType: campaignData.subType ?? undefined,
|
92
|
+
type: Campaign[campaignData.type],
|
93
|
+
params: JSON.stringify(campaignData.params),
|
94
|
+
startTimestamp: campaignData.startTimestamp.toString(),
|
95
|
+
endTimestamp: campaignData.endTimestamp.toString(),
|
96
|
+
};
|
97
|
+
const metadata = await OpportunityService.getMetadata(campaign);
|
98
|
+
if (opp.name !== metadata.name) {
|
99
|
+
log.info(`updating opportunity ${opp.id} name from ${opp.name} to ${metadata.name}`);
|
100
|
+
await OpportunityRepository.updateName(opp.id, metadata.name);
|
101
|
+
}
|
102
|
+
}
|
103
|
+
catch (err) {
|
104
|
+
log.error(`failed to update opportunity ${opp.id} name`, err);
|
105
|
+
}
|
106
|
+
}
|
107
|
+
}
|
78
108
|
static async updateMetadata(chain) {
|
79
109
|
try {
|
80
110
|
const opportunities = await OpportunityRepository.findManyWithCampaigns({
|
@@ -22,7 +22,7 @@ export const getClammMetadata = (chainId, params) => {
|
|
22
22
|
platform = "iZUMi";
|
23
23
|
}
|
24
24
|
return {
|
25
|
-
name:
|
25
|
+
name: `Provide liquidity to ${params.symbolToken0}-${params.symbolToken1}${params.poolFee ? ` ${params.poolFee}%` : ""}`,
|
26
26
|
action: OpportunityAction.POOL,
|
27
27
|
tokens: [
|
28
28
|
{ chainId, address: params.token0 },
|
@@ -1,7 +1,7 @@
|
|
1
1
|
import { OpportunityAction } from "../../../../../database/api/.generated";
|
2
2
|
export const getDolomiteMetadata = (chainId, campaignSubType, params) => {
|
3
3
|
const subtypes = [
|
4
|
-
{ name: "
|
4
|
+
{ name: "Supply (delta)", action: OpportunityAction.LEND },
|
5
5
|
{ name: "Supply", action: OpportunityAction.LEND },
|
6
6
|
{ name: "Borrow", action: OpportunityAction.BORROW },
|
7
7
|
];
|
@@ -1,7 +1,7 @@
|
|
1
1
|
import { OpportunityAction } from "../../../../../database/api/.generated";
|
2
2
|
export const getErc20SnapshotMetadata = (chainId, params) => {
|
3
3
|
return {
|
4
|
-
name: ["
|
4
|
+
name: ["Get", params.symbolTargetToken, "airdrop"].join(" "),
|
5
5
|
action: OpportunityAction.DROP,
|
6
6
|
tokens: [{ chainId, address: params.targetToken }],
|
7
7
|
};
|
@@ -3,9 +3,9 @@ import { OpportunityAction } from "../../../../../database/api/.generated";
|
|
3
3
|
export const getJsonAirdropMetadata = async (chainId, creator, params) => {
|
4
4
|
const ACI = "0xdeadD8aB03075b7FBA81864202a2f59EE25B312b".toLowerCase();
|
5
5
|
const aaveDAO = "0x5300A1a15135EA4dc7aD5a167152C01EFc9b192A".toLowerCase();
|
6
|
-
const aciPrefix = creator.toLowerCase() === ACI && "
|
7
|
-
const aavePrefix = creator.toLowerCase() === aaveDAO && "
|
8
|
-
const prefix = aavePrefix ? aavePrefix : aciPrefix ? aciPrefix : "
|
6
|
+
const aciPrefix = creator.toLowerCase() === ACI && "Get Merit rewards -";
|
7
|
+
const aavePrefix = creator.toLowerCase() === aaveDAO && "Get aAMPL distribution -";
|
8
|
+
const prefix = aavePrefix ? aavePrefix : aciPrefix ? aciPrefix : "Get airdrop in";
|
9
9
|
let tokenAddress;
|
10
10
|
try {
|
11
11
|
const res = await fetch(params.jsonUrl);
|
@@ -4,10 +4,10 @@ export const getMorphoMetadata = (chainId, campaignSubType, params) => {
|
|
4
4
|
const morphoParams = params;
|
5
5
|
const market = `${morphoParams.symbolLoanToken}/${morphoParams.symbolBorrowToken} ${morphoParams?.LLTV && BN2Number(morphoParams?.LLTV, 16)}%`;
|
6
6
|
const subtypes = [
|
7
|
-
{ name: `
|
7
|
+
{ name: `Deposit in ${morphoParams.nameTargetToken} - Metamorpho`, action: OpportunityAction.LEND },
|
8
8
|
{ name: `Supply ${morphoParams.symbolLoanToken} on ${market}`, action: OpportunityAction.LEND },
|
9
9
|
{ name: `Borrow ${morphoParams.symbolLoanToken} on ${market}`, action: OpportunityAction.BORROW },
|
10
|
-
{ name: `
|
10
|
+
{ name: `Lend ${morphoParams.symbolBorrowToken} on ${market}`, action: OpportunityAction.LEND },
|
11
11
|
];
|
12
12
|
const subtype = subtypes[campaignSubType];
|
13
13
|
return {
|
@@ -2,7 +2,7 @@ import { OpportunityAction } from "../../../../../database/api/.generated";
|
|
2
2
|
export const getRadiantMetadata = (chainId, campaignSubType, params) => {
|
3
3
|
return {
|
4
4
|
action: campaignSubType <= 1 ? OpportunityAction.LEND : OpportunityAction.BORROW,
|
5
|
-
name: ["
|
5
|
+
name: [campaignSubType <= 1 ? "Lend" : "Borrow", params.symbolTargetToken].join(" "),
|
6
6
|
tokens: [{ chainId, address: params.targetToken }],
|
7
7
|
mainProtocol: "radiant",
|
8
8
|
};
|
@@ -6,7 +6,7 @@ export const getSiloMetadata = (chainId, campaignSubType, params) => {
|
|
6
6
|
suffix += ` (${assetSymbol} Market)`;
|
7
7
|
return {
|
8
8
|
action: campaignSubType <= 1 ? OpportunityAction.LEND : OpportunityAction.BORROW,
|
9
|
-
name: ["
|
9
|
+
name: [campaignSubType <= 1 ? "Lend" : "Borrow", params.symbolTargetToken, suffix].join(" "),
|
10
10
|
tokens: [{ chainId, address: params.targetToken }],
|
11
11
|
mainProtocol: "silo",
|
12
12
|
};
|