import type { Cluster, Redis, RedisOptions, StandaloneConnectionOptions } from 'ioredis';
import type { Logger, YamlConfig } from '@graphql-mesh/types';
export type IamAuthConfig = NonNullable<YamlConfig.RedisIamAuthConfig>;
interface IamTokenConnectorOptions extends StandaloneConnectionOptions {
    tokenConnector: {
        redisRef: {
            current: Redis | null;
        };
        getToken: () => Promise<string>;
    };
}
export interface IamRedisOptions extends RedisOptions {
    tokenConnector: IamTokenConnectorOptions['tokenConnector'];
}
export declare function generateIamToken(cfg: IamAuthConfig): Promise<string>;
export declare function buildIamRedisOptions(base: RedisOptions, cfg: IamAuthConfig, redisRef: {
    current: Redis | null;
}): IamRedisOptions;
export declare function setupIamAuthRefreshForStandalone(redisRef: {
    current: Redis | null;
}, cfg: IamAuthConfig, username: string | undefined, logger?: Logger): ReturnType<typeof setInterval>;
export declare function setupIamAuthForCluster(cluster: Cluster, redisOptions: RedisOptions, cfg: IamAuthConfig, username: string | undefined, logger?: Logger): Promise<ReturnType<typeof setInterval>>;
export {};
