feat: add apiKeyCommand for dynamic API key retrieval #8198
+36
−0
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Summary
Add support for fetching API keys dynamically by executing a command. This enables integration with credential managers, token services, or any external authentication system.
Related Issues
This PR addresses several feature requests from the community:
Motivation
Currently, API keys can be provided via:
{env:VAR_NAME}syntax/connectcommand (stored in auth.json)This works well for simple setups, but doesn't support:
credential.helper)Usage
{ "provider": { "my-provider": { "options": { "apiKeyCommand": ["my-credential-helper", "get-token"] } } } }The command should output the API key to stdout. The output is trimmed of whitespace.
Examples
Design Notes
This complements the existing
{env:VAR_NAME}syntax rather than replacing it. TheapiKeyCommandapproach is:An alternative approach would be adding
{exec:command}syntax similar to{env:...}, butapiKeyCommandis more targeted and follows patterns used by:credential_processin~/.aws/configcredential.helperconfigurationcredHelpersin~/.docker/config.jsonChanges
apiKeyCommandfield to provider options in config schemaresolveApiKeyCommand()helper function to execute the commandgetSDK()to check forapiKeyCommandwhen noapiKeyis set