FlagVault SDK Demo

Loading...

Error Handling

Learn how FlagVault SDK handles errors gracefully and provides fallback mechanisms

Graceful Error Handling

FlagVault SDK automatically handles errors and returns default values

The SDK logs warnings to console but never throws exceptions for network/API errors

Error Types & Handling

Different error scenarios and how they're handled

Automatic Handling

Network Errors

Connection timeouts, DNS failures → Returns default value

Authentication Errors

Invalid API keys, forbidden access → Returns default value

Missing Flags

Flag doesn't exist in dashboard → Returns default value

Server Errors

API downtime, 500 errors → Returns default value

Exception Types

FlagVaultAuthenticationError

401/403 HTTP responses

FlagVaultNetworkError

Connection failures, timeouts

FlagVaultAPIError

Server errors, malformed responses

Error

Invalid parameters (empty flag key)

Implementation Examples

Code examples for error handling patterns

Graceful Error Handling (Recommended)

// No try/catch needed - errors are handled gracefully
const isEnabled = await sdk.isEnabled('my-feature-flag', false);

// On network error, you'll see:
// FlagVault: Failed to connect to API for flag 'my-feature-flag', using default: false

// On authentication error:
// FlagVault: Invalid API credentials for flag 'my-feature-flag', using default: false

// On missing flag:
// FlagVault: Flag 'my-feature-flag' not found, using default: false

Explicit Error Handling

import { 
  FlagVaultError,
  FlagVaultAuthenticationError,
  FlagVaultNetworkError,
  FlagVaultAPIError 
} from '@flagvault/sdk';

try {
  const isEnabled = await sdk.isEnabled('my-feature-flag');
  // Use the flag value
} catch (error) {
  if (error instanceof FlagVaultAuthenticationError) {
    // Handle authentication errors (401, 403)
    console.error('Check your API credentials');
  } else if (error instanceof FlagVaultNetworkError) {
    // Handle network errors (timeouts, connection issues)
    console.error('Network connection problem');
  } else if (error instanceof FlagVaultAPIError) {
    // Handle API errors (500, malformed responses, etc.)
    console.error('API error occurred');
  } else {
    // Handle invalid input (empty flag_key, etc.)
    console.error('Invalid input provided');
  }
}

Robust Fallback Pattern

// Robust fallback pattern
async function getFeatureConfig() {
  try {
    const hasNewUI = await sdk.isEnabled('new-ui', false);
    const hasAdvancedFeatures = await sdk.isEnabled('advanced-features', false);
    
    return {
      ui: hasNewUI ? 'modern' : 'classic',
      features: hasAdvancedFeatures ? 'full' : 'basic'
    };
  } catch (error) {
    // Return safe defaults if everything fails
    return {
      ui: 'classic',
      features: 'basic'
    };
  }
}

Best Practices

Recommendations for handling errors in production

✅ Do

  • Always provide meaningful default values
  • Use graceful degradation (recommended approach)
  • Monitor console warnings in production
  • Test with invalid flag keys during development

❌ Don't

  • Assume flags will always be available
  • Ignore network failures in your error handling
  • Use empty strings or null as default values
  • Catch and swallow all errors without logging