UNPKG

@imqueue/rpc

Version:

RPC-like client-service implementation over messaging queue

96 lines (95 loc) 3.15 kB
/*! * IMQService implementation * * Copyright (c) 2018, imqueue.com <support@imqueue.com> * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY * AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR * PERFORMANCE OF THIS SOFTWARE. */ import { JsonObject, ILogger, IMessageQueue } from '@imqueue/core'; import { TypesDescription, IMQRPCRequest, IMQRPCResponse, IMQServiceOptions, ICache, MethodsCollectionDescription } from '.'; export declare class Description { service: { name: string; methods: MethodsCollectionDescription; }; types: TypesDescription; } /** * Class IMQService * Basic abstract service (server-side) implementation */ export declare abstract class IMQService { [property: string]: any; protected imq: IMessageQueue; protected logger: ILogger; protected cache: ICache; name: string; options: IMQServiceOptions; /** * Class constructor * * @constructor * @param {Partial<IMQServiceOptions>} options * @param {string} [name] */ constructor(options?: Partial<IMQServiceOptions>, name?: string); /** * Handles incoming request and produces corresponding response * * @access private * @param {IMQRPCRequest} request - request message * @param {string} id - message unique identifier * @return {Promise<string>} */ private handleRequest; /** * Initializes this instance of service and starts handling request * messages. * * @return {Promise<IMessageQueue>} */ start(): Promise<IMessageQueue | undefined>; /** * Sends given data to service subscription channel * * @param {JsonObject} data */ publish(data: JsonObject): Promise<void>; /** * Stops service from handling messages * * @return {Promise<void>} */ stop(): Promise<void>; /** * Destroys this instance of service * * @return {Promise<void>} */ destroy(): Promise<void>; /** * Returns service description metadata. * * @returns {Promise<Description>} */ describe(): Description; } /** * Sends IMQ response with support of after call optional hook * * @param {IMQRPCRequest} request - from message identifier * @param {IMQRPCResponse} response - response to send * @param {IMQService} service - imq service to bind * @return {Promise<string>} - send result message identifier */ export declare function send(request: IMQRPCRequest, response: IMQRPCResponse, service: IMQService): Promise<string>;