Use same lock values as mobile clients
[ProtonMail-WebClient.git] / packages / shared / lib / calendar / constants.ts
blob2a9ed9e1ed15e3c11ed9d6de9fce699b349f5207
1 import { ACCENT_COLORS } from '../colors';
2 import { BASE_SIZE } from '../constants';
4 export const MAX_CALENDARS_FREE = 3;
5 export const MAX_CALENDARS_PAID = 25; // Only paid mail
6 export const MAX_CALENDARS_FAMILY = 150;
7 export const MAX_CALENDARS_DUO = 50;
9 export const MAX_DEFAULT_NOTIFICATIONS = 5;
10 export const MAX_NOTIFICATIONS = 10;
11 export const MAX_ATTENDEES = 100;
12 export const MAX_CALENDAR_MEMBERS = 49;
13 export const MAX_LINKS_PER_CALENDAR = 5;
15 export enum CALENDAR_CARD_TYPE {
16     CLEAR_TEXT = 0,
17     ENCRYPTED = 1,
18     SIGNED = 2,
19     ENCRYPTED_AND_SIGNED = 3,
22 export enum CALENDAR_PERMISSIONS {
23     SUPER_OWNER = 1,
24     OWNER = 2,
25     ADMIN = 4,
26     READ_MEMBER_LIST = 8,
27     WRITE = 16,
28     READ = 32,
29     AVAILABILITY = 64,
32 export enum ATTENDEE_PERMISSIONS {
33     SEE = 1,
34     INVITE = 2,
35     SEE_AND_INVITE = 3,
36     EDIT = 4,
37     DELETE = 8,
40 export const DEFAULT_ATTENDEE_PERMISSIONS = ATTENDEE_PERMISSIONS.SEE;
42 export enum CALENDAR_FLAGS {
43     INACTIVE = 0,
44     ACTIVE = 1,
45     UPDATE_PASSPHRASE = 2,
46     RESET_NEEDED = 4,
47     INCOMPLETE_SETUP = 8,
48     LOST_ACCESS = 16,
49     SELF_DISABLED = 32,
50     SUPER_OWNER_DISABLED = 64,
53 export enum CALENDAR_TYPE {
54     PERSONAL = 0,
55     SUBSCRIPTION = 1,
56     HOLIDAYS = 2,
59 export enum CALENDAR_STATUS {
60     ACTIVE = 1,
61     DELETED = 2,
64 export enum CALENDAR_DISPLAY {
65     HIDDEN = 0,
66     VISIBLE = 1,
69 export enum CALENDAR_SHARE_BUSY_TIME_SLOTS {
70     NO = 0,
71     YES = 1,
74 export enum ICAL_CALSCALE {
75     GREGORIAN = 'GREGORIAN',
78 export enum ICAL_METHOD {
79     PUBLISH = 'PUBLISH',
80     REQUEST = 'REQUEST',
81     REPLY = 'REPLY',
82     CANCEL = 'CANCEL',
83     COUNTER = 'COUNTER',
84     DECLINECOUNTER = 'DECLINECOUNTER',
85     ADD = 'ADD',
86     REFRESH = 'REFRESH',
89 export const ICAL_METHODS_ATTENDEE = [ICAL_METHOD.REPLY, ICAL_METHOD.COUNTER, ICAL_METHOD.REFRESH];
90 export const ICAL_METHODS_ORGANIZER = [
91     ICAL_METHOD.REQUEST,
92     ICAL_METHOD.CANCEL,
93     ICAL_METHOD.ADD,
94     ICAL_METHOD.DECLINECOUNTER,
97 export enum ICAL_EVENT_STATUS {
98     TENTATIVE = 'TENTATIVE',
99     CONFIRMED = 'CONFIRMED',
100     CANCELLED = 'CANCELLED',
103 export enum ICAL_ATTENDEE_RSVP {
104     TRUE = 'TRUE',
105     FALSE = 'FALSE',
108 export enum ICAL_ATTENDEE_ROLE {
109     REQUIRED = 'REQ-PARTICIPANT', // Indicates a participant whose participation is required
110     OPTIONAL = 'OPT-PARTICIPANT', // Indicates a participant whose participation is optional
111     NON = 'NON-PARTICIPANT', // Indicates a participant who is copied for information purposes only
114 export enum ICAL_ATTENDEE_STATUS {
115     NEEDS_ACTION = 'NEEDS-ACTION',
116     ACCEPTED = 'ACCEPTED',
117     DECLINED = 'DECLINED',
118     TENTATIVE = 'TENTATIVE',
119     DELEGATED = 'DELEGATED',
122 export enum ICAL_ALARM_ACTION {
123     DISPLAY = 'DISPLAY',
124     EMAIL = 'EMAIL',
125     AUDIO = 'AUDIO',
128 export enum ATTENDEE_STATUS_API {
129     NEEDS_ACTION = 0,
130     TENTATIVE = 1,
131     DECLINED = 2,
132     ACCEPTED = 3,
135 export const MAX_ICAL_SEQUENCE = 2 ** 31;
137 export const MAX_CHARS_API = {
138     UID: 191,
139     CALENDAR_NAME: 100,
140     CALENDAR_DESCRIPTION: 255,
141     TITLE: 255,
142     EVENT_DESCRIPTION: 3000,
143     LOCATION: 255,
146 export const MAX_CHARS_CLEARTEXT = {
147     PURPOSE: 500,
150 export const MINIMUM_DATE = new Date(1970, 0, 1);
151 export const MINIMUM_DATE_UTC = new Date(
152     Date.UTC(MINIMUM_DATE.getFullYear(), MINIMUM_DATE.getMonth(), MINIMUM_DATE.getDate())
154 export const MAXIMUM_DATE = new Date(2037, 11, 31);
155 export const MAXIMUM_DATE_UTC = new Date(
156     Date.UTC(MAXIMUM_DATE.getFullYear(), MAXIMUM_DATE.getMonth(), MAXIMUM_DATE.getDate())
159 export enum FREQUENCY {
160     ONCE = 'ONCE',
161     DAILY = 'DAILY',
162     WEEKLY = 'WEEKLY',
163     MONTHLY = 'MONTHLY',
164     YEARLY = 'YEARLY',
165     CUSTOM = 'CUSTOM',
166     OTHER = 'OTHER',
169 export const FREQUENCY_INTERVALS_MAX = {
170     [FREQUENCY.ONCE]: 1000 - 1,
171     [FREQUENCY.DAILY]: 1000 - 1,
172     [FREQUENCY.WEEKLY]: 5000 - 1,
173     [FREQUENCY.MONTHLY]: 1000 - 1,
174     [FREQUENCY.YEARLY]: 100 - 1,
175     [FREQUENCY.CUSTOM]: 1000 - 1,
176     [FREQUENCY.OTHER]: 1,
178 export const FREQUENCY_COUNT_MAX = 50 - 1;
179 export const FREQUENCY_COUNT_MAX_INVITATION = 500 - 1;
181 export enum DAILY_TYPE {
182     ALL_DAYS = 0,
185 export enum WEEKLY_TYPE {
186     ON_DAYS = 0,
189 export enum MONTHLY_TYPE {
190     ON_MONTH_DAY = 0,
191     ON_NTH_DAY = 1,
192     ON_MINUS_NTH_DAY = -1,
195 export enum YEARLY_TYPE {
196     BY_MONTH_ON_MONTH_DAY = 0,
199 export enum END_TYPE {
200     NEVER = 'NEVER',
201     AFTER_N_TIMES = 'COUNT',
202     UNTIL = 'UNTIL',
205 export const ICAL_EXTENSIONS = ['ics', 'ical', 'ifb', 'icalendar'];
206 export const ICAL_MIME_TYPE = 'text/calendar';
208 export const DEFAULT_CALENDAR = {
209     name: 'My calendar',
210     color: ACCENT_COLORS[0],
211     description: '',
214 export enum VIEWS {
215     DAY = 1,
216     WEEK,
217     MONTH,
218     YEAR,
219     AGENDA,
220     CUSTOM,
221     MAIL,
222     DRIVE,
224     SEARCH,
227 export enum ACTION_VIEWS {
228     VIEW = 'VIEW',
231 export enum NOTIFICATION_WHEN {
232     BEFORE = '-',
233     AFTER = '',
236 export enum NOTIFICATION_UNITS {
237     WEEK = 1,
238     DAY = 2,
239     HOUR = 3,
240     MINUTE = 4,
243 export const NOTIFICATION_UNITS_MAX = {
244     [NOTIFICATION_UNITS.WEEK]: 1000 - 1,
245     [NOTIFICATION_UNITS.DAY]: 7000 - 1,
246     [NOTIFICATION_UNITS.HOUR]: 1000 - 1,
247     [NOTIFICATION_UNITS.MINUTE]: 10000 - 1,
250 export const DEFAULT_EVENT_DURATION = 30;
252 export const COLORS = {
253     BLACK: '#000',
254     WHITE: '#FFF',
257 export enum SAVE_CONFIRMATION_TYPES {
258     SINGLE = 1,
259     RECURRING,
262 export enum DELETE_CONFIRMATION_TYPES {
263     SINGLE = 1,
264     RECURRING,
267 export enum RECURRING_TYPES {
268     ALL = 1,
269     FUTURE,
270     SINGLE,
273 export const MAX_IMPORT_EVENTS = 15000;
274 export const MAX_IMPORT_EVENTS_STRING = MAX_IMPORT_EVENTS.toLocaleString();
275 export const MAX_IMPORT_FILE_SIZE = 10 * BASE_SIZE ** 2;
276 export const MAX_IMPORT_FILE_SIZE_STRING = '10 MB';
277 export const MAX_UID_CHARS_DISPLAY = 43;
278 export const MAX_FILENAME_CHARS_DISPLAY = 100;
279 export const IMPORT_CALENDAR_FAQ_URL = '/how-to-import-calendar-to-proton-calendar';
280 export const IMPORT_CALENDAR_UNSUPPORTED_FAQ_URL = `${IMPORT_CALENDAR_FAQ_URL}/#data-not-supported`;
282 export const TITLE_INPUT_ID = 'event-title-input';
283 export const FREQUENCY_INPUT_ID = 'event-frequency-input';
284 export const LOCATION_INPUT_ID = 'event-location-input';
285 export const NOTIFICATION_INPUT_ID = 'event-notification-input';
286 export const CALENDAR_INPUT_ID = 'event-calendar-input';
287 export const DESCRIPTION_INPUT_ID = 'event-description-input';
288 export const DATE_INPUT_ID = 'event-date-input';
289 export const PARTICIPANTS_INPUT_ID = 'event-participants-input';
290 export const MEMBERS_INPUT_ID = 'shared-members-input';
292 export enum IMPORT_ERROR_TYPE {
293     NO_FILE_SELECTED,
294     NO_ICS_FILE,
295     FILE_EMPTY,
296     FILE_TOO_BIG,
297     FILE_CORRUPTED,
298     INVALID_CALENDAR,
299     INVALID_METHOD,
300     NO_EVENTS,
301     TOO_MANY_EVENTS,
304 export const SHARED_SIGNED_FIELDS = [
305     'uid',
306     'dtstamp',
307     'dtstart',
308     'dtend',
309     'recurrence-id',
310     'rrule',
311     'exdate',
312     'organizer',
313     'sequence',
314 ] as const;
315 export const SHARED_ENCRYPTED_FIELDS = ['uid', 'dtstamp', 'created', 'description', 'summary', 'location'] as const;
317 export const CALENDAR_SIGNED_FIELDS = ['uid', 'dtstamp', 'exdate', 'status', 'transp'] as const;
318 export const CALENDAR_ENCRYPTED_FIELDS = ['uid', 'dtstamp', 'comment'] as const;
320 export const USER_SIGNED_FIELDS = ['uid', 'dtstamp'] as const;
321 export const USER_ENCRYPTED_FIELDS = [] as const;
323 export const ATTENDEES_SIGNED_FIELDS = [] as const;
324 export const ATTENDEES_ENCRYPTED_FIELDS = ['uid', 'attendee'] as const;
326 export const REQUIRED_SET = new Set(['uid', 'dtstamp'] as const);
328 // Set of taken keys to put the rest
329 export const TAKEN_KEYS = [
330     ...new Set([
331         ...SHARED_SIGNED_FIELDS,
332         ...SHARED_ENCRYPTED_FIELDS,
333         ...CALENDAR_SIGNED_FIELDS,
334         ...CALENDAR_ENCRYPTED_FIELDS,
335         ...USER_SIGNED_FIELDS,
336         ...USER_ENCRYPTED_FIELDS,
337         ...ATTENDEES_ENCRYPTED_FIELDS,
338         ...ATTENDEES_SIGNED_FIELDS,
339     ]),
340 ] as const;
342 export enum NOTIFICATION_TYPE_API {
343     EMAIL = 0,
344     DEVICE = 1,
347 export enum EVENT_VERIFICATION_STATUS {
348     SUCCESSFUL = 1,
349     NOT_VERIFIED = 0,
350     FAILED = -1,
353 export enum SETTINGS_VIEW {
354     DAY = 0,
355     WEEK = 1,
356     MONTH = 2,
357     YEAR = 3,
358     PLANNING = 4,
361 export enum CALENDAR_VALIDATION_MODE {
362     DOWNLOAD_ONLY = 0,
363     DOWNLOAD_AND_PARSE = 1,
366 export const CALENDAR_SETTINGS_ROUTE = {
367     GENERAL: '/general',
368     CALENDARS: '/calendars',
369     INTEROPS: '/import-export',
370     GET_APPS: '/get-the-apps',
373 export const CALENDAR_SETTINGS_SECTION_ID = {
374     TIME_ZONE: 'time-zone',
375     LAYOUT: 'layout',
376     INVITATIONS: 'invitations',
377     THEME: 'theme',
378     PERSONAL_CALENDARS: 'my-calendars',
379     OTHER_CALENDARS: 'other-calendars',
380     IMPORT: 'import',
381     EXPORT: 'export',
382     SHARE: 'share',
383     SHARE_PRIVATELY: 'share-privately',
384     SHARE_PUBLICLY: 'share-publicly',
385     MOBILE_APP: 'mobile-app',
386     DESKTOP_APP: 'desktop-app',
389 /** Visual limit of the attendees busy slots we display */
390 export const BUSY_TIME_SLOTS_MAX_ATTENDEES_DISPLAYED = 10;