import { z } from "zod" import { defineAction } from "../../../automation/actions" import { getGoogleMeetApi, GOOGLE_MEET_CONFERENCE_RECORD_PAGE_SCHEMA, GOOGLE_MEET_CONFERENCE_RECORD_REFERENCE_SCHEMA, GOOGLE_MEET_CONFERENCE_RECORD_SCHEMA, normalizeGoogleMeetConferenceRecord, normalizeGoogleMeetConferenceRecordName, } from "@automate.ax/integration-contracts/google-meet" import { GOOGLE_MEET_READ_REQUIREMENT } from "../lib/scopes" /** Retrieves one held or active Google Meet conference. */ export const getGoogleMeetConferenceRecord = defineAction( "Get Google Meet conference record", ) .describe("Gets timing and meeting-space metadata for one conference.") .account("google", GOOGLE_MEET_READ_REQUIREMENT) .input( z.object({ /** Conference-record resource name or raw record ID. */ conferenceRecord: GOOGLE_MEET_CONFERENCE_RECORD_REFERENCE_SCHEMA, }), ) .output(GOOGLE_MEET_CONFERENCE_RECORD_SCHEMA) .retry({ replaySafety: "safe" }) .handler(async ({ account, input }) => { const { data } = await getGoogleMeetApi( account.secret, ).conferenceRecords.get({ name: normalizeGoogleMeetConferenceRecordName(input.conferenceRecord), }) return normalizeGoogleMeetConferenceRecord(data) }) /** Lists one provider page of conference records. */ export const listGoogleMeetConferenceRecords = defineAction( "List Google Meet conference records", ) .describe("Lists recent conferences with optional provider filtering.") .account("google", GOOGLE_MEET_READ_REQUIREMENT) .input( z.object({ /** Google Meet filter over space, start_time, or end_time. */ filter: z.string().min(1).optional(), /** Maximum records returned in this page. */ pageSize: z.number().int().min(1).max(100).optional(), /** Token returned by a previous call. */ pageToken: z.string().min(1).optional(), }), ) .output(GOOGLE_MEET_CONFERENCE_RECORD_PAGE_SCHEMA) .retry({ replaySafety: "safe" }) .handler(async ({ account, input }) => { const { data } = await getGoogleMeetApi( account.secret, ).conferenceRecords.list(input) return { conferenceRecords: (data.conferenceRecords ?? []).map( normalizeGoogleMeetConferenceRecord, ), nextPageToken: data.nextPageToken ?? undefined, } })