gRPC / Protobuf
💡
This page is currently under construction and expected to change. Please feel free to reach out to us directly in case you are having any troubles.
This Handler allows you to load gRPC definition files (.proto
).
npm i @omnigraph/grpc
Then you can use it in your Mesh configuration:
mesh.config.ts
import loadGRPCSubgraph from '@omnigraph/grpc'
import { defineConfig } from '@graphql-mesh/compose-cli'
export const composeConfig = defineConfig({
subgraphs: [
{
sourceHandler: loadGRPCSubgraph('MyGrpcApi', {
// gRPC Endpoint
endpoint: 'localhost:50051',
// Path to the proto file
source: 'grpc/proto/Example.proto',
// or
source: {
file: 'grpc/proto/Example.proto',
load: {
defaults: true,
includeDirs: ['grpc/proto']
}
}
// Request timeout in milliseconds
requestTimeout: 200_000,
// Use HTTPS instead HTTP for gRPC connection
useHTTPS: false,
// Use SSL credentials for gRPC connection
credentialsSsl: {
rootCA: 'path/to/rootCA.pem',
certChain: 'path/to/certChain.pem',
},
// Prefix to collect Query method default: list, get
prefixQueryMethod: ['list', 'get'],
// Headers for the protobuf if URL is provided
schemaHeaders: {
'x-api-key': 'my-api-key'
}
})
}
]
})
Use Reflection instead of proto files
If you have configured reflection in your gRPC server, you don’t need to provide source
.
mesh.config.ts
import { defineConfig } from '@graphql-mesh/compose-cli'
import loadGRPCSubgraph from '@omnigraph/grpc'
export const composeConfig = defineConfig({
subgraphs: [
{
sourceHandler: loadGRPCSubgraph('MyGrpcApi', {
endpoint: 'localhost:50051'
})
}
]
})
Custom Metadata for Authorization
Here you can use metaData
field to pass some custom metadata from the context.
mesh.config.ts
import { defineConfig } from '@graphql-mesh/compose-cli'
import loadGRPCSubgraph from '@omnigraph/grpc'
export const composeConfig = defineConfig({
subgraphs: [
{
sourceHandler: loadGRPCSubgraph('MyGrpcApi', {
endpoint: 'localhost:50051',
metaData: {
authorization: "Bearer {context.headers['x-my-token']}",
someStaticValue: 'MyStaticValue'
}
})
}
]
})