Skip to content

Releases: pmxt-dev/pmxt

v2.17.9

25 Feb 09:44

Choose a tag to compare

Fixed

  • TypeScript SDK: Server startup race condition causes 401 Unauthorized: After a version mismatch was detected, the ServerManager would kill the old server and delete the lock file, then call waitForServer(). 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, causing getAccessToken() to return undefined and all subsequent API requests to be sent without an auth token. Fixed by rewriting waitForServer() 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.9

PyPI:

pip install pmxt==2.17.9

Links

Full Changelog: v2.17.8f...v2.17.9f

v2.17.8

25 Feb 08:00

Choose a tag to compare

Fixed

  • Python SDK fetch_ohlcv deserialization error: Calling fetch_ohlcv() raised ValueError: Multiple matches found when deserializing... with oneOf schemas: HistoryFilterParams, OHLCVParams because the OpenAPI spec emitted oneOf: [OHLCVParams, HistoryFilterParams] for the params argument. Since both schemas are structurally identical in JSON (same four fields, differing only in resolution being optional vs. required), pydantic matched both branches and raised an exception. Fixed by removing the deprecated HistoryFilterParams union from fetchOHLCV in BaseExchange.ts and all exchange implementations, then regenerating the OpenAPI spec. The spec now emits only OHLCVParams for this parameter. fetchTrades is unaffected as its HistoryFilterParams | TradesParams union has no structural ambiguity.

Installation

npm:

npm install pmxtjs@2.17.8

PyPI:

pip install pmxt==2.17.8

Links

Full Changelog: v2.17.7f...v2.17.8f

v2.17.7

25 Feb 07:02

Choose a tag to compare

