@merkl/api 0.20.120 → 0.20.122
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 +87 -5
- package/dist/src/index.d.ts +31 -1
- package/dist/src/libs/tokens/balances.js +1 -1
- package/dist/src/modules/v4/merklRoot/merklRoot.service.js +1 -2
- package/dist/src/modules/v4/router.d.ts +30 -0
- package/dist/src/modules/v4/token/token.controller.d.ts +30 -0
- package/dist/src/modules/v4/token/token.controller.js +7 -1
- package/dist/src/modules/v4/token/token.repository.js +1 -1
- package/dist/src/modules/v4/token/token.service.d.ts +17 -0
- package/dist/src/modules/v4/token/token.service.js +20 -2
- package/dist/src/routes/v3/campaigns.d.ts +1 -1
- package/dist/src/routes/v3/router.d.ts +1 -1
- package/dist/tsconfig.package.tsbuildinfo +1 -1
- package/package.json +1 -1
package/dist/src/eden/index.d.ts
CHANGED
@@ -2308,7 +2308,33 @@ declare const eden: {
|
|
2308
2308
|
price: number | null;
|
2309
2309
|
}[];
|
2310
2310
|
}>>;
|
2311
|
-
}) & {
|
2311
|
+
}) & {
|
2312
|
+
get: (options?: {
|
2313
|
+
headers?: Record<string, unknown> | undefined;
|
2314
|
+
query?: Record<string, unknown> | undefined;
|
2315
|
+
fetch?: RequestInit | undefined;
|
2316
|
+
} | undefined) => Promise<import("@elysiajs/eden").Treaty.TreatyResponse<{
|
2317
|
+
200: {
|
2318
|
+
[x: number]: {
|
2319
|
+
minimumAmountPerHour: any;
|
2320
|
+
symbol: string;
|
2321
|
+
id: string;
|
2322
|
+
name: string | null;
|
2323
|
+
icon: string;
|
2324
|
+
address: string;
|
2325
|
+
chainId: number;
|
2326
|
+
decimals: number;
|
2327
|
+
displaySymbol: string;
|
2328
|
+
verified: boolean;
|
2329
|
+
isTest: boolean;
|
2330
|
+
isPoint: boolean;
|
2331
|
+
isPreTGE: boolean;
|
2332
|
+
isNative: boolean;
|
2333
|
+
price: number | null;
|
2334
|
+
}[];
|
2335
|
+
};
|
2336
|
+
}>>;
|
2337
|
+
};
|
2312
2338
|
balances: {
|
2313
2339
|
get: (options: {
|
2314
2340
|
headers?: Record<string, unknown> | undefined;
|
@@ -4570,7 +4596,7 @@ declare const eden: {
|
|
4570
4596
|
get: (options: {
|
4571
4597
|
headers?: Record<string, unknown> | undefined;
|
4572
4598
|
query: {
|
4573
|
-
types?: string | number |
|
4599
|
+
types?: string | number | number[] | string[] | undefined;
|
4574
4600
|
chainIds?: string | string[] | undefined;
|
4575
4601
|
creatorTag?: string | undefined;
|
4576
4602
|
live?: boolean | undefined;
|
@@ -7811,6 +7837,36 @@ export declare const MerklApi: (domain: string | import("elysia").default<"", fa
|
|
7811
7837
|
};
|
7812
7838
|
};
|
7813
7839
|
};
|
7840
|
+
} & {
|
7841
|
+
reward: {
|
7842
|
+
get: {
|
7843
|
+
body: unknown;
|
7844
|
+
params: {};
|
7845
|
+
query: unknown;
|
7846
|
+
headers: unknown;
|
7847
|
+
response: {
|
7848
|
+
200: {
|
7849
|
+
[x: number]: {
|
7850
|
+
minimumAmountPerHour: any;
|
7851
|
+
symbol: string;
|
7852
|
+
id: string;
|
7853
|
+
name: string | null;
|
7854
|
+
icon: string;
|
7855
|
+
address: string;
|
7856
|
+
chainId: number;
|
7857
|
+
decimals: number;
|
7858
|
+
displaySymbol: string;
|
7859
|
+
verified: boolean;
|
7860
|
+
isTest: boolean;
|
7861
|
+
isPoint: boolean;
|
7862
|
+
isPreTGE: boolean;
|
7863
|
+
isNative: boolean;
|
7864
|
+
price: number | null;
|
7865
|
+
}[];
|
7866
|
+
};
|
7867
|
+
};
|
7868
|
+
};
|
7869
|
+
};
|
7814
7870
|
} & {
|
7815
7871
|
reward: {
|
7816
7872
|
":chainId": {
|
@@ -10775,7 +10831,7 @@ export declare const MerklApi: (domain: string | import("elysia").default<"", fa
|
|
10775
10831
|
body: unknown;
|
10776
10832
|
params: {};
|
10777
10833
|
query: {
|
10778
|
-
types?: string | number |
|
10834
|
+
types?: string | number | number[] | string[] | undefined;
|
10779
10835
|
chainIds?: string | string[] | undefined;
|
10780
10836
|
creatorTag?: string | undefined;
|
10781
10837
|
live?: boolean | undefined;
|
@@ -13833,7 +13889,33 @@ export declare const MerklApi: (domain: string | import("elysia").default<"", fa
|
|
13833
13889
|
price: number | null;
|
13834
13890
|
}[];
|
13835
13891
|
}>>;
|
13836
|
-
}) & {
|
13892
|
+
}) & {
|
13893
|
+
get: (options?: {
|
13894
|
+
headers?: Record<string, unknown> | undefined;
|
13895
|
+
query?: Record<string, unknown> | undefined;
|
13896
|
+
fetch?: RequestInit | undefined;
|
13897
|
+
} | undefined) => Promise<import("@elysiajs/eden").Treaty.TreatyResponse<{
|
13898
|
+
200: {
|
13899
|
+
[x: number]: {
|
13900
|
+
minimumAmountPerHour: any;
|
13901
|
+
symbol: string;
|
13902
|
+
id: string;
|
13903
|
+
name: string | null;
|
13904
|
+
icon: string;
|
13905
|
+
address: string;
|
13906
|
+
chainId: number;
|
13907
|
+
decimals: number;
|
13908
|
+
displaySymbol: string;
|
13909
|
+
verified: boolean;
|
13910
|
+
isTest: boolean;
|
13911
|
+
isPoint: boolean;
|
13912
|
+
isPreTGE: boolean;
|
13913
|
+
isNative: boolean;
|
13914
|
+
price: number | null;
|
13915
|
+
}[];
|
13916
|
+
};
|
13917
|
+
}>>;
|
13918
|
+
};
|
13837
13919
|
balances: {
|
13838
13920
|
get: (options: {
|
13839
13921
|
headers?: Record<string, unknown> | undefined;
|
@@ -16095,7 +16177,7 @@ export declare const MerklApi: (domain: string | import("elysia").default<"", fa
|
|
16095
16177
|
get: (options: {
|
16096
16178
|
headers?: Record<string, unknown> | undefined;
|
16097
16179
|
query: {
|
16098
|
-
types?: string | number |
|
16180
|
+
types?: string | number | number[] | string[] | undefined;
|
16099
16181
|
chainIds?: string | string[] | undefined;
|
16100
16182
|
creatorTag?: string | undefined;
|
16101
16183
|
live?: boolean | undefined;
|
package/dist/src/index.d.ts
CHANGED
@@ -2662,6 +2662,36 @@ declare const app: Elysia<"", false, {
|
|
2662
2662
|
};
|
2663
2663
|
};
|
2664
2664
|
};
|
2665
|
+
} & {
|
2666
|
+
reward: {
|
2667
|
+
get: {
|
2668
|
+
body: unknown;
|
2669
|
+
params: {};
|
2670
|
+
query: unknown;
|
2671
|
+
headers: unknown;
|
2672
|
+
response: {
|
2673
|
+
200: {
|
2674
|
+
[x: number]: {
|
2675
|
+
minimumAmountPerHour: any;
|
2676
|
+
symbol: string;
|
2677
|
+
id: string;
|
2678
|
+
name: string | null;
|
2679
|
+
icon: string;
|
2680
|
+
address: string;
|
2681
|
+
chainId: number;
|
2682
|
+
decimals: number;
|
2683
|
+
displaySymbol: string;
|
2684
|
+
verified: boolean;
|
2685
|
+
isTest: boolean;
|
2686
|
+
isPoint: boolean;
|
2687
|
+
isPreTGE: boolean;
|
2688
|
+
isNative: boolean;
|
2689
|
+
price: number | null;
|
2690
|
+
}[];
|
2691
|
+
};
|
2692
|
+
};
|
2693
|
+
};
|
2694
|
+
};
|
2665
2695
|
} & {
|
2666
2696
|
reward: {
|
2667
2697
|
":chainId": {
|
@@ -5626,7 +5656,7 @@ declare const app: Elysia<"", false, {
|
|
5626
5656
|
body: unknown;
|
5627
5657
|
params: {};
|
5628
5658
|
query: {
|
5629
|
-
types?: string | number |
|
5659
|
+
types?: string | number | number[] | string[] | undefined;
|
5630
5660
|
chainIds?: string | string[] | undefined;
|
5631
5661
|
creatorTag?: string | undefined;
|
5632
5662
|
live?: boolean | undefined;
|
@@ -41,7 +41,7 @@ export async function getOnlyUserBalance(chainId, userAddress, tokenAddresses) {
|
|
41
41
|
return res;
|
42
42
|
}
|
43
43
|
export async function getUserBalances(user, chainId, tokenAddresses) {
|
44
|
-
const tokens = await TokenService.findManyObjectPerAddress({ chainId, verified: true });
|
44
|
+
const tokens = await TokenService.findManyObjectPerAddress({ chainId, verified: true, items: 0 });
|
45
45
|
if (!tokens) {
|
46
46
|
log.debug("❌ Chain not supported");
|
47
47
|
return {
|
@@ -34,13 +34,12 @@ export class MerklRootService {
|
|
34
34
|
const merkleRootsPromises = await Promise.allSettled(ids.map(chainId => MerklRootService.fetchFromCache(chainId)));
|
35
35
|
/** Filter out unsuccessful chainIds */
|
36
36
|
ids = ids.filter((_, index) => merkleRootsPromises[index].status === "fulfilled");
|
37
|
-
|
37
|
+
return merkleRootsPromises
|
38
38
|
.filter(({ status }) => status === "fulfilled")
|
39
39
|
.reduce((acc, promise, index) => {
|
40
40
|
acc[ids[index]] = promise.value;
|
41
41
|
return acc;
|
42
42
|
}, {});
|
43
|
-
return roots;
|
44
43
|
});
|
45
44
|
}
|
46
45
|
static async create(x) {
|
@@ -2532,6 +2532,36 @@ export declare const v4: Elysia<"/v4", false, {
|
|
2532
2532
|
};
|
2533
2533
|
};
|
2534
2534
|
};
|
2535
|
+
} & {
|
2536
|
+
reward: {
|
2537
|
+
get: {
|
2538
|
+
body: unknown;
|
2539
|
+
params: {};
|
2540
|
+
query: unknown;
|
2541
|
+
headers: unknown;
|
2542
|
+
response: {
|
2543
|
+
200: {
|
2544
|
+
[x: number]: {
|
2545
|
+
minimumAmountPerHour: any;
|
2546
|
+
symbol: string;
|
2547
|
+
id: string;
|
2548
|
+
name: string | null;
|
2549
|
+
icon: string;
|
2550
|
+
address: string;
|
2551
|
+
chainId: number;
|
2552
|
+
decimals: number;
|
2553
|
+
displaySymbol: string;
|
2554
|
+
verified: boolean;
|
2555
|
+
isTest: boolean;
|
2556
|
+
isPoint: boolean;
|
2557
|
+
isPreTGE: boolean;
|
2558
|
+
isNative: boolean;
|
2559
|
+
price: number | null;
|
2560
|
+
}[];
|
2561
|
+
};
|
2562
|
+
};
|
2563
|
+
};
|
2564
|
+
};
|
2535
2565
|
} & {
|
2536
2566
|
reward: {
|
2537
2567
|
":chainId": {
|
@@ -77,6 +77,36 @@ export declare const TokenController: Elysia<"/tokens", false, {
|
|
77
77
|
};
|
78
78
|
};
|
79
79
|
};
|
80
|
+
} & {
|
81
|
+
reward: {
|
82
|
+
get: {
|
83
|
+
body: unknown;
|
84
|
+
params: {};
|
85
|
+
query: unknown;
|
86
|
+
headers: unknown;
|
87
|
+
response: {
|
88
|
+
200: {
|
89
|
+
[x: number]: {
|
90
|
+
minimumAmountPerHour: any;
|
91
|
+
symbol: string;
|
92
|
+
id: string;
|
93
|
+
name: string | null;
|
94
|
+
icon: string;
|
95
|
+
address: string;
|
96
|
+
chainId: number;
|
97
|
+
decimals: number;
|
98
|
+
displaySymbol: string;
|
99
|
+
verified: boolean;
|
100
|
+
isTest: boolean;
|
101
|
+
isPoint: boolean;
|
102
|
+
isPreTGE: boolean;
|
103
|
+
isNative: boolean;
|
104
|
+
price: number | null;
|
105
|
+
}[];
|
106
|
+
};
|
107
|
+
};
|
108
|
+
};
|
109
|
+
};
|
80
110
|
} & {
|
81
111
|
reward: {
|
82
112
|
":chainId": {
|
@@ -40,7 +40,13 @@ export const TokenController = new Elysia({ prefix: "/tokens", detail: { tags: [
|
|
40
40
|
hide: true,
|
41
41
|
},
|
42
42
|
})
|
43
|
-
// ─── Get Valid Reward
|
43
|
+
// ─── Get All Valid Reward Tokens across all chains ───────────────────
|
44
|
+
.get("/reward", async () => TokenService.getAllValidRewardTokens(), {
|
45
|
+
detail: {
|
46
|
+
description: "Get all tokens that are accept as reward tokens",
|
47
|
+
},
|
48
|
+
})
|
49
|
+
// ─── Get Valid Reward Tokens on a given chain ────────────────────────
|
44
50
|
.get("/reward/:chainId", async ({ params }) => TokenService.getValidRewardTokens(params.chainId), {
|
45
51
|
params: t.Object({
|
46
52
|
chainId: t.Numeric(),
|
@@ -6,7 +6,7 @@ export class TokenRepository {
|
|
6
6
|
const ids = query.id ? query.id.map(id => ({ id })) : [];
|
7
7
|
const { page: _page, items: _items } = query;
|
8
8
|
const page = _page ? _page : 0;
|
9
|
-
const items = _items !== undefined ? _items : 100;
|
9
|
+
const items = _items === 0 ? 10_000 : _items !== undefined ? _items : 100;
|
10
10
|
return {
|
11
11
|
take: items === 0 ? undefined : items,
|
12
12
|
skip: page * items,
|
@@ -246,6 +246,23 @@ export declare abstract class TokenService {
|
|
246
246
|
} & {
|
247
247
|
price?: number | null | undefined;
|
248
248
|
})[]>;
|
249
|
+
static getAllValidRewardTokens(): Promise<Record<number, {
|
250
|
+
minimumAmountPerHour: any;
|
251
|
+
symbol: string;
|
252
|
+
id: string;
|
253
|
+
name: string | null;
|
254
|
+
icon: string;
|
255
|
+
address: string;
|
256
|
+
chainId: number;
|
257
|
+
decimals: number;
|
258
|
+
displaySymbol: string;
|
259
|
+
verified: boolean;
|
260
|
+
isTest: boolean;
|
261
|
+
isPoint: boolean;
|
262
|
+
isPreTGE: boolean;
|
263
|
+
isNative: boolean;
|
264
|
+
price: number | null;
|
265
|
+
}[]>>;
|
249
266
|
static getValidRewardTokens(chainId: number): Promise<{
|
250
267
|
minimumAmountPerHour: any;
|
251
268
|
symbol: string;
|
@@ -9,8 +9,9 @@ import { PriceService } from "@/modules/v4/price/price.service";
|
|
9
9
|
import { log } from "@/utils/logger";
|
10
10
|
import { throwOnInvalidRequiredAddress, throwOnUnsupportedChainId } from "@/utils/throw";
|
11
11
|
import { Prisma } from "@db/api";
|
12
|
-
import { ChainInteractionService, DistributionCreatorService, NETWORK_LABELS, NULL_ADDRESS, bigIntToNumber, } from "@sdk";
|
12
|
+
import { ChainInteractionService, DistributionCreatorService, NETWORK_LABELS, NULL_ADDRESS, bigIntToNumber, withTimeout, } from "@sdk";
|
13
13
|
import { getAddress, isAddress, parseUnits } from "viem";
|
14
|
+
import { ChainService } from "../chain/chain.service";
|
14
15
|
import { TokenRepository } from "./token.repository";
|
15
16
|
export class TokenService {
|
16
17
|
static hashId(token) {
|
@@ -206,8 +207,8 @@ export class TokenService {
|
|
206
207
|
* @returns A list of tokens
|
207
208
|
*/
|
208
209
|
static async findManyOrFetch(query) {
|
209
|
-
const foundTokens = (await TokenRepository.findMany(query)).map(TokenService.format);
|
210
210
|
const isTokenAddress = query.chainId && query.search && isAddress(query.search);
|
211
|
+
const foundTokens = (await TokenRepository.findMany(isTokenAddress ? { ...query, address: query.search } : query)).map(TokenService.format);
|
211
212
|
if (isTokenAddress &&
|
212
213
|
!foundTokens.some(t => TokenService.isSame(t, { chainId: query.chainId, address: query.search }))) {
|
213
214
|
const token = await TokenService.fetchOnChain({ chainId: query.chainId, address: query.search });
|
@@ -298,6 +299,23 @@ export class TokenService {
|
|
298
299
|
}
|
299
300
|
}));
|
300
301
|
}
|
302
|
+
static async getAllValidRewardTokens() {
|
303
|
+
return await CacheService.wrap(TTLPresets.MIN_5, async () => {
|
304
|
+
let chains = await ChainService.findMany({
|
305
|
+
test: true,
|
306
|
+
});
|
307
|
+
/** Fetch current Merkle Roots */
|
308
|
+
const promises = await Promise.allSettled(chains.map(chain => withTimeout(TokenService.getValidRewardTokens(chain.id), 5_000)));
|
309
|
+
/** Filter out unsuccessful chainIds */
|
310
|
+
chains = chains.filter((_, index) => promises[index].status === "fulfilled");
|
311
|
+
return promises
|
312
|
+
.filter(({ status }) => status === "fulfilled")
|
313
|
+
.reduce((acc, promise, index) => {
|
314
|
+
acc[chains[index].id] = promise.value;
|
315
|
+
return acc;
|
316
|
+
}, {});
|
317
|
+
});
|
318
|
+
}
|
301
319
|
static async getValidRewardTokens(chainId) {
|
302
320
|
const validRewardTokens = await DistributionCreatorService(chainId).validRewardTokens();
|
303
321
|
return (await TokenRepository.findList(chainId, validRewardTokens.map(t => getAddress(t.token)))).map(x => {
|
@@ -33,7 +33,7 @@ declare const _default: (app: Elysia) => Elysia<"", false, {
|
|
33
33
|
body: unknown;
|
34
34
|
params: {};
|
35
35
|
query: {
|
36
|
-
types?: string | number |
|
36
|
+
types?: string | number | number[] | string[] | undefined;
|
37
37
|
chainIds?: string | string[] | undefined;
|
38
38
|
creatorTag?: string | undefined;
|
39
39
|
live?: boolean | undefined;
|
@@ -74,7 +74,7 @@ export declare const v3: Elysia<"/v3", false, {
|
|
74
74
|
body: unknown;
|
75
75
|
params: {};
|
76
76
|
query: {
|
77
|
-
types?: string | number |
|
77
|
+
types?: string | number | number[] | string[] | undefined;
|
78
78
|
chainIds?: string | string[] | undefined;
|
79
79
|
creatorTag?: string | undefined;
|
80
80
|
live?: boolean | undefined;
|