CCXT
TypeScript Examples

Exchange Capabitities

Exchange Capabitities — CCXT TypeScript code example.


// This example uses Node-only libraries (ololog, as-table, ansicolor)
// and ansi-color property chains (str.red.dim, str.green) that can't
// be transpiled meaningfully to Python or PHP. Kept as a JS-only
// developer tool — the auto-transpile flag is intentionally omitted.

'use strict';

import asTable from 'as-table';
import log from 'ololog';
import ansi from 'ansicolor';
import ccxt from '../../js/ccxt.js';

ansi.nice; // eslint-disable-line no-unused-expressions

// @ts-expect-error
log.nice = log.configure ({ locate: false, stringify: asTable.configure ({ print: x => x }) }); // eslint-disable-line

console.log ('CCXT Version:', ccxt.version);

async function test () {
    let total = 0;
    let missing = 0;
    let implemented = 0;
    let emulated = 0;

    const exchanges = ccxt.exchanges
        .map ((id) => new ccxt[id] ())
        .filter ((exchange) => exchange.has.ws);

    log (
        asTable (
            exchanges
                .map ((exchange) => {
                    const result = {};
                    [
                        'ws',
                        'watchOrderBook',
                        'watchTicker',
                        'watchTrades',
                        'watchOHLCV',
                        'watchBalance',
                        'watchOrders',
                        'watchMyTrades',
                    ].forEach ((key) => {
                        total += 1;
                        let capability = (key in exchange.has) ? exchange.has[key].toString () : 'undefined';
                        if (!exchange.has[key]) {
                            capability = exchange.id.red.dim;
                            missing += 1;
                        } else if (exchange.has[key] === 'emulated') {
                            capability = exchange.id.yellow;
                            emulated += 1;
                        } else {
                            capability = exchange.id.green;
                            implemented += 1;
                        }

                        result[key] = capability;
                    });
                    return result;
                })
        )
    );

    log (
        'Summary:',
        // @ts-expect-error
        exchanges.length.toString ().green, 'exchanges,', // eslint-disable-line
        // @ts-expect-error
        implemented.toString ().green, 'methods implemented,', // eslint-disable-line
        // @ts-expect-error
        emulated.toString ().yellow, 'emulated,', // eslint-disable-line
        // @ts-expect-error
        missing.toString ().red, 'missing,', // eslint-disable-line
        total.toString (), 'total') // eslint-disable-line

}

test ();