@@ -4,29 +4,14 @@ import { createLogger } from '@sim/logger'
44import { and , desc , eq , inArray } from 'drizzle-orm'
55import { getSession } from '@/lib/auth'
66import { refreshOAuthToken } from '@/lib/oauth'
7+ import {
8+ getMicrosoftRefreshTokenExpiry ,
9+ isMicrosoftProvider ,
10+ PROACTIVE_REFRESH_THRESHOLD_DAYS ,
11+ } from '@/lib/oauth/microsoft'
712
813const logger = createLogger ( 'OAuthUtilsAPI' )
914
10- const MICROSOFT_REFRESH_TOKEN_LIFETIME_DAYS = 90
11- const PROACTIVE_REFRESH_THRESHOLD_DAYS = 7
12-
13- const MICROSOFT_PROVIDERS = new Set ( [
14- 'microsoft-excel' ,
15- 'microsoft-planner' ,
16- 'microsoft-teams' ,
17- 'outlook' ,
18- 'onedrive' ,
19- 'sharepoint' ,
20- ] )
21-
22- function isMicrosoftProvider ( providerId : string ) : boolean {
23- return MICROSOFT_PROVIDERS . has ( providerId )
24- }
25-
26- function getMicrosoftRefreshTokenExpiry ( ) : Date {
27- return new Date ( Date . now ( ) + MICROSOFT_REFRESH_TOKEN_LIFETIME_DAYS * 24 * 60 * 60 * 1000 )
28- }
29-
3015interface AccountInsertData {
3116 id : string
3217 userId : string
@@ -264,6 +249,10 @@ export async function refreshAccessTokenIfNeeded(
264249 userId : credential . userId ,
265250 hasRefreshToken : ! ! credential . refreshToken ,
266251 } )
252+ if ( ! accessTokenNeedsRefresh && accessToken ) {
253+ logger . info ( `[${ requestId } ] Proactive refresh failed but access token still valid` )
254+ return accessToken
255+ }
267256 return null
268257 }
269258
@@ -297,6 +286,10 @@ export async function refreshAccessTokenIfNeeded(
297286 credentialId,
298287 userId : credential . userId ,
299288 } )
289+ if ( ! accessTokenNeedsRefresh && accessToken ) {
290+ logger . info ( `[${ requestId } ] Proactive refresh failed but access token still valid` )
291+ return accessToken
292+ }
300293 return null
301294 }
302295 } else if ( ! accessToken ) {
@@ -351,6 +344,10 @@ export async function refreshTokenIfNeeded(
351344
352345 if ( ! refreshResult ) {
353346 logger . error ( `[${ requestId } ] Failed to refresh token for credential` )
347+ if ( ! accessTokenNeedsRefresh && credential . accessToken ) {
348+ logger . info ( `[${ requestId } ] Proactive refresh failed but access token still valid` )
349+ return { accessToken : credential . accessToken , refreshed : false }
350+ }
354351 throw new Error ( 'Failed to refresh token' )
355352 }
356353
@@ -393,6 +390,11 @@ export async function refreshTokenIfNeeded(
393390 }
394391 }
395392
393+ if ( ! accessTokenNeedsRefresh && credential . accessToken ) {
394+ logger . info ( `[${ requestId } ] Proactive refresh failed but access token still valid` )
395+ return { accessToken : credential . accessToken , refreshed : false }
396+ }
397+
396398 logger . error ( `[${ requestId } ] Refresh failed and no valid token found in DB` , error )
397399 throw error
398400 }
0 commit comments