@@ -10,15 +10,19 @@ import Helpers
10
10
import FoundationNetworking
11
11
#endif
12
12
13
+ typealias AuthClientID = UUID
14
+
13
15
public 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 }
22
26
23
27
/// Returns the session, refreshing it if necessary.
24
28
///
@@ -33,31 +37,39 @@ public final class AuthClient: Sendable {
33
37
///
34
38
/// The session returned by this property may be expired. Use ``session`` for a session that is guaranteed to be valid.
35
39
public var currentSession : Session ? {
36
- try ? storage . getSession ( )
40
+ try ? sessionStorage . get ( )
37
41
}
38
42
39
43
/// Returns the current user, if any.
40
44
///
41
45
/// The user returned by this property may be outdated. Use ``user(jwt:)`` method to get an up-to-date user instance.
42
46
public var currentUser : User ? {
43
- try ? storage . getSession ( ) ? . user
47
+ try ? sessionStorage . get ( ) ? . user
44
48
}
45
49
46
50
/// Namespace for accessing multi-factor authentication API.
47
- public let mfa = AuthMFA ( )
51
+ public var mfa : AuthMFA {
52
+ AuthMFA ( clientID: clientID)
53
+ }
54
+
48
55
/// Namespace for the GoTrue admin methods.
49
56
/// - Warning: This methods requires `service_role` key, be careful to never expose `service_role`
50
57
/// key in the client.
51
- public let admin = AuthAdmin ( )
58
+ public var admin : AuthAdmin {
59
+ AuthAdmin ( clientID: clientID)
60
+ }
52
61
53
62
/// Initializes a AuthClient with a specific configuration.
54
63
///
55
64
/// - Parameters:
56
65
/// - configuration: The client configuration.
57
66
public init ( configuration: Configuration ) {
58
- Current = Dependencies (
67
+ Dependencies [ clientID ] = Dependencies (
59
68
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)
61
73
)
62
74
}
63
75
@@ -1065,7 +1077,7 @@ public final class AuthClient: Sendable {
1065
1077
scopes: scopes,
1066
1078
redirectTo: redirectTo,
1067
1079
queryParams: queryParams,
1068
- launchURL: { Current . urlOpener. open ( $0) }
1080
+ launchURL: { Dependencies [ clientID ] . urlOpener. open ( $0) }
1069
1081
)
1070
1082
}
1071
1083
0 commit comments