@merkl/api 0.21.35 → 0.21.37

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 (24) hide show
  1. package/dist/src/eden/index.d.ts +1277 -878
  2. package/dist/src/engine/implementations/Erc20/subTypes/detect.js +105 -98
  3. package/dist/src/engine/implementations/Erc20/subTypes/implementations/aave/metadata.d.ts +1 -1
  4. package/dist/src/engine/implementations/JsonAirdrop/metadata.d.ts +2 -2
  5. package/dist/src/index.d.ts +399 -254
  6. package/dist/src/modules/v4/campaign/campaign.controller.d.ts +1 -1
  7. package/dist/src/modules/v4/campaign/campaign.service.d.ts +5 -1
  8. package/dist/src/modules/v4/campaign/campaign.service.js +41 -2
  9. package/dist/src/modules/v4/campaign/campaign.test.controller.d.ts +385 -240
  10. package/dist/src/modules/v4/campaign/campaign.test.controller.js +39 -13
  11. package/dist/src/modules/v4/creator/creator.controller.d.ts +8 -8
  12. package/dist/src/modules/v4/creator/creator.controller.js +9 -9
  13. package/dist/src/modules/v4/creator/creator.model.d.ts +2 -2
  14. package/dist/src/modules/v4/creator/creator.model.js +2 -2
  15. package/dist/src/modules/v4/opportunity/opportunity.controller.d.ts +2 -2
  16. package/dist/src/modules/v4/opportunity/opportunity.service.d.ts +3 -3
  17. package/dist/src/modules/v4/programPayload/programPayload.repository.d.ts +100 -0
  18. package/dist/src/modules/v4/programPayload/programPayload.repository.js +44 -0
  19. package/dist/src/modules/v4/protocol/protocol.model.d.ts +1 -1
  20. package/dist/src/modules/v4/protocol/protocol.model.js +1 -0
  21. package/dist/src/modules/v4/reward/reward.repository.js +1 -1
  22. package/dist/src/modules/v4/router.d.ts +399 -254
  23. package/dist/tsconfig.package.tsbuildinfo +1 -1
  24. package/package.json +1 -1
@@ -17,17 +17,20 @@ export const CampaignTestController = new Elysia({
17
17
  headers: AuthorizationHeadersDto,
18
18
  beforeHandle: BackOfficeGuard,
19
19
  })
