UNPKG

crypto-client

Version:

An unified client for all cryptocurrency exchanges.

149 lines (148 loc) 5.33 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.withdraw = exports.getWithdrawalFees = exports.getDepositAddresses = exports.queryAllBalances = exports.queryOrder = exports.cancelOrder = exports.placeOrder = void 0; const assert_1 = require("assert"); const coinbase_pro_1 = require("coinbase-pro"); const config_1 = require("../config"); const util_1 = require("../util"); function createAuthenticatedClient() { assert_1.strict.ok(config_1.USER_CONFIG.COINBASE_ACCESS_KEY); assert_1.strict.ok(config_1.USER_CONFIG.COINBASE_ACCESS_SECRET); assert_1.strict.ok(config_1.USER_CONFIG.COINBASE_ACCESS_PASSPHRASE); return new coinbase_pro_1.AuthenticatedClient(config_1.USER_CONFIG.COINBASE_ACCESS_KEY, config_1.USER_CONFIG.COINBASE_ACCESS_SECRET, config_1.USER_CONFIG.COINBASE_ACCESS_PASSPHRASE); } async function placeOrder(market, price, quantity, sell) { try { assert_1.strict.ok(market); const client = createAuthenticatedClient(); const [priceStr, quantityStr] = util_1.convertPriceAndQuantityToStrings(market, price, quantity, sell); const order = { type: 'limit', side: sell ? 'sell' : 'buy', product_id: market.id, price: priceStr, size: quantityStr, }; const orderResult = await client.placeOrder(order).catch((e) => { return e; }); if (orderResult instanceof Error) return orderResult; return orderResult.id; } catch (e) { return e; } } exports.placeOrder = placeOrder; async function cancelOrder(orderId) { const client = createAuthenticatedClient(); const arr = await client.cancelOrder(orderId); return arr === orderId; // TODO: coinbase-pro need to fix its types } exports.cancelOrder = cancelOrder; async function queryOrder(orderId) { var _a; const client = createAuthenticatedClient(); try { const orderInfo = await client.getOrder(orderId); assert_1.strict.equal(orderInfo.id, orderId); return orderInfo; } catch (e) { if (((_a = e === null || e === void 0 ? void 0 : e.response) === null || _a === void 0 ? void 0 : _a.statusCode) === 404) { return undefined; // orderId not exist } throw e; } } exports.queryOrder = queryOrder; async function queryAllBalances(all = false) { const client = createAuthenticatedClient(); const accounts = await client.getAccounts().catch((e) => { return e; }); if (accounts instanceof Error) return accounts; const result = {}; accounts.forEach((account) => { result[account.currency] = parseFloat(all ? account.balance : account.available); }); return result; } exports.queryAllBalances = queryAllBalances; async function getDepositAddresses(symbols) { assert_1.strict.ok(symbols.length); const client = createAuthenticatedClient(); const result = {}; for (let i = 0; i < symbols.length; i += 1) { const symbol = symbols[i]; try { if (!(symbol in result)) result[symbol] = {}; // eslint-disable-next-line no-await-in-loop const data = await client.depositCrypto({ currency: symbol }).catch((e) => { return e; }); if (data instanceof Error) return result; const { address_info } = data; const platform = util_1.detectPlatform(address_info.address, symbol) || symbol; result[symbol][platform] = { symbol, platform, address: address_info.address, }; if (address_info.destination_tag) result[symbol][symbol].memo = address_info.destination_tag; } catch (e) { // console.error(e); } } return result; } exports.getDepositAddresses = getDepositAddresses; function getWithdrawalFees() { // https://help.coinbase.com/en/pro/trading-and-funding/trading-rules-and-fees/fees.html const data = { EUR: 0.15, USD: 25, }; const result = {}; Object.keys(data).forEach((symbol) => { const fee = data[symbol] || 0; result[symbol] = {}; result[symbol][symbol] = { symbol, platform: symbol, fee, min: 0, }; }); return result; } exports.getWithdrawalFees = getWithdrawalFees; async function withdraw(symbol, address, // only supports existing addresses in your withdrawal address list amount, memo) { const client = createAuthenticatedClient(); const minWithdrawalAmount = { EOS: 1.0 }; if (symbol in minWithdrawalAmount && amount < minWithdrawalAmount[symbol]) { return new Error(`${symbol} withdrawal amount ${amount} is less than Coinbase minimum amunt ${minWithdrawalAmount[symbol]}`); } const params = { currency: symbol, crypto_address: address, amount, }; if (memo) params.destination_tag = memo; const data = await client.withdrawCrypto(params).catch((e) => { return e; }); if (data instanceof Error) return data; const { id } = data; return id; } exports.withdraw = withdraw;