@merkl/api 0.10.317 → 0.10.319

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.
@@ -608,7 +608,64 @@ declare const eden: {
608
608
  sum: string;
609
609
  };
610
610
  }>>;
611
- }) & {};
611
+ }) & {
612
+ max: ((params: {
613
+ field: string | number;
614
+ }) => {
615
+ get: (options: {
616
+ headers?: Record<string, unknown> | undefined;
617
+ query: {
618
+ sort?: string | undefined;
619
+ name?: string | undefined;
620
+ tokens?: string | undefined;
621
+ status?: string | undefined;
622
+ items?: number | undefined;
623
+ tags?: string | undefined;
624
+ page?: number | undefined;
625
+ chainId?: string | undefined;
626
+ action?: string | undefined;
627
+ creatorAddress?: string | undefined;
628
+ mainProtocolId?: string | undefined;
629
+ order?: string | undefined;
630
+ test?: boolean | undefined;
631
+ minimumTvl?: number | undefined;
632
+ };
633
+ fetch?: RequestInit | undefined;
634
+ }) => Promise<import("@elysiajs/eden").Treaty.TreatyResponse<{
635
+ 200: {
636
+ max: string;
637
+ };
638
+ }>>;
639
+ }) & {};
640
+ min: ((params: {
641
+ field: string | number;
642
+ }) => {
643
+ get: (options: {
644
+ headers?: Record<string, unknown> | undefined;
645
+ query: {
646
+ sort?: string | undefined;
647
+ name?: string | undefined;
648
+ tokens?: string | undefined;
649
+ status?: string | undefined;
650
+ items?: number | undefined;
651
+ tags?: string | undefined;
652
+ page?: number | undefined;
653
+ chainId?: string | undefined;
654
+ action?: string | undefined;
655
+ creatorAddress?: string | undefined;
656
+ mainProtocolId?: string | undefined;
657
+ order?: string | undefined;
658
+ test?: boolean | undefined;
659
+ minimumTvl?: number | undefined;
660
+ };
661
+ fetch?: RequestInit | undefined;
662
+ }) => Promise<import("@elysiajs/eden").Treaty.TreatyResponse<{
663
+ 200: {
664
+ min: string;
665
+ };
666
+ }>>;
667
+ }) & {};
668
+ };
612
669
  };
