Skip to content

feat(profile-sync-controller): add profile pairing & canonical profile id management#8504

Open
mathieuartu wants to merge 14 commits intomainfrom
ma/auth-profile-pairing
Open

feat(profile-sync-controller): add profile pairing & canonical profile id management#8504
mathieuartu wants to merge 14 commits intomainfrom
ma/auth-profile-pairing

Conversation

@mathieuartu
Copy link
Copy Markdown
Contributor

@mathieuartu mathieuartu commented Apr 17, 2026

Explanation

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

High Risk
Modifies SRP authentication/session behavior and profile identifier handling (including a new server pairing call), which can impact login stability and any storage keyed by profile IDs.

Overview
Adds SRP profile pairing and canonical identity tracking. AuthenticationController.performSignIn now logs in each SRP and, when 2+ SRPs exist, calls POST /profile/pair, propagates the returned canonicalProfileId to all cached srpSessionData entries, and emits a new AuthenticationController:profileSignIn event when pairing yields aliases or the canonical changes.

Extends the auth SDK to support pairing + alias-aware IDs. The SRP flow now sends X-MetaMask-Profile-Pairing: enabled on /srp/login, parses profile_aliases, keeps the original per-SRP profileId (for storage derivation) while adding canonicalProfileId, and forces re-login when cached sessions lack a canonical ID. Adds pairProfiles service/API (/api/v2/profile/pair), pairSrpProfiles methods on auth classes, a new computeIdentifierId helper, and expands tests/fixtures/changelog accordingly.

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

@mathieuartu mathieuartu self-assigned this Apr 17, 2026
@mathieuartu mathieuartu requested a review from a team as a code owner April 17, 2026 10:27
@mathieuartu mathieuartu requested a review from a team as a code owner April 17, 2026 10:29
Comment thread packages/profile-sync-controller/src/sdk/authentication-jwt-bearer/services.ts Outdated
@mathieuartu
Copy link
Copy Markdown
Contributor Author

@metamaskbot publish-preview

1 similar comment
@mathieuartu
Copy link
Copy Markdown
Contributor Author

@metamaskbot publish-preview

@mathieuartu
Copy link
Copy Markdown
Contributor Author

@metamaskbot publish-preview

