feat(oauth): zed/trae/windsurf providers + harden callback proxies

- zed live model discovery; codebuddy-intl handler; remove duplicate workbuddy
- split oauth providers.js into per-provider files (facade re-export)
- fold 5 standard refresh providers into config-driven generic
- hide trae/windsurf from registry (no tool calling support)
- fix login-CSRF + SSRF on trae/windsurf/zed local callback proxies
  via loopback-origin guard + strict state validation + apiOrigins allowlist
- move zed RSA private key transit to POST body; redact proxy logs

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
decolua
2026-07-25 17:25:19 +07:00
co-authored by Claude Fable 5
parent 783e271c16
commit 8e04fe1734
46 changed files with 4569 additions and 2203 deletions
-3
View File
@@ -14,7 +14,6 @@ import {
refreshCopilotToken,
refreshCodebuddyToken,
refreshCodebuddyIntlToken,
refreshWorkbuddyToken,
refreshTraeToken,
refreshZedToken,
refreshWindsurfToken,
@@ -35,7 +34,6 @@ export {
refreshCopilotToken,
refreshCodebuddyToken,
refreshCodebuddyIntlToken,
refreshWorkbuddyToken,
refreshTraeToken,
refreshZedToken,
refreshWindsurfToken,
@@ -149,7 +147,6 @@ const REFRESH_HANDLERS = {
gcli: (c, log) => refreshXaiToken(c.refreshToken, log),
"codebuddy-cn": (c, log) => refreshCodebuddyToken(c.refreshToken, log),
"codebuddy-intl": (c, log) => refreshCodebuddyIntlToken(c.refreshToken, log),
workbuddy: (c, log) => refreshWorkbuddyToken(c.refreshToken, log),
trae: (c, log) => refreshTraeToken(c.refreshToken, c, log),
zed: () => refreshZedToken(),
windsurf: (c, log) => refreshWindsurfToken(c, log),