[ 'domain' => env('MAILGUN_DOMAIN'), 'secret' => env('MAILGUN_SECRET'), 'endpoint' => env('MAILGUN_ENDPOINT', 'api.mailgun.net'), ], 'postmark' => [ 'token' => env('POSTMARK_TOKEN'), ], 'ses' => [ 'key' => env('AWS_ACCESS_KEY_ID'), 'secret' => env('AWS_SECRET_ACCESS_KEY'), 'region' => env('AWS_DEFAULT_REGION', 'us-east-1'), ], 'sendgrid' => [ 'api_key' => env('SENDGRID_API_KEY'), ], 'esign' => [ // Credentials are deliberately read from the private runtime/.env only. // Keep the endpoint aligned with the selected environment when the // explicit ESIGN_BASE_URL override is omitted. 'environment' => env('ESIGN_ENVIRONMENT', 'sandbox'), 'base_url' => env( 'ESIGN_BASE_URL', env('ESIGN_ENVIRONMENT', 'sandbox') === 'production' ? 'https://openapi.esign.cn' : 'https://smlopenapi.esign.cn', ), 'app_id' => env('ESIGN_APP_ID'), 'app_secret' => env('ESIGN_APP_SECRET'), 'notify_url' => env('ESIGN_NOTIFY_URL'), 'callback_tolerance_seconds' => (int) env('ESIGN_CALLBACK_TOLERANCE_SECONDS', 900), 'timeout' => (int) env('ESIGN_TIMEOUT', 20), // Callback-free deployments opt in to bounded status polling. Keep it // disabled until the private production credentials are verified. 'polling_enabled' => filter_var(env('ESIGN_POLLING_ENABLED', false), FILTER_VALIDATE_BOOL), 'poll_batch_size' => (int) env('ESIGN_POLL_BATCH_SIZE', 25), 'poll_min_age_seconds' => (int) env('ESIGN_POLL_MIN_AGE_SECONDS', 120), ], ];