Skip to content

fix: reuse adaptOrderFromSDK for historical orders - #9982

Open
geositta wants to merge 4 commits into
mainfrom
fix/perps-history-trigger-prices
Open

fix: reuse adaptOrderFromSDK for historical orders#9982
geositta wants to merge 4 commits into
mainfrom
fix/perps-history-trigger-prices

Conversation

@geositta

@geositta geositta commented Aug 27, 2026

Copy link
Copy Markdown
Contributor

Explanation

Hyperliquid historical orders were mapped through a separate inline path that dropped triggerPx and the normalized trigger order type. Consumers therefore received trigger orders without Order.triggerPrice, preventing clients such as MetaMask Mobile from displaying the trigger price in order history.

This change reuses the existing adaptOrderFromSDK mapping used for open orders, then overlays historical lifecycle fields such as status, timestamps, and filled/remaining size. It also preserves ordinary historical market-order classification when Hyperliquid supplies a non-empty limitPx as a slippage cap.

Provider tests now cover distinct trigger and limit prices for Take Profit Limit and Stop Market orders, plus a regular market order carrying a slippage-cap price. There are no public type changes or breaking changes.

Validation:

  • yarn workspace @metamask/perps-controller run test
  • yarn eslint packages/perps-controller/src/providers/HyperLiquidProvider.ts packages/perps-controller/tests/src/providers/HyperLiquidProvider.history.test.ts
  • yarn build

References

Checklist

  • I've updated the test suite for new or updated code as appropriate
  • I've updated documentation (JSDoc, Markdown, etc.) for new or updated code as appropriate
  • I've communicated my changes to consumers by updating changelogs for packages I've changed
  • I've introduced breaking changes in this PR and have prepared draft pull requests for clients and consumer packages to resolve them

Note

Low Risk
Mapping refactor in historical order fetch only; no API or auth changes, with expanded tests guarding trigger and edge-case behavior.

Overview
HyperLiquid order history no longer uses a separate inline mapper that dropped triggerPrice and triggerOrderType. getOrders now builds each row through adaptOrderFromSDK (same as open orders), then overlays lifecycle fields—status, timestamps, and remainingSize from the exchange snapshot.

Historical orderType still treats a non-empty limitPx on plain market orders as a slippage cap only: classification follows the exchange orderType string (limit vs market), not the cap price. adaptOrderFromSDK is slightly more defensive for sparse history payloads (missing oid or orderType).

Tests and the changelog cover TP/SL history rows, stop/take-profit trigger metadata, and malformed records.

Reviewed by Cursor Bugbot for commit 7fead61. Bugbot is set up for automated code reviews on this repo. Configure here.

@geositta
geositta marked this pull request as ready for review August 27, 2026 04:52
@geositta
geositta requested a review from a team as a code owner August 27, 2026 04:52
@geositta
geositta deployed to default-branch August 27, 2026 04:52 — with GitHub Actions Active
@geositta
geositta requested a review from a team as a code owner August 27, 2026 05:02
@geositta geositta changed the title fix: for historical orders reuse adaptOrderFromSDK, exposing trigger … fix: for historical orders reuse adaptOrderFromSDK Aug 27, 2026
@geositta geositta changed the title fix: for historical orders reuse adaptOrderFromSDK fix: reuse adaptOrderFromSDK for historical orders Aug 27, 2026
Comment thread packages/perps-controller/src/providers/HyperLiquidProvider.ts
geositta and others added 4 commits August 27, 2026 09:29
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Harden shared order adaptation so a malformed exchange row cannot erase the user's full activity history, while simplifying historical field normalization.

Co-authored-by: Cursor <cursoragent@cursor.com>
@geositta
geositta force-pushed the fix/perps-history-trigger-prices branch from ad622f4 to 7fead61 Compare August 27, 2026 15:07
const historicalOrderType = order.orderType
?.toLowerCase()
.includes('limit')
? 'limit'

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I wonder if we should now match the full order type here or if there could be issue with includes

