Skip to content

August 24, 2026

Latest

Choose a tag to compare

@github-actions github-actions released this 24 Aug 17:29
70de3cd

@graphql-mesh/cache-cfw-kv@0.108.1

Patch Changes

  • Updated dependencies
    [c7f0f3f,
    c7f0f3f]:
    • @graphql-mesh/types@0.107.1
    • @graphql-mesh/utils@0.107.1

@graphql-mesh/cache-file@0.107.1

Patch Changes

  • Updated dependencies
    [c7f0f3f,
    c7f0f3f]:
    • @graphql-mesh/types@0.107.1
    • @graphql-mesh/utils@0.107.1

@graphql-mesh/cache-inmemory-lru@0.11.1

Patch Changes

  • Updated dependencies
    [c7f0f3f,
    c7f0f3f]:
    • @graphql-mesh/types@0.107.1
    • @graphql-mesh/utils@0.107.1

@graphql-mesh/cache-localforage@0.108.1

Patch Changes

  • Updated dependencies
    [c7f0f3f,
    c7f0f3f]:
    • @graphql-mesh/types@0.107.1
    • @graphql-mesh/cache-inmemory-lru@0.11.1
    • @graphql-mesh/utils@0.107.1

@graphql-mesh/cache-redis@0.108.1

Patch Changes

  • Updated dependencies
    [c7f0f3f,
    c7f0f3f]:
    • @graphql-mesh/types@0.107.1

@graphql-mesh/cache-upstash-redis@0.4.1

Patch Changes

  • Updated dependencies
    [c7f0f3f,
    c7f0f3f]:
    • @graphql-mesh/types@0.107.1

@graphql-mesh/compose-cli@1.8.2

Patch Changes

  • Updated dependencies
    [c7f0f3f,
    c7f0f3f]:
    • @graphql-mesh/types@0.107.1
    • @graphql-mesh/utils@0.107.1
    • @graphql-mesh/fusion-composition@0.11.2

@graphql-mesh/fusion-composition@0.11.2

Patch Changes

  • Updated dependencies []:
    • @graphql-mesh/utils@0.107.1

@graphql-mesh/incontext-sdk-codegen@0.3.1

Patch Changes

  • Updated dependencies
    [c7f0f3f,
    c7f0f3f]:
    • @graphql-mesh/types@0.107.1
    • @graphql-mesh/utils@0.107.1

@graphql-mesh/apollo-link@0.109.1

Patch Changes

  • Updated dependencies []:
    • @graphql-mesh/runtime@0.109.1

@graphql-mesh/cli@0.103.2

Patch Changes

  • Updated dependencies
    [c7f0f3f,
    c7f0f3f]:
    • @graphql-mesh/types@0.107.1
    • @graphql-mesh/incontext-sdk-codegen@0.3.1
    • @graphql-mesh/config@0.111.1
    • @graphql-mesh/http@0.109.1
    • @graphql-mesh/runtime@0.109.1
    • @graphql-mesh/store@0.107.1
    • @graphql-mesh/utils@0.107.1

@graphql-mesh/config@0.111.1

Patch Changes

  • Updated dependencies
    [c7f0f3f,
    c7f0f3f]:
    • @graphql-mesh/types@0.107.1
    • @graphql-mesh/cache-localforage@0.108.1
    • @graphql-mesh/merger-bare@0.108.1
    • @graphql-mesh/merger-stitching@0.108.1
    • @graphql-mesh/runtime@0.109.1
    • @graphql-mesh/store@0.107.1
    • @graphql-mesh/utils@0.107.1

@graphql-mesh/graphql@0.107.1

Patch Changes

  • Updated dependencies
    [c7f0f3f,
    c7f0f3f]:
    • @graphql-mesh/types@0.107.1
    • @graphql-mesh/store@0.107.1
    • @graphql-mesh/utils@0.107.1

@graphql-mesh/grpc@0.112.0

Minor Changes

  • #9650
    c7f0f3f
    Thanks @ardatan! - gRPC: pass channelOptions through to the gRPC
    client

    Use this for message size limits, keepalive, and other
    channel args. Options are stored
    as entries so dotted keys like grpc.max_receive_message_length stay GraphQL-safe in the composed
    schema.

    import { defineConfig } from '@graphql-mesh/compose-cli'
    import loadGrpcSubgraph from '@omnigraph/grpc'
    
    export const composeConfig = defineConfig({
      subgraphs: [
        {
          sourceHandler: loadGrpcSubgraph('MyGrpcApi', {
            endpoint: 'localhost:50051',
            channelOptions: {
              'grpc.max_receive_message_length': 10_000_000,
              'grpc.keepalive_time_ms': 10_000,
              'grpc.keepalive_timeout_ms': 5_000,
              'grpc.keepalive_permit_without_calls': 1
            }
          })
        }
      ]
    })

    Legacy Mesh:

    sources:
      - name: MyGrpcApi
        handler:
          grpc:
            endpoint: localhost:50051
            channelOptions:
              grpc.max_receive_message_length: 10000000
              grpc.keepalive_time_ms: 10000
  • #9650
    c7f0f3f
    Thanks @ardatan! - gRPC: add reflectionMetadata for
    server-reflection requests

    Send routing / auth metadata only when loading the schema via gRPC reflection (no source).
    Runtime RPC metadata remains metaData; HTTP headers for a remote .graphql SDL remain
    schemaHeaders.

    import { defineConfig } from '@graphql-mesh/compose-cli'
    import loadGrpcSubgraph from '@omnigraph/grpc'
    
    export const composeConfig = defineConfig({
      subgraphs: [
        {
          sourceHandler: loadGrpcSubgraph('MyGrpcApi', {
            endpoint: 'localhost:50051',
            // No `source` β†’ schema loaded via reflection
            reflectionMetadata: {
              'grpc-service': 'proto.MyGrpcService',
              authorization: 'Bearer {env.REFLECTION_TOKEN}'
            }
          })
        }
      ]
    })

    Legacy Mesh:

    sources:
      - name: MyGrpcApi
        handler:
          grpc:
            endpoint: localhost:50051
            reflectionMetadata:
              grpc-service: proto.MyGrpcService
              authorization: 'Bearer {env.REFLECTION_TOKEN}'
  • #9650
    c7f0f3f
    Thanks @ardatan! - gRPC: apply requestTimeout as a real per-call
    deadline

    Previously requestTimeout was not enforced as a gRPC deadline, so a hung upstream could leave
    the GraphQL request waiting indefinitely. It is now set on each call via CallOptions.deadline
    (Date.now() + requestTimeout).

    import { defineConfig } from '@graphql-mesh/compose-cli'
    import loadGrpcSubgraph from '@omnigraph/grpc'
    
    export const composeConfig = defineConfig({
      subgraphs: [
        {
          sourceHandler: loadGrpcSubgraph('MyGrpcApi', {
            endpoint: 'localhost:50051',
            // Fail the call if the server does not respond within 5s
            requestTimeout: 5000
          })
        }
      ]
    })

    Legacy Mesh:

    sources:
      - name: MyGrpcApi
        handler:
          grpc:
            endpoint: localhost:50051
            requestTimeout: 5000

Patch Changes

  • #9650
    c7f0f3f
    Thanks @ardatan! - gRPC: tear down clients via
    Client.prototype.close

    If a service defines an RPC named Close, that method was previously shadowing the gRPC client's
    connection close(), so Mesh could not dispose the channel cleanly. Teardown now always calls
    Client.prototype.close.

    No config change is required β€” services with a Close RPC continue to expose that operation in
    the GraphQL schema, while gateway/Mesh shutdown still closes the underlying connection.

  • #9650
    c7f0f3f
    Thanks @ardatan! - gRPC: treat missing or empty source as
    reflection

    Omitting source, setting it to '', or using { file: '' } now correctly falls back to gRPC
    server reflection instead of failing to load a proto/descriptor.

    import { defineConfig } from '@graphql-mesh/compose-cli'
    import loadGrpcSubgraph from '@omnigraph/grpc'
    
    export const composeConfig = defineConfig({
      subgraphs: [
        {
          sourceHandler: loadGrpcSubgraph('MyGrpcApi', {
            endpoint: 'localhost:50051'
            // source omitted β†’ reflection
          })
        }
      ]
    })

    Legacy Mesh (empty file path also reflects):

    sources:
      - name: MyGrpcApi
        handler:
          grpc:
            endpoint: localhost:50051
            # source omitted or empty β†’ reflection
  • Updated dependencies
    [c7f0f3f,
    c7f0f3f,
    c7f0f3f,
    c7f0f3f,
    c7f0f3f,
    c7f0f3f]:

    • @omnigraph/grpc@0.3.0
    • @graphql-mesh/transport-grpc@0.7.0
    • @graphql-mesh/types@0.107.1
    • @graphql-mesh/store@0.107.1
    • @graphql-mesh/utils@0.107.1

@graphql-mesh/json-schema@0.112.3

Patch Changes

  • Updated dependencies
    [c7f0f3f,
    c7f0f3f,
    1a6dc08]:
    • @graphql-mesh/types@0.107.1
    • @omnigraph/json-schema@0.112.3
    • @graphql-mesh/store@0.107.1
    • @graphql-mesh/utils@0.107.1

@graphql-mesh/mongoose@0.107.1

Patch Changes

  • Updated dependencies
    [c7f0f3f,
    c7f0f3f]:
    • @graphql-mesh/types@0.107.1
    • @graphql-mesh/utils@0.107.1

@graphql-mesh/mysql@0.108.1

Patch Changes

  • Updated dependencies
    [c7f0f3f,
    c7f0f3f]:
    • @graphql-mesh/types@0.107.1
    • @graphql-mesh/store@0.107.1
    • @graphql-mesh/utils@0.107.1
    • @omnigraph/mysql@0.12.1

@graphql-mesh/neo4j@0.110.1

Patch Changes

  • Updated dependencies
    [c7f0f3f,
    c7f0f3f]:
    • @graphql-mesh/types@0.107.1
    • @graphql-mesh/store@0.107.1
    • @graphql-mesh/utils@0.107.1
    • @omnigraph/neo4j@0.14.1

@graphql-mesh/odata@0.109.1

Patch Changes

  • Updated dependencies
    [c7f0f3f,
    c7f0f3f]:
    • @graphql-mesh/types@0.107.1
    • @graphql-mesh/store@0.107.1
    • @omnigraph/odata@0.5.1

