2022-03-23 22:00:30 +00:00
|
|
|
import type { DestinationCalendar, SelectedCalendar } from "@prisma/client";
|
|
|
|
import type { Dayjs } from "dayjs";
|
|
|
|
import type { calendar_v3 } from "googleapis";
|
|
|
|
import type { Time } from "ical.js";
|
|
|
|
import type { TFunction } from "next-i18next";
|
2022-01-06 17:28:31 +00:00
|
|
|
|
2022-03-23 22:00:30 +00:00
|
|
|
import type { Event } from "./Event";
|
|
|
|
import type { Ensure } from "./utils";
|
2022-01-06 17:28:31 +00:00
|
|
|
|
|
|
|
export type Person = {
|
|
|
|
name: string;
|
|
|
|
email: string;
|
|
|
|
timeZone: string;
|
2022-01-27 20:32:53 +00:00
|
|
|
language: { translate: TFunction; locale: string };
|
2022-04-14 21:25:24 +00:00
|
|
|
username?: string;
|
|
|
|
id?: string;
|
2022-01-06 17:28:31 +00:00
|
|
|
};
|
|
|
|
|
2022-03-23 22:00:30 +00:00
|
|
|
export type EventBusyDate = Record<"start" | "end", Date | string>;
|
|
|
|
|
|
|
|
export type CalendarServiceType = typeof Calendar;
|
|
|
|
|
|
|
|
export type NewCalendarEventType = {
|
|
|
|
uid: string;
|
|
|
|
id: string;
|
|
|
|
type: string;
|
|
|
|
password: string;
|
|
|
|
url: string;
|
|
|
|
additionalInfo: Record<string, any>;
|
|
|
|
};
|
|
|
|
|
|
|
|
export type CalendarEventType = {
|
|
|
|
uid: string;
|
|
|
|
etag: string;
|
|
|
|
/** This is the actual caldav event url, not the location url. */
|
|
|
|
url: string;
|
|
|
|
summary: string;
|
|
|
|
description: string;
|
|
|
|
location: string;
|
|
|
|
sequence: number;
|
|
|
|
startDate: Date | Dayjs;
|
|
|
|
endDate: Date | Dayjs;
|
|
|
|
duration: {
|
|
|
|
weeks: number;
|
|
|
|
days: number;
|
|
|
|
hours: number;
|
|
|
|
minutes: number;
|
|
|
|
seconds: number;
|
|
|
|
isNegative: boolean;
|
|
|
|
};
|
|
|
|
organizer: string;
|
|
|
|
attendees: any[][];
|
|
|
|
recurrenceId: Time;
|
|
|
|
timezone: any;
|
|
|
|
};
|
|
|
|
|
|
|
|
export type BatchResponse = {
|
|
|
|
responses: SubResponse[];
|
|
|
|
};
|
|
|
|
|
|
|
|
export type SubResponse = {
|
|
|
|
body: { value: { start: { dateTime: string }; end: { dateTime: string } }[] };
|
|
|
|
};
|
|
|
|
|
|
|
|
export interface ConferenceData {
|
|
|
|
createRequest?: calendar_v3.Schema$CreateConferenceRequest;
|
2022-01-06 17:28:31 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
export interface AdditionInformation {
|
|
|
|
conferenceData?: ConferenceData;
|
|
|
|
entryPoints?: EntryPoint[];
|
|
|
|
hangoutLink?: string;
|
|
|
|
}
|
|
|
|
|
2022-04-14 21:25:24 +00:00
|
|
|
// If modifying this interface, probably should update builders/calendarEvent files
|
2022-01-06 17:28:31 +00:00
|
|
|
export interface CalendarEvent {
|
|
|
|
type: string;
|
|
|
|
title: string;
|
|
|
|
startTime: string;
|
|
|
|
endTime: string;
|
2022-04-14 21:25:24 +00:00
|
|
|
organizer: Person;
|
|
|
|
attendees: Person[];
|
2022-04-07 18:22:11 +00:00
|
|
|
additionalNotes?: string | null;
|
2022-01-06 17:28:31 +00:00
|
|
|
description?: string | null;
|
|
|
|
team?: {
|
|
|
|
name: string;
|
|
|
|
members: string[];
|
|
|
|
};
|
|
|
|
location?: string | null;
|
|
|
|
conferenceData?: ConferenceData;
|
|
|
|
additionInformation?: AdditionInformation;
|
|
|
|
uid?: string | null;
|
|
|
|
videoCallData?: VideoCallData;
|
|
|
|
paymentInfo?: PaymentInfo | null;
|
|
|
|
destinationCalendar?: DestinationCalendar | null;
|
2022-01-28 17:40:29 +00:00
|
|
|
cancellationReason?: string | null;
|
2022-02-09 18:25:58 +00:00
|
|
|
rejectionReason?: string | null;
|
2022-03-28 18:07:13 +00:00
|
|
|
hideCalendarNotes?: boolean;
|
2022-01-06 17:28:31 +00:00
|
|
|
}
|
|
|
|
|
2022-03-23 22:00:30 +00:00
|
|
|
export interface EntryPoint {
|
|
|
|
entryPointType?: string;
|
|
|
|
uri?: string;
|
|
|
|
label?: string;
|
|
|
|
pin?: string;
|
|
|
|
accessCode?: string;
|
|
|
|
meetingCode?: string;
|
|
|
|
passcode?: string;
|
|
|
|
password?: string;
|
|
|
|
}
|
|
|
|
|
|
|
|
export interface AdditionInformation {
|
|
|
|
conferenceData?: ConferenceData;
|
|
|
|
entryPoints?: EntryPoint[];
|
|
|
|
hangoutLink?: string;
|
|
|
|
}
|
|
|
|
|
2022-01-06 17:28:31 +00:00
|
|
|
export interface IntegrationCalendar extends Ensure<Partial<SelectedCalendar>, "externalId"> {
|
|
|
|
primary?: boolean;
|
|
|
|
name?: string;
|
|
|
|
}
|
|
|
|
|
|
|
|
export interface Calendar {
|
|
|
|
createEvent(event: CalendarEvent): Promise<NewCalendarEventType>;
|
|
|
|
|
2022-02-10 10:44:46 +00:00
|
|
|
updateEvent(uid: string, event: CalendarEvent): Promise<Event | Event[]>;
|
2022-01-06 17:28:31 +00:00
|
|
|
|
2022-01-13 19:47:15 +00:00
|
|
|
deleteEvent(uid: string, event: CalendarEvent): Promise<unknown>;
|
2022-01-06 17:28:31 +00:00
|
|
|
|
|
|
|
getAvailability(
|
|
|
|
dateFrom: string,
|
|
|
|
dateTo: string,
|
|
|
|
selectedCalendars: IntegrationCalendar[]
|
|
|
|
): Promise<EventBusyDate[]>;
|
|
|
|
|
|
|
|
listCalendars(event?: CalendarEvent): Promise<IntegrationCalendar[]>;
|
|
|
|
}
|