Cleanup - unused files / unused exports / duplicate exports
[ProtonMail-WebClient.git] / packages / shared / lib / apps / helper.ts
blob4d6a446fc0d08ec4ccd730b661c585022da1e8b5
1 import isTruthy from '@proton/utils/isTruthy';
3 import { getLocalIDPath, stripLocalBasenameFromPathname } from '../authentication/pathnameHelper';
4 import type { ExtensionApp } from '../browser/extension';
5 import type { APP_NAMES } from '../constants';
6 import { APPS, APPS_CONFIGURATION, EXTENSIONS, VPN_HOSTNAME } from '../constants';
7 import {
8     isElectronMail,
9     isElectronOnLinux,
10     isElectronOnMac,
11     isElectronOnWindows,
12     isElectronPass,
13 } from '../helpers/desktop';
14 import { stripLeadingAndTrailingSlash } from '../helpers/string';
15 import window from '../window';
17 interface TargetLocation {
18     hostname: string;
19     protocol: string;
20     port: string;
23 const getSSOAppTargetLocation = (location: TargetLocation = window.location): TargetLocation => {
24     if (location.hostname === VPN_HOSTNAME) {
25         return {
26             hostname: 'proton.me',
27             protocol: 'https:',
28             port: '',
29         };
30     }
31     return location;
34 export const getAppHref = (
35     to: string,
36     toApp: APP_NAMES,
37     localID?: number,
38     targetLocation: TargetLocation = window.location
39 ) => {
40     const { subdomain: targetSubdomain } = APPS_CONFIGURATION[toApp];
41     const { hostname, protocol, port } = getSSOAppTargetLocation(targetLocation);
42     const lastIndex = hostname.lastIndexOf('.');
43     const secondLevelIndex = hostname.indexOf('.');
44     // If there's no second level, just use the original hostname. NOTE: Does not work for tlds as .co.uk
45     const secondLevelDomain = lastIndex !== secondLevelIndex ? hostname.substr(secondLevelIndex + 1) : hostname;
46     const targetDomain = [targetSubdomain, secondLevelDomain].filter(isTruthy).join('.');
47     const targetPort = port.length > 0 ? `:${port}` : '';
49     const path = [
50         targetDomain + targetPort,
51         stripLeadingAndTrailingSlash(''),
52         getLocalIDPath(localID),
53         stripLeadingAndTrailingSlash(stripLocalBasenameFromPathname(to)),
54     ]
55         .filter(isTruthy)
56         .join('/');
58     return `${protocol}//${path}`;
61 export const getAppHrefBundle = (to: string, toApp: APP_NAMES) => {
62     const path = [APPS_CONFIGURATION[toApp].publicPath, to]
63         .map(stripLeadingAndTrailingSlash)
64         .filter(isTruthy)
65         .join('/');
66     return `/${path}`;
69 export const getAccountSettingsApp = () => APPS.PROTONACCOUNT;
71 export const getClientID = (appName: APP_NAMES): string => {
72     const app = isElectronMail ? APPS.PROTONMAIL : isElectronPass ? APPS.PROTONPASS : appName;
74     const {
75         clientID,
76         windowsClientID = clientID,
77         macosClientID = clientID,
78         linuxClientID = clientID,
79     } = APPS_CONFIGURATION[app];
81     if (isElectronOnWindows) {
82         return windowsClientID;
83     }
84     if (isElectronOnMac) {
85         return macosClientID;
86     }
87     if (isElectronOnLinux) {
88         return linuxClientID;
89     }
90     return clientID;
93 export const isExtension = (appName: APP_NAMES): appName is ExtensionApp => {
94     return EXTENSIONS[appName as keyof typeof EXTENSIONS] !== undefined;
97 export const getExtension = (appName: APP_NAMES) => {
98     return EXTENSIONS[appName as keyof typeof EXTENSIONS];
101 export const getAppName = (appName: APP_NAMES) => {
102     return APPS_CONFIGURATION[appName].name;
105 export const getAppShortName = (appName: APP_NAMES) => {
106     return APPS_CONFIGURATION[appName].bareName;
109 export const getInvoicesPathname = () => {
110     return '/dashboard#invoices';