diff options
| author | Jan Tuomi <jan.tuomi@valuemotive.com> | 2021-04-18 21:38:06 +0300 |
|---|---|---|
| committer | Jan Tuomi <jan.tuomi@valuemotive.com> | 2021-04-18 21:38:06 +0300 |
| commit | 2725e84e199e1d0b5e6ce01e405c035481e49c0d (patch) | |
| tree | eb003fb0d16875f636eb978085f44c65a672ba3c /src/sheets.ts | |
| parent | c95fe479c981698efa708fbff94e49bf960e879a (diff) | |
WIP sheets api
Diffstat (limited to 'src/sheets.ts')
| -rw-r--r-- | src/sheets.ts | 96 |
1 files changed, 94 insertions, 2 deletions
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<void> => { - // TODO +import got from "got"; +import { google } from "googleapis"; +import config from "./config"; + +export const fetchIdToken = async function (aud: string): Promise<string> { + 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<void> => { + // 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 |
