nats
Version:
Node.js client for NATS, a lightweight, high-performance cloud native messaging system
105 lines (104 loc) • 4.29 kB
TypeScript
import { Deferred } from "./util";
import { Endpoint, EndpointInfo, EndpointOptions, Msg, MsgHdrs, NamedEndpointStats, Nanos, NatsConnection, NatsError, Payload, PublishOptions, QueuedIterator, ReviverFn, Service, ServiceConfig, ServiceGroup, ServiceHandler, ServiceIdentity, ServiceInfo, ServiceMsg, ServiceStats, ServiceVerb, Sub } from "./core";
/**
* Services have common backplane subject pattern:
*
* `$SRV.PING|STATS|INFO` - pings or retrieves status for all services
* `$SRV.PING|STATS|INFO.<name>` - pings or retrieves status for all services having the specified name
* `$SRV.PING|STATS|INFO.<name>.<id>` - pings or retrieves status of a particular service
*
* Note that <name> and <id> are upper-cased.
*/
export declare const ServiceApiPrefix = "$SRV";
export declare class ServiceMsgImpl implements ServiceMsg {
msg: Msg;
constructor(msg: Msg);
get data(): Uint8Array;
get sid(): number;
get subject(): string;
get reply(): string;
get headers(): MsgHdrs | undefined;
respond(data?: Payload, opts?: PublishOptions): boolean;
respondError(code: number, description: string, data?: Uint8Array, opts?: PublishOptions): boolean;
json<T = unknown>(reviver?: ReviverFn): T;
string(): string;
}
export declare class ServiceGroupImpl implements ServiceGroup {
subject: string;
queue: string;
srv: ServiceImpl;
constructor(parent: ServiceGroup, name?: string, queue?: string);
calcSubject(root: string, name?: string): string;
addEndpoint(name?: string, opts?: ServiceHandler | EndpointOptions): QueuedIterator<ServiceMsg>;
addGroup(name?: string, queue?: string): ServiceGroup;
}
type NamedEndpoint = {
name: string;
} & Endpoint;
type ServiceSubscription<T = unknown> = NamedEndpoint & {
internal: boolean;
sub: Sub<T>;
qi?: QueuedIterator<T>;
stats: NamedEndpointStatsImpl;
metadata?: Record<string, string>;
};
export declare class ServiceImpl implements Service {
nc: NatsConnection;
_id: string;
config: ServiceConfig;
handlers: ServiceSubscription[];
internal: ServiceSubscription[];
_stopped: boolean;
_done: Deferred<Error | null>;
started: string;
/**
* @param verb
* @param name
* @param id
* @param prefix - this is only supplied by tooling when building control subject that crosses an account
*/
static controlSubject(verb: ServiceVerb, name?: string, id?: string, prefix?: string): string;
constructor(nc: NatsConnection, config?: ServiceConfig);
get subjects(): string[];
get id(): string;
get name(): string;
get description(): string;
get version(): string;
get metadata(): Record<string, string> | undefined;
errorToHeader(err: Error): MsgHdrs;
setupHandler(h: NamedEndpoint, internal?: boolean): ServiceSubscription;
info(): ServiceInfo;
endpoints(): EndpointInfo[];
stats(): Promise<ServiceStats>;
addInternalHandler(verb: ServiceVerb, handler: (err: NatsError | null, msg: Msg) => Promise<void>): void;
_doAddInternalHandler(name: string, verb: ServiceVerb, handler: (err: NatsError | null, msg: Msg) => Promise<void>, kind?: string, id?: string): void;
start(): Promise<Service>;
close(err?: Error): Promise<null | Error>;
get stopped(): Promise<null | Error>;
get isStopped(): boolean;
stop(err?: Error): Promise<null | Error>;
ping(): ServiceIdentity;
reset(): void;
addGroup(name: string, queue?: string): ServiceGroup;
addEndpoint(name: string, handler?: ServiceHandler | EndpointOptions): QueuedIterator<ServiceMsg>;
_addEndpoint(e: NamedEndpoint): QueuedIterator<ServiceMsg>;
}
declare class NamedEndpointStatsImpl implements NamedEndpointStats {
name: string;
subject: string;
average_processing_time: Nanos;
num_requests: number;
processing_time: Nanos;
num_errors: number;
last_error?: string;
data?: unknown;
metadata?: Record<string, string>;
queue: string;
constructor(name: string, subject: string, queue?: string);
reset(qi?: QueuedIterator<unknown>): void;
countLatency(start: number): void;
countError(err: Error): void;
_stats(): NamedEndpointStats;
stats(qi?: QueuedIterator<unknown>): NamedEndpointStats;
}
export {};