@merkl/api 0.10.168 → 0.10.170

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.
Files changed (97) hide show
  1. package/dist/database/api/.generated/edge.js +6 -3
  2. package/dist/database/api/.generated/index-browser.js +3 -0
  3. package/dist/database/api/.generated/index.d.ts +113 -0
  4. package/dist/database/api/.generated/index.js +6 -3
  5. package/dist/database/api/.generated/package.json +1 -1
  6. package/dist/database/api/.generated/schema.prisma +17 -15
  7. package/dist/database/api/.generated/wasm.js +3 -0
  8. package/dist/src/cache/declaration.d.ts +0 -30
  9. package/dist/src/cache/declaration.js +0 -30
  10. package/dist/src/eden/index.d.ts +167 -15
  11. package/dist/src/index.d.ts +59 -5
  12. package/dist/src/libs/campaigns/campaignTypes/CLAMMDynamicData.js +2 -2
  13. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/helpers/factoryFinder.js +2 -0
  14. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/helpers/tokenType.d.ts +3 -1
  15. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/helpers/tokenType.js +8 -0
  16. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/PendleYTProcessor.d.ts +29 -0
  17. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/PendleYTProcessor.js +31 -0
  18. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/processorMapping.js +3 -0
  19. package/dist/src/libs/positions/clamm/index.d.ts +1 -2
  20. package/dist/src/libs/positions/clamm/index.js +322 -330
  21. package/dist/src/libs/positions/clamm/thegraph/fetchAlmPositions.d.ts +1 -1
  22. package/dist/src/libs/positions/clamm/thegraph/fetchAlmPositions.js +1 -1
  23. package/dist/src/libs/positions/clamm/thegraph/fetchAmmPositions.d.ts +1 -1
  24. package/dist/src/libs/positions/clamm/thegraph/fetchAmmPositions.js +2 -2
  25. package/dist/src/libs/positions/clamm/thegraph/fetchFarmedPositions.d.ts +1 -2
  26. package/dist/src/libs/positions/clamm/thegraph/fetchFarmedPositions.js +1 -4
  27. package/dist/src/libs/positions/euler/index.js +2 -3
  28. package/dist/src/libs/positions/index.js +1 -1
  29. package/dist/src/modules/v4/campaign/campaign.controller.d.ts +6 -2
  30. package/dist/src/modules/v4/campaign/campaign.model.d.ts +1 -0
  31. package/dist/src/modules/v4/campaign/campaign.model.js +1 -0
  32. package/dist/src/modules/v4/campaign/campaign.repository.d.ts +2 -0
  33. package/dist/src/modules/v4/campaign/campaign.repository.js +2 -1
  34. package/dist/src/modules/v4/campaign/campaign.service.d.ts +10 -5
  35. package/dist/src/modules/v4/campaign/campaign.service.js +10 -2
  36. package/dist/src/modules/v4/opportunity/opportunity.controller.d.ts +20 -3
  37. package/dist/src/modules/v4/opportunity/opportunity.model.d.ts +2 -1
  38. package/dist/src/modules/v4/opportunity/opportunity.model.js +1 -0
  39. package/dist/src/modules/v4/opportunity/opportunity.repository.d.ts +83 -5
  40. package/dist/src/modules/v4/opportunity/opportunity.repository.js +31 -0
  41. package/dist/src/modules/v4/opportunity/opportunity.service.d.ts +162 -8
  42. package/dist/src/modules/v4/opportunity/opportunity.service.js +11 -0
  43. package/dist/src/modules/v4/position/implementations/AjnaPositionFetcher.d.ts +6 -0
  44. package/dist/src/modules/v4/position/implementations/AjnaPositionFetcher.js +90 -0
  45. package/dist/src/modules/v4/position/implementations/BadgerPositionFetcher.d.ts +6 -0
  46. package/dist/src/modules/v4/position/implementations/BadgerPositionFetcher.js +69 -0
  47. package/dist/src/modules/v4/position/implementations/ClammPositionFetcher.d.ts +6 -0
  48. package/dist/src/modules/v4/position/implementations/ClammPositionFetcher.js +71 -0
  49. package/dist/src/modules/v4/position/implementations/DolomitePositionFetcher.d.ts +6 -0
  50. package/dist/src/modules/v4/position/implementations/DolomitePositionFetcher.js +45 -0
  51. package/dist/src/modules/v4/position/implementations/ERC20PositionFetcher.d.ts +6 -0
  52. package/dist/src/modules/v4/position/implementations/ERC20PositionFetcher.js +47 -0
  53. package/dist/src/modules/v4/position/implementations/EulerPositionFetcher.d.ts +6 -0
  54. package/dist/src/modules/v4/position/implementations/EulerPositionFetcher.js +40 -0
  55. package/dist/src/modules/v4/position/index.d.ts +2 -0
  56. package/dist/src/modules/v4/position/index.js +2 -0
  57. package/dist/src/modules/v4/position/position.controller.d.ts +39 -0
  58. package/dist/src/modules/v4/position/position.controller.js +16 -0
  59. package/dist/src/modules/v4/position/position.model.d.ts +25 -0
  60. package/dist/src/modules/v4/position/position.model.js +5 -0
  61. package/dist/src/modules/v4/position/position.repository.d.ts +14 -0
  62. package/dist/src/modules/v4/position/position.repository.js +6 -0
  63. package/dist/src/modules/v4/position/position.service.d.ts +5 -0
  64. package/dist/src/modules/v4/position/position.service.js +34 -0
  65. package/dist/src/modules/v4/price/price.controller.js +1 -1
  66. package/dist/src/modules/v4/price/price.service.d.ts +1 -1
  67. package/dist/src/modules/v4/price/price.service.js +3 -3
  68. package/dist/src/modules/v4/reward/reward.repository.d.ts +4 -0
  69. package/dist/src/modules/v4/reward/reward.service.d.ts +27 -0
  70. package/dist/src/modules/v4/reward/reward.service.js +5 -2
  71. package/dist/src/modules/v4/router.d.ts +59 -5
  72. package/dist/src/modules/v4/router.js +3 -1
  73. package/dist/src/modules/v4/token/token.controller.d.ts +6 -0
  74. package/dist/src/modules/v4/token/token.service.d.ts +12 -0
  75. package/dist/src/modules/v4/user/user.controller.d.ts +8 -0
  76. package/dist/src/routes/v1/prices.js +2 -4
  77. package/dist/src/routes/v3/blacklist.d.ts +59 -5
  78. package/dist/src/routes/v3/campaigns.d.ts +60 -6
  79. package/dist/src/routes/v3/campaignsInfo.d.ts +59 -5
  80. package/dist/src/routes/v3/multiChainPositions.d.ts +59 -5
  81. package/dist/src/routes/v3/opportunity.d.ts +59 -5
  82. package/dist/src/routes/v3/positions.d.ts +59 -5
  83. package/dist/src/routes/v3/recipients.d.ts +6 -2
  84. package/dist/src/routes/v3/recipients.js +14 -8
  85. package/dist/src/routes/v3/rewards.d.ts +59 -5
  86. package/dist/src/routes/v3/updates.d.ts +59 -5
  87. package/dist/src/routes/v3/userRewards.d.ts +59 -5
  88. package/dist/src/utils/decodeCalls.js +4 -1
  89. package/dist/src/utils/encodeCalls.js +4 -1
  90. package/dist/src/utils/generateCardName.js +2 -0
  91. package/dist/src/utils/prices/services/erc4626Service.js +10 -4
  92. package/dist/tsconfig.package.tsbuildinfo +1 -1
  93. package/package.json +1 -1
  94. package/dist/src/libs/reports/campaignReport.d.ts +0 -9
  95. package/dist/src/libs/reports/campaignReport.js +0 -37
  96. package/dist/src/libs/reports/mainParameterRewards.d.ts +0 -3
  97. package/dist/src/libs/reports/mainParameterRewards.js +0 -48
