UNPKG

coconut-open-api-js

Version:
210 lines (209 loc) 7 kB
import { AxiosInstance } from 'axios'; import { Resource } from '../index'; import { AttendeeModel } from '../models/attendee'; import Conditional, { ConditionalResource } from './conditional'; export interface AppointmentFilter { invitation?: number; invite_only_resources?: boolean; locale?: string | null; location?: number; matchers?: AppointmentMatcherParameters; method?: number; notifications?: AppointmentNotificationParameters; recaptcha_token?: string | null; services?: number | number[]; shortcut?: number; skip_meeting_link_generation?: boolean; start?: string; through?: number; timezone?: string; user?: number; user_category?: number; users?: number | number[]; workflow?: number; } export interface UtmParameters { campaign?: string; content?: string; medium?: string; source?: string; term?: string; } export interface AppointmentMatcherParameters { code: string; id: string | number; } export interface AppointmentNotificationParameters { client?: boolean; user?: boolean; } export interface AppointmentParameters { data: { attributes?: { additional_staff_id?: number | number[]; booked_through?: number; booking_shortcut_id?: number; invitation_id: number | null; invite_only_resources?: number; location_id: number | undefined; meeting_method?: number; recaptcha_token?: string; service_id: number | number[] | undefined; staff_category_id?: number; staff_id: number | null; start: string | undefined; supported_locale: string | null; timezone?: string; workflow_id?: number | null; }; relationships: { attendees: { data: object[]; }; }; type: string; }; meta?: { booker?: number; notify?: { client?: boolean; user?: boolean; }; skip_meeting_link_generation?: boolean; utm?: { campaign?: string; content?: string; source?: string; medium?: string; term?: string; }; }; } export interface RescheduleParameters { data: { attributes: { start: string | undefined; timezone?: string; }; id: number; type: string; }; meta?: { notify?: { client?: boolean; user?: boolean; }; skip_meeting_link_generation?: boolean; }; } interface AddSingleAttendeeParameter { attributes: { email: string; first_name: string; last_name: string; }; type: string; } export interface AddAttendeeParameters { data: AddSingleAttendeeParameter[]; meta?: { booker?: number; notify?: { client?: boolean; user?: boolean; }; origin?: number; }; } export interface AppointmentResource extends Resource, ConditionalResource { actingAs(identifier: number): this; add(appointment: number): Promise<any>; at(location: number): this; attendedBy(users: number | number[]): this; book(): Promise<any>; by(user: number): this; cancel(appointment: number, attendee: number, code: string): Promise<any>; for(services: number | number[]): this; in(timezone: string): this; matching(matchers: AppointmentMatcherParameters): this; method(method: number): this; notify(notifications: AppointmentNotificationParameters): this; recaptcha(recaptchaToken: string): this; reschedule(appointment: number, code: string): Promise<any>; shortcut(shortcut: number): this; starting(start: string): this; supporting(locale: string | null): this; through(origin: number): this; via(invitation: number): this; with(attendees: AttendeeModel | AttendeeModel[]): this; withInviteOnly(inviteOnlyResources?: boolean): this; withinUserCategory(userCategory: number): this; withoutMeetingLink(skipMeetingLinkGeneration?: boolean): this; workflow(workflow: number): this; } export interface Utm { campaign(campaign: string): this; content(content: string): this; medium(medium: string): this; source(source: string): this; term(term: string): this; } export interface FileUpload { uploads(uploadedFiles: UploadedFile[]): this; } export interface UploadedFile { key: string; file: File; } export interface AppointmentRelationship { attendees: AttendeeModel[] | []; } export interface AppointmentMeta { booker?: number; } export default class Appointment extends Conditional implements AppointmentResource, Utm, FileUpload { protected client: AxiosInstance; protected filters: AppointmentFilter; protected meta: AppointmentMeta; protected relationships: AppointmentRelationship; protected uploadedFiles: UploadedFile[]; protected utm: UtmParameters; constructor(client: AxiosInstance); actingAs(identifier: number): this; add(appointment: number): Promise<any>; at(location: number): this; attendedBy(users: number | number[]): this; book(): Promise<any>; by(user: number): this; campaign(campaign: string): this; cancel(appointment: number, attendee: number, code: string): Promise<any>; content(content: string): this; for(services: number | number[]): this; get(): Promise<any>; in(timezone: string): this; matching(matchers: AppointmentMatcherParameters): this; medium(medium: string): this; method(method: number): this; notify(notifications: AppointmentNotificationParameters): this; recaptcha(recaptchaToken: string): this; reschedule(appointment: number, code: string): Promise<any>; shortcut(shortcut: number): this; starting(start: string): this; source(source: string): this; supporting(locale: string | null): this; term(term: string): this; through(origin: number): this; uploads(uploadedFiles: UploadedFile[]): this; via(invitation: number): this; with(attendees: AttendeeModel | AttendeeModel[]): this; withInviteOnly(inviteOnlyResources?: boolean): this; withinUserCategory(userCategory: number): this; withoutMeetingLink(skipMeetingLinkGeneration?: boolean): this; workflow(workflow: number): this; protected addParams(): AddAttendeeParameters; protected hasUtm(): boolean; protected params(): AppointmentParameters | object; protected rescheduleParams(appointment: number): RescheduleParameters | object; protected transformAttendees(): AddSingleAttendeeParameter[]; } export {};