# ── Vault (AppRole) ──────────────────────────────────────────────── VAULT_ADDR= VAULT_ROLE_ID= VAULT_SECRET_ID= VAULT_MOUNT_POINT=dev-secrets VAULT_SECRET_PATH=database VAULT_JWT_KID_PATH=jwt/kid VAULT_JWT_KIDS_PREFIX=jwt/kids # CSRF загружается если указан путь (оставь пустым чтобы отключить CSRF) VAULT_CSRF_PATH=csrf # Crypto master-key для шифрования мнемоник юзеров (AES-256-GCM). # В Vault лежит hex-строка длиной 64 (32 байта). # Положить: vault kv put dev-secrets/crypto/master key=$(openssl rand -hex 32) VAULT_CRYPTO_KEY_PATH=crypto/master # ── JWT (внешний bitok issuer) ───────────────────────────────────── # bitok-сервис подписывает JWT своим приватником, public key регистрируется # в Vault под kid'ом (см. VAULT_JWT_KIDS_PREFIX). # Allowed alg: RS256 / RS384 / RS512 / ES256 / ES384 / ES512 / EdDSA / PS256 / PS384 / PS512 JWT_ALGORITHM=RS256 JWT_ISSUER=bitok JWT_AUDIENCE=elcsa # ── Server ───────────────────────────────────────────────────────── API_PORT=3001 LOG_LEVEL=INFO # ── KeyDB / Redis (idempotency cache) ────────────────────────────── # REDIS_PASSWORD also used by docker-compose to seed KeyDB --requirepass. REDIS_HOST=keydb REDIS_PORT=6379 REDIS_PASSWORD= REDIS_DB=0 # ── CORS ──────────────────────────────────────────────────────────── # Comma-separated list of allowed origins, OR "*" для wildcard (dev/staging). # ПУСТО = no cross-origin (fail-secure). # Wildcard incompatible с CORS_ALLOW_CREDENTIALS=true (browser spec — credentials force=false). # Production: явный whitelist для security (XSS на любом сайте не сможет дёрнуть API). # Whitelist: CORS_ORIGINS=https://app.example.com,https://www.example.com # Wildcard: CORS_ORIGINS=* CORS_ORIGINS= CORS_ALLOW_CREDENTIALS=true # ── External API keys (optional, fallback если Vault их не выдаёт) ─ RELAY_API_KEY= TRON_API_KEY= JUPITER_API_KEY= JUPITER_REFERRAL_ACCOUNT= JUPITER_FEE_BPS=70 # ── Block explorers (optional, для tx history) ───────────────────── ETHERSCAN_API_KEY= BSCSCAN_API_KEY= # ── Price oracle (optional) ───────────────────────────────────────── # CoinGecko Demo API key. Без ключа работает free tier (~10-30 req/min). # Если задан → передаётся через header `x-cg-demo-api-key`. # Используется в /api/wallets/{chain}/balance (для usdPrice/usdValue) # и /api/prices?symbols=... KeyDB cache: 5 минут. COINGECKO_API_KEY= # ── Outbound proxy для swap + bridge (optional) ───────────────────── # Если задан — все calls к Jupiter / Relay / EVM RPC / Solana RPC / TronGrid # из swap-orchestrator (custodial /wallets/{chain}/swap), relay-proxy # (/api/relay/*), sign-raw-evm-tx, sign-and-broadcast-tx идут через # этот HTTP proxy (squid-style). Read-only endpoints (/balance, # /transactions, /send, /prices) идут direct. # Format: http://[user:pass@]host:port (HTTPS proxy: https:// prefix) OUTBOUND_PROXY_URL= # ── DB fallback (если Vault недоступен при старте) ───────────────── DB_HOST= DB_PORT=5432 DB_USER= DB_PASSWORD= DB_NAME=