@merkl/api 0.10.341 → 0.10.343
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 +79 -0
- package/dist/src/index.d.ts +31 -0
- package/dist/src/modules/v4/opportunity/opportunity.repository.js +17 -31
- package/dist/src/modules/v4/programPayload/programPayload.repository.js +4 -4
- package/dist/src/modules/v4/router.d.ts +31 -0
- package/dist/src/modules/v4/token/token.controller.d.ts +31 -0
- package/dist/src/modules/v4/token/token.controller.js +6 -0
- package/dist/src/modules/v4/token/token.repository.d.ts +13 -0
- package/dist/src/modules/v4/token/token.repository.js +11 -0
- package/dist/src/modules/v4/token/token.service.d.ts +14 -0
- package/dist/src/modules/v4/token/token.service.js +17 -2
- package/dist/tsconfig.package.tsbuildinfo +1 -1
- package/package.json +1 -1
package/dist/src/eden/index.d.ts
CHANGED
@@ -1022,6 +1022,30 @@ declare const eden: {
|
|
1022
1022
|
};
|
1023
1023
|
}>>;
|
1024
1024
|
}) & {
|
1025
|
+
reward: ((params: {
|
1026
|
+
chainId: string | number;
|
1027
|
+
}) => {
|
1028
|
+
get: (options?: {
|
1029
|
+
headers?: Record<string, unknown> | undefined;
|
1030
|
+
query?: Record<string, unknown> | undefined;
|
1031
|
+
fetch?: RequestInit | undefined;
|
1032
|
+
} | undefined) => Promise<import("@elysiajs/eden").Treaty.TreatyResponse<{
|
1033
|
+
200: {
|
1034
|
+
minimumAmountPerHour: any;
|
1035
|
+
symbol: string;
|
1036
|
+
name: string | null;
|
1037
|
+
id: string;
|
1038
|
+
icon: string;
|
1039
|
+
chainId: number;
|
1040
|
+
address: string;
|
1041
|
+
decimals: number;
|
1042
|
+
displaySymbol: string;
|
1043
|
+
verified: boolean;
|
1044
|
+
isTest: boolean;
|
1045
|
+
price: number | null;
|
1046
|
+
}[];
|
1047
|
+
}>>;
|
1048
|
+
}) & {};
|
1025
1049
|
balances: {
|
1026
1050
|
get: (options: {
|
1027
1051
|
headers?: Record<string, unknown> | undefined;
|
@@ -4295,6 +4319,37 @@ export declare const MerklApi: (domain: string | import("elysia").default<"", fa
|
|
4295
4319
|
};
|
4296
4320
|
};
|
4297
4321
|
};
|
4322
|
+
} & {
|
4323
|
+
tokens: {
|
4324
|
+
reward: {
|
4325
|
+
":chainId": {
|
4326
|
+
get: {
|
4327
|
+
body: unknown;
|
4328
|
+
params: {
|
4329
|
+
chainId: number;
|
4330
|
+
};
|
4331
|
+
query: unknown;
|
4332
|
+
headers: unknown;
|
4333
|
+
response: {
|
4334
|
+
200: {
|
4335
|
+
minimumAmountPerHour: any;
|
4336
|
+
symbol: string;
|
4337
|
+
name: string | null;
|
4338
|
+
id: string;
|
4339
|
+
icon: string;
|
4340
|
+
chainId: number;
|
4341
|
+
address: string;
|
4342
|
+
decimals: number;
|
4343
|
+
displaySymbol: string;
|
4344
|
+
verified: boolean;
|
4345
|
+
isTest: boolean;
|
4346
|
+
price: number | null;
|
4347
|
+
}[];
|
4348
|
+
};
|
4349
|
+
};
|
4350
|
+
};
|
4351
|
+
};
|
4352
|
+
};
|
4298
4353
|
} & {
|
4299
4354
|
tokens: {
|
4300
4355
|
balances: {
|
@@ -8016,6 +8071,30 @@ export declare const MerklApi: (domain: string | import("elysia").default<"", fa
|
|
8016
8071
|
};
|
8017
8072
|
}>>;
|
8018
8073
|
}) & {
|
8074
|
+
reward: ((params: {
|
8075
|
+
chainId: string | number;
|
8076
|
+
}) => {
|
8077
|
+
get: (options?: {
|
8078
|
+
headers?: Record<string, unknown> | undefined;
|
8079
|
+
query?: Record<string, unknown> | undefined;
|
8080
|
+
fetch?: RequestInit | undefined;
|
8081
|
+
} | undefined) => Promise<import("@elysiajs/eden").Treaty.TreatyResponse<{
|
8082
|
+
200: {
|
8083
|
+
minimumAmountPerHour: any;
|
8084
|
+
symbol: string;
|
8085
|
+
name: string | null;
|
8086
|
+
id: string;
|
8087
|
+
icon: string;
|
8088
|
+
chainId: number;
|
8089
|
+
address: string;
|
8090
|
+
decimals: number;
|
8091
|
+
displaySymbol: string;
|
8092
|
+
verified: boolean;
|
8093
|
+
isTest: boolean;
|
8094
|
+
price: number | null;
|
8095
|
+
}[];
|
8096
|
+
}>>;
|
8097
|
+
}) & {};
|
8019
8098
|
balances: {
|
8020
8099
|
get: (options: {
|
8021
8100
|
headers?: Record<string, unknown> | undefined;
|
package/dist/src/index.d.ts
CHANGED
@@ -1188,6 +1188,37 @@ declare const app: Elysia<"", false, {
|
|
1188
1188
|
};
|
1189
1189
|
};
|
1190
1190
|
};
|
1191
|
+
} & {
|
1192
|
+
tokens: {
|
1193
|
+
reward: {
|
1194
|
+
":chainId": {
|
1195
|
+
get: {
|
1196
|
+
body: unknown;
|
1197
|
+
params: {
|
1198
|
+
chainId: number;
|
1199
|
+
};
|
1200
|
+
query: unknown;
|
1201
|
+
headers: unknown;
|
1202
|
+
response: {
|
1203
|
+
200: {
|
1204
|
+
minimumAmountPerHour: any;
|
1205
|
+
symbol: string;
|
1206
|
+
name: string | null;
|
1207
|
+
id: string;
|
1208
|
+
icon: string;
|
1209
|
+
chainId: number;
|
1210
|
+
address: string;
|
1211
|
+
decimals: number;
|
1212
|
+
displaySymbol: string;
|
1213
|
+
verified: boolean;
|
1214
|
+
isTest: boolean;
|
1215
|
+
price: number | null;
|
1216
|
+
}[];
|
1217
|
+
};
|
1218
|
+
};
|
1219
|
+
};
|
1220
|
+
};
|
1221
|
+
};
|
1191
1222
|
} & {
|
1192
1223
|
tokens: {
|
1193
1224
|
balances: {
|
@@ -205,43 +205,29 @@ export class OpportunityRepository {
|
|
205
205
|
const order = query.order ?? "desc";
|
206
206
|
const test = query.test ?? false;
|
207
207
|
const creatorAddress = query.creatorAddress ?? null;
|
208
|
-
const noFilters = Object.values(filters).every(v => v === undefined);
|
209
|
-
const tokensFilters = tokens?.map(symbol => ({
|
210
|
-
Tokens: { some: { symbol: { equals: symbol, mode: "insensitive" } } },
|
211
|
-
}));
|
212
208
|
const orderBy = {
|
213
209
|
[sort]: order,
|
214
210
|
};
|
215
211
|
return {
|
216
212
|
orderBy,
|
217
|
-
where:
|
218
|
-
? {
|
219
|
-
: {
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
|
225
|
-
|
226
|
-
|
227
|
-
|
228
|
-
|
229
|
-
|
230
|
-
|
231
|
-
},
|
232
|
-
{ mainProtocolId: !protocols ? undefined : { in: protocols } },
|
233
|
-
{
|
234
|
-
Campaigns: test || !creatorAddress
|
235
|
-
? undefined
|
236
|
-
: {
|
237
|
-
some: {
|
238
|
-
RewardToken: !test ? { isTest: false } : undefined,
|
239
|
-
creatorAddress: creatorAddress ? creatorAddress : undefined,
|
240
|
-
},
|
241
|
-
},
|
213
|
+
where: {
|
214
|
+
tags: !filters.tags ? undefined : { has: filters.tags },
|
215
|
+
tvl: filters.minimumTvl ? { gte: filters.minimumTvl } : undefined,
|
216
|
+
chainId: !chainIds ? undefined : { in: chainIds },
|
217
|
+
name: !filters.name ? undefined : { contains: filters.name, mode: "insensitive" },
|
218
|
+
action: !actions ? undefined : { in: actions },
|
219
|
+
status: !status ? undefined : { in: status },
|
220
|
+
mainProtocolId: !protocols ? undefined : { in: protocols },
|
221
|
+
Campaigns: test || !creatorAddress
|
222
|
+
? undefined
|
223
|
+
: {
|
224
|
+
some: {
|
225
|
+
RewardToken: !test ? { isTest: false } : undefined,
|
226
|
+
creatorAddress: creatorAddress ? creatorAddress : undefined,
|
242
227
|
},
|
243
|
-
|
244
|
-
},
|
228
|
+
},
|
229
|
+
Tokens: { some: { symbol: { in: tokens } } },
|
230
|
+
},
|
245
231
|
};
|
246
232
|
}
|
247
233
|
static async findMany(query) {
|
@@ -192,7 +192,7 @@ const ModeInterfaceCampaigns = {
|
|
192
192
|
hooks: [],
|
193
193
|
poolAddress: "0xd54aba804a676c8f265e2e6742d7b86d383d093b",
|
194
194
|
whitelist: [],
|
195
|
-
blacklist: [
|
195
|
+
blacklist: [],
|
196
196
|
url: "https://app.kim.exchange/pools/v4/0xd54aba804a676c8f265e2e6742d7b86d383d093b",
|
197
197
|
forwarders: [],
|
198
198
|
isOutOfRangeIncentivized: false,
|
@@ -403,7 +403,7 @@ const ModeInterfaceCampaigns = {
|
|
403
403
|
hooks: [],
|
404
404
|
poolAddress: "0x27f0976b26194c448d987c275bb409eab6083964",
|
405
405
|
whitelist: [],
|
406
|
-
blacklist: [
|
406
|
+
blacklist: [],
|
407
407
|
url: "https://app.kim.exchange/pools/v4/0x27f0976b26194c448d987c275bb409eab6083964",
|
408
408
|
forwarders: [],
|
409
409
|
isOutOfRangeIncentivized: false,
|
@@ -560,7 +560,7 @@ const ModeInterfaceCampaigns = {
|
|
560
560
|
hooks: [],
|
561
561
|
poolAddress: "0x34d6146f8fdd9599f574fc6a686d6f6498217b7e",
|
562
562
|
whitelist: [],
|
563
|
-
blacklist: [
|
563
|
+
blacklist: [],
|
564
564
|
url: "https://app.kim.exchange/pools/v4/0x34d6146f8fdd9599f574fc6a686d6f6498217b7e",
|
565
565
|
isOutOfRangeIncentivized: false,
|
566
566
|
weightFees: 2000,
|
@@ -635,7 +635,7 @@ const ModeInterfaceCampaigns = {
|
|
635
635
|
campaignType: Campaign.ERC20,
|
636
636
|
computeChainId: ChainId.MODE,
|
637
637
|
hooks: [],
|
638
|
-
targetToken: "
|
638
|
+
targetToken: "0xbEd575b0FeDa4F84b71144634693DaCc07749471",
|
639
639
|
whitelist: [],
|
640
640
|
blacklist: [],
|
641
641
|
url: "https://app.mitosis.org/?asset=ezETH&type=deposit&to=mode",
|
@@ -1066,6 +1066,37 @@ export declare const v4: Elysia<"/v4", false, {
|
|
1066
1066
|
};
|
1067
1067
|
};
|
1068
1068
|
};
|
1069
|
+
} & {
|
1070
|
+
tokens: {
|
1071
|
+
reward: {
|
1072
|
+
":chainId": {
|
1073
|
+
get: {
|
1074
|
+
body: unknown;
|
1075
|
+
params: {
|
1076
|
+
chainId: number;
|
1077
|
+
};
|
1078
|
+
query: unknown;
|
1079
|
+
headers: unknown;
|
1080
|
+
response: {
|
1081
|
+
200: {
|
1082
|
+
minimumAmountPerHour: any;
|
1083
|
+
symbol: string;
|
1084
|
+
name: string | null;
|
1085
|
+
id: string;
|
1086
|
+
icon: string;
|
1087
|
+
chainId: number;
|
1088
|
+
address: string;
|
1089
|
+
decimals: number;
|
1090
|
+
displaySymbol: string;
|
1091
|
+
verified: boolean;
|
1092
|
+
isTest: boolean;
|
1093
|
+
price: number | null;
|
1094
|
+
}[];
|
1095
|
+
};
|
1096
|
+
};
|
1097
|
+
};
|
1098
|
+
};
|
1099
|
+
};
|
1069
1100
|
} & {
|
1070
1101
|
tokens: {
|
1071
1102
|
balances: {
|
@@ -38,6 +38,37 @@ export declare const TokenController: Elysia<"/tokens", false, {
|
|
38
38
|
};
|
39
39
|
};
|
40
40
|
};
|
41
|
+
} & {
|
42
|
+
tokens: {
|
43
|
+
reward: {
|
44
|
+
":chainId": {
|
45
|
+
get: {
|
46
|
+
body: unknown;
|
47
|
+
params: {
|
48
|
+
chainId: number;
|
49
|
+
};
|
50
|
+
query: unknown;
|
51
|
+
headers: unknown;
|
52
|
+
response: {
|
53
|
+
200: {
|
54
|
+
minimumAmountPerHour: any;
|
55
|
+
symbol: string;
|
56
|
+
name: string | null;
|
57
|
+
id: string;
|
58
|
+
icon: string;
|
59
|
+
chainId: number;
|
60
|
+
address: string;
|
61
|
+
decimals: number;
|
62
|
+
displaySymbol: string;
|
63
|
+
verified: boolean;
|
64
|
+
isTest: boolean;
|
65
|
+
price: number | null;
|
66
|
+
}[];
|
67
|
+
};
|
68
|
+
};
|
69
|
+
};
|
70
|
+
};
|
71
|
+
};
|
41
72
|
} & {
|
42
73
|
tokens: {
|
43
74
|
balances: {
|
@@ -2,6 +2,7 @@ import { NotFoundError } from "../../../errors/NotFound.error";
|
|
2
2
|
import { AuthorizationHeadersDto, BackOfficeGuard } from "../../../guards/BackOffice.guard";
|
3
3
|
import { throwOnInvalidRequiredAddress, throwOnUnsupportedChainId } from "../../../utils/throw";
|
4
4
|
import Elysia from "elysia";
|
5
|
+
import { ChainDto } from "../accounting";
|
5
6
|
import { CreateTokenDto, FindUniqueTokenDto, GetTokenBalanceDto, GetTokenQueryDto, TokenIdDto, UpdateTokenDto, } from "./token.model";
|
6
7
|
import { TokenService } from "./token.service";
|
7
8
|
// ─── Tokens Controller ───────────────────────────────────────────────────────
|
@@ -17,6 +18,11 @@ export const TokenController = new Elysia({ prefix: "/tokens", detail: { tags: [
|
|
17
18
|
throw new NotFoundError();
|
18
19
|
}
|
19
20
|
}, { params: FindUniqueTokenDto })
|
21
|
+
// ─── Get Valid Reward Token ───────────────────────────────────────────
|
22
|
+
.get("/reward/:chainId", async ({ params }) => TokenService.getValidRewardTokens(params.chainId), {
|
23
|
+
params: ChainDto,
|
24
|
+
beforeHandle: ({ params }) => throwOnUnsupportedChainId(params.chainId),
|
25
|
+
})
|
20
26
|
// ─── Get Tokens With Balances ────────────────────────────────────────
|
21
27
|
.get("/balances", async ({ query: { chainId, userAddress, tokenAddress, additionalTokenAddresses } }) => {
|
22
28
|
if (tokenAddress)
|
@@ -42,6 +42,19 @@ export declare abstract class TokenRepository {
|
|
42
42
|
isTest: boolean;
|
43
43
|
price: number | null;
|
44
44
|
}[]>;
|
45
|
+
static findList(chainId: number, addresses: string[]): Promise<{
|
46
|
+
symbol: string;
|
47
|
+
name: string | null;
|
48
|
+
id: string;
|
49
|
+
icon: string;
|
50
|
+
chainId: number;
|
51
|
+
address: string;
|
52
|
+
decimals: number;
|
53
|
+
displaySymbol: string;
|
54
|
+
verified: boolean;
|
55
|
+
isTest: boolean;
|
56
|
+
price: number | null;
|
57
|
+
}[]>;
|
45
58
|
static countMany(query: GetTokenQueryModel): Promise<number>;
|
46
59
|
/**
|
47
60
|
* upsert a token on database
|
@@ -67,6 +67,17 @@ export class TokenRepository {
|
|
67
67
|
});
|
68
68
|
return tokens;
|
69
69
|
}
|
70
|
+
static async findList(chainId, addresses) {
|
71
|
+
const tokens = await apiDbClient.token.findMany({
|
72
|
+
where: {
|
73
|
+
chainId,
|
74
|
+
address: {
|
75
|
+
in: addresses,
|
76
|
+
},
|
77
|
+
},
|
78
|
+
});
|
79
|
+
return tokens;
|
80
|
+
}
|
70
81
|
static async countMany(query) {
|
71
82
|
const args = TokenRepository.#transformQueryToPrismaFilters(query);
|
72
83
|
return await apiDbClient.token.count(args);
|
@@ -188,6 +188,20 @@ export declare abstract class TokenService {
|
|
188
188
|
* @param address
|
189
189
|
*/
|
190
190
|
static getManyOrCreate(tokens: TokenModel[]): Promise<(Token["model"] | undefined)[]>;
|
191
|
+
static getValidRewardTokens(chainId: number): Promise<{
|
192
|
+
minimumAmountPerHour: any;
|
193
|
+
symbol: string;
|
194
|
+
name: string | null;
|
195
|
+
id: string;
|
196
|
+
icon: string;
|
197
|
+
chainId: number;
|
198
|
+
address: string;
|
199
|
+
decimals: number;
|
200
|
+
displaySymbol: string;
|
201
|
+
verified: boolean;
|
202
|
+
isTest: boolean;
|
203
|
+
price: number | null;
|
204
|
+
}[]>;
|
191
205
|
static update(id: string, data: UpdateTokenModel): Promise<{
|
192
206
|
symbol: string;
|
193
207
|
name: string | null;
|
@@ -3,8 +3,10 @@ import { getOnlyUserBalance } from "../../../libs/tokens/balances";
|
|
3
3
|
import { log } from "../../../utils/logger";
|
4
4
|
import { apiDbClient } from "../../../utils/prisma";
|
5
5
|
import { Prisma } from "../../../../database/api/.generated";
|
6
|
-
import { NETWORK_LABELS, bigIntToNumber } from "@sdk";
|
7
|
-
import { parseUnits } from "viem";
|
6
|
+
import { DistributionCreatorService, NETWORK_LABELS, bigIntToNumber } from "@sdk";
|
7
|
+
import { getAddress, parseUnits } from "viem";
|
8
|
+
import { CacheService } from "../cache";
|
9
|
+
import { TTLPresets } from "../cache/cache.model";
|
8
10
|
import { TokenRepository } from "./token.repository";
|
9
11
|
export class TokenService {
|
10
12
|
static hashId(token) {
|
@@ -283,6 +285,19 @@ export class TokenService {
|
|
283
285
|
}
|
284
286
|
}));
|
285
287
|
}
|
288
|
+
static async getValidRewardTokens(chainId) {
|
289
|
+
return await CacheService.wrap(TTLPresets.MIN_5, async (chainId) => {
|
290
|
+
const validRewardTokens = await DistributionCreatorService(chainId).validRewardTokens();
|
291
|
+
return (await TokenRepository.findList(chainId, validRewardTokens.map(t => getAddress(t.token)))).map(x => {
|
292
|
+
return {
|
293
|
+
...x,
|
294
|
+
minimumAmountPerHour: validRewardTokens
|
295
|
+
.find(t => getAddress(t.token) === x.address)
|
296
|
+
?.minimumAmountPerEpoch.toString(),
|
297
|
+
};
|
298
|
+
});
|
299
|
+
}, chainId);
|
300
|
+
}
|
286
301
|
static async update(id, data) {
|
287
302
|
// let iconUri = data.icon;
|
288
303
|
// if (data.iconFile) {
|