fullstorydev / fullstorydev/grpcurl

gRPC Reflection doesn't support maps

Open
#519 4 comments 0 reactions 0 assignees View on GitHub
Dominant language
Go
Stars
12.8k
Forks
580
Avg merge
1h 8m
Merged PRs (30d)
5

Description

`grpcurl` errors if reflection is enabled and protobuf has `map` fields defined:

```
$ grpcurl -plaintext localhost:5000 helloworld.Greeter/SayHello

Error invoking method "helloworld.Greeter/SayHello": failed to query for service descriptor "helloworld.Greeter": proto:
message field "helloworld.HelloReply.field" is an invalid map: incorrect implicit map entry name
```

```proto
// helloworld.proto

syntax = "proto3";

package helloworld;

service Greeter {
rpc SayHello (HelloRequest) returns (HelloReply) {}
}

message HelloRequest {
string name = 1;
}

message HelloReply {
map field = 1;
}
```

```js
// server.mjs

import {
Server,
loadPackageDefinition,
ServerCredentials,
} from '@grpc/grpc-js';
import { loadSync } from '@grpc/proto-loader';
import reflection from '@grpc/reflection';

const PROTO_PATH = './helloworld.proto';

const server = new Server();
const packageDefinition = loadSync(PROTO_PATH);
const proto = loadPackageDefinition(packageDefinition);
new reflection.ReflectionService(packageDefinition).addToServer(server);

server.addService(proto.helloworld.Greeter.service, {
sayHello: (call, callback) => {
callback(null, { message: 'Hello' });
},
});

server.bindAsync('localhost:5000', ServerCredentials.createInsecure(), () => {
server.start();
});
```

In Postman and Insomnia reflection works fine. Removing `map` field also helps

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.