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
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: falseExplicit 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