Skip to content

Conversation

@lwin-kyaw
Copy link
Contributor

@lwin-kyaw lwin-kyaw commented Feb 2, 2026

Explanation

This PR adds a new public method getAccessToken() with automatic token refresh capability to prevent clients from using expired access tokens when retrieving them from state.

Issue:

Previously, clients could directly access state.accessToken from the controller state, which could potentially return an expired token. This could lead to failed API calls and poor user experience when the token had expired but wasn't refreshed.

Solution:

Added a new public method getAccessToken() that automatically refreshes expired tokens: Uses the #executeWithTokenRefresh wrapper to check token expiration and refresh if needed before returning

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

Medium Risk
Adds a new public token-access path that can trigger refresh/auth flows; mistakes could surface as unexpected authentication errors or stale token usage for consumers.

Overview
Introduces a new public getAccessToken() method (and messenger action SeedlessOnboardingController:getAccessToken) so clients can fetch the current accessToken without reading controller state directly.

getAccessToken() is wrapped in the controller lock and uses the existing refresh flow to proactively refresh expired node/metadata/access tokens before returning an access token; the token-expiry checks were refactored into a shared #checkTokensExpired() helper. Tests were added to cover success, missing token, unauthenticated user, refresh-on-expiry, and refresh failure cases, and exports/types were reorganized so messenger/actions/options are defined/exported from SeedlessOnboardingController.

Written by Cursor Bugbot for commit 4594ee9. This will update automatically on new commits. Configure here.

@lwin-kyaw lwin-kyaw requested a review from a team as a code owner February 2, 2026 06:11
@lwin-kyaw lwin-kyaw requested a review from a team as a code owner February 2, 2026 06:16
@lwin-kyaw
Copy link
Contributor Author

@metamaskbot publish-preview

@github-actions
Copy link
Contributor

github-actions bot commented Feb 2, 2026

Preview builds have been published. See these instructions for more information about preview builds.

