-
#2211
59ef8f7Thanks @ardatan! - AddexposeHTTPDetailsInExtensionsflag to getResponsedetails in the result extensions.import { buildHTTPExecutor } from '@graphql-tools/executor-http'; const executor = buildHTTPExecutor({ exposeHTTPDetailsInExtensions: true, });
Then in the result;
{ "data": { "hello": "world" }, "extensions": { "request": { "url": "http://localhost:4000/graphql", "method": "POST", "headers": { "content-type": "application/json" }, "body": "{\"query\":\"{ hello }\"}" }, "response": { "status": 200, "statusText": "OK", "headers": { "content-type": "application/json" } } } }
- #2194
f9d2f0eThanks @ManrajSingh6! - Prevent reusing the cached inflight requests
-
#2185
f85a9feThanks @elliotvilhelm! - Fix SSE data parsing when JSON payload contains literal "data:" substringsThe SSE event parser used
msg.split('data:')to extract the data field, which incorrectly splits ondata:substrings inside the JSON payload (e.g., OAuth scopes likefile_metadata:read, data URIs likedata:image/png). This causedJSON.parseto fail with "Unterminated string in JSON" errors.The fix uses line-based parsing per the SSE spec: split on newlines first, then find the line starting with
data:.
- #2099
dae3fe4Thanks @copilot-swe-agent! - Fix missing NPM provenance attestation by enablingnpmPublishProvenancein Yarn configuration
-
9f29d58Thanks @ardatan! - Support factory function intimeoutoption so that you can set timeout milliseconds dynamically perExecutionRequest;buildHTTPExecutor({ timeout: (request) => { if (request.operationName === 'BigQuery') { return 10000; // 10 seconds for the `BigQuery` operation } // Or infinite timeout for subscriptions if (request.operationType === 'subscription') { return undefined; } return 5000; // 5 seconds for other operations }, });
-
#1842
93aa767Thanks @dependabot! - dependencies updates:- Updated dependency
@graphql-tools/utils@^11.0.0↗︎ (from^10.10.3, independencies)
- Updated dependency
-
Updated dependencies [
93aa767]:- @graphql-tools/executor-common@1.0.6
-
#1684
478d7e2Thanks @dependabot! - dependencies updates:- Updated dependency
@whatwg-node/fetch@^0.10.13↗︎ (from^0.10.12, independencies)
- Updated dependency
-
#1691
7ecaf7eThanks @dependabot! - dependencies updates:- Updated dependency
@graphql-tools/utils@^10.10.3↗︎ (from^10.10.1, independencies)
- Updated dependency
-
#1347
2993f24Thanks @ardatan! - Avoid shared AbortController instance on CloudflareWorkers because it givesCannot perform I/O on behalf of a different request.error. This change ensures that the AbortController is only created when not running in a Cloudflare Workers environment. -
Updated dependencies [
7ecaf7e]:- @graphql-tools/executor-common@1.0.5
-
#1608
9c789fbThanks @ardatan! - dependencies updates:- Updated dependency
@graphql-tools/utils@^10.10.1↗︎ (from^10.9.1, independencies) - Updated dependency
@whatwg-node/fetch@^0.10.12↗︎ (from^0.10.11, independencies)
- Updated dependency
-
#1662
27789deThanks @ardatan! - dependencies updates:- Updated dependency
@graphql-tools/utils@^10.10.1↗︎ (from^10.10.0, independencies) - Updated dependency
@whatwg-node/fetch@^0.10.12↗︎ (from^0.10.11, independencies)
- Updated dependency
-
c754a96Thanks @ardatan! - Use more specific error codes;GATEWAY_TIMEOUT-> Server could not get a response from upstream in timeSUBREQUEST_HTTP_ERROR-> An error occurred while making the HTTP request to the upstreamRESPONSE_VALIDATION_FAILED-> The response from upstream did not conform to the expected GraphQL response format -
Updated dependencies [
9c789fb,27789de,3f6b99d]:- @graphql-tools/executor-common@1.0.4
-
#1654
efed5e0Thanks @dependabot! - dependencies updates:- Updated dependency
@graphql-tools/utils@^10.10.0↗︎ (from^10.9.1, independencies)
- Updated dependency
-
Updated dependencies [
efed5e0]:- @graphql-tools/executor-common@1.0.3
-
#1542
0a349fbThanks @dependabot! - dependencies updates:- Updated dependency
@whatwg-node/fetch@^0.10.11↗︎ (from^0.10.10, independencies)
- Updated dependency
- Updated dependencies [
d7b48a7]:- @graphql-tools/executor-common@1.0.2
-
#1473
838ffecThanks @dependabot! - dependencies updates:- Updated dependency
@whatwg-node/promise-helpers@^1.3.2↗︎ (from^1.3.0, independencies)
- Updated dependency
-
#1495
fe99f74Thanks @dependabot! - dependencies updates:- Updated dependency
meros@^1.3.2↗︎ (from^1.3.1, independencies)
- Updated dependency
- Updated dependencies [
b0e5568]:- @graphql-tools/executor-common@1.0.1
-
#956
46d2661Thanks @EmrysMyrddin! - Drop Node 18 supportLeast supported Node version is now v20.
-
#956
46d2661Thanks @EmrysMyrddin! - Inflight request deduplication -
Updated dependencies [
46d2661]:- @graphql-tools/executor-common@1.0.0
- @graphql-hive/signal@2.0.0
-
#1411
37113d1Thanks @dependabot! - dependencies updates:- Updated dependency
@whatwg-node/fetch@^0.10.10↗︎ (from^0.10.9, independencies)
- Updated dependency
-
#1358
8e37851Thanks @dependabot! - dependencies updates:- Updated dependency
@graphql-tools/utils@^10.9.1↗︎ (from^10.9.0, independencies)
- Updated dependency
-
Updated dependencies [
8e37851]:- @graphql-tools/executor-common@0.0.6
- #1017
b59a266Thanks @ardatan! -endpointcan now also be a factory function that returns the endpoint based on theExecutionRequest. This allows creating dynamic endpoints, depending on environment variables or other runtime values.
-
#1338
7287ffaThanks @enisdenjo! - dependencies updates:- Updated dependency
@whatwg-node/fetch@^0.10.9↗︎ (from^0.10.8, independencies)
- Updated dependency
-
#1344
a71236dThanks @dependabot! - dependencies updates:- Updated dependency
@graphql-tools/utils@^10.9.0↗︎ (from^10.8.1, independencies)
- Updated dependency
-
Updated dependencies [
6215001,a71236d]:- @graphql-tools/executor-common@0.0.5
- #1233
ed323faThanks @dependabot! - dependencies updates:- Updated dependency
meros@^1.3.1↗︎ (from^1.2.1, independencies)
- Updated dependency
- #1144
54beb7aThanks @ardatan! - dependencies updates:- Updated dependency
@whatwg-node/fetch@^0.10.8↗︎ (from^0.10.6, independencies)
- Updated dependency
-
#1124
b7627d3Thanks @enisdenjo! - Handle server sent events stream chunk containing multiple events -
#1121
ef0e24cThanks @enisdenjo! - Gracefully handle event stream reading errors and cancellations -
#1124
b7627d3Thanks @enisdenjo! - Flush incoming chunk before closing the stream
-
#997
4cf75cbThanks @ardatan! - - BREAKING: HTTP Executor no longer takesserviceNameas an option.- Both HTTP executor and
@graphql-mesh/transport-http-callbackno longer handleDOWNSTREAM_SERVICE_ERRORerror code withserviceName. - Gateway runtime handles subgraph errors on its own with
DOWNSTREAM_SERVICE_ERRORerror code andserviceNameas a property. This behavior can be configured withsubgraphErrorsoption of thecreateGatewayRuntimefunction or CLI config.
subgraphError: { errorCode: 'DOWNSTREAM_SERVICE_ERROR', // or `false` to remove this code completely subgraphNameProp: 'serviceName' // or `false` to remove this prop completely }
- Both HTTP executor and
-
#1045
da47a0eThanks @enisdenjo! - dependencies updates:- Updated dependency
@whatwg-node/fetch@^0.10.6↗︎ (from^0.10.4, independencies)
- Updated dependency
-
#1045
da47a0eThanks @enisdenjo! - Update graphql-yoga and whatwg-node packagesIn light of ardatan/whatwg-node#2305. Please upgrade as soon as possible!
-
#1015
9a120c8Thanks @ardatan! - AddTypeErrortooriginalErrorprop of the error thrown when nodataanderrorsfound in the HTTP response, then GraphQL Servers know that it is an unexpected error so it should be masked and logged separately instead of leaking to the client
- #950
c7ea2c5Thanks @kroupacz! - Errors should not be swallowed when it is thrown from the shared root
-
#532
4e33933Thanks @EmrysMyrddin! - dependencies updates:- Updated dependency
@whatwg-node/promise-helpers@^1.3.0↗︎ (from^1.2.5, independencies)
- Updated dependency
-
#922
c9cd206Thanks @enisdenjo! - dependencies updates:- Added dependency
@graphql-hive/signal@workspace:^↗︎ (todependencies)
- Added dependency
-
#929
dbfb0f7Thanks @ardatan! - Throw an understandable error with HTTP details when the response is empty -
Updated dependencies [
c9cd206]:- @graphql-hive/signal@1.0.0
- #862
278618aThanks @ardatan! - dependencies updates:- Updated dependency
@whatwg-node/promise-helpers@^1.2.5↗︎ (from^1.0.0, independencies)
- Updated dependency
- #792
9c2f323Thanks @ardatan! - Ensure subgraph name is present in the upstream error extensions when HTTP Executor throws
-
#726
6334b2eThanks @ardatan! - dependencies updates:- Added dependency
@whatwg-node/promise-helpers@^1.0.0↗︎ (todependencies)
- Added dependency
-
#727
c54a080Thanks @renovate! - dependencies updates:- Updated dependency
@whatwg-node/disposablestack@^0.0.6↗︎ (from^0.0.5, independencies)
- Updated dependency
-
#773
d949143Thanks @renovate! - dependencies updates:- Removed dependency
extract-files@^11.0.0↗︎ (fromdependencies)
- Removed dependency
-
#791
661b103Thanks @ardatan! - dependencies updates:- Removed dependency
value-or-promise@^1.0.12↗︎ (fromdependencies)
- Removed dependency
-
Updated dependencies [
e393337]:- @graphql-tools/executor-common@0.0.4
-
#696
a289faaThanks @ardatan! - dependencies updates:- Updated dependency
@whatwg-node/fetch@^0.10.4↗︎ (from^0.10.1, independencies)
- Updated dependency
-
#709
20d275cThanks @renovate! - Subscription cancellation fix for Bun -
Updated dependencies [
a289faa]:- @graphql-tools/executor-common@0.0.3
-
#620
d72209aThanks @renovate! - dependencies updates:- Updated dependency
@graphql-tools/utils@^10.8.1↗︎ (from^10.7.0, independencies)
- Updated dependency
-
Updated dependencies [
d72209a]:- @graphql-tools/executor-common@0.0.2
-
#598
8c80ac9Thanks @ardatan! - dependencies updates:- Removed dependency
@graphql-hive/gateway-abort-signal-any@workspace:^↗︎ (fromdependencies)
- Removed dependency
-
#598
8c80ac9Thanks @ardatan! - Use native AbortSignal, AbortController APIs instead of custom ones
-
#420
14152f7Thanks @ardatan! - - In case of schema reload, throwSCHEMA_RELOADerror while recreating the transports and executors- In case of shut down, throw
SHUTTING_DOWNerror while cleaning the transports and executors up
Previously, these errors are only thrown for subscriptions not it is thrown in other type of operations as well. And previously the thrown errors during these two cleanup and restart process were cryptic, now the mentioned two errors above are thrown with more clear messages
- In case of shut down, throw
- Updated dependencies [
c60a8f4]:- @graphql-hive/gateway-abort-signal-any@0.0.3
-
#381
55eb1b4Thanks @ardatan! - dependencies updates:- Added dependency
@graphql-tools/executor-common@workspace:^↗︎ (todependencies)
- Added dependency
-
#381
55eb1b4Thanks @ardatan! - This is a bugfix with some internal changes, no user action is needed. This bugfix and improvement is done to improve the stability of some components of the gateway;Like HMAC Upstream Signature plugin, different components of the gateway were using different ways of serializing the execution request. Some of them were ignoring
variablesif it is empty, some of not, this was causing the signature generation to be different for the same query. For example, it was working as expected in Proxy mode, but not working as expected in Federation Gateway mode.With this change, now we have a shared helper to serialize the upstream execution request with a memoized
printfunction for query AST etc to have a consistent serialization so consistent signature generation for HMAC.For example instead of using
print, you should usedefaultPrintFnthat memoizesprintoperation and also used the string version of it parsed before by Envelop/Yoga.-import { print } from 'graphql'; -const query = print(parsedQuery); +import { defaultPrintFn } from '@graphql-tools/executor-common'; +const query = defaultPrintFn(parsedQuery);
Or instead of creating objects from
ExecutionRequest, useserializeExecutionRequesthelper.-const serializedRequest = { - query: print(executionRequest.document), - variables: executionRequest.variables, - operationName: executionRequest.operationName, - extensions: executionRequest.extensions, -}; +import { serializeExecutionRequest } from '@graphql-tools/executor-common'; +const serializedRequest = serializeExecutionRequest(executionRequest);
-
Updated dependencies [
55eb1b4]:- @graphql-tools/executor-common@0.0.1
-
#373
e606975Thanks @ardatan! - dependencies updates:- Updated dependency
@graphql-tools/utils@^10.7.0↗︎ (from^10.6.2, independencies)
- Updated dependency
-
#367
15975c2Thanks @ardatan! - Fix the combination ofupstreamRetryandupstreamTimeouttogetherWhen you use
upstreamRetryandupstreamTimeouttogether, theupstreamRetrywasn't applied properly when the request is timed out withupstreamTimeout. -
Updated dependencies [
e606975,e606975]:- @graphql-hive/gateway-abort-signal-any@0.0.2
-
#322
23b8987Thanks @ardatan! - dependencies updates:- Added dependency
@graphql-hive/gateway-abort-signal-any@workspace:^↗︎ (todependencies)
- Added dependency
-
Updated dependencies [
23b8987]:- @graphql-hive/gateway-abort-signal-any@0.0.1
-
#313
367b359Thanks @ardatan! - Automatic Persisted Queries support for upstream requestsFor HTTP Executor;
buildHTTPExecutor({ // ... apq: true, });
For Gateway Configuration;
export const gatewayConfig = defineConfig({ transportEntries: { '*': { options: { apq: true, }, }, }, });
- #291
34d1224Thanks @ardatan! - dependencies updates:- Updated dependency
tslib@^2.8.1↗︎ (from^2.4.0, independencies)
- Updated dependency
- #269
cdca511Thanks @ardatan! - dependencies updates:- Updated dependency
@graphql-tools/utils@^10.6.2↗︎ (from^10.6.0, independencies)
- Updated dependency
- #205
2e0add3Thanks @ardatan! - dependencies updates:- Updated dependency
@whatwg-node/fetch@^0.10.1↗︎ (from^0.10.0, independencies)
- Updated dependency
-
#164
310613dThanks @ardatan! - dependencies updates:- Updated dependency
@graphql-tools/utils@^10.6.0↗︎ (from^10.5.6, independencies)
- Updated dependency
-
#180
9438e21Thanks @ardatan! - dependencies updates:- Added dependency
@whatwg-node/disposablestack@^0.0.5↗︎ (todependencies)
- Added dependency
-
#180
9438e21Thanks @ardatan! - Use new explicit resource management internally -
#199
b534288Thanks @ardatan! - Logs are now easier to read, bigger results not do not create bigger outputs but instead they are all logged in a single line -
#98
697308dThanks @ardatan! - Bun support by using native Bun API whenever possible
- Updated dependencies
[
dc5043b]:- @graphql-tools/utils@10.5.6
-
#6663
d06afe3Thanks @renovate! - dependencies updates:- Updated dependency
@whatwg-node/fetch@^0.10.0↗︎ (from^0.9.0, independencies)
- Updated dependency
-
#6658
04d5cd7Thanks @enisdenjo! - Cancel SSE stream even while waiting for next event
- Updated dependencies
[
cf2ce5e]:- @graphql-tools/utils@10.5.5
-
f9dd3d6Thanks @ardatan! - Details in the extensions when an unexpected error occurs;{ "request": { "url": "https://api.example.com/graphql", "method": "POST", "body": { "query": "query { hello }" } }, "response": { "status": 500, "statusText": "Internal Server Error", "headers": { "content-type": "application/json" }, "body": { "errors": [ { "message": "Internal Server Error" } ] } } }
- #6354
97c88a0Thanks @enisdenjo! - Handle AggregateErrors by expanding them to result errors
- #6343
bec6eacThanks @renovate! - dependencies updates:- Updated dependency
@graphql-tools/utils@^10.3.2↗︎ (from^10.3.1, independencies)
- Updated dependency
-
#6332
7be6930Thanks @kamilkisiela! - Strip ignored characters when printing a query in executor-http -
Updated dependencies [
a276ba8]:- @graphql-tools/utils@10.3.2
-
#6325
9792e80Thanks @ardatan! - Make the executor disposable optional -
Updated dependencies [
9792e80]:- @graphql-tools/utils@10.3.1
-
#6299
b0ffac8Thanks @EmrysMyrddin! - When proxying the requests to the HTTP executor, it should return `GraphQLError` instances in `errors` array -
46eab79Thanks @ardatan! - Fixed potential leak on executor disposal
- #6323
cacf20fThanks @ardatan! - Implement Symbol.dispose or Symbol.asyncDispose to make `Executor`s `Disposable`
- Updated dependencies
[
cacf20f]:- @graphql-tools/utils@10.3.0
- #5913
83c0af0Thanks @enisdenjo! - dependencies updates:- Updated dependency
@graphql-tools/utils@^10.0.13↗︎ (from^10.0.2, independencies)
- Updated dependency
- #5902
9d18cceThanks @enisdenjo! - Error when both data and errors fields are empty
- #5825
12b578eThanks @felamaslen! - Fixed http executor to allow custom content-type header
b798b3bThanks @ardatan! - Memoize the print result automatically, and able to accept a custom print function
- #5724
cfbd2e07Thanks @enisdenjo! - Handle chunked and no-space messages in SSE
-
#5396
bb8f169eThanks @ardatan! - dependencies updates:- Removed dependency
dset@^3.1.2↗︎ (fromdependencies)
- Removed dependency
-
#5396
bb8f169eThanks @ardatan! - Move the merging logic of incremental results to the utils package -
Updated dependencies [
bb8f169e,bb8f169e]:- @graphql-tools/utils@10.0.2
- #5274
944a68e8Thanks @ardatan! - dependencies updates:- Updated dependency
@whatwg-node/fetch@^0.9.0↗︎ (from^0.8.1, independencies)
- Updated dependency
- Updated dependencies
[
944a68e8,944a68e8]:- @graphql-tools/utils@10.0.0
- #5050
26f6d221Thanks @ardatan! - dependencies updates:- Updated dependency
@whatwg-node/fetch@^0.8.1↗︎ (from^0.8.0, independencies)
- Updated dependency
- #5041
1b948accThanks @renovate! - dependencies updates:- Updated dependency
@whatwg-node/fetch@^0.8.0↗︎ (from^0.7.0, independencies)
- Updated dependency
- #5031
ab4cf86bThanks @renovate! - dependencies updates:- Updated dependency
@whatwg-node/fetch@^0.7.0↗︎ (from^0.6.9, independencies)
- Updated dependency
- #5025
b09ea282Thanks @renovate! - dependencies updates:- Updated dependency
@graphql-tools/utils@^9.2.0↗︎ (from9.2.0, independencies) - Updated dependency
value-or-promise@^1.0.12↗︎ (from1.0.12, independencies) - Updated dependency
@whatwg-node/fetch@^0.6.9↗︎ (from0.6.5, independencies) - Updated dependency
@repeaterjs/repeater@^3.0.4↗︎ (from3.0.4, independencies) - Updated dependency
dset@^3.1.2↗︎ (from3.1.2, independencies) - Updated dependency
meros@^1.2.1↗︎ (from1.2.1, independencies)
- Updated dependency
- Updated dependencies
[
b5c8f640]:- @graphql-tools/utils@9.2.1
- #5008
034b868fThanks @renovate! - dependencies updates:- Updated dependency
@whatwg-node/fetch@0.6.5↗︎ (from0.6.2, independencies)
- Updated dependency
- #4968
d9bcb5b6Thanks @renovate! - dependencies updates:- Updated dependency
@whatwg-node/fetch@0.6.2↗︎ (from0.6.1, independencies)
- Updated dependency
-
#4941
0e5d250cThanks @renovate! - dependencies updates:- Updated dependency
@whatwg-node/fetch@0.6.1↗︎ (from0.5.4, independencies)
- Updated dependency
-
#4943
a4d36fccThanks @renovate! - dependencies updates:- Updated dependency
value-or-promise@1.0.12↗︎ (from1.0.11, independencies)
- Updated dependency
-
Updated dependencies [
e3ec35ed]:- @graphql-tools/utils@9.1.4
- #4934
d0383dd6Thanks @renovate! - dependencies updates:- Updated dependency
@whatwg-node/fetch@0.5.4↗︎ (from0.5.3, independencies)
- Updated dependency
-
#4887
904fe770Thanks @ardatan! - Fix leak on Node 14 and add cancellation to async iterables correctly -
Updated dependencies [
904fe770]:- @graphql-tools/utils@9.1.3
- Updated dependencies
[
13c24883]:- @graphql-tools/utils@9.1.2
- #4839
92dd4714Thanks @renovate! - dependencies updates:- Updated dependency
@whatwg-node/fetch@0.5.3↗︎ (from0.5.1, independencies)
- Updated dependency
- Updated dependencies
[
7411a5e7]:- @graphql-tools/utils@9.1.1