NODE_ENV=production # App APP_BASE_URL=https://asolutions.jp BFF_PORT=4000 APP_NAME=customer-portal-bff # Database (PostgreSQL) POSTGRES_DB=portal_prod POSTGRES_USER=portal POSTGRES_PASSWORD=CHANGE_ME DATABASE_URL=postgresql://portal:CHANGE_ME@database:5432/portal_prod?schema=public # Cache (Redis) REDIS_URL=redis://cache:6379/0 AUTH_ALLOW_REDIS_TOKEN_FAILOPEN=false # Redis-required token flow (when enabled, tokens require Redis to be available) AUTH_REQUIRE_REDIS_FOR_TOKENS=false # Maintenance mode for authentication service AUTH_MAINTENANCE_MODE=false AUTH_MAINTENANCE_MESSAGE=Authentication service is temporarily unavailable for maintenance. Please try again later. # Security JWT_SECRET=CHANGE_ME JWT_EXPIRES_IN=7d BCRYPT_ROUNDS=12 # CORS / Proxy CORS_ORIGIN=https://asolutions.jp TRUST_PROXY=true # Rate Limiting (optional; defaults shown - ttl values in seconds) RATE_LIMIT_TTL=60 RATE_LIMIT_LIMIT=100 AUTH_RATE_LIMIT_TTL=900 AUTH_RATE_LIMIT_LIMIT=3 # Validation error visibility (set true to show field-level errors to clients) EXPOSE_VALIDATION_ERRORS=false # WHMCS Credentials WHMCS_BASE_URL=https://accounts.asolutions.co.jp WHMCS_API_IDENTIFIER= WHMCS_API_SECRET= # Optional API access key if your deployment uses it WHMCS_API_ACCESS_KEY= # Optional webhook security for WHMCS webhooks WHMCS_WEBHOOK_SECRET= # Optional elevated admin credentials for privileged actions (eg. AcceptOrder) # Provide the admin username and MD5 hash of the admin password. # When set, the backend will use these ONLY for the AcceptOrder action. WHMCS_ADMIN_USERNAME= WHMCS_ADMIN_PASSWORD_MD5= # Salesforce Credentials SF_LOGIN_URL=https://asolutions.my.salesforce.com SF_CLIENT_ID= SF_PRIVATE_KEY_PATH=/app/secrets/sf-private.key SF_USERNAME= SF_WEBHOOK_SECRET= # Salesforce Authentication Timeouts (in milliseconds) SF_AUTH_TIMEOUT_MS=30000 SF_TOKEN_TTL_MS=720000 SF_TOKEN_REFRESH_BUFFER_MS=60000 # Queue Throttling Configuration WHMCS_QUEUE_CONCURRENCY=15 WHMCS_QUEUE_INTERVAL_CAP=300 WHMCS_QUEUE_TIMEOUT_MS=30000 SF_QUEUE_CONCURRENCY=15 SF_QUEUE_LONG_RUNNING_CONCURRENCY=22 SF_QUEUE_INTERVAL_CAP=600 SF_QUEUE_TIMEOUT_MS=30000 SF_QUEUE_LONG_RUNNING_TIMEOUT_MS=600000 # Salesforce Platform Events (Provisioning) SF_EVENTS_ENABLED=true SF_PROVISION_EVENT_CHANNEL=/event/Order_Fulfilment_Requested__e SF_EVENTS_REPLAY=LATEST SF_PUBSUB_ENDPOINT=api.pubsub.salesforce.com:7443 SF_PUBSUB_NUM_REQUESTED=50 SF_PUBSUB_QUEUE_MAX=100 # Salesforce Pricing PORTAL_PRICEBOOK_ID= # Logging LOG_LEVEL=info LOG_FORMAT=json # Email (SendGrid) SENDGRID_API_KEY= EMAIL_FROM=no-reply@asolutions.jp EMAIL_FROM_NAME=Assist Solutions EMAIL_ENABLED=true EMAIL_USE_QUEUE=true SENDGRID_SANDBOX=false EMAIL_TEMPLATE_RESET= EMAIL_TEMPLATE_WELCOME= # Freebit (SIM management; optional) FREEBIT_BASE_URL=https://i1.mvno.net/emptool/api FREEBIT_OEM_ID=PASI FREEBIT_OEM_KEY= FREEBIT_TIMEOUT=30000 FREEBIT_RETRY_ATTEMPTS=3 FREEBIT_DETAILS_ENDPOINT=/master/getAcnt/ # Node Options NODE_OPTIONS=--max-old-space-size=512 # NOTE: Frontend (Next.js) uses a separate env file (portal-frontend.env) # Do not include NEXT_PUBLIC_* variables here.