import { SrvRecord , resolveSrv , lookup } from "dns" ; import { NodeRole } from "./util" ; export type DNSResolveSrvFunction = ( hostname : string , callback : ( err : NodeJS . ErrnoException | undefined , records ? : SrvRecord [ ] ) => void ) => void ; export type DNSLookupFunction = ( hostname : string , callback : ( err : NodeJS . ErrnoException | undefined , address : string , family ? : number ) => void ) => void ; export interface INatMap { [ key ] : { host : string ; port : number ; } ; } export interface export interface IClusterOptions { default clusterRetryStrategy ? : ( times : number , reason ? : Error ) => number | void | null ; default enableOfflineQueue ? : boolean ; default enableReadyCheck ? : boolean ; default scaleReads ? : NodeRole | Function ; default maxRedirections ? : number ; default retryDelayOnFailover ? : number ; default retryDelayOnClusterDown ? : number ; default retryDelayOnTryAgain ? : number ; default retryDelayOnMoved ? : number ; default slotsRefreshTimeout ? : number ; default slotsRefreshInterval ? : number ; default redisOptions ? : any ; default lazyConnect ? : boolean ; default useSRVRecords ? : boolean ; default resolveSrv ? : DNSResolveSrvFunction ; default dnsLookup ? : DNSLookupFunction ; natMap ? : INatMap ; default enableAutoPipelining ? : boolean ; default autoPipeliningIgnoredCommands ? : string [ ] ; default maxScriptsCachingTime ? : number ; } export const DEFAULT_CLUSTER_OPTIONS = { clusterRetryStrategy : ( times ) => Math . min ( 100 + times * 2 , 2000 ) , enableOfflineQueue : true , enableReadyCheck : true , scaleReads : "master" , maxRedirections : 16 , retryDelayOnMoved : 0 , retryDelayOnFailover : 100 , retryDelayOnClusterDown : 100 , retryDelayOnTryAgain : 100 , slotsRefreshTimeout : 1000 , slotsRefreshInterval : 5000 , useSRVRecords : false , resolveSrv : resolveSrv , dnsLookup : lookup , enableAutoPipelining : false , autoPipeliningIgnoredCommands : [ ] , maxScriptsCachingTime : 60000 , } ;