grpclisted
Install: claude install-skill claude-dev-suite/claude-dev-suite
# gRPC
## Proto Definition
```protobuf
// proto/product.proto
syntax = "proto3";
package product;
service ProductService {
rpc GetProduct(GetProductRequest) returns (Product);
rpc ListProducts(ListProductsRequest) returns (stream Product); // Server streaming
rpc UploadProducts(stream Product) returns (UploadResponse); // Client streaming
rpc SyncProducts(stream SyncRequest) returns (stream SyncResponse); // Bidirectional
}
message Product {
string id = 1;
string name = 2;
double price = 3;
repeated string tags = 4;
google.protobuf.Timestamp created_at = 5;
}
message GetProductRequest { string id = 1; }
message ListProductsRequest {
int32 page_size = 1;
string page_token = 2;
}
message UploadResponse { int32 count = 1; }
```
## Node.js (@grpc/grpc-js)
```typescript
import * as grpc from '@grpc/grpc-js';
import * as protoLoader from '@grpc/proto-loader';
const packageDef = protoLoader.loadSync('proto/product.proto');
const proto = grpc.loadPackageDefinition(packageDef).product as any;
// Server
const server = new grpc.Server();
server.addService(proto.ProductService.service, {
getProduct: (call: any, callback: any) => {
const product = db.findProduct(call.request.id);
callback(null, product);
},
listProducts: (call: any) => {
const products = db.listProducts(call.request);
for (const p of products) call.write(p);
call.end();
},
});
server.bindAsync('0.0.0.0:50051', grpc.ServerCredentials.createInsecure(), (