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/proto/drp/node/v1/rpc_grpc_pb.js b/packages/node/src/proto/drp/node/v1/rpc_grpc_pb.js index 62562741..c80475cb 100644 --- a/packages/node/src/proto/drp/node/v1/rpc_grpc_pb.js +++ b/packages/node/src/proto/drp/node/v1/rpc_grpc_pb.js @@ -1,62 +1,78 @@ import * as node_src_proto_rpc_pb from './rpc_pb.js'; function serialize_drp_node_GetDRPHashGraphRequest(arg) { - let encoded = node_src_proto_rpc_pb.GetDRPHashGraphRequest.encode(arg).finish() - return Buffer.from(encoded); + let encoded = + node_src_proto_rpc_pb.GetDRPHashGraphRequest.encode(arg).finish(); + return Buffer.from(encoded); } function deserialize_drp_node_GetDRPHashGraphRequest(buffer_arg) { - return node_src_proto_rpc_pb.GetDRPHashGraphRequest.decode(new Uint8Array(buffer_arg)); + return node_src_proto_rpc_pb.GetDRPHashGraphRequest.decode( + new Uint8Array(buffer_arg) + ); } function serialize_drp_node_GetDRPHashGraphResponse(arg) { - let encoded = node_src_proto_rpc_pb.GetDRPHashGraphResponse.encode(arg).finish() - return Buffer.from(encoded); + let encoded = + node_src_proto_rpc_pb.GetDRPHashGraphResponse.encode(arg).finish(); + return Buffer.from(encoded); } function deserialize_drp_node_GetDRPHashGraphResponse(buffer_arg) { - return node_src_proto_rpc_pb.GetDRPHashGraphResponse.decode(new Uint8Array(buffer_arg)); + return node_src_proto_rpc_pb.GetDRPHashGraphResponse.decode( + new Uint8Array(buffer_arg) + ); } function serialize_drp_node_SubscribeDRPRequest(arg) { - let encoded = node_src_proto_rpc_pb.SubscribeDRPRequest.encode(arg).finish() - return Buffer.from(encoded); + let encoded = node_src_proto_rpc_pb.SubscribeDRPRequest.encode(arg).finish(); + return Buffer.from(encoded); } function deserialize_drp_node_SubscribeDRPRequest(buffer_arg) { - return node_src_proto_rpc_pb.SubscribeDRPRequest.decode(new Uint8Array(buffer_arg)); + return node_src_proto_rpc_pb.SubscribeDRPRequest.decode( + new Uint8Array(buffer_arg) + ); } function serialize_drp_node_SubscribeDRPResponse(arg) { - let encoded = node_src_proto_rpc_pb.SubscribeDRPResponse.encode(arg).finish() + let encoded = node_src_proto_rpc_pb.SubscribeDRPResponse.encode(arg).finish(); return Buffer.from(encoded); } function deserialize_drp_node_SubscribeDRPResponse(buffer_arg) { - return node_src_proto_rpc_pb.SubscribeDRPResponse.decode(new Uint8Array(buffer_arg)); + return node_src_proto_rpc_pb.SubscribeDRPResponse.decode( + new Uint8Array(buffer_arg) + ); } function serialize_drp_node_UnsubscribeDRPRequest(arg) { - let encoded = node_src_proto_rpc_pb.UnsubscribeDRPRequest.encode(arg).finish() - return Buffer.from(encoded); + let encoded = + node_src_proto_rpc_pb.UnsubscribeDRPRequest.encode(arg).finish(); + return Buffer.from(encoded); } function deserialize_drp_node_UnsubscribeDRPRequest(buffer_arg) { - return node_src_proto_rpc_pb.UnsubscribeDRPRequest.decode(new Uint8Array(buffer_arg)); + return node_src_proto_rpc_pb.UnsubscribeDRPRequest.decode( + new Uint8Array(buffer_arg) + ); } function serialize_drp_node_UnsubscribeDRPResponse(arg) { - let encoded = node_src_proto_rpc_pb.UnsubscribeDRPResponse.encode(arg).finish() - return Buffer.from(encoded); + let encoded = + node_src_proto_rpc_pb.UnsubscribeDRPResponse.encode(arg).finish(); + return Buffer.from(encoded); } function deserialize_drp_node_UnsubscribeDRPResponse(buffer_arg) { - return node_src_proto_rpc_pb.UnsubscribeDRPResponse.decode(new Uint8Array(buffer_arg)); + return node_src_proto_rpc_pb.UnsubscribeDRPResponse.decode( + new Uint8Array(buffer_arg) + ); } export const DRPRpcService = { subscribeDRP: { - path: '/drp.node.drpRpc/subscribeDRP', + path: '/drp.node.v1.DrpRpcService/SubscribeDRP', requestStream: false, responseStream: false, requestType: node_src_proto_rpc_pb.SubscribeDRPRequest, @@ -67,7 +83,7 @@ export const DRPRpcService = { responseDeserialize: deserialize_drp_node_SubscribeDRPResponse, }, unsubscribeDRP: { - path: '/drp.node.drpRpc/unsubscribeDRP', + path: '/drp.node.v1.DrpRpcService/UnsubscribeDRP', requestStream: false, responseStream: false, requestType: node_src_proto_rpc_pb.UnsubscribeDRPRequest, @@ -78,7 +94,7 @@ export const DRPRpcService = { responseDeserialize: deserialize_drp_node_UnsubscribeDRPResponse, }, getDRPHashGraph: { - path: '/drp.node.drpRpc/getDRPHashGraph', + path: '/drp.node.v1.DrpRpcService/GetDRPHashGraph', requestStream: false, responseStream: false, requestType: node_src_proto_rpc_pb.GetDRPHashGraphRequest, diff --git a/packages/node/src/rpc/index.ts b/packages/node/src/rpc/index.ts index b3cd0c01..3c0bce33 100644 --- a/packages/node/src/rpc/index.ts +++ b/packages/node/src/rpc/index.ts @@ -1,5 +1,9 @@ import * as grpc from "@grpc/grpc-js"; +import * as protoLoader from "@grpc/proto-loader"; +import * as reflection from "@grpc/reflection"; +import path, { dirname } from "node:path"; +import { fileURLToPath } from "node:url"; import type { ServerUnaryCall, sendUnaryData } from "@grpc/grpc-js"; import { type DRPNode, log } from "../index.js"; import { DRPRpcService } from "../proto/drp/node/v1/rpc_grpc_pb.js"; @@ -70,7 +74,15 @@ export function init(node: DRPNode) { callback(null, response); } + const protoPath = path.resolve( + dirname(fileURLToPath(import.meta.url)), + "../proto/drp/node/v1/rpc.proto", + ); + const packageDefinition = protoLoader.loadSync(protoPath); + 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': {}