@graphql-mesh/openapi@0.112.3

Patch Changes

  • Updated dependencies
    [c7f0f3f,
    c7f0f3f,
    1a6dc08]:
    • @graphql-mesh/types@0.107.1
    • @omnigraph/openapi@0.112.3
    • @graphql-mesh/store@0.107.1
    • @graphql-mesh/utils@0.107.1

@graphql-mesh/postgraphile@0.107.1

Patch Changes

  • Updated dependencies
    [c7f0f3f,
    c7f0f3f]:
    • @graphql-mesh/types@0.107.1
    • @graphql-mesh/store@0.107.1
    • @graphql-mesh/utils@0.107.1

@graphql-mesh/raml@0.112.3

Patch Changes

  • Updated dependencies
    [c7f0f3f,
    c7f0f3f]:
    • @graphql-mesh/types@0.107.1
    • @graphql-mesh/store@0.107.1
    • @graphql-mesh/utils@0.107.1
    • @omnigraph/raml@0.112.3

@graphql-mesh/soap@0.110.1

Patch Changes

  • Updated dependencies
    [c7f0f3f,
    c7f0f3f]:
    • @graphql-mesh/types@0.107.1
    • @graphql-mesh/store@0.107.1
    • @graphql-mesh/utils@0.107.1
    • @omnigraph/soap@0.110.1

@graphql-mesh/supergraph@0.13.1

Patch Changes

  • Updated dependencies
    [c7f0f3f,
    c7f0f3f]:
    • @graphql-mesh/types@0.107.1
    • @graphql-mesh/store@0.107.1
    • @graphql-mesh/utils@0.107.1

@graphql-mesh/thrift@0.109.1

Patch Changes

  • Updated dependencies
    [c7f0f3f,
    c7f0f3f]:
    • @graphql-mesh/types@0.107.1
    • @graphql-mesh/store@0.107.1
    • @graphql-mesh/utils@0.107.1
    • @omnigraph/thrift@0.12.1

@graphql-mesh/tuql@0.108.1

Patch Changes

  • Updated dependencies
    [c7f0f3f,
    c7f0f3f]:
    • @graphql-mesh/types@0.107.1
    • @omnigraph/sqlite@0.11.1

@graphql-mesh/http@0.109.1

Patch Changes

  • Updated dependencies
    [c7f0f3f,
    c7f0f3f]:
    • @graphql-mesh/types@0.107.1
    • @graphql-mesh/runtime@0.109.1
    • @graphql-mesh/utils@0.107.1

@graphql-mesh/merger-bare@0.108.1

Patch Changes

  • Updated dependencies
    [c7f0f3f,
    c7f0f3f]:
    • @graphql-mesh/types@0.107.1
    • @graphql-mesh/merger-stitching@0.108.1
    • @graphql-mesh/utils@0.107.1

@graphql-mesh/merger-stitching@0.108.1

Patch Changes

  • Updated dependencies
    [c7f0f3f,
    c7f0f3f]:
    • @graphql-mesh/types@0.107.1
    • @graphql-mesh/store@0.107.1
    • @graphql-mesh/utils@0.107.1

@graphql-mesh/migrate-config-cli@1.10.2

Patch Changes

  • Updated dependencies
    [c7f0f3f,
    c7f0f3f]:
    • @graphql-mesh/types@0.107.1
    • @graphql-mesh/compose-cli@1.8.2
    • @graphql-mesh/cli@0.103.2
    • @graphql-mesh/config@0.111.1
    • @graphql-mesh/utils@0.107.1

@graphql-mesh/runtime@0.109.1

Patch Changes

  • Updated dependencies
    [c7f0f3f,
    c7f0f3f]:
    • @graphql-mesh/types@0.107.1
    • @graphql-mesh/utils@0.107.1

@graphql-mesh/store@0.107.1

Patch Changes

  • Updated dependencies
    [c7f0f3f,
    c7f0f3f]:
    • @graphql-mesh/types@0.107.1
    • @graphql-mesh/utils@0.107.1

@graphql-mesh/transform-cache@0.108.1

Patch Changes

  • Updated dependencies
    [c7f0f3f,
    c7f0f3f]:
    • @graphql-mesh/types@0.107.1
    • @graphql-mesh/utils@0.107.1

@graphql-mesh/transform-encapsulate@0.107.1

Patch Changes

  • Updated dependencies
    [c7f0f3f,
    c7f0f3f]:
    • @graphql-mesh/types@0.107.1
    • @graphql-mesh/utils@0.107.1

@graphql-mesh/transform-extend@0.107.1

Patch Changes

  • Updated dependencies
    [c7f0f3f,
    c7f0f3f]:
    • @graphql-mesh/types@0.107.1
    • @graphql-mesh/utils@0.107.1

@graphql-mesh/transform-federation@0.107.1

Patch Changes

  • Updated dependencies
    [c7f0f3f,
    c7f0f3f]:
    • @graphql-mesh/types@0.107.1
    • @graphql-mesh/utils@0.107.1

@graphql-mesh/transform-filter-schema@0.107.1

Patch Changes

  • Updated dependencies
    [c7f0f3f,
    c7f0f3f]:
    • @graphql-mesh/types@0.107.1
    • @graphql-mesh/utils@0.107.1

@graphql-mesh/transform-hive@0.107.1

