@bigbinary/neeto-playwright-commons 3.3.13 → 4.0.0

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.js CHANGED
@@ -4,16 +4,16 @@ import * as fs from 'fs';
4
4
  import fs__default, { readFileSync, promises, existsSync, writeFileSync, unlinkSync, mkdirSync, rmSync, createWriteStream } from 'fs';
5
5
  import os from 'os';
6
6
  import * as path from 'path';
7
- import path__default from 'path';
7
+ import path__default, { dirname } from 'path';
8
8
  import test, { expect, test as test$1, chromium as chromium$1, defineConfig, devices } from '@playwright/test';
9
9
  import { getI18nInstance, initI18n } from 'playwright-i18next-fixture';
10
10
  import { curry, isNotNil, not, isEmpty, pluck, mergeAll, isNil, mergeDeepLeft } from 'ramda';
11
11
  import { execSync, spawn } from 'child_process';
12
+ import require$$2$2, { fileURLToPath } from 'url';
12
13
  import dayjs from 'dayjs';
13
14
  import require$$1$3 from 'events';
14
15
  import require$$0$5 from 'assert';
15
16
  import require$$0$4 from 'util';
16
- import require$$2$2 from 'url';
17
17
  import require$$1$2 from 'tty';
18
18
  import require$$0$6 from 'stream';
19
19
  import require$$0$7 from 'crypto';
@@ -27,9 +27,9 @@ import require$$1$6 from 'node:stream';
27
27
  import require$$1$7 from 'zlib';
28
28
  import stealth$1 from 'puppeteer-extra-plugin-stealth';
29
29
  import { globSync } from 'node:fs';
30
- import customParseFormat from 'dayjs/plugin/customParseFormat';
31
- import timezone from 'dayjs/plugin/timezone';
32
- import utc from 'dayjs/plugin/utc';
30
+ import customParseFormat from 'dayjs/plugin/customParseFormat.js';
31
+ import timezone from 'dayjs/plugin/timezone.js';
32
+ import utc from 'dayjs/plugin/utc.js';
33
33
  import https from 'https';
34
34
  import * as http from 'http';
35
35
 
@@ -1150,6 +1150,7 @@ const readFileSyncIfExists = (path = STORAGE_STATE) => {
1150
1150
  return {};
1151
1151
  }
1152
1152
  };
1153
+ const getDirname = (metaUrl) => dirname(fileURLToPath(metaUrl));
1153
1154
  const getGlobalUserState = () => readFileSyncIfExists()?.user;
