app/lib/server/config.ts (112 lines of code) (raw):

// Enhanced server configuration with GitHub auto-connect export const serverConfig = { // Job execution mode: 'api' for remote execution, 'docker' for local EXECUTION_MODE: process.env.EXECUTION_MODE || "api", // Docker settings DOCKER: { IMAGE: process.env.DOCKER_IMAGE || "codex-universal-explore:dev", MEMORY_LIMIT: process.env.DOCKER_MEMORY_LIMIT ? parseInt(process.env.DOCKER_MEMORY_LIMIT) : 512 * 1024 * 1024, // 512MB CPU_SHARES: process.env.DOCKER_CPU_SHARES ? parseInt(process.env.DOCKER_CPU_SHARES) : 512, TIMEOUT: process.env.DOCKER_TIMEOUT ? parseInt(process.env.DOCKER_TIMEOUT) : 2 * 60 * 60 * 1000, // 2 hours }, // Hugging Face API settings HUGGINGFACE_API: { BASE_URL: "https://huggingface.co/api/jobs/", TIMEOUT_SECONDS: 10 * 60, // 10 minutes POLL_INTERVAL: 10000, // 10 seconds MAX_POLL_ATTEMPTS: 3 * 60, // 3*10 minutes total }, // Repository settings REPO: { URL: process.env.REPO_URL || "https://github.com/drbh/cleanplate", BRANCH: process.env.REPO_BRANCH || "main", }, // Cookie name for authentication COOKIE_NAME: "hugex_auth", // OAuth2 settings (HuggingFace) OAUTH2: { PROVIDER_URL: process.env.OPENID_PROVIDER_URL || "https://huggingface.co", CLIENT_ID: process.env.OPENID_CLIENT_ID, CLIENT_SECRET: process.env.OPENID_CLIENT_SECRET, CALLBACK_URL: process.env.OPENID_CALLBACK_URL || "http://localhost:3000/api/auth/callback", SCOPES: "openid profile jobs-api", ENABLED: !!(process.env.OPENID_CLIENT_ID && process.env.OPENID_CLIENT_SECRET) || process.env.NODE_ENV === "development", }, // GitHub OAuth2 settings GITHUB_OAUTH2: { CLIENT_ID: process.env.GITHUB_CLIENT_ID, CLIENT_SECRET: process.env.GITHUB_CLIENT_SECRET, CALLBACK_URL: process.env.GITHUB_CALLBACK_URL || "http://localhost:3000/api/auth/github/callback", SCOPES: "repo read:user user:email", ENABLED: !!( process.env.GITHUB_CLIENT_ID && process.env.GITHUB_CLIENT_SECRET ), }, // GitHub PAT settings (simplified) GITHUB: { OAUTH: { CLIENT_ID: process.env.GITHUB_CLIENT_ID, CLIENT_SECRET: process.env.GITHUB_CLIENT_SECRET, CALLBACK_URL: process.env.GITHUB_CALLBACK_URL || "http://localhost:3000/api/auth/github/callback", SCOPES: "repo read:user user:email", ENABLED: !!( process.env.GITHUB_CLIENT_ID && process.env.GITHUB_CLIENT_SECRET && process.env.GITHUB_CLIENT_ID !== "demo-client-id" ), }, PAT: { ENABLED: process.env.GITHUB_ALLOW_PAT !== "false", REQUIRED_SCOPES: ["repo"], }, // Development auto-connect DEV_TOKEN: process.env.GH_TOKEN || process.env.GITHUB_TOKEN, FEATURES: { ALLOW_PAT: process.env.NODE_ENV === "development" || process.env.GITHUB_ALLOW_PAT === "true", DEFAULT_METHOD: process.env.NODE_ENV === "development" ? "pat" : "oauth", SHOW_BOTH_OPTIONS: process.env.GITHUB_SHOW_BOTH_OPTIONS === "true", }, }, // Development convenience (simplified) DEVELOPMENT: { OPENAI_API_KEY: process.env.NODE_ENV === "development" ? process.env.OPENAI_API_KEY : null, HUGGINGFACE_TOKEN: process.env.NODE_ENV === "development" ? process.env.HUGGINGFACE_TOKEN || process.env.HF_TOKEN : null, }, }; // Helper function for GitHub auto-connect export function getGitHubDevToken() { if (process.env.NODE_ENV !== "development") { return null; } return serverConfig.GITHUB.DEV_TOKEN || null; } // Helper function to get GitHub auth configuration export function getGitHubAuthConfig() { const { GITHUB } = serverConfig; const devToken = getGitHubDevToken(); return { oauthAvailable: GITHUB.OAUTH.ENABLED, patAvailable: GITHUB.FEATURES.ALLOW_PAT, defaultMethod: GITHUB.FEATURES.DEFAULT_METHOD, showBothOptions: GITHUB.FEATURES.SHOW_BOTH_OPTIONS || (GITHUB.OAUTH.ENABLED && GITHUB.FEATURES.ALLOW_PAT), isDevelopment: process.env.NODE_ENV === "development", hasDevToken: !!devToken, devTokenSource: devToken ? process.env.GH_TOKEN ? "GH_TOKEN" : "GITHUB_TOKEN" : null, }; } export default serverConfig;