@grpc.ts/fastify-server
Version:
Fastify package for server
53 lines (49 loc) • 1.59 kB
JavaScript
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 };