Releases: pmxt-dev/pmxt
v2.21.0
Added
- Typed Error Classes (Python SDK): 14 error classes (
BadRequest,AuthenticationError,RateLimitExceeded,NotFoundError, etc.) mirroringcore/src/errors.ts. Server error responses are automatically parsed into typed exceptions viafrom_server_error(). All catch blocks in the client now raise specificPmxtErrorsubclasses instead of genericException. - Typed Error Classes (TypeScript SDK): Matching error hierarchy with
fromServerError()factory.handleResponse()and all HTTP error paths now throw typedPmxtErrorsubclasses. All error classes exported from the package.
Fixed
- Credential Logging (Security): Removed plaintext logging of API credentials in Polymarket auth flow.
- Hardcoded Price Fallbacks: Replaced
0.5fallback prices with0in Kalshi, Baozi, and Myriad normalizers. Missing price data now correctly indicates "no price" instead of silently fabricating a 50-cent midpoint.
Installation
npm:
npm install pmxtjs@2.21.0PyPI:
pip install pmxt==2.21.0Links
Full Changelog: v2.20.3f...v2.21.0f
v2.20.3
Fixed
- Kalshi API v2 Compatibility: Handle renamed trade fields (
yes_price→yes_price_dollars,count→count_fp). Normalizer now parses both old (cents int) and new (dollar string) formats, fixingNaNprices andundefinedamounts infetchTrades/fetchMyTrades.
Changed
- Compliance Test Hardening:
fetchOHLCVtries multiple resolutions (1d,6h,1h) coarsest-first across top markets by volume instead of giving up early.watchTradesfilters for markets traded within the last 5 minutes and applies a 10-minute recency gate before attempting WebSocket watches. - Broader Skip Conditions:
isSkippableErrornow handlesAuthenticationError,PermissionDenied, missing credentials, and ESM import failures. Individual tests (createOrder,fetchPositions) cover additional expected rejection messages. - KalshiDemoExchange Excluded: Removed from compliance test matrix (redundant, no separate demo credentials).
- SDK Integration Tests: Added server-availability guard so tests skip gracefully when the PMXT server is not running.
Installation
npm:
npm install pmxtjs@2.20.3PyPI:
pip install pmxt==2.20.3Links
Full Changelog: v2.20.2f...v2.20.3f
v2.20.2
Fixed
- Probable Events API: Handle raw array response instead of expected
{ events: [] }wrapper. - Test Import: Remove vitest import from client-args test (project uses Jest).
Changed
- 3-Layer Architecture: Introduced fetcher/normalizer/SDK layer separation across all exchanges (Myriad, Polymarket, Kalshi, Limitless, Baozi, Probable).
- Stale File Cleanup: Removed superseded
fetchX.tsfiles from all exchanges, rewired websocket modules to use the new fetcher layer.
Installation
npm:
npm install pmxtjs@2.20.2PyPI:
pip install pmxt==2.20.2Links
Full Changelog: v2.20.1f...v2.20.2f
v2.20.1
Fixed
- Error Mapper: SDK Error Extraction (#56): Third-party SDK errors (e.g.
@polymarket/clob-client) that attach HTTP metadata (.status,.statusCode,.response) toErrorinstances are now properly mapped to specific error classes (InsufficientFunds,AuthenticationError,InvalidOrder, etc.) instead of falling through to a genericBadRequest. The error mapper also extracts the real API error message from.response.datainstead of using the SDK's generic.message.
Changed
- Error Mapper: Deduplicated Status Code Mapping: Extracted shared
mapByStatusCode()method to eliminate duplicated switch logic across axios, plain-object, and SDK error handling paths.
Installation
npm:
npm install pmxtjs@2.20.1PyPI:
pip install pmxt==2.20.1Links
Full Changelog: v2.20.0f...v2.20.1f
v2.20.0
Added
- Address Watcher & Subscriber System: Introduced
watchAddress()andunwatchAddress()methods onBaseExchange, along with a new subscriber infrastructure (core/src/subscriber/) for monitoring on-chain address activity. Supports optional address parameter for flexible subscription management. - GoldSky Integration: Added GoldSky GraphQL subscription implementation (
core/src/subscriber/external/goldsky.ts) for real-time on-chain event streaming. Integrated into the Limitless exchange for live data feeds. - Whale Tracker Examples: Added Python and TypeScript example scripts (
core/examples/social/) demonstrating how to track large-position holders using the SDK. - SDK:
buildOrder/submitOrderSupport: Both the Python and TypeScript SDKs now exposebuildOrder()andsubmitOrder()methods, along with theBuiltOrdertype, enabling the two-step order workflow introduced in v2.19.0. - Trade
outcomeIdField: AddedoutcomeId(asset ID) to theTradetype for clearer asset-level trade identification.
Fixed
- Kalshi Orderbook: Switched from the removed legacy
orderbookfield toorderbook_fp, fixing broken orderbook fetches on the Kalshi exchange. - Limitless
baseUrlParameter: Fixed incorrect base URL handling in the Limitless exchange configuration. - Exchange Imports: Fixed missing or incorrect
index.tsimports across exchange modules. - Test Infrastructure: Replaced vitest imports with Jest globals in price tests to match the project's test runner.
- Whale Tracker Examples & SDK Bugs: Fixed issues in example scripts and resolved minor SDK client bugs.
- TypeScript SDK Merge Conflicts: Resolved merge conflicts in the TypeScript SDK client.
Changed
- Polymarket WebSocket: Enriched the Polymarket websocket implementation with improved event handling and user position tracking.
- Limitless WebSocket & GoldSky Integration: Refactored the Limitless exchange to integrate GoldSky watcher and subscriber, with improved websocket configuration.
- Exchange Interfaces: Refactored
BaseExchangeinterfaces, updated type names, and standardized exchange interface implementations across Polymarket, Limitless, Myriad, and others. - Price Helpers: Centralized exchange price helpers and standardized argument building across exchanges.
- Watcher Dispatch Optimization: Updated the watcher to dispatch events only when there is an actual change, reducing unnecessary notifications.
- OpenAPI & API Reference: Auto-regenerated
openapi.yamlandAPI_REFERENCE.mdto reflect all new endpoints and types. - SDK Models & Documentation: Updated Python and TypeScript SDK models, API reference docs, and added client example code.
Installation
npm:
npm install pmxtjs@2.20.0PyPI:
pip install pmxt==2.20.0Links
What's Changed
- feat(ts-sdk): add buildOrder method and BuiltOrder type by @Aboudjem in #57
- feat: add 'watchAddress' and 'unwatchAddress' for a real-time address watching system by @psyberck in #55
- feat: raw mode preserve original formats by @alexandretrotel in #49
New Contributors
- @Aboudjem made their first contribution in #57
- @psyberck made their first contribution in #55
- @alexandretrotel made their first contribution in #49
Full Changelog: v2.19.6f...v2.20.0f
v2.19.6
Added
- TypeScript SDK Auto-Generation: Upgraded
sdks/typescript/scripts/generate-client-methods.jsto derive return types and patterns directly from theBaseExchange.tsAST, mirroring the Python generator. The manualMETHOD_RETURN_CONFIGhas been eliminated, permanently removing the risk of documentation and signature drift.
Fixed
- CI/CD: SDK Drift Guards: Removed the
pathsfilter frompython-client-check.ymlandtypescript-client-check.yml. These drift guards now run on every pull request. Previously, manual edits toclient.pyorclient.tswould bypass the check if the PR didn't also touchBaseExchange.tsor the generator scripts.
Installation
npm:
npm install pmxtjs@2.19.6PyPI:
pip install pmxt==2.19.6Links
Full Changelog: v2.19.5f...v2.19.6f
v2.19.5
Fixed
- SDK: Resilient Authentication (Python & TypeScript): Eliminated "Unauthorized: Invalid or missing access token" errors caused by sidecar server restarts. Both the Python and TypeScript SDKs now read the access token fresh from the
~/.pmxt/server.lockfile on every request via a newgetAuthHeadershelper. This ensures that if the server rebooted and rotated tokens, existingExchangeinstances (likePolymarket) automatically pick up the new valid token on their next call, removing the need for developers to manually re-instantiate clients. - SDK: Generator Persistence (Python & TypeScript): Updated both
sdks/python/scripts/generate-client-methods.jsandsdks/typescript/scripts/generate-client-methods.jsto emit the live header retrieval pattern, ensuring authentication resilience is maintained in all future auto-generated methods.
Installation
npm:
npm install pmxtjs@2.19.5PyPI:
pip install pmxt==2.19.5Links
Full Changelog: v2.19.4f...v2.19.5f
v2.19.4
Fixed
-
Compliance Tests: Resilient Exchange Availability Checks: Compliance tests no longer fail when an exchange's API is temporarily unavailable (e.g., Myriad returning a Heroku 503 error page). Previously, any
ExchangeNotAvailableorNetworkErrorexception would propagate as a test failure, making CI fragile against external service outages. A newisSkippableError(error)helper incore/test/compliance/shared.tsreturnstruefor these error types (plus the existing "not implemented" and "not supported" string checks), and all 18 compliance test files now call it uniformly instead of ad-hoc string comparisons. Tests now log a skip message and return instead of failing. -
generate-openapi.test.tsSpec Leak: The OpenAPI auto-generation test temporarily injects atestDummyMethodintoBaseExchange.tsand regenerates the spec to verify the generator works. However,afterAllonly restoredBaseExchange.ts— notopenapi.yaml— leaving thetestDummyMethodendpoint permanently in the committed spec and silently dropping thecloseendpoint's description.afterAllnow also restoresopenapi.yamlto its pre-test state.
Installation
npm:
npm install pmxtjs@2.19.4PyPI:
pip install pmxt==2.19.4Links
Full Changelog: v2.19.3f...v2.19.4f
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