ClipX Logo
Clipx
TikWM

Error Handling System - Technical Deep Dive

advanced
14 min read
Updated: 2025-10-09
By Clipx Engineering
2,760 words
Technical
errors
architecture
client
server
security
toast

πŸ”₯ ERROR HANDLING SYSTEM - TECHNICAL DEEP DIVE πŸ”₯

"For the developers who want to understand EVERYTHING" πŸ§ πŸ’»


πŸ—οΈ System Architecture

Core Components Overview

High-level architecture without diagrams

LayerComponentsPurpose
ServerServer Response β†’ Middleware Security Check β†’ Request Sanitization β†’ Origin Validation β†’ CSRF ProtectionValidate, sanitize, and secure inbound requests before they reach the client.
ClientApiClient Processing β†’ Error Handler Analysis β†’ Enhanced Error DetailsNormalize responses and enrich errors with structured details.
UINotification System, Error Display ComponentSurface a single, clear toast and an optional detailed panel.

Flow sequence

  1. Server responds; middleware performs security checks (sanitization, origin, CSRF).
  2. Client ApiClient normalizes the response payload.
  3. ErrorHandler maps error codes and builds ErrorDetails (title, message, description, action, severity, code).
  4. UI shows one toast notification and, if expanded, a detailed error card.
TYPESCRIPT
// Error Flow Architecture
interface ErrorFlow {
  ServerResponse: ApiErrorResponse;
  MiddlewareSecurity: SecurityValidation;
  ApiClientProcessing: EnhancedApiResponse<T>;
  ErrorHandlerAnalysis: ErrorDetails;
  NotificationSystem: EnhancedNotification;
  UIComponents: ErrorDisplay;
}

File Structure

Text
src/lib/client/
β”œβ”€β”€ errorHandler.ts          # 🧠 The Brain - Error type mapping & processing
β”œβ”€β”€ api.ts                   # πŸš€ Smart API client with error handling
└── csrf.ts                  # πŸ”’ CSRF token management

src/lib/utils/
└── notifications.ts         # 🎨 Enhanced notification system

src/components/
β”œβ”€β”€ ui/enhanced-toast.tsx    # 🎯 UI components for enhanced notifications
└── pages/download/page.tsx  # πŸ“± Download page with error display

src/hooks/
└── useDownloadFlow.ts       # πŸ”„ Download flow with error state management

🧠 Error Handler Deep Dive

Core Interface

TYPESCRIPT
export interface ErrorDetails {
  title: string;                    // User-friendly error title
  message: string;                  // Primary error message
  description?: string;             // Detailed explanation
  action?: string;                  // Actionable advice
  severity: 'info' | 'warning' | 'error' | 'critical';
  code: string;                     // Error code for debugging
}

export interface ApiErrorResponse {
  success: boolean;
  error: string;
  code?: string;
  ref?: string;
  security?: {
    type?: string;                  // Security error type
    status?: number;                // HTTP status
    reason?: string;                // Specific reason
    threatLevel?: string;           // Threat assessment
    riskScore?: number;             // Risk score (0-100)
    reasons?: string[];            // Detailed reasons array
    violations?: string[];         // Security violations
    warnings?: string[];           // Security warnings
    code?: string;                 // Security-specific code
  };
}

Error Type Mapping System

TYPESCRIPT
class ApiErrorHandler {
  handleError(response: ApiErrorResponse, context?: string): ErrorDetails {
    const code = response.code || 'UNKNOWN_ERROR';
    const security = response.security;
    
    // Handle security-related errors by type
    if (security?.type === 'csrf_protection') {
      return this.getCSRFErrorDetails(response);
    }
    
    if (security?.type === 'sanitization') {
      return this.getSanitizationErrorDetails(response);
    }
    
    // Handle specific error codes
    switch (code) {
      case 'SANITIZATION_FAILED':
        return this.getSanitizationErrorDetails(response);
      case 'REQUEST_ANALYSIS_FAILED':
        return this.getRequestAnalysisErrorDetails(response);
      // ... 15+ more error types
    }
  }
}