1154
1155
  const writeDataToFile = data => {
1155
1156
  try {
@@ -1979,12 +1980,14 @@ const generateRandomFile = ({ sizeInKB, fileType, fileName = `sample.${fileType}
1979
1980
  return { file, fileName };
1980
1981
  };
1981
1982
 
1983
+ const __dirname$6 = getDirname(import.meta.url);
1982
1984
  const getImagePathAndName = (localImagePath) => {
1983
- const imagePath = path__default.join(__dirname, localImagePath);
1985
+ const imagePath = path__default.join(__dirname$6, localImagePath);
1984
1986
  const imageName = path__default.basename(localImagePath, path__default.extname(localImagePath));
1985
1987
  return { imagePath, imageName };
1986
1988
  };
1987
1989
 
1990
+ const __dirname$5 = getDirname(import.meta.url);
1988
1991
  class CustomCommands {
1989
1992
  page;
1990
1993
  t;
@@ -2157,7 +2160,7 @@ class CustomCommands {
2157
2160
  await expect(this.page.getByTestId(NEETO_IMAGE_UPLOADER_SELECTORS.uploadedImage)).toHaveAttribute("src", new RegExp(imageName), { timeout: 20_000 });
2158
2161
  };
2159
2162
  uploadFileViaDispatch = async ({ fileNameWithType, assetsPath = "../../../e2e/assets/", dispatchEvent = "drop", droppableZone = this.page.getByTestId(COMMON_SELECTORS.fileUploadBody), }) => {
2160
- const filePath = path__default.join(__dirname, `${assetsPath}/${fileNameWithType}`);
2163
+ const filePath = path__default.join(__dirname$5, `${assetsPath}/${fileNameWithType}`);
2161
2164
  const buffer = readFileSync(filePath).toString("base64");
2162
2165
  const dataTransfer = await droppableZone.evaluateHandle((_, { buffer, fileNameWithType }) => {
2163
2166
  const dataTransfer = new DataTransfer();
@@ -119675,31 +119678,6 @@ class HelpAndProfilePage {
119675
119678
  })).toHaveScreenshot(expectedScreenshot, { maxDiffPixelRatio: 0.1 });
119676
119679
  });
119677
119680
  };
119678
- /**
119679
- * @deprecated This method is deprecated. Use updateBasicInfo instead.
119680
- */
119681
- updateProfile = async ({ firstName, lastName }) => {
119682
- await this.openHelpCenter();
119683
- await this.page
119684
- .getByTestId(PROFILE_SECTION_SELECTORS.myProfileButton)
119685
- .click();
119686
- await this.page
119687
- .getByTestId(COMMON_SELECTORS.pane)
119688
- .getByTestId(COMMON_SELECTORS.dropdownIcon)
119689
- .click();
119690
- await this.page.getByTestId(PROFILE_SECTION_SELECTORS.editBtn).click();
119691
- firstName &&
119692
- (await this.page
119693
- .getByTestId(PROFILE_SECTION_SELECTORS.firstNameTextField)
119694
- .fill(firstName));
119695
- lastName &&
119696
- (await this.page
119697
- .getByTestId(PROFILE_SECTION_SELECTORS.lastNameTextField)
119698
- .fill(lastName));
119699
- await this.page.getByTestId(PROFILE_SECTION_SELECTORS.submitButton).click();
119700
- await this.neetoPlaywrightUtilities.waitForPageLoad();
119701
- await expect(this.page.getByTestId(COMMON_SELECTORS.paneModalCrossIcon)).toBeHidden();
119702
- };
119703
119681
  }
119704
119682
 
119705
119683
  class MicrosoftPage extends IntegrationBase {
@@ -120030,32 +120008,6 @@ class SlackPage extends IntegrationBase {
120030
120008
  await nextButton.click();
120031
120009
  await this.slackWebappPageDataQa(SLACK_DATA_QA_SELECTORS.inviteToWorkspaceSkipButton).click();
120032
120010
  };
120033
- /**
120034
- * @deprecated Use {@link SlackPage.archiveChannelViaAPI} instead. This flow
120035
- * drives the Slack web UI to permanently delete a channel and is brittle;
120036
- * `archiveChannelViaAPI` archives via the Slack Web API (requires
120037
- * `SLACK_BOT_TOKEN`).
120038
- */
120039
- deleteSlackChannel = async (channel) => {
120040
- const channelItem = this.slackWebappPage.locator(SLACK_SELECTORS.channelItems, { hasText: channel });
120041
- await channelItem.click({ button: "right" });
120042
- await this.slackWebappPageDataQa([
120043
- SLACK_DATA_QA_SELECTORS.menuItems,
120044
- SLACK_DATA_QA_SELECTORS.channelDetailsModal,
120045
- ]).click();
120046
- await expect(this.slackWebappPageDataQa(SLACK_DATA_QA_SELECTORS.channelDetailsModal)).toBeVisible();
120047
- await this.slackWebappPageDataQa(SLACK_DATA_QA_SELECTORS.channelDetailsSettingsTab).click();
120048
- await this.slackWebappPageDataQa(SLACK_DATA_QA_SELECTORS.skModalContent)
120049
- .getByRole("button", { name: SLACK_WEB_TEXTS.deleteThisChannel })
120050
- .click();
120051
- await this.slackWebappPage
120052
- .getByLabel(SLACK_WEB_TEXTS.permanentlyDeleteTheChannel)
120053
- .check();
120054
- await this.slackWebappPage
120055
- .getByRole("button", { name: SLACK_WEB_TEXTS.deleteChannel })
120056
- .click();
120057
- await expect(channelItem).toBeHidden();
120058
- };
120059
120011
  archiveChannelViaAPI = async (name) => {
120060
120012
  const response = await this.slackApi.listChannels();
120061
120013
  const { channels } = (await response?.json());
@@ -120367,7 +120319,7 @@ class ZapierPage extends IntegrationBase {
120367
120319
  message: TOASTR_MESSAGES.zapierApiKeyGenerated,
120368
120320
  });
120369
120321
  await this.page.getByTestId(COMMON_SELECTORS.copyToClipboardButton).click();
120370
- const apiKey = await this.page.evaluate(() => navigator.clipboard.readText());
120322
+ const apiKey = await getClipboardContent(this.page);
120371
120323
  await this.verifyIntegrationStatus();
120372
120324
  return apiKey;
120373
120325
  };
@@ -120504,6 +120456,7 @@ const LIST_MODIFIER_TAGS = {
120504
120456
  orderedList: "ol",
120505
120457
  };
120506
120458
 
120459
+ const __dirname$4 = getDirname(import.meta.url);
120507
120460
  class SlashCommandEditorPage {
120508
120461
  page;
120509
120462
  neetoPlaywrightUtilities;
@@ -120623,7 +120576,7 @@ class SlashCommandEditorPage {
120623
120576
  .getByTestId(NEETO_IMAGE_UPLOADER_SELECTORS.browseText)
120624
120577
  .click();
120625
120578
  const fileUploader = await fileUploaderPromise;
120626
- const imagePath = path.join(__dirname, filePath);
120579
+ const imagePath = path.join(__dirname$4, filePath);
120627
120580
  await fileUploader.setFiles(imagePath);
120628
120581
  await expect(this.imageWrapper).toBeVisible({ timeout: 15_000 });
120629
120582
  if (shouldRemoveImage) {
@@ -120698,6 +120651,7 @@ class SlashCommandEditorPage {
120698
120651
  };
120699
120652
  }
120700
120653
 
120654
+ const __dirname$3 = getDirname(import.meta.url);
120701
120655
  class EditorPage {
120702
120656
  page;
120703
120657
  neetoPlaywrightUtilities;
@@ -120928,7 +120882,7 @@ class EditorPage {
120928
120882
  isButtonInMoreMenu && (await this.moreMenuSelector.click());
120929
120883
  await this.editorAttachmentsButton.click();
120930
120884
  const fileUploader = await fileUploaderPromise;
120931
- const imagePath = path.join(__dirname, filePath);
120885
+ const imagePath = path.join(__dirname$3, filePath);
120932
120886
  await fileUploader.setFiles(imagePath);
120933
120887
  await expect(this.attachmentPreview).toBeVisible();
120934
120888
  if (shouldRemoveAttachment) {
@@ -120954,7 +120908,7 @@ class EditorPage {
120954
120908
  .getByTestId(NEETO_IMAGE_UPLOADER_SELECTORS.browseText)
120955
120909
  .click();
120956
120910
  const fileUploader = await fileUploaderPromise;
120957
- const imagePath = path.join(__dirname, filePath);
120911
+ const imagePath = path.join(__dirname$3, filePath);
120958
120912
  await fileUploader.setFiles(imagePath);
120959
120913
  await expect(this.imageWrapper).toBeVisible({ timeout: 15_000 });
120960
120914
  if (shouldRemoveImage) {
@@ -121061,7 +121015,7 @@ class EditorPage {
121061
121015
  .getByTestId(NEETO_EDITOR_SELECTORS.imageUploadButton)
121062
121016
  .click();
121063
121017
  const fileUploader = await fileUploaderPromise;
121064
- const imagePath = path.join(__dirname, filePath);
121018
+ const imagePath = path.join(__dirname$3, filePath);
121065
121019
  await fileUploader.setFiles(imagePath);
121066
121020
  await expect(this.page.getByRole("figure")).toBeVisible({
121067
121021
  timeout: 20_000,
@@ -122645,12 +122599,8 @@ const PHONE_NUMBER_FORMATS = [
122645
122599
  const initializeCredentials = (product) => {
122646
122600
  if (process.env.SKIP_SETUP === "true" && getGlobalUserState()) {
122647
122601
  const { email } = getGlobalUserState();
122648
- if (IS_STAGING_ENV) {
122649
- email.endsWith("example.com") && removeCredentialFile();
122650
- }
122651
- else {
122652
- email.endsWith("bigbinary.com") && removeCredentialFile();
122653
- }
122602
+ const domain = IS_STAGING_ENV ? "example.com" : "bigbinary.com";
122603
+ email.endsWith(domain) && removeCredentialFile();
122654
122604
  readFileSyncIfExists();
122655
122605
  }
122656
122606
  isStagingOrganizationExpired(getGlobalUserState()?.subdomainName) &&
@@ -125815,10 +125765,8 @@ async function warmup({ urls = DEFAULT_WARMUP_URLS, timeout = 60_000, } = {}) {
125815
125765
  try {
125816
125766
  for (const url of urls) {
125817
125767
  const fullUrl = url.startsWith("http") ? url : `${baseURL}${url}`;
125818
- await page.goto(fullUrl, {
125819
- waitUntil: "networkidle", // eslint-disable-line playwright/no-networkidle
125820
- timeout,
125821
- });
125768
+ // eslint-disable-next-line playwright/no-networkidle
125769
+ await page.goto(fullUrl, { waitUntil: "networkidle", timeout });
125822
125770
  }
125823
125771
  }
125824
125772
  finally {
@@ -125833,7 +125781,8 @@ const CONFIG$1 = {
125833
125781
  MAX_WAIT_MS: 120_000,
125834
125782
  EMAIL_INIT: "/tmp/neeto-auth-web/config/initializers/playwright_email_capture.rb",
125835
125783
  };
125836
- const SCRIPTS_DIR$1 = path.join(__dirname, "scripts", "neeto-auth");
125784
+ const __dirname$2 = getDirname(import.meta.url);
125785
+ const SCRIPTS_DIR$1 = path.join(__dirname$2, "scripts", "neeto-auth");
125837
125786
  const escapeRubyString = (value) => value.replace(/\\/g, "\\\\").replace(/"/g, '\\"');
125838
125787
  const buildEmailCaptureInitializer = (targetApp) => {
125839
125788
  const template = fs.readFileSync(path.join(SCRIPTS_DIR$1, "playwright_email_capture.rb.template"), "utf-8");
@@ -125993,7 +125942,8 @@ const CONFIG = {
125993
125942
  };
125994
125943
  const DEFAULT_STATE = { pid: null, refCount: 0 };
125995
125944
  const WIDGET_BASE_URL = `http://localhost:${CONFIG.PORT}`;
125996
- const SCRIPTS_DIR = path.join(__dirname, "scripts", "neeto-chat-widget");
125945
+ const __dirname$1 = getDirname(import.meta.url);
125946
+ const SCRIPTS_DIR = path.join(__dirname$1, "scripts", "neeto-chat-widget");
125997
125947
  const log = (msg) => console.log(`[NeetoChatWidget] ${msg}`);
125998
125948
  const sleep = (ms) => new Promise(resolve => setTimeout(resolve, ms));
125999
125949
  const httpCheck = (timeout = 3000) => new Promise(resolve => {
@@ -126310,17 +126260,17 @@ class EmailDeliveryUtils {
126310
126260
  };
126311
126261
  }
126312
126262
 
126313
- var main$1 = {exports: {}};
126263
+ var main = {exports: {}};
126314
126264
 
126315
126265
  var version = "17.3.1";
126316
126266
  var require$$4 = {
126317
126267
  version: version};
126318
126268
 
126319
- var hasRequiredMain$1;
126269
+ var hasRequiredMain;
126320
126270
 
126321
- function requireMain$1 () {
126322
- if (hasRequiredMain$1) return main$1.exports;
126323
- hasRequiredMain$1 = 1;
126271
+ function requireMain () {
126272
+ if (hasRequiredMain) return main.exports;
126273
+ hasRequiredMain = 1;
126324
126274
  const fs = fs__default;
126325
126275
  const path = path__default;
126326
126276
  const os$1 = os;
@@ -126743,130 +126693,20 @@ function requireMain$1 () {
126743
126693
  populate
126744
126694
  };
126745
126695
 
126746
- main$1.exports.configDotenv = DotenvModule.configDotenv;
126747
- main$1.exports._configVault = DotenvModule._configVault;
126748
- main$1.exports._parseVault = DotenvModule._parseVault;
126749
- main$1.exports.config = DotenvModule.config;
126750
- main$1.exports.decrypt = DotenvModule.decrypt;
126751
- main$1.exports.parse = DotenvModule.parse;
126752
- main$1.exports.populate = DotenvModule.populate;
126753
-
126754
- main$1.exports = DotenvModule;
126755
- return main$1.exports;
126756
- }
126757
-
126758
- var mainExports$1 = requireMain$1();
126759
- var dotenv = /*@__PURE__*/getDefaultExportFromCjs(mainExports$1);
126760
-
126761
- var main = {};
126762
-
126763
- var hasRequiredMain;
126764
-
126765
- function requireMain () {
126766
- if (hasRequiredMain) return main;
126767
- hasRequiredMain = 1;
126768
-
126769
- function _resolveEscapeSequences (value) {
126770
- return value.replace(/\\\$/g, '$')
126771
- }
126772
-
126773
- function expandValue (value, processEnv, runningParsed) {
126774
- const env = { ...runningParsed, ...processEnv }; // process.env wins
126775
-
126776
- const regex = /(?<!\\)\${([^{}]+)}|(?<!\\)\$([A-Za-z_][A-Za-z0-9_]*)/g;
126777
-
126778
- let result = value;
126779
- let match;
126780
- const seen = new Set(); // self-referential checker
126781
-
126782
- while ((match = regex.exec(result)) !== null) {
126783
- seen.add(result);
126784
-
126785
- const [template, bracedExpression, unbracedExpression] = match;
126786
- const expression = bracedExpression || unbracedExpression;
126787
-
126788
- // match the operators `:+`, `+`, `:-`, and `-`
126789
- const opRegex = /(:\+|\+|:-|-)/;
126790
- // find first match
126791
- const opMatch = expression.match(opRegex);
126792
- const splitter = opMatch ? opMatch[0] : null;
126793
-
126794
- const r = expression.split(splitter);
126795
-
126796
- let defaultValue;
126797
- let value;
126798
-
126799
- const key = r.shift();
126800
-
126801
- if ([':+', '+'].includes(splitter)) {
126802
- defaultValue = env[key] ? r.join(splitter) : '';
126803
- value = null;
126804
- } else {
126805
- defaultValue = r.join(splitter);
126806
- value = env[key];
126807
- }
126808
-
126809
- if (value) {
126810
- // self-referential check
126811
- if (seen.has(value)) {
126812
- result = result.replace(template, defaultValue);
126813
- } else {
126814
- result = result.replace(template, value);
126815
- }
126816
- } else {
126817
- result = result.replace(template, defaultValue);
126818
- }
126819
-
126820
- // if the result equaled what was in process.env and runningParsed then stop expanding
126821
- if (result === runningParsed[key]) {
126822
- break
126823
- }
126824
-
126825
- regex.lastIndex = 0; // reset regex search position to re-evaluate after each replacement
126826
- }
126827
-
126828
- return result
126829
- }
126830
-
126831
- function expand (options) {
126832
- // for use with progressive expansion
126833
- const runningParsed = {};
126834
-
126835
- let processEnv = process.env;
126836
- if (options && options.processEnv != null) {
126837
- processEnv = options.processEnv;
126838
- }
126839
-
126840
- // dotenv.config() ran before this so the assumption is process.env has already been set
126841
- for (const key in options.parsed) {
126842
- let value = options.parsed[key];
126843
-
126844
- // short-circuit scenario: process.env was already set prior to the file value
126845
- if (processEnv[key] && processEnv[key] !== value) {
126846
- value = processEnv[key];
126847
- } else {
126848
- value = expandValue(value, processEnv, runningParsed);
126849
- }
126850
-
126851
- options.parsed[key] = _resolveEscapeSequences(value);
126852
-
126853
- // for use with progressive expansion
126854
- runningParsed[key] = _resolveEscapeSequences(value);
126855
- }
126856
-
126857
- for (const processKey in options.parsed) {
126858
- processEnv[processKey] = options.parsed[processKey];
126859
- }
126860
-
126861
- return options
126862
- }
126696
+ main.exports.configDotenv = DotenvModule.configDotenv;
126697
+ main.exports._configVault = DotenvModule._configVault;
126698
+ main.exports._parseVault = DotenvModule._parseVault;
126699
+ main.exports.config = DotenvModule.config;
126700
+ main.exports.decrypt = DotenvModule.decrypt;
126701
+ main.exports.parse = DotenvModule.parse;
126702
+ main.exports.populate = DotenvModule.populate;
126863
126703
 
126864
- main.expand = expand;
126865
- return main;
126704
+ main.exports = DotenvModule;
126705
+ return main.exports;
126866
126706
  }
126867
126707
 
126868
126708
  var mainExports = requireMain();
126869
- var dotenvExpand = /*@__PURE__*/getDefaultExportFromCjs(mainExports);
126709
+ var dotenv = /*@__PURE__*/getDefaultExportFromCjs(mainExports);
126870
126710
 
126871
126711
  const E2E_TEST_DIR = "e2e/tests";
126872
126712
  const LOG_PREFIX = "[playwright.config]";
@@ -126927,11 +126767,11 @@ const parseSpecPatterns = () => {
126927
126767
  };
126928
126768
 
126929
126769
  // @ts-check
126930
- const loadEnv = (path) => dotenvExpand.expand(dotenv.config({ path, quiet: true }));
126931
126770
  const envBasePath = "./e2e/config/.env";
126932
126771
  const envLocalPath = `${envBasePath}.local`;
126933
126772
  const reporterPackageName = "@bigbinary/neeto-playwright-reporter";
126934
126773
  process.env.TEST_ENV = process.env.TEST_ENV ?? ENVIRONMENT.development;
126774
+ const loadEnv = (path) => dotenv.config({ path, quiet: true });
126935
126775
  loadEnv(`${envBasePath}.${process.env.TEST_ENV}`);
126936
126776
  fs.existsSync(envLocalPath) && loadEnv(envLocalPath);
126937
126777
  const playdashStagingConfig = {
@@ -127135,5 +126975,4 @@ const definePlaywrightConfig = (overrides) => {
127135
126975
  });
127136
126976
  };
127137
126977
 
127138
- export { ACTIONS, ADMIN_PANEL_SELECTORS, ALL_RESOURCES, ANALYTICS_RESOURCES, API_KEYS_SELECTORS, API_ROUTES, APP_RESOURCES, 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, ColorPickerUtils, 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, EmailDeliveryUtils, EmbedBase, FILE_FORMATS, FONTS_RESOURCES, FONT_SIZE_SELECTORS, FROM_EMAIL_ENV_KEYS, 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_CI, 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, NeetoChatWidget, NeetoEmailDeliveryApi, NeetoTowerApi, ONBOARDING_SELECTORS, ORGANIZATION_TEXTS, OTP_EMAIL_PATTERN, OrganizationPage, PAST_TIME_RANGES, PHONE_NUMBER_FORMATS, PLURAL, PRODUCT_ROLES_ROUTE_MAP, 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_RESOURCES, 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, isStagingOrganizationExpired, joinHyphenCase, joinString, login, loginWithoutSSO, networkConditions, networkThrottlingUsingCDP, readFileSyncIfExists, removeCredentialFile, serializeFileForBrowser, shouldSkipCustomDomainSetup, shouldSkipSetupAndTeardown, simulateClickWithDelay, simulateTypingWithDelay, skipTest, squish, stealth as stealthTest, tableUtils, toCamelCase, updateCredentials, warmup, withCookieCache, writeDataToFile };
127139
- //# sourceMappingURL=index.js.map
126978
+ export { ACTIONS, ADMIN_PANEL_SELECTORS, ALL_RESOURCES, ANALYTICS_RESOURCES, API_KEYS_SELECTORS, API_ROUTES, APP_RESOURCES, 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, ColorPickerUtils, 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, EmailDeliveryUtils, EmbedBase, FILE_FORMATS, FONTS_RESOURCES, FONT_SIZE_SELECTORS, FROM_EMAIL_ENV_KEYS, 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_CI, 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, NeetoChatWidget, NeetoEmailDeliveryApi, NeetoTowerApi, ONBOARDING_SELECTORS, ORGANIZATION_TEXTS, OTP_EMAIL_PATTERN, OrganizationPage, PAST_TIME_RANGES, PHONE_NUMBER_FORMATS, PLURAL, PRODUCT_ROLES_ROUTE_MAP, 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_RESOURCES, 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, getDirname, getFormattedPhoneNumber, getFullUrl, getGlobalUserProps, getGlobalUserState, getImagePathAndName, getIsoCodeFromPhoneCode, getListCount, globalShortcuts, grantClipboardPermissions, hexToRGB, hexToRGBA, i18nFixture, imageRegex, initializeCredentials, initializeTestData, initializeTotp, isGithubIssueOpen, isStagingOrganizationExpired, joinHyphenCase, joinString, login, loginWithoutSSO, networkConditions, networkThrottlingUsingCDP, readFileSyncIfExists, removeCredentialFile, serializeFileForBrowser, shouldSkipCustomDomainSetup, shouldSkipSetupAndTeardown, simulateClickWithDelay, simulateTypingWithDelay, skipTest, squish, stealth as stealthTest, tableUtils, toCamelCase, updateCredentials, warmup, withCookieCache, writeDataToFile };
package/package.json CHANGED
@@ -1,12 +1,17 @@
1
1
  {
2
2
  "name": "@bigbinary/neeto-playwright-commons",
3
- "version": "3.3.13",
3
+ "version": "4.0.0",
4
4
  "description": "A package encapsulating common playwright code across neeto projects.",
5
5
  "repository": "git@github.com:bigbinary/neeto-playwright-commons.git",
6
6
  "license": "apache-2.0",
7
- "main": "./index.cjs.js",
8
- "module": "./index.js",
9
- "types": "./index.d.ts",
7
+ "type": "module",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./index.d.ts",
11
+ "import": "./index.js"
12
+ },
13
+ "./configs/*": "./configs/*"
14
+ },
10
15
  "scripts": {
11
16
  "prepare": "husky install",
12
17
  "build": "NODE_ENV=production tsc && rollup -c rollup.config.mjs && yarn build:jsdoc",
@@ -85,7 +90,6 @@
85
90
  "@bigbinary/neeto-commons-frontend": "^4.13.120",
86
91
  "countries-list": "^3.3.0",
87
92
  "dotenv": "17.3.1",
88
- "dotenv-expand": "12.0.3",
89
93
  "ioredis": "^5.4.1",
90
94
  "jimp": "1.6.0",
91
95
  "jsqr": "1.4.0",