-
Notifications
You must be signed in to change notification settings - Fork 54
Expand file tree
/
Copy path.env.example
More file actions
77 lines (66 loc) · 2.94 KB
/
Copy path.env.example
File metadata and controls
77 lines (66 loc) · 2.94 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
PORT=5000
NODE_ENV=development
STELLAR_NETWORK=testnet
# JWT — required outside NODE_ENV=test; the app refuses to start without it.
# Generate with: openssl rand -base64 48
JWT_SECRET=
JWT_ISSUER=learnault-api
JWT_AUDIENCE=learnault-clients
# Access-token lifetime in seconds (short-lived; refreshed via opaque token).
JWT_ACCESS_TTL_SECONDS=900
# Opaque refresh-token lifetime in seconds (default 30 days).
REFRESH_TOKEN_TTL_SECONDS=2592000
# Identifies which secret above is the active signing key.
JWT_KEY_ID=default
# Retired keys kept only so already-issued tokens keep verifying until they
# expire: "old-kid:old-secret,older-kid:older-secret"
JWT_PREVIOUS_KEYS=
# bcrypt cost factor for password hashes (10-15, default 12). Raising this
# upgrades new hashes immediately; existing hashes upgrade lazily on next login.
BCRYPT_SALT_ROUNDS=12
# Database Configuration (local / non-Docker development)
DATABASE_URL="postgresql://username:password@localhost:5432/learnault_db?schema=public"
# Docker Compose development stack (docker-compose.yml)
# The API/worker containers build their DATABASE_URL from these values and
# reach PostgreSQL at the `db` service host — no host networking needed.
POSTGRES_USER=learnault
POSTGRES_PASSWORD=learnault
POSTGRES_DB=learnault_dev
# Host ports exposed by the stack (change if 5432/6379/5000 are taken)
POSTGRES_PORT=5432
REDIS_PORT=6379
API_PORT=5000
# Redis is provisioned for upcoming queue-backed work; not yet consumed by the app
REDIS_URL=redis://localhost:6379
# Wallet-provisioning worker poll interval (ms)
WORKER_POLL_INTERVAL_MS=5000
SCHEDULER_INTERVAL_MS=15000
SCHEDULER_LEASE_MS=60000
SCHEDULER_SHUTDOWN_TIMEOUT_MS=30000
SCHEDULER_QUEUES=
SCHEDULER_DISABLED_QUEUES=
SCHEDULER_IN_PROCESS=false
# Logging Configuration
# LOG_LEVEL=info (options: error, warn, info, http, verbose, debug, silly)
# Graceful Shutdown Configuration
# Maximum time to wait for graceful shutdown before forcing exit (in milliseconds)
SHUTDOWN_TIMEOUT_MS=30000
# Stellar Funding Configuration
STELLAR_FUNDING_AMOUNT=10
STELLAR_FUNDING_MIN_BALANCE=1
STELLAR_FUNDING_MAX_RETRIES=5
# STELLAR_FUNDING_SOURCE_SECRET=S... (funding source account secret — set via secure env, never committed)
# Account Lifecycle Configuration
DELETION_COOLING_OFF_DAYS=30
EXPORT_TTL_DAYS=7
LIFECYCLE_SWEEP_INTERVAL_MS=0
# Phone OTP Configuration
# Only "mock" is implemented until a real carrier (Twilio, Termii, etc.) is integrated — see docs/decisions/0001-phone-otp-authentication.md
SMS_PROVIDER=mock
RATE_LIMIT_OTP_WINDOW_MS=900000
RATE_LIMIT_OTP_MAX=5
# Data Lifecycle / Audit Configuration — see docs/DATA_LIFECYCLE.md
# HMAC key for the source-IP hash on immutable audit events. Rotating it makes
# older hashes uncorrelatable with newer ones. If unset in production, audit
# events omit the IP hash rather than storing an unkeyed (reversible) digest.
# AUDIT_IP_HASH_SECRET=change-me-in-production