Skip to content

Releases: pmxt-dev/pmxt

v2.43.20

24 May 16:59

Choose a tag to compare

Fixed

  • Kalshi: Non-null assertion guards on WebSocket resolver maps + 30s connection timeout. Fixes #230, #231.
  • Gemini Titan: Non-null assertion guards on resolver maps + 30s handshake timeout. Fixes #235, #236.
  • Opinion: Non-null assertion guards on resolver maps + 30s connection timeout. Fixes #239, #249.
  • Myriad: Non-null assertion guards on WebSocket resolver/rejecter maps. Fixes #240.
  • Polymarket: Non-null assertion guards, bounded pendingTrades (1000/asset), userCallbacks dedup + cap (100), 30s connection timeout on both channels. Fixes #243, #245, #247, #334, #380.
  • Polymarket US: Non-null assertion guards on WebSocket socket reference. Fixes #284.
  • Polymarket: Guard Map.get() on candle buckets in normalizer. Fixes #321.
  • Limitless: Non-null assertion guards on websocket resolvers/buffers + stale resolver cleanup on timeout + client orderClient/signer guards + normalizer param narrowing. Fixes #257, #290, #303, #372.
  • Kalshi/Limitless/GoldSky: Remove unsafe as casts on nullable fields — use type predicates, null guards, optional chaining. Fixes #336.
  • TypeScript SDK: Non-null guards on ws-client.ts send + 30s fetch timeout on router compareMarketPrices. Fixes #223, #281.
  • Chainlink/Binance feeds: Add 30s connection timeout to WebSocket establishConnection(). Fixes #252, #253.
  • Server: Replace console calls with structured logger in server/index.ts. Fixes #306, #308, #310, #311, #312.
  • TypeScript SDK: Replace console.warn with structured logger in SDK router. Fixes #396.
  • Utils: Non-null guards on market-utils.ts + max queue depth (1000) on throttler + watcher resolver safety. Fixes #269, #296, #329.

Performance

  • Kalshi: Replace O(n²) concat() with push() in fetcher pagination (3 loops, MAX_PAGES=1000). Fixes #343.
  • Opinion: Replace O(n²) spread with push() in fetcher pagination (MAX_PAGES=500). Fixes #347.
  • Smarkets: Replace O(n²) spread with push() in fetcher pagination + map building (MAX_PAGES=100). Fixes #355.

Installation

npm:

npm install pmxtjs@2.43.20

PyPI:

pip install pmxt==2.43.20

Links

What's Changed

Full Changelog: v2.43.19f...v2.43.20f

v2.43.19

24 May 16:34

Choose a tag to compare

Fixed

  • Myriad: Read eventId instead of deprecated questionId in normalizer and utils. Fixes #556.

Installation

npm:

npm install pmxtjs@2.43.19

PyPI:

pip install pmxt==2.43.19

Links

What's Changed

  • fix: read eventId instead of questionId in myriad normalizer by @realfishsam in #602

Full Changelog: v2.43.18f...v2.43.19f

v2.43.18

24 May 15:44

Choose a tag to compare

