const.ts 1.1 KB

12345678910111213141516171819202122232425262728293031
  1. export { COOKIE_NAME, ONE_YEAR_MS } from "@shared/const";
  2. // Generate login URL at runtime.
  3. // If VITE_OAUTH_PORTAL_URL is configured, use Manus OAuth flow.
  4. // Otherwise (production), redirect to our own email/password login page.
  5. export const getLoginUrl = (returnPath?: string) => {
  6. const oauthPortalUrl = import.meta.env.VITE_OAUTH_PORTAL_URL;
  7. const base = import.meta.env.BASE_URL ?? "/";
  8. // No OAuth portal configured — use local login page
  9. if (!oauthPortalUrl) {
  10. const qs = returnPath ? `?returnTo=${encodeURIComponent(returnPath)}` : "";
  11. return `${base}login${qs}`;
  12. }
  13. // OAuth flow (Manus / external SSO)
  14. const appId = import.meta.env.VITE_APP_ID;
  15. const redirectUri = `${window.location.origin}${base}api/oauth/callback`;
  16. const statePayload = returnPath
  17. ? JSON.stringify({ redirectUri, returnPath })
  18. : redirectUri;
  19. const state = btoa(statePayload);
  20. const url = new URL(`${oauthPortalUrl}/app-auth`);
  21. url.searchParams.set("appId", appId);
  22. url.searchParams.set("redirectUri", redirectUri);
  23. url.searchParams.set("state", state);
  24. url.searchParams.set("type", "signIn");
  25. return url.toString();
  26. };