@@ -55,42 +55,50 @@ private actor LiveSessionManager {
5555
5656 func refreshSession( _ refreshToken: String ) async throws -> Session {
5757 try await SupabaseLoggerTaskLocal . $additionalContext. withValue (
58- merging: [ " refreshID " : . string( UUID ( ) . uuidString) ]
58+ merging: [ " refresh_id " : . string( UUID ( ) . uuidString) ]
5959 ) {
6060 try await trace ( using: logger) {
6161 if let inFlightRefreshTask {
62- logger? . debug ( " refresh already in flight" )
62+ logger? . debug ( " Refresh already in flight" )
6363 return try await inFlightRefreshTask. value
6464 }
6565
6666 inFlightRefreshTask = Task {
67- logger? . debug ( " refresh task started" )
67+ logger? . debug ( " Refresh task started" )
6868
6969 defer {
7070 inFlightRefreshTask = nil
71- logger? . debug ( " refresh task ended" )
71+ logger? . debug ( " Refresh task ended" )
7272 }
7373
74- let session = try await api. execute (
75- HTTPRequest (
76- url: configuration. url. appendingPathComponent ( " token " ) ,
77- method: . post,
78- query: [
79- URLQueryItem ( name: " grant_type " , value: " refresh_token " ) ,
80- ] ,
81- body: configuration. encoder. encode (
82- UserCredentials ( refreshToken: refreshToken)
74+ do {
75+ let session = try await api. execute (
76+ HTTPRequest (
77+ url: configuration. url. appendingPathComponent ( " token " ) ,
78+ method: . post,
79+ query: [
80+ URLQueryItem ( name: " grant_type " , value: " refresh_token " ) ,
81+ ] ,
82+ body: configuration. encoder. encode (
83+ UserCredentials ( refreshToken: refreshToken)
84+ )
8385 )
8486 )
85- )
86- . decoded ( as: Session . self, decoder: configuration. decoder)
87+ . decoded ( as: Session . self, decoder: configuration. decoder)
8788
88- update ( session)
89- eventEmitter. emit ( . tokenRefreshed, session: session)
89+ update ( session)
90+ eventEmitter. emit ( . tokenRefreshed, session: session)
9091
91- await scheduleNextTokenRefresh ( session)
92+ await scheduleNextTokenRefresh ( session)
9293
93- return session
94+ return session
95+ } catch {
96+ logger? . debug ( " Failed to refresh token: \( error) " )
97+ remove ( )
98+ eventEmitter. emit ( . signedOut, session: nil )
99+
100+ throw error
101+ }
94102 }
95103
96104 return try await inFlightRefreshTask!. value
@@ -114,12 +122,12 @@ private actor LiveSessionManager {
114122 merging: [ " caller " : . string( " \( caller) " ) ]
115123 ) {
116124 guard configuration. autoRefreshToken else {
117- logger? . debug ( " auto refresh token disabled" )
125+ logger? . debug ( " Auto refresh token disabled" )
118126 return
119127 }
120128
121129 guard scheduledNextRefreshTask == nil else {
122- logger? . debug ( " refresh task already scheduled" )
130+ logger? . debug ( " Refresh task already scheduled" )
123131 return
124132 }
125133
@@ -133,7 +141,7 @@ private actor LiveSessionManager {
133141 // if expiresIn < 0, it will refresh right away.
134142 let timeToRefresh = max ( expiresIn * 0.9 , 0 )
135143
136- logger? . debug ( " scheduled next token refresh in: \( timeToRefresh) s " )
144+ logger? . debug ( " Scheduled next token refresh in: \( timeToRefresh) s " )
137145
138146 try ? await Task . sleep ( nanoseconds: NSEC_PER_SEC * UInt64( timeToRefresh) )
139147
0 commit comments