diff --git a/app/controllers/api/graphql.php b/app/controllers/api/graphql.php index 2d0a840bd6..7717da8981 100644 --- a/app/controllers/api/graphql.php +++ b/app/controllers/api/graphql.php @@ -115,13 +115,16 @@ Http::post('/v1/graphql/mutation') ->inject('promiseAdapter') ->action(function (Request $request, Response $response, GQLSchema $schema, Adapter $promiseAdapter) { $query = $request->getParams(); + $type = $request->getHeader('content-type', ''); - if ($request->getHeader('x-sdk-graphql') == 'true') { - $query = $query['query']; + if (empty($query) && \str_starts_with($type, 'application/json')) { + $rawPayload = $request->getRawPayload(); + $decoded = \json_decode($rawPayload, true); + if (\is_array($decoded)) { + $query = $decoded; + } } - $type = $request->getHeader('content-type'); - if (\str_starts_with($type, 'application/graphql')) { $query = parseGraphql($request); } @@ -130,6 +133,10 @@ Http::post('/v1/graphql/mutation') $query = parseMultipart($query, $request); } + if ($request->getHeader('x-sdk-graphql') == 'true' && isset($query['query'])) { + $query = $query['query']; + } + $output = execute($schema, $promiseAdapter, $query); $response @@ -166,13 +173,16 @@ Http::post('/v1/graphql') ->inject('promiseAdapter') ->action(function (Request $request, Response $response, GQLSchema $schema, Adapter $promiseAdapter) { $query = $request->getParams(); + $type = $request->getHeader('content-type', ''); - if ($request->getHeader('x-sdk-graphql') == 'true') { - $query = $query['query']; + if (empty($query) && \str_starts_with($type, 'application/json')) { + $rawPayload = $request->getRawPayload(); + $decoded = \json_decode($rawPayload, true); + if (\is_array($decoded)) { + $query = $decoded; + } } - $type = $request->getHeader('content-type'); - if (\str_starts_with($type, 'application/graphql')) { $query = parseGraphql($request); } @@ -181,6 +191,10 @@ Http::post('/v1/graphql') $query = parseMultipart($query, $request); } + if ($request->getHeader('x-sdk-graphql') == 'true' && isset($query['query'])) { + $query = $query['query']; + } + $output = execute($schema, $promiseAdapter, $query); $response