Merge branch 'renovate/all-minor-patch' into 'main'
[ProtonMail-WebClient.git] / packages / metrics / lib / observeApiError.ts
blob0e882c9bcb511afe10842bf906d7d6800fc3dba0
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(
8     error: any,
9     metricObserver: (status: MetricsApiStatusTypes) => void,
10     ignoreCodes = [
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,
16     ]
17 ) {
18     if (!error) {
19         return;
20     }
22     const { status, code } = getApiError(error);
24     if (
25         !status ||
26         status === -1 ||
27         error?.name === 'AbortError' ||
28         getIsConnectionIssue(error) ||
29         ignoreCodes.includes(code)
30     ) {
31         return;
32     }
34     if (status >= 500) {
35         return metricObserver('5xx');
36     }
38     if (status >= 400) {
39         return metricObserver('4xx');
40     }
42     return metricObserver('failure');