@@ -5,10 +5,12 @@ import { cookies } from "next/headers";
5
5
import {
6
6
AccessTokenResponse ,
7
7
AccessTokenResponseSchema ,
8
+ RefreshTokenSchema ,
8
9
TokenPairResponseSchema ,
9
10
} from "@/types/Token" ;
10
11
import { LoginCredentials , SignupData } from "@/types/AuthCredentials" ;
11
12
import { LogoutResponse , LogoutResposeSchema } from "@/types/AuthResponses" ;
13
+ import { getAccessToken } from "@/lib/auth" ;
12
14
13
15
export async function login (
14
16
credientials : LoginCredentials
@@ -28,17 +30,17 @@ export async function login(
28
30
29
31
const resObj = await res . json ( ) ;
30
32
31
- const authTokenResponse = TokenPairResponseSchema . parse ( resObj ) ;
33
+ const tokenPairResponse = TokenPairResponseSchema . parse ( resObj ) ;
32
34
const accessTokenResponse = AccessTokenResponseSchema . parse ( resObj ) ;
33
35
34
- if ( authTokenResponse . data ) {
36
+ if ( tokenPairResponse . data ) {
35
37
const cookieStore = cookies ( ) ;
36
- cookieStore . set ( "access_token" , authTokenResponse . data . access_token , {
38
+ cookieStore . set ( "access_token" , tokenPairResponse . data . access_token , {
37
39
httpOnly : true ,
38
40
// secure: true, // Uncomment this line when using HTTPS
39
41
sameSite : "strict" ,
40
42
} ) ;
41
- cookieStore . set ( "refresh_token" , authTokenResponse . data . refresh_token , {
43
+ cookieStore . set ( "refresh_token" , tokenPairResponse . data . refresh_token , {
42
44
maxAge : 60 * 60 * 24 * 7 , // 7 days
43
45
httpOnly : true ,
44
46
// secure: true, // Uncomment this line when using HTTPS
@@ -73,17 +75,17 @@ export async function signup(
73
75
74
76
const resObj = await res . json ( ) ;
75
77
76
- const authTokenResponse = TokenPairResponseSchema . parse ( resObj ) ;
78
+ const tokenPairResponse = TokenPairResponseSchema . parse ( resObj ) ;
77
79
const accessTokenResponse = AccessTokenResponseSchema . parse ( resObj ) ;
78
80
79
- if ( authTokenResponse . data ) {
81
+ if ( tokenPairResponse . data ) {
80
82
const cookieStore = cookies ( ) ;
81
- cookieStore . set ( "access_token" , authTokenResponse . data . access_token , {
83
+ cookieStore . set ( "access_token" , tokenPairResponse . data . access_token , {
82
84
httpOnly : true ,
83
85
// secure: true, // Uncomment this line when using HTTPS
84
86
sameSite : "strict" ,
85
87
} ) ;
86
- cookieStore . set ( "refresh_token" , authTokenResponse . data . refresh_token , {
88
+ cookieStore . set ( "refresh_token" , tokenPairResponse . data . refresh_token , {
87
89
maxAge : 60 * 60 * 24 * 7 , // 7 days
88
90
httpOnly : true ,
89
91
// secure: true, // Uncomment this line when using HTTPS
@@ -102,7 +104,7 @@ export async function signup(
102
104
103
105
export async function logout ( ) : Promise < LogoutResponse > {
104
106
try {
105
- const access_token = cookies ( ) . get ( "access_token" ) ;
107
+ const access_token = getAccessToken ( ) ;
106
108
107
109
const res : Response = await fetch (
108
110
process . env . PUBLIC_API_URL + `/api/auth/logout` ,
@@ -130,3 +132,51 @@ export async function logout(): Promise<LogoutResponse> {
130
132
} ;
131
133
}
132
134
}
135
+
136
+ export async function refreshAccessToken ( ) : Promise < AccessTokenResponse > {
137
+ try {
138
+ const cookieStore = cookies ( ) ;
139
+ const refresh_token = RefreshTokenSchema . parse (
140
+ cookieStore . get ( "refresh_token" ) ?. value
141
+ ) ;
142
+
143
+ const res : Response = await fetch (
144
+ process . env . PUBLIC_API_URL + `/api/auth/refresh` ,
145
+ {
146
+ cache : "no-cache" ,
147
+ method : "POST" ,
148
+ headers : {
149
+ "Content-Type" : "application/json" ,
150
+ Authorization : `Bearer ${ refresh_token } ` ,
151
+ } ,
152
+ }
153
+ ) ;
154
+
155
+ const resObj = await res . json ( ) ;
156
+
157
+ const tokenPairResponse = TokenPairResponseSchema . parse ( resObj ) ;
158
+ const accessTokenResponse = AccessTokenResponseSchema . parse ( resObj ) ;
159
+
160
+ if ( tokenPairResponse . data ) {
161
+ const cookieStore = cookies ( ) ;
162
+ cookieStore . set ( "access_token" , tokenPairResponse . data . access_token , {
163
+ httpOnly : true ,
164
+ // secure: true, // Uncomment this line when using HTTPS
165
+ sameSite : "strict" ,
166
+ } ) ;
167
+ cookieStore . set ( "refresh_token" , tokenPairResponse . data . refresh_token , {
168
+ maxAge : 60 * 60 * 24 * 7 , // 7 days
169
+ httpOnly : true ,
170
+ // secure: true, // Uncomment this line when using HTTPS
171
+ sameSite : "strict" ,
172
+ } ) ;
173
+ }
174
+
175
+ return accessTokenResponse ;
176
+ } catch ( error ) {
177
+ return {
178
+ statusCode : 500 ,
179
+ message : String ( error ) ,
180
+ } ;
181
+ }
182
+ }
0 commit comments