-
Notifications
You must be signed in to change notification settings - Fork 1
/
fiat.tsx
66 lines (58 loc) · 1.86 KB
/
fiat.tsx
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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
import { CurrencyTicker } from '../../../config/config/currencies';
import { Token } from '../../../config/config/tokens';
import config from '../../../config/config/environment';
import { getNativeToken } from '../../../config/lib/helpers';
import { Block, ID, Level } from '../../chain/blocks/lib/blocks';
import { levelToDateString } from '../../chain/blocks/store/useBlocksSelectors';
export interface SpotPrice {
// tokenId-currency-level
id: ID;
level: string;
currency: CurrencyTicker;
price: string;
}
export const COINBASE_PRICES_URL = `${config.COINBASE_API_URL}/v2/prices`;
export const getSpotPriceURL = (
symbol: string,
currency: string,
date: string
): string => `${COINBASE_PRICES_URL}/${symbol}-${currency}/spot?date=${date}`;
export interface GetSpotPriceAtDateResponse {
data: {
amount: string;
};
}
export const getSpotPriceId = (
token: Token,
currency: CurrencyTicker,
level: Level
): string => `${token.id}-${currency}-${level}`;
export const getSpotPriceAtLevel = async (
token: Token,
currency: CurrencyTicker,
latestBlock: Block,
level: Level
): Promise<SpotPrice> => {
const dateAtLevel = levelToDateString(latestBlock, level);
const url = getSpotPriceURL(token.symbol, currency, dateAtLevel);
const response = await fetch(url);
if (!response.ok) throw new Error(await response.text());
const body = await (response.json() as Promise<GetSpotPriceAtDateResponse>);
const price = body.data.amount;
const id = getSpotPriceId(token, currency, level);
const spotPrice: SpotPrice = {
id,
level,
currency,
price,
};
return spotPrice;
};
export const getNativeTokenSpotPriceAtLevel = async (
currency: CurrencyTicker,
latestBlock: Block,
level: Level
): Promise<SpotPrice> => {
const nativeToken = getNativeToken();
return await getSpotPriceAtLevel(nativeToken, currency, latestBlock, level);
};