@bigbinary/neeto-playwright-commons 2.2.5 → 3.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.d.ts CHANGED
@@ -779,6 +779,48 @@ declare class MemberApis {
779
779
  update: (memberId: string, body: Record<string, unknown>) => Promise<playwright_core.APIResponse | undefined>;
780
780
  bulkUpdate: (body: Record<string, unknown>) => Promise<playwright_core.APIResponse | undefined>;
781
781
  }
782
+ type EmailDeliveryProvider = "gmail" | "outlook";
783
+ interface EmailDeliveryConnectParams {
784
+ emailProvider: EmailDeliveryProvider;
785
+ refreshToken: string;
786
+ }
787
+ interface EmailDeliveryVerifyEmailParams {
788
+ emailProvider: EmailDeliveryProvider;
789
+ subject: string;
790
+ to: string;
791
+ from: string;
792
+ body?: string;
793
+ }
794
+ interface EmailDeliveryVerifiedEmail {
795
+ subject: string;
796
+ from: string;
797
+ to: string;
798
+ date: string;
799
+ body: string;
800
+ }
801
+ interface EmailDeliveryVerifyEmailResponse {
802
+ exists: boolean;
803
+ email?: EmailDeliveryVerifiedEmail;
804
+ }
805
+ declare class NeetoEmailDeliveryApi {
806
+ private neetoPlaywrightUtilities;
807
+ constructor(neetoPlaywrightUtilities: CustomCommands);
808
+ /**
809
+ *
810
+ * Connects an integration. It takes the following parameters:
811
+ *
812
+ * skipGoTo: Boolean indicating whether to skip navigating to integration index (default: false).
813
+ *
814
+ * @example
815
+ *
816
+ * await integrationBase.connect();
817
+ * // OR
818
+ * await integrationBase.connect(true);
819
+ * @endexample
820
+ */
821
+ connect: (payload: EmailDeliveryConnectParams) => Promise<playwright_core.APIResponse | undefined>;
822
+ verifyEmail: (params: EmailDeliveryVerifyEmailParams) => Promise<playwright_core.APIResponse | undefined>;
823
+ }
782
824
  type EmailAddress = string | string[];
