import { RateLimitConfig, RoleAuthorizationConfig, AccountLockConfig, AuthResultConfig } from "../../types"; export interface ApiKeyStrategyConfig extends AuthResultConfig, ApiKeyTrackingConfig { role?: RoleAuthorizationConfig; rateLimit?: RateLimitConfig; lock?: AccountLockConfig; keyType: "one-time" | "long-term" | "session"; retrieveUserMaxRetries?: number; retrieveUserRetryDelay?: number; sessionDuration?: number; longTermDuration?: number; extractApiKey: (context: TContext) => string | null; retrieveUserByApiKey: (apiKey: string, context?: TContext) => Promise; authorize?: (user: TUser, action: string, resource?: string) => Promise; revokeApiKey?: (apiKey: string) => Promise; } export interface ApiKeyTrackingConfig { trackApiKeyUsage?: (apiKey: string) => Promise; isApiKeyExpired?: (apiKey: string) => Promise; }