59 lines
1.6 KiB
TypeScript
59 lines
1.6 KiB
TypeScript
import { google } from 'googleapis';
|
|
import { getAuthenticatedClient } from './google-server.js';
|
|
|
|
export interface GoogleSheet {
|
|
id: string;
|
|
name: string;
|
|
modifiedTime: string;
|
|
webViewLink: string;
|
|
}
|
|
|
|
export interface SheetData {
|
|
values: string[][];
|
|
}
|
|
|
|
export async function getRecentSpreadsheets(refreshToken: string, limit: number = 10): Promise<GoogleSheet[]> {
|
|
const oauth = getAuthenticatedClient(refreshToken);
|
|
const drive = google.drive({ version: 'v3', auth: oauth });
|
|
|
|
const response = await drive.files.list({
|
|
q: "mimeType='application/vnd.google-apps.spreadsheet'",
|
|
orderBy: 'modifiedTime desc',
|
|
pageSize: limit,
|
|
fields: 'files(id,name,modifiedTime,webViewLink)'
|
|
});
|
|
|
|
return response.data.files?.map(file => ({
|
|
id: file.id!,
|
|
name: file.name!,
|
|
modifiedTime: file.modifiedTime!,
|
|
webViewLink: file.webViewLink!
|
|
})) || [];
|
|
}
|
|
|
|
export async function getSpreadsheetData(refreshToken: string, spreadsheetId: string, range: string = 'A1:Z10'): Promise<SheetData> {
|
|
const oauth = getAuthenticatedClient(refreshToken);
|
|
const sheets = google.sheets({ version: 'v4', auth: oauth });
|
|
|
|
const response = await sheets.spreadsheets.values.get({
|
|
spreadsheetId,
|
|
range
|
|
});
|
|
|
|
return {
|
|
values: response.data.values || []
|
|
};
|
|
}
|
|
|
|
export async function getSpreadsheetInfo(refreshToken: string, spreadsheetId: string) {
|
|
const oauth = getAuthenticatedClient(refreshToken);
|
|
const sheets = google.sheets({ version: 'v4', auth: oauth });
|
|
|
|
const response = await sheets.spreadsheets.get({
|
|
spreadsheetId,
|
|
fields: 'properties.title,sheets.properties(title,sheetId)'
|
|
});
|
|
|
|
return response.data;
|
|
}
|