From 2725e84e199e1d0b5e6ce01e405c035481e49c0d Mon Sep 17 00:00:00 2001 From: Jan Tuomi Date: Sun, 18 Apr 2021 21:38:06 +0300 Subject: WIP sheets api --- src/sheets.ts | 96 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 94 insertions(+), 2 deletions(-) (limited to 'src/sheets.ts') diff --git a/src/sheets.ts b/src/sheets.ts index a03e349..8f6c81c 100644 --- a/src/sheets.ts +++ b/src/sheets.ts @@ -1,3 +1,95 @@ -export const broadcast = async (): Promise => { - // TODO +import got from "got"; +import { google } from "googleapis"; +import config from "./config"; + +export const fetchIdToken = async function (aud: string): Promise { + const metadataServerTokenURL = `http://metadata/computeMetadata/v1/instance/service-accounts/default/identity?audience=${aud}`; + + let resp; + try { + resp = await got(metadataServerTokenURL, { + headers: { + "Metadata-Flavor": "Google", + }, + }); + } catch (err) { + console.error(err); + throw new Error("Failed to fetch ID token from Google metadata endpoint"); + } + + const token = resp.body; + if (!token) { + throw new Error("ID token from Google metadata endpoint is empty"); + } + + return token; }; + +export const buildSheetsClient = async () => { + const auth = new google.auth.GoogleAuth({ + // Scopes can be specified either as an array or as a single, space-delimited string. + scopes: [ + "https://www.googleapis.com/auth/spreadsheets", + "https://www.googleapis.com/auth/spreadsheets.readonly", + ], + }); + + // Acquire an auth client, and bind it to all future calls + const authClient = await auth.getClient(); + google.options({ auth: authClient }); + + const fetchSheetData = async (): Promise => { + // TODO + try { + const sheets = google.sheets({ version: "v4" }); + const res = await sheets.spreadsheets.values.get({ + spreadsheetId: config.sheetsSpreadsheetId, + range: config.sheetsRange, + }); + + console.log("res", res); + } catch (err) { + console.error(err); + throw err; + } + }; + + return { + fetchSheetData, + }; +}; + + +/* +def fetch_sheet_data(service: Resource) -> list[SheetsRow]: + logging.info("Calling Sheets API to fetch data...") + sheet = service.spreadsheets() + result = ( + sheet.values() + .get( + spreadsheetId=getenv("SHEETS_SPREADSHEET_ID"), + range=getenv("SHEETS_RANGE"), + ) + .execute() + ) + + rows = result.get("values", []) + logging.info(f"Fetched {len(rows)} rows of data") + return [_row_to_dataclass(row) for row in rows] + + +def update_sheet_last_done_column(service: Resource, new_datestamps: list[str]): + logging.info("Calling Sheets API to update last done column...") + range = getenv("SHEETS_RANGE") + sheet = service.spreadsheets() + last_done_column_range = _get_rightmost_column_in_range(range) + + body = {"values": [[datestamp] for datestamp in new_datestamps]} + + sheet.values().update( + spreadsheetId=getenv("SHEETS_SPREADSHEET_ID"), + range=last_done_column_range, + valueInputOption="RAW", + body=body, + ).execute() +*/ \ No newline at end of file -- cgit v1.3