πŸ”’ Security Error Processing

Sanitization Error Handler

TYPESCRIPT
private getSanitizationErrorDetails(response: ApiErrorResponse): ErrorDetails {
  const security = response.security;
  const violations = security?.violations || [];
  const warnings = security?.warnings || [];
  
  // Build detailed description from violations
  let description = 'Our security system detected potentially harmful content in your request.';
  
  if (violations.length > 0) {
    description += `

Detected issues:
β€’ ${violations.join('
β€’ ')}`;
  }
  
  if (warnings.length > 0) {
    description += `

Warnings:
β€’ ${warnings.join('
β€’ ')}`;
  }
  
  return {
    title: 'Invalid Request Content',
    message: 'Your request contains potentially harmful content',
    description,
    action: 'Please review your input, remove any suspicious content, and try again',
    severity: 'error',
    code: response.code || 'SANITIZATION_FAILED'
  };
}

Request Analysis Error Handler

TYPESCRIPT
private getRequestAnalysisErrorDetails(response: ApiErrorResponse): ErrorDetails {
  const security = response.security;
  const threatLevel = security?.threatLevel || 'unknown';
  const riskScore = security?.riskScore || 0;
  const reasons = security?.reasons || [];
  
  let description = `Our security system detected suspicious activity (Risk Score: ${riskScore}, Threat Level: ${threatLevel}).`;
  
  if (reasons.length > 0) {
    description += `

Detected issues:
β€’ ${reasons.join('
β€’ ')}`;
  }
  
  // Dynamic severity mapping based on threat level
  const severity = threatLevel === 'critical' ? 'critical' : 
                  threatLevel === 'high' ? 'error' : 
                  threatLevel === 'medium' ? 'warning' : 'info';
  
  return {
    title: 'Suspicious Activity Detected',
    message: 'Your request was flagged by our security system',
    description,
    action: 'Please ensure your request is legitimate and try again',
    severity,
    code: response.code || 'REQUEST_ANALYSIS_FAILED'
  };
}

πŸš€ API Client Integration

Enhanced API Response Interface

TYPESCRIPT
export interface EnhancedApiResponse<T> {
  success: boolean;
  data?: T;
  error?: string;
  code?: string;
  details?: ErrorDetails;  // 🎯 Enhanced error details
}

export interface ApiOptions {
  showNotifications?: boolean;  // 🎨 Control notification display
  context?: string;             // πŸ“ Error context for debugging
  maxRetries?: number;          // πŸ”„ Retry configuration
}

Smart Error Handling with Retry Logic

