@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.
Files changed (25) hide show
  1. package/dist/src/eden/index.d.ts +9 -0
  2. package/dist/src/entities/opportunity.js +7 -0
  3. package/dist/src/index.d.ts +3 -0
  4. package/dist/src/libs/campaigns/campaignTypes/ERC20DynamicData.js +1 -1
  5. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/RfxProcessor.d.ts +4 -1
  6. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/RfxProcessor.js +2 -0
  7. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/WoofiProcessor.d.ts +1 -1
  8. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/WoofiProcessor.js +2 -2
  9. package/dist/src/modules/v4/claims/claims.service.js +1 -1
  10. package/dist/src/modules/v4/opportunity/opportunity.controller.d.ts +3 -0
  11. package/dist/src/modules/v4/opportunity/opportunity.model.d.ts +1 -0
  12. package/dist/src/modules/v4/opportunity/opportunity.model.js +1 -0
  13. package/dist/src/modules/v4/opportunity/opportunity.repository.js +15 -2
  14. package/dist/src/modules/v4/opportunity/subservices/getErc20Metadata.service.js +1 -0
  15. package/dist/src/modules/v4/protocol/protocol.model.d.ts +1 -1
  16. package/dist/src/modules/v4/protocol/protocol.model.js +1 -0
  17. package/dist/src/modules/v4/router.d.ts +3 -0
  18. package/dist/src/modules/v4/user/user.controller.js +4 -1
  19. package/dist/src/modules/v4/user/user.service.d.ts +1 -0
  20. package/dist/src/modules/v4/user/user.service.js +16 -0
  21. package/dist/src/routes/v3/rewards.js +1 -1
  22. package/dist/src/routes/v3/userRewards.js +1 -1
  23. package/dist/src/utils/generateCardName.js +2 -2
  24. package/dist/tsconfig.package.tsbuildinfo +1 -1
  25. package/package.json +1 -1
@@ -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]),
@@ -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, totalSupplyTargetToken, whitelistedSupplyTargetToken, priceTargetToken),
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
- symbolUnderlying: string;
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: "symbolUnderlying", call: "symbol", target: "underlying" },
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.symbolUnderlying })) ?? 0;
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
- { Campaigns: test ? undefined : { some: { RewardToken: { isTest: false } } } },
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: true,
195
+ Tokens: {
196
+ where: !test ? { isTest: false } : undefined,
197
+ },
185
198
  },
186
199
  ...args,
187
200
  });
@@ -35,6 +35,7 @@ export const getErc20Metadata = async (chainId, campaignId, rewardToken, amount,
35
35
  "maverickBoostedPosition",
36
36
  "zkSwapThreePool",
37
37
  "syncswap",
38
+ "rfx",
38
39
  ],
39
40
  BORROW: ["radiant_borrow", "aave_borrowing", "euler_borrow", "zerolend_borrowing"],
40
41
  LEND: [
@@ -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;
@@ -43,6 +43,7 @@ const protocolTypes = [
43
43
  "neptune",
44
44
  "zkSwapThreePool",
45
45
  "syncswap",
46
+ "rfx",
46
47
  // ─── LP Lending ──────────────────────────────────────────────────────
47
48
  "radiant",
48
49
  "aave",
@@ -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 () => await UserService.syncTags(), {
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 },
@@ -22,4 +22,5 @@ export declare abstract class UserService {
22
22
  address: string;
23
23
  }>;
24
24
  static syncTags(): Promise<void>;
25
+ static syncOpportunityTags(): Promise<void>;
25
26
  }
@@ -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 `Supply ${typeInfo.symbolShortToken}/${typeInfo.symbolLongToken} on ${typeInfo.protocol}`;
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.symbolUnderlying} on ${typeInfo.protocol}`;
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: