bitso-bert-api
Version:
<h1 align="center">bitso-bert-api</h1>
166 lines (161 loc) • 7.23 kB
text/typescript
import { basicGet, privateDelete, privateGet, privatePost, publicGet, publicPost } from './api-client'
import { BitsoAPI } from './types/bitso-bert-api.types'
import { generatePlaceOrderParams } from './utils'
const BitsoAPI: BitsoAPI = {
public: {
getAvailableBooks: () => publicGet('/available_books'),
getTicker: (book) => publicGet('/ticker', { book }),
getOrderBook: (book, params) => publicGet('/order_book', { ...params, book }),
getTrades: (book, params) => publicGet('/trades', { ...params, book }),
},
private: {
getAccountStatus: () => privateGet('/account_status'),
mobilePhone: {
register: (phoneNumber) => privatePost('/phone_number', undefined, { phone_number: phoneNumber }),
verify: (code) => privatePost('/phone_verification', undefined, { verification_code: code }),
},
getBalance: () => privateGet('/balance'),
getFees: () => privateGet('/fees'),
ledger: {
getLedger: (params) => privateGet('/ledger', params),
getTrades: (params) => privateGet('/ledger/trades', params),
getFees: (params) => privateGet('/ledger/fees', params),
getFundings: (params) => privateGet('/ledger/fundings', params),
getWithdrawals: (params) => privateGet('/ledger/withdrawals', params),
},
withdrawals: {
getAll: (params) => privateGet('/withdrawals', params),
getByWid: (wid) => privateGet(`/withdrawals/${wid}`),
getByWids: (wids) => privateGet('/withdrawals', { wids: wids.join(',') }),
getByOriginIds: (originIds) => privateGet('/withdrawals', { origin_ids: originIds.join(',') }),
},
fundings: {
getAll: (params) => privateGet('/fundings', params),
getByFid: (fid) => privateGet(`/fundings/${fid}`),
getByFids: (fids) => privateGet(`/fundings/${fids.join('-')}`),
},
orderTrades: {
getByOid: (oid) => privateGet(`/order_trades/${oid}`),
getByOriginId: (originId) => privateGet('/order_trades', { origin_id: originId }),
},
userTrades: {
getByBook: (book, params) => privateGet(`/user_trades`, { ...params, book }),
getByTid: (tid) => privateGet(`/user_trades/${tid}`),
getByTids: (tids) => privateGet(`/user_trades/${tids.join('-')}`),
},
getOpenOrders: (params) => privateGet('/open_orders', params),
lookupOrders: {
getByOid: (oid) => privateGet(`/orders/${oid}`),
getByOids: (oids) => privateGet(`/orders`, { oids: oids.join(',') }),
getByOriginIds: (originIds) => privateGet(`/orders`, { origin_ids: originIds.join(',') }),
},
cancelOrder: {
cancelAll: () => privateDelete('/orders/all'),
cancelByOid: (oid) => privateDelete(`/orders/${oid}`),
cancelByOids: (oids) => privateDelete('/orders', { oids: oids.join(',') }),
cancelByOrderIds: (originIds) => privateDelete('/orders', { origin_ids: originIds.join(',') }),
},
placeOrder: {
buy: {
market: (book, amount, currency) => {
const genParams = generatePlaceOrderParams(book, amount, currency)
const params = { ...genParams, side: 'buy', type: 'market' }
return privatePost('/orders', undefined, params)
},
limit: (book, amount, currency, price, executionType = 'goodtillcancelled') => {
const genParams = generatePlaceOrderParams(book, amount, currency)
const params = { ...genParams, side: 'buy', type: 'limit', price, time_in_force: executionType }
return privatePost('/orders', undefined, params)
},
stopLoss: (book, amount, stopPrice) => {
const genParams = generatePlaceOrderParams(book, amount)
const params = { ...genParams, side: 'buy', type: 'limit', stop: stopPrice }
return privatePost('/orders', undefined, params)
},
stopLimit: (book, amount, currency, price, stopPrice, executionType = 'goodtillcancelled') => {
const genParams = generatePlaceOrderParams(book, amount, currency)
const params = {
...genParams,
side: 'buy',
type: 'limit',
price,
stop: stopPrice,
time_in_force: executionType,
}
return privatePost('/orders', undefined, params)
},
},
sell: {
market: (book, amount, currency) => {
const genParams = generatePlaceOrderParams(book, amount, currency)
const params = { ...genParams, side: 'sell', type: 'market' }
return privatePost('/orders', undefined, params)
},
limit: (book, amount, currency, price, executionType = 'goodtillcancelled') => {
const genParams = generatePlaceOrderParams(book, amount, currency)
const params = { ...genParams, side: 'sell', type: 'limit', price, time_in_force: executionType }
return privatePost('/orders', undefined, params)
},
stopLoss: (book, amount, stopPrice) => {
const genParams = generatePlaceOrderParams(book, amount)
const params = { ...genParams, side: 'sell', type: 'limit', stop: stopPrice }
return privatePost('/orders', undefined, params)
},
stopLimit: (book, amount, currency, price, stopPrice, executionType = 'goodtillcancelled') => {
const genParams = generatePlaceOrderParams(book, amount, currency)
const params = {
...genParams,
side: 'sell',
type: 'limit',
price,
stop: stopPrice,
time_in_force: executionType,
}
return privatePost('/orders', undefined, params)
},
},
},
getFundingDestination: (currency) => privateGet('/funding_destination', { fund_currency: currency }),
getBankCodes: () => privateGet('/mx_bank_codes'),
},
undocumented: {
charts: {
getChartInfo: (book, timeBucket, startDate, endDate) => {
if (endDate <= startDate) throw new Error('date range is incorrect')
const time_bucket = chartingTimeFrame[timeBucket]
const start = startDate.getTime()
const end = endDate.getTime()
return publicGet('/ohlc', { book, time_bucket, start, end })
},
getChartTrades: (book, timeframe) => basicGet(`https://bitso.com/trade/chartJSON/${book}/${timeframe}`),
},
getTickers: () => publicPost('/ticker', undefined, { book: 'all' }),
getSettings: () => privateGet('/settings'),
catalogues: {
availableCurrencyConversions: {
public: () => publicGet('/catalogues/available_currency_conversions'),
private: () => privateGet('/catalogues/available_currency_conversions'),
},
getCountries: () => publicGet('/catalogues/countries'),
getCurrencies: () => publicGet('/catalogues/currencies'),
},
},
}
export const chartingTimeFrame = {
'1 min': 60,
'5 min': 300,
'15 min': 900,
'30 min': 1800,
'1 h': 3600,
'4 h': 14400,
'6 h': 21600,
'12 h': 43200,
'1 d': 86400,
'3 d': 259200,
'7 d': 604800,
}
if (!process.env.BITSO_API_URL)
throw new Error(
'Check your env vars: [BITSO_API_URL] is required, and [BITSO_API_KEY, BITSO_API_SECRET] only if you need the private endpoints',
)
export default BitsoAPI