# DS2API environment template (Go runtime) # Copy this file to .env and adjust values. # Updated: 2026-02 # --------------------------------------------------------------- # Runtime # --------------------------------------------------------------- # HTTP listen port (default: 5001) PORT=5001 # Log level: DEBUG | INFO | WARN | ERROR LOG_LEVEL=INFO # Max concurrent inflight requests per account in managed-key mode. # Default: 2 # Recommended client concurrency is calculated dynamically as: # account_count * DS2API_ACCOUNT_MAX_INFLIGHT # So by default it is account_count * 2. # Requests beyond inflight slots enter a waiting queue first. # Default queue size equals recommended concurrency, so 429 starts after: # account_count * DS2API_ACCOUNT_MAX_INFLIGHT * 2 # Alias: DS2API_ACCOUNT_CONCURRENCY # DS2API_ACCOUNT_MAX_INFLIGHT=2 # Optional waiting queue size override for managed-key mode. # Default: recommended_concurrency (same as account_count * inflight_limit) # Alias: DS2API_ACCOUNT_QUEUE_SIZE # DS2API_ACCOUNT_MAX_QUEUE=10 # --------------------------------------------------------------- # Admin auth # --------------------------------------------------------------- # Admin key for /admin login and protected admin APIs. # Default is "admin" when unset, but setting it explicitly is recommended. DS2API_ADMIN_KEY=admin # Optional JWT signing secret for admin token. # Defaults to DS2API_ADMIN_KEY when unset. # DS2API_JWT_SECRET=change-me # Optional admin JWT validity in hours (default: 24) # DS2API_JWT_EXPIRE_HOURS=24 # --------------------------------------------------------------- # Config source (choose one) # --------------------------------------------------------------- # Option A: config file path (local/dev recommended) # DS2API_CONFIG_PATH=config.json # Option B: JSON string # DS2API_CONFIG_JSON={"keys":["your-api-key"],"accounts":[{"email":"user@example.com","password":"xxx","token":""}]} # Option C: Base64 encoded JSON (recommended for Vercel env var) # DS2API_CONFIG_JSON=eyJrZXlzIjpbInlvdXItYXBpLWtleSJdLCJhY2NvdW50cyI6W3siZW1haWwiOiJ1c2VyQGV4YW1wbGUuY29tIiwicGFzc3dvcmQiOiJ4eHgiLCJ0b2tlbiI6IiJ9XX0= # # Generate from local config.json: # DS2API_CONFIG_JSON="$(base64 < config.json | tr -d '\n')" # --------------------------------------------------------------- # Paths (optional) # --------------------------------------------------------------- # WASM file used for PoW solving # DS2API_WASM_PATH=sha3_wasm_bg.7b9ca65ddd.wasm # Built admin static assets directory # DS2API_STATIC_ADMIN_DIR=static/admin # Auto-build WebUI on startup when static/admin is missing. # Default: enabled on local/Docker, disabled on Vercel. # DS2API_AUTO_BUILD_WEBUI=true # Internal auth secret used by the Vercel hybrid streaming path # (Go prepare endpoint <-> Node stream function). # Optional: falls back to DS2API_ADMIN_KEY when unset. # DS2API_VERCEL_INTERNAL_SECRET=change-me # Stream lease TTL seconds for Vercel hybrid streaming. # During this window, the managed account stays occupied until Node calls release. # Default: 900 (15 minutes) # DS2API_VERCEL_STREAM_LEASE_TTL_SECONDS=900 # --------------------------------------------------------------- # Vercel sync integration (optional) # --------------------------------------------------------------- # VERCEL_TOKEN=your-vercel-token # VERCEL_PROJECT_ID=prj_xxxxxxxxxxxx # VERCEL_TEAM_ID=team_xxxxxxxxxxxx # Optional: Vercel deployment protection bypass secret. # If deployment protection is enabled, DS2API will use this value as # x-vercel-protection-bypass for internal Node->Go calls on Vercel. # You can also use VERCEL_AUTOMATION_BYPASS_SECRET directly. # DS2API_VERCEL_PROTECTION_BYPASS=your-bypass-secret