Skip to content

Commit 04ccd3e

Browse files
committed
1.39.0
1 parent 56b185c commit 04ccd3e

File tree

1 file changed

+38
-2
lines changed

1 file changed

+38
-2
lines changed

Sources/SwiftAPIClient/Modifiers/TokenRefresher/TokenRefresher.swift

Lines changed: 38 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,24 @@ public extension APIClient {
1313
/// - auth: The closure that creates an `AuthModifier` for the new token. Default to `.bearer(token:)`.
1414
///
1515
/// - Warning: Don't use this modifier with `.auth(_ modifier:)` as it will be override it.
16+
///
17+
/// ### Example Usage:
18+
/// #### Initial Token Request
19+
/// ```swift
20+
/// let client = APIClient()
21+
/// .tokenRefresher { refreshToken, client, _ in
22+
/// let response: AuthResponse = try await client("refresh").post(RefreshRequest(token: refreshToken)))
23+
/// return (response.accessToken, response.refreshToken, response.expiryDate)
24+
/// }
25+
///
26+
/// func login(_ body: LoginBody) async throws {
27+
/// let response: AuthResponse = try await client("login").auth(enabled: false).post(body)
28+
/// // Tokens must be cached.
29+
/// try await SecureCacheService.keychain.save(response.accessToken, for: .accessToken)
30+
/// try await SecureCacheService.keychain.save(response.refreshToken, for: .refreshToken)
31+
/// try await SecureCacheService.keychain.save(response.expiryDate, for: .expiryDate)
32+
/// }
33+
/// ```
1634
func tokenRefresher(
1735
cacheService: SecureCacheService = valueFor(live: .keychain, test: .mock),
1836
expiredStatusCodes: Set<HTTPResponse.Status> = [.unauthorized],
@@ -41,6 +59,24 @@ public extension APIClient {
4159
/// - auth: The closure that creates an `AuthModifier` for the new token. Default to `.bearer(token:)`.
4260
///
4361
/// - Warning: Don't use this modifier with `.auth(_ modifier:)` as it will be override it.
62+
///
63+
/// ### Example Usage:
64+
/// #### Initial Token Request
65+
/// ```swift
66+
/// let client = APIClient()
67+
/// .tokenRefresher(cacheService: cacheService) { refreshToken, client, _ in
68+
/// let response: AuthResponse = try await client("refresh").post(RefreshRequest(token: refreshToken)))
69+
/// return (response.accessToken, response.refreshToken, response.expiryDate)
70+
/// }
71+
///
72+
/// func login(_ body: LoginBody) async throws {
73+
/// let response: AuthResponse = try await client("login").auth(enabled: false).post(body)
74+
/// // Tokens must be cached.
75+
/// try await cacheService.save(response.accessToken, for: .accessToken)
76+
/// try await cacheService.save(response.refreshToken, for: .refreshToken)
77+
/// try await cacheService.save(response.expiryDate, for: .expiryDate)
78+
/// }
79+
/// ```
4480
func tokenRefresher(
4581
cacheService: SecureCacheService,
4682
expiredStatusCodes: Set<HTTPResponse.Status> = [.unauthorized],
@@ -148,6 +184,6 @@ public struct TokenRefresherMiddleware: HTTPClientMiddleware {
148184
}
149185

150186
public struct TokenNotFound: Error {
151-
152-
public init() {}
187+
188+
public init() {}
153189
}

0 commit comments

Comments
 (0)