Skip to content

feat(profile-sync-controller): add authentication selectors for cached session data#9604

Open
baptiste-marchand wants to merge 3 commits into
mainfrom
feat/add-session-data-selectors
Open

feat(profile-sync-controller): add authentication selectors for cached session data#9604
baptiste-marchand wants to merge 3 commits into
mainfrom
feat/add-session-data-selectors

Conversation

@baptiste-marchand

@baptiste-marchand baptiste-marchand commented Jul 22, 2026

Copy link
Copy Markdown
Contributor

Explanation

Clients (especially mobile Braze banners) need a sync way to read the cached canonicalProfileId for identity (Braze.changeUser) before refreshing banners. Today the shared path is AuthenticationController.getSessionProfile(), which can take 2s+ when it falls into a re-login / unlock-gated path — too slow for this use case.

Cached canonicalProfileId in persisted srpSessionData is enough for Braze (best-effort identity; canonical rarely changes between sessions). Mobile currently has a temporary client-side helper; Core should own this as the shared source of truth.

This PR adds guideline-aligned derived-state selectors on AuthenticationController (no new state field, no getter, no messenger action):

  • selectSrpSessionData — raw srpSessionData map
  • selectSessionData — primary / first SRP session entry (same convention as extension)
  • selectCanonicalProfileId — cached canonical ID; treats '' as missing (controller invalidation marker)

Exported from @metamask/profile-sync-controller/auth. Staleness matches a valid cached getSessionProfile(); use refreshCanonicalProfileId() when freshness is required. Existing auth APIs are unchanged.

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
Read-only derived selectors with no auth flow changes; main caveat is documented cache staleness for identity use cases.

Overview
Adds authenticationControllerSelectors on AuthenticationController so clients can read cached session identity synchronously from persisted state instead of calling getSessionProfile() (which can block on unlock/re-login).