Patch Changes

  • Updated dependencies
    [c7f0f3f,
    c7f0f3f]:
    • @graphql-mesh/types@0.107.1

@graphql-mesh/transform-hoist-field@0.108.1

Patch Changes

  • Updated dependencies
    [c7f0f3f,
    c7f0f3f]:
    • @graphql-mesh/types@0.107.1
    • @graphql-mesh/utils@0.107.1

@graphql-mesh/transform-naming-convention@0.108.1

Patch Changes

  • Updated dependencies
    [c7f0f3f,
    c7f0f3f]:
    • @graphql-mesh/types@0.107.1
    • @graphql-mesh/utils@0.107.1

@graphql-mesh/transform-prefix@0.108.1

Patch Changes

  • Updated dependencies
    [c7f0f3f,
    c7f0f3f]:
    • @graphql-mesh/types@0.107.1
    • @graphql-mesh/utils@0.107.1

@graphql-mesh/transform-prune@0.107.1

Patch Changes

  • Updated dependencies
    [c7f0f3f,
    c7f0f3f]:
    • @graphql-mesh/types@0.107.1

@graphql-mesh/transform-rate-limit@0.108.1

Patch Changes

  • Updated dependencies
    [c7f0f3f,
    c7f0f3f]:
    • @graphql-mesh/types@0.107.1
    • @graphql-mesh/utils@0.107.1

@graphql-mesh/transform-rename@0.108.1

Patch Changes

  • Updated dependencies
    [c7f0f3f,
    c7f0f3f]:
    • @graphql-mesh/types@0.107.1
    • @graphql-mesh/utils@0.107.1

@graphql-mesh/transform-replace-field@0.108.1

Patch Changes

  • Updated dependencies
    [c7f0f3f,
    c7f0f3f]:
    • @graphql-mesh/types@0.107.1
    • @graphql-mesh/utils@0.107.1

@graphql-mesh/transform-resolvers-composition@0.107.1

Patch Changes

  • Updated dependencies
    [c7f0f3f,
    c7f0f3f]:
    • @graphql-mesh/types@0.107.1
    • @graphql-mesh/utils@0.107.1

@graphql-mesh/transform-transfer-schema@0.107.1

Patch Changes

  • Updated dependencies
    [c7f0f3f,
    c7f0f3f]:
    • @graphql-mesh/types@0.107.1
    • @graphql-mesh/utils@0.107.1

@graphql-mesh/transform-type-merging@0.107.1

Patch Changes

  • Updated dependencies
    [c7f0f3f,
    c7f0f3f]:
    • @graphql-mesh/types@0.107.1
    • @graphql-mesh/utils@0.107.1

@graphql-mesh/types@0.107.1

Patch Changes

  • #9650
    c7f0f3f
    Thanks @ardatan! - gRPC: pass channelOptions through to the gRPC
    client

    Use this for message size limits, keepalive, and other
    channel args. Options are stored
    as entries so dotted keys like grpc.max_receive_message_length stay GraphQL-safe in the composed
    schema.

    import { defineConfig } from '@graphql-mesh/compose-cli'
    import loadGrpcSubgraph from '@omnigraph/grpc'
    
    export const composeConfig = defineConfig({
      subgraphs: [
        {
          sourceHandler: loadGrpcSubgraph('MyGrpcApi', {
            endpoint: 'localhost:50051',
            channelOptions: {
              'grpc.max_receive_message_length': 10_000_000,
              'grpc.keepalive_time_ms': 10_000,
              'grpc.keepalive_timeout_ms': 5_000,
              'grpc.keepalive_permit_without_calls': 1
            }
          })
        }
      ]
    })

    Legacy Mesh:

    sources:
      - name: MyGrpcApi
        handler:
          grpc:
            endpoint: localhost:50051
            channelOptions:
              grpc.max_receive_message_length: 10000000
              grpc.keepalive_time_ms: 10000
  • #9650
    c7f0f3f
    Thanks @ardatan! - gRPC: add reflectionMetadata for
    server-reflection requests

    Send routing / auth metadata only when loading the schema via gRPC reflection (no source).
    Runtime RPC metadata remains metaData; HTTP headers for a remote .graphql SDL remain
    schemaHeaders.

    import { defineConfig } from '@graphql-mesh/compose-cli'
    import loadGrpcSubgraph from '@omnigraph/grpc'
    
    export const composeConfig = defineConfig({
      subgraphs: [
        {
          sourceHandler: loadGrpcSubgraph('MyGrpcApi', {
            endpoint: 'localhost:50051',
            // No `source` β†’ schema loaded via reflection
            reflectionMetadata: {
              'grpc-service': 'proto.MyGrpcService',
              authorization: 'Bearer {env.REFLECTION_TOKEN}'
            }
          })
        }
      ]
    })

    Legacy Mesh:

    sources:
      - name: MyGrpcApi
        handler:
          grpc:
            endpoint: localhost:50051
            reflectionMetadata:
              grpc-service: proto.MyGrpcService
              authorization: 'Bearer {env.REFLECTION_TOKEN}'

@graphql-mesh/urql-exchange@0.109.1

Patch Changes

  • Updated dependencies []:
    • @graphql-mesh/runtime@0.109.1

@graphql-mesh/utils@0.107.1