783
825
  interface RailsEmailAttachment {
784
826
  name: string;
@@ -3826,6 +3868,7 @@ declare const IS_STAGING_ENV: boolean;
3826
3868
  * @endexample
3827
3869
  */
3828
3870
  declare const IS_DEV_ENV: boolean;
3871
+ declare const IS_CI: boolean;
3829
3872
  declare const DEFAULT_WEBHOOKS_RESPONSE_TEXT: string;
3830
3873
  /**
3831
3874
  *
@@ -5441,6 +5484,38 @@ declare class TagsPage {
5441
5484
  tagsBreadcrumbSelector
5442
5485
  }: MergeTagsViaUIProps) => Promise<void>;
5443
5486
  }
5487
+ interface ConnectRequestParams {
5488
+ provider: EmailDeliveryProvider;
5489
+ }
5490
+ interface EmailMatchCriteria {
5491
+ subject: string;
5492
+ to: string;
5493
+ from?: string;
5494
+ partialBody?: string;
5495
+ }
5496
+ interface VerifyEmailRequestOptions {
5497
+ provider: EmailDeliveryProvider;
5498
+ timeout?: number;
5499
+ shouldThrowErrorOnTimeout?: boolean;
5500
+ }
5501
+ declare class EmailDeliveryUtils {
5502
+ private neetoPlaywrightUtilities;
5503
+ private emailDeliveryApi;
5504
+ constructor(neetoPlaywrightUtilities: CustomCommands);
5505
+ connectViaRequest: ({
5506
+ provider
5507
+ }: ConnectRequestParams) => Promise<playwright_core.APIResponse | undefined>;
5508
+ verifyEmailViaRequest: ({
5509
+ subject,
5510
+ to,
5511
+ partialBody,
5512
+ from
5513
+ }: EmailMatchCriteria, {
5514
+ provider,
5515
+ timeout,
5516
+ shouldThrowErrorOnTimeout
5517
+ }: VerifyEmailRequestOptions) => Promise<EmailDeliveryVerifiedEmail | null>;
5518
+ }
5444
5519
  declare const USER_AGENTS: {
5445
5520
  windows: string;
5446
5521
  mac: string;
@@ -6867,6 +6942,7 @@ declare const HELP_CENTER_SELECTORS: {
6867
6942
  subscriptionPlan: string;
6868
6943
  };
6869
6944
  declare const NEETO_IMAGE_UPLOADER_SELECTORS: {
6945
+ libraryImageCard: string;
6870
6946
  imageUploaderWrapper: string;
6871
6947
  browseText: string;
6872
6948
  fileInput: string;
@@ -8960,5 +9036,5 @@ interface Overrides {
8960
9036
  * @endexample
8961
9037
  */
8962
9038
  declare const definePlaywrightConfig: (overrides: Overrides) => PlaywrightTestConfig<{}, {}>;
8963
- export { ACTIONS, ADMIN_PANEL_SELECTORS, API_KEYS_SELECTORS, API_ROUTES, AUDIT_LOGS_SELECTORS, ApiKeysApi, ApiKeysPage, AuditLogsPage, BASE_URL, CALENDAR_LABELS, CERTIFICATE_LIMIT_EXCEEDED_MESSAGE, CERTIFICATE_LIMIT_EXCEEDED_REGEXP, CHANGELOG_WIDGET_SELECTORS, CHAT_WIDGET_SELECTORS, CHAT_WIDGET_TEXTS, COLOR, COMMON_SELECTORS, COMMON_TEXTS, COMMUNITY_TEXTS, CREDENTIALS, CURRENT_TIME_RANGES, CUSTOM_DOMAIN_SELECTORS, CUSTOM_DOMAIN_SUFFIX, CustomCommands, CustomDomainApi, CustomDomainPage, DATE_FORMATS, DATE_PICKER_SELECTORS, DATE_RANGES, DATE_TEXTS, DEFAULT_WEBHOOKS_RESPONSE_TEXT, DESCRIPTION_EDITOR_TEXTS, EMBED_SELECTORS, EMOJI_LABEL, EMPTY_STORAGE_STATE, ENGAGE_TEXTS, ENVIRONMENT, EXAMPLE_URL, EXPANDED_FONT_SIZE, EXPORT_FILE_TYPES, EditorPage, EmbedBase, FILE_FORMATS, FONT_SIZE_SELECTORS, GLOBAL_TRANSLATIONS_PATTERN, GOOGLE_ANALYTICS_SELECTORS, GOOGLE_CALENDAR_DATE_FORMAT, GOOGLE_LOGIN_SELECTORS, GOOGLE_LOGIN_TEXTS, GOOGLE_SHEETS_SELECTORS, GooglePage, HELP_CENTER_ROUTES, HELP_CENTER_SELECTORS, HelpAndProfilePage, INTEGRATIONS_TEXTS, INTEGRATION_SELECTORS, IPRestrictionsPage, IP_RESTRICTIONS_SELECTORS, IS_DEV_ENV, IS_STAGING_ENV, ImageUploader, IntegrationBase, IpRestrictionsApi, KEYBOARD_SHORTCUTS_SELECTORS, KEYBOARD_SHORTCUT_TEST_CASES, LIST_MODIFIER_SELECTORS, LIST_MODIFIER_TAGS, LOGIN_SELECTORS, MEMBER_FORM_SELECTORS, MEMBER_SELECTORS, MEMBER_TEXTS, MERGE_TAGS_SELECTORS, MICROSOFT_LOGIN_SELECTORS, MICROSOFT_LOGIN_TEXTS, MailerUtils, Member, MemberApis, MicrosoftPage, NEETO_AUTH_BASE_URL, NEETO_EDITOR_SELECTORS, NEETO_FILTERS_SELECTORS, NEETO_IMAGE_UPLOADER_SELECTORS, NEETO_ROUTES, NEETO_SEO_SELECTORS, NEETO_TEXT_MODIFIER_SELECTORS, NeetoAuthServer, NeetoTowerApi, ONBOARDING_SELECTORS, ORGANIZATION_TEXTS, OTP_EMAIL_PATTERN, OrganizationPage, PAST_TIME_RANGES, PHONE_NUMBER_FORMATS, PLURAL, PROFILE_LINKS, PROFILE_SECTION_SELECTORS, PROJECT_NAMES, PROJECT_TRANSLATIONS_PATH, ROLES_SELECTORS, ROUTES, RailsEmailApiClient, RailsEmailUtils, RoleApis, RolesPage, SIGNUP_SELECTORS, SINGULAR, SLACK_DATA_QA_SELECTORS, SLACK_DEFAULT_CHANNEL, SLACK_SELECTORS, SLACK_WEB_TEXTS, STATUS_TEXTS, STORAGE_STATE, SecurityApi, SidebarSection, SlackApi, SlackPage, TABLE_SELECTORS, TAB_SELECTORS, TAGS_SELECTORS, TEAM_MEMBER_TEXTS, TEXT_MODIFIER_ROLES, TEXT_MODIFIER_SELECTORS, TEXT_MODIFIER_TAGS, THANK_YOU_SELECTORS, THEMES_SELECTORS, THEMES_TEXTS, THIRD_PARTY_ROUTES, TIME_RANGES, TOASTR_MESSAGES, TWILIO_SELECTORS, TagsApi, TagsPage, TeamMembers, ThankYouApi, ThankYouPage, TwilioApi, USER_AGENTS, WEBHOOK_SELECTORS, WebhookSiteApi, WebhooksPage, ZAPIER_LIMIT_EXHAUSTED_MESSAGE, ZAPIER_SELECTORS, ZAPIER_TEST_EMAIL, ZAPIER_WEB_TEXTS, ZapierPage, baseURLGenerator, basicHTMLContent, clearCredentials, commands, cpuThrottlingUsingCDP, createOrganizationViaRake, currencyUtils, dataQa, decodeQRCodeFromFile, definePlaywrightConfig, executeWithThrottledResources, extractSubdomainFromError, fillCredentialsAndSubmit, filterUtils, generatePhoneNumber, generatePhoneNumberDetails, generateRandomBypassEmail, generateRandomFile, generateStagingData, getByDataQA, getClipboardContent, getFormattedPhoneNumber, getFullUrl, getGlobalUserProps, getGlobalUserState, getImagePathAndName, getIsoCodeFromPhoneCode, getListCount, globalShortcuts, grantClipboardPermissions, hexToRGB, hexToRGBA, i18nFixture, imageRegex, initializeCredentials, initializeTestData, initializeTotp, isGithubIssueOpen, joinHyphenCase, joinString, login, loginWithoutSSO, networkConditions, networkThrottlingUsingCDP, readFileSyncIfExists, removeCredentialFile, serializeFileForBrowser, shouldSkipCustomDomainSetup, shouldSkipSetupAndTeardown, simulateClickWithDelay, simulateTypingWithDelay, skipTest, squish, _default as stealthTest, tableUtils, toCamelCase, updateCredentials, warmup, writeDataToFile };
8964
- export type { BaseThemeStyle, BaseThemeStyleType, ColumnMenuAction, CountryProps, CustomFixture, IntroPageThemeStyle, IntroPageThemeStyleType, ProjectName, ThemeCategory, ValueOf };
9039
+ 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, EmailDeliveryUtils, 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_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, NeetoEmailDeliveryApi, NeetoTowerApi, ONBOARDING_SELECTORS, ORGANIZATION_TEXTS, OTP_EMAIL_PATTERN, OrganizationPage, PAST_TIME_RANGES, PHONE_NUMBER_FORMATS, PLURAL, PROFILE_LINKS, PROFILE_SECTION_SELECTORS, PROJECT_NAMES, PROJECT_TRANSLATIONS_PATH, ROLES_SELECTORS, ROUTES, RailsEmailApiClient, RailsEmailUtils, RoleApis, RolesPage, SIGNUP_SELECTORS, SINGULAR, SLACK_DATA_QA_SELECTORS, SLACK_DEFAULT_CHANNEL, SLACK_SELECTORS, SLACK_WEB_TEXTS, STATUS_TEXTS, STORAGE_STATE, SecurityApi, SidebarSection, SlackApi, SlackPage, TABLE_SELECTORS, TAB_SELECTORS, TAGS_SELECTORS, TEAM_MEMBER_TEXTS, TEXT_MODIFIER_ROLES, TEXT_MODIFIER_SELECTORS, TEXT_MODIFIER_TAGS, THANK_YOU_SELECTORS, THEMES_SELECTORS, THEMES_TEXTS, THIRD_PARTY_ROUTES, TIME_RANGES, TOASTR_MESSAGES, TWILIO_SELECTORS, TagsApi, TagsPage, TeamMembers, ThankYouApi, ThankYouPage, TwilioApi, USER_AGENTS, WEBHOOK_SELECTORS, WebhookSiteApi, WebhooksPage, ZAPIER_LIMIT_EXHAUSTED_MESSAGE, ZAPIER_SELECTORS, ZAPIER_TEST_EMAIL, ZAPIER_WEB_TEXTS, ZapierPage, baseURLGenerator, basicHTMLContent, clearCredentials, commands, cpuThrottlingUsingCDP, createOrganizationViaRake, currencyUtils, dataQa, decodeQRCodeFromFile, definePlaywrightConfig, executeWithThrottledResources, extractSubdomainFromError, fillCredentialsAndSubmit, filterUtils, generatePhoneNumber, generatePhoneNumberDetails, generateRandomBypassEmail, generateRandomFile, generateStagingData, getByDataQA, getClipboardContent, getFormattedPhoneNumber, getFullUrl, getGlobalUserProps, getGlobalUserState, getImagePathAndName, getIsoCodeFromPhoneCode, getListCount, globalShortcuts, grantClipboardPermissions, hexToRGB, hexToRGBA, i18nFixture, imageRegex, initializeCredentials, initializeTestData, initializeTotp, isGithubIssueOpen, joinHyphenCase, joinString, login, loginWithoutSSO, networkConditions, networkThrottlingUsingCDP, readFileSyncIfExists, removeCredentialFile, serializeFileForBrowser, shouldSkipCustomDomainSetup, shouldSkipSetupAndTeardown, simulateClickWithDelay, simulateTypingWithDelay, skipTest, squish, _default as stealthTest, tableUtils, toCamelCase, updateCredentials, warmup, writeDataToFile };
9040
+ export type { BaseThemeStyle, BaseThemeStyleType, ColumnMenuAction, CountryProps, CustomFixture, EmailDeliveryConnectParams, EmailDeliveryProvider, EmailDeliveryVerifiedEmail, EmailDeliveryVerifyEmailParams, EmailDeliveryVerifyEmailResponse, IntroPageThemeStyle, IntroPageThemeStyleType, ProjectName, ThemeCategory, ValueOf };
package/index.js CHANGED
@@ -1,4 +1,4 @@
1
- import { keysToSnakeCase, hyphenate, isNotPresent, humanize, isPresent, dynamicArray, findBy, truncate, isNotEmpty, isNotEqualDeep, randomPick } from '@bigbinary/neeto-cist';
1
+ import { keysToSnakeCase, isPresent, hyphenate, isNotPresent, humanize, dynamicArray, findBy, truncate, isNotEmpty, isNotEqualDeep, randomPick } from '@bigbinary/neeto-cist';
2
2
  import { faker } from '@faker-js/faker';