@geositta

Copy link
Copy Markdown
Contributor Author

@metamaskbot publish-previews

@github-actions

Copy link
Copy Markdown
Contributor

Preview builds have been published. Learn how to use preview builds in other projects.

Expand for full list of packages and versions.
@metamask-previews/account-tree-controller@8.0.0-preview-7fead6160
@metamask-previews/accounts-controller@39.1.1-preview-7fead6160
@metamask-previews/address-book-controller@7.1.2-preview-7fead6160
@metamask-previews/ai-controllers@0.8.0-preview-7fead6160
@metamask-previews/analytics-controller@2.0.0-preview-7fead6160
@metamask-previews/analytics-data-regulation-controller@0.0.0-preview-7fead6160
@metamask-previews/announcement-controller@8.1.0-preview-7fead6160
@metamask-previews/app-metadata-controller@2.0.1-preview-7fead6160
@metamask-previews/approval-controller@9.0.2-preview-7fead6160
@metamask-previews/assets-controller@14.0.2-preview-7fead6160
@metamask-previews/assets-controllers@111.1.3-preview-7fead6160
@metamask-previews/authenticated-user-storage@3.0.2-preview-7fead6160
@metamask-previews/base-controller@9.1.0-preview-7fead6160
@metamask-previews/base-data-service@1.0.0-preview-7fead6160
@metamask-previews/bitcoin-regtest-up@1.0.0-preview-7fead6160
@metamask-previews/bridge-controller@80.0.0-preview-7fead6160
@metamask-previews/bridge-status-controller@75.3.0-preview-7fead6160
@metamask-previews/build-utils@3.0.4-preview-7fead6160
@metamask-previews/chain-agnostic-permission@1.7.0-preview-7fead6160
@metamask-previews/chomp-api-service@4.0.1-preview-7fead6160
@metamask-previews/claims-controller@0.6.1-preview-7fead6160
@metamask-previews/client-controller@1.0.1-preview-7fead6160
@metamask-previews/client-utils@2.1.1-preview-7fead6160
@metamask-previews/compliance-controller@2.1.0-preview-7fead6160
@metamask-previews/composable-controller@12.0.1-preview-7fead6160
@metamask-previews/config-registry-controller@3.1.0-preview-7fead6160
@metamask-previews/connectivity-controller@0.3.0-preview-7fead6160
@metamask-previews/controller-utils@12.3.0-preview-7fead6160
@metamask-previews/core-backend@9.0.0-preview-7fead6160
@metamask-previews/delegation-controller@3.0.2-preview-7fead6160
@metamask-previews/earn-controller@12.2.6-preview-7fead6160
@metamask-previews/eip-5792-middleware@3.0.5-preview-7fead6160
@metamask-previews/eip-7702-internal-rpc-middleware@0.1.1-preview-7fead6160
@metamask-previews/eip1193-permission-middleware@2.0.1-preview-7fead6160
@metamask-previews/eth-block-tracker@15.0.1-preview-7fead6160
@metamask-previews/eth-json-rpc-middleware@24.0.1-preview-7fead6160
@metamask-previews/eth-json-rpc-provider@6.0.1-preview-7fead6160
@metamask-previews/foundryup@1.0.1-preview-7fead6160
@metamask-previews/gas-fee-controller@26.3.2-preview-7fead6160
@metamask-previews/gator-permissions-controller@5.0.2-preview-7fead6160
@metamask-previews/geolocation-controller@1.0.0-preview-7fead6160
@metamask-previews/java-tron-up@1.0.0-preview-7fead6160
@metamask-previews/json-rpc-engine@10.5.0-preview-7fead6160
@metamask-previews/json-rpc-middleware-stream@8.0.8-preview-7fead6160
@metamask-previews/keyring-controller@27.1.1-preview-7fead6160
@metamask-previews/kyc-controller@0.0.0-preview-7fead6160
@metamask-previews/local-node-utils@1.0.0-preview-7fead6160
@metamask-previews/logging-controller@9.0.0-preview-7fead6160
@metamask-previews/message-manager@14.1.2-preview-7fead6160
@metamask-previews/messenger@2.0.0-preview-7fead6160
@metamask-previews/messenger-cli@0.2.0-preview-7fead6160
@metamask-previews/money-account-api-data-service@0.4.1-preview-7fead6160
@metamask-previews/money-account-balance-service@2.4.3-preview-7fead6160
@metamask-previews/money-account-controller@1.0.0-preview-7fead6160
@metamask-previews/money-account-upgrade-controller@3.0.2-preview-7fead6160
@metamask-previews/money-account-utils@1.1.0-preview-7fead6160
@metamask-previews/multichain-account-service@13.0.2-preview-7fead6160
@metamask-previews/multichain-api-middleware@4.0.3-preview-7fead6160
@metamask-previews/multichain-network-controller@3.2.4-preview-7fead6160
@metamask-previews/multichain-transactions-controller@7.1.2-preview-7fead6160
@metamask-previews/name-controller@9.1.2-preview-7fead6160
@metamask-previews/network-connection-banner-controller@0.2.1-preview-7fead6160
@metamask-previews/network-controller@36.0.0-preview-7fead6160
@metamask-previews/network-enablement-controller@6.0.5-preview-7fead6160
@metamask-previews/notification-services-controller@26.0.1-preview-7fead6160
@metamask-previews/passkey-controller@3.1.0-preview-7fead6160
@metamask-previews/permission-controller@13.1.1-preview-7fead6160
@metamask-previews/permission-log-controller@5.1.0-preview-7fead6160
@metamask-previews/perps-controller@13.0.0-preview-7fead6160
@metamask-previews/phishing-controller@17.4.0-preview-7fead6160
@metamask-previews/platform-api-docs@0.0.0-preview-7fead6160
@metamask-previews/polling-controller@16.0.9-preview-7fead6160
@metamask-previews/preferences-controller@23.1.0-preview-7fead6160
@metamask-previews/profile-metrics-controller@4.0.3-preview-7fead6160
@metamask-previews/profile-sync-controller@29.0.0-preview-7fead6160
@metamask-previews/ramps-controller@20.0.0-preview-7fead6160
@metamask-previews/rate-limit-controller@7.0.1-preview-7fead6160
@metamask-previews/react-data-query@1.0.0-preview-7fead6160
@metamask-previews/remote-feature-flag-controller@6.0.0-preview-7fead6160
@metamask-previews/sample-controllers@5.0.6-preview-7fead6160
@metamask-previews/seedless-onboarding-controller@10.1.1-preview-7fead6160
@metamask-previews/selected-network-controller@26.1.7-preview-7fead6160
@metamask-previews/sentinel-api-service@1.0.1-preview-7fead6160
@metamask-previews/shield-controller@6.0.1-preview-7fead6160
@metamask-previews/signature-controller@39.2.10-preview-7fead6160
@metamask-previews/smart-transactions-controller@25.1.1-preview-7fead6160
@metamask-previews/snap-account-service@2.1.2-preview-7fead6160
@metamask-previews/social-controllers@2.8.0-preview-7fead6160
@metamask-previews/solana-test-validator-up@1.0.0-preview-7fead6160
@metamask-previews/stellar-quickstart-up@0.0.0-preview-7fead6160
@metamask-previews/storage-service@1.0.2-preview-7fead6160
@metamask-previews/subscription-controller@8.0.1-preview-7fead6160
@metamask-previews/transaction-controller@69.6.1-preview-7fead6160
@metamask-previews/transaction-pay-controller@27.0.0-preview-7fead6160
@metamask-previews/user-operation-controller@41.2.9-preview-7fead6160
@metamask-previews/wallet@12.0.2-preview-7fead6160
@metamask-previews/wallet-cli@0.0.0-preview-7fead6160

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants