[server]
host = "0.0.0.0"
port = 8080
workers = false
worker_concurrency = 3
[server.cors]
enabled = true
allowed_origins = ["http://localhost:3000", "http://localhost:8080"]
allowed_methods = ["GET", "POST", "PUT", "DELETE", "OPTIONS"]
allowed_headers = ["Content-Type", "Authorization"]
max_age_secs = 3600
[storage]
backend = "postgres"
[storage.filesystem]
base_path = "./.dsl_storage"
workflows_dir = "workflows"
executions_dir = "executions"
checkpoints_dir = "checkpoints"
logs_dir = "logs"
[storage.postgres]
url = "postgres://user:password@localhost:5432/dsl_executor"
max_connections = 10
[storage.s3]
endpoint = "https://s3.amazonaws.com"
region = "us-east-1"
bucket = "dsl-executor-storage"
access_key_id = "${AWS_ACCESS_KEY_ID}"
secret_access_key = "${AWS_SECRET_ACCESS_KEY}"
path_prefix = "workflows"
[queue]
backend = "postgres"
[queue.filesystem]
queue_dir = "./.dsl_queue"
poll_interval_ms = 1000
lock_timeout_secs = 300
[queue.postgres]
url = "postgres://user:password@localhost:5432/dsl_executor"
poll_interval_ms = 500
max_retries = 3
[queue.redis]
url = "redis://localhost:6379/0"
max_connections = 10
[user_storage]
backend = "postgres"
[user_storage.filesystem]
base_path = "./.dsl_users"
[user_storage.postgres]
url = "postgres://user:password@localhost:5432/dsl_executor"
[user_storage.s3]
bucket = "dsl-executor-users"
prefix = "users"
[auth]
jwt_secret = "${JWT_SECRET}"
jwt_expiration_secs = 3600
refresh_token_expiration_secs = 2592000
session_max_idle_secs = 1800
password_min_length = 12
mfa_enabled = false
[rate_limit]
enabled = true
global_requests_per_minute = 10000
per_user_requests_per_minute = 100
per_api_key_requests_per_minute = 1000
per_ip_requests_per_minute = 60
[monitoring]
metrics_enabled = true
metrics_port = 9090
tracing_enabled = false
[reliability]
max_retries = 3
retry_backoff_ms = 1000
retry_backoff_multiplier = 2.0
circuit_breaker_threshold = 5
circuit_breaker_timeout_secs = 60
health_check_interval_secs = 30