mirror of
https://github.com/warmbly/warmbly.git
synced 2026-08-23 00:00:26 +00:00
87f9bf58b0
Add passkey enrollment and login wiring, including a Safari-safe explicit login path that prefetches the WebAuthn challenge before the click and calls the credential ceremony immediately from the user gesture.
110 lines
3.5 KiB
Plaintext
110 lines
3.5 KiB
Plaintext
# ============================================
|
|
# Warmbly Environment Variables Reference
|
|
# ============================================
|
|
# This file documents all environment variables.
|
|
#
|
|
# Configuration Priority Order:
|
|
# 1. Environment variables (direct)
|
|
# 2. AWS SSM/Secrets Manager (if AWS_CONFIG_ENABLED=true)
|
|
#
|
|
# In production with Kubernetes:
|
|
# - ConfigMaps provide non-sensitive env vars
|
|
# - External Secrets Operator syncs secrets from AWS
|
|
# ============================================
|
|
|
|
# === General ===
|
|
APP_ENV=dev # dev | prod
|
|
AWS_CONFIG_ENABLED=false # Set to "true" to enable AWS SSM/Secrets fallback
|
|
|
|
# === AWS (only needed when AWS_CONFIG_ENABLED=true or using AWS services) ===
|
|
AWS_REGION=us-east-1
|
|
AWS_ACCESS_KEY_ID= # Only for local dev
|
|
AWS_SECRET_ACCESS_KEY= # Only for local dev
|
|
|
|
# === Database ===
|
|
PRIMARY_DB=postgres://user:pass@localhost:5432/warmbly_dev
|
|
REDIS=redis://localhost:6379
|
|
|
|
# === Cassandra/Astra ===
|
|
ASTRA_DB_ID=your-db-id
|
|
ASTRA_DB_REGION=us-east-1
|
|
ASTRA_KEYSPACE_NAME=warmbly
|
|
ASTRA_APPLICATION_TOKEN=your-token
|
|
|
|
# === Kafka ===
|
|
KAFKA_BOOTSTRAP_SERVERS=localhost:9092
|
|
KAFKA_SASL_USERNAME= # Optional - leave empty for local dev
|
|
KAFKA_SASL_PASSWORD= # Optional - leave empty for local dev
|
|
KAFKA_CONSUMER_GROUP=consumer-group
|
|
KAFKA_TRACKING_TOPIC=tracking-events
|
|
|
|
# === Schema Registry ===
|
|
SCHEMA_REGISTRY_URL=http://localhost:8081
|
|
SCHEMA_REGISTRY_KEY= # Optional - leave empty for local dev
|
|
SCHEMA_REGISTRY_SECRET= # Optional - leave empty for local dev
|
|
|
|
# === Backend API ===
|
|
API_HOST=0.0.0.0:8080
|
|
API_PORT=8080
|
|
GIN_MODE=debug # debug | release
|
|
WEBSOCKET_URL=ws://localhost:4000/socket
|
|
GEODB_PATH=/path/to/GeoLite2-City.mmdb
|
|
|
|
# === Auth ===
|
|
AUTH_SECRET=your-auth-secret-minimum-32-characters
|
|
GOOGLE_CLIENT_ID=
|
|
GOOGLE_CLIENT_SECRET=
|
|
GOOGLE_REDIRECT_URI=http://localhost:3000/auth/google/callback
|
|
APPLE_APP_ID=
|
|
APPLE_TEAM_ID=
|
|
APPLE_KEY_ID=
|
|
APPLE_KEY_SECRET=
|
|
TURNSTILE_SECRET=
|
|
|
|
# Passkeys (WebAuthn). Optional — derived from APP_URL / CORS_ALLOW_ORIGINS
|
|
# when unset (localhost in dev). Override for self-hosting. Changing the RP
|
|
# ID invalidates every enrolled passkey, so keep it stable per deployment.
|
|
# WEBAUTHN_RP_ID=app.warmbly.com
|
|
# WEBAUTHN_RP_ORIGINS=https://app.warmbly.com
|
|
# WEBAUTHN_RP_DISPLAY_NAME=Warmbly
|
|
|
|
# === Stripe ===
|
|
STRIPE_SECRET_KEY=sk_test_...
|
|
STRIPE_WEBHOOK_SECRET=whsec_...
|
|
STRIPE_PUBLISHABLE_KEY=pk_test_...
|
|
|
|
# === Email ===
|
|
EMAIL_NAME=Warmbly
|
|
EMAIL_ADDRESS=notifications@warmbly.com
|
|
TRACKING_DOMAIN=track.warmbly.com
|
|
|
|
# === Tracking Service ===
|
|
TRACKING_HOST=0.0.0.0
|
|
TRACKING_PORT=3000
|
|
|
|
# === Realtime Service (Elixir/Phoenix) ===
|
|
PHX_HOST=localhost
|
|
PORT=4000
|
|
JWT_SECRET=your-64-char-minimum-jwt-secret-for-websocket-authentication
|
|
SECRET_KEY_BASE=your-64-char-minimum-phoenix-secret-key-base
|
|
DATABASE_URL=postgres://user:pass@localhost:5432/warmbly_dev
|
|
DATABASE_POOL_SIZE=10
|
|
REDIS_URL=redis://localhost:6379
|
|
PUBSUB_ENABLED=false
|
|
CHECK_ORIGIN=false
|
|
MAX_CONNECTIONS_PER_USER=10
|
|
MAX_CONNECTIONS_PER_IP=50
|
|
MAX_CONNECTIONS_GLOBAL=100000
|
|
RATE_LIMIT_WS_MESSAGE=120
|
|
RATE_LIMIT_WS_JOIN=30
|
|
RATE_LIMIT_WS_EVENT=60
|
|
|
|
# === GCP ===
|
|
GCP_PROJECT_ID=your-gcp-project # Optional - for Pub/Sub
|
|
GOOGLE_APPLICATION_CREDENTIALS_JSON= # JSON string - for GCP auth
|
|
|
|
# === Observability ===
|
|
SENTRY_DSN= # Optional
|
|
SENTRY_DSN_API= # Optional - separate DSN for API
|
|
LOG_DISCORD_WEBHOOK_URL= # Optional
|