# ── ByteLyst Ecosystem Environment Variables ───────────────────── # Copy to .env.ecosystem and fill in real values. # Used by: docker compose -f docker-compose.ecosystem.yml --env-file .env.ecosystem up # ── Cosmos DB (local emulator) ─────────────────────────────────── COSMOS_ENDPOINT=http://cosmos-emulator:8081 # Cosmos emulator uses a well-known key. Copy it from: # https://learn.microsoft.com/en-us/azure/cosmos-db/emulator#authentication # It starts with: C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDu... COSMOS_KEY= COSMOS_DATABASE=bytelyst # ── Auth ───────────────────────────────────────────────────────── JWT_SECRET=change-me-ecosystem-jwt-secret-at-least-32-chars RATE_LIMIT_STORE_MODE=datastore # ── Azure Blob Storage (Azurite emulator) ──────────────────────── STORAGE_PROVIDER=azure # Azurite uses a well-known connection string. Copy it from: # https://learn.microsoft.com/en-us/azure/storage/common/storage-use-azurite#well-known-storage-account-and-key # Format: DefaultEndpointsProtocol=http;AccountName=devstoreaccount1;AccountKey=Eby8vdM02x...;BlobEndpoint=http://azurite:10000/devstoreaccount1; AZURE_BLOB_CONNECTION_STRING= AZURE_BLOB_ACCOUNT_NAME=devstoreaccount1 # Same well-known Azurite key (starts with: Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1...) AZURE_BLOB_ACCOUNT_KEY= AZURE_BLOB_PUBLIC_ENDPOINT=http://localhost:10000/devstoreaccount1 # ── Email (Mailpit sandbox) ────────────────────────────────────── EMAIL_PROVIDER=smtp EMAIL_FROM_ADDRESS=noreply@bytelyst.local EMAIL_FROM_NAME=ByteLyst SMTP_HOST=mailpit SMTP_PORT=1025 SMTP_SECURE=false SMTP_USER= SMTP_PASSWORD= # ── Stripe (test keys — replace with your own) ────────────────── STRIPE_SECRET_KEY=sk_test_REPLACE_ME STRIPE_WEBHOOK_SECRET=whsec_REPLACE_ME STRIPE_PRICE_PRO=price_REPLACE_ME STRIPE_PRICE_ENTERPRISE=price_REPLACE_ME # ── Extraction Service ─────────────────────────────────────────── PYTHON_SIDECAR_URL=http://localhost:4006 DEFAULT_MODEL_ID=gemini-2.5-flash GEMINI_API_KEY=REPLACE_ME EXTRACTION_QUEUE_BACKEND=file EXTRACTION_QUEUE_FILE=.data/extraction-jobs.json # ── Cross-service URLs (resolved via Docker service names) ─────── PLATFORM_SERVICE_URL=http://platform-service:4003 EXTRACTION_SERVICE_URL=http://extraction-service:4005 MCP_SERVER_URL=http://mcp-server:4007 # ── Datastore provider ─────────────────────────────────────────── # Use 'cosmos' for emulator, 'memory' for in-memory (tests) DB_PROVIDER=cosmos # ── Telemetry ──────────────────────────────────────────────────── TELEMETRY_ENABLED=true # ── Event Bus ──────────────────────────────────────────────────── EVENT_BUS_BACKEND=file EVENT_BUS_FILE=.data/platform-events.json # ── Field Encryption ───────────────────────────────────────────── FIELD_ENCRYPT_KEY_PROVIDER=memory # ── Product Identity ───────────────────────────────────────────── DEFAULT_PRODUCT_ID=lysnrai # ── Runtime environment ───────────────────────────────────────── NODE_ENV=production # ── CORS (allow all origins for dev/test — restrict in production) ── CORS_ORIGIN=* # ── Webhooks (optional) ───────────────────────────────────────── WEBHOOK_INVITATION_REDEEMED_URL= WEBHOOK_REFERRAL_STATUS_URL= WEBHOOK_WAITLIST_JOINED_URL= # ── Notification channels (optional) ──────────────────────────── TELEGRAM_BOT_TOKEN= TELEGRAM_DEFAULT_CHAT_ID= SLACK_WEBHOOK_URL= SLACK_DEFAULT_CHANNEL=