Prompt
Ensure configuration options are handled uniformly across all API endpoints and providers. Configuration should have clear precedence rules, support dynamic values where appropriate, and avoid hardcoded fallbacks.
Key principles:
- Clear precedence: When multiple configuration sources exist (payload, options, defaults), document and implement a consistent precedence order
- Dynamic configuration: Allow functions for configuration values that need to be determined at runtime based on context
- Uniform option processing: Handle configuration options consistently across similar endpoints and providers
- Avoid hardcoded values: Use configuration options instead of hardcoded paths, domains, or other values
Example of good configuration handling:
// Bad: Unclear precedence and hardcoded fallback
const consentURI = `${options.consentPage}?client_id=${client.clientId}&scope=${requestScope.join(" ")}`;
// Good: Clear precedence and proper encoding
const url = new URL(options.consentPage);
url.searchParams.set('consent_code', encodeURIComponent(code));
url.searchParams.set('client_id', encodeURIComponent(client.clientId));
url.searchParams.set('scope', encodeURIComponent(requestScope.join(' ')));
// Bad: Static configuration only
team: string;
// Good: Dynamic configuration support
team?: string | ((ctx: Context) => string);
This ensures developers have predictable behavior, proper flexibility, and consistent patterns across the entire API surface.