()
| 212 | } |
| 213 | |
| 214 | private async refresh(): Promise<void> { |
| 215 | if (!this.listener) { |
| 216 | throw new Error('TokenManager is not running, but refresh was called'); |
| 217 | } |
| 218 | |
| 219 | try { |
| 220 | await this.identityProvider.requestToken().then(this.handleNewToken); |
| 221 | this.retryAttempt = 0; |
| 222 | } catch (error) { |
| 223 | |
| 224 | if (this.shouldRetry(error)) { |
| 225 | this.retryAttempt++; |
| 226 | const retryDelay = this.calculateRetryDelay(); |
| 227 | this.notifyError(`Token refresh failed (attempt ${this.retryAttempt}), retrying in ${retryDelay}ms: ${error}`, true) |
| 228 | this.scheduleNextRefresh(retryDelay); |
| 229 | } else { |
| 230 | this.notifyError(error, false); |
| 231 | this.stop(); |
| 232 | } |
| 233 | } |
| 234 | } |
| 235 | |
| 236 | private handleNewToken = async ({ token: nativeToken, ttlMs }: TokenResponse<T>): Promise<void> => { |
| 237 | if (!this.listener) { |
no test coverage detected