3
3
  import * as fs$4 from 'fs';
4
4
  import fs__default, { readFileSync, promises, existsSync, writeFileSync, unlinkSync } from 'fs';
@@ -19,9 +19,9 @@ import require$$1$3 from 'node:stream';
19
19
  import require$$0$8 from 'crypto';
20
20
  import require$$1$4 from 'zlib';
21
21
  import require$$0$9 from 'assert';
22
- import require$$0$a from 'tty';
22
+ import require$$1$5 from 'tty';
23
23
  import stealth$1 from 'puppeteer-extra-plugin-stealth';
24
- import require$$1$5 from 'events';
24
+ import require$$1$6 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';
@@ -226,6 +226,25 @@ class MemberApis {
226
226
  });
227
227
  }
228
228
 
229
+ const NEETO_EMAIL_DELIVERY_TESTING_BASE_URL = "/neeto_email_delivery/api/v1/testing";
230
+ class NeetoEmailDeliveryApi {
231
+ neetoPlaywrightUtilities;
232
+ constructor(neetoPlaywrightUtilities) {
233
+ this.neetoPlaywrightUtilities = neetoPlaywrightUtilities;
234
+ }
235
+ connect = (payload) => this.neetoPlaywrightUtilities.apiRequest({
236
+ method: "post",
237
+ url: `${NEETO_EMAIL_DELIVERY_TESTING_BASE_URL}/connect`,
238
+ body: {
239
+ connect: keysToSnakeCase(payload),
240
+ },
241
+ });
242
+ verifyEmail = (params) => this.neetoPlaywrightUtilities.apiRequest({
243
+ url: `${NEETO_EMAIL_DELIVERY_TESTING_BASE_URL}/verify_email`,
244
+ params: keysToSnakeCase(params),
245
+ });
246
+ }
247
+
229
248
  class RailsEmailApiClient {
230
249
  port = process.env.RAILS_SERVER_PORT;
231
250
  subdomain = process.env.SUBDOMAIN ?? "spinkart";
@@ -375,6 +394,7 @@ const ENVIRONMENT = {
375
394
  const EXAMPLE_URL = "https://example.com";
376
395
  const IS_STAGING_ENV = process.env.TEST_ENV === ENVIRONMENT.staging;
377
396
  const IS_DEV_ENV = process.env.TEST_ENV === ENVIRONMENT.development;
397
+ const IS_CI = isPresent(process.env.NEETO_CI_JOB_ID);
378
398
  const DEFAULT_WEBHOOKS_RESPONSE_TEXT = JSON.stringify({ success: true });
379
399
  const STORAGE_STATE = "./e2e/auth/user.json";
380
400
  const GLOBAL_TRANSLATIONS_PATTERN = "../node_modules/@bigbinary/**/translations/en.json";
@@ -5093,8 +5113,8 @@ const skipTest = {
5093
5113
  forNonNightlyRun: () => {
5094
5114
  const currentBranch = execCommand("git rev-parse --abbrev-ref HEAD");
5095
5115
  const isNightlyRun = currentBranch === "main" &&
5096
- process.env.TEST_ENV === ENVIRONMENT.staging &&
5097
- !!process.env.NEETO_CI_JOB_ID;
5116
+ IS_STAGING_ENV &&
5117
+ IS_CI;
5098
5118
  return test.skip(not(isNightlyRun), "Run test only in playwright-nightly");
5099
5119
  },
5100
5120
  ifNotWithinAllowedNightlyHours: ({ reason, allowedNightlyRunHours = [0, 6, 12, 18], }) => {
@@ -5373,6 +5393,7 @@ const HELP_CENTER_SELECTORS = {
5373
5393
  };
5374
5394
 
5375
5395
  const NEETO_IMAGE_UPLOADER_SELECTORS = {
5396
+ libraryImageCard: "library-image-card",
5376
5397
  imageUploaderWrapper: "image-uploader-wrapper",
5377
5398
  browseText: "neeto-image-uploader-browse-text",
5378
5399
  fileInput: "neeto-image-uploader-file-input",
@@ -107219,7 +107240,7 @@ const STATIC_ASSET_PATTERN = /\.(js|css|woff2?|ttf|eot|png|svg|ico|gif|webp)(\?.
107219
107240
  const assetCache = new Map();
107220
107241
  const commands = {
107221
107242
  context: async ({ context }, use) => {
107222
- if (IS_DEV_ENV) {
107243
+ if (IS_DEV_ENV && IS_CI) {
107223
107244
  await context.route(STATIC_ASSET_PATTERN, async (route) => {
107224
107245
  const url = route.request().url();
107225
107246
  const hit = assetCache.get(url);
@@ -108016,12 +108037,12 @@ var hasRequiredHasFlag;
108016
108037
  function requireHasFlag () {
108017
108038
  if (hasRequiredHasFlag) return hasFlag;
108018
108039
  hasRequiredHasFlag = 1;
108019
- hasFlag = (flag, argv) => {
108020
- argv = argv || process.argv;
108040
+
108041
+ hasFlag = (flag, argv = process.argv) => {
108021
108042
  const prefix = flag.startsWith('-') ? '' : (flag.length === 1 ? '-' : '--');
108022
- const pos = argv.indexOf(prefix + flag);
108023
- const terminatorPos = argv.indexOf('--');
108024
- return pos !== -1 && (terminatorPos === -1 ? true : pos < terminatorPos);
108043
+ const position = argv.indexOf(prefix + flag);
108044
+ const terminatorPosition = argv.indexOf('--');
108045
+ return position !== -1 && (terminatorPosition === -1 || position < terminatorPosition);
108025
108046
  };
108026
108047
  return hasFlag;
108027
108048
  }
@@ -108033,23 +108054,32 @@ function requireSupportsColor () {
108033
108054
  if (hasRequiredSupportsColor) return supportsColor_1;
108034
108055
  hasRequiredSupportsColor = 1;
108035
108056
  const os = require$$0$4;
108057
+ const tty = require$$1$5;
108036
108058
  const hasFlag = requireHasFlag();
108037
108059
 
108038
- const env = process.env;
108060
+ const {env} = process;
108039
108061
 
108040
108062
  let forceColor;
108041
108063
  if (hasFlag('no-color') ||
108042
108064
  hasFlag('no-colors') ||
108043
- hasFlag('color=false')) {
108044
- forceColor = false;
108065
+ hasFlag('color=false') ||
108066
+ hasFlag('color=never')) {
108067
+ forceColor = 0;
108045
108068
  } else if (hasFlag('color') ||
108046
108069
  hasFlag('colors') ||
108047
108070
  hasFlag('color=true') ||
108048
108071
  hasFlag('color=always')) {
108049
- forceColor = true;
108072
+ forceColor = 1;
108050
108073
  }
108074
+
108051
108075
  if ('FORCE_COLOR' in env) {
108052
- forceColor = env.FORCE_COLOR.length === 0 || parseInt(env.FORCE_COLOR, 10) !== 0;
108076
+ if (env.FORCE_COLOR === 'true') {
108077
+ forceColor = 1;
108078
+ } else if (env.FORCE_COLOR === 'false') {
108079
+ forceColor = 0;
108080
+ } else {
108081
+ forceColor = env.FORCE_COLOR.length === 0 ? 1 : Math.min(parseInt(env.FORCE_COLOR, 10), 3);
108082
+ }
108053
108083
  }
108054
108084
 
108055
108085
  function translateLevel(level) {
@@ -108065,8 +108095,8 @@ function requireSupportsColor () {
108065
108095
  };
108066
108096
  }
108067
108097
 
108068
- function supportsColor(stream) {
108069
- if (forceColor === false) {
108098
+ function supportsColor(haveStream, streamIsTTY) {
108099
+ if (forceColor === 0) {
108070
108100
  return 0;
108071
108101
  }
108072
108102
 
@@ -108080,22 +108110,21 @@ function requireSupportsColor () {
108080
108110
  return 2;
108081
108111
  }
108082
108112
 
108083
- if (stream && !stream.isTTY && forceColor !== true) {
108113
+ if (haveStream && !streamIsTTY && forceColor === undefined) {
108084
108114
  return 0;
108085
108115
  }
108086
108116
 
108087
- const min = forceColor ? 1 : 0;
108117
+ const min = forceColor || 0;
108118
+
108119
+ if (env.TERM === 'dumb') {
108120
+ return min;
108121
+ }
108088
108122
 
108089
108123
  if (process.platform === 'win32') {
108090
- // Node.js 7.5.0 is the first version of Node.js to include a patch to
108091
- // libuv that enables 256 color output on Windows. Anything earlier and it
108092
- // won't work. However, here we target Node.js 8 at minimum as it is an LTS
108093
- // release, and Node.js 7 is not. Windows 10 build 10586 is the first Windows
108094
- // release that supports 256 colors. Windows 10 build 14931 is the first release
108095
- // that supports 16m/TrueColor.
108124
+ // Windows 10 build 10586 is the first Windows release that supports 256 colors.
108125
+ // Windows 10 build 14931 is the first release that supports 16m/TrueColor.
108096
108126
  const osRelease = os.release().split('.');
108097
108127
  if (
108098
- Number(process.versions.node.split('.')[0]) >= 8 &&
108099
108128
  Number(osRelease[0]) >= 10 &&
108100
108129
  Number(osRelease[2]) >= 10586
108101
108130
  ) {
@@ -108106,7 +108135,7 @@ function requireSupportsColor () {
108106
108135
  }
108107
108136
 
108108
108137
  if ('CI' in env) {
108109
- if (['TRAVIS', 'CIRCLECI', 'APPVEYOR', 'GITLAB_CI'].some(sign => sign in env) || env.CI_NAME === 'codeship') {
108138
+ if (['TRAVIS', 'CIRCLECI', 'APPVEYOR', 'GITLAB_CI', 'GITHUB_ACTIONS', 'BUILDKITE'].some(sign => sign in env) || env.CI_NAME === 'codeship') {
108110
108139
  return 1;
108111
108140
  }
108112
108141
 
@@ -108145,22 +108174,18 @@ function requireSupportsColor () {
108145
108174
  return 1;
108146
108175
  }
108147
108176
 
108148
- if (env.TERM === 'dumb') {
108149
- return min;
108150
- }
108151
-
108152
108177
  return min;
108153
108178
  }
108154
108179
 
108155
108180
  function getSupportLevel(stream) {
108156
- const level = supportsColor(stream);
108181
+ const level = supportsColor(stream, stream && stream.isTTY);
108157
108182
  return translateLevel(level);
108158
108183
  }
108159
108184
 
108160
108185
  supportsColor_1 = {
108161
108186
  supportsColor: getSupportLevel,
108162
- stdout: getSupportLevel(process.stdout),
108163
- stderr: getSupportLevel(process.stderr)
108187
+ stdout: translateLevel(supportsColor(true, tty.isatty(1))),
108188
+ stderr: translateLevel(supportsColor(true, tty.isatty(2)))
108164
108189
  };
108165
108190
  return supportsColor_1;
108166
108191
  }
@@ -108175,7 +108200,7 @@ function requireNode () {
108175
108200
  if (hasRequiredNode) return node.exports;
108176
108201
  hasRequiredNode = 1;
108177
108202
  (function (module, exports$1) {
108178
- const tty = require$$0$a;
108203
+ const tty = require$$1$5;
108179
108204
  const util = require$$0$3;
108180
108205
 
108181
108206
  /**
@@ -115511,7 +115536,7 @@ function requireAsync$3 () {
115511
115536
  if (hasRequiredAsync$3) return async$2;
115512
115537
  hasRequiredAsync$3 = 1;
115513
115538
  Object.defineProperty(async$2, "__esModule", { value: true });
115514
- const events_1 = require$$1$5;
115539
+ const events_1 = require$$1$6;
115515
115540
  const fsScandir = requireOut$2();
115516
115541
  const fastq = requireQueue();
115517
115542
  const common = requireCommon();
@@ -120972,9 +120997,6 @@ class CustomDomainPage {
120972
120997
  ]);
120973
120998
  await this.neetoPlaywrightUtilities.waitForPageLoad();
120974
120999
  await validateButton.click();
120975
- await expect
120976
- .soft(this.page.getByTestId(COMMON_SELECTORS.calloutElement))
120977
- .toBeVisible({ timeout: 15_000 });
120978
121000
  let isCertificateLimitExceeded = false;
120979
121001
  await expect(async () => {
120980
121002
  isCertificateLimitExceeded = await this.isCertificateLimitExceeded();
@@ -121440,6 +121462,70 @@ class TagsPage {
121440
121462
  };
121441
121463
  }
121442
121464
 
121465
+ const REFRESH_TOKEN_ENV_KEYS = {
121466
+ gmail: "EMAIL_DELIVERY_GMAIL_REFRESH_TOKEN",
121467
+ outlook: "EMAIL_DELIVERY_OUTLOOK_REFRESH_TOKEN",
121468
+ };
121469
+ const FROM_EMAIL_ENV_KEYS = {
121470
+ gmail: "EMAIL_DELIVERY_CONNECTED_GMAIL",
121471
+ outlook: "EMAIL_DELIVERY_CONNECTED_OUTLOOK",
121472
+ };
121473
+ class EmailDeliveryUtils {
121474
+ neetoPlaywrightUtilities;
121475
+ emailDeliveryApi;
121476
+ constructor(neetoPlaywrightUtilities) {
121477
+ this.neetoPlaywrightUtilities = neetoPlaywrightUtilities;
121478
+ this.emailDeliveryApi = new NeetoEmailDeliveryApi(neetoPlaywrightUtilities);
121479
+ }
121480
+ connectViaRequest = async ({ provider }) => {
121481
+ const refreshTokenEnvKey = REFRESH_TOKEN_ENV_KEYS[provider];
121482
+ const refreshToken = process.env[refreshTokenEnvKey];
121483
+ if (isNil(refreshToken)) {
121484
+ throw new Error(`ENV variable ${refreshTokenEnvKey} is not properly configured`);
121485
+ }
121486
+ const response = await this.emailDeliveryApi.connect({
121487
+ emailProvider: provider,
121488
+ refreshToken,
121489
+ });
121490
+ expect(response?.ok()).toBeTruthy();
121491
+ return response;
121492
+ };
121493
+ verifyEmailViaRequest = async ({ subject, to, partialBody, from }, { provider, timeout = 30 * 1000, shouldThrowErrorOnTimeout = true, }) => {
121494
+ const fromEmail = from ?? process.env[FROM_EMAIL_ENV_KEYS[provider]];
121495
+ if (isNil(fromEmail)) {
121496
+ throw new Error(`ENV variable ${FROM_EMAIL_ENV_KEYS[provider]} is not properly configured`);
121497
+ }
121498
+ const verifyParams = {
121499
+ emailProvider: provider,
121500
+ subject,
121501
+ to,
121502
+ from: fromEmail,
121503
+ body: partialBody,
121504
+ };
121505
+ let lastResult = null;
121506
+ const fetchEmail = async () => {
121507
+ const response = await this.emailDeliveryApi.verifyEmail(verifyParams);
121508
+ if (!response?.ok()) {
121509
+ lastResult = null;
121510
+ return;
121511
+ }
121512
+ lastResult = (await response.json());
121513
+ };
121514
+ const email = (await this.neetoPlaywrightUtilities.executeRecursively({
121515
+ condition: async () => {
121516
+ await fetchEmail();
121517
+ return Boolean(lastResult?.exists);
121518
+ },
121519
+ callback: async () => lastResult?.exists ? (lastResult.email ?? null) : null,
121520
+ timeout,
121521
+ }));
121522
+ if (!email && shouldThrowErrorOnTimeout) {
121523
+ throw new Error(`Timed out waiting for ${provider} email matching subject "${subject}"`);
121524
+ }
121525
+ return email;
121526
+ };
121527
+ }
121528
+
121443
121529
  const USER_AGENTS = {
121444
121530
  windows: "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36",
121445
121531
  mac: "Mozilla/5.0 (Macintosh; Intel Mac OS X 14_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
@@ -125787,7 +125873,6 @@ const playdashProductionHealthConfig = {
125787
125873
  ciBuildId: process.env.NEETO_CI_JOB_ID,
125788
125874
  tags: process.env.TAG,
125789
125875
  };
125790
- const isCI = isPresent(process.env.NEETO_CI_JOB_ID);
125791
125876
  const railsPort = process.env.RAILS_SERVER_PORT;
125792
125877
  const vitePort = process.env.VITE_PORT;
125793
125878
  const PROJECT_NAMES = {
@@ -125851,18 +125936,18 @@ const definePlaywrightConfig = (overrides) => {
125851
125936
  return defineConfig({
125852
125937
  testDir: "./e2e/tests",
125853
125938
  fullyParallel: true,
125854
- forbidOnly: isCI,
125855
- retries: isCI ? 1 : 0,
125939
+ forbidOnly: IS_CI,
125940
+ retries: IS_CI ? 1 : 0,
125856
125941
  timeout: 5 * 60 * 1000,
125857
- workers: isCI ? 6 : 5,
125858
- reporter: isCI ? reporter : [["line"]],
125942
+ workers: IS_CI ? 6 : 5,
125943
+ reporter: IS_CI ? reporter : [["line"]],
125859
125944
  ...(specPatterns && { testMatch: specPatterns }),
125860
125945
  ...(IS_DEV_ENV && {
125861
125946
  webServer: [
125862
125947
  {
125863
125948
  command: `bundle exec puma -b tcp://0.0.0.0:${railsPort} -C config/puma.rb`,
125864
125949
  url: `http://spinkart.lvh.me:${railsPort}`,
125865
- reuseExistingServer: !isCI,
125950
+ reuseExistingServer: !IS_CI,
125866
125951
  timeout: 5 * 60 * 1000,
125867
125952
  cwd: "..",
125868
125953
  env: { ...process.env, PORT: railsPort ?? "" },
@@ -125870,7 +125955,7 @@ const definePlaywrightConfig = (overrides) => {
125870
125955
  {
125871
125956
  command: "yarn dev --host",
125872
125957
  url: `http://127.0.0.1:${vitePort}/@vite/client`,
125873
- reuseExistingServer: !isCI,
125958
+ reuseExistingServer: !IS_CI,
125874
125959
  timeout: 2 * 60 * 1000,
125875
125960
  cwd: "..",
125876
125961
  },
@@ -125963,5 +126048,5 @@ const definePlaywrightConfig = (overrides) => {
125963
126048
  });
125964
126049
  };
125965
126050
 
125966
- export { ACTIONS, ADMIN_PANEL_SELECTORS, API_KEYS_SELECTORS, API_ROUTES, AUDIT_LOGS_SELECTORS, ApiKeysApi, ApiKeysPage, AuditLogsPage, BASE_URL, CALENDAR_LABELS, CERTIFICATE_LIMIT_EXCEEDED_MESSAGE, CERTIFICATE_LIMIT_EXCEEDED_REGEXP, CHANGELOG_WIDGET_SELECTORS, CHAT_WIDGET_SELECTORS, CHAT_WIDGET_TEXTS, COLOR, COMMON_SELECTORS, COMMON_TEXTS, COMMUNITY_TEXTS, CREDENTIALS, CURRENT_TIME_RANGES, CUSTOM_DOMAIN_SELECTORS, CUSTOM_DOMAIN_SUFFIX, CustomCommands, CustomDomainApi, CustomDomainPage, DATE_FORMATS, DATE_PICKER_SELECTORS, DATE_RANGES, DATE_TEXTS, DEFAULT_WEBHOOKS_RESPONSE_TEXT, DESCRIPTION_EDITOR_TEXTS, EMBED_SELECTORS, EMOJI_LABEL, EMPTY_STORAGE_STATE, ENGAGE_TEXTS, ENVIRONMENT, EXAMPLE_URL, EXPANDED_FONT_SIZE, EXPORT_FILE_TYPES, EditorPage, EmbedBase, FILE_FORMATS, FONT_SIZE_SELECTORS, GLOBAL_TRANSLATIONS_PATTERN, GOOGLE_ANALYTICS_SELECTORS, GOOGLE_CALENDAR_DATE_FORMAT, GOOGLE_LOGIN_SELECTORS, GOOGLE_LOGIN_TEXTS, GOOGLE_SHEETS_SELECTORS, GooglePage, HELP_CENTER_ROUTES, HELP_CENTER_SELECTORS, HelpAndProfilePage, INTEGRATIONS_TEXTS, INTEGRATION_SELECTORS, IPRestrictionsPage, IP_RESTRICTIONS_SELECTORS, IS_DEV_ENV, IS_STAGING_ENV, ImageUploader, IntegrationBase, IpRestrictionsApi, KEYBOARD_SHORTCUTS_SELECTORS, KEYBOARD_SHORTCUT_TEST_CASES, LIST_MODIFIER_SELECTORS, LIST_MODIFIER_TAGS, LOGIN_SELECTORS, MEMBER_FORM_SELECTORS, MEMBER_SELECTORS, MEMBER_TEXTS, MERGE_TAGS_SELECTORS, MICROSOFT_LOGIN_SELECTORS, MICROSOFT_LOGIN_TEXTS, MailerUtils, Member, MemberApis, MicrosoftPage, NEETO_AUTH_BASE_URL, NEETO_EDITOR_SELECTORS, NEETO_FILTERS_SELECTORS, NEETO_IMAGE_UPLOADER_SELECTORS, NEETO_ROUTES, NEETO_SEO_SELECTORS, NEETO_TEXT_MODIFIER_SELECTORS, NeetoAuthServer, NeetoTowerApi, ONBOARDING_SELECTORS, ORGANIZATION_TEXTS, OTP_EMAIL_PATTERN, OrganizationPage, PAST_TIME_RANGES, PHONE_NUMBER_FORMATS, PLURAL, PROFILE_LINKS, PROFILE_SECTION_SELECTORS, PROJECT_NAMES, PROJECT_TRANSLATIONS_PATH, ROLES_SELECTORS, ROUTES, RailsEmailApiClient, RailsEmailUtils, RoleApis, RolesPage, SIGNUP_SELECTORS, SINGULAR, SLACK_DATA_QA_SELECTORS, SLACK_DEFAULT_CHANNEL, SLACK_SELECTORS, SLACK_WEB_TEXTS, STATUS_TEXTS, STORAGE_STATE, SecurityApi, SidebarSection, SlackApi, SlackPage, TABLE_SELECTORS, TAB_SELECTORS, TAGS_SELECTORS, TEAM_MEMBER_TEXTS, TEXT_MODIFIER_ROLES, TEXT_MODIFIER_SELECTORS, TEXT_MODIFIER_TAGS, THANK_YOU_SELECTORS, THEMES_SELECTORS, THEMES_TEXTS, THIRD_PARTY_ROUTES, TIME_RANGES, TOASTR_MESSAGES, TWILIO_SELECTORS, TagsApi, TagsPage, TeamMembers, ThankYouApi, ThankYouPage, TwilioApi, USER_AGENTS, WEBHOOK_SELECTORS, WebhookSiteApi, WebhooksPage, ZAPIER_LIMIT_EXHAUSTED_MESSAGE, ZAPIER_SELECTORS, ZAPIER_TEST_EMAIL, ZAPIER_WEB_TEXTS, ZapierPage, baseURLGenerator, basicHTMLContent, clearCredentials, commands, cpuThrottlingUsingCDP, createOrganizationViaRake, currencyUtils, dataQa, decodeQRCodeFromFile, definePlaywrightConfig, executeWithThrottledResources, extractSubdomainFromError, fillCredentialsAndSubmit, filterUtils, generatePhoneNumber, generatePhoneNumberDetails, generateRandomBypassEmail, generateRandomFile, generateStagingData, getByDataQA, getClipboardContent, getFormattedPhoneNumber, getFullUrl, getGlobalUserProps, getGlobalUserState, getImagePathAndName, getIsoCodeFromPhoneCode, getListCount, globalShortcuts, grantClipboardPermissions, hexToRGB, hexToRGBA, i18nFixture, imageRegex, initializeCredentials, initializeTestData, initializeTotp, isGithubIssueOpen, joinHyphenCase, joinString, login, loginWithoutSSO, networkConditions, networkThrottlingUsingCDP, readFileSyncIfExists, removeCredentialFile, serializeFileForBrowser, shouldSkipCustomDomainSetup, shouldSkipSetupAndTeardown, simulateClickWithDelay, simulateTypingWithDelay, skipTest, squish, stealth as stealthTest, tableUtils, toCamelCase, updateCredentials, warmup, writeDataToFile };
126051
+ 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, EmailDeliveryUtils, 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_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, NeetoEmailDeliveryApi, NeetoTowerApi, ONBOARDING_SELECTORS, ORGANIZATION_TEXTS, OTP_EMAIL_PATTERN, OrganizationPage, PAST_TIME_RANGES, PHONE_NUMBER_FORMATS, PLURAL, PROFILE_LINKS, PROFILE_SECTION_SELECTORS, PROJECT_NAMES, PROJECT_TRANSLATIONS_PATH, ROLES_SELECTORS, ROUTES, RailsEmailApiClient, RailsEmailUtils, RoleApis, RolesPage, SIGNUP_SELECTORS, SINGULAR, SLACK_DATA_QA_SELECTORS, SLACK_DEFAULT_CHANNEL, SLACK_SELECTORS, SLACK_WEB_TEXTS, STATUS_TEXTS, STORAGE_STATE, SecurityApi, SidebarSection, SlackApi, SlackPage, TABLE_SELECTORS, TAB_SELECTORS, TAGS_SELECTORS, TEAM_MEMBER_TEXTS, TEXT_MODIFIER_ROLES, TEXT_MODIFIER_SELECTORS, TEXT_MODIFIER_TAGS, THANK_YOU_SELECTORS, THEMES_SELECTORS, THEMES_TEXTS, THIRD_PARTY_ROUTES, TIME_RANGES, TOASTR_MESSAGES, TWILIO_SELECTORS, TagsApi, TagsPage, TeamMembers, ThankYouApi, ThankYouPage, TwilioApi, USER_AGENTS, WEBHOOK_SELECTORS, WebhookSiteApi, WebhooksPage, ZAPIER_LIMIT_EXHAUSTED_MESSAGE, ZAPIER_SELECTORS, ZAPIER_TEST_EMAIL, ZAPIER_WEB_TEXTS, ZapierPage, baseURLGenerator, basicHTMLContent, clearCredentials, commands, cpuThrottlingUsingCDP, createOrganizationViaRake, currencyUtils, dataQa, decodeQRCodeFromFile, definePlaywrightConfig, executeWithThrottledResources, extractSubdomainFromError, fillCredentialsAndSubmit, filterUtils, generatePhoneNumber, generatePhoneNumberDetails, generateRandomBypassEmail, generateRandomFile, generateStagingData, getByDataQA, getClipboardContent, getFormattedPhoneNumber, getFullUrl, getGlobalUserProps, getGlobalUserState, getImagePathAndName, getIsoCodeFromPhoneCode, getListCount, globalShortcuts, grantClipboardPermissions, hexToRGB, hexToRGBA, i18nFixture, imageRegex, initializeCredentials, initializeTestData, initializeTotp, isGithubIssueOpen, joinHyphenCase, joinString, login, loginWithoutSSO, networkConditions, networkThrottlingUsingCDP, readFileSyncIfExists, removeCredentialFile, serializeFileForBrowser, shouldSkipCustomDomainSetup, shouldSkipSetupAndTeardown, simulateClickWithDelay, simulateTypingWithDelay, skipTest, squish, stealth as stealthTest, tableUtils, toCamelCase, updateCredentials, warmup, writeDataToFile };
125967
126052
  //# sourceMappingURL=index.js.map