@@ -10,15 +10,19 @@ import Helpers
1010 import FoundationNetworking
1111#endif
1212
13+ typealias AuthClientID = UUID
14+
1315public final class AuthClient : Sendable {
14- private var api : APIClient { Current . api }
15- var configuration : AuthClient . Configuration { Current . configuration }
16- private var codeVerifierStorage : CodeVerifierStorage { Current . codeVerifierStorage }
17- private var date : @Sendable ( ) -> Date { Current . date }
18- private var sessionManager : SessionManager { Current . sessionManager }
19- private var eventEmitter : AuthStateChangeEventEmitter { Current . eventEmitter }
20- private var logger : ( any SupabaseLogger ) ? { Current . configuration. logger }
21- private var storage : any AuthLocalStorage { Current . configuration. localStorage }
16+ let clientID = AuthClientID ( )
17+
18+ private var api : APIClient { Dependencies [ clientID] . api }
19+ var configuration : AuthClient . Configuration { Dependencies [ clientID] . configuration }
20+ private var codeVerifierStorage : CodeVerifierStorage { Dependencies [ clientID] . codeVerifierStorage }
21+ private var date : @Sendable ( ) -> Date { Dependencies [ clientID] . date }
22+ private var sessionManager : SessionManager { Dependencies [ clientID] . sessionManager }
23+ private var eventEmitter : AuthStateChangeEventEmitter { Dependencies [ clientID] . eventEmitter }
24+ private var logger : ( any SupabaseLogger ) ? { Dependencies [ clientID] . configuration. logger }
25+ private var sessionStorage : SessionStorage { Dependencies [ clientID] . sessionStorage }
2226
2327 /// Returns the session, refreshing it if necessary.
2428 ///
@@ -33,31 +37,39 @@ public final class AuthClient: Sendable {
3337 ///
3438 /// The session returned by this property may be expired. Use ``session`` for a session that is guaranteed to be valid.
3539 public var currentSession : Session ? {
36- try ? storage . getSession ( )
40+ try ? sessionStorage . get ( )
3741 }
3842
3943 /// Returns the current user, if any.
4044 ///
4145 /// The user returned by this property may be outdated. Use ``user(jwt:)`` method to get an up-to-date user instance.
4246 public var currentUser : User ? {
43- try ? storage . getSession ( ) ? . user
47+ try ? sessionStorage . get ( ) ? . user
4448 }
4549
4650 /// Namespace for accessing multi-factor authentication API.
47- public let mfa = AuthMFA ( )
51+ public var mfa : AuthMFA {
52+ AuthMFA ( clientID: clientID)
53+ }
54+
4855 /// Namespace for the GoTrue admin methods.
4956 /// - Warning: This methods requires `service_role` key, be careful to never expose `service_role`
5057 /// key in the client.
51- public let admin = AuthAdmin ( )
58+ public var admin : AuthAdmin {
59+ AuthAdmin ( clientID: clientID)
60+ }
5261
5362 /// Initializes a AuthClient with a specific configuration.
5463 ///
5564 /// - Parameters:
5665 /// - configuration: The client configuration.
5766 public init ( configuration: Configuration ) {
58- Current = Dependencies (
67+ Dependencies [ clientID ] = Dependencies (
5968 configuration: configuration,
60- http: HTTPClient ( configuration: configuration)
69+ http: HTTPClient ( configuration: configuration) ,
70+ api: APIClient ( clientID: clientID) ,
71+ sessionStorage: . live( clientID: clientID) ,
72+ sessionManager: . live( clientID: clientID)
6173 )
6274 }
6375
@@ -1065,7 +1077,7 @@ public final class AuthClient: Sendable {
10651077 scopes: scopes,
10661078 redirectTo: redirectTo,
10671079 queryParams: queryParams,
1068- launchURL: { Current . urlOpener. open ( $0) }
1080+ launchURL: { Dependencies [ clientID ] . urlOpener. open ( $0) }
10691081 )
10701082 }
10711083
0 commit comments