diff --git a/demo/.gitignore b/demo/.gitignore index ef40b0060d..9a748f224c 100644 --- a/demo/.gitignore +++ b/demo/.gitignore @@ -1,3 +1,5 @@ config.json -bin \ No newline at end of file +bin + +manifest \ No newline at end of file diff --git a/demo/Makefile b/demo/Makefile index 365f38e172..70121794e4 100644 --- a/demo/Makefile +++ b/demo/Makefile @@ -50,3 +50,10 @@ standalone-compose: standalone-integration: standalone-compose mv ./configWithStandalone.json ../router-tests/testenv/testdata/configWithGRPC.json + +.PHONY: build-manifest build-manifest-integration +build-manifest: + python3 build_manifest.py --router-config ./config.json --out ./manifest --cleanup + +build-manifest-integration: + python3 build_manifest.py --router-config ./config.json --out ../router-tests/testenv/testdata/manifest --cleanup diff --git a/demo/build_manifest.py b/demo/build_manifest.py new file mode 100755 index 0000000000..a4e1878666 --- /dev/null +++ b/demo/build_manifest.py @@ -0,0 +1,182 @@ +# TEMPORARY: This script is a stopgap for generating split manifest directories +# (mapper.json + latest.json + feature-flags/*.json) from a single router +# execution config. The same capability is being added to the `wgc` CLI; once +# `wgc` can produce local manifests this file should be deleted and any callers +# (Makefile targets, integration test setup) should be migrated to `wgc`. +import argparse +import json +import os.path + +from pathlib import Path +import shutil +from typing import Any + + +class ManifestBuilder: + """Splits a single router execution config into the manifest layout the + router expects when `WithManifestConfig` is used: + + / + mapper.json # { "": , "": , ... } + latest.json # base graph execution config + feature-flags/.json # one execution config per feature flag + + The router watches mapper.json and re-reads latest.json / feature-flags/* + whenever the mapper's mtime changes. + """ + + def __init__(self, router_config: str, output_dir: str, cleanup: bool): + # Resolve to absolute paths so error messages and downstream os.path + # operations don't depend on the caller's cwd. + self.router_config = os.path.abspath(router_config) + self.output_dir = os.path.abspath(output_dir) + self.cleanup = cleanup + + # State populated by `destructure_router_config` and consumed by + # `build_manifest`. Pre-initialised so attribute access is safe even + # if destructuring fails partway through. + self.mapper: dict[str, str] = {} # feature-flag name -> version hash ("" is the base graph) + self.full_config: dict[str, Any] = {} # the original combined router config as loaded from disk + self.latest_config: dict[str, Any] = {} # the subset of full_config that becomes latest.json + self.feature_flags: dict[str, Any] = {} # per-feature-flag execution configs, keyed by flag name + + # Validation may exit the process — do it before we try to read the + # router config so we fail fast with a clear message. + try: + self.validate() + except Exception as e: + print(f"Error: {e}") + exit(1) + + self.destructure_router_config() + + def validate(self): + """Ensure the input file exists and the output directory is usable. + + With `cleanup=True` the output directory is wiped first so stale + feature-flag files from a previous run don't linger. + """ + if not os.path.exists(self.router_config): + raise FileNotFoundError( + f"Router config file not found: {self.router_config}" + ) + + # When cleanup is requested, remove the directory wholesale so we + # don't have to enumerate and delete individual stale files (e.g. + # feature-flags that no longer exist in the new config). + if self.cleanup: + if os.path.exists(self.output_dir): + shutil.rmtree(self.output_dir) + if not os.path.exists(self.output_dir): + os.makedirs(self.output_dir) + if not os.path.isdir(self.output_dir): + raise NotADirectoryError( + f"Output directory is not a directory: {self.output_dir}" + ) + + def destructure_router_config(self): + """Load the combined router config and split it into the in-memory + pieces that `build_manifest` will later write out. + + The combined config carries the base graph alongside every feature + flag in a single `featureFlagConfigs.configByFeatureFlagName` map. + We pull each feature flag into its own dict and record its version + under its name in the mapper. The base graph is recorded under the + empty-string key — that's the convention the router expects. + """ + with open(self.router_config, "r") as f: + self.full_config = json.load(f) + + # latest.json is the base graph only — strip the feature flag + # bundle out so it's not duplicated on disk. + self.latest_config = { + "version": self.full_config["version"], + "engineConfig": self.full_config["engineConfig"], + "subgraphs": self.full_config["subgraphs"], + "compatibilityVersion": self.full_config["compatibilityVersion"], + } + + # Base graph entry in the mapper uses the empty-string key. + self.mapper[""] = self.latest_config["version"] + + # Each feature flag becomes its own entry in the mapper and its + # own file under feature-flags/. The mapper value is the flag's + # version hash, which is also what the router reports back via + # the X-Router-Config-Version header when that flag is active. + for feature_flag_name, feature_flag_config in self.full_config[ + "featureFlagConfigs" + ]["configByFeatureFlagName"].items(): + self.mapper[feature_flag_name] = feature_flag_config["version"] + self.feature_flags[feature_flag_name] = { + "version": feature_flag_config["version"], + "engineConfig": feature_flag_config["engineConfig"], + "subgraphs": feature_flag_config["subgraphs"], + } + + def build_manifest(self): + """Write the in-memory pieces produced by `destructure_router_config` + to disk in the layout the router watches. + + Order is intentional: mapper.json is written last because it is the + file the router stats for mtime changes. Writing it after latest.json + and the feature-flag configs ensures the watcher never observes a + mapper that references files which are not yet on disk (or are stale). + Callers that want fully atomic swaps should write to a sibling + directory and rename — this script is for one-shot local generation + only. + """ + # latest.json — the base graph's execution config. + latest_path = os.path.join(self.output_dir, "latest.json") + self.write_content_to_file(self.latest_config, Path(latest_path)) + + # feature-flags/ must exist even when there are no feature flags; + # the router stats this directory during config assembly. + feature_flag_path = os.path.join(self.output_dir, "feature-flags") + if not os.path.exists(feature_flag_path): + os.makedirs(feature_flag_path) + + # One file per feature flag, named after the flag itself so the + # router can resolve `.json` directly from the mapper key. + for feature_flag_name, feature_flag_config in self.feature_flags.items(): + feature_flag_config_path = os.path.join(feature_flag_path, f"{feature_flag_name}.json") + self.write_content_to_file(feature_flag_config, Path(feature_flag_config_path)) + + # mapper.json — the file the manifest watcher stats for mtime + # changes. Written last so its mtime bump only occurs after the + # configs it references are already on disk. + mapper_path = os.path.join(self.output_dir, "mapper.json") + self.write_content_to_file(self.mapper, Path(mapper_path)) + + def write_content_to_file(self, content: dict[str, Any], path: Path): + # Pretty-printed JSON so the generated files are diff-friendly in + # source control / when checked into testdata. + path.write_text(json.dumps(content, indent=2), encoding="utf-8") + + +def main(): + """CLI entry point. Parses arguments, builds the manifest, and exits + non-zero on any failure so callers (Makefile targets, CI) can detect it. + """ + parser = argparse.ArgumentParser(description="Build the manifest for the demo") + parser.add_argument( + "--router-config", type=str, required=True, help="The path to the router config" + ) + parser.add_argument( + "--out", type=str, required=True, help="The path to the output directory" + ) + parser.add_argument( + "--cleanup", action="store_true", help="Cleanup the output directory before building the manifest" + ) + + args = parser.parse_args() + builder = ManifestBuilder(args.router_config, args.out, args.cleanup) + + try: + builder.build_manifest() + except Exception as e: + print(f"Error: {e}") + exit(1) + + +if __name__ == "__main__": + main() diff --git a/docs-website/router/configuration.mdx b/docs-website/router/configuration.mdx index 0be5cad10a..778cf52b03 100644 --- a/docs-website/router/configuration.mdx +++ b/docs-website/router/configuration.mdx @@ -1218,7 +1218,7 @@ The configuration for the execution setup contains instructions for the router t ### Example YAML config: -You can load the execution config from a [storage provider](/router/storage-providers) or from a local file: +The execution config source is exclusive. Configure exactly one of `storage`, `file`, or `manifest`. `fallback_storage` is the only field that may be combined with `storage` and is used to retry from a secondary location when the primary storage provider fails. ```yaml Storage provider @@ -1238,6 +1238,18 @@ You can load the execution config from a [storage provider](/router/storage-prov watch_interval: "1s" ``` + ```yaml Local manifest + version: "1" + execution_config: + manifest: + path: "./__schemas/manifest" + skip_missing_feature_flags: false + ignored_feature_flags: + - "experimental-checkout" + watch: true + watch_interval: "1s" + ``` + ```yaml Fallback storage version: "1" execution_config: @@ -1251,6 +1263,8 @@ You can load the execution config from a [storage provider](/router/storage-prov ``` +A manifest directory contains a `mapper.json` indexing the base graph and every feature flag by version, a `latest.json` with the base graph's execution config, and one `feature-flags/.json` per feature flag. When `watch` is enabled, the router watches `mapper.json`. Whenever the file's mtime changes, the router reloads the assembled config without downtime. + When using a storage provider, the `object_path` field points to the file in your bucket that is updated after each schema deployment in your CI/CD pipeline: ```bash @@ -1268,19 +1282,25 @@ You can configure a fallback storage for fetching the execution config in the ev ### Execution config options -| Environment Variable | YAML | Required | Description | Default Value | -| --------------------------------------------- | --------------------------------------------- | --------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------- | -| | execution_config | | The configuration for the execution config. | | -| | file | | The configuration for the execution config file. The config file is used to load the execution config from the local file system. The file has precedence over the storage provider. | | -| EXECUTION_CONFIG_FILE_PATH | file.path | | The path to the execution config file. The path is used to load the execution config from the local file system. | | -| EXECUTION_CONFIG_FILE_WATCH | file.watch | | Enable the watch mode. The watch mode is used to watch the execution config file for changes. If the file changes, the router will reload the execution config without downtime. | true | -| EXECUTION_CONFIG_FILE_WATCH_INTERVAL | file.watch_interval | | The interval at which the file is checked for changes. | 1s | -| | execution_config.storage | | The storage provider for the execution config. Only one provider can be active. When no provider is specified, the router will fallback to the Cosmo CDN provider to download the execution config. | | -| EXECUTION_CONFIG_STORAGE_PROVIDER_ID | execution_config.storage.provider_id | | The ID of the storage provider. The ID must match the ID of the storage provider in the `storage_providers` section. | | -| EXECUTION_CONFIG_STORAGE_OBJECT_PATH | execution_config.storage.object_path | | The path to the execution config in the storage provider. The path is used to download the execution config from the S3 bucket. | | -| EXECUTION_CONFIG_FALLBACK_STORAGE_ENABLED | execution_config.fallback_storage.enabled | | Enable a fallback storage to fetch the execution config in case the above primary source fails. | false | -| EXECUTION_CONFIG_FALLBACK_STORAGE_PROVIDER_ID | execution_config.fallback_storage.provider_id | | The ID of the storage provider. The ID must match the ID of the storage provider in the `storage_providers` section. | | -| EXECUTION_CONFIG_FALLBACK_STORAGE_OBJECT_PATH | execution_config.fallback_storage.object_path | | The path to the execution config in the storage provider. The path is used to download the execution config from the S3 bucket. | | +| Environment Variable | YAML | Required | Description | Default Value | +| ---------------------------------------------------- | --------------------------------------------- | --------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------- | +| | execution_config | | The configuration for the execution config. | | +| | file | | The configuration for the execution config file. The config file is used to load the execution config from the local file system. The file has precedence over the storage provider. | | +| EXECUTION_CONFIG_FILE_PATH | file.path | | The path to the execution config file. The path is used to load the execution config from the local file system. | | +| EXECUTION_CONFIG_FILE_WATCH | file.watch | | Enable the watch mode. The watch mode is used to watch the execution config file for changes. If the file changes, the router will reload the execution config without downtime. | true | +| EXECUTION_CONFIG_FILE_WATCH_INTERVAL | file.watch_interval | | The interval at which the file is checked for changes. | 1s | +| | manifest | | The configuration for loading the execution config from a local manifest directory. The directory contains `mapper.json`, `latest.json`, and one `feature-flags/.json` per feature flag. Mutually exclusive with `file` and `storage`. | | +| EXECUTION_CONFIG_MANIFEST_PATH | manifest.path | | The path to the manifest directory. | | +| EXECUTION_CONFIG_MANIFEST_SKIP_MISSING_FEATURE_FLAGS | manifest.skip_missing_feature_flags | | Skip feature flags listed in `mapper.json` whose execution config file cannot be loaded, instead of aborting the load. | false | +| EXECUTION_CONFIG_MANIFEST_IGNORED_FEATURE_FLAGS | manifest.ignored_feature_flags | | Feature flag names to skip entirely when loading the manifest. Listed flags are not loaded even when referenced by `mapper.json`. | | +| EXECUTION_CONFIG_MANIFEST_WATCH | manifest.watch | | Enable the watch mode. When enabled, the router stats `mapper.json` for changes and reloads the assembled execution config without downtime. | false | +| EXECUTION_CONFIG_MANIFEST_WATCH_INTERVAL | manifest.watch_interval | | The interval at which `mapper.json` is checked for changes. Only applied when `manifest.watch` is enabled. | 1s | +| | execution_config.storage | | The storage provider for the execution config. Only one provider can be active. When no provider is specified, the router will fallback to the Cosmo CDN provider to download the execution config. | | +| EXECUTION_CONFIG_STORAGE_PROVIDER_ID | execution_config.storage.provider_id | | The ID of the storage provider. The ID must match the ID of the storage provider in the `storage_providers` section. | | +| EXECUTION_CONFIG_STORAGE_OBJECT_PATH | execution_config.storage.object_path | | The path to the execution config in the storage provider. The path is used to download the execution config from the S3 bucket. | | +| EXECUTION_CONFIG_FALLBACK_STORAGE_ENABLED | execution_config.fallback_storage.enabled | | Enable a fallback storage to fetch the execution config in case the above primary source fails. | false | +| EXECUTION_CONFIG_FALLBACK_STORAGE_PROVIDER_ID | execution_config.fallback_storage.provider_id | | The ID of the storage provider. The ID must match the ID of the storage provider in the `storage_providers` section. | | +| EXECUTION_CONFIG_FALLBACK_STORAGE_OBJECT_PATH | execution_config.fallback_storage.object_path | | The path to the execution config in the storage provider. The path is used to download the execution config from the S3 bucket. | | ## Split Config Poller diff --git a/router-tests/protocol/config_hot_reload_test.go b/router-tests/protocol/config_hot_reload_test.go index 9a97f85848..43261f6955 100644 --- a/router-tests/protocol/config_hot_reload_test.go +++ b/router-tests/protocol/config_hot_reload_test.go @@ -5,8 +5,11 @@ import ( "context" "encoding/json" + "maps" "net/http" "os" + "path/filepath" + "sync" "sync/atomic" "testing" "time" @@ -126,10 +129,11 @@ func TestConfigHotReloadPoller(t *testing.T) { }, }, func(t *testing.T, xEnv *testenv.Environment) { - var done atomic.Uint32 + var wg sync.WaitGroup + wg.Add(2) go func() { - defer done.Add(1) + defer wg.Done() res := xEnv.MakeGraphQLRequestOK(testenv.GraphQLRequest{ Query: `{ employees { id } }`, @@ -140,7 +144,7 @@ func TestConfigHotReloadPoller(t *testing.T) { }() go func() { - defer done.Add(1) + defer wg.Done() res := xEnv.MakeGraphQLRequestOK(testenv.GraphQLRequest{ Query: `{ employees { id } }`, @@ -168,9 +172,7 @@ func TestConfigHotReloadPoller(t *testing.T) { require.JSONEq(t, testutils.EmployeesIDData, res.Body) // Ensure that all requests are served successfully - require.Eventually(t, func() bool { - return done.Load() == 2 - }, time.Second*5, time.Millisecond*100) + wg.Wait() }) }) @@ -370,10 +372,11 @@ func TestConfigHotReloadFile(t *testing.T) { require.Equal(t, res.Response.StatusCode, 200) require.Equal(t, "initial", res.Response.Header.Get("X-Router-Config-Version")) - var done atomic.Uint32 + var wg sync.WaitGroup + wg.Add(2) go func() { - defer done.Add(1) + defer wg.Done() res := xEnv.MakeGraphQLRequestOK(testenv.GraphQLRequest{ Query: `query { hello }`, @@ -383,7 +386,7 @@ func TestConfigHotReloadFile(t *testing.T) { }() go func() { - defer done.Add(1) + defer wg.Done() res := xEnv.MakeGraphQLRequestOK(testenv.GraphQLRequest{ Query: `query { hello }`, @@ -404,12 +407,223 @@ func TestConfigHotReloadFile(t *testing.T) { }, 2*time.Second, 100*time.Millisecond) // Ensure that all requests are served successfully - require.Eventually(t, func() bool { - return done.Load() == 2 - }, time.Second*5, time.Millisecond*100) + wg.Wait() + }) + }) + +} + +// TestConfigHotReloadManifest mirrors TestConfigHotReloadFile, but the router loads its +// configuration from a manifest directory instead of a single JSON file. A manifest +// consists of mapper.json (maps the base graph and each feature flag to a version), +// latest.json (the base graph config), and feature-flags/.json (per-flag configs). +// The watcher detects updates by observing mapper.json's mtime, so any change — base +// graph swap, flag addition, or flag mutation — must be reflected by rewriting mapper.json. +func TestConfigHotReloadManifest(t *testing.T) { + t.Parallel() + + t.Run("hot-reload config from manifest", func(t *testing.T) { + t.Parallel() + + manifestDir := t.TempDir() + writeTestManifest(t, "initial", manifestDir) + + testenv.Run(t, &testenv.Config{ + RouterOptions: []core.Option{ + core.WithConfigVersionHeader(true), + core.WithManifestConfig(&core.ManifestConfig{ + Path: manifestDir, + Watch: true, + WatchInterval: 100 * time.Millisecond, + }), + }, + }, func(t *testing.T, xEnv *testenv.Environment) { + res := xEnv.MakeGraphQLRequestOK(testenv.GraphQLRequest{ + Query: `query { hello }`, + }) + require.Equal(t, res.Response.StatusCode, 200) + require.Equal(t, "initial", res.Response.Header.Get("X-Router-Config-Version")) + + writeTestManifest(t, "updated", manifestDir) + + require.EventuallyWithT(t, func(t *assert.CollectT) { + res = xEnv.MakeGraphQLRequestOK(testenv.GraphQLRequest{ + Query: `query { hello }`, + }) + require.Equal(t, "updated", res.Response.Header.Get("X-Router-Config-Version")) + }, 2*time.Second, 100*time.Millisecond) + }) + }) + + t.Run("does not hot-reload config from manifest if watch is disabled", func(t *testing.T) { + t.Parallel() + + manifestDir := t.TempDir() + writeTestManifest(t, "initial", manifestDir) + + testenv.Run(t, &testenv.Config{ + RouterOptions: []core.Option{ + core.WithConfigVersionHeader(true), + core.WithManifestConfig(&core.ManifestConfig{ + Path: manifestDir, + Watch: false, + WatchInterval: 100 * time.Millisecond, + }), + }, + }, func(t *testing.T, xEnv *testenv.Environment) { + res := xEnv.MakeGraphQLRequestOK(testenv.GraphQLRequest{ + Query: `query { hello }`, + }) + require.Equal(t, res.Response.StatusCode, 200) + require.Equal(t, "initial", res.Response.Header.Get("X-Router-Config-Version")) + + writeTestManifest(t, "updated", manifestDir) + + require.EventuallyWithT(t, func(t *assert.CollectT) { + res = xEnv.MakeGraphQLRequestOK(testenv.GraphQLRequest{ + Query: `query { hello }`, + }) + require.Equal(t, "initial", res.Response.Header.Get("X-Router-Config-Version")) + }, 2*time.Second, 100*time.Millisecond) + }) + }) + + t.Run("does not interrupt existing client traffic", func(t *testing.T) { + t.Parallel() + + manifestDir := t.TempDir() + writeTestManifest(t, "initial", manifestDir) + + testenv.Run(t, &testenv.Config{ + Subgraphs: testenv.SubgraphsConfig{ + GlobalDelay: time.Millisecond * 500, + }, + RouterOptions: []core.Option{ + core.WithConfigVersionHeader(true), + core.WithManifestConfig(&core.ManifestConfig{ + Path: manifestDir, + Watch: true, + WatchInterval: 100 * time.Millisecond, + }), + core.WithEngineExecutionConfig(config.EngineExecutionConfiguration{ + EnableSingleFlight: false, + MaxConcurrentResolvers: 32, + }), + }, + }, func(t *testing.T, xEnv *testenv.Environment) { + res := xEnv.MakeGraphQLRequestOK(testenv.GraphQLRequest{ + Query: `query { hello }`, + }) + require.Equal(t, res.Response.StatusCode, 200) + require.Equal(t, "initial", res.Response.Header.Get("X-Router-Config-Version")) + + var wg sync.WaitGroup + wg.Add(2) + + go func() { + defer wg.Done() + + res := xEnv.MakeGraphQLRequestOK(testenv.GraphQLRequest{ + Query: `query { hello }`, + }) + assert.Equal(t, res.Response.StatusCode, 200) + assert.Equal(t, "initial", res.Response.Header.Get("X-Router-Config-Version")) + }() + + go func() { + defer wg.Done() + + res := xEnv.MakeGraphQLRequestOK(testenv.GraphQLRequest{ + Query: `query { hello }`, + }) + assert.Equal(t, res.Response.StatusCode, 200) + assert.Equal(t, "initial", res.Response.Header.Get("X-Router-Config-Version")) + }() + + time.Sleep(time.Millisecond * 100) + + writeTestManifest(t, "updated", manifestDir) + + require.EventuallyWithT(t, func(t *assert.CollectT) { + res := xEnv.MakeGraphQLRequestOK(testenv.GraphQLRequest{ + Query: `query { hello }`, + }) + require.Equal(t, "updated", res.Response.Header.Get("X-Router-Config-Version")) + }, 2*time.Second, 100*time.Millisecond) + + // Ensure that all requests are served successfully + wg.Wait() }) }) + // Unique to the manifest format: feature flags live in separate files and the mapper + // can grow over time. The single-file config can't express this — adding a new flag + // there is just a normal config swap. + t.Run("reload picks up newly added feature flag", func(t *testing.T) { + t.Parallel() + + manifestDir := t.TempDir() + writeTestManifest(t, "initial", manifestDir) + + testenv.Run(t, &testenv.Config{ + RouterOptions: []core.Option{ + core.WithConfigVersionHeader(true), + core.WithManifestConfig(&core.ManifestConfig{ + Path: manifestDir, + Watch: true, + WatchInterval: 100 * time.Millisecond, + }), + }, + }, func(t *testing.T, xEnv *testenv.Environment) { + res := xEnv.MakeGraphQLRequestOK(testenv.GraphQLRequest{ + Query: `query { hello }`, + }) + require.Equal(t, "initial", res.Response.Header.Get("X-Router-Config-Version")) + + // Add a feature flag config file and update the mapper to reference it. + writeFeatureFlagConfig(t, "myff", "myff-initial", manifestDir) + writeTestMapper(t, manifestDir, "initial", map[string]string{"myff": "myff-initial"}) + + require.EventuallyWithT(t, func(t *assert.CollectT) { + res := xEnv.MakeGraphQLRequestOK(testenv.GraphQLRequest{ + Query: `query { hello }`, + Header: http.Header{"X-Feature-Flag": []string{"myff"}}, + }) + require.Equal(t, "myff-initial", res.Response.Header.Get("X-Router-Config-Version")) + }, 2*time.Second, 100*time.Millisecond) + }) + }) + + // Unique to the manifest format: because flag configs are separate files, the mapper + // can reference a flag whose file hasn't been written yet. SkipMissingFeatureFlags + // lets the router boot anyway instead of failing. No analog exists for the single-file + // config, where the config either parses or it doesn't. + t.Run("skip_missing_feature_flags allows the router to start with a mapper entry that has no config file", func(t *testing.T) { + t.Parallel() + + manifestDir := t.TempDir() + writeTestManifest(t, "initial", manifestDir) + // mapper references a feature flag whose config file does not exist + writeTestMapper(t, manifestDir, "initial", map[string]string{"ghost": "ghost-v1"}) + + testenv.Run(t, &testenv.Config{ + RouterOptions: []core.Option{ + core.WithConfigVersionHeader(true), + core.WithManifestConfig(&core.ManifestConfig{ + Path: manifestDir, + SkipMissingFeatureFlags: true, + Watch: false, + WatchInterval: 100 * time.Millisecond, + }), + }, + }, func(t *testing.T, xEnv *testenv.Environment) { + res := xEnv.MakeGraphQLRequestOK(testenv.GraphQLRequest{ + Query: `query { hello }`, + }) + require.Equal(t, res.Response.StatusCode, 200) + require.Equal(t, "initial", res.Response.Header.Get("X-Router-Config-Version")) + }) + }) } func TestSwapConfig(t *testing.T) { @@ -426,7 +640,7 @@ func TestSwapConfig(t *testing.T) { var requestsStarted atomic.Uint32 var requestsDone atomic.Uint32 - for i := 0; i < 10; i++ { + for range 10 { requestsStarted.Add(1) func() { defer requestsDone.Add(1) @@ -755,6 +969,109 @@ func writeTestConfig(t *testing.T, version string, path string) { require.NoError(t, err) } +// writeTestManifest writes a minimal manifest directory: a mapper.json with only the +// base graph entry, a latest.json with a static "hello" datasource, and an empty +// feature-flags/ directory. Calling this again with a new version rewrites all files, +// which bumps mapper.json's mtime and triggers the manifest watcher. +func writeTestManifest(t *testing.T, version string, manifestDir string) { + t.Helper() + + require.NoError(t, os.MkdirAll(filepath.Join(manifestDir, "feature-flags"), 0o755)) + + writeBaseGraphConfig(t, version, manifestDir) + writeTestMapper(t, manifestDir, version, nil) +} + +func writeTestMapper(t *testing.T, manifestDir string, baseVersion string, featureFlags map[string]string) { + t.Helper() + + mapper := make(map[string]string, len(featureFlags)+1) + mapper[""] = baseVersion + maps.Copy(mapper, featureFlags) + + data, err := json.Marshal(mapper) + require.NoError(t, err) + require.NoError(t, os.WriteFile(filepath.Join(manifestDir, "mapper.json"), data, 0o644)) +} + +func writeBaseGraphConfig(t *testing.T, version string, manifestDir string) { + t.Helper() + + cfg := &nodev1.RouterConfig{ + Version: version, + EngineConfig: &nodev1.EngineConfiguration{ + DefaultFlushInterval: 500, + DatasourceConfigurations: []*nodev1.DataSourceConfiguration{ + { + Kind: nodev1.DataSourceKind_STATIC, + RootNodes: []*nodev1.TypeField{ + { + TypeName: "Query", + FieldNames: []string{"hello"}, + }, + }, + CustomStatic: &nodev1.DataSourceCustom_Static{ + Data: &nodev1.ConfigurationVariable{ + StaticVariableContent: `{"hello": "Hello!"}`, + }, + }, + Id: "0", + }, + }, + GraphqlSchema: "schema {\n query: Query\n}\ntype Query {\n hello: String\n}", + FieldConfigurations: []*nodev1.FieldConfiguration{ + { + TypeName: "Query", + FieldName: "hello", + }, + }, + }, + } + + data, err := json.Marshal(cfg) + require.NoError(t, err) + require.NoError(t, os.WriteFile(filepath.Join(manifestDir, "latest.json"), data, 0o644)) +} + +func writeFeatureFlagConfig(t *testing.T, name string, version string, manifestDir string) { + t.Helper() + + cfg := &nodev1.RouterConfig{ + Version: version, + EngineConfig: &nodev1.EngineConfiguration{ + DefaultFlushInterval: 500, + DatasourceConfigurations: []*nodev1.DataSourceConfiguration{ + { + Kind: nodev1.DataSourceKind_STATIC, + RootNodes: []*nodev1.TypeField{ + { + TypeName: "Query", + FieldNames: []string{"hello"}, + }, + }, + CustomStatic: &nodev1.DataSourceCustom_Static{ + Data: &nodev1.ConfigurationVariable{ + StaticVariableContent: `{"hello": "Hello from ` + name + `!"}`, + }, + }, + Id: "0", + }, + }, + GraphqlSchema: "schema {\n query: Query\n}\ntype Query {\n hello: String\n}", + FieldConfigurations: []*nodev1.FieldConfiguration{ + { + TypeName: "Query", + FieldName: "hello", + }, + }, + }, + } + + data, err := json.Marshal(cfg) + require.NoError(t, err) + require.NoError(t, os.WriteFile(filepath.Join(manifestDir, "feature-flags", name+".json"), data, 0o644)) +} + func BenchmarkConfigHotReload(b *testing.B) { pm := ConfigPollerMock{ ready: make(chan struct{}), diff --git a/router-tests/testenv/testdata/manifest/feature-flags/myff.json b/router-tests/testenv/testdata/manifest/feature-flags/myff.json new file mode 100644 index 0000000000..c2ab883517 --- /dev/null +++ b/router-tests/testenv/testdata/manifest/feature-flags/myff.json @@ -0,0 +1,2959 @@ +{ + "version": "abafd5eb-d234-4bf8-ba6f-fdeef52d9e68", + "engineConfig": { + "defaultFlushInterval": "500", + "datasourceConfigurations": [ + { + "kind": "GRAPHQL", + "rootNodes": [ + { + "typeName": "Query", + "fieldNames": [ + "employee", + "employeeAsList", + "employees", + "products", + "teammates", + "firstEmployee" + ] + }, + { + "typeName": "Mutation", + "fieldNames": [ + "updateEmployeeTag", + "singleUpload", + "singleUploadWithInput", + "multipleUpload" + ] + }, + { + "typeName": "Subscription", + "fieldNames": [ + "currentTime", + "countEmp", + "countEmp2", + "countFor" + ] + }, + { + "typeName": "Country", + "fieldNames": [ + "key" + ] + }, + { + "typeName": "Employee", + "fieldNames": [ + "details", + "id", + "tag", + "role", + "updatedAt", + "startDate", + "derivedMood", + "rootFieldThrowsError", + "rootFieldErrorWrapper" + ], + "externalFieldNames": [ + "currentMood", + "isAvailable" + ] + }, + { + "typeName": "Consultancy", + "fieldNames": [ + "upc", + "lead", + "isLeadAvailable" + ] + }, + { + "typeName": "Cosmo", + "fieldNames": [ + "upc", + "engineers", + "lead" + ] + }, + { + "typeName": "SDK", + "fieldNames": [ + "upc", + "engineers", + "owner", + "unicode" + ] + } + ], + "childNodes": [ + { + "typeName": "RoleType", + "fieldNames": [ + "departments", + "title", + "employees" + ] + }, + { + "typeName": "Identifiable", + "fieldNames": [ + "id" + ] + }, + { + "typeName": "Engineer", + "fieldNames": [ + "departments", + "title", + "employees", + "engineerType" + ] + }, + { + "typeName": "Marketer", + "fieldNames": [ + "departments", + "title", + "employees" + ] + }, + { + "typeName": "Operator", + "fieldNames": [ + "departments", + "title", + "employees", + "operatorType" + ] + }, + { + "typeName": "Details", + "fieldNames": [ + "forename", + "location", + "surname", + "pastLocations" + ] + }, + { + "typeName": "City", + "fieldNames": [ + "type", + "name", + "country" + ] + }, + { + "typeName": "CountryKey", + "fieldNames": [ + "name" + ] + }, + { + "typeName": "ErrorWrapper", + "fieldNames": [ + "okField", + "errorField" + ] + }, + { + "typeName": "Time", + "fieldNames": [ + "unixTime", + "timeStamp" + ] + }, + { + "typeName": "IProduct", + "fieldNames": [ + "upc", + "engineers" + ] + } + ], + "overrideFieldPathFromAlias": true, + "customGraphql": { + "fetch": { + "url": { + "staticVariableContent": "http://localhost:4001/graphql" + }, + "method": "POST", + "body": {}, + "baseUrl": {}, + "path": {} + }, + "subscription": { + "enabled": true, + "url": { + "staticVariableContent": "http://localhost:4001/graphql" + }, + "protocol": "GRAPHQL_SUBSCRIPTION_PROTOCOL_WS", + "websocketSubprotocol": "GRAPHQL_WEBSOCKET_SUBPROTOCOL_AUTO" + }, + "federation": { + "enabled": true, + "serviceSdl": "extend schema\n @link(\n url: \"https://specs.apollo.dev/federation/v2.5\"\n import: [\n \"@authenticated\"\n \"@composeDirective\"\n \"@external\"\n \"@extends\"\n \"@inaccessible\"\n \"@interfaceObject\"\n \"@override\"\n \"@provides\"\n \"@key\"\n \"@requires\"\n \"@requiresScopes\"\n \"@shareable\"\n \"@tag\"\n ]\n )\n\ndirective @goField(\n forceResolver: Boolean\n name: String\n omittable: Boolean\n) on INPUT_FIELD_DEFINITION | FIELD_DEFINITION\n\ntype Query {\n employee(id: Int!): Employee\n employeeAsList(id: Int!): [Employee]\n employees: [Employee]\n products: [Products!]!\n teammates(team: Department!): [Employee!]!\n firstEmployee: Employee! @tag(name: \"internal\")\n}\n\nscalar Upload\n\ntype Mutation {\n updateEmployeeTag(id: Int!, tag: String!): Employee\n\n singleUpload(file: Upload!): Boolean!\n singleUploadWithInput(arg: FileUpload!): Boolean!\n multipleUpload(files: [Upload!]!): Boolean!\n}\n\ninput FileUpload {\n nested: DeeplyNestedFileUpload\n nestedList: [Upload!]\n}\n\ninput DeeplyNestedFileUpload {\n file: Upload!\n}\n\ntype Subscription {\n \"\"\"\n `currentTime` will return a stream of `Time` objects.\n \"\"\"\n currentTime: Time!\n countEmp(max: Int!, intervalMilliseconds: Int!): Int!\n countEmp2(max: Int!, intervalMilliseconds: Int!): Int!\n countFor(count: Int!): Int!\n}\n\nenum Department {\n ENGINEERING\n MARKETING\n OPERATIONS\n}\n\ninterface RoleType {\n departments: [Department!]!\n title: [String!]!\n employees: [Employee!]! @goField(forceResolver: true)\n}\n\nenum EngineerType {\n BACKEND\n FRONTEND\n FULLSTACK\n}\n\ninterface Identifiable {\n id: Int!\n}\n\ntype Engineer implements RoleType {\n departments: [Department!]!\n title: [String!]!\n employees: [Employee!]! @goField(forceResolver: true)\n engineerType: EngineerType!\n}\n\ntype Marketer implements RoleType {\n departments: [Department!]!\n title: [String!]!\n employees: [Employee!]! @goField(forceResolver: true)\n}\n\nenum OperationType {\n FINANCE\n HUMAN_RESOURCES\n}\n\ntype Operator implements RoleType {\n departments: [Department!]!\n title: [String!]!\n employees: [Employee!]! @goField(forceResolver: true)\n operatorType: [OperationType!]!\n}\n\ntype Details {\n forename: String! @shareable\n location: Country!\n surname: String! @shareable\n pastLocations: [City!]!\n}\n\ntype City {\n type: String!\n name: String!\n country: Country\n}\n\n# Using a nested key field simply because it can showcase potential bug\n# vectors / Federation capabilities.\ntype Country @key(fields: \"key { name }\", resolvable: false) {\n key: CountryKey!\n}\n\ntype CountryKey {\n name: String!\n}\n\nenum Mood {\n HAPPY\n SAD\n}\n\ntype Employee implements Identifiable @key(fields: \"id\") {\n details: Details! @shareable\n id: Int!\n tag: String!\n role: RoleType!\n notes: String @shareable\n updatedAt: String!\n startDate: String! @requiresScopes(scopes: [[\"read:employee\", \"read:private\"], [\"read:all\"]])\n currentMood: Mood! @external\n derivedMood: Mood! @requires(fields: \"currentMood\")\n # From the `availability` service. Only defined for use in @requires\n isAvailable: Boolean! @external\n rootFieldThrowsError: String @goField(forceResolver: true)\n rootFieldErrorWrapper: ErrorWrapper @goField(forceResolver: true)\n}\n\ntype ErrorWrapper {\n okField: String\n errorField: String @goField(forceResolver: true)\n}\n\ntype Time {\n unixTime: Int!\n timeStamp: String!\n}\n\nunion Products = Consultancy | Cosmo | SDK\n\ninterface IProduct {\n upc: ID!\n engineers: [Employee!]!\n}\n\ntype Consultancy @key(fields: \"upc\") {\n upc: ID!\n lead: Employee!\n isLeadAvailable: Boolean @requires(fields: \"lead { isAvailable }\")\n}\n\ntype Cosmo implements IProduct @key(fields: \"upc\") {\n upc: ID!\n engineers: [Employee!]!\n lead: Employee!\n}\n\ntype SDK implements IProduct @key(fields: \"upc\") {\n upc: ID!\n engineers: [Employee!]!\n owner: Employee!\n unicode: String!\n}\n" + }, + "upstreamSchema": { + "key": "2ebeba33065ef483f119d0097b7cfab1bfe2e1a7" + } + }, + "requestTimeoutSeconds": "10", + "id": "0", + "keys": [ + { + "typeName": "Country", + "selectionSet": "key { name }", + "disableEntityResolver": true + }, + { + "typeName": "Employee", + "selectionSet": "id" + }, + { + "typeName": "Consultancy", + "selectionSet": "upc" + }, + { + "typeName": "Cosmo", + "selectionSet": "upc" + }, + { + "typeName": "SDK", + "selectionSet": "upc" + } + ], + "requires": [ + { + "typeName": "Employee", + "fieldName": "derivedMood", + "selectionSet": "currentMood" + }, + { + "typeName": "Consultancy", + "fieldName": "isLeadAvailable", + "selectionSet": "lead { isAvailable }" + } + ] + }, + { + "kind": "GRAPHQL", + "rootNodes": [ + { + "typeName": "Query", + "fieldNames": [ + "findEmployees" + ] + }, + { + "typeName": "Employee", + "fieldNames": [ + "id", + "details" + ] + } + ], + "childNodes": [ + { + "typeName": "Animal", + "fieldNames": [ + "class", + "gender" + ] + }, + { + "typeName": "Pet", + "fieldNames": [ + "class", + "gender", + "name" + ] + }, + { + "typeName": "Alligator", + "fieldNames": [ + "class", + "dangerous", + "gender", + "name" + ] + }, + { + "typeName": "Cat", + "fieldNames": [ + "class", + "gender", + "name", + "type" + ] + }, + { + "typeName": "Dog", + "fieldNames": [ + "breed", + "class", + "gender", + "name" + ] + }, + { + "typeName": "Mouse", + "fieldNames": [ + "class", + "gender", + "name" + ] + }, + { + "typeName": "Pony", + "fieldNames": [ + "class", + "gender", + "name" + ] + }, + { + "typeName": "Details", + "fieldNames": [ + "forename", + "middlename", + "surname", + "hasChildren", + "maritalStatus", + "nationality", + "pets" + ] + } + ], + "overrideFieldPathFromAlias": true, + "customGraphql": { + "fetch": { + "url": { + "staticVariableContent": "http://localhost:4002/graphql" + }, + "method": "POST", + "body": {}, + "baseUrl": {}, + "path": {} + }, + "subscription": { + "enabled": true, + "url": { + "staticVariableContent": "http://localhost:4002/graphql" + }, + "protocol": "GRAPHQL_SUBSCRIPTION_PROTOCOL_WS", + "websocketSubprotocol": "GRAPHQL_WEBSOCKET_SUBPROTOCOL_AUTO" + }, + "federation": { + "enabled": true, + "serviceSdl": "extend schema\n@link(url: \"https://specs.apollo.dev/federation/v2.5\", import: [\"@authenticated\", \"@composeDirective\", \"@external\", \"@extends\", \"@inaccessible\", \"@interfaceObject\", \"@override\", \"@provides\", \"@key\", \"@requires\", \"@requiresScopes\", \"@shareable\", \"@tag\"])\n\ntype Query {\n \"\"\" This is a GraphQL query that retrieves a list of employees.\"\"\"\n findEmployees(criteria: SearchInput): [Employee!]!\n}\n\nenum Class {\n FISH\n MAMMAL\n REPTILE\n}\n\nenum Gender {\n FEMALE\n MALE\n UNKNOWN\n}\n\ninterface Animal {\n class: Class!\n gender: Gender!\n}\n\ninterface Pet implements Animal {\n class: Class!\n gender: Gender!\n name: String!\n}\n\nenum CatType {\n HOME\n STREET\n}\n\ntype Alligator implements Pet & Animal {\n class: Class!\n dangerous: String!\n gender: Gender!\n name: String!\n}\n\ntype Cat implements Pet & Animal {\n class: Class!\n gender: Gender!\n name: String!\n type: CatType!\n}\n\nenum DogBreed {\n GOLDEN_RETRIEVER\n POODLE\n ROTTWEILER\n YORKSHIRE_TERRIER\n}\n\ntype Dog implements Pet & Animal {\n breed: DogBreed!\n class: Class!\n gender: Gender!\n name: String!\n}\n\ntype Mouse implements Pet & Animal {\n class: Class!\n gender: Gender!\n name: String!\n}\n\ntype Pony implements Pet & Animal {\n class: Class!\n gender: Gender!\n name: String!\n}\n\nenum MaritalStatus {\n ENGAGED\n MARRIED\n}\n\nenum Nationality {\n AMERICAN\n DUTCH\n ENGLISH\n GERMAN\n INDIAN\n SPANISH\n UKRAINIAN\n}\n\ntype Details {\n forename: String! @shareable\n middlename: String @deprecated\n surname: String! @shareable\n hasChildren: Boolean!\n maritalStatus: MaritalStatus\n nationality: Nationality!\n pets: [Pet]\n}\n\ntype Employee @key(fields: \"id\") {\n id: Int!\n details: Details @shareable\n}\n\n\"\"\" Allows to filter employees by their details. \"\"\"\ninput SearchInput {\n hasPets: Boolean\n nationality: Nationality\n nested: NestedSearchInput\n}\n\ninput NestedSearchInput {\n maritalStatus: MaritalStatus\n hasChildren: Boolean\n}\n" + }, + "upstreamSchema": { + "key": "6618be4cd5102db58a9821e09dfa49eec9262146" + } + }, + "requestTimeoutSeconds": "10", + "id": "1", + "keys": [ + { + "typeName": "Employee", + "selectionSet": "id" + } + ] + }, + { + "kind": "GRAPHQL", + "rootNodes": [ + { + "typeName": "Country", + "fieldNames": [ + "key" + ] + }, + { + "typeName": "Employee", + "fieldNames": [ + "id", + "hobbies" + ] + }, + { + "typeName": "SDK", + "fieldNames": [ + "upc", + "clientLanguages" + ] + }, + { + "typeName": "Subscription", + "fieldNames": [ + "countHob" + ] + } + ], + "childNodes": [ + { + "typeName": "Exercise", + "fieldNames": [ + "employees", + "category" + ] + }, + { + "typeName": "Experience", + "fieldNames": [ + "yearsOfExperience" + ] + }, + { + "typeName": "Flying", + "fieldNames": [ + "employees", + "planeModels", + "yearsOfExperience" + ] + }, + { + "typeName": "Gaming", + "fieldNames": [ + "employees", + "genres", + "name", + "yearsOfExperience" + ] + }, + { + "typeName": "Other", + "fieldNames": [ + "employees", + "name" + ] + }, + { + "typeName": "Programming", + "fieldNames": [ + "employees", + "languages" + ] + }, + { + "typeName": "CountryKey", + "fieldNames": [ + "name" + ] + }, + { + "typeName": "Travelling", + "fieldNames": [ + "employees", + "countriesLived" + ] + }, + { + "typeName": "Hobby", + "fieldNames": [ + "employees" + ] + } + ], + "overrideFieldPathFromAlias": true, + "customGraphql": { + "fetch": { + "url": { + "staticVariableContent": "http://localhost:4003/graphql" + }, + "method": "POST", + "body": {}, + "baseUrl": {}, + "path": {} + }, + "subscription": { + "enabled": true, + "url": { + "staticVariableContent": "http://localhost:4003/graphql" + }, + "protocol": "GRAPHQL_SUBSCRIPTION_PROTOCOL_WS", + "websocketSubprotocol": "GRAPHQL_WEBSOCKET_SUBPROTOCOL_AUTO" + }, + "federation": { + "enabled": true, + "serviceSdl": "extend schema\n@link(url: \"https://specs.apollo.dev/federation/v2.5\", import: [\"@authenticated\", \"@composeDirective\", \"@external\", \"@extends\", \"@inaccessible\", \"@interfaceObject\", \"@override\", \"@provides\", \"@key\", \"@requires\", \"@requiresScopes\", \"@shareable\", \"@tag\"])\n\ndirective @goField(\n forceResolver: Boolean\n name: String\n omittable: Boolean\n) on INPUT_FIELD_DEFINITION | FIELD_DEFINITION\n\nenum ExerciseType {\n CALISTHENICS\n HIKING\n SPORT\n STRENGTH_TRAINING\n}\n\ntype Exercise implements Hobby {\n employees: [Employee!]! @goField(forceResolver: true)\n category: ExerciseType!\n}\n\ninterface Experience {\n yearsOfExperience: Float!\n}\n\ntype Flying implements Experience & Hobby {\n employees: [Employee!]! @goField(forceResolver: true)\n planeModels: [String!]!\n yearsOfExperience: Float!\n}\n\nenum GameGenre {\n ADVENTURE\n BOARD\n FPS\n CARD\n RPG\n ROGUELITE\n SIMULATION\n STRATEGY\n}\n\ntype Gaming implements Experience & Hobby {\n employees: [Employee!]! @goField(forceResolver: true)\n genres: [GameGenre!]!\n name: String!\n yearsOfExperience: Float!\n}\n\ntype Other implements Hobby {\n employees: [Employee!]! @goField(forceResolver: true)\n name: String!\n}\n\nenum ProgrammingLanguage {\n CSHARP\n GO\n RUST\n TYPESCRIPT\n}\n\ntype Programming implements Hobby {\n employees: [Employee!]! @goField(forceResolver: true)\n languages: [ProgrammingLanguage!]!\n}\n\n# Using a nested key field simply because it can showcase potential bug\n# vectors / Federation capabilities.\ntype Country @key(fields: \"key { name }\", resolvable: false) {\n key: CountryKey!\n}\n\ntype CountryKey {\n name: String!\n}\n\ntype Travelling implements Hobby {\n employees: [Employee!]! @goField(forceResolver: true)\n countriesLived: [Country!]!\n}\n\ninterface Hobby {\n employees: [Employee!]! @goField(forceResolver: true)\n}\n\ntype Employee @key(fields: \"id\") {\n id: Int!\n hobbies: [Hobby!]\n}\n\ntype SDK @key(fields: \"upc\") {\n upc: ID!\n clientLanguages: [ProgrammingLanguage!]!\n}\n\ntype Subscription {\n countHob(max: Int! intervalMilliseconds: Int!): Int!\n}" + }, + "upstreamSchema": { + "key": "68291c651cf7b5b50afb169bd12d2cd1ebf4ded6" + } + }, + "requestTimeoutSeconds": "10", + "id": "2", + "keys": [ + { + "typeName": "Country", + "selectionSet": "key { name }", + "disableEntityResolver": true + }, + { + "typeName": "Employee", + "selectionSet": "id" + }, + { + "typeName": "SDK", + "selectionSet": "upc" + } + ] + }, + { + "kind": "GRAPHQL", + "rootNodes": [ + { + "typeName": "Query", + "fieldNames": [ + "productTypes", + "topSecretFederationFacts", + "factTypes" + ] + }, + { + "typeName": "Mutation", + "fieldNames": [ + "addFact" + ] + }, + { + "typeName": "Employee", + "fieldNames": [ + "id", + "products", + "productCount", + "notes" + ] + }, + { + "typeName": "Consultancy", + "fieldNames": [ + "upc", + "name" + ] + }, + { + "typeName": "Cosmo", + "fieldNames": [ + "upc", + "name", + "repositoryURL" + ] + } + ], + "childNodes": [ + { + "typeName": "TopSecretFact", + "fieldNames": [ + "description", + "factType" + ] + }, + { + "typeName": "DirectiveFact", + "fieldNames": [ + "title", + "description", + "factType" + ] + }, + { + "typeName": "EntityFact", + "fieldNames": [ + "title", + "description", + "factType" + ] + }, + { + "typeName": "MiscellaneousFact", + "fieldNames": [ + "title", + "description", + "factType" + ] + }, + { + "typeName": "Documentation", + "fieldNames": [ + "url", + "urls" + ] + } + ], + "overrideFieldPathFromAlias": true, + "customGraphql": { + "fetch": { + "url": { + "staticVariableContent": "http://localhost:4010/graphql" + }, + "method": "POST", + "body": {}, + "baseUrl": {}, + "path": {} + }, + "subscription": { + "enabled": true, + "url": { + "staticVariableContent": "http://localhost:4010/graphql" + }, + "protocol": "GRAPHQL_SUBSCRIPTION_PROTOCOL_WS", + "websocketSubprotocol": "GRAPHQL_WEBSOCKET_SUBPROTOCOL_AUTO" + }, + "federation": { + "enabled": true, + "serviceSdl": "extend schema\n@link(url: \"https://specs.apollo.dev/federation/v2.5\", import: [\"@authenticated\", \"@composeDirective\", \"@external\", \"@extends\", \"@inaccessible\", \"@interfaceObject\", \"@override\", \"@provides\", \"@key\", \"@requires\", \"@requiresScopes\", \"@shareable\", \"@tag\"])\n\nschema {\n query: Queries\n mutation: Mutation\n}\n\n# dwedwedew\n\ntype Queries {\n productTypes: [Products!]!\n topSecretFederationFacts: [TopSecretFact!]! @requiresScopes(scopes: [[\"read:fact\"], [\"read:all\"]])\n factTypes: [TopSecretFactType!]\n}\n\ntype Mutation {\n addFact(fact: TopSecretFactInput!): TopSecretFact! @requiresScopes(scopes: [[\"write:fact\"], [\"write:all\"]])\n}\n\ninput TopSecretFactInput {\n title: String!\n description: FactContent!\n factType: TopSecretFactType!\n}\n\nenum TopSecretFactType @authenticated {\n DIRECTIVE,\n ENTITY,\n MISCELLANEOUS,\n}\n\ninterface TopSecretFact @authenticated {\n description: FactContent!\n factType: TopSecretFactType\n}\n\nscalar FactContent @requiresScopes(scopes: [[\"read:scalar\"], [\"read:all\"]])\n\ntype DirectiveFact implements TopSecretFact @authenticated {\n title: String!\n description: FactContent!\n factType: TopSecretFactType\n}\n\ntype EntityFact implements TopSecretFact @requiresScopes(scopes: [[\"read:entity\"]]){\n title: String!\n description: FactContent!\n factType: TopSecretFactType\n}\n\ntype MiscellaneousFact implements TopSecretFact {\n title: String!\n description: FactContent! @requiresScopes(scopes: [[\"read:miscellaneous\"]])\n factType: TopSecretFactType\n}\n\nenum ProductName {\n CONSULTANCY\n COSMO\n ENGINE\n FINANCE\n HUMAN_RESOURCES\n MARKETING\n SDK\n}\n\ntype Employee @key(fields: \"id\") {\n id: Int!\n products: [ProductName!]!\n productCount: Int!\n notes: String @override(from: \"employees\")\n}\n\nunion Products = Consultancy | Cosmo | Documentation\n\ntype Consultancy @key(fields: \"upc\") {\n upc: ID!\n name: ProductName!\n}\n\ntype Cosmo @key(fields: \"upc\") {\n upc: ID!\n name: ProductName!\n repositoryURL: String!\n}\n\ntype Documentation {\n url(product: ProductName!): String!\n urls(products: [ProductName!]!): [String!]!\n}\n" + }, + "upstreamSchema": { + "key": "f79d19db4b33b04020b6f36030f7cb2cb86662cf" + } + }, + "requestTimeoutSeconds": "10", + "id": "3", + "keys": [ + { + "typeName": "Employee", + "selectionSet": "id" + }, + { + "typeName": "Consultancy", + "selectionSet": "upc" + }, + { + "typeName": "Cosmo", + "selectionSet": "upc" + } + ] + }, + { + "kind": "GRAPHQL", + "rootNodes": [ + { + "typeName": "Query", + "fieldNames": [ + "headerValue", + "initPayloadValue", + "initialPayload", + "delay", + "bigResponse", + "longResponse", + "bigAbstractResponse", + "rootFieldWithListArg", + "rootFieldWithNestedListArg", + "rootFieldWithListOfInputArg", + "rootFieldWithListOfEnumArg", + "rootFieldWithInput", + "floatField", + "sharedThings", + "secret" + ] + }, + { + "typeName": "Subscription", + "fieldNames": [ + "headerValue", + "initPayloadValue", + "initialPayload", + "returnsError" + ] + }, + { + "typeName": "Employee", + "fieldNames": [ + "id", + "fieldThrowsError" + ] + } + ], + "childNodes": [ + { + "typeName": "Secret", + "fieldNames": [ + "value" + ] + }, + { + "typeName": "Thing", + "fieldNames": [ + "b" + ] + }, + { + "typeName": "InputResponse", + "fieldNames": [ + "arg" + ] + }, + { + "typeName": "TimestampedString", + "fieldNames": [ + "value", + "unixTime", + "seq", + "total", + "initialPayload" + ] + }, + { + "typeName": "BigObject", + "fieldNames": [ + "nestedObjects" + ] + }, + { + "typeName": "NestedObject", + "fieldNames": [ + "deeplyNestedObjects" + ] + }, + { + "typeName": "DeeplyNestedObject", + "fieldNames": [ + "aFieldOnDeeplyNestedObject", + "bFieldOnDeeplyNestedObject", + "cFieldOnDeeplyNestedObject", + "dFieldOnDeeplyNestedObject", + "eFieldOnDeeplyNestedObject", + "fFieldOnDeeplyNestedObject", + "gFieldOnDeeplyNestedObject", + "hFieldOnDeeplyNestedObject", + "iFieldOnDeeplyNestedObject", + "jFieldOnDeeplyNestedObject", + "kFieldOnDeeplyNestedObject", + "lFieldOnDeeplyNestedObject", + "mFieldOnDeeplyNestedObject", + "nFieldOnDeeplyNestedObject", + "oFieldOnDeeplyNestedObject", + "pFieldOnDeeplyNestedObject", + "qFieldOnDeeplyNestedObject", + "rFieldOnDeeplyNestedObject", + "sFieldOnDeeplyNestedObject", + "tFieldOnDeeplyNestedObject", + "uFieldOnDeeplyNestedObject", + "vFieldOnDeeplyNestedObject", + "wFieldOnDeeplyNestedObject", + "xFieldOnDeeplyNestedObject", + "yFieldOnDeeplyNestedObject", + "zFieldOnDeeplyNestedObject" + ] + }, + { + "typeName": "ABigObject", + "fieldNames": [ + "aFieldOnABigObject", + "bFieldOnABigObject", + "cFieldOnABigObject", + "dFieldOnABigObject", + "eFieldOnABigObject", + "fFieldOnABigObject", + "gFieldOnABigObject", + "hFieldOnABigObject", + "iFieldOnABigObject", + "jFieldOnABigObject", + "kFieldOnABigObject", + "lFieldOnABigObject", + "mFieldOnABigObject", + "nFieldOnABigObject", + "oFieldOnABigObject", + "pFieldOnABigObject", + "qFieldOnABigObject", + "rFieldOnABigObject", + "sFieldOnABigObject", + "tFieldOnABigObject", + "uFieldOnABigObject", + "vFieldOnABigObject", + "wFieldOnABigObject", + "xFieldOnABigObject", + "yFieldOnABigObject", + "zFieldOnABigObject" + ] + }, + { + "typeName": "BBigObject", + "fieldNames": [ + "aFieldOnBBigObject", + "bFieldOnBBigObject", + "cFieldOnBBigObject", + "dFieldOnBBigObject", + "eFieldOnBBigObject", + "fFieldOnBBigObject", + "gFieldOnBBigObject", + "hFieldOnBBigObject", + "iFieldOnBBigObject", + "jFieldOnBBigObject", + "kFieldOnBBigObject", + "lFieldOnBBigObject", + "mFieldOnBBigObject", + "nFieldOnBBigObject", + "oFieldOnBBigObject", + "pFieldOnBBigObject", + "qFieldOnBBigObject", + "rFieldOnBBigObject", + "sFieldOnBBigObject", + "tFieldOnBBigObject", + "uFieldOnBBigObject", + "vFieldOnBBigObject", + "wFieldOnBBigObject", + "xFieldOnBBigObject", + "yFieldOnBBigObject", + "zFieldOnBBigObject" + ] + }, + { + "typeName": "CBigObject", + "fieldNames": [ + "aFieldOnCBigObject", + "bFieldOnCBigObject", + "cFieldOnCBigObject", + "dFieldOnCBigObject", + "eFieldOnCBigObject", + "fFieldOnCBigObject", + "gFieldOnCBigObject", + "hFieldOnCBigObject", + "iFieldOnCBigObject", + "jFieldOnCBigObject", + "kFieldOnCBigObject", + "lFieldOnCBigObject", + "mFieldOnCBigObject", + "nFieldOnCBigObject", + "oFieldOnCBigObject", + "pFieldOnCBigObject", + "qFieldOnCBigObject", + "rFieldOnCBigObject", + "sFieldOnCBigObject", + "tFieldOnCBigObject", + "uFieldOnCBigObject", + "vFieldOnCBigObject", + "wFieldOnCBigObject", + "xFieldOnCBigObject", + "yFieldOnCBigObject", + "zFieldOnCBigObject" + ] + }, + { + "typeName": "DBigObject", + "fieldNames": [ + "aFieldOnDBigObject", + "bFieldOnDBigObject", + "cFieldOnDBigObject", + "dFieldOnDBigObject", + "eFieldOnDBigObject", + "fFieldOnDBigObject", + "gFieldOnDBigObject", + "hFieldOnDBigObject", + "iFieldOnDBigObject", + "jFieldOnDBigObject", + "kFieldOnDBigObject", + "lFieldOnDBigObject", + "mFieldOnDBigObject", + "nFieldOnDBigObject", + "oFieldOnDBigObject", + "pFieldOnDBigObject", + "qFieldOnDBigObject", + "rFieldOnDBigObject", + "sFieldOnDBigObject", + "tFieldOnDBigObject", + "uFieldOnDBigObject", + "vFieldOnDBigObject", + "wFieldOnDBigObject", + "xFieldOnDBigObject", + "yFieldOnDBigObject", + "zFieldOnDBigObject" + ] + }, + { + "typeName": "EBigObject", + "fieldNames": [ + "aFieldOnEBigObject", + "bFieldOnEBigObject", + "cFieldOnEBigObject", + "dFieldOnEBigObject", + "eFieldOnEBigObject", + "fFieldOnEBigObject", + "gFieldOnEBigObject", + "hFieldOnEBigObject", + "iFieldOnEBigObject", + "jFieldOnEBigObject", + "kFieldOnEBigObject", + "lFieldOnEBigObject", + "mFieldOnEBigObject", + "nFieldOnEBigObject", + "oFieldOnEBigObject", + "pFieldOnEBigObject", + "qFieldOnEBigObject", + "rFieldOnEBigObject", + "sFieldOnEBigObject", + "tFieldOnEBigObject", + "uFieldOnEBigObject", + "vFieldOnEBigObject", + "wFieldOnEBigObject", + "xFieldOnEBigObject", + "yFieldOnEBigObject", + "zFieldOnEBigObject" + ] + }, + { + "typeName": "FBigObject", + "fieldNames": [ + "aFieldOnFBigObject", + "bFieldOnFBigObject", + "cFieldOnFBigObject", + "dFieldOnFBigObject", + "eFieldOnFBigObject", + "fFieldOnFBigObject", + "gFieldOnFBigObject", + "hFieldOnFBigObject", + "iFieldOnFBigObject", + "jFieldOnFBigObject", + "kFieldOnFBigObject", + "lFieldOnFBigObject", + "mFieldOnFBigObject", + "nFieldOnFBigObject", + "oFieldOnFBigObject", + "pFieldOnFBigObject", + "qFieldOnFBigObject", + "rFieldOnFBigObject", + "sFieldOnFBigObject", + "tFieldOnFBigObject", + "uFieldOnFBigObject", + "vFieldOnFBigObject", + "wFieldOnFBigObject", + "xFieldOnFBigObject", + "yFieldOnFBigObject", + "zFieldOnFBigObject" + ] + }, + { + "typeName": "GBigObject", + "fieldNames": [ + "aFieldOnGBigObject", + "bFieldOnGBigObject", + "cFieldOnGBigObject", + "dFieldOnGBigObject", + "eFieldOnGBigObject", + "fFieldOnGBigObject", + "gFieldOnGBigObject", + "hFieldOnGBigObject", + "iFieldOnGBigObject", + "jFieldOnGBigObject", + "kFieldOnGBigObject", + "lFieldOnGBigObject", + "mFieldOnGBigObject", + "nFieldOnGBigObject", + "oFieldOnGBigObject", + "pFieldOnGBigObject", + "qFieldOnGBigObject", + "rFieldOnGBigObject", + "sFieldOnGBigObject", + "tFieldOnGBigObject", + "uFieldOnGBigObject", + "vFieldOnGBigObject", + "wFieldOnGBigObject", + "xFieldOnGBigObject", + "yFieldOnGBigObject", + "zFieldOnGBigObject" + ] + }, + { + "typeName": "HBigObject", + "fieldNames": [ + "aFieldOnHBigObject", + "bFieldOnHBigObject", + "cFieldOnHBigObject", + "dFieldOnHBigObject", + "eFieldOnHBigObject", + "fFieldOnHBigObject", + "gFieldOnHBigObject", + "hFieldOnHBigObject", + "iFieldOnHBigObject", + "jFieldOnHBigObject", + "kFieldOnHBigObject", + "lFieldOnHBigObject", + "mFieldOnHBigObject", + "nFieldOnHBigObject", + "oFieldOnHBigObject", + "pFieldOnHBigObject", + "qFieldOnHBigObject", + "rFieldOnHBigObject", + "sFieldOnHBigObject", + "tFieldOnHBigObject", + "uFieldOnHBigObject", + "vFieldOnHBigObject", + "wFieldOnHBigObject", + "xFieldOnHBigObject", + "yFieldOnHBigObject", + "zFieldOnHBigObject" + ] + }, + { + "typeName": "IBigObject", + "fieldNames": [ + "aFieldOnIBigObject", + "bFieldOnIBigObject", + "cFieldOnIBigObject", + "dFieldOnIBigObject", + "eFieldOnIBigObject", + "fFieldOnIBigObject", + "gFieldOnIBigObject", + "hFieldOnIBigObject", + "iFieldOnIBigObject", + "jFieldOnIBigObject", + "kFieldOnIBigObject", + "lFieldOnIBigObject", + "mFieldOnIBigObject", + "nFieldOnIBigObject", + "oFieldOnIBigObject", + "pFieldOnIBigObject", + "qFieldOnIBigObject", + "rFieldOnIBigObject", + "sFieldOnIBigObject", + "tFieldOnIBigObject", + "uFieldOnIBigObject", + "vFieldOnIBigObject", + "wFieldOnIBigObject", + "xFieldOnIBigObject", + "yFieldOnIBigObject", + "zFieldOnIBigObject" + ] + }, + { + "typeName": "JBigObject", + "fieldNames": [ + "aFieldOnJBigObject", + "bFieldOnJBigObject", + "cFieldOnJBigObject", + "dFieldOnJBigObject", + "eFieldOnJBigObject", + "fFieldOnJBigObject", + "gFieldOnJBigObject", + "hFieldOnJBigObject", + "iFieldOnJBigObject", + "jFieldOnJBigObject", + "kFieldOnJBigObject", + "lFieldOnJBigObject", + "mFieldOnJBigObject", + "nFieldOnJBigObject", + "oFieldOnJBigObject", + "pFieldOnJBigObject", + "qFieldOnJBigObject", + "rFieldOnJBigObject", + "sFieldOnJBigObject", + "tFieldOnJBigObject", + "uFieldOnJBigObject", + "vFieldOnJBigObject", + "wFieldOnJBigObject", + "xFieldOnJBigObject", + "yFieldOnJBigObject", + "zFieldOnJBigObject" + ] + }, + { + "typeName": "KBigObject", + "fieldNames": [ + "aFieldOnKBigObject", + "bFieldOnKBigObject", + "cFieldOnKBigObject", + "dFieldOnKBigObject", + "eFieldOnKBigObject", + "fFieldOnKBigObject", + "gFieldOnKBigObject", + "hFieldOnKBigObject", + "iFieldOnKBigObject", + "jFieldOnKBigObject", + "kFieldOnKBigObject", + "lFieldOnKBigObject", + "mFieldOnKBigObject", + "nFieldOnKBigObject", + "oFieldOnKBigObject", + "pFieldOnKBigObject", + "qFieldOnKBigObject", + "rFieldOnKBigObject", + "sFieldOnKBigObject", + "tFieldOnKBigObject", + "uFieldOnKBigObject", + "vFieldOnKBigObject", + "wFieldOnKBigObject", + "xFieldOnKBigObject", + "yFieldOnKBigObject", + "zFieldOnKBigObject" + ] + }, + { + "typeName": "LBigObject", + "fieldNames": [ + "aFieldOnLBigObject", + "bFieldOnLBigObject", + "cFieldOnLBigObject", + "dFieldOnLBigObject", + "eFieldOnLBigObject", + "fFieldOnLBigObject", + "gFieldOnLBigObject", + "hFieldOnLBigObject", + "iFieldOnLBigObject", + "jFieldOnLBigObject", + "kFieldOnLBigObject", + "lFieldOnLBigObject", + "mFieldOnLBigObject", + "nFieldOnLBigObject", + "oFieldOnLBigObject", + "pFieldOnLBigObject", + "qFieldOnLBigObject", + "rFieldOnLBigObject", + "sFieldOnLBigObject", + "tFieldOnLBigObject", + "uFieldOnLBigObject", + "vFieldOnLBigObject", + "wFieldOnLBigObject", + "xFieldOnLBigObject", + "yFieldOnLBigObject", + "zFieldOnLBigObject" + ] + }, + { + "typeName": "MBigObject", + "fieldNames": [ + "aFieldOnMBigObject", + "bFieldOnMBigObject", + "cFieldOnMBigObject", + "dFieldOnMBigObject", + "eFieldOnMBigObject", + "fFieldOnMBigObject", + "gFieldOnMBigObject", + "hFieldOnMBigObject", + "iFieldOnMBigObject", + "jFieldOnMBigObject", + "kFieldOnMBigObject", + "lFieldOnMBigObject", + "mFieldOnMBigObject", + "nFieldOnMBigObject", + "oFieldOnMBigObject", + "pFieldOnMBigObject", + "qFieldOnMBigObject", + "rFieldOnMBigObject", + "sFieldOnMBigObject", + "tFieldOnMBigObject", + "uFieldOnMBigObject", + "vFieldOnMBigObject", + "wFieldOnMBigObject", + "xFieldOnMBigObject", + "yFieldOnMBigObject", + "zFieldOnMBigObject" + ] + }, + { + "typeName": "NBigObject", + "fieldNames": [ + "aFieldOnNBigObject", + "bFieldOnNBigObject", + "cFieldOnNBigObject", + "dFieldOnNBigObject", + "eFieldOnNBigObject", + "fFieldOnNBigObject", + "gFieldOnNBigObject", + "hFieldOnNBigObject", + "iFieldOnNBigObject", + "jFieldOnNBigObject", + "kFieldOnNBigObject", + "lFieldOnNBigObject", + "mFieldOnNBigObject", + "nFieldOnNBigObject", + "oFieldOnNBigObject", + "pFieldOnNBigObject", + "qFieldOnNBigObject", + "rFieldOnNBigObject", + "sFieldOnNBigObject", + "tFieldOnNBigObject", + "uFieldOnNBigObject", + "vFieldOnNBigObject", + "wFieldOnNBigObject", + "xFieldOnNBigObject", + "yFieldOnNBigObject", + "zFieldOnNBigObject" + ] + }, + { + "typeName": "OBigObject", + "fieldNames": [ + "aFieldOnOBigObject", + "bFieldOnOBigObject", + "cFieldOnOBigObject", + "dFieldOnOBigObject", + "eFieldOnOBigObject", + "fFieldOnOBigObject", + "gFieldOnOBigObject", + "hFieldOnOBigObject", + "iFieldOnOBigObject", + "jFieldOnOBigObject", + "kFieldOnOBigObject", + "lFieldOnOBigObject", + "mFieldOnOBigObject", + "nFieldOnOBigObject", + "oFieldOnOBigObject", + "pFieldOnOBigObject", + "qFieldOnOBigObject", + "rFieldOnOBigObject", + "sFieldOnOBigObject", + "tFieldOnOBigObject", + "uFieldOnOBigObject", + "vFieldOnOBigObject", + "wFieldOnOBigObject", + "xFieldOnOBigObject", + "yFieldOnOBigObject", + "zFieldOnOBigObject" + ] + }, + { + "typeName": "PBigObject", + "fieldNames": [ + "aFieldOnPBigObject", + "bFieldOnPBigObject", + "cFieldOnPBigObject", + "dFieldOnPBigObject", + "eFieldOnPBigObject", + "fFieldOnPBigObject", + "gFieldOnPBigObject", + "hFieldOnPBigObject", + "iFieldOnPBigObject", + "jFieldOnPBigObject", + "kFieldOnPBigObject", + "lFieldOnPBigObject", + "mFieldOnPBigObject", + "nFieldOnPBigObject", + "oFieldOnPBigObject", + "pFieldOnPBigObject", + "qFieldOnPBigObject", + "rFieldOnPBigObject", + "sFieldOnPBigObject", + "tFieldOnPBigObject", + "uFieldOnPBigObject", + "vFieldOnPBigObject", + "wFieldOnPBigObject", + "xFieldOnPBigObject", + "yFieldOnPBigObject", + "zFieldOnPBigObject" + ] + }, + { + "typeName": "QBigObject", + "fieldNames": [ + "aFieldOnQBigObject", + "bFieldOnQBigObject", + "cFieldOnQBigObject", + "dFieldOnQBigObject", + "eFieldOnQBigObject", + "fFieldOnQBigObject", + "gFieldOnQBigObject", + "hFieldOnQBigObject", + "iFieldOnQBigObject", + "jFieldOnQBigObject", + "kFieldOnQBigObject", + "lFieldOnQBigObject", + "mFieldOnQBigObject", + "nFieldOnQBigObject", + "oFieldOnQBigObject", + "pFieldOnQBigObject", + "qFieldOnQBigObject", + "rFieldOnQBigObject", + "sFieldOnQBigObject", + "tFieldOnQBigObject", + "uFieldOnQBigObject", + "vFieldOnQBigObject", + "wFieldOnQBigObject", + "xFieldOnQBigObject", + "yFieldOnQBigObject", + "zFieldOnQBigObject" + ] + }, + { + "typeName": "RBigObject", + "fieldNames": [ + "aFieldOnRBigObject", + "bFieldOnRBigObject", + "cFieldOnRBigObject", + "dFieldOnRBigObject", + "eFieldOnRBigObject", + "fFieldOnRBigObject", + "gFieldOnRBigObject", + "hFieldOnRBigObject", + "iFieldOnRBigObject", + "jFieldOnRBigObject", + "kFieldOnRBigObject", + "lFieldOnRBigObject", + "mFieldOnRBigObject", + "nFieldOnRBigObject", + "oFieldOnRBigObject", + "pFieldOnRBigObject", + "qFieldOnRBigObject", + "rFieldOnRBigObject", + "sFieldOnRBigObject", + "tFieldOnRBigObject", + "uFieldOnRBigObject", + "vFieldOnRBigObject", + "wFieldOnRBigObject", + "xFieldOnRBigObject", + "yFieldOnRBigObject", + "zFieldOnRBigObject" + ] + }, + { + "typeName": "SBigObject", + "fieldNames": [ + "aFieldOnSBigObject", + "bFieldOnSBigObject", + "cFieldOnSBigObject", + "dFieldOnSBigObject", + "eFieldOnSBigObject", + "fFieldOnSBigObject", + "gFieldOnSBigObject", + "hFieldOnSBigObject", + "iFieldOnSBigObject", + "jFieldOnSBigObject", + "kFieldOnSBigObject", + "lFieldOnSBigObject", + "mFieldOnSBigObject", + "nFieldOnSBigObject", + "oFieldOnSBigObject", + "pFieldOnSBigObject", + "qFieldOnSBigObject", + "rFieldOnSBigObject", + "sFieldOnSBigObject", + "tFieldOnSBigObject", + "uFieldOnSBigObject", + "vFieldOnSBigObject", + "wFieldOnSBigObject", + "xFieldOnSBigObject", + "yFieldOnSBigObject", + "zFieldOnSBigObject" + ] + }, + { + "typeName": "TBigObject", + "fieldNames": [ + "aFieldOnTBigObject", + "bFieldOnTBigObject", + "cFieldOnTBigObject", + "dFieldOnTBigObject", + "eFieldOnTBigObject", + "fFieldOnTBigObject", + "gFieldOnTBigObject", + "hFieldOnTBigObject", + "iFieldOnTBigObject", + "jFieldOnTBigObject", + "kFieldOnTBigObject", + "lFieldOnTBigObject", + "mFieldOnTBigObject", + "nFieldOnTBigObject", + "oFieldOnTBigObject", + "pFieldOnTBigObject", + "qFieldOnTBigObject", + "rFieldOnTBigObject", + "sFieldOnTBigObject", + "tFieldOnTBigObject", + "uFieldOnTBigObject", + "vFieldOnTBigObject", + "wFieldOnTBigObject", + "xFieldOnTBigObject", + "yFieldOnTBigObject", + "zFieldOnTBigObject" + ] + }, + { + "typeName": "UBigObject", + "fieldNames": [ + "aFieldOnUBigObject", + "bFieldOnUBigObject", + "cFieldOnUBigObject", + "dFieldOnUBigObject", + "eFieldOnUBigObject", + "fFieldOnUBigObject", + "gFieldOnUBigObject", + "hFieldOnUBigObject", + "iFieldOnUBigObject", + "jFieldOnUBigObject", + "kFieldOnUBigObject", + "lFieldOnUBigObject", + "mFieldOnUBigObject", + "nFieldOnUBigObject", + "oFieldOnUBigObject", + "pFieldOnUBigObject", + "qFieldOnUBigObject", + "rFieldOnUBigObject", + "sFieldOnUBigObject", + "tFieldOnUBigObject", + "uFieldOnUBigObject", + "vFieldOnUBigObject", + "wFieldOnUBigObject", + "xFieldOnUBigObject", + "yFieldOnUBigObject", + "zFieldOnUBigObject" + ] + }, + { + "typeName": "VBigObject", + "fieldNames": [ + "aFieldOnVBigObject", + "bFieldOnVBigObject", + "cFieldOnVBigObject", + "dFieldOnVBigObject", + "eFieldOnVBigObject", + "fFieldOnVBigObject", + "gFieldOnVBigObject", + "hFieldOnVBigObject", + "iFieldOnVBigObject", + "jFieldOnVBigObject", + "kFieldOnVBigObject", + "lFieldOnVBigObject", + "mFieldOnVBigObject", + "nFieldOnVBigObject", + "oFieldOnVBigObject", + "pFieldOnVBigObject", + "qFieldOnVBigObject", + "rFieldOnVBigObject", + "sFieldOnVBigObject", + "tFieldOnVBigObject", + "uFieldOnVBigObject", + "vFieldOnVBigObject", + "wFieldOnVBigObject", + "xFieldOnVBigObject", + "yFieldOnVBigObject", + "zFieldOnVBigObject" + ] + }, + { + "typeName": "WBigObject", + "fieldNames": [ + "aFieldOnWBigObject", + "bFieldOnWBigObject", + "cFieldOnWBigObject", + "dFieldOnWBigObject", + "eFieldOnWBigObject", + "fFieldOnWBigObject", + "gFieldOnWBigObject", + "hFieldOnWBigObject", + "iFieldOnWBigObject", + "jFieldOnWBigObject", + "kFieldOnWBigObject", + "lFieldOnWBigObject", + "mFieldOnWBigObject", + "nFieldOnWBigObject", + "oFieldOnWBigObject", + "pFieldOnWBigObject", + "qFieldOnWBigObject", + "rFieldOnWBigObject", + "sFieldOnWBigObject", + "tFieldOnWBigObject", + "uFieldOnWBigObject", + "vFieldOnWBigObject", + "wFieldOnWBigObject", + "xFieldOnWBigObject", + "yFieldOnWBigObject", + "zFieldOnWBigObject" + ] + }, + { + "typeName": "XBigObject", + "fieldNames": [ + "aFieldOnXBigObject", + "bFieldOnXBigObject", + "cFieldOnXBigObject", + "dFieldOnXBigObject", + "eFieldOnXBigObject", + "fFieldOnXBigObject", + "gFieldOnXBigObject", + "hFieldOnXBigObject", + "iFieldOnXBigObject", + "jFieldOnXBigObject", + "kFieldOnXBigObject", + "lFieldOnXBigObject", + "mFieldOnXBigObject", + "nFieldOnXBigObject", + "oFieldOnXBigObject", + "pFieldOnXBigObject", + "qFieldOnXBigObject", + "rFieldOnXBigObject", + "sFieldOnXBigObject", + "tFieldOnXBigObject", + "uFieldOnXBigObject", + "vFieldOnXBigObject", + "wFieldOnXBigObject", + "xFieldOnXBigObject", + "yFieldOnXBigObject", + "zFieldOnXBigObject" + ] + }, + { + "typeName": "YBigObject", + "fieldNames": [ + "aFieldOnYBigObject", + "bFieldOnYBigObject", + "cFieldOnYBigObject", + "dFieldOnYBigObject", + "eFieldOnYBigObject", + "fFieldOnYBigObject", + "gFieldOnYBigObject", + "hFieldOnYBigObject", + "iFieldOnYBigObject", + "jFieldOnYBigObject", + "kFieldOnYBigObject", + "lFieldOnYBigObject", + "mFieldOnYBigObject", + "nFieldOnYBigObject", + "oFieldOnYBigObject", + "pFieldOnYBigObject", + "qFieldOnYBigObject", + "rFieldOnYBigObject", + "sFieldOnYBigObject", + "tFieldOnYBigObject", + "uFieldOnYBigObject", + "vFieldOnYBigObject", + "wFieldOnYBigObject", + "xFieldOnYBigObject", + "yFieldOnYBigObject", + "zFieldOnYBigObject" + ] + }, + { + "typeName": "ZBigObject", + "fieldNames": [ + "aFieldOnZBigObject", + "bFieldOnZBigObject", + "cFieldOnZBigObject", + "dFieldOnZBigObject", + "eFieldOnZBigObject", + "fFieldOnZBigObject", + "gFieldOnZBigObject", + "hFieldOnZBigObject", + "iFieldOnZBigObject", + "jFieldOnZBigObject", + "kFieldOnZBigObject", + "lFieldOnZBigObject", + "mFieldOnZBigObject", + "nFieldOnZBigObject", + "oFieldOnZBigObject", + "pFieldOnZBigObject", + "qFieldOnZBigObject", + "rFieldOnZBigObject", + "sFieldOnZBigObject", + "tFieldOnZBigObject", + "uFieldOnZBigObject", + "vFieldOnZBigObject", + "wFieldOnZBigObject", + "xFieldOnZBigObject", + "yFieldOnZBigObject", + "zFieldOnZBigObject" + ] + } + ], + "overrideFieldPathFromAlias": true, + "customGraphql": { + "fetch": { + "url": { + "staticVariableContent": "http://localhost:4006/graphql" + }, + "method": "POST", + "body": {}, + "baseUrl": {}, + "path": {} + }, + "subscription": { + "enabled": true, + "url": { + "staticVariableContent": "http://localhost:4006/graphql" + }, + "protocol": "GRAPHQL_SUBSCRIPTION_PROTOCOL_WS", + "websocketSubprotocol": "GRAPHQL_WEBSOCKET_SUBPROTOCOL_AUTO" + }, + "federation": { + "enabled": true, + "serviceSdl": "extend schema\n@link(url: \"https://specs.apollo.dev/federation/v2.5\", import: [\"@authenticated\", \"@composeDirective\", \"@external\", \"@extends\", \"@inaccessible\", \"@interfaceObject\", \"@override\", \"@provides\", \"@key\", \"@requires\", \"@requiresScopes\", \"@shareable\", \"@tag\"])\n\ntype Query {\n \"Returns the value of the received HTTP header.\"\n headerValue(name: String!): String!\n \"Returns the value of the given key in the WS initial payload.\"\n initPayloadValue(key: String!): String!\n initialPayload: Map\n \"Returns response after the given delay\"\n delay(response: String!, ms: Int!): String!\n\n bigResponse(\n artificialDelay: Int! = 0\n bigObjects: Int! = 100\n nestedObjects: Int! = 100\n deeplyNestedObjects: Int! = 100\n ): [BigObject!]!\n\n longResponse(artificialDelay: Int! = 0, bytes: Int!): String\n\n bigAbstractResponse: BigAbstractResponse\n\n rootFieldWithListArg(arg: [String!]!): [String!]!\n rootFieldWithNestedListArg(arg: [[String!]!]!): [[String!]!]!\n rootFieldWithListOfInputArg(arg: [InputType!]!): [InputResponse!]!\n rootFieldWithListOfEnumArg(arg: [EnumType!]!): [EnumType!]!\n rootFieldWithInput(arg: InputArg!): String!\n\n floatField(arg: Float): Float\n\n sharedThings(numOfA: Int! numOfB: Int!): [Thing!]! @shareable\n\n secret: Secret @requiresScopes(scopes: [[\"read:secret\"]])\n}\n\ntype Secret {\n value: String\n}\n\ntype Thing @shareable {\n b: String!\n}\n\ninput InputArg {\n enums: [EnumType!]\n enum: EnumType\n string: String\n strings: [String!]\n}\n\nenum EnumType {\n A\n B\n C\n}\n\ninput InputType {\n arg: String!\n}\n\ntype InputResponse {\n arg: String!\n}\n\nscalar Map\n\ntype TimestampedString {\n \"The value of the string.\"\n value: String!\n \"The timestamp when the response was generated.\"\n unixTime: Int!\n \"Sequence number\"\n seq: Int!\n \"Total number of responses to be sent\"\n total: Int!\n initialPayload: Map\n}\n\ntype Subscription {\n \"Returns a stream with the value of the received HTTP header.\"\n headerValue(name: String!, repeat: Int): TimestampedString!\n \"Returns a stream with the value of value of the given key in the WS initial payload.\"\n initPayloadValue(key: String!, repeat: Int): TimestampedString!\n \"Returns a stream with the value of the WS initial payload.\"\n initialPayload(repeat: Int): Map\n returnsError: String\n}\n\ntype Employee @key(fields: \"id\") {\n id: Int!\n fieldThrowsError: String\n}\n\ntype BigObject {\n nestedObjects: [NestedObject!]!\n}\n\ntype NestedObject {\n deeplyNestedObjects: [DeeplyNestedObject!]!\n}\n\ntype DeeplyNestedObject {\n aFieldOnDeeplyNestedObject: String!\n bFieldOnDeeplyNestedObject: Int!\n cFieldOnDeeplyNestedObject: Boolean!\n dFieldOnDeeplyNestedObject: Float!\n eFieldOnDeeplyNestedObject: String!\n fFieldOnDeeplyNestedObject: Int!\n gFieldOnDeeplyNestedObject: Boolean!\n hFieldOnDeeplyNestedObject: Float!\n iFieldOnDeeplyNestedObject: String!\n jFieldOnDeeplyNestedObject: Int!\n kFieldOnDeeplyNestedObject: Boolean!\n lFieldOnDeeplyNestedObject: Float!\n mFieldOnDeeplyNestedObject: String!\n nFieldOnDeeplyNestedObject: Int!\n oFieldOnDeeplyNestedObject: Boolean!\n pFieldOnDeeplyNestedObject: Float!\n qFieldOnDeeplyNestedObject: String!\n rFieldOnDeeplyNestedObject: Int!\n sFieldOnDeeplyNestedObject: Boolean!\n tFieldOnDeeplyNestedObject: Float!\n uFieldOnDeeplyNestedObject: String!\n vFieldOnDeeplyNestedObject: Int!\n wFieldOnDeeplyNestedObject: Boolean!\n xFieldOnDeeplyNestedObject: Float!\n yFieldOnDeeplyNestedObject: String!\n zFieldOnDeeplyNestedObject: Int!\n}\n\nunion BigAbstractResponse = ABigObject | BBigObject | CBigObject | DBigObject | EBigObject | FBigObject | GBigObject | HBigObject | IBigObject | JBigObject | KBigObject | LBigObject | MBigObject | NBigObject | OBigObject | PBigObject | QBigObject | RBigObject | SBigObject | TBigObject | UBigObject | VBigObject | WBigObject | XBigObject | YBigObject | ZBigObject\n\ntype ABigObject {\n aFieldOnABigObject: String!\n bFieldOnABigObject: Int!\n cFieldOnABigObject: Boolean!\n dFieldOnABigObject: Float!\n eFieldOnABigObject: String!\n fFieldOnABigObject: Int!\n gFieldOnABigObject: Boolean!\n hFieldOnABigObject: Float!\n iFieldOnABigObject: String!\n jFieldOnABigObject: Int!\n kFieldOnABigObject: Boolean!\n lFieldOnABigObject: Float!\n mFieldOnABigObject: String!\n nFieldOnABigObject: Int!\n oFieldOnABigObject: Boolean!\n pFieldOnABigObject: Float!\n qFieldOnABigObject: String!\n rFieldOnABigObject: Int!\n sFieldOnABigObject: Boolean!\n tFieldOnABigObject: Float!\n uFieldOnABigObject: String!\n vFieldOnABigObject: Int!\n wFieldOnABigObject: Boolean!\n xFieldOnABigObject: Float!\n yFieldOnABigObject: String!\n zFieldOnABigObject: Int!\n}\n\ntype BBigObject {\n aFieldOnBBigObject: String!\n bFieldOnBBigObject: Int!\n cFieldOnBBigObject: Boolean!\n dFieldOnBBigObject: Float!\n eFieldOnBBigObject: String!\n fFieldOnBBigObject: Int!\n gFieldOnBBigObject: Boolean!\n hFieldOnBBigObject: Float!\n iFieldOnBBigObject: String!\n jFieldOnBBigObject: Int!\n kFieldOnBBigObject: Boolean!\n lFieldOnBBigObject: Float!\n mFieldOnBBigObject: String!\n nFieldOnBBigObject: Int!\n oFieldOnBBigObject: Boolean!\n pFieldOnBBigObject: Float!\n qFieldOnBBigObject: String!\n rFieldOnBBigObject: Int!\n sFieldOnBBigObject: Boolean!\n tFieldOnBBigObject: Float!\n uFieldOnBBigObject: String!\n vFieldOnBBigObject: Int!\n wFieldOnBBigObject: Boolean!\n xFieldOnBBigObject: Float!\n yFieldOnBBigObject: String!\n zFieldOnBBigObject: Int!\n}\n\ntype CBigObject {\n aFieldOnCBigObject: String!\n bFieldOnCBigObject: Int!\n cFieldOnCBigObject: Boolean!\n dFieldOnCBigObject: Float!\n eFieldOnCBigObject: String!\n fFieldOnCBigObject: Int!\n gFieldOnCBigObject: Boolean!\n hFieldOnCBigObject: Float!\n iFieldOnCBigObject: String!\n jFieldOnCBigObject: Int!\n kFieldOnCBigObject: Boolean!\n lFieldOnCBigObject: Float!\n mFieldOnCBigObject: String!\n nFieldOnCBigObject: Int!\n oFieldOnCBigObject: Boolean!\n pFieldOnCBigObject: Float!\n qFieldOnCBigObject: String!\n rFieldOnCBigObject: Int!\n sFieldOnCBigObject: Boolean!\n tFieldOnCBigObject: Float!\n uFieldOnCBigObject: String!\n vFieldOnCBigObject: Int!\n wFieldOnCBigObject: Boolean!\n xFieldOnCBigObject: Float!\n yFieldOnCBigObject: String!\n zFieldOnCBigObject: Int!\n}\n\ntype DBigObject {\n aFieldOnDBigObject: String!\n bFieldOnDBigObject: Int!\n cFieldOnDBigObject: Boolean!\n dFieldOnDBigObject: Float!\n eFieldOnDBigObject: String!\n fFieldOnDBigObject: Int!\n gFieldOnDBigObject: Boolean!\n hFieldOnDBigObject: Float!\n iFieldOnDBigObject: String!\n jFieldOnDBigObject: Int!\n kFieldOnDBigObject: Boolean!\n lFieldOnDBigObject: Float!\n mFieldOnDBigObject: String!\n nFieldOnDBigObject: Int!\n oFieldOnDBigObject: Boolean!\n pFieldOnDBigObject: Float!\n qFieldOnDBigObject: String!\n rFieldOnDBigObject: Int!\n sFieldOnDBigObject: Boolean!\n tFieldOnDBigObject: Float!\n uFieldOnDBigObject: String!\n vFieldOnDBigObject: Int!\n wFieldOnDBigObject: Boolean!\n xFieldOnDBigObject: Float!\n yFieldOnDBigObject: String!\n zFieldOnDBigObject: Int!\n}\n\ntype EBigObject {\n aFieldOnEBigObject: String!\n bFieldOnEBigObject: Int!\n cFieldOnEBigObject: Boolean!\n dFieldOnEBigObject: Float!\n eFieldOnEBigObject: String!\n fFieldOnEBigObject: Int!\n gFieldOnEBigObject: Boolean!\n hFieldOnEBigObject: Float!\n iFieldOnEBigObject: String!\n jFieldOnEBigObject: Int!\n kFieldOnEBigObject: Boolean!\n lFieldOnEBigObject: Float!\n mFieldOnEBigObject: String!\n nFieldOnEBigObject: Int!\n oFieldOnEBigObject: Boolean!\n pFieldOnEBigObject: Float!\n qFieldOnEBigObject: String!\n rFieldOnEBigObject: Int!\n sFieldOnEBigObject: Boolean!\n tFieldOnEBigObject: Float!\n uFieldOnEBigObject: String!\n vFieldOnEBigObject: Int!\n wFieldOnEBigObject: Boolean!\n xFieldOnEBigObject: Float!\n yFieldOnEBigObject: String!\n zFieldOnEBigObject: Int!\n}\n\ntype FBigObject {\n aFieldOnFBigObject: String!\n bFieldOnFBigObject: Int!\n cFieldOnFBigObject: Boolean!\n dFieldOnFBigObject: Float!\n eFieldOnFBigObject: String!\n fFieldOnFBigObject: Int!\n gFieldOnFBigObject: Boolean!\n hFieldOnFBigObject: Float!\n iFieldOnFBigObject: String!\n jFieldOnFBigObject: Int!\n kFieldOnFBigObject: Boolean!\n lFieldOnFBigObject: Float!\n mFieldOnFBigObject: String!\n nFieldOnFBigObject: Int!\n oFieldOnFBigObject: Boolean!\n pFieldOnFBigObject: Float!\n qFieldOnFBigObject: String!\n rFieldOnFBigObject: Int!\n sFieldOnFBigObject: Boolean!\n tFieldOnFBigObject: Float!\n uFieldOnFBigObject: String!\n vFieldOnFBigObject: Int!\n wFieldOnFBigObject: Boolean!\n xFieldOnFBigObject: Float!\n yFieldOnFBigObject: String!\n zFieldOnFBigObject: Int!\n}\n\ntype GBigObject {\n aFieldOnGBigObject: String!\n bFieldOnGBigObject: Int!\n cFieldOnGBigObject: Boolean!\n dFieldOnGBigObject: Float!\n eFieldOnGBigObject: String!\n fFieldOnGBigObject: Int!\n gFieldOnGBigObject: Boolean!\n hFieldOnGBigObject: Float!\n iFieldOnGBigObject: String!\n jFieldOnGBigObject: Int!\n kFieldOnGBigObject: Boolean!\n lFieldOnGBigObject: Float!\n mFieldOnGBigObject: String!\n nFieldOnGBigObject: Int!\n oFieldOnGBigObject: Boolean!\n pFieldOnGBigObject: Float!\n qFieldOnGBigObject: String!\n rFieldOnGBigObject: Int!\n sFieldOnGBigObject: Boolean!\n tFieldOnGBigObject: Float!\n uFieldOnGBigObject: String!\n vFieldOnGBigObject: Int!\n wFieldOnGBigObject: Boolean!\n xFieldOnGBigObject: Float!\n yFieldOnGBigObject: String!\n zFieldOnGBigObject: Int!\n}\n\ntype HBigObject {\n aFieldOnHBigObject: String!\n bFieldOnHBigObject: Int!\n cFieldOnHBigObject: Boolean!\n dFieldOnHBigObject: Float!\n eFieldOnHBigObject: String!\n fFieldOnHBigObject: Int!\n gFieldOnHBigObject: Boolean!\n hFieldOnHBigObject: Float!\n iFieldOnHBigObject: String!\n jFieldOnHBigObject: Int!\n kFieldOnHBigObject: Boolean!\n lFieldOnHBigObject: Float!\n mFieldOnHBigObject: String!\n nFieldOnHBigObject: Int!\n oFieldOnHBigObject: Boolean!\n pFieldOnHBigObject: Float!\n qFieldOnHBigObject: String!\n rFieldOnHBigObject: Int!\n sFieldOnHBigObject: Boolean!\n tFieldOnHBigObject: Float!\n uFieldOnHBigObject: String!\n vFieldOnHBigObject: Int!\n wFieldOnHBigObject: Boolean!\n xFieldOnHBigObject: Float!\n yFieldOnHBigObject: String!\n zFieldOnHBigObject: Int!\n}\n\ntype IBigObject {\n aFieldOnIBigObject: String!\n bFieldOnIBigObject: Int!\n cFieldOnIBigObject: Boolean!\n dFieldOnIBigObject: Float!\n eFieldOnIBigObject: String!\n fFieldOnIBigObject: Int!\n gFieldOnIBigObject: Boolean!\n hFieldOnIBigObject: Float!\n iFieldOnIBigObject: String!\n jFieldOnIBigObject: Int!\n kFieldOnIBigObject: Boolean!\n lFieldOnIBigObject: Float!\n mFieldOnIBigObject: String!\n nFieldOnIBigObject: Int!\n oFieldOnIBigObject: Boolean!\n pFieldOnIBigObject: Float!\n qFieldOnIBigObject: String!\n rFieldOnIBigObject: Int!\n sFieldOnIBigObject: Boolean!\n tFieldOnIBigObject: Float!\n uFieldOnIBigObject: String!\n vFieldOnIBigObject: Int!\n wFieldOnIBigObject: Boolean!\n xFieldOnIBigObject: Float!\n yFieldOnIBigObject: String!\n zFieldOnIBigObject: Int!\n}\n\ntype JBigObject {\n aFieldOnJBigObject: String!\n bFieldOnJBigObject: Int!\n cFieldOnJBigObject: Boolean!\n dFieldOnJBigObject: Float!\n eFieldOnJBigObject: String!\n fFieldOnJBigObject: Int!\n gFieldOnJBigObject: Boolean!\n hFieldOnJBigObject: Float!\n iFieldOnJBigObject: String!\n jFieldOnJBigObject: Int!\n kFieldOnJBigObject: Boolean!\n lFieldOnJBigObject: Float!\n mFieldOnJBigObject: String!\n nFieldOnJBigObject: Int!\n oFieldOnJBigObject: Boolean!\n pFieldOnJBigObject: Float!\n qFieldOnJBigObject: String!\n rFieldOnJBigObject: Int!\n sFieldOnJBigObject: Boolean!\n tFieldOnJBigObject: Float!\n uFieldOnJBigObject: String!\n vFieldOnJBigObject: Int!\n wFieldOnJBigObject: Boolean!\n xFieldOnJBigObject: Float!\n yFieldOnJBigObject: String!\n zFieldOnJBigObject: Int!\n}\n\ntype KBigObject {\n aFieldOnKBigObject: String!\n bFieldOnKBigObject: Int!\n cFieldOnKBigObject: Boolean!\n dFieldOnKBigObject: Float!\n eFieldOnKBigObject: String!\n fFieldOnKBigObject: Int!\n gFieldOnKBigObject: Boolean!\n hFieldOnKBigObject: Float!\n iFieldOnKBigObject: String!\n jFieldOnKBigObject: Int!\n kFieldOnKBigObject: Boolean!\n lFieldOnKBigObject: Float!\n mFieldOnKBigObject: String!\n nFieldOnKBigObject: Int!\n oFieldOnKBigObject: Boolean!\n pFieldOnKBigObject: Float!\n qFieldOnKBigObject: String!\n rFieldOnKBigObject: Int!\n sFieldOnKBigObject: Boolean!\n tFieldOnKBigObject: Float!\n uFieldOnKBigObject: String!\n vFieldOnKBigObject: Int!\n wFieldOnKBigObject: Boolean!\n xFieldOnKBigObject: Float!\n yFieldOnKBigObject: String!\n zFieldOnKBigObject: Int!\n}\n\ntype LBigObject {\n aFieldOnLBigObject: String!\n bFieldOnLBigObject: Int!\n cFieldOnLBigObject: Boolean!\n dFieldOnLBigObject: Float!\n eFieldOnLBigObject: String!\n fFieldOnLBigObject: Int!\n gFieldOnLBigObject: Boolean!\n hFieldOnLBigObject: Float!\n iFieldOnLBigObject: String!\n jFieldOnLBigObject: Int!\n kFieldOnLBigObject: Boolean!\n lFieldOnLBigObject: Float!\n mFieldOnLBigObject: String!\n nFieldOnLBigObject: Int!\n oFieldOnLBigObject: Boolean!\n pFieldOnLBigObject: Float!\n qFieldOnLBigObject: String!\n rFieldOnLBigObject: Int!\n sFieldOnLBigObject: Boolean!\n tFieldOnLBigObject: Float!\n uFieldOnLBigObject: String!\n vFieldOnLBigObject: Int!\n wFieldOnLBigObject: Boolean!\n xFieldOnLBigObject: Float!\n yFieldOnLBigObject: String!\n zFieldOnLBigObject: Int!\n}\n\ntype MBigObject {\n aFieldOnMBigObject: String!\n bFieldOnMBigObject: Int!\n cFieldOnMBigObject: Boolean!\n dFieldOnMBigObject: Float!\n eFieldOnMBigObject: String!\n fFieldOnMBigObject: Int!\n gFieldOnMBigObject: Boolean!\n hFieldOnMBigObject: Float!\n iFieldOnMBigObject: String!\n jFieldOnMBigObject: Int!\n kFieldOnMBigObject: Boolean!\n lFieldOnMBigObject: Float!\n mFieldOnMBigObject: String!\n nFieldOnMBigObject: Int!\n oFieldOnMBigObject: Boolean!\n pFieldOnMBigObject: Float!\n qFieldOnMBigObject: String!\n rFieldOnMBigObject: Int!\n sFieldOnMBigObject: Boolean!\n tFieldOnMBigObject: Float!\n uFieldOnMBigObject: String!\n vFieldOnMBigObject: Int!\n wFieldOnMBigObject: Boolean!\n xFieldOnMBigObject: Float!\n yFieldOnMBigObject: String!\n zFieldOnMBigObject: Int!\n}\n\ntype NBigObject {\n aFieldOnNBigObject: String!\n bFieldOnNBigObject: Int!\n cFieldOnNBigObject: Boolean!\n dFieldOnNBigObject: Float!\n eFieldOnNBigObject: String!\n fFieldOnNBigObject: Int!\n gFieldOnNBigObject: Boolean!\n hFieldOnNBigObject: Float!\n iFieldOnNBigObject: String!\n jFieldOnNBigObject: Int!\n kFieldOnNBigObject: Boolean!\n lFieldOnNBigObject: Float!\n mFieldOnNBigObject: String!\n nFieldOnNBigObject: Int!\n oFieldOnNBigObject: Boolean!\n pFieldOnNBigObject: Float!\n qFieldOnNBigObject: String!\n rFieldOnNBigObject: Int!\n sFieldOnNBigObject: Boolean!\n tFieldOnNBigObject: Float!\n uFieldOnNBigObject: String!\n vFieldOnNBigObject: Int!\n wFieldOnNBigObject: Boolean!\n xFieldOnNBigObject: Float!\n yFieldOnNBigObject: String!\n zFieldOnNBigObject: Int!\n}\n\ntype OBigObject {\n aFieldOnOBigObject: String!\n bFieldOnOBigObject: Int!\n cFieldOnOBigObject: Boolean!\n dFieldOnOBigObject: Float!\n eFieldOnOBigObject: String!\n fFieldOnOBigObject: Int!\n gFieldOnOBigObject: Boolean!\n hFieldOnOBigObject: Float!\n iFieldOnOBigObject: String!\n jFieldOnOBigObject: Int!\n kFieldOnOBigObject: Boolean!\n lFieldOnOBigObject: Float!\n mFieldOnOBigObject: String!\n nFieldOnOBigObject: Int!\n oFieldOnOBigObject: Boolean!\n pFieldOnOBigObject: Float!\n qFieldOnOBigObject: String!\n rFieldOnOBigObject: Int!\n sFieldOnOBigObject: Boolean!\n tFieldOnOBigObject: Float!\n uFieldOnOBigObject: String!\n vFieldOnOBigObject: Int!\n wFieldOnOBigObject: Boolean!\n xFieldOnOBigObject: Float!\n yFieldOnOBigObject: String!\n zFieldOnOBigObject: Int!\n}\n\ntype PBigObject {\n aFieldOnPBigObject: String!\n bFieldOnPBigObject: Int!\n cFieldOnPBigObject: Boolean!\n dFieldOnPBigObject: Float!\n eFieldOnPBigObject: String!\n fFieldOnPBigObject: Int!\n gFieldOnPBigObject: Boolean!\n hFieldOnPBigObject: Float!\n iFieldOnPBigObject: String!\n jFieldOnPBigObject: Int!\n kFieldOnPBigObject: Boolean!\n lFieldOnPBigObject: Float!\n mFieldOnPBigObject: String!\n nFieldOnPBigObject: Int!\n oFieldOnPBigObject: Boolean!\n pFieldOnPBigObject: Float!\n qFieldOnPBigObject: String!\n rFieldOnPBigObject: Int!\n sFieldOnPBigObject: Boolean!\n tFieldOnPBigObject: Float!\n uFieldOnPBigObject: String!\n vFieldOnPBigObject: Int!\n wFieldOnPBigObject: Boolean!\n xFieldOnPBigObject: Float!\n yFieldOnPBigObject: String!\n zFieldOnPBigObject: Int!\n}\n\ntype QBigObject {\n aFieldOnQBigObject: String!\n bFieldOnQBigObject: Int!\n cFieldOnQBigObject: Boolean!\n dFieldOnQBigObject: Float!\n eFieldOnQBigObject: String!\n fFieldOnQBigObject: Int!\n gFieldOnQBigObject: Boolean!\n hFieldOnQBigObject: Float!\n iFieldOnQBigObject: String!\n jFieldOnQBigObject: Int!\n kFieldOnQBigObject: Boolean!\n lFieldOnQBigObject: Float!\n mFieldOnQBigObject: String!\n nFieldOnQBigObject: Int!\n oFieldOnQBigObject: Boolean!\n pFieldOnQBigObject: Float!\n qFieldOnQBigObject: String!\n rFieldOnQBigObject: Int!\n sFieldOnQBigObject: Boolean!\n tFieldOnQBigObject: Float!\n uFieldOnQBigObject: String!\n vFieldOnQBigObject: Int!\n wFieldOnQBigObject: Boolean!\n xFieldOnQBigObject: Float!\n yFieldOnQBigObject: String!\n zFieldOnQBigObject: Int!\n}\n\ntype RBigObject {\n aFieldOnRBigObject: String!\n bFieldOnRBigObject: Int!\n cFieldOnRBigObject: Boolean!\n dFieldOnRBigObject: Float!\n eFieldOnRBigObject: String!\n fFieldOnRBigObject: Int!\n gFieldOnRBigObject: Boolean!\n hFieldOnRBigObject: Float!\n iFieldOnRBigObject: String!\n jFieldOnRBigObject: Int!\n kFieldOnRBigObject: Boolean!\n lFieldOnRBigObject: Float!\n mFieldOnRBigObject: String!\n nFieldOnRBigObject: Int!\n oFieldOnRBigObject: Boolean!\n pFieldOnRBigObject: Float!\n qFieldOnRBigObject: String!\n rFieldOnRBigObject: Int!\n sFieldOnRBigObject: Boolean!\n tFieldOnRBigObject: Float!\n uFieldOnRBigObject: String!\n vFieldOnRBigObject: Int!\n wFieldOnRBigObject: Boolean!\n xFieldOnRBigObject: Float!\n yFieldOnRBigObject: String!\n zFieldOnRBigObject: Int!\n}\n\ntype SBigObject {\n aFieldOnSBigObject: String!\n bFieldOnSBigObject: Int!\n cFieldOnSBigObject: Boolean!\n dFieldOnSBigObject: Float!\n eFieldOnSBigObject: String!\n fFieldOnSBigObject: Int!\n gFieldOnSBigObject: Boolean!\n hFieldOnSBigObject: Float!\n iFieldOnSBigObject: String!\n jFieldOnSBigObject: Int!\n kFieldOnSBigObject: Boolean!\n lFieldOnSBigObject: Float!\n mFieldOnSBigObject: String!\n nFieldOnSBigObject: Int!\n oFieldOnSBigObject: Boolean!\n pFieldOnSBigObject: Float!\n qFieldOnSBigObject: String!\n rFieldOnSBigObject: Int!\n sFieldOnSBigObject: Boolean!\n tFieldOnSBigObject: Float!\n uFieldOnSBigObject: String!\n vFieldOnSBigObject: Int!\n wFieldOnSBigObject: Boolean!\n xFieldOnSBigObject: Float!\n yFieldOnSBigObject: String!\n zFieldOnSBigObject: Int!\n}\n\ntype TBigObject {\n aFieldOnTBigObject: String!\n bFieldOnTBigObject: Int!\n cFieldOnTBigObject: Boolean!\n dFieldOnTBigObject: Float!\n eFieldOnTBigObject: String!\n fFieldOnTBigObject: Int!\n gFieldOnTBigObject: Boolean!\n hFieldOnTBigObject: Float!\n iFieldOnTBigObject: String!\n jFieldOnTBigObject: Int!\n kFieldOnTBigObject: Boolean!\n lFieldOnTBigObject: Float!\n mFieldOnTBigObject: String!\n nFieldOnTBigObject: Int!\n oFieldOnTBigObject: Boolean!\n pFieldOnTBigObject: Float!\n qFieldOnTBigObject: String!\n rFieldOnTBigObject: Int!\n sFieldOnTBigObject: Boolean!\n tFieldOnTBigObject: Float!\n uFieldOnTBigObject: String!\n vFieldOnTBigObject: Int!\n wFieldOnTBigObject: Boolean!\n xFieldOnTBigObject: Float!\n yFieldOnTBigObject: String!\n zFieldOnTBigObject: Int!\n}\n\ntype UBigObject {\n aFieldOnUBigObject: String!\n bFieldOnUBigObject: Int!\n cFieldOnUBigObject: Boolean!\n dFieldOnUBigObject: Float!\n eFieldOnUBigObject: String!\n fFieldOnUBigObject: Int!\n gFieldOnUBigObject: Boolean!\n hFieldOnUBigObject: Float!\n iFieldOnUBigObject: String!\n jFieldOnUBigObject: Int!\n kFieldOnUBigObject: Boolean!\n lFieldOnUBigObject: Float!\n mFieldOnUBigObject: String!\n nFieldOnUBigObject: Int!\n oFieldOnUBigObject: Boolean!\n pFieldOnUBigObject: Float!\n qFieldOnUBigObject: String!\n rFieldOnUBigObject: Int!\n sFieldOnUBigObject: Boolean!\n tFieldOnUBigObject: Float!\n uFieldOnUBigObject: String!\n vFieldOnUBigObject: Int!\n wFieldOnUBigObject: Boolean!\n xFieldOnUBigObject: Float!\n yFieldOnUBigObject: String!\n zFieldOnUBigObject: Int!\n}\n\ntype VBigObject {\n aFieldOnVBigObject: String!\n bFieldOnVBigObject: Int!\n cFieldOnVBigObject: Boolean!\n dFieldOnVBigObject: Float!\n eFieldOnVBigObject: String!\n fFieldOnVBigObject: Int!\n gFieldOnVBigObject: Boolean!\n hFieldOnVBigObject: Float!\n iFieldOnVBigObject: String!\n jFieldOnVBigObject: Int!\n kFieldOnVBigObject: Boolean!\n lFieldOnVBigObject: Float!\n mFieldOnVBigObject: String!\n nFieldOnVBigObject: Int!\n oFieldOnVBigObject: Boolean!\n pFieldOnVBigObject: Float!\n qFieldOnVBigObject: String!\n rFieldOnVBigObject: Int!\n sFieldOnVBigObject: Boolean!\n tFieldOnVBigObject: Float!\n uFieldOnVBigObject: String!\n vFieldOnVBigObject: Int!\n wFieldOnVBigObject: Boolean!\n xFieldOnVBigObject: Float!\n yFieldOnVBigObject: String!\n zFieldOnVBigObject: Int!\n}\n\ntype WBigObject {\n aFieldOnWBigObject: String!\n bFieldOnWBigObject: Int!\n cFieldOnWBigObject: Boolean!\n dFieldOnWBigObject: Float!\n eFieldOnWBigObject: String!\n fFieldOnWBigObject: Int!\n gFieldOnWBigObject: Boolean!\n hFieldOnWBigObject: Float!\n iFieldOnWBigObject: String!\n jFieldOnWBigObject: Int!\n kFieldOnWBigObject: Boolean!\n lFieldOnWBigObject: Float!\n mFieldOnWBigObject: String!\n nFieldOnWBigObject: Int!\n oFieldOnWBigObject: Boolean!\n pFieldOnWBigObject: Float!\n qFieldOnWBigObject: String!\n rFieldOnWBigObject: Int!\n sFieldOnWBigObject: Boolean!\n tFieldOnWBigObject: Float!\n uFieldOnWBigObject: String!\n vFieldOnWBigObject: Int!\n wFieldOnWBigObject: Boolean!\n xFieldOnWBigObject: Float!\n yFieldOnWBigObject: String!\n zFieldOnWBigObject: Int!\n}\n\ntype XBigObject {\n aFieldOnXBigObject: String!\n bFieldOnXBigObject: Int!\n cFieldOnXBigObject: Boolean!\n dFieldOnXBigObject: Float!\n eFieldOnXBigObject: String!\n fFieldOnXBigObject: Int!\n gFieldOnXBigObject: Boolean!\n hFieldOnXBigObject: Float!\n iFieldOnXBigObject: String!\n jFieldOnXBigObject: Int!\n kFieldOnXBigObject: Boolean!\n lFieldOnXBigObject: Float!\n mFieldOnXBigObject: String!\n nFieldOnXBigObject: Int!\n oFieldOnXBigObject: Boolean!\n pFieldOnXBigObject: Float!\n qFieldOnXBigObject: String!\n rFieldOnXBigObject: Int!\n sFieldOnXBigObject: Boolean!\n tFieldOnXBigObject: Float!\n uFieldOnXBigObject: String!\n vFieldOnXBigObject: Int!\n wFieldOnXBigObject: Boolean!\n xFieldOnXBigObject: Float!\n yFieldOnXBigObject: String!\n zFieldOnXBigObject: Int!\n}\n\ntype YBigObject {\n aFieldOnYBigObject: String!\n bFieldOnYBigObject: Int!\n cFieldOnYBigObject: Boolean!\n dFieldOnYBigObject: Float!\n eFieldOnYBigObject: String!\n fFieldOnYBigObject: Int!\n gFieldOnYBigObject: Boolean!\n hFieldOnYBigObject: Float!\n iFieldOnYBigObject: String!\n jFieldOnYBigObject: Int!\n kFieldOnYBigObject: Boolean!\n lFieldOnYBigObject: Float!\n mFieldOnYBigObject: String!\n nFieldOnYBigObject: Int!\n oFieldOnYBigObject: Boolean!\n pFieldOnYBigObject: Float!\n qFieldOnYBigObject: String!\n rFieldOnYBigObject: Int!\n sFieldOnYBigObject: Boolean!\n tFieldOnYBigObject: Float!\n uFieldOnYBigObject: String!\n vFieldOnYBigObject: Int!\n wFieldOnYBigObject: Boolean!\n xFieldOnYBigObject: Float!\n yFieldOnYBigObject: String!\n zFieldOnYBigObject: Int!\n}\n\ntype ZBigObject {\n aFieldOnZBigObject: String!\n bFieldOnZBigObject: Int!\n cFieldOnZBigObject: Boolean!\n dFieldOnZBigObject: Float!\n eFieldOnZBigObject: String!\n fFieldOnZBigObject: Int!\n gFieldOnZBigObject: Boolean!\n hFieldOnZBigObject: Float!\n iFieldOnZBigObject: String!\n jFieldOnZBigObject: Int!\n kFieldOnZBigObject: Boolean!\n lFieldOnZBigObject: Float!\n mFieldOnZBigObject: String!\n nFieldOnZBigObject: Int!\n oFieldOnZBigObject: Boolean!\n pFieldOnZBigObject: Float!\n qFieldOnZBigObject: String!\n rFieldOnZBigObject: Int!\n sFieldOnZBigObject: Boolean!\n tFieldOnZBigObject: Float!\n uFieldOnZBigObject: String!\n vFieldOnZBigObject: Int!\n wFieldOnZBigObject: Boolean!\n xFieldOnZBigObject: Float!\n yFieldOnZBigObject: String!\n zFieldOnZBigObject: Int!\n}" + }, + "upstreamSchema": { + "key": "20c8fc085a72213ac5bb4a25387d3a7bb35749ec" + } + }, + "requestTimeoutSeconds": "10", + "id": "4", + "keys": [ + { + "typeName": "Employee", + "selectionSet": "id" + } + ] + }, + { + "kind": "GRAPHQL", + "rootNodes": [ + { + "typeName": "Mutation", + "fieldNames": [ + "updateAvailability" + ] + }, + { + "typeName": "Employee", + "fieldNames": [ + "id", + "isAvailable" + ] + } + ], + "overrideFieldPathFromAlias": true, + "customGraphql": { + "fetch": { + "url": { + "staticVariableContent": "http://localhost:4007/graphql" + }, + "method": "POST", + "body": {}, + "baseUrl": {}, + "path": {} + }, + "subscription": { + "enabled": true, + "url": { + "staticVariableContent": "http://localhost:4007/graphql" + }, + "protocol": "GRAPHQL_SUBSCRIPTION_PROTOCOL_WS", + "websocketSubprotocol": "GRAPHQL_WEBSOCKET_SUBPROTOCOL_AUTO" + }, + "federation": { + "enabled": true, + "serviceSdl": "extend schema\n@link(url: \"https://specs.apollo.dev/federation/v2.5\", import: [\"@authenticated\", \"@composeDirective\", \"@external\", \"@extends\", \"@inaccessible\", \"@interfaceObject\", \"@override\", \"@provides\", \"@key\", \"@requires\", \"@requiresScopes\", \"@shareable\", \"@tag\"])\n\ntype Mutation {\n \"\"\" This mutation updates the availability status of an employee in the system.\"\"\"\n updateAvailability(employeeID: Int!, isAvailable: Boolean!): Employee!\n}\ntype Employee @key(fields: \"id\") {\n id: Int!\n isAvailable: Boolean!\n}\n" + }, + "upstreamSchema": { + "key": "0327ed440f0c9e1684722cbb987bc8d3283c5532" + } + }, + "requestTimeoutSeconds": "10", + "id": "5", + "keys": [ + { + "typeName": "Employee", + "selectionSet": "id" + } + ] + }, + { + "kind": "GRAPHQL", + "rootNodes": [ + { + "typeName": "Mutation", + "fieldNames": [ + "updateMood" + ] + }, + { + "typeName": "Employee", + "fieldNames": [ + "id", + "currentMood" + ] + } + ], + "overrideFieldPathFromAlias": true, + "customGraphql": { + "fetch": { + "url": { + "staticVariableContent": "http://localhost:4008/graphql" + }, + "method": "POST", + "body": {}, + "baseUrl": {}, + "path": {} + }, + "subscription": { + "enabled": true, + "url": { + "staticVariableContent": "http://localhost:4008/graphql" + }, + "protocol": "GRAPHQL_SUBSCRIPTION_PROTOCOL_WS", + "websocketSubprotocol": "GRAPHQL_WEBSOCKET_SUBPROTOCOL_AUTO" + }, + "federation": { + "enabled": true, + "serviceSdl": "extend schema\n@link(url: \"https://specs.apollo.dev/federation/v2.5\", import: [\"@authenticated\", \"@composeDirective\", \"@external\", \"@extends\", \"@inaccessible\", \"@interfaceObject\", \"@override\", \"@provides\", \"@key\", \"@requires\", \"@requiresScopes\", \"@shareable\", \"@tag\"])\n\ntype Mutation {\n \"\"\" This mutation update the mood of an employee. \"\"\"\n updateMood(employeeID: Int!, mood: Mood!): Employee!\n}\n\nenum Mood {\n APATHETIC @inaccessible\n HAPPY\n SAD\n}\n\ntype Employee @key(fields: \"id\") {\n id: Int!\n currentMood: Mood!\n}\n" + }, + "upstreamSchema": { + "key": "cb7653f92b2599bd46ae73a84b8d7d5c359fb3b2" + } + }, + "requestTimeoutSeconds": "10", + "id": "6", + "keys": [ + { + "typeName": "Employee", + "selectionSet": "id" + } + ] + }, + { + "kind": "GRAPHQL", + "rootNodes": [ + { + "typeName": "Country", + "fieldNames": [ + "key", + "language" + ] + } + ], + "childNodes": [ + { + "typeName": "CountryKey", + "fieldNames": [ + "name" + ] + } + ], + "overrideFieldPathFromAlias": true, + "customGraphql": { + "fetch": { + "url": { + "staticVariableContent": "http://localhost:4009/graphql" + }, + "method": "POST", + "body": {}, + "baseUrl": {}, + "path": {} + }, + "subscription": { + "enabled": true, + "url": { + "staticVariableContent": "http://localhost:4009/graphql" + }, + "protocol": "GRAPHQL_SUBSCRIPTION_PROTOCOL_WS", + "websocketSubprotocol": "GRAPHQL_WEBSOCKET_SUBPROTOCOL_AUTO" + }, + "federation": { + "enabled": true, + "serviceSdl": "extend schema\n@link(url: \"https://specs.apollo.dev/federation/v2.5\", import: [\"@authenticated\", \"@composeDirective\", \"@external\", \"@extends\", \"@inaccessible\", \"@interfaceObject\", \"@override\", \"@provides\", \"@key\", \"@requires\", \"@requiresScopes\", \"@shareable\", \"@tag\"])\n\n# Using a nested key field simply because it can showcase potential bug\n# vectors / Federation capabilities.\ntype Country @key(fields: \"key { name }\") {\n key: CountryKey!\n language: String\n}\n\ntype CountryKey {\n name: String!\n}\n" + }, + "upstreamSchema": { + "key": "14e8ff1a04734f4e9f500e9fcc7cebd94008d2cd" + } + }, + "requestTimeoutSeconds": "10", + "id": "7", + "keys": [ + { + "typeName": "Country", + "selectionSet": "key { name }" + } + ] + }, + { + "kind": "PUBSUB", + "rootNodes": [ + { + "typeName": "Query", + "fieldNames": [ + "employeeFromEvent", + "employeeFromEventMyNats" + ] + }, + { + "typeName": "Mutation", + "fieldNames": [ + "updateEmployeeMyKafka", + "updateEmployeeMyNats", + "updateEmployeeMyRedis", + "updateEmployeeMyRedisOnCustomChannel" + ] + }, + { + "typeName": "Subscription", + "fieldNames": [ + "employeeUpdated", + "employeeUpdatedMyKafka", + "employeeUpdatedMyNats", + "employeeUpdatedNatsStream", + "employeeUpdatedMyRedis", + "employeeUpdates", + "filteredEmployeeUpdated", + "filteredEmployeeUpdatedMyKafka", + "filteredEmployeeUpdatedMyKafkaWithListFieldArguments", + "filteredEmployeeUpdatedMyKafkaWithNestedListFieldArgument", + "filteredEmployeeUpdatedMyRedis" + ] + } + ], + "childNodes": [ + { + "typeName": "edfs__PublishResult", + "fieldNames": [ + "success" + ] + }, + { + "typeName": "Employee", + "fieldNames": [ + "id" + ], + "externalFieldNames": [ + "id" + ] + } + ], + "overrideFieldPathFromAlias": true, + "requestTimeoutSeconds": "10", + "id": "8", + "keys": [ + { + "typeName": "Employee", + "selectionSet": "id", + "disableEntityResolver": true + } + ], + "customEvents": { + "nats": [ + { + "engineEventConfiguration": { + "providerId": "default", + "type": "REQUEST", + "typeName": "Query", + "fieldName": "employeeFromEvent" + }, + "subjects": [ + "getEmployee.{{ args.id }}" + ] + }, + { + "engineEventConfiguration": { + "providerId": "my-nats", + "type": "REQUEST", + "typeName": "Query", + "fieldName": "employeeFromEventMyNats" + }, + "subjects": [ + "getEmployeeMyNats.{{ args.employeeID }}" + ] + }, + { + "engineEventConfiguration": { + "providerId": "my-nats", + "typeName": "Mutation", + "fieldName": "updateEmployeeMyNats" + }, + "subjects": [ + "employeeUpdatedMyNats.{{ args.id }}" + ] + }, + { + "engineEventConfiguration": { + "providerId": "default", + "type": "SUBSCRIBE", + "typeName": "Subscription", + "fieldName": "employeeUpdated" + }, + "subjects": [ + "employeeUpdated.{{ args.employeeID }}" + ] + }, + { + "engineEventConfiguration": { + "providerId": "my-nats", + "type": "SUBSCRIBE", + "typeName": "Subscription", + "fieldName": "employeeUpdatedMyNats" + }, + "subjects": [ + "employeeUpdatedMyNats.{{ args.id }}", + "employeeUpdatedMyNatsTwo.{{ args.id }}" + ] + }, + { + "engineEventConfiguration": { + "providerId": "default", + "type": "SUBSCRIBE", + "typeName": "Subscription", + "fieldName": "employeeUpdatedNatsStream" + }, + "subjects": [ + "employeeUpdated.{{ args.id }}" + ], + "streamConfiguration": { + "consumerName": "consumerName", + "streamName": "streamName", + "consumerInactiveThreshold": 30 + } + }, + { + "engineEventConfiguration": { + "providerId": "default", + "type": "SUBSCRIBE", + "typeName": "Subscription", + "fieldName": "filteredEmployeeUpdated" + }, + "subjects": [ + "employeeUpdated.{{ args.id }}" + ] + } + ], + "kafka": [ + { + "engineEventConfiguration": { + "providerId": "my-kafka", + "typeName": "Mutation", + "fieldName": "updateEmployeeMyKafka" + }, + "topics": [ + "employeeUpdated" + ] + }, + { + "engineEventConfiguration": { + "providerId": "my-kafka", + "type": "SUBSCRIBE", + "typeName": "Subscription", + "fieldName": "employeeUpdatedMyKafka" + }, + "topics": [ + "employeeUpdated", + "employeeUpdatedTwo" + ] + }, + { + "engineEventConfiguration": { + "providerId": "my-kafka", + "type": "SUBSCRIBE", + "typeName": "Subscription", + "fieldName": "filteredEmployeeUpdatedMyKafka" + }, + "topics": [ + "employeeUpdated", + "employeeUpdatedTwo" + ] + }, + { + "engineEventConfiguration": { + "providerId": "my-kafka", + "type": "SUBSCRIBE", + "typeName": "Subscription", + "fieldName": "filteredEmployeeUpdatedMyKafkaWithListFieldArguments" + }, + "topics": [ + "employeeUpdated", + "employeeUpdatedTwo" + ] + }, + { + "engineEventConfiguration": { + "providerId": "my-kafka", + "type": "SUBSCRIBE", + "typeName": "Subscription", + "fieldName": "filteredEmployeeUpdatedMyKafkaWithNestedListFieldArgument" + }, + "topics": [ + "employeeUpdated", + "employeeUpdatedTwo" + ] + } + ], + "redis": [ + { + "engineEventConfiguration": { + "providerId": "my-redis", + "typeName": "Mutation", + "fieldName": "updateEmployeeMyRedis" + }, + "channels": [ + "employeeUpdatedMyRedis" + ] + }, + { + "engineEventConfiguration": { + "providerId": "my-redis", + "typeName": "Mutation", + "fieldName": "updateEmployeeMyRedisOnCustomChannel" + }, + "channels": [ + "employeeUpdatedMyRedis.{{ args.id }}" + ] + }, + { + "engineEventConfiguration": { + "providerId": "my-redis", + "type": "SUBSCRIBE", + "typeName": "Subscription", + "fieldName": "employeeUpdatedMyRedis" + }, + "channels": [ + "employeeUpdatedMyRedis.{{ args.id }}" + ] + }, + { + "engineEventConfiguration": { + "providerId": "my-redis", + "type": "SUBSCRIBE", + "typeName": "Subscription", + "fieldName": "employeeUpdates" + }, + "channels": [ + "employeeUpdatedMyRedis" + ] + }, + { + "engineEventConfiguration": { + "providerId": "my-redis", + "type": "SUBSCRIBE", + "typeName": "Subscription", + "fieldName": "filteredEmployeeUpdatedMyRedis" + }, + "channels": [ + "employeeUpdatedMyRedis" + ] + } + ] + } + } + ], + "fieldConfigurations": [ + { + "typeName": "Subscription", + "fieldName": "filteredEmployeeUpdated", + "argumentsConfiguration": [ + { + "name": "id", + "sourceType": "FIELD_ARGUMENT" + } + ], + "subscriptionFilterCondition": { + "not": { + "in": { + "fieldPath": [ + "id" + ], + "json": "[2,6,9,10,12]" + } + } + } + }, + { + "typeName": "Subscription", + "fieldName": "filteredEmployeeUpdatedMyKafka", + "argumentsConfiguration": [ + { + "name": "employeeID", + "sourceType": "FIELD_ARGUMENT" + } + ], + "subscriptionFilterCondition": { + "in": { + "fieldPath": [ + "id" + ], + "json": "[1,3,4,7,11]" + } + } + }, + { + "typeName": "Subscription", + "fieldName": "filteredEmployeeUpdatedMyKafkaWithListFieldArguments", + "argumentsConfiguration": [ + { + "name": "firstIds", + "sourceType": "FIELD_ARGUMENT" + }, + { + "name": "secondIds", + "sourceType": "FIELD_ARGUMENT" + } + ], + "subscriptionFilterCondition": { + "in": { + "fieldPath": [ + "id" + ], + "json": "[\"{{ args.firstIds }}\",\"{{ args.secondIds }}\"]" + } + } + }, + { + "typeName": "Subscription", + "fieldName": "filteredEmployeeUpdatedMyKafkaWithNestedListFieldArgument", + "argumentsConfiguration": [ + { + "name": "input", + "sourceType": "FIELD_ARGUMENT" + } + ], + "subscriptionFilterCondition": { + "or": [ + { + "in": { + "fieldPath": [ + "id" + ], + "json": "[\"{{ args.input.ids }}\"]" + } + }, + { + "in": { + "fieldPath": [ + "id" + ], + "json": "[\"1\"]" + } + } + ] + } + }, + { + "typeName": "Subscription", + "fieldName": "filteredEmployeeUpdatedMyRedis", + "argumentsConfiguration": [ + { + "name": "ids", + "sourceType": "FIELD_ARGUMENT" + } + ], + "subscriptionFilterCondition": { + "in": { + "fieldPath": [ + "id" + ], + "json": "[\"{{ args.ids }}\"]" + } + } + }, + { + "typeName": "Query", + "fieldName": "employee", + "argumentsConfiguration": [ + { + "name": "id", + "sourceType": "FIELD_ARGUMENT" + } + ] + }, + { + "typeName": "Query", + "fieldName": "employeeAsList", + "argumentsConfiguration": [ + { + "name": "id", + "sourceType": "FIELD_ARGUMENT" + } + ] + }, + { + "typeName": "Query", + "fieldName": "teammates", + "argumentsConfiguration": [ + { + "name": "team", + "sourceType": "FIELD_ARGUMENT" + } + ] + }, + { + "typeName": "Query", + "fieldName": "findEmployees", + "argumentsConfiguration": [ + { + "name": "criteria", + "sourceType": "FIELD_ARGUMENT" + } + ] + }, + { + "typeName": "Query", + "fieldName": "headerValue", + "argumentsConfiguration": [ + { + "name": "name", + "sourceType": "FIELD_ARGUMENT" + } + ] + }, + { + "typeName": "Query", + "fieldName": "initPayloadValue", + "argumentsConfiguration": [ + { + "name": "key", + "sourceType": "FIELD_ARGUMENT" + } + ] + }, + { + "typeName": "Query", + "fieldName": "delay", + "argumentsConfiguration": [ + { + "name": "response", + "sourceType": "FIELD_ARGUMENT" + }, + { + "name": "ms", + "sourceType": "FIELD_ARGUMENT" + } + ] + }, + { + "typeName": "Query", + "fieldName": "bigResponse", + "argumentsConfiguration": [ + { + "name": "artificialDelay", + "sourceType": "FIELD_ARGUMENT" + }, + { + "name": "bigObjects", + "sourceType": "FIELD_ARGUMENT" + }, + { + "name": "nestedObjects", + "sourceType": "FIELD_ARGUMENT" + }, + { + "name": "deeplyNestedObjects", + "sourceType": "FIELD_ARGUMENT" + } + ] + }, + { + "typeName": "Query", + "fieldName": "longResponse", + "argumentsConfiguration": [ + { + "name": "artificialDelay", + "sourceType": "FIELD_ARGUMENT" + }, + { + "name": "bytes", + "sourceType": "FIELD_ARGUMENT" + } + ] + }, + { + "typeName": "Query", + "fieldName": "rootFieldWithListArg", + "argumentsConfiguration": [ + { + "name": "arg", + "sourceType": "FIELD_ARGUMENT" + } + ] + }, + { + "typeName": "Query", + "fieldName": "rootFieldWithNestedListArg", + "argumentsConfiguration": [ + { + "name": "arg", + "sourceType": "FIELD_ARGUMENT" + } + ] + }, + { + "typeName": "Query", + "fieldName": "rootFieldWithListOfInputArg", + "argumentsConfiguration": [ + { + "name": "arg", + "sourceType": "FIELD_ARGUMENT" + } + ] + }, + { + "typeName": "Query", + "fieldName": "rootFieldWithListOfEnumArg", + "argumentsConfiguration": [ + { + "name": "arg", + "sourceType": "FIELD_ARGUMENT" + } + ] + }, + { + "typeName": "Query", + "fieldName": "rootFieldWithInput", + "argumentsConfiguration": [ + { + "name": "arg", + "sourceType": "FIELD_ARGUMENT" + } + ] + }, + { + "typeName": "Query", + "fieldName": "floatField", + "argumentsConfiguration": [ + { + "name": "arg", + "sourceType": "FIELD_ARGUMENT" + } + ] + }, + { + "typeName": "Query", + "fieldName": "sharedThings", + "argumentsConfiguration": [ + { + "name": "numOfA", + "sourceType": "FIELD_ARGUMENT" + }, + { + "name": "numOfB", + "sourceType": "FIELD_ARGUMENT" + } + ] + }, + { + "typeName": "Query", + "fieldName": "employeeFromEvent", + "argumentsConfiguration": [ + { + "name": "id", + "sourceType": "FIELD_ARGUMENT" + } + ] + }, + { + "typeName": "Query", + "fieldName": "employeeFromEventMyNats", + "argumentsConfiguration": [ + { + "name": "employeeID", + "sourceType": "FIELD_ARGUMENT" + } + ] + }, + { + "typeName": "Mutation", + "fieldName": "updateEmployeeTag", + "argumentsConfiguration": [ + { + "name": "id", + "sourceType": "FIELD_ARGUMENT" + }, + { + "name": "tag", + "sourceType": "FIELD_ARGUMENT" + } + ] + }, + { + "typeName": "Mutation", + "fieldName": "singleUpload", + "argumentsConfiguration": [ + { + "name": "file", + "sourceType": "FIELD_ARGUMENT" + } + ] + }, + { + "typeName": "Mutation", + "fieldName": "singleUploadWithInput", + "argumentsConfiguration": [ + { + "name": "arg", + "sourceType": "FIELD_ARGUMENT" + } + ] + }, + { + "typeName": "Mutation", + "fieldName": "multipleUpload", + "argumentsConfiguration": [ + { + "name": "files", + "sourceType": "FIELD_ARGUMENT" + } + ] + }, + { + "typeName": "Mutation", + "fieldName": "addFact", + "argumentsConfiguration": [ + { + "name": "fact", + "sourceType": "FIELD_ARGUMENT" + } + ], + "authorizationConfiguration": { + "requiresAuthentication": true, + "requiredOrScopes": [ + { + "requiredAndScopes": [ + "write:fact" + ] + }, + { + "requiredAndScopes": [ + "write:all" + ] + } + ], + "requiredOrScopesByOr": [ + { + "requiredAndScopes": [ + "write:fact" + ] + }, + { + "requiredAndScopes": [ + "write:all" + ] + } + ] + } + }, + { + "typeName": "Mutation", + "fieldName": "updateAvailability", + "argumentsConfiguration": [ + { + "name": "employeeID", + "sourceType": "FIELD_ARGUMENT" + }, + { + "name": "isAvailable", + "sourceType": "FIELD_ARGUMENT" + } + ] + }, + { + "typeName": "Mutation", + "fieldName": "updateMood", + "argumentsConfiguration": [ + { + "name": "employeeID", + "sourceType": "FIELD_ARGUMENT" + }, + { + "name": "mood", + "sourceType": "FIELD_ARGUMENT" + } + ] + }, + { + "typeName": "Mutation", + "fieldName": "updateEmployeeMyKafka", + "argumentsConfiguration": [ + { + "name": "employeeID", + "sourceType": "FIELD_ARGUMENT" + }, + { + "name": "update", + "sourceType": "FIELD_ARGUMENT" + } + ] + }, + { + "typeName": "Mutation", + "fieldName": "updateEmployeeMyNats", + "argumentsConfiguration": [ + { + "name": "id", + "sourceType": "FIELD_ARGUMENT" + }, + { + "name": "update", + "sourceType": "FIELD_ARGUMENT" + } + ] + }, + { + "typeName": "Mutation", + "fieldName": "updateEmployeeMyRedis", + "argumentsConfiguration": [ + { + "name": "id", + "sourceType": "FIELD_ARGUMENT" + }, + { + "name": "update", + "sourceType": "FIELD_ARGUMENT" + } + ] + }, + { + "typeName": "Mutation", + "fieldName": "updateEmployeeMyRedisOnCustomChannel", + "argumentsConfiguration": [ + { + "name": "id", + "sourceType": "FIELD_ARGUMENT" + }, + { + "name": "update", + "sourceType": "FIELD_ARGUMENT" + } + ] + }, + { + "typeName": "Subscription", + "fieldName": "countEmp", + "argumentsConfiguration": [ + { + "name": "max", + "sourceType": "FIELD_ARGUMENT" + }, + { + "name": "intervalMilliseconds", + "sourceType": "FIELD_ARGUMENT" + } + ] + }, + { + "typeName": "Subscription", + "fieldName": "countEmp2", + "argumentsConfiguration": [ + { + "name": "max", + "sourceType": "FIELD_ARGUMENT" + }, + { + "name": "intervalMilliseconds", + "sourceType": "FIELD_ARGUMENT" + } + ] + }, + { + "typeName": "Subscription", + "fieldName": "countFor", + "argumentsConfiguration": [ + { + "name": "count", + "sourceType": "FIELD_ARGUMENT" + } + ] + }, + { + "typeName": "Subscription", + "fieldName": "countHob", + "argumentsConfiguration": [ + { + "name": "max", + "sourceType": "FIELD_ARGUMENT" + }, + { + "name": "intervalMilliseconds", + "sourceType": "FIELD_ARGUMENT" + } + ] + }, + { + "typeName": "Subscription", + "fieldName": "headerValue", + "argumentsConfiguration": [ + { + "name": "name", + "sourceType": "FIELD_ARGUMENT" + }, + { + "name": "repeat", + "sourceType": "FIELD_ARGUMENT" + } + ] + }, + { + "typeName": "Subscription", + "fieldName": "initPayloadValue", + "argumentsConfiguration": [ + { + "name": "key", + "sourceType": "FIELD_ARGUMENT" + }, + { + "name": "repeat", + "sourceType": "FIELD_ARGUMENT" + } + ] + }, + { + "typeName": "Subscription", + "fieldName": "initialPayload", + "argumentsConfiguration": [ + { + "name": "repeat", + "sourceType": "FIELD_ARGUMENT" + } + ] + }, + { + "typeName": "Subscription", + "fieldName": "employeeUpdated", + "argumentsConfiguration": [ + { + "name": "employeeID", + "sourceType": "FIELD_ARGUMENT" + } + ] + }, + { + "typeName": "Subscription", + "fieldName": "employeeUpdatedMyKafka", + "argumentsConfiguration": [ + { + "name": "employeeID", + "sourceType": "FIELD_ARGUMENT" + } + ] + }, + { + "typeName": "Subscription", + "fieldName": "employeeUpdatedMyNats", + "argumentsConfiguration": [ + { + "name": "id", + "sourceType": "FIELD_ARGUMENT" + } + ] + }, + { + "typeName": "Subscription", + "fieldName": "employeeUpdatedNatsStream", + "argumentsConfiguration": [ + { + "name": "id", + "sourceType": "FIELD_ARGUMENT" + } + ] + }, + { + "typeName": "Subscription", + "fieldName": "employeeUpdatedMyRedis", + "argumentsConfiguration": [ + { + "name": "id", + "sourceType": "FIELD_ARGUMENT" + } + ] + }, + { + "typeName": "Documentation", + "fieldName": "url", + "argumentsConfiguration": [ + { + "name": "product", + "sourceType": "FIELD_ARGUMENT" + } + ] + }, + { + "typeName": "Documentation", + "fieldName": "urls", + "argumentsConfiguration": [ + { + "name": "products", + "sourceType": "FIELD_ARGUMENT" + } + ] + }, + { + "typeName": "Employee", + "fieldName": "startDate", + "authorizationConfiguration": { + "requiresAuthentication": true, + "requiredOrScopes": [ + { + "requiredAndScopes": [ + "read:employee", + "read:private" + ] + }, + { + "requiredAndScopes": [ + "read:all" + ] + } + ], + "requiredOrScopesByOr": [ + { + "requiredAndScopes": [ + "read:employee", + "read:private" + ] + }, + { + "requiredAndScopes": [ + "read:all" + ] + } + ] + } + }, + { + "typeName": "Query", + "fieldName": "topSecretFederationFacts", + "authorizationConfiguration": { + "requiresAuthentication": true, + "requiredOrScopes": [ + { + "requiredAndScopes": [ + "read:fact" + ] + }, + { + "requiredAndScopes": [ + "read:all" + ] + } + ], + "requiredOrScopesByOr": [ + { + "requiredAndScopes": [ + "read:fact" + ] + }, + { + "requiredAndScopes": [ + "read:all" + ] + } + ] + } + }, + { + "typeName": "Query", + "fieldName": "secret", + "authorizationConfiguration": { + "requiresAuthentication": true, + "requiredOrScopes": [ + { + "requiredAndScopes": [ + "read:secret" + ] + } + ], + "requiredOrScopesByOr": [ + { + "requiredAndScopes": [ + "read:secret" + ] + } + ] + } + }, + { + "typeName": "Query", + "fieldName": "factTypes", + "authorizationConfiguration": { + "requiresAuthentication": true + } + }, + { + "typeName": "TopSecretFact", + "fieldName": "factType", + "authorizationConfiguration": { + "requiresAuthentication": true + } + }, + { + "typeName": "TopSecretFact", + "fieldName": "description", + "authorizationConfiguration": { + "requiresAuthentication": true, + "requiredOrScopes": [ + { + "requiredAndScopes": [ + "read:scalar" + ] + }, + { + "requiredAndScopes": [ + "read:all" + ] + } + ], + "requiredOrScopesByOr": [ + { + "requiredAndScopes": [ + "read:scalar" + ] + }, + { + "requiredAndScopes": [ + "read:all" + ] + } + ] + } + }, + { + "typeName": "DirectiveFact", + "fieldName": "factType", + "authorizationConfiguration": { + "requiresAuthentication": true + } + }, + { + "typeName": "DirectiveFact", + "fieldName": "description", + "authorizationConfiguration": { + "requiresAuthentication": true, + "requiredOrScopes": [ + { + "requiredAndScopes": [ + "read:scalar" + ] + }, + { + "requiredAndScopes": [ + "read:all" + ] + } + ], + "requiredOrScopesByOr": [ + { + "requiredAndScopes": [ + "read:scalar" + ] + }, + { + "requiredAndScopes": [ + "read:all" + ] + } + ] + } + }, + { + "typeName": "EntityFact", + "fieldName": "factType", + "authorizationConfiguration": { + "requiresAuthentication": true + } + }, + { + "typeName": "EntityFact", + "fieldName": "description", + "authorizationConfiguration": { + "requiresAuthentication": true, + "requiredOrScopes": [ + { + "requiredAndScopes": [ + "read:scalar" + ] + }, + { + "requiredAndScopes": [ + "read:all" + ] + } + ], + "requiredOrScopesByOr": [ + { + "requiredAndScopes": [ + "read:scalar" + ] + }, + { + "requiredAndScopes": [ + "read:all" + ] + } + ] + } + }, + { + "typeName": "MiscellaneousFact", + "fieldName": "description", + "authorizationConfiguration": { + "requiresAuthentication": true, + "requiredOrScopes": [ + { + "requiredAndScopes": [ + "read:scalar", + "read:miscellaneous" + ] + }, + { + "requiredAndScopes": [ + "read:all", + "read:miscellaneous" + ] + } + ], + "requiredOrScopesByOr": [ + { + "requiredAndScopes": [ + "read:scalar", + "read:miscellaneous" + ] + }, + { + "requiredAndScopes": [ + "read:all", + "read:miscellaneous" + ] + } + ] + } + }, + { + "typeName": "MiscellaneousFact", + "fieldName": "factType", + "authorizationConfiguration": { + "requiresAuthentication": true + } + } + ], + "graphqlSchema": "schema {\n query: Query\n mutation: Mutation\n subscription: Subscription\n}\n\ndirective @authenticated on ENUM | FIELD_DEFINITION | INTERFACE | OBJECT | SCALAR\n\ndirective @inaccessible on ARGUMENT_DEFINITION | ENUM | ENUM_VALUE | FIELD_DEFINITION | INPUT_FIELD_DEFINITION | INPUT_OBJECT | INTERFACE | OBJECT | SCALAR | UNION\n\ndirective @requiresScopes(scopes: [[openfed__Scope!]!]!) on ENUM | FIELD_DEFINITION | INTERFACE | OBJECT | SCALAR\n\ndirective @tag(name: String!) repeatable on ARGUMENT_DEFINITION | ENUM | ENUM_VALUE | FIELD_DEFINITION | INPUT_FIELD_DEFINITION | INPUT_OBJECT | INTERFACE | OBJECT | SCALAR | UNION\n\nscalar openfed__Scope\n\ntype Query {\n employee(id: Int!): Employee\n employeeAsList(id: Int!): [Employee]\n employees: [Employee]\n products: [Products!]!\n teammates(team: Department!): [Employee!]!\n firstEmployee: Employee! @tag(name: \"internal\")\n \"\"\" This is a GraphQL query that retrieves a list of employees.\"\"\"\n findEmployees(criteria: SearchInput): [Employee!]!\n productTypes: [Products!]!\n topSecretFederationFacts: [TopSecretFact!]! @requiresScopes(scopes: [[\"read:fact\"], [\"read:all\"]])\n factTypes: [TopSecretFactType!]\n \"\"\"Returns the value of the received HTTP header.\"\"\"\n headerValue(name: String!): String!\n \"\"\"Returns the value of the given key in the WS initial payload.\"\"\"\n initPayloadValue(key: String!): String!\n initialPayload: Map\n \"\"\"Returns response after the given delay\"\"\"\n delay(response: String!, ms: Int!): String!\n bigResponse(artificialDelay: Int! = 0, bigObjects: Int! = 100, nestedObjects: Int! = 100, deeplyNestedObjects: Int! = 100): [BigObject!]!\n longResponse(artificialDelay: Int! = 0, bytes: Int!): String\n bigAbstractResponse: BigAbstractResponse\n rootFieldWithListArg(arg: [String!]!): [String!]!\n rootFieldWithNestedListArg(arg: [[String!]!]!): [[String!]!]!\n rootFieldWithListOfInputArg(arg: [InputType!]!): [InputResponse!]!\n rootFieldWithListOfEnumArg(arg: [EnumType!]!): [EnumType!]!\n rootFieldWithInput(arg: InputArg!): String!\n floatField(arg: Float): Float\n sharedThings(numOfA: Int!, numOfB: Int!): [Thing!]!\n secret: Secret @requiresScopes(scopes: [[\"read:secret\"]])\n employeeFromEvent(id: Int!): Employee!\n employeeFromEventMyNats(employeeID: Int!): Employee!\n}\n\nscalar Upload\n\ntype Mutation {\n updateEmployeeTag(id: Int!, tag: String!): Employee\n singleUpload(file: Upload!): Boolean!\n singleUploadWithInput(arg: FileUpload!): Boolean!\n multipleUpload(files: [Upload!]!): Boolean!\n addFact(fact: TopSecretFactInput!): TopSecretFact! @requiresScopes(scopes: [[\"write:fact\"], [\"write:all\"]])\n \"\"\" This mutation updates the availability status of an employee in the system.\n \"\"\"\n updateAvailability(employeeID: Int!, isAvailable: Boolean!): Employee!\n \"\"\" This mutation update the mood of an employee. \"\"\"\n updateMood(employeeID: Int!, mood: Mood!): Employee!\n updateEmployeeMyKafka(employeeID: Int!, update: UpdateEmployeeInput!): edfs__PublishResult!\n updateEmployeeMyNats(id: Int!, update: UpdateEmployeeInput!): edfs__PublishResult!\n updateEmployeeMyRedis(id: Int!, update: UpdateEmployeeInput!): edfs__PublishResult!\n updateEmployeeMyRedisOnCustomChannel(id: Int!, update: UpdateEmployeeInput!): edfs__PublishResult!\n}\n\ninput FileUpload {\n nested: DeeplyNestedFileUpload\n nestedList: [Upload!]\n}\n\ninput DeeplyNestedFileUpload {\n file: Upload!\n}\n\ntype Subscription {\n \"\"\"`currentTime` will return a stream of `Time` objects.\"\"\"\n currentTime: Time!\n countEmp(max: Int!, intervalMilliseconds: Int!): Int!\n countEmp2(max: Int!, intervalMilliseconds: Int!): Int!\n countFor(count: Int!): Int!\n countHob(max: Int!, intervalMilliseconds: Int!): Int!\n \"\"\"Returns a stream with the value of the received HTTP header.\"\"\"\n headerValue(name: String!, repeat: Int): TimestampedString!\n \"\"\"\n Returns a stream with the value of value of the given key in the WS initial payload.\n \"\"\"\n initPayloadValue(key: String!, repeat: Int): TimestampedString!\n \"\"\"Returns a stream with the value of the WS initial payload.\"\"\"\n initialPayload(repeat: Int): Map\n returnsError: String\n employeeUpdated(employeeID: Int!): Employee!\n employeeUpdatedMyKafka(employeeID: Int!): Employee!\n employeeUpdatedMyNats(id: Int!): Employee!\n employeeUpdatedNatsStream(id: Int!): Employee!\n employeeUpdatedMyRedis(id: Int!): Employee!\n employeeUpdates: Employee!\n filteredEmployeeUpdated(id: Int!): Employee!\n filteredEmployeeUpdatedMyKafka(employeeID: ID!): Employee!\n filteredEmployeeUpdatedMyKafkaWithListFieldArguments(firstIds: [ID!]!, secondIds: [ID!]!): Employee!\n filteredEmployeeUpdatedMyKafkaWithNestedListFieldArgument(input: KafkaInput!): Employee!\n filteredEmployeeUpdatedMyRedis(ids: [ID!]!): Employee!\n}\n\nenum Department {\n ENGINEERING\n MARKETING\n OPERATIONS\n}\n\ninterface RoleType {\n departments: [Department!]!\n title: [String!]!\n employees: [Employee!]!\n}\n\nenum EngineerType {\n BACKEND\n FRONTEND\n FULLSTACK\n}\n\ninterface Identifiable {\n id: Int!\n}\n\nenum OperationType {\n FINANCE\n HUMAN_RESOURCES\n}\n\ntype Details {\n forename: String!\n location: Country!\n surname: String!\n pastLocations: [City!]!\n middlename: String @deprecated(reason: \"No longer supported\")\n hasChildren: Boolean!\n maritalStatus: MaritalStatus\n nationality: Nationality!\n pets: [Pet]\n}\n\ntype City {\n type: String!\n name: String!\n country: Country\n}\n\ntype Country {\n key: CountryKey!\n language: String\n}\n\ntype CountryKey {\n name: String!\n}\n\nenum Mood {\n HAPPY\n SAD\n APATHETIC @inaccessible\n}\n\ntype ErrorWrapper {\n okField: String\n errorField: String\n}\n\ntype Time {\n unixTime: Int!\n timeStamp: String!\n}\n\nunion Products = Consultancy | Cosmo | SDK | Documentation\n\ninterface IProduct {\n upc: ID!\n engineers: [Employee!]!\n}\n\ntype Consultancy {\n upc: ID!\n lead: Employee!\n isLeadAvailable: Boolean\n name: ProductName!\n}\n\nenum Class {\n FISH\n MAMMAL\n REPTILE\n}\n\nenum Gender {\n FEMALE\n MALE\n UNKNOWN\n}\n\ninterface Animal {\n class: Class!\n gender: Gender!\n}\n\nenum CatType {\n HOME\n STREET\n}\n\nenum DogBreed {\n GOLDEN_RETRIEVER\n POODLE\n ROTTWEILER\n YORKSHIRE_TERRIER\n}\n\nenum MaritalStatus {\n ENGAGED\n MARRIED\n}\n\nenum Nationality {\n AMERICAN\n DUTCH\n ENGLISH\n GERMAN\n INDIAN\n SPANISH\n UKRAINIAN\n}\n\n\"\"\" Allows to filter employees by their details. \"\"\"\ninput SearchInput {\n hasPets: Boolean\n nationality: Nationality\n nested: NestedSearchInput\n}\n\ninput NestedSearchInput {\n maritalStatus: MaritalStatus\n hasChildren: Boolean\n}\n\nenum ExerciseType {\n CALISTHENICS\n HIKING\n SPORT\n STRENGTH_TRAINING\n}\n\ninterface Experience {\n yearsOfExperience: Float!\n}\n\nenum GameGenre {\n ADVENTURE\n BOARD\n FPS\n CARD\n RPG\n ROGUELITE\n SIMULATION\n STRATEGY\n}\n\nenum ProgrammingLanguage {\n CSHARP\n GO\n RUST\n TYPESCRIPT\n}\n\ninterface Hobby {\n employees: [Employee!]!\n}\n\ninput TopSecretFactInput {\n title: String!\n description: FactContent!\n factType: TopSecretFactType!\n}\n\nenum TopSecretFactType @authenticated {\n DIRECTIVE\n ENTITY\n MISCELLANEOUS\n}\n\ninterface TopSecretFact @authenticated {\n description: FactContent!\n factType: TopSecretFactType\n}\n\nscalar FactContent @requiresScopes(scopes: [[\"read:scalar\"], [\"read:all\"]])\n\nenum ProductName {\n CONSULTANCY\n COSMO\n ENGINE\n FINANCE\n HUMAN_RESOURCES\n MARKETING\n SDK\n}\n\ntype Documentation {\n url(product: ProductName!): String!\n urls(products: [ProductName!]!): [String!]!\n}\n\ntype Secret {\n value: String\n}\n\ntype Thing {\n b: String!\n}\n\ninput InputArg {\n enums: [EnumType!]\n enum: EnumType\n string: String\n strings: [String!]\n}\n\nenum EnumType {\n A\n B\n C\n}\n\ninput InputType {\n arg: String!\n}\n\ntype InputResponse {\n arg: String!\n}\n\nscalar Map\n\ntype TimestampedString {\n \"\"\"The value of the string.\"\"\"\n value: String!\n \"\"\"The timestamp when the response was generated.\"\"\"\n unixTime: Int!\n \"\"\"Sequence number\"\"\"\n seq: Int!\n \"\"\"Total number of responses to be sent\"\"\"\n total: Int!\n initialPayload: Map\n}\n\ntype BigObject {\n nestedObjects: [NestedObject!]!\n}\n\ntype NestedObject {\n deeplyNestedObjects: [DeeplyNestedObject!]!\n}\n\ntype DeeplyNestedObject {\n aFieldOnDeeplyNestedObject: String!\n bFieldOnDeeplyNestedObject: Int!\n cFieldOnDeeplyNestedObject: Boolean!\n dFieldOnDeeplyNestedObject: Float!\n eFieldOnDeeplyNestedObject: String!\n fFieldOnDeeplyNestedObject: Int!\n gFieldOnDeeplyNestedObject: Boolean!\n hFieldOnDeeplyNestedObject: Float!\n iFieldOnDeeplyNestedObject: String!\n jFieldOnDeeplyNestedObject: Int!\n kFieldOnDeeplyNestedObject: Boolean!\n lFieldOnDeeplyNestedObject: Float!\n mFieldOnDeeplyNestedObject: String!\n nFieldOnDeeplyNestedObject: Int!\n oFieldOnDeeplyNestedObject: Boolean!\n pFieldOnDeeplyNestedObject: Float!\n qFieldOnDeeplyNestedObject: String!\n rFieldOnDeeplyNestedObject: Int!\n sFieldOnDeeplyNestedObject: Boolean!\n tFieldOnDeeplyNestedObject: Float!\n uFieldOnDeeplyNestedObject: String!\n vFieldOnDeeplyNestedObject: Int!\n wFieldOnDeeplyNestedObject: Boolean!\n xFieldOnDeeplyNestedObject: Float!\n yFieldOnDeeplyNestedObject: String!\n zFieldOnDeeplyNestedObject: Int!\n}\n\nunion BigAbstractResponse = ABigObject | BBigObject | CBigObject | DBigObject | EBigObject | FBigObject | GBigObject | HBigObject | IBigObject | JBigObject | KBigObject | LBigObject | MBigObject | NBigObject | OBigObject | PBigObject | QBigObject | RBigObject | SBigObject | TBigObject | UBigObject | VBigObject | WBigObject | XBigObject | YBigObject | ZBigObject\n\ntype ABigObject {\n aFieldOnABigObject: String!\n bFieldOnABigObject: Int!\n cFieldOnABigObject: Boolean!\n dFieldOnABigObject: Float!\n eFieldOnABigObject: String!\n fFieldOnABigObject: Int!\n gFieldOnABigObject: Boolean!\n hFieldOnABigObject: Float!\n iFieldOnABigObject: String!\n jFieldOnABigObject: Int!\n kFieldOnABigObject: Boolean!\n lFieldOnABigObject: Float!\n mFieldOnABigObject: String!\n nFieldOnABigObject: Int!\n oFieldOnABigObject: Boolean!\n pFieldOnABigObject: Float!\n qFieldOnABigObject: String!\n rFieldOnABigObject: Int!\n sFieldOnABigObject: Boolean!\n tFieldOnABigObject: Float!\n uFieldOnABigObject: String!\n vFieldOnABigObject: Int!\n wFieldOnABigObject: Boolean!\n xFieldOnABigObject: Float!\n yFieldOnABigObject: String!\n zFieldOnABigObject: Int!\n}\n\ntype BBigObject {\n aFieldOnBBigObject: String!\n bFieldOnBBigObject: Int!\n cFieldOnBBigObject: Boolean!\n dFieldOnBBigObject: Float!\n eFieldOnBBigObject: String!\n fFieldOnBBigObject: Int!\n gFieldOnBBigObject: Boolean!\n hFieldOnBBigObject: Float!\n iFieldOnBBigObject: String!\n jFieldOnBBigObject: Int!\n kFieldOnBBigObject: Boolean!\n lFieldOnBBigObject: Float!\n mFieldOnBBigObject: String!\n nFieldOnBBigObject: Int!\n oFieldOnBBigObject: Boolean!\n pFieldOnBBigObject: Float!\n qFieldOnBBigObject: String!\n rFieldOnBBigObject: Int!\n sFieldOnBBigObject: Boolean!\n tFieldOnBBigObject: Float!\n uFieldOnBBigObject: String!\n vFieldOnBBigObject: Int!\n wFieldOnBBigObject: Boolean!\n xFieldOnBBigObject: Float!\n yFieldOnBBigObject: String!\n zFieldOnBBigObject: Int!\n}\n\ntype CBigObject {\n aFieldOnCBigObject: String!\n bFieldOnCBigObject: Int!\n cFieldOnCBigObject: Boolean!\n dFieldOnCBigObject: Float!\n eFieldOnCBigObject: String!\n fFieldOnCBigObject: Int!\n gFieldOnCBigObject: Boolean!\n hFieldOnCBigObject: Float!\n iFieldOnCBigObject: String!\n jFieldOnCBigObject: Int!\n kFieldOnCBigObject: Boolean!\n lFieldOnCBigObject: Float!\n mFieldOnCBigObject: String!\n nFieldOnCBigObject: Int!\n oFieldOnCBigObject: Boolean!\n pFieldOnCBigObject: Float!\n qFieldOnCBigObject: String!\n rFieldOnCBigObject: Int!\n sFieldOnCBigObject: Boolean!\n tFieldOnCBigObject: Float!\n uFieldOnCBigObject: String!\n vFieldOnCBigObject: Int!\n wFieldOnCBigObject: Boolean!\n xFieldOnCBigObject: Float!\n yFieldOnCBigObject: String!\n zFieldOnCBigObject: Int!\n}\n\ntype DBigObject {\n aFieldOnDBigObject: String!\n bFieldOnDBigObject: Int!\n cFieldOnDBigObject: Boolean!\n dFieldOnDBigObject: Float!\n eFieldOnDBigObject: String!\n fFieldOnDBigObject: Int!\n gFieldOnDBigObject: Boolean!\n hFieldOnDBigObject: Float!\n iFieldOnDBigObject: String!\n jFieldOnDBigObject: Int!\n kFieldOnDBigObject: Boolean!\n lFieldOnDBigObject: Float!\n mFieldOnDBigObject: String!\n nFieldOnDBigObject: Int!\n oFieldOnDBigObject: Boolean!\n pFieldOnDBigObject: Float!\n qFieldOnDBigObject: String!\n rFieldOnDBigObject: Int!\n sFieldOnDBigObject: Boolean!\n tFieldOnDBigObject: Float!\n uFieldOnDBigObject: String!\n vFieldOnDBigObject: Int!\n wFieldOnDBigObject: Boolean!\n xFieldOnDBigObject: Float!\n yFieldOnDBigObject: String!\n zFieldOnDBigObject: Int!\n}\n\ntype EBigObject {\n aFieldOnEBigObject: String!\n bFieldOnEBigObject: Int!\n cFieldOnEBigObject: Boolean!\n dFieldOnEBigObject: Float!\n eFieldOnEBigObject: String!\n fFieldOnEBigObject: Int!\n gFieldOnEBigObject: Boolean!\n hFieldOnEBigObject: Float!\n iFieldOnEBigObject: String!\n jFieldOnEBigObject: Int!\n kFieldOnEBigObject: Boolean!\n lFieldOnEBigObject: Float!\n mFieldOnEBigObject: String!\n nFieldOnEBigObject: Int!\n oFieldOnEBigObject: Boolean!\n pFieldOnEBigObject: Float!\n qFieldOnEBigObject: String!\n rFieldOnEBigObject: Int!\n sFieldOnEBigObject: Boolean!\n tFieldOnEBigObject: Float!\n uFieldOnEBigObject: String!\n vFieldOnEBigObject: Int!\n wFieldOnEBigObject: Boolean!\n xFieldOnEBigObject: Float!\n yFieldOnEBigObject: String!\n zFieldOnEBigObject: Int!\n}\n\ntype FBigObject {\n aFieldOnFBigObject: String!\n bFieldOnFBigObject: Int!\n cFieldOnFBigObject: Boolean!\n dFieldOnFBigObject: Float!\n eFieldOnFBigObject: String!\n fFieldOnFBigObject: Int!\n gFieldOnFBigObject: Boolean!\n hFieldOnFBigObject: Float!\n iFieldOnFBigObject: String!\n jFieldOnFBigObject: Int!\n kFieldOnFBigObject: Boolean!\n lFieldOnFBigObject: Float!\n mFieldOnFBigObject: String!\n nFieldOnFBigObject: Int!\n oFieldOnFBigObject: Boolean!\n pFieldOnFBigObject: Float!\n qFieldOnFBigObject: String!\n rFieldOnFBigObject: Int!\n sFieldOnFBigObject: Boolean!\n tFieldOnFBigObject: Float!\n uFieldOnFBigObject: String!\n vFieldOnFBigObject: Int!\n wFieldOnFBigObject: Boolean!\n xFieldOnFBigObject: Float!\n yFieldOnFBigObject: String!\n zFieldOnFBigObject: Int!\n}\n\ntype GBigObject {\n aFieldOnGBigObject: String!\n bFieldOnGBigObject: Int!\n cFieldOnGBigObject: Boolean!\n dFieldOnGBigObject: Float!\n eFieldOnGBigObject: String!\n fFieldOnGBigObject: Int!\n gFieldOnGBigObject: Boolean!\n hFieldOnGBigObject: Float!\n iFieldOnGBigObject: String!\n jFieldOnGBigObject: Int!\n kFieldOnGBigObject: Boolean!\n lFieldOnGBigObject: Float!\n mFieldOnGBigObject: String!\n nFieldOnGBigObject: Int!\n oFieldOnGBigObject: Boolean!\n pFieldOnGBigObject: Float!\n qFieldOnGBigObject: String!\n rFieldOnGBigObject: Int!\n sFieldOnGBigObject: Boolean!\n tFieldOnGBigObject: Float!\n uFieldOnGBigObject: String!\n vFieldOnGBigObject: Int!\n wFieldOnGBigObject: Boolean!\n xFieldOnGBigObject: Float!\n yFieldOnGBigObject: String!\n zFieldOnGBigObject: Int!\n}\n\ntype HBigObject {\n aFieldOnHBigObject: String!\n bFieldOnHBigObject: Int!\n cFieldOnHBigObject: Boolean!\n dFieldOnHBigObject: Float!\n eFieldOnHBigObject: String!\n fFieldOnHBigObject: Int!\n gFieldOnHBigObject: Boolean!\n hFieldOnHBigObject: Float!\n iFieldOnHBigObject: String!\n jFieldOnHBigObject: Int!\n kFieldOnHBigObject: Boolean!\n lFieldOnHBigObject: Float!\n mFieldOnHBigObject: String!\n nFieldOnHBigObject: Int!\n oFieldOnHBigObject: Boolean!\n pFieldOnHBigObject: Float!\n qFieldOnHBigObject: String!\n rFieldOnHBigObject: Int!\n sFieldOnHBigObject: Boolean!\n tFieldOnHBigObject: Float!\n uFieldOnHBigObject: String!\n vFieldOnHBigObject: Int!\n wFieldOnHBigObject: Boolean!\n xFieldOnHBigObject: Float!\n yFieldOnHBigObject: String!\n zFieldOnHBigObject: Int!\n}\n\ntype IBigObject {\n aFieldOnIBigObject: String!\n bFieldOnIBigObject: Int!\n cFieldOnIBigObject: Boolean!\n dFieldOnIBigObject: Float!\n eFieldOnIBigObject: String!\n fFieldOnIBigObject: Int!\n gFieldOnIBigObject: Boolean!\n hFieldOnIBigObject: Float!\n iFieldOnIBigObject: String!\n jFieldOnIBigObject: Int!\n kFieldOnIBigObject: Boolean!\n lFieldOnIBigObject: Float!\n mFieldOnIBigObject: String!\n nFieldOnIBigObject: Int!\n oFieldOnIBigObject: Boolean!\n pFieldOnIBigObject: Float!\n qFieldOnIBigObject: String!\n rFieldOnIBigObject: Int!\n sFieldOnIBigObject: Boolean!\n tFieldOnIBigObject: Float!\n uFieldOnIBigObject: String!\n vFieldOnIBigObject: Int!\n wFieldOnIBigObject: Boolean!\n xFieldOnIBigObject: Float!\n yFieldOnIBigObject: String!\n zFieldOnIBigObject: Int!\n}\n\ntype JBigObject {\n aFieldOnJBigObject: String!\n bFieldOnJBigObject: Int!\n cFieldOnJBigObject: Boolean!\n dFieldOnJBigObject: Float!\n eFieldOnJBigObject: String!\n fFieldOnJBigObject: Int!\n gFieldOnJBigObject: Boolean!\n hFieldOnJBigObject: Float!\n iFieldOnJBigObject: String!\n jFieldOnJBigObject: Int!\n kFieldOnJBigObject: Boolean!\n lFieldOnJBigObject: Float!\n mFieldOnJBigObject: String!\n nFieldOnJBigObject: Int!\n oFieldOnJBigObject: Boolean!\n pFieldOnJBigObject: Float!\n qFieldOnJBigObject: String!\n rFieldOnJBigObject: Int!\n sFieldOnJBigObject: Boolean!\n tFieldOnJBigObject: Float!\n uFieldOnJBigObject: String!\n vFieldOnJBigObject: Int!\n wFieldOnJBigObject: Boolean!\n xFieldOnJBigObject: Float!\n yFieldOnJBigObject: String!\n zFieldOnJBigObject: Int!\n}\n\ntype KBigObject {\n aFieldOnKBigObject: String!\n bFieldOnKBigObject: Int!\n cFieldOnKBigObject: Boolean!\n dFieldOnKBigObject: Float!\n eFieldOnKBigObject: String!\n fFieldOnKBigObject: Int!\n gFieldOnKBigObject: Boolean!\n hFieldOnKBigObject: Float!\n iFieldOnKBigObject: String!\n jFieldOnKBigObject: Int!\n kFieldOnKBigObject: Boolean!\n lFieldOnKBigObject: Float!\n mFieldOnKBigObject: String!\n nFieldOnKBigObject: Int!\n oFieldOnKBigObject: Boolean!\n pFieldOnKBigObject: Float!\n qFieldOnKBigObject: String!\n rFieldOnKBigObject: Int!\n sFieldOnKBigObject: Boolean!\n tFieldOnKBigObject: Float!\n uFieldOnKBigObject: String!\n vFieldOnKBigObject: Int!\n wFieldOnKBigObject: Boolean!\n xFieldOnKBigObject: Float!\n yFieldOnKBigObject: String!\n zFieldOnKBigObject: Int!\n}\n\ntype LBigObject {\n aFieldOnLBigObject: String!\n bFieldOnLBigObject: Int!\n cFieldOnLBigObject: Boolean!\n dFieldOnLBigObject: Float!\n eFieldOnLBigObject: String!\n fFieldOnLBigObject: Int!\n gFieldOnLBigObject: Boolean!\n hFieldOnLBigObject: Float!\n iFieldOnLBigObject: String!\n jFieldOnLBigObject: Int!\n kFieldOnLBigObject: Boolean!\n lFieldOnLBigObject: Float!\n mFieldOnLBigObject: String!\n nFieldOnLBigObject: Int!\n oFieldOnLBigObject: Boolean!\n pFieldOnLBigObject: Float!\n qFieldOnLBigObject: String!\n rFieldOnLBigObject: Int!\n sFieldOnLBigObject: Boolean!\n tFieldOnLBigObject: Float!\n uFieldOnLBigObject: String!\n vFieldOnLBigObject: Int!\n wFieldOnLBigObject: Boolean!\n xFieldOnLBigObject: Float!\n yFieldOnLBigObject: String!\n zFieldOnLBigObject: Int!\n}\n\ntype MBigObject {\n aFieldOnMBigObject: String!\n bFieldOnMBigObject: Int!\n cFieldOnMBigObject: Boolean!\n dFieldOnMBigObject: Float!\n eFieldOnMBigObject: String!\n fFieldOnMBigObject: Int!\n gFieldOnMBigObject: Boolean!\n hFieldOnMBigObject: Float!\n iFieldOnMBigObject: String!\n jFieldOnMBigObject: Int!\n kFieldOnMBigObject: Boolean!\n lFieldOnMBigObject: Float!\n mFieldOnMBigObject: String!\n nFieldOnMBigObject: Int!\n oFieldOnMBigObject: Boolean!\n pFieldOnMBigObject: Float!\n qFieldOnMBigObject: String!\n rFieldOnMBigObject: Int!\n sFieldOnMBigObject: Boolean!\n tFieldOnMBigObject: Float!\n uFieldOnMBigObject: String!\n vFieldOnMBigObject: Int!\n wFieldOnMBigObject: Boolean!\n xFieldOnMBigObject: Float!\n yFieldOnMBigObject: String!\n zFieldOnMBigObject: Int!\n}\n\ntype NBigObject {\n aFieldOnNBigObject: String!\n bFieldOnNBigObject: Int!\n cFieldOnNBigObject: Boolean!\n dFieldOnNBigObject: Float!\n eFieldOnNBigObject: String!\n fFieldOnNBigObject: Int!\n gFieldOnNBigObject: Boolean!\n hFieldOnNBigObject: Float!\n iFieldOnNBigObject: String!\n jFieldOnNBigObject: Int!\n kFieldOnNBigObject: Boolean!\n lFieldOnNBigObject: Float!\n mFieldOnNBigObject: String!\n nFieldOnNBigObject: Int!\n oFieldOnNBigObject: Boolean!\n pFieldOnNBigObject: Float!\n qFieldOnNBigObject: String!\n rFieldOnNBigObject: Int!\n sFieldOnNBigObject: Boolean!\n tFieldOnNBigObject: Float!\n uFieldOnNBigObject: String!\n vFieldOnNBigObject: Int!\n wFieldOnNBigObject: Boolean!\n xFieldOnNBigObject: Float!\n yFieldOnNBigObject: String!\n zFieldOnNBigObject: Int!\n}\n\ntype OBigObject {\n aFieldOnOBigObject: String!\n bFieldOnOBigObject: Int!\n cFieldOnOBigObject: Boolean!\n dFieldOnOBigObject: Float!\n eFieldOnOBigObject: String!\n fFieldOnOBigObject: Int!\n gFieldOnOBigObject: Boolean!\n hFieldOnOBigObject: Float!\n iFieldOnOBigObject: String!\n jFieldOnOBigObject: Int!\n kFieldOnOBigObject: Boolean!\n lFieldOnOBigObject: Float!\n mFieldOnOBigObject: String!\n nFieldOnOBigObject: Int!\n oFieldOnOBigObject: Boolean!\n pFieldOnOBigObject: Float!\n qFieldOnOBigObject: String!\n rFieldOnOBigObject: Int!\n sFieldOnOBigObject: Boolean!\n tFieldOnOBigObject: Float!\n uFieldOnOBigObject: String!\n vFieldOnOBigObject: Int!\n wFieldOnOBigObject: Boolean!\n xFieldOnOBigObject: Float!\n yFieldOnOBigObject: String!\n zFieldOnOBigObject: Int!\n}\n\ntype PBigObject {\n aFieldOnPBigObject: String!\n bFieldOnPBigObject: Int!\n cFieldOnPBigObject: Boolean!\n dFieldOnPBigObject: Float!\n eFieldOnPBigObject: String!\n fFieldOnPBigObject: Int!\n gFieldOnPBigObject: Boolean!\n hFieldOnPBigObject: Float!\n iFieldOnPBigObject: String!\n jFieldOnPBigObject: Int!\n kFieldOnPBigObject: Boolean!\n lFieldOnPBigObject: Float!\n mFieldOnPBigObject: String!\n nFieldOnPBigObject: Int!\n oFieldOnPBigObject: Boolean!\n pFieldOnPBigObject: Float!\n qFieldOnPBigObject: String!\n rFieldOnPBigObject: Int!\n sFieldOnPBigObject: Boolean!\n tFieldOnPBigObject: Float!\n uFieldOnPBigObject: String!\n vFieldOnPBigObject: Int!\n wFieldOnPBigObject: Boolean!\n xFieldOnPBigObject: Float!\n yFieldOnPBigObject: String!\n zFieldOnPBigObject: Int!\n}\n\ntype QBigObject {\n aFieldOnQBigObject: String!\n bFieldOnQBigObject: Int!\n cFieldOnQBigObject: Boolean!\n dFieldOnQBigObject: Float!\n eFieldOnQBigObject: String!\n fFieldOnQBigObject: Int!\n gFieldOnQBigObject: Boolean!\n hFieldOnQBigObject: Float!\n iFieldOnQBigObject: String!\n jFieldOnQBigObject: Int!\n kFieldOnQBigObject: Boolean!\n lFieldOnQBigObject: Float!\n mFieldOnQBigObject: String!\n nFieldOnQBigObject: Int!\n oFieldOnQBigObject: Boolean!\n pFieldOnQBigObject: Float!\n qFieldOnQBigObject: String!\n rFieldOnQBigObject: Int!\n sFieldOnQBigObject: Boolean!\n tFieldOnQBigObject: Float!\n uFieldOnQBigObject: String!\n vFieldOnQBigObject: Int!\n wFieldOnQBigObject: Boolean!\n xFieldOnQBigObject: Float!\n yFieldOnQBigObject: String!\n zFieldOnQBigObject: Int!\n}\n\ntype RBigObject {\n aFieldOnRBigObject: String!\n bFieldOnRBigObject: Int!\n cFieldOnRBigObject: Boolean!\n dFieldOnRBigObject: Float!\n eFieldOnRBigObject: String!\n fFieldOnRBigObject: Int!\n gFieldOnRBigObject: Boolean!\n hFieldOnRBigObject: Float!\n iFieldOnRBigObject: String!\n jFieldOnRBigObject: Int!\n kFieldOnRBigObject: Boolean!\n lFieldOnRBigObject: Float!\n mFieldOnRBigObject: String!\n nFieldOnRBigObject: Int!\n oFieldOnRBigObject: Boolean!\n pFieldOnRBigObject: Float!\n qFieldOnRBigObject: String!\n rFieldOnRBigObject: Int!\n sFieldOnRBigObject: Boolean!\n tFieldOnRBigObject: Float!\n uFieldOnRBigObject: String!\n vFieldOnRBigObject: Int!\n wFieldOnRBigObject: Boolean!\n xFieldOnRBigObject: Float!\n yFieldOnRBigObject: String!\n zFieldOnRBigObject: Int!\n}\n\ntype SBigObject {\n aFieldOnSBigObject: String!\n bFieldOnSBigObject: Int!\n cFieldOnSBigObject: Boolean!\n dFieldOnSBigObject: Float!\n eFieldOnSBigObject: String!\n fFieldOnSBigObject: Int!\n gFieldOnSBigObject: Boolean!\n hFieldOnSBigObject: Float!\n iFieldOnSBigObject: String!\n jFieldOnSBigObject: Int!\n kFieldOnSBigObject: Boolean!\n lFieldOnSBigObject: Float!\n mFieldOnSBigObject: String!\n nFieldOnSBigObject: Int!\n oFieldOnSBigObject: Boolean!\n pFieldOnSBigObject: Float!\n qFieldOnSBigObject: String!\n rFieldOnSBigObject: Int!\n sFieldOnSBigObject: Boolean!\n tFieldOnSBigObject: Float!\n uFieldOnSBigObject: String!\n vFieldOnSBigObject: Int!\n wFieldOnSBigObject: Boolean!\n xFieldOnSBigObject: Float!\n yFieldOnSBigObject: String!\n zFieldOnSBigObject: Int!\n}\n\ntype TBigObject {\n aFieldOnTBigObject: String!\n bFieldOnTBigObject: Int!\n cFieldOnTBigObject: Boolean!\n dFieldOnTBigObject: Float!\n eFieldOnTBigObject: String!\n fFieldOnTBigObject: Int!\n gFieldOnTBigObject: Boolean!\n hFieldOnTBigObject: Float!\n iFieldOnTBigObject: String!\n jFieldOnTBigObject: Int!\n kFieldOnTBigObject: Boolean!\n lFieldOnTBigObject: Float!\n mFieldOnTBigObject: String!\n nFieldOnTBigObject: Int!\n oFieldOnTBigObject: Boolean!\n pFieldOnTBigObject: Float!\n qFieldOnTBigObject: String!\n rFieldOnTBigObject: Int!\n sFieldOnTBigObject: Boolean!\n tFieldOnTBigObject: Float!\n uFieldOnTBigObject: String!\n vFieldOnTBigObject: Int!\n wFieldOnTBigObject: Boolean!\n xFieldOnTBigObject: Float!\n yFieldOnTBigObject: String!\n zFieldOnTBigObject: Int!\n}\n\ntype UBigObject {\n aFieldOnUBigObject: String!\n bFieldOnUBigObject: Int!\n cFieldOnUBigObject: Boolean!\n dFieldOnUBigObject: Float!\n eFieldOnUBigObject: String!\n fFieldOnUBigObject: Int!\n gFieldOnUBigObject: Boolean!\n hFieldOnUBigObject: Float!\n iFieldOnUBigObject: String!\n jFieldOnUBigObject: Int!\n kFieldOnUBigObject: Boolean!\n lFieldOnUBigObject: Float!\n mFieldOnUBigObject: String!\n nFieldOnUBigObject: Int!\n oFieldOnUBigObject: Boolean!\n pFieldOnUBigObject: Float!\n qFieldOnUBigObject: String!\n rFieldOnUBigObject: Int!\n sFieldOnUBigObject: Boolean!\n tFieldOnUBigObject: Float!\n uFieldOnUBigObject: String!\n vFieldOnUBigObject: Int!\n wFieldOnUBigObject: Boolean!\n xFieldOnUBigObject: Float!\n yFieldOnUBigObject: String!\n zFieldOnUBigObject: Int!\n}\n\ntype VBigObject {\n aFieldOnVBigObject: String!\n bFieldOnVBigObject: Int!\n cFieldOnVBigObject: Boolean!\n dFieldOnVBigObject: Float!\n eFieldOnVBigObject: String!\n fFieldOnVBigObject: Int!\n gFieldOnVBigObject: Boolean!\n hFieldOnVBigObject: Float!\n iFieldOnVBigObject: String!\n jFieldOnVBigObject: Int!\n kFieldOnVBigObject: Boolean!\n lFieldOnVBigObject: Float!\n mFieldOnVBigObject: String!\n nFieldOnVBigObject: Int!\n oFieldOnVBigObject: Boolean!\n pFieldOnVBigObject: Float!\n qFieldOnVBigObject: String!\n rFieldOnVBigObject: Int!\n sFieldOnVBigObject: Boolean!\n tFieldOnVBigObject: Float!\n uFieldOnVBigObject: String!\n vFieldOnVBigObject: Int!\n wFieldOnVBigObject: Boolean!\n xFieldOnVBigObject: Float!\n yFieldOnVBigObject: String!\n zFieldOnVBigObject: Int!\n}\n\ntype WBigObject {\n aFieldOnWBigObject: String!\n bFieldOnWBigObject: Int!\n cFieldOnWBigObject: Boolean!\n dFieldOnWBigObject: Float!\n eFieldOnWBigObject: String!\n fFieldOnWBigObject: Int!\n gFieldOnWBigObject: Boolean!\n hFieldOnWBigObject: Float!\n iFieldOnWBigObject: String!\n jFieldOnWBigObject: Int!\n kFieldOnWBigObject: Boolean!\n lFieldOnWBigObject: Float!\n mFieldOnWBigObject: String!\n nFieldOnWBigObject: Int!\n oFieldOnWBigObject: Boolean!\n pFieldOnWBigObject: Float!\n qFieldOnWBigObject: String!\n rFieldOnWBigObject: Int!\n sFieldOnWBigObject: Boolean!\n tFieldOnWBigObject: Float!\n uFieldOnWBigObject: String!\n vFieldOnWBigObject: Int!\n wFieldOnWBigObject: Boolean!\n xFieldOnWBigObject: Float!\n yFieldOnWBigObject: String!\n zFieldOnWBigObject: Int!\n}\n\ntype XBigObject {\n aFieldOnXBigObject: String!\n bFieldOnXBigObject: Int!\n cFieldOnXBigObject: Boolean!\n dFieldOnXBigObject: Float!\n eFieldOnXBigObject: String!\n fFieldOnXBigObject: Int!\n gFieldOnXBigObject: Boolean!\n hFieldOnXBigObject: Float!\n iFieldOnXBigObject: String!\n jFieldOnXBigObject: Int!\n kFieldOnXBigObject: Boolean!\n lFieldOnXBigObject: Float!\n mFieldOnXBigObject: String!\n nFieldOnXBigObject: Int!\n oFieldOnXBigObject: Boolean!\n pFieldOnXBigObject: Float!\n qFieldOnXBigObject: String!\n rFieldOnXBigObject: Int!\n sFieldOnXBigObject: Boolean!\n tFieldOnXBigObject: Float!\n uFieldOnXBigObject: String!\n vFieldOnXBigObject: Int!\n wFieldOnXBigObject: Boolean!\n xFieldOnXBigObject: Float!\n yFieldOnXBigObject: String!\n zFieldOnXBigObject: Int!\n}\n\ntype YBigObject {\n aFieldOnYBigObject: String!\n bFieldOnYBigObject: Int!\n cFieldOnYBigObject: Boolean!\n dFieldOnYBigObject: Float!\n eFieldOnYBigObject: String!\n fFieldOnYBigObject: Int!\n gFieldOnYBigObject: Boolean!\n hFieldOnYBigObject: Float!\n iFieldOnYBigObject: String!\n jFieldOnYBigObject: Int!\n kFieldOnYBigObject: Boolean!\n lFieldOnYBigObject: Float!\n mFieldOnYBigObject: String!\n nFieldOnYBigObject: Int!\n oFieldOnYBigObject: Boolean!\n pFieldOnYBigObject: Float!\n qFieldOnYBigObject: String!\n rFieldOnYBigObject: Int!\n sFieldOnYBigObject: Boolean!\n tFieldOnYBigObject: Float!\n uFieldOnYBigObject: String!\n vFieldOnYBigObject: Int!\n wFieldOnYBigObject: Boolean!\n xFieldOnYBigObject: Float!\n yFieldOnYBigObject: String!\n zFieldOnYBigObject: Int!\n}\n\ntype ZBigObject {\n aFieldOnZBigObject: String!\n bFieldOnZBigObject: Int!\n cFieldOnZBigObject: Boolean!\n dFieldOnZBigObject: Float!\n eFieldOnZBigObject: String!\n fFieldOnZBigObject: Int!\n gFieldOnZBigObject: Boolean!\n hFieldOnZBigObject: Float!\n iFieldOnZBigObject: String!\n jFieldOnZBigObject: Int!\n kFieldOnZBigObject: Boolean!\n lFieldOnZBigObject: Float!\n mFieldOnZBigObject: String!\n nFieldOnZBigObject: Int!\n oFieldOnZBigObject: Boolean!\n pFieldOnZBigObject: Float!\n qFieldOnZBigObject: String!\n rFieldOnZBigObject: Int!\n sFieldOnZBigObject: Boolean!\n tFieldOnZBigObject: Float!\n uFieldOnZBigObject: String!\n vFieldOnZBigObject: Int!\n wFieldOnZBigObject: Boolean!\n xFieldOnZBigObject: Float!\n yFieldOnZBigObject: String!\n zFieldOnZBigObject: Int!\n}\n\nscalar openfed__SubscriptionFilterValue\n\ninput openfed__SubscriptionFieldCondition {\n fieldPath: String!\n values: [openfed__SubscriptionFilterValue]!\n}\n\ninput openfed__SubscriptionFilterCondition {\n AND: [openfed__SubscriptionFilterCondition!]\n IN: openfed__SubscriptionFieldCondition\n NOT: openfed__SubscriptionFilterCondition\n OR: [openfed__SubscriptionFilterCondition!]\n}\n\ninput UpdateEmployeeInput {\n name: String\n email: String\n}\n\ninput KafkaInput {\n ids: [Int!]!\n}\n\ntype edfs__PublishResult {\n success: Boolean!\n}\n\ntype Engineer implements RoleType {\n departments: [Department!]!\n title: [String!]!\n employees: [Employee!]!\n engineerType: EngineerType!\n}\n\ntype Marketer implements RoleType {\n departments: [Department!]!\n title: [String!]!\n employees: [Employee!]!\n}\n\ntype Operator implements RoleType {\n departments: [Department!]!\n title: [String!]!\n employees: [Employee!]!\n operatorType: [OperationType!]!\n}\n\ntype Employee implements Identifiable {\n details: Details\n id: Int!\n tag: String!\n role: RoleType!\n notes: String\n updatedAt: String!\n startDate: String! @requiresScopes(scopes: [[\"read:employee\", \"read:private\"], [\"read:all\"]])\n currentMood: Mood!\n derivedMood: Mood!\n isAvailable: Boolean!\n rootFieldThrowsError: String\n rootFieldErrorWrapper: ErrorWrapper\n hobbies: [Hobby!]\n products: [ProductName!]!\n productCount: Int!\n fieldThrowsError: String\n}\n\ntype Cosmo implements IProduct {\n upc: ID!\n engineers: [Employee!]!\n lead: Employee!\n name: ProductName!\n repositoryURL: String!\n}\n\ntype SDK implements IProduct {\n upc: ID!\n engineers: [Employee!]!\n owner: Employee!\n unicode: String!\n clientLanguages: [ProgrammingLanguage!]!\n}\n\ninterface Pet implements Animal {\n class: Class!\n gender: Gender!\n name: String!\n}\n\ntype Alligator implements Pet & Animal {\n class: Class!\n dangerous: String!\n gender: Gender!\n name: String!\n}\n\ntype Cat implements Pet & Animal {\n class: Class!\n gender: Gender!\n name: String!\n type: CatType!\n}\n\ntype Dog implements Pet & Animal {\n breed: DogBreed!\n class: Class!\n gender: Gender!\n name: String!\n}\n\ntype Mouse implements Pet & Animal {\n class: Class!\n gender: Gender!\n name: String!\n}\n\ntype Pony implements Pet & Animal {\n class: Class!\n gender: Gender!\n name: String!\n}\n\ntype Exercise implements Hobby {\n employees: [Employee!]!\n category: ExerciseType!\n}\n\ntype Flying implements Experience & Hobby {\n employees: [Employee!]!\n planeModels: [String!]!\n yearsOfExperience: Float!\n}\n\ntype Gaming implements Experience & Hobby {\n employees: [Employee!]!\n genres: [GameGenre!]!\n name: String!\n yearsOfExperience: Float!\n}\n\ntype Other implements Hobby {\n employees: [Employee!]!\n name: String!\n}\n\ntype Programming implements Hobby {\n employees: [Employee!]!\n languages: [ProgrammingLanguage!]!\n}\n\ntype Travelling implements Hobby {\n employees: [Employee!]!\n countriesLived: [Country!]!\n}\n\ntype DirectiveFact implements TopSecretFact @authenticated {\n title: String!\n description: FactContent!\n factType: TopSecretFactType\n}\n\ntype EntityFact implements TopSecretFact @requiresScopes(scopes: [[\"read:entity\"]]) {\n title: String!\n description: FactContent!\n factType: TopSecretFactType\n}\n\ntype MiscellaneousFact implements TopSecretFact {\n title: String!\n description: FactContent! @requiresScopes(scopes: [[\"read:miscellaneous\"]])\n factType: TopSecretFactType\n}", + "stringStorage": { + "2ebeba33065ef483f119d0097b7cfab1bfe2e1a7": "schema {\n query: Query\n mutation: Mutation\n subscription: Subscription\n}\n\ndirective @authenticated on ENUM | FIELD_DEFINITION | INTERFACE | OBJECT | SCALAR\n\ndirective @composeDirective(name: String!) repeatable on SCHEMA\n\ndirective @extends on INTERFACE | OBJECT\n\ndirective @external on FIELD_DEFINITION | OBJECT\n\ndirective @goField(forceResolver: Boolean, name: String, omittable: Boolean) on FIELD_DEFINITION | INPUT_FIELD_DEFINITION\n\ndirective @inaccessible on ARGUMENT_DEFINITION | ENUM | ENUM_VALUE | FIELD_DEFINITION | INPUT_FIELD_DEFINITION | INPUT_OBJECT | INTERFACE | OBJECT | SCALAR | UNION\n\ndirective @interfaceObject on OBJECT\n\ndirective @key(fields: openfed__FieldSet!, resolvable: Boolean = true) repeatable on INTERFACE | OBJECT\n\ndirective @override(from: String!) on FIELD_DEFINITION\n\ndirective @provides(fields: openfed__FieldSet!) on FIELD_DEFINITION\n\ndirective @requires(fields: openfed__FieldSet!) on FIELD_DEFINITION\n\ndirective @requiresScopes(scopes: [[openfed__Scope!]!]!) on ENUM | FIELD_DEFINITION | INTERFACE | OBJECT | SCALAR\n\ndirective @shareable repeatable on FIELD_DEFINITION | OBJECT\n\ndirective @tag(name: String!) repeatable on ARGUMENT_DEFINITION | ENUM | ENUM_VALUE | FIELD_DEFINITION | INPUT_FIELD_DEFINITION | INPUT_OBJECT | INTERFACE | OBJECT | SCALAR | UNION\n\ntype City {\n country: Country\n name: String!\n type: String!\n}\n\ntype Consultancy @key(fields: \"upc\") {\n isLeadAvailable: Boolean @requires(fields: \"lead { isAvailable }\")\n lead: Employee!\n upc: ID!\n}\n\ntype Cosmo implements IProduct @key(fields: \"upc\") {\n engineers: [Employee!]!\n lead: Employee!\n upc: ID!\n}\n\ntype Country @key(fields: \"key { name }\", resolvable: false) {\n key: CountryKey!\n}\n\ntype CountryKey {\n name: String!\n}\n\ninput DeeplyNestedFileUpload {\n file: Upload!\n}\n\nenum Department {\n ENGINEERING\n MARKETING\n OPERATIONS\n}\n\ntype Details {\n forename: String! @shareable\n location: Country!\n pastLocations: [City!]!\n surname: String! @shareable\n}\n\ntype Employee implements Identifiable @key(fields: \"id\") {\n currentMood: Mood! @external\n derivedMood: Mood! @requires(fields: \"currentMood\")\n details: Details! @shareable\n id: Int!\n isAvailable: Boolean! @external\n notes: String @shareable\n role: RoleType!\n rootFieldErrorWrapper: ErrorWrapper @goField(forceResolver: true)\n rootFieldThrowsError: String @goField(forceResolver: true)\n startDate: String! @requiresScopes(scopes: [[\"read:employee\", \"read:private\"], [\"read:all\"]])\n tag: String!\n updatedAt: String!\n}\n\ntype Engineer implements RoleType {\n departments: [Department!]!\n employees: [Employee!]! @goField(forceResolver: true)\n engineerType: EngineerType!\n title: [String!]!\n}\n\nenum EngineerType {\n BACKEND\n FRONTEND\n FULLSTACK\n}\n\ntype ErrorWrapper {\n errorField: String @goField(forceResolver: true)\n okField: String\n}\n\ninput FileUpload {\n nested: DeeplyNestedFileUpload\n nestedList: [Upload!]\n}\n\ninterface IProduct {\n engineers: [Employee!]!\n upc: ID!\n}\n\ninterface Identifiable {\n id: Int!\n}\n\ntype Marketer implements RoleType {\n departments: [Department!]!\n employees: [Employee!]! @goField(forceResolver: true)\n title: [String!]!\n}\n\nenum Mood {\n HAPPY\n SAD\n}\n\ntype Mutation {\n multipleUpload(files: [Upload!]!): Boolean!\n singleUpload(file: Upload!): Boolean!\n singleUploadWithInput(arg: FileUpload!): Boolean!\n updateEmployeeTag(id: Int!, tag: String!): Employee\n}\n\nenum OperationType {\n FINANCE\n HUMAN_RESOURCES\n}\n\ntype Operator implements RoleType {\n departments: [Department!]!\n employees: [Employee!]! @goField(forceResolver: true)\n operatorType: [OperationType!]!\n title: [String!]!\n}\n\nunion Products = Consultancy | Cosmo | SDK\n\ntype Query {\n employee(id: Int!): Employee\n employeeAsList(id: Int!): [Employee]\n employees: [Employee]\n firstEmployee: Employee! @tag(name: \"internal\")\n products: [Products!]!\n teammates(team: Department!): [Employee!]!\n}\n\ninterface RoleType {\n departments: [Department!]!\n employees: [Employee!]! @goField(forceResolver: true)\n title: [String!]!\n}\n\ntype SDK implements IProduct @key(fields: \"upc\") {\n engineers: [Employee!]!\n owner: Employee!\n unicode: String!\n upc: ID!\n}\n\ntype Subscription {\n countEmp(intervalMilliseconds: Int!, max: Int!): Int!\n countEmp2(intervalMilliseconds: Int!, max: Int!): Int!\n countFor(count: Int!): Int!\n \"\"\"`currentTime` will return a stream of `Time` objects.\"\"\"\n currentTime: Time!\n}\n\ntype Time {\n timeStamp: String!\n unixTime: Int!\n}\n\nscalar Upload\n\nscalar openfed__FieldSet\n\nscalar openfed__Scope", + "6618be4cd5102db58a9821e09dfa49eec9262146": "schema {\n query: Query\n}\n\ndirective @authenticated on ENUM | FIELD_DEFINITION | INTERFACE | OBJECT | SCALAR\n\ndirective @composeDirective(name: String!) repeatable on SCHEMA\n\ndirective @extends on INTERFACE | OBJECT\n\ndirective @external on FIELD_DEFINITION | OBJECT\n\ndirective @inaccessible on ARGUMENT_DEFINITION | ENUM | ENUM_VALUE | FIELD_DEFINITION | INPUT_FIELD_DEFINITION | INPUT_OBJECT | INTERFACE | OBJECT | SCALAR | UNION\n\ndirective @interfaceObject on OBJECT\n\ndirective @key(fields: openfed__FieldSet!, resolvable: Boolean = true) repeatable on INTERFACE | OBJECT\n\ndirective @override(from: String!) on FIELD_DEFINITION\n\ndirective @provides(fields: openfed__FieldSet!) on FIELD_DEFINITION\n\ndirective @requires(fields: openfed__FieldSet!) on FIELD_DEFINITION\n\ndirective @requiresScopes(scopes: [[openfed__Scope!]!]!) on ENUM | FIELD_DEFINITION | INTERFACE | OBJECT | SCALAR\n\ndirective @shareable repeatable on FIELD_DEFINITION | OBJECT\n\ndirective @tag(name: String!) repeatable on ARGUMENT_DEFINITION | ENUM | ENUM_VALUE | FIELD_DEFINITION | INPUT_FIELD_DEFINITION | INPUT_OBJECT | INTERFACE | OBJECT | SCALAR | UNION\n\ntype Alligator implements Animal & Pet {\n class: Class!\n dangerous: String!\n gender: Gender!\n name: String!\n}\n\ninterface Animal {\n class: Class!\n gender: Gender!\n}\n\ntype Cat implements Animal & Pet {\n class: Class!\n gender: Gender!\n name: String!\n type: CatType!\n}\n\nenum CatType {\n HOME\n STREET\n}\n\nenum Class {\n FISH\n MAMMAL\n REPTILE\n}\n\ntype Details {\n forename: String! @shareable\n hasChildren: Boolean!\n maritalStatus: MaritalStatus\n middlename: String @deprecated\n nationality: Nationality!\n pets: [Pet]\n surname: String! @shareable\n}\n\ntype Dog implements Animal & Pet {\n breed: DogBreed!\n class: Class!\n gender: Gender!\n name: String!\n}\n\nenum DogBreed {\n GOLDEN_RETRIEVER\n POODLE\n ROTTWEILER\n YORKSHIRE_TERRIER\n}\n\ntype Employee @key(fields: \"id\") {\n details: Details @shareable\n id: Int!\n}\n\nenum Gender {\n FEMALE\n MALE\n UNKNOWN\n}\n\nenum MaritalStatus {\n ENGAGED\n MARRIED\n}\n\ntype Mouse implements Animal & Pet {\n class: Class!\n gender: Gender!\n name: String!\n}\n\nenum Nationality {\n AMERICAN\n DUTCH\n ENGLISH\n GERMAN\n INDIAN\n SPANISH\n UKRAINIAN\n}\n\ninput NestedSearchInput {\n hasChildren: Boolean\n maritalStatus: MaritalStatus\n}\n\ninterface Pet implements Animal {\n class: Class!\n gender: Gender!\n name: String!\n}\n\ntype Pony implements Animal & Pet {\n class: Class!\n gender: Gender!\n name: String!\n}\n\ntype Query {\n \"\"\" This is a GraphQL query that retrieves a list of employees.\"\"\"\n findEmployees(criteria: SearchInput): [Employee!]!\n}\n\n\"\"\" Allows to filter employees by their details. \"\"\"\ninput SearchInput {\n hasPets: Boolean\n nationality: Nationality\n nested: NestedSearchInput\n}\n\nscalar openfed__FieldSet\n\nscalar openfed__Scope", + "68291c651cf7b5b50afb169bd12d2cd1ebf4ded6": "schema {\n subscription: Subscription\n}\n\ndirective @authenticated on ENUM | FIELD_DEFINITION | INTERFACE | OBJECT | SCALAR\n\ndirective @composeDirective(name: String!) repeatable on SCHEMA\n\ndirective @extends on INTERFACE | OBJECT\n\ndirective @external on FIELD_DEFINITION | OBJECT\n\ndirective @goField(forceResolver: Boolean, name: String, omittable: Boolean) on FIELD_DEFINITION | INPUT_FIELD_DEFINITION\n\ndirective @inaccessible on ARGUMENT_DEFINITION | ENUM | ENUM_VALUE | FIELD_DEFINITION | INPUT_FIELD_DEFINITION | INPUT_OBJECT | INTERFACE | OBJECT | SCALAR | UNION\n\ndirective @interfaceObject on OBJECT\n\ndirective @key(fields: openfed__FieldSet!, resolvable: Boolean = true) repeatable on INTERFACE | OBJECT\n\ndirective @override(from: String!) on FIELD_DEFINITION\n\ndirective @provides(fields: openfed__FieldSet!) on FIELD_DEFINITION\n\ndirective @requires(fields: openfed__FieldSet!) on FIELD_DEFINITION\n\ndirective @requiresScopes(scopes: [[openfed__Scope!]!]!) on ENUM | FIELD_DEFINITION | INTERFACE | OBJECT | SCALAR\n\ndirective @shareable repeatable on FIELD_DEFINITION | OBJECT\n\ndirective @tag(name: String!) repeatable on ARGUMENT_DEFINITION | ENUM | ENUM_VALUE | FIELD_DEFINITION | INPUT_FIELD_DEFINITION | INPUT_OBJECT | INTERFACE | OBJECT | SCALAR | UNION\n\ntype Country @key(fields: \"key { name }\", resolvable: false) {\n key: CountryKey!\n}\n\ntype CountryKey {\n name: String!\n}\n\ntype Employee @key(fields: \"id\") {\n hobbies: [Hobby!]\n id: Int!\n}\n\ntype Exercise implements Hobby {\n category: ExerciseType!\n employees: [Employee!]! @goField(forceResolver: true)\n}\n\nenum ExerciseType {\n CALISTHENICS\n HIKING\n SPORT\n STRENGTH_TRAINING\n}\n\ninterface Experience {\n yearsOfExperience: Float!\n}\n\ntype Flying implements Experience & Hobby {\n employees: [Employee!]! @goField(forceResolver: true)\n planeModels: [String!]!\n yearsOfExperience: Float!\n}\n\nenum GameGenre {\n ADVENTURE\n BOARD\n CARD\n FPS\n ROGUELITE\n RPG\n SIMULATION\n STRATEGY\n}\n\ntype Gaming implements Experience & Hobby {\n employees: [Employee!]! @goField(forceResolver: true)\n genres: [GameGenre!]!\n name: String!\n yearsOfExperience: Float!\n}\n\ninterface Hobby {\n employees: [Employee!]! @goField(forceResolver: true)\n}\n\ntype Other implements Hobby {\n employees: [Employee!]! @goField(forceResolver: true)\n name: String!\n}\n\ntype Programming implements Hobby {\n employees: [Employee!]! @goField(forceResolver: true)\n languages: [ProgrammingLanguage!]!\n}\n\nenum ProgrammingLanguage {\n CSHARP\n GO\n RUST\n TYPESCRIPT\n}\n\ntype SDK @key(fields: \"upc\") {\n clientLanguages: [ProgrammingLanguage!]!\n upc: ID!\n}\n\ntype Subscription {\n countHob(intervalMilliseconds: Int!, max: Int!): Int!\n}\n\ntype Travelling implements Hobby {\n countriesLived: [Country!]!\n employees: [Employee!]! @goField(forceResolver: true)\n}\n\nscalar openfed__FieldSet\n\nscalar openfed__Scope", + "f79d19db4b33b04020b6f36030f7cb2cb86662cf": "schema @link(url: \"https://specs.apollo.dev/federation/v2.5\", import: [\"@authenticated\", \"@composeDirective\", \"@external\", \"@extends\", \"@inaccessible\", \"@interfaceObject\", \"@override\", \"@provides\", \"@key\", \"@requires\", \"@requiresScopes\", \"@shareable\", \"@tag\"]) {\n query: Queries\n mutation: Mutation\n}\n\ndirective @authenticated on ENUM | FIELD_DEFINITION | INTERFACE | OBJECT | SCALAR\n\ndirective @composeDirective(name: String!) repeatable on SCHEMA\n\ndirective @extends on INTERFACE | OBJECT\n\ndirective @external on FIELD_DEFINITION | OBJECT\n\ndirective @inaccessible on ARGUMENT_DEFINITION | ENUM | ENUM_VALUE | FIELD_DEFINITION | INPUT_FIELD_DEFINITION | INPUT_OBJECT | INTERFACE | OBJECT | SCALAR | UNION\n\ndirective @interfaceObject on OBJECT\n\ndirective @key(fields: openfed__FieldSet!, resolvable: Boolean = true) repeatable on INTERFACE | OBJECT\n\ndirective @override(from: String!) on FIELD_DEFINITION\n\ndirective @provides(fields: openfed__FieldSet!) on FIELD_DEFINITION\n\ndirective @requires(fields: openfed__FieldSet!) on FIELD_DEFINITION\n\ndirective @requiresScopes(scopes: [[openfed__Scope!]!]!) on ENUM | FIELD_DEFINITION | INTERFACE | OBJECT | SCALAR\n\ndirective @shareable repeatable on FIELD_DEFINITION | OBJECT\n\ndirective @tag(name: String!) repeatable on ARGUMENT_DEFINITION | ENUM | ENUM_VALUE | FIELD_DEFINITION | INPUT_FIELD_DEFINITION | INPUT_OBJECT | INTERFACE | OBJECT | SCALAR | UNION\n\ntype Consultancy @key(fields: \"upc\") {\n name: ProductName!\n upc: ID!\n}\n\ntype Cosmo @key(fields: \"upc\") {\n name: ProductName!\n repositoryURL: String!\n upc: ID!\n}\n\ntype DirectiveFact implements TopSecretFact @authenticated {\n description: FactContent!\n factType: TopSecretFactType\n title: String!\n}\n\ntype Documentation {\n url(product: ProductName!): String!\n urls(products: [ProductName!]!): [String!]!\n}\n\ntype Employee @key(fields: \"id\") {\n id: Int!\n notes: String @override(from: \"employees\")\n productCount: Int!\n products: [ProductName!]!\n}\n\ntype EntityFact implements TopSecretFact @requiresScopes(scopes: [[\"read:entity\"]]) {\n description: FactContent!\n factType: TopSecretFactType\n title: String!\n}\n\nscalar FactContent @requiresScopes(scopes: [[\"read:scalar\"], [\"read:all\"]])\n\ntype MiscellaneousFact implements TopSecretFact {\n description: FactContent! @requiresScopes(scopes: [[\"read:miscellaneous\"]])\n factType: TopSecretFactType\n title: String!\n}\n\ntype Mutation {\n addFact(fact: TopSecretFactInput!): TopSecretFact! @requiresScopes(scopes: [[\"write:fact\"], [\"write:all\"]])\n}\n\nenum ProductName {\n CONSULTANCY\n COSMO\n ENGINE\n FINANCE\n HUMAN_RESOURCES\n MARKETING\n SDK\n}\n\nunion Products = Consultancy | Cosmo | Documentation\n\ntype Queries {\n factTypes: [TopSecretFactType!]\n productTypes: [Products!]!\n topSecretFederationFacts: [TopSecretFact!]! @requiresScopes(scopes: [[\"read:fact\"], [\"read:all\"]])\n}\n\ninterface TopSecretFact @authenticated {\n description: FactContent!\n factType: TopSecretFactType\n}\n\ninput TopSecretFactInput {\n description: FactContent!\n factType: TopSecretFactType!\n title: String!\n}\n\nenum TopSecretFactType @authenticated {\n DIRECTIVE\n ENTITY\n MISCELLANEOUS\n}\n\nscalar openfed__FieldSet\n\nscalar openfed__Scope", + "20c8fc085a72213ac5bb4a25387d3a7bb35749ec": "schema {\n query: Query\n subscription: Subscription\n}\n\ndirective @authenticated on ENUM | FIELD_DEFINITION | INTERFACE | OBJECT | SCALAR\n\ndirective @composeDirective(name: String!) repeatable on SCHEMA\n\ndirective @extends on INTERFACE | OBJECT\n\ndirective @external on FIELD_DEFINITION | OBJECT\n\ndirective @inaccessible on ARGUMENT_DEFINITION | ENUM | ENUM_VALUE | FIELD_DEFINITION | INPUT_FIELD_DEFINITION | INPUT_OBJECT | INTERFACE | OBJECT | SCALAR | UNION\n\ndirective @interfaceObject on OBJECT\n\ndirective @key(fields: openfed__FieldSet!, resolvable: Boolean = true) repeatable on INTERFACE | OBJECT\n\ndirective @override(from: String!) on FIELD_DEFINITION\n\ndirective @provides(fields: openfed__FieldSet!) on FIELD_DEFINITION\n\ndirective @requires(fields: openfed__FieldSet!) on FIELD_DEFINITION\n\ndirective @requiresScopes(scopes: [[openfed__Scope!]!]!) on ENUM | FIELD_DEFINITION | INTERFACE | OBJECT | SCALAR\n\ndirective @shareable repeatable on FIELD_DEFINITION | OBJECT\n\ndirective @tag(name: String!) repeatable on ARGUMENT_DEFINITION | ENUM | ENUM_VALUE | FIELD_DEFINITION | INPUT_FIELD_DEFINITION | INPUT_OBJECT | INTERFACE | OBJECT | SCALAR | UNION\n\ntype ABigObject {\n aFieldOnABigObject: String!\n bFieldOnABigObject: Int!\n cFieldOnABigObject: Boolean!\n dFieldOnABigObject: Float!\n eFieldOnABigObject: String!\n fFieldOnABigObject: Int!\n gFieldOnABigObject: Boolean!\n hFieldOnABigObject: Float!\n iFieldOnABigObject: String!\n jFieldOnABigObject: Int!\n kFieldOnABigObject: Boolean!\n lFieldOnABigObject: Float!\n mFieldOnABigObject: String!\n nFieldOnABigObject: Int!\n oFieldOnABigObject: Boolean!\n pFieldOnABigObject: Float!\n qFieldOnABigObject: String!\n rFieldOnABigObject: Int!\n sFieldOnABigObject: Boolean!\n tFieldOnABigObject: Float!\n uFieldOnABigObject: String!\n vFieldOnABigObject: Int!\n wFieldOnABigObject: Boolean!\n xFieldOnABigObject: Float!\n yFieldOnABigObject: String!\n zFieldOnABigObject: Int!\n}\n\ntype BBigObject {\n aFieldOnBBigObject: String!\n bFieldOnBBigObject: Int!\n cFieldOnBBigObject: Boolean!\n dFieldOnBBigObject: Float!\n eFieldOnBBigObject: String!\n fFieldOnBBigObject: Int!\n gFieldOnBBigObject: Boolean!\n hFieldOnBBigObject: Float!\n iFieldOnBBigObject: String!\n jFieldOnBBigObject: Int!\n kFieldOnBBigObject: Boolean!\n lFieldOnBBigObject: Float!\n mFieldOnBBigObject: String!\n nFieldOnBBigObject: Int!\n oFieldOnBBigObject: Boolean!\n pFieldOnBBigObject: Float!\n qFieldOnBBigObject: String!\n rFieldOnBBigObject: Int!\n sFieldOnBBigObject: Boolean!\n tFieldOnBBigObject: Float!\n uFieldOnBBigObject: String!\n vFieldOnBBigObject: Int!\n wFieldOnBBigObject: Boolean!\n xFieldOnBBigObject: Float!\n yFieldOnBBigObject: String!\n zFieldOnBBigObject: Int!\n}\n\nunion BigAbstractResponse = ABigObject | BBigObject | CBigObject | DBigObject | EBigObject | FBigObject | GBigObject | HBigObject | IBigObject | JBigObject | KBigObject | LBigObject | MBigObject | NBigObject | OBigObject | PBigObject | QBigObject | RBigObject | SBigObject | TBigObject | UBigObject | VBigObject | WBigObject | XBigObject | YBigObject | ZBigObject\n\ntype BigObject {\n nestedObjects: [NestedObject!]!\n}\n\ntype CBigObject {\n aFieldOnCBigObject: String!\n bFieldOnCBigObject: Int!\n cFieldOnCBigObject: Boolean!\n dFieldOnCBigObject: Float!\n eFieldOnCBigObject: String!\n fFieldOnCBigObject: Int!\n gFieldOnCBigObject: Boolean!\n hFieldOnCBigObject: Float!\n iFieldOnCBigObject: String!\n jFieldOnCBigObject: Int!\n kFieldOnCBigObject: Boolean!\n lFieldOnCBigObject: Float!\n mFieldOnCBigObject: String!\n nFieldOnCBigObject: Int!\n oFieldOnCBigObject: Boolean!\n pFieldOnCBigObject: Float!\n qFieldOnCBigObject: String!\n rFieldOnCBigObject: Int!\n sFieldOnCBigObject: Boolean!\n tFieldOnCBigObject: Float!\n uFieldOnCBigObject: String!\n vFieldOnCBigObject: Int!\n wFieldOnCBigObject: Boolean!\n xFieldOnCBigObject: Float!\n yFieldOnCBigObject: String!\n zFieldOnCBigObject: Int!\n}\n\ntype DBigObject {\n aFieldOnDBigObject: String!\n bFieldOnDBigObject: Int!\n cFieldOnDBigObject: Boolean!\n dFieldOnDBigObject: Float!\n eFieldOnDBigObject: String!\n fFieldOnDBigObject: Int!\n gFieldOnDBigObject: Boolean!\n hFieldOnDBigObject: Float!\n iFieldOnDBigObject: String!\n jFieldOnDBigObject: Int!\n kFieldOnDBigObject: Boolean!\n lFieldOnDBigObject: Float!\n mFieldOnDBigObject: String!\n nFieldOnDBigObject: Int!\n oFieldOnDBigObject: Boolean!\n pFieldOnDBigObject: Float!\n qFieldOnDBigObject: String!\n rFieldOnDBigObject: Int!\n sFieldOnDBigObject: Boolean!\n tFieldOnDBigObject: Float!\n uFieldOnDBigObject: String!\n vFieldOnDBigObject: Int!\n wFieldOnDBigObject: Boolean!\n xFieldOnDBigObject: Float!\n yFieldOnDBigObject: String!\n zFieldOnDBigObject: Int!\n}\n\ntype DeeplyNestedObject {\n aFieldOnDeeplyNestedObject: String!\n bFieldOnDeeplyNestedObject: Int!\n cFieldOnDeeplyNestedObject: Boolean!\n dFieldOnDeeplyNestedObject: Float!\n eFieldOnDeeplyNestedObject: String!\n fFieldOnDeeplyNestedObject: Int!\n gFieldOnDeeplyNestedObject: Boolean!\n hFieldOnDeeplyNestedObject: Float!\n iFieldOnDeeplyNestedObject: String!\n jFieldOnDeeplyNestedObject: Int!\n kFieldOnDeeplyNestedObject: Boolean!\n lFieldOnDeeplyNestedObject: Float!\n mFieldOnDeeplyNestedObject: String!\n nFieldOnDeeplyNestedObject: Int!\n oFieldOnDeeplyNestedObject: Boolean!\n pFieldOnDeeplyNestedObject: Float!\n qFieldOnDeeplyNestedObject: String!\n rFieldOnDeeplyNestedObject: Int!\n sFieldOnDeeplyNestedObject: Boolean!\n tFieldOnDeeplyNestedObject: Float!\n uFieldOnDeeplyNestedObject: String!\n vFieldOnDeeplyNestedObject: Int!\n wFieldOnDeeplyNestedObject: Boolean!\n xFieldOnDeeplyNestedObject: Float!\n yFieldOnDeeplyNestedObject: String!\n zFieldOnDeeplyNestedObject: Int!\n}\n\ntype EBigObject {\n aFieldOnEBigObject: String!\n bFieldOnEBigObject: Int!\n cFieldOnEBigObject: Boolean!\n dFieldOnEBigObject: Float!\n eFieldOnEBigObject: String!\n fFieldOnEBigObject: Int!\n gFieldOnEBigObject: Boolean!\n hFieldOnEBigObject: Float!\n iFieldOnEBigObject: String!\n jFieldOnEBigObject: Int!\n kFieldOnEBigObject: Boolean!\n lFieldOnEBigObject: Float!\n mFieldOnEBigObject: String!\n nFieldOnEBigObject: Int!\n oFieldOnEBigObject: Boolean!\n pFieldOnEBigObject: Float!\n qFieldOnEBigObject: String!\n rFieldOnEBigObject: Int!\n sFieldOnEBigObject: Boolean!\n tFieldOnEBigObject: Float!\n uFieldOnEBigObject: String!\n vFieldOnEBigObject: Int!\n wFieldOnEBigObject: Boolean!\n xFieldOnEBigObject: Float!\n yFieldOnEBigObject: String!\n zFieldOnEBigObject: Int!\n}\n\ntype Employee @key(fields: \"id\") {\n fieldThrowsError: String\n id: Int!\n}\n\nenum EnumType {\n A\n B\n C\n}\n\ntype FBigObject {\n aFieldOnFBigObject: String!\n bFieldOnFBigObject: Int!\n cFieldOnFBigObject: Boolean!\n dFieldOnFBigObject: Float!\n eFieldOnFBigObject: String!\n fFieldOnFBigObject: Int!\n gFieldOnFBigObject: Boolean!\n hFieldOnFBigObject: Float!\n iFieldOnFBigObject: String!\n jFieldOnFBigObject: Int!\n kFieldOnFBigObject: Boolean!\n lFieldOnFBigObject: Float!\n mFieldOnFBigObject: String!\n nFieldOnFBigObject: Int!\n oFieldOnFBigObject: Boolean!\n pFieldOnFBigObject: Float!\n qFieldOnFBigObject: String!\n rFieldOnFBigObject: Int!\n sFieldOnFBigObject: Boolean!\n tFieldOnFBigObject: Float!\n uFieldOnFBigObject: String!\n vFieldOnFBigObject: Int!\n wFieldOnFBigObject: Boolean!\n xFieldOnFBigObject: Float!\n yFieldOnFBigObject: String!\n zFieldOnFBigObject: Int!\n}\n\ntype GBigObject {\n aFieldOnGBigObject: String!\n bFieldOnGBigObject: Int!\n cFieldOnGBigObject: Boolean!\n dFieldOnGBigObject: Float!\n eFieldOnGBigObject: String!\n fFieldOnGBigObject: Int!\n gFieldOnGBigObject: Boolean!\n hFieldOnGBigObject: Float!\n iFieldOnGBigObject: String!\n jFieldOnGBigObject: Int!\n kFieldOnGBigObject: Boolean!\n lFieldOnGBigObject: Float!\n mFieldOnGBigObject: String!\n nFieldOnGBigObject: Int!\n oFieldOnGBigObject: Boolean!\n pFieldOnGBigObject: Float!\n qFieldOnGBigObject: String!\n rFieldOnGBigObject: Int!\n sFieldOnGBigObject: Boolean!\n tFieldOnGBigObject: Float!\n uFieldOnGBigObject: String!\n vFieldOnGBigObject: Int!\n wFieldOnGBigObject: Boolean!\n xFieldOnGBigObject: Float!\n yFieldOnGBigObject: String!\n zFieldOnGBigObject: Int!\n}\n\ntype HBigObject {\n aFieldOnHBigObject: String!\n bFieldOnHBigObject: Int!\n cFieldOnHBigObject: Boolean!\n dFieldOnHBigObject: Float!\n eFieldOnHBigObject: String!\n fFieldOnHBigObject: Int!\n gFieldOnHBigObject: Boolean!\n hFieldOnHBigObject: Float!\n iFieldOnHBigObject: String!\n jFieldOnHBigObject: Int!\n kFieldOnHBigObject: Boolean!\n lFieldOnHBigObject: Float!\n mFieldOnHBigObject: String!\n nFieldOnHBigObject: Int!\n oFieldOnHBigObject: Boolean!\n pFieldOnHBigObject: Float!\n qFieldOnHBigObject: String!\n rFieldOnHBigObject: Int!\n sFieldOnHBigObject: Boolean!\n tFieldOnHBigObject: Float!\n uFieldOnHBigObject: String!\n vFieldOnHBigObject: Int!\n wFieldOnHBigObject: Boolean!\n xFieldOnHBigObject: Float!\n yFieldOnHBigObject: String!\n zFieldOnHBigObject: Int!\n}\n\ntype IBigObject {\n aFieldOnIBigObject: String!\n bFieldOnIBigObject: Int!\n cFieldOnIBigObject: Boolean!\n dFieldOnIBigObject: Float!\n eFieldOnIBigObject: String!\n fFieldOnIBigObject: Int!\n gFieldOnIBigObject: Boolean!\n hFieldOnIBigObject: Float!\n iFieldOnIBigObject: String!\n jFieldOnIBigObject: Int!\n kFieldOnIBigObject: Boolean!\n lFieldOnIBigObject: Float!\n mFieldOnIBigObject: String!\n nFieldOnIBigObject: Int!\n oFieldOnIBigObject: Boolean!\n pFieldOnIBigObject: Float!\n qFieldOnIBigObject: String!\n rFieldOnIBigObject: Int!\n sFieldOnIBigObject: Boolean!\n tFieldOnIBigObject: Float!\n uFieldOnIBigObject: String!\n vFieldOnIBigObject: Int!\n wFieldOnIBigObject: Boolean!\n xFieldOnIBigObject: Float!\n yFieldOnIBigObject: String!\n zFieldOnIBigObject: Int!\n}\n\ninput InputArg {\n enum: EnumType\n enums: [EnumType!]\n string: String\n strings: [String!]\n}\n\ntype InputResponse {\n arg: String!\n}\n\ninput InputType {\n arg: String!\n}\n\ntype JBigObject {\n aFieldOnJBigObject: String!\n bFieldOnJBigObject: Int!\n cFieldOnJBigObject: Boolean!\n dFieldOnJBigObject: Float!\n eFieldOnJBigObject: String!\n fFieldOnJBigObject: Int!\n gFieldOnJBigObject: Boolean!\n hFieldOnJBigObject: Float!\n iFieldOnJBigObject: String!\n jFieldOnJBigObject: Int!\n kFieldOnJBigObject: Boolean!\n lFieldOnJBigObject: Float!\n mFieldOnJBigObject: String!\n nFieldOnJBigObject: Int!\n oFieldOnJBigObject: Boolean!\n pFieldOnJBigObject: Float!\n qFieldOnJBigObject: String!\n rFieldOnJBigObject: Int!\n sFieldOnJBigObject: Boolean!\n tFieldOnJBigObject: Float!\n uFieldOnJBigObject: String!\n vFieldOnJBigObject: Int!\n wFieldOnJBigObject: Boolean!\n xFieldOnJBigObject: Float!\n yFieldOnJBigObject: String!\n zFieldOnJBigObject: Int!\n}\n\ntype KBigObject {\n aFieldOnKBigObject: String!\n bFieldOnKBigObject: Int!\n cFieldOnKBigObject: Boolean!\n dFieldOnKBigObject: Float!\n eFieldOnKBigObject: String!\n fFieldOnKBigObject: Int!\n gFieldOnKBigObject: Boolean!\n hFieldOnKBigObject: Float!\n iFieldOnKBigObject: String!\n jFieldOnKBigObject: Int!\n kFieldOnKBigObject: Boolean!\n lFieldOnKBigObject: Float!\n mFieldOnKBigObject: String!\n nFieldOnKBigObject: Int!\n oFieldOnKBigObject: Boolean!\n pFieldOnKBigObject: Float!\n qFieldOnKBigObject: String!\n rFieldOnKBigObject: Int!\n sFieldOnKBigObject: Boolean!\n tFieldOnKBigObject: Float!\n uFieldOnKBigObject: String!\n vFieldOnKBigObject: Int!\n wFieldOnKBigObject: Boolean!\n xFieldOnKBigObject: Float!\n yFieldOnKBigObject: String!\n zFieldOnKBigObject: Int!\n}\n\ntype LBigObject {\n aFieldOnLBigObject: String!\n bFieldOnLBigObject: Int!\n cFieldOnLBigObject: Boolean!\n dFieldOnLBigObject: Float!\n eFieldOnLBigObject: String!\n fFieldOnLBigObject: Int!\n gFieldOnLBigObject: Boolean!\n hFieldOnLBigObject: Float!\n iFieldOnLBigObject: String!\n jFieldOnLBigObject: Int!\n kFieldOnLBigObject: Boolean!\n lFieldOnLBigObject: Float!\n mFieldOnLBigObject: String!\n nFieldOnLBigObject: Int!\n oFieldOnLBigObject: Boolean!\n pFieldOnLBigObject: Float!\n qFieldOnLBigObject: String!\n rFieldOnLBigObject: Int!\n sFieldOnLBigObject: Boolean!\n tFieldOnLBigObject: Float!\n uFieldOnLBigObject: String!\n vFieldOnLBigObject: Int!\n wFieldOnLBigObject: Boolean!\n xFieldOnLBigObject: Float!\n yFieldOnLBigObject: String!\n zFieldOnLBigObject: Int!\n}\n\ntype MBigObject {\n aFieldOnMBigObject: String!\n bFieldOnMBigObject: Int!\n cFieldOnMBigObject: Boolean!\n dFieldOnMBigObject: Float!\n eFieldOnMBigObject: String!\n fFieldOnMBigObject: Int!\n gFieldOnMBigObject: Boolean!\n hFieldOnMBigObject: Float!\n iFieldOnMBigObject: String!\n jFieldOnMBigObject: Int!\n kFieldOnMBigObject: Boolean!\n lFieldOnMBigObject: Float!\n mFieldOnMBigObject: String!\n nFieldOnMBigObject: Int!\n oFieldOnMBigObject: Boolean!\n pFieldOnMBigObject: Float!\n qFieldOnMBigObject: String!\n rFieldOnMBigObject: Int!\n sFieldOnMBigObject: Boolean!\n tFieldOnMBigObject: Float!\n uFieldOnMBigObject: String!\n vFieldOnMBigObject: Int!\n wFieldOnMBigObject: Boolean!\n xFieldOnMBigObject: Float!\n yFieldOnMBigObject: String!\n zFieldOnMBigObject: Int!\n}\n\nscalar Map\n\ntype NBigObject {\n aFieldOnNBigObject: String!\n bFieldOnNBigObject: Int!\n cFieldOnNBigObject: Boolean!\n dFieldOnNBigObject: Float!\n eFieldOnNBigObject: String!\n fFieldOnNBigObject: Int!\n gFieldOnNBigObject: Boolean!\n hFieldOnNBigObject: Float!\n iFieldOnNBigObject: String!\n jFieldOnNBigObject: Int!\n kFieldOnNBigObject: Boolean!\n lFieldOnNBigObject: Float!\n mFieldOnNBigObject: String!\n nFieldOnNBigObject: Int!\n oFieldOnNBigObject: Boolean!\n pFieldOnNBigObject: Float!\n qFieldOnNBigObject: String!\n rFieldOnNBigObject: Int!\n sFieldOnNBigObject: Boolean!\n tFieldOnNBigObject: Float!\n uFieldOnNBigObject: String!\n vFieldOnNBigObject: Int!\n wFieldOnNBigObject: Boolean!\n xFieldOnNBigObject: Float!\n yFieldOnNBigObject: String!\n zFieldOnNBigObject: Int!\n}\n\ntype NestedObject {\n deeplyNestedObjects: [DeeplyNestedObject!]!\n}\n\ntype OBigObject {\n aFieldOnOBigObject: String!\n bFieldOnOBigObject: Int!\n cFieldOnOBigObject: Boolean!\n dFieldOnOBigObject: Float!\n eFieldOnOBigObject: String!\n fFieldOnOBigObject: Int!\n gFieldOnOBigObject: Boolean!\n hFieldOnOBigObject: Float!\n iFieldOnOBigObject: String!\n jFieldOnOBigObject: Int!\n kFieldOnOBigObject: Boolean!\n lFieldOnOBigObject: Float!\n mFieldOnOBigObject: String!\n nFieldOnOBigObject: Int!\n oFieldOnOBigObject: Boolean!\n pFieldOnOBigObject: Float!\n qFieldOnOBigObject: String!\n rFieldOnOBigObject: Int!\n sFieldOnOBigObject: Boolean!\n tFieldOnOBigObject: Float!\n uFieldOnOBigObject: String!\n vFieldOnOBigObject: Int!\n wFieldOnOBigObject: Boolean!\n xFieldOnOBigObject: Float!\n yFieldOnOBigObject: String!\n zFieldOnOBigObject: Int!\n}\n\ntype PBigObject {\n aFieldOnPBigObject: String!\n bFieldOnPBigObject: Int!\n cFieldOnPBigObject: Boolean!\n dFieldOnPBigObject: Float!\n eFieldOnPBigObject: String!\n fFieldOnPBigObject: Int!\n gFieldOnPBigObject: Boolean!\n hFieldOnPBigObject: Float!\n iFieldOnPBigObject: String!\n jFieldOnPBigObject: Int!\n kFieldOnPBigObject: Boolean!\n lFieldOnPBigObject: Float!\n mFieldOnPBigObject: String!\n nFieldOnPBigObject: Int!\n oFieldOnPBigObject: Boolean!\n pFieldOnPBigObject: Float!\n qFieldOnPBigObject: String!\n rFieldOnPBigObject: Int!\n sFieldOnPBigObject: Boolean!\n tFieldOnPBigObject: Float!\n uFieldOnPBigObject: String!\n vFieldOnPBigObject: Int!\n wFieldOnPBigObject: Boolean!\n xFieldOnPBigObject: Float!\n yFieldOnPBigObject: String!\n zFieldOnPBigObject: Int!\n}\n\ntype QBigObject {\n aFieldOnQBigObject: String!\n bFieldOnQBigObject: Int!\n cFieldOnQBigObject: Boolean!\n dFieldOnQBigObject: Float!\n eFieldOnQBigObject: String!\n fFieldOnQBigObject: Int!\n gFieldOnQBigObject: Boolean!\n hFieldOnQBigObject: Float!\n iFieldOnQBigObject: String!\n jFieldOnQBigObject: Int!\n kFieldOnQBigObject: Boolean!\n lFieldOnQBigObject: Float!\n mFieldOnQBigObject: String!\n nFieldOnQBigObject: Int!\n oFieldOnQBigObject: Boolean!\n pFieldOnQBigObject: Float!\n qFieldOnQBigObject: String!\n rFieldOnQBigObject: Int!\n sFieldOnQBigObject: Boolean!\n tFieldOnQBigObject: Float!\n uFieldOnQBigObject: String!\n vFieldOnQBigObject: Int!\n wFieldOnQBigObject: Boolean!\n xFieldOnQBigObject: Float!\n yFieldOnQBigObject: String!\n zFieldOnQBigObject: Int!\n}\n\ntype Query {\n bigAbstractResponse: BigAbstractResponse\n bigResponse(artificialDelay: Int! = 0, bigObjects: Int! = 100, deeplyNestedObjects: Int! = 100, nestedObjects: Int! = 100): [BigObject!]!\n \"\"\"Returns response after the given delay\"\"\"\n delay(ms: Int!, response: String!): String!\n floatField(arg: Float): Float\n \"\"\"Returns the value of the received HTTP header.\"\"\"\n headerValue(name: String!): String!\n \"\"\"Returns the value of the given key in the WS initial payload.\"\"\"\n initPayloadValue(key: String!): String!\n initialPayload: Map\n longResponse(artificialDelay: Int! = 0, bytes: Int!): String\n rootFieldWithInput(arg: InputArg!): String!\n rootFieldWithListArg(arg: [String!]!): [String!]!\n rootFieldWithListOfEnumArg(arg: [EnumType!]!): [EnumType!]!\n rootFieldWithListOfInputArg(arg: [InputType!]!): [InputResponse!]!\n rootFieldWithNestedListArg(arg: [[String!]!]!): [[String!]!]!\n secret: Secret @requiresScopes(scopes: [[\"read:secret\"]])\n sharedThings(numOfA: Int!, numOfB: Int!): [Thing!]! @shareable\n}\n\ntype RBigObject {\n aFieldOnRBigObject: String!\n bFieldOnRBigObject: Int!\n cFieldOnRBigObject: Boolean!\n dFieldOnRBigObject: Float!\n eFieldOnRBigObject: String!\n fFieldOnRBigObject: Int!\n gFieldOnRBigObject: Boolean!\n hFieldOnRBigObject: Float!\n iFieldOnRBigObject: String!\n jFieldOnRBigObject: Int!\n kFieldOnRBigObject: Boolean!\n lFieldOnRBigObject: Float!\n mFieldOnRBigObject: String!\n nFieldOnRBigObject: Int!\n oFieldOnRBigObject: Boolean!\n pFieldOnRBigObject: Float!\n qFieldOnRBigObject: String!\n rFieldOnRBigObject: Int!\n sFieldOnRBigObject: Boolean!\n tFieldOnRBigObject: Float!\n uFieldOnRBigObject: String!\n vFieldOnRBigObject: Int!\n wFieldOnRBigObject: Boolean!\n xFieldOnRBigObject: Float!\n yFieldOnRBigObject: String!\n zFieldOnRBigObject: Int!\n}\n\ntype SBigObject {\n aFieldOnSBigObject: String!\n bFieldOnSBigObject: Int!\n cFieldOnSBigObject: Boolean!\n dFieldOnSBigObject: Float!\n eFieldOnSBigObject: String!\n fFieldOnSBigObject: Int!\n gFieldOnSBigObject: Boolean!\n hFieldOnSBigObject: Float!\n iFieldOnSBigObject: String!\n jFieldOnSBigObject: Int!\n kFieldOnSBigObject: Boolean!\n lFieldOnSBigObject: Float!\n mFieldOnSBigObject: String!\n nFieldOnSBigObject: Int!\n oFieldOnSBigObject: Boolean!\n pFieldOnSBigObject: Float!\n qFieldOnSBigObject: String!\n rFieldOnSBigObject: Int!\n sFieldOnSBigObject: Boolean!\n tFieldOnSBigObject: Float!\n uFieldOnSBigObject: String!\n vFieldOnSBigObject: Int!\n wFieldOnSBigObject: Boolean!\n xFieldOnSBigObject: Float!\n yFieldOnSBigObject: String!\n zFieldOnSBigObject: Int!\n}\n\ntype Secret {\n value: String\n}\n\ntype Subscription {\n \"\"\"Returns a stream with the value of the received HTTP header.\"\"\"\n headerValue(name: String!, repeat: Int): TimestampedString!\n \"\"\"\n Returns a stream with the value of value of the given key in the WS initial payload.\n \"\"\"\n initPayloadValue(key: String!, repeat: Int): TimestampedString!\n \"\"\"Returns a stream with the value of the WS initial payload.\"\"\"\n initialPayload(repeat: Int): Map\n returnsError: String\n}\n\ntype TBigObject {\n aFieldOnTBigObject: String!\n bFieldOnTBigObject: Int!\n cFieldOnTBigObject: Boolean!\n dFieldOnTBigObject: Float!\n eFieldOnTBigObject: String!\n fFieldOnTBigObject: Int!\n gFieldOnTBigObject: Boolean!\n hFieldOnTBigObject: Float!\n iFieldOnTBigObject: String!\n jFieldOnTBigObject: Int!\n kFieldOnTBigObject: Boolean!\n lFieldOnTBigObject: Float!\n mFieldOnTBigObject: String!\n nFieldOnTBigObject: Int!\n oFieldOnTBigObject: Boolean!\n pFieldOnTBigObject: Float!\n qFieldOnTBigObject: String!\n rFieldOnTBigObject: Int!\n sFieldOnTBigObject: Boolean!\n tFieldOnTBigObject: Float!\n uFieldOnTBigObject: String!\n vFieldOnTBigObject: Int!\n wFieldOnTBigObject: Boolean!\n xFieldOnTBigObject: Float!\n yFieldOnTBigObject: String!\n zFieldOnTBigObject: Int!\n}\n\ntype Thing {\n b: String! @shareable\n}\n\ntype TimestampedString {\n initialPayload: Map\n \"\"\"Sequence number\"\"\"\n seq: Int!\n \"\"\"Total number of responses to be sent\"\"\"\n total: Int!\n \"\"\"The timestamp when the response was generated.\"\"\"\n unixTime: Int!\n \"\"\"The value of the string.\"\"\"\n value: String!\n}\n\ntype UBigObject {\n aFieldOnUBigObject: String!\n bFieldOnUBigObject: Int!\n cFieldOnUBigObject: Boolean!\n dFieldOnUBigObject: Float!\n eFieldOnUBigObject: String!\n fFieldOnUBigObject: Int!\n gFieldOnUBigObject: Boolean!\n hFieldOnUBigObject: Float!\n iFieldOnUBigObject: String!\n jFieldOnUBigObject: Int!\n kFieldOnUBigObject: Boolean!\n lFieldOnUBigObject: Float!\n mFieldOnUBigObject: String!\n nFieldOnUBigObject: Int!\n oFieldOnUBigObject: Boolean!\n pFieldOnUBigObject: Float!\n qFieldOnUBigObject: String!\n rFieldOnUBigObject: Int!\n sFieldOnUBigObject: Boolean!\n tFieldOnUBigObject: Float!\n uFieldOnUBigObject: String!\n vFieldOnUBigObject: Int!\n wFieldOnUBigObject: Boolean!\n xFieldOnUBigObject: Float!\n yFieldOnUBigObject: String!\n zFieldOnUBigObject: Int!\n}\n\ntype VBigObject {\n aFieldOnVBigObject: String!\n bFieldOnVBigObject: Int!\n cFieldOnVBigObject: Boolean!\n dFieldOnVBigObject: Float!\n eFieldOnVBigObject: String!\n fFieldOnVBigObject: Int!\n gFieldOnVBigObject: Boolean!\n hFieldOnVBigObject: Float!\n iFieldOnVBigObject: String!\n jFieldOnVBigObject: Int!\n kFieldOnVBigObject: Boolean!\n lFieldOnVBigObject: Float!\n mFieldOnVBigObject: String!\n nFieldOnVBigObject: Int!\n oFieldOnVBigObject: Boolean!\n pFieldOnVBigObject: Float!\n qFieldOnVBigObject: String!\n rFieldOnVBigObject: Int!\n sFieldOnVBigObject: Boolean!\n tFieldOnVBigObject: Float!\n uFieldOnVBigObject: String!\n vFieldOnVBigObject: Int!\n wFieldOnVBigObject: Boolean!\n xFieldOnVBigObject: Float!\n yFieldOnVBigObject: String!\n zFieldOnVBigObject: Int!\n}\n\ntype WBigObject {\n aFieldOnWBigObject: String!\n bFieldOnWBigObject: Int!\n cFieldOnWBigObject: Boolean!\n dFieldOnWBigObject: Float!\n eFieldOnWBigObject: String!\n fFieldOnWBigObject: Int!\n gFieldOnWBigObject: Boolean!\n hFieldOnWBigObject: Float!\n iFieldOnWBigObject: String!\n jFieldOnWBigObject: Int!\n kFieldOnWBigObject: Boolean!\n lFieldOnWBigObject: Float!\n mFieldOnWBigObject: String!\n nFieldOnWBigObject: Int!\n oFieldOnWBigObject: Boolean!\n pFieldOnWBigObject: Float!\n qFieldOnWBigObject: String!\n rFieldOnWBigObject: Int!\n sFieldOnWBigObject: Boolean!\n tFieldOnWBigObject: Float!\n uFieldOnWBigObject: String!\n vFieldOnWBigObject: Int!\n wFieldOnWBigObject: Boolean!\n xFieldOnWBigObject: Float!\n yFieldOnWBigObject: String!\n zFieldOnWBigObject: Int!\n}\n\ntype XBigObject {\n aFieldOnXBigObject: String!\n bFieldOnXBigObject: Int!\n cFieldOnXBigObject: Boolean!\n dFieldOnXBigObject: Float!\n eFieldOnXBigObject: String!\n fFieldOnXBigObject: Int!\n gFieldOnXBigObject: Boolean!\n hFieldOnXBigObject: Float!\n iFieldOnXBigObject: String!\n jFieldOnXBigObject: Int!\n kFieldOnXBigObject: Boolean!\n lFieldOnXBigObject: Float!\n mFieldOnXBigObject: String!\n nFieldOnXBigObject: Int!\n oFieldOnXBigObject: Boolean!\n pFieldOnXBigObject: Float!\n qFieldOnXBigObject: String!\n rFieldOnXBigObject: Int!\n sFieldOnXBigObject: Boolean!\n tFieldOnXBigObject: Float!\n uFieldOnXBigObject: String!\n vFieldOnXBigObject: Int!\n wFieldOnXBigObject: Boolean!\n xFieldOnXBigObject: Float!\n yFieldOnXBigObject: String!\n zFieldOnXBigObject: Int!\n}\n\ntype YBigObject {\n aFieldOnYBigObject: String!\n bFieldOnYBigObject: Int!\n cFieldOnYBigObject: Boolean!\n dFieldOnYBigObject: Float!\n eFieldOnYBigObject: String!\n fFieldOnYBigObject: Int!\n gFieldOnYBigObject: Boolean!\n hFieldOnYBigObject: Float!\n iFieldOnYBigObject: String!\n jFieldOnYBigObject: Int!\n kFieldOnYBigObject: Boolean!\n lFieldOnYBigObject: Float!\n mFieldOnYBigObject: String!\n nFieldOnYBigObject: Int!\n oFieldOnYBigObject: Boolean!\n pFieldOnYBigObject: Float!\n qFieldOnYBigObject: String!\n rFieldOnYBigObject: Int!\n sFieldOnYBigObject: Boolean!\n tFieldOnYBigObject: Float!\n uFieldOnYBigObject: String!\n vFieldOnYBigObject: Int!\n wFieldOnYBigObject: Boolean!\n xFieldOnYBigObject: Float!\n yFieldOnYBigObject: String!\n zFieldOnYBigObject: Int!\n}\n\ntype ZBigObject {\n aFieldOnZBigObject: String!\n bFieldOnZBigObject: Int!\n cFieldOnZBigObject: Boolean!\n dFieldOnZBigObject: Float!\n eFieldOnZBigObject: String!\n fFieldOnZBigObject: Int!\n gFieldOnZBigObject: Boolean!\n hFieldOnZBigObject: Float!\n iFieldOnZBigObject: String!\n jFieldOnZBigObject: Int!\n kFieldOnZBigObject: Boolean!\n lFieldOnZBigObject: Float!\n mFieldOnZBigObject: String!\n nFieldOnZBigObject: Int!\n oFieldOnZBigObject: Boolean!\n pFieldOnZBigObject: Float!\n qFieldOnZBigObject: String!\n rFieldOnZBigObject: Int!\n sFieldOnZBigObject: Boolean!\n tFieldOnZBigObject: Float!\n uFieldOnZBigObject: String!\n vFieldOnZBigObject: Int!\n wFieldOnZBigObject: Boolean!\n xFieldOnZBigObject: Float!\n yFieldOnZBigObject: String!\n zFieldOnZBigObject: Int!\n}\n\nscalar openfed__FieldSet\n\nscalar openfed__Scope", + "0327ed440f0c9e1684722cbb987bc8d3283c5532": "schema {\n mutation: Mutation\n}\n\ndirective @authenticated on ENUM | FIELD_DEFINITION | INTERFACE | OBJECT | SCALAR\n\ndirective @composeDirective(name: String!) repeatable on SCHEMA\n\ndirective @extends on INTERFACE | OBJECT\n\ndirective @external on FIELD_DEFINITION | OBJECT\n\ndirective @inaccessible on ARGUMENT_DEFINITION | ENUM | ENUM_VALUE | FIELD_DEFINITION | INPUT_FIELD_DEFINITION | INPUT_OBJECT | INTERFACE | OBJECT | SCALAR | UNION\n\ndirective @interfaceObject on OBJECT\n\ndirective @key(fields: openfed__FieldSet!, resolvable: Boolean = true) repeatable on INTERFACE | OBJECT\n\ndirective @override(from: String!) on FIELD_DEFINITION\n\ndirective @provides(fields: openfed__FieldSet!) on FIELD_DEFINITION\n\ndirective @requires(fields: openfed__FieldSet!) on FIELD_DEFINITION\n\ndirective @requiresScopes(scopes: [[openfed__Scope!]!]!) on ENUM | FIELD_DEFINITION | INTERFACE | OBJECT | SCALAR\n\ndirective @shareable repeatable on FIELD_DEFINITION | OBJECT\n\ndirective @tag(name: String!) repeatable on ARGUMENT_DEFINITION | ENUM | ENUM_VALUE | FIELD_DEFINITION | INPUT_FIELD_DEFINITION | INPUT_OBJECT | INTERFACE | OBJECT | SCALAR | UNION\n\ntype Employee @key(fields: \"id\") {\n id: Int!\n isAvailable: Boolean!\n}\n\ntype Mutation {\n \"\"\" This mutation updates the availability status of an employee in the system.\n \"\"\"\n updateAvailability(employeeID: Int!, isAvailable: Boolean!): Employee!\n}\n\nscalar openfed__FieldSet\n\nscalar openfed__Scope", + "cb7653f92b2599bd46ae73a84b8d7d5c359fb3b2": "schema {\n mutation: Mutation\n}\n\ndirective @authenticated on ENUM | FIELD_DEFINITION | INTERFACE | OBJECT | SCALAR\n\ndirective @composeDirective(name: String!) repeatable on SCHEMA\n\ndirective @extends on INTERFACE | OBJECT\n\ndirective @external on FIELD_DEFINITION | OBJECT\n\ndirective @inaccessible on ARGUMENT_DEFINITION | ENUM | ENUM_VALUE | FIELD_DEFINITION | INPUT_FIELD_DEFINITION | INPUT_OBJECT | INTERFACE | OBJECT | SCALAR | UNION\n\ndirective @interfaceObject on OBJECT\n\ndirective @key(fields: openfed__FieldSet!, resolvable: Boolean = true) repeatable on INTERFACE | OBJECT\n\ndirective @override(from: String!) on FIELD_DEFINITION\n\ndirective @provides(fields: openfed__FieldSet!) on FIELD_DEFINITION\n\ndirective @requires(fields: openfed__FieldSet!) on FIELD_DEFINITION\n\ndirective @requiresScopes(scopes: [[openfed__Scope!]!]!) on ENUM | FIELD_DEFINITION | INTERFACE | OBJECT | SCALAR\n\ndirective @shareable repeatable on FIELD_DEFINITION | OBJECT\n\ndirective @tag(name: String!) repeatable on ARGUMENT_DEFINITION | ENUM | ENUM_VALUE | FIELD_DEFINITION | INPUT_FIELD_DEFINITION | INPUT_OBJECT | INTERFACE | OBJECT | SCALAR | UNION\n\ntype Employee @key(fields: \"id\") {\n currentMood: Mood!\n id: Int!\n}\n\nenum Mood {\n APATHETIC @inaccessible\n HAPPY\n SAD\n}\n\ntype Mutation {\n \"\"\" This mutation update the mood of an employee. \"\"\"\n updateMood(employeeID: Int!, mood: Mood!): Employee!\n}\n\nscalar openfed__FieldSet\n\nscalar openfed__Scope", + "14e8ff1a04734f4e9f500e9fcc7cebd94008d2cd": "directive @authenticated on ENUM | FIELD_DEFINITION | INTERFACE | OBJECT | SCALAR\n\ndirective @composeDirective(name: String!) repeatable on SCHEMA\n\ndirective @extends on INTERFACE | OBJECT\n\ndirective @external on FIELD_DEFINITION | OBJECT\n\ndirective @inaccessible on ARGUMENT_DEFINITION | ENUM | ENUM_VALUE | FIELD_DEFINITION | INPUT_FIELD_DEFINITION | INPUT_OBJECT | INTERFACE | OBJECT | SCALAR | UNION\n\ndirective @interfaceObject on OBJECT\n\ndirective @key(fields: openfed__FieldSet!, resolvable: Boolean = true) repeatable on INTERFACE | OBJECT\n\ndirective @override(from: String!) on FIELD_DEFINITION\n\ndirective @provides(fields: openfed__FieldSet!) on FIELD_DEFINITION\n\ndirective @requires(fields: openfed__FieldSet!) on FIELD_DEFINITION\n\ndirective @requiresScopes(scopes: [[openfed__Scope!]!]!) on ENUM | FIELD_DEFINITION | INTERFACE | OBJECT | SCALAR\n\ndirective @shareable repeatable on FIELD_DEFINITION | OBJECT\n\ndirective @tag(name: String!) repeatable on ARGUMENT_DEFINITION | ENUM | ENUM_VALUE | FIELD_DEFINITION | INPUT_FIELD_DEFINITION | INPUT_OBJECT | INTERFACE | OBJECT | SCALAR | UNION\n\ntype Country @key(fields: \"key { name }\") {\n key: CountryKey!\n language: String\n}\n\ntype CountryKey {\n name: String!\n}\n\nscalar openfed__FieldSet\n\nscalar openfed__Scope", + "435637e5d9d211db9a6310f4ee87b34b6ad76f50": "schema {\n query: Query\n mutation: Mutation\n subscription: Subscription\n}\n\ndirective @edfs__kafkaPublish(providerId: String! = \"default\", topic: String!) on FIELD_DEFINITION\n\ndirective @edfs__kafkaSubscribe(providerId: String! = \"default\", topics: [String!]!) on FIELD_DEFINITION\n\ndirective @edfs__natsPublish(providerId: String! = \"default\", subject: String!) on FIELD_DEFINITION\n\ndirective @edfs__natsRequest(providerId: String! = \"default\", subject: String!) on FIELD_DEFINITION\n\ndirective @edfs__natsSubscribe(providerId: String! = \"default\", streamConfiguration: edfs__NatsStreamConfiguration, subjects: [String!]!) on FIELD_DEFINITION\n\ndirective @edfs__redisPublish(channel: String!, providerId: String! = \"default\") on FIELD_DEFINITION\n\ndirective @edfs__redisSubscribe(channels: [String!]!, providerId: String! = \"default\") on FIELD_DEFINITION\n\ndirective @extends on INTERFACE | OBJECT\n\ndirective @external on FIELD_DEFINITION | OBJECT\n\ndirective @key(fields: openfed__FieldSet!, resolvable: Boolean = true) repeatable on INTERFACE | OBJECT\n\ndirective @openfed__subscriptionFilter(condition: openfed__SubscriptionFilterCondition!) on FIELD_DEFINITION\n\ndirective @provides(fields: openfed__FieldSet!) on FIELD_DEFINITION\n\ndirective @requires(fields: openfed__FieldSet!) on FIELD_DEFINITION\n\ndirective @tag(name: String!) repeatable on ARGUMENT_DEFINITION | ENUM | ENUM_VALUE | FIELD_DEFINITION | INPUT_FIELD_DEFINITION | INPUT_OBJECT | INTERFACE | OBJECT | SCALAR | UNION\n\ntype Employee @key(fields: \"id\", resolvable: false) {\n id: Int! @external\n}\n\ninput KafkaInput {\n ids: [Int!]!\n}\n\ntype Mutation {\n updateEmployeeMyKafka(employeeID: Int!, update: UpdateEmployeeInput!): edfs__PublishResult! @edfs__kafkaPublish(topic: \"employeeUpdated\", providerId: \"my-kafka\")\n updateEmployeeMyNats(id: Int!, update: UpdateEmployeeInput!): edfs__PublishResult! @edfs__natsPublish(subject: \"employeeUpdatedMyNats.{{ args.id }}\", providerId: \"my-nats\")\n updateEmployeeMyRedis(id: Int!, update: UpdateEmployeeInput!): edfs__PublishResult! @edfs__redisPublish(channel: \"employeeUpdatedMyRedis\", providerId: \"my-redis\")\n updateEmployeeMyRedisOnCustomChannel(id: Int!, update: UpdateEmployeeInput!): edfs__PublishResult! @edfs__redisPublish(channel: \"employeeUpdatedMyRedis.{{ args.id }}\", providerId: \"my-redis\")\n}\n\ntype Query {\n employeeFromEvent(id: Int!): Employee! @edfs__natsRequest(subject: \"getEmployee.{{ args.id }}\")\n employeeFromEventMyNats(employeeID: Int!): Employee! @edfs__natsRequest(subject: \"getEmployeeMyNats.{{ args.employeeID }}\", providerId: \"my-nats\")\n}\n\ntype Subscription {\n employeeUpdated(employeeID: Int!): Employee! @edfs__natsSubscribe(subjects: [\"employeeUpdated.{{ args.employeeID }}\"])\n employeeUpdatedMyKafka(employeeID: Int!): Employee! @edfs__kafkaSubscribe(topics: [\"employeeUpdated\", \"employeeUpdatedTwo\"], providerId: \"my-kafka\")\n employeeUpdatedMyNats(id: Int!): Employee! @edfs__natsSubscribe(subjects: [\"employeeUpdatedMyNats.{{ args.id }}\", \"employeeUpdatedMyNatsTwo.{{ args.id }}\"], providerId: \"my-nats\")\n employeeUpdatedMyRedis(id: Int!): Employee! @edfs__redisSubscribe(channels: [\"employeeUpdatedMyRedis.{{ args.id }}\"], providerId: \"my-redis\")\n employeeUpdatedNatsStream(id: Int!): Employee! @edfs__natsSubscribe(subjects: [\"employeeUpdated.{{ args.id }}\"], streamConfiguration: {consumerName: \"consumerName\", streamName: \"streamName\"})\n employeeUpdates: Employee! @edfs__redisSubscribe(channels: [\"employeeUpdatedMyRedis\"], providerId: \"my-redis\")\n filteredEmployeeUpdated(id: Int!): Employee! @edfs__natsSubscribe(subjects: [\"employeeUpdated.{{ args.id }}\"]) @openfed__subscriptionFilter(condition: {NOT: {IN: {fieldPath: \"id\", values: [2, 6, 9, 10, 12]}}})\n filteredEmployeeUpdatedMyKafka(employeeID: ID!): Employee! @edfs__kafkaSubscribe(topics: [\"employeeUpdated\", \"employeeUpdatedTwo\"], providerId: \"my-kafka\") @openfed__subscriptionFilter(condition: {IN: {fieldPath: \"id\", values: [1, 3, 4, 7, 11]}})\n filteredEmployeeUpdatedMyKafkaWithListFieldArguments(firstIds: [ID!]!, secondIds: [ID!]!): Employee! @edfs__kafkaSubscribe(topics: [\"employeeUpdated\", \"employeeUpdatedTwo\"], providerId: \"my-kafka\") @openfed__subscriptionFilter(condition: {IN: {fieldPath: \"id\", values: [\"{{ args.firstIds }}\", \"{{ args.secondIds }}\"]}})\n filteredEmployeeUpdatedMyKafkaWithNestedListFieldArgument(input: KafkaInput!): Employee! @edfs__kafkaSubscribe(topics: [\"employeeUpdated\", \"employeeUpdatedTwo\"], providerId: \"my-kafka\") @openfed__subscriptionFilter(condition: {OR: [{IN: {fieldPath: \"id\", values: [\"{{ args.input.ids }}\"]}}, {IN: {fieldPath: \"id\", values: [\"1\"]}}]})\n filteredEmployeeUpdatedMyRedis(ids: [ID!]!): Employee! @edfs__redisSubscribe(channels: [\"employeeUpdatedMyRedis\"], providerId: \"my-redis\") @openfed__subscriptionFilter(condition: {IN: {fieldPath: \"id\", values: [\"{{ args.ids }}\"]}})\n}\n\ninput UpdateEmployeeInput {\n email: String\n name: String\n}\n\ninput edfs__NatsStreamConfiguration {\n consumerInactiveThreshold: Int! = 30\n consumerName: String!\n streamName: String!\n}\n\ntype edfs__PublishResult {\n success: Boolean!\n}\n\nscalar openfed__FieldSet\n\ninput openfed__SubscriptionFieldCondition {\n fieldPath: String!\n values: [openfed__SubscriptionFilterValue]!\n}\n\ninput openfed__SubscriptionFilterCondition {\n AND: [openfed__SubscriptionFilterCondition!]\n IN: openfed__SubscriptionFieldCondition\n NOT: openfed__SubscriptionFilterCondition\n OR: [openfed__SubscriptionFilterCondition!]\n}\n\nscalar openfed__SubscriptionFilterValue" + }, + "graphqlClientSchema": "type Query {\n employee(id: Int!): Employee\n employeeAsList(id: Int!): [Employee]\n employees: [Employee]\n products: [Products!]!\n teammates(team: Department!): [Employee!]!\n firstEmployee: Employee!\n\n \"\"\" This is a GraphQL query that retrieves a list of employees.\"\"\"\n findEmployees(criteria: SearchInput): [Employee!]!\n productTypes: [Products!]!\n topSecretFederationFacts: [TopSecretFact!]!\n factTypes: [TopSecretFactType!]\n\n \"\"\"Returns the value of the received HTTP header.\"\"\"\n headerValue(name: String!): String!\n\n \"\"\"Returns the value of the given key in the WS initial payload.\"\"\"\n initPayloadValue(key: String!): String!\n initialPayload: Map\n\n \"\"\"Returns response after the given delay\"\"\"\n delay(response: String!, ms: Int!): String!\n bigResponse(artificialDelay: Int! = 0, bigObjects: Int! = 100, nestedObjects: Int! = 100, deeplyNestedObjects: Int! = 100): [BigObject!]!\n longResponse(artificialDelay: Int! = 0, bytes: Int!): String\n bigAbstractResponse: BigAbstractResponse\n rootFieldWithListArg(arg: [String!]!): [String!]!\n rootFieldWithNestedListArg(arg: [[String!]!]!): [[String!]!]!\n rootFieldWithListOfInputArg(arg: [InputType!]!): [InputResponse!]!\n rootFieldWithListOfEnumArg(arg: [EnumType!]!): [EnumType!]!\n rootFieldWithInput(arg: InputArg!): String!\n floatField(arg: Float): Float\n sharedThings(numOfA: Int!, numOfB: Int!): [Thing!]!\n secret: Secret\n employeeFromEvent(id: Int!): Employee!\n employeeFromEventMyNats(employeeID: Int!): Employee!\n}\n\nscalar Upload\n\ntype Mutation {\n updateEmployeeTag(id: Int!, tag: String!): Employee\n singleUpload(file: Upload!): Boolean!\n singleUploadWithInput(arg: FileUpload!): Boolean!\n multipleUpload(files: [Upload!]!): Boolean!\n addFact(fact: TopSecretFactInput!): TopSecretFact!\n\n \"\"\" This mutation updates the availability status of an employee in the system.\n \"\"\"\n updateAvailability(employeeID: Int!, isAvailable: Boolean!): Employee!\n\n \"\"\" This mutation update the mood of an employee. \"\"\"\n updateMood(employeeID: Int!, mood: Mood!): Employee!\n updateEmployeeMyKafka(employeeID: Int!, update: UpdateEmployeeInput!): edfs__PublishResult!\n updateEmployeeMyNats(id: Int!, update: UpdateEmployeeInput!): edfs__PublishResult!\n updateEmployeeMyRedis(id: Int!, update: UpdateEmployeeInput!): edfs__PublishResult!\n updateEmployeeMyRedisOnCustomChannel(id: Int!, update: UpdateEmployeeInput!): edfs__PublishResult!\n}\n\ninput FileUpload {\n nested: DeeplyNestedFileUpload\n nestedList: [Upload!]\n}\n\ninput DeeplyNestedFileUpload {\n file: Upload!\n}\n\ntype Subscription {\n \"\"\"`currentTime` will return a stream of `Time` objects.\"\"\"\n currentTime: Time!\n countEmp(max: Int!, intervalMilliseconds: Int!): Int!\n countEmp2(max: Int!, intervalMilliseconds: Int!): Int!\n countFor(count: Int!): Int!\n countHob(max: Int!, intervalMilliseconds: Int!): Int!\n\n \"\"\"Returns a stream with the value of the received HTTP header.\"\"\"\n headerValue(name: String!, repeat: Int): TimestampedString!\n\n \"\"\"\n Returns a stream with the value of value of the given key in the WS initial payload.\n \"\"\"\n initPayloadValue(key: String!, repeat: Int): TimestampedString!\n\n \"\"\"Returns a stream with the value of the WS initial payload.\"\"\"\n initialPayload(repeat: Int): Map\n returnsError: String\n employeeUpdated(employeeID: Int!): Employee!\n employeeUpdatedMyKafka(employeeID: Int!): Employee!\n employeeUpdatedMyNats(id: Int!): Employee!\n employeeUpdatedNatsStream(id: Int!): Employee!\n employeeUpdatedMyRedis(id: Int!): Employee!\n employeeUpdates: Employee!\n filteredEmployeeUpdated(id: Int!): Employee!\n filteredEmployeeUpdatedMyKafka(employeeID: ID!): Employee!\n filteredEmployeeUpdatedMyKafkaWithListFieldArguments(firstIds: [ID!]!, secondIds: [ID!]!): Employee!\n filteredEmployeeUpdatedMyKafkaWithNestedListFieldArgument(input: KafkaInput!): Employee!\n filteredEmployeeUpdatedMyRedis(ids: [ID!]!): Employee!\n}\n\nenum Department {\n ENGINEERING\n MARKETING\n OPERATIONS\n}\n\ninterface RoleType {\n departments: [Department!]!\n title: [String!]!\n employees: [Employee!]!\n}\n\nenum EngineerType {\n BACKEND\n FRONTEND\n FULLSTACK\n}\n\ninterface Identifiable {\n id: Int!\n}\n\nenum OperationType {\n FINANCE\n HUMAN_RESOURCES\n}\n\ntype Details {\n forename: String!\n location: Country!\n surname: String!\n pastLocations: [City!]!\n middlename: String @deprecated\n hasChildren: Boolean!\n maritalStatus: MaritalStatus\n nationality: Nationality!\n pets: [Pet]\n}\n\ntype City {\n type: String!\n name: String!\n country: Country\n}\n\ntype Country {\n key: CountryKey!\n language: String\n}\n\ntype CountryKey {\n name: String!\n}\n\nenum Mood {\n HAPPY\n SAD\n}\n\ntype ErrorWrapper {\n okField: String\n errorField: String\n}\n\ntype Time {\n unixTime: Int!\n timeStamp: String!\n}\n\nunion Products = Consultancy | Cosmo | SDK | Documentation\n\ninterface IProduct {\n upc: ID!\n engineers: [Employee!]!\n}\n\ntype Consultancy {\n upc: ID!\n lead: Employee!\n isLeadAvailable: Boolean\n name: ProductName!\n}\n\nenum Class {\n FISH\n MAMMAL\n REPTILE\n}\n\nenum Gender {\n FEMALE\n MALE\n UNKNOWN\n}\n\ninterface Animal {\n class: Class!\n gender: Gender!\n}\n\nenum CatType {\n HOME\n STREET\n}\n\nenum DogBreed {\n GOLDEN_RETRIEVER\n POODLE\n ROTTWEILER\n YORKSHIRE_TERRIER\n}\n\nenum MaritalStatus {\n ENGAGED\n MARRIED\n}\n\nenum Nationality {\n AMERICAN\n DUTCH\n ENGLISH\n GERMAN\n INDIAN\n SPANISH\n UKRAINIAN\n}\n\n\"\"\" Allows to filter employees by their details. \"\"\"\ninput SearchInput {\n hasPets: Boolean\n nationality: Nationality\n nested: NestedSearchInput\n}\n\ninput NestedSearchInput {\n maritalStatus: MaritalStatus\n hasChildren: Boolean\n}\n\nenum ExerciseType {\n CALISTHENICS\n HIKING\n SPORT\n STRENGTH_TRAINING\n}\n\ninterface Experience {\n yearsOfExperience: Float!\n}\n\nenum GameGenre {\n ADVENTURE\n BOARD\n FPS\n CARD\n RPG\n ROGUELITE\n SIMULATION\n STRATEGY\n}\n\nenum ProgrammingLanguage {\n CSHARP\n GO\n RUST\n TYPESCRIPT\n}\n\ninterface Hobby {\n employees: [Employee!]!\n}\n\ninput TopSecretFactInput {\n title: String!\n description: FactContent!\n factType: TopSecretFactType!\n}\n\nenum TopSecretFactType {\n DIRECTIVE\n ENTITY\n MISCELLANEOUS\n}\n\ninterface TopSecretFact {\n description: FactContent!\n factType: TopSecretFactType\n}\n\nscalar FactContent\n\nenum ProductName {\n CONSULTANCY\n COSMO\n ENGINE\n FINANCE\n HUMAN_RESOURCES\n MARKETING\n SDK\n}\n\ntype Documentation {\n url(product: ProductName!): String!\n urls(products: [ProductName!]!): [String!]!\n}\n\ntype Secret {\n value: String\n}\n\ntype Thing {\n b: String!\n}\n\ninput InputArg {\n enums: [EnumType!]\n enum: EnumType\n string: String\n strings: [String!]\n}\n\nenum EnumType {\n A\n B\n C\n}\n\ninput InputType {\n arg: String!\n}\n\ntype InputResponse {\n arg: String!\n}\n\nscalar Map\n\ntype TimestampedString {\n \"\"\"The value of the string.\"\"\"\n value: String!\n\n \"\"\"The timestamp when the response was generated.\"\"\"\n unixTime: Int!\n\n \"\"\"Sequence number\"\"\"\n seq: Int!\n\n \"\"\"Total number of responses to be sent\"\"\"\n total: Int!\n initialPayload: Map\n}\n\ntype BigObject {\n nestedObjects: [NestedObject!]!\n}\n\ntype NestedObject {\n deeplyNestedObjects: [DeeplyNestedObject!]!\n}\n\ntype DeeplyNestedObject {\n aFieldOnDeeplyNestedObject: String!\n bFieldOnDeeplyNestedObject: Int!\n cFieldOnDeeplyNestedObject: Boolean!\n dFieldOnDeeplyNestedObject: Float!\n eFieldOnDeeplyNestedObject: String!\n fFieldOnDeeplyNestedObject: Int!\n gFieldOnDeeplyNestedObject: Boolean!\n hFieldOnDeeplyNestedObject: Float!\n iFieldOnDeeplyNestedObject: String!\n jFieldOnDeeplyNestedObject: Int!\n kFieldOnDeeplyNestedObject: Boolean!\n lFieldOnDeeplyNestedObject: Float!\n mFieldOnDeeplyNestedObject: String!\n nFieldOnDeeplyNestedObject: Int!\n oFieldOnDeeplyNestedObject: Boolean!\n pFieldOnDeeplyNestedObject: Float!\n qFieldOnDeeplyNestedObject: String!\n rFieldOnDeeplyNestedObject: Int!\n sFieldOnDeeplyNestedObject: Boolean!\n tFieldOnDeeplyNestedObject: Float!\n uFieldOnDeeplyNestedObject: String!\n vFieldOnDeeplyNestedObject: Int!\n wFieldOnDeeplyNestedObject: Boolean!\n xFieldOnDeeplyNestedObject: Float!\n yFieldOnDeeplyNestedObject: String!\n zFieldOnDeeplyNestedObject: Int!\n}\n\nunion BigAbstractResponse = ABigObject | BBigObject | CBigObject | DBigObject | EBigObject | FBigObject | GBigObject | HBigObject | IBigObject | JBigObject | KBigObject | LBigObject | MBigObject | NBigObject | OBigObject | PBigObject | QBigObject | RBigObject | SBigObject | TBigObject | UBigObject | VBigObject | WBigObject | XBigObject | YBigObject | ZBigObject\n\ntype ABigObject {\n aFieldOnABigObject: String!\n bFieldOnABigObject: Int!\n cFieldOnABigObject: Boolean!\n dFieldOnABigObject: Float!\n eFieldOnABigObject: String!\n fFieldOnABigObject: Int!\n gFieldOnABigObject: Boolean!\n hFieldOnABigObject: Float!\n iFieldOnABigObject: String!\n jFieldOnABigObject: Int!\n kFieldOnABigObject: Boolean!\n lFieldOnABigObject: Float!\n mFieldOnABigObject: String!\n nFieldOnABigObject: Int!\n oFieldOnABigObject: Boolean!\n pFieldOnABigObject: Float!\n qFieldOnABigObject: String!\n rFieldOnABigObject: Int!\n sFieldOnABigObject: Boolean!\n tFieldOnABigObject: Float!\n uFieldOnABigObject: String!\n vFieldOnABigObject: Int!\n wFieldOnABigObject: Boolean!\n xFieldOnABigObject: Float!\n yFieldOnABigObject: String!\n zFieldOnABigObject: Int!\n}\n\ntype BBigObject {\n aFieldOnBBigObject: String!\n bFieldOnBBigObject: Int!\n cFieldOnBBigObject: Boolean!\n dFieldOnBBigObject: Float!\n eFieldOnBBigObject: String!\n fFieldOnBBigObject: Int!\n gFieldOnBBigObject: Boolean!\n hFieldOnBBigObject: Float!\n iFieldOnBBigObject: String!\n jFieldOnBBigObject: Int!\n kFieldOnBBigObject: Boolean!\n lFieldOnBBigObject: Float!\n mFieldOnBBigObject: String!\n nFieldOnBBigObject: Int!\n oFieldOnBBigObject: Boolean!\n pFieldOnBBigObject: Float!\n qFieldOnBBigObject: String!\n rFieldOnBBigObject: Int!\n sFieldOnBBigObject: Boolean!\n tFieldOnBBigObject: Float!\n uFieldOnBBigObject: String!\n vFieldOnBBigObject: Int!\n wFieldOnBBigObject: Boolean!\n xFieldOnBBigObject: Float!\n yFieldOnBBigObject: String!\n zFieldOnBBigObject: Int!\n}\n\ntype CBigObject {\n aFieldOnCBigObject: String!\n bFieldOnCBigObject: Int!\n cFieldOnCBigObject: Boolean!\n dFieldOnCBigObject: Float!\n eFieldOnCBigObject: String!\n fFieldOnCBigObject: Int!\n gFieldOnCBigObject: Boolean!\n hFieldOnCBigObject: Float!\n iFieldOnCBigObject: String!\n jFieldOnCBigObject: Int!\n kFieldOnCBigObject: Boolean!\n lFieldOnCBigObject: Float!\n mFieldOnCBigObject: String!\n nFieldOnCBigObject: Int!\n oFieldOnCBigObject: Boolean!\n pFieldOnCBigObject: Float!\n qFieldOnCBigObject: String!\n rFieldOnCBigObject: Int!\n sFieldOnCBigObject: Boolean!\n tFieldOnCBigObject: Float!\n uFieldOnCBigObject: String!\n vFieldOnCBigObject: Int!\n wFieldOnCBigObject: Boolean!\n xFieldOnCBigObject: Float!\n yFieldOnCBigObject: String!\n zFieldOnCBigObject: Int!\n}\n\ntype DBigObject {\n aFieldOnDBigObject: String!\n bFieldOnDBigObject: Int!\n cFieldOnDBigObject: Boolean!\n dFieldOnDBigObject: Float!\n eFieldOnDBigObject: String!\n fFieldOnDBigObject: Int!\n gFieldOnDBigObject: Boolean!\n hFieldOnDBigObject: Float!\n iFieldOnDBigObject: String!\n jFieldOnDBigObject: Int!\n kFieldOnDBigObject: Boolean!\n lFieldOnDBigObject: Float!\n mFieldOnDBigObject: String!\n nFieldOnDBigObject: Int!\n oFieldOnDBigObject: Boolean!\n pFieldOnDBigObject: Float!\n qFieldOnDBigObject: String!\n rFieldOnDBigObject: Int!\n sFieldOnDBigObject: Boolean!\n tFieldOnDBigObject: Float!\n uFieldOnDBigObject: String!\n vFieldOnDBigObject: Int!\n wFieldOnDBigObject: Boolean!\n xFieldOnDBigObject: Float!\n yFieldOnDBigObject: String!\n zFieldOnDBigObject: Int!\n}\n\ntype EBigObject {\n aFieldOnEBigObject: String!\n bFieldOnEBigObject: Int!\n cFieldOnEBigObject: Boolean!\n dFieldOnEBigObject: Float!\n eFieldOnEBigObject: String!\n fFieldOnEBigObject: Int!\n gFieldOnEBigObject: Boolean!\n hFieldOnEBigObject: Float!\n iFieldOnEBigObject: String!\n jFieldOnEBigObject: Int!\n kFieldOnEBigObject: Boolean!\n lFieldOnEBigObject: Float!\n mFieldOnEBigObject: String!\n nFieldOnEBigObject: Int!\n oFieldOnEBigObject: Boolean!\n pFieldOnEBigObject: Float!\n qFieldOnEBigObject: String!\n rFieldOnEBigObject: Int!\n sFieldOnEBigObject: Boolean!\n tFieldOnEBigObject: Float!\n uFieldOnEBigObject: String!\n vFieldOnEBigObject: Int!\n wFieldOnEBigObject: Boolean!\n xFieldOnEBigObject: Float!\n yFieldOnEBigObject: String!\n zFieldOnEBigObject: Int!\n}\n\ntype FBigObject {\n aFieldOnFBigObject: String!\n bFieldOnFBigObject: Int!\n cFieldOnFBigObject: Boolean!\n dFieldOnFBigObject: Float!\n eFieldOnFBigObject: String!\n fFieldOnFBigObject: Int!\n gFieldOnFBigObject: Boolean!\n hFieldOnFBigObject: Float!\n iFieldOnFBigObject: String!\n jFieldOnFBigObject: Int!\n kFieldOnFBigObject: Boolean!\n lFieldOnFBigObject: Float!\n mFieldOnFBigObject: String!\n nFieldOnFBigObject: Int!\n oFieldOnFBigObject: Boolean!\n pFieldOnFBigObject: Float!\n qFieldOnFBigObject: String!\n rFieldOnFBigObject: Int!\n sFieldOnFBigObject: Boolean!\n tFieldOnFBigObject: Float!\n uFieldOnFBigObject: String!\n vFieldOnFBigObject: Int!\n wFieldOnFBigObject: Boolean!\n xFieldOnFBigObject: Float!\n yFieldOnFBigObject: String!\n zFieldOnFBigObject: Int!\n}\n\ntype GBigObject {\n aFieldOnGBigObject: String!\n bFieldOnGBigObject: Int!\n cFieldOnGBigObject: Boolean!\n dFieldOnGBigObject: Float!\n eFieldOnGBigObject: String!\n fFieldOnGBigObject: Int!\n gFieldOnGBigObject: Boolean!\n hFieldOnGBigObject: Float!\n iFieldOnGBigObject: String!\n jFieldOnGBigObject: Int!\n kFieldOnGBigObject: Boolean!\n lFieldOnGBigObject: Float!\n mFieldOnGBigObject: String!\n nFieldOnGBigObject: Int!\n oFieldOnGBigObject: Boolean!\n pFieldOnGBigObject: Float!\n qFieldOnGBigObject: String!\n rFieldOnGBigObject: Int!\n sFieldOnGBigObject: Boolean!\n tFieldOnGBigObject: Float!\n uFieldOnGBigObject: String!\n vFieldOnGBigObject: Int!\n wFieldOnGBigObject: Boolean!\n xFieldOnGBigObject: Float!\n yFieldOnGBigObject: String!\n zFieldOnGBigObject: Int!\n}\n\ntype HBigObject {\n aFieldOnHBigObject: String!\n bFieldOnHBigObject: Int!\n cFieldOnHBigObject: Boolean!\n dFieldOnHBigObject: Float!\n eFieldOnHBigObject: String!\n fFieldOnHBigObject: Int!\n gFieldOnHBigObject: Boolean!\n hFieldOnHBigObject: Float!\n iFieldOnHBigObject: String!\n jFieldOnHBigObject: Int!\n kFieldOnHBigObject: Boolean!\n lFieldOnHBigObject: Float!\n mFieldOnHBigObject: String!\n nFieldOnHBigObject: Int!\n oFieldOnHBigObject: Boolean!\n pFieldOnHBigObject: Float!\n qFieldOnHBigObject: String!\n rFieldOnHBigObject: Int!\n sFieldOnHBigObject: Boolean!\n tFieldOnHBigObject: Float!\n uFieldOnHBigObject: String!\n vFieldOnHBigObject: Int!\n wFieldOnHBigObject: Boolean!\n xFieldOnHBigObject: Float!\n yFieldOnHBigObject: String!\n zFieldOnHBigObject: Int!\n}\n\ntype IBigObject {\n aFieldOnIBigObject: String!\n bFieldOnIBigObject: Int!\n cFieldOnIBigObject: Boolean!\n dFieldOnIBigObject: Float!\n eFieldOnIBigObject: String!\n fFieldOnIBigObject: Int!\n gFieldOnIBigObject: Boolean!\n hFieldOnIBigObject: Float!\n iFieldOnIBigObject: String!\n jFieldOnIBigObject: Int!\n kFieldOnIBigObject: Boolean!\n lFieldOnIBigObject: Float!\n mFieldOnIBigObject: String!\n nFieldOnIBigObject: Int!\n oFieldOnIBigObject: Boolean!\n pFieldOnIBigObject: Float!\n qFieldOnIBigObject: String!\n rFieldOnIBigObject: Int!\n sFieldOnIBigObject: Boolean!\n tFieldOnIBigObject: Float!\n uFieldOnIBigObject: String!\n vFieldOnIBigObject: Int!\n wFieldOnIBigObject: Boolean!\n xFieldOnIBigObject: Float!\n yFieldOnIBigObject: String!\n zFieldOnIBigObject: Int!\n}\n\ntype JBigObject {\n aFieldOnJBigObject: String!\n bFieldOnJBigObject: Int!\n cFieldOnJBigObject: Boolean!\n dFieldOnJBigObject: Float!\n eFieldOnJBigObject: String!\n fFieldOnJBigObject: Int!\n gFieldOnJBigObject: Boolean!\n hFieldOnJBigObject: Float!\n iFieldOnJBigObject: String!\n jFieldOnJBigObject: Int!\n kFieldOnJBigObject: Boolean!\n lFieldOnJBigObject: Float!\n mFieldOnJBigObject: String!\n nFieldOnJBigObject: Int!\n oFieldOnJBigObject: Boolean!\n pFieldOnJBigObject: Float!\n qFieldOnJBigObject: String!\n rFieldOnJBigObject: Int!\n sFieldOnJBigObject: Boolean!\n tFieldOnJBigObject: Float!\n uFieldOnJBigObject: String!\n vFieldOnJBigObject: Int!\n wFieldOnJBigObject: Boolean!\n xFieldOnJBigObject: Float!\n yFieldOnJBigObject: String!\n zFieldOnJBigObject: Int!\n}\n\ntype KBigObject {\n aFieldOnKBigObject: String!\n bFieldOnKBigObject: Int!\n cFieldOnKBigObject: Boolean!\n dFieldOnKBigObject: Float!\n eFieldOnKBigObject: String!\n fFieldOnKBigObject: Int!\n gFieldOnKBigObject: Boolean!\n hFieldOnKBigObject: Float!\n iFieldOnKBigObject: String!\n jFieldOnKBigObject: Int!\n kFieldOnKBigObject: Boolean!\n lFieldOnKBigObject: Float!\n mFieldOnKBigObject: String!\n nFieldOnKBigObject: Int!\n oFieldOnKBigObject: Boolean!\n pFieldOnKBigObject: Float!\n qFieldOnKBigObject: String!\n rFieldOnKBigObject: Int!\n sFieldOnKBigObject: Boolean!\n tFieldOnKBigObject: Float!\n uFieldOnKBigObject: String!\n vFieldOnKBigObject: Int!\n wFieldOnKBigObject: Boolean!\n xFieldOnKBigObject: Float!\n yFieldOnKBigObject: String!\n zFieldOnKBigObject: Int!\n}\n\ntype LBigObject {\n aFieldOnLBigObject: String!\n bFieldOnLBigObject: Int!\n cFieldOnLBigObject: Boolean!\n dFieldOnLBigObject: Float!\n eFieldOnLBigObject: String!\n fFieldOnLBigObject: Int!\n gFieldOnLBigObject: Boolean!\n hFieldOnLBigObject: Float!\n iFieldOnLBigObject: String!\n jFieldOnLBigObject: Int!\n kFieldOnLBigObject: Boolean!\n lFieldOnLBigObject: Float!\n mFieldOnLBigObject: String!\n nFieldOnLBigObject: Int!\n oFieldOnLBigObject: Boolean!\n pFieldOnLBigObject: Float!\n qFieldOnLBigObject: String!\n rFieldOnLBigObject: Int!\n sFieldOnLBigObject: Boolean!\n tFieldOnLBigObject: Float!\n uFieldOnLBigObject: String!\n vFieldOnLBigObject: Int!\n wFieldOnLBigObject: Boolean!\n xFieldOnLBigObject: Float!\n yFieldOnLBigObject: String!\n zFieldOnLBigObject: Int!\n}\n\ntype MBigObject {\n aFieldOnMBigObject: String!\n bFieldOnMBigObject: Int!\n cFieldOnMBigObject: Boolean!\n dFieldOnMBigObject: Float!\n eFieldOnMBigObject: String!\n fFieldOnMBigObject: Int!\n gFieldOnMBigObject: Boolean!\n hFieldOnMBigObject: Float!\n iFieldOnMBigObject: String!\n jFieldOnMBigObject: Int!\n kFieldOnMBigObject: Boolean!\n lFieldOnMBigObject: Float!\n mFieldOnMBigObject: String!\n nFieldOnMBigObject: Int!\n oFieldOnMBigObject: Boolean!\n pFieldOnMBigObject: Float!\n qFieldOnMBigObject: String!\n rFieldOnMBigObject: Int!\n sFieldOnMBigObject: Boolean!\n tFieldOnMBigObject: Float!\n uFieldOnMBigObject: String!\n vFieldOnMBigObject: Int!\n wFieldOnMBigObject: Boolean!\n xFieldOnMBigObject: Float!\n yFieldOnMBigObject: String!\n zFieldOnMBigObject: Int!\n}\n\ntype NBigObject {\n aFieldOnNBigObject: String!\n bFieldOnNBigObject: Int!\n cFieldOnNBigObject: Boolean!\n dFieldOnNBigObject: Float!\n eFieldOnNBigObject: String!\n fFieldOnNBigObject: Int!\n gFieldOnNBigObject: Boolean!\n hFieldOnNBigObject: Float!\n iFieldOnNBigObject: String!\n jFieldOnNBigObject: Int!\n kFieldOnNBigObject: Boolean!\n lFieldOnNBigObject: Float!\n mFieldOnNBigObject: String!\n nFieldOnNBigObject: Int!\n oFieldOnNBigObject: Boolean!\n pFieldOnNBigObject: Float!\n qFieldOnNBigObject: String!\n rFieldOnNBigObject: Int!\n sFieldOnNBigObject: Boolean!\n tFieldOnNBigObject: Float!\n uFieldOnNBigObject: String!\n vFieldOnNBigObject: Int!\n wFieldOnNBigObject: Boolean!\n xFieldOnNBigObject: Float!\n yFieldOnNBigObject: String!\n zFieldOnNBigObject: Int!\n}\n\ntype OBigObject {\n aFieldOnOBigObject: String!\n bFieldOnOBigObject: Int!\n cFieldOnOBigObject: Boolean!\n dFieldOnOBigObject: Float!\n eFieldOnOBigObject: String!\n fFieldOnOBigObject: Int!\n gFieldOnOBigObject: Boolean!\n hFieldOnOBigObject: Float!\n iFieldOnOBigObject: String!\n jFieldOnOBigObject: Int!\n kFieldOnOBigObject: Boolean!\n lFieldOnOBigObject: Float!\n mFieldOnOBigObject: String!\n nFieldOnOBigObject: Int!\n oFieldOnOBigObject: Boolean!\n pFieldOnOBigObject: Float!\n qFieldOnOBigObject: String!\n rFieldOnOBigObject: Int!\n sFieldOnOBigObject: Boolean!\n tFieldOnOBigObject: Float!\n uFieldOnOBigObject: String!\n vFieldOnOBigObject: Int!\n wFieldOnOBigObject: Boolean!\n xFieldOnOBigObject: Float!\n yFieldOnOBigObject: String!\n zFieldOnOBigObject: Int!\n}\n\ntype PBigObject {\n aFieldOnPBigObject: String!\n bFieldOnPBigObject: Int!\n cFieldOnPBigObject: Boolean!\n dFieldOnPBigObject: Float!\n eFieldOnPBigObject: String!\n fFieldOnPBigObject: Int!\n gFieldOnPBigObject: Boolean!\n hFieldOnPBigObject: Float!\n iFieldOnPBigObject: String!\n jFieldOnPBigObject: Int!\n kFieldOnPBigObject: Boolean!\n lFieldOnPBigObject: Float!\n mFieldOnPBigObject: String!\n nFieldOnPBigObject: Int!\n oFieldOnPBigObject: Boolean!\n pFieldOnPBigObject: Float!\n qFieldOnPBigObject: String!\n rFieldOnPBigObject: Int!\n sFieldOnPBigObject: Boolean!\n tFieldOnPBigObject: Float!\n uFieldOnPBigObject: String!\n vFieldOnPBigObject: Int!\n wFieldOnPBigObject: Boolean!\n xFieldOnPBigObject: Float!\n yFieldOnPBigObject: String!\n zFieldOnPBigObject: Int!\n}\n\ntype QBigObject {\n aFieldOnQBigObject: String!\n bFieldOnQBigObject: Int!\n cFieldOnQBigObject: Boolean!\n dFieldOnQBigObject: Float!\n eFieldOnQBigObject: String!\n fFieldOnQBigObject: Int!\n gFieldOnQBigObject: Boolean!\n hFieldOnQBigObject: Float!\n iFieldOnQBigObject: String!\n jFieldOnQBigObject: Int!\n kFieldOnQBigObject: Boolean!\n lFieldOnQBigObject: Float!\n mFieldOnQBigObject: String!\n nFieldOnQBigObject: Int!\n oFieldOnQBigObject: Boolean!\n pFieldOnQBigObject: Float!\n qFieldOnQBigObject: String!\n rFieldOnQBigObject: Int!\n sFieldOnQBigObject: Boolean!\n tFieldOnQBigObject: Float!\n uFieldOnQBigObject: String!\n vFieldOnQBigObject: Int!\n wFieldOnQBigObject: Boolean!\n xFieldOnQBigObject: Float!\n yFieldOnQBigObject: String!\n zFieldOnQBigObject: Int!\n}\n\ntype RBigObject {\n aFieldOnRBigObject: String!\n bFieldOnRBigObject: Int!\n cFieldOnRBigObject: Boolean!\n dFieldOnRBigObject: Float!\n eFieldOnRBigObject: String!\n fFieldOnRBigObject: Int!\n gFieldOnRBigObject: Boolean!\n hFieldOnRBigObject: Float!\n iFieldOnRBigObject: String!\n jFieldOnRBigObject: Int!\n kFieldOnRBigObject: Boolean!\n lFieldOnRBigObject: Float!\n mFieldOnRBigObject: String!\n nFieldOnRBigObject: Int!\n oFieldOnRBigObject: Boolean!\n pFieldOnRBigObject: Float!\n qFieldOnRBigObject: String!\n rFieldOnRBigObject: Int!\n sFieldOnRBigObject: Boolean!\n tFieldOnRBigObject: Float!\n uFieldOnRBigObject: String!\n vFieldOnRBigObject: Int!\n wFieldOnRBigObject: Boolean!\n xFieldOnRBigObject: Float!\n yFieldOnRBigObject: String!\n zFieldOnRBigObject: Int!\n}\n\ntype SBigObject {\n aFieldOnSBigObject: String!\n bFieldOnSBigObject: Int!\n cFieldOnSBigObject: Boolean!\n dFieldOnSBigObject: Float!\n eFieldOnSBigObject: String!\n fFieldOnSBigObject: Int!\n gFieldOnSBigObject: Boolean!\n hFieldOnSBigObject: Float!\n iFieldOnSBigObject: String!\n jFieldOnSBigObject: Int!\n kFieldOnSBigObject: Boolean!\n lFieldOnSBigObject: Float!\n mFieldOnSBigObject: String!\n nFieldOnSBigObject: Int!\n oFieldOnSBigObject: Boolean!\n pFieldOnSBigObject: Float!\n qFieldOnSBigObject: String!\n rFieldOnSBigObject: Int!\n sFieldOnSBigObject: Boolean!\n tFieldOnSBigObject: Float!\n uFieldOnSBigObject: String!\n vFieldOnSBigObject: Int!\n wFieldOnSBigObject: Boolean!\n xFieldOnSBigObject: Float!\n yFieldOnSBigObject: String!\n zFieldOnSBigObject: Int!\n}\n\ntype TBigObject {\n aFieldOnTBigObject: String!\n bFieldOnTBigObject: Int!\n cFieldOnTBigObject: Boolean!\n dFieldOnTBigObject: Float!\n eFieldOnTBigObject: String!\n fFieldOnTBigObject: Int!\n gFieldOnTBigObject: Boolean!\n hFieldOnTBigObject: Float!\n iFieldOnTBigObject: String!\n jFieldOnTBigObject: Int!\n kFieldOnTBigObject: Boolean!\n lFieldOnTBigObject: Float!\n mFieldOnTBigObject: String!\n nFieldOnTBigObject: Int!\n oFieldOnTBigObject: Boolean!\n pFieldOnTBigObject: Float!\n qFieldOnTBigObject: String!\n rFieldOnTBigObject: Int!\n sFieldOnTBigObject: Boolean!\n tFieldOnTBigObject: Float!\n uFieldOnTBigObject: String!\n vFieldOnTBigObject: Int!\n wFieldOnTBigObject: Boolean!\n xFieldOnTBigObject: Float!\n yFieldOnTBigObject: String!\n zFieldOnTBigObject: Int!\n}\n\ntype UBigObject {\n aFieldOnUBigObject: String!\n bFieldOnUBigObject: Int!\n cFieldOnUBigObject: Boolean!\n dFieldOnUBigObject: Float!\n eFieldOnUBigObject: String!\n fFieldOnUBigObject: Int!\n gFieldOnUBigObject: Boolean!\n hFieldOnUBigObject: Float!\n iFieldOnUBigObject: String!\n jFieldOnUBigObject: Int!\n kFieldOnUBigObject: Boolean!\n lFieldOnUBigObject: Float!\n mFieldOnUBigObject: String!\n nFieldOnUBigObject: Int!\n oFieldOnUBigObject: Boolean!\n pFieldOnUBigObject: Float!\n qFieldOnUBigObject: String!\n rFieldOnUBigObject: Int!\n sFieldOnUBigObject: Boolean!\n tFieldOnUBigObject: Float!\n uFieldOnUBigObject: String!\n vFieldOnUBigObject: Int!\n wFieldOnUBigObject: Boolean!\n xFieldOnUBigObject: Float!\n yFieldOnUBigObject: String!\n zFieldOnUBigObject: Int!\n}\n\ntype VBigObject {\n aFieldOnVBigObject: String!\n bFieldOnVBigObject: Int!\n cFieldOnVBigObject: Boolean!\n dFieldOnVBigObject: Float!\n eFieldOnVBigObject: String!\n fFieldOnVBigObject: Int!\n gFieldOnVBigObject: Boolean!\n hFieldOnVBigObject: Float!\n iFieldOnVBigObject: String!\n jFieldOnVBigObject: Int!\n kFieldOnVBigObject: Boolean!\n lFieldOnVBigObject: Float!\n mFieldOnVBigObject: String!\n nFieldOnVBigObject: Int!\n oFieldOnVBigObject: Boolean!\n pFieldOnVBigObject: Float!\n qFieldOnVBigObject: String!\n rFieldOnVBigObject: Int!\n sFieldOnVBigObject: Boolean!\n tFieldOnVBigObject: Float!\n uFieldOnVBigObject: String!\n vFieldOnVBigObject: Int!\n wFieldOnVBigObject: Boolean!\n xFieldOnVBigObject: Float!\n yFieldOnVBigObject: String!\n zFieldOnVBigObject: Int!\n}\n\ntype WBigObject {\n aFieldOnWBigObject: String!\n bFieldOnWBigObject: Int!\n cFieldOnWBigObject: Boolean!\n dFieldOnWBigObject: Float!\n eFieldOnWBigObject: String!\n fFieldOnWBigObject: Int!\n gFieldOnWBigObject: Boolean!\n hFieldOnWBigObject: Float!\n iFieldOnWBigObject: String!\n jFieldOnWBigObject: Int!\n kFieldOnWBigObject: Boolean!\n lFieldOnWBigObject: Float!\n mFieldOnWBigObject: String!\n nFieldOnWBigObject: Int!\n oFieldOnWBigObject: Boolean!\n pFieldOnWBigObject: Float!\n qFieldOnWBigObject: String!\n rFieldOnWBigObject: Int!\n sFieldOnWBigObject: Boolean!\n tFieldOnWBigObject: Float!\n uFieldOnWBigObject: String!\n vFieldOnWBigObject: Int!\n wFieldOnWBigObject: Boolean!\n xFieldOnWBigObject: Float!\n yFieldOnWBigObject: String!\n zFieldOnWBigObject: Int!\n}\n\ntype XBigObject {\n aFieldOnXBigObject: String!\n bFieldOnXBigObject: Int!\n cFieldOnXBigObject: Boolean!\n dFieldOnXBigObject: Float!\n eFieldOnXBigObject: String!\n fFieldOnXBigObject: Int!\n gFieldOnXBigObject: Boolean!\n hFieldOnXBigObject: Float!\n iFieldOnXBigObject: String!\n jFieldOnXBigObject: Int!\n kFieldOnXBigObject: Boolean!\n lFieldOnXBigObject: Float!\n mFieldOnXBigObject: String!\n nFieldOnXBigObject: Int!\n oFieldOnXBigObject: Boolean!\n pFieldOnXBigObject: Float!\n qFieldOnXBigObject: String!\n rFieldOnXBigObject: Int!\n sFieldOnXBigObject: Boolean!\n tFieldOnXBigObject: Float!\n uFieldOnXBigObject: String!\n vFieldOnXBigObject: Int!\n wFieldOnXBigObject: Boolean!\n xFieldOnXBigObject: Float!\n yFieldOnXBigObject: String!\n zFieldOnXBigObject: Int!\n}\n\ntype YBigObject {\n aFieldOnYBigObject: String!\n bFieldOnYBigObject: Int!\n cFieldOnYBigObject: Boolean!\n dFieldOnYBigObject: Float!\n eFieldOnYBigObject: String!\n fFieldOnYBigObject: Int!\n gFieldOnYBigObject: Boolean!\n hFieldOnYBigObject: Float!\n iFieldOnYBigObject: String!\n jFieldOnYBigObject: Int!\n kFieldOnYBigObject: Boolean!\n lFieldOnYBigObject: Float!\n mFieldOnYBigObject: String!\n nFieldOnYBigObject: Int!\n oFieldOnYBigObject: Boolean!\n pFieldOnYBigObject: Float!\n qFieldOnYBigObject: String!\n rFieldOnYBigObject: Int!\n sFieldOnYBigObject: Boolean!\n tFieldOnYBigObject: Float!\n uFieldOnYBigObject: String!\n vFieldOnYBigObject: Int!\n wFieldOnYBigObject: Boolean!\n xFieldOnYBigObject: Float!\n yFieldOnYBigObject: String!\n zFieldOnYBigObject: Int!\n}\n\ntype ZBigObject {\n aFieldOnZBigObject: String!\n bFieldOnZBigObject: Int!\n cFieldOnZBigObject: Boolean!\n dFieldOnZBigObject: Float!\n eFieldOnZBigObject: String!\n fFieldOnZBigObject: Int!\n gFieldOnZBigObject: Boolean!\n hFieldOnZBigObject: Float!\n iFieldOnZBigObject: String!\n jFieldOnZBigObject: Int!\n kFieldOnZBigObject: Boolean!\n lFieldOnZBigObject: Float!\n mFieldOnZBigObject: String!\n nFieldOnZBigObject: Int!\n oFieldOnZBigObject: Boolean!\n pFieldOnZBigObject: Float!\n qFieldOnZBigObject: String!\n rFieldOnZBigObject: Int!\n sFieldOnZBigObject: Boolean!\n tFieldOnZBigObject: Float!\n uFieldOnZBigObject: String!\n vFieldOnZBigObject: Int!\n wFieldOnZBigObject: Boolean!\n xFieldOnZBigObject: Float!\n yFieldOnZBigObject: String!\n zFieldOnZBigObject: Int!\n}\n\nscalar openfed__SubscriptionFilterValue\n\ninput openfed__SubscriptionFieldCondition {\n fieldPath: String!\n values: [openfed__SubscriptionFilterValue]!\n}\n\ninput openfed__SubscriptionFilterCondition {\n AND: [openfed__SubscriptionFilterCondition!]\n IN: openfed__SubscriptionFieldCondition\n NOT: openfed__SubscriptionFilterCondition\n OR: [openfed__SubscriptionFilterCondition!]\n}\n\ninput UpdateEmployeeInput {\n name: String\n email: String\n}\n\ninput KafkaInput {\n ids: [Int!]!\n}\n\ntype edfs__PublishResult {\n success: Boolean!\n}\n\ntype Engineer implements RoleType {\n departments: [Department!]!\n title: [String!]!\n employees: [Employee!]!\n engineerType: EngineerType!\n}\n\ntype Marketer implements RoleType {\n departments: [Department!]!\n title: [String!]!\n employees: [Employee!]!\n}\n\ntype Operator implements RoleType {\n departments: [Department!]!\n title: [String!]!\n employees: [Employee!]!\n operatorType: [OperationType!]!\n}\n\ntype Employee implements Identifiable {\n details: Details\n id: Int!\n tag: String!\n role: RoleType!\n notes: String\n updatedAt: String!\n startDate: String!\n currentMood: Mood!\n derivedMood: Mood!\n isAvailable: Boolean!\n rootFieldThrowsError: String\n rootFieldErrorWrapper: ErrorWrapper\n hobbies: [Hobby!]\n products: [ProductName!]!\n productCount: Int!\n fieldThrowsError: String\n}\n\ntype Cosmo implements IProduct {\n upc: ID!\n engineers: [Employee!]!\n lead: Employee!\n name: ProductName!\n repositoryURL: String!\n}\n\ntype SDK implements IProduct {\n upc: ID!\n engineers: [Employee!]!\n owner: Employee!\n unicode: String!\n clientLanguages: [ProgrammingLanguage!]!\n}\n\ninterface Pet implements Animal {\n class: Class!\n gender: Gender!\n name: String!\n}\n\ntype Alligator implements Pet & Animal {\n class: Class!\n dangerous: String!\n gender: Gender!\n name: String!\n}\n\ntype Cat implements Pet & Animal {\n class: Class!\n gender: Gender!\n name: String!\n type: CatType!\n}\n\ntype Dog implements Pet & Animal {\n breed: DogBreed!\n class: Class!\n gender: Gender!\n name: String!\n}\n\ntype Mouse implements Pet & Animal {\n class: Class!\n gender: Gender!\n name: String!\n}\n\ntype Pony implements Pet & Animal {\n class: Class!\n gender: Gender!\n name: String!\n}\n\ntype Exercise implements Hobby {\n employees: [Employee!]!\n category: ExerciseType!\n}\n\ntype Flying implements Experience & Hobby {\n employees: [Employee!]!\n planeModels: [String!]!\n yearsOfExperience: Float!\n}\n\ntype Gaming implements Experience & Hobby {\n employees: [Employee!]!\n genres: [GameGenre!]!\n name: String!\n yearsOfExperience: Float!\n}\n\ntype Other implements Hobby {\n employees: [Employee!]!\n name: String!\n}\n\ntype Programming implements Hobby {\n employees: [Employee!]!\n languages: [ProgrammingLanguage!]!\n}\n\ntype Travelling implements Hobby {\n employees: [Employee!]!\n countriesLived: [Country!]!\n}\n\ntype DirectiveFact implements TopSecretFact {\n title: String!\n description: FactContent!\n factType: TopSecretFactType\n}\n\ntype EntityFact implements TopSecretFact {\n title: String!\n description: FactContent!\n factType: TopSecretFactType\n}\n\ntype MiscellaneousFact implements TopSecretFact {\n title: String!\n description: FactContent!\n factType: TopSecretFactType\n}" + }, + "subgraphs": [ + { + "id": "0", + "name": "employees", + "routingUrl": "http://localhost:4001/graphql" + }, + { + "id": "1", + "name": "family", + "routingUrl": "http://localhost:4002/graphql" + }, + { + "id": "2", + "name": "hobbies", + "routingUrl": "http://localhost:4003/graphql" + }, + { + "id": "3", + "name": "products_fg", + "routingUrl": "http://localhost:4010/graphql" + }, + { + "id": "4", + "name": "test1", + "routingUrl": "http://localhost:4006/graphql" + }, + { + "id": "5", + "name": "availability", + "routingUrl": "http://localhost:4007/graphql" + }, + { + "id": "6", + "name": "mood", + "routingUrl": "http://localhost:4008/graphql" + }, + { + "id": "7", + "name": "countries", + "routingUrl": "http://localhost:4009/graphql" + }, + { + "id": "8", + "name": "employeeupdated" + } + ] +} \ No newline at end of file diff --git a/router-tests/testenv/testdata/manifest/latest.json b/router-tests/testenv/testdata/manifest/latest.json new file mode 100644 index 0000000000..b0a441b85d --- /dev/null +++ b/router-tests/testenv/testdata/manifest/latest.json @@ -0,0 +1,4232 @@ +{ + "version": "ede1a8ce-18e9-4639-b407-b202459d3e29", + "engineConfig": { + "defaultFlushInterval": "500", + "datasourceConfigurations": [ + { + "kind": "GRAPHQL", + "rootNodes": [ + { + "typeName": "Query", + "fieldNames": [ + "employee", + "employeeAsList", + "employees", + "products", + "teammates", + "firstEmployee" + ] + }, + { + "typeName": "Mutation", + "fieldNames": [ + "updateEmployeeTag", + "singleUpload", + "singleUploadWithInput", + "multipleUpload" + ] + }, + { + "typeName": "Subscription", + "fieldNames": [ + "currentTime", + "countEmp", + "countEmp2", + "countFor" + ] + }, + { + "typeName": "Country", + "fieldNames": [ + "key" + ] + }, + { + "typeName": "Employee", + "fieldNames": [ + "details", + "id", + "tag", + "role", + "updatedAt", + "startDate", + "derivedMood", + "rootFieldThrowsError", + "rootFieldErrorWrapper" + ], + "externalFieldNames": [ + "currentMood", + "isAvailable" + ] + }, + { + "typeName": "Consultancy", + "fieldNames": [ + "upc", + "lead", + "isLeadAvailable" + ] + }, + { + "typeName": "Cosmo", + "fieldNames": [ + "upc", + "engineers", + "lead" + ] + }, + { + "typeName": "SDK", + "fieldNames": [ + "upc", + "engineers", + "owner", + "unicode" + ] + } + ], + "childNodes": [ + { + "typeName": "RoleType", + "fieldNames": [ + "departments", + "title", + "employees" + ] + }, + { + "typeName": "Identifiable", + "fieldNames": [ + "id" + ] + }, + { + "typeName": "Engineer", + "fieldNames": [ + "departments", + "title", + "employees", + "engineerType" + ] + }, + { + "typeName": "Marketer", + "fieldNames": [ + "departments", + "title", + "employees" + ] + }, + { + "typeName": "Operator", + "fieldNames": [ + "departments", + "title", + "employees", + "operatorType" + ] + }, + { + "typeName": "Details", + "fieldNames": [ + "forename", + "location", + "surname", + "pastLocations" + ] + }, + { + "typeName": "City", + "fieldNames": [ + "type", + "name", + "country" + ] + }, + { + "typeName": "CountryKey", + "fieldNames": [ + "name" + ] + }, + { + "typeName": "ErrorWrapper", + "fieldNames": [ + "okField", + "errorField" + ] + }, + { + "typeName": "Time", + "fieldNames": [ + "unixTime", + "timeStamp" + ] + }, + { + "typeName": "IProduct", + "fieldNames": [ + "upc", + "engineers" + ] + } + ], + "overrideFieldPathFromAlias": true, + "customGraphql": { + "fetch": { + "url": { + "staticVariableContent": "http://localhost:4001/graphql" + }, + "method": "POST", + "body": {}, + "baseUrl": {}, + "path": {} + }, + "subscription": { + "enabled": true, + "url": { + "staticVariableContent": "http://localhost:4001/graphql" + }, + "protocol": "GRAPHQL_SUBSCRIPTION_PROTOCOL_WS", + "websocketSubprotocol": "GRAPHQL_WEBSOCKET_SUBPROTOCOL_AUTO" + }, + "federation": { + "enabled": true, + "serviceSdl": "extend schema\n @link(\n url: \"https://specs.apollo.dev/federation/v2.5\"\n import: [\n \"@authenticated\"\n \"@composeDirective\"\n \"@external\"\n \"@extends\"\n \"@inaccessible\"\n \"@interfaceObject\"\n \"@override\"\n \"@provides\"\n \"@key\"\n \"@requires\"\n \"@requiresScopes\"\n \"@shareable\"\n \"@tag\"\n ]\n )\n\ndirective @goField(\n forceResolver: Boolean\n name: String\n omittable: Boolean\n) on INPUT_FIELD_DEFINITION | FIELD_DEFINITION\n\ntype Query {\n employee(id: Int!): Employee\n employeeAsList(id: Int!): [Employee]\n employees: [Employee]\n products: [Products!]!\n teammates(team: Department!): [Employee!]!\n firstEmployee: Employee! @tag(name: \"internal\")\n}\n\nscalar Upload\n\ntype Mutation {\n updateEmployeeTag(id: Int!, tag: String!): Employee\n\n singleUpload(file: Upload!): Boolean!\n singleUploadWithInput(arg: FileUpload!): Boolean!\n multipleUpload(files: [Upload!]!): Boolean!\n}\n\ninput FileUpload {\n nested: DeeplyNestedFileUpload\n nestedList: [Upload!]\n}\n\ninput DeeplyNestedFileUpload {\n file: Upload!\n}\n\ntype Subscription {\n \"\"\"\n `currentTime` will return a stream of `Time` objects.\n \"\"\"\n currentTime: Time!\n countEmp(max: Int!, intervalMilliseconds: Int!): Int!\n countEmp2(max: Int!, intervalMilliseconds: Int!): Int!\n countFor(count: Int!): Int!\n}\n\nenum Department {\n ENGINEERING\n MARKETING\n OPERATIONS\n}\n\ninterface RoleType {\n departments: [Department!]!\n title: [String!]!\n employees: [Employee!]! @goField(forceResolver: true)\n}\n\nenum EngineerType {\n BACKEND\n FRONTEND\n FULLSTACK\n}\n\ninterface Identifiable {\n id: Int!\n}\n\ntype Engineer implements RoleType {\n departments: [Department!]!\n title: [String!]!\n employees: [Employee!]! @goField(forceResolver: true)\n engineerType: EngineerType!\n}\n\ntype Marketer implements RoleType {\n departments: [Department!]!\n title: [String!]!\n employees: [Employee!]! @goField(forceResolver: true)\n}\n\nenum OperationType {\n FINANCE\n HUMAN_RESOURCES\n}\n\ntype Operator implements RoleType {\n departments: [Department!]!\n title: [String!]!\n employees: [Employee!]! @goField(forceResolver: true)\n operatorType: [OperationType!]!\n}\n\ntype Details {\n forename: String! @shareable\n location: Country!\n surname: String! @shareable\n pastLocations: [City!]!\n}\n\ntype City {\n type: String!\n name: String!\n country: Country\n}\n\n# Using a nested key field simply because it can showcase potential bug\n# vectors / Federation capabilities.\ntype Country @key(fields: \"key { name }\", resolvable: false) {\n key: CountryKey!\n}\n\ntype CountryKey {\n name: String!\n}\n\nenum Mood {\n HAPPY\n SAD\n}\n\ntype Employee implements Identifiable @key(fields: \"id\") {\n details: Details! @shareable\n id: Int!\n tag: String!\n role: RoleType!\n notes: String @shareable\n updatedAt: String!\n startDate: String! @requiresScopes(scopes: [[\"read:employee\", \"read:private\"], [\"read:all\"]])\n currentMood: Mood! @external\n derivedMood: Mood! @requires(fields: \"currentMood\")\n # From the `availability` service. Only defined for use in @requires\n isAvailable: Boolean! @external\n rootFieldThrowsError: String @goField(forceResolver: true)\n rootFieldErrorWrapper: ErrorWrapper @goField(forceResolver: true)\n}\n\ntype ErrorWrapper {\n okField: String\n errorField: String @goField(forceResolver: true)\n}\n\ntype Time {\n unixTime: Int!\n timeStamp: String!\n}\n\nunion Products = Consultancy | Cosmo | SDK\n\ninterface IProduct {\n upc: ID!\n engineers: [Employee!]!\n}\n\ntype Consultancy @key(fields: \"upc\") {\n upc: ID!\n lead: Employee!\n isLeadAvailable: Boolean @requires(fields: \"lead { isAvailable }\")\n}\n\ntype Cosmo implements IProduct @key(fields: \"upc\") {\n upc: ID!\n engineers: [Employee!]!\n lead: Employee!\n}\n\ntype SDK implements IProduct @key(fields: \"upc\") {\n upc: ID!\n engineers: [Employee!]!\n owner: Employee!\n unicode: String!\n}\n" + }, + "upstreamSchema": { + "key": "2ebeba33065ef483f119d0097b7cfab1bfe2e1a7" + } + }, + "requestTimeoutSeconds": "10", + "id": "0", + "keys": [ + { + "typeName": "Country", + "selectionSet": "key { name }", + "disableEntityResolver": true + }, + { + "typeName": "Employee", + "selectionSet": "id" + }, + { + "typeName": "Consultancy", + "selectionSet": "upc" + }, + { + "typeName": "Cosmo", + "selectionSet": "upc" + }, + { + "typeName": "SDK", + "selectionSet": "upc" + } + ], + "requires": [ + { + "typeName": "Employee", + "fieldName": "derivedMood", + "selectionSet": "currentMood" + }, + { + "typeName": "Consultancy", + "fieldName": "isLeadAvailable", + "selectionSet": "lead { isAvailable }" + } + ] + }, + { + "kind": "GRAPHQL", + "rootNodes": [ + { + "typeName": "Query", + "fieldNames": [ + "findEmployees" + ] + }, + { + "typeName": "Employee", + "fieldNames": [ + "id", + "details" + ] + } + ], + "childNodes": [ + { + "typeName": "Animal", + "fieldNames": [ + "class", + "gender" + ] + }, + { + "typeName": "Pet", + "fieldNames": [ + "class", + "gender", + "name" + ] + }, + { + "typeName": "Alligator", + "fieldNames": [ + "class", + "dangerous", + "gender", + "name" + ] + }, + { + "typeName": "Cat", + "fieldNames": [ + "class", + "gender", + "name", + "type" + ] + }, + { + "typeName": "Dog", + "fieldNames": [ + "breed", + "class", + "gender", + "name" + ] + }, + { + "typeName": "Mouse", + "fieldNames": [ + "class", + "gender", + "name" + ] + }, + { + "typeName": "Pony", + "fieldNames": [ + "class", + "gender", + "name" + ] + }, + { + "typeName": "Details", + "fieldNames": [ + "forename", + "middlename", + "surname", + "hasChildren", + "maritalStatus", + "nationality", + "pets" + ] + } + ], + "overrideFieldPathFromAlias": true, + "customGraphql": { + "fetch": { + "url": { + "staticVariableContent": "http://localhost:4002/graphql" + }, + "method": "POST", + "body": {}, + "baseUrl": {}, + "path": {} + }, + "subscription": { + "enabled": true, + "url": { + "staticVariableContent": "http://localhost:4002/graphql" + }, + "protocol": "GRAPHQL_SUBSCRIPTION_PROTOCOL_WS", + "websocketSubprotocol": "GRAPHQL_WEBSOCKET_SUBPROTOCOL_AUTO" + }, + "federation": { + "enabled": true, + "serviceSdl": "extend schema\n@link(url: \"https://specs.apollo.dev/federation/v2.5\", import: [\"@authenticated\", \"@composeDirective\", \"@external\", \"@extends\", \"@inaccessible\", \"@interfaceObject\", \"@override\", \"@provides\", \"@key\", \"@requires\", \"@requiresScopes\", \"@shareable\", \"@tag\"])\n\ntype Query {\n \"\"\" This is a GraphQL query that retrieves a list of employees.\"\"\"\n findEmployees(criteria: SearchInput): [Employee!]!\n}\n\nenum Class {\n FISH\n MAMMAL\n REPTILE\n}\n\nenum Gender {\n FEMALE\n MALE\n UNKNOWN\n}\n\ninterface Animal {\n class: Class!\n gender: Gender!\n}\n\ninterface Pet implements Animal {\n class: Class!\n gender: Gender!\n name: String!\n}\n\nenum CatType {\n HOME\n STREET\n}\n\ntype Alligator implements Pet & Animal {\n class: Class!\n dangerous: String!\n gender: Gender!\n name: String!\n}\n\ntype Cat implements Pet & Animal {\n class: Class!\n gender: Gender!\n name: String!\n type: CatType!\n}\n\nenum DogBreed {\n GOLDEN_RETRIEVER\n POODLE\n ROTTWEILER\n YORKSHIRE_TERRIER\n}\n\ntype Dog implements Pet & Animal {\n breed: DogBreed!\n class: Class!\n gender: Gender!\n name: String!\n}\n\ntype Mouse implements Pet & Animal {\n class: Class!\n gender: Gender!\n name: String!\n}\n\ntype Pony implements Pet & Animal {\n class: Class!\n gender: Gender!\n name: String!\n}\n\nenum MaritalStatus {\n ENGAGED\n MARRIED\n}\n\nenum Nationality {\n AMERICAN\n DUTCH\n ENGLISH\n GERMAN\n INDIAN\n SPANISH\n UKRAINIAN\n}\n\ntype Details {\n forename: String! @shareable\n middlename: String @deprecated\n surname: String! @shareable\n hasChildren: Boolean!\n maritalStatus: MaritalStatus\n nationality: Nationality!\n pets: [Pet]\n}\n\ntype Employee @key(fields: \"id\") {\n id: Int!\n details: Details @shareable\n}\n\n\"\"\" Allows to filter employees by their details. \"\"\"\ninput SearchInput {\n hasPets: Boolean\n nationality: Nationality\n nested: NestedSearchInput\n}\n\ninput NestedSearchInput {\n maritalStatus: MaritalStatus\n hasChildren: Boolean\n}\n" + }, + "upstreamSchema": { + "key": "6618be4cd5102db58a9821e09dfa49eec9262146" + } + }, + "requestTimeoutSeconds": "10", + "id": "1", + "keys": [ + { + "typeName": "Employee", + "selectionSet": "id" + } + ] + }, + { + "kind": "GRAPHQL", + "rootNodes": [ + { + "typeName": "Country", + "fieldNames": [ + "key" + ] + }, + { + "typeName": "Employee", + "fieldNames": [ + "id", + "hobbies" + ] + }, + { + "typeName": "SDK", + "fieldNames": [ + "upc", + "clientLanguages" + ] + }, + { + "typeName": "Subscription", + "fieldNames": [ + "countHob" + ] + } + ], + "childNodes": [ + { + "typeName": "Exercise", + "fieldNames": [ + "employees", + "category" + ] + }, + { + "typeName": "Experience", + "fieldNames": [ + "yearsOfExperience" + ] + }, + { + "typeName": "Flying", + "fieldNames": [ + "employees", + "planeModels", + "yearsOfExperience" + ] + }, + { + "typeName": "Gaming", + "fieldNames": [ + "employees", + "genres", + "name", + "yearsOfExperience" + ] + }, + { + "typeName": "Other", + "fieldNames": [ + "employees", + "name" + ] + }, + { + "typeName": "Programming", + "fieldNames": [ + "employees", + "languages" + ] + }, + { + "typeName": "CountryKey", + "fieldNames": [ + "name" + ] + }, + { + "typeName": "Travelling", + "fieldNames": [ + "employees", + "countriesLived" + ] + }, + { + "typeName": "Hobby", + "fieldNames": [ + "employees" + ] + } + ], + "overrideFieldPathFromAlias": true, + "customGraphql": { + "fetch": { + "url": { + "staticVariableContent": "http://localhost:4003/graphql" + }, + "method": "POST", + "body": {}, + "baseUrl": {}, + "path": {} + }, + "subscription": { + "enabled": true, + "url": { + "staticVariableContent": "http://localhost:4003/graphql" + }, + "protocol": "GRAPHQL_SUBSCRIPTION_PROTOCOL_WS", + "websocketSubprotocol": "GRAPHQL_WEBSOCKET_SUBPROTOCOL_AUTO" + }, + "federation": { + "enabled": true, + "serviceSdl": "extend schema\n@link(url: \"https://specs.apollo.dev/federation/v2.5\", import: [\"@authenticated\", \"@composeDirective\", \"@external\", \"@extends\", \"@inaccessible\", \"@interfaceObject\", \"@override\", \"@provides\", \"@key\", \"@requires\", \"@requiresScopes\", \"@shareable\", \"@tag\"])\n\ndirective @goField(\n forceResolver: Boolean\n name: String\n omittable: Boolean\n) on INPUT_FIELD_DEFINITION | FIELD_DEFINITION\n\nenum ExerciseType {\n CALISTHENICS\n HIKING\n SPORT\n STRENGTH_TRAINING\n}\n\ntype Exercise implements Hobby {\n employees: [Employee!]! @goField(forceResolver: true)\n category: ExerciseType!\n}\n\ninterface Experience {\n yearsOfExperience: Float!\n}\n\ntype Flying implements Experience & Hobby {\n employees: [Employee!]! @goField(forceResolver: true)\n planeModels: [String!]!\n yearsOfExperience: Float!\n}\n\nenum GameGenre {\n ADVENTURE\n BOARD\n FPS\n CARD\n RPG\n ROGUELITE\n SIMULATION\n STRATEGY\n}\n\ntype Gaming implements Experience & Hobby {\n employees: [Employee!]! @goField(forceResolver: true)\n genres: [GameGenre!]!\n name: String!\n yearsOfExperience: Float!\n}\n\ntype Other implements Hobby {\n employees: [Employee!]! @goField(forceResolver: true)\n name: String!\n}\n\nenum ProgrammingLanguage {\n CSHARP\n GO\n RUST\n TYPESCRIPT\n}\n\ntype Programming implements Hobby {\n employees: [Employee!]! @goField(forceResolver: true)\n languages: [ProgrammingLanguage!]!\n}\n\n# Using a nested key field simply because it can showcase potential bug\n# vectors / Federation capabilities.\ntype Country @key(fields: \"key { name }\", resolvable: false) {\n key: CountryKey!\n}\n\ntype CountryKey {\n name: String!\n}\n\ntype Travelling implements Hobby {\n employees: [Employee!]! @goField(forceResolver: true)\n countriesLived: [Country!]!\n}\n\ninterface Hobby {\n employees: [Employee!]! @goField(forceResolver: true)\n}\n\ntype Employee @key(fields: \"id\") {\n id: Int!\n hobbies: [Hobby!]\n}\n\ntype SDK @key(fields: \"upc\") {\n upc: ID!\n clientLanguages: [ProgrammingLanguage!]!\n}\n\ntype Subscription {\n countHob(max: Int! intervalMilliseconds: Int!): Int!\n}" + }, + "upstreamSchema": { + "key": "68291c651cf7b5b50afb169bd12d2cd1ebf4ded6" + } + }, + "requestTimeoutSeconds": "10", + "id": "2", + "keys": [ + { + "typeName": "Country", + "selectionSet": "key { name }", + "disableEntityResolver": true + }, + { + "typeName": "Employee", + "selectionSet": "id" + }, + { + "typeName": "SDK", + "selectionSet": "upc" + } + ] + }, + { + "kind": "GRAPHQL", + "rootNodes": [ + { + "typeName": "Query", + "fieldNames": [ + "productTypes", + "topSecretFederationFacts", + "factTypes", + "sharedThings", + "shippings", + "findShipping" + ] + }, + { + "typeName": "Mutation", + "fieldNames": [ + "addFact" + ] + }, + { + "typeName": "Employee", + "fieldNames": [ + "id", + "products", + "notes" + ] + }, + { + "typeName": "Consultancy", + "fieldNames": [ + "upc", + "name" + ] + }, + { + "typeName": "Cosmo", + "fieldNames": [ + "upc", + "name", + "repositoryURL" + ] + }, + { + "typeName": "Shipping", + "fieldNames": [ + "id", + "carrier", + "trackingNumber", + "estimate" + ], + "externalFieldNames": [ + "weight" + ] + } + ], + "childNodes": [ + { + "typeName": "Thing", + "fieldNames": [ + "a" + ] + }, + { + "typeName": "TopSecretFact", + "fieldNames": [ + "description", + "factType" + ] + }, + { + "typeName": "DirectiveFact", + "fieldNames": [ + "title", + "description", + "factType" + ] + }, + { + "typeName": "EntityFact", + "fieldNames": [ + "title", + "description", + "factType" + ] + }, + { + "typeName": "MiscellaneousFact", + "fieldNames": [ + "title", + "description", + "factType" + ] + }, + { + "typeName": "Documentation", + "fieldNames": [ + "url", + "urls" + ] + } + ], + "overrideFieldPathFromAlias": true, + "customGraphql": { + "fetch": { + "url": { + "staticVariableContent": "http://localhost:4004/graphql" + }, + "method": "POST", + "body": {}, + "baseUrl": {}, + "path": {} + }, + "subscription": { + "enabled": true, + "url": { + "staticVariableContent": "http://localhost:4004/graphql" + }, + "protocol": "GRAPHQL_SUBSCRIPTION_PROTOCOL_WS", + "websocketSubprotocol": "GRAPHQL_WEBSOCKET_SUBPROTOCOL_AUTO" + }, + "federation": { + "enabled": true, + "serviceSdl": "extend schema\n@link(url: \"https://specs.apollo.dev/federation/v2.5\", import: [\"@authenticated\", \"@composeDirective\", \"@external\", \"@extends\", \"@inaccessible\", \"@interfaceObject\", \"@override\", \"@provides\", \"@key\", \"@requires\", \"@requiresScopes\", \"@shareable\", \"@tag\"])\n\nschema {\n query: Queries\n mutation: Mutation\n}\n\ntype Queries {\n productTypes: [Products!]!\n topSecretFederationFacts: [TopSecretFact!]! @requiresScopes(scopes: [[\"read:fact\"], [\"read:all\"]])\n factTypes: [TopSecretFactType!]\n sharedThings(numOfA: Int! numOfB: Int!): [Thing!]! @shareable\n shippings: [Shipping!]!\n findShipping(id: ID!, trackingNumber: ID!): Shipping!\n}\n\ntype Mutation {\n addFact(fact: TopSecretFactInput!): TopSecretFact! @requiresScopes(scopes: [[\"write:fact\"], [\"write:all\"]])\n}\n\ntype Thing @shareable {\n a: String!\n}\n\ninput TopSecretFactInput {\n title: String!\n description: FactContent!\n factType: TopSecretFactType!\n}\n\nenum TopSecretFactType @authenticated {\n DIRECTIVE,\n ENTITY,\n MISCELLANEOUS,\n}\n\ninterface TopSecretFact @authenticated {\n description: FactContent!\n factType: TopSecretFactType\n}\n\nscalar FactContent @requiresScopes(scopes: [[\"read:scalar\"], [\"read:all\"]])\n\ntype DirectiveFact implements TopSecretFact @authenticated {\n title: String!\n description: FactContent!\n factType: TopSecretFactType\n}\n\ntype EntityFact implements TopSecretFact @requiresScopes(scopes: [[\"read:entity\"]]){\n title: String!\n description: FactContent!\n factType: TopSecretFactType\n}\n\ntype MiscellaneousFact implements TopSecretFact {\n title: String!\n description: FactContent! @requiresScopes(scopes: [[\"read:miscellaneous\"]])\n factType: TopSecretFactType\n}\n\nenum ProductName {\n CONSULTANCY\n COSMO\n ENGINE\n FINANCE\n HUMAN_RESOURCES\n MARKETING\n SDK\n}\n\ntype Employee @key(fields: \"id\") {\n id: Int!\n products: [ProductName!]!\n notes: String @override(from: \"employees\")\n}\n\nunion Products = Consultancy | Cosmo | Documentation\n\ntype Consultancy @key(fields: \"upc\") {\n upc: ID!\n name: ProductName!\n}\n\ntype Cosmo @key(fields: \"upc\") {\n upc: ID!\n name: ProductName!\n repositoryURL: String!\n}\n\ntype Documentation {\n url(product: ProductName!): String!\n urls(products: [ProductName!]!): [String!]!\n}\n\ntype Shipping @key(fields: \"id trackingNumber\") {\n id: ID!\n carrier: String!\n trackingNumber: String!\n weight: Float! @external\n estimate: Float! @requires(fields: \"weight\")\n}\n" + }, + "upstreamSchema": { + "key": "bfdab3dc85da07e6fcdac329879dc68cf6146324" + } + }, + "requestTimeoutSeconds": "10", + "id": "3", + "keys": [ + { + "typeName": "Employee", + "selectionSet": "id" + }, + { + "typeName": "Consultancy", + "selectionSet": "upc" + }, + { + "typeName": "Cosmo", + "selectionSet": "upc" + }, + { + "typeName": "Shipping", + "selectionSet": "id trackingNumber" + } + ], + "requires": [ + { + "typeName": "Shipping", + "fieldName": "estimate", + "selectionSet": "weight" + } + ] + }, + { + "kind": "GRAPHQL", + "rootNodes": [ + { + "typeName": "Query", + "fieldNames": [ + "headerValue", + "initPayloadValue", + "initialPayload", + "delay", + "bigResponse", + "longResponse", + "bigAbstractResponse", + "rootFieldWithListArg", + "rootFieldWithNestedListArg", + "rootFieldWithListOfInputArg", + "rootFieldWithListOfEnumArg", + "rootFieldWithInput", + "floatField", + "sharedThings", + "secret" + ] + }, + { + "typeName": "Subscription", + "fieldNames": [ + "headerValue", + "initPayloadValue", + "initialPayload", + "returnsError" + ] + }, + { + "typeName": "Employee", + "fieldNames": [ + "id", + "fieldThrowsError" + ] + } + ], + "childNodes": [ + { + "typeName": "Secret", + "fieldNames": [ + "value" + ] + }, + { + "typeName": "Thing", + "fieldNames": [ + "b" + ] + }, + { + "typeName": "InputResponse", + "fieldNames": [ + "arg" + ] + }, + { + "typeName": "TimestampedString", + "fieldNames": [ + "value", + "unixTime", + "seq", + "total", + "initialPayload" + ] + }, + { + "typeName": "BigObject", + "fieldNames": [ + "nestedObjects" + ] + }, + { + "typeName": "NestedObject", + "fieldNames": [ + "deeplyNestedObjects" + ] + }, + { + "typeName": "DeeplyNestedObject", + "fieldNames": [ + "aFieldOnDeeplyNestedObject", + "bFieldOnDeeplyNestedObject", + "cFieldOnDeeplyNestedObject", + "dFieldOnDeeplyNestedObject", + "eFieldOnDeeplyNestedObject", + "fFieldOnDeeplyNestedObject", + "gFieldOnDeeplyNestedObject", + "hFieldOnDeeplyNestedObject", + "iFieldOnDeeplyNestedObject", + "jFieldOnDeeplyNestedObject", + "kFieldOnDeeplyNestedObject", + "lFieldOnDeeplyNestedObject", + "mFieldOnDeeplyNestedObject", + "nFieldOnDeeplyNestedObject", + "oFieldOnDeeplyNestedObject", + "pFieldOnDeeplyNestedObject", + "qFieldOnDeeplyNestedObject", + "rFieldOnDeeplyNestedObject", + "sFieldOnDeeplyNestedObject", + "tFieldOnDeeplyNestedObject", + "uFieldOnDeeplyNestedObject", + "vFieldOnDeeplyNestedObject", + "wFieldOnDeeplyNestedObject", + "xFieldOnDeeplyNestedObject", + "yFieldOnDeeplyNestedObject", + "zFieldOnDeeplyNestedObject" + ] + }, + { + "typeName": "ABigObject", + "fieldNames": [ + "aFieldOnABigObject", + "bFieldOnABigObject", + "cFieldOnABigObject", + "dFieldOnABigObject", + "eFieldOnABigObject", + "fFieldOnABigObject", + "gFieldOnABigObject", + "hFieldOnABigObject", + "iFieldOnABigObject", + "jFieldOnABigObject", + "kFieldOnABigObject", + "lFieldOnABigObject", + "mFieldOnABigObject", + "nFieldOnABigObject", + "oFieldOnABigObject", + "pFieldOnABigObject", + "qFieldOnABigObject", + "rFieldOnABigObject", + "sFieldOnABigObject", + "tFieldOnABigObject", + "uFieldOnABigObject", + "vFieldOnABigObject", + "wFieldOnABigObject", + "xFieldOnABigObject", + "yFieldOnABigObject", + "zFieldOnABigObject" + ] + }, + { + "typeName": "BBigObject", + "fieldNames": [ + "aFieldOnBBigObject", + "bFieldOnBBigObject", + "cFieldOnBBigObject", + "dFieldOnBBigObject", + "eFieldOnBBigObject", + "fFieldOnBBigObject", + "gFieldOnBBigObject", + "hFieldOnBBigObject", + "iFieldOnBBigObject", + "jFieldOnBBigObject", + "kFieldOnBBigObject", + "lFieldOnBBigObject", + "mFieldOnBBigObject", + "nFieldOnBBigObject", + "oFieldOnBBigObject", + "pFieldOnBBigObject", + "qFieldOnBBigObject", + "rFieldOnBBigObject", + "sFieldOnBBigObject", + "tFieldOnBBigObject", + "uFieldOnBBigObject", + "vFieldOnBBigObject", + "wFieldOnBBigObject", + "xFieldOnBBigObject", + "yFieldOnBBigObject", + "zFieldOnBBigObject" + ] + }, + { + "typeName": "CBigObject", + "fieldNames": [ + "aFieldOnCBigObject", + "bFieldOnCBigObject", + "cFieldOnCBigObject", + "dFieldOnCBigObject", + "eFieldOnCBigObject", + "fFieldOnCBigObject", + "gFieldOnCBigObject", + "hFieldOnCBigObject", + "iFieldOnCBigObject", + "jFieldOnCBigObject", + "kFieldOnCBigObject", + "lFieldOnCBigObject", + "mFieldOnCBigObject", + "nFieldOnCBigObject", + "oFieldOnCBigObject", + "pFieldOnCBigObject", + "qFieldOnCBigObject", + "rFieldOnCBigObject", + "sFieldOnCBigObject", + "tFieldOnCBigObject", + "uFieldOnCBigObject", + "vFieldOnCBigObject", + "wFieldOnCBigObject", + "xFieldOnCBigObject", + "yFieldOnCBigObject", + "zFieldOnCBigObject" + ] + }, + { + "typeName": "DBigObject", + "fieldNames": [ + "aFieldOnDBigObject", + "bFieldOnDBigObject", + "cFieldOnDBigObject", + "dFieldOnDBigObject", + "eFieldOnDBigObject", + "fFieldOnDBigObject", + "gFieldOnDBigObject", + "hFieldOnDBigObject", + "iFieldOnDBigObject", + "jFieldOnDBigObject", + "kFieldOnDBigObject", + "lFieldOnDBigObject", + "mFieldOnDBigObject", + "nFieldOnDBigObject", + "oFieldOnDBigObject", + "pFieldOnDBigObject", + "qFieldOnDBigObject", + "rFieldOnDBigObject", + "sFieldOnDBigObject", + "tFieldOnDBigObject", + "uFieldOnDBigObject", + "vFieldOnDBigObject", + "wFieldOnDBigObject", + "xFieldOnDBigObject", + "yFieldOnDBigObject", + "zFieldOnDBigObject" + ] + }, + { + "typeName": "EBigObject", + "fieldNames": [ + "aFieldOnEBigObject", + "bFieldOnEBigObject", + "cFieldOnEBigObject", + "dFieldOnEBigObject", + "eFieldOnEBigObject", + "fFieldOnEBigObject", + "gFieldOnEBigObject", + "hFieldOnEBigObject", + "iFieldOnEBigObject", + "jFieldOnEBigObject", + "kFieldOnEBigObject", + "lFieldOnEBigObject", + "mFieldOnEBigObject", + "nFieldOnEBigObject", + "oFieldOnEBigObject", + "pFieldOnEBigObject", + "qFieldOnEBigObject", + "rFieldOnEBigObject", + "sFieldOnEBigObject", + "tFieldOnEBigObject", + "uFieldOnEBigObject", + "vFieldOnEBigObject", + "wFieldOnEBigObject", + "xFieldOnEBigObject", + "yFieldOnEBigObject", + "zFieldOnEBigObject" + ] + }, + { + "typeName": "FBigObject", + "fieldNames": [ + "aFieldOnFBigObject", + "bFieldOnFBigObject", + "cFieldOnFBigObject", + "dFieldOnFBigObject", + "eFieldOnFBigObject", + "fFieldOnFBigObject", + "gFieldOnFBigObject", + "hFieldOnFBigObject", + "iFieldOnFBigObject", + "jFieldOnFBigObject", + "kFieldOnFBigObject", + "lFieldOnFBigObject", + "mFieldOnFBigObject", + "nFieldOnFBigObject", + "oFieldOnFBigObject", + "pFieldOnFBigObject", + "qFieldOnFBigObject", + "rFieldOnFBigObject", + "sFieldOnFBigObject", + "tFieldOnFBigObject", + "uFieldOnFBigObject", + "vFieldOnFBigObject", + "wFieldOnFBigObject", + "xFieldOnFBigObject", + "yFieldOnFBigObject", + "zFieldOnFBigObject" + ] + }, + { + "typeName": "GBigObject", + "fieldNames": [ + "aFieldOnGBigObject", + "bFieldOnGBigObject", + "cFieldOnGBigObject", + "dFieldOnGBigObject", + "eFieldOnGBigObject", + "fFieldOnGBigObject", + "gFieldOnGBigObject", + "hFieldOnGBigObject", + "iFieldOnGBigObject", + "jFieldOnGBigObject", + "kFieldOnGBigObject", + "lFieldOnGBigObject", + "mFieldOnGBigObject", + "nFieldOnGBigObject", + "oFieldOnGBigObject", + "pFieldOnGBigObject", + "qFieldOnGBigObject", + "rFieldOnGBigObject", + "sFieldOnGBigObject", + "tFieldOnGBigObject", + "uFieldOnGBigObject", + "vFieldOnGBigObject", + "wFieldOnGBigObject", + "xFieldOnGBigObject", + "yFieldOnGBigObject", + "zFieldOnGBigObject" + ] + }, + { + "typeName": "HBigObject", + "fieldNames": [ + "aFieldOnHBigObject", + "bFieldOnHBigObject", + "cFieldOnHBigObject", + "dFieldOnHBigObject", + "eFieldOnHBigObject", + "fFieldOnHBigObject", + "gFieldOnHBigObject", + "hFieldOnHBigObject", + "iFieldOnHBigObject", + "jFieldOnHBigObject", + "kFieldOnHBigObject", + "lFieldOnHBigObject", + "mFieldOnHBigObject", + "nFieldOnHBigObject", + "oFieldOnHBigObject", + "pFieldOnHBigObject", + "qFieldOnHBigObject", + "rFieldOnHBigObject", + "sFieldOnHBigObject", + "tFieldOnHBigObject", + "uFieldOnHBigObject", + "vFieldOnHBigObject", + "wFieldOnHBigObject", + "xFieldOnHBigObject", + "yFieldOnHBigObject", + "zFieldOnHBigObject" + ] + }, + { + "typeName": "IBigObject", + "fieldNames": [ + "aFieldOnIBigObject", + "bFieldOnIBigObject", + "cFieldOnIBigObject", + "dFieldOnIBigObject", + "eFieldOnIBigObject", + "fFieldOnIBigObject", + "gFieldOnIBigObject", + "hFieldOnIBigObject", + "iFieldOnIBigObject", + "jFieldOnIBigObject", + "kFieldOnIBigObject", + "lFieldOnIBigObject", + "mFieldOnIBigObject", + "nFieldOnIBigObject", + "oFieldOnIBigObject", + "pFieldOnIBigObject", + "qFieldOnIBigObject", + "rFieldOnIBigObject", + "sFieldOnIBigObject", + "tFieldOnIBigObject", + "uFieldOnIBigObject", + "vFieldOnIBigObject", + "wFieldOnIBigObject", + "xFieldOnIBigObject", + "yFieldOnIBigObject", + "zFieldOnIBigObject" + ] + }, + { + "typeName": "JBigObject", + "fieldNames": [ + "aFieldOnJBigObject", + "bFieldOnJBigObject", + "cFieldOnJBigObject", + "dFieldOnJBigObject", + "eFieldOnJBigObject", + "fFieldOnJBigObject", + "gFieldOnJBigObject", + "hFieldOnJBigObject", + "iFieldOnJBigObject", + "jFieldOnJBigObject", + "kFieldOnJBigObject", + "lFieldOnJBigObject", + "mFieldOnJBigObject", + "nFieldOnJBigObject", + "oFieldOnJBigObject", + "pFieldOnJBigObject", + "qFieldOnJBigObject", + "rFieldOnJBigObject", + "sFieldOnJBigObject", + "tFieldOnJBigObject", + "uFieldOnJBigObject", + "vFieldOnJBigObject", + "wFieldOnJBigObject", + "xFieldOnJBigObject", + "yFieldOnJBigObject", + "zFieldOnJBigObject" + ] + }, + { + "typeName": "KBigObject", + "fieldNames": [ + "aFieldOnKBigObject", + "bFieldOnKBigObject", + "cFieldOnKBigObject", + "dFieldOnKBigObject", + "eFieldOnKBigObject", + "fFieldOnKBigObject", + "gFieldOnKBigObject", + "hFieldOnKBigObject", + "iFieldOnKBigObject", + "jFieldOnKBigObject", + "kFieldOnKBigObject", + "lFieldOnKBigObject", + "mFieldOnKBigObject", + "nFieldOnKBigObject", + "oFieldOnKBigObject", + "pFieldOnKBigObject", + "qFieldOnKBigObject", + "rFieldOnKBigObject", + "sFieldOnKBigObject", + "tFieldOnKBigObject", + "uFieldOnKBigObject", + "vFieldOnKBigObject", + "wFieldOnKBigObject", + "xFieldOnKBigObject", + "yFieldOnKBigObject", + "zFieldOnKBigObject" + ] + }, + { + "typeName": "LBigObject", + "fieldNames": [ + "aFieldOnLBigObject", + "bFieldOnLBigObject", + "cFieldOnLBigObject", + "dFieldOnLBigObject", + "eFieldOnLBigObject", + "fFieldOnLBigObject", + "gFieldOnLBigObject", + "hFieldOnLBigObject", + "iFieldOnLBigObject", + "jFieldOnLBigObject", + "kFieldOnLBigObject", + "lFieldOnLBigObject", + "mFieldOnLBigObject", + "nFieldOnLBigObject", + "oFieldOnLBigObject", + "pFieldOnLBigObject", + "qFieldOnLBigObject", + "rFieldOnLBigObject", + "sFieldOnLBigObject", + "tFieldOnLBigObject", + "uFieldOnLBigObject", + "vFieldOnLBigObject", + "wFieldOnLBigObject", + "xFieldOnLBigObject", + "yFieldOnLBigObject", + "zFieldOnLBigObject" + ] + }, + { + "typeName": "MBigObject", + "fieldNames": [ + "aFieldOnMBigObject", + "bFieldOnMBigObject", + "cFieldOnMBigObject", + "dFieldOnMBigObject", + "eFieldOnMBigObject", + "fFieldOnMBigObject", + "gFieldOnMBigObject", + "hFieldOnMBigObject", + "iFieldOnMBigObject", + "jFieldOnMBigObject", + "kFieldOnMBigObject", + "lFieldOnMBigObject", + "mFieldOnMBigObject", + "nFieldOnMBigObject", + "oFieldOnMBigObject", + "pFieldOnMBigObject", + "qFieldOnMBigObject", + "rFieldOnMBigObject", + "sFieldOnMBigObject", + "tFieldOnMBigObject", + "uFieldOnMBigObject", + "vFieldOnMBigObject", + "wFieldOnMBigObject", + "xFieldOnMBigObject", + "yFieldOnMBigObject", + "zFieldOnMBigObject" + ] + }, + { + "typeName": "NBigObject", + "fieldNames": [ + "aFieldOnNBigObject", + "bFieldOnNBigObject", + "cFieldOnNBigObject", + "dFieldOnNBigObject", + "eFieldOnNBigObject", + "fFieldOnNBigObject", + "gFieldOnNBigObject", + "hFieldOnNBigObject", + "iFieldOnNBigObject", + "jFieldOnNBigObject", + "kFieldOnNBigObject", + "lFieldOnNBigObject", + "mFieldOnNBigObject", + "nFieldOnNBigObject", + "oFieldOnNBigObject", + "pFieldOnNBigObject", + "qFieldOnNBigObject", + "rFieldOnNBigObject", + "sFieldOnNBigObject", + "tFieldOnNBigObject", + "uFieldOnNBigObject", + "vFieldOnNBigObject", + "wFieldOnNBigObject", + "xFieldOnNBigObject", + "yFieldOnNBigObject", + "zFieldOnNBigObject" + ] + }, + { + "typeName": "OBigObject", + "fieldNames": [ + "aFieldOnOBigObject", + "bFieldOnOBigObject", + "cFieldOnOBigObject", + "dFieldOnOBigObject", + "eFieldOnOBigObject", + "fFieldOnOBigObject", + "gFieldOnOBigObject", + "hFieldOnOBigObject", + "iFieldOnOBigObject", + "jFieldOnOBigObject", + "kFieldOnOBigObject", + "lFieldOnOBigObject", + "mFieldOnOBigObject", + "nFieldOnOBigObject", + "oFieldOnOBigObject", + "pFieldOnOBigObject", + "qFieldOnOBigObject", + "rFieldOnOBigObject", + "sFieldOnOBigObject", + "tFieldOnOBigObject", + "uFieldOnOBigObject", + "vFieldOnOBigObject", + "wFieldOnOBigObject", + "xFieldOnOBigObject", + "yFieldOnOBigObject", + "zFieldOnOBigObject" + ] + }, + { + "typeName": "PBigObject", + "fieldNames": [ + "aFieldOnPBigObject", + "bFieldOnPBigObject", + "cFieldOnPBigObject", + "dFieldOnPBigObject", + "eFieldOnPBigObject", + "fFieldOnPBigObject", + "gFieldOnPBigObject", + "hFieldOnPBigObject", + "iFieldOnPBigObject", + "jFieldOnPBigObject", + "kFieldOnPBigObject", + "lFieldOnPBigObject", + "mFieldOnPBigObject", + "nFieldOnPBigObject", + "oFieldOnPBigObject", + "pFieldOnPBigObject", + "qFieldOnPBigObject", + "rFieldOnPBigObject", + "sFieldOnPBigObject", + "tFieldOnPBigObject", + "uFieldOnPBigObject", + "vFieldOnPBigObject", + "wFieldOnPBigObject", + "xFieldOnPBigObject", + "yFieldOnPBigObject", + "zFieldOnPBigObject" + ] + }, + { + "typeName": "QBigObject", + "fieldNames": [ + "aFieldOnQBigObject", + "bFieldOnQBigObject", + "cFieldOnQBigObject", + "dFieldOnQBigObject", + "eFieldOnQBigObject", + "fFieldOnQBigObject", + "gFieldOnQBigObject", + "hFieldOnQBigObject", + "iFieldOnQBigObject", + "jFieldOnQBigObject", + "kFieldOnQBigObject", + "lFieldOnQBigObject", + "mFieldOnQBigObject", + "nFieldOnQBigObject", + "oFieldOnQBigObject", + "pFieldOnQBigObject", + "qFieldOnQBigObject", + "rFieldOnQBigObject", + "sFieldOnQBigObject", + "tFieldOnQBigObject", + "uFieldOnQBigObject", + "vFieldOnQBigObject", + "wFieldOnQBigObject", + "xFieldOnQBigObject", + "yFieldOnQBigObject", + "zFieldOnQBigObject" + ] + }, + { + "typeName": "RBigObject", + "fieldNames": [ + "aFieldOnRBigObject", + "bFieldOnRBigObject", + "cFieldOnRBigObject", + "dFieldOnRBigObject", + "eFieldOnRBigObject", + "fFieldOnRBigObject", + "gFieldOnRBigObject", + "hFieldOnRBigObject", + "iFieldOnRBigObject", + "jFieldOnRBigObject", + "kFieldOnRBigObject", + "lFieldOnRBigObject", + "mFieldOnRBigObject", + "nFieldOnRBigObject", + "oFieldOnRBigObject", + "pFieldOnRBigObject", + "qFieldOnRBigObject", + "rFieldOnRBigObject", + "sFieldOnRBigObject", + "tFieldOnRBigObject", + "uFieldOnRBigObject", + "vFieldOnRBigObject", + "wFieldOnRBigObject", + "xFieldOnRBigObject", + "yFieldOnRBigObject", + "zFieldOnRBigObject" + ] + }, + { + "typeName": "SBigObject", + "fieldNames": [ + "aFieldOnSBigObject", + "bFieldOnSBigObject", + "cFieldOnSBigObject", + "dFieldOnSBigObject", + "eFieldOnSBigObject", + "fFieldOnSBigObject", + "gFieldOnSBigObject", + "hFieldOnSBigObject", + "iFieldOnSBigObject", + "jFieldOnSBigObject", + "kFieldOnSBigObject", + "lFieldOnSBigObject", + "mFieldOnSBigObject", + "nFieldOnSBigObject", + "oFieldOnSBigObject", + "pFieldOnSBigObject", + "qFieldOnSBigObject", + "rFieldOnSBigObject", + "sFieldOnSBigObject", + "tFieldOnSBigObject", + "uFieldOnSBigObject", + "vFieldOnSBigObject", + "wFieldOnSBigObject", + "xFieldOnSBigObject", + "yFieldOnSBigObject", + "zFieldOnSBigObject" + ] + }, + { + "typeName": "TBigObject", + "fieldNames": [ + "aFieldOnTBigObject", + "bFieldOnTBigObject", + "cFieldOnTBigObject", + "dFieldOnTBigObject", + "eFieldOnTBigObject", + "fFieldOnTBigObject", + "gFieldOnTBigObject", + "hFieldOnTBigObject", + "iFieldOnTBigObject", + "jFieldOnTBigObject", + "kFieldOnTBigObject", + "lFieldOnTBigObject", + "mFieldOnTBigObject", + "nFieldOnTBigObject", + "oFieldOnTBigObject", + "pFieldOnTBigObject", + "qFieldOnTBigObject", + "rFieldOnTBigObject", + "sFieldOnTBigObject", + "tFieldOnTBigObject", + "uFieldOnTBigObject", + "vFieldOnTBigObject", + "wFieldOnTBigObject", + "xFieldOnTBigObject", + "yFieldOnTBigObject", + "zFieldOnTBigObject" + ] + }, + { + "typeName": "UBigObject", + "fieldNames": [ + "aFieldOnUBigObject", + "bFieldOnUBigObject", + "cFieldOnUBigObject", + "dFieldOnUBigObject", + "eFieldOnUBigObject", + "fFieldOnUBigObject", + "gFieldOnUBigObject", + "hFieldOnUBigObject", + "iFieldOnUBigObject", + "jFieldOnUBigObject", + "kFieldOnUBigObject", + "lFieldOnUBigObject", + "mFieldOnUBigObject", + "nFieldOnUBigObject", + "oFieldOnUBigObject", + "pFieldOnUBigObject", + "qFieldOnUBigObject", + "rFieldOnUBigObject", + "sFieldOnUBigObject", + "tFieldOnUBigObject", + "uFieldOnUBigObject", + "vFieldOnUBigObject", + "wFieldOnUBigObject", + "xFieldOnUBigObject", + "yFieldOnUBigObject", + "zFieldOnUBigObject" + ] + }, + { + "typeName": "VBigObject", + "fieldNames": [ + "aFieldOnVBigObject", + "bFieldOnVBigObject", + "cFieldOnVBigObject", + "dFieldOnVBigObject", + "eFieldOnVBigObject", + "fFieldOnVBigObject", + "gFieldOnVBigObject", + "hFieldOnVBigObject", + "iFieldOnVBigObject", + "jFieldOnVBigObject", + "kFieldOnVBigObject", + "lFieldOnVBigObject", + "mFieldOnVBigObject", + "nFieldOnVBigObject", + "oFieldOnVBigObject", + "pFieldOnVBigObject", + "qFieldOnVBigObject", + "rFieldOnVBigObject", + "sFieldOnVBigObject", + "tFieldOnVBigObject", + "uFieldOnVBigObject", + "vFieldOnVBigObject", + "wFieldOnVBigObject", + "xFieldOnVBigObject", + "yFieldOnVBigObject", + "zFieldOnVBigObject" + ] + }, + { + "typeName": "WBigObject", + "fieldNames": [ + "aFieldOnWBigObject", + "bFieldOnWBigObject", + "cFieldOnWBigObject", + "dFieldOnWBigObject", + "eFieldOnWBigObject", + "fFieldOnWBigObject", + "gFieldOnWBigObject", + "hFieldOnWBigObject", + "iFieldOnWBigObject", + "jFieldOnWBigObject", + "kFieldOnWBigObject", + "lFieldOnWBigObject", + "mFieldOnWBigObject", + "nFieldOnWBigObject", + "oFieldOnWBigObject", + "pFieldOnWBigObject", + "qFieldOnWBigObject", + "rFieldOnWBigObject", + "sFieldOnWBigObject", + "tFieldOnWBigObject", + "uFieldOnWBigObject", + "vFieldOnWBigObject", + "wFieldOnWBigObject", + "xFieldOnWBigObject", + "yFieldOnWBigObject", + "zFieldOnWBigObject" + ] + }, + { + "typeName": "XBigObject", + "fieldNames": [ + "aFieldOnXBigObject", + "bFieldOnXBigObject", + "cFieldOnXBigObject", + "dFieldOnXBigObject", + "eFieldOnXBigObject", + "fFieldOnXBigObject", + "gFieldOnXBigObject", + "hFieldOnXBigObject", + "iFieldOnXBigObject", + "jFieldOnXBigObject", + "kFieldOnXBigObject", + "lFieldOnXBigObject", + "mFieldOnXBigObject", + "nFieldOnXBigObject", + "oFieldOnXBigObject", + "pFieldOnXBigObject", + "qFieldOnXBigObject", + "rFieldOnXBigObject", + "sFieldOnXBigObject", + "tFieldOnXBigObject", + "uFieldOnXBigObject", + "vFieldOnXBigObject", + "wFieldOnXBigObject", + "xFieldOnXBigObject", + "yFieldOnXBigObject", + "zFieldOnXBigObject" + ] + }, + { + "typeName": "YBigObject", + "fieldNames": [ + "aFieldOnYBigObject", + "bFieldOnYBigObject", + "cFieldOnYBigObject", + "dFieldOnYBigObject", + "eFieldOnYBigObject", + "fFieldOnYBigObject", + "gFieldOnYBigObject", + "hFieldOnYBigObject", + "iFieldOnYBigObject", + "jFieldOnYBigObject", + "kFieldOnYBigObject", + "lFieldOnYBigObject", + "mFieldOnYBigObject", + "nFieldOnYBigObject", + "oFieldOnYBigObject", + "pFieldOnYBigObject", + "qFieldOnYBigObject", + "rFieldOnYBigObject", + "sFieldOnYBigObject", + "tFieldOnYBigObject", + "uFieldOnYBigObject", + "vFieldOnYBigObject", + "wFieldOnYBigObject", + "xFieldOnYBigObject", + "yFieldOnYBigObject", + "zFieldOnYBigObject" + ] + }, + { + "typeName": "ZBigObject", + "fieldNames": [ + "aFieldOnZBigObject", + "bFieldOnZBigObject", + "cFieldOnZBigObject", + "dFieldOnZBigObject", + "eFieldOnZBigObject", + "fFieldOnZBigObject", + "gFieldOnZBigObject", + "hFieldOnZBigObject", + "iFieldOnZBigObject", + "jFieldOnZBigObject", + "kFieldOnZBigObject", + "lFieldOnZBigObject", + "mFieldOnZBigObject", + "nFieldOnZBigObject", + "oFieldOnZBigObject", + "pFieldOnZBigObject", + "qFieldOnZBigObject", + "rFieldOnZBigObject", + "sFieldOnZBigObject", + "tFieldOnZBigObject", + "uFieldOnZBigObject", + "vFieldOnZBigObject", + "wFieldOnZBigObject", + "xFieldOnZBigObject", + "yFieldOnZBigObject", + "zFieldOnZBigObject" + ] + } + ], + "overrideFieldPathFromAlias": true, + "customGraphql": { + "fetch": { + "url": { + "staticVariableContent": "http://localhost:4006/graphql" + }, + "method": "POST", + "body": {}, + "baseUrl": {}, + "path": {} + }, + "subscription": { + "enabled": true, + "url": { + "staticVariableContent": "http://localhost:4006/graphql" + }, + "protocol": "GRAPHQL_SUBSCRIPTION_PROTOCOL_WS", + "websocketSubprotocol": "GRAPHQL_WEBSOCKET_SUBPROTOCOL_AUTO" + }, + "federation": { + "enabled": true, + "serviceSdl": "extend schema\n@link(url: \"https://specs.apollo.dev/federation/v2.5\", import: [\"@authenticated\", \"@composeDirective\", \"@external\", \"@extends\", \"@inaccessible\", \"@interfaceObject\", \"@override\", \"@provides\", \"@key\", \"@requires\", \"@requiresScopes\", \"@shareable\", \"@tag\"])\n\ntype Query {\n \"Returns the value of the received HTTP header.\"\n headerValue(name: String!): String!\n \"Returns the value of the given key in the WS initial payload.\"\n initPayloadValue(key: String!): String!\n initialPayload: Map\n \"Returns response after the given delay\"\n delay(response: String!, ms: Int!): String!\n\n bigResponse(\n artificialDelay: Int! = 0\n bigObjects: Int! = 100\n nestedObjects: Int! = 100\n deeplyNestedObjects: Int! = 100\n ): [BigObject!]!\n\n longResponse(artificialDelay: Int! = 0, bytes: Int!): String\n\n bigAbstractResponse: BigAbstractResponse\n\n rootFieldWithListArg(arg: [String!]!): [String!]!\n rootFieldWithNestedListArg(arg: [[String!]!]!): [[String!]!]!\n rootFieldWithListOfInputArg(arg: [InputType!]!): [InputResponse!]!\n rootFieldWithListOfEnumArg(arg: [EnumType!]!): [EnumType!]!\n rootFieldWithInput(arg: InputArg!): String!\n\n floatField(arg: Float): Float\n\n sharedThings(numOfA: Int! numOfB: Int!): [Thing!]! @shareable\n\n secret: Secret @requiresScopes(scopes: [[\"read:secret\"]])\n}\n\ntype Secret {\n value: String\n}\n\ntype Thing @shareable {\n b: String!\n}\n\ninput InputArg {\n enums: [EnumType!]\n enum: EnumType\n string: String\n strings: [String!]\n}\n\nenum EnumType {\n A\n B\n C\n}\n\ninput InputType {\n arg: String!\n}\n\ntype InputResponse {\n arg: String!\n}\n\nscalar Map\n\ntype TimestampedString {\n \"The value of the string.\"\n value: String!\n \"The timestamp when the response was generated.\"\n unixTime: Int!\n \"Sequence number\"\n seq: Int!\n \"Total number of responses to be sent\"\n total: Int!\n initialPayload: Map\n}\n\ntype Subscription {\n \"Returns a stream with the value of the received HTTP header.\"\n headerValue(name: String!, repeat: Int): TimestampedString!\n \"Returns a stream with the value of value of the given key in the WS initial payload.\"\n initPayloadValue(key: String!, repeat: Int): TimestampedString!\n \"Returns a stream with the value of the WS initial payload.\"\n initialPayload(repeat: Int): Map\n returnsError: String\n}\n\ntype Employee @key(fields: \"id\") {\n id: Int!\n fieldThrowsError: String\n}\n\ntype BigObject {\n nestedObjects: [NestedObject!]!\n}\n\ntype NestedObject {\n deeplyNestedObjects: [DeeplyNestedObject!]!\n}\n\ntype DeeplyNestedObject {\n aFieldOnDeeplyNestedObject: String!\n bFieldOnDeeplyNestedObject: Int!\n cFieldOnDeeplyNestedObject: Boolean!\n dFieldOnDeeplyNestedObject: Float!\n eFieldOnDeeplyNestedObject: String!\n fFieldOnDeeplyNestedObject: Int!\n gFieldOnDeeplyNestedObject: Boolean!\n hFieldOnDeeplyNestedObject: Float!\n iFieldOnDeeplyNestedObject: String!\n jFieldOnDeeplyNestedObject: Int!\n kFieldOnDeeplyNestedObject: Boolean!\n lFieldOnDeeplyNestedObject: Float!\n mFieldOnDeeplyNestedObject: String!\n nFieldOnDeeplyNestedObject: Int!\n oFieldOnDeeplyNestedObject: Boolean!\n pFieldOnDeeplyNestedObject: Float!\n qFieldOnDeeplyNestedObject: String!\n rFieldOnDeeplyNestedObject: Int!\n sFieldOnDeeplyNestedObject: Boolean!\n tFieldOnDeeplyNestedObject: Float!\n uFieldOnDeeplyNestedObject: String!\n vFieldOnDeeplyNestedObject: Int!\n wFieldOnDeeplyNestedObject: Boolean!\n xFieldOnDeeplyNestedObject: Float!\n yFieldOnDeeplyNestedObject: String!\n zFieldOnDeeplyNestedObject: Int!\n}\n\nunion BigAbstractResponse = ABigObject | BBigObject | CBigObject | DBigObject | EBigObject | FBigObject | GBigObject | HBigObject | IBigObject | JBigObject | KBigObject | LBigObject | MBigObject | NBigObject | OBigObject | PBigObject | QBigObject | RBigObject | SBigObject | TBigObject | UBigObject | VBigObject | WBigObject | XBigObject | YBigObject | ZBigObject\n\ntype ABigObject {\n aFieldOnABigObject: String!\n bFieldOnABigObject: Int!\n cFieldOnABigObject: Boolean!\n dFieldOnABigObject: Float!\n eFieldOnABigObject: String!\n fFieldOnABigObject: Int!\n gFieldOnABigObject: Boolean!\n hFieldOnABigObject: Float!\n iFieldOnABigObject: String!\n jFieldOnABigObject: Int!\n kFieldOnABigObject: Boolean!\n lFieldOnABigObject: Float!\n mFieldOnABigObject: String!\n nFieldOnABigObject: Int!\n oFieldOnABigObject: Boolean!\n pFieldOnABigObject: Float!\n qFieldOnABigObject: String!\n rFieldOnABigObject: Int!\n sFieldOnABigObject: Boolean!\n tFieldOnABigObject: Float!\n uFieldOnABigObject: String!\n vFieldOnABigObject: Int!\n wFieldOnABigObject: Boolean!\n xFieldOnABigObject: Float!\n yFieldOnABigObject: String!\n zFieldOnABigObject: Int!\n}\n\ntype BBigObject {\n aFieldOnBBigObject: String!\n bFieldOnBBigObject: Int!\n cFieldOnBBigObject: Boolean!\n dFieldOnBBigObject: Float!\n eFieldOnBBigObject: String!\n fFieldOnBBigObject: Int!\n gFieldOnBBigObject: Boolean!\n hFieldOnBBigObject: Float!\n iFieldOnBBigObject: String!\n jFieldOnBBigObject: Int!\n kFieldOnBBigObject: Boolean!\n lFieldOnBBigObject: Float!\n mFieldOnBBigObject: String!\n nFieldOnBBigObject: Int!\n oFieldOnBBigObject: Boolean!\n pFieldOnBBigObject: Float!\n qFieldOnBBigObject: String!\n rFieldOnBBigObject: Int!\n sFieldOnBBigObject: Boolean!\n tFieldOnBBigObject: Float!\n uFieldOnBBigObject: String!\n vFieldOnBBigObject: Int!\n wFieldOnBBigObject: Boolean!\n xFieldOnBBigObject: Float!\n yFieldOnBBigObject: String!\n zFieldOnBBigObject: Int!\n}\n\ntype CBigObject {\n aFieldOnCBigObject: String!\n bFieldOnCBigObject: Int!\n cFieldOnCBigObject: Boolean!\n dFieldOnCBigObject: Float!\n eFieldOnCBigObject: String!\n fFieldOnCBigObject: Int!\n gFieldOnCBigObject: Boolean!\n hFieldOnCBigObject: Float!\n iFieldOnCBigObject: String!\n jFieldOnCBigObject: Int!\n kFieldOnCBigObject: Boolean!\n lFieldOnCBigObject: Float!\n mFieldOnCBigObject: String!\n nFieldOnCBigObject: Int!\n oFieldOnCBigObject: Boolean!\n pFieldOnCBigObject: Float!\n qFieldOnCBigObject: String!\n rFieldOnCBigObject: Int!\n sFieldOnCBigObject: Boolean!\n tFieldOnCBigObject: Float!\n uFieldOnCBigObject: String!\n vFieldOnCBigObject: Int!\n wFieldOnCBigObject: Boolean!\n xFieldOnCBigObject: Float!\n yFieldOnCBigObject: String!\n zFieldOnCBigObject: Int!\n}\n\ntype DBigObject {\n aFieldOnDBigObject: String!\n bFieldOnDBigObject: Int!\n cFieldOnDBigObject: Boolean!\n dFieldOnDBigObject: Float!\n eFieldOnDBigObject: String!\n fFieldOnDBigObject: Int!\n gFieldOnDBigObject: Boolean!\n hFieldOnDBigObject: Float!\n iFieldOnDBigObject: String!\n jFieldOnDBigObject: Int!\n kFieldOnDBigObject: Boolean!\n lFieldOnDBigObject: Float!\n mFieldOnDBigObject: String!\n nFieldOnDBigObject: Int!\n oFieldOnDBigObject: Boolean!\n pFieldOnDBigObject: Float!\n qFieldOnDBigObject: String!\n rFieldOnDBigObject: Int!\n sFieldOnDBigObject: Boolean!\n tFieldOnDBigObject: Float!\n uFieldOnDBigObject: String!\n vFieldOnDBigObject: Int!\n wFieldOnDBigObject: Boolean!\n xFieldOnDBigObject: Float!\n yFieldOnDBigObject: String!\n zFieldOnDBigObject: Int!\n}\n\ntype EBigObject {\n aFieldOnEBigObject: String!\n bFieldOnEBigObject: Int!\n cFieldOnEBigObject: Boolean!\n dFieldOnEBigObject: Float!\n eFieldOnEBigObject: String!\n fFieldOnEBigObject: Int!\n gFieldOnEBigObject: Boolean!\n hFieldOnEBigObject: Float!\n iFieldOnEBigObject: String!\n jFieldOnEBigObject: Int!\n kFieldOnEBigObject: Boolean!\n lFieldOnEBigObject: Float!\n mFieldOnEBigObject: String!\n nFieldOnEBigObject: Int!\n oFieldOnEBigObject: Boolean!\n pFieldOnEBigObject: Float!\n qFieldOnEBigObject: String!\n rFieldOnEBigObject: Int!\n sFieldOnEBigObject: Boolean!\n tFieldOnEBigObject: Float!\n uFieldOnEBigObject: String!\n vFieldOnEBigObject: Int!\n wFieldOnEBigObject: Boolean!\n xFieldOnEBigObject: Float!\n yFieldOnEBigObject: String!\n zFieldOnEBigObject: Int!\n}\n\ntype FBigObject {\n aFieldOnFBigObject: String!\n bFieldOnFBigObject: Int!\n cFieldOnFBigObject: Boolean!\n dFieldOnFBigObject: Float!\n eFieldOnFBigObject: String!\n fFieldOnFBigObject: Int!\n gFieldOnFBigObject: Boolean!\n hFieldOnFBigObject: Float!\n iFieldOnFBigObject: String!\n jFieldOnFBigObject: Int!\n kFieldOnFBigObject: Boolean!\n lFieldOnFBigObject: Float!\n mFieldOnFBigObject: String!\n nFieldOnFBigObject: Int!\n oFieldOnFBigObject: Boolean!\n pFieldOnFBigObject: Float!\n qFieldOnFBigObject: String!\n rFieldOnFBigObject: Int!\n sFieldOnFBigObject: Boolean!\n tFieldOnFBigObject: Float!\n uFieldOnFBigObject: String!\n vFieldOnFBigObject: Int!\n wFieldOnFBigObject: Boolean!\n xFieldOnFBigObject: Float!\n yFieldOnFBigObject: String!\n zFieldOnFBigObject: Int!\n}\n\ntype GBigObject {\n aFieldOnGBigObject: String!\n bFieldOnGBigObject: Int!\n cFieldOnGBigObject: Boolean!\n dFieldOnGBigObject: Float!\n eFieldOnGBigObject: String!\n fFieldOnGBigObject: Int!\n gFieldOnGBigObject: Boolean!\n hFieldOnGBigObject: Float!\n iFieldOnGBigObject: String!\n jFieldOnGBigObject: Int!\n kFieldOnGBigObject: Boolean!\n lFieldOnGBigObject: Float!\n mFieldOnGBigObject: String!\n nFieldOnGBigObject: Int!\n oFieldOnGBigObject: Boolean!\n pFieldOnGBigObject: Float!\n qFieldOnGBigObject: String!\n rFieldOnGBigObject: Int!\n sFieldOnGBigObject: Boolean!\n tFieldOnGBigObject: Float!\n uFieldOnGBigObject: String!\n vFieldOnGBigObject: Int!\n wFieldOnGBigObject: Boolean!\n xFieldOnGBigObject: Float!\n yFieldOnGBigObject: String!\n zFieldOnGBigObject: Int!\n}\n\ntype HBigObject {\n aFieldOnHBigObject: String!\n bFieldOnHBigObject: Int!\n cFieldOnHBigObject: Boolean!\n dFieldOnHBigObject: Float!\n eFieldOnHBigObject: String!\n fFieldOnHBigObject: Int!\n gFieldOnHBigObject: Boolean!\n hFieldOnHBigObject: Float!\n iFieldOnHBigObject: String!\n jFieldOnHBigObject: Int!\n kFieldOnHBigObject: Boolean!\n lFieldOnHBigObject: Float!\n mFieldOnHBigObject: String!\n nFieldOnHBigObject: Int!\n oFieldOnHBigObject: Boolean!\n pFieldOnHBigObject: Float!\n qFieldOnHBigObject: String!\n rFieldOnHBigObject: Int!\n sFieldOnHBigObject: Boolean!\n tFieldOnHBigObject: Float!\n uFieldOnHBigObject: String!\n vFieldOnHBigObject: Int!\n wFieldOnHBigObject: Boolean!\n xFieldOnHBigObject: Float!\n yFieldOnHBigObject: String!\n zFieldOnHBigObject: Int!\n}\n\ntype IBigObject {\n aFieldOnIBigObject: String!\n bFieldOnIBigObject: Int!\n cFieldOnIBigObject: Boolean!\n dFieldOnIBigObject: Float!\n eFieldOnIBigObject: String!\n fFieldOnIBigObject: Int!\n gFieldOnIBigObject: Boolean!\n hFieldOnIBigObject: Float!\n iFieldOnIBigObject: String!\n jFieldOnIBigObject: Int!\n kFieldOnIBigObject: Boolean!\n lFieldOnIBigObject: Float!\n mFieldOnIBigObject: String!\n nFieldOnIBigObject: Int!\n oFieldOnIBigObject: Boolean!\n pFieldOnIBigObject: Float!\n qFieldOnIBigObject: String!\n rFieldOnIBigObject: Int!\n sFieldOnIBigObject: Boolean!\n tFieldOnIBigObject: Float!\n uFieldOnIBigObject: String!\n vFieldOnIBigObject: Int!\n wFieldOnIBigObject: Boolean!\n xFieldOnIBigObject: Float!\n yFieldOnIBigObject: String!\n zFieldOnIBigObject: Int!\n}\n\ntype JBigObject {\n aFieldOnJBigObject: String!\n bFieldOnJBigObject: Int!\n cFieldOnJBigObject: Boolean!\n dFieldOnJBigObject: Float!\n eFieldOnJBigObject: String!\n fFieldOnJBigObject: Int!\n gFieldOnJBigObject: Boolean!\n hFieldOnJBigObject: Float!\n iFieldOnJBigObject: String!\n jFieldOnJBigObject: Int!\n kFieldOnJBigObject: Boolean!\n lFieldOnJBigObject: Float!\n mFieldOnJBigObject: String!\n nFieldOnJBigObject: Int!\n oFieldOnJBigObject: Boolean!\n pFieldOnJBigObject: Float!\n qFieldOnJBigObject: String!\n rFieldOnJBigObject: Int!\n sFieldOnJBigObject: Boolean!\n tFieldOnJBigObject: Float!\n uFieldOnJBigObject: String!\n vFieldOnJBigObject: Int!\n wFieldOnJBigObject: Boolean!\n xFieldOnJBigObject: Float!\n yFieldOnJBigObject: String!\n zFieldOnJBigObject: Int!\n}\n\ntype KBigObject {\n aFieldOnKBigObject: String!\n bFieldOnKBigObject: Int!\n cFieldOnKBigObject: Boolean!\n dFieldOnKBigObject: Float!\n eFieldOnKBigObject: String!\n fFieldOnKBigObject: Int!\n gFieldOnKBigObject: Boolean!\n hFieldOnKBigObject: Float!\n iFieldOnKBigObject: String!\n jFieldOnKBigObject: Int!\n kFieldOnKBigObject: Boolean!\n lFieldOnKBigObject: Float!\n mFieldOnKBigObject: String!\n nFieldOnKBigObject: Int!\n oFieldOnKBigObject: Boolean!\n pFieldOnKBigObject: Float!\n qFieldOnKBigObject: String!\n rFieldOnKBigObject: Int!\n sFieldOnKBigObject: Boolean!\n tFieldOnKBigObject: Float!\n uFieldOnKBigObject: String!\n vFieldOnKBigObject: Int!\n wFieldOnKBigObject: Boolean!\n xFieldOnKBigObject: Float!\n yFieldOnKBigObject: String!\n zFieldOnKBigObject: Int!\n}\n\ntype LBigObject {\n aFieldOnLBigObject: String!\n bFieldOnLBigObject: Int!\n cFieldOnLBigObject: Boolean!\n dFieldOnLBigObject: Float!\n eFieldOnLBigObject: String!\n fFieldOnLBigObject: Int!\n gFieldOnLBigObject: Boolean!\n hFieldOnLBigObject: Float!\n iFieldOnLBigObject: String!\n jFieldOnLBigObject: Int!\n kFieldOnLBigObject: Boolean!\n lFieldOnLBigObject: Float!\n mFieldOnLBigObject: String!\n nFieldOnLBigObject: Int!\n oFieldOnLBigObject: Boolean!\n pFieldOnLBigObject: Float!\n qFieldOnLBigObject: String!\n rFieldOnLBigObject: Int!\n sFieldOnLBigObject: Boolean!\n tFieldOnLBigObject: Float!\n uFieldOnLBigObject: String!\n vFieldOnLBigObject: Int!\n wFieldOnLBigObject: Boolean!\n xFieldOnLBigObject: Float!\n yFieldOnLBigObject: String!\n zFieldOnLBigObject: Int!\n}\n\ntype MBigObject {\n aFieldOnMBigObject: String!\n bFieldOnMBigObject: Int!\n cFieldOnMBigObject: Boolean!\n dFieldOnMBigObject: Float!\n eFieldOnMBigObject: String!\n fFieldOnMBigObject: Int!\n gFieldOnMBigObject: Boolean!\n hFieldOnMBigObject: Float!\n iFieldOnMBigObject: String!\n jFieldOnMBigObject: Int!\n kFieldOnMBigObject: Boolean!\n lFieldOnMBigObject: Float!\n mFieldOnMBigObject: String!\n nFieldOnMBigObject: Int!\n oFieldOnMBigObject: Boolean!\n pFieldOnMBigObject: Float!\n qFieldOnMBigObject: String!\n rFieldOnMBigObject: Int!\n sFieldOnMBigObject: Boolean!\n tFieldOnMBigObject: Float!\n uFieldOnMBigObject: String!\n vFieldOnMBigObject: Int!\n wFieldOnMBigObject: Boolean!\n xFieldOnMBigObject: Float!\n yFieldOnMBigObject: String!\n zFieldOnMBigObject: Int!\n}\n\ntype NBigObject {\n aFieldOnNBigObject: String!\n bFieldOnNBigObject: Int!\n cFieldOnNBigObject: Boolean!\n dFieldOnNBigObject: Float!\n eFieldOnNBigObject: String!\n fFieldOnNBigObject: Int!\n gFieldOnNBigObject: Boolean!\n hFieldOnNBigObject: Float!\n iFieldOnNBigObject: String!\n jFieldOnNBigObject: Int!\n kFieldOnNBigObject: Boolean!\n lFieldOnNBigObject: Float!\n mFieldOnNBigObject: String!\n nFieldOnNBigObject: Int!\n oFieldOnNBigObject: Boolean!\n pFieldOnNBigObject: Float!\n qFieldOnNBigObject: String!\n rFieldOnNBigObject: Int!\n sFieldOnNBigObject: Boolean!\n tFieldOnNBigObject: Float!\n uFieldOnNBigObject: String!\n vFieldOnNBigObject: Int!\n wFieldOnNBigObject: Boolean!\n xFieldOnNBigObject: Float!\n yFieldOnNBigObject: String!\n zFieldOnNBigObject: Int!\n}\n\ntype OBigObject {\n aFieldOnOBigObject: String!\n bFieldOnOBigObject: Int!\n cFieldOnOBigObject: Boolean!\n dFieldOnOBigObject: Float!\n eFieldOnOBigObject: String!\n fFieldOnOBigObject: Int!\n gFieldOnOBigObject: Boolean!\n hFieldOnOBigObject: Float!\n iFieldOnOBigObject: String!\n jFieldOnOBigObject: Int!\n kFieldOnOBigObject: Boolean!\n lFieldOnOBigObject: Float!\n mFieldOnOBigObject: String!\n nFieldOnOBigObject: Int!\n oFieldOnOBigObject: Boolean!\n pFieldOnOBigObject: Float!\n qFieldOnOBigObject: String!\n rFieldOnOBigObject: Int!\n sFieldOnOBigObject: Boolean!\n tFieldOnOBigObject: Float!\n uFieldOnOBigObject: String!\n vFieldOnOBigObject: Int!\n wFieldOnOBigObject: Boolean!\n xFieldOnOBigObject: Float!\n yFieldOnOBigObject: String!\n zFieldOnOBigObject: Int!\n}\n\ntype PBigObject {\n aFieldOnPBigObject: String!\n bFieldOnPBigObject: Int!\n cFieldOnPBigObject: Boolean!\n dFieldOnPBigObject: Float!\n eFieldOnPBigObject: String!\n fFieldOnPBigObject: Int!\n gFieldOnPBigObject: Boolean!\n hFieldOnPBigObject: Float!\n iFieldOnPBigObject: String!\n jFieldOnPBigObject: Int!\n kFieldOnPBigObject: Boolean!\n lFieldOnPBigObject: Float!\n mFieldOnPBigObject: String!\n nFieldOnPBigObject: Int!\n oFieldOnPBigObject: Boolean!\n pFieldOnPBigObject: Float!\n qFieldOnPBigObject: String!\n rFieldOnPBigObject: Int!\n sFieldOnPBigObject: Boolean!\n tFieldOnPBigObject: Float!\n uFieldOnPBigObject: String!\n vFieldOnPBigObject: Int!\n wFieldOnPBigObject: Boolean!\n xFieldOnPBigObject: Float!\n yFieldOnPBigObject: String!\n zFieldOnPBigObject: Int!\n}\n\ntype QBigObject {\n aFieldOnQBigObject: String!\n bFieldOnQBigObject: Int!\n cFieldOnQBigObject: Boolean!\n dFieldOnQBigObject: Float!\n eFieldOnQBigObject: String!\n fFieldOnQBigObject: Int!\n gFieldOnQBigObject: Boolean!\n hFieldOnQBigObject: Float!\n iFieldOnQBigObject: String!\n jFieldOnQBigObject: Int!\n kFieldOnQBigObject: Boolean!\n lFieldOnQBigObject: Float!\n mFieldOnQBigObject: String!\n nFieldOnQBigObject: Int!\n oFieldOnQBigObject: Boolean!\n pFieldOnQBigObject: Float!\n qFieldOnQBigObject: String!\n rFieldOnQBigObject: Int!\n sFieldOnQBigObject: Boolean!\n tFieldOnQBigObject: Float!\n uFieldOnQBigObject: String!\n vFieldOnQBigObject: Int!\n wFieldOnQBigObject: Boolean!\n xFieldOnQBigObject: Float!\n yFieldOnQBigObject: String!\n zFieldOnQBigObject: Int!\n}\n\ntype RBigObject {\n aFieldOnRBigObject: String!\n bFieldOnRBigObject: Int!\n cFieldOnRBigObject: Boolean!\n dFieldOnRBigObject: Float!\n eFieldOnRBigObject: String!\n fFieldOnRBigObject: Int!\n gFieldOnRBigObject: Boolean!\n hFieldOnRBigObject: Float!\n iFieldOnRBigObject: String!\n jFieldOnRBigObject: Int!\n kFieldOnRBigObject: Boolean!\n lFieldOnRBigObject: Float!\n mFieldOnRBigObject: String!\n nFieldOnRBigObject: Int!\n oFieldOnRBigObject: Boolean!\n pFieldOnRBigObject: Float!\n qFieldOnRBigObject: String!\n rFieldOnRBigObject: Int!\n sFieldOnRBigObject: Boolean!\n tFieldOnRBigObject: Float!\n uFieldOnRBigObject: String!\n vFieldOnRBigObject: Int!\n wFieldOnRBigObject: Boolean!\n xFieldOnRBigObject: Float!\n yFieldOnRBigObject: String!\n zFieldOnRBigObject: Int!\n}\n\ntype SBigObject {\n aFieldOnSBigObject: String!\n bFieldOnSBigObject: Int!\n cFieldOnSBigObject: Boolean!\n dFieldOnSBigObject: Float!\n eFieldOnSBigObject: String!\n fFieldOnSBigObject: Int!\n gFieldOnSBigObject: Boolean!\n hFieldOnSBigObject: Float!\n iFieldOnSBigObject: String!\n jFieldOnSBigObject: Int!\n kFieldOnSBigObject: Boolean!\n lFieldOnSBigObject: Float!\n mFieldOnSBigObject: String!\n nFieldOnSBigObject: Int!\n oFieldOnSBigObject: Boolean!\n pFieldOnSBigObject: Float!\n qFieldOnSBigObject: String!\n rFieldOnSBigObject: Int!\n sFieldOnSBigObject: Boolean!\n tFieldOnSBigObject: Float!\n uFieldOnSBigObject: String!\n vFieldOnSBigObject: Int!\n wFieldOnSBigObject: Boolean!\n xFieldOnSBigObject: Float!\n yFieldOnSBigObject: String!\n zFieldOnSBigObject: Int!\n}\n\ntype TBigObject {\n aFieldOnTBigObject: String!\n bFieldOnTBigObject: Int!\n cFieldOnTBigObject: Boolean!\n dFieldOnTBigObject: Float!\n eFieldOnTBigObject: String!\n fFieldOnTBigObject: Int!\n gFieldOnTBigObject: Boolean!\n hFieldOnTBigObject: Float!\n iFieldOnTBigObject: String!\n jFieldOnTBigObject: Int!\n kFieldOnTBigObject: Boolean!\n lFieldOnTBigObject: Float!\n mFieldOnTBigObject: String!\n nFieldOnTBigObject: Int!\n oFieldOnTBigObject: Boolean!\n pFieldOnTBigObject: Float!\n qFieldOnTBigObject: String!\n rFieldOnTBigObject: Int!\n sFieldOnTBigObject: Boolean!\n tFieldOnTBigObject: Float!\n uFieldOnTBigObject: String!\n vFieldOnTBigObject: Int!\n wFieldOnTBigObject: Boolean!\n xFieldOnTBigObject: Float!\n yFieldOnTBigObject: String!\n zFieldOnTBigObject: Int!\n}\n\ntype UBigObject {\n aFieldOnUBigObject: String!\n bFieldOnUBigObject: Int!\n cFieldOnUBigObject: Boolean!\n dFieldOnUBigObject: Float!\n eFieldOnUBigObject: String!\n fFieldOnUBigObject: Int!\n gFieldOnUBigObject: Boolean!\n hFieldOnUBigObject: Float!\n iFieldOnUBigObject: String!\n jFieldOnUBigObject: Int!\n kFieldOnUBigObject: Boolean!\n lFieldOnUBigObject: Float!\n mFieldOnUBigObject: String!\n nFieldOnUBigObject: Int!\n oFieldOnUBigObject: Boolean!\n pFieldOnUBigObject: Float!\n qFieldOnUBigObject: String!\n rFieldOnUBigObject: Int!\n sFieldOnUBigObject: Boolean!\n tFieldOnUBigObject: Float!\n uFieldOnUBigObject: String!\n vFieldOnUBigObject: Int!\n wFieldOnUBigObject: Boolean!\n xFieldOnUBigObject: Float!\n yFieldOnUBigObject: String!\n zFieldOnUBigObject: Int!\n}\n\ntype VBigObject {\n aFieldOnVBigObject: String!\n bFieldOnVBigObject: Int!\n cFieldOnVBigObject: Boolean!\n dFieldOnVBigObject: Float!\n eFieldOnVBigObject: String!\n fFieldOnVBigObject: Int!\n gFieldOnVBigObject: Boolean!\n hFieldOnVBigObject: Float!\n iFieldOnVBigObject: String!\n jFieldOnVBigObject: Int!\n kFieldOnVBigObject: Boolean!\n lFieldOnVBigObject: Float!\n mFieldOnVBigObject: String!\n nFieldOnVBigObject: Int!\n oFieldOnVBigObject: Boolean!\n pFieldOnVBigObject: Float!\n qFieldOnVBigObject: String!\n rFieldOnVBigObject: Int!\n sFieldOnVBigObject: Boolean!\n tFieldOnVBigObject: Float!\n uFieldOnVBigObject: String!\n vFieldOnVBigObject: Int!\n wFieldOnVBigObject: Boolean!\n xFieldOnVBigObject: Float!\n yFieldOnVBigObject: String!\n zFieldOnVBigObject: Int!\n}\n\ntype WBigObject {\n aFieldOnWBigObject: String!\n bFieldOnWBigObject: Int!\n cFieldOnWBigObject: Boolean!\n dFieldOnWBigObject: Float!\n eFieldOnWBigObject: String!\n fFieldOnWBigObject: Int!\n gFieldOnWBigObject: Boolean!\n hFieldOnWBigObject: Float!\n iFieldOnWBigObject: String!\n jFieldOnWBigObject: Int!\n kFieldOnWBigObject: Boolean!\n lFieldOnWBigObject: Float!\n mFieldOnWBigObject: String!\n nFieldOnWBigObject: Int!\n oFieldOnWBigObject: Boolean!\n pFieldOnWBigObject: Float!\n qFieldOnWBigObject: String!\n rFieldOnWBigObject: Int!\n sFieldOnWBigObject: Boolean!\n tFieldOnWBigObject: Float!\n uFieldOnWBigObject: String!\n vFieldOnWBigObject: Int!\n wFieldOnWBigObject: Boolean!\n xFieldOnWBigObject: Float!\n yFieldOnWBigObject: String!\n zFieldOnWBigObject: Int!\n}\n\ntype XBigObject {\n aFieldOnXBigObject: String!\n bFieldOnXBigObject: Int!\n cFieldOnXBigObject: Boolean!\n dFieldOnXBigObject: Float!\n eFieldOnXBigObject: String!\n fFieldOnXBigObject: Int!\n gFieldOnXBigObject: Boolean!\n hFieldOnXBigObject: Float!\n iFieldOnXBigObject: String!\n jFieldOnXBigObject: Int!\n kFieldOnXBigObject: Boolean!\n lFieldOnXBigObject: Float!\n mFieldOnXBigObject: String!\n nFieldOnXBigObject: Int!\n oFieldOnXBigObject: Boolean!\n pFieldOnXBigObject: Float!\n qFieldOnXBigObject: String!\n rFieldOnXBigObject: Int!\n sFieldOnXBigObject: Boolean!\n tFieldOnXBigObject: Float!\n uFieldOnXBigObject: String!\n vFieldOnXBigObject: Int!\n wFieldOnXBigObject: Boolean!\n xFieldOnXBigObject: Float!\n yFieldOnXBigObject: String!\n zFieldOnXBigObject: Int!\n}\n\ntype YBigObject {\n aFieldOnYBigObject: String!\n bFieldOnYBigObject: Int!\n cFieldOnYBigObject: Boolean!\n dFieldOnYBigObject: Float!\n eFieldOnYBigObject: String!\n fFieldOnYBigObject: Int!\n gFieldOnYBigObject: Boolean!\n hFieldOnYBigObject: Float!\n iFieldOnYBigObject: String!\n jFieldOnYBigObject: Int!\n kFieldOnYBigObject: Boolean!\n lFieldOnYBigObject: Float!\n mFieldOnYBigObject: String!\n nFieldOnYBigObject: Int!\n oFieldOnYBigObject: Boolean!\n pFieldOnYBigObject: Float!\n qFieldOnYBigObject: String!\n rFieldOnYBigObject: Int!\n sFieldOnYBigObject: Boolean!\n tFieldOnYBigObject: Float!\n uFieldOnYBigObject: String!\n vFieldOnYBigObject: Int!\n wFieldOnYBigObject: Boolean!\n xFieldOnYBigObject: Float!\n yFieldOnYBigObject: String!\n zFieldOnYBigObject: Int!\n}\n\ntype ZBigObject {\n aFieldOnZBigObject: String!\n bFieldOnZBigObject: Int!\n cFieldOnZBigObject: Boolean!\n dFieldOnZBigObject: Float!\n eFieldOnZBigObject: String!\n fFieldOnZBigObject: Int!\n gFieldOnZBigObject: Boolean!\n hFieldOnZBigObject: Float!\n iFieldOnZBigObject: String!\n jFieldOnZBigObject: Int!\n kFieldOnZBigObject: Boolean!\n lFieldOnZBigObject: Float!\n mFieldOnZBigObject: String!\n nFieldOnZBigObject: Int!\n oFieldOnZBigObject: Boolean!\n pFieldOnZBigObject: Float!\n qFieldOnZBigObject: String!\n rFieldOnZBigObject: Int!\n sFieldOnZBigObject: Boolean!\n tFieldOnZBigObject: Float!\n uFieldOnZBigObject: String!\n vFieldOnZBigObject: Int!\n wFieldOnZBigObject: Boolean!\n xFieldOnZBigObject: Float!\n yFieldOnZBigObject: String!\n zFieldOnZBigObject: Int!\n}" + }, + "upstreamSchema": { + "key": "20c8fc085a72213ac5bb4a25387d3a7bb35749ec" + } + }, + "requestTimeoutSeconds": "10", + "id": "4", + "keys": [ + { + "typeName": "Employee", + "selectionSet": "id" + } + ] + }, + { + "kind": "GRAPHQL", + "rootNodes": [ + { + "typeName": "Mutation", + "fieldNames": [ + "updateAvailability" + ] + }, + { + "typeName": "Employee", + "fieldNames": [ + "id", + "isAvailable" + ] + } + ], + "overrideFieldPathFromAlias": true, + "customGraphql": { + "fetch": { + "url": { + "staticVariableContent": "http://localhost:4007/graphql" + }, + "method": "POST", + "body": {}, + "baseUrl": {}, + "path": {} + }, + "subscription": { + "enabled": true, + "url": { + "staticVariableContent": "http://localhost:4007/graphql" + }, + "protocol": "GRAPHQL_SUBSCRIPTION_PROTOCOL_WS", + "websocketSubprotocol": "GRAPHQL_WEBSOCKET_SUBPROTOCOL_AUTO" + }, + "federation": { + "enabled": true, + "serviceSdl": "extend schema\n@link(url: \"https://specs.apollo.dev/federation/v2.5\", import: [\"@authenticated\", \"@composeDirective\", \"@external\", \"@extends\", \"@inaccessible\", \"@interfaceObject\", \"@override\", \"@provides\", \"@key\", \"@requires\", \"@requiresScopes\", \"@shareable\", \"@tag\"])\n\ntype Mutation {\n \"\"\" This mutation updates the availability status of an employee in the system.\"\"\"\n updateAvailability(employeeID: Int!, isAvailable: Boolean!): Employee!\n}\ntype Employee @key(fields: \"id\") {\n id: Int!\n isAvailable: Boolean!\n}\n" + }, + "upstreamSchema": { + "key": "0327ed440f0c9e1684722cbb987bc8d3283c5532" + } + }, + "requestTimeoutSeconds": "10", + "id": "5", + "keys": [ + { + "typeName": "Employee", + "selectionSet": "id" + } + ] + }, + { + "kind": "GRAPHQL", + "rootNodes": [ + { + "typeName": "Mutation", + "fieldNames": [ + "updateMood" + ] + }, + { + "typeName": "Employee", + "fieldNames": [ + "id", + "currentMood" + ] + } + ], + "overrideFieldPathFromAlias": true, + "customGraphql": { + "fetch": { + "url": { + "staticVariableContent": "http://localhost:4008/graphql" + }, + "method": "POST", + "body": {}, + "baseUrl": {}, + "path": {} + }, + "subscription": { + "enabled": true, + "url": { + "staticVariableContent": "http://localhost:4008/graphql" + }, + "protocol": "GRAPHQL_SUBSCRIPTION_PROTOCOL_WS", + "websocketSubprotocol": "GRAPHQL_WEBSOCKET_SUBPROTOCOL_AUTO" + }, + "federation": { + "enabled": true, + "serviceSdl": "extend schema\n@link(url: \"https://specs.apollo.dev/federation/v2.5\", import: [\"@authenticated\", \"@composeDirective\", \"@external\", \"@extends\", \"@inaccessible\", \"@interfaceObject\", \"@override\", \"@provides\", \"@key\", \"@requires\", \"@requiresScopes\", \"@shareable\", \"@tag\"])\n\ntype Mutation {\n \"\"\" This mutation update the mood of an employee. \"\"\"\n updateMood(employeeID: Int!, mood: Mood!): Employee!\n}\n\nenum Mood {\n APATHETIC @inaccessible\n HAPPY\n SAD\n}\n\ntype Employee @key(fields: \"id\") {\n id: Int!\n currentMood: Mood!\n}\n" + }, + "upstreamSchema": { + "key": "cb7653f92b2599bd46ae73a84b8d7d5c359fb3b2" + } + }, + "requestTimeoutSeconds": "10", + "id": "6", + "keys": [ + { + "typeName": "Employee", + "selectionSet": "id" + } + ] + }, + { + "kind": "GRAPHQL", + "rootNodes": [ + { + "typeName": "Country", + "fieldNames": [ + "key", + "language" + ] + } + ], + "childNodes": [ + { + "typeName": "CountryKey", + "fieldNames": [ + "name" + ] + } + ], + "overrideFieldPathFromAlias": true, + "customGraphql": { + "fetch": { + "url": { + "staticVariableContent": "http://localhost:4009/graphql" + }, + "method": "POST", + "body": {}, + "baseUrl": {}, + "path": {} + }, + "subscription": { + "enabled": true, + "url": { + "staticVariableContent": "http://localhost:4009/graphql" + }, + "protocol": "GRAPHQL_SUBSCRIPTION_PROTOCOL_WS", + "websocketSubprotocol": "GRAPHQL_WEBSOCKET_SUBPROTOCOL_AUTO" + }, + "federation": { + "enabled": true, + "serviceSdl": "extend schema\n@link(url: \"https://specs.apollo.dev/federation/v2.5\", import: [\"@authenticated\", \"@composeDirective\", \"@external\", \"@extends\", \"@inaccessible\", \"@interfaceObject\", \"@override\", \"@provides\", \"@key\", \"@requires\", \"@requiresScopes\", \"@shareable\", \"@tag\"])\n\n# Using a nested key field simply because it can showcase potential bug\n# vectors / Federation capabilities.\ntype Country @key(fields: \"key { name }\") {\n key: CountryKey!\n language: String\n}\n\ntype CountryKey {\n name: String!\n}\n" + }, + "upstreamSchema": { + "key": "14e8ff1a04734f4e9f500e9fcc7cebd94008d2cd" + } + }, + "requestTimeoutSeconds": "10", + "id": "7", + "keys": [ + { + "typeName": "Country", + "selectionSet": "key { name }" + } + ] + }, + { + "kind": "PUBSUB", + "rootNodes": [ + { + "typeName": "Query", + "fieldNames": [ + "employeeFromEvent", + "employeeFromEventMyNats" + ] + }, + { + "typeName": "Mutation", + "fieldNames": [ + "updateEmployeeMyKafka", + "updateEmployeeMyNats", + "updateEmployeeMyRedis", + "updateEmployeeMyRedisOnCustomChannel" + ] + }, + { + "typeName": "Subscription", + "fieldNames": [ + "employeeUpdated", + "employeeUpdatedMyKafka", + "employeeUpdatedMyNats", + "employeeUpdatedNatsStream", + "employeeUpdatedMyRedis", + "employeeUpdates", + "filteredEmployeeUpdated", + "filteredEmployeeUpdatedMyKafka", + "filteredEmployeeUpdatedMyKafkaWithListFieldArguments", + "filteredEmployeeUpdatedMyKafkaWithNestedListFieldArgument", + "filteredEmployeeUpdatedMyRedis" + ] + } + ], + "childNodes": [ + { + "typeName": "edfs__PublishResult", + "fieldNames": [ + "success" + ] + }, + { + "typeName": "Employee", + "fieldNames": [ + "id" + ], + "externalFieldNames": [ + "id" + ] + } + ], + "overrideFieldPathFromAlias": true, + "requestTimeoutSeconds": "10", + "id": "8", + "keys": [ + { + "typeName": "Employee", + "selectionSet": "id", + "disableEntityResolver": true + } + ], + "customEvents": { + "nats": [ + { + "engineEventConfiguration": { + "providerId": "default", + "type": "REQUEST", + "typeName": "Query", + "fieldName": "employeeFromEvent" + }, + "subjects": [ + "getEmployee.{{ args.id }}" + ] + }, + { + "engineEventConfiguration": { + "providerId": "my-nats", + "type": "REQUEST", + "typeName": "Query", + "fieldName": "employeeFromEventMyNats" + }, + "subjects": [ + "getEmployeeMyNats.{{ args.employeeID }}" + ] + }, + { + "engineEventConfiguration": { + "providerId": "my-nats", + "typeName": "Mutation", + "fieldName": "updateEmployeeMyNats" + }, + "subjects": [ + "employeeUpdatedMyNats.{{ args.id }}" + ] + }, + { + "engineEventConfiguration": { + "providerId": "default", + "type": "SUBSCRIBE", + "typeName": "Subscription", + "fieldName": "employeeUpdated" + }, + "subjects": [ + "employeeUpdated.{{ args.employeeID }}" + ] + }, + { + "engineEventConfiguration": { + "providerId": "my-nats", + "type": "SUBSCRIBE", + "typeName": "Subscription", + "fieldName": "employeeUpdatedMyNats" + }, + "subjects": [ + "employeeUpdatedMyNats.{{ args.id }}", + "employeeUpdatedMyNatsTwo.{{ args.id }}" + ] + }, + { + "engineEventConfiguration": { + "providerId": "default", + "type": "SUBSCRIBE", + "typeName": "Subscription", + "fieldName": "employeeUpdatedNatsStream" + }, + "subjects": [ + "employeeUpdated.{{ args.id }}" + ], + "streamConfiguration": { + "consumerName": "consumerName", + "streamName": "streamName", + "consumerInactiveThreshold": 30 + } + }, + { + "engineEventConfiguration": { + "providerId": "default", + "type": "SUBSCRIBE", + "typeName": "Subscription", + "fieldName": "filteredEmployeeUpdated" + }, + "subjects": [ + "employeeUpdated.{{ args.id }}" + ] + } + ], + "kafka": [ + { + "engineEventConfiguration": { + "providerId": "my-kafka", + "typeName": "Mutation", + "fieldName": "updateEmployeeMyKafka" + }, + "topics": [ + "employeeUpdated" + ] + }, + { + "engineEventConfiguration": { + "providerId": "my-kafka", + "type": "SUBSCRIBE", + "typeName": "Subscription", + "fieldName": "employeeUpdatedMyKafka" + }, + "topics": [ + "employeeUpdated", + "employeeUpdatedTwo" + ] + }, + { + "engineEventConfiguration": { + "providerId": "my-kafka", + "type": "SUBSCRIBE", + "typeName": "Subscription", + "fieldName": "filteredEmployeeUpdatedMyKafka" + }, + "topics": [ + "employeeUpdated", + "employeeUpdatedTwo" + ] + }, + { + "engineEventConfiguration": { + "providerId": "my-kafka", + "type": "SUBSCRIBE", + "typeName": "Subscription", + "fieldName": "filteredEmployeeUpdatedMyKafkaWithListFieldArguments" + }, + "topics": [ + "employeeUpdated", + "employeeUpdatedTwo" + ] + }, + { + "engineEventConfiguration": { + "providerId": "my-kafka", + "type": "SUBSCRIBE", + "typeName": "Subscription", + "fieldName": "filteredEmployeeUpdatedMyKafkaWithNestedListFieldArgument" + }, + "topics": [ + "employeeUpdated", + "employeeUpdatedTwo" + ] + } + ], + "redis": [ + { + "engineEventConfiguration": { + "providerId": "my-redis", + "typeName": "Mutation", + "fieldName": "updateEmployeeMyRedis" + }, + "channels": [ + "employeeUpdatedMyRedis" + ] + }, + { + "engineEventConfiguration": { + "providerId": "my-redis", + "typeName": "Mutation", + "fieldName": "updateEmployeeMyRedisOnCustomChannel" + }, + "channels": [ + "employeeUpdatedMyRedis.{{ args.id }}" + ] + }, + { + "engineEventConfiguration": { + "providerId": "my-redis", + "type": "SUBSCRIBE", + "typeName": "Subscription", + "fieldName": "employeeUpdatedMyRedis" + }, + "channels": [ + "employeeUpdatedMyRedis.{{ args.id }}" + ] + }, + { + "engineEventConfiguration": { + "providerId": "my-redis", + "type": "SUBSCRIBE", + "typeName": "Subscription", + "fieldName": "employeeUpdates" + }, + "channels": [ + "employeeUpdatedMyRedis" + ] + }, + { + "engineEventConfiguration": { + "providerId": "my-redis", + "type": "SUBSCRIBE", + "typeName": "Subscription", + "fieldName": "filteredEmployeeUpdatedMyRedis" + }, + "channels": [ + "employeeUpdatedMyRedis" + ] + } + ] + } + }, + { + "kind": "GRAPHQL", + "rootNodes": [ + { + "typeName": "Query", + "fieldNames": [ + "projects", + "project", + "projectStatuses", + "projectsByStatus", + "projectResources", + "searchProjects", + "milestones", + "tasks", + "projectActivities", + "projectTags", + "archivedProjects", + "tasksByPriority", + "resourceMatrix", + "killService", + "panic" + ] + }, + { + "typeName": "Mutation", + "fieldNames": [ + "addProject", + "addMilestone", + "addTask", + "updateProjectStatus" + ] + }, + { + "typeName": "Project", + "fieldNames": [ + "id", + "name", + "description", + "startDate", + "endDate", + "status", + "teamMembers", + "relatedProducts", + "milestoneIds", + "milestones", + "tasks", + "progress", + "tags", + "alternativeProjects", + "dependencies", + "resourceGroups", + "tasksByPhase", + "milestoneGroups", + "priorityMatrix" + ] + }, + { + "typeName": "Milestone", + "fieldNames": [ + "id", + "projectId", + "name", + "description", + "startDate", + "endDate", + "status", + "completionPercentage", + "dependencies", + "subtasks", + "reviewers" + ] + }, + { + "typeName": "Task", + "fieldNames": [ + "id", + "projectId", + "milestoneId", + "assigneeId", + "name", + "description", + "priority", + "status", + "estimatedHours", + "actualHours", + "createdAt", + "completedAt", + "labels", + "subtasks", + "dependencies", + "attachmentUrls", + "reviewerIds" + ] + }, + { + "typeName": "Employee", + "fieldNames": [ + "id", + "projects", + "assignedTasks", + "completedTasks", + "skills", + "certifications", + "projectHistory" + ] + }, + { + "typeName": "Product", + "fieldNames": [ + "id", + "upc", + "projects", + "featureMatrix" + ] + }, + { + "typeName": "Shipping", + "fieldNames": [ + "id", + "trackingNumber", + "weight" + ] + } + ], + "childNodes": [ + { + "typeName": "Node", + "fieldNames": [ + "id" + ] + }, + { + "typeName": "Timestamped", + "fieldNames": [ + "startDate", + "endDate" + ] + }, + { + "typeName": "Assignable", + "fieldNames": [ + "assigneeId" + ] + }, + { + "typeName": "ProjectUpdate", + "fieldNames": [ + "id", + "projectId", + "updatedById", + "updateType", + "description", + "timestamp", + "metadata" + ] + } + ], + "overrideFieldPathFromAlias": true, + "customGraphql": { + "fetch": { + "url": { + "staticVariableContent": "dns:///localhost:4011" + }, + "method": "POST", + "body": {}, + "baseUrl": {}, + "path": {} + }, + "subscription": { + "enabled": true + }, + "federation": { + "enabled": true, + "serviceSdl": "extend schema\n@link(url: \"https://specs.apollo.dev/federation/v2.5\", import: [\"@authenticated\", \"@composeDirective\", \"@external\", \"@extends\", \"@inaccessible\", \"@interfaceObject\", \"@override\", \"@provides\", \"@key\", \"@requires\", \"@requiresScopes\", \"@shareable\", \"@tag\"])\n\nschema {\n query: Query\n mutation: Mutation\n}\n\ntype Query {\n projects: [Project!]!\n project(id: ID!): Project\n projectStatuses: [ProjectStatus!]!\n projectsByStatus(status: ProjectStatus!): [Project!]!\n projectResources(projectId: ID!): [ProjectResource!]!\n searchProjects(query: String!): [ProjectSearchResult!]!\n milestones(projectId: ID!): [Milestone!]!\n tasks(projectId: ID!): [Task!]!\n projectActivities(projectId: ID!): [ProjectActivity!]!\n \n # New query fields with different list patterns\n projectTags: [String!] # nullable list of nullable strings\n archivedProjects: [Project!]! # non-nullable list of nullable projects\n tasksByPriority(projectId: ID!): [[Task!]] # nullable list of nullable lists\n resourceMatrix(projectId: ID!): [[ProjectResource!]!]! # non-nullable list of non-nullable lists\n\n # query to simulate that the service goes down\n killService: Boolean!\n panic: Boolean!\n}\n\ntype Mutation {\n addProject(project: ProjectInput!): Project!\n addMilestone(milestone: MilestoneInput!): Milestone!\n addTask(task: TaskInput!): Task!\n updateProjectStatus(projectId: ID!, status: ProjectStatus!): ProjectUpdate!\n}\n\ninput ProjectInput {\n name: String!\n description: String\n startDate: String # ISO date\n endDate: String # ISO date\n status: ProjectStatus!\n}\n\ninput MilestoneInput {\n projectId: ID!\n name: String!\n description: String\n dueDate: String # ISO date\n status: MilestoneStatus!\n}\n\ninput TaskInput {\n projectId: ID!\n assigneeId: Int\n name: String!\n description: String\n priority: TaskPriority!\n status: TaskStatus!\n estimatedHours: Float\n}\n\n# Interfaces\ninterface Node {\n id: ID!\n}\n\ninterface Timestamped {\n startDate: String\n endDate: String\n}\n\ninterface Assignable {\n assigneeId: Int\n}\n\n# Updated Project type implementing interfaces\ntype Project implements Node & Timestamped @key(fields: \"id\") {\n id: ID!\n name: String!\n description: String\n startDate: String # ISO date\n endDate: String # ISO date\n status: ProjectStatus!\n # Federated references:\n teamMembers: [Employee!]! \n relatedProducts: [Product!]! # from products subgraph\n # Project milestones or checkpoints\n milestoneIds: [String!] # Array of milestone identifiers\n \n # New fields for extended functionality\n milestones: [Milestone!]!\n tasks: [Task!]!\n progress: Float # Completion percentage\n \n # New fields with various list patterns for testing\n tags: [String!] # nullable list of nullable tags\n alternativeProjects: [Project!] # nullable list of nullable projects\n dependencies: [Project!] # nullable list of non-nullable projects\n resourceGroups: [[ProjectResource!]!]! # nested lists: non-nullable list of non-nullable lists\n tasksByPhase: [[Task!]]! # nested lists: non-nullable list of nullable lists\n milestoneGroups: [[Milestone!]] # nested lists: nullable list of nullable lists\n priorityMatrix: [[[Task!]!]!] # triple nested: non-nullable list of non-nullable lists of non-nullable lists\n}\n\n# New types - simplified with ID references only\ntype Milestone implements Node & Timestamped @key(fields: \"id\") {\n id: ID!\n projectId: ID!\n name: String!\n description: String\n startDate: String # ISO date (when milestone work starts)\n endDate: String # ISO date (milestone due date)\n status: MilestoneStatus!\n completionPercentage: Float\n \n # New fields with different list patterns\n dependencies: [Milestone!]! # non-nullable list of nullable milestones\n subtasks: [Task!] # nullable list of nullable tasks\n reviewers: [Employee!] # nullable list of non-nullable employees\n}\n\ntype Task implements Node & Assignable @key(fields: \"id\") {\n id: ID!\n projectId: ID!\n milestoneId: ID\n assigneeId: Int\n name: String!\n description: String\n priority: TaskPriority!\n status: TaskStatus!\n estimatedHours: Float\n actualHours: Float\n createdAt: String # ISO date\n completedAt: String # ISO date\n \n # New fields with different list patterns\n labels: [String!] # nullable list of nullable labels\n subtasks: [Task!] # nullable list of non-nullable subtasks\n dependencies: [Task!]! # non-nullable list of nullable tasks\n attachmentUrls: [String!]! # non-nullable list of non-nullable URLs\n reviewerIds: [Int!] # nullable list of nullable reviewer IDs\n}\n\ntype ProjectUpdate implements Node {\n id: ID!\n projectId: ID!\n updatedById: Int!\n updateType: ProjectUpdateType!\n description: String!\n timestamp: String! # ISO date\n metadata: String # JSON metadata\n}\n\n# Enums\nenum ProjectStatus {\n PLANNING\n ACTIVE\n COMPLETED\n ON_HOLD\n}\n\nenum MilestoneStatus {\n PENDING\n IN_PROGRESS\n COMPLETED\n DELAYED\n}\n\nenum TaskStatus {\n TODO\n IN_PROGRESS\n REVIEW\n COMPLETED\n BLOCKED\n}\n\nenum TaskPriority {\n LOW\n MEDIUM\n HIGH\n URGENT\n}\n\nenum ProjectUpdateType {\n STATUS_CHANGE\n MILESTONE_ADDED\n TASK_ASSIGNED\n PROGRESS_UPDATE\n TEAM_CHANGE\n}\n\n# Unions\nunion ProjectResource = Employee | Product | Milestone | Task\n\nunion ProjectSearchResult = Project | Milestone | Task\n\nunion ProjectActivity = ProjectUpdate | Milestone | Task\n\n# Federated types (unchanged)\ntype Employee @key(fields: \"id\") {\n id: Int! \n # New field resolved by this subgraph:\n projects: [Project!]\n # New fields for extended functionality\n assignedTasks: [Task!]!\n completedTasks: [Task!]!\n \n # New fields with different list patterns\n skills: [String!] # nullable list of nullable skills\n certifications: [String!] # nullable list of non-nullable certifications\n projectHistory: [[Project!]]! # non-nullable list of nullable lists of non-nullable projects\n}\n\ntype Product @key(fields: \"upc\") @key(fields: \"id\") {\n id: ID!\n upc: String! \n # Projects contributing to this product:\n projects: [Project!]\n \n # New field with nested lists\n featureMatrix: [[String!]] # nullable list of nullable lists of nullable features\n}\n\ntype Shipping @key(fields: \"id trackingNumber\") {\n id: ID!\n trackingNumber: String!\n weight: Float! \n}\n" + }, + "upstreamSchema": { + "key": "b24bf8f9a58a9f8109bb5bb2c84f80d74e18daf3" + }, + "grpc": { + "mapping": { + "version": 1, + "service": "ProjectsService", + "operationMappings": [ + { + "type": "OPERATION_TYPE_QUERY", + "original": "projects", + "mapped": "QueryProjects", + "request": "QueryProjectsRequest", + "response": "QueryProjectsResponse" + }, + { + "type": "OPERATION_TYPE_QUERY", + "original": "project", + "mapped": "QueryProject", + "request": "QueryProjectRequest", + "response": "QueryProjectResponse" + }, + { + "type": "OPERATION_TYPE_QUERY", + "original": "projectStatuses", + "mapped": "QueryProjectStatuses", + "request": "QueryProjectStatusesRequest", + "response": "QueryProjectStatusesResponse" + }, + { + "type": "OPERATION_TYPE_QUERY", + "original": "projectsByStatus", + "mapped": "QueryProjectsByStatus", + "request": "QueryProjectsByStatusRequest", + "response": "QueryProjectsByStatusResponse" + }, + { + "type": "OPERATION_TYPE_QUERY", + "original": "projectResources", + "mapped": "QueryProjectResources", + "request": "QueryProjectResourcesRequest", + "response": "QueryProjectResourcesResponse" + }, + { + "type": "OPERATION_TYPE_QUERY", + "original": "searchProjects", + "mapped": "QuerySearchProjects", + "request": "QuerySearchProjectsRequest", + "response": "QuerySearchProjectsResponse" + }, + { + "type": "OPERATION_TYPE_QUERY", + "original": "milestones", + "mapped": "QueryMilestones", + "request": "QueryMilestonesRequest", + "response": "QueryMilestonesResponse" + }, + { + "type": "OPERATION_TYPE_QUERY", + "original": "tasks", + "mapped": "QueryTasks", + "request": "QueryTasksRequest", + "response": "QueryTasksResponse" + }, + { + "type": "OPERATION_TYPE_QUERY", + "original": "projectActivities", + "mapped": "QueryProjectActivities", + "request": "QueryProjectActivitiesRequest", + "response": "QueryProjectActivitiesResponse" + }, + { + "type": "OPERATION_TYPE_QUERY", + "original": "projectTags", + "mapped": "QueryProjectTags", + "request": "QueryProjectTagsRequest", + "response": "QueryProjectTagsResponse" + }, + { + "type": "OPERATION_TYPE_QUERY", + "original": "archivedProjects", + "mapped": "QueryArchivedProjects", + "request": "QueryArchivedProjectsRequest", + "response": "QueryArchivedProjectsResponse" + }, + { + "type": "OPERATION_TYPE_QUERY", + "original": "tasksByPriority", + "mapped": "QueryTasksByPriority", + "request": "QueryTasksByPriorityRequest", + "response": "QueryTasksByPriorityResponse" + }, + { + "type": "OPERATION_TYPE_QUERY", + "original": "resourceMatrix", + "mapped": "QueryResourceMatrix", + "request": "QueryResourceMatrixRequest", + "response": "QueryResourceMatrixResponse" + }, + { + "type": "OPERATION_TYPE_QUERY", + "original": "killService", + "mapped": "QueryKillService", + "request": "QueryKillServiceRequest", + "response": "QueryKillServiceResponse" + }, + { + "type": "OPERATION_TYPE_QUERY", + "original": "panic", + "mapped": "QueryPanic", + "request": "QueryPanicRequest", + "response": "QueryPanicResponse" + }, + { + "type": "OPERATION_TYPE_MUTATION", + "original": "addProject", + "mapped": "MutationAddProject", + "request": "MutationAddProjectRequest", + "response": "MutationAddProjectResponse" + }, + { + "type": "OPERATION_TYPE_MUTATION", + "original": "addMilestone", + "mapped": "MutationAddMilestone", + "request": "MutationAddMilestoneRequest", + "response": "MutationAddMilestoneResponse" + }, + { + "type": "OPERATION_TYPE_MUTATION", + "original": "addTask", + "mapped": "MutationAddTask", + "request": "MutationAddTaskRequest", + "response": "MutationAddTaskResponse" + }, + { + "type": "OPERATION_TYPE_MUTATION", + "original": "updateProjectStatus", + "mapped": "MutationUpdateProjectStatus", + "request": "MutationUpdateProjectStatusRequest", + "response": "MutationUpdateProjectStatusResponse" + } + ], + "entityMappings": [ + { + "typeName": "Project", + "kind": "entity", + "key": "id", + "rpc": "LookupProjectById", + "request": "LookupProjectByIdRequest", + "response": "LookupProjectByIdResponse" + }, + { + "typeName": "Milestone", + "kind": "entity", + "key": "id", + "rpc": "LookupMilestoneById", + "request": "LookupMilestoneByIdRequest", + "response": "LookupMilestoneByIdResponse" + }, + { + "typeName": "Task", + "kind": "entity", + "key": "id", + "rpc": "LookupTaskById", + "request": "LookupTaskByIdRequest", + "response": "LookupTaskByIdResponse" + }, + { + "typeName": "Employee", + "kind": "entity", + "key": "id", + "rpc": "LookupEmployeeById", + "request": "LookupEmployeeByIdRequest", + "response": "LookupEmployeeByIdResponse" + }, + { + "typeName": "Product", + "kind": "entity", + "key": "upc", + "rpc": "LookupProductByUpc", + "request": "LookupProductByUpcRequest", + "response": "LookupProductByUpcResponse" + }, + { + "typeName": "Product", + "kind": "entity", + "key": "id", + "rpc": "LookupProductById", + "request": "LookupProductByIdRequest", + "response": "LookupProductByIdResponse" + }, + { + "typeName": "Shipping", + "kind": "entity", + "key": "id trackingNumber", + "rpc": "LookupShippingByIdAndTrackingNumber", + "request": "LookupShippingByIdAndTrackingNumberRequest", + "response": "LookupShippingByIdAndTrackingNumberResponse" + } + ], + "typeFieldMappings": [ + { + "type": "Query", + "fieldMappings": [ + { + "original": "projects", + "mapped": "projects" + }, + { + "original": "project", + "mapped": "project", + "argumentMappings": [ + { + "original": "id", + "mapped": "id" + } + ] + }, + { + "original": "projectStatuses", + "mapped": "project_statuses" + }, + { + "original": "projectsByStatus", + "mapped": "projects_by_status", + "argumentMappings": [ + { + "original": "status", + "mapped": "status" + } + ] + }, + { + "original": "projectResources", + "mapped": "project_resources", + "argumentMappings": [ + { + "original": "projectId", + "mapped": "project_id" + } + ] + }, + { + "original": "searchProjects", + "mapped": "search_projects", + "argumentMappings": [ + { + "original": "query", + "mapped": "query" + } + ] + }, + { + "original": "milestones", + "mapped": "milestones", + "argumentMappings": [ + { + "original": "projectId", + "mapped": "project_id" + } + ] + }, + { + "original": "tasks", + "mapped": "tasks", + "argumentMappings": [ + { + "original": "projectId", + "mapped": "project_id" + } + ] + }, + { + "original": "projectActivities", + "mapped": "project_activities", + "argumentMappings": [ + { + "original": "projectId", + "mapped": "project_id" + } + ] + }, + { + "original": "projectTags", + "mapped": "project_tags" + }, + { + "original": "archivedProjects", + "mapped": "archived_projects" + }, + { + "original": "tasksByPriority", + "mapped": "tasks_by_priority", + "argumentMappings": [ + { + "original": "projectId", + "mapped": "project_id" + } + ] + }, + { + "original": "resourceMatrix", + "mapped": "resource_matrix", + "argumentMappings": [ + { + "original": "projectId", + "mapped": "project_id" + } + ] + }, + { + "original": "killService", + "mapped": "kill_service" + }, + { + "original": "panic", + "mapped": "panic" + } + ] + }, + { + "type": "Mutation", + "fieldMappings": [ + { + "original": "addProject", + "mapped": "add_project", + "argumentMappings": [ + { + "original": "project", + "mapped": "project" + } + ] + }, + { + "original": "addMilestone", + "mapped": "add_milestone", + "argumentMappings": [ + { + "original": "milestone", + "mapped": "milestone" + } + ] + }, + { + "original": "addTask", + "mapped": "add_task", + "argumentMappings": [ + { + "original": "task", + "mapped": "task" + } + ] + }, + { + "original": "updateProjectStatus", + "mapped": "update_project_status", + "argumentMappings": [ + { + "original": "projectId", + "mapped": "project_id" + }, + { + "original": "status", + "mapped": "status" + } + ] + } + ] + }, + { + "type": "ProjectInput", + "fieldMappings": [ + { + "original": "name", + "mapped": "name" + }, + { + "original": "description", + "mapped": "description" + }, + { + "original": "startDate", + "mapped": "start_date" + }, + { + "original": "endDate", + "mapped": "end_date" + }, + { + "original": "status", + "mapped": "status" + } + ] + }, + { + "type": "MilestoneInput", + "fieldMappings": [ + { + "original": "projectId", + "mapped": "project_id" + }, + { + "original": "name", + "mapped": "name" + }, + { + "original": "description", + "mapped": "description" + }, + { + "original": "dueDate", + "mapped": "due_date" + }, + { + "original": "status", + "mapped": "status" + } + ] + }, + { + "type": "TaskInput", + "fieldMappings": [ + { + "original": "projectId", + "mapped": "project_id" + }, + { + "original": "assigneeId", + "mapped": "assignee_id" + }, + { + "original": "name", + "mapped": "name" + }, + { + "original": "description", + "mapped": "description" + }, + { + "original": "priority", + "mapped": "priority" + }, + { + "original": "status", + "mapped": "status" + }, + { + "original": "estimatedHours", + "mapped": "estimated_hours" + } + ] + }, + { + "type": "Project", + "fieldMappings": [ + { + "original": "id", + "mapped": "id" + }, + { + "original": "name", + "mapped": "name" + }, + { + "original": "description", + "mapped": "description" + }, + { + "original": "startDate", + "mapped": "start_date" + }, + { + "original": "endDate", + "mapped": "end_date" + }, + { + "original": "status", + "mapped": "status" + }, + { + "original": "teamMembers", + "mapped": "team_members" + }, + { + "original": "relatedProducts", + "mapped": "related_products" + }, + { + "original": "milestoneIds", + "mapped": "milestone_ids" + }, + { + "original": "milestones", + "mapped": "milestones" + }, + { + "original": "tasks", + "mapped": "tasks" + }, + { + "original": "progress", + "mapped": "progress" + }, + { + "original": "tags", + "mapped": "tags" + }, + { + "original": "alternativeProjects", + "mapped": "alternative_projects" + }, + { + "original": "dependencies", + "mapped": "dependencies" + }, + { + "original": "resourceGroups", + "mapped": "resource_groups" + }, + { + "original": "tasksByPhase", + "mapped": "tasks_by_phase" + }, + { + "original": "milestoneGroups", + "mapped": "milestone_groups" + }, + { + "original": "priorityMatrix", + "mapped": "priority_matrix" + } + ] + }, + { + "type": "Milestone", + "fieldMappings": [ + { + "original": "id", + "mapped": "id" + }, + { + "original": "projectId", + "mapped": "project_id" + }, + { + "original": "name", + "mapped": "name" + }, + { + "original": "description", + "mapped": "description" + }, + { + "original": "startDate", + "mapped": "start_date" + }, + { + "original": "endDate", + "mapped": "end_date" + }, + { + "original": "status", + "mapped": "status" + }, + { + "original": "completionPercentage", + "mapped": "completion_percentage" + }, + { + "original": "dependencies", + "mapped": "dependencies" + }, + { + "original": "subtasks", + "mapped": "subtasks" + }, + { + "original": "reviewers", + "mapped": "reviewers" + } + ] + }, + { + "type": "Task", + "fieldMappings": [ + { + "original": "id", + "mapped": "id" + }, + { + "original": "projectId", + "mapped": "project_id" + }, + { + "original": "milestoneId", + "mapped": "milestone_id" + }, + { + "original": "assigneeId", + "mapped": "assignee_id" + }, + { + "original": "name", + "mapped": "name" + }, + { + "original": "description", + "mapped": "description" + }, + { + "original": "priority", + "mapped": "priority" + }, + { + "original": "status", + "mapped": "status" + }, + { + "original": "estimatedHours", + "mapped": "estimated_hours" + }, + { + "original": "actualHours", + "mapped": "actual_hours" + }, + { + "original": "createdAt", + "mapped": "created_at" + }, + { + "original": "completedAt", + "mapped": "completed_at" + }, + { + "original": "labels", + "mapped": "labels" + }, + { + "original": "subtasks", + "mapped": "subtasks" + }, + { + "original": "dependencies", + "mapped": "dependencies" + }, + { + "original": "attachmentUrls", + "mapped": "attachment_urls" + }, + { + "original": "reviewerIds", + "mapped": "reviewer_ids" + } + ] + }, + { + "type": "ProjectUpdate", + "fieldMappings": [ + { + "original": "id", + "mapped": "id" + }, + { + "original": "projectId", + "mapped": "project_id" + }, + { + "original": "updatedById", + "mapped": "updated_by_id" + }, + { + "original": "updateType", + "mapped": "update_type" + }, + { + "original": "description", + "mapped": "description" + }, + { + "original": "timestamp", + "mapped": "timestamp" + }, + { + "original": "metadata", + "mapped": "metadata" + } + ] + }, + { + "type": "Employee", + "fieldMappings": [ + { + "original": "id", + "mapped": "id" + }, + { + "original": "projects", + "mapped": "projects" + }, + { + "original": "assignedTasks", + "mapped": "assigned_tasks" + }, + { + "original": "completedTasks", + "mapped": "completed_tasks" + }, + { + "original": "skills", + "mapped": "skills" + }, + { + "original": "certifications", + "mapped": "certifications" + }, + { + "original": "projectHistory", + "mapped": "project_history" + } + ] + }, + { + "type": "Product", + "fieldMappings": [ + { + "original": "id", + "mapped": "id" + }, + { + "original": "upc", + "mapped": "upc" + }, + { + "original": "projects", + "mapped": "projects" + }, + { + "original": "featureMatrix", + "mapped": "feature_matrix" + } + ] + }, + { + "type": "Shipping", + "fieldMappings": [ + { + "original": "id", + "mapped": "id" + }, + { + "original": "trackingNumber", + "mapped": "tracking_number" + }, + { + "original": "weight", + "mapped": "weight" + } + ] + } + ], + "enumMappings": [ + { + "type": "ProjectStatus", + "values": [ + { + "original": "PLANNING", + "mapped": "PROJECT_STATUS_PLANNING" + }, + { + "original": "ACTIVE", + "mapped": "PROJECT_STATUS_ACTIVE" + }, + { + "original": "COMPLETED", + "mapped": "PROJECT_STATUS_COMPLETED" + }, + { + "original": "ON_HOLD", + "mapped": "PROJECT_STATUS_ON_HOLD" + } + ] + }, + { + "type": "MilestoneStatus", + "values": [ + { + "original": "PENDING", + "mapped": "MILESTONE_STATUS_PENDING" + }, + { + "original": "IN_PROGRESS", + "mapped": "MILESTONE_STATUS_IN_PROGRESS" + }, + { + "original": "COMPLETED", + "mapped": "MILESTONE_STATUS_COMPLETED" + }, + { + "original": "DELAYED", + "mapped": "MILESTONE_STATUS_DELAYED" + } + ] + }, + { + "type": "TaskStatus", + "values": [ + { + "original": "TODO", + "mapped": "TASK_STATUS_TODO" + }, + { + "original": "IN_PROGRESS", + "mapped": "TASK_STATUS_IN_PROGRESS" + }, + { + "original": "REVIEW", + "mapped": "TASK_STATUS_REVIEW" + }, + { + "original": "COMPLETED", + "mapped": "TASK_STATUS_COMPLETED" + }, + { + "original": "BLOCKED", + "mapped": "TASK_STATUS_BLOCKED" + } + ] + }, + { + "type": "TaskPriority", + "values": [ + { + "original": "LOW", + "mapped": "TASK_PRIORITY_LOW" + }, + { + "original": "MEDIUM", + "mapped": "TASK_PRIORITY_MEDIUM" + }, + { + "original": "HIGH", + "mapped": "TASK_PRIORITY_HIGH" + }, + { + "original": "URGENT", + "mapped": "TASK_PRIORITY_URGENT" + } + ] + }, + { + "type": "ProjectUpdateType", + "values": [ + { + "original": "STATUS_CHANGE", + "mapped": "PROJECT_UPDATE_TYPE_STATUS_CHANGE" + }, + { + "original": "MILESTONE_ADDED", + "mapped": "PROJECT_UPDATE_TYPE_MILESTONE_ADDED" + }, + { + "original": "TASK_ASSIGNED", + "mapped": "PROJECT_UPDATE_TYPE_TASK_ASSIGNED" + }, + { + "original": "PROGRESS_UPDATE", + "mapped": "PROJECT_UPDATE_TYPE_PROGRESS_UPDATE" + }, + { + "original": "TEAM_CHANGE", + "mapped": "PROJECT_UPDATE_TYPE_TEAM_CHANGE" + } + ] + } + ] + }, + "protoSchema": "syntax = \"proto3\";\npackage service;\n\noption go_package = \"github.com/wundergraph/cosmo/demo/pkg/subgraphs/projects\";\n\nimport \"google/protobuf/wrappers.proto\";\n\n// Service definition for ProjectsService\nservice ProjectsService {\n // Lookup Employee entity by id\n rpc LookupEmployeeById(LookupEmployeeByIdRequest) returns (LookupEmployeeByIdResponse) {}\n // Lookup Milestone entity by id\n rpc LookupMilestoneById(LookupMilestoneByIdRequest) returns (LookupMilestoneByIdResponse) {}\n // Lookup Product entity by id\n rpc LookupProductById(LookupProductByIdRequest) returns (LookupProductByIdResponse) {}\n // Lookup Product entity by upc\n rpc LookupProductByUpc(LookupProductByUpcRequest) returns (LookupProductByUpcResponse) {}\n // Lookup Project entity by id\n rpc LookupProjectById(LookupProjectByIdRequest) returns (LookupProjectByIdResponse) {}\n // Lookup Shipping entity by id and trackingNumber\n rpc LookupShippingByIdAndTrackingNumber(LookupShippingByIdAndTrackingNumberRequest) returns (LookupShippingByIdAndTrackingNumberResponse) {}\n // Lookup Task entity by id\n rpc LookupTaskById(LookupTaskByIdRequest) returns (LookupTaskByIdResponse) {}\n rpc MutationAddMilestone(MutationAddMilestoneRequest) returns (MutationAddMilestoneResponse) {}\n rpc MutationAddProject(MutationAddProjectRequest) returns (MutationAddProjectResponse) {}\n rpc MutationAddTask(MutationAddTaskRequest) returns (MutationAddTaskResponse) {}\n rpc MutationUpdateProjectStatus(MutationUpdateProjectStatusRequest) returns (MutationUpdateProjectStatusResponse) {}\n rpc QueryArchivedProjects(QueryArchivedProjectsRequest) returns (QueryArchivedProjectsResponse) {}\n rpc QueryKillService(QueryKillServiceRequest) returns (QueryKillServiceResponse) {}\n rpc QueryMilestones(QueryMilestonesRequest) returns (QueryMilestonesResponse) {}\n rpc QueryPanic(QueryPanicRequest) returns (QueryPanicResponse) {}\n rpc QueryProject(QueryProjectRequest) returns (QueryProjectResponse) {}\n rpc QueryProjectActivities(QueryProjectActivitiesRequest) returns (QueryProjectActivitiesResponse) {}\n rpc QueryProjectResources(QueryProjectResourcesRequest) returns (QueryProjectResourcesResponse) {}\n rpc QueryProjectStatuses(QueryProjectStatusesRequest) returns (QueryProjectStatusesResponse) {}\n rpc QueryProjectTags(QueryProjectTagsRequest) returns (QueryProjectTagsResponse) {}\n rpc QueryProjects(QueryProjectsRequest) returns (QueryProjectsResponse) {}\n rpc QueryProjectsByStatus(QueryProjectsByStatusRequest) returns (QueryProjectsByStatusResponse) {}\n rpc QueryResourceMatrix(QueryResourceMatrixRequest) returns (QueryResourceMatrixResponse) {}\n rpc QuerySearchProjects(QuerySearchProjectsRequest) returns (QuerySearchProjectsResponse) {}\n rpc QueryTasks(QueryTasksRequest) returns (QueryTasksResponse) {}\n rpc QueryTasksByPriority(QueryTasksByPriorityRequest) returns (QueryTasksByPriorityResponse) {}\n}\n\n// Wrapper message for a list of Employee.\nmessage ListOfEmployee {\n message List {\n repeated Employee items = 1;\n }\n List list = 1;\n}\n// Wrapper message for a list of Int.\nmessage ListOfInt {\n message List {\n repeated int32 items = 1;\n }\n List list = 1;\n}\n// Wrapper message for a list of Task.\nmessage ListOfListOfListOfTask {\n message List {\n repeated ListOfListOfTask items = 1;\n }\n List list = 1;\n}\n// Wrapper message for a list of Milestone.\nmessage ListOfListOfMilestone {\n message List {\n repeated ListOfMilestone items = 1;\n }\n List list = 1;\n}\n// Wrapper message for a list of Project.\nmessage ListOfListOfProject {\n message List {\n repeated ListOfProject items = 1;\n }\n List list = 1;\n}\n// Wrapper message for a list of ProjectResource.\nmessage ListOfListOfProjectResource {\n message List {\n repeated ListOfProjectResource items = 1;\n }\n List list = 1;\n}\n// Wrapper message for a list of String.\nmessage ListOfListOfString {\n message List {\n repeated ListOfString items = 1;\n }\n List list = 1;\n}\n// Wrapper message for a list of Task.\nmessage ListOfListOfTask {\n message List {\n repeated ListOfTask items = 1;\n }\n List list = 1;\n}\n// Wrapper message for a list of Milestone.\nmessage ListOfMilestone {\n message List {\n repeated Milestone items = 1;\n }\n List list = 1;\n}\n// Wrapper message for a list of Project.\nmessage ListOfProject {\n message List {\n repeated Project items = 1;\n }\n List list = 1;\n}\n// Wrapper message for a list of ProjectResource.\nmessage ListOfProjectResource {\n message List {\n repeated ProjectResource items = 1;\n }\n List list = 1;\n}\n// Wrapper message for a list of String.\nmessage ListOfString {\n message List {\n repeated string items = 1;\n }\n List list = 1;\n}\n// Wrapper message for a list of Task.\nmessage ListOfTask {\n message List {\n repeated Task items = 1;\n }\n List list = 1;\n}\n// Key message for Project entity lookup\nmessage LookupProjectByIdRequestKey {\n // Key field for Project entity lookup.\n string id = 1;\n}\n\n// Request message for Project entity lookup.\nmessage LookupProjectByIdRequest {\n /*\n * List of keys to look up Project entities.\n * Order matters - each key maps to one entity in LookupProjectByIdResponse.\n */\n repeated LookupProjectByIdRequestKey keys = 1;\n}\n\n// Response message for Project entity lookup.\nmessage LookupProjectByIdResponse {\n /*\n * List of Project entities in the same order as the keys in LookupProjectByIdRequest.\n * Always return the same number of entities as keys. Use null for entities that cannot be found.\n * \n * Example:\n * LookupUserByIdRequest:\n * keys:\n * - id: 1\n * - id: 2\n * LookupUserByIdResponse:\n * result:\n * - id: 1 # User with id 1 found\n * - null # User with id 2 not found\n */\n repeated Project result = 1;\n}\n\n// Key message for Milestone entity lookup\nmessage LookupMilestoneByIdRequestKey {\n // Key field for Milestone entity lookup.\n string id = 1;\n}\n\n// Request message for Milestone entity lookup.\nmessage LookupMilestoneByIdRequest {\n /*\n * List of keys to look up Milestone entities.\n * Order matters - each key maps to one entity in LookupMilestoneByIdResponse.\n */\n repeated LookupMilestoneByIdRequestKey keys = 1;\n}\n\n// Response message for Milestone entity lookup.\nmessage LookupMilestoneByIdResponse {\n /*\n * List of Milestone entities in the same order as the keys in LookupMilestoneByIdRequest.\n * Always return the same number of entities as keys. Use null for entities that cannot be found.\n * \n * Example:\n * LookupUserByIdRequest:\n * keys:\n * - id: 1\n * - id: 2\n * LookupUserByIdResponse:\n * result:\n * - id: 1 # User with id 1 found\n * - null # User with id 2 not found\n */\n repeated Milestone result = 1;\n}\n\n// Key message for Task entity lookup\nmessage LookupTaskByIdRequestKey {\n // Key field for Task entity lookup.\n string id = 1;\n}\n\n// Request message for Task entity lookup.\nmessage LookupTaskByIdRequest {\n /*\n * List of keys to look up Task entities.\n * Order matters - each key maps to one entity in LookupTaskByIdResponse.\n */\n repeated LookupTaskByIdRequestKey keys = 1;\n}\n\n// Response message for Task entity lookup.\nmessage LookupTaskByIdResponse {\n /*\n * List of Task entities in the same order as the keys in LookupTaskByIdRequest.\n * Always return the same number of entities as keys. Use null for entities that cannot be found.\n * \n * Example:\n * LookupUserByIdRequest:\n * keys:\n * - id: 1\n * - id: 2\n * LookupUserByIdResponse:\n * result:\n * - id: 1 # User with id 1 found\n * - null # User with id 2 not found\n */\n repeated Task result = 1;\n}\n\n// Key message for Employee entity lookup\nmessage LookupEmployeeByIdRequestKey {\n // Key field for Employee entity lookup.\n string id = 1;\n}\n\n// Request message for Employee entity lookup.\nmessage LookupEmployeeByIdRequest {\n /*\n * List of keys to look up Employee entities.\n * Order matters - each key maps to one entity in LookupEmployeeByIdResponse.\n */\n repeated LookupEmployeeByIdRequestKey keys = 1;\n}\n\n// Response message for Employee entity lookup.\nmessage LookupEmployeeByIdResponse {\n /*\n * List of Employee entities in the same order as the keys in LookupEmployeeByIdRequest.\n * Always return the same number of entities as keys. Use null for entities that cannot be found.\n * \n * Example:\n * LookupUserByIdRequest:\n * keys:\n * - id: 1\n * - id: 2\n * LookupUserByIdResponse:\n * result:\n * - id: 1 # User with id 1 found\n * - null # User with id 2 not found\n */\n repeated Employee result = 1;\n}\n\n// Key message for Product entity lookup\nmessage LookupProductByUpcRequestKey {\n // Key field for Product entity lookup.\n string upc = 1;\n}\n\n// Request message for Product entity lookup.\nmessage LookupProductByUpcRequest {\n /*\n * List of keys to look up Product entities.\n * Order matters - each key maps to one entity in LookupProductByUpcResponse.\n */\n repeated LookupProductByUpcRequestKey keys = 1;\n}\n\n// Response message for Product entity lookup.\nmessage LookupProductByUpcResponse {\n /*\n * List of Product entities in the same order as the keys in LookupProductByUpcRequest.\n * Always return the same number of entities as keys. Use null for entities that cannot be found.\n * \n * Example:\n * LookupUserByIdRequest:\n * keys:\n * - id: 1\n * - id: 2\n * LookupUserByIdResponse:\n * result:\n * - id: 1 # User with id 1 found\n * - null # User with id 2 not found\n */\n repeated Product result = 1;\n}\n\n// Key message for Product entity lookup\nmessage LookupProductByIdRequestKey {\n // Key field for Product entity lookup.\n string id = 1;\n}\n\n// Request message for Product entity lookup.\nmessage LookupProductByIdRequest {\n /*\n * List of keys to look up Product entities.\n * Order matters - each key maps to one entity in LookupProductByIdResponse.\n */\n repeated LookupProductByIdRequestKey keys = 1;\n}\n\n// Response message for Product entity lookup.\nmessage LookupProductByIdResponse {\n /*\n * List of Product entities in the same order as the keys in LookupProductByIdRequest.\n * Always return the same number of entities as keys. Use null for entities that cannot be found.\n * \n * Example:\n * LookupUserByIdRequest:\n * keys:\n * - id: 1\n * - id: 2\n * LookupUserByIdResponse:\n * result:\n * - id: 1 # User with id 1 found\n * - null # User with id 2 not found\n */\n repeated Product result = 1;\n}\n\n// Key message for Shipping entity lookup\nmessage LookupShippingByIdAndTrackingNumberRequestKey {\n // Key field for Shipping entity lookup.\n string id = 1;\n // Key field for Shipping entity lookup.\n string tracking_number = 2;\n}\n\n// Request message for Shipping entity lookup.\nmessage LookupShippingByIdAndTrackingNumberRequest {\n /*\n * List of keys to look up Shipping entities.\n * Order matters - each key maps to one entity in LookupShippingByIdAndTrackingNumberResponse.\n */\n repeated LookupShippingByIdAndTrackingNumberRequestKey keys = 1;\n}\n\n// Response message for Shipping entity lookup.\nmessage LookupShippingByIdAndTrackingNumberResponse {\n /*\n * List of Shipping entities in the same order as the keys in LookupShippingByIdAndTrackingNumberRequest.\n * Always return the same number of entities as keys. Use null for entities that cannot be found.\n * \n * Example:\n * LookupUserByIdRequest:\n * keys:\n * - id: 1\n * - id: 2\n * LookupUserByIdResponse:\n * result:\n * - id: 1 # User with id 1 found\n * - null # User with id 2 not found\n */\n repeated Shipping result = 1;\n}\n\n// Request message for projects operation.\nmessage QueryProjectsRequest {\n}\n// Response message for projects operation.\nmessage QueryProjectsResponse {\n repeated Project projects = 1;\n}\n// Request message for project operation.\nmessage QueryProjectRequest {\n string id = 1;\n}\n// Response message for project operation.\nmessage QueryProjectResponse {\n Project project = 1;\n}\n// Request message for projectStatuses operation.\nmessage QueryProjectStatusesRequest {\n}\n// Response message for projectStatuses operation.\nmessage QueryProjectStatusesResponse {\n repeated ProjectStatus project_statuses = 1;\n}\n// Request message for projectsByStatus operation.\nmessage QueryProjectsByStatusRequest {\n ProjectStatus status = 1;\n}\n// Response message for projectsByStatus operation.\nmessage QueryProjectsByStatusResponse {\n repeated Project projects_by_status = 1;\n}\n// Request message for projectResources operation.\nmessage QueryProjectResourcesRequest {\n string project_id = 1;\n}\n// Response message for projectResources operation.\nmessage QueryProjectResourcesResponse {\n repeated ProjectResource project_resources = 1;\n}\n// Request message for searchProjects operation.\nmessage QuerySearchProjectsRequest {\n string query = 1;\n}\n// Response message for searchProjects operation.\nmessage QuerySearchProjectsResponse {\n repeated ProjectSearchResult search_projects = 1;\n}\n// Request message for milestones operation.\nmessage QueryMilestonesRequest {\n string project_id = 1;\n}\n// Response message for milestones operation.\nmessage QueryMilestonesResponse {\n repeated Milestone milestones = 1;\n}\n// Request message for tasks operation.\nmessage QueryTasksRequest {\n string project_id = 1;\n}\n// Response message for tasks operation.\nmessage QueryTasksResponse {\n repeated Task tasks = 1;\n}\n// Request message for projectActivities operation.\nmessage QueryProjectActivitiesRequest {\n string project_id = 1;\n}\n// Response message for projectActivities operation.\nmessage QueryProjectActivitiesResponse {\n repeated ProjectActivity project_activities = 1;\n}\n// Request message for projectTags operation.\nmessage QueryProjectTagsRequest {\n}\n// Response message for projectTags operation.\nmessage QueryProjectTagsResponse {\n ListOfString project_tags = 1;\n}\n// Request message for archivedProjects operation.\nmessage QueryArchivedProjectsRequest {\n}\n// Response message for archivedProjects operation.\nmessage QueryArchivedProjectsResponse {\n repeated Project archived_projects = 1;\n}\n// Request message for tasksByPriority operation.\nmessage QueryTasksByPriorityRequest {\n string project_id = 1;\n}\n// Response message for tasksByPriority operation.\nmessage QueryTasksByPriorityResponse {\n ListOfListOfTask tasks_by_priority = 1;\n}\n// Request message for resourceMatrix operation.\nmessage QueryResourceMatrixRequest {\n string project_id = 1;\n}\n// Response message for resourceMatrix operation.\nmessage QueryResourceMatrixResponse {\n ListOfListOfProjectResource resource_matrix = 1;\n}\n// Request message for killService operation.\nmessage QueryKillServiceRequest {\n}\n// Response message for killService operation.\nmessage QueryKillServiceResponse {\n bool kill_service = 1;\n}\n// Request message for panic operation.\nmessage QueryPanicRequest {\n}\n// Response message for panic operation.\nmessage QueryPanicResponse {\n bool panic = 1;\n}\n// Request message for addProject operation.\nmessage MutationAddProjectRequest {\n ProjectInput project = 1;\n}\n// Response message for addProject operation.\nmessage MutationAddProjectResponse {\n Project add_project = 1;\n}\n// Request message for addMilestone operation.\nmessage MutationAddMilestoneRequest {\n MilestoneInput milestone = 1;\n}\n// Response message for addMilestone operation.\nmessage MutationAddMilestoneResponse {\n Milestone add_milestone = 1;\n}\n// Request message for addTask operation.\nmessage MutationAddTaskRequest {\n TaskInput task = 1;\n}\n// Response message for addTask operation.\nmessage MutationAddTaskResponse {\n Task add_task = 1;\n}\n// Request message for updateProjectStatus operation.\nmessage MutationUpdateProjectStatusRequest {\n string project_id = 1;\n ProjectStatus status = 2;\n}\n// Response message for updateProjectStatus operation.\nmessage MutationUpdateProjectStatusResponse {\n ProjectUpdate update_project_status = 1;\n}\n\nmessage Project {\n string id = 1;\n string name = 2;\n google.protobuf.StringValue description = 3;\n google.protobuf.StringValue start_date = 4;\n google.protobuf.StringValue end_date = 5;\n ProjectStatus status = 6;\n repeated Employee team_members = 7;\n repeated Product related_products = 8;\n ListOfString milestone_ids = 9;\n repeated Milestone milestones = 10;\n repeated Task tasks = 11;\n google.protobuf.DoubleValue progress = 12;\n ListOfString tags = 13;\n ListOfProject alternative_projects = 14;\n ListOfProject dependencies = 15;\n ListOfListOfProjectResource resource_groups = 16;\n ListOfListOfTask tasks_by_phase = 17;\n ListOfListOfMilestone milestone_groups = 18;\n ListOfListOfListOfTask priority_matrix = 19;\n}\n\nmessage Milestone {\n string id = 1;\n string project_id = 2;\n string name = 3;\n google.protobuf.StringValue description = 4;\n google.protobuf.StringValue start_date = 5;\n google.protobuf.StringValue end_date = 6;\n MilestoneStatus status = 7;\n google.protobuf.DoubleValue completion_percentage = 8;\n repeated Milestone dependencies = 9;\n ListOfTask subtasks = 10;\n ListOfEmployee reviewers = 11;\n}\n\nmessage Task {\n string id = 1;\n string project_id = 2;\n google.protobuf.StringValue milestone_id = 3;\n google.protobuf.Int32Value assignee_id = 4;\n string name = 5;\n google.protobuf.StringValue description = 6;\n TaskPriority priority = 7;\n TaskStatus status = 8;\n google.protobuf.DoubleValue estimated_hours = 9;\n google.protobuf.DoubleValue actual_hours = 10;\n google.protobuf.StringValue created_at = 11;\n google.protobuf.StringValue completed_at = 12;\n ListOfString labels = 13;\n ListOfTask subtasks = 14;\n repeated Task dependencies = 15;\n repeated string attachment_urls = 16;\n ListOfInt reviewer_ids = 17;\n}\n\nmessage Employee {\n int32 id = 1;\n ListOfProject projects = 2;\n repeated Task assigned_tasks = 3;\n repeated Task completed_tasks = 4;\n ListOfString skills = 5;\n ListOfString certifications = 6;\n ListOfListOfProject project_history = 7;\n}\n\nmessage Product {\n string upc = 1;\n ListOfProject projects = 2;\n ListOfListOfString feature_matrix = 3;\n string id = 4;\n}\n\nmessage Shipping {\n reserved 2;\n string id = 1;\n double weight = 3;\n string tracking_number = 4;\n}\n\nenum ProjectStatus {\n PROJECT_STATUS_UNSPECIFIED = 0;\n PROJECT_STATUS_PLANNING = 1;\n PROJECT_STATUS_ACTIVE = 2;\n PROJECT_STATUS_COMPLETED = 3;\n PROJECT_STATUS_ON_HOLD = 4;\n}\n\nmessage ProjectResource {\n oneof value {\n Employee employee = 1;\n Product product = 2;\n Milestone milestone = 3;\n Task task = 4;\n }\n}\n\nmessage ProjectSearchResult {\n oneof value {\n Project project = 1;\n Milestone milestone = 2;\n Task task = 3;\n }\n}\n\nmessage ProjectActivity {\n oneof value {\n ProjectUpdate project_update = 1;\n Milestone milestone = 2;\n Task task = 3;\n }\n}\n\nmessage ProjectInput {\n string name = 1;\n google.protobuf.StringValue description = 2;\n google.protobuf.StringValue start_date = 3;\n google.protobuf.StringValue end_date = 4;\n ProjectStatus status = 5;\n}\n\nmessage MilestoneInput {\n string project_id = 1;\n string name = 2;\n google.protobuf.StringValue description = 3;\n google.protobuf.StringValue due_date = 4;\n MilestoneStatus status = 5;\n}\n\nmessage TaskInput {\n string project_id = 1;\n google.protobuf.Int32Value assignee_id = 2;\n string name = 3;\n google.protobuf.StringValue description = 4;\n TaskPriority priority = 5;\n TaskStatus status = 6;\n google.protobuf.DoubleValue estimated_hours = 7;\n}\n\nmessage ProjectUpdate {\n string id = 1;\n string project_id = 2;\n int32 updated_by_id = 3;\n ProjectUpdateType update_type = 4;\n string description = 5;\n string timestamp = 6;\n google.protobuf.StringValue metadata = 7;\n}\n\nmessage Node {\n oneof instance {\n Project project = 1;\n Milestone milestone = 2;\n Task task = 3;\n ProjectUpdate project_update = 4;\n }\n}\n\nmessage Timestamped {\n oneof instance {\n Project project = 1;\n Milestone milestone = 2;\n }\n}\n\nmessage Assignable {\n oneof instance {\n Task task = 1;\n }\n}\n\nenum MilestoneStatus {\n MILESTONE_STATUS_UNSPECIFIED = 0;\n MILESTONE_STATUS_PENDING = 1;\n MILESTONE_STATUS_IN_PROGRESS = 2;\n MILESTONE_STATUS_COMPLETED = 3;\n MILESTONE_STATUS_DELAYED = 4;\n}\n\nenum TaskStatus {\n TASK_STATUS_UNSPECIFIED = 0;\n TASK_STATUS_TODO = 1;\n TASK_STATUS_IN_PROGRESS = 2;\n TASK_STATUS_REVIEW = 3;\n TASK_STATUS_COMPLETED = 4;\n TASK_STATUS_BLOCKED = 5;\n}\n\nenum TaskPriority {\n TASK_PRIORITY_UNSPECIFIED = 0;\n TASK_PRIORITY_LOW = 1;\n TASK_PRIORITY_MEDIUM = 2;\n TASK_PRIORITY_HIGH = 3;\n TASK_PRIORITY_URGENT = 4;\n}\n\nenum ProjectUpdateType {\n PROJECT_UPDATE_TYPE_UNSPECIFIED = 0;\n PROJECT_UPDATE_TYPE_STATUS_CHANGE = 1;\n PROJECT_UPDATE_TYPE_MILESTONE_ADDED = 2;\n PROJECT_UPDATE_TYPE_TASK_ASSIGNED = 3;\n PROJECT_UPDATE_TYPE_PROGRESS_UPDATE = 4;\n PROJECT_UPDATE_TYPE_TEAM_CHANGE = 5;\n}" + } + }, + "requestTimeoutSeconds": "10", + "id": "9", + "keys": [ + { + "typeName": "Project", + "selectionSet": "id" + }, + { + "typeName": "Milestone", + "selectionSet": "id" + }, + { + "typeName": "Task", + "selectionSet": "id" + }, + { + "typeName": "Employee", + "selectionSet": "id" + }, + { + "typeName": "Product", + "selectionSet": "upc" + }, + { + "typeName": "Product", + "selectionSet": "id" + }, + { + "typeName": "Shipping", + "selectionSet": "id trackingNumber" + } + ] + } + ], + "fieldConfigurations": [ + { + "typeName": "Subscription", + "fieldName": "filteredEmployeeUpdated", + "argumentsConfiguration": [ + { + "name": "id", + "sourceType": "FIELD_ARGUMENT" + } + ], + "subscriptionFilterCondition": { + "not": { + "in": { + "fieldPath": [ + "id" + ], + "json": "[2,6,9,10,12]" + } + } + } + }, + { + "typeName": "Subscription", + "fieldName": "filteredEmployeeUpdatedMyKafka", + "argumentsConfiguration": [ + { + "name": "employeeID", + "sourceType": "FIELD_ARGUMENT" + } + ], + "subscriptionFilterCondition": { + "in": { + "fieldPath": [ + "id" + ], + "json": "[1,3,4,7,11]" + } + } + }, + { + "typeName": "Subscription", + "fieldName": "filteredEmployeeUpdatedMyKafkaWithListFieldArguments", + "argumentsConfiguration": [ + { + "name": "firstIds", + "sourceType": "FIELD_ARGUMENT" + }, + { + "name": "secondIds", + "sourceType": "FIELD_ARGUMENT" + } + ], + "subscriptionFilterCondition": { + "in": { + "fieldPath": [ + "id" + ], + "json": "[\"{{ args.firstIds }}\",\"{{ args.secondIds }}\"]" + } + } + }, + { + "typeName": "Subscription", + "fieldName": "filteredEmployeeUpdatedMyKafkaWithNestedListFieldArgument", + "argumentsConfiguration": [ + { + "name": "input", + "sourceType": "FIELD_ARGUMENT" + } + ], + "subscriptionFilterCondition": { + "or": [ + { + "in": { + "fieldPath": [ + "id" + ], + "json": "[\"{{ args.input.ids }}\"]" + } + }, + { + "in": { + "fieldPath": [ + "id" + ], + "json": "[\"1\"]" + } + } + ] + } + }, + { + "typeName": "Subscription", + "fieldName": "filteredEmployeeUpdatedMyRedis", + "argumentsConfiguration": [ + { + "name": "ids", + "sourceType": "FIELD_ARGUMENT" + } + ], + "subscriptionFilterCondition": { + "in": { + "fieldPath": [ + "id" + ], + "json": "[\"{{ args.ids }}\"]" + } + } + }, + { + "typeName": "Query", + "fieldName": "employee", + "argumentsConfiguration": [ + { + "name": "id", + "sourceType": "FIELD_ARGUMENT" + } + ] + }, + { + "typeName": "Query", + "fieldName": "employeeAsList", + "argumentsConfiguration": [ + { + "name": "id", + "sourceType": "FIELD_ARGUMENT" + } + ] + }, + { + "typeName": "Query", + "fieldName": "teammates", + "argumentsConfiguration": [ + { + "name": "team", + "sourceType": "FIELD_ARGUMENT" + } + ] + }, + { + "typeName": "Query", + "fieldName": "findEmployees", + "argumentsConfiguration": [ + { + "name": "criteria", + "sourceType": "FIELD_ARGUMENT" + } + ] + }, + { + "typeName": "Query", + "fieldName": "sharedThings", + "argumentsConfiguration": [ + { + "name": "numOfA", + "sourceType": "FIELD_ARGUMENT" + }, + { + "name": "numOfB", + "sourceType": "FIELD_ARGUMENT" + } + ] + }, + { + "typeName": "Query", + "fieldName": "findShipping", + "argumentsConfiguration": [ + { + "name": "id", + "sourceType": "FIELD_ARGUMENT" + }, + { + "name": "trackingNumber", + "sourceType": "FIELD_ARGUMENT" + } + ] + }, + { + "typeName": "Query", + "fieldName": "headerValue", + "argumentsConfiguration": [ + { + "name": "name", + "sourceType": "FIELD_ARGUMENT" + } + ] + }, + { + "typeName": "Query", + "fieldName": "initPayloadValue", + "argumentsConfiguration": [ + { + "name": "key", + "sourceType": "FIELD_ARGUMENT" + } + ] + }, + { + "typeName": "Query", + "fieldName": "delay", + "argumentsConfiguration": [ + { + "name": "response", + "sourceType": "FIELD_ARGUMENT" + }, + { + "name": "ms", + "sourceType": "FIELD_ARGUMENT" + } + ] + }, + { + "typeName": "Query", + "fieldName": "bigResponse", + "argumentsConfiguration": [ + { + "name": "artificialDelay", + "sourceType": "FIELD_ARGUMENT" + }, + { + "name": "bigObjects", + "sourceType": "FIELD_ARGUMENT" + }, + { + "name": "nestedObjects", + "sourceType": "FIELD_ARGUMENT" + }, + { + "name": "deeplyNestedObjects", + "sourceType": "FIELD_ARGUMENT" + } + ] + }, + { + "typeName": "Query", + "fieldName": "longResponse", + "argumentsConfiguration": [ + { + "name": "artificialDelay", + "sourceType": "FIELD_ARGUMENT" + }, + { + "name": "bytes", + "sourceType": "FIELD_ARGUMENT" + } + ] + }, + { + "typeName": "Query", + "fieldName": "rootFieldWithListArg", + "argumentsConfiguration": [ + { + "name": "arg", + "sourceType": "FIELD_ARGUMENT" + } + ] + }, + { + "typeName": "Query", + "fieldName": "rootFieldWithNestedListArg", + "argumentsConfiguration": [ + { + "name": "arg", + "sourceType": "FIELD_ARGUMENT" + } + ] + }, + { + "typeName": "Query", + "fieldName": "rootFieldWithListOfInputArg", + "argumentsConfiguration": [ + { + "name": "arg", + "sourceType": "FIELD_ARGUMENT" + } + ] + }, + { + "typeName": "Query", + "fieldName": "rootFieldWithListOfEnumArg", + "argumentsConfiguration": [ + { + "name": "arg", + "sourceType": "FIELD_ARGUMENT" + } + ] + }, + { + "typeName": "Query", + "fieldName": "rootFieldWithInput", + "argumentsConfiguration": [ + { + "name": "arg", + "sourceType": "FIELD_ARGUMENT" + } + ] + }, + { + "typeName": "Query", + "fieldName": "floatField", + "argumentsConfiguration": [ + { + "name": "arg", + "sourceType": "FIELD_ARGUMENT" + } + ] + }, + { + "typeName": "Query", + "fieldName": "employeeFromEvent", + "argumentsConfiguration": [ + { + "name": "id", + "sourceType": "FIELD_ARGUMENT" + } + ] + }, + { + "typeName": "Query", + "fieldName": "employeeFromEventMyNats", + "argumentsConfiguration": [ + { + "name": "employeeID", + "sourceType": "FIELD_ARGUMENT" + } + ] + }, + { + "typeName": "Query", + "fieldName": "project", + "argumentsConfiguration": [ + { + "name": "id", + "sourceType": "FIELD_ARGUMENT" + } + ] + }, + { + "typeName": "Query", + "fieldName": "projectsByStatus", + "argumentsConfiguration": [ + { + "name": "status", + "sourceType": "FIELD_ARGUMENT" + } + ] + }, + { + "typeName": "Query", + "fieldName": "projectResources", + "argumentsConfiguration": [ + { + "name": "projectId", + "sourceType": "FIELD_ARGUMENT" + } + ] + }, + { + "typeName": "Query", + "fieldName": "searchProjects", + "argumentsConfiguration": [ + { + "name": "query", + "sourceType": "FIELD_ARGUMENT" + } + ] + }, + { + "typeName": "Query", + "fieldName": "milestones", + "argumentsConfiguration": [ + { + "name": "projectId", + "sourceType": "FIELD_ARGUMENT" + } + ] + }, + { + "typeName": "Query", + "fieldName": "tasks", + "argumentsConfiguration": [ + { + "name": "projectId", + "sourceType": "FIELD_ARGUMENT" + } + ] + }, + { + "typeName": "Query", + "fieldName": "projectActivities", + "argumentsConfiguration": [ + { + "name": "projectId", + "sourceType": "FIELD_ARGUMENT" + } + ] + }, + { + "typeName": "Query", + "fieldName": "tasksByPriority", + "argumentsConfiguration": [ + { + "name": "projectId", + "sourceType": "FIELD_ARGUMENT" + } + ] + }, + { + "typeName": "Query", + "fieldName": "resourceMatrix", + "argumentsConfiguration": [ + { + "name": "projectId", + "sourceType": "FIELD_ARGUMENT" + } + ] + }, + { + "typeName": "Mutation", + "fieldName": "updateEmployeeTag", + "argumentsConfiguration": [ + { + "name": "id", + "sourceType": "FIELD_ARGUMENT" + }, + { + "name": "tag", + "sourceType": "FIELD_ARGUMENT" + } + ] + }, + { + "typeName": "Mutation", + "fieldName": "singleUpload", + "argumentsConfiguration": [ + { + "name": "file", + "sourceType": "FIELD_ARGUMENT" + } + ] + }, + { + "typeName": "Mutation", + "fieldName": "singleUploadWithInput", + "argumentsConfiguration": [ + { + "name": "arg", + "sourceType": "FIELD_ARGUMENT" + } + ] + }, + { + "typeName": "Mutation", + "fieldName": "multipleUpload", + "argumentsConfiguration": [ + { + "name": "files", + "sourceType": "FIELD_ARGUMENT" + } + ] + }, + { + "typeName": "Mutation", + "fieldName": "addFact", + "argumentsConfiguration": [ + { + "name": "fact", + "sourceType": "FIELD_ARGUMENT" + } + ], + "authorizationConfiguration": { + "requiresAuthentication": true, + "requiredOrScopes": [ + { + "requiredAndScopes": [ + "write:fact" + ] + }, + { + "requiredAndScopes": [ + "write:all" + ] + } + ], + "requiredOrScopesByOr": [ + { + "requiredAndScopes": [ + "write:fact" + ] + }, + { + "requiredAndScopes": [ + "write:all" + ] + } + ] + } + }, + { + "typeName": "Mutation", + "fieldName": "updateAvailability", + "argumentsConfiguration": [ + { + "name": "employeeID", + "sourceType": "FIELD_ARGUMENT" + }, + { + "name": "isAvailable", + "sourceType": "FIELD_ARGUMENT" + } + ] + }, + { + "typeName": "Mutation", + "fieldName": "updateMood", + "argumentsConfiguration": [ + { + "name": "employeeID", + "sourceType": "FIELD_ARGUMENT" + }, + { + "name": "mood", + "sourceType": "FIELD_ARGUMENT" + } + ] + }, + { + "typeName": "Mutation", + "fieldName": "updateEmployeeMyKafka", + "argumentsConfiguration": [ + { + "name": "employeeID", + "sourceType": "FIELD_ARGUMENT" + }, + { + "name": "update", + "sourceType": "FIELD_ARGUMENT" + } + ] + }, + { + "typeName": "Mutation", + "fieldName": "updateEmployeeMyNats", + "argumentsConfiguration": [ + { + "name": "id", + "sourceType": "FIELD_ARGUMENT" + }, + { + "name": "update", + "sourceType": "FIELD_ARGUMENT" + } + ] + }, + { + "typeName": "Mutation", + "fieldName": "updateEmployeeMyRedis", + "argumentsConfiguration": [ + { + "name": "id", + "sourceType": "FIELD_ARGUMENT" + }, + { + "name": "update", + "sourceType": "FIELD_ARGUMENT" + } + ] + }, + { + "typeName": "Mutation", + "fieldName": "updateEmployeeMyRedisOnCustomChannel", + "argumentsConfiguration": [ + { + "name": "id", + "sourceType": "FIELD_ARGUMENT" + }, + { + "name": "update", + "sourceType": "FIELD_ARGUMENT" + } + ] + }, + { + "typeName": "Mutation", + "fieldName": "addProject", + "argumentsConfiguration": [ + { + "name": "project", + "sourceType": "FIELD_ARGUMENT" + } + ] + }, + { + "typeName": "Mutation", + "fieldName": "addMilestone", + "argumentsConfiguration": [ + { + "name": "milestone", + "sourceType": "FIELD_ARGUMENT" + } + ] + }, + { + "typeName": "Mutation", + "fieldName": "addTask", + "argumentsConfiguration": [ + { + "name": "task", + "sourceType": "FIELD_ARGUMENT" + } + ] + }, + { + "typeName": "Mutation", + "fieldName": "updateProjectStatus", + "argumentsConfiguration": [ + { + "name": "projectId", + "sourceType": "FIELD_ARGUMENT" + }, + { + "name": "status", + "sourceType": "FIELD_ARGUMENT" + } + ] + }, + { + "typeName": "Subscription", + "fieldName": "countEmp", + "argumentsConfiguration": [ + { + "name": "max", + "sourceType": "FIELD_ARGUMENT" + }, + { + "name": "intervalMilliseconds", + "sourceType": "FIELD_ARGUMENT" + } + ] + }, + { + "typeName": "Subscription", + "fieldName": "countEmp2", + "argumentsConfiguration": [ + { + "name": "max", + "sourceType": "FIELD_ARGUMENT" + }, + { + "name": "intervalMilliseconds", + "sourceType": "FIELD_ARGUMENT" + } + ] + }, + { + "typeName": "Subscription", + "fieldName": "countFor", + "argumentsConfiguration": [ + { + "name": "count", + "sourceType": "FIELD_ARGUMENT" + } + ] + }, + { + "typeName": "Subscription", + "fieldName": "countHob", + "argumentsConfiguration": [ + { + "name": "max", + "sourceType": "FIELD_ARGUMENT" + }, + { + "name": "intervalMilliseconds", + "sourceType": "FIELD_ARGUMENT" + } + ] + }, + { + "typeName": "Subscription", + "fieldName": "headerValue", + "argumentsConfiguration": [ + { + "name": "name", + "sourceType": "FIELD_ARGUMENT" + }, + { + "name": "repeat", + "sourceType": "FIELD_ARGUMENT" + } + ] + }, + { + "typeName": "Subscription", + "fieldName": "initPayloadValue", + "argumentsConfiguration": [ + { + "name": "key", + "sourceType": "FIELD_ARGUMENT" + }, + { + "name": "repeat", + "sourceType": "FIELD_ARGUMENT" + } + ] + }, + { + "typeName": "Subscription", + "fieldName": "initialPayload", + "argumentsConfiguration": [ + { + "name": "repeat", + "sourceType": "FIELD_ARGUMENT" + } + ] + }, + { + "typeName": "Subscription", + "fieldName": "employeeUpdated", + "argumentsConfiguration": [ + { + "name": "employeeID", + "sourceType": "FIELD_ARGUMENT" + } + ] + }, + { + "typeName": "Subscription", + "fieldName": "employeeUpdatedMyKafka", + "argumentsConfiguration": [ + { + "name": "employeeID", + "sourceType": "FIELD_ARGUMENT" + } + ] + }, + { + "typeName": "Subscription", + "fieldName": "employeeUpdatedMyNats", + "argumentsConfiguration": [ + { + "name": "id", + "sourceType": "FIELD_ARGUMENT" + } + ] + }, + { + "typeName": "Subscription", + "fieldName": "employeeUpdatedNatsStream", + "argumentsConfiguration": [ + { + "name": "id", + "sourceType": "FIELD_ARGUMENT" + } + ] + }, + { + "typeName": "Subscription", + "fieldName": "employeeUpdatedMyRedis", + "argumentsConfiguration": [ + { + "name": "id", + "sourceType": "FIELD_ARGUMENT" + } + ] + }, + { + "typeName": "Documentation", + "fieldName": "url", + "argumentsConfiguration": [ + { + "name": "product", + "sourceType": "FIELD_ARGUMENT" + } + ] + }, + { + "typeName": "Documentation", + "fieldName": "urls", + "argumentsConfiguration": [ + { + "name": "products", + "sourceType": "FIELD_ARGUMENT" + } + ] + }, + { + "typeName": "Employee", + "fieldName": "startDate", + "authorizationConfiguration": { + "requiresAuthentication": true, + "requiredOrScopes": [ + { + "requiredAndScopes": [ + "read:employee", + "read:private" + ] + }, + { + "requiredAndScopes": [ + "read:all" + ] + } + ], + "requiredOrScopesByOr": [ + { + "requiredAndScopes": [ + "read:employee", + "read:private" + ] + }, + { + "requiredAndScopes": [ + "read:all" + ] + } + ] + } + }, + { + "typeName": "Query", + "fieldName": "topSecretFederationFacts", + "authorizationConfiguration": { + "requiresAuthentication": true, + "requiredOrScopes": [ + { + "requiredAndScopes": [ + "read:fact" + ] + }, + { + "requiredAndScopes": [ + "read:all" + ] + } + ], + "requiredOrScopesByOr": [ + { + "requiredAndScopes": [ + "read:fact" + ] + }, + { + "requiredAndScopes": [ + "read:all" + ] + } + ] + } + }, + { + "typeName": "Query", + "fieldName": "secret", + "authorizationConfiguration": { + "requiresAuthentication": true, + "requiredOrScopes": [ + { + "requiredAndScopes": [ + "read:secret" + ] + } + ], + "requiredOrScopesByOr": [ + { + "requiredAndScopes": [ + "read:secret" + ] + } + ] + } + }, + { + "typeName": "Query", + "fieldName": "factTypes", + "authorizationConfiguration": { + "requiresAuthentication": true + } + }, + { + "typeName": "TopSecretFact", + "fieldName": "factType", + "authorizationConfiguration": { + "requiresAuthentication": true + } + }, + { + "typeName": "TopSecretFact", + "fieldName": "description", + "authorizationConfiguration": { + "requiresAuthentication": true, + "requiredOrScopes": [ + { + "requiredAndScopes": [ + "read:scalar" + ] + }, + { + "requiredAndScopes": [ + "read:all" + ] + } + ], + "requiredOrScopesByOr": [ + { + "requiredAndScopes": [ + "read:scalar" + ] + }, + { + "requiredAndScopes": [ + "read:all" + ] + } + ] + } + }, + { + "typeName": "DirectiveFact", + "fieldName": "factType", + "authorizationConfiguration": { + "requiresAuthentication": true + } + }, + { + "typeName": "DirectiveFact", + "fieldName": "description", + "authorizationConfiguration": { + "requiresAuthentication": true, + "requiredOrScopes": [ + { + "requiredAndScopes": [ + "read:scalar" + ] + }, + { + "requiredAndScopes": [ + "read:all" + ] + } + ], + "requiredOrScopesByOr": [ + { + "requiredAndScopes": [ + "read:scalar" + ] + }, + { + "requiredAndScopes": [ + "read:all" + ] + } + ] + } + }, + { + "typeName": "EntityFact", + "fieldName": "factType", + "authorizationConfiguration": { + "requiresAuthentication": true + } + }, + { + "typeName": "EntityFact", + "fieldName": "description", + "authorizationConfiguration": { + "requiresAuthentication": true, + "requiredOrScopes": [ + { + "requiredAndScopes": [ + "read:scalar" + ] + }, + { + "requiredAndScopes": [ + "read:all" + ] + } + ], + "requiredOrScopesByOr": [ + { + "requiredAndScopes": [ + "read:scalar" + ] + }, + { + "requiredAndScopes": [ + "read:all" + ] + } + ] + } + }, + { + "typeName": "MiscellaneousFact", + "fieldName": "description", + "authorizationConfiguration": { + "requiresAuthentication": true, + "requiredOrScopes": [ + { + "requiredAndScopes": [ + "read:scalar", + "read:miscellaneous" + ] + }, + { + "requiredAndScopes": [ + "read:all", + "read:miscellaneous" + ] + } + ], + "requiredOrScopesByOr": [ + { + "requiredAndScopes": [ + "read:scalar", + "read:miscellaneous" + ] + }, + { + "requiredAndScopes": [ + "read:all", + "read:miscellaneous" + ] + } + ] + } + }, + { + "typeName": "MiscellaneousFact", + "fieldName": "factType", + "authorizationConfiguration": { + "requiresAuthentication": true + } + } + ], + "graphqlSchema": "schema {\n query: Query\n mutation: Mutation\n subscription: Subscription\n}\n\ndirective @authenticated on ENUM | FIELD_DEFINITION | INTERFACE | OBJECT | SCALAR\n\ndirective @inaccessible on ARGUMENT_DEFINITION | ENUM | ENUM_VALUE | FIELD_DEFINITION | INPUT_FIELD_DEFINITION | INPUT_OBJECT | INTERFACE | OBJECT | SCALAR | UNION\n\ndirective @requiresScopes(scopes: [[openfed__Scope!]!]!) on ENUM | FIELD_DEFINITION | INTERFACE | OBJECT | SCALAR\n\ndirective @tag(name: String!) repeatable on ARGUMENT_DEFINITION | ENUM | ENUM_VALUE | FIELD_DEFINITION | INPUT_FIELD_DEFINITION | INPUT_OBJECT | INTERFACE | OBJECT | SCALAR | UNION\n\nscalar openfed__Scope\n\ntype Query {\n employee(id: Int!): Employee\n employeeAsList(id: Int!): [Employee]\n employees: [Employee]\n products: [Products!]!\n teammates(team: Department!): [Employee!]!\n firstEmployee: Employee! @tag(name: \"internal\")\n \"\"\" This is a GraphQL query that retrieves a list of employees.\"\"\"\n findEmployees(criteria: SearchInput): [Employee!]!\n productTypes: [Products!]!\n topSecretFederationFacts: [TopSecretFact!]! @requiresScopes(scopes: [[\"read:fact\"], [\"read:all\"]])\n factTypes: [TopSecretFactType!]\n sharedThings(numOfA: Int!, numOfB: Int!): [Thing!]!\n shippings: [Shipping!]!\n findShipping(id: ID!, trackingNumber: ID!): Shipping!\n \"\"\"Returns the value of the received HTTP header.\"\"\"\n headerValue(name: String!): String!\n \"\"\"Returns the value of the given key in the WS initial payload.\"\"\"\n initPayloadValue(key: String!): String!\n initialPayload: Map\n \"\"\"Returns response after the given delay\"\"\"\n delay(response: String!, ms: Int!): String!\n bigResponse(artificialDelay: Int! = 0, bigObjects: Int! = 100, nestedObjects: Int! = 100, deeplyNestedObjects: Int! = 100): [BigObject!]!\n longResponse(artificialDelay: Int! = 0, bytes: Int!): String\n bigAbstractResponse: BigAbstractResponse\n rootFieldWithListArg(arg: [String!]!): [String!]!\n rootFieldWithNestedListArg(arg: [[String!]!]!): [[String!]!]!\n rootFieldWithListOfInputArg(arg: [InputType!]!): [InputResponse!]!\n rootFieldWithListOfEnumArg(arg: [EnumType!]!): [EnumType!]!\n rootFieldWithInput(arg: InputArg!): String!\n floatField(arg: Float): Float\n secret: Secret @requiresScopes(scopes: [[\"read:secret\"]])\n employeeFromEvent(id: Int!): Employee!\n employeeFromEventMyNats(employeeID: Int!): Employee!\n projects: [Project!]!\n project(id: ID!): Project\n projectStatuses: [ProjectStatus!]!\n projectsByStatus(status: ProjectStatus!): [Project!]!\n projectResources(projectId: ID!): [ProjectResource!]!\n searchProjects(query: String!): [ProjectSearchResult!]!\n milestones(projectId: ID!): [Milestone!]!\n tasks(projectId: ID!): [Task!]!\n projectActivities(projectId: ID!): [ProjectActivity!]!\n projectTags: [String!]\n archivedProjects: [Project!]!\n tasksByPriority(projectId: ID!): [[Task!]]\n resourceMatrix(projectId: ID!): [[ProjectResource!]!]!\n killService: Boolean!\n panic: Boolean!\n}\n\nscalar Upload\n\ntype Mutation {\n updateEmployeeTag(id: Int!, tag: String!): Employee\n singleUpload(file: Upload!): Boolean!\n singleUploadWithInput(arg: FileUpload!): Boolean!\n multipleUpload(files: [Upload!]!): Boolean!\n addFact(fact: TopSecretFactInput!): TopSecretFact! @requiresScopes(scopes: [[\"write:fact\"], [\"write:all\"]])\n \"\"\" This mutation updates the availability status of an employee in the system.\n \"\"\"\n updateAvailability(employeeID: Int!, isAvailable: Boolean!): Employee!\n \"\"\" This mutation update the mood of an employee. \"\"\"\n updateMood(employeeID: Int!, mood: Mood!): Employee!\n updateEmployeeMyKafka(employeeID: Int!, update: UpdateEmployeeInput!): edfs__PublishResult!\n updateEmployeeMyNats(id: Int!, update: UpdateEmployeeInput!): edfs__PublishResult!\n updateEmployeeMyRedis(id: Int!, update: UpdateEmployeeInput!): edfs__PublishResult!\n updateEmployeeMyRedisOnCustomChannel(id: Int!, update: UpdateEmployeeInput!): edfs__PublishResult!\n addProject(project: ProjectInput!): Project!\n addMilestone(milestone: MilestoneInput!): Milestone!\n addTask(task: TaskInput!): Task!\n updateProjectStatus(projectId: ID!, status: ProjectStatus!): ProjectUpdate!\n}\n\ninput FileUpload {\n nested: DeeplyNestedFileUpload\n nestedList: [Upload!]\n}\n\ninput DeeplyNestedFileUpload {\n file: Upload!\n}\n\ntype Subscription {\n \"\"\"`currentTime` will return a stream of `Time` objects.\"\"\"\n currentTime: Time!\n countEmp(max: Int!, intervalMilliseconds: Int!): Int!\n countEmp2(max: Int!, intervalMilliseconds: Int!): Int!\n countFor(count: Int!): Int!\n countHob(max: Int!, intervalMilliseconds: Int!): Int!\n \"\"\"Returns a stream with the value of the received HTTP header.\"\"\"\n headerValue(name: String!, repeat: Int): TimestampedString!\n \"\"\"\n Returns a stream with the value of value of the given key in the WS initial payload.\n \"\"\"\n initPayloadValue(key: String!, repeat: Int): TimestampedString!\n \"\"\"Returns a stream with the value of the WS initial payload.\"\"\"\n initialPayload(repeat: Int): Map\n returnsError: String\n employeeUpdated(employeeID: Int!): Employee!\n employeeUpdatedMyKafka(employeeID: Int!): Employee!\n employeeUpdatedMyNats(id: Int!): Employee!\n employeeUpdatedNatsStream(id: Int!): Employee!\n employeeUpdatedMyRedis(id: Int!): Employee!\n employeeUpdates: Employee!\n filteredEmployeeUpdated(id: Int!): Employee!\n filteredEmployeeUpdatedMyKafka(employeeID: ID!): Employee!\n filteredEmployeeUpdatedMyKafkaWithListFieldArguments(firstIds: [ID!]!, secondIds: [ID!]!): Employee!\n filteredEmployeeUpdatedMyKafkaWithNestedListFieldArgument(input: KafkaInput!): Employee!\n filteredEmployeeUpdatedMyRedis(ids: [ID!]!): Employee!\n}\n\nenum Department {\n ENGINEERING\n MARKETING\n OPERATIONS\n}\n\ninterface RoleType {\n departments: [Department!]!\n title: [String!]!\n employees: [Employee!]!\n}\n\nenum EngineerType {\n BACKEND\n FRONTEND\n FULLSTACK\n}\n\ninterface Identifiable {\n id: Int!\n}\n\nenum OperationType {\n FINANCE\n HUMAN_RESOURCES\n}\n\ntype Details {\n forename: String!\n location: Country!\n surname: String!\n pastLocations: [City!]!\n middlename: String @deprecated(reason: \"No longer supported\")\n hasChildren: Boolean!\n maritalStatus: MaritalStatus\n nationality: Nationality!\n pets: [Pet]\n}\n\ntype City {\n type: String!\n name: String!\n country: Country\n}\n\ntype Country {\n key: CountryKey!\n language: String\n}\n\ntype CountryKey {\n name: String!\n}\n\nenum Mood {\n HAPPY\n SAD\n APATHETIC @inaccessible\n}\n\ntype ErrorWrapper {\n okField: String\n errorField: String\n}\n\ntype Time {\n unixTime: Int!\n timeStamp: String!\n}\n\nunion Products = Consultancy | Cosmo | SDK | Documentation\n\ninterface IProduct {\n upc: ID!\n engineers: [Employee!]!\n}\n\ntype Consultancy {\n upc: ID!\n lead: Employee!\n isLeadAvailable: Boolean\n name: ProductName!\n}\n\nenum Class {\n FISH\n MAMMAL\n REPTILE\n}\n\nenum Gender {\n FEMALE\n MALE\n UNKNOWN\n}\n\ninterface Animal {\n class: Class!\n gender: Gender!\n}\n\nenum CatType {\n HOME\n STREET\n}\n\nenum DogBreed {\n GOLDEN_RETRIEVER\n POODLE\n ROTTWEILER\n YORKSHIRE_TERRIER\n}\n\nenum MaritalStatus {\n ENGAGED\n MARRIED\n}\n\nenum Nationality {\n AMERICAN\n DUTCH\n ENGLISH\n GERMAN\n INDIAN\n SPANISH\n UKRAINIAN\n}\n\n\"\"\" Allows to filter employees by their details. \"\"\"\ninput SearchInput {\n hasPets: Boolean\n nationality: Nationality\n nested: NestedSearchInput\n}\n\ninput NestedSearchInput {\n maritalStatus: MaritalStatus\n hasChildren: Boolean\n}\n\nenum ExerciseType {\n CALISTHENICS\n HIKING\n SPORT\n STRENGTH_TRAINING\n}\n\ninterface Experience {\n yearsOfExperience: Float!\n}\n\nenum GameGenre {\n ADVENTURE\n BOARD\n FPS\n CARD\n RPG\n ROGUELITE\n SIMULATION\n STRATEGY\n}\n\nenum ProgrammingLanguage {\n CSHARP\n GO\n RUST\n TYPESCRIPT\n}\n\ninterface Hobby {\n employees: [Employee!]!\n}\n\ntype Thing {\n a: String!\n b: String!\n}\n\ninput TopSecretFactInput {\n title: String!\n description: FactContent!\n factType: TopSecretFactType!\n}\n\nenum TopSecretFactType @authenticated {\n DIRECTIVE\n ENTITY\n MISCELLANEOUS\n}\n\ninterface TopSecretFact @authenticated {\n description: FactContent!\n factType: TopSecretFactType\n}\n\nscalar FactContent @requiresScopes(scopes: [[\"read:scalar\"], [\"read:all\"]])\n\nenum ProductName {\n CONSULTANCY\n COSMO\n ENGINE\n FINANCE\n HUMAN_RESOURCES\n MARKETING\n SDK\n}\n\ntype Documentation {\n url(product: ProductName!): String!\n urls(products: [ProductName!]!): [String!]!\n}\n\ntype Shipping {\n id: ID!\n carrier: String!\n trackingNumber: String!\n weight: Float!\n estimate: Float!\n}\n\ntype Secret {\n value: String\n}\n\ninput InputArg {\n enums: [EnumType!]\n enum: EnumType\n string: String\n strings: [String!]\n}\n\nenum EnumType {\n A\n B\n C\n}\n\ninput InputType {\n arg: String!\n}\n\ntype InputResponse {\n arg: String!\n}\n\nscalar Map\n\ntype TimestampedString {\n \"\"\"The value of the string.\"\"\"\n value: String!\n \"\"\"The timestamp when the response was generated.\"\"\"\n unixTime: Int!\n \"\"\"Sequence number\"\"\"\n seq: Int!\n \"\"\"Total number of responses to be sent\"\"\"\n total: Int!\n initialPayload: Map\n}\n\ntype BigObject {\n nestedObjects: [NestedObject!]!\n}\n\ntype NestedObject {\n deeplyNestedObjects: [DeeplyNestedObject!]!\n}\n\ntype DeeplyNestedObject {\n aFieldOnDeeplyNestedObject: String!\n bFieldOnDeeplyNestedObject: Int!\n cFieldOnDeeplyNestedObject: Boolean!\n dFieldOnDeeplyNestedObject: Float!\n eFieldOnDeeplyNestedObject: String!\n fFieldOnDeeplyNestedObject: Int!\n gFieldOnDeeplyNestedObject: Boolean!\n hFieldOnDeeplyNestedObject: Float!\n iFieldOnDeeplyNestedObject: String!\n jFieldOnDeeplyNestedObject: Int!\n kFieldOnDeeplyNestedObject: Boolean!\n lFieldOnDeeplyNestedObject: Float!\n mFieldOnDeeplyNestedObject: String!\n nFieldOnDeeplyNestedObject: Int!\n oFieldOnDeeplyNestedObject: Boolean!\n pFieldOnDeeplyNestedObject: Float!\n qFieldOnDeeplyNestedObject: String!\n rFieldOnDeeplyNestedObject: Int!\n sFieldOnDeeplyNestedObject: Boolean!\n tFieldOnDeeplyNestedObject: Float!\n uFieldOnDeeplyNestedObject: String!\n vFieldOnDeeplyNestedObject: Int!\n wFieldOnDeeplyNestedObject: Boolean!\n xFieldOnDeeplyNestedObject: Float!\n yFieldOnDeeplyNestedObject: String!\n zFieldOnDeeplyNestedObject: Int!\n}\n\nunion BigAbstractResponse = ABigObject | BBigObject | CBigObject | DBigObject | EBigObject | FBigObject | GBigObject | HBigObject | IBigObject | JBigObject | KBigObject | LBigObject | MBigObject | NBigObject | OBigObject | PBigObject | QBigObject | RBigObject | SBigObject | TBigObject | UBigObject | VBigObject | WBigObject | XBigObject | YBigObject | ZBigObject\n\ntype ABigObject {\n aFieldOnABigObject: String!\n bFieldOnABigObject: Int!\n cFieldOnABigObject: Boolean!\n dFieldOnABigObject: Float!\n eFieldOnABigObject: String!\n fFieldOnABigObject: Int!\n gFieldOnABigObject: Boolean!\n hFieldOnABigObject: Float!\n iFieldOnABigObject: String!\n jFieldOnABigObject: Int!\n kFieldOnABigObject: Boolean!\n lFieldOnABigObject: Float!\n mFieldOnABigObject: String!\n nFieldOnABigObject: Int!\n oFieldOnABigObject: Boolean!\n pFieldOnABigObject: Float!\n qFieldOnABigObject: String!\n rFieldOnABigObject: Int!\n sFieldOnABigObject: Boolean!\n tFieldOnABigObject: Float!\n uFieldOnABigObject: String!\n vFieldOnABigObject: Int!\n wFieldOnABigObject: Boolean!\n xFieldOnABigObject: Float!\n yFieldOnABigObject: String!\n zFieldOnABigObject: Int!\n}\n\ntype BBigObject {\n aFieldOnBBigObject: String!\n bFieldOnBBigObject: Int!\n cFieldOnBBigObject: Boolean!\n dFieldOnBBigObject: Float!\n eFieldOnBBigObject: String!\n fFieldOnBBigObject: Int!\n gFieldOnBBigObject: Boolean!\n hFieldOnBBigObject: Float!\n iFieldOnBBigObject: String!\n jFieldOnBBigObject: Int!\n kFieldOnBBigObject: Boolean!\n lFieldOnBBigObject: Float!\n mFieldOnBBigObject: String!\n nFieldOnBBigObject: Int!\n oFieldOnBBigObject: Boolean!\n pFieldOnBBigObject: Float!\n qFieldOnBBigObject: String!\n rFieldOnBBigObject: Int!\n sFieldOnBBigObject: Boolean!\n tFieldOnBBigObject: Float!\n uFieldOnBBigObject: String!\n vFieldOnBBigObject: Int!\n wFieldOnBBigObject: Boolean!\n xFieldOnBBigObject: Float!\n yFieldOnBBigObject: String!\n zFieldOnBBigObject: Int!\n}\n\ntype CBigObject {\n aFieldOnCBigObject: String!\n bFieldOnCBigObject: Int!\n cFieldOnCBigObject: Boolean!\n dFieldOnCBigObject: Float!\n eFieldOnCBigObject: String!\n fFieldOnCBigObject: Int!\n gFieldOnCBigObject: Boolean!\n hFieldOnCBigObject: Float!\n iFieldOnCBigObject: String!\n jFieldOnCBigObject: Int!\n kFieldOnCBigObject: Boolean!\n lFieldOnCBigObject: Float!\n mFieldOnCBigObject: String!\n nFieldOnCBigObject: Int!\n oFieldOnCBigObject: Boolean!\n pFieldOnCBigObject: Float!\n qFieldOnCBigObject: String!\n rFieldOnCBigObject: Int!\n sFieldOnCBigObject: Boolean!\n tFieldOnCBigObject: Float!\n uFieldOnCBigObject: String!\n vFieldOnCBigObject: Int!\n wFieldOnCBigObject: Boolean!\n xFieldOnCBigObject: Float!\n yFieldOnCBigObject: String!\n zFieldOnCBigObject: Int!\n}\n\ntype DBigObject {\n aFieldOnDBigObject: String!\n bFieldOnDBigObject: Int!\n cFieldOnDBigObject: Boolean!\n dFieldOnDBigObject: Float!\n eFieldOnDBigObject: String!\n fFieldOnDBigObject: Int!\n gFieldOnDBigObject: Boolean!\n hFieldOnDBigObject: Float!\n iFieldOnDBigObject: String!\n jFieldOnDBigObject: Int!\n kFieldOnDBigObject: Boolean!\n lFieldOnDBigObject: Float!\n mFieldOnDBigObject: String!\n nFieldOnDBigObject: Int!\n oFieldOnDBigObject: Boolean!\n pFieldOnDBigObject: Float!\n qFieldOnDBigObject: String!\n rFieldOnDBigObject: Int!\n sFieldOnDBigObject: Boolean!\n tFieldOnDBigObject: Float!\n uFieldOnDBigObject: String!\n vFieldOnDBigObject: Int!\n wFieldOnDBigObject: Boolean!\n xFieldOnDBigObject: Float!\n yFieldOnDBigObject: String!\n zFieldOnDBigObject: Int!\n}\n\ntype EBigObject {\n aFieldOnEBigObject: String!\n bFieldOnEBigObject: Int!\n cFieldOnEBigObject: Boolean!\n dFieldOnEBigObject: Float!\n eFieldOnEBigObject: String!\n fFieldOnEBigObject: Int!\n gFieldOnEBigObject: Boolean!\n hFieldOnEBigObject: Float!\n iFieldOnEBigObject: String!\n jFieldOnEBigObject: Int!\n kFieldOnEBigObject: Boolean!\n lFieldOnEBigObject: Float!\n mFieldOnEBigObject: String!\n nFieldOnEBigObject: Int!\n oFieldOnEBigObject: Boolean!\n pFieldOnEBigObject: Float!\n qFieldOnEBigObject: String!\n rFieldOnEBigObject: Int!\n sFieldOnEBigObject: Boolean!\n tFieldOnEBigObject: Float!\n uFieldOnEBigObject: String!\n vFieldOnEBigObject: Int!\n wFieldOnEBigObject: Boolean!\n xFieldOnEBigObject: Float!\n yFieldOnEBigObject: String!\n zFieldOnEBigObject: Int!\n}\n\ntype FBigObject {\n aFieldOnFBigObject: String!\n bFieldOnFBigObject: Int!\n cFieldOnFBigObject: Boolean!\n dFieldOnFBigObject: Float!\n eFieldOnFBigObject: String!\n fFieldOnFBigObject: Int!\n gFieldOnFBigObject: Boolean!\n hFieldOnFBigObject: Float!\n iFieldOnFBigObject: String!\n jFieldOnFBigObject: Int!\n kFieldOnFBigObject: Boolean!\n lFieldOnFBigObject: Float!\n mFieldOnFBigObject: String!\n nFieldOnFBigObject: Int!\n oFieldOnFBigObject: Boolean!\n pFieldOnFBigObject: Float!\n qFieldOnFBigObject: String!\n rFieldOnFBigObject: Int!\n sFieldOnFBigObject: Boolean!\n tFieldOnFBigObject: Float!\n uFieldOnFBigObject: String!\n vFieldOnFBigObject: Int!\n wFieldOnFBigObject: Boolean!\n xFieldOnFBigObject: Float!\n yFieldOnFBigObject: String!\n zFieldOnFBigObject: Int!\n}\n\ntype GBigObject {\n aFieldOnGBigObject: String!\n bFieldOnGBigObject: Int!\n cFieldOnGBigObject: Boolean!\n dFieldOnGBigObject: Float!\n eFieldOnGBigObject: String!\n fFieldOnGBigObject: Int!\n gFieldOnGBigObject: Boolean!\n hFieldOnGBigObject: Float!\n iFieldOnGBigObject: String!\n jFieldOnGBigObject: Int!\n kFieldOnGBigObject: Boolean!\n lFieldOnGBigObject: Float!\n mFieldOnGBigObject: String!\n nFieldOnGBigObject: Int!\n oFieldOnGBigObject: Boolean!\n pFieldOnGBigObject: Float!\n qFieldOnGBigObject: String!\n rFieldOnGBigObject: Int!\n sFieldOnGBigObject: Boolean!\n tFieldOnGBigObject: Float!\n uFieldOnGBigObject: String!\n vFieldOnGBigObject: Int!\n wFieldOnGBigObject: Boolean!\n xFieldOnGBigObject: Float!\n yFieldOnGBigObject: String!\n zFieldOnGBigObject: Int!\n}\n\ntype HBigObject {\n aFieldOnHBigObject: String!\n bFieldOnHBigObject: Int!\n cFieldOnHBigObject: Boolean!\n dFieldOnHBigObject: Float!\n eFieldOnHBigObject: String!\n fFieldOnHBigObject: Int!\n gFieldOnHBigObject: Boolean!\n hFieldOnHBigObject: Float!\n iFieldOnHBigObject: String!\n jFieldOnHBigObject: Int!\n kFieldOnHBigObject: Boolean!\n lFieldOnHBigObject: Float!\n mFieldOnHBigObject: String!\n nFieldOnHBigObject: Int!\n oFieldOnHBigObject: Boolean!\n pFieldOnHBigObject: Float!\n qFieldOnHBigObject: String!\n rFieldOnHBigObject: Int!\n sFieldOnHBigObject: Boolean!\n tFieldOnHBigObject: Float!\n uFieldOnHBigObject: String!\n vFieldOnHBigObject: Int!\n wFieldOnHBigObject: Boolean!\n xFieldOnHBigObject: Float!\n yFieldOnHBigObject: String!\n zFieldOnHBigObject: Int!\n}\n\ntype IBigObject {\n aFieldOnIBigObject: String!\n bFieldOnIBigObject: Int!\n cFieldOnIBigObject: Boolean!\n dFieldOnIBigObject: Float!\n eFieldOnIBigObject: String!\n fFieldOnIBigObject: Int!\n gFieldOnIBigObject: Boolean!\n hFieldOnIBigObject: Float!\n iFieldOnIBigObject: String!\n jFieldOnIBigObject: Int!\n kFieldOnIBigObject: Boolean!\n lFieldOnIBigObject: Float!\n mFieldOnIBigObject: String!\n nFieldOnIBigObject: Int!\n oFieldOnIBigObject: Boolean!\n pFieldOnIBigObject: Float!\n qFieldOnIBigObject: String!\n rFieldOnIBigObject: Int!\n sFieldOnIBigObject: Boolean!\n tFieldOnIBigObject: Float!\n uFieldOnIBigObject: String!\n vFieldOnIBigObject: Int!\n wFieldOnIBigObject: Boolean!\n xFieldOnIBigObject: Float!\n yFieldOnIBigObject: String!\n zFieldOnIBigObject: Int!\n}\n\ntype JBigObject {\n aFieldOnJBigObject: String!\n bFieldOnJBigObject: Int!\n cFieldOnJBigObject: Boolean!\n dFieldOnJBigObject: Float!\n eFieldOnJBigObject: String!\n fFieldOnJBigObject: Int!\n gFieldOnJBigObject: Boolean!\n hFieldOnJBigObject: Float!\n iFieldOnJBigObject: String!\n jFieldOnJBigObject: Int!\n kFieldOnJBigObject: Boolean!\n lFieldOnJBigObject: Float!\n mFieldOnJBigObject: String!\n nFieldOnJBigObject: Int!\n oFieldOnJBigObject: Boolean!\n pFieldOnJBigObject: Float!\n qFieldOnJBigObject: String!\n rFieldOnJBigObject: Int!\n sFieldOnJBigObject: Boolean!\n tFieldOnJBigObject: Float!\n uFieldOnJBigObject: String!\n vFieldOnJBigObject: Int!\n wFieldOnJBigObject: Boolean!\n xFieldOnJBigObject: Float!\n yFieldOnJBigObject: String!\n zFieldOnJBigObject: Int!\n}\n\ntype KBigObject {\n aFieldOnKBigObject: String!\n bFieldOnKBigObject: Int!\n cFieldOnKBigObject: Boolean!\n dFieldOnKBigObject: Float!\n eFieldOnKBigObject: String!\n fFieldOnKBigObject: Int!\n gFieldOnKBigObject: Boolean!\n hFieldOnKBigObject: Float!\n iFieldOnKBigObject: String!\n jFieldOnKBigObject: Int!\n kFieldOnKBigObject: Boolean!\n lFieldOnKBigObject: Float!\n mFieldOnKBigObject: String!\n nFieldOnKBigObject: Int!\n oFieldOnKBigObject: Boolean!\n pFieldOnKBigObject: Float!\n qFieldOnKBigObject: String!\n rFieldOnKBigObject: Int!\n sFieldOnKBigObject: Boolean!\n tFieldOnKBigObject: Float!\n uFieldOnKBigObject: String!\n vFieldOnKBigObject: Int!\n wFieldOnKBigObject: Boolean!\n xFieldOnKBigObject: Float!\n yFieldOnKBigObject: String!\n zFieldOnKBigObject: Int!\n}\n\ntype LBigObject {\n aFieldOnLBigObject: String!\n bFieldOnLBigObject: Int!\n cFieldOnLBigObject: Boolean!\n dFieldOnLBigObject: Float!\n eFieldOnLBigObject: String!\n fFieldOnLBigObject: Int!\n gFieldOnLBigObject: Boolean!\n hFieldOnLBigObject: Float!\n iFieldOnLBigObject: String!\n jFieldOnLBigObject: Int!\n kFieldOnLBigObject: Boolean!\n lFieldOnLBigObject: Float!\n mFieldOnLBigObject: String!\n nFieldOnLBigObject: Int!\n oFieldOnLBigObject: Boolean!\n pFieldOnLBigObject: Float!\n qFieldOnLBigObject: String!\n rFieldOnLBigObject: Int!\n sFieldOnLBigObject: Boolean!\n tFieldOnLBigObject: Float!\n uFieldOnLBigObject: String!\n vFieldOnLBigObject: Int!\n wFieldOnLBigObject: Boolean!\n xFieldOnLBigObject: Float!\n yFieldOnLBigObject: String!\n zFieldOnLBigObject: Int!\n}\n\ntype MBigObject {\n aFieldOnMBigObject: String!\n bFieldOnMBigObject: Int!\n cFieldOnMBigObject: Boolean!\n dFieldOnMBigObject: Float!\n eFieldOnMBigObject: String!\n fFieldOnMBigObject: Int!\n gFieldOnMBigObject: Boolean!\n hFieldOnMBigObject: Float!\n iFieldOnMBigObject: String!\n jFieldOnMBigObject: Int!\n kFieldOnMBigObject: Boolean!\n lFieldOnMBigObject: Float!\n mFieldOnMBigObject: String!\n nFieldOnMBigObject: Int!\n oFieldOnMBigObject: Boolean!\n pFieldOnMBigObject: Float!\n qFieldOnMBigObject: String!\n rFieldOnMBigObject: Int!\n sFieldOnMBigObject: Boolean!\n tFieldOnMBigObject: Float!\n uFieldOnMBigObject: String!\n vFieldOnMBigObject: Int!\n wFieldOnMBigObject: Boolean!\n xFieldOnMBigObject: Float!\n yFieldOnMBigObject: String!\n zFieldOnMBigObject: Int!\n}\n\ntype NBigObject {\n aFieldOnNBigObject: String!\n bFieldOnNBigObject: Int!\n cFieldOnNBigObject: Boolean!\n dFieldOnNBigObject: Float!\n eFieldOnNBigObject: String!\n fFieldOnNBigObject: Int!\n gFieldOnNBigObject: Boolean!\n hFieldOnNBigObject: Float!\n iFieldOnNBigObject: String!\n jFieldOnNBigObject: Int!\n kFieldOnNBigObject: Boolean!\n lFieldOnNBigObject: Float!\n mFieldOnNBigObject: String!\n nFieldOnNBigObject: Int!\n oFieldOnNBigObject: Boolean!\n pFieldOnNBigObject: Float!\n qFieldOnNBigObject: String!\n rFieldOnNBigObject: Int!\n sFieldOnNBigObject: Boolean!\n tFieldOnNBigObject: Float!\n uFieldOnNBigObject: String!\n vFieldOnNBigObject: Int!\n wFieldOnNBigObject: Boolean!\n xFieldOnNBigObject: Float!\n yFieldOnNBigObject: String!\n zFieldOnNBigObject: Int!\n}\n\ntype OBigObject {\n aFieldOnOBigObject: String!\n bFieldOnOBigObject: Int!\n cFieldOnOBigObject: Boolean!\n dFieldOnOBigObject: Float!\n eFieldOnOBigObject: String!\n fFieldOnOBigObject: Int!\n gFieldOnOBigObject: Boolean!\n hFieldOnOBigObject: Float!\n iFieldOnOBigObject: String!\n jFieldOnOBigObject: Int!\n kFieldOnOBigObject: Boolean!\n lFieldOnOBigObject: Float!\n mFieldOnOBigObject: String!\n nFieldOnOBigObject: Int!\n oFieldOnOBigObject: Boolean!\n pFieldOnOBigObject: Float!\n qFieldOnOBigObject: String!\n rFieldOnOBigObject: Int!\n sFieldOnOBigObject: Boolean!\n tFieldOnOBigObject: Float!\n uFieldOnOBigObject: String!\n vFieldOnOBigObject: Int!\n wFieldOnOBigObject: Boolean!\n xFieldOnOBigObject: Float!\n yFieldOnOBigObject: String!\n zFieldOnOBigObject: Int!\n}\n\ntype PBigObject {\n aFieldOnPBigObject: String!\n bFieldOnPBigObject: Int!\n cFieldOnPBigObject: Boolean!\n dFieldOnPBigObject: Float!\n eFieldOnPBigObject: String!\n fFieldOnPBigObject: Int!\n gFieldOnPBigObject: Boolean!\n hFieldOnPBigObject: Float!\n iFieldOnPBigObject: String!\n jFieldOnPBigObject: Int!\n kFieldOnPBigObject: Boolean!\n lFieldOnPBigObject: Float!\n mFieldOnPBigObject: String!\n nFieldOnPBigObject: Int!\n oFieldOnPBigObject: Boolean!\n pFieldOnPBigObject: Float!\n qFieldOnPBigObject: String!\n rFieldOnPBigObject: Int!\n sFieldOnPBigObject: Boolean!\n tFieldOnPBigObject: Float!\n uFieldOnPBigObject: String!\n vFieldOnPBigObject: Int!\n wFieldOnPBigObject: Boolean!\n xFieldOnPBigObject: Float!\n yFieldOnPBigObject: String!\n zFieldOnPBigObject: Int!\n}\n\ntype QBigObject {\n aFieldOnQBigObject: String!\n bFieldOnQBigObject: Int!\n cFieldOnQBigObject: Boolean!\n dFieldOnQBigObject: Float!\n eFieldOnQBigObject: String!\n fFieldOnQBigObject: Int!\n gFieldOnQBigObject: Boolean!\n hFieldOnQBigObject: Float!\n iFieldOnQBigObject: String!\n jFieldOnQBigObject: Int!\n kFieldOnQBigObject: Boolean!\n lFieldOnQBigObject: Float!\n mFieldOnQBigObject: String!\n nFieldOnQBigObject: Int!\n oFieldOnQBigObject: Boolean!\n pFieldOnQBigObject: Float!\n qFieldOnQBigObject: String!\n rFieldOnQBigObject: Int!\n sFieldOnQBigObject: Boolean!\n tFieldOnQBigObject: Float!\n uFieldOnQBigObject: String!\n vFieldOnQBigObject: Int!\n wFieldOnQBigObject: Boolean!\n xFieldOnQBigObject: Float!\n yFieldOnQBigObject: String!\n zFieldOnQBigObject: Int!\n}\n\ntype RBigObject {\n aFieldOnRBigObject: String!\n bFieldOnRBigObject: Int!\n cFieldOnRBigObject: Boolean!\n dFieldOnRBigObject: Float!\n eFieldOnRBigObject: String!\n fFieldOnRBigObject: Int!\n gFieldOnRBigObject: Boolean!\n hFieldOnRBigObject: Float!\n iFieldOnRBigObject: String!\n jFieldOnRBigObject: Int!\n kFieldOnRBigObject: Boolean!\n lFieldOnRBigObject: Float!\n mFieldOnRBigObject: String!\n nFieldOnRBigObject: Int!\n oFieldOnRBigObject: Boolean!\n pFieldOnRBigObject: Float!\n qFieldOnRBigObject: String!\n rFieldOnRBigObject: Int!\n sFieldOnRBigObject: Boolean!\n tFieldOnRBigObject: Float!\n uFieldOnRBigObject: String!\n vFieldOnRBigObject: Int!\n wFieldOnRBigObject: Boolean!\n xFieldOnRBigObject: Float!\n yFieldOnRBigObject: String!\n zFieldOnRBigObject: Int!\n}\n\ntype SBigObject {\n aFieldOnSBigObject: String!\n bFieldOnSBigObject: Int!\n cFieldOnSBigObject: Boolean!\n dFieldOnSBigObject: Float!\n eFieldOnSBigObject: String!\n fFieldOnSBigObject: Int!\n gFieldOnSBigObject: Boolean!\n hFieldOnSBigObject: Float!\n iFieldOnSBigObject: String!\n jFieldOnSBigObject: Int!\n kFieldOnSBigObject: Boolean!\n lFieldOnSBigObject: Float!\n mFieldOnSBigObject: String!\n nFieldOnSBigObject: Int!\n oFieldOnSBigObject: Boolean!\n pFieldOnSBigObject: Float!\n qFieldOnSBigObject: String!\n rFieldOnSBigObject: Int!\n sFieldOnSBigObject: Boolean!\n tFieldOnSBigObject: Float!\n uFieldOnSBigObject: String!\n vFieldOnSBigObject: Int!\n wFieldOnSBigObject: Boolean!\n xFieldOnSBigObject: Float!\n yFieldOnSBigObject: String!\n zFieldOnSBigObject: Int!\n}\n\ntype TBigObject {\n aFieldOnTBigObject: String!\n bFieldOnTBigObject: Int!\n cFieldOnTBigObject: Boolean!\n dFieldOnTBigObject: Float!\n eFieldOnTBigObject: String!\n fFieldOnTBigObject: Int!\n gFieldOnTBigObject: Boolean!\n hFieldOnTBigObject: Float!\n iFieldOnTBigObject: String!\n jFieldOnTBigObject: Int!\n kFieldOnTBigObject: Boolean!\n lFieldOnTBigObject: Float!\n mFieldOnTBigObject: String!\n nFieldOnTBigObject: Int!\n oFieldOnTBigObject: Boolean!\n pFieldOnTBigObject: Float!\n qFieldOnTBigObject: String!\n rFieldOnTBigObject: Int!\n sFieldOnTBigObject: Boolean!\n tFieldOnTBigObject: Float!\n uFieldOnTBigObject: String!\n vFieldOnTBigObject: Int!\n wFieldOnTBigObject: Boolean!\n xFieldOnTBigObject: Float!\n yFieldOnTBigObject: String!\n zFieldOnTBigObject: Int!\n}\n\ntype UBigObject {\n aFieldOnUBigObject: String!\n bFieldOnUBigObject: Int!\n cFieldOnUBigObject: Boolean!\n dFieldOnUBigObject: Float!\n eFieldOnUBigObject: String!\n fFieldOnUBigObject: Int!\n gFieldOnUBigObject: Boolean!\n hFieldOnUBigObject: Float!\n iFieldOnUBigObject: String!\n jFieldOnUBigObject: Int!\n kFieldOnUBigObject: Boolean!\n lFieldOnUBigObject: Float!\n mFieldOnUBigObject: String!\n nFieldOnUBigObject: Int!\n oFieldOnUBigObject: Boolean!\n pFieldOnUBigObject: Float!\n qFieldOnUBigObject: String!\n rFieldOnUBigObject: Int!\n sFieldOnUBigObject: Boolean!\n tFieldOnUBigObject: Float!\n uFieldOnUBigObject: String!\n vFieldOnUBigObject: Int!\n wFieldOnUBigObject: Boolean!\n xFieldOnUBigObject: Float!\n yFieldOnUBigObject: String!\n zFieldOnUBigObject: Int!\n}\n\ntype VBigObject {\n aFieldOnVBigObject: String!\n bFieldOnVBigObject: Int!\n cFieldOnVBigObject: Boolean!\n dFieldOnVBigObject: Float!\n eFieldOnVBigObject: String!\n fFieldOnVBigObject: Int!\n gFieldOnVBigObject: Boolean!\n hFieldOnVBigObject: Float!\n iFieldOnVBigObject: String!\n jFieldOnVBigObject: Int!\n kFieldOnVBigObject: Boolean!\n lFieldOnVBigObject: Float!\n mFieldOnVBigObject: String!\n nFieldOnVBigObject: Int!\n oFieldOnVBigObject: Boolean!\n pFieldOnVBigObject: Float!\n qFieldOnVBigObject: String!\n rFieldOnVBigObject: Int!\n sFieldOnVBigObject: Boolean!\n tFieldOnVBigObject: Float!\n uFieldOnVBigObject: String!\n vFieldOnVBigObject: Int!\n wFieldOnVBigObject: Boolean!\n xFieldOnVBigObject: Float!\n yFieldOnVBigObject: String!\n zFieldOnVBigObject: Int!\n}\n\ntype WBigObject {\n aFieldOnWBigObject: String!\n bFieldOnWBigObject: Int!\n cFieldOnWBigObject: Boolean!\n dFieldOnWBigObject: Float!\n eFieldOnWBigObject: String!\n fFieldOnWBigObject: Int!\n gFieldOnWBigObject: Boolean!\n hFieldOnWBigObject: Float!\n iFieldOnWBigObject: String!\n jFieldOnWBigObject: Int!\n kFieldOnWBigObject: Boolean!\n lFieldOnWBigObject: Float!\n mFieldOnWBigObject: String!\n nFieldOnWBigObject: Int!\n oFieldOnWBigObject: Boolean!\n pFieldOnWBigObject: Float!\n qFieldOnWBigObject: String!\n rFieldOnWBigObject: Int!\n sFieldOnWBigObject: Boolean!\n tFieldOnWBigObject: Float!\n uFieldOnWBigObject: String!\n vFieldOnWBigObject: Int!\n wFieldOnWBigObject: Boolean!\n xFieldOnWBigObject: Float!\n yFieldOnWBigObject: String!\n zFieldOnWBigObject: Int!\n}\n\ntype XBigObject {\n aFieldOnXBigObject: String!\n bFieldOnXBigObject: Int!\n cFieldOnXBigObject: Boolean!\n dFieldOnXBigObject: Float!\n eFieldOnXBigObject: String!\n fFieldOnXBigObject: Int!\n gFieldOnXBigObject: Boolean!\n hFieldOnXBigObject: Float!\n iFieldOnXBigObject: String!\n jFieldOnXBigObject: Int!\n kFieldOnXBigObject: Boolean!\n lFieldOnXBigObject: Float!\n mFieldOnXBigObject: String!\n nFieldOnXBigObject: Int!\n oFieldOnXBigObject: Boolean!\n pFieldOnXBigObject: Float!\n qFieldOnXBigObject: String!\n rFieldOnXBigObject: Int!\n sFieldOnXBigObject: Boolean!\n tFieldOnXBigObject: Float!\n uFieldOnXBigObject: String!\n vFieldOnXBigObject: Int!\n wFieldOnXBigObject: Boolean!\n xFieldOnXBigObject: Float!\n yFieldOnXBigObject: String!\n zFieldOnXBigObject: Int!\n}\n\ntype YBigObject {\n aFieldOnYBigObject: String!\n bFieldOnYBigObject: Int!\n cFieldOnYBigObject: Boolean!\n dFieldOnYBigObject: Float!\n eFieldOnYBigObject: String!\n fFieldOnYBigObject: Int!\n gFieldOnYBigObject: Boolean!\n hFieldOnYBigObject: Float!\n iFieldOnYBigObject: String!\n jFieldOnYBigObject: Int!\n kFieldOnYBigObject: Boolean!\n lFieldOnYBigObject: Float!\n mFieldOnYBigObject: String!\n nFieldOnYBigObject: Int!\n oFieldOnYBigObject: Boolean!\n pFieldOnYBigObject: Float!\n qFieldOnYBigObject: String!\n rFieldOnYBigObject: Int!\n sFieldOnYBigObject: Boolean!\n tFieldOnYBigObject: Float!\n uFieldOnYBigObject: String!\n vFieldOnYBigObject: Int!\n wFieldOnYBigObject: Boolean!\n xFieldOnYBigObject: Float!\n yFieldOnYBigObject: String!\n zFieldOnYBigObject: Int!\n}\n\ntype ZBigObject {\n aFieldOnZBigObject: String!\n bFieldOnZBigObject: Int!\n cFieldOnZBigObject: Boolean!\n dFieldOnZBigObject: Float!\n eFieldOnZBigObject: String!\n fFieldOnZBigObject: Int!\n gFieldOnZBigObject: Boolean!\n hFieldOnZBigObject: Float!\n iFieldOnZBigObject: String!\n jFieldOnZBigObject: Int!\n kFieldOnZBigObject: Boolean!\n lFieldOnZBigObject: Float!\n mFieldOnZBigObject: String!\n nFieldOnZBigObject: Int!\n oFieldOnZBigObject: Boolean!\n pFieldOnZBigObject: Float!\n qFieldOnZBigObject: String!\n rFieldOnZBigObject: Int!\n sFieldOnZBigObject: Boolean!\n tFieldOnZBigObject: Float!\n uFieldOnZBigObject: String!\n vFieldOnZBigObject: Int!\n wFieldOnZBigObject: Boolean!\n xFieldOnZBigObject: Float!\n yFieldOnZBigObject: String!\n zFieldOnZBigObject: Int!\n}\n\nscalar openfed__SubscriptionFilterValue\n\ninput openfed__SubscriptionFieldCondition {\n fieldPath: String!\n values: [openfed__SubscriptionFilterValue]!\n}\n\ninput openfed__SubscriptionFilterCondition {\n AND: [openfed__SubscriptionFilterCondition!]\n IN: openfed__SubscriptionFieldCondition\n NOT: openfed__SubscriptionFilterCondition\n OR: [openfed__SubscriptionFilterCondition!]\n}\n\ninput UpdateEmployeeInput {\n name: String\n email: String\n}\n\ninput KafkaInput {\n ids: [Int!]!\n}\n\ntype edfs__PublishResult {\n success: Boolean!\n}\n\ninput ProjectInput {\n name: String!\n description: String\n startDate: String\n endDate: String\n status: ProjectStatus!\n}\n\ninput MilestoneInput {\n projectId: ID!\n name: String!\n description: String\n dueDate: String\n status: MilestoneStatus!\n}\n\ninput TaskInput {\n projectId: ID!\n assigneeId: Int\n name: String!\n description: String\n priority: TaskPriority!\n status: TaskStatus!\n estimatedHours: Float\n}\n\ninterface Node {\n id: ID!\n}\n\ninterface Timestamped {\n startDate: String\n endDate: String\n}\n\ninterface Assignable {\n assigneeId: Int\n}\n\nenum ProjectStatus {\n PLANNING\n ACTIVE\n COMPLETED\n ON_HOLD\n}\n\nenum MilestoneStatus {\n PENDING\n IN_PROGRESS\n COMPLETED\n DELAYED\n}\n\nenum TaskStatus {\n TODO\n IN_PROGRESS\n REVIEW\n COMPLETED\n BLOCKED\n}\n\nenum TaskPriority {\n LOW\n MEDIUM\n HIGH\n URGENT\n}\n\nenum ProjectUpdateType {\n STATUS_CHANGE\n MILESTONE_ADDED\n TASK_ASSIGNED\n PROGRESS_UPDATE\n TEAM_CHANGE\n}\n\nunion ProjectResource = Employee | Product | Milestone | Task\n\nunion ProjectSearchResult = Project | Milestone | Task\n\nunion ProjectActivity = ProjectUpdate | Milestone | Task\n\ntype Product {\n id: ID!\n upc: String!\n projects: [Project!]\n featureMatrix: [[String!]]\n}\n\ntype Engineer implements RoleType {\n departments: [Department!]!\n title: [String!]!\n employees: [Employee!]!\n engineerType: EngineerType!\n}\n\ntype Marketer implements RoleType {\n departments: [Department!]!\n title: [String!]!\n employees: [Employee!]!\n}\n\ntype Operator implements RoleType {\n departments: [Department!]!\n title: [String!]!\n employees: [Employee!]!\n operatorType: [OperationType!]!\n}\n\ntype Employee implements Identifiable {\n details: Details\n id: Int!\n tag: String!\n role: RoleType!\n notes: String\n updatedAt: String!\n startDate: String! @requiresScopes(scopes: [[\"read:employee\", \"read:private\"], [\"read:all\"]])\n currentMood: Mood!\n derivedMood: Mood!\n isAvailable: Boolean!\n rootFieldThrowsError: String\n rootFieldErrorWrapper: ErrorWrapper\n hobbies: [Hobby!]\n products: [ProductName!]!\n fieldThrowsError: String\n projects: [Project!]\n assignedTasks: [Task!]!\n completedTasks: [Task!]!\n skills: [String!]\n certifications: [String!]\n projectHistory: [[Project!]]!\n}\n\ntype Cosmo implements IProduct {\n upc: ID!\n engineers: [Employee!]!\n lead: Employee!\n name: ProductName!\n repositoryURL: String!\n}\n\ntype SDK implements IProduct {\n upc: ID!\n engineers: [Employee!]!\n owner: Employee!\n unicode: String!\n clientLanguages: [ProgrammingLanguage!]!\n}\n\ninterface Pet implements Animal {\n class: Class!\n gender: Gender!\n name: String!\n}\n\ntype Alligator implements Pet & Animal {\n class: Class!\n dangerous: String!\n gender: Gender!\n name: String!\n}\n\ntype Cat implements Pet & Animal {\n class: Class!\n gender: Gender!\n name: String!\n type: CatType!\n}\n\ntype Dog implements Pet & Animal {\n breed: DogBreed!\n class: Class!\n gender: Gender!\n name: String!\n}\n\ntype Mouse implements Pet & Animal {\n class: Class!\n gender: Gender!\n name: String!\n}\n\ntype Pony implements Pet & Animal {\n class: Class!\n gender: Gender!\n name: String!\n}\n\ntype Exercise implements Hobby {\n employees: [Employee!]!\n category: ExerciseType!\n}\n\ntype Flying implements Experience & Hobby {\n employees: [Employee!]!\n planeModels: [String!]!\n yearsOfExperience: Float!\n}\n\ntype Gaming implements Experience & Hobby {\n employees: [Employee!]!\n genres: [GameGenre!]!\n name: String!\n yearsOfExperience: Float!\n}\n\ntype Other implements Hobby {\n employees: [Employee!]!\n name: String!\n}\n\ntype Programming implements Hobby {\n employees: [Employee!]!\n languages: [ProgrammingLanguage!]!\n}\n\ntype Travelling implements Hobby {\n employees: [Employee!]!\n countriesLived: [Country!]!\n}\n\ntype DirectiveFact implements TopSecretFact @authenticated {\n title: String!\n description: FactContent!\n factType: TopSecretFactType\n}\n\ntype EntityFact implements TopSecretFact @requiresScopes(scopes: [[\"read:entity\"]]) {\n title: String!\n description: FactContent!\n factType: TopSecretFactType\n}\n\ntype MiscellaneousFact implements TopSecretFact {\n title: String!\n description: FactContent! @requiresScopes(scopes: [[\"read:miscellaneous\"]])\n factType: TopSecretFactType\n}\n\ntype Project implements Node & Timestamped {\n id: ID!\n name: String!\n description: String\n startDate: String\n endDate: String\n status: ProjectStatus!\n teamMembers: [Employee!]!\n relatedProducts: [Product!]!\n milestoneIds: [String!]\n milestones: [Milestone!]!\n tasks: [Task!]!\n progress: Float\n tags: [String!]\n alternativeProjects: [Project!]\n dependencies: [Project!]\n resourceGroups: [[ProjectResource!]!]!\n tasksByPhase: [[Task!]]!\n milestoneGroups: [[Milestone!]]\n priorityMatrix: [[[Task!]!]!]\n}\n\ntype Milestone implements Node & Timestamped {\n id: ID!\n projectId: ID!\n name: String!\n description: String\n startDate: String\n endDate: String\n status: MilestoneStatus!\n completionPercentage: Float\n dependencies: [Milestone!]!\n subtasks: [Task!]\n reviewers: [Employee!]\n}\n\ntype Task implements Node & Assignable {\n id: ID!\n projectId: ID!\n milestoneId: ID\n assigneeId: Int\n name: String!\n description: String\n priority: TaskPriority!\n status: TaskStatus!\n estimatedHours: Float\n actualHours: Float\n createdAt: String\n completedAt: String\n labels: [String!]\n subtasks: [Task!]\n dependencies: [Task!]!\n attachmentUrls: [String!]!\n reviewerIds: [Int!]\n}\n\ntype ProjectUpdate implements Node {\n id: ID!\n projectId: ID!\n updatedById: Int!\n updateType: ProjectUpdateType!\n description: String!\n timestamp: String!\n metadata: String\n}", + "stringStorage": { + "2ebeba33065ef483f119d0097b7cfab1bfe2e1a7": "schema {\n query: Query\n mutation: Mutation\n subscription: Subscription\n}\n\ndirective @authenticated on ENUM | FIELD_DEFINITION | INTERFACE | OBJECT | SCALAR\n\ndirective @composeDirective(name: String!) repeatable on SCHEMA\n\ndirective @extends on INTERFACE | OBJECT\n\ndirective @external on FIELD_DEFINITION | OBJECT\n\ndirective @goField(forceResolver: Boolean, name: String, omittable: Boolean) on FIELD_DEFINITION | INPUT_FIELD_DEFINITION\n\ndirective @inaccessible on ARGUMENT_DEFINITION | ENUM | ENUM_VALUE | FIELD_DEFINITION | INPUT_FIELD_DEFINITION | INPUT_OBJECT | INTERFACE | OBJECT | SCALAR | UNION\n\ndirective @interfaceObject on OBJECT\n\ndirective @key(fields: openfed__FieldSet!, resolvable: Boolean = true) repeatable on INTERFACE | OBJECT\n\ndirective @override(from: String!) on FIELD_DEFINITION\n\ndirective @provides(fields: openfed__FieldSet!) on FIELD_DEFINITION\n\ndirective @requires(fields: openfed__FieldSet!) on FIELD_DEFINITION\n\ndirective @requiresScopes(scopes: [[openfed__Scope!]!]!) on ENUM | FIELD_DEFINITION | INTERFACE | OBJECT | SCALAR\n\ndirective @shareable repeatable on FIELD_DEFINITION | OBJECT\n\ndirective @tag(name: String!) repeatable on ARGUMENT_DEFINITION | ENUM | ENUM_VALUE | FIELD_DEFINITION | INPUT_FIELD_DEFINITION | INPUT_OBJECT | INTERFACE | OBJECT | SCALAR | UNION\n\ntype City {\n country: Country\n name: String!\n type: String!\n}\n\ntype Consultancy @key(fields: \"upc\") {\n isLeadAvailable: Boolean @requires(fields: \"lead { isAvailable }\")\n lead: Employee!\n upc: ID!\n}\n\ntype Cosmo implements IProduct @key(fields: \"upc\") {\n engineers: [Employee!]!\n lead: Employee!\n upc: ID!\n}\n\ntype Country @key(fields: \"key { name }\", resolvable: false) {\n key: CountryKey!\n}\n\ntype CountryKey {\n name: String!\n}\n\ninput DeeplyNestedFileUpload {\n file: Upload!\n}\n\nenum Department {\n ENGINEERING\n MARKETING\n OPERATIONS\n}\n\ntype Details {\n forename: String! @shareable\n location: Country!\n pastLocations: [City!]!\n surname: String! @shareable\n}\n\ntype Employee implements Identifiable @key(fields: \"id\") {\n currentMood: Mood! @external\n derivedMood: Mood! @requires(fields: \"currentMood\")\n details: Details! @shareable\n id: Int!\n isAvailable: Boolean! @external\n notes: String @shareable\n role: RoleType!\n rootFieldErrorWrapper: ErrorWrapper @goField(forceResolver: true)\n rootFieldThrowsError: String @goField(forceResolver: true)\n startDate: String! @requiresScopes(scopes: [[\"read:employee\", \"read:private\"], [\"read:all\"]])\n tag: String!\n updatedAt: String!\n}\n\ntype Engineer implements RoleType {\n departments: [Department!]!\n employees: [Employee!]! @goField(forceResolver: true)\n engineerType: EngineerType!\n title: [String!]!\n}\n\nenum EngineerType {\n BACKEND\n FRONTEND\n FULLSTACK\n}\n\ntype ErrorWrapper {\n errorField: String @goField(forceResolver: true)\n okField: String\n}\n\ninput FileUpload {\n nested: DeeplyNestedFileUpload\n nestedList: [Upload!]\n}\n\ninterface IProduct {\n engineers: [Employee!]!\n upc: ID!\n}\n\ninterface Identifiable {\n id: Int!\n}\n\ntype Marketer implements RoleType {\n departments: [Department!]!\n employees: [Employee!]! @goField(forceResolver: true)\n title: [String!]!\n}\n\nenum Mood {\n HAPPY\n SAD\n}\n\ntype Mutation {\n multipleUpload(files: [Upload!]!): Boolean!\n singleUpload(file: Upload!): Boolean!\n singleUploadWithInput(arg: FileUpload!): Boolean!\n updateEmployeeTag(id: Int!, tag: String!): Employee\n}\n\nenum OperationType {\n FINANCE\n HUMAN_RESOURCES\n}\n\ntype Operator implements RoleType {\n departments: [Department!]!\n employees: [Employee!]! @goField(forceResolver: true)\n operatorType: [OperationType!]!\n title: [String!]!\n}\n\nunion Products = Consultancy | Cosmo | SDK\n\ntype Query {\n employee(id: Int!): Employee\n employeeAsList(id: Int!): [Employee]\n employees: [Employee]\n firstEmployee: Employee! @tag(name: \"internal\")\n products: [Products!]!\n teammates(team: Department!): [Employee!]!\n}\n\ninterface RoleType {\n departments: [Department!]!\n employees: [Employee!]! @goField(forceResolver: true)\n title: [String!]!\n}\n\ntype SDK implements IProduct @key(fields: \"upc\") {\n engineers: [Employee!]!\n owner: Employee!\n unicode: String!\n upc: ID!\n}\n\ntype Subscription {\n countEmp(intervalMilliseconds: Int!, max: Int!): Int!\n countEmp2(intervalMilliseconds: Int!, max: Int!): Int!\n countFor(count: Int!): Int!\n \"\"\"`currentTime` will return a stream of `Time` objects.\"\"\"\n currentTime: Time!\n}\n\ntype Time {\n timeStamp: String!\n unixTime: Int!\n}\n\nscalar Upload\n\nscalar openfed__FieldSet\n\nscalar openfed__Scope", + "6618be4cd5102db58a9821e09dfa49eec9262146": "schema {\n query: Query\n}\n\ndirective @authenticated on ENUM | FIELD_DEFINITION | INTERFACE | OBJECT | SCALAR\n\ndirective @composeDirective(name: String!) repeatable on SCHEMA\n\ndirective @extends on INTERFACE | OBJECT\n\ndirective @external on FIELD_DEFINITION | OBJECT\n\ndirective @inaccessible on ARGUMENT_DEFINITION | ENUM | ENUM_VALUE | FIELD_DEFINITION | INPUT_FIELD_DEFINITION | INPUT_OBJECT | INTERFACE | OBJECT | SCALAR | UNION\n\ndirective @interfaceObject on OBJECT\n\ndirective @key(fields: openfed__FieldSet!, resolvable: Boolean = true) repeatable on INTERFACE | OBJECT\n\ndirective @override(from: String!) on FIELD_DEFINITION\n\ndirective @provides(fields: openfed__FieldSet!) on FIELD_DEFINITION\n\ndirective @requires(fields: openfed__FieldSet!) on FIELD_DEFINITION\n\ndirective @requiresScopes(scopes: [[openfed__Scope!]!]!) on ENUM | FIELD_DEFINITION | INTERFACE | OBJECT | SCALAR\n\ndirective @shareable repeatable on FIELD_DEFINITION | OBJECT\n\ndirective @tag(name: String!) repeatable on ARGUMENT_DEFINITION | ENUM | ENUM_VALUE | FIELD_DEFINITION | INPUT_FIELD_DEFINITION | INPUT_OBJECT | INTERFACE | OBJECT | SCALAR | UNION\n\ntype Alligator implements Animal & Pet {\n class: Class!\n dangerous: String!\n gender: Gender!\n name: String!\n}\n\ninterface Animal {\n class: Class!\n gender: Gender!\n}\n\ntype Cat implements Animal & Pet {\n class: Class!\n gender: Gender!\n name: String!\n type: CatType!\n}\n\nenum CatType {\n HOME\n STREET\n}\n\nenum Class {\n FISH\n MAMMAL\n REPTILE\n}\n\ntype Details {\n forename: String! @shareable\n hasChildren: Boolean!\n maritalStatus: MaritalStatus\n middlename: String @deprecated\n nationality: Nationality!\n pets: [Pet]\n surname: String! @shareable\n}\n\ntype Dog implements Animal & Pet {\n breed: DogBreed!\n class: Class!\n gender: Gender!\n name: String!\n}\n\nenum DogBreed {\n GOLDEN_RETRIEVER\n POODLE\n ROTTWEILER\n YORKSHIRE_TERRIER\n}\n\ntype Employee @key(fields: \"id\") {\n details: Details @shareable\n id: Int!\n}\n\nenum Gender {\n FEMALE\n MALE\n UNKNOWN\n}\n\nenum MaritalStatus {\n ENGAGED\n MARRIED\n}\n\ntype Mouse implements Animal & Pet {\n class: Class!\n gender: Gender!\n name: String!\n}\n\nenum Nationality {\n AMERICAN\n DUTCH\n ENGLISH\n GERMAN\n INDIAN\n SPANISH\n UKRAINIAN\n}\n\ninput NestedSearchInput {\n hasChildren: Boolean\n maritalStatus: MaritalStatus\n}\n\ninterface Pet implements Animal {\n class: Class!\n gender: Gender!\n name: String!\n}\n\ntype Pony implements Animal & Pet {\n class: Class!\n gender: Gender!\n name: String!\n}\n\ntype Query {\n \"\"\" This is a GraphQL query that retrieves a list of employees.\"\"\"\n findEmployees(criteria: SearchInput): [Employee!]!\n}\n\n\"\"\" Allows to filter employees by their details. \"\"\"\ninput SearchInput {\n hasPets: Boolean\n nationality: Nationality\n nested: NestedSearchInput\n}\n\nscalar openfed__FieldSet\n\nscalar openfed__Scope", + "68291c651cf7b5b50afb169bd12d2cd1ebf4ded6": "schema {\n subscription: Subscription\n}\n\ndirective @authenticated on ENUM | FIELD_DEFINITION | INTERFACE | OBJECT | SCALAR\n\ndirective @composeDirective(name: String!) repeatable on SCHEMA\n\ndirective @extends on INTERFACE | OBJECT\n\ndirective @external on FIELD_DEFINITION | OBJECT\n\ndirective @goField(forceResolver: Boolean, name: String, omittable: Boolean) on FIELD_DEFINITION | INPUT_FIELD_DEFINITION\n\ndirective @inaccessible on ARGUMENT_DEFINITION | ENUM | ENUM_VALUE | FIELD_DEFINITION | INPUT_FIELD_DEFINITION | INPUT_OBJECT | INTERFACE | OBJECT | SCALAR | UNION\n\ndirective @interfaceObject on OBJECT\n\ndirective @key(fields: openfed__FieldSet!, resolvable: Boolean = true) repeatable on INTERFACE | OBJECT\n\ndirective @override(from: String!) on FIELD_DEFINITION\n\ndirective @provides(fields: openfed__FieldSet!) on FIELD_DEFINITION\n\ndirective @requires(fields: openfed__FieldSet!) on FIELD_DEFINITION\n\ndirective @requiresScopes(scopes: [[openfed__Scope!]!]!) on ENUM | FIELD_DEFINITION | INTERFACE | OBJECT | SCALAR\n\ndirective @shareable repeatable on FIELD_DEFINITION | OBJECT\n\ndirective @tag(name: String!) repeatable on ARGUMENT_DEFINITION | ENUM | ENUM_VALUE | FIELD_DEFINITION | INPUT_FIELD_DEFINITION | INPUT_OBJECT | INTERFACE | OBJECT | SCALAR | UNION\n\ntype Country @key(fields: \"key { name }\", resolvable: false) {\n key: CountryKey!\n}\n\ntype CountryKey {\n name: String!\n}\n\ntype Employee @key(fields: \"id\") {\n hobbies: [Hobby!]\n id: Int!\n}\n\ntype Exercise implements Hobby {\n category: ExerciseType!\n employees: [Employee!]! @goField(forceResolver: true)\n}\n\nenum ExerciseType {\n CALISTHENICS\n HIKING\n SPORT\n STRENGTH_TRAINING\n}\n\ninterface Experience {\n yearsOfExperience: Float!\n}\n\ntype Flying implements Experience & Hobby {\n employees: [Employee!]! @goField(forceResolver: true)\n planeModels: [String!]!\n yearsOfExperience: Float!\n}\n\nenum GameGenre {\n ADVENTURE\n BOARD\n CARD\n FPS\n ROGUELITE\n RPG\n SIMULATION\n STRATEGY\n}\n\ntype Gaming implements Experience & Hobby {\n employees: [Employee!]! @goField(forceResolver: true)\n genres: [GameGenre!]!\n name: String!\n yearsOfExperience: Float!\n}\n\ninterface Hobby {\n employees: [Employee!]! @goField(forceResolver: true)\n}\n\ntype Other implements Hobby {\n employees: [Employee!]! @goField(forceResolver: true)\n name: String!\n}\n\ntype Programming implements Hobby {\n employees: [Employee!]! @goField(forceResolver: true)\n languages: [ProgrammingLanguage!]!\n}\n\nenum ProgrammingLanguage {\n CSHARP\n GO\n RUST\n TYPESCRIPT\n}\n\ntype SDK @key(fields: \"upc\") {\n clientLanguages: [ProgrammingLanguage!]!\n upc: ID!\n}\n\ntype Subscription {\n countHob(intervalMilliseconds: Int!, max: Int!): Int!\n}\n\ntype Travelling implements Hobby {\n countriesLived: [Country!]!\n employees: [Employee!]! @goField(forceResolver: true)\n}\n\nscalar openfed__FieldSet\n\nscalar openfed__Scope", + "bfdab3dc85da07e6fcdac329879dc68cf6146324": "schema @link(url: \"https://specs.apollo.dev/federation/v2.5\", import: [\"@authenticated\", \"@composeDirective\", \"@external\", \"@extends\", \"@inaccessible\", \"@interfaceObject\", \"@override\", \"@provides\", \"@key\", \"@requires\", \"@requiresScopes\", \"@shareable\", \"@tag\"]) {\n query: Queries\n mutation: Mutation\n}\n\ndirective @authenticated on ENUM | FIELD_DEFINITION | INTERFACE | OBJECT | SCALAR\n\ndirective @composeDirective(name: String!) repeatable on SCHEMA\n\ndirective @extends on INTERFACE | OBJECT\n\ndirective @external on FIELD_DEFINITION | OBJECT\n\ndirective @inaccessible on ARGUMENT_DEFINITION | ENUM | ENUM_VALUE | FIELD_DEFINITION | INPUT_FIELD_DEFINITION | INPUT_OBJECT | INTERFACE | OBJECT | SCALAR | UNION\n\ndirective @interfaceObject on OBJECT\n\ndirective @key(fields: openfed__FieldSet!, resolvable: Boolean = true) repeatable on INTERFACE | OBJECT\n\ndirective @override(from: String!) on FIELD_DEFINITION\n\ndirective @provides(fields: openfed__FieldSet!) on FIELD_DEFINITION\n\ndirective @requires(fields: openfed__FieldSet!) on FIELD_DEFINITION\n\ndirective @requiresScopes(scopes: [[openfed__Scope!]!]!) on ENUM | FIELD_DEFINITION | INTERFACE | OBJECT | SCALAR\n\ndirective @shareable repeatable on FIELD_DEFINITION | OBJECT\n\ndirective @tag(name: String!) repeatable on ARGUMENT_DEFINITION | ENUM | ENUM_VALUE | FIELD_DEFINITION | INPUT_FIELD_DEFINITION | INPUT_OBJECT | INTERFACE | OBJECT | SCALAR | UNION\n\ntype Consultancy @key(fields: \"upc\") {\n name: ProductName!\n upc: ID!\n}\n\ntype Cosmo @key(fields: \"upc\") {\n name: ProductName!\n repositoryURL: String!\n upc: ID!\n}\n\ntype DirectiveFact implements TopSecretFact @authenticated {\n description: FactContent!\n factType: TopSecretFactType\n title: String!\n}\n\ntype Documentation {\n url(product: ProductName!): String!\n urls(products: [ProductName!]!): [String!]!\n}\n\ntype Employee @key(fields: \"id\") {\n id: Int!\n notes: String @override(from: \"employees\")\n products: [ProductName!]!\n}\n\ntype EntityFact implements TopSecretFact @requiresScopes(scopes: [[\"read:entity\"]]) {\n description: FactContent!\n factType: TopSecretFactType\n title: String!\n}\n\nscalar FactContent @requiresScopes(scopes: [[\"read:scalar\"], [\"read:all\"]])\n\ntype MiscellaneousFact implements TopSecretFact {\n description: FactContent! @requiresScopes(scopes: [[\"read:miscellaneous\"]])\n factType: TopSecretFactType\n title: String!\n}\n\ntype Mutation {\n addFact(fact: TopSecretFactInput!): TopSecretFact! @requiresScopes(scopes: [[\"write:fact\"], [\"write:all\"]])\n}\n\nenum ProductName {\n CONSULTANCY\n COSMO\n ENGINE\n FINANCE\n HUMAN_RESOURCES\n MARKETING\n SDK\n}\n\nunion Products = Consultancy | Cosmo | Documentation\n\ntype Queries {\n factTypes: [TopSecretFactType!]\n findShipping(id: ID!, trackingNumber: ID!): Shipping!\n productTypes: [Products!]!\n sharedThings(numOfA: Int!, numOfB: Int!): [Thing!]! @shareable\n shippings: [Shipping!]!\n topSecretFederationFacts: [TopSecretFact!]! @requiresScopes(scopes: [[\"read:fact\"], [\"read:all\"]])\n}\n\ntype Shipping @key(fields: \"id trackingNumber\") {\n carrier: String!\n estimate: Float! @requires(fields: \"weight\")\n id: ID!\n trackingNumber: String!\n weight: Float! @external\n}\n\ntype Thing {\n a: String! @shareable\n}\n\ninterface TopSecretFact @authenticated {\n description: FactContent!\n factType: TopSecretFactType\n}\n\ninput TopSecretFactInput {\n description: FactContent!\n factType: TopSecretFactType!\n title: String!\n}\n\nenum TopSecretFactType @authenticated {\n DIRECTIVE\n ENTITY\n MISCELLANEOUS\n}\n\nscalar openfed__FieldSet\n\nscalar openfed__Scope", + "20c8fc085a72213ac5bb4a25387d3a7bb35749ec": "schema {\n query: Query\n subscription: Subscription\n}\n\ndirective @authenticated on ENUM | FIELD_DEFINITION | INTERFACE | OBJECT | SCALAR\n\ndirective @composeDirective(name: String!) repeatable on SCHEMA\n\ndirective @extends on INTERFACE | OBJECT\n\ndirective @external on FIELD_DEFINITION | OBJECT\n\ndirective @inaccessible on ARGUMENT_DEFINITION | ENUM | ENUM_VALUE | FIELD_DEFINITION | INPUT_FIELD_DEFINITION | INPUT_OBJECT | INTERFACE | OBJECT | SCALAR | UNION\n\ndirective @interfaceObject on OBJECT\n\ndirective @key(fields: openfed__FieldSet!, resolvable: Boolean = true) repeatable on INTERFACE | OBJECT\n\ndirective @override(from: String!) on FIELD_DEFINITION\n\ndirective @provides(fields: openfed__FieldSet!) on FIELD_DEFINITION\n\ndirective @requires(fields: openfed__FieldSet!) on FIELD_DEFINITION\n\ndirective @requiresScopes(scopes: [[openfed__Scope!]!]!) on ENUM | FIELD_DEFINITION | INTERFACE | OBJECT | SCALAR\n\ndirective @shareable repeatable on FIELD_DEFINITION | OBJECT\n\ndirective @tag(name: String!) repeatable on ARGUMENT_DEFINITION | ENUM | ENUM_VALUE | FIELD_DEFINITION | INPUT_FIELD_DEFINITION | INPUT_OBJECT | INTERFACE | OBJECT | SCALAR | UNION\n\ntype ABigObject {\n aFieldOnABigObject: String!\n bFieldOnABigObject: Int!\n cFieldOnABigObject: Boolean!\n dFieldOnABigObject: Float!\n eFieldOnABigObject: String!\n fFieldOnABigObject: Int!\n gFieldOnABigObject: Boolean!\n hFieldOnABigObject: Float!\n iFieldOnABigObject: String!\n jFieldOnABigObject: Int!\n kFieldOnABigObject: Boolean!\n lFieldOnABigObject: Float!\n mFieldOnABigObject: String!\n nFieldOnABigObject: Int!\n oFieldOnABigObject: Boolean!\n pFieldOnABigObject: Float!\n qFieldOnABigObject: String!\n rFieldOnABigObject: Int!\n sFieldOnABigObject: Boolean!\n tFieldOnABigObject: Float!\n uFieldOnABigObject: String!\n vFieldOnABigObject: Int!\n wFieldOnABigObject: Boolean!\n xFieldOnABigObject: Float!\n yFieldOnABigObject: String!\n zFieldOnABigObject: Int!\n}\n\ntype BBigObject {\n aFieldOnBBigObject: String!\n bFieldOnBBigObject: Int!\n cFieldOnBBigObject: Boolean!\n dFieldOnBBigObject: Float!\n eFieldOnBBigObject: String!\n fFieldOnBBigObject: Int!\n gFieldOnBBigObject: Boolean!\n hFieldOnBBigObject: Float!\n iFieldOnBBigObject: String!\n jFieldOnBBigObject: Int!\n kFieldOnBBigObject: Boolean!\n lFieldOnBBigObject: Float!\n mFieldOnBBigObject: String!\n nFieldOnBBigObject: Int!\n oFieldOnBBigObject: Boolean!\n pFieldOnBBigObject: Float!\n qFieldOnBBigObject: String!\n rFieldOnBBigObject: Int!\n sFieldOnBBigObject: Boolean!\n tFieldOnBBigObject: Float!\n uFieldOnBBigObject: String!\n vFieldOnBBigObject: Int!\n wFieldOnBBigObject: Boolean!\n xFieldOnBBigObject: Float!\n yFieldOnBBigObject: String!\n zFieldOnBBigObject: Int!\n}\n\nunion BigAbstractResponse = ABigObject | BBigObject | CBigObject | DBigObject | EBigObject | FBigObject | GBigObject | HBigObject | IBigObject | JBigObject | KBigObject | LBigObject | MBigObject | NBigObject | OBigObject | PBigObject | QBigObject | RBigObject | SBigObject | TBigObject | UBigObject | VBigObject | WBigObject | XBigObject | YBigObject | ZBigObject\n\ntype BigObject {\n nestedObjects: [NestedObject!]!\n}\n\ntype CBigObject {\n aFieldOnCBigObject: String!\n bFieldOnCBigObject: Int!\n cFieldOnCBigObject: Boolean!\n dFieldOnCBigObject: Float!\n eFieldOnCBigObject: String!\n fFieldOnCBigObject: Int!\n gFieldOnCBigObject: Boolean!\n hFieldOnCBigObject: Float!\n iFieldOnCBigObject: String!\n jFieldOnCBigObject: Int!\n kFieldOnCBigObject: Boolean!\n lFieldOnCBigObject: Float!\n mFieldOnCBigObject: String!\n nFieldOnCBigObject: Int!\n oFieldOnCBigObject: Boolean!\n pFieldOnCBigObject: Float!\n qFieldOnCBigObject: String!\n rFieldOnCBigObject: Int!\n sFieldOnCBigObject: Boolean!\n tFieldOnCBigObject: Float!\n uFieldOnCBigObject: String!\n vFieldOnCBigObject: Int!\n wFieldOnCBigObject: Boolean!\n xFieldOnCBigObject: Float!\n yFieldOnCBigObject: String!\n zFieldOnCBigObject: Int!\n}\n\ntype DBigObject {\n aFieldOnDBigObject: String!\n bFieldOnDBigObject: Int!\n cFieldOnDBigObject: Boolean!\n dFieldOnDBigObject: Float!\n eFieldOnDBigObject: String!\n fFieldOnDBigObject: Int!\n gFieldOnDBigObject: Boolean!\n hFieldOnDBigObject: Float!\n iFieldOnDBigObject: String!\n jFieldOnDBigObject: Int!\n kFieldOnDBigObject: Boolean!\n lFieldOnDBigObject: Float!\n mFieldOnDBigObject: String!\n nFieldOnDBigObject: Int!\n oFieldOnDBigObject: Boolean!\n pFieldOnDBigObject: Float!\n qFieldOnDBigObject: String!\n rFieldOnDBigObject: Int!\n sFieldOnDBigObject: Boolean!\n tFieldOnDBigObject: Float!\n uFieldOnDBigObject: String!\n vFieldOnDBigObject: Int!\n wFieldOnDBigObject: Boolean!\n xFieldOnDBigObject: Float!\n yFieldOnDBigObject: String!\n zFieldOnDBigObject: Int!\n}\n\ntype DeeplyNestedObject {\n aFieldOnDeeplyNestedObject: String!\n bFieldOnDeeplyNestedObject: Int!\n cFieldOnDeeplyNestedObject: Boolean!\n dFieldOnDeeplyNestedObject: Float!\n eFieldOnDeeplyNestedObject: String!\n fFieldOnDeeplyNestedObject: Int!\n gFieldOnDeeplyNestedObject: Boolean!\n hFieldOnDeeplyNestedObject: Float!\n iFieldOnDeeplyNestedObject: String!\n jFieldOnDeeplyNestedObject: Int!\n kFieldOnDeeplyNestedObject: Boolean!\n lFieldOnDeeplyNestedObject: Float!\n mFieldOnDeeplyNestedObject: String!\n nFieldOnDeeplyNestedObject: Int!\n oFieldOnDeeplyNestedObject: Boolean!\n pFieldOnDeeplyNestedObject: Float!\n qFieldOnDeeplyNestedObject: String!\n rFieldOnDeeplyNestedObject: Int!\n sFieldOnDeeplyNestedObject: Boolean!\n tFieldOnDeeplyNestedObject: Float!\n uFieldOnDeeplyNestedObject: String!\n vFieldOnDeeplyNestedObject: Int!\n wFieldOnDeeplyNestedObject: Boolean!\n xFieldOnDeeplyNestedObject: Float!\n yFieldOnDeeplyNestedObject: String!\n zFieldOnDeeplyNestedObject: Int!\n}\n\ntype EBigObject {\n aFieldOnEBigObject: String!\n bFieldOnEBigObject: Int!\n cFieldOnEBigObject: Boolean!\n dFieldOnEBigObject: Float!\n eFieldOnEBigObject: String!\n fFieldOnEBigObject: Int!\n gFieldOnEBigObject: Boolean!\n hFieldOnEBigObject: Float!\n iFieldOnEBigObject: String!\n jFieldOnEBigObject: Int!\n kFieldOnEBigObject: Boolean!\n lFieldOnEBigObject: Float!\n mFieldOnEBigObject: String!\n nFieldOnEBigObject: Int!\n oFieldOnEBigObject: Boolean!\n pFieldOnEBigObject: Float!\n qFieldOnEBigObject: String!\n rFieldOnEBigObject: Int!\n sFieldOnEBigObject: Boolean!\n tFieldOnEBigObject: Float!\n uFieldOnEBigObject: String!\n vFieldOnEBigObject: Int!\n wFieldOnEBigObject: Boolean!\n xFieldOnEBigObject: Float!\n yFieldOnEBigObject: String!\n zFieldOnEBigObject: Int!\n}\n\ntype Employee @key(fields: \"id\") {\n fieldThrowsError: String\n id: Int!\n}\n\nenum EnumType {\n A\n B\n C\n}\n\ntype FBigObject {\n aFieldOnFBigObject: String!\n bFieldOnFBigObject: Int!\n cFieldOnFBigObject: Boolean!\n dFieldOnFBigObject: Float!\n eFieldOnFBigObject: String!\n fFieldOnFBigObject: Int!\n gFieldOnFBigObject: Boolean!\n hFieldOnFBigObject: Float!\n iFieldOnFBigObject: String!\n jFieldOnFBigObject: Int!\n kFieldOnFBigObject: Boolean!\n lFieldOnFBigObject: Float!\n mFieldOnFBigObject: String!\n nFieldOnFBigObject: Int!\n oFieldOnFBigObject: Boolean!\n pFieldOnFBigObject: Float!\n qFieldOnFBigObject: String!\n rFieldOnFBigObject: Int!\n sFieldOnFBigObject: Boolean!\n tFieldOnFBigObject: Float!\n uFieldOnFBigObject: String!\n vFieldOnFBigObject: Int!\n wFieldOnFBigObject: Boolean!\n xFieldOnFBigObject: Float!\n yFieldOnFBigObject: String!\n zFieldOnFBigObject: Int!\n}\n\ntype GBigObject {\n aFieldOnGBigObject: String!\n bFieldOnGBigObject: Int!\n cFieldOnGBigObject: Boolean!\n dFieldOnGBigObject: Float!\n eFieldOnGBigObject: String!\n fFieldOnGBigObject: Int!\n gFieldOnGBigObject: Boolean!\n hFieldOnGBigObject: Float!\n iFieldOnGBigObject: String!\n jFieldOnGBigObject: Int!\n kFieldOnGBigObject: Boolean!\n lFieldOnGBigObject: Float!\n mFieldOnGBigObject: String!\n nFieldOnGBigObject: Int!\n oFieldOnGBigObject: Boolean!\n pFieldOnGBigObject: Float!\n qFieldOnGBigObject: String!\n rFieldOnGBigObject: Int!\n sFieldOnGBigObject: Boolean!\n tFieldOnGBigObject: Float!\n uFieldOnGBigObject: String!\n vFieldOnGBigObject: Int!\n wFieldOnGBigObject: Boolean!\n xFieldOnGBigObject: Float!\n yFieldOnGBigObject: String!\n zFieldOnGBigObject: Int!\n}\n\ntype HBigObject {\n aFieldOnHBigObject: String!\n bFieldOnHBigObject: Int!\n cFieldOnHBigObject: Boolean!\n dFieldOnHBigObject: Float!\n eFieldOnHBigObject: String!\n fFieldOnHBigObject: Int!\n gFieldOnHBigObject: Boolean!\n hFieldOnHBigObject: Float!\n iFieldOnHBigObject: String!\n jFieldOnHBigObject: Int!\n kFieldOnHBigObject: Boolean!\n lFieldOnHBigObject: Float!\n mFieldOnHBigObject: String!\n nFieldOnHBigObject: Int!\n oFieldOnHBigObject: Boolean!\n pFieldOnHBigObject: Float!\n qFieldOnHBigObject: String!\n rFieldOnHBigObject: Int!\n sFieldOnHBigObject: Boolean!\n tFieldOnHBigObject: Float!\n uFieldOnHBigObject: String!\n vFieldOnHBigObject: Int!\n wFieldOnHBigObject: Boolean!\n xFieldOnHBigObject: Float!\n yFieldOnHBigObject: String!\n zFieldOnHBigObject: Int!\n}\n\ntype IBigObject {\n aFieldOnIBigObject: String!\n bFieldOnIBigObject: Int!\n cFieldOnIBigObject: Boolean!\n dFieldOnIBigObject: Float!\n eFieldOnIBigObject: String!\n fFieldOnIBigObject: Int!\n gFieldOnIBigObject: Boolean!\n hFieldOnIBigObject: Float!\n iFieldOnIBigObject: String!\n jFieldOnIBigObject: Int!\n kFieldOnIBigObject: Boolean!\n lFieldOnIBigObject: Float!\n mFieldOnIBigObject: String!\n nFieldOnIBigObject: Int!\n oFieldOnIBigObject: Boolean!\n pFieldOnIBigObject: Float!\n qFieldOnIBigObject: String!\n rFieldOnIBigObject: Int!\n sFieldOnIBigObject: Boolean!\n tFieldOnIBigObject: Float!\n uFieldOnIBigObject: String!\n vFieldOnIBigObject: Int!\n wFieldOnIBigObject: Boolean!\n xFieldOnIBigObject: Float!\n yFieldOnIBigObject: String!\n zFieldOnIBigObject: Int!\n}\n\ninput InputArg {\n enum: EnumType\n enums: [EnumType!]\n string: String\n strings: [String!]\n}\n\ntype InputResponse {\n arg: String!\n}\n\ninput InputType {\n arg: String!\n}\n\ntype JBigObject {\n aFieldOnJBigObject: String!\n bFieldOnJBigObject: Int!\n cFieldOnJBigObject: Boolean!\n dFieldOnJBigObject: Float!\n eFieldOnJBigObject: String!\n fFieldOnJBigObject: Int!\n gFieldOnJBigObject: Boolean!\n hFieldOnJBigObject: Float!\n iFieldOnJBigObject: String!\n jFieldOnJBigObject: Int!\n kFieldOnJBigObject: Boolean!\n lFieldOnJBigObject: Float!\n mFieldOnJBigObject: String!\n nFieldOnJBigObject: Int!\n oFieldOnJBigObject: Boolean!\n pFieldOnJBigObject: Float!\n qFieldOnJBigObject: String!\n rFieldOnJBigObject: Int!\n sFieldOnJBigObject: Boolean!\n tFieldOnJBigObject: Float!\n uFieldOnJBigObject: String!\n vFieldOnJBigObject: Int!\n wFieldOnJBigObject: Boolean!\n xFieldOnJBigObject: Float!\n yFieldOnJBigObject: String!\n zFieldOnJBigObject: Int!\n}\n\ntype KBigObject {\n aFieldOnKBigObject: String!\n bFieldOnKBigObject: Int!\n cFieldOnKBigObject: Boolean!\n dFieldOnKBigObject: Float!\n eFieldOnKBigObject: String!\n fFieldOnKBigObject: Int!\n gFieldOnKBigObject: Boolean!\n hFieldOnKBigObject: Float!\n iFieldOnKBigObject: String!\n jFieldOnKBigObject: Int!\n kFieldOnKBigObject: Boolean!\n lFieldOnKBigObject: Float!\n mFieldOnKBigObject: String!\n nFieldOnKBigObject: Int!\n oFieldOnKBigObject: Boolean!\n pFieldOnKBigObject: Float!\n qFieldOnKBigObject: String!\n rFieldOnKBigObject: Int!\n sFieldOnKBigObject: Boolean!\n tFieldOnKBigObject: Float!\n uFieldOnKBigObject: String!\n vFieldOnKBigObject: Int!\n wFieldOnKBigObject: Boolean!\n xFieldOnKBigObject: Float!\n yFieldOnKBigObject: String!\n zFieldOnKBigObject: Int!\n}\n\ntype LBigObject {\n aFieldOnLBigObject: String!\n bFieldOnLBigObject: Int!\n cFieldOnLBigObject: Boolean!\n dFieldOnLBigObject: Float!\n eFieldOnLBigObject: String!\n fFieldOnLBigObject: Int!\n gFieldOnLBigObject: Boolean!\n hFieldOnLBigObject: Float!\n iFieldOnLBigObject: String!\n jFieldOnLBigObject: Int!\n kFieldOnLBigObject: Boolean!\n lFieldOnLBigObject: Float!\n mFieldOnLBigObject: String!\n nFieldOnLBigObject: Int!\n oFieldOnLBigObject: Boolean!\n pFieldOnLBigObject: Float!\n qFieldOnLBigObject: String!\n rFieldOnLBigObject: Int!\n sFieldOnLBigObject: Boolean!\n tFieldOnLBigObject: Float!\n uFieldOnLBigObject: String!\n vFieldOnLBigObject: Int!\n wFieldOnLBigObject: Boolean!\n xFieldOnLBigObject: Float!\n yFieldOnLBigObject: String!\n zFieldOnLBigObject: Int!\n}\n\ntype MBigObject {\n aFieldOnMBigObject: String!\n bFieldOnMBigObject: Int!\n cFieldOnMBigObject: Boolean!\n dFieldOnMBigObject: Float!\n eFieldOnMBigObject: String!\n fFieldOnMBigObject: Int!\n gFieldOnMBigObject: Boolean!\n hFieldOnMBigObject: Float!\n iFieldOnMBigObject: String!\n jFieldOnMBigObject: Int!\n kFieldOnMBigObject: Boolean!\n lFieldOnMBigObject: Float!\n mFieldOnMBigObject: String!\n nFieldOnMBigObject: Int!\n oFieldOnMBigObject: Boolean!\n pFieldOnMBigObject: Float!\n qFieldOnMBigObject: String!\n rFieldOnMBigObject: Int!\n sFieldOnMBigObject: Boolean!\n tFieldOnMBigObject: Float!\n uFieldOnMBigObject: String!\n vFieldOnMBigObject: Int!\n wFieldOnMBigObject: Boolean!\n xFieldOnMBigObject: Float!\n yFieldOnMBigObject: String!\n zFieldOnMBigObject: Int!\n}\n\nscalar Map\n\ntype NBigObject {\n aFieldOnNBigObject: String!\n bFieldOnNBigObject: Int!\n cFieldOnNBigObject: Boolean!\n dFieldOnNBigObject: Float!\n eFieldOnNBigObject: String!\n fFieldOnNBigObject: Int!\n gFieldOnNBigObject: Boolean!\n hFieldOnNBigObject: Float!\n iFieldOnNBigObject: String!\n jFieldOnNBigObject: Int!\n kFieldOnNBigObject: Boolean!\n lFieldOnNBigObject: Float!\n mFieldOnNBigObject: String!\n nFieldOnNBigObject: Int!\n oFieldOnNBigObject: Boolean!\n pFieldOnNBigObject: Float!\n qFieldOnNBigObject: String!\n rFieldOnNBigObject: Int!\n sFieldOnNBigObject: Boolean!\n tFieldOnNBigObject: Float!\n uFieldOnNBigObject: String!\n vFieldOnNBigObject: Int!\n wFieldOnNBigObject: Boolean!\n xFieldOnNBigObject: Float!\n yFieldOnNBigObject: String!\n zFieldOnNBigObject: Int!\n}\n\ntype NestedObject {\n deeplyNestedObjects: [DeeplyNestedObject!]!\n}\n\ntype OBigObject {\n aFieldOnOBigObject: String!\n bFieldOnOBigObject: Int!\n cFieldOnOBigObject: Boolean!\n dFieldOnOBigObject: Float!\n eFieldOnOBigObject: String!\n fFieldOnOBigObject: Int!\n gFieldOnOBigObject: Boolean!\n hFieldOnOBigObject: Float!\n iFieldOnOBigObject: String!\n jFieldOnOBigObject: Int!\n kFieldOnOBigObject: Boolean!\n lFieldOnOBigObject: Float!\n mFieldOnOBigObject: String!\n nFieldOnOBigObject: Int!\n oFieldOnOBigObject: Boolean!\n pFieldOnOBigObject: Float!\n qFieldOnOBigObject: String!\n rFieldOnOBigObject: Int!\n sFieldOnOBigObject: Boolean!\n tFieldOnOBigObject: Float!\n uFieldOnOBigObject: String!\n vFieldOnOBigObject: Int!\n wFieldOnOBigObject: Boolean!\n xFieldOnOBigObject: Float!\n yFieldOnOBigObject: String!\n zFieldOnOBigObject: Int!\n}\n\ntype PBigObject {\n aFieldOnPBigObject: String!\n bFieldOnPBigObject: Int!\n cFieldOnPBigObject: Boolean!\n dFieldOnPBigObject: Float!\n eFieldOnPBigObject: String!\n fFieldOnPBigObject: Int!\n gFieldOnPBigObject: Boolean!\n hFieldOnPBigObject: Float!\n iFieldOnPBigObject: String!\n jFieldOnPBigObject: Int!\n kFieldOnPBigObject: Boolean!\n lFieldOnPBigObject: Float!\n mFieldOnPBigObject: String!\n nFieldOnPBigObject: Int!\n oFieldOnPBigObject: Boolean!\n pFieldOnPBigObject: Float!\n qFieldOnPBigObject: String!\n rFieldOnPBigObject: Int!\n sFieldOnPBigObject: Boolean!\n tFieldOnPBigObject: Float!\n uFieldOnPBigObject: String!\n vFieldOnPBigObject: Int!\n wFieldOnPBigObject: Boolean!\n xFieldOnPBigObject: Float!\n yFieldOnPBigObject: String!\n zFieldOnPBigObject: Int!\n}\n\ntype QBigObject {\n aFieldOnQBigObject: String!\n bFieldOnQBigObject: Int!\n cFieldOnQBigObject: Boolean!\n dFieldOnQBigObject: Float!\n eFieldOnQBigObject: String!\n fFieldOnQBigObject: Int!\n gFieldOnQBigObject: Boolean!\n hFieldOnQBigObject: Float!\n iFieldOnQBigObject: String!\n jFieldOnQBigObject: Int!\n kFieldOnQBigObject: Boolean!\n lFieldOnQBigObject: Float!\n mFieldOnQBigObject: String!\n nFieldOnQBigObject: Int!\n oFieldOnQBigObject: Boolean!\n pFieldOnQBigObject: Float!\n qFieldOnQBigObject: String!\n rFieldOnQBigObject: Int!\n sFieldOnQBigObject: Boolean!\n tFieldOnQBigObject: Float!\n uFieldOnQBigObject: String!\n vFieldOnQBigObject: Int!\n wFieldOnQBigObject: Boolean!\n xFieldOnQBigObject: Float!\n yFieldOnQBigObject: String!\n zFieldOnQBigObject: Int!\n}\n\ntype Query {\n bigAbstractResponse: BigAbstractResponse\n bigResponse(artificialDelay: Int! = 0, bigObjects: Int! = 100, deeplyNestedObjects: Int! = 100, nestedObjects: Int! = 100): [BigObject!]!\n \"\"\"Returns response after the given delay\"\"\"\n delay(ms: Int!, response: String!): String!\n floatField(arg: Float): Float\n \"\"\"Returns the value of the received HTTP header.\"\"\"\n headerValue(name: String!): String!\n \"\"\"Returns the value of the given key in the WS initial payload.\"\"\"\n initPayloadValue(key: String!): String!\n initialPayload: Map\n longResponse(artificialDelay: Int! = 0, bytes: Int!): String\n rootFieldWithInput(arg: InputArg!): String!\n rootFieldWithListArg(arg: [String!]!): [String!]!\n rootFieldWithListOfEnumArg(arg: [EnumType!]!): [EnumType!]!\n rootFieldWithListOfInputArg(arg: [InputType!]!): [InputResponse!]!\n rootFieldWithNestedListArg(arg: [[String!]!]!): [[String!]!]!\n secret: Secret @requiresScopes(scopes: [[\"read:secret\"]])\n sharedThings(numOfA: Int!, numOfB: Int!): [Thing!]! @shareable\n}\n\ntype RBigObject {\n aFieldOnRBigObject: String!\n bFieldOnRBigObject: Int!\n cFieldOnRBigObject: Boolean!\n dFieldOnRBigObject: Float!\n eFieldOnRBigObject: String!\n fFieldOnRBigObject: Int!\n gFieldOnRBigObject: Boolean!\n hFieldOnRBigObject: Float!\n iFieldOnRBigObject: String!\n jFieldOnRBigObject: Int!\n kFieldOnRBigObject: Boolean!\n lFieldOnRBigObject: Float!\n mFieldOnRBigObject: String!\n nFieldOnRBigObject: Int!\n oFieldOnRBigObject: Boolean!\n pFieldOnRBigObject: Float!\n qFieldOnRBigObject: String!\n rFieldOnRBigObject: Int!\n sFieldOnRBigObject: Boolean!\n tFieldOnRBigObject: Float!\n uFieldOnRBigObject: String!\n vFieldOnRBigObject: Int!\n wFieldOnRBigObject: Boolean!\n xFieldOnRBigObject: Float!\n yFieldOnRBigObject: String!\n zFieldOnRBigObject: Int!\n}\n\ntype SBigObject {\n aFieldOnSBigObject: String!\n bFieldOnSBigObject: Int!\n cFieldOnSBigObject: Boolean!\n dFieldOnSBigObject: Float!\n eFieldOnSBigObject: String!\n fFieldOnSBigObject: Int!\n gFieldOnSBigObject: Boolean!\n hFieldOnSBigObject: Float!\n iFieldOnSBigObject: String!\n jFieldOnSBigObject: Int!\n kFieldOnSBigObject: Boolean!\n lFieldOnSBigObject: Float!\n mFieldOnSBigObject: String!\n nFieldOnSBigObject: Int!\n oFieldOnSBigObject: Boolean!\n pFieldOnSBigObject: Float!\n qFieldOnSBigObject: String!\n rFieldOnSBigObject: Int!\n sFieldOnSBigObject: Boolean!\n tFieldOnSBigObject: Float!\n uFieldOnSBigObject: String!\n vFieldOnSBigObject: Int!\n wFieldOnSBigObject: Boolean!\n xFieldOnSBigObject: Float!\n yFieldOnSBigObject: String!\n zFieldOnSBigObject: Int!\n}\n\ntype Secret {\n value: String\n}\n\ntype Subscription {\n \"\"\"Returns a stream with the value of the received HTTP header.\"\"\"\n headerValue(name: String!, repeat: Int): TimestampedString!\n \"\"\"\n Returns a stream with the value of value of the given key in the WS initial payload.\n \"\"\"\n initPayloadValue(key: String!, repeat: Int): TimestampedString!\n \"\"\"Returns a stream with the value of the WS initial payload.\"\"\"\n initialPayload(repeat: Int): Map\n returnsError: String\n}\n\ntype TBigObject {\n aFieldOnTBigObject: String!\n bFieldOnTBigObject: Int!\n cFieldOnTBigObject: Boolean!\n dFieldOnTBigObject: Float!\n eFieldOnTBigObject: String!\n fFieldOnTBigObject: Int!\n gFieldOnTBigObject: Boolean!\n hFieldOnTBigObject: Float!\n iFieldOnTBigObject: String!\n jFieldOnTBigObject: Int!\n kFieldOnTBigObject: Boolean!\n lFieldOnTBigObject: Float!\n mFieldOnTBigObject: String!\n nFieldOnTBigObject: Int!\n oFieldOnTBigObject: Boolean!\n pFieldOnTBigObject: Float!\n qFieldOnTBigObject: String!\n rFieldOnTBigObject: Int!\n sFieldOnTBigObject: Boolean!\n tFieldOnTBigObject: Float!\n uFieldOnTBigObject: String!\n vFieldOnTBigObject: Int!\n wFieldOnTBigObject: Boolean!\n xFieldOnTBigObject: Float!\n yFieldOnTBigObject: String!\n zFieldOnTBigObject: Int!\n}\n\ntype Thing {\n b: String! @shareable\n}\n\ntype TimestampedString {\n initialPayload: Map\n \"\"\"Sequence number\"\"\"\n seq: Int!\n \"\"\"Total number of responses to be sent\"\"\"\n total: Int!\n \"\"\"The timestamp when the response was generated.\"\"\"\n unixTime: Int!\n \"\"\"The value of the string.\"\"\"\n value: String!\n}\n\ntype UBigObject {\n aFieldOnUBigObject: String!\n bFieldOnUBigObject: Int!\n cFieldOnUBigObject: Boolean!\n dFieldOnUBigObject: Float!\n eFieldOnUBigObject: String!\n fFieldOnUBigObject: Int!\n gFieldOnUBigObject: Boolean!\n hFieldOnUBigObject: Float!\n iFieldOnUBigObject: String!\n jFieldOnUBigObject: Int!\n kFieldOnUBigObject: Boolean!\n lFieldOnUBigObject: Float!\n mFieldOnUBigObject: String!\n nFieldOnUBigObject: Int!\n oFieldOnUBigObject: Boolean!\n pFieldOnUBigObject: Float!\n qFieldOnUBigObject: String!\n rFieldOnUBigObject: Int!\n sFieldOnUBigObject: Boolean!\n tFieldOnUBigObject: Float!\n uFieldOnUBigObject: String!\n vFieldOnUBigObject: Int!\n wFieldOnUBigObject: Boolean!\n xFieldOnUBigObject: Float!\n yFieldOnUBigObject: String!\n zFieldOnUBigObject: Int!\n}\n\ntype VBigObject {\n aFieldOnVBigObject: String!\n bFieldOnVBigObject: Int!\n cFieldOnVBigObject: Boolean!\n dFieldOnVBigObject: Float!\n eFieldOnVBigObject: String!\n fFieldOnVBigObject: Int!\n gFieldOnVBigObject: Boolean!\n hFieldOnVBigObject: Float!\n iFieldOnVBigObject: String!\n jFieldOnVBigObject: Int!\n kFieldOnVBigObject: Boolean!\n lFieldOnVBigObject: Float!\n mFieldOnVBigObject: String!\n nFieldOnVBigObject: Int!\n oFieldOnVBigObject: Boolean!\n pFieldOnVBigObject: Float!\n qFieldOnVBigObject: String!\n rFieldOnVBigObject: Int!\n sFieldOnVBigObject: Boolean!\n tFieldOnVBigObject: Float!\n uFieldOnVBigObject: String!\n vFieldOnVBigObject: Int!\n wFieldOnVBigObject: Boolean!\n xFieldOnVBigObject: Float!\n yFieldOnVBigObject: String!\n zFieldOnVBigObject: Int!\n}\n\ntype WBigObject {\n aFieldOnWBigObject: String!\n bFieldOnWBigObject: Int!\n cFieldOnWBigObject: Boolean!\n dFieldOnWBigObject: Float!\n eFieldOnWBigObject: String!\n fFieldOnWBigObject: Int!\n gFieldOnWBigObject: Boolean!\n hFieldOnWBigObject: Float!\n iFieldOnWBigObject: String!\n jFieldOnWBigObject: Int!\n kFieldOnWBigObject: Boolean!\n lFieldOnWBigObject: Float!\n mFieldOnWBigObject: String!\n nFieldOnWBigObject: Int!\n oFieldOnWBigObject: Boolean!\n pFieldOnWBigObject: Float!\n qFieldOnWBigObject: String!\n rFieldOnWBigObject: Int!\n sFieldOnWBigObject: Boolean!\n tFieldOnWBigObject: Float!\n uFieldOnWBigObject: String!\n vFieldOnWBigObject: Int!\n wFieldOnWBigObject: Boolean!\n xFieldOnWBigObject: Float!\n yFieldOnWBigObject: String!\n zFieldOnWBigObject: Int!\n}\n\ntype XBigObject {\n aFieldOnXBigObject: String!\n bFieldOnXBigObject: Int!\n cFieldOnXBigObject: Boolean!\n dFieldOnXBigObject: Float!\n eFieldOnXBigObject: String!\n fFieldOnXBigObject: Int!\n gFieldOnXBigObject: Boolean!\n hFieldOnXBigObject: Float!\n iFieldOnXBigObject: String!\n jFieldOnXBigObject: Int!\n kFieldOnXBigObject: Boolean!\n lFieldOnXBigObject: Float!\n mFieldOnXBigObject: String!\n nFieldOnXBigObject: Int!\n oFieldOnXBigObject: Boolean!\n pFieldOnXBigObject: Float!\n qFieldOnXBigObject: String!\n rFieldOnXBigObject: Int!\n sFieldOnXBigObject: Boolean!\n tFieldOnXBigObject: Float!\n uFieldOnXBigObject: String!\n vFieldOnXBigObject: Int!\n wFieldOnXBigObject: Boolean!\n xFieldOnXBigObject: Float!\n yFieldOnXBigObject: String!\n zFieldOnXBigObject: Int!\n}\n\ntype YBigObject {\n aFieldOnYBigObject: String!\n bFieldOnYBigObject: Int!\n cFieldOnYBigObject: Boolean!\n dFieldOnYBigObject: Float!\n eFieldOnYBigObject: String!\n fFieldOnYBigObject: Int!\n gFieldOnYBigObject: Boolean!\n hFieldOnYBigObject: Float!\n iFieldOnYBigObject: String!\n jFieldOnYBigObject: Int!\n kFieldOnYBigObject: Boolean!\n lFieldOnYBigObject: Float!\n mFieldOnYBigObject: String!\n nFieldOnYBigObject: Int!\n oFieldOnYBigObject: Boolean!\n pFieldOnYBigObject: Float!\n qFieldOnYBigObject: String!\n rFieldOnYBigObject: Int!\n sFieldOnYBigObject: Boolean!\n tFieldOnYBigObject: Float!\n uFieldOnYBigObject: String!\n vFieldOnYBigObject: Int!\n wFieldOnYBigObject: Boolean!\n xFieldOnYBigObject: Float!\n yFieldOnYBigObject: String!\n zFieldOnYBigObject: Int!\n}\n\ntype ZBigObject {\n aFieldOnZBigObject: String!\n bFieldOnZBigObject: Int!\n cFieldOnZBigObject: Boolean!\n dFieldOnZBigObject: Float!\n eFieldOnZBigObject: String!\n fFieldOnZBigObject: Int!\n gFieldOnZBigObject: Boolean!\n hFieldOnZBigObject: Float!\n iFieldOnZBigObject: String!\n jFieldOnZBigObject: Int!\n kFieldOnZBigObject: Boolean!\n lFieldOnZBigObject: Float!\n mFieldOnZBigObject: String!\n nFieldOnZBigObject: Int!\n oFieldOnZBigObject: Boolean!\n pFieldOnZBigObject: Float!\n qFieldOnZBigObject: String!\n rFieldOnZBigObject: Int!\n sFieldOnZBigObject: Boolean!\n tFieldOnZBigObject: Float!\n uFieldOnZBigObject: String!\n vFieldOnZBigObject: Int!\n wFieldOnZBigObject: Boolean!\n xFieldOnZBigObject: Float!\n yFieldOnZBigObject: String!\n zFieldOnZBigObject: Int!\n}\n\nscalar openfed__FieldSet\n\nscalar openfed__Scope", + "0327ed440f0c9e1684722cbb987bc8d3283c5532": "schema {\n mutation: Mutation\n}\n\ndirective @authenticated on ENUM | FIELD_DEFINITION | INTERFACE | OBJECT | SCALAR\n\ndirective @composeDirective(name: String!) repeatable on SCHEMA\n\ndirective @extends on INTERFACE | OBJECT\n\ndirective @external on FIELD_DEFINITION | OBJECT\n\ndirective @inaccessible on ARGUMENT_DEFINITION | ENUM | ENUM_VALUE | FIELD_DEFINITION | INPUT_FIELD_DEFINITION | INPUT_OBJECT | INTERFACE | OBJECT | SCALAR | UNION\n\ndirective @interfaceObject on OBJECT\n\ndirective @key(fields: openfed__FieldSet!, resolvable: Boolean = true) repeatable on INTERFACE | OBJECT\n\ndirective @override(from: String!) on FIELD_DEFINITION\n\ndirective @provides(fields: openfed__FieldSet!) on FIELD_DEFINITION\n\ndirective @requires(fields: openfed__FieldSet!) on FIELD_DEFINITION\n\ndirective @requiresScopes(scopes: [[openfed__Scope!]!]!) on ENUM | FIELD_DEFINITION | INTERFACE | OBJECT | SCALAR\n\ndirective @shareable repeatable on FIELD_DEFINITION | OBJECT\n\ndirective @tag(name: String!) repeatable on ARGUMENT_DEFINITION | ENUM | ENUM_VALUE | FIELD_DEFINITION | INPUT_FIELD_DEFINITION | INPUT_OBJECT | INTERFACE | OBJECT | SCALAR | UNION\n\ntype Employee @key(fields: \"id\") {\n id: Int!\n isAvailable: Boolean!\n}\n\ntype Mutation {\n \"\"\" This mutation updates the availability status of an employee in the system.\n \"\"\"\n updateAvailability(employeeID: Int!, isAvailable: Boolean!): Employee!\n}\n\nscalar openfed__FieldSet\n\nscalar openfed__Scope", + "cb7653f92b2599bd46ae73a84b8d7d5c359fb3b2": "schema {\n mutation: Mutation\n}\n\ndirective @authenticated on ENUM | FIELD_DEFINITION | INTERFACE | OBJECT | SCALAR\n\ndirective @composeDirective(name: String!) repeatable on SCHEMA\n\ndirective @extends on INTERFACE | OBJECT\n\ndirective @external on FIELD_DEFINITION | OBJECT\n\ndirective @inaccessible on ARGUMENT_DEFINITION | ENUM | ENUM_VALUE | FIELD_DEFINITION | INPUT_FIELD_DEFINITION | INPUT_OBJECT | INTERFACE | OBJECT | SCALAR | UNION\n\ndirective @interfaceObject on OBJECT\n\ndirective @key(fields: openfed__FieldSet!, resolvable: Boolean = true) repeatable on INTERFACE | OBJECT\n\ndirective @override(from: String!) on FIELD_DEFINITION\n\ndirective @provides(fields: openfed__FieldSet!) on FIELD_DEFINITION\n\ndirective @requires(fields: openfed__FieldSet!) on FIELD_DEFINITION\n\ndirective @requiresScopes(scopes: [[openfed__Scope!]!]!) on ENUM | FIELD_DEFINITION | INTERFACE | OBJECT | SCALAR\n\ndirective @shareable repeatable on FIELD_DEFINITION | OBJECT\n\ndirective @tag(name: String!) repeatable on ARGUMENT_DEFINITION | ENUM | ENUM_VALUE | FIELD_DEFINITION | INPUT_FIELD_DEFINITION | INPUT_OBJECT | INTERFACE | OBJECT | SCALAR | UNION\n\ntype Employee @key(fields: \"id\") {\n currentMood: Mood!\n id: Int!\n}\n\nenum Mood {\n APATHETIC @inaccessible\n HAPPY\n SAD\n}\n\ntype Mutation {\n \"\"\" This mutation update the mood of an employee. \"\"\"\n updateMood(employeeID: Int!, mood: Mood!): Employee!\n}\n\nscalar openfed__FieldSet\n\nscalar openfed__Scope", + "14e8ff1a04734f4e9f500e9fcc7cebd94008d2cd": "directive @authenticated on ENUM | FIELD_DEFINITION | INTERFACE | OBJECT | SCALAR\n\ndirective @composeDirective(name: String!) repeatable on SCHEMA\n\ndirective @extends on INTERFACE | OBJECT\n\ndirective @external on FIELD_DEFINITION | OBJECT\n\ndirective @inaccessible on ARGUMENT_DEFINITION | ENUM | ENUM_VALUE | FIELD_DEFINITION | INPUT_FIELD_DEFINITION | INPUT_OBJECT | INTERFACE | OBJECT | SCALAR | UNION\n\ndirective @interfaceObject on OBJECT\n\ndirective @key(fields: openfed__FieldSet!, resolvable: Boolean = true) repeatable on INTERFACE | OBJECT\n\ndirective @override(from: String!) on FIELD_DEFINITION\n\ndirective @provides(fields: openfed__FieldSet!) on FIELD_DEFINITION\n\ndirective @requires(fields: openfed__FieldSet!) on FIELD_DEFINITION\n\ndirective @requiresScopes(scopes: [[openfed__Scope!]!]!) on ENUM | FIELD_DEFINITION | INTERFACE | OBJECT | SCALAR\n\ndirective @shareable repeatable on FIELD_DEFINITION | OBJECT\n\ndirective @tag(name: String!) repeatable on ARGUMENT_DEFINITION | ENUM | ENUM_VALUE | FIELD_DEFINITION | INPUT_FIELD_DEFINITION | INPUT_OBJECT | INTERFACE | OBJECT | SCALAR | UNION\n\ntype Country @key(fields: \"key { name }\") {\n key: CountryKey!\n language: String\n}\n\ntype CountryKey {\n name: String!\n}\n\nscalar openfed__FieldSet\n\nscalar openfed__Scope", + "435637e5d9d211db9a6310f4ee87b34b6ad76f50": "schema {\n query: Query\n mutation: Mutation\n subscription: Subscription\n}\n\ndirective @edfs__kafkaPublish(providerId: String! = \"default\", topic: String!) on FIELD_DEFINITION\n\ndirective @edfs__kafkaSubscribe(providerId: String! = \"default\", topics: [String!]!) on FIELD_DEFINITION\n\ndirective @edfs__natsPublish(providerId: String! = \"default\", subject: String!) on FIELD_DEFINITION\n\ndirective @edfs__natsRequest(providerId: String! = \"default\", subject: String!) on FIELD_DEFINITION\n\ndirective @edfs__natsSubscribe(providerId: String! = \"default\", streamConfiguration: edfs__NatsStreamConfiguration, subjects: [String!]!) on FIELD_DEFINITION\n\ndirective @edfs__redisPublish(channel: String!, providerId: String! = \"default\") on FIELD_DEFINITION\n\ndirective @edfs__redisSubscribe(channels: [String!]!, providerId: String! = \"default\") on FIELD_DEFINITION\n\ndirective @extends on INTERFACE | OBJECT\n\ndirective @external on FIELD_DEFINITION | OBJECT\n\ndirective @key(fields: openfed__FieldSet!, resolvable: Boolean = true) repeatable on INTERFACE | OBJECT\n\ndirective @openfed__subscriptionFilter(condition: openfed__SubscriptionFilterCondition!) on FIELD_DEFINITION\n\ndirective @provides(fields: openfed__FieldSet!) on FIELD_DEFINITION\n\ndirective @requires(fields: openfed__FieldSet!) on FIELD_DEFINITION\n\ndirective @tag(name: String!) repeatable on ARGUMENT_DEFINITION | ENUM | ENUM_VALUE | FIELD_DEFINITION | INPUT_FIELD_DEFINITION | INPUT_OBJECT | INTERFACE | OBJECT | SCALAR | UNION\n\ntype Employee @key(fields: \"id\", resolvable: false) {\n id: Int! @external\n}\n\ninput KafkaInput {\n ids: [Int!]!\n}\n\ntype Mutation {\n updateEmployeeMyKafka(employeeID: Int!, update: UpdateEmployeeInput!): edfs__PublishResult! @edfs__kafkaPublish(topic: \"employeeUpdated\", providerId: \"my-kafka\")\n updateEmployeeMyNats(id: Int!, update: UpdateEmployeeInput!): edfs__PublishResult! @edfs__natsPublish(subject: \"employeeUpdatedMyNats.{{ args.id }}\", providerId: \"my-nats\")\n updateEmployeeMyRedis(id: Int!, update: UpdateEmployeeInput!): edfs__PublishResult! @edfs__redisPublish(channel: \"employeeUpdatedMyRedis\", providerId: \"my-redis\")\n updateEmployeeMyRedisOnCustomChannel(id: Int!, update: UpdateEmployeeInput!): edfs__PublishResult! @edfs__redisPublish(channel: \"employeeUpdatedMyRedis.{{ args.id }}\", providerId: \"my-redis\")\n}\n\ntype Query {\n employeeFromEvent(id: Int!): Employee! @edfs__natsRequest(subject: \"getEmployee.{{ args.id }}\")\n employeeFromEventMyNats(employeeID: Int!): Employee! @edfs__natsRequest(subject: \"getEmployeeMyNats.{{ args.employeeID }}\", providerId: \"my-nats\")\n}\n\ntype Subscription {\n employeeUpdated(employeeID: Int!): Employee! @edfs__natsSubscribe(subjects: [\"employeeUpdated.{{ args.employeeID }}\"])\n employeeUpdatedMyKafka(employeeID: Int!): Employee! @edfs__kafkaSubscribe(topics: [\"employeeUpdated\", \"employeeUpdatedTwo\"], providerId: \"my-kafka\")\n employeeUpdatedMyNats(id: Int!): Employee! @edfs__natsSubscribe(subjects: [\"employeeUpdatedMyNats.{{ args.id }}\", \"employeeUpdatedMyNatsTwo.{{ args.id }}\"], providerId: \"my-nats\")\n employeeUpdatedMyRedis(id: Int!): Employee! @edfs__redisSubscribe(channels: [\"employeeUpdatedMyRedis.{{ args.id }}\"], providerId: \"my-redis\")\n employeeUpdatedNatsStream(id: Int!): Employee! @edfs__natsSubscribe(subjects: [\"employeeUpdated.{{ args.id }}\"], streamConfiguration: {consumerName: \"consumerName\", streamName: \"streamName\"})\n employeeUpdates: Employee! @edfs__redisSubscribe(channels: [\"employeeUpdatedMyRedis\"], providerId: \"my-redis\")\n filteredEmployeeUpdated(id: Int!): Employee! @edfs__natsSubscribe(subjects: [\"employeeUpdated.{{ args.id }}\"]) @openfed__subscriptionFilter(condition: {NOT: {IN: {fieldPath: \"id\", values: [2, 6, 9, 10, 12]}}})\n filteredEmployeeUpdatedMyKafka(employeeID: ID!): Employee! @edfs__kafkaSubscribe(topics: [\"employeeUpdated\", \"employeeUpdatedTwo\"], providerId: \"my-kafka\") @openfed__subscriptionFilter(condition: {IN: {fieldPath: \"id\", values: [1, 3, 4, 7, 11]}})\n filteredEmployeeUpdatedMyKafkaWithListFieldArguments(firstIds: [ID!]!, secondIds: [ID!]!): Employee! @edfs__kafkaSubscribe(topics: [\"employeeUpdated\", \"employeeUpdatedTwo\"], providerId: \"my-kafka\") @openfed__subscriptionFilter(condition: {IN: {fieldPath: \"id\", values: [\"{{ args.firstIds }}\", \"{{ args.secondIds }}\"]}})\n filteredEmployeeUpdatedMyKafkaWithNestedListFieldArgument(input: KafkaInput!): Employee! @edfs__kafkaSubscribe(topics: [\"employeeUpdated\", \"employeeUpdatedTwo\"], providerId: \"my-kafka\") @openfed__subscriptionFilter(condition: {OR: [{IN: {fieldPath: \"id\", values: [\"{{ args.input.ids }}\"]}}, {IN: {fieldPath: \"id\", values: [\"1\"]}}]})\n filteredEmployeeUpdatedMyRedis(ids: [ID!]!): Employee! @edfs__redisSubscribe(channels: [\"employeeUpdatedMyRedis\"], providerId: \"my-redis\") @openfed__subscriptionFilter(condition: {IN: {fieldPath: \"id\", values: [\"{{ args.ids }}\"]}})\n}\n\ninput UpdateEmployeeInput {\n email: String\n name: String\n}\n\ninput edfs__NatsStreamConfiguration {\n consumerInactiveThreshold: Int! = 30\n consumerName: String!\n streamName: String!\n}\n\ntype edfs__PublishResult {\n success: Boolean!\n}\n\nscalar openfed__FieldSet\n\ninput openfed__SubscriptionFieldCondition {\n fieldPath: String!\n values: [openfed__SubscriptionFilterValue]!\n}\n\ninput openfed__SubscriptionFilterCondition {\n AND: [openfed__SubscriptionFilterCondition!]\n IN: openfed__SubscriptionFieldCondition\n NOT: openfed__SubscriptionFilterCondition\n OR: [openfed__SubscriptionFilterCondition!]\n}\n\nscalar openfed__SubscriptionFilterValue", + "b24bf8f9a58a9f8109bb5bb2c84f80d74e18daf3": "schema @link(url: \"https://specs.apollo.dev/federation/v2.5\", import: [\"@authenticated\", \"@composeDirective\", \"@external\", \"@extends\", \"@inaccessible\", \"@interfaceObject\", \"@override\", \"@provides\", \"@key\", \"@requires\", \"@requiresScopes\", \"@shareable\", \"@tag\"]) {\n query: Query\n mutation: Mutation\n}\n\ndirective @authenticated on ENUM | FIELD_DEFINITION | INTERFACE | OBJECT | SCALAR\n\ndirective @composeDirective(name: String!) repeatable on SCHEMA\n\ndirective @extends on INTERFACE | OBJECT\n\ndirective @external on FIELD_DEFINITION | OBJECT\n\ndirective @inaccessible on ARGUMENT_DEFINITION | ENUM | ENUM_VALUE | FIELD_DEFINITION | INPUT_FIELD_DEFINITION | INPUT_OBJECT | INTERFACE | OBJECT | SCALAR | UNION\n\ndirective @interfaceObject on OBJECT\n\ndirective @key(fields: openfed__FieldSet!, resolvable: Boolean = true) repeatable on INTERFACE | OBJECT\n\ndirective @override(from: String!) on FIELD_DEFINITION\n\ndirective @provides(fields: openfed__FieldSet!) on FIELD_DEFINITION\n\ndirective @requires(fields: openfed__FieldSet!) on FIELD_DEFINITION\n\ndirective @requiresScopes(scopes: [[openfed__Scope!]!]!) on ENUM | FIELD_DEFINITION | INTERFACE | OBJECT | SCALAR\n\ndirective @shareable repeatable on FIELD_DEFINITION | OBJECT\n\ndirective @tag(name: String!) repeatable on ARGUMENT_DEFINITION | ENUM | ENUM_VALUE | FIELD_DEFINITION | INPUT_FIELD_DEFINITION | INPUT_OBJECT | INTERFACE | OBJECT | SCALAR | UNION\n\ninterface Assignable {\n assigneeId: Int\n}\n\ntype Employee @key(fields: \"id\") {\n assignedTasks: [Task!]!\n certifications: [String!]\n completedTasks: [Task!]!\n id: Int!\n projectHistory: [[Project!]]!\n projects: [Project!]\n skills: [String!]\n}\n\ntype Milestone implements Node & Timestamped @key(fields: \"id\") {\n completionPercentage: Float\n dependencies: [Milestone!]!\n description: String\n endDate: String\n id: ID!\n name: String!\n projectId: ID!\n reviewers: [Employee!]\n startDate: String\n status: MilestoneStatus!\n subtasks: [Task!]\n}\n\ninput MilestoneInput {\n description: String\n dueDate: String\n name: String!\n projectId: ID!\n status: MilestoneStatus!\n}\n\nenum MilestoneStatus {\n COMPLETED\n DELAYED\n IN_PROGRESS\n PENDING\n}\n\ntype Mutation {\n addMilestone(milestone: MilestoneInput!): Milestone!\n addProject(project: ProjectInput!): Project!\n addTask(task: TaskInput!): Task!\n updateProjectStatus(projectId: ID!, status: ProjectStatus!): ProjectUpdate!\n}\n\ninterface Node {\n id: ID!\n}\n\ntype Product @key(fields: \"upc\") @key(fields: \"id\") {\n featureMatrix: [[String!]]\n id: ID!\n projects: [Project!]\n upc: String!\n}\n\ntype Project implements Node & Timestamped @key(fields: \"id\") {\n alternativeProjects: [Project!]\n dependencies: [Project!]\n description: String\n endDate: String\n id: ID!\n milestoneGroups: [[Milestone!]]\n milestoneIds: [String!]\n milestones: [Milestone!]!\n name: String!\n priorityMatrix: [[[Task!]!]!]\n progress: Float\n relatedProducts: [Product!]!\n resourceGroups: [[ProjectResource!]!]!\n startDate: String\n status: ProjectStatus!\n tags: [String!]\n tasks: [Task!]!\n tasksByPhase: [[Task!]]!\n teamMembers: [Employee!]!\n}\n\nunion ProjectActivity = Milestone | ProjectUpdate | Task\n\ninput ProjectInput {\n description: String\n endDate: String\n name: String!\n startDate: String\n status: ProjectStatus!\n}\n\nunion ProjectResource = Employee | Milestone | Product | Task\n\nunion ProjectSearchResult = Milestone | Project | Task\n\nenum ProjectStatus {\n ACTIVE\n COMPLETED\n ON_HOLD\n PLANNING\n}\n\ntype ProjectUpdate implements Node {\n description: String!\n id: ID!\n metadata: String\n projectId: ID!\n timestamp: String!\n updateType: ProjectUpdateType!\n updatedById: Int!\n}\n\nenum ProjectUpdateType {\n MILESTONE_ADDED\n PROGRESS_UPDATE\n STATUS_CHANGE\n TASK_ASSIGNED\n TEAM_CHANGE\n}\n\ntype Query {\n archivedProjects: [Project!]!\n killService: Boolean!\n milestones(projectId: ID!): [Milestone!]!\n panic: Boolean!\n project(id: ID!): Project\n projectActivities(projectId: ID!): [ProjectActivity!]!\n projectResources(projectId: ID!): [ProjectResource!]!\n projectStatuses: [ProjectStatus!]!\n projectTags: [String!]\n projects: [Project!]!\n projectsByStatus(status: ProjectStatus!): [Project!]!\n resourceMatrix(projectId: ID!): [[ProjectResource!]!]!\n searchProjects(query: String!): [ProjectSearchResult!]!\n tasks(projectId: ID!): [Task!]!\n tasksByPriority(projectId: ID!): [[Task!]]\n}\n\ntype Shipping @key(fields: \"id trackingNumber\") {\n id: ID!\n trackingNumber: String!\n weight: Float!\n}\n\ntype Task implements Assignable & Node @key(fields: \"id\") {\n actualHours: Float\n assigneeId: Int\n attachmentUrls: [String!]!\n completedAt: String\n createdAt: String\n dependencies: [Task!]!\n description: String\n estimatedHours: Float\n id: ID!\n labels: [String!]\n milestoneId: ID\n name: String!\n priority: TaskPriority!\n projectId: ID!\n reviewerIds: [Int!]\n status: TaskStatus!\n subtasks: [Task!]\n}\n\ninput TaskInput {\n assigneeId: Int\n description: String\n estimatedHours: Float\n name: String!\n priority: TaskPriority!\n projectId: ID!\n status: TaskStatus!\n}\n\nenum TaskPriority {\n HIGH\n LOW\n MEDIUM\n URGENT\n}\n\nenum TaskStatus {\n BLOCKED\n COMPLETED\n IN_PROGRESS\n REVIEW\n TODO\n}\n\ninterface Timestamped {\n endDate: String\n startDate: String\n}\n\nscalar openfed__FieldSet\n\nscalar openfed__Scope" + }, + "graphqlClientSchema": "type Query {\n employee(id: Int!): Employee\n employeeAsList(id: Int!): [Employee]\n employees: [Employee]\n products: [Products!]!\n teammates(team: Department!): [Employee!]!\n firstEmployee: Employee!\n\n \"\"\" This is a GraphQL query that retrieves a list of employees.\"\"\"\n findEmployees(criteria: SearchInput): [Employee!]!\n productTypes: [Products!]!\n topSecretFederationFacts: [TopSecretFact!]!\n factTypes: [TopSecretFactType!]\n sharedThings(numOfA: Int!, numOfB: Int!): [Thing!]!\n shippings: [Shipping!]!\n findShipping(id: ID!, trackingNumber: ID!): Shipping!\n\n \"\"\"Returns the value of the received HTTP header.\"\"\"\n headerValue(name: String!): String!\n\n \"\"\"Returns the value of the given key in the WS initial payload.\"\"\"\n initPayloadValue(key: String!): String!\n initialPayload: Map\n\n \"\"\"Returns response after the given delay\"\"\"\n delay(response: String!, ms: Int!): String!\n bigResponse(artificialDelay: Int! = 0, bigObjects: Int! = 100, nestedObjects: Int! = 100, deeplyNestedObjects: Int! = 100): [BigObject!]!\n longResponse(artificialDelay: Int! = 0, bytes: Int!): String\n bigAbstractResponse: BigAbstractResponse\n rootFieldWithListArg(arg: [String!]!): [String!]!\n rootFieldWithNestedListArg(arg: [[String!]!]!): [[String!]!]!\n rootFieldWithListOfInputArg(arg: [InputType!]!): [InputResponse!]!\n rootFieldWithListOfEnumArg(arg: [EnumType!]!): [EnumType!]!\n rootFieldWithInput(arg: InputArg!): String!\n floatField(arg: Float): Float\n secret: Secret\n employeeFromEvent(id: Int!): Employee!\n employeeFromEventMyNats(employeeID: Int!): Employee!\n projects: [Project!]!\n project(id: ID!): Project\n projectStatuses: [ProjectStatus!]!\n projectsByStatus(status: ProjectStatus!): [Project!]!\n projectResources(projectId: ID!): [ProjectResource!]!\n searchProjects(query: String!): [ProjectSearchResult!]!\n milestones(projectId: ID!): [Milestone!]!\n tasks(projectId: ID!): [Task!]!\n projectActivities(projectId: ID!): [ProjectActivity!]!\n projectTags: [String!]\n archivedProjects: [Project!]!\n tasksByPriority(projectId: ID!): [[Task!]]\n resourceMatrix(projectId: ID!): [[ProjectResource!]!]!\n killService: Boolean!\n panic: Boolean!\n}\n\nscalar Upload\n\ntype Mutation {\n updateEmployeeTag(id: Int!, tag: String!): Employee\n singleUpload(file: Upload!): Boolean!\n singleUploadWithInput(arg: FileUpload!): Boolean!\n multipleUpload(files: [Upload!]!): Boolean!\n addFact(fact: TopSecretFactInput!): TopSecretFact!\n\n \"\"\" This mutation updates the availability status of an employee in the system.\n \"\"\"\n updateAvailability(employeeID: Int!, isAvailable: Boolean!): Employee!\n\n \"\"\" This mutation update the mood of an employee. \"\"\"\n updateMood(employeeID: Int!, mood: Mood!): Employee!\n updateEmployeeMyKafka(employeeID: Int!, update: UpdateEmployeeInput!): edfs__PublishResult!\n updateEmployeeMyNats(id: Int!, update: UpdateEmployeeInput!): edfs__PublishResult!\n updateEmployeeMyRedis(id: Int!, update: UpdateEmployeeInput!): edfs__PublishResult!\n updateEmployeeMyRedisOnCustomChannel(id: Int!, update: UpdateEmployeeInput!): edfs__PublishResult!\n addProject(project: ProjectInput!): Project!\n addMilestone(milestone: MilestoneInput!): Milestone!\n addTask(task: TaskInput!): Task!\n updateProjectStatus(projectId: ID!, status: ProjectStatus!): ProjectUpdate!\n}\n\ninput FileUpload {\n nested: DeeplyNestedFileUpload\n nestedList: [Upload!]\n}\n\ninput DeeplyNestedFileUpload {\n file: Upload!\n}\n\ntype Subscription {\n \"\"\"`currentTime` will return a stream of `Time` objects.\"\"\"\n currentTime: Time!\n countEmp(max: Int!, intervalMilliseconds: Int!): Int!\n countEmp2(max: Int!, intervalMilliseconds: Int!): Int!\n countFor(count: Int!): Int!\n countHob(max: Int!, intervalMilliseconds: Int!): Int!\n\n \"\"\"Returns a stream with the value of the received HTTP header.\"\"\"\n headerValue(name: String!, repeat: Int): TimestampedString!\n\n \"\"\"\n Returns a stream with the value of value of the given key in the WS initial payload.\n \"\"\"\n initPayloadValue(key: String!, repeat: Int): TimestampedString!\n\n \"\"\"Returns a stream with the value of the WS initial payload.\"\"\"\n initialPayload(repeat: Int): Map\n returnsError: String\n employeeUpdated(employeeID: Int!): Employee!\n employeeUpdatedMyKafka(employeeID: Int!): Employee!\n employeeUpdatedMyNats(id: Int!): Employee!\n employeeUpdatedNatsStream(id: Int!): Employee!\n employeeUpdatedMyRedis(id: Int!): Employee!\n employeeUpdates: Employee!\n filteredEmployeeUpdated(id: Int!): Employee!\n filteredEmployeeUpdatedMyKafka(employeeID: ID!): Employee!\n filteredEmployeeUpdatedMyKafkaWithListFieldArguments(firstIds: [ID!]!, secondIds: [ID!]!): Employee!\n filteredEmployeeUpdatedMyKafkaWithNestedListFieldArgument(input: KafkaInput!): Employee!\n filteredEmployeeUpdatedMyRedis(ids: [ID!]!): Employee!\n}\n\nenum Department {\n ENGINEERING\n MARKETING\n OPERATIONS\n}\n\ninterface RoleType {\n departments: [Department!]!\n title: [String!]!\n employees: [Employee!]!\n}\n\nenum EngineerType {\n BACKEND\n FRONTEND\n FULLSTACK\n}\n\ninterface Identifiable {\n id: Int!\n}\n\nenum OperationType {\n FINANCE\n HUMAN_RESOURCES\n}\n\ntype Details {\n forename: String!\n location: Country!\n surname: String!\n pastLocations: [City!]!\n middlename: String @deprecated\n hasChildren: Boolean!\n maritalStatus: MaritalStatus\n nationality: Nationality!\n pets: [Pet]\n}\n\ntype City {\n type: String!\n name: String!\n country: Country\n}\n\ntype Country {\n key: CountryKey!\n language: String\n}\n\ntype CountryKey {\n name: String!\n}\n\nenum Mood {\n HAPPY\n SAD\n}\n\ntype ErrorWrapper {\n okField: String\n errorField: String\n}\n\ntype Time {\n unixTime: Int!\n timeStamp: String!\n}\n\nunion Products = Consultancy | Cosmo | SDK | Documentation\n\ninterface IProduct {\n upc: ID!\n engineers: [Employee!]!\n}\n\ntype Consultancy {\n upc: ID!\n lead: Employee!\n isLeadAvailable: Boolean\n name: ProductName!\n}\n\nenum Class {\n FISH\n MAMMAL\n REPTILE\n}\n\nenum Gender {\n FEMALE\n MALE\n UNKNOWN\n}\n\ninterface Animal {\n class: Class!\n gender: Gender!\n}\n\nenum CatType {\n HOME\n STREET\n}\n\nenum DogBreed {\n GOLDEN_RETRIEVER\n POODLE\n ROTTWEILER\n YORKSHIRE_TERRIER\n}\n\nenum MaritalStatus {\n ENGAGED\n MARRIED\n}\n\nenum Nationality {\n AMERICAN\n DUTCH\n ENGLISH\n GERMAN\n INDIAN\n SPANISH\n UKRAINIAN\n}\n\n\"\"\" Allows to filter employees by their details. \"\"\"\ninput SearchInput {\n hasPets: Boolean\n nationality: Nationality\n nested: NestedSearchInput\n}\n\ninput NestedSearchInput {\n maritalStatus: MaritalStatus\n hasChildren: Boolean\n}\n\nenum ExerciseType {\n CALISTHENICS\n HIKING\n SPORT\n STRENGTH_TRAINING\n}\n\ninterface Experience {\n yearsOfExperience: Float!\n}\n\nenum GameGenre {\n ADVENTURE\n BOARD\n FPS\n CARD\n RPG\n ROGUELITE\n SIMULATION\n STRATEGY\n}\n\nenum ProgrammingLanguage {\n CSHARP\n GO\n RUST\n TYPESCRIPT\n}\n\ninterface Hobby {\n employees: [Employee!]!\n}\n\ntype Thing {\n a: String!\n b: String!\n}\n\ninput TopSecretFactInput {\n title: String!\n description: FactContent!\n factType: TopSecretFactType!\n}\n\nenum TopSecretFactType {\n DIRECTIVE\n ENTITY\n MISCELLANEOUS\n}\n\ninterface TopSecretFact {\n description: FactContent!\n factType: TopSecretFactType\n}\n\nscalar FactContent\n\nenum ProductName {\n CONSULTANCY\n COSMO\n ENGINE\n FINANCE\n HUMAN_RESOURCES\n MARKETING\n SDK\n}\n\ntype Documentation {\n url(product: ProductName!): String!\n urls(products: [ProductName!]!): [String!]!\n}\n\ntype Shipping {\n id: ID!\n carrier: String!\n trackingNumber: String!\n weight: Float!\n estimate: Float!\n}\n\ntype Secret {\n value: String\n}\n\ninput InputArg {\n enums: [EnumType!]\n enum: EnumType\n string: String\n strings: [String!]\n}\n\nenum EnumType {\n A\n B\n C\n}\n\ninput InputType {\n arg: String!\n}\n\ntype InputResponse {\n arg: String!\n}\n\nscalar Map\n\ntype TimestampedString {\n \"\"\"The value of the string.\"\"\"\n value: String!\n\n \"\"\"The timestamp when the response was generated.\"\"\"\n unixTime: Int!\n\n \"\"\"Sequence number\"\"\"\n seq: Int!\n\n \"\"\"Total number of responses to be sent\"\"\"\n total: Int!\n initialPayload: Map\n}\n\ntype BigObject {\n nestedObjects: [NestedObject!]!\n}\n\ntype NestedObject {\n deeplyNestedObjects: [DeeplyNestedObject!]!\n}\n\ntype DeeplyNestedObject {\n aFieldOnDeeplyNestedObject: String!\n bFieldOnDeeplyNestedObject: Int!\n cFieldOnDeeplyNestedObject: Boolean!\n dFieldOnDeeplyNestedObject: Float!\n eFieldOnDeeplyNestedObject: String!\n fFieldOnDeeplyNestedObject: Int!\n gFieldOnDeeplyNestedObject: Boolean!\n hFieldOnDeeplyNestedObject: Float!\n iFieldOnDeeplyNestedObject: String!\n jFieldOnDeeplyNestedObject: Int!\n kFieldOnDeeplyNestedObject: Boolean!\n lFieldOnDeeplyNestedObject: Float!\n mFieldOnDeeplyNestedObject: String!\n nFieldOnDeeplyNestedObject: Int!\n oFieldOnDeeplyNestedObject: Boolean!\n pFieldOnDeeplyNestedObject: Float!\n qFieldOnDeeplyNestedObject: String!\n rFieldOnDeeplyNestedObject: Int!\n sFieldOnDeeplyNestedObject: Boolean!\n tFieldOnDeeplyNestedObject: Float!\n uFieldOnDeeplyNestedObject: String!\n vFieldOnDeeplyNestedObject: Int!\n wFieldOnDeeplyNestedObject: Boolean!\n xFieldOnDeeplyNestedObject: Float!\n yFieldOnDeeplyNestedObject: String!\n zFieldOnDeeplyNestedObject: Int!\n}\n\nunion BigAbstractResponse = ABigObject | BBigObject | CBigObject | DBigObject | EBigObject | FBigObject | GBigObject | HBigObject | IBigObject | JBigObject | KBigObject | LBigObject | MBigObject | NBigObject | OBigObject | PBigObject | QBigObject | RBigObject | SBigObject | TBigObject | UBigObject | VBigObject | WBigObject | XBigObject | YBigObject | ZBigObject\n\ntype ABigObject {\n aFieldOnABigObject: String!\n bFieldOnABigObject: Int!\n cFieldOnABigObject: Boolean!\n dFieldOnABigObject: Float!\n eFieldOnABigObject: String!\n fFieldOnABigObject: Int!\n gFieldOnABigObject: Boolean!\n hFieldOnABigObject: Float!\n iFieldOnABigObject: String!\n jFieldOnABigObject: Int!\n kFieldOnABigObject: Boolean!\n lFieldOnABigObject: Float!\n mFieldOnABigObject: String!\n nFieldOnABigObject: Int!\n oFieldOnABigObject: Boolean!\n pFieldOnABigObject: Float!\n qFieldOnABigObject: String!\n rFieldOnABigObject: Int!\n sFieldOnABigObject: Boolean!\n tFieldOnABigObject: Float!\n uFieldOnABigObject: String!\n vFieldOnABigObject: Int!\n wFieldOnABigObject: Boolean!\n xFieldOnABigObject: Float!\n yFieldOnABigObject: String!\n zFieldOnABigObject: Int!\n}\n\ntype BBigObject {\n aFieldOnBBigObject: String!\n bFieldOnBBigObject: Int!\n cFieldOnBBigObject: Boolean!\n dFieldOnBBigObject: Float!\n eFieldOnBBigObject: String!\n fFieldOnBBigObject: Int!\n gFieldOnBBigObject: Boolean!\n hFieldOnBBigObject: Float!\n iFieldOnBBigObject: String!\n jFieldOnBBigObject: Int!\n kFieldOnBBigObject: Boolean!\n lFieldOnBBigObject: Float!\n mFieldOnBBigObject: String!\n nFieldOnBBigObject: Int!\n oFieldOnBBigObject: Boolean!\n pFieldOnBBigObject: Float!\n qFieldOnBBigObject: String!\n rFieldOnBBigObject: Int!\n sFieldOnBBigObject: Boolean!\n tFieldOnBBigObject: Float!\n uFieldOnBBigObject: String!\n vFieldOnBBigObject: Int!\n wFieldOnBBigObject: Boolean!\n xFieldOnBBigObject: Float!\n yFieldOnBBigObject: String!\n zFieldOnBBigObject: Int!\n}\n\ntype CBigObject {\n aFieldOnCBigObject: String!\n bFieldOnCBigObject: Int!\n cFieldOnCBigObject: Boolean!\n dFieldOnCBigObject: Float!\n eFieldOnCBigObject: String!\n fFieldOnCBigObject: Int!\n gFieldOnCBigObject: Boolean!\n hFieldOnCBigObject: Float!\n iFieldOnCBigObject: String!\n jFieldOnCBigObject: Int!\n kFieldOnCBigObject: Boolean!\n lFieldOnCBigObject: Float!\n mFieldOnCBigObject: String!\n nFieldOnCBigObject: Int!\n oFieldOnCBigObject: Boolean!\n pFieldOnCBigObject: Float!\n qFieldOnCBigObject: String!\n rFieldOnCBigObject: Int!\n sFieldOnCBigObject: Boolean!\n tFieldOnCBigObject: Float!\n uFieldOnCBigObject: String!\n vFieldOnCBigObject: Int!\n wFieldOnCBigObject: Boolean!\n xFieldOnCBigObject: Float!\n yFieldOnCBigObject: String!\n zFieldOnCBigObject: Int!\n}\n\ntype DBigObject {\n aFieldOnDBigObject: String!\n bFieldOnDBigObject: Int!\n cFieldOnDBigObject: Boolean!\n dFieldOnDBigObject: Float!\n eFieldOnDBigObject: String!\n fFieldOnDBigObject: Int!\n gFieldOnDBigObject: Boolean!\n hFieldOnDBigObject: Float!\n iFieldOnDBigObject: String!\n jFieldOnDBigObject: Int!\n kFieldOnDBigObject: Boolean!\n lFieldOnDBigObject: Float!\n mFieldOnDBigObject: String!\n nFieldOnDBigObject: Int!\n oFieldOnDBigObject: Boolean!\n pFieldOnDBigObject: Float!\n qFieldOnDBigObject: String!\n rFieldOnDBigObject: Int!\n sFieldOnDBigObject: Boolean!\n tFieldOnDBigObject: Float!\n uFieldOnDBigObject: String!\n vFieldOnDBigObject: Int!\n wFieldOnDBigObject: Boolean!\n xFieldOnDBigObject: Float!\n yFieldOnDBigObject: String!\n zFieldOnDBigObject: Int!\n}\n\ntype EBigObject {\n aFieldOnEBigObject: String!\n bFieldOnEBigObject: Int!\n cFieldOnEBigObject: Boolean!\n dFieldOnEBigObject: Float!\n eFieldOnEBigObject: String!\n fFieldOnEBigObject: Int!\n gFieldOnEBigObject: Boolean!\n hFieldOnEBigObject: Float!\n iFieldOnEBigObject: String!\n jFieldOnEBigObject: Int!\n kFieldOnEBigObject: Boolean!\n lFieldOnEBigObject: Float!\n mFieldOnEBigObject: String!\n nFieldOnEBigObject: Int!\n oFieldOnEBigObject: Boolean!\n pFieldOnEBigObject: Float!\n qFieldOnEBigObject: String!\n rFieldOnEBigObject: Int!\n sFieldOnEBigObject: Boolean!\n tFieldOnEBigObject: Float!\n uFieldOnEBigObject: String!\n vFieldOnEBigObject: Int!\n wFieldOnEBigObject: Boolean!\n xFieldOnEBigObject: Float!\n yFieldOnEBigObject: String!\n zFieldOnEBigObject: Int!\n}\n\ntype FBigObject {\n aFieldOnFBigObject: String!\n bFieldOnFBigObject: Int!\n cFieldOnFBigObject: Boolean!\n dFieldOnFBigObject: Float!\n eFieldOnFBigObject: String!\n fFieldOnFBigObject: Int!\n gFieldOnFBigObject: Boolean!\n hFieldOnFBigObject: Float!\n iFieldOnFBigObject: String!\n jFieldOnFBigObject: Int!\n kFieldOnFBigObject: Boolean!\n lFieldOnFBigObject: Float!\n mFieldOnFBigObject: String!\n nFieldOnFBigObject: Int!\n oFieldOnFBigObject: Boolean!\n pFieldOnFBigObject: Float!\n qFieldOnFBigObject: String!\n rFieldOnFBigObject: Int!\n sFieldOnFBigObject: Boolean!\n tFieldOnFBigObject: Float!\n uFieldOnFBigObject: String!\n vFieldOnFBigObject: Int!\n wFieldOnFBigObject: Boolean!\n xFieldOnFBigObject: Float!\n yFieldOnFBigObject: String!\n zFieldOnFBigObject: Int!\n}\n\ntype GBigObject {\n aFieldOnGBigObject: String!\n bFieldOnGBigObject: Int!\n cFieldOnGBigObject: Boolean!\n dFieldOnGBigObject: Float!\n eFieldOnGBigObject: String!\n fFieldOnGBigObject: Int!\n gFieldOnGBigObject: Boolean!\n hFieldOnGBigObject: Float!\n iFieldOnGBigObject: String!\n jFieldOnGBigObject: Int!\n kFieldOnGBigObject: Boolean!\n lFieldOnGBigObject: Float!\n mFieldOnGBigObject: String!\n nFieldOnGBigObject: Int!\n oFieldOnGBigObject: Boolean!\n pFieldOnGBigObject: Float!\n qFieldOnGBigObject: String!\n rFieldOnGBigObject: Int!\n sFieldOnGBigObject: Boolean!\n tFieldOnGBigObject: Float!\n uFieldOnGBigObject: String!\n vFieldOnGBigObject: Int!\n wFieldOnGBigObject: Boolean!\n xFieldOnGBigObject: Float!\n yFieldOnGBigObject: String!\n zFieldOnGBigObject: Int!\n}\n\ntype HBigObject {\n aFieldOnHBigObject: String!\n bFieldOnHBigObject: Int!\n cFieldOnHBigObject: Boolean!\n dFieldOnHBigObject: Float!\n eFieldOnHBigObject: String!\n fFieldOnHBigObject: Int!\n gFieldOnHBigObject: Boolean!\n hFieldOnHBigObject: Float!\n iFieldOnHBigObject: String!\n jFieldOnHBigObject: Int!\n kFieldOnHBigObject: Boolean!\n lFieldOnHBigObject: Float!\n mFieldOnHBigObject: String!\n nFieldOnHBigObject: Int!\n oFieldOnHBigObject: Boolean!\n pFieldOnHBigObject: Float!\n qFieldOnHBigObject: String!\n rFieldOnHBigObject: Int!\n sFieldOnHBigObject: Boolean!\n tFieldOnHBigObject: Float!\n uFieldOnHBigObject: String!\n vFieldOnHBigObject: Int!\n wFieldOnHBigObject: Boolean!\n xFieldOnHBigObject: Float!\n yFieldOnHBigObject: String!\n zFieldOnHBigObject: Int!\n}\n\ntype IBigObject {\n aFieldOnIBigObject: String!\n bFieldOnIBigObject: Int!\n cFieldOnIBigObject: Boolean!\n dFieldOnIBigObject: Float!\n eFieldOnIBigObject: String!\n fFieldOnIBigObject: Int!\n gFieldOnIBigObject: Boolean!\n hFieldOnIBigObject: Float!\n iFieldOnIBigObject: String!\n jFieldOnIBigObject: Int!\n kFieldOnIBigObject: Boolean!\n lFieldOnIBigObject: Float!\n mFieldOnIBigObject: String!\n nFieldOnIBigObject: Int!\n oFieldOnIBigObject: Boolean!\n pFieldOnIBigObject: Float!\n qFieldOnIBigObject: String!\n rFieldOnIBigObject: Int!\n sFieldOnIBigObject: Boolean!\n tFieldOnIBigObject: Float!\n uFieldOnIBigObject: String!\n vFieldOnIBigObject: Int!\n wFieldOnIBigObject: Boolean!\n xFieldOnIBigObject: Float!\n yFieldOnIBigObject: String!\n zFieldOnIBigObject: Int!\n}\n\ntype JBigObject {\n aFieldOnJBigObject: String!\n bFieldOnJBigObject: Int!\n cFieldOnJBigObject: Boolean!\n dFieldOnJBigObject: Float!\n eFieldOnJBigObject: String!\n fFieldOnJBigObject: Int!\n gFieldOnJBigObject: Boolean!\n hFieldOnJBigObject: Float!\n iFieldOnJBigObject: String!\n jFieldOnJBigObject: Int!\n kFieldOnJBigObject: Boolean!\n lFieldOnJBigObject: Float!\n mFieldOnJBigObject: String!\n nFieldOnJBigObject: Int!\n oFieldOnJBigObject: Boolean!\n pFieldOnJBigObject: Float!\n qFieldOnJBigObject: String!\n rFieldOnJBigObject: Int!\n sFieldOnJBigObject: Boolean!\n tFieldOnJBigObject: Float!\n uFieldOnJBigObject: String!\n vFieldOnJBigObject: Int!\n wFieldOnJBigObject: Boolean!\n xFieldOnJBigObject: Float!\n yFieldOnJBigObject: String!\n zFieldOnJBigObject: Int!\n}\n\ntype KBigObject {\n aFieldOnKBigObject: String!\n bFieldOnKBigObject: Int!\n cFieldOnKBigObject: Boolean!\n dFieldOnKBigObject: Float!\n eFieldOnKBigObject: String!\n fFieldOnKBigObject: Int!\n gFieldOnKBigObject: Boolean!\n hFieldOnKBigObject: Float!\n iFieldOnKBigObject: String!\n jFieldOnKBigObject: Int!\n kFieldOnKBigObject: Boolean!\n lFieldOnKBigObject: Float!\n mFieldOnKBigObject: String!\n nFieldOnKBigObject: Int!\n oFieldOnKBigObject: Boolean!\n pFieldOnKBigObject: Float!\n qFieldOnKBigObject: String!\n rFieldOnKBigObject: Int!\n sFieldOnKBigObject: Boolean!\n tFieldOnKBigObject: Float!\n uFieldOnKBigObject: String!\n vFieldOnKBigObject: Int!\n wFieldOnKBigObject: Boolean!\n xFieldOnKBigObject: Float!\n yFieldOnKBigObject: String!\n zFieldOnKBigObject: Int!\n}\n\ntype LBigObject {\n aFieldOnLBigObject: String!\n bFieldOnLBigObject: Int!\n cFieldOnLBigObject: Boolean!\n dFieldOnLBigObject: Float!\n eFieldOnLBigObject: String!\n fFieldOnLBigObject: Int!\n gFieldOnLBigObject: Boolean!\n hFieldOnLBigObject: Float!\n iFieldOnLBigObject: String!\n jFieldOnLBigObject: Int!\n kFieldOnLBigObject: Boolean!\n lFieldOnLBigObject: Float!\n mFieldOnLBigObject: String!\n nFieldOnLBigObject: Int!\n oFieldOnLBigObject: Boolean!\n pFieldOnLBigObject: Float!\n qFieldOnLBigObject: String!\n rFieldOnLBigObject: Int!\n sFieldOnLBigObject: Boolean!\n tFieldOnLBigObject: Float!\n uFieldOnLBigObject: String!\n vFieldOnLBigObject: Int!\n wFieldOnLBigObject: Boolean!\n xFieldOnLBigObject: Float!\n yFieldOnLBigObject: String!\n zFieldOnLBigObject: Int!\n}\n\ntype MBigObject {\n aFieldOnMBigObject: String!\n bFieldOnMBigObject: Int!\n cFieldOnMBigObject: Boolean!\n dFieldOnMBigObject: Float!\n eFieldOnMBigObject: String!\n fFieldOnMBigObject: Int!\n gFieldOnMBigObject: Boolean!\n hFieldOnMBigObject: Float!\n iFieldOnMBigObject: String!\n jFieldOnMBigObject: Int!\n kFieldOnMBigObject: Boolean!\n lFieldOnMBigObject: Float!\n mFieldOnMBigObject: String!\n nFieldOnMBigObject: Int!\n oFieldOnMBigObject: Boolean!\n pFieldOnMBigObject: Float!\n qFieldOnMBigObject: String!\n rFieldOnMBigObject: Int!\n sFieldOnMBigObject: Boolean!\n tFieldOnMBigObject: Float!\n uFieldOnMBigObject: String!\n vFieldOnMBigObject: Int!\n wFieldOnMBigObject: Boolean!\n xFieldOnMBigObject: Float!\n yFieldOnMBigObject: String!\n zFieldOnMBigObject: Int!\n}\n\ntype NBigObject {\n aFieldOnNBigObject: String!\n bFieldOnNBigObject: Int!\n cFieldOnNBigObject: Boolean!\n dFieldOnNBigObject: Float!\n eFieldOnNBigObject: String!\n fFieldOnNBigObject: Int!\n gFieldOnNBigObject: Boolean!\n hFieldOnNBigObject: Float!\n iFieldOnNBigObject: String!\n jFieldOnNBigObject: Int!\n kFieldOnNBigObject: Boolean!\n lFieldOnNBigObject: Float!\n mFieldOnNBigObject: String!\n nFieldOnNBigObject: Int!\n oFieldOnNBigObject: Boolean!\n pFieldOnNBigObject: Float!\n qFieldOnNBigObject: String!\n rFieldOnNBigObject: Int!\n sFieldOnNBigObject: Boolean!\n tFieldOnNBigObject: Float!\n uFieldOnNBigObject: String!\n vFieldOnNBigObject: Int!\n wFieldOnNBigObject: Boolean!\n xFieldOnNBigObject: Float!\n yFieldOnNBigObject: String!\n zFieldOnNBigObject: Int!\n}\n\ntype OBigObject {\n aFieldOnOBigObject: String!\n bFieldOnOBigObject: Int!\n cFieldOnOBigObject: Boolean!\n dFieldOnOBigObject: Float!\n eFieldOnOBigObject: String!\n fFieldOnOBigObject: Int!\n gFieldOnOBigObject: Boolean!\n hFieldOnOBigObject: Float!\n iFieldOnOBigObject: String!\n jFieldOnOBigObject: Int!\n kFieldOnOBigObject: Boolean!\n lFieldOnOBigObject: Float!\n mFieldOnOBigObject: String!\n nFieldOnOBigObject: Int!\n oFieldOnOBigObject: Boolean!\n pFieldOnOBigObject: Float!\n qFieldOnOBigObject: String!\n rFieldOnOBigObject: Int!\n sFieldOnOBigObject: Boolean!\n tFieldOnOBigObject: Float!\n uFieldOnOBigObject: String!\n vFieldOnOBigObject: Int!\n wFieldOnOBigObject: Boolean!\n xFieldOnOBigObject: Float!\n yFieldOnOBigObject: String!\n zFieldOnOBigObject: Int!\n}\n\ntype PBigObject {\n aFieldOnPBigObject: String!\n bFieldOnPBigObject: Int!\n cFieldOnPBigObject: Boolean!\n dFieldOnPBigObject: Float!\n eFieldOnPBigObject: String!\n fFieldOnPBigObject: Int!\n gFieldOnPBigObject: Boolean!\n hFieldOnPBigObject: Float!\n iFieldOnPBigObject: String!\n jFieldOnPBigObject: Int!\n kFieldOnPBigObject: Boolean!\n lFieldOnPBigObject: Float!\n mFieldOnPBigObject: String!\n nFieldOnPBigObject: Int!\n oFieldOnPBigObject: Boolean!\n pFieldOnPBigObject: Float!\n qFieldOnPBigObject: String!\n rFieldOnPBigObject: Int!\n sFieldOnPBigObject: Boolean!\n tFieldOnPBigObject: Float!\n uFieldOnPBigObject: String!\n vFieldOnPBigObject: Int!\n wFieldOnPBigObject: Boolean!\n xFieldOnPBigObject: Float!\n yFieldOnPBigObject: String!\n zFieldOnPBigObject: Int!\n}\n\ntype QBigObject {\n aFieldOnQBigObject: String!\n bFieldOnQBigObject: Int!\n cFieldOnQBigObject: Boolean!\n dFieldOnQBigObject: Float!\n eFieldOnQBigObject: String!\n fFieldOnQBigObject: Int!\n gFieldOnQBigObject: Boolean!\n hFieldOnQBigObject: Float!\n iFieldOnQBigObject: String!\n jFieldOnQBigObject: Int!\n kFieldOnQBigObject: Boolean!\n lFieldOnQBigObject: Float!\n mFieldOnQBigObject: String!\n nFieldOnQBigObject: Int!\n oFieldOnQBigObject: Boolean!\n pFieldOnQBigObject: Float!\n qFieldOnQBigObject: String!\n rFieldOnQBigObject: Int!\n sFieldOnQBigObject: Boolean!\n tFieldOnQBigObject: Float!\n uFieldOnQBigObject: String!\n vFieldOnQBigObject: Int!\n wFieldOnQBigObject: Boolean!\n xFieldOnQBigObject: Float!\n yFieldOnQBigObject: String!\n zFieldOnQBigObject: Int!\n}\n\ntype RBigObject {\n aFieldOnRBigObject: String!\n bFieldOnRBigObject: Int!\n cFieldOnRBigObject: Boolean!\n dFieldOnRBigObject: Float!\n eFieldOnRBigObject: String!\n fFieldOnRBigObject: Int!\n gFieldOnRBigObject: Boolean!\n hFieldOnRBigObject: Float!\n iFieldOnRBigObject: String!\n jFieldOnRBigObject: Int!\n kFieldOnRBigObject: Boolean!\n lFieldOnRBigObject: Float!\n mFieldOnRBigObject: String!\n nFieldOnRBigObject: Int!\n oFieldOnRBigObject: Boolean!\n pFieldOnRBigObject: Float!\n qFieldOnRBigObject: String!\n rFieldOnRBigObject: Int!\n sFieldOnRBigObject: Boolean!\n tFieldOnRBigObject: Float!\n uFieldOnRBigObject: String!\n vFieldOnRBigObject: Int!\n wFieldOnRBigObject: Boolean!\n xFieldOnRBigObject: Float!\n yFieldOnRBigObject: String!\n zFieldOnRBigObject: Int!\n}\n\ntype SBigObject {\n aFieldOnSBigObject: String!\n bFieldOnSBigObject: Int!\n cFieldOnSBigObject: Boolean!\n dFieldOnSBigObject: Float!\n eFieldOnSBigObject: String!\n fFieldOnSBigObject: Int!\n gFieldOnSBigObject: Boolean!\n hFieldOnSBigObject: Float!\n iFieldOnSBigObject: String!\n jFieldOnSBigObject: Int!\n kFieldOnSBigObject: Boolean!\n lFieldOnSBigObject: Float!\n mFieldOnSBigObject: String!\n nFieldOnSBigObject: Int!\n oFieldOnSBigObject: Boolean!\n pFieldOnSBigObject: Float!\n qFieldOnSBigObject: String!\n rFieldOnSBigObject: Int!\n sFieldOnSBigObject: Boolean!\n tFieldOnSBigObject: Float!\n uFieldOnSBigObject: String!\n vFieldOnSBigObject: Int!\n wFieldOnSBigObject: Boolean!\n xFieldOnSBigObject: Float!\n yFieldOnSBigObject: String!\n zFieldOnSBigObject: Int!\n}\n\ntype TBigObject {\n aFieldOnTBigObject: String!\n bFieldOnTBigObject: Int!\n cFieldOnTBigObject: Boolean!\n dFieldOnTBigObject: Float!\n eFieldOnTBigObject: String!\n fFieldOnTBigObject: Int!\n gFieldOnTBigObject: Boolean!\n hFieldOnTBigObject: Float!\n iFieldOnTBigObject: String!\n jFieldOnTBigObject: Int!\n kFieldOnTBigObject: Boolean!\n lFieldOnTBigObject: Float!\n mFieldOnTBigObject: String!\n nFieldOnTBigObject: Int!\n oFieldOnTBigObject: Boolean!\n pFieldOnTBigObject: Float!\n qFieldOnTBigObject: String!\n rFieldOnTBigObject: Int!\n sFieldOnTBigObject: Boolean!\n tFieldOnTBigObject: Float!\n uFieldOnTBigObject: String!\n vFieldOnTBigObject: Int!\n wFieldOnTBigObject: Boolean!\n xFieldOnTBigObject: Float!\n yFieldOnTBigObject: String!\n zFieldOnTBigObject: Int!\n}\n\ntype UBigObject {\n aFieldOnUBigObject: String!\n bFieldOnUBigObject: Int!\n cFieldOnUBigObject: Boolean!\n dFieldOnUBigObject: Float!\n eFieldOnUBigObject: String!\n fFieldOnUBigObject: Int!\n gFieldOnUBigObject: Boolean!\n hFieldOnUBigObject: Float!\n iFieldOnUBigObject: String!\n jFieldOnUBigObject: Int!\n kFieldOnUBigObject: Boolean!\n lFieldOnUBigObject: Float!\n mFieldOnUBigObject: String!\n nFieldOnUBigObject: Int!\n oFieldOnUBigObject: Boolean!\n pFieldOnUBigObject: Float!\n qFieldOnUBigObject: String!\n rFieldOnUBigObject: Int!\n sFieldOnUBigObject: Boolean!\n tFieldOnUBigObject: Float!\n uFieldOnUBigObject: String!\n vFieldOnUBigObject: Int!\n wFieldOnUBigObject: Boolean!\n xFieldOnUBigObject: Float!\n yFieldOnUBigObject: String!\n zFieldOnUBigObject: Int!\n}\n\ntype VBigObject {\n aFieldOnVBigObject: String!\n bFieldOnVBigObject: Int!\n cFieldOnVBigObject: Boolean!\n dFieldOnVBigObject: Float!\n eFieldOnVBigObject: String!\n fFieldOnVBigObject: Int!\n gFieldOnVBigObject: Boolean!\n hFieldOnVBigObject: Float!\n iFieldOnVBigObject: String!\n jFieldOnVBigObject: Int!\n kFieldOnVBigObject: Boolean!\n lFieldOnVBigObject: Float!\n mFieldOnVBigObject: String!\n nFieldOnVBigObject: Int!\n oFieldOnVBigObject: Boolean!\n pFieldOnVBigObject: Float!\n qFieldOnVBigObject: String!\n rFieldOnVBigObject: Int!\n sFieldOnVBigObject: Boolean!\n tFieldOnVBigObject: Float!\n uFieldOnVBigObject: String!\n vFieldOnVBigObject: Int!\n wFieldOnVBigObject: Boolean!\n xFieldOnVBigObject: Float!\n yFieldOnVBigObject: String!\n zFieldOnVBigObject: Int!\n}\n\ntype WBigObject {\n aFieldOnWBigObject: String!\n bFieldOnWBigObject: Int!\n cFieldOnWBigObject: Boolean!\n dFieldOnWBigObject: Float!\n eFieldOnWBigObject: String!\n fFieldOnWBigObject: Int!\n gFieldOnWBigObject: Boolean!\n hFieldOnWBigObject: Float!\n iFieldOnWBigObject: String!\n jFieldOnWBigObject: Int!\n kFieldOnWBigObject: Boolean!\n lFieldOnWBigObject: Float!\n mFieldOnWBigObject: String!\n nFieldOnWBigObject: Int!\n oFieldOnWBigObject: Boolean!\n pFieldOnWBigObject: Float!\n qFieldOnWBigObject: String!\n rFieldOnWBigObject: Int!\n sFieldOnWBigObject: Boolean!\n tFieldOnWBigObject: Float!\n uFieldOnWBigObject: String!\n vFieldOnWBigObject: Int!\n wFieldOnWBigObject: Boolean!\n xFieldOnWBigObject: Float!\n yFieldOnWBigObject: String!\n zFieldOnWBigObject: Int!\n}\n\ntype XBigObject {\n aFieldOnXBigObject: String!\n bFieldOnXBigObject: Int!\n cFieldOnXBigObject: Boolean!\n dFieldOnXBigObject: Float!\n eFieldOnXBigObject: String!\n fFieldOnXBigObject: Int!\n gFieldOnXBigObject: Boolean!\n hFieldOnXBigObject: Float!\n iFieldOnXBigObject: String!\n jFieldOnXBigObject: Int!\n kFieldOnXBigObject: Boolean!\n lFieldOnXBigObject: Float!\n mFieldOnXBigObject: String!\n nFieldOnXBigObject: Int!\n oFieldOnXBigObject: Boolean!\n pFieldOnXBigObject: Float!\n qFieldOnXBigObject: String!\n rFieldOnXBigObject: Int!\n sFieldOnXBigObject: Boolean!\n tFieldOnXBigObject: Float!\n uFieldOnXBigObject: String!\n vFieldOnXBigObject: Int!\n wFieldOnXBigObject: Boolean!\n xFieldOnXBigObject: Float!\n yFieldOnXBigObject: String!\n zFieldOnXBigObject: Int!\n}\n\ntype YBigObject {\n aFieldOnYBigObject: String!\n bFieldOnYBigObject: Int!\n cFieldOnYBigObject: Boolean!\n dFieldOnYBigObject: Float!\n eFieldOnYBigObject: String!\n fFieldOnYBigObject: Int!\n gFieldOnYBigObject: Boolean!\n hFieldOnYBigObject: Float!\n iFieldOnYBigObject: String!\n jFieldOnYBigObject: Int!\n kFieldOnYBigObject: Boolean!\n lFieldOnYBigObject: Float!\n mFieldOnYBigObject: String!\n nFieldOnYBigObject: Int!\n oFieldOnYBigObject: Boolean!\n pFieldOnYBigObject: Float!\n qFieldOnYBigObject: String!\n rFieldOnYBigObject: Int!\n sFieldOnYBigObject: Boolean!\n tFieldOnYBigObject: Float!\n uFieldOnYBigObject: String!\n vFieldOnYBigObject: Int!\n wFieldOnYBigObject: Boolean!\n xFieldOnYBigObject: Float!\n yFieldOnYBigObject: String!\n zFieldOnYBigObject: Int!\n}\n\ntype ZBigObject {\n aFieldOnZBigObject: String!\n bFieldOnZBigObject: Int!\n cFieldOnZBigObject: Boolean!\n dFieldOnZBigObject: Float!\n eFieldOnZBigObject: String!\n fFieldOnZBigObject: Int!\n gFieldOnZBigObject: Boolean!\n hFieldOnZBigObject: Float!\n iFieldOnZBigObject: String!\n jFieldOnZBigObject: Int!\n kFieldOnZBigObject: Boolean!\n lFieldOnZBigObject: Float!\n mFieldOnZBigObject: String!\n nFieldOnZBigObject: Int!\n oFieldOnZBigObject: Boolean!\n pFieldOnZBigObject: Float!\n qFieldOnZBigObject: String!\n rFieldOnZBigObject: Int!\n sFieldOnZBigObject: Boolean!\n tFieldOnZBigObject: Float!\n uFieldOnZBigObject: String!\n vFieldOnZBigObject: Int!\n wFieldOnZBigObject: Boolean!\n xFieldOnZBigObject: Float!\n yFieldOnZBigObject: String!\n zFieldOnZBigObject: Int!\n}\n\nscalar openfed__SubscriptionFilterValue\n\ninput openfed__SubscriptionFieldCondition {\n fieldPath: String!\n values: [openfed__SubscriptionFilterValue]!\n}\n\ninput openfed__SubscriptionFilterCondition {\n AND: [openfed__SubscriptionFilterCondition!]\n IN: openfed__SubscriptionFieldCondition\n NOT: openfed__SubscriptionFilterCondition\n OR: [openfed__SubscriptionFilterCondition!]\n}\n\ninput UpdateEmployeeInput {\n name: String\n email: String\n}\n\ninput KafkaInput {\n ids: [Int!]!\n}\n\ntype edfs__PublishResult {\n success: Boolean!\n}\n\ninput ProjectInput {\n name: String!\n description: String\n startDate: String\n endDate: String\n status: ProjectStatus!\n}\n\ninput MilestoneInput {\n projectId: ID!\n name: String!\n description: String\n dueDate: String\n status: MilestoneStatus!\n}\n\ninput TaskInput {\n projectId: ID!\n assigneeId: Int\n name: String!\n description: String\n priority: TaskPriority!\n status: TaskStatus!\n estimatedHours: Float\n}\n\ninterface Node {\n id: ID!\n}\n\ninterface Timestamped {\n startDate: String\n endDate: String\n}\n\ninterface Assignable {\n assigneeId: Int\n}\n\nenum ProjectStatus {\n PLANNING\n ACTIVE\n COMPLETED\n ON_HOLD\n}\n\nenum MilestoneStatus {\n PENDING\n IN_PROGRESS\n COMPLETED\n DELAYED\n}\n\nenum TaskStatus {\n TODO\n IN_PROGRESS\n REVIEW\n COMPLETED\n BLOCKED\n}\n\nenum TaskPriority {\n LOW\n MEDIUM\n HIGH\n URGENT\n}\n\nenum ProjectUpdateType {\n STATUS_CHANGE\n MILESTONE_ADDED\n TASK_ASSIGNED\n PROGRESS_UPDATE\n TEAM_CHANGE\n}\n\nunion ProjectResource = Employee | Product | Milestone | Task\n\nunion ProjectSearchResult = Project | Milestone | Task\n\nunion ProjectActivity = ProjectUpdate | Milestone | Task\n\ntype Product {\n id: ID!\n upc: String!\n projects: [Project!]\n featureMatrix: [[String!]]\n}\n\ntype Engineer implements RoleType {\n departments: [Department!]!\n title: [String!]!\n employees: [Employee!]!\n engineerType: EngineerType!\n}\n\ntype Marketer implements RoleType {\n departments: [Department!]!\n title: [String!]!\n employees: [Employee!]!\n}\n\ntype Operator implements RoleType {\n departments: [Department!]!\n title: [String!]!\n employees: [Employee!]!\n operatorType: [OperationType!]!\n}\n\ntype Employee implements Identifiable {\n details: Details\n id: Int!\n tag: String!\n role: RoleType!\n notes: String\n updatedAt: String!\n startDate: String!\n currentMood: Mood!\n derivedMood: Mood!\n isAvailable: Boolean!\n rootFieldThrowsError: String\n rootFieldErrorWrapper: ErrorWrapper\n hobbies: [Hobby!]\n products: [ProductName!]!\n fieldThrowsError: String\n projects: [Project!]\n assignedTasks: [Task!]!\n completedTasks: [Task!]!\n skills: [String!]\n certifications: [String!]\n projectHistory: [[Project!]]!\n}\n\ntype Cosmo implements IProduct {\n upc: ID!\n engineers: [Employee!]!\n lead: Employee!\n name: ProductName!\n repositoryURL: String!\n}\n\ntype SDK implements IProduct {\n upc: ID!\n engineers: [Employee!]!\n owner: Employee!\n unicode: String!\n clientLanguages: [ProgrammingLanguage!]!\n}\n\ninterface Pet implements Animal {\n class: Class!\n gender: Gender!\n name: String!\n}\n\ntype Alligator implements Pet & Animal {\n class: Class!\n dangerous: String!\n gender: Gender!\n name: String!\n}\n\ntype Cat implements Pet & Animal {\n class: Class!\n gender: Gender!\n name: String!\n type: CatType!\n}\n\ntype Dog implements Pet & Animal {\n breed: DogBreed!\n class: Class!\n gender: Gender!\n name: String!\n}\n\ntype Mouse implements Pet & Animal {\n class: Class!\n gender: Gender!\n name: String!\n}\n\ntype Pony implements Pet & Animal {\n class: Class!\n gender: Gender!\n name: String!\n}\n\ntype Exercise implements Hobby {\n employees: [Employee!]!\n category: ExerciseType!\n}\n\ntype Flying implements Experience & Hobby {\n employees: [Employee!]!\n planeModels: [String!]!\n yearsOfExperience: Float!\n}\n\ntype Gaming implements Experience & Hobby {\n employees: [Employee!]!\n genres: [GameGenre!]!\n name: String!\n yearsOfExperience: Float!\n}\n\ntype Other implements Hobby {\n employees: [Employee!]!\n name: String!\n}\n\ntype Programming implements Hobby {\n employees: [Employee!]!\n languages: [ProgrammingLanguage!]!\n}\n\ntype Travelling implements Hobby {\n employees: [Employee!]!\n countriesLived: [Country!]!\n}\n\ntype DirectiveFact implements TopSecretFact {\n title: String!\n description: FactContent!\n factType: TopSecretFactType\n}\n\ntype EntityFact implements TopSecretFact {\n title: String!\n description: FactContent!\n factType: TopSecretFactType\n}\n\ntype MiscellaneousFact implements TopSecretFact {\n title: String!\n description: FactContent!\n factType: TopSecretFactType\n}\n\ntype Project implements Node & Timestamped {\n id: ID!\n name: String!\n description: String\n startDate: String\n endDate: String\n status: ProjectStatus!\n teamMembers: [Employee!]!\n relatedProducts: [Product!]!\n milestoneIds: [String!]\n milestones: [Milestone!]!\n tasks: [Task!]!\n progress: Float\n tags: [String!]\n alternativeProjects: [Project!]\n dependencies: [Project!]\n resourceGroups: [[ProjectResource!]!]!\n tasksByPhase: [[Task!]]!\n milestoneGroups: [[Milestone!]]\n priorityMatrix: [[[Task!]!]!]\n}\n\ntype Milestone implements Node & Timestamped {\n id: ID!\n projectId: ID!\n name: String!\n description: String\n startDate: String\n endDate: String\n status: MilestoneStatus!\n completionPercentage: Float\n dependencies: [Milestone!]!\n subtasks: [Task!]\n reviewers: [Employee!]\n}\n\ntype Task implements Node & Assignable {\n id: ID!\n projectId: ID!\n milestoneId: ID\n assigneeId: Int\n name: String!\n description: String\n priority: TaskPriority!\n status: TaskStatus!\n estimatedHours: Float\n actualHours: Float\n createdAt: String\n completedAt: String\n labels: [String!]\n subtasks: [Task!]\n dependencies: [Task!]!\n attachmentUrls: [String!]!\n reviewerIds: [Int!]\n}\n\ntype ProjectUpdate implements Node {\n id: ID!\n projectId: ID!\n updatedById: Int!\n updateType: ProjectUpdateType!\n description: String!\n timestamp: String!\n metadata: String\n}" + }, + "subgraphs": [ + { + "id": "0", + "name": "employees", + "routingUrl": "http://localhost:4001/graphql" + }, + { + "id": "1", + "name": "family", + "routingUrl": "http://localhost:4002/graphql" + }, + { + "id": "2", + "name": "hobbies", + "routingUrl": "http://localhost:4003/graphql" + }, + { + "id": "3", + "name": "products", + "routingUrl": "http://localhost:4004/graphql" + }, + { + "id": "4", + "name": "test1", + "routingUrl": "http://localhost:4006/graphql" + }, + { + "id": "5", + "name": "availability", + "routingUrl": "http://localhost:4007/graphql" + }, + { + "id": "6", + "name": "mood", + "routingUrl": "http://localhost:4008/graphql" + }, + { + "id": "7", + "name": "countries", + "routingUrl": "http://localhost:4009/graphql" + }, + { + "id": "8", + "name": "employeeupdated" + }, + { + "id": "9", + "name": "projects", + "routingUrl": "dns:///localhost:4011" + } + ], + "compatibilityVersion": "1:{{$COMPOSITION__VERSION}}" +} \ No newline at end of file diff --git a/router-tests/testenv/testdata/manifest/mapper.json b/router-tests/testenv/testdata/manifest/mapper.json new file mode 100644 index 0000000000..d863e97100 --- /dev/null +++ b/router-tests/testenv/testdata/manifest/mapper.json @@ -0,0 +1,4 @@ +{ + "": "ede1a8ce-18e9-4639-b407-b202459d3e29", + "myff": "abafd5eb-d234-4bf8-ba6f-fdeef52d9e68" +} \ No newline at end of file diff --git a/router/.gitignore b/router/.gitignore index ab0b75a003..3adede585a 100644 --- a/router/.gitignore +++ b/router/.gitignore @@ -8,4 +8,5 @@ config.yaml __debug_bin* # Router plugins -/plugins \ No newline at end of file +/plugins +__schemas/manifest/ \ No newline at end of file diff --git a/router/core/router.go b/router/core/router.go index b9273d3d2f..1a7bbffbef 100644 --- a/router/core/router.go +++ b/router/core/router.go @@ -11,6 +11,7 @@ import ( "net/url" "os" "path" + "path/filepath" "slices" "sync" "time" @@ -166,6 +167,14 @@ type ( Path string } + ManifestConfig struct { + Path string + SkipMissingFeatureFlags bool + IgnoredFeatureFlags []string + Watch bool + WatchInterval time.Duration + } + AccessLogsConfig struct { Attributes []config.CustomAttribute Logger *zap.Logger @@ -1071,6 +1080,22 @@ func (r *Router) bootstrap(ctx context.Context) error { if err != nil { return fmt.Errorf("failed to read execution config: %w", err) } + + r.staticExecutionConfig = executionConfig + } + + if r.manifestConfig != nil && r.manifestConfig.Path != "" { + executionConfig, err := routerconfig.AssembleStaticExecutionConfigFromManifest( + r.manifestConfig.Path, + routerconfig.AssembleConfigRules{ + SkipMissingFeatureFlags: r.manifestConfig.SkipMissingFeatureFlags, + IgnoredFeatureFlags: r.manifestConfig.IgnoredFeatureFlags, + }) + + if err != nil { + return fmt.Errorf("failed to assemble static execution config from manifest: %w", err) + } + r.staticExecutionConfig = executionConfig } @@ -1493,88 +1518,7 @@ func (r *Router) Start(ctx context.Context) error { // Start the server with the static config without polling if r.staticExecutionConfig != nil { - - r.trackExecutionConfigUsage(r.staticExecutionConfig, true) - - if err := r.listenAndServe(); err != nil { - return err - } - - if err := r.newServer(ctx, &routerconfig.Response{Config: r.staticExecutionConfig}); err != nil { - return err - } - - r.startPQLPoller(ctx) - - defer func() { - r.httpServer.healthcheck.SetReady(true) - - r.logger.Info("Server initialized and ready to serve requests", - zap.String("listen_addr", r.listenAddr), - zap.Bool("playground", r.playgroundConfig.Enabled), - zap.Bool("introspection", r.introspection), - zap.String("config_version", r.staticExecutionConfig.Version), - ) - }() - - if r.executionConfig != nil && r.executionConfig.Watch { - ll := r.logger.With(zap.String("watcher_label", "execution_config")) - - w, err := watcher.New(watcher.Options{ - Logger: ll, - Paths: []string{r.executionConfig.Path}, - Interval: r.executionConfig.WatchInterval, - Callback: func() { - if r.shutdown.Load() { - ll.Warn("Router is in shutdown state. Skipping config update") - return - } - - data, err := os.ReadFile(r.executionConfig.Path) - if err != nil { - ll.Error("Failed to read config file", zap.Error(err)) - return - } - - ll.Info("Config file changed. Updating server with new config", zap.String("path", r.executionConfig.Path)) - - cfg, err := execution_config.UnmarshalConfig(data) - if err != nil { - ll.Error("Failed to unmarshal config file", zap.Error(err)) - return - } - - if err := r.newServer(ctx, &routerconfig.Response{Config: cfg}); err != nil { - ll.Error("Failed to update server with new config", zap.Error(err)) - return - } - }, - }) - - if err != nil { - return fmt.Errorf("failed to create watcher: %w", err) - } - - go func() { - if err := w(ctx); err != nil { - if !errors.Is(err, context.Canceled) { - ll.Error("Error watching execution config", zap.Error(err)) - } else { - ll.Debug("Watcher context cancelled, shutting down") - } - } - }() - - r.logger.Info("Watching config file for changes. Router will hot-reload automatically without downtime", - zap.String("path", r.executionConfig.Path), - ) - - return nil - } - - r.logger.Info("Static execution config provided. Polling and watching is disabled. Updating execution config is only possible by restarting the router") - - return nil + return r.startWithStaticExecutionConfig(ctx) } // when no static config is provided and no poller is configured, we can't start the server @@ -1652,6 +1596,153 @@ func (r *Router) Start(ctx context.Context) error { return nil } +func (r *Router) startWithStaticExecutionConfig(ctx context.Context) error { + r.trackExecutionConfigUsage(r.staticExecutionConfig, true) + + if err := r.listenAndServe(); err != nil { + return err + } + + if err := r.newServer(ctx, &routerconfig.Response{Config: r.staticExecutionConfig}); err != nil { + return err + } + + r.startPQLPoller(ctx) + + var ( + w watcher.WatcherFunc + watcherErr error + ll *zap.Logger + path string + ) + + if r.executionConfig != nil && r.executionConfig.Watch { + ll = r.logger.With(zap.String("watcher_label", "execution_config")) + path = r.executionConfig.Path + + if w, watcherErr = r.buildExecutionConfigWatcher(ctx, ll); watcherErr != nil { + return fmt.Errorf("failed to create execution config watcher: %w", watcherErr) + } + } + + if r.manifestConfig != nil && r.manifestConfig.Watch { + ll = r.logger.With(zap.String("watcher_label", "manifest_config")) + path = r.manifestConfig.Path + + if w, watcherErr = r.buildManifestConfigWatcher(ctx, ll); watcherErr != nil { + return fmt.Errorf("failed to create manifest config watcher: %w", watcherErr) + } + } + + r.httpServer.healthcheck.SetReady(true) + + r.logger.Info("Server initialized and ready to serve requests", + zap.String("listen_addr", r.listenAddr), + zap.Bool("playground", r.playgroundConfig.Enabled), + zap.Bool("introspection", r.introspection), + zap.String("config_version", r.staticExecutionConfig.Version), + ) + + if w != nil { + go func() { + if err := w(ctx); err != nil { + if !errors.Is(err, context.Canceled) { + ll.Error("Error watching execution config", zap.Error(err)) + } else { + ll.Debug("Watcher context cancelled, shutting down") + } + } + }() + + r.logger.Info("Watching config file for changes. Router will hot-reload automatically without downtime", + zap.String("path", path), + ) + + return nil + } + + r.logger.Info("Static execution config provided. Polling and watching is disabled. Updating execution config is only possible by restarting the router") + + return nil +} + +func (r *Router) buildExecutionConfigWatcher(ctx context.Context, ll *zap.Logger) (watcher.WatcherFunc, error) { + w, err := watcher.New(watcher.Options{ + Logger: ll, + Paths: []string{r.executionConfig.Path}, + Interval: r.executionConfig.WatchInterval, + Callback: func() { + if r.shutdown.Load() { + ll.Warn("Router is in shutdown state. Skipping config update") + return + } + + data, err := os.ReadFile(r.executionConfig.Path) + if err != nil { + ll.Error("Failed to read config file", zap.Error(err)) + return + } + + ll.Info("Config file changed. Updating server with new config", zap.String("path", r.executionConfig.Path)) + + cfg, err := execution_config.UnmarshalConfig(data) + if err != nil { + ll.Error("Failed to unmarshal config file", zap.Error(err)) + return + } + + if err := r.newServer(ctx, &routerconfig.Response{Config: cfg}); err != nil { + ll.Error("Failed to update server with new config", zap.Error(err)) + return + } + }, + }) + + if err != nil { + return nil, fmt.Errorf("failed to create watcher: %w", err) + } + + return w, nil +} + +func (r *Router) buildManifestConfigWatcher(ctx context.Context, ll *zap.Logger) (watcher.WatcherFunc, error) { + w, err := watcher.New(watcher.Options{ + Logger: ll, + Paths: []string{filepath.Join(r.manifestConfig.Path, "mapper.json")}, + Interval: r.manifestConfig.WatchInterval, + Callback: func() { + if r.shutdown.Load() { + ll.Warn("Router is in shutdown state. Skipping config update") + return + } + + cfg, err := routerconfig.AssembleStaticExecutionConfigFromManifest( + r.manifestConfig.Path, routerconfig.AssembleConfigRules{ + SkipMissingFeatureFlags: r.manifestConfig.SkipMissingFeatureFlags, + IgnoredFeatureFlags: r.manifestConfig.IgnoredFeatureFlags, + }) + + if err != nil { + ll.Error("Failed to assemble static execution config from manifest", zap.Error(err)) + return + } + + ll.Info("Manifest config changed. Updating server with new config", zap.String("path", r.manifestConfig.Path)) + + if err := r.newServer(ctx, &routerconfig.Response{Config: cfg}); err != nil { + ll.Error("Failed to update server with new config", zap.Error(err)) + return + } + }, + }) + + if err != nil { + return nil, fmt.Errorf("failed to create watcher: %w", err) + } + + return w, nil +} + type UsageTrackerNoOp struct{} func (u *UsageTrackerNoOp) TrackExecutionConfigUsage(_ map[string]any) {} @@ -1975,6 +2066,12 @@ func WithExecutionConfig(cfg *ExecutionConfig) Option { } } +func WithManifestConfig(cfg *ManifestConfig) Option { + return func(r *Router) { + r.manifestConfig = cfg + } +} + // WithStaticExecutionConfig sets the static execution config. This disables polling and file watching. func WithStaticExecutionConfig(cfg *nodev1.RouterConfig) Option { return func(r *Router) { diff --git a/router/core/router_config.go b/router/core/router_config.go index 5ebf60d4f3..bc4e25445e 100644 --- a/router/core/router_config.go +++ b/router/core/router_config.go @@ -97,6 +97,7 @@ type Config struct { prometheusServer *http.Server modulesConfig map[string]interface{} executionConfig *ExecutionConfig + manifestConfig *ManifestConfig routerOnRequestHandlers []func(http.Handler) http.Handler routerMiddlewares []func(http.Handler) http.Handler preOriginHandlers []TransportPreHandler @@ -343,6 +344,7 @@ func (c *Config) Usage() map[string]any { usage["cosmo_cdn"] = c.cdnConfig.URL == "https://cosmo-cdn.wundergraph.com" usage["static_execution_config"] = c.staticExecutionConfig != nil + usage["manifest_config"] = c.manifestConfig != nil if c.clusterName != "" { usage["cluster_name"] = c.clusterName diff --git a/router/core/supervisor_instance.go b/router/core/supervisor_instance.go index a7c699cf5e..8a60b5d951 100644 --- a/router/core/supervisor_instance.go +++ b/router/core/supervisor_instance.go @@ -159,17 +159,8 @@ func newRouter(ctx context.Context, params RouterResources, additionalOptions .. options = append(options, WithSelfRegistration(selfRegister)) } - executionConfigPath := cfg.ExecutionConfig.File.Path - if executionConfigPath == "" { - executionConfigPath = cfg.RouterConfigPath - } - - if executionConfigPath != "" { - options = append(options, WithExecutionConfig(&ExecutionConfig{ - Watch: cfg.ExecutionConfig.File.Watch, - WatchInterval: cfg.ExecutionConfig.File.WatchInterval, - Path: executionConfigPath, - })) + if opt := optionFromExecutionConfig(&cfg.ExecutionConfig, cfg.RouterConfigPath); opt != nil { + options = append(options, opt) } else { options = append(options, WithConfigPollerConfig(&RouterConfigPollerConfig{ GraphSignKey: cfg.Graph.SignKey, @@ -183,6 +174,36 @@ func newRouter(ctx context.Context, params RouterResources, additionalOptions .. return NewRouter(options...) } +// optionFromExecutionConfig returns an Option that configures the router with the execution config. +// It checks for both the static execution config and the manifest execution config +// and returns the appropriate Option. +func optionFromExecutionConfig(cfg *config.ExecutionConfig, routerConfigPath string) Option { + executionConfigPath := cfg.File.Path + if executionConfigPath == "" { + executionConfigPath = routerConfigPath + } + + if executionConfigPath != "" { + return WithExecutionConfig(&ExecutionConfig{ + Watch: cfg.File.Watch, + WatchInterval: cfg.File.WatchInterval, + Path: executionConfigPath, + }) + } + + if cfg.Manifest.Path != "" { + return WithManifestConfig(&ManifestConfig{ + Path: cfg.Manifest.Path, + SkipMissingFeatureFlags: cfg.Manifest.SkipMissingFeatureFlags, + IgnoredFeatureFlags: cfg.Manifest.IgnoredFeatureFlags, + Watch: cfg.Manifest.Watch, + WatchInterval: cfg.Manifest.WatchInterval, + }) + } + + return nil +} + func optionsFromResources(logger *zap.Logger, config *config.Config, reloadPersistentState *ReloadPersistentState) []Option { options := []Option{ WithListenerAddr(config.ListenAddr), diff --git a/router/pkg/config/config.go b/router/pkg/config/config.go index 953552a368..874e573372 100644 --- a/router/pkg/config/config.go +++ b/router/pkg/config/config.go @@ -1041,6 +1041,15 @@ type ExecutionConfig struct { File ExecutionConfigFile `yaml:"file,omitempty"` Storage ExecutionConfigStorage `yaml:"storage,omitempty" envPrefix:"EXECUTION_CONFIG_STORAGE_"` FallbackStorage FallbackExecutionConfigStorage `yaml:"fallback_storage,omitempty" envPrefix:"EXECUTION_CONFIG_FALLBACK_STORAGE_"` + Manifest ExecutionConfigManifest `yaml:"manifest,omitempty" envPrefix:"EXECUTION_CONFIG_MANIFEST_"` +} + +type ExecutionConfigManifest struct { + Path string `yaml:"path,omitempty" env:"PATH"` + SkipMissingFeatureFlags bool `yaml:"skip_missing_feature_flags" envDefault:"false" env:"SKIP_MISSING_FEATURE_FLAGS"` + IgnoredFeatureFlags []string `yaml:"ignored_feature_flags,omitempty" env:"IGNORED_FEATURE_FLAGS"` + Watch bool `yaml:"watch,omitempty" envDefault:"false" env:"WATCH"` + WatchInterval time.Duration `yaml:"watch_interval,omitempty" envDefault:"1s" env:"WATCH_INTERVAL"` } type PersistedOperationsCacheConfig struct { diff --git a/router/pkg/config/config.schema.json b/router/pkg/config/config.schema.json index 4ff39efe5a..eaf0cf2717 100644 --- a/router/pkg/config/config.schema.json +++ b/router/pkg/config/config.schema.json @@ -399,6 +399,57 @@ } } } + }, + { + "type": "object", + "additionalProperties": false, + "properties": { + "manifest": { + "type": "object", + "description": "The configuration for loading the execution config from a manifest directory on the local file system. The manifest describes the base graph and any feature flag execution configs as separate files in a directory.", + "additionalProperties": false, + "required": ["path"], + "dependentSchemas": { + "watch_interval": { + "properties": { + "watch": { + "const": true + } + } + } + }, + "properties": { + "path": { + "type": "string", + "format": "directory-path", + "description": "The path to the manifest directory. The directory contains the manifest file and the individual execution config files referenced by it." + }, + "skip_missing_feature_flags": { + "type": "boolean", + "default": false, + "description": "Skip feature flags listed in the manifest whose execution config file cannot be loaded, instead of aborting the load. Use this when occasional missing feature flag files should not prevent the router from loading the rest of the manifest." + }, + "ignored_feature_flags": { + "type": "array", + "items": { "type": "string" }, + "description": "Feature flag names to skip entirely when loading the manifest. Listed flags are not loaded even when referenced by the manifest." + }, + "watch": { + "type": "boolean", + "default": false, + "description": "Enable the watch mode. The watch mode is used to watch the manifest directory for changes. If a file changes, the router will reload the execution config without downtime." + }, + "watch_interval": { + "type": "string", + "description": "The interval at which the manifest directory is checked for changes. The period is specified as a string with a number and a unit, e.g. 10ms, 1s, 1m, 1h. The supported units are 'ms', 's', 'm', 'h'.", + "default": "1s", + "duration": { + "minimum": "100ms" + } + } + } + } + } } ] }, diff --git a/router/pkg/config/config_test.go b/router/pkg/config/config_test.go index a0d0cb8e04..00cb69de18 100644 --- a/router/pkg/config/config_test.go +++ b/router/pkg/config/config_test.go @@ -795,7 +795,7 @@ execution_config: _, err := LoadConfig([]string{f}) var js *jsonschema.ValidationError require.ErrorAs(t, err, &js) - require.Equal(t, "at '/execution_config': oneOf failed, none matched\n- at '/execution_config': additional properties 'storage' not allowed\n- at '/execution_config/storage': missing property 'object_path'\n- at '/execution_config': additional properties 'storage' not allowed", js.Causes[0].Error()) + require.Equal(t, "at '/execution_config': oneOf failed, none matched\n- at '/execution_config': additional properties 'storage' not allowed\n- at '/execution_config/storage': missing property 'object_path'\n- at '/execution_config': additional properties 'storage' not allowed\n- at '/execution_config': additional properties 'storage' not allowed", js.Causes[0].Error()) }) t.Run("too low watch interval", func(t *testing.T) { @@ -813,7 +813,7 @@ execution_config: _, err := LoadConfig([]string{f}) var js *jsonschema.ValidationError require.ErrorAs(t, err, &js) - require.Equal(t, "at '/execution_config': oneOf failed, none matched\n- at '/execution_config/file/watch_interval': duration must be greater or equal than 100ms\n- at '/execution_config': additional properties 'file' not allowed\n- at '/execution_config': additional properties 'file' not allowed", js.Causes[0].Error()) + require.Equal(t, "at '/execution_config': oneOf failed, none matched\n- at '/execution_config/file/watch_interval': duration must be greater or equal than 100ms\n- at '/execution_config': additional properties 'file' not allowed\n- at '/execution_config': additional properties 'file' not allowed\n- at '/execution_config': additional properties 'file' not allowed", js.Causes[0].Error()) }) t.Run("watch interval with watch disabled", func(t *testing.T) { @@ -830,7 +830,7 @@ execution_config: _, err := LoadConfig([]string{f}) var js *jsonschema.ValidationError require.ErrorAs(t, err, &js) - require.Equal(t, "at '/execution_config': oneOf failed, none matched\n- at '/execution_config/file/watch': value must be true\n- at '/execution_config': additional properties 'file' not allowed\n- at '/execution_config': additional properties 'file' not allowed", js.Causes[0].Error()) + require.Equal(t, "at '/execution_config': oneOf failed, none matched\n- at '/execution_config/file/watch': value must be true\n- at '/execution_config': additional properties 'file' not allowed\n- at '/execution_config': additional properties 'file' not allowed\n- at '/execution_config': additional properties 'file' not allowed", js.Causes[0].Error()) }) } @@ -874,7 +874,11 @@ execution_config: var js *jsonschema.ValidationError require.ErrorAs(t, err, &js) require.True(t, - js.Causes[0].Error() == "at '/execution_config': oneOf failed, none matched\n- at '/execution_config': additional properties 'storage' not allowed\n- at '/execution_config': additional properties 'file' not allowed\n- at '/execution_config': additional properties 'file', 'storage' not allowed" || js.Causes[0].Error() == "at '/execution_config': oneOf failed, none matched\n- at '/execution_config': additional properties 'storage' not allowed\n- at '/execution_config': additional properties 'file' not allowed\n- at '/execution_config': additional properties 'storage', 'file' not allowed", + js.Causes[0].Error() == "at '/execution_config': oneOf failed, none matched\n- at '/execution_config': additional properties 'storage' not allowed\n- at '/execution_config': additional properties 'file' not allowed\n- at '/execution_config': additional properties 'file', 'storage' not allowed\n- at '/execution_config': additional properties 'file', 'storage' not allowed" || + js.Causes[0].Error() == "at '/execution_config': oneOf failed, none matched\n- at '/execution_config': additional properties 'storage' not allowed\n- at '/execution_config': additional properties 'file' not allowed\n- at '/execution_config': additional properties 'file', 'storage' not allowed\n- at '/execution_config': additional properties 'storage', 'file' not allowed" || + js.Causes[0].Error() == "at '/execution_config': oneOf failed, none matched\n- at '/execution_config': additional properties 'storage' not allowed\n- at '/execution_config': additional properties 'file' not allowed\n- at '/execution_config': additional properties 'storage', 'file' not allowed\n- at '/execution_config': additional properties 'file', 'storage' not allowed" || + js.Causes[0].Error() == "at '/execution_config': oneOf failed, none matched\n- at '/execution_config': additional properties 'storage' not allowed\n- at '/execution_config': additional properties 'file' not allowed\n- at '/execution_config': additional properties 'storage', 'file' not allowed\n- at '/execution_config': additional properties 'storage', 'file' not allowed", + js.Causes[0].Error(), ) } diff --git a/router/pkg/config/json_schema.go b/router/pkg/config/json_schema.go index 086f209eb2..46bc4432a9 100644 --- a/router/pkg/config/json_schema.go +++ b/router/pkg/config/json_schema.go @@ -5,10 +5,6 @@ import ( "encoding/json" "errors" "fmt" - "github.com/dustin/go-humanize" - "github.com/goccy/go-yaml" - "github.com/santhosh-tekuri/jsonschema/v6" - "golang.org/x/text/message" "io/fs" "log" "net" @@ -19,6 +15,11 @@ import ( "strings" "syscall" "time" + + "github.com/dustin/go-humanize" + "github.com/goccy/go-yaml" + "github.com/santhosh-tekuri/jsonschema/v6" + "golang.org/x/text/message" ) const ( @@ -329,6 +330,10 @@ func ValidateConfig(yamlData []byte, schema []byte) error { Name: "hostname-port", Validate: isHostnamePort, }) + c.RegisterFormat(&jsonschema.Format{ + Name: "directory-path", + Validate: isDirectoryPath, + }) c.RegisterVocabulary(goDurationVocab()) c.RegisterVocabulary(humanBytesVocab()) @@ -507,6 +512,19 @@ func isFilePath(a any) error { return nil } +// isDirectoryPath is the validation function for validating if the current field's value is a valid directory path. +func isDirectoryPath(a any) error { + val, ok := a.(string) + if !ok { + return errors.New("invalid directory path") + } + + if !isDir(val) { + return errors.New("invalid directory path") + } + return nil +} + // isURI is the validation function for validating if the current field's value is a valid URI. func isURI(a any) error { val, ok := a.(string) diff --git a/router/pkg/config/testdata/config_defaults.json b/router/pkg/config/testdata/config_defaults.json index 8a1873563d..0cb6ceee37 100644 --- a/router/pkg/config/testdata/config_defaults.json +++ b/router/pkg/config/testdata/config_defaults.json @@ -555,6 +555,13 @@ "Enabled": false, "ProviderID": "", "ObjectPath": "" + }, + "Manifest": { + "Path": "", + "SkipMissingFeatureFlags": false, + "IgnoredFeatureFlags": null, + "Watch": false, + "WatchInterval": 1000000000 } }, "SplitConfigPoller": { diff --git a/router/pkg/config/testdata/config_full.json b/router/pkg/config/testdata/config_full.json index 7951270c2c..7e88733f7a 100644 --- a/router/pkg/config/testdata/config_full.json +++ b/router/pkg/config/testdata/config_full.json @@ -1003,6 +1003,13 @@ "Enabled": false, "ProviderID": "", "ObjectPath": "" + }, + "Manifest": { + "Path": "", + "SkipMissingFeatureFlags": false, + "IgnoredFeatureFlags": null, + "Watch": false, + "WatchInterval": 1000000000 } }, "SplitConfigPoller": { diff --git a/router/pkg/routerconfig/routerconfig.go b/router/pkg/routerconfig/routerconfig.go index cadd1f6b65..71ba30e846 100644 --- a/router/pkg/routerconfig/routerconfig.go +++ b/router/pkg/routerconfig/routerconfig.go @@ -1,6 +1,32 @@ +// Package routerconfig loads and assembles the router's execution config. +// +// The execution config drives query planning and subgraph routing. It can be +// fetched at runtime from a remote provider (see the [Client] interface and +// its CDN and S3 implementations in the cdn and s3 subpackages) or read from +// a local manifest directory. +// +// A manifest directory contains a mapper.json indexing the base graph and any +// feature-flag variants, a latest.json holding the base graph config, and a +// feature-flags/ subdirectory with one JSON file per feature flag. Use +// [isValidManifestPath] to validate a directory, [readMapperFile] to load the +// index, and [assembleConfig] to merge the base config with its feature-flag +// variants into a single [nodev1.RouterConfig]. +// +// [GetDefaultConfig] returns a minimal "hello world" config used when no +// other config is available, so the router can start and surface a guided +// onboarding response. package routerconfig -import "fmt" +import ( + "encoding/json" + "fmt" + "io/fs" + "os" + "path/filepath" + + nodev1 "github.com/wundergraph/cosmo/router/gen/proto/wg/cosmo/node/v1" + "github.com/wundergraph/cosmo/router/pkg/execution_config" +) func VersionPath(version int) string { switch version { @@ -10,3 +36,147 @@ func VersionPath(version int) string { return fmt.Sprintf("v%d/", version) } } + +type AssembleConfigRules struct { + SkipMissingFeatureFlags bool + IgnoredFeatureFlags []string +} + +// AssembleStaticExecutionConfigFromManifest assembles the static execution config from the manifest directory. +func AssembleStaticExecutionConfigFromManifest(manifestConfigPath string, rules AssembleConfigRules) (*nodev1.RouterConfig, error) { + if !isValidManifestPath(manifestConfigPath) { + return nil, fmt.Errorf("invalid manifest path: %s", manifestConfigPath) + } + + mapper, err := readMapperFile(filepath.Join(manifestConfigPath, "mapper.json")) + if err != nil { + return nil, fmt.Errorf("failed to read mapper file: %w", err) + } + + executionConfig, err := assembleConfig(manifestConfigPath, mapper, rules) + + if err != nil { + return nil, fmt.Errorf("failed to assemble execution config: %w", err) + } + + return executionConfig, nil +} + +// isValidManifestPath checks if the given path is a valid manifest path. +// It checks if the path is a directory, and if it contains a mapper.json file. +func isValidManifestPath(path string) bool { + info, err := os.Lstat(path) + if err != nil { + return false + } + + // We don't support symlinks for now + if info.Mode()&os.ModeSymlink != 0 { + return false + } + + if !info.IsDir() { + return false + } + + mapperStat, err := os.Lstat(path + "/mapper.json") + if err != nil { + if os.IsNotExist(err) { + return false + } + return false + } + + return mapperStat.Mode().IsRegular() +} + +// readMapperFile reads the mapper.json file from the given path and returns the mapper. +// The mapper file is a JSON object with the feature flag name as the key and the hash as the value. +func readMapperFile(path string) (map[string]string, error) { + data, err := os.ReadFile(path) + if err != nil { + return nil, err + } + + var mapper map[string]string + if err := json.Unmarshal(data, &mapper); err != nil { + return nil, err + } + + return mapper, nil +} + +// assembleConfig assembles the router execution config from the base config and the feature flag configs. +// The base config is the latest.json file in the manifest directory. +// The feature flag configs are the feature-flags/.json files in the manifest directory. +// The rules are the rules for skipping missing feature flags and ignored feature flags. +func assembleConfig(basePath string, mapper map[string]string, rules AssembleConfigRules) (*nodev1.RouterConfig, error) { + baseConfigPath := filepath.Join(basePath, "latest.json") + + _, err := os.Stat(baseConfigPath) + if err != nil { + return nil, fmt.Errorf("failed to stat base config path: %w", err) + } + + baseConfig, err := execution_config.FromFile(baseConfigPath) + if err != nil { + return nil, fmt.Errorf("failed to read base config: %w", err) + } + + featureFlagPath := filepath.Join(basePath, "feature-flags") + _, err = os.Stat(featureFlagPath) + if err != nil { + return nil, fmt.Errorf("failed to stat feature flag path: %w", err) + } + + // pre-allocation hint for the feature flag configs map + baseConfig.FeatureFlagConfigs = &nodev1.FeatureFlagRouterExecutionConfigs{ + ConfigByFeatureFlagName: make(map[string]*nodev1.FeatureFlagRouterExecutionConfig, max(len(mapper)-1, 0)), + } + + ignoredFeatureFlags := make(map[string]struct{}) + + for _, ff := range rules.IgnoredFeatureFlags { + ignoredFeatureFlags[ff] = struct{}{} + } + + fsys := os.DirFS(featureFlagPath) + for key := range mapper { + // ignore base graph + if key == "" { + continue + } + + // skip ignored feature flags + if _, ok := ignoredFeatureFlags[key]; ok { + continue + } + + fileBytes, err := fs.ReadFile(fsys, key+".json") + if err != nil { + if os.IsNotExist(err) { + if rules.SkipMissingFeatureFlags { + continue + } + + return nil, fmt.Errorf("feature flag config not found: %w", err) + } + + return nil, fmt.Errorf("failed to read feature flag config %q: %w", key, err) + } + + featureFlagConfig, err := execution_config.UnmarshalConfig(fileBytes) + if err != nil { + return nil, fmt.Errorf("failed to unmarshal feature flag config: %w", err) + } + + baseConfig.FeatureFlagConfigs.ConfigByFeatureFlagName[key] = &nodev1.FeatureFlagRouterExecutionConfig{ + EngineConfig: featureFlagConfig.EngineConfig, + Version: featureFlagConfig.Version, + Subgraphs: featureFlagConfig.Subgraphs, + } + + } + + return baseConfig, nil +} diff --git a/router/pkg/watcher/watcher.go b/router/pkg/watcher/watcher.go index 17a0e9fa2d..72609cb258 100644 --- a/router/pkg/watcher/watcher.go +++ b/router/pkg/watcher/watcher.go @@ -22,7 +22,9 @@ type Options struct { FileInfoProvider func(path string) (os.FileInfo, error) } -func New(options Options) (func(ctx context.Context) error, error) { +type WatcherFunc func(ctx context.Context) error + +func New(options Options) (WatcherFunc, error) { if options.Interval <= 0 { return nil, errors.New("interval must be greater than zero") }