249 lines
7.2 KiB
Plaintext
249 lines
7.2 KiB
Plaintext
# Copy this to .env.local and fill in your values.
|
|
# Never commit .env.local.
|
|
|
|
# App
|
|
APP_ENV=local
|
|
|
|
# HTTP
|
|
HTTP_PORT=8080
|
|
HTTP_BODY_LIMIT=4194304
|
|
HTTP_READ_TIMEOUT=10s
|
|
HTTP_WRITE_TIMEOUT=15s
|
|
HTTP_IDLE_TIMEOUT=60s
|
|
HTTP_CORS_ALLOW_ORIGINS=http://localhost:3000,http://127.0.0.1:3000,http://localhost:5173,http://127.0.0.1:5173
|
|
HTTP_CORS_ALLOW_METHODS=GET,POST,PUT,PATCH,DELETE,OPTIONS,HEAD
|
|
HTTP_CORS_ALLOW_HEADERS=Origin,Content-Type,Accept,Authorization,X-Requested-With,X-Pin-Verification-Token,X-Device-Type
|
|
HTTP_CORS_EXPOSE_HEADERS=X-Request-ID
|
|
HTTP_CORS_ALLOW_CREDENTIALS=true
|
|
HTTP_CORS_MAX_AGE=300
|
|
HTTP_REQUEST_TIMEOUT=30s
|
|
HTTP_REQUEST_TIMEOUT_OVERRIDES=
|
|
HTTP_SHUTDOWN_TIMEOUT=30s
|
|
HTTP_RATE_LIMIT_MAX=120
|
|
HTTP_RATE_LIMIT_WINDOW=1m
|
|
HTTP_SECURITY_HSTS_MAX_AGE=0
|
|
|
|
# MySQL
|
|
MYSQL_DSN="root:password@tcp(localhost:3306)/fm_dev?parseTime=true"
|
|
MYSQL_MAX_OPEN_CONNS=25
|
|
MYSQL_MAX_IDLE_CONNS=10
|
|
MYSQL_CONN_MAX_LIFETIME=5m
|
|
MYSQL_CONN_MAX_IDLE_TIME=2m
|
|
|
|
# Logging
|
|
LOG_LEVEL=debug
|
|
LOG_FORMAT=json
|
|
|
|
# Audit
|
|
AUDIT_LOG_QUEUE_SIZE=1024
|
|
AUDIT_LOG_WORKERS=2
|
|
|
|
# Email
|
|
EMAIL_PROVIDER=mock
|
|
EMAIL_MOCK_DIR=.local/emails
|
|
|
|
# Circuit Breaker (default policy)
|
|
CB_DEFAULT_ENABLED=true
|
|
CB_DEFAULT_MAX_REQUESTS=1
|
|
CB_DEFAULT_INTERVAL=1m
|
|
CB_DEFAULT_BUCKET_PERIOD=10s
|
|
CB_DEFAULT_TIMEOUT=30s
|
|
CB_DEFAULT_MIN_REQUESTS=5
|
|
CB_DEFAULT_FAILURE_RATIO=0.6
|
|
CB_DEFAULT_CONSECUTIVE_FAILURES=5
|
|
CB_MICROSOFT_SSO_ENABLED=true
|
|
CB_MICROSOFT_SSO_MAX_REQUESTS=1
|
|
CB_MICROSOFT_SSO_INTERVAL=1m
|
|
CB_MICROSOFT_SSO_BUCKET_PERIOD=10s
|
|
CB_MICROSOFT_SSO_TIMEOUT=30s
|
|
CB_MICROSOFT_SSO_MIN_REQUESTS=5
|
|
CB_MICROSOFT_SSO_FAILURE_RATIO=0.6
|
|
CB_MICROSOFT_SSO_CONSECUTIVE_FAILURES=5
|
|
CB_SES_ENABLED=true
|
|
CB_SES_MAX_REQUESTS=1
|
|
CB_SES_INTERVAL=1m
|
|
CB_SES_BUCKET_PERIOD=10s
|
|
CB_SES_TIMEOUT=30s
|
|
CB_SES_MIN_REQUESTS=5
|
|
CB_SES_FAILURE_RATIO=0.6
|
|
CB_SES_CONSECUTIVE_FAILURES=5
|
|
CB_SQS_ENABLED=true
|
|
CB_SQS_MAX_REQUESTS=1
|
|
CB_SQS_INTERVAL=1m
|
|
CB_SQS_BUCKET_PERIOD=10s
|
|
CB_SQS_TIMEOUT=30s
|
|
CB_SQS_MIN_REQUESTS=5
|
|
CB_SQS_FAILURE_RATIO=0.6
|
|
CB_SQS_CONSECUTIVE_FAILURES=5
|
|
|
|
# Auth
|
|
AUTH_PASSWORD_PEPPER=change-me-local-pepper
|
|
AUTH_IP_ENCRYPTION_KEY=change-me-local-ip-key
|
|
AUTH_DEFAULT_ROLE=user
|
|
AUTH_DISABLE_REGISTER=false
|
|
AUTH_HASH_TIME=1
|
|
AUTH_HASH_MEMORY_KB=65536
|
|
AUTH_HASH_THREADS=4
|
|
AUTH_HASH_KEY_LEN=32
|
|
AUTH_EMAIL_VERIFY_TTL=24h
|
|
AUTH_EMAIL_VERIFY_URL=http://localhost:3000/verify-email
|
|
AUTH_INVITE_TTL=24h
|
|
AUTH_SET_PASSWORD_URL=http://localhost:3000/set-password
|
|
AUTH_PASSWORD_RESET_TTL=20m
|
|
AUTH_PASSWORD_RESET_URL=http://localhost:3000/reset-password
|
|
AUTH_FORGOT_PASSWORD_EMAIL_COOLDOWN=2m
|
|
AUTH_FORGOT_PASSWORD_MIN_DURATION=150ms
|
|
AUTH_FORGOT_PASSWORD_IP_RATE_MAX=10
|
|
AUTH_FORGOT_PASSWORD_IP_RATE_WINDOW=15m
|
|
AUTH_SECURITY_PIN_RESET_TTL=20m
|
|
AUTH_SECURITY_PIN_RESET_URL=http://localhost:3000/reset-pin
|
|
AUTH_FORGOT_SECURITY_PIN_EMAIL_COOLDOWN=2m
|
|
AUTH_FORGOT_SECURITY_PIN_MIN_DURATION=150ms
|
|
AUTH_SECURITY_PIN_MAX_ATTEMPTS=5
|
|
AUTH_SECURITY_PIN_LOCK_DURATION=0s
|
|
AUTH_SECURITY_PIN_ACTION_TOKEN_TTL=5m
|
|
|
|
AUTH_JWT_COOKIE_DOMAIN=.mybit.co.id
|
|
|
|
# JWT
|
|
AUTH_JWT_ACCESS_SECRET=change-me-local-access-secret
|
|
AUTH_JWT_REFRESH_SECRET=change-me-local-refresh-secret
|
|
AUTH_JWT_ACCESS_TTL=10m
|
|
AUTH_JWT_REFRESH_TTL=1h
|
|
AUTH_JWT_REFRESH_TOTP_TTL=1h
|
|
AUTH_JWT_COOKIE_SECURE=false
|
|
AUTH_JWT_COOKIE_SAMESITE=Lax
|
|
AUTH_JWT_ACCESS_COOKIE=wucher_at
|
|
AUTH_JWT_REFRESH_COOKIE=wucher_rt
|
|
|
|
# TOTP
|
|
AUTH_TOTP_CHALLENGE_TTL=5m
|
|
TOTP_ISSUER=Wucher
|
|
TOTP_SECRET_KEY=change-me-local-totp-secret
|
|
|
|
# SSO
|
|
AUTH_SSO_STATE_TTL=10m
|
|
AUTH_SSO_SUCCESS_REDIRECT=http://localhost:3000/sso/callback
|
|
|
|
# WebAuthn
|
|
AUTH_WEBAUTHN_RP_ID=localhost
|
|
AUTH_WEBAUTHN_RP_DISPLAY_NAME=Wucher
|
|
AUTH_WEBAUTHN_RP_ORIGINS=http://localhost:3000
|
|
AUTH_WEBAUTHN_CHALLENGE_TTL=5m
|
|
|
|
# Microsoft SSO
|
|
MS_ENTRA_TENANT_ID=
|
|
MS_ENTRA_CLIENT_ID=
|
|
MS_ENTRA_CLIENT_SECRET=
|
|
MS_ENTRA_REDIRECT_URL=http://localhost:8080/v1/auth/sso/microsoft/callback
|
|
MS_ENTRA_AUTHORITY=https://login.microsoftonline.com/
|
|
MS_ENTRA_SCOPES=openid,profile,email,offline_access,User.Read
|
|
|
|
# Queue
|
|
QUEUE_MESSAGE_SCHEMA_VERSION=v2
|
|
QUEUE_ENABLE_LEGACY_PAYLOAD_FALLBACK=true
|
|
QUEUE_IDEMPOTENCY_KEY_PREFIX=queue:idempotency:email:
|
|
QUEUE_IDEMPOTENCY_TTL=24h
|
|
QUEUE_PROCESSING_TTL=15m
|
|
QUEUE_WORKER_CONCURRENCY=4
|
|
QUEUE_WORKER_MAX_BATCH_SIZE=10
|
|
QUEUE_WORKER_PROCESS_TIMEOUT=30s
|
|
QUEUE_WORKER_SHUTDOWN_TIMEOUT=30s
|
|
QUEUE_WORKER_BACKOFF_MIN=1s
|
|
QUEUE_WORKER_BACKOFF_MAX=5m
|
|
QUEUE_WORKER_PERMANENT_FAILURE_DELAY=30s
|
|
QUEUE_WORKER_MONITOR_ADDR=127.0.0.1:9090
|
|
QUEUE_WORKER_HEALTH_ERROR_THRESHOLD=3
|
|
QUEUE_WORKER_DEPTH_POLL_INTERVAL=30s
|
|
QUEUE_OUTBOX_ENABLED=true
|
|
QUEUE_OUTBOX_POLL_INTERVAL=1s
|
|
QUEUE_OUTBOX_BATCH_SIZE=10
|
|
QUEUE_OUTBOX_DISPATCH_TIMEOUT=10s
|
|
QUEUE_OUTBOX_LOCK_TTL=1m
|
|
QUEUE_OUTBOX_MAX_ATTEMPTS=20
|
|
|
|
# File Queue
|
|
FILE_QUEUE_MESSAGE_SCHEMA_VERSION=v1
|
|
FILE_QUEUE_IDEMPOTENCY_KEY_PREFIX=queue:idempotency:file:
|
|
FILE_QUEUE_IDEMPOTENCY_TTL=24h
|
|
FILE_QUEUE_PROCESSING_TTL=15m
|
|
FILE_QUEUE_WORKER_CONCURRENCY=4
|
|
FILE_QUEUE_WORKER_MAX_BATCH_SIZE=10
|
|
FILE_QUEUE_WORKER_PROCESS_TIMEOUT=30s
|
|
FILE_QUEUE_WORKER_SHUTDOWN_TIMEOUT=30s
|
|
FILE_QUEUE_WORKER_BACKOFF_MIN=1s
|
|
FILE_QUEUE_WORKER_BACKOFF_MAX=5m
|
|
FILE_QUEUE_WORKER_PERMANENT_FAILURE_DELAY=30s
|
|
FILE_QUEUE_WORKER_MONITOR_ADDR=127.0.0.1:9091
|
|
FILE_QUEUE_WORKER_HEALTH_ERROR_THRESHOLD=3
|
|
FILE_QUEUE_WORKER_DEPTH_POLL_INTERVAL=30s
|
|
FILE_QUEUE_OUTBOX_ENABLED=true
|
|
FILE_QUEUE_OUTBOX_POLL_INTERVAL=1s
|
|
FILE_QUEUE_OUTBOX_BATCH_SIZE=10
|
|
FILE_QUEUE_OUTBOX_DISPATCH_TIMEOUT=10s
|
|
FILE_QUEUE_OUTBOX_LOCK_TTL=1m
|
|
FILE_QUEUE_OUTBOX_MAX_ATTEMPTS=20
|
|
|
|
# AWS
|
|
AWS_REGION=us-east-1
|
|
AWS_ACCESS_KEY_ID=test
|
|
AWS_SECRET_ACCESS_KEY=test
|
|
|
|
# SQS (local uses localstack or similar)
|
|
SQS_ENDPOINT=http://localhost:4566
|
|
SQS_ALLOW_INSECURE_ENDPOINT=true
|
|
SQS_QUEUE_URL=http://localhost:4566/000000000000/fm-email-queue
|
|
SQS_QUEUE_TYPE=standard
|
|
SQS_MESSAGE_GROUP_ID=email
|
|
SQS_MAX_MESSAGES=10
|
|
SQS_WAIT_TIME_SECONDS=20
|
|
SQS_VISIBILITY_TIMEOUT=60s
|
|
|
|
# SQS (file queue, local uses localstack or similar)
|
|
FILE_SQS_REGION=us-east-1
|
|
FILE_SQS_ENDPOINT=http://localhost:4566
|
|
FILE_SQS_ALLOW_INSECURE_ENDPOINT=true
|
|
FILE_SQS_QUEUE_URL=http://localhost:4566/000000000000/fm-file-queue
|
|
FILE_SQS_QUEUE_TYPE=standard
|
|
FILE_SQS_MESSAGE_GROUP_ID=file-processing
|
|
FILE_SQS_MAX_MESSAGES=10
|
|
FILE_SQS_WAIT_TIME_SECONDS=20
|
|
FILE_SQS_VISIBILITY_TIMEOUT=60s
|
|
|
|
# SES (local uses localstack or similar)
|
|
SES_REGION=us-east-1
|
|
SES_FROM=noreply@localhost
|
|
SES_CONFIGURATION_SET=
|
|
SES_SEND_TIMEOUT=10s
|
|
SES_ENDPOINT=http://localhost:4566
|
|
SES_ALLOW_INSECURE_ENDPOINT=true
|
|
|
|
# File Storage (local uses localstack or similar)
|
|
FILE_STORAGE_PROVIDER=s3
|
|
FILE_S3_BUCKET=fm-local
|
|
FILE_S3_REGION=us-east-1
|
|
FILE_S3_ENDPOINT=http://localhost:4566
|
|
FILE_S3_FORCE_PATH_STYLE=true
|
|
FILE_S3_ALLOW_INSECURE_ENDPOINT=true
|
|
FILE_S3_AUTO_CREATE_BUCKET=true
|
|
FILE_OBJECT_KEY_PREFIX=fm/objects
|
|
FILE_S3_PRESIGN_PUT_TTL=15m
|
|
FILE_S3_PRESIGN_GET_TTL=15m
|
|
FILE_MANAGER_UPLOAD_MAX_FILE_SIZE_BYTES=4194304
|
|
FILE_MANAGER_UPLOAD_ALLOWED_MIME_TYPES=image/png,image/jpeg,application/pdf,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,application/vnd.ms-excel
|
|
FILE_MANAGER_UPLOAD_ALLOWED_EXTENSIONS=png,jpg,jpeg,pdf,xlsx,xls
|
|
FILE_MANAGER_UPLOAD_ALLOW_EMPTY_FILE=false
|
|
FILE_MANAGER_UPLOAD_MAX_FILENAME_LENGTH=255
|
|
|
|
FILE_MANAGER_TRASH_AUTO_PURGE_ENABLED=true
|
|
FILE_MANAGER_TRASH_RETENTION=720h
|
|
FILE_MANAGER_TRASH_AUTO_PURGE_INTERVAL=1h
|
|
FILE_MANAGER_TRASH_AUTO_PURGE_BATCH_SIZE=200
|
|
|
|
ENABLE_S3_TAGGING=true
|
|
ENABLE_FILE_CLEANUP_JOB=false
|
|
TEMP_FILE_TTL_DAYS=7
|
|
ORPHAN_GRACE_PERIOD_DAYS=30
|
|
FILE_CLEANUP_BATCH_SIZE=100
|
|
FILE_CLEANUP_DRY_RUN=true
|