@bigbinary/neeto-playwright-commons 2.1.4 → 2.2.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
@@ -1,31 +1,32 @@
1
1
  import { spawn, execSync } from 'child_process';
2
2
  import { keysToSnakeCase, hyphenate, isNotPresent, humanize, isPresent, dynamicArray, findBy, truncate, isNotEmpty, isNotEqualDeep, randomPick } from '@bigbinary/neeto-cist';
3
3
  import { faker } from '@faker-js/faker';
4
- import * as require$$0$3 from 'fs';
5
- import require$$0__default, { readFileSync, promises, existsSync, writeFileSync, unlinkSync } from 'fs';
6
- import require$$0$5 from 'os';
4
+ import * as fs$4 from 'fs';
5
+ import fs__default, { readFileSync, promises, existsSync, writeFileSync, unlinkSync } from 'fs';
6
+ import require$$0$4 from 'os';
7
7
  import * as path$1 from 'path';
8
8
  import path__default from 'path';
9
9
  import test, { expect, test as test$1, chromium as chromium$1, defineConfig, devices } from '@playwright/test';
10
10
  import { getI18nInstance, initI18n } from 'playwright-i18next-fixture';
11
- import require$$0$4 from 'util';
11
+ import require$$0$3 from 'util';
12
12
  import { curry, isNotNil, not, isEmpty, pluck, mergeAll, isNil, mergeDeepLeft } from 'ramda';
13
13
  import dayjs from 'dayjs';
14
- import require$$0$8 from 'stream';
15
- import require$$0$7 from 'node:buffer';
16
- import require$$0$6 from 'buffer';
14
+ import require$$0$7 from 'stream';
15
+ import require$$0$6 from 'node:buffer';
16
+ import require$$0$5 from 'buffer';
17
17
  import require$$1$2 from 'string_decoder';
18
18
  import require$$1$3 from 'node:stream';
19
- import require$$0$9 from 'crypto';
19
+ import require$$0$8 from 'crypto';
20
20
  import require$$1$4 from 'zlib';
21
- import require$$0$a from 'assert';
22
- import require$$0$b from 'tty';
21
+ import require$$0$9 from 'assert';
22
+ import require$$0$a from 'tty';
23
23
  import stealth$1 from 'puppeteer-extra-plugin-stealth';
24
24
  import require$$1$5 from 'events';
25
25
  import customParseFormat from 'dayjs/plugin/customParseFormat';
26
26
  import timezone from 'dayjs/plugin/timezone';
27
27
  import utc from 'dayjs/plugin/utc';
28
28
  import https from 'https';
29
+ import * as http from 'http';
29
30
 
30
31
  const BASE_URL = "/api/v1";
31
32
  const NEETO_AUTH_BASE_URL = (subdomain = "app") => `https://${subdomain}.neetoauth.net`;
@@ -668,7 +669,7 @@ var hasRequiredUtil_inspect;
668
669
  function requireUtil_inspect () {
669
670
  if (hasRequiredUtil_inspect) return util_inspect;
670
671
  hasRequiredUtil_inspect = 1;
671
- util_inspect = require$$0$4.inspect;
672
+ util_inspect = require$$0$3.inspect;
672
673
  return util_inspect;
673
674
  }
674
675
 
@@ -5074,7 +5075,7 @@ const joinString = (string1, string2, string3 = "", separator = " ") => {
5074
5075
  };