New selectors: selectSrpSessionData (raw map), selectSessionData (first/primary SRP entry, same convention as extension), and selectCanonicalProfileId (best-effort canonical ID; treats '' as missing to match #invalidateSrpSession). Exported from the auth package entrypoint; no new state, messenger actions, or changes to existing auth APIs.

Docs note the same staleness as a valid cached session and point consumers that need freshness at refreshCanonicalProfileId(). Unit tests cover empty/missing session data and multi-SRP cases.

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

@baptiste-marchand

Copy link
Copy Markdown
Contributor Author

@metamaskbot publish-preview

@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@7.5.5-preview-064aea96d
@metamask-previews/accounts-controller@39.0.5-preview-064aea96d
@metamask-previews/address-book-controller@7.1.2-preview-064aea96d
@metamask-previews/ai-controllers@0.8.0-preview-064aea96d
@metamask-previews/analytics-controller@1.2.1-preview-064aea96d
@metamask-previews/analytics-data-regulation-controller@0.0.0-preview-064aea96d
@metamask-previews/announcement-controller@8.1.0-preview-064aea96d
@metamask-previews/app-metadata-controller@2.0.1-preview-064aea96d
@metamask-previews/approval-controller@9.0.2-preview-064aea96d
@metamask-previews/assets-controller@11.1.1-preview-064aea96d
@metamask-previews/assets-controllers@110.0.0-preview-064aea96d
@metamask-previews/authenticated-user-storage@3.0.1-preview-064aea96d
@metamask-previews/base-controller@9.1.0-preview-064aea96d
@metamask-previews/base-data-service@0.1.3-preview-064aea96d
@metamask-previews/bitcoin-regtest-up@1.0.0-preview-064aea96d
@metamask-previews/bridge-controller@77.7.0-preview-064aea96d
@metamask-previews/bridge-status-controller@74.3.0-preview-064aea96d
@metamask-previews/build-utils@3.0.4-preview-064aea96d
@metamask-previews/chain-agnostic-permission@1.7.0-preview-064aea96d
@metamask-previews/chomp-api-service@4.0.0-preview-064aea96d
@metamask-previews/claims-controller@0.5.3-preview-064aea96d
@metamask-previews/client-controller@1.0.1-preview-064aea96d
@metamask-previews/client-utils@1.2.1-preview-064aea96d
@metamask-previews/compliance-controller@2.1.0-preview-064aea96d
@metamask-previews/composable-controller@12.0.1-preview-064aea96d
@metamask-previews/config-registry-controller@0.4.1-preview-064aea96d
@metamask-previews/connectivity-controller@0.3.0-preview-064aea96d
@metamask-previews/controller-utils@12.3.0-preview-064aea96d
@metamask-previews/core-backend@7.0.0-preview-064aea96d
@metamask-previews/delegation-controller@3.0.2-preview-064aea96d
@metamask-previews/earn-controller@12.2.2-preview-064aea96d
@metamask-previews/eip-5792-middleware@3.0.5-preview-064aea96d
@metamask-previews/eip-7702-internal-rpc-middleware@0.1.1-preview-064aea96d
@metamask-previews/eip1193-permission-middleware@2.0.1-preview-064aea96d
@metamask-previews/ens-controller@19.1.5-preview-064aea96d
@metamask-previews/eth-block-tracker@15.0.1-preview-064aea96d
@metamask-previews/eth-json-rpc-middleware@23.1.3-preview-064aea96d
@metamask-previews/eth-json-rpc-provider@6.0.1-preview-064aea96d
@metamask-previews/foundryup@1.0.1-preview-064aea96d
@metamask-previews/gas-fee-controller@26.2.4-preview-064aea96d
@metamask-previews/gator-permissions-controller@4.2.3-preview-064aea96d
@metamask-previews/geolocation-controller@0.1.3-preview-064aea96d
@metamask-previews/java-tron-up@1.0.0-preview-064aea96d
@metamask-previews/json-rpc-engine@10.5.0-preview-064aea96d
@metamask-previews/json-rpc-middleware-stream@8.0.8-preview-064aea96d
@metamask-previews/keyring-controller@27.1.0-preview-064aea96d
@metamask-previews/local-node-utils@1.0.0-preview-064aea96d
@metamask-previews/logging-controller@8.0.2-preview-064aea96d
@metamask-previews/message-manager@14.1.2-preview-064aea96d
@metamask-previews/messenger@2.0.0-preview-064aea96d
@metamask-previews/messenger-cli@0.2.0-preview-064aea96d
@metamask-previews/money-account-api-data-service@0.3.0-preview-064aea96d
@metamask-previews/money-account-balance-service@2.3.0-preview-064aea96d
@metamask-previews/money-account-controller@0.3.3-preview-064aea96d
@metamask-previews/money-account-upgrade-controller@3.0.0-preview-064aea96d
@metamask-previews/multichain-account-service@13.0.0-preview-064aea96d
@metamask-previews/multichain-api-middleware@4.0.1-preview-064aea96d
@metamask-previews/multichain-network-controller@3.2.1-preview-064aea96d
@metamask-previews/multichain-transactions-controller@7.1.1-preview-064aea96d
@metamask-previews/name-controller@9.1.2-preview-064aea96d
@metamask-previews/network-connection-banner-controller@0.1.0-preview-064aea96d
@metamask-previews/network-controller@34.0.0-preview-064aea96d
@metamask-previews/network-enablement-controller@5.6.0-preview-064aea96d
@metamask-previews/notification-services-controller@26.0.0-preview-064aea96d
@metamask-previews/passkey-controller@3.0.0-preview-064aea96d
@metamask-previews/permission-controller@13.1.1-preview-064aea96d
@metamask-previews/permission-log-controller@5.1.0-preview-064aea96d
@metamask-previews/perps-controller@9.3.0-preview-064aea96d
@metamask-previews/phishing-controller@17.3.0-preview-064aea96d
@metamask-previews/platform-api-docs@0.0.0-preview-064aea96d
@metamask-previews/polling-controller@16.0.8-preview-064aea96d
@metamask-previews/preferences-controller@23.1.0-preview-064aea96d
@metamask-previews/profile-metrics-controller@4.0.2-preview-064aea96d
@metamask-previews/profile-sync-controller@28.3.0-preview-064aea96d
@metamask-previews/ramps-controller@17.0.0-preview-064aea96d
@metamask-previews/rate-limit-controller@7.0.1-preview-064aea96d
@metamask-previews/react-data-query@0.2.2-preview-064aea96d
@metamask-previews/remote-feature-flag-controller@4.2.2-preview-064aea96d
@metamask-previews/sample-controllers@5.0.3-preview-064aea96d
@metamask-previews/seedless-onboarding-controller@10.0.3-preview-064aea96d
@metamask-previews/selected-network-controller@26.1.5-preview-064aea96d
@metamask-previews/sentinel-api-service@1.0.0-preview-064aea96d
@metamask-previews/shield-controller@5.1.3-preview-064aea96d
@metamask-previews/signature-controller@39.2.7-preview-064aea96d
@metamask-previews/smart-transactions-controller@25.0.1-preview-064aea96d
@metamask-previews/snap-account-service@2.0.0-preview-064aea96d
@metamask-previews/social-controllers@2.5.0-preview-064aea96d
@metamask-previews/solana-test-validator-up@1.0.0-preview-064aea96d
@metamask-previews/stellar-quickstart-up@0.0.0-preview-064aea96d
@metamask-previews/storage-service@1.0.2-preview-064aea96d
@metamask-previews/subscription-controller@6.2.1-preview-064aea96d
@metamask-previews/transaction-controller@69.2.1-preview-064aea96d
@metamask-previews/transaction-pay-controller@25.1.1-preview-064aea96d
@metamask-previews/user-operation-controller@41.2.7-preview-064aea96d
@metamask-previews/wallet@7.0.1-preview-064aea96d
@metamask-previews/wallet-cli@0.0.0-preview-064aea96d

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.

1 participant