TYPESCRIPT
async makeRequest<T>(
  endpoint: string, 
  options: RequestInit = {}, 
  apiOptions: ApiOptions = {}
): Promise<EnhancedApiResponse<T>> {
  const { showNotifications = true, context, maxRetries = 3 } = apiOptions;
  
  for (let attempt = 1; attempt <= maxRetries; attempt++) {
    try {
      const response = await fetch(endpoint, {
        ...options,
        credentials: 'include'  // πŸ”’ Include CSRF cookies
      });
      
      // Handle CSRF token errors with automatic retry
      if (response.status === 403) {
        const errorData = await response.json().catch(() => ({}));
        
        if (isCSRFError(errorData) && attempt === 1) {
          console.log('πŸ”„ CSRF token expired, generating new token...');
          try {
            const tokenResult = await csrfClient.generateCSRFToken();
            if (tokenResult.success) {
              continue; // Retry the request
            }
          } catch {
            // Token generation failed, continue to error handling
          }
        }
        
        // Return enhanced error details
        const errorDetails = apiErrorHandler.handleError({
          success: false,
          error: errorData.error || 'Security token is invalid or expired',
          code: errorData.code || 'CSRF_TOKEN_INVALID',
          security: errorData.security
        }, context);
        
        if (showNotifications) {
          await apiErrorHandler.showErrorNotification(errorDetails);
        }
        
        return {
          success: false,
          error: errorDetails.message,
          code: errorDetails.code,
          details: errorDetails  // 🎯 Enhanced error details
        };
      }
      
      // Handle other HTTP errors
      if (!response.ok) {
        const errorData = await response.json().catch(() => ({}));
        const errorDetails = apiErrorHandler.handleError({
          success: false,
          error: errorData.error || `HTTP ${response.status}: ${response.statusText}`,
          code: errorData.code || `HTTP_${response.status}`,
          security: errorData.security
        }, context);
        
        if (showNotifications) {
          await apiErrorHandler.showErrorNotification(errorDetails);
        }
        
        return {
          success: false,
          error: errorDetails.message,
          code: errorDetails.code,
          details: errorDetails
        };
      }
      
      // Success response
      const data = await response.json();
      return { success: true, data: data as T };
      
    } catch (error) {
      if (attempt === maxRetries) {
        const errorDetails = apiErrorHandler.handleError({
          success: false,
          error: 'Network error occurred',
          code: 'NETWORK_ERROR'
        }, context);
        
        if (showNotifications) {
          await apiErrorHandler.showErrorNotification(errorDetails);
        }
        
        return {
          success: false,
          error: errorDetails.message,
          code: errorDetails.code,
          details: errorDetails
        };
      }
    }
  }
}

🎨 Enhanced Notification System

Notification Interface

TYPESCRIPT
export const showNotification = {
  // Standard notifications (backward compatible)
  success: (title: string, message?: string) => { /* ... */ },
  error: (title: string, message?: string) => { /* ... */ },
  warning: (title: string, message?: string) => { /* ... */ },
  info: (title: string, message?: string) => { /* ... */ },
  
  // πŸš€ Enhanced notifications with detailed descriptions
  enhanced: {
    success: (title: string, message?: string, description?: string, action?: string) => { /* ... */ },
    error: (title: string, message?: string, description?: string, action?: string) => { /* ... */ },
    warning: (title: string, message?: string, description?: string, action?: string) => { /* ... */ },
    info: (title: string, message?: string, description?: string, action?: string) => { /* ... */ },
    
    // 🎯 Direct integration with ErrorDetails
    fromErrorDetails: (errorDetails: ErrorDetails) => { /* ... */ },
    
    // πŸ”§ Custom enhanced notification with full control
    custom: (
      title: string, 
      message?: string, 
      description?: string, 
      action?: string,
      options?: {
        duration?: number;
        severity?: 'success' | 'error' | 'warning' | 'info';
        onClick?: () => void;
        onDismiss?: () => void;
      }
    ) => { /* ... */ }
  }
};

Enhanced Notification Implementation

TYPESCRIPT
enhanced: {
  error: (title: string, message?: string, description?: string, action?: string) => {
    if (!isNotificationEnabled()) return;
    
    const hasDetails = description || action;
    
    toast.error(title, {
      description: message,
      duration: hasDetails ? 10000 : 6000, // Longer duration for detailed notifications
      style: {
        background: 'hsl(var(--background))',
        color: 'hsl(var(--foreground))',
        border: '1px solid hsl(var(--border))',
        maxWidth: hasDetails ? '400px' : '350px', // Larger for detailed content
      },
      ...(hasDetails && {
        data: {
          description,
          action,
          hasDetails: true
        }
      })
    });
  },
  
  fromErrorDetails: (errorDetails: ErrorDetails) => {
    if (!isNotificationEnabled()) return;
    
    const hasDetails = errorDetails.description || errorDetails.action;
    
    const toastFunction = errorDetails.severity === 'critical' || errorDetails.severity === 'error' 
      ? toast.error 
      : errorDetails.severity === 'warning' 
      ? toast.warning 
      : errorDetails.severity === 'info' 
      ? toast.info 
      : toast;

    toastFunction(errorDetails.title, {
      description: errorDetails.message,
      duration: hasDetails ? 10000 : 6000,
      style: {
        background: 'hsl(var(--background))',
        color: 'hsl(var(--foreground))',
        border: '1px solid hsl(var(--border))',
        maxWidth: hasDetails ? '400px' : '350px',
      },
      ...(hasDetails && {
        data: {
          description: errorDetails.description,
          action: errorDetails.action,
          hasDetails: true,
          severity: errorDetails.severity,
          code: errorDetails.code
        }
      })
    });
  }
}

