import grpc from '@grpc/grpc-js'; import proto from '@grpc/proto-loader'; export function loadPubSub() { const PROTO_PATH = 'grpc/service.proto'; const packageDefinition = proto.loadSync(PROTO_PATH, {}); const protoDescriptor = grpc.loadPackageDefinition(packageDefinition); return protoDescriptor.pubsub; } export function setupgRPC(handler) { const server = new grpc.Server(); const pubsub = loadPubSub(); server.addService(pubsub.PubSub.service, handler) return server } export function createClient(address) { const pubsub = loadPubSub() return new pubsub.PubSub(address, grpc.credentials.createInsecure()); } export function startServer( address, handler, logger, ) { const server = setupgRPC(handler) server.bindAsync(address, grpc.ServerCredentials.createInsecure(), () => { logger.info(`Started server on ${address}`) server.start(); }); return server }