From 1e778d259e0dcdf50be629f972fcdd089b8432ee Mon Sep 17 00:00:00 2001 From: chriszarate Date: Sun, 2 Dec 2018 06:49:23 +0700 Subject: [PATCH] Apollo server/client compatibility. Look for queryid in extensions. (cherry picked from commit 63b4e3f0a4527c491f51e37bbda99169a47690f1) --- src/Server/OperationParams.php | 5 +++++ tests/Server/RequestParsingTest.php | 26 ++++++++++++++++++++++++++ 2 files changed, 31 insertions(+) diff --git a/src/Server/OperationParams.php b/src/Server/OperationParams.php index 8085d1e..a76f86e 100644 --- a/src/Server/OperationParams.php +++ b/src/Server/OperationParams.php @@ -95,6 +95,11 @@ class OperationParams $instance->variables = $params['variables']; $instance->readOnly = (bool) $readonly; + // Apollo server/client compatibility: look for the queryid in extensions + if (isset($params['extensions']['persistedQuery']['sha256Hash']) && empty($instance->query) && empty($instance->queryid)) { + $instance->queryId = $params['extensions']['persistedQuery']['sha256Hash']; + } + return $instance; } diff --git a/tests/Server/RequestParsingTest.php b/tests/Server/RequestParsingTest.php index b6c73d6..75412b1 100644 --- a/tests/Server/RequestParsingTest.php +++ b/tests/Server/RequestParsingTest.php @@ -333,6 +333,32 @@ class RequestParsingTest extends TestCase } } + public function testParsesApolloPersistedQueryJSONRequest() : void + { + $queryId = 'my-query-id'; + $extensions = [ + 'persistedQuery' => [ + 'sha256Hash' => $queryId, + ], + ]; + $variables = ['test' => 1, 'test2' => 2]; + $operation = 'op'; + + $body = [ + 'extensions' => $extensions, + 'variables' => $variables, + 'operationName' => $operation, + ]; + $parsed = [ + 'raw' => $this->parseRawRequest('application/json', json_encode($body)), + 'psr' => $this->parsePsrRequest('application/json', json_encode($body)), + ]; + foreach ($parsed as $method => $parsedBody) { + self::assertValidOperationParams($parsedBody, null, $queryId, $variables, $operation, $method); + self::assertFalse($parsedBody->isReadOnly(), $method); + } + } + public function testParsesBatchJSONRequest() : void { $body = [