613
670
  campaigns: {
614
671
  engine: {
@@ -2294,6 +2351,19 @@ declare const eden: {
2294
2351
  200: any;
2295
2352
  }>>;
2296
2353
  };
2354
+ "template-config": ((params: {
2355
+ campaignType: string | number;
2356
+ }) => {
2357
+ get: (options?: {
2358
+ headers?: Record<string, unknown> | undefined;
2359
+ query?: Record<string, unknown> | undefined;
2360
+ fetch?: RequestInit | undefined;
2361
+ } | undefined) => Promise<import("@elysiajs/eden").Treaty.TreatyResponse<{
2362
+ 200: {
2363
+ [x: string]: string;
2364
+ };
2365
+ }>>;
2366
+ }) & {};
2297
2367
  campaignData: {
2298
2368
  get: (options: {
2299
2369
  headers?: Record<string, unknown> | undefined;
@@ -3699,6 +3769,80 @@ export declare const MerklApi: (domain: string | import("elysia").default<"", fa
3699
3769
  };
3700
3770
  };
3701
3771
  };
3772
+ } & {
3773
+ opportunities: {
3774
+ aggregate: {
3775
+ max: {
3776
+ ":field": {
3777
+ get: {
3778
+ body: unknown;
3779
+ params: {
3780
+ field: never;
3781
+ };
3782
+ query: {
3783
+ sort?: string | undefined;
3784
+ name?: string | undefined;
3785
+ tokens?: string | undefined;
3786
+ status?: string | undefined;
3787
+ items?: number | undefined;
3788
+ tags?: string | undefined;
3789
+ page?: number | undefined;
3790
+ chainId?: string | undefined;
3791
+ action?: string | undefined;
3792
+ creatorAddress?: string | undefined;
3793
+ mainProtocolId?: string | undefined;
3794
+ order?: string | undefined;
3795
+ test?: boolean | undefined;
3796
+ minimumTvl?: number | undefined;
3797
+ };
3798
+ headers: unknown;
3799
+ response: {
3800
+ 200: {
3801
+ max: string;
3802
+ };
3803
+ };
3804
+ };
3805
+ };
3806
+ };
3807
+ };
3808
+ };
3809
+ } & {
3810
+ opportunities: {
3811
+ aggregate: {
3812
+ min: {
3813
+ ":field": {
3814
+ get: {
3815
+ body: unknown;
3816
+ params: {
3817
+ field: never;
3818
+ };
3819
+ query: {
3820
+ sort?: string | undefined;
3821
+ name?: string | undefined;
3822
+ tokens?: string | undefined;
3823
+ status?: string | undefined;
3824
+ items?: number | undefined;
3825
+ tags?: string | undefined;
3826
+ page?: number | undefined;
3827
+ chainId?: string | undefined;
3828
+ action?: string | undefined;
3829
+ creatorAddress?: string | undefined;
3830
+ mainProtocolId?: string | undefined;
3831
+ order?: string | undefined;
3832
+ test?: boolean | undefined;
3833
+ minimumTvl?: number | undefined;
3834
+ };
3835
+ headers: unknown;
3836
+ response: {
3837
+ 200: {
3838
+ min: string;
3839
+ };
3840
+ };
3841
+ };
3842
+ };
3843
+ };
3844
+ };
3845
+ };
3702
3846
  } & {
3703
3847
  opportunities: {
3704
3848
  ":id": {
@@ -5866,6 +6010,26 @@ export declare const MerklApi: (domain: string | import("elysia").default<"", fa
5866
6010
  };
5867
6011
  };
5868
6012
  };
6013
+ } & {
6014
+ "program-payload": {
6015
+ "template-config": {
6016
+ ":campaignType": {
6017
+ get: {
6018
+ body: unknown;
6019
+ params: {
6020
+ campaignType: number;
6021
+ };
6022
+ query: unknown;
6023
+ headers: unknown;
6024
+ response: {
6025
+ 200: {
6026
+ [x: string]: string;
6027
+ };
6028
+ };
6029
+ };
6030
+ };
6031
+ };
6032
+ };
5869
6033
  } & {
5870
6034
  "program-payload": {
5871
6035
  campaignData: {
@@ -7403,7 +7567,64 @@ export declare const MerklApi: (domain: string | import("elysia").default<"", fa
7403
7567
  sum: string;
7404
7568
  };
7405
7569
  }>>;
7406
- }) & {};
7570
+ }) & {
7571
+ max: ((params: {
7572
+ field: string | number;
7573
+ }) => {
7574
+ get: (options: {
7575
+ headers?: Record<string, unknown> | undefined;
7576
+ query: {
7577
+ sort?: string | undefined;
7578
+ name?: string | undefined;
7579
+ tokens?: string | undefined;
7580
+ status?: string | undefined;
7581
+ items?: number | undefined;
7582
+ tags?: string | undefined;
7583
+ page?: number | undefined;
7584
+ chainId?: string | undefined;
7585
+ action?: string | undefined;
7586
+ creatorAddress?: string | undefined;
7587
+ mainProtocolId?: string | undefined;
7588
+ order?: string | undefined;
7589
+ test?: boolean | undefined;
7590
+ minimumTvl?: number | undefined;
7591
+ };
7592
+ fetch?: RequestInit | undefined;
7593
+ }) => Promise<import("@elysiajs/eden").Treaty.TreatyResponse<{
7594
+ 200: {
7595
+ max: string;
7596
+ };
7597
+ }>>;
7598
+ }) & {};
7599
+ min: ((params: {
7600
+ field: string | number;
7601
+ }) => {
7602
+ get: (options: {
7603
+ headers?: Record<string, unknown> | undefined;
7604
+ query: {
7605
+ sort?: string | undefined;
7606
+ name?: string | undefined;
7607
+ tokens?: string | undefined;
7608
+ status?: string | undefined;
7609
+ items?: number | undefined;
7610
+ tags?: string | undefined;
7611
+ page?: number | undefined;
7612
+ chainId?: string | undefined;
7613
+ action?: string | undefined;
7614
+ creatorAddress?: string | undefined;
7615
+ mainProtocolId?: string | undefined;
7616
+ order?: string | undefined;
7617
+ test?: boolean | undefined;
7618
+ minimumTvl?: number | undefined;
7619
+ };
7620
+ fetch?: RequestInit | undefined;
7621
+ }) => Promise<import("@elysiajs/eden").Treaty.TreatyResponse<{
7622
+ 200: {
7623
+ min: string;
7624
+ };
7625
+ }>>;
7626
+ }) & {};
7627
+ };
7407
7628
  };
