@merkl/api 0.10.361 → 0.10.377

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 (91) hide show
  1. package/README.md +78 -14
  2. package/dist/database/api/.generated/edge.js +21 -6
  3. package/dist/database/api/.generated/index-browser.js +18 -3
  4. package/dist/database/api/.generated/index.d.ts +1746 -256
  5. package/dist/database/api/.generated/index.js +21 -6
  6. package/dist/database/api/.generated/package.json +1 -1
  7. package/dist/database/api/.generated/schema.prisma +12 -2
  8. package/dist/database/api/.generated/wasm.js +18 -3
  9. package/dist/src/eden/index.d.ts +1260 -127
  10. package/dist/src/entities/campaign.js +2 -1
  11. package/dist/src/entities/opportunity.js +169 -3
  12. package/dist/src/index.d.ts +432 -5
  13. package/dist/src/jobs/etl/pendings.js +2 -1
  14. package/dist/src/jobs/etl/reward-breakdowns.js +2 -1
  15. package/dist/src/jobs/etl/rewards.js +2 -1
  16. package/dist/src/libs/campaigns/campaignTypes/ERC20DynamicData.js +45 -54
  17. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/helpers/tokenType.d.ts +3 -1
  18. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/helpers/tokenType.js +4 -0
  19. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/ERC4626Processor.d.ts +34 -0
  20. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/ERC4626Processor.js +36 -0
  21. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/processorMapping.js +3 -0
  22. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/subtypesRound1.js +4 -1
  23. package/dist/src/libs/campaigns/campaignTypes/HyperdriveDynamicData.d.ts +5 -0
  24. package/dist/src/libs/campaigns/campaignTypes/HyperdriveDynamicData.js +76 -0
  25. package/dist/src/libs/campaigns/campaignsDynamicData.js +8 -0
  26. package/dist/src/modules/v4/campaign/campaign.controller.d.ts +2 -0
  27. package/dist/src/modules/v4/campaign/campaign.model.d.ts +1 -0
  28. package/dist/src/modules/v4/campaign/campaign.model.js +1 -0
  29. package/dist/src/modules/v4/campaign/campaign.repository.d.ts +63 -1
  30. package/dist/src/modules/v4/campaign/campaign.repository.js +15 -10
  31. package/dist/src/modules/v4/computedValue/computedValue.controller.d.ts +8 -5
  32. package/dist/src/modules/v4/computedValue/computedValue.controller.js +8 -6
  33. package/dist/src/modules/v4/computedValue/computedValue.model.js +12 -4
  34. package/dist/src/modules/v4/computedValue/computedValue.repository.d.ts +8 -5
  35. package/dist/src/modules/v4/computedValue/computedValue.repository.js +7 -3
  36. package/dist/src/modules/v4/computedValue/computedValue.service.d.ts +7 -4
  37. package/dist/src/modules/v4/computedValue/computedValue.service.js +10 -0
  38. package/dist/src/modules/v4/creator/creator.controller.d.ts +118 -0
  39. package/dist/src/modules/v4/creator/creator.controller.js +30 -0
  40. package/dist/src/modules/v4/creator/creator.model.d.ts +29 -0
  41. package/dist/src/modules/v4/creator/creator.model.js +18 -0
  42. package/dist/src/modules/v4/creator/creator.repository.d.ts +40 -0
  43. package/dist/src/modules/v4/creator/creator.repository.js +63 -0
  44. package/dist/src/modules/v4/creator/creator.service.d.ts +61 -0
  45. package/dist/src/modules/v4/creator/creator.service.js +44 -0
  46. package/dist/src/modules/v4/creator/index.d.ts +3 -0
  47. package/dist/src/modules/v4/creator/index.js +3 -0
  48. package/dist/src/modules/v4/dynamicData/dynamicData.controller.d.ts +3 -4
  49. package/dist/src/modules/v4/dynamicData/dynamicData.controller.js +1 -1
  50. package/dist/src/modules/v4/dynamicData/dynamicData.model.d.ts +1 -0
  51. package/dist/src/modules/v4/dynamicData/dynamicData.model.js +1 -0
  52. package/dist/src/modules/v4/dynamicData/dynamicData.service.d.ts +6 -3
  53. package/dist/src/modules/v4/dynamicData/dynamicData.service.js +50 -9
  54. package/dist/src/modules/v4/opportunity/opportunity.controller.d.ts +171 -1
  55. package/dist/src/modules/v4/opportunity/opportunity.controller.js +14 -0
  56. package/dist/src/modules/v4/opportunity/opportunity.model.d.ts +0 -1
  57. package/dist/src/modules/v4/opportunity/opportunity.repository.d.ts +185 -0
  58. package/dist/src/modules/v4/opportunity/opportunity.repository.js +41 -0
  59. package/dist/src/modules/v4/opportunity/opportunity.service.d.ts +151 -1
  60. package/dist/src/modules/v4/opportunity/opportunity.service.js +45 -2
  61. package/dist/src/modules/v4/opportunity/subservices/getHyperdriveMetadata.service.d.ts +1 -1
  62. package/dist/src/modules/v4/opportunity/subservices/getHyperdriveMetadata.service.js +2 -2
  63. package/dist/src/modules/v4/programPayload/programPayload.controller.d.ts +30 -0
  64. package/dist/src/modules/v4/programPayload/programPayload.controller.js +12 -1
  65. package/dist/src/modules/v4/programPayload/programPayload.model.d.ts +21 -1
  66. package/dist/src/modules/v4/programPayload/programPayload.model.js +12 -0
  67. package/dist/src/modules/v4/programPayload/programPayload.repository.d.ts +3 -2
  68. package/dist/src/modules/v4/programPayload/programPayload.repository.js +28 -2
  69. package/dist/src/modules/v4/programPayload/programPayload.service.d.ts +2 -1
  70. package/dist/src/modules/v4/programPayload/programPayload.service.js +42 -2
  71. package/dist/src/modules/v4/protocol/protocol.controller.d.ts +1 -0
  72. package/dist/src/modules/v4/protocol/protocol.model.d.ts +1 -0
  73. package/dist/src/modules/v4/protocol/protocol.model.js +1 -0
  74. package/dist/src/modules/v4/reward/reward.repository.d.ts +2 -1
  75. package/dist/src/modules/v4/reward/reward.repository.js +12 -1
  76. package/dist/src/modules/v4/reward/reward.service.js +5 -2
  77. package/dist/src/modules/v4/router.d.ts +432 -5
  78. package/dist/src/modules/v4/router.js +5 -1
  79. package/dist/src/modules/v4/user/user.controller.d.ts +28 -0
  80. package/dist/src/modules/v4/user/user.controller.js +5 -0
  81. package/dist/src/modules/v4/user/user.repository.d.ts +5 -0
  82. package/dist/src/modules/v4/user/user.service.d.ts +5 -0
  83. package/dist/src/utils/decodeCalls.js +7 -1
  84. package/dist/src/utils/encodeCalls.js +19 -1
  85. package/dist/src/utils/generateCardName.js +3 -0
  86. package/dist/tsconfig.package.tsbuildinfo +1 -1
  87. package/package.json +6 -2
  88. package/dist/src/jobs/breakdowns.d.ts +0 -1
  89. package/dist/src/jobs/breakdowns.js +0 -55
  90. package/dist/src/jobs/rewards.d.ts +0 -1
  91. package/dist/src/jobs/rewards.js +0 -74
