Merge branch 'INDA-330-pii-update' into 'main'
[ProtonMail-WebClient.git] / applications / mail / src / app / constants.ts
blobcceeeec12e65d4e343ee74d09e998a933afe0fc9
1 import { defaultESContext } from '@proton/encrypted-search';
2 import { getAppHref } from '@proton/shared/lib/apps/helper';
3 import { APPS, DEFAULT_MAIL_PAGE_SIZE, MAILBOX_LABEL_IDS } from '@proton/shared/lib/constants';
4 import { getKnowledgeBaseUrl } from '@proton/shared/lib/helpers/url';
6 import type { ESDBStatusMail, EncryptedSearchFunctionsMail } from './models/encryptedSearch';
8 export const MAIN_ROUTE_PATH = '/:labelID?/:elementID?/:messageID?';
9 export const EXPIRATION_CHECK_FREQUENCY = 10000; // each 10 seconds
10 export const MAX_EXPIRATION_TIME = 672; // hours
11 export const DEFAULT_EO_EXPIRATION_DAYS = 28;
12 export const DEFAULT_PLACEHOLDERS_COUNT = DEFAULT_MAIL_PAGE_SIZE;
13 export const ATTACHMENT_MAX_SIZE = 25000000; // bytes -> 25MB
14 export const LARGE_KEY_SIZE = 50 * 1024;
15 export const LOAD_RETRY_COUNT = 3;
16 export const LOAD_RETRY_DELAY = 3000; // in ms => 3s
17 export const PREVENT_CANCEL_SEND_INTERVAL = 30000; // Prevent form cancelling a message about to be sent 30s before
19 export const ADVANCED_SEARCH_OVERLAY_CLOSE_EVENT = 'advancedsearchclose';
21 export const UNDO_SEND_DELAY = 5000;
23 export const SCHEDULED_MESSAGES_LIMIT = 100;
24 export const SCHEDULED_MAX_DATE_DAYS = 90;
25 export const EXPIRATION_TIME_MAX_DAYS = 730; // 2 years
26 /**
27  * We can't schedule a message before this 120sec buffer
28  * This can be applied to snoozed message and schedule send
29  */
30 export const FUTURE_MESSAGES_BUFFER = 120;
32 export const MIN_DELAY_SENT_NOTIFICATION = 2500;
34 export const MAIL_ACTION_DEFAULT_CHUNK_SIZE = 10;
36 export const ELEMENT_TYPES = {
37     MESSAGE: 'message',
38     CONVERSATION: 'conversation',
41 export const LABEL_IDS_TO_HUMAN = {
42     [MAILBOX_LABEL_IDS.INBOX]: 'inbox',
43     [MAILBOX_LABEL_IDS.ALL_DRAFTS]: 'all-drafts',
44     [MAILBOX_LABEL_IDS.ALL_SENT]: 'all-sent',
45     [MAILBOX_LABEL_IDS.TRASH]: 'trash',
46     [MAILBOX_LABEL_IDS.SPAM]: 'spam',
47     [MAILBOX_LABEL_IDS.ALL_MAIL]: 'all-mail',
48     [MAILBOX_LABEL_IDS.ALMOST_ALL_MAIL]: 'almost-all-mail',
49     [MAILBOX_LABEL_IDS.ARCHIVE]: 'archive',
50     [MAILBOX_LABEL_IDS.SENT]: 'sent',
51     [MAILBOX_LABEL_IDS.DRAFTS]: 'drafts',
52     [MAILBOX_LABEL_IDS.STARRED]: 'starred',
53     [MAILBOX_LABEL_IDS.OUTBOX]: 'outbox',
54     [MAILBOX_LABEL_IDS.SCHEDULED]: 'scheduled',
55     [MAILBOX_LABEL_IDS.SNOOZED]: 'snoozed',
58 export const HUMAN_TO_LABEL_IDS = Object.entries(LABEL_IDS_TO_HUMAN).reduce((acc, [key, value]) => {
59     acc[value] = key;
60     return acc;
61 }, Object.create(null));
63 // List of location where messages are marked automatically as read after moving by the API
64 export const LABELS_AUTO_READ = [MAILBOX_LABEL_IDS.TRASH];
66 // List of location that cannot be change by user interaction
67 export const LABELS_UNMODIFIABLE_BY_USER = [
68     MAILBOX_LABEL_IDS.ALL_MAIL,
69     MAILBOX_LABEL_IDS.ALMOST_ALL_MAIL,
70     MAILBOX_LABEL_IDS.ALL_SENT,
71     MAILBOX_LABEL_IDS.ALL_DRAFTS,
72     MAILBOX_LABEL_IDS.OUTBOX,
73     MAILBOX_LABEL_IDS.SCHEDULED,
74     MAILBOX_LABEL_IDS.SNOOZED,
77 export enum ENCRYPTED_STATUS {
78     PGP_MIME = 8, // Used for attachment
81 export enum LINK_TYPES {
82     WEB = 'web',
83     EMAIL = 'email',
84     PHONE = 'phone',
87 export enum MESSAGE_ACTIONS {
88     NEW = -1,
89     REPLY = 0,
90     REPLY_ALL = 1,
91     FORWARD = 2,
94 export const MAILTO_PROTOCOL_HANDLER_SEARCH_PARAM = `mailto`;
95 // Path: /inbox/#mailto=%s
96 export const MAILTO_PROTOCOL_HANDLER_PATH = `/${
97     LABEL_IDS_TO_HUMAN[MAILBOX_LABEL_IDS.INBOX]
98 }/#${MAILTO_PROTOCOL_HANDLER_SEARCH_PARAM}=%s`;
100 export enum SAVE_DRAFT_ERROR_CODES {
101     MESSAGE_ALREADY_SENT = 15034,
102     DRAFT_DOES_NOT_EXIST = 15033,
105 export enum SEND_EMAIL_ERROR_CODES {
106     MESSAGE_ALREADY_SENT = 2500,
109 export enum UPLOAD_ATTACHMENT_ERROR_CODES {
110     MESSAGE_ALREADY_SENT = 11114,
111     STORAGE_QUOTA_EXCEEDED = 11100,
114 export const MESSAGE_ALREADY_SENT_INTERNAL_ERROR = 'Message already sent';
115 export const STORAGE_QUOTA_EXCEEDED_INTERNAL_ERROR = 'Storage quota exceeded';
117 export const DRAG_ELEMENT_KEY = 'drag-element';
118 export const DRAG_ELEMENT_ID_KEY = 'drag-element-id';
119 export const DRAG_ADDRESS_KEY = 'drag-address';
120 export const DRAG_ADDRESS_SIZE_KEY = 'drag-address-size';
122 export const MAX_ELEMENT_LIST_LOAD_RETRIES = 3;
124 // ES constants
125 export const defaultESMailStatus: ESDBStatusMail = {
126     dropdownOpened: false,
127     temporaryToggleOff: false,
128     lastContentTime: 0,
130 export const defaultESContextMail: EncryptedSearchFunctionsMail = {
131     ...defaultESContext,
132     openDropdown: () => {},
133     closeDropdown: () => {},
134     setTemporaryToggleOff: () => {},
135     esStatus: { ...defaultESContext.esStatus, ...defaultESMailStatus },
137 export const MAIL_EVENTLOOP_NAME = 'core';
139 export const MAIL_UPSELL_BANNERS_OPTIONS_URLS = {
140     plansSelection: '/upgrade',
141     protonBusiness: '/upgrade?business',
142     vpn: getAppHref('/vpn/vpn-apps', APPS.PROTONACCOUNT),
143     drive: getAppHref('/', APPS.PROTONDRIVE),
144     pass: getAppHref('/', APPS.PROTONPASS),
145     securityAndPrivacy: '/security',
148 export const restoringEncryptedMessagesURL = getKnowledgeBaseUrl('/recover-encrypted-messages-files');
149 export const reActivateKeySettingsURL = '/encryption-keys';
151 export const emailTrackerProtectionURL = getKnowledgeBaseUrl('/email-tracker-protection');
153 // Used for main action such as "label as", "move to" and "mark as read/unread"
154 export const SUCCESS_NOTIFICATION_EXPIRATION = 7500;
156 export const EO_REDIRECT_PATH = '/eo';
157 export const EO_MESSAGE_REDIRECT_PATH = `${EO_REDIRECT_PATH}/message`;
158 export const EO_REPLY_REDIRECT_PATH = `${EO_REDIRECT_PATH}/reply`;
160 export const EO_MAX_REPLIES_NUMBER = 5;
162 // Keys used for secure session storage
163 export const EO_TOKEN_KEY = 'proton:eo_token';
164 export const EO_DECRYPTED_TOKEN_KEY = 'proton:eo_decrypted_token';
165 export const EO_PASSWORD_KEY = 'proton:eo_password';
167 export const MAX_ROW_ATTACHMENT_THUMBNAILS = 3;
168 export const MAX_COLUMN_ATTACHMENT_THUMBNAILS = 2;
170 export const NO_REPLY_EMAIL_DONT_SHOW_AGAIN_KEY = 'no-reply-email-dont-show-again';