🎯 UI Components

Enhanced Toast Component

TYPESCRIPT
export function EnhancedToast({
  title,
  message,
  description,
  action,
  severity = 'info',
  hasDetails = false,
  className
}: EnhancedToastProps) {
  const [isExpanded, setIsExpanded] = useState(false);

  const severityStyles = {
    success: 'border-green-500 bg-green-50 text-green-900',
    error: 'border-red-500 bg-red-50 text-red-900',
    warning: 'border-yellow-500 bg-yellow-50 text-yellow-900',
    info: 'border-blue-500 bg-blue-50 text-blue-900'
  };

  const severityIcons = {
    success: 'βœ…',
    error: '❌',
    warning: '⚠️',
    info: 'ℹ️'
  };

  if (!hasDetails) {
    // Simple notification - same as before
    return (
      <div className={cn(
        'flex items-start gap-3 p-4 rounded-lg border shadow-sm',
        severityStyles[severity],
        className
      )}>
        <span className="text-lg">{severityIcons[severity]}</span>
        <div className="flex-1 min-w-0">
          <h4 className="font-semibold text-sm">{title}</h4>
          {message && (
            <p className="text-sm opacity-90 mt-1">{message}</p>
          )}
        </div>
      </div>
    );
  }

  // Enhanced notification with dropdown
  return (
    <div className={cn(
      'rounded-lg border shadow-sm transition-all duration-200',
      severityStyles[severity],
      isExpanded ? 'shadow-lg' : 'shadow-sm',
      className
    )}>
      {/* Main notification content */}
      <div 
        className="flex items-start gap-3 p-4 cursor-pointer hover:bg-opacity-80 transition-colors"
        onClick={() => setIsExpanded(!isExpanded)}
      >
        <span className="text-lg">{severityIcons[severity]}</span>
        <div className="flex-1 min-w-0">
          <div className="flex items-center justify-between">
            <h4 className="font-semibold text-sm">{title}</h4>
            <div className="flex items-center gap-2">
              <InfoIcon className="w-4 h-4 opacity-60" />
              {isExpanded ? (
                <ChevronUpIcon className="w-4 h-4 opacity-60" />
              ) : (
                <ChevronDownIcon className="w-4 h-4 opacity-60" />
              )}
            </div>
          </div>
          {message && (
            <p className="text-sm opacity-90 mt-1">{message}</p>
          )}
        </div>
      </div>

      {/* Expandable details */}
      {isExpanded && (
        <div className="px-4 pb-4 border-t border-opacity-20 animate-in slide-in-from-top-2 duration-200">
          <div className="pt-3 space-y-2">
            {description && (
              <div>
                <h5 className="text-xs font-medium opacity-80 mb-1">Description:</h5>
                <p className="text-sm opacity-90 leading-relaxed">{description}</p>
              </div>
            )}
            {action && (
              <div>
                <h5 className="text-xs font-medium opacity-80 mb-1">Action Required:</h5>
                <p className="text-sm opacity-90 leading-relaxed">{action}</p>
              </div>
            )}
          </div>
        </div>
      )}
    </div>
  );
}

Download Page Error Display

