Skip to content
markpaper

scripts/smoke.ts

v0.1.0 · 1.7 KB

Download file
// 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;
  });
All files