@bigbinary/neeto-playwright-commons 1.26.13 → 1.26.14

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.d.ts CHANGED
@@ -3315,6 +3315,18 @@ declare const EXAMPLE_URL = "https://example.com";
3315
3315
  * @endexample
3316
3316
  */
3317
3317
  declare const IS_STAGING_ENV: boolean;
3318
+ /**
3319
+ *
3320
+ * Boolean value indicating whether the current environment is development.
3321
+ *
3322
+ * @example
3323
+ *
3324
+ * if(IS_DEV_ENV){
3325
+ * // Perform actions specific to the development environment
3326
+ * }
3327
+ * @endexample
3328
+ */
3329
+ declare const IS_DEV_ENV: boolean;
3318
3330
  /**
3319
3331
  *
3320
3332
  * Path to the JSON file for storing authentication data.
@@ -3335,13 +3347,16 @@ declare const GLOBAL_TRANSLATIONS_PATTERN = "../node_modules/@bigbinary/**/trans
3335
3347
  declare const PROJECT_TRANSLATIONS_PATH = "../app/javascript/src/translations/en.json";
3336
3348
  /**
3337
3349
  *
3338
- * Default credentials for testing purposes.
3350
+ * Default credentials for testing purposes for development env.
3339
3351
  *
3340
3352
  */
3341
3353
  declare const CREDENTIALS: {
3354
+ firstName: string;
3355
+ lastName: string;
3342
3356
  name: string;
3343
3357
  email: string;
3344
3358
  password: string;
3359
+ subdomainName: string;
3345
3360
  };
3346
3361
  /**
3347
3362
  *
@@ -3893,7 +3908,7 @@ interface BasicUserInfo {
3893
3908
  email: string;
3894
3909
  country?: string;
3895
3910
  }
3896
- interface CreateOrganizationProps extends BasicUserInfo {
3911
+ interface CreateOrganizationProps$1 extends BasicUserInfo {
3897
3912
  businessName: string;
3898
3913
  subdomainName: string;
3899
3914
  appName: string;
@@ -3923,20 +3938,6 @@ declare class OrganizationPage {
3923
3938
  page: Page;
3924
3939
  neetoPlaywrightUtilities: CustomCommands;
3925
3940
  constructor(page: Page, neetoPlaywrightUtilities: CustomCommands);
3926
- /**
3927
- *
3928
- * Used to generate the subdomain URL. It takes the following parameters:
3929
- *
3930
- * appName(required): Name of the app.
3931
- *
3932
- * @example
3933
- *
3934
- * const domain = organizationPage.baseUrlGenerator(appName)
3935
- * console.log(domain) // https://${subdomainName}.${appName}.net
3936
- * // "subdomainName" is the loggedIn user name
3937
- * @endexample
3938
- */
3939
- baseUrlGenerator: (appName: string) => string;
3940
3941
  private fillOTP;
3941
3942
  private submitEmail;
3942
3943
  /**
@@ -3974,7 +3975,7 @@ declare class OrganizationPage {
3974
3975
  firstName,
3975
3976
  lastName,
3976
3977
  appName
3977
- }: CreateOrganizationProps) => Promise<void>;
3978
+ }: CreateOrganizationProps$1) => Promise<void>;
3978
3979
  /**
3979
3980
  *
3980
3981
  * Used to set up an Organization. Works only with staging env. It takes the following parameters:
@@ -7750,7 +7751,13 @@ interface LoginProps {
7750
7751
  */
7751
7752
  neetoPlaywrightUtilities?: CustomCommands;
7752
7753
  loginPath?: string;
7754
+ email?: string;
7753
7755
  }
7756
+ declare const fillCredentialsAndSubmit: ({
7757
+ page,
7758
+ loginPath,
7759
+ email
7760
+ }: LoginProps) => Promise<void>;
7754
7761
  /**
7755
7762
  *
7756
7763
  * Used to login by using email and password. It takes the following parameters:
@@ -7768,8 +7775,8 @@ interface LoginProps {
7768
7775
  */
7769
7776
  declare const loginWithoutSSO: ({
7770
7777
  page,
7771
- neetoPlaywrightUtilities,
7772
- loginPath
7778
+ loginPath,
7779
+ email
7773
7780
  }: LoginProps) => Promise<void>;
