/** * Google Sheets Integration for WORKWAY * * Weniger, aber besser: Extends BaseAPIClient for shared HTTP logic. * * @example * ```typescript * import { GoogleSheets } from '@workwayco/integrations/google-sheets'; * * const sheets = new GoogleSheets({ accessToken: tokens.google.access_token }); * * // Read data from a range * const data = await sheets.getValues({ * spreadsheetId: 'abc123', * range: 'Sheet1!A1:D10' * }); * * // Write data to a range * await sheets.updateValues({ * spreadsheetId: 'abc123', * range: 'Sheet1!A1', * values: [['Name', 'Email'], ['John', 'john@example.com']] * }); * * // Append rows * await sheets.appendValues({ * spreadsheetId: 'abc123', * range: 'Sheet1!A:D', * values: [['New Row', 'Data', 'Here', new Date().toISOString()]] * }); * ``` */ import { ActionResult } from '@workwayco/sdk'; import { BaseAPIClient } from '../core/index.js'; /** * Google Sheets integration configuration */ export interface GoogleSheetsConfig { /** OAuth access token */ accessToken: string; /** Optional: Override API endpoint (for testing) */ apiUrl?: string; /** Request timeout in milliseconds (default: 30000) */ timeout?: number; } /** * Spreadsheet metadata */ export interface Spreadsheet { spreadsheetId: string; properties: { title: string; locale: string; autoRecalc: string; timeZone: string; }; sheets: Sheet[]; spreadsheetUrl: string; } /** * Sheet (tab) within a spreadsheet */ export interface Sheet { properties: { sheetId: number; title: string; index: number; sheetType: string; gridProperties?: { rowCount: number; columnCount: number; frozenRowCount?: number; frozenColumnCount?: number; }; }; } /** * Value range response */ export interface ValueRange { range: string; majorDimension: 'ROWS' | 'COLUMNS'; values: unknown[][]; } /** * Update response */ export interface UpdateValuesResponse { spreadsheetId: string; updatedRange: string; updatedRows: number; updatedColumns: number; updatedCells: number; } /** * Append response */ export interface AppendValuesResponse { spreadsheetId: string; tableRange: string; updates: { spreadsheetId: string; updatedRange: string; updatedRows: number; updatedColumns: number; updatedCells: number; }; } /** * Batch update response */ export interface BatchUpdateResponse { spreadsheetId: string; totalUpdatedRows: number; totalUpdatedColumns: number; totalUpdatedCells: number; totalUpdatedSheets: number; responses: UpdateValuesResponse[]; } export interface GetSpreadsheetOptions { /** Spreadsheet ID */ spreadsheetId: string; /** Include grid data (cell values) */ includeGridData?: boolean; /** Specific ranges to include */ ranges?: string[]; } export interface GetValuesOptions { /** Spreadsheet ID */ spreadsheetId: string; /** A1 notation range (e.g., 'Sheet1!A1:D10') */ range: string; /** How to interpret values: RAW, FORMATTED_VALUE, UNFORMATTED_VALUE */ valueRenderOption?: 'RAW' | 'FORMATTED_VALUE' | 'UNFORMATTED_VALUE'; /** How to interpret dates: SERIAL_NUMBER, FORMATTED_STRING */ dateTimeRenderOption?: 'SERIAL_NUMBER' | 'FORMATTED_STRING'; } export interface UpdateValuesOptions { /** Spreadsheet ID */ spreadsheetId: string; /** A1 notation range (e.g., 'Sheet1!A1') */ range: string; /** 2D array of values */ values: unknown[][]; /** How to interpret input: RAW, USER_ENTERED */ valueInputOption?: 'RAW' | 'USER_ENTERED'; /** Include values in response */ includeValuesInResponse?: boolean; } export interface AppendValuesOptions { /** Spreadsheet ID */ spreadsheetId: string; /** A1 notation range to append after (e.g., 'Sheet1!A:D') */ range: string; /** 2D array of values to append */ values: unknown[][]; /** How to interpret input: RAW, USER_ENTERED */ valueInputOption?: 'RAW' | 'USER_ENTERED'; /** How to insert: OVERWRITE, INSERT_ROWS */ insertDataOption?: 'OVERWRITE' | 'INSERT_ROWS'; } export interface ClearValuesOptions { /** Spreadsheet ID */ spreadsheetId: string; /** A1 notation range to clear */ range: string; } export interface CreateSpreadsheetOptions { /** Spreadsheet title */ title: string; /** Initial sheet names (optional) */ sheets?: string[]; /** Locale (optional, e.g., 'en_US') */ locale?: string; /** Timezone (optional, e.g., 'America/New_York') */ timeZone?: string; } export interface BatchGetValuesOptions { /** Spreadsheet ID */ spreadsheetId: string; /** Multiple A1 notation ranges */ ranges: string[]; /** How to interpret values */ valueRenderOption?: 'RAW' | 'FORMATTED_VALUE' | 'UNFORMATTED_VALUE'; } export interface AddSheetOptions { /** Spreadsheet ID */ spreadsheetId: string; /** New sheet title */ title: string; /** Number of rows (optional) */ rowCount?: number; /** Number of columns (optional) */ columnCount?: number; } /** * Google Sheets Integration * * Weniger, aber besser: Extends BaseAPIClient for shared HTTP logic. */ export declare class GoogleSheets extends BaseAPIClient { constructor(config: GoogleSheetsConfig); /** * Get spreadsheet metadata */ getSpreadsheet(options: GetSpreadsheetOptions): Promise>; /** * Create a new spreadsheet */ createSpreadsheet(options: CreateSpreadsheetOptions): Promise>; /** * Get values from a range */ getValues(options: GetValuesOptions): Promise>; /** * Get values from multiple ranges */ batchGetValues(options: BatchGetValuesOptions): Promise>; /** * Update values in a range */ updateValues(options: UpdateValuesOptions): Promise>; /** * Append values to a sheet */ appendValues(options: AppendValuesOptions): Promise>; /** * Clear values in a range */ clearValues(options: ClearValuesOptions): Promise>; /** * Add a new sheet to an existing spreadsheet */ addSheet(options: AddSheetOptions): Promise>; /** * Delete a sheet from a spreadsheet */ deleteSheet(spreadsheetId: string, sheetId: number): Promise>; /** * Convert sheet data to array of objects (using first row as headers) */ valuesToObjects>(values: unknown[][]): T[]; /** * Convert array of objects to sheet values (with headers) */ objectsToValues>(objects: T[], headers?: string[]): unknown[][]; /** * Get capabilities for Google Sheets actions */ private getCapabilities; } //# sourceMappingURL=index.d.ts.map