@bluealba/pillar-config
v1.4.0-feature-v4-configurable-session-c-209
Published
Centralized, typed configuration contract for Pillar's boot-time environment variables
Readme
@bluealba/pillar-config
The typed contract for every environment variable Pillar reads at boot. One
loadPillarConfig() call returns the whole configuration; nothing in the
platform reads process.env directly (enforced by
packages/eslint-config/pillar-env.js).
import { loadPillarConfig } from '@bluealba/pillar-config';
const config = loadPillarConfig();
config.database.host; // PILLAR_DB_HOST
config.http.httpsPort; // PILLAR_HTTPS_PORTOne name per variable
Since v4 every variable Pillar owns is spelled PILLAR_<SOMETHING> and nothing
else. The unprefixed names (DB_HOST, JWT_SECRET, LOG_LEVEL, …) and the
PAE_* names that v3 also accepted were removed: a value set under an old name
is now ignored silently, which is what a boot with a missing required
variable already surfaced as a startup error.
The rename table for operators lives in
docker/pillar/README.md.
Adding a variable
Declare it in the domain it belongs to under src/domains/, expose the field on
the matching interface in src/config.ts, and — if it has to reach a service
inside the single-container image — forward it in
docker/pillar/rootfs/etc/pillar/render-config.sh. A field declared here but
never forwarded is unconfigurable in the image, which is exactly the failure the
eslint rule exists to prevent.
Third-party variables
Three groups keep their canonical names because Pillar does not own them; a
PILLAR_ spelling would simply not be read by the library or runtime that
consumes them. They are the only variables in the contract without the prefix:
| Variable | Owner | Why it cannot be renamed |
|---|---|---|
| NODE_ENV | Node.js / the whole JS ecosystem | Node, bundlers and countless libraries read it themselves. Pillar exposes it as config.platform.nodeEnv so callers still go through the contract. |
| AWS_REGION, AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY | AWS SDK credential chain | The SDK resolves credentials from these names on its own; renaming them would break every AWS client that Pillar does not construct explicitly. |
| AZURE_STORAGE_ACCOUNT_NAME, AZURE_STORAGE_ACCOUNT_KEY | Azure Storage SDK | Same reason as AWS — the Azure credential chain reads these names directly. |
Everything else — including the names Pillar passes to those SDKs, such as
PILLAR_FILES_S3_BUCKET — is prefixed.
Tests
npm test --workspace @bluealba/pillar-configThe suite covers each domain's defaults and coercions, and asserts that the
removed v3 names (bare and PAE_*) are ignored.
