Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 | 1x 5x 5x 2x 2x 1x 3x 3x 3x 1x 2x 2x 1x | import { LaunchDarklyError } from '@/services/launchdarklyService';
import { sentryService } from '@/services/sentryService';
/**
* Handle LaunchDarkly errors with consistent logging and Sentry reporting
*/
export const handleLaunchDarklyError = (
error: unknown,
action: string,
options?: {
skipSentryForCodes?: string[];
defaultMessage?: string;
},
): void => {
const { skipSentryForCodes = [], defaultMessage } = options || {};
if (error instanceof LaunchDarklyError) {
console.warn(`[LaunchDarkly] ${error.message}`, error.originalError);
// Skip Sentry reporting for specific error codes if needed
if (!skipSentryForCodes.includes(error.code)) {
sentryService.captureException(error, {
tags: {
component: 'launchdarkly',
action,
error_code: error.code,
},
});
}
} else {
const message = defaultMessage || `[LaunchDarkly] Failed to ${action}`;
console.warn(message, error);
sentryService.captureException(error, {
tags: {
component: 'launchdarkly',
action,
},
});
}
};
/**
* Safe wrapper for LaunchDarkly operations with error handling
*/
export const safeLaunchDarklyOperation = async <T>(
operation: () => Promise<T>,
action: string,
options?: {
skipSentryForCodes?: string[];
defaultMessage?: string;
},
): Promise<T | void> => {
try {
return await operation();
} catch (error) {
handleLaunchDarklyError(error, action, options);
}
};
|