import fs from "node:fs/promises"; import { resolve } from "node:path"; import debug from "debug"; import { stringify } from "csv-stringify/sync"; import { authViaServiceAccount } from "./io/googleAuth"; import { fetchEmailsFromGmail } from "./io/downloadEmailsGoogle"; import { gmail_v1 } from "googleapis"; type Email = { id: string; recipient: string; emailId: string; subject: string; sender: string; to: string; timestamp: string; }; type Options = { out?: string; a?: string; }; export async function commandGoogle( keyFile: string, userKey: string, options: Options, ) { debug.enable("triage"); const auth = await authViaServiceAccount( ["https://www.googleapis.com/auth/gmail.metadata"], userKey, keyFile, ); const gmail = new gmail_v1.Gmail({ auth }); const output: Array = []; for await (const email of fetchEmailsFromGmail(gmail)) { output.push({ id: email.id, recipient: email.to.join(","), emailId: email.id, subject: email.subject, sender: email.from, to: email.to.join(","), timestamp: email.date, }); } if (options.out) { const out = resolve(options.out); if (options.a) await fs.appendFile(out, stringify(output)); else await fs.writeFile(out, stringify(output, { header: true })); } else console.log(output); }