Skip to content

Releases: pmxt-dev/pmxt

v2.19.3

04 Mar 18:09

Choose a tag to compare

Fixed

  • TypeScript build failure due to missing buildOrder and submitOrder in exchange has objects: When the new build-only order methods were added to the ExchangeHas interface, several exchange implementations were not updated to include these properties. Added buildOrder: false and submitOrder: false to BaoziExchange, LimitlessExchange, MyriadExchange, and ProbableExchange to match the interface requirements.

Installation

npm:

npm install pmxtjs@2.19.3

PyPI:

pip install pmxt==2.19.3

Links

What's Changed

  • docs: move total downloads badge logic to seperate repo by @veehz in #51

New Contributors

  • @veehz made their first contribution in #51

Full Changelog: v2.18.1f...v2.19.3f

v2.9.3

04 Mar 17:46

Choose a tag to compare

Fixed

  • TypeScript build failure due to missing buildOrder and submitOrder in exchange has objects: When the new build-only order methods were added to the ExchangeHas interface, several exchange implementations were not updated to include these properties. Added buildOrder: false and submitOrder: false to BaoziExchange, LimitlessExchange, MyriadExchange, and ProbableExchange to match the interface requirements.

Installation

npm:

npm install pmxtjs@2.9.3

PyPI:

pip install pmxt==2.9.3

Links

What's Changed

  • docs: move total downloads badge logic to seperate repo by @veehz in #51

New Contributors

  • @veehz made their first contribution in #51

Full Changelog: v2.18.1f...v2.9.3f

v2.18.1

28 Feb 16:14

Choose a tag to compare

Fixed

  • Kalshi UnifiedEvent.description always empty: Kalshi's mututals_description field is always null in their API responses, so UnifiedEvent.description was an empty string for every event. The Kalshi adapter now derives a description from the markets' rules_primary text 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 the rules_primary text 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's rules_primary.

Installation

npm:

npm install pmxtjs@2.18.1

PyPI:

pip install pmxt==2.18.1

Links

Full Changelog: v2.18.0f...v2.18.1f

v2.18.0

27 Feb 10:47

Choose a tag to compare

Fixed

  • UnifiedEvent now includes volume24h and volume fields, 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: number is now a required field (mirrors UnifiedMarket.volume24h).
  • UnifiedEvent.volume?: number is now an optional field (mirrors UnifiedMarket.volume);
    only populated when at least one child market exposes lifetime volume.

Installation

npm:

npm install pmxtjs@2.18.0

PyPI:

pip install pmxt==2.18.0

Links

Full Changelog: v2.17.9f...v2.18.0f

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