Use same lock values as mobile clients
[ProtonMail-WebClient.git] / packages / shared / lib / api / calendars.ts
blobde25d6ed77ac964813e84e5b58b1ba63779d4a86
1 import { CALENDAR_VALIDATION_MODE } from '../calendar/constants';
2 import type {
3     Attendee,
4     CalendarNotificationSettings,
5     CalendarSettings,
6     CalendarUserSettings,
7 } from '../interfaces/calendar';
8 import type {
9     CalendarCreateArguments,
10     CalendarCreateOrUpdateEventBlobData,
11     CalendarEventsIDsQuery,
12     CalendarEventsQuery,
13     CalendarExportEventsQuery,
14     CalendarKeysResetData,
15     CalendarSetupData,
16     CreateCalendarMemberData,
17     CreatePublicLinks,
18     CreateSinglePersonalEventData,
19     GetBusySlotsParams,
20     GetEventByUIDArguments,
21     QueryCalendarAlarms,
22     SyncMultipleEventsData,
23     UpdateCalendarInviteData,
24     UpdateCalendarMemberData,
25 } from '../interfaces/calendar/Api';
26 import type { Nullable, RequireOnly } from '../interfaces/utils';
27 import type { PaginationParams } from './interface';
29 const CALENDAR_V1 = 'calendar/v1';
31 export const queryLatestModelEventID = (calendarID: string) => ({
32     url: `${CALENDAR_V1}/${calendarID}/modelevents/latest`,
33     method: 'get',
34 });
36 export const queryModelEvents = (calendarID: string, eventID: string) => ({
37     url: `${CALENDAR_V1}/${calendarID}/modelevents/${eventID}`,
38     method: 'get',
39 });
41 export const queryCalendars = () => ({
42     url: `${CALENDAR_V1}`,
43     method: 'get',
44 });
46 export const createCalendar = (data: CalendarCreateArguments) => ({
47     url: `${CALENDAR_V1}`,
48     method: 'post',
49     data,
50 });
52 export const setupCalendar = (calendarID: string, data: CalendarSetupData) => ({
53     url: `${CALENDAR_V1}/${calendarID}/keys`,
54     method: 'post',
55     data,
56 });
58 export const getCalendar = (calendarID: string) => ({
59     url: `${CALENDAR_V1}/${calendarID}`,
60     method: 'get',
61 });
63 export const getFullCalendar = (calendarID: string) => ({
64     url: `${CALENDAR_V1}/${calendarID}/bootstrap`,
65     method: 'get',
66 });
68 export const getCalendarKeys = (calendarID: string) => ({
69     url: `${CALENDAR_V1}/${calendarID}/keys`,
70     method: 'get',
71 });
73 export const getAllCalendarKeys = (calendarID: string) => ({
74     url: `${CALENDAR_V1}/${calendarID}/keys/all`,
75     method: 'get',
76 });
78 export const getPassphrases = (calendarID: string) => ({
79     url: `${CALENDAR_V1}/${calendarID}/passphrases`,
80     method: 'get',
81 });
83 export const getPassphrase = (calendarID: string) => ({
84     url: `${CALENDAR_V1}/${calendarID}/passphrase`,
85     method: 'get',
86 });
88 export const reactivateCalendarKey = (calendarID: string, keyID: string, data: { PrivateKey: string }) => ({
89     url: `${CALENDAR_V1}/${calendarID}/keys/${keyID}`,
90     method: 'put',
91     data,
92 });
94 export const getCalendarGroupReset = () => ({
95     url: `${CALENDAR_V1}/keys/reset`,
96     method: 'get',
97 });
99 export const resetCalendars = (data: { CalendarKeys: CalendarKeysResetData }) => ({
100     url: `${CALENDAR_V1}/keys/reset`,
101     method: 'post',
102     data,
105 export const removeCalendar = (calendarID: string) => ({
106     url: `${CALENDAR_V1}/${calendarID}`,
107     method: 'delete',
110 export const removeHolidaysCalendar = (calendarID: string) => ({
111     url: `${CALENDAR_V1}/${calendarID}/managed`,
112     method: 'delete',
115 export const queryMembers = (calendarID: string, params?: PaginationParams) => ({
116     url: `${CALENDAR_V1}/${calendarID}/members`,
117     method: 'get',
118     params,
121 export const getAllMembers = (calendarID: string) => ({
122     url: `${CALENDAR_V1}/${calendarID}/members/all`,
123     method: 'get',
126 export const getCalendarInvitations = (calendarID: string) => ({
127     url: `${CALENDAR_V1}/${calendarID}/invitations`,
128     method: 'get',
131 export const getAllInvitations = () => ({
132     url: `${CALENDAR_V1}/invitations`,
133     method: 'get',
136 export const addMember = (
137     calendarID: string,
138     data: { AddressID: string; Signature: string; Members: CreateCalendarMemberData[] }
139 ) => ({
140     url: `${CALENDAR_V1}/${calendarID}/members`,
141     method: 'post',
142     data,
145 export const updateMember = (calendarID: string, memberID: string, data: Partial<UpdateCalendarMemberData>) => ({
146     url: `${CALENDAR_V1}/${calendarID}/members/${memberID}`,
147     method: 'put',
148     data,
151 export const updateMemberPermission = (
152     calendarID: string,
153     memberID: string,
154     data: RequireOnly<Pick<UpdateCalendarMemberData, 'Permissions' | 'PassphraseKeyPacket'>, 'Permissions'>
155 ) => ({
156     url: `${CALENDAR_V1}/${calendarID}/members/${memberID}/permission`,
157     method: 'put',
158     data,
161 export const updateInvitation = (
162     calendarID: string,
163     invitationID: string,
164     data: Partial<UpdateCalendarInviteData>
165 ) => ({
166     url: `${CALENDAR_V1}/${calendarID}/invitations/${invitationID}`,
167     method: 'put',
168     data,
171 export const removeMember = (calendarID: string, memberID: string) => ({
172     url: `${CALENDAR_V1}/${calendarID}/members/${memberID}`,
173     method: 'delete',
176 export const getInvitation = (calendarID: string, invitationID: string) => ({
177     url: `${CALENDAR_V1}/${calendarID}/invitations/${invitationID}`,
178     method: 'get',
181 export const removeInvitation = (calendarID: string, invitationID: string) => ({
182     url: `${CALENDAR_V1}/${calendarID}/invitations/${invitationID}`,
183     method: 'delete',
186 export const acceptInvitation = (calendarID: string, addressID: string, data: { Signature: string }) => ({
187     url: `${CALENDAR_V1}/${calendarID}/invitations/${addressID}/accept`,
188     method: 'put',
189     data,
192 export const rejectInvitation = (calendarID: string, addressID: string) => ({
193     url: `${CALENDAR_V1}/${calendarID}/invitations/${addressID}/reject`,
194     method: 'put',
197 export const getEventsCount = (calendarID: string) => ({
198     url: `${CALENDAR_V1}/${calendarID}/events/count`,
199     method: 'get',
202 export const queryEvents = (
203     calendarID: string,
204     params: CalendarEventsQuery | CalendarExportEventsQuery | GetEventByUIDArguments
205 ) => ({
206     url: `${CALENDAR_V1}/${calendarID}/events`,
207     method: 'get',
208     params,
211 export const queryEventsIDs = (calendarID: string, params: CalendarEventsIDsQuery) => ({
212     url: `${CALENDAR_V1}/${calendarID}/events/ids`,
213     method: 'get',
214     params,
217 export const getEvent = (calendarID: string, eventID: string) => ({
218     url: `${CALENDAR_V1}/${calendarID}/events/${eventID}`,
219     method: 'get',
222 export const getEventByUID = (params: GetEventByUIDArguments) => ({
223     url: `${CALENDAR_V1}/events`,
224     method: 'get',
225     params,
228 export const deleteEvent = (calendarID: string, eventID: string) => ({
229     url: `${CALENDAR_V1}/${calendarID}/events/${eventID}`,
230     method: 'delete',
233 export const updatePersonalEventPart = (calendarID: string, eventID: string, data: CreateSinglePersonalEventData) => ({
234     url: `${CALENDAR_V1}/${calendarID}/events/${eventID}/personal`,
235     method: 'put',
236     data,
239 export const updateAttendeePartstat = (
240     calendarID: string,
241     eventID: string,
242     attendeeID: string,
243     data: Pick<Attendee, 'Status' | 'UpdateTime'>
244 ) => ({
245     url: `${CALENDAR_V1}/${calendarID}/events/${eventID}/attendees/${attendeeID}`,
246     method: 'put',
247     data,
250 export const attendeeDeleteSingleEdit = (
251     calendarID: string,
252     eventID: string,
253     data: Pick<CalendarCreateOrUpdateEventBlobData, 'CalendarEventContent'>
254 ) => ({
255     url: `${CALENDAR_V1}/${calendarID}/events/${eventID}/attendee_delete_single_edit`,
256     method: 'put',
257     data,
260 export const upgradeP2PInvite = (
261     calendarID: string,
262     eventID: string,
263     data: Pick<CalendarCreateOrUpdateEventBlobData, 'SharedKeyPacket'>
264 ) => ({
265     url: `${CALENDAR_V1}/${calendarID}/events/${eventID}/upgrade`,
266     method: 'put',
267     data,
270 export const acceptInvite = (uid: string, data: { Signature: string }) => ({
271     url: `${CALENDAR_V1}/events/${uid}/accept`,
272     method: 'put',
273     data,
276 export const getCalendarSettings = (calendarID: string) => ({
277     url: `${CALENDAR_V1}/${calendarID}/settings`,
278     method: 'get',
281 export const updateCalendarSettings = (calendarID: string, data: Partial<CalendarSettings>) => ({
282     url: `${CALENDAR_V1}/${calendarID}/settings`,
283     method: 'put',
284     data,
287 export const getCalendarUserSettings = () => ({
288     url: 'settings/calendar',
289     method: 'get',
292 export const updateCalendarUserSettings = (data: Partial<CalendarUserSettings>) => ({
293     url: 'settings/calendar',
294     method: 'put',
295     data,
298 export const getAllowedTimeZones = () => ({
299     url: `${CALENDAR_V1}/timezones`,
300     method: 'get',
303 export const getVtimezones = (Timezones: string[]) => ({
304     // params doesn't work correctly so
305     url: `${CALENDAR_V1}/vtimezones?${Timezones.map((tzid) => `Timezones[]=${tzid}`).join('&')}`,
306     method: 'get',
307     // params: { Timezones }
310 export const queryCalendarAlarms = (calendarID: string, params: QueryCalendarAlarms) => ({
311     url: `${CALENDAR_V1}/${calendarID}/alarms`,
312     method: 'get',
313     params,
316 export const getCalendarAlarm = (calendarID: string, alarmID: string) => ({
317     url: `${CALENDAR_V1}/${calendarID}/alarms/${alarmID}`,
318     method: 'get',
321 export const syncMultipleEvents = (calendarID: string, data: SyncMultipleEventsData) => ({
322     url: `${CALENDAR_V1}/${calendarID}/events/sync`,
323     method: 'put',
324     data,
327 export const createPublicLink = (calendarID: string, data: CreatePublicLinks) => ({
328     url: `${CALENDAR_V1}/${calendarID}/urls`,
329     method: 'post',
330     data,
333 export const getPublicLinks = (calendarID: string) => ({
334     url: `${CALENDAR_V1}/${calendarID}/urls`,
335     method: 'get',
338 export const deletePublicLink = ({ calendarID, urlID }: { calendarID: string; urlID: string }) => ({
339     url: `${CALENDAR_V1}/${calendarID}/urls/${urlID}`,
340     method: 'delete',
343 export const editPublicLink = ({
344     calendarID,
345     urlID,
346     encryptedPurpose,
347 }: {
348     calendarID: string;
349     urlID: string;
350     encryptedPurpose: Nullable<string>;
351 }) => ({
352     url: `${CALENDAR_V1}/${calendarID}/urls/${urlID}`,
353     method: 'put',
354     data: { EncryptedPurpose: encryptedPurpose },
357 export const getSubscriptionParameters = (calendarID: string) => ({
358     url: `${CALENDAR_V1}/${calendarID}/subscription`,
359     method: 'get',
362 export const validateSubscription = ({
363     url: URL,
364     mode: Mode = CALENDAR_VALIDATION_MODE.DOWNLOAD_AND_PARSE,
365 }: {
366     url: string;
367     mode?: CALENDAR_VALIDATION_MODE;
368 }) => ({
369     url: `${CALENDAR_V1}/subscription/validate`,
370     method: 'post',
371     data: { URL, Mode },
374 export const getDirectoryCalendars = (type: number) => ({
375     url: `${CALENDAR_V1}/directory?Type=${type}`,
376     method: 'get',
379 export const joinHolidaysCalendar = (
380     calendarID: string,
381     addressID: string,
382     data: {
383         PassphraseKeyPacket: string;
384         Signature: string;
385         Color: string;
386         DefaultFullDayNotifications: CalendarNotificationSettings[];
387         Priority?: number;
388     }
389 ) => ({
390     url: `${CALENDAR_V1}/${calendarID}/invitations/${addressID}/join`,
391     method: 'post',
392     data,
395 export const getBusySlots = (emailAddress: string, params: GetBusySlotsParams) => ({
396     url: `${CALENDAR_V1}/${emailAddress}/busy-schedule`,
397     method: 'get',
398     params,