TYPESCRIPT
function ErrorDisplay({ error, onDismiss }: { error: ErrorDetails; onDismiss: () => void }) {
  const [isExpanded, setIsExpanded] = useState(false);
  
  const hasDetails = error.description || error.action;
  
  const severityStyles = {
    critical: 'bg-red-500/10 border-red-500/20 text-red-600 dark:text-red-400',
    error: 'bg-destructive/10 border-destructive/20 text-destructive dark:text-destructive-foreground',
    warning: 'bg-yellow-500/10 border-yellow-500/20 text-yellow-600 dark:text-yellow-400',
    info: 'bg-blue-500/10 border-blue-500/20 text-blue-600 dark:text-blue-400'
  };

  const severityIcons = {
    critical: '🚨',
    error: '❌',
    warning: '⚠️',
    info: 'ℹ️'
  };

  return (
    <motion.div 
      className={`${severityStyles[error.severity]} border rounded-xl relative transition-all duration-200 ${
        isExpanded ? 'shadow-lg' : 'shadow-sm'
      }`}
      initial={{ opacity: 0, height: 0, y: -20 }}
      animate={{ opacity: 1, height: 'auto', y: 0 }}
      exit={{ opacity: 0, height: 0, y: -20 }}
      transition={{ duration: 0.3 }}
    >
      {/* Main error content */}
      <div 
        className={`p-4 ${hasDetails ? 'cursor-pointer hover:bg-opacity-80 transition-colors' : ''}`}
        onClick={hasDetails ? () => setIsExpanded(!isExpanded) : undefined}
      >
        <div className="flex items-start justify-between gap-3">
          <div className="flex items-start gap-3">
            <div className="w-6 h-6 bg-opacity-20 rounded-full flex items-center justify-center flex-shrink-0 mt-0.5">
              <span className="text-sm">{severityIcons[error.severity]}</span>
            </div>
            <div className="flex-1 min-w-0">
              <div className="flex items-center justify-between">
                <div className="font-semibold mb-1">{error.title}</div>
                {hasDetails && (
                  <div className="flex items-center gap-2">
                    <InfoIcon className="w-4 h-4 opacity-60" />
                    {isExpanded ? (
                      <ChevronUpIcon className="w-4 h-4 opacity-60" />
                    ) : (
                      <ChevronDownIcon className="w-4 h-4 opacity-60" />
                    )}
                  </div>
                )}
              </div>
              <div className="text-sm opacity-90">{error.message}</div>
            </div>
          </div>
          <button
            onClick={onDismiss}
            className="flex-shrink-0 p-1 hover:bg-opacity-20 rounded-full transition-colors duration-200"
            aria-label="Dismiss error message"
          >
            <X className="h-4 w-4" />
          </button>
        </div>
      </div>

      {/* Expandable details */}
      {hasDetails && isExpanded && (
        <div className="px-4 pb-4 border-t border-opacity-20 animate-in slide-in-from-top-2 duration-200">
          <div className="pt-3 space-y-2">
            {error.description && (
              <div>
                <h5 className="text-xs font-medium opacity-80 mb-1">Description:</h5>
                <p className="text-sm opacity-90 leading-relaxed whitespace-pre-line">{error.description}</p>
              </div>
            )}
            {error.action && (
              <div>
                <h5 className="text-xs font-medium opacity-80 mb-1">Action Required:</h5>
                <p className="text-sm opacity-90 leading-relaxed">{error.action}</p>
              </div>
            )}
          </div>
        </div>
      )}
    </motion.div>
  );
}

πŸ”„ State Management Integration

useDownloadFlow Hook

