Fix remote pairing CORS responses#2594
Conversation
|
Important Review skippedAuto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the ⚙️ Run configurationConfiguration used: Repository UI Review profile: CHILL Plan: Pro Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
✨ Finishing Touches🧪 Generate unit tests (beta)
Tip 💬 Introducing Slack Agent: The best way for teams to turn conversations into code.Slack Agent is built on CodeRabbit's deep understanding of your code, so your team can collaborate across the entire SDLC without losing context.
Built for teams:
One agent for your entire SDLC. Right inside Slack. Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes and found 1 potential issue.
❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.
Reviewed by Cursor Bugbot for commit 80fe9ca. Configure here.
ApprovabilityVerdict: Approved Straightforward bug fix that adds existing CORS headers to HTTP responses that were missing them. The CORS policy ( You can customize Macroscope's approvability policy. Learn more. |
Add actual CORS response headers for the public environment descriptor and browser remote-auth JSON endpoints so linked web clients can complete pairing without a custom proxy. References pingdotgg#1928
80fe9ca to
ea0ca88
Compare
Dismissing prior approval to re-evaluate ea0ca88

What Changed
Adds CORS headers to the actual JSON responses used by remote environment pairing:
/.well-known/t3/environment/api/auth/session/api/auth/bootstrap/api/auth/bootstrap/bearer/api/auth/websocket-tokenThe allowed methods and headers are shared with the existing CORS preflight configuration so OPTIONS and the real GET/POST responses stay aligned.
This also adds server tests for cross-origin environment discovery and the bearer auth bootstrap/session/websocket-token flow.
Why
Fixes #1928.
That issue was closed, but I can still reproduce it on the latest nightly I tested:
0.0.23-nightly.20260508.230.The backend is reachable directly from the client machine, and the environment descriptor returns
200 OKfrom curl/browser navigation. The failure happens when the app does a cross-origin fetch from the web/Electron renderer:Failed to fetch remote auth endpointThe server already handles OPTIONS preflight, but the actual GET/POST responses do not include
Access-Control-Allow-Origin, so Chromium blocks the readable response.This keeps the fix on the server side instead of requiring users to run a reverse proxy that injects the missing CORS headers.
UI Changes
No UI changes.
The visible behavior change is that remote pairing succeeds instead of failing with
Failed to fetch remote auth endpoint.Checklist
Validation
bun fmtbun lintbun typecheckbun run --cwd apps/server test src/server.test.tsI also verified the fix manually by pairing two machines over Tailscale without a custom proxy.
Note
Medium Risk
Broadens
Access-Control-Allow-*headers to additional auth and environment responses; while aligned with existing preflight config, it changes cross-origin accessibility for these endpoints and should be reviewed for unintended exposure.Overview
Fixes remote pairing/browser fetches by adding
Access-Control-Allow-*headers to the actual JSON responses (not just OPTIONS preflight) for/.well-known/t3/environmentand key auth endpoints (/api/auth/session,/api/auth/bootstrap,/api/auth/bootstrap/bearer,/api/auth/ws-token), includingrespondToAuthError.Extracts shared CORS allowlists into new
httpCors.tsand reuses them in both the CORS middleware and response builders to keep preflight and response headers consistent. Adds/updates server tests to assert these CORS headers on cross-origin success and failure flows.Reviewed by Cursor Bugbot for commit ea0ca88. Bugbot is set up for automated code reviews on this repo. Configure here.
Note
Fix CORS headers on remote pairing auth and environment responses
access-control-allow-origin,access-control-allow-methods, andaccess-control-allow-headersheaders to all auth endpoints (/api/auth/session,/api/auth/bootstrap,/api/auth/bootstrap/bearer,/api/auth/ws-token) and/.well-known/t3/environment.Macroscope summarized ea0ca88.