Generated from source at build time — this page cannot drift from the running service.

Configuration

Read once at boot by config/config.ts and injected as APP_CONFIG. 68 variables, of which two are hard requirements: INBOX_KEK (32 bytes as 64 hex characters, the key that encrypts every stored provider credential) and INBOX_REALTIME_JWT_SECRET (at least 32 characters). The service refuses to boot without them.

Nothing loads .env automatically. dotenv is a devDependency that is never imported. The start scripts pass --env-file ../../.env, and that file lives at the repo root, not in apps/service/. Running nest start without the flag dies with Missing required env var INBOX_KEK.

Stores are selected by environment, silently

common/persistence.ts uses Prisma only when INBOX_DATABASE_URL is set and the environment is not test; otherwise it falls back to in-memory stores. The same is true of Redis and the queues. This is convenient in development and dangerous in deployment: a service that boots cleanly but has lost its INBOX_DATABASE_URL will serve an empty, non-persistent estate rather than fail. Check GET /v1/health, which reports which backends are actually wired.

Two settings that must be slugs, never UUIDs

Accounts app ids differ per environment — axis-engage has a different UUID locally than on dev. INBOX_ACCOUNTS_APP_SLUG and INBOX_OPERATOR_APP_SLUG are matched by slug for exactly this reason. Hardcoding a UUID works in one environment and silently fails in the next.

INBOX_OPERATOR_APP_SLUG in particular is load-bearing: leave it unset and no user session can reach the operator surface at all, because isOperator becomes false for everyone.

Core

Accounts (identity)

Behaviour

Billing

Channel providers

File storage

Intelligence (AI)