Merge branch 'feat/inda-383-daily-stat' into 'main'
[ProtonMail-WebClient.git] / packages / shared / lib / interfaces / calendar / Api.ts
bloba86843f746a0aac2130947ac0ae67c3f99b51990
1 import type { PaginationParams } from '../../api/interface';
2 import type { CALENDAR_DISPLAY, CALENDAR_TYPE } from '../../calendar/constants';
3 import type { ApiResponse } from '../Api';
4 import type { Nullable, RequireSome } from '../utils';
5 import type { CalendarNotificationSettings, CalendarSettings } from './Calendar';
6 import type { CalendarKey, CalendarPassphrase } from './CalendarKey';
7 import type { CalendarMember, CalendarMemberInvitation } from './CalendarMember';
8 import type { Attendee, CalendarEvent, CalendarEventData } from './Event';
9 import type { ACCESS_LEVEL } from './Link';
11 export type CalendarCreateData = {
12     Name: string;
13     Description: string;
14     Color: string;
15     Display: CALENDAR_DISPLAY;
16     URL?: string;
19 export enum DELETION_REASON {
20     NORMAL = 0,
21     CHANGE_CALENDAR = 1,
24 export interface CalendarCreateArguments extends CalendarCreateData {
25     IsImport?: 0 | 1;
26     AddressID: string;
29 export interface CalendarSetupData {
30     AddressID: string;
31     Signature: string;
32     PrivateKey: string;
33     Passphrase: {
34         DataPacket: string;
35         KeyPacket: string;
36     };
39 export interface CalendarSetupResponse extends ApiResponse {
40     Key: CalendarKey;
41     Passphrase: CalendarPassphrase;
44 export interface CreateOrResetCalendarPayload {
45     AddressID: string;
46     Signature: string;
47     PrivateKey: string;
48     Passphrase: {
49         DataPacket: string;
50         KeyPacket: string;
51     };
54 export interface CalendarKeysResetData {
55     [calendarID: string]: CalendarSetupData;
58 export interface CreateCalendarMemberData {
59     Email: string;
60     PassphraseKeyPacket: string;
61     Permissions: number;
64 export interface UpdateCalendarMemberData {
65     Permissions: number;
66     PassphraseKeyPacket: string;
67     Name: string;
68     Description: string;
69     Color: string;
70     Display: CALENDAR_DISPLAY;
73 export interface UpdateCalendarInviteData {
74     Permissions: number;
77 export enum CalendarEventsQueryType {
78     PartDayInsideWindow = 0,
79     PartDayBeforeWindow = 1,
80     FullDayInsideWindow = 2,
81     FullDayBeforeWindow = 3,
84 export interface CalendarEventsQuery extends PaginationParams {
85     Start: number;
86     End: number;
87     Timezone: string;
88     Type: CalendarEventsQueryType;
89     MetaDataOnly?: 0 | 1; // default is 0
92 export interface CalendarEventsIDsQuery {
93     Limit?: number;
94     AfterID?: string;
97 export interface CalendarExportEventsQuery extends PaginationParams {
98     BeginID?: string;
101 export interface GetEventByUIDArguments extends Partial<PaginationParams> {
102     UID: string;
103     RecurrenceID?: number;
104     CalendarType?: CALENDAR_TYPE;
107 export interface CalendarCreateOrUpdateEventBlobData {
108     CalendarKeyPacket?: string;
109     CalendarEventContent?: Omit<CalendarEventData, 'Author'>[];
110     SharedKeyPacket?: string;
111     SharedEventContent?: Omit<CalendarEventData, 'Author'>[];
112     Notifications: Nullable<CalendarNotificationSettings[]>;
113     Color: Nullable<string>;
114     AttendeesEventContent?: Omit<CalendarEventData, 'Author'>[];
115     Attendees?: Omit<Attendee, 'UpdateTime' | 'ID'>[];
116     CancelledOccurrenceContent?: Omit<CalendarEventData, 'Author'>[];
118 export type CalendarCreateEventBlobData = RequireSome<
119     CalendarCreateOrUpdateEventBlobData,
120     'SharedEventContent' | 'SharedKeyPacket'
123 interface CalendarCreateOrUpdateEventMetaData {
124     Permissions: number;
125     IsOrganizer?: 0 | 1;
126     IsPersonalSingleEdit?: boolean;
127     RemovedAttendeeAddresses?: string[];
128     AddedProtonAttendees?: {
129         Email: string;
130         AddressKeyPacket: string;
131     }[];
134 export interface CreateOrUpdateCalendarEventData
135     extends CalendarCreateOrUpdateEventBlobData,
136         CalendarCreateOrUpdateEventMetaData {}
137 export interface CreateSinglePersonalEventData {
138     Notifications: Nullable<CalendarNotificationSettings[]>;
139     Color: Nullable<string>;
142 export interface CreateLinkedCalendarEventData
143     extends RequireSome<Partial<CreateOrUpdateCalendarEventData>, 'SharedKeyPacket'> {
144     UID: string;
145     SharedEventID: string;
146     SourceCalendarID?: string;
149 export interface QueryCalendarAlarms {
150     Start: number;
151     End: number;
152     PageSize: number;
155 export interface CreateCalendarEventSyncData {
156     Overwrite?: 0 | 1;
157     Event: CreateOrUpdateCalendarEventData;
160 export interface DeleteCalendarEventSyncData {
161     ID: string;
162     DeletionReason?: DELETION_REASON;
165 export interface UpdateCalendarEventSyncData {
166     ID: string;
167     Event?: Omit<CreateOrUpdateCalendarEventData, 'SharedKeyPacket' | 'CalendarKeyPacket'>;
170 export interface CreateLinkedCalendarEventsSyncData {
171     Overwrite?: 0 | 1;
172     Event: CreateLinkedCalendarEventData;
175 export interface SyncMultipleEventsData {
176     MemberID: string;
177     IsImport?: 0 | 1;
178     Events: (
179         | CreateCalendarEventSyncData
180         | CreateLinkedCalendarEventsSyncData
181         | DeleteCalendarEventSyncData
182         | UpdateCalendarEventSyncData
183     )[];
186 export interface CreatePublicLinks {
187     AccessLevel: ACCESS_LEVEL;
188     CacheKeySalt: string;
189     CacheKeyHash: string;
190     EncryptedPassphrase: Nullable<string>;
191     EncryptedPurpose: Nullable<string>;
192     EncryptedCacheKey: string;
193     PassphraseID: Nullable<string>;
196 export interface SyncMultipleApiResponses {
197     Index: number;
198     Response: {
199         Code: number;
200         Event?: CalendarEvent;
201         Error?: string;
202     };
205 export interface SyncMultipleApiResponse extends ApiResponse {
206     Responses: SyncMultipleApiResponses[];
209 export interface UpdateEventPartApiResponse extends ApiResponse {
210     Event: CalendarEvent;
213 export interface AttendeeDeleteSingleEditResponse extends ApiResponse {
214     Event: CalendarEvent;
217 interface GetCanonicalAddressesSingleApiResponse extends ApiResponse {
218     CanonicalEmail: string;
221 export interface GetCanonicalAddressesApiResponses {
222     Email: string;
223     Response: GetCanonicalAddressesSingleApiResponse;
226 export interface GetCanonicalAddressesApiResponse extends ApiResponse {
227     Responses: GetCanonicalAddressesApiResponses[];
230 export interface GetAllMembersApiResponse {
231     Members: CalendarMember[];
234 export interface GetCalendarInvitationsResponse {
235     Invitations: CalendarMemberInvitation[];
238 export enum BUSY_TIME_SLOT_TYPE {
239     /** Partial day: event's start time is inside the requested window */
240     PARTIAL_DAY_IN = 0,
241     /** Partial day: event's start time is before the requested window */
242     PARTIAL_DAY_BEFORE = 1,
243     /** Full day: event's start date is inside the requested window */
244     FULL_DAY_IN = 2,
245     /** Full day: event's start date is before the requested window */
246     FULL_DAY_BEFORE = 3,
249 export interface GetBusySlotsParams {
250     /** Min 0, Max 100. Defaults to 100 */
251     PageSize?: number;
252     /** 0 based index. Defaults to 0 */
253     Page?: number;
254     Type: BUSY_TIME_SLOT_TYPE;
255     /** Unix timestamp */
256     Start: number;
257     /** Unix timestamp */
258     End: number;
259     /** The timezone currently used on the calendar, will impact which events are returned: "Timezone=Europe/Paris" */
260     Timezone: string;
263 export interface GetBusySlotsResponse extends ApiResponse {
264     BusySchedule: {
265         IsDataAccessible: boolean;
266         BusyTimeSlots: { Start: number; End: number }[] | null;
267         More: boolean;
268     };
272  * @warning Not fully typed
273  */
274 export interface JoinHolidayCalendarResponse extends ApiResponse {
275     Calendar: {
276         ID: string;
277         Type: CALENDAR_TYPE;
278     };
279     CalendarSettings: CalendarSettings;
282 export enum VIDEO_CONFERENCE_PROVIDER {
283     ZOOM = 1,