@bigbinary/neeto-playwright-commons 4.7.3 → 4.7.4
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/README.md +1 -0
- package/index.d.ts +123 -2
- package/index.js +90 -2
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -127,6 +127,7 @@ This package is published as ESM-only. Use `import` syntax and avoid CommonJS `r
|
|
|
127
127
|
- [Routes](./docs/routes.md)
|
|
128
128
|
- [Custom commands](./docs/custom-commands.md)
|
|
129
129
|
- [MailerUtils](./docs/utils/mailer-utils.md)
|
|
130
|
+
- [SmsUtils](./docs/utils/sms-utils.md)
|
|
130
131
|
- [EmailDeliveryUtils](./docs/utils/email-delivery-utils.md)
|
|
131
132
|
- [InboundEmailApis](./docs/utils/inbound-email-apis.md)
|
|
132
133
|
- [NeetoAuthServer](./docs/utils/neeto-auth-server.md)
|
package/index.d.ts
CHANGED
|
@@ -2175,6 +2175,125 @@ declare class QRCodeUtils {
|
|
|
2175
2175
|
*/
|
|
2176
2176
|
decodeQRCodeFromFile: (filePath: string) => Promise<string | undefined>;
|
|
2177
2177
|
}
|
|
2178
|
+
type SmsProvider = "twilio" | "telnyx";
|
|
2179
|
+
interface SmsFilters {
|
|
2180
|
+
to: string;
|
|
2181
|
+
from: string;
|
|
2182
|
+
body: string;
|
|
2183
|
+
provider: SmsProvider;
|
|
2184
|
+
}
|
|
2185
|
+
type SmsSearchParams = Partial<SmsFilters & {
|
|
2186
|
+
receivedAfter: string;
|
|
2187
|
+
}>;
|
|
2188
|
+
interface Sms extends SmsFilters {
|
|
2189
|
+
options?: Record<string, unknown>;
|
|
2190
|
+
receivedAt: string;
|
|
2191
|
+
}
|
|
2192
|
+
declare class SmsApi {
|
|
2193
|
+
private neetoPlaywrightUtilities;
|
|
2194
|
+
constructor(neetoPlaywrightUtilities: CustomCommands);
|
|
2195
|
+
fetchSms: (searchParams?: SmsSearchParams) => Promise<Sms[]>;
|
|
2196
|
+
deleteSms: (receivedBefore: string) => Promise<playwright_core.APIResponse | undefined>;
|
|
2197
|
+
/**
|
|
2198
|
+
*
|
|
2199
|
+
* Deletes every captured SMS for the app. Use it only when no other test or parallel worker asserts on SMS at the same time.
|
|
2200
|
+
*
|
|
2201
|
+
* @example
|
|
2202
|
+
*
|
|
2203
|
+
* await smsUtils.purgeAllSms();
|
|
2204
|
+
* @endexample
|
|
2205
|
+
*/
|
|
2206
|
+
purgeAllSms: () => Promise<playwright_core.APIResponse | undefined>;
|
|
2207
|
+
}
|
|
2208
|
+
type SmsSearchCriteria = Omit<SmsSearchParams, "receivedAfter"> & {
|
|
2209
|
+
receivedAfter?: Date;
|
|
2210
|
+
};
|
|
2211
|
+
interface WaitForSmsOptions {
|
|
2212
|
+
timeout?: number;
|
|
2213
|
+
expectedSmsCount?: number;
|
|
2214
|
+
shouldThrowErrorOnTimeout?: boolean;
|
|
2215
|
+
}
|
|
2216
|
+
declare class SmsUtils {
|
|
2217
|
+
private neetoPlaywrightUtilities;
|
|
2218
|
+
smsApi: SmsApi;
|
|
2219
|
+
constructor(neetoPlaywrightUtilities: CustomCommands);
|
|
2220
|
+
private toSearchParams;
|
|
2221
|
+
/**
|
|
2222
|
+
*
|
|
2223
|
+
* Lists the captured SMS that match the criteria.
|
|
2224
|
+
*
|
|
2225
|
+
* @example
|
|
2226
|
+
*
|
|
2227
|
+
* const messages = await smsUtils.listSms({
|
|
2228
|
+
* to: process.env.TWILIO_INCOMING_PHONE_NUMBER,
|
|
2229
|
+
* from: process.env.TWILIO_DEFAULT_PHONE_NUMBER,
|
|
2230
|
+
* body: smsContent,
|
|
2231
|
+
* provider: "twilio",
|
|
2232
|
+
* receivedAfter: bookingCreatedAt,
|
|
2233
|
+
* });
|
|
2234
|
+
* @endexample
|
|
2235
|
+
*/
|
|
2236
|
+
listSms: (criteria?: SmsSearchCriteria) => Promise<Sms[]>;
|
|
2237
|
+
/**
|
|
2238
|
+
*
|
|
2239
|
+
* Polls until a matching SMS arrives or the timeout fires. Returns the latest matching SMS.
|
|
2240
|
+
*
|
|
2241
|
+
* @example
|
|
2242
|
+
*
|
|
2243
|
+
* const receivedAfter = new Date();
|
|
2244
|
+
*
|
|
2245
|
+
* await automationRulesApis.triggerAutomationRules(bookingSid, "before_meeting_starts");
|
|
2246
|
+
*
|
|
2247
|
+
* const sms = await smsUtils.waitForSms(
|
|
2248
|
+
* {
|
|
2249
|
+
* to: process.env.TWILIO_INCOMING_PHONE_NUMBER,
|
|
2250
|
+
* from: process.env.TWILIO_DEFAULT_PHONE_NUMBER,
|
|
2251
|
+
* body: smsContents.client,
|
|
2252
|
+
* provider: "twilio",
|
|
2253
|
+
* receivedAfter,
|
|
2254
|
+
* },
|
|
2255
|
+
* { timeout: MESSAGE_DELIVERY_TIMEOUT_WITH_BUFFER }
|
|
2256
|
+
* );
|
|
2257
|
+
* @endexample
|
|
2258
|
+
*/
|
|
2259
|
+
waitForSms: (criteria?: SmsSearchCriteria, {
|
|
2260
|
+
timeout,
|
|
2261
|
+
expectedSmsCount,
|
|
2262
|
+
shouldThrowErrorOnTimeout
|
|
2263
|
+
}?: WaitForSmsOptions) => Promise<Sms | Record<string, never>>;
|
|
2264
|
+
/**
|
|
2265
|
+
*
|
|
2266
|
+
* Asserts that no matching SMS arrives: polls for the full timeout and throws as soon as any matching SMS is captured. On success (no SMS arrived) it returns {}.
|
|
2267
|
+
*
|
|
2268
|
+
* @example
|
|
2269
|
+
*
|
|
2270
|
+
* await smsUtils.expectNoSms({ to: unsubscribedPhoneNumber, receivedAfter });
|
|
2271
|
+
* @endexample
|
|
2272
|
+
*/
|
|
2273
|
+
expectNoSms: (criteria?: SmsSearchCriteria, {
|
|
2274
|
+
timeout
|
|
2275
|
+
}?: Pick<WaitForSmsOptions, "timeout">) => Promise<Record<string, never> | Sms>;
|
|
2276
|
+
/**
|
|
2277
|
+
*
|
|
2278
|
+
* Deletes the captured SMS that are older than the cutoff. Use this, not purgeAllSms, between tests. All parallel workers share one capture list. A full purge from one worker deletes the SMS that other workers still poll for.
|
|
2279
|
+
*
|
|
2280
|
+
* @example
|
|
2281
|
+
*
|
|
2282
|
+
* await smsUtils.clearStaleSms(minutesAgo(10));
|
|
2283
|
+
* @endexample
|
|
2284
|
+
*/
|
|
2285
|
+
clearStaleSms: (receivedBefore?: Date) => Promise<playwright_core.APIResponse | undefined>;
|
|
2286
|
+
/**
|
|
2287
|
+
*
|
|
2288
|
+
* Deletes every captured SMS for the app. Use it only when no other test or parallel worker asserts on SMS at the same time.
|
|
2289
|
+
*
|
|
2290
|
+
* @example
|
|
2291
|
+
*
|
|
2292
|
+
* await smsUtils.purgeAllSms();
|
|
2293
|
+
* @endexample
|
|
2294
|
+
*/
|
|
2295
|
+
purgeAllSms: () => Promise<playwright_core.APIResponse | undefined>;
|
|
2296
|
+
}
|
|
2178
2297
|
type Hex = Lowercase<`#${string}`>;
|
|
2179
2298
|
interface BaseThemeStyle {
|
|
2180
2299
|
primaryColor: Hex;
|
|
@@ -2248,6 +2367,7 @@ interface CustomFixture {
|
|
|
2248
2367
|
page: Page;
|
|
2249
2368
|
health: Health;
|
|
2250
2369
|
mailerUtils: MailerUtils;
|
|
2370
|
+
smsUtils: SmsUtils;
|
|
2251
2371
|
colorPicker: ColorPickerUtils;
|
|
2252
2372
|
qrCodeUtils: QRCodeUtils;
|
|
2253
2373
|
}
|
|
@@ -9376,6 +9496,7 @@ declare const initializeTestData: (product: NeetoProducts) => {
|
|
|
9376
9496
|
baseURL: string;
|
|
9377
9497
|
};
|
|
9378
9498
|
declare const imageRegex: (imageName: string) => RegExp;
|
|
9499
|
+
declare const minutesAgo: (minutes: number) => Date;
|
|
9379
9500
|
/**
|
|
9380
9501
|
*
|
|
9381
9502
|
* Wraps a login function with a Redis-backed cookie cache so that only one Playwright shard per provider performs a full OAuth login. Subsequent shards skip the login by restoring the cached cookies from Redis.
|
|
@@ -10327,5 +10448,5 @@ declare class InboundEmailApis {
|
|
|
10327
10448
|
reply: (emailParams: ReplyInboundEmailParams) => Promise<playwright_core.APIResponse | undefined>;
|
|
10328
10449
|
private deliverSource;
|
|
10329
10450
|
}
|
|
10330
|
-
export { ACTIONS, ADMIN_PANEL_SELECTORS, ALL_RESOURCES, ANALYTICS_RESOURCES, API_KEYS_SELECTORS, API_ROUTES, APP_RESOURCES, AUDIT_LOGS_SELECTORS, ApiKeysApi, ApiKeysPage, ApiKeysPageV2, AuditLogsPage, BASE_URL, CALENDAR_LABELS, CERTIFICATE_LIMIT_EXCEEDED_MESSAGE, CERTIFICATE_LIMIT_EXCEEDED_REGEXP, CHANGELOG_WIDGET_SELECTORS, CHAT_WIDGET_SELECTORS, CHAT_WIDGET_TEXTS, COLOR, COMMON_SELECTORS, COMMON_TEXTS, COMMUNITY_TEXTS, CREDENTIALS, CURRENT_TIME_RANGES, CUSTOM_DOMAIN_SELECTORS, CUSTOM_DOMAIN_SUFFIX, ColorPickerUtils, CustomCommands, CustomCommandsV2, CustomDomainApi, CustomDomainPage, DATE_FORMATS, DATE_PICKER_SELECTORS, DATE_RANGES, DATE_TEXTS, DEFAULT_TIMEZONE_ID, DEFAULT_WEBHOOKS_RESPONSE_TEXT, DESCRIPTION_EDITOR_TEXTS, EDITOR_VERIFY_TEXT_COLOR, 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, HelpAndProfilePageV2, INTEGRATIONS_TEXTS, INTEGRATION_SELECTORS, IPRestrictionsPage, IP_RESTRICTIONS_SELECTORS, IS_CI, IS_DEV_ENV, IS_MAILPIT_ENABLED, IS_SHADCN_UI, IS_STAGING_ENV, ImageUploader, InboundEmailApis, IntegrationBase, IpRestrictionsApi, KEYBOARD_SHORTCUTS_SELECTORS, KEYBOARD_SHORTCUT_TEST_CASES, LIST_MODIFIER_SELECTORS, LIST_MODIFIER_TAGS, LOGIN_SELECTORS, MAILPIT_BASE_URL, MAILPIT_DOMAIN_NAME, MEMBER_FORM_SELECTORS, MEMBER_SELECTORS, MEMBER_TEXTS, MERGE_TAGS_SELECTORS, MICROSOFT_LOGIN_SELECTORS, MICROSOFT_LOGIN_TEXTS, MailerUtils, MailpitApi, Member, MemberApis, MicrosoftPage, NEETO_AUTH_BASE_URL, NEETO_EDITOR_SELECTORS, NEETO_FILTERS_SELECTORS, NEETO_IMAGE_UPLOADER_SELECTORS, NEETO_ROUTES, NEETO_SEO_SELECTORS, NEETO_TEXT_MODIFIER_SELECTORS, NeetoAuthServer, NeetoChatWidget, NeetoEmailDeliveryApi, NeetoTowerApi, ONBOARDING_SELECTORS, ORGANIZATION_TEXTS, OTP_EMAIL_PATTERN, OrganizationPage, PAST_TIME_RANGES, PHONE_NUMBER_FORMATS, PLURAL, PRODUCT_ROLES_ROUTE_MAP, PROFILE_LINKS, PROFILE_SECTION_SELECTORS, PROJECT_NAMES, PROJECT_TRANSLATIONS_PATH, ROLES_SELECTORS, ROUTES, RailsEmailApiClient, RailsEmailUtils, RoleApis, RolesPage, RolesPageV2, 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, TeamMembersV2, ThankYouApi, ThankYouPage, TwilioApi, USER_AGENTS, WEBHOOK_SELECTORS, WebhookSiteApi, WebhooksPage, ZAPIER_LIMIT_EXHAUSTED_MESSAGE, ZAPIER_SELECTORS, ZAPIER_TEST_EMAIL, ZAPIER_TEST_EMAIL_V2, ZAPIER_WEB_TEXTS, ZapierPage, authenticateUser, baseURLGenerator, basicHTMLContent, clearCredentials, commands, cpuThrottlingUsingCDP, createOrganizationViaApi, createOrganizationViaRake, currencyUtils, dataQa, decodeQRCodeFromFile, definePlaywrightConfig, executeWithThrottledResources, extractSubdomainFromError, filterUtils, fixedMenuSelector, generatePhoneNumber, generatePhoneNumberDetails, generateRandomBypassEmail, generateRandomFile, generateStagingData, getByDataQA, getClipboardContent, getDirname, getFormattedPhoneNumber, getFullUrl, getGlobalUserProps, getGlobalUserState, getImagePathAndName, getIsoCodeFromPhoneCode, getListCount, globalShortcuts, grantClipboardPermissions, hexToRGB, hexToRGBA, i18nFixture, imageRegex, initializeCredentials, initializeTestData, initializeTotp, isGithubIssueOpen, isStagingOrganizationExpired, joinHyphenCase, joinString, login, mailpitDomainName, networkConditions, networkThrottlingUsingCDP, optionSelector, readFileAsBrowserFile, readFileSyncIfExists, removeCredentialFile, serializeFileForBrowser, shouldSkipCustomDomainSetup, shouldSkipSetupAndTeardown, simulateClickWithDelay, simulateTypingWithDelay, skipTest, squish, _default as stealthTest, tableUtils, toCamelCase, updateCredentials, warmup, withCookieCache, writeDataToFile };
|
|
10331
|
-
export type { BaseThemeStyle, BaseThemeStyleType, ColumnMenuAction, CountryProps, CustomFixture, EmailDeliveryConnectParams, EmailDeliveryProvider, EmailDeliveryVerifiedEmail, EmailDeliveryVerifyEmailParams, EmailDeliveryVerifyEmailResponse, EmailMatchCriteria, InboundEmailParams, IntroPageThemeStyle, IntroPageThemeStyleType, OAuthEmailDeliveryProvider, ProjectName, ReplyInboundEmailParams, ThemeCategory, ValueOf };
|
|
10451
|
+
export { ACTIONS, ADMIN_PANEL_SELECTORS, ALL_RESOURCES, ANALYTICS_RESOURCES, API_KEYS_SELECTORS, API_ROUTES, APP_RESOURCES, AUDIT_LOGS_SELECTORS, ApiKeysApi, ApiKeysPage, ApiKeysPageV2, AuditLogsPage, BASE_URL, CALENDAR_LABELS, CERTIFICATE_LIMIT_EXCEEDED_MESSAGE, CERTIFICATE_LIMIT_EXCEEDED_REGEXP, CHANGELOG_WIDGET_SELECTORS, CHAT_WIDGET_SELECTORS, CHAT_WIDGET_TEXTS, COLOR, COMMON_SELECTORS, COMMON_TEXTS, COMMUNITY_TEXTS, CREDENTIALS, CURRENT_TIME_RANGES, CUSTOM_DOMAIN_SELECTORS, CUSTOM_DOMAIN_SUFFIX, ColorPickerUtils, CustomCommands, CustomCommandsV2, CustomDomainApi, CustomDomainPage, DATE_FORMATS, DATE_PICKER_SELECTORS, DATE_RANGES, DATE_TEXTS, DEFAULT_TIMEZONE_ID, DEFAULT_WEBHOOKS_RESPONSE_TEXT, DESCRIPTION_EDITOR_TEXTS, EDITOR_VERIFY_TEXT_COLOR, 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, HelpAndProfilePageV2, INTEGRATIONS_TEXTS, INTEGRATION_SELECTORS, IPRestrictionsPage, IP_RESTRICTIONS_SELECTORS, IS_CI, IS_DEV_ENV, IS_MAILPIT_ENABLED, IS_SHADCN_UI, IS_STAGING_ENV, ImageUploader, InboundEmailApis, IntegrationBase, IpRestrictionsApi, KEYBOARD_SHORTCUTS_SELECTORS, KEYBOARD_SHORTCUT_TEST_CASES, LIST_MODIFIER_SELECTORS, LIST_MODIFIER_TAGS, LOGIN_SELECTORS, MAILPIT_BASE_URL, MAILPIT_DOMAIN_NAME, MEMBER_FORM_SELECTORS, MEMBER_SELECTORS, MEMBER_TEXTS, MERGE_TAGS_SELECTORS, MICROSOFT_LOGIN_SELECTORS, MICROSOFT_LOGIN_TEXTS, MailerUtils, MailpitApi, Member, MemberApis, MicrosoftPage, NEETO_AUTH_BASE_URL, NEETO_EDITOR_SELECTORS, NEETO_FILTERS_SELECTORS, NEETO_IMAGE_UPLOADER_SELECTORS, NEETO_ROUTES, NEETO_SEO_SELECTORS, NEETO_TEXT_MODIFIER_SELECTORS, NeetoAuthServer, NeetoChatWidget, NeetoEmailDeliveryApi, NeetoTowerApi, ONBOARDING_SELECTORS, ORGANIZATION_TEXTS, OTP_EMAIL_PATTERN, OrganizationPage, PAST_TIME_RANGES, PHONE_NUMBER_FORMATS, PLURAL, PRODUCT_ROLES_ROUTE_MAP, PROFILE_LINKS, PROFILE_SECTION_SELECTORS, PROJECT_NAMES, PROJECT_TRANSLATIONS_PATH, ROLES_SELECTORS, ROUTES, RailsEmailApiClient, RailsEmailUtils, RoleApis, RolesPage, RolesPageV2, SIGNUP_SELECTORS, SINGULAR, SLACK_DATA_QA_SELECTORS, SLACK_DEFAULT_CHANNEL, SLACK_SELECTORS, SLACK_WEB_TEXTS, STATUS_TEXTS, STORAGE_STATE, SecurityApi, SidebarSection, SlackApi, SlackPage, SmsApi, SmsUtils, 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, TeamMembersV2, ThankYouApi, ThankYouPage, TwilioApi, USER_AGENTS, WEBHOOK_SELECTORS, WebhookSiteApi, WebhooksPage, ZAPIER_LIMIT_EXHAUSTED_MESSAGE, ZAPIER_SELECTORS, ZAPIER_TEST_EMAIL, ZAPIER_TEST_EMAIL_V2, ZAPIER_WEB_TEXTS, ZapierPage, authenticateUser, baseURLGenerator, basicHTMLContent, clearCredentials, commands, cpuThrottlingUsingCDP, createOrganizationViaApi, createOrganizationViaRake, currencyUtils, dataQa, decodeQRCodeFromFile, definePlaywrightConfig, executeWithThrottledResources, extractSubdomainFromError, filterUtils, fixedMenuSelector, generatePhoneNumber, generatePhoneNumberDetails, generateRandomBypassEmail, generateRandomFile, generateStagingData, getByDataQA, getClipboardContent, getDirname, getFormattedPhoneNumber, getFullUrl, getGlobalUserProps, getGlobalUserState, getImagePathAndName, getIsoCodeFromPhoneCode, getListCount, globalShortcuts, grantClipboardPermissions, hexToRGB, hexToRGBA, i18nFixture, imageRegex, initializeCredentials, initializeTestData, initializeTotp, isGithubIssueOpen, isStagingOrganizationExpired, joinHyphenCase, joinString, login, mailpitDomainName, minutesAgo, networkConditions, networkThrottlingUsingCDP, optionSelector, readFileAsBrowserFile, readFileSyncIfExists, removeCredentialFile, serializeFileForBrowser, shouldSkipCustomDomainSetup, shouldSkipSetupAndTeardown, simulateClickWithDelay, simulateTypingWithDelay, skipTest, squish, _default as stealthTest, tableUtils, toCamelCase, updateCredentials, warmup, withCookieCache, writeDataToFile };
|
|
10452
|
+
export type { BaseThemeStyle, BaseThemeStyleType, ColumnMenuAction, CountryProps, CustomFixture, EmailDeliveryConnectParams, EmailDeliveryProvider, EmailDeliveryVerifiedEmail, EmailDeliveryVerifyEmailParams, EmailDeliveryVerifyEmailResponse, EmailMatchCriteria, InboundEmailParams, IntroPageThemeStyle, IntroPageThemeStyleType, OAuthEmailDeliveryProvider, ProjectName, ReplyInboundEmailParams, Sms, SmsFilters, SmsProvider, SmsSearchCriteria, SmsSearchParams, ThemeCategory, ValueOf, WaitForSmsOptions };
|
package/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { isPresent, keysToSnakeCase, hyphenate, humanize, isNotPresent, noop as noop$2, findBy, dynamicArray, truncate, isNotEmpty, isNotEqualDeep, randomPick } from '@bigbinary/neeto-cist';
|
|
1
|
+
import { isPresent, keysToSnakeCase, hyphenate, humanize, isNotPresent, noop as noop$2, keysToCamelCase, findBy, dynamicArray, truncate, isNotEmpty, isNotEqualDeep, randomPick } from '@bigbinary/neeto-cist';
|
|
2
2
|
import { faker } from '@faker-js/faker';
|
|
3
3
|
import * as fs from 'fs';
|
|
4
4
|
import fs__default, { readFileSync, promises, existsSync, writeFileSync, unlinkSync, mkdirSync, rmSync, createWriteStream } from 'fs';
|
|
@@ -1394,6 +1394,7 @@ const imageRegex = (imageName) => {
|
|
|
1394
1394
|
const [baseName, extension] = imageName.split(".");
|
|
1395
1395
|
return new RegExp(`${baseName}.*\\.${extension}$`);
|
|
1396
1396
|
};
|
|
1397
|
+
const minutesAgo = (minutes) => new Date(Date.now() - minutes * 60 * 1000);
|
|
1397
1398
|
|
|
1398
1399
|
const optionSelector = (option) => `neeto-editor-fixed-menu-${option}-option`;
|
|
1399
1400
|
const fixedMenuSelector = (selector) => `neeto-editor-fixed-menu-${selector}`;
|
|
@@ -117047,6 +117048,80 @@ class QRCodeUtils {
|
|
|
117047
117048
|
};
|
|
117048
117049
|
}
|
|
117049
117050
|
|
|
117051
|
+
const TESTING_SMS_PATH = "/api/v1/testing/sms";
|
|
117052
|
+
class SmsApi {
|
|
117053
|
+
neetoPlaywrightUtilities;
|
|
117054
|
+
constructor(neetoPlaywrightUtilities) {
|
|
117055
|
+
this.neetoPlaywrightUtilities = neetoPlaywrightUtilities;
|
|
117056
|
+
}
|
|
117057
|
+
fetchSms = async (searchParams = {}) => {
|
|
117058
|
+
const response = await this.neetoPlaywrightUtilities.apiRequest({
|
|
117059
|
+
url: TESTING_SMS_PATH,
|
|
117060
|
+
params: keysToSnakeCase(searchParams),
|
|
117061
|
+
});
|
|
117062
|
+
if (!response) {
|
|
117063
|
+
throw new Error(`Received no response from GET ${TESTING_SMS_PATH}.`);
|
|
117064
|
+
}
|
|
117065
|
+
return keysToCamelCase(await response.json());
|
|
117066
|
+
};
|
|
117067
|
+
deleteSms = (receivedBefore) => this.neetoPlaywrightUtilities.apiRequest({
|
|
117068
|
+
url: `${TESTING_SMS_PATH}/destroy`,
|
|
117069
|
+
method: "delete",
|
|
117070
|
+
params: keysToSnakeCase({ receivedBefore }),
|
|
117071
|
+
});
|
|
117072
|
+
purgeAllSms = () => this.neetoPlaywrightUtilities.apiRequest({
|
|
117073
|
+
url: `${TESTING_SMS_PATH}/purge_all`,
|
|
117074
|
+
method: "delete",
|
|
117075
|
+
});
|
|
117076
|
+
}
|
|
117077
|
+
|
|
117078
|
+
const toBackendTimestamp = (date) => new Date(Math.floor(date.valueOf() / 1000) * 1000 - 1).toISOString();
|
|
117079
|
+
const findLatestSms = (messages) => messages.reduce((latest, sms) => !latest || new Date(sms.receivedAt) > new Date(latest.receivedAt)
|
|
117080
|
+
? sms
|
|
117081
|
+
: latest, null);
|
|
117082
|
+
class SmsUtils {
|
|
117083
|
+
neetoPlaywrightUtilities;
|
|
117084
|
+
smsApi;
|
|
117085
|
+
constructor(neetoPlaywrightUtilities) {
|
|
117086
|
+
this.neetoPlaywrightUtilities = neetoPlaywrightUtilities;
|
|
117087
|
+
this.smsApi = new SmsApi(neetoPlaywrightUtilities);
|
|
117088
|
+
}
|
|
117089
|
+
toSearchParams = ({ receivedAfter = minutesAgo(60), ...filters }) => ({
|
|
117090
|
+
...filters,
|
|
117091
|
+
receivedAfter: toBackendTimestamp(receivedAfter),
|
|
117092
|
+
});
|
|
117093
|
+
listSms = (criteria = {}) => this.smsApi.fetchSms(this.toSearchParams(criteria));
|
|
117094
|
+
waitForSms = async (criteria = {}, { timeout = 10_000, expectedSmsCount = 1, shouldThrowErrorOnTimeout = true, } = {}) => {
|
|
117095
|
+
const searchParams = this.toSearchParams(criteria);
|
|
117096
|
+
let latestSms = null;
|
|
117097
|
+
const sms = (await this.neetoPlaywrightUtilities.executeRecursively({
|
|
117098
|
+
callback: () => latestSms,
|
|
117099
|
+
condition: async () => {
|
|
117100
|
+
const messages = await this.smsApi.fetchSms(searchParams);
|
|
117101
|
+
latestSms = findLatestSms(messages);
|
|
117102
|
+
return messages.length >= Math.max(expectedSmsCount, 1);
|
|
117103
|
+
},
|
|
117104
|
+
timeout,
|
|
117105
|
+
}));
|
|
117106
|
+
if (expectedSmsCount === 0) {
|
|
117107
|
+
if (sms) {
|
|
117108
|
+
throw new Error(`Expected no SMS matching ${JSON.stringify(searchParams)}, but received ${JSON.stringify(sms)}.`);
|
|
117109
|
+
}
|
|
117110
|
+
return {};
|
|
117111
|
+
}
|
|
117112
|
+
if (!sms) {
|
|
117113
|
+
if (shouldThrowErrorOnTimeout) {
|
|
117114
|
+
throw new Error(`Timed out waiting for SMS matching ${JSON.stringify(searchParams)}, expected at least ${expectedSmsCount}.`);
|
|
117115
|
+
}
|
|
117116
|
+
return {};
|
|
117117
|
+
}
|
|
117118
|
+
return sms;
|
|
117119
|
+
};
|
|
117120
|
+
expectNoSms = (criteria = {}, { timeout } = {}) => this.waitForSms(criteria, { timeout, expectedSmsCount: 0 });
|
|
117121
|
+
clearStaleSms = (receivedBefore = minutesAgo(10)) => this.smsApi.deleteSms(toBackendTimestamp(receivedBefore));
|
|
117122
|
+
purgeAllSms = () => this.smsApi.purgeAllSms();
|
|
117123
|
+
}
|
|
117124
|
+
|
|
117050
117125
|
const hexToRGBA = (hex) => {
|
|
117051
117126
|
let r = 0, g = 0, b = 0, a = 1;
|
|
117052
117127
|
if (hex.length === 5) {
|
|
@@ -117162,6 +117237,19 @@ const commands = {
|
|
|
117162
117237
|
await use(mailerUtils);
|
|
117163
117238
|
IS_DEV_ENV && (await mailerUtils.railsEmailUtils.clearStaleEmails());
|
|
117164
117239
|
},
|
|
117240
|
+
smsUtils: async ({ neetoPlaywrightUtilities }, use) => {
|
|
117241
|
+
const smsUtils = new SmsUtils(neetoPlaywrightUtilities);
|
|
117242
|
+
await use(smsUtils);
|
|
117243
|
+
if (IS_DEV_ENV) {
|
|
117244
|
+
// Not every host app draws the :dev_sms routes; teardown must not fail the test when they are absent.
|
|
117245
|
+
try {
|
|
117246
|
+
await smsUtils.clearStaleSms();
|
|
117247
|
+
}
|
|
117248
|
+
catch (error) {
|
|
117249
|
+
console.warn("Failed to clear stale SMS:", error);
|
|
117250
|
+
}
|
|
117251
|
+
}
|
|
117252
|
+
},
|
|
117165
117253
|
colorPicker: async ({ page }, use) => {
|
|
117166
117254
|
const colorPicker = new ColorPickerUtils(page);
|
|
117167
117255
|
await use(colorPicker);
|
|
@@ -127276,4 +127364,4 @@ class InboundEmailApis {
|
|
|
127276
127364
|
};
|
|
127277
127365
|
}
|
|
127278
127366
|
|
|
127279
|
-
export { ACTIONS, ADMIN_PANEL_SELECTORS, ALL_RESOURCES, ANALYTICS_RESOURCES, API_KEYS_SELECTORS, API_ROUTES, APP_RESOURCES, AUDIT_LOGS_SELECTORS, ApiKeysApi, ApiKeysPage, ApiKeysPageV2, AuditLogsPage, BASE_URL, CALENDAR_LABELS, CERTIFICATE_LIMIT_EXCEEDED_MESSAGE, CERTIFICATE_LIMIT_EXCEEDED_REGEXP, CHANGELOG_WIDGET_SELECTORS, CHAT_WIDGET_SELECTORS, CHAT_WIDGET_TEXTS, COLOR, COMMON_SELECTORS, COMMON_TEXTS, COMMUNITY_TEXTS, CREDENTIALS, CURRENT_TIME_RANGES, CUSTOM_DOMAIN_SELECTORS, CUSTOM_DOMAIN_SUFFIX, ColorPickerUtils, CustomCommands, CustomCommandsV2, CustomDomainApi, CustomDomainPage, DATE_FORMATS, DATE_PICKER_SELECTORS, DATE_RANGES, DATE_TEXTS, DEFAULT_TIMEZONE_ID, DEFAULT_WEBHOOKS_RESPONSE_TEXT, DESCRIPTION_EDITOR_TEXTS, EDITOR_VERIFY_TEXT_COLOR, 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, HelpAndProfilePageV2, INTEGRATIONS_TEXTS, INTEGRATION_SELECTORS, IPRestrictionsPage, IP_RESTRICTIONS_SELECTORS, IS_CI, IS_DEV_ENV, IS_MAILPIT_ENABLED, IS_SHADCN_UI, IS_STAGING_ENV, ImageUploader, InboundEmailApis, IntegrationBase, IpRestrictionsApi, KEYBOARD_SHORTCUTS_SELECTORS, KEYBOARD_SHORTCUT_TEST_CASES, LIST_MODIFIER_SELECTORS, LIST_MODIFIER_TAGS, LOGIN_SELECTORS, MAILPIT_BASE_URL, MAILPIT_DOMAIN_NAME, MEMBER_FORM_SELECTORS, MEMBER_SELECTORS, MEMBER_TEXTS, MERGE_TAGS_SELECTORS, MICROSOFT_LOGIN_SELECTORS, MICROSOFT_LOGIN_TEXTS, MailerUtils, MailpitApi, Member, MemberApis, MicrosoftPage, NEETO_AUTH_BASE_URL, NEETO_EDITOR_SELECTORS, NEETO_FILTERS_SELECTORS, NEETO_IMAGE_UPLOADER_SELECTORS, NEETO_ROUTES, NEETO_SEO_SELECTORS, NEETO_TEXT_MODIFIER_SELECTORS, NeetoAuthServer, NeetoChatWidget, NeetoEmailDeliveryApi, NeetoTowerApi, ONBOARDING_SELECTORS, ORGANIZATION_TEXTS, OTP_EMAIL_PATTERN, OrganizationPage, PAST_TIME_RANGES, PHONE_NUMBER_FORMATS, PLURAL, PRODUCT_ROLES_ROUTE_MAP, PROFILE_LINKS, PROFILE_SECTION_SELECTORS, PROJECT_NAMES, PROJECT_TRANSLATIONS_PATH, ROLES_SELECTORS, ROUTES, RailsEmailApiClient, RailsEmailUtils, RoleApis, RolesPage, RolesPageV2, 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, TeamMembersV2, ThankYouApi, ThankYouPage, TwilioApi, USER_AGENTS, WEBHOOK_SELECTORS, WebhookSiteApi, WebhooksPage, ZAPIER_LIMIT_EXHAUSTED_MESSAGE, ZAPIER_SELECTORS, ZAPIER_TEST_EMAIL, ZAPIER_TEST_EMAIL_V2, ZAPIER_WEB_TEXTS, ZapierPage, authenticateUser, baseURLGenerator, basicHTMLContent, clearCredentials, commands, cpuThrottlingUsingCDP, createOrganizationViaApi, createOrganizationViaRake, currencyUtils, dataQa, decodeQRCodeFromFile, definePlaywrightConfig, executeWithThrottledResources, extractSubdomainFromError, filterUtils, fixedMenuSelector, generatePhoneNumber, generatePhoneNumberDetails, generateRandomBypassEmail, generateRandomFile, generateStagingData, getByDataQA, getClipboardContent, getDirname, getFormattedPhoneNumber, getFullUrl, getGlobalUserProps, getGlobalUserState, getImagePathAndName, getIsoCodeFromPhoneCode, getListCount, globalShortcuts, grantClipboardPermissions, hexToRGB, hexToRGBA, i18nFixture, imageRegex, initializeCredentials, initializeTestData, initializeTotp, isGithubIssueOpen, isStagingOrganizationExpired, joinHyphenCase, joinString, login, mailpitDomainName, networkConditions, networkThrottlingUsingCDP, optionSelector, readFileAsBrowserFile, readFileSyncIfExists, removeCredentialFile, serializeFileForBrowser, shouldSkipCustomDomainSetup, shouldSkipSetupAndTeardown, simulateClickWithDelay, simulateTypingWithDelay, skipTest, squish, stealth as stealthTest, tableUtils, toCamelCase, updateCredentials, warmup, withCookieCache, writeDataToFile };
|
|
127367
|
+
export { ACTIONS, ADMIN_PANEL_SELECTORS, ALL_RESOURCES, ANALYTICS_RESOURCES, API_KEYS_SELECTORS, API_ROUTES, APP_RESOURCES, AUDIT_LOGS_SELECTORS, ApiKeysApi, ApiKeysPage, ApiKeysPageV2, AuditLogsPage, BASE_URL, CALENDAR_LABELS, CERTIFICATE_LIMIT_EXCEEDED_MESSAGE, CERTIFICATE_LIMIT_EXCEEDED_REGEXP, CHANGELOG_WIDGET_SELECTORS, CHAT_WIDGET_SELECTORS, CHAT_WIDGET_TEXTS, COLOR, COMMON_SELECTORS, COMMON_TEXTS, COMMUNITY_TEXTS, CREDENTIALS, CURRENT_TIME_RANGES, CUSTOM_DOMAIN_SELECTORS, CUSTOM_DOMAIN_SUFFIX, ColorPickerUtils, CustomCommands, CustomCommandsV2, CustomDomainApi, CustomDomainPage, DATE_FORMATS, DATE_PICKER_SELECTORS, DATE_RANGES, DATE_TEXTS, DEFAULT_TIMEZONE_ID, DEFAULT_WEBHOOKS_RESPONSE_TEXT, DESCRIPTION_EDITOR_TEXTS, EDITOR_VERIFY_TEXT_COLOR, 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, HelpAndProfilePageV2, INTEGRATIONS_TEXTS, INTEGRATION_SELECTORS, IPRestrictionsPage, IP_RESTRICTIONS_SELECTORS, IS_CI, IS_DEV_ENV, IS_MAILPIT_ENABLED, IS_SHADCN_UI, IS_STAGING_ENV, ImageUploader, InboundEmailApis, IntegrationBase, IpRestrictionsApi, KEYBOARD_SHORTCUTS_SELECTORS, KEYBOARD_SHORTCUT_TEST_CASES, LIST_MODIFIER_SELECTORS, LIST_MODIFIER_TAGS, LOGIN_SELECTORS, MAILPIT_BASE_URL, MAILPIT_DOMAIN_NAME, MEMBER_FORM_SELECTORS, MEMBER_SELECTORS, MEMBER_TEXTS, MERGE_TAGS_SELECTORS, MICROSOFT_LOGIN_SELECTORS, MICROSOFT_LOGIN_TEXTS, MailerUtils, MailpitApi, Member, MemberApis, MicrosoftPage, NEETO_AUTH_BASE_URL, NEETO_EDITOR_SELECTORS, NEETO_FILTERS_SELECTORS, NEETO_IMAGE_UPLOADER_SELECTORS, NEETO_ROUTES, NEETO_SEO_SELECTORS, NEETO_TEXT_MODIFIER_SELECTORS, NeetoAuthServer, NeetoChatWidget, NeetoEmailDeliveryApi, NeetoTowerApi, ONBOARDING_SELECTORS, ORGANIZATION_TEXTS, OTP_EMAIL_PATTERN, OrganizationPage, PAST_TIME_RANGES, PHONE_NUMBER_FORMATS, PLURAL, PRODUCT_ROLES_ROUTE_MAP, PROFILE_LINKS, PROFILE_SECTION_SELECTORS, PROJECT_NAMES, PROJECT_TRANSLATIONS_PATH, ROLES_SELECTORS, ROUTES, RailsEmailApiClient, RailsEmailUtils, RoleApis, RolesPage, RolesPageV2, SIGNUP_SELECTORS, SINGULAR, SLACK_DATA_QA_SELECTORS, SLACK_DEFAULT_CHANNEL, SLACK_SELECTORS, SLACK_WEB_TEXTS, STATUS_TEXTS, STORAGE_STATE, SecurityApi, SidebarSection, SlackApi, SlackPage, SmsApi, SmsUtils, 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, TeamMembersV2, ThankYouApi, ThankYouPage, TwilioApi, USER_AGENTS, WEBHOOK_SELECTORS, WebhookSiteApi, WebhooksPage, ZAPIER_LIMIT_EXHAUSTED_MESSAGE, ZAPIER_SELECTORS, ZAPIER_TEST_EMAIL, ZAPIER_TEST_EMAIL_V2, ZAPIER_WEB_TEXTS, ZapierPage, authenticateUser, baseURLGenerator, basicHTMLContent, clearCredentials, commands, cpuThrottlingUsingCDP, createOrganizationViaApi, createOrganizationViaRake, currencyUtils, dataQa, decodeQRCodeFromFile, definePlaywrightConfig, executeWithThrottledResources, extractSubdomainFromError, filterUtils, fixedMenuSelector, generatePhoneNumber, generatePhoneNumberDetails, generateRandomBypassEmail, generateRandomFile, generateStagingData, getByDataQA, getClipboardContent, getDirname, getFormattedPhoneNumber, getFullUrl, getGlobalUserProps, getGlobalUserState, getImagePathAndName, getIsoCodeFromPhoneCode, getListCount, globalShortcuts, grantClipboardPermissions, hexToRGB, hexToRGBA, i18nFixture, imageRegex, initializeCredentials, initializeTestData, initializeTotp, isGithubIssueOpen, isStagingOrganizationExpired, joinHyphenCase, joinString, login, mailpitDomainName, minutesAgo, networkConditions, networkThrottlingUsingCDP, optionSelector, readFileAsBrowserFile, readFileSyncIfExists, removeCredentialFile, serializeFileForBrowser, shouldSkipCustomDomainSetup, shouldSkipSetupAndTeardown, simulateClickWithDelay, simulateTypingWithDelay, skipTest, squish, stealth as stealthTest, tableUtils, toCamelCase, updateCredentials, warmup, withCookieCache, writeDataToFile };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bigbinary/neeto-playwright-commons",
|
|
3
|
-
"version": "4.7.
|
|
3
|
+
"version": "4.7.4",
|
|
4
4
|
"description": "A package encapsulating common playwright code across neeto projects.",
|
|
5
5
|
"repository": "git@github.com:bigbinary/neeto-playwright-commons.git",
|
|
6
6
|
"license": "apache-2.0",
|