@mathieuartu
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.1.0-preview-4845f8918
@metamask-previews/accounts-controller@37.2.0-preview-4845f8918
@metamask-previews/address-book-controller@7.1.1-preview-4845f8918
@metamask-previews/ai-controllers@0.6.3-preview-4845f8918
@metamask-previews/analytics-controller@1.0.1-preview-4845f8918
@metamask-previews/analytics-data-regulation-controller@0.0.0-preview-4845f8918
@metamask-previews/announcement-controller@8.1.0-preview-4845f8918
@metamask-previews/app-metadata-controller@2.0.1-preview-4845f8918
@metamask-previews/approval-controller@9.0.1-preview-4845f8918
@metamask-previews/assets-controller@6.0.0-preview-4845f8918
@metamask-previews/assets-controllers@104.1.0-preview-4845f8918
@metamask-previews/authenticated-user-storage@0.0.0-preview-4845f8918
@metamask-previews/base-controller@9.1.0-preview-4845f8918
@metamask-previews/base-data-service@0.1.1-preview-4845f8918
@metamask-previews/bridge-controller@70.1.1-preview-4845f8918
@metamask-previews/bridge-status-controller@70.0.5-preview-4845f8918
@metamask-previews/build-utils@3.0.4-preview-4845f8918
@metamask-previews/chain-agnostic-permission@1.5.0-preview-4845f8918
@metamask-previews/chomp-api-service@1.0.0-preview-4845f8918
@metamask-previews/claims-controller@0.5.0-preview-4845f8918
@metamask-previews/client-controller@1.0.1-preview-4845f8918
@metamask-previews/compliance-controller@2.0.0-preview-4845f8918
@metamask-previews/composable-controller@12.0.1-preview-4845f8918
@metamask-previews/config-registry-controller@0.2.0-preview-4845f8918
@metamask-previews/connectivity-controller@0.2.0-preview-4845f8918
@metamask-previews/controller-utils@11.20.0-preview-4845f8918
@metamask-previews/core-backend@6.2.1-preview-4845f8918
@metamask-previews/delegation-controller@3.0.0-preview-4845f8918
@metamask-previews/earn-controller@12.0.0-preview-4845f8918
@metamask-previews/eip-5792-middleware@3.0.3-preview-4845f8918
@metamask-previews/eip-7702-internal-rpc-middleware@0.1.0-preview-4845f8918
@metamask-previews/eip1193-permission-middleware@1.0.3-preview-4845f8918
@metamask-previews/ens-controller@19.1.1-preview-4845f8918
@metamask-previews/eth-block-tracker@15.0.1-preview-4845f8918
@metamask-previews/eth-json-rpc-middleware@23.1.1-preview-4845f8918
@metamask-previews/eth-json-rpc-provider@6.0.1-preview-4845f8918
@metamask-previews/foundryup@1.0.1-preview-4845f8918
@metamask-previews/gas-fee-controller@26.1.1-preview-4845f8918
@metamask-previews/gator-permissions-controller@4.0.0-preview-4845f8918
@metamask-previews/geolocation-controller@0.1.2-preview-4845f8918
@metamask-previews/json-rpc-engine@10.2.4-preview-4845f8918
@metamask-previews/json-rpc-middleware-stream@8.0.8-preview-4845f8918
@metamask-previews/keyring-controller@25.2.0-preview-4845f8918
@metamask-previews/logging-controller@8.0.1-preview-4845f8918
@metamask-previews/message-manager@14.1.1-preview-4845f8918
@metamask-previews/messenger@1.1.1-preview-4845f8918
@metamask-previews/messenger-cli@0.2.0-preview-4845f8918
@metamask-previews/money-account-balance-service@0.2.0-preview-4845f8918
@metamask-previews/money-account-controller@0.1.0-preview-4845f8918
@metamask-previews/money-account-upgrade-controller@1.0.0-preview-4845f8918
@metamask-previews/multichain-account-service@8.0.1-preview-4845f8918
@metamask-previews/multichain-api-middleware@2.0.0-preview-4845f8918
@metamask-previews/multichain-network-controller@3.0.6-preview-4845f8918
@metamask-previews/multichain-transactions-controller@7.0.4-preview-4845f8918
@metamask-previews/name-controller@9.1.1-preview-4845f8918
@metamask-previews/network-controller@30.0.1-preview-4845f8918
@metamask-previews/network-enablement-controller@5.0.2-preview-4845f8918
@metamask-previews/notification-services-controller@23.1.0-preview-4845f8918
@metamask-previews/permission-controller@12.3.0-preview-4845f8918
@metamask-previews/permission-log-controller@5.1.0-preview-4845f8918
@metamask-previews/perps-controller@3.2.0-preview-4845f8918
@metamask-previews/phishing-controller@17.1.1-preview-4845f8918
@metamask-previews/polling-controller@16.0.4-preview-4845f8918
@metamask-previews/preferences-controller@23.1.0-preview-4845f8918
@metamask-previews/profile-metrics-controller@3.1.3-preview-4845f8918
@metamask-previews/profile-sync-controller@28.0.2-preview-4845f8918
@metamask-previews/ramps-controller@13.2.0-preview-4845f8918
@metamask-previews/rate-limit-controller@7.0.1-preview-4845f8918
@metamask-previews/react-data-query@0.2.0-preview-4845f8918
@metamask-previews/remote-feature-flag-controller@4.2.0-preview-4845f8918
@metamask-previews/sample-controllers@4.0.4-preview-4845f8918
@metamask-previews/seedless-onboarding-controller@9.1.0-preview-4845f8918
@metamask-previews/selected-network-controller@26.1.0-preview-4845f8918
@metamask-previews/shield-controller@5.1.1-preview-4845f8918
@metamask-previews/signature-controller@39.2.0-preview-4845f8918
@metamask-previews/social-controllers@2.0.0-preview-4845f8918
@metamask-previews/storage-service@1.0.1-preview-4845f8918
@metamask-previews/subscription-controller@6.1.2-preview-4845f8918
@metamask-previews/transaction-controller@64.3.0-preview-4845f8918
@metamask-previews/transaction-pay-controller@19.2.1-preview-4845f8918
@metamask-previews/user-operation-controller@41.2.0-preview-4845f8918

Copy link
Copy Markdown

@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.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, have a team admin enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit e849840. Configure here.

