@merkl/api 0.10.259 → 0.10.261
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.
- package/dist/src/eden/index.d.ts +61 -10
- package/dist/src/index.d.ts +19 -2
- package/dist/src/modules/v4/claims/claims.controller.d.ts +1 -1
- package/dist/src/modules/v4/claims/claims.service.d.ts +1 -1
- package/dist/src/modules/v4/claims/claims.service.js +2 -2
- package/dist/src/modules/v4/opportunity/opportunity.controller.d.ts +18 -1
- package/dist/src/modules/v4/opportunity/opportunity.controller.js +5 -4
- package/dist/src/modules/v4/opportunity/opportunity.model.d.ts +4 -0
- package/dist/src/modules/v4/opportunity/opportunity.model.js +3 -0
- package/dist/src/modules/v4/opportunity/opportunity.repository.d.ts +16 -1
- package/dist/src/modules/v4/opportunity/opportunity.repository.js +18 -4
- package/dist/src/modules/v4/opportunity/opportunity.service.d.ts +63 -8
- package/dist/src/modules/v4/opportunity/opportunity.service.js +50 -50
- package/dist/src/modules/v4/router.d.ts +19 -2
- package/dist/tsconfig.package.tsbuildinfo +1 -1
- package/package.json +1 -1
package/dist/src/eden/index.d.ts
CHANGED
|
@@ -130,11 +130,13 @@ declare const eden: {
|
|
|
130
130
|
tags: string[];
|
|
131
131
|
};
|
|
132
132
|
}>>;
|
|
133
|
-
get: (options
|
|
133
|
+
get: (options: {
|
|
134
134
|
headers?: Record<string, unknown> | undefined;
|
|
135
|
-
query
|
|
135
|
+
query: {
|
|
136
|
+
test?: boolean | undefined;
|
|
137
|
+
};
|
|
136
138
|
fetch?: RequestInit | undefined;
|
|
137
|
-
}
|
|
139
|
+
}) => Promise<import("@elysiajs/eden").Treaty.TreatyResponse<{
|
|
138
140
|
200: {
|
|
139
141
|
protocol?: {
|
|
140
142
|
name: string;
|
|
@@ -547,6 +549,21 @@ declare const eden: {
|
|
|
547
549
|
identifier: string;
|
|
548
550
|
chainId: number;
|
|
549
551
|
action: import("../../database/api/.generated").$Enums.OpportunityAction;
|
|
552
|
+
Campaigns: {
|
|
553
|
+
type: import("../../database/api/.generated").$Enums.CampaignType;
|
|
554
|
+
id: string;
|
|
555
|
+
params: import("database/api/.generated/runtime/library").JsonValue;
|
|
556
|
+
subType: number | null;
|
|
557
|
+
startTimestamp: bigint;
|
|
558
|
+
endTimestamp: bigint;
|
|
559
|
+
computeChainId: number;
|
|
560
|
+
distributionChainId: number;
|
|
561
|
+
campaignId: string;
|
|
562
|
+
rewardTokenId: string;
|
|
563
|
+
amount: string;
|
|
564
|
+
opportunityId: string;
|
|
565
|
+
creatorAddress: string;
|
|
566
|
+
}[];
|
|
550
567
|
tvl: number;
|
|
551
568
|
apr: number;
|
|
552
569
|
dailyRewards: number;
|
|
@@ -2151,7 +2168,7 @@ declare const eden: {
|
|
|
2151
2168
|
fetch?: RequestInit | undefined;
|
|
2152
2169
|
}) => Promise<import("@elysiajs/eden").Treaty.TreatyResponse<{
|
|
2153
2170
|
200: (import("../modules/v4/claims").ClaimModel & {
|
|
2154
|
-
token
|
|
2171
|
+
token?: import("../modules/v4").Token["model"];
|
|
2155
2172
|
})[];
|
|
2156
2173
|
}>>;
|
|
2157
2174
|
}) & {};
|
|
@@ -3135,6 +3152,21 @@ export declare const MerklApi: (domain: string | import("elysia").default<"", fa
|
|
|
3135
3152
|
identifier: string;
|
|
3136
3153
|
chainId: number;
|
|
3137
3154
|
action: import("../../database/api/.generated").$Enums.OpportunityAction;
|
|
3155
|
+
Campaigns: {
|
|
3156
|
+
type: import("../../database/api/.generated").$Enums.CampaignType;
|
|
3157
|
+
id: string;
|
|
3158
|
+
params: import("database/api/.generated/runtime/library").JsonValue;
|
|
3159
|
+
subType: number | null;
|
|
3160
|
+
startTimestamp: bigint;
|
|
3161
|
+
endTimestamp: bigint;
|
|
3162
|
+
computeChainId: number;
|
|
3163
|
+
distributionChainId: number;
|
|
3164
|
+
campaignId: string;
|
|
3165
|
+
rewardTokenId: string;
|
|
3166
|
+
amount: string;
|
|
3167
|
+
opportunityId: string;
|
|
3168
|
+
creatorAddress: string;
|
|
3169
|
+
}[];
|
|
3138
3170
|
tvl: number;
|
|
3139
3171
|
apr: number;
|
|
3140
3172
|
dailyRewards: number;
|
|
@@ -3180,7 +3212,9 @@ export declare const MerklApi: (domain: string | import("elysia").default<"", fa
|
|
|
3180
3212
|
params: {
|
|
3181
3213
|
id: string;
|
|
3182
3214
|
};
|
|
3183
|
-
query:
|
|
3215
|
+
query: {
|
|
3216
|
+
test?: boolean | undefined;
|
|
3217
|
+
};
|
|
3184
3218
|
headers: unknown;
|
|
3185
3219
|
response: {
|
|
3186
3220
|
200: {
|
|
@@ -5471,7 +5505,7 @@ export declare const MerklApi: (domain: string | import("elysia").default<"", fa
|
|
|
5471
5505
|
headers: unknown;
|
|
5472
5506
|
response: {
|
|
5473
5507
|
200: (import("../modules/v4/claims").ClaimModel & {
|
|
5474
|
-
token
|
|
5508
|
+
token?: import("../modules/v4").Token["model"];
|
|
5475
5509
|
})[];
|
|
5476
5510
|
};
|
|
5477
5511
|
};
|
|
@@ -6441,11 +6475,13 @@ export declare const MerklApi: (domain: string | import("elysia").default<"", fa
|
|
|
6441
6475
|
tags: string[];
|
|
6442
6476
|
};
|
|
6443
6477
|
}>>;
|
|
6444
|
-
get: (options
|
|
6478
|
+
get: (options: {
|
|
6445
6479
|
headers?: Record<string, unknown> | undefined;
|
|
6446
|
-
query
|
|
6480
|
+
query: {
|
|
6481
|
+
test?: boolean | undefined;
|
|
6482
|
+
};
|
|
6447
6483
|
fetch?: RequestInit | undefined;
|
|
6448
|
-
}
|
|
6484
|
+
}) => Promise<import("@elysiajs/eden").Treaty.TreatyResponse<{
|
|
6449
6485
|
200: {
|
|
6450
6486
|
protocol?: {
|
|
6451
6487
|
name: string;
|
|
@@ -6858,6 +6894,21 @@ export declare const MerklApi: (domain: string | import("elysia").default<"", fa
|
|
|
6858
6894
|
identifier: string;
|
|
6859
6895
|
chainId: number;
|
|
6860
6896
|
action: import("../../database/api/.generated").$Enums.OpportunityAction;
|
|
6897
|
+
Campaigns: {
|
|
6898
|
+
type: import("../../database/api/.generated").$Enums.CampaignType;
|
|
6899
|
+
id: string;
|
|
6900
|
+
params: import("database/api/.generated/runtime/library").JsonValue;
|
|
6901
|
+
subType: number | null;
|
|
6902
|
+
startTimestamp: bigint;
|
|
6903
|
+
endTimestamp: bigint;
|
|
6904
|
+
computeChainId: number;
|
|
6905
|
+
distributionChainId: number;
|
|
6906
|
+
campaignId: string;
|
|
6907
|
+
rewardTokenId: string;
|
|
6908
|
+
amount: string;
|
|
6909
|
+
opportunityId: string;
|
|
6910
|
+
creatorAddress: string;
|
|
6911
|
+
}[];
|
|
6861
6912
|
tvl: number;
|
|
6862
6913
|
apr: number;
|
|
6863
6914
|
dailyRewards: number;
|
|
@@ -8462,7 +8513,7 @@ export declare const MerklApi: (domain: string | import("elysia").default<"", fa
|
|
|
8462
8513
|
fetch?: RequestInit | undefined;
|
|
8463
8514
|
}) => Promise<import("@elysiajs/eden").Treaty.TreatyResponse<{
|
|
8464
8515
|
200: (import("../modules/v4/claims").ClaimModel & {
|
|
8465
|
-
token
|
|
8516
|
+
token?: import("../modules/v4").Token["model"];
|
|
8466
8517
|
})[];
|
|
8467
8518
|
}>>;
|
|
8468
8519
|
}) & {};
|
package/dist/src/index.d.ts
CHANGED
|
@@ -337,6 +337,21 @@ declare const app: Elysia<"", false, {
|
|
|
337
337
|
identifier: string;
|
|
338
338
|
chainId: number;
|
|
339
339
|
action: import("../database/api/.generated").$Enums.OpportunityAction;
|
|
340
|
+
Campaigns: {
|
|
341
|
+
type: import("../database/api/.generated").$Enums.CampaignType;
|
|
342
|
+
id: string;
|
|
343
|
+
params: import("database/api/.generated/runtime/library").JsonValue;
|
|
344
|
+
subType: number | null;
|
|
345
|
+
startTimestamp: bigint;
|
|
346
|
+
endTimestamp: bigint;
|
|
347
|
+
computeChainId: number;
|
|
348
|
+
distributionChainId: number;
|
|
349
|
+
campaignId: string;
|
|
350
|
+
rewardTokenId: string;
|
|
351
|
+
amount: string;
|
|
352
|
+
opportunityId: string;
|
|
353
|
+
creatorAddress: string;
|
|
354
|
+
}[];
|
|
340
355
|
tvl: number;
|
|
341
356
|
apr: number;
|
|
342
357
|
dailyRewards: number;
|
|
@@ -382,7 +397,9 @@ declare const app: Elysia<"", false, {
|
|
|
382
397
|
params: {
|
|
383
398
|
id: string;
|
|
384
399
|
};
|
|
385
|
-
query:
|
|
400
|
+
query: {
|
|
401
|
+
test?: boolean | undefined;
|
|
402
|
+
};
|
|
386
403
|
headers: unknown;
|
|
387
404
|
response: {
|
|
388
405
|
200: {
|
|
@@ -2673,7 +2690,7 @@ declare const app: Elysia<"", false, {
|
|
|
2673
2690
|
headers: unknown;
|
|
2674
2691
|
response: {
|
|
2675
2692
|
200: (import("./modules/v4/claims").ClaimModel & {
|
|
2676
|
-
token
|
|
2693
|
+
token?: import("./modules/v4").Token["model"];
|
|
2677
2694
|
})[];
|
|
2678
2695
|
};
|
|
2679
2696
|
};
|
|
@@ -4,6 +4,6 @@ import type { UserUniqueModel } from "../user";
|
|
|
4
4
|
import type { ClaimModel } from "./claims.model";
|
|
5
5
|
export declare abstract class ClaimService {
|
|
6
6
|
static getHistoricalClaims(params: UserUniqueModel, chainFilter?: ChainId[]): Promise<(ClaimModel & {
|
|
7
|
-
token
|
|
7
|
+
token?: Token["model"];
|
|
8
8
|
})[]>;
|
|
9
9
|
}
|
|
@@ -25,11 +25,11 @@ export class ClaimService {
|
|
|
25
25
|
.flatMap(p => p.value ?? []) // null/undefined claim arrays
|
|
26
26
|
.filter(claim => {
|
|
27
27
|
// Ensure the claim's token exists and matches the chainFilter
|
|
28
|
-
const token = claim?.token ? tokens[claim.token.toLowerCase()] :
|
|
28
|
+
const token = claim?.token ? tokens[claim.token.toLowerCase()] : undefined;
|
|
29
29
|
return token && (!chainFilter.length || chainFilter.includes(token.chainId));
|
|
30
30
|
})
|
|
31
31
|
.map(claim => {
|
|
32
|
-
const token = claim?.token ? tokens[claim.token.toLowerCase()] :
|
|
32
|
+
const token = claim?.token ? tokens[claim.token.toLowerCase()] : undefined;
|
|
33
33
|
return {
|
|
34
34
|
...claim,
|
|
35
35
|
token,
|
|
@@ -206,6 +206,21 @@ export declare const OpportunityController: Elysia<"/opportunities", false, {
|
|
|
206
206
|
identifier: string;
|
|
207
207
|
chainId: number;
|
|
208
208
|
action: import("../../../../database/api/.generated").$Enums.OpportunityAction;
|
|
209
|
+
Campaigns: {
|
|
210
|
+
type: import("../../../../database/api/.generated").$Enums.CampaignType;
|
|
211
|
+
id: string;
|
|
212
|
+
params: import("database/api/.generated/runtime/library").JsonValue;
|
|
213
|
+
subType: number | null;
|
|
214
|
+
startTimestamp: bigint;
|
|
215
|
+
endTimestamp: bigint;
|
|
216
|
+
computeChainId: number;
|
|
217
|
+
distributionChainId: number;
|
|
218
|
+
campaignId: string;
|
|
219
|
+
rewardTokenId: string;
|
|
220
|
+
amount: string;
|
|
221
|
+
opportunityId: string;
|
|
222
|
+
creatorAddress: string;
|
|
223
|
+
}[];
|
|
209
224
|
tvl: number;
|
|
210
225
|
apr: number;
|
|
211
226
|
dailyRewards: number;
|
|
@@ -251,7 +266,9 @@ export declare const OpportunityController: Elysia<"/opportunities", false, {
|
|
|
251
266
|
params: {
|
|
252
267
|
id: string;
|
|
253
268
|
};
|
|
254
|
-
query:
|
|
269
|
+
query: {
|
|
270
|
+
test?: boolean | undefined;
|
|
271
|
+
};
|
|
255
272
|
headers: unknown;
|
|
256
273
|
response: {
|
|
257
274
|
200: {
|
|
@@ -2,7 +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 { CreateOpportunityDto, GetOpportunitiesQueryDto, OpportunityAggregateFieldDto, OpportunityIdDto, OpportunityResourceDto, OpportunityUniqueDto, OpportunityWithCampaignsResourceDto, UpdateOpportunityDto, } from "./opportunity.model";
|
|
5
|
+
import { CreateOpportunityDto, GetOpportunitiesQueryDto, GetOpportunityQueryDto, OpportunityAggregateFieldDto, OpportunityIdDto, OpportunityResourceDto, OpportunityUniqueDto, OpportunityWithCampaignsResourceDto, UpdateOpportunityDto, } from "./opportunity.model";
|
|
6
6
|
import { OpportunityService } from "./opportunity.service";
|
|
7
7
|
import { transformId } from "./transform-id.pipe";
|
|
8
8
|
import { validateId } from "./validate-id.pipe";
|
|
@@ -59,16 +59,16 @@ export const OpportunityController = new Elysia({
|
|
|
59
59
|
response: { 200: t.Number() },
|
|
60
60
|
})
|
|
61
61
|
// ─── Get An Opportunity By Id ────────────────────────────────────────
|
|
62
|
-
.get("/:id", async ({ params }) => {
|
|
62
|
+
.get("/:id", async ({ params, query }) => {
|
|
63
63
|
try {
|
|
64
64
|
if (!params.id.includes("-"))
|
|
65
|
-
return await OpportunityService.getUniqueOrThrow(params.id);
|
|
65
|
+
return await OpportunityService.getUniqueOrThrow(params.id, query.test ?? false);
|
|
66
66
|
const [chainId, type, identifier] = params.id.split("-");
|
|
67
67
|
return await OpportunityService.getUniqueOrThrow({
|
|
68
68
|
chainId: +chainId,
|
|
69
69
|
type: type,
|
|
70
70
|
identifier,
|
|
71
|
-
});
|
|
71
|
+
}, query.test ?? false);
|
|
72
72
|
}
|
|
73
73
|
catch (err) {
|
|
74
74
|
if (err.code && err.code === "P2025")
|
|
@@ -77,6 +77,7 @@ export const OpportunityController = new Elysia({
|
|
|
77
77
|
}
|
|
78
78
|
}, {
|
|
79
79
|
params: OpportunityUniqueDto,
|
|
80
|
+
query: GetOpportunityQueryDto,
|
|
80
81
|
transform: transformId,
|
|
81
82
|
beforeHandle: validateId,
|
|
82
83
|
response: {
|
|
@@ -291,6 +291,9 @@ export declare const GetOpportunitiesQueryDto: import("@sinclair/typebox").TObje
|
|
|
291
291
|
page: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
|
|
292
292
|
items: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
|
|
293
293
|
}>;
|
|
294
|
+
export declare const GetOpportunityQueryDto: import("@sinclair/typebox").TObject<{
|
|
295
|
+
test: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
|
|
296
|
+
}>;
|
|
294
297
|
export declare const CreateOpportunityDto: import("@sinclair/typebox").TObject<{
|
|
295
298
|
chainId: import("@sinclair/typebox").TNumber;
|
|
296
299
|
type: import("@sinclair/typebox").TEnum<{
|
|
@@ -347,6 +350,7 @@ export declare const UpdateOpportunityDto: import("@sinclair/typebox").TObject<{
|
|
|
347
350
|
tags: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TArray<import("@sinclair/typebox").TString>>;
|
|
348
351
|
}>;
|
|
349
352
|
export type GetOpportunitiesQueryModel = typeof GetOpportunitiesQueryDto.static;
|
|
353
|
+
export type GetOpportunityQueryModel = typeof GetOpportunityQueryDto.static;
|
|
350
354
|
export type CreateOpportunityModel = typeof CreateOpportunityDto.static & {
|
|
351
355
|
id: string;
|
|
352
356
|
};
|
|
@@ -70,6 +70,9 @@ export const GetOpportunitiesQueryDto = t.Object({
|
|
|
70
70
|
page: t.Optional(t.Numeric({ description: "0-indexed page number", default: 0 })),
|
|
71
71
|
items: t.Optional(t.Numeric({ description: "Number of items returned by page", default: 20 })), // items per page
|
|
72
72
|
});
|
|
73
|
+
export const GetOpportunityQueryDto = t.Object({
|
|
74
|
+
test: t.Optional(t.Boolean({ description: "Include test campaigns" })),
|
|
75
|
+
});
|
|
73
76
|
export const CreateOpportunityDto = t.Object({
|
|
74
77
|
chainId: t.Number(),
|
|
75
78
|
type: t.Enum(CampaignType),
|
|
@@ -168,12 +168,27 @@ export declare abstract class OpportunityRepository {
|
|
|
168
168
|
apr: number;
|
|
169
169
|
dailyRewards: number;
|
|
170
170
|
}) | null>;
|
|
171
|
-
static findUniqueOrThrow(id: string): Promise<{
|
|
171
|
+
static findUniqueOrThrow(id: string, withTest?: boolean): Promise<{
|
|
172
172
|
Chain: {
|
|
173
173
|
name: string;
|
|
174
174
|
id: number;
|
|
175
175
|
icon: string;
|
|
176
176
|
};
|
|
177
|
+
Campaigns: {
|
|
178
|
+
type: import("../../../../database/api/.generated").$Enums.CampaignType;
|
|
179
|
+
id: string;
|
|
180
|
+
params: Prisma.JsonValue;
|
|
181
|
+
subType: number | null;
|
|
182
|
+
startTimestamp: bigint;
|
|
183
|
+
endTimestamp: bigint;
|
|
184
|
+
computeChainId: number;
|
|
185
|
+
distributionChainId: number;
|
|
186
|
+
campaignId: string;
|
|
187
|
+
rewardTokenId: string;
|
|
188
|
+
amount: string;
|
|
189
|
+
opportunityId: string;
|
|
190
|
+
creatorAddress: string;
|
|
191
|
+
}[];
|
|
177
192
|
Tokens: {
|
|
178
193
|
symbol: string;
|
|
179
194
|
name: string | null;
|
|
@@ -6,7 +6,7 @@ import { ProtocolService } from "../protocol";
|
|
|
6
6
|
import { RewardService } from "../reward";
|
|
7
7
|
import { TvlService } from "../tvl";
|
|
8
8
|
export class OpportunityRepository {
|
|
9
|
-
static #getRecordInclusion() {
|
|
9
|
+
static #getRecordInclusion(withTest = true) {
|
|
10
10
|
return {
|
|
11
11
|
AprRecords: {
|
|
12
12
|
take: 1,
|
|
@@ -23,6 +23,11 @@ export class OpportunityRepository {
|
|
|
23
23
|
orderBy: { timestamp: "desc" },
|
|
24
24
|
include: {
|
|
25
25
|
DailyRewardsBreakdown: {
|
|
26
|
+
where: {
|
|
27
|
+
Campaign: {
|
|
28
|
+
RewardToken: { isTest: withTest },
|
|
29
|
+
},
|
|
30
|
+
},
|
|
26
31
|
include: {
|
|
27
32
|
Campaign: {
|
|
28
33
|
select: {
|
|
@@ -120,14 +125,23 @@ export class OpportunityRepository {
|
|
|
120
125
|
where: { id },
|
|
121
126
|
});
|
|
122
127
|
}
|
|
123
|
-
static async findUniqueOrThrow(id) {
|
|
128
|
+
static async findUniqueOrThrow(id, withTest = true) {
|
|
124
129
|
return await apiDbClient.opportunity.findUniqueOrThrow({
|
|
125
130
|
include: {
|
|
126
|
-
...OpportunityRepository.#getRecordInclusion(),
|
|
131
|
+
...OpportunityRepository.#getRecordInclusion(withTest),
|
|
127
132
|
Chain: true,
|
|
128
133
|
MainProtocol: true,
|
|
129
134
|
Protocols: true,
|
|
130
135
|
Tokens: true,
|
|
136
|
+
Campaigns: withTest
|
|
137
|
+
? undefined
|
|
138
|
+
: {
|
|
139
|
+
where: {
|
|
140
|
+
RewardToken: {
|
|
141
|
+
isTest: false,
|
|
142
|
+
},
|
|
143
|
+
},
|
|
144
|
+
},
|
|
131
145
|
},
|
|
132
146
|
where: { id },
|
|
133
147
|
});
|
|
@@ -241,7 +255,7 @@ export class OpportunityRepository {
|
|
|
241
255
|
take: items,
|
|
242
256
|
skip: page * items,
|
|
243
257
|
include: {
|
|
244
|
-
...OpportunityRepository.#getRecordInclusion(),
|
|
258
|
+
...OpportunityRepository.#getRecordInclusion(test),
|
|
245
259
|
MainProtocol: true,
|
|
246
260
|
Chain: true,
|
|
247
261
|
Protocols: true,
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { type CreateCampaignModel } from "../campaign";
|
|
2
2
|
import { Prisma } from "../../../../database/api/.generated";
|
|
3
3
|
import type { ChainId, MerklChainId } from "@sdk";
|
|
4
|
-
import type { CreateOpportunityModel, GetOpportunitiesQueryModel, LightOpportunityFromDB,
|
|
4
|
+
import type { CreateOpportunityModel, GetOpportunitiesQueryModel, LightOpportunityFromDB, OpportunityResourceModel, OpportunityUnique, OpportunityWithCampaignsResourceModel, UpdateOpportunityModel } from "./opportunity.model";
|
|
5
5
|
import { OpportunityRepository } from "./opportunity.repository";
|
|
6
6
|
export declare abstract class OpportunityService {
|
|
7
|
+
#private;
|
|
7
8
|
static hashId(opportunity: OpportunityUnique): string;
|
|
8
9
|
/**
|
|
9
10
|
* create an opportunity without campaigns
|
|
@@ -78,15 +79,9 @@ export declare abstract class OpportunityService {
|
|
|
78
79
|
depositUrl: any;
|
|
79
80
|
tags: string[];
|
|
80
81
|
}>;
|
|
81
|
-
/**
|
|
82
|
-
* build/fetch metadata of a campaign's opportunity
|
|
83
|
-
* @param campaign
|
|
84
|
-
* @returns {OpportunityMetadata}
|
|
85
|
-
*/
|
|
86
|
-
static getMetadata(campaign: Omit<CreateCampaignModel, "id">): Promise<OpportunityMetadata>;
|
|
87
82
|
static updateMetadata(chain: ChainId): Promise<void>;
|
|
88
83
|
static getUniqueWithCampaignsOrThrow(opportunityId: string | OpportunityUnique): Promise<OpportunityWithCampaignsResourceModel>;
|
|
89
|
-
static getUniqueOrThrow(opportunityId: string | OpportunityUnique): Promise<OpportunityResourceModel>;
|
|
84
|
+
static getUniqueOrThrow(opportunityId: string | OpportunityUnique, withTest?: boolean): Promise<OpportunityResourceModel>;
|
|
90
85
|
/**
|
|
91
86
|
* Get the list of opportunities satisfying the query
|
|
92
87
|
* @param query
|
|
@@ -176,6 +171,21 @@ export declare abstract class OpportunityService {
|
|
|
176
171
|
identifier: string;
|
|
177
172
|
chainId: number;
|
|
178
173
|
action: import("../../../../database/api/.generated").$Enums.OpportunityAction;
|
|
174
|
+
Campaigns: {
|
|
175
|
+
type: import("../../../../database/api/.generated").$Enums.CampaignType;
|
|
176
|
+
id: string;
|
|
177
|
+
params: Prisma.JsonValue;
|
|
178
|
+
subType: number | null;
|
|
179
|
+
startTimestamp: bigint;
|
|
180
|
+
endTimestamp: bigint;
|
|
181
|
+
computeChainId: number;
|
|
182
|
+
distributionChainId: number;
|
|
183
|
+
campaignId: string;
|
|
184
|
+
rewardTokenId: string;
|
|
185
|
+
amount: string;
|
|
186
|
+
opportunityId: string;
|
|
187
|
+
creatorAddress: string;
|
|
188
|
+
}[];
|
|
179
189
|
tvl: number;
|
|
180
190
|
apr: number;
|
|
181
191
|
dailyRewards: number;
|
|
@@ -264,6 +274,21 @@ export declare abstract class OpportunityService {
|
|
|
264
274
|
identifier: string;
|
|
265
275
|
chainId: number;
|
|
266
276
|
action: import("../../../../database/api/.generated").$Enums.OpportunityAction;
|
|
277
|
+
Campaigns: {
|
|
278
|
+
type: import("../../../../database/api/.generated").$Enums.CampaignType;
|
|
279
|
+
id: string;
|
|
280
|
+
params: Prisma.JsonValue;
|
|
281
|
+
subType: number | null;
|
|
282
|
+
startTimestamp: bigint;
|
|
283
|
+
endTimestamp: bigint;
|
|
284
|
+
computeChainId: number;
|
|
285
|
+
distributionChainId: number;
|
|
286
|
+
campaignId: string;
|
|
287
|
+
rewardTokenId: string;
|
|
288
|
+
amount: string;
|
|
289
|
+
opportunityId: string;
|
|
290
|
+
creatorAddress: string;
|
|
291
|
+
}[];
|
|
267
292
|
tvl: number;
|
|
268
293
|
apr: number;
|
|
269
294
|
dailyRewards: number;
|
|
@@ -409,6 +434,21 @@ export declare abstract class OpportunityService {
|
|
|
409
434
|
identifier: string;
|
|
410
435
|
chainId: number;
|
|
411
436
|
action: import("../../../../database/api/.generated").$Enums.OpportunityAction;
|
|
437
|
+
Campaigns: {
|
|
438
|
+
type: import("../../../../database/api/.generated").$Enums.CampaignType;
|
|
439
|
+
id: string;
|
|
440
|
+
params: Prisma.JsonValue;
|
|
441
|
+
subType: number | null;
|
|
442
|
+
startTimestamp: bigint;
|
|
443
|
+
endTimestamp: bigint;
|
|
444
|
+
computeChainId: number;
|
|
445
|
+
distributionChainId: number;
|
|
446
|
+
campaignId: string;
|
|
447
|
+
rewardTokenId: string;
|
|
448
|
+
amount: string;
|
|
449
|
+
opportunityId: string;
|
|
450
|
+
creatorAddress: string;
|
|
451
|
+
}[];
|
|
412
452
|
tvl: number;
|
|
413
453
|
apr: number;
|
|
414
454
|
dailyRewards: number;
|
|
@@ -449,6 +489,21 @@ export declare abstract class OpportunityService {
|
|
|
449
489
|
identifier: string;
|
|
450
490
|
chainId: number;
|
|
451
491
|
action: import("../../../../database/api/.generated").$Enums.OpportunityAction;
|
|
492
|
+
Campaigns: {
|
|
493
|
+
type: import("../../../../database/api/.generated").$Enums.CampaignType;
|
|
494
|
+
id: string;
|
|
495
|
+
params: Prisma.JsonValue;
|
|
496
|
+
subType: number | null;
|
|
497
|
+
startTimestamp: bigint;
|
|
498
|
+
endTimestamp: bigint;
|
|
499
|
+
computeChainId: number;
|
|
500
|
+
distributionChainId: number;
|
|
501
|
+
campaignId: string;
|
|
502
|
+
rewardTokenId: string;
|
|
503
|
+
amount: string;
|
|
504
|
+
opportunityId: string;
|
|
505
|
+
creatorAddress: string;
|
|
506
|
+
}[];
|
|
452
507
|
tvl: number;
|
|
453
508
|
apr: number;
|
|
454
509
|
dailyRewards: number;
|
|
@@ -34,9 +34,56 @@ export class OpportunityService {
|
|
|
34
34
|
const id = OpportunityService.hashId(newOpp);
|
|
35
35
|
return await OpportunityRepository.create({ ...newOpp, id });
|
|
36
36
|
}
|
|
37
|
+
/**
|
|
38
|
+
* build/fetch metadata of a campaign's opportunity
|
|
39
|
+
* @param campaign
|
|
40
|
+
* @returns {OpportunityMetadata}
|
|
41
|
+
*/
|
|
42
|
+
static async #getMetadata(campaign) {
|
|
43
|
+
const campaignType = CampaignService.getTypeFromV3(campaign.type);
|
|
44
|
+
const campaignParams = JSON.parse(campaign.params);
|
|
45
|
+
const chainId = campaign.computeChainId === 0 ? campaign.chainId : campaign.computeChainId;
|
|
46
|
+
switch (campaignType) {
|
|
47
|
+
case "CLAMM":
|
|
48
|
+
return getClammMetadata(chainId, campaignParams);
|
|
49
|
+
case "ERC20":
|
|
50
|
+
return getErc20Metadata(chainId, campaign.chainId, // distributionChainId
|
|
51
|
+
campaign.campaignId, campaign.rewardTokenAddress, campaign.amount, campaignParams);
|
|
52
|
+
case "ERC20_SNAPSHOT":
|
|
53
|
+
return getErc20SnapshotMetadata(chainId, campaignParams);
|
|
54
|
+
case "JSON_AIRDROP":
|
|
55
|
+
return getJsonAirdropMetadata(chainId, campaign.creator, campaignParams);
|
|
56
|
+
case "SILO":
|
|
57
|
+
return getSiloMetadata(chainId, campaign.subType, campaignParams);
|
|
58
|
+
case "RADIANT":
|
|
59
|
+
return getRadiantMetadata(chainId, campaign.subType, campaignParams);
|
|
60
|
+
case "MORPHO":
|
|
61
|
+
return getMorphoMetadata(chainId, campaign.subType, campaignParams);
|
|
62
|
+
case "DOLOMITE":
|
|
63
|
+
return getDolomiteMetadata(chainId, campaign.subType, campaignParams);
|
|
64
|
+
case "BADGER":
|
|
65
|
+
return getBadgerMetadata(chainId, campaignParams);
|
|
66
|
+
case "COMPOUND":
|
|
67
|
+
return getCompoundMetadata(chainId, campaign.subType, campaignParams);
|
|
68
|
+
case "AJNA":
|
|
69
|
+
return getAjnaMetadata(chainId, campaign.subType, campaignParams);
|
|
70
|
+
case "EIGENLAYER":
|
|
71
|
+
return getEigenLayerMetadata(chainId, campaignParams);
|
|
72
|
+
case "EULER":
|
|
73
|
+
return getEulerMetadata(chainId, campaign.campaignId, campaign.subType, campaign.rewardTokenAddress, campaign.amount, campaignParams);
|
|
74
|
+
case "INVALID":
|
|
75
|
+
return {
|
|
76
|
+
name: "Invalid Campaigns",
|
|
77
|
+
action: OpportunityAction.INVALID,
|
|
78
|
+
tokens: [],
|
|
79
|
+
};
|
|
80
|
+
default:
|
|
81
|
+
throw "UNKNOWN CAMPAIGN TYPE";
|
|
82
|
+
}
|
|
83
|
+
}
|
|
37
84
|
static async createFromCampaign(campaign, upsert = false) {
|
|
38
85
|
const campaignType = CampaignService.getTypeFromV3(campaign.type);
|
|
39
|
-
const metadata = await OpportunityService
|
|
86
|
+
const metadata = await OpportunityService.#getMetadata(campaign);
|
|
40
87
|
metadata.tags = [...((await UserService.findUnique(campaign.creator))?.tags ?? []), ...(campaign?.tags ?? [])];
|
|
41
88
|
const opportunityId = OpportunityService.hashId({
|
|
42
89
|
chainId: campaign.computeChainId,
|
|
@@ -89,53 +136,6 @@ export class OpportunityService {
|
|
|
89
136
|
}, true // Upserting
|
|
90
137
|
);
|
|
91
138
|
}
|
|
92
|
-
/**
|
|
93
|
-
* build/fetch metadata of a campaign's opportunity
|
|
94
|
-
* @param campaign
|
|
95
|
-
* @returns {OpportunityMetadata}
|
|
96
|
-
*/
|
|
97
|
-
static async getMetadata(campaign) {
|
|
98
|
-
const campaignType = CampaignService.getTypeFromV3(campaign.type);
|
|
99
|
-
const campaignParams = JSON.parse(campaign.params);
|
|
100
|
-
const chainId = campaign.computeChainId === 0 ? campaign.chainId : campaign.computeChainId;
|
|
101
|
-
switch (campaignType) {
|
|
102
|
-
case "CLAMM":
|
|
103
|
-
return getClammMetadata(chainId, campaignParams);
|
|
104
|
-
case "ERC20":
|
|
105
|
-
return getErc20Metadata(chainId, campaign.chainId, // distributionChainId
|
|
106
|
-
campaign.campaignId, campaign.rewardTokenAddress, campaign.amount, campaignParams);
|
|
107
|
-
case "ERC20_SNAPSHOT":
|
|
108
|
-
return getErc20SnapshotMetadata(chainId, campaignParams);
|
|
109
|
-
case "JSON_AIRDROP":
|
|
110
|
-
return getJsonAirdropMetadata(chainId, campaign.creator, campaignParams);
|
|
111
|
-
case "SILO":
|
|
112
|
-
return getSiloMetadata(chainId, campaign.subType, campaignParams);
|
|
113
|
-
case "RADIANT":
|
|
114
|
-
return getRadiantMetadata(chainId, campaign.subType, campaignParams);
|
|
115
|
-
case "MORPHO":
|
|
116
|
-
return getMorphoMetadata(chainId, campaign.subType, campaignParams);
|
|
117
|
-
case "DOLOMITE":
|
|
118
|
-
return getDolomiteMetadata(chainId, campaign.subType, campaignParams);
|
|
119
|
-
case "BADGER":
|
|
120
|
-
return getBadgerMetadata(chainId, campaignParams);
|
|
121
|
-
case "COMPOUND":
|
|
122
|
-
return getCompoundMetadata(chainId, campaign.subType, campaignParams);
|
|
123
|
-
case "AJNA":
|
|
124
|
-
return getAjnaMetadata(chainId, campaign.subType, campaignParams);
|
|
125
|
-
case "EIGENLAYER":
|
|
126
|
-
return getEigenLayerMetadata(chainId, campaignParams);
|
|
127
|
-
case "EULER":
|
|
128
|
-
return getEulerMetadata(chainId, campaign.campaignId, campaign.subType, campaign.rewardTokenAddress, campaign.amount, campaignParams);
|
|
129
|
-
case "INVALID":
|
|
130
|
-
return {
|
|
131
|
-
name: "Invalid Campaigns",
|
|
132
|
-
action: OpportunityAction.INVALID,
|
|
133
|
-
tokens: [],
|
|
134
|
-
};
|
|
135
|
-
default:
|
|
136
|
-
throw "UNKNOWN CAMPAIGN TYPE";
|
|
137
|
-
}
|
|
138
|
-
}
|
|
139
139
|
static async updateMetadata(chain) {
|
|
140
140
|
try {
|
|
141
141
|
const opportunities = await OpportunityRepository.findManyWithCampaigns({
|
|
@@ -163,9 +163,9 @@ export class OpportunityService {
|
|
|
163
163
|
const formatted = OpportunityService.formatResponse(opportunity);
|
|
164
164
|
return Object.assign(formatted, { campaigns: Campaigns.map(CampaignService.format) });
|
|
165
165
|
}
|
|
166
|
-
static async getUniqueOrThrow(opportunityId) {
|
|
166
|
+
static async getUniqueOrThrow(opportunityId, withTest = false) {
|
|
167
167
|
const id = typeof opportunityId === "string" ? opportunityId : OpportunityService.hashId(opportunityId);
|
|
168
|
-
const opportunity = await OpportunityRepository.findUniqueOrThrow(id);
|
|
168
|
+
const opportunity = await OpportunityRepository.findUniqueOrThrow(id, withTest);
|
|
169
169
|
return OpportunityService.formatResponse(opportunity);
|
|
170
170
|
}
|
|
171
171
|
/**
|