import * as z from "zod" import { defineAction } from "../../../automation/actions" import { getGoogleSheetsApi, normalizeSpreadsheetId, } from "../lib/google-sheets" import { GOOGLE_SHEETS_WRITE_REQUIREMENT } from "../lib/scopes" import { SPREADSHEET_REFERENCE_SCHEMA } from "../lib/schemas" /** Clears values from one or more A1 ranges without changing formatting. */ export const clearGoogleSheetsValues = defineAction( "Clear Google Sheets values", ) .describe("Clears cell values from one or more ranges in a single request.") .account("google", GOOGLE_SHEETS_WRITE_REQUIREMENT) .input( z.object({ /** One or more A1 ranges or named ranges to clear. */ ranges: z.union([z.string().min(1), z.string().min(1).array().min(1)]), /** Spreadsheet ID or standard Google Sheets URL. */ spreadsheet: SPREADSHEET_REFERENCE_SCHEMA, }), ) .output( z.object({ /** Actual bounded ranges cleared by Google. */ clearedRanges: z.string().array(), /** Immutable spreadsheet ID. */ spreadsheetId: z.string(), }), ) .retry({ replaySafety: "unsafe" }) .handler(async ({ account, input }) => { const { data } = await getGoogleSheetsApi( account.secret, ).spreadsheets.values.batchClear({ requestBody: { ranges: Array.isArray(input.ranges) ? input.ranges : [input.ranges], }, spreadsheetId: normalizeSpreadsheetId(input.spreadsheet), }) return { clearedRanges: data.clearedRanges ?? [], spreadsheetId: data.spreadsheetId ?? "", } })