Cleanup - unused files / unused exports / duplicate exports
[ProtonMail-WebClient.git] / packages / shared / lib / apps / product.ts
blobdf6be4a0728fadcc6af14f12a64ef1a15355e71f
1 import type { APP_NAMES } from '@proton/shared/lib/constants';
2 import { APPS } from '@proton/shared/lib/constants';
4 import { captureMessage } from '../helpers/sentry';
6 export const otherProductParamValues = ['generic', 'business'] as const;
7 export type OtherProductParam = (typeof otherProductParamValues)[number];
8 export type ProductParam = APP_NAMES | OtherProductParam | undefined;
10 export const normalizeProduct = (product: ProductParam) => {
11     if (!product) {
12         return;
13     }
14     // Converts:
15     // proton-mail -> mail
16     // proton-vpn-settings -> vpn
17     if (product === APPS.PROTONVPN_SETTINGS) {
18         return 'vpn';
19     }
20     // Docs is a sub-product of drive and doesn't have its own attribution as of now, so use drive
21     if (product === APPS.PROTONDOCS) {
22         return 'drive';
23     }
24     return product.replace('proton-', '');
27 export interface ProductHeaderContext {
28     endpoint?: string;
29     product?: any;
30     emptyProduct?: boolean;
33 function notifySentry(normalizedProduct: string | undefined, context?: ProductHeaderContext) {
34     const isAllowed = ['generic', 'mail', 'drive', 'calendar', 'vpn', 'business', 'pass', 'wallet'].includes(
35         '' + normalizedProduct
36     );
37     if (!isAllowed) {
38         captureMessage('Wrong product header', { level: 'error', extra: { normalizedProduct, context } });
39     }
42 export const getProductHeaders = (product: ProductParam, context?: ProductHeaderContext) => {
43     if (!product) {
44         notifySentry(undefined, {
45             ...context,
46             emptyProduct: true,
47         });
48         return;
49     }
50     const normalizedProduct = normalizeProduct(product);
51     notifySentry(normalizedProduct, context);
53     return { 'x-pm-product': normalizedProduct };