Fixed

  • Python SDK: Python 3.8-compatible annotations in errors.py (from __future__ import annotations). Fixes #561.
  • Python SDK: Replace bare list[T] with List[T] in models.py for Python 3.8 compat. Fixes #562.
  • Python SDK: Add missing exports (MarketFilterCriteria, EventFilterCriteria, SortOption, OrderSide, etc.) to __init__.py and __all__. Add return type annotations to stop_server()/restart_server(). Fixes #565, #471.
  • Python SDK: Remove dangerous defaults (side="buy", amount=0) from create_order/build_order — now required keyword-only params. Fixes #466.
  • Python SDK: Rename type parameter to order_type to avoid shadowing Python built-in. Add _convert_params_to_camel() for MarketFetchParams/EventFetchParams. Rename OrderBook.dt to datetime. Add concrete return types to 9 router proxy methods. Fixes #563, #449, #452, #456, #496.
  • Python SDK: Add SubscriptionOption type, typed BuiltOrder.params/BuiltOrder.tx, MatchResult/EventMatchResult inheritance from unified types. Fixes #467, #500, #501, #497, #498.
  • Server: Validate query params in feed-routes.ts with runtime typeof checks instead of unsafe as string casts. Fixes #558.
  • Server: Validate parsed.method in WebSocket handler before use. Fixes #559.
  • Limitless: Replace 9 non-null assertions on optional interface methods with guard-and-throw checks. Fixes #560.
  • Hyperliquid: Correct allMids lookup key — use @{outcomeId} instead of #{encoding}, fixing prices hardcoded to 0.5. Fixes #441.
  • Hyperliquid: Add quoteToken to HyperliquidRawOutcome interface. Fixes #555.
  • Hyperliquid: Add builderFee to HyperliquidRawFill, users to HyperliquidRawTrade, make origSz optional. Fixes #547, #546, #520.
  • Kalshi: Read liquidity_dollars instead of deprecated liquidity field. Fixes #554.
  • Kalshi: Remove deprecated mututals_description from event normalizer. Fixes #443.
  • Kalshi: Handle missing image_url in event normalizer. Fixes #442.
  • Kalshi: Sync spec — add ts_ms to Order, remove client_order_id from Fill, add balance_dollars to GetBalance, add subaccount query param. Fixes #542, #517, #522, #433.
  • Polymarket: Use camelCase endDateIso instead of snake_case end_date_iso in normalizer. Fixes #557.
  • Polymarket US: Map cashValue to unrealizedPnL and currentPrice instead of hardcoding 0. Fixes #533.
  • Gemini Titan: Use dedicated volume24h field instead of volume for 24h volume. Fixes #444.
  • Gemini Titan: Type GeminiRawEvent.series as Record<string, any> | null to match live API. Fixes #439.
  • Metaculus: Handle 403 api_forecasting_not_enabled error. Fixes #515.
  • Baozi: Correct category field mapping — was returning tier instead of topic category. Fixes #540.
  • Opinion: Update base URL from openapi.opinion.trade to proxy.opinion.trade:8443. Fixes #516.
  • Smarkets: Sync spec — add CFTC jurisdiction, cftc object, original_price, original_bets, relax fullcover required fields. Fixes #543, #544, #545, #527, #528.
  • GoldSky: Add 30s timeout to subscriber fetch. Fixes #512.
  • Probable: Clean up orderBookResolvers after resolution to prevent memory leak. Fixes #550.
  • TypeScript SDK: Add question getter, bestBid/bestAsk on MarketOutcome, type fetchMarketsPaginated params, sync getExecutionPrice to match core. Fixes #453, #454, #462, #470, #502, #503.

Changed

  • Router: compareMarketPrices, fetchRelatedMarkets, and fetchHedges now accept optional params. Fixes #448.

Performance

  • Metaculus: Replace O(n²) array.concat() with push() in fetchMarkets and fetchEvents pagination. Fixes #551, #552.

Infrastructure

  • RPC endpoints: Add LIMITLESS_RPC_URL and OPINION_RPC_URL env var fallbacks for hardcoded blockchain RPC URLs. Fixes #507.
  • Service URLs: Add PMXT_API_URL, POLYMARKET_GOLDSKY_URL, OPINION_API_URL, OPINION_WS_URL env var fallbacks. Fixes #508.

Installation

npm:

npm install pmxtjs@2.43.18

PyPI:

pip install pmxt==2.43.18

Links

What's Changed

  • fix: use Python 3.8-compatible annotations in errors.py by @realfishsam in #566
  • fix: use Python 3.8-compatible generics in models.py by @realfishsam in #567
  • fix: validate query params in feed-routes instead of unsafe casts by @realfishsam in #568
  • fix: validate parsed.method in ws-handler before use by @realfishsam in #569
  • fix: replace non-null assertions with guard checks in limitless by @realfishsam in #570
  • perf: replace O(n²) concat with push in metaculus fetchMarkets by @realfishsam in #571
  • perf: replace O(n²) concat with push in metaculus fetchEvents by @realfishsam in #572
  • fix: clean up orderBookResolvers after resolution in probable websocket by @realfishsam in #573
  • fix: add 30s timeout to GoldSky subscriber fetch by @realfishsam in #575
  • fix: add missing exports and return types in Python init.py by @realfishsam in #576
  • fix: add quoteToken to hyperliquid outcome interface by @realfishsam in #577
  • fix: type GeminiRawEvent.series as object|null by @realfishsam in #578
  • fix: remove deprecated mututals_description from kalshi normalizer by @realfishsam in #580
  • fix: map cashValue to unrealizedPnL in polymarket_us by @realfishsam in #582
  • fix: add env fallbacks for hardcoded RPC endpoints by @realfishsam in #583
  • fix: use camelCase endDateIso in polymarket normalizer by @realfishsam in #584
  • fix: handle 403 api_forecasting_not_enabled in metaculus by @realfishsam in #585
  • fix: correct category field mapping in baozi normalizer by @realfishsam in #587
  • fix: read liquidity_dollars instead of deprecated liquidity in kalshi by @realfishsam in #588
  • fix: update opinion base URL to proxy.opinion.trade:8443 by @realfishsam in #591
  • fix: sync Kalshi spec with upstream API changes by @realfishsam in #590
  • fix: handle missing image_url in kalshi event normalizer by @realfishsam in #592
  • fix: use dedicated volume24h field in gemini-titan normalizer by @realfishsam in #594
  • fix: correct allMids lookup key in hyperliquid normalizer by @realfishsam in #595
  • fix: type safety and SDK parity fixes in TypeScript client by @realfishsam in #596
  • fix: sync smarkets spec with upstream API changes by @realfishsam in #597
  • fix: sync hyperliquid spec with upstream API changes by @realfishsam in #599
  • fix: type safety and naming fixes in Python client.py by @realfishsam in #600
  • fix: add env fallbacks for hardcoded service URLs by @realfishsam in #589
  • fix: remove dangerous defaults from Python create_order/build_order by @realfishsam in #598

