@bigbinary/neeto-playwright-commons 2.2.0 → 2.2.2
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.
- package/index.cjs.js +122 -84
- package/index.cjs.js.map +1 -1
- package/index.d.ts +29 -16
- package/index.js +121 -84
- package/index.js.map +1 -1
- package/package.json +1 -1
package/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as playwright_core from 'playwright-core';
|
|
2
2
|
import * as _playwright_test from '@playwright/test';
|
|
3
|
-
import { Page, APIRequestContext, Response, APIResponse, Locator, Fixtures, PlaywrightWorkerArgs, PlaywrightWorkerOptions, PlaywrightTestArgs, PlaywrightTestOptions, Browser,
|
|
3
|
+
import { Page, APIRequestContext, Response, APIResponse, Locator, BrowserContext, Fixtures, PlaywrightWorkerArgs, PlaywrightWorkerOptions, PlaywrightTestArgs, PlaywrightTestOptions, Browser, FrameLocator, CDPSession, PlaywrightTestConfig, LaunchOptions } from '@playwright/test';
|
|
4
4
|
import { TFunction } from 'i18next';
|
|
5
5
|
import { I18nPlaywrightFixture } from 'playwright-i18next-fixture';
|
|
6
6
|
import { TOTP, Secret } from 'otpauth';
|
|
@@ -805,16 +805,18 @@ interface BaseRailsEmailSearchParams {
|
|
|
805
805
|
receivedAfter: string;
|
|
806
806
|
}
|
|
807
807
|
type RailsEmailSearchParams = Partial<BaseRailsEmailSearchParams>;
|
|
808
|
-
declare class
|
|
809
|
-
private
|
|
808
|
+
declare class RailsEmailApiClient {
|
|
809
|
+
private readonly port;
|
|
810
|
+
private readonly subdomain;
|
|
811
|
+
private readonly baseUrl;
|
|
812
|
+
private readonly emailsEndpoint;
|
|
810
813
|
constructor();
|
|
811
814
|
private convertRawEmail;
|
|
812
|
-
private
|
|
813
|
-
private
|
|
815
|
+
private buildQueryString;
|
|
816
|
+
private fetchJson;
|
|
814
817
|
listEmails: (searchParams?: RailsEmailSearchParams) => Promise<RailsEmail[]>;
|
|
815
|
-
private buildSearchArgs;
|
|
816
818
|
getLatestEmail: (searchParams?: RailsEmailSearchParams) => Promise<RailsEmail | null>;
|
|
817
|
-
clearEmails: () => Promise<
|
|
819
|
+
clearEmails: () => Promise<unknown>;
|
|
818
820
|
}
|
|
819
821
|
declare class RoleApis {
|
|
820
822
|
private neetoPlaywrightUtilities;
|
|
@@ -1144,10 +1146,10 @@ interface AttachmentDetails$1 {
|
|
|
1144
1146
|
}
|
|
1145
1147
|
declare class RailsEmailUtils {
|
|
1146
1148
|
private neetoPlaywrightUtilities;
|
|
1147
|
-
private
|
|
1149
|
+
private railsEmailClient;
|
|
1148
1150
|
constructor(neetoPlaywrightUtilities: CustomCommands);
|
|
1149
1151
|
private convertRailsEmailToFormattedList;
|
|
1150
|
-
clearEmails: () => Promise<
|
|
1152
|
+
clearEmails: () => Promise<unknown>;
|
|
1151
1153
|
getLatestEmail: (searchParams: RailsEmailSearchParams) => Promise<RailsEmail | null>;
|
|
1152
1154
|
listEmails: (searchParams?: RailsEmailSearchParams) => Promise<RailsEmail[]>;
|
|
1153
1155
|
/**
|
|
@@ -1223,7 +1225,7 @@ declare class RailsEmailUtils {
|
|
|
1223
1225
|
*
|
|
1224
1226
|
* This method is used to find a first email matching the search criteria. On top of the listMessage method, this method waits until a specific mail is received or the timeout is exceeded. This method is useful for fetching an email once an action is triggered since it waits for the message delivery and can be customized according to delays in email deliveries.
|
|
1225
1227
|
*
|
|
1226
|
-
* Note: In development environment, this method uses Rails
|
|
1228
|
+
* Note: In development environment, this method uses the Rails testing HTTP API to find messages. In other environments, it uses Fastmail APIs.
|
|
1227
1229
|
*
|
|
1228
1230
|
* messageSearchCriteria: An object containing the search criteria for matching the messages. The object can contain the keys, from, to, subject and body. All the keys of the object are optional. The values of the object are of string type and are case-insensitive. The following key-value pairs can be used:
|
|
1229
1231
|
*
|
|
@@ -1292,7 +1294,7 @@ declare class RailsEmailUtils {
|
|
|
1292
1294
|
*
|
|
1293
1295
|
* A helper method that is used to find the first code value from the matching email body. This method has been built to match the Neeto OTP emails.
|
|
1294
1296
|
*
|
|
1295
|
-
* Note: In development environment, this method uses Rails
|
|
1297
|
+
* Note: In development environment, this method uses the Rails testing HTTP API to find OTP. In other environments, it uses Fastmail APIs.
|
|
1296
1298
|
*
|
|
1297
1299
|
* The method accepts the following named arguments:
|
|
1298
1300
|
*
|
|
@@ -1320,7 +1322,7 @@ declare class RailsEmailUtils {
|
|
|
1320
1322
|
*
|
|
1321
1323
|
* This method is used to return the attachment based on the attachmentName of first email matching the search criteria. On top of the findMessage method, this method matches the attachment name with the attachments associated to the email. If any attachment matches then it will fetch the attachment details and return. If any attachment file name doesn't contain the substring attachmentName then it will throw an error saying No such attachment exists.
|
|
1322
1324
|
*
|
|
1323
|
-
* Note: In development environment, this method uses Rails
|
|
1325
|
+
* Note: In development environment, this method uses the Rails testing HTTP API to fetch attachments. In other environments, it uses Fastmail APIs.
|
|
1324
1326
|
*
|
|
1325
1327
|
* attachmentName: A substring matching the attachment file name. It can be both with or without extension.
|
|
1326
1328
|
*
|
|
@@ -1554,7 +1556,7 @@ declare class MailerUtils {
|
|
|
1554
1556
|
*
|
|
1555
1557
|
* This method is used to find a first email matching the search criteria. On top of the listMessage method, this method waits until a specific mail is received or the timeout is exceeded. This method is useful for fetching an email once an action is triggered since it waits for the message delivery and can be customized according to delays in email deliveries.
|
|
1556
1558
|
*
|
|
1557
|
-
* Note: In development environment, this method uses Rails
|
|
1559
|
+
* Note: In development environment, this method uses the Rails testing HTTP API to find messages. In other environments, it uses Fastmail APIs.
|
|
1558
1560
|
*
|
|
1559
1561
|
* messageSearchCriteria: An object containing the search criteria for matching the messages. The object can contain the keys, from, to, subject and body. All the keys of the object are optional. The values of the object are of string type and are case-insensitive. The following key-value pairs can be used:
|
|
1560
1562
|
*
|
|
@@ -1623,7 +1625,7 @@ declare class MailerUtils {
|
|
|
1623
1625
|
*
|
|
1624
1626
|
* A helper method that is used to find the first code value from the matching email body. This method has been built to match the Neeto OTP emails.
|
|
1625
1627
|
*
|
|
1626
|
-
* Note: In development environment, this method uses Rails
|
|
1628
|
+
* Note: In development environment, this method uses the Rails testing HTTP API to find OTP. In other environments, it uses Fastmail APIs.
|
|
1627
1629
|
*
|
|
1628
1630
|
* The method accepts the following named arguments:
|
|
1629
1631
|
*
|
|
@@ -1659,7 +1661,7 @@ declare class MailerUtils {
|
|
|
1659
1661
|
*
|
|
1660
1662
|
* This method is used to return the attachment based on the attachmentName of first email matching the search criteria. On top of the findMessage method, this method matches the attachment name with the attachments associated to the email. If any attachment matches then it will fetch the attachment details and return. If any attachment file name doesn't contain the substring attachmentName then it will throw an error saying No such attachment exists.
|
|
1661
1663
|
*
|
|
1662
|
-
* Note: In development environment, this method uses Rails
|
|
1664
|
+
* Note: In development environment, this method uses the Rails testing HTTP API to fetch attachments. In other environments, it uses Fastmail APIs.
|
|
1663
1665
|
*
|
|
1664
1666
|
* attachmentName: A substring matching the attachment file name. It can be both with or without extension.
|
|
1665
1667
|
*
|
|
@@ -1827,6 +1829,7 @@ declare class ColorPickerUtils {
|
|
|
1827
1829
|
}
|
|
1828
1830
|
interface CustomFixture {
|
|
1829
1831
|
neetoPlaywrightUtilities: CustomCommands;
|
|
1832
|
+
context: BrowserContext;
|
|
1830
1833
|
page: Page;
|
|
1831
1834
|
health: Health;
|
|
1832
1835
|
mailerUtils: MailerUtils;
|
|
@@ -4447,6 +4450,7 @@ declare class OrganizationPage {
|
|
|
4447
4450
|
constructor(page: Page, neetoPlaywrightUtilities: CustomCommands);
|
|
4448
4451
|
private fillOTP;
|
|
4449
4452
|
private submitEmail;
|
|
4453
|
+
private dismissAuthenticatorSetupPromptIfPresent;
|
|
4450
4454
|
/**
|
|
4451
4455
|
*
|
|
4452
4456
|
* Used to create a new organization. It takes the following parameters:
|
|
@@ -6928,6 +6932,7 @@ declare const LOGIN_SELECTORS: {
|
|
|
6928
6932
|
twitterAuthenticationButton: string;
|
|
6929
6933
|
authenticatorAppOtpInput: string;
|
|
6930
6934
|
enterOtpInputError: string;
|
|
6935
|
+
authenticatorAppLaterButton: string;
|
|
6931
6936
|
};
|
|
6932
6937
|
/**
|
|
6933
6938
|
*
|
|
@@ -8888,6 +8893,14 @@ declare const getFormattedPhoneNumber: (countryName: string, phoneNumber: string
|
|
|
8888
8893
|
* @endexample
|
|
8889
8894
|
*/
|
|
8890
8895
|
declare const generatePhoneNumberDetails: () => CountryProps;
|
|
8896
|
+
interface WarmupOptions {
|
|
8897
|
+
urls?: string[];
|
|
8898
|
+
timeout?: number;
|
|
8899
|
+
}
|
|
8900
|
+
declare function warmup({
|
|
8901
|
+
urls,
|
|
8902
|
+
timeout
|
|
8903
|
+
}?: WarmupOptions): Promise<void>;
|
|
8891
8904
|
declare class NeetoAuthServer {
|
|
8892
8905
|
private process;
|
|
8893
8906
|
private targetApp;
|
|
@@ -8947,5 +8960,5 @@ interface Overrides {
|
|
|
8947
8960
|
* @endexample
|
|
8948
8961
|
*/
|
|
8949
8962
|
declare const definePlaywrightConfig: (overrides: Overrides) => PlaywrightTestConfig<{}, {}>;
|
|
8950
|
-
export { ACTIONS, ADMIN_PANEL_SELECTORS, API_KEYS_SELECTORS, API_ROUTES, AUDIT_LOGS_SELECTORS, ApiKeysApi, ApiKeysPage, AuditLogsPage, BASE_URL, CALENDAR_LABELS, CERTIFICATE_LIMIT_EXCEEDED_MESSAGE, CERTIFICATE_LIMIT_EXCEEDED_REGEXP, CHANGELOG_WIDGET_SELECTORS, CHAT_WIDGET_SELECTORS, CHAT_WIDGET_TEXTS, COLOR, COMMON_SELECTORS, COMMON_TEXTS, COMMUNITY_TEXTS, CREDENTIALS, CURRENT_TIME_RANGES, CUSTOM_DOMAIN_SELECTORS, CUSTOM_DOMAIN_SUFFIX, CustomCommands, CustomDomainApi, CustomDomainPage, DATE_FORMATS, DATE_PICKER_SELECTORS, DATE_RANGES, DATE_TEXTS, DEFAULT_WEBHOOKS_RESPONSE_TEXT, DESCRIPTION_EDITOR_TEXTS, EMBED_SELECTORS, EMOJI_LABEL, EMPTY_STORAGE_STATE, ENGAGE_TEXTS, ENVIRONMENT, EXAMPLE_URL, EXPANDED_FONT_SIZE, EXPORT_FILE_TYPES, EditorPage, EmbedBase, FILE_FORMATS, FONT_SIZE_SELECTORS, GLOBAL_TRANSLATIONS_PATTERN, GOOGLE_ANALYTICS_SELECTORS, GOOGLE_CALENDAR_DATE_FORMAT, GOOGLE_LOGIN_SELECTORS, GOOGLE_LOGIN_TEXTS, GOOGLE_SHEETS_SELECTORS, GooglePage, HELP_CENTER_ROUTES, HELP_CENTER_SELECTORS, HelpAndProfilePage, INTEGRATIONS_TEXTS, INTEGRATION_SELECTORS, IPRestrictionsPage, IP_RESTRICTIONS_SELECTORS, IS_DEV_ENV, IS_STAGING_ENV, ImageUploader, IntegrationBase, IpRestrictionsApi, KEYBOARD_SHORTCUTS_SELECTORS, KEYBOARD_SHORTCUT_TEST_CASES, LIST_MODIFIER_SELECTORS, LIST_MODIFIER_TAGS, LOGIN_SELECTORS, MEMBER_FORM_SELECTORS, MEMBER_SELECTORS, MEMBER_TEXTS, MERGE_TAGS_SELECTORS, MICROSOFT_LOGIN_SELECTORS, MICROSOFT_LOGIN_TEXTS, MailerUtils, Member, MemberApis, MicrosoftPage, NEETO_AUTH_BASE_URL, NEETO_EDITOR_SELECTORS, NEETO_FILTERS_SELECTORS, NEETO_IMAGE_UPLOADER_SELECTORS, NEETO_ROUTES, NEETO_SEO_SELECTORS, NEETO_TEXT_MODIFIER_SELECTORS, NeetoAuthServer, NeetoTowerApi, ONBOARDING_SELECTORS, ORGANIZATION_TEXTS, OTP_EMAIL_PATTERN, OrganizationPage, PAST_TIME_RANGES, PHONE_NUMBER_FORMATS, PLURAL, PROFILE_LINKS, PROFILE_SECTION_SELECTORS, PROJECT_NAMES, PROJECT_TRANSLATIONS_PATH, ROLES_SELECTORS, ROUTES,
|
|
8963
|
+
export { ACTIONS, ADMIN_PANEL_SELECTORS, API_KEYS_SELECTORS, API_ROUTES, AUDIT_LOGS_SELECTORS, ApiKeysApi, ApiKeysPage, AuditLogsPage, BASE_URL, CALENDAR_LABELS, CERTIFICATE_LIMIT_EXCEEDED_MESSAGE, CERTIFICATE_LIMIT_EXCEEDED_REGEXP, CHANGELOG_WIDGET_SELECTORS, CHAT_WIDGET_SELECTORS, CHAT_WIDGET_TEXTS, COLOR, COMMON_SELECTORS, COMMON_TEXTS, COMMUNITY_TEXTS, CREDENTIALS, CURRENT_TIME_RANGES, CUSTOM_DOMAIN_SELECTORS, CUSTOM_DOMAIN_SUFFIX, CustomCommands, CustomDomainApi, CustomDomainPage, DATE_FORMATS, DATE_PICKER_SELECTORS, DATE_RANGES, DATE_TEXTS, DEFAULT_WEBHOOKS_RESPONSE_TEXT, DESCRIPTION_EDITOR_TEXTS, EMBED_SELECTORS, EMOJI_LABEL, EMPTY_STORAGE_STATE, ENGAGE_TEXTS, ENVIRONMENT, EXAMPLE_URL, EXPANDED_FONT_SIZE, EXPORT_FILE_TYPES, EditorPage, EmbedBase, FILE_FORMATS, FONT_SIZE_SELECTORS, GLOBAL_TRANSLATIONS_PATTERN, GOOGLE_ANALYTICS_SELECTORS, GOOGLE_CALENDAR_DATE_FORMAT, GOOGLE_LOGIN_SELECTORS, GOOGLE_LOGIN_TEXTS, GOOGLE_SHEETS_SELECTORS, GooglePage, HELP_CENTER_ROUTES, HELP_CENTER_SELECTORS, HelpAndProfilePage, INTEGRATIONS_TEXTS, INTEGRATION_SELECTORS, IPRestrictionsPage, IP_RESTRICTIONS_SELECTORS, IS_DEV_ENV, IS_STAGING_ENV, ImageUploader, IntegrationBase, IpRestrictionsApi, KEYBOARD_SHORTCUTS_SELECTORS, KEYBOARD_SHORTCUT_TEST_CASES, LIST_MODIFIER_SELECTORS, LIST_MODIFIER_TAGS, LOGIN_SELECTORS, MEMBER_FORM_SELECTORS, MEMBER_SELECTORS, MEMBER_TEXTS, MERGE_TAGS_SELECTORS, MICROSOFT_LOGIN_SELECTORS, MICROSOFT_LOGIN_TEXTS, MailerUtils, Member, MemberApis, MicrosoftPage, NEETO_AUTH_BASE_URL, NEETO_EDITOR_SELECTORS, NEETO_FILTERS_SELECTORS, NEETO_IMAGE_UPLOADER_SELECTORS, NEETO_ROUTES, NEETO_SEO_SELECTORS, NEETO_TEXT_MODIFIER_SELECTORS, NeetoAuthServer, NeetoTowerApi, ONBOARDING_SELECTORS, ORGANIZATION_TEXTS, OTP_EMAIL_PATTERN, OrganizationPage, PAST_TIME_RANGES, PHONE_NUMBER_FORMATS, PLURAL, PROFILE_LINKS, PROFILE_SECTION_SELECTORS, PROJECT_NAMES, PROJECT_TRANSLATIONS_PATH, ROLES_SELECTORS, ROUTES, RailsEmailApiClient, RailsEmailUtils, RoleApis, RolesPage, SIGNUP_SELECTORS, SINGULAR, SLACK_DATA_QA_SELECTORS, SLACK_DEFAULT_CHANNEL, SLACK_SELECTORS, SLACK_WEB_TEXTS, STATUS_TEXTS, STORAGE_STATE, SecurityApi, SidebarSection, SlackApi, SlackPage, TABLE_SELECTORS, TAB_SELECTORS, TAGS_SELECTORS, TEAM_MEMBER_TEXTS, TEXT_MODIFIER_ROLES, TEXT_MODIFIER_SELECTORS, TEXT_MODIFIER_TAGS, THANK_YOU_SELECTORS, THEMES_SELECTORS, THEMES_TEXTS, THIRD_PARTY_ROUTES, TIME_RANGES, TOASTR_MESSAGES, TWILIO_SELECTORS, TagsApi, TagsPage, TeamMembers, ThankYouApi, ThankYouPage, TwilioApi, USER_AGENTS, WEBHOOK_SELECTORS, WebhookSiteApi, WebhooksPage, ZAPIER_LIMIT_EXHAUSTED_MESSAGE, ZAPIER_SELECTORS, ZAPIER_TEST_EMAIL, ZAPIER_WEB_TEXTS, ZapierPage, baseURLGenerator, basicHTMLContent, clearCredentials, commands, cpuThrottlingUsingCDP, createOrganizationViaRake, currencyUtils, dataQa, decodeQRCodeFromFile, definePlaywrightConfig, executeWithThrottledResources, extractSubdomainFromError, fillCredentialsAndSubmit, filterUtils, generatePhoneNumber, generatePhoneNumberDetails, generateRandomBypassEmail, generateRandomFile, generateStagingData, getByDataQA, getClipboardContent, getFormattedPhoneNumber, getFullUrl, getGlobalUserProps, getGlobalUserState, getImagePathAndName, getIsoCodeFromPhoneCode, getListCount, globalShortcuts, grantClipboardPermissions, hexToRGB, hexToRGBA, i18nFixture, imageRegex, initializeCredentials, initializeTestData, initializeTotp, isGithubIssueOpen, joinHyphenCase, joinString, login, loginWithoutSSO, networkConditions, networkThrottlingUsingCDP, readFileSyncIfExists, removeCredentialFile, serializeFileForBrowser, shouldSkipCustomDomainSetup, shouldSkipSetupAndTeardown, simulateClickWithDelay, simulateTypingWithDelay, skipTest, squish, _default as stealthTest, tableUtils, toCamelCase, updateCredentials, warmup, writeDataToFile };
|
|
8951
8964
|
export type { BaseThemeStyle, BaseThemeStyleType, ColumnMenuAction, CountryProps, CustomFixture, IntroPageThemeStyle, IntroPageThemeStyleType, ProjectName, ThemeCategory, ValueOf };
|
package/index.js
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { spawn, execSync } from 'child_process';
|
|
2
1
|
import { keysToSnakeCase, hyphenate, isNotPresent, humanize, isPresent, dynamicArray, findBy, truncate, isNotEmpty, isNotEqualDeep, randomPick } from '@bigbinary/neeto-cist';
|
|
3
2
|
import { faker } from '@faker-js/faker';
|
|
4
3
|
import * as fs$4 from 'fs';
|
|
@@ -10,6 +9,7 @@ import test, { expect, test as test$1, chromium as chromium$1, defineConfig, dev
|
|
|
10
9
|
import { getI18nInstance, initI18n } from 'playwright-i18next-fixture';
|
|
11
10
|
import require$$0$3 from 'util';
|
|
12
11
|
import { curry, isNotNil, not, isEmpty, pluck, mergeAll, isNil, mergeDeepLeft } from 'ramda';
|
|
12
|
+
import { execSync, spawn } from 'child_process';
|
|
13
13
|
import dayjs from 'dayjs';
|
|
14
14
|
import require$$0$7 from 'stream';
|
|
15
15
|
import require$$0$6 from 'node:buffer';
|
|
@@ -226,86 +226,63 @@ class MemberApis {
|
|
|
226
226
|
});
|
|
227
227
|
}
|
|
228
228
|
|
|
229
|
-
class
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
}
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
229
|
+
class RailsEmailApiClient {
|
|
230
|
+
port = process.env.RAILS_SERVER_PORT;
|
|
231
|
+
subdomain = process.env.SUBDOMAIN ?? "spinkart";
|
|
232
|
+
baseUrl = `http://${this.subdomain}.lvh.me:${this.port}`;
|
|
233
|
+
emailsEndpoint = `${this.baseUrl}/api/v1/testing/emails`;
|
|
234
|
+
constructor() { }
|
|
235
|
+
convertRawEmail = (raw) => ({
|
|
236
|
+
from: raw.from,
|
|
237
|
+
to: raw.to,
|
|
238
|
+
cc: raw.cc,
|
|
239
|
+
bcc: raw.bcc,
|
|
240
|
+
replyTo: raw.reply_to,
|
|
241
|
+
subject: raw.subject,
|
|
242
|
+
htmlBody: raw.html_body,
|
|
243
|
+
textBody: raw.text_body,
|
|
244
|
+
receivedAt: raw.received_at,
|
|
245
|
+
attachments: raw.attachments?.map(({ filename, mime_type, data }) => ({
|
|
246
|
+
name: filename,
|
|
247
|
+
type: mime_type,
|
|
248
|
+
content: data,
|
|
248
249
|
})),
|
|
249
250
|
});
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
stdout += data.toString();
|
|
259
|
-
});
|
|
260
|
-
childProcess.stderr?.on("data", data => {
|
|
261
|
-
stderr += data.toString();
|
|
262
|
-
});
|
|
263
|
-
const exitCode = await new Promise((resolve, reject) => {
|
|
264
|
-
childProcess.on("error", reject);
|
|
265
|
-
childProcess.on("close", resolve);
|
|
266
|
-
});
|
|
267
|
-
if (exitCode !== 0) {
|
|
268
|
-
throw new Error(`Rake task ${taskName} failed: ${stderr || stdout || `Exit code ${exitCode}`}`);
|
|
269
|
-
}
|
|
270
|
-
return this.extractJsonFromOutput(stdout);
|
|
271
|
-
};
|
|
272
|
-
extractJsonFromOutput = (output) => {
|
|
273
|
-
const delimiterMatch = output.match(/<-- Captured Emails Start-->([\s\S]*?)<-- Captured Emails End-->/);
|
|
274
|
-
return delimiterMatch ? delimiterMatch[1].trim() : output.trim();
|
|
251
|
+
buildQueryString = (params) => {
|
|
252
|
+
if (!params)
|
|
253
|
+
return "";
|
|
254
|
+
const filtered = Object.fromEntries(Object.entries(keysToSnakeCase(params))
|
|
255
|
+
.filter(([, v]) => v != null && v !== "")
|
|
256
|
+
.map(([k, v]) => [k, String(v)]));
|
|
257
|
+
const query = new URLSearchParams(filtered).toString();
|
|
258
|
+
return query ? `?${query}` : "";
|
|
275
259
|
};
|
|
276
|
-
|
|
260
|
+
fetchJson = async (url, options) => {
|
|
277
261
|
try {
|
|
278
|
-
const
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
const rawEmails = JSON.parse(output);
|
|
283
|
-
return rawEmails.map(this.convertRawEmail);
|
|
262
|
+
const res = await fetch(url, options);
|
|
263
|
+
if (!res.ok)
|
|
264
|
+
return null;
|
|
265
|
+
return (await res.json());
|
|
284
266
|
}
|
|
285
|
-
catch (
|
|
286
|
-
console.error("
|
|
287
|
-
return
|
|
267
|
+
catch (err) {
|
|
268
|
+
console.error("API error:", err);
|
|
269
|
+
return null;
|
|
288
270
|
}
|
|
289
271
|
};
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
272
|
+
listEmails = async (searchParams) => {
|
|
273
|
+
const query = this.buildQueryString(searchParams);
|
|
274
|
+
const data = await this.fetchJson(`${this.emailsEndpoint}${query}`);
|
|
275
|
+
return data?.map(this.convertRawEmail) ?? [];
|
|
276
|
+
};
|
|
293
277
|
getLatestEmail = async (searchParams) => {
|
|
294
278
|
const emails = await this.listEmails(searchParams);
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
? current
|
|
299
|
-
: latest);
|
|
300
|
-
};
|
|
301
|
-
clearEmails = async () => {
|
|
302
|
-
try {
|
|
303
|
-
await this.executeRakeTask("playwright:clear_captured_emails");
|
|
304
|
-
}
|
|
305
|
-
catch (error) {
|
|
306
|
-
console.error("Failed to clear emails:", error);
|
|
307
|
-
}
|
|
279
|
+
return emails.reduce((latest, curr) => !latest || new Date(curr.receivedAt) > new Date(latest.receivedAt)
|
|
280
|
+
? curr
|
|
281
|
+
: latest, null);
|
|
308
282
|
};
|
|
283
|
+
clearEmails = () => this.fetchJson(this.emailsEndpoint, {
|
|
284
|
+
method: "DELETE",
|
|
285
|
+
});
|
|
309
286
|
}
|
|
310
287
|
|
|
311
288
|
class RoleApis {
|
|
@@ -5435,6 +5412,7 @@ const LOGIN_SELECTORS = {
|
|
|
5435
5412
|
twitterAuthenticationButton: "twitter-authentication-button",
|
|
5436
5413
|
authenticatorAppOtpInput: "authenticator-app-otp-login-code-input",
|
|
5437
5414
|
enterOtpInputError: "enter-otp-input-error",
|
|
5415
|
+
authenticatorAppLaterButton: "authenticator-app-promo-later-button",
|
|
5438
5416
|
};
|
|
5439
5417
|
|
|
5440
5418
|
const MEMBER_SELECTORS = {
|
|
@@ -8563,6 +8541,10 @@ class OrganizationPage {
|
|
|
8563
8541
|
await submitButton.click();
|
|
8564
8542
|
await expect(submitButton).toBeHidden({ timeout: 35_000 });
|
|
8565
8543
|
};
|
|
8544
|
+
dismissAuthenticatorSetupPromptIfPresent = async () => {
|
|
8545
|
+
const maybeLaterButton = this.page.getByTestId(LOGIN_SELECTORS.authenticatorAppLaterButton);
|
|
8546
|
+
(await maybeLaterButton.isVisible()) && (await maybeLaterButton.click());
|
|
8547
|
+
};
|
|
8566
8548
|
createOrganization = async ({ email, businessName, subdomainName, firstName, lastName, appName, }) => {
|
|
8567
8549
|
if (shouldSkipSetupAndTeardown())
|
|
8568
8550
|
return;
|
|
@@ -8706,11 +8688,13 @@ class OrganizationPage {
|
|
|
8706
8688
|
}
|
|
8707
8689
|
await this.fillEmailAndSubmit(email, loginTimeout);
|
|
8708
8690
|
await this.fillOTP();
|
|
8691
|
+
await this.dismissAuthenticatorSetupPromptIfPresent();
|
|
8709
8692
|
};
|
|
8710
8693
|
loginWithFastmailEmail = async ({ email, loginTimeout = 2 * 60 * 1000, fetchOtpFromEmail, }) => {
|
|
8711
8694
|
await this.fillEmailAndSubmit(email, loginTimeout);
|
|
8712
8695
|
const otp = await fetchOtpFromEmail({ email, timeout: 4 * 60 * 1000 });
|
|
8713
8696
|
await this.fillOTP(otp);
|
|
8697
|
+
await this.dismissAuthenticatorSetupPromptIfPresent();
|
|
8714
8698
|
};
|
|
8715
8699
|
setupProfile = async ({ firstName = faker.person.firstName(), lastName = faker.person.lastName(), country, } = {}) => {
|
|
8716
8700
|
if (IS_DEV_ENV)
|
|
@@ -60288,10 +60272,10 @@ const hexToRGB = (hex) => {
|
|
|
60288
60272
|
|
|
60289
60273
|
class RailsEmailUtils {
|
|
60290
60274
|
neetoPlaywrightUtilities;
|
|
60291
|
-
|
|
60275
|
+
railsEmailClient;
|
|
60292
60276
|
constructor(neetoPlaywrightUtilities) {
|
|
60293
60277
|
this.neetoPlaywrightUtilities = neetoPlaywrightUtilities;
|
|
60294
|
-
this.
|
|
60278
|
+
this.railsEmailClient = new RailsEmailApiClient();
|
|
60295
60279
|
}
|
|
60296
60280
|
convertRailsEmailToFormattedList = (railsEmail) => {
|
|
60297
60281
|
if (!railsEmail)
|
|
@@ -60342,11 +60326,11 @@ class RailsEmailUtils {
|
|
|
60342
60326
|
blobId: "",
|
|
60343
60327
|
};
|
|
60344
60328
|
};
|
|
60345
|
-
clearEmails = () => this.
|
|
60346
|
-
getLatestEmail = (searchParams) => this.
|
|
60347
|
-
listEmails = (searchParams) => this.
|
|
60329
|
+
clearEmails = () => this.railsEmailClient.clearEmails();
|
|
60330
|
+
getLatestEmail = (searchParams) => this.railsEmailClient.getLatestEmail(searchParams);
|
|
60331
|
+
listEmails = (searchParams) => this.railsEmailClient.listEmails(searchParams);
|
|
60348
60332
|
listMessages = async (messageSearchCriteria = {}, { receivedAfter = new Date(new Date().valueOf() - 60 * 60 * 1000), } = {}) => {
|
|
60349
|
-
const emails = await this.
|
|
60333
|
+
const emails = await this.railsEmailClient.listEmails({
|
|
60350
60334
|
...messageSearchCriteria,
|
|
60351
60335
|
receivedAfter: receivedAfter.toISOString(),
|
|
60352
60336
|
});
|
|
@@ -60357,7 +60341,7 @@ class RailsEmailUtils {
|
|
|
60357
60341
|
findMessage = async (messageSearchCriteria = {}, { timeout = 10_000, receivedAfter = new Date(new Date().valueOf() - 60 * 60 * 1000), expectedEmailCount = 1, } = {}, shouldThrowErrorOnTimeout = true) => {
|
|
60358
60342
|
const email = (await this.neetoPlaywrightUtilities.executeRecursively({
|
|
60359
60343
|
callback: async () => {
|
|
60360
|
-
const railsEmail = await this.
|
|
60344
|
+
const railsEmail = await this.railsEmailClient.getLatestEmail({
|
|
60361
60345
|
...messageSearchCriteria,
|
|
60362
60346
|
receivedAfter: receivedAfter.toISOString(),
|
|
60363
60347
|
});
|
|
@@ -60366,7 +60350,7 @@ class RailsEmailUtils {
|
|
|
60366
60350
|
return this.convertRailsEmailToFormattedList(railsEmail);
|
|
60367
60351
|
},
|
|
60368
60352
|
condition: async () => {
|
|
60369
|
-
const emails = await this.
|
|
60353
|
+
const emails = await this.railsEmailClient.listEmails({
|
|
60370
60354
|
...messageSearchCriteria,
|
|
60371
60355
|
receivedAfter: receivedAfter.toISOString(),
|
|
60372
60356
|
});
|
|
@@ -60385,7 +60369,7 @@ class RailsEmailUtils {
|
|
|
60385
60369
|
findOtpFromEmail = async ({ email, subjectSubstring = OTP_EMAIL_PATTERN, timeout = 10_000, receivedAfter = new Date(), expectedEmailCount = 1, }) => {
|
|
60386
60370
|
const otp = await this.neetoPlaywrightUtilities.executeRecursively({
|
|
60387
60371
|
callback: async () => {
|
|
60388
|
-
const railsEmail = await this.
|
|
60372
|
+
const railsEmail = await this.railsEmailClient.getLatestEmail({
|
|
60389
60373
|
to: email,
|
|
60390
60374
|
subject: subjectSubstring,
|
|
60391
60375
|
receivedAfter: receivedAfter.toISOString(),
|
|
@@ -60398,7 +60382,7 @@ class RailsEmailUtils {
|
|
|
60398
60382
|
return formattedEmail.html.codes?.[0] || formattedEmail.text.codes?.[0];
|
|
60399
60383
|
},
|
|
60400
60384
|
condition: async () => {
|
|
60401
|
-
const emails = await this.
|
|
60385
|
+
const emails = await this.railsEmailClient.listEmails({
|
|
60402
60386
|
to: email,
|
|
60403
60387
|
subject: subjectSubstring,
|
|
60404
60388
|
receivedAfter: receivedAfter.toISOString(),
|
|
@@ -60412,7 +60396,7 @@ class RailsEmailUtils {
|
|
|
60412
60396
|
getEmailAttachment = async (attachmentName, messageSearchCriteria = {}, { receivedAfter = new Date(new Date().valueOf() - 60 * 60 * 1000), expectedEmailCount = 1, timeout = 10_000, } = {}, shouldThrowErrorOnTimeout = true) => {
|
|
60413
60397
|
const attachmentDetails = (await this.neetoPlaywrightUtilities.executeRecursively({
|
|
60414
60398
|
callback: async () => {
|
|
60415
|
-
const railsEmail = await this.
|
|
60399
|
+
const railsEmail = await this.railsEmailClient.getLatestEmail({
|
|
60416
60400
|
...messageSearchCriteria,
|
|
60417
60401
|
receivedAfter: receivedAfter.toISOString(),
|
|
60418
60402
|
});
|
|
@@ -60429,7 +60413,7 @@ class RailsEmailUtils {
|
|
|
60429
60413
|
};
|
|
60430
60414
|
},
|
|
60431
60415
|
condition: async () => {
|
|
60432
|
-
const emails = await this.
|
|
60416
|
+
const emails = await this.railsEmailClient.listEmails({
|
|
60433
60417
|
...messageSearchCriteria,
|
|
60434
60418
|
receivedAfter: receivedAfter.toISOString(),
|
|
60435
60419
|
});
|
|
@@ -107231,7 +107215,35 @@ class ColorPickerUtils {
|
|
|
107231
107215
|
};
|
|
107232
107216
|
}
|
|
107233
107217
|
|
|
107218
|
+
const STATIC_ASSET_PATTERN = /\.(js|css|woff2?|ttf|eot|png|svg|ico|gif|webp)(\?.*)?$/;
|
|
107219
|
+
const assetCache = new Map();
|
|
107234
107220
|
const commands = {
|
|
107221
|
+
context: async ({ context }, use) => {
|
|
107222
|
+
if (IS_DEV_ENV) {
|
|
107223
|
+
await context.route(STATIC_ASSET_PATTERN, async (route) => {
|
|
107224
|
+
const url = route.request().url();
|
|
107225
|
+
const hit = assetCache.get(url);
|
|
107226
|
+
if (hit)
|
|
107227
|
+
return route.fulfill(hit);
|
|
107228
|
+
try {
|
|
107229
|
+
const response = await route.fetch();
|
|
107230
|
+
const body = await response.body();
|
|
107231
|
+
const entry = {
|
|
107232
|
+
body,
|
|
107233
|
+
status: response.status(),
|
|
107234
|
+
headers: response.headers(),
|
|
107235
|
+
};
|
|
107236
|
+
if (response.ok())
|
|
107237
|
+
assetCache.set(url, entry);
|
|
107238
|
+
return route.fulfill(entry);
|
|
107239
|
+
}
|
|
107240
|
+
catch {
|
|
107241
|
+
return route.continue();
|
|
107242
|
+
}
|
|
107243
|
+
});
|
|
107244
|
+
}
|
|
107245
|
+
await use(context);
|
|
107246
|
+
},
|
|
107235
107247
|
neetoPlaywrightUtilities: async ({ page, request, baseURL }, use) => {
|
|
107236
107248
|
const commands = new CustomCommands(page, request, baseURL);
|
|
107237
107249
|
await use(commands);
|
|
@@ -124949,6 +124961,31 @@ const generatePhoneNumberDetails = () => {
|
|
|
124949
124961
|
return { flag: country.flag, name: country.name, code: country.code, number };
|
|
124950
124962
|
};
|
|
124951
124963
|
|
|
124964
|
+
const DEFAULT_WARMUP_URLS = ["/login"];
|
|
124965
|
+
async function warmup({ urls = DEFAULT_WARMUP_URLS, timeout = 60_000, } = {}) {
|
|
124966
|
+
if (!IS_DEV_ENV)
|
|
124967
|
+
return;
|
|
124968
|
+
const { RAILS_SERVER_PORT, SUBDOMAIN = "spinkart" } = process.env;
|
|
124969
|
+
if (!RAILS_SERVER_PORT) {
|
|
124970
|
+
throw new Error("RAILS_SERVER_PORT is not defined in environment variables.");
|
|
124971
|
+
}
|
|
124972
|
+
const baseURL = `http://${SUBDOMAIN}.lvh.me:${RAILS_SERVER_PORT}`;
|
|
124973
|
+
const browser = await chromium$1.launch();
|
|
124974
|
+
const page = await browser.newPage();
|
|
124975
|
+
try {
|
|
124976
|
+
for (const url of urls) {
|
|
124977
|
+
const fullUrl = url.startsWith("http") ? url : `${baseURL}${url}`;
|
|
124978
|
+
await page.goto(fullUrl, {
|
|
124979
|
+
waitUntil: "networkidle", // eslint-disable-line playwright/no-networkidle
|
|
124980
|
+
timeout,
|
|
124981
|
+
});
|
|
124982
|
+
}
|
|
124983
|
+
}
|
|
124984
|
+
finally {
|
|
124985
|
+
await browser.close();
|
|
124986
|
+
}
|
|
124987
|
+
}
|
|
124988
|
+
|
|
124952
124989
|
const CONFIG = {
|
|
124953
124990
|
DIR: "/tmp/neeto-auth-web",
|
|
124954
124991
|
LOG: "/tmp/neeto-auth-server.log",
|
|
@@ -125864,5 +125901,5 @@ const definePlaywrightConfig = (overrides) => {
|
|
|
125864
125901
|
});
|
|
125865
125902
|
};
|
|
125866
125903
|
|
|
125867
|
-
export { ACTIONS, ADMIN_PANEL_SELECTORS, API_KEYS_SELECTORS, API_ROUTES, AUDIT_LOGS_SELECTORS, ApiKeysApi, ApiKeysPage, AuditLogsPage, BASE_URL, CALENDAR_LABELS, CERTIFICATE_LIMIT_EXCEEDED_MESSAGE, CERTIFICATE_LIMIT_EXCEEDED_REGEXP, CHANGELOG_WIDGET_SELECTORS, CHAT_WIDGET_SELECTORS, CHAT_WIDGET_TEXTS, COLOR, COMMON_SELECTORS, COMMON_TEXTS, COMMUNITY_TEXTS, CREDENTIALS, CURRENT_TIME_RANGES, CUSTOM_DOMAIN_SELECTORS, CUSTOM_DOMAIN_SUFFIX, CustomCommands, CustomDomainApi, CustomDomainPage, DATE_FORMATS, DATE_PICKER_SELECTORS, DATE_RANGES, DATE_TEXTS, DEFAULT_WEBHOOKS_RESPONSE_TEXT, DESCRIPTION_EDITOR_TEXTS, EMBED_SELECTORS, EMOJI_LABEL, EMPTY_STORAGE_STATE, ENGAGE_TEXTS, ENVIRONMENT, EXAMPLE_URL, EXPANDED_FONT_SIZE, EXPORT_FILE_TYPES, EditorPage, EmbedBase, FILE_FORMATS, FONT_SIZE_SELECTORS, GLOBAL_TRANSLATIONS_PATTERN, GOOGLE_ANALYTICS_SELECTORS, GOOGLE_CALENDAR_DATE_FORMAT, GOOGLE_LOGIN_SELECTORS, GOOGLE_LOGIN_TEXTS, GOOGLE_SHEETS_SELECTORS, GooglePage, HELP_CENTER_ROUTES, HELP_CENTER_SELECTORS, HelpAndProfilePage, INTEGRATIONS_TEXTS, INTEGRATION_SELECTORS, IPRestrictionsPage, IP_RESTRICTIONS_SELECTORS, IS_DEV_ENV, IS_STAGING_ENV, ImageUploader, IntegrationBase, IpRestrictionsApi, KEYBOARD_SHORTCUTS_SELECTORS, KEYBOARD_SHORTCUT_TEST_CASES, LIST_MODIFIER_SELECTORS, LIST_MODIFIER_TAGS, LOGIN_SELECTORS, MEMBER_FORM_SELECTORS, MEMBER_SELECTORS, MEMBER_TEXTS, MERGE_TAGS_SELECTORS, MICROSOFT_LOGIN_SELECTORS, MICROSOFT_LOGIN_TEXTS, MailerUtils, Member, MemberApis, MicrosoftPage, NEETO_AUTH_BASE_URL, NEETO_EDITOR_SELECTORS, NEETO_FILTERS_SELECTORS, NEETO_IMAGE_UPLOADER_SELECTORS, NEETO_ROUTES, NEETO_SEO_SELECTORS, NEETO_TEXT_MODIFIER_SELECTORS, NeetoAuthServer, NeetoTowerApi, ONBOARDING_SELECTORS, ORGANIZATION_TEXTS, OTP_EMAIL_PATTERN, OrganizationPage, PAST_TIME_RANGES, PHONE_NUMBER_FORMATS, PLURAL, PROFILE_LINKS, PROFILE_SECTION_SELECTORS, PROJECT_NAMES, PROJECT_TRANSLATIONS_PATH, ROLES_SELECTORS, ROUTES,
|
|
125904
|
+
export { ACTIONS, ADMIN_PANEL_SELECTORS, API_KEYS_SELECTORS, API_ROUTES, AUDIT_LOGS_SELECTORS, ApiKeysApi, ApiKeysPage, AuditLogsPage, BASE_URL, CALENDAR_LABELS, CERTIFICATE_LIMIT_EXCEEDED_MESSAGE, CERTIFICATE_LIMIT_EXCEEDED_REGEXP, CHANGELOG_WIDGET_SELECTORS, CHAT_WIDGET_SELECTORS, CHAT_WIDGET_TEXTS, COLOR, COMMON_SELECTORS, COMMON_TEXTS, COMMUNITY_TEXTS, CREDENTIALS, CURRENT_TIME_RANGES, CUSTOM_DOMAIN_SELECTORS, CUSTOM_DOMAIN_SUFFIX, CustomCommands, CustomDomainApi, CustomDomainPage, DATE_FORMATS, DATE_PICKER_SELECTORS, DATE_RANGES, DATE_TEXTS, DEFAULT_WEBHOOKS_RESPONSE_TEXT, DESCRIPTION_EDITOR_TEXTS, EMBED_SELECTORS, EMOJI_LABEL, EMPTY_STORAGE_STATE, ENGAGE_TEXTS, ENVIRONMENT, EXAMPLE_URL, EXPANDED_FONT_SIZE, EXPORT_FILE_TYPES, EditorPage, EmbedBase, FILE_FORMATS, FONT_SIZE_SELECTORS, GLOBAL_TRANSLATIONS_PATTERN, GOOGLE_ANALYTICS_SELECTORS, GOOGLE_CALENDAR_DATE_FORMAT, GOOGLE_LOGIN_SELECTORS, GOOGLE_LOGIN_TEXTS, GOOGLE_SHEETS_SELECTORS, GooglePage, HELP_CENTER_ROUTES, HELP_CENTER_SELECTORS, HelpAndProfilePage, INTEGRATIONS_TEXTS, INTEGRATION_SELECTORS, IPRestrictionsPage, IP_RESTRICTIONS_SELECTORS, IS_DEV_ENV, IS_STAGING_ENV, ImageUploader, IntegrationBase, IpRestrictionsApi, KEYBOARD_SHORTCUTS_SELECTORS, KEYBOARD_SHORTCUT_TEST_CASES, LIST_MODIFIER_SELECTORS, LIST_MODIFIER_TAGS, LOGIN_SELECTORS, MEMBER_FORM_SELECTORS, MEMBER_SELECTORS, MEMBER_TEXTS, MERGE_TAGS_SELECTORS, MICROSOFT_LOGIN_SELECTORS, MICROSOFT_LOGIN_TEXTS, MailerUtils, Member, MemberApis, MicrosoftPage, NEETO_AUTH_BASE_URL, NEETO_EDITOR_SELECTORS, NEETO_FILTERS_SELECTORS, NEETO_IMAGE_UPLOADER_SELECTORS, NEETO_ROUTES, NEETO_SEO_SELECTORS, NEETO_TEXT_MODIFIER_SELECTORS, NeetoAuthServer, NeetoTowerApi, ONBOARDING_SELECTORS, ORGANIZATION_TEXTS, OTP_EMAIL_PATTERN, OrganizationPage, PAST_TIME_RANGES, PHONE_NUMBER_FORMATS, PLURAL, PROFILE_LINKS, PROFILE_SECTION_SELECTORS, PROJECT_NAMES, PROJECT_TRANSLATIONS_PATH, ROLES_SELECTORS, ROUTES, RailsEmailApiClient, RailsEmailUtils, RoleApis, RolesPage, SIGNUP_SELECTORS, SINGULAR, SLACK_DATA_QA_SELECTORS, SLACK_DEFAULT_CHANNEL, SLACK_SELECTORS, SLACK_WEB_TEXTS, STATUS_TEXTS, STORAGE_STATE, SecurityApi, SidebarSection, SlackApi, SlackPage, TABLE_SELECTORS, TAB_SELECTORS, TAGS_SELECTORS, TEAM_MEMBER_TEXTS, TEXT_MODIFIER_ROLES, TEXT_MODIFIER_SELECTORS, TEXT_MODIFIER_TAGS, THANK_YOU_SELECTORS, THEMES_SELECTORS, THEMES_TEXTS, THIRD_PARTY_ROUTES, TIME_RANGES, TOASTR_MESSAGES, TWILIO_SELECTORS, TagsApi, TagsPage, TeamMembers, ThankYouApi, ThankYouPage, TwilioApi, USER_AGENTS, WEBHOOK_SELECTORS, WebhookSiteApi, WebhooksPage, ZAPIER_LIMIT_EXHAUSTED_MESSAGE, ZAPIER_SELECTORS, ZAPIER_TEST_EMAIL, ZAPIER_WEB_TEXTS, ZapierPage, baseURLGenerator, basicHTMLContent, clearCredentials, commands, cpuThrottlingUsingCDP, createOrganizationViaRake, currencyUtils, dataQa, decodeQRCodeFromFile, definePlaywrightConfig, executeWithThrottledResources, extractSubdomainFromError, fillCredentialsAndSubmit, filterUtils, generatePhoneNumber, generatePhoneNumberDetails, generateRandomBypassEmail, generateRandomFile, generateStagingData, getByDataQA, getClipboardContent, getFormattedPhoneNumber, getFullUrl, getGlobalUserProps, getGlobalUserState, getImagePathAndName, getIsoCodeFromPhoneCode, getListCount, globalShortcuts, grantClipboardPermissions, hexToRGB, hexToRGBA, i18nFixture, imageRegex, initializeCredentials, initializeTestData, initializeTotp, isGithubIssueOpen, joinHyphenCase, joinString, login, loginWithoutSSO, networkConditions, networkThrottlingUsingCDP, readFileSyncIfExists, removeCredentialFile, serializeFileForBrowser, shouldSkipCustomDomainSetup, shouldSkipSetupAndTeardown, simulateClickWithDelay, simulateTypingWithDelay, skipTest, squish, stealth as stealthTest, tableUtils, toCamelCase, updateCredentials, warmup, writeDataToFile };
|
|
125868
125905
|
//# sourceMappingURL=index.js.map
|