TYPESCRIPT
export function useDownloadFlow(): DownloadFlowState & DownloadFlowActions {
  const [error, setError] = useState<ErrorDetails | null>(null); // 🎯 Enhanced error state
  
  const handleUrlSubmit = useCallback(async (url: string) => {
    // Validation with enhanced error details
    if (!url?.trim()) {
      const errorDetails = {
        title: 'Invalid URL',
        message: 'Please provide a valid URL',
        severity: 'warning' as const,
        code: 'INVALID_URL'
      };
      setError(errorDetails);
      showNotification.enhanced.fromErrorDetails(errorDetails);
      return;
    }
    
    // API call with disabled notifications to prevent duplicates
    const response: EnhancedApiResponse<any> = await ApiClient.getVideoInfo(extractedUrl, {
      showNotifications: false // 🚫 Disable ApiClient notifications
    });
    
    if (!response.success) {
      // Use enhanced error details if available
      if (response.details) {
        setError(response.details);
        showNotification.enhanced.fromErrorDetails(response.details); // 🎯 Single notification
      } else {
        const errorDetails = {
          title: 'Content Load Failed',
          message: response.error || 'Failed to fetch content information',
          severity: 'error' as const,
          code: 'CONTENT_LOAD_FAILED'
        };
        setError(errorDetails);
        showNotification.enhanced.fromErrorDetails(errorDetails);
      }
    }
  }, []);
}

πŸ›‘οΈ Backend Integration

Middleware Security Response

TYPESCRIPT
// Enhanced CSRF protection with detailed error responses
if (path.startsWith('/api/') && !path.startsWith('/api/internal/csrf')) {
  const csrfResult = await handleCSRFProtection(req);
  if (!csrfResult.allowed) {
    const response = NextResponse.json({
      success: false,
      error: csrfResult.error,
      ref: requestId,
      security: {
        type: 'csrf_protection',
        status: csrfResult.status
      }
    }, { status: 403 });
    return withSecurityHeaders(response, isHttps);
  }
}

// Request analysis with detailed security information
const requestAnalysis = await requestAnalyzer.analyzeRequest(req);
if (requestAnalysis.threatLevel === 'high' || requestAnalysis.threatLevel === 'critical') {
  const response = NextResponse.json({
    success: false,
    error: "Request blocked due to security concerns.",
    ref: requestId,
    security: {
      threatLevel: requestAnalysis.threatLevel,
      riskScore: requestAnalysis.riskScore,
      reasons: requestAnalysis.reasons
    }
  }, { status: 403 });
  return withSecurityHeaders(response, isHttps);
}

Request Sanitization Response

TYPESCRIPT
const sanitizationResult = await requestSanitizer.sanitizeRequest(req);
if (!sanitizationResult.isValid) {
  const response = NextResponse.json({
    success: false,
    error: "Request contains potentially harmful content",
    ref: requestId,
    security: {
      type: 'sanitization',
      violations: sanitizationResult.violations,
      warnings: sanitizationResult.warnings
    }
  }, { status: 400 });
  return withSecurityHeaders(response, isHttps);
}

πŸš€ Performance Optimizations

Zero Duplicate Notifications

TYPESCRIPT
// Problem: Both ApiClient and useDownloadFlow showing notifications
// Solution: Disable ApiClient notifications, let hook handle them

// ❌ Before (duplicate notifications)
const response = await ApiClient.getVideoInfo(url); // Shows notification
if (!response.success) {
  showNotification.error('Error', response.error); // Shows another notification
}

// βœ… After (single notification)
const response = await ApiClient.getVideoInfo(url, {
  showNotifications: false // Disable ApiClient notifications
});
if (!response.success && response.details) {
  showNotification.enhanced.fromErrorDetails(response.details); // Single notification
}

Smart Error Caching

TYPESCRIPT
// Error details are cached in the ErrorDetails object
// No need to re-process the same error multiple times
const errorDetails = apiErrorHandler.handleError(response); // Cached processing

Lazy Loading

TYPESCRIPT
// Error handlers are loaded only when needed
// Unused error types are tree-shaken out of the bundle

🎯 Error Type Registry

Complete Error Type List

