Skip to content

fix(profile-controller): call the X account endpoint in disconnectX - #11195

Merged
montelaidev merged 3 commits into
mainfrom
fix/x-disconnect-endpoint
Oct 29, 2026
Merged

montelaidev merged 3 commits into
mainfrom
fix/x-disconnect-endpoint

Conversation

@montelaidev

@montelaidev montelaidev commented Oct 29, 2026 •

Copy link
Copy Markdown
Contributor

Explanation

ProfileService.disconnectX now sends DELETE /v1/profiles/x/account instead of the DELETE /v1/profiles/{profileId}/x.

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
Touches authenticated profile/X integration, but it corrects a broken endpoint without changing the public method signature; cache invalidation and idempotent 404 handling are preserved.

Overview
Fixes X unlinking by changing ProfileService.disconnectX to send DELETE to profiles/x/account instead of the invalid profiles/{profileId}/x route, matching how getXAccount already talks to the profile API.

The server determines which profile’s X link to remove from the bearer token, not from a path segment. The existing profileId argument is unchanged and is still only used to invalidate cached profile data after a successful disconnect; 404 remains treated as success for idempotency.

Tests and JSDoc/action-type comments are updated to reflect the shared account endpoint.

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

ProfileService.disconnectX now sends DELETE /v1/profiles/x/account instead of the non-existent DELETE /v1/profiles/{profileId}/x. The linked X account is resolved server-side from the verified bearer token, so no profile-scoped path is used.
mathieuartu
mathieuartu previously approved these changes Oct 29, 2026
@montelaidev
montelaidev added this pull request to the merge queue Oct 29, 2026
Merged via the queue into main with commit 9abfc37 Oct 29, 2026
46 checks passed
@montelaidev
montelaidev deleted the fix/x-disconnect-endpoint branch October 29, 2026 11:21
@montelaidev montelaidev mentioned this pull request Oct 29, 2026
1 of 4 tasks
@Prithpal-Sooriya Prithpal-Sooriya mentioned this pull request Oct 29, 2026
1 task done
Naz-Ovh pushed a commit to 0x-fork/metamask-core that referenced this pull request Nov 4, 2026
## Explanation

Re-lands the release that was reverted in MetaMask#11187 (the revert happened
because CI on main was broken; the CI issue has since been fixed via
MetaMask#11191, and Release/1375.0.0 was subsequently shipped by another team in
MetaMask#11192, so this release is now **Release/1376.0.0**).

To avoid cutting two separate releases, this PR also folds in the
`@metamask/profile-controller` patch release that was staged in MetaMask#11197
(that PR is now redundant and closed in favor of this one).

Two packages are released:

**`@metamask/assets-controller` 20.0.2 (patch)** — 20.0.2 was never
published to npm, so this re-release is safe.

- **Fixed:** hand-rolled Multicall3 `aggregate3` codecs for balance
batches (MetaMask#11078)

**`@metamask/profile-controller` 1.2.1 (patch)**

- **Added:** `clearState` method on `ProfileController` (MetaMask#11177)
- **Changed:** bump `@metamask/utils` from `^12.0.0` to `^12.0.1`
(MetaMask#11107)
- **Fixed:** `ProfileService.disconnectX` now calls `DELETE
profiles/x/account` instead of the non-existent `DELETE
profiles/{profileId}/x` endpoint, since the linked X account is resolved
server-side from the verified bearer token (MetaMask#11195)

All functional changes above are already merged on `main`; this diff
contains only version bumps and changelog finalization (plus a merge of
`main` to pick up MetaMask#11195).

- `@metamask/bridge-controller` and
`@metamask/transaction-pay-controller` only have their
`@metamask/assets-controller` dependency range bumped to `^20.0.2`; they
are intentionally not released.

## Checklist

- [x] `yarn changelog:validate` passes
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