Add configurable token providers#346
Conversation
240909e to
f6d973b
Compare
There was a problem hiding this comment.
Basically the previous TokenProvider with a new name
f6d973b to
34cdb29
Compare
There was a problem hiding this comment.
Pull request overview
This PR introduces a pluggable token acquisition strategy by replacing the previous built-in token logic with a TokenProvider interface, plus default (auto-refresh) and manual-refresh implementations. It updates the API client initialization path to accept a custom provider via CustomOptions, and adjusts tests/docs accordingly.
Changes:
- Replace the old concrete
TokenProviderclass with aTokenProviderinterface plusAutoRefreshTokenProviderandManualRefreshTokenProviderimplementations. - Update
IncogniaAPI/TokenAwareNetworkingClientto use an injected token provider (defaulting to auto-refresh when none is configured). - Update/add tests and README documentation for the new configuration and manual refresh workflow.
Reviewed changes
Copilot reviewed 17 out of 17 changed files in this pull request and generated 7 comments.
Show a summary per file
| File | Description |
|---|---|
| src/test/java/com/incognia/api/clients/TokenProviderTest.java | Removes legacy token provider tests tied to the old implementation. |
| src/test/java/com/incognia/api/clients/TokenAwareNetworkingClientTest.java | Adds coverage for manual-refresh behavior and fail-fast scenarios. |
| src/test/java/com/incognia/api/clients/ManualRefreshTokenProviderTest.java | Adds unit tests for manual refresh provider semantics. |
| src/test/java/com/incognia/api/clients/AutoRefreshTokenProviderTest.java | Adds unit tests for auto-refresh provider semantics. |
| src/test/java/com/incognia/api/IncogniaAPITest.java | Adds tests for wiring custom/default token providers into IncogniaAPI. |
| src/main/java/com/incognia/common/utils/CustomOptions.java | Adds tokenProvider option for client initialization. |
| src/main/java/com/incognia/common/exceptions/TokenNotFoundException.java | Introduces exception for “manual provider has no cached token”. |
| src/main/java/com/incognia/common/exceptions/TokenExpiredException.java | Introduces exception for “manual provider token is expired”. |
| src/main/java/com/incognia/common/Token.java | Adds a new value type representing token + expiry. |
| src/main/java/com/incognia/api/clients/TokenResponse.java | Removes computed expiresAt from the raw token endpoint DTO. |
| src/main/java/com/incognia/api/clients/TokenRequester.java | Extracts token HTTP request logic into a dedicated helper. |
| src/main/java/com/incognia/api/clients/TokenProvider.java | Converts token provider into a public interface returning Token. |
| src/main/java/com/incognia/api/clients/TokenAwareNetworkingClient.java | Uses injected provider to build auth headers per request. |
| src/main/java/com/incognia/api/clients/ManualRefreshTokenProvider.java | Adds manual refresh provider (explicit refresh(), fail-fast getToken()). |
| src/main/java/com/incognia/api/clients/AutoRefreshTokenProvider.java | Adds auto-refresh provider (refresh-on-demand with locking). |
| src/main/java/com/incognia/api/IncogniaAPI.java | Wires CustomOptions.tokenProvider, defaulting to auto-refresh. |
| README.md | Documents how to configure and schedule manual token refresh. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
34cdb29 to
d800412
Compare
1463c5b to
fcba6e1
Compare
There was a problem hiding this comment.
Pull request overview
Adds a pluggable token-provider mechanism so SDK users can either use the default auto-refresh behavior or supply their own token lifecycle strategy (including a manual-refresh provider), with docs and tests updated accordingly.
Changes:
- Replaces the concrete
TokenProviderimplementation with aTokenProviderinterface plusAutoRefreshTokenProviderandManualRefreshTokenProviderimplementations. - Wires
CustomOptions/IncogniaAPIto accept an optional customTokenProvider, defaulting to auto-refresh. - Updates tests and README to cover/manual-refresh usage and new behaviors.
Reviewed changes
Copilot reviewed 17 out of 18 changed files in this pull request and generated 2 comments.
Show a summary per file
| File | Description |
|---|---|
| src/test/java/com/incognia/api/clients/TokenProviderTest.java | Removes legacy TokenProvider tests (replaced by new provider tests). |
| src/test/java/com/incognia/api/clients/TokenAwareNetworkingClientTest.java | Adds coverage for manual provider behavior and fail-fast cases. |
| src/test/java/com/incognia/api/clients/ManualRefreshTokenProviderTest.java | Adds tests for manual token refresh, missing token, and expired token. |
| src/test/java/com/incognia/api/clients/AutoRefreshTokenProviderTest.java | Adds tests for auto-refresh provider caching and refresh behavior. |
| src/test/java/com/incognia/api/IncogniaAPITest.java | Adds tests verifying custom token provider injection via CustomOptions. |
| src/main/java/com/incognia/common/utils/CustomOptions.java | Adds tokenProvider option for client configuration. |
| src/main/java/com/incognia/common/exceptions/TokenNotFoundException.java | Introduces exception for missing manually-managed token. |
| src/main/java/com/incognia/common/exceptions/TokenExpiredException.java | Introduces exception for expired manually-managed token. |
| src/main/java/com/incognia/common/Token.java | Adds new immutable token model with expiresAt and isExpired(). |
| src/main/java/com/incognia/api/clients/TokenResponse.java | Simplifies token response model (removes computed expiresAt). |
| src/main/java/com/incognia/api/clients/TokenRequester.java | Adds internal helper to request tokens and map to Token. |
| src/main/java/com/incognia/api/clients/TokenProvider.java | Converts to public TokenProvider interface returning Token. |
| src/main/java/com/incognia/api/clients/TokenAwareNetworkingClient.java | Accepts a TokenProvider and builds auth headers from returned Token. |
| src/main/java/com/incognia/api/clients/ManualRefreshTokenProvider.java | Adds provider that only refreshes when refresh() is called. |
| src/main/java/com/incognia/api/clients/AutoRefreshTokenProvider.java | Adds provider that auto-refreshes when nearing expiry. |
| src/main/java/com/incognia/api/IncogniaAPI.java | Uses optional custom TokenProvider, otherwise creates default auto-refresh provider. |
| build.gradle | Bumps version to 3.17.0. |
| README.md | Documents manual-refresh token provider usage and updates dependency versions. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
fcba6e1 to
4c56675
Compare
4c56675 to
f133d1d
Compare
There was a problem hiding this comment.
Pull request overview
This PR introduces a configurable TokenProvider abstraction so consumers can plug in custom token retrieval/refresh strategies while keeping the default behavior (auto-refresh) unchanged for existing users.
Changes:
- Replaced the previous concrete
TokenProviderimplementation with a publicTokenProviderinterface returning a newcom.incognia.common.Tokenvalue type. - Added
AutoRefreshTokenProvider(default) andManualRefreshTokenProvider(caller-controlled refresh) plus supportingTokenRequester. - Wired token-provider configuration through
CustomOptionsand updated docs/tests accordingly.
Reviewed changes
Copilot reviewed 18 out of 19 changed files in this pull request and generated 2 comments.
Show a summary per file
| File | Description |
|---|---|
| src/test/java/com/incognia/api/clients/TokenProviderTest.java | Removed old tests tied to the previous concrete TokenProvider class. |
| src/test/java/com/incognia/api/clients/TokenAwareNetworkingClientTest.java | Added coverage for manual refresh behavior and invalid custom providers. |
| src/test/java/com/incognia/api/clients/TokenAwareDispatcher.java | Updated Basic auth decoding to match standard Base64 encoding. |
| src/test/java/com/incognia/api/clients/ManualRefreshTokenProviderTest.java | New tests for manual refresh provider behavior and constructor options. |
| src/test/java/com/incognia/api/clients/AutoRefreshTokenProviderTest.java | New tests for auto-refresh provider caching/refresh/concurrency behavior. |
| src/test/java/com/incognia/api/IncogniaAPITest.java | Added tests ensuring IncogniaAPI uses custom token providers when configured. |
| src/main/java/com/incognia/common/utils/CustomOptions.java | Added optional tokenProvider and enabled toBuilder() for convenient overrides. |
| src/main/java/com/incognia/common/exceptions/TokenNotFoundException.java | New exception for missing manual token. |
| src/main/java/com/incognia/common/exceptions/TokenExpiredException.java | New exception for expired manual token. |
| src/main/java/com/incognia/common/Token.java | New immutable token value type with expiresAt and isExpired(). |
| src/main/java/com/incognia/api/clients/TokenResponse.java | Simplified token response DTO (removed computed expiresAt). |
| src/main/java/com/incognia/api/clients/TokenRequester.java | New internal helper to request tokens and convert responses to Token. |
| src/main/java/com/incognia/api/clients/TokenProvider.java | Converted to a public interface returning Token. |
| src/main/java/com/incognia/api/clients/TokenAwareNetworkingClient.java | Accepts a TokenProvider, validates token output, and builds auth headers from Token. |
| src/main/java/com/incognia/api/clients/ManualRefreshTokenProvider.java | New provider that requires explicit refresh() and fails fast when missing/expired. |
| src/main/java/com/incognia/api/clients/AutoRefreshTokenProvider.java | New default provider that refreshes on-demand with concurrency control. |
| src/main/java/com/incognia/api/IncogniaAPI.java | Uses CustomOptions.tokenProvider when present; otherwise constructs default auto-refresh provider. |
| build.gradle | Version bump to 3.17.0. |
| README.md | Updated authentication docs and added manual-refresh usage example. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
f133d1d to
f4bf72a
Compare
Summary