7408
7629
  campaigns: {
7409
7630
  engine: {
@@ -9089,6 +9310,19 @@ export declare const MerklApi: (domain: string | import("elysia").default<"", fa
9089
9310
  200: any;
9090
9311
  }>>;
9091
9312
  };
9313
+ "template-config": ((params: {
9314
+ campaignType: string | number;
9315
+ }) => {
9316
+ get: (options?: {
9317
+ headers?: Record<string, unknown> | undefined;
9318
+ query?: Record<string, unknown> | undefined;
9319
+ fetch?: RequestInit | undefined;
9320
+ } | undefined) => Promise<import("@elysiajs/eden").Treaty.TreatyResponse<{
9321
+ 200: {
9322
+ [x: string]: string;
9323
+ };
9324
+ }>>;
9325
+ }) & {};
9092
9326
  campaignData: {
9093
9327
  get: (options: {
9094
9328
  headers?: Record<string, unknown> | undefined;
@@ -678,6 +678,80 @@ declare const app: Elysia<"", false, {
678
678
  };
679
679
  };
680
680
  };
681
+ } & {
682
+ opportunities: {
683
+ aggregate: {
684
+ max: {
685
+ ":field": {
686
+ get: {
687
+ body: unknown;
688
+ params: {
689
+ field: never;
690
+ };
691
+ query: {
692
+ sort?: string | undefined;
693
+ name?: string | undefined;
694
+ tokens?: string | undefined;
695
+ status?: string | undefined;
696
+ items?: number | undefined;
697
+ tags?: string | undefined;
698
+ page?: number | undefined;
699
+ chainId?: string | undefined;
700
+ action?: string | undefined;
701
+ creatorAddress?: string | undefined;
702
+ mainProtocolId?: string | undefined;
703
+ order?: string | undefined;
704
+ test?: boolean | undefined;
705
+ minimumTvl?: number | undefined;
706
+ };
707
+ headers: unknown;
708
+ response: {
709
+ 200: {
710
+ max: string;
711
+ };
712
+ };
713
+ };
714
+ };
715
+ };
716
+ };
717
+ };
718
+ } & {
719
+ opportunities: {
720
+ aggregate: {
721
+ min: {
722
+ ":field": {
723
+ get: {
724
+ body: unknown;
725
+ params: {
726
+ field: never;
727
+ };
728
+ query: {
729
+ sort?: string | undefined;
730
+ name?: string | undefined;
731
+ tokens?: string | undefined;
732
+ status?: string | undefined;
733
+ items?: number | undefined;
734
+ tags?: string | undefined;
735
+ page?: number | undefined;
736
+ chainId?: string | undefined;
737
+ action?: string | undefined;
738
+ creatorAddress?: string | undefined;
739
+ mainProtocolId?: string | undefined;
740
+ order?: string | undefined;
741
+ test?: boolean | undefined;
742
+ minimumTvl?: number | undefined;
743
+ };
744
+ headers: unknown;
745
+ response: {
746
+ 200: {
747
+ min: string;
748
+ };
749
+ };
750
+ };
751
+ };
752
+ };
753
+ };
754
+ };
681
755
  } & {
682
756
  opportunities: {
683
757
  ":id": {
@@ -2845,6 +2919,26 @@ declare const app: Elysia<"", false, {
2845
2919
  };
2846
2920
  };
2847
2921
  };
2922
+ } & {
2923
+ "program-payload": {
2924
+ "template-config": {
2925
+ ":campaignType": {
2926
+ get: {
2927
+ body: unknown;
2928
+ params: {
2929
+ campaignType: number;
2930
+ };
2931
+ query: unknown;
2932
+ headers: unknown;
2933
+ response: {
2934
+ 200: {
2935
+ [x: string]: string;
2936
+ };
2937
+ };
2938
+ };
2939
+ };
2940
+ };
2941
+ };
2848
2942
  } & {
2849
2943
  "program-payload": {
2850
2944
  campaignData: {
@@ -547,6 +547,80 @@ export declare const OpportunityController: Elysia<"/opportunities", false, {
547
547
  };
548
548
  };
549
549
  };
550
+ } & {
551
+ opportunities: {
552
+ aggregate: {
553
+ max: {
554
+ ":field": {
555
+ get: {
556
+ body: unknown;
557
+ params: {
558
+ field: never;
559
+ };
560
+ query: {
561
+ sort?: string | undefined;
562
+ name?: string | undefined;
563
+ tokens?: string | undefined;
564
+ status?: string | undefined;
565
+ items?: number | undefined;
566
+ tags?: string | undefined;
567
+ page?: number | undefined;
568
+ chainId?: string | undefined;
569
+ action?: string | undefined;
570
+ creatorAddress?: string | undefined;
571
+ mainProtocolId?: string | undefined;
572
+ order?: string | undefined;
573
+ test?: boolean | undefined;
574
+ minimumTvl?: number | undefined;
575
+ };
576
+ headers: unknown;
577
+ response: {
578
+ 200: {
579
+ max: string;
580
+ };
581
+ };
582
+ };
583
+ };
584
+ };
585
+ };
586
+ };
587
+ } & {
588
+ opportunities: {
589
+ aggregate: {
590
+ min: {
591
+ ":field": {
592
+ get: {
593
+ body: unknown;
594
+ params: {
595
+ field: never;
596
+ };
597
+ query: {
598
+ sort?: string | undefined;
599
+ name?: string | undefined;
600
+ tokens?: string | undefined;
601
+ status?: string | undefined;
602
+ items?: number | undefined;
603
+ tags?: string | undefined;
604
+ page?: number | undefined;
605
+ chainId?: string | undefined;
606
+ action?: string | undefined;
607
+ creatorAddress?: string | undefined;
608
+ mainProtocolId?: string | undefined;
609
+ order?: string | undefined;
610
+ test?: boolean | undefined;
611
+ minimumTvl?: number | undefined;
612
+ };
613
+ headers: unknown;
614
+ response: {
615
+ 200: {
616
+ min: string;
617
+ };
618
+ };
619
+ };
620
+ };
621
+ };
622
+ };
623
+ };
550
624
  } & {
551
625
  opportunities: {
552
626
  ":id": {
@@ -131,6 +131,16 @@ export const OpportunityController = new Elysia({
131
131
  .get("/aggregate/:field", async ({ query, params }) => await OpportunityService.aggregate(query, params.field), {
132
132
  params: OpportunityAggregateFieldDto,
133
133
  query: GetOpportunitiesQueryDto,
134
+ })
135
+ // ─── Get Aggregate Fields ────────────────────────────────────────────
136
+ .get("/aggregate/max/:field", async ({ query, params }) => await OpportunityService.aggregateMax(query, params.field), {
137
+ params: OpportunityAggregateFieldDto,
138
+ query: GetOpportunitiesQueryDto,
139
+ })
140
+ // ─── Get Aggregate Fields ────────────────────────────────────────────
141
+ .get("/aggregate/min/:field", async ({ query, params }) => await OpportunityService.aggregateMin(query, params.field), {
142
+ params: OpportunityAggregateFieldDto,
143
+ query: GetOpportunitiesQueryDto,
134
144
  })
135
145
  // ─── Update An Opportunity ───────────────────────────────────────────
136
146
  .patch("/:id", async ({ params, body }) => await OpportunityService.update(params.id, body), {
@@ -344,7 +344,7 @@ export declare const CreateOpportunityDto: import("@sinclair/typebox").TObject<{
344
344
  tags: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TArray<import("@sinclair/typebox").TString>>;
345
345
  }>;
346
346
  export declare const OpportunityAggregateFieldDto: import("@sinclair/typebox").TObject<{
347
- field: import("@sinclair/typebox").TUnion<import("@sinclair/typebox").TLiteral<"dailyRewards">[]>;
347
+ field: import("@sinclair/typebox").TUnion<import("@sinclair/typebox").TLiteral<"tvl" | "apr" | "dailyRewards">[]>;
348
348
  }>;
349
349
  export declare const OpportunityIdDto: import("@sinclair/typebox").TObject<{
350
350
  id: import("@sinclair/typebox").TString;
@@ -87,7 +87,7 @@ export const CreateOpportunityDto = t.Object({
87
87
  tags: t.Optional(t.Array(t.String())),
88
88
  });
89
89
  export const OpportunityAggregateFieldDto = t.Object({
90
- field: t.Union(["dailyRewards"].map(v => t.Literal(v))),
90
+ field: t.Union(["dailyRewards", "tvl", "apr"].map(v => t.Literal(v))),
91
91
  });
92
92
  export const OpportunityIdDto = t.Object({ id: t.String() });
93
93
  export const UpdateOpportunityDto = t.Object({
@@ -902,6 +902,12 @@ export declare abstract class OpportunityRepository {
902
902
  static aggregateSum(field: keyof Prisma.OpportunitySumAggregateInputType, query: GetOpportunitiesQueryModel): Promise<{
903
903
  sum: string;
904
904
  }>;
905
+ static aggregateMin(field: keyof Prisma.OpportunityMinAggregateInputType, query: GetOpportunitiesQueryModel): Promise<{
906
+ min: string;
907
+ }>;
908
+ static aggregateMax(field: keyof Prisma.OpportunityMaxAggregateInputType, query: GetOpportunitiesQueryModel): Promise<{
909
+ max: string;
910
+ }>;
905
911
  static update(id: string, data: UpdateOpportunityModel): Promise<{
906
912
  name: string;
907
913
  type: import("../../../../database/api/.generated").$Enums.CampaignType;
@@ -382,6 +382,26 @@ export class OpportunityRepository {
382
382
  });
383
383
  return { sum: result._sum[field] ?? null };
384
384
  }
385
+ static async aggregateMin(field, query) {
386
+ const args = OpportunityRepository.#transformQueryToPrismaFilters(query);
387
+ const result = await apiDbClient.opportunity.aggregate({
388
+ _min: {
389
+ [field]: true,
390
+ },
391
+ ...args,
392
+ });
393
+ return { min: result._min[field] ?? null };
394
+ }
395
+ static async aggregateMax(field, query) {
396
+ const args = OpportunityRepository.#transformQueryToPrismaFilters(query);
397
+ const result = await apiDbClient.opportunity.aggregate({
398
+ _max: {
399
+ [field]: true,
400
+ },
401
+ ...args,
402
+ });
403
+ return { max: result._max[field] ?? null };
404
+ }
385
405
  static async update(id, data) {
386
406
  return await apiDbClient.opportunity.update({ where: { id }, data });
387
407
  }
@@ -451,6 +451,12 @@ export declare abstract class OpportunityService {
451
451
  static aggregate(query: GetOpportunitiesQueryModel, field: keyof Prisma.OpportunitySumAggregateInputType): Promise<{
452
452
  sum: string;
453
453
  }>;
454
+ static aggregateMin(query: GetOpportunitiesQueryModel, field: keyof Prisma.OpportunityMinAggregateInputType): Promise<{
455
+ min: string;
456
+ }>;
457
+ static aggregateMax(query: GetOpportunitiesQueryModel, field: keyof Prisma.OpportunityMaxAggregateInputType): Promise<{
458
+ max: string;
459
+ }>;
454
460
  static update(id: string, data: UpdateOpportunityModel): Promise<{
455
461
  name: string;
456
462
  type: import("../../../../database/api/.generated").$Enums.CampaignType;
@@ -266,6 +266,12 @@ export class OpportunityService {
266
266
  static aggregate(query, field) {
267
267
  return OpportunityRepository.aggregateSum(field, query);
268
268
  }
269
+ static aggregateMin(query, field) {
270
+ return OpportunityRepository.aggregateMin(field, query);
271
+ }
272
+ static aggregateMax(query, field) {
273
+ return OpportunityRepository.aggregateMax(field, query);
274
+ }
269
275
  static async update(id, data) {
270
276
  return await OpportunityRepository.update(id, data);
271
277
  }
@@ -67,6 +67,26 @@ export declare const ProgramPayloadController: Elysia<"/program-payload", false,
67
67
  };
68
68
  };
69
69
  };
70
+ } & {
71
+ "program-payload": {
72
+ "template-config": {
73
+ ":campaignType": {
74
+ get: {
75
+ body: unknown;
76
+ params: {
77
+ campaignType: number;
78
+ };
79
+ query: unknown;
80
+ headers: unknown;
81
+ response: {
82
+ 200: {
83
+ [x: string]: string;
84
+ };
85
+ };
86
+ };
87
+ };
88
+ };
89
+ };
70
90
  } & {
71
91
  "program-payload": {
72
92
  campaignData: {
@@ -1,5 +1,5 @@
1
1
  // import { AuthorizationHeadersDto, BackOfficeGuard } from "../../../guards/BackOffice.guard";
2
- import Elysia from "elysia";
2
+ import Elysia, { t } from "elysia";
3
3
  import { throwOnUnsupportedChainId } from "src/utils/throw";
4
4
  import { CampaignAmountsInputDto, CampaignPayloadInputDto, ProgramPayloadInputDto, SinglePayloadInputDto, } from "./programPayload.model";
5
5
  import { ProgramPayloadService } from "./programPayload.service";
@@ -26,6 +26,12 @@ export const ProgramPayloadController = new Elysia({ prefix: "/program-payload",
26
26
  throwOnUnsupportedChainId(query.distributionChainId);
27
27
  },
28
28
  detail: { description: "Generate the configuration for a specific hardcoded campaign from a program" },
29
+ })
30
+ .get("/template-config/:campaignType", async ({ params }) => {
31
+ return ProgramPayloadService.buildConfigTemplate(params);
32
+ }, {
33
+ params: t.Object({ campaignType: t.Number() }),
34
+ detail: { description: "Generate the template configuration with expected types for a specific campaign" },
29
35
  })
30
36
  .get("/campaignData", async ({ query }) => {
31
37
  return ProgramPayloadService.buildCampaignData(query);
@@ -2,6 +2,11 @@ import { type Campaign, ChainId, type campaignConfig } from "@sdk";
2
2
  import type { CampaignParametersStruct } from "libs/sdk/src/generated/CampaignCreator";
3
3
  import { type CampaignAmountsInputModel, type CampaignPayloadInputModel, type ProgramPayloadInputModel, type SinglePayloadInputDtoModel, type approvalTransaction, type createCampaignTransaction, type safePayload } from "./programPayload.model";
4
4
  export declare class ProgramPayloadService {
5
+ static buildConfigTemplate(params: {
6
+ campaignType: number;
7
+ }): {
8
+ [key: string]: string;
9
+ };
5
10
  static buildConfig(query: CampaignPayloadInputModel): campaignConfig<Campaign>;
6
11
  /** building payload for a single campaign */
7
12
  static buildCampaignData(query: CampaignPayloadInputModel): {
@@ -4,6 +4,16 @@ import { safeTemplate, } from "./programPayload.model";
4
4
  import { MerklInterfaceCampaigns, zkSyncCampaignAmounts } from "./programPayload.repository";
5
5
  export class ProgramPayloadService {
6
6
  // ─── ProgramPayload ──────────────────────────────────────────────────────────
7
+ static buildConfigTemplate(params) {
8
+ class CampaignConfig extends CampaignTypeConfigResourceMapping[params.campaignType] {
9
+ }
10
+ const parsedConfig = new CampaignConfig();
11
+ const configTemplate = {};
12
+ for (const [key, value] of Object.entries(parsedConfig)) {
13
+ configTemplate[key] = typeof value;
14
+ }
15
+ return configTemplate;
16
+ }
7
17
  static buildConfig(query) {
8
18
  const campaign = query.campaign;
9
19
  const startTimestamp = query.startTimestamp;