Skip to content

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

Package listing

@kody/zoom

src/meetings/delete.ts

53 lines · 1.4 KB · TypeScript
import { isConfirmed, isDryRun, normalizeMeetingLocator, pickAuthInput, request } from '../core.ts'

/**
 * Delete a Zoom meeting.
 *
 * Pass `dryRun: true` to preview the request. Live deletes require `confirm: true`.
 *
 * @example
 * import deleteZoomMeeting from 'kody:@kody/zoom/meetings/delete'
 * const preview = await deleteZoomMeeting({ meetingId: '11111111111', dryRun: true })
 */
export default async function deleteZoomMeeting(params: Record<string, unknown> = {}) {
	const auth = pickAuthInput(params)
	const { meetingId, occurrenceId } = normalizeMeetingLocator(params)
	const scheduleOccurrence =
		params.schedule_for_reminder === true || params.scheduleForReminder === true

	if (isDryRun(params)) {
		return {
			dryRun: true,
			wouldDelete: true,
			meetingId,
			occurrenceId: occurrenceId ?? null,
			path: `/meetings/${meetingId}`,
			auth,
		}
	}

	if (!isConfirmed(params)) {
		throw new Error(
			`Deleting meeting ${meetingId} requires dryRun: true (preview) or confirm: true (live write).`,
		)
	}

	const response = await request<unknown>({
		...auth,
		method: 'DELETE',
		path: `/meetings/${meetingId}`,
		query: {
			...(occurrenceId ? { occurrence_id: occurrenceId } : {}),
			...(scheduleOccurrence ? { schedule_for_reminder: true } : {}),
		},
		throwOnError: true,
		confirm: true,
	})

	return {
		ok: true,
		meetingId,
		status: response.status,
		auth: response.auth,
	}
}