diff --git a/docs/sdks/dart/CHANGELOG.md b/docs/sdks/dart/CHANGELOG.md index a17fb5bba6..0f3b216a8f 100644 --- a/docs/sdks/dart/CHANGELOG.md +++ b/docs/sdks/dart/CHANGELOG.md @@ -1,3 +1,7 @@ +## 7.2.0 + +* Support for GraphQL + ## 7.1.0 * Role helper update diff --git a/docs/sdks/flutter/CHANGELOG.md b/docs/sdks/flutter/CHANGELOG.md index 0338da8331..980f89d9d2 100644 --- a/docs/sdks/flutter/CHANGELOG.md +++ b/docs/sdks/flutter/CHANGELOG.md @@ -1,3 +1,7 @@ +## 8.2.0 + +* Support for GraphQL + ## 8.1.0 * Role helper update diff --git a/src/Appwrite/GraphQL/Resolvers.php b/src/Appwrite/GraphQL/Resolvers.php index 8da3fac586..c143a93554 100644 --- a/src/Appwrite/GraphQL/Resolvers.php +++ b/src/Appwrite/GraphQL/Resolvers.php @@ -291,13 +291,7 @@ class Resolvers return; } - foreach ($payload as $key => $value) { - if (\str_starts_with($key, '$')) { - $escapedKey = \str_replace('$', '_', $key); - $payload[$escapedKey] = $value; - unset($payload[$key]); - } - } + $payload = self::escapePayload($payload, 1); if ($beforeResolve) { $payload = $beforeResolve($payload); @@ -305,4 +299,25 @@ class Resolvers $resolve($payload); } + + private static function escapePayload(array $payload, int $depth) + { + if ($depth > App::getEnv('_APP_GRAPHQL_MAX_DEPTH', 3)) { + return; + } + + foreach ($payload as $key => $value) { + if (\str_starts_with($key, '$')) { + $escapedKey = \str_replace('$', '_', $key); + $payload[$escapedKey] = $value; + unset($payload[$key]); + } + + if (\is_array($value)) { + $payload[$key] = self::escapePayload($value, $depth + 1); + } + } + + return $payload; + } }