20
+ .group("/tvl", app => app
20
21
  // ─── Test TVL computation given a campaignId ───────────────────────
21
- .get("/tvl/:campaignId", async ({ params }) => {
22
+ .get("/campaign/:campaignId", async ({ params }) => {
22
23
  const id = (await CampaignService.findMany({ campaignId: params.campaignId, test: true }))?.[0]?.id;
23
24
  if (!id)
24
25
  throw new NotFoundError();
25
26
  const campaign = await CampaignService.findUniqueOrThrow(id, true);
26
27
  const campaignV3 = OpportunityConvertorService.convertV4CampaignToV3(CampaignType[campaign.type], CampaignService.format(campaign), campaign.Opportunity.identifier);
27
28
  return await DynamicDataService.update(campaignV3.computeChainId, campaignV3.campaignType, [campaignV3], true);
29
+ }, {
30
+ params: t.Object({ campaignId: t.String() }),
28
31
  })
29
- // ─── Test TVL computation given a campaignId ───────────────────────
30
- .get("/tvls/:opportunityId", async ({ params }) => {
32
+ // ─── Test TVL computation given an opportunityId ───────────────────────
33
+ .get("/opportunity/:opportunityId", async ({ params }) => {
31
34
  const campaigns = (await CampaignService.findMany({
32
35
  opportunityId: params.opportunityId,
33
36
  test: true,
@@ -38,14 +41,18 @@ export const CampaignTestController = new Elysia({
38
41
  throw new NotFoundError("Opportunity not found");
39
42
  return await DynamicDataService.update(campaigns[0]?.computeChainId, campaigns[0].campaignType, campaigns, true);
40
43
  }, {
41
- beforeHandle: BackOfficeGuard,
42
- headers: AuthorizationHeadersDto,
43
- detail: { hide: true },
44
+ params: t.Object({ opportunityId: t.String() }),
45
+ })
46
+ // ─── Test TVL computation given a target token address ───────────────────────
47
+ .get("/erc20", async ({ query }) => {
48
+ const campaign = await CampaignService.createFakeERC20Campaign(query);
49
+ return await DynamicDataService.update(campaign.computeChainId, campaign.campaignType, [campaign], true);
50
+ }, {
51
+ query: t.Object({ address: t.String(), chainId: t.Numeric() }),
44
52
  })
45
53
  // ─── Test TVL computation with a list of campaignId ───────────────────────
46
- .post("/tvls/list", async ({ body }) => {
54
+ .post("/list", async ({ body }) => {
47
55
  const listCampaigns = [];
48
- const type = undefined;
49
56
  for (const campaignId of body) {
50
57
  const id = (await CampaignService.findMany({ campaignId: campaignId, test: true }))?.[0]?.id;
51
58
  if (!id)
@@ -54,17 +61,24 @@ export const CampaignTestController = new Elysia({
54
61
  const campaignV3 = OpportunityConvertorService.convertV4CampaignToV3(CampaignType[campaign.type], CampaignService.format(campaign), campaign.Opportunity.identifier);
55
62
  listCampaigns.push(campaignV3);
56
63
  }
57
- if (!type)
58
- throw new InvalidParameter("No campaign type found");
64
+ for (const campaign of listCampaigns) {
65
+ if (campaign.campaignType !== listCampaigns[0].campaignType) {
66
+ throw new InvalidParameter("All campaigns must be of the same type");
67
+ }
68
+ if (campaign.computeChainId !== listCampaigns[0].computeChainId) {
69
+ throw new InvalidParameter("All campaigns must have the same computeChainId");
70
+ }
71
+ }
59
72
  return await DynamicDataService.update(listCampaigns[0].computeChainId, listCampaigns[0].campaignType, listCampaigns, true);
60
73
  }, { body: CampaignsDto })
61
74
  // ─── Test TVL computation with campaign config ───────────────────────
62
- .post("/tvl", async ({ body }) => {
75
+ .post("/", async ({ body }) => {
63
76
  const campaign = CampaignService.createFakeCampaign(body);
64
77
  return await DynamicDataService.update(campaign.computeChainId, campaign.campaignType, [campaign], true);
65
78
  }, {
66
79
  body: CampaignConfigMinimal,
67
- })
80
+ }))
81
+ .group("/metadata", app => app
68
82
  // ─── Test Opportunity creation through a campaign config ───────────────────────
69
83
  // @dev Starts from the engine db to debug opportunity creation failing and preventing the api db to be filled
70
84
  .post("/metadata", async ({ body }) => {
@@ -98,4 +112,16 @@ export const CampaignTestController = new Elysia({
98
112
  distributionChain: t.Optional(t.Numeric()),
99
113
  campaignId: t.String(),
100
114
  }),
101
- }));
115
+ })
116
+ .get("/erc20", async ({ query }) => {
117
+ const campaign = await CampaignService.createFakeERC20Campaign(query);
118
+ const engineCampaign = CampaignService.createFakeCampaignEngine({
119
+ ...campaign,
120
+ type: CampaignType[CampaignType.ERC20],
121
+ params: campaign.campaignParameters,
122
+ distributionChainId: campaign.chainId,
123
+ });
124
+ return await CampaignService.create(engineCampaign, true);
125
+ }, {
126
+ query: t.Object({ address: t.String(), chainId: t.Numeric() }),
127
+ })));
@@ -67,11 +67,11 @@ export declare const CreatorController: Elysia<"/creators", false, {
67
67
  };
68
68
  } & {
69
69
  creators: {
70
- ":address": {
70
+ ":creatorId": {
71
71
  get: {
72
72
  body: unknown;
73
73
  params: {
74
- address: string;
74
+ creatorId: string;
75
75
  };
76
76
  query: unknown;
77
77
  headers: unknown;
@@ -93,7 +93,7 @@ export declare const CreatorController: Elysia<"/creators", false, {
93
93
  };
94
94
  } & {
95
95
  creators: {
96
- ":address": {
96
+ ":creatorId": {
97
97
  patch: {
98
98
  body: {
99
99
  icon?: string | undefined;
@@ -101,7 +101,7 @@ export declare const CreatorController: Elysia<"/creators", false, {
101
101
  addresses: string[];
102
102
  };
103
103
  params: {
104
- address: string;
104
+ creatorId: string;
105
105
  };
106
106
  query: unknown;
107
107
  headers: {
@@ -120,11 +120,11 @@ export declare const CreatorController: Elysia<"/creators", false, {
120
120
  };
121
121
  } & {
122
122
  creators: {
123
- ":address": {
123
+ ":creatorId": {
124
124
  delete: {
125
125
  body: unknown;
126
126
  params: {
127
- address: string;
127
+ creatorId: string;
128
128
  };
129
129
  query: unknown;
130
130
  headers: {
@@ -309,11 +309,11 @@ export declare const CreatorController: Elysia<"/creators", false, {
309
309
  } & {
310
310
  creators: {
311
311
  campaigns: {
312
- ":id": {
312
+ ":campaignId": {
313
313
  get: {
314
314
  body: unknown;
315
315
  params: {
316
- id: string;
316
+ campaignId: string;
317
317
  };
318
318
  query: unknown;
319
319
  headers: unknown;
@@ -1,10 +1,10 @@
1
1
  import { AuthorizationHeadersDto, BackOfficeGuard } from "@/guards/BackOffice.guard";
2
2
  import { Elysia } from "elysia";
3
- import { CampaignIdDto, CampaignQueryDto, CreateCreatorDto, CreatorAddressDto, GetManyCreatorQuery, UpdateCreatorDto, } from "./creator.model";
3
+ import { CampaignIdDto, CampaignQueryDto, CreateCreatorDto, CreatorAddressDto, CreatorIdDto, GetManyCreatorQuery, UpdateCreatorDto, } from "./creator.model";
4
4
  import { CreatorService } from "./creator.service";
5
5
  // ─── Creators Controller ─────────────────────────────────────────────────────
6
6
  export const CreatorController = new Elysia({ prefix: "/creators", detail: { tags: ["Creator"] } })
7
- // ─── Crud OPS ────────────────────────────────────────────────────────────────
7
+ // ─── CRUD OPS ────────────────────────────────────────────────────────────────
8
8
  // ─── Create A Creator ────────────────────────────────────────────────
9
9
  .post("/", async ({ body }) => await CreatorService.create(body), {
10
10
  headers: AuthorizationHeadersDto,
@@ -14,20 +14,20 @@ export const CreatorController = new Elysia({ prefix: "/creators", detail: { tag
14
14
  // ─── Get Many Creators ───────────────────────────────────────────────
15
15
  .get("/", async ({ query }) => await CreatorService.findMany(query), { query: GetManyCreatorQuery })
16
16
  // ─── Get A Unique Creator By Id ──────────────────────────────────────
17
- .get("/:address", async ({ params: { address } }) => CreatorService.findUnique(address), {
18
- params: CreatorAddressDto,
17
+ .get("/:creatorId", async ({ params: { creatorId } }) => CreatorService.findUnique(creatorId), {
18
+ params: CreatorIdDto,
19
19
  })
20
20
  // ─── Update A Creator ────────────────────────────────────────────────
21
- .patch("/:address", async ({ params: { address }, body }) => CreatorService.update(address, body), {
21
+ .patch("/:creatorId", async ({ params: { creatorId }, body }) => CreatorService.update(creatorId, body), {
22
22
  headers: AuthorizationHeadersDto,
23
23
  body: UpdateCreatorDto,
24
- params: CreatorAddressDto,
24
+ params: CreatorIdDto,
25
25
  beforeHandle: BackOfficeGuard,
26
26
  })
27
27
  // ─── Delete A Creator ────────────────────────────────────────────────
28
- .delete("/:address", async ({ params: { address } }) => CreatorService.delete(address), {
28
+ .delete("/:creatorId", async ({ params: { creatorId } }) => CreatorService.delete(creatorId), {
29
29
  headers: AuthorizationHeadersDto,
30
- params: CreatorAddressDto,
30
+ params: CreatorIdDto,
31
31
  beforeHandle: BackOfficeGuard,
32
32
  })
33
33
  // ─── Service Specific Methods ────────────────────────────────────────────────
@@ -38,6 +38,6 @@ export const CreatorController = new Elysia({ prefix: "/creators", detail: { tag
38
38
  params: CreatorAddressDto,
39
39
  query: CampaignQueryDto,
40
40
  })
41
- .get("/campaigns/:id", async ({ params: { id } }) => CreatorService.getCampaignMetrics(id), {
41
+ .get("/campaigns/:campaignId", async ({ params: { campaignId } }) => CreatorService.getCampaignMetrics(campaignId), {
42
42
  params: CampaignIdDto,
43
43
  });
@@ -33,7 +33,7 @@ export declare const CreatorAddressDto: import("@sinclair/typebox").TObject<{
33
33
  address: import("@sinclair/typebox").TString;
34
34
  }>;
35
35
  export declare const CampaignIdDto: import("@sinclair/typebox").TObject<{
36
- id: import("@sinclair/typebox").TString;
36
+ campaignId: import("@sinclair/typebox").TString;
37
37
  }>;
38
38
  export declare const CampaignStatusDto: import("@sinclair/typebox").TEnum<{
39
39
  PAST: "PAST";
@@ -48,7 +48,7 @@ export declare const CampaignQueryDto: import("@sinclair/typebox").TObject<{
48
48
  }>>;
49
49
  }>;
50
50
  export declare const CreatorIdDto: import("@sinclair/typebox").TObject<{
51
- id: import("@sinclair/typebox").TString;
51
+ creatorId: import("@sinclair/typebox").TString;
52
52
  }>;
53
53
  export declare const UpdateCreatorRebateDto: import("@sinclair/typebox").TObject<{
54
54
  rebate: import("@sinclair/typebox").TNumber;
@@ -28,14 +28,14 @@ export const CreatorAddressDto = t.Object({
28
28
  address: t.String(),
29
29
  });
30
30
  export const CampaignIdDto = t.Object({
31
- id: t.String(),
31
+ campaignId: t.String(),
32
32
  });
33
33
  export const CampaignStatusDto = t.Enum({ PAST: "PAST", LIVE: "LIVE", FUTURE: "FUTURE" });
34
34
  export const CampaignQueryDto = t.Object({
35
35
  status: t.Optional(CampaignStatusDto),
36
36
  });
37
37
  export const CreatorIdDto = t.Object({
38
- id: t.String(),
38
+ creatorId: t.String(),
39
39
  });
40
40
  export const UpdateCreatorRebateDto = t.Object({
41
41
  rebate: t.Number({ maximum: 100, minimum: 0 }),
@@ -1124,7 +1124,7 @@ export declare const OpportunityController: Elysia<"/opportunities", false, {
1124
1124
  } & {
1125
1125
  price?: number | null | undefined;
1126
1126
  })[];
1127
- mainProtocol: "splice" | "reserve" | "morpho" | "quickswap" | "euler" | "uniswap" | "ambient" | "arthswap" | "base-swap" | "camelot" | "crust" | "fenix" | "horiza" | "izumi" | "kim" | "pancake-swap" | "ramses" | "retro" | "stryke" | "sushi-swap" | "swapr" | "thruster" | "voltage" | "zero" | "koi" | "supswap" | "zk-swap" | "thirdtrade" | "swap-x" | "velodrome" | "aerodrome" | "balancer" | "curve" | "cross_curve" | "curveNPool" | "aura" | "akron" | "beefy" | "dragonswap" | "poolside" | "syncswap" | "neptune" | "zkSwapThreePool" | "rfx" | "ra" | "maverick" | "trader-joe" | "hanji" | "radiant" | "aave" | "fraxlend" | "ironclad" | "gearbox" | "compound" | "sturdy" | "frax" | "ionic" | "moonwell" | "fluid" | "silo" | "dolomite" | "badger" | "ajna" | "layerbank" | "ion" | "venus" | "woofi" | "reactor_fusion" | "eigenlayer" | "vest" | "zerolend" | "lnd" | "dlend" | "hyperdrive" | "gamma" | "oku" | "hourglass" | "veda" | "kyo" | "sonex" | "lendle" | "tako-tako" | "equalizer" | "spectra" | "beraborrow" | "superlend" | "avalon" | "iguana" | "xlend" | "sake" | "sonicmarket" | "stability" | "angles" | "enzyme" | "toros" | "vicuna" | "bunni" | "beratrax" | "concrete" | "cian" | "pendle" | "yei" | "termmax" | "filament" | "gammaswap" | "maha" | "tempest" | "uranium" | "holdstation" | "katana" | "punchswap" | "satlayer" | "puffer" | undefined;
1127
+ mainProtocol: "splice" | "reserve" | "morpho" | "quickswap" | "euler" | "uniswap" | "ambient" | "arthswap" | "base-swap" | "camelot" | "crust" | "fenix" | "horiza" | "izumi" | "kim" | "pancake-swap" | "ramses" | "retro" | "stryke" | "sushi-swap" | "swapr" | "thruster" | "voltage" | "zero" | "koi" | "supswap" | "zk-swap" | "thirdtrade" | "swap-x" | "velodrome" | "aerodrome" | "balancer" | "curve" | "cross_curve" | "curveNPool" | "aura" | "akron" | "beefy" | "dragonswap" | "poolside" | "syncswap" | "neptune" | "zkSwapThreePool" | "rfx" | "ra" | "maverick" | "trader-joe" | "hanji" | "pinto" | "radiant" | "aave" | "fraxlend" | "ironclad" | "gearbox" | "compound" | "sturdy" | "frax" | "ionic" | "moonwell" | "fluid" | "silo" | "dolomite" | "badger" | "ajna" | "layerbank" | "ion" | "venus" | "woofi" | "reactor_fusion" | "eigenlayer" | "vest" | "zerolend" | "lnd" | "dlend" | "hyperdrive" | "gamma" | "oku" | "hourglass" | "veda" | "kyo" | "sonex" | "lendle" | "tako-tako" | "equalizer" | "spectra" | "beraborrow" | "superlend" | "avalon" | "iguana" | "xlend" | "sake" | "sonicmarket" | "stability" | "angles" | "enzyme" | "toros" | "vicuna" | "bunni" | "beratrax" | "concrete" | "cian" | "pendle" | "yei" | "termmax" | "filament" | "gammaswap" | "maha" | "tempest" | "uranium" | "holdstation" | "katana" | "punchswap" | "satlayer" | "puffer" | undefined;
1128
1128
  description: string;
1129
1129
  howToSteps: string[];
1130
1130
  depositUrl: string | undefined;
@@ -1302,7 +1302,7 @@ export declare const OpportunityController: Elysia<"/opportunities", false, {
1302
1302
  } & {
1303
1303
  price?: number | null | undefined;
1304
1304
  })[];
1305
- mainProtocol: "splice" | "reserve" | "morpho" | "quickswap" | "euler" | "uniswap" | "ambient" | "arthswap" | "base-swap" | "camelot" | "crust" | "fenix" | "horiza" | "izumi" | "kim" | "pancake-swap" | "ramses" | "retro" | "stryke" | "sushi-swap" | "swapr" | "thruster" | "voltage" | "zero" | "koi" | "supswap" | "zk-swap" | "thirdtrade" | "swap-x" | "velodrome" | "aerodrome" | "balancer" | "curve" | "cross_curve" | "curveNPool" | "aura" | "akron" | "beefy" | "dragonswap" | "poolside" | "syncswap" | "neptune" | "zkSwapThreePool" | "rfx" | "ra" | "maverick" | "trader-joe" | "hanji" | "radiant" | "aave" | "fraxlend" | "ironclad" | "gearbox" | "compound" | "sturdy" | "frax" | "ionic" | "moonwell" | "fluid" | "silo" | "dolomite" | "badger" | "ajna" | "layerbank" | "ion" | "venus" | "woofi" | "reactor_fusion" | "eigenlayer" | "vest" | "zerolend" | "lnd" | "dlend" | "hyperdrive" | "gamma" | "oku" | "hourglass" | "veda" | "kyo" | "sonex" | "lendle" | "tako-tako" | "equalizer" | "spectra" | "beraborrow" | "superlend" | "avalon" | "iguana" | "xlend" | "sake" | "sonicmarket" | "stability" | "angles" | "enzyme" | "toros" | "vicuna" | "bunni" | "beratrax" | "concrete" | "cian" | "pendle" | "yei" | "termmax" | "filament" | "gammaswap" | "maha" | "tempest" | "uranium" | "holdstation" | "katana" | "punchswap" | "satlayer" | "puffer" | undefined;
1305
+ mainProtocol: "splice" | "reserve" | "morpho" | "quickswap" | "euler" | "uniswap" | "ambient" | "arthswap" | "base-swap" | "camelot" | "crust" | "fenix" | "horiza" | "izumi" | "kim" | "pancake-swap" | "ramses" | "retro" | "stryke" | "sushi-swap" | "swapr" | "thruster" | "voltage" | "zero" | "koi" | "supswap" | "zk-swap" | "thirdtrade" | "swap-x" | "velodrome" | "aerodrome" | "balancer" | "curve" | "cross_curve" | "curveNPool" | "aura" | "akron" | "beefy" | "dragonswap" | "poolside" | "syncswap" | "neptune" | "zkSwapThreePool" | "rfx" | "ra" | "maverick" | "trader-joe" | "hanji" | "pinto" | "radiant" | "aave" | "fraxlend" | "ironclad" | "gearbox" | "compound" | "sturdy" | "frax" | "ionic" | "moonwell" | "fluid" | "silo" | "dolomite" | "badger" | "ajna" | "layerbank" | "ion" | "venus" | "woofi" | "reactor_fusion" | "eigenlayer" | "vest" | "zerolend" | "lnd" | "dlend" | "hyperdrive" | "gamma" | "oku" | "hourglass" | "veda" | "kyo" | "sonex" | "lendle" | "tako-tako" | "equalizer" | "spectra" | "beraborrow" | "superlend" | "avalon" | "iguana" | "xlend" | "sake" | "sonicmarket" | "stability" | "angles" | "enzyme" | "toros" | "vicuna" | "bunni" | "beratrax" | "concrete" | "cian" | "pendle" | "yei" | "termmax" | "filament" | "gammaswap" | "maha" | "tempest" | "uranium" | "holdstation" | "katana" | "punchswap" | "satlayer" | "puffer" | undefined;
1306
1306
  description: string;
1307
1307
  howToSteps: string[];
1308
1308
  depositUrl: string | undefined;
@@ -109,7 +109,7 @@ export declare abstract class OpportunityService {
109
109
  } & {
110
110
  price?: number | null | undefined;
111
111
  })[];
112
- mainProtocol: "splice" | "reserve" | "morpho" | "quickswap" | "euler" | "uniswap" | "ambient" | "arthswap" | "base-swap" | "camelot" | "crust" | "fenix" | "horiza" | "izumi" | "kim" | "pancake-swap" | "ramses" | "retro" | "stryke" | "sushi-swap" | "swapr" | "thruster" | "voltage" | "zero" | "koi" | "supswap" | "zk-swap" | "thirdtrade" | "swap-x" | "velodrome" | "aerodrome" | "balancer" | "curve" | "cross_curve" | "curveNPool" | "aura" | "akron" | "beefy" | "dragonswap" | "poolside" | "syncswap" | "neptune" | "zkSwapThreePool" | "rfx" | "ra" | "maverick" | "trader-joe" | "hanji" | "radiant" | "aave" | "fraxlend" | "ironclad" | "gearbox" | "compound" | "sturdy" | "frax" | "ionic" | "moonwell" | "fluid" | "silo" | "dolomite" | "badger" | "ajna" | "layerbank" | "ion" | "venus" | "woofi" | "reactor_fusion" | "eigenlayer" | "vest" | "zerolend" | "lnd" | "dlend" | "hyperdrive" | "gamma" | "oku" | "hourglass" | "veda" | "kyo" | "sonex" | "lendle" | "tako-tako" | "equalizer" | "spectra" | "beraborrow" | "superlend" | "avalon" | "iguana" | "xlend" | "sake" | "sonicmarket" | "stability" | "angles" | "enzyme" | "toros" | "vicuna" | "bunni" | "beratrax" | "concrete" | "cian" | "pendle" | "yei" | "termmax" | "filament" | "gammaswap" | "maha" | "tempest" | "uranium" | "holdstation" | "katana" | "punchswap" | "satlayer" | "puffer" | undefined;
112
+ mainProtocol: "splice" | "reserve" | "morpho" | "quickswap" | "euler" | "uniswap" | "ambient" | "arthswap" | "base-swap" | "camelot" | "crust" | "fenix" | "horiza" | "izumi" | "kim" | "pancake-swap" | "ramses" | "retro" | "stryke" | "sushi-swap" | "swapr" | "thruster" | "voltage" | "zero" | "koi" | "supswap" | "zk-swap" | "thirdtrade" | "swap-x" | "velodrome" | "aerodrome" | "balancer" | "curve" | "cross_curve" | "curveNPool" | "aura" | "akron" | "beefy" | "dragonswap" | "poolside" | "syncswap" | "neptune" | "zkSwapThreePool" | "rfx" | "ra" | "maverick" | "trader-joe" | "hanji" | "pinto" | "radiant" | "aave" | "fraxlend" | "ironclad" | "gearbox" | "compound" | "sturdy" | "frax" | "ionic" | "moonwell" | "fluid" | "silo" | "dolomite" | "badger" | "ajna" | "layerbank" | "ion" | "venus" | "woofi" | "reactor_fusion" | "eigenlayer" | "vest" | "zerolend" | "lnd" | "dlend" | "hyperdrive" | "gamma" | "oku" | "hourglass" | "veda" | "kyo" | "sonex" | "lendle" | "tako-tako" | "equalizer" | "spectra" | "beraborrow" | "superlend" | "avalon" | "iguana" | "xlend" | "sake" | "sonicmarket" | "stability" | "angles" | "enzyme" | "toros" | "vicuna" | "bunni" | "beratrax" | "concrete" | "cian" | "pendle" | "yei" | "termmax" | "filament" | "gammaswap" | "maha" | "tempest" | "uranium" | "holdstation" | "katana" | "punchswap" | "satlayer" | "puffer" | undefined;
113
113
  description: string;
114
114
  howToSteps: string[];
115
115
  depositUrl: string | undefined;
@@ -239,7 +239,7 @@ export declare abstract class OpportunityService {
239
239
  } & {
240
240
  price?: number | null | undefined;
241
241
  })[];
242
- mainProtocol: "splice" | "reserve" | "morpho" | "quickswap" | "euler" | "uniswap" | "ambient" | "arthswap" | "base-swap" | "camelot" | "crust" | "fenix" | "horiza" | "izumi" | "kim" | "pancake-swap" | "ramses" | "retro" | "stryke" | "sushi-swap" | "swapr" | "thruster" | "voltage" | "zero" | "koi" | "supswap" | "zk-swap" | "thirdtrade" | "swap-x" | "velodrome" | "aerodrome" | "balancer" | "curve" | "cross_curve" | "curveNPool" | "aura" | "akron" | "beefy" | "dragonswap" | "poolside" | "syncswap" | "neptune" | "zkSwapThreePool" | "rfx" | "ra" | "maverick" | "trader-joe" | "hanji" | "radiant" | "aave" | "fraxlend" | "ironclad" | "gearbox" | "compound" | "sturdy" | "frax" | "ionic" | "moonwell" | "fluid" | "silo" | "dolomite" | "badger" | "ajna" | "layerbank" | "ion" | "venus" | "woofi" | "reactor_fusion" | "eigenlayer" | "vest" | "zerolend" | "lnd" | "dlend" | "hyperdrive" | "gamma" | "oku" | "hourglass" | "veda" | "kyo" | "sonex" | "lendle" | "tako-tako" | "equalizer" | "spectra" | "beraborrow" | "superlend" | "avalon" | "iguana" | "xlend" | "sake" | "sonicmarket" | "stability" | "angles" | "enzyme" | "toros" | "vicuna" | "bunni" | "beratrax" | "concrete" | "cian" | "pendle" | "yei" | "termmax" | "filament" | "gammaswap" | "maha" | "tempest" | "uranium" | "holdstation" | "katana" | "punchswap" | "satlayer" | "puffer" | undefined;
242
+ mainProtocol: "splice" | "reserve" | "morpho" | "quickswap" | "euler" | "uniswap" | "ambient" | "arthswap" | "base-swap" | "camelot" | "crust" | "fenix" | "horiza" | "izumi" | "kim" | "pancake-swap" | "ramses" | "retro" | "stryke" | "sushi-swap" | "swapr" | "thruster" | "voltage" | "zero" | "koi" | "supswap" | "zk-swap" | "thirdtrade" | "swap-x" | "velodrome" | "aerodrome" | "balancer" | "curve" | "cross_curve" | "curveNPool" | "aura" | "akron" | "beefy" | "dragonswap" | "poolside" | "syncswap" | "neptune" | "zkSwapThreePool" | "rfx" | "ra" | "maverick" | "trader-joe" | "hanji" | "pinto" | "radiant" | "aave" | "fraxlend" | "ironclad" | "gearbox" | "compound" | "sturdy" | "frax" | "ionic" | "moonwell" | "fluid" | "silo" | "dolomite" | "badger" | "ajna" | "layerbank" | "ion" | "venus" | "woofi" | "reactor_fusion" | "eigenlayer" | "vest" | "zerolend" | "lnd" | "dlend" | "hyperdrive" | "gamma" | "oku" | "hourglass" | "veda" | "kyo" | "sonex" | "lendle" | "tako-tako" | "equalizer" | "spectra" | "beraborrow" | "superlend" | "avalon" | "iguana" | "xlend" | "sake" | "sonicmarket" | "stability" | "angles" | "enzyme" | "toros" | "vicuna" | "bunni" | "beratrax" | "concrete" | "cian" | "pendle" | "yei" | "termmax" | "filament" | "gammaswap" | "maha" | "tempest" | "uranium" | "holdstation" | "katana" | "punchswap" | "satlayer" | "puffer" | undefined;
243
243
  description: string;
244
244
  howToSteps: string[];
245
245
  depositUrl: string | undefined;
@@ -317,7 +317,7 @@ export declare abstract class OpportunityService {
317
317
  } & {
318
318
  price?: number | null | undefined;
319
319
  })[];
320
- mainProtocol: "splice" | "reserve" | "morpho" | "quickswap" | "euler" | "uniswap" | "ambient" | "arthswap" | "base-swap" | "camelot" | "crust" | "fenix" | "horiza" | "izumi" | "kim" | "pancake-swap" | "ramses" | "retro" | "stryke" | "sushi-swap" | "swapr" | "thruster" | "voltage" | "zero" | "koi" | "supswap" | "zk-swap" | "thirdtrade" | "swap-x" | "velodrome" | "aerodrome" | "balancer" | "curve" | "cross_curve" | "curveNPool" | "aura" | "akron" | "beefy" | "dragonswap" | "poolside" | "syncswap" | "neptune" | "zkSwapThreePool" | "rfx" | "ra" | "maverick" | "trader-joe" | "hanji" | "radiant" | "aave" | "fraxlend" | "ironclad" | "gearbox" | "compound" | "sturdy" | "frax" | "ionic" | "moonwell" | "fluid" | "silo" | "dolomite" | "badger" | "ajna" | "layerbank" | "ion" | "venus" | "woofi" | "reactor_fusion" | "eigenlayer" | "vest" | "zerolend" | "lnd" | "dlend" | "hyperdrive" | "gamma" | "oku" | "hourglass" | "veda" | "kyo" | "sonex" | "lendle" | "tako-tako" | "equalizer" | "spectra" | "beraborrow" | "superlend" | "avalon" | "iguana" | "xlend" | "sake" | "sonicmarket" | "stability" | "angles" | "enzyme" | "toros" | "vicuna" | "bunni" | "beratrax" | "concrete" | "cian" | "pendle" | "yei" | "termmax" | "filament" | "gammaswap" | "maha" | "tempest" | "uranium" | "holdstation" | "katana" | "punchswap" | "satlayer" | "puffer" | undefined;
320
+ mainProtocol: "splice" | "reserve" | "morpho" | "quickswap" | "euler" | "uniswap" | "ambient" | "arthswap" | "base-swap" | "camelot" | "crust" | "fenix" | "horiza" | "izumi" | "kim" | "pancake-swap" | "ramses" | "retro" | "stryke" | "sushi-swap" | "swapr" | "thruster" | "voltage" | "zero" | "koi" | "supswap" | "zk-swap" | "thirdtrade" | "swap-x" | "velodrome" | "aerodrome" | "balancer" | "curve" | "cross_curve" | "curveNPool" | "aura" | "akron" | "beefy" | "dragonswap" | "poolside" | "syncswap" | "neptune" | "zkSwapThreePool" | "rfx" | "ra" | "maverick" | "trader-joe" | "hanji" | "pinto" | "radiant" | "aave" | "fraxlend" | "ironclad" | "gearbox" | "compound" | "sturdy" | "frax" | "ionic" | "moonwell" | "fluid" | "silo" | "dolomite" | "badger" | "ajna" | "layerbank" | "ion" | "venus" | "woofi" | "reactor_fusion" | "eigenlayer" | "vest" | "zerolend" | "lnd" | "dlend" | "hyperdrive" | "gamma" | "oku" | "hourglass" | "veda" | "kyo" | "sonex" | "lendle" | "tako-tako" | "equalizer" | "spectra" | "beraborrow" | "superlend" | "avalon" | "iguana" | "xlend" | "sake" | "sonicmarket" | "stability" | "angles" | "enzyme" | "toros" | "vicuna" | "bunni" | "beratrax" | "concrete" | "cian" | "pendle" | "yei" | "termmax" | "filament" | "gammaswap" | "maha" | "tempest" | "uranium" | "holdstation" | "katana" | "punchswap" | "satlayer" | "puffer" | undefined;
321
321
  description: string;
322
322
  howToSteps: string[];
323
323
  depositUrl: string | undefined;
@@ -59,6 +59,10 @@ export declare enum etherlinkCampaigns {
59
59
  Iguana_mTBILL_USDC = "Iguana mTBILL/USDC Etherlink 0x643D7CF86262b287b8548e840b4081c1A1525355",
60
60
  Iguana_mBASIS_USDC = "Iguana mBASIS/USDC Etherlink 0xc2AF49072611f63894F761c8a354419dD0486826",
61
61
  Hanji_HJLP = "Hanji HJLP Etherlink 0x1cd88fBD530281Ad6c639E2B897c4E239003A930",
62
+ Hanji_ETH_Vault = "Hanji ETH Vault Etherlink 0x925dC026D8B5B9d64D82AE3Fd3280a4Bc2514364",
63
+ Hanji_XTZ_Vault = "Hanji XTZ Vault Etherlink 0x1BeD8FC148864Fec86eb18472f36093350770Bd6",
64
+ Hanji_USD_Vault = "Hanji USD Vault Etherlink 0x65203Ede18ce1EE9E8A3B11b31A8DC5444D2C799",
65
+ Hanji_BTC_Vault = "Hanji BTC Vault Etherlink 0xe0FFcD16980Cb54D33C56B49e65697603E9b92E5",
62
66
  Uranium_Hold_xU308_Etherlink = "Uranium Hold xU308 Etherlink 0x79052Ab3C166D4899a1e0DD033aC3b379AF0B1fD",
63
67
  referral_test = "referral test Etherlink 0x0",
64
68
  Hanji_XTZ_USDC = "Hanji XTZ/USDC Etherlink 0xd0bc067cf877f7b76ceb331891331d9e6acda1a7",
@@ -1038,6 +1042,102 @@ declare const EtherlinkInterfaceCampaigns: {
1038
1042
  url: string;
1039
1043
  forwarders: never[];
1040
1044
  };
1045
+ "Hanji ETH Vault Etherlink 0x925dC026D8B5B9d64D82AE3Fd3280a4Bc2514364": {
1046
+ campaignType: any;
1047
+ computeChainId: any;
1048
+ hooks: {
1049
+ hookType: any;
1050
+ key: string;
1051
+ chainId: any;
1052
+ contractAddress: string;
1053
+ contractState: any;
1054
+ boostForReferrer: any;
1055
+ valueForBoostForReferrer: number;
1056
+ boostForInvited: any;
1057
+ valueForBoostForInvited: number;
1058
+ defaultBoost: any;
1059
+ maximumBoostReferrer: number;
1060
+ maximumBoostInvited: number;
1061
+ cumulativeBoost: boolean;
1062
+ }[];
1063
+ targetToken: string;
1064
+ whitelist: never[];
1065
+ blacklist: string[];
1066
+ url: string;
1067
+ forwarders: never[];
1068
+ };
1069
+ "Hanji XTZ Vault Etherlink 0x1BeD8FC148864Fec86eb18472f36093350770Bd6": {
1070
+ campaignType: any;
1071
+ computeChainId: any;
1072
+ hooks: {
1073
+ hookType: any;
1074
+ key: string;
1075
+ chainId: any;
1076
+ contractAddress: string;
1077
+ contractState: any;
1078
+ boostForReferrer: any;
1079
+ valueForBoostForReferrer: number;
1080
+ boostForInvited: any;
1081
+ valueForBoostForInvited: number;
1082
+ defaultBoost: any;
1083
+ maximumBoostReferrer: number;
1084
+ maximumBoostInvited: number;
1085
+ cumulativeBoost: boolean;
1086
+ }[];
1087
+ targetToken: string;
1088
+ whitelist: never[];
1089
+ blacklist: string[];
1090
+ url: string;
1091
+ forwarders: never[];
1092
+ };
1093
+ "Hanji USD Vault Etherlink 0x65203Ede18ce1EE9E8A3B11b31A8DC5444D2C799": {
1094
+ campaignType: any;
1095
+ computeChainId: any;
1096
+ hooks: {
1097
+ hookType: any;
1098
+ key: string;
1099
+ chainId: any;
1100
+ contractAddress: string;
1101
+ contractState: any;
1102
+ boostForReferrer: any;
1103
+ valueForBoostForReferrer: number;
1104
+ boostForInvited: any;
1105
+ valueForBoostForInvited: number;
1106
+ defaultBoost: any;
1107
+ maximumBoostReferrer: number;
1108
+ maximumBoostInvited: number;
1109
+ cumulativeBoost: boolean;
1110
+ }[];
1111
+ targetToken: string;
1112
+ whitelist: never[];
1113
+ blacklist: string[];
1114
+ url: string;
1115
+ forwarders: never[];
1116
+ };
1117
+ "Hanji BTC Vault Etherlink 0xe0FFcD16980Cb54D33C56B49e65697603E9b92E5": {
1118
+ campaignType: any;
1119
+ computeChainId: any;
1120
+ hooks: {
1121
+ hookType: any;
1122
+ key: string;
1123
+ chainId: any;
1124
+ contractAddress: string;
1125
+ contractState: any;
1126
+ boostForReferrer: any;
1127
+ valueForBoostForReferrer: number;
1128
+ boostForInvited: any;
1129
+ valueForBoostForInvited: number;
1130
+ defaultBoost: any;
1131
+ maximumBoostReferrer: number;
1132
+ maximumBoostInvited: number;
1133
+ cumulativeBoost: boolean;
1134
+ }[];
1135
+ targetToken: string;
1136
+ whitelist: never[];
1137
+ blacklist: string[];
1138
+ url: string;
1139
+ forwarders: never[];
1140
+ };
1041
1141
  "Iguana WETH/WXTZ Etherlink 0x478F067b0Ed73d120BBcd8c6f4f33438FC483912": {
1042
1142
  campaignType: any;
1043
1143
  computeChainId: any;
@@ -66,6 +66,10 @@ export var etherlinkCampaigns;
66
66
  etherlinkCampaigns["Iguana_mTBILL_USDC"] = "Iguana mTBILL/USDC Etherlink 0x643D7CF86262b287b8548e840b4081c1A1525355";
67
67
  etherlinkCampaigns["Iguana_mBASIS_USDC"] = "Iguana mBASIS/USDC Etherlink 0xc2AF49072611f63894F761c8a354419dD0486826";
68
68
  etherlinkCampaigns["Hanji_HJLP"] = "Hanji HJLP Etherlink 0x1cd88fBD530281Ad6c639E2B897c4E239003A930";
69
+ etherlinkCampaigns["Hanji_ETH_Vault"] = "Hanji ETH Vault Etherlink 0x925dC026D8B5B9d64D82AE3Fd3280a4Bc2514364";
70
+ etherlinkCampaigns["Hanji_XTZ_Vault"] = "Hanji XTZ Vault Etherlink 0x1BeD8FC148864Fec86eb18472f36093350770Bd6";
71
+ etherlinkCampaigns["Hanji_USD_Vault"] = "Hanji USD Vault Etherlink 0x65203Ede18ce1EE9E8A3B11b31A8DC5444D2C799";
72
+ etherlinkCampaigns["Hanji_BTC_Vault"] = "Hanji BTC Vault Etherlink 0xe0FFcD16980Cb54D33C56B49e65697603E9b92E5";
69
73
  etherlinkCampaigns["Uranium_Hold_xU308_Etherlink"] = "Uranium Hold xU308 Etherlink 0x79052Ab3C166D4899a1e0DD033aC3b379AF0B1fD";
70
74
  etherlinkCampaigns["referral_test"] = "referral test Etherlink 0x0";
71
75
  etherlinkCampaigns["Hanji_XTZ_USDC"] = "Hanji XTZ/USDC Etherlink 0xd0bc067cf877f7b76ceb331891331d9e6acda1a7";
@@ -1124,6 +1128,46 @@ const EtherlinkInterfaceCampaigns = {
1124
1128
  url: "https://app.hanji.io/vaults/0x4c911bf7a008c497719cbeb1a376f1cec9e2c1d6/",
1125
1129
  forwarders: [],
1126
1130
  },
1131
+ [etherlinkCampaigns.Hanji_ETH_Vault]: {
1132
+ campaignType: Campaign.ERC20,
1133
+ computeChainId: ChainId.ETHERLINK,
1134
+ hooks: [etherlinkReferralProgram],
1135
+ targetToken: "0x925dC026D8B5B9d64D82AE3Fd3280a4Bc2514364",
1136
+ whitelist: [],
1137
+ blacklist: blacklistEtherlink,
1138
+ url: "https://app.hanji.io/vaults/0xb8e5e6519277bf3c961684b47313a3553cb0dd46/",
1139
+ forwarders: [],
1140
+ },
1141
+ [etherlinkCampaigns.Hanji_XTZ_Vault]: {
1142
+ campaignType: Campaign.ERC20,
1143
+ computeChainId: ChainId.ETHERLINK,
1144
+ hooks: [etherlinkReferralProgram],
1145
+ targetToken: "0x1BeD8FC148864Fec86eb18472f36093350770Bd6",
1146
+ whitelist: [],
1147
+ blacklist: blacklistEtherlink,
1148
+ url: "https://app.hanji.io/vaults/0x4f2210992209ad0ab0c8644547bf0379b96ed1f4/",
1149
+ forwarders: [],
1150
+ },
1151
+ [etherlinkCampaigns.Hanji_USD_Vault]: {
1152
+ campaignType: Campaign.ERC20,
1153
+ computeChainId: ChainId.ETHERLINK,
1154
+ hooks: [etherlinkReferralProgram],
1155
+ targetToken: "0x65203Ede18ce1EE9E8A3B11b31A8DC5444D2C799",
1156
+ whitelist: [],
1157
+ blacklist: blacklistEtherlink,
1158
+ url: "https://app.hanji.io/vaults/0xec24ead8022190509992275559b57e7ed3c95e66/",
1159
+ forwarders: [],
1160
+ },
1161
+ [etherlinkCampaigns.Hanji_BTC_Vault]: {
1162
+ campaignType: Campaign.ERC20,
1163
+ computeChainId: ChainId.ETHERLINK,
1164
+ hooks: [etherlinkReferralProgram],
1165
+ targetToken: "0xe0FFcD16980Cb54D33C56B49e65697603E9b92E5",
1166
+ whitelist: [],
1167
+ blacklist: blacklistEtherlink,
1168
+ url: "https://app.hanji.io/vaults/0xb50221737075e28f44123a5bb89eaea285722318/",
1169
+ forwarders: [],
1170
+ },
1127
1171
  [etherlinkCampaigns.Iguana_WETH_WXTZ]: {
1128
1172
  campaignType: Campaign.CLAMM,
1129
1173
  computeChainId: ChainId.ETHERLINK,
@@ -9,7 +9,7 @@ export type Protocol = Resource<"Protocol", undefined, {
9
9
  numberOfLiveCampaigns?: number;
10
10
  opportunityLiveTags?: string[];
11
11
  }>;
12
- export declare const protocolIdList: readonly ["uniswap", "ambient", "arthswap", "base-swap", "camelot", "crust", "fenix", "horiza", "izumi", "kim", "pancake-swap", "quickswap", "ramses", "retro", "stryke", "sushi-swap", "swapr", "thruster", "voltage", "zero", "koi", "supswap", "zk-swap", "thirdtrade", "swap-x", "velodrome", "aerodrome", "balancer", "curve", "cross_curve", "curveNPool", "aura", "akron", "beefy", "dragonswap", "poolside", "koi", "syncswap", "neptune", "zkSwapThreePool", "syncswap", "rfx", "ra", "maverick", "trader-joe", "velodrome", "hanji", "reserve", "radiant", "aave", "fraxlend", "ironclad", "euler", "gearbox", "compound", "sturdy", "frax", "ionic", "moonwell", "fluid", "silo", "morpho", "dolomite", "badger", "ajna", "layerbank", "ion", "venus", "woofi", "reactor_fusion", "eigenlayer", "vest", "zerolend", "lnd", "dlend", "hyperdrive", "gamma", "oku", "hourglass", "veda", "kyo", "sonex", "lendle", "tako-tako", "equalizer", "spectra", "beraborrow", "superlend", "avalon", "iguana", "xlend", "sake", "sonicmarket", "stability", "angles", "enzyme", "toros", "vicuna", "bunni", "beratrax", "concrete", "cian", "pendle", "splice", "sturdy", "yei", "termmax", "filament", "gammaswap", "maha", "tempest", "uranium", "hanji", "holdstation", "katana", "punchswap", "satlayer", "puffer"];
12
+ export declare const protocolIdList: readonly ["uniswap", "ambient", "arthswap", "base-swap", "camelot", "crust", "fenix", "horiza", "izumi", "kim", "pancake-swap", "quickswap", "ramses", "retro", "stryke", "sushi-swap", "swapr", "thruster", "voltage", "zero", "koi", "supswap", "zk-swap", "thirdtrade", "swap-x", "velodrome", "aerodrome", "balancer", "curve", "cross_curve", "curveNPool", "aura", "akron", "beefy", "dragonswap", "poolside", "koi", "syncswap", "neptune", "zkSwapThreePool", "syncswap", "rfx", "ra", "maverick", "trader-joe", "velodrome", "hanji", "reserve", "pinto", "radiant", "aave", "fraxlend", "ironclad", "euler", "gearbox", "compound", "sturdy", "frax", "ionic", "moonwell", "fluid", "silo", "morpho", "dolomite", "badger", "ajna", "layerbank", "ion", "venus", "woofi", "reactor_fusion", "eigenlayer", "vest", "zerolend", "lnd", "dlend", "hyperdrive", "gamma", "oku", "hourglass", "veda", "kyo", "sonex", "lendle", "tako-tako", "equalizer", "spectra", "beraborrow", "superlend", "avalon", "iguana", "xlend", "sake", "sonicmarket", "stability", "angles", "enzyme", "toros", "vicuna", "bunni", "beratrax", "concrete", "cian", "pendle", "splice", "sturdy", "yei", "termmax", "filament", "gammaswap", "maha", "tempest", "uranium", "hanji", "holdstation", "katana", "punchswap", "satlayer", "puffer"];
13
13
  export type ProtocolId = (typeof protocolIdList)[number];
14
14
  export declare const ProtocolResourceDto: import("@sinclair/typebox").TObject<{
15
15
  id: import("@sinclair/typebox").TString;
@@ -49,6 +49,7 @@ export const protocolIdList = [
49
49
  "velodrome",
50
50
  "hanji",
51
51
  "reserve",
52
+ "pinto",
52
53
  // ─── Lending ──────────────────────────────────────────────────────
53
54
  "radiant",
54
55
  "aave",
@@ -109,7 +109,7 @@ export class RewardRepository {
109
109
  RewardToken: withToken
110
110
  ? true
111
111
  : {
112
- select: { address: true, chainId: true, symbol: true, decimals: true },
112
+ select: { address: true, chainId: true, symbol: true, decimals: true, price: true },
113
113
  },
114
114
  },
115
115
  });