import { grpc } from '@improbable-eng/grpc-web' import { NodeHttpTransport } from '@improbable-eng/grpc-web-node-http-transport' import { isServerSide } from '../utils/helpers' if (isServerSide()) { grpc.setDefaultTransport(NodeHttpTransport()) } /** * @hidden */ export default class BaseGrpcConsumer { protected endpoint: string constructor(endpoint: string) { this.endpoint = endpoint } protected request< TRequest extends grpc.ProtobufMessage, TResponse extends grpc.ProtobufMessage, S extends grpc.UnaryMethodDefinition, >(request: TRequest, service: S): Promise { return new Promise((resolve, reject) => { grpc.unary(service, { request, host: this.endpoint, onEnd: (res) => { const { statusMessage, status, message } = res if (status === grpc.Code.OK && message) { resolve(message as TResponse) } reject(new Error(statusMessage)) }, }) }) } }