Full Changelog: v2.43.17f...v2.43.18f

v2.43.17

24 May 14:30

Choose a tag to compare

Added

  • Kalshi: Added cursor-aware event page fetching for bounded catalog ingestion. fetchEventsPage() returns a normalized event batch plus the next Kalshi cursor, and the underlying fetcher caps each upstream page to the remaining requested rows.

Installation

npm:

npm install pmxtjs@2.43.17

PyPI:

pip install pmxt==2.43.17

Links

Full Changelog: v2.43.16f...v2.43.17f

v2.43.16

24 May 14:22

Choose a tag to compare

Fixed

  • Baozi: Initialize order book resolver queues to eliminate unsafe non-null assertion on Map.get() in WebSocket handler. Fixes #261.
  • Probable: Initialize order book resolver queues to eliminate unsafe non-null assertion on Map.get() in WebSocket handler. Fixes #264.
  • Python SDK: Export FirehoseEvent and SubscribedAddressSnapshot from package entry point and __all__. Fixes #461.
  • Python SDK: Generate correct class names for underscore-delimited exchanges (Polymarket_us -> PolymarketUS), with legacy alias preserved for backward compatibility.
  • SDK generators: Preserve hand-written fetchOrderBook return type (OrderBook | OrderBook[]) and positional argument handling during client regeneration.

Added

  • Regression tests for Baozi and Probable WebSocket resolver queue initialization.
  • Python public export list regression test.

Installation

npm:

npm install pmxtjs@2.43.16

PyPI:

pip install pmxt==2.43.16

Links

What's Changed

Full Changelog: v2.43.15f...v2.43.16f

v2.43.15

24 May 13:55

Choose a tag to compare

Fixed

  • Kalshi: Market normalization now preserves the venue's market-level title instead of replacing it with the parent event title. Kalshi market slugs now use the market ticker, and raw market status is carried through to the unified market.

Installation

npm:

npm install pmxtjs@2.43.15

PyPI:

pip install pmxt==2.43.15

Links

Full Changelog: v2.43.14f...v2.43.15f

v2.43.14

23 May 22:59

Choose a tag to compare

Fixed

  • Docs: Updated the fetchOrderBook API reference examples to show the recommended historical order book flow: fetch a market by slug, pass market_id / marketId, and select the side with params.outcome: "yes" or "no".

Installation

npm:

npm install pmxtjs@2.43.14

PyPI:

pip install pmxt==2.43.14

Links

Full Changelog: v2.43.13f...v2.43.14f

v2.43.13

23 May 22:06

Choose a tag to compare

Fixed

  • fetchOrderBook: params.outcome now accepts "yes"/"no" outcome aliases when the first argument is a market ID. The alias is resolved to the venue's actual outcome token ID before fetching live or historical order books, while raw outcome token IDs continue to work unchanged.

Installation

npm:

npm install pmxtjs@2.43.13

PyPI:

pip install pmxt==2.43.13

Links

Full Changelog: v2.43.12f...v2.43.13f

v2.43.12

23 May 13:26

Choose a tag to compare

Fixed

  • fetchTrades: Polymarket fetcher now forwards the limit parameter to the CLOB API. Previously, limit was silently ignored and Polymarket's API defaulted to 100 results per request — making it impossible to fetch more than 100 trades in a single call.
  • fetchTrades: Removed hardcoded limit: 100 defaults from Kalshi, Myriad, and Smarkets fetchers. When no limit is specified, the upstream API's own default is used instead of our arbitrary cap.
  • fetchTrades: Smarkets fetcher now respects the user-provided limit parameter instead of ignoring it entirely.
  • fetchTrades: Added MAX_TRADES_LIMIT = 1000 validation across all venues (Polymarket, Kalshi, Smarkets, Myriad, Probable). Passing limit > 1000 now throws a ValidationError instead of silently returning fewer results.

Installation

npm:

npm install pmxtjs@2.43.12

PyPI:

pip install pmxt==2.43.12

Links

Full Changelog: v2.43.11f...v2.43.12f

v2.43.11

23 May 11:51

Choose a tag to compare

Fixed

  • Cleanup: Removed testDummyMethod stubs from BaseExchange.ts, TypeScript SDK client, and Python SDK client. Regenerated OpenAPI spec and method-verbs.

Installation

npm:

npm install pmxtjs@2.43.11

PyPI:

pip install pmxt==2.43.11

Links

Full Changelog: v2.43.9f...v2.43.11f