@auxcode/auxta 1.3.52-beta.2 → 1.3.52

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (79) hide show
  1. package/build/{cjs/macros → macros}/helpers/emailHelper.js +12 -18
  2. package/build/{cjs/puppeteer → puppeteer}/puppeteer.d.ts +2 -2
  3. package/build/{cjs/puppeteer → puppeteer}/puppeteer.js +7 -3
  4. package/package.json +5 -5
  5. package/build/esm/AuxTA.d.ts +0 -62
  6. package/build/esm/AuxTA.js +0 -125
  7. package/build/esm/auxta/configs/config.d.ts +0 -57
  8. package/build/esm/auxta/configs/config.js +0 -64
  9. package/build/esm/auxta/enums/status-of.step.d.ts +0 -7
  10. package/build/esm/auxta/enums/status-of.step.js +0 -8
  11. package/build/esm/auxta/helpers/response.helper.d.ts +0 -10
  12. package/build/esm/auxta/helpers/response.helper.js +0 -11
  13. package/build/esm/auxta/helpers/start.helper.d.ts +0 -1
  14. package/build/esm/auxta/helpers/start.helper.js +0 -24
  15. package/build/esm/auxta/hooks/report.hook.d.ts +0 -14
  16. package/build/esm/auxta/hooks/report.hook.js +0 -59
  17. package/build/esm/auxta/models/upload.model.d.ts +0 -35
  18. package/build/esm/auxta/models/upload.model.js +0 -78
  19. package/build/esm/auxta/services/log.service.d.ts +0 -31
  20. package/build/esm/auxta/services/log.service.js +0 -57
  21. package/build/esm/auxta/services/report.service.d.ts +0 -31
  22. package/build/esm/auxta/services/report.service.js +0 -168
  23. package/build/esm/auxta/services/runtime.service.d.ts +0 -16
  24. package/build/esm/auxta/services/runtime.service.js +0 -37
  25. package/build/esm/auxta/utilities/runtime.helper.d.ts +0 -15
  26. package/build/esm/auxta/utilities/runtime.helper.js +0 -15
  27. package/build/esm/auxta/utilities/screenshot.helper.d.ts +0 -4
  28. package/build/esm/auxta/utilities/screenshot.helper.js +0 -51
  29. package/build/esm/auxta/utilities/start-suite.helper.d.ts +0 -17
  30. package/build/esm/auxta/utilities/start-suite.helper.js +0 -26
  31. package/build/esm/macros/helpers/Aux2faAuth.d.ts +0 -7
  32. package/build/esm/macros/helpers/Aux2faAuth.js +0 -25
  33. package/build/esm/macros/helpers/AuxGoogleAuth.d.ts +0 -22
  34. package/build/esm/macros/helpers/AuxGoogleAuth.js +0 -190
  35. package/build/esm/macros/helpers/code.helper.d.ts +0 -23
  36. package/build/esm/macros/helpers/code.helper.js +0 -218
  37. package/build/esm/macros/helpers/emailHelper.d.ts +0 -19
  38. package/build/esm/macros/helpers/emailHelper.js +0 -170
  39. package/build/esm/macros/helpers/extend-default-page.d.ts +0 -6
  40. package/build/esm/macros/helpers/extend-default-page.js +0 -82
  41. package/build/esm/puppeteer/puppeteer.d.ts +0 -25
  42. package/build/esm/puppeteer/puppeteer.js +0 -201
  43. package/build/tsconfig-cjs.tsbuildinfo +0 -1
  44. package/build/tsconfig.tsbuildinfo +0 -1
  45. /package/build/{cjs/AuxTA.d.ts → AuxTA.d.ts} +0 -0
  46. /package/build/{cjs/AuxTA.js → AuxTA.js} +0 -0
  47. /package/build/{cjs/auxta → auxta}/configs/config.d.ts +0 -0
  48. /package/build/{cjs/auxta → auxta}/configs/config.js +0 -0
  49. /package/build/{cjs/auxta → auxta}/enums/status-of.step.d.ts +0 -0
  50. /package/build/{cjs/auxta → auxta}/enums/status-of.step.js +0 -0
  51. /package/build/{cjs/auxta → auxta}/helpers/response.helper.d.ts +0 -0
  52. /package/build/{cjs/auxta → auxta}/helpers/response.helper.js +0 -0
  53. /package/build/{cjs/auxta → auxta}/helpers/start.helper.d.ts +0 -0
  54. /package/build/{cjs/auxta → auxta}/helpers/start.helper.js +0 -0
  55. /package/build/{cjs/auxta → auxta}/hooks/report.hook.d.ts +0 -0
  56. /package/build/{cjs/auxta → auxta}/hooks/report.hook.js +0 -0
  57. /package/build/{cjs/auxta → auxta}/models/upload.model.d.ts +0 -0
  58. /package/build/{cjs/auxta → auxta}/models/upload.model.js +0 -0
  59. /package/build/{cjs/auxta → auxta}/services/log.service.d.ts +0 -0
  60. /package/build/{cjs/auxta → auxta}/services/log.service.js +0 -0
  61. /package/build/{cjs/auxta → auxta}/services/report.service.d.ts +0 -0
  62. /package/build/{cjs/auxta → auxta}/services/report.service.js +0 -0
  63. /package/build/{cjs/auxta → auxta}/services/runtime.service.d.ts +0 -0
  64. /package/build/{cjs/auxta → auxta}/services/runtime.service.js +0 -0
  65. /package/build/{cjs/auxta → auxta}/utilities/runtime.helper.d.ts +0 -0
  66. /package/build/{cjs/auxta → auxta}/utilities/runtime.helper.js +0 -0
  67. /package/build/{cjs/auxta → auxta}/utilities/screenshot.helper.d.ts +0 -0
  68. /package/build/{cjs/auxta → auxta}/utilities/screenshot.helper.js +0 -0
  69. /package/build/{cjs/auxta → auxta}/utilities/start-suite.helper.d.ts +0 -0
  70. /package/build/{cjs/auxta → auxta}/utilities/start-suite.helper.js +0 -0
  71. /package/build/{cjs/macros → macros}/helpers/Aux2faAuth.d.ts +0 -0
  72. /package/build/{cjs/macros → macros}/helpers/Aux2faAuth.js +0 -0
  73. /package/build/{cjs/macros → macros}/helpers/AuxGoogleAuth.d.ts +0 -0
  74. /package/build/{cjs/macros → macros}/helpers/AuxGoogleAuth.js +0 -0
  75. /package/build/{cjs/macros → macros}/helpers/code.helper.d.ts +0 -0
  76. /package/build/{cjs/macros → macros}/helpers/code.helper.js +0 -0
  77. /package/build/{cjs/macros → macros}/helpers/emailHelper.d.ts +0 -0
  78. /package/build/{cjs/macros → macros}/helpers/extend-default-page.d.ts +0 -0
  79. /package/build/{cjs/macros → macros}/helpers/extend-default-page.js +0 -0
