import { Token, TokenPayload, TokenRaw } from './token.types';
export declare type LoggerFn = (type: string, payload: Record<string, unknown>) => void;
export declare type Logger = {
    info?: LoggerFn;
    error?: LoggerFn;
};
export declare type GoogleSaIdTokenOptions = {
    serviceAccountEmail?: string;
    defaultAudience?: string;
    tokenExpiryMargin?: number;
    logger?: Logger;
};
export declare class GoogleSaIdToken {
    readonly sa: string;
    readonly tokenExpiryMargin: number;
    readonly defaultAudience?: string;
    protected readonly logger?: Logger;
    private tokenCache;
    constructor({ serviceAccountEmail, tokenExpiryMargin, defaultAudience, logger, }?: GoogleSaIdTokenOptions);
    private noAudError;
    fetchIdTokenNoCache(audience?: string): Promise<Token>;
    private addFulfilHandler;
    private fetchIdTokenCached;
    fetchIdTokenDecoded(audience?: string): Promise<{
        raw: TokenRaw;
        payload: TokenPayload;
    }>;
    fetchIdToken(audience?: string): Promise<TokenRaw>;
    isTokenExpired({ exp }: TokenPayload): boolean;
}
