-
Notifications
You must be signed in to change notification settings - Fork 1
/
jupiter-token-list.ts
52 lines (47 loc) · 1.29 KB
/
jupiter-token-list.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
import {
JUPITER_TOKEN_ALL_LIST_API,
JUPITER_TOKEN_STRICT_LIST_API,
} from "./config";
import type { UnifiedFetcher } from "./util";
export interface JupiterTokenListToken {
address: string;
chainId: number;
decimals: number;
name: string;
symbol: string;
logoURI?: string;
tags: JupiterTokenListTag[];
extensions?: JupiterTokenListExtensions;
}
export interface JupiterTokenListExtensions {
coingeckoId?: string;
isBanned?: boolean;
}
export enum JupiterTokenListTag {
Community = "community",
OldRegistry = "old-registry",
SolanaFm = "solana-fm",
Token2022 = "token-2022",
Unknown = "unknown",
Wormhole = "wormhole",
}
export async function getJupiterTokenList(
fetcher: UnifiedFetcher = fetch,
listType: "strict" | "all" = "strict"
): Promise<Map<string, JupiterTokenListToken>> {
const response = await fetcher(
listType == "strict"
? JUPITER_TOKEN_STRICT_LIST_API
: JUPITER_TOKEN_ALL_LIST_API
);
const data: JupiterTokenListToken[] = JSON.parse(await response.text());
const map: Map<string, JupiterTokenListToken> = new Map();
data.forEach((token) => map.set(token.address, token));
return map;
}
export function lamportsToDecimal(
token: JupiterTokenListToken,
lamports: number
): number {
return lamports / 10 ** token.decimals;
}