@@ -1,190 +0,0 @@
1
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
- return new (P || (P = Promise))(function (resolve, reject) {
4
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
- step((generator = generator.apply(thisArg, _arguments || [])).next());
8
- });
9
- };
10
- import { config } from "../../auxta/configs/config";
11
- import puppeteer from "../../puppeteer/puppeteer";
12
- import FunctionHelper from "../helpers/code.helper";
13
- import StatusOfStep from "../../auxta/enums/status-of.step";
14
- const fs = require('fs');
15
- const readline = require('readline');
16
- const { google } = require("googleapis");
17
- const SCOPES = [
18
- 'https://www.googleapis.com/auth/gmail.addons.current.action.compose',
19
- 'https://www.googleapis.com/auth/gmail.addons.current.message.action',
20
- 'https://www.googleapis.com/auth/gmail.labels',
21
- 'https://www.googleapis.com/auth/gmail.addons.current.message.metadata',
22
- 'https://www.googleapis.com/auth/gmail.addons.current.message.readonly',
23
- 'https://www.googleapis.com/auth/gmail.send',
24
- 'https://mail.google.com/',
25
- 'https://www.googleapis.com/auth/gmail.modify',
26
- 'https://www.googleapis.com/auth/gmail.compose',
27
- 'https://www.googleapis.com/auth/gmail.readonly',
28
- 'https://www.googleapis.com/auth/gmail.insert',
29
- ];
30
- const TOKEN_PATH = 'token.json';
31
- let TOKEN = '';
32
- let EMAIL = '';
33
- let PASSWORD = '';
34
- export class AuxGoogleAuth {
35
- static get oAuth2Client() {
36
- return this._oAuth2Client;
37
- }
38
- static get googleClient() {
39
- return google;
40
- }
41
- static get gmailClient() {
42
- return google.gmail({ version: 'v1', auth: this._oAuth2Client });
43
- }
44
- static setupBrowser() {
45
- return __awaiter(this, void 0, void 0, function* () {
46
- yield this.authorize(this.credentialsJson);
47
- });
48
- }
49
- static setEmailPassword(email, password) {
50
- return __awaiter(this, void 0, void 0, function* () {
51
- EMAIL = email;
52
- PASSWORD = password;
53
- });
54
- }
55
- static setupHeadless() {
56
- return __awaiter(this, void 0, void 0, function* () {
57
- yield this.authorizeHeadless(this.credentialsJson);
58
- });
59
- }
60
- static authorize(credentials) {
61
- return __awaiter(this, void 0, void 0, function* () {
62
- const { client_secret, client_id, redirect_uris } = credentials.installed;
63
- const oAuth2Client = new google.auth.OAuth2(client_id, client_secret, redirect_uris[0]);
64
- try {
65
- let token = fs.readFileSync(TOKEN_PATH);
66
- if (token.length > 0 && token !== undefined) {
67
- oAuth2Client.setCredentials(JSON.parse(token));
68
- this._oAuth2Client = oAuth2Client;
69
- return;
70
- }
71
- yield this.getNewToken(oAuth2Client);
72
- }
73
- catch (e) {
74
- yield this.getNewToken(oAuth2Client);
75
- }
76
- });
77
- }
78
- static authorizeHeadless(credentials) {
79
- return __awaiter(this, void 0, void 0, function* () {
80
- const { client_secret, client_id, redirect_uris } = credentials.installed;
81
- const oAuth2Client = new google.auth.OAuth2(client_id, client_secret, redirect_uris[0]);
82
- try {
83
- if (TOKEN) {
84
- oAuth2Client.setCredentials(TOKEN);
85
- this._oAuth2Client = oAuth2Client;
86
- return;
87
- }
88
- yield this.getNewTokenHeadless(oAuth2Client);
89
- }
90
- catch (e) {
91
- yield this.getNewTokenHeadless(oAuth2Client);
92
- }
93
- });
94
- }
95
- static getNewToken(oAuth2Client) {
96
- return __awaiter(this, void 0, void 0, function* () {
97
- const authUrl = oAuth2Client.generateAuthUrl({
98
- access_type: 'offline',
99
- prompt: 'consent',
100
- scope: SCOPES,
101
- });
102
- console.log('Authorize this app by visiting this url:', authUrl);
103
- const rl = readline.createInterface({
104
- input: process.stdin,
105
- output: process.stdout,
106
- });
107
- rl.question('Enter the code from that page here: ', (code) => {
108
- rl.close();
109
- oAuth2Client.getToken(code, (err, token) => {
110
- if (err)
111
- return console.error('Error retrieving access token', err);
112
- oAuth2Client.setCredentials(token);
113
- fs.writeFile(TOKEN_PATH, JSON.stringify(token), (err) => {
114
- if (err)
115
- return console.error(err);
116
- console.log('Token stored to', TOKEN_PATH);
117
- });
118
- this._oAuth2Client = oAuth2Client;
119
- });
120
- });
121
- });
122
- }
123
- static getNewTokenHeadless(oAuth2Client) {
124
- return __awaiter(this, void 0, void 0, function* () {
125
- const authUrl = oAuth2Client.generateAuthUrl({
126
- access_type: 'offline',
127
- prompt: 'consent',
128
- scope: SCOPES,
129
- });
130
- const code = yield this.LogIn(authUrl);
131
- this._oAuth2Client = yield (new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () {
132
- yield oAuth2Client.getToken(code, (err, token) => {
133
- if (err)
134
- return console.error('Error retrieving access token', err);
135
- oAuth2Client.setCredentials(token);
136
- TOKEN = token;
137
- this._oAuth2Client = oAuth2Client;
138
- FunctionHelper.log('Then', 'I login with the google account', StatusOfStep.PASSED);
139
- resolve(oAuth2Client);
140
- });
141
- })));
142
- });
143
- }
144
- static LogIn(authUrl) {
145
- var _a, _b;
146
- return __awaiter(this, void 0, void 0, function* () {
147
- const context = yield puppeteer.defaultPage.browser().createIncognitoBrowserContext();
148
- const page = yield context.newPage();
149
- yield page.goto(authUrl);
150
- yield FunctionHelper.waitForSelector('visible', '#identifierId', config.timeout, page);
151
- yield ((_a = (yield page.$('#identifierId'))) === null || _a === void 0 ? void 0 : _a.type(EMAIL));
152
- yield (yield page.$$('button'))[3].click();
153
- yield FunctionHelper.timeout(3000);
154
- yield FunctionHelper.waitForSelector('visible', 'input[type="password"]', config.timeout, page);
155
- yield ((_b = (yield page.$('input[type="password"]'))) === null || _b === void 0 ? void 0 : _b.type(PASSWORD));
156
- yield (yield page.$$('button'))[1].click();
157
- yield FunctionHelper.timeout(3000);
158
- yield FunctionHelper.waitForSelector('visible', '#headingText', config.timeout, page);
159
- yield (yield page.$$('button'))[2].click();
160
- yield FunctionHelper.timeout(3000);
161
- const checkbox = yield page.$$('input[type="checkbox"]');
162
- if (checkbox.length > 0) {
163
- yield FunctionHelper.waitForSelector('visible', 'input[type="checkbox"]', config.timeout, page);
164
- yield checkbox[0].click();
165
- yield (yield page.$$('button'))[2].click();
166
- }
167
- else {
168
- yield (yield page.$$('button'))[2].click();
169
- }
170
- yield FunctionHelper.timeout(3000);
171
- const currentUrl = page.url();
172
- const code = currentUrl.substring(currentUrl.indexOf("code=") + 5, currentUrl.lastIndexOf("&"));
173
- FunctionHelper.log('Then', 'I get the code form the url', StatusOfStep.PASSED);
174
- yield page.close();
175
- return decodeURIComponent(code);
176
- });
177
- }
178
- }
179
- AuxGoogleAuth.credentialsJson = {
180
- "installed": {
181
- "client_id": "120362272213-usevfijf76jj5nsr502i2lai6nu71oq8.apps.googleusercontent.com",
182
- "project_id": "auxta-library",
183
- "auth_uri": "https://accounts.google.com/o/oauth2/auth",
184
- "token_uri": "https://oauth2.googleapis.com/token",
185
- "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
186
- "client_secret": "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",
187
- "redirect_uris": ["https://auxcode.com"]
188
- }
189
- };
190
- export default new AuxGoogleAuth();
@@ -1,23 +0,0 @@
1
- import { StatusOfStep } from "../../auxta/enums/status-of.step";
2
- import { ExtendDefaultPage } from "./extend-default-page";
3
- export declare class FunctionHelper extends ExtendDefaultPage {
4
- log(keyword: string, name: string, status: StatusOfStep, screenshot?: string): void;
5
- screenshot(page?: import("puppeteer").Page): Promise<string | undefined>;
6
- screenshotCompare(key: string, page?: import("puppeteer").Page): Promise<void>;
7
- suggest(name: string): void;
8
- private getEscapedText;
9
- clickByText(selector: string, text: string, dotOrText?: string, options?: {}, page?: import("puppeteer").Page, time?: number, log_message?: boolean): Promise<void>;
10
- clickByTextWithClass(class_selector: string, class_name: string, selector: string, text: string, dotOrText?: string, page?: import("puppeteer").Page): Promise<void>;
11
- waitForSelectorWithText(selector: string, text: string, dotOrText?: string, page?: import("puppeteer").Page): Promise<boolean>;
12
- timeout(timeout?: number, page?: import("puppeteer").Page): Promise<void>;
13
- waitForSelector(option: string, selector: string, time?: number, page?: import("puppeteer").Page, log_message?: boolean): Promise<void>;
14
- urlContains(selector: string, page?: import("puppeteer").Page): Promise<void>;
15
- pressEnter(page?: import("puppeteer").Page): Promise<void>;
16
- emulate(phone_name: string, page?: import("puppeteer").Page): Promise<void>;
17
- restartBrowser(): Promise<void>;
18
- clickAndWaitForPageToBeCreated(selector: string, page?: import("puppeteer").Page): Promise<void>;
19
- closeLastPage(page?: import("puppeteer").Page): Promise<void>;
20
- microsoftLogin(button: string, email: string, password: string, page?: import("puppeteer").Page): Promise<void>;
21
- }
22
- declare const _default: FunctionHelper;
23
- export default _default;
@@ -1,218 +0,0 @@
1
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
- return new (P || (P = Promise))(function (resolve, reject) {
4
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
- step((generator = generator.apply(thisArg, _arguments || [])).next());
8
- });
9
- };
10
- import log from "../../auxta/services/log.service";
11
- import puppeteer from "../../puppeteer/puppeteer";
12
- import { StatusOfStep } from "../../auxta/enums/status-of.step";
13
- import { StepStatus } from "../../AuxTA";
14
- import { ExtendDefaultPage } from "./extend-default-page";
15
- import { KnownDevices } from "puppeteer";
16
- import { captureScreenshotPage } from "../../auxta/utilities/screenshot.helper";
17
- import { compareScreenshots } from "../../auxta/services/report.service";
18
- export class FunctionHelper extends ExtendDefaultPage {
19
- log(keyword, name, status, screenshot) {
20
- log.push(keyword, name, status, screenshot);
21
- }
22
- screenshot(page = puppeteer.defaultPage) {
23
- return __awaiter(this, void 0, void 0, function* () {
24
- const screenshotBuffer = yield captureScreenshotPage(page);
25
- if (screenshotBuffer) {
26
- return screenshotBuffer.toString('base64');
27
- }
28
- });
29
- }
30
- screenshotCompare(key, page = puppeteer.defaultPage) {
31
- return __awaiter(this, void 0, void 0, function* () {
32
- if (process.env.ENVIRONMENT !== 'LOCAL') {
33
- const screenshotBuffer = yield captureScreenshotPage(page);
34
- if (screenshotBuffer) {
35
- const screenshot = screenshotBuffer.toString('base64');
36
- yield compareScreenshots(key, screenshot);
37
- log.push('Then', `I compare screenshots with key ${key}`, StatusOfStep.PASSED, screenshot, key);
38
- }
39
- }
40
- else {
41
- log.push('Then', `I compare screenshots with key ${key}`, StatusOfStep.PASSED, undefined, key);
42
- }
43
- });
44
- }
45
- suggest(name) {
46
- log.addSuggestion(name);
47
- }
48
- getEscapedText(text) {
49
- const splitedQuotes = text.replace(/'/g, `', "'", '`);
50
- return `concat('${splitedQuotes}', '')`;
51
- }
52
- clickByText(selector, text, dotOrText = '.', options = {}, page = puppeteer.defaultPage, time = this.defaultTimeout, log_message = true) {
53
- return __awaiter(this, void 0, void 0, function* () {
54
- const message = `I clicked on the '${text}' '${selector}'`;
55
- try {
56
- const [linkHandlers] = yield page.$x(`//${selector}[contains(${dotOrText},"${text}")]`);
57
- if (linkHandlers) {
58
- yield linkHandlers.click(options);
59
- log.push('Then', message, StatusOfStep.PASSED);
60
- }
61
- }
62
- catch (e) {
63
- if (log_message) {
64
- log.push('And', `${message}, but it didn't appear in ${time / 1000} seconds.`, StatusOfStep.FAILED);
65
- }
66
- throw new Error(message);
67
- }
68
- if (log_message) {
69
- log.push('And', message, StatusOfStep.PASSED);
70
- }
71
- });
72
- }
73
- clickByTextWithClass(class_selector, class_name, selector, text, dotOrText = '.', page = puppeteer.defaultPage) {
74
- return __awaiter(this, void 0, void 0, function* () {
75
- const message = `I click on the '${text}' '${selector}'`;
76
- try {
77
- const [linkHandlers] = yield page.$x(`//${class_selector}[contains(@class,${this.getEscapedText(class_name)})]//${selector}[contains(${dotOrText},"${text}")]`);
78
- if (linkHandlers) {
79
- yield linkHandlers.click();
80
- log.push('Then', message, StatusOfStep.PASSED);
81
- return;
82
- }
83
- }
84
- catch (e) {
85
- }
86
- log.push('Then', message, StatusOfStep.FAILED);
87
- throw new Error(message);
88
- });
89
- }
90
- waitForSelectorWithText(selector, text, dotOrText = '.', page = puppeteer.defaultPage) {
91
- return __awaiter(this, void 0, void 0, function* () {
92
- const message = `I check for '${text}' on the current page`;
93
- try {
94
- yield page.waitForSelector(selector, {
95
- timeout: this.defaultTimeout
96
- });
97
- const linkHandlers = yield page.$x(`//${selector}[contains(${dotOrText},"${text}")]`);
98
- if (linkHandlers.length > 0) {
99
- log.push('And', message, StatusOfStep.PASSED);
100
- return true;
101
- }
102
- }
103
- catch (e) {
104
- }
105
- log.push('And', message, StatusOfStep.FAILED);
106
- throw new Error(message);
107
- });
108
- }
109
- timeout(timeout = this.defaultTimeout, page = puppeteer.defaultPage) {
110
- return __awaiter(this, void 0, void 0, function* () {
111
- yield new Promise(r => setTimeout(r, timeout));
112
- });
113
- }
114
- waitForSelector(option, selector, time = this.defaultTimeout, page = puppeteer.defaultPage, log_message = true) {
115
- return __awaiter(this, void 0, void 0, function* () {
116
- const message = `I checked for the '${selector}' element to be ${option}`;
117
- try {
118
- yield page.waitForSelector(selector, {
119
- [option]: true,
120
- timeout: time
121
- });
122
- }
123
- catch (e) {
124
- if (log_message) {
125
- log.push('And', `${message}, but it didn't appear in ${time / 1000} seconds.`, StatusOfStep.FAILED);
126
- }
127
- throw new Error(message);
128
- }
129
- if (log_message) {
130
- log.push('And', message, StatusOfStep.PASSED);
131
- }
132
- });
133
- }
134
- urlContains(selector, page = puppeteer.defaultPage) {
135
- return __awaiter(this, void 0, void 0, function* () {
136
- const url = page.url();
137
- let message = `I am on the ${selector} page`;
138
- if (!url.includes(selector)) {
139
- log.push('And', message, StatusOfStep.FAILED);
140
- throw new Error(message);
141
- }
142
- log.push('And', message, StatusOfStep.PASSED);
143
- });
144
- }
145
- pressEnter(page = puppeteer.defaultPage) {
146
- return __awaiter(this, void 0, void 0, function* () {
147
- yield page.keyboard.press('Enter');
148
- });
149
- }
150
- emulate(phone_name, page = puppeteer.defaultPage) {
151
- return __awaiter(this, void 0, void 0, function* () {
152
- const phone = KnownDevices[phone_name];
153
- yield page.emulate(phone);
154
- });
155
- }
156
- restartBrowser() {
157
- return __awaiter(this, void 0, void 0, function* () {
158
- yield puppeteer.close();
159
- yield puppeteer.startBrowser();
160
- });
161
- }
162
- clickAndWaitForPageToBeCreated(selector, page = puppeteer.defaultPage) {
163
- return __awaiter(this, void 0, void 0, function* () {
164
- const nav = new Promise(res => page.browser().on('targetcreated', res));
165
- yield page.click(selector);
166
- yield nav;
167
- });
168
- }
169
- closeLastPage(page = puppeteer.defaultPage) {
170
- return __awaiter(this, void 0, void 0, function* () {
171
- const pages = yield page.browser().pages();
172
- yield pages[pages.length - 1].close();
173
- });
174
- }
175
- microsoftLogin(button, email, password, page = puppeteer.defaultPage) {
176
- var _a;
177
- return __awaiter(this, void 0, void 0, function* () {
178
- const email_input = 'input[type="email"]';
179
- const password_input = 'input[type="password"]';
180
- const next_button = 'input[value="Next"]';
181
- const sign_in_button = 'input[value="Sign in"]';
182
- const no_button = 'input.ext-secondary';
183
- yield this.clickAndWaitForPageToBeCreated(button, page);
184
- const pages = yield page.browser().pages();
185
- const loginPage = pages[pages.length - 1];
186
- yield this.extend_page_functions(loginPage);
187
- yield loginPage.waitForNetworkIdle();
188
- yield this.waitForSelector('visible', next_button, 60000, loginPage);
189
- yield loginPage.type(email_input, email, { delay: 0 });
190
- yield loginPage.keyboard.press('Enter');
191
- yield loginPage.waitForNetworkIdle();
192
- let isWorkOrPersonalVisible = yield page.$('div.table');
193
- if (!!isWorkOrPersonalVisible) {
194
- yield (yield page.$$('div.table'))[0].click();
195
- console.log('Then', 'I clicked Work or school account', StepStatus.PASSED);
196
- yield page.waitForNetworkIdle();
197
- }
198
- else {
199
- yield page.waitForNetworkIdle();
200
- }
201
- yield this.waitForSelector('visible', sign_in_button, 60000, loginPage);
202
- yield this.waitForSelector('visible', password_input, 6000, loginPage);
203
- try {
204
- (_a = (yield loginPage.$(password_input))) === null || _a === void 0 ? void 0 : _a.type(password);
205
- yield this.log('Then', `I type password into the ${password_input}`, StepStatus.PASSED);
206
- }
207
- catch (e) {
208
- yield this.log('Then', `I type password into the ${password_input}`, StepStatus.FAILED);
209
- throw new Error(`I type password into the ${password_input}`);
210
- }
211
- yield this.timeout(3000);
212
- yield loginPage.keyboard.press('Enter');
213
- yield this.waitForSelector('visible', no_button, 60000, loginPage);
214
- yield loginPage.keyboard.press('Enter');
215
- });
216
- }
217
- }
218
- export default new FunctionHelper();
@@ -1,19 +0,0 @@
1
- import { gmail_v1 } from "googleapis";
2
- export declare class EmailHelper {
3
- verifyEmail(from_name: string, from_email: string, subject: string, body: string, link?: boolean): Promise<{
4
- id: string;
5
- threadId: string;
6
- link: string;
7
- } | undefined>;
8
- sendEmail(to: string, subject: string, body: string): Promise<void>;
9
- replyEmail(id: string, threadId: string, body: string): Promise<void>;
10
- private static send;
11
- private getHeader;
12
- private getBody;
13
- private getCurrentUserEmail;
14
- private getUrl;
15
- }
16
- export interface gmailResponse extends gmail_v1.Gmail {
17
- }
18
- declare const _default: EmailHelper;
19
- export default _default;
@@ -1,170 +0,0 @@
1
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
- return new (P || (P = Promise))(function (resolve, reject) {
4
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
- step((generator = generator.apply(thisArg, _arguments || [])).next());
8
- });
9
- };
10
- import log from "../../auxta/services/log.service";
11
- import { AuxGoogleAuth } from "./AuxGoogleAuth";
12
- import { StepStatus } from "../../AuxTA";
13
- const base64 = require('js-base64');
14
- const MailComposer = require('nodemailer/lib/mail-composer');
15
- export class EmailHelper {
16
- verifyEmail(from_name, from_email, subject, body, link = false) {
17
- return __awaiter(this, void 0, void 0, function* () {
18
- yield AuxGoogleAuth.setupHeadless();
19
- let timeoutCount = 12000;
20
- while (timeoutCount <= 60000) {
21
- const res = yield AuxGoogleAuth.gmailClient.users.messages.list({
22
- userId: "me",
23
- maxResults: 3
24
- });
25
- const messagesIds = res.data.messages;
26
- if (!messagesIds || messagesIds.length === 0) {
27
- throw new Error('No messagesIds found.');
28
- }
29
- for (const messageId of messagesIds) {
30
- if (messageId.id) {
31
- const gmailResponse = yield AuxGoogleAuth.gmailClient.users.messages.get({
32
- userId: "me",
33
- id: messageId.id.toString(),
34
- format: 'FULL'
35
- });
36
- if (gmailResponse.data.payload && gmailResponse.data.id && gmailResponse.data.threadId) {
37
- const message_sender = this.getHeader('from', gmailResponse);
38
- const message_subject = this.getHeader('subject', gmailResponse);
39
- const message_body = this.getBody(subject, gmailResponse);
40
- if (message_sender.toLocaleLowerCase().includes(from_email) && message_sender.toLocaleLowerCase().includes(from_name.toLocaleLowerCase()) &&
41
- message_subject.toLocaleLowerCase().includes(subject.toLocaleLowerCase()) && message_body.toLocaleLowerCase().includes(body.toLocaleLowerCase())) {
42
- log.push('Then', `Email from: ${from_name} ${from_email} with subject: ${subject} and body: ${body} is found`, StepStatus.PASSED);
43
- yield AuxGoogleAuth.gmailClient.users.messages.modify({
44
- userId: "me",
45
- id: gmailResponse.data.id,
46
- requestBody: {
47
- 'addLabelIds': [],
48
- 'removeLabelIds': ['UNREAD']
49
- }
50
- });
51
- if (link) {
52
- const html_link = yield this.getUrl(message_body);
53
- return {
54
- id: gmailResponse.data.id,
55
- threadId: gmailResponse.data.threadId,
56
- link: html_link
57
- };
58
- }
59
- return { id: gmailResponse.data.id, threadId: gmailResponse.data.threadId, link: '' };
60
- }
61
- }
62
- break;
63
- }
64
- }
65
- yield new Promise(r => setTimeout(r, timeoutCount));
66
- timeoutCount += 12000;
67
- }
68
- yield log.push('Then', `Email from: ${from_name} ${from_email} with subject: ${subject} and body: ${body} is found`, StepStatus.FAILED);
69
- });
70
- }
71
- sendEmail(to, subject, body) {
72
- return __awaiter(this, void 0, void 0, function* () {
73
- yield AuxGoogleAuth.setupHeadless();
74
- const options = {
75
- to: to,
76
- from: this.getCurrentUserEmail(),
77
- subject: subject,
78
- html: body
79
- };
80
- yield EmailHelper.send(options);
81
- });
82
- }
83
- replyEmail(id, threadId, body) {
84
- return __awaiter(this, void 0, void 0, function* () {
85
- yield AuxGoogleAuth.setupHeadless();
86
- const gmailResponse = yield AuxGoogleAuth.gmailClient.users.messages.get({
87
- userId: "me",
88
- id: id,
89
- format: 'FULL'
90
- });
91
- if (gmailResponse.data.payload) {
92
- const message_subject = this.getHeader('subject', gmailResponse);
93
- const message_messageID = this.getHeader('Message-ID', gmailResponse);
94
- const reply_to = this.getHeader('reply-to', gmailResponse);
95
- const options = {
96
- to: reply_to,
97
- from: this.getCurrentUserEmail(),
98
- subject: `Re: ${message_subject}`,
99
- references: message_messageID,
100
- inReplyTo: [message_messageID],
101
- html: body
102
- };
103
- yield EmailHelper.send(options, threadId);
104
- }
105
- });
106
- }
107
- static send(options, threadId) {
108
- return __awaiter(this, void 0, void 0, function* () {
109
- const mailComposer = new MailComposer(options);
110
- const message = yield mailComposer.compile().build();
111
- const encodeMessage = Buffer.from(message).toString('base64').replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, '');
112
- yield AuxGoogleAuth.gmailClient.users.messages.send({
113
- userId: "me",
114
- requestBody: {
115
- threadId: threadId,
116
- raw: encodeMessage
117
- }
118
- });
119
- });
120
- }
121
- getHeader(value, headers) {
122
- for (const header of headers.data.payload.headers) {
123
- if (header.name.toLocaleLowerCase() === value.toLocaleLowerCase()) {
124
- return header.value;
125
- }
126
- }
127
- }
128
- getBody(subject, gmailResponse) {
129
- try {
130
- const body = gmailResponse.data.payload.parts[0].body.data;
131
- if (body) {
132
- return base64.decode(body);
133
- }
134
- else {
135
- return '';
136
- }
137
- }
138
- catch (e) {
139
- console.log(e);
140
- throw new Error(`Email with subject: ${subject} body ${gmailResponse.data.payload.parts[0].body.data} is empty`);
141
- }
142
- }
143
- getCurrentUserEmail() {
144
- return __awaiter(this, void 0, void 0, function* () {
145
- yield AuxGoogleAuth.setupHeadless();
146
- const profile = yield AuxGoogleAuth.gmailClient.users.getProfile({ userId: "me" });
147
- return profile.data.emailAddress;
148
- });
149
- }
150
- getUrl(body) {
151
- return __awaiter(this, void 0, void 0, function* () {
152
- const links = [];
153
- const split = body.split('\r\n\r\n');
154
- for (const splitElement of split) {
155
- if (splitElement.toString().startsWith('https')) {
156
- links.push(splitElement);
157
- }
158
- }
159
- if (links.length > 1) {
160
- return links.sort(function (a, b) {
161
- return b.length - a.length;
162
- })[0];
163
- }
164
- else {
165
- return links[0];
166
- }
167
- });
168
- }
169
- }
170
- export default new EmailHelper();
@@ -1,6 +0,0 @@
1
- export declare class ExtendDefaultPage {
2
- defaultTimeout: number;
3
- extend_page_functions(page: any, time?: number): Promise<any>;
4
- }
5
- declare const _default: ExtendDefaultPage;
6
- export default _default;