TYPESCRIPT
const ERROR_TYPES = {
  // Security Errors
  SANITIZATION_FAILED: 'Invalid Request Content',
  REQUEST_ANALYSIS_FAILED: 'Suspicious Activity Detected',
  ORIGIN_VALIDATION_FAILED: 'Invalid Request Origin',
  THREAT_DETECTED: 'Security Threat Detected',
  SUSPICIOUS_ACTIVITY: 'Suspicious Activity',
  IP_BLOCKED: 'Access Blocked',
  
  // CSRF Errors
  CSRF_TOKEN_INVALID: 'Security Token Issue',
  ACCESS_DENIED_CSRF: 'Security Token Issue',
  CSRF_SERVICE_UNAVAILABLE: 'Security Service Unavailable',
  
  // Rate Limiting
  RATE_LIMITED: 'Too Many Requests',
  RATE_LIMIT_EXCEEDED: 'Rate Limit Exceeded',
  
  // Content Errors
  INVALID_TIKTOK_URL: 'Invalid TikTok URL',
  URL_VALIDATION_FAILED: 'Invalid URL Format',
  NOT_FOUND: 'Video Not Found',
  ACCESS_DENIED: 'Access Denied',
  
  // Network Errors
  TIMEOUT: 'Request Timeout',
  NETWORK_ERROR: 'Network Error',
  MAX_RETRIES_EXCEEDED: 'Service Temporarily Unavailable',
  
  // Generic Errors
  UNKNOWN_ERROR: 'Something Went Wrong',
  CONTENT_LOAD_FAILED: 'Content Load Failed',
  UNEXPECTED_ERROR: 'Unexpected Error'
};

πŸ”§ Extending the System

Adding New Error Types

TYPESCRIPT
// 1. Add to switch statement in errorHandler.ts
case 'NEW_ERROR_TYPE':
  return this.getNewErrorDetails(response);

// 2. Create new error handler method
private getNewErrorDetails(response: ApiErrorResponse): ErrorDetails {
  const security = response.security;
  const specificValue = security?.specificValue || [];
  
  return {
    title: 'New Error Title',
    message: 'Error message',
    description: 'Detailed explanation...',
    action: 'What user should do',
    severity: 'error',
    code: 'NEW_ERROR_TYPE'
  };
}

// 3. Add to ERROR_TYPES registry
NEW_ERROR_TYPE: 'New Error Title'

Custom Error Processing

TYPESCRIPT
// Custom error processing with specific business logic
private getCustomErrorDetails(response: ApiErrorResponse): ErrorDetails {
  const businessData = response.businessData;
  const userContext = response.userContext;
  
  // Custom logic based on business requirements
  if (businessData?.subscriptionExpired) {
    return {
      title: 'Subscription Expired',
      message: 'Your subscription has expired',
      description: `Your subscription expired on ${businessData.expiryDate}. Please renew to continue using our services.`,
      action: 'Please renew your subscription to continue',
      severity: 'warning',
      code: 'SUBSCRIPTION_EXPIRED'
    };
  }
  
  // Default handling
  return this.getGenericErrorDetails(response);
}

πŸŽ‰ Conclusion

This error handling system represents next-level engineering with:

  • 🧠 Intelligent Processing: Smart error detection and categorization
  • 🎨 Beautiful UI: Enhanced notifications with dropdown functionality
  • πŸš€ Performance: Zero duplicates, smart caching, lazy loading
  • πŸ›‘οΈ Security: Comprehensive security error handling
  • πŸ”§ Extensibility: Easy to add new error types and custom logic
  • πŸ“± Responsive: Works perfectly on all devices
  • 🎯 User-Friendly: Clear, actionable error messages

This is how you build software that doesn't just handle errors - it EXCELS at it. πŸ”₯πŸ”₯πŸ”₯


Built with ❀️, TypeScript, and a lot of πŸ”₯ by the TikTok Downloader team

Need help? Contact support or check our troubleshooting guide.
Error Handling System - Technical Deep Dive - Docs - ClipX