# eSIM工具环境配置 # 服务器配置 NODE_ENV=development PORT=3000 # API配置 GIFFGAFF_API_BASE=https://id.giffgaff.com GIFFGAFF_PUBLIC_API_BASE=https://publicapi.giffgaff.com SIMYO_API_BASE=https://appapi.simyo.nl # 日志配置 LOG_LEVEL=info # CORS配置 # 通用允许来源(本地 server.js 使用);Netlify Functions 使用 ALLOWED_ORIGIN 环境变量 CORS_ORIGIN=* ALLOWED_ORIGIN=https://esim.cosr.eu.org # 验证码配置(turnstile | recaptcha | off) CAPTCHA_PROVIDER=turnstile # Cloudflare Turnstile 配置 TURNSTILE_SITE_KEY= TURNSTILE_SECRET_KEY= # 设为 false 可在紧急情况下跳过 BFF Turnstile 校验(默认 true) TURNSTILE_ENFORCE=true # Google reCAPTCHA v2 配置(CAPTCHA_PROVIDER=recaptcha 时必填) RECAPTCHA_SITE_KEY= RECAPTCHA_SECRET_KEY= # 受保护函数访问密钥(仅允许通过 Header x-esim-key 或 x-app-key 传递) # ⚠️ 必填:Server 与 Functions/BFF 共享的访问密钥 # 🔐 生成强随机密钥: openssl rand -hex 32 # ❌ 禁止使用默认值或简单密码 ACCESS_KEY= # Simyo 代理客户端令牌 # ⚠️ 启用 Simyo 代理时必填;server.js 不再提供默认回退 SIMYO_CLIENT_TOKEN= # 可选:固定 X-Device-ID(UUID;未设则进程内自动生成) # SIMYO_DEVICE_ID= # 可选:覆盖默认客户端身份(默认见 client-identity.js) # SIMYO_CLIENT_VERSION=4.28.0 # SIMYO_CLIENT_PLATFORM=ios # SIMYO_IOS_VERSION=18.2 # SIMYO_DEVICE_MODEL=iPhone12,8 # SIMYO_USER_AGENT=MijnSimyoFT/4.28.0 (iOS 18.2; iPhone12,8) # Giffgaff OAuth token exchange 回调 URI # 注意:该变量只影响服务端 token exchange;前端授权跳转 URI 仍在 src/giffgaff/js/modules/api-config.js 中配置。 GIFFGAFF_REDIRECT_URI=giffgaff://auth/callback/ # 可选:自定义API超时时间(毫秒) API_TIMEOUT=30000 # Sentry 错误监控配置 # 🔗 前往 https://sentry.io 创建项目获取 DSN SENTRY_DSN= # 环境标识(production, staging, development) SENTRY_ENVIRONMENT=production # 版本标识(可选,留空则自动使用 Netlify COMMIT_REF 或 package.json 版本) # 格式示例:esim-tools@1.0.0 或 esim-tools@abc1234 # Netlify 部署时会自动读取 COMMIT_REF 生成短哈希版本,无需手动配置 SENTRY_RELEASE= # Sentry Source Maps 上传配置(可选,用于生产环境错误堆栈映射) # 🔗 获取 Auth Token: https://sentry.io/settings/auth-tokens/ # 需要权限: project:releases, org:read SENTRY_AUTH_TOKEN= # 组织 slug(从 Sentry 项目 URL 获取: https://sentry.io/organizations/[ORG_SLUG]/...) SENTRY_ORG= # 项目 slug(从 Sentry 项目设置获取) SENTRY_PROJECT=