@coinset/bitmart
Version:
Universal BitMart API client
113 lines (90 loc) • 2.35 kB
text/typescript
import { jsonFetch, Reviver, SuccessResponse } from "./_utils.js";
import { BASE_URL } from "./constants.js";
import { isString } from "../deps.js";
export type TickerOptions = {
/** Trading pair symbol */
symbol: `${string}_${string}`;
};
type TickerData = {
/** Trading pair */
symbol: `${string}_${string}`;
/** Latest price */
last_price: number;
/** 24-hour trade volume in quote currency */
quote_volume_24h: number;
/** 24-hour trade volume in base currency */
base_volume_24h: number;
/** 24-hour highest price */
high_24h: number;
/** 24-hour lowest price */
low_24h: number;
/** 24-hour open price */
open_24h: number;
/** 24-hour close price */
close_24h: number;
/** Top ask price */
best_ask: number;
/** Size of top ask order */
best_ask_size: number;
/** Top bid price */
best_bid: number;
/** Size of top bid order */
best_bid_size: number;
fluctuation: number;
/** Link to the trading page on BitMart */
url: string;
};
const reviver: Reviver = (key, value) => {
if (
[
"last_price",
"quote_volume_24h",
"base_volume_24h",
"high_24h",
"low_24h",
"open_24h",
"close_24h",
"best_ask",
"best_ask_size",
"best_bid",
"best_bid_size",
"fluctuation",
]
.includes(key) && isString(value)
) {
return Number(value);
}
return value;
};
export type TickerResponse = SuccessResponse<{
ticker: TickerData;
}>;
/** Ticker is an overview of the market status of a trading pair, including the latest trade price, top bid and ask prices and 24-hour trading volume.
* ```ts
* import { fetchTicker } from "https://deno.land/x/bitmart@$VERSION/mod.ts"
* await fetchTicker({symbol: "BTC_USDT" })
* ```
* @see https://developer-pro.bitmart.com/en/spot/quotation/ticker.html
*/
export async function fetchTicker(
{ symbol }: TickerOptions,
init?: RequestInit,
): Promise<TickerResponse> {
const url = new URL("spot/v1/ticker", BASE_URL);
url.searchParams.set("symbol", symbol);
const { data: { tickers: [ticker] }, ...rest } = await jsonFetch<
SuccessResponse<{
tickers: TickerData[];
}>
>(url, init, {
parseJson: reviver,
});
return {
...rest,
data: {
ticker,
},
};
}
export type { TickerData };
export { reviver };