UNPKG

af-consul

Version:

A highly specialized function library

233 lines 7.43 kB
/// <reference types="node" /> /// <reference types="node" /> import Consul from 'consul'; import EventEmitter from 'events'; import { AccessPoints } from './access-points/access-points'; export type Maybe<T> = T | undefined; export type Nullable<T> = T | null; export type TBooleanLike = 'true' | 'false' | 'yes' | 'no' | '1' | '0' | 1 | 0; export interface ISocketInfo { host: string; port: string | number; } export interface IRegisterCheck extends Consul.Agent.Service.RegisterCheck { name?: string; tcp?: string; dockercontainerid?: string; shell?: string; timeout?: string; deregistercriticalserviceafter?: string; } export interface IRegisterConfig extends Consul.Agent.Service.RegisterOptions { id: string; check?: IRegisterCheck; checks?: IRegisterCheck[]; connect?: any; proxy?: any; taggedAddresses?: any; } export type TRegisterType = 'if-not-registered' | 'if-config-differ' | 'force'; export interface IRegisterOptions { registerType?: TRegisterType; deleteOtherInstance?: boolean; noAlreadyRegisteredMessage?: boolean; } export type TRegisterResult = 'already' | 'just' | false; export interface IConsul extends Consul.Consul { _ext(eventName: 'onRequest' | 'onResponse', callback: (request: any, next: Function) => void): void; _defaults: any; _get: (...args: any[]) => any; } export interface IConsulAgentOptions extends Consul.ConsulOptions { host: string; port: string; dc?: string; } export interface IFullConsulAgentOptions { reg: IConsulAgentOptions; dev: IConsulAgentOptions; prd: IConsulAgentOptions; } export type TLoggerMethod = (...args: unknown[]) => any; export interface ILogger { silly: TLoggerMethod; debug: TLoggerMethod; info: TLoggerMethod; warn: TLoggerMethod; error: TLoggerMethod; } export interface IMeta { [prop: string]: Nullable<string | number | boolean>; } export interface IAccessPoint { consulServiceName: string; id?: string; title?: string; port?: number | null; host?: string | null; setProps?: (data: Record<string, any> | null) => IAccessPoint | undefined; isAP?: true; meta?: IMeta; isReachable?: boolean; lastSuccessUpdate?: number; idHostPortUpdated?: boolean; getChanges?: () => [string, any, any][] | undefined; updateIntervalIfSuccessMillis?: number; noConsul?: boolean; [propName: string]: any; } export interface IAccessPointsMethods { addAP?: (apKey: string, apData: any) => IAccessPoint | undefined; setAP?: (apKey: string, apData: Record<string, any> | null) => IAccessPoint | undefined; getAP?: (accessPointKey: string, andNotIsAP?: boolean) => IAccessPoint | undefined; get?: (accessPointKey?: string, andNotIsAP?: boolean) => { [apKey: string]: IAccessPoint; } | IAccessPoint | undefined; } export type IAccessPoints = { [apKey: string]: IAccessPoint; } & IAccessPointsMethods; export interface IConsulAgentConfig { host?: string; port?: string; secure?: string | TBooleanLike | boolean; token?: string; dc?: string; } export interface IFullConsulAgentConfig { reg: IConsulAgentConfig; dev?: IConsulAgentConfig; prd?: IConsulAgentConfig; } export interface IAFConsulConfig { agent: IFullConsulAgentConfig; check?: IRegisterCheck; service: { id?: string; name: string; instance: string; version: string; description: string; tags?: string | string[]; meta?: string | IMeta; host?: Nullable<string>; port?: Nullable<string | number>; noRegOnStart?: boolean; }; } export interface IAFConfig { accessPoints?: IAccessPoints | AccessPoints; consul: IAFConsulConfig; webServer: any; service?: { id?: string; address?: string; fromService?: string; }; } export type TCommonFnResult = any; type TMethod<T> = (...args: any[]) => T; export interface ICLOptions { config: IAFConfig; logger?: ILogger; em?: EventEmitter; envCode?: string; getConsulUIAddress?: TMethod<string>; hash?: string; } export interface IConsulServiceInfo { ID: string; Service: string; Tags?: string[]; Meta?: IMeta; Port: number; Address: string; Weights?: { Passing: number; Warning: number; }; EnableTagOverride?: boolean; Datacenter?: string; Proxy?: object; Connect?: object; CreateIndex?: number; ModifyIndex?: number; [prop: string]: any; } export interface IConsulNodeInfo { ID: string; Node?: string; Address: string; Datacenter?: string; TaggedAddresses?: object; Meta?: IMeta; CreateIndex?: number; ModifyIndex?: number; } export interface IConsulHealthServiceInfo { Node?: IConsulNodeInfo; Service?: IConsulServiceInfo; Checks?: any[]; } export interface IAPIArgs { consulInstance?: IConsul; agentOptions?: IConsulAgentOptions; options?: any; withError?: boolean; result?: any; } export interface IConsulAPI { agentServiceList: (apiArgs?: IAPIArgs) => Promise<{ [serviceName: string]: IConsulServiceInfo; }>; catalogServiceList(dc: string, apiArgs?: IAPIArgs): Promise<{ [serviceId: string]: string[]; }>; consulHealthService: (apiArgs: IAPIArgs) => Promise<IConsulHealthServiceInfo[]>; getServiceInfo: (serviceName: string) => Promise<IConsulServiceInfo | undefined>; getServiceSocket: (serviceName: string, defaults: ISocketInfo) => Promise<ISocketInfo>; agentServiceRegister: (options: IRegisterConfig, withError?: boolean) => Promise<boolean>; agentServiceDeregister: (serviceId: string, apiArgs?: IAPIArgs) => Promise<boolean>; deregisterIfNeed: (serviceId: string, agentOptions?: IConsulAgentOptions) => Promise<boolean>; agentMembers: (apiArgs?: IAPIArgs) => Promise<TCommonFnResult>; checkIfServiceRegistered: (serviceIdOrName: string, apiArgs?: IAPIArgs) => Promise<IConsulHealthServiceInfo | undefined>; registerService: (registerConfig: IRegisterConfig, registerOptions: IRegisterOptions) => Promise<TRegisterResult>; agentOptions: IFullConsulAgentOptions; getConsulAgentOptions: (clOptions: ICLOptions) => Promise<IFullConsulAgentOptions>; } export interface ICyclicStartArgs { cLOptions?: ICLOptions; registerInterval?: number; registerType?: TRegisterType; deleteOtherInstance?: boolean; noAlreadyRegisteredMessage?: boolean; } export interface IRegisterCyclic { isStarted: boolean; skipNextRegisterAttemptUntil: number; healthCheckIntervalMillis: number; registerIntervalMillis: number; options: ICLOptions; _timerId: ReturnType<typeof setTimeout>; _logger: ILogger; start: (cyclicStartArgs?: ICyclicStartArgs) => Promise<-1 | 0 | 1>; stop: () => void; } export interface IAFConsulAPI extends IConsulAPI { registerConfig: IRegisterConfig; getConsulUIAddress: TMethod<string>; serviceId: string; register: { once: (registerType?: TRegisterType) => Promise<TRegisterResult>; cyclic: IRegisterCyclic; }; deregister: (svcId?: string, agentHost?: string, agentPort?: string) => Promise<boolean>; } export interface ICache<T> { [hash: string]: { created: number; value: T; }; } export {}; //# sourceMappingURL=interfaces.d.ts.map