@@ -651,7 +651,7 @@ describe('tokens.authenticateRequest(options)', () => {
651651 expect ( requestState ) . toBeSignedOutToAuth ( ) ;
652652 } ) ;
653653
654- test ( 'cookieToken: returns handshake when clientUat is missing or equals to 0 and is satellite and not is synced [11y]' , async ( ) => {
654+ test ( 'cookieToken: returns handshake when clientUat is missing or equals to 0 and is satellite with satelliteAutoSync=true and not is synced [11y]' , async ( ) => {
655655 server . use (
656656 http . get ( 'https://api.clerk.test/v1/jwks' , ( ) => {
657657 return HttpResponse . json ( mockJwks ) ;
@@ -671,6 +671,7 @@ describe('tokens.authenticateRequest(options)', () => {
671671 isSatellite : true ,
672672 signInUrl : 'https://primary.dev/sign-in' ,
673673 domain : 'satellite.dev' ,
674+ satelliteAutoSync : true ,
674675 } ) ,
675676 ) ;
676677
@@ -684,7 +685,7 @@ describe('tokens.authenticateRequest(options)', () => {
684685 expect ( requestState . toAuth ( ) ) . toBeNull ( ) ;
685686 } ) ;
686687
687- test ( 'cookieToken: redirects to signInUrl when is satellite dev and not synced' , async ( ) => {
688+ test ( 'cookieToken: redirects to signInUrl when is satellite dev with satelliteAutoSync=true and not synced' , async ( ) => {
688689 server . use (
689690 http . get ( 'https://api.clerk.test/v1/jwks' , ( ) => {
690691 return HttpResponse . json ( mockJwks ) ;
@@ -705,6 +706,7 @@ describe('tokens.authenticateRequest(options)', () => {
705706 isSatellite : true ,
706707 signInUrl : 'https://primary.dev/sign-in' ,
707708 domain : 'satellite.dev' ,
709+ satelliteAutoSync : true ,
708710 } ) ,
709711 ) ;
710712
@@ -873,6 +875,114 @@ describe('tokens.authenticateRequest(options)', () => {
873875 expect ( requestState . toAuth ( ) ) . toBeSignedOutToAuth ( ) ;
874876 } ) ;
875877
878+ test ( 'cookieToken: returns signed out without handshake when satelliteAutoSync is not set (defaults to false) and no cookies - prod' , async ( ) => {
879+ const requestState = await authenticateRequest (
880+ mockRequestWithCookies (
881+ { ...defaultHeaders , 'sec-fetch-dest' : 'document' } ,
882+ { __client_uat : '0' } ,
883+ `http://satellite.example/path` ,
884+ ) ,
885+ mockOptions ( {
886+ secretKey : 'deadbeef' ,
887+ publishableKey : PK_LIVE ,
888+ signInUrl : 'https://primary.example/sign-in' ,
889+ isSatellite : true ,
890+ domain : 'satellite.example' ,
891+ } ) ,
892+ ) ;
893+
894+ expect ( requestState ) . toBeSignedOut ( {
895+ reason : AuthErrorReason . SessionTokenAndUATMissing ,
896+ isSatellite : true ,
897+ domain : 'satellite.example' ,
898+ signInUrl : 'https://primary.example/sign-in' ,
899+ } ) ;
900+ expect ( requestState . toAuth ( ) ) . toBeSignedOutToAuth ( ) ;
901+ expect ( requestState . headers . get ( 'location' ) ) . toBeNull ( ) ;
902+ } ) ;
903+
904+ test ( 'cookieToken: returns signed out without handshake when satelliteAutoSync is not set (defaults to false) and no cookies - dev' , async ( ) => {
905+ const requestState = await authenticateRequest (
906+ mockRequestWithCookies (
907+ { ...defaultHeaders , 'sec-fetch-dest' : 'document' } ,
908+ {
909+ __client_uat : '0' ,
910+ __clerk_db_jwt : mockJwt ,
911+ } ,
912+ ) ,
913+ mockOptions ( {
914+ secretKey : 'sk_test_deadbeef' ,
915+ publishableKey : PK_TEST ,
916+ isSatellite : true ,
917+ signInUrl : 'https://primary.dev/sign-in' ,
918+ domain : 'satellite.dev' ,
919+ } ) ,
920+ ) ;
921+
922+ expect ( requestState ) . toBeSignedOut ( {
923+ reason : AuthErrorReason . SessionTokenAndUATMissing ,
924+ isSatellite : true ,
925+ domain : 'satellite.dev' ,
926+ signInUrl : 'https://primary.dev/sign-in' ,
927+ } ) ;
928+ expect ( requestState . toAuth ( ) ) . toBeSignedOutToAuth ( ) ;
929+ expect ( requestState . headers . get ( 'location' ) ) . toBeNull ( ) ;
930+ } ) ;
931+
932+ test ( 'cookieToken: triggers handshake when satelliteAutoSync is not set but __clerk_synced=false is present - prod' , async ( ) => {
933+ const requestState = await authenticateRequest (
934+ mockRequestWithCookies (
935+ { ...defaultHeaders , 'sec-fetch-dest' : 'document' } ,
936+ { __client_uat : '0' } ,
937+ `http://satellite.example/path?__clerk_synced=false` ,
938+ ) ,
939+ mockOptions ( {
940+ secretKey : 'deadbeef' ,
941+ publishableKey : PK_LIVE ,
942+ signInUrl : 'https://primary.example/sign-in' ,
943+ isSatellite : true ,
944+ domain : 'satellite.example' ,
945+ } ) ,
946+ ) ;
947+
948+ expect ( requestState ) . toMatchHandshake ( {
949+ reason : AuthErrorReason . SatelliteCookieNeedsSyncing ,
950+ isSatellite : true ,
951+ domain : 'satellite.example' ,
952+ signInUrl : 'https://primary.example/sign-in' ,
953+ } ) ;
954+ } ) ;
955+
956+ test ( 'cookieToken: triggers handshake when satelliteAutoSync is not set but __clerk_synced=false is present - dev' , async ( ) => {
957+ const requestState = await authenticateRequest (
958+ mockRequestWithCookies (
959+ { ...defaultHeaders , 'sec-fetch-dest' : 'document' } ,
960+ {
961+ __client_uat : '0' ,
962+ __clerk_db_jwt : mockJwt ,
963+ } ,
964+ `http://satellite.dev/path?__clerk_synced=false` ,
965+ ) ,
966+ mockOptions ( {
967+ secretKey : 'sk_test_deadbeef' ,
968+ publishableKey : PK_TEST ,
969+ signInUrl : 'https://primary.dev/sign-in' ,
970+ isSatellite : true ,
971+ domain : 'satellite.dev' ,
972+ } ) ,
973+ ) ;
974+
975+ expect ( requestState ) . toMatchHandshake ( {
976+ reason : AuthErrorReason . SatelliteCookieNeedsSyncing ,
977+ isSatellite : true ,
978+ domain : 'satellite.dev' ,
979+ signInUrl : 'https://primary.dev/sign-in' ,
980+ } ) ;
981+ expect ( requestState . headers . get ( 'location' ) ) . toEqual (
982+ `https://primary.dev/sign-in?__clerk_redirect_url=http%3A%2F%2Fexample.com%2Fpath%3F__clerk_synced%3Dfalse` ,
983+ ) ;
984+ } ) ;
985+
876986 test ( 'cookieToken: returns handshake when app is not satellite and responds to syncing on dev instances[12y]' , async ( ) => {
877987 const sp = new URLSearchParams ( ) ;
878988 sp . set ( '__clerk_redirect_url' , 'http://localhost:3000' ) ;
0 commit comments