Files
HiveGrid-Wireframes/hivegrid-cloud/docs/configuration.md
T

115 lines
4.8 KiB
Markdown

# Configuration
This project keeps runtime configuration explicit and treats secret diagnostics
as a
public surface. Application code should receive configuration through typed
loaders, provider options, or handler dependencies instead of reading
`process.env` inside package internals.
## Explicit environment access
Only runtime entrypoints should read from `process.env`. Worker-owned
environment reads are limited to the worker runtime and health entrypoints.
Those entrypoints immediately validate values and convert them into explicit
dependencies for queues, Mailjet, browser runtime integrations, and
handlers.
Package adapters must accept an environment object or concrete provider options
from their caller. This keeps hidden environment coupling out of packages such
as `packages/mail` and `packages/queue`, makes tests deterministic, and lets
diagnostics report configuration status without exposing raw secret values.
## Worker enablement
The worker is opt-in. Set `WORKER_ENABLED=true` only on deployments that should
start queue processors. In multi-resource platforms such as Coolify, do not put
`WORKER_ENABLED=false` into a shared production environment group that is also
injected into the worker resource; leave it unset for web/API resources and set
it explicitly to `true` on each worker resource.
When the worker is enabled, provide queue configuration explicitly:
- `WORKER_QUEUE_GROUP` must be one of `general`, `mail`, `import`, `webhook`,
or `plugin` for grouped worker resources.
- `WORKER_HEALTH_PORT` and `WORKER_ADMIN_PORT` should be unique per Coolify
worker app when those endpoints are exposed.
- `BULLMQ_REDIS_URL` is the worker Redis URL.
- `REDIS_URL` is accepted only as a fallback when `BULLMQ_REDIS_URL` is absent.
If the worker is disabled, queue processors should not start. Health and runtime
diagnostics may still report enablement and readiness status, but they must not
include the Redis URL value.
## Mailjet configuration
Mailjet is the transactional mail provider boundary for API and worker
runtimes. Mail delivery requires the provider key and verified sender domain
address to be configured together:
- `MAILJET_API_KEY` is the Mailjet API token.
- `MAILJET_FROM_EMAIL` is the default sender email from a verified Mailjet
domain.
- `MAILJET_FROM_NAME` is an optional sender display name.
Treat `MAILJET_API_KEY` and `MAILJET_FROM_EMAIL` as a required pair
whenever Mailjet delivery is enabled. Supplying only one of the pair is
invalid configuration because the provider cannot safely send mail without both
authentication and an approved sender address.
## Browser runtime configuration
Worker browser runtime settings are explicit worker configuration, not
package-global state:
- `BROWSER_RUNTIME_URL` identifies the browser runtime service endpoint when
that integration is enabled.
- `BROWSER_RUNTIME_API_KEY` authenticates requests to the browser runtime
service.
- `BROWSER_SESSION_TIMEOUT_MS` configures the session timeout and must parse as
a valid millisecond duration.
Browser runtime diagnostics should report key names, parse status, and
diagnostic codes only. They must never include endpoint secrets, API keys,
tokens, or raw values.
## Safe diagnostics and redaction
Configuration validation must use the central redacted secret validator for
required and optional secret-like values. Errors, health JSON, and logs may
include:
- environment key names;
- diagnostic codes;
- parse status;
- high-level messages;
- queue readiness or worker enablement status.
They must not include raw secret values. This applies to Redis URLs, database
URLs, API keys, tokens, Mailjet sender secrets, browser runtime credentials,
and any future provider secret.
When reporting invalid or missing configuration, prefer messages such as
`missing required env key MAILJET_API_KEY` or
`invalid duration for BROWSER_SESSION_TIMEOUT_MS`. Do not interpolate the
rejected value into thrown errors, logs, or health responses.
## Seed Credentials
Local demo users and demo tenants are opt-in through `SEED_DEMO_DATA=true` and
are refused in production. Production bootstrap seeding requires
`SEED_ADMIN_EMAIL` and `SEED_ADMIN_PASSWORD`, creates only the configured admin
plus roles, permissions, and entitlements, and refuses local default seed emails
or the default `password`.
## Adding new configuration
When adding a new runtime setting:
1. Decide which runtime entrypoint owns the environment read.
2. Validate and normalize the value before passing it to packages or handlers.
3. Use the redacted secret validator for secret-like required or optional values.
4. Pass normalized values through explicit options or dependencies.
5. Add tests that assert diagnostics expose keys and codes, not raw values.
6. Update this document and the environment inventory when the setting is
user-facing.