1 import { getApiError, getIsConnectionIssue } from '@proton/shared/lib/api/helpers/apiErrorHelper';
2 import { API_CODES } from '@proton/shared/lib/constants';
3 import { API_CUSTOM_ERROR_CODES } from '@proton/shared/lib/errors';
5 export type MetricsApiStatusTypes = '4xx' | '5xx' | 'failure';
7 export default function observeApiError(
9 metricObserver: (status: MetricsApiStatusTypes) => void,
11 API_CUSTOM_ERROR_CODES.CARD_DECLINED,
12 API_CUSTOM_ERROR_CODES.HUMAN_VERIFICATION_REQUIRED,
13 API_CUSTOM_ERROR_CODES.INVALID_DOMAIN_NAME,
14 API_CUSTOM_ERROR_CODES.INVALID_URL,
15 API_CODES.ALREADY_EXISTS_ERROR,
22 const { status, code } = getApiError(error);
27 error?.name === 'AbortError' ||
28 getIsConnectionIssue(error) ||
29 ignoreCodes.includes(code)
35 return metricObserver('5xx');
39 return metricObserver('4xx');
42 return metricObserver('failure');