From 077484026cf541ac0a4e541d4a4c6cb1f27729f0 Mon Sep 17 00:00:00 2001 From: winprn Date: Mon, 16 Dec 2024 14:43:42 +0700 Subject: [PATCH] feat: add relection service to rpc --- packages/node/package.json | 2 ++ packages/node/src/rpc/index.ts | 11 +++++++++++ pnpm-lock.yaml | 17 +++++++++++++++++ 3 files changed, 30 insertions(+) diff --git a/packages/node/package.json b/packages/node/package.json index 6daa5a4a..e898a0aa 100644 --- a/packages/node/package.json +++ b/packages/node/package.json @@ -34,6 +34,8 @@ "dependencies": { "@chainsafe/libp2p-gossipsub": "^14.1.0", "@grpc/grpc-js": "^1.12.2", + "@grpc/proto-loader": "^0.7.13", + "@grpc/reflection": "^1.0.4", "@libp2p/interface": "^2.1.3", "dotenv": "^16.4.5", "@ts-drp/blueprints": "0.4.0", diff --git a/packages/node/src/rpc/index.ts b/packages/node/src/rpc/index.ts index b3cd0c01..6a340298 100644 --- a/packages/node/src/rpc/index.ts +++ b/packages/node/src/rpc/index.ts @@ -1,4 +1,6 @@ import * as grpc from "@grpc/grpc-js"; +import * as protoLoader from "@grpc/proto-loader"; +import * as reflection from "@grpc/reflection"; import type { ServerUnaryCall, sendUnaryData } from "@grpc/grpc-js"; import { type DRPNode, log } from "../index.js"; @@ -11,6 +13,11 @@ import type { UnsubscribeDRPRequest, UnsubscribeDRPResponse, } from "../proto/drp/node/v1/rpc_pb.js"; +import path, { dirname } from "node:path"; +import { fileURLToPath } from "node:url"; +const __filename = fileURLToPath(import.meta.url); +const __dirname = dirname(__filename); +const PROTO_PATH = path.resolve(__dirname, "../proto/topology/node/rpc.proto"); export function init(node: DRPNode) { function subscribeDRP( @@ -70,7 +77,11 @@ export function init(node: DRPNode) { callback(null, response); } + const packageDefinition = protoLoader.loadSync(PROTO_PATH); + const reflectionService = new reflection.ReflectionService(packageDefinition); + const server = new grpc.Server(); + reflectionService.addToServer(server); server.addService(DRPRpcService, { subscribeDRP, unsubscribeDRP, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a7039d2c..b7420d28 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -227,6 +227,12 @@ importers: '@grpc/grpc-js': specifier: ^1.12.2 version: 1.12.4 + '@grpc/proto-loader': + specifier: ^0.7.13 + version: 0.7.13 + '@grpc/reflection': + specifier: ^1.0.4 + version: 1.0.4(@grpc/grpc-js@1.12.4) '@libp2p/interface': specifier: ^2.1.3 version: 2.2.1 @@ -1474,6 +1480,11 @@ packages: engines: {node: '>=6'} hasBin: true + '@grpc/reflection@1.0.4': + resolution: {integrity: sha512-znA8v4AviOD3OPOxy11pxrtP8k8DanpefeTymS8iGW1fVr1U2cHuzfhYqDPHnVNDf4qvF9E25KtSihPy2DBWfQ==} + peerDependencies: + '@grpc/grpc-js': ^1.8.21 + '@iarna/toml@2.2.5': resolution: {integrity: sha512-trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg==} @@ -6304,6 +6315,12 @@ snapshots: protobufjs: 7.4.0 yargs: 17.7.2 + '@grpc/reflection@1.0.4(@grpc/grpc-js@1.12.4)': + dependencies: + '@grpc/grpc-js': 1.12.4 + '@grpc/proto-loader': 0.7.13 + protobufjs: 7.4.0 + '@iarna/toml@2.2.5': {} '@inquirer/figures@1.0.8': {}