1 line
10 KiB
JSON
1 line
10 KiB
JSON
{"repo": "betsey77/77hk", "files": {".env.example": {"a86a40fdd3ad65dfc106ea38d6a3efd510464810": {"t": 1785745174.4909127, "n": 3095, "h": "ba481459a848e830", "c": "# ============================================================\n# 77港话通社媒文案器 — 环境变量契约(全部留空)\n# 复制为 .env / server/.env / client/.env 后按需填写。\n# 本文件不得包含真实密钥、token、私钥或项目 URL 中的 secret。\n# ============================================================\n\n# ── Model / generation engines ───────────────────────────────\n# Self-hosted Cantonese 4B model (PRIMARY — local dev only)\nCANTONESE_API_URL=\nCANTONESE_API_KEY=\n\n# Featherless.ai API Key (PRIMARY cloud option)\nFEATHERLESS_API_KEY=\n\n# DeepSeek API Key (FALLBACK + AUDIT)\nDEEPSEEK_API_KEY=\nDEEPSEEK_MODEL=\n\n# HuggingFace (optional CantoneseLLMChat)\nHF_API_KEY=\nHF_MODEL=\n\n# OpenRouter (optional Qwen Cantonese enhancement)\nOPENROUTER_API_KEY=\n\n# ── Optional integrations ────────────────────────────────────\n# YouTube Data API v3 (HK trending + search)\nYOUTUBE_API_KEY=\n\n# Meta Access Token (competitor ad search fallback)\nMETA_ACCESS_TOKEN=\n\n# HTTP(S) proxy for blocked outbound APIs (optional)\nHTTPS_PROXY=\nHTTP_PROXY=\nhttps_proxy=\nhttp_proxy=\n\n# ── Supabase Auth + DB (Slice B+) ────────────────────────────\n# Browser-visible (client). Never put service/secret keys here.\nVITE_SUPABASE_URL=\nVITE_SUPABASE_PUBLISHABLE_KEY=\n\n# Optional client API base when frontend/backend are on different origins.\n# Example shape only (leave empty locally): https://your-api-host.example\n# Do not put secrets, private keys, or service-role tokens in any VITE_ variable.\nVITE_API_BASE_URL=\n\n# Server-side Supabase\nSUPABASE_URL=\nSUPABASE_PUBLISHABLE_KEY=\n\n# Trusted secret for BFF: quota ledger, job transitions, payments.\n# NEVER expose via VITE_ prefix, client bundle, logs, or evidence.\nSUPABASE_SECRET_KEY=\n# Optional file pointer (raw value or SUPABASE_SECRET_KEY=... line).\n# Direct SUPABASE_SECRET_KEY wins over file.\nSUPABASE_SECRET_KEY_FILE=\n\n# ── Server ───────────────────────────────────────────────────\nPORT=\n\n# Comma-separated exact browser Origins allowed by CORS.\n# Empty → local defaults only: http://localhost:5173, http://127.0.0.1:5173\n# Production/Preview must list the real frontend origin(s). No *.vercel.app wildcard.\n# Server-to-server / Alipay notify (no Origin header) remain allowed.\nALLOWED_ORIGINS=\n\n# ── Server酱 Turbo (Slice H1 feedback notify, best-effort) ───\nSERVERCHAN_SENDKEY=\nSERVERCHAN_SENDKEY_FILE=\n\n# ── Payment (Slice E / F1) ───────────────────────────────────\n# mock (default) | alipay_sandbox\n# \"production\" remains forbidden until a separate production adapter\n# and user authorization exist.\nPAYMENT_MODE=\n\n# Alipay sandbox credentials (required only when PAYMENT_MODE=alipay_sandbox)\nALIPAY_APP_ID=\nALIPAY_SELLER_ID=\n\n# Prefer file pointers over inline PEM values in shell history.\nALIPAY_PRIVATE_KEY=\nALIPAY_PRIVATE_KEY_FILE=\nALIPAY_PUBLIC_KEY=\nALIPAY_PUBLIC_KEY_FILE=\n\n# Split hosting: frontend origin for return URL, API origin for notify URL.\n# Example shapes only — leave empty for local 5173/3001 fallbacks.\nAPP_FRONTEND_URL=\nAPP_API_URL=\n\n# Legacy single public URL used as fallback for both return and notify.\nAPP_PUBLIC_URL=\n\n# Explicit full URL overrides (highest priority)\nALIPAY_RETURN_URL=\nALIPAY_NOTIFY_URL=\n"}, "3e37e46295a1070f5f00f0d201cff4ac268a36d6": {"t": 1785748401.5681543, "n": 3095, "h": "ba481459a848e830", "c": "# ============================================================\n# 77港话通社媒文案器 — 环境变量契约(全部留空)\n# 复制为 .env / server/.env / client/.env 后按需填写。\n# 本文件不得包含真实密钥、token、私钥或项目 URL 中的 secret。\n# ============================================================\n\n# ── Model / generation engines ───────────────────────────────\n# Self-hosted Cantonese 4B model (PRIMARY — local dev only)\nCANTONESE_API_URL=\nCANTONESE_API_KEY=\n\n# Featherless.ai API Key (PRIMARY cloud option)\nFEATHERLESS_API_KEY=\n\n# DeepSeek API Key (FALLBACK + AUDIT)\nDEEPSEEK_API_KEY=\nDEEPSEEK_MODEL=\n\n# HuggingFace (optional CantoneseLLMChat)\nHF_API_KEY=\nHF_MODEL=\n\n# OpenRouter (optional Qwen Cantonese enhancement)\nOPENROUTER_API_KEY=\n\n# ── Optional integrations ────────────────────────────────────\n# YouTube Data API v3 (HK trending + search)\nYOUTUBE_API_KEY=\n\n# Meta Access Token (competitor ad search fallback)\nMETA_ACCESS_TOKEN=\n\n# HTTP(S) proxy for blocked outbound APIs (optional)\nHTTPS_PROXY=\nHTTP_PROXY=\nhttps_proxy=\nhttp_proxy=\n\n# ── Supabase Auth + DB (Slice B+) ────────────────────────────\n# Browser-visible (client). Never put service/secret keys here.\nVITE_SUPABASE_URL=\nVITE_SUPABASE_PUBLISHABLE_KEY=\n\n# Optional client API base when frontend/backend are on different origins.\n# Example shape only (leave empty locally): https://your-api-host.example\n# Do not put secrets, private keys, or service-role tokens in any VITE_ variable.\nVITE_API_BASE_URL=\n\n# Server-side Supabase\nSUPABASE_URL=\nSUPABASE_PUBLISHABLE_KEY=\n\n# Trusted secret for BFF: quota ledger, job transitions, payments.\n# NEVER expose via VITE_ prefix, client bundle, logs, or evidence.\nSUPABASE_SECRET_KEY=\n# Optional file pointer (raw value or SUPABASE_SECRET_KEY=... line).\n# Direct SUPABASE_SECRET_KEY wins over file.\nSUPABASE_SECRET_KEY_FILE=\n\n# ── Server ───────────────────────────────────────────────────\nPORT=\n\n# Comma-separated exact browser Origins allowed by CORS.\n# Empty → local defaults only: http://localhost:5173, http://127.0.0.1:5173\n# Production/Preview must list the real frontend origin(s). No *.vercel.app wildcard.\n# Server-to-server / Alipay notify (no Origin header) remain allowed.\nALLOWED_ORIGINS=\n\n# ── Server酱 Turbo (Slice H1 feedback notify, best-effort) ───\nSERVERCHAN_SENDKEY=\nSERVERCHAN_SENDKEY_FILE=\n\n# ── Payment (Slice E / F1) ───────────────────────────────────\n# mock (default) | alipay_sandbox\n# \"production\" remains forbidden until a separate production adapter\n# and user authorization exist.\nPAYMENT_MODE=\n\n# Alipay sandbox credentials (required only when PAYMENT_MODE=alipay_sandbox)\nALIPAY_APP_ID=\nALIPAY_SELLER_ID=\n\n# Prefer file pointers over inline PEM values in shell history.\nALIPAY_PRIVATE_KEY=\nALIPAY_PRIVATE_KEY_FILE=\nALIPAY_PUBLIC_KEY=\nALIPAY_PUBLIC_KEY_FILE=\n\n# Split hosting: frontend origin for return URL, API origin for notify URL.\n# Example shapes only — leave empty for local 5173/3001 fallbacks.\nAPP_FRONTEND_URL=\nAPP_API_URL=\n\n# Legacy single public URL used as fallback for both return and notify.\nAPP_PUBLIC_URL=\n\n# Explicit full URL overrides (highest priority)\nALIPAY_RETURN_URL=\nALIPAY_NOTIFY_URL=\n"}, "857a5ff313a36e220e8f909e0a842b508ce6483c": {"t": 1785748402.8222327, "n": 2682, "h": "40a00e26d70556fd", "c": "# Self-hosted Cantonese 4B model (PRIMARY — local dev only)\n# Start the model API: python server_4b_api.py\n# Set this to the model server URL (typically http://localhost:8000)\n# Leave empty for production (Netlify) — DeepSeek will be the primary engine\nCANTONESE_API_URL=\n\n# Featherless.ai API Key (PRIMARY cloud option — CantoneseLLMChat-v1.0-32B)\n# Without CANTONESE_API_URL or this, the app falls back to DeepSeek.\n# Get one at https://featherless.ai\nFEATHERLESS_API_KEY=\n\n# DeepSeek API Key (FALLBACK + AUDIT — used for audit scoring and as fallback generator)\nDEEPSEEK_API_KEY=\n\n# HuggingFace API Key (optional, for CantoneseLLMChat — currently blocked in this environment)\nHF_API_KEY=\n\n# OpenRouter API Key (optional, for Qwen 3.5 Cantonese enhancement)\n# Get one at https://openrouter.ai/keys\nOPENROUTER_API_KEY=\n\n# YouTube Data API v3 (optional, for HK trending + search)\n# Without this, YouTube services return empty arrays gracefully.\n# Get one at https://console.cloud.google.com/ → YouTube Data API v3\nYOUTUBE_API_KEY=\n\n# Meta Access Token (optional, for competitor ad search fallback)\n# Without this, competitor search falls back to Python script only.\n# Get one at https://developers.facebook.com/\nMETA_ACCESS_TOKEN=\n\n# ============================================================\n# Supabase (Slice B+)\n# Get these from: Supabase Dashboard > Project Settings > API\n# ============================================================\n# SUPABASE_URL=https://<your-project-id>.supabase.co\n# SUPABASE_PUBLISHABLE_KEY=sb_publishable_...\n# VITE_SUPABASE_URL=https://<your-project-id>.supabase.co\n# VITE_SUPABASE_PUBLISHABLE_KEY=sb_publishable_...\n\n# ============================================================\n# Server-side trusted secret (Slice C2a+)\n# Required for trusted BFF operations: quota ledger, job state transitions.\n# NEVER expose this key in client code or VITE_ prefixed env vars.\n# ============================================================\n# SUPABASE_SECRET_KEY=sb_secret_...\n# Optional alternative for local/server environments that keep the secret in a\n# separate file. The file may contain either the raw value or one line in the\n# form SUPABASE_SECRET_KEY=sb_secret_.... Direct SUPABASE_SECRET_KEY wins.\n# SUPABASE_SECRET_KEY_FILE=D:\\path\\to\\SUPABASE_SECRET_KEY.txt\n\n# ============================================================\n# Server酱 Turbo — 微信通知(Slice H1: 管理员反馈通知)\n# 支持直接 SERVERCHAN_SENDKEY=SCU... 或文件指针\n# 文件内容格式:raw key 或 SERVERCHAN_SENDKEY=SCU...\n# 通知是 best-effort:反馈先持久化,通知失败不丢失反馈\n# ============================================================\n# SERVERCHAN_SENDKEY=SCU...\n# SERVERCHAN_SENDKEY_FILE=D:\\path\\to\\sendkey.txt\n\n# Server port\nPORT=3001\n"}}}} |