crypto-client
Version:
An unified client for all cryptocurrency exchanges.
149 lines (148 loc) • 5.33 kB
JavaScript
;
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;