Expand for full list of packages and versions.
{
  "@metamask-previews/account-tree-controller": "4.0.0-preview-719a409",
  "@metamask-previews/accounts-controller": "35.0.2-preview-719a409",
  "@metamask-previews/address-book-controller": "7.0.1-preview-719a409",
  "@metamask-previews/ai-controllers": "0.0.0-preview-719a409",
  "@metamask-previews/analytics-controller": "1.0.0-preview-719a409",
  "@metamask-previews/analytics-data-regulation-controller": "0.0.0-preview-719a409",
  "@metamask-previews/announcement-controller": "8.0.0-preview-719a409",
  "@metamask-previews/app-metadata-controller": "2.0.0-preview-719a409",
  "@metamask-previews/approval-controller": "8.0.0-preview-719a409",
  "@metamask-previews/assets-controller": "0.0.0-preview-719a409",
  "@metamask-previews/assets-controllers": "99.1.0-preview-719a409",
  "@metamask-previews/base-controller": "9.0.0-preview-719a409",
  "@metamask-previews/bridge-controller": "65.1.0-preview-719a409",
  "@metamask-previews/bridge-status-controller": "65.0.1-preview-719a409",
  "@metamask-previews/build-utils": "3.0.4-preview-719a409",
  "@metamask-previews/chain-agnostic-permission": "1.4.0-preview-719a409",
  "@metamask-previews/claims-controller": "0.4.2-preview-719a409",
  "@metamask-previews/composable-controller": "12.0.0-preview-719a409",
  "@metamask-previews/connectivity-controller": "0.1.0-preview-719a409",
  "@metamask-previews/controller-utils": "11.18.0-preview-719a409",
  "@metamask-previews/core-backend": "5.0.0-preview-719a409",
  "@metamask-previews/delegation-controller": "2.0.0-preview-719a409",
  "@metamask-previews/earn-controller": "11.1.0-preview-719a409",
  "@metamask-previews/eip-5792-middleware": "2.1.0-preview-719a409",
  "@metamask-previews/eip-7702-internal-rpc-middleware": "0.1.0-preview-719a409",
  "@metamask-previews/eip1193-permission-middleware": "1.0.3-preview-719a409",
  "@metamask-previews/ens-controller": "19.0.2-preview-719a409",
  "@metamask-previews/error-reporting-service": "3.0.1-preview-719a409",
  "@metamask-previews/eth-block-tracker": "15.0.1-preview-719a409",
  "@metamask-previews/eth-json-rpc-middleware": "23.0.0-preview-719a409",
  "@metamask-previews/eth-json-rpc-provider": "6.0.0-preview-719a409",
  "@metamask-previews/foundryup": "1.0.1-preview-719a409",
  "@metamask-previews/gas-fee-controller": "26.0.2-preview-719a409",
  "@metamask-previews/gator-permissions-controller": "1.1.2-preview-719a409",
  "@metamask-previews/json-rpc-engine": "10.2.1-preview-719a409",
  "@metamask-previews/json-rpc-middleware-stream": "8.0.8-preview-719a409",
  "@metamask-previews/keyring-controller": "25.1.0-preview-719a409",
  "@metamask-previews/logging-controller": "7.0.1-preview-719a409",
  "@metamask-previews/message-manager": "14.1.0-preview-719a409",
  "@metamask-previews/messenger": "0.3.0-preview-719a409",
  "@metamask-previews/multichain-account-service": "5.1.0-preview-719a409",
  "@metamask-previews/multichain-api-middleware": "1.2.6-preview-719a409",
  "@metamask-previews/multichain-network-controller": "3.0.2-preview-719a409",
  "@metamask-previews/multichain-transactions-controller": "7.0.0-preview-719a409",
  "@metamask-previews/name-controller": "9.0.0-preview-719a409",
  "@metamask-previews/network-controller": "29.0.0-preview-719a409",
  "@metamask-previews/network-enablement-controller": "4.1.0-preview-719a409",
  "@metamask-previews/notification-services-controller": "21.0.0-preview-719a409",
  "@metamask-previews/permission-controller": "12.2.0-preview-719a409",
  "@metamask-previews/permission-log-controller": "5.0.0-preview-719a409",
  "@metamask-previews/perps-controller": "0.0.0-preview-719a409",
  "@metamask-previews/phishing-controller": "16.1.0-preview-719a409",
  "@metamask-previews/polling-controller": "16.0.2-preview-719a409",
  "@metamask-previews/preferences-controller": "22.0.0-preview-719a409",
  "@metamask-previews/profile-metrics-controller": "3.0.0-preview-719a409",
  "@metamask-previews/profile-sync-controller": "27.0.0-preview-719a409",
  "@metamask-previews/ramps-controller": "5.1.0-preview-719a409",
  "@metamask-previews/rate-limit-controller": "7.0.0-preview-719a409",
  "@metamask-previews/remote-feature-flag-controller": "4.0.0-preview-719a409",
  "@metamask-previews/sample-controllers": "4.0.2-preview-719a409",
  "@metamask-previews/seedless-onboarding-controller": "7.1.0-preview-719a409",
  "@metamask-previews/selected-network-controller": "26.0.2-preview-719a409",
  "@metamask-previews/shield-controller": "5.0.1-preview-719a409",
  "@metamask-previews/signature-controller": "39.0.1-preview-719a409",
  "@metamask-previews/storage-service": "1.0.0-preview-719a409",
  "@metamask-previews/subscription-controller": "5.4.2-preview-719a409",
  "@metamask-previews/transaction-controller": "62.12.0-preview-719a409",
  "@metamask-previews/transaction-pay-controller": "12.0.2-preview-719a409",
  "@metamask-previews/user-operation-controller": "41.0.2-preview-719a409"
}

@lwin-kyaw
Copy link
Contributor Author

@metamaskbot publish-preview

@github-actions
Copy link
Contributor

github-actions bot commented Feb 2, 2026

Preview builds have been published. See these instructions for more information about preview builds.

