aboutsummaryrefslogtreecommitdiffstats
path: root/packages/pipeline/src/data_sources/idex/index.ts
diff options
context:
space:
mode:
authorFabio Berger <me@fabioberger.com>2018-12-19 00:59:15 +0800
committerFabio Berger <me@fabioberger.com>2018-12-19 00:59:15 +0800
commit622b9f662e74d571da745047ede097c7a392d09e (patch)
tree68a9517882b04a3d428f6996e0790ceb82e89be4 /packages/pipeline/src/data_sources/idex/index.ts
parente295eeb8938468b1527d5d81f212766cef40bc81 (diff)
parent67df5a433d68a2af1a3a03a8bf431629a534dc97 (diff)
downloaddexon-sol-tools-622b9f662e74d571da745047ede097c7a392d09e.tar
dexon-sol-tools-622b9f662e74d571da745047ede097c7a392d09e.tar.gz
dexon-sol-tools-622b9f662e74d571da745047ede097c7a392d09e.tar.bz2
dexon-sol-tools-622b9f662e74d571da745047ede097c7a392d09e.tar.lz
dexon-sol-tools-622b9f662e74d571da745047ede097c7a392d09e.tar.xz
dexon-sol-tools-622b9f662e74d571da745047ede097c7a392d09e.tar.zst
dexon-sol-tools-622b9f662e74d571da745047ede097c7a392d09e.zip
Merge branch 'development' into features/orderwatcher_ws
* development: (107 commits) Fix OrderWatcher title to fix sidebar top Fix version picker so it doesn't overflow onto two lines Fix bug in pull_missing_blocks with incorrect start block (#1438) Pull approval events for ZRX and DAI (#1430) fix semicolon and apply prettier Fix dex order quote/base asset assigning (#1432) Apply prettier Publish Updated CHANGELOGS Rename contracts CHANGELOGs to DEPLOYs Move Forwarder CHANGELOG entries to extensions CHANGELOG Make contracts packages not private Publish Updated CHANGELOGS Show @ price in light grey Updated CHANGELOGS typeof -> isString add special case to scrape OHLCV for eth/usd (#1428) run linter simplify scaling input logic ...
Diffstat (limited to 'packages/pipeline/src/data_sources/idex/index.ts')
-rw-r--r--packages/pipeline/src/data_sources/idex/index.ts82
1 files changed, 82 insertions, 0 deletions
diff --git a/packages/pipeline/src/data_sources/idex/index.ts b/packages/pipeline/src/data_sources/idex/index.ts
new file mode 100644
index 000000000..c1e53c08d
--- /dev/null
+++ b/packages/pipeline/src/data_sources/idex/index.ts
@@ -0,0 +1,82 @@
+import { fetchAsync } from '@0x/utils';
+
+const IDEX_BASE_URL = 'https://api.idex.market';
+const MARKETS_URL = `${IDEX_BASE_URL}/returnTicker`;
+const ORDERBOOK_URL = `${IDEX_BASE_URL}/returnOrderBook`;
+const MAX_ORDER_COUNT = 100; // Maximum based on https://github.com/AuroraDAO/idex-api-docs#returnorderbook
+export const IDEX_SOURCE = 'idex';
+
+export interface IdexMarketsResponse {
+ [marketName: string]: IdexMarket;
+}
+
+export interface IdexMarket {
+ last: string;
+ high: string;
+ low: string;
+ lowestAsk: string;
+ highestBid: string;
+ percentChange: string;
+ baseVolume: string;
+ quoteVolume: string;
+}
+
+export interface IdexOrderbook {
+ asks: IdexOrder[];
+ bids: IdexOrder[];
+}
+
+export interface IdexOrder {
+ price: string;
+ amount: string;
+ total: string;
+ orderHash: string;
+ params: IdexOrderParam;
+}
+
+export interface IdexOrderParam {
+ tokenBuy: string;
+ buySymbol: string;
+ buyPrecision: number;
+ amountBuy: string;
+ tokenSell: string;
+ sellSymbol: string;
+ sellPrecision: number;
+ amountSell: string;
+ expires: number;
+ nonce: number;
+ user: string;
+}
+
+// tslint:disable:prefer-function-over-method
+// ^ Keep consistency with other sources and help logical organization
+export class IdexSource {
+ /**
+ * Call Idex API to find out which markets they are maintaining orderbooks for.
+ */
+ public async getMarketsAsync(): Promise<string[]> {
+ const params = { method: 'POST' };
+ const resp = await fetchAsync(MARKETS_URL, params);
+ const respJson: IdexMarketsResponse = await resp.json();
+ const markets: string[] = Object.keys(respJson);
+ return markets;
+ }
+
+ /**
+ * Retrieve orderbook from Idex API for a given market.
+ * @param marketId String identifying the market we want data for. Eg. 'REP_AUG'
+ */
+ public async getMarketOrderbookAsync(marketId: string): Promise<IdexOrderbook> {
+ const params = {
+ method: 'POST',
+ headers: { 'Content-Type': 'application/json' },
+ body: JSON.stringify({
+ market: marketId,
+ count: MAX_ORDER_COUNT,
+ }),
+ };
+ const resp = await fetchAsync(ORDERBOOK_URL, params);
+ const respJson: IdexOrderbook = await resp.json();
+ return respJson;
+ }
+}