google-authenticator-util
Version:
Google authenticator tool for backend development / automation
144 lines (143 loc) • 7.92 kB
JavaScript
;
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;