UNPKG

node-universe

Version:

基于 Nodejs 环境的一款微服务框架,原理来自于宇宙中的恒星,行星,卫星等系统。

1,466 lines (1,418 loc) 95.6 kB
import _ from 'lodash'; import util from 'util'; import EventEmitter3 from 'eventemitter3'; import Redlock from 'redlock'; import { LRUCache } from 'lru-cache'; import { NatsConnection } from 'nats'; import Mqtt from 'mqtt'; import { Kafka, Producer, Consumer, Admin } from 'kafkajs'; import EventEmitter from 'events'; import { Socket } from 'dgram'; import { Server, Socket as Socket$1 } from 'net'; import http from 'http'; import * as fastest_validator from 'fastest-validator'; import fastest_validator__default from 'fastest-validator'; import kleur from 'kleur'; interface GenericObject { [name: string]: any; } declare enum BaseLoggerLevels { fatal = "fatal", error = "error", warn = "warn", debug = "debug", info = "info", trace = "trace" } interface FormattedLoggerOptions { colors?: boolean; moduleColor?: boolean | string[] | string; formatter?: any; objectPrinter?: any; autoPadding?: boolean; folder: string; filename: string; eol: any; interval: number; } interface LogLevelConfig { type?: BaseLoggerLevels; options?: GenericObject; } interface LoggerBindings { nodeID?: string; namespace?: string; mod?: string; svc?: string; ver?: string; } declare class LoggerInstance { fatal(...args: any[]): void; error(...args: any[]): void; warn(...args: any[]): void; info(...args: any[]): void; debug(...args: any[]): void; trace(...args: any[]): void; } declare const _default$b: { TYPE_COUNTER: string; TYPE_GAUGE: string; TYPE_HISTOGRAM: string; TYPE_INFO: string; UNIVERSE_METRICS_COMMON_COLLECT_TOTAL: string; UNIVERSE_METRICS_COMMON_COLLECT_TIME: string; PROCESS_ARGUMENTS: string; PROCESS_PID: string; PROCESS_PPID: string; PROCESS_MEMORY_HEAP_SIZE_TOTAL: string; PROCESS_MEMORY_HEAP_SIZE_USED: string; PROCESS_MEMORY_RSS: string; PROCESS_MEMORY_EXTERNAL: string; PROCESS_MEMORY_HEAP_SPACE_SIZE_TOTAL: string; PROCESS_MEMORY_HEAP_SPACE_SIZE_USED: string; PROCESS_MEMORY_HEAP_SPACE_SIZE_AVAILABLE: string; PROCESS_MEMORY_HEAP_SPACE_SIZE_PHYSICAL: string; PROCESS_MEMORY_HEAP_STAT_HEAP_SIZE_TOTAL: string; PROCESS_MEMORY_HEAP_STAT_EXECUTABLE_SIZE_TOTAL: string; PROCESS_MEMORY_HEAP_STAT_PHYSICAL_SIZE_TOTAL: string; PROCESS_MEMORY_HEAP_STAT_AVAILABLE_SIZE_TOTAL: string; PROCESS_MEMORY_HEAP_STAT_USED_HEAP_SIZE: string; PROCESS_MEMORY_HEAP_STAT_HEAP_SIZE_LIMIT: string; PROCESS_MEMORY_HEAP_STAT_MALLOCATED_MEMORY: string; PROCESS_MEMORY_HEAP_STAT_PEAK_MALLOCATED_MEMORY: string; PROCESS_MEMORY_HEAP_STAT_ZAP_GARBAGE: string; PROCESS_UPTIME: string; PROCESS_INTERNAL_ACTIVE_HANDLES: string; PROCESS_INTERNAL_ACTIVE_REQUESTS: string; PROCESS_VERSIONS_NODE: string; PROCESS_EVENTLOOP_LAG_MIN: string; PROCESS_EVENTLOOP_LAG_AVG: string; PROCESS_EVENTLOOP_LAG_MAX: string; PROCESS_EVENTLOOP_LAG_COUNT: string; PROCESS_GC_TIME: string; PROCESS_GC_TOTAL_TIME: string; PROCESS_GC_EXECUTED_TOTAL: string; OS_MEMORY_FREE: string; OS_MEMORY_USED: string; OS_MEMORY_TOTAL: string; OS_UPTIME: string; OS_TYPE: string; OS_RELEASE: string; OS_HOSTNAME: string; OS_ARCH: string; OS_PLATFORM: string; OS_USER_UID: string; OS_USER_GID: string; OS_USER_USERNAME: string; OS_USER_HOMEDIR: string; OS_DATETIME_UNIX: string; OS_DATETIME_ISO: string; OS_DATETIME_UTC: string; OS_DATETIME_TZ_OFFSET: string; OS_NETWORK_ADDRESS: string; OS_NETWORK_MAC: string; OS_CPU_LOAD_1: string; OS_CPU_LOAD_5: string; OS_CPU_LOAD_15: string; OS_CPU_UTILIZATION: string; OS_CPU_USER: string; OS_CPU_SYSTEM: string; OS_CPU_TOTAL: string; OS_CPU_INFO_MODEL: string; OS_CPU_INFO_SPEED: string; OS_CPU_INFO_TIMES_USER: string; OS_CPU_INFO_TIMES_SYS: string; UNIVERSE_NODE_TYPE: string; UNIVERSE_NODE_VERSIONS_UNIVERSE: string; UNIVERSE_NODE_VERSIONS_LANG: string; UNIVERSE_NODE_VERSIONS_PROTOCOL: string; UNIVERSE_STAR_NAMESPACE: string; UNIVERSE_STAR_STARTED: string; UNIVERSE_STAR_LOCAL_SERVICES_TOTAL: string; UNIVERSE_STAR_MIDDLEWARES_TOTAL: string; UNIVERSE_REGISTRY_NODES_TOTAL: string; UNIVERSE_REGISTRY_NODES_ONLINE_TOTAL: string; UNIVERSE_REGISTRY_SERVICES_TOTAL: string; UNIVERSE_REGISTRY_SERVICE_ENDPOINTS_TOTAL: string; UNIVERSE_REGISTRY_ACTIONS_TOTAL: string; UNIVERSE_REGISTRY_ACTION_ENDPOINTS_TOTAL: string; UNIVERSE_REGISTRY_EVENTS_TOTAL: string; UNIVERSE_REGISTRY_EVENT_ENDPOINTS_TOTAL: string; UNIVERSE_REQUEST_TOTAL: string; UNIVERSE_REQUEST_ACTIVE: string; UNIVERSE_REQUEST_ERROR_TOTAL: string; UNIVERSE_REQUEST_TIME: string; UNIVERSE_REQUEST_LEVELS: string; UNIVERSE_REQUEST_DIRECTCALL_TOTAL: string; UNIVERSE_REQUEST_MULTICALL_TOTAL: string; UNIVERSE_EVENT_EMIT_TOTAL: string; UNIVERSE_EVENT_BROADCAST_TOTAL: string; UNIVERSE_EVENT_BROADCASTLOCAL_TOTAL: string; UNIVERSE_EVENT_RECEIVED_TOTAL: string; UNIVERSE_EVENT_RECEIVED_ACTIVE: string; UNIVERSE_EVENT_RECEIVED_ERROR_TOTAL: string; UNIVERSE_EVENT_RECEIVED_TIME: string; UNIVERSE_TRANSIT_PUBLISH_TOTAL: string; UNIVERSE_TRANSIT_RECEIVE_TOTAL: string; UNIVERSE_TRANSIT_REQUESTS_ACTIVE: string; UNIVERSE_TRANSIT_STREAMS_SEND_ACTIVE: string; UNIVERSE_TRANSIT_STREAMS_RECEIVE_ACTIVE: string; UNIVERSE_TRANSIT_READY: string; UNIVERSE_TRANSIT_CONNECTED: string; UNIVERSE_TRANSIT_PONG_TIME: string; UNIVERSE_TRANSIT_PONG_SYSTIME_DIFF: string; UNIVERSE_TRANSIT_ORPHAN_RESPONSE_TOTAL: string; UNIVERSE_TRANSPORTER_PACKETS_SENT_TOTAL: string; UNIVERSE_TRANSPORTER_PACKETS_SENT_BYTES: string; UNIVERSE_TRANSPORTER_PACKETS_RECEIVED_TOTAL: string; UNIVERSE_TRANSPORTER_PACKETS_RECEIVED_BYTES: string; UNIVERSE_CIRCUIT_STAR_OPENED_ACTIVE: string; UNIVERSE_CIRCUIT_STAR_OPENED_TOTAL: string; UNIVERSE_CIRCUIT_STAR_HALF_OPENED_ACTIVE: string; UNIVERSE_REQUEST_FALLBACK_TOTAL: string; UNIVERSE_REQUEST_BULKHEAD_INFLIGHT: string; UNIVERSE_REQUEST_BULKHEAD_QUEUE_SIZE: string; UNIVERSE_EVENT_BULKHEAD_INFLIGHT: string; UNIVERSE_EVENT_BULKHEAD_QUEUE_SIZE: string; UNIVERSE_REQUEST_RETRY_ATTEMPTS_TOTAL: string; UNIVERSE_REQUEST_TIMEOUT_TOTAL: string; UNIVERSE_CACHER_GET_TOTAL: string; UNIVERSE_CACHER_GET_TIME: string; UNIVERSE_CACHER_FOUND_TOTAL: string; UNIVERSE_CACHER_SET_TOTAL: string; UNIVERSE_CACHER_SET_TIME: string; UNIVERSE_CACHER_DEL_TOTAL: string; UNIVERSE_CACHER_DEL_TIME: string; UNIVERSE_CACHER_CLEAN_TOTAL: string; UNIVERSE_CACHER_CLEAN_TIME: string; UNIVERSE_CACHER_EXPIRED_TOTAL: string; UNIVERSE_DISCOVERER_REDIS_COLLECT_TOTAL: string; UNIVERSE_DISCOVERER_REDIS_COLLECT_TIME: string; UNIVERSE_DISCOVERER_ETCD_COLLECT_TOTAL: string; UNIVERSE_DISCOVERER_ETCD_COLLECT_TIME: string; UNIT_BIT: string; UNIT_BYTE: string; UNIT_KILOBYTES: string; UNIT_MEGABYTE: string; UNIT_GIGABYTE: string; UNIT_TERRABYTE: string; UNIT_PETABYTE: string; UNIT_EXOBYTE: string; UNIT_NANOSECONDS: string; UNIT_MICROSECONDS: string; UNIT_MILLISECONDS: string; UNIT_SECONDS: string; UNIT_MINUTE: string; UNIT_HOUR: string; UNIT_DAY: string; UNIT_WEEK: string; UNIT_MONTH: string; UNIT_YEAR: string; UNIT_HANDLE: string; UNIT_CPU: string; UNIT_GHZ: string; UNIT_REQUEST: string; UNIT_CONNECTION: string; UNIT_PACKET: string; UNIT_MESSAGE: string; UNIT_STREAM: string; UNIT_EVENT: string; }; interface MetricRegistryOptions { enabled?: boolean; collectProcessMetrics?: boolean; collectInterval?: number; reporter?: string | MetricsReporterOptions | (MetricsReporterOptions | string)[] | null; defaultBuckets?: number[]; defaultQuantiles?: number[]; defaultMaxAgeSeconds?: number; defaultAgeBuckets?: number; defaultAggregator?: string; } interface MetricsReporterOptions { type: string; options?: MetricReporterOptions; } interface MetricReporterOptions { includes?: string | string[]; excludes?: string | string[]; metricNamePrefix?: string; metricNameSuffix?: string; metricNameFormatter?: (name: string) => string; labelNameFormatter?: (name: string) => string; [key: string]: any; } interface BaseMetricOptions { type: string; name: string; description?: string; labelNames?: string[]; unit?: string; aggregator?: string; [key: string]: any; } interface GaugeMetricSnapshot { value: number; labels: GenericObject; timestamp: number; } interface InfoMetricSnapshot { value: number; labels: GenericObject; timestamp: number; } interface HistogramMetricSnapshot { labels: GenericObject; count: number; sum: number; timestamp: number; buckets?: { [key: string]: number; }; min?: number | null; mean?: number | null; variance?: number | null; stdDev?: number | null; max?: number | null; quantiles?: { [key: string]: number; }; } type MetricSnapshot = GaugeMetricSnapshot | InfoMetricSnapshot | HistogramMetricSnapshot; declare class BaseMetric { type: string; registry: MetricRegistry; name: string; description: string; labelNames: string[]; unit: string; aggregator: string; lastSnapshot: Array<MetricSnapshot> | null; dirty: boolean; values: Map<string, GenericObject>; constructor(options: BaseMetricOptions, registry: MetricRegistry); setDirty(): void; clearDirty(): void; get(labels: GenericObject): GenericObject | undefined; set(value: number | string, labels?: GenericObject, timestamp?: number): void; reset(labels?: GenericObject, timestamp?: number): void; resetAll(timestamp?: number): void; clear(): void; hashingLabels(labels?: GenericObject): string; changed(value: any | null, labels?: any, timestamp?: number): void; snapshot(): MetricSnapshot[] | null; increment(labels?: GenericObject, value?: number, timestamp?: number): void; decrement(labels?: GenericObject, value?: number, timestamp?: number): void; observe(value: number, labels?: GenericObject, timestamp?: number): void; generateSnapshot(): any; toObject(): { type: string; name: string; description: string; labelNames: string[]; unit: string; values: MetricSnapshot[] | null; }; } declare class BaseReporter { options: MetricReporterOptions; registry: MetricRegistry | null; star: Star | null; logger: LoggerInstance | null; constructor(options: MetricReporterOptions); init(registry: MetricRegistry): void; stop(): Promise<void>; matchMetricName(name: string): boolean; formatMetricName(name: string): string; formatLabelName(name: string): string; metricChanged(metric: BaseMetric, value: any, labels?: GenericObject, timestamp?: number): void; } declare class MetricRegistry { star: Star; logger: LoggerInstance; dirty: boolean; options: MetricRegistryOptions; store: Map<string, BaseMetric>; reporter: BaseReporter[]; collectTimer: NodeJS.Timer | null; constructor(star: Star, options?: MetricRegistryOptions | boolean); init(): void; stop(): Promise<void[]> | undefined; isEnabled(): boolean | undefined; changed(metric: BaseMetric, value: any, labels?: GenericObject, timestamp?: number): void; register(options: BaseMetricOptions): BaseMetric | null; hasMetric(name: string): boolean; getMetric(name: string): BaseMetric | null; set(name: string, value: any | null, labels?: GenericObject, timestamp?: number): void | null; increment(name: string, labels?: GenericObject | null, value?: number, timestamp?: number): void | null; decrement(name: string, labels?: GenericObject | null, value?: number, timestamp?: number): void | null; observe(name: string, value: number, labels?: GenericObject, timestamp?: number): void | null; reset(name: string, labels?: GenericObject, timestamp?: number): null | undefined; resetAll(name: string, timestamp?: number): null | undefined; timer(name?: string, labels?: GenericObject, timestamp?: number): () => number; list(options?: GenericObject): GenericObject[]; pluralizeUnit(unit: string): string; } declare class PrometheusReporter extends BaseReporter { server: http.Server | null; defaultLabels: GenericObject; constructor(options: MetricReporterOptions); init(registry: MetricRegistry): void; private handler; stop(): Promise<void>; private generatePrometheusResponse; private escapeLabelValue; private labelsToStr; } declare class ConsoleReporter extends BaseReporter { lastChanges: Set<string>; timer: NodeJS.Timer | null; constructor(options: MetricsReporterOptions); init(registry: MetricRegistry): void; private labelToStr; print(): void; private log; metricChanged(metric: BaseMetric, value: any, labels?: GenericObject, timestamp?: number): void; } declare class EventRepoter extends BaseReporter { lastChanges: Set<any>; timer: NodeJS.Timer | null; constructor(options: MetricReporterOptions); init(registry: MetricRegistry): void; sendEvent(): void; metricChanged(metric: BaseMetric, value: any, labels?: GenericObject | undefined, timestamp?: number | undefined): void; } declare class CSVReporter extends BaseReporter { lastChanges: Set<any>; timer: NodeJS.Timer | null; folder: string; constructor(options: MetricReporterOptions); init(registry: MetricRegistry): void; labelsToStr(labels: object): string; getFilename(metric: any, item: any): any; writeRow(filename: string, headers: string[], fields: string[]): void; flush(): void; metricChanged(metric: any, value: any, labels: any): void; } declare class DataDogReporter extends BaseReporter { private timer; private defaultLabels; constructor(options: any); init(registry: any): void; flush(): Promise<void> | undefined; stop(): Promise<void>; private escapeLabelValue; private labelsToTags; private posixTimestamp; private generateDatadogSeries; } declare class StatsdReporter extends BaseReporter { private defaultLabels; constructor(options: any); init(registry: any): void; private labelsToTags; private escapeLabelValue; private generateStatsDSeries; private generateStatDLine; flush(): void; private sendChunks; private send; metricChanged(metric: any, value: any, labels: any): void; } declare function resolve$8(opt: any): any; declare function register$9(name: any, value: any): void; declare const _default$a: { Base: typeof BaseReporter; Console: typeof ConsoleReporter; Event: typeof EventRepoter; CSV: typeof CSVReporter; Prometheus: typeof PrometheusReporter; DateDog: typeof DataDogReporter; Statsd: typeof StatsdReporter; } & { resolve: typeof resolve$8; register: typeof register$9; }; declare class BaseCacher { options: CacherOptions; connected: any; star: Star | null; logger: LoggerInstance | null; prefix: string; metrics: MetricRegistry | null; constructor(options: CacherOptions); init(star: Star): void; private registerStarCacherMetrics; close(): Promise<any>; get(key: string): Promise<any>; getWithTTL(key: string): Promise<any>; set(key: string, data: any, ttl?: number): Promise<any>; delete(key: string | string[]): Promise<any>; clean(match?: string | string[]): Promise<any>; tryLock(key: string | string[], ttl?: number): Promise<any>; lock(key: string | string[], ttl?: number): Promise<any>; getParamMetaValue(key: string, params: GenericObject, meta: GenericObject): any; defaultKeygen(actionName: string, params: GenericObject, meta: GenericObject, keys: Array<any> | null): string; _hashedKey(key: string): string; _generateKeyFromObject(obj: any): any; getCacheKey(actionName: string, params: GenericObject, meta: GenericObject, keys: string[], actionKeygen?: Function): any; getCacheKeys(): Promise<any>; middleware(): { name: string; localAction: (handler: any, action: any) => any; }; } type ActionCacheEnabledFuncType = (ctx: Context) => boolean; interface ActionCacheOptions<P = Record<string, unknown>, M = unknown> { enabled?: boolean | ActionCacheEnabledFuncType; ttl?: number; keys?: string[]; keygen?: CacherKeygenFunc<P, M>; lock?: { enabled?: boolean; staleTime?: number; }; } type CacherKeygenFunc<P = Record<string, unknown>, M = unknown> = (actionName: string, params: P, meta: M, keys?: string[]) => string; interface CacherOptions { ttl?: number; keygen?: CacherKeygenFunc; maxParamsLength?: number; [key: string]: any; } interface RedisCacherOptions extends CacherOptions { prefix?: string; redis?: GenericObject; redlock?: boolean | GenericObject; monitor?: boolean; pingInterval?: number; } type Cacher<T extends BaseCacher = BaseCacher> = T; declare class RateLimiter { options: GenericObject; lastTime: number; balance: number; maxBalance: number; constructor(options: GenericObject); check(cost?: number): boolean; } declare class Span { id: string; name: string; type: string; options: GenericObject; tracer: Tracer | null; traceID: string; parentID: string | null; logger: LoggerInstance | null; service: { name?: string; version?: string | number | null | undefined; fullName?: string; }; priority: number; sampled: boolean; startTime: number | null; finishTime: number | null; duration: number | null; startTicks: number; error: Error | boolean | null; logs: SpanLogEntry[]; tags: GenericObject; constructor(tracer: Tracer, name: string, options?: GenericObject); addTags(obj: Object): this; start(time?: number): this; getTime(): number; log(name: string, fields?: GenericObject, time?: number): this; setError(err: Error): this; finish(time?: number): this; isActive(): boolean; startSpan(name: string, options?: GenericObject): Span | undefined; } declare class Tracer { star: Star; logger: LoggerInstance; options: GenericObject; sampleCounter: number; rateLimiter: RateLimiter | null; defaultTags: GenericObject | Function | null; exporter: TraceExporter[] | null; constructor(star: Star, options: TracerOptions | boolean); init(): void; stop(): Promise<any>; isEnabled(): any; shouldSample(span: Span): boolean; startSpan(name: string, options?: GenericObject): Span; spanStarted(span: Span): void; spanFinished(span: Span): void; invokeExporter(method: string, args: Array<any>): void; getCurrentTraceID(): null; getActiveSpanID(): null; } declare class BaseTraceExporter { options: GenericObject; tracer: Tracer | null; logger: LoggerInstance | null; star: Star | null; constructor(options?: GenericObject); init(tracer: Tracer): void; stop(): void; spanStarted(span: Span): void; spanFinished(span: Span): void; flattenTags(obj: GenericObject | null, convertToString?: boolean, path?: string): {} | null; errorToObject(error: Error | boolean | null): Partial<true | Error> | null; } type TracingActionTagsFuncType = (ctx: Context, response?: any) => GenericObject; type TracingEventTagsFuncType = (ctx: Context) => GenericObject; type TracingSpanNameOption = string | ((ctx: Context) => string); type TracingActionTags = TracingActionTagsFuncType | { params?: boolean | string[]; meta?: boolean | string[]; response?: boolean | string[]; }; type TracingEventTags = TracingEventTagsFuncType | { params?: boolean | string[]; meta?: boolean | string[]; }; interface TracingOptions { enabled?: boolean; tags?: TracingActionTags | TracingEventTags; spanName?: TracingSpanNameOption; safetyTags?: boolean; } interface TracingActionOptions extends TracingOptions { tags?: TracingActionTags; } interface TracingEventOptions extends TracingOptions { tags?: TracingEventTags; } interface TracerExporterOptions { type: string; options?: GenericObject; } interface TracerOptions { enabled?: boolean; exporter?: string | TracerExporterOptions | (TracerExporterOptions | string)[] | null; sampling?: { rate?: number | null; tracesPerSecond?: number | null; minPriority?: number | null; }; actions?: boolean; events?: boolean; errorFields?: string[]; stackTrace?: boolean; defaultTags?: GenericObject | Function | null; tags?: { action?: TracingActionTags; event?: TracingEventTags; }; } type TraceExporter<T extends BaseTraceExporter = BaseTraceExporter> = T; interface SpanLogEntry { name: string; fields: GenericObject; time: number; elapsed: number; } interface StarTrackingOptions { enabled?: boolean; shutdownTimeout?: number; } declare enum UniverseErrorOptionsType { BAD_GETWAY = "BAD_GETWAY", SERVICE_NOT_FOUND = "SERVICE_NOT_FOUND", SERVICE_NOT_AVAILABLE = "SERVICE_NOT_AVAILABLE", REQUEST_TIMEOUT = "REQUEST_TIMEOUT", REQUEST_SKIPPED = "REQUEST_SKIPPED", REQUEST_REJECTED = "REQUEST_REJECTED", QUEUE_FULL = "QUEUE_FULL", VALIDATION_ERROR = "VALIDATION_ERROR", MAX_CALL_LEVEL = "MAX_CALL_LEVEL", SERVICE_SCHEMA_ERROR = "SERVICE_SCHEMA_ERROR", STAR_OPTIONS_ERROR = "STAR_OPTIONS_ERROR", GRACEFUL_STOP_TIMEOUT = "GRACEFUL_STOP_TIMEOUT", PROTOCOL_VERSION_MISMATCH = "PROTOCOL_VERSION_MISMATCH", INVALID_PACKET_DATA = "INVALID_PACKET_DATA", MISSING_PAYLOAD = "MISSING_PAYLOAD", INVALID_ENDPOINT = "INVALID_ENDPOINT", INVALID_PARAMETERS = "INVALID_PARAMETERS", METRICS_DISABLED = "METRICS_DISABLED", NOT_FOUND_EVENT = "NOT_FOUND_EVENT", WAITFOR_SERVICES = "WAITFOR_SERVICES" } declare enum UniverseErrorCode { RESPONSE_ERROR = 400, SERVICE_NOT_FOUND = 404, VALIDATION_ERROR = 422, QUEUE_FULL = 429, SERVICE_ERROR = 500, BAD_GETWAY = 502, REQUEST_REJECTED = 503, REQUEST_TIMEOUT = 504, REQUEST_SKIPPED = 514 } interface UniverseErrorData { nodeID?: string; name?: string; action?: any; version?: string; level?: number; type?: UniverseErrorOptionsType | string; service?: { name: string; version: string; }; actual?: string; received?: string; strategy?: string | null; value?: any; schema?: any; size?: number; limit?: number; eventName?: string; services?: any[]; statuses?: any[]; [key: string]: any; } interface UniversePlainError extends UniverseError { nodeID?: string; [key: string]: any; } declare class BaseError extends Error { constructor(message?: string); } declare class UniverseError extends BaseError { code: UniverseErrorCode | number; type: UniverseErrorOptionsType | string; data?: UniverseErrorData; retryable: boolean; constructor(message: string, code?: UniverseErrorCode | number, type?: UniverseErrorOptionsType | string, data?: UniverseErrorData); } declare class UniverseRetryableError extends UniverseError { constructor(message: string, code?: UniverseErrorCode | number, type?: UniverseErrorOptionsType | string, data?: UniverseErrorData); } declare class StarDisconnectedError extends UniverseRetryableError { constructor(); } declare class StarServerError extends UniverseRetryableError { } declare class StarClientError extends UniverseError { constructor(message: string, code: UniverseErrorCode | number, type: UniverseErrorOptionsType | string, data?: UniverseErrorData); } declare class ServiceNotFoundError extends UniverseRetryableError { constructor(data?: UniverseErrorData); } declare class QueueIsFullError extends UniverseRetryableError { constructor(data?: UniverseErrorData); } declare class ValidationError extends StarClientError { constructor(message: string, type?: UniverseErrorOptionsType | string, data?: UniverseErrorData); } declare class MaxCallLevelError extends UniverseError { constructor(data?: UniverseErrorData); } declare class ServiceSchemaError extends UniverseError { constructor(message: string, data?: UniverseErrorData); } declare class StarOptionsError extends UniverseError { constructor(message: string, data?: UniverseErrorData); } declare class GracefulStopTimeoutError extends UniverseError { constructor(data: UniverseErrorData | undefined); } declare class ProtocolVersionMismatchError extends UniverseError { constructor(data: UniverseErrorData | undefined); } declare class InvalidPacketDataError extends UniverseError { constructor(data: any); } declare function recreateError(error: UniversePlainError): UniverseError | undefined; declare class Regenerator { star: Star | null; init(star: Star): void; restore(plainError: UniversePlainError, payload: GenericObject): Error; extracPlainError(err: any, payload: any): { name: any; message: any; nodeID: any; code: any; type: any; retryable: any; stack: any; data: any; }; restoreCustomError(plainError: UniversePlainError, payload: GenericObject): Error | undefined; private createDefaultError; restoreExternalFields(plainError: UniversePlainError, err: any, payload: GenericObject): void; restoreStack(plainError: UniversePlainError, err: any): void; } declare function resolveRengerator(options: any): Regenerator; interface EventSchema { name?: string; group?: string; params?: ActionParams; service?: Service; tracing?: boolean | TracingEventOptions; bulkhead?: BulkheadOptions; handler?: ActionHandler; context?: boolean; [key: string]: any; } type ServiceEventLegacyHandler = (payload: any, sender: string, eventName: string, ctx: Context) => void | Promise<void>; type ServiceEventHandler = (ctx: Context) => void | Promise<void>; interface ServiceEvent$1 { name?: string; group?: string; params?: ActionParams; context?: boolean; debounce?: number; throttle?: number; handler?: ServiceEventHandler | ServiceEventLegacyHandler; } interface ServiceSettingSchema { $noVersionPrefix?: boolean; $noServiceNamePrefix?: boolean; $dependencyTimeout?: number; $shutdownTimeout?: number; $secureSettings?: string[]; [name: string]: any; } interface ServiceDependency { name: string; version?: string | number; } type ServiceActionsSchema<S = ServiceSettingSchema> = { [key: string]: ActionSchema | ActionHandler | boolean; } & ThisType<Service<S>>; type ServiceMethods = { [key: string]: (...args: any[]) => any; } & ThisType<Service>; interface ServiceHooksBefore { [key: string]: string | ActionHookBefore | (string | ActionHookBefore)[]; } interface ServiceHooksAfter { [key: string]: string | ActionHookAfter | (string | ActionHookAfter)[]; } interface ServiceHooksError { [key: string]: string | ActionHookError | (string | ActionHookError)[]; } interface ServiceHooks { before?: ServiceHooksBefore; after?: ServiceHooksAfter; error?: ServiceHooksError; } interface ServiceEvent { name?: string; group?: string; params?: ActionParams; context?: boolean; debounce?: number; throttle?: number; handler?: ServiceEventHandler | ServiceEventLegacyHandler; } type ServiceEvents<S = ServiceSettingSchema> = { [key: string]: ServiceEventHandler | ServiceEventLegacyHandler | ServiceEvent; } & ThisType<Service<S>>; type ServiceSyncLifecycleHandler<S = ServiceSettingSchema> = (this: Service<S>) => void; type ServiceAsyncLifecycleHandler<S = ServiceSettingSchema> = (this: Service<S>) => void | Promise<void>; interface ServiceSchema<S = ServiceSettingSchema> { name: string; version?: string | number; settings?: S; dependencies?: string | ServiceDependency | (string | ServiceDependency)[]; metadata?: any; actions?: ServiceActionsSchema; mixins?: Partial<ServiceSchema>[]; methods?: ServiceMethods; hooks?: ServiceHooks; events?: ServiceEvents; created?: ServiceSyncLifecycleHandler<S> | ServiceSyncLifecycleHandler<S>[]; started?: ServiceAsyncLifecycleHandler<S> | ServiceAsyncLifecycleHandler<S>[]; stopped?: ServiceAsyncLifecycleHandler<S> | ServiceAsyncLifecycleHandler<S>[]; [name: string]: any; } type ServiceAction = <T = Promise<any>, P extends GenericObject = GenericObject>(params?: P, options?: CallingOptions) => T; interface ServiceActions { [name: string]: ServiceAction; } interface ServiceSearchObj { name: string; version?: string | number; } declare class Service<S = ServiceSettingSchema> { star: Star; fullName: string; name: string; version: string | number; settings?: ServiceSettingSchema | GenericObject; schema?: ServiceSchema<S>; metadata: GenericObject; logger: LoggerInstance | null; actions: ServiceActions | null; events: any; originalSchema: ServiceSchema<S> | null; dependencies: string | ServiceDependency | (string | ServiceDependency)[] | null; _serviceSpecification: GenericObject; constructor(star: Star, schema?: ServiceSchema<S>, schemaMods?: any); static getVersionedFullName(name: string, version?: string | number): string; private parseServiceSchema; private _validateAndPreprocessSchema; private _initializeServiceProperties; private _createServiceSpecification; private _registerServiceMethods; private _validateMethodName; private _registerServiceActions; private _registerServiceEvents; applyMixins(schema: ServiceSchema | Partial<ServiceSchema<ServiceSettingSchema>>): any; _init(): void; _start(): Promise<void>; _stop(): Promise<void>; private _cleanupServiceResources; _createMethod(methodDef: any, name: string): any; private _parseMethodDefinition; private _validateMethodDefinition; private _configureMethodProperties; _createAction(actionDef: any, name: string): GenericObject; private _parseActionDefinition; private _validateActionDefinition; private _configureActionProperties; _createEvent(eventDef: any, name: string): GenericObject; private _parseEventDefinition; private _validateEventDefinition; private _processEventHandler; private _configureEventProperties; _getPublishSettings(settings?: GenericObject): _.Omit<GenericObject, any> | undefined; mergeSchemas(mixinSchema: any, serviceSchema: any): any; mergeSchemaSettings(src: GenericObject, target: GenericObject): any; mergeSchemaMetadata(src: GenericObject, target: GenericObject): any; mergeSchemaUniqArray(src: GenericObject, target: GenericObject): any[]; mergeSchemaDependencies(src: GenericObject, target: GenericObject): any[]; mergeSchemaHooks(src: GenericObject, target: GenericObject): GenericObject; mergeSchemaActions(src: GenericObject, target: GenericObject): GenericObject; mergeSchemaMethods(src: GenericObject, target: GenericObject): GenericObject; mergeSchemaEvents(src: GenericObject, target: GenericObject): void; mergeSchemaLifecycleHandlers(src: GenericObject, target: GenericObject): any[]; mergeSchemaUnkown(src: GenericObject, target: GenericObject): GenericObject; waitForServices(serviceNames: string | string[], timeout: number, interval: number): Promise<{ services: string[]; statuses: any[]; }>; emitLocalEventHandler(eventName: string, params?: any, options?: GenericObject): any; } interface RestSchema { path?: string; method?: 'GET' | 'POST' | 'DELETE' | 'PUT' | 'PATCH'; fullPath?: string; basePath?: string; } type ActionVisibility = 'published' | 'public' | 'protected' | 'private'; type ActionHandler<T = any> = (ctx: Context) => Promise<T> | T; type ActionParamSchema = { [key: string]: any; }; type ActionParamTypes = 'any' | 'array' | 'boolean' | 'custom' | 'date' | 'email' | 'enum' | 'forbidden' | 'function' | 'number' | 'object' | 'string' | 'url' | 'uuid' | boolean | string | ActionParamSchema; type ActionParams = { [key: string]: ActionParamTypes; }; type FallbackHandler = (ctx: Context, err: UniverseError) => Promise<any>; type FallbackResponse$1 = string | number | GenericObject; type FallbackResponseHandler$1 = (ctx: Context, err: UniverseError) => Promise<any>; interface ActionSchema { name?: string; rest?: RestSchema | RestSchema[] | string | string[]; visibility?: ActionVisibility; params?: ActionParams; service?: Service; cache?: boolean | ActionCacheOptions; handler?: ActionHandler; tracing?: boolean | TracingActionOptions; bulkhead?: BulkheadOptions; circuitBreaker?: StarCircuitBreakerOptions; retryPolicy?: RetryPolicyOptions; fallback?: string | FallbackHandler; hooks?: ActionHooks; [key: string]: any; } type CheckRetryable = (err: UniverseError | Error) => boolean; interface BulkheadOptions { enabled?: boolean; concurrency?: number; maxQueueSize?: number; } interface StarCircuitBreakerOptions { enabled?: boolean; threshold?: number; windowTime?: number; minRequestCount?: number; halfOpenTime?: number; check?: CheckRetryable; } interface RetryPolicyOptions { enabled?: boolean; retries?: number; delay?: number; maxDelay?: number; factor?: number; check?: CheckRetryable; } type ActionHookBefore = (ctx: Context) => Promise<void> | void; type ActionHookAfter = (ctx: Context, res: any) => Promise<any> | any; type ActionHookError = (ctx: Context, err: Error) => Promise<void> | void; interface ActionHooks { before?: string | ActionHookBefore | (string | ActionHookBefore)[]; after?: string | ActionHookAfter | (string | ActionHookAfter)[]; error?: string | ActionHookError | (string | ActionHookError)[]; } interface ContextParentSpan$1 { id: string; traceID: string; sampled: boolean; } interface CallingOptions { timeout?: number | null; retries?: number | null; fallbackResponse?: FallbackResponse$1 | FallbackResponse$1[] | FallbackResponseHandler$1; nodeID?: string; meta?: GenericObject; parentSpan?: ContextParentSpan$1; parentCtx?: Context; requestID?: string; tracking?: boolean; paramsCloning?: boolean; caller?: string; ctx?: Context; } declare class LoggerFactory { star: Star; options: any; appenders: any[]; cache: Map<any, any>; constructor(star: Star); init(options: LogLevelConfig | LogLevelConfig[] | boolean | null): void; stop(): any; getCallerFromStack(): { filename: any; lineNumber: any; columnNumber: any; methodName: any; functionName: any; } | undefined; getBindingsKey(bindings: LoggerBindings): string; getLogger(bindings: LoggerBindings): any; } declare class BaseLogger { options: GenericObject; Promise: any; loggerFactory: any; star: any; constructor(options: GenericObject); init(loggerFactory: LoggerFactory): void; stop(): Promise<void>; getLogLevel(mod: string): BaseLoggerLevels | null; getLogHandler(bindings: GenericObject): null; } interface DiscovererOptions extends GenericObject { heartbeatInterval?: number; heartbeatTimeout?: number; disableHeartbeatChecks?: boolean; disableOfflineNodeRemoving?: boolean; cleanOfflineNodesTimeout?: number; } declare class Discoverer extends BaseDiscoverer { } declare enum PacketTypes { PACKET_UNKNOWN = "???", PACKET_EVENT = "EVENT", PACKET_REQUEST = "REQ", PACKET_RESPONSE = "RES", PACKET_DISCOVER = "DISCOVER", PACKET_INFO = "INFO", PACKET_DISCONNECT = "DISCONNECT", PACKET_HEARTBEAT = "HEARTBEAT", PACKET_PING = "PING", PACKET_PONG = "PONG", PACKET_GOSSIP_REQ = "GOSSIP_REQ", PACKET_GOSSIP_RES = "GOSSIP_RES", PACKET_GOSSIP_HELLO = "GOSSIP_HELLO" } interface PacketPayload { version?: string; sender?: string | null; event?: any; action?: any; groups?: any; host?: string; port?: number; online?: any; offline?: any; } declare class Packet { type: PacketTypes; target: any; payload: GenericObject | PacketPayload; services: any; config: any; metadata: any; meta: any; error: any; online: any; offline: any; dataType: any; params: any; paramsType: any; constructor(type: PacketTypes, target?: any, payload?: GenericObject | PacketPayload); } interface TransitRequest { action?: any; nodeID?: string; ctx?: Context; resolve: (value: any) => void; reject: (reason: any) => void; stream?: boolean; } interface StarTransitOptions { maxQueueSize?: number; disableReconnect?: boolean; disableVersionCheck?: boolean; maxChunkSize?: number; } declare class Transporter { hasBuiltInBalancer: boolean; connected: boolean; constructor(opts?: GenericObject); init(transit: Transit, messageHandler: (cmd: string, msg: string) => void, afterConnect: (wasReconnect: boolean) => void): void; connect(): Promise<any>; disconnect(): Promise<any>; onConnected(wasReconnect?: boolean): Promise<any>; makeSubscriptions(topics: GenericObject[]): Promise<void>; subscribe(cmd: string, nodeID?: string): Promise<void>; subscribeBalancedRequest(action: string): Promise<void>; subscribeBalancedEvent(event: string, group: string): Promise<void>; unsubscribeFromBalancedCommands(): Promise<void>; incomingMessage(cmd: string, msg: Buffer): Promise<void>; receive(cmd: string, data: Buffer): Promise<void>; prepublish(packet: Packet): Promise<void>; publish(packet: Packet): Promise<void>; publishBalancedEvent(packet: Packet, group: string): Promise<void>; publishBalancedRequest(packet: Packet): Promise<void>; send(topic: string, data: Buffer, meta: GenericObject): Promise<void>; getTopicName(cmd: string, nodeID?: string): string; makeBalancedSubscriptions(): Promise<void>; serialize(packet: Packet): Buffer | null; deserialize(type: string, data: Buffer): Packet | null; } declare class Node { id: string; instanceID: string | null; available: boolean; local: boolean; lastHeartbeatTime: number; config: GenericObject; client: GenericObject; metadata: any; ipList: any; port: number | null; hostname: string | null; udpAddress: string | null; rawInfo: any; services: Array<any>; cpu: any; cpuSeq: any; seq: number; offlineSince: any; constructor(id: string); update(payload: GenericObject, isReconnected: boolean): true | undefined; updateLocalInfo(cpuUsage: any): Promise<any>; heartbeat(payload: GenericObject): void; disconnected(): void; } declare class Transit { star: Star; logger: LoggerInstance; nodeID: string; instanceID: string; transporter: Transporter; options: StarTransitOptions | undefined; discoverer: Discoverer | null; metrics: MetricRegistry | null; errorRegenerator: Regenerator | null; pendingRequests: Map<any, TransitRequest>; pendingReqStreams: Map<any, any>; pendingResStreams: Map<any, any>; private maxPendingRequests; private maxStreamPoolSize; private cleanupInterval; connected: boolean; disconnecting: boolean; isReady: boolean; stat: GenericObject; subscribing: Promise<any> | null; __connectResolve: any; constructor(star: Star, transporter: Transporter, options?: StarTransitOptions); private registerUniverseMetrics; afterConnect(wasReconnect: boolean): Promise<null | undefined>; connect(): Promise<void>; disconnect(): Promise<void>; ready(): void; sendDisconnectPacket(): Promise<void>; makeSubscriptions(): Promise<any>; messageHandler(cmd: string, msg: GenericObject): Promise<boolean> | undefined; private requestHandler; responseHandler(packet: GenericObject): void; sendPing(nodeID?: string, id?: string): Promise<void>; sendPong(payload: GenericObject): Promise<void>; processPong(payload: GenericObject): void; sendResponse(nodeID: string, id: string, meta: any, data: any, error: Error | null): Promise<void>; eventHandler(payload: GenericObject): Promise<boolean>; subscribe(topic: string, nodeID: string): Promise<void>; publish(packet: Packet): Promise<void>; sendHeartbeat(localNode: Node): Promise<void>; sendEvent(ctx: Context): Promise<void>; removePendingRequestByNodeID(nodeID: string): void; request(ctx: Context): Promise<unknown>; _sendRequest(ctx: Context, resolve: any, reject: any): Promise<void>; _createPayloadErrorField(error: any, payload: any): { name: any; message: any; nodeID: any; code: any; type: any; retryable: any; stack: any; data: any; } | undefined; sendNodeInfo(info: any, nodeID: string): Promise<void>; private _handleIncomingRequestStream; private _handleIncomingResponseStream; private _createErrorFromPayload; removePendingRequest(id: any): void; private handleTransitError; private startCleanupTimer; private stopCleanupTimer; private cleanupExpiredRequests; discoverNodes(): Promise<void>; discoverNode(nodeID: string): Promise<void>; } declare class BaseDiscoverer { options: DiscovererOptions; heartbeatTimer: NodeJS.Timeout | null; checkNodesTimer: NodeJS.Timeout | null; offlineTimer: NodeJS.Timeout | null; localNode: Node | null; star: Star | null; registry: Registry | null; logger: LoggerInstance | null; transit: Transit | null; constructor(options?: DiscovererOptions); init(registry: Registry): void; startHeartbeatTimers(): void; stopHeartbeatTimers(): void; stop(): Promise<void>; registerUniverseMetrics(): void; beat(): Promise<void> | undefined; checkRemoteNodes(): void; checkOfflineNodes(): void; heartbeatReceived(nodeID: string, payload: any): void; sendHeartbeat(): Promise<void>; processRemoteNodeInfo(nodeID: string, payload: any): Node | null; localNodeDisconnected(): Promise<void>; remoteNodeDisconnected(nodeID: string, isUnexpected: boolean): void | undefined; discoverNode(nodeID?: string): Promise<any>; discoverAllNodes(): Promise<any>; sendLocalNodeInfo(nodeID?: string): Promise<void>; disableHeartbeat(): void; } interface StarRegistryOptions { strategy?: Function | string; strategyOptions?: GenericObject; preferLocal?: boolean; discoverer?: RegistryDiscovererOptions | BaseDiscoverer | string; stopDelay?: number; } interface RegistryDiscovererOptions { type: string; options: DiscovererOptions; } declare class Serialize { constructor(options: any); init(star: Star): void; serialize(obj: GenericObject, type?: string): Buffer | void; deserialize(buf: Buffer, type?: string): GenericObject | void; } type CallMiddlewareHandler = { actionName: string; params: any; options: CallingOptions; }; type Middleware = { [name: string]: ((handler: ActionHandler, action: ActionSchema) => any) | ((handler: ActionHandler, event: ServiceEvent$1) => any) | ((handler: ActionHandler) => any) | ((service: Service) => any) | ((star: Star) => any) | ((handler: CallMiddlewareHandler) => CallMiddlewareHandler); }; declare class BaseValidator { options: GenericObject; star: Star | null; constructor(options: GenericObject); init(star: Star): void; compile(schema: any): void; validate(params: any, schema: any): void; convertSchemaToUniverse(schema: any): void; middleware(star: Star): { name: string; localAction: (handler: ActionHandler, action: ActionSchema) => ActionHandler; localEvent: (handler: ActionHandler, event: EventSchema) => ActionHandler; }; } interface StarOptions { namespace?: string | null; nodeID?: string | null; metadata?: GenericObject; logger?: BaseLogger | LogLevelConfig | LogLevelConfig[] | boolean | null; logLevel?: BaseLoggerLevels | LogLevelConfig | null; registry?: StarRegistryOptions; contextParamsCloning?: boolean; maxCallLevel?: number; heartbeatInterval?: number; heartbeatTimeout?: number; transporter?: Transporter | string | GenericObject | null; transit?: StarTransitOptions; serializer?: Serialize | string | GenericObject | null; errorRegenerator?: Regenerator | null; uidGenerator?: () => string; errorHandler?: ((err: Error, info: any) => void) | null; Promise?: PromiseConstructorLike; ContextFactory?: Context; requestTimeout?: number; retryPolicy?: RetryPolicyOptions; tracking?: StarTrackingOptions; disableBalancer?: boolean; circuitBreaker?: StarCircuitBreakerOptions; bulkhead?: BulkheadOptions; cacher?: boolean | Cacher | string | GenericObject | null; validator?: boolean | BaseValidator | ValidatorNames | ValidatorOptions | null; metrics?: boolean | MetricRegistryOptions; tracing?: boolean | TracerOptions; internalServices?: boolean | { [key: string]: Partial<ServiceSchema>; }; internalMiddlewares?: boolean; dependencyInterval?: number; dependencyTimeout?: number; hotReload?: boolean | HotReloadOptions; middlewares?: (Middleware | string)[]; replCommands?: GenericObject[] | null; replDelimiter?: string; ServiceFactory?: Service; created?: StarSyncLifecyleHandler; started?: StarAsyncLifecyleHandler; stopped?: StarAsyncLifecyleHandler; skipProcessEventRegistration?: boolean; maxSafeObjectSize?: number; } interface HotReloadOptions { modules?: string[]; } type StarAsyncLifecyleHandler = (star: Star) => void; type StarSyncLifecyleHandler = (star: Star) => void | Promise<void>; type FallbackResponse = string | number | GenericObject; type FallbackResponseHandler = (ctx: Context, err: UniverseError) => Promise<any>; interface ContextParentSpan { id: string; traceID: string; sampled: boolean; } interface CallCallingOptions { timeout?: number; retries?: number; fallbackResponse?: FallbackResponse | FallbackResponse[] | FallbackResponseHandler; nodeID?: string; meta?: GenericObject; parentSpan?: ContextParentSpan; parentCtx?: Context; requestID?: string; tracking?: boolean; paramsCloning?: boolean; caller?: string; } interface MCallCallingOptions extends CallCallingOptions { settled?: boolean; } interface StarCallActionParams<P extends GenericObject = GenericObject> { action: string; params?: P; } interface StarMCallActionParams<P extends GenericObject = GenericObject> extends StarCallActionParams { options?: CallCallingOptions; } interface ValidatorOptions { type: string; options?: GenericObject; } type ValidatorNames = 'Fastest'; declare class Context { id: string; star: Star; nodeID: string | null; endpoint: Endpoint | null; action: ActionSchema | null; service: Service | null; event: EventSchema | null; eventName: string | null; eventType: string | null; eventGroups: string[] | null; options: CallingOptions; parentID: string | null; caller: string | null; tracing: boolean | null; span: Span | null; _spanStack: Span[]; needAck: boolean | null; ackID: string | null; locals: GenericObject; level: number; params: any; meta: GenericObject; requestID: string | null; cachedResult: boolean; starHrTime: any; constructor(star: Star, endpoint?: Endpoint); static create(star: Star, endpoint: Endpoint, params?: GenericObject, options?: GenericObject): Context; copy(endpoint?: Endpoint): Context; setParams(newParams: GenericObject, cloning?: boolean): void; setEndpoint(endpoint: Endpoint): void; call(actionName: string, params?: GenericObject, options?: GenericObject): Promise<any>; mcall(def: Array<StarMCallActionParams> | Record<string, StarMCallActionParams>, opts?: MCallCallingOptions): Promise<any[] | GenericObject>; emit(eventName: string, data?: any, options?: GenericObject): Promise<any[]> | Promise<void> | undefined; broadcast(eventName: string, data?: any, options?: GenericObject): Promise<any[]> | undefined; setContextEventData(options: { eventName?: string; eventType?: string; eventGroups?: string[]; }): void; startSpan(name: string, opts?: GenericObject): any; finishSpan(span: Span, time?: number): void; toJSON(): Partial<this>; [util.inspect.custom](depth: number, options: any): any; } declare class BaseStrategy { registry: Registry; star: Star; options: GenericObject; constructor(registry: Registry, star: Star, options?: GenericObject); select(list: Endpoint[], ctx?: Context): Endpoint; } declare class ServiceItem { node: Node; name: string; fullName: string; version: string | number; settings?: ServiceSettingSchema; metadata: GenericObject; local: boolean; actions: any; events: any; dependencies: any; constructor(node: Node, service: Service, local: boolean); equals(fullName: string, nodeID?: string): boolean; update(service: Service): void; addAction(action: any): void; addEvent(e