Skip to content

Configuration

1. Environment Variables

Source: @nx/core environment keys + this package's common/. Signal uses the standard VerifierApplication keys plus WebSocket-, Redis-, and Kafka-specific ones below.

Application & Identity

NameTypeDefaultRequiredDescription
APP_ENV_APPLICATION_NAMEstringService identifier
APP_ENV_SERVER_PORTnumber3000HTTP listen port (dev 31090)
APP_ENV_SERVER_BASE_PATHstring/v1/apiRoute prefix (effective base /v1/api/signal)
APP_ENV_IDENTITY_SERVICE_BASE_URLstringIdentity base URL for JWKS verification
APP_ENV_JWKS_REST_PATHstring/jw-certsJWKS endpoint path
APP_ENV_SNOWFLAKE_WORKER_IDnumber9Snowflake worker ID

Database (core datasource)

NameTypeDefaultRequiredDescription
APP_ENV_POSTGRES_*Standard core Postgres keys (notification persistence + authz)

WebSocket — ECDH

NameTypeDefaultRequiredDescription
APP_ENV_WEBSOCKET_ECDH_INFOstringHKDF info string; must match the client-side value

WebSocket — Redis (pub/sub bus)

NameTypeDefaultRequiredDescription
APP_ENV_WEBSOCKET_REDIS_MODEsingle | clustersingleConnection mode
APP_ENV_WEBSOCKET_REDIS_HOSTstringlocalhostHost (single mode)
APP_ENV_WEBSOCKET_REDIS_PORTnumber6379Port (single mode)
APP_ENV_WEBSOCKET_REDIS_DBnumber0DB index (single mode)
APP_ENV_WEBSOCKET_REDIS_PASSWORDstringPassword
APP_ENV_WEBSOCKET_REDIS_MAX_RETRYnumber5Max retry (single mode)
APP_ENV_WEBSOCKET_REDIS_CLUSTER_NODESstringclusterComma-separated host:port pairs (required in cluster mode)

This is the only Redis Signal uses — there is no separate cache/queue Redis. All publishers (Signal + emitter services) must point at the same instance/cluster.

Kafka — activity-notification consumer

NameTypeDefaultRequiredDescription
APP_ENV_KAFKA_BROKERSstringComma-separated brokers; empty/unset → fail-fast at boot
APP_ENV_KAFKA_CLIENT_IDstringSVC-00090-SIGNAL_NOTIF_CONSUMERConsumer client id
APP_ENV_KAFKA_GROUP_IDstringSVC-00090-SIGNAL_NOTIF_CONSUMER_GROUPConsumer group id
APP_ENV_KAFKA_SASL_ENABLEbooleanfalseEnable SASL
APP_ENV_KAFKA_SASL_MECHANISMstringif SASLe.g. SCRAM-SHA-512
APP_ENV_KAFKA_SASL_USERNAMEstringif SASL
APP_ENV_KAFKA_SASL_PASSWORDstringif SASL

2. Feature Flags

None. Behavior is governed entirely by the env vars above (mode switches: Redis single/cluster, Kafka SASL on/off).

3. Seeded Data

Migration processes in src/migrations/processes/alwaysRun: true, idempotent.

FileSeedsIdempotentNotes
signal-0001-seed-permissions.tsWebSocketClient.* permissions (6)Upserts each SignalPermissions entry by code
signal-0002-seed-role-permissions.tsRole→permission grantsGrants all signal permissions to OWNER, EMPLOYEE, CASHIER via PolicyDefinition; skips already-granted

Signal has no schema migrations — it owns no tables. These migrations only seed authorization data into @nx/core tables.

4. Configuration Storage (Configuration table)

Not used. Signal holds no per-merchant runtime configuration.

Proprietary and Confidential. Unauthorized copying, distribution, or use of this software is strictly prohibited.