From 4e20ab9ef47f08817647e06b3391beec0b3b2331 Mon Sep 17 00:00:00 2001 From: AbhilashG12 Date: Mon, 15 Jun 2026 14:00:16 +0530 Subject: [PATCH 1/3] fix(baozi): correct error code mappings from current IDL MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The Baozi Solana program was upgraded and error codes were renumbered. Changes: - BettingClosed: 6018 → 6013 - BettingFrozen: 6040 → 6014 - BetTooLow: 6020 → 6023 - BetTooHigh: 6041 → 6024 These mappings now match the current on-chain program. Added IDL version comment for future reference. Fixes #1077 --- core/src/exchanges/baozi/errors.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/core/src/exchanges/baozi/errors.ts b/core/src/exchanges/baozi/errors.ts index 15b1bc09..106c411a 100644 --- a/core/src/exchanges/baozi/errors.ts +++ b/core/src/exchanges/baozi/errors.ts @@ -12,11 +12,11 @@ import { const PROGRAM_ERRORS: Record = { 6000: { type: 'bad_request', message: 'Unauthorized' }, 6001: { type: 'bad_request', message: 'Market not found' }, + 6013: { type: 'bad_request', message: 'Betting is closed' }, // Changed from 6018 + 6014: { type: 'bad_request', message: 'Betting is frozen' }, // Changed from 6040 6015: { type: 'bad_request', message: 'Market is not open for betting' }, - 6018: { type: 'bad_request', message: 'Betting is closed' }, - 6020: { type: 'invalid_order', message: 'Bet amount too small' }, - 6040: { type: 'bad_request', message: 'Betting is frozen' }, - 6041: { type: 'invalid_order', message: 'Bet amount too large' }, + 6023: { type: 'invalid_order', message: 'Bet amount too small' }, // Changed from 6020 + 6024: { type: 'invalid_order', message: 'Bet amount too large' }, // Changed from 6041 }; /** From 6566cd6f821bd8bd7ba965b490dd785f22bd9ccc Mon Sep 17 00:00:00 2001 From: AbhilashG12 Date: Sun, 12 Jul 2026 12:25:37 +0530 Subject: [PATCH 2/3] chore: regenerate SDKs and docs after Baozi error code mapping fix --- core/api-doc-config.generated.json | 2 +- sdks/python/pmxt/client.py | 2 +- sdks/typescript/API_REFERENCE.md | 1 - sdks/typescript/pmxt/client.ts | 2 +- 4 files changed, 3 insertions(+), 4 deletions(-) diff --git a/core/api-doc-config.generated.json b/core/api-doc-config.generated.json index a97b1945..131c33c5 100644 --- a/core/api-doc-config.generated.json +++ b/core/api-doc-config.generated.json @@ -1,5 +1,5 @@ { - "_generated": "Auto-generated by extract-jsdoc.js on 2026-06-08T10:51:09.860Z. Do not edit manually.", + "_generated": "Auto-generated by extract-jsdoc.js on 2026-07-12T06:54:59.328Z. Do not edit manually.", "methods": { "has": { "summary": "HTTP verb for the endpoint (e.g. GET, POST). */", diff --git a/sdks/python/pmxt/client.py b/sdks/python/pmxt/client.py index 5992acf4..8c609fb7 100644 --- a/sdks/python/pmxt/client.py +++ b/sdks/python/pmxt/client.py @@ -1438,7 +1438,7 @@ def fetch_event(self, params: Optional[dict] = None, **kwargs) -> UnifiedEvent: except ApiException as e: raise self._parse_api_exception(e) from None - def fetch_order_book(self, outcome_id: Union[str, "MarketOutcome"] = _UNSET, limit: Optional[float] = None, params: Optional[FetchOrderBookParams] = None, **kwargs) -> Union[OrderBook, List[OrderBook]]: + def fetch_order_book(self, outcome_id: Union[str, "MarketOutcome"] = _UNSET, limit: Optional[float] = None, params: Optional[dict] = None, **kwargs) -> Union[OrderBook, List[OrderBook]]: try: args = [] if kwargs: diff --git a/sdks/typescript/API_REFERENCE.md b/sdks/typescript/API_REFERENCE.md index 42ce6432..1d9347d3 100644 --- a/sdks/typescript/API_REFERENCE.md +++ b/sdks/typescript/API_REFERENCE.md @@ -1493,7 +1493,6 @@ yes: any; // Convenience accessor for the YES outcome on a binary market. no: any; // Convenience accessor for the NO outcome on a binary market. up: any; // Convenience accessor for the UP outcome on a binary market. down: any; // Convenience accessor for the DOWN outcome on a binary market. -question: string; // Read-only alias for title. Matches the Python SDK's market.question property. } ``` diff --git a/sdks/typescript/pmxt/client.ts b/sdks/typescript/pmxt/client.ts index b0f2e5d1..2eea5890 100644 --- a/sdks/typescript/pmxt/client.ts +++ b/sdks/typescript/pmxt/client.ts @@ -1567,7 +1567,7 @@ export abstract class Exchange { } } - async fetchMatchedMarkets(params?: FetchMatchedMarketClustersParams): Promise { + async fetchMatchedMarkets(params?: any): Promise { await this.initPromise; try { const args: any[] = []; From 79552e308c3498b967a364b6264ef109c4165ed8 Mon Sep 17 00:00:00 2001 From: AbhilashG12 Date: Sun, 12 Jul 2026 12:27:54 +0530 Subject: [PATCH 3/3] chore: regenerate Python client after merge --- sdks/python/pmxt/client.py | 47 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/sdks/python/pmxt/client.py b/sdks/python/pmxt/client.py index 8c609fb7..b810c031 100644 --- a/sdks/python/pmxt/client.py +++ b/sdks/python/pmxt/client.py @@ -1346,6 +1346,33 @@ def fetch_markets_paginated(self, params: Optional[dict] = None, **kwargs) -> Pa except ApiException as e: raise self._parse_api_exception(e) from None + def fetch_events_paginated(self, params: Optional[dict] = None, **kwargs) -> PaginatedEventsResult: + try: + args = [] + if kwargs: + params = {**(params or {}), **kwargs} + if params is not None: + args.append(_convert_params_to_camel(params)) + body: dict = {"args": args} + creds = self._get_credentials_dict() + if creds: + body["credentials"] = creds + url = f"{self._resolve_sidecar_host()}/api/{self.exchange_name}/fetchEventsPaginated" + headers = {"Content-Type": "application/json", "Accept": "application/json"} + headers.update(self._get_auth_headers()) + response = self._fetch_with_retry( + lambda: self._api_client.call_api(method="POST", url=url, body=body, header_params=headers) + ) + response.read() + data = self._handle_response(json.loads(response.data)) + return PaginatedEventsResult( + data=[_convert_event(e) for e in data.get("data", [])], + total=data.get("total"), + next_cursor=data.get("nextCursor"), + ) + except ApiException as e: + raise self._parse_api_exception(e) from None + def fetch_events(self, params: Optional[dict] = None, **kwargs) -> List[UnifiedEvent]: try: args = [] @@ -1438,6 +1465,26 @@ def fetch_event(self, params: Optional[dict] = None, **kwargs) -> UnifiedEvent: except ApiException as e: raise self._parse_api_exception(e) from None + def fetch_event_metadata(self, event_ticker: str) -> Dict[str, Any]: + try: + args = [] + args.append(event_ticker) + body: dict = {"args": args} + creds = self._get_credentials_dict() + if creds: + body["credentials"] = creds + url = f"{self._resolve_sidecar_host()}/api/{self.exchange_name}/fetchEventMetadata" + headers = {"Content-Type": "application/json", "Accept": "application/json"} + headers.update(self._get_auth_headers()) + response = self._fetch_with_retry( + lambda: self._api_client.call_api(method="POST", url=url, body=body, header_params=headers) + ) + response.read() + data = self._handle_response(json.loads(response.data)) + return data + except ApiException as e: + raise self._parse_api_exception(e) from None + def fetch_order_book(self, outcome_id: Union[str, "MarketOutcome"] = _UNSET, limit: Optional[float] = None, params: Optional[dict] = None, **kwargs) -> Union[OrderBook, List[OrderBook]]: try: args = []