UNPKG

google-authenticator-util

Version:

Google authenticator tool for backend development / automation

144 lines (143 loc) 7.92 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; var __rest = (this && this.__rest) || function (s, e) { var t = {}; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p]; if (s != null && typeof Object.getOwnPropertySymbols === "function") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]]; } return t; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.deleteEmail = exports.sendEmail = exports.waitForEmail = exports.getEmail = exports.filterEmails = void 0; const googleapis_1 = require("googleapis"); const api = googleapis_1.google.gmail('v1'); /** * Retrieving a list of emails * @param parameters The parameters to filter emails by * @param parameters.auth Auth client or API Key for the request * @param parameters.includeSpamTrash Include messages from SPAM and TRASH in the results. * @param parameters.labelIds Only return messages with labels that match all of the specified label IDs. * @param parameters.maxResults Maximum number of messages to return. * @param parameters.pageToken Page token to retrieve a specific page of results in the list. * @param parameters.q Only return messages matching the specified query. Supports the same query format as the Gmail search box. For example, "from:someuser@example.com rfc822msgid:<somemsgid@example.com> is:unread". Parameter cannot be used when accessing the api using the gmail.metadata scope. * @param parameters.userId The user's email address. The special value me can be used to indicate the authenticated user. */ function filterEmails(parameters) { return __awaiter(this, void 0, void 0, function* () { if (parameters.userId === undefined) parameters.userId = 'me'; const response = yield api.users.messages.list(parameters); return (response.data.resultSizeEstimate > 0 ? response.data.messages : []); }); } exports.filterEmails = filterEmails; /** * Retrieve an email's contents * @param parameters The parameters to filter the email by * @param parameters.auth Auth client or API Key for the request * @param parameters.format The format to return the message in. * @param parameters.id The ID of the message to retrieve. * @param parameters.metadataHeaders When given and format is METADATA, only include headers specified. * @param parameters.userId The user's email address. The special value me can be used to indicate the authenticated user. */ function getEmail(parameters) { return __awaiter(this, void 0, void 0, function* () { if (parameters.userId === undefined) parameters.userId = 'me'; if (parameters.format === undefined) parameters.format = 'raw'; const response = yield api.users.messages.get(parameters); //Converting the raw email message to HTML string if (parameters.format === 'raw') response.data.raw = Buffer.from(response.data.raw, 'base64').toString('ascii'); return response; }); } exports.getEmail = getEmail; /** * Waiting for email to appear * @param parameters The parameters to filter emails by * @param parameters.auth Auth client or API Key for the request * @param parameters.includeSpamTrash Include messages from SPAM and TRASH in the results. * @param parameters.labelIds Only return messages with labels that match all of the specified label IDs. * @param parameters.maxResults Maximum number of messages to return. * @param parameters.pageToken Page token to retrieve a specific page of results in the list. * @param parameters.q Only return messages matching the specified query. Supports the same query format as the Gmail search box. For example, "from:someuser@example.com rfc822msgid:<somemsgid@example.com> is:unread". Parameter cannot be used when accessing the api using the gmail.metadata scope. * @param parameters.userId The user's email address. The special value me can be used to indicate the authenticated user. * @param timeoutInSeconds The amount of time to wait for the email. Default: 5 seconds */ function waitForEmail(parameters, timeoutInSeconds = 5) { return __awaiter(this, void 0, void 0, function* () { let emails = yield filterEmails(parameters); let timePassedInSeconds = 0; while (emails.length === 0 && timePassedInSeconds < timeoutInSeconds) { yield new Promise(resolve => setTimeout(resolve, 1000)); timePassedInSeconds++; emails = yield filterEmails(parameters); } if (timePassedInSeconds >= timePassedInSeconds && emails.length === 0) throw new Error(`Unable to find email after ${timePassedInSeconds}/${timeoutInSeconds}`); return emails; }); } exports.waitForEmail = waitForEmail; /** * Sending an email * @param parameters The parameters of send email message * @param parameters.to The email address to recieve the email * @param parameters.from The email address to send the email from * @param parameters.subject The subject of the email address * @param parameters.message The message of the email address * @param parameters.auth Auth client or API Key for the request * @param parameters.userId The user's email address. The special value me can be used to indicate the authenticated user. * @param parameters.requestBody Request body metadata * @param parameters.media Media metadata * @param parameters.media.mimeType Media mime-type * @param parameters.media.body Media body contents */ function sendEmail(parameters) { return __awaiter(this, void 0, void 0, function* () { if (parameters.userId === undefined) parameters.userId = 'me'; const { to, from, subject, message } = parameters, emailParameters = __rest(parameters, ["to", "from", "subject", "message"]); const rawBody = ["Content-Type: text/plain; charset=\"UTF-8\"\n", "MIME-Version: 1.0\n", "Content-Transfer-Encoding: 7bit\n", "to: ", to, "\n", "from: ", from, "\n", "subject: ", subject, "\n\n", message ].join(''); const encodedMail = Buffer.from(rawBody, 'ascii').toString('base64'); emailParameters.requestBody = { raw: encodedMail }; yield api.users.messages.send(emailParameters); }); } exports.sendEmail = sendEmail; /** * Deleting an email * @param parameters The parameters of email deletion * @param parameters.auth Auth client or API Key for the request * @param parameters.id The ID of the message to delete. * @param parameters.userId The user's email address. The special value me can be used to indicate the authenticated user. */ function deleteEmail(parameters) { return __awaiter(this, void 0, void 0, function* () { if (parameters.userId === undefined) parameters.userId = 'me'; yield api.users.messages.delete(parameters); }); } exports.deleteEmail = deleteEmail;