@graphql-mesh/cache-cfw-kv@0.108.1
Patch Changes
@graphql-mesh/cache-file@0.107.1
Patch Changes
@graphql-mesh/cache-inmemory-lru@0.11.1
Patch Changes
@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
@graphql-mesh/cache-upstash-redis@0.4.1
Patch Changes
@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
@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: passchannelOptionsthrough to the gRPC
clientUse this for message size limits, keepalive, and other
channel args. Options are stored
as entries so dotted keys likegrpc.max_receive_message_lengthstay 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: addreflectionMetadatafor
server-reflection requestsSend routing / auth metadata only when loading the schema via gRPC reflection (no
source).
Runtime RPC metadata remainsmetaData; HTTP headers for a remote.graphqlSDL 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: applyrequestTimeoutas a real per-call
deadlinePreviously
requestTimeoutwas not enforced as a gRPC deadline, so a hung upstream could leave
the GraphQL request waiting indefinitely. It is now set on each call viaCallOptions.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.closeIf a service defines an RPC named
Close, that method was previously shadowing the gRPC client's
connectionclose(), so Mesh could not dispose the channel cleanly. Teardown now always calls
Client.prototype.close.No config change is required β services with a
CloseRPC 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 emptysourceas
reflectionOmitting
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
@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
@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
@graphql-mesh/store@0.107.1
Patch Changes
@graphql-mesh/transform-cache@0.108.1
Patch Changes
@graphql-mesh/transform-encapsulate@0.107.1
Patch Changes
@graphql-mesh/transform-extend@0.107.1
Patch Changes
@graphql-mesh/transform-federation@0.107.1
Patch Changes
@graphql-mesh/transform-filter-schema@0.107.1
Patch Changes
@graphql-mesh/transform-hive@0.107.1
Patch Changes
@graphql-mesh/transform-hoist-field@0.108.1
Patch Changes
@graphql-mesh/transform-naming-convention@0.108.1
Patch Changes
@graphql-mesh/transform-prefix@0.108.1
Patch Changes
@graphql-mesh/transform-prune@0.107.1
Patch Changes
@graphql-mesh/transform-rate-limit@0.108.1
Patch Changes
@graphql-mesh/transform-rename@0.108.1
Patch Changes
@graphql-mesh/transform-replace-field@0.108.1
Patch Changes
@graphql-mesh/transform-resolvers-composition@0.107.1
Patch Changes
@graphql-mesh/transform-transfer-schema@0.107.1
Patch Changes
@graphql-mesh/transform-type-merging@0.107.1
Patch Changes
@graphql-mesh/types@0.107.1
Patch Changes
-
#9650
c7f0f3f
Thanks @ardatan! - gRPC: passchannelOptionsthrough to the gRPC
clientUse this for message size limits, keepalive, and other
channel args. Options are stored
as entries so dotted keys likegrpc.max_receive_message_lengthstay 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: addreflectionMetadatafor
server-reflection requestsSend routing / auth metadata only when loading the schema via gRPC reflection (no
source).
Runtime RPC metadata remainsmetaData; HTTP headers for a remote.graphqlSDL 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
@omnigraph/grpc@0.3.0
Minor Changes
-
#9650
c7f0f3f
Thanks @ardatan! - gRPC: passchannelOptionsthrough to the gRPC
clientUse this for message size limits, keepalive, and other
channel args. Options are stored
as entries so dotted keys likegrpc.max_receive_message_lengthstay 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: addreflectionMetadatafor
server-reflection requestsSend routing / auth metadata only when loading the schema via gRPC reflection (no
source).
Runtime RPC metadata remainsmetaData; HTTP headers for a remote.graphqlSDL 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: applyrequestTimeoutas a real per-call
deadlinePreviously
requestTimeoutwas not enforced as a gRPC deadline, so a hung upstream could leave
the GraphQL request waiting indefinitely. It is now set on each call viaCallOptions.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 emptysourceas
reflectionOmitting
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-levelqueryStringOptionsas fallback in@httpOperationdirectivesPreviously, when a
queryStringOptionswas configured at the loader (source) level for OpenAPI or
JSON Schema subgraphs, the generated@httpOperationdirectives did not inherit that option
unless every individual operation explicitly set its ownqueryStringOptions. 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
queryStringOptionswhen 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 β
queryStringOptionsset 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-schemaCore fix in addExecutionDirectivesToComposer@omnigraph/openapiInherits fix via @omnigraph/json-schemaFixes #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-levelqueryStringOptionsas fallback in@httpOperationdirectivesPreviously, when a
queryStringOptionswas configured at the loader (source) level for OpenAPI or
JSON Schema subgraphs, the generated@httpOperationdirectives did not inherit that option
unless every individual operation explicitly set its ownqueryStringOptions. 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
queryStringOptionswhen 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 β
queryStringOptionsset 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-schemaCore fix in addExecutionDirectivesToComposer@omnigraph/openapiInherits fix via @omnigraph/json-schemaFixes #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
@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
@graphql-mesh/plugin-hive@0.108.1
Patch Changes
@graphql-mesh/plugin-http-cache@0.108.1
Patch Changes
@graphql-mesh/plugin-http-details-extensions@0.107.1
Patch Changes
@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
@graphql-mesh/plugin-mock@0.108.1
Patch Changes
@graphql-mesh/plugin-newrelic@0.107.1
Patch Changes
@graphql-mesh/plugin-operation-field-permissions@0.107.1
Patch Changes
@graphql-mesh/plugin-operation-headers@1.7.1
Patch Changes
@graphql-mesh/plugin-rate-limit@0.109.1
Patch Changes
@graphql-mesh/plugin-response-cache@0.107.2
Patch Changes
@graphql-mesh/plugin-snapshot@0.107.1
Patch Changes
@graphql-mesh/plugin-statsd@0.107.1
Patch Changes
@graphql-mesh/transport-grpc@0.7.0
Minor Changes
-
#9650
c7f0f3f
Thanks @ardatan! - gRPC: passchannelOptionsthrough to the gRPC
clientUse this for message size limits, keepalive, and other
channel args. Options are stored
as entries so dotted keys likegrpc.max_receive_message_lengthstay 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: addreflectionMetadatafor
server-reflection requestsSend routing / auth metadata only when loading the schema via gRPC reflection (no
source).
Runtime RPC metadata remainsmetaData; HTTP headers for a remote.graphqlSDL 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: applyrequestTimeoutas a real per-call
deadlinePreviously
requestTimeoutwas not enforced as a gRPC deadline, so a hung upstream could leave
the GraphQL request waiting indefinitely. It is now set on each call viaCallOptions.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.closeIf a service defines an RPC named
Close, that method was previously shadowing the gRPC client's
connectionclose(), so Mesh could not dispose the channel cleanly. Teardown now always calls
Client.prototype.close.No config change is required β services with a
CloseRPC continue to expose that operation in
the GraphQL schema, while gateway/Mesh shutdown still closes the underlying connection. -
#9650
c7f0f3f
Thanks @ardatan! - gRPC: surfaceServiceErroras GraphQL errors
withextensions.grpcUpstream gRPC
ServiceErrors are no longer masked as generic internal errors. They are returned
as GraphQL errors withextensions.code: DOWNSTREAM_SERVICE_ERRORand 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
ServiceErrorvalues 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
@graphql-mesh/transport-neo4j@0.13.1
Patch Changes
@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
@graphql-mesh/transport-soap@0.13.1
Patch Changes
@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