Skip to content

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

Package listing

@kody/zoom

src/recordings/list.ts

46 lines · 1.3 KB · TypeScript
import { normalizeUserLocator, pickAuthInput, request } from '../core.ts'
import { asRecord, pageMeta, pickQuery, slimRecordingMeeting } from '../shape.ts'

const QUERY_KEYS = [
	'from',
	'to',
	'page_size',
	'next_page_token',
	'mc',
	'trash',
	'trash_type',
	'meeting_id',
] as const

/**
 * List cloud recordings for a Zoom user. Defaults to `userId: "me"`.
 *
 * Pass `from` / `to` as `yyyy-MM-dd` when you need a date window.
 *
 * @example
 * import listZoomRecordings from 'kody:@kody/zoom/recordings/list'
 * const result = await listZoomRecordings({ from: '2030-01-01', to: '2030-01-31' })
 */
export default async function listZoomRecordings(params: Record<string, unknown> = {}) {
	const auth = pickAuthInput(params)
	const { userId } = normalizeUserLocator(params)
	const query = pickQuery(params, QUERY_KEYS)
	const response = await request<Record<string, unknown>>({
		...auth,
		path: `/users/${userId}/recordings`,
		query,
		throwOnError: true,
	})
	const data = asRecord(response.data)
	const items = Array.isArray(data.meetings)
		? data.meetings.map((item) => slimRecordingMeeting(asRecord(item)))
		: []
	return {
		items,
		userId,
		from: typeof data.from === 'string' ? data.from : null,
		to: typeof data.to === 'string' ? data.to : null,
		...pageMeta(data),
		auth: response.auth,
	}
}