import path from 'node:path'; import { CODEXMOBILE_TLS_DIR, CODEXMOBILE_UPLOAD_ROOT, ROOT_DIR, SERVER_DIR, statePath } from './runtime-paths.js'; export const __dirname = SERVER_DIR; export const CLIENT_DIST = path.join(ROOT_DIR, 'client', 'dist'); export const UPLOAD_ROOT = CODEXMOBILE_UPLOAD_ROOT; export const IMAGE_PROMPT_STATE = statePath('image-prompts.json'); export const FEISHU_AUTH_STATE = statePath('feishu-auth.json'); export const PORT = Number(process.env.PORT || 3321); export const HOST = process.env.HOST || '0.0.0.0'; export const HTTPS_PORT = Number(process.env.HTTPS_PORT || 3443); export const HTTPS_PFX_PATH = process.env.HTTPS_PFX_PATH || path.join(CODEXMOBILE_TLS_DIR, 'server.pfx'); export const HTTPS_ROOT_CA_PATH = process.env.HTTPS_ROOT_CA_PATH || path.join(CODEXMOBILE_TLS_DIR, 'codexmobile-root-ca.cer'); export const HTTPS_PFX_PASSPHRASE = process.env.HTTPS_PFX_PASSPHRASE || 'codexmobile-local-https'; export const PUBLIC_URL = process.env.CODEXMOBILE_PUBLIC_URL || ''; export const FEISHU_APP_ID = String(process.env.CODEXMOBILE_FEISHU_APP_ID || '').trim(); export const FEISHU_APP_SECRET = String(process.env.CODEXMOBILE_FEISHU_APP_SECRET || '').trim(); export const FEISHU_REDIRECT_URI = String(process.env.CODEXMOBILE_FEISHU_REDIRECT_URI || '').trim(); export const FEISHU_DOCS_HOME_URL = process.env.CODEXMOBILE_FEISHU_DOCS_URL || 'https://docs.feishu.cn/'; export const MAX_JSON_BYTES = 2 * 1024 * 1024; export const MAX_UPLOAD_BYTES = 50 * 1024 * 1024; export const MAX_VOICE_BYTES = 10 * 1024 * 1024; export const DEFAULT_REASONING_EFFORT = 'xhigh'; export const FEISHU_AUTH_STATE_MAX_AGE_MS = 15 * 60 * 1000; export const mimeTypes = new Map([ ['.html', 'text/html; charset=utf-8'], ['.js', 'text/javascript; charset=utf-8'], ['.css', 'text/css; charset=utf-8'], ['.json', 'application/json; charset=utf-8'], ['.webmanifest', 'application/manifest+json; charset=utf-8'], ['.cer', 'application/x-x509-ca-cert'], ['.svg', 'image/svg+xml'], ['.png', 'image/png'], ['.jpg', 'image/jpeg'], ['.jpeg', 'image/jpeg'], ['.webp', 'image/webp'], ['.ico', 'image/x-icon'] ]); export const compressibleExtensions = new Set([ '.html', '.js', '.css', '.json', '.webmanifest', '.svg' ]);