Releases: pmxt-dev/pmxt
Releases · pmxt-dev/pmxt
v2.43.20
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),userCallbacksdedup + 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
ascasts on nullable fields — use type predicates, null guards, optional chaining. Fixes #336. - TypeScript SDK: Non-null guards on
ws-client.tssend + 30s fetch timeout on routercompareMarketPrices. 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.warnwith 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()withpush()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.20PyPI:
pip install pmxt==2.43.20Links
What's Changed
- perf: replace O(n²) concat with push in kalshi fetcher by @realfishsam in #603
- fix: opinion fetcher perf + websocket safety by @realfishsam in #604
- fix: limitless non-null assertions + resolver leak cleanup by @realfishsam in #605
- fix: add 30s connection timeout to feed WebSockets by @realfishsam in #606
- fix: utils non-null guards + throttler max depth by @realfishsam in #607
- fix: guard Map.get() on candle buckets in polymarket normalizer by @realfishsam in #608
- fix: replace console.warn with structured logger in SDK router by @realfishsam in #609
- fix: gemini-titan websocket non-null guards + timeout by @realfishsam in #610
- fix: polymarket websocket safety + bounded buffers + timeouts by @realfishsam in #611
- fix: SDK non-null guards + router fetch timeout by @realfishsam in #612
- fix: replace console with logger in server/index.ts by @realfishsam in #613
- fix: myriad websocket non-null guards by @realfishsam in #614
- fix: kalshi websocket non-null guards + connection timeout by @realfishsam in #615
- perf: replace O(n²) spread with push in smarkets fetcher by @realfishsam in #616
- fix: remove unsafe as casts on nullable fields by @realfishsam in #617
Full Changelog: v2.43.19f...v2.43.20f
v2.43.19
Fixed
- Myriad: Read
eventIdinstead of deprecatedquestionIdin normalizer and utils. Fixes #556.
Installation
npm:
npm install pmxtjs@2.43.19PyPI:
pip install pmxt==2.43.19Links
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
Fixed
- Python SDK: Python 3.8-compatible annotations in
errors.py(from __future__ import annotations). Fixes #561. - Python SDK: Replace bare
list[T]withList[T]inmodels.pyfor Python 3.8 compat. Fixes #562. - Python SDK: Add missing exports (
MarketFilterCriteria,EventFilterCriteria,SortOption,OrderSide, etc.) to__init__.pyand__all__. Add return type annotations tostop_server()/restart_server(). Fixes #565, #471. - Python SDK: Remove dangerous defaults (
side="buy",amount=0) fromcreate_order/build_order— now required keyword-only params. Fixes #466. - Python SDK: Rename
typeparameter toorder_typeto avoid shadowing Python built-in. Add_convert_params_to_camel()forMarketFetchParams/EventFetchParams. RenameOrderBook.dttodatetime. Add concrete return types to 9 router proxy methods. Fixes #563, #449, #452, #456, #496. - Python SDK: Add
SubscriptionOptiontype, typedBuiltOrder.params/BuiltOrder.tx,MatchResult/EventMatchResultinheritance from unified types. Fixes #467, #500, #501, #497, #498. - Server: Validate query params in
feed-routes.tswith runtimetypeofchecks instead of unsafeas stringcasts. Fixes #558. - Server: Validate
parsed.methodin 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
allMidslookup key — use@{outcomeId}instead of#{encoding}, fixing prices hardcoded to 0.5. Fixes #441. - Hyperliquid: Add
quoteTokentoHyperliquidRawOutcomeinterface. Fixes #555. - Hyperliquid: Add
builderFeetoHyperliquidRawFill,userstoHyperliquidRawTrade, makeorigSzoptional. Fixes #547, #546, #520. - Kalshi: Read
liquidity_dollarsinstead of deprecatedliquidityfield. Fixes #554. - Kalshi: Remove deprecated
mututals_descriptionfrom event normalizer. Fixes #443. - Kalshi: Handle missing
image_urlin event normalizer. Fixes #442. - Kalshi: Sync spec — add
ts_msto Order, removeclient_order_idfrom Fill, addbalance_dollarsto GetBalance, addsubaccountquery param. Fixes #542, #517, #522, #433. - Polymarket: Use camelCase
endDateIsoinstead of snake_caseend_date_isoin normalizer. Fixes #557. - Polymarket US: Map
cashValuetounrealizedPnLandcurrentPriceinstead of hardcoding 0. Fixes #533. - Gemini Titan: Use dedicated
volume24hfield instead ofvolumefor 24h volume. Fixes #444. - Gemini Titan: Type
GeminiRawEvent.seriesasRecord<string, any> | nullto match live API. Fixes #439. - Metaculus: Handle 403
api_forecasting_not_enablederror. Fixes #515. - Baozi: Correct category field mapping — was returning tier instead of topic category. Fixes #540.
- Opinion: Update base URL from
openapi.opinion.tradetoproxy.opinion.trade:8443. Fixes #516. - Smarkets: Sync spec — add CFTC jurisdiction,
cftcobject,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
orderBookResolversafter resolution to prevent memory leak. Fixes #550. - TypeScript SDK: Add
questiongetter,bestBid/bestAskonMarketOutcome, typefetchMarketsPaginatedparams, syncgetExecutionPriceto match core. Fixes #453, #454, #462, #470, #502, #503.
Changed
- Router:
compareMarketPrices,fetchRelatedMarkets, andfetchHedgesnow accept optionalparams. Fixes #448.
Performance
- Metaculus: Replace O(n²)
array.concat()withpush()infetchMarketsandfetchEventspagination. Fixes #551, #552.
Infrastructure
- RPC endpoints: Add
LIMITLESS_RPC_URLandOPINION_RPC_URLenv var fallbacks for hardcoded blockchain RPC URLs. Fixes #507. - Service URLs: Add
PMXT_API_URL,POLYMARKET_GOLDSKY_URL,OPINION_API_URL,OPINION_WS_URLenv var fallbacks. Fixes #508.
Installation
npm:
npm install pmxtjs@2.43.18PyPI:
pip install pmxt==2.43.18Links
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
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.17PyPI:
pip install pmxt==2.43.17Links
Full Changelog: v2.43.16f...v2.43.17f
v2.43.16
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
FirehoseEventandSubscribedAddressSnapshotfrom 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
fetchOrderBookreturn 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.16PyPI:
pip install pmxt==2.43.16Links
What's Changed
- fix: initialize Probable order book resolver queues by @iccccccccccccc in #510
- fix: initialize Baozi order book resolver queues by @iccccccccccccc in #509
- fix: export Python websocket return types by @iccccccccccccc in #511
Full Changelog: v2.43.15f...v2.43.16f
v2.43.15
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.15PyPI:
pip install pmxt==2.43.15Links
Full Changelog: v2.43.14f...v2.43.15f
v2.43.14
Fixed
- Docs: Updated the
fetchOrderBookAPI reference examples to show the recommended historical order book flow: fetch a market by slug, passmarket_id/marketId, and select the side withparams.outcome: "yes"or"no".
Installation
npm:
npm install pmxtjs@2.43.14PyPI:
pip install pmxt==2.43.14Links
Full Changelog: v2.43.13f...v2.43.14f
v2.43.13
Fixed
- fetchOrderBook:
params.outcomenow 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.13PyPI:
pip install pmxt==2.43.13Links
Full Changelog: v2.43.12f...v2.43.13f
v2.43.12
Fixed
- fetchTrades: Polymarket fetcher now forwards the
limitparameter to the CLOB API. Previously,limitwas 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: 100defaults 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
limitparameter instead of ignoring it entirely. - fetchTrades: Added
MAX_TRADES_LIMIT = 1000validation across all venues (Polymarket, Kalshi, Smarkets, Myriad, Probable). Passinglimit > 1000now throws aValidationErrorinstead of silently returning fewer results.
Installation
npm:
npm install pmxtjs@2.43.12PyPI:
pip install pmxt==2.43.12Links
Full Changelog: v2.43.11f...v2.43.12f
v2.43.11
Fixed
- Cleanup: Removed
testDummyMethodstubs fromBaseExchange.ts, TypeScript SDK client, and Python SDK client. Regenerated OpenAPI spec and method-verbs.
Installation
npm:
npm install pmxtjs@2.43.11PyPI:
pip install pmxt==2.43.11Links
Full Changelog: v2.43.9f...v2.43.11f