UNPKG

@grpc.ts/fastify-server

Version:
53 lines (49 loc) 1.59 kB
import fp from 'fastify-plugin'; import { createServer } from '@grpc.ts/core'; export { GrpcTimestamp, ServerCredentials, StatusBuilder, createMetadata, createSecureContext, createServer, dateToGrpcTimestamp, grpcTimestampToDate } from '@grpc.ts/core'; async function createServers(options) { if (!Array.isArray(options)) { options = [options]; } const servers = await Promise.allSettled(options.map(async ({ serverName = '', ...opts }) => { const serverObj = await createServer(opts); return { serverObj, serverName, }; })); return servers.reduce((result, settledServer) => { if (settledServer.status === 'fulfilled') { const { serverName, serverObj } = settledServer.value; result[serverName] = serverObj; } return result; }, {}); } let grpcServerList = {}; const getServer = (serverName = '') => { return grpcServerList[serverName]; }; const grpcServer = async (fastify, options) => { if (!fastify.hasDecorator('grpcServer')) { fastify.decorate('grpcServer', { getServer, }); } const list = await createServers(options); grpcServerList = { ...grpcServerList, ...list, }; fastify.addHook('onClose', onClose); function onClose() { Object.values(grpcServerList).forEach((grpcServer) => { grpcServer.server.forceShutdown(); }); } }; var index = fp(grpcServer, { fastify: '>=3', name: '@grpc.ts/fastify-server', }); export { index as default };