Fastify's Plugin for Server.
Install
npm install --save @grpc.ts/fastify-server
yarn add @grpc.ts/fastify-server
pnpm add @grpc.ts/fastify-server
Usage
// example.proto
syntax = "proto3";
import "google/protobuf/timestamp.proto";
package example.v1;
message Message {
string message = 1;
google.protobuf.Timestamp created_at = 2;
}
message SendMessageRequest {
string message = 1;
google.protobuf.Timestamp created_at = 2;
}
message GetMessageResponse { Message message = 1; }
service ExampleService {
rpc SendMessage(SendMessageRequest) returns (GetMessageResponse);
}
In fastify
import Fastify from 'fastify';
import detect from 'detect-port';
import FastifyGrpcServer, {
dateToGrpcTimestamp,
} from '@grpc.ts/fastify-server';
const fastify = Fastify({
logger: process.env.NODE_ENV === 'production' ? false : true,
});
async function bootstrap(): Promise<typeof fastify> {
fastify.register(FastifyGrpcServer, {
url: 'localhost:3010',
package: [
{
packageName: 'example.v1',
protoPath: '../proto/example.proto',
},
{
packageName: 'example2.v1',
protoPath: '../proto/example2.proto',
},
{
protoPath: '../proto/example3.proto',
},
],
packageDefinitionOptions: {
oneofs: true,
longs: String,
enums: String,
defaults: true,
},
options: {
keepaliveTimeMs: 5_000,
},
});
const port = await detect(3_000);
await fastify.listen({
port,
});
fastify.grpcServer
.getServer()
.addUnaryHandler('ExampleService', 'sendMessage', (request, metadata) => {
console.log(request);
console.log(metadata);
return {
message: {
message: 'hola',
createdAt: dateToGrpcTimestamp(new Date()),
},
};
});
return fastify;
}
bootstrap();
TODO