Split out of #64 (see PR #90). APIClient.verifyIdentity(provider:providerId:) has no caller; #64
kept it because it is the only primitive that closes a real gap.
The gap
LinkedIdentitiesView shows each provider's /status (linkedinStatus, twitterStatus,
blueskyStatus, githubStatus, mastodonStatus), but those report whether the provider is
configured server-side — {"configured":true,…} — not whether this account's stored token still
works. So a user whose Bluesky or Mastodon token has expired sees a healthy-looking row and has no
way to find out until a cross-post silently fails.
POST /api/user/identities/verify is the route that actually checks: it loads the stored credential
and verifies it (restoring the DPoP-bound session for Bluesky, calling the provider otherwise).
Build this
Note
The route reads only provider; the providerId iOS passes is accepted and ignored. Drop the
parameter when wiring, unless #77 (which also touches this area) resolves it differently.
Acceptance criteria
Files: Views/LinkedIdentitiesView.swift, Services/APIClient.swift:177.
Split out of #64 (see PR #90).
APIClient.verifyIdentity(provider:providerId:)has no caller; #64kept it because it is the only primitive that closes a real gap.
The gap
LinkedIdentitiesViewshows each provider's/status(linkedinStatus,twitterStatus,blueskyStatus,githubStatus,mastodonStatus), but those report whether the provider isconfigured server-side —
{"configured":true,…}— not whether this account's stored token stillworks. So a user whose Bluesky or Mastodon token has expired sees a healthy-looking row and has no
way to find out until a cross-post silently fails.
POST /api/user/identities/verifyis the route that actually checks: it loads the stored credentialand verifies it (restoring the DPoP-bound session for Bluesky, calling the provider otherwise).
Build this
LinkedIdentitiesView, callingverifyIdentity(provider:).affordance.
provider, so a manual action may be the better default.
Note
The route reads only
provider; theproviderIdiOS passes is accepted and ignored. Drop theparameter when wiring, unless #77 (which also touches this area) resolves it differently.
Acceptance criteria
Files:
Views/LinkedIdentitiesView.swift,Services/APIClient.swift:177.