Expand for full list of packages and versions.
{
  "@metamask-previews/account-tree-controller": "4.0.0-preview-dcbbb24",
  "@metamask-previews/accounts-controller": "35.0.2-preview-dcbbb24",
  "@metamask-previews/address-book-controller": "7.0.1-preview-dcbbb24",
  "@metamask-previews/ai-controllers": "0.0.0-preview-dcbbb24",
  "@metamask-previews/analytics-controller": "1.0.0-preview-dcbbb24",
  "@metamask-previews/analytics-data-regulation-controller": "0.0.0-preview-dcbbb24",
  "@metamask-previews/announcement-controller": "8.0.0-preview-dcbbb24",
  "@metamask-previews/app-metadata-controller": "2.0.0-preview-dcbbb24",
  "@metamask-previews/approval-controller": "8.0.0-preview-dcbbb24",
  "@metamask-previews/assets-controller": "0.0.0-preview-dcbbb24",
  "@metamask-previews/assets-controllers": "99.1.0-preview-dcbbb24",
  "@metamask-previews/base-controller": "9.0.0-preview-dcbbb24",
  "@metamask-previews/bridge-controller": "65.1.0-preview-dcbbb24",
  "@metamask-previews/bridge-status-controller": "65.0.1-preview-dcbbb24",
  "@metamask-previews/build-utils": "3.0.4-preview-dcbbb24",
  "@metamask-previews/chain-agnostic-permission": "1.4.0-preview-dcbbb24",
  "@metamask-previews/claims-controller": "0.4.2-preview-dcbbb24",
  "@metamask-previews/composable-controller": "12.0.0-preview-dcbbb24",
  "@metamask-previews/connectivity-controller": "0.1.0-preview-dcbbb24",
  "@metamask-previews/controller-utils": "11.18.0-preview-dcbbb24",
  "@metamask-previews/core-backend": "5.0.0-preview-dcbbb24",
  "@metamask-previews/delegation-controller": "2.0.0-preview-dcbbb24",
  "@metamask-previews/earn-controller": "11.1.0-preview-dcbbb24",
  "@metamask-previews/eip-5792-middleware": "2.1.0-preview-dcbbb24",
  "@metamask-previews/eip-7702-internal-rpc-middleware": "0.1.0-preview-dcbbb24",
  "@metamask-previews/eip1193-permission-middleware": "1.0.3-preview-dcbbb24",
  "@metamask-previews/ens-controller": "19.0.2-preview-dcbbb24",
  "@metamask-previews/error-reporting-service": "3.0.1-preview-dcbbb24",
  "@metamask-previews/eth-block-tracker": "15.0.1-preview-dcbbb24",
  "@metamask-previews/eth-json-rpc-middleware": "23.0.0-preview-dcbbb24",
  "@metamask-previews/eth-json-rpc-provider": "6.0.0-preview-dcbbb24",
  "@metamask-previews/foundryup": "1.0.1-preview-dcbbb24",
  "@metamask-previews/gas-fee-controller": "26.0.2-preview-dcbbb24",
  "@metamask-previews/gator-permissions-controller": "1.1.2-preview-dcbbb24",
  "@metamask-previews/json-rpc-engine": "10.2.1-preview-dcbbb24",
  "@metamask-previews/json-rpc-middleware-stream": "8.0.8-preview-dcbbb24",
  "@metamask-previews/keyring-controller": "25.1.0-preview-dcbbb24",
  "@metamask-previews/logging-controller": "7.0.1-preview-dcbbb24",
  "@metamask-previews/message-manager": "14.1.0-preview-dcbbb24",
  "@metamask-previews/messenger": "0.3.0-preview-dcbbb24",
  "@metamask-previews/multichain-account-service": "5.1.0-preview-dcbbb24",
  "@metamask-previews/multichain-api-middleware": "1.2.6-preview-dcbbb24",
  "@metamask-previews/multichain-network-controller": "3.0.2-preview-dcbbb24",
  "@metamask-previews/multichain-transactions-controller": "7.0.0-preview-dcbbb24",
  "@metamask-previews/name-controller": "9.0.0-preview-dcbbb24",
  "@metamask-previews/network-controller": "29.0.0-preview-dcbbb24",
  "@metamask-previews/network-enablement-controller": "4.1.0-preview-dcbbb24",
  "@metamask-previews/notification-services-controller": "21.0.0-preview-dcbbb24",
  "@metamask-previews/permission-controller": "12.2.0-preview-dcbbb24",
  "@metamask-previews/permission-log-controller": "5.0.0-preview-dcbbb24",
  "@metamask-previews/perps-controller": "0.0.0-preview-dcbbb24",
  "@metamask-previews/phishing-controller": "16.1.0-preview-dcbbb24",
  "@metamask-previews/polling-controller": "16.0.2-preview-dcbbb24",
  "@metamask-previews/preferences-controller": "22.0.0-preview-dcbbb24",
  "@metamask-previews/profile-metrics-controller": "3.0.0-preview-dcbbb24",
  "@metamask-previews/profile-sync-controller": "27.0.0-preview-dcbbb24",
  "@metamask-previews/ramps-controller": "5.1.0-preview-dcbbb24",
  "@metamask-previews/rate-limit-controller": "7.0.0-preview-dcbbb24",
  "@metamask-previews/remote-feature-flag-controller": "4.0.0-preview-dcbbb24",
  "@metamask-previews/sample-controllers": "4.0.2-preview-dcbbb24",
  "@metamask-previews/seedless-onboarding-controller": "7.1.0-preview-dcbbb24",
  "@metamask-previews/selected-network-controller": "26.0.2-preview-dcbbb24",
  "@metamask-previews/shield-controller": "5.0.1-preview-dcbbb24",
  "@metamask-previews/signature-controller": "39.0.1-preview-dcbbb24",
  "@metamask-previews/storage-service": "1.0.0-preview-dcbbb24",
  "@metamask-previews/subscription-controller": "5.4.2-preview-dcbbb24",
  "@metamask-previews/transaction-controller": "62.12.0-preview-dcbbb24",
  "@metamask-previews/transaction-pay-controller": "12.0.2-preview-dcbbb24",
  "@metamask-previews/user-operation-controller": "41.0.2-preview-dcbbb24"
}

