UNPKG

@dataroadinc/setup-auth

Version:

CLI tool and programmatic API for automated OAuth setup across cloud platforms

92 lines (91 loc) 3.77 kB
import { DEFAULT_CALLBACK_PATHS } from "../constants/defaults.js"; export async function getRedirectOptions(options) { const envProjectId = process.env.GCP_OAUTH_PROJECT_ID; if (!envProjectId) { throw new Error("GCP_OAUTH_PROJECT_ID is not set. Make sure it is set in your environment variables."); } const envClientId = process.env.GCP_OAUTH_CLIENT_ID?.replace(/\.apps\.googleusercontent\.com$/, ""); if (!envClientId) { throw new Error("GCP_OAUTH_CLIENT_ID is not set. Make sure it is set in your environment variables."); } console.log("Using configuration from environment variables"); return { gcpOauthProjectId: envProjectId, clientId: envClientId, additionalUrls: process.env.ADDITIONAL_REDIRECT_URLS?.split(","), wildcardPatterns: getDefaultWildcardPatterns(options.platform || "vercel", options.oauthProvider || "google"), }; } export function buildRedirectUriList(options) { const { redirectOptions, deploymentUrl, platform, oauthProvider, callbackPath, } = options; if (!platform) { throw new Error("Platform is not set. Make sure it is set in your environment variables."); } if (!oauthProvider) { throw new Error("Provider is not set. Make sure it is set in your environment variables."); } const redirectUris = new Set(); const providerCallbackPath = callbackPath || DEFAULT_CALLBACK_PATHS[oauthProvider] || `/api/auth/callback/${oauthProvider}`; const productionUrl = getPlatformDeploymentUrl(platform, providerCallbackPath); if (productionUrl) { redirectUris.add(productionUrl); } if (deploymentUrl) { const fullUrl = deploymentUrl.startsWith("https://") ? `${deploymentUrl}${providerCallbackPath}` : `https://${deploymentUrl}${providerCallbackPath}`; redirectUris.add(fullUrl); console.log(`Added current deployment URL: ${fullUrl}`); } if (redirectOptions.additionalUrls) { for (const url of redirectOptions.additionalUrls) { if (url && url.trim()) { redirectUris.add(url.trim()); console.log(`Added additional URL: ${url.trim()}`); } } } if (redirectOptions.wildcardPatterns) { for (const pattern of redirectOptions.wildcardPatterns) { if (pattern && pattern.trim()) { redirectUris.add(pattern.trim()); console.log(`Added wildcard pattern: ${pattern.trim()}`); } } } return Array.from(redirectUris); } function getPlatformDeploymentUrl(platform, callbackPath) { const projectName = process.env.EKG_PROJECT_NAME || process.env.PROJECT_NAME || "your-project-name"; switch (platform) { case "vercel": return `https://${projectName}.vercel.app${callbackPath}`; case "netlify": return `https://${projectName}.netlify.app${callbackPath}`; case "opennext": return process.env.PRODUCTION_URL ? `${process.env.PRODUCTION_URL}${callbackPath}` : null; default: return null; } } function getDefaultWildcardPatterns(platform, oauthProvider) { const projectName = process.env.EKG_PROJECT_NAME || process.env.PROJECT_NAME || "your-project-name"; const callbackPath = DEFAULT_CALLBACK_PATHS[oauthProvider] || `/api/auth/callback/${oauthProvider}`; switch (platform) { case "vercel": return [`https://${projectName}-*${callbackPath}`]; case "netlify": return [`https://deploy-preview-*--${projectName}${callbackPath}`]; default: return []; } }