5075
5076
  const readFileSyncIfExists = (path = STORAGE_STATE) => {
5076
5077
  try {
5077
- return JSON.parse(require$$0$3.readFileSync(path, "utf8"));
5078
+ return JSON.parse(fs$4.readFileSync(path, "utf8"));
5078
5079
  }
5079
5080
  catch {
5080
5081
  return {};
@@ -5083,7 +5084,7 @@ const readFileSyncIfExists = (path = STORAGE_STATE) => {
5083
5084
  const getGlobalUserState = () => readFileSyncIfExists()?.user;
5084
5085
  const writeDataToFile = data => {
5085
5086
  try {
5086
- require$$0$3.writeFileSync(STORAGE_STATE, data, "utf8");
5087
+ fs$4.writeFileSync(STORAGE_STATE, data, "utf8");
5087
5088
  }
5088
5089
  catch (error) {
5089
5090
  console.log(error);
@@ -5096,7 +5097,7 @@ const updateCredentials = ({ key, value }) => {
5096
5097
  return writeDataToFile(JSON.stringify(data));
5097
5098
  };
5098
5099
  const removeCredentialFile = () => {
5099
- require$$0$3.unlink(STORAGE_STATE, error => {
5100
+ fs$4.unlink(STORAGE_STATE, error => {
5100
5101
  if (!error)
5101
5102
  return;
5102
5103
  console.log(error);
@@ -6246,17 +6247,14 @@ class CustomCommands {
6246
6247
  await expect(locator).toBeChecked({ checked: shouldBeChecked });
6247
6248
  }).toPass({ timeout: 15_000 });
6248
6249
  moveCursorAtBottom = async () => {
6249
- const platform = require$$0$5.platform();
6250
- if (platform === "darwin") {
6251
- await this.page.keyboard.press("Meta+ArrowRight");
6252
- await this.page.keyboard.press("Meta+ArrowDown");
6253
- }
6254
- else {
6255
- await this.page.keyboard.press("End");
6256
- await this.page.keyboard.press("PageDown");
6257
- }
6250
+ const isMacOS = require$$0$4.platform() === "darwin";
6251
+ const rightArrowKey = isMacOS ? "Meta+ArrowRight" : "End";
6252
+ const downArrowKey = isMacOS ? "Meta+ArrowDown" : "PageDown";
6253
+ await this.page.keyboard.press(rightArrowKey);
6254
+ await this.page.keyboard.press(rightArrowKey);
6255
+ await this.page.keyboard.press(downArrowKey);
6258
6256
  // eslint-disable-next-line playwright/no-wait-for-timeout
6259
- await this.page.waitForTimeout(100); // Adding some delay for DOM to react
6257
+ await this.page.waitForTimeout(150); // Adding some delay for DOM to react
6260
6258
  await this.page.keyboard.press("Enter");
6261
6259
  };
6262
6260
  }
@@ -8890,7 +8888,7 @@ function requireSafer () {
8890
8888
  if (hasRequiredSafer) return safer_1;
8891
8889
  hasRequiredSafer = 1;
8892
8890
 
8893
- var buffer = require$$0$6;
8891
+ var buffer = require$$0$5;
8894
8892
  var Buffer = buffer.Buffer;
8895
8893
 
8896
8894
  var safer = {};
@@ -26585,7 +26583,7 @@ function requireCharset () {
26585
26583
  if (hasRequiredCharset) return charset.exports;
26586
26584
  hasRequiredCharset = 1;
26587
26585
 
26588
- const { Buffer } = require$$0$7;
26586
+ const { Buffer } = require$$0$6;
26589
26587
  const iconv = requireLib$b();
26590
26588
  const encodingJapanese = requireSrc$2();
26591
26589
  const charsets = requireCharsets();
@@ -26711,7 +26709,7 @@ function requireLibbase64 () {
26711
26709
  if (hasRequiredLibbase64) return libbase64;
26712
26710
  hasRequiredLibbase64 = 1;
26713
26711
 
26714
- const { Buffer } = require$$0$7;
26712
+ const { Buffer } = require$$0$6;
26715
26713
  const stream = require$$1$3;
26716
26714
  const Transform = stream.Transform;
26717
26715
 
@@ -26972,7 +26970,7 @@ function requireLibqp () {
26972
26970
  if (hasRequiredLibqp) return libqp;
26973
26971
  hasRequiredLibqp = 1;
26974
26972
 
26975
- const { Buffer } = require$$0$7;
26973
+ const { Buffer } = require$$0$6;
26976
26974
  const stream = require$$1$3;
26977
26975
  const Transform = stream.Transform;
26978
26976
 
@@ -29347,7 +29345,7 @@ function requireLibmime () {
29347
29345
  if (hasRequiredLibmime) return libmime.exports;
29348
29346
  hasRequiredLibmime = 1;
29349
29347
 
29350
- const { Buffer } = require$$0$7;
29348
+ const { Buffer } = require$$0$6;
29351
29349
  const libcharset = requireCharset();
29352
29350
  const libbase64 = requireLibbase64();
29353
29351
  const libqp = requireLibqp();
@@ -30528,7 +30526,7 @@ function requireMimeNode () {
30528
30526
  const libmime = requireLibmime();
30529
30527
  const libqp = requireLibqp();
30530
30528
  const libbase64 = requireLibbase64();
30531
- const PassThrough = require$$0$8.PassThrough;
30529
+ const PassThrough = require$$0$7.PassThrough;
30532
30530
  const pathlib = path__default;
30533
30531
 
30534
30532
  class MimeNode {
@@ -30797,7 +30795,7 @@ function requireMessageSplitter () {
30797
30795
  if (hasRequiredMessageSplitter) return messageSplitter;
30798
30796
  hasRequiredMessageSplitter = 1;
30799
30797
 
30800
- const Transform = require$$0$8.Transform;
30798
+ const Transform = require$$0$7.Transform;
30801
30799
  const MimeNode = requireMimeNode();
30802
30800
 
30803
30801
  const MAX_HEAD_SIZE = 1 * 1024 * 1024;
@@ -31227,7 +31225,7 @@ function requireMessageJoiner () {
31227
31225
  if (hasRequiredMessageJoiner) return messageJoiner;
31228
31226
  hasRequiredMessageJoiner = 1;
31229
31227
 
31230
- const Transform = require$$0$8.Transform;
31228
+ const Transform = require$$0$7.Transform;
31231
31229
 
31232
31230
  class MessageJoiner extends Transform {
31233
31231
  constructor() {
@@ -31267,7 +31265,7 @@ function requireFlowedDecoder () {
31267
31265
 
31268
31266
  // Helper class to rewrite nodes with specific mime type
31269
31267
 
31270
- const Transform = require$$0$8.Transform;
31268
+ const Transform = require$$0$7.Transform;
31271
31269
  const libmime = requireLibmime();
31272
31270
 
31273
31271
  /**
@@ -31330,7 +31328,7 @@ function requireNodeRewriter () {
31330
31328
 
31331
31329
  // Helper class to rewrite nodes with specific mime type
31332
31330
 
31333
- const Transform = require$$0$8.Transform;
31331
+ const Transform = require$$0$7.Transform;
31334
31332
  const FlowedDecoder = requireFlowedDecoder();
31335
31333
 
31336
31334
  /**
@@ -31532,7 +31530,7 @@ function requireNodeStreamer () {
31532
31530
 
31533
31531
  // Helper class to rewrite nodes with specific mime type
31534
31532
 
31535
- const Transform = require$$0$8.Transform;
31533
+ const Transform = require$$0$7.Transform;
31536
31534
  const FlowedDecoder = requireFlowedDecoder();
31537
31535
 
31538
31536
  /**
@@ -31659,7 +31657,7 @@ function requireChunkedPassthrough () {
31659
31657
  if (hasRequiredChunkedPassthrough) return chunkedPassthrough;
31660
31658
  hasRequiredChunkedPassthrough = 1;
31661
31659
 
31662
- const { Transform } = require$$0$8;
31660
+ const { Transform } = require$$0$7;
31663
31661
 
31664
31662
  class ChunkedPassthrough extends Transform {
31665
31663
  constructor(options = {}) {
@@ -32585,8 +32583,8 @@ function requireStreamHash () {
32585
32583
  if (hasRequiredStreamHash) return streamHash;
32586
32584
  hasRequiredStreamHash = 1;
32587
32585
 
32588
- const crypto = require$$0$9;
32589
- const Transform = require$$0$8.Transform;
32586
+ const crypto = require$$0$8;
32587
+ const Transform = require$$0$7.Transform;
32590
32588
 
32591
32589
  class StreamHash extends Transform {
32592
32590
  constructor(attachment, algo) {
@@ -54969,7 +54967,7 @@ function requireMailParser () {
54969
54967
  const mailsplit = requireMailsplit();
54970
54968
  const libmime = requireLibmime();
54971
54969
  const addressparser = requireAddressparser();
54972
- const Transform = require$$0$8.Transform;
54970
+ const Transform = require$$0$7.Transform;
54973
54971
  const Splitter = mailsplit.Splitter;
54974
54972
  const ChunkedPassthrough = mailsplit.ChunkedPassthrough;
54975
54973
  const punycode = require$$4$2;
@@ -60603,9 +60601,7 @@ class MailerUtils {
60603
60601
  const { html: { codes }, } = await this.findMessage({ to: email, subject: subjectSubstring }, { timeout, receivedAfter, expectedEmailCount });
60604
60602
  return codes?.[0];
60605
60603
  };
60606
- generateRandomEmail = (shouldUseBypassEmail = false) => shouldUseBypassEmail
60607
- ? generateRandomBypassEmail()
60608
- : faker.internet.email({ provider: process.env.FASTMAIL_DOMAIN_NAME });
60604
+ generateRandomEmail = () => faker.internet.email({ provider: process.env.FASTMAIL_DOMAIN_NAME });
60609
60605
  getEmailAttachment = async (attachmentName, messageSearchCriteria = {}, { timeout = 10_000, receivedAfter = dateTimeOneHourAgo(), expectedEmailCount = 1, } = {}, shouldThrowErrorOnTimeout = true) => {
60610
60606
  if (IS_DEV_ENV) {
60611
60607
  return this.railsEmailUtils.getEmailAttachment(attachmentName, messageSearchCriteria, { receivedAfter, expectedEmailCount, timeout: timeout / 3 }, shouldThrowErrorOnTimeout);
@@ -66989,7 +66985,7 @@ function requireGifutil () {
66989
66985
 
66990
66986
  /** @namespace GifUtil */
66991
66987
 
66992
- const fs = require$$0__default;
66988
+ const fs = fs__default;
66993
66989
  const ImageQ = requireImageQ();
66994
66990
 
66995
66991
  const BitmapImage = requireBitmapimage();
@@ -69805,8 +69801,8 @@ function requireChunkstream () {
69805
69801
  if (hasRequiredChunkstream) return chunkstream.exports;
69806
69802
  hasRequiredChunkstream = 1;
69807
69803
 
69808
- let util = require$$0$4;
69809
- let Stream = require$$0$8;
69804
+ let util = require$$0$3;
69805
+ let Stream = require$$0$7;
69810
69806
 
69811
69807
  let ChunkStream = (chunkstream.exports = function () {
69812
69808
  Stream.call(this);
@@ -70317,7 +70313,7 @@ function requireFilterParseAsync () {
70317
70313
  if (hasRequiredFilterParseAsync) return filterParseAsync.exports;
70318
70314
  hasRequiredFilterParseAsync = 1;
70319
70315
 
70320
- let util = require$$0$4;
70316
+ let util = require$$0$3;
70321
70317
  let ChunkStream = requireChunkstream();
70322
70318
  let Filter = requireFilterParse();
70323
70319
 
@@ -71113,7 +71109,7 @@ function requireParserAsync () {
71113
71109
  if (hasRequiredParserAsync) return parserAsync.exports;
71114
71110
  hasRequiredParserAsync = 1;
71115
71111
 
71116
- let util = require$$0$4;
71112
+ let util = require$$0$3;
71117
71113
  let zlib = require$$1$4;
71118
71114
  let ChunkStream = requireChunkstream();
71119
71115
  let FilterAsync = requireFilterParseAsync();
@@ -71774,8 +71770,8 @@ function requirePackerAsync () {
71774
71770
  if (hasRequiredPackerAsync) return packerAsync.exports;
71775
71771
  hasRequiredPackerAsync = 1;
71776
71772
 
71777
- let util = require$$0$4;
71778
- let Stream = require$$0$8;
71773
+ let util = require$$0$3;
71774
+ let Stream = require$$0$7;
71779
71775
  let constants = requireConstants$4();
71780
71776
  let Packer = requirePacker();
71781
71777
 
@@ -71836,11 +71832,11 @@ function requireSyncInflate () {
71836
71832
  hasRequiredSyncInflate = 1;
71837
71833
  (function (module, exports$1) {
71838
71834
 
71839
- let assert = require$$0$a.ok;
71835
+ let assert = require$$0$9.ok;
71840
71836
  let zlib = require$$1$4;
71841
- let util = require$$0$4;
71837
+ let util = require$$0$3;
71842
71838
 
71843
- let kMaxLength = require$$0$6.kMaxLength;
71839
+ let kMaxLength = require$$0$5.kMaxLength;
71844
71840
 
71845
71841
  function Inflate(opts) {
71846
71842
  if (!(this instanceof Inflate)) {
@@ -72296,8 +72292,8 @@ function requirePng () {
72296
72292
  if (hasRequiredPng) return png$1;
72297
72293
  hasRequiredPng = 1;
72298
72294
 
72299
- let util = require$$0$4;
72300
- let Stream = require$$0$8;
72295
+ let util = require$$0$3;
72296
+ let Stream = require$$0$7;
72301
72297
  let Parser = requireParserAsync();
72302
72298
  let Packer = requirePackerAsync();
72303
72299
  let PNGSync = requirePngSync();
@@ -108024,7 +108020,7 @@ var hasRequiredSupportsColor;
108024
108020
  function requireSupportsColor () {
108025
108021
  if (hasRequiredSupportsColor) return supportsColor_1;
108026
108022
  hasRequiredSupportsColor = 1;
108027
- const os = require$$0$5;
108023
+ const os = require$$0$4;
108028
108024
  const hasFlag = requireHasFlag();
108029
108025
 
108030
108026
  const env = process.env;
@@ -108167,8 +108163,8 @@ function requireNode () {
108167
108163
  if (hasRequiredNode) return node.exports;
108168
108164
  hasRequiredNode = 1;
108169
108165
  (function (module, exports$1) {
108170
- const tty = require$$0$b;
108171
- const util = require$$0$4;
108166
+ const tty = require$$0$a;
108167
+ const util = require$$0$3;
108172
108168
 
108173
108169
  /**
108174
108170
  * This is the Node.js implementation of `debug()`.
@@ -109494,7 +109490,7 @@ function requirePath () {
109494
109490
  hasRequiredPath = 1;
109495
109491
  Object.defineProperty(path, "__esModule", { value: true });
109496
109492
  path.convertPosixPathToPattern = path.convertWindowsPathToPattern = path.convertPathToPattern = path.escapePosixPath = path.escapeWindowsPath = path.escape = path.removeLeadingDotSegment = path.makeAbsolute = path.unixify = void 0;
109497
- const os = require$$0$5;
109493
+ const os = require$$0$4;
109498
109494
  const path$1 = path__default;
109499
109495
  const IS_WINDOWS_PLATFORM = os.platform() === 'win32';
109500
109496
  const LEADING_DOT_SEGMENT_CHARACTERS_COUNT = 2; // ./ or .\\
@@ -109761,7 +109757,7 @@ function requireGlobParent () {
109761
109757
 
109762
109758
  var isGlob = requireIsGlob();
109763
109759
  var pathPosixDirname = path__default.posix.dirname;
109764
- var isWin32 = require$$0$5.platform() === 'win32';
109760
+ var isWin32 = require$$0$4.platform() === 'win32';
109765
109761
 
109766
109762
  var slash = '/';
109767
109763
  var backslash = /\\/g;
@@ -110310,7 +110306,7 @@ function requireFillRange () {
110310
110306
  if (hasRequiredFillRange) return fillRange;
110311
110307
  hasRequiredFillRange = 1;
110312
110308
 
110313
- const util = require$$0$4;
110309
+ const util = require$$0$3;
110314
110310
  const toRegexRange = requireToRegexRange();
110315
110311
 
110316
110312
  const isObject = val => val !== null && typeof val === 'object' && !Array.isArray(val);
@@ -113451,7 +113447,7 @@ function requireMicromatch () {
113451
113447
  if (hasRequiredMicromatch) return micromatch_1;
113452
113448
  hasRequiredMicromatch = 1;
113453
113449
 
113454
- const util = require$$0$4;
113450
+ const util = require$$0$3;
113455
113451
  const braces = requireBraces();
113456
113452
  const picomatch = requirePicomatch();
113457
113453
  const utils = requireUtils$2();
@@ -114154,7 +114150,7 @@ function requireMerge2 () {
114154
114150
  * Copyright (c) 2014-2020 Teambition
114155
114151
  * Licensed under the MIT license.
114156
114152
  */
114157
- const Stream = require$$0$8;
114153
+ const Stream = require$$0$7;
114158
114154
  const PassThrough = Stream.PassThrough;
114159
114155
  const slice = Array.prototype.slice;
114160
114156
 
@@ -114583,7 +114579,7 @@ function requireFs$2 () {
114583
114579
  (function (exports$1) {
114584
114580
  Object.defineProperty(exports$1, "__esModule", { value: true });
114585
114581
  exports$1.createFileSystemAdapter = exports$1.FILE_SYSTEM_ADAPTER = void 0;
114586
- const fs = require$$0__default;
114582
+ const fs = fs__default;
114587
114583
  exports$1.FILE_SYSTEM_ADAPTER = {
114588
114584
  lstat: fs.lstat,
114589
114585
  stat: fs.stat,
@@ -115013,7 +115009,7 @@ function requireFs () {
115013
115009
  (function (exports$1) {
115014
115010
  Object.defineProperty(exports$1, "__esModule", { value: true });
115015
115011
  exports$1.createFileSystemAdapter = exports$1.FILE_SYSTEM_ADAPTER = void 0;
115016
- const fs = require$$0__default;
115012
+ const fs = fs__default;
115017
115013
  exports$1.FILE_SYSTEM_ADAPTER = {
115018
115014
  lstat: fs.lstat,
115019
115015
  stat: fs.stat,
@@ -115646,7 +115642,7 @@ function requireStream$2 () {
115646
115642
  if (hasRequiredStream$2) return stream$2;
115647
115643
  hasRequiredStream$2 = 1;
115648
115644
  Object.defineProperty(stream$2, "__esModule", { value: true });
115649
- const stream_1 = require$$0$8;
115645
+ const stream_1 = require$$0$7;
115650
115646
  const async_1 = requireAsync$3();
115651
115647
  class StreamProvider {
115652
115648
  constructor(_root, _settings) {
@@ -115898,7 +115894,7 @@ function requireStream$1 () {
115898
115894
  if (hasRequiredStream$1) return stream$1;
115899
115895
  hasRequiredStream$1 = 1;
115900
115896
  Object.defineProperty(stream$1, "__esModule", { value: true });
115901
- const stream_1 = require$$0$8;
115897
+ const stream_1 = require$$0$7;
115902
115898
  const fsStat = requireOut$3();
115903
115899
  const fsWalk = requireOut$1();
115904
115900
  const reader_1 = requireReader();
@@ -116416,7 +116412,7 @@ function requireStream () {
116416
116412
  if (hasRequiredStream) return stream;
116417
116413
  hasRequiredStream = 1;
116418
116414
  Object.defineProperty(stream, "__esModule", { value: true });
116419
- const stream_1 = require$$0$8;
116415
+ const stream_1 = require$$0$7;
116420
116416
  const stream_2 = requireStream$1();
116421
116417
  const provider_1 = requireProvider();
116422
116418
  class ProviderStream extends provider_1.default {
@@ -116542,8 +116538,8 @@ function requireSettings () {
116542
116538
  (function (exports$1) {
116543
116539
  Object.defineProperty(exports$1, "__esModule", { value: true });
116544
116540
  exports$1.DEFAULT_FILE_SYSTEM_ADAPTER = void 0;
116545
- const fs = require$$0__default;
116546
- const os = require$$0$5;
116541
+ const fs = fs__default;
116542
+ const os = require$$0$4;
116547
116543
  /**
116548
116544
  * The `os.cpus` method can return zero. We expect the number of cores to be greater than zero.
116549
116545
  * https://github.com/nodejs/node/blob/7faeddf23a98c53896f8b574a6e66589e8fb1eb8/lib/os.js#L106-L107
@@ -118856,7 +118852,7 @@ class HelpAndProfilePage {
118856
118852
  expect(bodyElement).not.toHaveClass(THEMES_TEXTS.lightThemeClass),
118857
118853
  ]);
118858
118854
  await expect(this.page.getByTestId(COMMON_SELECTORS.dropdownContainer).filter({
118859
- has: this.page.getByTestId(PROFILE_SECTION_SELECTORS.myProfileButton),
118855
+ has: this.page.getByTestId(PROFILE_SECTION_SELECTORS.profileExpandMenuBtn),
118860
118856
  })).toHaveScreenshot(expectedScreenshot, { maxDiffPixelRatio: 0.1 });
118861
118857
  });
118862
118858
  };
@@ -119879,7 +119875,7 @@ class EditorPage {
119879
119875
  calloutSelector;
119880
119876
  videoUploadOption;
119881
119877
  todoListSelector;
119882
- filePath = "../../../e2e/assets/images/BigBinary.png";
119878
+ filePath = "../../../e2e/assets/images/sample.png";
119883
119879
  videoPath = "../../../e2e/assets/files/sample.mp4";
119884
119880
  linkUrl = faker.internet.url();
119885
119881
  imageUrl = "https://picsum.photos/200/300";
@@ -119944,10 +119940,9 @@ class EditorPage {
119944
119940
  };
119945
119941
  verifyFontSize = async () => {
119946
119942
  const fontsAndTexts = [];
119947
- const fontSizeDropdownButton = this.page.getByTestId(NEETO_EDITOR_SELECTORS.neetoEditorFixedMenuFontSize);
119948
- await this.contentField.focus();
119949
- await this.contentField.press("Enter");
119950
- await fontSizeDropdownButton.click();
119943
+ await this.page
119944
+ .getByTestId(NEETO_EDITOR_SELECTORS.neetoEditorFixedMenuFontSize)
119945
+ .click();
119951
119946
  const headingButtons = await this.page
119952
119947
  .getByTestId(COMMON_SELECTORS.dropdownContainer)
119953
119948
  .getByRole("button")
@@ -119969,10 +119964,7 @@ class EditorPage {
119969
119964
  level: Number(headingLevel?.slice(1)),
119970
119965
  name: randomText,
119971
119966
  })).toBeVisible();
119972
- fontsAndTexts.push({
119973
- key: fontKey,
119974
- value: randomText,
119975
- });
119967
+ fontsAndTexts.push({ key: fontKey, value: randomText });
119976
119968
  }
119977
119969
  return fontsAndTexts;
119978
119970
  };
@@ -120015,18 +120007,13 @@ class EditorPage {
120015
120007
  .click();
120016
120008
  await expect(this.page.getByTestId(COMMON_SELECTORS.customDropdownContainer())).toBeVisible({ timeout: 5_000 });
120017
120009
  }).toPass({ timeout: 30_000 });
120018
- focusText = (textLocator) => {
120019
- const platform = require$$0$5.platform();
120020
- return expect(async () => {
120021
- await textLocator.click();
120022
- platform === "darwin"
120023
- ? await this.page.keyboard.press("Meta+ArrowRight")
120024
- : await this.page.keyboard.press("End");
120025
- await expect(textLocator.locator("..")).toHaveClass(/has-focus/, {
120026
- timeout: 5_000,
120027
- });
120028
- }).toPass({ timeout: 20_000 });
120029
- };
120010
+ focusText = (textLocator) => expect(async () => {
120011
+ await textLocator.click();
120012
+ await this.page.keyboard.press(require$$0$4.platform() === "darwin" ? "Meta+ArrowRight" : "End");
120013
+ await expect(textLocator.locator("..")).toHaveClass(/has-focus/, {
120014
+ timeout: 5_000,
120015
+ });
120016
+ }).toPass({ timeout: 20_000 });
120030
120017
  highlightText = async (isButtonInMoreMenu, colorIndex) => {
120031
120018
  const randomText = await this.fillRandomText();
120032
120019
  await this.openHighlighterContainer(isButtonInMoreMenu);
@@ -120125,9 +120112,7 @@ class EditorPage {
120125
120112
  .getByTestId(COMMON_SELECTORS.dropdownIcon)
120126
120113
  .click();
120127
120114
  await this.uploadDeleteButton.click();
120128
- await expect(this.imageWrapper).toBeHidden({
120129
- timeout: 15_000,
120130
- });
120115
+ await expect(this.imageWrapper).toBeHidden({ timeout: 15_000 });
120131
120116
  }
120132
120117
  return [{ key: "image-upload", value: imagePath }];
120133
120118
  };
@@ -120173,9 +120158,7 @@ class EditorPage {
120173
120158
  isButtonInMoreMenu && (await this.moreMenuSelector.click());
120174
120159
  await this.emojiSelector.click();
120175
120160
  const emojiContainer = this.page.getByTestId(NEETO_EDITOR_SELECTORS.emojiContainer);
120176
- await expect(emojiContainer).toBeVisible({
120177
- timeout: 10_000,
120178
- });
120161
+ await expect(emojiContainer).toBeVisible({ timeout: 10_000 });
120179
120162
  await emojiContainer
120180
120163
  .getByPlaceholder(DESCRIPTION_EDITOR_TEXTS.search)
120181
120164
  .fill(EMOJI_LABEL);
@@ -120239,9 +120222,7 @@ class EditorPage {
120239
120222
  .getByTestId(COMMON_SELECTORS.dropdownIcon)
120240
120223
  .click();
120241
120224
  await this.uploadDeleteButton.click();
120242
- await expect(this.imageWrapper).toBeHidden({
120243
- timeout: 15_000,
120244
- });
120225
+ await expect(this.imageWrapper).toBeHidden({ timeout: 15_000 });
120245
120226
  }
120246
120227
  return [{ key: "video-upload", value: this.videoPath }];
120247
120228
  };
@@ -120334,9 +120315,44 @@ class EditorPage {
120334
120315
  this.wordsUsedInEditor.push(randomText);
120335
120316
  const randomTextLocator = this.contentField.getByText(randomText);
120336
120317
  await randomTextLocator.scrollIntoViewIfNeeded();
120337
- await randomTextLocator.click({ clickCount: 3 });
120318
+ const box = await randomTextLocator.boundingBox();
120319
+ await randomTextLocator.click({
120320
+ clickCount: 3,
120321
+ ...(box && { position: { x: box.width * 0.99, y: box.height / 2 } }),
120322
+ });
120338
120323
  return randomText;
120339
120324
  };
120325
+ verifyDescriptionPreview = (previewLocator, keyValuePairs) => Promise.all(keyValuePairs.flatMap(({ key, value }) => {
120326
+ const elementReplacement = {
120327
+ bold: "strong",
120328
+ italic: "em",
120329
+ underline: "u",
120330
+ link: "a",
120331
+ strike: "s",
120332
+ bulletList: "ul li",
120333
+ orderedList: "ol li",
120334
+ codeBlock: "pre",
120335
+ emoji: "span",
120336
+ };
120337
+ if (key.includes("highlight")) {
120338
+ const highlightIndex = key.split("-")[1];
120339
+ return expect(previewLocator.locator(`span[style*="background-color: var(${NEETO_EDITOR_SELECTORS.highlightBg(Number(highlightIndex))})"][style*="color: var(${NEETO_EDITOR_SELECTORS.highlightText(Number(highlightIndex))})"]`, { hasText: value })).toBeVisible();
120340
+ }
120341
+ if (key === "todoList") {
120342
+ return expect(previewLocator.locator(NEETO_EDITOR_SELECTORS.todoList, {
120343
+ hasText: value,
120344
+ })).toBeVisible();
120345
+ }
120346
+ const replacement = elementReplacement?.[key] ?? key;
120347
+ if (value === undefined) {
120348
+ return expect(
120349
+ // eslint-disable-next-line playwright/no-nth-methods
120350
+ previewLocator.locator(replacement).first()).toBeVisible();
120351
+ }
120352
+ return expect(previewLocator.locator(key === "image-upload"
120353
+ ? `img[src*="sample"]`
120354
+ : `${replacement}:has-text("${value}")`)).toBeVisible();
120355
+ }));
120340
120356
  verifyDescriptionEditor = async ({ dynamicVariables, linkUrl, videoPath, filePath, imageUrl, videoUrl, highlighterCount, cannedResponseSuccessMessage, } = {}) => {
120341
120357
  this.linkUrl = linkUrl || this.linkUrl;
120342
120358
  this.filePath = filePath || this.filePath;
@@ -124933,6 +124949,160 @@ const generatePhoneNumberDetails = () => {
124933
124949
  return { flag: country.flag, name: country.name, code: country.code, number };
124934
124950
  };
124935
124951
 
124952
+ const CONFIG = {
124953
+ DIR: "/tmp/neeto-auth-web",
124954
+ LOG: "/tmp/neeto-auth-server.log",
124955
+ PORT: 9000,
124956
+ MAX_WAIT_MS: 120_000,
124957
+ EMAIL_INIT: "/tmp/neeto-auth-web/config/initializers/playwright_email_capture.rb",
124958
+ };
124959
+ const SCRIPTS_DIR = path$1.join(__dirname, "scripts", "neeto-auth");
124960
+ const escapeRubyString = (value) => value.replace(/\\/g, "\\\\").replace(/"/g, '\\"');
124961
+ const buildEmailCaptureInitializer = (targetApp) => {
124962
+ const template = fs$4.readFileSync(path$1.join(SCRIPTS_DIR, "playwright_email_capture.rb.template"), "utf-8");
124963
+ return template.replace("{{TARGET_APP}}", escapeRubyString(targetApp));
124964
+ };
124965
+ const log = (msg) => console.log(`[NeetoAuth] ${msg}`);
124966
+ const sleep = (ms) => new Promise(resolve => setTimeout(resolve, ms));
124967
+ const httpCheck = (port, timeout = 3000) => new Promise(resolve => {
124968
+ const req = http.get(`http://localhost:${port}/`, () => resolve(true));
124969
+ req.on("error", () => resolve(false));
124970
+ req.setTimeout(timeout, () => {
124971
+ req.destroy();
124972
+ resolve(false);
124973
+ });
124974
+ });
124975
+ class NeetoAuthServer {
124976
+ process = null;
124977
+ targetApp;
124978
+ constructor(appName) {
124979
+ this.targetApp = STATUS_TEXTS.appName(appName);
124980
+ }
124981
+ get serverEnv() {
124982
+ return {
124983
+ ...process.env,
124984
+ BUNDLE_PATH: undefined,
124985
+ RAILS_ENV: "development",
124986
+ POSTGRES_USER: process.env.POSTGRES_USER ?? process.env.USER ?? "postgres",
124987
+ };
124988
+ }
124989
+ waitForProcessExit = async (pid) => {
124990
+ const deadline = Date.now() + 10_000;
124991
+ while (Date.now() < deadline) {
124992
+ try {
124993
+ process.kill(pid, 0);
124994
+ await sleep(500);
124995
+ }
124996
+ catch {
124997
+ return;
124998
+ }
124999
+ }
125000
+ };
125001
+ killServerOnPort = async () => {
125002
+ try {
125003
+ execSync(`lsof -ti tcp:${CONFIG.PORT} | xargs kill -9`, {
125004
+ stdio: "ignore",
125005
+ });
125006
+ await sleep(1000);
125007
+ }
125008
+ catch {
125009
+ // No process on that port — nothing to kill.
125010
+ }
125011
+ };
125012
+ ensureSetup = () => {
125013
+ if (fs$4.existsSync(`${CONFIG.DIR}/Gemfile`)) {
125014
+ log("Already set up, skipping.");
125015
+ return;
125016
+ }
125017
+ if (!process.env.GITHUB_TOKEN) {
125018
+ throw new Error("[NeetoAuth] GITHUB_TOKEN is not set. Cannot clone neeto-auth-web.");
125019
+ }
125020
+ log("Running first-time setup...");
125021
+ const setupScript = path$1.join(SCRIPTS_DIR, "setup.sh");
125022
+ try {
125023
+ execSync(`bash "${setupScript}" "${CONFIG.DIR}"`, {
125024
+ stdio: "inherit",
125025
+ env: this.serverEnv,
125026
+ });
125027
+ }
125028
+ catch {
125029
+ throw new Error("[NeetoAuth] First-time setup failed. Check the output above for details.");
125030
+ }
125031
+ log("Setup complete.");
125032
+ };
125033
+ waitForServer = async (timeoutMs = CONFIG.MAX_WAIT_MS) => {
125034
+ const startTime = Date.now();
125035
+ while (Date.now() - startTime < timeoutMs) {
125036
+ if (this.process !== null && this.process.exitCode !== null) {
125037
+ const logContent = fs$4.existsSync(CONFIG.LOG)
125038
+ ? fs$4.readFileSync(CONFIG.LOG, "utf-8")
125039
+ : "<no log file>";
125040
+ throw new Error(`[NeetoAuth] Server process exited unexpectedly with code ${this.process.exitCode}.\nLog:\n${logContent}`);
125041
+ }
125042
+ if (await httpCheck(CONFIG.PORT))
125043
+ return;
125044
+ await sleep(3000);
125045
+ }
125046
+ const logContent = fs$4.existsSync(CONFIG.LOG)
125047
+ ? fs$4.readFileSync(CONFIG.LOG, "utf-8")
125048
+ : "<no log file>";
125049
+ throw new Error(`[NeetoAuth] Server did not start within ${timeoutMs / 1000}s.\nLog:\n${logContent}`);
125050
+ };
125051
+ injectEmailCaptureInitializer = () => {
125052
+ fs$4.writeFileSync(CONFIG.EMAIL_INIT, buildEmailCaptureInitializer(this.targetApp));
125053
+ };
125054
+ isRunningForCurrentApp = () => {
125055
+ if (!fs$4.existsSync(CONFIG.EMAIL_INIT))
125056
+ return false;
125057
+ const currentContent = fs$4.readFileSync(CONFIG.EMAIL_INIT, "utf-8");
125058
+ return currentContent === buildEmailCaptureInitializer(this.targetApp);
125059
+ };
125060
+ start = async () => {
125061
+ if (IS_STAGING_ENV)
125062
+ return;
125063
+ if (await httpCheck(CONFIG.PORT)) {
125064
+ if (this.isRunningForCurrentApp()) {
125065
+ log("Server already running for this app.");
125066
+ return;
125067
+ }
125068
+ log("Server running for a different app — restarting...");
125069
+ await this.killServerOnPort();
125070
+ }
125071
+ this.ensureSetup();
125072
+ this.injectEmailCaptureInitializer();
125073
+ log("Starting server...");
125074
+ const logStream = fs$4.createWriteStream(CONFIG.LOG);
125075
+ this.process = spawn("bundle", [
125076
+ "exec",
125077
+ "rails",
125078
+ "server",
125079
+ "-p",
125080
+ CONFIG.PORT.toString(),
125081
+ "-b",
125082
+ "0.0.0.0",
125083
+ ], {
125084
+ cwd: CONFIG.DIR,
125085
+ stdio: ["ignore", "pipe", "pipe"],
125086
+ env: this.serverEnv,
125087
+ });
125088
+ this.process.stdout?.pipe(logStream);
125089
+ this.process.stderr?.pipe(logStream);
125090
+ await this.waitForServer();
125091
+ log("Server ready.");
125092
+ };
125093
+ stop = async () => {
125094
+ if (IS_STAGING_ENV || !this.process)
125095
+ return;
125096
+ const pid = this.process.pid;
125097
+ log("Stopping server...");
125098
+ this.process.kill("SIGTERM");
125099
+ this.process = null;
125100
+ if (pid) {
125101
+ await this.waitForProcessExit(pid);
125102
+ }
125103
+ };
125104
+ }
125105
+
124936
125106
  var main$1 = {exports: {}};
124937
125107
 
124938
125108
  var version = "17.3.1";
@@ -124944,10 +125114,10 @@ var hasRequiredMain$1;
124944
125114
  function requireMain$1 () {
124945
125115
  if (hasRequiredMain$1) return main$1.exports;
124946
125116
  hasRequiredMain$1 = 1;
124947
- const fs = require$$0__default;
125117
+ const fs = fs__default;
124948
125118
  const path = path__default;
124949
- const os = require$$0$5;
124950
- const crypto = require$$0$9;
125119
+ const os = require$$0$4;
125120
+ const crypto = require$$0$8;
124951
125121
  const packageJson = require$$4;
124952
125122
 
124953
125123
  const version = packageJson.version;
@@ -125498,7 +125668,7 @@ const envLocalPath = `${envBasePath}.local`;
125498
125668
  const reporterPackageName = "@bigbinary/neeto-playwright-reporter";
125499
125669
  process.env.TEST_ENV = process.env.TEST_ENV ?? ENVIRONMENT.development;
125500
125670
  loadEnv(`${envBasePath}.${process.env.TEST_ENV}`);
125501
- require$$0$3.existsSync(envLocalPath) && loadEnv(envLocalPath);
125671
+ fs$4.existsSync(envLocalPath) && loadEnv(envLocalPath);
125502
125672
  const playdashStagingConfig = {
125503
125673
  apiKey: process.env.PLAYDASH_STAGING_API_KEY,
125504
125674
  ciBuildId: process.env.NEETO_CI_JOB_ID,
@@ -125694,5 +125864,5 @@ const definePlaywrightConfig = (overrides) => {
125694
125864
  });
125695
125865
  };
125696
125866
 
125697
- 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, 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, RailsEmailRakeClient, 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, writeDataToFile };
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, RailsEmailRakeClient, 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, writeDataToFile };
125698
125868
  //# sourceMappingURL=index.js.map