Compose
Source Handlers
gRPC / Protobuf

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.

image

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'
        }
      })
    }
  ]
})