@bigbinary/neeto-playwright-commons 3.0.4 → 3.0.6

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
@@ -783,53 +783,6 @@ declare class MemberApis {
783
783
  update: (memberId: string, body: Record<string, unknown>) => Promise<playwright_core.APIResponse | undefined>;
784
784
  bulkUpdate: (body: Record<string, unknown>) => Promise<playwright_core.APIResponse | undefined>;
785
785
  }
786
- type EmailDeliveryProvider = "gmail" | "outlook";
787
- interface EmailDeliveryConnectParams {
788
- emailProvider: EmailDeliveryProvider;
789
- refreshToken: string;
790
- ownerId?: string;
791
- }
792
- interface EmailDeliveryVerifyEmailParams {
793
- emailProvider: EmailDeliveryProvider;
794
- subject: string;
795
- to: string;
796
- from: string;
797
- body?: string;
798
- ownerId?: string;
799
- }
800
- interface EmailDeliveryVerifiedEmail {
801
- subject: string;
802
- from: string;
803
- to: string;
804
- date: string;
805
- body: string;
806
- }
807
- interface EmailDeliveryVerifyEmailResponse {
808
- exists: boolean;
809
- email?: EmailDeliveryVerifiedEmail;
810
- }
811
- declare class NeetoEmailDeliveryApi {
812
- private neetoPlaywrightUtilities;
813
- constructor(neetoPlaywrightUtilities: CustomCommands);
814
- /**
815
- *
816
- * Connects an integration. It takes the following parameters:
817
- *
818
- * skipGoTo: Boolean indicating whether to skip navigating to integration index (default: false).
819
- *
820
- * @example
821
- *
822
- * await integrationBase.connect();
823
- * // OR
824
- * await integrationBase.connect(true);
825
- * @endexample
826
- */
827
- connect: ({
828
- ownerId,
829
- ...payload
830
- }: EmailDeliveryConnectParams) => Promise<playwright_core.APIResponse | undefined>;
831
- verifyEmail: (params: EmailDeliveryVerifyEmailParams) => Promise<playwright_core.APIResponse | undefined>;
832
- }
833
786
  type EmailAddress = string | string[];