Patch Changes

  • Updated dependencies
    [c7f0f3f,
    c7f0f3f]:
    • @graphql-mesh/types@0.107.1

@omnigraph/grpc@0.3.0

Minor Changes

  • #9650
    c7f0f3f
    Thanks @ardatan! - gRPC: pass channelOptions through to the gRPC
    client

    Use this for message size limits, keepalive, and other
    channel args. Options are stored
    as entries so dotted keys like grpc.max_receive_message_length stay GraphQL-safe in the composed
    schema.

    import { defineConfig } from '@graphql-mesh/compose-cli'
    import loadGrpcSubgraph from '@omnigraph/grpc'
    
    export const composeConfig = defineConfig({
      subgraphs: [
        {
          sourceHandler: loadGrpcSubgraph('MyGrpcApi', {
            endpoint: 'localhost:50051',
            channelOptions: {
              'grpc.max_receive_message_length': 10_000_000,
              'grpc.keepalive_time_ms': 10_000,
              'grpc.keepalive_timeout_ms': 5_000,
              'grpc.keepalive_permit_without_calls': 1
            }
          })
        }
      ]
    })

    Legacy Mesh:

    sources:
      - name: MyGrpcApi
        handler:
          grpc:
            endpoint: localhost:50051
            channelOptions:
              grpc.max_receive_message_length: 10000000
              grpc.keepalive_time_ms: 10000
  • #9650
    c7f0f3f
    Thanks @ardatan! - gRPC: add reflectionMetadata for
    server-reflection requests

    Send routing / auth metadata only when loading the schema via gRPC reflection (no source).
    Runtime RPC metadata remains metaData; HTTP headers for a remote .graphql SDL remain
    schemaHeaders.

    import { defineConfig } from '@graphql-mesh/compose-cli'
    import loadGrpcSubgraph from '@omnigraph/grpc'
    
    export const composeConfig = defineConfig({
      subgraphs: [
        {
          sourceHandler: loadGrpcSubgraph('MyGrpcApi', {
            endpoint: 'localhost:50051',
            // No `source` β†’ schema loaded via reflection
            reflectionMetadata: {
              'grpc-service': 'proto.MyGrpcService',
              authorization: 'Bearer {env.REFLECTION_TOKEN}'
            }
          })
        }
      ]
    })

    Legacy Mesh:

    sources:
      - name: MyGrpcApi
        handler:
          grpc:
            endpoint: localhost:50051
            reflectionMetadata:
              grpc-service: proto.MyGrpcService
              authorization: 'Bearer {env.REFLECTION_TOKEN}'
  • #9650
    c7f0f3f
    Thanks @ardatan! - gRPC: apply requestTimeout as a real per-call
    deadline

    Previously requestTimeout was not enforced as a gRPC deadline, so a hung upstream could leave
    the GraphQL request waiting indefinitely. It is now set on each call via CallOptions.deadline
    (Date.now() + requestTimeout).

    import { defineConfig } from '@graphql-mesh/compose-cli'
    import loadGrpcSubgraph from '@omnigraph/grpc'
    
    export const composeConfig = defineConfig({
      subgraphs: [
        {
          sourceHandler: loadGrpcSubgraph('MyGrpcApi', {
            endpoint: 'localhost:50051',
            // Fail the call if the server does not respond within 5s
            requestTimeout: 5000
          })
        }
      ]
    })

    Legacy Mesh:

    sources:
      - name: MyGrpcApi
        handler:
          grpc:
            endpoint: localhost:50051
            requestTimeout: 5000

Patch Changes

  • #9650
    c7f0f3f
    Thanks @ardatan! - gRPC: treat missing or empty source as
    reflection

    Omitting source, setting it to '', or using { file: '' } now correctly falls back to gRPC
    server reflection instead of failing to load a proto/descriptor.

    import { defineConfig } from '@graphql-mesh/compose-cli'
    import loadGrpcSubgraph from '@omnigraph/grpc'
    
    export const composeConfig = defineConfig({
      subgraphs: [
        {
          sourceHandler: loadGrpcSubgraph('MyGrpcApi', {
            endpoint: 'localhost:50051'
            // source omitted β†’ reflection
          })
        }
      ]
    })

    Legacy Mesh (empty file path also reflects):

    sources:
      - name: MyGrpcApi
        handler:
          grpc:
            endpoint: localhost:50051
            # source omitted or empty β†’ reflection

@omnigraph/json-schema@0.112.3

