@@ -17,6 +17,8 @@ public final class AuthClient: Sendable {
17
17
private var date : @Sendable ( ) -> Date { Current . date }
18
18
private var sessionManager : SessionManager { Current . sessionManager }
19
19
private var eventEmitter : AuthStateChangeEventEmitter { Current . eventEmitter }
20
+ private var logger : ( any SupabaseLogger ) ? { Current . logger }
21
+ private var storage : any AuthLocalStorage { Current . configuration. localStorage }
20
22
21
23
/// Returns the session, refreshing it if necessary.
22
24
///
@@ -27,6 +29,20 @@ public final class AuthClient: Sendable {
27
29
}
28
30
}
29
31
32
+ /// Returns the current session, if any.
33
+ ///
34
+ /// The session returned by this property may be expired. Use ``session`` for a session that is guaranteed to be valid.
35
+ public var currentSession : Session ? {
36
+ try ? storage. getSession ( )
37
+ }
38
+
39
+ /// Returns the current user, if any.
40
+ ///
41
+ /// The user returned by this property may be outdated. Use ``user(jwt:)`` method to get an up-to-date user instance.
42
+ public var currentUser : User ? {
43
+ try ? storage. getSession ( ) ? . user
44
+ }
45
+
30
46
/// Namespace for accessing multi-factor authentication API.
31
47
public let mfa = AuthMFA ( )
32
48
/// Namespace for the GoTrue admin methods.
@@ -41,9 +57,6 @@ public final class AuthClient: Sendable {
41
57
public init ( configuration: Configuration ) {
42
58
Current = Dependencies (
43
59
configuration: configuration,
44
- sessionRefresher: SessionRefresher { [ weak self] in
45
- try await self ? . refreshSession ( refreshToken: $0) ?? . empty
46
- } ,
47
60
http: HTTPClient ( configuration: configuration)
48
61
)
49
62
}
@@ -158,13 +171,14 @@ public final class AuthClient: Sendable {
158
171
159
172
private func _signUp( request: HTTPRequest ) async throws -> AuthResponse {
160
173
await sessionManager. remove ( )
174
+
161
175
let response = try await api. execute ( request) . decoded (
162
176
as: AuthResponse . self,
163
177
decoder: configuration. decoder
164
178
)
165
179
166
180
if let session = response. session {
167
- try await sessionManager. update ( session)
181
+ await sessionManager. update ( session)
168
182
eventEmitter. emit ( . signedIn, session: session)
169
183
}
170
184
@@ -264,7 +278,7 @@ public final class AuthClient: Sendable {
264
278
decoder: configuration. decoder
265
279
)
266
280
267
- try await sessionManager. update ( session)
281
+ await sessionManager. update ( session)
268
282
eventEmitter. emit ( . signedIn, session: session)
269
283
270
284
return session
@@ -445,7 +459,7 @@ public final class AuthClient: Sendable {
445
459
446
460
codeVerifierStorage. set ( nil )
447
461
448
- try await sessionManager. update ( session)
462
+ await sessionManager. update ( session)
449
463
eventEmitter. emit ( . signedIn, session: session)
450
464
451
465
return session
@@ -640,7 +654,7 @@ public final class AuthClient: Sendable {
640
654
user: user
641
655
)
642
656
643
- try await sessionManager. update ( session)
657
+ await sessionManager. update ( session)
644
658
eventEmitter. emit ( . signedIn, session: session)
645
659
646
660
if let type = params [ " type " ] , type == " recovery " {
@@ -688,7 +702,7 @@ public final class AuthClient: Sendable {
688
702
)
689
703
}
690
704
691
- try await sessionManager. update ( session)
705
+ await sessionManager. update ( session)
692
706
eventEmitter. emit ( . signedIn, session: session)
693
707
return session
694
708
}
@@ -805,7 +819,7 @@ public final class AuthClient: Sendable {
805
819
)
806
820
807
821
if let session = response. session {
808
- try await sessionManager. update ( session)
822
+ await sessionManager. update ( session)
809
823
eventEmitter. emit ( . signedIn, session: session)
810
824
}
811
825
@@ -889,20 +903,6 @@ public final class AuthClient: Sendable {
889
903
)
890
904
}
891
905
892
- /// Returns the current session, if any.
893
- ///
894
- /// The session returned by this property may be expired. Use ``session`` for a session that is guaranteed to be valid.
895
- public var currentSession : Session ? {
896
- try ? configuration. localStorage. getSession ( ) ? . session
897
- }
898
-
899
- /// Returns the current user, if any.
900
- ///
901
- /// The user returned by this property may be outdated. Use ``user(jwt:)`` method to get an up-to-date user instance.
902
- public var currentUser : User ? {
903
- try ? configuration. localStorage. getSession ( ) ? . session. user
904
- }
905
-
906
906
/// Gets the current user details if there is an existing session.
907
907
/// - Parameter jwt: Takes in an optional access token jwt. If no jwt is provided, user() will
908
908
/// attempt to get the jwt from the current session.
@@ -945,7 +945,7 @@ public final class AuthClient: Sendable {
945
945
)
946
946
) . decoded ( as: User . self, decoder: configuration. decoder)
947
947
session. user = updatedUser
948
- try await sessionManager. update ( session)
948
+ await sessionManager. update ( session)
949
949
eventEmitter. emit ( . userUpdated, session: session)
950
950
return updatedUser
951
951
}
@@ -1094,30 +1094,11 @@ public final class AuthClient: Sendable {
1094
1094
/// - Returns: A new session.
1095
1095
@discardableResult
1096
1096
public func refreshSession( refreshToken: String ? = nil ) async throws -> Session {
1097
- var credentials = UserCredentials ( refreshToken: refreshToken)
1098
- if credentials. refreshToken == nil {
1099
- credentials. refreshToken = try await sessionManager. session ( shouldValidateExpiration: false )
1100
- . refreshToken
1097
+ guard let refreshToken = refreshToken ?? currentSession? . refreshToken else {
1098
+ throw AuthError . sessionNotFound
1101
1099
}
1102
1100
1103
- let session = try await api. execute (
1104
- . init(
1105
- url: configuration. url. appendingPathComponent ( " token " ) ,
1106
- method: . post,
1107
- query: [ URLQueryItem ( name: " grant_type " , value: " refresh_token " ) ] ,
1108
- body: configuration. encoder. encode ( credentials)
1109
- )
1110
- ) . decoded ( as: Session . self, decoder: configuration. decoder)
1111
-
1112
- if session. user. phoneConfirmedAt != nil || session. user. emailConfirmedAt != nil
1113
- || session
1114
- . user. confirmedAt != nil
1115
- {
1116
- try await sessionManager. update ( session)
1117
- eventEmitter. emit ( . tokenRefreshed, session: session)
1118
- }
1119
-
1120
- return session
1101
+ return try await sessionManager. refreshSession ( refreshToken)
1121
1102
}
1122
1103
1123
1104
private func emitInitialSession( forToken token: ObservationToken ) async {
0 commit comments