@merkl/api 0.10.248 → 0.10.250
Sign up to get free protection for your applications and to get access to all the features.
- package/dist/src/eden/index.d.ts +9 -0
- package/dist/src/entities/opportunity.js +7 -0
- package/dist/src/index.d.ts +3 -0
- package/dist/src/libs/campaigns/campaignTypes/ERC20DynamicData.js +1 -1
- package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/RfxProcessor.d.ts +4 -1
- package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/RfxProcessor.js +2 -0
- package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/WoofiProcessor.d.ts +1 -1
- package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/WoofiProcessor.js +2 -2
- package/dist/src/modules/v4/claims/claims.service.js +1 -1
- package/dist/src/modules/v4/opportunity/opportunity.controller.d.ts +3 -0
- package/dist/src/modules/v4/opportunity/opportunity.model.d.ts +1 -0
- package/dist/src/modules/v4/opportunity/opportunity.model.js +1 -0
- package/dist/src/modules/v4/opportunity/opportunity.repository.js +15 -2
- package/dist/src/modules/v4/opportunity/subservices/getErc20Metadata.service.js +1 -0
- package/dist/src/modules/v4/protocol/protocol.model.d.ts +1 -1
- package/dist/src/modules/v4/protocol/protocol.model.js +1 -0
- package/dist/src/modules/v4/router.d.ts +3 -0
- package/dist/src/modules/v4/user/user.controller.js +4 -1
- package/dist/src/modules/v4/user/user.service.d.ts +1 -0
- package/dist/src/modules/v4/user/user.service.js +16 -0
- package/dist/src/routes/v3/rewards.js +1 -1
- package/dist/src/routes/v3/userRewards.js +1 -1
- package/dist/src/utils/generateCardName.js +2 -2
- package/dist/tsconfig.package.tsbuildinfo +1 -1
- package/package.json +1 -1
package/dist/src/eden/index.d.ts
CHANGED
@@ -406,6 +406,7 @@ declare const eden: {
|
|
406
406
|
page?: number | undefined;
|
407
407
|
chainId?: string | undefined;
|
408
408
|
action?: string | undefined;
|
409
|
+
creatorAddress?: string | undefined;
|
409
410
|
mainProtocolId?: string | undefined;
|
410
411
|
order?: string | undefined;
|
411
412
|
test?: boolean | undefined;
|
@@ -516,6 +517,7 @@ declare const eden: {
|
|
516
517
|
page?: number | undefined;
|
517
518
|
chainId?: string | undefined;
|
518
519
|
action?: string | undefined;
|
520
|
+
creatorAddress?: string | undefined;
|
519
521
|
mainProtocolId?: string | undefined;
|
520
522
|
order?: string | undefined;
|
521
523
|
test?: boolean | undefined;
|
@@ -541,6 +543,7 @@ declare const eden: {
|
|
541
543
|
page?: number | undefined;
|
542
544
|
chainId?: string | undefined;
|
543
545
|
action?: string | undefined;
|
546
|
+
creatorAddress?: string | undefined;
|
544
547
|
mainProtocolId?: string | undefined;
|
545
548
|
order?: string | undefined;
|
546
549
|
test?: boolean | undefined;
|
@@ -2929,6 +2932,7 @@ export declare const MerklApi: (domain: string | import("elysia").default<"", fa
|
|
2929
2932
|
page?: number | undefined;
|
2930
2933
|
chainId?: string | undefined;
|
2931
2934
|
action?: string | undefined;
|
2935
|
+
creatorAddress?: string | undefined;
|
2932
2936
|
mainProtocolId?: string | undefined;
|
2933
2937
|
order?: string | undefined;
|
2934
2938
|
test?: boolean | undefined;
|
@@ -3044,6 +3048,7 @@ export declare const MerklApi: (domain: string | import("elysia").default<"", fa
|
|
3044
3048
|
page?: number | undefined;
|
3045
3049
|
chainId?: string | undefined;
|
3046
3050
|
action?: string | undefined;
|
3051
|
+
creatorAddress?: string | undefined;
|
3047
3052
|
mainProtocolId?: string | undefined;
|
3048
3053
|
order?: string | undefined;
|
3049
3054
|
test?: boolean | undefined;
|
@@ -3340,6 +3345,7 @@ export declare const MerklApi: (domain: string | import("elysia").default<"", fa
|
|
3340
3345
|
page?: number | undefined;
|
3341
3346
|
chainId?: string | undefined;
|
3342
3347
|
action?: string | undefined;
|
3348
|
+
creatorAddress?: string | undefined;
|
3343
3349
|
mainProtocolId?: string | undefined;
|
3344
3350
|
order?: string | undefined;
|
3345
3351
|
test?: boolean | undefined;
|
@@ -6598,6 +6604,7 @@ export declare const MerklApi: (domain: string | import("elysia").default<"", fa
|
|
6598
6604
|
page?: number | undefined;
|
6599
6605
|
chainId?: string | undefined;
|
6600
6606
|
action?: string | undefined;
|
6607
|
+
creatorAddress?: string | undefined;
|
6601
6608
|
mainProtocolId?: string | undefined;
|
6602
6609
|
order?: string | undefined;
|
6603
6610
|
test?: boolean | undefined;
|
@@ -6708,6 +6715,7 @@ export declare const MerklApi: (domain: string | import("elysia").default<"", fa
|
|
6708
6715
|
page?: number | undefined;
|
6709
6716
|
chainId?: string | undefined;
|
6710
6717
|
action?: string | undefined;
|
6718
|
+
creatorAddress?: string | undefined;
|
6711
6719
|
mainProtocolId?: string | undefined;
|
6712
6720
|
order?: string | undefined;
|
6713
6721
|
test?: boolean | undefined;
|
@@ -6733,6 +6741,7 @@ export declare const MerklApi: (domain: string | import("elysia").default<"", fa
|
|
6733
6741
|
page?: number | undefined;
|
6734
6742
|
chainId?: string | undefined;
|
6735
6743
|
action?: string | undefined;
|
6744
|
+
creatorAddress?: string | undefined;
|
6736
6745
|
mainProtocolId?: string | undefined;
|
6737
6746
|
order?: string | undefined;
|
6738
6747
|
test?: boolean | undefined;
|
@@ -217,6 +217,7 @@ export const extractOpportunities = {
|
|
217
217
|
"maverickBoostedPosition",
|
218
218
|
"zkSwapThreePool",
|
219
219
|
"syncswap",
|
220
|
+
"rfx",
|
220
221
|
],
|
221
222
|
borrow: ["radiant_borrow", "aave_borrowing", "euler_borrow", "zerolend_borrowing"],
|
222
223
|
lend: [
|
@@ -247,6 +248,12 @@ export const extractOpportunities = {
|
|
247
248
|
.filter(tkn => tkn);
|
248
249
|
if (["curve"].includes(campaign.type ?? ""))
|
249
250
|
return Object.values(typeInfo.poolTokens ?? {}).filter(tkn => tkn);
|
251
|
+
if (["rfx"].includes(campaign.type ?? "")) {
|
252
|
+
return [typeInfo.symbolShortToken, typeInfo.symbolLongToken];
|
253
|
+
}
|
254
|
+
if (["maverickBoostedPosition"].includes(campaign.type ?? "")) {
|
255
|
+
return [typeInfo.symbolTokenA, typeInfo.symbolTokenB];
|
256
|
+
}
|
250
257
|
return [typeInfo.symbolToken0, typeInfo.symbolToken1];
|
251
258
|
},
|
252
259
|
lend: () => (campaign.type === "compound" ? [typeInfo.symbolBaseToken] : [typeInfo.symbolUnderlyingToken]),
|
package/dist/src/index.d.ts
CHANGED
@@ -187,6 +187,7 @@ declare const app: Elysia<"", false, {
|
|
187
187
|
page?: number | undefined;
|
188
188
|
chainId?: string | undefined;
|
189
189
|
action?: string | undefined;
|
190
|
+
creatorAddress?: string | undefined;
|
190
191
|
mainProtocolId?: string | undefined;
|
191
192
|
order?: string | undefined;
|
192
193
|
test?: boolean | undefined;
|
@@ -302,6 +303,7 @@ declare const app: Elysia<"", false, {
|
|
302
303
|
page?: number | undefined;
|
303
304
|
chainId?: string | undefined;
|
304
305
|
action?: string | undefined;
|
306
|
+
creatorAddress?: string | undefined;
|
305
307
|
mainProtocolId?: string | undefined;
|
306
308
|
order?: string | undefined;
|
307
309
|
test?: boolean | undefined;
|
@@ -598,6 +600,7 @@ declare const app: Elysia<"", false, {
|
|
598
600
|
page?: number | undefined;
|
599
601
|
chainId?: string | undefined;
|
600
602
|
action?: string | undefined;
|
603
|
+
creatorAddress?: string | undefined;
|
601
604
|
mainProtocolId?: string | undefined;
|
602
605
|
order?: string | undefined;
|
603
606
|
test?: boolean | undefined;
|
@@ -147,7 +147,7 @@ export async function ERC20DynamicData(chainId, campaigns) {
|
|
147
147
|
campaign.campaignParameters.duration /
|
148
148
|
(whitelistedSupplyTargetToken * priceTargetToken),
|
149
149
|
totalSupplyTargetToken,
|
150
|
-
tvl: getTVL(tokenTypesByCampaign[campaign.campaignId].typeInfo.type,
|
150
|
+
tvl: getTVL(tokenTypesByCampaign[campaign.campaignId].typeInfo.type, tokenTypesByCampaign[campaign.campaignId].typeInfo.totalSupply, whitelistedSupplyTargetToken, priceTargetToken),
|
151
151
|
type: tokenTypesByCampaign[campaign.campaignId].type,
|
152
152
|
typeInfo: tokenTypesByCampaign[campaign.campaignId].typeInfo,
|
153
153
|
priceRewardToken: priceRewardToken,
|
@@ -23,7 +23,10 @@ type callKeysRfx = mandatoryCallKeys & {
|
|
23
23
|
metaDataLong: string;
|
24
24
|
};
|
25
25
|
type dataRawTemplate = callKeysRfx & {};
|
26
|
-
type dataTypeRfx = dataType & {
|
26
|
+
type dataTypeRfx = dataType & {
|
27
|
+
symbolShortToken: string;
|
28
|
+
symbolLongToken: string;
|
29
|
+
};
|
27
30
|
export declare class RfxProcessor extends GenericProcessor<callKeysRfx, dataRawTemplate, dataTypeRfx> {
|
28
31
|
rounds: {
|
29
32
|
round1: callType[];
|
@@ -59,6 +59,8 @@ export class RfxProcessor extends GenericProcessor {
|
|
59
59
|
cardName: generateCardName(type, typeInfo, campaign),
|
60
60
|
priceTargetToken: priceTargetToken, // Add the appropriate value here
|
61
61
|
tvl,
|
62
|
+
symbolShortToken: typeInfo.symbolShortToken,
|
63
|
+
symbolLongToken: typeInfo.symbolLongToken,
|
62
64
|
};
|
63
65
|
}
|
64
66
|
}
|
@@ -13,7 +13,7 @@ type callKeysBeefy = mandatoryCallKeys & {
|
|
13
13
|
underlying: string;
|
14
14
|
pricePerShare: string;
|
15
15
|
totalSupplyUnderlying: string;
|
16
|
-
|
16
|
+
symbolUnderlyingToken: string;
|
17
17
|
};
|
18
18
|
type dataRawBeefy = callKeysBeefy & {};
|
19
19
|
type dataTypeBeefy = dataType & {
|
@@ -8,7 +8,7 @@ export class WoofiProcessor extends GenericProcessor {
|
|
8
8
|
{ key: "underlying", call: "want", target: "tokenAddress" },
|
9
9
|
],
|
10
10
|
round2: [
|
11
|
-
{ key: "
|
11
|
+
{ key: "symbolUnderlyingToken", call: "symbol", target: "underlying" },
|
12
12
|
{ key: "totalSupply", call: "totalSupply", target: "tokenAddress" },
|
13
13
|
{ key: "decimalsToken", call: "decimals", target: "underlying" },
|
14
14
|
],
|
@@ -18,7 +18,7 @@ export class WoofiProcessor extends GenericProcessor {
|
|
18
18
|
// override computeRound1(): void {}
|
19
19
|
async processingRound5(index, type, typeInfo, calls, campaign, pricer) {
|
20
20
|
const { whitelistedSupplyTargetToken, totalSupply, blacklistedSupply } = this.handleWhiteListBlacklistRound5(typeInfo, campaign);
|
21
|
-
const priceToken = (await pricer.get({ symbol: typeInfo.
|
21
|
+
const priceToken = (await pricer.get({ symbol: typeInfo.symbolUnderlyingToken })) ?? 0;
|
22
22
|
let normalizedFactor = 1;
|
23
23
|
if (Number(typeInfo.decimalsToken) < campaign.campaignParameters.decimalsTargetToken) {
|
24
24
|
normalizedFactor = 10 ** (campaign.campaignParameters.decimalsTargetToken - Number(typeInfo.decimalsToken));
|
@@ -5,7 +5,7 @@ export class ClaimService {
|
|
5
5
|
// ─── Get Historical Claims ─────────────────────────────────────────────────
|
6
6
|
static async getHistoricalClaims(params, chainFilter = []) {
|
7
7
|
const roots = (await MerklRootService.fetchAll()).map(r => r.live);
|
8
|
-
const rewards = await RewardService.getByRecipient(params.address, roots, true, chainFilter);
|
8
|
+
const rewards = await RewardService.getByRecipient(params.address, roots, true, true, chainFilter);
|
9
9
|
const filteredRewards = chainFilter.length
|
10
10
|
? rewards.filter(reward => chainFilter.includes(reward.RewardToken.chainId))
|
11
11
|
: rewards;
|
@@ -56,6 +56,7 @@ export declare const OpportunityController: Elysia<"/opportunities", false, {
|
|
56
56
|
page?: number | undefined;
|
57
57
|
chainId?: string | undefined;
|
58
58
|
action?: string | undefined;
|
59
|
+
creatorAddress?: string | undefined;
|
59
60
|
mainProtocolId?: string | undefined;
|
60
61
|
order?: string | undefined;
|
61
62
|
test?: boolean | undefined;
|
@@ -171,6 +172,7 @@ export declare const OpportunityController: Elysia<"/opportunities", false, {
|
|
171
172
|
page?: number | undefined;
|
172
173
|
chainId?: string | undefined;
|
173
174
|
action?: string | undefined;
|
175
|
+
creatorAddress?: string | undefined;
|
174
176
|
mainProtocolId?: string | undefined;
|
175
177
|
order?: string | undefined;
|
176
178
|
test?: boolean | undefined;
|
@@ -467,6 +469,7 @@ export declare const OpportunityController: Elysia<"/opportunities", false, {
|
|
467
469
|
page?: number | undefined;
|
468
470
|
chainId?: string | undefined;
|
469
471
|
action?: string | undefined;
|
472
|
+
creatorAddress?: string | undefined;
|
470
473
|
mainProtocolId?: string | undefined;
|
471
474
|
order?: string | undefined;
|
472
475
|
test?: boolean | undefined;
|
@@ -278,6 +278,7 @@ export declare const GetOpportunitiesQueryDto: import("@sinclair/typebox").TObje
|
|
278
278
|
name: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
279
279
|
chainId: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TRegExp>;
|
280
280
|
action: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TRegExp>;
|
281
|
+
creatorAddress: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
281
282
|
tags: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
282
283
|
test: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
|
283
284
|
minimumTvl: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
|
@@ -51,6 +51,7 @@ export const GetOpportunitiesQueryDto = t.Object({
|
|
51
51
|
action: t.Optional(t.RegExp(/^(POOL|HOLD|DROP|LEND|BORROW)(,(POOL|HOLD|DROP|LEND|BORROW)){0,4}$/, {
|
52
52
|
description: "A comma seprated list actions. Legal values are: `POOL`, `HOLD`, `DROP`, `LEND`, `BORROW`",
|
53
53
|
})),
|
54
|
+
creatorAddress: t.Optional(t.String({ description: "Filter by creator address" })),
|
54
55
|
tags: t.Optional(t.String({ description: "Filter by tag" })),
|
55
56
|
test: t.Optional(t.Boolean({ description: "Include opportunities with test campaigns" })),
|
56
57
|
minimumTvl: t.Optional(t.Number({ description: "Minimum TVL threshhold in USD" })),
|
@@ -137,6 +137,7 @@ export class OpportunityRepository {
|
|
137
137
|
const sort = (query.sort === "rewards" ? "dailyRewards" : query.sort) ?? "dailyRewards";
|
138
138
|
const order = query.order ?? "desc";
|
139
139
|
const test = query.test ?? false;
|
140
|
+
const creatorAddress = query.creatorAddress ?? null;
|
140
141
|
const noFilters = Object.values(filters).every(v => v === undefined);
|
141
142
|
const tokensFilters = tokens?.map(symbol => ({
|
142
143
|
Tokens: { some: { symbol: { equals: symbol, mode: "insensitive" } } },
|
@@ -162,7 +163,16 @@ export class OpportunityRepository {
|
|
162
163
|
status: !status ? undefined : { in: status },
|
163
164
|
},
|
164
165
|
{ mainProtocolId: !protocols ? undefined : { in: protocols } },
|
165
|
-
{
|
166
|
+
{
|
167
|
+
Campaigns: test || !creatorAddress
|
168
|
+
? undefined
|
169
|
+
: {
|
170
|
+
some: {
|
171
|
+
RewardToken: !test ? { isTest: false } : undefined,
|
172
|
+
creatorAddress: creatorAddress ? creatorAddress : undefined,
|
173
|
+
},
|
174
|
+
},
|
175
|
+
},
|
166
176
|
],
|
167
177
|
},
|
168
178
|
};
|
@@ -172,6 +182,7 @@ export class OpportunityRepository {
|
|
172
182
|
const { page: _page, items: _items } = query;
|
173
183
|
const page = _page ? _page : 0;
|
174
184
|
const items = _items ? _items : 20;
|
185
|
+
const test = query.test ?? false;
|
175
186
|
const args = OpportunityRepository.#transformQueryToPrismaFilters(query);
|
176
187
|
return await apiDbClient.opportunity.findMany({
|
177
188
|
take: items,
|
@@ -181,7 +192,9 @@ export class OpportunityRepository {
|
|
181
192
|
MainProtocol: true,
|
182
193
|
Chain: true,
|
183
194
|
Protocols: true,
|
184
|
-
Tokens:
|
195
|
+
Tokens: {
|
196
|
+
where: !test ? { isTest: false } : undefined,
|
197
|
+
},
|
185
198
|
},
|
186
199
|
...args,
|
187
200
|
});
|
@@ -5,7 +5,7 @@ import type { Resource } from "../prisma";
|
|
5
5
|
* @see {@link Resource}
|
6
6
|
*/
|
7
7
|
export type Protocol = Resource<"Protocol">;
|
8
|
-
declare const protocolTypes: readonly ["arthswap", "baseswap", "camelot", "crust", "fenix", "horiza", "izumi", "kim", "pancakeswap-v3", "quickswap-algebra", "quickswap-uni", "ramses", "retro", "stryke", "stryke-pcs", "stryke-sushi", "sushiswap-v3", "swapr", "thruster", "uniswap-v3", "voltage", "zero", "koi", "supswap-v3", "zkswap", "thirdtrade", "uniswap-v2", "velodrome", "aerodrome", "balancer", "curve", "aura", "akron", "beefy", "dragonswap", "poolside", "koi", "syncswap-v3", "neptune", "zkSwapThreePool", "syncswap", "radiant", "aave", "euler", "gearbox", "compound", "sturdy", "frax", "ionic", "moonwell", "fluid", "silo", "morpho", "coumpound", "dolomite", "badger", "ajna", "layerbank", "ion", "venus", "woofi", "reactor_fusion", "eigenlayer"];
|
8
|
+
declare const protocolTypes: readonly ["arthswap", "baseswap", "camelot", "crust", "fenix", "horiza", "izumi", "kim", "pancakeswap-v3", "quickswap-algebra", "quickswap-uni", "ramses", "retro", "stryke", "stryke-pcs", "stryke-sushi", "sushiswap-v3", "swapr", "thruster", "uniswap-v3", "voltage", "zero", "koi", "supswap-v3", "zkswap", "thirdtrade", "uniswap-v2", "velodrome", "aerodrome", "balancer", "curve", "aura", "akron", "beefy", "dragonswap", "poolside", "koi", "syncswap-v3", "neptune", "zkSwapThreePool", "syncswap", "rfx", "radiant", "aave", "euler", "gearbox", "compound", "sturdy", "frax", "ionic", "moonwell", "fluid", "silo", "morpho", "coumpound", "dolomite", "badger", "ajna", "layerbank", "ion", "venus", "woofi", "reactor_fusion", "eigenlayer"];
|
9
9
|
export type ProtocolId = (typeof protocolTypes)[number];
|
10
10
|
export declare const ProtocolResourceDto: import("@sinclair/typebox").TObject<{
|
11
11
|
id: import("@sinclair/typebox").TString;
|
@@ -65,6 +65,7 @@ export declare const v4: Elysia<"/v4", false, {
|
|
65
65
|
page?: number | undefined;
|
66
66
|
chainId?: string | undefined;
|
67
67
|
action?: string | undefined;
|
68
|
+
creatorAddress?: string | undefined;
|
68
69
|
mainProtocolId?: string | undefined;
|
69
70
|
order?: string | undefined;
|
70
71
|
test?: boolean | undefined;
|
@@ -180,6 +181,7 @@ export declare const v4: Elysia<"/v4", false, {
|
|
180
181
|
page?: number | undefined;
|
181
182
|
chainId?: string | undefined;
|
182
183
|
action?: string | undefined;
|
184
|
+
creatorAddress?: string | undefined;
|
183
185
|
mainProtocolId?: string | undefined;
|
184
186
|
order?: string | undefined;
|
185
187
|
test?: boolean | undefined;
|
@@ -476,6 +478,7 @@ export declare const v4: Elysia<"/v4", false, {
|
|
476
478
|
page?: number | undefined;
|
477
479
|
chainId?: string | undefined;
|
478
480
|
action?: string | undefined;
|
481
|
+
creatorAddress?: string | undefined;
|
479
482
|
mainProtocolId?: string | undefined;
|
480
483
|
order?: string | undefined;
|
481
484
|
test?: boolean | undefined;
|
@@ -64,7 +64,10 @@ export const UserController = new Elysia({ prefix: "/users", detail: { tags: ["U
|
|
64
64
|
detail: { hide: true },
|
65
65
|
})
|
66
66
|
// ─── Sync Creator Tags with Engine DB ─────────────────────────────────
|
67
|
-
.post("/sync", async () =>
|
67
|
+
.post("/sync", async () => {
|
68
|
+
await UserService.syncTags();
|
69
|
+
await UserService.syncOpportunityTags();
|
70
|
+
}, {
|
68
71
|
headers: AuthorizationHeadersDto,
|
69
72
|
beforeHandle: BackOfficeGuard,
|
70
73
|
detail: { hide: true },
|
@@ -1,5 +1,6 @@
|
|
1
1
|
import { log } from "../../../utils/logger";
|
2
2
|
import { engineDbClient } from "../../../utils/prisma";
|
3
|
+
import { OpportunityService } from "../opportunity";
|
3
4
|
import { UserRepository } from "./user.repository";
|
4
5
|
// ─── Users Services ──────────────────────────────────────────────────────────
|
5
6
|
export class UserService {
|
@@ -19,6 +20,9 @@ export class UserService {
|
|
19
20
|
return await UserRepository.createMany(users);
|
20
21
|
}
|
21
22
|
static async updateTags(user, tags) {
|
23
|
+
if (!(await UserRepository.findUnique(user))) {
|
24
|
+
await UserRepository.create({ address: user, tags: [] });
|
25
|
+
}
|
22
26
|
return await UserRepository.updateTags(user, tags);
|
23
27
|
}
|
24
28
|
static async syncTags() {
|
@@ -47,4 +51,16 @@ export class UserService {
|
|
47
51
|
}
|
48
52
|
}
|
49
53
|
}
|
54
|
+
static async syncOpportunityTags() {
|
55
|
+
const users = await UserRepository.findManyWithTags();
|
56
|
+
for (const user of users) {
|
57
|
+
const opportunities = await OpportunityService.getMany({ creatorAddress: user.address });
|
58
|
+
for (const opportunity of opportunities) {
|
59
|
+
if (!user.tags.every(tag => opportunity.tags.includes(tag))) {
|
60
|
+
log.local(`updating tags for opportunity ${opportunity.id}: adding ${user.tags.join(",")}`);
|
61
|
+
await OpportunityService.update(opportunity.id, { tags: [...opportunity.tags, ...user.tags] });
|
62
|
+
}
|
63
|
+
}
|
64
|
+
}
|
65
|
+
}
|
50
66
|
}
|
@@ -27,7 +27,7 @@ export default (app) => app.use(checkQueryAddressValidity()).get("/rewards", asy
|
|
27
27
|
}
|
28
28
|
const user = query.user;
|
29
29
|
// @Warning: this is not taking into account the creator tag filter
|
30
|
-
const v4Res = await RewardService.getUserRewardsByChain(user, false, chainIds);
|
30
|
+
const v4Res = await RewardService.getUserRewardsByChain(user, false, chainIds, null, true);
|
31
31
|
const v3Res = RewardConvertorService.convertV4toRewardV3(v4Res);
|
32
32
|
return v3Res;
|
33
33
|
}, { query, tags: ["Rewards"] });
|
@@ -45,7 +45,7 @@ export default (app) => app
|
|
45
45
|
}
|
46
46
|
}
|
47
47
|
// @Warning: this is not taking into account the mainParameter filter
|
48
|
-
const v4Res = await RewardService.getUserRewardsByChain(user, false, [chainId], query.reloadChainId ?? null);
|
48
|
+
const v4Res = await RewardService.getUserRewardsByChain(user, false, [chainId], query.reloadChainId ?? null, true);
|
49
49
|
const v3Res = RewardConvertorService.convertV4toUserRewardV3(v4Res, proof);
|
50
50
|
return v3Res;
|
51
51
|
}, {
|
@@ -42,7 +42,7 @@ export function generateCardName(type, typeInfo, campaign, symbols = [""]) {
|
|
42
42
|
return `Lend ${cardToken} on ${typeInfo.protocol}`;
|
43
43
|
}
|
44
44
|
case tokenType.rfx:
|
45
|
-
return
|
45
|
+
return `${typeInfo.protocol} ${typeInfo.symbolShortToken}/${typeInfo.symbolLongToken}`;
|
46
46
|
case tokenType.radiant_borrow:
|
47
47
|
case tokenType.aave_borrowing:
|
48
48
|
case tokenType.yei_borrowing:
|
@@ -87,7 +87,7 @@ export function generateCardName(type, typeInfo, campaign, symbols = [""]) {
|
|
87
87
|
case tokenType.ironcladStaking:
|
88
88
|
return `Stake ${campaign.campaignParameters.symbolTargetToken} on ${typeInfo.protocol}`;
|
89
89
|
case tokenType.woofi:
|
90
|
-
return `Supercharge ${typeInfo.
|
90
|
+
return `Supercharge ${typeInfo.symbolUnderlyingToken} on ${typeInfo.protocol}`;
|
91
91
|
case tokenType.maverickBoostedPosition:
|
92
92
|
return `Maverick Boosted Position ${campaign.campaignParameters.symbolTargetToken}`;
|
93
93
|
case tokenType.zkSwapThreePool:
|