@clerk/testing
Version:
Utilities to help you create E2E test suites for apps using Clerk
10 lines (6 loc) • 4.79 kB
JavaScript
;var f=Object.create;var c=Object.defineProperty;var T=Object.getOwnPropertyDescriptor;var S=Object.getOwnPropertyNames;var P=Object.getPrototypeOf,I=Object.prototype.hasOwnProperty;var L=(e,r)=>{for(var t in r)c(e,t,{get:r[t],enumerable:!0})},k=(e,r,t,n)=>{if(r&&typeof r=="object"||typeof r=="function")for(let o of S(r))!I.call(e,o)&&o!==t&&c(e,o,{get:()=>r[o],enumerable:!(n=T(r,o))||n.enumerable});return e};var K=(e,r,t)=>(t=e!=null?f(P(e)):{},k(r||!e||!e.__esModule?c(t,"default",{value:e,enumerable:!0}):t,e)),R=e=>k(c({},"__esModule",{value:!0}),e);var A={};L(A,{clerk:()=>w,clerkSetup:()=>h,setupClerkTestingToken:()=>d});module.exports=R(A);var g="__clerk_testing_token";var C=require("@clerk/backend"),p=require("@clerk/shared/keys"),E=K(require("dotenv")),u=async e=>{let r=s=>{e?.debug&&console.log(`Clerk: ${s}`)};r("Setting up Clerk..."),E.default.config({path:[".env.local",".env"]});let t=e?.publishableKey||process.env.NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY||process.env.VITE_CLERK_PUBLISHABLE_KEY||process.env.CLERK_PUBLISHABLE_KEY||process.env.REACT_APP_CLERK_PUBLISHABLE_KEY||process.env.EXPO_PUBLIC_CLERK_PUBLISHABLE_KEY,n=process.env.CLERK_SECRET_KEY,o=process.env.CLERK_TESTING_TOKEN;if(!t)throw new Error("You need to set the CLERK_PUBLISHABLE_KEY environment variable.");if(!n&&!o)throw new Error("You need to set the CLERK_SECRET_KEY or the CLERK_TESTING_TOKEN environment variable.");if(n&&!o){if((0,p.isProductionFromSecretKey)(n))throw new Error("You are using a secret key from a production instance, but Testing Tokens only work in development instances.");r("Fetching testing token from Clerk Backend API...");try{let s=process.env.CLERK_API_URL;o=(await(0,C.createClerkClient)({secretKey:n,apiUrl:s}).testingTokens.createTestingToken()).token}catch(s){throw console.error("Failed to fetch testing token from Clerk API."),s}}return{CLERK_FAPI:e?.frontendApiUrl||(0,p.parsePublishableKey)(t)?.frontendApi,CLERK_TESTING_TOKEN:o}};var y="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 _=async({signInParams:e,windowObject:r})=>{try{let t=r||window;if(!t.Clerk.client)return;let n=t.Clerk.client.signIn;if(e.strategy==="password"){let o=await n.create(e);await t.Clerk.setActive({session:o.createdSessionId})}else{if(e.strategy==="phone_code"&&!e.identifier.includes("+155555501"))throw new Error(`Phone number should be a test phone number.
Example: +15555550100.
Learn more here: https://clerk.com/docs/testing/test-emails-and-phones#phone-numbers`);if(e.strategy==="email_code"&&!e.identifier.includes("+clerk_test"))throw new Error(`Email should be a test email.
Any email with the +clerk_test subaddress is a test email address.
Learn more here: https://clerk.com/docs/testing/test-emails-and-phones#email-addresses`);let{supportedFirstFactors:o}=await n.create({identifier:e.identifier}),s=e.strategy==="phone_code"?a=>a.strategy==="phone_code":a=>a.strategy==="email_code",l=o?.find(s);if(l){let a=e.strategy==="phone_code"?{strategy:e.strategy,phoneNumberId:l.phoneNumberId}:{strategy:e.strategy,emailAddressId:l.emailAddressId};await n.prepareFirstFactor(a);let i=await n.attemptFirstFactor({strategy:e.strategy,code:"424242"});if(i.status==="complete")await t.Clerk.setActive({session:i.createdSessionId});else throw new Error(`Status is ${i.status}`)}else throw new Error(`${e.strategy} is not enabled.`)}}catch(t){throw new Error(`Clerk: Failed to sign in: ${t?.message}`)}};var h=async e=>{let{CLERK_FAPI:r,CLERK_TESTING_TOKEN:t}=await u(e);process.env.CLERK_FAPI=r,process.env.CLERK_TESTING_TOKEN=t};var d=async({page:e,options:r})=>{let t=r?.frontendApiUrl||process.env.CLERK_FAPI;if(!t)throw new Error(y);let n=`https://${t}/v1/**/*`;await e.route(n,async o=>{let s=new URL(o.request().url()),l=process.env.CLERK_TESTING_TOKEN;l&&s.searchParams.set(g,l);try{let a=await o.fetch({url:s.toString()}),i=await a.json();i?.response?.captcha_bypass===!1&&(i.response.captcha_bypass=!0),i?.client?.captcha_bypass===!1&&(i.client.captcha_bypass=!0),await o.fulfill({response:a,json:i})}catch{await o.continue({url:s.toString()}).catch(console.error)}})};var m=async({page:e})=>{await e.waitForFunction(()=>window.Clerk!==void 0),await e.waitForFunction(()=>window.Clerk.loaded)},F=async({page:e,signInParams:r,setupClerkTestingTokenOptions:t})=>{await d({page:e,options:t}),await m({page:e}),await e.evaluate(_,{signInParams:r})},O=async({page:e,signOutOptions:r})=>{await m({page:e}),await e.evaluate(async t=>{await window.Clerk.signOut(t)},r)},w={signIn:F,signOut:O,loaded:m};0&&(module.exports={clerk,clerkSetup,setupClerkTestingToken});
//# sourceMappingURL=index.js.map