834
787
  interface RailsEmailAttachment {
835
788
  name: string;
@@ -868,6 +821,7 @@ declare class RailsEmailApiClient {
868
821
  listEmails: (searchParams?: RailsEmailSearchParams) => Promise<RailsEmail[]>;
869
822
  getLatestEmail: (searchParams?: RailsEmailSearchParams) => Promise<RailsEmail | null>;
870
823
  clearEmails: () => Promise<unknown>;
824
+ clearStaleEmails: (receivedBefore: string) => Promise<unknown>;
871
825
  }
872
826
  declare class RoleApis {
873
827
  private neetoPlaywrightUtilities;
@@ -1201,7 +1155,8 @@ declare class RailsEmailUtils {
1201
1155
  constructor(neetoPlaywrightUtilities: CustomCommands);
1202
1156
  private convertRailsEmailToFormattedList;
1203
1157
  clearEmails: () => Promise<unknown>;
1204
- getLatestEmail: (searchParams: RailsEmailSearchParams) => Promise<RailsEmail | null>;
1158
+ clearStaleEmails: () => Promise<unknown>;
1159
+ getLatestEmail: (searchParams: RailsEmailSearchParams) => Promise<void>;
1205
1160
  listEmails: (searchParams?: RailsEmailSearchParams) => Promise<RailsEmail[]>;
1206
1161
  /**
1207
1162
  *
@@ -8972,6 +8927,58 @@ declare class NeetoAuthServer {
8972
8927
  start: () => Promise<void>;
8973
8928
  stop: () => Promise<void>;
8974
8929
  }
8930
+ type EmailDeliveryProvider = "gmail" | "outlook" | "sparkpost";
8931
+ type OAuthEmailDeliveryProvider = Exclude<EmailDeliveryProvider, "sparkpost">;
8932
+ type EmailDeliveryConnectParams = {
8933
+ emailProvider: OAuthEmailDeliveryProvider;
8934
+ refreshToken: string;
8935
+ ownerId?: string;
8936
+ } | {
8937
+ emailProvider: "sparkpost";
8938
+ email: string;
8939
+ ownerId?: string;
8940
+ };
8941
+ interface EmailDeliveryVerifyEmailParams {
8942
+ emailProvider: EmailDeliveryProvider;
8943
+ subject: string;
8944
+ to: string;
8945
+ from: string;
8946
+ body?: string;
8947
+ ownerId?: string;
8948
+ }
8949
+ interface EmailDeliveryVerifiedEmail {
8950
+ subject: string;
8951
+ from: string;
8952
+ to: string;
8953
+ date: string;
8954
+ body: string | null;
8955
+ }
8956
+ interface EmailDeliveryVerifyEmailResponse {
8957
+ exists: boolean;
8958
+ email?: EmailDeliveryVerifiedEmail;
8959
+ }
8960
+ declare class NeetoEmailDeliveryApi {
8961
+ private neetoPlaywrightUtilities;
8962
+ constructor(neetoPlaywrightUtilities: CustomCommands);
8963
+ /**
8964
+ *
8965
+ * Connects an integration. It takes the following parameters:
8966
+ *
8967
+ * skipGoTo: Boolean indicating whether to skip navigating to integration index (default: false).
8968
+ *
8969
+ * @example
8970
+ *
8971
+ * await integrationBase.connect();
8972
+ * // OR
8973
+ * await integrationBase.connect(true);
8974
+ * @endexample
8975
+ */
8976
+ connect: ({
8977
+ ownerId,
8978
+ ...payload
8979
+ }: EmailDeliveryConnectParams) => Promise<playwright_core.APIResponse | undefined>;
8980
+ verifyEmail: (params: EmailDeliveryVerifyEmailParams) => Promise<playwright_core.APIResponse | undefined>;
8981
+ }
8975
8982
  interface ConnectRequestParams {
8976
8983
  provider: EmailDeliveryProvider;
8977
8984
  ownerId?: string;
@@ -9055,4 +9062,4 @@ interface Overrides {
9055
9062
  */
9056
9063
  declare const definePlaywrightConfig: (overrides: Overrides) => PlaywrightTestConfig<{}, {}>;
9057
9064
  export { ACTIONS, ADMIN_PANEL_SELECTORS, 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, 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, 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_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, joinHyphenCase, joinString, login, loginWithoutSSO, networkConditions, networkThrottlingUsingCDP, readFileSyncIfExists, removeCredentialFile, serializeFileForBrowser, shouldSkipCustomDomainSetup, shouldSkipSetupAndTeardown, simulateClickWithDelay, simulateTypingWithDelay, skipTest, squish, _default as stealthTest, tableUtils, toCamelCase, updateCredentials, warmup, writeDataToFile };
9058
- export type { BaseThemeStyle, BaseThemeStyleType, ColumnMenuAction, CountryProps, CustomFixture, EmailDeliveryConnectParams, EmailDeliveryProvider, EmailDeliveryVerifiedEmail, EmailDeliveryVerifyEmailParams, EmailDeliveryVerifyEmailResponse, EmailMatchCriteria, IntroPageThemeStyle, IntroPageThemeStyleType, ProjectName, ThemeCategory, ValueOf };
9065
+ export type { BaseThemeStyle, BaseThemeStyleType, ColumnMenuAction, CountryProps, CustomFixture, EmailDeliveryConnectParams, EmailDeliveryProvider, EmailDeliveryVerifiedEmail, EmailDeliveryVerifyEmailParams, EmailDeliveryVerifyEmailResponse, EmailMatchCriteria, IntroPageThemeStyle, IntroPageThemeStyleType, OAuthEmailDeliveryProvider, ProjectName, ThemeCategory, ValueOf };
package/index.js CHANGED
@@ -319,23 +319,6 @@ class MemberApis {
319
319
  });
320
320
  }
321
321
 
322
- const NEETO_EMAIL_DELIVERY_TESTING_BASE_URL = "/neeto_email_delivery/api/v1/testing";
323
- class NeetoEmailDeliveryApi {
324
- neetoPlaywrightUtilities;
325
- constructor(neetoPlaywrightUtilities) {
326
- this.neetoPlaywrightUtilities = neetoPlaywrightUtilities;
327
- }
328
- connect = ({ ownerId, ...payload }) => this.neetoPlaywrightUtilities.apiRequest({
329
- method: "post",
330
- url: `${NEETO_EMAIL_DELIVERY_TESTING_BASE_URL}/connect`,
331
- body: keysToSnakeCase({ ownerId, connect: payload }),
332
- });
333
- verifyEmail = (params) => this.neetoPlaywrightUtilities.apiRequest({
334
- url: `${NEETO_EMAIL_DELIVERY_TESTING_BASE_URL}/verify_email`,
335
- params: keysToSnakeCase(params),
336
- });
337
- }
338
-
339
322
  class RailsEmailApiClient {
340
323
  port = process.env.RAILS_SERVER_PORT;
341
324
  subdomain = process.env.SUBDOMAIN ?? "spinkart";
@@ -393,6 +376,7 @@ class RailsEmailApiClient {
393
376
  clearEmails = () => this.fetchJson(this.emailsEndpoint, {
394
377
  method: "DELETE",
395
378
  });
379
+ clearStaleEmails = (receivedBefore) => this.fetchJson(`${this.emailsEndpoint}?received_before=${encodeURIComponent(receivedBefore)}`, { method: "DELETE" });
396
380
  }
397
381
 
398
382
  class RoleApis {
@@ -60453,7 +60437,14 @@ class RailsEmailUtils {
60453
60437
  };
60454
60438
  };
60455
60439
  clearEmails = () => this.railsEmailClient.clearEmails();
60456
- getLatestEmail = (searchParams) => this.railsEmailClient.getLatestEmail(searchParams);
60440
+ clearStaleEmails = () => {
60441
+ const tenMinutesAgo = new Date(Date.now() - 10 * 60 * 1000);
60442
+ return this.railsEmailClient.clearStaleEmails(tenMinutesAgo.toISOString());
60443
+ };
60444
+ getLatestEmail = async (searchParams) => {
60445
+ await this.clearStaleEmails();
60446
+ await this.railsEmailClient.getLatestEmail(searchParams);
60447
+ };
60457
60448
  listEmails = (searchParams) => this.railsEmailClient.listEmails(searchParams);
60458
60449
  listMessages = async (messageSearchCriteria = {}, { receivedAfter = new Date(new Date().valueOf() - 60 * 60 * 1000), } = {}) => {
60459
60450
  const emails = await this.railsEmailClient.listEmails({
@@ -107383,6 +107374,7 @@ const commands = {
107383
107374
  const mailerUtils = new MailerUtils(neetoPlaywrightUtilities);
107384
107375
  await mailerUtils.fastmailApi.authorizeAndSetAccountId();
107385
107376
  await use(mailerUtils);
107377
+ IS_DEV_ENV && (await mailerUtils.railsEmailUtils.clearStaleEmails());
107386
107378
  },
107387
107379
  colorPicker: async ({ page }, use) => {
107388
107380
  const colorPicker = new ColorPickerUtils(page);
@@ -125267,6 +125259,23 @@ class NeetoAuthServer {
125267
125259
  };
125268
125260
  }
125269
125261
 
125262
+ const NEETO_EMAIL_DELIVERY_TESTING_BASE_URL = "/neeto_email_delivery/api/v1/testing";
125263
+ class NeetoEmailDeliveryApi {
125264
+ neetoPlaywrightUtilities;
125265
+ constructor(neetoPlaywrightUtilities) {
125266
+ this.neetoPlaywrightUtilities = neetoPlaywrightUtilities;
125267
+ }
125268
+ connect = ({ ownerId, ...payload }) => this.neetoPlaywrightUtilities.apiRequest({
125269
+ method: "post",
125270
+ url: `${NEETO_EMAIL_DELIVERY_TESTING_BASE_URL}/connect`,
125271
+ body: keysToSnakeCase({ ownerId, connect: payload }),
125272
+ });
125273
+ verifyEmail = (params) => this.neetoPlaywrightUtilities.apiRequest({
125274
+ url: `${NEETO_EMAIL_DELIVERY_TESTING_BASE_URL}/verify_email`,
125275
+ params: keysToSnakeCase(params),
125276
+ });
125277
+ }
125278
+
125270
125279
  const REFRESH_TOKEN_ENV_KEYS = {
125271
125280
  gmail: "EMAIL_DELIVERY_GMAIL_REFRESH_TOKEN",
125272
125281
  outlook: "EMAIL_DELIVERY_OUTLOOK_REFRESH_TOKEN",
@@ -125274,6 +125283,7 @@ const REFRESH_TOKEN_ENV_KEYS = {
125274
125283
  const FROM_EMAIL_ENV_KEYS = {
125275
125284
  gmail: "EMAIL_DELIVERY_CONNECTED_GMAIL",
125276
125285
  outlook: "EMAIL_DELIVERY_CONNECTED_OUTLOOK",
125286
+ sparkpost: "EMAIL_DELIVERY_CONNECTED_SPARKPOST",
125277
125287
  };
125278
125288
  class EmailDeliveryUtils {
125279
125289
  neetoPlaywrightUtilities;
@@ -125283,6 +125293,20 @@ class EmailDeliveryUtils {
125283
125293
  this.emailDeliveryApi = new NeetoEmailDeliveryApi(neetoPlaywrightUtilities);
125284
125294
  }
125285
125295
  connectViaRequest = async ({ provider, ownerId }) => {
125296
+ if (provider === "sparkpost") {
125297
+ const sparkpostEmailEnvKey = FROM_EMAIL_ENV_KEYS.sparkpost;
125298
+ const email = process.env[sparkpostEmailEnvKey];
125299
+ if (isNil(email)) {
125300
+ throw new Error(`ENV variable ${sparkpostEmailEnvKey} is not properly configured`);
125301
+ }
125302
+ const response = await this.emailDeliveryApi.connect({
125303
+ emailProvider: "sparkpost",
125304
+ email,
125305
+ ownerId,
125306
+ });
125307
+ expect(response?.ok()).toBeTruthy();
125308
+ return response;
125309
+ }
125286
125310
  const refreshTokenEnvKey = REFRESH_TOKEN_ENV_KEYS[provider];
125287
125311
  const refreshToken = process.env[refreshTokenEnvKey];
125288
125312
  if (isNil(refreshToken)) {