@@ -63,34 +63,22 @@ const AccountResponseSchema = z.object({
6363 ) ,
6464} )
6565
66- async function getTokenAndUser (
67- c : Context < AuthContext > ,
68- code : string ,
69- code_verifier : string
70- ) : Promise < {
71- accessToken : string
72- refreshToken : string
73- user : UserSchema [ 'result' ]
74- accounts : AccountSchema [ 'result' ]
75- } > {
76- // Exchange the code for an access token
77- const { access_token : accessToken , refresh_token : refreshToken } = await getAuthToken ( {
78- client_id : c . env . CLOUDFLARE_CLIENT_ID ,
79- client_secret : c . env . CLOUDFLARE_CLIENT_SECRET ,
80- redirect_uri : new URL ( '/oauth/callback' , c . req . url ) . href ,
81- code,
82- code_verifier,
83- } )
66+ export async function getUserAndAccounts (
67+ accessToken : string ,
68+ devModeHeaders ?: HeadersInit
69+ ) : Promise < { user : UserSchema [ 'result' ] ; accounts : AccountSchema [ 'result' ] } > {
70+ const headers = devModeHeaders
71+ ? devModeHeaders
72+ : {
73+ Authorization : `Bearer ${ accessToken } ` ,
74+ }
75+
8476 const [ userResponse , accountsResponse ] = await Promise . all ( [
8577 fetch ( 'https://api.cloudflare.com/client/v4/user' , {
86- headers : {
87- Authorization : `Bearer ${ accessToken } ` ,
88- } ,
78+ headers,
8979 } ) ,
9080 fetch ( 'https://api.cloudflare.com/client/v4/accounts' , {
91- headers : {
92- Authorization : `Bearer ${ accessToken } ` ,
93- } ,
81+ headers,
9482 } ) ,
9583 ] )
9684
@@ -107,6 +95,30 @@ async function getTokenAndUser(
10795 const { result : user } = UserResponseSchema . parse ( await userResponse . json ( ) )
10896 const { result : accounts } = AccountResponseSchema . parse ( await accountsResponse . json ( ) )
10997
98+ return { user, accounts }
99+ }
100+
101+ async function getTokenAndUserDetails (
102+ c : Context < AuthContext > ,
103+ code : string ,
104+ code_verifier : string
105+ ) : Promise < {
106+ accessToken : string
107+ refreshToken : string
108+ user : UserSchema [ 'result' ]
109+ accounts : AccountSchema [ 'result' ]
110+ } > {
111+ // Exchange the code for an access token
112+ const { access_token : accessToken , refresh_token : refreshToken } = await getAuthToken ( {
113+ client_id : c . env . CLOUDFLARE_CLIENT_ID ,
114+ client_secret : c . env . CLOUDFLARE_CLIENT_SECRET ,
115+ redirect_uri : new URL ( '/oauth/callback' , c . req . url ) . href ,
116+ code,
117+ code_verifier,
118+ } )
119+
120+ const { user, accounts } = await getUserAndAccounts ( accessToken )
121+
110122 return { accessToken, refreshToken, user, accounts }
111123}
112124
@@ -217,7 +229,7 @@ export function createAuthHandlers({
217229 }
218230
219231 const [ { accessToken, refreshToken, user, accounts } ] = await Promise . all ( [
220- getTokenAndUser ( c , code , oauthReqInfo . codeVerifier ) ,
232+ getTokenAndUserDetails ( c , code , oauthReqInfo . codeVerifier ) ,
221233 c . env . OAUTH_PROVIDER . createClient ( {
222234 clientId : oauthReqInfo . clientId ,
223235 tokenEndpointAuthMethod : 'none' ,
0 commit comments