scripts/smoke.ts
v0.1.0 · 1.7 KB
// Public data only: no keys, account identifiers, authenticated reads, or orders.
import { createRestClient, decodeRefdata, QFEX_HOSTS } from '../src/index.js';
function required(name: string): number {
const value = Number(process.env[name]);
if (!Number.isFinite(value) || value <= 0) throw new TypeError('Required positive smoke policy: ' + name);
return value;
}
async function main() {
const instance = process.env.QFEX_KIT_SMOKE_ENVIRONMENT ?? 'uat';
if (instance !== 'mainnet' && instance !== 'uat') throw new TypeError('Environment must be mainnet or uat');
const client = createRestClient({
baseUrl: QFEX_HOSTS[instance].rest,
readOnly: true,
restMaxRps: required('QFEX_KIT_SMOKE_RPS'),
rateLimitDefaultBackoffMs: required('QFEX_KIT_SMOKE_BACKOFF_MS'),
rateBackoff: { minMs: required('QFEX_KIT_SMOKE_BACKOFF_MIN_MS'), maxMs: required('QFEX_KIT_SMOKE_BACKOFF_MAX_MS') },
retryDelayMs: () => required('QFEX_KIT_SMOKE_RETRY_DELAY_MS'),
readTries: required('QFEX_KIT_SMOKE_READ_TRIES'),
timeoutMs: required('QFEX_KIT_SMOKE_TIMEOUT_MS'),
maxWaitMs: required('QFEX_KIT_SMOKE_MAX_WAIT_MS'),
skewHistoryLimit: required('QFEX_KIT_SMOKE_SKEW_SAMPLES'),
});
const refdata = await client.fetchRefdata();
const decoded = decodeRefdata(refdata.payload);
console.log('ok reference data: ' + decoded.markets.size + ' markets');
const contracts = await client.fetchContracts();
if (!contracts.length) throw new Error('Empty contract response');
console.log('ok contracts: ' + contracts.length + ' rows');
}
main()
.then(() => console.log('SMOKE PASSED'))
.catch((error) => {
console.error('SMOKE FAILED: ' + String(error));
process.exitCode = 1;
});