Releases: pmxt-dev/pmxt
Releases · pmxt-dev/pmxt
v2.19.3
Fixed
- TypeScript build failure due to missing
buildOrderandsubmitOrderin exchangehasobjects: When the new build-only order methods were added to theExchangeHasinterface, several exchange implementations were not updated to include these properties. AddedbuildOrder: falseandsubmitOrder: falseto BaoziExchange, LimitlessExchange, MyriadExchange, and ProbableExchange to match the interface requirements.
Installation
npm:
npm install pmxtjs@2.19.3PyPI:
pip install pmxt==2.19.3Links
What's Changed
New Contributors
Full Changelog: v2.18.1f...v2.19.3f
v2.9.3
Fixed
- TypeScript build failure due to missing
buildOrderandsubmitOrderin exchangehasobjects: When the new build-only order methods were added to theExchangeHasinterface, several exchange implementations were not updated to include these properties. AddedbuildOrder: falseandsubmitOrder: falseto BaoziExchange, LimitlessExchange, MyriadExchange, and ProbableExchange to match the interface requirements.
Installation
npm:
npm install pmxtjs@2.9.3PyPI:
pip install pmxt==2.9.3Links
What's Changed
New Contributors
Full Changelog: v2.18.1f...v2.9.3f
v2.18.1
Fixed
- Kalshi
UnifiedEvent.descriptionalways empty: Kalshi'smututals_descriptionfield is alwaysnullin their API responses, soUnifiedEvent.descriptionwas an empty string for every event. The Kalshi adapter now derives a description from the markets'rules_primarytext by extracting the longest common prefix and suffix across all child markets and substituting the variable region with{x}. For example, a 34-market event produces"If {x} announces a presidential campaign to contest the presidential nomination of the Democratic party for the 2028 U.S. presidential election, then the market resolves to Yes."Single-market events return therules_primarytext as-is. Events where no meaningful template can be extracted (shared fixed text < 20 chars, or all markets identical) fall back to the first market'srules_primary.
Installation
npm:
npm install pmxtjs@2.18.1PyPI:
pip install pmxt==2.18.1Links
Full Changelog: v2.18.0f...v2.18.1f
v2.18.0
Fixed
UnifiedEventnow includesvolume24handvolumefields, summed from child markets at
normalization time. Previously these fields were absent despite being the natural aggregate
of each market's volume. Sort-by-volume on event listings now works without manual aggregation
by the caller.
Changed
UnifiedEvent.volume24h: numberis now a required field (mirrorsUnifiedMarket.volume24h).UnifiedEvent.volume?: numberis now an optional field (mirrorsUnifiedMarket.volume);
only populated when at least one child market exposes lifetime volume.
Installation
npm:
npm install pmxtjs@2.18.0PyPI:
pip install pmxt==2.18.0Links
Full Changelog: v2.17.9f...v2.18.0f
v2.17.9
Fixed
- TypeScript SDK: Server startup race condition causes 401 Unauthorized: After a version mismatch was detected, the
ServerManagerwould kill the old server and delete the lock file, then callwaitForServer(). Because the lock file was gone,getRunningPort()fell back to the default port 3847. If any other process (e.g. an unrelated local server) was already responding on that port,waitForServer()would return immediately with no lock file present, causinggetAccessToken()to returnundefinedand all subsequent API requests to be sent without an auth token. Fixed by rewritingwaitForServer()to read the lock file directly on each poll iteration and only return when a lock file is present and the server at that file's port passes a health check. This prevents falsely matching an unrelated server on the default port.
Installation
npm:
npm install pmxtjs@2.17.9PyPI:
pip install pmxt==2.17.9Links
Full Changelog: v2.17.8f...v2.17.9f
v2.17.8
Fixed
- Python SDK
fetch_ohlcvdeserialization error: Callingfetch_ohlcv()raisedValueError: Multiple matches found when deserializing... with oneOf schemas: HistoryFilterParams, OHLCVParamsbecause the OpenAPI spec emittedoneOf: [OHLCVParams, HistoryFilterParams]for theparamsargument. Since both schemas are structurally identical in JSON (same four fields, differing only inresolutionbeing optional vs. required), pydantic matched both branches and raised an exception. Fixed by removing the deprecatedHistoryFilterParamsunion fromfetchOHLCVinBaseExchange.tsand all exchange implementations, then regenerating the OpenAPI spec. The spec now emits onlyOHLCVParamsfor this parameter.fetchTradesis unaffected as itsHistoryFilterParams | TradesParamsunion has no structural ambiguity.
Installation
npm:
npm install pmxtjs@2.17.8PyPI:
pip install pmxt==2.17.8Links
Full Changelog: v2.17.7f...v2.17.8f
v2.17.7
Fixed
- Python SDK Missing Exchange Classes:
pmxt.Probable,pmxt.Baozi, andpmxt.MyriadraisedAttributeErroron import because the Python SDK's exchange subclasses were maintained manually and had drifted from the TypeScript core. All three classes are now available.
Infrastructure
- Auto-generated Python SDK exchange classes:
sdks/python/pmxt/_exchanges.pyis now generated fromcore/src/server/app.ts(the single source of truth for registered exchanges) viacore/scripts/generate-python-exchanges.js. The generator also keeps__init__.pyimports and__all__in sync. A CI guard (python-exchanges-check.yml) fails any PR where the generated file diverges from the committed one. - Auto-generated
COMPLIANCE.md: The feature support matrix is now generated from exchange implementations viacore/scripts/generate-compliance.js, replacing the previously manual document. A CI guard (compliance-check.yml) keeps it in sync withcore/src/exchanges/*/index.ts. - TypeScript SDK client methods CI guard: Added
typescript-client-check.ymlto fail PRs whereBaseExchange.tschanges without regenerating the corresponding methods in the TypeScript SDKclient.ts. - All three generators are wired into
generate:sdk:alland run automatically on every publish.
Installation
npm:
npm install pmxtjs@2.17.7PyPI:
pip install pmxt==2.17.7Links
Full Changelog: v2.17.6f...v2.17.7f
v2.17.6
Fixed
- Duplicate
eventIdinUnifiedMarketcauses build failure: The v2.17.5 fix addedeventId?: stringtocore/src/types.tsbut the field already existed at line 34, resulting inTS2300: Duplicate identifier 'eventId'and a broken build. The duplicate declaration is removed.
Installation
npm:
npm install pmxtjs@2.17.6PyPI:
pip install pmxt==2.17.6Links
Full Changelog: v2.17.4f...v2.17.6f
v2.17.4
Fixed
- Polymarket Cloudflare WAF Bypass: The User-Agent header added in v2.17.2 was insufficient to bypass Polymarket's Cloudflare bot detection. Enhanced the Polymarket client with browser-mimicking headers (
Accept,Accept-Language,Origin: https://polymarket.com,Referer, andsec-fetch-*directives). These headers make requests appear as same-site CORS calls from the Polymarket frontend, allowing the API to pass Cloudflare's bot scoring model.fetchEvents()now works reliably on all platforms.
Installation
npm:
npm install pmxtjs@2.17.4PyPI:
pip install pmxt==2.17.4Links
Full Changelog: v2.17.3f...v2.17.4f
v2.17.3
Fixed
- Fatal Circular JSON Crash (
fetchEvents): Fixed aTypeError: Converting circular structure to JSONthat fatally crashed the sidecar server on everyfetchEventscall across all exchanges. The v2.17.2 patch injectedmarket.event = eventinside the core exchange functions, creating anevent → markets[0] → eventreference cycle. Since Express serializes sidecar responses viaJSON.stringify, this caused an unrecoverable crash propagated to all SDK clients. Themarket.eventback-references are now hydrated exclusively client-side insideconvertEventin the TypeScript SDK, keeping all sidecar REST payloads strictly acyclic.
Installation
npm:
npm install pmxtjs@2.17.3PyPI:
pip install pmxt==2.17.3Links
Full Changelog: v2.17.2f...v2.17.3f