Patch Changes

  • #9649
    1a6dc08
    Thanks @copilot-swe-agent! - Fix: honor
    loader-level queryStringOptions as fallback in @httpOperation directives

    Previously, when a queryStringOptions was configured at the loader (source) level for OpenAPI or
    JSON Schema subgraphs, the generated @httpOperation directives did not inherit that option
    unless every individual operation explicitly set its own queryStringOptions. This meant that
    loader-level query-string serialization config (e.g. allowDots, arrayFormat) was silently
    ignored at execution time.

    What changed

    In addExecutionDirectivesToComposer, each operation now falls back to the loader-level
    queryStringOptions when the operation itself does not define one:

    queryStringOptions: 'queryStringOptions' in operationConfig
      ? operationConfig.queryStringOptions
      : queryStringOptions // ← new: inherit from loader level

    This aligns with the documented contract where loader-level options apply globally to all
    operations.

    Usage example

    OpenAPI – queryStringOptions set once for all operations:

    // mesh.config.ts
    import { defineConfig } from '@graphql-mesh/compose-cli'
    import { loadOpenAPISubgraph } from '@omnigraph/openapi'
    
    export const composeConfig = defineConfig({
      subgraphs: [
        {
          sourceHandler: loadOpenAPISubgraph('MyApi', {
            source: './openapi.yaml',
            endpoint: 'https://api.example.com',
            // Applied to every operation that doesn't override it
            queryStringOptions: {
              allowDots: true, // serialize nested objects as a.b.c=1
              arrayFormat: 'repeat' // serialize arrays as a=1&a=2
            }
          })
        }
      ]
    })

    JSON Schema – same option at the loader level:

    import { loadGraphQLSchemaFromJSONSchemas } from '@omnigraph/json-schema';
    
    const schema = await loadGraphQLSchemaFromJSONSchemas('MyApi', {
      endpoint: 'https://api.example.com',
      queryStringOptions: {
        arrayFormat: 'brackets', // foo[]=1&foo[]=2
      },
      operations: [...],
    });

    Affected packages

    Package Change
    @omnigraph/json-schema Core fix in addExecutionDirectivesToComposer
    @omnigraph/openapi Inherits fix via @omnigraph/json-schema

    Fixes #8760

  • Updated dependencies
    [c7f0f3f,
    c7f0f3f]:

    • @graphql-mesh/types@0.107.1
    • @graphql-mesh/utils@0.107.1
    • @graphql-mesh/transport-rest@0.12.1

@omnigraph/mysql@0.12.1

Patch Changes

  • Updated dependencies
    [c7f0f3f,
    c7f0f3f]:
    • @graphql-mesh/types@0.107.1
    • @graphql-mesh/utils@0.107.1
    • @graphql-mesh/transport-mysql@0.12.1

@omnigraph/neo4j@0.14.1

Patch Changes

  • Updated dependencies
    [c7f0f3f,
    c7f0f3f]:
    • @graphql-mesh/types@0.107.1
    • @graphql-mesh/transport-neo4j@0.13.1

@omnigraph/odata@0.5.1

Patch Changes

  • Updated dependencies
    [c7f0f3f,
    c7f0f3f]:
    • @graphql-mesh/types@0.107.1
    • @graphql-mesh/store@0.107.1
    • @graphql-mesh/utils@0.107.1

@omnigraph/openapi@0.112.3

Patch Changes

  • #9649
    1a6dc08
    Thanks @copilot-swe-agent! - Fix: honor
    loader-level queryStringOptions as fallback in @httpOperation directives

    Previously, when a queryStringOptions was configured at the loader (source) level for OpenAPI or
    JSON Schema subgraphs, the generated @httpOperation directives did not inherit that option
    unless every individual operation explicitly set its own queryStringOptions. This meant that
    loader-level query-string serialization config (e.g. allowDots, arrayFormat) was silently
    ignored at execution time.

    What changed

    In addExecutionDirectivesToComposer, each operation now falls back to the loader-level
    queryStringOptions when the operation itself does not define one:

    queryStringOptions: 'queryStringOptions' in operationConfig
      ? operationConfig.queryStringOptions
      : queryStringOptions // ← new: inherit from loader level

    This aligns with the documented contract where loader-level options apply globally to all
    operations.

    Usage example

    OpenAPI – queryStringOptions set once for all operations:

    // mesh.config.ts
    import { defineConfig } from '@graphql-mesh/compose-cli'
    import { loadOpenAPISubgraph } from '@omnigraph/openapi'
    
    export const composeConfig = defineConfig({
      subgraphs: [
        {
          sourceHandler: loadOpenAPISubgraph('MyApi', {
            source: './openapi.yaml',
            endpoint: 'https://api.example.com',
            // Applied to every operation that doesn't override it
            queryStringOptions: {
              allowDots: true, // serialize nested objects as a.b.c=1
              arrayFormat: 'repeat' // serialize arrays as a=1&a=2
            }
          })
        }
      ]
    })

    JSON Schema – same option at the loader level:

    import { loadGraphQLSchemaFromJSONSchemas } from '@omnigraph/json-schema';
    
    const schema = await loadGraphQLSchemaFromJSONSchemas('MyApi', {
      endpoint: 'https://api.example.com',
      queryStringOptions: {
        arrayFormat: 'brackets', // foo[]=1&foo[]=2
      },
      operations: [...],
    });

    Affected packages

    Package Change
    @omnigraph/json-schema Core fix in addExecutionDirectivesToComposer
    @omnigraph/openapi Inherits fix via @omnigraph/json-schema

    Fixes #8760

  • Updated dependencies
    [c7f0f3f,
    c7f0f3f,
    1a6dc08]:

    • @graphql-mesh/types@0.107.1
    • @omnigraph/json-schema@0.112.3
    • @graphql-mesh/utils@0.107.1
    • @graphql-mesh/fusion-composition@0.11.2

@omnigraph/raml@0.112.3

Patch Changes

  • Updated dependencies
    [c7f0f3f,
    c7f0f3f,
    1a6dc08]:
    • @graphql-mesh/types@0.107.1
    • @omnigraph/json-schema@0.112.3
    • @graphql-mesh/utils@0.107.1

