/** * OAuthTokenManager — concrete implementation of the TokenManager interface. * * Manages the full token lifecycle for a single OAuth service: * - Transparent refresh with exponential backoff * - Circuit breaker to avoid hammering a failing token endpoint * - Mutex to coalesce concurrent refresh attempts into a single HTTP call * - Optional cloud-ID resolution for Atlassian providers */ import type { TokenStore, StoredToken } from '../store/types.js'; import type { OAuthConfig, TokenManager, TokenResult, TokenStatus, ApiLogger } from './types.js'; /** * Formats a duration in seconds into a human-readable string. * "2h 15m" when >= 1 hour, "3m 45s" when < 1 hour. */ export declare function formatExpiresIn(seconds: number): string; /** * Maps a raw TokenResult from the token endpoint to the StoredToken shape. * Carries over cloudId/cloudUrl from the existing token when present. */ export declare function tokenResultToStoredToken(result: TokenResult, existing?: StoredToken): StoredToken; export declare class OAuthTokenManager implements TokenManager { private readonly config; private readonly store; private readonly service; private readonly callbackPort; private readonly options?; private readonly log; private consecutiveFailures; private circuitOpenUntil; private retryAfterMs; private refreshPromise; private refreshTimer; constructor(config: OAuthConfig, store: TokenStore, service: string, callbackPort: number, options?: { cloudIdResolver?: (accessToken: string) => Promise<{ cloudId: string; cloudUrl: string; }>; /** Overrides openBrowser for testing. Defaults to the real openBrowser. */ openBrowser?: (url: string) => void; /** Optional logger for token refresh diagnostics. */ logger?: ApiLogger; }); getAccessToken(): Promise; authenticate(): Promise; isAuthenticated(): boolean; getTokenStatus(): TokenStatus; shutdown(): void; /** * Starts the proactive refresh timer. Reads the current token from the store * and schedules a refresh before it expires. No-op if no token or no refresh * token exists. */ startProactiveRefresh(): void; private clearRefreshTimer; private scheduleRefresh; /** * Timer callback. Reuses the existing refreshPromise mutex so proactive and * lazy refreshes coalesce into a single HTTP call. On success doRefresh() * reschedules the timer. On failure we do NOT reschedule — lazy refresh * serves as the fallback. */ private proactiveRefresh; private ensureFresh; private doRefresh; /** * Computes and returns the exponential backoff delay in milliseconds. * Base 1000ms, cap 30000ms, ±20% jitter. * The caller decides whether to await it — inline retries are not done here. */ private computeBackoffMs; } //# sourceMappingURL=manager.d.ts.map