1+ import { constants } from './constants' ;
12import { errorThrower , parsePublishableKey } from './util/shared' ;
23
3- const buildUrl = ( _baseUrl : string | URL , _targetUrl : string | URL , _returnBackUrl ?: string | URL | null ) => {
4+ const buildUrl = (
5+ _baseUrl : string | URL ,
6+ _targetUrl : string | URL ,
7+ _returnBackUrl ?: string | URL | null ,
8+ _devBrowserToken ?: string | null ,
9+ ) => {
410 if ( _baseUrl === '' ) {
511 return legacyBuildUrl ( _targetUrl . toString ( ) , _returnBackUrl ?. toString ( ) ) ;
612 }
@@ -12,6 +18,10 @@ const buildUrl = (_baseUrl: string | URL, _targetUrl: string | URL, _returnBackU
1218 if ( returnBackUrl ) {
1319 res . searchParams . set ( 'redirect_url' , returnBackUrl . toString ( ) ) ;
1420 }
21+ // For cross-origin redirects, we need to pass the dev browser token for URL session syncing
22+ if ( _devBrowserToken && baseUrl . hostname !== res . hostname ) {
23+ res . searchParams . set ( constants . Cookies . DevBrowser , _devBrowserToken ) ;
24+ }
1525 return res . toString ( ) ;
1626} ;
1727
@@ -66,6 +76,7 @@ export type RedirectFun<ReturnType> = (params?: RedirectToParams) => ReturnType;
6676 */
6777type CreateRedirect = < ReturnType > ( params : {
6878 publishableKey : string ;
79+ devBrowserToken ?: string ;
6980 redirectAdapter : RedirectAdapter < ReturnType > ;
7081 baseUrl : URL | string ;
7182 signInUrl ?: URL | string ;
@@ -77,23 +88,29 @@ type CreateRedirect = <ReturnType>(params: {
7788
7889export const createRedirect : CreateRedirect = params => {
7990 const { publishableKey, redirectAdapter, signInUrl, signUpUrl, baseUrl } = params ;
80- const frontendApi = parsePublishableKey ( publishableKey ) ?. frontendApi ;
91+ const parsedPublishableKey = parsePublishableKey ( publishableKey ) ;
92+ const frontendApi = parsedPublishableKey ?. frontendApi ;
93+ const isDevelopment = parsedPublishableKey ?. instanceType === 'development' ;
8194 const accountsBaseUrl = buildAccountsBaseUrl ( frontendApi ) ;
8295
8396 const redirectToSignUp = ( { returnBackUrl } : RedirectToParams = { } ) => {
8497 if ( ! signUpUrl && ! accountsBaseUrl ) {
8598 errorThrower . throwMissingPublishableKeyError ( ) ;
8699 }
87100 const accountsSignUpUrl = `${ accountsBaseUrl } /sign-up` ;
88- return redirectAdapter ( buildUrl ( baseUrl , signUpUrl || accountsSignUpUrl , returnBackUrl ) ) ;
101+ return redirectAdapter (
102+ buildUrl ( baseUrl , signUpUrl || accountsSignUpUrl , returnBackUrl , isDevelopment ? params . devBrowserToken : null ) ,
103+ ) ;
89104 } ;
90105
91106 const redirectToSignIn = ( { returnBackUrl } : RedirectToParams = { } ) => {
92107 if ( ! signInUrl && ! accountsBaseUrl ) {
93108 errorThrower . throwMissingPublishableKeyError ( ) ;
94109 }
95110 const accountsSignInUrl = `${ accountsBaseUrl } /sign-in` ;
96- return redirectAdapter ( buildUrl ( baseUrl , signInUrl || accountsSignInUrl , returnBackUrl ) ) ;
111+ return redirectAdapter (
112+ buildUrl ( baseUrl , signInUrl || accountsSignInUrl , returnBackUrl , isDevelopment ? params . devBrowserToken : null ) ,
113+ ) ;
97114 } ;
98115
99116 return { redirectToSignUp, redirectToSignIn } ;
0 commit comments