polygon.io
Version:
Isomorphic Javascript client for Polygon.io Stocks, Forex, and Crypto APIs
100 lines (94 loc) • 2.8 kB
text/typescript
import { formatIV1ForexRaw, IV1ForexRaw } from "./historicForexTicks";
import { get } from "../transport/request";
export interface IForexSnapshotAggRaw {
c: number;
h: number;
l: number;
o: number;
v: number;
}
export interface IForexSnapshotAggFormatted {
c: number;
close: number;
h: number;
high: number;
l: number;
low: number;
o: number;
open: number;
v: number;
volume: number;
}
const formatIForexSnapshotAggRaw = (
raw: IForexSnapshotAggRaw
): IForexSnapshotAggFormatted => ({
...raw,
close: raw.c,
high: raw.h,
low: raw.l,
open: raw.o,
volume: raw.v
});
export interface IForexSnapshotTickerRaw {
ticker: string;
day: IForexSnapshotAggRaw;
lastTrade: IV1ForexRaw;
min: IForexSnapshotAggRaw;
prevDay: IForexSnapshotAggRaw;
todaysChange: number;
todaysChangePerc: number;
updated: number;
}
export interface IForexSnapshotTickerFormatted {
ticker: string;
day: IForexSnapshotAggRaw;
lastTrade: IV1ForexRaw;
min: IForexSnapshotAggRaw;
prevDay: IForexSnapshotAggRaw;
todaysChange: number;
todaysChangePerc: number;
updated: number;
}
const formatIForexSnapshotRaw = (
raw: IForexSnapshotTickerRaw
): IForexSnapshotTickerFormatted => ({
ticker: raw.ticker,
todaysChange: raw.todaysChange,
todaysChangePerc: raw.todaysChangePerc,
updated: raw.updated,
day: formatIForexSnapshotAggRaw(raw.day),
lastTrade: formatIV1ForexRaw(raw.lastTrade),
min: formatIForexSnapshotAggRaw(raw.min),
prevDay: formatIForexSnapshotAggRaw(raw.prevDay)
});
export interface IForexSnapshotAllTickersResponseRaw {
status: string;
tickers: IForexSnapshotTickerRaw[];
}
export interface IForexSnapshotAllTickersResponseFormatted {
status: string;
tickers: IForexSnapshotTickerFormatted[];
}
const formatIForexSnapshotAllTickersResponseRaw = (
raw: IForexSnapshotAllTickersResponseRaw
): IForexSnapshotAllTickersResponseFormatted => ({
status: raw.status,
tickers: raw.tickers.map(formatIForexSnapshotRaw)
});
// CF: https://polygon.io/docs/#!/Forex--Currencies/get_v2_snapshot_locale_global_markets_forex_tickers
export const forexSnapshotAllTickers = async (
apiKey: string,
apiBase: string
): Promise<IForexSnapshotAllTickersResponseFormatted> =>
formatIForexSnapshotAllTickersResponseRaw(
await get(`/v2/snapshot/locale/global/markets/forex/tickers`, apiKey, apiBase)
);
// CF: https://polygon.io/docs/#!/Forex--Currencies/get_v2_snapshot_locale_global_markets_forex_direction
export const forexSnapshotGainersLosers = async (
apiKey: string,
apiBase: string,
direction: string = "gainers"
): Promise<IForexSnapshotAllTickersResponseFormatted> =>
formatIForexSnapshotAllTickersResponseRaw(
await get(`/v2/snapshot/locale/global/markets/forex/${direction}`, apiKey, apiBase)
);