@bigbinary/neeto-playwright-commons 1.26.12 → 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.cjs.js CHANGED
@@ -306,14 +306,18 @@ const ENVIRONMENT = {
306
306
  review: "review",
307
307
  };
308
308
  const EXAMPLE_URL = "https://example.com";
309
- const IS_STAGING_ENV = process.env.TEST_ENV === "staging";
309
+ const IS_STAGING_ENV = process.env.TEST_ENV === ENVIRONMENT.staging;
310
+ const IS_DEV_ENV = process.env.TEST_ENV === ENVIRONMENT.development;
310
311
  const STORAGE_STATE = "./e2e/auth/user.json";
311
312
  const GLOBAL_TRANSLATIONS_PATTERN = "../node_modules/@bigbinary/**/translations/en.json";
312
313
  const PROJECT_TRANSLATIONS_PATH = "../app/javascript/src/translations/en.json";
313
314
  const CREDENTIALS = {
315
+ firstName: "Oliver",
316
+ lastName: "Smith",
314
317
  name: "Oliver Smith",
315
318
  email: "oliver@example.com",
316
319
  password: "welcome",
320
+ subdomainName: "spinkart",
317
321
  };
318
322
  const OTP_EMAIL_PATTERN = "is your login code";
319
323
  const SLACK_DEFAULT_CHANNEL = "general";
@@ -4850,23 +4854,26 @@ const generateStagingData = (product = "invoice") => {
4850
4854
  const timestamp = jobCompletionIndex
4851
4855
  ? `${dateTimeString}-${jobCompletionIndex}`
4852
4856
  : dateTimeString;
4853
- const firstName = "André";
4854
- const lastName = "O'Reilly";
4857
+ const firstName = IS_STAGING_ENV ? "André" : CREDENTIALS.firstName;
4858
+ const lastName = IS_STAGING_ENV ? "O'Reilly" : CREDENTIALS.lastName;
4855
4859
  const otpBypassKey = process.env.OTP_BYPASS_KEY;
4856
- const stagingOrganization = `cpt-${product}-${timestamp}`;
4860
+ const isGlobalSetup = !getGlobalUserState(); // For dev global setup staging data, we use the default subdomain `spinkart`.
4861
+ const shouldKeepDefaultDataForDevEnv = isGlobalSetup && IS_DEV_ENV;
4862
+ const stagingOrganization = shouldKeepDefaultDataForDevEnv
4863
+ ? CREDENTIALS.subdomainName
4864
+ : `cpt-${product}-${timestamp}`;
4865
+ const email = shouldKeepDefaultDataForDevEnv
4866
+ ? CREDENTIALS.email
4867
+ : `cpt${otpBypassKey}+${product}+${timestamp}@bigbinary.com`;
4857
4868
  return {
4858
4869
  firstName,
4859
4870
  lastName,
4860
4871
  otp: 111111,
4861
- domain: `neeto${product}.net`,
4862
- currentUserName: IS_STAGING_ENV
4863
- ? joinString(firstName, lastName)
4864
- : CREDENTIALS.name,
4872
+ domain: IS_STAGING_ENV ? `neeto${product}.net` : `lvh.me`,
4873
+ currentUserName: joinString(firstName, lastName),
4865
4874
  businessName: stagingOrganization,
4866
- subdomainName: IS_STAGING_ENV ? stagingOrganization : "spinkart",
4867
- email: IS_STAGING_ENV
4868
- ? `cpt${otpBypassKey}+${product}+${timestamp}@bigbinary.com`
4869
- : CREDENTIALS.email,
4875
+ subdomainName: stagingOrganization,
4876
+ email,
4870
4877
  };
4871
4878
  };
4872
4879
 
@@ -4907,7 +4914,7 @@ const removeCredentialFile = () => {
4907
4914
  require$$0__namespace.unlink(STORAGE_STATE, error => {
4908
4915
  if (!error)
4909
4916
  return;
4910
- console.error(error);
4917
+ console.log(error);
4911
4918
  });
4912
4919
  };
