# @polyester/sdk

## 0.31.0

### Minor Changes

- Realtime `onError` contexts now always carry an `Error`. Server and websocket failures arrive as the new `RealtimeError` (code `REALTIME_ERROR`) with the Centrifugo code on `realtimeCode`, instead of plain `{ code, message }` objects. `retryable` is true for errors the realtime client is already retrying on its own, such as code 109 (token expired), so callers can skip reporting them. Snapshot failures keep their original typed SDK error. ([#193](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/193))

  Browser clients end the session and emit `loggedOut` when an authenticated RPC is rejected as unauthenticated with the current token, for example when the backend revoked it or the device clock lags. Rejections of a token that has since been replaced, and those arriving while a login or refresh is in flight, are ignored. `AccountSignerAuthService.handleRejectedToken` exposes the same check.

  `PreparedTradingWithdraw` exposes the signed `deadline` and `isExpired()`, which turns true a minute before the deadline. Prepare again before resubmitting an expired withdraw, for example after a slow MFA enrollment.

## 0.30.2

### Patch Changes

- `patchZipperCatalogSupply` caches the snapshot it returns as already validated, so passing it to `catalog.setSnapshot` no longer re-validates the whole catalog on every supply update. ([#191](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/191))

## 0.30.1

### Patch Changes

- Add `rewards.listAwards` (also `rewardsService(core)` from `@polyester/sdk/services/rewards`) to list published reward campaign awards for the authenticated root account, newest first. Each award includes its campaign, asset, exact `amountBaseUnits`, `fulfillmentMethod`, `fulfillmentState`, `publishedAt`, payout `network`, `fulfillmentRevision`, `destinationAddress`, and `transactionId`. `limit` accepts 0 through 100 (0 or omitted uses 50), and `pageToken` is capped at 256 characters. Requires a session token; API keys are not accepted. ([#187](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/187))

- Add `rewards.setDestination` to record a write-once payout destination for an award owned by the authenticated root account. Pass the award's `fulfillmentRevision` as `expectedRevision` (a positive decimal string) and a client-generated `requestId` (1 through 128 characters, reused on retry); `awardId` accepts 1 through 128 characters and `destinationAddress` 1 through 512. Requires a session token and a fresh step-up proof via `stepUpToken`; it does not execute a transfer or mark the award delivered. ([#189](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/189))

## 0.30.0

### Minor Changes

- Add a `fetch` option to the client config, `createPolyesterServerClientFromCookies`, and `createPolyesterServerClientFromRequest` for sending SDK HTTP requests through a custom fetch implementation. SDK auth, error mapping, and timestamp-skew detection still apply. Defaults to the global `fetch`. ([#184](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/184))

- Add tree-shakable client cores. `PolyesterCore`, `PolyesterBrowserCore`, and `PolyesterServerCore` (plus `createPolyesterServerCoreFromCookies`/`FromRequest`) wire transports, realtime, catalogs, and auth, and reach every other service through `@polyester/sdk/services/*` accessors such as `ordersService(core)`, so bundles only include the services they call. The full clients are unchanged and return the same instances as the accessors (`client.orders === ordersService(client)`). ([#186](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/186))

  Error-detail decoders and API-key signing now load on demand. SDK transports load decoders before mapping errors; call `loadErrorDetailDecoders(error)` before synchronously mapping a raw `ConnectError` that did not come through an SDK transport, or `loadErrorDetailDecoders()` to preload all of them.

### Patch Changes

- Throw a retryable `NetworkError` when the global `fetch` resolves without a `Response` (for example, when a browser extension patches `fetch`) instead of crashing with a `TypeError` while checking for timestamp-skew errors. ([#184](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/184))

## 0.29.2

### Patch Changes

- Decode the `MAX_SLIPPAGE_INVALID` trigger failure as `failureReason: "max_slippage_invalid"` instead of `"unspecified"`. Triggers fail with this reason when their maximum slippage cannot produce a valid execution price bound. ([#182](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/182))

## 0.29.1

### Patch Changes

- Surface the claims `SOCIAL_VERIFICATION_REQUIRED` error code as a non-retryable `PreconditionFailedError` detail when a daily reward claim needs a verified X or Discord account. ([#177](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/177))

- Expose `SocialVerification.errorCode` (`"social_account_already_linked"`, `"unspecified"` when no typed failure applies) and map `AUTH_SOCIAL_ACCOUNT_ALREADY_LINKED` RPC failures to a non-retryable `AlreadyExistsError`. Treat an already-linked verification as final for the current account: direct the user to the Polyester account already linked to that social identity instead of restarting verification. ([#180](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/180))

- Clarify `subaccounts.listInvites` docs: omit `direction` to list both incoming and outgoing invitations, or pass `"incoming"` or `"outgoing"` to filter. `"all"` is not an accepted value. ([#181](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/181))

- Map API-key `TIMESTAMP_SKEW` rejections to a new retryable `TimestampSkewError` (`code: "TIMESTAMP_SKEW"`) instead of a generic non-retryable `AuthenticationError`. This covers both `application/problem+json` and Connect error responses. Retrying the call signs it again with a fresh timestamp. For large bursts of API-key requests, bound concurrency so requests don't wait in the runtime's fetch queue past the skew window. ([#181](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/181))

- Require `lineageId` when passing `throughGeneration` to `trades.list`. Combining `throughGeneration` with `orderId` or no execution scope now fails validation and type checking instead of reaching the backend. ([#177](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/177))

## 0.29.0

### Minor Changes

- Decode address-book account scopes as the `AddressBookAccountScope` union keyed by `scopeType`. Root scopes no longer expose the wire placeholder `subaccountId` (previously `"1"`), subaccount scopes always include `subaccountId`, and unspecified scopes include it only when non-zero. Narrow on `scopeType` before reading `scope.subaccountId`. ([#175](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/175))

- `ApiKey.policyId` is now `""` instead of `undefined` when no policy is attached, matching `DEFAULT_API_KEY_POLICY.id` so keys can be matched to policies by ID. `apiKeyPolicies.get({ policyId: "" })` now returns the default policy instead of throwing. Replace any `policyId === undefined` checks with `!policyId`. ([#175](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/175))

### Patch Changes

- Format an unset `subaccountPolicyId` as `""` instead of `"1"`, so subaccounts on the placeholder policy match its `""` ID ([#175](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/175))

## 0.28.1

### Patch Changes

- Encode and decode absolute max-slippage ticks as int64 `bigint` values instead of int32 numbers. Absolute slippage inputs now accept values up to the int64 price ceiling, and `maxQuoteSlippage` on spot order constraints reports that ceiling instead of `2.147483647`. ([#173](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/173))

## 0.28.0

### Minor Changes

- Map HTTP 501 and Connect `unimplemented` to the new `NotImplementedError` instead of `InternalServerError`. Bare HTTP error responses without a Connect body now map by their status code instead of collapsing to `InternalServerError`. ([#171](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/171))

## 0.27.3

### Patch Changes

- Expose `actionTaken` on batch replacement admission and status items so callers can distinguish successor replacements from cancel-only outcomes. Clarify single-order timeout reconciliation and the 15-minute batch-create replay window. ([#168](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/168))

- Encode and decode trading prices, price deltas, and slippage ticks at scale 9 instead of 6. Price inputs now accept up to nine decimal places, and absolute max-slippage values are capped at `2.147483647` quote units by the int32 wire field. ([#170](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/170))

- Expose the current trailing threshold as `triggerPrice` on trailing trigger runtime details, and add the `activated` trigger event type for list filters and event output. ([#170](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/170))

## 0.27.2

### Patch Changes

- Expose `marketDataVolumeScale` on assets and `referencePriceScale` on pairs from spot config, and use them to decode candle volume, market-overview 24h base volume, and composite reference candle prices. Catalog snapshots without the new scales fall back to the asset quantity scale and the primary price scale. ([#166](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/166))

## 0.27.1

### Patch Changes

- Accept `phantom` as a wallet provider in login and refresh, preserving its metadata in browser and server sessions. ([#164](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/164))

## 0.27.0

### Minor Changes

- Add `subaccounts.createChallenge`, which returns the server-derived smart account address, salt nonce, and EIP-191 authorization. `auth.createSubaccount` now uses it and accepts a signer or a signer factory plus an optional `ownerAddress`. ([#162](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/162))

- Remove the `purpose` field from `auth.createWalletChallenge`; wallet challenges are login-only. ([#162](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/162))

### Patch Changes

- Decode structured `claims` error details, mapping rate-limit and temporarily-unavailable codes to the typed retryable errors. ([#162](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/162))

- Expose `inheritedCumQty` on orders, the filled quantity carried over from predecessors when a replacement was accepted. ([#162](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/162))

- Map `AUTH_SUBACCOUNT_CHALLENGE_INVALID` to the new `SubaccountChallengeInvalidError` so callers can reissue a stale subaccount challenge. ([#162](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/162))

## 0.26.1

### Patch Changes

- Fix UserOperations accepted then rejected by the bundler by using per-operation paymaster stubs and `pm_getPaymasterData`. ([#160](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/160))

- Restore paymaster gas estimate buffering (+20%, 50k floor), while preserving stub-provided limits during preparation. ([#160](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/160))

## 0.26.0

### Minor Changes

- Memoize `createPolyesterSmartAccountClient` per account, environment and options so the gas price cache and warmed connections survive across submissions. ([#157](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/157))

- Add `waitForPolyesterUserOperationReceipt`, which polls `pimlico_getUserOperationStatus` at a 250ms default interval, fetches the receipt only once included, fails fast on `rejected` or `failed`, and keeps checking the chain for operations the bundler reports as `not_found`. The client default `pollingInterval` is now 250ms, so viem's built-in `waitForUserOperationReceipt` also polls four times as often. ([#157](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/157))

- Sponsor smart-account UserOperations with `pm_sponsorUserOperation` instead of `pm_getPaymasterData`, signing over client-buffered account gas limits, and cache the paymaster stub so warm-up removes one round trip per submission. The stub is fetched once with a synthetic operation and reused, which relies on the Polyester paymaster returning constant stub data regardless of the operation or context. ([#157](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/157))

- Add an `onPhase` timing hook to `sendPolyesterUserOperation` and `waitForPolyesterUserOperationReceipt` reporting `prepare`, `sign`, `send`, and `receipt` durations. Observer errors never affect the result. ([#157](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/157))

### Patch Changes

- Raise the smart-account gas price cache TTL from 10s to 60s. `sendPolyesterUserOperation` clears the cache when submission fails after signing, and `waitForPolyesterUserOperationReceipt` clears it on a bundler `rejected` status. ([#157](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/157))

- Return zero from `getSessionTimeToExpiry()` for malformed JWTs even when their payload contains a future expiration. ([#159](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/159))

- Scope local bearer and display-session cookies by port across browser storage and server parsing, including default ports and custom bearer-cookie names. Framework cookie stores must provide `cookieLocation`; local sessions do not fall back to shared legacy cookies. ([#159](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/159))

- Retain foreign environment fingerprints during display-session reads so the next bearer-token read can reject and clear the mismatched session. ([#159](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/159))

- Prevent superseded restoration, login, and refresh operations from clearing or overwriting a newer session. Superseded restores return `null`, and superseded logins reject with `AbortError`. ([#159](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/159))

- Preserve authentication when session restoration fails because of a transient request or signer initialization error. Propagate these failures for retry while continuing to clear expired or backend-rejected sessions. ([#159](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/159))

## 0.25.1

### Patch Changes

- Preserve auth sessions across regional gateways and bump the display-session cookie version. ([#154](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/154))

## 0.25.0

### Minor Changes

- Add daily reward claim status and claiming, and support good-til-date limit orders with expiry validation and order expiry output. ([#152](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/152))

- Decode unknown proto enum values on read paths as `"unspecified"` instead of throwing a `ValidationError`. When the server adds a new enum member that this SDK build does not know, the affected field now degrades to `"unspecified"` and the rest of the payload stays readable. Public output unions are unchanged since they already included `"unspecified"`. ([#152](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/152))

- Validate wallet login signatures as 65-byte hexadecimal EOA signatures while preserving universal signature support for subaccount creation. ([#152](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/152))

## 0.24.1

### Patch Changes

- Notify consumers of terminal realtime server disconnects and unsubscribes with their code and reason, and remove stopped channels from active tracking. ([#148](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/148))

- Read the current JWT provider value for every realtime token request so additional subscribers cannot retain stale credentials after token rotation or logout. ([#149](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/149))

- Declare the account signer's `ownerAddress` (the connected EOA) as the LOGIN challenge `signerAddress` instead of the Safe `accountAddress`, so wallet login and session refresh authenticate a Safe smart account with a distinct EOA signer. Subaccount creation challenges are unchanged. ([#151](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/151))

## 0.24.0

### Minor Changes

- Add order lineage, paginated execution history, and settlement transfers to order and trade reads. ([#143](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/143))

### Patch Changes

- Honor market overview subscription symbol filters in live and buffered updates. ([#144](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/144))

- Normalize caller transport cancellations so `isAbortError` recognizes them, prevent pre-aborted requests from starting, and format cancellations as "Request canceled." ([#145](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/145))

## 0.23.1

### Patch Changes

- Update devnet and testnet API and WebSocket URLs. ([#141](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/141))

## 0.23.0

### Minor Changes

- Replace nonce authentication with server-issued SIWE challenges for wallet login and subaccount creation. ([#138](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/138))

- Replace wallet Trading withdrawal `signTypedData` with EIP-191 `signMessage` authorization. ([#137](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/137))

## 0.22.3

### Patch Changes

- Point the testnet Multicall3 address at the verified deployment `0xfc9B0991DC84E419C9b164dE89795958a5B0A0cF` (block 179823). ([#135](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/135))

## 0.22.2

### Patch Changes

- Fix the testnet environment chain ID to `888169` and chain name to `Polyester Chain Testnet`. ([#133](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/133))

## 0.22.1

### Patch Changes

- Export `POLYESTER_TESTNET_ENVIRONMENT` from the SDK package entrypoint so consumers can import the testnet preset alongside devnet. ([#131](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/131))

## 0.22.0

### Minor Changes

- feat(sdk)!: add currency conversion config and rates; remove `polyesterChainId` from Zipper config and catalogs. ([#129](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/129))

- feat: add testnet environment ([#130](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/130))

### Patch Changes

- Require Web Crypto for generated trading-withdraw nonces and order mutation request IDs, with a secure random-byte fallback when `randomUUID` is unavailable. ([#127](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/127))

## 0.21.1

### Patch Changes

- Preserve `polyesterChainId` and pair quantity scales in reactive catalogs. ([#125](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/125))

## 0.21.0

### Minor Changes

- fix(social-verification)!: omit `handle` when starting Discord verification; the authenticated bot supplies the identity. Remove `handle` from Discord `start()` inputs. `method` is now provider-specific: Twitter accepts only `"profile"`, Discord accepts `"channel"` or `"dm"`. Omitted `method` uses the provider default: Twitter profile or Discord channel. ([#124](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/124))

- feat(market-overview)!: expose `volume24hUsd` and preserve unavailable volumes in list and subscription responses. `volume24hBase` and `volume24hQuote` can now be `undefined` when scaled amounts overflow; `volume24hUsd` is `undefined` when reliable valuation is unavailable. Handle missing values separately from zero (`"0"`). ([#124](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/124))

- feat(market-overview)!: replace `orderBy: "volume_24h_quote"` with `"volume_24h_usd"`. Market lists now default to descending canonical USD volume. ([#124](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/124))

- Rename `POLYESTER_TESTNET_ENVIRONMENT` to `POLYESTER_DEVNET_ENVIRONMENT`. The bundled preset already targeted Polyester devnet (`api-devnet.polyester.ai`); the export, environment `name`, and chain `name` now match. Import `POLYESTER_DEVNET_ENVIRONMENT` instead. ([#122](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/122))

### Patch Changes

- feat(candles): expose exact decimal `quoteVolume` on candle rows and realtime updates, and aligned `quoteVolume` arrays on columnar responses. ([#124](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/124))

- feat(market-overview): add `getSpotVolumeHistory()` for pair and total trailing-24h USD volume series as decimal strings. Accept up to 2,000 distinct `symbolIds`; empty or omitted filters select all pairs. The 97 samples overlap at 15-minute intervals and must not be summed as period volume. ([#124](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/124))

## 0.20.1

### Patch Changes

- Expose `auth.acceptTerms()` for explicit consent through an interactive JWT session and `Profile.currentTermsAccepted` on profile responses. Preserve the typed `AUTH_TERMS_NOT_ACCEPTED` error detail when provisioning requires consent. Login does not accept terms automatically; creating subaccounts, API keys, and deposit addresses requires current acceptance. ([#120](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/120))

## 0.20.0

### Minor Changes

- feat(orders): replace `symbolId` with `symbolIds` in `orders.cancelAll()` to cancel orders across up to 100 symbols. Use `symbolIds: [id]` for one symbol; empty or omitted filters match all symbols. ([#118](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/118))

- refactor(errors)!: remove `isStaleQuoteError()`. Use `error instanceof StaleQuoteError` for SDK failures, or inspect `error.detail` for the structured orders rejection code. ([#118](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/118))

- feat(errors): expose recognized backend rejections as typed `PolyesterError.detail` values, discriminated by service. `getOrderErrorDetail()` is removed; read `error.detail` instead. ([#118](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/118))

### Patch Changes

- feat(orders): expose the `CANCEL_REQUEST_EXPIRED` rejection code when a cancellation exceeds its replay window. ([#118](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/118))

- feat(triggers): expose `executedQty` and `executedLevels` on ladder runtime details. Quantity is a decimal base-asset amount, and levels count distinct levels with any fill, including partial fills. ([#118](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/118))

- fix(transfers): map structured withdrawal and internal-transfer rate-limit errors to `RateLimitError` and temporary dependency failures to `ServiceUnavailableError`, preserving retryability when the transport status alone does not identify the failure. ([#118](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/118))

- feat(triggers): add `execution.maxSlippage` to market IOC TWAPs, accepting a decimal price delta or 1 to 10,000 basis points. The protection applies to each slice; omitting it uses the pair default. ([#118](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/118))

## 0.19.3

### Patch Changes

- Stop automatic realtime connection and subscription token retries for non-retryable SDK errors while preserving the original errors in `onError`. Transient failures retain Centrifuge backoff, and explicit private subscriptions can restart after authentication or request inputs are corrected. ([#116](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/116))

## 0.19.2

### Patch Changes

- fix(triggers): reject trailing-distance inputs above 10,000 bps before sending trigger requests. ([#114](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/114))

## 0.19.1

### Patch Changes

- feat(balances): add root portfolio equity history and snapshot methods. ([#112](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/112))

## 0.19.0

### Minor Changes

- fix(trades)!: `trades.list()` input is now a discriminated union. Passing `afterMatchId` requires a positive `symbolId`, matching the backend's `after_match_requires_symbol` rule; violating it is a compile error and an SDK `ValidationError` instead of a 400. ([#110](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/110))

### Patch Changes

- fix(market-overview): skip rows whose symbolId the catalog cannot resolve instead of failing the whole `list()` result or `subscribe()` snapshot; `subscribe()` now accepts an optional `symbolIds` filter forwarded to its snapshot request. ([#110](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/110))

## 0.18.0

### Minor Changes

- feat(orders): expose typed cancellation submission statuses across order cancellation methods. ([#108](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/108))

- feat(accounts): expose typed resolved-account kinds from account resolution results. ([#108](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/108))

- feat(subaccounts): encode typed invitation direction filters for invitation reads. ([#108](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/108))

## 0.17.0

### Minor Changes

- feat(auth)!: expose public API key identifiers as `ak_` handles in caller introspection. ([#105](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/105))

- feat(subaccounts): expose typed lifecycle statuses for subaccount reads and updates. ([#104](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/104))

### Patch Changes

- feat(profile): add generated username offer and claim methods for onboarding. ([#105](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/105))

## 0.16.0

### Minor Changes

- **Breaking:** Remove `subaccounts.delete()`, the `DeleteSubaccountInput` type and schema, and the `"deleted"` subaccount status. `auth.v1.SubaccountService` exposes no delete RPC, and both `Subaccount.status` and `SubaccountUpdateSpec.status` document only `"active"` and `"disabled"`, so `delete()` was sending a `status: "deleted"` update the backend does not accept. Use `subaccounts.update({ status: "disabled" })` instead; `status` on reads and updates is now `"active" | "disabled"`. ([#101](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/101))

### Patch Changes

- Omit attached-risk legs whose only content is a `not_configured` runtime state, so consumers do not mistake absent risk configuration for a configured leg. ([#103](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/103))

## 0.15.1

### Patch Changes

- feat(transfers): expose external chain IDs on transfer source and destination details. ([#99](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/99))

## 0.15.0

### Minor Changes

- fix(policies): scale subaccount policy `maxOrderSize` to the quote microunits that `max_order_notional` expects. It is now a decimal USDT string on read and write, so a 100,000 USDT cap is `"100000"`, and `"0"` still means no cap. ([#97](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/97))

  It was previously a `number` written straight to the wire, so a cap of 100000 took effect as 0.1 USDT and small orders failed with `POLICY_MAX_NOTIONAL`. Caps saved before this fix hold raw microunits and read back at their true value now, so re-set any that look a million times too small.

### Patch Changes

- fix(services): reject inputs that overflow their protobuf `uint32` field with a validation error, instead of accepting them and failing later in the encoder. Covers deposit and address-book chain IDs, market-data, candles and heatmap symbol IDs, `limit` on market overview, and `maxOpenOrders` on subaccount policies. ([#97](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/97))

- fix(triggers): enforce the 1 to 10,000 bps `maxSlippage` cap on standalone trigger create and modify, matching attached trailing stops and market IOC orders. ([#97](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/97))

## 0.14.2

### Patch Changes

- Restore the `feesPb`, `tradingRateLimitPb`, and `vipPb` namespaces from the `unstable/gen` entrypoint. ([#95](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/95))

## 0.14.1

### Patch Changes

- docs(orders): clarify batch-create idempotency and optional per-item client order IDs. ([#93](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/93))

- feat(triggers): add explicit activation-price and max-slippage clearing to trigger modifications. ([#93](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/93))

## 0.14.0

### Minor Changes

- feat(orders): rename `Order.origQty` to `Order.totalQty` to represent the current accepted total after successful modifies. ([#91](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/91))

## 0.13.0

### Minor Changes

- refactor(services): replace positional Connect transport constructor arguments with capability-scoped transport objects. Direct service construction now passes `{ authApi }`, `{ publicApi }`, or both as the first argument. ([#89](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/89))

### Patch Changes

- fix(subaccounts): route `listRoles` through the public transport without authentication headers while keeping caller-effective permission reads authenticated. ([#89](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/89))

## 0.12.0

### Minor Changes

- feat(triggers): replace the free-form trigger event `reason` string with typed `cancelReason` and `failureReason` labels on trigger and trigger-event outputs. ([#86](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/86))

### Patch Changes

- feat(address-book): add a `minimumViewRevision` option to `getView` and expose `viewRevision` on views and invalidation events to support revision-aware refetching. ([#86](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/86))

- feat(mfa): expose the MFA-elevated session details and access token returned when finishing TOTP and passkey enrollments. ([#86](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/86))

## 0.11.0

### Minor Changes

- feat(rate-limits): rename the trading rate-limit rule field from `tier` to `vipTier` so quota catalog rows match the VIP policy field name. ([#85](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/85))

### Patch Changes

- feat(subaccounts): add `listRoles` and `getEffectivePermissions` methods exposing the built-in role/permission catalog and the caller's effective role-granted permissions for a subaccount. ([#83](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/83))

- feat(trades): add an `afterMatchId` replay-cursor filter to the user trades list method for gap-free backfill alongside the execution WebSocket. ([#83](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/83))

## 0.10.0

### Minor Changes

- Expose attached-risk leg lifecycle state, timestamps, trigger IDs, and child order IDs on order reads, and preserve both stop-loss and trailing-stop legs returned by the backend. ([#81](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/81))

- Make public IDs round-trip as base58 strings, and preserve order-transfer match IDs and ledger-transfer link IDs as decimal strings without uint64 precision loss. ([#81](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/81))

### Patch Changes

- Bound catalog-readiness event queues without leaving subscriptions silently connected after continuity loss, let snapshot-backed feeds own coalescing and recovery, defer listeners added during an event until the next emission, and retry the lazy realtime transport import after a transient chunk-load failure. ([#81](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/81))

- Keep ledger-transfer list and realtime data available without catalog readiness now that transfer amounts use the protocol's fixed E18 scale. ([#81](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/81))

- Keep orderbook price buckets and sequence recovery correct by rounding asks upward, ignoring stale resets, stopping replay after a gap, and retrying failed snapshots. ([#81](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/81))

- Preserve bearer authentication when the unsigned display-session cookie is missing, expire JWTs at their exact expiration time, serialize fractional JWT expirations with integer cookie lifetimes, and let server session verification distinguish unauthenticated sessions from transient API failures even when using injected transports. ([#81](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/81))

- Reject invalid integer inputs, fail closed when a catalog-backed scale is unavailable, and make timestamp and u128 conversion exact at their wire boundaries. ([#81](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/81))

- Reject malformed or out-of-range order and trigger inputs before protobuf encoding, including symbol IDs, client order IDs, trailing distances, maximum-slippage BPS, TWAP intervals, and ladder price ranges. ([#81](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/81))

- Preserve trigger timestamp milliseconds, fail loudly for trigger symbols absent from the catalog, and align spot-order validation with advertised int64 wire ceilings. ([#81](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/81))

- Return typed SDK errors for credential-provider failures across HTTP and realtime, reject private realtime subscriptions immediately when a synchronous JWT provider has no token, preserve JWT authentication visibility and overrides in user interceptors, validate Ed25519 secret keys before signing, sign API-key requests after user interceptors finalize unary messages, reject unsupported Connect stream signing, align raw retry classification with mapped errors, parse Retry-After safely, and reject query strings in Connect API base URLs. ([#81](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/81))

## 0.9.1

### Patch Changes

- Reject trailing-stop maximum slippage above 10,000 basis points. ([#79](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/79))

- Accept exact decimal inputs with zero padding beyond the configured wire scale. ([#79](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/79))

- Reject OCO risk policies that do not include both take-profit and a stop leg. ([#79](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/79))

- Reject duplicate non-empty client order IDs in one batch create request. ([#79](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/79))

- Reject unsupported characters in cancel-all request IDs, matching other order mutations. ([#79](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/79))

## 0.9.0

### Minor Changes

- [#76](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/76) [`b1ae171`](https://github.com/Fabric-Labs/polyester-sdk-typescript/commit/b1ae171854e8e66ab699dc228fbf01cbeff6ff47) Thanks [@aiiven](https://github.com/aiiven)! - feat(policies): use stable symbol IDs in API-key and subaccount policy selectors.

- [#76](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/76) [`b1ae171`](https://github.com/Fabric-Labs/polyester-sdk-typescript/commit/b1ae171854e8e66ab699dc228fbf01cbeff6ff47) Thanks [@aiiven](https://github.com/aiiven)! - feat(trading): use stable symbol IDs for spot-market requests and responses.

## 0.8.0

### Minor Changes

- [#75](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/75) [`f9590a0`](https://github.com/Fabric-Labs/polyester-sdk-typescript/commit/f9590a0fbfabfc6a4bb5ba6d12870e7dd30f1a4a) Thanks [@aiiven](https://github.com/aiiven)! - feat(orders): require symbol IDs for order modifications and expose policy-specific rejection codes.

- [#75](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/75) [`f9590a0`](https://github.com/Fabric-Labs/polyester-sdk-typescript/commit/f9590a0fbfabfc6a4bb5ba6d12870e7dd30f1a4a) Thanks [@aiiven](https://github.com/aiiven)! - feat(triggers): require symbol IDs for policy-routed modifications and resumes, and expose failed trigger events.

- [#75](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/75) [`f9590a0`](https://github.com/Fabric-Labs/polyester-sdk-typescript/commit/f9590a0fbfabfc6a4bb5ba6d12870e7dd30f1a4a) Thanks [@aiiven](https://github.com/aiiven)! - feat(policies): expose the spot-only policy contract, including read-address-book permissions and no-permission API-key defaults.

### Patch Changes

- [#75](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/75) [`f9590a0`](https://github.com/Fabric-Labs/polyester-sdk-typescript/commit/f9590a0fbfabfc6a4bb5ba6d12870e7dd30f1a4a) Thanks [@aiiven](https://github.com/aiiven)! - perf(gen): omit unused option-only descriptor metadata from published protobuf modules.

- [#72](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/72) [`1a5fa52`](https://github.com/Fabric-Labs/polyester-sdk-typescript/commit/1a5fa52df5ac8a8bd4bb4b64dfb705c8abb3ac60) Thanks [@huntabyte](https://github.com/huntabyte)! - fix(auth): Ed25519 API-key signing now allocates strictly increasing `X-API-TIMESTAMP` values, so concurrent requests in the same millisecond no longer share a timestamp and risk replay rejection on strict servers.

## 0.7.0

### Minor Changes

- [#70](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/70) [`a198991`](https://github.com/Fabric-Labs/polyester-sdk-typescript/commit/a1989916b770136e38c9b9dc368f40e0a60a8856) Thanks [@aiiven](https://github.com/aiiven)! - fix(social-verification): align provider handle validation with backend limits and forbidden characters.

### Patch Changes

- [#70](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/70) [`a198991`](https://github.com/Fabric-Labs/polyester-sdk-typescript/commit/a1989916b770136e38c9b9dc368f40e0a60a8856) Thanks [@aiiven](https://github.com/aiiven)! - feat(address-book): add atomic tag creation to address-book entry updates.

- [#70](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/70) [`a198991`](https://github.com/Fabric-Labs/polyester-sdk-typescript/commit/a1989916b770136e38c9b9dc368f40e0a60a8856) Thanks [@aiiven](https://github.com/aiiven)! - feat(auth): map structured internal authentication failures to the SDK internal-server error.

## 0.6.0

### Minor Changes

- [#68](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/68) [`a1a35ec`](https://github.com/Fabric-Labs/polyester-sdk-typescript/commit/a1a35ecaa2948bfd6c9f0a392426ea83fadc166f) Thanks [@huntabyte](https://github.com/huntabyte)! - Reject decimal order and trigger inputs that exceed protobuf signed-integer bounds with `CatalogConversionError`. `getSpotOrderConstraints()` now exposes the derived `maxPrice`, `maxQtyBase`, `maxNotionalQuote`, and `maxQuoteSlippage` wire ceilings.

## 0.5.0

### Minor Changes

- [#66](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/66) [`e8a5721`](https://github.com/Fabric-Labs/polyester-sdk-typescript/commit/e8a5721b57be7ebd0b7edf80c4ed85919fccdb0a) Thanks [@huntabyte](https://github.com/huntabyte)! - `sendPolyesterUserOperation` now prepares the operation in a single pass, halving the network round-trips before the wallet signature prompt appears. Gas estimation errors now propagate instead of triggering a silent resend.

- [#66](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/66) [`e8a5721`](https://github.com/Fabric-Labs/polyester-sdk-typescript/commit/e8a5721b57be7ebd0b7edf80c4ed85919fccdb0a) Thanks [@huntabyte](https://github.com/huntabyte)! - `sendPolyesterUserOperation` accepts a new `onWalletSignatureRequested` callback that fires right before the wallet is asked to sign, so UIs can show an accurate "confirm in your wallet" state.

- [#66](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/66) [`e8a5721`](https://github.com/Fabric-Labs/polyester-sdk-typescript/commit/e8a5721b57be7ebd0b7edf80c4ed85919fccdb0a) Thanks [@huntabyte](https://github.com/huntabyte)! - New `warmPolyesterSmartAccountClient` helper pre-fetches the gas price and warms RPC connections ahead of a submission. The smart account client now caches gas prices, for 10 seconds by default, configurable via the new `options.gasPriceCacheTtlMs` setting.

### Patch Changes

- [#66](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/66) [`e8a5721`](https://github.com/Fabric-Labs/polyester-sdk-typescript/commit/e8a5721b57be7ebd0b7edf80c4ed85919fccdb0a) Thanks [@huntabyte](https://github.com/huntabyte)! - The smart account client polls for UserOperation receipts every second instead of every 4 seconds, configurable via the new `options.pollingIntervalMs` setting.

## 0.4.5

### Patch Changes

- [#64](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/64) [`354cfd2`](https://github.com/Fabric-Labs/polyester-sdk-typescript/commit/354cfd29d21c44a4b82203938c3c10d4848e3943) Thanks [@huntabyte](https://github.com/huntabyte)! - fix(orderbook): stop `orderbook.createSubscription()` from subscribing to order-book delta channels that have no publisher. The backend only publishes `public:spot:orderbook:deltas:depth:{depth}:...` for depths `1, 20, 50, 200, 500`, but the REST snapshot accepts `1, 5, 10, 20, 50, 100, 200, 500, 1000`. Passing one of the REST-only depths (for example `depth: 10`) subscribed successfully and then never delivered a publication, leaving the book permanently empty with no `onError`. Requested depths now ride the smallest published channel depth that covers them and are sliced back down locally, so every documented depth delivers updates.

## 0.4.4

### Patch Changes

- [#62](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/62) [`ee6f75a`](https://github.com/Fabric-Labs/polyester-sdk-typescript/commit/ee6f75a64294ffad0c05dfdfe65b802699509b7b) Thanks [@huntabyte](https://github.com/huntabyte)! - fix: `orders.batchCreate()` no longer throws a `ValiError` when the server rejects an item without a structured error detail; the item is surfaced as `status: "rejected"` with `error` possibly undefined. Also documents that `orders.listOpen()` is paginated and must be drained via `nextPageToken`.

## 0.4.3

### Patch Changes

- [#60](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/60) [`f91caab`](https://github.com/Fabric-Labs/polyester-sdk-typescript/commit/f91caaba589ce689ffaa7d310f833373a8e61009) Thanks [@huntabyte](https://github.com/huntabyte)! - Declare the Multicall3 deployment (`0xF35A6AE5408fa1356064849D0BC3855f801aa6aC`, block 563457) on the Polychain testnet chain definition so viem clients can batch contract reads via multicall instead of issuing one `eth_call` per read.

## 0.4.2

### Patch Changes

- [#58](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/58) [`c253beb`](https://github.com/Fabric-Labs/polyester-sdk-typescript/commit/c253beb9cbef0ab5d5d33cc330edc85ff585468b) Thanks [@aiiven](https://github.com/aiiven)! - feat(vip): add VIP tier catalog and status methods for public policy snapshots and authenticated caller-root qualification.

- [#58](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/58) [`c253beb`](https://github.com/Fabric-Labs/polyester-sdk-typescript/commit/c253beb9cbef0ab5d5d33cc330edc85ff585468b) Thanks [@aiiven](https://github.com/aiiven)! - feat(fees): add a spot fee rate method for authenticated effective maker and taker rates.

- [#58](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/58) [`c253beb`](https://github.com/Fabric-Labs/polyester-sdk-typescript/commit/c253beb9cbef0ab5d5d33cc330edc85ff585468b) Thanks [@aiiven](https://github.com/aiiven)! - feat(rate-limit): add trading rate-limit catalog and effective limit methods for public quota snapshots and authenticated account targets.

## 0.4.1

### Patch Changes

- [#56](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/56) [`1e34fde`](https://github.com/Fabric-Labs/polyester-sdk-typescript/commit/1e34fde8be60b78006ee2c0c23595c0561ab5d6a) Thanks [@huntabyte](https://github.com/huntabyte)! - Repair the published TypeScript declarations so public contract and service callback types retain their precise inferred shapes.

## 0.4.0

### Minor Changes

- [#54](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/54) [`b1d07ad`](https://github.com/Fabric-Labs/polyester-sdk-typescript/commit/b1d07ad58e7f691cbf0df32e5905bd679c1adfd6) Thanks [@huntabyte](https://github.com/huntabyte)! - Standardize market-data limits as positive integers, reject string and invalid candle or trade limits, and require a valid orderbook heatmap limit before sending requests.

### Patch Changes

- [#54](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/54) [`b1d07ad`](https://github.com/Fabric-Labs/polyester-sdk-typescript/commit/b1d07ad58e7f691cbf0df32e5905bd679c1adfd6) Thanks [@huntabyte](https://github.com/huntabyte)! - Return exact nanosecond timestamp strings and epoch-millisecond timestamps from single-order cancel and modify operations.

- [#54](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/54) [`b1d07ad`](https://github.com/Fabric-Labs/polyester-sdk-typescript/commit/b1d07ad58e7f691cbf0df32e5905bd679c1adfd6) Thanks [@huntabyte](https://github.com/huntabyte)! - Preserve server-side bearer authentication when the display-session cookie is missing or invalid, and discard it when an explicit display session belongs to another environment.

- [#54](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/54) [`b1d07ad`](https://github.com/Fabric-Labs/polyester-sdk-typescript/commit/b1d07ad58e7f691cbf0df32e5905bd679c1adfd6) Thanks [@huntabyte](https://github.com/huntabyte)! - Clarify that single-order cancellation acknowledges the request and requires lifecycle reconciliation, while missing targets remain not-found errors.

- [#54](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/54) [`b1d07ad`](https://github.com/Fabric-Labs/polyester-sdk-typescript/commit/b1d07ad58e7f691cbf0df32e5905bd679c1adfd6) Thanks [@huntabyte](https://github.com/huntabyte)! - Document that realtime callers must wait for `onOpen` before issuing writes whose events they need to observe.

- [#54](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/54) [`b1d07ad`](https://github.com/Fabric-Labs/polyester-sdk-typescript/commit/b1d07ad58e7f691cbf0df32e5905bd679c1adfd6) Thanks [@huntabyte](https://github.com/huntabyte)! - Allow transfer history to be listed without an input object and return an SDK validation error for null account-scoped inputs.

- [#54](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/54) [`b1d07ad`](https://github.com/Fabric-Labs/polyester-sdk-typescript/commit/b1d07ad58e7f691cbf0df32e5905bd679c1adfd6) Thanks [@huntabyte](https://github.com/huntabyte)! - Accept Next.js-style cookie getters when creating server clients.

- [#54](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/54) [`b1d07ad`](https://github.com/Fabric-Labs/polyester-sdk-typescript/commit/b1d07ad58e7f691cbf0df32e5905bd679c1adfd6) Thanks [@huntabyte](https://github.com/huntabyte)! - Reject malformed client, environment, account signer, and catalog configuration with SDK error types before constructing clients or marking catalog snapshots fresh.

- [#54](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/54) [`b1d07ad`](https://github.com/Fabric-Labs/polyester-sdk-typescript/commit/b1d07ad58e7f691cbf0df32e5905bd679c1adfd6) Thanks [@huntabyte](https://github.com/huntabyte)! - Isolate synchronously thrown auth event listener errors so one failing listener cannot reject a completed auth operation or prevent later listeners from running.

- [#54](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/54) [`b1d07ad`](https://github.com/Fabric-Labs/polyester-sdk-typescript/commit/b1d07ad58e7f691cbf0df32e5905bd679c1adfd6) Thanks [@huntabyte](https://github.com/huntabyte)! - Return login nonce expiration timestamps as JSON-safe epoch-millisecond numbers instead of raw protobuf timestamp objects.

- [#54](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/54) [`b1d07ad`](https://github.com/Fabric-Labs/polyester-sdk-typescript/commit/b1d07ad58e7f691cbf0df32e5905bd679c1adfd6) Thanks [@huntabyte](https://github.com/huntabyte)! - Route private realtime subscription authentication failures through `onError` when provided, and throw from `subscribe()` when no error observer exists.

- [#54](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/54) [`b1d07ad`](https://github.com/Fabric-Labs/polyester-sdk-typescript/commit/b1d07ad58e7f691cbf0df32e5905bd679c1adfd6) Thanks [@huntabyte](https://github.com/huntabyte)! - Return `null` from `orders.getDetails` when the backend reports that the requested order was not found.

- [#54](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/54) [`b1d07ad`](https://github.com/Fabric-Labs/polyester-sdk-typescript/commit/b1d07ad58e7f691cbf0df32e5905bd679c1adfd6) Thanks [@huntabyte](https://github.com/huntabyte)! - fix(auth): prevent malformed hex credentials from appearing in configuration error messages.

- [#54](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/54) [`b1d07ad`](https://github.com/Fabric-Labs/polyester-sdk-typescript/commit/b1d07ad58e7f691cbf0df32e5905bd679c1adfd6) Thanks [@huntabyte](https://github.com/huntabyte)! - Return `false` from `isJwtValid` for non-string values instead of throwing.

- [#54](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/54) [`b1d07ad`](https://github.com/Fabric-Labs/polyester-sdk-typescript/commit/b1d07ad58e7f691cbf0df32e5905bd679c1adfd6) Thanks [@huntabyte](https://github.com/huntabyte)! - Validate subaccount activity limits and balance-history ledger IDs as non-negative integers before serializing requests.

- [#54](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/54) [`b1d07ad`](https://github.com/Fabric-Labs/polyester-sdk-typescript/commit/b1d07ad58e7f691cbf0df32e5905bd679c1adfd6) Thanks [@huntabyte](https://github.com/huntabyte)! - Translate schema validation, authentication, RPC, and network failures into the documented `PolyesterError` hierarchy.

## 0.3.1

### Patch Changes

- [#52](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/52) [`4d78227`](https://github.com/Fabric-Labs/polyester-sdk-typescript/commit/4d78227aa61b426e3ab8c0ac9bff6225a7865d42) Thanks [@aiiven](https://github.com/aiiven)! - feat(market-overview): expose the current multi-venue index price on market overview rows.

## 0.3.0

### Minor Changes

- [#50](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/50) [`b3412a0`](https://github.com/Fabric-Labs/polyester-sdk-typescript/commit/b3412a0f8376708be58f60b2d4e1537e35867757) Thanks [@aiiven](https://github.com/aiiven)! - feat(triggers): support time-scheduled trigger events that omit conditional fire prices.

### Patch Changes

- [#50](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/50) [`b3412a0`](https://github.com/Fabric-Labs/polyester-sdk-typescript/commit/b3412a0f8376708be58f60b2d4e1537e35867757) Thanks [@aiiven](https://github.com/aiiven)! - feat(orders): add trigger ID filters for listing open and historical child orders.

## 0.2.2

### Patch Changes

- [#48](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/48) [`e363ba5`](https://github.com/Fabric-Labs/polyester-sdk-typescript/commit/e363ba59cb1a5e52ac8ea04f843e2562c9e29f0d) Thanks [@huntabyte](https://github.com/huntabyte)! - feat(orders): export a canonical cause-chain parser for structured order error details.

## 0.2.1

### Patch Changes

- [#45](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/45) [`9e85a55`](https://github.com/Fabric-Labs/polyester-sdk-typescript/commit/9e85a55432709b88257fb2bdd26a8c09b92935e2) Thanks [@aiiven](https://github.com/aiiven)! - feat(orders): add structured rate-limit details to order rejection results and typed errors.

- [#45](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/45) [`9e85a55`](https://github.com/Fabric-Labs/polyester-sdk-typescript/commit/9e85a55432709b88257fb2bdd26a8c09b92935e2) Thanks [@aiiven](https://github.com/aiiven)! - feat(realtime): add structured error details to trading command rejections.

## 0.2.0

### Minor Changes

- [#43](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/43) [`0896e61`](https://github.com/Fabric-Labs/polyester-sdk-typescript/commit/0896e61b83df934b090e7a31903fe3ba001c3a05) Thanks [@aiiven](https://github.com/aiiven)! - feat(ledger): add trading withdrawal request-fee codes to transfer filters and decoded records.

### Patch Changes

- [#43](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/43) [`0896e61`](https://github.com/Fabric-Labs/polyester-sdk-typescript/commit/0896e61b83df934b090e7a31903fe3ba001c3a05) Thanks [@aiiven](https://github.com/aiiven)! - feat(withdraw): add a destination validation method to support preflight checks before external-chain withdrawals.

## 0.1.1

### Patch Changes

- [#41](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/41) [`4ee1746`](https://github.com/Fabric-Labs/polyester-sdk-typescript/commit/4ee174671d677740aa9bfe911736dd51b758da6a) Thanks [@aiiven](https://github.com/aiiven)! - Expose trading withdrawal policy, contract, and execution failure reasons through lifecycle responses.

## 0.1.0

### Minor Changes

- [#39](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/39) [`7b7a16a`](https://github.com/Fabric-Labs/polyester-sdk-typescript/commit/7b7a16a3ccaead38a0be19a19fcb23d3951db89c) Thanks [@huntabyte](https://github.com/huntabyte)! - Expose exact authenticated trade economics. `Trade.fee` now decodes the protobuf's E18 `U128` amount instead of the removed asset-scaled fee field. `Trade.referralShare` exposes the optional E18 referral amount, and `Trade.feeIsRebate` distinguishes rebates from charged fees.

- [#39](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/39) [`7b7a16a`](https://github.com/Fabric-Labs/polyester-sdk-typescript/commit/7b7a16a3ccaead38a0be19a19fcb23d3951db89c) Thanks [@huntabyte](https://github.com/huntabyte)! - **Breaking:** Remove `Trade.tradeId` and `Trade.subaccountId`. Neither identifier exists in the upstream `UserTrade` response, so retaining them misrepresented the wire contract.

## 0.0.1

### Patch Changes

- [#34](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/34) [`95d43bb`](https://github.com/Fabric-Labs/polyester-sdk-typescript/commit/95d43bb278783b23f598bfe40fbc570531b9a857) Thanks [@huntabyte](https://github.com/huntabyte)! - initial alpha release
