@@ -77,6 +77,39 @@ export class TokenManager {
77
77
* This will ensure `this.#storage` is always the latest version.
78
78
*/
79
79
this . #migrate( ) ;
80
+ /**
81
+ * Build the initial cache of tokens by scope.
82
+ */
83
+ this . #buildByScopeCache( ) ;
84
+ }
85
+
86
+ #buildByScopeCache( ) {
87
+ const { tokens } = this . #storage. state ;
88
+ this . #byScopeCache = Object . values ( tokens ) . reduce ( ( acc : ByScopeCache , token ) => {
89
+ token . scope . split ( ' ' ) . forEach ( ( scope ) => {
90
+ /**
91
+ * If there isn't an existing token for the scope, add it to the cache.
92
+ */
93
+ if ( ! acc [ scope ] ) {
94
+ acc [ scope ] = token . access_token ;
95
+ return ;
96
+ }
97
+ /**
98
+ * If there is an existing token for the scope, compare the expiration times and keep the token that expires later.
99
+ */
100
+ const existing = tokens [ acc [ scope ] ] ;
101
+ /**
102
+ * If the existing token or the new token is missing the expiration metadata, skip the comparison.
103
+ */
104
+ if ( ! existing . __metadata ?. expires || ! token . __metadata ?. expires ) {
105
+ return ;
106
+ }
107
+ if ( existing . __metadata . expires < token . __metadata . expires ) {
108
+ acc [ scope ] = token . access_token ;
109
+ }
110
+ } ) ;
111
+ return acc ;
112
+ } , { } ) ;
80
113
}
81
114
82
115
/**
@@ -105,31 +138,7 @@ export class TokenManager {
105
138
/**
106
139
* When the storage is update, we need to rebuild the cache of tokens by scope.
107
140
*/
108
- this . #byScopeCache = Object . values ( value . state . tokens ) . reduce ( ( acc : ByScopeCache , token ) => {
109
- token . scope . split ( ' ' ) . forEach ( ( scope ) => {
110
- /**
111
- * If there isn't an existing token for the scope, add it to the cache.
112
- */
113
- if ( ! acc [ scope ] ) {
114
- acc [ scope ] = token . access_token ;
115
- return ;
116
- }
117
- /**
118
- * If there is an existing token for the scope, compare the expiration times and keep the token that expires later.
119
- */
120
- const existing = value . state . tokens [ acc [ scope ] ] ;
121
- /**
122
- * If the existing token or the new token is missing the expiration metadata, skip the comparison.
123
- */
124
- if ( ! existing . __metadata ?. expires || ! token . __metadata ?. expires ) {
125
- return ;
126
- }
127
- if ( existing . __metadata . expires < token . __metadata . expires ) {
128
- acc [ scope ] = token . access_token ;
129
- }
130
- } ) ;
131
- return acc ;
132
- } , { } ) ;
141
+ this . #buildByScopeCache( ) ;
133
142
}
134
143
135
144
/**
0 commit comments