@graphql-tools/executor-graphql-ws
Advanced tools
Comparing version 1.3.6 to 1.3.7-alpha-209a18edbaa02bf94b993f0d9a129681dfe06016
# @graphql-tools/executor-graphql-ws | ||
## 1.3.7-alpha-209a18edbaa02bf94b993f0d9a129681dfe06016 | ||
### Patch Changes | ||
- [#381](https://github.com/graphql-hive/gateway/pull/381) [`55eb1b4`](https://github.com/graphql-hive/gateway/commit/55eb1b4d14aec7b3e6c7bcf9f596bc01192d022c) Thanks [@ardatan](https://github.com/ardatan)! - dependencies updates: | ||
- Added dependency [`@graphql-tools/executor-common@workspace:^` ↗︎](https://www.npmjs.com/package/@graphql-tools/executor-common/v/workspace:^) (to `dependencies`) | ||
- [#381](https://github.com/graphql-hive/gateway/pull/381) [`55eb1b4`](https://github.com/graphql-hive/gateway/commit/55eb1b4d14aec7b3e6c7bcf9f596bc01192d022c) Thanks [@ardatan](https://github.com/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 `variables` if 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 `print` function for query AST etc to have a consistent serialization so consistent signature generation for HMAC. | ||
For example instead of using `print`, you should use `defaultPrintFn` that memoizes `print` operation and also used the string version of it parsed before by Envelop/Yoga. | ||
```diff | ||
-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`, use `serializeExecutionRequest` helper. | ||
```diff | ||
-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`](https://github.com/graphql-hive/gateway/commit/55eb1b4d14aec7b3e6c7bcf9f596bc01192d022c)]: | ||
- @graphql-tools/executor-common@0.0.1-alpha-209a18edbaa02bf94b993f0d9a129681dfe06016 | ||
## 1.3.6 | ||
@@ -4,0 +45,0 @@ |
@@ -1,8 +0,7 @@ | ||
import { memoize1, getOperationASTFromRequest, registerAbortSignalListener } from '@graphql-tools/utils'; | ||
import { serializeExecutionRequest, defaultPrintFn } from '@graphql-tools/executor-common'; | ||
import { getOperationASTFromRequest, registerAbortSignalListener } from '@graphql-tools/utils'; | ||
import { DisposableSymbols } from '@whatwg-node/disposablestack'; | ||
import { print } from 'graphql'; | ||
import { createClient } from 'graphql-ws'; | ||
import WebSocket from 'isomorphic-ws'; | ||
const defaultPrintFn = memoize1(print); | ||
function isClient(client) { | ||
@@ -43,5 +42,2 @@ return "subscribe" in client; | ||
const { | ||
document, | ||
variables, | ||
operationName, | ||
extensions, | ||
@@ -58,9 +54,5 @@ operationType = getOperationASTFromRequest(executionRequest).operation, | ||
} | ||
const query = printFn(document); | ||
const iterableIterator = graphqlWSClient.iterate({ | ||
query, | ||
variables, | ||
operationName, | ||
extensions | ||
}); | ||
const iterableIterator = graphqlWSClient.iterate( | ||
serializeExecutionRequest({ executionRequest, printFn }) | ||
); | ||
if (iterableIterator.return && signal) { | ||
@@ -67,0 +59,0 @@ registerAbortSignalListener(signal, () => { |
{ | ||
"name": "@graphql-tools/executor-graphql-ws", | ||
"version": "1.3.6", | ||
"version": "1.3.7-alpha-209a18edbaa02bf94b993f0d9a129681dfe06016", | ||
"type": "module", | ||
@@ -42,2 +42,3 @@ "description": "A set of utils for faster development of GraphQL tools", | ||
"dependencies": { | ||
"@graphql-tools/executor-common": "0.0.1-alpha-209a18edbaa02bf94b993f0d9a129681dfe06016", | ||
"@graphql-tools/utils": "^10.7.0", | ||
@@ -44,0 +45,0 @@ "@whatwg-node/disposablestack": "^0.0.5", |
Sorry, the diff of this file is not supported yet
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
No v1
QualityPackage is not semver >=1. This means it is not stable and does not support ^ ranges.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
22100
8
163
2
+ Added@graphql-tools/executor-common@0.0.1-alpha-209a18edbaa02bf94b993f0d9a129681dfe06016
+ Added@envelop/core@5.0.2(transitive)
+ Added@envelop/types@5.0.0(transitive)
+ Added@graphql-tools/executor-common@0.0.1-alpha-209a18edbaa02bf94b993f0d9a129681dfe06016(transitive)