合并了远程分支 cb72262 的功能更新,同时保留了 ESLint 修复:
**冲突解决详情:**
1. AccountTableFilters.vue
- ✅ 保留 emit 模式修复(避免 vue/no-mutating-props 错误)
- ✅ 添加第三个筛选器 type(账户类型)
- ✅ 新增 antigravity 平台和 inactive 状态选项
2. UserBalanceModal.vue
- ✅ 保留 console.error 错误日志
- ✅ 添加输入验证(金额校验、余额不足检查)
- ✅ 使用 appStore.showError 向用户显示友好错误
3. AccountsView.vue
- ✅ 保留所有 console.error 错误日志(避免 no-empty 错误)
- ✅ 使用新 API:clearRateLimit 和 setSchedulable
4. UsageView.vue
- ✅ 添加 console.error 错误日志
- ✅ 添加图表功能(模型分布、使用趋势)
- ✅ 添加粒度选择(按天/按小时)
- ✅ 保留 XLSX 动态导入优化
**测试结果:**
- ✅ Go tests: PASS
- ✅ golangci-lint: 0 issues
- ✅ ESLint: 0 errors
- ✅ TypeScript: PASS
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
126 lines
5.8 KiB
Plaintext
126 lines
5.8 KiB
Plaintext
# =============================================================================
|
||
# Sub2API Docker Environment Configuration
|
||
# =============================================================================
|
||
# Copy this file to .env and modify as needed:
|
||
# cp .env.example .env
|
||
# nano .env
|
||
#
|
||
# Then start with: docker-compose up -d
|
||
# =============================================================================
|
||
|
||
# -----------------------------------------------------------------------------
|
||
# Server Configuration
|
||
# -----------------------------------------------------------------------------
|
||
# Bind address for host port mapping
|
||
BIND_HOST=0.0.0.0
|
||
|
||
# Server port (exposed on host)
|
||
SERVER_PORT=8080
|
||
|
||
# Server mode: release or debug
|
||
SERVER_MODE=release
|
||
|
||
# 运行模式: standard (默认) 或 simple (内部自用)
|
||
# standard: 完整 SaaS 功能,包含计费/余额校验;simple: 隐藏 SaaS 功能并跳过计费/余额校验
|
||
RUN_MODE=standard
|
||
|
||
# Timezone
|
||
TZ=Asia/Shanghai
|
||
|
||
# -----------------------------------------------------------------------------
|
||
# PostgreSQL Configuration (REQUIRED)
|
||
# -----------------------------------------------------------------------------
|
||
POSTGRES_USER=sub2api
|
||
POSTGRES_PASSWORD=change_this_secure_password
|
||
POSTGRES_DB=sub2api
|
||
|
||
# -----------------------------------------------------------------------------
|
||
# Redis Configuration
|
||
# -----------------------------------------------------------------------------
|
||
# Leave empty for no password (default for local development)
|
||
REDIS_PASSWORD=
|
||
REDIS_DB=0
|
||
|
||
# -----------------------------------------------------------------------------
|
||
# Admin Account
|
||
# -----------------------------------------------------------------------------
|
||
# Email for the admin account
|
||
ADMIN_EMAIL=admin@sub2api.local
|
||
|
||
# Password for admin account
|
||
# Leave empty to auto-generate (will be shown in logs on first run)
|
||
ADMIN_PASSWORD=
|
||
|
||
# -----------------------------------------------------------------------------
|
||
# JWT Configuration
|
||
# -----------------------------------------------------------------------------
|
||
# IMPORTANT: Set a fixed JWT_SECRET to prevent login sessions from being
|
||
# invalidated after container restarts. If left empty, a random secret will
|
||
# be generated on each startup, causing all users to be logged out.
|
||
# Generate a secure secret: openssl rand -hex 32
|
||
JWT_SECRET=
|
||
JWT_EXPIRE_HOUR=24
|
||
|
||
# -----------------------------------------------------------------------------
|
||
# Configuration File (Optional)
|
||
# -----------------------------------------------------------------------------
|
||
# Path to custom config file (relative to docker-compose.yml directory)
|
||
# Copy config.example.yaml to config.yaml and modify as needed
|
||
# Leave unset to use default ./config.yaml
|
||
#CONFIG_FILE=./config.yaml
|
||
|
||
# -----------------------------------------------------------------------------
|
||
# Security Configuration
|
||
# -----------------------------------------------------------------------------
|
||
# URL Allowlist Configuration
|
||
# 启用 URL 白名单验证(false 则跳过白名单检查,仅做基本格式校验)
|
||
SECURITY_URL_ALLOWLIST_ENABLED=false
|
||
|
||
# 关闭白名单时,是否允许 http:// URL(默认 false,只允许 https://)
|
||
# ⚠️ 警告:允许 HTTP 存在安全风险(明文传输),仅建议在开发/测试环境或可信内网中使用
|
||
# Allow insecure HTTP URLs when allowlist is disabled (default: false, requires https)
|
||
# ⚠️ WARNING: Allowing HTTP has security risks (plaintext transmission)
|
||
# Only recommended for dev/test environments or trusted networks
|
||
SECURITY_URL_ALLOWLIST_ALLOW_INSECURE_HTTP=true
|
||
|
||
# 是否允许本地/私有 IP 地址用于上游/定价/CRS(仅在可信网络中使用)
|
||
# Allow localhost/private IPs for upstream/pricing/CRS (use only in trusted networks)
|
||
SECURITY_URL_ALLOWLIST_ALLOW_PRIVATE_HOSTS=true
|
||
|
||
# -----------------------------------------------------------------------------
|
||
# Gemini OAuth (OPTIONAL, required only for Gemini OAuth accounts)
|
||
# -----------------------------------------------------------------------------
|
||
# Sub2API supports TWO Gemini OAuth modes:
|
||
#
|
||
# 1. Code Assist OAuth (需要 GCP project_id)
|
||
# - Uses: cloudcode-pa.googleapis.com (Code Assist API)
|
||
# - Auto scopes: cloud-platform + userinfo.email + userinfo.profile
|
||
# - OAuth Client: Can use built-in Gemini CLI client (留空即可)
|
||
# - Requires: Google Cloud Platform project with Code Assist enabled
|
||
#
|
||
# 2. AI Studio OAuth (不需要 project_id)
|
||
# - Uses: generativelanguage.googleapis.com (AI Studio API)
|
||
# - Default scopes: generative-language
|
||
# - OAuth Client: Requires your own OAuth 2.0 Client (内置 Gemini CLI client 不能申请 generative-language scope)
|
||
# - Requires: Create OAuth 2.0 Client in GCP Console + OAuth consent screen
|
||
# - Setup Guide: https://ai.google.dev/gemini-api/docs/oauth
|
||
# - ⚠️ IMPORTANT: OAuth Client 必须发布为正式版本 (Production)
|
||
# Testing 模式限制: 只能添加 100 个测试用户, refresh token 7 天后过期
|
||
# 发布步骤: GCP Console → OAuth consent screen → PUBLISH APP
|
||
#
|
||
# Configuration:
|
||
# Leave empty to use the built-in Gemini CLI OAuth client (Code Assist OAuth only).
|
||
# To enable AI Studio OAuth, set your own OAuth client ID/secret here.
|
||
GEMINI_OAUTH_CLIENT_ID=
|
||
GEMINI_OAUTH_CLIENT_SECRET=
|
||
# Optional; leave empty to auto-select scopes based on oauth_type
|
||
GEMINI_OAUTH_SCOPES=
|
||
|
||
# -----------------------------------------------------------------------------
|
||
# Gemini Quota Policy (OPTIONAL, local simulation)
|
||
# -----------------------------------------------------------------------------
|
||
# JSON overrides for local quota simulation (Code Assist only).
|
||
# Example:
|
||
# GEMINI_QUOTA_POLICY={"tiers":{"LEGACY":{"pro_rpd":50,"flash_rpd":1500,"cooldown_minutes":30},"PRO":{"pro_rpd":1500,"flash_rpd":4000,"cooldown_minutes":5},"ULTRA":{"pro_rpd":2000,"flash_rpd":0,"cooldown_minutes":5}}}
|
||
GEMINI_QUOTA_POLICY=
|