import * as z from "zod" import { defineAction } from "../../../automation/actions" import { getGoogleFormsApi, getQuestionMetadata, normalizeFormId, normalizeFormResponse, } from "@automate.ax/integration-contracts/google-forms" import { GOOGLE_FORMS_RESPONSES_READ_REQUIREMENT } from "../lib/scopes" import { FORM_REFERENCE_SCHEMA, FORM_RESPONSE_SCHEMA, } from "@automate.ax/integration-contracts/google-forms" /** Retrieves one response with answers enriched by question titles. */ export const getGoogleFormResponse = defineAction("Get Google form response") .describe("Gets one normalized response with text, files, and grades.") .account("google", GOOGLE_FORMS_RESPONSES_READ_REQUIREMENT) .input( z.object({ /** Form ID or standard Google Forms URL. */ form: FORM_REFERENCE_SCHEMA, /** Whether to fetch form metadata and attach question titles. */ includeQuestionTitles: z.boolean().default(true), /** Immutable form response ID. */ responseId: z.string().trim().min(1), }), ) .output(FORM_RESPONSE_SCHEMA) .retry({ replaySafety: "safe" }) .handler(async ({ account, input }) => { const formsApi = getGoogleFormsApi(account.secret) const formId = normalizeFormId(input.form) const [response, form] = await Promise.all([ formsApi.forms.responses.get({ formId, responseId: input.responseId, }), input.includeQuestionTitles ? formsApi.forms.get({ formId }) : Promise.resolve(undefined), ]) return normalizeFormResponse( response.data, formId, form ? getQuestionMetadata(form.data) : [], ) })