11import { NextRequest , NextResponse } from 'next/server'
22
3- import { envIdCookieName , previewApiKeyCookieName } from './lib/constants/cookies' ;
3+ import { envIdCookieName , ignoreMissingApiKeyCookieName , previewApiKeyCookieName } from './lib/constants/cookies' ;
44import { createQueryString } from './lib/routing' ;
55import { defaultEnvId } from './lib/utils/env' ;
66
@@ -36,27 +36,34 @@ const handleExplicitProjectRoute = (currentEnvId: string) => (prevResponse: Next
3636 return prevResponse ;
3737 }
3838
39+ if ( request . nextUrl . pathname . includes ( "/api/exit-preview" ) && request . cookies . get ( ignoreMissingApiKeyCookieName ) ) {
40+ return prevResponse ;
41+ }
42+
3943 if ( routeEnvId === defaultEnvId ) {
4044 const res = NextResponse . redirect ( new URL ( createUrlWithQueryString ( remainingUrl , request . nextUrl . searchParams ) , request . nextUrl . origin ) ) ;
41- res . cookies . set ( envIdCookieName , routeEnvId , { path : '/' , sameSite : 'none' , secure : true } ) ;
42- res . cookies . set ( previewApiKeyCookieName , '' , { path : '/' , sameSite : 'none' , secure : true } ) ;
45+ res . cookies . set ( envIdCookieName , routeEnvId , cookieOptions ) ;
46+ res . cookies . set ( previewApiKeyCookieName , '' , cookieOptions ) ;
4347
4448 return res
4549 }
4650
4751 if ( routeEnvId !== currentEnvId || ! request . cookies . get ( previewApiKeyCookieName ) ) {
48- const res = NextResponse . redirect ( new URL ( `/getPreviewApiKey?path=${ encodeURIComponent ( createUrlWithQueryString ( remainingUrl , request . nextUrl . searchParams . entries ( ) ) ) } ` , request . url ) )
52+ const originalPath = encodeURIComponent ( createUrlWithQueryString ( remainingUrl , request . nextUrl . searchParams . entries ( ) ) ) ;
53+ const redirectPath = `/api/exit-preview?callback=${ encodeURIComponent ( `/getPreviewApiKey?path=${ originalPath } ` ) } ` ;
54+ const res = NextResponse . redirect ( new URL ( redirectPath , request . url ) ) ;
4955
50- res . cookies . set ( envIdCookieName , routeEnvId , { path : '/' , sameSite : 'none' , secure : true } ) ;
51- res . cookies . set ( previewApiKeyCookieName , '' , { path : '/' , sameSite : 'none' , secure : true } ) ;
56+ res . cookies . set ( envIdCookieName , routeEnvId , cookieOptions ) ;
57+ res . cookies . set ( previewApiKeyCookieName , '' , cookieOptions ) ;
58+ res . cookies . set ( ignoreMissingApiKeyCookieName , "true" , cookieOptions ) ;
5259
5360 return res ;
5461 }
5562
5663 return NextResponse . redirect ( new URL ( `${ remainingUrl ?? '' } ?${ createQueryString ( Object . fromEntries ( request . nextUrl . searchParams . entries ( ) ) ) } ` , request . nextUrl . origin ) ) ;
5764}
5865
59- const handleArticlesRoute = ( currentEnvId : string ) => ( prevResponse : NextResponse , request : NextRequest , ) => request . nextUrl . pathname === '/articles'
66+ const handleArticlesRoute = ( currentEnvId : string ) => ( prevResponse : NextResponse , request : NextRequest ) => request . nextUrl . pathname === '/articles'
6067 ? NextResponse . rewrite ( new URL ( `/${ currentEnvId } /articles/category/all/page/1` , request . url ) )
6168 : prevResponse ;
6269
@@ -72,11 +79,10 @@ const handleArticlesCategoryWithNoPaginationRoute = (currentEnvId: string) => (p
7279
7380const handleEmptyCookies = ( prevResponse : NextResponse , request : NextRequest ) => {
7481 if ( ! request . cookies . get ( envIdCookieName ) ?. value ) {
75- prevResponse . cookies . set ( envIdCookieName , defaultEnvId , { path : '/' , sameSite : 'none' , secure : true } )
82+ prevResponse . cookies . set ( envIdCookieName , defaultEnvId , cookieOptions )
7683 }
7784 if ( ! request . cookies . get ( envIdCookieName ) ?. value || request . cookies . get ( envIdCookieName ) ?. value === defaultEnvId ) {
78-
79- prevResponse . cookies . set ( previewApiKeyCookieName , KONTENT_PREVIEW_API_KEY , { path : '/' , sameSite : 'none' , secure : true } )
85+ prevResponse . cookies . set ( previewApiKeyCookieName , KONTENT_PREVIEW_API_KEY , cookieOptions )
8086 }
8187
8288
@@ -101,4 +107,6 @@ export const config = {
101107 '/((?!api|_next/static|_next/image|favicon.png|getPreviewApiKey|logo.png|callback).*)' ,
102108 '/'
103109 ] ,
104- }
110+ } ;
111+
112+ const cookieOptions = { path : '/' , sameSite : 'none' , secure : true } as const ;
0 commit comments