import { createServer } from 'nice-grpc'; import { HealthDefinition, HealthServiceImpl } from 'nice-grpc-server-health'; import { Log } from 'lib/Log'; import grpc from 'src/api/grpc'; import { Global, Buyer } from '@nextgenleads/dnc'; const log = Log.child({ module: 'grpc', }); interface GRPCState { server?: ReturnType; } const state: GRPCState = { server: undefined, }; export const getServer = (): GRPCState['server'] => state.server; export function connect(host: string, port: string) { return new Promise((resolve, reject) => { const grpcAddress = `${host}:${port}`; const grpcServer = createServer(); grpcServer.add(HealthDefinition, HealthServiceImpl()); // eslint-disable-next-line @typescript-eslint/no-unsafe-argument grpcServer.add(Global.GlobalServiceDefinition, grpc.v1.Global as any); // eslint-disable-next-line @typescript-eslint/no-unsafe-argument grpcServer.add(Buyer.BuyerServiceDefinition, grpc.v1.Buyer as any); grpcServer .listen(grpcAddress) .then(() => { log.info('GRPC started @ %s', grpcAddress); state.server = grpcServer; resolve(); }) .catch((err: Error) => { log.fatal('Failed to start GRPC', err); reject(err); }); }); } export default connect;