{ "env": "${APP_ENV}", "http": { "port": ${HTTP_PORT}, "bodyLimit": ${HTTP_BODY_LIMIT}, "timeouts": { "read": "${HTTP_READ_TIMEOUT}", "write": "${HTTP_WRITE_TIMEOUT}", "idle": "${HTTP_IDLE_TIMEOUT}", "request": "${HTTP_REQUEST_TIMEOUT}", "requestOverrides": "${HTTP_REQUEST_TIMEOUT_OVERRIDES}", "shutdown": "${HTTP_SHUTDOWN_TIMEOUT}" }, "cors": { "allowOrigins": "${HTTP_CORS_ALLOW_ORIGINS}", "allowMethods": "${HTTP_CORS_ALLOW_METHODS}", "allowHeaders": "${HTTP_CORS_ALLOW_HEADERS}", "exposeHeaders": "${HTTP_CORS_EXPOSE_HEADERS}", "allowCredentials": ${HTTP_CORS_ALLOW_CREDENTIALS}, "maxAge": ${HTTP_CORS_MAX_AGE} }, "rateLimit": { "max": ${HTTP_RATE_LIMIT_MAX}, "window": "${HTTP_RATE_LIMIT_WINDOW}", "endpoints": "${HTTP_RATE_LIMIT_ENDPOINTS}" }, "security": { "hstsMaxAge": ${HTTP_SECURITY_HSTS_MAX_AGE} } }, "database": { "mysql": { "dsn": "${MYSQL_DSN}", "maxOpenConns": ${MYSQL_MAX_OPEN_CONNS}, "maxIdleConns": ${MYSQL_MAX_IDLE_CONNS}, "connMaxLifetime": "${MYSQL_CONN_MAX_LIFETIME}", "connMaxIdleTime": "${MYSQL_CONN_MAX_IDLE_TIME}" } }, "logging": { "level": "${LOG_LEVEL}", "format": "${LOG_FORMAT}" }, "audit": { "queueSize": ${AUDIT_LOG_QUEUE_SIZE}, "workers": ${AUDIT_LOG_WORKERS} }, "email": { "provider": "${EMAIL_PROVIDER}", "mockDir": "${EMAIL_MOCK_DIR}" }, "circuitBreaker": { "default": { "enabled": ${CB_DEFAULT_ENABLED}, "maxRequests": ${CB_DEFAULT_MAX_REQUESTS}, "interval": "${CB_DEFAULT_INTERVAL}", "bucketPeriod": "${CB_DEFAULT_BUCKET_PERIOD}", "timeout": "${CB_DEFAULT_TIMEOUT}", "minRequests": ${CB_DEFAULT_MIN_REQUESTS}, "failureRatio": ${CB_DEFAULT_FAILURE_RATIO}, "consecutiveFailures": ${CB_DEFAULT_CONSECUTIVE_FAILURES} }, "microsoftSSO": { "enabled": ${CB_MICROSOFT_SSO_ENABLED}, "maxRequests": ${CB_MICROSOFT_SSO_MAX_REQUESTS}, "interval": "${CB_MICROSOFT_SSO_INTERVAL}", "bucketPeriod": "${CB_MICROSOFT_SSO_BUCKET_PERIOD}", "timeout": "${CB_MICROSOFT_SSO_TIMEOUT}", "minRequests": ${CB_MICROSOFT_SSO_MIN_REQUESTS}, "failureRatio": ${CB_MICROSOFT_SSO_FAILURE_RATIO}, "consecutiveFailures": ${CB_MICROSOFT_SSO_CONSECUTIVE_FAILURES} }, "ses": { "enabled": ${CB_SES_ENABLED}, "maxRequests": ${CB_SES_MAX_REQUESTS}, "interval": "${CB_SES_INTERVAL}", "bucketPeriod": "${CB_SES_BUCKET_PERIOD}", "timeout": "${CB_SES_TIMEOUT}", "minRequests": ${CB_SES_MIN_REQUESTS}, "failureRatio": ${CB_SES_FAILURE_RATIO}, "consecutiveFailures": ${CB_SES_CONSECUTIVE_FAILURES} }, "sqs": { "enabled": ${CB_SQS_ENABLED}, "maxRequests": ${CB_SQS_MAX_REQUESTS}, "interval": "${CB_SQS_INTERVAL}", "bucketPeriod": "${CB_SQS_BUCKET_PERIOD}", "timeout": "${CB_SQS_TIMEOUT}", "minRequests": ${CB_SQS_MIN_REQUESTS}, "failureRatio": ${CB_SQS_FAILURE_RATIO}, "consecutiveFailures": ${CB_SQS_CONSECUTIVE_FAILURES} } }, "auth": { "publicBaseURL": "${APP_PUBLIC_BASE_URL}", "passwordPepper": "${AUTH_PASSWORD_PEPPER}", "ipEncryptionKey": "${AUTH_IP_ENCRYPTION_KEY}", "defaultRole": "${AUTH_DEFAULT_ROLE}", "disableRegister": ${AUTH_DISABLE_REGISTER}, "hash": { "time": ${AUTH_HASH_TIME}, "memoryKB": ${AUTH_HASH_MEMORY_KB}, "threads": ${AUTH_HASH_THREADS}, "keyLen": ${AUTH_HASH_KEY_LEN} }, "email": { "verifyTTL": "${AUTH_EMAIL_VERIFY_TTL}", "verifyURL": "${AUTH_EMAIL_VERIFY_URL}", "inviteTTL": "${AUTH_INVITE_TTL}" }, "password": { "setURL": "${AUTH_SET_PASSWORD_URL}", "resetTTL": "${AUTH_PASSWORD_RESET_TTL}", "resetURL": "${AUTH_PASSWORD_RESET_URL}", "forgotEmailCooldown": "${AUTH_FORGOT_PASSWORD_EMAIL_COOLDOWN}", "forgotMinDuration": "${AUTH_FORGOT_PASSWORD_MIN_DURATION}", "forgotIPRateMax": ${AUTH_FORGOT_PASSWORD_IP_RATE_MAX}, "forgotIPRateWindow": "${AUTH_FORGOT_PASSWORD_IP_RATE_WINDOW}", "loginIPRateMax": ${AUTH_LOGIN_IP_RATE_MAX}, "loginIPRateWindow": "${AUTH_LOGIN_IP_RATE_WINDOW}" }, "securityPin": { "resetTTL": "${AUTH_SECURITY_PIN_RESET_TTL}", "resetURL": "${AUTH_SECURITY_PIN_RESET_URL}", "forgotEmailCooldown": "${AUTH_FORGOT_SECURITY_PIN_EMAIL_COOLDOWN}", "forgotMinDuration": "${AUTH_FORGOT_SECURITY_PIN_MIN_DURATION}", "maxAttempts": ${AUTH_SECURITY_PIN_MAX_ATTEMPTS}, "lockDuration": "${AUTH_SECURITY_PIN_LOCK_DURATION}", "actionTokenTTL": "${AUTH_SECURITY_PIN_ACTION_TOKEN_TTL}" }, "jwt": { "accessSecret": "${AUTH_JWT_ACCESS_SECRET}", "refreshSecret": "${AUTH_JWT_REFRESH_SECRET}", "accessTTL": "${AUTH_JWT_ACCESS_TTL}", "refreshTTL": "${AUTH_JWT_REFRESH_TTL}", "refreshTotpTTL": "${AUTH_JWT_REFRESH_TOTP_TTL}", "cookie": { "domain": "${AUTH_JWT_COOKIE_DOMAIN}", "secure": ${AUTH_JWT_COOKIE_SECURE}, "sameSite": "${AUTH_JWT_COOKIE_SAMESITE}", "accessName": "${AUTH_JWT_ACCESS_COOKIE}", "refreshName": "${AUTH_JWT_REFRESH_COOKIE}" } }, "totp": { "challengeTTL": "${AUTH_TOTP_CHALLENGE_TTL}" }, "sso": { "stateTTL": "${AUTH_SSO_STATE_TTL}", "successRedirect": "${AUTH_SSO_SUCCESS_REDIRECT}" }, "webauthn": { "rpId": "${AUTH_WEBAUTHN_RP_ID}", "rpDisplayName": "${AUTH_WEBAUTHN_RP_DISPLAY_NAME}", "rpOrigins": "${AUTH_WEBAUTHN_RP_ORIGINS}", "challengeTTL": "${AUTH_WEBAUTHN_CHALLENGE_TTL}" } }, "totp": { "issuer": "${TOTP_ISSUER}", "secretKey": "${TOTP_SECRET_KEY}" }, "microsoftSSO": { "tenantId": "${MS_ENTRA_TENANT_ID}", "clientId": "${MS_ENTRA_CLIENT_ID}", "clientSecret": "${MS_ENTRA_CLIENT_SECRET}", "redirectUrl": "${MS_ENTRA_REDIRECT_URL}", "authority": "${MS_ENTRA_AUTHORITY}", "scopes": "${MS_ENTRA_SCOPES}" }, "saml": { "certFile": "${SAML_CERT_FILE}", "keyFile": "${SAML_KEY_FILE}", "metadataFile": "${SAML_METADATA_FILE}", "rootUrl": "${SAML_ROOT_URL}", "frontendUrl": "${FRONTEND_URL}", "cookieDomain": "${COOKIE_DOMAIN}", "cookieSecure": ${COOKIE_SECURE}, "sessionTTLHour": ${SESSION_TTL_HOUR} }, "queue": { "messageSchemaVersion": "${QUEUE_MESSAGE_SCHEMA_VERSION}", "enableLegacyPayloadFallback": ${QUEUE_ENABLE_LEGACY_PAYLOAD_FALLBACK}, "idempotencyKeyPrefix": "${QUEUE_IDEMPOTENCY_KEY_PREFIX}", "idempotencyTTL": "${QUEUE_IDEMPOTENCY_TTL}", "processingTTL": "${QUEUE_PROCESSING_TTL}", "worker": { "concurrency": ${QUEUE_WORKER_CONCURRENCY}, "maxBatchSize": ${QUEUE_WORKER_MAX_BATCH_SIZE}, "processTimeout": "${QUEUE_WORKER_PROCESS_TIMEOUT}", "shutdownTimeout": "${QUEUE_WORKER_SHUTDOWN_TIMEOUT}", "backoffMin": "${QUEUE_WORKER_BACKOFF_MIN}", "backoffMax": "${QUEUE_WORKER_BACKOFF_MAX}", "permanentFailureDelay": "${QUEUE_WORKER_PERMANENT_FAILURE_DELAY}", "monitorAddr": "${QUEUE_WORKER_MONITOR_ADDR}", "healthErrorThreshold": ${QUEUE_WORKER_HEALTH_ERROR_THRESHOLD}, "depthPollInterval": "${QUEUE_WORKER_DEPTH_POLL_INTERVAL}" }, "outbox": { "enabled": ${QUEUE_OUTBOX_ENABLED}, "pollInterval": "${QUEUE_OUTBOX_POLL_INTERVAL}", "batchSize": ${QUEUE_OUTBOX_BATCH_SIZE}, "dispatchTimeout": "${QUEUE_OUTBOX_DISPATCH_TIMEOUT}", "lockTTL": "${QUEUE_OUTBOX_LOCK_TTL}", "maxAttempts": ${QUEUE_OUTBOX_MAX_ATTEMPTS} } }, "fileQueue": { "messageSchemaVersion": "${FILE_QUEUE_MESSAGE_SCHEMA_VERSION}", "idempotencyKeyPrefix": "${FILE_QUEUE_IDEMPOTENCY_KEY_PREFIX}", "idempotencyTTL": "${FILE_QUEUE_IDEMPOTENCY_TTL}", "processingTTL": "${FILE_QUEUE_PROCESSING_TTL}", "worker": { "concurrency": ${FILE_QUEUE_WORKER_CONCURRENCY}, "maxBatchSize": ${FILE_QUEUE_WORKER_MAX_BATCH_SIZE}, "processTimeout": "${FILE_QUEUE_WORKER_PROCESS_TIMEOUT}", "shutdownTimeout": "${FILE_QUEUE_WORKER_SHUTDOWN_TIMEOUT}", "backoffMin": "${FILE_QUEUE_WORKER_BACKOFF_MIN}", "backoffMax": "${FILE_QUEUE_WORKER_BACKOFF_MAX}", "permanentFailureDelay": "${FILE_QUEUE_WORKER_PERMANENT_FAILURE_DELAY}", "monitorAddr": "${FILE_QUEUE_WORKER_MONITOR_ADDR}", "healthErrorThreshold": ${FILE_QUEUE_WORKER_HEALTH_ERROR_THRESHOLD}, "depthPollInterval": "${FILE_QUEUE_WORKER_DEPTH_POLL_INTERVAL}" }, "outbox": { "enabled": ${FILE_QUEUE_OUTBOX_ENABLED}, "pollInterval": "${FILE_QUEUE_OUTBOX_POLL_INTERVAL}", "batchSize": ${FILE_QUEUE_OUTBOX_BATCH_SIZE}, "dispatchTimeout": "${FILE_QUEUE_OUTBOX_DISPATCH_TIMEOUT}", "lockTTL": "${FILE_QUEUE_OUTBOX_LOCK_TTL}", "maxAttempts": ${FILE_QUEUE_OUTBOX_MAX_ATTEMPTS} } }, "aws": { "region": "${AWS_REGION}", "accessKeyId": "${AWS_ACCESS_KEY_ID}", "secretAccessKey": "${AWS_SECRET_ACCESS_KEY}", "sqs": { "endpoint": "${SQS_ENDPOINT}", "allowInsecureEndpoint": ${SQS_ALLOW_INSECURE_ENDPOINT}, "queueUrl": "${SQS_QUEUE_URL}", "queueType": "${SQS_QUEUE_TYPE}", "messageGroupId": "${SQS_MESSAGE_GROUP_ID}", "maxMessages": ${SQS_MAX_MESSAGES}, "waitTimeSeconds": ${SQS_WAIT_TIME_SECONDS}, "visibilityTimeout": "${SQS_VISIBILITY_TIMEOUT}" }, "fileSqs": { "region": "${FILE_SQS_REGION}", "endpoint": "${FILE_SQS_ENDPOINT}", "allowInsecureEndpoint": ${FILE_SQS_ALLOW_INSECURE_ENDPOINT}, "queueUrl": "${FILE_SQS_QUEUE_URL}", "queueType": "${FILE_SQS_QUEUE_TYPE}", "messageGroupId": "${FILE_SQS_MESSAGE_GROUP_ID}", "maxMessages": ${FILE_SQS_MAX_MESSAGES}, "waitTimeSeconds": ${FILE_SQS_WAIT_TIME_SECONDS}, "visibilityTimeout": "${FILE_SQS_VISIBILITY_TIMEOUT}" }, "ses": { "region": "${SES_REGION}", "from": "${SES_FROM}", "configurationSet": "${SES_CONFIGURATION_SET}", "sendTimeout": "${SES_SEND_TIMEOUT}", "endpoint": "${SES_ENDPOINT}", "allowInsecureEndpoint": ${SES_ALLOW_INSECURE_ENDPOINT} } }, "file": { "provider": "${FILE_STORAGE_PROVIDER}", "s3": { "bucket": "${FILE_S3_BUCKET}", "region": "${FILE_S3_REGION}", "endpoint": "${FILE_S3_ENDPOINT}", "forcePathStyle": ${FILE_S3_FORCE_PATH_STYLE}, "allowInsecureEndpoint": ${FILE_S3_ALLOW_INSECURE_ENDPOINT}, "autoCreateBucket": ${FILE_S3_AUTO_CREATE_BUCKET}, "objectKeyPrefix": "${FILE_OBJECT_KEY_PREFIX}", "presignPutTTL": "${FILE_S3_PRESIGN_PUT_TTL}", "presignGetTTL": "${FILE_S3_PRESIGN_GET_TTL}" }, "upload": { "maxSize": ${FILE_MANAGER_UPLOAD_MAX_FILE_SIZE_BYTES}, "allowedMimeTypes": "${FILE_MANAGER_UPLOAD_ALLOWED_MIME_TYPES}", "allowedExtensions": "${FILE_MANAGER_UPLOAD_ALLOWED_EXTENSIONS}", "allowEmptyFile": ${FILE_MANAGER_UPLOAD_ALLOW_EMPTY_FILE}, "maxFilenameLength": ${FILE_MANAGER_UPLOAD_MAX_FILENAME_LENGTH} }, "cleanup": { "enableS3Tagging": ${ENABLE_S3_TAGGING}, "enableCleanupJob": ${ENABLE_FILE_CLEANUP_JOB}, "tempFileTTLDays": ${TEMP_FILE_TTL_DAYS}, "orphanGracePeriodDays": ${ORPHAN_GRACE_PERIOD_DAYS}, "batchSize": ${FILE_CLEANUP_BATCH_SIZE}, "dryRun": ${FILE_CLEANUP_DRY_RUN} } }, "wopi": { "tokenSecret": "${WOPI_TOKEN_SECRET}", "proofSecret": "${WOPI_PROOF_SECRET}", "discoveryUrl": "${WOPI_DISCOVERY_URL}", "publicBaseUrl": "${WOPI_PUBLIC_BASE_URL}", "editActionUrl": "${WOPI_EDIT_ACTION_URL}", "tokenTTL": "${WOPI_TOKEN_TTL}", "maxBodyBytes": ${WOPI_MAX_BODY_BYTES}, "requireProof": ${WOPI_REQUIRE_PROOF} } }