{ "$schema": "https://ui.shadcn.com/schema/registry-item.json", "name": "google-sheets-read-rows", "type": "registry:item", "description": "Read rows from a Google Sheet", "dependencies": [], "files": [ { "path": "steps/google-sheets-read-rows.ts", "content": "/**\n * Read rows from a Google Sheet\n *\n * @param spreadsheetId - The ID of the spreadsheet (from the URL)\n * @param sheetName - The name of the sheet/tab\n * @param range - Optional range (e.g., \"A1:D10\"), defaults to all data\n * @returns Array of rows with values\n *\n * @env GOOGLE_SHEETS_API_KEY - Google Sheets API key\n */\n\nimport { FatalError } from \"workflow\"\n\ninterface ReadRowsOptions {\n spreadsheetId: string\n sheetName: string\n range?: string\n}\n\nexport async function googleSheetsReadRows({ spreadsheetId, sheetName, range }: ReadRowsOptions) {\n \"use step\"\n\n const apiKey = process.env.GOOGLE_SHEETS_API_KEY\n if (!apiKey) {\n throw new FatalError(\"GOOGLE_SHEETS_API_KEY environment variable is required\")\n }\n\n if (!spreadsheetId || !sheetName) {\n throw new FatalError(\"spreadsheetId and sheetName are required\")\n }\n\n const fullRange = range ? `${sheetName}!${range}` : `${sheetName}`\n const url = `https://sheets.googleapis.com/v4/spreadsheets/${spreadsheetId}/values/${encodeURIComponent(fullRange)}?key=${apiKey}`\n\n const response = await fetch(url)\n\n if (!response.ok) {\n const error = await response.text()\n throw new Error(`Failed to read Google Sheet: ${error}`)\n }\n\n const data = await response.json()\n return {\n range: data.range,\n values: data.values || [],\n }\n}\n", "type": "registry:file", "target": "steps/google-sheets-read-rows.ts" } ] }