@omnigraph/soap@0.110.1

Patch Changes

  • Updated dependencies
    [c7f0f3f,
    c7f0f3f]:
    • @graphql-mesh/types@0.107.1
    • @graphql-mesh/utils@0.107.1
    • @graphql-mesh/transport-soap@0.13.1

@omnigraph/sqlite@0.11.1

Patch Changes

  • Updated dependencies
    [c7f0f3f,
    c7f0f3f]:
    • @graphql-mesh/types@0.107.1

@omnigraph/thrift@0.12.1

Patch Changes

  • Updated dependencies
    [c7f0f3f,
    c7f0f3f]:
    • @graphql-mesh/types@0.107.1
    • @graphql-mesh/utils@0.107.1
    • @graphql-mesh/transport-thrift@0.12.1

@graphql-mesh/plugin-deduplicate-request@0.107.1

Patch Changes

  • Updated dependencies
    [c7f0f3f,
    c7f0f3f]:
    • @graphql-mesh/types@0.107.1
    • @graphql-mesh/utils@0.107.1

@graphql-mesh/plugin-hive@0.108.1

Patch Changes

  • Updated dependencies
    [c7f0f3f,
    c7f0f3f]:
    • @graphql-mesh/types@0.107.1

@graphql-mesh/plugin-http-cache@0.108.1

Patch Changes

  • Updated dependencies
    [c7f0f3f,
    c7f0f3f]:
    • @graphql-mesh/types@0.107.1
    • @graphql-mesh/utils@0.107.1

@graphql-mesh/plugin-http-details-extensions@0.107.1

Patch Changes

  • Updated dependencies
    [c7f0f3f,
    c7f0f3f]:
    • @graphql-mesh/types@0.107.1
    • @graphql-mesh/utils@0.107.1

@graphql-mesh/plugin-jit@0.5.1

Patch Changes

  • Updated dependencies []:
    • @graphql-mesh/utils@0.107.1

@graphql-mesh/plugin-live-query@0.107.1

Patch Changes

  • Updated dependencies
    [c7f0f3f,
    c7f0f3f]:
    • @graphql-mesh/types@0.107.1
    • @graphql-mesh/utils@0.107.1

@graphql-mesh/plugin-mock@0.108.1

Patch Changes

  • Updated dependencies
    [c7f0f3f,
    c7f0f3f]:
    • @graphql-mesh/types@0.107.1
    • @graphql-mesh/utils@0.107.1

@graphql-mesh/plugin-newrelic@0.107.1

Patch Changes

  • Updated dependencies
    [c7f0f3f,
    c7f0f3f]:
    • @graphql-mesh/types@0.107.1
    • @graphql-mesh/utils@0.107.1

@graphql-mesh/plugin-operation-field-permissions@0.107.1

Patch Changes

  • Updated dependencies
    [c7f0f3f,
    c7f0f3f]:
    • @graphql-mesh/types@0.107.1

@graphql-mesh/plugin-operation-headers@1.7.1

Patch Changes

  • Updated dependencies
    [c7f0f3f,
    c7f0f3f]:
    • @graphql-mesh/types@0.107.1
    • @graphql-mesh/utils@0.107.1

@graphql-mesh/plugin-rate-limit@0.109.1

Patch Changes

  • Updated dependencies
    [c7f0f3f,
    c7f0f3f]:
    • @graphql-mesh/types@0.107.1
    • @graphql-mesh/utils@0.107.1

@graphql-mesh/plugin-response-cache@0.107.2

Patch Changes

  • Updated dependencies
    [c7f0f3f,
    c7f0f3f]:
    • @graphql-mesh/types@0.107.1
    • @graphql-mesh/utils@0.107.1

@graphql-mesh/plugin-snapshot@0.107.1

Patch Changes

  • Updated dependencies
    [c7f0f3f,
    c7f0f3f]:
    • @graphql-mesh/types@0.107.1
    • @graphql-mesh/utils@0.107.1

@graphql-mesh/plugin-statsd@0.107.1

Patch Changes

  • Updated dependencies
    [c7f0f3f,
    c7f0f3f]:
    • @graphql-mesh/types@0.107.1
    • @graphql-mesh/utils@0.107.1

@graphql-mesh/transport-grpc@0.7.0

