@clerk/testing 2.0.0-snapshot.v20251211120550 → 2.0.0-snapshot.v20251215203425

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.
@@ -1,2 +1,2 @@
1
- "use strict";var w=Object.defineProperty;var J=Object.getOwnPropertyDescriptor;var Y=Object.getOwnPropertyNames;var Z=Object.prototype.hasOwnProperty;var Q=(a,e)=>{for(var r in e)w(a,r,{get:e[r],enumerable:!0})},X=(a,e,r,t)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of Y(e))!Z.call(a,o)&&o!==r&&w(a,o,{get:()=>e[o],enumerable:!(t=J(e,o))||t.enumerable});return a};var ee=a=>X(w({},"__esModule",{value:!0}),a);var te={};Q(te,{createAppPageObject:()=>d,createPageObjects:()=>W});module.exports=ee(te);var i=({page:a})=>{let e={continue:()=>a.getByRole("button",{name:"Continue",exact:!0}).click(),setEmailAddress:r=>e.getEmailAddressInput().fill(r),setPassword:r=>e.getPasswordInput().fill(r),setPasswordConfirmation:r=>a.locator("input[name=confirmPassword]").fill(r),enterOtpCode:async(r,t)=>{let{name:o="Enter verification code",awaitAttempt:n=!0,awaitPrepare:s=!0,awaitRequests:l=!0}=t??{};l&&s&&await a.waitForResponse(p=>p.request().method()==="POST"&&(p.url().includes("prepare_verification")||p.url().includes("prepare_first_factor")));let c=a.getByRole("textbox",{name:"Enter verification code. Digit 1"});await c.isVisible()?(console.warn("Using the original OTP input"),await c.click(),await a.keyboard.type(r,{delay:100})):await a.getByLabel(o).fill(r),l&&n&&await a.waitForResponse(p=>p.request().method()==="POST"&&(p.url().includes("attempt_verification")||p.url().includes("attempt_first_factor")))},enterTestOtpCode:async r=>e.enterOtpCode("424242",r),fillTestOtpCode:async(r,t)=>e.enterOtpCode("424242",{name:r,...t}),getIdentifierInput:()=>a.locator("input[name=identifier]"),getEmailAddressInput:()=>a.locator("input[name=emailAddress]"),getPhoneNumberInput:()=>a.locator("input[name=phoneNumber]"),getUsernameInput:()=>a.locator("input[name=username]"),getPasswordInput:()=>a.locator("input[name=password]"),getLegalAccepted:()=>a.locator("input[name=legalAccepted]"),getFirstNameInput:()=>a.locator("input[name=firstName]"),getLastNameInput:()=>a.locator("input[name=lastName]"),waitForSession:async()=>a.waitForFunction(()=>!!window.Clerk?.session)};return e};var P=a=>{let{page:e}=a,r={never:"Never","1d":"1 Day","7d":"7 Days","30d":"30 Days","60d":"60 Days","90d":"90 Days","180d":"180 Days","1y":"1 Year"};return{...i(a),waitForMounted:()=>e.waitForSelector(".cl-apiKeys-root",{state:"attached"}),clickAddButton:()=>e.getByText(/Add new key/i).click(),waitForFormOpened:()=>e.waitForSelector(".cl-apiKeysCreateForm",{state:"attached"}),waitForFormClosed:()=>e.waitForSelector(".cl-apiKeysCreateForm",{state:"detached"}),waitForRevokeModalOpened:()=>e.waitForSelector(".cl-apiKeysRevokeModal",{state:"attached"}),waitForRevokeModalClosed:()=>e.waitForSelector(".cl-apiKeysRevokeModal",{state:"detached"}),waitForCopyModalOpened:()=>e.waitForSelector(".cl-apiKeysCopyModal",{state:"attached"}),waitForCopyModalClosed:()=>e.waitForSelector(".cl-apiKeysCopyModal",{state:"detached"}),clickCopyAndCloseButton:()=>e.locator(".cl-apiKeysCopyModal .cl-apiKeysCopyModalSubmitButton").click(),typeName:o=>e.getByLabel(/Secret key name/i).fill(o),typeDescription:o=>e.getByLabel(/Description/i).fill(o),selectExpiration:async o=>(await e.getByRole("button",{name:/Select date/i}).click(),e.getByText(r[o??"never"],{exact:!0}).click({force:!0})),clickSaveButton:()=>e.getByText(/Create key/i).click(),typeRevokeConfirmation:o=>e.getByLabel(/Type "Revoke" to confirm/i).fill(o),clickConfirmRevokeButton:()=>e.getByText(/Revoke key/i).click()}};var F="__clerk_testing_token";var k="The Clerk Frontend API URL is required to bypass bot protection. Make sure the clerkSetup function is called during your global setup before setupClerkTestingToken is called.";var g=async({context:a,options:e,page:r})=>{let t=a??r?.context();if(!t)throw new Error("Either context or page must be provided to setup testing token");let o=e?.frontendApiUrl||process.env.CLERK_FAPI;if(!o)throw new Error(k);let n=o.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),s=new RegExp(`^https://${n}/v1/.*?(\\?.*)?$`);await t.route(s,async l=>{let c=new URL(l.request().url()),u=process.env.CLERK_TESTING_TOKEN;u&&c.searchParams.set(F,u);try{let p=await l.fetch({url:c.toString()}),m=await p.json();m?.response?.captcha_bypass===!1&&(m.response.captcha_bypass=!0),m?.client?.captcha_bypass===!1&&(m.client.captcha_bypass=!0),await l.fulfill({response:p,json:m})}catch{await l.continue({url:c.toString()}).catch(console.error)}})};var d=(a,e)=>{let{page:r,useTestingToken:t=!0}=a,o=Object.create(r);return Object.assign(o,{goToAppHome:async()=>{if(!e.baseURL)throw new Error("Attempted to call method requiring baseURL, but baseURL was not provided to createPageObjects.");try{t&&await g({page:r}),await r.goto(e.baseURL)}catch{}},goToRelative:async(s,l={})=>{if(!e.baseURL)throw new Error("Attempted to call method requiring baseURL, but baseURL was not provided to createPageObjects.");let c;try{r.url().includes("about:blank")?c=new URL(s,e.baseURL):c=new URL(s,r.url())}catch{c=new URL(s,e.baseURL)}return l.searchParams&&(c.search=l.searchParams.toString()),t&&await g({page:r}),r.goto(c.toString(),{timeout:l.timeout??2e4,waitUntil:l.waitUntil})},waitForClerkJsLoaded:async()=>r.waitForFunction(()=>window.Clerk?.loaded),signOut:async()=>r.waitForFunction(()=>window.Clerk?.signOut({})),waitForClerkComponentMounted:async()=>r.waitForSelector(".cl-rootBox",{state:"attached"}),waitForAppUrl:async s=>{if(!e.baseURL)throw new Error("Attempted to call method requiring baseURL, but baseURL was not provided to createPageObjects.");return r.waitForURL(new URL(s,e.baseURL).toString())},cookies:async()=>{let s=await r.context().cookies(),l=s.reduce((c,u)=>(u.name.match(/^(__.*_)(.{8})$/)?c.set(u.name.replace(/^(__.*_)(.{8})$/,"$1*"),u):c.set(u.name,u),c),new Map);return Object.assign(l,{raw:()=>s})}})};var S=a=>{let{page:e}=a,r={...i(a),waitForMounted:(t=".cl-checkout-root")=>e.waitForSelector(t,{state:"attached",timeout:2e4}),closeDrawer:()=>e.locator(".cl-drawerClose").click(),fillTestCard:async()=>{await r.fillCard({number:"4242424242424242",expiration:"1234",cvc:"123",country:"United States",zip:"12345"})},fillCard:async t=>{await r.waitForStripeElements({state:"visible"});let o=e.frameLocator('iframe[src*="elements-inner-payment"]');await o.getByLabel("Card number").fill(t.number),await o.getByLabel("Expiration date").fill(t.expiration),await o.getByLabel("Security code").fill(t.cvc),await o.getByLabel("Country").selectOption(t.country),await o.getByLabel("ZIP code").fill(t.zip)},waitForStripeElements:async({state:t="visible"}={})=>{let o=e.locator('iframe[src*="elements-inner-payment"]');t==="visible"?(await o.waitFor({state:"attached",timeout:2e4}),await e.frameLocator('iframe[src*="elements-inner-payment"]').getByLabel("Card number").waitFor({state:"visible",timeout:2e4})):await e.frameLocator('iframe[src*="elements-inner-payment"]').getByLabel("Card number").waitFor({state:"hidden",timeout:2e4})},clickPayOrSubscribe:async()=>{await r.root.getByRole("button",{name:/subscribe|pay\s\$|start/i}).click()},waitForSubscribeButton:async()=>{await r.root.getByRole("button",{name:/^subscribe$/i}).waitFor({state:"visible"})},confirmAndContinue:async()=>{await r.root.getByRole("button",{name:/^continue$/i}).click()},clickAddPaymentMethod:async()=>{await r.root.getByRole("radio",{name:"Add payment method"}).click()},clickPaymentMethods:async()=>{await r.root.getByRole("radio",{name:"Payment Methods"}).click()},root:e.locator(".cl-checkout-root")};return r};var T=({page:a})=>({toBeLoaded:async()=>a.waitForFunction(()=>!!window.Clerk?.loaded),getClientSideActor:()=>a.evaluate(()=>window.Clerk?.session?.actor),toBeLoading:async()=>a.waitForFunction(()=>window.Clerk?.status==="loading"),toBeReady:async()=>a.waitForFunction(()=>window.Clerk?.status==="ready"),toBeDegraded:async()=>a.waitForFunction(()=>window.Clerk?.status==="degraded"),getClientSideUser:()=>a.evaluate(()=>window.Clerk?.user)});var y=require("@playwright/test"),C=({page:a})=>({toBeHandshake:async e=>{let r=await e.request().redirectedFrom()?.redirectedFrom()?.response();(0,y.expect)(r?.status()).toBe(307),(0,y.expect)(r?.headers()["x-clerk-auth-status"]).toContain("handshake")},toBeSignedOut:e=>a.waitForFunction(()=>!window.Clerk?.user,null,{timeout:e?.timeOut}),toBeSignedIn:async()=>a.waitForFunction(()=>!!window.Clerk?.user),toBeSignedInAsActor:async()=>a.waitForFunction(()=>!!window.Clerk?.session?.actor),toHaveResolvedTask:async()=>a.waitForFunction(()=>!window.Clerk?.session?.currentTask)});var B=a=>{let{page:e}=a;return{waitForMounted:(t=".cl-impersonationFab")=>e.waitForSelector(t,{state:"attached"}),getSignOutLink:()=>e.locator(".cl-impersonationFab").getByText("Sign out")}};var R=a=>{let{page:e}=a,r="#--clerk-keyless-prompt-button";return{waitForMounted:()=>e.waitForSelector(r,{state:"attached"}),waitForUnmounted:()=>e.waitForSelector(r,{state:"detached"}),isExpanded:()=>e.locator(r).getAttribute("aria-expanded").then(o=>o==="true"),toggle:()=>e.locator(r).click(),promptsToClaim:()=>e.getByRole("link",{name:/^claim application$/i}),promptToUseClaimedKeys:()=>e.getByRole("link",{name:/^get api keys$/i}),promptToDismiss:()=>e.getByRole("button",{name:/^dismiss$/i})}};var f=require("@playwright/test");var O=a=>{let{page:e}=a,r={...i(a),goTo:async(t="/switcher")=>(await e.goToRelative(t),r.waitForMounted()),waitForMounted:()=>e.waitForSelector(".cl-organizationSwitcher-root",{state:"attached"}),expectNoOrganizationSelected:()=>(0,f.expect)(e.getByText(/No organization selected/i)).toBeVisible(),expectPersonalAccount:()=>(0,f.expect)(e.getByText(/personal account/i)).toBeVisible(),toggleTrigger:()=>e.locator(".cl-organizationSwitcherTrigger").click(),waitForAnOrganizationToSelected:()=>e.waitForSelector(".cl-userPreviewMainIdentifier__personalWorkspace",{state:"detached"})};return r};var E=a=>{let{page:e}=a;return{...i(a),waitForMounted:(t=".cl-planDetails-root")=>e.waitForSelector(t,{state:"attached"}),root:e.locator(".cl-planDetails-root")}};var x=a=>{let{page:e}=a,r={toggle:n=>e.locator(`.cl-pricingTableCard__${n} .cl-pricingTableCardPeriodToggle`),indicator:n=>e.locator(`.cl-pricingTableCard__${n} .cl-switchIndicator`),badge:n=>e.locator(`.cl-pricingTableCard__${n} .cl-badge`),footer:n=>e.locator(`.cl-pricingTableCard__${n} .cl-pricingTableCardFooter`)},t=async(n,s)=>{async function l(u,p,m,q=5e3){return e.waitForFunction(({sel:z,attr:G,val:H})=>document.querySelector(z)?.getAttribute(G)===H,{sel:u,attr:p,val:m},{timeout:q}).then(()=>!0).catch(()=>!1)}let c=await l(`.cl-pricingTableCard__${n} .cl-switchIndicator`,"data-checked","true",500);c&&s==="monthly"&&await r.toggle(n).click(),!c&&s==="annually"&&await r.toggle(n).click()};return{...i(a),waitForMounted:(n=".cl-pricingTable-root")=>e.waitForSelector(n,{state:"attached"}),clickResubscribe:async()=>{await e.getByText("Re-subscribe").click()},waitToBeActive:async({planSlug:n})=>r.badge(n).getByText("Active").waitFor({state:"visible"}),waitToBeFreeTrial:async({planSlug:n})=>r.badge(n).getByText("Free trial").waitFor({state:"visible"}),getPlanCardCTA:({planSlug:n})=>r.footer(n).getByRole("button",{name:/get|switch|subscribe/i}),startCheckout:async({planSlug:n,shouldSwitch:s,period:l})=>{let c=s===!0?"Switch to this plan":s===!1?/subscribe/i:/get|switch|subscribe|Start \d+-day free trial/i;l&&await t(n,l),await r.footer(n).getByRole("button",{name:c}).click()}}};var b=require("@playwright/test");var U=a=>{let{page:e}=a;return{...i(a),resolveForceOrganizationSelectionTask:async t=>{let o=e.getByRole("button",{name:/continue/i});await(0,b.expect)(o).toBeVisible(),await e.locator("input[name=name]").fill(t.name),t.slug&&await e.locator("input[name=slug]").fill(t.slug),await o.click()},resolveResetPasswordTask:async({newPassword:t,confirmPassword:o})=>{await e.locator("input[name=newPassword]").fill(t),await e.locator("input[name=confirmPassword]").fill(o);let n=e.getByRole("button",{name:/reset password/i});await(0,b.expect)(n).toBeVisible(),await n.click()}}};var h=require("@playwright/test");var v=a=>{let{page:e}=a,r={...i(a),goTo:async t=>{let o=await e.goToRelative("/sign-in",t);return typeof t?.headlessSelector<"u"?await r.waitForMounted(t.headlessSelector):await r.waitForMounted(),o},waitForMounted:(t=".cl-signIn-root")=>e.waitForSelector(t,{state:"attached"}),waitForModal:t=>e.waitForSelector(".cl-modalContent:has(.cl-signIn-root)",{state:t==="closed"?"detached":"attached"}),setIdentifier:t=>r.getIdentifierInput().fill(t),setInstantPassword:async t=>{let o=r.getPasswordInput();await(0,h.expect)(o).toBeVisible(),await o.fill(t,{force:!0})},usePhoneNumberIdentifier:()=>e.getByRole("link",{name:/^use phone/i}),useEmailIdentifier:()=>e.getByRole("link",{name:/^use email/i}),useUsernameIdentifier:()=>e.getByRole("link",{name:/^username$/i}),getForgotPassword:()=>e.getByRole("link",{name:/forgot password/i}),getGoToSignUp:()=>e.getByRole("link",{name:/sign up/i}),getResetPassword:()=>e.getByRole("button",{name:/(reset password|reset your password)/i}),getUseAnotherMethodLink:()=>e.getByRole("link",{name:/use another method/i}),getAltMethodsEmailCodeButton:()=>e.getByRole("button",{name:/email code to/i}),getAltMethodsEmailLinkButton:()=>e.getByRole("button",{name:/email link to/i}),signInWithOauth:t=>e.getByRole("button",{name:new RegExp(`continue with ${t}`,"gi")}),signInWithEmailAndInstantPassword:async({email:t,password:o,waitForSession:n=!0})=>{let s=r.getIdentifierInput();await(0,h.expect)(s).toBeVisible(),await s.fill(t),await r.setInstantPassword(o),await r.continue(),n&&await r.waitForSession()}};return r};var I=a=>{let{page:e}=a,r={...i(a),goTo:async t=>(await e.goToRelative("/sign-up",{searchParams:t?.searchParams}),typeof t?.headlessSelector<"u"?r.waitForMounted(t.headlessSelector):r.waitForMounted()),waitForMounted:(t=".cl-signUp-root")=>e.waitForSelector(t,{state:"attached"}),waitForModal:t=>e.waitForSelector(".cl-modalContent:has(.cl-signUp-root)",{state:t==="closed"?"detached":"attached"}),signUpWithOauth:t=>e.getByRole("button",{name:new RegExp(`continue with ${t}`,"gi")}),signUp:async t=>{t.firstName&&await r.getFirstNameInput().fill(t.firstName),t.lastName&&await r.getLastNameInput().fill(t.lastName),t.email&&await r.getEmailAddressInput().fill(t.email),t.username&&await r.getUsernameInput().fill(t.username),t.phoneNumber&&await r.getPhoneNumberInput().fill(t.phoneNumber),t.password&&await r.getPasswordInput().fill(t.password),t.legalAccepted&&await r.getLegalAccepted().check(),await r.continue()},signUpWithEmailAndPassword:async t=>{await r.signUp({email:t.email,password:t.password})},waitForEmailVerificationScreen:async()=>{await e.waitForURL(/verify/),await e.getByRole("heading",{name:/Verify your email/i}).waitFor()}};return r};var L=a=>{let{page:e}=a,r={...i(a),waitForMounted:(t=".cl-subscriptionDetails-root")=>e.waitForSelector(t,{state:"attached"}),waitForUnmounted:()=>r.root.locator(".cl-drawerRoot").waitFor({state:"detached"}),closeDrawer:()=>r.root.locator(".cl-drawerClose").click(),root:e.locator(".cl-subscriptionDetails-root")};return r};var A=({page:a})=>({setup:async()=>g({page:a})});var j=require("@playwright/test"),M=".cl-userAvatarBox",_=a=>{let{page:e}=a,r={goTo:async t=>(await e.goToRelative("/user-avatar",t),r.waitForMounted()),waitForMounted:(t=M)=>e.waitForSelector(t,{state:"attached"}),toBeVisible:async(t=M)=>await(0,j.expect)(e.locator(t).getByRole("img")).toBeVisible()};return r};var N=require("@playwright/test"),D=a=>{let{page:e}=a;return{waitForMounted:()=>e.waitForSelector(".cl-userButtonTrigger",{state:"attached"}),toggleTrigger:()=>e.locator(".cl-userButtonTrigger").click(),waitForPopover:()=>e.waitForSelector(".cl-userButtonPopoverCard",{state:"visible"}),waitForPopoverClosed:()=>e.waitForSelector(".cl-userButtonPopoverCard",{state:"detached"}),toHaveVisibleMenuItems:async t=>{(typeof t=="string"||t instanceof RegExp)&&(t=[t]);for(let o of t)await(0,N.expect)(e.getByRole("menuitem",{name:o})).toBeVisible()},triggerSignOut:()=>e.getByRole("menuitem",{name:/Sign out$/i}).click(),triggerManageAccount:()=>e.getByRole("menuitem",{name:/Manage account/i}).click(),switchAccount:t=>e.getByText(t).click()}};var $=a=>{let{page:e}=a,r={...i(a),goTo:async t=>(await e.goToRelative("/user",t),r.waitForMounted()),switchToSecurityTab:async()=>{await e.getByText(/Security/i).click()},switchToBillingTab:async()=>{await e.getByText(/Billing/i).click()},switchToAPIKeysTab:async()=>{await e.getByText(/API keys/i).click()},waitForMounted:()=>e.waitForSelector(".cl-userProfile-root",{state:"attached"}),clickSetUsername:()=>e.getByText(/Set username/i).click(),clickToUpdateProfile:()=>e.getByText(/update profile/i).click(),clickUpdateUsername:()=>e.getByText(/update username/i).click(),clickSetPassword:()=>e.getByText(/Set password/i).click(),waitForSectionCard:(t,o)=>e.waitForSelector(`.cl-profileSectionContent__${t} .cl-headerTitle`,{state:o?"visible":"detached"}),waitForSectionCardOpened:t=>r.waitForSectionCard(t,!0),waitForSectionCardClosed:t=>r.waitForSectionCard(t,!1),typeUsername:t=>r.getUsernameInput().fill(t),typeFirstName:t=>r.getFirstNameInput().fill(t),typeLastName:t=>r.getLastNameInput().fill(t),typePhoneNumber:t=>r.getPhoneNumberInput().fill(t),clickAddEmailAddress:()=>e.getByText(/add email address/i).click(),clickAddPhoneNumber:()=>e.getByText(/add phone number/i).click(),typeEmailAddress:t=>e.getByLabel(/Email address/i).fill(t),waitForUserProfileModal:t=>e.waitForSelector(".cl-modalContent:has(.cl-userProfile-root)",{state:t==="closed"?"detached":"attached"})};return r};var V=a=>{let{page:e}=a;return{...i(a),waitForMounted:(t=".cl-userVerification-root")=>e.waitForSelector(t,{state:"attached"}),waitForClosed:(t=".cl-userVerification-root")=>e.waitForSelector(t,{state:"detached"}),closeReverificationModal:()=>e.getByLabel("Close modal").click(),getUseAnotherMethodLink:()=>e.getByRole("link",{name:/use another method/i}),getAltMethodsEmailCodeButton:()=>e.getByRole("button",{name:/email code to/i}),getAltMethodsEmailLinkButton:()=>e.getByRole("button",{name:/email link to/i})}};var K=a=>{let{page:e}=a,r={...i(a),goTo:async t=>(await e.goToRelative("/waitlist",{searchParams:t?.searchParams}),typeof t?.headlessSelector<"u"?r.waitForMounted(t.headlessSelector):r.waitForMounted()),waitForMounted:(t=".cl-waitlist-root")=>e.waitForSelector(t,{state:"attached"}),joinWaitlist:async t=>{await r.getEmailAddressInput().fill(t.email),await r.joinWaitlistContinue()},joinWaitlistContinue:()=>e.getByRole("button",{name:"Join the waitlist",exact:!0}).click()};return r};var W=({page:a,useTestingToken:e=!0,baseURL:r})=>{let t=d({page:a,useTestingToken:e},{baseURL:r}),o={page:t};return{page:t,clerk:T(o),checkout:S(o),expect:C(o),impersonation:B(o),keylessPopover:R(o),organizationSwitcher:O(o),pricingTable:x(o),sessionTask:U(o),signIn:v(o),signUp:I(o),testingToken:A(o),userAvatar:_(o),userButton:D(o),userProfile:$(o),userVerification:V(o),waitlist:K(o),apiKeys:P(o),subscriptionDetails:L(o),planDetails:E(o)}};0&&(module.exports={createAppPageObject,createPageObjects});
1
+ "use strict";var w=Object.defineProperty;var J=Object.getOwnPropertyDescriptor;var Y=Object.getOwnPropertyNames;var Z=Object.prototype.hasOwnProperty;var Q=(a,e)=>{for(var r in e)w(a,r,{get:e[r],enumerable:!0})},X=(a,e,r,t)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of Y(e))!Z.call(a,o)&&o!==r&&w(a,o,{get:()=>e[o],enumerable:!(t=J(e,o))||t.enumerable});return a};var ee=a=>X(w({},"__esModule",{value:!0}),a);var te={};Q(te,{createAppPageObject:()=>d,createPageObjects:()=>W});module.exports=ee(te);var i=({page:a})=>{let e={continue:()=>a.getByRole("button",{name:"Continue",exact:!0}).click(),setEmailAddress:r=>e.getEmailAddressInput().fill(r),setPassword:r=>e.getPasswordInput().fill(r),setPasswordConfirmation:r=>a.locator("input[name=confirmPassword]").fill(r),enterOtpCode:async(r,t)=>{let{name:o="Enter verification code",awaitAttempt:n=!0,awaitPrepare:s=!0,awaitRequests:l=!0}=t??{};l&&s&&await a.waitForResponse(u=>u.request().method()==="POST"&&(u.url().includes("prepare_verification")||u.url().includes("prepare_first_factor")||u.url().includes("prepare_second_factor")));let c=a.getByRole("textbox",{name:"Enter verification code. Digit 1"});await c.isVisible()?(console.warn("Using the original OTP input"),await c.click(),await a.keyboard.type(r,{delay:100})):await a.getByLabel(o).fill(r),l&&n&&await a.waitForResponse(u=>u.request().method()==="POST"&&(u.url().includes("attempt_verification")||u.url().includes("attempt_first_factor")||u.url().includes("attempt_second_factor")))},enterTestOtpCode:async r=>e.enterOtpCode("424242",r),fillTestOtpCode:async(r,t)=>e.enterOtpCode("424242",{name:r,...t}),getIdentifierInput:()=>a.locator("input[name=identifier]"),getEmailAddressInput:()=>a.locator("input[name=emailAddress]"),getPhoneNumberInput:()=>a.locator("input[name=phoneNumber]"),getUsernameInput:()=>a.locator("input[name=username]"),getPasswordInput:()=>a.locator("input[name=password]"),getLegalAccepted:()=>a.locator("input[name=legalAccepted]"),getFirstNameInput:()=>a.locator("input[name=firstName]"),getLastNameInput:()=>a.locator("input[name=lastName]"),waitForSession:async()=>a.waitForFunction(()=>!!window.Clerk?.session)};return e};var P=a=>{let{page:e}=a,r={never:"Never","1d":"1 Day","7d":"7 Days","30d":"30 Days","60d":"60 Days","90d":"90 Days","180d":"180 Days","1y":"1 Year"};return{...i(a),waitForMounted:()=>e.waitForSelector(".cl-apiKeys-root",{state:"attached"}),clickAddButton:()=>e.getByText(/Add new key/i).click(),waitForFormOpened:()=>e.waitForSelector(".cl-apiKeysCreateForm",{state:"attached"}),waitForFormClosed:()=>e.waitForSelector(".cl-apiKeysCreateForm",{state:"detached"}),waitForRevokeModalOpened:()=>e.waitForSelector(".cl-apiKeysRevokeModal",{state:"attached"}),waitForRevokeModalClosed:()=>e.waitForSelector(".cl-apiKeysRevokeModal",{state:"detached"}),waitForCopyModalOpened:()=>e.waitForSelector(".cl-apiKeysCopyModal",{state:"attached"}),waitForCopyModalClosed:()=>e.waitForSelector(".cl-apiKeysCopyModal",{state:"detached"}),clickCopyAndCloseButton:()=>e.locator(".cl-apiKeysCopyModal .cl-apiKeysCopyModalSubmitButton").click(),typeName:o=>e.getByLabel(/Secret key name/i).fill(o),typeDescription:o=>e.getByLabel(/Description/i).fill(o),selectExpiration:async o=>(await e.getByRole("button",{name:/Select date/i}).click(),e.getByText(r[o??"never"],{exact:!0}).click({force:!0})),clickSaveButton:()=>e.getByText(/Create key/i).click(),typeRevokeConfirmation:o=>e.getByLabel(/Type "Revoke" to confirm/i).fill(o),clickConfirmRevokeButton:()=>e.getByText(/Revoke key/i).click()}};var F="__clerk_testing_token";var k="The Clerk Frontend API URL is required to bypass bot protection. Make sure the clerkSetup function is called during your global setup before setupClerkTestingToken is called.";var g=async({context:a,options:e,page:r})=>{let t=a??r?.context();if(!t)throw new Error("Either context or page must be provided to setup testing token");let o=e?.frontendApiUrl||process.env.CLERK_FAPI;if(!o)throw new Error(k);let n=o.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),s=new RegExp(`^https://${n}/v1/.*?(\\?.*)?$`);await t.route(s,async l=>{let c=new URL(l.request().url()),p=process.env.CLERK_TESTING_TOKEN;p&&c.searchParams.set(F,p);try{let u=await l.fetch({url:c.toString()}),m=await u.json();m?.response?.captcha_bypass===!1&&(m.response.captcha_bypass=!0),m?.client?.captcha_bypass===!1&&(m.client.captcha_bypass=!0),await l.fulfill({response:u,json:m})}catch{await l.continue({url:c.toString()}).catch(console.error)}})};var d=(a,e)=>{let{page:r,useTestingToken:t=!0}=a,o=Object.create(r);return Object.assign(o,{goToAppHome:async()=>{if(!e.baseURL)throw new Error("Attempted to call method requiring baseURL, but baseURL was not provided to createPageObjects.");try{t&&await g({page:r}),await r.goto(e.baseURL)}catch{}},goToRelative:async(s,l={})=>{if(!e.baseURL)throw new Error("Attempted to call method requiring baseURL, but baseURL was not provided to createPageObjects.");let c;try{r.url().includes("about:blank")?c=new URL(s,e.baseURL):c=new URL(s,r.url())}catch{c=new URL(s,e.baseURL)}return l.searchParams&&(c.search=l.searchParams.toString()),t&&await g({page:r}),r.goto(c.toString(),{timeout:l.timeout??2e4,waitUntil:l.waitUntil})},waitForClerkJsLoaded:async()=>r.waitForFunction(()=>window.Clerk?.loaded),signOut:async()=>r.waitForFunction(()=>window.Clerk?.signOut({})),waitForClerkComponentMounted:async()=>r.waitForSelector(".cl-rootBox",{state:"attached"}),waitForAppUrl:async s=>{if(!e.baseURL)throw new Error("Attempted to call method requiring baseURL, but baseURL was not provided to createPageObjects.");return r.waitForURL(new URL(s,e.baseURL).toString())},cookies:async()=>{let s=await r.context().cookies(),l=s.reduce((c,p)=>(p.name.match(/^(__.*_)(.{8})$/)?c.set(p.name.replace(/^(__.*_)(.{8})$/,"$1*"),p):c.set(p.name,p),c),new Map);return Object.assign(l,{raw:()=>s})}})};var S=a=>{let{page:e}=a,r={...i(a),waitForMounted:(t=".cl-checkout-root")=>e.waitForSelector(t,{state:"attached",timeout:2e4}),closeDrawer:()=>e.locator(".cl-drawerClose").click(),fillTestCard:async()=>{await r.fillCard({number:"4242424242424242",expiration:"1234",cvc:"123",country:"United States",zip:"12345"})},fillCard:async t=>{await r.waitForStripeElements({state:"visible"});let o=e.frameLocator('iframe[src*="elements-inner-payment"]');await o.getByLabel("Card number").fill(t.number),await o.getByLabel("Expiration date").fill(t.expiration),await o.getByLabel("Security code").fill(t.cvc),await o.getByLabel("Country").selectOption(t.country),await o.getByLabel("ZIP code").fill(t.zip)},waitForStripeElements:async({state:t="visible"}={})=>{let o=e.locator('iframe[src*="elements-inner-payment"]');t==="visible"?(await o.waitFor({state:"attached",timeout:2e4}),await e.frameLocator('iframe[src*="elements-inner-payment"]').getByLabel("Card number").waitFor({state:"visible",timeout:2e4})):await e.frameLocator('iframe[src*="elements-inner-payment"]').getByLabel("Card number").waitFor({state:"hidden",timeout:2e4})},clickPayOrSubscribe:async()=>{await r.root.getByRole("button",{name:/subscribe|pay\s\$|start/i}).click()},waitForSubscribeButton:async()=>{await r.root.getByRole("button",{name:/^subscribe$/i}).waitFor({state:"visible"})},confirmAndContinue:async()=>{await r.root.getByRole("button",{name:/^continue$/i}).click()},clickAddPaymentMethod:async()=>{await r.root.getByRole("radio",{name:"Add payment method"}).click()},clickPaymentMethods:async()=>{await r.root.getByRole("radio",{name:"Payment Methods"}).click()},root:e.locator(".cl-checkout-root")};return r};var T=({page:a})=>({toBeLoaded:async()=>a.waitForFunction(()=>!!window.Clerk?.loaded),getClientSideActor:()=>a.evaluate(()=>window.Clerk?.session?.actor),toBeLoading:async()=>a.waitForFunction(()=>window.Clerk?.status==="loading"),toBeReady:async()=>a.waitForFunction(()=>window.Clerk?.status==="ready"),toBeDegraded:async()=>a.waitForFunction(()=>window.Clerk?.status==="degraded"),getClientSideUser:()=>a.evaluate(()=>window.Clerk?.user)});var y=require("@playwright/test"),C=({page:a})=>({toBeHandshake:async e=>{let r=await e.request().redirectedFrom()?.redirectedFrom()?.response();(0,y.expect)(r?.status()).toBe(307),(0,y.expect)(r?.headers()["x-clerk-auth-status"]).toContain("handshake")},toBeSignedOut:e=>a.waitForFunction(()=>!window.Clerk?.user,null,{timeout:e?.timeOut}),toBeSignedIn:async()=>a.waitForFunction(()=>!!window.Clerk?.user),toBeSignedInAsActor:async()=>a.waitForFunction(()=>!!window.Clerk?.session?.actor),toHaveResolvedTask:async()=>a.waitForFunction(()=>!window.Clerk?.session?.currentTask)});var B=a=>{let{page:e}=a;return{waitForMounted:(t=".cl-impersonationFab")=>e.waitForSelector(t,{state:"attached"}),getSignOutLink:()=>e.locator(".cl-impersonationFab").getByText("Sign out")}};var R=a=>{let{page:e}=a,r="#--clerk-keyless-prompt-button";return{waitForMounted:()=>e.waitForSelector(r,{state:"attached"}),waitForUnmounted:()=>e.waitForSelector(r,{state:"detached"}),isExpanded:()=>e.locator(r).getAttribute("aria-expanded").then(o=>o==="true"),toggle:()=>e.locator(r).click(),promptsToClaim:()=>e.getByRole("link",{name:/^claim application$/i}),promptToUseClaimedKeys:()=>e.getByRole("link",{name:/^get api keys$/i}),promptToDismiss:()=>e.getByRole("button",{name:/^dismiss$/i})}};var f=require("@playwright/test");var O=a=>{let{page:e}=a,r={...i(a),goTo:async(t="/switcher")=>(await e.goToRelative(t),r.waitForMounted()),waitForMounted:()=>e.waitForSelector(".cl-organizationSwitcher-root",{state:"attached"}),expectNoOrganizationSelected:()=>(0,f.expect)(e.getByText(/No organization selected/i)).toBeVisible(),expectPersonalAccount:()=>(0,f.expect)(e.getByText(/personal account/i)).toBeVisible(),toggleTrigger:()=>e.locator(".cl-organizationSwitcherTrigger").click(),waitForAnOrganizationToSelected:()=>e.waitForSelector(".cl-userPreviewMainIdentifier__personalWorkspace",{state:"detached"})};return r};var E=a=>{let{page:e}=a;return{...i(a),waitForMounted:(t=".cl-planDetails-root")=>e.waitForSelector(t,{state:"attached"}),root:e.locator(".cl-planDetails-root")}};var x=a=>{let{page:e}=a,r={toggle:n=>e.locator(`.cl-pricingTableCard__${n} .cl-pricingTableCardPeriodToggle`),indicator:n=>e.locator(`.cl-pricingTableCard__${n} .cl-switchIndicator`),badge:n=>e.locator(`.cl-pricingTableCard__${n} .cl-badge`),footer:n=>e.locator(`.cl-pricingTableCard__${n} .cl-pricingTableCardFooter`)},t=async(n,s)=>{async function l(p,u,m,q=5e3){return e.waitForFunction(({sel:z,attr:G,val:H})=>document.querySelector(z)?.getAttribute(G)===H,{sel:p,attr:u,val:m},{timeout:q}).then(()=>!0).catch(()=>!1)}let c=await l(`.cl-pricingTableCard__${n} .cl-switchIndicator`,"data-checked","true",500);c&&s==="monthly"&&await r.toggle(n).click(),!c&&s==="annually"&&await r.toggle(n).click()};return{...i(a),waitForMounted:(n=".cl-pricingTable-root")=>e.waitForSelector(n,{state:"attached"}),clickResubscribe:async()=>{await e.getByText("Re-subscribe").click()},waitToBeActive:async({planSlug:n})=>r.badge(n).getByText("Active").waitFor({state:"visible"}),waitToBeFreeTrial:async({planSlug:n})=>r.badge(n).getByText("Free trial").waitFor({state:"visible"}),getPlanCardCTA:({planSlug:n})=>r.footer(n).getByRole("button",{name:/get|switch|subscribe/i}),startCheckout:async({planSlug:n,shouldSwitch:s,period:l})=>{let c=s===!0?"Switch to this plan":s===!1?/subscribe/i:/get|switch|subscribe|Start \d+-day free trial/i;l&&await t(n,l),await r.footer(n).getByRole("button",{name:c}).click()}}};var b=require("@playwright/test");var U=a=>{let{page:e}=a;return{...i(a),resolveForceOrganizationSelectionTask:async t=>{let o=e.getByRole("button",{name:/continue/i});await(0,b.expect)(o).toBeVisible(),await e.locator("input[name=name]").fill(t.name),t.slug&&await e.locator("input[name=slug]").fill(t.slug),await o.click()},resolveResetPasswordTask:async({newPassword:t,confirmPassword:o})=>{await e.locator("input[name=newPassword]").fill(t),await e.locator("input[name=confirmPassword]").fill(o);let n=e.getByRole("button",{name:/reset password/i});await(0,b.expect)(n).toBeVisible(),await n.click()}}};var h=require("@playwright/test");var v=a=>{let{page:e}=a,r={...i(a),goTo:async t=>{let o=await e.goToRelative("/sign-in",t);return typeof t?.headlessSelector<"u"?await r.waitForMounted(t.headlessSelector):await r.waitForMounted(),o},waitForMounted:(t=".cl-signIn-root")=>e.waitForSelector(t,{state:"attached"}),waitForModal:t=>e.waitForSelector(".cl-modalContent:has(.cl-signIn-root)",{state:t==="closed"?"detached":"attached"}),setIdentifier:t=>r.getIdentifierInput().fill(t),setInstantPassword:async t=>{let o=r.getPasswordInput();await(0,h.expect)(o).toBeVisible(),await o.fill(t,{force:!0})},usePhoneNumberIdentifier:()=>e.getByRole("link",{name:/^use phone/i}),useEmailIdentifier:()=>e.getByRole("link",{name:/^use email/i}),useUsernameIdentifier:()=>e.getByRole("link",{name:/^username$/i}),getForgotPassword:()=>e.getByRole("link",{name:/forgot password/i}),getGoToSignUp:()=>e.getByRole("link",{name:/sign up/i}),getResetPassword:()=>e.getByRole("button",{name:/(reset password|reset your password)/i}),getUseAnotherMethodLink:()=>e.getByRole("link",{name:/use another method/i}),getAltMethodsEmailCodeButton:()=>e.getByRole("button",{name:/email code to/i}),getAltMethodsEmailLinkButton:()=>e.getByRole("button",{name:/email link to/i}),signInWithOauth:t=>e.getByRole("button",{name:new RegExp(`continue with ${t}`,"gi")}),signInWithEmailAndInstantPassword:async({email:t,password:o,waitForSession:n=!0})=>{let s=r.getIdentifierInput();await(0,h.expect)(s).toBeVisible(),await s.fill(t),await r.setInstantPassword(o),await r.continue(),n&&await r.waitForSession()}};return r};var I=a=>{let{page:e}=a,r={...i(a),goTo:async t=>(await e.goToRelative("/sign-up",{searchParams:t?.searchParams}),typeof t?.headlessSelector<"u"?r.waitForMounted(t.headlessSelector):r.waitForMounted()),waitForMounted:(t=".cl-signUp-root")=>e.waitForSelector(t,{state:"attached"}),waitForModal:t=>e.waitForSelector(".cl-modalContent:has(.cl-signUp-root)",{state:t==="closed"?"detached":"attached"}),signUpWithOauth:t=>e.getByRole("button",{name:new RegExp(`continue with ${t}`,"gi")}),signUp:async t=>{t.firstName&&await r.getFirstNameInput().fill(t.firstName),t.lastName&&await r.getLastNameInput().fill(t.lastName),t.email&&await r.getEmailAddressInput().fill(t.email),t.username&&await r.getUsernameInput().fill(t.username),t.phoneNumber&&await r.getPhoneNumberInput().fill(t.phoneNumber),t.password&&await r.getPasswordInput().fill(t.password),t.legalAccepted&&await r.getLegalAccepted().check(),await r.continue()},signUpWithEmailAndPassword:async t=>{await r.signUp({email:t.email,password:t.password})},waitForEmailVerificationScreen:async()=>{await e.waitForURL(/verify/),await e.getByRole("heading",{name:/Verify your email/i}).waitFor()}};return r};var L=a=>{let{page:e}=a,r={...i(a),waitForMounted:(t=".cl-subscriptionDetails-root")=>e.waitForSelector(t,{state:"attached"}),waitForUnmounted:()=>r.root.locator(".cl-drawerRoot").waitFor({state:"detached"}),closeDrawer:()=>r.root.locator(".cl-drawerClose").click(),root:e.locator(".cl-subscriptionDetails-root")};return r};var A=({page:a})=>({setup:async()=>g({page:a})});var j=require("@playwright/test"),M=".cl-userAvatarBox",_=a=>{let{page:e}=a,r={goTo:async t=>(await e.goToRelative("/user-avatar",t),r.waitForMounted()),waitForMounted:(t=M)=>e.waitForSelector(t,{state:"attached"}),toBeVisible:async(t=M)=>await(0,j.expect)(e.locator(t).getByRole("img")).toBeVisible()};return r};var N=require("@playwright/test"),D=a=>{let{page:e}=a;return{waitForMounted:()=>e.waitForSelector(".cl-userButtonTrigger",{state:"attached"}),toggleTrigger:()=>e.locator(".cl-userButtonTrigger").click(),waitForPopover:()=>e.waitForSelector(".cl-userButtonPopoverCard",{state:"visible"}),waitForPopoverClosed:()=>e.waitForSelector(".cl-userButtonPopoverCard",{state:"detached"}),toHaveVisibleMenuItems:async t=>{(typeof t=="string"||t instanceof RegExp)&&(t=[t]);for(let o of t)await(0,N.expect)(e.getByRole("menuitem",{name:o})).toBeVisible()},triggerSignOut:()=>e.getByRole("menuitem",{name:/Sign out$/i}).click(),triggerManageAccount:()=>e.getByRole("menuitem",{name:/Manage account/i}).click(),switchAccount:t=>e.getByText(t).click()}};var $=a=>{let{page:e}=a,r={...i(a),goTo:async t=>(await e.goToRelative("/user",t),r.waitForMounted()),switchToSecurityTab:async()=>{await e.getByText(/Security/i).click()},switchToBillingTab:async()=>{await e.getByText(/Billing/i).click()},switchToAPIKeysTab:async()=>{await e.getByText(/API keys/i).click()},waitForMounted:()=>e.waitForSelector(".cl-userProfile-root",{state:"attached"}),clickSetUsername:()=>e.getByText(/Set username/i).click(),clickToUpdateProfile:()=>e.getByText(/update profile/i).click(),clickUpdateUsername:()=>e.getByText(/update username/i).click(),clickSetPassword:()=>e.getByText(/Set password/i).click(),waitForSectionCard:(t,o)=>e.waitForSelector(`.cl-profileSectionContent__${t} .cl-headerTitle`,{state:o?"visible":"detached"}),waitForSectionCardOpened:t=>r.waitForSectionCard(t,!0),waitForSectionCardClosed:t=>r.waitForSectionCard(t,!1),typeUsername:t=>r.getUsernameInput().fill(t),typeFirstName:t=>r.getFirstNameInput().fill(t),typeLastName:t=>r.getLastNameInput().fill(t),typePhoneNumber:t=>r.getPhoneNumberInput().fill(t),clickAddEmailAddress:()=>e.getByText(/add email address/i).click(),clickAddPhoneNumber:()=>e.getByText(/add phone number/i).click(),typeEmailAddress:t=>e.getByLabel(/Email address/i).fill(t),waitForUserProfileModal:t=>e.waitForSelector(".cl-modalContent:has(.cl-userProfile-root)",{state:t==="closed"?"detached":"attached"})};return r};var V=a=>{let{page:e}=a;return{...i(a),waitForMounted:(t=".cl-userVerification-root")=>e.waitForSelector(t,{state:"attached"}),waitForClosed:(t=".cl-userVerification-root")=>e.waitForSelector(t,{state:"detached"}),closeReverificationModal:()=>e.getByLabel("Close modal").click(),getUseAnotherMethodLink:()=>e.getByRole("link",{name:/use another method/i}),getAltMethodsEmailCodeButton:()=>e.getByRole("button",{name:/email code to/i}),getAltMethodsEmailLinkButton:()=>e.getByRole("button",{name:/email link to/i})}};var K=a=>{let{page:e}=a,r={...i(a),goTo:async t=>(await e.goToRelative("/waitlist",{searchParams:t?.searchParams}),typeof t?.headlessSelector<"u"?r.waitForMounted(t.headlessSelector):r.waitForMounted()),waitForMounted:(t=".cl-waitlist-root")=>e.waitForSelector(t,{state:"attached"}),joinWaitlist:async t=>{await r.getEmailAddressInput().fill(t.email),await r.joinWaitlistContinue()},joinWaitlistContinue:()=>e.getByRole("button",{name:"Join the waitlist",exact:!0}).click()};return r};var W=({page:a,useTestingToken:e=!0,baseURL:r})=>{let t=d({page:a,useTestingToken:e},{baseURL:r}),o={page:t};return{page:t,clerk:T(o),checkout:S(o),expect:C(o),impersonation:B(o),keylessPopover:R(o),organizationSwitcher:O(o),pricingTable:x(o),sessionTask:U(o),signIn:v(o),signUp:I(o),testingToken:A(o),userAvatar:_(o),userButton:D(o),userProfile:$(o),userVerification:V(o),waitlist:K(o),apiKeys:P(o),subscriptionDetails:L(o),planDetails:E(o)}};0&&(module.exports={createAppPageObject,createPageObjects});
2
2
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/playwright/unstable/index.ts","../../../src/playwright/unstable/page-objects/common.ts","../../../src/playwright/unstable/page-objects/apiKeys.ts","../../../src/common/constants.ts","../../../src/common/errors.ts","../../../src/playwright/setupClerkTestingToken.ts","../../../src/playwright/unstable/page-objects/app.ts","../../../src/playwright/unstable/page-objects/checkout.ts","../../../src/playwright/unstable/page-objects/clerk.ts","../../../src/playwright/unstable/page-objects/expect.ts","../../../src/playwright/unstable/page-objects/impersonation.ts","../../../src/playwright/unstable/page-objects/keylessPopover.ts","../../../src/playwright/unstable/page-objects/organizationSwitcher.ts","../../../src/playwright/unstable/page-objects/planDetails.ts","../../../src/playwright/unstable/page-objects/pricingTable.ts","../../../src/playwright/unstable/page-objects/sessionTask.ts","../../../src/playwright/unstable/page-objects/signIn.ts","../../../src/playwright/unstable/page-objects/signUp.ts","../../../src/playwright/unstable/page-objects/subscriptionDetails.ts","../../../src/playwright/unstable/page-objects/testingToken.ts","../../../src/playwright/unstable/page-objects/userAvatar.ts","../../../src/playwright/unstable/page-objects/userButton.ts","../../../src/playwright/unstable/page-objects/userProfile.ts","../../../src/playwright/unstable/page-objects/userVerification.ts","../../../src/playwright/unstable/page-objects/waitlist.ts","../../../src/playwright/unstable/page-objects/index.ts"],"sourcesContent":["import { createPageObjects } from './page-objects';\nimport { createAppPageObject } from './page-objects/app';\n\nexport type { EnhancedPage } from './page-objects/app';\nexport { createPageObjects, createAppPageObject };\n","import type { EnhancedPage } from './app';\n\ntype EnterOtpCodeOptions = {\n name?: string;\n awaitRequests?: boolean;\n awaitPrepare?: boolean;\n awaitAttempt?: boolean;\n};\n\nexport const common = ({ page }: { page: EnhancedPage }) => {\n const self = {\n continue: () => {\n return page.getByRole('button', { name: 'Continue', exact: true }).click();\n },\n setEmailAddress: (val: string) => {\n return self.getEmailAddressInput().fill(val);\n },\n setPassword: (val: string) => {\n return self.getPasswordInput().fill(val);\n },\n setPasswordConfirmation: (val: string) => {\n return page.locator('input[name=confirmPassword]').fill(val);\n },\n enterOtpCode: async (code: string, opts?: EnterOtpCodeOptions) => {\n const {\n name = 'Enter verification code',\n awaitAttempt = true,\n awaitPrepare = true,\n awaitRequests = true,\n } = opts ?? {};\n\n if (awaitRequests && awaitPrepare) {\n const prepareVerificationPromise = page.waitForResponse(\n response =>\n response.request().method() === 'POST' &&\n (response.url().includes('prepare_verification') || response.url().includes('prepare_first_factor')),\n );\n await prepareVerificationPromise;\n }\n\n // Handle the case for both OTP input versions\n const originalInput = page.getByRole('textbox', { name: 'Enter verification code. Digit 1' });\n if (await originalInput.isVisible()) {\n console.warn('Using the original OTP input');\n await originalInput.click();\n await page.keyboard.type(code, { delay: 100 });\n } else {\n await page.getByLabel(name).fill(code);\n }\n\n if (awaitRequests && awaitAttempt) {\n const attemptVerificationPromise = page.waitForResponse(\n response =>\n response.request().method() === 'POST' &&\n (response.url().includes('attempt_verification') || response.url().includes('attempt_first_factor')),\n );\n await attemptVerificationPromise;\n }\n },\n enterTestOtpCode: async (opts?: EnterOtpCodeOptions) => {\n return self.enterOtpCode('424242', opts);\n },\n // @deprecated Use .enterTestOtpCode({ name: '...' }) instead\n fillTestOtpCode: async (name: string, opts?: Omit<EnterOtpCodeOptions, 'name'>) => {\n return self.enterOtpCode('424242', { name, ...opts });\n },\n getIdentifierInput: () => {\n return page.locator('input[name=identifier]');\n },\n getEmailAddressInput: () => {\n return page.locator('input[name=emailAddress]');\n },\n getPhoneNumberInput: () => {\n return page.locator('input[name=phoneNumber]');\n },\n getUsernameInput: () => {\n return page.locator('input[name=username]');\n },\n getPasswordInput: () => {\n return page.locator('input[name=password]');\n },\n getLegalAccepted: () => {\n return page.locator('input[name=legalAccepted]');\n },\n getFirstNameInput: () => {\n return page.locator('input[name=firstName]');\n },\n getLastNameInput: () => {\n return page.locator('input[name=lastName]');\n },\n waitForSession: async () => {\n return page.waitForFunction(() => {\n return !!window.Clerk?.session;\n });\n },\n };\n\n return self;\n};\n","import type { EnhancedPage } from './app';\nimport { common } from './common';\n\nexport const createAPIKeysComponentPageObject = (testArgs: { page: EnhancedPage }) => {\n const { page } = testArgs;\n\n const expirationOptions = {\n never: 'Never',\n '1d': '1 Day',\n '7d': '7 Days',\n '30d': '30 Days',\n '60d': '60 Days',\n '90d': '90 Days',\n '180d': '180 Days',\n '1y': '1 Year',\n } as const;\n\n const self = {\n ...common(testArgs),\n waitForMounted: () => {\n return page.waitForSelector('.cl-apiKeys-root', { state: 'attached' });\n },\n clickAddButton: () => {\n return page.getByText(/Add new key/i).click();\n },\n waitForFormOpened: () => {\n return page.waitForSelector('.cl-apiKeysCreateForm', { state: 'attached' });\n },\n waitForFormClosed: () => {\n return page.waitForSelector('.cl-apiKeysCreateForm', { state: 'detached' });\n },\n waitForRevokeModalOpened: () => {\n return page.waitForSelector('.cl-apiKeysRevokeModal', { state: 'attached' });\n },\n waitForRevokeModalClosed: () => {\n return page.waitForSelector('.cl-apiKeysRevokeModal', { state: 'detached' });\n },\n waitForCopyModalOpened: () => {\n return page.waitForSelector('.cl-apiKeysCopyModal', { state: 'attached' });\n },\n waitForCopyModalClosed: () => {\n return page.waitForSelector('.cl-apiKeysCopyModal', { state: 'detached' });\n },\n clickCopyAndCloseButton: () => {\n return page.locator('.cl-apiKeysCopyModal .cl-apiKeysCopyModalSubmitButton').click();\n },\n typeName: (value: string) => {\n return page.getByLabel(/Secret key name/i).fill(value);\n },\n typeDescription: (value: string) => {\n return page.getByLabel(/Description/i).fill(value);\n },\n selectExpiration: async (value?: keyof typeof expirationOptions) => {\n await page.getByRole('button', { name: /Select date/i }).click();\n return page.getByText(expirationOptions[value ?? 'never'], { exact: true }).click({ force: true });\n },\n clickSaveButton: () => {\n return page.getByText(/Create key/i).click();\n },\n typeRevokeConfirmation: (value: string) => {\n return page.getByLabel(/Type \"Revoke\" to confirm/i).fill(value);\n },\n clickConfirmRevokeButton: () => {\n return page.getByText(/Revoke key/i).click();\n },\n };\n return self;\n};\n","export const TESTING_TOKEN_PARAM = '__clerk_testing_token';\n","export const ERROR_MISSING_FRONTEND_API_URL =\n 'The Clerk Frontend API URL is required to bypass bot protection. ' +\n 'Make sure the clerkSetup function is called during your global setup before setupClerkTestingToken is called.';\n","import type { BrowserContext, Page } from '@playwright/test';\n\nimport type { SetupClerkTestingTokenOptions } from '../common';\nimport { ERROR_MISSING_FRONTEND_API_URL, TESTING_TOKEN_PARAM } from '../common';\n\ntype SetupClerkTestingTokenParams = {\n context?: BrowserContext;\n page?: Page;\n options?: SetupClerkTestingTokenOptions;\n};\n\n/**\n * Bypasses bot protection by appending the testing token in the Frontend API requests.\n *\n * @param params.context - The Playwright browser context object.\n * @param params.page - The Playwright page object.\n * @param params.options.frontendApiUrl - The frontend API URL for your Clerk dev instance, without the protocol.\n * @returns A promise that resolves when the bot protection bypass is set up.\n * @throws An error if the Frontend API URL is not provided.\n * @example\n * import { setupClerkTestingToken } from '@clerk/testing/playwright';\n *\n * test('should bypass bot protection', async ({ context }) => {\n * await setupClerkTestingToken({ context });\n * const page = await context.newPage();\n * await page.goto('https://your-app.com');\n * // Continue with your test...\n * });\n */\nexport const setupClerkTestingToken = async ({ context, options, page }: SetupClerkTestingTokenParams) => {\n const browserContext = context ?? page?.context();\n\n if (!browserContext) {\n throw new Error('Either context or page must be provided to setup testing token');\n }\n\n const fapiUrl = options?.frontendApiUrl || process.env.CLERK_FAPI;\n if (!fapiUrl) {\n throw new Error(ERROR_MISSING_FRONTEND_API_URL);\n }\n\n const escapedFapiUrl = fapiUrl.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n const apiUrl = new RegExp(`^https://${escapedFapiUrl}/v1/.*?(\\\\?.*)?$`);\n\n await browserContext.route(apiUrl, async route => {\n const originalUrl = new URL(route.request().url());\n const testingToken = process.env.CLERK_TESTING_TOKEN;\n\n if (testingToken) {\n originalUrl.searchParams.set(TESTING_TOKEN_PARAM, testingToken);\n }\n\n try {\n const response = await route.fetch({\n url: originalUrl.toString(),\n });\n\n const json = await response.json();\n\n // Override captcha_bypass in /v1/client\n if (json?.response?.captcha_bypass === false) {\n json.response.captcha_bypass = true;\n }\n\n // Override captcha_bypass in piggybacking\n if (json?.client?.captcha_bypass === false) {\n json.client.captcha_bypass = true;\n }\n\n await route.fulfill({\n response,\n json,\n });\n } catch {\n await route\n .continue({\n url: originalUrl.toString(),\n })\n .catch(console.error);\n }\n });\n};\n","import type { Page } from '@playwright/test';\n\nimport { setupClerkTestingToken } from '../../setupClerkTestingToken';\n\nexport type EnhancedPage = ReturnType<typeof createAppPageObject>;\nexport const createAppPageObject = (testArgs: { page: Page; useTestingToken?: boolean }, app: { baseURL?: string }) => {\n const { page, useTestingToken = true } = testArgs;\n const appPage = Object.create(page) as Page;\n const helpers = {\n goToAppHome: async () => {\n if (!app.baseURL) {\n throw new Error(\n 'Attempted to call method requiring baseURL, but baseURL was not provided to createPageObjects.',\n );\n }\n\n try {\n if (useTestingToken) {\n await setupClerkTestingToken({ page });\n }\n\n await page.goto(app.baseURL);\n } catch {\n // do not fail the test if interstitial is returned (401)\n }\n },\n goToRelative: async (\n path: string,\n opts: { waitUntil?: any; searchParams?: URLSearchParams; timeout?: number } = {},\n ) => {\n if (!app.baseURL) {\n throw new Error(\n 'Attempted to call method requiring baseURL, but baseURL was not provided to createPageObjects.',\n );\n }\n let url: URL;\n\n try {\n // When testing applications using real domains we want to manually navigate to the domain first\n // and not follow serverUrl (localhost) by default, as this is usually proxied\n if (page.url().includes('about:blank')) {\n url = new URL(path, app.baseURL);\n } else {\n url = new URL(path, page.url());\n }\n } catch {\n // However, in most tests we don't need to manually navigate to the domain\n // as the test is using a localhost app directly\n // This handles the case where the page is at about:blank\n // and instead it uses the serverUrl\n url = new URL(path, app.baseURL);\n }\n\n if (opts.searchParams) {\n url.search = opts.searchParams.toString();\n }\n\n if (useTestingToken) {\n await setupClerkTestingToken({ page });\n }\n\n return page.goto(url.toString(), { timeout: opts.timeout ?? 20000, waitUntil: opts.waitUntil });\n },\n waitForClerkJsLoaded: async () => {\n return page.waitForFunction(() => {\n return window.Clerk?.loaded;\n });\n },\n signOut: async () => {\n return page.waitForFunction(() => {\n return window.Clerk?.signOut({});\n });\n },\n waitForClerkComponentMounted: async () => {\n return page.waitForSelector('.cl-rootBox', { state: 'attached' });\n },\n waitForAppUrl: async (relativePath: string) => {\n if (!app.baseURL) {\n throw new Error(\n 'Attempted to call method requiring baseURL, but baseURL was not provided to createPageObjects.',\n );\n }\n return page.waitForURL(new URL(relativePath, app.baseURL).toString());\n },\n /**\n * Get the cookies for the URL the page is currently at.\n * Suffixed cookies can be accessed by using the wildcard character `*` at the end of the cookie name,\n * eg `get('__session')` and `get('__session_*')`.\n */\n cookies: async () => {\n const array = await page.context().cookies();\n const map = array.reduce((acc, cookie) => {\n // If a suffixed cookie is found, we usually don't care about the suffix itself\n // Instead, simply replace the suffix with _* so we can easily read it\n // TODO: deal with collisions if neede\n // TODO: might be too much magic here\n // Maybe extract this into a different helper?\n if (cookie.name.match(/^(__.*_)(.{8})$/)) {\n acc.set(cookie.name.replace(/^(__.*_)(.{8})$/, '$1*'), cookie);\n } else {\n acc.set(cookie.name, cookie);\n }\n return acc;\n }, new Map<string, (typeof array)[number]>());\n return Object.assign(map, { raw: () => array });\n },\n };\n return Object.assign(appPage, helpers);\n};\n","import type { EnhancedPage } from './app';\nimport { common } from './common';\n\nexport const createCheckoutPageObject = (testArgs: { page: EnhancedPage }) => {\n const { page } = testArgs;\n const self = {\n ...common(testArgs),\n waitForMounted: (selector = '.cl-checkout-root') => {\n return page.waitForSelector(selector, { state: 'attached', timeout: 20000 });\n },\n closeDrawer: () => {\n return page.locator('.cl-drawerClose').click();\n },\n fillTestCard: async () => {\n await self.fillCard({\n number: '4242424242424242',\n expiration: '1234',\n cvc: '123',\n country: 'United States',\n zip: '12345',\n });\n },\n fillCard: async (card: { number: string; expiration: string; cvc: string; country: string; zip: string }) => {\n await self.waitForStripeElements({ state: 'visible' });\n const frame = page.frameLocator('iframe[src*=\"elements-inner-payment\"]');\n await frame.getByLabel('Card number').fill(card.number);\n await frame.getByLabel('Expiration date').fill(card.expiration);\n await frame.getByLabel('Security code').fill(card.cvc);\n await frame.getByLabel('Country').selectOption(card.country);\n await frame.getByLabel('ZIP code').fill(card.zip);\n },\n waitForStripeElements: async ({ state = 'visible' }: { state?: 'visible' | 'hidden' } = {}) => {\n const iframe = page.locator('iframe[src*=\"elements-inner-payment\"]');\n if (state === 'visible') {\n await iframe.waitFor({ state: 'attached', timeout: 20000 });\n await page.frameLocator('iframe[src*=\"elements-inner-payment\"]').getByLabel('Card number').waitFor({\n state: 'visible',\n timeout: 20000,\n });\n } else {\n await page.frameLocator('iframe[src*=\"elements-inner-payment\"]').getByLabel('Card number').waitFor({\n state: 'hidden',\n timeout: 20000,\n });\n }\n },\n clickPayOrSubscribe: async () => {\n await self.root.getByRole('button', { name: /subscribe|pay\\s\\$|start/i }).click();\n },\n waitForSubscribeButton: async () => {\n await self.root.getByRole('button', { name: /^subscribe$/i }).waitFor({ state: 'visible' });\n },\n confirmAndContinue: async () => {\n await self.root.getByRole('button', { name: /^continue$/i }).click();\n },\n clickAddPaymentMethod: async () => {\n await self.root.getByRole('radio', { name: 'Add payment method' }).click();\n },\n clickPaymentMethods: async () => {\n await self.root.getByRole('radio', { name: 'Payment Methods' }).click();\n },\n root: page.locator('.cl-checkout-root'),\n };\n return self;\n};\n","import type { EnhancedPage } from './app';\n\nexport const createClerkPageObject = ({ page }: { page: EnhancedPage }) => {\n return {\n toBeLoaded: async () => {\n return page.waitForFunction(() => {\n return !!window.Clerk?.loaded;\n });\n },\n getClientSideActor: () => {\n return page.evaluate(() => {\n return window.Clerk?.session?.actor;\n });\n },\n toBeLoading: async () => {\n return page.waitForFunction(() => {\n return window.Clerk?.status === 'loading';\n });\n },\n toBeReady: async () => {\n return page.waitForFunction(() => {\n return window.Clerk?.status === 'ready';\n });\n },\n toBeDegraded: async () => {\n return page.waitForFunction(() => {\n return window.Clerk?.status === 'degraded';\n });\n },\n getClientSideUser: () => {\n return page.evaluate(() => {\n return window.Clerk?.user;\n });\n },\n };\n};\n","import type { Response } from '@playwright/test';\nimport { expect } from '@playwright/test';\n\nimport type { EnhancedPage } from './app';\n\nexport const createExpectPageObject = ({ page }: { page: EnhancedPage }) => {\n return {\n toBeHandshake: async (res: Response) => {\n // Travel the redirect chain until we find the handshake header\n // TODO: Loop through the redirects until we find a handshake header, or timeout trying\n const redirect = await res.request().redirectedFrom()?.redirectedFrom()?.response();\n expect(redirect?.status()).toBe(307);\n expect(redirect?.headers()['x-clerk-auth-status']).toContain('handshake');\n },\n toBeSignedOut: (args?: { timeOut: number }) => {\n return page.waitForFunction(\n () => {\n return !window.Clerk?.user;\n },\n null,\n { timeout: args?.timeOut },\n );\n },\n toBeSignedIn: async () => {\n return page.waitForFunction(() => {\n return !!window.Clerk?.user;\n });\n },\n toBeSignedInAsActor: async () => {\n return page.waitForFunction(() => {\n return !!window.Clerk?.session?.actor;\n });\n },\n toHaveResolvedTask: async () => {\n return page.waitForFunction(() => {\n return !window.Clerk?.session?.currentTask;\n });\n },\n };\n};\n","import type { EnhancedPage } from './app';\n\nexport const createImpersonationPageObject = (testArgs: { page: EnhancedPage }) => {\n const { page } = testArgs;\n const self = {\n waitForMounted: (selector = '.cl-impersonationFab') => {\n return page.waitForSelector(selector, { state: 'attached' });\n },\n getSignOutLink: () => {\n return page.locator('.cl-impersonationFab').getByText('Sign out');\n },\n };\n return self;\n};\n","import type { EnhancedPage } from './app';\n\nexport const createKeylessPopoverPageObject = (testArgs: { page: EnhancedPage }) => {\n const { page } = testArgs;\n // TODO: Is this the ID we really want ?\n const elementId = '#--clerk-keyless-prompt-button';\n const self = {\n waitForMounted: () => page.waitForSelector(elementId, { state: 'attached' }),\n waitForUnmounted: () => page.waitForSelector(elementId, { state: 'detached' }),\n isExpanded: () =>\n page\n .locator(elementId)\n .getAttribute('aria-expanded')\n .then(val => val === 'true'),\n toggle: () => page.locator(elementId).click(),\n\n promptsToClaim: () => {\n return page.getByRole('link', { name: /^claim application$/i });\n },\n promptToUseClaimedKeys: () => {\n return page.getByRole('link', { name: /^get api keys$/i });\n },\n promptToDismiss: () => {\n return page.getByRole('button', { name: /^dismiss$/i });\n },\n };\n return self;\n};\n","import { expect } from '@playwright/test';\n\nimport type { EnhancedPage } from './app';\nimport { common } from './common';\n\nexport const createOrganizationSwitcherComponentPageObject = (testArgs: { page: EnhancedPage }) => {\n const { page } = testArgs;\n\n const self = {\n ...common(testArgs),\n goTo: async (relativePath = '/switcher') => {\n await page.goToRelative(relativePath);\n return self.waitForMounted();\n },\n waitForMounted: () => {\n return page.waitForSelector('.cl-organizationSwitcher-root', { state: 'attached' });\n },\n expectNoOrganizationSelected: () => {\n return expect(page.getByText(/No organization selected/i)).toBeVisible();\n },\n expectPersonalAccount: () => {\n return expect(page.getByText(/personal account/i)).toBeVisible();\n },\n toggleTrigger: () => {\n return page.locator('.cl-organizationSwitcherTrigger').click();\n },\n waitForAnOrganizationToSelected: () => {\n return page.waitForSelector('.cl-userPreviewMainIdentifier__personalWorkspace', { state: 'detached' });\n },\n };\n\n return self;\n};\n","import type { EnhancedPage } from './app';\nimport { common } from './common';\n\nexport const createPlanDetailsPageObject = (testArgs: { page: EnhancedPage }) => {\n const { page } = testArgs;\n const self = {\n ...common(testArgs),\n waitForMounted: (selector = '.cl-planDetails-root') => {\n return page.waitForSelector(selector, { state: 'attached' });\n },\n root: page.locator('.cl-planDetails-root'),\n };\n return self;\n};\n","import type { EnhancedPage } from './app';\nimport { common } from './common';\n\ntype BillingPeriod = 'monthly' | 'annually';\n\nexport const createPricingTablePageObject = (testArgs: { page: EnhancedPage }) => {\n const { page } = testArgs;\n\n const locators = {\n toggle: (planSlug: string) => page.locator(`.cl-pricingTableCard__${planSlug} .cl-pricingTableCardPeriodToggle`),\n indicator: (planSlug: string) => page.locator(`.cl-pricingTableCard__${planSlug} .cl-switchIndicator`),\n badge: (planSlug: string) => page.locator(`.cl-pricingTableCard__${planSlug} .cl-badge`),\n footer: (planSlug: string) => page.locator(`.cl-pricingTableCard__${planSlug} .cl-pricingTableCardFooter`),\n };\n\n const ensurePricingPeriod = async (planSlug: string, period: BillingPeriod): Promise<void> => {\n async function waitForAttribute(selector: string, attribute: string, value: string, timeout = 5000) {\n return page\n .waitForFunction(\n ({ sel, attr, val }) => {\n const element = document.querySelector(sel);\n return element?.getAttribute(attr) === val;\n },\n { sel: selector, attr: attribute, val: value },\n { timeout },\n )\n .then(() => {\n return true;\n })\n .catch(() => {\n return false;\n });\n }\n\n const isAnnually = await waitForAttribute(\n `.cl-pricingTableCard__${planSlug} .cl-switchIndicator`,\n 'data-checked',\n 'true',\n 500,\n );\n\n if (isAnnually && period === 'monthly') {\n await locators.toggle(planSlug).click();\n }\n\n if (!isAnnually && period === 'annually') {\n await locators.toggle(planSlug).click();\n }\n };\n\n const self = {\n ...common(testArgs),\n waitForMounted: (selector = '.cl-pricingTable-root') => {\n return page.waitForSelector(selector, { state: 'attached' });\n },\n clickResubscribe: async () => {\n await page.getByText('Re-subscribe').click();\n },\n waitToBeActive: async ({ planSlug }: { planSlug: string }) => {\n return locators.badge(planSlug).getByText('Active').waitFor({ state: 'visible' });\n },\n waitToBeFreeTrial: async ({ planSlug }: { planSlug: string }) => {\n return locators.badge(planSlug).getByText('Free trial').waitFor({ state: 'visible' });\n },\n getPlanCardCTA: ({ planSlug }: { planSlug: string }) => {\n return locators.footer(planSlug).getByRole('button', {\n name: /get|switch|subscribe/i,\n });\n },\n startCheckout: async ({\n planSlug,\n shouldSwitch,\n period,\n }: {\n planSlug: string;\n shouldSwitch?: boolean;\n period?: BillingPeriod;\n }) => {\n const targetButtonName =\n shouldSwitch === true\n ? 'Switch to this plan'\n : shouldSwitch === false\n ? /subscribe/i\n : /get|switch|subscribe|Start \\d+-day free trial/i;\n\n if (period) {\n await ensurePricingPeriod(planSlug, period);\n }\n\n await locators\n .footer(planSlug)\n .getByRole('button', {\n name: targetButtonName,\n })\n .click();\n },\n };\n return self;\n};\n","import { expect } from '@playwright/test';\n\nimport type { EnhancedPage } from './app';\nimport { common } from './common';\n\nexport const createSessionTaskComponentPageObject = (testArgs: { page: EnhancedPage }) => {\n const { page } = testArgs;\n\n const self = {\n ...common(testArgs),\n resolveForceOrganizationSelectionTask: async (fakeOrganization: { name: string; slug?: string }) => {\n const createOrganizationButton = page.getByRole('button', { name: /continue/i });\n\n await expect(createOrganizationButton).toBeVisible();\n\n await page.locator('input[name=name]').fill(fakeOrganization.name);\n if (fakeOrganization.slug) {\n await page.locator('input[name=slug]').fill(fakeOrganization.slug);\n }\n\n await createOrganizationButton.click();\n },\n resolveResetPasswordTask: async ({\n newPassword,\n confirmPassword,\n }: {\n newPassword: string;\n confirmPassword: string;\n }) => {\n await page.locator('input[name=newPassword]').fill(newPassword);\n await page.locator('input[name=confirmPassword]').fill(confirmPassword);\n\n const resetPasswordButton = page.getByRole('button', { name: /reset password/i });\n await expect(resetPasswordButton).toBeVisible();\n await resetPasswordButton.click();\n },\n };\n\n return self;\n};\n","import { expect } from '@playwright/test';\n\nimport type { EnhancedPage } from './app';\nimport { common } from './common';\n\nexport const createSignInComponentPageObject = (testArgs: { page: EnhancedPage }) => {\n const { page } = testArgs;\n const self = {\n ...common(testArgs),\n goTo: async (opts?: { searchParams?: URLSearchParams; headlessSelector?: string; timeout?: number }) => {\n const navRes = await page.goToRelative('/sign-in', opts);\n\n if (typeof opts?.headlessSelector !== 'undefined') {\n await self.waitForMounted(opts.headlessSelector);\n } else {\n await self.waitForMounted();\n }\n return navRes;\n },\n waitForMounted: (selector = '.cl-signIn-root') => {\n return page.waitForSelector(selector, { state: 'attached' });\n },\n waitForModal: (state?: 'open' | 'closed') => {\n return page.waitForSelector('.cl-modalContent:has(.cl-signIn-root)', {\n state: state === 'closed' ? 'detached' : 'attached',\n });\n },\n setIdentifier: (val: string) => {\n return self.getIdentifierInput().fill(val);\n },\n setInstantPassword: async (val: string) => {\n const passField = self.getPasswordInput();\n await expect(passField).toBeVisible();\n await passField.fill(val, { force: true });\n },\n usePhoneNumberIdentifier: () => {\n return page.getByRole('link', { name: /^use phone/i });\n },\n useEmailIdentifier: () => {\n return page.getByRole('link', { name: /^use email/i });\n },\n useUsernameIdentifier: () => {\n return page.getByRole('link', { name: /^username$/i });\n },\n getForgotPassword: () => {\n return page.getByRole('link', { name: /forgot password/i });\n },\n getGoToSignUp: () => {\n return page.getByRole('link', { name: /sign up/i });\n },\n getResetPassword: () => {\n return page.getByRole('button', { name: /(reset password|reset your password)/i });\n },\n getUseAnotherMethodLink: () => {\n return page.getByRole('link', { name: /use another method/i });\n },\n getAltMethodsEmailCodeButton: () => {\n return page.getByRole('button', { name: /email code to/i });\n },\n getAltMethodsEmailLinkButton: () => {\n return page.getByRole('button', { name: /email link to/i });\n },\n signInWithOauth: (provider: string) => {\n return page.getByRole('button', { name: new RegExp(`continue with ${provider}`, 'gi') });\n },\n signInWithEmailAndInstantPassword: async ({\n email,\n password,\n waitForSession = true,\n }: {\n email: string;\n password: string;\n waitForSession?: boolean;\n }) => {\n const identifierField = self.getIdentifierInput();\n await expect(identifierField).toBeVisible();\n\n await identifierField.fill(email);\n await self.setInstantPassword(password);\n await self.continue();\n\n if (waitForSession) {\n await self.waitForSession();\n }\n },\n };\n return self;\n};\n","import type { EnhancedPage } from './app';\nimport { common } from './common';\n\ntype SignUpFormInputs = {\n email?: string;\n password?: string;\n firstName?: string;\n lastName?: string;\n username?: string;\n phoneNumber?: string;\n legalAccepted?: boolean;\n};\n\nexport const createSignUpComponentPageObject = (testArgs: { page: EnhancedPage }) => {\n const { page } = testArgs;\n\n const self = {\n ...common(testArgs),\n goTo: async (opts?: { searchParams?: URLSearchParams; headlessSelector?: string }) => {\n await page.goToRelative('/sign-up', { searchParams: opts?.searchParams });\n\n if (typeof opts?.headlessSelector !== 'undefined') {\n return self.waitForMounted(opts.headlessSelector);\n }\n return self.waitForMounted();\n },\n waitForMounted: (selector = '.cl-signUp-root') => {\n return page.waitForSelector(selector, { state: 'attached' });\n },\n waitForModal: (state?: 'open' | 'closed') => {\n return page.waitForSelector('.cl-modalContent:has(.cl-signUp-root)', {\n state: state === 'closed' ? 'detached' : 'attached',\n });\n },\n signUpWithOauth: (provider: string) => {\n return page.getByRole('button', { name: new RegExp(`continue with ${provider}`, 'gi') });\n },\n signUp: async (opts: SignUpFormInputs) => {\n if (opts.firstName) {\n await self.getFirstNameInput().fill(opts.firstName);\n }\n\n if (opts.lastName) {\n await self.getLastNameInput().fill(opts.lastName);\n }\n\n if (opts.email) {\n await self.getEmailAddressInput().fill(opts.email);\n }\n\n if (opts.username) {\n await self.getUsernameInput().fill(opts.username);\n }\n\n if (opts.phoneNumber) {\n await self.getPhoneNumberInput().fill(opts.phoneNumber);\n }\n\n if (opts.password) {\n await self.getPasswordInput().fill(opts.password);\n }\n\n if (opts.legalAccepted) {\n await self.getLegalAccepted().check();\n }\n\n await self.continue();\n },\n signUpWithEmailAndPassword: async (opts: Pick<SignUpFormInputs, 'email' | 'password'>) => {\n await self.signUp({ email: opts.email, password: opts.password });\n },\n waitForEmailVerificationScreen: async () => {\n await page.waitForURL(/verify/);\n await page.getByRole('heading', { name: /Verify your email/i }).waitFor();\n },\n };\n\n return self;\n};\n","import type { EnhancedPage } from './app';\nimport { common } from './common';\n\nexport const createSubscriptionDetailsPageObject = (testArgs: { page: EnhancedPage }) => {\n const { page } = testArgs;\n const self = {\n ...common(testArgs),\n waitForMounted: (selector = '.cl-subscriptionDetails-root') => {\n return page.waitForSelector(selector, { state: 'attached' });\n },\n waitForUnmounted: () => {\n return self.root.locator('.cl-drawerRoot').waitFor({ state: 'detached' });\n },\n closeDrawer: () => {\n return self.root.locator('.cl-drawerClose').click();\n },\n root: page.locator('.cl-subscriptionDetails-root'),\n };\n return self;\n};\n","import { setupClerkTestingToken } from '../../setupClerkTestingToken';\nimport type { EnhancedPage } from './app';\n\nexport const createTestingTokenPageObject = ({ page }: { page: EnhancedPage }) => {\n return {\n setup: async () => setupClerkTestingToken({ page }),\n };\n};\n","import { expect } from '@playwright/test';\n\nimport type { EnhancedPage } from './app';\n\nconst SELECTOR = '.cl-userAvatarBox';\n\nexport const createUserAvatarPageObject = (testArgs: { page: EnhancedPage }) => {\n const { page } = testArgs;\n\n const self = {\n goTo: async (opts?: { searchParams: URLSearchParams }) => {\n await page.goToRelative('/user-avatar', opts);\n return self.waitForMounted();\n },\n waitForMounted: (selector = SELECTOR) => {\n return page.waitForSelector(selector, { state: 'attached' });\n },\n toBeVisible: async (selector = SELECTOR) => {\n return await expect(page.locator(selector).getByRole('img')).toBeVisible();\n },\n };\n\n return self;\n};\n","import { expect } from '@playwright/test';\n\nimport type { EnhancedPage } from './app';\n\nexport const createUserButtonPageObject = (testArgs: { page: EnhancedPage }) => {\n const { page } = testArgs;\n\n const self = {\n waitForMounted: () => {\n return page.waitForSelector('.cl-userButtonTrigger', { state: 'attached' });\n },\n toggleTrigger: () => {\n return page.locator('.cl-userButtonTrigger').click();\n },\n waitForPopover: () => {\n return page.waitForSelector('.cl-userButtonPopoverCard', { state: 'visible' });\n },\n waitForPopoverClosed: () => {\n return page.waitForSelector('.cl-userButtonPopoverCard', { state: 'detached' });\n },\n toHaveVisibleMenuItems: async (menuItems: string | RegExp | Array<string | RegExp>) => {\n if (typeof menuItems === 'string' || menuItems instanceof RegExp) {\n menuItems = [menuItems];\n }\n for (const menuItem of menuItems) {\n await expect(page.getByRole('menuitem', { name: menuItem })).toBeVisible();\n }\n },\n triggerSignOut: () => {\n return page.getByRole('menuitem', { name: /Sign out$/i }).click();\n },\n triggerManageAccount: () => {\n return page.getByRole('menuitem', { name: /Manage account/i }).click();\n },\n switchAccount: (emailAddress: string) => {\n return page.getByText(emailAddress).click();\n },\n };\n\n return self;\n};\n","import type { EnhancedPage } from './app';\nimport { common } from './common';\n\nexport type Sections = 'profile' | 'emailAddresses' | 'username' | 'phoneNumbers' | 'danger';\n\nexport const createUserProfileComponentPageObject = (testArgs: { page: EnhancedPage }) => {\n const { page } = testArgs;\n const self = {\n ...common(testArgs),\n goTo: async (opts?: { searchParams: URLSearchParams }) => {\n await page.goToRelative('/user', opts);\n return self.waitForMounted();\n },\n switchToSecurityTab: async () => {\n await page.getByText(/Security/i).click();\n },\n switchToBillingTab: async () => {\n await page.getByText(/Billing/i).click();\n },\n switchToAPIKeysTab: async () => {\n await page.getByText(/API keys/i).click();\n },\n waitForMounted: () => {\n return page.waitForSelector('.cl-userProfile-root', { state: 'attached' });\n },\n clickSetUsername: () => {\n return page.getByText(/Set username/i).click();\n },\n clickToUpdateProfile: () => {\n return page.getByText(/update profile/i).click();\n },\n clickUpdateUsername: () => {\n return page.getByText(/update username/i).click();\n },\n clickSetPassword: () => {\n return page.getByText(/Set password/i).click();\n },\n waitForSectionCard: (section: Sections, opened: boolean) => {\n return page.waitForSelector(`.cl-profileSectionContent__${section} .cl-headerTitle`, {\n state: opened ? 'visible' : 'detached',\n });\n },\n waitForSectionCardOpened: (section: Sections) => {\n return self.waitForSectionCard(section, true);\n },\n waitForSectionCardClosed: (section: Sections) => {\n return self.waitForSectionCard(section, false);\n },\n typeUsername: (value: string) => {\n return self.getUsernameInput().fill(value);\n },\n typeFirstName: (value: string) => {\n return self.getFirstNameInput().fill(value);\n },\n typeLastName: (value: string) => {\n return self.getLastNameInput().fill(value);\n },\n typePhoneNumber: (value: string) => {\n return self.getPhoneNumberInput().fill(value);\n },\n clickAddEmailAddress: () => {\n return page.getByText(/add email address/i).click();\n },\n clickAddPhoneNumber: () => {\n return page.getByText(/add phone number/i).click();\n },\n typeEmailAddress: (value: string) => {\n return page.getByLabel(/Email address/i).fill(value);\n },\n waitForUserProfileModal: (state?: 'open' | 'closed') => {\n return page.waitForSelector('.cl-modalContent:has(.cl-userProfile-root)', {\n state: state === 'closed' ? 'detached' : 'attached',\n });\n },\n };\n return self;\n};\n","import type { EnhancedPage } from './app';\nimport { common } from './common';\n\nexport const createUserVerificationComponentPageObject = (testArgs: { page: EnhancedPage }) => {\n const { page } = testArgs;\n const self = {\n ...common(testArgs),\n waitForMounted: (selector = '.cl-userVerification-root') => {\n return page.waitForSelector(selector, { state: 'attached' });\n },\n waitForClosed: (selector = '.cl-userVerification-root') => {\n return page.waitForSelector(selector, { state: 'detached' });\n },\n closeReverificationModal: () => {\n return page.getByLabel('Close modal').click();\n },\n getUseAnotherMethodLink: () => {\n return page.getByRole('link', { name: /use another method/i });\n },\n getAltMethodsEmailCodeButton: () => {\n return page.getByRole('button', { name: /email code to/i });\n },\n getAltMethodsEmailLinkButton: () => {\n return page.getByRole('button', { name: /email link to/i });\n },\n };\n return self;\n};\n","import type { EnhancedPage } from './app';\nimport { common } from './common';\n\ntype WaitlistFormInputs = {\n email: string;\n};\n\nexport const createWaitlistComponentPageObject = (testArgs: { page: EnhancedPage }) => {\n const { page } = testArgs;\n\n const self = {\n ...common(testArgs),\n goTo: async (opts?: { searchParams?: URLSearchParams; headlessSelector?: string }) => {\n await page.goToRelative('/waitlist', { searchParams: opts?.searchParams });\n\n if (typeof opts?.headlessSelector !== 'undefined') {\n return self.waitForMounted(opts.headlessSelector);\n }\n return self.waitForMounted();\n },\n waitForMounted: (selector = '.cl-waitlist-root') => {\n return page.waitForSelector(selector, { state: 'attached' });\n },\n joinWaitlist: async (opts: WaitlistFormInputs) => {\n await self.getEmailAddressInput().fill(opts.email);\n\n await self.joinWaitlistContinue();\n },\n joinWaitlistContinue: () => {\n return page.getByRole('button', { name: 'Join the waitlist', exact: true }).click();\n },\n };\n\n return self;\n};\n","import type { Page } from '@playwright/test';\n\nimport { createAPIKeysComponentPageObject } from './apiKeys';\nimport { createAppPageObject } from './app';\nimport { createCheckoutPageObject } from './checkout';\nimport { createClerkPageObject } from './clerk';\nimport { createExpectPageObject } from './expect';\nimport { createImpersonationPageObject } from './impersonation';\nimport { createKeylessPopoverPageObject } from './keylessPopover';\nimport { createOrganizationSwitcherComponentPageObject } from './organizationSwitcher';\nimport { createPlanDetailsPageObject } from './planDetails';\nimport { createPricingTablePageObject } from './pricingTable';\nimport { createSessionTaskComponentPageObject } from './sessionTask';\nimport { createSignInComponentPageObject } from './signIn';\nimport { createSignUpComponentPageObject } from './signUp';\nimport { createSubscriptionDetailsPageObject } from './subscriptionDetails';\nimport { createTestingTokenPageObject } from './testingToken';\nimport { createUserAvatarPageObject } from './userAvatar';\nimport { createUserButtonPageObject } from './userButton';\nimport { createUserProfileComponentPageObject } from './userProfile';\nimport { createUserVerificationComponentPageObject } from './userVerification';\nimport { createWaitlistComponentPageObject } from './waitlist';\n\nexport const createPageObjects = ({\n page,\n useTestingToken = true,\n baseURL,\n}: {\n page: Page;\n useTestingToken?: boolean;\n baseURL?: string;\n}) => {\n const app = createAppPageObject({ page, useTestingToken }, { baseURL });\n const testArgs = { page: app };\n\n return {\n page: app,\n clerk: createClerkPageObject(testArgs),\n checkout: createCheckoutPageObject(testArgs),\n expect: createExpectPageObject(testArgs),\n impersonation: createImpersonationPageObject(testArgs),\n keylessPopover: createKeylessPopoverPageObject(testArgs),\n organizationSwitcher: createOrganizationSwitcherComponentPageObject(testArgs),\n pricingTable: createPricingTablePageObject(testArgs),\n sessionTask: createSessionTaskComponentPageObject(testArgs),\n signIn: createSignInComponentPageObject(testArgs),\n signUp: createSignUpComponentPageObject(testArgs),\n testingToken: createTestingTokenPageObject(testArgs),\n userAvatar: createUserAvatarPageObject(testArgs),\n userButton: createUserButtonPageObject(testArgs),\n userProfile: createUserProfileComponentPageObject(testArgs),\n userVerification: createUserVerificationComponentPageObject(testArgs),\n waitlist: createWaitlistComponentPageObject(testArgs),\n apiKeys: createAPIKeysComponentPageObject(testArgs),\n subscriptionDetails: createSubscriptionDetailsPageObject(testArgs),\n planDetails: createPlanDetailsPageObject(testArgs),\n };\n};\n"],"mappings":"0aAAA,IAAAA,GAAA,GAAAC,EAAAD,GAAA,yBAAAE,EAAA,sBAAAC,IAAA,eAAAC,GAAAJ,ICSO,IAAMK,EAAS,CAAC,CAAE,KAAAC,CAAK,IAA8B,CAC1D,IAAMC,EAAO,CACX,SAAU,IACDD,EAAK,UAAU,SAAU,CAAE,KAAM,WAAY,MAAO,EAAK,CAAC,EAAE,MAAM,EAE3E,gBAAkBE,GACTD,EAAK,qBAAqB,EAAE,KAAKC,CAAG,EAE7C,YAAcA,GACLD,EAAK,iBAAiB,EAAE,KAAKC,CAAG,EAEzC,wBAA0BA,GACjBF,EAAK,QAAQ,6BAA6B,EAAE,KAAKE,CAAG,EAE7D,aAAc,MAAOC,EAAcC,IAA+B,CAChE,GAAM,CACJ,KAAAC,EAAO,0BACP,aAAAC,EAAe,GACf,aAAAC,EAAe,GACf,cAAAC,EAAgB,EAClB,EAAIJ,GAAQ,CAAC,EAETI,GAAiBD,GAMnB,MALmCP,EAAK,gBACtCS,GACEA,EAAS,QAAQ,EAAE,OAAO,IAAM,SAC/BA,EAAS,IAAI,EAAE,SAAS,sBAAsB,GAAKA,EAAS,IAAI,EAAE,SAAS,sBAAsB,EACtG,EAKF,IAAMC,EAAgBV,EAAK,UAAU,UAAW,CAAE,KAAM,kCAAmC,CAAC,EACxF,MAAMU,EAAc,UAAU,GAChC,QAAQ,KAAK,8BAA8B,EAC3C,MAAMA,EAAc,MAAM,EAC1B,MAAMV,EAAK,SAAS,KAAKG,EAAM,CAAE,MAAO,GAAI,CAAC,GAE7C,MAAMH,EAAK,WAAWK,CAAI,EAAE,KAAKF,CAAI,EAGnCK,GAAiBF,GAMnB,MALmCN,EAAK,gBACtCS,GACEA,EAAS,QAAQ,EAAE,OAAO,IAAM,SAC/BA,EAAS,IAAI,EAAE,SAAS,sBAAsB,GAAKA,EAAS,IAAI,EAAE,SAAS,sBAAsB,EACtG,CAGJ,EACA,iBAAkB,MAAOL,GAChBH,EAAK,aAAa,SAAUG,CAAI,EAGzC,gBAAiB,MAAOC,EAAcD,IAC7BH,EAAK,aAAa,SAAU,CAAE,KAAAI,EAAM,GAAGD,CAAK,CAAC,EAEtD,mBAAoB,IACXJ,EAAK,QAAQ,wBAAwB,EAE9C,qBAAsB,IACbA,EAAK,QAAQ,0BAA0B,EAEhD,oBAAqB,IACZA,EAAK,QAAQ,yBAAyB,EAE/C,iBAAkB,IACTA,EAAK,QAAQ,sBAAsB,EAE5C,iBAAkB,IACTA,EAAK,QAAQ,sBAAsB,EAE5C,iBAAkB,IACTA,EAAK,QAAQ,2BAA2B,EAEjD,kBAAmB,IACVA,EAAK,QAAQ,uBAAuB,EAE7C,iBAAkB,IACTA,EAAK,QAAQ,sBAAsB,EAE5C,eAAgB,SACPA,EAAK,gBAAgB,IACnB,CAAC,CAAC,OAAO,OAAO,OACxB,CAEL,EAEA,OAAOC,CACT,EC/FO,IAAMU,EAAoCC,GAAqC,CACpF,GAAM,CAAE,KAAAC,CAAK,EAAID,EAEXE,EAAoB,CACxB,MAAO,QACP,KAAM,QACN,KAAM,SACN,MAAO,UACP,MAAO,UACP,MAAO,UACP,OAAQ,WACR,KAAM,QACR,EAmDA,MAjDa,CACX,GAAGC,EAAOH,CAAQ,EAClB,eAAgB,IACPC,EAAK,gBAAgB,mBAAoB,CAAE,MAAO,UAAW,CAAC,EAEvE,eAAgB,IACPA,EAAK,UAAU,cAAc,EAAE,MAAM,EAE9C,kBAAmB,IACVA,EAAK,gBAAgB,wBAAyB,CAAE,MAAO,UAAW,CAAC,EAE5E,kBAAmB,IACVA,EAAK,gBAAgB,wBAAyB,CAAE,MAAO,UAAW,CAAC,EAE5E,yBAA0B,IACjBA,EAAK,gBAAgB,yBAA0B,CAAE,MAAO,UAAW,CAAC,EAE7E,yBAA0B,IACjBA,EAAK,gBAAgB,yBAA0B,CAAE,MAAO,UAAW,CAAC,EAE7E,uBAAwB,IACfA,EAAK,gBAAgB,uBAAwB,CAAE,MAAO,UAAW,CAAC,EAE3E,uBAAwB,IACfA,EAAK,gBAAgB,uBAAwB,CAAE,MAAO,UAAW,CAAC,EAE3E,wBAAyB,IAChBA,EAAK,QAAQ,uDAAuD,EAAE,MAAM,EAErF,SAAWG,GACFH,EAAK,WAAW,kBAAkB,EAAE,KAAKG,CAAK,EAEvD,gBAAkBA,GACTH,EAAK,WAAW,cAAc,EAAE,KAAKG,CAAK,EAEnD,iBAAkB,MAAOA,IACvB,MAAMH,EAAK,UAAU,SAAU,CAAE,KAAM,cAAe,CAAC,EAAE,MAAM,EACxDA,EAAK,UAAUC,EAAkBE,GAAS,OAAO,EAAG,CAAE,MAAO,EAAK,CAAC,EAAE,MAAM,CAAE,MAAO,EAAK,CAAC,GAEnG,gBAAiB,IACRH,EAAK,UAAU,aAAa,EAAE,MAAM,EAE7C,uBAAyBG,GAChBH,EAAK,WAAW,2BAA2B,EAAE,KAAKG,CAAK,EAEhE,yBAA0B,IACjBH,EAAK,UAAU,aAAa,EAAE,MAAM,CAE/C,CAEF,ECnEO,IAAMI,EAAsB,wBCA5B,IAAMC,EACX,iLC4BK,IAAMC,EAAyB,MAAO,CAAE,QAAAC,EAAS,QAAAC,EAAS,KAAAC,CAAK,IAAoC,CACxG,IAAMC,EAAiBH,GAAWE,GAAM,QAAQ,EAEhD,GAAI,CAACC,EACH,MAAM,IAAI,MAAM,gEAAgE,EAGlF,IAAMC,EAAUH,GAAS,gBAAkB,QAAQ,IAAI,WACvD,GAAI,CAACG,EACH,MAAM,IAAI,MAAMC,CAA8B,EAGhD,IAAMC,EAAiBF,EAAQ,QAAQ,sBAAuB,MAAM,EAC9DG,EAAS,IAAI,OAAO,YAAYD,CAAc,kBAAkB,EAEtE,MAAMH,EAAe,MAAMI,EAAQ,MAAMC,GAAS,CAChD,IAAMC,EAAc,IAAI,IAAID,EAAM,QAAQ,EAAE,IAAI,CAAC,EAC3CE,EAAe,QAAQ,IAAI,oBAE7BA,GACFD,EAAY,aAAa,IAAIE,EAAqBD,CAAY,EAGhE,GAAI,CACF,IAAME,EAAW,MAAMJ,EAAM,MAAM,CACjC,IAAKC,EAAY,SAAS,CAC5B,CAAC,EAEKI,EAAO,MAAMD,EAAS,KAAK,EAG7BC,GAAM,UAAU,iBAAmB,KACrCA,EAAK,SAAS,eAAiB,IAI7BA,GAAM,QAAQ,iBAAmB,KACnCA,EAAK,OAAO,eAAiB,IAG/B,MAAML,EAAM,QAAQ,CAClB,SAAAI,EACA,KAAAC,CACF,CAAC,CACH,MAAQ,CACN,MAAML,EACH,SAAS,CACR,IAAKC,EAAY,SAAS,CAC5B,CAAC,EACA,MAAM,QAAQ,KAAK,CACxB,CACF,CAAC,CACH,EC5EO,IAAMK,EAAsB,CAACC,EAAqDC,IAA8B,CACrH,GAAM,CAAE,KAAAC,EAAM,gBAAAC,EAAkB,EAAK,EAAIH,EACnCI,EAAU,OAAO,OAAOF,CAAI,EAoGlC,OAAO,OAAO,OAAOE,EAnGL,CACd,YAAa,SAAY,CACvB,GAAI,CAACH,EAAI,QACP,MAAM,IAAI,MACR,gGACF,EAGF,GAAI,CACEE,GACF,MAAME,EAAuB,CAAE,KAAAH,CAAK,CAAC,EAGvC,MAAMA,EAAK,KAAKD,EAAI,OAAO,CAC7B,MAAQ,CAER,CACF,EACA,aAAc,MACZK,EACAC,EAA8E,CAAC,IAC5E,CACH,GAAI,CAACN,EAAI,QACP,MAAM,IAAI,MACR,gGACF,EAEF,IAAIO,EAEJ,GAAI,CAGEN,EAAK,IAAI,EAAE,SAAS,aAAa,EACnCM,EAAM,IAAI,IAAIF,EAAML,EAAI,OAAO,EAE/BO,EAAM,IAAI,IAAIF,EAAMJ,EAAK,IAAI,CAAC,CAElC,MAAQ,CAKNM,EAAM,IAAI,IAAIF,EAAML,EAAI,OAAO,CACjC,CAEA,OAAIM,EAAK,eACPC,EAAI,OAASD,EAAK,aAAa,SAAS,GAGtCJ,GACF,MAAME,EAAuB,CAAE,KAAAH,CAAK,CAAC,EAGhCA,EAAK,KAAKM,EAAI,SAAS,EAAG,CAAE,QAASD,EAAK,SAAW,IAAO,UAAWA,EAAK,SAAU,CAAC,CAChG,EACA,qBAAsB,SACbL,EAAK,gBAAgB,IACnB,OAAO,OAAO,MACtB,EAEH,QAAS,SACAA,EAAK,gBAAgB,IACnB,OAAO,OAAO,QAAQ,CAAC,CAAC,CAChC,EAEH,6BAA8B,SACrBA,EAAK,gBAAgB,cAAe,CAAE,MAAO,UAAW,CAAC,EAElE,cAAe,MAAOO,GAAyB,CAC7C,GAAI,CAACR,EAAI,QACP,MAAM,IAAI,MACR,gGACF,EAEF,OAAOC,EAAK,WAAW,IAAI,IAAIO,EAAcR,EAAI,OAAO,EAAE,SAAS,CAAC,CACtE,EAMA,QAAS,SAAY,CACnB,IAAMS,EAAQ,MAAMR,EAAK,QAAQ,EAAE,QAAQ,EACrCS,EAAMD,EAAM,OAAO,CAACE,EAAKC,KAMzBA,EAAO,KAAK,MAAM,iBAAiB,EACrCD,EAAI,IAAIC,EAAO,KAAK,QAAQ,kBAAmB,KAAK,EAAGA,CAAM,EAE7DD,EAAI,IAAIC,EAAO,KAAMA,CAAM,EAEtBD,GACN,IAAI,GAAqC,EAC5C,OAAO,OAAO,OAAOD,EAAK,CAAE,IAAK,IAAMD,CAAM,CAAC,CAChD,CACF,CACqC,CACvC,ECzGO,IAAMI,EAA4BC,GAAqC,CAC5E,GAAM,CAAE,KAAAC,CAAK,EAAID,EACXE,EAAO,CACX,GAAGC,EAAOH,CAAQ,EAClB,eAAgB,CAACI,EAAW,sBACnBH,EAAK,gBAAgBG,EAAU,CAAE,MAAO,WAAY,QAAS,GAAM,CAAC,EAE7E,YAAa,IACJH,EAAK,QAAQ,iBAAiB,EAAE,MAAM,EAE/C,aAAc,SAAY,CACxB,MAAMC,EAAK,SAAS,CAClB,OAAQ,mBACR,WAAY,OACZ,IAAK,MACL,QAAS,gBACT,IAAK,OACP,CAAC,CACH,EACA,SAAU,MAAOG,GAA4F,CAC3G,MAAMH,EAAK,sBAAsB,CAAE,MAAO,SAAU,CAAC,EACrD,IAAMI,EAAQL,EAAK,aAAa,uCAAuC,EACvE,MAAMK,EAAM,WAAW,aAAa,EAAE,KAAKD,EAAK,MAAM,EACtD,MAAMC,EAAM,WAAW,iBAAiB,EAAE,KAAKD,EAAK,UAAU,EAC9D,MAAMC,EAAM,WAAW,eAAe,EAAE,KAAKD,EAAK,GAAG,EACrD,MAAMC,EAAM,WAAW,SAAS,EAAE,aAAaD,EAAK,OAAO,EAC3D,MAAMC,EAAM,WAAW,UAAU,EAAE,KAAKD,EAAK,GAAG,CAClD,EACA,sBAAuB,MAAO,CAAE,MAAAE,EAAQ,SAAU,EAAsC,CAAC,IAAM,CAC7F,IAAMC,EAASP,EAAK,QAAQ,uCAAuC,EAC/DM,IAAU,WACZ,MAAMC,EAAO,QAAQ,CAAE,MAAO,WAAY,QAAS,GAAM,CAAC,EAC1D,MAAMP,EAAK,aAAa,uCAAuC,EAAE,WAAW,aAAa,EAAE,QAAQ,CACjG,MAAO,UACP,QAAS,GACX,CAAC,GAED,MAAMA,EAAK,aAAa,uCAAuC,EAAE,WAAW,aAAa,EAAE,QAAQ,CACjG,MAAO,SACP,QAAS,GACX,CAAC,CAEL,EACA,oBAAqB,SAAY,CAC/B,MAAMC,EAAK,KAAK,UAAU,SAAU,CAAE,KAAM,0BAA2B,CAAC,EAAE,MAAM,CAClF,EACA,uBAAwB,SAAY,CAClC,MAAMA,EAAK,KAAK,UAAU,SAAU,CAAE,KAAM,cAAe,CAAC,EAAE,QAAQ,CAAE,MAAO,SAAU,CAAC,CAC5F,EACA,mBAAoB,SAAY,CAC9B,MAAMA,EAAK,KAAK,UAAU,SAAU,CAAE,KAAM,aAAc,CAAC,EAAE,MAAM,CACrE,EACA,sBAAuB,SAAY,CACjC,MAAMA,EAAK,KAAK,UAAU,QAAS,CAAE,KAAM,oBAAqB,CAAC,EAAE,MAAM,CAC3E,EACA,oBAAqB,SAAY,CAC/B,MAAMA,EAAK,KAAK,UAAU,QAAS,CAAE,KAAM,iBAAkB,CAAC,EAAE,MAAM,CACxE,EACA,KAAMD,EAAK,QAAQ,mBAAmB,CACxC,EACA,OAAOC,CACT,EC9DO,IAAMO,EAAwB,CAAC,CAAE,KAAAC,CAAK,KACpC,CACL,WAAY,SACHA,EAAK,gBAAgB,IACnB,CAAC,CAAC,OAAO,OAAO,MACxB,EAEH,mBAAoB,IACXA,EAAK,SAAS,IACZ,OAAO,OAAO,SAAS,KAC/B,EAEH,YAAa,SACJA,EAAK,gBAAgB,IACnB,OAAO,OAAO,SAAW,SACjC,EAEH,UAAW,SACFA,EAAK,gBAAgB,IACnB,OAAO,OAAO,SAAW,OACjC,EAEH,aAAc,SACLA,EAAK,gBAAgB,IACnB,OAAO,OAAO,SAAW,UACjC,EAEH,kBAAmB,IACVA,EAAK,SAAS,IACZ,OAAO,OAAO,IACtB,CAEL,GCjCF,IAAAC,EAAuB,4BAIVC,EAAyB,CAAC,CAAE,KAAAC,CAAK,KACrC,CACL,cAAe,MAAOC,GAAkB,CAGtC,IAAMC,EAAW,MAAMD,EAAI,QAAQ,EAAE,eAAe,GAAG,eAAe,GAAG,SAAS,KAClF,UAAOC,GAAU,OAAO,CAAC,EAAE,KAAK,GAAG,KACnC,UAAOA,GAAU,QAAQ,EAAE,qBAAqB,CAAC,EAAE,UAAU,WAAW,CAC1E,EACA,cAAgBC,GACPH,EAAK,gBACV,IACS,CAAC,OAAO,OAAO,KAExB,KACA,CAAE,QAASG,GAAM,OAAQ,CAC3B,EAEF,aAAc,SACLH,EAAK,gBAAgB,IACnB,CAAC,CAAC,OAAO,OAAO,IACxB,EAEH,oBAAqB,SACZA,EAAK,gBAAgB,IACnB,CAAC,CAAC,OAAO,OAAO,SAAS,KACjC,EAEH,mBAAoB,SACXA,EAAK,gBAAgB,IACnB,CAAC,OAAO,OAAO,SAAS,WAChC,CAEL,GCpCK,IAAMI,EAAiCC,GAAqC,CACjF,GAAM,CAAE,KAAAC,CAAK,EAAID,EASjB,MARa,CACX,eAAgB,CAACE,EAAW,yBACnBD,EAAK,gBAAgBC,EAAU,CAAE,MAAO,UAAW,CAAC,EAE7D,eAAgB,IACPD,EAAK,QAAQ,sBAAsB,EAAE,UAAU,UAAU,CAEpE,CAEF,ECXO,IAAME,EAAkCC,GAAqC,CAClF,GAAM,CAAE,KAAAC,CAAK,EAAID,EAEXE,EAAY,iCAqBlB,MApBa,CACX,eAAgB,IAAMD,EAAK,gBAAgBC,EAAW,CAAE,MAAO,UAAW,CAAC,EAC3E,iBAAkB,IAAMD,EAAK,gBAAgBC,EAAW,CAAE,MAAO,UAAW,CAAC,EAC7E,WAAY,IACVD,EACG,QAAQC,CAAS,EACjB,aAAa,eAAe,EAC5B,KAAKC,GAAOA,IAAQ,MAAM,EAC/B,OAAQ,IAAMF,EAAK,QAAQC,CAAS,EAAE,MAAM,EAE5C,eAAgB,IACPD,EAAK,UAAU,OAAQ,CAAE,KAAM,sBAAuB,CAAC,EAEhE,uBAAwB,IACfA,EAAK,UAAU,OAAQ,CAAE,KAAM,iBAAkB,CAAC,EAE3D,gBAAiB,IACRA,EAAK,UAAU,SAAU,CAAE,KAAM,YAAa,CAAC,CAE1D,CAEF,EC3BA,IAAAG,EAAuB,4BAKhB,IAAMC,EAAiDC,GAAqC,CACjG,GAAM,CAAE,KAAAC,CAAK,EAAID,EAEXE,EAAO,CACX,GAAGC,EAAOH,CAAQ,EAClB,KAAM,MAAOI,EAAe,eAC1B,MAAMH,EAAK,aAAaG,CAAY,EAC7BF,EAAK,eAAe,GAE7B,eAAgB,IACPD,EAAK,gBAAgB,gCAAiC,CAAE,MAAO,UAAW,CAAC,EAEpF,6BAA8B,OACrB,UAAOA,EAAK,UAAU,2BAA2B,CAAC,EAAE,YAAY,EAEzE,sBAAuB,OACd,UAAOA,EAAK,UAAU,mBAAmB,CAAC,EAAE,YAAY,EAEjE,cAAe,IACNA,EAAK,QAAQ,iCAAiC,EAAE,MAAM,EAE/D,gCAAiC,IACxBA,EAAK,gBAAgB,mDAAoD,CAAE,MAAO,UAAW,CAAC,CAEzG,EAEA,OAAOC,CACT,EC7BO,IAAMG,EAA+BC,GAAqC,CAC/E,GAAM,CAAE,KAAAC,CAAK,EAAID,EAQjB,MAPa,CACX,GAAGE,EAAOF,CAAQ,EAClB,eAAgB,CAACG,EAAW,yBACnBF,EAAK,gBAAgBE,EAAU,CAAE,MAAO,UAAW,CAAC,EAE7D,KAAMF,EAAK,QAAQ,sBAAsB,CAC3C,CAEF,ECRO,IAAMG,EAAgCC,GAAqC,CAChF,GAAM,CAAE,KAAAC,CAAK,EAAID,EAEXE,EAAW,CACf,OAASC,GAAqBF,EAAK,QAAQ,yBAAyBE,CAAQ,mCAAmC,EAC/G,UAAYA,GAAqBF,EAAK,QAAQ,yBAAyBE,CAAQ,sBAAsB,EACrG,MAAQA,GAAqBF,EAAK,QAAQ,yBAAyBE,CAAQ,YAAY,EACvF,OAASA,GAAqBF,EAAK,QAAQ,yBAAyBE,CAAQ,6BAA6B,CAC3G,EAEMC,EAAsB,MAAOD,EAAkBE,IAAyC,CAC5F,eAAeC,EAAiBC,EAAkBC,EAAmBC,EAAeC,EAAU,IAAM,CAClG,OAAOT,EACJ,gBACC,CAAC,CAAE,IAAAU,EAAK,KAAAC,EAAM,IAAAC,CAAI,IACA,SAAS,cAAcF,CAAG,GAC1B,aAAaC,CAAI,IAAMC,EAEzC,CAAE,IAAKN,EAAU,KAAMC,EAAW,IAAKC,CAAM,EAC7C,CAAE,QAAAC,CAAQ,CACZ,EACC,KAAK,IACG,EACR,EACA,MAAM,IACE,EACR,CACL,CAEA,IAAMI,EAAa,MAAMR,EACvB,yBAAyBH,CAAQ,uBACjC,eACA,OACA,GACF,EAEIW,GAAcT,IAAW,WAC3B,MAAMH,EAAS,OAAOC,CAAQ,EAAE,MAAM,EAGpC,CAACW,GAAcT,IAAW,YAC5B,MAAMH,EAAS,OAAOC,CAAQ,EAAE,MAAM,CAE1C,EAiDA,MA/Ca,CACX,GAAGY,EAAOf,CAAQ,EAClB,eAAgB,CAACO,EAAW,0BACnBN,EAAK,gBAAgBM,EAAU,CAAE,MAAO,UAAW,CAAC,EAE7D,iBAAkB,SAAY,CAC5B,MAAMN,EAAK,UAAU,cAAc,EAAE,MAAM,CAC7C,EACA,eAAgB,MAAO,CAAE,SAAAE,CAAS,IACzBD,EAAS,MAAMC,CAAQ,EAAE,UAAU,QAAQ,EAAE,QAAQ,CAAE,MAAO,SAAU,CAAC,EAElF,kBAAmB,MAAO,CAAE,SAAAA,CAAS,IAC5BD,EAAS,MAAMC,CAAQ,EAAE,UAAU,YAAY,EAAE,QAAQ,CAAE,MAAO,SAAU,CAAC,EAEtF,eAAgB,CAAC,CAAE,SAAAA,CAAS,IACnBD,EAAS,OAAOC,CAAQ,EAAE,UAAU,SAAU,CACnD,KAAM,uBACR,CAAC,EAEH,cAAe,MAAO,CACpB,SAAAA,EACA,aAAAa,EACA,OAAAX,CACF,IAIM,CACJ,IAAMY,EACJD,IAAiB,GACb,sBACAA,IAAiB,GACf,aACA,iDAEJX,GACF,MAAMD,EAAoBD,EAAUE,CAAM,EAG5C,MAAMH,EACH,OAAOC,CAAQ,EACf,UAAU,SAAU,CACnB,KAAMc,CACR,CAAC,EACA,MAAM,CACX,CACF,CAEF,EClGA,IAAAC,EAAuB,4BAKhB,IAAMC,EAAwCC,GAAqC,CACxF,GAAM,CAAE,KAAAC,CAAK,EAAID,EAgCjB,MA9Ba,CACX,GAAGE,EAAOF,CAAQ,EAClB,sCAAuC,MAAOG,GAAsD,CAClG,IAAMC,EAA2BH,EAAK,UAAU,SAAU,CAAE,KAAM,WAAY,CAAC,EAE/E,QAAM,UAAOG,CAAwB,EAAE,YAAY,EAEnD,MAAMH,EAAK,QAAQ,kBAAkB,EAAE,KAAKE,EAAiB,IAAI,EAC7DA,EAAiB,MACnB,MAAMF,EAAK,QAAQ,kBAAkB,EAAE,KAAKE,EAAiB,IAAI,EAGnE,MAAMC,EAAyB,MAAM,CACvC,EACA,yBAA0B,MAAO,CAC/B,YAAAC,EACA,gBAAAC,CACF,IAGM,CACJ,MAAML,EAAK,QAAQ,yBAAyB,EAAE,KAAKI,CAAW,EAC9D,MAAMJ,EAAK,QAAQ,6BAA6B,EAAE,KAAKK,CAAe,EAEtE,IAAMC,EAAsBN,EAAK,UAAU,SAAU,CAAE,KAAM,iBAAkB,CAAC,EAChF,QAAM,UAAOM,CAAmB,EAAE,YAAY,EAC9C,MAAMA,EAAoB,MAAM,CAClC,CACF,CAGF,ECvCA,IAAAC,EAAuB,4BAKhB,IAAMC,EAAmCC,GAAqC,CACnF,GAAM,CAAE,KAAAC,CAAK,EAAID,EACXE,EAAO,CACX,GAAGC,EAAOH,CAAQ,EAClB,KAAM,MAAOI,GAA2F,CACtG,IAAMC,EAAS,MAAMJ,EAAK,aAAa,WAAYG,CAAI,EAEvD,OAAI,OAAOA,GAAM,iBAAqB,IACpC,MAAMF,EAAK,eAAeE,EAAK,gBAAgB,EAE/C,MAAMF,EAAK,eAAe,EAErBG,CACT,EACA,eAAgB,CAACC,EAAW,oBACnBL,EAAK,gBAAgBK,EAAU,CAAE,MAAO,UAAW,CAAC,EAE7D,aAAeC,GACNN,EAAK,gBAAgB,wCAAyC,CACnE,MAAOM,IAAU,SAAW,WAAa,UAC3C,CAAC,EAEH,cAAgBC,GACPN,EAAK,mBAAmB,EAAE,KAAKM,CAAG,EAE3C,mBAAoB,MAAOA,GAAgB,CACzC,IAAMC,EAAYP,EAAK,iBAAiB,EACxC,QAAM,UAAOO,CAAS,EAAE,YAAY,EACpC,MAAMA,EAAU,KAAKD,EAAK,CAAE,MAAO,EAAK,CAAC,CAC3C,EACA,yBAA0B,IACjBP,EAAK,UAAU,OAAQ,CAAE,KAAM,aAAc,CAAC,EAEvD,mBAAoB,IACXA,EAAK,UAAU,OAAQ,CAAE,KAAM,aAAc,CAAC,EAEvD,sBAAuB,IACdA,EAAK,UAAU,OAAQ,CAAE,KAAM,aAAc,CAAC,EAEvD,kBAAmB,IACVA,EAAK,UAAU,OAAQ,CAAE,KAAM,kBAAmB,CAAC,EAE5D,cAAe,IACNA,EAAK,UAAU,OAAQ,CAAE,KAAM,UAAW,CAAC,EAEpD,iBAAkB,IACTA,EAAK,UAAU,SAAU,CAAE,KAAM,uCAAwC,CAAC,EAEnF,wBAAyB,IAChBA,EAAK,UAAU,OAAQ,CAAE,KAAM,qBAAsB,CAAC,EAE/D,6BAA8B,IACrBA,EAAK,UAAU,SAAU,CAAE,KAAM,gBAAiB,CAAC,EAE5D,6BAA8B,IACrBA,EAAK,UAAU,SAAU,CAAE,KAAM,gBAAiB,CAAC,EAE5D,gBAAkBS,GACTT,EAAK,UAAU,SAAU,CAAE,KAAM,IAAI,OAAO,iBAAiBS,CAAQ,GAAI,IAAI,CAAE,CAAC,EAEzF,kCAAmC,MAAO,CACxC,MAAAC,EACA,SAAAC,EACA,eAAAC,EAAiB,EACnB,IAIM,CACJ,IAAMC,EAAkBZ,EAAK,mBAAmB,EAChD,QAAM,UAAOY,CAAe,EAAE,YAAY,EAE1C,MAAMA,EAAgB,KAAKH,CAAK,EAChC,MAAMT,EAAK,mBAAmBU,CAAQ,EACtC,MAAMV,EAAK,SAAS,EAEhBW,GACF,MAAMX,EAAK,eAAe,CAE9B,CACF,EACA,OAAOA,CACT,EC1EO,IAAMa,EAAmCC,GAAqC,CACnF,GAAM,CAAE,KAAAC,CAAK,EAAID,EAEXE,EAAO,CACX,GAAGC,EAAOH,CAAQ,EAClB,KAAM,MAAOI,IACX,MAAMH,EAAK,aAAa,WAAY,CAAE,aAAcG,GAAM,YAAa,CAAC,EAEpE,OAAOA,GAAM,iBAAqB,IAC7BF,EAAK,eAAeE,EAAK,gBAAgB,EAE3CF,EAAK,eAAe,GAE7B,eAAgB,CAACG,EAAW,oBACnBJ,EAAK,gBAAgBI,EAAU,CAAE,MAAO,UAAW,CAAC,EAE7D,aAAeC,GACNL,EAAK,gBAAgB,wCAAyC,CACnE,MAAOK,IAAU,SAAW,WAAa,UAC3C,CAAC,EAEH,gBAAkBC,GACTN,EAAK,UAAU,SAAU,CAAE,KAAM,IAAI,OAAO,iBAAiBM,CAAQ,GAAI,IAAI,CAAE,CAAC,EAEzF,OAAQ,MAAOH,GAA2B,CACpCA,EAAK,WACP,MAAMF,EAAK,kBAAkB,EAAE,KAAKE,EAAK,SAAS,EAGhDA,EAAK,UACP,MAAMF,EAAK,iBAAiB,EAAE,KAAKE,EAAK,QAAQ,EAG9CA,EAAK,OACP,MAAMF,EAAK,qBAAqB,EAAE,KAAKE,EAAK,KAAK,EAG/CA,EAAK,UACP,MAAMF,EAAK,iBAAiB,EAAE,KAAKE,EAAK,QAAQ,EAG9CA,EAAK,aACP,MAAMF,EAAK,oBAAoB,EAAE,KAAKE,EAAK,WAAW,EAGpDA,EAAK,UACP,MAAMF,EAAK,iBAAiB,EAAE,KAAKE,EAAK,QAAQ,EAG9CA,EAAK,eACP,MAAMF,EAAK,iBAAiB,EAAE,MAAM,EAGtC,MAAMA,EAAK,SAAS,CACtB,EACA,2BAA4B,MAAOE,GAAuD,CACxF,MAAMF,EAAK,OAAO,CAAE,MAAOE,EAAK,MAAO,SAAUA,EAAK,QAAS,CAAC,CAClE,EACA,+BAAgC,SAAY,CAC1C,MAAMH,EAAK,WAAW,QAAQ,EAC9B,MAAMA,EAAK,UAAU,UAAW,CAAE,KAAM,oBAAqB,CAAC,EAAE,QAAQ,CAC1E,CACF,EAEA,OAAOC,CACT,EC3EO,IAAMM,EAAuCC,GAAqC,CACvF,GAAM,CAAE,KAAAC,CAAK,EAAID,EACXE,EAAO,CACX,GAAGC,EAAOH,CAAQ,EAClB,eAAgB,CAACI,EAAW,iCACnBH,EAAK,gBAAgBG,EAAU,CAAE,MAAO,UAAW,CAAC,EAE7D,iBAAkB,IACTF,EAAK,KAAK,QAAQ,gBAAgB,EAAE,QAAQ,CAAE,MAAO,UAAW,CAAC,EAE1E,YAAa,IACJA,EAAK,KAAK,QAAQ,iBAAiB,EAAE,MAAM,EAEpD,KAAMD,EAAK,QAAQ,8BAA8B,CACnD,EACA,OAAOC,CACT,EChBO,IAAMG,EAA+B,CAAC,CAAE,KAAAC,CAAK,KAC3C,CACL,MAAO,SAAYC,EAAuB,CAAE,KAAAD,CAAK,CAAC,CACpD,GCNF,IAAAE,EAAuB,4BAIjBC,EAAW,oBAEJC,EAA8BC,GAAqC,CAC9E,GAAM,CAAE,KAAAC,CAAK,EAAID,EAEXE,EAAO,CACX,KAAM,MAAOC,IACX,MAAMF,EAAK,aAAa,eAAgBE,CAAI,EACrCD,EAAK,eAAe,GAE7B,eAAgB,CAACE,EAAWN,IACnBG,EAAK,gBAAgBG,EAAU,CAAE,MAAO,UAAW,CAAC,EAE7D,YAAa,MAAOA,EAAWN,IACtB,QAAM,UAAOG,EAAK,QAAQG,CAAQ,EAAE,UAAU,KAAK,CAAC,EAAE,YAAY,CAE7E,EAEA,OAAOF,CACT,ECvBA,IAAAG,EAAuB,4BAIVC,EAA8BC,GAAqC,CAC9E,GAAM,CAAE,KAAAC,CAAK,EAAID,EAkCjB,MAhCa,CACX,eAAgB,IACPC,EAAK,gBAAgB,wBAAyB,CAAE,MAAO,UAAW,CAAC,EAE5E,cAAe,IACNA,EAAK,QAAQ,uBAAuB,EAAE,MAAM,EAErD,eAAgB,IACPA,EAAK,gBAAgB,4BAA6B,CAAE,MAAO,SAAU,CAAC,EAE/E,qBAAsB,IACbA,EAAK,gBAAgB,4BAA6B,CAAE,MAAO,UAAW,CAAC,EAEhF,uBAAwB,MAAOC,GAAwD,EACjF,OAAOA,GAAc,UAAYA,aAAqB,UACxDA,EAAY,CAACA,CAAS,GAExB,QAAWC,KAAYD,EACrB,QAAM,UAAOD,EAAK,UAAU,WAAY,CAAE,KAAME,CAAS,CAAC,CAAC,EAAE,YAAY,CAE7E,EACA,eAAgB,IACPF,EAAK,UAAU,WAAY,CAAE,KAAM,YAAa,CAAC,EAAE,MAAM,EAElE,qBAAsB,IACbA,EAAK,UAAU,WAAY,CAAE,KAAM,iBAAkB,CAAC,EAAE,MAAM,EAEvE,cAAgBG,GACPH,EAAK,UAAUG,CAAY,EAAE,MAAM,CAE9C,CAGF,ECnCO,IAAMC,EAAwCC,GAAqC,CACxF,GAAM,CAAE,KAAAC,CAAK,EAAID,EACXE,EAAO,CACX,GAAGC,EAAOH,CAAQ,EAClB,KAAM,MAAOI,IACX,MAAMH,EAAK,aAAa,QAASG,CAAI,EAC9BF,EAAK,eAAe,GAE7B,oBAAqB,SAAY,CAC/B,MAAMD,EAAK,UAAU,WAAW,EAAE,MAAM,CAC1C,EACA,mBAAoB,SAAY,CAC9B,MAAMA,EAAK,UAAU,UAAU,EAAE,MAAM,CACzC,EACA,mBAAoB,SAAY,CAC9B,MAAMA,EAAK,UAAU,WAAW,EAAE,MAAM,CAC1C,EACA,eAAgB,IACPA,EAAK,gBAAgB,uBAAwB,CAAE,MAAO,UAAW,CAAC,EAE3E,iBAAkB,IACTA,EAAK,UAAU,eAAe,EAAE,MAAM,EAE/C,qBAAsB,IACbA,EAAK,UAAU,iBAAiB,EAAE,MAAM,EAEjD,oBAAqB,IACZA,EAAK,UAAU,kBAAkB,EAAE,MAAM,EAElD,iBAAkB,IACTA,EAAK,UAAU,eAAe,EAAE,MAAM,EAE/C,mBAAoB,CAACI,EAAmBC,IAC/BL,EAAK,gBAAgB,8BAA8BI,CAAO,mBAAoB,CACnF,MAAOC,EAAS,UAAY,UAC9B,CAAC,EAEH,yBAA2BD,GAClBH,EAAK,mBAAmBG,EAAS,EAAI,EAE9C,yBAA2BA,GAClBH,EAAK,mBAAmBG,EAAS,EAAK,EAE/C,aAAeE,GACNL,EAAK,iBAAiB,EAAE,KAAKK,CAAK,EAE3C,cAAgBA,GACPL,EAAK,kBAAkB,EAAE,KAAKK,CAAK,EAE5C,aAAeA,GACNL,EAAK,iBAAiB,EAAE,KAAKK,CAAK,EAE3C,gBAAkBA,GACTL,EAAK,oBAAoB,EAAE,KAAKK,CAAK,EAE9C,qBAAsB,IACbN,EAAK,UAAU,oBAAoB,EAAE,MAAM,EAEpD,oBAAqB,IACZA,EAAK,UAAU,mBAAmB,EAAE,MAAM,EAEnD,iBAAmBM,GACVN,EAAK,WAAW,gBAAgB,EAAE,KAAKM,CAAK,EAErD,wBAA0BC,GACjBP,EAAK,gBAAgB,6CAA8C,CACxE,MAAOO,IAAU,SAAW,WAAa,UAC3C,CAAC,CAEL,EACA,OAAON,CACT,ECzEO,IAAMO,EAA6CC,GAAqC,CAC7F,GAAM,CAAE,KAAAC,CAAK,EAAID,EAsBjB,MArBa,CACX,GAAGE,EAAOF,CAAQ,EAClB,eAAgB,CAACG,EAAW,8BACnBF,EAAK,gBAAgBE,EAAU,CAAE,MAAO,UAAW,CAAC,EAE7D,cAAe,CAACA,EAAW,8BAClBF,EAAK,gBAAgBE,EAAU,CAAE,MAAO,UAAW,CAAC,EAE7D,yBAA0B,IACjBF,EAAK,WAAW,aAAa,EAAE,MAAM,EAE9C,wBAAyB,IAChBA,EAAK,UAAU,OAAQ,CAAE,KAAM,qBAAsB,CAAC,EAE/D,6BAA8B,IACrBA,EAAK,UAAU,SAAU,CAAE,KAAM,gBAAiB,CAAC,EAE5D,6BAA8B,IACrBA,EAAK,UAAU,SAAU,CAAE,KAAM,gBAAiB,CAAC,CAE9D,CAEF,ECpBO,IAAMG,EAAqCC,GAAqC,CACrF,GAAM,CAAE,KAAAC,CAAK,EAAID,EAEXE,EAAO,CACX,GAAGC,EAAOH,CAAQ,EAClB,KAAM,MAAOI,IACX,MAAMH,EAAK,aAAa,YAAa,CAAE,aAAcG,GAAM,YAAa,CAAC,EAErE,OAAOA,GAAM,iBAAqB,IAC7BF,EAAK,eAAeE,EAAK,gBAAgB,EAE3CF,EAAK,eAAe,GAE7B,eAAgB,CAACG,EAAW,sBACnBJ,EAAK,gBAAgBI,EAAU,CAAE,MAAO,UAAW,CAAC,EAE7D,aAAc,MAAOD,GAA6B,CAChD,MAAMF,EAAK,qBAAqB,EAAE,KAAKE,EAAK,KAAK,EAEjD,MAAMF,EAAK,qBAAqB,CAClC,EACA,qBAAsB,IACbD,EAAK,UAAU,SAAU,CAAE,KAAM,oBAAqB,MAAO,EAAK,CAAC,EAAE,MAAM,CAEtF,EAEA,OAAOC,CACT,ECXO,IAAMI,EAAoB,CAAC,CAChC,KAAAC,EACA,gBAAAC,EAAkB,GAClB,QAAAC,CACF,IAIM,CACJ,IAAMC,EAAMC,EAAoB,CAAE,KAAAJ,EAAM,gBAAAC,CAAgB,EAAG,CAAE,QAAAC,CAAQ,CAAC,EAChEG,EAAW,CAAE,KAAMF,CAAI,EAE7B,MAAO,CACL,KAAMA,EACN,MAAOG,EAAsBD,CAAQ,EACrC,SAAUE,EAAyBF,CAAQ,EAC3C,OAAQG,EAAuBH,CAAQ,EACvC,cAAeI,EAA8BJ,CAAQ,EACrD,eAAgBK,EAA+BL,CAAQ,EACvD,qBAAsBM,EAA8CN,CAAQ,EAC5E,aAAcO,EAA6BP,CAAQ,EACnD,YAAaQ,EAAqCR,CAAQ,EAC1D,OAAQS,EAAgCT,CAAQ,EAChD,OAAQU,EAAgCV,CAAQ,EAChD,aAAcW,EAA6BX,CAAQ,EACnD,WAAYY,EAA2BZ,CAAQ,EAC/C,WAAYa,EAA2Bb,CAAQ,EAC/C,YAAac,EAAqCd,CAAQ,EAC1D,iBAAkBe,EAA0Cf,CAAQ,EACpE,SAAUgB,EAAkChB,CAAQ,EACpD,QAASiB,EAAiCjB,CAAQ,EAClD,oBAAqBkB,EAAoClB,CAAQ,EACjE,YAAamB,EAA4BnB,CAAQ,CACnD,CACF","names":["unstable_exports","__export","createAppPageObject","createPageObjects","__toCommonJS","common","page","self","val","code","opts","name","awaitAttempt","awaitPrepare","awaitRequests","response","originalInput","createAPIKeysComponentPageObject","testArgs","page","expirationOptions","common","value","TESTING_TOKEN_PARAM","ERROR_MISSING_FRONTEND_API_URL","setupClerkTestingToken","context","options","page","browserContext","fapiUrl","ERROR_MISSING_FRONTEND_API_URL","escapedFapiUrl","apiUrl","route","originalUrl","testingToken","TESTING_TOKEN_PARAM","response","json","createAppPageObject","testArgs","app","page","useTestingToken","appPage","setupClerkTestingToken","path","opts","url","relativePath","array","map","acc","cookie","createCheckoutPageObject","testArgs","page","self","common","selector","card","frame","state","iframe","createClerkPageObject","page","import_test","createExpectPageObject","page","res","redirect","args","createImpersonationPageObject","testArgs","page","selector","createKeylessPopoverPageObject","testArgs","page","elementId","val","import_test","createOrganizationSwitcherComponentPageObject","testArgs","page","self","common","relativePath","createPlanDetailsPageObject","testArgs","page","common","selector","createPricingTablePageObject","testArgs","page","locators","planSlug","ensurePricingPeriod","period","waitForAttribute","selector","attribute","value","timeout","sel","attr","val","isAnnually","common","shouldSwitch","targetButtonName","import_test","createSessionTaskComponentPageObject","testArgs","page","common","fakeOrganization","createOrganizationButton","newPassword","confirmPassword","resetPasswordButton","import_test","createSignInComponentPageObject","testArgs","page","self","common","opts","navRes","selector","state","val","passField","provider","email","password","waitForSession","identifierField","createSignUpComponentPageObject","testArgs","page","self","common","opts","selector","state","provider","createSubscriptionDetailsPageObject","testArgs","page","self","common","selector","createTestingTokenPageObject","page","setupClerkTestingToken","import_test","SELECTOR","createUserAvatarPageObject","testArgs","page","self","opts","selector","import_test","createUserButtonPageObject","testArgs","page","menuItems","menuItem","emailAddress","createUserProfileComponentPageObject","testArgs","page","self","common","opts","section","opened","value","state","createUserVerificationComponentPageObject","testArgs","page","common","selector","createWaitlistComponentPageObject","testArgs","page","self","common","opts","selector","createPageObjects","page","useTestingToken","baseURL","app","createAppPageObject","testArgs","createClerkPageObject","createCheckoutPageObject","createExpectPageObject","createImpersonationPageObject","createKeylessPopoverPageObject","createOrganizationSwitcherComponentPageObject","createPricingTablePageObject","createSessionTaskComponentPageObject","createSignInComponentPageObject","createSignUpComponentPageObject","createTestingTokenPageObject","createUserAvatarPageObject","createUserButtonPageObject","createUserProfileComponentPageObject","createUserVerificationComponentPageObject","createWaitlistComponentPageObject","createAPIKeysComponentPageObject","createSubscriptionDetailsPageObject","createPlanDetailsPageObject"]}
1
+ {"version":3,"sources":["../../../src/playwright/unstable/index.ts","../../../src/playwright/unstable/page-objects/common.ts","../../../src/playwright/unstable/page-objects/apiKeys.ts","../../../src/common/constants.ts","../../../src/common/errors.ts","../../../src/playwright/setupClerkTestingToken.ts","../../../src/playwright/unstable/page-objects/app.ts","../../../src/playwright/unstable/page-objects/checkout.ts","../../../src/playwright/unstable/page-objects/clerk.ts","../../../src/playwright/unstable/page-objects/expect.ts","../../../src/playwright/unstable/page-objects/impersonation.ts","../../../src/playwright/unstable/page-objects/keylessPopover.ts","../../../src/playwright/unstable/page-objects/organizationSwitcher.ts","../../../src/playwright/unstable/page-objects/planDetails.ts","../../../src/playwright/unstable/page-objects/pricingTable.ts","../../../src/playwright/unstable/page-objects/sessionTask.ts","../../../src/playwright/unstable/page-objects/signIn.ts","../../../src/playwright/unstable/page-objects/signUp.ts","../../../src/playwright/unstable/page-objects/subscriptionDetails.ts","../../../src/playwright/unstable/page-objects/testingToken.ts","../../../src/playwright/unstable/page-objects/userAvatar.ts","../../../src/playwright/unstable/page-objects/userButton.ts","../../../src/playwright/unstable/page-objects/userProfile.ts","../../../src/playwright/unstable/page-objects/userVerification.ts","../../../src/playwright/unstable/page-objects/waitlist.ts","../../../src/playwright/unstable/page-objects/index.ts"],"sourcesContent":["import { createPageObjects } from './page-objects';\nimport { createAppPageObject } from './page-objects/app';\n\nexport type { EnhancedPage } from './page-objects/app';\nexport { createPageObjects, createAppPageObject };\n","import type { EnhancedPage } from './app';\n\ntype EnterOtpCodeOptions = {\n name?: string;\n awaitRequests?: boolean;\n awaitPrepare?: boolean;\n awaitAttempt?: boolean;\n};\n\nexport const common = ({ page }: { page: EnhancedPage }) => {\n const self = {\n continue: () => {\n return page.getByRole('button', { name: 'Continue', exact: true }).click();\n },\n setEmailAddress: (val: string) => {\n return self.getEmailAddressInput().fill(val);\n },\n setPassword: (val: string) => {\n return self.getPasswordInput().fill(val);\n },\n setPasswordConfirmation: (val: string) => {\n return page.locator('input[name=confirmPassword]').fill(val);\n },\n enterOtpCode: async (code: string, opts?: EnterOtpCodeOptions) => {\n const {\n name = 'Enter verification code',\n awaitAttempt = true,\n awaitPrepare = true,\n awaitRequests = true,\n } = opts ?? {};\n\n if (awaitRequests && awaitPrepare) {\n const prepareVerificationPromise = page.waitForResponse(\n response =>\n response.request().method() === 'POST' &&\n (response.url().includes('prepare_verification') ||\n response.url().includes('prepare_first_factor') ||\n response.url().includes('prepare_second_factor')),\n );\n await prepareVerificationPromise;\n }\n\n // Handle the case for both OTP input versions\n const originalInput = page.getByRole('textbox', { name: 'Enter verification code. Digit 1' });\n if (await originalInput.isVisible()) {\n console.warn('Using the original OTP input');\n await originalInput.click();\n await page.keyboard.type(code, { delay: 100 });\n } else {\n await page.getByLabel(name).fill(code);\n }\n\n if (awaitRequests && awaitAttempt) {\n const attemptVerificationPromise = page.waitForResponse(\n response =>\n response.request().method() === 'POST' &&\n (response.url().includes('attempt_verification') ||\n response.url().includes('attempt_first_factor') ||\n response.url().includes('attempt_second_factor')),\n );\n await attemptVerificationPromise;\n }\n },\n enterTestOtpCode: async (opts?: EnterOtpCodeOptions) => {\n return self.enterOtpCode('424242', opts);\n },\n // @deprecated Use .enterTestOtpCode({ name: '...' }) instead\n fillTestOtpCode: async (name: string, opts?: Omit<EnterOtpCodeOptions, 'name'>) => {\n return self.enterOtpCode('424242', { name, ...opts });\n },\n getIdentifierInput: () => {\n return page.locator('input[name=identifier]');\n },\n getEmailAddressInput: () => {\n return page.locator('input[name=emailAddress]');\n },\n getPhoneNumberInput: () => {\n return page.locator('input[name=phoneNumber]');\n },\n getUsernameInput: () => {\n return page.locator('input[name=username]');\n },\n getPasswordInput: () => {\n return page.locator('input[name=password]');\n },\n getLegalAccepted: () => {\n return page.locator('input[name=legalAccepted]');\n },\n getFirstNameInput: () => {\n return page.locator('input[name=firstName]');\n },\n getLastNameInput: () => {\n return page.locator('input[name=lastName]');\n },\n waitForSession: async () => {\n return page.waitForFunction(() => {\n return !!window.Clerk?.session;\n });\n },\n };\n\n return self;\n};\n","import type { EnhancedPage } from './app';\nimport { common } from './common';\n\nexport const createAPIKeysComponentPageObject = (testArgs: { page: EnhancedPage }) => {\n const { page } = testArgs;\n\n const expirationOptions = {\n never: 'Never',\n '1d': '1 Day',\n '7d': '7 Days',\n '30d': '30 Days',\n '60d': '60 Days',\n '90d': '90 Days',\n '180d': '180 Days',\n '1y': '1 Year',\n } as const;\n\n const self = {\n ...common(testArgs),\n waitForMounted: () => {\n return page.waitForSelector('.cl-apiKeys-root', { state: 'attached' });\n },\n clickAddButton: () => {\n return page.getByText(/Add new key/i).click();\n },\n waitForFormOpened: () => {\n return page.waitForSelector('.cl-apiKeysCreateForm', { state: 'attached' });\n },\n waitForFormClosed: () => {\n return page.waitForSelector('.cl-apiKeysCreateForm', { state: 'detached' });\n },\n waitForRevokeModalOpened: () => {\n return page.waitForSelector('.cl-apiKeysRevokeModal', { state: 'attached' });\n },\n waitForRevokeModalClosed: () => {\n return page.waitForSelector('.cl-apiKeysRevokeModal', { state: 'detached' });\n },\n waitForCopyModalOpened: () => {\n return page.waitForSelector('.cl-apiKeysCopyModal', { state: 'attached' });\n },\n waitForCopyModalClosed: () => {\n return page.waitForSelector('.cl-apiKeysCopyModal', { state: 'detached' });\n },\n clickCopyAndCloseButton: () => {\n return page.locator('.cl-apiKeysCopyModal .cl-apiKeysCopyModalSubmitButton').click();\n },\n typeName: (value: string) => {\n return page.getByLabel(/Secret key name/i).fill(value);\n },\n typeDescription: (value: string) => {\n return page.getByLabel(/Description/i).fill(value);\n },\n selectExpiration: async (value?: keyof typeof expirationOptions) => {\n await page.getByRole('button', { name: /Select date/i }).click();\n return page.getByText(expirationOptions[value ?? 'never'], { exact: true }).click({ force: true });\n },\n clickSaveButton: () => {\n return page.getByText(/Create key/i).click();\n },\n typeRevokeConfirmation: (value: string) => {\n return page.getByLabel(/Type \"Revoke\" to confirm/i).fill(value);\n },\n clickConfirmRevokeButton: () => {\n return page.getByText(/Revoke key/i).click();\n },\n };\n return self;\n};\n","export const TESTING_TOKEN_PARAM = '__clerk_testing_token';\n","export const ERROR_MISSING_FRONTEND_API_URL =\n 'The Clerk Frontend API URL is required to bypass bot protection. ' +\n 'Make sure the clerkSetup function is called during your global setup before setupClerkTestingToken is called.';\n","import type { BrowserContext, Page } from '@playwright/test';\n\nimport type { SetupClerkTestingTokenOptions } from '../common';\nimport { ERROR_MISSING_FRONTEND_API_URL, TESTING_TOKEN_PARAM } from '../common';\n\ntype SetupClerkTestingTokenParams = {\n context?: BrowserContext;\n page?: Page;\n options?: SetupClerkTestingTokenOptions;\n};\n\n/**\n * Bypasses bot protection by appending the testing token in the Frontend API requests.\n *\n * @param params.context - The Playwright browser context object.\n * @param params.page - The Playwright page object.\n * @param params.options.frontendApiUrl - The frontend API URL for your Clerk dev instance, without the protocol.\n * @returns A promise that resolves when the bot protection bypass is set up.\n * @throws An error if the Frontend API URL is not provided.\n * @example\n * import { setupClerkTestingToken } from '@clerk/testing/playwright';\n *\n * test('should bypass bot protection', async ({ context }) => {\n * await setupClerkTestingToken({ context });\n * const page = await context.newPage();\n * await page.goto('https://your-app.com');\n * // Continue with your test...\n * });\n */\nexport const setupClerkTestingToken = async ({ context, options, page }: SetupClerkTestingTokenParams) => {\n const browserContext = context ?? page?.context();\n\n if (!browserContext) {\n throw new Error('Either context or page must be provided to setup testing token');\n }\n\n const fapiUrl = options?.frontendApiUrl || process.env.CLERK_FAPI;\n if (!fapiUrl) {\n throw new Error(ERROR_MISSING_FRONTEND_API_URL);\n }\n\n const escapedFapiUrl = fapiUrl.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n const apiUrl = new RegExp(`^https://${escapedFapiUrl}/v1/.*?(\\\\?.*)?$`);\n\n await browserContext.route(apiUrl, async route => {\n const originalUrl = new URL(route.request().url());\n const testingToken = process.env.CLERK_TESTING_TOKEN;\n\n if (testingToken) {\n originalUrl.searchParams.set(TESTING_TOKEN_PARAM, testingToken);\n }\n\n try {\n const response = await route.fetch({\n url: originalUrl.toString(),\n });\n\n const json = await response.json();\n\n // Override captcha_bypass in /v1/client\n if (json?.response?.captcha_bypass === false) {\n json.response.captcha_bypass = true;\n }\n\n // Override captcha_bypass in piggybacking\n if (json?.client?.captcha_bypass === false) {\n json.client.captcha_bypass = true;\n }\n\n await route.fulfill({\n response,\n json,\n });\n } catch {\n await route\n .continue({\n url: originalUrl.toString(),\n })\n .catch(console.error);\n }\n });\n};\n","import type { Page } from '@playwright/test';\n\nimport { setupClerkTestingToken } from '../../setupClerkTestingToken';\n\nexport type EnhancedPage = ReturnType<typeof createAppPageObject>;\nexport const createAppPageObject = (testArgs: { page: Page; useTestingToken?: boolean }, app: { baseURL?: string }) => {\n const { page, useTestingToken = true } = testArgs;\n const appPage = Object.create(page) as Page;\n const helpers = {\n goToAppHome: async () => {\n if (!app.baseURL) {\n throw new Error(\n 'Attempted to call method requiring baseURL, but baseURL was not provided to createPageObjects.',\n );\n }\n\n try {\n if (useTestingToken) {\n await setupClerkTestingToken({ page });\n }\n\n await page.goto(app.baseURL);\n } catch {\n // do not fail the test if interstitial is returned (401)\n }\n },\n goToRelative: async (\n path: string,\n opts: { waitUntil?: any; searchParams?: URLSearchParams; timeout?: number } = {},\n ) => {\n if (!app.baseURL) {\n throw new Error(\n 'Attempted to call method requiring baseURL, but baseURL was not provided to createPageObjects.',\n );\n }\n let url: URL;\n\n try {\n // When testing applications using real domains we want to manually navigate to the domain first\n // and not follow serverUrl (localhost) by default, as this is usually proxied\n if (page.url().includes('about:blank')) {\n url = new URL(path, app.baseURL);\n } else {\n url = new URL(path, page.url());\n }\n } catch {\n // However, in most tests we don't need to manually navigate to the domain\n // as the test is using a localhost app directly\n // This handles the case where the page is at about:blank\n // and instead it uses the serverUrl\n url = new URL(path, app.baseURL);\n }\n\n if (opts.searchParams) {\n url.search = opts.searchParams.toString();\n }\n\n if (useTestingToken) {\n await setupClerkTestingToken({ page });\n }\n\n return page.goto(url.toString(), { timeout: opts.timeout ?? 20000, waitUntil: opts.waitUntil });\n },\n waitForClerkJsLoaded: async () => {\n return page.waitForFunction(() => {\n return window.Clerk?.loaded;\n });\n },\n signOut: async () => {\n return page.waitForFunction(() => {\n return window.Clerk?.signOut({});\n });\n },\n waitForClerkComponentMounted: async () => {\n return page.waitForSelector('.cl-rootBox', { state: 'attached' });\n },\n waitForAppUrl: async (relativePath: string) => {\n if (!app.baseURL) {\n throw new Error(\n 'Attempted to call method requiring baseURL, but baseURL was not provided to createPageObjects.',\n );\n }\n return page.waitForURL(new URL(relativePath, app.baseURL).toString());\n },\n /**\n * Get the cookies for the URL the page is currently at.\n * Suffixed cookies can be accessed by using the wildcard character `*` at the end of the cookie name,\n * eg `get('__session')` and `get('__session_*')`.\n */\n cookies: async () => {\n const array = await page.context().cookies();\n const map = array.reduce((acc, cookie) => {\n // If a suffixed cookie is found, we usually don't care about the suffix itself\n // Instead, simply replace the suffix with _* so we can easily read it\n // TODO: deal with collisions if neede\n // TODO: might be too much magic here\n // Maybe extract this into a different helper?\n if (cookie.name.match(/^(__.*_)(.{8})$/)) {\n acc.set(cookie.name.replace(/^(__.*_)(.{8})$/, '$1*'), cookie);\n } else {\n acc.set(cookie.name, cookie);\n }\n return acc;\n }, new Map<string, (typeof array)[number]>());\n return Object.assign(map, { raw: () => array });\n },\n };\n return Object.assign(appPage, helpers);\n};\n","import type { EnhancedPage } from './app';\nimport { common } from './common';\n\nexport const createCheckoutPageObject = (testArgs: { page: EnhancedPage }) => {\n const { page } = testArgs;\n const self = {\n ...common(testArgs),\n waitForMounted: (selector = '.cl-checkout-root') => {\n return page.waitForSelector(selector, { state: 'attached', timeout: 20000 });\n },\n closeDrawer: () => {\n return page.locator('.cl-drawerClose').click();\n },\n fillTestCard: async () => {\n await self.fillCard({\n number: '4242424242424242',\n expiration: '1234',\n cvc: '123',\n country: 'United States',\n zip: '12345',\n });\n },\n fillCard: async (card: { number: string; expiration: string; cvc: string; country: string; zip: string }) => {\n await self.waitForStripeElements({ state: 'visible' });\n const frame = page.frameLocator('iframe[src*=\"elements-inner-payment\"]');\n await frame.getByLabel('Card number').fill(card.number);\n await frame.getByLabel('Expiration date').fill(card.expiration);\n await frame.getByLabel('Security code').fill(card.cvc);\n await frame.getByLabel('Country').selectOption(card.country);\n await frame.getByLabel('ZIP code').fill(card.zip);\n },\n waitForStripeElements: async ({ state = 'visible' }: { state?: 'visible' | 'hidden' } = {}) => {\n const iframe = page.locator('iframe[src*=\"elements-inner-payment\"]');\n if (state === 'visible') {\n await iframe.waitFor({ state: 'attached', timeout: 20000 });\n await page.frameLocator('iframe[src*=\"elements-inner-payment\"]').getByLabel('Card number').waitFor({\n state: 'visible',\n timeout: 20000,\n });\n } else {\n await page.frameLocator('iframe[src*=\"elements-inner-payment\"]').getByLabel('Card number').waitFor({\n state: 'hidden',\n timeout: 20000,\n });\n }\n },\n clickPayOrSubscribe: async () => {\n await self.root.getByRole('button', { name: /subscribe|pay\\s\\$|start/i }).click();\n },\n waitForSubscribeButton: async () => {\n await self.root.getByRole('button', { name: /^subscribe$/i }).waitFor({ state: 'visible' });\n },\n confirmAndContinue: async () => {\n await self.root.getByRole('button', { name: /^continue$/i }).click();\n },\n clickAddPaymentMethod: async () => {\n await self.root.getByRole('radio', { name: 'Add payment method' }).click();\n },\n clickPaymentMethods: async () => {\n await self.root.getByRole('radio', { name: 'Payment Methods' }).click();\n },\n root: page.locator('.cl-checkout-root'),\n };\n return self;\n};\n","import type { EnhancedPage } from './app';\n\nexport const createClerkPageObject = ({ page }: { page: EnhancedPage }) => {\n return {\n toBeLoaded: async () => {\n return page.waitForFunction(() => {\n return !!window.Clerk?.loaded;\n });\n },\n getClientSideActor: () => {\n return page.evaluate(() => {\n return window.Clerk?.session?.actor;\n });\n },\n toBeLoading: async () => {\n return page.waitForFunction(() => {\n return window.Clerk?.status === 'loading';\n });\n },\n toBeReady: async () => {\n return page.waitForFunction(() => {\n return window.Clerk?.status === 'ready';\n });\n },\n toBeDegraded: async () => {\n return page.waitForFunction(() => {\n return window.Clerk?.status === 'degraded';\n });\n },\n getClientSideUser: () => {\n return page.evaluate(() => {\n return window.Clerk?.user;\n });\n },\n };\n};\n","import type { Response } from '@playwright/test';\nimport { expect } from '@playwright/test';\n\nimport type { EnhancedPage } from './app';\n\nexport const createExpectPageObject = ({ page }: { page: EnhancedPage }) => {\n return {\n toBeHandshake: async (res: Response) => {\n // Travel the redirect chain until we find the handshake header\n // TODO: Loop through the redirects until we find a handshake header, or timeout trying\n const redirect = await res.request().redirectedFrom()?.redirectedFrom()?.response();\n expect(redirect?.status()).toBe(307);\n expect(redirect?.headers()['x-clerk-auth-status']).toContain('handshake');\n },\n toBeSignedOut: (args?: { timeOut: number }) => {\n return page.waitForFunction(\n () => {\n return !window.Clerk?.user;\n },\n null,\n { timeout: args?.timeOut },\n );\n },\n toBeSignedIn: async () => {\n return page.waitForFunction(() => {\n return !!window.Clerk?.user;\n });\n },\n toBeSignedInAsActor: async () => {\n return page.waitForFunction(() => {\n return !!window.Clerk?.session?.actor;\n });\n },\n toHaveResolvedTask: async () => {\n return page.waitForFunction(() => {\n return !window.Clerk?.session?.currentTask;\n });\n },\n };\n};\n","import type { EnhancedPage } from './app';\n\nexport const createImpersonationPageObject = (testArgs: { page: EnhancedPage }) => {\n const { page } = testArgs;\n const self = {\n waitForMounted: (selector = '.cl-impersonationFab') => {\n return page.waitForSelector(selector, { state: 'attached' });\n },\n getSignOutLink: () => {\n return page.locator('.cl-impersonationFab').getByText('Sign out');\n },\n };\n return self;\n};\n","import type { EnhancedPage } from './app';\n\nexport const createKeylessPopoverPageObject = (testArgs: { page: EnhancedPage }) => {\n const { page } = testArgs;\n // TODO: Is this the ID we really want ?\n const elementId = '#--clerk-keyless-prompt-button';\n const self = {\n waitForMounted: () => page.waitForSelector(elementId, { state: 'attached' }),\n waitForUnmounted: () => page.waitForSelector(elementId, { state: 'detached' }),\n isExpanded: () =>\n page\n .locator(elementId)\n .getAttribute('aria-expanded')\n .then(val => val === 'true'),\n toggle: () => page.locator(elementId).click(),\n\n promptsToClaim: () => {\n return page.getByRole('link', { name: /^claim application$/i });\n },\n promptToUseClaimedKeys: () => {\n return page.getByRole('link', { name: /^get api keys$/i });\n },\n promptToDismiss: () => {\n return page.getByRole('button', { name: /^dismiss$/i });\n },\n };\n return self;\n};\n","import { expect } from '@playwright/test';\n\nimport type { EnhancedPage } from './app';\nimport { common } from './common';\n\nexport const createOrganizationSwitcherComponentPageObject = (testArgs: { page: EnhancedPage }) => {\n const { page } = testArgs;\n\n const self = {\n ...common(testArgs),\n goTo: async (relativePath = '/switcher') => {\n await page.goToRelative(relativePath);\n return self.waitForMounted();\n },\n waitForMounted: () => {\n return page.waitForSelector('.cl-organizationSwitcher-root', { state: 'attached' });\n },\n expectNoOrganizationSelected: () => {\n return expect(page.getByText(/No organization selected/i)).toBeVisible();\n },\n expectPersonalAccount: () => {\n return expect(page.getByText(/personal account/i)).toBeVisible();\n },\n toggleTrigger: () => {\n return page.locator('.cl-organizationSwitcherTrigger').click();\n },\n waitForAnOrganizationToSelected: () => {\n return page.waitForSelector('.cl-userPreviewMainIdentifier__personalWorkspace', { state: 'detached' });\n },\n };\n\n return self;\n};\n","import type { EnhancedPage } from './app';\nimport { common } from './common';\n\nexport const createPlanDetailsPageObject = (testArgs: { page: EnhancedPage }) => {\n const { page } = testArgs;\n const self = {\n ...common(testArgs),\n waitForMounted: (selector = '.cl-planDetails-root') => {\n return page.waitForSelector(selector, { state: 'attached' });\n },\n root: page.locator('.cl-planDetails-root'),\n };\n return self;\n};\n","import type { EnhancedPage } from './app';\nimport { common } from './common';\n\ntype BillingPeriod = 'monthly' | 'annually';\n\nexport const createPricingTablePageObject = (testArgs: { page: EnhancedPage }) => {\n const { page } = testArgs;\n\n const locators = {\n toggle: (planSlug: string) => page.locator(`.cl-pricingTableCard__${planSlug} .cl-pricingTableCardPeriodToggle`),\n indicator: (planSlug: string) => page.locator(`.cl-pricingTableCard__${planSlug} .cl-switchIndicator`),\n badge: (planSlug: string) => page.locator(`.cl-pricingTableCard__${planSlug} .cl-badge`),\n footer: (planSlug: string) => page.locator(`.cl-pricingTableCard__${planSlug} .cl-pricingTableCardFooter`),\n };\n\n const ensurePricingPeriod = async (planSlug: string, period: BillingPeriod): Promise<void> => {\n async function waitForAttribute(selector: string, attribute: string, value: string, timeout = 5000) {\n return page\n .waitForFunction(\n ({ sel, attr, val }) => {\n const element = document.querySelector(sel);\n return element?.getAttribute(attr) === val;\n },\n { sel: selector, attr: attribute, val: value },\n { timeout },\n )\n .then(() => {\n return true;\n })\n .catch(() => {\n return false;\n });\n }\n\n const isAnnually = await waitForAttribute(\n `.cl-pricingTableCard__${planSlug} .cl-switchIndicator`,\n 'data-checked',\n 'true',\n 500,\n );\n\n if (isAnnually && period === 'monthly') {\n await locators.toggle(planSlug).click();\n }\n\n if (!isAnnually && period === 'annually') {\n await locators.toggle(planSlug).click();\n }\n };\n\n const self = {\n ...common(testArgs),\n waitForMounted: (selector = '.cl-pricingTable-root') => {\n return page.waitForSelector(selector, { state: 'attached' });\n },\n clickResubscribe: async () => {\n await page.getByText('Re-subscribe').click();\n },\n waitToBeActive: async ({ planSlug }: { planSlug: string }) => {\n return locators.badge(planSlug).getByText('Active').waitFor({ state: 'visible' });\n },\n waitToBeFreeTrial: async ({ planSlug }: { planSlug: string }) => {\n return locators.badge(planSlug).getByText('Free trial').waitFor({ state: 'visible' });\n },\n getPlanCardCTA: ({ planSlug }: { planSlug: string }) => {\n return locators.footer(planSlug).getByRole('button', {\n name: /get|switch|subscribe/i,\n });\n },\n startCheckout: async ({\n planSlug,\n shouldSwitch,\n period,\n }: {\n planSlug: string;\n shouldSwitch?: boolean;\n period?: BillingPeriod;\n }) => {\n const targetButtonName =\n shouldSwitch === true\n ? 'Switch to this plan'\n : shouldSwitch === false\n ? /subscribe/i\n : /get|switch|subscribe|Start \\d+-day free trial/i;\n\n if (period) {\n await ensurePricingPeriod(planSlug, period);\n }\n\n await locators\n .footer(planSlug)\n .getByRole('button', {\n name: targetButtonName,\n })\n .click();\n },\n };\n return self;\n};\n","import { expect } from '@playwright/test';\n\nimport type { EnhancedPage } from './app';\nimport { common } from './common';\n\nexport const createSessionTaskComponentPageObject = (testArgs: { page: EnhancedPage }) => {\n const { page } = testArgs;\n\n const self = {\n ...common(testArgs),\n resolveForceOrganizationSelectionTask: async (fakeOrganization: { name: string; slug?: string }) => {\n const createOrganizationButton = page.getByRole('button', { name: /continue/i });\n\n await expect(createOrganizationButton).toBeVisible();\n\n await page.locator('input[name=name]').fill(fakeOrganization.name);\n if (fakeOrganization.slug) {\n await page.locator('input[name=slug]').fill(fakeOrganization.slug);\n }\n\n await createOrganizationButton.click();\n },\n resolveResetPasswordTask: async ({\n newPassword,\n confirmPassword,\n }: {\n newPassword: string;\n confirmPassword: string;\n }) => {\n await page.locator('input[name=newPassword]').fill(newPassword);\n await page.locator('input[name=confirmPassword]').fill(confirmPassword);\n\n const resetPasswordButton = page.getByRole('button', { name: /reset password/i });\n await expect(resetPasswordButton).toBeVisible();\n await resetPasswordButton.click();\n },\n };\n\n return self;\n};\n","import { expect } from '@playwright/test';\n\nimport type { EnhancedPage } from './app';\nimport { common } from './common';\n\nexport const createSignInComponentPageObject = (testArgs: { page: EnhancedPage }) => {\n const { page } = testArgs;\n const self = {\n ...common(testArgs),\n goTo: async (opts?: { searchParams?: URLSearchParams; headlessSelector?: string; timeout?: number }) => {\n const navRes = await page.goToRelative('/sign-in', opts);\n\n if (typeof opts?.headlessSelector !== 'undefined') {\n await self.waitForMounted(opts.headlessSelector);\n } else {\n await self.waitForMounted();\n }\n return navRes;\n },\n waitForMounted: (selector = '.cl-signIn-root') => {\n return page.waitForSelector(selector, { state: 'attached' });\n },\n waitForModal: (state?: 'open' | 'closed') => {\n return page.waitForSelector('.cl-modalContent:has(.cl-signIn-root)', {\n state: state === 'closed' ? 'detached' : 'attached',\n });\n },\n setIdentifier: (val: string) => {\n return self.getIdentifierInput().fill(val);\n },\n setInstantPassword: async (val: string) => {\n const passField = self.getPasswordInput();\n await expect(passField).toBeVisible();\n await passField.fill(val, { force: true });\n },\n usePhoneNumberIdentifier: () => {\n return page.getByRole('link', { name: /^use phone/i });\n },\n useEmailIdentifier: () => {\n return page.getByRole('link', { name: /^use email/i });\n },\n useUsernameIdentifier: () => {\n return page.getByRole('link', { name: /^username$/i });\n },\n getForgotPassword: () => {\n return page.getByRole('link', { name: /forgot password/i });\n },\n getGoToSignUp: () => {\n return page.getByRole('link', { name: /sign up/i });\n },\n getResetPassword: () => {\n return page.getByRole('button', { name: /(reset password|reset your password)/i });\n },\n getUseAnotherMethodLink: () => {\n return page.getByRole('link', { name: /use another method/i });\n },\n getAltMethodsEmailCodeButton: () => {\n return page.getByRole('button', { name: /email code to/i });\n },\n getAltMethodsEmailLinkButton: () => {\n return page.getByRole('button', { name: /email link to/i });\n },\n signInWithOauth: (provider: string) => {\n return page.getByRole('button', { name: new RegExp(`continue with ${provider}`, 'gi') });\n },\n signInWithEmailAndInstantPassword: async ({\n email,\n password,\n waitForSession = true,\n }: {\n email: string;\n password: string;\n waitForSession?: boolean;\n }) => {\n const identifierField = self.getIdentifierInput();\n await expect(identifierField).toBeVisible();\n\n await identifierField.fill(email);\n await self.setInstantPassword(password);\n await self.continue();\n\n if (waitForSession) {\n await self.waitForSession();\n }\n },\n };\n return self;\n};\n","import type { EnhancedPage } from './app';\nimport { common } from './common';\n\ntype SignUpFormInputs = {\n email?: string;\n password?: string;\n firstName?: string;\n lastName?: string;\n username?: string;\n phoneNumber?: string;\n legalAccepted?: boolean;\n};\n\nexport const createSignUpComponentPageObject = (testArgs: { page: EnhancedPage }) => {\n const { page } = testArgs;\n\n const self = {\n ...common(testArgs),\n goTo: async (opts?: { searchParams?: URLSearchParams; headlessSelector?: string }) => {\n await page.goToRelative('/sign-up', { searchParams: opts?.searchParams });\n\n if (typeof opts?.headlessSelector !== 'undefined') {\n return self.waitForMounted(opts.headlessSelector);\n }\n return self.waitForMounted();\n },\n waitForMounted: (selector = '.cl-signUp-root') => {\n return page.waitForSelector(selector, { state: 'attached' });\n },\n waitForModal: (state?: 'open' | 'closed') => {\n return page.waitForSelector('.cl-modalContent:has(.cl-signUp-root)', {\n state: state === 'closed' ? 'detached' : 'attached',\n });\n },\n signUpWithOauth: (provider: string) => {\n return page.getByRole('button', { name: new RegExp(`continue with ${provider}`, 'gi') });\n },\n signUp: async (opts: SignUpFormInputs) => {\n if (opts.firstName) {\n await self.getFirstNameInput().fill(opts.firstName);\n }\n\n if (opts.lastName) {\n await self.getLastNameInput().fill(opts.lastName);\n }\n\n if (opts.email) {\n await self.getEmailAddressInput().fill(opts.email);\n }\n\n if (opts.username) {\n await self.getUsernameInput().fill(opts.username);\n }\n\n if (opts.phoneNumber) {\n await self.getPhoneNumberInput().fill(opts.phoneNumber);\n }\n\n if (opts.password) {\n await self.getPasswordInput().fill(opts.password);\n }\n\n if (opts.legalAccepted) {\n await self.getLegalAccepted().check();\n }\n\n await self.continue();\n },\n signUpWithEmailAndPassword: async (opts: Pick<SignUpFormInputs, 'email' | 'password'>) => {\n await self.signUp({ email: opts.email, password: opts.password });\n },\n waitForEmailVerificationScreen: async () => {\n await page.waitForURL(/verify/);\n await page.getByRole('heading', { name: /Verify your email/i }).waitFor();\n },\n };\n\n return self;\n};\n","import type { EnhancedPage } from './app';\nimport { common } from './common';\n\nexport const createSubscriptionDetailsPageObject = (testArgs: { page: EnhancedPage }) => {\n const { page } = testArgs;\n const self = {\n ...common(testArgs),\n waitForMounted: (selector = '.cl-subscriptionDetails-root') => {\n return page.waitForSelector(selector, { state: 'attached' });\n },\n waitForUnmounted: () => {\n return self.root.locator('.cl-drawerRoot').waitFor({ state: 'detached' });\n },\n closeDrawer: () => {\n return self.root.locator('.cl-drawerClose').click();\n },\n root: page.locator('.cl-subscriptionDetails-root'),\n };\n return self;\n};\n","import { setupClerkTestingToken } from '../../setupClerkTestingToken';\nimport type { EnhancedPage } from './app';\n\nexport const createTestingTokenPageObject = ({ page }: { page: EnhancedPage }) => {\n return {\n setup: async () => setupClerkTestingToken({ page }),\n };\n};\n","import { expect } from '@playwright/test';\n\nimport type { EnhancedPage } from './app';\n\nconst SELECTOR = '.cl-userAvatarBox';\n\nexport const createUserAvatarPageObject = (testArgs: { page: EnhancedPage }) => {\n const { page } = testArgs;\n\n const self = {\n goTo: async (opts?: { searchParams: URLSearchParams }) => {\n await page.goToRelative('/user-avatar', opts);\n return self.waitForMounted();\n },\n waitForMounted: (selector = SELECTOR) => {\n return page.waitForSelector(selector, { state: 'attached' });\n },\n toBeVisible: async (selector = SELECTOR) => {\n return await expect(page.locator(selector).getByRole('img')).toBeVisible();\n },\n };\n\n return self;\n};\n","import { expect } from '@playwright/test';\n\nimport type { EnhancedPage } from './app';\n\nexport const createUserButtonPageObject = (testArgs: { page: EnhancedPage }) => {\n const { page } = testArgs;\n\n const self = {\n waitForMounted: () => {\n return page.waitForSelector('.cl-userButtonTrigger', { state: 'attached' });\n },\n toggleTrigger: () => {\n return page.locator('.cl-userButtonTrigger').click();\n },\n waitForPopover: () => {\n return page.waitForSelector('.cl-userButtonPopoverCard', { state: 'visible' });\n },\n waitForPopoverClosed: () => {\n return page.waitForSelector('.cl-userButtonPopoverCard', { state: 'detached' });\n },\n toHaveVisibleMenuItems: async (menuItems: string | RegExp | Array<string | RegExp>) => {\n if (typeof menuItems === 'string' || menuItems instanceof RegExp) {\n menuItems = [menuItems];\n }\n for (const menuItem of menuItems) {\n await expect(page.getByRole('menuitem', { name: menuItem })).toBeVisible();\n }\n },\n triggerSignOut: () => {\n return page.getByRole('menuitem', { name: /Sign out$/i }).click();\n },\n triggerManageAccount: () => {\n return page.getByRole('menuitem', { name: /Manage account/i }).click();\n },\n switchAccount: (emailAddress: string) => {\n return page.getByText(emailAddress).click();\n },\n };\n\n return self;\n};\n","import type { EnhancedPage } from './app';\nimport { common } from './common';\n\nexport type Sections = 'profile' | 'emailAddresses' | 'username' | 'phoneNumbers' | 'danger';\n\nexport const createUserProfileComponentPageObject = (testArgs: { page: EnhancedPage }) => {\n const { page } = testArgs;\n const self = {\n ...common(testArgs),\n goTo: async (opts?: { searchParams: URLSearchParams }) => {\n await page.goToRelative('/user', opts);\n return self.waitForMounted();\n },\n switchToSecurityTab: async () => {\n await page.getByText(/Security/i).click();\n },\n switchToBillingTab: async () => {\n await page.getByText(/Billing/i).click();\n },\n switchToAPIKeysTab: async () => {\n await page.getByText(/API keys/i).click();\n },\n waitForMounted: () => {\n return page.waitForSelector('.cl-userProfile-root', { state: 'attached' });\n },\n clickSetUsername: () => {\n return page.getByText(/Set username/i).click();\n },\n clickToUpdateProfile: () => {\n return page.getByText(/update profile/i).click();\n },\n clickUpdateUsername: () => {\n return page.getByText(/update username/i).click();\n },\n clickSetPassword: () => {\n return page.getByText(/Set password/i).click();\n },\n waitForSectionCard: (section: Sections, opened: boolean) => {\n return page.waitForSelector(`.cl-profileSectionContent__${section} .cl-headerTitle`, {\n state: opened ? 'visible' : 'detached',\n });\n },\n waitForSectionCardOpened: (section: Sections) => {\n return self.waitForSectionCard(section, true);\n },\n waitForSectionCardClosed: (section: Sections) => {\n return self.waitForSectionCard(section, false);\n },\n typeUsername: (value: string) => {\n return self.getUsernameInput().fill(value);\n },\n typeFirstName: (value: string) => {\n return self.getFirstNameInput().fill(value);\n },\n typeLastName: (value: string) => {\n return self.getLastNameInput().fill(value);\n },\n typePhoneNumber: (value: string) => {\n return self.getPhoneNumberInput().fill(value);\n },\n clickAddEmailAddress: () => {\n return page.getByText(/add email address/i).click();\n },\n clickAddPhoneNumber: () => {\n return page.getByText(/add phone number/i).click();\n },\n typeEmailAddress: (value: string) => {\n return page.getByLabel(/Email address/i).fill(value);\n },\n waitForUserProfileModal: (state?: 'open' | 'closed') => {\n return page.waitForSelector('.cl-modalContent:has(.cl-userProfile-root)', {\n state: state === 'closed' ? 'detached' : 'attached',\n });\n },\n };\n return self;\n};\n","import type { EnhancedPage } from './app';\nimport { common } from './common';\n\nexport const createUserVerificationComponentPageObject = (testArgs: { page: EnhancedPage }) => {\n const { page } = testArgs;\n const self = {\n ...common(testArgs),\n waitForMounted: (selector = '.cl-userVerification-root') => {\n return page.waitForSelector(selector, { state: 'attached' });\n },\n waitForClosed: (selector = '.cl-userVerification-root') => {\n return page.waitForSelector(selector, { state: 'detached' });\n },\n closeReverificationModal: () => {\n return page.getByLabel('Close modal').click();\n },\n getUseAnotherMethodLink: () => {\n return page.getByRole('link', { name: /use another method/i });\n },\n getAltMethodsEmailCodeButton: () => {\n return page.getByRole('button', { name: /email code to/i });\n },\n getAltMethodsEmailLinkButton: () => {\n return page.getByRole('button', { name: /email link to/i });\n },\n };\n return self;\n};\n","import type { EnhancedPage } from './app';\nimport { common } from './common';\n\ntype WaitlistFormInputs = {\n email: string;\n};\n\nexport const createWaitlistComponentPageObject = (testArgs: { page: EnhancedPage }) => {\n const { page } = testArgs;\n\n const self = {\n ...common(testArgs),\n goTo: async (opts?: { searchParams?: URLSearchParams; headlessSelector?: string }) => {\n await page.goToRelative('/waitlist', { searchParams: opts?.searchParams });\n\n if (typeof opts?.headlessSelector !== 'undefined') {\n return self.waitForMounted(opts.headlessSelector);\n }\n return self.waitForMounted();\n },\n waitForMounted: (selector = '.cl-waitlist-root') => {\n return page.waitForSelector(selector, { state: 'attached' });\n },\n joinWaitlist: async (opts: WaitlistFormInputs) => {\n await self.getEmailAddressInput().fill(opts.email);\n\n await self.joinWaitlistContinue();\n },\n joinWaitlistContinue: () => {\n return page.getByRole('button', { name: 'Join the waitlist', exact: true }).click();\n },\n };\n\n return self;\n};\n","import type { Page } from '@playwright/test';\n\nimport { createAPIKeysComponentPageObject } from './apiKeys';\nimport { createAppPageObject } from './app';\nimport { createCheckoutPageObject } from './checkout';\nimport { createClerkPageObject } from './clerk';\nimport { createExpectPageObject } from './expect';\nimport { createImpersonationPageObject } from './impersonation';\nimport { createKeylessPopoverPageObject } from './keylessPopover';\nimport { createOrganizationSwitcherComponentPageObject } from './organizationSwitcher';\nimport { createPlanDetailsPageObject } from './planDetails';\nimport { createPricingTablePageObject } from './pricingTable';\nimport { createSessionTaskComponentPageObject } from './sessionTask';\nimport { createSignInComponentPageObject } from './signIn';\nimport { createSignUpComponentPageObject } from './signUp';\nimport { createSubscriptionDetailsPageObject } from './subscriptionDetails';\nimport { createTestingTokenPageObject } from './testingToken';\nimport { createUserAvatarPageObject } from './userAvatar';\nimport { createUserButtonPageObject } from './userButton';\nimport { createUserProfileComponentPageObject } from './userProfile';\nimport { createUserVerificationComponentPageObject } from './userVerification';\nimport { createWaitlistComponentPageObject } from './waitlist';\n\nexport const createPageObjects = ({\n page,\n useTestingToken = true,\n baseURL,\n}: {\n page: Page;\n useTestingToken?: boolean;\n baseURL?: string;\n}) => {\n const app = createAppPageObject({ page, useTestingToken }, { baseURL });\n const testArgs = { page: app };\n\n return {\n page: app,\n clerk: createClerkPageObject(testArgs),\n checkout: createCheckoutPageObject(testArgs),\n expect: createExpectPageObject(testArgs),\n impersonation: createImpersonationPageObject(testArgs),\n keylessPopover: createKeylessPopoverPageObject(testArgs),\n organizationSwitcher: createOrganizationSwitcherComponentPageObject(testArgs),\n pricingTable: createPricingTablePageObject(testArgs),\n sessionTask: createSessionTaskComponentPageObject(testArgs),\n signIn: createSignInComponentPageObject(testArgs),\n signUp: createSignUpComponentPageObject(testArgs),\n testingToken: createTestingTokenPageObject(testArgs),\n userAvatar: createUserAvatarPageObject(testArgs),\n userButton: createUserButtonPageObject(testArgs),\n userProfile: createUserProfileComponentPageObject(testArgs),\n userVerification: createUserVerificationComponentPageObject(testArgs),\n waitlist: createWaitlistComponentPageObject(testArgs),\n apiKeys: createAPIKeysComponentPageObject(testArgs),\n subscriptionDetails: createSubscriptionDetailsPageObject(testArgs),\n planDetails: createPlanDetailsPageObject(testArgs),\n };\n};\n"],"mappings":"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","names":["unstable_exports","__export","createAppPageObject","createPageObjects","__toCommonJS","common","page","self","val","code","opts","name","awaitAttempt","awaitPrepare","awaitRequests","response","originalInput","createAPIKeysComponentPageObject","testArgs","page","expirationOptions","common","value","TESTING_TOKEN_PARAM","ERROR_MISSING_FRONTEND_API_URL","setupClerkTestingToken","context","options","page","browserContext","fapiUrl","ERROR_MISSING_FRONTEND_API_URL","escapedFapiUrl","apiUrl","route","originalUrl","testingToken","TESTING_TOKEN_PARAM","response","json","createAppPageObject","testArgs","app","page","useTestingToken","appPage","setupClerkTestingToken","path","opts","url","relativePath","array","map","acc","cookie","createCheckoutPageObject","testArgs","page","self","common","selector","card","frame","state","iframe","createClerkPageObject","page","import_test","createExpectPageObject","page","res","redirect","args","createImpersonationPageObject","testArgs","page","selector","createKeylessPopoverPageObject","testArgs","page","elementId","val","import_test","createOrganizationSwitcherComponentPageObject","testArgs","page","self","common","relativePath","createPlanDetailsPageObject","testArgs","page","common","selector","createPricingTablePageObject","testArgs","page","locators","planSlug","ensurePricingPeriod","period","waitForAttribute","selector","attribute","value","timeout","sel","attr","val","isAnnually","common","shouldSwitch","targetButtonName","import_test","createSessionTaskComponentPageObject","testArgs","page","common","fakeOrganization","createOrganizationButton","newPassword","confirmPassword","resetPasswordButton","import_test","createSignInComponentPageObject","testArgs","page","self","common","opts","navRes","selector","state","val","passField","provider","email","password","waitForSession","identifierField","createSignUpComponentPageObject","testArgs","page","self","common","opts","selector","state","provider","createSubscriptionDetailsPageObject","testArgs","page","self","common","selector","createTestingTokenPageObject","page","setupClerkTestingToken","import_test","SELECTOR","createUserAvatarPageObject","testArgs","page","self","opts","selector","import_test","createUserButtonPageObject","testArgs","page","menuItems","menuItem","emailAddress","createUserProfileComponentPageObject","testArgs","page","self","common","opts","section","opened","value","state","createUserVerificationComponentPageObject","testArgs","page","common","selector","createWaitlistComponentPageObject","testArgs","page","self","common","opts","selector","createPageObjects","page","useTestingToken","baseURL","app","createAppPageObject","testArgs","createClerkPageObject","createCheckoutPageObject","createExpectPageObject","createImpersonationPageObject","createKeylessPopoverPageObject","createOrganizationSwitcherComponentPageObject","createPricingTablePageObject","createSessionTaskComponentPageObject","createSignInComponentPageObject","createSignUpComponentPageObject","createTestingTokenPageObject","createUserAvatarPageObject","createUserButtonPageObject","createUserProfileComponentPageObject","createUserVerificationComponentPageObject","createWaitlistComponentPageObject","createAPIKeysComponentPageObject","createSubscriptionDetailsPageObject","createPlanDetailsPageObject"]}
@@ -1,2 +1,2 @@
1
- import{a as p}from"../../chunk-YFUXUEZ5.mjs";import"../../chunk-M5YIJ3SE.mjs";var i=({page:a})=>{let e={continue:()=>a.getByRole("button",{name:"Continue",exact:!0}).click(),setEmailAddress:r=>e.getEmailAddressInput().fill(r),setPassword:r=>e.getPasswordInput().fill(r),setPasswordConfirmation:r=>a.locator("input[name=confirmPassword]").fill(r),enterOtpCode:async(r,t)=>{let{name:o="Enter verification code",awaitAttempt:n=!0,awaitPrepare:c=!0,awaitRequests:l=!0}=t??{};l&&c&&await a.waitForResponse(m=>m.request().method()==="POST"&&(m.url().includes("prepare_verification")||m.url().includes("prepare_first_factor")));let s=a.getByRole("textbox",{name:"Enter verification code. Digit 1"});await s.isVisible()?(console.warn("Using the original OTP input"),await s.click(),await a.keyboard.type(r,{delay:100})):await a.getByLabel(o).fill(r),l&&n&&await a.waitForResponse(m=>m.request().method()==="POST"&&(m.url().includes("attempt_verification")||m.url().includes("attempt_first_factor")))},enterTestOtpCode:async r=>e.enterOtpCode("424242",r),fillTestOtpCode:async(r,t)=>e.enterOtpCode("424242",{name:r,...t}),getIdentifierInput:()=>a.locator("input[name=identifier]"),getEmailAddressInput:()=>a.locator("input[name=emailAddress]"),getPhoneNumberInput:()=>a.locator("input[name=phoneNumber]"),getUsernameInput:()=>a.locator("input[name=username]"),getPasswordInput:()=>a.locator("input[name=password]"),getLegalAccepted:()=>a.locator("input[name=legalAccepted]"),getFirstNameInput:()=>a.locator("input[name=firstName]"),getLastNameInput:()=>a.locator("input[name=lastName]"),waitForSession:async()=>a.waitForFunction(()=>!!window.Clerk?.session)};return e};var d=a=>{let{page:e}=a,r={never:"Never","1d":"1 Day","7d":"7 Days","30d":"30 Days","60d":"60 Days","90d":"90 Days","180d":"180 Days","1y":"1 Year"};return{...i(a),waitForMounted:()=>e.waitForSelector(".cl-apiKeys-root",{state:"attached"}),clickAddButton:()=>e.getByText(/Add new key/i).click(),waitForFormOpened:()=>e.waitForSelector(".cl-apiKeysCreateForm",{state:"attached"}),waitForFormClosed:()=>e.waitForSelector(".cl-apiKeysCreateForm",{state:"detached"}),waitForRevokeModalOpened:()=>e.waitForSelector(".cl-apiKeysRevokeModal",{state:"attached"}),waitForRevokeModalClosed:()=>e.waitForSelector(".cl-apiKeysRevokeModal",{state:"detached"}),waitForCopyModalOpened:()=>e.waitForSelector(".cl-apiKeysCopyModal",{state:"attached"}),waitForCopyModalClosed:()=>e.waitForSelector(".cl-apiKeysCopyModal",{state:"detached"}),clickCopyAndCloseButton:()=>e.locator(".cl-apiKeysCopyModal .cl-apiKeysCopyModalSubmitButton").click(),typeName:o=>e.getByLabel(/Secret key name/i).fill(o),typeDescription:o=>e.getByLabel(/Description/i).fill(o),selectExpiration:async o=>(await e.getByRole("button",{name:/Select date/i}).click(),e.getByText(r[o??"never"],{exact:!0}).click({force:!0})),clickSaveButton:()=>e.getByText(/Create key/i).click(),typeRevokeConfirmation:o=>e.getByLabel(/Type "Revoke" to confirm/i).fill(o),clickConfirmRevokeButton:()=>e.getByText(/Revoke key/i).click()}};var g=(a,e)=>{let{page:r,useTestingToken:t=!0}=a,o=Object.create(r);return Object.assign(o,{goToAppHome:async()=>{if(!e.baseURL)throw new Error("Attempted to call method requiring baseURL, but baseURL was not provided to createPageObjects.");try{t&&await p({page:r}),await r.goto(e.baseURL)}catch{}},goToRelative:async(c,l={})=>{if(!e.baseURL)throw new Error("Attempted to call method requiring baseURL, but baseURL was not provided to createPageObjects.");let s;try{r.url().includes("about:blank")?s=new URL(c,e.baseURL):s=new URL(c,r.url())}catch{s=new URL(c,e.baseURL)}return l.searchParams&&(s.search=l.searchParams.toString()),t&&await p({page:r}),r.goto(s.toString(),{timeout:l.timeout??2e4,waitUntil:l.waitUntil})},waitForClerkJsLoaded:async()=>r.waitForFunction(()=>window.Clerk?.loaded),signOut:async()=>r.waitForFunction(()=>window.Clerk?.signOut({})),waitForClerkComponentMounted:async()=>r.waitForSelector(".cl-rootBox",{state:"attached"}),waitForAppUrl:async c=>{if(!e.baseURL)throw new Error("Attempted to call method requiring baseURL, but baseURL was not provided to createPageObjects.");return r.waitForURL(new URL(c,e.baseURL).toString())},cookies:async()=>{let c=await r.context().cookies(),l=c.reduce((s,u)=>(u.name.match(/^(__.*_)(.{8})$/)?s.set(u.name.replace(/^(__.*_)(.{8})$/,"$1*"),u):s.set(u.name,u),s),new Map);return Object.assign(l,{raw:()=>c})}})};var w=a=>{let{page:e}=a,r={...i(a),waitForMounted:(t=".cl-checkout-root")=>e.waitForSelector(t,{state:"attached",timeout:2e4}),closeDrawer:()=>e.locator(".cl-drawerClose").click(),fillTestCard:async()=>{await r.fillCard({number:"4242424242424242",expiration:"1234",cvc:"123",country:"United States",zip:"12345"})},fillCard:async t=>{await r.waitForStripeElements({state:"visible"});let o=e.frameLocator('iframe[src*="elements-inner-payment"]');await o.getByLabel("Card number").fill(t.number),await o.getByLabel("Expiration date").fill(t.expiration),await o.getByLabel("Security code").fill(t.cvc),await o.getByLabel("Country").selectOption(t.country),await o.getByLabel("ZIP code").fill(t.zip)},waitForStripeElements:async({state:t="visible"}={})=>{let o=e.locator('iframe[src*="elements-inner-payment"]');t==="visible"?(await o.waitFor({state:"attached",timeout:2e4}),await e.frameLocator('iframe[src*="elements-inner-payment"]').getByLabel("Card number").waitFor({state:"visible",timeout:2e4})):await e.frameLocator('iframe[src*="elements-inner-payment"]').getByLabel("Card number").waitFor({state:"hidden",timeout:2e4})},clickPayOrSubscribe:async()=>{await r.root.getByRole("button",{name:/subscribe|pay\s\$|start/i}).click()},waitForSubscribeButton:async()=>{await r.root.getByRole("button",{name:/^subscribe$/i}).waitFor({state:"visible"})},confirmAndContinue:async()=>{await r.root.getByRole("button",{name:/^continue$/i}).click()},clickAddPaymentMethod:async()=>{await r.root.getByRole("radio",{name:"Add payment method"}).click()},clickPaymentMethods:async()=>{await r.root.getByRole("radio",{name:"Payment Methods"}).click()},root:e.locator(".cl-checkout-root")};return r};var y=({page:a})=>({toBeLoaded:async()=>a.waitForFunction(()=>!!window.Clerk?.loaded),getClientSideActor:()=>a.evaluate(()=>window.Clerk?.session?.actor),toBeLoading:async()=>a.waitForFunction(()=>window.Clerk?.status==="loading"),toBeReady:async()=>a.waitForFunction(()=>window.Clerk?.status==="ready"),toBeDegraded:async()=>a.waitForFunction(()=>window.Clerk?.status==="degraded"),getClientSideUser:()=>a.evaluate(()=>window.Clerk?.user)});import{expect as f}from"@playwright/test";var b=({page:a})=>({toBeHandshake:async e=>{let r=await e.request().redirectedFrom()?.redirectedFrom()?.response();f(r?.status()).toBe(307),f(r?.headers()["x-clerk-auth-status"]).toContain("handshake")},toBeSignedOut:e=>a.waitForFunction(()=>!window.Clerk?.user,null,{timeout:e?.timeOut}),toBeSignedIn:async()=>a.waitForFunction(()=>!!window.Clerk?.user),toBeSignedInAsActor:async()=>a.waitForFunction(()=>!!window.Clerk?.session?.actor),toHaveResolvedTask:async()=>a.waitForFunction(()=>!window.Clerk?.session?.currentTask)});var h=a=>{let{page:e}=a;return{waitForMounted:(t=".cl-impersonationFab")=>e.waitForSelector(t,{state:"attached"}),getSignOutLink:()=>e.locator(".cl-impersonationFab").getByText("Sign out")}};var P=a=>{let{page:e}=a,r="#--clerk-keyless-prompt-button";return{waitForMounted:()=>e.waitForSelector(r,{state:"attached"}),waitForUnmounted:()=>e.waitForSelector(r,{state:"detached"}),isExpanded:()=>e.locator(r).getAttribute("aria-expanded").then(o=>o==="true"),toggle:()=>e.locator(r).click(),promptsToClaim:()=>e.getByRole("link",{name:/^claim application$/i}),promptToUseClaimedKeys:()=>e.getByRole("link",{name:/^get api keys$/i}),promptToDismiss:()=>e.getByRole("button",{name:/^dismiss$/i})}};import{expect as F}from"@playwright/test";var k=a=>{let{page:e}=a,r={...i(a),goTo:async(t="/switcher")=>(await e.goToRelative(t),r.waitForMounted()),waitForMounted:()=>e.waitForSelector(".cl-organizationSwitcher-root",{state:"attached"}),expectNoOrganizationSelected:()=>F(e.getByText(/No organization selected/i)).toBeVisible(),expectPersonalAccount:()=>F(e.getByText(/personal account/i)).toBeVisible(),toggleTrigger:()=>e.locator(".cl-organizationSwitcherTrigger").click(),waitForAnOrganizationToSelected:()=>e.waitForSelector(".cl-userPreviewMainIdentifier__personalWorkspace",{state:"detached"})};return r};var B=a=>{let{page:e}=a;return{...i(a),waitForMounted:(t=".cl-planDetails-root")=>e.waitForSelector(t,{state:"attached"}),root:e.locator(".cl-planDetails-root")}};var S=a=>{let{page:e}=a,r={toggle:n=>e.locator(`.cl-pricingTableCard__${n} .cl-pricingTableCardPeriodToggle`),indicator:n=>e.locator(`.cl-pricingTableCard__${n} .cl-switchIndicator`),badge:n=>e.locator(`.cl-pricingTableCard__${n} .cl-badge`),footer:n=>e.locator(`.cl-pricingTableCard__${n} .cl-pricingTableCardFooter`)},t=async(n,c)=>{async function l(u,m,N,_=5e3){return e.waitForFunction(({sel:D,attr:V,val:$})=>document.querySelector(D)?.getAttribute(V)===$,{sel:u,attr:m,val:N},{timeout:_}).then(()=>!0).catch(()=>!1)}let s=await l(`.cl-pricingTableCard__${n} .cl-switchIndicator`,"data-checked","true",500);s&&c==="monthly"&&await r.toggle(n).click(),!s&&c==="annually"&&await r.toggle(n).click()};return{...i(a),waitForMounted:(n=".cl-pricingTable-root")=>e.waitForSelector(n,{state:"attached"}),clickResubscribe:async()=>{await e.getByText("Re-subscribe").click()},waitToBeActive:async({planSlug:n})=>r.badge(n).getByText("Active").waitFor({state:"visible"}),waitToBeFreeTrial:async({planSlug:n})=>r.badge(n).getByText("Free trial").waitFor({state:"visible"}),getPlanCardCTA:({planSlug:n})=>r.footer(n).getByRole("button",{name:/get|switch|subscribe/i}),startCheckout:async({planSlug:n,shouldSwitch:c,period:l})=>{let s=c===!0?"Switch to this plan":c===!1?/subscribe/i:/get|switch|subscribe|Start \d+-day free trial/i;l&&await t(n,l),await r.footer(n).getByRole("button",{name:s}).click()}}};import{expect as C}from"@playwright/test";var R=a=>{let{page:e}=a;return{...i(a),resolveForceOrganizationSelectionTask:async t=>{let o=e.getByRole("button",{name:/continue/i});await C(o).toBeVisible(),await e.locator("input[name=name]").fill(t.name),t.slug&&await e.locator("input[name=slug]").fill(t.slug),await o.click()},resolveResetPasswordTask:async({newPassword:t,confirmPassword:o})=>{await e.locator("input[name=newPassword]").fill(t),await e.locator("input[name=confirmPassword]").fill(o);let n=e.getByRole("button",{name:/reset password/i});await C(n).toBeVisible(),await n.click()}}};import{expect as T}from"@playwright/test";var O=a=>{let{page:e}=a,r={...i(a),goTo:async t=>{let o=await e.goToRelative("/sign-in",t);return typeof t?.headlessSelector<"u"?await r.waitForMounted(t.headlessSelector):await r.waitForMounted(),o},waitForMounted:(t=".cl-signIn-root")=>e.waitForSelector(t,{state:"attached"}),waitForModal:t=>e.waitForSelector(".cl-modalContent:has(.cl-signIn-root)",{state:t==="closed"?"detached":"attached"}),setIdentifier:t=>r.getIdentifierInput().fill(t),setInstantPassword:async t=>{let o=r.getPasswordInput();await T(o).toBeVisible(),await o.fill(t,{force:!0})},usePhoneNumberIdentifier:()=>e.getByRole("link",{name:/^use phone/i}),useEmailIdentifier:()=>e.getByRole("link",{name:/^use email/i}),useUsernameIdentifier:()=>e.getByRole("link",{name:/^username$/i}),getForgotPassword:()=>e.getByRole("link",{name:/forgot password/i}),getGoToSignUp:()=>e.getByRole("link",{name:/sign up/i}),getResetPassword:()=>e.getByRole("button",{name:/(reset password|reset your password)/i}),getUseAnotherMethodLink:()=>e.getByRole("link",{name:/use another method/i}),getAltMethodsEmailCodeButton:()=>e.getByRole("button",{name:/email code to/i}),getAltMethodsEmailLinkButton:()=>e.getByRole("button",{name:/email link to/i}),signInWithOauth:t=>e.getByRole("button",{name:new RegExp(`continue with ${t}`,"gi")}),signInWithEmailAndInstantPassword:async({email:t,password:o,waitForSession:n=!0})=>{let c=r.getIdentifierInput();await T(c).toBeVisible(),await c.fill(t),await r.setInstantPassword(o),await r.continue(),n&&await r.waitForSession()}};return r};var E=a=>{let{page:e}=a,r={...i(a),goTo:async t=>(await e.goToRelative("/sign-up",{searchParams:t?.searchParams}),typeof t?.headlessSelector<"u"?r.waitForMounted(t.headlessSelector):r.waitForMounted()),waitForMounted:(t=".cl-signUp-root")=>e.waitForSelector(t,{state:"attached"}),waitForModal:t=>e.waitForSelector(".cl-modalContent:has(.cl-signUp-root)",{state:t==="closed"?"detached":"attached"}),signUpWithOauth:t=>e.getByRole("button",{name:new RegExp(`continue with ${t}`,"gi")}),signUp:async t=>{t.firstName&&await r.getFirstNameInput().fill(t.firstName),t.lastName&&await r.getLastNameInput().fill(t.lastName),t.email&&await r.getEmailAddressInput().fill(t.email),t.username&&await r.getUsernameInput().fill(t.username),t.phoneNumber&&await r.getPhoneNumberInput().fill(t.phoneNumber),t.password&&await r.getPasswordInput().fill(t.password),t.legalAccepted&&await r.getLegalAccepted().check(),await r.continue()},signUpWithEmailAndPassword:async t=>{await r.signUp({email:t.email,password:t.password})},waitForEmailVerificationScreen:async()=>{await e.waitForURL(/verify/),await e.getByRole("heading",{name:/Verify your email/i}).waitFor()}};return r};var x=a=>{let{page:e}=a,r={...i(a),waitForMounted:(t=".cl-subscriptionDetails-root")=>e.waitForSelector(t,{state:"attached"}),waitForUnmounted:()=>r.root.locator(".cl-drawerRoot").waitFor({state:"detached"}),closeDrawer:()=>r.root.locator(".cl-drawerClose").click(),root:e.locator(".cl-subscriptionDetails-root")};return r};var U=({page:a})=>({setup:async()=>p({page:a})});import{expect as K}from"@playwright/test";var v=".cl-userAvatarBox",L=a=>{let{page:e}=a,r={goTo:async t=>(await e.goToRelative("/user-avatar",t),r.waitForMounted()),waitForMounted:(t=v)=>e.waitForSelector(t,{state:"attached"}),toBeVisible:async(t=v)=>await K(e.locator(t).getByRole("img")).toBeVisible()};return r};import{expect as W}from"@playwright/test";var I=a=>{let{page:e}=a;return{waitForMounted:()=>e.waitForSelector(".cl-userButtonTrigger",{state:"attached"}),toggleTrigger:()=>e.locator(".cl-userButtonTrigger").click(),waitForPopover:()=>e.waitForSelector(".cl-userButtonPopoverCard",{state:"visible"}),waitForPopoverClosed:()=>e.waitForSelector(".cl-userButtonPopoverCard",{state:"detached"}),toHaveVisibleMenuItems:async t=>{(typeof t=="string"||t instanceof RegExp)&&(t=[t]);for(let o of t)await W(e.getByRole("menuitem",{name:o})).toBeVisible()},triggerSignOut:()=>e.getByRole("menuitem",{name:/Sign out$/i}).click(),triggerManageAccount:()=>e.getByRole("menuitem",{name:/Manage account/i}).click(),switchAccount:t=>e.getByText(t).click()}};var j=a=>{let{page:e}=a,r={...i(a),goTo:async t=>(await e.goToRelative("/user",t),r.waitForMounted()),switchToSecurityTab:async()=>{await e.getByText(/Security/i).click()},switchToBillingTab:async()=>{await e.getByText(/Billing/i).click()},switchToAPIKeysTab:async()=>{await e.getByText(/API keys/i).click()},waitForMounted:()=>e.waitForSelector(".cl-userProfile-root",{state:"attached"}),clickSetUsername:()=>e.getByText(/Set username/i).click(),clickToUpdateProfile:()=>e.getByText(/update profile/i).click(),clickUpdateUsername:()=>e.getByText(/update username/i).click(),clickSetPassword:()=>e.getByText(/Set password/i).click(),waitForSectionCard:(t,o)=>e.waitForSelector(`.cl-profileSectionContent__${t} .cl-headerTitle`,{state:o?"visible":"detached"}),waitForSectionCardOpened:t=>r.waitForSectionCard(t,!0),waitForSectionCardClosed:t=>r.waitForSectionCard(t,!1),typeUsername:t=>r.getUsernameInput().fill(t),typeFirstName:t=>r.getFirstNameInput().fill(t),typeLastName:t=>r.getLastNameInput().fill(t),typePhoneNumber:t=>r.getPhoneNumberInput().fill(t),clickAddEmailAddress:()=>e.getByText(/add email address/i).click(),clickAddPhoneNumber:()=>e.getByText(/add phone number/i).click(),typeEmailAddress:t=>e.getByLabel(/Email address/i).fill(t),waitForUserProfileModal:t=>e.waitForSelector(".cl-modalContent:has(.cl-userProfile-root)",{state:t==="closed"?"detached":"attached"})};return r};var A=a=>{let{page:e}=a;return{...i(a),waitForMounted:(t=".cl-userVerification-root")=>e.waitForSelector(t,{state:"attached"}),waitForClosed:(t=".cl-userVerification-root")=>e.waitForSelector(t,{state:"detached"}),closeReverificationModal:()=>e.getByLabel("Close modal").click(),getUseAnotherMethodLink:()=>e.getByRole("link",{name:/use another method/i}),getAltMethodsEmailCodeButton:()=>e.getByRole("button",{name:/email code to/i}),getAltMethodsEmailLinkButton:()=>e.getByRole("button",{name:/email link to/i})}};var M=a=>{let{page:e}=a,r={...i(a),goTo:async t=>(await e.goToRelative("/waitlist",{searchParams:t?.searchParams}),typeof t?.headlessSelector<"u"?r.waitForMounted(t.headlessSelector):r.waitForMounted()),waitForMounted:(t=".cl-waitlist-root")=>e.waitForSelector(t,{state:"attached"}),joinWaitlist:async t=>{await r.getEmailAddressInput().fill(t.email),await r.joinWaitlistContinue()},joinWaitlistContinue:()=>e.getByRole("button",{name:"Join the waitlist",exact:!0}).click()};return r};var z=({page:a,useTestingToken:e=!0,baseURL:r})=>{let t=g({page:a,useTestingToken:e},{baseURL:r}),o={page:t};return{page:t,clerk:y(o),checkout:w(o),expect:b(o),impersonation:h(o),keylessPopover:P(o),organizationSwitcher:k(o),pricingTable:S(o),sessionTask:R(o),signIn:O(o),signUp:E(o),testingToken:U(o),userAvatar:L(o),userButton:I(o),userProfile:j(o),userVerification:A(o),waitlist:M(o),apiKeys:d(o),subscriptionDetails:x(o),planDetails:B(o)}};export{g as createAppPageObject,z as createPageObjects};
1
+ import{a as p}from"../../chunk-YFUXUEZ5.mjs";import"../../chunk-M5YIJ3SE.mjs";var i=({page:a})=>{let e={continue:()=>a.getByRole("button",{name:"Continue",exact:!0}).click(),setEmailAddress:r=>e.getEmailAddressInput().fill(r),setPassword:r=>e.getPasswordInput().fill(r),setPasswordConfirmation:r=>a.locator("input[name=confirmPassword]").fill(r),enterOtpCode:async(r,t)=>{let{name:o="Enter verification code",awaitAttempt:n=!0,awaitPrepare:c=!0,awaitRequests:l=!0}=t??{};l&&c&&await a.waitForResponse(u=>u.request().method()==="POST"&&(u.url().includes("prepare_verification")||u.url().includes("prepare_first_factor")||u.url().includes("prepare_second_factor")));let s=a.getByRole("textbox",{name:"Enter verification code. Digit 1"});await s.isVisible()?(console.warn("Using the original OTP input"),await s.click(),await a.keyboard.type(r,{delay:100})):await a.getByLabel(o).fill(r),l&&n&&await a.waitForResponse(u=>u.request().method()==="POST"&&(u.url().includes("attempt_verification")||u.url().includes("attempt_first_factor")||u.url().includes("attempt_second_factor")))},enterTestOtpCode:async r=>e.enterOtpCode("424242",r),fillTestOtpCode:async(r,t)=>e.enterOtpCode("424242",{name:r,...t}),getIdentifierInput:()=>a.locator("input[name=identifier]"),getEmailAddressInput:()=>a.locator("input[name=emailAddress]"),getPhoneNumberInput:()=>a.locator("input[name=phoneNumber]"),getUsernameInput:()=>a.locator("input[name=username]"),getPasswordInput:()=>a.locator("input[name=password]"),getLegalAccepted:()=>a.locator("input[name=legalAccepted]"),getFirstNameInput:()=>a.locator("input[name=firstName]"),getLastNameInput:()=>a.locator("input[name=lastName]"),waitForSession:async()=>a.waitForFunction(()=>!!window.Clerk?.session)};return e};var d=a=>{let{page:e}=a,r={never:"Never","1d":"1 Day","7d":"7 Days","30d":"30 Days","60d":"60 Days","90d":"90 Days","180d":"180 Days","1y":"1 Year"};return{...i(a),waitForMounted:()=>e.waitForSelector(".cl-apiKeys-root",{state:"attached"}),clickAddButton:()=>e.getByText(/Add new key/i).click(),waitForFormOpened:()=>e.waitForSelector(".cl-apiKeysCreateForm",{state:"attached"}),waitForFormClosed:()=>e.waitForSelector(".cl-apiKeysCreateForm",{state:"detached"}),waitForRevokeModalOpened:()=>e.waitForSelector(".cl-apiKeysRevokeModal",{state:"attached"}),waitForRevokeModalClosed:()=>e.waitForSelector(".cl-apiKeysRevokeModal",{state:"detached"}),waitForCopyModalOpened:()=>e.waitForSelector(".cl-apiKeysCopyModal",{state:"attached"}),waitForCopyModalClosed:()=>e.waitForSelector(".cl-apiKeysCopyModal",{state:"detached"}),clickCopyAndCloseButton:()=>e.locator(".cl-apiKeysCopyModal .cl-apiKeysCopyModalSubmitButton").click(),typeName:o=>e.getByLabel(/Secret key name/i).fill(o),typeDescription:o=>e.getByLabel(/Description/i).fill(o),selectExpiration:async o=>(await e.getByRole("button",{name:/Select date/i}).click(),e.getByText(r[o??"never"],{exact:!0}).click({force:!0})),clickSaveButton:()=>e.getByText(/Create key/i).click(),typeRevokeConfirmation:o=>e.getByLabel(/Type "Revoke" to confirm/i).fill(o),clickConfirmRevokeButton:()=>e.getByText(/Revoke key/i).click()}};var g=(a,e)=>{let{page:r,useTestingToken:t=!0}=a,o=Object.create(r);return Object.assign(o,{goToAppHome:async()=>{if(!e.baseURL)throw new Error("Attempted to call method requiring baseURL, but baseURL was not provided to createPageObjects.");try{t&&await p({page:r}),await r.goto(e.baseURL)}catch{}},goToRelative:async(c,l={})=>{if(!e.baseURL)throw new Error("Attempted to call method requiring baseURL, but baseURL was not provided to createPageObjects.");let s;try{r.url().includes("about:blank")?s=new URL(c,e.baseURL):s=new URL(c,r.url())}catch{s=new URL(c,e.baseURL)}return l.searchParams&&(s.search=l.searchParams.toString()),t&&await p({page:r}),r.goto(s.toString(),{timeout:l.timeout??2e4,waitUntil:l.waitUntil})},waitForClerkJsLoaded:async()=>r.waitForFunction(()=>window.Clerk?.loaded),signOut:async()=>r.waitForFunction(()=>window.Clerk?.signOut({})),waitForClerkComponentMounted:async()=>r.waitForSelector(".cl-rootBox",{state:"attached"}),waitForAppUrl:async c=>{if(!e.baseURL)throw new Error("Attempted to call method requiring baseURL, but baseURL was not provided to createPageObjects.");return r.waitForURL(new URL(c,e.baseURL).toString())},cookies:async()=>{let c=await r.context().cookies(),l=c.reduce((s,m)=>(m.name.match(/^(__.*_)(.{8})$/)?s.set(m.name.replace(/^(__.*_)(.{8})$/,"$1*"),m):s.set(m.name,m),s),new Map);return Object.assign(l,{raw:()=>c})}})};var w=a=>{let{page:e}=a,r={...i(a),waitForMounted:(t=".cl-checkout-root")=>e.waitForSelector(t,{state:"attached",timeout:2e4}),closeDrawer:()=>e.locator(".cl-drawerClose").click(),fillTestCard:async()=>{await r.fillCard({number:"4242424242424242",expiration:"1234",cvc:"123",country:"United States",zip:"12345"})},fillCard:async t=>{await r.waitForStripeElements({state:"visible"});let o=e.frameLocator('iframe[src*="elements-inner-payment"]');await o.getByLabel("Card number").fill(t.number),await o.getByLabel("Expiration date").fill(t.expiration),await o.getByLabel("Security code").fill(t.cvc),await o.getByLabel("Country").selectOption(t.country),await o.getByLabel("ZIP code").fill(t.zip)},waitForStripeElements:async({state:t="visible"}={})=>{let o=e.locator('iframe[src*="elements-inner-payment"]');t==="visible"?(await o.waitFor({state:"attached",timeout:2e4}),await e.frameLocator('iframe[src*="elements-inner-payment"]').getByLabel("Card number").waitFor({state:"visible",timeout:2e4})):await e.frameLocator('iframe[src*="elements-inner-payment"]').getByLabel("Card number").waitFor({state:"hidden",timeout:2e4})},clickPayOrSubscribe:async()=>{await r.root.getByRole("button",{name:/subscribe|pay\s\$|start/i}).click()},waitForSubscribeButton:async()=>{await r.root.getByRole("button",{name:/^subscribe$/i}).waitFor({state:"visible"})},confirmAndContinue:async()=>{await r.root.getByRole("button",{name:/^continue$/i}).click()},clickAddPaymentMethod:async()=>{await r.root.getByRole("radio",{name:"Add payment method"}).click()},clickPaymentMethods:async()=>{await r.root.getByRole("radio",{name:"Payment Methods"}).click()},root:e.locator(".cl-checkout-root")};return r};var y=({page:a})=>({toBeLoaded:async()=>a.waitForFunction(()=>!!window.Clerk?.loaded),getClientSideActor:()=>a.evaluate(()=>window.Clerk?.session?.actor),toBeLoading:async()=>a.waitForFunction(()=>window.Clerk?.status==="loading"),toBeReady:async()=>a.waitForFunction(()=>window.Clerk?.status==="ready"),toBeDegraded:async()=>a.waitForFunction(()=>window.Clerk?.status==="degraded"),getClientSideUser:()=>a.evaluate(()=>window.Clerk?.user)});import{expect as f}from"@playwright/test";var b=({page:a})=>({toBeHandshake:async e=>{let r=await e.request().redirectedFrom()?.redirectedFrom()?.response();f(r?.status()).toBe(307),f(r?.headers()["x-clerk-auth-status"]).toContain("handshake")},toBeSignedOut:e=>a.waitForFunction(()=>!window.Clerk?.user,null,{timeout:e?.timeOut}),toBeSignedIn:async()=>a.waitForFunction(()=>!!window.Clerk?.user),toBeSignedInAsActor:async()=>a.waitForFunction(()=>!!window.Clerk?.session?.actor),toHaveResolvedTask:async()=>a.waitForFunction(()=>!window.Clerk?.session?.currentTask)});var h=a=>{let{page:e}=a;return{waitForMounted:(t=".cl-impersonationFab")=>e.waitForSelector(t,{state:"attached"}),getSignOutLink:()=>e.locator(".cl-impersonationFab").getByText("Sign out")}};var P=a=>{let{page:e}=a,r="#--clerk-keyless-prompt-button";return{waitForMounted:()=>e.waitForSelector(r,{state:"attached"}),waitForUnmounted:()=>e.waitForSelector(r,{state:"detached"}),isExpanded:()=>e.locator(r).getAttribute("aria-expanded").then(o=>o==="true"),toggle:()=>e.locator(r).click(),promptsToClaim:()=>e.getByRole("link",{name:/^claim application$/i}),promptToUseClaimedKeys:()=>e.getByRole("link",{name:/^get api keys$/i}),promptToDismiss:()=>e.getByRole("button",{name:/^dismiss$/i})}};import{expect as F}from"@playwright/test";var k=a=>{let{page:e}=a,r={...i(a),goTo:async(t="/switcher")=>(await e.goToRelative(t),r.waitForMounted()),waitForMounted:()=>e.waitForSelector(".cl-organizationSwitcher-root",{state:"attached"}),expectNoOrganizationSelected:()=>F(e.getByText(/No organization selected/i)).toBeVisible(),expectPersonalAccount:()=>F(e.getByText(/personal account/i)).toBeVisible(),toggleTrigger:()=>e.locator(".cl-organizationSwitcherTrigger").click(),waitForAnOrganizationToSelected:()=>e.waitForSelector(".cl-userPreviewMainIdentifier__personalWorkspace",{state:"detached"})};return r};var B=a=>{let{page:e}=a;return{...i(a),waitForMounted:(t=".cl-planDetails-root")=>e.waitForSelector(t,{state:"attached"}),root:e.locator(".cl-planDetails-root")}};var S=a=>{let{page:e}=a,r={toggle:n=>e.locator(`.cl-pricingTableCard__${n} .cl-pricingTableCardPeriodToggle`),indicator:n=>e.locator(`.cl-pricingTableCard__${n} .cl-switchIndicator`),badge:n=>e.locator(`.cl-pricingTableCard__${n} .cl-badge`),footer:n=>e.locator(`.cl-pricingTableCard__${n} .cl-pricingTableCardFooter`)},t=async(n,c)=>{async function l(m,u,N,_=5e3){return e.waitForFunction(({sel:D,attr:V,val:$})=>document.querySelector(D)?.getAttribute(V)===$,{sel:m,attr:u,val:N},{timeout:_}).then(()=>!0).catch(()=>!1)}let s=await l(`.cl-pricingTableCard__${n} .cl-switchIndicator`,"data-checked","true",500);s&&c==="monthly"&&await r.toggle(n).click(),!s&&c==="annually"&&await r.toggle(n).click()};return{...i(a),waitForMounted:(n=".cl-pricingTable-root")=>e.waitForSelector(n,{state:"attached"}),clickResubscribe:async()=>{await e.getByText("Re-subscribe").click()},waitToBeActive:async({planSlug:n})=>r.badge(n).getByText("Active").waitFor({state:"visible"}),waitToBeFreeTrial:async({planSlug:n})=>r.badge(n).getByText("Free trial").waitFor({state:"visible"}),getPlanCardCTA:({planSlug:n})=>r.footer(n).getByRole("button",{name:/get|switch|subscribe/i}),startCheckout:async({planSlug:n,shouldSwitch:c,period:l})=>{let s=c===!0?"Switch to this plan":c===!1?/subscribe/i:/get|switch|subscribe|Start \d+-day free trial/i;l&&await t(n,l),await r.footer(n).getByRole("button",{name:s}).click()}}};import{expect as C}from"@playwright/test";var R=a=>{let{page:e}=a;return{...i(a),resolveForceOrganizationSelectionTask:async t=>{let o=e.getByRole("button",{name:/continue/i});await C(o).toBeVisible(),await e.locator("input[name=name]").fill(t.name),t.slug&&await e.locator("input[name=slug]").fill(t.slug),await o.click()},resolveResetPasswordTask:async({newPassword:t,confirmPassword:o})=>{await e.locator("input[name=newPassword]").fill(t),await e.locator("input[name=confirmPassword]").fill(o);let n=e.getByRole("button",{name:/reset password/i});await C(n).toBeVisible(),await n.click()}}};import{expect as T}from"@playwright/test";var O=a=>{let{page:e}=a,r={...i(a),goTo:async t=>{let o=await e.goToRelative("/sign-in",t);return typeof t?.headlessSelector<"u"?await r.waitForMounted(t.headlessSelector):await r.waitForMounted(),o},waitForMounted:(t=".cl-signIn-root")=>e.waitForSelector(t,{state:"attached"}),waitForModal:t=>e.waitForSelector(".cl-modalContent:has(.cl-signIn-root)",{state:t==="closed"?"detached":"attached"}),setIdentifier:t=>r.getIdentifierInput().fill(t),setInstantPassword:async t=>{let o=r.getPasswordInput();await T(o).toBeVisible(),await o.fill(t,{force:!0})},usePhoneNumberIdentifier:()=>e.getByRole("link",{name:/^use phone/i}),useEmailIdentifier:()=>e.getByRole("link",{name:/^use email/i}),useUsernameIdentifier:()=>e.getByRole("link",{name:/^username$/i}),getForgotPassword:()=>e.getByRole("link",{name:/forgot password/i}),getGoToSignUp:()=>e.getByRole("link",{name:/sign up/i}),getResetPassword:()=>e.getByRole("button",{name:/(reset password|reset your password)/i}),getUseAnotherMethodLink:()=>e.getByRole("link",{name:/use another method/i}),getAltMethodsEmailCodeButton:()=>e.getByRole("button",{name:/email code to/i}),getAltMethodsEmailLinkButton:()=>e.getByRole("button",{name:/email link to/i}),signInWithOauth:t=>e.getByRole("button",{name:new RegExp(`continue with ${t}`,"gi")}),signInWithEmailAndInstantPassword:async({email:t,password:o,waitForSession:n=!0})=>{let c=r.getIdentifierInput();await T(c).toBeVisible(),await c.fill(t),await r.setInstantPassword(o),await r.continue(),n&&await r.waitForSession()}};return r};var E=a=>{let{page:e}=a,r={...i(a),goTo:async t=>(await e.goToRelative("/sign-up",{searchParams:t?.searchParams}),typeof t?.headlessSelector<"u"?r.waitForMounted(t.headlessSelector):r.waitForMounted()),waitForMounted:(t=".cl-signUp-root")=>e.waitForSelector(t,{state:"attached"}),waitForModal:t=>e.waitForSelector(".cl-modalContent:has(.cl-signUp-root)",{state:t==="closed"?"detached":"attached"}),signUpWithOauth:t=>e.getByRole("button",{name:new RegExp(`continue with ${t}`,"gi")}),signUp:async t=>{t.firstName&&await r.getFirstNameInput().fill(t.firstName),t.lastName&&await r.getLastNameInput().fill(t.lastName),t.email&&await r.getEmailAddressInput().fill(t.email),t.username&&await r.getUsernameInput().fill(t.username),t.phoneNumber&&await r.getPhoneNumberInput().fill(t.phoneNumber),t.password&&await r.getPasswordInput().fill(t.password),t.legalAccepted&&await r.getLegalAccepted().check(),await r.continue()},signUpWithEmailAndPassword:async t=>{await r.signUp({email:t.email,password:t.password})},waitForEmailVerificationScreen:async()=>{await e.waitForURL(/verify/),await e.getByRole("heading",{name:/Verify your email/i}).waitFor()}};return r};var x=a=>{let{page:e}=a,r={...i(a),waitForMounted:(t=".cl-subscriptionDetails-root")=>e.waitForSelector(t,{state:"attached"}),waitForUnmounted:()=>r.root.locator(".cl-drawerRoot").waitFor({state:"detached"}),closeDrawer:()=>r.root.locator(".cl-drawerClose").click(),root:e.locator(".cl-subscriptionDetails-root")};return r};var U=({page:a})=>({setup:async()=>p({page:a})});import{expect as K}from"@playwright/test";var v=".cl-userAvatarBox",L=a=>{let{page:e}=a,r={goTo:async t=>(await e.goToRelative("/user-avatar",t),r.waitForMounted()),waitForMounted:(t=v)=>e.waitForSelector(t,{state:"attached"}),toBeVisible:async(t=v)=>await K(e.locator(t).getByRole("img")).toBeVisible()};return r};import{expect as W}from"@playwright/test";var I=a=>{let{page:e}=a;return{waitForMounted:()=>e.waitForSelector(".cl-userButtonTrigger",{state:"attached"}),toggleTrigger:()=>e.locator(".cl-userButtonTrigger").click(),waitForPopover:()=>e.waitForSelector(".cl-userButtonPopoverCard",{state:"visible"}),waitForPopoverClosed:()=>e.waitForSelector(".cl-userButtonPopoverCard",{state:"detached"}),toHaveVisibleMenuItems:async t=>{(typeof t=="string"||t instanceof RegExp)&&(t=[t]);for(let o of t)await W(e.getByRole("menuitem",{name:o})).toBeVisible()},triggerSignOut:()=>e.getByRole("menuitem",{name:/Sign out$/i}).click(),triggerManageAccount:()=>e.getByRole("menuitem",{name:/Manage account/i}).click(),switchAccount:t=>e.getByText(t).click()}};var j=a=>{let{page:e}=a,r={...i(a),goTo:async t=>(await e.goToRelative("/user",t),r.waitForMounted()),switchToSecurityTab:async()=>{await e.getByText(/Security/i).click()},switchToBillingTab:async()=>{await e.getByText(/Billing/i).click()},switchToAPIKeysTab:async()=>{await e.getByText(/API keys/i).click()},waitForMounted:()=>e.waitForSelector(".cl-userProfile-root",{state:"attached"}),clickSetUsername:()=>e.getByText(/Set username/i).click(),clickToUpdateProfile:()=>e.getByText(/update profile/i).click(),clickUpdateUsername:()=>e.getByText(/update username/i).click(),clickSetPassword:()=>e.getByText(/Set password/i).click(),waitForSectionCard:(t,o)=>e.waitForSelector(`.cl-profileSectionContent__${t} .cl-headerTitle`,{state:o?"visible":"detached"}),waitForSectionCardOpened:t=>r.waitForSectionCard(t,!0),waitForSectionCardClosed:t=>r.waitForSectionCard(t,!1),typeUsername:t=>r.getUsernameInput().fill(t),typeFirstName:t=>r.getFirstNameInput().fill(t),typeLastName:t=>r.getLastNameInput().fill(t),typePhoneNumber:t=>r.getPhoneNumberInput().fill(t),clickAddEmailAddress:()=>e.getByText(/add email address/i).click(),clickAddPhoneNumber:()=>e.getByText(/add phone number/i).click(),typeEmailAddress:t=>e.getByLabel(/Email address/i).fill(t),waitForUserProfileModal:t=>e.waitForSelector(".cl-modalContent:has(.cl-userProfile-root)",{state:t==="closed"?"detached":"attached"})};return r};var A=a=>{let{page:e}=a;return{...i(a),waitForMounted:(t=".cl-userVerification-root")=>e.waitForSelector(t,{state:"attached"}),waitForClosed:(t=".cl-userVerification-root")=>e.waitForSelector(t,{state:"detached"}),closeReverificationModal:()=>e.getByLabel("Close modal").click(),getUseAnotherMethodLink:()=>e.getByRole("link",{name:/use another method/i}),getAltMethodsEmailCodeButton:()=>e.getByRole("button",{name:/email code to/i}),getAltMethodsEmailLinkButton:()=>e.getByRole("button",{name:/email link to/i})}};var M=a=>{let{page:e}=a,r={...i(a),goTo:async t=>(await e.goToRelative("/waitlist",{searchParams:t?.searchParams}),typeof t?.headlessSelector<"u"?r.waitForMounted(t.headlessSelector):r.waitForMounted()),waitForMounted:(t=".cl-waitlist-root")=>e.waitForSelector(t,{state:"attached"}),joinWaitlist:async t=>{await r.getEmailAddressInput().fill(t.email),await r.joinWaitlistContinue()},joinWaitlistContinue:()=>e.getByRole("button",{name:"Join the waitlist",exact:!0}).click()};return r};var z=({page:a,useTestingToken:e=!0,baseURL:r})=>{let t=g({page:a,useTestingToken:e},{baseURL:r}),o={page:t};return{page:t,clerk:y(o),checkout:w(o),expect:b(o),impersonation:h(o),keylessPopover:P(o),organizationSwitcher:k(o),pricingTable:S(o),sessionTask:R(o),signIn:O(o),signUp:E(o),testingToken:U(o),userAvatar:L(o),userButton:I(o),userProfile:j(o),userVerification:A(o),waitlist:M(o),apiKeys:d(o),subscriptionDetails:x(o),planDetails:B(o)}};export{g as createAppPageObject,z as createPageObjects};
2
2
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/playwright/unstable/page-objects/common.ts","../../../src/playwright/unstable/page-objects/apiKeys.ts","../../../src/playwright/unstable/page-objects/app.ts","../../../src/playwright/unstable/page-objects/checkout.ts","../../../src/playwright/unstable/page-objects/clerk.ts","../../../src/playwright/unstable/page-objects/expect.ts","../../../src/playwright/unstable/page-objects/impersonation.ts","../../../src/playwright/unstable/page-objects/keylessPopover.ts","../../../src/playwright/unstable/page-objects/organizationSwitcher.ts","../../../src/playwright/unstable/page-objects/planDetails.ts","../../../src/playwright/unstable/page-objects/pricingTable.ts","../../../src/playwright/unstable/page-objects/sessionTask.ts","../../../src/playwright/unstable/page-objects/signIn.ts","../../../src/playwright/unstable/page-objects/signUp.ts","../../../src/playwright/unstable/page-objects/subscriptionDetails.ts","../../../src/playwright/unstable/page-objects/testingToken.ts","../../../src/playwright/unstable/page-objects/userAvatar.ts","../../../src/playwright/unstable/page-objects/userButton.ts","../../../src/playwright/unstable/page-objects/userProfile.ts","../../../src/playwright/unstable/page-objects/userVerification.ts","../../../src/playwright/unstable/page-objects/waitlist.ts","../../../src/playwright/unstable/page-objects/index.ts"],"sourcesContent":["import type { EnhancedPage } from './app';\n\ntype EnterOtpCodeOptions = {\n name?: string;\n awaitRequests?: boolean;\n awaitPrepare?: boolean;\n awaitAttempt?: boolean;\n};\n\nexport const common = ({ page }: { page: EnhancedPage }) => {\n const self = {\n continue: () => {\n return page.getByRole('button', { name: 'Continue', exact: true }).click();\n },\n setEmailAddress: (val: string) => {\n return self.getEmailAddressInput().fill(val);\n },\n setPassword: (val: string) => {\n return self.getPasswordInput().fill(val);\n },\n setPasswordConfirmation: (val: string) => {\n return page.locator('input[name=confirmPassword]').fill(val);\n },\n enterOtpCode: async (code: string, opts?: EnterOtpCodeOptions) => {\n const {\n name = 'Enter verification code',\n awaitAttempt = true,\n awaitPrepare = true,\n awaitRequests = true,\n } = opts ?? {};\n\n if (awaitRequests && awaitPrepare) {\n const prepareVerificationPromise = page.waitForResponse(\n response =>\n response.request().method() === 'POST' &&\n (response.url().includes('prepare_verification') || response.url().includes('prepare_first_factor')),\n );\n await prepareVerificationPromise;\n }\n\n // Handle the case for both OTP input versions\n const originalInput = page.getByRole('textbox', { name: 'Enter verification code. Digit 1' });\n if (await originalInput.isVisible()) {\n console.warn('Using the original OTP input');\n await originalInput.click();\n await page.keyboard.type(code, { delay: 100 });\n } else {\n await page.getByLabel(name).fill(code);\n }\n\n if (awaitRequests && awaitAttempt) {\n const attemptVerificationPromise = page.waitForResponse(\n response =>\n response.request().method() === 'POST' &&\n (response.url().includes('attempt_verification') || response.url().includes('attempt_first_factor')),\n );\n await attemptVerificationPromise;\n }\n },\n enterTestOtpCode: async (opts?: EnterOtpCodeOptions) => {\n return self.enterOtpCode('424242', opts);\n },\n // @deprecated Use .enterTestOtpCode({ name: '...' }) instead\n fillTestOtpCode: async (name: string, opts?: Omit<EnterOtpCodeOptions, 'name'>) => {\n return self.enterOtpCode('424242', { name, ...opts });\n },\n getIdentifierInput: () => {\n return page.locator('input[name=identifier]');\n },\n getEmailAddressInput: () => {\n return page.locator('input[name=emailAddress]');\n },\n getPhoneNumberInput: () => {\n return page.locator('input[name=phoneNumber]');\n },\n getUsernameInput: () => {\n return page.locator('input[name=username]');\n },\n getPasswordInput: () => {\n return page.locator('input[name=password]');\n },\n getLegalAccepted: () => {\n return page.locator('input[name=legalAccepted]');\n },\n getFirstNameInput: () => {\n return page.locator('input[name=firstName]');\n },\n getLastNameInput: () => {\n return page.locator('input[name=lastName]');\n },\n waitForSession: async () => {\n return page.waitForFunction(() => {\n return !!window.Clerk?.session;\n });\n },\n };\n\n return self;\n};\n","import type { EnhancedPage } from './app';\nimport { common } from './common';\n\nexport const createAPIKeysComponentPageObject = (testArgs: { page: EnhancedPage }) => {\n const { page } = testArgs;\n\n const expirationOptions = {\n never: 'Never',\n '1d': '1 Day',\n '7d': '7 Days',\n '30d': '30 Days',\n '60d': '60 Days',\n '90d': '90 Days',\n '180d': '180 Days',\n '1y': '1 Year',\n } as const;\n\n const self = {\n ...common(testArgs),\n waitForMounted: () => {\n return page.waitForSelector('.cl-apiKeys-root', { state: 'attached' });\n },\n clickAddButton: () => {\n return page.getByText(/Add new key/i).click();\n },\n waitForFormOpened: () => {\n return page.waitForSelector('.cl-apiKeysCreateForm', { state: 'attached' });\n },\n waitForFormClosed: () => {\n return page.waitForSelector('.cl-apiKeysCreateForm', { state: 'detached' });\n },\n waitForRevokeModalOpened: () => {\n return page.waitForSelector('.cl-apiKeysRevokeModal', { state: 'attached' });\n },\n waitForRevokeModalClosed: () => {\n return page.waitForSelector('.cl-apiKeysRevokeModal', { state: 'detached' });\n },\n waitForCopyModalOpened: () => {\n return page.waitForSelector('.cl-apiKeysCopyModal', { state: 'attached' });\n },\n waitForCopyModalClosed: () => {\n return page.waitForSelector('.cl-apiKeysCopyModal', { state: 'detached' });\n },\n clickCopyAndCloseButton: () => {\n return page.locator('.cl-apiKeysCopyModal .cl-apiKeysCopyModalSubmitButton').click();\n },\n typeName: (value: string) => {\n return page.getByLabel(/Secret key name/i).fill(value);\n },\n typeDescription: (value: string) => {\n return page.getByLabel(/Description/i).fill(value);\n },\n selectExpiration: async (value?: keyof typeof expirationOptions) => {\n await page.getByRole('button', { name: /Select date/i }).click();\n return page.getByText(expirationOptions[value ?? 'never'], { exact: true }).click({ force: true });\n },\n clickSaveButton: () => {\n return page.getByText(/Create key/i).click();\n },\n typeRevokeConfirmation: (value: string) => {\n return page.getByLabel(/Type \"Revoke\" to confirm/i).fill(value);\n },\n clickConfirmRevokeButton: () => {\n return page.getByText(/Revoke key/i).click();\n },\n };\n return self;\n};\n","import type { Page } from '@playwright/test';\n\nimport { setupClerkTestingToken } from '../../setupClerkTestingToken';\n\nexport type EnhancedPage = ReturnType<typeof createAppPageObject>;\nexport const createAppPageObject = (testArgs: { page: Page; useTestingToken?: boolean }, app: { baseURL?: string }) => {\n const { page, useTestingToken = true } = testArgs;\n const appPage = Object.create(page) as Page;\n const helpers = {\n goToAppHome: async () => {\n if (!app.baseURL) {\n throw new Error(\n 'Attempted to call method requiring baseURL, but baseURL was not provided to createPageObjects.',\n );\n }\n\n try {\n if (useTestingToken) {\n await setupClerkTestingToken({ page });\n }\n\n await page.goto(app.baseURL);\n } catch {\n // do not fail the test if interstitial is returned (401)\n }\n },\n goToRelative: async (\n path: string,\n opts: { waitUntil?: any; searchParams?: URLSearchParams; timeout?: number } = {},\n ) => {\n if (!app.baseURL) {\n throw new Error(\n 'Attempted to call method requiring baseURL, but baseURL was not provided to createPageObjects.',\n );\n }\n let url: URL;\n\n try {\n // When testing applications using real domains we want to manually navigate to the domain first\n // and not follow serverUrl (localhost) by default, as this is usually proxied\n if (page.url().includes('about:blank')) {\n url = new URL(path, app.baseURL);\n } else {\n url = new URL(path, page.url());\n }\n } catch {\n // However, in most tests we don't need to manually navigate to the domain\n // as the test is using a localhost app directly\n // This handles the case where the page is at about:blank\n // and instead it uses the serverUrl\n url = new URL(path, app.baseURL);\n }\n\n if (opts.searchParams) {\n url.search = opts.searchParams.toString();\n }\n\n if (useTestingToken) {\n await setupClerkTestingToken({ page });\n }\n\n return page.goto(url.toString(), { timeout: opts.timeout ?? 20000, waitUntil: opts.waitUntil });\n },\n waitForClerkJsLoaded: async () => {\n return page.waitForFunction(() => {\n return window.Clerk?.loaded;\n });\n },\n signOut: async () => {\n return page.waitForFunction(() => {\n return window.Clerk?.signOut({});\n });\n },\n waitForClerkComponentMounted: async () => {\n return page.waitForSelector('.cl-rootBox', { state: 'attached' });\n },\n waitForAppUrl: async (relativePath: string) => {\n if (!app.baseURL) {\n throw new Error(\n 'Attempted to call method requiring baseURL, but baseURL was not provided to createPageObjects.',\n );\n }\n return page.waitForURL(new URL(relativePath, app.baseURL).toString());\n },\n /**\n * Get the cookies for the URL the page is currently at.\n * Suffixed cookies can be accessed by using the wildcard character `*` at the end of the cookie name,\n * eg `get('__session')` and `get('__session_*')`.\n */\n cookies: async () => {\n const array = await page.context().cookies();\n const map = array.reduce((acc, cookie) => {\n // If a suffixed cookie is found, we usually don't care about the suffix itself\n // Instead, simply replace the suffix with _* so we can easily read it\n // TODO: deal with collisions if neede\n // TODO: might be too much magic here\n // Maybe extract this into a different helper?\n if (cookie.name.match(/^(__.*_)(.{8})$/)) {\n acc.set(cookie.name.replace(/^(__.*_)(.{8})$/, '$1*'), cookie);\n } else {\n acc.set(cookie.name, cookie);\n }\n return acc;\n }, new Map<string, (typeof array)[number]>());\n return Object.assign(map, { raw: () => array });\n },\n };\n return Object.assign(appPage, helpers);\n};\n","import type { EnhancedPage } from './app';\nimport { common } from './common';\n\nexport const createCheckoutPageObject = (testArgs: { page: EnhancedPage }) => {\n const { page } = testArgs;\n const self = {\n ...common(testArgs),\n waitForMounted: (selector = '.cl-checkout-root') => {\n return page.waitForSelector(selector, { state: 'attached', timeout: 20000 });\n },\n closeDrawer: () => {\n return page.locator('.cl-drawerClose').click();\n },\n fillTestCard: async () => {\n await self.fillCard({\n number: '4242424242424242',\n expiration: '1234',\n cvc: '123',\n country: 'United States',\n zip: '12345',\n });\n },\n fillCard: async (card: { number: string; expiration: string; cvc: string; country: string; zip: string }) => {\n await self.waitForStripeElements({ state: 'visible' });\n const frame = page.frameLocator('iframe[src*=\"elements-inner-payment\"]');\n await frame.getByLabel('Card number').fill(card.number);\n await frame.getByLabel('Expiration date').fill(card.expiration);\n await frame.getByLabel('Security code').fill(card.cvc);\n await frame.getByLabel('Country').selectOption(card.country);\n await frame.getByLabel('ZIP code').fill(card.zip);\n },\n waitForStripeElements: async ({ state = 'visible' }: { state?: 'visible' | 'hidden' } = {}) => {\n const iframe = page.locator('iframe[src*=\"elements-inner-payment\"]');\n if (state === 'visible') {\n await iframe.waitFor({ state: 'attached', timeout: 20000 });\n await page.frameLocator('iframe[src*=\"elements-inner-payment\"]').getByLabel('Card number').waitFor({\n state: 'visible',\n timeout: 20000,\n });\n } else {\n await page.frameLocator('iframe[src*=\"elements-inner-payment\"]').getByLabel('Card number').waitFor({\n state: 'hidden',\n timeout: 20000,\n });\n }\n },\n clickPayOrSubscribe: async () => {\n await self.root.getByRole('button', { name: /subscribe|pay\\s\\$|start/i }).click();\n },\n waitForSubscribeButton: async () => {\n await self.root.getByRole('button', { name: /^subscribe$/i }).waitFor({ state: 'visible' });\n },\n confirmAndContinue: async () => {\n await self.root.getByRole('button', { name: /^continue$/i }).click();\n },\n clickAddPaymentMethod: async () => {\n await self.root.getByRole('radio', { name: 'Add payment method' }).click();\n },\n clickPaymentMethods: async () => {\n await self.root.getByRole('radio', { name: 'Payment Methods' }).click();\n },\n root: page.locator('.cl-checkout-root'),\n };\n return self;\n};\n","import type { EnhancedPage } from './app';\n\nexport const createClerkPageObject = ({ page }: { page: EnhancedPage }) => {\n return {\n toBeLoaded: async () => {\n return page.waitForFunction(() => {\n return !!window.Clerk?.loaded;\n });\n },\n getClientSideActor: () => {\n return page.evaluate(() => {\n return window.Clerk?.session?.actor;\n });\n },\n toBeLoading: async () => {\n return page.waitForFunction(() => {\n return window.Clerk?.status === 'loading';\n });\n },\n toBeReady: async () => {\n return page.waitForFunction(() => {\n return window.Clerk?.status === 'ready';\n });\n },\n toBeDegraded: async () => {\n return page.waitForFunction(() => {\n return window.Clerk?.status === 'degraded';\n });\n },\n getClientSideUser: () => {\n return page.evaluate(() => {\n return window.Clerk?.user;\n });\n },\n };\n};\n","import type { Response } from '@playwright/test';\nimport { expect } from '@playwright/test';\n\nimport type { EnhancedPage } from './app';\n\nexport const createExpectPageObject = ({ page }: { page: EnhancedPage }) => {\n return {\n toBeHandshake: async (res: Response) => {\n // Travel the redirect chain until we find the handshake header\n // TODO: Loop through the redirects until we find a handshake header, or timeout trying\n const redirect = await res.request().redirectedFrom()?.redirectedFrom()?.response();\n expect(redirect?.status()).toBe(307);\n expect(redirect?.headers()['x-clerk-auth-status']).toContain('handshake');\n },\n toBeSignedOut: (args?: { timeOut: number }) => {\n return page.waitForFunction(\n () => {\n return !window.Clerk?.user;\n },\n null,\n { timeout: args?.timeOut },\n );\n },\n toBeSignedIn: async () => {\n return page.waitForFunction(() => {\n return !!window.Clerk?.user;\n });\n },\n toBeSignedInAsActor: async () => {\n return page.waitForFunction(() => {\n return !!window.Clerk?.session?.actor;\n });\n },\n toHaveResolvedTask: async () => {\n return page.waitForFunction(() => {\n return !window.Clerk?.session?.currentTask;\n });\n },\n };\n};\n","import type { EnhancedPage } from './app';\n\nexport const createImpersonationPageObject = (testArgs: { page: EnhancedPage }) => {\n const { page } = testArgs;\n const self = {\n waitForMounted: (selector = '.cl-impersonationFab') => {\n return page.waitForSelector(selector, { state: 'attached' });\n },\n getSignOutLink: () => {\n return page.locator('.cl-impersonationFab').getByText('Sign out');\n },\n };\n return self;\n};\n","import type { EnhancedPage } from './app';\n\nexport const createKeylessPopoverPageObject = (testArgs: { page: EnhancedPage }) => {\n const { page } = testArgs;\n // TODO: Is this the ID we really want ?\n const elementId = '#--clerk-keyless-prompt-button';\n const self = {\n waitForMounted: () => page.waitForSelector(elementId, { state: 'attached' }),\n waitForUnmounted: () => page.waitForSelector(elementId, { state: 'detached' }),\n isExpanded: () =>\n page\n .locator(elementId)\n .getAttribute('aria-expanded')\n .then(val => val === 'true'),\n toggle: () => page.locator(elementId).click(),\n\n promptsToClaim: () => {\n return page.getByRole('link', { name: /^claim application$/i });\n },\n promptToUseClaimedKeys: () => {\n return page.getByRole('link', { name: /^get api keys$/i });\n },\n promptToDismiss: () => {\n return page.getByRole('button', { name: /^dismiss$/i });\n },\n };\n return self;\n};\n","import { expect } from '@playwright/test';\n\nimport type { EnhancedPage } from './app';\nimport { common } from './common';\n\nexport const createOrganizationSwitcherComponentPageObject = (testArgs: { page: EnhancedPage }) => {\n const { page } = testArgs;\n\n const self = {\n ...common(testArgs),\n goTo: async (relativePath = '/switcher') => {\n await page.goToRelative(relativePath);\n return self.waitForMounted();\n },\n waitForMounted: () => {\n return page.waitForSelector('.cl-organizationSwitcher-root', { state: 'attached' });\n },\n expectNoOrganizationSelected: () => {\n return expect(page.getByText(/No organization selected/i)).toBeVisible();\n },\n expectPersonalAccount: () => {\n return expect(page.getByText(/personal account/i)).toBeVisible();\n },\n toggleTrigger: () => {\n return page.locator('.cl-organizationSwitcherTrigger').click();\n },\n waitForAnOrganizationToSelected: () => {\n return page.waitForSelector('.cl-userPreviewMainIdentifier__personalWorkspace', { state: 'detached' });\n },\n };\n\n return self;\n};\n","import type { EnhancedPage } from './app';\nimport { common } from './common';\n\nexport const createPlanDetailsPageObject = (testArgs: { page: EnhancedPage }) => {\n const { page } = testArgs;\n const self = {\n ...common(testArgs),\n waitForMounted: (selector = '.cl-planDetails-root') => {\n return page.waitForSelector(selector, { state: 'attached' });\n },\n root: page.locator('.cl-planDetails-root'),\n };\n return self;\n};\n","import type { EnhancedPage } from './app';\nimport { common } from './common';\n\ntype BillingPeriod = 'monthly' | 'annually';\n\nexport const createPricingTablePageObject = (testArgs: { page: EnhancedPage }) => {\n const { page } = testArgs;\n\n const locators = {\n toggle: (planSlug: string) => page.locator(`.cl-pricingTableCard__${planSlug} .cl-pricingTableCardPeriodToggle`),\n indicator: (planSlug: string) => page.locator(`.cl-pricingTableCard__${planSlug} .cl-switchIndicator`),\n badge: (planSlug: string) => page.locator(`.cl-pricingTableCard__${planSlug} .cl-badge`),\n footer: (planSlug: string) => page.locator(`.cl-pricingTableCard__${planSlug} .cl-pricingTableCardFooter`),\n };\n\n const ensurePricingPeriod = async (planSlug: string, period: BillingPeriod): Promise<void> => {\n async function waitForAttribute(selector: string, attribute: string, value: string, timeout = 5000) {\n return page\n .waitForFunction(\n ({ sel, attr, val }) => {\n const element = document.querySelector(sel);\n return element?.getAttribute(attr) === val;\n },\n { sel: selector, attr: attribute, val: value },\n { timeout },\n )\n .then(() => {\n return true;\n })\n .catch(() => {\n return false;\n });\n }\n\n const isAnnually = await waitForAttribute(\n `.cl-pricingTableCard__${planSlug} .cl-switchIndicator`,\n 'data-checked',\n 'true',\n 500,\n );\n\n if (isAnnually && period === 'monthly') {\n await locators.toggle(planSlug).click();\n }\n\n if (!isAnnually && period === 'annually') {\n await locators.toggle(planSlug).click();\n }\n };\n\n const self = {\n ...common(testArgs),\n waitForMounted: (selector = '.cl-pricingTable-root') => {\n return page.waitForSelector(selector, { state: 'attached' });\n },\n clickResubscribe: async () => {\n await page.getByText('Re-subscribe').click();\n },\n waitToBeActive: async ({ planSlug }: { planSlug: string }) => {\n return locators.badge(planSlug).getByText('Active').waitFor({ state: 'visible' });\n },\n waitToBeFreeTrial: async ({ planSlug }: { planSlug: string }) => {\n return locators.badge(planSlug).getByText('Free trial').waitFor({ state: 'visible' });\n },\n getPlanCardCTA: ({ planSlug }: { planSlug: string }) => {\n return locators.footer(planSlug).getByRole('button', {\n name: /get|switch|subscribe/i,\n });\n },\n startCheckout: async ({\n planSlug,\n shouldSwitch,\n period,\n }: {\n planSlug: string;\n shouldSwitch?: boolean;\n period?: BillingPeriod;\n }) => {\n const targetButtonName =\n shouldSwitch === true\n ? 'Switch to this plan'\n : shouldSwitch === false\n ? /subscribe/i\n : /get|switch|subscribe|Start \\d+-day free trial/i;\n\n if (period) {\n await ensurePricingPeriod(planSlug, period);\n }\n\n await locators\n .footer(planSlug)\n .getByRole('button', {\n name: targetButtonName,\n })\n .click();\n },\n };\n return self;\n};\n","import { expect } from '@playwright/test';\n\nimport type { EnhancedPage } from './app';\nimport { common } from './common';\n\nexport const createSessionTaskComponentPageObject = (testArgs: { page: EnhancedPage }) => {\n const { page } = testArgs;\n\n const self = {\n ...common(testArgs),\n resolveForceOrganizationSelectionTask: async (fakeOrganization: { name: string; slug?: string }) => {\n const createOrganizationButton = page.getByRole('button', { name: /continue/i });\n\n await expect(createOrganizationButton).toBeVisible();\n\n await page.locator('input[name=name]').fill(fakeOrganization.name);\n if (fakeOrganization.slug) {\n await page.locator('input[name=slug]').fill(fakeOrganization.slug);\n }\n\n await createOrganizationButton.click();\n },\n resolveResetPasswordTask: async ({\n newPassword,\n confirmPassword,\n }: {\n newPassword: string;\n confirmPassword: string;\n }) => {\n await page.locator('input[name=newPassword]').fill(newPassword);\n await page.locator('input[name=confirmPassword]').fill(confirmPassword);\n\n const resetPasswordButton = page.getByRole('button', { name: /reset password/i });\n await expect(resetPasswordButton).toBeVisible();\n await resetPasswordButton.click();\n },\n };\n\n return self;\n};\n","import { expect } from '@playwright/test';\n\nimport type { EnhancedPage } from './app';\nimport { common } from './common';\n\nexport const createSignInComponentPageObject = (testArgs: { page: EnhancedPage }) => {\n const { page } = testArgs;\n const self = {\n ...common(testArgs),\n goTo: async (opts?: { searchParams?: URLSearchParams; headlessSelector?: string; timeout?: number }) => {\n const navRes = await page.goToRelative('/sign-in', opts);\n\n if (typeof opts?.headlessSelector !== 'undefined') {\n await self.waitForMounted(opts.headlessSelector);\n } else {\n await self.waitForMounted();\n }\n return navRes;\n },\n waitForMounted: (selector = '.cl-signIn-root') => {\n return page.waitForSelector(selector, { state: 'attached' });\n },\n waitForModal: (state?: 'open' | 'closed') => {\n return page.waitForSelector('.cl-modalContent:has(.cl-signIn-root)', {\n state: state === 'closed' ? 'detached' : 'attached',\n });\n },\n setIdentifier: (val: string) => {\n return self.getIdentifierInput().fill(val);\n },\n setInstantPassword: async (val: string) => {\n const passField = self.getPasswordInput();\n await expect(passField).toBeVisible();\n await passField.fill(val, { force: true });\n },\n usePhoneNumberIdentifier: () => {\n return page.getByRole('link', { name: /^use phone/i });\n },\n useEmailIdentifier: () => {\n return page.getByRole('link', { name: /^use email/i });\n },\n useUsernameIdentifier: () => {\n return page.getByRole('link', { name: /^username$/i });\n },\n getForgotPassword: () => {\n return page.getByRole('link', { name: /forgot password/i });\n },\n getGoToSignUp: () => {\n return page.getByRole('link', { name: /sign up/i });\n },\n getResetPassword: () => {\n return page.getByRole('button', { name: /(reset password|reset your password)/i });\n },\n getUseAnotherMethodLink: () => {\n return page.getByRole('link', { name: /use another method/i });\n },\n getAltMethodsEmailCodeButton: () => {\n return page.getByRole('button', { name: /email code to/i });\n },\n getAltMethodsEmailLinkButton: () => {\n return page.getByRole('button', { name: /email link to/i });\n },\n signInWithOauth: (provider: string) => {\n return page.getByRole('button', { name: new RegExp(`continue with ${provider}`, 'gi') });\n },\n signInWithEmailAndInstantPassword: async ({\n email,\n password,\n waitForSession = true,\n }: {\n email: string;\n password: string;\n waitForSession?: boolean;\n }) => {\n const identifierField = self.getIdentifierInput();\n await expect(identifierField).toBeVisible();\n\n await identifierField.fill(email);\n await self.setInstantPassword(password);\n await self.continue();\n\n if (waitForSession) {\n await self.waitForSession();\n }\n },\n };\n return self;\n};\n","import type { EnhancedPage } from './app';\nimport { common } from './common';\n\ntype SignUpFormInputs = {\n email?: string;\n password?: string;\n firstName?: string;\n lastName?: string;\n username?: string;\n phoneNumber?: string;\n legalAccepted?: boolean;\n};\n\nexport const createSignUpComponentPageObject = (testArgs: { page: EnhancedPage }) => {\n const { page } = testArgs;\n\n const self = {\n ...common(testArgs),\n goTo: async (opts?: { searchParams?: URLSearchParams; headlessSelector?: string }) => {\n await page.goToRelative('/sign-up', { searchParams: opts?.searchParams });\n\n if (typeof opts?.headlessSelector !== 'undefined') {\n return self.waitForMounted(opts.headlessSelector);\n }\n return self.waitForMounted();\n },\n waitForMounted: (selector = '.cl-signUp-root') => {\n return page.waitForSelector(selector, { state: 'attached' });\n },\n waitForModal: (state?: 'open' | 'closed') => {\n return page.waitForSelector('.cl-modalContent:has(.cl-signUp-root)', {\n state: state === 'closed' ? 'detached' : 'attached',\n });\n },\n signUpWithOauth: (provider: string) => {\n return page.getByRole('button', { name: new RegExp(`continue with ${provider}`, 'gi') });\n },\n signUp: async (opts: SignUpFormInputs) => {\n if (opts.firstName) {\n await self.getFirstNameInput().fill(opts.firstName);\n }\n\n if (opts.lastName) {\n await self.getLastNameInput().fill(opts.lastName);\n }\n\n if (opts.email) {\n await self.getEmailAddressInput().fill(opts.email);\n }\n\n if (opts.username) {\n await self.getUsernameInput().fill(opts.username);\n }\n\n if (opts.phoneNumber) {\n await self.getPhoneNumberInput().fill(opts.phoneNumber);\n }\n\n if (opts.password) {\n await self.getPasswordInput().fill(opts.password);\n }\n\n if (opts.legalAccepted) {\n await self.getLegalAccepted().check();\n }\n\n await self.continue();\n },\n signUpWithEmailAndPassword: async (opts: Pick<SignUpFormInputs, 'email' | 'password'>) => {\n await self.signUp({ email: opts.email, password: opts.password });\n },\n waitForEmailVerificationScreen: async () => {\n await page.waitForURL(/verify/);\n await page.getByRole('heading', { name: /Verify your email/i }).waitFor();\n },\n };\n\n return self;\n};\n","import type { EnhancedPage } from './app';\nimport { common } from './common';\n\nexport const createSubscriptionDetailsPageObject = (testArgs: { page: EnhancedPage }) => {\n const { page } = testArgs;\n const self = {\n ...common(testArgs),\n waitForMounted: (selector = '.cl-subscriptionDetails-root') => {\n return page.waitForSelector(selector, { state: 'attached' });\n },\n waitForUnmounted: () => {\n return self.root.locator('.cl-drawerRoot').waitFor({ state: 'detached' });\n },\n closeDrawer: () => {\n return self.root.locator('.cl-drawerClose').click();\n },\n root: page.locator('.cl-subscriptionDetails-root'),\n };\n return self;\n};\n","import { setupClerkTestingToken } from '../../setupClerkTestingToken';\nimport type { EnhancedPage } from './app';\n\nexport const createTestingTokenPageObject = ({ page }: { page: EnhancedPage }) => {\n return {\n setup: async () => setupClerkTestingToken({ page }),\n };\n};\n","import { expect } from '@playwright/test';\n\nimport type { EnhancedPage } from './app';\n\nconst SELECTOR = '.cl-userAvatarBox';\n\nexport const createUserAvatarPageObject = (testArgs: { page: EnhancedPage }) => {\n const { page } = testArgs;\n\n const self = {\n goTo: async (opts?: { searchParams: URLSearchParams }) => {\n await page.goToRelative('/user-avatar', opts);\n return self.waitForMounted();\n },\n waitForMounted: (selector = SELECTOR) => {\n return page.waitForSelector(selector, { state: 'attached' });\n },\n toBeVisible: async (selector = SELECTOR) => {\n return await expect(page.locator(selector).getByRole('img')).toBeVisible();\n },\n };\n\n return self;\n};\n","import { expect } from '@playwright/test';\n\nimport type { EnhancedPage } from './app';\n\nexport const createUserButtonPageObject = (testArgs: { page: EnhancedPage }) => {\n const { page } = testArgs;\n\n const self = {\n waitForMounted: () => {\n return page.waitForSelector('.cl-userButtonTrigger', { state: 'attached' });\n },\n toggleTrigger: () => {\n return page.locator('.cl-userButtonTrigger').click();\n },\n waitForPopover: () => {\n return page.waitForSelector('.cl-userButtonPopoverCard', { state: 'visible' });\n },\n waitForPopoverClosed: () => {\n return page.waitForSelector('.cl-userButtonPopoverCard', { state: 'detached' });\n },\n toHaveVisibleMenuItems: async (menuItems: string | RegExp | Array<string | RegExp>) => {\n if (typeof menuItems === 'string' || menuItems instanceof RegExp) {\n menuItems = [menuItems];\n }\n for (const menuItem of menuItems) {\n await expect(page.getByRole('menuitem', { name: menuItem })).toBeVisible();\n }\n },\n triggerSignOut: () => {\n return page.getByRole('menuitem', { name: /Sign out$/i }).click();\n },\n triggerManageAccount: () => {\n return page.getByRole('menuitem', { name: /Manage account/i }).click();\n },\n switchAccount: (emailAddress: string) => {\n return page.getByText(emailAddress).click();\n },\n };\n\n return self;\n};\n","import type { EnhancedPage } from './app';\nimport { common } from './common';\n\nexport type Sections = 'profile' | 'emailAddresses' | 'username' | 'phoneNumbers' | 'danger';\n\nexport const createUserProfileComponentPageObject = (testArgs: { page: EnhancedPage }) => {\n const { page } = testArgs;\n const self = {\n ...common(testArgs),\n goTo: async (opts?: { searchParams: URLSearchParams }) => {\n await page.goToRelative('/user', opts);\n return self.waitForMounted();\n },\n switchToSecurityTab: async () => {\n await page.getByText(/Security/i).click();\n },\n switchToBillingTab: async () => {\n await page.getByText(/Billing/i).click();\n },\n switchToAPIKeysTab: async () => {\n await page.getByText(/API keys/i).click();\n },\n waitForMounted: () => {\n return page.waitForSelector('.cl-userProfile-root', { state: 'attached' });\n },\n clickSetUsername: () => {\n return page.getByText(/Set username/i).click();\n },\n clickToUpdateProfile: () => {\n return page.getByText(/update profile/i).click();\n },\n clickUpdateUsername: () => {\n return page.getByText(/update username/i).click();\n },\n clickSetPassword: () => {\n return page.getByText(/Set password/i).click();\n },\n waitForSectionCard: (section: Sections, opened: boolean) => {\n return page.waitForSelector(`.cl-profileSectionContent__${section} .cl-headerTitle`, {\n state: opened ? 'visible' : 'detached',\n });\n },\n waitForSectionCardOpened: (section: Sections) => {\n return self.waitForSectionCard(section, true);\n },\n waitForSectionCardClosed: (section: Sections) => {\n return self.waitForSectionCard(section, false);\n },\n typeUsername: (value: string) => {\n return self.getUsernameInput().fill(value);\n },\n typeFirstName: (value: string) => {\n return self.getFirstNameInput().fill(value);\n },\n typeLastName: (value: string) => {\n return self.getLastNameInput().fill(value);\n },\n typePhoneNumber: (value: string) => {\n return self.getPhoneNumberInput().fill(value);\n },\n clickAddEmailAddress: () => {\n return page.getByText(/add email address/i).click();\n },\n clickAddPhoneNumber: () => {\n return page.getByText(/add phone number/i).click();\n },\n typeEmailAddress: (value: string) => {\n return page.getByLabel(/Email address/i).fill(value);\n },\n waitForUserProfileModal: (state?: 'open' | 'closed') => {\n return page.waitForSelector('.cl-modalContent:has(.cl-userProfile-root)', {\n state: state === 'closed' ? 'detached' : 'attached',\n });\n },\n };\n return self;\n};\n","import type { EnhancedPage } from './app';\nimport { common } from './common';\n\nexport const createUserVerificationComponentPageObject = (testArgs: { page: EnhancedPage }) => {\n const { page } = testArgs;\n const self = {\n ...common(testArgs),\n waitForMounted: (selector = '.cl-userVerification-root') => {\n return page.waitForSelector(selector, { state: 'attached' });\n },\n waitForClosed: (selector = '.cl-userVerification-root') => {\n return page.waitForSelector(selector, { state: 'detached' });\n },\n closeReverificationModal: () => {\n return page.getByLabel('Close modal').click();\n },\n getUseAnotherMethodLink: () => {\n return page.getByRole('link', { name: /use another method/i });\n },\n getAltMethodsEmailCodeButton: () => {\n return page.getByRole('button', { name: /email code to/i });\n },\n getAltMethodsEmailLinkButton: () => {\n return page.getByRole('button', { name: /email link to/i });\n },\n };\n return self;\n};\n","import type { EnhancedPage } from './app';\nimport { common } from './common';\n\ntype WaitlistFormInputs = {\n email: string;\n};\n\nexport const createWaitlistComponentPageObject = (testArgs: { page: EnhancedPage }) => {\n const { page } = testArgs;\n\n const self = {\n ...common(testArgs),\n goTo: async (opts?: { searchParams?: URLSearchParams; headlessSelector?: string }) => {\n await page.goToRelative('/waitlist', { searchParams: opts?.searchParams });\n\n if (typeof opts?.headlessSelector !== 'undefined') {\n return self.waitForMounted(opts.headlessSelector);\n }\n return self.waitForMounted();\n },\n waitForMounted: (selector = '.cl-waitlist-root') => {\n return page.waitForSelector(selector, { state: 'attached' });\n },\n joinWaitlist: async (opts: WaitlistFormInputs) => {\n await self.getEmailAddressInput().fill(opts.email);\n\n await self.joinWaitlistContinue();\n },\n joinWaitlistContinue: () => {\n return page.getByRole('button', { name: 'Join the waitlist', exact: true }).click();\n },\n };\n\n return self;\n};\n","import type { Page } from '@playwright/test';\n\nimport { createAPIKeysComponentPageObject } from './apiKeys';\nimport { createAppPageObject } from './app';\nimport { createCheckoutPageObject } from './checkout';\nimport { createClerkPageObject } from './clerk';\nimport { createExpectPageObject } from './expect';\nimport { createImpersonationPageObject } from './impersonation';\nimport { createKeylessPopoverPageObject } from './keylessPopover';\nimport { createOrganizationSwitcherComponentPageObject } from './organizationSwitcher';\nimport { createPlanDetailsPageObject } from './planDetails';\nimport { createPricingTablePageObject } from './pricingTable';\nimport { createSessionTaskComponentPageObject } from './sessionTask';\nimport { createSignInComponentPageObject } from './signIn';\nimport { createSignUpComponentPageObject } from './signUp';\nimport { createSubscriptionDetailsPageObject } from './subscriptionDetails';\nimport { createTestingTokenPageObject } from './testingToken';\nimport { createUserAvatarPageObject } from './userAvatar';\nimport { createUserButtonPageObject } from './userButton';\nimport { createUserProfileComponentPageObject } from './userProfile';\nimport { createUserVerificationComponentPageObject } from './userVerification';\nimport { createWaitlistComponentPageObject } from './waitlist';\n\nexport const createPageObjects = ({\n page,\n useTestingToken = true,\n baseURL,\n}: {\n page: Page;\n useTestingToken?: boolean;\n baseURL?: string;\n}) => {\n const app = createAppPageObject({ page, useTestingToken }, { baseURL });\n const testArgs = { page: app };\n\n return {\n page: app,\n clerk: createClerkPageObject(testArgs),\n checkout: createCheckoutPageObject(testArgs),\n expect: createExpectPageObject(testArgs),\n impersonation: createImpersonationPageObject(testArgs),\n keylessPopover: createKeylessPopoverPageObject(testArgs),\n organizationSwitcher: createOrganizationSwitcherComponentPageObject(testArgs),\n pricingTable: createPricingTablePageObject(testArgs),\n sessionTask: createSessionTaskComponentPageObject(testArgs),\n signIn: createSignInComponentPageObject(testArgs),\n signUp: createSignUpComponentPageObject(testArgs),\n testingToken: createTestingTokenPageObject(testArgs),\n userAvatar: createUserAvatarPageObject(testArgs),\n userButton: createUserButtonPageObject(testArgs),\n userProfile: createUserProfileComponentPageObject(testArgs),\n userVerification: createUserVerificationComponentPageObject(testArgs),\n waitlist: createWaitlistComponentPageObject(testArgs),\n apiKeys: createAPIKeysComponentPageObject(testArgs),\n subscriptionDetails: createSubscriptionDetailsPageObject(testArgs),\n planDetails: createPlanDetailsPageObject(testArgs),\n };\n};\n"],"mappings":"8EASO,IAAMA,EAAS,CAAC,CAAE,KAAAC,CAAK,IAA8B,CAC1D,IAAMC,EAAO,CACX,SAAU,IACDD,EAAK,UAAU,SAAU,CAAE,KAAM,WAAY,MAAO,EAAK,CAAC,EAAE,MAAM,EAE3E,gBAAkBE,GACTD,EAAK,qBAAqB,EAAE,KAAKC,CAAG,EAE7C,YAAcA,GACLD,EAAK,iBAAiB,EAAE,KAAKC,CAAG,EAEzC,wBAA0BA,GACjBF,EAAK,QAAQ,6BAA6B,EAAE,KAAKE,CAAG,EAE7D,aAAc,MAAOC,EAAcC,IAA+B,CAChE,GAAM,CACJ,KAAAC,EAAO,0BACP,aAAAC,EAAe,GACf,aAAAC,EAAe,GACf,cAAAC,EAAgB,EAClB,EAAIJ,GAAQ,CAAC,EAETI,GAAiBD,GAMnB,MALmCP,EAAK,gBACtCS,GACEA,EAAS,QAAQ,EAAE,OAAO,IAAM,SAC/BA,EAAS,IAAI,EAAE,SAAS,sBAAsB,GAAKA,EAAS,IAAI,EAAE,SAAS,sBAAsB,EACtG,EAKF,IAAMC,EAAgBV,EAAK,UAAU,UAAW,CAAE,KAAM,kCAAmC,CAAC,EACxF,MAAMU,EAAc,UAAU,GAChC,QAAQ,KAAK,8BAA8B,EAC3C,MAAMA,EAAc,MAAM,EAC1B,MAAMV,EAAK,SAAS,KAAKG,EAAM,CAAE,MAAO,GAAI,CAAC,GAE7C,MAAMH,EAAK,WAAWK,CAAI,EAAE,KAAKF,CAAI,EAGnCK,GAAiBF,GAMnB,MALmCN,EAAK,gBACtCS,GACEA,EAAS,QAAQ,EAAE,OAAO,IAAM,SAC/BA,EAAS,IAAI,EAAE,SAAS,sBAAsB,GAAKA,EAAS,IAAI,EAAE,SAAS,sBAAsB,EACtG,CAGJ,EACA,iBAAkB,MAAOL,GAChBH,EAAK,aAAa,SAAUG,CAAI,EAGzC,gBAAiB,MAAOC,EAAcD,IAC7BH,EAAK,aAAa,SAAU,CAAE,KAAAI,EAAM,GAAGD,CAAK,CAAC,EAEtD,mBAAoB,IACXJ,EAAK,QAAQ,wBAAwB,EAE9C,qBAAsB,IACbA,EAAK,QAAQ,0BAA0B,EAEhD,oBAAqB,IACZA,EAAK,QAAQ,yBAAyB,EAE/C,iBAAkB,IACTA,EAAK,QAAQ,sBAAsB,EAE5C,iBAAkB,IACTA,EAAK,QAAQ,sBAAsB,EAE5C,iBAAkB,IACTA,EAAK,QAAQ,2BAA2B,EAEjD,kBAAmB,IACVA,EAAK,QAAQ,uBAAuB,EAE7C,iBAAkB,IACTA,EAAK,QAAQ,sBAAsB,EAE5C,eAAgB,SACPA,EAAK,gBAAgB,IACnB,CAAC,CAAC,OAAO,OAAO,OACxB,CAEL,EAEA,OAAOC,CACT,EC/FO,IAAMU,EAAoCC,GAAqC,CACpF,GAAM,CAAE,KAAAC,CAAK,EAAID,EAEXE,EAAoB,CACxB,MAAO,QACP,KAAM,QACN,KAAM,SACN,MAAO,UACP,MAAO,UACP,MAAO,UACP,OAAQ,WACR,KAAM,QACR,EAmDA,MAjDa,CACX,GAAGC,EAAOH,CAAQ,EAClB,eAAgB,IACPC,EAAK,gBAAgB,mBAAoB,CAAE,MAAO,UAAW,CAAC,EAEvE,eAAgB,IACPA,EAAK,UAAU,cAAc,EAAE,MAAM,EAE9C,kBAAmB,IACVA,EAAK,gBAAgB,wBAAyB,CAAE,MAAO,UAAW,CAAC,EAE5E,kBAAmB,IACVA,EAAK,gBAAgB,wBAAyB,CAAE,MAAO,UAAW,CAAC,EAE5E,yBAA0B,IACjBA,EAAK,gBAAgB,yBAA0B,CAAE,MAAO,UAAW,CAAC,EAE7E,yBAA0B,IACjBA,EAAK,gBAAgB,yBAA0B,CAAE,MAAO,UAAW,CAAC,EAE7E,uBAAwB,IACfA,EAAK,gBAAgB,uBAAwB,CAAE,MAAO,UAAW,CAAC,EAE3E,uBAAwB,IACfA,EAAK,gBAAgB,uBAAwB,CAAE,MAAO,UAAW,CAAC,EAE3E,wBAAyB,IAChBA,EAAK,QAAQ,uDAAuD,EAAE,MAAM,EAErF,SAAWG,GACFH,EAAK,WAAW,kBAAkB,EAAE,KAAKG,CAAK,EAEvD,gBAAkBA,GACTH,EAAK,WAAW,cAAc,EAAE,KAAKG,CAAK,EAEnD,iBAAkB,MAAOA,IACvB,MAAMH,EAAK,UAAU,SAAU,CAAE,KAAM,cAAe,CAAC,EAAE,MAAM,EACxDA,EAAK,UAAUC,EAAkBE,GAAS,OAAO,EAAG,CAAE,MAAO,EAAK,CAAC,EAAE,MAAM,CAAE,MAAO,EAAK,CAAC,GAEnG,gBAAiB,IACRH,EAAK,UAAU,aAAa,EAAE,MAAM,EAE7C,uBAAyBG,GAChBH,EAAK,WAAW,2BAA2B,EAAE,KAAKG,CAAK,EAEhE,yBAA0B,IACjBH,EAAK,UAAU,aAAa,EAAE,MAAM,CAE/C,CAEF,EC9DO,IAAMI,EAAsB,CAACC,EAAqDC,IAA8B,CACrH,GAAM,CAAE,KAAAC,EAAM,gBAAAC,EAAkB,EAAK,EAAIH,EACnCI,EAAU,OAAO,OAAOF,CAAI,EAoGlC,OAAO,OAAO,OAAOE,EAnGL,CACd,YAAa,SAAY,CACvB,GAAI,CAACH,EAAI,QACP,MAAM,IAAI,MACR,gGACF,EAGF,GAAI,CACEE,GACF,MAAME,EAAuB,CAAE,KAAAH,CAAK,CAAC,EAGvC,MAAMA,EAAK,KAAKD,EAAI,OAAO,CAC7B,MAAQ,CAER,CACF,EACA,aAAc,MACZK,EACAC,EAA8E,CAAC,IAC5E,CACH,GAAI,CAACN,EAAI,QACP,MAAM,IAAI,MACR,gGACF,EAEF,IAAIO,EAEJ,GAAI,CAGEN,EAAK,IAAI,EAAE,SAAS,aAAa,EACnCM,EAAM,IAAI,IAAIF,EAAML,EAAI,OAAO,EAE/BO,EAAM,IAAI,IAAIF,EAAMJ,EAAK,IAAI,CAAC,CAElC,MAAQ,CAKNM,EAAM,IAAI,IAAIF,EAAML,EAAI,OAAO,CACjC,CAEA,OAAIM,EAAK,eACPC,EAAI,OAASD,EAAK,aAAa,SAAS,GAGtCJ,GACF,MAAME,EAAuB,CAAE,KAAAH,CAAK,CAAC,EAGhCA,EAAK,KAAKM,EAAI,SAAS,EAAG,CAAE,QAASD,EAAK,SAAW,IAAO,UAAWA,EAAK,SAAU,CAAC,CAChG,EACA,qBAAsB,SACbL,EAAK,gBAAgB,IACnB,OAAO,OAAO,MACtB,EAEH,QAAS,SACAA,EAAK,gBAAgB,IACnB,OAAO,OAAO,QAAQ,CAAC,CAAC,CAChC,EAEH,6BAA8B,SACrBA,EAAK,gBAAgB,cAAe,CAAE,MAAO,UAAW,CAAC,EAElE,cAAe,MAAOO,GAAyB,CAC7C,GAAI,CAACR,EAAI,QACP,MAAM,IAAI,MACR,gGACF,EAEF,OAAOC,EAAK,WAAW,IAAI,IAAIO,EAAcR,EAAI,OAAO,EAAE,SAAS,CAAC,CACtE,EAMA,QAAS,SAAY,CACnB,IAAMS,EAAQ,MAAMR,EAAK,QAAQ,EAAE,QAAQ,EACrCS,EAAMD,EAAM,OAAO,CAACE,EAAKC,KAMzBA,EAAO,KAAK,MAAM,iBAAiB,EACrCD,EAAI,IAAIC,EAAO,KAAK,QAAQ,kBAAmB,KAAK,EAAGA,CAAM,EAE7DD,EAAI,IAAIC,EAAO,KAAMA,CAAM,EAEtBD,GACN,IAAI,GAAqC,EAC5C,OAAO,OAAO,OAAOD,EAAK,CAAE,IAAK,IAAMD,CAAM,CAAC,CAChD,CACF,CACqC,CACvC,ECzGO,IAAMI,EAA4BC,GAAqC,CAC5E,GAAM,CAAE,KAAAC,CAAK,EAAID,EACXE,EAAO,CACX,GAAGC,EAAOH,CAAQ,EAClB,eAAgB,CAACI,EAAW,sBACnBH,EAAK,gBAAgBG,EAAU,CAAE,MAAO,WAAY,QAAS,GAAM,CAAC,EAE7E,YAAa,IACJH,EAAK,QAAQ,iBAAiB,EAAE,MAAM,EAE/C,aAAc,SAAY,CACxB,MAAMC,EAAK,SAAS,CAClB,OAAQ,mBACR,WAAY,OACZ,IAAK,MACL,QAAS,gBACT,IAAK,OACP,CAAC,CACH,EACA,SAAU,MAAOG,GAA4F,CAC3G,MAAMH,EAAK,sBAAsB,CAAE,MAAO,SAAU,CAAC,EACrD,IAAMI,EAAQL,EAAK,aAAa,uCAAuC,EACvE,MAAMK,EAAM,WAAW,aAAa,EAAE,KAAKD,EAAK,MAAM,EACtD,MAAMC,EAAM,WAAW,iBAAiB,EAAE,KAAKD,EAAK,UAAU,EAC9D,MAAMC,EAAM,WAAW,eAAe,EAAE,KAAKD,EAAK,GAAG,EACrD,MAAMC,EAAM,WAAW,SAAS,EAAE,aAAaD,EAAK,OAAO,EAC3D,MAAMC,EAAM,WAAW,UAAU,EAAE,KAAKD,EAAK,GAAG,CAClD,EACA,sBAAuB,MAAO,CAAE,MAAAE,EAAQ,SAAU,EAAsC,CAAC,IAAM,CAC7F,IAAMC,EAASP,EAAK,QAAQ,uCAAuC,EAC/DM,IAAU,WACZ,MAAMC,EAAO,QAAQ,CAAE,MAAO,WAAY,QAAS,GAAM,CAAC,EAC1D,MAAMP,EAAK,aAAa,uCAAuC,EAAE,WAAW,aAAa,EAAE,QAAQ,CACjG,MAAO,UACP,QAAS,GACX,CAAC,GAED,MAAMA,EAAK,aAAa,uCAAuC,EAAE,WAAW,aAAa,EAAE,QAAQ,CACjG,MAAO,SACP,QAAS,GACX,CAAC,CAEL,EACA,oBAAqB,SAAY,CAC/B,MAAMC,EAAK,KAAK,UAAU,SAAU,CAAE,KAAM,0BAA2B,CAAC,EAAE,MAAM,CAClF,EACA,uBAAwB,SAAY,CAClC,MAAMA,EAAK,KAAK,UAAU,SAAU,CAAE,KAAM,cAAe,CAAC,EAAE,QAAQ,CAAE,MAAO,SAAU,CAAC,CAC5F,EACA,mBAAoB,SAAY,CAC9B,MAAMA,EAAK,KAAK,UAAU,SAAU,CAAE,KAAM,aAAc,CAAC,EAAE,MAAM,CACrE,EACA,sBAAuB,SAAY,CACjC,MAAMA,EAAK,KAAK,UAAU,QAAS,CAAE,KAAM,oBAAqB,CAAC,EAAE,MAAM,CAC3E,EACA,oBAAqB,SAAY,CAC/B,MAAMA,EAAK,KAAK,UAAU,QAAS,CAAE,KAAM,iBAAkB,CAAC,EAAE,MAAM,CACxE,EACA,KAAMD,EAAK,QAAQ,mBAAmB,CACxC,EACA,OAAOC,CACT,EC9DO,IAAMO,EAAwB,CAAC,CAAE,KAAAC,CAAK,KACpC,CACL,WAAY,SACHA,EAAK,gBAAgB,IACnB,CAAC,CAAC,OAAO,OAAO,MACxB,EAEH,mBAAoB,IACXA,EAAK,SAAS,IACZ,OAAO,OAAO,SAAS,KAC/B,EAEH,YAAa,SACJA,EAAK,gBAAgB,IACnB,OAAO,OAAO,SAAW,SACjC,EAEH,UAAW,SACFA,EAAK,gBAAgB,IACnB,OAAO,OAAO,SAAW,OACjC,EAEH,aAAc,SACLA,EAAK,gBAAgB,IACnB,OAAO,OAAO,SAAW,UACjC,EAEH,kBAAmB,IACVA,EAAK,SAAS,IACZ,OAAO,OAAO,IACtB,CAEL,GCjCF,OAAS,UAAAC,MAAc,mBAIhB,IAAMC,EAAyB,CAAC,CAAE,KAAAC,CAAK,KACrC,CACL,cAAe,MAAOC,GAAkB,CAGtC,IAAMC,EAAW,MAAMD,EAAI,QAAQ,EAAE,eAAe,GAAG,eAAe,GAAG,SAAS,EAClFH,EAAOI,GAAU,OAAO,CAAC,EAAE,KAAK,GAAG,EACnCJ,EAAOI,GAAU,QAAQ,EAAE,qBAAqB,CAAC,EAAE,UAAU,WAAW,CAC1E,EACA,cAAgBC,GACPH,EAAK,gBACV,IACS,CAAC,OAAO,OAAO,KAExB,KACA,CAAE,QAASG,GAAM,OAAQ,CAC3B,EAEF,aAAc,SACLH,EAAK,gBAAgB,IACnB,CAAC,CAAC,OAAO,OAAO,IACxB,EAEH,oBAAqB,SACZA,EAAK,gBAAgB,IACnB,CAAC,CAAC,OAAO,OAAO,SAAS,KACjC,EAEH,mBAAoB,SACXA,EAAK,gBAAgB,IACnB,CAAC,OAAO,OAAO,SAAS,WAChC,CAEL,GCpCK,IAAMI,EAAiCC,GAAqC,CACjF,GAAM,CAAE,KAAAC,CAAK,EAAID,EASjB,MARa,CACX,eAAgB,CAACE,EAAW,yBACnBD,EAAK,gBAAgBC,EAAU,CAAE,MAAO,UAAW,CAAC,EAE7D,eAAgB,IACPD,EAAK,QAAQ,sBAAsB,EAAE,UAAU,UAAU,CAEpE,CAEF,ECXO,IAAME,EAAkCC,GAAqC,CAClF,GAAM,CAAE,KAAAC,CAAK,EAAID,EAEXE,EAAY,iCAqBlB,MApBa,CACX,eAAgB,IAAMD,EAAK,gBAAgBC,EAAW,CAAE,MAAO,UAAW,CAAC,EAC3E,iBAAkB,IAAMD,EAAK,gBAAgBC,EAAW,CAAE,MAAO,UAAW,CAAC,EAC7E,WAAY,IACVD,EACG,QAAQC,CAAS,EACjB,aAAa,eAAe,EAC5B,KAAKC,GAAOA,IAAQ,MAAM,EAC/B,OAAQ,IAAMF,EAAK,QAAQC,CAAS,EAAE,MAAM,EAE5C,eAAgB,IACPD,EAAK,UAAU,OAAQ,CAAE,KAAM,sBAAuB,CAAC,EAEhE,uBAAwB,IACfA,EAAK,UAAU,OAAQ,CAAE,KAAM,iBAAkB,CAAC,EAE3D,gBAAiB,IACRA,EAAK,UAAU,SAAU,CAAE,KAAM,YAAa,CAAC,CAE1D,CAEF,EC3BA,OAAS,UAAAG,MAAc,mBAKhB,IAAMC,EAAiDC,GAAqC,CACjG,GAAM,CAAE,KAAAC,CAAK,EAAID,EAEXE,EAAO,CACX,GAAGC,EAAOH,CAAQ,EAClB,KAAM,MAAOI,EAAe,eAC1B,MAAMH,EAAK,aAAaG,CAAY,EAC7BF,EAAK,eAAe,GAE7B,eAAgB,IACPD,EAAK,gBAAgB,gCAAiC,CAAE,MAAO,UAAW,CAAC,EAEpF,6BAA8B,IACrBI,EAAOJ,EAAK,UAAU,2BAA2B,CAAC,EAAE,YAAY,EAEzE,sBAAuB,IACdI,EAAOJ,EAAK,UAAU,mBAAmB,CAAC,EAAE,YAAY,EAEjE,cAAe,IACNA,EAAK,QAAQ,iCAAiC,EAAE,MAAM,EAE/D,gCAAiC,IACxBA,EAAK,gBAAgB,mDAAoD,CAAE,MAAO,UAAW,CAAC,CAEzG,EAEA,OAAOC,CACT,EC7BO,IAAMI,EAA+BC,GAAqC,CAC/E,GAAM,CAAE,KAAAC,CAAK,EAAID,EAQjB,MAPa,CACX,GAAGE,EAAOF,CAAQ,EAClB,eAAgB,CAACG,EAAW,yBACnBF,EAAK,gBAAgBE,EAAU,CAAE,MAAO,UAAW,CAAC,EAE7D,KAAMF,EAAK,QAAQ,sBAAsB,CAC3C,CAEF,ECRO,IAAMG,EAAgCC,GAAqC,CAChF,GAAM,CAAE,KAAAC,CAAK,EAAID,EAEXE,EAAW,CACf,OAASC,GAAqBF,EAAK,QAAQ,yBAAyBE,CAAQ,mCAAmC,EAC/G,UAAYA,GAAqBF,EAAK,QAAQ,yBAAyBE,CAAQ,sBAAsB,EACrG,MAAQA,GAAqBF,EAAK,QAAQ,yBAAyBE,CAAQ,YAAY,EACvF,OAASA,GAAqBF,EAAK,QAAQ,yBAAyBE,CAAQ,6BAA6B,CAC3G,EAEMC,EAAsB,MAAOD,EAAkBE,IAAyC,CAC5F,eAAeC,EAAiBC,EAAkBC,EAAmBC,EAAeC,EAAU,IAAM,CAClG,OAAOT,EACJ,gBACC,CAAC,CAAE,IAAAU,EAAK,KAAAC,EAAM,IAAAC,CAAI,IACA,SAAS,cAAcF,CAAG,GAC1B,aAAaC,CAAI,IAAMC,EAEzC,CAAE,IAAKN,EAAU,KAAMC,EAAW,IAAKC,CAAM,EAC7C,CAAE,QAAAC,CAAQ,CACZ,EACC,KAAK,IACG,EACR,EACA,MAAM,IACE,EACR,CACL,CAEA,IAAMI,EAAa,MAAMR,EACvB,yBAAyBH,CAAQ,uBACjC,eACA,OACA,GACF,EAEIW,GAAcT,IAAW,WAC3B,MAAMH,EAAS,OAAOC,CAAQ,EAAE,MAAM,EAGpC,CAACW,GAAcT,IAAW,YAC5B,MAAMH,EAAS,OAAOC,CAAQ,EAAE,MAAM,CAE1C,EAiDA,MA/Ca,CACX,GAAGY,EAAOf,CAAQ,EAClB,eAAgB,CAACO,EAAW,0BACnBN,EAAK,gBAAgBM,EAAU,CAAE,MAAO,UAAW,CAAC,EAE7D,iBAAkB,SAAY,CAC5B,MAAMN,EAAK,UAAU,cAAc,EAAE,MAAM,CAC7C,EACA,eAAgB,MAAO,CAAE,SAAAE,CAAS,IACzBD,EAAS,MAAMC,CAAQ,EAAE,UAAU,QAAQ,EAAE,QAAQ,CAAE,MAAO,SAAU,CAAC,EAElF,kBAAmB,MAAO,CAAE,SAAAA,CAAS,IAC5BD,EAAS,MAAMC,CAAQ,EAAE,UAAU,YAAY,EAAE,QAAQ,CAAE,MAAO,SAAU,CAAC,EAEtF,eAAgB,CAAC,CAAE,SAAAA,CAAS,IACnBD,EAAS,OAAOC,CAAQ,EAAE,UAAU,SAAU,CACnD,KAAM,uBACR,CAAC,EAEH,cAAe,MAAO,CACpB,SAAAA,EACA,aAAAa,EACA,OAAAX,CACF,IAIM,CACJ,IAAMY,EACJD,IAAiB,GACb,sBACAA,IAAiB,GACf,aACA,iDAEJX,GACF,MAAMD,EAAoBD,EAAUE,CAAM,EAG5C,MAAMH,EACH,OAAOC,CAAQ,EACf,UAAU,SAAU,CACnB,KAAMc,CACR,CAAC,EACA,MAAM,CACX,CACF,CAEF,EClGA,OAAS,UAAAC,MAAc,mBAKhB,IAAMC,EAAwCC,GAAqC,CACxF,GAAM,CAAE,KAAAC,CAAK,EAAID,EAgCjB,MA9Ba,CACX,GAAGE,EAAOF,CAAQ,EAClB,sCAAuC,MAAOG,GAAsD,CAClG,IAAMC,EAA2BH,EAAK,UAAU,SAAU,CAAE,KAAM,WAAY,CAAC,EAE/E,MAAMI,EAAOD,CAAwB,EAAE,YAAY,EAEnD,MAAMH,EAAK,QAAQ,kBAAkB,EAAE,KAAKE,EAAiB,IAAI,EAC7DA,EAAiB,MACnB,MAAMF,EAAK,QAAQ,kBAAkB,EAAE,KAAKE,EAAiB,IAAI,EAGnE,MAAMC,EAAyB,MAAM,CACvC,EACA,yBAA0B,MAAO,CAC/B,YAAAE,EACA,gBAAAC,CACF,IAGM,CACJ,MAAMN,EAAK,QAAQ,yBAAyB,EAAE,KAAKK,CAAW,EAC9D,MAAML,EAAK,QAAQ,6BAA6B,EAAE,KAAKM,CAAe,EAEtE,IAAMC,EAAsBP,EAAK,UAAU,SAAU,CAAE,KAAM,iBAAkB,CAAC,EAChF,MAAMI,EAAOG,CAAmB,EAAE,YAAY,EAC9C,MAAMA,EAAoB,MAAM,CAClC,CACF,CAGF,ECvCA,OAAS,UAAAC,MAAc,mBAKhB,IAAMC,EAAmCC,GAAqC,CACnF,GAAM,CAAE,KAAAC,CAAK,EAAID,EACXE,EAAO,CACX,GAAGC,EAAOH,CAAQ,EAClB,KAAM,MAAOI,GAA2F,CACtG,IAAMC,EAAS,MAAMJ,EAAK,aAAa,WAAYG,CAAI,EAEvD,OAAI,OAAOA,GAAM,iBAAqB,IACpC,MAAMF,EAAK,eAAeE,EAAK,gBAAgB,EAE/C,MAAMF,EAAK,eAAe,EAErBG,CACT,EACA,eAAgB,CAACC,EAAW,oBACnBL,EAAK,gBAAgBK,EAAU,CAAE,MAAO,UAAW,CAAC,EAE7D,aAAeC,GACNN,EAAK,gBAAgB,wCAAyC,CACnE,MAAOM,IAAU,SAAW,WAAa,UAC3C,CAAC,EAEH,cAAgBC,GACPN,EAAK,mBAAmB,EAAE,KAAKM,CAAG,EAE3C,mBAAoB,MAAOA,GAAgB,CACzC,IAAMC,EAAYP,EAAK,iBAAiB,EACxC,MAAMQ,EAAOD,CAAS,EAAE,YAAY,EACpC,MAAMA,EAAU,KAAKD,EAAK,CAAE,MAAO,EAAK,CAAC,CAC3C,EACA,yBAA0B,IACjBP,EAAK,UAAU,OAAQ,CAAE,KAAM,aAAc,CAAC,EAEvD,mBAAoB,IACXA,EAAK,UAAU,OAAQ,CAAE,KAAM,aAAc,CAAC,EAEvD,sBAAuB,IACdA,EAAK,UAAU,OAAQ,CAAE,KAAM,aAAc,CAAC,EAEvD,kBAAmB,IACVA,EAAK,UAAU,OAAQ,CAAE,KAAM,kBAAmB,CAAC,EAE5D,cAAe,IACNA,EAAK,UAAU,OAAQ,CAAE,KAAM,UAAW,CAAC,EAEpD,iBAAkB,IACTA,EAAK,UAAU,SAAU,CAAE,KAAM,uCAAwC,CAAC,EAEnF,wBAAyB,IAChBA,EAAK,UAAU,OAAQ,CAAE,KAAM,qBAAsB,CAAC,EAE/D,6BAA8B,IACrBA,EAAK,UAAU,SAAU,CAAE,KAAM,gBAAiB,CAAC,EAE5D,6BAA8B,IACrBA,EAAK,UAAU,SAAU,CAAE,KAAM,gBAAiB,CAAC,EAE5D,gBAAkBU,GACTV,EAAK,UAAU,SAAU,CAAE,KAAM,IAAI,OAAO,iBAAiBU,CAAQ,GAAI,IAAI,CAAE,CAAC,EAEzF,kCAAmC,MAAO,CACxC,MAAAC,EACA,SAAAC,EACA,eAAAC,EAAiB,EACnB,IAIM,CACJ,IAAMC,EAAkBb,EAAK,mBAAmB,EAChD,MAAMQ,EAAOK,CAAe,EAAE,YAAY,EAE1C,MAAMA,EAAgB,KAAKH,CAAK,EAChC,MAAMV,EAAK,mBAAmBW,CAAQ,EACtC,MAAMX,EAAK,SAAS,EAEhBY,GACF,MAAMZ,EAAK,eAAe,CAE9B,CACF,EACA,OAAOA,CACT,EC1EO,IAAMc,EAAmCC,GAAqC,CACnF,GAAM,CAAE,KAAAC,CAAK,EAAID,EAEXE,EAAO,CACX,GAAGC,EAAOH,CAAQ,EAClB,KAAM,MAAOI,IACX,MAAMH,EAAK,aAAa,WAAY,CAAE,aAAcG,GAAM,YAAa,CAAC,EAEpE,OAAOA,GAAM,iBAAqB,IAC7BF,EAAK,eAAeE,EAAK,gBAAgB,EAE3CF,EAAK,eAAe,GAE7B,eAAgB,CAACG,EAAW,oBACnBJ,EAAK,gBAAgBI,EAAU,CAAE,MAAO,UAAW,CAAC,EAE7D,aAAeC,GACNL,EAAK,gBAAgB,wCAAyC,CACnE,MAAOK,IAAU,SAAW,WAAa,UAC3C,CAAC,EAEH,gBAAkBC,GACTN,EAAK,UAAU,SAAU,CAAE,KAAM,IAAI,OAAO,iBAAiBM,CAAQ,GAAI,IAAI,CAAE,CAAC,EAEzF,OAAQ,MAAOH,GAA2B,CACpCA,EAAK,WACP,MAAMF,EAAK,kBAAkB,EAAE,KAAKE,EAAK,SAAS,EAGhDA,EAAK,UACP,MAAMF,EAAK,iBAAiB,EAAE,KAAKE,EAAK,QAAQ,EAG9CA,EAAK,OACP,MAAMF,EAAK,qBAAqB,EAAE,KAAKE,EAAK,KAAK,EAG/CA,EAAK,UACP,MAAMF,EAAK,iBAAiB,EAAE,KAAKE,EAAK,QAAQ,EAG9CA,EAAK,aACP,MAAMF,EAAK,oBAAoB,EAAE,KAAKE,EAAK,WAAW,EAGpDA,EAAK,UACP,MAAMF,EAAK,iBAAiB,EAAE,KAAKE,EAAK,QAAQ,EAG9CA,EAAK,eACP,MAAMF,EAAK,iBAAiB,EAAE,MAAM,EAGtC,MAAMA,EAAK,SAAS,CACtB,EACA,2BAA4B,MAAOE,GAAuD,CACxF,MAAMF,EAAK,OAAO,CAAE,MAAOE,EAAK,MAAO,SAAUA,EAAK,QAAS,CAAC,CAClE,EACA,+BAAgC,SAAY,CAC1C,MAAMH,EAAK,WAAW,QAAQ,EAC9B,MAAMA,EAAK,UAAU,UAAW,CAAE,KAAM,oBAAqB,CAAC,EAAE,QAAQ,CAC1E,CACF,EAEA,OAAOC,CACT,EC3EO,IAAMM,EAAuCC,GAAqC,CACvF,GAAM,CAAE,KAAAC,CAAK,EAAID,EACXE,EAAO,CACX,GAAGC,EAAOH,CAAQ,EAClB,eAAgB,CAACI,EAAW,iCACnBH,EAAK,gBAAgBG,EAAU,CAAE,MAAO,UAAW,CAAC,EAE7D,iBAAkB,IACTF,EAAK,KAAK,QAAQ,gBAAgB,EAAE,QAAQ,CAAE,MAAO,UAAW,CAAC,EAE1E,YAAa,IACJA,EAAK,KAAK,QAAQ,iBAAiB,EAAE,MAAM,EAEpD,KAAMD,EAAK,QAAQ,8BAA8B,CACnD,EACA,OAAOC,CACT,EChBO,IAAMG,EAA+B,CAAC,CAAE,KAAAC,CAAK,KAC3C,CACL,MAAO,SAAYC,EAAuB,CAAE,KAAAD,CAAK,CAAC,CACpD,GCNF,OAAS,UAAAE,MAAc,mBAIvB,IAAMC,EAAW,oBAEJC,EAA8BC,GAAqC,CAC9E,GAAM,CAAE,KAAAC,CAAK,EAAID,EAEXE,EAAO,CACX,KAAM,MAAOC,IACX,MAAMF,EAAK,aAAa,eAAgBE,CAAI,EACrCD,EAAK,eAAe,GAE7B,eAAgB,CAACE,EAAWN,IACnBG,EAAK,gBAAgBG,EAAU,CAAE,MAAO,UAAW,CAAC,EAE7D,YAAa,MAAOA,EAAWN,IACtB,MAAMD,EAAOI,EAAK,QAAQG,CAAQ,EAAE,UAAU,KAAK,CAAC,EAAE,YAAY,CAE7E,EAEA,OAAOF,CACT,ECvBA,OAAS,UAAAG,MAAc,mBAIhB,IAAMC,EAA8BC,GAAqC,CAC9E,GAAM,CAAE,KAAAC,CAAK,EAAID,EAkCjB,MAhCa,CACX,eAAgB,IACPC,EAAK,gBAAgB,wBAAyB,CAAE,MAAO,UAAW,CAAC,EAE5E,cAAe,IACNA,EAAK,QAAQ,uBAAuB,EAAE,MAAM,EAErD,eAAgB,IACPA,EAAK,gBAAgB,4BAA6B,CAAE,MAAO,SAAU,CAAC,EAE/E,qBAAsB,IACbA,EAAK,gBAAgB,4BAA6B,CAAE,MAAO,UAAW,CAAC,EAEhF,uBAAwB,MAAOC,GAAwD,EACjF,OAAOA,GAAc,UAAYA,aAAqB,UACxDA,EAAY,CAACA,CAAS,GAExB,QAAWC,KAAYD,EACrB,MAAMJ,EAAOG,EAAK,UAAU,WAAY,CAAE,KAAME,CAAS,CAAC,CAAC,EAAE,YAAY,CAE7E,EACA,eAAgB,IACPF,EAAK,UAAU,WAAY,CAAE,KAAM,YAAa,CAAC,EAAE,MAAM,EAElE,qBAAsB,IACbA,EAAK,UAAU,WAAY,CAAE,KAAM,iBAAkB,CAAC,EAAE,MAAM,EAEvE,cAAgBG,GACPH,EAAK,UAAUG,CAAY,EAAE,MAAM,CAE9C,CAGF,ECnCO,IAAMC,EAAwCC,GAAqC,CACxF,GAAM,CAAE,KAAAC,CAAK,EAAID,EACXE,EAAO,CACX,GAAGC,EAAOH,CAAQ,EAClB,KAAM,MAAOI,IACX,MAAMH,EAAK,aAAa,QAASG,CAAI,EAC9BF,EAAK,eAAe,GAE7B,oBAAqB,SAAY,CAC/B,MAAMD,EAAK,UAAU,WAAW,EAAE,MAAM,CAC1C,EACA,mBAAoB,SAAY,CAC9B,MAAMA,EAAK,UAAU,UAAU,EAAE,MAAM,CACzC,EACA,mBAAoB,SAAY,CAC9B,MAAMA,EAAK,UAAU,WAAW,EAAE,MAAM,CAC1C,EACA,eAAgB,IACPA,EAAK,gBAAgB,uBAAwB,CAAE,MAAO,UAAW,CAAC,EAE3E,iBAAkB,IACTA,EAAK,UAAU,eAAe,EAAE,MAAM,EAE/C,qBAAsB,IACbA,EAAK,UAAU,iBAAiB,EAAE,MAAM,EAEjD,oBAAqB,IACZA,EAAK,UAAU,kBAAkB,EAAE,MAAM,EAElD,iBAAkB,IACTA,EAAK,UAAU,eAAe,EAAE,MAAM,EAE/C,mBAAoB,CAACI,EAAmBC,IAC/BL,EAAK,gBAAgB,8BAA8BI,CAAO,mBAAoB,CACnF,MAAOC,EAAS,UAAY,UAC9B,CAAC,EAEH,yBAA2BD,GAClBH,EAAK,mBAAmBG,EAAS,EAAI,EAE9C,yBAA2BA,GAClBH,EAAK,mBAAmBG,EAAS,EAAK,EAE/C,aAAeE,GACNL,EAAK,iBAAiB,EAAE,KAAKK,CAAK,EAE3C,cAAgBA,GACPL,EAAK,kBAAkB,EAAE,KAAKK,CAAK,EAE5C,aAAeA,GACNL,EAAK,iBAAiB,EAAE,KAAKK,CAAK,EAE3C,gBAAkBA,GACTL,EAAK,oBAAoB,EAAE,KAAKK,CAAK,EAE9C,qBAAsB,IACbN,EAAK,UAAU,oBAAoB,EAAE,MAAM,EAEpD,oBAAqB,IACZA,EAAK,UAAU,mBAAmB,EAAE,MAAM,EAEnD,iBAAmBM,GACVN,EAAK,WAAW,gBAAgB,EAAE,KAAKM,CAAK,EAErD,wBAA0BC,GACjBP,EAAK,gBAAgB,6CAA8C,CACxE,MAAOO,IAAU,SAAW,WAAa,UAC3C,CAAC,CAEL,EACA,OAAON,CACT,ECzEO,IAAMO,EAA6CC,GAAqC,CAC7F,GAAM,CAAE,KAAAC,CAAK,EAAID,EAsBjB,MArBa,CACX,GAAGE,EAAOF,CAAQ,EAClB,eAAgB,CAACG,EAAW,8BACnBF,EAAK,gBAAgBE,EAAU,CAAE,MAAO,UAAW,CAAC,EAE7D,cAAe,CAACA,EAAW,8BAClBF,EAAK,gBAAgBE,EAAU,CAAE,MAAO,UAAW,CAAC,EAE7D,yBAA0B,IACjBF,EAAK,WAAW,aAAa,EAAE,MAAM,EAE9C,wBAAyB,IAChBA,EAAK,UAAU,OAAQ,CAAE,KAAM,qBAAsB,CAAC,EAE/D,6BAA8B,IACrBA,EAAK,UAAU,SAAU,CAAE,KAAM,gBAAiB,CAAC,EAE5D,6BAA8B,IACrBA,EAAK,UAAU,SAAU,CAAE,KAAM,gBAAiB,CAAC,CAE9D,CAEF,ECpBO,IAAMG,EAAqCC,GAAqC,CACrF,GAAM,CAAE,KAAAC,CAAK,EAAID,EAEXE,EAAO,CACX,GAAGC,EAAOH,CAAQ,EAClB,KAAM,MAAOI,IACX,MAAMH,EAAK,aAAa,YAAa,CAAE,aAAcG,GAAM,YAAa,CAAC,EAErE,OAAOA,GAAM,iBAAqB,IAC7BF,EAAK,eAAeE,EAAK,gBAAgB,EAE3CF,EAAK,eAAe,GAE7B,eAAgB,CAACG,EAAW,sBACnBJ,EAAK,gBAAgBI,EAAU,CAAE,MAAO,UAAW,CAAC,EAE7D,aAAc,MAAOD,GAA6B,CAChD,MAAMF,EAAK,qBAAqB,EAAE,KAAKE,EAAK,KAAK,EAEjD,MAAMF,EAAK,qBAAqB,CAClC,EACA,qBAAsB,IACbD,EAAK,UAAU,SAAU,CAAE,KAAM,oBAAqB,MAAO,EAAK,CAAC,EAAE,MAAM,CAEtF,EAEA,OAAOC,CACT,ECXO,IAAMI,EAAoB,CAAC,CAChC,KAAAC,EACA,gBAAAC,EAAkB,GAClB,QAAAC,CACF,IAIM,CACJ,IAAMC,EAAMC,EAAoB,CAAE,KAAAJ,EAAM,gBAAAC,CAAgB,EAAG,CAAE,QAAAC,CAAQ,CAAC,EAChEG,EAAW,CAAE,KAAMF,CAAI,EAE7B,MAAO,CACL,KAAMA,EACN,MAAOG,EAAsBD,CAAQ,EACrC,SAAUE,EAAyBF,CAAQ,EAC3C,OAAQG,EAAuBH,CAAQ,EACvC,cAAeI,EAA8BJ,CAAQ,EACrD,eAAgBK,EAA+BL,CAAQ,EACvD,qBAAsBM,EAA8CN,CAAQ,EAC5E,aAAcO,EAA6BP,CAAQ,EACnD,YAAaQ,EAAqCR,CAAQ,EAC1D,OAAQS,EAAgCT,CAAQ,EAChD,OAAQU,EAAgCV,CAAQ,EAChD,aAAcW,EAA6BX,CAAQ,EACnD,WAAYY,EAA2BZ,CAAQ,EAC/C,WAAYa,EAA2Bb,CAAQ,EAC/C,YAAac,EAAqCd,CAAQ,EAC1D,iBAAkBe,EAA0Cf,CAAQ,EACpE,SAAUgB,EAAkChB,CAAQ,EACpD,QAASiB,EAAiCjB,CAAQ,EAClD,oBAAqBkB,EAAoClB,CAAQ,EACjE,YAAamB,EAA4BnB,CAAQ,CACnD,CACF","names":["common","page","self","val","code","opts","name","awaitAttempt","awaitPrepare","awaitRequests","response","originalInput","createAPIKeysComponentPageObject","testArgs","page","expirationOptions","common","value","createAppPageObject","testArgs","app","page","useTestingToken","appPage","setupClerkTestingToken","path","opts","url","relativePath","array","map","acc","cookie","createCheckoutPageObject","testArgs","page","self","common","selector","card","frame","state","iframe","createClerkPageObject","page","expect","createExpectPageObject","page","res","redirect","args","createImpersonationPageObject","testArgs","page","selector","createKeylessPopoverPageObject","testArgs","page","elementId","val","expect","createOrganizationSwitcherComponentPageObject","testArgs","page","self","common","relativePath","expect","createPlanDetailsPageObject","testArgs","page","common","selector","createPricingTablePageObject","testArgs","page","locators","planSlug","ensurePricingPeriod","period","waitForAttribute","selector","attribute","value","timeout","sel","attr","val","isAnnually","common","shouldSwitch","targetButtonName","expect","createSessionTaskComponentPageObject","testArgs","page","common","fakeOrganization","createOrganizationButton","expect","newPassword","confirmPassword","resetPasswordButton","expect","createSignInComponentPageObject","testArgs","page","self","common","opts","navRes","selector","state","val","passField","expect","provider","email","password","waitForSession","identifierField","createSignUpComponentPageObject","testArgs","page","self","common","opts","selector","state","provider","createSubscriptionDetailsPageObject","testArgs","page","self","common","selector","createTestingTokenPageObject","page","setupClerkTestingToken","expect","SELECTOR","createUserAvatarPageObject","testArgs","page","self","opts","selector","expect","createUserButtonPageObject","testArgs","page","menuItems","menuItem","emailAddress","createUserProfileComponentPageObject","testArgs","page","self","common","opts","section","opened","value","state","createUserVerificationComponentPageObject","testArgs","page","common","selector","createWaitlistComponentPageObject","testArgs","page","self","common","opts","selector","createPageObjects","page","useTestingToken","baseURL","app","createAppPageObject","testArgs","createClerkPageObject","createCheckoutPageObject","createExpectPageObject","createImpersonationPageObject","createKeylessPopoverPageObject","createOrganizationSwitcherComponentPageObject","createPricingTablePageObject","createSessionTaskComponentPageObject","createSignInComponentPageObject","createSignUpComponentPageObject","createTestingTokenPageObject","createUserAvatarPageObject","createUserButtonPageObject","createUserProfileComponentPageObject","createUserVerificationComponentPageObject","createWaitlistComponentPageObject","createAPIKeysComponentPageObject","createSubscriptionDetailsPageObject","createPlanDetailsPageObject"]}
1
+ {"version":3,"sources":["../../../src/playwright/unstable/page-objects/common.ts","../../../src/playwright/unstable/page-objects/apiKeys.ts","../../../src/playwright/unstable/page-objects/app.ts","../../../src/playwright/unstable/page-objects/checkout.ts","../../../src/playwright/unstable/page-objects/clerk.ts","../../../src/playwright/unstable/page-objects/expect.ts","../../../src/playwright/unstable/page-objects/impersonation.ts","../../../src/playwright/unstable/page-objects/keylessPopover.ts","../../../src/playwright/unstable/page-objects/organizationSwitcher.ts","../../../src/playwright/unstable/page-objects/planDetails.ts","../../../src/playwright/unstable/page-objects/pricingTable.ts","../../../src/playwright/unstable/page-objects/sessionTask.ts","../../../src/playwright/unstable/page-objects/signIn.ts","../../../src/playwright/unstable/page-objects/signUp.ts","../../../src/playwright/unstable/page-objects/subscriptionDetails.ts","../../../src/playwright/unstable/page-objects/testingToken.ts","../../../src/playwright/unstable/page-objects/userAvatar.ts","../../../src/playwright/unstable/page-objects/userButton.ts","../../../src/playwright/unstable/page-objects/userProfile.ts","../../../src/playwright/unstable/page-objects/userVerification.ts","../../../src/playwright/unstable/page-objects/waitlist.ts","../../../src/playwright/unstable/page-objects/index.ts"],"sourcesContent":["import type { EnhancedPage } from './app';\n\ntype EnterOtpCodeOptions = {\n name?: string;\n awaitRequests?: boolean;\n awaitPrepare?: boolean;\n awaitAttempt?: boolean;\n};\n\nexport const common = ({ page }: { page: EnhancedPage }) => {\n const self = {\n continue: () => {\n return page.getByRole('button', { name: 'Continue', exact: true }).click();\n },\n setEmailAddress: (val: string) => {\n return self.getEmailAddressInput().fill(val);\n },\n setPassword: (val: string) => {\n return self.getPasswordInput().fill(val);\n },\n setPasswordConfirmation: (val: string) => {\n return page.locator('input[name=confirmPassword]').fill(val);\n },\n enterOtpCode: async (code: string, opts?: EnterOtpCodeOptions) => {\n const {\n name = 'Enter verification code',\n awaitAttempt = true,\n awaitPrepare = true,\n awaitRequests = true,\n } = opts ?? {};\n\n if (awaitRequests && awaitPrepare) {\n const prepareVerificationPromise = page.waitForResponse(\n response =>\n response.request().method() === 'POST' &&\n (response.url().includes('prepare_verification') ||\n response.url().includes('prepare_first_factor') ||\n response.url().includes('prepare_second_factor')),\n );\n await prepareVerificationPromise;\n }\n\n // Handle the case for both OTP input versions\n const originalInput = page.getByRole('textbox', { name: 'Enter verification code. Digit 1' });\n if (await originalInput.isVisible()) {\n console.warn('Using the original OTP input');\n await originalInput.click();\n await page.keyboard.type(code, { delay: 100 });\n } else {\n await page.getByLabel(name).fill(code);\n }\n\n if (awaitRequests && awaitAttempt) {\n const attemptVerificationPromise = page.waitForResponse(\n response =>\n response.request().method() === 'POST' &&\n (response.url().includes('attempt_verification') ||\n response.url().includes('attempt_first_factor') ||\n response.url().includes('attempt_second_factor')),\n );\n await attemptVerificationPromise;\n }\n },\n enterTestOtpCode: async (opts?: EnterOtpCodeOptions) => {\n return self.enterOtpCode('424242', opts);\n },\n // @deprecated Use .enterTestOtpCode({ name: '...' }) instead\n fillTestOtpCode: async (name: string, opts?: Omit<EnterOtpCodeOptions, 'name'>) => {\n return self.enterOtpCode('424242', { name, ...opts });\n },\n getIdentifierInput: () => {\n return page.locator('input[name=identifier]');\n },\n getEmailAddressInput: () => {\n return page.locator('input[name=emailAddress]');\n },\n getPhoneNumberInput: () => {\n return page.locator('input[name=phoneNumber]');\n },\n getUsernameInput: () => {\n return page.locator('input[name=username]');\n },\n getPasswordInput: () => {\n return page.locator('input[name=password]');\n },\n getLegalAccepted: () => {\n return page.locator('input[name=legalAccepted]');\n },\n getFirstNameInput: () => {\n return page.locator('input[name=firstName]');\n },\n getLastNameInput: () => {\n return page.locator('input[name=lastName]');\n },\n waitForSession: async () => {\n return page.waitForFunction(() => {\n return !!window.Clerk?.session;\n });\n },\n };\n\n return self;\n};\n","import type { EnhancedPage } from './app';\nimport { common } from './common';\n\nexport const createAPIKeysComponentPageObject = (testArgs: { page: EnhancedPage }) => {\n const { page } = testArgs;\n\n const expirationOptions = {\n never: 'Never',\n '1d': '1 Day',\n '7d': '7 Days',\n '30d': '30 Days',\n '60d': '60 Days',\n '90d': '90 Days',\n '180d': '180 Days',\n '1y': '1 Year',\n } as const;\n\n const self = {\n ...common(testArgs),\n waitForMounted: () => {\n return page.waitForSelector('.cl-apiKeys-root', { state: 'attached' });\n },\n clickAddButton: () => {\n return page.getByText(/Add new key/i).click();\n },\n waitForFormOpened: () => {\n return page.waitForSelector('.cl-apiKeysCreateForm', { state: 'attached' });\n },\n waitForFormClosed: () => {\n return page.waitForSelector('.cl-apiKeysCreateForm', { state: 'detached' });\n },\n waitForRevokeModalOpened: () => {\n return page.waitForSelector('.cl-apiKeysRevokeModal', { state: 'attached' });\n },\n waitForRevokeModalClosed: () => {\n return page.waitForSelector('.cl-apiKeysRevokeModal', { state: 'detached' });\n },\n waitForCopyModalOpened: () => {\n return page.waitForSelector('.cl-apiKeysCopyModal', { state: 'attached' });\n },\n waitForCopyModalClosed: () => {\n return page.waitForSelector('.cl-apiKeysCopyModal', { state: 'detached' });\n },\n clickCopyAndCloseButton: () => {\n return page.locator('.cl-apiKeysCopyModal .cl-apiKeysCopyModalSubmitButton').click();\n },\n typeName: (value: string) => {\n return page.getByLabel(/Secret key name/i).fill(value);\n },\n typeDescription: (value: string) => {\n return page.getByLabel(/Description/i).fill(value);\n },\n selectExpiration: async (value?: keyof typeof expirationOptions) => {\n await page.getByRole('button', { name: /Select date/i }).click();\n return page.getByText(expirationOptions[value ?? 'never'], { exact: true }).click({ force: true });\n },\n clickSaveButton: () => {\n return page.getByText(/Create key/i).click();\n },\n typeRevokeConfirmation: (value: string) => {\n return page.getByLabel(/Type \"Revoke\" to confirm/i).fill(value);\n },\n clickConfirmRevokeButton: () => {\n return page.getByText(/Revoke key/i).click();\n },\n };\n return self;\n};\n","import type { Page } from '@playwright/test';\n\nimport { setupClerkTestingToken } from '../../setupClerkTestingToken';\n\nexport type EnhancedPage = ReturnType<typeof createAppPageObject>;\nexport const createAppPageObject = (testArgs: { page: Page; useTestingToken?: boolean }, app: { baseURL?: string }) => {\n const { page, useTestingToken = true } = testArgs;\n const appPage = Object.create(page) as Page;\n const helpers = {\n goToAppHome: async () => {\n if (!app.baseURL) {\n throw new Error(\n 'Attempted to call method requiring baseURL, but baseURL was not provided to createPageObjects.',\n );\n }\n\n try {\n if (useTestingToken) {\n await setupClerkTestingToken({ page });\n }\n\n await page.goto(app.baseURL);\n } catch {\n // do not fail the test if interstitial is returned (401)\n }\n },\n goToRelative: async (\n path: string,\n opts: { waitUntil?: any; searchParams?: URLSearchParams; timeout?: number } = {},\n ) => {\n if (!app.baseURL) {\n throw new Error(\n 'Attempted to call method requiring baseURL, but baseURL was not provided to createPageObjects.',\n );\n }\n let url: URL;\n\n try {\n // When testing applications using real domains we want to manually navigate to the domain first\n // and not follow serverUrl (localhost) by default, as this is usually proxied\n if (page.url().includes('about:blank')) {\n url = new URL(path, app.baseURL);\n } else {\n url = new URL(path, page.url());\n }\n } catch {\n // However, in most tests we don't need to manually navigate to the domain\n // as the test is using a localhost app directly\n // This handles the case where the page is at about:blank\n // and instead it uses the serverUrl\n url = new URL(path, app.baseURL);\n }\n\n if (opts.searchParams) {\n url.search = opts.searchParams.toString();\n }\n\n if (useTestingToken) {\n await setupClerkTestingToken({ page });\n }\n\n return page.goto(url.toString(), { timeout: opts.timeout ?? 20000, waitUntil: opts.waitUntil });\n },\n waitForClerkJsLoaded: async () => {\n return page.waitForFunction(() => {\n return window.Clerk?.loaded;\n });\n },\n signOut: async () => {\n return page.waitForFunction(() => {\n return window.Clerk?.signOut({});\n });\n },\n waitForClerkComponentMounted: async () => {\n return page.waitForSelector('.cl-rootBox', { state: 'attached' });\n },\n waitForAppUrl: async (relativePath: string) => {\n if (!app.baseURL) {\n throw new Error(\n 'Attempted to call method requiring baseURL, but baseURL was not provided to createPageObjects.',\n );\n }\n return page.waitForURL(new URL(relativePath, app.baseURL).toString());\n },\n /**\n * Get the cookies for the URL the page is currently at.\n * Suffixed cookies can be accessed by using the wildcard character `*` at the end of the cookie name,\n * eg `get('__session')` and `get('__session_*')`.\n */\n cookies: async () => {\n const array = await page.context().cookies();\n const map = array.reduce((acc, cookie) => {\n // If a suffixed cookie is found, we usually don't care about the suffix itself\n // Instead, simply replace the suffix with _* so we can easily read it\n // TODO: deal with collisions if neede\n // TODO: might be too much magic here\n // Maybe extract this into a different helper?\n if (cookie.name.match(/^(__.*_)(.{8})$/)) {\n acc.set(cookie.name.replace(/^(__.*_)(.{8})$/, '$1*'), cookie);\n } else {\n acc.set(cookie.name, cookie);\n }\n return acc;\n }, new Map<string, (typeof array)[number]>());\n return Object.assign(map, { raw: () => array });\n },\n };\n return Object.assign(appPage, helpers);\n};\n","import type { EnhancedPage } from './app';\nimport { common } from './common';\n\nexport const createCheckoutPageObject = (testArgs: { page: EnhancedPage }) => {\n const { page } = testArgs;\n const self = {\n ...common(testArgs),\n waitForMounted: (selector = '.cl-checkout-root') => {\n return page.waitForSelector(selector, { state: 'attached', timeout: 20000 });\n },\n closeDrawer: () => {\n return page.locator('.cl-drawerClose').click();\n },\n fillTestCard: async () => {\n await self.fillCard({\n number: '4242424242424242',\n expiration: '1234',\n cvc: '123',\n country: 'United States',\n zip: '12345',\n });\n },\n fillCard: async (card: { number: string; expiration: string; cvc: string; country: string; zip: string }) => {\n await self.waitForStripeElements({ state: 'visible' });\n const frame = page.frameLocator('iframe[src*=\"elements-inner-payment\"]');\n await frame.getByLabel('Card number').fill(card.number);\n await frame.getByLabel('Expiration date').fill(card.expiration);\n await frame.getByLabel('Security code').fill(card.cvc);\n await frame.getByLabel('Country').selectOption(card.country);\n await frame.getByLabel('ZIP code').fill(card.zip);\n },\n waitForStripeElements: async ({ state = 'visible' }: { state?: 'visible' | 'hidden' } = {}) => {\n const iframe = page.locator('iframe[src*=\"elements-inner-payment\"]');\n if (state === 'visible') {\n await iframe.waitFor({ state: 'attached', timeout: 20000 });\n await page.frameLocator('iframe[src*=\"elements-inner-payment\"]').getByLabel('Card number').waitFor({\n state: 'visible',\n timeout: 20000,\n });\n } else {\n await page.frameLocator('iframe[src*=\"elements-inner-payment\"]').getByLabel('Card number').waitFor({\n state: 'hidden',\n timeout: 20000,\n });\n }\n },\n clickPayOrSubscribe: async () => {\n await self.root.getByRole('button', { name: /subscribe|pay\\s\\$|start/i }).click();\n },\n waitForSubscribeButton: async () => {\n await self.root.getByRole('button', { name: /^subscribe$/i }).waitFor({ state: 'visible' });\n },\n confirmAndContinue: async () => {\n await self.root.getByRole('button', { name: /^continue$/i }).click();\n },\n clickAddPaymentMethod: async () => {\n await self.root.getByRole('radio', { name: 'Add payment method' }).click();\n },\n clickPaymentMethods: async () => {\n await self.root.getByRole('radio', { name: 'Payment Methods' }).click();\n },\n root: page.locator('.cl-checkout-root'),\n };\n return self;\n};\n","import type { EnhancedPage } from './app';\n\nexport const createClerkPageObject = ({ page }: { page: EnhancedPage }) => {\n return {\n toBeLoaded: async () => {\n return page.waitForFunction(() => {\n return !!window.Clerk?.loaded;\n });\n },\n getClientSideActor: () => {\n return page.evaluate(() => {\n return window.Clerk?.session?.actor;\n });\n },\n toBeLoading: async () => {\n return page.waitForFunction(() => {\n return window.Clerk?.status === 'loading';\n });\n },\n toBeReady: async () => {\n return page.waitForFunction(() => {\n return window.Clerk?.status === 'ready';\n });\n },\n toBeDegraded: async () => {\n return page.waitForFunction(() => {\n return window.Clerk?.status === 'degraded';\n });\n },\n getClientSideUser: () => {\n return page.evaluate(() => {\n return window.Clerk?.user;\n });\n },\n };\n};\n","import type { Response } from '@playwright/test';\nimport { expect } from '@playwright/test';\n\nimport type { EnhancedPage } from './app';\n\nexport const createExpectPageObject = ({ page }: { page: EnhancedPage }) => {\n return {\n toBeHandshake: async (res: Response) => {\n // Travel the redirect chain until we find the handshake header\n // TODO: Loop through the redirects until we find a handshake header, or timeout trying\n const redirect = await res.request().redirectedFrom()?.redirectedFrom()?.response();\n expect(redirect?.status()).toBe(307);\n expect(redirect?.headers()['x-clerk-auth-status']).toContain('handshake');\n },\n toBeSignedOut: (args?: { timeOut: number }) => {\n return page.waitForFunction(\n () => {\n return !window.Clerk?.user;\n },\n null,\n { timeout: args?.timeOut },\n );\n },\n toBeSignedIn: async () => {\n return page.waitForFunction(() => {\n return !!window.Clerk?.user;\n });\n },\n toBeSignedInAsActor: async () => {\n return page.waitForFunction(() => {\n return !!window.Clerk?.session?.actor;\n });\n },\n toHaveResolvedTask: async () => {\n return page.waitForFunction(() => {\n return !window.Clerk?.session?.currentTask;\n });\n },\n };\n};\n","import type { EnhancedPage } from './app';\n\nexport const createImpersonationPageObject = (testArgs: { page: EnhancedPage }) => {\n const { page } = testArgs;\n const self = {\n waitForMounted: (selector = '.cl-impersonationFab') => {\n return page.waitForSelector(selector, { state: 'attached' });\n },\n getSignOutLink: () => {\n return page.locator('.cl-impersonationFab').getByText('Sign out');\n },\n };\n return self;\n};\n","import type { EnhancedPage } from './app';\n\nexport const createKeylessPopoverPageObject = (testArgs: { page: EnhancedPage }) => {\n const { page } = testArgs;\n // TODO: Is this the ID we really want ?\n const elementId = '#--clerk-keyless-prompt-button';\n const self = {\n waitForMounted: () => page.waitForSelector(elementId, { state: 'attached' }),\n waitForUnmounted: () => page.waitForSelector(elementId, { state: 'detached' }),\n isExpanded: () =>\n page\n .locator(elementId)\n .getAttribute('aria-expanded')\n .then(val => val === 'true'),\n toggle: () => page.locator(elementId).click(),\n\n promptsToClaim: () => {\n return page.getByRole('link', { name: /^claim application$/i });\n },\n promptToUseClaimedKeys: () => {\n return page.getByRole('link', { name: /^get api keys$/i });\n },\n promptToDismiss: () => {\n return page.getByRole('button', { name: /^dismiss$/i });\n },\n };\n return self;\n};\n","import { expect } from '@playwright/test';\n\nimport type { EnhancedPage } from './app';\nimport { common } from './common';\n\nexport const createOrganizationSwitcherComponentPageObject = (testArgs: { page: EnhancedPage }) => {\n const { page } = testArgs;\n\n const self = {\n ...common(testArgs),\n goTo: async (relativePath = '/switcher') => {\n await page.goToRelative(relativePath);\n return self.waitForMounted();\n },\n waitForMounted: () => {\n return page.waitForSelector('.cl-organizationSwitcher-root', { state: 'attached' });\n },\n expectNoOrganizationSelected: () => {\n return expect(page.getByText(/No organization selected/i)).toBeVisible();\n },\n expectPersonalAccount: () => {\n return expect(page.getByText(/personal account/i)).toBeVisible();\n },\n toggleTrigger: () => {\n return page.locator('.cl-organizationSwitcherTrigger').click();\n },\n waitForAnOrganizationToSelected: () => {\n return page.waitForSelector('.cl-userPreviewMainIdentifier__personalWorkspace', { state: 'detached' });\n },\n };\n\n return self;\n};\n","import type { EnhancedPage } from './app';\nimport { common } from './common';\n\nexport const createPlanDetailsPageObject = (testArgs: { page: EnhancedPage }) => {\n const { page } = testArgs;\n const self = {\n ...common(testArgs),\n waitForMounted: (selector = '.cl-planDetails-root') => {\n return page.waitForSelector(selector, { state: 'attached' });\n },\n root: page.locator('.cl-planDetails-root'),\n };\n return self;\n};\n","import type { EnhancedPage } from './app';\nimport { common } from './common';\n\ntype BillingPeriod = 'monthly' | 'annually';\n\nexport const createPricingTablePageObject = (testArgs: { page: EnhancedPage }) => {\n const { page } = testArgs;\n\n const locators = {\n toggle: (planSlug: string) => page.locator(`.cl-pricingTableCard__${planSlug} .cl-pricingTableCardPeriodToggle`),\n indicator: (planSlug: string) => page.locator(`.cl-pricingTableCard__${planSlug} .cl-switchIndicator`),\n badge: (planSlug: string) => page.locator(`.cl-pricingTableCard__${planSlug} .cl-badge`),\n footer: (planSlug: string) => page.locator(`.cl-pricingTableCard__${planSlug} .cl-pricingTableCardFooter`),\n };\n\n const ensurePricingPeriod = async (planSlug: string, period: BillingPeriod): Promise<void> => {\n async function waitForAttribute(selector: string, attribute: string, value: string, timeout = 5000) {\n return page\n .waitForFunction(\n ({ sel, attr, val }) => {\n const element = document.querySelector(sel);\n return element?.getAttribute(attr) === val;\n },\n { sel: selector, attr: attribute, val: value },\n { timeout },\n )\n .then(() => {\n return true;\n })\n .catch(() => {\n return false;\n });\n }\n\n const isAnnually = await waitForAttribute(\n `.cl-pricingTableCard__${planSlug} .cl-switchIndicator`,\n 'data-checked',\n 'true',\n 500,\n );\n\n if (isAnnually && period === 'monthly') {\n await locators.toggle(planSlug).click();\n }\n\n if (!isAnnually && period === 'annually') {\n await locators.toggle(planSlug).click();\n }\n };\n\n const self = {\n ...common(testArgs),\n waitForMounted: (selector = '.cl-pricingTable-root') => {\n return page.waitForSelector(selector, { state: 'attached' });\n },\n clickResubscribe: async () => {\n await page.getByText('Re-subscribe').click();\n },\n waitToBeActive: async ({ planSlug }: { planSlug: string }) => {\n return locators.badge(planSlug).getByText('Active').waitFor({ state: 'visible' });\n },\n waitToBeFreeTrial: async ({ planSlug }: { planSlug: string }) => {\n return locators.badge(planSlug).getByText('Free trial').waitFor({ state: 'visible' });\n },\n getPlanCardCTA: ({ planSlug }: { planSlug: string }) => {\n return locators.footer(planSlug).getByRole('button', {\n name: /get|switch|subscribe/i,\n });\n },\n startCheckout: async ({\n planSlug,\n shouldSwitch,\n period,\n }: {\n planSlug: string;\n shouldSwitch?: boolean;\n period?: BillingPeriod;\n }) => {\n const targetButtonName =\n shouldSwitch === true\n ? 'Switch to this plan'\n : shouldSwitch === false\n ? /subscribe/i\n : /get|switch|subscribe|Start \\d+-day free trial/i;\n\n if (period) {\n await ensurePricingPeriod(planSlug, period);\n }\n\n await locators\n .footer(planSlug)\n .getByRole('button', {\n name: targetButtonName,\n })\n .click();\n },\n };\n return self;\n};\n","import { expect } from '@playwright/test';\n\nimport type { EnhancedPage } from './app';\nimport { common } from './common';\n\nexport const createSessionTaskComponentPageObject = (testArgs: { page: EnhancedPage }) => {\n const { page } = testArgs;\n\n const self = {\n ...common(testArgs),\n resolveForceOrganizationSelectionTask: async (fakeOrganization: { name: string; slug?: string }) => {\n const createOrganizationButton = page.getByRole('button', { name: /continue/i });\n\n await expect(createOrganizationButton).toBeVisible();\n\n await page.locator('input[name=name]').fill(fakeOrganization.name);\n if (fakeOrganization.slug) {\n await page.locator('input[name=slug]').fill(fakeOrganization.slug);\n }\n\n await createOrganizationButton.click();\n },\n resolveResetPasswordTask: async ({\n newPassword,\n confirmPassword,\n }: {\n newPassword: string;\n confirmPassword: string;\n }) => {\n await page.locator('input[name=newPassword]').fill(newPassword);\n await page.locator('input[name=confirmPassword]').fill(confirmPassword);\n\n const resetPasswordButton = page.getByRole('button', { name: /reset password/i });\n await expect(resetPasswordButton).toBeVisible();\n await resetPasswordButton.click();\n },\n };\n\n return self;\n};\n","import { expect } from '@playwright/test';\n\nimport type { EnhancedPage } from './app';\nimport { common } from './common';\n\nexport const createSignInComponentPageObject = (testArgs: { page: EnhancedPage }) => {\n const { page } = testArgs;\n const self = {\n ...common(testArgs),\n goTo: async (opts?: { searchParams?: URLSearchParams; headlessSelector?: string; timeout?: number }) => {\n const navRes = await page.goToRelative('/sign-in', opts);\n\n if (typeof opts?.headlessSelector !== 'undefined') {\n await self.waitForMounted(opts.headlessSelector);\n } else {\n await self.waitForMounted();\n }\n return navRes;\n },\n waitForMounted: (selector = '.cl-signIn-root') => {\n return page.waitForSelector(selector, { state: 'attached' });\n },\n waitForModal: (state?: 'open' | 'closed') => {\n return page.waitForSelector('.cl-modalContent:has(.cl-signIn-root)', {\n state: state === 'closed' ? 'detached' : 'attached',\n });\n },\n setIdentifier: (val: string) => {\n return self.getIdentifierInput().fill(val);\n },\n setInstantPassword: async (val: string) => {\n const passField = self.getPasswordInput();\n await expect(passField).toBeVisible();\n await passField.fill(val, { force: true });\n },\n usePhoneNumberIdentifier: () => {\n return page.getByRole('link', { name: /^use phone/i });\n },\n useEmailIdentifier: () => {\n return page.getByRole('link', { name: /^use email/i });\n },\n useUsernameIdentifier: () => {\n return page.getByRole('link', { name: /^username$/i });\n },\n getForgotPassword: () => {\n return page.getByRole('link', { name: /forgot password/i });\n },\n getGoToSignUp: () => {\n return page.getByRole('link', { name: /sign up/i });\n },\n getResetPassword: () => {\n return page.getByRole('button', { name: /(reset password|reset your password)/i });\n },\n getUseAnotherMethodLink: () => {\n return page.getByRole('link', { name: /use another method/i });\n },\n getAltMethodsEmailCodeButton: () => {\n return page.getByRole('button', { name: /email code to/i });\n },\n getAltMethodsEmailLinkButton: () => {\n return page.getByRole('button', { name: /email link to/i });\n },\n signInWithOauth: (provider: string) => {\n return page.getByRole('button', { name: new RegExp(`continue with ${provider}`, 'gi') });\n },\n signInWithEmailAndInstantPassword: async ({\n email,\n password,\n waitForSession = true,\n }: {\n email: string;\n password: string;\n waitForSession?: boolean;\n }) => {\n const identifierField = self.getIdentifierInput();\n await expect(identifierField).toBeVisible();\n\n await identifierField.fill(email);\n await self.setInstantPassword(password);\n await self.continue();\n\n if (waitForSession) {\n await self.waitForSession();\n }\n },\n };\n return self;\n};\n","import type { EnhancedPage } from './app';\nimport { common } from './common';\n\ntype SignUpFormInputs = {\n email?: string;\n password?: string;\n firstName?: string;\n lastName?: string;\n username?: string;\n phoneNumber?: string;\n legalAccepted?: boolean;\n};\n\nexport const createSignUpComponentPageObject = (testArgs: { page: EnhancedPage }) => {\n const { page } = testArgs;\n\n const self = {\n ...common(testArgs),\n goTo: async (opts?: { searchParams?: URLSearchParams; headlessSelector?: string }) => {\n await page.goToRelative('/sign-up', { searchParams: opts?.searchParams });\n\n if (typeof opts?.headlessSelector !== 'undefined') {\n return self.waitForMounted(opts.headlessSelector);\n }\n return self.waitForMounted();\n },\n waitForMounted: (selector = '.cl-signUp-root') => {\n return page.waitForSelector(selector, { state: 'attached' });\n },\n waitForModal: (state?: 'open' | 'closed') => {\n return page.waitForSelector('.cl-modalContent:has(.cl-signUp-root)', {\n state: state === 'closed' ? 'detached' : 'attached',\n });\n },\n signUpWithOauth: (provider: string) => {\n return page.getByRole('button', { name: new RegExp(`continue with ${provider}`, 'gi') });\n },\n signUp: async (opts: SignUpFormInputs) => {\n if (opts.firstName) {\n await self.getFirstNameInput().fill(opts.firstName);\n }\n\n if (opts.lastName) {\n await self.getLastNameInput().fill(opts.lastName);\n }\n\n if (opts.email) {\n await self.getEmailAddressInput().fill(opts.email);\n }\n\n if (opts.username) {\n await self.getUsernameInput().fill(opts.username);\n }\n\n if (opts.phoneNumber) {\n await self.getPhoneNumberInput().fill(opts.phoneNumber);\n }\n\n if (opts.password) {\n await self.getPasswordInput().fill(opts.password);\n }\n\n if (opts.legalAccepted) {\n await self.getLegalAccepted().check();\n }\n\n await self.continue();\n },\n signUpWithEmailAndPassword: async (opts: Pick<SignUpFormInputs, 'email' | 'password'>) => {\n await self.signUp({ email: opts.email, password: opts.password });\n },\n waitForEmailVerificationScreen: async () => {\n await page.waitForURL(/verify/);\n await page.getByRole('heading', { name: /Verify your email/i }).waitFor();\n },\n };\n\n return self;\n};\n","import type { EnhancedPage } from './app';\nimport { common } from './common';\n\nexport const createSubscriptionDetailsPageObject = (testArgs: { page: EnhancedPage }) => {\n const { page } = testArgs;\n const self = {\n ...common(testArgs),\n waitForMounted: (selector = '.cl-subscriptionDetails-root') => {\n return page.waitForSelector(selector, { state: 'attached' });\n },\n waitForUnmounted: () => {\n return self.root.locator('.cl-drawerRoot').waitFor({ state: 'detached' });\n },\n closeDrawer: () => {\n return self.root.locator('.cl-drawerClose').click();\n },\n root: page.locator('.cl-subscriptionDetails-root'),\n };\n return self;\n};\n","import { setupClerkTestingToken } from '../../setupClerkTestingToken';\nimport type { EnhancedPage } from './app';\n\nexport const createTestingTokenPageObject = ({ page }: { page: EnhancedPage }) => {\n return {\n setup: async () => setupClerkTestingToken({ page }),\n };\n};\n","import { expect } from '@playwright/test';\n\nimport type { EnhancedPage } from './app';\n\nconst SELECTOR = '.cl-userAvatarBox';\n\nexport const createUserAvatarPageObject = (testArgs: { page: EnhancedPage }) => {\n const { page } = testArgs;\n\n const self = {\n goTo: async (opts?: { searchParams: URLSearchParams }) => {\n await page.goToRelative('/user-avatar', opts);\n return self.waitForMounted();\n },\n waitForMounted: (selector = SELECTOR) => {\n return page.waitForSelector(selector, { state: 'attached' });\n },\n toBeVisible: async (selector = SELECTOR) => {\n return await expect(page.locator(selector).getByRole('img')).toBeVisible();\n },\n };\n\n return self;\n};\n","import { expect } from '@playwright/test';\n\nimport type { EnhancedPage } from './app';\n\nexport const createUserButtonPageObject = (testArgs: { page: EnhancedPage }) => {\n const { page } = testArgs;\n\n const self = {\n waitForMounted: () => {\n return page.waitForSelector('.cl-userButtonTrigger', { state: 'attached' });\n },\n toggleTrigger: () => {\n return page.locator('.cl-userButtonTrigger').click();\n },\n waitForPopover: () => {\n return page.waitForSelector('.cl-userButtonPopoverCard', { state: 'visible' });\n },\n waitForPopoverClosed: () => {\n return page.waitForSelector('.cl-userButtonPopoverCard', { state: 'detached' });\n },\n toHaveVisibleMenuItems: async (menuItems: string | RegExp | Array<string | RegExp>) => {\n if (typeof menuItems === 'string' || menuItems instanceof RegExp) {\n menuItems = [menuItems];\n }\n for (const menuItem of menuItems) {\n await expect(page.getByRole('menuitem', { name: menuItem })).toBeVisible();\n }\n },\n triggerSignOut: () => {\n return page.getByRole('menuitem', { name: /Sign out$/i }).click();\n },\n triggerManageAccount: () => {\n return page.getByRole('menuitem', { name: /Manage account/i }).click();\n },\n switchAccount: (emailAddress: string) => {\n return page.getByText(emailAddress).click();\n },\n };\n\n return self;\n};\n","import type { EnhancedPage } from './app';\nimport { common } from './common';\n\nexport type Sections = 'profile' | 'emailAddresses' | 'username' | 'phoneNumbers' | 'danger';\n\nexport const createUserProfileComponentPageObject = (testArgs: { page: EnhancedPage }) => {\n const { page } = testArgs;\n const self = {\n ...common(testArgs),\n goTo: async (opts?: { searchParams: URLSearchParams }) => {\n await page.goToRelative('/user', opts);\n return self.waitForMounted();\n },\n switchToSecurityTab: async () => {\n await page.getByText(/Security/i).click();\n },\n switchToBillingTab: async () => {\n await page.getByText(/Billing/i).click();\n },\n switchToAPIKeysTab: async () => {\n await page.getByText(/API keys/i).click();\n },\n waitForMounted: () => {\n return page.waitForSelector('.cl-userProfile-root', { state: 'attached' });\n },\n clickSetUsername: () => {\n return page.getByText(/Set username/i).click();\n },\n clickToUpdateProfile: () => {\n return page.getByText(/update profile/i).click();\n },\n clickUpdateUsername: () => {\n return page.getByText(/update username/i).click();\n },\n clickSetPassword: () => {\n return page.getByText(/Set password/i).click();\n },\n waitForSectionCard: (section: Sections, opened: boolean) => {\n return page.waitForSelector(`.cl-profileSectionContent__${section} .cl-headerTitle`, {\n state: opened ? 'visible' : 'detached',\n });\n },\n waitForSectionCardOpened: (section: Sections) => {\n return self.waitForSectionCard(section, true);\n },\n waitForSectionCardClosed: (section: Sections) => {\n return self.waitForSectionCard(section, false);\n },\n typeUsername: (value: string) => {\n return self.getUsernameInput().fill(value);\n },\n typeFirstName: (value: string) => {\n return self.getFirstNameInput().fill(value);\n },\n typeLastName: (value: string) => {\n return self.getLastNameInput().fill(value);\n },\n typePhoneNumber: (value: string) => {\n return self.getPhoneNumberInput().fill(value);\n },\n clickAddEmailAddress: () => {\n return page.getByText(/add email address/i).click();\n },\n clickAddPhoneNumber: () => {\n return page.getByText(/add phone number/i).click();\n },\n typeEmailAddress: (value: string) => {\n return page.getByLabel(/Email address/i).fill(value);\n },\n waitForUserProfileModal: (state?: 'open' | 'closed') => {\n return page.waitForSelector('.cl-modalContent:has(.cl-userProfile-root)', {\n state: state === 'closed' ? 'detached' : 'attached',\n });\n },\n };\n return self;\n};\n","import type { EnhancedPage } from './app';\nimport { common } from './common';\n\nexport const createUserVerificationComponentPageObject = (testArgs: { page: EnhancedPage }) => {\n const { page } = testArgs;\n const self = {\n ...common(testArgs),\n waitForMounted: (selector = '.cl-userVerification-root') => {\n return page.waitForSelector(selector, { state: 'attached' });\n },\n waitForClosed: (selector = '.cl-userVerification-root') => {\n return page.waitForSelector(selector, { state: 'detached' });\n },\n closeReverificationModal: () => {\n return page.getByLabel('Close modal').click();\n },\n getUseAnotherMethodLink: () => {\n return page.getByRole('link', { name: /use another method/i });\n },\n getAltMethodsEmailCodeButton: () => {\n return page.getByRole('button', { name: /email code to/i });\n },\n getAltMethodsEmailLinkButton: () => {\n return page.getByRole('button', { name: /email link to/i });\n },\n };\n return self;\n};\n","import type { EnhancedPage } from './app';\nimport { common } from './common';\n\ntype WaitlistFormInputs = {\n email: string;\n};\n\nexport const createWaitlistComponentPageObject = (testArgs: { page: EnhancedPage }) => {\n const { page } = testArgs;\n\n const self = {\n ...common(testArgs),\n goTo: async (opts?: { searchParams?: URLSearchParams; headlessSelector?: string }) => {\n await page.goToRelative('/waitlist', { searchParams: opts?.searchParams });\n\n if (typeof opts?.headlessSelector !== 'undefined') {\n return self.waitForMounted(opts.headlessSelector);\n }\n return self.waitForMounted();\n },\n waitForMounted: (selector = '.cl-waitlist-root') => {\n return page.waitForSelector(selector, { state: 'attached' });\n },\n joinWaitlist: async (opts: WaitlistFormInputs) => {\n await self.getEmailAddressInput().fill(opts.email);\n\n await self.joinWaitlistContinue();\n },\n joinWaitlistContinue: () => {\n return page.getByRole('button', { name: 'Join the waitlist', exact: true }).click();\n },\n };\n\n return self;\n};\n","import type { Page } from '@playwright/test';\n\nimport { createAPIKeysComponentPageObject } from './apiKeys';\nimport { createAppPageObject } from './app';\nimport { createCheckoutPageObject } from './checkout';\nimport { createClerkPageObject } from './clerk';\nimport { createExpectPageObject } from './expect';\nimport { createImpersonationPageObject } from './impersonation';\nimport { createKeylessPopoverPageObject } from './keylessPopover';\nimport { createOrganizationSwitcherComponentPageObject } from './organizationSwitcher';\nimport { createPlanDetailsPageObject } from './planDetails';\nimport { createPricingTablePageObject } from './pricingTable';\nimport { createSessionTaskComponentPageObject } from './sessionTask';\nimport { createSignInComponentPageObject } from './signIn';\nimport { createSignUpComponentPageObject } from './signUp';\nimport { createSubscriptionDetailsPageObject } from './subscriptionDetails';\nimport { createTestingTokenPageObject } from './testingToken';\nimport { createUserAvatarPageObject } from './userAvatar';\nimport { createUserButtonPageObject } from './userButton';\nimport { createUserProfileComponentPageObject } from './userProfile';\nimport { createUserVerificationComponentPageObject } from './userVerification';\nimport { createWaitlistComponentPageObject } from './waitlist';\n\nexport const createPageObjects = ({\n page,\n useTestingToken = true,\n baseURL,\n}: {\n page: Page;\n useTestingToken?: boolean;\n baseURL?: string;\n}) => {\n const app = createAppPageObject({ page, useTestingToken }, { baseURL });\n const testArgs = { page: app };\n\n return {\n page: app,\n clerk: createClerkPageObject(testArgs),\n checkout: createCheckoutPageObject(testArgs),\n expect: createExpectPageObject(testArgs),\n impersonation: createImpersonationPageObject(testArgs),\n keylessPopover: createKeylessPopoverPageObject(testArgs),\n organizationSwitcher: createOrganizationSwitcherComponentPageObject(testArgs),\n pricingTable: createPricingTablePageObject(testArgs),\n sessionTask: createSessionTaskComponentPageObject(testArgs),\n signIn: createSignInComponentPageObject(testArgs),\n signUp: createSignUpComponentPageObject(testArgs),\n testingToken: createTestingTokenPageObject(testArgs),\n userAvatar: createUserAvatarPageObject(testArgs),\n userButton: createUserButtonPageObject(testArgs),\n userProfile: createUserProfileComponentPageObject(testArgs),\n userVerification: createUserVerificationComponentPageObject(testArgs),\n waitlist: createWaitlistComponentPageObject(testArgs),\n apiKeys: createAPIKeysComponentPageObject(testArgs),\n subscriptionDetails: createSubscriptionDetailsPageObject(testArgs),\n planDetails: createPlanDetailsPageObject(testArgs),\n };\n};\n"],"mappings":"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","names":["common","page","self","val","code","opts","name","awaitAttempt","awaitPrepare","awaitRequests","response","originalInput","createAPIKeysComponentPageObject","testArgs","page","expirationOptions","common","value","createAppPageObject","testArgs","app","page","useTestingToken","appPage","setupClerkTestingToken","path","opts","url","relativePath","array","map","acc","cookie","createCheckoutPageObject","testArgs","page","self","common","selector","card","frame","state","iframe","createClerkPageObject","page","expect","createExpectPageObject","page","res","redirect","args","createImpersonationPageObject","testArgs","page","selector","createKeylessPopoverPageObject","testArgs","page","elementId","val","expect","createOrganizationSwitcherComponentPageObject","testArgs","page","self","common","relativePath","expect","createPlanDetailsPageObject","testArgs","page","common","selector","createPricingTablePageObject","testArgs","page","locators","planSlug","ensurePricingPeriod","period","waitForAttribute","selector","attribute","value","timeout","sel","attr","val","isAnnually","common","shouldSwitch","targetButtonName","expect","createSessionTaskComponentPageObject","testArgs","page","common","fakeOrganization","createOrganizationButton","expect","newPassword","confirmPassword","resetPasswordButton","expect","createSignInComponentPageObject","testArgs","page","self","common","opts","navRes","selector","state","val","passField","expect","provider","email","password","waitForSession","identifierField","createSignUpComponentPageObject","testArgs","page","self","common","opts","selector","state","provider","createSubscriptionDetailsPageObject","testArgs","page","self","common","selector","createTestingTokenPageObject","page","setupClerkTestingToken","expect","SELECTOR","createUserAvatarPageObject","testArgs","page","self","opts","selector","expect","createUserButtonPageObject","testArgs","page","menuItems","menuItem","emailAddress","createUserProfileComponentPageObject","testArgs","page","self","common","opts","section","opened","value","state","createUserVerificationComponentPageObject","testArgs","page","common","selector","createWaitlistComponentPageObject","testArgs","page","self","common","opts","selector","createPageObjects","page","useTestingToken","baseURL","app","createAppPageObject","testArgs","createClerkPageObject","createCheckoutPageObject","createExpectPageObject","createImpersonationPageObject","createKeylessPopoverPageObject","createOrganizationSwitcherComponentPageObject","createPricingTablePageObject","createSessionTaskComponentPageObject","createSignInComponentPageObject","createSignUpComponentPageObject","createTestingTokenPageObject","createUserAvatarPageObject","createUserButtonPageObject","createUserProfileComponentPageObject","createUserVerificationComponentPageObject","createWaitlistComponentPageObject","createAPIKeysComponentPageObject","createSubscriptionDetailsPageObject","createPlanDetailsPageObject"]}
@@ -1 +1 @@
1
- {"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../../../../src/playwright/unstable/page-objects/common.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAE1C,KAAK,mBAAmB,GAAG;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB,CAAC;AAEF,eAAO,MAAM,MAAM,GAAI,UAAU;IAAE,IAAI,EAAE,YAAY,CAAA;CAAE;;2BAK5B,MAAM;uBAGV,MAAM;mCAGM,MAAM;yBAGV,MAAM,SAAS,mBAAmB;8BAoC7B,mBAAmB;4BAIrB,MAAM,SAAS,IAAI,CAAC,mBAAmB,EAAE,MAAM,CAAC;;;;;;;;;;CAmCjF,CAAC"}
1
+ {"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../../../../src/playwright/unstable/page-objects/common.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAE1C,KAAK,mBAAmB,GAAG;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB,CAAC;AAEF,eAAO,MAAM,MAAM,GAAI,UAAU;IAAE,IAAI,EAAE,YAAY,CAAA;CAAE;;2BAK5B,MAAM;uBAGV,MAAM;mCAGM,MAAM;yBAGV,MAAM,SAAS,mBAAmB;8BAwC7B,mBAAmB;4BAIrB,MAAM,SAAS,IAAI,CAAC,mBAAmB,EAAE,MAAM,CAAC;;;;;;;;;;CAmCjF,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@clerk/testing",
3
- "version": "2.0.0-snapshot.v20251211120550",
3
+ "version": "2.0.0-snapshot.v20251215203425",
4
4
  "description": "Utilities to help you create E2E test suites for apps using Clerk",
5
5
  "keywords": [
6
6
  "auth",
@@ -67,8 +67,8 @@
67
67
  ],
68
68
  "dependencies": {
69
69
  "dotenv": "17.2.2",
70
- "@clerk/backend": "3.0.0-snapshot.v20251211120550",
71
- "@clerk/shared": "4.0.0-snapshot.v20251211120550"
70
+ "@clerk/backend": "3.0.0-snapshot.v20251215203425",
71
+ "@clerk/shared": "4.0.0-snapshot.v20251215203425"
72
72
  },
73
73
  "devDependencies": {
74
74
  "@playwright/test": "^1.56.1",