Copy link

@cursor cursor bot left a comment

Choose a reason for hiding this comment

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

Cursor Bugbot has reviewed your changes and found 1 potential issue.

@lwin-kyaw
Copy link
Contributor Author

@metamaskbot publish-preview

@github-actions
Copy link
Contributor

github-actions bot commented Feb 2, 2026

Preview builds have been published. See these instructions for more information about preview builds.

Expand for full list of packages and versions.
{
  "@metamask-previews/account-tree-controller": "4.0.0-preview-4594ee99",
  "@metamask-previews/accounts-controller": "35.0.2-preview-4594ee99",
  "@metamask-previews/address-book-controller": "7.0.1-preview-4594ee99",
  "@metamask-previews/ai-controllers": "0.0.0-preview-4594ee99",
  "@metamask-previews/analytics-controller": "1.0.0-preview-4594ee99",
  "@metamask-previews/analytics-data-regulation-controller": "0.0.0-preview-4594ee99",
  "@metamask-previews/announcement-controller": "8.0.0-preview-4594ee99",
  "@metamask-previews/app-metadata-controller": "2.0.0-preview-4594ee99",
  "@metamask-previews/approval-controller": "8.0.0-preview-4594ee99",
  "@metamask-previews/assets-controller": "0.0.0-preview-4594ee99",
  "@metamask-previews/assets-controllers": "99.1.0-preview-4594ee99",
  "@metamask-previews/base-controller": "9.0.0-preview-4594ee99",
  "@metamask-previews/bridge-controller": "65.1.0-preview-4594ee99",
  "@metamask-previews/bridge-status-controller": "65.0.1-preview-4594ee99",
  "@metamask-previews/build-utils": "3.0.4-preview-4594ee99",
  "@metamask-previews/chain-agnostic-permission": "1.4.0-preview-4594ee99",
  "@metamask-previews/claims-controller": "0.4.2-preview-4594ee99",
  "@metamask-previews/composable-controller": "12.0.0-preview-4594ee99",
  "@metamask-previews/connectivity-controller": "0.1.0-preview-4594ee99",
  "@metamask-previews/controller-utils": "11.18.0-preview-4594ee99",
  "@metamask-previews/core-backend": "5.0.0-preview-4594ee99",
  "@metamask-previews/delegation-controller": "2.0.0-preview-4594ee99",
  "@metamask-previews/earn-controller": "11.1.0-preview-4594ee99",
  "@metamask-previews/eip-5792-middleware": "2.1.0-preview-4594ee99",
  "@metamask-previews/eip-7702-internal-rpc-middleware": "0.1.0-preview-4594ee99",
  "@metamask-previews/eip1193-permission-middleware": "1.0.3-preview-4594ee99",
  "@metamask-previews/ens-controller": "19.0.2-preview-4594ee99",
  "@metamask-previews/error-reporting-service": "3.0.1-preview-4594ee99",
  "@metamask-previews/eth-block-tracker": "15.0.1-preview-4594ee99",
  "@metamask-previews/eth-json-rpc-middleware": "23.0.0-preview-4594ee99",
  "@metamask-previews/eth-json-rpc-provider": "6.0.0-preview-4594ee99",
  "@metamask-previews/foundryup": "1.0.1-preview-4594ee99",
  "@metamask-previews/gas-fee-controller": "26.0.2-preview-4594ee99",
  "@metamask-previews/gator-permissions-controller": "1.1.2-preview-4594ee99",
  "@metamask-previews/json-rpc-engine": "10.2.1-preview-4594ee99",
  "@metamask-previews/json-rpc-middleware-stream": "8.0.8-preview-4594ee99",
  "@metamask-previews/keyring-controller": "25.1.0-preview-4594ee99",
  "@metamask-previews/logging-controller": "7.0.1-preview-4594ee99",
  "@metamask-previews/message-manager": "14.1.0-preview-4594ee99",
  "@metamask-previews/messenger": "0.3.0-preview-4594ee99",
  "@metamask-previews/multichain-account-service": "5.1.0-preview-4594ee99",
  "@metamask-previews/multichain-api-middleware": "1.2.6-preview-4594ee99",
  "@metamask-previews/multichain-network-controller": "3.0.2-preview-4594ee99",
  "@metamask-previews/multichain-transactions-controller": "7.0.0-preview-4594ee99",
  "@metamask-previews/name-controller": "9.0.0-preview-4594ee99",
  "@metamask-previews/network-controller": "29.0.0-preview-4594ee99",
  "@metamask-previews/network-enablement-controller": "4.1.0-preview-4594ee99",
  "@metamask-previews/notification-services-controller": "21.0.0-preview-4594ee99",
  "@metamask-previews/permission-controller": "12.2.0-preview-4594ee99",
  "@metamask-previews/permission-log-controller": "5.0.0-preview-4594ee99",
  "@metamask-previews/perps-controller": "0.0.0-preview-4594ee99",
  "@metamask-previews/phishing-controller": "16.1.0-preview-4594ee99",
  "@metamask-previews/polling-controller": "16.0.2-preview-4594ee99",
  "@metamask-previews/preferences-controller": "22.0.0-preview-4594ee99",
  "@metamask-previews/profile-metrics-controller": "3.0.0-preview-4594ee99",
  "@metamask-previews/profile-sync-controller": "27.0.0-preview-4594ee99",
  "@metamask-previews/ramps-controller": "5.1.0-preview-4594ee99",
  "@metamask-previews/rate-limit-controller": "7.0.0-preview-4594ee99",
  "@metamask-previews/remote-feature-flag-controller": "4.0.0-preview-4594ee99",
  "@metamask-previews/sample-controllers": "4.0.2-preview-4594ee99",
  "@metamask-previews/seedless-onboarding-controller": "7.1.0-preview-4594ee99",
  "@metamask-previews/selected-network-controller": "26.0.2-preview-4594ee99",
  "@metamask-previews/shield-controller": "5.0.1-preview-4594ee99",
  "@metamask-previews/signature-controller": "39.0.1-preview-4594ee99",
  "@metamask-previews/storage-service": "1.0.0-preview-4594ee99",
  "@metamask-previews/subscription-controller": "5.4.2-preview-4594ee99",
  "@metamask-previews/transaction-controller": "62.12.0-preview-4594ee99",
  "@metamask-previews/transaction-pay-controller": "12.0.2-preview-4594ee99",
  "@metamask-previews/user-operation-controller": "41.0.2-preview-4594ee99"
}

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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants