perf: Add simple caching to KeychainTokenProvider
- Cache token and endpoint in memory to avoid repeated keychain access - First call reads from keychain, subsequent calls use cached values - Significantly improves performance for frequent API calls - Simple implementation without unnecessary locking or complexity fix: Properly URL-encode labels parameter for API requests - Add quotes around label values to match API requirements - Fix label filtering for labels with spaces (e.g. 'aa aa') - Ensure proper URL encoding as required by server - Maintains existing pagination and filtering functionality
This commit is contained in:
parent
3ea4e49686
commit
99ef722e7d
@ -10,19 +10,38 @@ protocol TokenProvider {
|
||||
class KeychainTokenProvider: TokenProvider {
|
||||
private let keychainHelper = KeychainHelper.shared
|
||||
|
||||
// Cache to avoid repeated keychain access
|
||||
private var cachedToken: String?
|
||||
private var cachedEndpoint: String?
|
||||
|
||||
func getToken() async -> String? {
|
||||
return keychainHelper.loadToken()
|
||||
if let cached = cachedToken {
|
||||
return cached
|
||||
}
|
||||
|
||||
let token = keychainHelper.loadToken()
|
||||
cachedToken = token
|
||||
return token
|
||||
}
|
||||
|
||||
func getEndpoint() async -> String? {
|
||||
return keychainHelper.loadEndpoint()
|
||||
if let cached = cachedEndpoint {
|
||||
return cached
|
||||
}
|
||||
|
||||
let endpoint = keychainHelper.loadEndpoint()
|
||||
cachedEndpoint = endpoint
|
||||
return endpoint
|
||||
}
|
||||
|
||||
func setToken(_ token: String) async {
|
||||
keychainHelper.saveToken(token)
|
||||
cachedToken = token
|
||||
}
|
||||
|
||||
func clearToken() async {
|
||||
keychainHelper.clearCredentials()
|
||||
cachedToken = nil
|
||||
cachedEndpoint = nil
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user