@@ -13,12 +13,16 @@ import 'package:logging/logging.dart';
1313class TokenCache {
1414 /// Create a [TokenCache] instance
1515 ///
16- TokenCache (this ._publicKey, this ._persistor) {
17- _init ();
18- }
16+ TokenCache (this ._publicKey, this ._persistor);
1917
2018 final String _publicKey;
21- final Persistor ? _persistor;
19+ final Persistor _persistor;
20+
21+ DateTime _sessionTokenExpiry = DateTime .fromMillisecondsSinceEpoch (0 );
22+
23+ /// the date at which, if in the future, the current [sessionToken]
24+ /// is due to expire
25+ DateTime get sessionTokenExpiry => _sessionTokenExpiry;
2226
2327 static const _tokenExpiryBuffer = Duration (seconds: 10 );
2428
@@ -28,14 +32,13 @@ class TokenCache {
2832 String _sessionId = '' ;
2933 String _clientToken = '' ;
3034 String _sessionToken = '' ;
31- DateTime _sessionTokenExpiry = DateTime .fromMillisecondsSinceEpoch (0 );
3235
3336 /// Whether or not the [sessionToken] can be refreshed
3437 bool get canRefreshSessionToken =>
3538 clientToken.isNotEmpty && sessionId.isNotEmpty;
3639
3740 bool get _sessionTokenHasExpired =>
38- DateTime .now ().isAfter (_sessionTokenExpiry );
41+ DateTime .now ().isAfter (sessionTokenExpiry );
3942
4043 String get _sessionIdKey => '_clerkSessionId_${_publicKey .hashCode }' ;
4144
@@ -53,19 +56,23 @@ class TokenCache {
5356 _clientTokenKey,
5457 ];
5558
56- Future <void > _init () async {
59+ /// Initialise the cache
60+ Future <void > initialize () async {
5761 _rsaKey = RSAPublicKey (_publicKey);
58- if (_persistor case Persistor persistor) {
59- final [sessionId, sessionToken, ms, clientToken] = await Future .wait (
60- _persistorKeys.map (persistor.read),
61- );
62-
63- _sessionId = sessionId ?? '' ;
64- _sessionToken = sessionToken ?? '' ;
65- _clientToken = clientToken ?? '' ;
66- _sessionTokenExpiry =
67- DateTime .fromMillisecondsSinceEpoch (int .tryParse (ms ?? '' ) ?? 0 );
68- }
62+
63+ // Read all stored variables first before assignment
64+ final sessionId = await _persistor.read (_sessionIdKey) ?? '' ;
65+ final sessionToken = await _persistor.read (_sessionTokenKey) ?? '' ;
66+ final clientToken = await _persistor.read (_clientTokenKey) ?? '' ;
67+ final milliseconds = await _persistor.read (_sessionTokenExpiryKey) ?? '' ;
68+ final sessionTokenExpiry = DateTime .fromMillisecondsSinceEpoch (
69+ int .tryParse (milliseconds) ?? 0 ,
70+ );
71+
72+ _sessionId = sessionId;
73+ _sessionToken = sessionToken;
74+ _clientToken = clientToken;
75+ _sessionTokenExpiry = sessionTokenExpiry;
6976 }
7077
7178 /// Reset the [TokenCache]
@@ -76,7 +83,7 @@ class TokenCache {
7683 _sessionToken = '' ;
7784 _sessionTokenExpiry = DateTime .fromMillisecondsSinceEpoch (0 );
7885 for (final key in _persistorKeys) {
79- _persistor? .delete (key);
86+ _persistor.delete (key);
8087 }
8188 }
8289
@@ -86,7 +93,7 @@ class TokenCache {
8693 /// Set the [sessionId]
8794 set sessionId (String id) {
8895 _sessionId = id;
89- _persistor? .write (_sessionIdKey, id);
96+ _persistor.write (_sessionIdKey, id);
9097 }
9198
9299 /// Get the [clientToken]
@@ -99,7 +106,7 @@ class TokenCache {
99106 try {
100107 JWT .verify (token, _rsaKey);
101108 _clientToken = token;
102- _persistor? .write (_clientTokenKey, token);
109+ _persistor.write (_clientTokenKey, token);
103110 } catch (error, stackTrace) {
104111 _logger.severe ('ERROR SETTING CLIENT TOKEN: $error ' , error, stackTrace);
105112 }
@@ -117,15 +124,16 @@ class TokenCache {
117124
118125 try {
119126 final jwt = JWT .verify (token, _rsaKey);
120- final exp = jwt.payload['exp' ];
121- if (exp is int ) {
122- final expiry = DateTime .fromMillisecondsSinceEpoch (exp * 1000 );
127+ final expirySeconds = jwt.payload['exp' ];
128+ if (expirySeconds is int ) {
129+ final expiry = DateTime .fromMillisecondsSinceEpoch (
130+ expirySeconds * Duration .millisecondsPerSecond);
123131 _sessionTokenExpiry = expiry.subtract (_tokenExpiryBuffer);
124132 _sessionToken = token;
125- _persistor? .write (_sessionTokenKey, token);
126- _persistor? .write (
133+ _persistor.write (_sessionTokenKey, token);
134+ _persistor.write (
127135 _sessionTokenExpiryKey,
128- _sessionTokenExpiry .millisecondsSinceEpoch.toString (),
136+ sessionTokenExpiry .millisecondsSinceEpoch.toString (),
129137 );
130138 }
131139 } catch (error, _) {
0 commit comments