/** * Formats the OAuth callback response with JWT token. * Supports multiple response formats: * - JSON response with user and token * - URL fragment redirect with token * - Query parameter redirect with token * * @param token - JWT token to return * @param user - User object to return * @param redirectUrl - Optional redirect URL * @param responseType - Response format ('json' or undefined for redirect) * @returns Response object for Flink handler */ export function formatTokenResponse(token: string, user: any, redirectUrl?: string, responseType?: string): any { // JSON response format if (responseType === "json") { return { status: 200, data: { user, token, }, }; } // Redirect format if (redirectUrl) { // Use URL fragment for better security (token not sent to server) const separator = redirectUrl.includes("#") ? "&" : "#"; const fullRedirectUrl = `${redirectUrl}${separator}token=${encodeURIComponent(token)}`; return { status: 302, headers: { Location: fullRedirectUrl, }, data: {}, }; } // Default: return JSON if no redirect URL provided return { status: 200, data: { user, token, }, }; }