@mathieuartu
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.1.0-preview-a3274bb30
@metamask-previews/accounts-controller@37.2.0-preview-a3274bb30
@metamask-previews/address-book-controller@7.1.1-preview-a3274bb30
@metamask-previews/ai-controllers@0.6.3-preview-a3274bb30
@metamask-previews/analytics-controller@1.0.1-preview-a3274bb30
@metamask-previews/analytics-data-regulation-controller@0.0.0-preview-a3274bb30
@metamask-previews/announcement-controller@8.1.0-preview-a3274bb30
@metamask-previews/app-metadata-controller@2.0.1-preview-a3274bb30
@metamask-previews/approval-controller@9.0.1-preview-a3274bb30
@metamask-previews/assets-controller@6.0.0-preview-a3274bb30
@metamask-previews/assets-controllers@104.1.0-preview-a3274bb30
@metamask-previews/authenticated-user-storage@0.0.0-preview-a3274bb30
@metamask-previews/base-controller@9.1.0-preview-a3274bb30
@metamask-previews/base-data-service@0.1.1-preview-a3274bb30
@metamask-previews/bridge-controller@70.1.1-preview-a3274bb30
@metamask-previews/bridge-status-controller@70.0.5-preview-a3274bb30
@metamask-previews/build-utils@3.0.4-preview-a3274bb30
@metamask-previews/chain-agnostic-permission@1.5.0-preview-a3274bb30
@metamask-previews/chomp-api-service@1.0.0-preview-a3274bb30
@metamask-previews/claims-controller@0.5.0-preview-a3274bb30
@metamask-previews/client-controller@1.0.1-preview-a3274bb30
@metamask-previews/compliance-controller@2.0.0-preview-a3274bb30
@metamask-previews/composable-controller@12.0.1-preview-a3274bb30
@metamask-previews/config-registry-controller@0.2.0-preview-a3274bb30
@metamask-previews/connectivity-controller@0.2.0-preview-a3274bb30
@metamask-previews/controller-utils@11.20.0-preview-a3274bb30
@metamask-previews/core-backend@6.2.1-preview-a3274bb30
@metamask-previews/delegation-controller@3.0.0-preview-a3274bb30
@metamask-previews/earn-controller@12.0.0-preview-a3274bb30
@metamask-previews/eip-5792-middleware@3.0.3-preview-a3274bb30
@metamask-previews/eip-7702-internal-rpc-middleware@0.1.0-preview-a3274bb30
@metamask-previews/eip1193-permission-middleware@1.0.3-preview-a3274bb30
@metamask-previews/ens-controller@19.1.1-preview-a3274bb30
@metamask-previews/eth-block-tracker@15.0.1-preview-a3274bb30
@metamask-previews/eth-json-rpc-middleware@23.1.1-preview-a3274bb30
@metamask-previews/eth-json-rpc-provider@6.0.1-preview-a3274bb30
@metamask-previews/foundryup@1.0.1-preview-a3274bb30
@metamask-previews/gas-fee-controller@26.1.1-preview-a3274bb30
@metamask-previews/gator-permissions-controller@4.0.0-preview-a3274bb30
@metamask-previews/geolocation-controller@0.1.2-preview-a3274bb30
@metamask-previews/json-rpc-engine@10.2.4-preview-a3274bb30
@metamask-previews/json-rpc-middleware-stream@8.0.8-preview-a3274bb30
@metamask-previews/keyring-controller@25.2.0-preview-a3274bb30
@metamask-previews/logging-controller@8.0.1-preview-a3274bb30
@metamask-previews/message-manager@14.1.1-preview-a3274bb30
@metamask-previews/messenger@1.1.1-preview-a3274bb30
@metamask-previews/messenger-cli@0.2.0-preview-a3274bb30
@metamask-previews/money-account-balance-service@0.2.0-preview-a3274bb30
@metamask-previews/money-account-controller@0.1.0-preview-a3274bb30
@metamask-previews/money-account-upgrade-controller@1.0.0-preview-a3274bb30
@metamask-previews/multichain-account-service@8.0.1-preview-a3274bb30
@metamask-previews/multichain-api-middleware@2.0.0-preview-a3274bb30
@metamask-previews/multichain-network-controller@3.0.6-preview-a3274bb30
@metamask-previews/multichain-transactions-controller@7.0.4-preview-a3274bb30
@metamask-previews/name-controller@9.1.1-preview-a3274bb30
@metamask-previews/network-controller@30.0.1-preview-a3274bb30
@metamask-previews/network-enablement-controller@5.0.2-preview-a3274bb30
@metamask-previews/notification-services-controller@23.1.0-preview-a3274bb30
@metamask-previews/permission-controller@12.3.0-preview-a3274bb30
@metamask-previews/permission-log-controller@5.1.0-preview-a3274bb30
@metamask-previews/perps-controller@3.2.0-preview-a3274bb30
@metamask-previews/phishing-controller@17.1.1-preview-a3274bb30
@metamask-previews/polling-controller@16.0.4-preview-a3274bb30
@metamask-previews/preferences-controller@23.1.0-preview-a3274bb30
@metamask-previews/profile-metrics-controller@3.1.3-preview-a3274bb30
@metamask-previews/profile-sync-controller@28.0.2-preview-a3274bb30
@metamask-previews/ramps-controller@13.2.0-preview-a3274bb30
@metamask-previews/rate-limit-controller@7.0.1-preview-a3274bb30
@metamask-previews/react-data-query@0.2.0-preview-a3274bb30
@metamask-previews/remote-feature-flag-controller@4.2.0-preview-a3274bb30
@metamask-previews/sample-controllers@4.0.4-preview-a3274bb30
@metamask-previews/seedless-onboarding-controller@9.1.0-preview-a3274bb30
@metamask-previews/selected-network-controller@26.1.0-preview-a3274bb30
@metamask-previews/shield-controller@5.1.1-preview-a3274bb30
@metamask-previews/signature-controller@39.2.0-preview-a3274bb30
@metamask-previews/social-controllers@2.0.0-preview-a3274bb30
@metamask-previews/storage-service@1.0.1-preview-a3274bb30
@metamask-previews/subscription-controller@6.1.2-preview-a3274bb30
@metamask-previews/transaction-controller@64.3.0-preview-a3274bb30
@metamask-previews/transaction-pay-controller@19.2.1-preview-a3274bb30
@metamask-previews/user-operation-controller@41.2.0-preview-a3274bb30

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.

1 participant