You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
105 lines
3.2 KiB
105 lines
3.2 KiB
/** |
|
* /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); |
|
});
|
|
|