Skip to content

Built for people who want to own their automations. Join the waitlist for an invite.

Package listing

@kody/calendly

src/get-invitee.ts

54 lines · 2.0 KB · TypeScript
import { calendlyRequest, uuidFromUri } from './client.ts'
import { mapInvitee } from './models.ts'
import type { CalendlyAuthInput, CalendlyInviteeSummary } from './types.ts'
import { optionalString, requireRecord } from './types.ts'
import { requireAuthMode } from './auth.ts'

export type GetInviteeInput = CalendlyAuthInput & {
	/** Scheduled event uuid or URI. */
	event: string
	/** Invitee uuid or URI. */
	invitee: string
}

/**
 * Read one Calendly invitee on a scheduled event.
 * @example
 * import getInvitee from 'kody:@kody/calendly/get-invitee'
 * const invitee = await getInvitee({
 *   event: 'AAAAAAAAAAAAAAAA',
 *   invitee: 'BBBBBBBBBBBBBBBB',
 * })
 */
export async function getInvitee(input: GetInviteeInput): Promise<CalendlyInviteeSummary> {
	const event = optionalString(input.event, 'event')
	const invitee = optionalString(input.invitee, 'invitee')
	if (!event || !invitee) throw new Error('get-invitee requires event and invitee (uuid or URI).')
	const result = await calendlyRequest<unknown>({
		...input,
		operation: 'scheduledEvents.read',
		path: `/scheduled_events/${uuidFromUri(event)}/invitees/${uuidFromUri(invitee)}`,
	})
	return mapInvitee(result.data)
}

/**
 * Read one Calendly invitee on a scheduled event.
 * @example
 * import getInvitee from 'kody:@kody/calendly/get-invitee'
 * const invitee = await getInvitee({ event: 'AAA', invitee: 'BBB' })
 */
export default async function getInviteeEntrypoint(
	params: Partial<GetInviteeInput> & Record<string, unknown> = {},
) {
	const input = requireRecord(params, 'get-invitee')
	return getInvitee({
		event: optionalString(input.event, 'event') ?? '',
		invitee: optionalString(input.invitee, 'invitee') ?? '',
		integrationName: optionalString(input.integrationName, 'integrationName'),
		integration: optionalString(input.integration, 'integration'),
		account: optionalString(input.account, 'account'),
		secretName: optionalString(input.secretName, 'secretName'),
		auth: requireAuthMode(input.auth),
	})
}