Fixed

  • Python SDK Missing Exchange Classes: pmxt.Probable, pmxt.Baozi, and pmxt.Myriad raised AttributeError on 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.py is now generated from core/src/server/app.ts (the single source of truth for registered exchanges) via core/scripts/generate-python-exchanges.js. The generator also keeps __init__.py imports 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 via core/scripts/generate-compliance.js, replacing the previously manual document. A CI guard (compliance-check.yml) keeps it in sync with core/src/exchanges/*/index.ts.
  • TypeScript SDK client methods CI guard: Added typescript-client-check.yml to fail PRs where BaseExchange.ts changes without regenerating the corresponding methods in the TypeScript SDK client.ts.
  • All three generators are wired into generate:sdk:all and run automatically on every publish.

Installation

npm:

npm install pmxtjs@2.17.7

PyPI:

pip install pmxt==2.17.7

Links

Full Changelog: v2.17.6f...v2.17.7f

v2.17.6

24 Feb 15:59

Choose a tag to compare

Fixed

  • Duplicate eventId in UnifiedMarket causes build failure: The v2.17.5 fix added eventId?: string to core/src/types.ts but the field already existed at line 34, resulting in TS2300: Duplicate identifier 'eventId' and a broken build. The duplicate declaration is removed.

Installation

npm:

npm install pmxtjs@2.17.6

PyPI:

pip install pmxt==2.17.6

Links

Full Changelog: v2.17.4f...v2.17.6f

v2.17.4

24 Feb 13:57

Choose a tag to compare

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, and sec-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.4

PyPI:

pip install pmxt==2.17.4

Links

Full Changelog: v2.17.3f...v2.17.4f

v2.17.3

24 Feb 13:30

Choose a tag to compare

Fixed

  • Fatal Circular JSON Crash (fetchEvents): Fixed a TypeError: Converting circular structure to JSON that fatally crashed the sidecar server on every fetchEvents call across all exchanges. The v2.17.2 patch injected market.event = event inside the core exchange functions, creating an event → markets[0] → event reference cycle. Since Express serializes sidecar responses via JSON.stringify, this caused an unrecoverable crash propagated to all SDK clients. The market.event back-references are now hydrated exclusively client-side inside convertEvent in the TypeScript SDK, keeping all sidecar REST payloads strictly acyclic.

Installation

npm:

npm install pmxtjs@2.17.3

PyPI:

pip install pmxt==2.17.3

Links

Full Changelog: v2.17.2f...v2.17.3f

v2.17.2

24 Feb 11:58

Choose a tag to compare

Fixed

  • Bi-directional Navigation (market.event): Fixed a hydration issue where market.event was undefined. Reconstructed the UnifiedMarket list by assigning market.event = event during the convertEvent hydration step, and correctly injected the reverse-reference in all the core exchanges.
  • Global User-Agent Header: Added a default generic User-Agent header (pmxt (https://github.com/pmxt-dev/pmxt)) to the BaseExchange axios configuration. This ensures consistent identification across all exchanges and resolves the Polymarket Discovery 401 Error that occurred when calling fetchEvents() without parameters effectively bypassing WAF/CDN restrictions.

Installation

npm:

npm install pmxtjs@2.17.2

PyPI:

pip install pmxt==2.17.2

Links

Full Changelog: v2.17.1f...v2.17.2f

v2.17.1

24 Feb 10:36

Choose a tag to compare

Fixed

  • Sidecar Bundle Drift: The features shipped in 2.17.0 (parameterless fetchEvents(), Kalshi client-side sorting) were correctly implemented in TypeScript source but never reached users because the publish pipeline was missing the bundle:server step for the npm job. The distributed pmxt-core package contained a stale pre-compiled sidecar (bundled.js) from a previous release that still enforced the old guard fetchEvents() requires a query, eventId, or slug parameter. This patch rebuilds and ships the correct bundle.
  • CI/CD: Publish Workflow: Added npm run bundle:server to the publish-npm job in publish.yml, immediately after the Build Core step. Without this, source-level changes to the sidecar server are silently ignored in all npm-distributed packages.
  • CI/CD: Test Workflow: Applied the same fix to test-publish.yml so dry-run publishes and test runs also exercise the correct sidecar, preventing this class of drift from going undetected in future PRs.

Installation

npm:

npm install pmxtjs@2.17.1

PyPI:

pip install pmxt==2.17.1

Links

Full Changelog: v2.17.0f...v2.17.1f

v2.17.0

24 Feb 10:21

Choose a tag to compare

Improved

  • Unified Discovery: Unrestricted Event Fetching: Removed the mandatory requirement for a query, event identification, or slug in fetchEvents. Users can now call fetchEvents() without parameters to retrieve the "front page" of an exchange (typically top events by volume).
  • Polymarket: High-Performance Discovery: Redirects no-query fetchEvents calls to the specific Gamma /events list endpoint, providing a cleaner and faster experience than the fuzzy search path.
  • Kalshi: Client-Side Event Ranking: Implemented robust client-side sorting for Kalshi events. Since the Kalshi API lacks server-side sorting for the event list, fetchEvents now aggregates volume, liquidity, and recency from nested markets to provide consistent sort support (volume, liquidity, newest).
  • Limitless: Semantic Event Mapping: Mapped Limitless "Group Markets" to the unified fetchEvents interface. Discovery calls now automatically filter for group markets, aligning Limitless with event-centric discovery patterns.
  • Developer Experience: Synchronized fetchEvents behavior with fetchMarkets across all exchanges (Baozi, Myriad, Probable, Kalshi, Polymarket, Limitless).

Fixed

  • Unit Tests: Updated core validation suite to reflect the relaxed requirements for event fetching.

Installation

npm:

npm install pmxtjs@2.17.0

PyPI:

pip install pmxt==2.17.0

Links

Full Changelog: v2.16.1f...v2.17.0f

v2.16.1

24 Feb 09:42

Choose a tag to compare

Fixed

  • Documentation: Automated Generator: Fixed a bug in generate-openapi.js where certain model fields (like eventId and sort) were not being correctly reflected in the generated SDK documentation.
  • SDK: Regenerated Reference Docs: Synchronized API_REFERENCE.md for both Python and TypeScript to include the newly added traversal and sorting capabilities.

Installation

npm:

npm install pmxtjs@2.16.1

PyPI:

pip install pmxt==2.16.1

Links

Full Changelog: v2.16.0f...v2.16.1f