getMessage()); if (str_contains($value, 'unsupported search type')) { return self::UNSUPPORTED_SEARCH_TYPE; } if (str_contains($value, 'not configured') || str_contains($value, 'unconfigured') || str_contains($value, 'non configurat') || str_contains($value, 'api key is required')) { return self::NOT_CONFIGURED; } if (str_contains($value, 'quota exhausted') || str_contains($value, 'quota esaurita') || str_contains($value, 'credito esaurito')) { return self::QUOTA_EXHAUSTED; } if (str_contains($value, 'unauthor') || str_contains($value, 'forbidden') || str_contains($value, 'authentication') || preg_match('/\b(401|403)\b/', $value) === 1) { return self::AUTH_ERROR; } if (str_contains($value, 'rate limit') || str_contains($value, 'too many requests') || preg_match('/\b429\b/', $value) === 1) { return self::RATE_LIMITED; } if (str_contains($value, 'timeout') || str_contains($value, 'timed out')) { return self::TIMEOUT; } if ( str_contains($value, 'not found') || preg_match('/\\bno\\s+(?:items?|releases?|products?)\\s+found\\b/', $value) === 1 || preg_match('/\\b404\\b/', $value) === 1 ) { return self::NOT_FOUND; } if (str_contains($value, 'invalid input') || str_contains($value, 'invalid identifier')) { return self::INVALID_INPUT; } if (preg_match('/\b400\b/', $value) === 1) { return self::INVALID_INPUT; } if (preg_match('/\b5\d\d\b/', $value) === 1) { return self::HTTP_ERROR; } if (str_contains($value, 'network') || str_contains($value, 'connection') || str_contains($value, 'ssl') || str_contains($value, 'dns')) { return self::NETWORK_ERROR; } if (str_contains($value, 'invalid response') || str_contains($value, 'invalid json') || str_contains($value, 'empty response')) { return self::INVALID_RESPONSE; } if (preg_match('/\b5\d\d\b/', $value) === 1 || str_contains($value, 'http')) { return self::HTTP_ERROR; } return self::PROVIDER_UNAVAILABLE; } }