11import { useClerk } from '@clerk/shared/react' ;
22import { createContext , useContext , useMemo } from 'react' ;
33
4+ import { isAllowedRedirect } from '../../../utils' ;
45import type { __experimental_CheckoutCtx } from '../../types' ;
6+ import { useOptions } from '../OptionsContext' ;
7+
58export const __experimental_CheckoutContext = createContext < __experimental_CheckoutCtx | null > ( null ) ;
69
710export const useCheckoutContext = ( ) => {
811 const context = useContext ( __experimental_CheckoutContext ) ;
912 const clerk = useClerk ( ) ;
13+ const options = useOptions ( ) ;
1014
1115 if ( ! context || context . componentName !== 'Checkout' ) {
1216 throw new Error ( 'Clerk: useCheckoutContext called outside Checkout.' ) ;
@@ -19,18 +23,15 @@ export const useCheckoutContext = () => {
1923 return undefined ;
2024 }
2125
22- if ( context . __experimental_checkoutContinueUrl ) {
23- return context . __experimental_checkoutContinueUrl ;
24- }
25-
26- return clerk . __experimental_buildCheckoutContinueUrl ?.( ) ;
27- } , [ context . portalRoot , context . __experimental_checkoutContinueUrl , clerk ] ) ;
26+ const url = context . checkoutContinueUrl || clerk . buildCheckoutContinueUrl ?.( ) ;
27+ return isAllowedRedirect ( options ?. allowedRedirectOrigins , window . location . origin ) ( url ) ? url : undefined ;
28+ } , [ context . portalRoot , context . checkoutContinueUrl , clerk , options ?. allowedRedirectOrigins ] ) ;
2829
2930 const { componentName, ...ctx } = context ;
3031
3132 return {
3233 ...ctx ,
3334 componentName,
34- __experimental_checkoutContinueUrl : checkoutContinueUrl ,
35+ checkoutContinueUrl,
3536 } ;
3637} ;
0 commit comments