4913
4920
  const clearCredentials = () => {
@@ -4956,7 +4963,12 @@ const shouldSkipSetupAndTeardown = () => { var _a; return ((_a = getGlobalUserSt
4956
4963
  const shouldSkipCustomDomainSetup = () => process.env.SETUP_CUSTOM_DOMAIN !== "true" || !IS_STAGING_ENV;
4957
4964
  const baseURLGenerator = (product, customSubdomain) => {
4958
4965
  const { subdomainName } = getGlobalUserState();
4959
- return `https://${customSubdomain !== null && customSubdomain !== void 0 ? customSubdomain : subdomainName}.neeto${product.toLowerCase()}.net`;
4966
+ const subdomain = customSubdomain !== null && customSubdomain !== void 0 ? customSubdomain : subdomainName;
4967
+ const railsPort = process.env.RAILS_SERVER_PORT;
4968
+ const baseURL = IS_DEV_ENV
4969
+ ? `http://${subdomain}.lvh.me:${railsPort}`
4970
+ : `https://${subdomain}.neeto${product.toLowerCase()}.net`;
4971
+ return baseURL;
4960
4972
  };
4961
4973
  // trims and replaces multiple whitespace characters in a string with a single space
4962
4974
  const squish = (text) => text.trim().replace(/\s+/g, " ");
@@ -5036,7 +5048,7 @@ const globalShortcuts = (t) => [
5036
5048
  const generatePhoneNumber = () => `${"+91"} 9${faker.faker.string.numeric(4)} ${faker.faker.string.numeric(5)}`;
5037
5049
  const initializeTestData = (product) => {
5038
5050
  const credentials = generateStagingData(product.toLowerCase());
5039
- const baseURL = `https://${credentials.subdomainName}.${credentials.domain}`;
5051
+ const baseURL = baseURLGenerator(product, credentials.subdomainName);
5040
5052
  return { credentials, baseURL };
5041
5053
  };
5042
5054
 
@@ -116448,11 +116460,8 @@ class GooglePage extends IntegrationBase {
116448
116460
  .getByRole("link", { name: GOOGLE_LOGIN_TEXTS.neetoAutomation })
116449
116461
  .click();
116450
116462
  await test.expect(chooseAnAccountHeading).toBeHidden({ timeout: 10000 });
116451
- const verificationCode = this.page
116452
- .locator("form")
116453
- .getByText(GOOGLE_LOGIN_TEXTS.verificationCode);
116454
116463
  this.page.url().includes(THIRD_PARTY_ROUTES.google.totpChallenge) &&
116455
- (await this.enterTotpCode(verificationCode));
116464
+ (await this.enterTotpCode());
116456
116465
  await this.handleNotVerifiedPage();
116457
116466
  const signInHeading = this.page.getByRole("heading", {
116458
116467
  name: GOOGLE_LOGIN_TEXTS.signInHeading(appName),
@@ -116491,32 +116500,29 @@ class GooglePage extends IntegrationBase {
116491
116500
  .click());
116492
116501
  await this.page.waitForLoadState("load", { timeout: 25000 });
116493
116502
  await this.page.waitForURL(new RegExp(THIRD_PARTY_ROUTES.google.totpChallenge));
116494
- const twoStepVerification = this.page.locator("form").getByRole("heading", {
116495
- name: GOOGLE_LOGIN_TEXTS.twoStepVerification,
116496
- level: 2,
116497
- exact: true,
116498
- });
116499
- await test.expect(twoStepVerification).toBeVisible({ timeout: 15000 });
116500
- await this.enterTotpCode(twoStepVerification);
116503
+ await this.enterTotpCode();
116501
116504
  await this.page.waitForLoadState("load", { timeout: 25000 });
116502
116505
  await this.page.waitForURL(new RegExp(THIRD_PARTY_ROUTES.google.myAccount));
116503
116506
  };
116504
- this.enterTotpCode = async (locator) => {
116507
+ this.enterTotpCode = async () => {
116505
116508
  let previousToken = null;
116509
+ const codeInput = this.page.getByLabel(GOOGLE_LOGIN_TEXTS.enterCode);
116510
+ await test.expect(codeInput).toBeVisible({ timeout: 20000 });
116506
116511
  await test.expect(async () => {
116507
116512
  let totpToken = this.totp.generate({ timestamp: Date.now() });
116508
116513
  if (totpToken === previousToken) {
116509
116514
  const remainingTime = this.totp.remaining({ timestamp: Date.now() });
116515
+ // Wait for the remaining time plus a small buffer to ensure new token is generated
116510
116516
  // eslint-disable-next-line playwright/no-wait-for-timeout
116511
- await this.page.waitForTimeout(remainingTime + 500); // Wait for the remaining time plus a small buffer (500ms) to ensure new token
116517
+ await this.page.waitForTimeout(remainingTime + 500);
116512
116518
  totpToken = this.totp.generate({ timestamp: Date.now() });
116513
116519
  }
116514
116520
  previousToken = totpToken;
116515
- await this.page.getByLabel(GOOGLE_LOGIN_TEXTS.enterCode).fill(totpToken);
116521
+ await codeInput.fill(totpToken);
116516
116522
  test.expect(this.totp.validate({ token: totpToken })).not.toBeNull();
116517
116523
  await this.page.locator(GOOGLE_LOGIN_SELECTORS.totpNext).click();
116518
116524
  await test.expect(this.page.getByText(GOOGLE_LOGIN_TEXTS.wrongCode)).toBeHidden({ timeout: 10000 });
116519
- await test.expect(locator).toBeHidden({ timeout: 10000 });
116525
+ await test.expect(codeInput).toBeHidden({ timeout: 15000 });
116520
116526
  }).toPass({ timeout: 2 * 60 * 1000 });
116521
116527
  };
116522
116528
  this.logoutFromGoogle = async () => {
@@ -116678,7 +116684,7 @@ class MicrosoftPage extends IntegrationBase {
116678
116684
  const acceptBtn = this.page.locator(MICROSOFT_LOGIN_SELECTORS.acceptButton);
116679
116685
  await acceptBtn.click();
116680
116686
  await test.expect(acceptBtn).toBeHidden({ timeout: 10000 });
116681
- await this.page.waitForLoadState("load", { timeout: 25000 });
116687
+ await this.page.waitForLoadState("load", { timeout: 50000 });
116682
116688
  };
116683
116689
  this.revokePermissions = async () => {
116684
116690
  await this.page.goto(THIRD_PARTY_ROUTES.microsoft.myApps);
@@ -118505,30 +118511,30 @@ class TeamMembers {
118505
118511
  }
118506
118512
  }
118507
118513
 
118508
- const loginWithoutSSO = async ({ page,
118509
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
118510
- neetoPlaywrightUtilities, loginPath = "/", }) => {
118511
- if (shouldSkipSetupAndTeardown())
118512
- return;
118513
- await page.goto(loginPath, { timeout: 20000 });
118514
+ const fillCredentialsAndSubmit = async ({ page, loginPath = "/", email = CREDENTIALS.email, }) => {
118515
+ await page.goto(loginPath, { timeout: 30000 });
118514
118516
  await page.waitForLoadState("load", { timeout: 35000 });
118515
- await page
118516
- .getByTestId(LOGIN_SELECTORS.emailTextField)
118517
- .fill(CREDENTIALS.email);
118517
+ await page.getByTestId(LOGIN_SELECTORS.emailTextField).fill(email);
118518
118518
  await page
118519
118519
  .getByTestId(LOGIN_SELECTORS.passwordTextField)
118520
118520
  .fill(CREDENTIALS.password);
118521
118521
  const submitButton = page.getByTestId(LOGIN_SELECTORS.submitButton);
118522
118522
  await submitButton.click();
118523
118523
  await test.expect(submitButton).toBeHidden({ timeout: 15000 });
118524
+ await test.expect(page.getByTestId(COMMON_SELECTORS.floatingActionMenuButton)).toBeVisible({ timeout: 60000 });
118525
+ };
118526
+ const loginWithoutSSO = async ({ page, loginPath = "/", email = CREDENTIALS.email, }) => {
118527
+ if (shouldSkipSetupAndTeardown())
118528
+ return;
118529
+ await fillCredentialsAndSubmit({ page, loginPath, email });
118524
118530
  const userCredentials = readFileSyncIfExists();
118525
118531
  await page.context().storageState({ path: STORAGE_STATE });
118526
118532
  const mergedCredentials = ramda.mergeAll([readFileSyncIfExists(), userCredentials]);
118527
118533
  writeDataToFile(JSON.stringify(mergedCredentials, null, 2));
118528
118534
  updateCredentials({ key: "isLoggedIn", value: "true" });
118529
118535
  };
118530
- const login = async ({ page, neetoPlaywrightUtilities, loginPath, }) => !IS_STAGING_ENV &&
118531
- (await loginWithoutSSO({ page, neetoPlaywrightUtilities, loginPath }));
118536
+ const login = async ({ page, neetoPlaywrightUtilities, loginPath, email, }) => IS_DEV_ENV &&
118537
+ (await loginWithoutSSO({ page, loginPath, email }));
118532
118538
  const generateRandomBypassEmail = () => `cpt${process.env.OTP_BYPASS_KEY}+${faker.faker.number.int()}@bigbinary.com`;
118533
118539
 
118534
118540
  const extractSubdomainFromError = (errorString) => {
@@ -118536,13 +118542,43 @@ const extractSubdomainFromError = (errorString) => {
118536
118542
  const matches = errorString.match(regex);
118537
118543
  return matches[1];
118538
118544
  };
118545
+ const createOrganizationViaRake = async ({ email, firstName, lastName, subdomainName, }) => {
118546
+ var _a, _b;
118547
+ const workingDirectory = process.env.RAILS_ROOT || "..";
118548
+ const rakeTaskName = "playwright:create_organization";
118549
+ const childProcess = child_process.spawn("bundle", [
118550
+ "exec",
118551
+ "rake",
118552
+ rakeTaskName,
118553
+ "--",
118554
+ `--first_name=${firstName}`,
118555
+ `--last_name=${lastName}`,
118556
+ `--email=${email}`,
118557
+ `--subdomain=${subdomainName}`,
118558
+ ], {
118559
+ cwd: workingDirectory,
118560
+ stdio: ["ignore", "pipe", "pipe"],
118561
+ });
118562
+ let stdout = "";
118563
+ let stderr = "";
118564
+ (_a = childProcess.stdout) === null || _a === void 0 ? void 0 : _a.on("data", data => {
118565
+ stdout += data.toString("utf-8");
118566
+ });
118567
+ (_b = childProcess.stderr) === null || _b === void 0 ? void 0 : _b.on("data", data => {
118568
+ stderr += data.toString("utf-8");
118569
+ });
118570
+ const exitCode = await new Promise((resolve, reject) => {
118571
+ childProcess.on("error", reject);
118572
+ childProcess.on("close", resolve);
118573
+ });
118574
+ if (exitCode !== 0) {
118575
+ throw new Error(`Failed to create organization: ${stderr || stdout || `Exit code ${exitCode}`}`);
118576
+ }
118577
+ return stdout.trim();
118578
+ };
118539
118579
 
118540
118580
  class OrganizationPage {
118541
118581
  constructor(page, neetoPlaywrightUtilities) {
118542
- this.baseUrlGenerator = (appName) => {
118543
- const { subdomainName } = getGlobalUserState();
118544
- return `https://${subdomainName}.${appName}.net`;
118545
- };
118546
118582
  this.fillOTP = async (otp = faker.faker.string.numeric(6)) => {
118547
118583
  await this.neetoPlaywrightUtilities.waitForPageLoad();
118548
118584
  const otpTextBox = this.page.getByTestId(SIGNUP_SELECTORS.otpTextBox);
@@ -118557,8 +118593,17 @@ class OrganizationPage {
118557
118593
  await test.expect(submitButton).toBeHidden({ timeout: 35000 });
118558
118594
  };
118559
118595
  this.createOrganization = async ({ email, businessName, subdomainName, firstName, lastName, appName, }) => {
118560
- if (!IS_STAGING_ENV || shouldSkipSetupAndTeardown())
118596
+ if (shouldSkipSetupAndTeardown())
118597
+ return;
118598
+ if (IS_DEV_ENV) {
118599
+ await createOrganizationViaRake({
118600
+ email,
118601
+ firstName,
118602
+ lastName,
118603
+ subdomainName,
118604
+ });
118561
118605
  return;
118606
+ }
118562
118607
  const appNameInLowerCase = appName.toLowerCase();
118563
118608
  const isNeetoAuth = appNameInLowerCase === "neetoauth";
118564
118609
  isNeetoAuth
@@ -118594,7 +118639,9 @@ class OrganizationPage {
118594
118639
  subdomainName: user.subdomainName,
118595
118640
  appName: `neeto${product}`,
118596
118641
  });
118597
- await test.expect(this.page.locator(COMMON_SELECTORS.spinner)).toBeHidden();
118642
+ await this.neetoPlaywrightUtilities.waitForPageLoad({
118643
+ customPageContext: this.page,
118644
+ });
118598
118645
  const userCredentials = readFileSyncIfExists();
118599
118646
  await this.page.context().storageState({ path: STORAGE_STATE });
118600
118647
  const mergedCredentials = ramda.mergeAll([
@@ -118605,7 +118652,7 @@ class OrganizationPage {
118605
118652
  updateCredentials({ key: "isLoggedIn", value: "true" });
118606
118653
  updateCredentials({
118607
118654
  key: "baseUrl",
118608
- value: this.baseUrlGenerator(`neeto${product}`),
118655
+ value: baseURLGenerator(product),
118609
118656
  });
118610
118657
  };
118611
118658
  this.updateSubdomainIfExists = async (appName) => {
@@ -118627,7 +118674,7 @@ class OrganizationPage {
118627
118674
  key: "businessName",
118628
118675
  value: newOrganizationName,
118629
118676
  });
118630
- process.env.BASE_URL = this.baseUrlGenerator(appName);
118677
+ process.env.BASE_URL = baseURLGenerator(appName);
118631
118678
  await this.page
118632
118679
  .getByTestId(SIGNUP_SELECTORS.organizationNameTextField)
118633
118680
  .fill(newOrganizationName);
@@ -118658,6 +118705,8 @@ class OrganizationPage {
118658
118705
  await this.fillOTP(otp);
118659
118706
  };
118660
118707
  this.setupProfile = async ({ firstName = faker.faker.person.firstName(), lastName = faker.faker.person.lastName(), country, } = {}) => {
118708
+ if (IS_DEV_ENV)
118709
+ return;
118661
118710
  await this.neetoPlaywrightUtilities.waitForPageLoad();
118662
118711
  await this.page
118663
118712
  .getByTestId(SIGNUP_SELECTORS.firstNameTextField)
@@ -118675,36 +118724,62 @@ class OrganizationPage {
118675
118724
  });
118676
118725
  };
118677
118726
  this.loginAndOnboard = async ({ email, firstName, lastName, country, handleOnboarding, baseURL = process.env.BASE_URL, fetchOtpFromEmail, }) => {
118678
- await this.page.goto(`${baseURL}${ROUTES.admin}`, { timeout: 20000 });
118679
- fetchOtpFromEmail === undefined
118680
- ? await this.loginViaSSO(email)
118681
- : await this.loginWithFastmailEmail({ email, fetchOtpFromEmail });
118682
- await this.setupProfile({ firstName, lastName, country });
118683
- await this.page.waitForURL(new RegExp(getGlobalUserState().domain), {
118684
- waitUntil: "load",
118685
- });
118727
+ if (IS_DEV_ENV) {
118728
+ await fillCredentialsAndSubmit({
118729
+ page: this.page,
118730
+ email,
118731
+ loginPath: `${baseURL}${ROUTES.admin}`,
118732
+ });
118733
+ }
118734
+ else {
118735
+ await this.page.goto(`${baseURL}${ROUTES.admin}`, { timeout: 20000 });
118736
+ fetchOtpFromEmail === undefined
118737
+ ? await this.loginViaSSO(email)
118738
+ : await this.loginWithFastmailEmail({ email, fetchOtpFromEmail });
118739
+ await this.setupProfile({ firstName, lastName, country });
118740
+ await this.page.waitForURL(new RegExp(getGlobalUserState().domain), {
118741
+ waitUntil: "load",
118742
+ });
118743
+ }
118686
118744
  await handleOnboarding();
118687
118745
  };
118688
118746
  this.signUp = async ({ credentials, fetchOtpFromEmail, appName, }) => {
118689
- let otp = "123456";
118690
- await this.page.goto(`${ROUTES.neetoAuthSignup}?redirect_uri=${credentials.domain}`, { timeout: 20000 });
118691
- await this.submitEmail(credentials.email);
118692
- if (fetchOtpFromEmail !== undefined) {
118693
- otp = await fetchOtpFromEmail({
118747
+ if (IS_DEV_ENV) {
118748
+ await createOrganizationViaRake({
118749
+ email: credentials.email,
118750
+ firstName: credentials.firstName,
118751
+ lastName: credentials.lastName,
118752
+ subdomainName: credentials.subdomainName,
118753
+ });
118754
+ await fillCredentialsAndSubmit({
118755
+ page: this.page,
118694
118756
  email: credentials.email,
118695
- timeout: 4 * 60 * 1000,
118757
+ loginPath: `${baseURLGenerator(appName, credentials.subdomainName)}${ROUTES.admin}`,
118696
118758
  });
118697
118759
  }
118698
- await this.fillOTP(otp);
118699
- await this.fillOrganizationDetails({
118700
- credentials,
118701
- appName,
118702
- });
118703
- await this.page.waitForURL(new RegExp(credentials.domain));
118760
+ else {
118761
+ let otp = "123456";
118762
+ await this.page.goto(`${ROUTES.neetoAuthSignup}?redirect_uri=${credentials.domain}`, { timeout: 20000 });
118763
+ await this.submitEmail(credentials.email);
118764
+ if (fetchOtpFromEmail !== undefined) {
118765
+ otp = await fetchOtpFromEmail({
118766
+ email: credentials.email,
118767
+ timeout: 4 * 60 * 1000,
118768
+ });
118769
+ }
118770
+ await this.fillOTP(otp);
118771
+ await this.fillOrganizationDetails({
118772
+ credentials,
118773
+ appName,
118774
+ });
118775
+ await this.page.waitForURL(new RegExp(credentials.domain));
118776
+ }
118704
118777
  const STORAGE_STATE = await this.page.context().storageState();
118705
118778
  return { STORAGE_STATE, baseURL: process.env.BASE_URL };
118706
118779
  };
118707
118780
  this.fillOrganizationDetails = async ({ credentials, appName, }) => {
118781
+ if (IS_DEV_ENV)
118782
+ return;
118708
118783
  const subdomainError = this.page.getByTestId(SIGNUP_SELECTORS.subdomainError);
118709
118784
  const organizationSubmitButton = this.page.getByTestId(SIGNUP_SELECTORS.organizationSubmitButton);
118710
118785
  await this.neetoPlaywrightUtilities.waitForPageLoad();
@@ -119683,10 +119758,7 @@ const initializeCredentials = (product) => {
119683
119758
  }
119684
119759
  const stagingData = generateStagingData(product);
119685
119760
  writeDataToFile(JSON.stringify({ user: stagingData }, null, 2));
119686
- if (IS_STAGING_ENV) {
119687
- const baseUrl = `https://${stagingData.subdomainName}.${stagingData.domain}`;
119688
- process.env.BASE_URL = baseUrl;
119689
- }
119761
+ process.env.BASE_URL = baseURLGenerator(product, stagingData.subdomainName);
119690
119762
  };
119691
119763
 
119692
119764
  const assertColumnHeaderVisibility = async ({ page, columnName, shouldBeVisible, }) => {
@@ -124629,7 +124701,6 @@ const playdashLighthouseConfig = {
124629
124701
  tags: process.env.TAG,
124630
124702
  };
124631
124703
  const isCI = neetoCist.isPresent(process.env.NEETO_CI_JOB_ID);
124632
- const isDevEnv = process.env.TEST_ENV === ENVIRONMENT.development;
124633
124704
  const railsPort = process.env.RAILS_SERVER_PORT;
124634
124705
  const vitePort = process.env.VITE_PORT;
124635
124706
  const definePlaywrightConfig = (overrides) => {
@@ -124672,7 +124743,7 @@ const definePlaywrightConfig = (overrides) => {
124672
124743
  timeout: 5 * 60 * 1000,
124673
124744
  workers: isCI ? 6 : 5,
124674
124745
  reporter: isCI ? reporter : [["line"]],
124675
- ...(isDevEnv && {
124746
+ ...(IS_DEV_ENV && {
124676
124747
  webServer: [
124677
124748
  {
124678
124749
  command: `bundle exec puma -b tcp://0.0.0.0:${railsPort} -C config/puma.rb`,
@@ -124791,6 +124862,7 @@ exports.INTEGRATIONS_TEXTS = INTEGRATIONS_TEXTS;
124791
124862
  exports.INTEGRATION_SELECTORS = INTEGRATION_SELECTORS;
124792
124863
  exports.IPRestrictionsPage = IPRestrictionsPage;
124793
124864
  exports.IP_RESTRICTIONS_SELECTORS = IP_RESTRICTIONS_SELECTORS;
124865
+ exports.IS_DEV_ENV = IS_DEV_ENV;
124794
124866
  exports.IS_STAGING_ENV = IS_STAGING_ENV;
124795
124867
  exports.ImageUploader = ImageUploader;
124796
124868
  exports.IntegrationBase = IntegrationBase;
@@ -124876,12 +124948,14 @@ exports.basicHTMLContent = basicHTMLContent;
124876
124948
  exports.clearCredentials = clearCredentials;
124877
124949
  exports.commands = commands;
124878
124950
  exports.cpuThrottlingUsingCDP = cpuThrottlingUsingCDP;
124951
+ exports.createOrganizationViaRake = createOrganizationViaRake;
124879
124952
  exports.currencyUtils = currencyUtils;
124880
124953
  exports.dataQa = dataQa;
124881
124954
  exports.decodeQRCodeFromFile = decodeQRCodeFromFile;
124882
124955
  exports.definePlaywrightConfig = definePlaywrightConfig;
124883
124956
  exports.executeWithThrottledResources = executeWithThrottledResources;
124884
124957
  exports.extractSubdomainFromError = extractSubdomainFromError;
124958
+ exports.fillCredentialsAndSubmit = fillCredentialsAndSubmit;
124885
124959
  exports.filterUtils = filterUtils;
124886
124960
  exports.generatePhoneNumber = generatePhoneNumber;
124887
124961
  exports.generatePhoneNumberDetails = generatePhoneNumberDetails;