/** * /home/def/monitor/backend/klingex-smoketest.js * * Run: * node klingex-smoketest.js * * What it does: * - constructs KlingEx client * - calls: * client.markets.list() * client.markets.tickers() * client.markets.ticker('ETHO_USDT') * client.markets.ticker('EGAZ_USDT') * - finds the marketId/tradingPairId for ETHO/USDT and EGAZ/USDT * - tries client.markets.ohlcv(marketId,'1d',{limit:7}) */ const { KlingEx } = require("klingex"); function normKey(base, quote) { return `${String(base).toUpperCase()}_${String(quote).toUpperCase()}`; } function normKeyDash(base, quote) { return `${String(base).toUpperCase()}-${String(quote).toUpperCase()}`; } function preview(x) { if (Array.isArray(x)) return { type: "array", len: x.length, first: x[0] }; if (x && typeof x === "object") return { type: "object", keys: Object.keys(x).slice(0, 35) }; return { type: typeof x, value: x }; } async function tryCall(label, fn) { try { const r = await fn(); console.log(`OK: ${label}`, preview(r)); return r; } catch (e) { console.log(`FAIL: ${label}`); console.log(" ", e?.message || e); return null; } } function findMarketId(marketsList, targetUnderscore) { if (!Array.isArray(marketsList)) return null; for (const m of marketsList) { const base = m.base_asset_symbol ?? m.baseAssetSymbol ?? m.base ?? m.base_asset; const quote = m.quote_asset_symbol ?? m.quoteAssetSymbol ?? m.quote ?? m.quote_asset; if (!base || !quote) continue; const k1 = normKey(base, quote); const k2 = normKeyDash(base, quote); if (k1 === targetUnderscore || k2 === targetUnderscore.replace("_", "-")) { const id = m.tradingPairId ?? m.trading_pair_id ?? m.marketId ?? m.market_id ?? m.id ?? m.pair_id; if (id != null) return Number(id); } } return null; } async function main() { // README says apiKey optional for public endpoints; constructor can be empty. const client = new KlingEx(); console.log("client keys:", Object.keys(client)); console.log("markets keys:", client.markets ? Object.keys(client.markets) : "(no client.markets)"); const markets = await tryCall("client.markets.list()", () => client.markets.list()); await tryCall("client.markets.tickers()", () => client.markets.tickers()); const etho = await tryCall("client.markets.ticker('ETHO_USDT')", () => client.markets.ticker("ETHO_USDT")); const egaz = await tryCall("client.markets.ticker('EGAZ_USDT')", () => client.markets.ticker("EGAZ_USDT")); const ethoId = findMarketId(markets, "ETHO_USDT"); const egazId = findMarketId(markets, "EGAZ_USDT"); console.log("ETHO_USDT marketId/tradingPairId:", ethoId); console.log("EGAZ_USDT marketId/tradingPairId:", egazId); if (ethoId) { await tryCall(`client.markets.ohlcv(${ethoId}, '1d', {limit:7})`, () => client.markets.ohlcv(ethoId, "1d", { limit: 7 }) ); } if (egazId) { await tryCall(`client.markets.ohlcv(${egazId}, '1d', {limit:7})`, () => client.markets.ohlcv(egazId, "1d", { limit: 7 }) ); } console.log("Done."); } main().catch((e) => { console.error("Unhandled:", e); process.exit(99); });