@@ -0,0 +1,6 @@
1
+ import { type MerklChainId } from "@sdk";
2
+ import type { Opportunity } from "../../opportunity";
3
+ import type { PositionFetcher, PositionT } from "../position.model";
4
+ export declare class EulerPositionFetcher implements PositionFetcher {
5
+ fetchPositions: (chainId: MerklChainId, user: string, opportunities: Opportunity["model"][]) => Promise<PositionT[]>;
6
+ }
@@ -0,0 +1,40 @@
1
+ import { BN2Number, Campaign, ChainInteractionService, ERC20Interface } from "@sdk";
2
+ const campaignType = Campaign.EULER;
3
+ export class EulerPositionFetcher {
4
+ fetchPositions = async (chainId, user, opportunities) => {
5
+ opportunities = opportunities.filter(o => o.type === Campaign[campaignType] && o.tokens?.length > 0 && o.chainId === chainId);
6
+ const calls = [];
7
+ for (const opportunity of opportunities) {
8
+ // Call per opportunity
9
+ for (const token of opportunity.tokens) {
10
+ calls.push({
11
+ allowFailure: true,
12
+ callData: ERC20Interface.encodeFunctionData("balanceOf", [user]),
13
+ target: token.address,
14
+ });
15
+ }
16
+ }
17
+ const res = await ChainInteractionService(chainId).fetchState(calls);
18
+ const result = [];
19
+ for (const [index, opportunity] of opportunities.entries()) {
20
+ // Decoding calls per opportunity
21
+ for (const [subIndex, token] of opportunity.tokens.entries()) {
22
+ const balance = ERC20Interface.decodeFunctionResult("balanceOf", res[index + subIndex].returnData)[0].toString();
23
+ if (BigInt(balance) > 0n) {
24
+ const position = {
25
+ flags: {},
26
+ opportunity,
27
+ tokens: [
28
+ {
29
+ token,
30
+ breakdown: [{ type: "balance", value: BN2Number(balance, token.decimals) }],
31
+ },
32
+ ],
33
+ };
34
+ result.push(position);
35
+ }
36
+ }
37
+ }
38
+ return result;
39
+ };
40
+ }
@@ -0,0 +1,2 @@
1
+ export * from "./position.model";
2
+ export * from "./position.service";
@@ -0,0 +1,2 @@
1
+ export * from "./position.model";
2
+ export * from "./position.service";
@@ -0,0 +1,39 @@
1
+ import { Elysia } from "elysia";
2
+ export declare const PositionController: Elysia<"/positions", false, {
3
+ decorator: {};
4
+ store: {};
5
+ derive: {};
6
+ resolve: {};
7
+ }, {
8
+ type: {};
9
+ error: {};
10
+ }, {
11
+ schema: {};
12
+ macro: {};
13
+ macroFn: {};
14
+ }, {
15
+ positions: {
16
+ index: {
17
+ get: {
18
+ body: unknown;
19
+ params: {};
20
+ query: {
21
+ chainId: number;
22
+ address: string;
23
+ };
24
+ headers: unknown;
25
+ response: {
26
+ 200: any[];
27
+ };
28
+ };
29
+ };
30
+ };
31
+ }, {
32
+ derive: {};
33
+ resolve: {};
34
+ schema: {};
35
+ }, {
36
+ derive: {};
37
+ resolve: {};
38
+ schema: {};
39
+ }>;
@@ -0,0 +1,16 @@
1
+ import { throwOnInvalidRequiredAddress, throwOnUnsupportedChainId } from "../../../utils/throw";
2
+ import { Elysia } from "elysia";
3
+ import { PositionsInputDto } from "./position.model";
4
+ import { PositionService } from "./position.service";
5
+ // ─── Positions Controller ──────────────────────────────────────────────
6
+ export const PositionController = new Elysia({ prefix: "/positions", detail: { tags: ["Positions"] } })
7
+ // ─── Get User Positions on a Chain ───────────────────────────────────
8
+ .get("/", async ({ query }) => {
9
+ return await PositionService.fetchPositions(query);
10
+ }, {
11
+ query: PositionsInputDto,
12
+ beforeHandle: ({ query }) => {
13
+ throwOnUnsupportedChainId(query.chainId);
14
+ query.address = throwOnInvalidRequiredAddress(query.address);
15
+ },
16
+ });
@@ -0,0 +1,25 @@
1
+ import type { MerklChainId } from "@sdk";
2
+ import type { Opportunity } from "../opportunity";
3
+ export type PositionT = {
4
+ flags: {
5
+ range?: string;
6
+ id?: string;
7
+ link?: string;
8
+ };
9
+ opportunity: Opportunity["model"];
10
+ tokens: {
11
+ token: Opportunity["model"]["tokens"][0];
12
+ breakdown: {
13
+ type: string;
14
+ value: number;
15
+ }[];
16
+ }[];
17
+ };
18
+ export interface PositionFetcher {
19
+ fetchPositions(chainId: MerklChainId, user: string, opportunity: Opportunity["model"][]): Promise<PositionT[]>;
20
+ }
21
+ export declare const PositionsInputDto: import("@sinclair/typebox").TObject<{
22
+ chainId: import("@sinclair/typebox").TNumber;
23
+ address: import("@sinclair/typebox").TString;
24
+ }>;
25
+ export type PositionsInputModel = typeof PositionsInputDto.static;
@@ -0,0 +1,5 @@
1
+ import { t } from "elysia";
2
+ export const PositionsInputDto = t.Object({
3
+ chainId: t.Numeric(),
4
+ address: t.String(),
5
+ });
@@ -0,0 +1,14 @@
1
+ import type { MerklChainId } from "@sdk";
2
+ export declare class PositionRepository {
3
+ static findManyDolomitePositions(chainId: MerklChainId, user: string): Promise<{
4
+ balance: string;
5
+ token: {
6
+ id: string;
7
+ marketId: string;
8
+ symbol: string;
9
+ decimals: string;
10
+ borrowLiquidity: string;
11
+ supplyLiquidity: string;
12
+ };
13
+ }[]>;
14
+ }
@@ -0,0 +1,6 @@
1
+ import axios from "axios";
2
+ export class PositionRepository {
3
+ static async findManyDolomitePositions(chainId, user) {
4
+ return (await axios.get(`https://api.dolomite.io/balances/${chainId}/users/${user}`)).data.Result;
5
+ }
6
+ }
@@ -0,0 +1,5 @@
1
+ import type { PositionsInputModel } from "./position.model";
2
+ export declare class PositionService {
3
+ #private;
4
+ static fetchPositions(query: PositionsInputModel): Promise<any[]>;
5
+ }
@@ -0,0 +1,34 @@
1
+ import { MERKL_USER_POSITION_FETCHING_GLOBAL_TIMEOUT } from "../../../constants";
2
+ import { Campaign, withTimeout } from "@sdk";
3
+ import { OpportunityService } from "../opportunity";
4
+ import { AjnaPositionFetcher } from "./implementations/AjnaPositionFetcher";
5
+ import { BadgerPositionFetcher } from "./implementations/BadgerPositionFetcher";
6
+ import { ClammPositionFetcher } from "./implementations/ClammPositionFetcher";
7
+ import { DolomitePositionFetcher } from "./implementations/DolomitePositionFetcher";
8
+ import { ERC20PositionFetcher } from "./implementations/ERC20PositionFetcher";
9
+ import { EulerPositionFetcher } from "./implementations/EulerPositionFetcher";
10
+ export class PositionService {
11
+ static #fetchers = {
12
+ [Campaign.ERC20]: new ERC20PositionFetcher(),
13
+ [Campaign.EULER]: new EulerPositionFetcher(),
14
+ [Campaign.AJNA]: new AjnaPositionFetcher(),
15
+ [Campaign.BADGER]: new BadgerPositionFetcher(),
16
+ [Campaign.CLAMM]: new ClammPositionFetcher(),
17
+ [Campaign.DOLOMITE]: new DolomitePositionFetcher(),
18
+ };
19
+ static async fetchPositions(query) {
20
+ const opportunities = await OpportunityService.findLiveWithFirstCampaign(query.chainId);
21
+ const promises = [];
22
+ for (const campaignType of Object.keys(Campaign)) {
23
+ const fetcher = PositionService.#fetchers[Number.parseInt(campaignType)];
24
+ if (fetcher) {
25
+ promises.push(withTimeout(fetcher.fetchPositions(query.chainId, query.address, opportunities.filter(o => !!o)), MERKL_USER_POSITION_FETCHING_GLOBAL_TIMEOUT));
26
+ }
27
+ }
28
+ const settledPromises = await Promise.allSettled(promises);
29
+ for (const errors of settledPromises.filter(p => p.status === "rejected")) {
30
+ console.error(errors.reason);
31
+ }
32
+ return settledPromises.filter(p => p.status === "fulfilled").flatMap(p => p.value);
33
+ }
34
+ }
@@ -9,7 +9,7 @@ export const PriceController = new Elysia({ prefix: "/prices", detail: { tags: [
9
9
  .get("/", async () => await PriceService.findMany())
10
10
  .get("/array", async () => await PriceService.findManyArray())
11
11
  // ─── Get Price By Token Symbol ───────────────────────────────────────
12
- .get("/symbol/:symbol", async ({ params }) => await PriceService.fetchPriceSourceBySymbol(params.symbol), {
12
+ .get("/symbol/:symbol", async ({ params }) => await PriceService.fetchPriceBySymbol(params.symbol), {
13
13
  params: PriceSourceIdentifier,
14
14
  })
15
15
  // ─── Price Sources Group ─────────────────────────────────────────────
@@ -8,7 +8,7 @@ export declare class PriceService {
8
8
  token: string;
9
9
  }[]>;
10
10
  /** Fetches a single price */
11
- static fetchPriceSourceBySymbol(symbol: string): Promise<number>;
11
+ static fetchPriceBySymbol(symbol: string): Promise<number>;
12
12
  static getPriceSourceBySymbol(symbol: string): Promise<{
13
13
  symbol: string;
14
14
  method: import("../../../../database/api/.generated").$Enums.PriceSourceMethod;
@@ -11,7 +11,7 @@ export class PriceService {
11
11
  return (await Pricer.load()).getArray();
12
12
  }
13
13
  /** Fetches a single price */
14
- static async fetchPriceSourceBySymbol(symbol) {
14
+ static async fetchPriceBySymbol(symbol) {
15
15
  const priceSource = await PriceRepository.findBySymbolOrThrow(symbol);
16
16
  if (!priceSource) {
17
17
  throw new Error(`Price source with symbol ${symbol} not found`);
@@ -20,7 +20,7 @@ export class PriceService {
20
20
  return priceSource.args.value;
21
21
  }
22
22
  if (priceSource.method === PriceSourceMethod.EQUAL_TO) {
23
- return PriceService.fetchPriceSourceBySymbol(priceSource.args.token);
23
+ return PriceService.fetchPriceBySymbol(priceSource.args.token);
24
24
  }
25
25
  return (await PriceFetcherFactory.instance.get(priceSource.method).getPrice([priceSource]))?.[0]?.rate;
26
26
  }
@@ -33,7 +33,7 @@ export class PriceService {
33
33
  }
34
34
  static async createPriceSource(priceSource) {
35
35
  const created = await PriceRepository.create(priceSource);
36
- return await PriceService.fetchPriceSourceBySymbol(created.symbol);
36
+ return await PriceService.fetchPriceBySymbol(created.symbol);
37
37
  }
38
38
  static async updatePriceSource(symbol, newPriceSource) {
39
39
  return await PriceRepository.updateBySymbol(symbol, newPriceSource);
@@ -12,7 +12,9 @@ export declare abstract class RewardRepository {
12
12
  address: string;
13
13
  icon: string;
14
14
  decimals: number;
15
+ displaySymbol: string;
15
16
  verified: boolean;
17
+ isTest: boolean;
16
18
  price: number | null;
17
19
  };
18
20
  Breakdown: ({
@@ -32,7 +34,9 @@ export declare abstract class RewardRepository {
32
34
  address: string;
33
35
  icon: string;
34
36
  decimals: number;
37
+ displaySymbol: string;
35
38
  verified: boolean;
39
+ isTest: boolean;
36
40
  price: number | null;
37
41
  }[];
38
42
  Protocols: {
@@ -29,7 +29,9 @@ export declare abstract class RewardService {
29
29
  address: string;
30
30
  icon: string;
31
31
  decimals: number;
32
+ displaySymbol: string;
32
33
  verified: boolean;
34
+ isTest: boolean;
33
35
  price: number | null;
34
36
  }[];
35
37
  Protocols: {
@@ -83,7 +85,9 @@ export declare abstract class RewardService {
83
85
  address: string;
84
86
  icon: string;
85
87
  decimals: number;
88
+ displaySymbol: string;
86
89
  verified: boolean;
90
+ isTest: boolean;
87
91
  price: number | null;
88
92
  };
89
93
  breakdowns: {
@@ -102,7 +106,9 @@ export declare abstract class RewardService {
102
106
  address: string;
103
107
  icon: string;
104
108
  decimals: number;
109
+ displaySymbol: string;
105
110
  verified: boolean;
111
+ isTest: boolean;
106
112
  price: number | null;
107
113
  }[];
108
114
  Protocols: {
@@ -159,7 +165,9 @@ export declare abstract class RewardService {
159
165
  address: string;
160
166
  icon: string;
161
167
  decimals: number;
168
+ displaySymbol: string;
162
169
  verified: boolean;
170
+ isTest: boolean;
163
171
  price: number | null;
164
172
  };
165
173
  Breakdown: ({
@@ -179,7 +187,9 @@ export declare abstract class RewardService {
179
187
  address: string;
180
188
  icon: string;
181
189
  decimals: number;
190
+ displaySymbol: string;
182
191
  verified: boolean;
192
+ isTest: boolean;
183
193
  price: number | null;
184
194
  }[];
185
195
  Protocols: {
@@ -265,7 +275,9 @@ export declare abstract class RewardService {
265
275
  address: string;
266
276
  icon: string;
267
277
  decimals: number;
278
+ displaySymbol: string;
268
279
  verified: boolean;
280
+ isTest: boolean;
269
281
  price: number | null;
270
282
  };
271
283
  breakdowns: {
@@ -284,7 +296,9 @@ export declare abstract class RewardService {
284
296
  address: string;
285
297
  icon: string;
286
298
  decimals: number;
299
+ displaySymbol: string;
287
300
  verified: boolean;
301
+ isTest: boolean;
288
302
  price: number | null;
289
303
  }[];
290
304
  Protocols: {
@@ -355,7 +369,9 @@ export declare abstract class RewardService {
355
369
  address: string;
356
370
  icon: string;
357
371
  decimals: number;
372
+ displaySymbol: string;
358
373
  verified: boolean;
374
+ isTest: boolean;
359
375
  price: number | null;
360
376
  };
361
377
  breakdowns: {
@@ -374,7 +390,9 @@ export declare abstract class RewardService {
374
390
  address: string;
375
391
  icon: string;
376
392
  decimals: number;
393
+ displaySymbol: string;
377
394
  verified: boolean;
395
+ isTest: boolean;
378
396
  price: number | null;
379
397
  }[];
380
398
  Protocols: {
@@ -442,7 +460,9 @@ export declare abstract class RewardService {
442
460
  address: string;
443
461
  icon: string;
444
462
  decimals: number;
463
+ displaySymbol: string;
445
464
  verified: boolean;
465
+ isTest: boolean;
446
466
  price: number | null;
447
467
  };
448
468
  Breakdown: ({
@@ -462,7 +482,9 @@ export declare abstract class RewardService {
462
482
  address: string;
463
483
  icon: string;
464
484
  decimals: number;
485
+ displaySymbol: string;
465
486
  verified: boolean;
487
+ isTest: boolean;
466
488
  price: number | null;
467
489
  }[];
468
490
  Protocols: {
@@ -532,6 +554,11 @@ export declare abstract class RewardService {
532
554
  campaignId: string;
533
555
  amount: bigint;
534
556
  }>;
557
+ static getAmountAndClaimedForCampaigns(x: CampaignIdWithoutPageModel): Promise<{
558
+ campaignId: string;
559
+ amount: string;
560
+ claimed: string;
561
+ }[]>;
535
562
  static getUnclaimed(x: CampaignIdWithoutPageModel): Promise<Record<string, string>>;
536
563
  static extractDailyRewardsRecordFromDynamicData<C extends Campaign>(type: C, dynamicData: CampaignDynamicData<C>[], timestamp?: bigint): Promise<DailyRewardsRecord["model"]>;
537
564
  }
@@ -259,13 +259,16 @@ export class RewardService {
259
259
  const root = await MerklRootService.fetch(query.chainId);
260
260
  return RewardRepository.total(CampaignService.hashId({ distributionChain: query.chainId, campaignId: query.campaignId }), root.live);
261
261
  }
262
+ static async getAmountAndClaimedForCampaigns(x) {
263
+ const currentRoot = await MerklRootService.fetch(x.chainId);
264
+ return await RewardRepository.getAmountAndClaimedForCampaigns(currentRoot.live, x);
265
+ }
262
266
  static async getUnclaimed(x) {
263
267
  const campaignToCampaignIds = x.campaignIds.reduce((acc, campaignId) => {
264
268
  acc[CampaignService.hashId({ distributionChain: x.chainId, campaignId })] = campaignId;
265
269
  return acc;
266
270
  }, {});
267
- const currentRoot = await MerklRootService.fetch(x.chainId);
268
- const data = await RewardRepository.getAmountAndClaimedForCampaigns(currentRoot.live, x);
271
+ const data = await RewardService.getAmountAndClaimedForCampaigns(x);
269
272
  return data.reduce((acc, { amount, campaignId, claimed }) => {
270
273
  if (!acc[campaignToCampaignIds[campaignId]])
271
274
  acc[campaignToCampaignIds[campaignId]] = "0";
@@ -101,7 +101,9 @@ export declare const v4: Elysia<"/v4", false, {
101
101
  address: string;
102
102
  icon: string;
103
103
  decimals: number;
104
+ displaySymbol: string;
104
105
  verified: boolean;
106
+ isTest: boolean;
105
107
  price: number | null;
106
108
  };
107
109
  amount: bigint;
@@ -116,7 +118,9 @@ export declare const v4: Elysia<"/v4", false, {
116
118
  address: string;
117
119
  icon: string;
118
120
  decimals: number;
121
+ displaySymbol: string;
119
122
  verified: boolean;
123
+ isTest: boolean;
120
124
  price: number | null;
121
125
  }[];
122
126
  chain: {
@@ -200,7 +204,9 @@ export declare const v4: Elysia<"/v4", false, {
200
204
  address: string;
201
205
  icon: string;
202
206
  decimals: number;
207
+ displaySymbol: string;
203
208
  verified: boolean;
209
+ isTest: boolean;
204
210
  price: number | null;
205
211
  };
206
212
  amount: bigint;
@@ -215,7 +221,9 @@ export declare const v4: Elysia<"/v4", false, {
215
221
  address: string;
216
222
  icon: string;
217
223
  decimals: number;
224
+ displaySymbol: string;
218
225
  verified: boolean;
226
+ isTest: boolean;
219
227
  price: number | null;
220
228
  }[];
221
229
  chain: {
@@ -241,7 +249,7 @@ export declare const v4: Elysia<"/v4", false, {
241
249
  tvl: number;
242
250
  apr: number;
243
251
  dailyRewards: number;
244
- campaigns: ({
252
+ campaigns: {
245
253
  params: any;
246
254
  chain: {
247
255
  name: string;
@@ -256,7 +264,9 @@ export declare const v4: Elysia<"/v4", false, {
256
264
  address: string;
257
265
  icon: string;
258
266
  decimals: number;
267
+ displaySymbol: string;
259
268
  verified: boolean;
269
+ isTest: boolean;
260
270
  price: number | null;
261
271
  };
262
272
  distributionChain: {
@@ -284,7 +294,7 @@ export declare const v4: Elysia<"/v4", false, {
284
294
  amount: string;
285
295
  opportunityId: string;
286
296
  creatorAddress: string;
287
- } | null)[];
297
+ }[];
288
298
  } | null | undefined;
289
299
  };
290
300
  };
@@ -309,6 +319,7 @@ export declare const v4: Elysia<"/v4", false, {
309
319
  action?: string | undefined;
310
320
  mainProtocolId?: string | undefined;
311
321
  order?: undefined;
322
+ test?: boolean | undefined;
312
323
  minimumTvl?: number | undefined;
313
324
  };
314
325
  headers: unknown;
@@ -354,7 +365,9 @@ export declare const v4: Elysia<"/v4", false, {
354
365
  address: string;
355
366
  icon: string;
356
367
  decimals: number;
368
+ displaySymbol: string;
357
369
  verified: boolean;
370
+ isTest: boolean;
358
371
  price: number | null;
359
372
  };
360
373
  amount: bigint;
@@ -369,7 +382,9 @@ export declare const v4: Elysia<"/v4", false, {
369
382
  address: string;
370
383
  icon: string;
371
384
  decimals: number;
385
+ displaySymbol: string;
372
386
  verified: boolean;
387
+ isTest: boolean;
373
388
  price: number | null;
374
389
  }[];
375
390
  chain: {
@@ -418,6 +433,7 @@ export declare const v4: Elysia<"/v4", false, {
418
433
  action?: string | undefined;
419
434
  mainProtocolId?: string | undefined;
420
435
  order?: undefined;
436
+ test?: boolean | undefined;
421
437
  minimumTvl?: number | undefined;
422
438
  };
423
439
  headers: unknown;
@@ -448,12 +464,13 @@ export declare const v4: Elysia<"/v4", false, {
448
464
  action?: string | undefined;
449
465
  mainProtocolId?: string | undefined;
450
466
  order?: undefined;
467
+ test?: boolean | undefined;
451
468
  minimumTvl?: number | undefined;
452
469
  };
453
470
  headers: unknown;
454
471
  response: {
455
472
  200: {
456
- sum: File;
473
+ sum: number | null;
457
474
  };
458
475
  };
459
476
  };
@@ -523,10 +540,11 @@ export declare const v4: Elysia<"/v4", false, {
523
540
  campaignId?: string | undefined;
524
541
  opportunityId?: string | undefined;
525
542
  tokenSymbol?: string | undefined;
543
+ test?: boolean | undefined;
526
544
  };
527
545
  headers: unknown;
528
546
  response: {
529
- 200: ({
547
+ 200: {
530
548
  params: any;
531
549
  chain: {
532
550
  name: string;
@@ -541,7 +559,9 @@ export declare const v4: Elysia<"/v4", false, {
541
559
  address: string;
542
560
  icon: string;
543
561
  decimals: number;
562
+ displaySymbol: string;
544
563
  verified: boolean;
564
+ isTest: boolean;
545
565
  price: number | null;
546
566
  };
547
567
  distributionChain: {
@@ -569,7 +589,7 @@ export declare const v4: Elysia<"/v4", false, {
569
589
  amount: string;
570
590
  opportunityId: string;
571
591
  creatorAddress: string;
572
- } | null)[];
592
+ }[];
573
593
  };
574
594
  };
575
595
  };
@@ -591,6 +611,7 @@ export declare const v4: Elysia<"/v4", false, {
591
611
  campaignId?: string | undefined;
592
612
  opportunityId?: string | undefined;
593
613
  tokenSymbol?: string | undefined;
614
+ test?: boolean | undefined;
594
615
  };
595
616
  headers: unknown;
596
617
  response: {
@@ -744,7 +765,9 @@ export declare const v4: Elysia<"/v4", false, {
744
765
  address: string;
745
766
  icon: string;
746
767
  decimals: number;
768
+ displaySymbol: string;
747
769
  verified: boolean;
770
+ isTest: boolean;
748
771
  price?: number | null | undefined;
749
772
  } | undefined;
750
773
  };
@@ -773,7 +796,9 @@ export declare const v4: Elysia<"/v4", false, {
773
796
  address: string;
774
797
  icon: string;
775
798
  decimals: number;
799
+ displaySymbol: string;
776
800
  verified: boolean;
801
+ isTest: boolean;
777
802
  } & {
778
803
  price?: number | null | undefined;
779
804
  } & {
@@ -806,7 +831,9 @@ export declare const v4: Elysia<"/v4", false, {
806
831
  address: string;
807
832
  icon: string;
808
833
  decimals: number;
834
+ displaySymbol: string;
809
835
  verified: boolean;
836
+ isTest: boolean;
810
837
  } & {
811
838
  price?: number | null | undefined;
812
839
  })[];
@@ -1469,7 +1496,9 @@ export declare const v4: Elysia<"/v4", false, {
1469
1496
  address: string;
1470
1497
  icon: string;
1471
1498
  decimals: number;
1499
+ displaySymbol: string;
1472
1500
  verified: boolean;
1501
+ isTest: boolean;
1473
1502
  price: number | null;
1474
1503
  };
1475
1504
  breakdowns: {
@@ -1488,7 +1517,9 @@ export declare const v4: Elysia<"/v4", false, {
1488
1517
  address: string;
1489
1518
  icon: string;
1490
1519
  decimals: number;
1520
+ displaySymbol: string;
1491
1521
  verified: boolean;
1522
+ isTest: boolean;
1492
1523
  price: number | null;
1493
1524
  }[];
1494
1525
  Protocols: {
@@ -1579,7 +1610,9 @@ export declare const v4: Elysia<"/v4", false, {
1579
1610
  address: string;
1580
1611
  icon: string;
1581
1612
  decimals: number;
1613
+ displaySymbol: string;
1582
1614
  verified: boolean;
1615
+ isTest: boolean;
1583
1616
  price: number | null;
1584
1617
  };
1585
1618
  breakdowns: {
@@ -1598,7 +1631,9 @@ export declare const v4: Elysia<"/v4", false, {
1598
1631
  address: string;
1599
1632
  icon: string;
1600
1633
  decimals: number;
1634
+ displaySymbol: string;
1601
1635
  verified: boolean;
1636
+ isTest: boolean;
1602
1637
  price: number | null;
1603
1638
  }[];
1604
1639
  Protocols: {
@@ -2194,6 +2229,25 @@ export declare const v4: Elysia<"/v4", false, {
2194
2229
  };
2195
2230
  };
2196
2231
  };
2232
+ } & {
2233
+ v4: {
2234
+ positions: {
2235
+ index: {
2236
+ get: {
2237
+ body: unknown;
2238
+ params: {};
2239
+ query: {
2240
+ chainId: number;
2241
+ address: string;
2242
+ };
2243
+ headers: unknown;
2244
+ response: {
2245
+ 200: any[];
2246
+ };
2247
+ };
2248
+ };
2249
+ };
2250
+ };
2197
2251
  }, {
2198
2252
  derive: {};
2199
2253
  resolve: {};