xud
Version:
Exchange Union Daemon
122 lines • 5.05 kB
JavaScript
;
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.handler = exports.builder = exports.describe = exports.command = exports.formatOrders = void 0;
const cli_table3_1 = __importDefault(require("cli-table3"));
const safe_1 = __importDefault(require("colors/safe"));
const enums_1 = require("../../constants/enums");
const xudrpc_pb_1 = require("../../proto/xudrpc_pb");
const command_1 = require("../command");
const utils_1 = require("../utils");
const COLUMNS = [15, 13, 18, 15, 13, 18];
const COLUMNS_IN_ORDER_SIDE = COLUMNS.length / 2;
const HEADER = [
{ content: safe_1.default.green('Buy'), colSpan: 3 },
{ content: safe_1.default.red('Sell'), colSpan: 3 },
];
const SECONDARY_HEADER = [
safe_1.default.green('Quantity'),
safe_1.default.green('Price'),
safe_1.default.green('Alias'),
safe_1.default.red('Quantity'),
safe_1.default.red('Price'),
safe_1.default.red('Alias'),
];
const addOrderToSide = (orderSide) => {
const order = orderSide.pop();
if (order) {
return [
utils_1.satsToCoinsStr(order.quantity),
order.price.toString(),
order.nodeIdentifier.alias,
].map(i => order.isOwnOrder ? safe_1.default.cyan(i) : i);
}
else {
return Array.from(Array(COLUMNS_IN_ORDER_SIDE)).map(() => '');
}
};
exports.formatOrders = (orders) => {
const formattedOrders = [];
orders.ordersMap.forEach(([pairId, tradingPair]) => {
const buy = tradingPair.buyOrdersList;
const sell = tradingPair.sellOrdersList;
const totalRows = buy.length < sell.length
? sell.length : buy.length;
const tradingPairOrders = Array.from(Array(totalRows))
.map(() => {
return addOrderToSide(buy).concat(addOrderToSide(sell));
});
formattedOrders.push({
pairId,
orders: tradingPairOrders,
});
});
return formattedOrders;
};
const createTable = () => {
const table = new cli_table3_1.default({
colWidths: COLUMNS,
});
table.push(HEADER);
table.push(SECONDARY_HEADER);
return table;
};
const displayOrdersTable = (tradingPair) => {
const table = createTable();
tradingPair.orders.forEach(order => table.push(order));
console.log(safe_1.default.underline(safe_1.default.bold(`\nTrading pair: ${tradingPair.pairId}`)));
console.log(table.toString());
};
const displayTables = (orders) => {
exports.formatOrders(orders).forEach(displayOrdersTable);
};
exports.command = 'listorders [pair_id] [owner] [limit]';
exports.describe = 'list orders from the order book';
exports.builder = (argv) => argv
.option('pair_id', {
describe: 'trading pair for which to retrieve orders',
type: 'string',
})
.option('owner', {
describe: 'whether to include own, peer or both orders',
type: 'string',
choices: ['Both', 'Own', 'Peer'],
coerce: (ownerStr) => {
const ownerLower = ownerStr.toLowerCase();
return ownerLower.charAt(0).toUpperCase() + ownerLower.slice(1);
},
default: 'Both',
})
.option('limit', {
describe: 'max number of orders to return per order book side',
type: 'number',
})
.example('$0 listorders', 'list all known orders')
.example('$0 listorders LTC/BTC', 'list all LTC/BTC orders')
.example('$0 listorders LTC/BTC Peer', 'list all LTC/BTC orders from peers')
.example('$0 listorders LTC/BTC Peer 10', 'list the 10 best LTC/BTC orders from peers')
.example('$0 listorders --owner Own', 'list all local orders')
.example('$0 listorders --limit 10', 'list the 10 best orders for all trading pairs');
exports.handler = (argv) => __awaiter(void 0, void 0, void 0, function* () {
const request = new xudrpc_pb_1.ListOrdersRequest();
const pairId = argv.pair_id ? argv.pair_id.toUpperCase() : undefined;
request.setPairId(pairId);
request.setOwner(Number(enums_1.Owner[argv.owner]));
if (argv.limit) {
request.setLimit(argv.limit);
}
request.setIncludeAliases(true);
(yield command_1.loadXudClient(argv)).listOrders(request, command_1.callback(argv, displayTables));
});
//# sourceMappingURL=listorders.js.map