asseton
Version:
Another open banking api
73 lines (57 loc) • 1.93 kB
text/typescript
import dotenv from "dotenv";
import CryptoJS from "crypto-js";
import { generateNonce } from "../utils";
import * as Types from "./types";
import * as Utils from "./utils";
dotenv.config();
const API_KEY = process.env.BITFINEX_API_KEY ?? "";
const API_SECRET = process.env.BITFINEX_API_SECRET ?? "";
const API_VERSION = "v2";
const PUBLIC_URL = `https://api-pub.bitfinex.com/${API_VERSION}/`;
const PRIVATE_URL = `https://api.bitfinex.com/${API_VERSION}/`;
export class BitfninexClient {
getWallets = async (): Promise<Types.IWallet[]> => {
const URL_PATH = "auth/r/wallets";
const url = `${PRIVATE_URL}${URL_PATH}`;
const nonce = generateNonce();
const body = new URLSearchParams({}).toString();
const signature = CryptoJS.HmacSHA384(
`/api/${API_VERSION}/${URL_PATH}${nonce}${body}`,
API_SECRET
).toString();
const response = await fetch(url, {
method: "POST",
body: body,
headers: {
"Content-Type": "application/json",
"bfx-nonce": nonce,
"bfx-apikey": API_KEY,
"bfx-signature": signature,
},
});
return response.json();
};
getTickers = async (
symbols: string[],
pairSymbol: string
): Promise<Types.ITickers> => {
const URL_PATH = "tickers";
const PREFIX = "t";
const tickers = symbols.map((it) =>
Utils.genTicker(it, pairSymbol, PREFIX)
);
const url = `${PUBLIC_URL}${URL_PATH}?symbols=${tickers.join(",")}`;
const response = await fetch(url);
const responseJSON: Array<any[]> = await response.json();
const result: Types.ITickers = {};
tickers.forEach((ticker) => {
const data = responseJSON.find((it) => ticker === it[0]);
const symbol = Utils.parseSymbol(ticker, pairSymbol, PREFIX);
result[symbol] = {
pair: [symbol, pairSymbol],
price: data ? Number(data[1]) : null,
};
});
return result;
};
}