Skip to content

SmarketsExchange has zero WebSocket/streaming support — watchOrderBook/watchOrderBooks/watchTrades all fall through to base-stub throws #2091

Description

@realfishsam

Gap

SmarketsExchange has no websocket.ts file at all — the only one of the nine batch-2-audited exchanges (mock, myriad, opinion, polymarket, polymarket_us, probable, rain, smarkets, suibets) missing one entirely, and unlike SuiBetsExchange (which explicitly declares watchOrderBook: false/watchTrades: false in capabilityOverrides as a deliberate "not supported" statement), Smarkets declares nothing — watchOrderBook, watchOrderBooks, unwatchOrderBook, watchTrades, watchAddress, unwatchAddress all silently fall through to BaseExchange's throwing stubs. This mirrors the already-filed Hyperliquid gap (#2076) for a second venue.

Core

  • core/src/exchanges/smarkets/ — file listing confirms no websocket.ts exists (every other exchange except polymarket_us-via-vendor-SDK and suibets/baozi's minimal cases has one; Smarkets has none whatsoever).
  • core/src/exchanges/smarkets/index.ts:37-40capabilityOverrides declares only fetchPositions: 'emulated' and fetchSeries: false; no watchOrderBook/watchTrades/etc. entries, so these aren't marked as a deliberate exclusion.
  • core/src/exchanges/smarkets/index.ts:366close() is overridden as an explicit no-op with the comment "No WebSocket or persistent connections to clean up" — confirming (from the implementer's own comment) that streaming was never built for this venue, not merely mis-wired.
  • core/src/BaseExchange.ts:1585 (watchOrderBook), :1640 (watchTrades), :1622 (unwatchOrderBook) — base stubs, throw "not supported by Smarkets" when unoverridden.

TypeScript SDK

N/A at the SDK layer — sdks/typescript/pmxt/client.ts:2077 (watchOrderBook)/:2247 (watchTrades) are generic Exchange passthroughs that call core over the /ws WebSocket transport; for exchangeName: 'smarkets' these will always fail because core has no handler.

Python SDK

N/A at the SDK layer — same generic passthroughs (sdks/python/pmxt/client.py:2597 watch_order_book, :2749 watch_trades), same failure mode for Smarkets.

Evidence

Read every file in core/src/exchanges/smarkets/ (api.ts, auth.ts, config.ts, errors.ts, fetcher.ts, index.ts, normalizer.ts, price.ts) — confirmed no websocket.ts file and no WS-related imports anywhere in index.ts. Smarkets' own api.ts OpenAPI spec (10,695 lines, the largest in the repo) contains 21 documented REST operations but zero WebSocket/streaming operations, suggesting the raw Smarkets API itself may not expose a WS feed the current implementation is built against — worth core-side triage to confirm whether this is "not yet implemented" or "the venue has no realtime API to wrap," but as it stands the capability is silently absent rather than explicitly declared unsupported like SuiBets.

Impact

Any SDK caller expecting real-time order-book/trade updates for Smarkets (following the same watchOrderBook/watchTrades pattern that works for Polymarket, Kalshi, Limitless, Opinion, Myriad, GeminiTitan, Rain, PolymarketUS) gets an opaque "not supported" throw with no capability-map signal distinguishing it from a temporarily-missing feature versus a venue that fundamentally cannot stream.


Found by automated Core-to-SDK surface coverage audit

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions