Skip to content

fix(auth): single-source Console page-URL building; fix SMS + OAuth-callback landing paths#2869

Merged
os-zhuang merged 2 commits into
mainfrom
claude/invitation-link-https-prefix-wc05nn
Jul 13, 2026
Merged

fix(auth): single-source Console page-URL building; fix SMS + OAuth-callback landing paths#2869
os-zhuang merged 2 commits into
mainfrom
claude/invitation-link-https-prefix-wc05nn

Conversation

@os-zhuang

@os-zhuang os-zhuang commented Jul 13, 2026

Copy link
Copy Markdown
Contributor

Context

Third and final follow-up to the invitation-link fixes (#2847, #2865). Those patched one link at a time; this PR removes the root cause and closes the two remaining known cases.

Root cause

The correct URL of a Console page is always ${origin}${uiBasePath}${path}, but that composition was hand-written at every call site. That's exactly how the scheme / /_console prefix kept getting dropped one link at a time.

Changes

@objectstack/plugin-auth

  • Single source of truth — new getConsolePageUrl(path) helper. loginPage, consentPage, device verificationUri, and the invitation accept URL all compose through it. Future page links can't drift (no more hand-concatenated ${baseUrl}${uiBase}/...).
  • Phone-invite SMS now links to the real Console sign-in page (${origin}${uiBasePath}/login) via a new {{loginUrl}} template variable, instead of the bare origin (which relied on a root redirect that may not exist). {{baseUrl}} is still provided for backward-compat with tenant-overridden templates.

@objectstack/client

  • signInWithProvider now defaults callbackURL to the current page (window.location.href) instead of a hard-coded origin + '/login'. The SDK cannot know the app's mount path (Console lives under /_console, others differ), so returning the user to where they started is the only base-path-correct default — and it mirrors the neighbouring linkSocial. Callers can still pass an explicit callbackURL.

Tests

  • getConsolePageUrl-backed links keep the /_console prefix + absolute origin (existing invitation/issuer tests).
  • Phone-invite SMS body targets …/_console/login (both en + zh).
  • Client signInWithProvider: default callbackURL = current page; explicit override respected.
  • @objectstack/plugin-auth 406 pass; @objectstack/client 109 pass.

Changeset

@objectstack/plugin-auth: patch, @objectstack/client: patch.

🤖 Generated with Claude Code

…allback paths

Root-cause hardening after the invitation-link fixes. The correct URL of a
Console page (${origin}${uiBasePath}${path}) was hand-composed at every call
site, which is exactly how the scheme / /_console prefix kept getting dropped
one link at a time.

plugin-auth:
- Add single-source getConsolePageUrl(path); route loginPage, consentPage,
  device verificationUri and the invitation accept URL through it so new page
  links can't drift.
- Phone-invite SMS links to the real Console sign-in page via a new
  {{loginUrl}} variable instead of the bare origin; {{baseUrl}} kept for
  backward-compat with tenant-overridden templates.

client:
- signInWithProvider defaults callbackURL to window.location.href (current
  page) instead of a hard-coded origin + '/login'. The SDK can't know the
  app's mount path, so returning to the originating page is the only
  base-path-correct default; mirrors linkSocial.

Tests: getConsolePageUrl-backed links, SMS login-page target, and the client
callbackURL default (+ explicit override). plugin-auth 406, client 109 pass.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NT4mx1fHXtkxery6MtLTsp
@vercel

vercel Bot commented Jul 13, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
spec Ready Ready Preview, Comment Jul 13, 2026 3:13am

Request Review

@github-actions github-actions Bot added size/m documentation Improvements or additions to documentation tests tooling and removed size/m labels Jul 13, 2026
@github-actions

Copy link
Copy Markdown
Contributor

📓 Docs Drift Check

This PR changes 2 package(s): @objectstack/client, @objectstack/plugin-auth.

17 hand-written doc(s) reference the affected code and may need an implementation-accuracy re-verification:

  • content/docs/ai/skills-reference.mdx (via packages/client)
  • content/docs/api/client-sdk.mdx (via @objectstack/client)
  • content/docs/api/data-flow.mdx (via @objectstack/client)
  • content/docs/api/environment-routing.mdx (via @objectstack/client)
  • content/docs/api/error-catalog.mdx (via @objectstack/client)
  • content/docs/deployment/production-readiness.mdx (via @objectstack/plugin-auth)
  • content/docs/getting-started/cli.mdx (via @objectstack/plugin-auth)
  • content/docs/kernel/runtime-services/data-service.mdx (via packages/client)
  • content/docs/kernel/runtime-services/index.mdx (via packages/client)
  • content/docs/kernel/services-checklist.mdx (via @objectstack/plugin-auth)
  • content/docs/permissions/authentication.mdx (via @objectstack/client, @objectstack/plugin-auth)
  • content/docs/permissions/sso.mdx (via @objectstack/plugin-auth)
  • content/docs/plugins/index.mdx (via @objectstack/plugin-auth)
  • content/docs/plugins/packages.mdx (via @objectstack/client, @objectstack/plugin-auth)
  • content/docs/protocol/objectos/realtime-protocol.mdx (via @objectstack/client)
  • content/docs/releases/implementation-status.mdx (via @objectstack/client, @objectstack/plugin-auth)
  • content/docs/releases/v9.mdx (via @objectstack/plugin-auth)

Advisory only. To re-verify, run the docs-accuracy-audit workflow scoped to these files:
node scripts/docs-audit/affected-docs.mjs origin/main → pass the list as args.docs.

…ent-page default

Matches the SDK change: the default callbackURL is now window.location.href
(base-path-correct) rather than a hard-coded origin + '/login'.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NT4mx1fHXtkxery6MtLTsp
@os-zhuang os-zhuang marked this pull request as ready for review July 13, 2026 04:40
@os-zhuang os-zhuang merged commit e4cf774 into main Jul 13, 2026
16 checks passed
@os-zhuang os-zhuang deleted the claude/invitation-link-https-prefix-wc05nn branch July 13, 2026 04:41
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation size/m tests tooling

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants