(bool) (env('GRAPH_CLIENT_ID') && env('GRAPH_CLIENT_SECRET') && env('GRAPH_TENANT_ID')), 'tenant_id' => env('GRAPH_TENANT_ID', ''), 'client_id' => env('GRAPH_CLIENT_ID', ''), 'client_secret' => env('GRAPH_CLIENT_SECRET', ''), 'scope' => env('GRAPH_SCOPE') ?: 'https://graph.microsoft.com/.default', 'base_url' => env('GRAPH_BASE_URL', 'https://graph.microsoft.com'), 'version' => env('GRAPH_VERSION', 'beta'), 'token_url' => env('GRAPH_TOKEN_URL', 'https://login.microsoftonline.com/%s/oauth2/v2.0/token'), 'timeout' => (int) env('GRAPH_TIMEOUT', 10), 'retry' => [ 'times' => (int) env('GRAPH_RETRY_TIMES', 2), 'sleep' => (int) env('GRAPH_RETRY_SLEEP', 200), // milliseconds ], // When true (default in local/debug), BackupService will fall back to stub payloads // instead of failing the backup entirely if Graph returns an error. 'stub_on_failure' => (bool) env('GRAPH_STUB_ON_FAILURE', env('APP_ENV') === 'local' || env('APP_DEBUG')), ];