in src/rpc.ts [136:173]
public expose<T>(method: string, handler: (params: T) => Promise<any> | any): this {
this.on(method, (data: IRPCMethod<T>) => {
if (data.discard) {
handler(data.params);
return;
}
// tslint:disable-next-line
new Promise(resolve => resolve(handler(data.params)))
.then(
result =>
({
type: 'reply',
serviceID: this.options.serviceId,
id: data.id,
result,
} as IRPCReply<any>),
)
.catch(
(err: Error) =>
({
type: 'reply',
serviceID: this.options.serviceId,
id: data.id,
error:
err instanceof RPCError
? err.toReplyError()
: { code: 0, message: err.stack || err.message },
} as IRPCReply<any>),
)
.then(packet => {
this.emit('sendReply', packet);
this.post(packet);
});
});
return this;
}