-
Notifications
You must be signed in to change notification settings - Fork 9
/
coinbase-api.ts
100 lines (82 loc) · 3.07 KB
/
coinbase-api.ts
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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
import { Observable } from 'rxjs';
import { ExchangeApi } from '../exchange-api.abstract';
import { ExchangeInfo, SupportFeatures, Ticker, Orderbook, Trade, CandleStick, ExchangeOptions } from '../exchange-types';
import { CoinbaseWebsocket } from './coinbase-websocket';
import { CoinbaseTicker } from './ticker';
import { CoinbaseCandleStick } from './candlestick';
import { CoinbaseOrderbook } from './orderbook';
import { CoinbaseTrade } from './trade';
export class CoinbaseApi extends ExchangeApi {
private readonly coinbaseWebsocket: CoinbaseWebsocket;
private readonly coinbaseTicker: CoinbaseTicker;
private readonly coinbaseCandleStick: CoinbaseCandleStick;
private readonly coinbaseOrderbook: CoinbaseOrderbook;
private readonly coinbaseTrade: CoinbaseTrade;
get exchangeInfo(): ExchangeInfo {
return {
name: 'coinbase',
logoUrl: 'https://coinbase-logo.png',
homepage: 'https://www.coinbase.com/',
country: 'Coinbase country',
};
}
get markets(): string[] {
return ['btc_usd', 'bch_usd', 'eth_usd', 'etc_usd', 'ltc_usd', 'bch_btc', 'eth_btc', 'etc_btc', 'ltc_btc'];
}
get representativeMarkets(): string[] {
return ['btc_usd', 'eth_btc', 'ltc_btc'];
}
get supportFeatures(): SupportFeatures {
return {
ticker: true,
orderbook: true,
chart: true,
};
}
constructor(options?: ExchangeOptions) {
super(options);
const corsProxy = this.options.corsProxy;
this.coinbaseWebsocket = new CoinbaseWebsocket();
this.coinbaseTicker = new CoinbaseTicker(corsProxy, this.coinbaseWebsocket);
this.coinbaseCandleStick = new CoinbaseCandleStick(corsProxy);
this.coinbaseOrderbook = new CoinbaseOrderbook(corsProxy, this.coinbaseWebsocket);
this.coinbaseTrade = new CoinbaseTrade(corsProxy, this.coinbaseWebsocket);
}
// api request for ticker
async fetchTicker(pair: string): Promise<Ticker> {
return this.coinbaseTicker.fetchTicker(pair);
}
// realtime ticker
ticker$(pair: string): Observable<Ticker> {
return this.coinbaseTicker.ticker$(pair);
}
// stop realtime ticker
stopTicker(pair: string): void {
this.coinbaseTicker.stopTicker(pair);
}
// api request for depth
async fetchOrderbook(pair: string): Promise<Orderbook> {
return this.coinbaseOrderbook.fetchOrderbook(pair);
}
// realtime depth
orderbook$(pair: string): Observable<Orderbook> {
return this.coinbaseOrderbook.orderbook$(pair);
}
// stop realtime depth
stopOrderbook(pair: string): void {
this.coinbaseOrderbook.stopOrderbook(pair);
}
async fetchTrades(pair: string): Promise<Trade[]> {
return this.coinbaseTrade.fetchTrades(pair);
}
trade$(pair: string): Observable<Trade> {
return this.coinbaseTrade.trade$(pair);
}
stopTrade(pair: string): void {
this.coinbaseTrade.stopTrade(pair);
}
// request candlestick by time range and resolution
async fetchCandleStickRange(pair: string, minutesFoot: number, start: number, end: number): Promise<CandleStick[]> {
return this.coinbaseCandleStick.fetchCandleStickRange(pair, minutesFoot, start, end);
}
}