@@ -29,7 +29,7 @@ export declare const OpportunityController: Elysia<"/opportunities", false, {
29
29
  status: "NONE" | "PAST" | "LIVE" | "SOON";
30
30
  identifier: string;
31
31
  chainId: number;
32
- action: "INVALID" | "POOL" | "HOLD" | "DROP" | "LEND" | "BORROW" | "LP" | "LONG" | "SHORT";
32
+ action: "INVALID" | "POOL" | "HOLD" | "DROP" | "LEND" | "BORROW" | "LONG" | "SHORT";
33
33
  };
34
34
  params: {};
35
35
  query: unknown;
@@ -354,6 +354,176 @@ export declare const OpportunityController: Elysia<"/opportunities", false, {
354
354
  };
355
355
  };
356
356
  };
357
+ } & {
358
+ opportunities: {
359
+ campaigns: {
360
+ get: {
361
+ body: unknown;
362
+ params: {};
363
+ query: {
364
+ type?: "INVALID" | "ERC20" | "CLAMM" | "ERC20_SNAPSHOT" | "JSON_AIRDROP" | "SILO" | "RADIANT" | "MORPHO" | "DOLOMITE" | "BADGER" | "COMPOUND" | "AJNA" | "EULER" | "UNISWAP_V4" | "ION" | "EIGENLAYER" | "ERC20TRANSFERS" | "ERC20LOGPROCESSOR" | "ERC20REBASELOGPROCESSOR" | "VEST" | "ERC20_FIX_APR" | "HYPERDRIVELOGPROCESSOR" | "HYPERDRIVELOGFIXPROCESSOR" | undefined;
365
+ items?: number | undefined;
366
+ subType?: number | undefined;
367
+ page?: number | undefined;
368
+ chainId?: number | undefined;
369
+ startTimestamp?: string | undefined;
370
+ endTimestamp?: string | undefined;
371
+ tokenAddress?: string | undefined;
372
+ mainParameter?: string | undefined;
373
+ campaignId?: string | undefined;
374
+ opportunityId?: string | undefined;
375
+ creatorId?: string | undefined;
376
+ test?: boolean | undefined;
377
+ creatorTag?: string | undefined;
378
+ tokenSymbol?: string | undefined;
379
+ };
380
+ headers: unknown;
381
+ response: {
382
+ 200: ({
383
+ protocol?: {
384
+ name: string;
385
+ url: string;
386
+ description: string;
387
+ id: string;
388
+ tags: string[];
389
+ icon: string;
390
+ } | null | undefined;
391
+ depositUrl?: string | undefined;
392
+ aprRecord?: {
393
+ timestamp: string | bigint;
394
+ cumulated: number;
395
+ breakdowns: {
396
+ type: "CAMPAIGN" | "TOKEN" | "PROTOCOL";
397
+ id: number;
398
+ identifier: string;
399
+ value: number;
400
+ aprRecordId: string;
401
+ }[];
402
+ } | undefined;
403
+ tvlRecord?: {
404
+ total: number;
405
+ timestamp: string | bigint;
406
+ breakdowns: {
407
+ type: "TOKEN" | "PROTOCOL";
408
+ id: number;
409
+ identifier: string;
410
+ value: number;
411
+ tvlRecordId: string;
412
+ }[];
413
+ } | undefined;
414
+ rewardsRecord?: {
415
+ total: number;
416
+ id: string;
417
+ timestamp: string | bigint;
418
+ breakdowns: {
419
+ token: {
420
+ price?: number | null | undefined;
421
+ symbol: string;
422
+ name: string | null;
423
+ id: string;
424
+ icon: string;
425
+ chainId: number;
426
+ address: string;
427
+ decimals: number;
428
+ verified: boolean;
429
+ isTest: boolean;
430
+ };
431
+ id: number;
432
+ value: number;
433
+ campaignId: string;
434
+ amount: string | bigint;
435
+ dailyRewardsRecordId: string;
436
+ }[];
437
+ } | undefined;
438
+ name: string;
439
+ type: string;
440
+ tokens: {
441
+ price?: number | null | undefined;
442
+ symbol: string;
443
+ name: string | null;
444
+ id: string;
445
+ icon: string;
446
+ chainId: number;
447
+ address: string;
448
+ decimals: number;
449
+ verified: boolean;
450
+ isTest: boolean;
451
+ }[];
452
+ id: string;
453
+ status: string;
454
+ tags: string[];
455
+ identifier: string;
456
+ chain: {
457
+ name: string;
458
+ id: number;
459
+ icon: string;
460
+ };
461
+ chainId: number;
462
+ action: string;
463
+ tvl: number;
464
+ apr: number;
465
+ dailyRewards: number;
466
+ } & {
467
+ campaigns: {
468
+ params: any;
469
+ chain: {
470
+ name: string;
471
+ id: number;
472
+ icon: string;
473
+ };
474
+ rewardToken: {
475
+ symbol: string;
476
+ name: string | null;
477
+ id: string;
478
+ icon: string;
479
+ chainId: number;
480
+ address: string;
481
+ decimals: number;
482
+ verified: boolean;
483
+ isTest: boolean;
484
+ } & {
485
+ price?: number | null | undefined;
486
+ };
487
+ distributionChain: {
488
+ name: string;
489
+ id: number;
490
+ icon: string;
491
+ } | undefined;
492
+ campaignStatus: {
493
+ error: string;
494
+ details: import("database/api/.generated/runtime/library").JsonValue;
495
+ status: import("../../../../database/api/.generated").$Enums.RunStatus;
496
+ campaignId: string;
497
+ computedUntil: bigint;
498
+ processingStarted: bigint;
499
+ };
500
+ type: import("../../../../database/api/.generated").$Enums.CampaignType;
501
+ id: string;
502
+ subType: number | null;
503
+ startTimestamp: bigint;
504
+ endTimestamp: bigint;
505
+ computeChainId: number;
506
+ distributionChainId: number;
507
+ campaignId: string;
508
+ rewardTokenId: string;
509
+ amount: string;
510
+ opportunityId: string;
511
+ creatorAddress: string;
512
+ }[];
513
+ })[];
514
+ readonly 404: {
515
+ message: string;
516
+ name: string;
517
+ };
518
+ readonly 500: {
519
+ code: string;
520
+ info: string;
521
+ httpCode: number;
522
+ };
523
+ };
524
+ };
525
+ };
526
+ };
357
527
  } & {
358
528
  opportunities: {
359
529
  ":id": {
@@ -2,6 +2,7 @@ import { HttpErrorDto, NotFoundError, NotFoundErrorDto } from "../../../errors";
2
2
  import { BackOfficeGuard } from "../../../guards/BackOffice.guard";
3
3
  import { AuthorizationHeadersDto, TokenAuthGuard } from "../../../guards/TokenAuth.guard";
4
4
  import Elysia, { t } from "elysia";
5
+ import { GetCampaignQueryDto } from "../campaign";
5
6
  import { CreateOpportunityDto, GetOpportunitiesQueryDto, GetOpportunityQueryDto, OpportunityAggregateFieldDto, OpportunityIdDto, OpportunityResourceDto, OpportunityUniqueDto, OpportunityWithCampaignsResourceDto, UpdateOpportunityDto, } from "./opportunity.model";
6
7
  import { OpportunityService } from "./opportunity.service";
7
8
  import { transformId } from "./transform-id.pipe";
@@ -86,6 +87,19 @@ export const OpportunityController = new Elysia({
86
87
  500: HttpErrorDto,
87
88
  },
88
89
  detail: { description: "Get a unique opportunity." },
90
+ })
91
+ .get("/campaigns", async ({ query }) => {
92
+ return await OpportunityService.getManyByCampaigns(query);
93
+ }, {
94
+ query: GetCampaignQueryDto,
95
+ response: {
96
+ 200: t.Array(OpportunityWithCampaignsResourceDto),
97
+ 404: NotFoundErrorDto,
98
+ 500: HttpErrorDto,
99
+ },
100
+ detail: {
101
+ description: "Get many opportunities, including related [campaigns](#tag/campaigns/).",
102
+ },
89
103
  })
90
104
  // ─── Get An Opportunity By Id With Related Campaigns ─────────────────
91
105
  .get("/:id/campaigns", async ({ query, params }) => {
@@ -335,7 +335,6 @@ export declare const CreateOpportunityDto: import("@sinclair/typebox").TObject<{
335
335
  DROP: "DROP";
336
336
  LEND: "LEND";
337
337
  BORROW: "BORROW";
338
- LP: "LP";
339
338
  LONG: "LONG";
340
339
  SHORT: "SHORT";
341
340
  INVALID: "INVALID";
@@ -1,6 +1,7 @@
1
1
  import { type Prisma, Status } from "../../../../database/api/.generated";
2
2
  import type { MerklChainId } from "@sdk";
3
3
  import { type AprRecord } from "../apr";
4
+ import type { Campaign } from "../campaign";
4
5
  import { type DailyRewardsRecord } from "../reward";
5
6
  import { type TvlRecord } from "../tvl";
6
7
  import type { CreateOpportunityModel, GetOpportunitiesQueryModel, UpdateOpportunityModel } from "./opportunity.model";
@@ -465,6 +466,190 @@ export declare abstract class OpportunityRepository {
465
466
  apr: number;
466
467
  dailyRewards: number;
467
468
  }>;
469
+ /**
470
+ * Gets opportunities and campaigns for which filtered on campaigns
471
+ * @param filters
472
+ * @returns
473
+ */
474
+ static findManyByCampaigns(where: Campaign["action"]["findMany"]["args"]["where"]): Promise<({
475
+ Chain: {
476
+ Explorer: {
477
+ type: import("../../../../database/api/.generated").$Enums.ExplorerType;
478
+ url: string;
479
+ id: string;
480
+ chainId: number;
481
+ }[];
482
+ } & {
483
+ name: string;
484
+ id: number;
485
+ icon: string;
486
+ };
487
+ Campaigns: ({
488
+ ComputeChain: {
489
+ name: string;
490
+ id: number;
491
+ icon: string;
492
+ };
493
+ DistributionChain: {
494
+ Explorer: {
495
+ type: import("../../../../database/api/.generated").$Enums.ExplorerType;
496
+ url: string;
497
+ id: string;
498
+ chainId: number;
499
+ }[];
500
+ } & {
501
+ name: string;
502
+ id: number;
503
+ icon: string;
504
+ };
505
+ RewardToken: {
506
+ symbol: string;
507
+ name: string | null;
508
+ id: string;
509
+ icon: string;
510
+ chainId: number;
511
+ address: string;
512
+ decimals: number;
513
+ displaySymbol: string;
514
+ verified: boolean;
515
+ isTest: boolean;
516
+ price: number | null;
517
+ };
518
+ CampaignStatus: {
519
+ error: string;
520
+ details: Prisma.JsonValue;
521
+ status: import("../../../../database/api/.generated").$Enums.RunStatus;
522
+ campaignId: string;
523
+ computedUntil: bigint;
524
+ processingStarted: bigint;
525
+ }[];
526
+ } & {
527
+ type: import("../../../../database/api/.generated").$Enums.CampaignType;
528
+ id: string;
529
+ params: Prisma.JsonValue;
530
+ subType: number | null;
531
+ startTimestamp: bigint;
532
+ endTimestamp: bigint;
533
+ computeChainId: number;
534
+ distributionChainId: number;
535
+ campaignId: string;
536
+ rewardTokenId: string;
537
+ amount: string;
538
+ opportunityId: string;
539
+ creatorAddress: string;
540
+ })[];
541
+ Tokens: {
542
+ symbol: string;
543
+ name: string | null;
544
+ id: string;
545
+ icon: string;
546
+ chainId: number;
547
+ address: string;
548
+ decimals: number;
549
+ displaySymbol: string;
550
+ verified: boolean;
551
+ isTest: boolean;
552
+ price: number | null;
553
+ }[];
554
+ Protocols: {
555
+ name: string;
556
+ url: string;
557
+ description: string;
558
+ id: string;
559
+ tags: string[];
560
+ icon: string;
561
+ }[];
562
+ MainProtocol: {
563
+ name: string;
564
+ url: string;
565
+ description: string;
566
+ id: string;
567
+ tags: string[];
568
+ icon: string;
569
+ } | null;
570
+ TvlRecords: ({
571
+ TvlBreakdown: {
572
+ type: import("../../../../database/api/.generated").$Enums.TvlType;
573
+ id: number;
574
+ identifier: string;
575
+ value: number;
576
+ tvlRecordId: string;
577
+ }[];
578
+ } & {
579
+ total: number;
580
+ id: string;
581
+ timestamp: bigint;
582
+ opportunityId: string;
583
+ })[];
584
+ AprRecords: ({
585
+ AprBreakdown: {
586
+ type: import("../../../../database/api/.generated").$Enums.AprType;
587
+ id: number;
588
+ identifier: string;
589
+ value: number;
590
+ aprRecordId: string;
591
+ }[];
592
+ } & {
593
+ id: string;
594
+ timestamp: bigint;
595
+ opportunityId: string;
596
+ cumulated: number;
597
+ })[];
598
+ DailyRewardsRecords: ({
599
+ DailyRewardsBreakdown: ({
600
+ Campaign: {
601
+ startTimestamp: bigint;
602
+ endTimestamp: bigint;
603
+ amount: string;
604
+ RewardToken: {
605
+ symbol: string;
606
+ name: string | null;
607
+ id: string;
608
+ icon: string;
609
+ chainId: number;
610
+ address: string;
611
+ decimals: number;
612
+ displaySymbol: string;
613
+ verified: boolean;
614
+ isTest: boolean;
615
+ price: number | null;
616
+ };
617
+ CampaignStatus: {
618
+ error: string;
619
+ details: Prisma.JsonValue;
620
+ status: import("../../../../database/api/.generated").$Enums.RunStatus;
621
+ campaignId: string;
622
+ computedUntil: bigint;
623
+ processingStarted: bigint;
624
+ }[];
625
+ };
626
+ } & {
627
+ id: number;
628
+ value: number;
629
+ campaignId: string;
630
+ dailyRewardsRecordId: string;
631
+ })[];
632
+ } & {
633
+ total: number;
634
+ id: string;
635
+ timestamp: bigint;
636
+ opportunityId: string;
637
+ })[];
638
+ } & {
639
+ name: string;
640
+ type: import("../../../../database/api/.generated").$Enums.CampaignType;
641
+ id: string;
642
+ status: import("../../../../database/api/.generated").$Enums.Status;
643
+ tags: string[];
644
+ identifier: string;
645
+ chainId: number;
646
+ action: import("../../../../database/api/.generated").$Enums.OpportunityAction;
647
+ depositUrl: string | null;
648
+ mainProtocolId: string | null;
649
+ tvl: number;
650
+ apr: number;
651
+ dailyRewards: number;
652
+ })[]>;
468
653
  static findManyWithCampaigns(filters: Prisma.OpportunityFindManyArgs): Promise<({
469
654
  Campaigns: ({
470
655
  RewardToken: {
@@ -178,6 +178,47 @@ export class OpportunityRepository {
178
178
  });
179
179
  return b;
180
180
  }
181
+ /**
182
+ * Gets opportunities and campaigns for which filtered on campaigns
183
+ * @param filters
184
+ * @returns
185
+ */
186
+ static async findManyByCampaigns(where) {
187
+ return await apiDbClient.opportunity.findMany({
188
+ where: {
189
+ Campaigns: {
190
+ some: where,
191
+ },
192
+ },
193
+ include: {
194
+ ...OpportunityRepository.#getRecordInclusion(),
195
+ Chain: {
196
+ include: {
197
+ Explorer: true,
198
+ },
199
+ },
200
+ MainProtocol: true,
201
+ Protocols: true,
202
+ Tokens: true,
203
+ Campaigns: {
204
+ where,
205
+ include: {
206
+ RewardToken: true,
207
+ ComputeChain: true,
208
+ DistributionChain: {
209
+ include: {
210
+ Explorer: true,
211
+ },
212
+ },
213
+ CampaignStatus: true, // [][0]
214
+ },
215
+ orderBy: {
216
+ endTimestamp: "desc",
217
+ },
218
+ },
219
+ },
220
+ });
221
+ }
181
222
  static async findManyWithCampaigns(filters) {
182
223
  return await apiDbClient.opportunity.findMany({
183
224
  ...filters,
@@ -1,4 +1,4 @@
1
- import { type CreateCampaignModel } from "../campaign";
1
+ import { type CreateCampaignModel, type GetCampaignQueryModel } from "../campaign";
2
2
  import { Prisma } from "../../../../database/api/.generated";
3
3
  import type { ChainId, MerklChainId } from "@sdk";
4
4
  import type { CreateOpportunityModel, GetOpportunitiesQueryModel, LightOpportunityFromDB, OpportunityResourceModel, OpportunityUnique, OpportunityWithCampaignsResourceModel, UpdateOpportunityModel } from "./opportunity.model";
@@ -26,6 +26,18 @@ export declare abstract class OpportunityService {
26
26
  apr: number;
27
27
  dailyRewards: number;
28
28
  } | null>;
29
+ static fakeCreateFromCampaign(campaign: Omit<CreateCampaignModel, "id">): Promise<{
30
+ id: string;
31
+ chainId: number;
32
+ type: import("../../../../database/api/.generated").$Enums.CampaignType;
33
+ identifier: string;
34
+ name: string;
35
+ status: "SOON";
36
+ action: import("../../../../database/api/.generated").$Enums.OpportunityAction;
37
+ mainProtocol: "morpho" | "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" | "cross_curve" | "curveNPool" | "aura" | "akron" | "beefy" | "dragonswap" | "poolside" | "syncswap-v3" | "neptune" | "zkSwapThreePool" | "syncswap" | "rfx" | "radiant" | "aave" | "euler" | "gearbox" | "compound" | "sturdy" | "frax" | "ionic" | "moonwell" | "fluid" | "silo" | "coumpound" | "dolomite" | "badger" | "ajna" | "layerbank" | "ion" | "venus" | "woofi" | "reactor_fusion" | "eigenlayer" | "vest" | "zerolend" | "hyperdrive" | undefined;
38
+ depositUrl: any;
39
+ tags: string[];
40
+ }>;
29
41
  static createFromCampaign(campaign: Omit<CreateCampaignModel, "id">, upsert?: boolean): Promise<{
30
42
  id: string;
31
43
  chainId: number;
@@ -80,6 +92,144 @@ export declare abstract class OpportunityService {
80
92
  tags: string[];
81
93
  }>;
82
94
  static updateMetadata(chain: ChainId): Promise<void>;
95
+ /**
96
+ * Finds opportunities based on filters of its campaigns
97
+ * @notice campaigns are filtered as well
98
+ * @param where
99
+ * @returns opportunities
100
+ */
101
+ static getManyByCampaigns(where: GetCampaignQueryModel): Promise<({
102
+ protocol?: {
103
+ name: string;
104
+ url: string;
105
+ description: string;
106
+ id: string;
107
+ tags: string[];
108
+ icon: string;
109
+ } | null | undefined;
110
+ depositUrl?: string | undefined;
111
+ aprRecord?: {
112
+ timestamp: string | bigint;
113
+ cumulated: number;
114
+ breakdowns: {
115
+ type: "CAMPAIGN" | "TOKEN" | "PROTOCOL";
116
+ id: number;
117
+ identifier: string;
118
+ value: number;
119
+ aprRecordId: string;
120
+ }[];
121
+ } | undefined;
122
+ tvlRecord?: {
123
+ total: number;
124
+ timestamp: string | bigint;
125
+ breakdowns: {
126
+ type: "TOKEN" | "PROTOCOL";
127
+ id: number;
128
+ identifier: string;
129
+ value: number;
130
+ tvlRecordId: string;
131
+ }[];
132
+ } | undefined;
133
+ rewardsRecord?: {
134
+ total: number;
135
+ id: string;
136
+ timestamp: string | bigint;
137
+ breakdowns: {
138
+ token: {
139
+ price?: number | null | undefined;
140
+ symbol: string;
141
+ name: string | null;
142
+ id: string;
143
+ icon: string;
144
+ chainId: number;
145
+ address: string;
146
+ decimals: number;
147
+ verified: boolean;
148
+ isTest: boolean;
149
+ };
150
+ id: number;
151
+ value: number;
152
+ campaignId: string;
153
+ amount: string | bigint;
154
+ dailyRewardsRecordId: string;
155
+ }[];
156
+ } | undefined;
157
+ name: string;
158
+ type: string;
159
+ tokens: {
160
+ price?: number | null | undefined;
161
+ symbol: string;
162
+ name: string | null;
163
+ id: string;
164
+ icon: string;
165
+ chainId: number;
166
+ address: string;
167
+ decimals: number;
168
+ verified: boolean;
169
+ isTest: boolean;
170
+ }[];
171
+ id: string;
172
+ status: string;
173
+ tags: string[];
174
+ identifier: string;
175
+ chain: {
176
+ name: string;
177
+ id: number;
178
+ icon: string;
179
+ };
180
+ chainId: number;
181
+ action: string;
182
+ tvl: number;
183
+ apr: number;
184
+ dailyRewards: number;
185
+ } & {
186
+ campaigns: {
187
+ params: any;
188
+ chain: {
189
+ name: string;
190
+ id: number;
191
+ icon: string;
192
+ };
193
+ rewardToken: {
194
+ symbol: string;
195
+ name: string | null;
196
+ id: string;
197
+ icon: string;
198
+ chainId: number;
199
+ address: string;
200
+ decimals: number;
201
+ verified: boolean;
202
+ isTest: boolean;
203
+ } & {
204
+ price?: number | null | undefined;
205
+ };
206
+ distributionChain: {
207
+ name: string;
208
+ id: number;
209
+ icon: string;
210
+ } | undefined;
211
+ campaignStatus: {
212
+ error: string;
213
+ details: Prisma.JsonValue;
214
+ status: import("../../../../database/api/.generated").$Enums.RunStatus;
215
+ campaignId: string;
216
+ computedUntil: bigint;
217
+ processingStarted: bigint;
218
+ };
219
+ type: import("../../../../database/api/.generated").$Enums.CampaignType;
220
+ id: string;
221
+ subType: number | null;
222
+ startTimestamp: bigint;
223
+ endTimestamp: bigint;
224
+ computeChainId: number;
225
+ distributionChainId: number;
226
+ campaignId: string;
227
+ rewardTokenId: string;
228
+ amount: string;
229
+ opportunityId: string;
230
+ creatorAddress: string;
231
+ }[];
232
+ })[]>;
83
233
  static getUniqueWithCampaignsOrThrow(opportunityId: string | OpportunityUnique, withTest?: boolean): Promise<OpportunityWithCampaignsResourceModel>;
84
234
  static getUniqueOrThrow(opportunityId: string | OpportunityUnique, withTest?: boolean): Promise<OpportunityResourceModel>;
85
235
  /**