Problem
Many API connectors need to rotate through multiple authentication tokens to increase effective rate limits and avoid hitting API quotas. Currently, this requires custom Python code and cannot be implemented in declarative manifest-only connectors.
Current Workaround
Connectors like source-github implement custom authenticators in Python. See source-github/utils.py:53-186 which implements MultipleTokenAuthenticatorWithRateLimiter that:
- Cycles through multiple tokens automatically
- Tracks separate rate limits per token per API type (REST vs GraphQL)
- Automatically switches tokens when limits are reached
- Sleeps until reset if all tokens are exhausted
Proposed Solution
Add a declarative MultiTokenAuthenticator component that supports:
- Token rotation: Accept multiple tokens and cycle through them
- Rate limit tracking: Monitor rate limits per token via response headers or dedicated endpoints
- Separate counters: Support different rate limit buckets (e.g., REST vs GraphQL)
- Automatic switching: Switch to next token when current token is rate-limited
- Sleep/retry logic: Wait until rate limit reset when all tokens are exhausted
Example Configuration
authenticator:
type: MultiTokenAuthenticator
tokens:
- "{{ config.tokens[0] }}"
- "{{ config.tokens[1] }}"
- "{{ config.tokens[2] }}"
rate_limit_tracking:
- resource: "core" # REST API
header_prefix: "x-ratelimit-"
- resource: "graphql" # GraphQL API
header_prefix: "x-ratelimit-"
max_wait_time: "{{ config.max_waiting_time }}"
Impact
This would enable connectors like source-github, source-gitlab, and others to be fully declarative while maintaining their multi-token rate limiting capabilities.
Related
Code References
Problem
Many API connectors need to rotate through multiple authentication tokens to increase effective rate limits and avoid hitting API quotas. Currently, this requires custom Python code and cannot be implemented in declarative manifest-only connectors.
Current Workaround
Connectors like
source-githubimplement custom authenticators in Python. Seesource-github/utils.py:53-186which implementsMultipleTokenAuthenticatorWithRateLimiterthat:Proposed Solution
Add a declarative
MultiTokenAuthenticatorcomponent that supports:Example Configuration
Impact
This would enable connectors like
source-github,source-gitlab, and others to be fully declarative while maintaining their multi-token rate limiting capabilities.Related
Code References
source-github/utils.py:53-186-MultipleTokenAuthenticatorWithRateLimiterimplementationsource-github/spec.json:57-62- Multi-token input configuration