Minor Changes

  • #9650
    c7f0f3f
    Thanks @ardatan! - gRPC: pass channelOptions through to the gRPC
    client

    Use this for message size limits, keepalive, and other
    channel args. Options are stored
    as entries so dotted keys like grpc.max_receive_message_length stay GraphQL-safe in the composed
    schema.

    import { defineConfig } from '@graphql-mesh/compose-cli'
    import loadGrpcSubgraph from '@omnigraph/grpc'
    
    export const composeConfig = defineConfig({
      subgraphs: [
        {
          sourceHandler: loadGrpcSubgraph('MyGrpcApi', {
            endpoint: 'localhost:50051',
            channelOptions: {
              'grpc.max_receive_message_length': 10_000_000,
              'grpc.keepalive_time_ms': 10_000,
              'grpc.keepalive_timeout_ms': 5_000,
              'grpc.keepalive_permit_without_calls': 1
            }
          })
        }
      ]
    })

    Legacy Mesh:

    sources:
      - name: MyGrpcApi
        handler:
          grpc:
            endpoint: localhost:50051
            channelOptions:
              grpc.max_receive_message_length: 10000000
              grpc.keepalive_time_ms: 10000
  • #9650
    c7f0f3f
    Thanks @ardatan! - gRPC: add reflectionMetadata for
    server-reflection requests

    Send routing / auth metadata only when loading the schema via gRPC reflection (no source).
    Runtime RPC metadata remains metaData; HTTP headers for a remote .graphql SDL remain
    schemaHeaders.

    import { defineConfig } from '@graphql-mesh/compose-cli'
    import loadGrpcSubgraph from '@omnigraph/grpc'
    
    export const composeConfig = defineConfig({
      subgraphs: [
        {
          sourceHandler: loadGrpcSubgraph('MyGrpcApi', {
            endpoint: 'localhost:50051',
            // No `source` β†’ schema loaded via reflection
            reflectionMetadata: {
              'grpc-service': 'proto.MyGrpcService',
              authorization: 'Bearer {env.REFLECTION_TOKEN}'
            }
          })
        }
      ]
    })

    Legacy Mesh:

    sources:
      - name: MyGrpcApi
        handler:
          grpc:
            endpoint: localhost:50051
            reflectionMetadata:
              grpc-service: proto.MyGrpcService
              authorization: 'Bearer {env.REFLECTION_TOKEN}'
  • #9650
    c7f0f3f
    Thanks @ardatan! - gRPC: apply requestTimeout as a real per-call
    deadline

    Previously requestTimeout was not enforced as a gRPC deadline, so a hung upstream could leave
    the GraphQL request waiting indefinitely. It is now set on each call via CallOptions.deadline
    (Date.now() + requestTimeout).

    import { defineConfig } from '@graphql-mesh/compose-cli'
    import loadGrpcSubgraph from '@omnigraph/grpc'
    
    export const composeConfig = defineConfig({
      subgraphs: [
        {
          sourceHandler: loadGrpcSubgraph('MyGrpcApi', {
            endpoint: 'localhost:50051',
            // Fail the call if the server does not respond within 5s
            requestTimeout: 5000
          })
        }
      ]
    })

    Legacy Mesh:

    sources:
      - name: MyGrpcApi
        handler:
          grpc:
            endpoint: localhost:50051
            requestTimeout: 5000

Patch Changes

  • #9650
    c7f0f3f
    Thanks @ardatan! - gRPC: tear down clients via
    Client.prototype.close

    If a service defines an RPC named Close, that method was previously shadowing the gRPC client's
    connection close(), so Mesh could not dispose the channel cleanly. Teardown now always calls
    Client.prototype.close.

    No config change is required β€” services with a Close RPC continue to expose that operation in
    the GraphQL schema, while gateway/Mesh shutdown still closes the underlying connection.

  • #9650
    c7f0f3f
    Thanks @ardatan! - gRPC: surface ServiceError as GraphQL errors
    with extensions.grpc

    Upstream gRPC ServiceErrors are no longer masked as generic internal errors. They are returned
    as GraphQL errors with extensions.code: DOWNSTREAM_SERVICE_ERROR and structured details under
    extensions.grpc:

    {
      "errors": [
        {
          "message": "4 DEADLINE_EXCEEDED: Deadline exceeded",
          "extensions": {
            "code": "DOWNSTREAM_SERVICE_ERROR",
            "grpc": {
              "code": 4,
              "status": "DEADLINE_EXCEEDED",
              "details": "Deadline exceeded",
              "metadata": {}
            }
          }
        }
      ]
    }

    Only gRPC ServiceError values are wrapped; other thrown values are left unchanged.

  • Updated dependencies
    [c7f0f3f,
    c7f0f3f]:

    • @graphql-mesh/types@0.107.1
    • @graphql-mesh/utils@0.107.1

@graphql-mesh/transport-mysql@0.12.1

Patch Changes

  • Updated dependencies
    [c7f0f3f,
    c7f0f3f]:
    • @graphql-mesh/types@0.107.1
    • @graphql-mesh/utils@0.107.1

@graphql-mesh/transport-neo4j@0.13.1

Patch Changes

  • Updated dependencies
    [c7f0f3f,
    c7f0f3f]:
    • @graphql-mesh/types@0.107.1
    • @graphql-mesh/utils@0.107.1

@graphql-mesh/transport-odata@0.5.1

Patch Changes

  • Updated dependencies []:
    • @omnigraph/odata@0.5.1

@graphql-mesh/transport-rest@0.12.1

Patch Changes

  • Updated dependencies
    [c7f0f3f,
    c7f0f3f]:
    • @graphql-mesh/types@0.107.1
    • @graphql-mesh/utils@0.107.1

@graphql-mesh/transport-soap@0.13.1

Patch Changes

  • Updated dependencies
    [c7f0f3f,
    c7f0f3f]:
    • @graphql-mesh/types@0.107.1
    • @graphql-mesh/utils@0.107.1

@graphql-mesh/transport-sqlite@0.12.1

Patch Changes

  • Updated dependencies []:
    • @omnigraph/sqlite@0.11.1

@graphql-mesh/transport-thrift@0.12.1

Patch Changes

  • Updated dependencies []:
    • @graphql-mesh/utils@0.107.1