exchangePairs
Single merged query for the runner data-download picker. Combines the
exchange's live market listing with the datalake's cached-pairs index
and returns a search-filtered, cached-first-sorted slice capped at
limit. Replaces the previous two-query client-side merge that made
the runner form hydrate with 1000+ DOM nodes per exchange.
searchis a case-insensitive substring match on the symbol (typically the BASE/QUOTE string).limitcaps the returned items; the default keeps the dropdown responsive even for exchanges with a few hundred spot pairs.totalCountandcachedCountreflect the FULL universe (pre- search) so the UI can display "Showing N of M pairs (C cached)".
exchangePairs(
exchange: String!
tradingMode: MarketDataTradingMode
search: String
limit: Int = 100
offset: Int = 0
validateSymbols: [String!]
): ExchangePairsResult!
Arguments
exchangePairs.exchange ● String! non-null scalar
exchangePairs.tradingMode ● MarketDataTradingMode enum
exchangePairs.search ● String scalar
exchangePairs.limit ● Int scalar
exchangePairs.offset ● Int scalar
Skip the first N matching items. Combined with limit, drives infinite
scroll on the runner data-download picker (offset = items.length on
each fetchMore). Defaults to 0 so existing callers see no behaviour
change.
exchangePairs.validateSymbols ● [String!] list scalar
Optional list of symbols the caller has currently selected. Any
symbol in this list NOT present in the exchange's market listing is
returned in invalidSymbols so the frontend can mark stale chips.
Empty / null skips the validation entirely (free).
Type
ExchangePairsResult object
Paged, sorted result of the exchangePairs query. Items are sorted
cached-first so zero-backfill picks appear at the top of the dropdown;
within each cached/uncached group the order matches the exchange's
native market-listing order (alphabetical for most adapters).