7774
7781
  /**
7775
7782
  *
@@ -7789,7 +7796,8 @@ declare const loginWithoutSSO: ({
7789
7796
  declare const login: ({
7790
7797
  page,
7791
7798
  neetoPlaywrightUtilities,
7792
- loginPath
7799
+ loginPath,
7800
+ email
7793
7801
  }: LoginProps) => Promise<false | void>;
7794
7802
  /**
7795
7803
  *
@@ -7811,10 +7819,56 @@ declare const generateRandomBypassEmail: () => string;
7811
7819
  *
7812
7820
  * @example
7813
7821
  *
7814
- * extractSubdomainFromError("https://wwww.bb.neetoChat.com") // bb
7822
+ * extractSubdomainFromError("https://wwww.bb.neetoChat.com"); // bb
7815
7823
  * @endexample
7816
7824
  */
7817
7825
  declare const extractSubdomainFromError: (errorString: string) => string;
7826
+ interface CreateOrganizationProps {
7827
+ email: string;
7828
+ firstName: string;
7829
+ lastName: string;
7830
+ subdomainName: string;
7831
+ }
7832
+ /**
7833
+ *
7834
+ * Creates an organization via a rake task. This method executes the
7835
+ *
7836
+ * playwright:create_organization rake task asynchronously and returns the
7837
+ *
7838
+ * output. It takes the following parameters:
7839
+ *
7840
+ * email: The email address for the organization owner.
7841
+ *
7842
+ * firstName: The first name of the organization owner.
7843
+ *
7844
+ * lastName: The last name of the organization owner.
7845
+ *
7846
+ * subdomainName: The subdomain name for the organization.
7847
+ *
7848
+ * A Promise that resolves to a string containing the rake task output.
7849
+ *
7850
+ * @example
7851
+ *
7852
+ * import { createOrganizationViaRake } from "@bigbinary/neeto-playwright-commons";
7853
+ *
7854
+ * await createOrganizationViaRake({
7855
+ * email: "user@example.com",
7856
+ * firstName: "John",
7857
+ * lastName: "Doe",
7858
+ * subdomainName: "myorganization",
7859
+ * });
7860
+ * @endexample
7861
+ * Note: The working directory defaults to process.env.RAILS_ROOT or ".." if not set. Make sure the Rails application is available at the specified
7862
+ *
7863
+ * working directory.
7864
+ *
7865
+ */
7866
+ declare const createOrganizationViaRake: ({
7867
+ email,
7868
+ firstName,
7869
+ lastName,
7870
+ subdomainName
7871
+ }: CreateOrganizationProps) => Promise<string>;
7818
7872
  interface AssertColumnHeaderVisibilityProps {
7819
7873
  page: Page;
7820
7874
  columnName: string;
@@ -8330,5 +8384,5 @@ interface Overrides {
8330
8384
  * @endexample
8331
8385
  */
8332
8386
  declare const definePlaywrightConfig: (overrides: Overrides) => PlaywrightTestConfig<{}, {}>;
8333
- export { ACTIONS, ADMIN_PANEL_SELECTORS, API_KEYS_SELECTORS, API_ROUTES, AUDIT_LOGS_SELECTORS, AdminPanelPage, ApiKeysApi, ApiKeysPage, AuditLogsPage, BASE_URL, 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_PICKER_SELECTORS, DATE_RANGES, DATE_TEXTS, 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_SELECTORS, HelpAndProfilePage, INTEGRATIONS_TEXTS, INTEGRATION_SELECTORS, IPRestrictionsPage, IP_RESTRICTIONS_SELECTORS, IS_STAGING_ENV, ImageUploader, IntegrationBase, IpRestrictionsApi, KEYBOARD_SHORTCUTS_SELECTORS, 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, ONBOARDING_SELECTORS, ORGANIZATION_TEXTS, OTP_EMAIL_PATTERN, OrganizationPage, PAST_TIME_RANGES, PHONE_NUMBER_FORMATS, PLURAL, PROFILE_LINKS, PROFILE_SECTION_SELECTORS, PROJECT_TRANSLATIONS_PATH, ROLES_SELECTORS, ROUTES, 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, currencyUtils, dataQa, decodeQRCodeFromFile, definePlaywrightConfig, executeWithThrottledResources, extractSubdomainFromError, filterUtils, generatePhoneNumber, generatePhoneNumberDetails, generateRandomBypassEmail, generateRandomFile, generateStagingData, getByDataQA, getClipboardContent, getFormattedPhoneNumber, getFullUrl, getGlobalUserProps, getGlobalUserState, getImagePathAndName, getIsoCodeFromPhoneCode, getListCount, globalShortcuts, grantClipboardPermissions, headerUtils, hexToRGB, hexToRGBA, hyphenize, i18nFixture, 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, writeDataToFile };
8387
+ export { ACTIONS, ADMIN_PANEL_SELECTORS, API_KEYS_SELECTORS, API_ROUTES, AUDIT_LOGS_SELECTORS, AdminPanelPage, ApiKeysApi, ApiKeysPage, AuditLogsPage, BASE_URL, 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_PICKER_SELECTORS, DATE_RANGES, DATE_TEXTS, 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_SELECTORS, HelpAndProfilePage, INTEGRATIONS_TEXTS, INTEGRATION_SELECTORS, IPRestrictionsPage, IP_RESTRICTIONS_SELECTORS, IS_DEV_ENV, IS_STAGING_ENV, ImageUploader, IntegrationBase, IpRestrictionsApi, KEYBOARD_SHORTCUTS_SELECTORS, 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, ONBOARDING_SELECTORS, ORGANIZATION_TEXTS, OTP_EMAIL_PATTERN, OrganizationPage, PAST_TIME_RANGES, PHONE_NUMBER_FORMATS, PLURAL, PROFILE_LINKS, PROFILE_SECTION_SELECTORS, PROJECT_TRANSLATIONS_PATH, ROLES_SELECTORS, ROUTES, 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, headerUtils, hexToRGB, hexToRGBA, hyphenize, i18nFixture, 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, writeDataToFile };
8334
8388
  export type { BaseThemeStyle, BaseThemeStyleType, CountryProps, CustomFixture, IntroPageThemeStyle, IntroPageThemeStyleType, ThemeCategory, ValueOf };
package/index.js CHANGED
@@ -9,7 +9,7 @@ import test, { expect, test as test$1, chromium as chromium$1, defineConfig, dev
9
9
  import { getI18nInstance, initI18n } from 'playwright-i18next-fixture';
10
10
  import require$$0$4 from 'util';
11
11
  import { curry, isNotNil, not, isEmpty, pluck, mergeDeepLeft, isNil, mergeAll } from 'ramda';
12
- import { execSync } from 'child_process';
12
+ import { execSync, spawn } from 'child_process';
13
13
  import dayjs from 'dayjs';
14
14
  import require$$0$7 from 'stream';
15
15
  import { createRequire } from 'node:module';
@@ -285,14 +285,18 @@ const ENVIRONMENT = {
285
285
  review: "review",
286
286
  };
287
287
  const EXAMPLE_URL = "https://example.com";
288
- const IS_STAGING_ENV = process.env.TEST_ENV === "staging";
288
+ const IS_STAGING_ENV = process.env.TEST_ENV === ENVIRONMENT.staging;
289
+ const IS_DEV_ENV = process.env.TEST_ENV === ENVIRONMENT.development;
289
290
  const STORAGE_STATE = "./e2e/auth/user.json";
290
291
  const GLOBAL_TRANSLATIONS_PATTERN = "../node_modules/@bigbinary/**/translations/en.json";
291
292
  const PROJECT_TRANSLATIONS_PATH = "../app/javascript/src/translations/en.json";
292
293
  const CREDENTIALS = {
294
+ firstName: "Oliver",
295
+ lastName: "Smith",
293
296
  name: "Oliver Smith",
294
297
  email: "oliver@example.com",
295
298
  password: "welcome",
299
+ subdomainName: "spinkart",
296
300
  };
297
301
  const OTP_EMAIL_PATTERN = "is your login code";
298
302
  const SLACK_DEFAULT_CHANNEL = "general";
@@ -4829,23 +4833,26 @@ const generateStagingData = (product = "invoice") => {
4829
4833
  const timestamp = jobCompletionIndex
4830
4834
  ? `${dateTimeString}-${jobCompletionIndex}`
4831
4835
  : dateTimeString;
4832
- const firstName = "André";
4833
- const lastName = "O'Reilly";
4836
+ const firstName = IS_STAGING_ENV ? "André" : CREDENTIALS.firstName;
4837
+ const lastName = IS_STAGING_ENV ? "O'Reilly" : CREDENTIALS.lastName;
4834
4838
  const otpBypassKey = process.env.OTP_BYPASS_KEY;
4835
- const stagingOrganization = `cpt-${product}-${timestamp}`;
4839
+ const isGlobalSetup = !getGlobalUserState(); // For dev global setup staging data, we use the default subdomain `spinkart`.
4840
+ const shouldKeepDefaultDataForDevEnv = isGlobalSetup && IS_DEV_ENV;
4841
+ const stagingOrganization = shouldKeepDefaultDataForDevEnv
4842
+ ? CREDENTIALS.subdomainName
4843
+ : `cpt-${product}-${timestamp}`;
4844
+ const email = shouldKeepDefaultDataForDevEnv
4845
+ ? CREDENTIALS.email
4846
+ : `cpt${otpBypassKey}+${product}+${timestamp}@bigbinary.com`;
4836
4847
  return {
4837
4848
  firstName,
4838
4849
  lastName,
4839
4850
  otp: 111111,
4840
- domain: `neeto${product}.net`,
4841
- currentUserName: IS_STAGING_ENV
4842
- ? joinString(firstName, lastName)
4843
- : CREDENTIALS.name,
4851
+ domain: IS_STAGING_ENV ? `neeto${product}.net` : `lvh.me`,
4852
+ currentUserName: joinString(firstName, lastName),
4844
4853
  businessName: stagingOrganization,
4845
- subdomainName: IS_STAGING_ENV ? stagingOrganization : "spinkart",
4846
- email: IS_STAGING_ENV
4847
- ? `cpt${otpBypassKey}+${product}+${timestamp}@bigbinary.com`
4848
- : CREDENTIALS.email,
4854
+ subdomainName: stagingOrganization,
4855
+ email,
4849
4856
  };
4850
4857
  };
4851
4858
 
@@ -4886,7 +4893,7 @@ const removeCredentialFile = () => {
4886
4893
  require$$0$3.unlink(STORAGE_STATE, error => {
4887
4894
  if (!error)
4888
4895
  return;
4889
- console.error(error);
4896
+ console.log(error);
4890
4897
  });
4891
4898
  };
4892
4899
  const clearCredentials = () => {
@@ -4935,7 +4942,12 @@ const shouldSkipSetupAndTeardown = () => { var _a; return ((_a = getGlobalUserSt
4935
4942
  const shouldSkipCustomDomainSetup = () => process.env.SETUP_CUSTOM_DOMAIN !== "true" || !IS_STAGING_ENV;
4936
4943
  const baseURLGenerator = (product, customSubdomain) => {
4937
4944
  const { subdomainName } = getGlobalUserState();
4938
- return `https://${customSubdomain !== null && customSubdomain !== void 0 ? customSubdomain : subdomainName}.neeto${product.toLowerCase()}.net`;
4945
+ const subdomain = customSubdomain !== null && customSubdomain !== void 0 ? customSubdomain : subdomainName;
4946
+ const railsPort = process.env.RAILS_SERVER_PORT;
4947
+ const baseURL = IS_DEV_ENV
4948
+ ? `http://${subdomain}.lvh.me:${railsPort}`
4949
+ : `https://${subdomain}.neeto${product.toLowerCase()}.net`;
4950
+ return baseURL;
4939
4951
  };
4940
4952
  // trims and replaces multiple whitespace characters in a string with a single space
4941
4953
  const squish = (text) => text.trim().replace(/\s+/g, " ");
@@ -5015,7 +5027,7 @@ const globalShortcuts = (t) => [
5015
5027
  const generatePhoneNumber = () => `${"+91"} 9${faker.string.numeric(4)} ${faker.string.numeric(5)}`;
5016
5028
  const initializeTestData = (product) => {
5017
5029
  const credentials = generateStagingData(product.toLowerCase());
5018
- const baseURL = `https://${credentials.subdomainName}.${credentials.domain}`;
5030
+ const baseURL = baseURLGenerator(product, credentials.subdomainName);
5019
5031
  return { credentials, baseURL };
5020
5032
  };
5021
5033
 
@@ -116651,7 +116663,7 @@ class MicrosoftPage extends IntegrationBase {
116651
116663
  const acceptBtn = this.page.locator(MICROSOFT_LOGIN_SELECTORS.acceptButton);
116652
116664
  await acceptBtn.click();
116653
116665
  await expect(acceptBtn).toBeHidden({ timeout: 10000 });
116654
- await this.page.waitForLoadState("load", { timeout: 25000 });
116666
+ await this.page.waitForLoadState("load", { timeout: 50000 });
116655
116667
  };
116656
116668
  this.revokePermissions = async () => {
116657
116669
  await this.page.goto(THIRD_PARTY_ROUTES.microsoft.myApps);
@@ -118478,30 +118490,30 @@ class TeamMembers {
118478
118490
  }
118479
118491
  }
118480
118492
 
118481
- const loginWithoutSSO = async ({ page,
118482
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
118483
- neetoPlaywrightUtilities, loginPath = "/", }) => {
118484
- if (shouldSkipSetupAndTeardown())
118485
- return;
118486
- await page.goto(loginPath, { timeout: 20000 });
118493
+ const fillCredentialsAndSubmit = async ({ page, loginPath = "/", email = CREDENTIALS.email, }) => {
118494
+ await page.goto(loginPath, { timeout: 30000 });
118487
118495
  await page.waitForLoadState("load", { timeout: 35000 });
118488
- await page
118489
- .getByTestId(LOGIN_SELECTORS.emailTextField)
118490
- .fill(CREDENTIALS.email);
118496
+ await page.getByTestId(LOGIN_SELECTORS.emailTextField).fill(email);
118491
118497
  await page
118492
118498
  .getByTestId(LOGIN_SELECTORS.passwordTextField)
118493
118499
  .fill(CREDENTIALS.password);
118494
118500
  const submitButton = page.getByTestId(LOGIN_SELECTORS.submitButton);
118495
118501
  await submitButton.click();
118496
118502
  await expect(submitButton).toBeHidden({ timeout: 15000 });
118503
+ await expect(page.getByTestId(COMMON_SELECTORS.floatingActionMenuButton)).toBeVisible({ timeout: 60000 });
118504
+ };
118505
+ const loginWithoutSSO = async ({ page, loginPath = "/", email = CREDENTIALS.email, }) => {
118506
+ if (shouldSkipSetupAndTeardown())
118507
+ return;
118508
+ await fillCredentialsAndSubmit({ page, loginPath, email });
118497
118509
  const userCredentials = readFileSyncIfExists();
118498
118510
  await page.context().storageState({ path: STORAGE_STATE });
118499
118511
  const mergedCredentials = mergeAll([readFileSyncIfExists(), userCredentials]);
118500
118512
  writeDataToFile(JSON.stringify(mergedCredentials, null, 2));
118501
118513
  updateCredentials({ key: "isLoggedIn", value: "true" });
118502
118514
  };
118503
- const login = async ({ page, neetoPlaywrightUtilities, loginPath, }) => !IS_STAGING_ENV &&
118504
- (await loginWithoutSSO({ page, neetoPlaywrightUtilities, loginPath }));
118515
+ const login = async ({ page, neetoPlaywrightUtilities, loginPath, email, }) => IS_DEV_ENV &&
118516
+ (await loginWithoutSSO({ page, loginPath, email }));
118505
118517
  const generateRandomBypassEmail = () => `cpt${process.env.OTP_BYPASS_KEY}+${faker.number.int()}@bigbinary.com`;
118506
118518
 
118507
118519
  const extractSubdomainFromError = (errorString) => {
@@ -118509,13 +118521,43 @@ const extractSubdomainFromError = (errorString) => {
118509
118521
  const matches = errorString.match(regex);
118510
118522
  return matches[1];
118511
118523
  };
118524
+ const createOrganizationViaRake = async ({ email, firstName, lastName, subdomainName, }) => {
118525
+ var _a, _b;
118526
+ const workingDirectory = process.env.RAILS_ROOT || "..";
118527
+ const rakeTaskName = "playwright:create_organization";
118528
+ const childProcess = spawn("bundle", [
118529
+ "exec",
118530
+ "rake",
118531
+ rakeTaskName,
118532
+ "--",
118533
+ `--first_name=${firstName}`,
118534
+ `--last_name=${lastName}`,
118535
+ `--email=${email}`,
118536
+ `--subdomain=${subdomainName}`,
118537
+ ], {
118538
+ cwd: workingDirectory,
118539
+ stdio: ["ignore", "pipe", "pipe"],
118540
+ });
118541
+ let stdout = "";
118542
+ let stderr = "";
118543
+ (_a = childProcess.stdout) === null || _a === void 0 ? void 0 : _a.on("data", data => {
118544
+ stdout += data.toString("utf-8");
118545
+ });
118546
+ (_b = childProcess.stderr) === null || _b === void 0 ? void 0 : _b.on("data", data => {
118547
+ stderr += data.toString("utf-8");
118548
+ });
118549
+ const exitCode = await new Promise((resolve, reject) => {
118550
+ childProcess.on("error", reject);
118551
+ childProcess.on("close", resolve);
118552
+ });
118553
+ if (exitCode !== 0) {
118554
+ throw new Error(`Failed to create organization: ${stderr || stdout || `Exit code ${exitCode}`}`);
118555
+ }
118556
+ return stdout.trim();
118557
+ };
118512
118558
 
118513
118559
  class OrganizationPage {
118514
118560
  constructor(page, neetoPlaywrightUtilities) {
118515
- this.baseUrlGenerator = (appName) => {
118516
- const { subdomainName } = getGlobalUserState();
118517
- return `https://${subdomainName}.${appName}.net`;
118518
- };
118519
118561
  this.fillOTP = async (otp = faker.string.numeric(6)) => {
118520
118562
  await this.neetoPlaywrightUtilities.waitForPageLoad();
118521
118563
  const otpTextBox = this.page.getByTestId(SIGNUP_SELECTORS.otpTextBox);
@@ -118530,8 +118572,17 @@ class OrganizationPage {
118530
118572
  await expect(submitButton).toBeHidden({ timeout: 35000 });
118531
118573
  };
118532
118574
  this.createOrganization = async ({ email, businessName, subdomainName, firstName, lastName, appName, }) => {
118533
- if (!IS_STAGING_ENV || shouldSkipSetupAndTeardown())
118575
+ if (shouldSkipSetupAndTeardown())
118576
+ return;
118577
+ if (IS_DEV_ENV) {
118578
+ await createOrganizationViaRake({
118579
+ email,
118580
+ firstName,
118581
+ lastName,
118582
+ subdomainName,
118583
+ });
118534
118584
  return;
118585
+ }
118535
118586
  const appNameInLowerCase = appName.toLowerCase();
118536
118587
  const isNeetoAuth = appNameInLowerCase === "neetoauth";
118537
118588
  isNeetoAuth
@@ -118567,7 +118618,9 @@ class OrganizationPage {
118567
118618
  subdomainName: user.subdomainName,
118568
118619
  appName: `neeto${product}`,
118569
118620
  });
118570
- await expect(this.page.locator(COMMON_SELECTORS.spinner)).toBeHidden();
118621
+ await this.neetoPlaywrightUtilities.waitForPageLoad({
118622
+ customPageContext: this.page,
118623
+ });
118571
118624
  const userCredentials = readFileSyncIfExists();
118572
118625
  await this.page.context().storageState({ path: STORAGE_STATE });
118573
118626
  const mergedCredentials = mergeAll([
@@ -118578,7 +118631,7 @@ class OrganizationPage {
118578
118631
  updateCredentials({ key: "isLoggedIn", value: "true" });
118579
118632
  updateCredentials({
118580
118633
  key: "baseUrl",
118581
- value: this.baseUrlGenerator(`neeto${product}`),
118634
+ value: baseURLGenerator(product),
118582
118635
  });
118583
118636
  };
118584
118637
  this.updateSubdomainIfExists = async (appName) => {
@@ -118600,7 +118653,7 @@ class OrganizationPage {
118600
118653
  key: "businessName",
118601
118654
  value: newOrganizationName,
118602
118655
  });
118603
- process.env.BASE_URL = this.baseUrlGenerator(appName);
118656
+ process.env.BASE_URL = baseURLGenerator(appName);
118604
118657
  await this.page
118605
118658
  .getByTestId(SIGNUP_SELECTORS.organizationNameTextField)
118606
118659
  .fill(newOrganizationName);
@@ -118631,6 +118684,8 @@ class OrganizationPage {
118631
118684
  await this.fillOTP(otp);
118632
118685
  };
118633
118686
  this.setupProfile = async ({ firstName = faker.person.firstName(), lastName = faker.person.lastName(), country, } = {}) => {
118687
+ if (IS_DEV_ENV)
118688
+ return;
118634
118689
  await this.neetoPlaywrightUtilities.waitForPageLoad();
118635
118690
  await this.page
118636
118691
  .getByTestId(SIGNUP_SELECTORS.firstNameTextField)
@@ -118648,36 +118703,62 @@ class OrganizationPage {
118648
118703
  });
118649
118704
  };
118650
118705
  this.loginAndOnboard = async ({ email, firstName, lastName, country, handleOnboarding, baseURL = process.env.BASE_URL, fetchOtpFromEmail, }) => {
118651
- await this.page.goto(`${baseURL}${ROUTES.admin}`, { timeout: 20000 });
118652
- fetchOtpFromEmail === undefined
118653
- ? await this.loginViaSSO(email)
118654
- : await this.loginWithFastmailEmail({ email, fetchOtpFromEmail });
118655
- await this.setupProfile({ firstName, lastName, country });
118656
- await this.page.waitForURL(new RegExp(getGlobalUserState().domain), {
118657
- waitUntil: "load",
118658
- });
118706
+ if (IS_DEV_ENV) {
118707
+ await fillCredentialsAndSubmit({
118708
+ page: this.page,
118709
+ email,
118710
+ loginPath: `${baseURL}${ROUTES.admin}`,
118711
+ });
118712
+ }
118713
+ else {
118714
+ await this.page.goto(`${baseURL}${ROUTES.admin}`, { timeout: 20000 });
118715
+ fetchOtpFromEmail === undefined
118716
+ ? await this.loginViaSSO(email)
118717
+ : await this.loginWithFastmailEmail({ email, fetchOtpFromEmail });
118718
+ await this.setupProfile({ firstName, lastName, country });
118719
+ await this.page.waitForURL(new RegExp(getGlobalUserState().domain), {
118720
+ waitUntil: "load",
118721
+ });
118722
+ }
118659
118723
  await handleOnboarding();
118660
118724
  };
118661
118725
  this.signUp = async ({ credentials, fetchOtpFromEmail, appName, }) => {
118662
- let otp = "123456";
118663
- await this.page.goto(`${ROUTES.neetoAuthSignup}?redirect_uri=${credentials.domain}`, { timeout: 20000 });
118664
- await this.submitEmail(credentials.email);
118665
- if (fetchOtpFromEmail !== undefined) {
118666
- otp = await fetchOtpFromEmail({
118726
+ if (IS_DEV_ENV) {
118727
+ await createOrganizationViaRake({
118667
118728
  email: credentials.email,
118668
- timeout: 4 * 60 * 1000,
118729
+ firstName: credentials.firstName,
118730
+ lastName: credentials.lastName,
118731
+ subdomainName: credentials.subdomainName,
118732
+ });
118733
+ await fillCredentialsAndSubmit({
118734
+ page: this.page,
118735
+ email: credentials.email,
118736
+ loginPath: `${baseURLGenerator(appName, credentials.subdomainName)}${ROUTES.admin}`,
118669
118737
  });
118670
118738
  }
118671
- await this.fillOTP(otp);
118672
- await this.fillOrganizationDetails({
118673
- credentials,
118674
- appName,
118675
- });
118676
- await this.page.waitForURL(new RegExp(credentials.domain));
118739
+ else {
118740
+ let otp = "123456";
118741
+ await this.page.goto(`${ROUTES.neetoAuthSignup}?redirect_uri=${credentials.domain}`, { timeout: 20000 });
118742
+ await this.submitEmail(credentials.email);
118743
+ if (fetchOtpFromEmail !== undefined) {
118744
+ otp = await fetchOtpFromEmail({
118745
+ email: credentials.email,
118746
+ timeout: 4 * 60 * 1000,
118747
+ });
118748
+ }
118749
+ await this.fillOTP(otp);
118750
+ await this.fillOrganizationDetails({
118751
+ credentials,
118752
+ appName,
118753
+ });
118754
+ await this.page.waitForURL(new RegExp(credentials.domain));
118755
+ }
118677
118756
  const STORAGE_STATE = await this.page.context().storageState();
118678
118757
  return { STORAGE_STATE, baseURL: process.env.BASE_URL };
118679
118758
  };
118680
118759
  this.fillOrganizationDetails = async ({ credentials, appName, }) => {
118760
+ if (IS_DEV_ENV)
118761
+ return;
118681
118762
  const subdomainError = this.page.getByTestId(SIGNUP_SELECTORS.subdomainError);
118682
118763
  const organizationSubmitButton = this.page.getByTestId(SIGNUP_SELECTORS.organizationSubmitButton);
118683
118764
  await this.neetoPlaywrightUtilities.waitForPageLoad();
@@ -119656,10 +119737,7 @@ const initializeCredentials = (product) => {
119656
119737
  }
119657
119738
  const stagingData = generateStagingData(product);
119658
119739
  writeDataToFile(JSON.stringify({ user: stagingData }, null, 2));
119659
- if (IS_STAGING_ENV) {
119660
- const baseUrl = `https://${stagingData.subdomainName}.${stagingData.domain}`;
119661
- process.env.BASE_URL = baseUrl;
119662
- }
119740
+ process.env.BASE_URL = baseURLGenerator(product, stagingData.subdomainName);
119663
119741
  };
119664
119742
 
119665
119743
  const assertColumnHeaderVisibility = async ({ page, columnName, shouldBeVisible, }) => {
@@ -124602,7 +124680,6 @@ const playdashLighthouseConfig = {
124602
124680
  tags: process.env.TAG,
124603
124681
  };
124604
124682
  const isCI = isPresent(process.env.NEETO_CI_JOB_ID);
124605
- const isDevEnv = process.env.TEST_ENV === ENVIRONMENT.development;
124606
124683
  const railsPort = process.env.RAILS_SERVER_PORT;
124607
124684
  const vitePort = process.env.VITE_PORT;
124608
124685
  const definePlaywrightConfig = (overrides) => {
@@ -124645,7 +124722,7 @@ const definePlaywrightConfig = (overrides) => {
124645
124722
  timeout: 5 * 60 * 1000,
124646
124723
  workers: isCI ? 6 : 5,
124647
124724
  reporter: isCI ? reporter : [["line"]],
124648
- ...(isDevEnv && {
124725
+ ...(IS_DEV_ENV && {
124649
124726
  webServer: [
124650
124727
  {
124651
124728
  command: `bundle exec puma -b tcp://0.0.0.0:${railsPort} -C config/puma.rb`,
@@ -124709,5 +124786,5 @@ const definePlaywrightConfig = (overrides) => {
124709
124786
  });
124710
124787
  };
124711
124788
 
124712
- export { ACTIONS, ADMIN_PANEL_SELECTORS, API_KEYS_SELECTORS, API_ROUTES, AUDIT_LOGS_SELECTORS, AdminPanelPage, ApiKeysApi, ApiKeysPage, AuditLogsPage, BASE_URL, 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_PICKER_SELECTORS, DATE_RANGES, DATE_TEXTS, 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_SELECTORS, HelpAndProfilePage, INTEGRATIONS_TEXTS, INTEGRATION_SELECTORS, IPRestrictionsPage, IP_RESTRICTIONS_SELECTORS, IS_STAGING_ENV, ImageUploader, IntegrationBase, IpRestrictionsApi, KEYBOARD_SHORTCUTS_SELECTORS, 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, ONBOARDING_SELECTORS, ORGANIZATION_TEXTS, OTP_EMAIL_PATTERN, OrganizationPage, PAST_TIME_RANGES, PHONE_NUMBER_FORMATS, PLURAL, PROFILE_LINKS, PROFILE_SECTION_SELECTORS, PROJECT_TRANSLATIONS_PATH, ROLES_SELECTORS, ROUTES, 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, currencyUtils, dataQa, decodeQRCodeFromFile, definePlaywrightConfig, executeWithThrottledResources, extractSubdomainFromError, filterUtils, generatePhoneNumber, generatePhoneNumberDetails, generateRandomBypassEmail, generateRandomFile, generateStagingData, getByDataQA, getClipboardContent, getFormattedPhoneNumber, getFullUrl, getGlobalUserProps, getGlobalUserState, getImagePathAndName, getIsoCodeFromPhoneCode, getListCount, globalShortcuts, grantClipboardPermissions, headerUtils, hexToRGB, hexToRGBA, hyphenize, i18nFixture, 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, writeDataToFile };
124789
+ export { ACTIONS, ADMIN_PANEL_SELECTORS, API_KEYS_SELECTORS, API_ROUTES, AUDIT_LOGS_SELECTORS, AdminPanelPage, ApiKeysApi, ApiKeysPage, AuditLogsPage, BASE_URL, 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_PICKER_SELECTORS, DATE_RANGES, DATE_TEXTS, 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_SELECTORS, HelpAndProfilePage, INTEGRATIONS_TEXTS, INTEGRATION_SELECTORS, IPRestrictionsPage, IP_RESTRICTIONS_SELECTORS, IS_DEV_ENV, IS_STAGING_ENV, ImageUploader, IntegrationBase, IpRestrictionsApi, KEYBOARD_SHORTCUTS_SELECTORS, 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, ONBOARDING_SELECTORS, ORGANIZATION_TEXTS, OTP_EMAIL_PATTERN, OrganizationPage, PAST_TIME_RANGES, PHONE_NUMBER_FORMATS, PLURAL, PROFILE_LINKS, PROFILE_SECTION_SELECTORS, PROJECT_TRANSLATIONS_PATH, ROLES_SELECTORS, ROUTES, 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, headerUtils, hexToRGB, hexToRGBA, hyphenize, i18nFixture, 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, writeDataToFile };
124713
124790
  //# sourceMappingURL=index.js.map