1
1
import { NextRequest , NextResponse } from 'next/server'
2
2
3
- import { envIdCookieName , previewApiKeyCookieName } from './lib/constants/cookies' ;
3
+ import { envIdCookieName , ignoreMissingApiKeyCookieName , previewApiKeyCookieName } from './lib/constants/cookies' ;
4
4
import { createQueryString } from './lib/routing' ;
5
5
import { defaultEnvId } from './lib/utils/env' ;
6
6
@@ -36,27 +36,34 @@ const handleExplicitProjectRoute = (currentEnvId: string) => (prevResponse: Next
36
36
return prevResponse ;
37
37
}
38
38
39
+ if ( request . nextUrl . pathname . includes ( "/api/exit-preview" ) && request . cookies . get ( ignoreMissingApiKeyCookieName ) ) {
40
+ return prevResponse ;
41
+ }
42
+
39
43
if ( routeEnvId === defaultEnvId ) {
40
44
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 ) ;
43
47
44
48
return res
45
49
}
46
50
47
51
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 ) ) ;
49
55
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 ) ;
52
59
53
60
return res ;
54
61
}
55
62
56
63
return NextResponse . redirect ( new URL ( `${ remainingUrl ?? '' } ?${ createQueryString ( Object . fromEntries ( request . nextUrl . searchParams . entries ( ) ) ) } ` , request . nextUrl . origin ) ) ;
57
64
}
58
65
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'
60
67
? NextResponse . rewrite ( new URL ( `/${ currentEnvId } /articles/category/all/page/1` , request . url ) )
61
68
: prevResponse ;
62
69
@@ -72,11 +79,10 @@ const handleArticlesCategoryWithNoPaginationRoute = (currentEnvId: string) => (p
72
79
73
80
const handleEmptyCookies = ( prevResponse : NextResponse , request : NextRequest ) => {
74
81
if ( ! request . cookies . get ( envIdCookieName ) ?. value ) {
75
- prevResponse . cookies . set ( envIdCookieName , defaultEnvId , { path : '/' , sameSite : 'none' , secure : true } )
82
+ prevResponse . cookies . set ( envIdCookieName , defaultEnvId , cookieOptions )
76
83
}
77
84
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 )
80
86
}
81
87
82
88
@@ -101,4 +107,6 @@ export const config = {
101
107
'/((?!api|_next/static|_next/image|favicon.png|getPreviewApiKey|logo.png|callback).*)' ,
102
108
'/'
103
109
] ,
104
- }
110
+ } ;
111
+
112
+ const cookieOptions = { path : '/' , sameSite : 'none' , secure : true } as const ;
0 commit comments