| 95 | } |
| 96 | |
| 97 | func (tp *TokenProvider) GetToken() (string, errors.Error) { |
| 98 | tp.mu.Lock() |
| 99 | defer tp.mu.Unlock() |
| 100 | |
| 101 | if tp.needsRefresh() { |
| 102 | if tp.logger != nil { |
| 103 | expiresStr := "unknown" |
| 104 | if tp.conn.TokenExpiresAt != nil { |
| 105 | expiresStr = tp.conn.TokenExpiresAt.Format(time.RFC3339) |
| 106 | } |
| 107 | tp.logger.Info("Proactive token refresh triggered for connection %d (token expires at %s)", |
| 108 | tp.conn.ID, expiresStr) |
| 109 | } |
| 110 | if err := tp.refreshToken(); err != nil { |
| 111 | return "", err |
| 112 | } |
| 113 | } |
| 114 | return tp.conn.Token, nil |
| 115 | } |
| 116 | |
| 117 | func (tp *TokenProvider) needsRefresh() bool { |
| 118 | buffer := DefaultRefreshBuffer |