From d1ae694c6f0c5e7ff9fa6b3b898012e83cec173d Mon Sep 17 00:00:00 2001 From: Alessandro Pagnin Date: Mon, 3 Mar 2025 13:01:11 +0100 Subject: [PATCH 001/126] chore: initial and incomplete refactor --- router/core/executor.go | 7 +- router/core/factoryresolver.go | 79 +----- router/core/graph_server.go | 206 ++++++-------- router/core/plan_generator.go | 24 -- router/pkg/pubsub/datasource/datasource.go | 71 +++++ router/pkg/pubsub/datasource/old.go | 290 ++++++++++++++++++++ router/pkg/pubsub/datasource/providers.go | 1 + router/pkg/pubsub/kafka/kafka_datasource.go | 122 ++++++++ router/pkg/pubsub/nats/nats_datasource.go | 124 +++++++++ 9 files changed, 697 insertions(+), 227 deletions(-) create mode 100644 router/pkg/pubsub/datasource/datasource.go create mode 100644 router/pkg/pubsub/datasource/old.go create mode 100644 router/pkg/pubsub/datasource/providers.go create mode 100644 router/pkg/pubsub/kafka/kafka_datasource.go create mode 100644 router/pkg/pubsub/nats/nats_datasource.go diff --git a/router/core/executor.go b/router/core/executor.go index 3344caa83a..d3e35b7fea 100644 --- a/router/core/executor.go +++ b/router/core/executor.go @@ -51,7 +51,6 @@ type ExecutorBuildOptions struct { EngineConfig *nodev1.EngineConfiguration Subgraphs []*nodev1.Subgraph RouterEngineConfig *RouterEngineConfiguration - PubSubProviders *EnginePubSubProviders Reporter resolve.Reporter ApolloCompatibilityFlags config.ApolloCompatibilityFlags ApolloRouterCompatibilityFlags config.ApolloRouterCompatibilityFlags @@ -59,7 +58,7 @@ type ExecutorBuildOptions struct { } func (b *ExecutorConfigurationBuilder) Build(ctx context.Context, opts *ExecutorBuildOptions) (*Executor, error) { - planConfig, err := b.buildPlannerConfiguration(ctx, opts.EngineConfig, opts.Subgraphs, opts.RouterEngineConfig, opts.PubSubProviders) + planConfig, err := b.buildPlannerConfiguration(ctx, opts.EngineConfig, opts.Subgraphs, opts.RouterEngineConfig) if err != nil { return nil, fmt.Errorf("failed to build planner configuration: %w", err) } @@ -268,7 +267,7 @@ func buildKafkaOptions(eventSource config.KafkaEventSource) ([]kgo.Opt, error) { return opts, nil } -func (b *ExecutorConfigurationBuilder) buildPlannerConfiguration(ctx context.Context, engineConfig *nodev1.EngineConfiguration, subgraphs []*nodev1.Subgraph, routerEngineCfg *RouterEngineConfiguration, pubSubProviders *EnginePubSubProviders) (*plan.Configuration, error) { +func (b *ExecutorConfigurationBuilder) buildPlannerConfiguration(ctx context.Context, engineConfig *nodev1.EngineConfiguration, subgraphs []*nodev1.Subgraph, routerEngineCfg *RouterEngineConfiguration) (*plan.Configuration, error) { // this loader is used to take the engine config and create a plan config // the plan config is what the engine uses to turn a GraphQL Request into an execution plan // the plan config is stateful as it carries connection pools and other things @@ -280,8 +279,6 @@ func (b *ExecutorConfigurationBuilder) buildPlannerConfiguration(ctx context.Con b.logger, routerEngineCfg.Execution.EnableSingleFlight, routerEngineCfg.Execution.EnableNetPoll, - pubSubProviders.nats, - pubSubProviders.kafka, )) // this generates the plan config using the data source factories from the config package diff --git a/router/core/factoryresolver.go b/router/core/factoryresolver.go index 3b0dd558bc..1e44cda7f9 100644 --- a/router/core/factoryresolver.go +++ b/router/core/factoryresolver.go @@ -8,9 +8,9 @@ import ( "net/url" "slices" - "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/argument_templates" - "github.com/buger/jsonparser" + pubsubDatasource "github.com/wundergraph/cosmo/router/pkg/pubsub/datasource" + "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/argument_templates" "github.com/wundergraph/cosmo/router/pkg/config" @@ -18,7 +18,6 @@ import ( "go.uber.org/zap" "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/datasource/graphql_datasource" - "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/datasource/pubsub_datasource" "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/datasource/staticdatasource" "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/plan" @@ -35,7 +34,6 @@ type Loader struct { type FactoryResolver interface { ResolveGraphqlFactory(subgraphName string) (plan.PlannerFactory[graphql_datasource.Configuration], error) ResolveStaticFactory() (plan.PlannerFactory[staticdatasource.Configuration], error) - ResolvePubsubFactory() (plan.PlannerFactory[pubsub_datasource.Configuration], error) } type ApiTransportFactory interface { @@ -49,7 +47,6 @@ type DefaultFactoryResolver struct { transportOptions *TransportOptions static *staticdatasource.Factory[staticdatasource.Configuration] - pubsub *pubsub_datasource.Factory[pubsub_datasource.Configuration] log *zap.Logger engineCtx context.Context @@ -68,8 +65,6 @@ func NewDefaultFactoryResolver( log *zap.Logger, enableSingleFlight bool, enableNetPoll bool, - natsPubSubBySourceID map[string]pubsub_datasource.NatsPubSub, - kafkaPubSubBySourceID map[string]pubsub_datasource.KafkaPubSub, ) *DefaultFactoryResolver { transportFactory := NewTransport(transportOptions) @@ -105,7 +100,6 @@ func NewDefaultFactoryResolver( transportFactory: transportFactory, transportOptions: transportOptions, static: &staticdatasource.Factory[staticdatasource.Configuration]{}, - pubsub: pubsub_datasource.NewFactory(ctx, natsPubSubBySourceID, kafkaPubSubBySourceID), log: log, factoryLogger: factoryLogger, engineCtx: ctx, @@ -139,10 +133,6 @@ func (d *DefaultFactoryResolver) ResolveStaticFactory() (factory plan.PlannerFac return d.static, nil } -func (d *DefaultFactoryResolver) ResolvePubsubFactory() (factory plan.PlannerFactory[pubsub_datasource.Configuration], err error) { - return d.pubsub, nil -} - func NewLoader(includeInfo bool, resolver FactoryResolver) *Loader { return &Loader{ resolver: resolver, @@ -394,72 +384,11 @@ func (l *Loader) Load(engineConfig *nodev1.EngineConfiguration, subgraphs []*nod } case nodev1.DataSourceKind_PUBSUB: - var eventConfigurations []pubsub_datasource.EventConfiguration - - for _, eventConfiguration := range in.GetCustomEvents().GetNats() { - eventType, err := pubsub_datasource.EventTypeFromString(eventConfiguration.EngineEventConfiguration.Type.String()) - if err != nil { - return nil, fmt.Errorf("invalid event type %q for data source %q: %w", eventConfiguration.EngineEventConfiguration.Type.String(), in.Id, err) - } - - var streamConfiguration *pubsub_datasource.NatsStreamConfiguration - if eventConfiguration.StreamConfiguration != nil { - streamConfiguration = &pubsub_datasource.NatsStreamConfiguration{ - Consumer: eventConfiguration.StreamConfiguration.GetConsumerName(), - StreamName: eventConfiguration.StreamConfiguration.GetStreamName(), - ConsumerInactiveThreshold: eventConfiguration.StreamConfiguration.GetConsumerInactiveThreshold(), - } - } - - eventConfigurations = append(eventConfigurations, pubsub_datasource.EventConfiguration{ - Metadata: &pubsub_datasource.EventMetadata{ - ProviderID: eventConfiguration.EngineEventConfiguration.GetProviderId(), - Type: eventType, - TypeName: eventConfiguration.EngineEventConfiguration.GetTypeName(), - FieldName: eventConfiguration.EngineEventConfiguration.GetFieldName(), - }, - Configuration: &pubsub_datasource.NatsEventConfiguration{ - StreamConfiguration: streamConfiguration, - Subjects: eventConfiguration.GetSubjects(), - }, - }) - } - - for _, eventConfiguration := range in.GetCustomEvents().GetKafka() { - eventType, err := pubsub_datasource.EventTypeFromString(eventConfiguration.EngineEventConfiguration.Type.String()) - if err != nil { - return nil, fmt.Errorf("invalid event type %q for data source %q: %w", eventConfiguration.EngineEventConfiguration.Type.String(), in.Id, err) - } - - eventConfigurations = append(eventConfigurations, pubsub_datasource.EventConfiguration{ - Metadata: &pubsub_datasource.EventMetadata{ - ProviderID: eventConfiguration.EngineEventConfiguration.GetProviderId(), - Type: eventType, - TypeName: eventConfiguration.EngineEventConfiguration.GetTypeName(), - FieldName: eventConfiguration.EngineEventConfiguration.GetFieldName(), - }, - Configuration: &pubsub_datasource.KafkaEventConfiguration{ - Topics: eventConfiguration.GetTopics(), - }, - }) - } - - factory, err := l.resolver.ResolvePubsubFactory() + var err error + out, err = pubsubDatasource.GetDataSourcesFromConfig(context.Background(), in, l.dataSourceMetaData(in), routerEngineConfig.Events) if err != nil { return nil, err } - - out, err = plan.NewDataSourceConfiguration[pubsub_datasource.Configuration]( - in.Id, - factory, - l.dataSourceMetaData(in), - pubsub_datasource.Configuration{ - Events: eventConfigurations, - }, - ) - if err != nil { - return nil, fmt.Errorf("error creating data source configuration for data source %s: %w", in.Id, err) - } default: return nil, fmt.Errorf("unknown data source type %q", in.Kind) } diff --git a/router/core/graph_server.go b/router/core/graph_server.go index 0f76ffd784..2f985bfbf9 100644 --- a/router/core/graph_server.go +++ b/router/core/graph_server.go @@ -18,8 +18,6 @@ import ( "github.com/golang-jwt/jwt/v5" "github.com/klauspost/compress/gzhttp" "github.com/klauspost/compress/gzip" - "github.com/nats-io/nats.go" - "github.com/nats-io/nats.go/jetstream" "go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp" "go.opentelemetry.io/otel/attribute" otelmetric "go.opentelemetry.io/otel/metric" @@ -30,8 +28,6 @@ import ( "go.uber.org/zap/zapcore" "golang.org/x/exp/maps" - "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/datasource/pubsub_datasource" - "github.com/wundergraph/cosmo/router/gen/proto/wg/cosmo/common" nodev1 "github.com/wundergraph/cosmo/router/gen/proto/wg/cosmo/node/v1" rjwt "github.com/wundergraph/cosmo/router/internal/jwt" @@ -46,9 +42,6 @@ import ( "github.com/wundergraph/cosmo/router/pkg/logging" rmetric "github.com/wundergraph/cosmo/router/pkg/metric" "github.com/wundergraph/cosmo/router/pkg/otel" - "github.com/wundergraph/cosmo/router/pkg/pubsub" - "github.com/wundergraph/cosmo/router/pkg/pubsub/kafka" - pubsubNats "github.com/wundergraph/cosmo/router/pkg/pubsub/nats" "github.com/wundergraph/cosmo/router/pkg/statistics" rtrace "github.com/wundergraph/cosmo/router/pkg/trace" ) @@ -65,11 +58,6 @@ type ( HealthChecks() health.Checker } - EnginePubSubProviders struct { - nats map[string]pubsub_datasource.NatsPubSub - kafka map[string]pubsub_datasource.KafkaPubSub - } - // graphServer is the swappable implementation of a Graph instance which is an HTTP mux with middlewares. // Everytime a schema is updated, the old graph server is shutdown and a new graph server is created. // For feature flags, a graphql server has multiple mux and is dynamically switched based on the feature flag header or cookie. @@ -78,7 +66,6 @@ type ( *Config context context.Context cancelFunc context.CancelFunc - pubSubProviders *EnginePubSubProviders engineStats statistics.EngineStatistics playgroundHandler func(http.Handler) http.Handler publicKey *ecdsa.PublicKey @@ -126,10 +113,6 @@ func newGraphServer(ctx context.Context, r *Router, routerConfig *nodev1.RouterC graphMuxList: make([]*graphMux, 0, 1), routerListenAddr: r.listenAddr, hostName: r.hostName, - pubSubProviders: &EnginePubSubProviders{ - nats: map[string]pubsub_datasource.NatsPubSub{}, - kafka: map[string]pubsub_datasource.KafkaPubSub{}, - }, } baseOtelAttributes := []attribute.KeyValue{ @@ -880,10 +863,10 @@ func (s *graphServer) buildGraphMux(ctx context.Context, SubgraphErrorPropagation: s.subgraphErrorPropagation, } - err = s.buildPubSubConfiguration(ctx, engineConfig, routerEngineConfig) - if err != nil { - return nil, fmt.Errorf("failed to build pubsub configuration: %w", err) - } + //err = s.buildPubSubConfiguration(ctx, engineConfig, routerEngineConfig) + //if err != nil { + // return nil, fmt.Errorf("failed to build pubsub configuration: %w", err) + //} ecb := &ExecutorConfigurationBuilder{ introspection: s.introspection, @@ -919,7 +902,6 @@ func (s *graphServer) buildGraphMux(ctx context.Context, EngineConfig: engineConfig, Subgraphs: configSubgraphs, RouterEngineConfig: routerEngineConfig, - PubSubProviders: s.pubSubProviders, Reporter: s.engineStats, ApolloCompatibilityFlags: s.apolloCompatibilityFlags, ApolloRouterCompatibilityFlags: s.apolloRouterCompatibilityFlags, @@ -1170,85 +1152,85 @@ func (s *graphServer) buildGraphMux(ctx context.Context, return gm, nil } -func (s *graphServer) buildPubSubConfiguration(ctx context.Context, engineConfig *nodev1.EngineConfiguration, routerEngineCfg *RouterEngineConfiguration) error { - datasourceConfigurations := engineConfig.GetDatasourceConfigurations() - for _, datasourceConfiguration := range datasourceConfigurations { - if datasourceConfiguration.CustomEvents == nil { - continue - } - - for _, eventConfiguration := range datasourceConfiguration.GetCustomEvents().GetNats() { - - providerID := eventConfiguration.EngineEventConfiguration.GetProviderId() - // if this source name's provider has already been initiated, do not try to initiate again - _, ok := s.pubSubProviders.nats[providerID] - if ok { - continue - } - - for _, eventSource := range routerEngineCfg.Events.Providers.Nats { - if eventSource.ID == eventConfiguration.EngineEventConfiguration.GetProviderId() { - options, err := buildNatsOptions(eventSource, s.logger) - if err != nil { - return fmt.Errorf("failed to build options for Nats provider with ID \"%s\": %w", providerID, err) - } - natsConnection, err := nats.Connect(eventSource.URL, options...) - if err != nil { - return fmt.Errorf("failed to create connection for Nats provider with ID \"%s\": %w", providerID, err) - } - js, err := jetstream.New(natsConnection) - if err != nil { - return err - } - - s.pubSubProviders.nats[providerID] = pubsubNats.NewConnector(s.logger, natsConnection, js, s.hostName, s.routerListenAddr).New(ctx) - - break - } - } - - _, ok = s.pubSubProviders.nats[providerID] - if !ok { - return fmt.Errorf("failed to find Nats provider with ID \"%s\". Ensure the provider definition is part of the config", providerID) - } - } - - for _, eventConfiguration := range datasourceConfiguration.GetCustomEvents().GetKafka() { - - providerID := eventConfiguration.EngineEventConfiguration.GetProviderId() - // if this source name's provider has already been initiated, do not try to initiate again - _, ok := s.pubSubProviders.kafka[providerID] - if ok { - continue - } - - for _, eventSource := range routerEngineCfg.Events.Providers.Kafka { - if eventSource.ID == providerID { - options, err := buildKafkaOptions(eventSource) - if err != nil { - return fmt.Errorf("failed to build options for Kafka provider with ID \"%s\": %w", providerID, err) - } - ps, err := kafka.NewConnector(s.logger, options) - if err != nil { - return fmt.Errorf("failed to create connection for Kafka provider with ID \"%s\": %w", providerID, err) - } - - s.pubSubProviders.kafka[providerID] = ps.New(ctx) - - break - } - } - - _, ok = s.pubSubProviders.kafka[providerID] - if !ok { - return fmt.Errorf("failed to find Kafka provider with ID \"%s\". Ensure the provider definition is part of the config", providerID) - } - } - - } - - return nil -} +//func (s *graphServer) buildPubSubConfiguration(ctx context.Context, engineConfig *nodev1.EngineConfiguration, routerEngineCfg *RouterEngineConfiguration) error { +// datasourceConfigurations := engineConfig.GetDatasourceConfigurations() +// for _, datasourceConfiguration := range datasourceConfigurations { +// if datasourceConfiguration.CustomEvents == nil { +// continue +// } +// +// for _, eventConfiguration := range datasourceConfiguration.GetCustomEvents().GetNats() { +// +// providerID := eventConfiguration.EngineEventConfiguration.GetProviderId() +// // if this source name's provider has already been initiated, do not try to initiate again +// _, ok := s.pubSubProviders.nats[providerID] +// if ok { +// continue +// } +// +// for _, eventSource := range routerEngineCfg.Events.Providers.Nats { +// if eventSource.ID == eventConfiguration.EngineEventConfiguration.GetProviderId() { +// options, err := buildNatsOptions(eventSource, s.logger) +// if err != nil { +// return fmt.Errorf("failed to build options for Nats provider with ID \"%s\": %w", providerID, err) +// } +// natsConnection, err := nats.Connect(eventSource.URL, options...) +// if err != nil { +// return fmt.Errorf("failed to create connection for Nats provider with ID \"%s\": %w", providerID, err) +// } +// js, err := jetstream.New(natsConnection) +// if err != nil { +// return err +// } +// +// s.pubSubProviders.nats[providerID] = pubsubNats.NewConnector(s.logger, natsConnection, js, s.hostName, s.routerListenAddr).New(ctx) +// +// break +// } +// } +// +// _, ok = s.pubSubProviders.nats[providerID] +// if !ok { +// return fmt.Errorf("failed to find Nats provider with ID \"%s\". Ensure the provider definition is part of the config", providerID) +// } +// } +// +// for _, eventConfiguration := range datasourceConfiguration.GetCustomEvents().GetKafka() { +// +// providerID := eventConfiguration.EngineEventConfiguration.GetProviderId() +// // if this source name's provider has already been initiated, do not try to initiate again +// _, ok := s.pubSubProviders.kafka[providerID] +// if ok { +// continue +// } +// +// for _, eventSource := range routerEngineCfg.Events.Providers.Kafka { +// if eventSource.ID == providerID { +// options, err := buildKafkaOptions(eventSource) +// if err != nil { +// return fmt.Errorf("failed to build options for Kafka provider with ID \"%s\": %w", providerID, err) +// } +// ps, err := kafka.NewConnector(s.logger, options) +// if err != nil { +// return fmt.Errorf("failed to create connection for Kafka provider with ID \"%s\": %w", providerID, err) +// } +// +// s.pubSubProviders.kafka[providerID] = ps.New(ctx) +// +// break +// } +// } +// +// _, ok = s.pubSubProviders.kafka[providerID] +// if !ok { +// return fmt.Errorf("failed to find Kafka provider with ID \"%s\". Ensure the provider definition is part of the config", providerID) +// } +// } +// +// } +// +// return nil +//} // wait waits for all in-flight requests to finish. Similar to http.Server.Shutdown we wait in intervals + jitter // to make the shutdown process more efficient. @@ -1327,28 +1309,6 @@ func (s *graphServer) Shutdown(ctx context.Context) error { } } - if s.pubSubProviders != nil { - - s.logger.Debug("Shutting down pubsub providers") - - for _, pubSub := range s.pubSubProviders.nats { - if p, ok := pubSub.(pubsub.Lifecycle); ok { - if err := p.Shutdown(ctx); err != nil { - s.logger.Error("Failed to shutdown Nats pubsub provider", zap.Error(err)) - finalErr = errors.Join(finalErr, err) - } - } - } - for _, pubSub := range s.pubSubProviders.kafka { - if p, ok := pubSub.(pubsub.Lifecycle); ok { - if err := p.Shutdown(ctx); err != nil { - s.logger.Error("Failed to shutdown Kafka pubsub provider", zap.Error(err)) - finalErr = errors.Join(finalErr, err) - } - } - } - } - // Shutdown all graphs muxes to release resources // e.g. planner cache s.graphMuxListLock.Lock() diff --git a/router/core/plan_generator.go b/router/core/plan_generator.go index ecaa3dd500..33a52b504e 100644 --- a/router/core/plan_generator.go +++ b/router/core/plan_generator.go @@ -8,14 +8,12 @@ import ( "os" log "github.com/jensneuse/abstractlogger" - nodev1 "github.com/wundergraph/cosmo/router/gen/proto/wg/cosmo/node/v1" "github.com/wundergraph/graphql-go-tools/v2/pkg/ast" "github.com/wundergraph/graphql-go-tools/v2/pkg/astnormalization" "github.com/wundergraph/graphql-go-tools/v2/pkg/astparser" "github.com/wundergraph/graphql-go-tools/v2/pkg/asttransform" "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/datasource/graphql_datasource" "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/datasource/introspection_datasource" - "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/datasource/pubsub_datasource" "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/plan" "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/postprocess" "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/resolve" @@ -114,27 +112,6 @@ func (pg *PlanGenerator) loadConfiguration(configFilePath string) error { return err } - natSources := map[string]pubsub_datasource.NatsPubSub{} - kafkaSources := map[string]pubsub_datasource.KafkaPubSub{} - for _, ds := range routerConfig.GetEngineConfig().GetDatasourceConfigurations() { - if ds.GetKind() != nodev1.DataSourceKind_PUBSUB || ds.GetCustomEvents() == nil { - continue - } - for _, natConfig := range ds.GetCustomEvents().GetNats() { - providerId := natConfig.GetEngineEventConfiguration().GetProviderId() - if _, ok := natSources[providerId]; !ok { - natSources[providerId] = nil - } - } - for _, kafkaConfig := range ds.GetCustomEvents().GetKafka() { - providerId := kafkaConfig.GetEngineEventConfiguration().GetProviderId() - if _, ok := kafkaSources[providerId]; !ok { - kafkaSources[providerId] = nil - } - } - } - pubSubFactory := pubsub_datasource.NewFactory(context.Background(), natSources, kafkaSources) - var netPollConfig graphql_datasource.NetPollConfiguration netPollConfig.ApplyDefaults() @@ -152,7 +129,6 @@ func (pg *PlanGenerator) loadConfiguration(configFilePath string) error { streamingClient: http.DefaultClient, subscriptionClient: subscriptionClient, transportOptions: &TransportOptions{SubgraphTransportOptions: NewSubgraphTransportOptions(config.TrafficShapingRules{})}, - pubsub: pubSubFactory, }) // this generates the plan configuration using the data source factories from the config package diff --git a/router/pkg/pubsub/datasource/datasource.go b/router/pkg/pubsub/datasource/datasource.go new file mode 100644 index 0000000000..db7d8c9f0c --- /dev/null +++ b/router/pkg/pubsub/datasource/datasource.go @@ -0,0 +1,71 @@ +package datasource + +import ( + "context" + "fmt" + + nodev1 "github.com/wundergraph/cosmo/router/gen/proto/wg/cosmo/node/v1" + "github.com/wundergraph/cosmo/router/pkg/config" + "github.com/wundergraph/cosmo/router/pkg/pubsub/kafka" + "github.com/wundergraph/cosmo/router/pkg/pubsub/nats" + "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/plan" +) + +type PubSubImplementer[F any] interface { + VerifyConfig(in *nodev1.DataSourceConfiguration, dsMeta *plan.DataSourceMetadata, config config.EventsConfiguration) error + GetFactory(executionContext context.Context, config config.EventsConfiguration) F +} + +func GetDataSourcesFromConfig(ctx context.Context, in *nodev1.DataSourceConfiguration, dsMeta *plan.DataSourceMetadata, config config.EventsConfiguration) (plan.DataSource, error) { + var pubSubs []any + if natsData := in.GetCustomEvents().GetNats(); natsData != nil { + n := nats.NewPubSub() + err := n.VerifyConfig(in, dsMeta, config) + if err != nil { + return nil, err + } + factory := nats.NewFactory(ctx, config) + ds, err := plan.NewDataSourceConfiguration[nats.Configuration]( + in.Id, + factory, + dsMeta, + nats.Configuration{}, + ) + if err != nil { + return nil, err + } + pubSubs = append(pubSubs, ds) + } + if kafkaData := in.GetCustomEvents().GetKafka(); kafkaData != nil { + k := kafka.NewPubSub() + err := k.VerifyConfig(in, dsMeta, config) + if err != nil { + return nil, err + } + factory := k.GetFactory(ctx, config) + ds, err := plan.NewDataSourceConfiguration[kafka.Configuration]( + in.Id, + factory, + dsMeta, + kafka.Configuration{}, + ) + + if err != nil { + return nil, err + } + + pubSubs = append(pubSubs, ds) + } + + if len(pubSubs) == 0 { + return nil, fmt.Errorf("no pubsub data sources found for data source %s", in.Id) + } + + factory := NewFactory(ctx, pubSubs) + return plan.NewDataSourceConfiguration[Configuration]( + in.Id, + factory, + dsMeta, + Configuration{}, + ) +} diff --git a/router/pkg/pubsub/datasource/old.go b/router/pkg/pubsub/datasource/old.go new file mode 100644 index 0000000000..d1f53bb21c --- /dev/null +++ b/router/pkg/pubsub/datasource/old.go @@ -0,0 +1,290 @@ +package datasource + +import ( + "context" + "fmt" + "regexp" + "strings" + + "github.com/jensneuse/abstractlogger" + + "github.com/wundergraph/graphql-go-tools/v2/pkg/ast" + "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/plan" + "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/resolve" +) + +type EventType string + +const ( + EventTypePublish EventType = "publish" + EventTypeRequest EventType = "request" + EventTypeSubscribe EventType = "subscribe" +) + +var eventSubjectRegex = regexp.MustCompile(`{{ args.([a-zA-Z0-9_]+) }}`) + +func EventTypeFromString(s string) (EventType, error) { + et := EventType(strings.ToLower(s)) + switch et { + case EventTypePublish, EventTypeRequest, EventTypeSubscribe: + return et, nil + default: + return "", fmt.Errorf("invalid event type: %q", s) + } +} + +type Configuration struct { + pubSubs []Factory +} + +type Planner struct { + id int + pubSubs []any + eventManager any + rootFieldRef int + variables resolve.Variables + visitor *plan.Visitor + config Configuration +} + +func (p *Planner) SetID(id int) { + p.id = id +} + +func (p *Planner) ID() (id int) { + return p.id +} + +func (p *Planner) EnterField(ref int) { + if p.rootFieldRef != -1 { + // This is a nested field; nothing needs to be done + return + } + p.rootFieldRef = ref + + fieldName := p.visitor.Operation.FieldNameString(ref) + typeName := p.visitor.Walker.EnclosingTypeDefinition.NameString(p.visitor.Definition) + + p.visitor.Walker.StopWithInternalErr(fmt.Errorf("nope fieldName %s and typeName %s", fieldName, typeName)) + + //switch v := eventConfig.Configuration.(type) { + //case *NatsEventConfiguration: + // em := &NatsEventManager{ + // visitor: p.visitor, + // variables: &p.variables, + // eventMetadata: *eventConfig.Metadata, + // eventConfiguration: v, + // } + // p.eventManager = em + // + // switch eventConfig.Metadata.Type { + // case EventTypePublish, EventTypeRequest: + // em.handlePublishAndRequestEvent(ref) + // case EventTypeSubscribe: + // em.handleSubscriptionEvent(ref) + // default: + // p.visitor.Walker.StopWithInternalErr(fmt.Errorf("invalid EventType \"%s\" for Nats", eventConfig.Metadata.Type)) + // } + //case *KafkaEventConfiguration: + // em := &KafkaEventManager{ + // visitor: p.visitor, + // variables: &p.variables, + // eventMetadata: *eventConfig.Metadata, + // eventConfiguration: v, + // } + // p.eventManager = em + // + // switch eventConfig.Metadata.Type { + // case EventTypePublish: + // em.handlePublishEvent(ref) + // case EventTypeSubscribe: + // em.handleSubscriptionEvent(ref) + // default: + // p.visitor.Walker.StopWithInternalErr(fmt.Errorf("invalid EventType \"%s\" for Kafka", eventConfig.Metadata.Type)) + // } + //default: + // p.visitor.Walker.StopWithInternalErr(fmt.Errorf("invalid event configuration type: %T", v)) + //} +} + +func (p *Planner) EnterDocument(_, _ *ast.Document) { + p.rootFieldRef = -1 + p.eventManager = nil +} + +func (p *Planner) Register(visitor *plan.Visitor, configuration plan.DataSourceConfiguration[Configuration], dataSourcePlannerConfiguration plan.DataSourcePlannerConfiguration) error { + p.visitor = visitor + visitor.Walker.RegisterEnterFieldVisitor(p) + visitor.Walker.RegisterEnterDocumentVisitor(p) + p.config = configuration.CustomConfiguration() + return nil +} + +func (p *Planner) ConfigureFetch() resolve.FetchConfiguration { + if p.eventManager == nil { + p.visitor.Walker.StopWithInternalErr(fmt.Errorf("failed to configure fetch: event manager is nil")) + return resolve.FetchConfiguration{} + } + + //var dataSource resolve.DataSource + // + //switch v := p.eventManager.(type) { + //case *NatsEventManager: + // pubsub, ok := p.natsPubSubByProviderID[v.eventMetadata.ProviderID] + // if !ok { + // p.visitor.Walker.StopWithInternalErr(fmt.Errorf("no pubsub connection exists with provider id \"%s\"", v.eventMetadata.ProviderID)) + // return resolve.FetchConfiguration{} + // } + // + // switch v.eventMetadata.Type { + // case EventTypePublish: + // dataSource = &NatsPublishDataSource{ + // pubSub: pubsub, + // } + // case EventTypeRequest: + // dataSource = &NatsRequestDataSource{ + // pubSub: pubsub, + // } + // default: + // p.visitor.Walker.StopWithInternalErr(fmt.Errorf("failed to configure fetch: invalid event type \"%s\" for Nats", v.eventMetadata.Type)) + // return resolve.FetchConfiguration{} + // } + // + // return resolve.FetchConfiguration{ + // Input: v.publishAndRequestEventConfiguration.MarshalJSONTemplate(), + // Variables: p.variables, + // DataSource: dataSource, + // PostProcessing: resolve.PostProcessingConfiguration{ + // MergePath: []string{v.eventMetadata.FieldName}, + // }, + // } + // + //case *KafkaEventManager: + // pubsub, ok := p.kafkaPubSubByProviderID[v.eventMetadata.ProviderID] + // if !ok { + // p.visitor.Walker.StopWithInternalErr(fmt.Errorf("no pubsub connection exists with provider id \"%s\"", v.eventMetadata.ProviderID)) + // return resolve.FetchConfiguration{} + // } + // + // switch v.eventMetadata.Type { + // case EventTypePublish: + // dataSource = &KafkaPublishDataSource{ + // pubSub: pubsub, + // } + // case EventTypeRequest: + // p.visitor.Walker.StopWithInternalErr(fmt.Errorf("event type \"%s\" is not supported for Kafka", v.eventMetadata.Type)) + // return resolve.FetchConfiguration{} + // default: + // p.visitor.Walker.StopWithInternalErr(fmt.Errorf("failed to configure fetch: invalid event type \"%s\" for Kafka", v.eventMetadata.Type)) + // return resolve.FetchConfiguration{} + // } + // + // return resolve.FetchConfiguration{ + // Input: v.publishEventConfiguration.MarshalJSONTemplate(), + // Variables: p.variables, + // DataSource: dataSource, + // PostProcessing: resolve.PostProcessingConfiguration{ + // MergePath: []string{v.eventMetadata.FieldName}, + // }, + // } + // + //default: + // p.visitor.Walker.StopWithInternalErr(fmt.Errorf("failed to configure fetch: invalid event manager type: %T", p.eventManager)) + //} + + return resolve.FetchConfiguration{} +} + +func (p *Planner) ConfigureSubscription() plan.SubscriptionConfiguration { + if p.eventManager == nil { + p.visitor.Walker.StopWithInternalErr(fmt.Errorf("failed to configure subscription: event manager is nil")) + return plan.SubscriptionConfiguration{} + } + + //switch v := p.eventManager.(type) { + //case *NatsEventManager: + // pubsub, ok := p.natsPubSubByProviderID[v.eventMetadata.ProviderID] + // if !ok { + // p.visitor.Walker.StopWithInternalErr(fmt.Errorf("no pubsub connection exists with provider id \"%s\"", v.eventMetadata.ProviderID)) + // return plan.SubscriptionConfiguration{} + // } + // object, err := json.Marshal(v.subscriptionEventConfiguration) + // if err != nil { + // p.visitor.Walker.StopWithInternalErr(fmt.Errorf("failed to marshal event subscription streamConfiguration")) + // return plan.SubscriptionConfiguration{} + // } + // return plan.SubscriptionConfiguration{ + // Input: string(object), + // Variables: p.variables, + // DataSource: &NatsSubscriptionSource{ + // pubSub: pubsub, + // }, + // PostProcessing: resolve.PostProcessingConfiguration{ + // MergePath: []string{v.eventMetadata.FieldName}, + // }, + // } + //case *KafkaEventManager: + // pubsub, ok := p.kafkaPubSubByProviderID[v.eventMetadata.ProviderID] + // if !ok { + // p.visitor.Walker.StopWithInternalErr(fmt.Errorf("no pubsub connection exists with provider id \"%s\"", v.eventMetadata.ProviderID)) + // return plan.SubscriptionConfiguration{} + // } + // object, err := json.Marshal(v.subscriptionEventConfiguration) + // if err != nil { + // p.visitor.Walker.StopWithInternalErr(fmt.Errorf("failed to marshal event subscription streamConfiguration")) + // return plan.SubscriptionConfiguration{} + // } + // return plan.SubscriptionConfiguration{ + // Input: string(object), + // Variables: p.variables, + // DataSource: &KafkaSubscriptionSource{ + // pubSub: pubsub, + // }, + // PostProcessing: resolve.PostProcessingConfiguration{ + // MergePath: []string{v.eventMetadata.FieldName}, + // }, + // } + //default: + // p.visitor.Walker.StopWithInternalErr(fmt.Errorf("failed to configure subscription: invalid event manager type: %T", p.eventManager)) + //} + + return plan.SubscriptionConfiguration{} +} + +func (p *Planner) DataSourcePlanningBehavior() plan.DataSourcePlanningBehavior { + return plan.DataSourcePlanningBehavior{ + MergeAliasedRootNodes: false, + OverrideFieldPathFromAlias: false, + IncludeTypeNameFields: true, + } +} + +func (p *Planner) DownstreamResponseFieldAlias(_ int) (alias string, exists bool) { + return "", false +} + +func NewFactory(executionContext context.Context, pubSubs []any) *Factory { + return &Factory{ + executionContext: executionContext, + pubSubs: pubSubs, + } +} + +type Factory struct { + executionContext context.Context + pubSubs []any +} + +func (f *Factory) Planner(_ abstractlogger.Logger) plan.DataSourcePlanner[Configuration] { + return &Planner{ + pubSubs: f.pubSubs, + } +} + +func (f *Factory) Context() context.Context { + return f.executionContext +} + +func (f *Factory) UpstreamSchema(dataSourceConfig plan.DataSourceConfiguration[Configuration]) (*ast.Document, bool) { + return nil, false +} diff --git a/router/pkg/pubsub/datasource/providers.go b/router/pkg/pubsub/datasource/providers.go new file mode 100644 index 0000000000..0d7172bf8d --- /dev/null +++ b/router/pkg/pubsub/datasource/providers.go @@ -0,0 +1 @@ +package datasource diff --git a/router/pkg/pubsub/kafka/kafka_datasource.go b/router/pkg/pubsub/kafka/kafka_datasource.go new file mode 100644 index 0000000000..ae59f6bb97 --- /dev/null +++ b/router/pkg/pubsub/kafka/kafka_datasource.go @@ -0,0 +1,122 @@ +package kafka + +import ( + "bytes" + "context" + "fmt" + + "github.com/jensneuse/abstractlogger" + nodev1 "github.com/wundergraph/cosmo/router/gen/proto/wg/cosmo/node/v1" + "github.com/wundergraph/cosmo/router/pkg/config" + + "github.com/wundergraph/graphql-go-tools/v2/pkg/ast" + "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/datasource/httpclient" + "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/plan" + "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/resolve" +) + +type Kafka struct{} + +func (k *Kafka) VerifyConfig(in *nodev1.DataSourceConfiguration, dsMeta *plan.DataSourceMetadata, config config.EventsConfiguration) error { + providers := map[string]bool{} + for _, provider := range config.Providers.Kafka { + providers[provider.ID] = true + } + for _, event := range in.CustomEvents.GetKafka() { + if !providers[event.EngineEventConfiguration.ProviderId] { + return fmt.Errorf("failed to find Kafka provider with ID %s", event.EngineEventConfiguration.ProviderId) + } + } + return nil +} + +func (k *Kafka) GetFactory(executionContext context.Context, config config.EventsConfiguration) *Factory { + return NewFactory(executionContext, config) +} + +func NewPubSub() Kafka { + return Kafka{} +} + +type Configuration struct { + Data string `json:"data"` +} + +type Planner struct { + id int + config Configuration + eventsConfig config.EventsConfiguration +} + +func (p *Planner) SetID(id int) { + p.id = id +} + +func (p *Planner) ID() (id int) { + return p.id +} + +func (p *Planner) DownstreamResponseFieldAlias(downstreamFieldRef int) (alias string, exists bool) { + // skip, not required + return +} + +func (p *Planner) DataSourcePlanningBehavior() plan.DataSourcePlanningBehavior { + return plan.DataSourcePlanningBehavior{ + MergeAliasedRootNodes: false, + OverrideFieldPathFromAlias: false, + } +} + +func (p *Planner) Register(_ *plan.Visitor, configuration plan.DataSourceConfiguration[Configuration], _ plan.DataSourcePlannerConfiguration) error { + p.config = configuration.CustomConfiguration() + return nil +} + +func (p *Planner) ConfigureFetch() resolve.FetchConfiguration { + return resolve.FetchConfiguration{ + Input: p.config.Data, + DataSource: Source{}, + } +} + +func (p *Planner) ConfigureSubscription() plan.SubscriptionConfiguration { + return plan.SubscriptionConfiguration{ + Input: p.config.Data, + } +} + +type Source struct{} + +func (Source) Load(ctx context.Context, input []byte, out *bytes.Buffer) (err error) { + _, err = out.Write(input) + return +} + +func (Source) LoadWithFiles(ctx context.Context, input []byte, files []*httpclient.FileUpload, out *bytes.Buffer) (err error) { + panic("not implemented") +} + +func NewFactory(executionContext context.Context, config config.EventsConfiguration) *Factory { + return &Factory{ + executionContext: executionContext, + config: config, + } +} + +type Factory struct { + executionContext context.Context + config config.EventsConfiguration +} + +func (f *Factory) Planner(_ abstractlogger.Logger) plan.DataSourcePlanner[Configuration] { + return &Planner{} +} + +func (f *Factory) Context() context.Context { + return f.executionContext +} + +func (f *Factory) UpstreamSchema(dataSourceConfig plan.DataSourceConfiguration[Configuration]) (*ast.Document, bool) { + return nil, false +} diff --git a/router/pkg/pubsub/nats/nats_datasource.go b/router/pkg/pubsub/nats/nats_datasource.go new file mode 100644 index 0000000000..8c893a0567 --- /dev/null +++ b/router/pkg/pubsub/nats/nats_datasource.go @@ -0,0 +1,124 @@ +package nats + +import ( + "bytes" + "context" + "fmt" + + "github.com/jensneuse/abstractlogger" + nodev1 "github.com/wundergraph/cosmo/router/gen/proto/wg/cosmo/node/v1" + "github.com/wundergraph/cosmo/router/pkg/config" + + "github.com/wundergraph/graphql-go-tools/v2/pkg/ast" + "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/datasource/httpclient" + "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/plan" + "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/resolve" +) + +type Nats struct{} + +func (n *Nats) VerifyConfig(in *nodev1.DataSourceConfiguration, dsMeta *plan.DataSourceMetadata, config config.EventsConfiguration) error { + providers := map[string]bool{} + for _, provider := range config.Providers.Nats { + providers[provider.ID] = true + } + for _, event := range in.CustomEvents.GetNats() { + if !providers[event.EngineEventConfiguration.ProviderId] { + return fmt.Errorf("failed to find Nats provider with ID %s", event.EngineEventConfiguration.ProviderId) + } + } + return nil +} + +func (n *Nats) GetFactory(executionContext context.Context, config config.EventsConfiguration) *Factory { + return NewFactory(executionContext, config) +} + +func NewPubSub() Nats { + return Nats{} +} + +type Configuration struct { + Data string `json:"data"` +} + +type Planner struct { + id int + config Configuration +} + +func (p *Planner) SetID(id int) { + p.id = id +} + +func (p *Planner) ID() (id int) { + return p.id +} + +func (p *Planner) DownstreamResponseFieldAlias(downstreamFieldRef int) (alias string, exists bool) { + // skip, not required + return +} + +func (p *Planner) DataSourcePlanningBehavior() plan.DataSourcePlanningBehavior { + return plan.DataSourcePlanningBehavior{ + MergeAliasedRootNodes: false, + OverrideFieldPathFromAlias: false, + } +} + +func (p *Planner) Register(_ *plan.Visitor, configuration plan.DataSourceConfiguration[Configuration], _ plan.DataSourcePlannerConfiguration) error { + p.config = configuration.CustomConfiguration() + return nil +} + +func (p *Planner) ConfigureFetch() resolve.FetchConfiguration { + return resolve.FetchConfiguration{ + Input: p.config.Data, + DataSource: Source{}, + } +} + +func (p *Planner) ConfigureSubscription() plan.SubscriptionConfiguration { + return plan.SubscriptionConfiguration{ + Input: p.config.Data, + } +} + +type Source struct{} + +func (Source) Load(ctx context.Context, input []byte, out *bytes.Buffer) (err error) { + _, err = out.Write(input) + return +} + +func (Source) LoadWithFiles(ctx context.Context, input []byte, files []*httpclient.FileUpload, out *bytes.Buffer) (err error) { + panic("not implemented") +} + +func NewFactory(executionContext context.Context, config config.EventsConfiguration) *Factory { + return &Factory{ + executionContext: executionContext, + eventsConfiguration: config, + } +} + +type Factory struct { + config Configuration + eventsConfiguration config.EventsConfiguration + executionContext context.Context +} + +func (f *Factory) Planner(_ abstractlogger.Logger) plan.DataSourcePlanner[Configuration] { + return &Planner{ + config: f.config, + } +} + +func (f *Factory) Context() context.Context { + return f.executionContext +} + +func (f *Factory) UpstreamSchema(dataSourceConfig plan.DataSourceConfiguration[Configuration]) (*ast.Document, bool) { + return nil, false +} From bca3e2bf6b998e35df240803927b09647a52e990 Mon Sep 17 00:00:00 2001 From: Alessandro Pagnin Date: Tue, 18 Mar 2025 16:41:14 +0100 Subject: [PATCH 002/126] feat(pubsub): refactor pubsub handling and add Kafka/NATS support --- router-tests/events/kafka_events_test.go | 64 +++++ router/core/errors.go | 4 +- router/core/executor.go | 79 +----- router/core/factoryresolver.go | 23 +- router/pkg/pubsub/datasource.go | 35 +++ router/pkg/pubsub/datasource/datasource.go | 68 +---- router/pkg/pubsub/{ => datasource}/error.go | 2 +- router/pkg/pubsub/datasource/old.go | 20 +- router/pkg/pubsub/datasource/providers.go | 1 - router/pkg/pubsub/kafka/kafka.go | 20 +- router/pkg/pubsub/kafka/kafka_datasource.go | 268 ++++++++++++++++-- .../pubsub/kafka/subscription_datasource.go | 87 ++++++ router/pkg/pubsub/nats/nats.go | 27 +- router/pkg/pubsub/nats/nats_datasource.go | 141 ++++++++- router/pkg/pubsub/utils/utils.go | 38 +++ 15 files changed, 673 insertions(+), 204 deletions(-) create mode 100644 router/pkg/pubsub/datasource.go rename router/pkg/pubsub/{ => datasource}/error.go (93%) delete mode 100644 router/pkg/pubsub/datasource/providers.go create mode 100644 router/pkg/pubsub/kafka/subscription_datasource.go create mode 100644 router/pkg/pubsub/utils/utils.go diff --git a/router-tests/events/kafka_events_test.go b/router-tests/events/kafka_events_test.go index 32e8ace611..36dd03b086 100644 --- a/router-tests/events/kafka_events_test.go +++ b/router-tests/events/kafka_events_test.go @@ -1050,6 +1050,70 @@ func TestKafkaEvents(t *testing.T) { xEnv.WaitForConnectionCount(0, KafkaWaitTimeout) }) }) + + t.Run("mutate", func(t *testing.T) { + t.Parallel() + + topics := []string{"employeeUpdated", "employeeUpdatedTwo"} + + testenv.Run(t, &testenv.Config{ + RouterConfigJSONTemplate: testenv.ConfigWithEdfsKafkaJSONTemplate, + EnableKafka: true, + }, func(t *testing.T, xEnv *testenv.Environment) { + ensureTopicExists(t, xEnv, topics...) + + var subscriptionOne struct { + employeeUpdatedMyKafka struct { + ID float64 `graphql:"id"` + Details struct { + Forename string `graphql:"forename"` + Surname string `graphql:"surname"` + } `graphql:"details"` + } `graphql:"employeeUpdatedMyKafka(employeeID: 3)"` + } + + surl := xEnv.GraphQLWebSocketSubscriptionURL() + client := graphql.NewSubscriptionClient(surl) + t.Cleanup(func() { + _ = client.Close() + }) + + var counter atomic.Uint32 + + subscriptionOneID, err := client.Subscribe(&subscriptionOne, nil, func(dataValue []byte, errValue error) error { + defer counter.Add(1) + require.NoError(t, errValue) + require.JSONEq(t, `{"updateEmployeeMyKafka":{"id":1,"details":{"forename":"Jens","surname":"Neuse"}}}`, string(dataValue)) + return nil + }) + require.NoError(t, err) + require.NotEmpty(t, subscriptionOneID) + + go func() { + clientErr := client.Run() + require.NoError(t, clientErr) + }() + + go func() { + require.Eventually(t, func() bool { + return counter.Load() == 1 + }, KafkaWaitTimeout, time.Millisecond*100) + _ = client.Close() + }() + + xEnv.WaitForSubscriptionCount(1, KafkaWaitTimeout) + + // Send a mutation to trigger the first subscription + resOne := xEnv.MakeGraphQLRequestOK(testenv.GraphQLRequest{ + Query: `mutation { updateEmployeeMyKafka(employeeID: 3, update: {name: "name test"}) { success } }`, + }) + require.JSONEq(t, `{"data":{"updateEmployeeMyKafka":{"id":3}}}`, resOne.Body) + + xEnv.WaitForMessagesSent(1, KafkaWaitTimeout) + xEnv.WaitForSubscriptionCount(0, KafkaWaitTimeout) + xEnv.WaitForConnectionCount(0, KafkaWaitTimeout) + }) + }) } func TestFlakyKafkaEvents(t *testing.T) { diff --git a/router/core/errors.go b/router/core/errors.go index 118c7256a1..f770c52fed 100644 --- a/router/core/errors.go +++ b/router/core/errors.go @@ -12,7 +12,7 @@ import ( rErrors "github.com/wundergraph/cosmo/router/internal/errors" "github.com/wundergraph/cosmo/router/internal/persistedoperation" "github.com/wundergraph/cosmo/router/internal/unique" - "github.com/wundergraph/cosmo/router/pkg/pubsub" + "github.com/wundergraph/cosmo/router/pkg/pubsub/datasource" rtrace "github.com/wundergraph/cosmo/router/pkg/trace" "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/datasource/graphql_datasource" "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/resolve" @@ -73,7 +73,7 @@ func getErrorType(err error) errorType { return errorTypeContextTimeout } } - var edfsErr *pubsub.Error + var edfsErr *datasource.Error if errors.As(err, &edfsErr) { return errorTypeEDFS } diff --git a/router/core/executor.go b/router/core/executor.go index d3e35b7fea..d26203bba3 100644 --- a/router/core/executor.go +++ b/router/core/executor.go @@ -2,15 +2,10 @@ package core import ( "context" - "crypto/tls" - "errors" "fmt" "net/http" "time" - "github.com/nats-io/nats.go" - "github.com/twmb/franz-go/pkg/kgo" - "github.com/twmb/franz-go/pkg/sasl/plain" "go.uber.org/zap" "github.com/wundergraph/graphql-go-tools/v2/pkg/ast" @@ -195,78 +190,6 @@ func (b *ExecutorConfigurationBuilder) Build(ctx context.Context, opts *Executor }, nil } -func buildNatsOptions(eventSource config.NatsEventSource, logger *zap.Logger) ([]nats.Option, error) { - opts := []nats.Option{ - nats.Name(fmt.Sprintf("cosmo.router.edfs.nats.%s", eventSource.ID)), - nats.ReconnectJitter(500*time.Millisecond, 2*time.Second), - nats.ClosedHandler(func(conn *nats.Conn) { - logger.Info("NATS connection closed", zap.String("provider_id", eventSource.ID), zap.Error(conn.LastError())) - }), - nats.ConnectHandler(func(nc *nats.Conn) { - logger.Info("NATS connection established", zap.String("provider_id", eventSource.ID), zap.String("url", nc.ConnectedUrlRedacted())) - }), - nats.DisconnectErrHandler(func(nc *nats.Conn, err error) { - if err != nil { - logger.Error("NATS disconnected; will attempt to reconnect", zap.Error(err), zap.String("provider_id", eventSource.ID)) - } else { - logger.Info("NATS disconnected", zap.String("provider_id", eventSource.ID)) - } - }), - nats.ErrorHandler(func(conn *nats.Conn, subscription *nats.Subscription, err error) { - if errors.Is(err, nats.ErrSlowConsumer) { - logger.Warn( - "NATS slow consumer detected. Events are being dropped. Please consider increasing the buffer size or reducing the number of messages being sent.", - zap.Error(err), - zap.String("provider_id", eventSource.ID), - ) - } else { - logger.Error("NATS error", zap.Error(err)) - } - }), - nats.ReconnectHandler(func(conn *nats.Conn) { - logger.Info("NATS reconnected", zap.String("provider_id", eventSource.ID), zap.String("url", conn.ConnectedUrlRedacted())) - }), - } - - if eventSource.Authentication != nil { - if eventSource.Authentication.Token != nil { - opts = append(opts, nats.Token(*eventSource.Authentication.Token)) - } else if eventSource.Authentication.UserInfo.Username != nil && eventSource.Authentication.UserInfo.Password != nil { - opts = append(opts, nats.UserInfo(*eventSource.Authentication.UserInfo.Username, *eventSource.Authentication.UserInfo.Password)) - } - } - - return opts, nil -} - -// buildKafkaOptions creates a list of kgo.Opt options for the given Kafka event source configuration. -// Only general options like TLS, SASL, etc. are configured here. Specific options like topics, etc. are -// configured in the KafkaPubSub implementation. -func buildKafkaOptions(eventSource config.KafkaEventSource) ([]kgo.Opt, error) { - opts := []kgo.Opt{ - kgo.SeedBrokers(eventSource.Brokers...), - // Ensure proper timeouts are set - kgo.ProduceRequestTimeout(10 * time.Second), - kgo.ConnIdleTimeout(60 * time.Second), - } - - if eventSource.TLS != nil && eventSource.TLS.Enabled { - opts = append(opts, - // Configure TLS. Uses SystemCertPool for RootCAs by default. - kgo.DialTLSConfig(new(tls.Config)), - ) - } - - if eventSource.Authentication != nil && eventSource.Authentication.SASLPlain.Username != nil && eventSource.Authentication.SASLPlain.Password != nil { - opts = append(opts, kgo.SASL(plain.Auth{ - User: *eventSource.Authentication.SASLPlain.Username, - Pass: *eventSource.Authentication.SASLPlain.Password, - }.AsMechanism())) - } - - return opts, nil -} - func (b *ExecutorConfigurationBuilder) buildPlannerConfiguration(ctx context.Context, engineConfig *nodev1.EngineConfiguration, subgraphs []*nodev1.Subgraph, routerEngineCfg *RouterEngineConfiguration) (*plan.Configuration, error) { // this loader is used to take the engine config and create a plan config // the plan config is what the engine uses to turn a GraphQL Request into an execution plan @@ -279,7 +202,7 @@ func (b *ExecutorConfigurationBuilder) buildPlannerConfiguration(ctx context.Con b.logger, routerEngineCfg.Execution.EnableSingleFlight, routerEngineCfg.Execution.EnableNetPoll, - )) + ), b.logger) // this generates the plan config using the data source factories from the config package planConfig, err := loader.Load(engineConfig, subgraphs, routerEngineCfg) diff --git a/router/core/factoryresolver.go b/router/core/factoryresolver.go index 1e44cda7f9..5ae818a7f3 100644 --- a/router/core/factoryresolver.go +++ b/router/core/factoryresolver.go @@ -9,7 +9,7 @@ import ( "slices" "github.com/buger/jsonparser" - pubsubDatasource "github.com/wundergraph/cosmo/router/pkg/pubsub/datasource" + "github.com/wundergraph/cosmo/router/pkg/pubsub" "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/argument_templates" "github.com/wundergraph/cosmo/router/pkg/config" @@ -29,6 +29,7 @@ type Loader struct { resolver FactoryResolver // includeInfo controls whether additional information like type usage and field usage is included in the plan includeInfo bool + logger *zap.Logger } type FactoryResolver interface { @@ -133,10 +134,11 @@ func (d *DefaultFactoryResolver) ResolveStaticFactory() (factory plan.PlannerFac return d.static, nil } -func NewLoader(includeInfo bool, resolver FactoryResolver) *Loader { +func NewLoader(includeInfo bool, resolver FactoryResolver, logger *zap.Logger) *Loader { return &Loader{ resolver: resolver, includeInfo: includeInfo, + logger: logger, } } @@ -245,7 +247,7 @@ func (l *Loader) Load(engineConfig *nodev1.EngineConfiguration, subgraphs []*nod } for _, in := range engineConfig.DatasourceConfigurations { - var out plan.DataSource + var outs []plan.DataSource switch in.Kind { case nodev1.DataSourceKind_STATIC: @@ -254,6 +256,7 @@ func (l *Loader) Load(engineConfig *nodev1.EngineConfiguration, subgraphs []*nod return nil, err } + var out plan.DataSource out, err = plan.NewDataSourceConfiguration[staticdatasource.Configuration]( in.Id, factory, @@ -265,6 +268,7 @@ func (l *Loader) Load(engineConfig *nodev1.EngineConfiguration, subgraphs []*nod if err != nil { return nil, fmt.Errorf("error creating data source configuration for data source %s: %w", in.Id, err) } + outs = append(outs, out) case nodev1.DataSourceKind_GRAPHQL: header := http.Header{} @@ -372,6 +376,7 @@ func (l *Loader) Load(engineConfig *nodev1.EngineConfiguration, subgraphs []*nod return nil, err } + var out plan.DataSource out, err = plan.NewDataSourceConfigurationWithName[graphql_datasource.Configuration]( in.Id, dataSourceName, @@ -382,10 +387,18 @@ func (l *Loader) Load(engineConfig *nodev1.EngineConfiguration, subgraphs []*nod if err != nil { return nil, fmt.Errorf("error creating data source configuration for data source %s: %w", in.Id, err) } + outs = append(outs, out) case nodev1.DataSourceKind_PUBSUB: var err error - out, err = pubsubDatasource.GetDataSourcesFromConfig(context.Background(), in, l.dataSourceMetaData(in), routerEngineConfig.Events) + + outs, err = pubsub.GetDataSourcesFromConfig( + context.Background(), + in, + l.dataSourceMetaData(in), + routerEngineConfig.Events, + l.logger, + ) if err != nil { return nil, err } @@ -393,7 +406,7 @@ func (l *Loader) Load(engineConfig *nodev1.EngineConfiguration, subgraphs []*nod return nil, fmt.Errorf("unknown data source type %q", in.Kind) } - outConfig.DataSources = append(outConfig.DataSources, out) + outConfig.DataSources = append(outConfig.DataSources, outs...) } return &outConfig, nil } diff --git a/router/pkg/pubsub/datasource.go b/router/pkg/pubsub/datasource.go new file mode 100644 index 0000000000..c5bf21a575 --- /dev/null +++ b/router/pkg/pubsub/datasource.go @@ -0,0 +1,35 @@ +package pubsub + +import ( + "context" + "fmt" + + nodev1 "github.com/wundergraph/cosmo/router/gen/proto/wg/cosmo/node/v1" + "github.com/wundergraph/cosmo/router/pkg/config" + "github.com/wundergraph/cosmo/router/pkg/pubsub/datasource" + "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/plan" + "go.uber.org/zap" + + // Register all PubSub implementations + _ "github.com/wundergraph/cosmo/router/pkg/pubsub/kafka" + _ "github.com/wundergraph/cosmo/router/pkg/pubsub/nats" +) + +func GetDataSourcesFromConfig(ctx context.Context, in *nodev1.DataSourceConfiguration, dsMeta *plan.DataSourceMetadata, config config.EventsConfiguration, logger *zap.Logger) ([]plan.DataSource, error) { + var dataSources []plan.DataSource + for _, pubSub := range datasource.GetRegisteredPubSubs() { + ds, err := pubSub(ctx, in, dsMeta, config, logger) + if err != nil { + return nil, err + } + if ds != nil { + dataSources = append(dataSources, ds) + } + } + + if len(dataSources) == 0 { + return nil, fmt.Errorf("no pubsub data sources found for data source %s", in.Id) + } + + return dataSources, nil +} diff --git a/router/pkg/pubsub/datasource/datasource.go b/router/pkg/pubsub/datasource/datasource.go index db7d8c9f0c..20a7ee12ab 100644 --- a/router/pkg/pubsub/datasource/datasource.go +++ b/router/pkg/pubsub/datasource/datasource.go @@ -2,70 +2,26 @@ package datasource import ( "context" - "fmt" nodev1 "github.com/wundergraph/cosmo/router/gen/proto/wg/cosmo/node/v1" "github.com/wundergraph/cosmo/router/pkg/config" - "github.com/wundergraph/cosmo/router/pkg/pubsub/kafka" - "github.com/wundergraph/cosmo/router/pkg/pubsub/nats" "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/plan" + "go.uber.org/zap" ) -type PubSubImplementer[F any] interface { - VerifyConfig(in *nodev1.DataSourceConfiguration, dsMeta *plan.DataSourceMetadata, config config.EventsConfiguration) error - GetFactory(executionContext context.Context, config config.EventsConfiguration) F -} - -func GetDataSourcesFromConfig(ctx context.Context, in *nodev1.DataSourceConfiguration, dsMeta *plan.DataSourceMetadata, config config.EventsConfiguration) (plan.DataSource, error) { - var pubSubs []any - if natsData := in.GetCustomEvents().GetNats(); natsData != nil { - n := nats.NewPubSub() - err := n.VerifyConfig(in, dsMeta, config) - if err != nil { - return nil, err - } - factory := nats.NewFactory(ctx, config) - ds, err := plan.NewDataSourceConfiguration[nats.Configuration]( - in.Id, - factory, - dsMeta, - nats.Configuration{}, - ) - if err != nil { - return nil, err - } - pubSubs = append(pubSubs, ds) - } - if kafkaData := in.GetCustomEvents().GetKafka(); kafkaData != nil { - k := kafka.NewPubSub() - err := k.VerifyConfig(in, dsMeta, config) - if err != nil { - return nil, err - } - factory := k.GetFactory(ctx, config) - ds, err := plan.NewDataSourceConfiguration[kafka.Configuration]( - in.Id, - factory, - dsMeta, - kafka.Configuration{}, - ) +type Getter func(ctx context.Context, in *nodev1.DataSourceConfiguration, dsMeta *plan.DataSourceMetadata, config config.EventsConfiguration, logger *zap.Logger) (plan.DataSource, error) - if err != nil { - return nil, err - } +var pubSubs []Getter - pubSubs = append(pubSubs, ds) - } +func RegisterPubSub(pubSub Getter) { + pubSubs = append(pubSubs, pubSub) +} - if len(pubSubs) == 0 { - return nil, fmt.Errorf("no pubsub data sources found for data source %s", in.Id) - } +func GetRegisteredPubSubs() []Getter { + return pubSubs +} - factory := NewFactory(ctx, pubSubs) - return plan.NewDataSourceConfiguration[Configuration]( - in.Id, - factory, - dsMeta, - Configuration{}, - ) +type PubSubImplementer[F any] interface { + PrepareProviders(ctx context.Context, in *nodev1.DataSourceConfiguration, dsMeta *plan.DataSourceMetadata, config config.EventsConfiguration) error + GetFactory(executionContext context.Context, config config.EventsConfiguration) F } diff --git a/router/pkg/pubsub/error.go b/router/pkg/pubsub/datasource/error.go similarity index 93% rename from router/pkg/pubsub/error.go rename to router/pkg/pubsub/datasource/error.go index f6220fb7b1..f09b271688 100644 --- a/router/pkg/pubsub/error.go +++ b/router/pkg/pubsub/datasource/error.go @@ -1,4 +1,4 @@ -package pubsub +package datasource type Error struct { Internal error diff --git a/router/pkg/pubsub/datasource/old.go b/router/pkg/pubsub/datasource/old.go index d1f53bb21c..b4528243f5 100644 --- a/router/pkg/pubsub/datasource/old.go +++ b/router/pkg/pubsub/datasource/old.go @@ -33,8 +33,16 @@ func EventTypeFromString(s string) (EventType, error) { } } +type EventMetadata struct { + ProviderID string `json:"providerId"` + Type EventType `json:"type"` + TypeName string `json:"typeName"` + FieldName string `json:"fieldName"` +} + type Configuration struct { - pubSubs []Factory + Metadata *EventMetadata `json:"metadata"` + pubSubs []plan.Planner } type Planner struct { @@ -65,6 +73,16 @@ func (p *Planner) EnterField(ref int) { fieldName := p.visitor.Operation.FieldNameString(ref) typeName := p.visitor.Walker.EnclosingTypeDefinition.NameString(p.visitor.Definition) + //var eventConfig PubSubber + //for _, cfg := range p.config.pubSubs { + // if pubSub, ok := cfg.(PubSubber); ok { + // if pubSub.MatchFieldNameAndType(fieldName, typeName) { + // eventConfig = &cfg + // break + // } + // } + //} + p.visitor.Walker.StopWithInternalErr(fmt.Errorf("nope fieldName %s and typeName %s", fieldName, typeName)) //switch v := eventConfig.Configuration.(type) { diff --git a/router/pkg/pubsub/datasource/providers.go b/router/pkg/pubsub/datasource/providers.go deleted file mode 100644 index 0d7172bf8d..0000000000 --- a/router/pkg/pubsub/datasource/providers.go +++ /dev/null @@ -1 +0,0 @@ -package datasource diff --git a/router/pkg/pubsub/kafka/kafka.go b/router/pkg/pubsub/kafka/kafka.go index 8d2a645e63..6a9260342a 100644 --- a/router/pkg/pubsub/kafka/kafka.go +++ b/router/pkg/pubsub/kafka/kafka.go @@ -10,17 +10,12 @@ import ( "github.com/twmb/franz-go/pkg/kerr" "github.com/twmb/franz-go/pkg/kgo" - "github.com/wundergraph/cosmo/router/pkg/pubsub" - "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/datasource/pubsub_datasource" + "github.com/wundergraph/cosmo/router/pkg/pubsub/datasource" "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/resolve" "go.uber.org/zap" ) var ( - _ pubsub_datasource.KafkaConnector = (*connector)(nil) - _ pubsub_datasource.KafkaPubSub = (*kafkaPubSub)(nil) - _ pubsub.Lifecycle = (*kafkaPubSub)(nil) - errClientClosed = errors.New("client closed") ) @@ -30,8 +25,7 @@ type connector struct { logger *zap.Logger } -func NewConnector(logger *zap.Logger, opts []kgo.Opt) (pubsub_datasource.KafkaConnector, error) { - +func NewConnector(logger *zap.Logger, opts []kgo.Opt) (*connector, error) { writeClient, err := kgo.NewClient(append(opts, // For observability, we set the client ID to "router" kgo.ClientID("cosmo.router.producer"))..., @@ -47,7 +41,7 @@ func NewConnector(logger *zap.Logger, opts []kgo.Opt) (pubsub_datasource.KafkaCo }, nil } -func (c *connector) New(ctx context.Context) pubsub_datasource.KafkaPubSub { +func (c *connector) New(ctx context.Context) *kafkaPubSub { ctx, cancel := context.WithCancel(ctx) @@ -132,7 +126,7 @@ func (p *kafkaPubSub) topicPoller(ctx context.Context, client *kgo.Client, updat // Subscribe subscribes to the given topics and updates the subscription updater. // The engine already deduplicates subscriptions with the same topics, stream configuration, extensions, headers, etc. -func (p *kafkaPubSub) Subscribe(ctx context.Context, event pubsub_datasource.KafkaSubscriptionEventConfiguration, updater resolve.SubscriptionUpdater) error { +func (p *kafkaPubSub) Subscribe(ctx context.Context, event SubscriptionEventConfiguration, updater resolve.SubscriptionUpdater) error { log := p.logger.With( zap.String("provider_id", event.ProviderID), @@ -140,8 +134,6 @@ func (p *kafkaPubSub) Subscribe(ctx context.Context, event pubsub_datasource.Kaf zap.Strings("topics", event.Topics), ) - log.Debug("subscribe") - // Create a new client for the topic client, err := kgo.NewClient(append(p.opts, kgo.ConsumeTopics(event.Topics...), @@ -181,7 +173,7 @@ func (p *kafkaPubSub) Subscribe(ctx context.Context, event pubsub_datasource.Kaf // Publish publishes the given event to the Kafka topic in a non-blocking way. // Publish errors are logged and returned as a pubsub error. // The event is written with a dedicated write client. -func (p *kafkaPubSub) Publish(ctx context.Context, event pubsub_datasource.KafkaPublishEventConfiguration) error { +func (p *kafkaPubSub) Publish(ctx context.Context, event PublishEventConfiguration) error { log := p.logger.With( zap.String("provider_id", event.ProviderID), zap.String("method", "publish"), @@ -209,7 +201,7 @@ func (p *kafkaPubSub) Publish(ctx context.Context, event pubsub_datasource.Kafka if pErr != nil { log.Error("publish error", zap.Error(pErr)) - return pubsub.NewError(fmt.Sprintf("error publishing to Kafka topic %s", event.Topic), pErr) + return datasource.NewError(fmt.Sprintf("error publishing to Kafka topic %s", event.Topic), pErr) } return nil diff --git a/router/pkg/pubsub/kafka/kafka_datasource.go b/router/pkg/pubsub/kafka/kafka_datasource.go index ae59f6bb97..780bc13c50 100644 --- a/router/pkg/pubsub/kafka/kafka_datasource.go +++ b/router/pkg/pubsub/kafka/kafka_datasource.go @@ -3,11 +3,19 @@ package kafka import ( "bytes" "context" + "crypto/tls" + "encoding/json" "fmt" + "time" "github.com/jensneuse/abstractlogger" + "github.com/twmb/franz-go/pkg/kgo" + "github.com/twmb/franz-go/pkg/sasl/plain" nodev1 "github.com/wundergraph/cosmo/router/gen/proto/wg/cosmo/node/v1" "github.com/wundergraph/cosmo/router/pkg/config" + "github.com/wundergraph/cosmo/router/pkg/pubsub/datasource" + "github.com/wundergraph/cosmo/router/pkg/pubsub/utils" + "go.uber.org/zap" "github.com/wundergraph/graphql-go-tools/v2/pkg/ast" "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/datasource/httpclient" @@ -15,37 +23,126 @@ import ( "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/resolve" ) -type Kafka struct{} +func GetDataSource(ctx context.Context, in *nodev1.DataSourceConfiguration, dsMeta *plan.DataSourceMetadata, config config.EventsConfiguration, logger *zap.Logger) (plan.DataSource, error) { + if kafkaData := in.GetCustomEvents().GetKafka(); kafkaData != nil { + k := NewPubSub(logger) + err := k.PrepareProviders(ctx, in, dsMeta, config) + if err != nil { + return nil, err + } + factory := k.GetFactory(ctx, config) + ds, err := plan.NewDataSourceConfiguration[Configuration]( + in.Id, + factory, + dsMeta, + Configuration{ + EventConfiguration: kafkaData, + Logger: logger, + }, + ) + + if err != nil { + return nil, err + } + + return ds, nil + } + + return nil, nil +} + +func init() { + datasource.RegisterPubSub(GetDataSource) +} + +type Kafka struct { + logger *zap.Logger + providers map[string]*kafkaPubSub +} + +// buildKafkaOptions creates a list of kgo.Opt options for the given Kafka event source configuration. +// Only general options like TLS, SASL, etc. are configured here. Specific options like topics, etc. are +// configured in the KafkaPubSub implementation. +func buildKafkaOptions(eventSource config.KafkaEventSource) ([]kgo.Opt, error) { + opts := []kgo.Opt{ + kgo.SeedBrokers(eventSource.Brokers...), + // Ensure proper timeouts are set + kgo.ProduceRequestTimeout(10 * time.Second), + kgo.ConnIdleTimeout(60 * time.Second), + } + + if eventSource.TLS != nil && eventSource.TLS.Enabled { + opts = append(opts, + // Configure TLS. Uses SystemCertPool for RootCAs by default. + kgo.DialTLSConfig(new(tls.Config)), + ) + } + + if eventSource.Authentication != nil && eventSource.Authentication.SASLPlain.Username != nil && eventSource.Authentication.SASLPlain.Password != nil { + opts = append(opts, kgo.SASL(plain.Auth{ + User: *eventSource.Authentication.SASLPlain.Username, + Pass: *eventSource.Authentication.SASLPlain.Password, + }.AsMechanism())) + } + + return opts, nil +} -func (k *Kafka) VerifyConfig(in *nodev1.DataSourceConfiguration, dsMeta *plan.DataSourceMetadata, config config.EventsConfiguration) error { - providers := map[string]bool{} +func (k *Kafka) PrepareProviders(ctx context.Context, in *nodev1.DataSourceConfiguration, dsMeta *plan.DataSourceMetadata, config config.EventsConfiguration) error { + definedProviders := make(map[string]bool) for _, provider := range config.Providers.Kafka { - providers[provider.ID] = true + definedProviders[provider.ID] = true } + usedProviders := make(map[string]bool) for _, event := range in.CustomEvents.GetKafka() { - if !providers[event.EngineEventConfiguration.ProviderId] { + if !definedProviders[event.EngineEventConfiguration.ProviderId] { return fmt.Errorf("failed to find Kafka provider with ID %s", event.EngineEventConfiguration.ProviderId) } + usedProviders[event.EngineEventConfiguration.ProviderId] = true + } + for _, provider := range config.Providers.Kafka { + if !usedProviders[provider.ID] { + continue + } + options, err := buildKafkaOptions(provider) + if err != nil { + return fmt.Errorf("failed to build options for Kafka provider with ID \"%s\": %w", provider.ID, err) + } + ps, err := NewConnector(k.logger, options) + if err != nil { + return fmt.Errorf("failed to create connection for Kafka provider with ID \"%s\": %w", provider.ID, err) + } + k.providers[provider.ID] = ps.New(ctx) } return nil } func (k *Kafka) GetFactory(executionContext context.Context, config config.EventsConfiguration) *Factory { - return NewFactory(executionContext, config) + return NewFactory(executionContext, config, k.providers) } -func NewPubSub() Kafka { - return Kafka{} +func NewPubSub(logger *zap.Logger) Kafka { + return Kafka{ + providers: map[string]*kafkaPubSub{}, + logger: logger, + } } type Configuration struct { - Data string `json:"data"` + Data string `json:"data"` + EventConfiguration []*nodev1.KafkaEventConfiguration + Logger *zap.Logger } type Planner struct { id int config Configuration eventsConfig config.EventsConfiguration + eventConfig *nodev1.KafkaEventConfiguration + rootFieldRef int + variables resolve.Variables + visitor *plan.Visitor + providers map[string]*kafkaPubSub } func (p *Planner) SetID(id int) { @@ -68,49 +165,186 @@ func (p *Planner) DataSourcePlanningBehavior() plan.DataSourcePlanningBehavior { } } -func (p *Planner) Register(_ *plan.Visitor, configuration plan.DataSourceConfiguration[Configuration], _ plan.DataSourcePlannerConfiguration) error { +func (p *Planner) Register(visitor *plan.Visitor, configuration plan.DataSourceConfiguration[Configuration], _ plan.DataSourcePlannerConfiguration) error { + p.visitor = visitor + visitor.Walker.RegisterEnterFieldVisitor(p) + visitor.Walker.RegisterEnterDocumentVisitor(p) p.config = configuration.CustomConfiguration() return nil } func (p *Planner) ConfigureFetch() resolve.FetchConfiguration { + if p.eventConfig == nil { + p.visitor.Walker.StopWithInternalErr(fmt.Errorf("failed to configure fetch: event config is nil")) + return resolve.FetchConfiguration{} + } + + var dataSource resolve.DataSource + providerId := p.eventConfig.GetEngineEventConfiguration().GetProviderId() + typeName := p.eventConfig.GetEngineEventConfiguration().GetType() + topics := p.eventConfig.GetTopics() + pubsub, ok := p.providers[providerId] + if !ok { + p.visitor.Walker.StopWithInternalErr(fmt.Errorf("no pubsub connection exists with provider id \"%s\"", providerId)) + return resolve.FetchConfiguration{} + } + + switch p.eventConfig.GetEngineEventConfiguration().GetType() { + case nodev1.EventType_PUBLISH: + dataSource = &KafkaPublishDataSource{ + pubSub: pubsub, + } + default: + p.visitor.Walker.StopWithInternalErr(fmt.Errorf("failed to configure fetch: invalid event type \"%s\" for Kafka", typeName.String())) + return resolve.FetchConfiguration{} + } + + if len(topics) != 1 { + p.visitor.Walker.StopWithInternalErr(fmt.Errorf("publish and request events should define one subject but received %d", len(topics))) + return resolve.FetchConfiguration{} + } + + topic := topics[0] + + event, eventErr := utils.BuildEventDataBytes(p.rootFieldRef, p.visitor, p.variables) + if eventErr != nil { + p.visitor.Walker.StopWithInternalErr(fmt.Errorf("failed to build event data bytes: %w", eventErr)) + return resolve.FetchConfiguration{} + } + + evtCfg := PublishEventConfiguration{ + ProviderID: providerId, + Topic: topic, + Data: event, + } + return resolve.FetchConfiguration{ - Input: p.config.Data, - DataSource: Source{}, + Input: evtCfg.MarshalJSONTemplate(), + Variables: p.variables, + DataSource: dataSource, + PostProcessing: resolve.PostProcessingConfiguration{ + MergePath: []string{p.eventConfig.GetEngineEventConfiguration().GetFieldName()}, + }, } } func (p *Planner) ConfigureSubscription() plan.SubscriptionConfiguration { + if p.eventConfig == nil { + p.visitor.Walker.StopWithInternalErr(fmt.Errorf("failed to configure subscription: event manager is nil")) + return plan.SubscriptionConfiguration{} + } + providerId := p.eventConfig.GetEngineEventConfiguration().GetProviderId() + pubsub, ok := p.providers[providerId] + if !ok { + p.visitor.Walker.StopWithInternalErr(fmt.Errorf("no pubsub connection exists with provider id \"%s\"", providerId)) + return plan.SubscriptionConfiguration{} + } + evtCfg := SubscriptionEventConfiguration{ + ProviderID: providerId, + Topics: p.eventConfig.GetTopics(), + } + object, err := json.Marshal(evtCfg) + if err != nil { + p.visitor.Walker.StopWithInternalErr(fmt.Errorf("failed to marshal event subscription streamConfiguration")) + return plan.SubscriptionConfiguration{} + } + return plan.SubscriptionConfiguration{ - Input: p.config.Data, + Input: string(object), + Variables: p.variables, + DataSource: &SubscriptionSource{ + pubSub: pubsub, + }, + PostProcessing: resolve.PostProcessingConfiguration{ + MergePath: []string{p.eventConfig.GetEngineEventConfiguration().GetFieldName()}, + }, + } +} + +func (p *Planner) EnterDocument(_, _ *ast.Document) { + p.rootFieldRef = -1 + p.eventConfig = nil +} + +func (p *Planner) EnterField(ref int) { + if p.rootFieldRef != -1 { + // This is a nested field; nothing needs to be done + return + } + p.rootFieldRef = ref + + fieldName := p.visitor.Operation.FieldNameString(ref) + typeName := p.visitor.Walker.EnclosingTypeDefinition.NameString(p.visitor.Definition) + + var eventConfig *nodev1.KafkaEventConfiguration + for _, cfg := range p.config.EventConfiguration { + if cfg.GetEngineEventConfiguration().GetTypeName() == typeName && cfg.GetEngineEventConfiguration().GetFieldName() == fieldName { + eventConfig = cfg + break + } + } + + if eventConfig == nil { + return + } + + p.eventConfig = eventConfig + + providerId := eventConfig.GetEngineEventConfiguration().GetProviderId() + + switch eventConfig.GetEngineEventConfiguration().GetType() { + case nodev1.EventType_PUBLISH: + if len(p.eventConfig.GetTopics()) != 1 { + p.visitor.Walker.StopWithInternalErr(fmt.Errorf("publish events should define one subject but received %d", len(p.eventConfig.GetTopics()))) + return + } + _, found := p.providers[providerId] + if !found { + p.visitor.Walker.StopWithInternalErr(fmt.Errorf("unable to publish events of provider %d", len(p.eventConfig.GetTopics()))) + } + _ = PublishEventConfiguration{ + ProviderID: providerId, + Topic: eventConfig.GetTopics()[0], + Data: json.RawMessage("[]"), + } + p.config.Logger.Warn("Publishing!") + // provider.Publish(provider.ctx, pubCfg) + case nodev1.EventType_SUBSCRIBE: + p.config.Logger.Warn("Subscribing!") + default: + p.visitor.Walker.StopWithInternalErr(fmt.Errorf("invalid EventType \"%s\" for Kafka", eventConfig.GetEngineEventConfiguration().GetType())) } } type Source struct{} -func (Source) Load(ctx context.Context, input []byte, out *bytes.Buffer) (err error) { +func (s *Source) Load(ctx context.Context, input []byte, out *bytes.Buffer) (err error) { _, err = out.Write(input) return } -func (Source) LoadWithFiles(ctx context.Context, input []byte, files []*httpclient.FileUpload, out *bytes.Buffer) (err error) { +func (s *Source) LoadWithFiles(ctx context.Context, input []byte, files []*httpclient.FileUpload, out *bytes.Buffer) (err error) { panic("not implemented") } -func NewFactory(executionContext context.Context, config config.EventsConfiguration) *Factory { +func NewFactory(executionContext context.Context, config config.EventsConfiguration, providers map[string]*kafkaPubSub) *Factory { return &Factory{ + providers: providers, executionContext: executionContext, config: config, } } type Factory struct { + providers map[string]*kafkaPubSub executionContext context.Context config config.EventsConfiguration } func (f *Factory) Planner(_ abstractlogger.Logger) plan.DataSourcePlanner[Configuration] { - return &Planner{} + return &Planner{ + providers: f.providers, + } } func (f *Factory) Context() context.Context { diff --git a/router/pkg/pubsub/kafka/subscription_datasource.go b/router/pkg/pubsub/kafka/subscription_datasource.go new file mode 100644 index 0000000000..3109d3cf35 --- /dev/null +++ b/router/pkg/pubsub/kafka/subscription_datasource.go @@ -0,0 +1,87 @@ +package kafka + +import ( + "bytes" + "context" + "encoding/json" + "fmt" + "io" + + "github.com/buger/jsonparser" + "github.com/cespare/xxhash/v2" + "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/datasource/httpclient" + "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/resolve" +) + +type SubscriptionEventConfiguration struct { + ProviderID string `json:"providerId"` + Topics []string `json:"topics"` +} + +type PublishEventConfiguration struct { + ProviderID string `json:"providerId"` + Topic string `json:"topic"` + Data json.RawMessage `json:"data"` +} + +func (s *PublishEventConfiguration) MarshalJSONTemplate() string { + return fmt.Sprintf(`{"topic":"%s", "data": %s, "providerId":"%s"}`, s.Topic, s.Data, s.ProviderID) +} + +type SubscriptionSource struct { + pubSub *kafkaPubSub +} + +func (s *SubscriptionSource) UniqueRequestID(ctx *resolve.Context, input []byte, xxh *xxhash.Digest) error { + + val, _, _, err := jsonparser.Get(input, "topics") + if err != nil { + return err + } + + _, err = xxh.Write(val) + if err != nil { + return err + } + + val, _, _, err = jsonparser.Get(input, "providerId") + if err != nil { + return err + } + + _, err = xxh.Write(val) + return err +} + +func (s *SubscriptionSource) Start(ctx *resolve.Context, input []byte, updater resolve.SubscriptionUpdater) error { + var subscriptionConfiguration SubscriptionEventConfiguration + err := json.Unmarshal(input, &subscriptionConfiguration) + if err != nil { + return err + } + + return s.pubSub.Subscribe(ctx.Context(), subscriptionConfiguration, updater) +} + +type KafkaPublishDataSource struct { + pubSub *kafkaPubSub +} + +func (s *KafkaPublishDataSource) Load(ctx context.Context, input []byte, out *bytes.Buffer) error { + var publishConfiguration PublishEventConfiguration + err := json.Unmarshal(input, &publishConfiguration) + if err != nil { + return err + } + + if err := s.pubSub.Publish(ctx, publishConfiguration); err != nil { + _, err = io.WriteString(out, `{"success": false}`) + return err + } + _, err = io.WriteString(out, `{"success": true}`) + return err +} + +func (s *KafkaPublishDataSource) LoadWithFiles(ctx context.Context, input []byte, files []*httpclient.FileUpload, out *bytes.Buffer) (err error) { + panic("not implemented") +} diff --git a/router/pkg/pubsub/nats/nats.go b/router/pkg/pubsub/nats/nats.go index 921b199e40..c609b55d3f 100644 --- a/router/pkg/pubsub/nats/nats.go +++ b/router/pkg/pubsub/nats/nats.go @@ -4,22 +4,17 @@ import ( "context" "errors" "fmt" + "io" + "sync" + "time" + "github.com/cespare/xxhash/v2" "github.com/nats-io/nats.go" "github.com/nats-io/nats.go/jetstream" - "github.com/wundergraph/cosmo/router/pkg/pubsub" + "github.com/wundergraph/cosmo/router/pkg/pubsub/datasource" "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/datasource/pubsub_datasource" "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/resolve" "go.uber.org/zap" - "io" - "sync" - "time" -) - -var ( - _ pubsub_datasource.NatsConnector = (*connector)(nil) - _ pubsub_datasource.NatsPubSub = (*natsPubSub)(nil) - _ pubsub.Lifecycle = (*natsPubSub)(nil) ) type connector struct { @@ -30,7 +25,7 @@ type connector struct { routerListenAddr string } -func NewConnector(logger *zap.Logger, conn *nats.Conn, js jetstream.JetStream, hostName string, routerListenAddr string) pubsub_datasource.NatsConnector { +func NewConnector(logger *zap.Logger, conn *nats.Conn, js jetstream.JetStream, hostName string, routerListenAddr string) *connector { return &connector{ conn: conn, logger: logger, @@ -40,7 +35,7 @@ func NewConnector(logger *zap.Logger, conn *nats.Conn, js jetstream.JetStream, h } } -func (c *connector) New(ctx context.Context) pubsub_datasource.NatsPubSub { +func (c *connector) New(ctx context.Context) *natsPubSub { return &natsPubSub{ ctx: ctx, conn: c.conn, @@ -113,7 +108,7 @@ func (p *natsPubSub) Subscribe(ctx context.Context, event pubsub_datasource.Nats consumer, err := p.js.CreateOrUpdateConsumer(ctx, event.StreamConfiguration.StreamName, consumerConfig) if err != nil { log.Error("error creating or updating consumer", zap.Error(err)) - return pubsub.NewError(fmt.Sprintf(`failed to create or update consumer for stream "%s"`, event.StreamConfiguration.StreamName), err) + return datasource.NewError(fmt.Sprintf(`failed to create or update consumer for stream "%s"`, event.StreamConfiguration.StreamName), err) } p.closeWg.Add(1) @@ -164,7 +159,7 @@ func (p *natsPubSub) Subscribe(ctx context.Context, event pubsub_datasource.Nats subscription, err := p.conn.ChanSubscribe(subject, msgChan) if err != nil { log.Error("error subscribing to NATS subject", zap.Error(err), zap.String("subscription_subject", subject)) - return pubsub.NewError(fmt.Sprintf(`failed to subscribe to NATS subject "%s"`, subject), err) + return datasource.NewError(fmt.Sprintf(`failed to subscribe to NATS subject "%s"`, subject), err) } subscriptions[i] = subscription } @@ -218,7 +213,7 @@ func (p *natsPubSub) Publish(_ context.Context, event pubsub_datasource.NatsPubl err := p.conn.Publish(event.Subject, event.Data) if err != nil { log.Error("publish error", zap.Error(err)) - return pubsub.NewError(fmt.Sprintf("error publishing to NATS subject %s", event.Subject), err) + return datasource.NewError(fmt.Sprintf("error publishing to NATS subject %s", event.Subject), err) } return nil @@ -236,7 +231,7 @@ func (p *natsPubSub) Request(ctx context.Context, event pubsub_datasource.NatsPu msg, err := p.conn.RequestWithContext(ctx, event.Subject, event.Data) if err != nil { log.Error("request error", zap.Error(err)) - return pubsub.NewError(fmt.Sprintf("error requesting from NATS subject %s", event.Subject), err) + return datasource.NewError(fmt.Sprintf("error requesting from NATS subject %s", event.Subject), err) } _, err = w.Write(msg.Data) diff --git a/router/pkg/pubsub/nats/nats_datasource.go b/router/pkg/pubsub/nats/nats_datasource.go index 8c893a0567..428175ec8d 100644 --- a/router/pkg/pubsub/nats/nats_datasource.go +++ b/router/pkg/pubsub/nats/nats_datasource.go @@ -3,11 +3,17 @@ package nats import ( "bytes" "context" + "errors" "fmt" + "time" "github.com/jensneuse/abstractlogger" + "github.com/nats-io/nats.go" + "github.com/nats-io/nats.go/jetstream" nodev1 "github.com/wundergraph/cosmo/router/gen/proto/wg/cosmo/node/v1" "github.com/wundergraph/cosmo/router/pkg/config" + "github.com/wundergraph/cosmo/router/pkg/pubsub/datasource" + "go.uber.org/zap" "github.com/wundergraph/graphql-go-tools/v2/pkg/ast" "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/datasource/httpclient" @@ -15,23 +21,126 @@ import ( "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/resolve" ) -type Nats struct{} +func GetDataSource(ctx context.Context, in *nodev1.DataSourceConfiguration, dsMeta *plan.DataSourceMetadata, config config.EventsConfiguration, logger *zap.Logger) (plan.DataSource, error) { + if natsData := in.GetCustomEvents().GetNats(); natsData != nil { + k := NewPubSub() + err := k.PrepareProviders(ctx, in, dsMeta, config) + if err != nil { + return nil, err + } + factory := k.GetFactory(ctx, config, k.providers) + ds, err := plan.NewDataSourceConfiguration[Configuration]( + in.Id, + factory, + dsMeta, + Configuration{ + EventConfiguration: natsData, + Logger: logger, + }, + ) + + if err != nil { + return nil, err + } -func (n *Nats) VerifyConfig(in *nodev1.DataSourceConfiguration, dsMeta *plan.DataSourceMetadata, config config.EventsConfiguration) error { - providers := map[string]bool{} - for _, provider := range config.Providers.Nats { - providers[provider.ID] = true + return ds, nil + } + + return nil, nil +} + +func init() { + datasource.RegisterPubSub(GetDataSource) +} + +func buildNatsOptions(eventSource config.NatsEventSource, logger *zap.Logger) ([]nats.Option, error) { + opts := []nats.Option{ + nats.Name(fmt.Sprintf("cosmo.router.edfs.nats.%s", eventSource.ID)), + nats.ReconnectJitter(500*time.Millisecond, 2*time.Second), + nats.ClosedHandler(func(conn *nats.Conn) { + logger.Info("NATS connection closed", zap.String("provider_id", eventSource.ID), zap.Error(conn.LastError())) + }), + nats.ConnectHandler(func(nc *nats.Conn) { + logger.Info("NATS connection established", zap.String("provider_id", eventSource.ID), zap.String("url", nc.ConnectedUrlRedacted())) + }), + nats.DisconnectErrHandler(func(nc *nats.Conn, err error) { + if err != nil { + logger.Error("NATS disconnected; will attempt to reconnect", zap.Error(err), zap.String("provider_id", eventSource.ID)) + } else { + logger.Info("NATS disconnected", zap.String("provider_id", eventSource.ID)) + } + }), + nats.ErrorHandler(func(conn *nats.Conn, subscription *nats.Subscription, err error) { + if errors.Is(err, nats.ErrSlowConsumer) { + logger.Warn( + "NATS slow consumer detected. Events are being dropped. Please consider increasing the buffer size or reducing the number of messages being sent.", + zap.Error(err), + zap.String("provider_id", eventSource.ID), + ) + } else { + logger.Error("NATS error", zap.Error(err)) + } + }), + nats.ReconnectHandler(func(conn *nats.Conn) { + logger.Info("NATS reconnected", zap.String("provider_id", eventSource.ID), zap.String("url", conn.ConnectedUrlRedacted())) + }), + } + + if eventSource.Authentication != nil { + if eventSource.Authentication.Token != nil { + opts = append(opts, nats.Token(*eventSource.Authentication.Token)) + } else if eventSource.Authentication.UserInfo.Username != nil && eventSource.Authentication.UserInfo.Password != nil { + opts = append(opts, nats.UserInfo(*eventSource.Authentication.UserInfo.Username, *eventSource.Authentication.UserInfo.Password)) + } + } + + return opts, nil +} + +type Nats struct { + providers map[string]*natsPubSub + logger *zap.Logger + hostName string // How to get it here? + routerListenAddr string // How to get it here? +} + +func (n *Nats) PrepareProviders(ctx context.Context, in *nodev1.DataSourceConfiguration, dsMeta *plan.DataSourceMetadata, config config.EventsConfiguration) error { + definedProviders := make(map[string]bool) + for _, provider := range config.Providers.Kafka { + definedProviders[provider.ID] = true } + usedProviders := make(map[string]bool) for _, event := range in.CustomEvents.GetNats() { - if !providers[event.EngineEventConfiguration.ProviderId] { + if _, found := definedProviders[event.EngineEventConfiguration.ProviderId]; !found { return fmt.Errorf("failed to find Nats provider with ID %s", event.EngineEventConfiguration.ProviderId) } + usedProviders[event.EngineEventConfiguration.ProviderId] = true + } + for _, provider := range config.Providers.Nats { + if !usedProviders[provider.ID] { + continue + } + options, err := buildNatsOptions(provider, n.logger) + if err != nil { + return fmt.Errorf("failed to build options for Nats provider with ID \"%s\": %w", provider.ID, err) + } + natsConnection, err := nats.Connect(provider.URL, options...) + if err != nil { + return fmt.Errorf("failed to create connection for Nats provider with ID \"%s\": %w", provider.ID, err) + } + js, err := jetstream.New(natsConnection) + if err != nil { + return err + } + + n.providers[provider.ID] = NewConnector(n.logger, natsConnection, js, n.hostName, n.routerListenAddr).New(ctx) + } return nil } -func (n *Nats) GetFactory(executionContext context.Context, config config.EventsConfiguration) *Factory { - return NewFactory(executionContext, config) +func (n *Nats) GetFactory(executionContext context.Context, config config.EventsConfiguration, providers map[string]*natsPubSub) *Factory { + return NewFactory(executionContext, config, providers) } func NewPubSub() Nats { @@ -39,12 +148,15 @@ func NewPubSub() Nats { } type Configuration struct { - Data string `json:"data"` + Data string `json:"data"` + EventConfiguration []*nodev1.NatsEventConfiguration + Logger *zap.Logger } type Planner struct { - id int - config Configuration + id int + config Configuration + providers map[string]*natsPubSub } func (p *Planner) SetID(id int) { @@ -96,10 +208,11 @@ func (Source) LoadWithFiles(ctx context.Context, input []byte, files []*httpclie panic("not implemented") } -func NewFactory(executionContext context.Context, config config.EventsConfiguration) *Factory { +func NewFactory(executionContext context.Context, config config.EventsConfiguration, providers map[string]*natsPubSub) *Factory { return &Factory{ executionContext: executionContext, eventsConfiguration: config, + providers: providers, } } @@ -107,11 +220,13 @@ type Factory struct { config Configuration eventsConfiguration config.EventsConfiguration executionContext context.Context + providers map[string]*natsPubSub } func (f *Factory) Planner(_ abstractlogger.Logger) plan.DataSourcePlanner[Configuration] { return &Planner{ - config: f.config, + config: f.config, + providers: f.providers, } } diff --git a/router/pkg/pubsub/utils/utils.go b/router/pkg/pubsub/utils/utils.go new file mode 100644 index 0000000000..92410b641e --- /dev/null +++ b/router/pkg/pubsub/utils/utils.go @@ -0,0 +1,38 @@ +package utils + +import ( + "bytes" + "encoding/json" + + "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/plan" + "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/resolve" +) + +func BuildEventDataBytes(ref int, visitor *plan.Visitor, variables resolve.Variables) ([]byte, error) { + // Collect the field arguments for fetch based operations + fieldArgs := visitor.Operation.FieldArguments(ref) + var dataBuffer bytes.Buffer + dataBuffer.WriteByte('{') + for i, arg := range fieldArgs { + if i > 0 { + dataBuffer.WriteByte(',') + } + argValue := visitor.Operation.ArgumentValue(arg) + variableName := visitor.Operation.VariableValueNameBytes(argValue.Ref) + contextVariable := &resolve.ContextVariable{ + Path: []string{string(variableName)}, + Renderer: resolve.NewPlainVariableRenderer(), + } + variablePlaceHolder, _ := variables.AddVariable(contextVariable) + argumentName := visitor.Operation.ArgumentNameString(arg) + escapedKey, err := json.Marshal(argumentName) + if err != nil { + return nil, err + } + dataBuffer.Write(escapedKey) + dataBuffer.WriteByte(':') + dataBuffer.WriteString(variablePlaceHolder) + } + dataBuffer.WriteByte('}') + return dataBuffer.Bytes(), nil +} From 5df3613983d3e3cb33374d3423f7362c7b09bf45 Mon Sep 17 00:00:00 2001 From: Alessandro Pagnin Date: Tue, 18 Mar 2025 16:49:12 +0100 Subject: [PATCH 003/126] feat(plan-generator): add logger to router initialization --- router/core/plan_generator.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/router/core/plan_generator.go b/router/core/plan_generator.go index a9e73ff777..a2628f5a54 100644 --- a/router/core/plan_generator.go +++ b/router/core/plan_generator.go @@ -8,6 +8,7 @@ import ( "os" log "github.com/jensneuse/abstractlogger" + nodev1 "github.com/wundergraph/cosmo/router/gen/proto/wg/cosmo/node/v1" "github.com/wundergraph/graphql-go-tools/v2/pkg/ast" "github.com/wundergraph/graphql-go-tools/v2/pkg/astnormalization" "github.com/wundergraph/graphql-go-tools/v2/pkg/astparser" @@ -174,7 +175,7 @@ func (pg *PlanGenerator) loadConfiguration(routerConfig *nodev1.RouterConfig, lo streamingClient: http.DefaultClient, subscriptionClient: subscriptionClient, transportOptions: &TransportOptions{SubgraphTransportOptions: NewSubgraphTransportOptions(config.TrafficShapingRules{})}, - }) + }, logger) // this generates the plan configuration using the data source factories from the config package planConfig, err := loader.Load(routerConfig.GetEngineConfig(), routerConfig.GetSubgraphs(), &RouterEngineConfiguration{}) From efaa122cd7c052ca0583cf7e844cf86fcffa1f6f Mon Sep 17 00:00:00 2001 From: Alessandro Pagnin Date: Thu, 20 Mar 2025 16:54:50 +0100 Subject: [PATCH 004/126] refactor(pubsub): nats is now working --- .../subgraphs/availability/availability.go | 4 +- .../availability/subgraph/resolver.go | 4 +- .../availability/subgraph/schema.resolvers.go | 6 +- demo/pkg/subgraphs/countries/countries.go | 4 +- .../subgraphs/countries/subgraph/resolver.go | 5 +- demo/pkg/subgraphs/employees/employees.go | 5 +- .../subgraphs/employees/subgraph/resolver.go | 4 +- demo/pkg/subgraphs/family/family.go | 4 +- .../pkg/subgraphs/family/subgraph/resolver.go | 4 +- demo/pkg/subgraphs/hobbies/hobbies.go | 4 +- .../subgraphs/hobbies/subgraph/resolver.go | 4 +- demo/pkg/subgraphs/mood/mood.go | 4 +- demo/pkg/subgraphs/mood/subgraph/resolver.go | 4 +- .../mood/subgraph/schema.resolvers.go | 6 +- demo/pkg/subgraphs/products/products.go | 4 +- .../subgraphs/products/subgraph/resolver.go | 7 +- demo/pkg/subgraphs/products_fg/products.go | 4 +- .../products_fg/subgraph/resolver.go | 7 +- demo/pkg/subgraphs/subgraphs.go | 5 +- demo/pkg/subgraphs/test1/subgraph/resolver.go | 4 +- demo/pkg/subgraphs/test1/test1.go | 4 +- router-tests/events/nats_events_test.go | 2 +- router-tests/testenv/testenv.go | 6 +- .../{kafka_datasource.go => datasource.go} | 4 +- router/pkg/pubsub/nats/datasource.go | 516 ++++++++++++++++++ router/pkg/pubsub/nats/nats.go | 21 +- router/pkg/pubsub/nats/nats_datasource.go | 239 -------- .../pubsub/nats/subscription_datasource.go | 122 +++++ router/pkg/pubsub/utils/utils.go | 2 +- 29 files changed, 703 insertions(+), 306 deletions(-) rename router/pkg/pubsub/kafka/{kafka_datasource.go => datasource.go} (99%) create mode 100644 router/pkg/pubsub/nats/datasource.go delete mode 100644 router/pkg/pubsub/nats/nats_datasource.go create mode 100644 router/pkg/pubsub/nats/subscription_datasource.go diff --git a/demo/pkg/subgraphs/availability/availability.go b/demo/pkg/subgraphs/availability/availability.go index f37ce470a5..ec693711cb 100644 --- a/demo/pkg/subgraphs/availability/availability.go +++ b/demo/pkg/subgraphs/availability/availability.go @@ -2,13 +2,13 @@ package availability import ( "github.com/99designs/gqlgen/graphql" - "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/datasource/pubsub_datasource" + "github.com/wundergraph/cosmo/router/pkg/pubsub/nats" "github.com/wundergraph/cosmo/demo/pkg/subgraphs/availability/subgraph" "github.com/wundergraph/cosmo/demo/pkg/subgraphs/availability/subgraph/generated" ) -func NewSchema(pubSubBySourceName map[string]pubsub_datasource.NatsPubSub, pubSubName func(string) string) graphql.ExecutableSchema { +func NewSchema(pubSubBySourceName map[string]*nats.NatsPubSub, pubSubName func(string) string) graphql.ExecutableSchema { return generated.NewExecutableSchema(generated.Config{Resolvers: &subgraph.Resolver{ NatsPubSubByProviderID: pubSubBySourceName, GetPubSubName: pubSubName, diff --git a/demo/pkg/subgraphs/availability/subgraph/resolver.go b/demo/pkg/subgraphs/availability/subgraph/resolver.go index 9ac6f82f89..554b11af76 100644 --- a/demo/pkg/subgraphs/availability/subgraph/resolver.go +++ b/demo/pkg/subgraphs/availability/subgraph/resolver.go @@ -1,7 +1,7 @@ package subgraph import ( - "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/datasource/pubsub_datasource" + "github.com/wundergraph/cosmo/router/pkg/pubsub/nats" ) // This file will not be regenerated automatically. @@ -9,6 +9,6 @@ import ( // It serves as dependency injection for your app, add any dependencies you require here. type Resolver struct { - NatsPubSubByProviderID map[string]pubsub_datasource.NatsPubSub + NatsPubSubByProviderID map[string]*nats.NatsPubSub GetPubSubName func(string) string } diff --git a/demo/pkg/subgraphs/availability/subgraph/schema.resolvers.go b/demo/pkg/subgraphs/availability/subgraph/schema.resolvers.go index 43797ed3dc..7067d88bf1 100644 --- a/demo/pkg/subgraphs/availability/subgraph/schema.resolvers.go +++ b/demo/pkg/subgraphs/availability/subgraph/schema.resolvers.go @@ -10,13 +10,13 @@ import ( "github.com/wundergraph/cosmo/demo/pkg/subgraphs/availability/subgraph/generated" "github.com/wundergraph/cosmo/demo/pkg/subgraphs/availability/subgraph/model" - "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/datasource/pubsub_datasource" + "github.com/wundergraph/cosmo/router/pkg/pubsub/nats" ) // UpdateAvailability is the resolver for the updateAvailability field. func (r *mutationResolver) UpdateAvailability(ctx context.Context, employeeID int, isAvailable bool) (*model.Employee, error) { storage.Set(employeeID, isAvailable) - err := r.NatsPubSubByProviderID["default"].Publish(ctx, pubsub_datasource.NatsPublishAndRequestEventConfiguration{ + err := r.NatsPubSubByProviderID["default"].Publish(ctx, nats.PublishAndRequestEventConfiguration{ Subject: r.GetPubSubName(fmt.Sprintf("employeeUpdated.%d", employeeID)), Data: []byte(fmt.Sprintf(`{"id":%d,"__typename": "Employee"}`, employeeID)), }) @@ -24,7 +24,7 @@ func (r *mutationResolver) UpdateAvailability(ctx context.Context, employeeID in if err != nil { return nil, err } - err = r.NatsPubSubByProviderID["my-nats"].Publish(ctx, pubsub_datasource.NatsPublishAndRequestEventConfiguration{ + err = r.NatsPubSubByProviderID["my-nats"].Publish(ctx, nats.PublishAndRequestEventConfiguration{ Subject: r.GetPubSubName(fmt.Sprintf("employeeUpdatedMyNats.%d", employeeID)), Data: []byte(fmt.Sprintf(`{"id":%d,"__typename": "Employee"}`, employeeID)), }) diff --git a/demo/pkg/subgraphs/countries/countries.go b/demo/pkg/subgraphs/countries/countries.go index 3a1ccb7427..3d5940c1e6 100644 --- a/demo/pkg/subgraphs/countries/countries.go +++ b/demo/pkg/subgraphs/countries/countries.go @@ -2,13 +2,13 @@ package countries import ( "github.com/99designs/gqlgen/graphql" - "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/datasource/pubsub_datasource" + "github.com/wundergraph/cosmo/router/pkg/pubsub/nats" "github.com/wundergraph/cosmo/demo/pkg/subgraphs/countries/subgraph" "github.com/wundergraph/cosmo/demo/pkg/subgraphs/countries/subgraph/generated" ) -func NewSchema(pubSubBySourceName map[string]pubsub_datasource.NatsPubSub) graphql.ExecutableSchema { +func NewSchema(pubSubBySourceName map[string]*nats.NatsPubSub) graphql.ExecutableSchema { return generated.NewExecutableSchema(generated.Config{Resolvers: &subgraph.Resolver{ NatsPubSubByProviderID: pubSubBySourceName, }}) diff --git a/demo/pkg/subgraphs/countries/subgraph/resolver.go b/demo/pkg/subgraphs/countries/subgraph/resolver.go index 4b235fdec9..c1f3775ab1 100644 --- a/demo/pkg/subgraphs/countries/subgraph/resolver.go +++ b/demo/pkg/subgraphs/countries/subgraph/resolver.go @@ -1,8 +1,9 @@ package subgraph import ( - "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/datasource/pubsub_datasource" "sync" + + "github.com/wundergraph/cosmo/router/pkg/pubsub/nats" ) // This file will not be regenerated automatically. @@ -11,5 +12,5 @@ import ( type Resolver struct { mux sync.Mutex - NatsPubSubByProviderID map[string]pubsub_datasource.NatsPubSub + NatsPubSubByProviderID map[string]*nats.NatsPubSub } diff --git a/demo/pkg/subgraphs/employees/employees.go b/demo/pkg/subgraphs/employees/employees.go index 408737da15..5b6b6eae19 100644 --- a/demo/pkg/subgraphs/employees/employees.go +++ b/demo/pkg/subgraphs/employees/employees.go @@ -2,13 +2,12 @@ package employees import ( "github.com/99designs/gqlgen/graphql" - "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/datasource/pubsub_datasource" - "github.com/wundergraph/cosmo/demo/pkg/subgraphs/employees/subgraph" "github.com/wundergraph/cosmo/demo/pkg/subgraphs/employees/subgraph/generated" + "github.com/wundergraph/cosmo/router/pkg/pubsub/nats" ) -func NewSchema(natsPubSubByProviderID map[string]pubsub_datasource.NatsPubSub) graphql.ExecutableSchema { +func NewSchema(natsPubSubByProviderID map[string]*nats.NatsPubSub) graphql.ExecutableSchema { return generated.NewExecutableSchema(generated.Config{Resolvers: &subgraph.Resolver{ NatsPubSubByProviderID: natsPubSubByProviderID, EmployeesData: subgraph.Employees, diff --git a/demo/pkg/subgraphs/employees/subgraph/resolver.go b/demo/pkg/subgraphs/employees/subgraph/resolver.go index f71624ab76..1f75150132 100644 --- a/demo/pkg/subgraphs/employees/subgraph/resolver.go +++ b/demo/pkg/subgraphs/employees/subgraph/resolver.go @@ -6,7 +6,7 @@ import ( "sync" "github.com/wundergraph/cosmo/demo/pkg/subgraphs/employees/subgraph/model" - "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/datasource/pubsub_datasource" + "github.com/wundergraph/cosmo/router/pkg/pubsub/nats" ) // This file will not be regenerated automatically. @@ -15,7 +15,7 @@ import ( type Resolver struct { mux sync.Mutex - NatsPubSubByProviderID map[string]pubsub_datasource.NatsPubSub + NatsPubSubByProviderID map[string]*nats.NatsPubSub EmployeesData []*model.Employee } diff --git a/demo/pkg/subgraphs/family/family.go b/demo/pkg/subgraphs/family/family.go index c55eae3fe4..4a682b538d 100644 --- a/demo/pkg/subgraphs/family/family.go +++ b/demo/pkg/subgraphs/family/family.go @@ -2,13 +2,13 @@ package family import ( "github.com/99designs/gqlgen/graphql" - "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/datasource/pubsub_datasource" + "github.com/wundergraph/cosmo/router/pkg/pubsub/nats" "github.com/wundergraph/cosmo/demo/pkg/subgraphs/family/subgraph" "github.com/wundergraph/cosmo/demo/pkg/subgraphs/family/subgraph/generated" ) -func NewSchema(natsPubSubByProviderID map[string]pubsub_datasource.NatsPubSub) graphql.ExecutableSchema { +func NewSchema(natsPubSubByProviderID map[string]*nats.NatsPubSub) graphql.ExecutableSchema { return generated.NewExecutableSchema(generated.Config{Resolvers: &subgraph.Resolver{ NatsPubSubByProviderID: natsPubSubByProviderID, }}) diff --git a/demo/pkg/subgraphs/family/subgraph/resolver.go b/demo/pkg/subgraphs/family/subgraph/resolver.go index f4678ba12e..7c404a867c 100644 --- a/demo/pkg/subgraphs/family/subgraph/resolver.go +++ b/demo/pkg/subgraphs/family/subgraph/resolver.go @@ -1,7 +1,7 @@ package subgraph import ( - "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/datasource/pubsub_datasource" + "github.com/wundergraph/cosmo/router/pkg/pubsub/nats" ) // This file will not be regenerated automatically. @@ -9,5 +9,5 @@ import ( // It serves as dependency injection for your app, add any dependencies you require here. type Resolver struct { - NatsPubSubByProviderID map[string]pubsub_datasource.NatsPubSub + NatsPubSubByProviderID map[string]*nats.NatsPubSub } diff --git a/demo/pkg/subgraphs/hobbies/hobbies.go b/demo/pkg/subgraphs/hobbies/hobbies.go index 103e8bb43a..926b397c6f 100644 --- a/demo/pkg/subgraphs/hobbies/hobbies.go +++ b/demo/pkg/subgraphs/hobbies/hobbies.go @@ -2,13 +2,13 @@ package hobbies import ( "github.com/99designs/gqlgen/graphql" - "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/datasource/pubsub_datasource" + "github.com/wundergraph/cosmo/router/pkg/pubsub/nats" "github.com/wundergraph/cosmo/demo/pkg/subgraphs/hobbies/subgraph" "github.com/wundergraph/cosmo/demo/pkg/subgraphs/hobbies/subgraph/generated" ) -func NewSchema(natsPubSubByProviderID map[string]pubsub_datasource.NatsPubSub) graphql.ExecutableSchema { +func NewSchema(natsPubSubByProviderID map[string]*nats.NatsPubSub) graphql.ExecutableSchema { return generated.NewExecutableSchema(generated.Config{Resolvers: &subgraph.Resolver{ NatsPubSubByProviderID: natsPubSubByProviderID, }}) diff --git a/demo/pkg/subgraphs/hobbies/subgraph/resolver.go b/demo/pkg/subgraphs/hobbies/subgraph/resolver.go index dc972ffd31..696412a06a 100644 --- a/demo/pkg/subgraphs/hobbies/subgraph/resolver.go +++ b/demo/pkg/subgraphs/hobbies/subgraph/resolver.go @@ -1,10 +1,10 @@ package subgraph import ( - "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/datasource/pubsub_datasource" "reflect" "github.com/wundergraph/cosmo/demo/pkg/subgraphs/hobbies/subgraph/model" + "github.com/wundergraph/cosmo/router/pkg/pubsub/nats" ) // This file will not be regenerated automatically. @@ -12,7 +12,7 @@ import ( // It serves as dependency injection for your app, add any dependencies you require here. type Resolver struct { - NatsPubSubByProviderID map[string]pubsub_datasource.NatsPubSub + NatsPubSubByProviderID map[string]*nats.NatsPubSub } func (r *Resolver) Employees(hobby model.Hobby) ([]*model.Employee, error) { diff --git a/demo/pkg/subgraphs/mood/mood.go b/demo/pkg/subgraphs/mood/mood.go index 7083a607e7..72b6c7118b 100644 --- a/demo/pkg/subgraphs/mood/mood.go +++ b/demo/pkg/subgraphs/mood/mood.go @@ -2,13 +2,13 @@ package mood import ( "github.com/99designs/gqlgen/graphql" - "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/datasource/pubsub_datasource" + "github.com/wundergraph/cosmo/router/pkg/pubsub/nats" "github.com/wundergraph/cosmo/demo/pkg/subgraphs/mood/subgraph" "github.com/wundergraph/cosmo/demo/pkg/subgraphs/mood/subgraph/generated" ) -func NewSchema(natsPubSubByProviderID map[string]pubsub_datasource.NatsPubSub) graphql.ExecutableSchema { +func NewSchema(natsPubSubByProviderID map[string]*nats.NatsPubSub) graphql.ExecutableSchema { return generated.NewExecutableSchema(generated.Config{Resolvers: &subgraph.Resolver{ NatsPubSubByProviderID: natsPubSubByProviderID, }}) diff --git a/demo/pkg/subgraphs/mood/subgraph/resolver.go b/demo/pkg/subgraphs/mood/subgraph/resolver.go index 9ac6f82f89..554b11af76 100644 --- a/demo/pkg/subgraphs/mood/subgraph/resolver.go +++ b/demo/pkg/subgraphs/mood/subgraph/resolver.go @@ -1,7 +1,7 @@ package subgraph import ( - "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/datasource/pubsub_datasource" + "github.com/wundergraph/cosmo/router/pkg/pubsub/nats" ) // This file will not be regenerated automatically. @@ -9,6 +9,6 @@ import ( // It serves as dependency injection for your app, add any dependencies you require here. type Resolver struct { - NatsPubSubByProviderID map[string]pubsub_datasource.NatsPubSub + NatsPubSubByProviderID map[string]*nats.NatsPubSub GetPubSubName func(string) string } diff --git a/demo/pkg/subgraphs/mood/subgraph/schema.resolvers.go b/demo/pkg/subgraphs/mood/subgraph/schema.resolvers.go index 1067b65909..3508b7d36d 100644 --- a/demo/pkg/subgraphs/mood/subgraph/schema.resolvers.go +++ b/demo/pkg/subgraphs/mood/subgraph/schema.resolvers.go @@ -10,7 +10,7 @@ import ( "github.com/wundergraph/cosmo/demo/pkg/subgraphs/mood/subgraph/generated" "github.com/wundergraph/cosmo/demo/pkg/subgraphs/mood/subgraph/model" - "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/datasource/pubsub_datasource" + "github.com/wundergraph/cosmo/router/pkg/pubsub/nats" ) // UpdateMood is the resolver for the updateMood field. @@ -18,7 +18,7 @@ func (r *mutationResolver) UpdateMood(ctx context.Context, employeeID int, mood storage.Set(employeeID, mood) myNatsTopic := r.GetPubSubName(fmt.Sprintf("employeeUpdated.%d", employeeID)) payload := fmt.Sprintf(`{"id":%d,"__typename": "Employee"}`, employeeID) - err := r.NatsPubSubByProviderID["default"].Publish(ctx, pubsub_datasource.NatsPublishAndRequestEventConfiguration{ + err := r.NatsPubSubByProviderID["default"].Publish(ctx, nats.PublishAndRequestEventConfiguration{ Subject: myNatsTopic, Data: []byte(payload), }) @@ -27,7 +27,7 @@ func (r *mutationResolver) UpdateMood(ctx context.Context, employeeID int, mood } defaultTopic := r.GetPubSubName(fmt.Sprintf("employeeUpdatedMyNats.%d", employeeID)) - err = r.NatsPubSubByProviderID["my-nats"].Publish(ctx, pubsub_datasource.NatsPublishAndRequestEventConfiguration{ + err = r.NatsPubSubByProviderID["my-nats"].Publish(ctx, nats.PublishAndRequestEventConfiguration{ Subject: defaultTopic, Data: []byte(payload), }) diff --git a/demo/pkg/subgraphs/products/products.go b/demo/pkg/subgraphs/products/products.go index f14cc97813..6a19c4baba 100644 --- a/demo/pkg/subgraphs/products/products.go +++ b/demo/pkg/subgraphs/products/products.go @@ -2,13 +2,13 @@ package products import ( "github.com/99designs/gqlgen/graphql" - "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/datasource/pubsub_datasource" + "github.com/wundergraph/cosmo/router/pkg/pubsub/nats" "github.com/wundergraph/cosmo/demo/pkg/subgraphs/products/subgraph" "github.com/wundergraph/cosmo/demo/pkg/subgraphs/products/subgraph/generated" ) -func NewSchema(natsPubSubByProviderID map[string]pubsub_datasource.NatsPubSub) graphql.ExecutableSchema { +func NewSchema(natsPubSubByProviderID map[string]*nats.NatsPubSub) graphql.ExecutableSchema { return generated.NewExecutableSchema(generated.Config{Resolvers: &subgraph.Resolver{ NatsPubSubByProviderID: natsPubSubByProviderID, TopSecretFederationFactsData: subgraph.TopSecretFederationFacts, diff --git a/demo/pkg/subgraphs/products/subgraph/resolver.go b/demo/pkg/subgraphs/products/subgraph/resolver.go index c9d610cb04..64543f0a6d 100644 --- a/demo/pkg/subgraphs/products/subgraph/resolver.go +++ b/demo/pkg/subgraphs/products/subgraph/resolver.go @@ -1,9 +1,10 @@ package subgraph import ( - "github.com/wundergraph/cosmo/demo/pkg/subgraphs/products/subgraph/model" - "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/datasource/pubsub_datasource" "sync" + + "github.com/wundergraph/cosmo/demo/pkg/subgraphs/products/subgraph/model" + "github.com/wundergraph/cosmo/router/pkg/pubsub/nats" ) // This file will not be regenerated automatically. @@ -12,6 +13,6 @@ import ( type Resolver struct { mux sync.Mutex - NatsPubSubByProviderID map[string]pubsub_datasource.NatsPubSub + NatsPubSubByProviderID map[string]*nats.NatsPubSub TopSecretFederationFactsData []model.TopSecretFact } diff --git a/demo/pkg/subgraphs/products_fg/products.go b/demo/pkg/subgraphs/products_fg/products.go index 155cffe417..436c34582b 100644 --- a/demo/pkg/subgraphs/products_fg/products.go +++ b/demo/pkg/subgraphs/products_fg/products.go @@ -2,13 +2,13 @@ package products_fg import ( "github.com/99designs/gqlgen/graphql" - "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/datasource/pubsub_datasource" + "github.com/wundergraph/cosmo/router/pkg/pubsub/nats" "github.com/wundergraph/cosmo/demo/pkg/subgraphs/products_fg/subgraph" "github.com/wundergraph/cosmo/demo/pkg/subgraphs/products_fg/subgraph/generated" ) -func NewSchema(natsPubSubByProviderID map[string]pubsub_datasource.NatsPubSub) graphql.ExecutableSchema { +func NewSchema(natsPubSubByProviderID map[string]*nats.NatsPubSub) graphql.ExecutableSchema { return generated.NewExecutableSchema(generated.Config{Resolvers: &subgraph.Resolver{ NatsPubSubByProviderID: natsPubSubByProviderID, TopSecretFederationFactsData: subgraph.TopSecretFederationFacts, diff --git a/demo/pkg/subgraphs/products_fg/subgraph/resolver.go b/demo/pkg/subgraphs/products_fg/subgraph/resolver.go index f0f8d7059a..c6dca70e73 100644 --- a/demo/pkg/subgraphs/products_fg/subgraph/resolver.go +++ b/demo/pkg/subgraphs/products_fg/subgraph/resolver.go @@ -1,9 +1,10 @@ package subgraph import ( - "github.com/wundergraph/cosmo/demo/pkg/subgraphs/products_fg/subgraph/model" - "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/datasource/pubsub_datasource" "sync" + + "github.com/wundergraph/cosmo/demo/pkg/subgraphs/products_fg/subgraph/model" + "github.com/wundergraph/cosmo/router/pkg/pubsub/nats" ) // This file will not be regenerated automatically. @@ -12,6 +13,6 @@ import ( type Resolver struct { mux sync.Mutex - NatsPubSubByProviderID map[string]pubsub_datasource.NatsPubSub + NatsPubSubByProviderID map[string]*nats.NatsPubSub TopSecretFederationFactsData []model.TopSecretFact } diff --git a/demo/pkg/subgraphs/subgraphs.go b/demo/pkg/subgraphs/subgraphs.go index abcaf75973..ab3820d02c 100644 --- a/demo/pkg/subgraphs/subgraphs.go +++ b/demo/pkg/subgraphs/subgraphs.go @@ -22,7 +22,6 @@ import ( "github.com/nats-io/nats.go" "github.com/nats-io/nats.go/jetstream" natsPubsub "github.com/wundergraph/cosmo/router/pkg/pubsub/nats" - "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/datasource/pubsub_datasource" "golang.org/x/sync/errgroup" "github.com/wundergraph/cosmo/demo/pkg/injector" @@ -162,7 +161,7 @@ func subgraphHandler(schema graphql.ExecutableSchema) http.Handler { } type SubgraphOptions struct { - NatsPubSubByProviderID map[string]pubsub_datasource.NatsPubSub + NatsPubSubByProviderID map[string]*natsPubsub.NatsPubSub GetPubSubName func(string) string } @@ -227,7 +226,7 @@ func New(ctx context.Context, config *Config) (*Subgraphs, error) { return nil, err } - natsPubSubByProviderID := map[string]pubsub_datasource.NatsPubSub{ + natsPubSubByProviderID := map[string]*natsPubsub.NatsPubSub{ "default": natsPubsub.NewConnector(zap.NewNop(), defaultConnection, defaultJetStream, "hostname", "test").New(ctx), "my-nats": natsPubsub.NewConnector(zap.NewNop(), myNatsConnection, myNatsJetStream, "hostname", "test").New(ctx), } diff --git a/demo/pkg/subgraphs/test1/subgraph/resolver.go b/demo/pkg/subgraphs/test1/subgraph/resolver.go index f4678ba12e..7c404a867c 100644 --- a/demo/pkg/subgraphs/test1/subgraph/resolver.go +++ b/demo/pkg/subgraphs/test1/subgraph/resolver.go @@ -1,7 +1,7 @@ package subgraph import ( - "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/datasource/pubsub_datasource" + "github.com/wundergraph/cosmo/router/pkg/pubsub/nats" ) // This file will not be regenerated automatically. @@ -9,5 +9,5 @@ import ( // It serves as dependency injection for your app, add any dependencies you require here. type Resolver struct { - NatsPubSubByProviderID map[string]pubsub_datasource.NatsPubSub + NatsPubSubByProviderID map[string]*nats.NatsPubSub } diff --git a/demo/pkg/subgraphs/test1/test1.go b/demo/pkg/subgraphs/test1/test1.go index 25f00b8ec7..8b74990bc4 100644 --- a/demo/pkg/subgraphs/test1/test1.go +++ b/demo/pkg/subgraphs/test1/test1.go @@ -2,13 +2,13 @@ package test1 import ( "github.com/99designs/gqlgen/graphql" - "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/datasource/pubsub_datasource" + "github.com/wundergraph/cosmo/router/pkg/pubsub/nats" "github.com/wundergraph/cosmo/demo/pkg/subgraphs/test1/subgraph" "github.com/wundergraph/cosmo/demo/pkg/subgraphs/test1/subgraph/generated" ) -func NewSchema(natsPubSubByProviderID map[string]pubsub_datasource.NatsPubSub) graphql.ExecutableSchema { +func NewSchema(natsPubSubByProviderID map[string]*nats.NatsPubSub) graphql.ExecutableSchema { return generated.NewExecutableSchema(generated.Config{Resolvers: &subgraph.Resolver{ NatsPubSubByProviderID: natsPubSubByProviderID, }}) diff --git a/router-tests/events/nats_events_test.go b/router-tests/events/nats_events_test.go index 0f0fac6325..fdd068a083 100644 --- a/router-tests/events/nats_events_test.go +++ b/router-tests/events/nats_events_test.go @@ -136,7 +136,7 @@ func TestNatsEvents(t *testing.T) { natsLogs := xEnv.Observer().FilterMessageSnippet("Nats").All() require.Len(t, natsLogs, 4) providerIDFields := xEnv.Observer().FilterField(zap.String("provider_id", "my-nats")).All() - require.Len(t, providerIDFields, 2) + require.Len(t, providerIDFields, 3) }) }) diff --git a/router-tests/testenv/testenv.go b/router-tests/testenv/testenv.go index daa023f9dd..2e0de276b1 100644 --- a/router-tests/testenv/testenv.go +++ b/router-tests/testenv/testenv.go @@ -51,8 +51,6 @@ import ( "go.uber.org/zap/zaptest/observer" "google.golang.org/protobuf/encoding/protojson" - "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/datasource/pubsub_datasource" - "github.com/wundergraph/cosmo/demo/pkg/subgraphs" "github.com/wundergraph/cosmo/router/core" nodev1 "github.com/wundergraph/cosmo/router/gen/proto/wg/cosmo/node/v1" @@ -2032,11 +2030,11 @@ func DeflakeWSWriteJSON(t testing.TB, conn *websocket.Conn, v interface{}) (err func subgraphOptions(ctx context.Context, t testing.TB, logger *zap.Logger, natsData *NatsData, pubSubName func(string) string) *subgraphs.SubgraphOptions { if natsData == nil { return &subgraphs.SubgraphOptions{ - NatsPubSubByProviderID: map[string]pubsub_datasource.NatsPubSub{}, + NatsPubSubByProviderID: map[string]*pubsubNats.NatsPubSub{}, GetPubSubName: pubSubName, } } - natsPubSubByProviderID := make(map[string]pubsub_datasource.NatsPubSub, len(demoNatsProviders)) + natsPubSubByProviderID := make(map[string]*pubsubNats.NatsPubSub, len(demoNatsProviders)) for _, sourceName := range demoNatsProviders { js, err := jetstream.New(natsData.Connections[0]) require.NoError(t, err) diff --git a/router/pkg/pubsub/kafka/kafka_datasource.go b/router/pkg/pubsub/kafka/datasource.go similarity index 99% rename from router/pkg/pubsub/kafka/kafka_datasource.go rename to router/pkg/pubsub/kafka/datasource.go index 780bc13c50..3a6fe3d8ee 100644 --- a/router/pkg/pubsub/kafka/kafka_datasource.go +++ b/router/pkg/pubsub/kafka/datasource.go @@ -31,7 +31,7 @@ func GetDataSource(ctx context.Context, in *nodev1.DataSourceConfiguration, dsMe return nil, err } factory := k.GetFactory(ctx, config) - ds, err := plan.NewDataSourceConfiguration[Configuration]( + ds, err := plan.NewDataSourceConfiguration( in.Id, factory, dsMeta, @@ -206,7 +206,7 @@ func (p *Planner) ConfigureFetch() resolve.FetchConfiguration { topic := topics[0] - event, eventErr := utils.BuildEventDataBytes(p.rootFieldRef, p.visitor, p.variables) + event, eventErr := utils.BuildEventDataBytes(p.rootFieldRef, p.visitor, &p.variables) if eventErr != nil { p.visitor.Walker.StopWithInternalErr(fmt.Errorf("failed to build event data bytes: %w", eventErr)) return resolve.FetchConfiguration{} diff --git a/router/pkg/pubsub/nats/datasource.go b/router/pkg/pubsub/nats/datasource.go new file mode 100644 index 0000000000..b85deed14f --- /dev/null +++ b/router/pkg/pubsub/nats/datasource.go @@ -0,0 +1,516 @@ +package nats + +import ( + "bytes" + "context" + "encoding/json" + "errors" + "fmt" + "regexp" + "slices" + "strings" + "time" + + "github.com/jensneuse/abstractlogger" + "github.com/nats-io/nats.go" + "github.com/nats-io/nats.go/jetstream" + nodev1 "github.com/wundergraph/cosmo/router/gen/proto/wg/cosmo/node/v1" + "github.com/wundergraph/cosmo/router/pkg/config" + "github.com/wundergraph/cosmo/router/pkg/pubsub/datasource" + "github.com/wundergraph/cosmo/router/pkg/pubsub/utils" + "go.uber.org/zap" + + "github.com/wundergraph/graphql-go-tools/v2/pkg/ast" + "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/argument_templates" + "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/datasource/httpclient" + "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/plan" + "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/resolve" +) + +const ( + fwc = '>' + tsep = "." +) + +// A variable template has form $$number$$ where the number can range from one to multiple digits +var ( + variableTemplateRegex = regexp.MustCompile(`\$\$\d+\$\$`) +) + +func GetDataSource(ctx context.Context, in *nodev1.DataSourceConfiguration, dsMeta *plan.DataSourceMetadata, config config.EventsConfiguration, logger *zap.Logger) (plan.DataSource, error) { + if natsData := in.GetCustomEvents().GetNats(); natsData != nil { + k := NewPubSub(logger) + err := k.PrepareProviders(ctx, in, dsMeta, config) + if err != nil { + return nil, err + } + factory := k.GetFactory(ctx, config, k.providers) + ds, err := plan.NewDataSourceConfiguration[Configuration]( + in.Id, + factory, + dsMeta, + Configuration{ + EventConfiguration: natsData, + Logger: logger, + }, + ) + + if err != nil { + return nil, err + } + + return ds, nil + } + + return nil, nil +} + +func init() { + datasource.RegisterPubSub(GetDataSource) +} + +func buildNatsOptions(eventSource config.NatsEventSource, logger *zap.Logger) ([]nats.Option, error) { + opts := []nats.Option{ + nats.Name(fmt.Sprintf("cosmo.router.edfs.nats.%s", eventSource.ID)), + nats.ReconnectJitter(500*time.Millisecond, 2*time.Second), + nats.ClosedHandler(func(conn *nats.Conn) { + logger.Info("NATS connection closed", zap.String("provider_id", eventSource.ID), zap.Error(conn.LastError())) + }), + nats.ConnectHandler(func(nc *nats.Conn) { + logger.Info("NATS connection established", zap.String("provider_id", eventSource.ID), zap.String("url", nc.ConnectedUrlRedacted())) + }), + nats.DisconnectErrHandler(func(nc *nats.Conn, err error) { + if err != nil { + logger.Error("NATS disconnected; will attempt to reconnect", zap.Error(err), zap.String("provider_id", eventSource.ID)) + } else { + logger.Info("NATS disconnected", zap.String("provider_id", eventSource.ID)) + } + }), + nats.ErrorHandler(func(conn *nats.Conn, subscription *nats.Subscription, err error) { + if errors.Is(err, nats.ErrSlowConsumer) { + logger.Warn( + "NATS slow consumer detected. Events are being dropped. Please consider increasing the buffer size or reducing the number of messages being sent.", + zap.Error(err), + zap.String("provider_id", eventSource.ID), + ) + } else { + logger.Error("NATS error", zap.Error(err)) + } + }), + nats.ReconnectHandler(func(conn *nats.Conn) { + logger.Info("NATS reconnected", zap.String("provider_id", eventSource.ID), zap.String("url", conn.ConnectedUrlRedacted())) + }), + } + + if eventSource.Authentication != nil { + if eventSource.Authentication.Token != nil { + opts = append(opts, nats.Token(*eventSource.Authentication.Token)) + } else if eventSource.Authentication.UserInfo.Username != nil && eventSource.Authentication.UserInfo.Password != nil { + opts = append(opts, nats.UserInfo(*eventSource.Authentication.UserInfo.Username, *eventSource.Authentication.UserInfo.Password)) + } + } + + return opts, nil +} + +type Nats struct { + providers map[string]*NatsPubSub + logger *zap.Logger + hostName string // How to get it here? + routerListenAddr string // How to get it here? +} + +func (n *Nats) PrepareProviders(ctx context.Context, in *nodev1.DataSourceConfiguration, dsMeta *plan.DataSourceMetadata, config config.EventsConfiguration) error { + definedProviders := make(map[string]bool) + for _, provider := range config.Providers.Nats { + definedProviders[provider.ID] = true + } + usedProviders := make(map[string]bool) + for _, event := range in.CustomEvents.GetNats() { + if _, found := definedProviders[event.EngineEventConfiguration.ProviderId]; !found { + return fmt.Errorf("failed to find Nats provider with ID %s", event.EngineEventConfiguration.ProviderId) + } + usedProviders[event.EngineEventConfiguration.ProviderId] = true + } + n.providers = map[string]*NatsPubSub{} + for _, provider := range config.Providers.Nats { + if !usedProviders[provider.ID] { + continue + } + options, err := buildNatsOptions(provider, n.logger) + if err != nil { + return fmt.Errorf("failed to build options for Nats provider with ID \"%s\": %w", provider.ID, err) + } + natsConnection, err := nats.Connect(provider.URL, options...) + if err != nil { + return fmt.Errorf("failed to create connection for Nats provider with ID \"%s\": %w", provider.ID, err) + } + js, err := jetstream.New(natsConnection) + if err != nil { + return err + } + + n.providers[provider.ID] = NewConnector(n.logger, natsConnection, js, n.hostName, n.routerListenAddr).New(ctx) + } + return nil +} + +func (n *Nats) GetFactory(executionContext context.Context, config config.EventsConfiguration, providers map[string]*NatsPubSub) *Factory { + return NewFactory(executionContext, config, providers) +} + +func NewPubSub(logger *zap.Logger) Nats { + return Nats{ + logger: logger, + } +} + +type Configuration struct { + Data string `json:"data"` + EventConfiguration []*nodev1.NatsEventConfiguration + Logger *zap.Logger +} + +type Planner struct { + id int + config Configuration + providers map[string]*NatsPubSub + rootFieldRef int + variables resolve.Variables + visitor *plan.Visitor + eventConfig *nodev1.NatsEventConfiguration + publishConfig *PublishAndRequestEventConfiguration + requestConfig *PublishAndRequestEventConfiguration + subscribeConfig *SubscriptionEventConfiguration +} + +func (p *Planner) addContextVariableByArgumentRef(argumentRef int, argumentPath []string) (string, error) { + variablePath, err := p.visitor.Operation.VariablePathByArgumentRefAndArgumentPath(argumentRef, argumentPath, p.visitor.Walker.Ancestors[0].Ref) + if err != nil { + return "", err + } + /* The definition is passed as both definition and operation below because getJSONRootType resolves the type + * from the first argument, but finalInputValueTypeRef comes from the definition + */ + contextVariable := &resolve.ContextVariable{ + Path: variablePath, + Renderer: resolve.NewPlainVariableRenderer(), + } + variablePlaceHolder, _ := p.variables.AddVariable(contextVariable) + return variablePlaceHolder, nil +} + +func (p *Planner) extractEventSubject(fieldRef int, subject string) (string, error) { + matches := argument_templates.ArgumentTemplateRegex.FindAllStringSubmatch(subject, -1) + // If no argument templates are defined, there are only static values + if len(matches) < 1 { + if isValidNatsSubject(subject) { + return subject, nil + } + return "", fmt.Errorf(`subject "%s" is not a valid NATS subject`, subject) + } + fieldNameBytes := p.visitor.Operation.FieldNameBytes(fieldRef) + // TODO: handling for interfaces and unions + fieldDefinitionRef, ok := p.visitor.Definition.ObjectTypeDefinitionFieldWithName(p.visitor.Walker.EnclosingTypeDefinition.Ref, fieldNameBytes) + if !ok { + return "", fmt.Errorf(`expected field definition to exist for field "%s"`, fieldNameBytes) + } + subjectWithVariableTemplateReplacements := subject + for templateNumber, groups := range matches { + // The first group is the whole template; the second is the period delimited argument path + if len(groups) != 2 { + return "", fmt.Errorf(`argument template #%d defined on field "%s" is invalid: expected 2 matching groups but received %d`, templateNumber+1, fieldNameBytes, len(groups)-1) + } + validationResult, err := argument_templates.ValidateArgumentPath(p.visitor.Definition, groups[1], fieldDefinitionRef) + if err != nil { + return "", fmt.Errorf(`argument template #%d defined on field "%s" is invalid: %w`, templateNumber+1, fieldNameBytes, err) + } + argumentNameBytes := []byte(validationResult.ArgumentPath[0]) + argumentRef, ok := p.visitor.Operation.FieldArgument(fieldRef, argumentNameBytes) + if !ok { + return "", fmt.Errorf(`operation field "%s" does not define argument "%s"`, fieldNameBytes, argumentNameBytes) + } + // variablePlaceholder has the form $$0$$, $$1$$, etc. + variablePlaceholder, err := p.addContextVariableByArgumentRef(argumentRef, validationResult.ArgumentPath) + if err != nil { + return "", fmt.Errorf(`failed to retrieve variable placeholder for argument ""%s" defined on operation field "%s": %w`, argumentNameBytes, fieldNameBytes, err) + } + // Replace the template literal with the variable placeholder (and reuse the variable if it already exists) + subjectWithVariableTemplateReplacements = strings.ReplaceAll(subjectWithVariableTemplateReplacements, groups[0], variablePlaceholder) + } + // Substitute the variable templates for dummy values to check naïvely that the string is a valid NATS subject + if isValidNatsSubject(variableTemplateRegex.ReplaceAllLiteralString(subjectWithVariableTemplateReplacements, "a")) { + return subjectWithVariableTemplateReplacements, nil + } + return "", fmt.Errorf(`subject "%s" is not a valid NATS subject`, subject) +} + +func (p *Planner) SetID(id int) { + p.id = id +} + +func (p *Planner) ID() (id int) { + return p.id +} + +func (p *Planner) DownstreamResponseFieldAlias(downstreamFieldRef int) (alias string, exists bool) { + // skip, not required + return +} + +func (p *Planner) DataSourcePlanningBehavior() plan.DataSourcePlanningBehavior { + return plan.DataSourcePlanningBehavior{ + MergeAliasedRootNodes: false, + OverrideFieldPathFromAlias: false, + } +} + +func (p *Planner) Register(visitor *plan.Visitor, configuration plan.DataSourceConfiguration[Configuration], _ plan.DataSourcePlannerConfiguration) error { + p.visitor = visitor + visitor.Walker.RegisterEnterFieldVisitor(p) + visitor.Walker.RegisterEnterDocumentVisitor(p) + p.config = configuration.CustomConfiguration() + return nil +} + +func (p *Planner) ConfigureFetch() resolve.FetchConfiguration { + var evtCfg PublishEventConfiguration + var dataSource resolve.DataSource + + event, eventErr := utils.BuildEventDataBytes(p.rootFieldRef, p.visitor, &p.variables) + if eventErr != nil { + p.visitor.Walker.StopWithInternalErr(fmt.Errorf("failed to build event data bytes: %w", eventErr)) + return resolve.FetchConfiguration{} + } + + if p.publishConfig != nil { + pubsub, ok := p.providers[p.publishConfig.ProviderID] + if !ok { + p.visitor.Walker.StopWithInternalErr(fmt.Errorf("no pubsub connection exists with provider id \"%s\"", p.subscribeConfig.ProviderID)) + return resolve.FetchConfiguration{} + } + evtCfg = PublishEventConfiguration{ + ProviderID: p.publishConfig.ProviderID, + Subject: p.publishConfig.Subject, + Data: event, + } + dataSource = &NatsPublishDataSource{ + pubSub: pubsub, + } + } else if p.requestConfig != nil { + pubsub, ok := p.providers[p.requestConfig.ProviderID] + if !ok { + p.visitor.Walker.StopWithInternalErr(fmt.Errorf("no pubsub connection exists with provider id \"%s\"", p.requestConfig.ProviderID)) + return resolve.FetchConfiguration{} + } + dataSource = &NatsRequestDataSource{ + pubSub: pubsub, + } + evtCfg = PublishEventConfiguration{ + ProviderID: p.requestConfig.ProviderID, + Subject: p.requestConfig.Subject, + Data: event, + } + } else { + p.visitor.Walker.StopWithInternalErr(fmt.Errorf("failed to configure fetch: event config is nil")) + return resolve.FetchConfiguration{} + } + + return resolve.FetchConfiguration{ + Input: evtCfg.MarshalJSONTemplate(), + Variables: p.variables, + DataSource: dataSource, + PostProcessing: resolve.PostProcessingConfiguration{ + MergePath: []string{p.eventConfig.GetEngineEventConfiguration().GetFieldName()}, + }, + } +} + +func (p *Planner) ConfigureSubscription() plan.SubscriptionConfiguration { + if p.subscribeConfig == nil { + p.visitor.Walker.StopWithInternalErr(fmt.Errorf("failed to configure subscription: event manager is nil")) + return plan.SubscriptionConfiguration{} + } + pubsub, ok := p.providers[p.subscribeConfig.ProviderID] + if !ok { + p.visitor.Walker.StopWithInternalErr(fmt.Errorf("no pubsub connection exists with provider id \"%s\"", p.subscribeConfig.ProviderID)) + return plan.SubscriptionConfiguration{} + } + evtCfg := SubscriptionEventConfiguration{ + ProviderID: p.subscribeConfig.ProviderID, + Subjects: p.subscribeConfig.Subjects, + StreamConfiguration: p.subscribeConfig.StreamConfiguration, + } + object, err := json.Marshal(evtCfg) + if err != nil { + p.visitor.Walker.StopWithInternalErr(fmt.Errorf("failed to marshal event subscription streamConfiguration")) + return plan.SubscriptionConfiguration{} + } + + return plan.SubscriptionConfiguration{ + Input: string(object), + Variables: p.variables, + DataSource: &SubscriptionSource{ + pubSub: pubsub, + }, + PostProcessing: resolve.PostProcessingConfiguration{ + MergePath: []string{p.eventConfig.GetEngineEventConfiguration().GetFieldName()}, + }, + } +} + +func (p *Planner) EnterDocument(_, _ *ast.Document) { + p.rootFieldRef = -1 + p.eventConfig = nil +} + +func (p *Planner) EnterField(ref int) { + if p.rootFieldRef != -1 { + // This is a nested field; nothing needs to be done + return + } + p.rootFieldRef = ref + + fieldName := p.visitor.Operation.FieldNameString(ref) + typeName := p.visitor.Walker.EnclosingTypeDefinition.NameString(p.visitor.Definition) + + var eventConfig *nodev1.NatsEventConfiguration + for _, cfg := range p.config.EventConfiguration { + if cfg.GetEngineEventConfiguration().GetTypeName() == typeName && cfg.GetEngineEventConfiguration().GetFieldName() == fieldName { + eventConfig = cfg + break + } + } + + if eventConfig == nil { + return + } + + p.eventConfig = eventConfig + + providerId := eventConfig.GetEngineEventConfiguration().GetProviderId() + + switch v := eventConfig.GetEngineEventConfiguration().GetType(); v { + case nodev1.EventType_PUBLISH, nodev1.EventType_REQUEST: + if len(p.eventConfig.GetSubjects()) != 1 { + p.visitor.Walker.StopWithInternalErr(fmt.Errorf("publish events should define one subject but received %d", len(p.eventConfig.GetSubjects()))) + return + } + _, found := p.providers[providerId] + if !found { + p.visitor.Walker.StopWithInternalErr(fmt.Errorf("unable to publish events of provider with id %s", providerId)) + } + extractedSubject, err := p.extractEventSubject(ref, eventConfig.GetSubjects()[0]) + if err != nil { + p.visitor.Walker.StopWithInternalErr(fmt.Errorf("unable to parse subject with id %s", eventConfig.GetSubjects()[0])) + } + cfg := &PublishAndRequestEventConfiguration{ + ProviderID: providerId, + Subject: extractedSubject, + Data: json.RawMessage("[]"), + } + if v == nodev1.EventType_REQUEST { + p.requestConfig = cfg + } else { + p.publishConfig = cfg + } + case nodev1.EventType_SUBSCRIBE: + if len(p.eventConfig.Subjects) == 0 { + p.visitor.Walker.StopWithInternalErr(fmt.Errorf("expected at least one subscription subject but received %d", len(p.eventConfig.Subjects))) + return + } + extractedSubjects := make([]string, 0, len(p.eventConfig.Subjects)) + for _, rawSubject := range p.eventConfig.Subjects { + extractedSubject, err := p.extractEventSubject(ref, rawSubject) + if err != nil { + p.visitor.Walker.StopWithInternalErr(fmt.Errorf("could not extract subscription event subjects: %w", err)) + return + } + extractedSubjects = append(extractedSubjects, extractedSubject) + } + var streamConf *StreamConfiguration + if p.eventConfig.StreamConfiguration != nil { + streamConf = &StreamConfiguration{} + streamConf.Consumer = p.eventConfig.StreamConfiguration.ConsumerName + streamConf.ConsumerInactiveThreshold = p.eventConfig.StreamConfiguration.ConsumerInactiveThreshold + streamConf.StreamName = p.eventConfig.StreamConfiguration.StreamName + } + + slices.Sort(extractedSubjects) + p.subscribeConfig = &SubscriptionEventConfiguration{ + ProviderID: providerId, + Subjects: extractedSubjects, + StreamConfiguration: streamConf, + } + default: + p.visitor.Walker.StopWithInternalErr(fmt.Errorf("invalid EventType \"%s\" for Kafka", eventConfig.GetEngineEventConfiguration().GetType())) + } +} + +type Source struct{} + +func (Source) Load(ctx context.Context, input []byte, out *bytes.Buffer) (err error) { + _, err = out.Write(input) + return +} + +func (Source) LoadWithFiles(ctx context.Context, input []byte, files []*httpclient.FileUpload, out *bytes.Buffer) (err error) { + panic("not implemented") +} + +func NewFactory(executionContext context.Context, config config.EventsConfiguration, providers map[string]*NatsPubSub) *Factory { + return &Factory{ + executionContext: executionContext, + eventsConfiguration: config, + providers: providers, + } +} + +type Factory struct { + config Configuration + eventsConfiguration config.EventsConfiguration + executionContext context.Context + providers map[string]*NatsPubSub +} + +func (f *Factory) Planner(_ abstractlogger.Logger) plan.DataSourcePlanner[Configuration] { + return &Planner{ + config: f.config, + providers: f.providers, + } +} + +func (f *Factory) Context() context.Context { + return f.executionContext +} + +func (f *Factory) UpstreamSchema(dataSourceConfig plan.DataSourceConfiguration[Configuration]) (*ast.Document, bool) { + return nil, false +} + +func isValidNatsSubject(subject string) bool { + if subject == "" { + return false + } + sfwc := false + tokens := strings.Split(subject, tsep) + for _, t := range tokens { + length := len(t) + if length == 0 || sfwc { + return false + } + if length > 1 { + if strings.ContainsAny(t, "\t\n\f\r ") { + return false + } + continue + } + switch t[0] { + case fwc: + sfwc = true + case ' ', '\t', '\n', '\r', '\f': + return false + } + } + return true +} diff --git a/router/pkg/pubsub/nats/nats.go b/router/pkg/pubsub/nats/nats.go index c609b55d3f..3528803379 100644 --- a/router/pkg/pubsub/nats/nats.go +++ b/router/pkg/pubsub/nats/nats.go @@ -12,7 +12,6 @@ import ( "github.com/nats-io/nats.go" "github.com/nats-io/nats.go/jetstream" "github.com/wundergraph/cosmo/router/pkg/pubsub/datasource" - "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/datasource/pubsub_datasource" "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/resolve" "go.uber.org/zap" ) @@ -35,8 +34,8 @@ func NewConnector(logger *zap.Logger, conn *nats.Conn, js jetstream.JetStream, h } } -func (c *connector) New(ctx context.Context) *natsPubSub { - return &natsPubSub{ +func (c *connector) New(ctx context.Context) *NatsPubSub { + return &NatsPubSub{ ctx: ctx, conn: c.conn, js: c.js, @@ -47,7 +46,7 @@ func (c *connector) New(ctx context.Context) *natsPubSub { } } -type natsPubSub struct { +type NatsPubSub struct { ctx context.Context conn *nats.Conn logger *zap.Logger @@ -61,7 +60,7 @@ type natsPubSub struct { // We use the hostname and the address the router is listening on, which should provide a good representation // of what a unique instance is from the perspective of the client that has started a subscription to this instance // and want to restart the subscription after a failure on the client or router side. -func (p *natsPubSub) getInstanceIdentifier() string { +func (p *NatsPubSub) getInstanceIdentifier() string { return fmt.Sprintf("%s-%s", p.hostName, p.routerListenAddr) } @@ -69,7 +68,7 @@ func (p *natsPubSub) getInstanceIdentifier() string { // we need to make sure that the durable consumer name is unique for each instance and subjects to prevent // multiple routers from changing the same consumer, which would lead to message loss and wrong messages delivered // to the subscribers -func (p *natsPubSub) getDurableConsumerName(durableName string, subjects []string) (string, error) { +func (p *NatsPubSub) getDurableConsumerName(durableName string, subjects []string) (string, error) { subjHash := xxhash.New() _, err := subjHash.WriteString(p.getInstanceIdentifier()) if err != nil { @@ -85,7 +84,7 @@ func (p *natsPubSub) getDurableConsumerName(durableName string, subjects []strin return fmt.Sprintf("%s-%x", durableName, subjHash.Sum64()), nil } -func (p *natsPubSub) Subscribe(ctx context.Context, event pubsub_datasource.NatsSubscriptionEventConfiguration, updater resolve.SubscriptionUpdater) error { +func (p *NatsPubSub) Subscribe(ctx context.Context, event SubscriptionEventConfiguration, updater resolve.SubscriptionUpdater) error { log := p.logger.With( zap.String("provider_id", event.ProviderID), zap.String("method", "subscribe"), @@ -201,7 +200,7 @@ func (p *natsPubSub) Subscribe(ctx context.Context, event pubsub_datasource.Nats return nil } -func (p *natsPubSub) Publish(_ context.Context, event pubsub_datasource.NatsPublishAndRequestEventConfiguration) error { +func (p *NatsPubSub) Publish(_ context.Context, event PublishAndRequestEventConfiguration) error { log := p.logger.With( zap.String("provider_id", event.ProviderID), zap.String("method", "publish"), @@ -219,7 +218,7 @@ func (p *natsPubSub) Publish(_ context.Context, event pubsub_datasource.NatsPubl return nil } -func (p *natsPubSub) Request(ctx context.Context, event pubsub_datasource.NatsPublishAndRequestEventConfiguration, w io.Writer) error { +func (p *NatsPubSub) Request(ctx context.Context, event PublishAndRequestEventConfiguration, w io.Writer) error { log := p.logger.With( zap.String("provider_id", event.ProviderID), zap.String("method", "request"), @@ -243,11 +242,11 @@ func (p *natsPubSub) Request(ctx context.Context, event pubsub_datasource.NatsPu return err } -func (p *natsPubSub) flush(ctx context.Context) error { +func (p *NatsPubSub) flush(ctx context.Context) error { return p.conn.FlushWithContext(ctx) } -func (p *natsPubSub) Shutdown(ctx context.Context) error { +func (p *NatsPubSub) Shutdown(ctx context.Context) error { if p.conn.IsClosed() { return nil diff --git a/router/pkg/pubsub/nats/nats_datasource.go b/router/pkg/pubsub/nats/nats_datasource.go deleted file mode 100644 index 428175ec8d..0000000000 --- a/router/pkg/pubsub/nats/nats_datasource.go +++ /dev/null @@ -1,239 +0,0 @@ -package nats - -import ( - "bytes" - "context" - "errors" - "fmt" - "time" - - "github.com/jensneuse/abstractlogger" - "github.com/nats-io/nats.go" - "github.com/nats-io/nats.go/jetstream" - nodev1 "github.com/wundergraph/cosmo/router/gen/proto/wg/cosmo/node/v1" - "github.com/wundergraph/cosmo/router/pkg/config" - "github.com/wundergraph/cosmo/router/pkg/pubsub/datasource" - "go.uber.org/zap" - - "github.com/wundergraph/graphql-go-tools/v2/pkg/ast" - "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/datasource/httpclient" - "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/plan" - "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/resolve" -) - -func GetDataSource(ctx context.Context, in *nodev1.DataSourceConfiguration, dsMeta *plan.DataSourceMetadata, config config.EventsConfiguration, logger *zap.Logger) (plan.DataSource, error) { - if natsData := in.GetCustomEvents().GetNats(); natsData != nil { - k := NewPubSub() - err := k.PrepareProviders(ctx, in, dsMeta, config) - if err != nil { - return nil, err - } - factory := k.GetFactory(ctx, config, k.providers) - ds, err := plan.NewDataSourceConfiguration[Configuration]( - in.Id, - factory, - dsMeta, - Configuration{ - EventConfiguration: natsData, - Logger: logger, - }, - ) - - if err != nil { - return nil, err - } - - return ds, nil - } - - return nil, nil -} - -func init() { - datasource.RegisterPubSub(GetDataSource) -} - -func buildNatsOptions(eventSource config.NatsEventSource, logger *zap.Logger) ([]nats.Option, error) { - opts := []nats.Option{ - nats.Name(fmt.Sprintf("cosmo.router.edfs.nats.%s", eventSource.ID)), - nats.ReconnectJitter(500*time.Millisecond, 2*time.Second), - nats.ClosedHandler(func(conn *nats.Conn) { - logger.Info("NATS connection closed", zap.String("provider_id", eventSource.ID), zap.Error(conn.LastError())) - }), - nats.ConnectHandler(func(nc *nats.Conn) { - logger.Info("NATS connection established", zap.String("provider_id", eventSource.ID), zap.String("url", nc.ConnectedUrlRedacted())) - }), - nats.DisconnectErrHandler(func(nc *nats.Conn, err error) { - if err != nil { - logger.Error("NATS disconnected; will attempt to reconnect", zap.Error(err), zap.String("provider_id", eventSource.ID)) - } else { - logger.Info("NATS disconnected", zap.String("provider_id", eventSource.ID)) - } - }), - nats.ErrorHandler(func(conn *nats.Conn, subscription *nats.Subscription, err error) { - if errors.Is(err, nats.ErrSlowConsumer) { - logger.Warn( - "NATS slow consumer detected. Events are being dropped. Please consider increasing the buffer size or reducing the number of messages being sent.", - zap.Error(err), - zap.String("provider_id", eventSource.ID), - ) - } else { - logger.Error("NATS error", zap.Error(err)) - } - }), - nats.ReconnectHandler(func(conn *nats.Conn) { - logger.Info("NATS reconnected", zap.String("provider_id", eventSource.ID), zap.String("url", conn.ConnectedUrlRedacted())) - }), - } - - if eventSource.Authentication != nil { - if eventSource.Authentication.Token != nil { - opts = append(opts, nats.Token(*eventSource.Authentication.Token)) - } else if eventSource.Authentication.UserInfo.Username != nil && eventSource.Authentication.UserInfo.Password != nil { - opts = append(opts, nats.UserInfo(*eventSource.Authentication.UserInfo.Username, *eventSource.Authentication.UserInfo.Password)) - } - } - - return opts, nil -} - -type Nats struct { - providers map[string]*natsPubSub - logger *zap.Logger - hostName string // How to get it here? - routerListenAddr string // How to get it here? -} - -func (n *Nats) PrepareProviders(ctx context.Context, in *nodev1.DataSourceConfiguration, dsMeta *plan.DataSourceMetadata, config config.EventsConfiguration) error { - definedProviders := make(map[string]bool) - for _, provider := range config.Providers.Kafka { - definedProviders[provider.ID] = true - } - usedProviders := make(map[string]bool) - for _, event := range in.CustomEvents.GetNats() { - if _, found := definedProviders[event.EngineEventConfiguration.ProviderId]; !found { - return fmt.Errorf("failed to find Nats provider with ID %s", event.EngineEventConfiguration.ProviderId) - } - usedProviders[event.EngineEventConfiguration.ProviderId] = true - } - for _, provider := range config.Providers.Nats { - if !usedProviders[provider.ID] { - continue - } - options, err := buildNatsOptions(provider, n.logger) - if err != nil { - return fmt.Errorf("failed to build options for Nats provider with ID \"%s\": %w", provider.ID, err) - } - natsConnection, err := nats.Connect(provider.URL, options...) - if err != nil { - return fmt.Errorf("failed to create connection for Nats provider with ID \"%s\": %w", provider.ID, err) - } - js, err := jetstream.New(natsConnection) - if err != nil { - return err - } - - n.providers[provider.ID] = NewConnector(n.logger, natsConnection, js, n.hostName, n.routerListenAddr).New(ctx) - - } - return nil -} - -func (n *Nats) GetFactory(executionContext context.Context, config config.EventsConfiguration, providers map[string]*natsPubSub) *Factory { - return NewFactory(executionContext, config, providers) -} - -func NewPubSub() Nats { - return Nats{} -} - -type Configuration struct { - Data string `json:"data"` - EventConfiguration []*nodev1.NatsEventConfiguration - Logger *zap.Logger -} - -type Planner struct { - id int - config Configuration - providers map[string]*natsPubSub -} - -func (p *Planner) SetID(id int) { - p.id = id -} - -func (p *Planner) ID() (id int) { - return p.id -} - -func (p *Planner) DownstreamResponseFieldAlias(downstreamFieldRef int) (alias string, exists bool) { - // skip, not required - return -} - -func (p *Planner) DataSourcePlanningBehavior() plan.DataSourcePlanningBehavior { - return plan.DataSourcePlanningBehavior{ - MergeAliasedRootNodes: false, - OverrideFieldPathFromAlias: false, - } -} - -func (p *Planner) Register(_ *plan.Visitor, configuration plan.DataSourceConfiguration[Configuration], _ plan.DataSourcePlannerConfiguration) error { - p.config = configuration.CustomConfiguration() - return nil -} - -func (p *Planner) ConfigureFetch() resolve.FetchConfiguration { - return resolve.FetchConfiguration{ - Input: p.config.Data, - DataSource: Source{}, - } -} - -func (p *Planner) ConfigureSubscription() plan.SubscriptionConfiguration { - return plan.SubscriptionConfiguration{ - Input: p.config.Data, - } -} - -type Source struct{} - -func (Source) Load(ctx context.Context, input []byte, out *bytes.Buffer) (err error) { - _, err = out.Write(input) - return -} - -func (Source) LoadWithFiles(ctx context.Context, input []byte, files []*httpclient.FileUpload, out *bytes.Buffer) (err error) { - panic("not implemented") -} - -func NewFactory(executionContext context.Context, config config.EventsConfiguration, providers map[string]*natsPubSub) *Factory { - return &Factory{ - executionContext: executionContext, - eventsConfiguration: config, - providers: providers, - } -} - -type Factory struct { - config Configuration - eventsConfiguration config.EventsConfiguration - executionContext context.Context - providers map[string]*natsPubSub -} - -func (f *Factory) Planner(_ abstractlogger.Logger) plan.DataSourcePlanner[Configuration] { - return &Planner{ - config: f.config, - providers: f.providers, - } -} - -func (f *Factory) Context() context.Context { - return f.executionContext -} - -func (f *Factory) UpstreamSchema(dataSourceConfig plan.DataSourceConfiguration[Configuration]) (*ast.Document, bool) { - return nil, false -} diff --git a/router/pkg/pubsub/nats/subscription_datasource.go b/router/pkg/pubsub/nats/subscription_datasource.go new file mode 100644 index 0000000000..ef5e2e5fe2 --- /dev/null +++ b/router/pkg/pubsub/nats/subscription_datasource.go @@ -0,0 +1,122 @@ +package nats + +import ( + "bytes" + "context" + "encoding/json" + "fmt" + "io" + + "github.com/buger/jsonparser" + "github.com/cespare/xxhash/v2" + "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/datasource/httpclient" + "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/resolve" +) + +type StreamConfiguration struct { + Consumer string `json:"consumer"` + ConsumerInactiveThreshold int32 `json:"consumerInactiveThreshold"` + StreamName string `json:"streamName"` +} + +type SubscriptionEventConfiguration struct { + ProviderID string `json:"providerId"` + Subjects []string `json:"subjects"` + StreamConfiguration *StreamConfiguration `json:"streamConfiguration,omitempty"` +} + +type PublishAndRequestEventConfiguration struct { + ProviderID string `json:"providerId"` + Subject string `json:"subject"` + Data json.RawMessage `json:"data"` +} + +func (s *PublishAndRequestEventConfiguration) MarshalJSONTemplate() string { + return fmt.Sprintf(`{"subject":"%s", "data": %s, "providerId":"%s"}`, s.Subject, s.Data, s.ProviderID) +} + +type PublishEventConfiguration struct { + ProviderID string `json:"providerId"` + Subject string `json:"subject"` + Data json.RawMessage `json:"data"` +} + +func (s *PublishEventConfiguration) MarshalJSONTemplate() string { + return fmt.Sprintf(`{"subject":"%s", "data": %s, "providerId":"%s"}`, s.Subject, s.Data, s.ProviderID) +} + +type SubscriptionSource struct { + pubSub *NatsPubSub +} + +func (s *SubscriptionSource) UniqueRequestID(ctx *resolve.Context, input []byte, xxh *xxhash.Digest) error { + + val, _, _, err := jsonparser.Get(input, "subjects") + if err != nil { + return err + } + + _, err = xxh.Write(val) + if err != nil { + return err + } + + val, _, _, err = jsonparser.Get(input, "providerId") + if err != nil { + return err + } + + _, err = xxh.Write(val) + return err +} + +func (s *SubscriptionSource) Start(ctx *resolve.Context, input []byte, updater resolve.SubscriptionUpdater) error { + var subscriptionConfiguration SubscriptionEventConfiguration + err := json.Unmarshal(input, &subscriptionConfiguration) + if err != nil { + return err + } + + return s.pubSub.Subscribe(ctx.Context(), subscriptionConfiguration, updater) +} + +type NatsPublishDataSource struct { + pubSub *NatsPubSub +} + +func (s *NatsPublishDataSource) Load(ctx context.Context, input []byte, out *bytes.Buffer) error { + var publishConfiguration PublishAndRequestEventConfiguration + err := json.Unmarshal(input, &publishConfiguration) + if err != nil { + return err + } + + if err := s.pubSub.Publish(ctx, publishConfiguration); err != nil { + _, err = io.WriteString(out, `{"success": false}`) + return err + } + _, err = io.WriteString(out, `{"success": true}`) + return err +} + +func (s *NatsPublishDataSource) LoadWithFiles(ctx context.Context, input []byte, files []*httpclient.FileUpload, out *bytes.Buffer) (err error) { + panic("not implemented") +} + +type NatsRequestDataSource struct { + pubSub *NatsPubSub +} + +func (s *NatsRequestDataSource) Load(ctx context.Context, input []byte, out *bytes.Buffer) error { + var subscriptionConfiguration PublishAndRequestEventConfiguration + err := json.Unmarshal(input, &subscriptionConfiguration) + if err != nil { + return err + } + + return s.pubSub.Request(ctx, subscriptionConfiguration, out) +} + +func (s *NatsRequestDataSource) LoadWithFiles(ctx context.Context, input []byte, files []*httpclient.FileUpload, out *bytes.Buffer) error { + panic("not implemented") +} diff --git a/router/pkg/pubsub/utils/utils.go b/router/pkg/pubsub/utils/utils.go index 92410b641e..c51775a37f 100644 --- a/router/pkg/pubsub/utils/utils.go +++ b/router/pkg/pubsub/utils/utils.go @@ -8,7 +8,7 @@ import ( "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/resolve" ) -func BuildEventDataBytes(ref int, visitor *plan.Visitor, variables resolve.Variables) ([]byte, error) { +func BuildEventDataBytes(ref int, visitor *plan.Visitor, variables *resolve.Variables) ([]byte, error) { // Collect the field arguments for fetch based operations fieldArgs := visitor.Operation.FieldArguments(ref) var dataBuffer bytes.Buffer From 23eb5bb93c117a78358c5a6716505b786abd9604 Mon Sep 17 00:00:00 2001 From: Alessandro Pagnin Date: Fri, 21 Mar 2025 09:46:08 +0100 Subject: [PATCH 005/126] test(kafka): fix mutation kafka test --- router-tests/events/kafka_events_test.go | 69 ++++++++---------------- router-tests/testenv/testenv.go | 4 ++ 2 files changed, 27 insertions(+), 46 deletions(-) diff --git a/router-tests/events/kafka_events_test.go b/router-tests/events/kafka_events_test.go index 36dd03b086..ed386dd47e 100644 --- a/router-tests/events/kafka_events_test.go +++ b/router-tests/events/kafka_events_test.go @@ -1054,7 +1054,7 @@ func TestKafkaEvents(t *testing.T) { t.Run("mutate", func(t *testing.T) { t.Parallel() - topics := []string{"employeeUpdated", "employeeUpdatedTwo"} + topics := []string{"employeeUpdated"} testenv.Run(t, &testenv.Config{ RouterConfigJSONTemplate: testenv.ConfigWithEdfsKafkaJSONTemplate, @@ -1062,56 +1062,16 @@ func TestKafkaEvents(t *testing.T) { }, func(t *testing.T, xEnv *testenv.Environment) { ensureTopicExists(t, xEnv, topics...) - var subscriptionOne struct { - employeeUpdatedMyKafka struct { - ID float64 `graphql:"id"` - Details struct { - Forename string `graphql:"forename"` - Surname string `graphql:"surname"` - } `graphql:"details"` - } `graphql:"employeeUpdatedMyKafka(employeeID: 3)"` - } - - surl := xEnv.GraphQLWebSocketSubscriptionURL() - client := graphql.NewSubscriptionClient(surl) - t.Cleanup(func() { - _ = client.Close() - }) - - var counter atomic.Uint32 - - subscriptionOneID, err := client.Subscribe(&subscriptionOne, nil, func(dataValue []byte, errValue error) error { - defer counter.Add(1) - require.NoError(t, errValue) - require.JSONEq(t, `{"updateEmployeeMyKafka":{"id":1,"details":{"forename":"Jens","surname":"Neuse"}}}`, string(dataValue)) - return nil - }) - require.NoError(t, err) - require.NotEmpty(t, subscriptionOneID) - - go func() { - clientErr := client.Run() - require.NoError(t, clientErr) - }() - - go func() { - require.Eventually(t, func() bool { - return counter.Load() == 1 - }, KafkaWaitTimeout, time.Millisecond*100) - _ = client.Close() - }() - - xEnv.WaitForSubscriptionCount(1, KafkaWaitTimeout) - // Send a mutation to trigger the first subscription resOne := xEnv.MakeGraphQLRequestOK(testenv.GraphQLRequest{ Query: `mutation { updateEmployeeMyKafka(employeeID: 3, update: {name: "name test"}) { success } }`, }) - require.JSONEq(t, `{"data":{"updateEmployeeMyKafka":{"id":3}}}`, resOne.Body) + require.JSONEq(t, `{"data":{"updateEmployeeMyKafka":{"success":true}}}`, resOne.Body) - xEnv.WaitForMessagesSent(1, KafkaWaitTimeout) - xEnv.WaitForSubscriptionCount(0, KafkaWaitTimeout) - xEnv.WaitForConnectionCount(0, KafkaWaitTimeout) + records, err := readKafkaMessages(xEnv, topics[0], 1) + require.NoError(t, err) + require.Equal(t, 1, len(records)) + require.Equal(t, `{"employeeID":3,"update":{"name":"name test"}}`, string(records[0].Value)) }) }) } @@ -1294,3 +1254,20 @@ func produceKafkaMessage(t *testing.T, xEnv *testenv.Environment, topicName stri fErr := xEnv.KafkaClient.Flush(ctx) require.NoError(t, fErr) } + +func readKafkaMessages(xEnv *testenv.Environment, topicName string, msgs int) ([]*kgo.Record, error) { + ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) + defer cancel() + + client, err := kgo.NewClient( + kgo.SeedBrokers(xEnv.GetKafkaSeeds()...), + kgo.ConsumeTopics(xEnv.GetPubSubName(topicName)), + ) + if err != nil { + return nil, err + } + + fetchs := client.PollRecords(ctx, msgs) + + return fetchs.Records(), nil +} diff --git a/router-tests/testenv/testenv.go b/router-tests/testenv/testenv.go index 2e0de276b1..fa953fda57 100644 --- a/router-tests/testenv/testenv.go +++ b/router-tests/testenv/testenv.go @@ -1152,6 +1152,10 @@ func (e *Environment) GetPubSubName(name string) string { return e.getPubSubName(name) } +func (e *Environment) GetKafkaSeeds() []string { + return e.cfg.KafkaSeeds +} + func (e *Environment) RouterConfigVersionMain() string { return e.routerConfigVersionMain } From b0660d9e26d6ea16282c0b8d0531c2205046cf56 Mon Sep 17 00:00:00 2001 From: Alessandro Pagnin Date: Sat, 22 Mar 2025 17:31:53 +0100 Subject: [PATCH 006/126] chore: initial refactor to reduce code needed to start new provider --- router/pkg/pubsub/datasource/datasource.go | 272 ++++++++++++++ router/pkg/pubsub/datasource/old.go | 308 --------------- router/pkg/pubsub/kafka/datasource.go | 238 +++--------- .../pubsub/kafka/subscription_datasource.go | 1 - router/pkg/pubsub/nats/datasource.go | 351 ++++-------------- 5 files changed, 381 insertions(+), 789 deletions(-) delete mode 100644 router/pkg/pubsub/datasource/old.go diff --git a/router/pkg/pubsub/datasource/datasource.go b/router/pkg/pubsub/datasource/datasource.go index 20a7ee12ab..19b7259e10 100644 --- a/router/pkg/pubsub/datasource/datasource.go +++ b/router/pkg/pubsub/datasource/datasource.go @@ -1,11 +1,20 @@ package datasource import ( + "bytes" "context" + "fmt" + "strings" + "github.com/jensneuse/abstractlogger" nodev1 "github.com/wundergraph/cosmo/router/gen/proto/wg/cosmo/node/v1" "github.com/wundergraph/cosmo/router/pkg/config" + "github.com/wundergraph/cosmo/router/pkg/pubsub/utils" + "github.com/wundergraph/graphql-go-tools/v2/pkg/ast" + "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/argument_templates" + "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/datasource/httpclient" "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/plan" + "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/resolve" "go.uber.org/zap" ) @@ -21,7 +30,270 @@ func GetRegisteredPubSubs() []Getter { return pubSubs } +type ArgumentTemplateCallback func(tpl string) (string, error) + type PubSubImplementer[F any] interface { PrepareProviders(ctx context.Context, in *nodev1.DataSourceConfiguration, dsMeta *plan.DataSourceMetadata, config config.EventsConfiguration) error GetFactory(executionContext context.Context, config config.EventsConfiguration) F } + +type EventConfigType interface { + GetEngineEventConfiguration() *nodev1.EngineEventConfiguration +} + +// Create an interface for Configuration +type Implementer[EC EventConfigType, P any] interface { + GetResolveDataSource(eventConfig EC, pubsub P) (resolve.DataSource, error) + GetResolveDataSourceSubscription(eventConfig EC, pubsub P) (resolve.SubscriptionDataSource, error) + GetResolveDataSourceSubscriptionInput(eventConfig EC, pubsub P) (string, error) + //GetResolveDataSourceInput(eventConfig EC, ref int, visitor *plan.Visitor, variables *resolve.Variables) (string, error) + GetResolveDataSourceInput(eventConfig EC, event []byte) (string, error) + GetProviderId(eventConfig EC) string + FindEventConfig(eventConfigs []EC, typeName string, fieldName string, fn ArgumentTemplateCallback) (EC, error) + GetEventsDataConfigurations() []EC +} + +type Planner[EC EventConfigType, P any] struct { + id int + config Implementer[EC, P] + eventsConfig config.EventsConfiguration + eventConfig EC + rootFieldRef int + variables resolve.Variables + visitor *plan.Visitor + providers map[string]P +} + +func (p *Planner[EC, P]) SetID(id int) { + p.id = id +} + +func (p *Planner[EC, P]) ID() (id int) { + return p.id +} + +func (p *Planner[EC, P]) DownstreamResponseFieldAlias(downstreamFieldRef int) (alias string, exists bool) { + // skip, not required + return +} + +func (p *Planner[EC, P]) DataSourcePlanningBehavior() plan.DataSourcePlanningBehavior { + return plan.DataSourcePlanningBehavior{ + MergeAliasedRootNodes: false, + OverrideFieldPathFromAlias: false, + } +} + +func (p *Planner[EC, P]) Register(visitor *plan.Visitor, configuration plan.DataSourceConfiguration[Implementer[EC, P]], _ plan.DataSourcePlannerConfiguration) error { + p.visitor = visitor + visitor.Walker.RegisterEnterFieldVisitor(p) + visitor.Walker.RegisterEnterDocumentVisitor(p) + p.config = configuration.CustomConfiguration() + return nil +} + +func (p *Planner[EC, P]) ConfigureFetch() resolve.FetchConfiguration { + if any(p.eventConfig) == nil { + p.visitor.Walker.StopWithInternalErr(fmt.Errorf("failed to configure fetch: event config is nil")) + return resolve.FetchConfiguration{} + } + + var dataSource resolve.DataSource + providerId := p.config.GetProviderId(p.eventConfig) + pubsub, ok := p.providers[providerId] + if !ok { + p.visitor.Walker.StopWithInternalErr(fmt.Errorf("no pubsub connection exists with provider id \"%s\"", providerId)) + return resolve.FetchConfiguration{} + } + + dataSource, err := p.config.GetResolveDataSource(p.eventConfig, pubsub) + if err != nil { + p.visitor.Walker.StopWithInternalErr(fmt.Errorf("failed to get data source: %w", err)) + return resolve.FetchConfiguration{} + } + + event, err := utils.BuildEventDataBytes(p.rootFieldRef, p.visitor, &p.variables) + if err != nil { + p.visitor.Walker.StopWithInternalErr(fmt.Errorf("failed to get resolve data source input: %w", err)) + return resolve.FetchConfiguration{} + } + + input, err := p.config.GetResolveDataSourceInput(p.eventConfig, event) + if err != nil { + p.visitor.Walker.StopWithInternalErr(fmt.Errorf("failed to get resolve data source input: %w", err)) + return resolve.FetchConfiguration{} + } + + return resolve.FetchConfiguration{ + Input: input, + Variables: p.variables, + DataSource: dataSource, + PostProcessing: resolve.PostProcessingConfiguration{ + MergePath: []string{p.eventConfig.GetEngineEventConfiguration().GetFieldName()}, + }, + } +} + +func (p *Planner[EC, P]) ConfigureSubscription() plan.SubscriptionConfiguration { + if any(p.eventConfig) == nil { + p.visitor.Walker.StopWithInternalErr(fmt.Errorf("failed to configure subscription: event manager is nil")) + return plan.SubscriptionConfiguration{} + } + providerId := p.config.GetProviderId(p.eventConfig) + pubsub, ok := p.providers[providerId] + if !ok { + p.visitor.Walker.StopWithInternalErr(fmt.Errorf("no pubsub connection exists with provider id \"%s\"", providerId)) + return plan.SubscriptionConfiguration{} + } + + dataSource, err := p.config.GetResolveDataSourceSubscription(p.eventConfig, pubsub) + if err != nil { + p.visitor.Walker.StopWithInternalErr(fmt.Errorf("failed to get resolve data source subscription: %w", err)) + return plan.SubscriptionConfiguration{} + } + + input, err := p.config.GetResolveDataSourceSubscriptionInput(p.eventConfig, pubsub) + if err != nil { + p.visitor.Walker.StopWithInternalErr(fmt.Errorf("failed to get resolve data source subscription input: %w", err)) + return plan.SubscriptionConfiguration{} + } + + return plan.SubscriptionConfiguration{ + Input: input, + Variables: p.variables, + DataSource: dataSource, + PostProcessing: resolve.PostProcessingConfiguration{ + MergePath: []string{p.eventConfig.GetEngineEventConfiguration().GetFieldName()}, + }, + } +} + +func (p *Planner[EC, P]) addContextVariableByArgumentRef(argumentRef int, argumentPath []string) (string, error) { + variablePath, err := p.visitor.Operation.VariablePathByArgumentRefAndArgumentPath(argumentRef, argumentPath, p.visitor.Walker.Ancestors[0].Ref) + if err != nil { + return "", err + } + /* The definition is passed as both definition and operation below because getJSONRootType resolves the type + * from the first argument, but finalInputValueTypeRef comes from the definition + */ + contextVariable := &resolve.ContextVariable{ + Path: variablePath, + Renderer: resolve.NewPlainVariableRenderer(), + } + variablePlaceHolder, _ := p.variables.AddVariable(contextVariable) + return variablePlaceHolder, nil +} + +func StringParser(subject string) (string, error) { + matches := argument_templates.ArgumentTemplateRegex.FindAllStringSubmatch(subject, -1) + if len(matches) < 1 { + return subject, nil + } + return "", fmt.Errorf(`subject "%s" is not a valid NATS subject`, subject) +} + +func (p *Planner[EC, P]) extractArgumentTemplate(fieldRef int, template string) (string, error) { + matches := argument_templates.ArgumentTemplateRegex.FindAllStringSubmatch(template, -1) + // If no argument templates are defined, there are only static values + if len(matches) < 1 { + return template, nil + } + fieldNameBytes := p.visitor.Operation.FieldNameBytes(fieldRef) + // TODO: handling for interfaces and unions + fieldDefinitionRef, ok := p.visitor.Definition.ObjectTypeDefinitionFieldWithName(p.visitor.Walker.EnclosingTypeDefinition.Ref, fieldNameBytes) + if !ok { + return "", fmt.Errorf(`expected field definition to exist for field "%s"`, fieldNameBytes) + } + templateWithVariableTemplateReplacements := template + for templateNumber, groups := range matches { + // The first group is the whole template; the second is the period delimited argument path + if len(groups) != 2 { + return "", fmt.Errorf(`argument template #%d defined on field "%s" is invalid: expected 2 matching groups but received %d`, templateNumber+1, fieldNameBytes, len(groups)-1) + } + validationResult, err := argument_templates.ValidateArgumentPath(p.visitor.Definition, groups[1], fieldDefinitionRef) + if err != nil { + return "", fmt.Errorf(`argument template #%d defined on field "%s" is invalid: %w`, templateNumber+1, fieldNameBytes, err) + } + argumentNameBytes := []byte(validationResult.ArgumentPath[0]) + argumentRef, ok := p.visitor.Operation.FieldArgument(fieldRef, argumentNameBytes) + if !ok { + return "", fmt.Errorf(`operation field "%s" does not define argument "%s"`, fieldNameBytes, argumentNameBytes) + } + // variablePlaceholder has the form $$0$$, $$1$$, etc. + variablePlaceholder, err := p.addContextVariableByArgumentRef(argumentRef, validationResult.ArgumentPath) + if err != nil { + return "", fmt.Errorf(`failed to retrieve variable placeholder for argument ""%s" defined on operation field "%s": %w`, argumentNameBytes, fieldNameBytes, err) + } + // Replace the template literal with the variable placeholder (and reuse the variable if it already exists) + templateWithVariableTemplateReplacements = strings.ReplaceAll(templateWithVariableTemplateReplacements, groups[0], variablePlaceholder) + } + + return templateWithVariableTemplateReplacements, nil +} + +func (p *Planner[EC, P]) EnterDocument(_, _ *ast.Document) { + p.rootFieldRef = -1 + var zero EC + p.eventConfig = zero +} + +func (p *Planner[EC, P]) EnterField(ref int) { + if p.rootFieldRef != -1 { + // This is a nested field; nothing needs to be done + return + } + p.rootFieldRef = ref + + fieldName := p.visitor.Operation.FieldNameString(ref) + typeName := p.visitor.Walker.EnclosingTypeDefinition.NameString(p.visitor.Definition) + + extractFn := func(tpl string) (string, error) { + return p.extractArgumentTemplate(ref, tpl) + } + + eventConfigV, err := p.config.FindEventConfig(p.config.GetEventsDataConfigurations(), typeName, fieldName, extractFn) + if err != nil { + return + } + + p.eventConfig = eventConfigV +} + +type Source struct{} + +func (s *Source) Load(ctx context.Context, input []byte, out *bytes.Buffer) (err error) { + _, err = out.Write(input) + return +} + +func (s *Source) LoadWithFiles(ctx context.Context, input []byte, files []*httpclient.FileUpload, out *bytes.Buffer) (err error) { + panic("not implemented") +} + +func NewFactory[EC EventConfigType, P any](executionContext context.Context, config config.EventsConfiguration, providers map[string]P) *Factory[EC, P] { + return &Factory[EC, P]{ + providers: providers, + executionContext: executionContext, + config: config, + } +} + +type Factory[EC EventConfigType, P any] struct { + providers map[string]P + executionContext context.Context + config config.EventsConfiguration +} + +func (f *Factory[EC, P]) Planner(_ abstractlogger.Logger) plan.DataSourcePlanner[Implementer[EC, P]] { + return &Planner[EC, P]{ + providers: f.providers, + } +} + +func (f *Factory[EC, P]) Context() context.Context { + return f.executionContext +} + +func (f *Factory[EC, P]) UpstreamSchema(dataSourceConfig plan.DataSourceConfiguration[Implementer[EC, P]]) (*ast.Document, bool) { + return nil, false +} diff --git a/router/pkg/pubsub/datasource/old.go b/router/pkg/pubsub/datasource/old.go deleted file mode 100644 index b4528243f5..0000000000 --- a/router/pkg/pubsub/datasource/old.go +++ /dev/null @@ -1,308 +0,0 @@ -package datasource - -import ( - "context" - "fmt" - "regexp" - "strings" - - "github.com/jensneuse/abstractlogger" - - "github.com/wundergraph/graphql-go-tools/v2/pkg/ast" - "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/plan" - "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/resolve" -) - -type EventType string - -const ( - EventTypePublish EventType = "publish" - EventTypeRequest EventType = "request" - EventTypeSubscribe EventType = "subscribe" -) - -var eventSubjectRegex = regexp.MustCompile(`{{ args.([a-zA-Z0-9_]+) }}`) - -func EventTypeFromString(s string) (EventType, error) { - et := EventType(strings.ToLower(s)) - switch et { - case EventTypePublish, EventTypeRequest, EventTypeSubscribe: - return et, nil - default: - return "", fmt.Errorf("invalid event type: %q", s) - } -} - -type EventMetadata struct { - ProviderID string `json:"providerId"` - Type EventType `json:"type"` - TypeName string `json:"typeName"` - FieldName string `json:"fieldName"` -} - -type Configuration struct { - Metadata *EventMetadata `json:"metadata"` - pubSubs []plan.Planner -} - -type Planner struct { - id int - pubSubs []any - eventManager any - rootFieldRef int - variables resolve.Variables - visitor *plan.Visitor - config Configuration -} - -func (p *Planner) SetID(id int) { - p.id = id -} - -func (p *Planner) ID() (id int) { - return p.id -} - -func (p *Planner) EnterField(ref int) { - if p.rootFieldRef != -1 { - // This is a nested field; nothing needs to be done - return - } - p.rootFieldRef = ref - - fieldName := p.visitor.Operation.FieldNameString(ref) - typeName := p.visitor.Walker.EnclosingTypeDefinition.NameString(p.visitor.Definition) - - //var eventConfig PubSubber - //for _, cfg := range p.config.pubSubs { - // if pubSub, ok := cfg.(PubSubber); ok { - // if pubSub.MatchFieldNameAndType(fieldName, typeName) { - // eventConfig = &cfg - // break - // } - // } - //} - - p.visitor.Walker.StopWithInternalErr(fmt.Errorf("nope fieldName %s and typeName %s", fieldName, typeName)) - - //switch v := eventConfig.Configuration.(type) { - //case *NatsEventConfiguration: - // em := &NatsEventManager{ - // visitor: p.visitor, - // variables: &p.variables, - // eventMetadata: *eventConfig.Metadata, - // eventConfiguration: v, - // } - // p.eventManager = em - // - // switch eventConfig.Metadata.Type { - // case EventTypePublish, EventTypeRequest: - // em.handlePublishAndRequestEvent(ref) - // case EventTypeSubscribe: - // em.handleSubscriptionEvent(ref) - // default: - // p.visitor.Walker.StopWithInternalErr(fmt.Errorf("invalid EventType \"%s\" for Nats", eventConfig.Metadata.Type)) - // } - //case *KafkaEventConfiguration: - // em := &KafkaEventManager{ - // visitor: p.visitor, - // variables: &p.variables, - // eventMetadata: *eventConfig.Metadata, - // eventConfiguration: v, - // } - // p.eventManager = em - // - // switch eventConfig.Metadata.Type { - // case EventTypePublish: - // em.handlePublishEvent(ref) - // case EventTypeSubscribe: - // em.handleSubscriptionEvent(ref) - // default: - // p.visitor.Walker.StopWithInternalErr(fmt.Errorf("invalid EventType \"%s\" for Kafka", eventConfig.Metadata.Type)) - // } - //default: - // p.visitor.Walker.StopWithInternalErr(fmt.Errorf("invalid event configuration type: %T", v)) - //} -} - -func (p *Planner) EnterDocument(_, _ *ast.Document) { - p.rootFieldRef = -1 - p.eventManager = nil -} - -func (p *Planner) Register(visitor *plan.Visitor, configuration plan.DataSourceConfiguration[Configuration], dataSourcePlannerConfiguration plan.DataSourcePlannerConfiguration) error { - p.visitor = visitor - visitor.Walker.RegisterEnterFieldVisitor(p) - visitor.Walker.RegisterEnterDocumentVisitor(p) - p.config = configuration.CustomConfiguration() - return nil -} - -func (p *Planner) ConfigureFetch() resolve.FetchConfiguration { - if p.eventManager == nil { - p.visitor.Walker.StopWithInternalErr(fmt.Errorf("failed to configure fetch: event manager is nil")) - return resolve.FetchConfiguration{} - } - - //var dataSource resolve.DataSource - // - //switch v := p.eventManager.(type) { - //case *NatsEventManager: - // pubsub, ok := p.natsPubSubByProviderID[v.eventMetadata.ProviderID] - // if !ok { - // p.visitor.Walker.StopWithInternalErr(fmt.Errorf("no pubsub connection exists with provider id \"%s\"", v.eventMetadata.ProviderID)) - // return resolve.FetchConfiguration{} - // } - // - // switch v.eventMetadata.Type { - // case EventTypePublish: - // dataSource = &NatsPublishDataSource{ - // pubSub: pubsub, - // } - // case EventTypeRequest: - // dataSource = &NatsRequestDataSource{ - // pubSub: pubsub, - // } - // default: - // p.visitor.Walker.StopWithInternalErr(fmt.Errorf("failed to configure fetch: invalid event type \"%s\" for Nats", v.eventMetadata.Type)) - // return resolve.FetchConfiguration{} - // } - // - // return resolve.FetchConfiguration{ - // Input: v.publishAndRequestEventConfiguration.MarshalJSONTemplate(), - // Variables: p.variables, - // DataSource: dataSource, - // PostProcessing: resolve.PostProcessingConfiguration{ - // MergePath: []string{v.eventMetadata.FieldName}, - // }, - // } - // - //case *KafkaEventManager: - // pubsub, ok := p.kafkaPubSubByProviderID[v.eventMetadata.ProviderID] - // if !ok { - // p.visitor.Walker.StopWithInternalErr(fmt.Errorf("no pubsub connection exists with provider id \"%s\"", v.eventMetadata.ProviderID)) - // return resolve.FetchConfiguration{} - // } - // - // switch v.eventMetadata.Type { - // case EventTypePublish: - // dataSource = &KafkaPublishDataSource{ - // pubSub: pubsub, - // } - // case EventTypeRequest: - // p.visitor.Walker.StopWithInternalErr(fmt.Errorf("event type \"%s\" is not supported for Kafka", v.eventMetadata.Type)) - // return resolve.FetchConfiguration{} - // default: - // p.visitor.Walker.StopWithInternalErr(fmt.Errorf("failed to configure fetch: invalid event type \"%s\" for Kafka", v.eventMetadata.Type)) - // return resolve.FetchConfiguration{} - // } - // - // return resolve.FetchConfiguration{ - // Input: v.publishEventConfiguration.MarshalJSONTemplate(), - // Variables: p.variables, - // DataSource: dataSource, - // PostProcessing: resolve.PostProcessingConfiguration{ - // MergePath: []string{v.eventMetadata.FieldName}, - // }, - // } - // - //default: - // p.visitor.Walker.StopWithInternalErr(fmt.Errorf("failed to configure fetch: invalid event manager type: %T", p.eventManager)) - //} - - return resolve.FetchConfiguration{} -} - -func (p *Planner) ConfigureSubscription() plan.SubscriptionConfiguration { - if p.eventManager == nil { - p.visitor.Walker.StopWithInternalErr(fmt.Errorf("failed to configure subscription: event manager is nil")) - return plan.SubscriptionConfiguration{} - } - - //switch v := p.eventManager.(type) { - //case *NatsEventManager: - // pubsub, ok := p.natsPubSubByProviderID[v.eventMetadata.ProviderID] - // if !ok { - // p.visitor.Walker.StopWithInternalErr(fmt.Errorf("no pubsub connection exists with provider id \"%s\"", v.eventMetadata.ProviderID)) - // return plan.SubscriptionConfiguration{} - // } - // object, err := json.Marshal(v.subscriptionEventConfiguration) - // if err != nil { - // p.visitor.Walker.StopWithInternalErr(fmt.Errorf("failed to marshal event subscription streamConfiguration")) - // return plan.SubscriptionConfiguration{} - // } - // return plan.SubscriptionConfiguration{ - // Input: string(object), - // Variables: p.variables, - // DataSource: &NatsSubscriptionSource{ - // pubSub: pubsub, - // }, - // PostProcessing: resolve.PostProcessingConfiguration{ - // MergePath: []string{v.eventMetadata.FieldName}, - // }, - // } - //case *KafkaEventManager: - // pubsub, ok := p.kafkaPubSubByProviderID[v.eventMetadata.ProviderID] - // if !ok { - // p.visitor.Walker.StopWithInternalErr(fmt.Errorf("no pubsub connection exists with provider id \"%s\"", v.eventMetadata.ProviderID)) - // return plan.SubscriptionConfiguration{} - // } - // object, err := json.Marshal(v.subscriptionEventConfiguration) - // if err != nil { - // p.visitor.Walker.StopWithInternalErr(fmt.Errorf("failed to marshal event subscription streamConfiguration")) - // return plan.SubscriptionConfiguration{} - // } - // return plan.SubscriptionConfiguration{ - // Input: string(object), - // Variables: p.variables, - // DataSource: &KafkaSubscriptionSource{ - // pubSub: pubsub, - // }, - // PostProcessing: resolve.PostProcessingConfiguration{ - // MergePath: []string{v.eventMetadata.FieldName}, - // }, - // } - //default: - // p.visitor.Walker.StopWithInternalErr(fmt.Errorf("failed to configure subscription: invalid event manager type: %T", p.eventManager)) - //} - - return plan.SubscriptionConfiguration{} -} - -func (p *Planner) DataSourcePlanningBehavior() plan.DataSourcePlanningBehavior { - return plan.DataSourcePlanningBehavior{ - MergeAliasedRootNodes: false, - OverrideFieldPathFromAlias: false, - IncludeTypeNameFields: true, - } -} - -func (p *Planner) DownstreamResponseFieldAlias(_ int) (alias string, exists bool) { - return "", false -} - -func NewFactory(executionContext context.Context, pubSubs []any) *Factory { - return &Factory{ - executionContext: executionContext, - pubSubs: pubSubs, - } -} - -type Factory struct { - executionContext context.Context - pubSubs []any -} - -func (f *Factory) Planner(_ abstractlogger.Logger) plan.DataSourcePlanner[Configuration] { - return &Planner{ - pubSubs: f.pubSubs, - } -} - -func (f *Factory) Context() context.Context { - return f.executionContext -} - -func (f *Factory) UpstreamSchema(dataSourceConfig plan.DataSourceConfiguration[Configuration]) (*ast.Document, bool) { - return nil, false -} diff --git a/router/pkg/pubsub/kafka/datasource.go b/router/pkg/pubsub/kafka/datasource.go index 3a6fe3d8ee..e242828d2a 100644 --- a/router/pkg/pubsub/kafka/datasource.go +++ b/router/pkg/pubsub/kafka/datasource.go @@ -1,29 +1,24 @@ package kafka import ( - "bytes" "context" "crypto/tls" "encoding/json" "fmt" "time" - "github.com/jensneuse/abstractlogger" "github.com/twmb/franz-go/pkg/kgo" "github.com/twmb/franz-go/pkg/sasl/plain" nodev1 "github.com/wundergraph/cosmo/router/gen/proto/wg/cosmo/node/v1" "github.com/wundergraph/cosmo/router/pkg/config" "github.com/wundergraph/cosmo/router/pkg/pubsub/datasource" - "github.com/wundergraph/cosmo/router/pkg/pubsub/utils" "go.uber.org/zap" - "github.com/wundergraph/graphql-go-tools/v2/pkg/ast" - "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/datasource/httpclient" "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/plan" "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/resolve" ) -func GetDataSource(ctx context.Context, in *nodev1.DataSourceConfiguration, dsMeta *plan.DataSourceMetadata, config config.EventsConfiguration, logger *zap.Logger) (plan.DataSource, error) { +func GetPlanDataSource(ctx context.Context, in *nodev1.DataSourceConfiguration, dsMeta *plan.DataSourceMetadata, config config.EventsConfiguration, logger *zap.Logger) (plan.DataSource, error) { if kafkaData := in.GetCustomEvents().GetKafka(); kafkaData != nil { k := NewPubSub(logger) err := k.PrepareProviders(ctx, in, dsMeta, config) @@ -31,11 +26,11 @@ func GetDataSource(ctx context.Context, in *nodev1.DataSourceConfiguration, dsMe return nil, err } factory := k.GetFactory(ctx, config) - ds, err := plan.NewDataSourceConfiguration( + ds, err := plan.NewDataSourceConfiguration[datasource.Implementer[*nodev1.KafkaEventConfiguration, *kafkaPubSub]]( in.Id, factory, dsMeta, - Configuration{ + &Configuration{ EventConfiguration: kafkaData, Logger: logger, }, @@ -52,7 +47,7 @@ func GetDataSource(ctx context.Context, in *nodev1.DataSourceConfiguration, dsMe } func init() { - datasource.RegisterPubSub(GetDataSource) + datasource.RegisterPubSub(GetPlanDataSource) } type Kafka struct { @@ -117,8 +112,8 @@ func (k *Kafka) PrepareProviders(ctx context.Context, in *nodev1.DataSourceConfi return nil } -func (k *Kafka) GetFactory(executionContext context.Context, config config.EventsConfiguration) *Factory { - return NewFactory(executionContext, config, k.providers) +func (k *Kafka) GetFactory(executionContext context.Context, config config.EventsConfiguration) *datasource.Factory[*nodev1.KafkaEventConfiguration, *kafkaPubSub] { + return datasource.NewFactory[*nodev1.KafkaEventConfiguration](executionContext, config, k.providers) } func NewPubSub(logger *zap.Logger) Kafka { @@ -134,223 +129,74 @@ type Configuration struct { Logger *zap.Logger } -type Planner struct { - id int - config Configuration - eventsConfig config.EventsConfiguration - eventConfig *nodev1.KafkaEventConfiguration - rootFieldRef int - variables resolve.Variables - visitor *plan.Visitor - providers map[string]*kafkaPubSub +func (c *Configuration) GetEventsDataConfigurations() []*nodev1.KafkaEventConfiguration { + return c.EventConfiguration } -func (p *Planner) SetID(id int) { - p.id = id -} - -func (p *Planner) ID() (id int) { - return p.id -} - -func (p *Planner) DownstreamResponseFieldAlias(downstreamFieldRef int) (alias string, exists bool) { - // skip, not required - return -} - -func (p *Planner) DataSourcePlanningBehavior() plan.DataSourcePlanningBehavior { - return plan.DataSourcePlanningBehavior{ - MergeAliasedRootNodes: false, - OverrideFieldPathFromAlias: false, - } -} - -func (p *Planner) Register(visitor *plan.Visitor, configuration plan.DataSourceConfiguration[Configuration], _ plan.DataSourcePlannerConfiguration) error { - p.visitor = visitor - visitor.Walker.RegisterEnterFieldVisitor(p) - visitor.Walker.RegisterEnterDocumentVisitor(p) - p.config = configuration.CustomConfiguration() - return nil -} - -func (p *Planner) ConfigureFetch() resolve.FetchConfiguration { - if p.eventConfig == nil { - p.visitor.Walker.StopWithInternalErr(fmt.Errorf("failed to configure fetch: event config is nil")) - return resolve.FetchConfiguration{} - } - +func (c *Configuration) GetResolveDataSource(eventConfig *nodev1.KafkaEventConfiguration, pubsub *kafkaPubSub) (resolve.DataSource, error) { var dataSource resolve.DataSource - providerId := p.eventConfig.GetEngineEventConfiguration().GetProviderId() - typeName := p.eventConfig.GetEngineEventConfiguration().GetType() - topics := p.eventConfig.GetTopics() - pubsub, ok := p.providers[providerId] - if !ok { - p.visitor.Walker.StopWithInternalErr(fmt.Errorf("no pubsub connection exists with provider id \"%s\"", providerId)) - return resolve.FetchConfiguration{} - } - switch p.eventConfig.GetEngineEventConfiguration().GetType() { + typeName := eventConfig.GetEngineEventConfiguration().GetType() + switch typeName { case nodev1.EventType_PUBLISH: dataSource = &KafkaPublishDataSource{ pubSub: pubsub, } default: - p.visitor.Walker.StopWithInternalErr(fmt.Errorf("failed to configure fetch: invalid event type \"%s\" for Kafka", typeName.String())) - return resolve.FetchConfiguration{} + return nil, fmt.Errorf("failed to configure fetch: invalid event type \"%s\" for Kafka", typeName.String()) } - if len(topics) != 1 { - p.visitor.Walker.StopWithInternalErr(fmt.Errorf("publish and request events should define one subject but received %d", len(topics))) - return resolve.FetchConfiguration{} - } - - topic := topics[0] - - event, eventErr := utils.BuildEventDataBytes(p.rootFieldRef, p.visitor, &p.variables) - if eventErr != nil { - p.visitor.Walker.StopWithInternalErr(fmt.Errorf("failed to build event data bytes: %w", eventErr)) - return resolve.FetchConfiguration{} - } - - evtCfg := PublishEventConfiguration{ - ProviderID: providerId, - Topic: topic, - Data: event, - } + return dataSource, nil +} - return resolve.FetchConfiguration{ - Input: evtCfg.MarshalJSONTemplate(), - Variables: p.variables, - DataSource: dataSource, - PostProcessing: resolve.PostProcessingConfiguration{ - MergePath: []string{p.eventConfig.GetEngineEventConfiguration().GetFieldName()}, - }, - } +func (c *Configuration) GetResolveDataSourceSubscription(eventConfig *nodev1.KafkaEventConfiguration, pubsub *kafkaPubSub) (resolve.SubscriptionDataSource, error) { + return &SubscriptionSource{ + pubSub: pubsub, + }, nil } -func (p *Planner) ConfigureSubscription() plan.SubscriptionConfiguration { - if p.eventConfig == nil { - p.visitor.Walker.StopWithInternalErr(fmt.Errorf("failed to configure subscription: event manager is nil")) - return plan.SubscriptionConfiguration{} - } - providerId := p.eventConfig.GetEngineEventConfiguration().GetProviderId() - pubsub, ok := p.providers[providerId] - if !ok { - p.visitor.Walker.StopWithInternalErr(fmt.Errorf("no pubsub connection exists with provider id \"%s\"", providerId)) - return plan.SubscriptionConfiguration{} - } +func (c *Configuration) GetResolveDataSourceSubscriptionInput(eventConfig *nodev1.KafkaEventConfiguration, pubsub *kafkaPubSub) (string, error) { + providerId := c.GetProviderId(eventConfig) evtCfg := SubscriptionEventConfiguration{ ProviderID: providerId, - Topics: p.eventConfig.GetTopics(), + Topics: eventConfig.GetTopics(), } object, err := json.Marshal(evtCfg) if err != nil { - p.visitor.Walker.StopWithInternalErr(fmt.Errorf("failed to marshal event subscription streamConfiguration")) - return plan.SubscriptionConfiguration{} - } - - return plan.SubscriptionConfiguration{ - Input: string(object), - Variables: p.variables, - DataSource: &SubscriptionSource{ - pubSub: pubsub, - }, - PostProcessing: resolve.PostProcessingConfiguration{ - MergePath: []string{p.eventConfig.GetEngineEventConfiguration().GetFieldName()}, - }, + return "", fmt.Errorf("failed to marshal event subscription streamConfiguration") } + return string(object), nil } -func (p *Planner) EnterDocument(_, _ *ast.Document) { - p.rootFieldRef = -1 - p.eventConfig = nil -} - -func (p *Planner) EnterField(ref int) { - if p.rootFieldRef != -1 { - // This is a nested field; nothing needs to be done - return - } - p.rootFieldRef = ref - - fieldName := p.visitor.Operation.FieldNameString(ref) - typeName := p.visitor.Walker.EnclosingTypeDefinition.NameString(p.visitor.Definition) - - var eventConfig *nodev1.KafkaEventConfiguration - for _, cfg := range p.config.EventConfiguration { - if cfg.GetEngineEventConfiguration().GetTypeName() == typeName && cfg.GetEngineEventConfiguration().GetFieldName() == fieldName { - eventConfig = cfg - break - } - } +func (c *Configuration) GetResolveDataSourceInput(eventConfig *nodev1.KafkaEventConfiguration, event []byte) (string, error) { + topics := eventConfig.GetTopics() - if eventConfig == nil { - return + if len(topics) != 1 { + return "", fmt.Errorf("publish and request events should define one topic but received %d", len(topics)) } - p.eventConfig = eventConfig + topic := topics[0] - providerId := eventConfig.GetEngineEventConfiguration().GetProviderId() + providerId := c.GetProviderId(eventConfig) - switch eventConfig.GetEngineEventConfiguration().GetType() { - case nodev1.EventType_PUBLISH: - if len(p.eventConfig.GetTopics()) != 1 { - p.visitor.Walker.StopWithInternalErr(fmt.Errorf("publish events should define one subject but received %d", len(p.eventConfig.GetTopics()))) - return - } - _, found := p.providers[providerId] - if !found { - p.visitor.Walker.StopWithInternalErr(fmt.Errorf("unable to publish events of provider %d", len(p.eventConfig.GetTopics()))) - } - _ = PublishEventConfiguration{ - ProviderID: providerId, - Topic: eventConfig.GetTopics()[0], - Data: json.RawMessage("[]"), - } - p.config.Logger.Warn("Publishing!") - // provider.Publish(provider.ctx, pubCfg) - case nodev1.EventType_SUBSCRIBE: - p.config.Logger.Warn("Subscribing!") - default: - p.visitor.Walker.StopWithInternalErr(fmt.Errorf("invalid EventType \"%s\" for Kafka", eventConfig.GetEngineEventConfiguration().GetType())) + evtCfg := PublishEventConfiguration{ + ProviderID: providerId, + Topic: topic, + Data: event, } -} - -type Source struct{} - -func (s *Source) Load(ctx context.Context, input []byte, out *bytes.Buffer) (err error) { - _, err = out.Write(input) - return -} - -func (s *Source) LoadWithFiles(ctx context.Context, input []byte, files []*httpclient.FileUpload, out *bytes.Buffer) (err error) { - panic("not implemented") -} -func NewFactory(executionContext context.Context, config config.EventsConfiguration, providers map[string]*kafkaPubSub) *Factory { - return &Factory{ - providers: providers, - executionContext: executionContext, - config: config, - } + return evtCfg.MarshalJSONTemplate(), nil } -type Factory struct { - providers map[string]*kafkaPubSub - executionContext context.Context - config config.EventsConfiguration +func (c *Configuration) GetProviderId(eventConfig *nodev1.KafkaEventConfiguration) string { + return eventConfig.GetEngineEventConfiguration().GetProviderId() } -func (f *Factory) Planner(_ abstractlogger.Logger) plan.DataSourcePlanner[Configuration] { - return &Planner{ - providers: f.providers, +func (c *Configuration) FindEventConfig(eventConfigs []*nodev1.KafkaEventConfiguration, typeName string, fieldName string, fn datasource.ArgumentTemplateCallback) (*nodev1.KafkaEventConfiguration, error) { + for _, cfg := range eventConfigs { + if cfg.GetEngineEventConfiguration().GetTypeName() == typeName && cfg.GetEngineEventConfiguration().GetFieldName() == fieldName { + return cfg, nil + } } -} - -func (f *Factory) Context() context.Context { - return f.executionContext -} - -func (f *Factory) UpstreamSchema(dataSourceConfig plan.DataSourceConfiguration[Configuration]) (*ast.Document, bool) { - return nil, false + return nil, fmt.Errorf("failed to find event config for type name \"%s\" and field name \"%s\"", typeName, fieldName) } diff --git a/router/pkg/pubsub/kafka/subscription_datasource.go b/router/pkg/pubsub/kafka/subscription_datasource.go index 3109d3cf35..70623170cf 100644 --- a/router/pkg/pubsub/kafka/subscription_datasource.go +++ b/router/pkg/pubsub/kafka/subscription_datasource.go @@ -33,7 +33,6 @@ type SubscriptionSource struct { } func (s *SubscriptionSource) UniqueRequestID(ctx *resolve.Context, input []byte, xxh *xxhash.Digest) error { - val, _, _, err := jsonparser.Get(input, "topics") if err != nil { return err diff --git a/router/pkg/pubsub/nats/datasource.go b/router/pkg/pubsub/nats/datasource.go index b85deed14f..f970e3be9b 100644 --- a/router/pkg/pubsub/nats/datasource.go +++ b/router/pkg/pubsub/nats/datasource.go @@ -1,7 +1,6 @@ package nats import ( - "bytes" "context" "encoding/json" "errors" @@ -11,18 +10,13 @@ import ( "strings" "time" - "github.com/jensneuse/abstractlogger" "github.com/nats-io/nats.go" "github.com/nats-io/nats.go/jetstream" nodev1 "github.com/wundergraph/cosmo/router/gen/proto/wg/cosmo/node/v1" "github.com/wundergraph/cosmo/router/pkg/config" "github.com/wundergraph/cosmo/router/pkg/pubsub/datasource" - "github.com/wundergraph/cosmo/router/pkg/pubsub/utils" "go.uber.org/zap" - "github.com/wundergraph/graphql-go-tools/v2/pkg/ast" - "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/argument_templates" - "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/datasource/httpclient" "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/plan" "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/resolve" ) @@ -45,11 +39,11 @@ func GetDataSource(ctx context.Context, in *nodev1.DataSourceConfiguration, dsMe return nil, err } factory := k.GetFactory(ctx, config, k.providers) - ds, err := plan.NewDataSourceConfiguration[Configuration]( + ds, err := plan.NewDataSourceConfiguration[datasource.Implementer[*nodev1.NatsEventConfiguration, *NatsPubSub]]( in.Id, factory, dsMeta, - Configuration{ + &Configuration{ EventConfiguration: natsData, Logger: logger, }, @@ -155,8 +149,8 @@ func (n *Nats) PrepareProviders(ctx context.Context, in *nodev1.DataSourceConfig return nil } -func (n *Nats) GetFactory(executionContext context.Context, config config.EventsConfiguration, providers map[string]*NatsPubSub) *Factory { - return NewFactory(executionContext, config, providers) +func (n *Nats) GetFactory(executionContext context.Context, config config.EventsConfiguration, providers map[string]*NatsPubSub) *datasource.Factory[*nodev1.NatsEventConfiguration, *NatsPubSub] { + return datasource.NewFactory[*nodev1.NatsEventConfiguration](executionContext, config, n.providers) } func NewPubSub(logger *zap.Logger) Nats { @@ -169,323 +163,112 @@ type Configuration struct { Data string `json:"data"` EventConfiguration []*nodev1.NatsEventConfiguration Logger *zap.Logger + requestConfig *PublishAndRequestEventConfiguration + publishConfig *PublishAndRequestEventConfiguration + subscribeConfig *SubscriptionEventConfiguration } -type Planner struct { - id int - config Configuration - providers map[string]*NatsPubSub - rootFieldRef int - variables resolve.Variables - visitor *plan.Visitor - eventConfig *nodev1.NatsEventConfiguration - publishConfig *PublishAndRequestEventConfiguration - requestConfig *PublishAndRequestEventConfiguration - subscribeConfig *SubscriptionEventConfiguration +func (c *Configuration) GetEventsDataConfigurations() []*nodev1.NatsEventConfiguration { + return c.EventConfiguration } -func (p *Planner) addContextVariableByArgumentRef(argumentRef int, argumentPath []string) (string, error) { - variablePath, err := p.visitor.Operation.VariablePathByArgumentRefAndArgumentPath(argumentRef, argumentPath, p.visitor.Walker.Ancestors[0].Ref) - if err != nil { - return "", err - } - /* The definition is passed as both definition and operation below because getJSONRootType resolves the type - * from the first argument, but finalInputValueTypeRef comes from the definition - */ - contextVariable := &resolve.ContextVariable{ - Path: variablePath, - Renderer: resolve.NewPlainVariableRenderer(), - } - variablePlaceHolder, _ := p.variables.AddVariable(contextVariable) - return variablePlaceHolder, nil -} +func (c *Configuration) GetResolveDataSource(eventConfig *nodev1.NatsEventConfiguration, pubsub *NatsPubSub) (resolve.DataSource, error) { + var dataSource resolve.DataSource -func (p *Planner) extractEventSubject(fieldRef int, subject string) (string, error) { - matches := argument_templates.ArgumentTemplateRegex.FindAllStringSubmatch(subject, -1) - // If no argument templates are defined, there are only static values - if len(matches) < 1 { - if isValidNatsSubject(subject) { - return subject, nil - } - return "", fmt.Errorf(`subject "%s" is not a valid NATS subject`, subject) - } - fieldNameBytes := p.visitor.Operation.FieldNameBytes(fieldRef) - // TODO: handling for interfaces and unions - fieldDefinitionRef, ok := p.visitor.Definition.ObjectTypeDefinitionFieldWithName(p.visitor.Walker.EnclosingTypeDefinition.Ref, fieldNameBytes) - if !ok { - return "", fmt.Errorf(`expected field definition to exist for field "%s"`, fieldNameBytes) - } - subjectWithVariableTemplateReplacements := subject - for templateNumber, groups := range matches { - // The first group is the whole template; the second is the period delimited argument path - if len(groups) != 2 { - return "", fmt.Errorf(`argument template #%d defined on field "%s" is invalid: expected 2 matching groups but received %d`, templateNumber+1, fieldNameBytes, len(groups)-1) - } - validationResult, err := argument_templates.ValidateArgumentPath(p.visitor.Definition, groups[1], fieldDefinitionRef) - if err != nil { - return "", fmt.Errorf(`argument template #%d defined on field "%s" is invalid: %w`, templateNumber+1, fieldNameBytes, err) - } - argumentNameBytes := []byte(validationResult.ArgumentPath[0]) - argumentRef, ok := p.visitor.Operation.FieldArgument(fieldRef, argumentNameBytes) - if !ok { - return "", fmt.Errorf(`operation field "%s" does not define argument "%s"`, fieldNameBytes, argumentNameBytes) - } - // variablePlaceholder has the form $$0$$, $$1$$, etc. - variablePlaceholder, err := p.addContextVariableByArgumentRef(argumentRef, validationResult.ArgumentPath) - if err != nil { - return "", fmt.Errorf(`failed to retrieve variable placeholder for argument ""%s" defined on operation field "%s": %w`, argumentNameBytes, fieldNameBytes, err) + typeName := eventConfig.GetEngineEventConfiguration().GetType() + switch typeName { + case nodev1.EventType_PUBLISH, nodev1.EventType_REQUEST: + dataSource = &NatsPublishDataSource{ + pubSub: pubsub, } - // Replace the template literal with the variable placeholder (and reuse the variable if it already exists) - subjectWithVariableTemplateReplacements = strings.ReplaceAll(subjectWithVariableTemplateReplacements, groups[0], variablePlaceholder) - } - // Substitute the variable templates for dummy values to check naïvely that the string is a valid NATS subject - if isValidNatsSubject(variableTemplateRegex.ReplaceAllLiteralString(subjectWithVariableTemplateReplacements, "a")) { - return subjectWithVariableTemplateReplacements, nil + default: + return nil, fmt.Errorf("failed to configure fetch: invalid event type \"%s\" for Nats", typeName.String()) } - return "", fmt.Errorf(`subject "%s" is not a valid NATS subject`, subject) -} - -func (p *Planner) SetID(id int) { - p.id = id -} - -func (p *Planner) ID() (id int) { - return p.id -} - -func (p *Planner) DownstreamResponseFieldAlias(downstreamFieldRef int) (alias string, exists bool) { - // skip, not required - return -} -func (p *Planner) DataSourcePlanningBehavior() plan.DataSourcePlanningBehavior { - return plan.DataSourcePlanningBehavior{ - MergeAliasedRootNodes: false, - OverrideFieldPathFromAlias: false, - } + return dataSource, nil } -func (p *Planner) Register(visitor *plan.Visitor, configuration plan.DataSourceConfiguration[Configuration], _ plan.DataSourcePlannerConfiguration) error { - p.visitor = visitor - visitor.Walker.RegisterEnterFieldVisitor(p) - visitor.Walker.RegisterEnterDocumentVisitor(p) - p.config = configuration.CustomConfiguration() - return nil +func (c *Configuration) GetResolveDataSourceSubscription(eventConfig *nodev1.NatsEventConfiguration, pubsub *NatsPubSub) (resolve.SubscriptionDataSource, error) { + return &SubscriptionSource{ + pubSub: pubsub, + }, nil } -func (p *Planner) ConfigureFetch() resolve.FetchConfiguration { - var evtCfg PublishEventConfiguration - var dataSource resolve.DataSource +func (c *Configuration) GetResolveDataSourceSubscriptionInput(eventConfig *nodev1.NatsEventConfiguration, pubsub *NatsPubSub) (string, error) { + providerId := c.GetProviderId(eventConfig) - event, eventErr := utils.BuildEventDataBytes(p.rootFieldRef, p.visitor, &p.variables) - if eventErr != nil { - p.visitor.Walker.StopWithInternalErr(fmt.Errorf("failed to build event data bytes: %w", eventErr)) - return resolve.FetchConfiguration{} + evtCfg := SubscriptionEventConfiguration{ + ProviderID: providerId, + Subjects: eventConfig.GetSubjects(), } - - if p.publishConfig != nil { - pubsub, ok := p.providers[p.publishConfig.ProviderID] - if !ok { - p.visitor.Walker.StopWithInternalErr(fmt.Errorf("no pubsub connection exists with provider id \"%s\"", p.subscribeConfig.ProviderID)) - return resolve.FetchConfiguration{} + if eventConfig.StreamConfiguration != nil { + evtCfg.StreamConfiguration = &StreamConfiguration{ + Consumer: eventConfig.StreamConfiguration.ConsumerName, + StreamName: eventConfig.StreamConfiguration.StreamName, + ConsumerInactiveThreshold: eventConfig.StreamConfiguration.ConsumerInactiveThreshold, } - evtCfg = PublishEventConfiguration{ - ProviderID: p.publishConfig.ProviderID, - Subject: p.publishConfig.Subject, - Data: event, - } - dataSource = &NatsPublishDataSource{ - pubSub: pubsub, - } - } else if p.requestConfig != nil { - pubsub, ok := p.providers[p.requestConfig.ProviderID] - if !ok { - p.visitor.Walker.StopWithInternalErr(fmt.Errorf("no pubsub connection exists with provider id \"%s\"", p.requestConfig.ProviderID)) - return resolve.FetchConfiguration{} - } - dataSource = &NatsRequestDataSource{ - pubSub: pubsub, - } - evtCfg = PublishEventConfiguration{ - ProviderID: p.requestConfig.ProviderID, - Subject: p.requestConfig.Subject, - Data: event, - } - } else { - p.visitor.Walker.StopWithInternalErr(fmt.Errorf("failed to configure fetch: event config is nil")) - return resolve.FetchConfiguration{} - } - - return resolve.FetchConfiguration{ - Input: evtCfg.MarshalJSONTemplate(), - Variables: p.variables, - DataSource: dataSource, - PostProcessing: resolve.PostProcessingConfiguration{ - MergePath: []string{p.eventConfig.GetEngineEventConfiguration().GetFieldName()}, - }, - } -} - -func (p *Planner) ConfigureSubscription() plan.SubscriptionConfiguration { - if p.subscribeConfig == nil { - p.visitor.Walker.StopWithInternalErr(fmt.Errorf("failed to configure subscription: event manager is nil")) - return plan.SubscriptionConfiguration{} - } - pubsub, ok := p.providers[p.subscribeConfig.ProviderID] - if !ok { - p.visitor.Walker.StopWithInternalErr(fmt.Errorf("no pubsub connection exists with provider id \"%s\"", p.subscribeConfig.ProviderID)) - return plan.SubscriptionConfiguration{} - } - evtCfg := SubscriptionEventConfiguration{ - ProviderID: p.subscribeConfig.ProviderID, - Subjects: p.subscribeConfig.Subjects, - StreamConfiguration: p.subscribeConfig.StreamConfiguration, } object, err := json.Marshal(evtCfg) if err != nil { - p.visitor.Walker.StopWithInternalErr(fmt.Errorf("failed to marshal event subscription streamConfiguration")) - return plan.SubscriptionConfiguration{} - } - - return plan.SubscriptionConfiguration{ - Input: string(object), - Variables: p.variables, - DataSource: &SubscriptionSource{ - pubSub: pubsub, - }, - PostProcessing: resolve.PostProcessingConfiguration{ - MergePath: []string{p.eventConfig.GetEngineEventConfiguration().GetFieldName()}, - }, + return "", fmt.Errorf("failed to marshal event subscription streamConfiguration") } + return string(object), nil } -func (p *Planner) EnterDocument(_, _ *ast.Document) { - p.rootFieldRef = -1 - p.eventConfig = nil -} +func (c *Configuration) GetResolveDataSourceInput(eventConfig *nodev1.NatsEventConfiguration, event []byte) (string, error) { + subjects := eventConfig.GetSubjects() -func (p *Planner) EnterField(ref int) { - if p.rootFieldRef != -1 { - // This is a nested field; nothing needs to be done - return + if len(subjects) != 1 { + return "", fmt.Errorf("publish and request events should define one subject but received %d", len(subjects)) } - p.rootFieldRef = ref - fieldName := p.visitor.Operation.FieldNameString(ref) - typeName := p.visitor.Walker.EnclosingTypeDefinition.NameString(p.visitor.Definition) + subject := subjects[0] - var eventConfig *nodev1.NatsEventConfiguration - for _, cfg := range p.config.EventConfiguration { - if cfg.GetEngineEventConfiguration().GetTypeName() == typeName && cfg.GetEngineEventConfiguration().GetFieldName() == fieldName { - eventConfig = cfg - break - } - } + providerId := c.GetProviderId(eventConfig) - if eventConfig == nil { - return + evtCfg := PublishEventConfiguration{ + ProviderID: providerId, + Subject: subject, + Data: event, } - p.eventConfig = eventConfig + return evtCfg.MarshalJSONTemplate(), nil +} - providerId := eventConfig.GetEngineEventConfiguration().GetProviderId() +func (c *Configuration) GetProviderId(eventConfig *nodev1.NatsEventConfiguration) string { + return eventConfig.GetEngineEventConfiguration().GetProviderId() +} - switch v := eventConfig.GetEngineEventConfiguration().GetType(); v { +func (c *Configuration) transformEventConfig(cfg *nodev1.NatsEventConfiguration, fn datasource.ArgumentTemplateCallback) (*nodev1.NatsEventConfiguration, error) { + switch v := cfg.GetEngineEventConfiguration().GetType(); v { case nodev1.EventType_PUBLISH, nodev1.EventType_REQUEST: - if len(p.eventConfig.GetSubjects()) != 1 { - p.visitor.Walker.StopWithInternalErr(fmt.Errorf("publish events should define one subject but received %d", len(p.eventConfig.GetSubjects()))) - return - } - _, found := p.providers[providerId] - if !found { - p.visitor.Walker.StopWithInternalErr(fmt.Errorf("unable to publish events of provider with id %s", providerId)) - } - extractedSubject, err := p.extractEventSubject(ref, eventConfig.GetSubjects()[0]) + extractedSubject, err := fn(cfg.GetSubjects()[0]) if err != nil { - p.visitor.Walker.StopWithInternalErr(fmt.Errorf("unable to parse subject with id %s", eventConfig.GetSubjects()[0])) - } - cfg := &PublishAndRequestEventConfiguration{ - ProviderID: providerId, - Subject: extractedSubject, - Data: json.RawMessage("[]"), - } - if v == nodev1.EventType_REQUEST { - p.requestConfig = cfg - } else { - p.publishConfig = cfg + return cfg, fmt.Errorf("unable to parse subject with id %s", cfg.GetSubjects()[0]) } + cfg.Subjects = []string{extractedSubject} case nodev1.EventType_SUBSCRIBE: - if len(p.eventConfig.Subjects) == 0 { - p.visitor.Walker.StopWithInternalErr(fmt.Errorf("expected at least one subscription subject but received %d", len(p.eventConfig.Subjects))) - return - } - extractedSubjects := make([]string, 0, len(p.eventConfig.Subjects)) - for _, rawSubject := range p.eventConfig.Subjects { - extractedSubject, err := p.extractEventSubject(ref, rawSubject) + extractedSubjects := make([]string, 0, len(cfg.Subjects)) + for _, rawSubject := range cfg.Subjects { + extractedSubject, err := fn(rawSubject) if err != nil { - p.visitor.Walker.StopWithInternalErr(fmt.Errorf("could not extract subscription event subjects: %w", err)) - return + return cfg, nil } extractedSubjects = append(extractedSubjects, extractedSubject) } - var streamConf *StreamConfiguration - if p.eventConfig.StreamConfiguration != nil { - streamConf = &StreamConfiguration{} - streamConf.Consumer = p.eventConfig.StreamConfiguration.ConsumerName - streamConf.ConsumerInactiveThreshold = p.eventConfig.StreamConfiguration.ConsumerInactiveThreshold - streamConf.StreamName = p.eventConfig.StreamConfiguration.StreamName - } - slices.Sort(extractedSubjects) - p.subscribeConfig = &SubscriptionEventConfiguration{ - ProviderID: providerId, - Subjects: extractedSubjects, - StreamConfiguration: streamConf, - } - default: - p.visitor.Walker.StopWithInternalErr(fmt.Errorf("invalid EventType \"%s\" for Kafka", eventConfig.GetEngineEventConfiguration().GetType())) - } -} - -type Source struct{} - -func (Source) Load(ctx context.Context, input []byte, out *bytes.Buffer) (err error) { - _, err = out.Write(input) - return -} - -func (Source) LoadWithFiles(ctx context.Context, input []byte, files []*httpclient.FileUpload, out *bytes.Buffer) (err error) { - panic("not implemented") -} - -func NewFactory(executionContext context.Context, config config.EventsConfiguration, providers map[string]*NatsPubSub) *Factory { - return &Factory{ - executionContext: executionContext, - eventsConfiguration: config, - providers: providers, + cfg.Subjects = extractedSubjects } + return cfg, nil } -type Factory struct { - config Configuration - eventsConfiguration config.EventsConfiguration - executionContext context.Context - providers map[string]*NatsPubSub -} - -func (f *Factory) Planner(_ abstractlogger.Logger) plan.DataSourcePlanner[Configuration] { - return &Planner{ - config: f.config, - providers: f.providers, +func (c *Configuration) FindEventConfig(eventConfigs []*nodev1.NatsEventConfiguration, typeName string, fieldName string, fn datasource.ArgumentTemplateCallback) (*nodev1.NatsEventConfiguration, error) { + for _, cfg := range eventConfigs { + if cfg.GetEngineEventConfiguration().GetTypeName() == typeName && cfg.GetEngineEventConfiguration().GetFieldName() == fieldName { + return c.transformEventConfig(cfg, fn) + } } -} - -func (f *Factory) Context() context.Context { - return f.executionContext -} - -func (f *Factory) UpstreamSchema(dataSourceConfig plan.DataSourceConfiguration[Configuration]) (*ast.Document, bool) { - return nil, false + return nil, fmt.Errorf("failed to find event config for type name \"%s\" and field name \"%s\"", typeName, fieldName) } func isValidNatsSubject(subject string) bool { From 163aa5b6f35ca954dab266276e96110d2be349ca Mon Sep 17 00:00:00 2001 From: Alessandro Pagnin Date: Mon, 24 Mar 2025 18:49:55 +0100 Subject: [PATCH 007/126] refactor(pubsub): implement lazy connection handling for NATS and Kafka, streamline provider initialization --- demo/pkg/subgraphs/subgraphs.go | 22 +- router-tests/events/nats_events_test.go | 2 +- router-tests/structured_logging_test.go | 7 +- router-tests/testenv/pubsub.go | 19 ++ router-tests/testenv/testenv.go | 6 +- router/core/plan_generator.go | 31 ++- router/pkg/plan_generator/plan_generator.go | 1 + .../pkg/plan_generator/plan_generator_test.go | 2 + router/pkg/pubsub/datasource/datasource.go | 254 +----------------- router/pkg/pubsub/datasource/factory.go | 38 +++ router/pkg/pubsub/datasource/planner.go | 219 +++++++++++++++ router/pkg/pubsub/kafka/datasource.go | 102 ++----- router/pkg/pubsub/kafka/datasource_impl.go | 89 ++++++ router/pkg/pubsub/kafka/kafka.go | 68 +++-- .../pubsub/kafka/subscription_datasource.go | 4 +- router/pkg/pubsub/nats/datasource.go | 59 +++- router/pkg/pubsub/nats/nats.go | 32 +-- 17 files changed, 545 insertions(+), 410 deletions(-) create mode 100644 router/pkg/pubsub/datasource/factory.go create mode 100644 router/pkg/pubsub/datasource/planner.go create mode 100644 router/pkg/pubsub/kafka/datasource_impl.go diff --git a/demo/pkg/subgraphs/subgraphs.go b/demo/pkg/subgraphs/subgraphs.go index ab3820d02c..0b43b17aff 100644 --- a/demo/pkg/subgraphs/subgraphs.go +++ b/demo/pkg/subgraphs/subgraphs.go @@ -206,31 +206,21 @@ func New(ctx context.Context, config *Config) (*Subgraphs, error) { if defaultSourceNameURL := os.Getenv("NATS_URL"); defaultSourceNameURL != "" { url = defaultSourceNameURL } - defaultConnection, err := nats.Connect(url) - if err != nil { - log.Printf("failed to connect to nats source \"nats\": %v", err) - } - myNatsConnection, err := nats.Connect(url) - if err != nil { - log.Printf("failed to connect to nats source \"my-nats\": %v", err) + natsPubSubByProviderID := map[string]*natsPubsub.NatsPubSub{ + "default": natsPubsub.NewConnector(zap.NewNop(), url, []nats.Option{}, "hostname", "test").New(ctx), + "my-nats": natsPubsub.NewConnector(zap.NewNop(), url, []nats.Option{}, "hostname", "test").New(ctx), } - defaultJetStream, err := jetstream.New(defaultConnection) + defaultConnection, err := nats.Connect(url) if err != nil { - return nil, err + log.Printf("failed to connect to nats source \"nats\": %v", err) } - - myNatsJetStream, err := jetstream.New(myNatsConnection) + defaultJetStream, err := jetstream.New(defaultConnection) if err != nil { return nil, err } - natsPubSubByProviderID := map[string]*natsPubsub.NatsPubSub{ - "default": natsPubsub.NewConnector(zap.NewNop(), defaultConnection, defaultJetStream, "hostname", "test").New(ctx), - "my-nats": natsPubsub.NewConnector(zap.NewNop(), myNatsConnection, myNatsJetStream, "hostname", "test").New(ctx), - } - _, err = defaultJetStream.CreateOrUpdateStream(ctx, jetstream.StreamConfig{ Name: "streamName", Subjects: []string{"employeeUpdated.>"}, diff --git a/router-tests/events/nats_events_test.go b/router-tests/events/nats_events_test.go index fdd068a083..6659b8f234 100644 --- a/router-tests/events/nats_events_test.go +++ b/router-tests/events/nats_events_test.go @@ -136,7 +136,7 @@ func TestNatsEvents(t *testing.T) { natsLogs := xEnv.Observer().FilterMessageSnippet("Nats").All() require.Len(t, natsLogs, 4) providerIDFields := xEnv.Observer().FilterField(zap.String("provider_id", "my-nats")).All() - require.Len(t, providerIDFields, 3) + require.Len(t, providerIDFields, 1) }) }) diff --git a/router-tests/structured_logging_test.go b/router-tests/structured_logging_test.go index ba6a2e4a96..257558b992 100644 --- a/router-tests/structured_logging_test.go +++ b/router-tests/structured_logging_test.go @@ -4,13 +4,14 @@ import ( "bytes" "encoding/json" "fmt" - "github.com/stretchr/testify/assert" "math" "net/http" "os" "path/filepath" "testing" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" "go.uber.org/zap" "go.uber.org/zap/zapcore" @@ -162,11 +163,11 @@ func TestRouterStartLogs(t *testing.T) { }, }, func(t *testing.T, xEnv *testenv.Environment) { logEntries := xEnv.Observer().All() - require.Len(t, logEntries, 13) + require.Len(t, logEntries, 11) natsLogs := xEnv.Observer().FilterMessageSnippet("Nats Event source enabled").All() require.Len(t, natsLogs, 4) providerIDFields := xEnv.Observer().FilterField(zap.String("provider_id", "default")).All() - require.Len(t, providerIDFields, 2) + require.Len(t, providerIDFields, 1) kafkaLogs := xEnv.Observer().FilterMessageSnippet("Kafka Event source enabled").All() require.Len(t, kafkaLogs, 2) playgroundLog := xEnv.Observer().FilterMessage("Serving GraphQL playground") diff --git a/router-tests/testenv/pubsub.go b/router-tests/testenv/pubsub.go index 6842344d1e..25048e1981 100644 --- a/router-tests/testenv/pubsub.go +++ b/router-tests/testenv/pubsub.go @@ -137,8 +137,14 @@ var ( natsServer *natsserver.Server ) +type NatParams struct { + Opts []nats.Option + Url string +} + type NatsData struct { Connections []*nats.Conn + Params []*NatParams Server *natsserver.Server } @@ -148,6 +154,17 @@ func setupNatsData(t testing.TB) (*NatsData, error) { } natsData.Server = natsServer for range demoNatsProviders { + param := &NatParams{ + Url: natsData.Server.ClientURL(), + Opts: []nats.Option{ + nats.MaxReconnects(10), + nats.ReconnectWait(1 * time.Second), + nats.Timeout(5 * time.Second), + nats.ErrorHandler(func(conn *nats.Conn, subscription *nats.Subscription, err error) { + t.Log(err) + }), + }, + } natsConnection, err := nats.Connect( natsData.Server.ClientURL(), nats.MaxReconnects(10), @@ -160,6 +177,8 @@ func setupNatsData(t testing.TB) (*NatsData, error) { if err != nil { return nil, err } + + natsData.Params = append(natsData.Params, param) natsData.Connections = append(natsData.Connections, natsConnection) } return natsData, nil diff --git a/router-tests/testenv/testenv.go b/router-tests/testenv/testenv.go index fa953fda57..1c38a48a29 100644 --- a/router-tests/testenv/testenv.go +++ b/router-tests/testenv/testenv.go @@ -37,7 +37,6 @@ import ( "github.com/hashicorp/go-cleanhttp" "github.com/hashicorp/go-retryablehttp" "github.com/nats-io/nats.go" - "github.com/nats-io/nats.go/jetstream" "github.com/prometheus/client_golang/prometheus" "github.com/stretchr/testify/require" "github.com/twmb/franz-go/pkg/kadm" @@ -2040,10 +2039,7 @@ func subgraphOptions(ctx context.Context, t testing.TB, logger *zap.Logger, nats } natsPubSubByProviderID := make(map[string]*pubsubNats.NatsPubSub, len(demoNatsProviders)) for _, sourceName := range demoNatsProviders { - js, err := jetstream.New(natsData.Connections[0]) - require.NoError(t, err) - - natsPubSubByProviderID[sourceName] = pubsubNats.NewConnector(logger, natsData.Connections[0], js, "hostname", "listenaddr").New(ctx) + natsPubSubByProviderID[sourceName] = pubsubNats.NewConnector(logger, natsData.Params[0].Url, natsData.Params[0].Opts, "hostname", "listenaddr").New(ctx) } return &subgraphs.SubgraphOptions{ diff --git a/router/core/plan_generator.go b/router/core/plan_generator.go index a2628f5a54..6b59a564f6 100644 --- a/router/core/plan_generator.go +++ b/router/core/plan_generator.go @@ -22,6 +22,8 @@ import ( "go.uber.org/zap" "github.com/wundergraph/cosmo/router/pkg/config" + "github.com/wundergraph/cosmo/router/pkg/pubsub/kafka" + "github.com/wundergraph/cosmo/router/pkg/pubsub/nats" "github.com/wundergraph/cosmo/router/pkg/execution_config" ) @@ -158,6 +160,33 @@ func (pg *PlanGenerator) buildRouterConfig(configFilePath string) (*nodev1.Route } func (pg *PlanGenerator) loadConfiguration(routerConfig *nodev1.RouterConfig, logger *zap.Logger, maxDataSourceCollectorsConcurrency uint) error { + routerEngineConfig := RouterEngineConfiguration{} + natSources := map[string]*nats.NatsPubSub{} + kafkaSources := map[string]*kafka.KafkaPubSub{} + for _, ds := range routerConfig.GetEngineConfig().GetDatasourceConfigurations() { + if ds.GetKind() != nodev1.DataSourceKind_PUBSUB || ds.GetCustomEvents() == nil { + continue + } + for _, natConfig := range ds.GetCustomEvents().GetNats() { + providerId := natConfig.GetEngineEventConfiguration().GetProviderId() + if _, ok := natSources[providerId]; !ok { + natSources[providerId] = nil + routerEngineConfig.Events.Providers.Nats = append(routerEngineConfig.Events.Providers.Nats, config.NatsEventSource{ + ID: providerId, + }) + } + } + for _, kafkaConfig := range ds.GetCustomEvents().GetKafka() { + providerId := kafkaConfig.GetEngineEventConfiguration().GetProviderId() + if _, ok := kafkaSources[providerId]; !ok { + kafkaSources[providerId] = nil + routerEngineConfig.Events.Providers.Kafka = append(routerEngineConfig.Events.Providers.Kafka, config.KafkaEventSource{ + ID: providerId, + }) + } + } + } + var netPollConfig graphql_datasource.NetPollConfiguration netPollConfig.ApplyDefaults() @@ -178,7 +207,7 @@ func (pg *PlanGenerator) loadConfiguration(routerConfig *nodev1.RouterConfig, lo }, logger) // this generates the plan configuration using the data source factories from the config package - planConfig, err := loader.Load(routerConfig.GetEngineConfig(), routerConfig.GetSubgraphs(), &RouterEngineConfiguration{}) + planConfig, err := loader.Load(routerConfig.GetEngineConfig(), routerConfig.GetSubgraphs(), &routerEngineConfig) if err != nil { return fmt.Errorf("failed to load configuration: %w", err) } diff --git a/router/pkg/plan_generator/plan_generator.go b/router/pkg/plan_generator/plan_generator.go index de572d4a08..f0afcc81a2 100644 --- a/router/pkg/plan_generator/plan_generator.go +++ b/router/pkg/plan_generator/plan_generator.go @@ -116,6 +116,7 @@ func PlanGenerator(ctx context.Context, cfg QueryPlanConfig) error { planner, err := pg.GetPlanner() if err != nil { cancelError(fmt.Errorf("failed to get planner: %v", err)) + return } for { select { diff --git a/router/pkg/plan_generator/plan_generator_test.go b/router/pkg/plan_generator/plan_generator_test.go index 3157fa710c..0f6a574522 100644 --- a/router/pkg/plan_generator/plan_generator_test.go +++ b/router/pkg/plan_generator/plan_generator_test.go @@ -11,6 +11,7 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" + "go.uber.org/zap" ) func getTestDataDir() string { @@ -130,6 +131,7 @@ func TestPlanGenerator(t *testing.T) { ExecutionConfig: path.Join(getTestDataDir(), "execution_config", "base.json"), Timeout: "30s", OutputFiles: true, + Logger: zap.NewNop(), } err = PlanGenerator(context.Background(), cfg) diff --git a/router/pkg/pubsub/datasource/datasource.go b/router/pkg/pubsub/datasource/datasource.go index 19b7259e10..f76994b1bd 100644 --- a/router/pkg/pubsub/datasource/datasource.go +++ b/router/pkg/pubsub/datasource/datasource.go @@ -1,18 +1,10 @@ package datasource import ( - "bytes" "context" - "fmt" - "strings" - "github.com/jensneuse/abstractlogger" nodev1 "github.com/wundergraph/cosmo/router/gen/proto/wg/cosmo/node/v1" "github.com/wundergraph/cosmo/router/pkg/config" - "github.com/wundergraph/cosmo/router/pkg/pubsub/utils" - "github.com/wundergraph/graphql-go-tools/v2/pkg/ast" - "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/argument_templates" - "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/datasource/httpclient" "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/plan" "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/resolve" "go.uber.org/zap" @@ -34,6 +26,7 @@ type ArgumentTemplateCallback func(tpl string) (string, error) type PubSubImplementer[F any] interface { PrepareProviders(ctx context.Context, in *nodev1.DataSourceConfiguration, dsMeta *plan.DataSourceMetadata, config config.EventsConfiguration) error + // ConnectProviders(ctx context.Context) error GetFactory(executionContext context.Context, config config.EventsConfiguration) F } @@ -52,248 +45,3 @@ type Implementer[EC EventConfigType, P any] interface { FindEventConfig(eventConfigs []EC, typeName string, fieldName string, fn ArgumentTemplateCallback) (EC, error) GetEventsDataConfigurations() []EC } - -type Planner[EC EventConfigType, P any] struct { - id int - config Implementer[EC, P] - eventsConfig config.EventsConfiguration - eventConfig EC - rootFieldRef int - variables resolve.Variables - visitor *plan.Visitor - providers map[string]P -} - -func (p *Planner[EC, P]) SetID(id int) { - p.id = id -} - -func (p *Planner[EC, P]) ID() (id int) { - return p.id -} - -func (p *Planner[EC, P]) DownstreamResponseFieldAlias(downstreamFieldRef int) (alias string, exists bool) { - // skip, not required - return -} - -func (p *Planner[EC, P]) DataSourcePlanningBehavior() plan.DataSourcePlanningBehavior { - return plan.DataSourcePlanningBehavior{ - MergeAliasedRootNodes: false, - OverrideFieldPathFromAlias: false, - } -} - -func (p *Planner[EC, P]) Register(visitor *plan.Visitor, configuration plan.DataSourceConfiguration[Implementer[EC, P]], _ plan.DataSourcePlannerConfiguration) error { - p.visitor = visitor - visitor.Walker.RegisterEnterFieldVisitor(p) - visitor.Walker.RegisterEnterDocumentVisitor(p) - p.config = configuration.CustomConfiguration() - return nil -} - -func (p *Planner[EC, P]) ConfigureFetch() resolve.FetchConfiguration { - if any(p.eventConfig) == nil { - p.visitor.Walker.StopWithInternalErr(fmt.Errorf("failed to configure fetch: event config is nil")) - return resolve.FetchConfiguration{} - } - - var dataSource resolve.DataSource - providerId := p.config.GetProviderId(p.eventConfig) - pubsub, ok := p.providers[providerId] - if !ok { - p.visitor.Walker.StopWithInternalErr(fmt.Errorf("no pubsub connection exists with provider id \"%s\"", providerId)) - return resolve.FetchConfiguration{} - } - - dataSource, err := p.config.GetResolveDataSource(p.eventConfig, pubsub) - if err != nil { - p.visitor.Walker.StopWithInternalErr(fmt.Errorf("failed to get data source: %w", err)) - return resolve.FetchConfiguration{} - } - - event, err := utils.BuildEventDataBytes(p.rootFieldRef, p.visitor, &p.variables) - if err != nil { - p.visitor.Walker.StopWithInternalErr(fmt.Errorf("failed to get resolve data source input: %w", err)) - return resolve.FetchConfiguration{} - } - - input, err := p.config.GetResolveDataSourceInput(p.eventConfig, event) - if err != nil { - p.visitor.Walker.StopWithInternalErr(fmt.Errorf("failed to get resolve data source input: %w", err)) - return resolve.FetchConfiguration{} - } - - return resolve.FetchConfiguration{ - Input: input, - Variables: p.variables, - DataSource: dataSource, - PostProcessing: resolve.PostProcessingConfiguration{ - MergePath: []string{p.eventConfig.GetEngineEventConfiguration().GetFieldName()}, - }, - } -} - -func (p *Planner[EC, P]) ConfigureSubscription() plan.SubscriptionConfiguration { - if any(p.eventConfig) == nil { - p.visitor.Walker.StopWithInternalErr(fmt.Errorf("failed to configure subscription: event manager is nil")) - return plan.SubscriptionConfiguration{} - } - providerId := p.config.GetProviderId(p.eventConfig) - pubsub, ok := p.providers[providerId] - if !ok { - p.visitor.Walker.StopWithInternalErr(fmt.Errorf("no pubsub connection exists with provider id \"%s\"", providerId)) - return plan.SubscriptionConfiguration{} - } - - dataSource, err := p.config.GetResolveDataSourceSubscription(p.eventConfig, pubsub) - if err != nil { - p.visitor.Walker.StopWithInternalErr(fmt.Errorf("failed to get resolve data source subscription: %w", err)) - return plan.SubscriptionConfiguration{} - } - - input, err := p.config.GetResolveDataSourceSubscriptionInput(p.eventConfig, pubsub) - if err != nil { - p.visitor.Walker.StopWithInternalErr(fmt.Errorf("failed to get resolve data source subscription input: %w", err)) - return plan.SubscriptionConfiguration{} - } - - return plan.SubscriptionConfiguration{ - Input: input, - Variables: p.variables, - DataSource: dataSource, - PostProcessing: resolve.PostProcessingConfiguration{ - MergePath: []string{p.eventConfig.GetEngineEventConfiguration().GetFieldName()}, - }, - } -} - -func (p *Planner[EC, P]) addContextVariableByArgumentRef(argumentRef int, argumentPath []string) (string, error) { - variablePath, err := p.visitor.Operation.VariablePathByArgumentRefAndArgumentPath(argumentRef, argumentPath, p.visitor.Walker.Ancestors[0].Ref) - if err != nil { - return "", err - } - /* The definition is passed as both definition and operation below because getJSONRootType resolves the type - * from the first argument, but finalInputValueTypeRef comes from the definition - */ - contextVariable := &resolve.ContextVariable{ - Path: variablePath, - Renderer: resolve.NewPlainVariableRenderer(), - } - variablePlaceHolder, _ := p.variables.AddVariable(contextVariable) - return variablePlaceHolder, nil -} - -func StringParser(subject string) (string, error) { - matches := argument_templates.ArgumentTemplateRegex.FindAllStringSubmatch(subject, -1) - if len(matches) < 1 { - return subject, nil - } - return "", fmt.Errorf(`subject "%s" is not a valid NATS subject`, subject) -} - -func (p *Planner[EC, P]) extractArgumentTemplate(fieldRef int, template string) (string, error) { - matches := argument_templates.ArgumentTemplateRegex.FindAllStringSubmatch(template, -1) - // If no argument templates are defined, there are only static values - if len(matches) < 1 { - return template, nil - } - fieldNameBytes := p.visitor.Operation.FieldNameBytes(fieldRef) - // TODO: handling for interfaces and unions - fieldDefinitionRef, ok := p.visitor.Definition.ObjectTypeDefinitionFieldWithName(p.visitor.Walker.EnclosingTypeDefinition.Ref, fieldNameBytes) - if !ok { - return "", fmt.Errorf(`expected field definition to exist for field "%s"`, fieldNameBytes) - } - templateWithVariableTemplateReplacements := template - for templateNumber, groups := range matches { - // The first group is the whole template; the second is the period delimited argument path - if len(groups) != 2 { - return "", fmt.Errorf(`argument template #%d defined on field "%s" is invalid: expected 2 matching groups but received %d`, templateNumber+1, fieldNameBytes, len(groups)-1) - } - validationResult, err := argument_templates.ValidateArgumentPath(p.visitor.Definition, groups[1], fieldDefinitionRef) - if err != nil { - return "", fmt.Errorf(`argument template #%d defined on field "%s" is invalid: %w`, templateNumber+1, fieldNameBytes, err) - } - argumentNameBytes := []byte(validationResult.ArgumentPath[0]) - argumentRef, ok := p.visitor.Operation.FieldArgument(fieldRef, argumentNameBytes) - if !ok { - return "", fmt.Errorf(`operation field "%s" does not define argument "%s"`, fieldNameBytes, argumentNameBytes) - } - // variablePlaceholder has the form $$0$$, $$1$$, etc. - variablePlaceholder, err := p.addContextVariableByArgumentRef(argumentRef, validationResult.ArgumentPath) - if err != nil { - return "", fmt.Errorf(`failed to retrieve variable placeholder for argument ""%s" defined on operation field "%s": %w`, argumentNameBytes, fieldNameBytes, err) - } - // Replace the template literal with the variable placeholder (and reuse the variable if it already exists) - templateWithVariableTemplateReplacements = strings.ReplaceAll(templateWithVariableTemplateReplacements, groups[0], variablePlaceholder) - } - - return templateWithVariableTemplateReplacements, nil -} - -func (p *Planner[EC, P]) EnterDocument(_, _ *ast.Document) { - p.rootFieldRef = -1 - var zero EC - p.eventConfig = zero -} - -func (p *Planner[EC, P]) EnterField(ref int) { - if p.rootFieldRef != -1 { - // This is a nested field; nothing needs to be done - return - } - p.rootFieldRef = ref - - fieldName := p.visitor.Operation.FieldNameString(ref) - typeName := p.visitor.Walker.EnclosingTypeDefinition.NameString(p.visitor.Definition) - - extractFn := func(tpl string) (string, error) { - return p.extractArgumentTemplate(ref, tpl) - } - - eventConfigV, err := p.config.FindEventConfig(p.config.GetEventsDataConfigurations(), typeName, fieldName, extractFn) - if err != nil { - return - } - - p.eventConfig = eventConfigV -} - -type Source struct{} - -func (s *Source) Load(ctx context.Context, input []byte, out *bytes.Buffer) (err error) { - _, err = out.Write(input) - return -} - -func (s *Source) LoadWithFiles(ctx context.Context, input []byte, files []*httpclient.FileUpload, out *bytes.Buffer) (err error) { - panic("not implemented") -} - -func NewFactory[EC EventConfigType, P any](executionContext context.Context, config config.EventsConfiguration, providers map[string]P) *Factory[EC, P] { - return &Factory[EC, P]{ - providers: providers, - executionContext: executionContext, - config: config, - } -} - -type Factory[EC EventConfigType, P any] struct { - providers map[string]P - executionContext context.Context - config config.EventsConfiguration -} - -func (f *Factory[EC, P]) Planner(_ abstractlogger.Logger) plan.DataSourcePlanner[Implementer[EC, P]] { - return &Planner[EC, P]{ - providers: f.providers, - } -} - -func (f *Factory[EC, P]) Context() context.Context { - return f.executionContext -} - -func (f *Factory[EC, P]) UpstreamSchema(dataSourceConfig plan.DataSourceConfiguration[Implementer[EC, P]]) (*ast.Document, bool) { - return nil, false -} diff --git a/router/pkg/pubsub/datasource/factory.go b/router/pkg/pubsub/datasource/factory.go new file mode 100644 index 0000000000..498ef93510 --- /dev/null +++ b/router/pkg/pubsub/datasource/factory.go @@ -0,0 +1,38 @@ +package datasource + +import ( + "context" + + "github.com/jensneuse/abstractlogger" + "github.com/wundergraph/cosmo/router/pkg/config" + "github.com/wundergraph/graphql-go-tools/v2/pkg/ast" + "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/plan" +) + +func NewFactory[EC EventConfigType, P any](executionContext context.Context, config config.EventsConfiguration, providers map[string]P) *Factory[EC, P] { + return &Factory[EC, P]{ + providers: providers, + executionContext: executionContext, + config: config, + } +} + +type Factory[EC EventConfigType, P any] struct { + providers map[string]P + executionContext context.Context + config config.EventsConfiguration +} + +func (f *Factory[EC, P]) Planner(_ abstractlogger.Logger) plan.DataSourcePlanner[Implementer[EC, P]] { + return &Planner[EC, P]{ + providers: f.providers, + } +} + +func (f *Factory[EC, P]) Context() context.Context { + return f.executionContext +} + +func (f *Factory[EC, P]) UpstreamSchema(dataSourceConfig plan.DataSourceConfiguration[Implementer[EC, P]]) (*ast.Document, bool) { + return nil, false +} diff --git a/router/pkg/pubsub/datasource/planner.go b/router/pkg/pubsub/datasource/planner.go new file mode 100644 index 0000000000..2929d44813 --- /dev/null +++ b/router/pkg/pubsub/datasource/planner.go @@ -0,0 +1,219 @@ +package datasource + +import ( + "fmt" + "strings" + + "github.com/wundergraph/cosmo/router/pkg/config" + "github.com/wundergraph/cosmo/router/pkg/pubsub/utils" + "github.com/wundergraph/graphql-go-tools/v2/pkg/ast" + "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/argument_templates" + "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/plan" + "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/resolve" +) + +type Planner[EC EventConfigType, P any] struct { + id int + config Implementer[EC, P] + eventsConfig config.EventsConfiguration + eventConfig EC + rootFieldRef int + variables resolve.Variables + visitor *plan.Visitor + providers map[string]P +} + +func (p *Planner[EC, P]) SetID(id int) { + p.id = id +} + +func (p *Planner[EC, P]) ID() (id int) { + return p.id +} + +func (p *Planner[EC, P]) DownstreamResponseFieldAlias(downstreamFieldRef int) (alias string, exists bool) { + // skip, not required + return +} + +func (p *Planner[EC, P]) DataSourcePlanningBehavior() plan.DataSourcePlanningBehavior { + return plan.DataSourcePlanningBehavior{ + MergeAliasedRootNodes: false, + OverrideFieldPathFromAlias: false, + } +} + +func (p *Planner[EC, P]) Register(visitor *plan.Visitor, configuration plan.DataSourceConfiguration[Implementer[EC, P]], _ plan.DataSourcePlannerConfiguration) error { + p.visitor = visitor + visitor.Walker.RegisterEnterFieldVisitor(p) + visitor.Walker.RegisterEnterDocumentVisitor(p) + p.config = configuration.CustomConfiguration() + return nil +} + +func (p *Planner[EC, P]) ConfigureFetch() resolve.FetchConfiguration { + if any(p.eventConfig) == nil { + p.visitor.Walker.StopWithInternalErr(fmt.Errorf("failed to configure fetch: event config is nil")) + return resolve.FetchConfiguration{} + } + + var dataSource resolve.DataSource + providerId := p.config.GetProviderId(p.eventConfig) + pubsub, ok := p.providers[providerId] + if !ok { + p.visitor.Walker.StopWithInternalErr(fmt.Errorf("no pubsub connection exists with provider id \"%s\"", providerId)) + return resolve.FetchConfiguration{} + } + + dataSource, err := p.config.GetResolveDataSource(p.eventConfig, pubsub) + if err != nil { + p.visitor.Walker.StopWithInternalErr(fmt.Errorf("failed to get data source: %w", err)) + return resolve.FetchConfiguration{} + } + + event, err := utils.BuildEventDataBytes(p.rootFieldRef, p.visitor, &p.variables) + if err != nil { + p.visitor.Walker.StopWithInternalErr(fmt.Errorf("failed to get resolve data source input: %w", err)) + return resolve.FetchConfiguration{} + } + + input, err := p.config.GetResolveDataSourceInput(p.eventConfig, event) + if err != nil { + p.visitor.Walker.StopWithInternalErr(fmt.Errorf("failed to get resolve data source input: %w", err)) + return resolve.FetchConfiguration{} + } + + return resolve.FetchConfiguration{ + Input: input, + Variables: p.variables, + DataSource: dataSource, + PostProcessing: resolve.PostProcessingConfiguration{ + MergePath: []string{p.eventConfig.GetEngineEventConfiguration().GetFieldName()}, + }, + } +} + +func (p *Planner[EC, P]) ConfigureSubscription() plan.SubscriptionConfiguration { + if any(p.eventConfig) == nil { + p.visitor.Walker.StopWithInternalErr(fmt.Errorf("failed to configure subscription: event manager is nil")) + return plan.SubscriptionConfiguration{} + } + providerId := p.config.GetProviderId(p.eventConfig) + pubsub, ok := p.providers[providerId] + if !ok { + p.visitor.Walker.StopWithInternalErr(fmt.Errorf("no pubsub connection exists with provider id \"%s\"", providerId)) + return plan.SubscriptionConfiguration{} + } + + dataSource, err := p.config.GetResolveDataSourceSubscription(p.eventConfig, pubsub) + if err != nil { + p.visitor.Walker.StopWithInternalErr(fmt.Errorf("failed to get resolve data source subscription: %w", err)) + return plan.SubscriptionConfiguration{} + } + + input, err := p.config.GetResolveDataSourceSubscriptionInput(p.eventConfig, pubsub) + if err != nil { + p.visitor.Walker.StopWithInternalErr(fmt.Errorf("failed to get resolve data source subscription input: %w", err)) + return plan.SubscriptionConfiguration{} + } + + return plan.SubscriptionConfiguration{ + Input: input, + Variables: p.variables, + DataSource: dataSource, + PostProcessing: resolve.PostProcessingConfiguration{ + MergePath: []string{p.eventConfig.GetEngineEventConfiguration().GetFieldName()}, + }, + } +} + +func (p *Planner[EC, P]) addContextVariableByArgumentRef(argumentRef int, argumentPath []string) (string, error) { + variablePath, err := p.visitor.Operation.VariablePathByArgumentRefAndArgumentPath(argumentRef, argumentPath, p.visitor.Walker.Ancestors[0].Ref) + if err != nil { + return "", err + } + /* The definition is passed as both definition and operation below because getJSONRootType resolves the type + * from the first argument, but finalInputValueTypeRef comes from the definition + */ + contextVariable := &resolve.ContextVariable{ + Path: variablePath, + Renderer: resolve.NewPlainVariableRenderer(), + } + variablePlaceHolder, _ := p.variables.AddVariable(contextVariable) + return variablePlaceHolder, nil +} + +func StringParser(subject string) (string, error) { + matches := argument_templates.ArgumentTemplateRegex.FindAllStringSubmatch(subject, -1) + if len(matches) < 1 { + return subject, nil + } + return "", fmt.Errorf(`subject "%s" is not a valid NATS subject`, subject) +} + +func (p *Planner[EC, P]) extractArgumentTemplate(fieldRef int, template string) (string, error) { + matches := argument_templates.ArgumentTemplateRegex.FindAllStringSubmatch(template, -1) + // If no argument templates are defined, there are only static values + if len(matches) < 1 { + return template, nil + } + fieldNameBytes := p.visitor.Operation.FieldNameBytes(fieldRef) + // TODO: handling for interfaces and unions + fieldDefinitionRef, ok := p.visitor.Definition.ObjectTypeDefinitionFieldWithName(p.visitor.Walker.EnclosingTypeDefinition.Ref, fieldNameBytes) + if !ok { + return "", fmt.Errorf(`expected field definition to exist for field "%s"`, fieldNameBytes) + } + templateWithVariableTemplateReplacements := template + for templateNumber, groups := range matches { + // The first group is the whole template; the second is the period delimited argument path + if len(groups) != 2 { + return "", fmt.Errorf(`argument template #%d defined on field "%s" is invalid: expected 2 matching groups but received %d`, templateNumber+1, fieldNameBytes, len(groups)-1) + } + validationResult, err := argument_templates.ValidateArgumentPath(p.visitor.Definition, groups[1], fieldDefinitionRef) + if err != nil { + return "", fmt.Errorf(`argument template #%d defined on field "%s" is invalid: %w`, templateNumber+1, fieldNameBytes, err) + } + argumentNameBytes := []byte(validationResult.ArgumentPath[0]) + argumentRef, ok := p.visitor.Operation.FieldArgument(fieldRef, argumentNameBytes) + if !ok { + return "", fmt.Errorf(`operation field "%s" does not define argument "%s"`, fieldNameBytes, argumentNameBytes) + } + // variablePlaceholder has the form $$0$$, $$1$$, etc. + variablePlaceholder, err := p.addContextVariableByArgumentRef(argumentRef, validationResult.ArgumentPath) + if err != nil { + return "", fmt.Errorf(`failed to retrieve variable placeholder for argument ""%s" defined on operation field "%s": %w`, argumentNameBytes, fieldNameBytes, err) + } + // Replace the template literal with the variable placeholder (and reuse the variable if it already exists) + templateWithVariableTemplateReplacements = strings.ReplaceAll(templateWithVariableTemplateReplacements, groups[0], variablePlaceholder) + } + + return templateWithVariableTemplateReplacements, nil +} + +func (p *Planner[EC, P]) EnterDocument(_, _ *ast.Document) { + p.rootFieldRef = -1 + var zero EC + p.eventConfig = zero +} + +func (p *Planner[EC, P]) EnterField(ref int) { + if p.rootFieldRef != -1 { + // This is a nested field; nothing needs to be done + return + } + p.rootFieldRef = ref + + fieldName := p.visitor.Operation.FieldNameString(ref) + typeName := p.visitor.Walker.EnclosingTypeDefinition.NameString(p.visitor.Definition) + + extractFn := func(tpl string) (string, error) { + return p.extractArgumentTemplate(ref, tpl) + } + + eventConfigV, err := p.config.FindEventConfig(p.config.GetEventsDataConfigurations(), typeName, fieldName, extractFn) + if err != nil { + return + } + + p.eventConfig = eventConfigV +} diff --git a/router/pkg/pubsub/kafka/datasource.go b/router/pkg/pubsub/kafka/datasource.go index e242828d2a..2f789b12bb 100644 --- a/router/pkg/pubsub/kafka/datasource.go +++ b/router/pkg/pubsub/kafka/datasource.go @@ -3,7 +3,6 @@ package kafka import ( "context" "crypto/tls" - "encoding/json" "fmt" "time" @@ -15,7 +14,6 @@ import ( "go.uber.org/zap" "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/plan" - "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/resolve" ) func GetPlanDataSource(ctx context.Context, in *nodev1.DataSourceConfiguration, dsMeta *plan.DataSourceMetadata, config config.EventsConfiguration, logger *zap.Logger) (plan.DataSource, error) { @@ -26,8 +24,8 @@ func GetPlanDataSource(ctx context.Context, in *nodev1.DataSourceConfiguration, return nil, err } factory := k.GetFactory(ctx, config) - ds, err := plan.NewDataSourceConfiguration[datasource.Implementer[*nodev1.KafkaEventConfiguration, *kafkaPubSub]]( - in.Id, + ds, err := plan.NewDataSourceConfiguration[datasource.Implementer[*nodev1.KafkaEventConfiguration, *KafkaPubSub]]( + in.Id+"-kafka", factory, dsMeta, &Configuration{ @@ -50,9 +48,11 @@ func init() { datasource.RegisterPubSub(GetPlanDataSource) } +// var _ datasource.PubSubImplementer[*KafkaPubSub] = &Kafka{} + type Kafka struct { logger *zap.Logger - providers map[string]*kafkaPubSub + providers map[string]*KafkaPubSub } // buildKafkaOptions creates a list of kgo.Opt options for the given Kafka event source configuration. @@ -112,91 +112,23 @@ func (k *Kafka) PrepareProviders(ctx context.Context, in *nodev1.DataSourceConfi return nil } -func (k *Kafka) GetFactory(executionContext context.Context, config config.EventsConfiguration) *datasource.Factory[*nodev1.KafkaEventConfiguration, *kafkaPubSub] { +// func (k *Kafka) ConnectProviders(ctx context.Context) error { +// for _, provider := range k.providers { +// err := provider.Connect() +// if err != nil { +// return fmt.Errorf("failed to connect to Kafka provider with ID \"%s\": %w", provider.ID, err) +// } +// } +// return nil +// } + +func (k *Kafka) GetFactory(executionContext context.Context, config config.EventsConfiguration) *datasource.Factory[*nodev1.KafkaEventConfiguration, *KafkaPubSub] { return datasource.NewFactory[*nodev1.KafkaEventConfiguration](executionContext, config, k.providers) } func NewPubSub(logger *zap.Logger) Kafka { return Kafka{ - providers: map[string]*kafkaPubSub{}, + providers: map[string]*KafkaPubSub{}, logger: logger, } } - -type Configuration struct { - Data string `json:"data"` - EventConfiguration []*nodev1.KafkaEventConfiguration - Logger *zap.Logger -} - -func (c *Configuration) GetEventsDataConfigurations() []*nodev1.KafkaEventConfiguration { - return c.EventConfiguration -} - -func (c *Configuration) GetResolveDataSource(eventConfig *nodev1.KafkaEventConfiguration, pubsub *kafkaPubSub) (resolve.DataSource, error) { - var dataSource resolve.DataSource - - typeName := eventConfig.GetEngineEventConfiguration().GetType() - switch typeName { - case nodev1.EventType_PUBLISH: - dataSource = &KafkaPublishDataSource{ - pubSub: pubsub, - } - default: - return nil, fmt.Errorf("failed to configure fetch: invalid event type \"%s\" for Kafka", typeName.String()) - } - - return dataSource, nil -} - -func (c *Configuration) GetResolveDataSourceSubscription(eventConfig *nodev1.KafkaEventConfiguration, pubsub *kafkaPubSub) (resolve.SubscriptionDataSource, error) { - return &SubscriptionSource{ - pubSub: pubsub, - }, nil -} - -func (c *Configuration) GetResolveDataSourceSubscriptionInput(eventConfig *nodev1.KafkaEventConfiguration, pubsub *kafkaPubSub) (string, error) { - providerId := c.GetProviderId(eventConfig) - evtCfg := SubscriptionEventConfiguration{ - ProviderID: providerId, - Topics: eventConfig.GetTopics(), - } - object, err := json.Marshal(evtCfg) - if err != nil { - return "", fmt.Errorf("failed to marshal event subscription streamConfiguration") - } - return string(object), nil -} - -func (c *Configuration) GetResolveDataSourceInput(eventConfig *nodev1.KafkaEventConfiguration, event []byte) (string, error) { - topics := eventConfig.GetTopics() - - if len(topics) != 1 { - return "", fmt.Errorf("publish and request events should define one topic but received %d", len(topics)) - } - - topic := topics[0] - - providerId := c.GetProviderId(eventConfig) - - evtCfg := PublishEventConfiguration{ - ProviderID: providerId, - Topic: topic, - Data: event, - } - - return evtCfg.MarshalJSONTemplate(), nil -} - -func (c *Configuration) GetProviderId(eventConfig *nodev1.KafkaEventConfiguration) string { - return eventConfig.GetEngineEventConfiguration().GetProviderId() -} - -func (c *Configuration) FindEventConfig(eventConfigs []*nodev1.KafkaEventConfiguration, typeName string, fieldName string, fn datasource.ArgumentTemplateCallback) (*nodev1.KafkaEventConfiguration, error) { - for _, cfg := range eventConfigs { - if cfg.GetEngineEventConfiguration().GetTypeName() == typeName && cfg.GetEngineEventConfiguration().GetFieldName() == fieldName { - return cfg, nil - } - } - return nil, fmt.Errorf("failed to find event config for type name \"%s\" and field name \"%s\"", typeName, fieldName) -} diff --git a/router/pkg/pubsub/kafka/datasource_impl.go b/router/pkg/pubsub/kafka/datasource_impl.go new file mode 100644 index 0000000000..2828987f97 --- /dev/null +++ b/router/pkg/pubsub/kafka/datasource_impl.go @@ -0,0 +1,89 @@ +package kafka + +import ( + "encoding/json" + "fmt" + + nodev1 "github.com/wundergraph/cosmo/router/gen/proto/wg/cosmo/node/v1" + "github.com/wundergraph/cosmo/router/pkg/pubsub/datasource" + "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/resolve" + "go.uber.org/zap" +) + +type Configuration struct { + Data string `json:"data"` + EventConfiguration []*nodev1.KafkaEventConfiguration + Logger *zap.Logger +} + +func (c *Configuration) GetEventsDataConfigurations() []*nodev1.KafkaEventConfiguration { + return c.EventConfiguration +} + +func (c *Configuration) GetResolveDataSource(eventConfig *nodev1.KafkaEventConfiguration, pubsub *KafkaPubSub) (resolve.DataSource, error) { + var dataSource resolve.DataSource + + typeName := eventConfig.GetEngineEventConfiguration().GetType() + switch typeName { + case nodev1.EventType_PUBLISH: + dataSource = &KafkaPublishDataSource{ + pubSub: pubsub, + } + default: + return nil, fmt.Errorf("failed to configure fetch: invalid event type \"%s\" for Kafka", typeName.String()) + } + + return dataSource, nil +} + +func (c *Configuration) GetResolveDataSourceSubscription(eventConfig *nodev1.KafkaEventConfiguration, pubsub *KafkaPubSub) (resolve.SubscriptionDataSource, error) { + return &SubscriptionSource{ + pubSub: pubsub, + }, nil +} + +func (c *Configuration) GetResolveDataSourceSubscriptionInput(eventConfig *nodev1.KafkaEventConfiguration, pubsub *KafkaPubSub) (string, error) { + providerId := c.GetProviderId(eventConfig) + evtCfg := SubscriptionEventConfiguration{ + ProviderID: providerId, + Topics: eventConfig.GetTopics(), + } + object, err := json.Marshal(evtCfg) + if err != nil { + return "", fmt.Errorf("failed to marshal event subscription streamConfiguration") + } + return string(object), nil +} + +func (c *Configuration) GetResolveDataSourceInput(eventConfig *nodev1.KafkaEventConfiguration, event []byte) (string, error) { + topics := eventConfig.GetTopics() + + if len(topics) != 1 { + return "", fmt.Errorf("publish and request events should define one topic but received %d", len(topics)) + } + + topic := topics[0] + + providerId := c.GetProviderId(eventConfig) + + evtCfg := PublishEventConfiguration{ + ProviderID: providerId, + Topic: topic, + Data: event, + } + + return evtCfg.MarshalJSONTemplate(), nil +} + +func (c *Configuration) GetProviderId(eventConfig *nodev1.KafkaEventConfiguration) string { + return eventConfig.GetEngineEventConfiguration().GetProviderId() +} + +func (c *Configuration) FindEventConfig(eventConfigs []*nodev1.KafkaEventConfiguration, typeName string, fieldName string, fn datasource.ArgumentTemplateCallback) (*nodev1.KafkaEventConfiguration, error) { + for _, cfg := range eventConfigs { + if cfg.GetEngineEventConfiguration().GetTypeName() == typeName && cfg.GetEngineEventConfiguration().GetFieldName() == fieldName { + return cfg, nil + } + } + return nil, fmt.Errorf("failed to find event config for type name \"%s\" and field name \"%s\"", typeName, fieldName) +} diff --git a/router/pkg/pubsub/kafka/kafka.go b/router/pkg/pubsub/kafka/kafka.go index 6a9260342a..a897ac245b 100644 --- a/router/pkg/pubsub/kafka/kafka.go +++ b/router/pkg/pubsub/kafka/kafka.go @@ -20,19 +20,46 @@ var ( ) type connector struct { - writeClient *kgo.Client + writeClient *LazyClient opts []kgo.Opt logger *zap.Logger } +type LazyClient struct { + once sync.Once + client *kgo.Client + opts []kgo.Opt +} + +func (c *LazyClient) Connect() (err error) { + c.once.Do(func() { + c.client, err = kgo.NewClient(append(c.opts, + // For observability, we set the client ID to "router" + kgo.ClientID("cosmo.router.producer"))..., + ) + }) + + return +} + +func (c *LazyClient) GetClient() *kgo.Client { + if c.client == nil { + c.Connect() + } + return c.client +} + +func NewLazyClient(opts ...kgo.Opt) *LazyClient { + return &LazyClient{ + opts: opts, + } +} + func NewConnector(logger *zap.Logger, opts []kgo.Opt) (*connector, error) { - writeClient, err := kgo.NewClient(append(opts, + writeClient := NewLazyClient(append(opts, // For observability, we set the client ID to "router" kgo.ClientID("cosmo.router.producer"))..., ) - if err != nil { - return nil, fmt.Errorf("failed to create write client for Kafka: %w", err) - } return &connector{ writeClient: writeClient, @@ -41,11 +68,15 @@ func NewConnector(logger *zap.Logger, opts []kgo.Opt) (*connector, error) { }, nil } -func (c *connector) New(ctx context.Context) *kafkaPubSub { +func (c *connector) New(ctx context.Context) *KafkaPubSub { ctx, cancel := context.WithCancel(ctx) - ps := &kafkaPubSub{ + if c.logger == nil { + c.logger = zap.NewNop() + } + + ps := &KafkaPubSub{ ctx: ctx, logger: c.logger.With(zap.String("pubsub", "kafka")), opts: c.opts, @@ -57,22 +88,22 @@ func (c *connector) New(ctx context.Context) *kafkaPubSub { return ps } -// kafkaPubSub is a Kafka pubsub implementation. +// KafkaPubSub is a Kafka pubsub implementation. // It uses the franz-go Kafka client to consume and produce messages. // The pubsub is stateless and does not store any messages. // It uses a single write client to produce messages and a client per topic to consume messages. // Each client polls the Kafka topic for new records and updates the subscriptions with the new data. -type kafkaPubSub struct { +type KafkaPubSub struct { ctx context.Context opts []kgo.Opt logger *zap.Logger - writeClient *kgo.Client + writeClient *LazyClient closeWg sync.WaitGroup cancel context.CancelFunc } // topicPoller polls the Kafka topic for new records and calls the updateTriggers function. -func (p *kafkaPubSub) topicPoller(ctx context.Context, client *kgo.Client, updater resolve.SubscriptionUpdater) error { +func (p *KafkaPubSub) topicPoller(ctx context.Context, client *kgo.Client, updater resolve.SubscriptionUpdater) error { for { select { case <-p.ctx.Done(): // Close the poller if the application context was canceled @@ -126,7 +157,7 @@ func (p *kafkaPubSub) topicPoller(ctx context.Context, client *kgo.Client, updat // Subscribe subscribes to the given topics and updates the subscription updater. // The engine already deduplicates subscriptions with the same topics, stream configuration, extensions, headers, etc. -func (p *kafkaPubSub) Subscribe(ctx context.Context, event SubscriptionEventConfiguration, updater resolve.SubscriptionUpdater) error { +func (p *KafkaPubSub) Subscribe(ctx context.Context, event SubscriptionEventConfiguration, updater resolve.SubscriptionUpdater) error { log := p.logger.With( zap.String("provider_id", event.ProviderID), @@ -143,6 +174,9 @@ func (p *kafkaPubSub) Subscribe(ctx context.Context, event SubscriptionEventConf kgo.ConsumeResetOffset(kgo.NewOffset().AfterMilli(time.Now().UnixMilli())), // For observability, we set the client ID to "router" kgo.ClientID(fmt.Sprintf("cosmo.router.consumer.%s", strings.Join(event.Topics, "-"))), + // FIXME: the client id should have some unique identifier, like in nats + // What if we have multiple subscriptions for the same topics? + // What if we have more router instances? )...) if err != nil { log.Error("failed to create client", zap.Error(err)) @@ -173,7 +207,7 @@ func (p *kafkaPubSub) Subscribe(ctx context.Context, event SubscriptionEventConf // Publish publishes the given event to the Kafka topic in a non-blocking way. // Publish errors are logged and returned as a pubsub error. // The event is written with a dedicated write client. -func (p *kafkaPubSub) Publish(ctx context.Context, event PublishEventConfiguration) error { +func (p *KafkaPubSub) Publish(ctx context.Context, event PublishEventConfiguration) error { log := p.logger.With( zap.String("provider_id", event.ProviderID), zap.String("method", "publish"), @@ -187,7 +221,7 @@ func (p *kafkaPubSub) Publish(ctx context.Context, event PublishEventConfigurati var pErr error - p.writeClient.Produce(ctx, &kgo.Record{ + p.writeClient.GetClient().Produce(ctx, &kgo.Record{ Topic: event.Topic, Value: event.Data, }, func(record *kgo.Record, err error) { @@ -207,14 +241,14 @@ func (p *kafkaPubSub) Publish(ctx context.Context, event PublishEventConfigurati return nil } -func (p *kafkaPubSub) Shutdown(ctx context.Context) error { +func (p *KafkaPubSub) Shutdown(ctx context.Context) error { - err := p.writeClient.Flush(ctx) + err := p.writeClient.GetClient().Flush(ctx) if err != nil { p.logger.Error("error flushing write client", zap.Error(err)) } - p.writeClient.Close() + p.writeClient.GetClient().Close() // Cancel the context to stop all pollers p.cancel() diff --git a/router/pkg/pubsub/kafka/subscription_datasource.go b/router/pkg/pubsub/kafka/subscription_datasource.go index 70623170cf..0cdc230e87 100644 --- a/router/pkg/pubsub/kafka/subscription_datasource.go +++ b/router/pkg/pubsub/kafka/subscription_datasource.go @@ -29,7 +29,7 @@ func (s *PublishEventConfiguration) MarshalJSONTemplate() string { } type SubscriptionSource struct { - pubSub *kafkaPubSub + pubSub *KafkaPubSub } func (s *SubscriptionSource) UniqueRequestID(ctx *resolve.Context, input []byte, xxh *xxhash.Digest) error { @@ -63,7 +63,7 @@ func (s *SubscriptionSource) Start(ctx *resolve.Context, input []byte, updater r } type KafkaPublishDataSource struct { - pubSub *kafkaPubSub + pubSub *KafkaPubSub } func (s *KafkaPublishDataSource) Load(ctx context.Context, input []byte, out *bytes.Buffer) error { diff --git a/router/pkg/pubsub/nats/datasource.go b/router/pkg/pubsub/nats/datasource.go index f970e3be9b..b8de491ae7 100644 --- a/router/pkg/pubsub/nats/datasource.go +++ b/router/pkg/pubsub/nats/datasource.go @@ -8,6 +8,7 @@ import ( "regexp" "slices" "strings" + "sync" "time" "github.com/nats-io/nats.go" @@ -40,7 +41,7 @@ func GetDataSource(ctx context.Context, in *nodev1.DataSourceConfiguration, dsMe } factory := k.GetFactory(ctx, config, k.providers) ds, err := plan.NewDataSourceConfiguration[datasource.Implementer[*nodev1.NatsEventConfiguration, *NatsPubSub]]( - in.Id, + in.Id+"-nats", factory, dsMeta, &Configuration{ @@ -114,6 +115,46 @@ type Nats struct { routerListenAddr string // How to get it here? } +type LazyClient struct { + once sync.Once + url string + opts []nats.Option + client *nats.Conn + js jetstream.JetStream +} + +func (c *LazyClient) Connect(opts ...nats.Option) (err error) { + c.once.Do(func() { + c.client, err = nats.Connect(c.url, opts...) + if err != nil { + return + } + c.js, err = jetstream.New(c.client) + }) + return +} + +func (c *LazyClient) GetClient() *nats.Conn { + if c.client == nil { + c.Connect() + } + return c.client +} + +func (c *LazyClient) GetJetStream() jetstream.JetStream { + if c.js == nil { + c.Connect() + } + return c.js +} + +func NewLazyClient(url string, opts ...nats.Option) *LazyClient { + return &LazyClient{ + url: url, + opts: opts, + } +} + func (n *Nats) PrepareProviders(ctx context.Context, in *nodev1.DataSourceConfiguration, dsMeta *plan.DataSourceMetadata, config config.EventsConfiguration) error { definedProviders := make(map[string]bool) for _, provider := range config.Providers.Nats { @@ -135,16 +176,8 @@ func (n *Nats) PrepareProviders(ctx context.Context, in *nodev1.DataSourceConfig if err != nil { return fmt.Errorf("failed to build options for Nats provider with ID \"%s\": %w", provider.ID, err) } - natsConnection, err := nats.Connect(provider.URL, options...) - if err != nil { - return fmt.Errorf("failed to create connection for Nats provider with ID \"%s\": %w", provider.ID, err) - } - js, err := jetstream.New(natsConnection) - if err != nil { - return err - } - n.providers[provider.ID] = NewConnector(n.logger, natsConnection, js, n.hostName, n.routerListenAddr).New(ctx) + n.providers[provider.ID] = NewConnector(n.logger, provider.URL, options, n.hostName, n.routerListenAddr).New(ctx) } return nil } @@ -177,10 +210,14 @@ func (c *Configuration) GetResolveDataSource(eventConfig *nodev1.NatsEventConfig typeName := eventConfig.GetEngineEventConfiguration().GetType() switch typeName { - case nodev1.EventType_PUBLISH, nodev1.EventType_REQUEST: + case nodev1.EventType_PUBLISH: dataSource = &NatsPublishDataSource{ pubSub: pubsub, } + case nodev1.EventType_REQUEST: + dataSource = &NatsRequestDataSource{ + pubSub: pubsub, + } default: return nil, fmt.Errorf("failed to configure fetch: invalid event type \"%s\" for Nats", typeName.String()) } diff --git a/router/pkg/pubsub/nats/nats.go b/router/pkg/pubsub/nats/nats.go index 3528803379..e57df681ad 100644 --- a/router/pkg/pubsub/nats/nats.go +++ b/router/pkg/pubsub/nats/nats.go @@ -17,28 +17,29 @@ import ( ) type connector struct { - conn *nats.Conn + client *LazyClient logger *zap.Logger - js jetstream.JetStream hostName string routerListenAddr string } -func NewConnector(logger *zap.Logger, conn *nats.Conn, js jetstream.JetStream, hostName string, routerListenAddr string) *connector { +func NewConnector(logger *zap.Logger, url string, opts []nats.Option, hostName string, routerListenAddr string) *connector { + client := NewLazyClient(url, opts...) return &connector{ - conn: conn, + client: client, logger: logger, - js: js, hostName: hostName, routerListenAddr: routerListenAddr, } } func (c *connector) New(ctx context.Context) *NatsPubSub { + if c.logger == nil { + c.logger = zap.NewNop() + } return &NatsPubSub{ ctx: ctx, - conn: c.conn, - js: c.js, + client: c.client, logger: c.logger.With(zap.String("pubsub", "nats")), closeWg: sync.WaitGroup{}, hostName: c.hostName, @@ -48,9 +49,8 @@ func (c *connector) New(ctx context.Context) *NatsPubSub { type NatsPubSub struct { ctx context.Context - conn *nats.Conn + client *LazyClient logger *zap.Logger - js jetstream.JetStream closeWg sync.WaitGroup hostName string routerListenAddr string @@ -104,7 +104,7 @@ func (p *NatsPubSub) Subscribe(ctx context.Context, event SubscriptionEventConfi if event.StreamConfiguration.ConsumerInactiveThreshold > 0 { consumerConfig.InactiveThreshold = time.Duration(event.StreamConfiguration.ConsumerInactiveThreshold) * time.Second } - consumer, err := p.js.CreateOrUpdateConsumer(ctx, event.StreamConfiguration.StreamName, consumerConfig) + consumer, err := p.client.GetJetStream().CreateOrUpdateConsumer(ctx, event.StreamConfiguration.StreamName, consumerConfig) if err != nil { log.Error("error creating or updating consumer", zap.Error(err)) return datasource.NewError(fmt.Sprintf(`failed to create or update consumer for stream "%s"`, event.StreamConfiguration.StreamName), err) @@ -155,7 +155,7 @@ func (p *NatsPubSub) Subscribe(ctx context.Context, event SubscriptionEventConfi msgChan := make(chan *nats.Msg) subscriptions := make([]*nats.Subscription, len(event.Subjects)) for i, subject := range event.Subjects { - subscription, err := p.conn.ChanSubscribe(subject, msgChan) + subscription, err := p.client.GetClient().ChanSubscribe(subject, msgChan) if err != nil { log.Error("error subscribing to NATS subject", zap.Error(err), zap.String("subscription_subject", subject)) return datasource.NewError(fmt.Sprintf(`failed to subscribe to NATS subject "%s"`, subject), err) @@ -209,7 +209,7 @@ func (p *NatsPubSub) Publish(_ context.Context, event PublishAndRequestEventConf log.Debug("publish", zap.ByteString("data", event.Data)) - err := p.conn.Publish(event.Subject, event.Data) + err := p.client.GetClient().Publish(event.Subject, event.Data) if err != nil { log.Error("publish error", zap.Error(err)) return datasource.NewError(fmt.Sprintf("error publishing to NATS subject %s", event.Subject), err) @@ -227,7 +227,7 @@ func (p *NatsPubSub) Request(ctx context.Context, event PublishAndRequestEventCo log.Debug("request", zap.ByteString("data", event.Data)) - msg, err := p.conn.RequestWithContext(ctx, event.Subject, event.Data) + msg, err := p.client.GetClient().RequestWithContext(ctx, event.Subject, event.Data) if err != nil { log.Error("request error", zap.Error(err)) return datasource.NewError(fmt.Sprintf("error requesting from NATS subject %s", event.Subject), err) @@ -243,12 +243,12 @@ func (p *NatsPubSub) Request(ctx context.Context, event PublishAndRequestEventCo } func (p *NatsPubSub) flush(ctx context.Context) error { - return p.conn.FlushWithContext(ctx) + return p.client.GetClient().FlushWithContext(ctx) } func (p *NatsPubSub) Shutdown(ctx context.Context) error { - if p.conn.IsClosed() { + if p.client.GetClient().IsClosed() { return nil } @@ -260,7 +260,7 @@ func (p *NatsPubSub) Shutdown(ctx context.Context) error { err = errors.Join(err, fErr) } - drainErr := p.conn.Drain() + drainErr := p.client.GetClient().Drain() if drainErr != nil { p.logger.Error("error draining NATS connection", zap.Error(drainErr)) } From 33603e88b3c57dfbad778699d892d345e6f7dee7 Mon Sep 17 00:00:00 2001 From: Alessandro Pagnin Date: Mon, 24 Mar 2025 19:05:46 +0100 Subject: [PATCH 008/126] refactor(pubsub): remove unused variables and comments in datasource and planner files, enhance NATS subject validation --- router/pkg/pubsub/datasource/datasource.go | 2 -- router/pkg/pubsub/datasource/planner.go | 2 -- router/pkg/pubsub/nats/datasource.go | 15 ++++++--------- 3 files changed, 6 insertions(+), 13 deletions(-) diff --git a/router/pkg/pubsub/datasource/datasource.go b/router/pkg/pubsub/datasource/datasource.go index f76994b1bd..cc355dfeae 100644 --- a/router/pkg/pubsub/datasource/datasource.go +++ b/router/pkg/pubsub/datasource/datasource.go @@ -26,7 +26,6 @@ type ArgumentTemplateCallback func(tpl string) (string, error) type PubSubImplementer[F any] interface { PrepareProviders(ctx context.Context, in *nodev1.DataSourceConfiguration, dsMeta *plan.DataSourceMetadata, config config.EventsConfiguration) error - // ConnectProviders(ctx context.Context) error GetFactory(executionContext context.Context, config config.EventsConfiguration) F } @@ -39,7 +38,6 @@ type Implementer[EC EventConfigType, P any] interface { GetResolveDataSource(eventConfig EC, pubsub P) (resolve.DataSource, error) GetResolveDataSourceSubscription(eventConfig EC, pubsub P) (resolve.SubscriptionDataSource, error) GetResolveDataSourceSubscriptionInput(eventConfig EC, pubsub P) (string, error) - //GetResolveDataSourceInput(eventConfig EC, ref int, visitor *plan.Visitor, variables *resolve.Variables) (string, error) GetResolveDataSourceInput(eventConfig EC, event []byte) (string, error) GetProviderId(eventConfig EC) string FindEventConfig(eventConfigs []EC, typeName string, fieldName string, fn ArgumentTemplateCallback) (EC, error) diff --git a/router/pkg/pubsub/datasource/planner.go b/router/pkg/pubsub/datasource/planner.go index 2929d44813..756ba996ce 100644 --- a/router/pkg/pubsub/datasource/planner.go +++ b/router/pkg/pubsub/datasource/planner.go @@ -4,7 +4,6 @@ import ( "fmt" "strings" - "github.com/wundergraph/cosmo/router/pkg/config" "github.com/wundergraph/cosmo/router/pkg/pubsub/utils" "github.com/wundergraph/graphql-go-tools/v2/pkg/ast" "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/argument_templates" @@ -15,7 +14,6 @@ import ( type Planner[EC EventConfigType, P any] struct { id int config Implementer[EC, P] - eventsConfig config.EventsConfiguration eventConfig EC rootFieldRef int variables resolve.Variables diff --git a/router/pkg/pubsub/nats/datasource.go b/router/pkg/pubsub/nats/datasource.go index b8de491ae7..701271ae67 100644 --- a/router/pkg/pubsub/nats/datasource.go +++ b/router/pkg/pubsub/nats/datasource.go @@ -5,7 +5,6 @@ import ( "encoding/json" "errors" "fmt" - "regexp" "slices" "strings" "sync" @@ -27,11 +26,6 @@ const ( tsep = "." ) -// A variable template has form $$number$$ where the number can range from one to multiple digits -var ( - variableTemplateRegex = regexp.MustCompile(`\$\$\d+\$\$`) -) - func GetDataSource(ctx context.Context, in *nodev1.DataSourceConfiguration, dsMeta *plan.DataSourceMetadata, config config.EventsConfiguration, logger *zap.Logger) (plan.DataSource, error) { if natsData := in.GetCustomEvents().GetNats(); natsData != nil { k := NewPubSub(logger) @@ -196,9 +190,6 @@ type Configuration struct { Data string `json:"data"` EventConfiguration []*nodev1.NatsEventConfiguration Logger *zap.Logger - requestConfig *PublishAndRequestEventConfiguration - publishConfig *PublishAndRequestEventConfiguration - subscribeConfig *SubscriptionEventConfiguration } func (c *Configuration) GetEventsDataConfigurations() []*nodev1.NatsEventConfiguration { @@ -283,6 +274,9 @@ func (c *Configuration) transformEventConfig(cfg *nodev1.NatsEventConfiguration, if err != nil { return cfg, fmt.Errorf("unable to parse subject with id %s", cfg.GetSubjects()[0]) } + if !isValidNatsSubject(extractedSubject) { + return cfg, fmt.Errorf("invalid subject: %s", extractedSubject) + } cfg.Subjects = []string{extractedSubject} case nodev1.EventType_SUBSCRIBE: extractedSubjects := make([]string, 0, len(cfg.Subjects)) @@ -291,6 +285,9 @@ func (c *Configuration) transformEventConfig(cfg *nodev1.NatsEventConfiguration, if err != nil { return cfg, nil } + if !isValidNatsSubject(extractedSubject) { + return cfg, fmt.Errorf("invalid subject: %s", extractedSubject) + } extractedSubjects = append(extractedSubjects, extractedSubject) } slices.Sort(extractedSubjects) From a473fddc521412f035f3a084e49db99addd07a50 Mon Sep 17 00:00:00 2001 From: Alessandro Pagnin Date: Mon, 7 Apr 2025 23:12:27 +0200 Subject: [PATCH 009/126] make it works with different providers in the same datasource --- router/pkg/pubsub/datasource.go | 23 +++-- router/pkg/pubsub/datasource/datasource.go | 4 +- router/pkg/pubsub/datasource/factory.go | 18 ++-- router/pkg/pubsub/datasource/planner.go | 93 ++++++++++-------- router/pkg/pubsub/kafka/datasource.go | 35 +++---- router/pkg/pubsub/kafka/datasource_impl.go | 43 +++++++- router/pkg/pubsub/nats/datasource.go | 109 ++++++++++++++------- router/pkg/pubsub/nats/nats.go | 56 ++++++++--- 8 files changed, 252 insertions(+), 129 deletions(-) diff --git a/router/pkg/pubsub/datasource.go b/router/pkg/pubsub/datasource.go index c5bf21a575..0d8b7131f7 100644 --- a/router/pkg/pubsub/datasource.go +++ b/router/pkg/pubsub/datasource.go @@ -16,20 +16,31 @@ import ( ) func GetDataSourcesFromConfig(ctx context.Context, in *nodev1.DataSourceConfiguration, dsMeta *plan.DataSourceMetadata, config config.EventsConfiguration, logger *zap.Logger) ([]plan.DataSource, error) { - var dataSources []plan.DataSource + var pubSubs datasource.PubSubGeneralImplementerList + for _, pubSub := range datasource.GetRegisteredPubSubs() { - ds, err := pubSub(ctx, in, dsMeta, config, logger) + pubSub, err := pubSub(ctx, in, dsMeta, config, logger) if err != nil { return nil, err } - if ds != nil { - dataSources = append(dataSources, ds) + if pubSub != nil { + pubSubs = append(pubSubs, pubSub) } } - if len(dataSources) == 0 { + if len(pubSubs) == 0 { return nil, fmt.Errorf("no pubsub data sources found for data source %s", in.Id) } - return dataSources, nil + ds, err := plan.NewDataSourceConfiguration( + in.Id, + datasource.NewFactory(ctx, config, pubSubs), + dsMeta, + pubSubs, + ) + if err != nil { + return nil, err + } + + return []plan.DataSource{ds}, nil } diff --git a/router/pkg/pubsub/datasource/datasource.go b/router/pkg/pubsub/datasource/datasource.go index cc355dfeae..ed3ab2b664 100644 --- a/router/pkg/pubsub/datasource/datasource.go +++ b/router/pkg/pubsub/datasource/datasource.go @@ -10,7 +10,7 @@ import ( "go.uber.org/zap" ) -type Getter func(ctx context.Context, in *nodev1.DataSourceConfiguration, dsMeta *plan.DataSourceMetadata, config config.EventsConfiguration, logger *zap.Logger) (plan.DataSource, error) +type Getter func(ctx context.Context, in *nodev1.DataSourceConfiguration, dsMeta *plan.DataSourceMetadata, config config.EventsConfiguration, logger *zap.Logger) (PubSubGeneralImplementer, error) var pubSubs []Getter @@ -26,7 +26,7 @@ type ArgumentTemplateCallback func(tpl string) (string, error) type PubSubImplementer[F any] interface { PrepareProviders(ctx context.Context, in *nodev1.DataSourceConfiguration, dsMeta *plan.DataSourceMetadata, config config.EventsConfiguration) error - GetFactory(executionContext context.Context, config config.EventsConfiguration) F + //GetFactory(executionContext context.Context, config config.EventsConfiguration) F } type EventConfigType interface { diff --git a/router/pkg/pubsub/datasource/factory.go b/router/pkg/pubsub/datasource/factory.go index 498ef93510..25a1564ae2 100644 --- a/router/pkg/pubsub/datasource/factory.go +++ b/router/pkg/pubsub/datasource/factory.go @@ -9,30 +9,30 @@ import ( "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/plan" ) -func NewFactory[EC EventConfigType, P any](executionContext context.Context, config config.EventsConfiguration, providers map[string]P) *Factory[EC, P] { - return &Factory[EC, P]{ +func NewFactory(executionContext context.Context, config config.EventsConfiguration, providers PubSubGeneralImplementerList) *Factory { + return &Factory{ providers: providers, executionContext: executionContext, config: config, } } -type Factory[EC EventConfigType, P any] struct { - providers map[string]P +type Factory struct { + providers PubSubGeneralImplementerList executionContext context.Context config config.EventsConfiguration } -func (f *Factory[EC, P]) Planner(_ abstractlogger.Logger) plan.DataSourcePlanner[Implementer[EC, P]] { - return &Planner[EC, P]{ - providers: f.providers, +func (f *Factory) Planner(_ abstractlogger.Logger) plan.DataSourcePlanner[PubSubGeneralImplementerList] { + return &Planner{ + pubSubs: f.providers, } } -func (f *Factory[EC, P]) Context() context.Context { +func (f *Factory) Context() context.Context { return f.executionContext } -func (f *Factory[EC, P]) UpstreamSchema(dataSourceConfig plan.DataSourceConfiguration[Implementer[EC, P]]) (*ast.Document, bool) { +func (f *Factory) UpstreamSchema(dataSourceConfig plan.DataSourceConfiguration[PubSubGeneralImplementerList]) (*ast.Document, bool) { return nil, false } diff --git a/router/pkg/pubsub/datasource/planner.go b/router/pkg/pubsub/datasource/planner.go index 756ba996ce..8d22875b53 100644 --- a/router/pkg/pubsub/datasource/planner.go +++ b/router/pkg/pubsub/datasource/planner.go @@ -4,6 +4,7 @@ import ( "fmt" "strings" + nodev1 "github.com/wundergraph/cosmo/router/gen/proto/wg/cosmo/node/v1" "github.com/wundergraph/cosmo/router/pkg/pubsub/utils" "github.com/wundergraph/graphql-go-tools/v2/pkg/ast" "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/argument_templates" @@ -11,59 +12,79 @@ import ( "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/resolve" ) -type Planner[EC EventConfigType, P any] struct { +type EventConfigType2 interface { + GetResolveDataSource() (resolve.DataSource, error) + GetResolveDataSourceInput(event []byte) (string, error) + GetEngineEventConfiguration() *nodev1.EngineEventConfiguration + GetResolveDataSourceSubscription() (resolve.SubscriptionDataSource, error) + GetResolveDataSourceSubscriptionInput() (string, error) +} + +type PubSubGeneralImplementerList []PubSubGeneralImplementer + +func (p *PubSubGeneralImplementerList) FindEventConfig2(typeName string, fieldName string, extractFn func(string) (string, error)) (EventConfigType2, error) { + for _, pubSub := range *p { + eventConfigV, err := pubSub.FindEventConfig2(typeName, fieldName, extractFn) + if err != nil { + return nil, err + } + if eventConfigV != nil { + return eventConfigV, nil + } + } + return nil, fmt.Errorf("failed to find event config for type name \"%s\" and field name \"%s\"", typeName, fieldName) +} + +type PubSubGeneralImplementer interface { + FindEventConfig2(typeName string, fieldName string, extractFn func(string) (string, error)) (EventConfigType2, error) +} + +type Planner struct { id int - config Implementer[EC, P] - eventConfig EC + pubSubs PubSubGeneralImplementerList + eventConfig EventConfigType2 rootFieldRef int variables resolve.Variables visitor *plan.Visitor - providers map[string]P } -func (p *Planner[EC, P]) SetID(id int) { +func (p *Planner) SetID(id int) { p.id = id } -func (p *Planner[EC, P]) ID() (id int) { +func (p *Planner) ID() (id int) { return p.id } -func (p *Planner[EC, P]) DownstreamResponseFieldAlias(downstreamFieldRef int) (alias string, exists bool) { +func (p *Planner) DownstreamResponseFieldAlias(downstreamFieldRef int) (alias string, exists bool) { // skip, not required return } -func (p *Planner[EC, P]) DataSourcePlanningBehavior() plan.DataSourcePlanningBehavior { +func (p *Planner) DataSourcePlanningBehavior() plan.DataSourcePlanningBehavior { return plan.DataSourcePlanningBehavior{ MergeAliasedRootNodes: false, OverrideFieldPathFromAlias: false, } } -func (p *Planner[EC, P]) Register(visitor *plan.Visitor, configuration plan.DataSourceConfiguration[Implementer[EC, P]], _ plan.DataSourcePlannerConfiguration) error { +func (p *Planner) Register(visitor *plan.Visitor, configuration plan.DataSourceConfiguration[PubSubGeneralImplementerList], _ plan.DataSourcePlannerConfiguration) error { p.visitor = visitor visitor.Walker.RegisterEnterFieldVisitor(p) visitor.Walker.RegisterEnterDocumentVisitor(p) - p.config = configuration.CustomConfiguration() + p.pubSubs = configuration.CustomConfiguration() return nil } -func (p *Planner[EC, P]) ConfigureFetch() resolve.FetchConfiguration { - if any(p.eventConfig) == nil { - p.visitor.Walker.StopWithInternalErr(fmt.Errorf("failed to configure fetch: event config is nil")) +func (p *Planner) ConfigureFetch() resolve.FetchConfiguration { + if p.eventConfig == nil { + // p.visitor.Walker.StopWithInternalErr(fmt.Errorf("failed to configure fetch: event config is nil")) return resolve.FetchConfiguration{} } var dataSource resolve.DataSource - providerId := p.config.GetProviderId(p.eventConfig) - pubsub, ok := p.providers[providerId] - if !ok { - p.visitor.Walker.StopWithInternalErr(fmt.Errorf("no pubsub connection exists with provider id \"%s\"", providerId)) - return resolve.FetchConfiguration{} - } - dataSource, err := p.config.GetResolveDataSource(p.eventConfig, pubsub) + dataSource, err := p.eventConfig.GetResolveDataSource() if err != nil { p.visitor.Walker.StopWithInternalErr(fmt.Errorf("failed to get data source: %w", err)) return resolve.FetchConfiguration{} @@ -75,7 +96,7 @@ func (p *Planner[EC, P]) ConfigureFetch() resolve.FetchConfiguration { return resolve.FetchConfiguration{} } - input, err := p.config.GetResolveDataSourceInput(p.eventConfig, event) + input, err := p.eventConfig.GetResolveDataSourceInput(event) if err != nil { p.visitor.Walker.StopWithInternalErr(fmt.Errorf("failed to get resolve data source input: %w", err)) return resolve.FetchConfiguration{} @@ -91,25 +112,19 @@ func (p *Planner[EC, P]) ConfigureFetch() resolve.FetchConfiguration { } } -func (p *Planner[EC, P]) ConfigureSubscription() plan.SubscriptionConfiguration { - if any(p.eventConfig) == nil { - p.visitor.Walker.StopWithInternalErr(fmt.Errorf("failed to configure subscription: event manager is nil")) - return plan.SubscriptionConfiguration{} - } - providerId := p.config.GetProviderId(p.eventConfig) - pubsub, ok := p.providers[providerId] - if !ok { - p.visitor.Walker.StopWithInternalErr(fmt.Errorf("no pubsub connection exists with provider id \"%s\"", providerId)) +func (p *Planner) ConfigureSubscription() plan.SubscriptionConfiguration { + if p.eventConfig == nil { + // p.visitor.Walker.StopWithInternalErr(fmt.Errorf("failed to configure subscription: event manager is nil")) return plan.SubscriptionConfiguration{} } - dataSource, err := p.config.GetResolveDataSourceSubscription(p.eventConfig, pubsub) + dataSource, err := p.eventConfig.GetResolveDataSourceSubscription() if err != nil { p.visitor.Walker.StopWithInternalErr(fmt.Errorf("failed to get resolve data source subscription: %w", err)) return plan.SubscriptionConfiguration{} } - input, err := p.config.GetResolveDataSourceSubscriptionInput(p.eventConfig, pubsub) + input, err := p.eventConfig.GetResolveDataSourceSubscriptionInput() if err != nil { p.visitor.Walker.StopWithInternalErr(fmt.Errorf("failed to get resolve data source subscription input: %w", err)) return plan.SubscriptionConfiguration{} @@ -125,7 +140,7 @@ func (p *Planner[EC, P]) ConfigureSubscription() plan.SubscriptionConfiguration } } -func (p *Planner[EC, P]) addContextVariableByArgumentRef(argumentRef int, argumentPath []string) (string, error) { +func (p *Planner) addContextVariableByArgumentRef(argumentRef int, argumentPath []string) (string, error) { variablePath, err := p.visitor.Operation.VariablePathByArgumentRefAndArgumentPath(argumentRef, argumentPath, p.visitor.Walker.Ancestors[0].Ref) if err != nil { return "", err @@ -149,7 +164,7 @@ func StringParser(subject string) (string, error) { return "", fmt.Errorf(`subject "%s" is not a valid NATS subject`, subject) } -func (p *Planner[EC, P]) extractArgumentTemplate(fieldRef int, template string) (string, error) { +func (p *Planner) extractArgumentTemplate(fieldRef int, template string) (string, error) { matches := argument_templates.ArgumentTemplateRegex.FindAllStringSubmatch(template, -1) // If no argument templates are defined, there are only static values if len(matches) < 1 { @@ -188,13 +203,11 @@ func (p *Planner[EC, P]) extractArgumentTemplate(fieldRef int, template string) return templateWithVariableTemplateReplacements, nil } -func (p *Planner[EC, P]) EnterDocument(_, _ *ast.Document) { +func (p *Planner) EnterDocument(_, _ *ast.Document) { p.rootFieldRef = -1 - var zero EC - p.eventConfig = zero } -func (p *Planner[EC, P]) EnterField(ref int) { +func (p *Planner) EnterField(ref int) { if p.rootFieldRef != -1 { // This is a nested field; nothing needs to be done return @@ -208,10 +221,10 @@ func (p *Planner[EC, P]) EnterField(ref int) { return p.extractArgumentTemplate(ref, tpl) } - eventConfigV, err := p.config.FindEventConfig(p.config.GetEventsDataConfigurations(), typeName, fieldName, extractFn) + eventConfigV, err := p.pubSubs.FindEventConfig2(typeName, fieldName, extractFn) if err != nil { + p.visitor.Walker.StopWithInternalErr(fmt.Errorf("failed to find event config for type name \"%s\" and field name \"%s\": %w", typeName, fieldName, err)) return } - p.eventConfig = eventConfigV } diff --git a/router/pkg/pubsub/kafka/datasource.go b/router/pkg/pubsub/kafka/datasource.go index 2f789b12bb..4a2087dabc 100644 --- a/router/pkg/pubsub/kafka/datasource.go +++ b/router/pkg/pubsub/kafka/datasource.go @@ -16,29 +16,14 @@ import ( "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/plan" ) -func GetPlanDataSource(ctx context.Context, in *nodev1.DataSourceConfiguration, dsMeta *plan.DataSourceMetadata, config config.EventsConfiguration, logger *zap.Logger) (plan.DataSource, error) { +func GetPlanDataSource(ctx context.Context, in *nodev1.DataSourceConfiguration, dsMeta *plan.DataSourceMetadata, config config.EventsConfiguration, logger *zap.Logger) (datasource.PubSubGeneralImplementer, error) { if kafkaData := in.GetCustomEvents().GetKafka(); kafkaData != nil { k := NewPubSub(logger) err := k.PrepareProviders(ctx, in, dsMeta, config) if err != nil { return nil, err } - factory := k.GetFactory(ctx, config) - ds, err := plan.NewDataSourceConfiguration[datasource.Implementer[*nodev1.KafkaEventConfiguration, *KafkaPubSub]]( - in.Id+"-kafka", - factory, - dsMeta, - &Configuration{ - EventConfiguration: kafkaData, - Logger: logger, - }, - ) - - if err != nil { - return nil, err - } - - return ds, nil + return k.config, nil } return nil, nil @@ -53,6 +38,7 @@ func init() { type Kafka struct { logger *zap.Logger providers map[string]*KafkaPubSub + config *Configuration } // buildKafkaOptions creates a list of kgo.Opt options for the given Kafka event source configuration. @@ -109,9 +95,18 @@ func (k *Kafka) PrepareProviders(ctx context.Context, in *nodev1.DataSourceConfi } k.providers[provider.ID] = ps.New(ctx) } + k.config = &Configuration{ + EventConfiguration: in.CustomEvents.GetKafka(), + Logger: k.logger, + Providers: k.providers, + } return nil } +func (k *Kafka) GetPubSubGeneralImplementerList() datasource.PubSubGeneralImplementer { + return k.config +} + // func (k *Kafka) ConnectProviders(ctx context.Context) error { // for _, provider := range k.providers { // err := provider.Connect() @@ -122,9 +117,9 @@ func (k *Kafka) PrepareProviders(ctx context.Context, in *nodev1.DataSourceConfi // return nil // } -func (k *Kafka) GetFactory(executionContext context.Context, config config.EventsConfiguration) *datasource.Factory[*nodev1.KafkaEventConfiguration, *KafkaPubSub] { - return datasource.NewFactory[*nodev1.KafkaEventConfiguration](executionContext, config, k.providers) -} +// func (k *Kafka) GetFactory(executionContext context.Context, config config.EventsConfiguration) *datasource.Factory { +// return datasource.NewFactory(executionContext, config, k.config) +// } func NewPubSub(logger *zap.Logger) Kafka { return Kafka{ diff --git a/router/pkg/pubsub/kafka/datasource_impl.go b/router/pkg/pubsub/kafka/datasource_impl.go index 2828987f97..3dfd122bd2 100644 --- a/router/pkg/pubsub/kafka/datasource_impl.go +++ b/router/pkg/pubsub/kafka/datasource_impl.go @@ -14,6 +14,7 @@ type Configuration struct { Data string `json:"data"` EventConfiguration []*nodev1.KafkaEventConfiguration Logger *zap.Logger + Providers map[string]*KafkaPubSub } func (c *Configuration) GetEventsDataConfigurations() []*nodev1.KafkaEventConfiguration { @@ -78,12 +79,44 @@ func (c *Configuration) GetResolveDataSourceInput(eventConfig *nodev1.KafkaEvent func (c *Configuration) GetProviderId(eventConfig *nodev1.KafkaEventConfiguration) string { return eventConfig.GetEngineEventConfiguration().GetProviderId() } - -func (c *Configuration) FindEventConfig(eventConfigs []*nodev1.KafkaEventConfiguration, typeName string, fieldName string, fn datasource.ArgumentTemplateCallback) (*nodev1.KafkaEventConfiguration, error) { - for _, cfg := range eventConfigs { +func (c *Configuration) FindEventConfig2(typeName string, fieldName string, extractFn func(string) (string, error)) (datasource.EventConfigType2, error) { + for _, cfg := range c.EventConfiguration { if cfg.GetEngineEventConfiguration().GetTypeName() == typeName && cfg.GetEngineEventConfiguration().GetFieldName() == fieldName { - return cfg, nil + return &SelectedConfiguration{ + Provider: c.Providers[c.GetProviderId(cfg)], + EventConfiguration: cfg, + }, nil } } - return nil, fmt.Errorf("failed to find event config for type name \"%s\" and field name \"%s\"", typeName, fieldName) + return nil, nil +} + +type SelectedConfiguration struct { + Config *Configuration + EventConfiguration *nodev1.KafkaEventConfiguration + Provider *KafkaPubSub +} + +func (c *SelectedConfiguration) GetEngineEventConfiguration() *nodev1.EngineEventConfiguration { + return c.EventConfiguration.GetEngineEventConfiguration() +} + +func (c *SelectedConfiguration) GetResolveDataSource() (resolve.DataSource, error) { + return c.Config.GetResolveDataSource(c.EventConfiguration, c.Provider) +} + +func (c *SelectedConfiguration) GetResolveDataSourceInput(event []byte) (string, error) { + return c.Config.GetResolveDataSourceInput(c.EventConfiguration, event) +} + +func (c *SelectedConfiguration) GetResolveDataSourceSubscription() (resolve.SubscriptionDataSource, error) { + return c.Config.GetResolveDataSourceSubscription(c.EventConfiguration, c.Provider) +} + +func (c *SelectedConfiguration) GetResolveDataSourceSubscriptionInput() (string, error) { + return c.Config.GetResolveDataSourceSubscriptionInput(c.EventConfiguration, c.Provider) +} + +func (c *SelectedConfiguration) GetProviderId() string { + return c.Config.GetProviderId(c.EventConfiguration) } diff --git a/router/pkg/pubsub/nats/datasource.go b/router/pkg/pubsub/nats/datasource.go index 701271ae67..ab2e56d295 100644 --- a/router/pkg/pubsub/nats/datasource.go +++ b/router/pkg/pubsub/nats/datasource.go @@ -26,36 +26,21 @@ const ( tsep = "." ) -func GetDataSource(ctx context.Context, in *nodev1.DataSourceConfiguration, dsMeta *plan.DataSourceMetadata, config config.EventsConfiguration, logger *zap.Logger) (plan.DataSource, error) { +func GetPlanDataSource(ctx context.Context, in *nodev1.DataSourceConfiguration, dsMeta *plan.DataSourceMetadata, config config.EventsConfiguration, logger *zap.Logger) (datasource.PubSubGeneralImplementer, error) { if natsData := in.GetCustomEvents().GetNats(); natsData != nil { k := NewPubSub(logger) err := k.PrepareProviders(ctx, in, dsMeta, config) if err != nil { return nil, err } - factory := k.GetFactory(ctx, config, k.providers) - ds, err := plan.NewDataSourceConfiguration[datasource.Implementer[*nodev1.NatsEventConfiguration, *NatsPubSub]]( - in.Id+"-nats", - factory, - dsMeta, - &Configuration{ - EventConfiguration: natsData, - Logger: logger, - }, - ) - - if err != nil { - return nil, err - } - - return ds, nil + return k.config, nil } return nil, nil } func init() { - datasource.RegisterPubSub(GetDataSource) + datasource.RegisterPubSub(GetPlanDataSource) } func buildNatsOptions(eventSource config.NatsEventSource, logger *zap.Logger) ([]nats.Option, error) { @@ -107,6 +92,7 @@ type Nats struct { logger *zap.Logger hostName string // How to get it here? routerListenAddr string // How to get it here? + config *Configuration } type LazyClient struct { @@ -115,31 +101,36 @@ type LazyClient struct { opts []nats.Option client *nats.Conn js jetstream.JetStream + err error } -func (c *LazyClient) Connect(opts ...nats.Option) (err error) { +func (c *LazyClient) Connect(opts ...nats.Option) error { c.once.Do(func() { - c.client, err = nats.Connect(c.url, opts...) - if err != nil { + c.client, c.err = nats.Connect(c.url, opts...) + if c.err != nil { return } - c.js, err = jetstream.New(c.client) + c.js, c.err = jetstream.New(c.client) }) - return + return c.err } -func (c *LazyClient) GetClient() *nats.Conn { +func (c *LazyClient) GetClient() (*nats.Conn, error) { if c.client == nil { - c.Connect() + if err := c.Connect(c.opts...); err != nil { + return nil, err + } } - return c.client + return c.client, c.err } -func (c *LazyClient) GetJetStream() jetstream.JetStream { +func (c *LazyClient) GetJetStream() (jetstream.JetStream, error) { if c.js == nil { - c.Connect() + if err := c.Connect(c.opts...); err != nil { + return nil, err + } } - return c.js + return c.js, c.err } func NewLazyClient(url string, opts ...nats.Option) *LazyClient { @@ -173,13 +164,22 @@ func (n *Nats) PrepareProviders(ctx context.Context, in *nodev1.DataSourceConfig n.providers[provider.ID] = NewConnector(n.logger, provider.URL, options, n.hostName, n.routerListenAddr).New(ctx) } + n.config = &Configuration{ + EventConfiguration: in.CustomEvents.GetNats(), + Logger: n.logger, + Providers: n.providers, + } return nil } -func (n *Nats) GetFactory(executionContext context.Context, config config.EventsConfiguration, providers map[string]*NatsPubSub) *datasource.Factory[*nodev1.NatsEventConfiguration, *NatsPubSub] { - return datasource.NewFactory[*nodev1.NatsEventConfiguration](executionContext, config, n.providers) +func (n *Nats) GetPubSubGeneralImplementerList() datasource.PubSubGeneralImplementer { + return n.config } +// func (n *Nats) GetFactory(executionContext context.Context, config config.EventsConfiguration, providers map[string]*NatsPubSub) *datasource.Factory[*nodev1.NatsEventConfiguration, *NatsPubSub] { +// return datasource.NewFactory[*nodev1.NatsEventConfiguration](executionContext, config, n.providers) +// } + func NewPubSub(logger *zap.Logger) Nats { return Nats{ logger: logger, @@ -190,6 +190,7 @@ type Configuration struct { Data string `json:"data"` EventConfiguration []*nodev1.NatsEventConfiguration Logger *zap.Logger + Providers map[string]*NatsPubSub } func (c *Configuration) GetEventsDataConfigurations() []*nodev1.NatsEventConfiguration { @@ -296,13 +297,51 @@ func (c *Configuration) transformEventConfig(cfg *nodev1.NatsEventConfiguration, return cfg, nil } -func (c *Configuration) FindEventConfig(eventConfigs []*nodev1.NatsEventConfiguration, typeName string, fieldName string, fn datasource.ArgumentTemplateCallback) (*nodev1.NatsEventConfiguration, error) { - for _, cfg := range eventConfigs { +func (c *Configuration) FindEventConfig2(typeName string, fieldName string, extractFn func(string) (string, error)) (datasource.EventConfigType2, error) { + for _, cfg := range c.EventConfiguration { if cfg.GetEngineEventConfiguration().GetTypeName() == typeName && cfg.GetEngineEventConfiguration().GetFieldName() == fieldName { - return c.transformEventConfig(cfg, fn) + transformedCfg, err := c.transformEventConfig(cfg, extractFn) + if err != nil { + return nil, err + } + return &SelectedConfiguration{ + Config: c, + EventConfiguration: transformedCfg, + Provider: c.Providers[c.GetProviderId(transformedCfg)], + }, nil } } - return nil, fmt.Errorf("failed to find event config for type name \"%s\" and field name \"%s\"", typeName, fieldName) + return nil, nil +} + +type SelectedConfiguration struct { + Config *Configuration + EventConfiguration *nodev1.NatsEventConfiguration + Provider *NatsPubSub +} + +func (c *SelectedConfiguration) GetEngineEventConfiguration() *nodev1.EngineEventConfiguration { + return c.EventConfiguration.GetEngineEventConfiguration() +} + +func (c *SelectedConfiguration) GetResolveDataSource() (resolve.DataSource, error) { + return c.Config.GetResolveDataSource(c.EventConfiguration, c.Provider) +} + +func (c *SelectedConfiguration) GetResolveDataSourceInput(event []byte) (string, error) { + return c.Config.GetResolveDataSourceInput(c.EventConfiguration, event) +} + +func (c *SelectedConfiguration) GetResolveDataSourceSubscription() (resolve.SubscriptionDataSource, error) { + return c.Config.GetResolveDataSourceSubscription(c.EventConfiguration, c.Provider) +} + +func (c *SelectedConfiguration) GetResolveDataSourceSubscriptionInput() (string, error) { + return c.Config.GetResolveDataSourceSubscriptionInput(c.EventConfiguration, c.Provider) +} + +func (c *SelectedConfiguration) GetProviderId() string { + return c.Config.GetProviderId(c.EventConfiguration) } func isValidNatsSubject(subject string) bool { diff --git a/router/pkg/pubsub/nats/nats.go b/router/pkg/pubsub/nats/nats.go index 505ab45fb6..496e23bc1c 100644 --- a/router/pkg/pubsub/nats/nats.go +++ b/router/pkg/pubsub/nats/nats.go @@ -104,7 +104,13 @@ func (p *NatsPubSub) Subscribe(ctx context.Context, event SubscriptionEventConfi if event.StreamConfiguration.ConsumerInactiveThreshold > 0 { consumerConfig.InactiveThreshold = time.Duration(event.StreamConfiguration.ConsumerInactiveThreshold) * time.Second } - consumer, err := p.client.GetJetStream().CreateOrUpdateConsumer(ctx, event.StreamConfiguration.StreamName, consumerConfig) + js, err := p.client.GetJetStream() + if err != nil { + log.Error("getting jetstream client", zap.Error(err)) + return datasource.NewError("failed to get jetstream client", err) + } + + consumer, err := js.CreateOrUpdateConsumer(ctx, event.StreamConfiguration.StreamName, consumerConfig) if err != nil { log.Error("creating or updating consumer", zap.Error(err)) return datasource.NewError(fmt.Sprintf(`failed to create or update consumer for stream "%s"`, event.StreamConfiguration.StreamName), err) @@ -152,10 +158,16 @@ func (p *NatsPubSub) Subscribe(ctx context.Context, event SubscriptionEventConfi return nil } + nc, err := p.client.GetClient() + if err != nil { + log.Error("getting nats client", zap.Error(err)) + return datasource.NewError("failed to get nats client", err) + } + msgChan := make(chan *nats.Msg) subscriptions := make([]*nats.Subscription, len(event.Subjects)) for i, subject := range event.Subjects { - subscription, err := p.client.GetClient().ChanSubscribe(subject, msgChan) + subscription, err := nc.ChanSubscribe(subject, msgChan) if err != nil { log.Error("subscribing to NATS subject", zap.Error(err), zap.String("subscription_subject", subject)) return datasource.NewError(fmt.Sprintf(`failed to subscribe to NATS subject "%s"`, subject), err) @@ -209,7 +221,13 @@ func (p *NatsPubSub) Publish(_ context.Context, event PublishAndRequestEventConf log.Debug("publish", zap.ByteString("data", event.Data)) - err := p.client.GetClient().Publish(event.Subject, event.Data) + nc, err := p.client.GetClient() + if err != nil { + log.Error("getting nats client", zap.Error(err)) + return datasource.NewError("failed to get nats client", err) + } + + err = nc.Publish(event.Subject, event.Data) if err != nil { log.Error("publish error", zap.Error(err)) return datasource.NewError(fmt.Sprintf("error publishing to NATS subject %s", event.Subject), err) @@ -227,7 +245,13 @@ func (p *NatsPubSub) Request(ctx context.Context, event PublishAndRequestEventCo log.Debug("request", zap.ByteString("data", event.Data)) - msg, err := p.client.GetClient().RequestWithContext(ctx, event.Subject, event.Data) + nc, err := p.client.GetClient() + if err != nil { + log.Error("getting nats client", zap.Error(err)) + return datasource.NewError("failed to get nats client", err) + } + + msg, err := nc.RequestWithContext(ctx, event.Subject, event.Data) if err != nil { log.Error("request error", zap.Error(err)) return datasource.NewError(fmt.Sprintf("error requesting from NATS subject %s", event.Subject), err) @@ -243,32 +267,40 @@ func (p *NatsPubSub) Request(ctx context.Context, event PublishAndRequestEventCo } func (p *NatsPubSub) flush(ctx context.Context) error { - return p.client.GetClient().FlushWithContext(ctx) + nc, err := p.client.GetClient() + if err != nil { + return err + } + return nc.FlushWithContext(ctx) } func (p *NatsPubSub) Shutdown(ctx context.Context) error { + nc, err := p.client.GetClient() + if err != nil { + return nil // Already disconnected or failed to connect + } - if p.client.GetClient().IsClosed() { + if nc.IsClosed() { return nil } - var err error + var shutdownErr error fErr := p.flush(ctx) if fErr != nil { - err = errors.Join(err, fErr) + shutdownErr = errors.Join(shutdownErr, fErr) } - drainErr := p.client.GetClient().Drain() + drainErr := nc.Drain() if drainErr != nil { - err = errors.Join(err, drainErr) + shutdownErr = errors.Join(shutdownErr, drainErr) } // Wait for all subscriptions to be closed p.closeWg.Wait() - if err != nil { - return fmt.Errorf("nats pubsub shutdown: %w", err) + if shutdownErr != nil { + return fmt.Errorf("nats pubsub shutdown: %w", shutdownErr) } return nil From e6645c89fdd891721eef498932daae4666595e6a Mon Sep 17 00:00:00 2001 From: Alessandro Pagnin Date: Tue, 8 Apr 2025 09:40:39 +0200 Subject: [PATCH 010/126] chore: cleaning up a little, reintroduced host and listener vars --- router/core/factoryresolver.go | 2 ++ router/pkg/pubsub/datasource.go | 4 ++-- router/pkg/pubsub/datasource/datasource.go | 21 ++------------------- router/pkg/pubsub/datasource/planner.go | 12 ++++++------ router/pkg/pubsub/kafka/datasource.go | 2 +- router/pkg/pubsub/kafka/datasource_impl.go | 3 +-- router/pkg/pubsub/nats/datasource.go | 17 +++++++++-------- 7 files changed, 23 insertions(+), 38 deletions(-) diff --git a/router/core/factoryresolver.go b/router/core/factoryresolver.go index 73b064ef21..f2198a1c8c 100644 --- a/router/core/factoryresolver.go +++ b/router/core/factoryresolver.go @@ -410,6 +410,8 @@ func (l *Loader) Load(engineConfig *nodev1.EngineConfiguration, subgraphs []*nod l.dataSourceMetaData(in), routerEngineConfig.Events, l.logger, + "localhost", + "localhost:8080", ) if err != nil { return nil, err diff --git a/router/pkg/pubsub/datasource.go b/router/pkg/pubsub/datasource.go index 0d8b7131f7..b763cd38e3 100644 --- a/router/pkg/pubsub/datasource.go +++ b/router/pkg/pubsub/datasource.go @@ -15,11 +15,11 @@ import ( _ "github.com/wundergraph/cosmo/router/pkg/pubsub/nats" ) -func GetDataSourcesFromConfig(ctx context.Context, in *nodev1.DataSourceConfiguration, dsMeta *plan.DataSourceMetadata, config config.EventsConfiguration, logger *zap.Logger) ([]plan.DataSource, error) { +func GetDataSourcesFromConfig(ctx context.Context, in *nodev1.DataSourceConfiguration, dsMeta *plan.DataSourceMetadata, config config.EventsConfiguration, logger *zap.Logger, hostName string, routerListenAddr string) ([]plan.DataSource, error) { var pubSubs datasource.PubSubGeneralImplementerList for _, pubSub := range datasource.GetRegisteredPubSubs() { - pubSub, err := pubSub(ctx, in, dsMeta, config, logger) + pubSub, err := pubSub(ctx, in, dsMeta, config, logger, hostName, routerListenAddr) if err != nil { return nil, err } diff --git a/router/pkg/pubsub/datasource/datasource.go b/router/pkg/pubsub/datasource/datasource.go index ed3ab2b664..04b5ab0552 100644 --- a/router/pkg/pubsub/datasource/datasource.go +++ b/router/pkg/pubsub/datasource/datasource.go @@ -6,11 +6,10 @@ import ( nodev1 "github.com/wundergraph/cosmo/router/gen/proto/wg/cosmo/node/v1" "github.com/wundergraph/cosmo/router/pkg/config" "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/plan" - "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/resolve" "go.uber.org/zap" ) -type Getter func(ctx context.Context, in *nodev1.DataSourceConfiguration, dsMeta *plan.DataSourceMetadata, config config.EventsConfiguration, logger *zap.Logger) (PubSubGeneralImplementer, error) +type Getter func(ctx context.Context, in *nodev1.DataSourceConfiguration, dsMeta *plan.DataSourceMetadata, config config.EventsConfiguration, logger *zap.Logger, hostName string, routerListenAddr string) (PubSubGeneralImplementer, error) var pubSubs []Getter @@ -24,22 +23,6 @@ func GetRegisteredPubSubs() []Getter { type ArgumentTemplateCallback func(tpl string) (string, error) -type PubSubImplementer[F any] interface { +type PubSubImplementer interface { PrepareProviders(ctx context.Context, in *nodev1.DataSourceConfiguration, dsMeta *plan.DataSourceMetadata, config config.EventsConfiguration) error - //GetFactory(executionContext context.Context, config config.EventsConfiguration) F -} - -type EventConfigType interface { - GetEngineEventConfiguration() *nodev1.EngineEventConfiguration -} - -// Create an interface for Configuration -type Implementer[EC EventConfigType, P any] interface { - GetResolveDataSource(eventConfig EC, pubsub P) (resolve.DataSource, error) - GetResolveDataSourceSubscription(eventConfig EC, pubsub P) (resolve.SubscriptionDataSource, error) - GetResolveDataSourceSubscriptionInput(eventConfig EC, pubsub P) (string, error) - GetResolveDataSourceInput(eventConfig EC, event []byte) (string, error) - GetProviderId(eventConfig EC) string - FindEventConfig(eventConfigs []EC, typeName string, fieldName string, fn ArgumentTemplateCallback) (EC, error) - GetEventsDataConfigurations() []EC } diff --git a/router/pkg/pubsub/datasource/planner.go b/router/pkg/pubsub/datasource/planner.go index 8d22875b53..21f0244c65 100644 --- a/router/pkg/pubsub/datasource/planner.go +++ b/router/pkg/pubsub/datasource/planner.go @@ -12,7 +12,7 @@ import ( "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/resolve" ) -type EventConfigType2 interface { +type EventConfigType interface { GetResolveDataSource() (resolve.DataSource, error) GetResolveDataSourceInput(event []byte) (string, error) GetEngineEventConfiguration() *nodev1.EngineEventConfiguration @@ -22,9 +22,9 @@ type EventConfigType2 interface { type PubSubGeneralImplementerList []PubSubGeneralImplementer -func (p *PubSubGeneralImplementerList) FindEventConfig2(typeName string, fieldName string, extractFn func(string) (string, error)) (EventConfigType2, error) { +func (p *PubSubGeneralImplementerList) FindEventConfig(typeName string, fieldName string, extractFn func(string) (string, error)) (EventConfigType, error) { for _, pubSub := range *p { - eventConfigV, err := pubSub.FindEventConfig2(typeName, fieldName, extractFn) + eventConfigV, err := pubSub.FindEventConfig(typeName, fieldName, extractFn) if err != nil { return nil, err } @@ -36,13 +36,13 @@ func (p *PubSubGeneralImplementerList) FindEventConfig2(typeName string, fieldNa } type PubSubGeneralImplementer interface { - FindEventConfig2(typeName string, fieldName string, extractFn func(string) (string, error)) (EventConfigType2, error) + FindEventConfig(typeName string, fieldName string, extractFn func(string) (string, error)) (EventConfigType, error) } type Planner struct { id int pubSubs PubSubGeneralImplementerList - eventConfig EventConfigType2 + eventConfig EventConfigType rootFieldRef int variables resolve.Variables visitor *plan.Visitor @@ -221,7 +221,7 @@ func (p *Planner) EnterField(ref int) { return p.extractArgumentTemplate(ref, tpl) } - eventConfigV, err := p.pubSubs.FindEventConfig2(typeName, fieldName, extractFn) + eventConfigV, err := p.pubSubs.FindEventConfig(typeName, fieldName, extractFn) if err != nil { p.visitor.Walker.StopWithInternalErr(fmt.Errorf("failed to find event config for type name \"%s\" and field name \"%s\": %w", typeName, fieldName, err)) return diff --git a/router/pkg/pubsub/kafka/datasource.go b/router/pkg/pubsub/kafka/datasource.go index 4a2087dabc..e40b5f4f2c 100644 --- a/router/pkg/pubsub/kafka/datasource.go +++ b/router/pkg/pubsub/kafka/datasource.go @@ -16,7 +16,7 @@ import ( "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/plan" ) -func GetPlanDataSource(ctx context.Context, in *nodev1.DataSourceConfiguration, dsMeta *plan.DataSourceMetadata, config config.EventsConfiguration, logger *zap.Logger) (datasource.PubSubGeneralImplementer, error) { +func GetPlanDataSource(ctx context.Context, in *nodev1.DataSourceConfiguration, dsMeta *plan.DataSourceMetadata, config config.EventsConfiguration, logger *zap.Logger, hostName string, routerListenAddr string) (datasource.PubSubGeneralImplementer, error) { if kafkaData := in.GetCustomEvents().GetKafka(); kafkaData != nil { k := NewPubSub(logger) err := k.PrepareProviders(ctx, in, dsMeta, config) diff --git a/router/pkg/pubsub/kafka/datasource_impl.go b/router/pkg/pubsub/kafka/datasource_impl.go index 3dfd122bd2..a3766b2994 100644 --- a/router/pkg/pubsub/kafka/datasource_impl.go +++ b/router/pkg/pubsub/kafka/datasource_impl.go @@ -11,7 +11,6 @@ import ( ) type Configuration struct { - Data string `json:"data"` EventConfiguration []*nodev1.KafkaEventConfiguration Logger *zap.Logger Providers map[string]*KafkaPubSub @@ -79,7 +78,7 @@ func (c *Configuration) GetResolveDataSourceInput(eventConfig *nodev1.KafkaEvent func (c *Configuration) GetProviderId(eventConfig *nodev1.KafkaEventConfiguration) string { return eventConfig.GetEngineEventConfiguration().GetProviderId() } -func (c *Configuration) FindEventConfig2(typeName string, fieldName string, extractFn func(string) (string, error)) (datasource.EventConfigType2, error) { +func (c *Configuration) FindEventConfig(typeName string, fieldName string, extractFn func(string) (string, error)) (datasource.EventConfigType, error) { for _, cfg := range c.EventConfiguration { if cfg.GetEngineEventConfiguration().GetTypeName() == typeName && cfg.GetEngineEventConfiguration().GetFieldName() == fieldName { return &SelectedConfiguration{ diff --git a/router/pkg/pubsub/nats/datasource.go b/router/pkg/pubsub/nats/datasource.go index ab2e56d295..0b4fa8d4b3 100644 --- a/router/pkg/pubsub/nats/datasource.go +++ b/router/pkg/pubsub/nats/datasource.go @@ -26,9 +26,9 @@ const ( tsep = "." ) -func GetPlanDataSource(ctx context.Context, in *nodev1.DataSourceConfiguration, dsMeta *plan.DataSourceMetadata, config config.EventsConfiguration, logger *zap.Logger) (datasource.PubSubGeneralImplementer, error) { +func GetPlanDataSource(ctx context.Context, in *nodev1.DataSourceConfiguration, dsMeta *plan.DataSourceMetadata, config config.EventsConfiguration, logger *zap.Logger, hostName string, routerListenAddr string) (datasource.PubSubGeneralImplementer, error) { if natsData := in.GetCustomEvents().GetNats(); natsData != nil { - k := NewPubSub(logger) + k := NewPubSub(logger, hostName, routerListenAddr) err := k.PrepareProviders(ctx, in, dsMeta, config) if err != nil { return nil, err @@ -90,8 +90,8 @@ func buildNatsOptions(eventSource config.NatsEventSource, logger *zap.Logger) ([ type Nats struct { providers map[string]*NatsPubSub logger *zap.Logger - hostName string // How to get it here? - routerListenAddr string // How to get it here? + hostName string + routerListenAddr string config *Configuration } @@ -180,14 +180,15 @@ func (n *Nats) GetPubSubGeneralImplementerList() datasource.PubSubGeneralImpleme // return datasource.NewFactory[*nodev1.NatsEventConfiguration](executionContext, config, n.providers) // } -func NewPubSub(logger *zap.Logger) Nats { +func NewPubSub(logger *zap.Logger, hostName string, routerListenAddr string) Nats { return Nats{ - logger: logger, + logger: logger, + hostName: hostName, + routerListenAddr: routerListenAddr, } } type Configuration struct { - Data string `json:"data"` EventConfiguration []*nodev1.NatsEventConfiguration Logger *zap.Logger Providers map[string]*NatsPubSub @@ -297,7 +298,7 @@ func (c *Configuration) transformEventConfig(cfg *nodev1.NatsEventConfiguration, return cfg, nil } -func (c *Configuration) FindEventConfig2(typeName string, fieldName string, extractFn func(string) (string, error)) (datasource.EventConfigType2, error) { +func (c *Configuration) FindEventConfig(typeName string, fieldName string, extractFn func(string) (string, error)) (datasource.EventConfigType, error) { for _, cfg := range c.EventConfiguration { if cfg.GetEngineEventConfiguration().GetTypeName() == typeName && cfg.GetEngineEventConfiguration().GetFieldName() == fieldName { transformedCfg, err := c.transformEventConfig(cfg, extractFn) From 5e900cb12d9e8e62dd8c8fce44c6d61ccf28d522 Mon Sep 17 00:00:00 2001 From: Alessandro Pagnin Date: Tue, 8 Apr 2025 10:50:31 +0200 Subject: [PATCH 011/126] feat: introduce InstanceData struct for improved configuration management - Added InstanceData struct to encapsulate hostName and listenAddress. - Updated ExecutorConfigurationBuilder and ExecutorBuildOptions to include InstanceData. - Modified Loader and DefaultFactoryResolver to utilize InstanceData for better clarity and maintainability. - Refactored graphServer to initialize with InstanceData, enhancing the overall structure of the configuration. --- router/core/executor.go | 3 +++ router/core/factoryresolver.go | 21 +++++++++++++++++---- router/core/graph_server.go | 10 ++++++---- 3 files changed, 26 insertions(+), 8 deletions(-) diff --git a/router/core/executor.go b/router/core/executor.go index fbe217cd8a..13c8d350ee 100644 --- a/router/core/executor.go +++ b/router/core/executor.go @@ -29,6 +29,7 @@ type ExecutorConfigurationBuilder struct { transportOptions *TransportOptions subscriptionClientOptions *SubscriptionClientOptions + instanceData InstanceData } type Executor struct { @@ -51,6 +52,7 @@ type ExecutorBuildOptions struct { ApolloCompatibilityFlags config.ApolloCompatibilityFlags ApolloRouterCompatibilityFlags config.ApolloRouterCompatibilityFlags HeartbeatInterval time.Duration + InstanceData InstanceData } func (b *ExecutorConfigurationBuilder) Build(ctx context.Context, opts *ExecutorBuildOptions) (*Executor, error) { @@ -204,6 +206,7 @@ func (b *ExecutorConfigurationBuilder) buildPlannerConfiguration(ctx context.Con b.logger, routerEngineCfg.Execution.EnableSingleFlight, routerEngineCfg.Execution.EnableNetPoll, + b.instanceData, ), b.logger) // this generates the plan config using the data source factories from the config package diff --git a/router/core/factoryresolver.go b/router/core/factoryresolver.go index f2198a1c8c..8d44ecf25d 100644 --- a/router/core/factoryresolver.go +++ b/router/core/factoryresolver.go @@ -29,13 +29,20 @@ import ( type Loader struct { resolver FactoryResolver // includeInfo controls whether additional information like type usage and field usage is included in the plan de - includeInfo bool - logger *zap.Logger + includeInfo bool + logger *zap.Logger + instanceData InstanceData +} + +type InstanceData struct { + hostName string + listenAddress string } type FactoryResolver interface { ResolveGraphqlFactory(subgraphName string) (plan.PlannerFactory[graphql_datasource.Configuration], error) ResolveStaticFactory() (plan.PlannerFactory[staticdatasource.Configuration], error) + InstanceData() InstanceData } type ApiTransportFactory interface { @@ -58,6 +65,7 @@ type DefaultFactoryResolver struct { subscriptionClient graphql_datasource.GraphQLSubscriptionClient factoryLogger abstractlogger.Logger + instanceData InstanceData } func NewDefaultFactoryResolver( @@ -68,6 +76,7 @@ func NewDefaultFactoryResolver( log *zap.Logger, enableSingleFlight bool, enableNetPoll bool, + instanceData InstanceData, ) *DefaultFactoryResolver { transportFactory := NewTransport(transportOptions) @@ -146,6 +155,10 @@ func (d *DefaultFactoryResolver) ResolveStaticFactory() (factory plan.PlannerFac return d.static, nil } +func (d *DefaultFactoryResolver) InstanceData() InstanceData { + return d.instanceData +} + func NewLoader(includeInfo bool, resolver FactoryResolver, logger *zap.Logger) *Loader { return &Loader{ resolver: resolver, @@ -410,8 +423,8 @@ func (l *Loader) Load(engineConfig *nodev1.EngineConfiguration, subgraphs []*nod l.dataSourceMetaData(in), routerEngineConfig.Events, l.logger, - "localhost", - "localhost:8080", + l.resolver.InstanceData().hostName, + l.resolver.InstanceData().listenAddress, ) if err != nil { return nil, err diff --git a/router/core/graph_server.go b/router/core/graph_server.go index 7902711674..310b05f7a5 100644 --- a/router/core/graph_server.go +++ b/router/core/graph_server.go @@ -84,8 +84,7 @@ type ( runtimeMetrics *rmetric.RuntimeMetrics otlpEngineMetrics *rmetric.EngineMetrics prometheusEngineMetrics *rmetric.EngineMetrics - hostName string - routerListenAddr string + instanceData InstanceData } ) @@ -113,8 +112,10 @@ func newGraphServer(ctx context.Context, r *Router, routerConfig *nodev1.RouterC baseRouterConfigVersion: routerConfig.GetVersion(), inFlightRequests: &atomic.Uint64{}, graphMuxList: make([]*graphMux, 0, 1), - routerListenAddr: r.listenAddr, - hostName: r.hostName, + instanceData: InstanceData{ + hostName: r.hostName, + listenAddress: r.listenAddr, + }, } baseOtelAttributes := []attribute.KeyValue{ @@ -925,6 +926,7 @@ func (s *graphServer) buildGraphMux(ctx context.Context, ApolloCompatibilityFlags: s.apolloCompatibilityFlags, ApolloRouterCompatibilityFlags: s.apolloRouterCompatibilityFlags, HeartbeatInterval: s.multipartHeartbeatInterval, + InstanceData: s.instanceData, }, ) if err != nil { From 3b9ac24629ea12614d405ef0b6d45a7770aa607d Mon Sep 17 00:00:00 2001 From: Alessandro Pagnin Date: Tue, 8 Apr 2025 16:33:09 +0200 Subject: [PATCH 012/126] chore: improved naming, simplify code --- .../subgraphs/availability/availability.go | 2 +- .../availability/subgraph/resolver.go | 2 +- demo/pkg/subgraphs/countries/countries.go | 2 +- .../subgraphs/countries/subgraph/resolver.go | 2 +- demo/pkg/subgraphs/employees/employees.go | 2 +- .../subgraphs/employees/subgraph/resolver.go | 2 +- demo/pkg/subgraphs/family/family.go | 2 +- .../pkg/subgraphs/family/subgraph/resolver.go | 2 +- demo/pkg/subgraphs/hobbies/hobbies.go | 2 +- .../subgraphs/hobbies/subgraph/resolver.go | 2 +- demo/pkg/subgraphs/mood/mood.go | 2 +- demo/pkg/subgraphs/mood/subgraph/resolver.go | 2 +- demo/pkg/subgraphs/products/products.go | 2 +- .../subgraphs/products/subgraph/resolver.go | 2 +- demo/pkg/subgraphs/products_fg/products.go | 2 +- .../products_fg/subgraph/resolver.go | 2 +- demo/pkg/subgraphs/subgraphs.go | 17 +- demo/pkg/subgraphs/test1/subgraph/resolver.go | 2 +- demo/pkg/subgraphs/test1/test1.go | 2 +- router-tests/testenv/testenv.go | 8 +- router/core/factoryresolver.go | 10 +- router/core/plan_generator.go | 4 +- router/pkg/pubsub/datasource.go | 20 +- router/pkg/pubsub/datasource/datasource.go | 28 +- router/pkg/pubsub/datasource/factory.go | 10 +- router/pkg/pubsub/datasource/planner.go | 83 ++-- router/pkg/pubsub/datasource/provider.go | 28 ++ .../pkg/pubsub/kafka/{kafka.go => adapter.go} | 54 +-- router/pkg/pubsub/kafka/datasource.go | 129 ------ router/pkg/pubsub/kafka/datasource_impl.go | 121 ------ ...ion_datasource.go => engine_datasource.go} | 4 +- router/pkg/pubsub/kafka/provider.go | 107 +++++ router/pkg/pubsub/kafka/pubsub_datasource.go | 77 ++++ .../pkg/pubsub/nats/{nats.go => adapter.go} | 64 ++- router/pkg/pubsub/nats/datasource.go | 373 ------------------ ...ion_datasource.go => engine_datasource.go} | 6 +- router/pkg/pubsub/nats/provider.go | 155 ++++++++ router/pkg/pubsub/nats/pubsub_datasource.go | 138 +++++++ router/pkg/pubsub/nats/utils.go | 35 ++ 39 files changed, 685 insertions(+), 822 deletions(-) create mode 100644 router/pkg/pubsub/datasource/provider.go rename router/pkg/pubsub/kafka/{kafka.go => adapter.go} (84%) delete mode 100644 router/pkg/pubsub/kafka/datasource.go delete mode 100644 router/pkg/pubsub/kafka/datasource_impl.go rename router/pkg/pubsub/kafka/{subscription_datasource.go => engine_datasource.go} (98%) create mode 100644 router/pkg/pubsub/kafka/provider.go create mode 100644 router/pkg/pubsub/kafka/pubsub_datasource.go rename router/pkg/pubsub/nats/{nats.go => adapter.go} (86%) delete mode 100644 router/pkg/pubsub/nats/datasource.go rename router/pkg/pubsub/nats/{subscription_datasource.go => engine_datasource.go} (98%) create mode 100644 router/pkg/pubsub/nats/provider.go create mode 100644 router/pkg/pubsub/nats/pubsub_datasource.go create mode 100644 router/pkg/pubsub/nats/utils.go diff --git a/demo/pkg/subgraphs/availability/availability.go b/demo/pkg/subgraphs/availability/availability.go index ec693711cb..3bdd747d48 100644 --- a/demo/pkg/subgraphs/availability/availability.go +++ b/demo/pkg/subgraphs/availability/availability.go @@ -8,7 +8,7 @@ import ( "github.com/wundergraph/cosmo/demo/pkg/subgraphs/availability/subgraph/generated" ) -func NewSchema(pubSubBySourceName map[string]*nats.NatsPubSub, pubSubName func(string) string) graphql.ExecutableSchema { +func NewSchema(pubSubBySourceName map[string]*nats.Adapter, pubSubName func(string) string) graphql.ExecutableSchema { return generated.NewExecutableSchema(generated.Config{Resolvers: &subgraph.Resolver{ NatsPubSubByProviderID: pubSubBySourceName, GetPubSubName: pubSubName, diff --git a/demo/pkg/subgraphs/availability/subgraph/resolver.go b/demo/pkg/subgraphs/availability/subgraph/resolver.go index 554b11af76..42feac1afd 100644 --- a/demo/pkg/subgraphs/availability/subgraph/resolver.go +++ b/demo/pkg/subgraphs/availability/subgraph/resolver.go @@ -9,6 +9,6 @@ import ( // It serves as dependency injection for your app, add any dependencies you require here. type Resolver struct { - NatsPubSubByProviderID map[string]*nats.NatsPubSub + NatsPubSubByProviderID map[string]*nats.Adapter GetPubSubName func(string) string } diff --git a/demo/pkg/subgraphs/countries/countries.go b/demo/pkg/subgraphs/countries/countries.go index 3d5940c1e6..ed876f91a0 100644 --- a/demo/pkg/subgraphs/countries/countries.go +++ b/demo/pkg/subgraphs/countries/countries.go @@ -8,7 +8,7 @@ import ( "github.com/wundergraph/cosmo/demo/pkg/subgraphs/countries/subgraph/generated" ) -func NewSchema(pubSubBySourceName map[string]*nats.NatsPubSub) graphql.ExecutableSchema { +func NewSchema(pubSubBySourceName map[string]*nats.Adapter) graphql.ExecutableSchema { return generated.NewExecutableSchema(generated.Config{Resolvers: &subgraph.Resolver{ NatsPubSubByProviderID: pubSubBySourceName, }}) diff --git a/demo/pkg/subgraphs/countries/subgraph/resolver.go b/demo/pkg/subgraphs/countries/subgraph/resolver.go index c1f3775ab1..814b836a0c 100644 --- a/demo/pkg/subgraphs/countries/subgraph/resolver.go +++ b/demo/pkg/subgraphs/countries/subgraph/resolver.go @@ -12,5 +12,5 @@ import ( type Resolver struct { mux sync.Mutex - NatsPubSubByProviderID map[string]*nats.NatsPubSub + NatsPubSubByProviderID map[string]*nats.Adapter } diff --git a/demo/pkg/subgraphs/employees/employees.go b/demo/pkg/subgraphs/employees/employees.go index 5b6b6eae19..d7c67b5daa 100644 --- a/demo/pkg/subgraphs/employees/employees.go +++ b/demo/pkg/subgraphs/employees/employees.go @@ -7,7 +7,7 @@ import ( "github.com/wundergraph/cosmo/router/pkg/pubsub/nats" ) -func NewSchema(natsPubSubByProviderID map[string]*nats.NatsPubSub) graphql.ExecutableSchema { +func NewSchema(natsPubSubByProviderID map[string]*nats.Adapter) graphql.ExecutableSchema { return generated.NewExecutableSchema(generated.Config{Resolvers: &subgraph.Resolver{ NatsPubSubByProviderID: natsPubSubByProviderID, EmployeesData: subgraph.Employees, diff --git a/demo/pkg/subgraphs/employees/subgraph/resolver.go b/demo/pkg/subgraphs/employees/subgraph/resolver.go index 1f75150132..651f1d8321 100644 --- a/demo/pkg/subgraphs/employees/subgraph/resolver.go +++ b/demo/pkg/subgraphs/employees/subgraph/resolver.go @@ -15,7 +15,7 @@ import ( type Resolver struct { mux sync.Mutex - NatsPubSubByProviderID map[string]*nats.NatsPubSub + NatsPubSubByProviderID map[string]*nats.Adapter EmployeesData []*model.Employee } diff --git a/demo/pkg/subgraphs/family/family.go b/demo/pkg/subgraphs/family/family.go index 4a682b538d..6978fd4da1 100644 --- a/demo/pkg/subgraphs/family/family.go +++ b/demo/pkg/subgraphs/family/family.go @@ -8,7 +8,7 @@ import ( "github.com/wundergraph/cosmo/demo/pkg/subgraphs/family/subgraph/generated" ) -func NewSchema(natsPubSubByProviderID map[string]*nats.NatsPubSub) graphql.ExecutableSchema { +func NewSchema(natsPubSubByProviderID map[string]*nats.Adapter) graphql.ExecutableSchema { return generated.NewExecutableSchema(generated.Config{Resolvers: &subgraph.Resolver{ NatsPubSubByProviderID: natsPubSubByProviderID, }}) diff --git a/demo/pkg/subgraphs/family/subgraph/resolver.go b/demo/pkg/subgraphs/family/subgraph/resolver.go index 7c404a867c..d0f9debc31 100644 --- a/demo/pkg/subgraphs/family/subgraph/resolver.go +++ b/demo/pkg/subgraphs/family/subgraph/resolver.go @@ -9,5 +9,5 @@ import ( // It serves as dependency injection for your app, add any dependencies you require here. type Resolver struct { - NatsPubSubByProviderID map[string]*nats.NatsPubSub + NatsPubSubByProviderID map[string]*nats.Adapter } diff --git a/demo/pkg/subgraphs/hobbies/hobbies.go b/demo/pkg/subgraphs/hobbies/hobbies.go index 926b397c6f..32fa49e785 100644 --- a/demo/pkg/subgraphs/hobbies/hobbies.go +++ b/demo/pkg/subgraphs/hobbies/hobbies.go @@ -8,7 +8,7 @@ import ( "github.com/wundergraph/cosmo/demo/pkg/subgraphs/hobbies/subgraph/generated" ) -func NewSchema(natsPubSubByProviderID map[string]*nats.NatsPubSub) graphql.ExecutableSchema { +func NewSchema(natsPubSubByProviderID map[string]*nats.Adapter) graphql.ExecutableSchema { return generated.NewExecutableSchema(generated.Config{Resolvers: &subgraph.Resolver{ NatsPubSubByProviderID: natsPubSubByProviderID, }}) diff --git a/demo/pkg/subgraphs/hobbies/subgraph/resolver.go b/demo/pkg/subgraphs/hobbies/subgraph/resolver.go index 696412a06a..0a73c02da2 100644 --- a/demo/pkg/subgraphs/hobbies/subgraph/resolver.go +++ b/demo/pkg/subgraphs/hobbies/subgraph/resolver.go @@ -12,7 +12,7 @@ import ( // It serves as dependency injection for your app, add any dependencies you require here. type Resolver struct { - NatsPubSubByProviderID map[string]*nats.NatsPubSub + NatsPubSubByProviderID map[string]*nats.Adapter } func (r *Resolver) Employees(hobby model.Hobby) ([]*model.Employee, error) { diff --git a/demo/pkg/subgraphs/mood/mood.go b/demo/pkg/subgraphs/mood/mood.go index 72b6c7118b..f838df05e5 100644 --- a/demo/pkg/subgraphs/mood/mood.go +++ b/demo/pkg/subgraphs/mood/mood.go @@ -8,7 +8,7 @@ import ( "github.com/wundergraph/cosmo/demo/pkg/subgraphs/mood/subgraph/generated" ) -func NewSchema(natsPubSubByProviderID map[string]*nats.NatsPubSub) graphql.ExecutableSchema { +func NewSchema(natsPubSubByProviderID map[string]*nats.Adapter) graphql.ExecutableSchema { return generated.NewExecutableSchema(generated.Config{Resolvers: &subgraph.Resolver{ NatsPubSubByProviderID: natsPubSubByProviderID, }}) diff --git a/demo/pkg/subgraphs/mood/subgraph/resolver.go b/demo/pkg/subgraphs/mood/subgraph/resolver.go index 554b11af76..42feac1afd 100644 --- a/demo/pkg/subgraphs/mood/subgraph/resolver.go +++ b/demo/pkg/subgraphs/mood/subgraph/resolver.go @@ -9,6 +9,6 @@ import ( // It serves as dependency injection for your app, add any dependencies you require here. type Resolver struct { - NatsPubSubByProviderID map[string]*nats.NatsPubSub + NatsPubSubByProviderID map[string]*nats.Adapter GetPubSubName func(string) string } diff --git a/demo/pkg/subgraphs/products/products.go b/demo/pkg/subgraphs/products/products.go index 6a19c4baba..ae165ca566 100644 --- a/demo/pkg/subgraphs/products/products.go +++ b/demo/pkg/subgraphs/products/products.go @@ -8,7 +8,7 @@ import ( "github.com/wundergraph/cosmo/demo/pkg/subgraphs/products/subgraph/generated" ) -func NewSchema(natsPubSubByProviderID map[string]*nats.NatsPubSub) graphql.ExecutableSchema { +func NewSchema(natsPubSubByProviderID map[string]*nats.Adapter) graphql.ExecutableSchema { return generated.NewExecutableSchema(generated.Config{Resolvers: &subgraph.Resolver{ NatsPubSubByProviderID: natsPubSubByProviderID, TopSecretFederationFactsData: subgraph.TopSecretFederationFacts, diff --git a/demo/pkg/subgraphs/products/subgraph/resolver.go b/demo/pkg/subgraphs/products/subgraph/resolver.go index 64543f0a6d..c8a77e87d5 100644 --- a/demo/pkg/subgraphs/products/subgraph/resolver.go +++ b/demo/pkg/subgraphs/products/subgraph/resolver.go @@ -13,6 +13,6 @@ import ( type Resolver struct { mux sync.Mutex - NatsPubSubByProviderID map[string]*nats.NatsPubSub + NatsPubSubByProviderID map[string]*nats.Adapter TopSecretFederationFactsData []model.TopSecretFact } diff --git a/demo/pkg/subgraphs/products_fg/products.go b/demo/pkg/subgraphs/products_fg/products.go index 436c34582b..580998919a 100644 --- a/demo/pkg/subgraphs/products_fg/products.go +++ b/demo/pkg/subgraphs/products_fg/products.go @@ -8,7 +8,7 @@ import ( "github.com/wundergraph/cosmo/demo/pkg/subgraphs/products_fg/subgraph/generated" ) -func NewSchema(natsPubSubByProviderID map[string]*nats.NatsPubSub) graphql.ExecutableSchema { +func NewSchema(natsPubSubByProviderID map[string]*nats.Adapter) graphql.ExecutableSchema { return generated.NewExecutableSchema(generated.Config{Resolvers: &subgraph.Resolver{ NatsPubSubByProviderID: natsPubSubByProviderID, TopSecretFederationFactsData: subgraph.TopSecretFederationFacts, diff --git a/demo/pkg/subgraphs/products_fg/subgraph/resolver.go b/demo/pkg/subgraphs/products_fg/subgraph/resolver.go index c6dca70e73..e20dd809ee 100644 --- a/demo/pkg/subgraphs/products_fg/subgraph/resolver.go +++ b/demo/pkg/subgraphs/products_fg/subgraph/resolver.go @@ -13,6 +13,6 @@ import ( type Resolver struct { mux sync.Mutex - NatsPubSubByProviderID map[string]*nats.NatsPubSub + NatsPubSubByProviderID map[string]*nats.Adapter TopSecretFederationFactsData []model.TopSecretFact } diff --git a/demo/pkg/subgraphs/subgraphs.go b/demo/pkg/subgraphs/subgraphs.go index 0b43b17aff..42858691bc 100644 --- a/demo/pkg/subgraphs/subgraphs.go +++ b/demo/pkg/subgraphs/subgraphs.go @@ -161,7 +161,7 @@ func subgraphHandler(schema graphql.ExecutableSchema) http.Handler { } type SubgraphOptions struct { - NatsPubSubByProviderID map[string]*natsPubsub.NatsPubSub + NatsPubSubByProviderID map[string]*natsPubsub.Adapter GetPubSubName func(string) string } @@ -207,10 +207,19 @@ func New(ctx context.Context, config *Config) (*Subgraphs, error) { url = defaultSourceNameURL } - natsPubSubByProviderID := map[string]*natsPubsub.NatsPubSub{ - "default": natsPubsub.NewConnector(zap.NewNop(), url, []nats.Option{}, "hostname", "test").New(ctx), - "my-nats": natsPubsub.NewConnector(zap.NewNop(), url, []nats.Option{}, "hostname", "test").New(ctx), + natsPubSubByProviderID := map[string]*natsPubsub.Adapter{} + + defaultAdapter, err := natsPubsub.NewAdapter(ctx, zap.NewNop(), url, []nats.Option{}, "hostname", "test") + if err != nil { + return nil, fmt.Errorf("failed to create default nats adapter: %w", err) + } + natsPubSubByProviderID["default"] = defaultAdapter + + myNatsAdapter, err := natsPubsub.NewAdapter(ctx, zap.NewNop(), url, []nats.Option{}, "hostname", "test") + if err != nil { + return nil, fmt.Errorf("failed to create my-nats adapter: %w", err) } + natsPubSubByProviderID["my-nats"] = myNatsAdapter defaultConnection, err := nats.Connect(url) if err != nil { diff --git a/demo/pkg/subgraphs/test1/subgraph/resolver.go b/demo/pkg/subgraphs/test1/subgraph/resolver.go index 7c404a867c..d0f9debc31 100644 --- a/demo/pkg/subgraphs/test1/subgraph/resolver.go +++ b/demo/pkg/subgraphs/test1/subgraph/resolver.go @@ -9,5 +9,5 @@ import ( // It serves as dependency injection for your app, add any dependencies you require here. type Resolver struct { - NatsPubSubByProviderID map[string]*nats.NatsPubSub + NatsPubSubByProviderID map[string]*nats.Adapter } diff --git a/demo/pkg/subgraphs/test1/test1.go b/demo/pkg/subgraphs/test1/test1.go index 8b74990bc4..5af91d1172 100644 --- a/demo/pkg/subgraphs/test1/test1.go +++ b/demo/pkg/subgraphs/test1/test1.go @@ -8,7 +8,7 @@ import ( "github.com/wundergraph/cosmo/demo/pkg/subgraphs/test1/subgraph/generated" ) -func NewSchema(natsPubSubByProviderID map[string]*nats.NatsPubSub) graphql.ExecutableSchema { +func NewSchema(natsPubSubByProviderID map[string]*nats.Adapter) graphql.ExecutableSchema { return generated.NewExecutableSchema(generated.Config{Resolvers: &subgraph.Resolver{ NatsPubSubByProviderID: natsPubSubByProviderID, }}) diff --git a/router-tests/testenv/testenv.go b/router-tests/testenv/testenv.go index e567cf0186..d0d915999d 100644 --- a/router-tests/testenv/testenv.go +++ b/router-tests/testenv/testenv.go @@ -2090,13 +2090,15 @@ func WSWriteJSON(t testing.TB, conn *websocket.Conn, v interface{}) (err error) func subgraphOptions(ctx context.Context, t testing.TB, logger *zap.Logger, natsData *NatsData, pubSubName func(string) string) *subgraphs.SubgraphOptions { if natsData == nil { return &subgraphs.SubgraphOptions{ - NatsPubSubByProviderID: map[string]*pubsubNats.NatsPubSub{}, + NatsPubSubByProviderID: map[string]*pubsubNats.Adapter{}, GetPubSubName: pubSubName, } } - natsPubSubByProviderID := make(map[string]*pubsubNats.NatsPubSub, len(demoNatsProviders)) + natsPubSubByProviderID := make(map[string]*pubsubNats.Adapter, len(demoNatsProviders)) for _, sourceName := range demoNatsProviders { - natsPubSubByProviderID[sourceName] = pubsubNats.NewConnector(logger, natsData.Params[0].Url, natsData.Params[0].Opts, "hostname", "listenaddr").New(ctx) + adapter, err := pubsubNats.NewAdapter(ctx, logger, natsData.Params[0].Url, natsData.Params[0].Opts, "hostname", "listenaddr") + require.NoError(t, err) + natsPubSubByProviderID[sourceName] = adapter } return &subgraphs.SubgraphOptions{ diff --git a/router/core/factoryresolver.go b/router/core/factoryresolver.go index 8d44ecf25d..4499700dcb 100644 --- a/router/core/factoryresolver.go +++ b/router/core/factoryresolver.go @@ -272,7 +272,7 @@ func (l *Loader) Load(engineConfig *nodev1.EngineConfiguration, subgraphs []*nod } for _, in := range engineConfig.DatasourceConfigurations { - var outs []plan.DataSource + var out plan.DataSource switch in.Kind { case nodev1.DataSourceKind_STATIC: @@ -281,7 +281,6 @@ func (l *Loader) Load(engineConfig *nodev1.EngineConfiguration, subgraphs []*nod return nil, err } - var out plan.DataSource out, err = plan.NewDataSourceConfiguration[staticdatasource.Configuration]( in.Id, factory, @@ -293,7 +292,6 @@ func (l *Loader) Load(engineConfig *nodev1.EngineConfiguration, subgraphs []*nod if err != nil { return nil, fmt.Errorf("error creating data source configuration for data source %s: %w", in.Id, err) } - outs = append(outs, out) case nodev1.DataSourceKind_GRAPHQL: header := http.Header{} @@ -401,7 +399,6 @@ func (l *Loader) Load(engineConfig *nodev1.EngineConfiguration, subgraphs []*nod return nil, err } - var out plan.DataSource out, err = plan.NewDataSourceConfigurationWithName[graphql_datasource.Configuration]( in.Id, dataSourceName, @@ -412,12 +409,11 @@ func (l *Loader) Load(engineConfig *nodev1.EngineConfiguration, subgraphs []*nod if err != nil { return nil, fmt.Errorf("error creating data source configuration for data source %s: %w", in.Id, err) } - outs = append(outs, out) case nodev1.DataSourceKind_PUBSUB: var err error - outs, err = pubsub.GetDataSourcesFromConfig( + out, err = pubsub.GetDataSourceFromConfig( context.Background(), in, l.dataSourceMetaData(in), @@ -433,7 +429,7 @@ func (l *Loader) Load(engineConfig *nodev1.EngineConfiguration, subgraphs []*nod return nil, fmt.Errorf("unknown data source type %q", in.Kind) } - outConfig.DataSources = append(outConfig.DataSources, outs...) + outConfig.DataSources = append(outConfig.DataSources, out) } return &outConfig, nil } diff --git a/router/core/plan_generator.go b/router/core/plan_generator.go index e5c8025684..43e8e344b6 100644 --- a/router/core/plan_generator.go +++ b/router/core/plan_generator.go @@ -238,8 +238,8 @@ func (pg *PlanGenerator) buildRouterConfig(configFilePath string) (*nodev1.Route func (pg *PlanGenerator) loadConfiguration(routerConfig *nodev1.RouterConfig, logger *zap.Logger, maxDataSourceCollectorsConcurrency uint) error { routerEngineConfig := RouterEngineConfiguration{} - natSources := map[string]*nats.NatsPubSub{} - kafkaSources := map[string]*kafka.KafkaPubSub{} + natSources := map[string]*nats.Adapter{} + kafkaSources := map[string]*kafka.Adapter{} for _, ds := range routerConfig.GetEngineConfig().GetDatasourceConfigurations() { if ds.GetKind() != nodev1.DataSourceKind_PUBSUB || ds.GetCustomEvents() == nil { continue diff --git a/router/pkg/pubsub/datasource.go b/router/pkg/pubsub/datasource.go index b763cd38e3..d55b8f5532 100644 --- a/router/pkg/pubsub/datasource.go +++ b/router/pkg/pubsub/datasource.go @@ -15,32 +15,32 @@ import ( _ "github.com/wundergraph/cosmo/router/pkg/pubsub/nats" ) -func GetDataSourcesFromConfig(ctx context.Context, in *nodev1.DataSourceConfiguration, dsMeta *plan.DataSourceMetadata, config config.EventsConfiguration, logger *zap.Logger, hostName string, routerListenAddr string) ([]plan.DataSource, error) { - var pubSubs datasource.PubSubGeneralImplementerList +func GetDataSourceFromConfig(ctx context.Context, in *nodev1.DataSourceConfiguration, dsMeta *plan.DataSourceMetadata, config config.EventsConfiguration, logger *zap.Logger, hostName string, routerListenAddr string) (plan.DataSource, error) { + var providers []datasource.PubSubProvider - for _, pubSub := range datasource.GetRegisteredPubSubs() { - pubSub, err := pubSub(ctx, in, dsMeta, config, logger, hostName, routerListenAddr) + for _, providerFactory := range datasource.GetRegisteredProviderFactories() { + provider, err := providerFactory(ctx, in, dsMeta, config, logger, hostName, routerListenAddr) if err != nil { return nil, err } - if pubSub != nil { - pubSubs = append(pubSubs, pubSub) + if provider != nil { + providers = append(providers, provider) } } - if len(pubSubs) == 0 { + if len(providers) == 0 { return nil, fmt.Errorf("no pubsub data sources found for data source %s", in.Id) } ds, err := plan.NewDataSourceConfiguration( in.Id, - datasource.NewFactory(ctx, config, pubSubs), + datasource.NewFactory(ctx, config, providers), dsMeta, - pubSubs, + providers, ) if err != nil { return nil, err } - return []plan.DataSource{ds}, nil + return ds, nil } diff --git a/router/pkg/pubsub/datasource/datasource.go b/router/pkg/pubsub/datasource/datasource.go index 04b5ab0552..458a44e709 100644 --- a/router/pkg/pubsub/datasource/datasource.go +++ b/router/pkg/pubsub/datasource/datasource.go @@ -1,28 +1,14 @@ package datasource import ( - "context" - nodev1 "github.com/wundergraph/cosmo/router/gen/proto/wg/cosmo/node/v1" - "github.com/wundergraph/cosmo/router/pkg/config" - "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/plan" - "go.uber.org/zap" + "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/resolve" ) -type Getter func(ctx context.Context, in *nodev1.DataSourceConfiguration, dsMeta *plan.DataSourceMetadata, config config.EventsConfiguration, logger *zap.Logger, hostName string, routerListenAddr string) (PubSubGeneralImplementer, error) - -var pubSubs []Getter - -func RegisterPubSub(pubSub Getter) { - pubSubs = append(pubSubs, pubSub) -} - -func GetRegisteredPubSubs() []Getter { - return pubSubs -} - -type ArgumentTemplateCallback func(tpl string) (string, error) - -type PubSubImplementer interface { - PrepareProviders(ctx context.Context, in *nodev1.DataSourceConfiguration, dsMeta *plan.DataSourceMetadata, config config.EventsConfiguration) error +type PubSubDataSource interface { + GetResolveDataSource() (resolve.DataSource, error) + GetResolveDataSourceInput(event []byte) (string, error) + GetEngineEventConfiguration() *nodev1.EngineEventConfiguration + GetResolveDataSourceSubscription() (resolve.SubscriptionDataSource, error) + GetResolveDataSourceSubscriptionInput() (string, error) } diff --git a/router/pkg/pubsub/datasource/factory.go b/router/pkg/pubsub/datasource/factory.go index 25a1564ae2..ce22f9934b 100644 --- a/router/pkg/pubsub/datasource/factory.go +++ b/router/pkg/pubsub/datasource/factory.go @@ -9,7 +9,7 @@ import ( "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/plan" ) -func NewFactory(executionContext context.Context, config config.EventsConfiguration, providers PubSubGeneralImplementerList) *Factory { +func NewFactory(executionContext context.Context, config config.EventsConfiguration, providers []PubSubProvider) *Factory { return &Factory{ providers: providers, executionContext: executionContext, @@ -18,14 +18,14 @@ func NewFactory(executionContext context.Context, config config.EventsConfigurat } type Factory struct { - providers PubSubGeneralImplementerList + providers []PubSubProvider executionContext context.Context config config.EventsConfiguration } -func (f *Factory) Planner(_ abstractlogger.Logger) plan.DataSourcePlanner[PubSubGeneralImplementerList] { +func (f *Factory) Planner(_ abstractlogger.Logger) plan.DataSourcePlanner[[]PubSubProvider] { return &Planner{ - pubSubs: f.providers, + providers: f.providers, } } @@ -33,6 +33,6 @@ func (f *Factory) Context() context.Context { return f.executionContext } -func (f *Factory) UpstreamSchema(dataSourceConfig plan.DataSourceConfiguration[PubSubGeneralImplementerList]) (*ast.Document, bool) { +func (f *Factory) UpstreamSchema(dataSourceConfig plan.DataSourceConfiguration[[]PubSubProvider]) (*ast.Document, bool) { return nil, false } diff --git a/router/pkg/pubsub/datasource/planner.go b/router/pkg/pubsub/datasource/planner.go index 21f0244c65..bc035e10ba 100644 --- a/router/pkg/pubsub/datasource/planner.go +++ b/router/pkg/pubsub/datasource/planner.go @@ -4,7 +4,6 @@ import ( "fmt" "strings" - nodev1 "github.com/wundergraph/cosmo/router/gen/proto/wg/cosmo/node/v1" "github.com/wundergraph/cosmo/router/pkg/pubsub/utils" "github.com/wundergraph/graphql-go-tools/v2/pkg/ast" "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/argument_templates" @@ -12,40 +11,13 @@ import ( "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/resolve" ) -type EventConfigType interface { - GetResolveDataSource() (resolve.DataSource, error) - GetResolveDataSourceInput(event []byte) (string, error) - GetEngineEventConfiguration() *nodev1.EngineEventConfiguration - GetResolveDataSourceSubscription() (resolve.SubscriptionDataSource, error) - GetResolveDataSourceSubscriptionInput() (string, error) -} - -type PubSubGeneralImplementerList []PubSubGeneralImplementer - -func (p *PubSubGeneralImplementerList) FindEventConfig(typeName string, fieldName string, extractFn func(string) (string, error)) (EventConfigType, error) { - for _, pubSub := range *p { - eventConfigV, err := pubSub.FindEventConfig(typeName, fieldName, extractFn) - if err != nil { - return nil, err - } - if eventConfigV != nil { - return eventConfigV, nil - } - } - return nil, fmt.Errorf("failed to find event config for type name \"%s\" and field name \"%s\"", typeName, fieldName) -} - -type PubSubGeneralImplementer interface { - FindEventConfig(typeName string, fieldName string, extractFn func(string) (string, error)) (EventConfigType, error) -} - type Planner struct { - id int - pubSubs PubSubGeneralImplementerList - eventConfig EventConfigType - rootFieldRef int - variables resolve.Variables - visitor *plan.Visitor + id int + providers []PubSubProvider + pubSubDataSource PubSubDataSource + rootFieldRef int + variables resolve.Variables + visitor *plan.Visitor } func (p *Planner) SetID(id int) { @@ -68,23 +40,23 @@ func (p *Planner) DataSourcePlanningBehavior() plan.DataSourcePlanningBehavior { } } -func (p *Planner) Register(visitor *plan.Visitor, configuration plan.DataSourceConfiguration[PubSubGeneralImplementerList], _ plan.DataSourcePlannerConfiguration) error { +func (p *Planner) Register(visitor *plan.Visitor, configuration plan.DataSourceConfiguration[[]PubSubProvider], _ plan.DataSourcePlannerConfiguration) error { p.visitor = visitor visitor.Walker.RegisterEnterFieldVisitor(p) visitor.Walker.RegisterEnterDocumentVisitor(p) - p.pubSubs = configuration.CustomConfiguration() + p.providers = configuration.CustomConfiguration() return nil } func (p *Planner) ConfigureFetch() resolve.FetchConfiguration { - if p.eventConfig == nil { + if p.pubSubDataSource == nil { // p.visitor.Walker.StopWithInternalErr(fmt.Errorf("failed to configure fetch: event config is nil")) return resolve.FetchConfiguration{} } var dataSource resolve.DataSource - dataSource, err := p.eventConfig.GetResolveDataSource() + dataSource, err := p.pubSubDataSource.GetResolveDataSource() if err != nil { p.visitor.Walker.StopWithInternalErr(fmt.Errorf("failed to get data source: %w", err)) return resolve.FetchConfiguration{} @@ -96,7 +68,7 @@ func (p *Planner) ConfigureFetch() resolve.FetchConfiguration { return resolve.FetchConfiguration{} } - input, err := p.eventConfig.GetResolveDataSourceInput(event) + input, err := p.pubSubDataSource.GetResolveDataSourceInput(event) if err != nil { p.visitor.Walker.StopWithInternalErr(fmt.Errorf("failed to get resolve data source input: %w", err)) return resolve.FetchConfiguration{} @@ -107,24 +79,24 @@ func (p *Planner) ConfigureFetch() resolve.FetchConfiguration { Variables: p.variables, DataSource: dataSource, PostProcessing: resolve.PostProcessingConfiguration{ - MergePath: []string{p.eventConfig.GetEngineEventConfiguration().GetFieldName()}, + MergePath: []string{p.pubSubDataSource.GetEngineEventConfiguration().GetFieldName()}, }, } } func (p *Planner) ConfigureSubscription() plan.SubscriptionConfiguration { - if p.eventConfig == nil { + if p.pubSubDataSource == nil { // p.visitor.Walker.StopWithInternalErr(fmt.Errorf("failed to configure subscription: event manager is nil")) return plan.SubscriptionConfiguration{} } - dataSource, err := p.eventConfig.GetResolveDataSourceSubscription() + dataSource, err := p.pubSubDataSource.GetResolveDataSourceSubscription() if err != nil { p.visitor.Walker.StopWithInternalErr(fmt.Errorf("failed to get resolve data source subscription: %w", err)) return plan.SubscriptionConfiguration{} } - input, err := p.eventConfig.GetResolveDataSourceSubscriptionInput() + input, err := p.pubSubDataSource.GetResolveDataSourceSubscriptionInput() if err != nil { p.visitor.Walker.StopWithInternalErr(fmt.Errorf("failed to get resolve data source subscription input: %w", err)) return plan.SubscriptionConfiguration{} @@ -135,7 +107,7 @@ func (p *Planner) ConfigureSubscription() plan.SubscriptionConfiguration { Variables: p.variables, DataSource: dataSource, PostProcessing: resolve.PostProcessingConfiguration{ - MergePath: []string{p.eventConfig.GetEngineEventConfiguration().GetFieldName()}, + MergePath: []string{p.pubSubDataSource.GetEngineEventConfiguration().GetFieldName()}, }, } } @@ -221,10 +193,23 @@ func (p *Planner) EnterField(ref int) { return p.extractArgumentTemplate(ref, tpl) } - eventConfigV, err := p.pubSubs.FindEventConfig(typeName, fieldName, extractFn) - if err != nil { - p.visitor.Walker.StopWithInternalErr(fmt.Errorf("failed to find event config for type name \"%s\" and field name \"%s\": %w", typeName, fieldName, err)) - return + var pubSubDataSource PubSubDataSource + var err error + + for _, pubSub := range p.providers { + pubSubDataSource, err = pubSub.FindPubSubDataSource(typeName, fieldName, extractFn) + if err != nil { + p.visitor.Walker.StopWithInternalErr(fmt.Errorf("failed to find event config for type name \"%s\" and field name \"%s\": %w", typeName, fieldName, err)) + return + } + if pubSubDataSource != nil { + break + } } - p.eventConfig = eventConfigV + + if pubSubDataSource == nil { + p.visitor.Walker.StopWithInternalErr(fmt.Errorf("failed to find event config for type name \"%s\" and field name \"%s\"", typeName, fieldName)) + } + + p.pubSubDataSource = pubSubDataSource } diff --git a/router/pkg/pubsub/datasource/provider.go b/router/pkg/pubsub/datasource/provider.go new file mode 100644 index 0000000000..206d46ba43 --- /dev/null +++ b/router/pkg/pubsub/datasource/provider.go @@ -0,0 +1,28 @@ +package datasource + +import ( + "context" + + nodev1 "github.com/wundergraph/cosmo/router/gen/proto/wg/cosmo/node/v1" + "github.com/wundergraph/cosmo/router/pkg/config" + "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/plan" + "go.uber.org/zap" +) + +type ProviderFactory func(ctx context.Context, in *nodev1.DataSourceConfiguration, dsMeta *plan.DataSourceMetadata, config config.EventsConfiguration, logger *zap.Logger, hostName string, routerListenAddr string) (PubSubProvider, error) + +var pubSubsFactories []ProviderFactory + +func RegisterProviderFactory(pubSub ProviderFactory) { + pubSubsFactories = append(pubSubsFactories, pubSub) +} + +func GetRegisteredProviderFactories() []ProviderFactory { + return pubSubsFactories +} + +type ArgumentTemplateCallback func(tpl string) (string, error) + +type PubSubProvider interface { + FindPubSubDataSource(typeName string, fieldName string, extractFn ArgumentTemplateCallback) (PubSubDataSource, error) +} diff --git a/router/pkg/pubsub/kafka/kafka.go b/router/pkg/pubsub/kafka/adapter.go similarity index 84% rename from router/pkg/pubsub/kafka/kafka.go rename to router/pkg/pubsub/kafka/adapter.go index ef4920b83e..3f40f1e8a1 100644 --- a/router/pkg/pubsub/kafka/kafka.go +++ b/router/pkg/pubsub/kafka/adapter.go @@ -19,12 +19,6 @@ var ( errClientClosed = errors.New("client closed") ) -type connector struct { - writeClient *LazyClient - opts []kgo.Opt - logger *zap.Logger -} - type LazyClient struct { once sync.Once client *kgo.Client @@ -55,45 +49,33 @@ func NewLazyClient(opts ...kgo.Opt) *LazyClient { } } -func NewConnector(logger *zap.Logger, opts []kgo.Opt) (*connector, error) { - writeClient := NewLazyClient(append(opts, +func NewAdapter(ctx context.Context, logger *zap.Logger, opts []kgo.Opt) (*Adapter, error) { + ctx, cancel := context.WithCancel(ctx) + if logger == nil { + logger = zap.NewNop() + } + + client := NewLazyClient(append(opts, // For observability, we set the client ID to "router" kgo.ClientID("cosmo.router.producer"))..., ) - return &connector{ - writeClient: writeClient, - opts: opts, - logger: logger, - }, nil -} - -func (c *connector) New(ctx context.Context) *KafkaPubSub { - - ctx, cancel := context.WithCancel(ctx) - - if c.logger == nil { - c.logger = zap.NewNop() - } - - ps := &KafkaPubSub{ + return &Adapter{ ctx: ctx, - logger: c.logger.With(zap.String("pubsub", "kafka")), - opts: c.opts, - writeClient: c.writeClient, + logger: logger.With(zap.String("pubsub", "kafka")), + opts: opts, + writeClient: client, closeWg: sync.WaitGroup{}, cancel: cancel, - } - - return ps + }, nil } -// KafkaPubSub is a Kafka pubsub implementation. +// Adapter is a Kafka pubsub implementation. // It uses the franz-go Kafka client to consume and produce messages. // The pubsub is stateless and does not store any messages. // It uses a single write client to produce messages and a client per topic to consume messages. // Each client polls the Kafka topic for new records and updates the subscriptions with the new data. -type KafkaPubSub struct { +type Adapter struct { ctx context.Context opts []kgo.Opt logger *zap.Logger @@ -103,7 +85,7 @@ type KafkaPubSub struct { } // topicPoller polls the Kafka topic for new records and calls the updateTriggers function. -func (p *KafkaPubSub) topicPoller(ctx context.Context, client *kgo.Client, updater resolve.SubscriptionUpdater) error { +func (p *Adapter) topicPoller(ctx context.Context, client *kgo.Client, updater resolve.SubscriptionUpdater) error { for { select { case <-p.ctx.Done(): // Close the poller if the application context was canceled @@ -157,7 +139,7 @@ func (p *KafkaPubSub) topicPoller(ctx context.Context, client *kgo.Client, updat // Subscribe subscribes to the given topics and updates the subscription updater. // The engine already deduplicates subscriptions with the same topics, stream configuration, extensions, headers, etc. -func (p *KafkaPubSub) Subscribe(ctx context.Context, event SubscriptionEventConfiguration, updater resolve.SubscriptionUpdater) error { +func (p *Adapter) Subscribe(ctx context.Context, event SubscriptionEventConfiguration, updater resolve.SubscriptionUpdater) error { log := p.logger.With( zap.String("provider_id", event.ProviderID), @@ -207,7 +189,7 @@ func (p *KafkaPubSub) Subscribe(ctx context.Context, event SubscriptionEventConf // Publish publishes the given event to the Kafka topic in a non-blocking way. // Publish errors are logged and returned as a pubsub error. // The event is written with a dedicated write client. -func (p *KafkaPubSub) Publish(ctx context.Context, event PublishEventConfiguration) error { +func (p *Adapter) Publish(ctx context.Context, event PublishEventConfiguration) error { log := p.logger.With( zap.String("provider_id", event.ProviderID), zap.String("method", "publish"), @@ -241,7 +223,7 @@ func (p *KafkaPubSub) Publish(ctx context.Context, event PublishEventConfigurati return nil } -func (p *KafkaPubSub) Shutdown(ctx context.Context) error { +func (p *Adapter) Shutdown(ctx context.Context) error { err := p.writeClient.GetClient().Flush(ctx) if err != nil { diff --git a/router/pkg/pubsub/kafka/datasource.go b/router/pkg/pubsub/kafka/datasource.go deleted file mode 100644 index e40b5f4f2c..0000000000 --- a/router/pkg/pubsub/kafka/datasource.go +++ /dev/null @@ -1,129 +0,0 @@ -package kafka - -import ( - "context" - "crypto/tls" - "fmt" - "time" - - "github.com/twmb/franz-go/pkg/kgo" - "github.com/twmb/franz-go/pkg/sasl/plain" - nodev1 "github.com/wundergraph/cosmo/router/gen/proto/wg/cosmo/node/v1" - "github.com/wundergraph/cosmo/router/pkg/config" - "github.com/wundergraph/cosmo/router/pkg/pubsub/datasource" - "go.uber.org/zap" - - "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/plan" -) - -func GetPlanDataSource(ctx context.Context, in *nodev1.DataSourceConfiguration, dsMeta *plan.DataSourceMetadata, config config.EventsConfiguration, logger *zap.Logger, hostName string, routerListenAddr string) (datasource.PubSubGeneralImplementer, error) { - if kafkaData := in.GetCustomEvents().GetKafka(); kafkaData != nil { - k := NewPubSub(logger) - err := k.PrepareProviders(ctx, in, dsMeta, config) - if err != nil { - return nil, err - } - return k.config, nil - } - - return nil, nil -} - -func init() { - datasource.RegisterPubSub(GetPlanDataSource) -} - -// var _ datasource.PubSubImplementer[*KafkaPubSub] = &Kafka{} - -type Kafka struct { - logger *zap.Logger - providers map[string]*KafkaPubSub - config *Configuration -} - -// buildKafkaOptions creates a list of kgo.Opt options for the given Kafka event source configuration. -// Only general options like TLS, SASL, etc. are configured here. Specific options like topics, etc. are -// configured in the KafkaPubSub implementation. -func buildKafkaOptions(eventSource config.KafkaEventSource) ([]kgo.Opt, error) { - opts := []kgo.Opt{ - kgo.SeedBrokers(eventSource.Brokers...), - // Ensure proper timeouts are set - kgo.ProduceRequestTimeout(10 * time.Second), - kgo.ConnIdleTimeout(60 * time.Second), - } - - if eventSource.TLS != nil && eventSource.TLS.Enabled { - opts = append(opts, - // Configure TLS. Uses SystemCertPool for RootCAs by default. - kgo.DialTLSConfig(new(tls.Config)), - ) - } - - if eventSource.Authentication != nil && eventSource.Authentication.SASLPlain.Username != nil && eventSource.Authentication.SASLPlain.Password != nil { - opts = append(opts, kgo.SASL(plain.Auth{ - User: *eventSource.Authentication.SASLPlain.Username, - Pass: *eventSource.Authentication.SASLPlain.Password, - }.AsMechanism())) - } - - return opts, nil -} - -func (k *Kafka) PrepareProviders(ctx context.Context, in *nodev1.DataSourceConfiguration, dsMeta *plan.DataSourceMetadata, config config.EventsConfiguration) error { - definedProviders := make(map[string]bool) - for _, provider := range config.Providers.Kafka { - definedProviders[provider.ID] = true - } - usedProviders := make(map[string]bool) - for _, event := range in.CustomEvents.GetKafka() { - if !definedProviders[event.EngineEventConfiguration.ProviderId] { - return fmt.Errorf("failed to find Kafka provider with ID %s", event.EngineEventConfiguration.ProviderId) - } - usedProviders[event.EngineEventConfiguration.ProviderId] = true - } - for _, provider := range config.Providers.Kafka { - if !usedProviders[provider.ID] { - continue - } - options, err := buildKafkaOptions(provider) - if err != nil { - return fmt.Errorf("failed to build options for Kafka provider with ID \"%s\": %w", provider.ID, err) - } - ps, err := NewConnector(k.logger, options) - if err != nil { - return fmt.Errorf("failed to create connection for Kafka provider with ID \"%s\": %w", provider.ID, err) - } - k.providers[provider.ID] = ps.New(ctx) - } - k.config = &Configuration{ - EventConfiguration: in.CustomEvents.GetKafka(), - Logger: k.logger, - Providers: k.providers, - } - return nil -} - -func (k *Kafka) GetPubSubGeneralImplementerList() datasource.PubSubGeneralImplementer { - return k.config -} - -// func (k *Kafka) ConnectProviders(ctx context.Context) error { -// for _, provider := range k.providers { -// err := provider.Connect() -// if err != nil { -// return fmt.Errorf("failed to connect to Kafka provider with ID \"%s\": %w", provider.ID, err) -// } -// } -// return nil -// } - -// func (k *Kafka) GetFactory(executionContext context.Context, config config.EventsConfiguration) *datasource.Factory { -// return datasource.NewFactory(executionContext, config, k.config) -// } - -func NewPubSub(logger *zap.Logger) Kafka { - return Kafka{ - providers: map[string]*KafkaPubSub{}, - logger: logger, - } -} diff --git a/router/pkg/pubsub/kafka/datasource_impl.go b/router/pkg/pubsub/kafka/datasource_impl.go deleted file mode 100644 index a3766b2994..0000000000 --- a/router/pkg/pubsub/kafka/datasource_impl.go +++ /dev/null @@ -1,121 +0,0 @@ -package kafka - -import ( - "encoding/json" - "fmt" - - nodev1 "github.com/wundergraph/cosmo/router/gen/proto/wg/cosmo/node/v1" - "github.com/wundergraph/cosmo/router/pkg/pubsub/datasource" - "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/resolve" - "go.uber.org/zap" -) - -type Configuration struct { - EventConfiguration []*nodev1.KafkaEventConfiguration - Logger *zap.Logger - Providers map[string]*KafkaPubSub -} - -func (c *Configuration) GetEventsDataConfigurations() []*nodev1.KafkaEventConfiguration { - return c.EventConfiguration -} - -func (c *Configuration) GetResolveDataSource(eventConfig *nodev1.KafkaEventConfiguration, pubsub *KafkaPubSub) (resolve.DataSource, error) { - var dataSource resolve.DataSource - - typeName := eventConfig.GetEngineEventConfiguration().GetType() - switch typeName { - case nodev1.EventType_PUBLISH: - dataSource = &KafkaPublishDataSource{ - pubSub: pubsub, - } - default: - return nil, fmt.Errorf("failed to configure fetch: invalid event type \"%s\" for Kafka", typeName.String()) - } - - return dataSource, nil -} - -func (c *Configuration) GetResolveDataSourceSubscription(eventConfig *nodev1.KafkaEventConfiguration, pubsub *KafkaPubSub) (resolve.SubscriptionDataSource, error) { - return &SubscriptionSource{ - pubSub: pubsub, - }, nil -} - -func (c *Configuration) GetResolveDataSourceSubscriptionInput(eventConfig *nodev1.KafkaEventConfiguration, pubsub *KafkaPubSub) (string, error) { - providerId := c.GetProviderId(eventConfig) - evtCfg := SubscriptionEventConfiguration{ - ProviderID: providerId, - Topics: eventConfig.GetTopics(), - } - object, err := json.Marshal(evtCfg) - if err != nil { - return "", fmt.Errorf("failed to marshal event subscription streamConfiguration") - } - return string(object), nil -} - -func (c *Configuration) GetResolveDataSourceInput(eventConfig *nodev1.KafkaEventConfiguration, event []byte) (string, error) { - topics := eventConfig.GetTopics() - - if len(topics) != 1 { - return "", fmt.Errorf("publish and request events should define one topic but received %d", len(topics)) - } - - topic := topics[0] - - providerId := c.GetProviderId(eventConfig) - - evtCfg := PublishEventConfiguration{ - ProviderID: providerId, - Topic: topic, - Data: event, - } - - return evtCfg.MarshalJSONTemplate(), nil -} - -func (c *Configuration) GetProviderId(eventConfig *nodev1.KafkaEventConfiguration) string { - return eventConfig.GetEngineEventConfiguration().GetProviderId() -} -func (c *Configuration) FindEventConfig(typeName string, fieldName string, extractFn func(string) (string, error)) (datasource.EventConfigType, error) { - for _, cfg := range c.EventConfiguration { - if cfg.GetEngineEventConfiguration().GetTypeName() == typeName && cfg.GetEngineEventConfiguration().GetFieldName() == fieldName { - return &SelectedConfiguration{ - Provider: c.Providers[c.GetProviderId(cfg)], - EventConfiguration: cfg, - }, nil - } - } - return nil, nil -} - -type SelectedConfiguration struct { - Config *Configuration - EventConfiguration *nodev1.KafkaEventConfiguration - Provider *KafkaPubSub -} - -func (c *SelectedConfiguration) GetEngineEventConfiguration() *nodev1.EngineEventConfiguration { - return c.EventConfiguration.GetEngineEventConfiguration() -} - -func (c *SelectedConfiguration) GetResolveDataSource() (resolve.DataSource, error) { - return c.Config.GetResolveDataSource(c.EventConfiguration, c.Provider) -} - -func (c *SelectedConfiguration) GetResolveDataSourceInput(event []byte) (string, error) { - return c.Config.GetResolveDataSourceInput(c.EventConfiguration, event) -} - -func (c *SelectedConfiguration) GetResolveDataSourceSubscription() (resolve.SubscriptionDataSource, error) { - return c.Config.GetResolveDataSourceSubscription(c.EventConfiguration, c.Provider) -} - -func (c *SelectedConfiguration) GetResolveDataSourceSubscriptionInput() (string, error) { - return c.Config.GetResolveDataSourceSubscriptionInput(c.EventConfiguration, c.Provider) -} - -func (c *SelectedConfiguration) GetProviderId() string { - return c.Config.GetProviderId(c.EventConfiguration) -} diff --git a/router/pkg/pubsub/kafka/subscription_datasource.go b/router/pkg/pubsub/kafka/engine_datasource.go similarity index 98% rename from router/pkg/pubsub/kafka/subscription_datasource.go rename to router/pkg/pubsub/kafka/engine_datasource.go index 0cdc230e87..9b71b24b89 100644 --- a/router/pkg/pubsub/kafka/subscription_datasource.go +++ b/router/pkg/pubsub/kafka/engine_datasource.go @@ -29,7 +29,7 @@ func (s *PublishEventConfiguration) MarshalJSONTemplate() string { } type SubscriptionSource struct { - pubSub *KafkaPubSub + pubSub *Adapter } func (s *SubscriptionSource) UniqueRequestID(ctx *resolve.Context, input []byte, xxh *xxhash.Digest) error { @@ -63,7 +63,7 @@ func (s *SubscriptionSource) Start(ctx *resolve.Context, input []byte, updater r } type KafkaPublishDataSource struct { - pubSub *KafkaPubSub + pubSub *Adapter } func (s *KafkaPublishDataSource) Load(ctx context.Context, input []byte, out *bytes.Buffer) error { diff --git a/router/pkg/pubsub/kafka/provider.go b/router/pkg/pubsub/kafka/provider.go new file mode 100644 index 0000000000..f2cc6d5924 --- /dev/null +++ b/router/pkg/pubsub/kafka/provider.go @@ -0,0 +1,107 @@ +package kafka + +import ( + "context" + "crypto/tls" + "fmt" + "time" + + "github.com/twmb/franz-go/pkg/kgo" + "github.com/twmb/franz-go/pkg/sasl/plain" + nodev1 "github.com/wundergraph/cosmo/router/gen/proto/wg/cosmo/node/v1" + "github.com/wundergraph/cosmo/router/pkg/config" + "github.com/wundergraph/cosmo/router/pkg/pubsub/datasource" + "go.uber.org/zap" + + "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/plan" +) + +func init() { + datasource.RegisterProviderFactory(GetProvider) +} + +// buildKafkaOptions creates a list of kgo.Opt options for the given Kafka event source configuration. +// Only general options like TLS, SASL, etc. are configured here. Specific options like topics, etc. are +// configured in the KafkaPubSub implementation. +func buildKafkaOptions(eventSource config.KafkaEventSource) ([]kgo.Opt, error) { + opts := []kgo.Opt{ + kgo.SeedBrokers(eventSource.Brokers...), + // Ensure proper timeouts are set + kgo.ProduceRequestTimeout(10 * time.Second), + kgo.ConnIdleTimeout(60 * time.Second), + } + + if eventSource.TLS != nil && eventSource.TLS.Enabled { + opts = append(opts, + // Configure TLS. Uses SystemCertPool for RootCAs by default. + kgo.DialTLSConfig(new(tls.Config)), + ) + } + + if eventSource.Authentication != nil && eventSource.Authentication.SASLPlain.Username != nil && eventSource.Authentication.SASLPlain.Password != nil { + opts = append(opts, kgo.SASL(plain.Auth{ + User: *eventSource.Authentication.SASLPlain.Username, + Pass: *eventSource.Authentication.SASLPlain.Password, + }.AsMechanism())) + } + + return opts, nil +} + +func GetProvider(ctx context.Context, in *nodev1.DataSourceConfiguration, dsMeta *plan.DataSourceMetadata, config config.EventsConfiguration, logger *zap.Logger, hostName string, routerListenAddr string) (datasource.PubSubProvider, error) { + providers := make(map[string]*Adapter) + definedProviders := make(map[string]bool) + for _, provider := range config.Providers.Kafka { + definedProviders[provider.ID] = true + } + usedProviders := make(map[string]bool) + if kafkaData := in.GetCustomEvents().GetKafka(); kafkaData != nil { + for _, event := range in.CustomEvents.GetKafka() { + if !definedProviders[event.EngineEventConfiguration.ProviderId] { + return nil, fmt.Errorf("failed to find Kafka provider with ID %s", event.EngineEventConfiguration.ProviderId) + } + usedProviders[event.EngineEventConfiguration.ProviderId] = true + } + + for _, provider := range config.Providers.Kafka { + if !usedProviders[provider.ID] { + continue + } + options, err := buildKafkaOptions(provider) + if err != nil { + return nil, fmt.Errorf("failed to build options for Kafka provider with ID \"%s\": %w", provider.ID, err) + } + adapter, err := NewAdapter(ctx, logger, options) + if err != nil { + return nil, fmt.Errorf("failed to create connection for Kafka provider with ID \"%s\": %w", provider.ID, err) + } + providers[provider.ID] = adapter + } + + return &PubSubProvider{ + EventConfiguration: in.CustomEvents.GetKafka(), + Logger: logger, + Providers: providers, + }, nil + } + + return nil, nil +} + +type PubSubProvider struct { + EventConfiguration []*nodev1.KafkaEventConfiguration + Logger *zap.Logger + Providers map[string]*Adapter +} + +func (c *PubSubProvider) FindPubSubDataSource(typeName string, fieldName string, extractFn datasource.ArgumentTemplateCallback) (datasource.PubSubDataSource, error) { + for _, cfg := range c.EventConfiguration { + if cfg.GetEngineEventConfiguration().GetTypeName() == typeName && cfg.GetEngineEventConfiguration().GetFieldName() == fieldName { + return &PubSubDataSource{ + KafkaAdapter: c.Providers[cfg.GetEngineEventConfiguration().GetProviderId()], + EventConfiguration: cfg, + }, nil + } + } + return nil, nil +} diff --git a/router/pkg/pubsub/kafka/pubsub_datasource.go b/router/pkg/pubsub/kafka/pubsub_datasource.go new file mode 100644 index 0000000000..0e1e631af5 --- /dev/null +++ b/router/pkg/pubsub/kafka/pubsub_datasource.go @@ -0,0 +1,77 @@ +package kafka + +import ( + "encoding/json" + "fmt" + + nodev1 "github.com/wundergraph/cosmo/router/gen/proto/wg/cosmo/node/v1" + "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/resolve" +) + +type PubSubDataSource struct { + EventConfiguration *nodev1.KafkaEventConfiguration + KafkaAdapter *Adapter +} + +func (c *PubSubDataSource) GetEngineEventConfiguration() *nodev1.EngineEventConfiguration { + return c.EventConfiguration.GetEngineEventConfiguration() +} + +func (c *PubSubDataSource) GetResolveDataSource() (resolve.DataSource, error) { + var dataSource resolve.DataSource + + typeName := c.EventConfiguration.GetEngineEventConfiguration().GetType() + switch typeName { + case nodev1.EventType_PUBLISH: + dataSource = &KafkaPublishDataSource{ + pubSub: c.KafkaAdapter, + } + default: + return nil, fmt.Errorf("failed to configure fetch: invalid event type \"%s\" for Kafka", typeName.String()) + } + + return dataSource, nil +} + +func (c *PubSubDataSource) GetResolveDataSourceInput(event []byte) (string, error) { + topics := c.EventConfiguration.GetTopics() + + if len(topics) != 1 { + return "", fmt.Errorf("publish and request events should define one topic but received %d", len(topics)) + } + + topic := topics[0] + + providerId := c.GetProviderId() + + evtCfg := PublishEventConfiguration{ + ProviderID: providerId, + Topic: topic, + Data: event, + } + + return evtCfg.MarshalJSONTemplate(), nil +} + +func (c *PubSubDataSource) GetResolveDataSourceSubscription() (resolve.SubscriptionDataSource, error) { + return &SubscriptionSource{ + pubSub: c.KafkaAdapter, + }, nil +} + +func (c *PubSubDataSource) GetResolveDataSourceSubscriptionInput() (string, error) { + providerId := c.GetProviderId() + evtCfg := SubscriptionEventConfiguration{ + ProviderID: providerId, + Topics: c.EventConfiguration.GetTopics(), + } + object, err := json.Marshal(evtCfg) + if err != nil { + return "", fmt.Errorf("failed to marshal event subscription streamConfiguration") + } + return string(object), nil +} + +func (c *PubSubDataSource) GetProviderId() string { + return c.EventConfiguration.GetEngineEventConfiguration().GetProviderId() +} diff --git a/router/pkg/pubsub/nats/nats.go b/router/pkg/pubsub/nats/adapter.go similarity index 86% rename from router/pkg/pubsub/nats/nats.go rename to router/pkg/pubsub/nats/adapter.go index 496e23bc1c..679feeac82 100644 --- a/router/pkg/pubsub/nats/nats.go +++ b/router/pkg/pubsub/nats/adapter.go @@ -16,38 +16,7 @@ import ( "go.uber.org/zap" ) -type connector struct { - client *LazyClient - logger *zap.Logger - hostName string - routerListenAddr string -} - -func NewConnector(logger *zap.Logger, url string, opts []nats.Option, hostName string, routerListenAddr string) *connector { - client := NewLazyClient(url, opts...) - return &connector{ - client: client, - logger: logger, - hostName: hostName, - routerListenAddr: routerListenAddr, - } -} - -func (c *connector) New(ctx context.Context) *NatsPubSub { - if c.logger == nil { - c.logger = zap.NewNop() - } - return &NatsPubSub{ - ctx: ctx, - client: c.client, - logger: c.logger.With(zap.String("pubsub", "nats")), - closeWg: sync.WaitGroup{}, - hostName: c.hostName, - routerListenAddr: c.routerListenAddr, - } -} - -type NatsPubSub struct { +type Adapter struct { ctx context.Context client *LazyClient logger *zap.Logger @@ -60,7 +29,7 @@ type NatsPubSub struct { // We use the hostname and the address the router is listening on, which should provide a good representation // of what a unique instance is from the perspective of the client that has started a subscription to this instance // and want to restart the subscription after a failure on the client or router side. -func (p *NatsPubSub) getInstanceIdentifier() string { +func (p *Adapter) getInstanceIdentifier() string { return fmt.Sprintf("%s-%s", p.hostName, p.routerListenAddr) } @@ -68,7 +37,7 @@ func (p *NatsPubSub) getInstanceIdentifier() string { // we need to make sure that the durable consumer name is unique for each instance and subjects to prevent // multiple routers from changing the same consumer, which would lead to message loss and wrong messages delivered // to the subscribers -func (p *NatsPubSub) getDurableConsumerName(durableName string, subjects []string) (string, error) { +func (p *Adapter) getDurableConsumerName(durableName string, subjects []string) (string, error) { subjHash := xxhash.New() _, err := subjHash.WriteString(p.getInstanceIdentifier()) if err != nil { @@ -84,7 +53,7 @@ func (p *NatsPubSub) getDurableConsumerName(durableName string, subjects []strin return fmt.Sprintf("%s-%x", durableName, subjHash.Sum64()), nil } -func (p *NatsPubSub) Subscribe(ctx context.Context, event SubscriptionEventConfiguration, updater resolve.SubscriptionUpdater) error { +func (p *Adapter) Subscribe(ctx context.Context, event SubscriptionEventConfiguration, updater resolve.SubscriptionUpdater) error { log := p.logger.With( zap.String("provider_id", event.ProviderID), zap.String("method", "subscribe"), @@ -212,7 +181,7 @@ func (p *NatsPubSub) Subscribe(ctx context.Context, event SubscriptionEventConfi return nil } -func (p *NatsPubSub) Publish(_ context.Context, event PublishAndRequestEventConfiguration) error { +func (p *Adapter) Publish(_ context.Context, event PublishAndRequestEventConfiguration) error { log := p.logger.With( zap.String("provider_id", event.ProviderID), zap.String("method", "publish"), @@ -236,7 +205,7 @@ func (p *NatsPubSub) Publish(_ context.Context, event PublishAndRequestEventConf return nil } -func (p *NatsPubSub) Request(ctx context.Context, event PublishAndRequestEventConfiguration, w io.Writer) error { +func (p *Adapter) Request(ctx context.Context, event PublishAndRequestEventConfiguration, w io.Writer) error { log := p.logger.With( zap.String("provider_id", event.ProviderID), zap.String("method", "request"), @@ -266,7 +235,7 @@ func (p *NatsPubSub) Request(ctx context.Context, event PublishAndRequestEventCo return err } -func (p *NatsPubSub) flush(ctx context.Context) error { +func (p *Adapter) flush(ctx context.Context) error { nc, err := p.client.GetClient() if err != nil { return err @@ -274,7 +243,7 @@ func (p *NatsPubSub) flush(ctx context.Context) error { return nc.FlushWithContext(ctx) } -func (p *NatsPubSub) Shutdown(ctx context.Context) error { +func (p *Adapter) Shutdown(ctx context.Context) error { nc, err := p.client.GetClient() if err != nil { return nil // Already disconnected or failed to connect @@ -305,3 +274,20 @@ func (p *NatsPubSub) Shutdown(ctx context.Context) error { return nil } + +func NewAdapter(ctx context.Context, logger *zap.Logger, url string, opts []nats.Option, hostName string, routerListenAddr string) (*Adapter, error) { + if logger == nil { + logger = zap.NewNop() + } + + client := NewLazyClient(url, opts...) + + return &Adapter{ + ctx: ctx, + client: client, + logger: logger.With(zap.String("pubsub", "nats")), + closeWg: sync.WaitGroup{}, + hostName: hostName, + routerListenAddr: routerListenAddr, + }, nil +} diff --git a/router/pkg/pubsub/nats/datasource.go b/router/pkg/pubsub/nats/datasource.go deleted file mode 100644 index 0b4fa8d4b3..0000000000 --- a/router/pkg/pubsub/nats/datasource.go +++ /dev/null @@ -1,373 +0,0 @@ -package nats - -import ( - "context" - "encoding/json" - "errors" - "fmt" - "slices" - "strings" - "sync" - "time" - - "github.com/nats-io/nats.go" - "github.com/nats-io/nats.go/jetstream" - nodev1 "github.com/wundergraph/cosmo/router/gen/proto/wg/cosmo/node/v1" - "github.com/wundergraph/cosmo/router/pkg/config" - "github.com/wundergraph/cosmo/router/pkg/pubsub/datasource" - "go.uber.org/zap" - - "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/plan" - "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/resolve" -) - -const ( - fwc = '>' - tsep = "." -) - -func GetPlanDataSource(ctx context.Context, in *nodev1.DataSourceConfiguration, dsMeta *plan.DataSourceMetadata, config config.EventsConfiguration, logger *zap.Logger, hostName string, routerListenAddr string) (datasource.PubSubGeneralImplementer, error) { - if natsData := in.GetCustomEvents().GetNats(); natsData != nil { - k := NewPubSub(logger, hostName, routerListenAddr) - err := k.PrepareProviders(ctx, in, dsMeta, config) - if err != nil { - return nil, err - } - return k.config, nil - } - - return nil, nil -} - -func init() { - datasource.RegisterPubSub(GetPlanDataSource) -} - -func buildNatsOptions(eventSource config.NatsEventSource, logger *zap.Logger) ([]nats.Option, error) { - opts := []nats.Option{ - nats.Name(fmt.Sprintf("cosmo.router.edfs.nats.%s", eventSource.ID)), - nats.ReconnectJitter(500*time.Millisecond, 2*time.Second), - nats.ClosedHandler(func(conn *nats.Conn) { - logger.Info("NATS connection closed", zap.String("provider_id", eventSource.ID), zap.Error(conn.LastError())) - }), - nats.ConnectHandler(func(nc *nats.Conn) { - logger.Info("NATS connection established", zap.String("provider_id", eventSource.ID), zap.String("url", nc.ConnectedUrlRedacted())) - }), - nats.DisconnectErrHandler(func(nc *nats.Conn, err error) { - if err != nil { - logger.Error("NATS disconnected; will attempt to reconnect", zap.Error(err), zap.String("provider_id", eventSource.ID)) - } else { - logger.Info("NATS disconnected", zap.String("provider_id", eventSource.ID)) - } - }), - nats.ErrorHandler(func(conn *nats.Conn, subscription *nats.Subscription, err error) { - if errors.Is(err, nats.ErrSlowConsumer) { - logger.Warn( - "NATS slow consumer detected. Events are being dropped. Please consider increasing the buffer size or reducing the number of messages being sent.", - zap.Error(err), - zap.String("provider_id", eventSource.ID), - ) - } else { - logger.Error("NATS error", zap.Error(err)) - } - }), - nats.ReconnectHandler(func(conn *nats.Conn) { - logger.Info("NATS reconnected", zap.String("provider_id", eventSource.ID), zap.String("url", conn.ConnectedUrlRedacted())) - }), - } - - if eventSource.Authentication != nil { - if eventSource.Authentication.Token != nil { - opts = append(opts, nats.Token(*eventSource.Authentication.Token)) - } else if eventSource.Authentication.UserInfo.Username != nil && eventSource.Authentication.UserInfo.Password != nil { - opts = append(opts, nats.UserInfo(*eventSource.Authentication.UserInfo.Username, *eventSource.Authentication.UserInfo.Password)) - } - } - - return opts, nil -} - -type Nats struct { - providers map[string]*NatsPubSub - logger *zap.Logger - hostName string - routerListenAddr string - config *Configuration -} - -type LazyClient struct { - once sync.Once - url string - opts []nats.Option - client *nats.Conn - js jetstream.JetStream - err error -} - -func (c *LazyClient) Connect(opts ...nats.Option) error { - c.once.Do(func() { - c.client, c.err = nats.Connect(c.url, opts...) - if c.err != nil { - return - } - c.js, c.err = jetstream.New(c.client) - }) - return c.err -} - -func (c *LazyClient) GetClient() (*nats.Conn, error) { - if c.client == nil { - if err := c.Connect(c.opts...); err != nil { - return nil, err - } - } - return c.client, c.err -} - -func (c *LazyClient) GetJetStream() (jetstream.JetStream, error) { - if c.js == nil { - if err := c.Connect(c.opts...); err != nil { - return nil, err - } - } - return c.js, c.err -} - -func NewLazyClient(url string, opts ...nats.Option) *LazyClient { - return &LazyClient{ - url: url, - opts: opts, - } -} - -func (n *Nats) PrepareProviders(ctx context.Context, in *nodev1.DataSourceConfiguration, dsMeta *plan.DataSourceMetadata, config config.EventsConfiguration) error { - definedProviders := make(map[string]bool) - for _, provider := range config.Providers.Nats { - definedProviders[provider.ID] = true - } - usedProviders := make(map[string]bool) - for _, event := range in.CustomEvents.GetNats() { - if _, found := definedProviders[event.EngineEventConfiguration.ProviderId]; !found { - return fmt.Errorf("failed to find Nats provider with ID %s", event.EngineEventConfiguration.ProviderId) - } - usedProviders[event.EngineEventConfiguration.ProviderId] = true - } - n.providers = map[string]*NatsPubSub{} - for _, provider := range config.Providers.Nats { - if !usedProviders[provider.ID] { - continue - } - options, err := buildNatsOptions(provider, n.logger) - if err != nil { - return fmt.Errorf("failed to build options for Nats provider with ID \"%s\": %w", provider.ID, err) - } - - n.providers[provider.ID] = NewConnector(n.logger, provider.URL, options, n.hostName, n.routerListenAddr).New(ctx) - } - n.config = &Configuration{ - EventConfiguration: in.CustomEvents.GetNats(), - Logger: n.logger, - Providers: n.providers, - } - return nil -} - -func (n *Nats) GetPubSubGeneralImplementerList() datasource.PubSubGeneralImplementer { - return n.config -} - -// func (n *Nats) GetFactory(executionContext context.Context, config config.EventsConfiguration, providers map[string]*NatsPubSub) *datasource.Factory[*nodev1.NatsEventConfiguration, *NatsPubSub] { -// return datasource.NewFactory[*nodev1.NatsEventConfiguration](executionContext, config, n.providers) -// } - -func NewPubSub(logger *zap.Logger, hostName string, routerListenAddr string) Nats { - return Nats{ - logger: logger, - hostName: hostName, - routerListenAddr: routerListenAddr, - } -} - -type Configuration struct { - EventConfiguration []*nodev1.NatsEventConfiguration - Logger *zap.Logger - Providers map[string]*NatsPubSub -} - -func (c *Configuration) GetEventsDataConfigurations() []*nodev1.NatsEventConfiguration { - return c.EventConfiguration -} - -func (c *Configuration) GetResolveDataSource(eventConfig *nodev1.NatsEventConfiguration, pubsub *NatsPubSub) (resolve.DataSource, error) { - var dataSource resolve.DataSource - - typeName := eventConfig.GetEngineEventConfiguration().GetType() - switch typeName { - case nodev1.EventType_PUBLISH: - dataSource = &NatsPublishDataSource{ - pubSub: pubsub, - } - case nodev1.EventType_REQUEST: - dataSource = &NatsRequestDataSource{ - pubSub: pubsub, - } - default: - return nil, fmt.Errorf("failed to configure fetch: invalid event type \"%s\" for Nats", typeName.String()) - } - - return dataSource, nil -} - -func (c *Configuration) GetResolveDataSourceSubscription(eventConfig *nodev1.NatsEventConfiguration, pubsub *NatsPubSub) (resolve.SubscriptionDataSource, error) { - return &SubscriptionSource{ - pubSub: pubsub, - }, nil -} - -func (c *Configuration) GetResolveDataSourceSubscriptionInput(eventConfig *nodev1.NatsEventConfiguration, pubsub *NatsPubSub) (string, error) { - providerId := c.GetProviderId(eventConfig) - - evtCfg := SubscriptionEventConfiguration{ - ProviderID: providerId, - Subjects: eventConfig.GetSubjects(), - } - if eventConfig.StreamConfiguration != nil { - evtCfg.StreamConfiguration = &StreamConfiguration{ - Consumer: eventConfig.StreamConfiguration.ConsumerName, - StreamName: eventConfig.StreamConfiguration.StreamName, - ConsumerInactiveThreshold: eventConfig.StreamConfiguration.ConsumerInactiveThreshold, - } - } - object, err := json.Marshal(evtCfg) - if err != nil { - return "", fmt.Errorf("failed to marshal event subscription streamConfiguration") - } - return string(object), nil -} - -func (c *Configuration) GetResolveDataSourceInput(eventConfig *nodev1.NatsEventConfiguration, event []byte) (string, error) { - subjects := eventConfig.GetSubjects() - - if len(subjects) != 1 { - return "", fmt.Errorf("publish and request events should define one subject but received %d", len(subjects)) - } - - subject := subjects[0] - - providerId := c.GetProviderId(eventConfig) - - evtCfg := PublishEventConfiguration{ - ProviderID: providerId, - Subject: subject, - Data: event, - } - - return evtCfg.MarshalJSONTemplate(), nil -} - -func (c *Configuration) GetProviderId(eventConfig *nodev1.NatsEventConfiguration) string { - return eventConfig.GetEngineEventConfiguration().GetProviderId() -} - -func (c *Configuration) transformEventConfig(cfg *nodev1.NatsEventConfiguration, fn datasource.ArgumentTemplateCallback) (*nodev1.NatsEventConfiguration, error) { - switch v := cfg.GetEngineEventConfiguration().GetType(); v { - case nodev1.EventType_PUBLISH, nodev1.EventType_REQUEST: - extractedSubject, err := fn(cfg.GetSubjects()[0]) - if err != nil { - return cfg, fmt.Errorf("unable to parse subject with id %s", cfg.GetSubjects()[0]) - } - if !isValidNatsSubject(extractedSubject) { - return cfg, fmt.Errorf("invalid subject: %s", extractedSubject) - } - cfg.Subjects = []string{extractedSubject} - case nodev1.EventType_SUBSCRIBE: - extractedSubjects := make([]string, 0, len(cfg.Subjects)) - for _, rawSubject := range cfg.Subjects { - extractedSubject, err := fn(rawSubject) - if err != nil { - return cfg, nil - } - if !isValidNatsSubject(extractedSubject) { - return cfg, fmt.Errorf("invalid subject: %s", extractedSubject) - } - extractedSubjects = append(extractedSubjects, extractedSubject) - } - slices.Sort(extractedSubjects) - cfg.Subjects = extractedSubjects - } - return cfg, nil -} - -func (c *Configuration) FindEventConfig(typeName string, fieldName string, extractFn func(string) (string, error)) (datasource.EventConfigType, error) { - for _, cfg := range c.EventConfiguration { - if cfg.GetEngineEventConfiguration().GetTypeName() == typeName && cfg.GetEngineEventConfiguration().GetFieldName() == fieldName { - transformedCfg, err := c.transformEventConfig(cfg, extractFn) - if err != nil { - return nil, err - } - return &SelectedConfiguration{ - Config: c, - EventConfiguration: transformedCfg, - Provider: c.Providers[c.GetProviderId(transformedCfg)], - }, nil - } - } - return nil, nil -} - -type SelectedConfiguration struct { - Config *Configuration - EventConfiguration *nodev1.NatsEventConfiguration - Provider *NatsPubSub -} - -func (c *SelectedConfiguration) GetEngineEventConfiguration() *nodev1.EngineEventConfiguration { - return c.EventConfiguration.GetEngineEventConfiguration() -} - -func (c *SelectedConfiguration) GetResolveDataSource() (resolve.DataSource, error) { - return c.Config.GetResolveDataSource(c.EventConfiguration, c.Provider) -} - -func (c *SelectedConfiguration) GetResolveDataSourceInput(event []byte) (string, error) { - return c.Config.GetResolveDataSourceInput(c.EventConfiguration, event) -} - -func (c *SelectedConfiguration) GetResolveDataSourceSubscription() (resolve.SubscriptionDataSource, error) { - return c.Config.GetResolveDataSourceSubscription(c.EventConfiguration, c.Provider) -} - -func (c *SelectedConfiguration) GetResolveDataSourceSubscriptionInput() (string, error) { - return c.Config.GetResolveDataSourceSubscriptionInput(c.EventConfiguration, c.Provider) -} - -func (c *SelectedConfiguration) GetProviderId() string { - return c.Config.GetProviderId(c.EventConfiguration) -} - -func isValidNatsSubject(subject string) bool { - if subject == "" { - return false - } - sfwc := false - tokens := strings.Split(subject, tsep) - for _, t := range tokens { - length := len(t) - if length == 0 || sfwc { - return false - } - if length > 1 { - if strings.ContainsAny(t, "\t\n\f\r ") { - return false - } - continue - } - switch t[0] { - case fwc: - sfwc = true - case ' ', '\t', '\n', '\r', '\f': - return false - } - } - return true -} diff --git a/router/pkg/pubsub/nats/subscription_datasource.go b/router/pkg/pubsub/nats/engine_datasource.go similarity index 98% rename from router/pkg/pubsub/nats/subscription_datasource.go rename to router/pkg/pubsub/nats/engine_datasource.go index ef5e2e5fe2..ba7e0ae1e6 100644 --- a/router/pkg/pubsub/nats/subscription_datasource.go +++ b/router/pkg/pubsub/nats/engine_datasource.go @@ -46,7 +46,7 @@ func (s *PublishEventConfiguration) MarshalJSONTemplate() string { } type SubscriptionSource struct { - pubSub *NatsPubSub + pubSub *Adapter } func (s *SubscriptionSource) UniqueRequestID(ctx *resolve.Context, input []byte, xxh *xxhash.Digest) error { @@ -81,7 +81,7 @@ func (s *SubscriptionSource) Start(ctx *resolve.Context, input []byte, updater r } type NatsPublishDataSource struct { - pubSub *NatsPubSub + pubSub *Adapter } func (s *NatsPublishDataSource) Load(ctx context.Context, input []byte, out *bytes.Buffer) error { @@ -104,7 +104,7 @@ func (s *NatsPublishDataSource) LoadWithFiles(ctx context.Context, input []byte, } type NatsRequestDataSource struct { - pubSub *NatsPubSub + pubSub *Adapter } func (s *NatsRequestDataSource) Load(ctx context.Context, input []byte, out *bytes.Buffer) error { diff --git a/router/pkg/pubsub/nats/provider.go b/router/pkg/pubsub/nats/provider.go new file mode 100644 index 0000000000..edcba478be --- /dev/null +++ b/router/pkg/pubsub/nats/provider.go @@ -0,0 +1,155 @@ +package nats + +import ( + "context" + "errors" + "fmt" + "slices" + "time" + + "github.com/nats-io/nats.go" + nodev1 "github.com/wundergraph/cosmo/router/gen/proto/wg/cosmo/node/v1" + "github.com/wundergraph/cosmo/router/pkg/config" + "github.com/wundergraph/cosmo/router/pkg/pubsub/datasource" + "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/plan" + "go.uber.org/zap" +) + +func init() { + datasource.RegisterProviderFactory(GetProvider) +} + +func buildNatsOptions(eventSource config.NatsEventSource, logger *zap.Logger) ([]nats.Option, error) { + opts := []nats.Option{ + nats.Name(fmt.Sprintf("cosmo.router.edfs.nats.%s", eventSource.ID)), + nats.ReconnectJitter(500*time.Millisecond, 2*time.Second), + nats.ClosedHandler(func(conn *nats.Conn) { + logger.Info("NATS connection closed", zap.String("provider_id", eventSource.ID), zap.Error(conn.LastError())) + }), + nats.ConnectHandler(func(nc *nats.Conn) { + logger.Info("NATS connection established", zap.String("provider_id", eventSource.ID), zap.String("url", nc.ConnectedUrlRedacted())) + }), + nats.DisconnectErrHandler(func(nc *nats.Conn, err error) { + if err != nil { + logger.Error("NATS disconnected; will attempt to reconnect", zap.Error(err), zap.String("provider_id", eventSource.ID)) + } else { + logger.Info("NATS disconnected", zap.String("provider_id", eventSource.ID)) + } + }), + nats.ErrorHandler(func(conn *nats.Conn, subscription *nats.Subscription, err error) { + if errors.Is(err, nats.ErrSlowConsumer) { + logger.Warn( + "NATS slow consumer detected. Events are being dropped. Please consider increasing the buffer size or reducing the number of messages being sent.", + zap.Error(err), + zap.String("provider_id", eventSource.ID), + ) + } else { + logger.Error("NATS error", zap.Error(err)) + } + }), + nats.ReconnectHandler(func(conn *nats.Conn) { + logger.Info("NATS reconnected", zap.String("provider_id", eventSource.ID), zap.String("url", conn.ConnectedUrlRedacted())) + }), + } + + if eventSource.Authentication != nil { + if eventSource.Authentication.Token != nil { + opts = append(opts, nats.Token(*eventSource.Authentication.Token)) + } else if eventSource.Authentication.UserInfo.Username != nil && eventSource.Authentication.UserInfo.Password != nil { + opts = append(opts, nats.UserInfo(*eventSource.Authentication.UserInfo.Username, *eventSource.Authentication.UserInfo.Password)) + } + } + + return opts, nil +} + +func transformEventConfig(cfg *nodev1.NatsEventConfiguration, fn datasource.ArgumentTemplateCallback) (*nodev1.NatsEventConfiguration, error) { + switch v := cfg.GetEngineEventConfiguration().GetType(); v { + case nodev1.EventType_PUBLISH, nodev1.EventType_REQUEST: + extractedSubject, err := fn(cfg.GetSubjects()[0]) + if err != nil { + return cfg, fmt.Errorf("unable to parse subject with id %s", cfg.GetSubjects()[0]) + } + if !isValidNatsSubject(extractedSubject) { + return cfg, fmt.Errorf("invalid subject: %s", extractedSubject) + } + cfg.Subjects = []string{extractedSubject} + case nodev1.EventType_SUBSCRIBE: + extractedSubjects := make([]string, 0, len(cfg.Subjects)) + for _, rawSubject := range cfg.Subjects { + extractedSubject, err := fn(rawSubject) + if err != nil { + return cfg, nil + } + if !isValidNatsSubject(extractedSubject) { + return cfg, fmt.Errorf("invalid subject: %s", extractedSubject) + } + extractedSubjects = append(extractedSubjects, extractedSubject) + } + slices.Sort(extractedSubjects) + cfg.Subjects = extractedSubjects + } + return cfg, nil +} + +type PubSubProvider struct { + EventConfiguration []*nodev1.NatsEventConfiguration + Logger *zap.Logger + Providers map[string]*Adapter +} + +func (c *PubSubProvider) FindPubSubDataSource(typeName string, fieldName string, extractFn datasource.ArgumentTemplateCallback) (datasource.PubSubDataSource, error) { + for _, cfg := range c.EventConfiguration { + if cfg.GetEngineEventConfiguration().GetTypeName() == typeName && cfg.GetEngineEventConfiguration().GetFieldName() == fieldName { + transformedCfg, err := transformEventConfig(cfg, extractFn) + if err != nil { + return nil, err + } + return &PubSubDataSource{ + EventConfiguration: transformedCfg, + NatsAdapter: c.Providers[cfg.GetEngineEventConfiguration().GetProviderId()], + }, nil + } + } + return nil, nil +} + +func GetProvider(ctx context.Context, in *nodev1.DataSourceConfiguration, dsMeta *plan.DataSourceMetadata, config config.EventsConfiguration, logger *zap.Logger, hostName string, routerListenAddr string) (datasource.PubSubProvider, error) { + var providers map[string]*Adapter + if natsData := in.GetCustomEvents().GetNats(); natsData != nil { + definedProviders := make(map[string]bool) + for _, provider := range config.Providers.Nats { + definedProviders[provider.ID] = true + } + usedProviders := make(map[string]bool) + for _, event := range in.CustomEvents.GetNats() { + if _, found := definedProviders[event.EngineEventConfiguration.ProviderId]; !found { + return nil, fmt.Errorf("failed to find Nats provider with ID %s", event.EngineEventConfiguration.ProviderId) + } + usedProviders[event.EngineEventConfiguration.ProviderId] = true + } + providers = map[string]*Adapter{} + for _, provider := range config.Providers.Nats { + if !usedProviders[provider.ID] { + continue + } + options, err := buildNatsOptions(provider, logger) + if err != nil { + return nil, fmt.Errorf("failed to build options for Nats provider with ID \"%s\": %w", provider.ID, err) + } + + adapter, err := NewAdapter(ctx, logger, provider.URL, options, hostName, routerListenAddr) + if err != nil { + return nil, fmt.Errorf("failed to create adapter for Nats provider with ID \"%s\": %w", provider.ID, err) + } + providers[provider.ID] = adapter + } + return &PubSubProvider{ + EventConfiguration: in.CustomEvents.GetNats(), + Logger: logger, + Providers: providers, + }, nil + } + + return nil, nil +} diff --git a/router/pkg/pubsub/nats/pubsub_datasource.go b/router/pkg/pubsub/nats/pubsub_datasource.go new file mode 100644 index 0000000000..b084cb9edc --- /dev/null +++ b/router/pkg/pubsub/nats/pubsub_datasource.go @@ -0,0 +1,138 @@ +package nats + +import ( + "encoding/json" + "fmt" + "sync" + + "github.com/nats-io/nats.go" + "github.com/nats-io/nats.go/jetstream" + nodev1 "github.com/wundergraph/cosmo/router/gen/proto/wg/cosmo/node/v1" + + "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/resolve" +) + +type LazyClient struct { + once sync.Once + url string + opts []nats.Option + client *nats.Conn + js jetstream.JetStream + err error +} + +func (c *LazyClient) Connect(opts ...nats.Option) error { + c.once.Do(func() { + c.client, c.err = nats.Connect(c.url, opts...) + if c.err != nil { + return + } + c.js, c.err = jetstream.New(c.client) + }) + return c.err +} + +func (c *LazyClient) GetClient() (*nats.Conn, error) { + if c.client == nil { + if err := c.Connect(c.opts...); err != nil { + return nil, err + } + } + return c.client, c.err +} + +func (c *LazyClient) GetJetStream() (jetstream.JetStream, error) { + if c.js == nil { + if err := c.Connect(c.opts...); err != nil { + return nil, err + } + } + return c.js, c.err +} + +func NewLazyClient(url string, opts ...nats.Option) *LazyClient { + return &LazyClient{ + url: url, + opts: opts, + } +} + +type PubSubDataSource struct { + EventConfiguration *nodev1.NatsEventConfiguration + NatsAdapter *Adapter +} + +func (c *PubSubDataSource) GetEngineEventConfiguration() *nodev1.EngineEventConfiguration { + return c.EventConfiguration.GetEngineEventConfiguration() +} + +func (c *PubSubDataSource) GetResolveDataSource() (resolve.DataSource, error) { + var dataSource resolve.DataSource + + typeName := c.EventConfiguration.GetEngineEventConfiguration().GetType() + switch typeName { + case nodev1.EventType_PUBLISH: + dataSource = &NatsPublishDataSource{ + pubSub: c.NatsAdapter, + } + case nodev1.EventType_REQUEST: + dataSource = &NatsRequestDataSource{ + pubSub: c.NatsAdapter, + } + default: + return nil, fmt.Errorf("failed to configure fetch: invalid event type \"%s\" for Nats", typeName.String()) + } + + return dataSource, nil +} + +func (c *PubSubDataSource) GetResolveDataSourceInput(event []byte) (string, error) { + subjects := c.EventConfiguration.GetSubjects() + + if len(subjects) != 1 { + return "", fmt.Errorf("publish and request events should define one subject but received %d", len(subjects)) + } + + subject := subjects[0] + + providerId := c.GetProviderId() + + evtCfg := PublishEventConfiguration{ + ProviderID: providerId, + Subject: subject, + Data: event, + } + + return evtCfg.MarshalJSONTemplate(), nil +} + +func (c *PubSubDataSource) GetResolveDataSourceSubscription() (resolve.SubscriptionDataSource, error) { + return &SubscriptionSource{ + pubSub: c.NatsAdapter, + }, nil +} + +func (c *PubSubDataSource) GetResolveDataSourceSubscriptionInput() (string, error) { + providerId := c.GetProviderId() + + evtCfg := SubscriptionEventConfiguration{ + ProviderID: providerId, + Subjects: c.EventConfiguration.GetSubjects(), + } + if c.EventConfiguration.StreamConfiguration != nil { + evtCfg.StreamConfiguration = &StreamConfiguration{ + Consumer: c.EventConfiguration.StreamConfiguration.ConsumerName, + StreamName: c.EventConfiguration.StreamConfiguration.StreamName, + ConsumerInactiveThreshold: c.EventConfiguration.StreamConfiguration.ConsumerInactiveThreshold, + } + } + object, err := json.Marshal(evtCfg) + if err != nil { + return "", fmt.Errorf("failed to marshal event subscription streamConfiguration") + } + return string(object), nil +} + +func (c *PubSubDataSource) GetProviderId() string { + return c.EventConfiguration.GetEngineEventConfiguration().GetProviderId() +} diff --git a/router/pkg/pubsub/nats/utils.go b/router/pkg/pubsub/nats/utils.go new file mode 100644 index 0000000000..010b666c61 --- /dev/null +++ b/router/pkg/pubsub/nats/utils.go @@ -0,0 +1,35 @@ +package nats + +import "strings" + +const ( + fwc = '>' + tsep = "." +) + +func isValidNatsSubject(subject string) bool { + if subject == "" { + return false + } + sfwc := false + tokens := strings.Split(subject, tsep) + for _, t := range tokens { + length := len(t) + if length == 0 || sfwc { + return false + } + if length > 1 { + if strings.ContainsAny(t, "\t\n\f\r ") { + return false + } + continue + } + switch t[0] { + case fwc: + sfwc = true + case ' ', '\t', '\n', '\r', '\f': + return false + } + } + return true +} From 51f134374925bad3b2e81b5c861abd424edfb969 Mon Sep 17 00:00:00 2001 From: Alessandro Pagnin Date: Tue, 8 Apr 2025 16:42:06 +0200 Subject: [PATCH 013/126] chore: remove unused pub/sub configuration code --- router/core/graph_server.go | 85 ------------------------------------- 1 file changed, 85 deletions(-) diff --git a/router/core/graph_server.go b/router/core/graph_server.go index 310b05f7a5..bf795e9f8e 100644 --- a/router/core/graph_server.go +++ b/router/core/graph_server.go @@ -880,11 +880,6 @@ func (s *graphServer) buildGraphMux(ctx context.Context, SubgraphErrorPropagation: s.subgraphErrorPropagation, } - //err = s.buildPubSubConfiguration(ctx, engineConfig, routerEngineConfig) - //if err != nil { - // return nil, fmt.Errorf("failed to build pubsub configuration: %w", err) - //} - ecb := &ExecutorConfigurationBuilder{ introspection: s.introspection, baseURL: s.baseURL, @@ -1178,86 +1173,6 @@ func (s *graphServer) buildGraphMux(ctx context.Context, return gm, nil } -//func (s *graphServer) buildPubSubConfiguration(ctx context.Context, engineConfig *nodev1.EngineConfiguration, routerEngineCfg *RouterEngineConfiguration) error { -// datasourceConfigurations := engineConfig.GetDatasourceConfigurations() -// for _, datasourceConfiguration := range datasourceConfigurations { -// if datasourceConfiguration.CustomEvents == nil { -// continue -// } -// -// for _, eventConfiguration := range datasourceConfiguration.GetCustomEvents().GetNats() { -// -// providerID := eventConfiguration.EngineEventConfiguration.GetProviderId() -// // if this source name's provider has already been initiated, do not try to initiate again -// _, ok := s.pubSubProviders.nats[providerID] -// if ok { -// continue -// } -// -// for _, eventSource := range routerEngineCfg.Events.Providers.Nats { -// if eventSource.ID == eventConfiguration.EngineEventConfiguration.GetProviderId() { -// options, err := buildNatsOptions(eventSource, s.logger) -// if err != nil { -// return fmt.Errorf("failed to build options for Nats provider with ID \"%s\": %w", providerID, err) -// } -// natsConnection, err := nats.Connect(eventSource.URL, options...) -// if err != nil { -// return fmt.Errorf("failed to create connection for Nats provider with ID \"%s\": %w", providerID, err) -// } -// js, err := jetstream.New(natsConnection) -// if err != nil { -// return err -// } -// -// s.pubSubProviders.nats[providerID] = pubsubNats.NewConnector(s.logger, natsConnection, js, s.hostName, s.routerListenAddr).New(ctx) -// -// break -// } -// } -// -// _, ok = s.pubSubProviders.nats[providerID] -// if !ok { -// return fmt.Errorf("failed to find Nats provider with ID \"%s\". Ensure the provider definition is part of the config", providerID) -// } -// } -// -// for _, eventConfiguration := range datasourceConfiguration.GetCustomEvents().GetKafka() { -// -// providerID := eventConfiguration.EngineEventConfiguration.GetProviderId() -// // if this source name's provider has already been initiated, do not try to initiate again -// _, ok := s.pubSubProviders.kafka[providerID] -// if ok { -// continue -// } -// -// for _, eventSource := range routerEngineCfg.Events.Providers.Kafka { -// if eventSource.ID == providerID { -// options, err := buildKafkaOptions(eventSource) -// if err != nil { -// return fmt.Errorf("failed to build options for Kafka provider with ID \"%s\": %w", providerID, err) -// } -// ps, err := kafka.NewConnector(s.logger, options) -// if err != nil { -// return fmt.Errorf("failed to create connection for Kafka provider with ID \"%s\": %w", providerID, err) -// } -// -// s.pubSubProviders.kafka[providerID] = ps.New(ctx) -// -// break -// } -// } -// -// _, ok = s.pubSubProviders.kafka[providerID] -// if !ok { -// return fmt.Errorf("failed to find Kafka provider with ID \"%s\". Ensure the provider definition is part of the config", providerID) -// } -// } -// -// } -// -// return nil -//} - // wait waits for all in-flight requests to finish. Similar to http.Server.Shutdown we wait in intervals + jitter // to make the shutdown process more efficient. func (s *graphServer) wait(ctx context.Context) error { From 60c9b4b8ff639b6cdd8e52b5bbc48577f1d0a289 Mon Sep 17 00:00:00 2001 From: Alessandro Pagnin Date: Tue, 8 Apr 2025 16:50:23 +0200 Subject: [PATCH 014/126] chore: remove unused field --- router/core/factoryresolver.go | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/router/core/factoryresolver.go b/router/core/factoryresolver.go index 4499700dcb..30633f004a 100644 --- a/router/core/factoryresolver.go +++ b/router/core/factoryresolver.go @@ -29,9 +29,8 @@ import ( type Loader struct { resolver FactoryResolver // includeInfo controls whether additional information like type usage and field usage is included in the plan de - includeInfo bool - logger *zap.Logger - instanceData InstanceData + includeInfo bool + logger *zap.Logger } type InstanceData struct { From 4017c9f532af7d19ae9826ecd801c2db507c0ede Mon Sep 17 00:00:00 2001 From: Alessandro Pagnin Date: Tue, 8 Apr 2025 17:24:17 +0200 Subject: [PATCH 015/126] chore: remove registry --- router/pkg/pubsub/datasource.go | 46 ---------------- router/pkg/pubsub/datasource/provider.go | 10 ---- router/pkg/pubsub/kafka/provider.go | 4 -- router/pkg/pubsub/nats/provider.go | 4 -- router/pkg/pubsub/pubsub.go | 70 ++++++++++++++++++++++++ 5 files changed, 70 insertions(+), 64 deletions(-) delete mode 100644 router/pkg/pubsub/datasource.go create mode 100644 router/pkg/pubsub/pubsub.go diff --git a/router/pkg/pubsub/datasource.go b/router/pkg/pubsub/datasource.go deleted file mode 100644 index d55b8f5532..0000000000 --- a/router/pkg/pubsub/datasource.go +++ /dev/null @@ -1,46 +0,0 @@ -package pubsub - -import ( - "context" - "fmt" - - nodev1 "github.com/wundergraph/cosmo/router/gen/proto/wg/cosmo/node/v1" - "github.com/wundergraph/cosmo/router/pkg/config" - "github.com/wundergraph/cosmo/router/pkg/pubsub/datasource" - "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/plan" - "go.uber.org/zap" - - // Register all PubSub implementations - _ "github.com/wundergraph/cosmo/router/pkg/pubsub/kafka" - _ "github.com/wundergraph/cosmo/router/pkg/pubsub/nats" -) - -func GetDataSourceFromConfig(ctx context.Context, in *nodev1.DataSourceConfiguration, dsMeta *plan.DataSourceMetadata, config config.EventsConfiguration, logger *zap.Logger, hostName string, routerListenAddr string) (plan.DataSource, error) { - var providers []datasource.PubSubProvider - - for _, providerFactory := range datasource.GetRegisteredProviderFactories() { - provider, err := providerFactory(ctx, in, dsMeta, config, logger, hostName, routerListenAddr) - if err != nil { - return nil, err - } - if provider != nil { - providers = append(providers, provider) - } - } - - if len(providers) == 0 { - return nil, fmt.Errorf("no pubsub data sources found for data source %s", in.Id) - } - - ds, err := plan.NewDataSourceConfiguration( - in.Id, - datasource.NewFactory(ctx, config, providers), - dsMeta, - providers, - ) - if err != nil { - return nil, err - } - - return ds, nil -} diff --git a/router/pkg/pubsub/datasource/provider.go b/router/pkg/pubsub/datasource/provider.go index 206d46ba43..d496a4e3a0 100644 --- a/router/pkg/pubsub/datasource/provider.go +++ b/router/pkg/pubsub/datasource/provider.go @@ -11,16 +11,6 @@ import ( type ProviderFactory func(ctx context.Context, in *nodev1.DataSourceConfiguration, dsMeta *plan.DataSourceMetadata, config config.EventsConfiguration, logger *zap.Logger, hostName string, routerListenAddr string) (PubSubProvider, error) -var pubSubsFactories []ProviderFactory - -func RegisterProviderFactory(pubSub ProviderFactory) { - pubSubsFactories = append(pubSubsFactories, pubSub) -} - -func GetRegisteredProviderFactories() []ProviderFactory { - return pubSubsFactories -} - type ArgumentTemplateCallback func(tpl string) (string, error) type PubSubProvider interface { diff --git a/router/pkg/pubsub/kafka/provider.go b/router/pkg/pubsub/kafka/provider.go index f2cc6d5924..664745697e 100644 --- a/router/pkg/pubsub/kafka/provider.go +++ b/router/pkg/pubsub/kafka/provider.go @@ -16,10 +16,6 @@ import ( "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/plan" ) -func init() { - datasource.RegisterProviderFactory(GetProvider) -} - // buildKafkaOptions creates a list of kgo.Opt options for the given Kafka event source configuration. // Only general options like TLS, SASL, etc. are configured here. Specific options like topics, etc. are // configured in the KafkaPubSub implementation. diff --git a/router/pkg/pubsub/nats/provider.go b/router/pkg/pubsub/nats/provider.go index edcba478be..8e7815722f 100644 --- a/router/pkg/pubsub/nats/provider.go +++ b/router/pkg/pubsub/nats/provider.go @@ -15,10 +15,6 @@ import ( "go.uber.org/zap" ) -func init() { - datasource.RegisterProviderFactory(GetProvider) -} - func buildNatsOptions(eventSource config.NatsEventSource, logger *zap.Logger) ([]nats.Option, error) { opts := []nats.Option{ nats.Name(fmt.Sprintf("cosmo.router.edfs.nats.%s", eventSource.ID)), diff --git a/router/pkg/pubsub/pubsub.go b/router/pkg/pubsub/pubsub.go new file mode 100644 index 0000000000..8ae599be28 --- /dev/null +++ b/router/pkg/pubsub/pubsub.go @@ -0,0 +1,70 @@ +package pubsub + +import ( + "context" + "fmt" + + nodev1 "github.com/wundergraph/cosmo/router/gen/proto/wg/cosmo/node/v1" + "github.com/wundergraph/cosmo/router/pkg/config" + "github.com/wundergraph/cosmo/router/pkg/pubsub/datasource" + "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/plan" + "go.uber.org/zap" + + "github.com/wundergraph/cosmo/router/pkg/pubsub/kafka" + "github.com/wundergraph/cosmo/router/pkg/pubsub/nats" +) + +var additionalProviders []datasource.ProviderFactory + +// RegisterAdditionalProvider registers an additional PubSub provider +func RegisterAdditionalProvider(provider datasource.ProviderFactory) { + additionalProviders = append(additionalProviders, provider) +} + +// GetProviderFactories returns a list of all PubSub implementations +func GetProviderFactories() []datasource.ProviderFactory { + return append([]datasource.ProviderFactory{ + kafka.GetProvider, + nats.GetProvider, + }, additionalProviders...) +} + +// GetDataSourceFromConfig returns a new plan.DataSource from the given configuration, +// using the registered PubSub providers. +func GetDataSourceFromConfig( + ctx context.Context, + in *nodev1.DataSourceConfiguration, + dsMeta *plan.DataSourceMetadata, + config config.EventsConfiguration, + logger *zap.Logger, + hostName string, + routerListenAddr string, +) (plan.DataSource, error) { + var providers []datasource.PubSubProvider + + for _, providerFactory := range GetProviderFactories() { + provider, err := providerFactory(ctx, in, dsMeta, config, logger, hostName, routerListenAddr) + if err != nil { + return nil, err + } + if provider != nil { + providers = append(providers, provider) + } + } + + if len(providers) == 0 { + return nil, fmt.Errorf("no pubsub data sources found for data source %s", in.Id) + } + + ds, err := plan.NewDataSourceConfiguration( + in.Id, + datasource.NewFactory(ctx, config, providers), + dsMeta, + providers, + ) + if err != nil { + return nil, err + } + + return ds, nil +} From e76ceb303bc22c95b72931232498b9cdb3730acc Mon Sep 17 00:00:00 2001 From: Alessandro Pagnin Date: Wed, 9 Apr 2025 12:46:07 +0200 Subject: [PATCH 016/126] fix: improve error message in Kafka provider --- router/pkg/pubsub/kafka/provider.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/router/pkg/pubsub/kafka/provider.go b/router/pkg/pubsub/kafka/provider.go index 664745697e..9ecb5b95d0 100644 --- a/router/pkg/pubsub/kafka/provider.go +++ b/router/pkg/pubsub/kafka/provider.go @@ -69,7 +69,7 @@ func GetProvider(ctx context.Context, in *nodev1.DataSourceConfiguration, dsMeta } adapter, err := NewAdapter(ctx, logger, options) if err != nil { - return nil, fmt.Errorf("failed to create connection for Kafka provider with ID \"%s\": %w", provider.ID, err) + return nil, fmt.Errorf("failed to create adapter for Kafka provider with ID \"%s\": %w", provider.ID, err) } providers[provider.ID] = adapter } From 47e83bd64e426aaf000fce4d9facf98e11df7f48 Mon Sep 17 00:00:00 2001 From: Alessandro Pagnin Date: Wed, 9 Apr 2025 13:11:23 +0200 Subject: [PATCH 017/126] chore: remove commented error handling code in Planner.ConfigureFetch --- router/pkg/pubsub/datasource/planner.go | 1 - 1 file changed, 1 deletion(-) diff --git a/router/pkg/pubsub/datasource/planner.go b/router/pkg/pubsub/datasource/planner.go index bc035e10ba..9f9ae3326a 100644 --- a/router/pkg/pubsub/datasource/planner.go +++ b/router/pkg/pubsub/datasource/planner.go @@ -50,7 +50,6 @@ func (p *Planner) Register(visitor *plan.Visitor, configuration plan.DataSourceC func (p *Planner) ConfigureFetch() resolve.FetchConfiguration { if p.pubSubDataSource == nil { - // p.visitor.Walker.StopWithInternalErr(fmt.Errorf("failed to configure fetch: event config is nil")) return resolve.FetchConfiguration{} } From 546be70aa144a2395c81346fc63c9e523ea94a9a Mon Sep 17 00:00:00 2001 From: Alessandro Pagnin Date: Wed, 9 Apr 2025 18:51:29 +0200 Subject: [PATCH 018/126] chore: add adapter interfaces and tests --- .../subgraphs/availability/availability.go | 2 +- .../availability/subgraph/resolver.go | 2 +- demo/pkg/subgraphs/countries/countries.go | 2 +- .../subgraphs/countries/subgraph/resolver.go | 2 +- demo/pkg/subgraphs/employees/employees.go | 2 +- .../subgraphs/employees/subgraph/resolver.go | 2 +- demo/pkg/subgraphs/family/family.go | 2 +- .../pkg/subgraphs/family/subgraph/resolver.go | 2 +- demo/pkg/subgraphs/hobbies/hobbies.go | 2 +- .../subgraphs/hobbies/subgraph/resolver.go | 2 +- demo/pkg/subgraphs/mood/mood.go | 2 +- demo/pkg/subgraphs/mood/subgraph/resolver.go | 2 +- demo/pkg/subgraphs/products/products.go | 2 +- .../subgraphs/products/subgraph/resolver.go | 2 +- demo/pkg/subgraphs/products_fg/products.go | 2 +- .../products_fg/subgraph/resolver.go | 2 +- demo/pkg/subgraphs/subgraphs.go | 4 +- demo/pkg/subgraphs/test1/subgraph/resolver.go | 2 +- demo/pkg/subgraphs/test1/test1.go | 2 +- router-tests/testenv/testenv.go | 4 +- router/pkg/pubsub/datasource/test_utils.go | 47 +++ router/pkg/pubsub/kafka/adapter.go | 11 +- router/pkg/pubsub/kafka/engine_datasource.go | 4 +- router/pkg/pubsub/kafka/provider.go | 4 +- router/pkg/pubsub/kafka/pubsub_datasource.go | 2 +- .../pubsub/kafka/pubsub_datasource_test.go | 170 ++++++++++ router/pkg/pubsub/nats/adapter.go | 15 +- router/pkg/pubsub/nats/engine_datasource.go | 6 +- router/pkg/pubsub/nats/provider.go | 6 +- router/pkg/pubsub/nats/pubsub_datasource.go | 2 +- .../pkg/pubsub/nats/pubsub_datasource_test.go | 300 ++++++++++++++++++ 31 files changed, 575 insertions(+), 36 deletions(-) create mode 100644 router/pkg/pubsub/datasource/test_utils.go create mode 100644 router/pkg/pubsub/kafka/pubsub_datasource_test.go create mode 100644 router/pkg/pubsub/nats/pubsub_datasource_test.go diff --git a/demo/pkg/subgraphs/availability/availability.go b/demo/pkg/subgraphs/availability/availability.go index 3bdd747d48..412ffd1ac3 100644 --- a/demo/pkg/subgraphs/availability/availability.go +++ b/demo/pkg/subgraphs/availability/availability.go @@ -8,7 +8,7 @@ import ( "github.com/wundergraph/cosmo/demo/pkg/subgraphs/availability/subgraph/generated" ) -func NewSchema(pubSubBySourceName map[string]*nats.Adapter, pubSubName func(string) string) graphql.ExecutableSchema { +func NewSchema(pubSubBySourceName map[string]nats.AdapterInterface, pubSubName func(string) string) graphql.ExecutableSchema { return generated.NewExecutableSchema(generated.Config{Resolvers: &subgraph.Resolver{ NatsPubSubByProviderID: pubSubBySourceName, GetPubSubName: pubSubName, diff --git a/demo/pkg/subgraphs/availability/subgraph/resolver.go b/demo/pkg/subgraphs/availability/subgraph/resolver.go index 42feac1afd..a5461fac82 100644 --- a/demo/pkg/subgraphs/availability/subgraph/resolver.go +++ b/demo/pkg/subgraphs/availability/subgraph/resolver.go @@ -9,6 +9,6 @@ import ( // It serves as dependency injection for your app, add any dependencies you require here. type Resolver struct { - NatsPubSubByProviderID map[string]*nats.Adapter + NatsPubSubByProviderID map[string]nats.AdapterInterface GetPubSubName func(string) string } diff --git a/demo/pkg/subgraphs/countries/countries.go b/demo/pkg/subgraphs/countries/countries.go index ed876f91a0..726ef1834a 100644 --- a/demo/pkg/subgraphs/countries/countries.go +++ b/demo/pkg/subgraphs/countries/countries.go @@ -8,7 +8,7 @@ import ( "github.com/wundergraph/cosmo/demo/pkg/subgraphs/countries/subgraph/generated" ) -func NewSchema(pubSubBySourceName map[string]*nats.Adapter) graphql.ExecutableSchema { +func NewSchema(pubSubBySourceName map[string]nats.AdapterInterface) graphql.ExecutableSchema { return generated.NewExecutableSchema(generated.Config{Resolvers: &subgraph.Resolver{ NatsPubSubByProviderID: pubSubBySourceName, }}) diff --git a/demo/pkg/subgraphs/countries/subgraph/resolver.go b/demo/pkg/subgraphs/countries/subgraph/resolver.go index 814b836a0c..e2f350a70a 100644 --- a/demo/pkg/subgraphs/countries/subgraph/resolver.go +++ b/demo/pkg/subgraphs/countries/subgraph/resolver.go @@ -12,5 +12,5 @@ import ( type Resolver struct { mux sync.Mutex - NatsPubSubByProviderID map[string]*nats.Adapter + NatsPubSubByProviderID map[string]nats.AdapterInterface } diff --git a/demo/pkg/subgraphs/employees/employees.go b/demo/pkg/subgraphs/employees/employees.go index d7c67b5daa..aa8c38b134 100644 --- a/demo/pkg/subgraphs/employees/employees.go +++ b/demo/pkg/subgraphs/employees/employees.go @@ -7,7 +7,7 @@ import ( "github.com/wundergraph/cosmo/router/pkg/pubsub/nats" ) -func NewSchema(natsPubSubByProviderID map[string]*nats.Adapter) graphql.ExecutableSchema { +func NewSchema(natsPubSubByProviderID map[string]nats.AdapterInterface) graphql.ExecutableSchema { return generated.NewExecutableSchema(generated.Config{Resolvers: &subgraph.Resolver{ NatsPubSubByProviderID: natsPubSubByProviderID, EmployeesData: subgraph.Employees, diff --git a/demo/pkg/subgraphs/employees/subgraph/resolver.go b/demo/pkg/subgraphs/employees/subgraph/resolver.go index 651f1d8321..8f416f6390 100644 --- a/demo/pkg/subgraphs/employees/subgraph/resolver.go +++ b/demo/pkg/subgraphs/employees/subgraph/resolver.go @@ -15,7 +15,7 @@ import ( type Resolver struct { mux sync.Mutex - NatsPubSubByProviderID map[string]*nats.Adapter + NatsPubSubByProviderID map[string]nats.AdapterInterface EmployeesData []*model.Employee } diff --git a/demo/pkg/subgraphs/family/family.go b/demo/pkg/subgraphs/family/family.go index 6978fd4da1..aa3234ab45 100644 --- a/demo/pkg/subgraphs/family/family.go +++ b/demo/pkg/subgraphs/family/family.go @@ -8,7 +8,7 @@ import ( "github.com/wundergraph/cosmo/demo/pkg/subgraphs/family/subgraph/generated" ) -func NewSchema(natsPubSubByProviderID map[string]*nats.Adapter) graphql.ExecutableSchema { +func NewSchema(natsPubSubByProviderID map[string]nats.AdapterInterface) graphql.ExecutableSchema { return generated.NewExecutableSchema(generated.Config{Resolvers: &subgraph.Resolver{ NatsPubSubByProviderID: natsPubSubByProviderID, }}) diff --git a/demo/pkg/subgraphs/family/subgraph/resolver.go b/demo/pkg/subgraphs/family/subgraph/resolver.go index d0f9debc31..6cea8bd318 100644 --- a/demo/pkg/subgraphs/family/subgraph/resolver.go +++ b/demo/pkg/subgraphs/family/subgraph/resolver.go @@ -9,5 +9,5 @@ import ( // It serves as dependency injection for your app, add any dependencies you require here. type Resolver struct { - NatsPubSubByProviderID map[string]*nats.Adapter + NatsPubSubByProviderID map[string]nats.AdapterInterface } diff --git a/demo/pkg/subgraphs/hobbies/hobbies.go b/demo/pkg/subgraphs/hobbies/hobbies.go index 32fa49e785..cf43f3ddfb 100644 --- a/demo/pkg/subgraphs/hobbies/hobbies.go +++ b/demo/pkg/subgraphs/hobbies/hobbies.go @@ -8,7 +8,7 @@ import ( "github.com/wundergraph/cosmo/demo/pkg/subgraphs/hobbies/subgraph/generated" ) -func NewSchema(natsPubSubByProviderID map[string]*nats.Adapter) graphql.ExecutableSchema { +func NewSchema(natsPubSubByProviderID map[string]nats.AdapterInterface) graphql.ExecutableSchema { return generated.NewExecutableSchema(generated.Config{Resolvers: &subgraph.Resolver{ NatsPubSubByProviderID: natsPubSubByProviderID, }}) diff --git a/demo/pkg/subgraphs/hobbies/subgraph/resolver.go b/demo/pkg/subgraphs/hobbies/subgraph/resolver.go index 0a73c02da2..9206076fc1 100644 --- a/demo/pkg/subgraphs/hobbies/subgraph/resolver.go +++ b/demo/pkg/subgraphs/hobbies/subgraph/resolver.go @@ -12,7 +12,7 @@ import ( // It serves as dependency injection for your app, add any dependencies you require here. type Resolver struct { - NatsPubSubByProviderID map[string]*nats.Adapter + NatsPubSubByProviderID map[string]nats.AdapterInterface } func (r *Resolver) Employees(hobby model.Hobby) ([]*model.Employee, error) { diff --git a/demo/pkg/subgraphs/mood/mood.go b/demo/pkg/subgraphs/mood/mood.go index f838df05e5..8bce0d004b 100644 --- a/demo/pkg/subgraphs/mood/mood.go +++ b/demo/pkg/subgraphs/mood/mood.go @@ -8,7 +8,7 @@ import ( "github.com/wundergraph/cosmo/demo/pkg/subgraphs/mood/subgraph/generated" ) -func NewSchema(natsPubSubByProviderID map[string]*nats.Adapter) graphql.ExecutableSchema { +func NewSchema(natsPubSubByProviderID map[string]nats.AdapterInterface) graphql.ExecutableSchema { return generated.NewExecutableSchema(generated.Config{Resolvers: &subgraph.Resolver{ NatsPubSubByProviderID: natsPubSubByProviderID, }}) diff --git a/demo/pkg/subgraphs/mood/subgraph/resolver.go b/demo/pkg/subgraphs/mood/subgraph/resolver.go index 42feac1afd..a5461fac82 100644 --- a/demo/pkg/subgraphs/mood/subgraph/resolver.go +++ b/demo/pkg/subgraphs/mood/subgraph/resolver.go @@ -9,6 +9,6 @@ import ( // It serves as dependency injection for your app, add any dependencies you require here. type Resolver struct { - NatsPubSubByProviderID map[string]*nats.Adapter + NatsPubSubByProviderID map[string]nats.AdapterInterface GetPubSubName func(string) string } diff --git a/demo/pkg/subgraphs/products/products.go b/demo/pkg/subgraphs/products/products.go index ae165ca566..6a2c8c5984 100644 --- a/demo/pkg/subgraphs/products/products.go +++ b/demo/pkg/subgraphs/products/products.go @@ -8,7 +8,7 @@ import ( "github.com/wundergraph/cosmo/demo/pkg/subgraphs/products/subgraph/generated" ) -func NewSchema(natsPubSubByProviderID map[string]*nats.Adapter) graphql.ExecutableSchema { +func NewSchema(natsPubSubByProviderID map[string]nats.AdapterInterface) graphql.ExecutableSchema { return generated.NewExecutableSchema(generated.Config{Resolvers: &subgraph.Resolver{ NatsPubSubByProviderID: natsPubSubByProviderID, TopSecretFederationFactsData: subgraph.TopSecretFederationFacts, diff --git a/demo/pkg/subgraphs/products/subgraph/resolver.go b/demo/pkg/subgraphs/products/subgraph/resolver.go index c8a77e87d5..db8de70257 100644 --- a/demo/pkg/subgraphs/products/subgraph/resolver.go +++ b/demo/pkg/subgraphs/products/subgraph/resolver.go @@ -13,6 +13,6 @@ import ( type Resolver struct { mux sync.Mutex - NatsPubSubByProviderID map[string]*nats.Adapter + NatsPubSubByProviderID map[string]nats.AdapterInterface TopSecretFederationFactsData []model.TopSecretFact } diff --git a/demo/pkg/subgraphs/products_fg/products.go b/demo/pkg/subgraphs/products_fg/products.go index 580998919a..73e2082af4 100644 --- a/demo/pkg/subgraphs/products_fg/products.go +++ b/demo/pkg/subgraphs/products_fg/products.go @@ -8,7 +8,7 @@ import ( "github.com/wundergraph/cosmo/demo/pkg/subgraphs/products_fg/subgraph/generated" ) -func NewSchema(natsPubSubByProviderID map[string]*nats.Adapter) graphql.ExecutableSchema { +func NewSchema(natsPubSubByProviderID map[string]nats.AdapterInterface) graphql.ExecutableSchema { return generated.NewExecutableSchema(generated.Config{Resolvers: &subgraph.Resolver{ NatsPubSubByProviderID: natsPubSubByProviderID, TopSecretFederationFactsData: subgraph.TopSecretFederationFacts, diff --git a/demo/pkg/subgraphs/products_fg/subgraph/resolver.go b/demo/pkg/subgraphs/products_fg/subgraph/resolver.go index e20dd809ee..78a07d51ce 100644 --- a/demo/pkg/subgraphs/products_fg/subgraph/resolver.go +++ b/demo/pkg/subgraphs/products_fg/subgraph/resolver.go @@ -13,6 +13,6 @@ import ( type Resolver struct { mux sync.Mutex - NatsPubSubByProviderID map[string]*nats.Adapter + NatsPubSubByProviderID map[string]nats.AdapterInterface TopSecretFederationFactsData []model.TopSecretFact } diff --git a/demo/pkg/subgraphs/subgraphs.go b/demo/pkg/subgraphs/subgraphs.go index 42858691bc..c5e91ab034 100644 --- a/demo/pkg/subgraphs/subgraphs.go +++ b/demo/pkg/subgraphs/subgraphs.go @@ -161,7 +161,7 @@ func subgraphHandler(schema graphql.ExecutableSchema) http.Handler { } type SubgraphOptions struct { - NatsPubSubByProviderID map[string]*natsPubsub.Adapter + NatsPubSubByProviderID map[string]natsPubsub.AdapterInterface GetPubSubName func(string) string } @@ -207,7 +207,7 @@ func New(ctx context.Context, config *Config) (*Subgraphs, error) { url = defaultSourceNameURL } - natsPubSubByProviderID := map[string]*natsPubsub.Adapter{} + natsPubSubByProviderID := map[string]natsPubsub.AdapterInterface{} defaultAdapter, err := natsPubsub.NewAdapter(ctx, zap.NewNop(), url, []nats.Option{}, "hostname", "test") if err != nil { diff --git a/demo/pkg/subgraphs/test1/subgraph/resolver.go b/demo/pkg/subgraphs/test1/subgraph/resolver.go index d0f9debc31..6cea8bd318 100644 --- a/demo/pkg/subgraphs/test1/subgraph/resolver.go +++ b/demo/pkg/subgraphs/test1/subgraph/resolver.go @@ -9,5 +9,5 @@ import ( // It serves as dependency injection for your app, add any dependencies you require here. type Resolver struct { - NatsPubSubByProviderID map[string]*nats.Adapter + NatsPubSubByProviderID map[string]nats.AdapterInterface } diff --git a/demo/pkg/subgraphs/test1/test1.go b/demo/pkg/subgraphs/test1/test1.go index 5af91d1172..3234af4209 100644 --- a/demo/pkg/subgraphs/test1/test1.go +++ b/demo/pkg/subgraphs/test1/test1.go @@ -8,7 +8,7 @@ import ( "github.com/wundergraph/cosmo/demo/pkg/subgraphs/test1/subgraph/generated" ) -func NewSchema(natsPubSubByProviderID map[string]*nats.Adapter) graphql.ExecutableSchema { +func NewSchema(natsPubSubByProviderID map[string]nats.AdapterInterface) graphql.ExecutableSchema { return generated.NewExecutableSchema(generated.Config{Resolvers: &subgraph.Resolver{ NatsPubSubByProviderID: natsPubSubByProviderID, }}) diff --git a/router-tests/testenv/testenv.go b/router-tests/testenv/testenv.go index d0d915999d..f0a2003ba5 100644 --- a/router-tests/testenv/testenv.go +++ b/router-tests/testenv/testenv.go @@ -2090,11 +2090,11 @@ func WSWriteJSON(t testing.TB, conn *websocket.Conn, v interface{}) (err error) func subgraphOptions(ctx context.Context, t testing.TB, logger *zap.Logger, natsData *NatsData, pubSubName func(string) string) *subgraphs.SubgraphOptions { if natsData == nil { return &subgraphs.SubgraphOptions{ - NatsPubSubByProviderID: map[string]*pubsubNats.Adapter{}, + NatsPubSubByProviderID: map[string]pubsubNats.AdapterInterface{}, GetPubSubName: pubSubName, } } - natsPubSubByProviderID := make(map[string]*pubsubNats.Adapter, len(demoNatsProviders)) + natsPubSubByProviderID := make(map[string]pubsubNats.AdapterInterface, len(demoNatsProviders)) for _, sourceName := range demoNatsProviders { adapter, err := pubsubNats.NewAdapter(ctx, logger, natsData.Params[0].Url, natsData.Params[0].Opts, "hostname", "listenaddr") require.NoError(t, err) diff --git a/router/pkg/pubsub/datasource/test_utils.go b/router/pkg/pubsub/datasource/test_utils.go new file mode 100644 index 0000000000..33500536ce --- /dev/null +++ b/router/pkg/pubsub/datasource/test_utils.go @@ -0,0 +1,47 @@ +package datasource + +import ( + "encoding/json" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +// VerifyPubSubDataSourceImplementation is a common test function to verify any PubSubDataSource implementation +// This function can be used by other packages to test their PubSubDataSource implementations +func VerifyPubSubDataSourceImplementation(t *testing.T, pubSub PubSubDataSource) { + // Test GetEngineEventConfiguration + engineEventConfig := pubSub.GetEngineEventConfiguration() + require.NotNil(t, engineEventConfig, "Expected non-nil EngineEventConfiguration") + + // Test GetResolveDataSource + dataSource, err := pubSub.GetResolveDataSource() + require.NoError(t, err, "Expected no error from GetResolveDataSource") + require.NotNil(t, dataSource, "Expected non-nil DataSource") + + // Test GetResolveDataSourceInput with sample event data + testEvent := []byte(`{"test":"data"}`) + input, err := pubSub.GetResolveDataSourceInput(testEvent) + require.NoError(t, err, "Expected no error from GetResolveDataSourceInput") + assert.NotEmpty(t, input, "Expected non-empty input") + + // Make sure the input is valid JSON + var result interface{} + err = json.Unmarshal([]byte(input), &result) + assert.NoError(t, err, "Expected valid JSON from GetResolveDataSourceInput") + + // Test GetResolveDataSourceSubscription + subscription, err := pubSub.GetResolveDataSourceSubscription() + require.NoError(t, err, "Expected no error from GetResolveDataSourceSubscription") + require.NotNil(t, subscription, "Expected non-nil SubscriptionDataSource") + + // Test GetResolveDataSourceSubscriptionInput + subscriptionInput, err := pubSub.GetResolveDataSourceSubscriptionInput() + require.NoError(t, err, "Expected no error from GetResolveDataSourceSubscriptionInput") + assert.NotEmpty(t, subscriptionInput, "Expected non-empty subscription input") + + // Make sure the subscription input is valid JSON + err = json.Unmarshal([]byte(subscriptionInput), &result) + assert.NoError(t, err, "Expected valid JSON from GetResolveDataSourceSubscriptionInput") +} diff --git a/router/pkg/pubsub/kafka/adapter.go b/router/pkg/pubsub/kafka/adapter.go index 3f40f1e8a1..675c225c9d 100644 --- a/router/pkg/pubsub/kafka/adapter.go +++ b/router/pkg/pubsub/kafka/adapter.go @@ -49,7 +49,7 @@ func NewLazyClient(opts ...kgo.Opt) *LazyClient { } } -func NewAdapter(ctx context.Context, logger *zap.Logger, opts []kgo.Opt) (*Adapter, error) { +func NewAdapter(ctx context.Context, logger *zap.Logger, opts []kgo.Opt) (AdapterInterface, error) { ctx, cancel := context.WithCancel(ctx) if logger == nil { logger = zap.NewNop() @@ -70,6 +70,12 @@ func NewAdapter(ctx context.Context, logger *zap.Logger, opts []kgo.Opt) (*Adapt }, nil } +// AdapterInterface defines the interface for Kafka adapter operations +type AdapterInterface interface { + Subscribe(ctx context.Context, event SubscriptionEventConfiguration, updater resolve.SubscriptionUpdater) error + Publish(ctx context.Context, event PublishEventConfiguration) error +} + // Adapter is a Kafka pubsub implementation. // It uses the franz-go Kafka client to consume and produce messages. // The pubsub is stateless and does not store any messages. @@ -84,6 +90,9 @@ type Adapter struct { cancel context.CancelFunc } +// Ensure Adapter implements AdapterInterface +var _ AdapterInterface = (*Adapter)(nil) + // topicPoller polls the Kafka topic for new records and calls the updateTriggers function. func (p *Adapter) topicPoller(ctx context.Context, client *kgo.Client, updater resolve.SubscriptionUpdater) error { for { diff --git a/router/pkg/pubsub/kafka/engine_datasource.go b/router/pkg/pubsub/kafka/engine_datasource.go index 9b71b24b89..f342469f52 100644 --- a/router/pkg/pubsub/kafka/engine_datasource.go +++ b/router/pkg/pubsub/kafka/engine_datasource.go @@ -29,7 +29,7 @@ func (s *PublishEventConfiguration) MarshalJSONTemplate() string { } type SubscriptionSource struct { - pubSub *Adapter + pubSub AdapterInterface } func (s *SubscriptionSource) UniqueRequestID(ctx *resolve.Context, input []byte, xxh *xxhash.Digest) error { @@ -63,7 +63,7 @@ func (s *SubscriptionSource) Start(ctx *resolve.Context, input []byte, updater r } type KafkaPublishDataSource struct { - pubSub *Adapter + pubSub AdapterInterface } func (s *KafkaPublishDataSource) Load(ctx context.Context, input []byte, out *bytes.Buffer) error { diff --git a/router/pkg/pubsub/kafka/provider.go b/router/pkg/pubsub/kafka/provider.go index 9ecb5b95d0..ff767a7de0 100644 --- a/router/pkg/pubsub/kafka/provider.go +++ b/router/pkg/pubsub/kafka/provider.go @@ -45,7 +45,7 @@ func buildKafkaOptions(eventSource config.KafkaEventSource) ([]kgo.Opt, error) { } func GetProvider(ctx context.Context, in *nodev1.DataSourceConfiguration, dsMeta *plan.DataSourceMetadata, config config.EventsConfiguration, logger *zap.Logger, hostName string, routerListenAddr string) (datasource.PubSubProvider, error) { - providers := make(map[string]*Adapter) + providers := make(map[string]AdapterInterface) definedProviders := make(map[string]bool) for _, provider := range config.Providers.Kafka { definedProviders[provider.ID] = true @@ -87,7 +87,7 @@ func GetProvider(ctx context.Context, in *nodev1.DataSourceConfiguration, dsMeta type PubSubProvider struct { EventConfiguration []*nodev1.KafkaEventConfiguration Logger *zap.Logger - Providers map[string]*Adapter + Providers map[string]AdapterInterface } func (c *PubSubProvider) FindPubSubDataSource(typeName string, fieldName string, extractFn datasource.ArgumentTemplateCallback) (datasource.PubSubDataSource, error) { diff --git a/router/pkg/pubsub/kafka/pubsub_datasource.go b/router/pkg/pubsub/kafka/pubsub_datasource.go index 0e1e631af5..fac984411e 100644 --- a/router/pkg/pubsub/kafka/pubsub_datasource.go +++ b/router/pkg/pubsub/kafka/pubsub_datasource.go @@ -10,7 +10,7 @@ import ( type PubSubDataSource struct { EventConfiguration *nodev1.KafkaEventConfiguration - KafkaAdapter *Adapter + KafkaAdapter AdapterInterface } func (c *PubSubDataSource) GetEngineEventConfiguration() *nodev1.EngineEventConfiguration { diff --git a/router/pkg/pubsub/kafka/pubsub_datasource_test.go b/router/pkg/pubsub/kafka/pubsub_datasource_test.go new file mode 100644 index 0000000000..a090e3ca87 --- /dev/null +++ b/router/pkg/pubsub/kafka/pubsub_datasource_test.go @@ -0,0 +1,170 @@ +package kafka + +import ( + "bytes" + "context" + "encoding/json" + "testing" + + "github.com/stretchr/testify/mock" + "github.com/stretchr/testify/require" + nodev1 "github.com/wundergraph/cosmo/router/gen/proto/wg/cosmo/node/v1" + "github.com/wundergraph/cosmo/router/pkg/pubsub/datasource" + "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/resolve" +) + +// MockAdapter mocks the required functionality from the Adapter for testing +type MockAdapter struct { + mock.Mock +} + +// Ensure MockAdapter implements KafkaAdapterInterface +var _ AdapterInterface = (*MockAdapter)(nil) + +func (m *MockAdapter) Subscribe(ctx context.Context, event SubscriptionEventConfiguration, updater resolve.SubscriptionUpdater) error { + args := m.Called(ctx, event, updater) + return args.Error(0) +} + +func (m *MockAdapter) Publish(ctx context.Context, event PublishEventConfiguration) error { + args := m.Called(ctx, event) + return args.Error(0) +} + +func TestKafkaPubSubDataSource(t *testing.T) { + // Create event configuration with required fields + engineEventConfig := &nodev1.EngineEventConfiguration{ + ProviderId: "test-provider", + Type: nodev1.EventType_PUBLISH, + TypeName: "TestType", + FieldName: "testField", + } + + kafkaCfg := &nodev1.KafkaEventConfiguration{ + EngineEventConfiguration: engineEventConfig, + Topics: []string{"test-topic"}, + } + + // Create the data source to test with a real adapter + adapter := &Adapter{} + pubsub := &PubSubDataSource{ + EventConfiguration: kafkaCfg, + KafkaAdapter: adapter, + } + + // Run the standard test suite + datasource.VerifyPubSubDataSourceImplementation(t, pubsub) +} + +// TestPubSubDataSourceWithMockAdapter tests the PubSubDataSource with a mocked adapter +func TestPubSubDataSourceWithMockAdapter(t *testing.T) { + // Create event configuration with required fields + engineEventConfig := &nodev1.EngineEventConfiguration{ + ProviderId: "test-provider", + Type: nodev1.EventType_PUBLISH, + TypeName: "TestType", + FieldName: "testField", + } + + kafkaCfg := &nodev1.KafkaEventConfiguration{ + EngineEventConfiguration: engineEventConfig, + Topics: []string{"test-topic"}, + } + + // Create mock adapter + mockAdapter := new(MockAdapter) + + // Configure mock expectations for Publish + mockAdapter.On("Publish", mock.Anything, mock.MatchedBy(func(event PublishEventConfiguration) bool { + return event.ProviderID == "test-provider" && event.Topic == "test-topic" + })).Return(nil) + + // Create the data source with mock adapter + pubsub := &PubSubDataSource{ + EventConfiguration: kafkaCfg, + KafkaAdapter: mockAdapter, + } + + // Get the data source + ds, err := pubsub.GetResolveDataSource() + require.NoError(t, err) + + // Get the input + input, err := pubsub.GetResolveDataSourceInput([]byte(`{"test":"data"}`)) + require.NoError(t, err) + + // Call Load on the data source + out := &bytes.Buffer{} + err = ds.Load(context.Background(), []byte(input), out) + require.NoError(t, err) + require.Equal(t, `{"success": true}`, out.String()) + + // Verify mock expectations + mockAdapter.AssertExpectations(t) +} + +// TestKafkaPubSubDataSourceMultiTopicSubscription tests only the subscription functionality +// for multiple topics. The publish and resolve datasource tests are skipped since they +// do not support multiple topics. +func TestKafkaPubSubDataSourceMultiTopicSubscription(t *testing.T) { + // Create event configuration with multiple topics + engineEventConfig := &nodev1.EngineEventConfiguration{ + ProviderId: "test-provider", + Type: nodev1.EventType_PUBLISH, // Must be PUBLISH as it's the only supported type + TypeName: "TestType", + FieldName: "testField", + } + + kafkaCfg := &nodev1.KafkaEventConfiguration{ + EngineEventConfiguration: engineEventConfig, + Topics: []string{"test-topic-1", "test-topic-2"}, + } + + // Create mock adapter + mockAdapter := new(MockAdapter) + + // Set up expectations for subscribe with both topics + mockAdapter.On("Subscribe", mock.Anything, mock.MatchedBy(func(event SubscriptionEventConfiguration) bool { + return event.ProviderID == "test-provider" && + len(event.Topics) == 2 && + event.Topics[0] == "test-topic-1" && + event.Topics[1] == "test-topic-2" + }), mock.Anything).Return(nil) + + // Create the data source to test with mock adapter + pubsub := &PubSubDataSource{ + EventConfiguration: kafkaCfg, + KafkaAdapter: mockAdapter, + } + + // Test GetEngineEventConfiguration + testConfig := pubsub.GetEngineEventConfiguration() + require.NotNil(t, testConfig, "Expected non-nil EngineEventConfiguration") + + // Test GetResolveDataSourceSubscription + subscription, err := pubsub.GetResolveDataSourceSubscription() + require.NoError(t, err, "Expected no error from GetResolveDataSourceSubscription") + require.NotNil(t, subscription, "Expected non-nil SubscriptionDataSource") + + // Test GetResolveDataSourceSubscriptionInput + subscriptionInput, err := pubsub.GetResolveDataSourceSubscriptionInput() + require.NoError(t, err, "Expected no error from GetResolveDataSourceSubscriptionInput") + require.NotEmpty(t, subscriptionInput, "Expected non-empty subscription input") + + // Verify the subscription input contains both topics + var subscriptionConfig SubscriptionEventConfiguration + err = json.Unmarshal([]byte(subscriptionInput), &subscriptionConfig) + require.NoError(t, err, "Expected valid JSON from GetResolveDataSourceSubscriptionInput") + require.Equal(t, 2, len(subscriptionConfig.Topics), "Expected 2 topics in subscription configuration") + require.Equal(t, "test-topic-1", subscriptionConfig.Topics[0], "Expected first topic to be 'test-topic-1'") + require.Equal(t, "test-topic-2", subscriptionConfig.Topics[1], "Expected second topic to be 'test-topic-2'") + +} + +// bytesBuffer is a helper that implements io.Writer to capture output +type bytesBuffer []byte + +func (b *bytesBuffer) Write(p []byte) (n int, err error) { + *b = append(*b, p...) + return len(p), nil +} diff --git a/router/pkg/pubsub/nats/adapter.go b/router/pkg/pubsub/nats/adapter.go index 679feeac82..bcdad2f3d1 100644 --- a/router/pkg/pubsub/nats/adapter.go +++ b/router/pkg/pubsub/nats/adapter.go @@ -16,6 +16,19 @@ import ( "go.uber.org/zap" ) +// AdapterInterface defines the methods that a NATS adapter should implement +type AdapterInterface interface { + // Subscribe subscribes to the given events and sends updates to the updater + Subscribe(ctx context.Context, event SubscriptionEventConfiguration, updater resolve.SubscriptionUpdater) error + // Publish publishes the given event to the specified subject + Publish(ctx context.Context, event PublishAndRequestEventConfiguration) error + // Request sends a request to the specified subject and writes the response to the given writer + Request(ctx context.Context, event PublishAndRequestEventConfiguration, w io.Writer) error + // Shutdown gracefully shuts down the adapter + Shutdown(ctx context.Context) error +} + +// Adapter implements the AdapterInterface for NATS pub/sub type Adapter struct { ctx context.Context client *LazyClient @@ -275,7 +288,7 @@ func (p *Adapter) Shutdown(ctx context.Context) error { return nil } -func NewAdapter(ctx context.Context, logger *zap.Logger, url string, opts []nats.Option, hostName string, routerListenAddr string) (*Adapter, error) { +func NewAdapter(ctx context.Context, logger *zap.Logger, url string, opts []nats.Option, hostName string, routerListenAddr string) (AdapterInterface, error) { if logger == nil { logger = zap.NewNop() } diff --git a/router/pkg/pubsub/nats/engine_datasource.go b/router/pkg/pubsub/nats/engine_datasource.go index ba7e0ae1e6..c4ef8e1e2f 100644 --- a/router/pkg/pubsub/nats/engine_datasource.go +++ b/router/pkg/pubsub/nats/engine_datasource.go @@ -46,7 +46,7 @@ func (s *PublishEventConfiguration) MarshalJSONTemplate() string { } type SubscriptionSource struct { - pubSub *Adapter + pubSub AdapterInterface } func (s *SubscriptionSource) UniqueRequestID(ctx *resolve.Context, input []byte, xxh *xxhash.Digest) error { @@ -81,7 +81,7 @@ func (s *SubscriptionSource) Start(ctx *resolve.Context, input []byte, updater r } type NatsPublishDataSource struct { - pubSub *Adapter + pubSub AdapterInterface } func (s *NatsPublishDataSource) Load(ctx context.Context, input []byte, out *bytes.Buffer) error { @@ -104,7 +104,7 @@ func (s *NatsPublishDataSource) LoadWithFiles(ctx context.Context, input []byte, } type NatsRequestDataSource struct { - pubSub *Adapter + pubSub AdapterInterface } func (s *NatsRequestDataSource) Load(ctx context.Context, input []byte, out *bytes.Buffer) error { diff --git a/router/pkg/pubsub/nats/provider.go b/router/pkg/pubsub/nats/provider.go index 8e7815722f..22212c735b 100644 --- a/router/pkg/pubsub/nats/provider.go +++ b/router/pkg/pubsub/nats/provider.go @@ -91,7 +91,7 @@ func transformEventConfig(cfg *nodev1.NatsEventConfiguration, fn datasource.Argu type PubSubProvider struct { EventConfiguration []*nodev1.NatsEventConfiguration Logger *zap.Logger - Providers map[string]*Adapter + Providers map[string]AdapterInterface } func (c *PubSubProvider) FindPubSubDataSource(typeName string, fieldName string, extractFn datasource.ArgumentTemplateCallback) (datasource.PubSubDataSource, error) { @@ -111,7 +111,7 @@ func (c *PubSubProvider) FindPubSubDataSource(typeName string, fieldName string, } func GetProvider(ctx context.Context, in *nodev1.DataSourceConfiguration, dsMeta *plan.DataSourceMetadata, config config.EventsConfiguration, logger *zap.Logger, hostName string, routerListenAddr string) (datasource.PubSubProvider, error) { - var providers map[string]*Adapter + var providers map[string]AdapterInterface if natsData := in.GetCustomEvents().GetNats(); natsData != nil { definedProviders := make(map[string]bool) for _, provider := range config.Providers.Nats { @@ -124,7 +124,7 @@ func GetProvider(ctx context.Context, in *nodev1.DataSourceConfiguration, dsMeta } usedProviders[event.EngineEventConfiguration.ProviderId] = true } - providers = map[string]*Adapter{} + providers = map[string]AdapterInterface{} for _, provider := range config.Providers.Nats { if !usedProviders[provider.ID] { continue diff --git a/router/pkg/pubsub/nats/pubsub_datasource.go b/router/pkg/pubsub/nats/pubsub_datasource.go index b084cb9edc..5f3b37d702 100644 --- a/router/pkg/pubsub/nats/pubsub_datasource.go +++ b/router/pkg/pubsub/nats/pubsub_datasource.go @@ -59,7 +59,7 @@ func NewLazyClient(url string, opts ...nats.Option) *LazyClient { type PubSubDataSource struct { EventConfiguration *nodev1.NatsEventConfiguration - NatsAdapter *Adapter + NatsAdapter AdapterInterface } func (c *PubSubDataSource) GetEngineEventConfiguration() *nodev1.EngineEventConfiguration { diff --git a/router/pkg/pubsub/nats/pubsub_datasource_test.go b/router/pkg/pubsub/nats/pubsub_datasource_test.go new file mode 100644 index 0000000000..3f1622cec2 --- /dev/null +++ b/router/pkg/pubsub/nats/pubsub_datasource_test.go @@ -0,0 +1,300 @@ +package nats + +import ( + "bytes" + "context" + "encoding/json" + "io" + "testing" + + "github.com/stretchr/testify/mock" + "github.com/stretchr/testify/require" + nodev1 "github.com/wundergraph/cosmo/router/gen/proto/wg/cosmo/node/v1" + "github.com/wundergraph/cosmo/router/pkg/pubsub/datasource" + "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/resolve" +) + +// MockAdapter mocks the required functionality from the Adapter for testing +type MockAdapter struct { + mock.Mock +} + +// Ensure MockAdapter implements AdapterInterface +var _ AdapterInterface = (*MockAdapter)(nil) + +func (m *MockAdapter) Subscribe(ctx context.Context, event SubscriptionEventConfiguration, updater resolve.SubscriptionUpdater) error { + args := m.Called(ctx, event, updater) + return args.Error(0) +} + +func (m *MockAdapter) Publish(ctx context.Context, event PublishAndRequestEventConfiguration) error { + args := m.Called(ctx, event) + return args.Error(0) +} + +func (m *MockAdapter) Request(ctx context.Context, event PublishAndRequestEventConfiguration, w io.Writer) error { + args := m.Called(ctx, event, w) + return args.Error(0) +} + +func (m *MockAdapter) Shutdown(ctx context.Context) error { + args := m.Called(ctx) + return args.Error(0) +} + +func TestNatsPubSubDataSource(t *testing.T) { + // Create event configuration with required fields + engineEventConfig := &nodev1.EngineEventConfiguration{ + ProviderId: "test-provider", + Type: nodev1.EventType_PUBLISH, + TypeName: "TestType", + FieldName: "testField", + } + + natsCfg := &nodev1.NatsEventConfiguration{ + EngineEventConfiguration: engineEventConfig, + Subjects: []string{"test.subject"}, + } + + // Create the data source to test + pubsub := &PubSubDataSource{ + EventConfiguration: natsCfg, + NatsAdapter: &Adapter{}, // Using a real Adapter type but with nil values for the test + } + + // Run the standard test suite + datasource.VerifyPubSubDataSourceImplementation(t, pubsub) +} + +func TestNatsPubSubDataSourceWithStreamConfiguration(t *testing.T) { + // Create event configuration with required fields and stream config + engineEventConfig := &nodev1.EngineEventConfiguration{ + ProviderId: "test-provider", + Type: nodev1.EventType_PUBLISH, + TypeName: "TestType", + FieldName: "testField", + } + + streamCfg := &nodev1.NatsStreamConfiguration{ + ConsumerName: "test-consumer", + StreamName: "test-stream", + ConsumerInactiveThreshold: 60, + } + + natsCfg := &nodev1.NatsEventConfiguration{ + EngineEventConfiguration: engineEventConfig, + Subjects: []string{"test.subject"}, + StreamConfiguration: streamCfg, + } + + // Create the data source to test + pubsub := &PubSubDataSource{ + EventConfiguration: natsCfg, + NatsAdapter: &Adapter{}, // Using a real Adapter type but with nil values for the test + } + + // Run the standard test suite + datasource.VerifyPubSubDataSourceImplementation(t, pubsub) +} + +func TestNatsPubSubDataSourceRequestType(t *testing.T) { + // Create event configuration with REQUEST type + engineEventConfig := &nodev1.EngineEventConfiguration{ + ProviderId: "test-provider", + Type: nodev1.EventType_REQUEST, + TypeName: "TestType", + FieldName: "testField", + } + + natsCfg := &nodev1.NatsEventConfiguration{ + EngineEventConfiguration: engineEventConfig, + Subjects: []string{"test.subject"}, + } + + // Create the data source to test + pubsub := &PubSubDataSource{ + EventConfiguration: natsCfg, + NatsAdapter: &Adapter{}, // Using a real Adapter type but with nil values for the test + } + + // Run the standard test suite + datasource.VerifyPubSubDataSourceImplementation(t, pubsub) +} + +func TestNatsPubSubDataSourceSubscribeType(t *testing.T) { + // Create event configuration with SUBSCRIBE type + engineEventConfig := &nodev1.EngineEventConfiguration{ + ProviderId: "test-provider", + Type: nodev1.EventType_PUBLISH, + TypeName: "TestType", + FieldName: "testField", + } + + natsCfg := &nodev1.NatsEventConfiguration{ + EngineEventConfiguration: engineEventConfig, + Subjects: []string{"test.subject"}, + } + + // Create the data source to test + pubsub := &PubSubDataSource{ + EventConfiguration: natsCfg, + NatsAdapter: &Adapter{}, // Using a real Adapter type but with nil values for the test + } + + // Run the standard test suite + datasource.VerifyPubSubDataSourceImplementation(t, pubsub) +} + +// TestPubSubDataSourceWithMockAdapter tests the PubSubDataSource with a mocked adapter +func TestPubSubDataSourceWithMockAdapter(t *testing.T) { + // Create event configuration with required fields + engineEventConfig := &nodev1.EngineEventConfiguration{ + ProviderId: "test-provider", + Type: nodev1.EventType_PUBLISH, + TypeName: "TestType", + FieldName: "testField", + } + + natsCfg := &nodev1.NatsEventConfiguration{ + EngineEventConfiguration: engineEventConfig, + Subjects: []string{"test.subject"}, + } + + // Create mock adapter + mockAdapter := new(MockAdapter) + + // Configure mock expectations for Publish + mockAdapter.On("Publish", mock.Anything, mock.MatchedBy(func(event PublishAndRequestEventConfiguration) bool { + return event.ProviderID == "test-provider" && event.Subject == "test.subject" + })).Return(nil) + + // Create the data source with mock adapter + pubsub := &PubSubDataSource{ + EventConfiguration: natsCfg, + NatsAdapter: mockAdapter, + } + + // Get the data source + ds, err := pubsub.GetResolveDataSource() + require.NoError(t, err) + + // Get the input + input, err := pubsub.GetResolveDataSourceInput([]byte(`{"test":"data"}`)) + require.NoError(t, err) + + // Call Load on the data source + out := &bytes.Buffer{} + err = ds.Load(context.Background(), []byte(input), out) + require.NoError(t, err) + require.Equal(t, `{"success": true}`, out.String()) + + // Verify mock expectations + mockAdapter.AssertExpectations(t) +} + +// TestNatsPubSubDataSourceRequestWithMockAdapter tests the REQUEST functionality with a mocked adapter +func TestNatsPubSubDataSourceRequestWithMockAdapter(t *testing.T) { + // Create event configuration with REQUEST type + engineEventConfig := &nodev1.EngineEventConfiguration{ + ProviderId: "test-provider", + Type: nodev1.EventType_REQUEST, + TypeName: "TestType", + FieldName: "testField", + } + + natsCfg := &nodev1.NatsEventConfiguration{ + EngineEventConfiguration: engineEventConfig, + Subjects: []string{"test.subject"}, + } + + // Create mock adapter + mockAdapter := new(MockAdapter) + + // Configure mock expectations for Request + mockAdapter.On("Request", mock.Anything, mock.MatchedBy(func(event PublishAndRequestEventConfiguration) bool { + return event.ProviderID == "test-provider" && event.Subject == "test.subject" + }), mock.Anything).Run(func(args mock.Arguments) { + // Simulate writing a response + w := args.Get(2).(io.Writer) + w.Write([]byte(`{"response":"data"}`)) + }).Return(nil) + + // Create the data source with mock adapter + pubsub := &PubSubDataSource{ + EventConfiguration: natsCfg, + NatsAdapter: mockAdapter, + } + + // Get the data source + ds, err := pubsub.GetResolveDataSource() + require.NoError(t, err) + + // Get the input + input, err := pubsub.GetResolveDataSourceInput([]byte(`{"test":"data"}`)) + require.NoError(t, err) + + // Call Load on the data source + out := &bytes.Buffer{} + err = ds.Load(context.Background(), []byte(input), out) + require.NoError(t, err) + require.Equal(t, `{"response":"data"}`, out.String()) + + // Verify mock expectations + mockAdapter.AssertExpectations(t) +} + +// TestNatsPubSubDataSourceMultiSubjectSubscription tests the subscription functionality +// for multiple subjects with a mocked adapter +func TestNatsPubSubDataSourceMultiSubjectSubscription(t *testing.T) { + // Create event configuration with multiple subjects + engineEventConfig := &nodev1.EngineEventConfiguration{ + ProviderId: "test-provider", + Type: nodev1.EventType_PUBLISH, + TypeName: "TestType", + FieldName: "testField", + } + + natsCfg := &nodev1.NatsEventConfiguration{ + EngineEventConfiguration: engineEventConfig, + Subjects: []string{"test.subject.1", "test.subject.2"}, + } + + // Create mock adapter + mockAdapter := new(MockAdapter) + + // Set up expectations for subscribe with both subjects + mockAdapter.On("Subscribe", mock.Anything, mock.MatchedBy(func(event SubscriptionEventConfiguration) bool { + return event.ProviderID == "test-provider" && + len(event.Subjects) == 2 && + event.Subjects[0] == "test.subject.1" && + event.Subjects[1] == "test.subject.2" + }), mock.Anything).Return(nil) + + // Create the data source to test with mock adapter + pubsub := &PubSubDataSource{ + EventConfiguration: natsCfg, + NatsAdapter: mockAdapter, + } + + // Test GetEngineEventConfiguration + testConfig := pubsub.GetEngineEventConfiguration() + require.NotNil(t, testConfig, "Expected non-nil EngineEventConfiguration") + + // Test GetResolveDataSourceSubscription + subscription, err := pubsub.GetResolveDataSourceSubscription() + require.NoError(t, err, "Expected no error from GetResolveDataSourceSubscription") + require.NotNil(t, subscription, "Expected non-nil SubscriptionDataSource") + + // Test GetResolveDataSourceSubscriptionInput + subscriptionInput, err := pubsub.GetResolveDataSourceSubscriptionInput() + require.NoError(t, err, "Expected no error from GetResolveDataSourceSubscriptionInput") + require.NotEmpty(t, subscriptionInput, "Expected non-empty subscription input") + + // Verify the subscription input contains both subjects + var subscriptionConfig SubscriptionEventConfiguration + err = json.Unmarshal([]byte(subscriptionInput), &subscriptionConfig) + require.NoError(t, err, "Expected valid JSON from GetResolveDataSourceSubscriptionInput") + require.Equal(t, 2, len(subscriptionConfig.Subjects), "Expected 2 subjects in subscription configuration") + require.Equal(t, "test.subject.1", subscriptionConfig.Subjects[0], "Expected first subject to be 'test.subject.1'") + require.Equal(t, "test.subject.2", subscriptionConfig.Subjects[1], "Expected second subject to be 'test.subject.2'") +} From 3a023e266b282e894c67da8361cc88864c74b3b0 Mon Sep 17 00:00:00 2001 From: Alessandro Pagnin Date: Wed, 9 Apr 2025 19:07:17 +0200 Subject: [PATCH 019/126] chore: add github.com/stretchr/objx v0.5.2 dependency --- router/go.mod | 1 + router/go.sum | 1 + 2 files changed, 2 insertions(+) diff --git a/router/go.mod b/router/go.mod index c7e45704b8..2e06e70b34 100644 --- a/router/go.mod +++ b/router/go.mod @@ -125,6 +125,7 @@ require ( github.com/sergi/go-diff v1.3.1 // indirect github.com/shoenig/go-m1cpu v0.1.6 // indirect github.com/sirupsen/logrus v1.9.3 // indirect + github.com/stretchr/objx v0.5.2 // indirect github.com/tidwall/match v1.1.1 // indirect github.com/tidwall/pretty v1.2.1 // indirect github.com/tklauser/go-sysconf v0.3.12 // indirect diff --git a/router/go.sum b/router/go.sum index fe8e6ee3f0..58c3f6a810 100644 --- a/router/go.sum +++ b/router/go.sum @@ -228,6 +228,7 @@ github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+ github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= +github.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY= github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= From 2a96355caefc41c479e4213b6df60465cb70db72 Mon Sep 17 00:00:00 2001 From: Alessandro Pagnin Date: Wed, 9 Apr 2025 19:12:19 +0200 Subject: [PATCH 020/126] chore: remove unused bytesBuffer helper from Kafka pubsub tests --- router/pkg/pubsub/kafka/pubsub_datasource_test.go | 8 -------- 1 file changed, 8 deletions(-) diff --git a/router/pkg/pubsub/kafka/pubsub_datasource_test.go b/router/pkg/pubsub/kafka/pubsub_datasource_test.go index a090e3ca87..abfa4ce03b 100644 --- a/router/pkg/pubsub/kafka/pubsub_datasource_test.go +++ b/router/pkg/pubsub/kafka/pubsub_datasource_test.go @@ -160,11 +160,3 @@ func TestKafkaPubSubDataSourceMultiTopicSubscription(t *testing.T) { require.Equal(t, "test-topic-2", subscriptionConfig.Topics[1], "Expected second topic to be 'test-topic-2'") } - -// bytesBuffer is a helper that implements io.Writer to capture output -type bytesBuffer []byte - -func (b *bytesBuffer) Write(p []byte) (n int, err error) { - *b = append(*b, p...) - return len(p), nil -} From fe2f388dd44f7ee3c9d7a8f3288aacedfcef8f77 Mon Sep 17 00:00:00 2001 From: Alessandro Pagnin Date: Thu, 10 Apr 2025 16:44:07 +0200 Subject: [PATCH 021/126] chore: add tests --- .../pubsub/kafka/engine_datasource_test.go | 281 ++++++++++++ router/pkg/pubsub/kafka/provider_test.go | 206 +++++++++ .../pubsub/kafka/pubsub_datasource_test.go | 103 ++++- .../pkg/pubsub/nats/engine_datasource_test.go | 401 +++++++++++++++++ router/pkg/pubsub/nats/lazy_client.go | 53 +++ router/pkg/pubsub/nats/lazy_client_test.go | 413 ++++++++++++++++++ router/pkg/pubsub/nats/provider_test.go | 282 ++++++++++++ router/pkg/pubsub/nats/pubsub_datasource.go | 48 -- .../pkg/pubsub/nats/pubsub_datasource_test.go | 257 ++++++----- router/pkg/pubsub/nats/utils.go | 4 +- router/pkg/pubsub/nats/utils_test.go | 83 ++++ 11 files changed, 1940 insertions(+), 191 deletions(-) create mode 100644 router/pkg/pubsub/kafka/engine_datasource_test.go create mode 100644 router/pkg/pubsub/kafka/provider_test.go create mode 100644 router/pkg/pubsub/nats/engine_datasource_test.go create mode 100644 router/pkg/pubsub/nats/lazy_client.go create mode 100644 router/pkg/pubsub/nats/lazy_client_test.go create mode 100644 router/pkg/pubsub/nats/provider_test.go create mode 100644 router/pkg/pubsub/nats/utils_test.go diff --git a/router/pkg/pubsub/kafka/engine_datasource_test.go b/router/pkg/pubsub/kafka/engine_datasource_test.go new file mode 100644 index 0000000000..aa58bb939e --- /dev/null +++ b/router/pkg/pubsub/kafka/engine_datasource_test.go @@ -0,0 +1,281 @@ +package kafka + +import ( + "bytes" + "context" + "encoding/json" + "errors" + "testing" + + "github.com/cespare/xxhash/v2" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/mock" + "github.com/stretchr/testify/require" + "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/resolve" +) + +// EngineDataSourceMockAdapter is a mock implementation of AdapterInterface for testing +type EngineDataSourceMockAdapter struct { + mock.Mock +} + +func (m *EngineDataSourceMockAdapter) Subscribe(ctx context.Context, event SubscriptionEventConfiguration, updater resolve.SubscriptionUpdater) error { + args := m.Called(ctx, event, updater) + return args.Error(0) +} + +func (m *EngineDataSourceMockAdapter) Publish(ctx context.Context, event PublishEventConfiguration) error { + args := m.Called(ctx, event) + return args.Error(0) +} + +// MockSubscriptionUpdater implements resolve.SubscriptionUpdater +type MockSubscriptionUpdater struct { + mock.Mock +} + +func (m *MockSubscriptionUpdater) Update(data []byte) { + m.Called(data) +} + +func (m *MockSubscriptionUpdater) Done() { + m.Called() +} + +func TestPublishEventConfiguration_MarshalJSONTemplate(t *testing.T) { + tests := []struct { + name string + config PublishEventConfiguration + wantPattern string + }{ + { + name: "simple configuration", + config: PublishEventConfiguration{ + ProviderID: "test-provider", + Topic: "test-topic", + Data: json.RawMessage(`{"message":"hello"}`), + }, + wantPattern: `{"topic":"test-topic", "data": {"message":"hello"}, "providerId":"test-provider"}`, + }, + { + name: "with special characters", + config: PublishEventConfiguration{ + ProviderID: "test-provider-id", + Topic: "topic-with-hyphens", + Data: json.RawMessage(`{"message":"special \"quotes\" here"}`), + }, + wantPattern: `{"topic":"topic-with-hyphens", "data": {"message":"special \"quotes\" here"}, "providerId":"test-provider-id"}`, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + result := tt.config.MarshalJSONTemplate() + assert.Equal(t, tt.wantPattern, result) + }) + } +} + +func TestSubscriptionSource_UniqueRequestID(t *testing.T) { + tests := []struct { + name string + input string + expectError bool + expectedError error + }{ + { + name: "valid input", + input: `{"topics":["topic1", "topic2"], "providerId":"test-provider"}`, + expectError: false, + }, + { + name: "missing topics", + input: `{"providerId":"test-provider"}`, + expectError: true, + expectedError: errors.New("Key path not found"), + }, + { + name: "missing providerId", + input: `{"topics":["topic1", "topic2"]}`, + expectError: true, + expectedError: errors.New("Key path not found"), + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + source := &SubscriptionSource{ + pubSub: &EngineDataSourceMockAdapter{}, + } + ctx := &resolve.Context{} + input := []byte(tt.input) + xxh := xxhash.New() + + err := source.UniqueRequestID(ctx, input, xxh) + + if tt.expectError { + require.Error(t, err) + if tt.expectedError != nil { + // For jsonparser errors, just check if the error message contains the expected text + assert.Contains(t, err.Error(), tt.expectedError.Error()) + } + } else { + require.NoError(t, err) + // Check that the hash has been updated + assert.NotEqual(t, 0, xxh.Sum64()) + } + }) + } +} + +func TestSubscriptionSource_Start(t *testing.T) { + tests := []struct { + name string + input string + mockSetup func(*EngineDataSourceMockAdapter) + expectError bool + }{ + { + name: "successful subscription", + input: `{"topics":["topic1", "topic2"], "providerId":"test-provider"}`, + mockSetup: func(m *EngineDataSourceMockAdapter) { + m.On("Subscribe", mock.Anything, SubscriptionEventConfiguration{ + ProviderID: "test-provider", + Topics: []string{"topic1", "topic2"}, + }, mock.Anything).Return(nil) + }, + expectError: false, + }, + { + name: "adapter returns error", + input: `{"topics":["topic1"], "providerId":"test-provider"}`, + mockSetup: func(m *EngineDataSourceMockAdapter) { + m.On("Subscribe", mock.Anything, SubscriptionEventConfiguration{ + ProviderID: "test-provider", + Topics: []string{"topic1"}, + }, mock.Anything).Return(errors.New("subscription error")) + }, + expectError: true, + }, + { + name: "invalid input json", + input: `{"invalid json":`, + mockSetup: func(m *EngineDataSourceMockAdapter) {}, + expectError: true, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + mockAdapter := new(EngineDataSourceMockAdapter) + tt.mockSetup(mockAdapter) + + source := &SubscriptionSource{ + pubSub: mockAdapter, + } + + // Set up go context + goCtx := context.Background() + + // Create a resolve.Context with the standard context + resolveCtx := &resolve.Context{} + resolveCtx = resolveCtx.WithContext(goCtx) + + // Create a proper mock updater + updater := new(MockSubscriptionUpdater) + updater.On("Done").Return() + + input := []byte(tt.input) + err := source.Start(resolveCtx, input, updater) + + if tt.expectError { + require.Error(t, err) + } else { + require.NoError(t, err) + } + mockAdapter.AssertExpectations(t) + }) + } +} + +func TestKafkaPublishDataSource_Load(t *testing.T) { + tests := []struct { + name string + input string + mockSetup func(*EngineDataSourceMockAdapter) + expectError bool + expectedOutput string + expectPublished bool + }{ + { + name: "successful publish", + input: `{"topic":"test-topic", "data":{"message":"hello"}, "providerId":"test-provider"}`, + mockSetup: func(m *EngineDataSourceMockAdapter) { + m.On("Publish", mock.Anything, mock.MatchedBy(func(event PublishEventConfiguration) bool { + return event.ProviderID == "test-provider" && + event.Topic == "test-topic" && + string(event.Data) == `{"message":"hello"}` + })).Return(nil) + }, + expectError: false, + expectedOutput: `{"success": true}`, + expectPublished: true, + }, + { + name: "publish error", + input: `{"topic":"test-topic", "data":{"message":"hello"}, "providerId":"test-provider"}`, + mockSetup: func(m *EngineDataSourceMockAdapter) { + m.On("Publish", mock.Anything, mock.Anything).Return(errors.New("publish error")) + }, + expectError: false, // The Load method doesn't return the publish error directly + expectedOutput: `{"success": false}`, + expectPublished: true, + }, + { + name: "invalid input json", + input: `{"invalid json":`, + mockSetup: func(m *EngineDataSourceMockAdapter) {}, + expectError: true, + expectPublished: false, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + mockAdapter := new(EngineDataSourceMockAdapter) + tt.mockSetup(mockAdapter) + + dataSource := &KafkaPublishDataSource{ + pubSub: mockAdapter, + } + ctx := context.Background() + input := []byte(tt.input) + out := &bytes.Buffer{} + + err := dataSource.Load(ctx, input, out) + + if tt.expectError { + require.Error(t, err) + } else { + require.NoError(t, err) + assert.Equal(t, tt.expectedOutput, out.String()) + } + + if tt.expectPublished { + mockAdapter.AssertExpectations(t) + } + }) + } +} + +func TestKafkaPublishDataSource_LoadWithFiles(t *testing.T) { + t.Run("panic on not implemented", func(t *testing.T) { + dataSource := &KafkaPublishDataSource{ + pubSub: &EngineDataSourceMockAdapter{}, + } + + assert.Panics(t, func() { + dataSource.LoadWithFiles(context.Background(), nil, nil, &bytes.Buffer{}) + }) + }) +} diff --git a/router/pkg/pubsub/kafka/provider_test.go b/router/pkg/pubsub/kafka/provider_test.go new file mode 100644 index 0000000000..de54da2dfa --- /dev/null +++ b/router/pkg/pubsub/kafka/provider_test.go @@ -0,0 +1,206 @@ +package kafka + +import ( + "context" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/mock" + "github.com/stretchr/testify/require" + nodev1 "github.com/wundergraph/cosmo/router/gen/proto/wg/cosmo/node/v1" + "github.com/wundergraph/cosmo/router/pkg/config" + "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/resolve" + "go.uber.org/zap" + "go.uber.org/zap/zaptest" + + "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/plan" +) + +// mockAdapter is a mock of AdapterInterface +type mockAdapter struct { + mock.Mock +} + +func (m *mockAdapter) Subscribe(ctx context.Context, event SubscriptionEventConfiguration, updater resolve.SubscriptionUpdater) error { + args := m.Called(ctx, event, updater) + return args.Error(0) +} + +func (m *mockAdapter) Publish(ctx context.Context, event PublishEventConfiguration) error { + args := m.Called(ctx, event) + return args.Error(0) +} + +func TestBuildKafkaOptions(t *testing.T) { + t.Run("basic configuration", func(t *testing.T) { + cfg := config.KafkaEventSource{ + Brokers: []string{"localhost:9092"}, + } + + opts, err := buildKafkaOptions(cfg) + require.NoError(t, err) + require.NotEmpty(t, opts) + }) + + t.Run("with TLS", func(t *testing.T) { + enabled := true + cfg := config.KafkaEventSource{ + Brokers: []string{"localhost:9092"}, + TLS: &config.KafkaTLSConfiguration{ + Enabled: enabled, + }, + } + + opts, err := buildKafkaOptions(cfg) + require.NoError(t, err) + require.NotEmpty(t, opts) + // Can't directly check for TLS options, but we can verify more options are present + require.Equal(t, len(opts), 4) + }) + + t.Run("with auth", func(t *testing.T) { + username := "user" + password := "pass" + cfg := config.KafkaEventSource{ + Brokers: []string{"localhost:9092"}, + Authentication: &config.KafkaAuthentication{ + SASLPlain: config.KafkaSASLPlainAuthentication{ + Username: &username, + Password: &password, + }, + }, + } + + opts, err := buildKafkaOptions(cfg) + require.NoError(t, err) + require.NotEmpty(t, opts) + // Can't directly check for SASL options, but we can verify more options are present + require.Greater(t, len(opts), 1) + }) +} + +func TestGetProvider(t *testing.T) { + t.Run("returns nil if no Kafka configuration", func(t *testing.T) { + ctx := context.Background() + in := &nodev1.DataSourceConfiguration{ + CustomEvents: &nodev1.DataSourceCustomEvents{}, + } + + dsMeta := &plan.DataSourceMetadata{} + cfg := config.EventsConfiguration{} + logger := zaptest.NewLogger(t) + + provider, err := GetProvider(ctx, in, dsMeta, cfg, logger, "host", "addr") + require.NoError(t, err) + require.Nil(t, provider) + }) + + t.Run("errors if provider not found", func(t *testing.T) { + ctx := context.Background() + in := &nodev1.DataSourceConfiguration{ + CustomEvents: &nodev1.DataSourceCustomEvents{ + Kafka: []*nodev1.KafkaEventConfiguration{ + { + EngineEventConfiguration: &nodev1.EngineEventConfiguration{ + ProviderId: "unknown", + }, + }, + }, + }, + } + + dsMeta := &plan.DataSourceMetadata{} + cfg := config.EventsConfiguration{ + Providers: config.EventProviders{ + Kafka: []config.KafkaEventSource{ + {ID: "provider1", Brokers: []string{"localhost:9092"}}, + }, + }, + } + logger := zaptest.NewLogger(t) + + provider, err := GetProvider(ctx, in, dsMeta, cfg, logger, "host", "addr") + require.Error(t, err) + require.Nil(t, provider) + assert.Contains(t, err.Error(), "failed to find Kafka provider with ID") + }) + + t.Run("creates provider with configured adapters", func(t *testing.T) { + providerId := "test-provider" + + in := &nodev1.DataSourceConfiguration{ + CustomEvents: &nodev1.DataSourceCustomEvents{ + Kafka: []*nodev1.KafkaEventConfiguration{ + { + EngineEventConfiguration: &nodev1.EngineEventConfiguration{ + ProviderId: providerId, + }, + }, + }, + }, + } + + cfg := config.EventsConfiguration{ + Providers: config.EventProviders{ + Kafka: []config.KafkaEventSource{ + {ID: providerId, Brokers: []string{"localhost:9092"}}, + }, + }, + } + + logger := zaptest.NewLogger(t) + + // Create mock adapter for testing + provider, err := GetProvider(context.Background(), in, &plan.DataSourceMetadata{}, cfg, logger, "host", "addr") + require.NoError(t, err) + require.NotNil(t, provider) + + // Check the returned provider + kafkaProvider, ok := provider.(*PubSubProvider) + require.True(t, ok) + assert.NotNil(t, kafkaProvider.Logger) + assert.NotNil(t, kafkaProvider.Providers) + assert.Contains(t, kafkaProvider.Providers, providerId) + }) +} + +func TestPubSubProvider_FindPubSubDataSource(t *testing.T) { + mock := &mockAdapter{} + providerId := "test-provider" + typeName := "TestType" + fieldName := "testField" + + provider := &PubSubProvider{ + EventConfiguration: []*nodev1.KafkaEventConfiguration{ + { + EngineEventConfiguration: &nodev1.EngineEventConfiguration{ + TypeName: typeName, + FieldName: fieldName, + ProviderId: providerId, + }, + }, + }, + Logger: zap.NewNop(), + Providers: map[string]AdapterInterface{ + providerId: mock, + }, + } + + t.Run("find matching datasource", func(t *testing.T) { + ds, err := provider.FindPubSubDataSource(typeName, fieldName, nil) + require.NoError(t, err) + require.NotNil(t, ds) + + // Check the returned datasource + kafkaDs, ok := ds.(*PubSubDataSource) + require.True(t, ok) + assert.Equal(t, mock, kafkaDs.KafkaAdapter) + assert.Equal(t, provider.EventConfiguration[0], kafkaDs.EventConfiguration) + }) + + t.Run("return nil if no match", func(t *testing.T) { + ds, err := provider.FindPubSubDataSource("OtherType", fieldName, nil) + require.NoError(t, err) + require.Nil(t, ds) + }) +} diff --git a/router/pkg/pubsub/kafka/pubsub_datasource_test.go b/router/pkg/pubsub/kafka/pubsub_datasource_test.go index abfa4ce03b..b97bbd034b 100644 --- a/router/pkg/pubsub/kafka/pubsub_datasource_test.go +++ b/router/pkg/pubsub/kafka/pubsub_datasource_test.go @@ -103,6 +103,88 @@ func TestPubSubDataSourceWithMockAdapter(t *testing.T) { mockAdapter.AssertExpectations(t) } +// TestPubSubDataSource_GetResolveDataSource_WrongType tests the PubSubDataSource with a mocked adapter +func TestPubSubDataSource_GetResolveDataSource_WrongType(t *testing.T) { + // Create event configuration with required fields + engineEventConfig := &nodev1.EngineEventConfiguration{ + ProviderId: "test-provider", + Type: nodev1.EventType_SUBSCRIBE, + TypeName: "TestType", + FieldName: "testField", + } + + kafkaCfg := &nodev1.KafkaEventConfiguration{ + EngineEventConfiguration: engineEventConfig, + Topics: []string{"test-topic"}, + } + + // Create mock adapter + mockAdapter := new(MockAdapter) + + // Create the data source with mock adapter + pubsub := &PubSubDataSource{ + EventConfiguration: kafkaCfg, + KafkaAdapter: mockAdapter, + } + + // Get the data source + ds, err := pubsub.GetResolveDataSource() + require.Error(t, err) + require.Nil(t, ds) +} + +// TestPubSubDataSource_GetResolveDataSourceInput_MultipleTopics tests the PubSubDataSource with a mocked adapter +func TestPubSubDataSource_GetResolveDataSourceInput_MultipleTopics(t *testing.T) { + // Create event configuration with required fields + engineEventConfig := &nodev1.EngineEventConfiguration{ + ProviderId: "test-provider", + Type: nodev1.EventType_PUBLISH, + TypeName: "TestType", + FieldName: "testField", + } + + kafkaCfg := &nodev1.KafkaEventConfiguration{ + EngineEventConfiguration: engineEventConfig, + Topics: []string{"test-topic-1", "test-topic-2"}, + } + + // Create the data source with mock adapter + pubsub := &PubSubDataSource{ + EventConfiguration: kafkaCfg, + } + + // Get the input + input, err := pubsub.GetResolveDataSourceInput([]byte(`{"test":"data"}`)) + require.Error(t, err) + require.Empty(t, input) +} + +// TestPubSubDataSource_GetResolveDataSourceInput_NoTopics tests the PubSubDataSource with a mocked adapter +func TestPubSubDataSource_GetResolveDataSourceInput_NoTopics(t *testing.T) { + // Create event configuration with required fields + engineEventConfig := &nodev1.EngineEventConfiguration{ + ProviderId: "test-provider", + Type: nodev1.EventType_PUBLISH, + TypeName: "TestType", + FieldName: "testField", + } + + kafkaCfg := &nodev1.KafkaEventConfiguration{ + EngineEventConfiguration: engineEventConfig, + Topics: []string{}, + } + + // Create the data source with mock adapter + pubsub := &PubSubDataSource{ + EventConfiguration: kafkaCfg, + } + + // Get the input + input, err := pubsub.GetResolveDataSourceInput([]byte(`{"test":"data"}`)) + require.Error(t, err) + require.Empty(t, input) +} + // TestKafkaPubSubDataSourceMultiTopicSubscription tests only the subscription functionality // for multiple topics. The publish and resolve datasource tests are skipped since they // do not support multiple topics. @@ -120,32 +202,11 @@ func TestKafkaPubSubDataSourceMultiTopicSubscription(t *testing.T) { Topics: []string{"test-topic-1", "test-topic-2"}, } - // Create mock adapter - mockAdapter := new(MockAdapter) - - // Set up expectations for subscribe with both topics - mockAdapter.On("Subscribe", mock.Anything, mock.MatchedBy(func(event SubscriptionEventConfiguration) bool { - return event.ProviderID == "test-provider" && - len(event.Topics) == 2 && - event.Topics[0] == "test-topic-1" && - event.Topics[1] == "test-topic-2" - }), mock.Anything).Return(nil) - // Create the data source to test with mock adapter pubsub := &PubSubDataSource{ EventConfiguration: kafkaCfg, - KafkaAdapter: mockAdapter, } - // Test GetEngineEventConfiguration - testConfig := pubsub.GetEngineEventConfiguration() - require.NotNil(t, testConfig, "Expected non-nil EngineEventConfiguration") - - // Test GetResolveDataSourceSubscription - subscription, err := pubsub.GetResolveDataSourceSubscription() - require.NoError(t, err, "Expected no error from GetResolveDataSourceSubscription") - require.NotNil(t, subscription, "Expected non-nil SubscriptionDataSource") - // Test GetResolveDataSourceSubscriptionInput subscriptionInput, err := pubsub.GetResolveDataSourceSubscriptionInput() require.NoError(t, err, "Expected no error from GetResolveDataSourceSubscriptionInput") diff --git a/router/pkg/pubsub/nats/engine_datasource_test.go b/router/pkg/pubsub/nats/engine_datasource_test.go new file mode 100644 index 0000000000..4fb1ae767d --- /dev/null +++ b/router/pkg/pubsub/nats/engine_datasource_test.go @@ -0,0 +1,401 @@ +package nats + +import ( + "bytes" + "context" + "encoding/json" + "errors" + "io" + "testing" + + "github.com/cespare/xxhash/v2" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/mock" + "github.com/stretchr/testify/require" + "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/resolve" +) + +// EngineDataSourceMockAdapter is a mock implementation of AdapterInterface for testing +type EngineDataSourceMockAdapter struct { + mock.Mock +} + +func (m *EngineDataSourceMockAdapter) Subscribe(ctx context.Context, event SubscriptionEventConfiguration, updater resolve.SubscriptionUpdater) error { + args := m.Called(ctx, event, updater) + return args.Error(0) +} + +func (m *EngineDataSourceMockAdapter) Publish(ctx context.Context, event PublishAndRequestEventConfiguration) error { + args := m.Called(ctx, event) + return args.Error(0) +} + +func (m *EngineDataSourceMockAdapter) Request(ctx context.Context, event PublishAndRequestEventConfiguration, w io.Writer) error { + args := m.Called(ctx, event, w) + return args.Error(0) +} + +func (m *EngineDataSourceMockAdapter) Shutdown(ctx context.Context) error { + args := m.Called(ctx) + return args.Error(0) +} + +// MockSubscriptionUpdater implements resolve.SubscriptionUpdater +type MockSubscriptionUpdater struct { + mock.Mock +} + +func (m *MockSubscriptionUpdater) Update(data []byte) { + m.Called(data) +} + +func (m *MockSubscriptionUpdater) Done() { + m.Called() +} + +func TestPublishEventConfiguration_MarshalJSONTemplate(t *testing.T) { + tests := []struct { + name string + config PublishEventConfiguration + wantPattern string + }{ + { + name: "simple configuration", + config: PublishEventConfiguration{ + ProviderID: "test-provider", + Subject: "test-subject", + Data: json.RawMessage(`{"message":"hello"}`), + }, + wantPattern: `{"subject":"test-subject", "data": {"message":"hello"}, "providerId":"test-provider"}`, + }, + { + name: "with special characters", + config: PublishEventConfiguration{ + ProviderID: "test-provider-id", + Subject: "subject-with-hyphens", + Data: json.RawMessage(`{"message":"special \"quotes\" here"}`), + }, + wantPattern: `{"subject":"subject-with-hyphens", "data": {"message":"special \"quotes\" here"}, "providerId":"test-provider-id"}`, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + result := tt.config.MarshalJSONTemplate() + assert.Equal(t, tt.wantPattern, result) + }) + } +} + +func TestPublishAndRequestEventConfiguration_MarshalJSONTemplate(t *testing.T) { + tests := []struct { + name string + config PublishAndRequestEventConfiguration + wantPattern string + }{ + { + name: "simple configuration", + config: PublishAndRequestEventConfiguration{ + ProviderID: "test-provider", + Subject: "test-subject", + Data: json.RawMessage(`{"message":"hello"}`), + }, + wantPattern: `{"subject":"test-subject", "data": {"message":"hello"}, "providerId":"test-provider"}`, + }, + { + name: "with special characters", + config: PublishAndRequestEventConfiguration{ + ProviderID: "test-provider-id", + Subject: "subject-with-hyphens", + Data: json.RawMessage(`{"message":"special \"quotes\" here"}`), + }, + wantPattern: `{"subject":"subject-with-hyphens", "data": {"message":"special \"quotes\" here"}, "providerId":"test-provider-id"}`, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + result := tt.config.MarshalJSONTemplate() + assert.Equal(t, tt.wantPattern, result) + }) + } +} + +func TestSubscriptionSource_UniqueRequestID(t *testing.T) { + tests := []struct { + name string + input string + expectError bool + expectedError error + }{ + { + name: "valid input", + input: `{"subjects":["subject1", "subject2"], "providerId":"test-provider"}`, + expectError: false, + }, + { + name: "missing subjects", + input: `{"providerId":"test-provider"}`, + expectError: true, + expectedError: errors.New("Key path not found"), + }, + { + name: "missing providerId", + input: `{"subjects":["subject1", "subject2"]}`, + expectError: true, + expectedError: errors.New("Key path not found"), + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + source := &SubscriptionSource{ + pubSub: &EngineDataSourceMockAdapter{}, + } + ctx := &resolve.Context{} + input := []byte(tt.input) + xxh := xxhash.New() + + err := source.UniqueRequestID(ctx, input, xxh) + + if tt.expectError { + require.Error(t, err) + if tt.expectedError != nil { + // For jsonparser errors, just check if the error message contains the expected text + assert.Contains(t, err.Error(), tt.expectedError.Error()) + } + } else { + require.NoError(t, err) + // Check that the hash has been updated + assert.NotEqual(t, 0, xxh.Sum64()) + } + }) + } +} + +func TestSubscriptionSource_Start(t *testing.T) { + tests := []struct { + name string + input string + mockSetup func(*EngineDataSourceMockAdapter) + expectError bool + }{ + { + name: "successful subscription", + input: `{"subjects":["subject1", "subject2"], "providerId":"test-provider"}`, + mockSetup: func(m *EngineDataSourceMockAdapter) { + m.On("Subscribe", mock.Anything, SubscriptionEventConfiguration{ + ProviderID: "test-provider", + Subjects: []string{"subject1", "subject2"}, + }, mock.Anything).Return(nil) + }, + expectError: false, + }, + { + name: "adapter returns error", + input: `{"subjects":["subject1"], "providerId":"test-provider"}`, + mockSetup: func(m *EngineDataSourceMockAdapter) { + m.On("Subscribe", mock.Anything, SubscriptionEventConfiguration{ + ProviderID: "test-provider", + Subjects: []string{"subject1"}, + }, mock.Anything).Return(errors.New("subscription error")) + }, + expectError: true, + }, + { + name: "invalid input json", + input: `{"invalid json":`, + mockSetup: func(m *EngineDataSourceMockAdapter) {}, + expectError: true, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + mockAdapter := new(EngineDataSourceMockAdapter) + tt.mockSetup(mockAdapter) + + source := &SubscriptionSource{ + pubSub: mockAdapter, + } + + // Set up go context + goCtx := context.Background() + + // Create a resolve.Context with the standard context + resolveCtx := &resolve.Context{} + resolveCtx = resolveCtx.WithContext(goCtx) + + // Create a proper mock updater + updater := new(MockSubscriptionUpdater) + updater.On("Done").Return() + + input := []byte(tt.input) + err := source.Start(resolveCtx, input, updater) + + if tt.expectError { + require.Error(t, err) + } else { + require.NoError(t, err) + } + mockAdapter.AssertExpectations(t) + }) + } +} + +func TestNatsPublishDataSource_Load(t *testing.T) { + tests := []struct { + name string + input string + mockSetup func(*EngineDataSourceMockAdapter) + expectError bool + expectedOutput string + expectPublished bool + }{ + { + name: "successful publish", + input: `{"subject":"test-subject", "data":{"message":"hello"}, "providerId":"test-provider"}`, + mockSetup: func(m *EngineDataSourceMockAdapter) { + m.On("Publish", mock.Anything, mock.MatchedBy(func(event PublishAndRequestEventConfiguration) bool { + return event.ProviderID == "test-provider" && + event.Subject == "test-subject" && + string(event.Data) == `{"message":"hello"}` + })).Return(nil) + }, + expectError: false, + expectedOutput: `{"success": true}`, + expectPublished: true, + }, + { + name: "publish error", + input: `{"subject":"test-subject", "data":{"message":"hello"}, "providerId":"test-provider"}`, + mockSetup: func(m *EngineDataSourceMockAdapter) { + m.On("Publish", mock.Anything, mock.Anything).Return(errors.New("publish error")) + }, + expectError: false, // The Load method doesn't return the publish error directly + expectedOutput: `{"success": false}`, + expectPublished: true, + }, + { + name: "invalid input json", + input: `{"invalid json":`, + mockSetup: func(m *EngineDataSourceMockAdapter) {}, + expectError: true, + expectPublished: false, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + mockAdapter := new(EngineDataSourceMockAdapter) + tt.mockSetup(mockAdapter) + + dataSource := &NatsPublishDataSource{ + pubSub: mockAdapter, + } + + ctx := context.Background() + input := []byte(tt.input) + var out bytes.Buffer + + err := dataSource.Load(ctx, input, &out) + + if tt.expectError { + require.Error(t, err) + } else { + require.NoError(t, err) + if tt.expectPublished { + mockAdapter.AssertExpectations(t) + } + if tt.expectedOutput != "" { + assert.Equal(t, tt.expectedOutput, out.String()) + } + } + }) + } +} + +func TestNatsPublishDataSource_LoadWithFiles(t *testing.T) { + dataSource := &NatsPublishDataSource{} + assert.Panics(t, func() { + dataSource.LoadWithFiles(context.Background(), []byte{}, nil, &bytes.Buffer{}) + }, "Expected LoadWithFiles to panic with 'not implemented'") +} + +func TestNatsRequestDataSource_Load(t *testing.T) { + tests := []struct { + name string + input string + mockSetup func(*EngineDataSourceMockAdapter) + expectError bool + expectedOutput string + }{ + { + name: "successful request", + input: `{"subject":"test-subject", "data":{"message":"hello"}, "providerId":"test-provider"}`, + mockSetup: func(m *EngineDataSourceMockAdapter) { + m.On("Request", mock.Anything, mock.MatchedBy(func(event PublishAndRequestEventConfiguration) bool { + return event.ProviderID == "test-provider" && + event.Subject == "test-subject" && + string(event.Data) == `{"message":"hello"}` + }), mock.Anything).Run(func(args mock.Arguments) { + // Write response to the output buffer + w := args.Get(2).(io.Writer) + _, _ = w.Write([]byte(`{"response":"success"}`)) + }).Return(nil) + }, + expectError: false, + expectedOutput: `{"response":"success"}`, + }, + { + name: "request error", + input: `{"subject":"test-subject", "data":{"message":"hello"}, "providerId":"test-provider"}`, + mockSetup: func(m *EngineDataSourceMockAdapter) { + m.On("Request", mock.Anything, mock.Anything, mock.Anything).Return(errors.New("request error")) + }, + expectError: true, + expectedOutput: "", + }, + { + name: "invalid input json", + input: `{"invalid json":`, + mockSetup: func(m *EngineDataSourceMockAdapter) {}, + expectError: true, + expectedOutput: "", + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + mockAdapter := new(EngineDataSourceMockAdapter) + tt.mockSetup(mockAdapter) + + dataSource := &NatsRequestDataSource{ + pubSub: mockAdapter, + } + + ctx := context.Background() + input := []byte(tt.input) + var out bytes.Buffer + + err := dataSource.Load(ctx, input, &out) + + if tt.expectError { + require.Error(t, err) + } else { + require.NoError(t, err) + mockAdapter.AssertExpectations(t) + if tt.expectedOutput != "" { + assert.Equal(t, tt.expectedOutput, out.String()) + } + } + }) + } +} + +func TestNatsRequestDataSource_LoadWithFiles(t *testing.T) { + dataSource := &NatsRequestDataSource{} + assert.Panics(t, func() { + dataSource.LoadWithFiles(context.Background(), []byte{}, nil, &bytes.Buffer{}) + }, "Expected LoadWithFiles to panic with 'not implemented'") +} diff --git a/router/pkg/pubsub/nats/lazy_client.go b/router/pkg/pubsub/nats/lazy_client.go new file mode 100644 index 0000000000..a5abc82bda --- /dev/null +++ b/router/pkg/pubsub/nats/lazy_client.go @@ -0,0 +1,53 @@ +package nats + +import ( + "sync" + + "github.com/nats-io/nats.go" + "github.com/nats-io/nats.go/jetstream" +) + +type LazyClient struct { + once sync.Once + url string + opts []nats.Option + client *nats.Conn + js jetstream.JetStream + err error +} + +func (c *LazyClient) Connect(opts ...nats.Option) error { + c.once.Do(func() { + c.client, c.err = nats.Connect(c.url, opts...) + if c.err != nil { + return + } + c.js, c.err = jetstream.New(c.client) + }) + return c.err +} + +func (c *LazyClient) GetClient() (*nats.Conn, error) { + if c.client == nil { + if err := c.Connect(c.opts...); err != nil { + return nil, err + } + } + return c.client, c.err +} + +func (c *LazyClient) GetJetStream() (jetstream.JetStream, error) { + if c.js == nil { + if err := c.Connect(c.opts...); err != nil { + return nil, err + } + } + return c.js, c.err +} + +func NewLazyClient(url string, opts ...nats.Option) *LazyClient { + return &LazyClient{ + url: url, + opts: opts, + } +} diff --git a/router/pkg/pubsub/nats/lazy_client_test.go b/router/pkg/pubsub/nats/lazy_client_test.go new file mode 100644 index 0000000000..03b63b27a8 --- /dev/null +++ b/router/pkg/pubsub/nats/lazy_client_test.go @@ -0,0 +1,413 @@ +package nats + +import ( + "errors" + "sync" + "testing" + "time" + + "github.com/nats-io/nats.go" + "github.com/nats-io/nats.go/jetstream" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +// Define interfaces for our testing +type natsConnector interface { + Connect(url string, opts ...nats.Option) (*nats.Conn, error) +} + +type jetStreamCreator interface { + Create(nc *nats.Conn) (jetstream.JetStream, error) +} + +// mockNatsConnector implements natsConnector for testing +type mockNatsConnector struct { + mockConn *nats.Conn + mockErr error + callCount int + lastOpts []nats.Option +} + +func (m *mockNatsConnector) Connect(url string, opts ...nats.Option) (*nats.Conn, error) { + m.callCount++ + m.lastOpts = opts + return m.mockConn, m.mockErr +} + +// threadSafeConnector is a specialized version for thread safety testing +type threadSafeConnector struct { + mockConn *nats.Conn + mockErr error + callCount int + countMutex sync.Mutex + sleepTime time.Duration +} + +func (t *threadSafeConnector) Connect(url string, opts ...nats.Option) (*nats.Conn, error) { + // Simulate a slow connection + time.Sleep(t.sleepTime) + t.countMutex.Lock() + t.callCount++ + t.countMutex.Unlock() + return t.mockConn, t.mockErr +} + +// mockJetStreamCreator implements jetStreamCreator for testing +type mockJetStreamCreator struct { + mockJS jetstream.JetStream + mockErr error + callCount int +} + +func (m *mockJetStreamCreator) Create(nc *nats.Conn) (jetstream.JetStream, error) { + m.callCount++ + return m.mockJS, m.mockErr +} + +// testLazyClient is a wrapper for LazyClient that allows us to inject mocks +type testLazyClient struct { + *LazyClient + connector natsConnector + jetStreamCreator jetStreamCreator +} + +// newTestLazyClient creates a LazyClient with mocked dependencies +func newTestLazyClient(url string, connector natsConnector, creator jetStreamCreator, opts ...nats.Option) *testLazyClient { + c := &testLazyClient{ + LazyClient: NewLazyClient(url, opts...), + connector: connector, + jetStreamCreator: creator, + } + + return c +} + +// Connect overrides LazyClient.Connect to use our mocks +func (c *testLazyClient) Connect(opts ...nats.Option) error { + c.once.Do(func() { + // If no options are provided, use the ones stored during initialization + optionsToUse := opts + if len(optionsToUse) == 0 { + optionsToUse = c.opts + } + c.client, c.err = c.connector.Connect(c.url, optionsToUse...) + if c.err != nil { + return + } + c.js, c.err = c.jetStreamCreator.Create(c.client) + }) + return c.err +} + +// GetClient overrides LazyClient.GetClient to ensure we use our Connect method +func (c *testLazyClient) GetClient() (*nats.Conn, error) { + if c.client == nil { + if err := c.Connect(c.opts...); err != nil { + return nil, err + } + } + return c.client, c.err +} + +// GetJetStream overrides LazyClient.GetJetStream to ensure we use our Connect method +func (c *testLazyClient) GetJetStream() (jetstream.JetStream, error) { + if c.js == nil { + if err := c.Connect(c.opts...); err != nil { + return nil, err + } + } + return c.js, c.err +} + +func TestNewLazyClient(t *testing.T) { + url := "nats://localhost:4222" + opts := []nats.Option{nats.Name("test-client")} + + client := NewLazyClient(url, opts...) + + assert.Equal(t, url, client.url) + assert.Equal(t, opts, client.opts) + assert.Nil(t, client.client) + assert.Nil(t, client.js) + assert.Nil(t, client.err) +} + +func TestLazyClient_Connect_Success(t *testing.T) { + // Create mocks + connector := &mockNatsConnector{ + mockConn: &nats.Conn{}, + } + + jsCreator := &mockJetStreamCreator{ + mockJS: &struct{ jetstream.JetStream }{}, + } + + // Create test client + client := newTestLazyClient("nats://localhost:4222", connector, jsCreator) + + // First call should connect + err := client.Connect() + require.NoError(t, err) + assert.Equal(t, 1, connector.callCount, "Connect should be called once") + assert.Equal(t, 1, jsCreator.callCount, "JetStream.Create should be called once") + assert.Equal(t, connector.mockConn, client.client) + assert.Equal(t, jsCreator.mockJS, client.js) + + // Second call should not connect again due to sync.Once + err = client.Connect() + require.NoError(t, err) + assert.Equal(t, 1, connector.callCount, "Connect should still be called only once") + assert.Equal(t, 1, jsCreator.callCount, "JetStream.Create should still be called only once") +} + +func TestLazyClient_Connect_Error(t *testing.T) { + // Create mocks with connection error + connector := &mockNatsConnector{ + mockErr: errors.New("mock connect error"), + } + + jsCreator := &mockJetStreamCreator{ + mockJS: &struct{ jetstream.JetStream }{}, + } + + // Create test client + client := newTestLazyClient("nats://localhost:4222", connector, jsCreator) + + // Connect should return an error + err := client.Connect() + require.Error(t, err) + assert.Equal(t, 1, connector.callCount, "Connect should be called once") + assert.Equal(t, 0, jsCreator.callCount, "JetStream.Create should not be called") + assert.Nil(t, client.client) + assert.Nil(t, client.js) + assert.NotNil(t, client.err) + assert.Equal(t, "mock connect error", client.err.Error()) + + // Second call should not connect again and return the same error + connector.mockErr = errors.New("different error") // Should be ignored due to sync.Once + err2 := client.Connect() + require.Error(t, err2) + assert.Equal(t, err, err2, "Should return the same error") + assert.Equal(t, 1, connector.callCount, "Connect should still be called only once") + assert.Equal(t, 0, jsCreator.callCount, "JetStream.Create should still not be called") +} + +func TestLazyClient_Connect_JetStreamError(t *testing.T) { + // Create mocks with jetstream error + connector := &mockNatsConnector{ + mockConn: &nats.Conn{}, + } + + jsCreator := &mockJetStreamCreator{ + mockErr: errors.New("mock jetstream error"), + } + + // Create test client + client := newTestLazyClient("nats://localhost:4222", connector, jsCreator) + + // Connect should return the jetstream error + err := client.Connect() + require.Error(t, err) + assert.Equal(t, 1, connector.callCount, "Connect should be called once") + assert.Equal(t, 1, jsCreator.callCount, "JetStream.Create should be called once") + assert.NotNil(t, client.client) // NATS connection was successful + assert.Nil(t, client.js) // JetStream failed + assert.NotNil(t, client.err) + assert.Equal(t, "mock jetstream error", client.err.Error()) + + // Second call should not connect again and return the same error + jsCreator.mockErr = errors.New("different error") // Should be ignored due to sync.Once + err2 := client.Connect() + require.Error(t, err2) + assert.Equal(t, err, err2, "Should return the same error") + assert.Equal(t, 1, connector.callCount, "Connect should still be called only once") + assert.Equal(t, 1, jsCreator.callCount, "JetStream.Create should still be called only once") +} + +func TestLazyClient_GetClient(t *testing.T) { + t.Run("with successful connection", func(t *testing.T) { + // Create mocks + connector := &mockNatsConnector{ + mockConn: &nats.Conn{}, + } + + jsCreator := &mockJetStreamCreator{ + mockJS: &struct{ jetstream.JetStream }{}, + } + + // Create test client + client := newTestLazyClient("nats://localhost:4222", connector, jsCreator) + + // First call to GetClient should connect + conn, err := client.GetClient() + require.NoError(t, err) + assert.Equal(t, connector.mockConn, conn) + assert.Equal(t, 1, connector.callCount, "Connect should be called once") + + // Second call should not connect again + conn2, err := client.GetClient() + require.NoError(t, err) + assert.Equal(t, conn, conn2) + assert.Equal(t, 1, connector.callCount, "Connect should still be called only once") + }) + + t.Run("with failed connection", func(t *testing.T) { + // Create mocks with connection error + connector := &mockNatsConnector{ + mockErr: errors.New("mock connect error"), + } + + jsCreator := &mockJetStreamCreator{} + + // Create test client + client := newTestLazyClient("nats://localhost:4222", connector, jsCreator) + + // GetClient should attempt to connect and return an error + conn, err := client.GetClient() + require.Error(t, err) + assert.Nil(t, conn) + assert.Equal(t, 1, connector.callCount, "Connect should be called once") + assert.Equal(t, 0, jsCreator.callCount, "JetStream.Create should not be called") + assert.Equal(t, "mock connect error", err.Error()) + }) +} + +func TestLazyClient_GetJetStream(t *testing.T) { + t.Run("with successful connection", func(t *testing.T) { + // Create mocks + connector := &mockNatsConnector{ + mockConn: &nats.Conn{}, + } + + jsCreator := &mockJetStreamCreator{ + mockJS: &struct{ jetstream.JetStream }{}, + } + + // Create test client + client := newTestLazyClient("nats://localhost:4222", connector, jsCreator) + + // First call to GetJetStream should connect + js, err := client.GetJetStream() + require.NoError(t, err) + assert.Equal(t, jsCreator.mockJS, js) + assert.Equal(t, 1, connector.callCount, "Connect should be called once") + assert.Equal(t, 1, jsCreator.callCount, "JetStream.Create should be called once") + + // Second call should not connect again + js2, err := client.GetJetStream() + require.NoError(t, err) + assert.Equal(t, js, js2) + assert.Equal(t, 1, connector.callCount, "Connect should still be called only once") + assert.Equal(t, 1, jsCreator.callCount, "JetStream.Create should still be called only once") + }) + + t.Run("with failed connection", func(t *testing.T) { + // Create mocks with connection error + connector := &mockNatsConnector{ + mockErr: errors.New("mock connect error"), + } + + jsCreator := &mockJetStreamCreator{} + + // Create test client + client := newTestLazyClient("nats://localhost:4222", connector, jsCreator) + + // GetJetStream should attempt to connect and return an error + js, err := client.GetJetStream() + require.Error(t, err) + assert.Nil(t, js) + assert.Equal(t, 1, connector.callCount, "Connect should be called once") + assert.Equal(t, 0, jsCreator.callCount, "JetStream.Create should not be called") + assert.Equal(t, "mock connect error", err.Error()) + }) + + t.Run("with jetstream creation failure", func(t *testing.T) { + // Create mocks with jetstream error + connector := &mockNatsConnector{ + mockConn: &nats.Conn{}, + } + + jsCreator := &mockJetStreamCreator{ + mockErr: errors.New("mock jetstream error"), + } + + // Create test client + client := newTestLazyClient("nats://localhost:4222", connector, jsCreator) + + // GetJetStream should create the connection but fail on jetstream + js, err := client.GetJetStream() + require.Error(t, err) + assert.Nil(t, js) + assert.Equal(t, 1, connector.callCount, "Connect should be called once") + assert.Equal(t, 1, jsCreator.callCount, "JetStream.Create should be called once") + assert.Equal(t, "mock jetstream error", err.Error()) + }) +} + +func TestLazyClient_WithOptions(t *testing.T) { + // Create mocks that will track options + connector := &mockNatsConnector{ + mockConn: &nats.Conn{}, + } + + jsCreator := &mockJetStreamCreator{ + mockJS: &struct{ jetstream.JetStream }{}, + } + + // Create options that we can verify are passed to Connect + option1 := nats.Name("test-client") + option2 := nats.NoEcho() + + // Create test client with options + client := newTestLazyClient("nats://localhost:4222", connector, jsCreator, option1, option2) + + // Call Connect to trigger the connection + err := client.Connect() + require.NoError(t, err) + + // Verify that the options were passed - they're stored in connector.lastOpts + require.Len(t, connector.lastOpts, 2, "Options should be passed to Connect") + + // Now we can call GetClient() and verify it reuses the connection + prevCallCount := connector.callCount + _, err = client.GetClient() + require.NoError(t, err) + + // Verify Connect wasn't called again + assert.Equal(t, prevCallCount, connector.callCount, "GetClient should reuse the existing connection") +} + +func TestLazyClient_ThreadSafety(t *testing.T) { + // This test checks that LazyClient's sync.Once protection works as expected + // by calling Connect from multiple goroutines simultaneously + + // Create a thread-safe connector that simulates slow connections + connector := &threadSafeConnector{ + mockConn: &nats.Conn{}, + sleepTime: 10 * time.Millisecond, + } + + jsCreator := &mockJetStreamCreator{ + mockJS: &struct{ jetstream.JetStream }{}, + } + + // Create test client + client := newTestLazyClient("nats://localhost:4222", connector, jsCreator) + + // Launch multiple goroutines that call Connect simultaneously + var wg sync.WaitGroup + for i := 0; i < 10; i++ { + wg.Add(1) + go func() { + defer wg.Done() + err := client.Connect() + assert.NoError(t, err) + }() + } + + wg.Wait() + + // Connect should have been called exactly once + assert.Equal(t, 1, connector.callCount, "Connect should have been called exactly once") +} diff --git a/router/pkg/pubsub/nats/provider_test.go b/router/pkg/pubsub/nats/provider_test.go new file mode 100644 index 0000000000..fd2255bf60 --- /dev/null +++ b/router/pkg/pubsub/nats/provider_test.go @@ -0,0 +1,282 @@ +package nats + +import ( + "context" + "io" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/mock" + "github.com/stretchr/testify/require" + nodev1 "github.com/wundergraph/cosmo/router/gen/proto/wg/cosmo/node/v1" + "github.com/wundergraph/cosmo/router/pkg/config" + "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/plan" + "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/resolve" + "go.uber.org/zap" + "go.uber.org/zap/zaptest" +) + +// mockAdapter is a mock of AdapterInterface +type mockAdapter struct { + mock.Mock +} + +func (m *mockAdapter) Subscribe(ctx context.Context, event SubscriptionEventConfiguration, updater resolve.SubscriptionUpdater) error { + args := m.Called(ctx, event, updater) + return args.Error(0) +} + +func (m *mockAdapter) Publish(ctx context.Context, event PublishAndRequestEventConfiguration) error { + args := m.Called(ctx, event) + return args.Error(0) +} + +func (m *mockAdapter) Request(ctx context.Context, event PublishAndRequestEventConfiguration, w io.Writer) error { + args := m.Called(ctx, event, w) + return args.Error(0) +} + +func (m *mockAdapter) Shutdown(ctx context.Context) error { + args := m.Called(ctx) + return args.Error(0) +} + +func TestBuildNatsOptions(t *testing.T) { + t.Run("basic configuration", func(t *testing.T) { + cfg := config.NatsEventSource{ + ID: "test-nats", + URL: "nats://localhost:4222", + } + logger := zaptest.NewLogger(t) + + opts, err := buildNatsOptions(cfg, logger) + require.NoError(t, err) + require.NotEmpty(t, opts) + }) + + t.Run("with token authentication", func(t *testing.T) { + token := "test-token" + cfg := config.NatsEventSource{ + ID: "test-nats", + URL: "nats://localhost:4222", + Authentication: &config.NatsAuthentication{ + NatsTokenBasedAuthentication: config.NatsTokenBasedAuthentication{ + Token: &token, + }, + }, + } + logger := zaptest.NewLogger(t) + + opts, err := buildNatsOptions(cfg, logger) + require.NoError(t, err) + require.NotEmpty(t, opts) + // Can't directly check for token options, but we can verify options are present + require.Greater(t, len(opts), 7) // Basic options (7) + token option + }) + + t.Run("with user/password authentication", func(t *testing.T) { + username := "user" + password := "pass" + cfg := config.NatsEventSource{ + ID: "test-nats", + URL: "nats://localhost:4222", + Authentication: &config.NatsAuthentication{ + UserInfo: config.NatsCredentialsAuthentication{ + Username: &username, + Password: &password, + }, + }, + } + logger := zaptest.NewLogger(t) + + opts, err := buildNatsOptions(cfg, logger) + require.NoError(t, err) + require.NotEmpty(t, opts) + // Can't directly check for auth options, but we can verify options are present + require.Greater(t, len(opts), 7) // Basic options (7) + user info option + }) +} + +func TestTransformEventConfig(t *testing.T) { + t.Run("publish event", func(t *testing.T) { + cfg := &nodev1.NatsEventConfiguration{ + EngineEventConfiguration: &nodev1.EngineEventConfiguration{ + Type: nodev1.EventType_PUBLISH, + }, + Subjects: []string{"original.subject"}, + } + + // Simple transform function that adds "transformed." prefix + transformFn := func(s string) (string, error) { + return "transformed." + s, nil + } + + transformedCfg, err := transformEventConfig(cfg, transformFn) + require.NoError(t, err) + require.Equal(t, []string{"transformed.original.subject"}, transformedCfg.Subjects) + }) + + t.Run("subscribe event", func(t *testing.T) { + cfg := &nodev1.NatsEventConfiguration{ + EngineEventConfiguration: &nodev1.EngineEventConfiguration{ + Type: nodev1.EventType_SUBSCRIBE, + }, + Subjects: []string{"original.subject1", "original.subject2"}, + } + + // Simple transform function that adds "transformed." prefix + transformFn := func(s string) (string, error) { + return "transformed." + s, nil + } + + transformedCfg, err := transformEventConfig(cfg, transformFn) + require.NoError(t, err) + // Since the function sorts the subjects + require.Equal(t, []string{"transformed.original.subject1", "transformed.original.subject2"}, transformedCfg.Subjects) + }) + + t.Run("invalid subject", func(t *testing.T) { + cfg := &nodev1.NatsEventConfiguration{ + EngineEventConfiguration: &nodev1.EngineEventConfiguration{ + Type: nodev1.EventType_PUBLISH, + }, + Subjects: []string{"invalid subject with spaces"}, + } + + transformFn := func(s string) (string, error) { + return s, nil + } + + _, err := transformEventConfig(cfg, transformFn) + require.Error(t, err) + assert.Contains(t, err.Error(), "invalid subject") + }) +} + +func TestGetProvider(t *testing.T) { + t.Run("returns nil if no NATS configuration", func(t *testing.T) { + ctx := context.Background() + in := &nodev1.DataSourceConfiguration{ + CustomEvents: &nodev1.DataSourceCustomEvents{}, + } + + dsMeta := &plan.DataSourceMetadata{} + cfg := config.EventsConfiguration{} + logger := zaptest.NewLogger(t) + + provider, err := GetProvider(ctx, in, dsMeta, cfg, logger, "host", "addr") + require.NoError(t, err) + require.Nil(t, provider) + }) + + t.Run("errors if provider not found", func(t *testing.T) { + ctx := context.Background() + in := &nodev1.DataSourceConfiguration{ + CustomEvents: &nodev1.DataSourceCustomEvents{ + Nats: []*nodev1.NatsEventConfiguration{ + { + EngineEventConfiguration: &nodev1.EngineEventConfiguration{ + ProviderId: "unknown", + }, + }, + }, + }, + } + + dsMeta := &plan.DataSourceMetadata{} + cfg := config.EventsConfiguration{ + Providers: config.EventProviders{ + Nats: []config.NatsEventSource{ + {ID: "provider1", URL: "nats://localhost:4222"}, + }, + }, + } + logger := zaptest.NewLogger(t) + + provider, err := GetProvider(ctx, in, dsMeta, cfg, logger, "host", "addr") + require.Error(t, err) + require.Nil(t, provider) + assert.Contains(t, err.Error(), "failed to find Nats provider with ID") + }) +} + +func TestPubSubProvider_FindPubSubDataSource(t *testing.T) { + mockNats := &mockAdapter{} + providerId := "test-provider" + typeName := "TestType" + fieldName := "testField" + + provider := &PubSubProvider{ + EventConfiguration: []*nodev1.NatsEventConfiguration{ + { + EngineEventConfiguration: &nodev1.EngineEventConfiguration{ + TypeName: typeName, + FieldName: fieldName, + ProviderId: providerId, + Type: nodev1.EventType_PUBLISH, + }, + Subjects: []string{"test.subject"}, + }, + }, + Logger: zap.NewNop(), + Providers: map[string]AdapterInterface{ + providerId: mockNats, + }, + } + + t.Run("find matching datasource", func(t *testing.T) { + // Identity transform function + transformFn := func(s string) (string, error) { + return s, nil + } + + ds, err := provider.FindPubSubDataSource(typeName, fieldName, transformFn) + require.NoError(t, err) + require.NotNil(t, ds) + + // Check the returned datasource + natsDs, ok := ds.(*PubSubDataSource) + require.True(t, ok) + assert.Equal(t, mockNats, natsDs.NatsAdapter) + assert.Equal(t, provider.EventConfiguration[0], natsDs.EventConfiguration) + }) + + t.Run("return nil if no match", func(t *testing.T) { + ds, err := provider.FindPubSubDataSource("OtherType", fieldName, nil) + require.NoError(t, err) + require.Nil(t, ds) + }) + + t.Run("handle error in transform function", func(t *testing.T) { + // Function that returns error + errorFn := func(s string) (string, error) { + return "", assert.AnError + } + + ds, err := provider.FindPubSubDataSource(typeName, fieldName, errorFn) + require.Error(t, err) + require.Nil(t, ds) + }) + + t.Run("handle error in transform function", func(t *testing.T) { + // Function that returns error + errorFn := func(s string) (string, error) { + return "", assert.AnError + } + + ds, err := provider.FindPubSubDataSource(typeName, fieldName, errorFn) + require.Error(t, err) + require.Nil(t, ds) + }) + + t.Run("handle error in transform function with invalid subject", func(t *testing.T) { + // Function that returns error + errorFn := func(s string) (string, error) { + return " ", nil + } + + ds, err := provider.FindPubSubDataSource(typeName, fieldName, errorFn) + require.Error(t, err) + require.Nil(t, ds) + }) +} diff --git a/router/pkg/pubsub/nats/pubsub_datasource.go b/router/pkg/pubsub/nats/pubsub_datasource.go index 5f3b37d702..07a2d37542 100644 --- a/router/pkg/pubsub/nats/pubsub_datasource.go +++ b/router/pkg/pubsub/nats/pubsub_datasource.go @@ -3,60 +3,12 @@ package nats import ( "encoding/json" "fmt" - "sync" - "github.com/nats-io/nats.go" - "github.com/nats-io/nats.go/jetstream" nodev1 "github.com/wundergraph/cosmo/router/gen/proto/wg/cosmo/node/v1" "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/resolve" ) -type LazyClient struct { - once sync.Once - url string - opts []nats.Option - client *nats.Conn - js jetstream.JetStream - err error -} - -func (c *LazyClient) Connect(opts ...nats.Option) error { - c.once.Do(func() { - c.client, c.err = nats.Connect(c.url, opts...) - if c.err != nil { - return - } - c.js, c.err = jetstream.New(c.client) - }) - return c.err -} - -func (c *LazyClient) GetClient() (*nats.Conn, error) { - if c.client == nil { - if err := c.Connect(c.opts...); err != nil { - return nil, err - } - } - return c.client, c.err -} - -func (c *LazyClient) GetJetStream() (jetstream.JetStream, error) { - if c.js == nil { - if err := c.Connect(c.opts...); err != nil { - return nil, err - } - } - return c.js, c.err -} - -func NewLazyClient(url string, opts ...nats.Option) *LazyClient { - return &LazyClient{ - url: url, - opts: opts, - } -} - type PubSubDataSource struct { EventConfiguration *nodev1.NatsEventConfiguration NatsAdapter AdapterInterface diff --git a/router/pkg/pubsub/nats/pubsub_datasource_test.go b/router/pkg/pubsub/nats/pubsub_datasource_test.go index 3f1622cec2..43fb75fef8 100644 --- a/router/pkg/pubsub/nats/pubsub_datasource_test.go +++ b/router/pkg/pubsub/nats/pubsub_datasource_test.go @@ -53,21 +53,22 @@ func TestNatsPubSubDataSource(t *testing.T) { natsCfg := &nodev1.NatsEventConfiguration{ EngineEventConfiguration: engineEventConfig, - Subjects: []string{"test.subject"}, + Subjects: []string{"test-subject"}, } - // Create the data source to test + // Create the data source to test with a real adapter + adapter := &Adapter{} pubsub := &PubSubDataSource{ EventConfiguration: natsCfg, - NatsAdapter: &Adapter{}, // Using a real Adapter type but with nil values for the test + NatsAdapter: adapter, } // Run the standard test suite datasource.VerifyPubSubDataSourceImplementation(t, pubsub) } -func TestNatsPubSubDataSourceWithStreamConfiguration(t *testing.T) { - // Create event configuration with required fields and stream config +func TestPubSubDataSourceWithMockAdapter(t *testing.T) { + // Create event configuration with required fields engineEventConfig := &nodev1.EngineEventConfiguration{ ProviderId: "test-provider", Type: nodev1.EventType_PUBLISH, @@ -75,54 +76,74 @@ func TestNatsPubSubDataSourceWithStreamConfiguration(t *testing.T) { FieldName: "testField", } - streamCfg := &nodev1.NatsStreamConfiguration{ - ConsumerName: "test-consumer", - StreamName: "test-stream", - ConsumerInactiveThreshold: 60, - } - natsCfg := &nodev1.NatsEventConfiguration{ EngineEventConfiguration: engineEventConfig, - Subjects: []string{"test.subject"}, - StreamConfiguration: streamCfg, + Subjects: []string{"test-subject"}, } - // Create the data source to test + // Create mock adapter + mockAdapter := new(MockAdapter) + + // Configure mock expectations for Publish + mockAdapter.On("Publish", mock.Anything, mock.MatchedBy(func(event PublishAndRequestEventConfiguration) bool { + return event.ProviderID == "test-provider" && event.Subject == "test-subject" + })).Return(nil) + + // Create the data source with mock adapter pubsub := &PubSubDataSource{ EventConfiguration: natsCfg, - NatsAdapter: &Adapter{}, // Using a real Adapter type but with nil values for the test + NatsAdapter: mockAdapter, } - // Run the standard test suite - datasource.VerifyPubSubDataSourceImplementation(t, pubsub) + // Get the data source + ds, err := pubsub.GetResolveDataSource() + require.NoError(t, err) + + // Get the input + input, err := pubsub.GetResolveDataSourceInput([]byte(`{"test":"data"}`)) + require.NoError(t, err) + + // Call Load on the data source + out := &bytes.Buffer{} + err = ds.Load(context.Background(), []byte(input), out) + require.NoError(t, err) + require.Equal(t, `{"success": true}`, out.String()) + + // Verify mock expectations + mockAdapter.AssertExpectations(t) } -func TestNatsPubSubDataSourceRequestType(t *testing.T) { - // Create event configuration with REQUEST type +func TestPubSubDataSource_GetResolveDataSource_WrongType(t *testing.T) { + // Create event configuration with required fields engineEventConfig := &nodev1.EngineEventConfiguration{ ProviderId: "test-provider", - Type: nodev1.EventType_REQUEST, + Type: nodev1.EventType_SUBSCRIBE, // This is not supported TypeName: "TestType", FieldName: "testField", } natsCfg := &nodev1.NatsEventConfiguration{ EngineEventConfiguration: engineEventConfig, - Subjects: []string{"test.subject"}, + Subjects: []string{"test-subject"}, } - // Create the data source to test + // Create mock adapter + mockAdapter := new(MockAdapter) + + // Create the data source with mock adapter pubsub := &PubSubDataSource{ EventConfiguration: natsCfg, - NatsAdapter: &Adapter{}, // Using a real Adapter type but with nil values for the test + NatsAdapter: mockAdapter, } - // Run the standard test suite - datasource.VerifyPubSubDataSourceImplementation(t, pubsub) + // Get the data source + ds, err := pubsub.GetResolveDataSource() + require.Error(t, err) + require.Nil(t, ds) } -func TestNatsPubSubDataSourceSubscribeType(t *testing.T) { - // Create event configuration with SUBSCRIBE type +func TestPubSubDataSource_GetResolveDataSourceInput_MultipleSubjects(t *testing.T) { + // Create event configuration with required fields engineEventConfig := &nodev1.EngineEventConfiguration{ ProviderId: "test-provider", Type: nodev1.EventType_PUBLISH, @@ -132,21 +153,21 @@ func TestNatsPubSubDataSourceSubscribeType(t *testing.T) { natsCfg := &nodev1.NatsEventConfiguration{ EngineEventConfiguration: engineEventConfig, - Subjects: []string{"test.subject"}, + Subjects: []string{"test-subject-1", "test-subject-2"}, } - // Create the data source to test + // Create the data source with mock adapter pubsub := &PubSubDataSource{ EventConfiguration: natsCfg, - NatsAdapter: &Adapter{}, // Using a real Adapter type but with nil values for the test } - // Run the standard test suite - datasource.VerifyPubSubDataSourceImplementation(t, pubsub) + // Get the input + input, err := pubsub.GetResolveDataSourceInput([]byte(`{"test":"data"}`)) + require.Error(t, err) + require.Empty(t, input) } -// TestPubSubDataSourceWithMockAdapter tests the PubSubDataSource with a mocked adapter -func TestPubSubDataSourceWithMockAdapter(t *testing.T) { +func TestPubSubDataSource_GetResolveDataSourceInput_NoSubjects(t *testing.T) { // Create event configuration with required fields engineEventConfig := &nodev1.EngineEventConfiguration{ ProviderId: "test-provider", @@ -157,43 +178,93 @@ func TestPubSubDataSourceWithMockAdapter(t *testing.T) { natsCfg := &nodev1.NatsEventConfiguration{ EngineEventConfiguration: engineEventConfig, - Subjects: []string{"test.subject"}, + Subjects: []string{}, } - // Create mock adapter - mockAdapter := new(MockAdapter) - - // Configure mock expectations for Publish - mockAdapter.On("Publish", mock.Anything, mock.MatchedBy(func(event PublishAndRequestEventConfiguration) bool { - return event.ProviderID == "test-provider" && event.Subject == "test.subject" - })).Return(nil) - // Create the data source with mock adapter pubsub := &PubSubDataSource{ EventConfiguration: natsCfg, - NatsAdapter: mockAdapter, } - // Get the data source - ds, err := pubsub.GetResolveDataSource() - require.NoError(t, err) - // Get the input input, err := pubsub.GetResolveDataSourceInput([]byte(`{"test":"data"}`)) - require.NoError(t, err) + require.Error(t, err) + require.Empty(t, input) +} - // Call Load on the data source - out := &bytes.Buffer{} - err = ds.Load(context.Background(), []byte(input), out) - require.NoError(t, err) - require.Equal(t, `{"success": true}`, out.String()) +func TestNatsPubSubDataSourceMultiSubjectSubscription(t *testing.T) { + // Create event configuration with multiple subjects + engineEventConfig := &nodev1.EngineEventConfiguration{ + ProviderId: "test-provider", + Type: nodev1.EventType_PUBLISH, // Must be PUBLISH as it's the only supported type + TypeName: "TestType", + FieldName: "testField", + } - // Verify mock expectations - mockAdapter.AssertExpectations(t) + natsCfg := &nodev1.NatsEventConfiguration{ + EngineEventConfiguration: engineEventConfig, + Subjects: []string{"test-subject-1", "test-subject-2"}, + } + + // Create the data source to test with mock adapter + pubsub := &PubSubDataSource{ + EventConfiguration: natsCfg, + } + + // Test GetResolveDataSourceSubscriptionInput + subscriptionInput, err := pubsub.GetResolveDataSourceSubscriptionInput() + require.NoError(t, err, "Expected no error from GetResolveDataSourceSubscriptionInput") + require.NotEmpty(t, subscriptionInput, "Expected non-empty subscription input") + + // Verify the subscription input contains both subjects + var subscriptionConfig SubscriptionEventConfiguration + err = json.Unmarshal([]byte(subscriptionInput), &subscriptionConfig) + require.NoError(t, err, "Expected valid JSON from GetResolveDataSourceSubscriptionInput") + require.Equal(t, 2, len(subscriptionConfig.Subjects), "Expected 2 subjects in subscription configuration") + require.Equal(t, "test-subject-1", subscriptionConfig.Subjects[0], "Expected first subject to be 'test-subject-1'") + require.Equal(t, "test-subject-2", subscriptionConfig.Subjects[1], "Expected second subject to be 'test-subject-2'") +} + +func TestNatsPubSubDataSourceWithStreamConfiguration(t *testing.T) { + // Create event configuration with stream configuration + engineEventConfig := &nodev1.EngineEventConfiguration{ + ProviderId: "test-provider", + Type: nodev1.EventType_PUBLISH, + TypeName: "TestType", + FieldName: "testField", + } + + natsCfg := &nodev1.NatsEventConfiguration{ + EngineEventConfiguration: engineEventConfig, + Subjects: []string{"test-subject"}, + StreamConfiguration: &nodev1.NatsStreamConfiguration{ + StreamName: "test-stream", + ConsumerName: "test-consumer", + ConsumerInactiveThreshold: 30, + }, + } + + // Create the data source to test + pubsub := &PubSubDataSource{ + EventConfiguration: natsCfg, + } + + // Test GetResolveDataSourceSubscriptionInput with stream configuration + subscriptionInput, err := pubsub.GetResolveDataSourceSubscriptionInput() + require.NoError(t, err, "Expected no error from GetResolveDataSourceSubscriptionInput") + require.NotEmpty(t, subscriptionInput, "Expected non-empty subscription input") + + // Verify the subscription input contains stream configuration + var subscriptionConfig SubscriptionEventConfiguration + err = json.Unmarshal([]byte(subscriptionInput), &subscriptionConfig) + require.NoError(t, err, "Expected valid JSON from GetResolveDataSourceSubscriptionInput") + require.NotNil(t, subscriptionConfig.StreamConfiguration, "Expected non-nil stream configuration") + require.Equal(t, "test-consumer", subscriptionConfig.StreamConfiguration.Consumer, "Expected consumer to be 'test-consumer'") + require.Equal(t, "test-stream", subscriptionConfig.StreamConfiguration.StreamName, "Expected stream name to be 'test-stream'") + require.Equal(t, int32(30), subscriptionConfig.StreamConfiguration.ConsumerInactiveThreshold, "Expected consumer inactive threshold to be 30") } -// TestNatsPubSubDataSourceRequestWithMockAdapter tests the REQUEST functionality with a mocked adapter -func TestNatsPubSubDataSourceRequestWithMockAdapter(t *testing.T) { +func TestPubSubDataSource_RequestDataSource(t *testing.T) { // Create event configuration with REQUEST type engineEventConfig := &nodev1.EngineEventConfiguration{ ProviderId: "test-provider", @@ -204,7 +275,7 @@ func TestNatsPubSubDataSourceRequestWithMockAdapter(t *testing.T) { natsCfg := &nodev1.NatsEventConfiguration{ EngineEventConfiguration: engineEventConfig, - Subjects: []string{"test.subject"}, + Subjects: []string{"test-subject"}, } // Create mock adapter @@ -212,12 +283,11 @@ func TestNatsPubSubDataSourceRequestWithMockAdapter(t *testing.T) { // Configure mock expectations for Request mockAdapter.On("Request", mock.Anything, mock.MatchedBy(func(event PublishAndRequestEventConfiguration) bool { - return event.ProviderID == "test-provider" && event.Subject == "test.subject" - }), mock.Anything).Run(func(args mock.Arguments) { - // Simulate writing a response + return event.ProviderID == "test-provider" && event.Subject == "test-subject" + }), mock.Anything).Return(nil).Run(func(args mock.Arguments) { w := args.Get(2).(io.Writer) - w.Write([]byte(`{"response":"data"}`)) - }).Return(nil) + w.Write([]byte(`{"response": "test"}`)) + }) // Create the data source with mock adapter pubsub := &PubSubDataSource{ @@ -228,6 +298,7 @@ func TestNatsPubSubDataSourceRequestWithMockAdapter(t *testing.T) { // Get the data source ds, err := pubsub.GetResolveDataSource() require.NoError(t, err) + require.NotNil(t, ds) // Get the input input, err := pubsub.GetResolveDataSourceInput([]byte(`{"test":"data"}`)) @@ -237,64 +308,8 @@ func TestNatsPubSubDataSourceRequestWithMockAdapter(t *testing.T) { out := &bytes.Buffer{} err = ds.Load(context.Background(), []byte(input), out) require.NoError(t, err) - require.Equal(t, `{"response":"data"}`, out.String()) + require.Equal(t, `{"response": "test"}`, out.String()) // Verify mock expectations mockAdapter.AssertExpectations(t) } - -// TestNatsPubSubDataSourceMultiSubjectSubscription tests the subscription functionality -// for multiple subjects with a mocked adapter -func TestNatsPubSubDataSourceMultiSubjectSubscription(t *testing.T) { - // Create event configuration with multiple subjects - engineEventConfig := &nodev1.EngineEventConfiguration{ - ProviderId: "test-provider", - Type: nodev1.EventType_PUBLISH, - TypeName: "TestType", - FieldName: "testField", - } - - natsCfg := &nodev1.NatsEventConfiguration{ - EngineEventConfiguration: engineEventConfig, - Subjects: []string{"test.subject.1", "test.subject.2"}, - } - - // Create mock adapter - mockAdapter := new(MockAdapter) - - // Set up expectations for subscribe with both subjects - mockAdapter.On("Subscribe", mock.Anything, mock.MatchedBy(func(event SubscriptionEventConfiguration) bool { - return event.ProviderID == "test-provider" && - len(event.Subjects) == 2 && - event.Subjects[0] == "test.subject.1" && - event.Subjects[1] == "test.subject.2" - }), mock.Anything).Return(nil) - - // Create the data source to test with mock adapter - pubsub := &PubSubDataSource{ - EventConfiguration: natsCfg, - NatsAdapter: mockAdapter, - } - - // Test GetEngineEventConfiguration - testConfig := pubsub.GetEngineEventConfiguration() - require.NotNil(t, testConfig, "Expected non-nil EngineEventConfiguration") - - // Test GetResolveDataSourceSubscription - subscription, err := pubsub.GetResolveDataSourceSubscription() - require.NoError(t, err, "Expected no error from GetResolveDataSourceSubscription") - require.NotNil(t, subscription, "Expected non-nil SubscriptionDataSource") - - // Test GetResolveDataSourceSubscriptionInput - subscriptionInput, err := pubsub.GetResolveDataSourceSubscriptionInput() - require.NoError(t, err, "Expected no error from GetResolveDataSourceSubscriptionInput") - require.NotEmpty(t, subscriptionInput, "Expected non-empty subscription input") - - // Verify the subscription input contains both subjects - var subscriptionConfig SubscriptionEventConfiguration - err = json.Unmarshal([]byte(subscriptionInput), &subscriptionConfig) - require.NoError(t, err, "Expected valid JSON from GetResolveDataSourceSubscriptionInput") - require.Equal(t, 2, len(subscriptionConfig.Subjects), "Expected 2 subjects in subscription configuration") - require.Equal(t, "test.subject.1", subscriptionConfig.Subjects[0], "Expected first subject to be 'test.subject.1'") - require.Equal(t, "test.subject.2", subscriptionConfig.Subjects[1], "Expected second subject to be 'test.subject.2'") -} diff --git a/router/pkg/pubsub/nats/utils.go b/router/pkg/pubsub/nats/utils.go index 010b666c61..0229f7a41c 100644 --- a/router/pkg/pubsub/nats/utils.go +++ b/router/pkg/pubsub/nats/utils.go @@ -1,6 +1,8 @@ package nats -import "strings" +import ( + "strings" +) const ( fwc = '>' diff --git a/router/pkg/pubsub/nats/utils_test.go b/router/pkg/pubsub/nats/utils_test.go new file mode 100644 index 0000000000..9ec92c78cc --- /dev/null +++ b/router/pkg/pubsub/nats/utils_test.go @@ -0,0 +1,83 @@ +package nats + +import ( + "testing" + + "github.com/stretchr/testify/assert" +) + +func TestIsValidNatsSubject(t *testing.T) { + tests := []struct { + name string + subject string + want bool + }{ + { + name: "empty string", + subject: "", + want: false, + }, + { + name: "simple valid subject", + subject: "test.subject", + want: true, + }, + { + name: "valid subject with wildcard", + subject: "test.>", + want: true, + }, + { + name: "invalid with space", + subject: "test subject", + want: false, + }, + { + name: "invalid with tab", + subject: "test\tsubject", + want: false, + }, + { + name: "invalid with newline", + subject: "test\nsubject", + want: false, + }, + { + name: "invalid with empty token", + subject: "test..subject", + want: false, + }, + { + name: "wildcard not at end", + subject: "test.>.subject", + want: false, + }, + { + name: "contains a space", + subject: " ", + want: false, + }, + { + name: "contains a tab", + subject: "\t", + want: false, + }, + { + name: "contains a newline", + subject: "\n", + want: false, + }, + { + name: "contains a form feed", + subject: "\f", + want: false, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + got := isValidNatsSubject(tt.subject) + assert.Equal(t, tt.want, got) + }) + } +} From d4ed48ab47f573e2a8ac18deb177c5cd391f7b00 Mon Sep 17 00:00:00 2001 From: Alessandro Pagnin Date: Fri, 11 Apr 2025 14:59:17 +0200 Subject: [PATCH 022/126] chore: cleaned a bit the implementation, add a README to make it easier to add a PubSubDataSource --- router/core/executor.go | 2 +- router/core/factoryresolver.go | 6 +- router/core/plan_generator.go | 5 +- router/pkg/pubsub/README.md | 72 +++++++++++++++++++ router/pkg/pubsub/kafka/engine_datasource.go | 28 ++------ .../pubsub/kafka/engine_datasource_test.go | 8 +-- router/pkg/pubsub/kafka/provider.go | 4 +- router/pkg/pubsub/kafka/pubsub_datasource.go | 19 ++++- router/pkg/pubsub/nats/engine_datasource.go | 33 --------- router/pkg/pubsub/nats/provider.go | 4 +- router/pkg/pubsub/nats/pubsub_datasource.go | 32 +++++++++ 11 files changed, 143 insertions(+), 70 deletions(-) create mode 100644 router/pkg/pubsub/README.md diff --git a/router/core/executor.go b/router/core/executor.go index 13c8d350ee..63073e06aa 100644 --- a/router/core/executor.go +++ b/router/core/executor.go @@ -198,7 +198,7 @@ func (b *ExecutorConfigurationBuilder) buildPlannerConfiguration(ctx context.Con // the plan config is what the engine uses to turn a GraphQL Request into an execution plan // the plan config is stateful as it carries connection pools and other things - loader := NewLoader(b.trackUsageInfo, NewDefaultFactoryResolver( + loader := NewLoader(ctx, b.trackUsageInfo, NewDefaultFactoryResolver( ctx, b.transportOptions, b.subscriptionClientOptions, diff --git a/router/core/factoryresolver.go b/router/core/factoryresolver.go index 30633f004a..e12d64b5df 100644 --- a/router/core/factoryresolver.go +++ b/router/core/factoryresolver.go @@ -27,6 +27,7 @@ import ( ) type Loader struct { + ctx context.Context resolver FactoryResolver // includeInfo controls whether additional information like type usage and field usage is included in the plan de includeInfo bool @@ -158,8 +159,9 @@ func (d *DefaultFactoryResolver) InstanceData() InstanceData { return d.instanceData } -func NewLoader(includeInfo bool, resolver FactoryResolver, logger *zap.Logger) *Loader { +func NewLoader(ctx context.Context, includeInfo bool, resolver FactoryResolver, logger *zap.Logger) *Loader { return &Loader{ + ctx: ctx, resolver: resolver, includeInfo: includeInfo, logger: logger, @@ -413,7 +415,7 @@ func (l *Loader) Load(engineConfig *nodev1.EngineConfiguration, subgraphs []*nod var err error out, err = pubsub.GetDataSourceFromConfig( - context.Background(), + l.ctx, in, l.dataSourceMetaData(in), routerEngineConfig.Events, diff --git a/router/core/plan_generator.go b/router/core/plan_generator.go index 43e8e344b6..c30f108a23 100644 --- a/router/core/plan_generator.go +++ b/router/core/plan_generator.go @@ -275,8 +275,9 @@ func (pg *PlanGenerator) loadConfiguration(routerConfig *nodev1.RouterConfig, lo graphql_datasource.WithNetPollConfiguration(netPollConfig), ) - loader := NewLoader(false, &DefaultFactoryResolver{ - engineCtx: context.Background(), + ctx := context.Background() + loader := NewLoader(ctx, false, &DefaultFactoryResolver{ + engineCtx: ctx, httpClient: http.DefaultClient, streamingClient: http.DefaultClient, subscriptionClient: subscriptionClient, diff --git a/router/pkg/pubsub/README.md b/router/pkg/pubsub/README.md new file mode 100644 index 0000000000..76e9efcbc2 --- /dev/null +++ b/router/pkg/pubsub/README.md @@ -0,0 +1,72 @@ + +# How to add a PubSub Provider + +## Add the data to the router proto + +You need to change the [router proto](../../../proto/wg/cosmo/node/v1/node.proto) as follows. + +Add the provider configuration like the `KafkaEventConfiguration` and then add it as repeated inside the `DataSourceCustomEvents`. + +The fields of `KafkaEventConfiguration` will depends on the provider. If the providers uses as grouping mechanisms of the messages "channel" it will be called "channels", if it is "Topic" it will be "topics", and so on. + +After this you will have to compile the proto launching from the main folder the command `make generate-go`. + + +## Build the PubSub Provider + +To build a PubSub provider you need to implement 4 things: +- `Adapter` +- `ProviderFactory` +- `PubSubProvider` +- `PubSubDataSource` + +And then add it inside the `GetProviderFactories` function. + +### Adapter + +The Adapter contains the logic that is actually calling the provider, usually it implement an interface as follows: + +```go +type AdapterInterface interface { + Subscribe(ctx context.Context, event SubscriptionEventConfiguration, updater resolve.SubscriptionUpdater) error + Publish(ctx context.Context, event PublishEventConfiguration) error +} +``` + +The content of `SubscriptionEventConfiguration` and `PublishEventConfiguration` depends on the provider, you can see an example of them in the [kafka implementation](./kafka/pubsub_datasource.go). + + +### ProviderFactory + +The `ProviderFactory` is the initial contact point where you receive: +- `ctx context.Context`, usually passed down to the adapter +- [`*nodev1.DataSourceConfiguration`](../../gen/proto/wg/cosmo/node/v1/node.pb.go#DataSourceConfiguration), that contains everything you need about the provider data parsed from the schema. +- `*plan.DataSourceMetadata`, usually not needed +- [`config.EventsConfiguration`](../config/config.go#EventsConfiguration) that contains the config needed to setup the provider connection +- `*zap.Logger` +- `hostName string`, useful if you need to identify the connection based on the local host name +- `routerListenAddr string`, useful if you need to identify the connection based on different router instances in the same host + +The responsability of the factory is to initialize the PubSubProvider, like in this implementation for an `ExampleProvider`: + +You can see as an example of the `GetProvider` function in the [kafka implementation](./kafka/provider.go). + +### PubSubProvider + +So, the `PubSubProvider` has already the Adapter of the provider initialized, and it will be called on a `Visitor.EnterField` call from the engine to check if the `PubSubProvider` is matching any `EngineEventConfiguration`. + +The responsability of the `PubSubProvider` is to match the `EngineEventConfiguration` and initialize a `PubSubDataSource` with the matching event and the provider `Adapter`. + +You can see as an example of the `PubSubProvider` in the [kafka implementation](./kafka/provider.go). + +### PubSubDataSource + +The `[PubSubDataSource](./datasource/datasource.go)` is the junction between the engine `resolve.DataSource` and the Provider that we are implementing. + +You can see an example in [kafka `PubSubDataSource`](./kafka/pubsub_datasource.go). + +To complete the `PubSubDataSource` implementation you should also add the engine data source. + +So you have to implement the SubscriptionDataSource, a structure that implements all the methods needed by the interface `resolve.SubscriptionDataSource`, like the [kafka implementation](./kafka/engine_datasource.go). + +And also, you have to implement the DataSource, a structure that implements all the methods needed by the interface `resolve.DataSource`, like `PublishDataSource` in the [kafka implementation](./kafka/pubsub_datasource.go). \ No newline at end of file diff --git a/router/pkg/pubsub/kafka/engine_datasource.go b/router/pkg/pubsub/kafka/engine_datasource.go index f342469f52..f31758ffa7 100644 --- a/router/pkg/pubsub/kafka/engine_datasource.go +++ b/router/pkg/pubsub/kafka/engine_datasource.go @@ -4,7 +4,6 @@ import ( "bytes" "context" "encoding/json" - "fmt" "io" "github.com/buger/jsonparser" @@ -13,26 +12,11 @@ import ( "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/resolve" ) -type SubscriptionEventConfiguration struct { - ProviderID string `json:"providerId"` - Topics []string `json:"topics"` -} - -type PublishEventConfiguration struct { - ProviderID string `json:"providerId"` - Topic string `json:"topic"` - Data json.RawMessage `json:"data"` -} - -func (s *PublishEventConfiguration) MarshalJSONTemplate() string { - return fmt.Sprintf(`{"topic":"%s", "data": %s, "providerId":"%s"}`, s.Topic, s.Data, s.ProviderID) -} - -type SubscriptionSource struct { +type SubscriptionDataSource struct { pubSub AdapterInterface } -func (s *SubscriptionSource) UniqueRequestID(ctx *resolve.Context, input []byte, xxh *xxhash.Digest) error { +func (s *SubscriptionDataSource) UniqueRequestID(ctx *resolve.Context, input []byte, xxh *xxhash.Digest) error { val, _, _, err := jsonparser.Get(input, "topics") if err != nil { return err @@ -52,7 +36,7 @@ func (s *SubscriptionSource) UniqueRequestID(ctx *resolve.Context, input []byte, return err } -func (s *SubscriptionSource) Start(ctx *resolve.Context, input []byte, updater resolve.SubscriptionUpdater) error { +func (s *SubscriptionDataSource) Start(ctx *resolve.Context, input []byte, updater resolve.SubscriptionUpdater) error { var subscriptionConfiguration SubscriptionEventConfiguration err := json.Unmarshal(input, &subscriptionConfiguration) if err != nil { @@ -62,11 +46,11 @@ func (s *SubscriptionSource) Start(ctx *resolve.Context, input []byte, updater r return s.pubSub.Subscribe(ctx.Context(), subscriptionConfiguration, updater) } -type KafkaPublishDataSource struct { +type PublishDataSource struct { pubSub AdapterInterface } -func (s *KafkaPublishDataSource) Load(ctx context.Context, input []byte, out *bytes.Buffer) error { +func (s *PublishDataSource) Load(ctx context.Context, input []byte, out *bytes.Buffer) error { var publishConfiguration PublishEventConfiguration err := json.Unmarshal(input, &publishConfiguration) if err != nil { @@ -81,6 +65,6 @@ func (s *KafkaPublishDataSource) Load(ctx context.Context, input []byte, out *by return err } -func (s *KafkaPublishDataSource) LoadWithFiles(ctx context.Context, input []byte, files []*httpclient.FileUpload, out *bytes.Buffer) (err error) { +func (s *PublishDataSource) LoadWithFiles(ctx context.Context, input []byte, files []*httpclient.FileUpload, out *bytes.Buffer) (err error) { panic("not implemented") } diff --git a/router/pkg/pubsub/kafka/engine_datasource_test.go b/router/pkg/pubsub/kafka/engine_datasource_test.go index aa58bb939e..ca9065c7df 100644 --- a/router/pkg/pubsub/kafka/engine_datasource_test.go +++ b/router/pkg/pubsub/kafka/engine_datasource_test.go @@ -104,7 +104,7 @@ func TestSubscriptionSource_UniqueRequestID(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - source := &SubscriptionSource{ + source := &SubscriptionDataSource{ pubSub: &EngineDataSourceMockAdapter{}, } ctx := &resolve.Context{} @@ -170,7 +170,7 @@ func TestSubscriptionSource_Start(t *testing.T) { mockAdapter := new(EngineDataSourceMockAdapter) tt.mockSetup(mockAdapter) - source := &SubscriptionSource{ + source := &SubscriptionDataSource{ pubSub: mockAdapter, } @@ -245,7 +245,7 @@ func TestKafkaPublishDataSource_Load(t *testing.T) { mockAdapter := new(EngineDataSourceMockAdapter) tt.mockSetup(mockAdapter) - dataSource := &KafkaPublishDataSource{ + dataSource := &PublishDataSource{ pubSub: mockAdapter, } ctx := context.Background() @@ -270,7 +270,7 @@ func TestKafkaPublishDataSource_Load(t *testing.T) { func TestKafkaPublishDataSource_LoadWithFiles(t *testing.T) { t.Run("panic on not implemented", func(t *testing.T) { - dataSource := &KafkaPublishDataSource{ + dataSource := &PublishDataSource{ pubSub: &EngineDataSourceMockAdapter{}, } diff --git a/router/pkg/pubsub/kafka/provider.go b/router/pkg/pubsub/kafka/provider.go index ff767a7de0..1e86916355 100644 --- a/router/pkg/pubsub/kafka/provider.go +++ b/router/pkg/pubsub/kafka/provider.go @@ -52,7 +52,7 @@ func GetProvider(ctx context.Context, in *nodev1.DataSourceConfiguration, dsMeta } usedProviders := make(map[string]bool) if kafkaData := in.GetCustomEvents().GetKafka(); kafkaData != nil { - for _, event := range in.CustomEvents.GetKafka() { + for _, event := range kafkaData { if !definedProviders[event.EngineEventConfiguration.ProviderId] { return nil, fmt.Errorf("failed to find Kafka provider with ID %s", event.EngineEventConfiguration.ProviderId) } @@ -75,7 +75,7 @@ func GetProvider(ctx context.Context, in *nodev1.DataSourceConfiguration, dsMeta } return &PubSubProvider{ - EventConfiguration: in.CustomEvents.GetKafka(), + EventConfiguration: kafkaData, Logger: logger, Providers: providers, }, nil diff --git a/router/pkg/pubsub/kafka/pubsub_datasource.go b/router/pkg/pubsub/kafka/pubsub_datasource.go index fac984411e..f559faa372 100644 --- a/router/pkg/pubsub/kafka/pubsub_datasource.go +++ b/router/pkg/pubsub/kafka/pubsub_datasource.go @@ -23,7 +23,7 @@ func (c *PubSubDataSource) GetResolveDataSource() (resolve.DataSource, error) { typeName := c.EventConfiguration.GetEngineEventConfiguration().GetType() switch typeName { case nodev1.EventType_PUBLISH: - dataSource = &KafkaPublishDataSource{ + dataSource = &PublishDataSource{ pubSub: c.KafkaAdapter, } default: @@ -54,7 +54,7 @@ func (c *PubSubDataSource) GetResolveDataSourceInput(event []byte) (string, erro } func (c *PubSubDataSource) GetResolveDataSourceSubscription() (resolve.SubscriptionDataSource, error) { - return &SubscriptionSource{ + return &SubscriptionDataSource{ pubSub: c.KafkaAdapter, }, nil } @@ -75,3 +75,18 @@ func (c *PubSubDataSource) GetResolveDataSourceSubscriptionInput() (string, erro func (c *PubSubDataSource) GetProviderId() string { return c.EventConfiguration.GetEngineEventConfiguration().GetProviderId() } + +type SubscriptionEventConfiguration struct { + ProviderID string `json:"providerId"` + Topics []string `json:"topics"` +} + +type PublishEventConfiguration struct { + ProviderID string `json:"providerId"` + Topic string `json:"topic"` + Data json.RawMessage `json:"data"` +} + +func (s *PublishEventConfiguration) MarshalJSONTemplate() string { + return fmt.Sprintf(`{"topic":"%s", "data": %s, "providerId":"%s"}`, s.Topic, s.Data, s.ProviderID) +} diff --git a/router/pkg/pubsub/nats/engine_datasource.go b/router/pkg/pubsub/nats/engine_datasource.go index c4ef8e1e2f..c63da7ad0f 100644 --- a/router/pkg/pubsub/nats/engine_datasource.go +++ b/router/pkg/pubsub/nats/engine_datasource.go @@ -4,7 +4,6 @@ import ( "bytes" "context" "encoding/json" - "fmt" "io" "github.com/buger/jsonparser" @@ -13,38 +12,6 @@ import ( "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/resolve" ) -type StreamConfiguration struct { - Consumer string `json:"consumer"` - ConsumerInactiveThreshold int32 `json:"consumerInactiveThreshold"` - StreamName string `json:"streamName"` -} - -type SubscriptionEventConfiguration struct { - ProviderID string `json:"providerId"` - Subjects []string `json:"subjects"` - StreamConfiguration *StreamConfiguration `json:"streamConfiguration,omitempty"` -} - -type PublishAndRequestEventConfiguration struct { - ProviderID string `json:"providerId"` - Subject string `json:"subject"` - Data json.RawMessage `json:"data"` -} - -func (s *PublishAndRequestEventConfiguration) MarshalJSONTemplate() string { - return fmt.Sprintf(`{"subject":"%s", "data": %s, "providerId":"%s"}`, s.Subject, s.Data, s.ProviderID) -} - -type PublishEventConfiguration struct { - ProviderID string `json:"providerId"` - Subject string `json:"subject"` - Data json.RawMessage `json:"data"` -} - -func (s *PublishEventConfiguration) MarshalJSONTemplate() string { - return fmt.Sprintf(`{"subject":"%s", "data": %s, "providerId":"%s"}`, s.Subject, s.Data, s.ProviderID) -} - type SubscriptionSource struct { pubSub AdapterInterface } diff --git a/router/pkg/pubsub/nats/provider.go b/router/pkg/pubsub/nats/provider.go index 22212c735b..e94c3a227d 100644 --- a/router/pkg/pubsub/nats/provider.go +++ b/router/pkg/pubsub/nats/provider.go @@ -118,7 +118,7 @@ func GetProvider(ctx context.Context, in *nodev1.DataSourceConfiguration, dsMeta definedProviders[provider.ID] = true } usedProviders := make(map[string]bool) - for _, event := range in.CustomEvents.GetNats() { + for _, event := range natsData { if _, found := definedProviders[event.EngineEventConfiguration.ProviderId]; !found { return nil, fmt.Errorf("failed to find Nats provider with ID %s", event.EngineEventConfiguration.ProviderId) } @@ -141,7 +141,7 @@ func GetProvider(ctx context.Context, in *nodev1.DataSourceConfiguration, dsMeta providers[provider.ID] = adapter } return &PubSubProvider{ - EventConfiguration: in.CustomEvents.GetNats(), + EventConfiguration: natsData, Logger: logger, Providers: providers, }, nil diff --git a/router/pkg/pubsub/nats/pubsub_datasource.go b/router/pkg/pubsub/nats/pubsub_datasource.go index 07a2d37542..ca8aae2506 100644 --- a/router/pkg/pubsub/nats/pubsub_datasource.go +++ b/router/pkg/pubsub/nats/pubsub_datasource.go @@ -88,3 +88,35 @@ func (c *PubSubDataSource) GetResolveDataSourceSubscriptionInput() (string, erro func (c *PubSubDataSource) GetProviderId() string { return c.EventConfiguration.GetEngineEventConfiguration().GetProviderId() } + +type StreamConfiguration struct { + Consumer string `json:"consumer"` + ConsumerInactiveThreshold int32 `json:"consumerInactiveThreshold"` + StreamName string `json:"streamName"` +} + +type SubscriptionEventConfiguration struct { + ProviderID string `json:"providerId"` + Subjects []string `json:"subjects"` + StreamConfiguration *StreamConfiguration `json:"streamConfiguration,omitempty"` +} + +type PublishAndRequestEventConfiguration struct { + ProviderID string `json:"providerId"` + Subject string `json:"subject"` + Data json.RawMessage `json:"data"` +} + +func (s *PublishAndRequestEventConfiguration) MarshalJSONTemplate() string { + return fmt.Sprintf(`{"subject":"%s", "data": %s, "providerId":"%s"}`, s.Subject, s.Data, s.ProviderID) +} + +type PublishEventConfiguration struct { + ProviderID string `json:"providerId"` + Subject string `json:"subject"` + Data json.RawMessage `json:"data"` +} + +func (s *PublishEventConfiguration) MarshalJSONTemplate() string { + return fmt.Sprintf(`{"subject":"%s", "data": %s, "providerId":"%s"}`, s.Subject, s.Data, s.ProviderID) +} From 592cbb60539581a1592b649555695199904d6a63 Mon Sep 17 00:00:00 2001 From: Alessandro Pagnin Date: Fri, 11 Apr 2025 19:41:45 +0200 Subject: [PATCH 023/126] feat: implement PubSub provider startup and shutdown on graphServer --- router/core/executor.go | 5 +- router/core/factoryresolver.go | 52 +++++++++++++------ router/core/graph_server.go | 25 +++++++++ router/core/plan_generator.go | 3 +- router/pkg/pubsub/datasource/provider.go | 2 + router/pkg/pubsub/kafka/adapter.go | 1 + .../pubsub/kafka/engine_datasource_test.go | 5 ++ router/pkg/pubsub/kafka/provider.go | 13 +++++ router/pkg/pubsub/kafka/provider_test.go | 5 ++ .../pubsub/kafka/pubsub_datasource_test.go | 5 ++ router/pkg/pubsub/nats/provider.go | 13 +++++ router/pkg/pubsub/pubsub.go | 47 ----------------- 12 files changed, 112 insertions(+), 64 deletions(-) diff --git a/router/core/executor.go b/router/core/executor.go index 63073e06aa..037163a99a 100644 --- a/router/core/executor.go +++ b/router/core/executor.go @@ -18,6 +18,7 @@ import ( nodev1 "github.com/wundergraph/cosmo/router/gen/proto/wg/cosmo/node/v1" "github.com/wundergraph/cosmo/router/pkg/config" + "github.com/wundergraph/cosmo/router/pkg/pubsub/datasource" ) type ExecutorConfigurationBuilder struct { @@ -30,6 +31,8 @@ type ExecutorConfigurationBuilder struct { transportOptions *TransportOptions subscriptionClientOptions *SubscriptionClientOptions instanceData InstanceData + + addPubSubProviderCallback func(provider datasource.PubSubProvider) } type Executor struct { @@ -207,7 +210,7 @@ func (b *ExecutorConfigurationBuilder) buildPlannerConfiguration(ctx context.Con routerEngineCfg.Execution.EnableSingleFlight, routerEngineCfg.Execution.EnableNetPoll, b.instanceData, - ), b.logger) + ), b.logger, b.addPubSubProviderCallback) // this generates the plan config using the data source factories from the config package planConfig, err := loader.Load(engineConfig, subgraphs, routerEngineCfg) diff --git a/router/core/factoryresolver.go b/router/core/factoryresolver.go index e12d64b5df..6b684ed733 100644 --- a/router/core/factoryresolver.go +++ b/router/core/factoryresolver.go @@ -11,6 +11,7 @@ import ( "github.com/buger/jsonparser" "github.com/wundergraph/cosmo/router/pkg/pubsub" + "github.com/wundergraph/cosmo/router/pkg/pubsub/datasource" "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/argument_templates" "github.com/wundergraph/cosmo/router/pkg/config" @@ -30,8 +31,9 @@ type Loader struct { ctx context.Context resolver FactoryResolver // includeInfo controls whether additional information like type usage and field usage is included in the plan de - includeInfo bool - logger *zap.Logger + includeInfo bool + logger *zap.Logger + addPubSubProviderCallback func(provider datasource.PubSubProvider) } type InstanceData struct { @@ -159,12 +161,13 @@ func (d *DefaultFactoryResolver) InstanceData() InstanceData { return d.instanceData } -func NewLoader(ctx context.Context, includeInfo bool, resolver FactoryResolver, logger *zap.Logger) *Loader { +func NewLoader(ctx context.Context, includeInfo bool, resolver FactoryResolver, logger *zap.Logger, addPubSubProviderCallback func(provider datasource.PubSubProvider)) *Loader { return &Loader{ - ctx: ctx, - resolver: resolver, - includeInfo: includeInfo, - logger: logger, + ctx: ctx, + resolver: resolver, + includeInfo: includeInfo, + logger: logger, + addPubSubProviderCallback: addPubSubProviderCallback, } } @@ -414,14 +417,33 @@ func (l *Loader) Load(engineConfig *nodev1.EngineConfiguration, subgraphs []*nod case nodev1.DataSourceKind_PUBSUB: var err error - out, err = pubsub.GetDataSourceFromConfig( - l.ctx, - in, - l.dataSourceMetaData(in), - routerEngineConfig.Events, - l.logger, - l.resolver.InstanceData().hostName, - l.resolver.InstanceData().listenAddress, + var providers []datasource.PubSubProvider + + dsMeta := l.dataSourceMetaData(in) + for _, providerFactory := range pubsub.GetProviderFactories() { + provider, err := providerFactory( + l.ctx, + in, + dsMeta, + routerEngineConfig.Events, + l.logger, + l.resolver.InstanceData().hostName, + l.resolver.InstanceData().listenAddress, + ) + if err != nil { + return nil, err + } + if provider != nil { + providers = append(providers, provider) + l.addPubSubProviderCallback(provider) + } + } + + out, err = plan.NewDataSourceConfiguration( + in.Id, + datasource.NewFactory(l.ctx, routerEngineConfig.Events, providers), + dsMeta, + providers, ) if err != nil { return nil, err diff --git a/router/core/graph_server.go b/router/core/graph_server.go index bf795e9f8e..351cb1a1a5 100644 --- a/router/core/graph_server.go +++ b/router/core/graph_server.go @@ -44,6 +44,7 @@ import ( "github.com/wundergraph/cosmo/router/pkg/logging" rmetric "github.com/wundergraph/cosmo/router/pkg/metric" "github.com/wundergraph/cosmo/router/pkg/otel" + "github.com/wundergraph/cosmo/router/pkg/pubsub/datasource" "github.com/wundergraph/cosmo/router/pkg/statistics" rtrace "github.com/wundergraph/cosmo/router/pkg/trace" ) @@ -85,6 +86,7 @@ type ( otlpEngineMetrics *rmetric.EngineMetrics prometheusEngineMetrics *rmetric.EngineMetrics instanceData InstanceData + pubSubProviders []datasource.PubSubProvider } ) @@ -880,6 +882,12 @@ func (s *graphServer) buildGraphMux(ctx context.Context, SubgraphErrorPropagation: s.subgraphErrorPropagation, } + var pubSubProviders []datasource.PubSubProvider + + addPubSubProviderCallback := func(provider datasource.PubSubProvider) { + pubSubProviders = append(pubSubProviders, provider) + } + ecb := &ExecutorConfigurationBuilder{ introspection: s.introspection, baseURL: s.baseURL, @@ -909,6 +917,7 @@ func (s *graphServer) buildGraphMux(ctx context.Context, LocalhostFallbackInsideDocker: s.localhostFallbackInsideDocker, Logger: s.logger, }, + addPubSubProviderCallback: addPubSubProviderCallback, } executor, err := ecb.Build( @@ -928,6 +937,16 @@ func (s *graphServer) buildGraphMux(ctx context.Context, return nil, fmt.Errorf("failed to build plan configuration: %w", err) } + if len(pubSubProviders) > 0 { + for _, provider := range pubSubProviders { + if err := provider.Startup(ctx); err != nil { + return nil, fmt.Errorf("failed to startup pubsub provider: %w", err) + } + } + + s.pubSubProviders = pubSubProviders + } + operationProcessor := NewOperationProcessor(OperationProcessorOptions{ Executor: executor, MaxOperationSizeInBytes: int64(s.routerTrafficConfig.MaxRequestBodyBytes), @@ -1246,6 +1265,12 @@ func (s *graphServer) Shutdown(ctx context.Context) error { } } + for _, provider := range s.pubSubProviders { + if providerErr := provider.Shutdown(ctx); providerErr != nil { + finalErr = errors.Join(finalErr, providerErr) + } + } + // Shutdown all graphs muxes to release resources // e.g. planner cache s.graphMuxListLock.Lock() diff --git a/router/core/plan_generator.go b/router/core/plan_generator.go index c30f108a23..b842fbbcce 100644 --- a/router/core/plan_generator.go +++ b/router/core/plan_generator.go @@ -23,6 +23,7 @@ import ( "go.uber.org/zap" "github.com/wundergraph/cosmo/router/pkg/config" + "github.com/wundergraph/cosmo/router/pkg/pubsub/datasource" "github.com/wundergraph/cosmo/router/pkg/pubsub/kafka" "github.com/wundergraph/cosmo/router/pkg/pubsub/nats" @@ -282,7 +283,7 @@ func (pg *PlanGenerator) loadConfiguration(routerConfig *nodev1.RouterConfig, lo streamingClient: http.DefaultClient, subscriptionClient: subscriptionClient, transportOptions: &TransportOptions{SubgraphTransportOptions: NewSubgraphTransportOptions(config.TrafficShapingRules{})}, - }, logger) + }, logger, func(provider datasource.PubSubProvider) {}) // this generates the plan configuration using the data source factories from the config package planConfig, err := loader.Load(routerConfig.GetEngineConfig(), routerConfig.GetSubgraphs(), &routerEngineConfig) diff --git a/router/pkg/pubsub/datasource/provider.go b/router/pkg/pubsub/datasource/provider.go index d496a4e3a0..fa58f3b30e 100644 --- a/router/pkg/pubsub/datasource/provider.go +++ b/router/pkg/pubsub/datasource/provider.go @@ -14,5 +14,7 @@ type ProviderFactory func(ctx context.Context, in *nodev1.DataSourceConfiguratio type ArgumentTemplateCallback func(tpl string) (string, error) type PubSubProvider interface { + Startup(ctx context.Context) error + Shutdown(ctx context.Context) error FindPubSubDataSource(typeName string, fieldName string, extractFn ArgumentTemplateCallback) (PubSubDataSource, error) } diff --git a/router/pkg/pubsub/kafka/adapter.go b/router/pkg/pubsub/kafka/adapter.go index 675c225c9d..4d38085fe5 100644 --- a/router/pkg/pubsub/kafka/adapter.go +++ b/router/pkg/pubsub/kafka/adapter.go @@ -74,6 +74,7 @@ func NewAdapter(ctx context.Context, logger *zap.Logger, opts []kgo.Opt) (Adapte type AdapterInterface interface { Subscribe(ctx context.Context, event SubscriptionEventConfiguration, updater resolve.SubscriptionUpdater) error Publish(ctx context.Context, event PublishEventConfiguration) error + Shutdown(ctx context.Context) error } // Adapter is a Kafka pubsub implementation. diff --git a/router/pkg/pubsub/kafka/engine_datasource_test.go b/router/pkg/pubsub/kafka/engine_datasource_test.go index ca9065c7df..9939ce85d4 100644 --- a/router/pkg/pubsub/kafka/engine_datasource_test.go +++ b/router/pkg/pubsub/kafka/engine_datasource_test.go @@ -29,6 +29,11 @@ func (m *EngineDataSourceMockAdapter) Publish(ctx context.Context, event Publish return args.Error(0) } +func (m *EngineDataSourceMockAdapter) Shutdown(ctx context.Context) error { + args := m.Called(ctx) + return args.Error(0) +} + // MockSubscriptionUpdater implements resolve.SubscriptionUpdater type MockSubscriptionUpdater struct { mock.Mock diff --git a/router/pkg/pubsub/kafka/provider.go b/router/pkg/pubsub/kafka/provider.go index 1e86916355..eda78fe824 100644 --- a/router/pkg/pubsub/kafka/provider.go +++ b/router/pkg/pubsub/kafka/provider.go @@ -101,3 +101,16 @@ func (c *PubSubProvider) FindPubSubDataSource(typeName string, fieldName string, } return nil, nil } + +func (c *PubSubProvider) Startup(ctx context.Context) error { + return nil +} + +func (c *PubSubProvider) Shutdown(ctx context.Context) error { + for _, provider := range c.Providers { + if err := provider.Shutdown(ctx); err != nil { + return err + } + } + return nil +} diff --git a/router/pkg/pubsub/kafka/provider_test.go b/router/pkg/pubsub/kafka/provider_test.go index de54da2dfa..0fa63a73b8 100644 --- a/router/pkg/pubsub/kafka/provider_test.go +++ b/router/pkg/pubsub/kafka/provider_test.go @@ -31,6 +31,11 @@ func (m *mockAdapter) Publish(ctx context.Context, event PublishEventConfigurati return args.Error(0) } +func (m *mockAdapter) Shutdown(ctx context.Context) error { + args := m.Called(ctx) + return args.Error(0) +} + func TestBuildKafkaOptions(t *testing.T) { t.Run("basic configuration", func(t *testing.T) { cfg := config.KafkaEventSource{ diff --git a/router/pkg/pubsub/kafka/pubsub_datasource_test.go b/router/pkg/pubsub/kafka/pubsub_datasource_test.go index b97bbd034b..24f6247a43 100644 --- a/router/pkg/pubsub/kafka/pubsub_datasource_test.go +++ b/router/pkg/pubsub/kafka/pubsub_datasource_test.go @@ -31,6 +31,11 @@ func (m *MockAdapter) Publish(ctx context.Context, event PublishEventConfigurati return args.Error(0) } +func (m *MockAdapter) Shutdown(ctx context.Context) error { + args := m.Called(ctx) + return args.Error(0) +} + func TestKafkaPubSubDataSource(t *testing.T) { // Create event configuration with required fields engineEventConfig := &nodev1.EngineEventConfiguration{ diff --git a/router/pkg/pubsub/nats/provider.go b/router/pkg/pubsub/nats/provider.go index e94c3a227d..eaa4c4d5a3 100644 --- a/router/pkg/pubsub/nats/provider.go +++ b/router/pkg/pubsub/nats/provider.go @@ -149,3 +149,16 @@ func GetProvider(ctx context.Context, in *nodev1.DataSourceConfiguration, dsMeta return nil, nil } + +func (c *PubSubProvider) Startup(ctx context.Context) error { + return nil +} + +func (c *PubSubProvider) Shutdown(ctx context.Context) error { + for _, provider := range c.Providers { + if err := provider.Shutdown(ctx); err != nil { + return err + } + } + return nil +} diff --git a/router/pkg/pubsub/pubsub.go b/router/pkg/pubsub/pubsub.go index 8ae599be28..e70cf66f33 100644 --- a/router/pkg/pubsub/pubsub.go +++ b/router/pkg/pubsub/pubsub.go @@ -1,14 +1,7 @@ package pubsub import ( - "context" - "fmt" - - nodev1 "github.com/wundergraph/cosmo/router/gen/proto/wg/cosmo/node/v1" - "github.com/wundergraph/cosmo/router/pkg/config" "github.com/wundergraph/cosmo/router/pkg/pubsub/datasource" - "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/plan" - "go.uber.org/zap" "github.com/wundergraph/cosmo/router/pkg/pubsub/kafka" "github.com/wundergraph/cosmo/router/pkg/pubsub/nats" @@ -28,43 +21,3 @@ func GetProviderFactories() []datasource.ProviderFactory { nats.GetProvider, }, additionalProviders...) } - -// GetDataSourceFromConfig returns a new plan.DataSource from the given configuration, -// using the registered PubSub providers. -func GetDataSourceFromConfig( - ctx context.Context, - in *nodev1.DataSourceConfiguration, - dsMeta *plan.DataSourceMetadata, - config config.EventsConfiguration, - logger *zap.Logger, - hostName string, - routerListenAddr string, -) (plan.DataSource, error) { - var providers []datasource.PubSubProvider - - for _, providerFactory := range GetProviderFactories() { - provider, err := providerFactory(ctx, in, dsMeta, config, logger, hostName, routerListenAddr) - if err != nil { - return nil, err - } - if provider != nil { - providers = append(providers, provider) - } - } - - if len(providers) == 0 { - return nil, fmt.Errorf("no pubsub data sources found for data source %s", in.Id) - } - - ds, err := plan.NewDataSourceConfiguration( - in.Id, - datasource.NewFactory(ctx, config, providers), - dsMeta, - providers, - ) - if err != nil { - return nil, err - } - - return ds, nil -} From 8295c26eab7fffa5209890ada2c014c3f797d4d7 Mon Sep 17 00:00:00 2001 From: Alessandro Pagnin Date: Mon, 14 Apr 2025 09:50:49 +0200 Subject: [PATCH 024/126] refactor: update Kafka and NATS adapters to use direct client connections and implement Startup method --- router/pkg/pubsub/kafka/adapter.go | 75 ++-- .../pubsub/kafka/engine_datasource_test.go | 44 +- router/pkg/pubsub/kafka/provider.go | 5 + router/pkg/pubsub/kafka/provider_test.go | 5 + .../pubsub/kafka/pubsub_datasource_test.go | 29 +- router/pkg/pubsub/nats/adapter.go | 85 ++-- .../pkg/pubsub/nats/engine_datasource_test.go | 57 +-- router/pkg/pubsub/nats/lazy_client.go | 53 --- router/pkg/pubsub/nats/lazy_client_test.go | 413 ------------------ router/pkg/pubsub/nats/provider.go | 5 + router/pkg/pubsub/nats/provider_test.go | 5 + .../pkg/pubsub/nats/pubsub_datasource_test.go | 35 +- 12 files changed, 129 insertions(+), 682 deletions(-) delete mode 100644 router/pkg/pubsub/nats/lazy_client.go delete mode 100644 router/pkg/pubsub/nats/lazy_client_test.go diff --git a/router/pkg/pubsub/kafka/adapter.go b/router/pkg/pubsub/kafka/adapter.go index 4d38085fe5..7e9d3486c0 100644 --- a/router/pkg/pubsub/kafka/adapter.go +++ b/router/pkg/pubsub/kafka/adapter.go @@ -19,54 +19,18 @@ var ( errClientClosed = errors.New("client closed") ) -type LazyClient struct { - once sync.Once - client *kgo.Client - opts []kgo.Opt -} - -func (c *LazyClient) Connect() (err error) { - c.once.Do(func() { - c.client, err = kgo.NewClient(append(c.opts, - // For observability, we set the client ID to "router" - kgo.ClientID("cosmo.router.producer"))..., - ) - }) - - return -} - -func (c *LazyClient) GetClient() *kgo.Client { - if c.client == nil { - c.Connect() - } - return c.client -} - -func NewLazyClient(opts ...kgo.Opt) *LazyClient { - return &LazyClient{ - opts: opts, - } -} - func NewAdapter(ctx context.Context, logger *zap.Logger, opts []kgo.Opt) (AdapterInterface, error) { ctx, cancel := context.WithCancel(ctx) if logger == nil { logger = zap.NewNop() } - client := NewLazyClient(append(opts, - // For observability, we set the client ID to "router" - kgo.ClientID("cosmo.router.producer"))..., - ) - return &Adapter{ - ctx: ctx, - logger: logger.With(zap.String("pubsub", "kafka")), - opts: opts, - writeClient: client, - closeWg: sync.WaitGroup{}, - cancel: cancel, + ctx: ctx, + logger: logger.With(zap.String("pubsub", "kafka")), + opts: opts, + closeWg: sync.WaitGroup{}, + cancel: cancel, }, nil } @@ -74,6 +38,7 @@ func NewAdapter(ctx context.Context, logger *zap.Logger, opts []kgo.Opt) (Adapte type AdapterInterface interface { Subscribe(ctx context.Context, event SubscriptionEventConfiguration, updater resolve.SubscriptionUpdater) error Publish(ctx context.Context, event PublishEventConfiguration) error + Startup(ctx context.Context) error Shutdown(ctx context.Context) error } @@ -86,7 +51,7 @@ type Adapter struct { ctx context.Context opts []kgo.Opt logger *zap.Logger - writeClient *LazyClient + writeClient *kgo.Client closeWg sync.WaitGroup cancel context.CancelFunc } @@ -206,6 +171,10 @@ func (p *Adapter) Publish(ctx context.Context, event PublishEventConfiguration) zap.String("topic", event.Topic), ) + if p.writeClient == nil { + return datasource.NewError("kafka write client not initialized", nil) + } + log.Debug("publish", zap.ByteString("data", event.Data)) var wg sync.WaitGroup @@ -213,7 +182,7 @@ func (p *Adapter) Publish(ctx context.Context, event PublishEventConfiguration) var pErr error - p.writeClient.GetClient().Produce(ctx, &kgo.Record{ + p.writeClient.Produce(ctx, &kgo.Record{ Topic: event.Topic, Value: event.Data, }, func(record *kgo.Record, err error) { @@ -233,14 +202,30 @@ func (p *Adapter) Publish(ctx context.Context, event PublishEventConfiguration) return nil } +func (p *Adapter) Startup(ctx context.Context) (err error) { + p.writeClient, err = kgo.NewClient(append(p.opts, + // For observability, we set the client ID to "router" + kgo.ClientID("cosmo.router.producer"))..., + ) + if err != nil { + return err + } + + return +} + func (p *Adapter) Shutdown(ctx context.Context) error { - err := p.writeClient.GetClient().Flush(ctx) + if p.writeClient == nil { + return nil + } + + err := p.writeClient.Flush(ctx) if err != nil { p.logger.Error("flushing write client", zap.Error(err)) } - p.writeClient.GetClient().Close() + p.writeClient.Close() // Cancel the context to stop all pollers p.cancel() diff --git a/router/pkg/pubsub/kafka/engine_datasource_test.go b/router/pkg/pubsub/kafka/engine_datasource_test.go index 9939ce85d4..b390f315bb 100644 --- a/router/pkg/pubsub/kafka/engine_datasource_test.go +++ b/router/pkg/pubsub/kafka/engine_datasource_test.go @@ -14,26 +14,6 @@ import ( "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/resolve" ) -// EngineDataSourceMockAdapter is a mock implementation of AdapterInterface for testing -type EngineDataSourceMockAdapter struct { - mock.Mock -} - -func (m *EngineDataSourceMockAdapter) Subscribe(ctx context.Context, event SubscriptionEventConfiguration, updater resolve.SubscriptionUpdater) error { - args := m.Called(ctx, event, updater) - return args.Error(0) -} - -func (m *EngineDataSourceMockAdapter) Publish(ctx context.Context, event PublishEventConfiguration) error { - args := m.Called(ctx, event) - return args.Error(0) -} - -func (m *EngineDataSourceMockAdapter) Shutdown(ctx context.Context) error { - args := m.Called(ctx) - return args.Error(0) -} - // MockSubscriptionUpdater implements resolve.SubscriptionUpdater type MockSubscriptionUpdater struct { mock.Mock @@ -110,7 +90,7 @@ func TestSubscriptionSource_UniqueRequestID(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { source := &SubscriptionDataSource{ - pubSub: &EngineDataSourceMockAdapter{}, + pubSub: &mockAdapter{}, } ctx := &resolve.Context{} input := []byte(tt.input) @@ -137,13 +117,13 @@ func TestSubscriptionSource_Start(t *testing.T) { tests := []struct { name string input string - mockSetup func(*EngineDataSourceMockAdapter) + mockSetup func(*mockAdapter) expectError bool }{ { name: "successful subscription", input: `{"topics":["topic1", "topic2"], "providerId":"test-provider"}`, - mockSetup: func(m *EngineDataSourceMockAdapter) { + mockSetup: func(m *mockAdapter) { m.On("Subscribe", mock.Anything, SubscriptionEventConfiguration{ ProviderID: "test-provider", Topics: []string{"topic1", "topic2"}, @@ -154,7 +134,7 @@ func TestSubscriptionSource_Start(t *testing.T) { { name: "adapter returns error", input: `{"topics":["topic1"], "providerId":"test-provider"}`, - mockSetup: func(m *EngineDataSourceMockAdapter) { + mockSetup: func(m *mockAdapter) { m.On("Subscribe", mock.Anything, SubscriptionEventConfiguration{ ProviderID: "test-provider", Topics: []string{"topic1"}, @@ -165,14 +145,14 @@ func TestSubscriptionSource_Start(t *testing.T) { { name: "invalid input json", input: `{"invalid json":`, - mockSetup: func(m *EngineDataSourceMockAdapter) {}, + mockSetup: func(m *mockAdapter) {}, expectError: true, }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - mockAdapter := new(EngineDataSourceMockAdapter) + mockAdapter := new(mockAdapter) tt.mockSetup(mockAdapter) source := &SubscriptionDataSource{ @@ -207,7 +187,7 @@ func TestKafkaPublishDataSource_Load(t *testing.T) { tests := []struct { name string input string - mockSetup func(*EngineDataSourceMockAdapter) + mockSetup func(*mockAdapter) expectError bool expectedOutput string expectPublished bool @@ -215,7 +195,7 @@ func TestKafkaPublishDataSource_Load(t *testing.T) { { name: "successful publish", input: `{"topic":"test-topic", "data":{"message":"hello"}, "providerId":"test-provider"}`, - mockSetup: func(m *EngineDataSourceMockAdapter) { + mockSetup: func(m *mockAdapter) { m.On("Publish", mock.Anything, mock.MatchedBy(func(event PublishEventConfiguration) bool { return event.ProviderID == "test-provider" && event.Topic == "test-topic" && @@ -229,7 +209,7 @@ func TestKafkaPublishDataSource_Load(t *testing.T) { { name: "publish error", input: `{"topic":"test-topic", "data":{"message":"hello"}, "providerId":"test-provider"}`, - mockSetup: func(m *EngineDataSourceMockAdapter) { + mockSetup: func(m *mockAdapter) { m.On("Publish", mock.Anything, mock.Anything).Return(errors.New("publish error")) }, expectError: false, // The Load method doesn't return the publish error directly @@ -239,7 +219,7 @@ func TestKafkaPublishDataSource_Load(t *testing.T) { { name: "invalid input json", input: `{"invalid json":`, - mockSetup: func(m *EngineDataSourceMockAdapter) {}, + mockSetup: func(m *mockAdapter) {}, expectError: true, expectPublished: false, }, @@ -247,7 +227,7 @@ func TestKafkaPublishDataSource_Load(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - mockAdapter := new(EngineDataSourceMockAdapter) + mockAdapter := new(mockAdapter) tt.mockSetup(mockAdapter) dataSource := &PublishDataSource{ @@ -276,7 +256,7 @@ func TestKafkaPublishDataSource_Load(t *testing.T) { func TestKafkaPublishDataSource_LoadWithFiles(t *testing.T) { t.Run("panic on not implemented", func(t *testing.T) { dataSource := &PublishDataSource{ - pubSub: &EngineDataSourceMockAdapter{}, + pubSub: &mockAdapter{}, } assert.Panics(t, func() { diff --git a/router/pkg/pubsub/kafka/provider.go b/router/pkg/pubsub/kafka/provider.go index eda78fe824..3d444f7923 100644 --- a/router/pkg/pubsub/kafka/provider.go +++ b/router/pkg/pubsub/kafka/provider.go @@ -103,6 +103,11 @@ func (c *PubSubProvider) FindPubSubDataSource(typeName string, fieldName string, } func (c *PubSubProvider) Startup(ctx context.Context) error { + for _, provider := range c.Providers { + if err := provider.Startup(ctx); err != nil { + return err + } + } return nil } diff --git a/router/pkg/pubsub/kafka/provider_test.go b/router/pkg/pubsub/kafka/provider_test.go index 0fa63a73b8..52621affe6 100644 --- a/router/pkg/pubsub/kafka/provider_test.go +++ b/router/pkg/pubsub/kafka/provider_test.go @@ -31,6 +31,11 @@ func (m *mockAdapter) Publish(ctx context.Context, event PublishEventConfigurati return args.Error(0) } +func (m *mockAdapter) Startup(ctx context.Context) error { + args := m.Called(ctx) + return args.Error(0) +} + func (m *mockAdapter) Shutdown(ctx context.Context) error { args := m.Called(ctx) return args.Error(0) diff --git a/router/pkg/pubsub/kafka/pubsub_datasource_test.go b/router/pkg/pubsub/kafka/pubsub_datasource_test.go index 24f6247a43..4388a637a8 100644 --- a/router/pkg/pubsub/kafka/pubsub_datasource_test.go +++ b/router/pkg/pubsub/kafka/pubsub_datasource_test.go @@ -10,32 +10,8 @@ import ( "github.com/stretchr/testify/require" nodev1 "github.com/wundergraph/cosmo/router/gen/proto/wg/cosmo/node/v1" "github.com/wundergraph/cosmo/router/pkg/pubsub/datasource" - "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/resolve" ) -// MockAdapter mocks the required functionality from the Adapter for testing -type MockAdapter struct { - mock.Mock -} - -// Ensure MockAdapter implements KafkaAdapterInterface -var _ AdapterInterface = (*MockAdapter)(nil) - -func (m *MockAdapter) Subscribe(ctx context.Context, event SubscriptionEventConfiguration, updater resolve.SubscriptionUpdater) error { - args := m.Called(ctx, event, updater) - return args.Error(0) -} - -func (m *MockAdapter) Publish(ctx context.Context, event PublishEventConfiguration) error { - args := m.Called(ctx, event) - return args.Error(0) -} - -func (m *MockAdapter) Shutdown(ctx context.Context) error { - args := m.Called(ctx) - return args.Error(0) -} - func TestKafkaPubSubDataSource(t *testing.T) { // Create event configuration with required fields engineEventConfig := &nodev1.EngineEventConfiguration{ @@ -77,7 +53,7 @@ func TestPubSubDataSourceWithMockAdapter(t *testing.T) { } // Create mock adapter - mockAdapter := new(MockAdapter) + mockAdapter := new(mockAdapter) // Configure mock expectations for Publish mockAdapter.On("Publish", mock.Anything, mock.MatchedBy(func(event PublishEventConfiguration) bool { @@ -124,7 +100,7 @@ func TestPubSubDataSource_GetResolveDataSource_WrongType(t *testing.T) { } // Create mock adapter - mockAdapter := new(MockAdapter) + mockAdapter := new(mockAdapter) // Create the data source with mock adapter pubsub := &PubSubDataSource{ @@ -224,5 +200,4 @@ func TestKafkaPubSubDataSourceMultiTopicSubscription(t *testing.T) { require.Equal(t, 2, len(subscriptionConfig.Topics), "Expected 2 topics in subscription configuration") require.Equal(t, "test-topic-1", subscriptionConfig.Topics[0], "Expected first topic to be 'test-topic-1'") require.Equal(t, "test-topic-2", subscriptionConfig.Topics[1], "Expected second topic to be 'test-topic-2'") - } diff --git a/router/pkg/pubsub/nats/adapter.go b/router/pkg/pubsub/nats/adapter.go index bcdad2f3d1..34a646b158 100644 --- a/router/pkg/pubsub/nats/adapter.go +++ b/router/pkg/pubsub/nats/adapter.go @@ -24,6 +24,8 @@ type AdapterInterface interface { Publish(ctx context.Context, event PublishAndRequestEventConfiguration) error // Request sends a request to the specified subject and writes the response to the given writer Request(ctx context.Context, event PublishAndRequestEventConfiguration, w io.Writer) error + // Startup initializes the adapter + Startup(ctx context.Context) error // Shutdown gracefully shuts down the adapter Shutdown(ctx context.Context) error } @@ -31,11 +33,14 @@ type AdapterInterface interface { // Adapter implements the AdapterInterface for NATS pub/sub type Adapter struct { ctx context.Context - client *LazyClient + client *nats.Conn + js jetstream.JetStream logger *zap.Logger closeWg sync.WaitGroup hostName string routerListenAddr string + url string + opts []nats.Option } // getInstanceIdentifier returns an identifier for the current instance. @@ -73,6 +78,14 @@ func (p *Adapter) Subscribe(ctx context.Context, event SubscriptionEventConfigur zap.Strings("subjects", event.Subjects), ) + if p.client == nil { + return datasource.NewError("nats client not initialized", nil) + } + + if p.js == nil { + return datasource.NewError("nats jetstream not initialized", nil) + } + if event.StreamConfiguration != nil { durableConsumerName, err := p.getDurableConsumerName(event.StreamConfiguration.Consumer, event.Subjects) if err != nil { @@ -86,13 +99,8 @@ func (p *Adapter) Subscribe(ctx context.Context, event SubscriptionEventConfigur if event.StreamConfiguration.ConsumerInactiveThreshold > 0 { consumerConfig.InactiveThreshold = time.Duration(event.StreamConfiguration.ConsumerInactiveThreshold) * time.Second } - js, err := p.client.GetJetStream() - if err != nil { - log.Error("getting jetstream client", zap.Error(err)) - return datasource.NewError("failed to get jetstream client", err) - } - consumer, err := js.CreateOrUpdateConsumer(ctx, event.StreamConfiguration.StreamName, consumerConfig) + consumer, err := p.js.CreateOrUpdateConsumer(ctx, event.StreamConfiguration.StreamName, consumerConfig) if err != nil { log.Error("creating or updating consumer", zap.Error(err)) return datasource.NewError(fmt.Sprintf(`failed to create or update consumer for stream "%s"`, event.StreamConfiguration.StreamName), err) @@ -140,16 +148,10 @@ func (p *Adapter) Subscribe(ctx context.Context, event SubscriptionEventConfigur return nil } - nc, err := p.client.GetClient() - if err != nil { - log.Error("getting nats client", zap.Error(err)) - return datasource.NewError("failed to get nats client", err) - } - msgChan := make(chan *nats.Msg) subscriptions := make([]*nats.Subscription, len(event.Subjects)) for i, subject := range event.Subjects { - subscription, err := nc.ChanSubscribe(subject, msgChan) + subscription, err := p.client.ChanSubscribe(subject, msgChan) if err != nil { log.Error("subscribing to NATS subject", zap.Error(err), zap.String("subscription_subject", subject)) return datasource.NewError(fmt.Sprintf(`failed to subscribe to NATS subject "%s"`, subject), err) @@ -201,15 +203,13 @@ func (p *Adapter) Publish(_ context.Context, event PublishAndRequestEventConfigu zap.String("subject", event.Subject), ) - log.Debug("publish", zap.ByteString("data", event.Data)) - - nc, err := p.client.GetClient() - if err != nil { - log.Error("getting nats client", zap.Error(err)) - return datasource.NewError("failed to get nats client", err) + if p.client == nil { + return datasource.NewError("nats client not initialized", nil) } - err = nc.Publish(event.Subject, event.Data) + log.Debug("publish", zap.ByteString("data", event.Data)) + + err := p.client.Publish(event.Subject, event.Data) if err != nil { log.Error("publish error", zap.Error(err)) return datasource.NewError(fmt.Sprintf("error publishing to NATS subject %s", event.Subject), err) @@ -225,15 +225,13 @@ func (p *Adapter) Request(ctx context.Context, event PublishAndRequestEventConfi zap.String("subject", event.Subject), ) - log.Debug("request", zap.ByteString("data", event.Data)) - - nc, err := p.client.GetClient() - if err != nil { - log.Error("getting nats client", zap.Error(err)) - return datasource.NewError("failed to get nats client", err) + if p.client == nil { + return datasource.NewError("nats client not initialized", nil) } - msg, err := nc.RequestWithContext(ctx, event.Subject, event.Data) + log.Debug("request", zap.ByteString("data", event.Data)) + + msg, err := p.client.RequestWithContext(ctx, event.Subject, event.Data) if err != nil { log.Error("request error", zap.Error(err)) return datasource.NewError(fmt.Sprintf("error requesting from NATS subject %s", event.Subject), err) @@ -249,21 +247,31 @@ func (p *Adapter) Request(ctx context.Context, event PublishAndRequestEventConfi } func (p *Adapter) flush(ctx context.Context) error { - nc, err := p.client.GetClient() + if p.client == nil { + return nil + } + return p.client.FlushWithContext(ctx) +} + +func (p *Adapter) Startup(ctx context.Context) (err error) { + p.client, err = nats.Connect(p.url, p.opts...) + if err != nil { + return err + } + p.js, err = jetstream.New(p.client) if err != nil { return err } - return nc.FlushWithContext(ctx) + return nil } func (p *Adapter) Shutdown(ctx context.Context) error { - nc, err := p.client.GetClient() - if err != nil { - return nil // Already disconnected or failed to connect + if p.client == nil { + return nil } - if nc.IsClosed() { - return nil + if p.client.IsClosed() { + return nil // Already disconnected or failed to connect } var shutdownErr error @@ -273,7 +281,7 @@ func (p *Adapter) Shutdown(ctx context.Context) error { shutdownErr = errors.Join(shutdownErr, fErr) } - drainErr := nc.Drain() + drainErr := p.client.Drain() if drainErr != nil { shutdownErr = errors.Join(shutdownErr, drainErr) } @@ -293,14 +301,13 @@ func NewAdapter(ctx context.Context, logger *zap.Logger, url string, opts []nats logger = zap.NewNop() } - client := NewLazyClient(url, opts...) - return &Adapter{ ctx: ctx, - client: client, logger: logger.With(zap.String("pubsub", "nats")), closeWg: sync.WaitGroup{}, hostName: hostName, routerListenAddr: routerListenAddr, + url: url, + opts: opts, }, nil } diff --git a/router/pkg/pubsub/nats/engine_datasource_test.go b/router/pkg/pubsub/nats/engine_datasource_test.go index 4fb1ae767d..4a4dfdd20a 100644 --- a/router/pkg/pubsub/nats/engine_datasource_test.go +++ b/router/pkg/pubsub/nats/engine_datasource_test.go @@ -15,31 +15,6 @@ import ( "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/resolve" ) -// EngineDataSourceMockAdapter is a mock implementation of AdapterInterface for testing -type EngineDataSourceMockAdapter struct { - mock.Mock -} - -func (m *EngineDataSourceMockAdapter) Subscribe(ctx context.Context, event SubscriptionEventConfiguration, updater resolve.SubscriptionUpdater) error { - args := m.Called(ctx, event, updater) - return args.Error(0) -} - -func (m *EngineDataSourceMockAdapter) Publish(ctx context.Context, event PublishAndRequestEventConfiguration) error { - args := m.Called(ctx, event) - return args.Error(0) -} - -func (m *EngineDataSourceMockAdapter) Request(ctx context.Context, event PublishAndRequestEventConfiguration, w io.Writer) error { - args := m.Called(ctx, event, w) - return args.Error(0) -} - -func (m *EngineDataSourceMockAdapter) Shutdown(ctx context.Context) error { - args := m.Called(ctx) - return args.Error(0) -} - // MockSubscriptionUpdater implements resolve.SubscriptionUpdater type MockSubscriptionUpdater struct { mock.Mock @@ -150,7 +125,7 @@ func TestSubscriptionSource_UniqueRequestID(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { source := &SubscriptionSource{ - pubSub: &EngineDataSourceMockAdapter{}, + pubSub: &mockAdapter{}, } ctx := &resolve.Context{} input := []byte(tt.input) @@ -177,13 +152,13 @@ func TestSubscriptionSource_Start(t *testing.T) { tests := []struct { name string input string - mockSetup func(*EngineDataSourceMockAdapter) + mockSetup func(*mockAdapter) expectError bool }{ { name: "successful subscription", input: `{"subjects":["subject1", "subject2"], "providerId":"test-provider"}`, - mockSetup: func(m *EngineDataSourceMockAdapter) { + mockSetup: func(m *mockAdapter) { m.On("Subscribe", mock.Anything, SubscriptionEventConfiguration{ ProviderID: "test-provider", Subjects: []string{"subject1", "subject2"}, @@ -194,7 +169,7 @@ func TestSubscriptionSource_Start(t *testing.T) { { name: "adapter returns error", input: `{"subjects":["subject1"], "providerId":"test-provider"}`, - mockSetup: func(m *EngineDataSourceMockAdapter) { + mockSetup: func(m *mockAdapter) { m.On("Subscribe", mock.Anything, SubscriptionEventConfiguration{ ProviderID: "test-provider", Subjects: []string{"subject1"}, @@ -205,14 +180,14 @@ func TestSubscriptionSource_Start(t *testing.T) { { name: "invalid input json", input: `{"invalid json":`, - mockSetup: func(m *EngineDataSourceMockAdapter) {}, + mockSetup: func(m *mockAdapter) {}, expectError: true, }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - mockAdapter := new(EngineDataSourceMockAdapter) + mockAdapter := new(mockAdapter) tt.mockSetup(mockAdapter) source := &SubscriptionSource{ @@ -247,7 +222,7 @@ func TestNatsPublishDataSource_Load(t *testing.T) { tests := []struct { name string input string - mockSetup func(*EngineDataSourceMockAdapter) + mockSetup func(*mockAdapter) expectError bool expectedOutput string expectPublished bool @@ -255,7 +230,7 @@ func TestNatsPublishDataSource_Load(t *testing.T) { { name: "successful publish", input: `{"subject":"test-subject", "data":{"message":"hello"}, "providerId":"test-provider"}`, - mockSetup: func(m *EngineDataSourceMockAdapter) { + mockSetup: func(m *mockAdapter) { m.On("Publish", mock.Anything, mock.MatchedBy(func(event PublishAndRequestEventConfiguration) bool { return event.ProviderID == "test-provider" && event.Subject == "test-subject" && @@ -269,7 +244,7 @@ func TestNatsPublishDataSource_Load(t *testing.T) { { name: "publish error", input: `{"subject":"test-subject", "data":{"message":"hello"}, "providerId":"test-provider"}`, - mockSetup: func(m *EngineDataSourceMockAdapter) { + mockSetup: func(m *mockAdapter) { m.On("Publish", mock.Anything, mock.Anything).Return(errors.New("publish error")) }, expectError: false, // The Load method doesn't return the publish error directly @@ -279,7 +254,7 @@ func TestNatsPublishDataSource_Load(t *testing.T) { { name: "invalid input json", input: `{"invalid json":`, - mockSetup: func(m *EngineDataSourceMockAdapter) {}, + mockSetup: func(m *mockAdapter) {}, expectError: true, expectPublished: false, }, @@ -287,7 +262,7 @@ func TestNatsPublishDataSource_Load(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - mockAdapter := new(EngineDataSourceMockAdapter) + mockAdapter := new(mockAdapter) tt.mockSetup(mockAdapter) dataSource := &NatsPublishDataSource{ @@ -326,14 +301,14 @@ func TestNatsRequestDataSource_Load(t *testing.T) { tests := []struct { name string input string - mockSetup func(*EngineDataSourceMockAdapter) + mockSetup func(*mockAdapter) expectError bool expectedOutput string }{ { name: "successful request", input: `{"subject":"test-subject", "data":{"message":"hello"}, "providerId":"test-provider"}`, - mockSetup: func(m *EngineDataSourceMockAdapter) { + mockSetup: func(m *mockAdapter) { m.On("Request", mock.Anything, mock.MatchedBy(func(event PublishAndRequestEventConfiguration) bool { return event.ProviderID == "test-provider" && event.Subject == "test-subject" && @@ -350,7 +325,7 @@ func TestNatsRequestDataSource_Load(t *testing.T) { { name: "request error", input: `{"subject":"test-subject", "data":{"message":"hello"}, "providerId":"test-provider"}`, - mockSetup: func(m *EngineDataSourceMockAdapter) { + mockSetup: func(m *mockAdapter) { m.On("Request", mock.Anything, mock.Anything, mock.Anything).Return(errors.New("request error")) }, expectError: true, @@ -359,7 +334,7 @@ func TestNatsRequestDataSource_Load(t *testing.T) { { name: "invalid input json", input: `{"invalid json":`, - mockSetup: func(m *EngineDataSourceMockAdapter) {}, + mockSetup: func(m *mockAdapter) {}, expectError: true, expectedOutput: "", }, @@ -367,7 +342,7 @@ func TestNatsRequestDataSource_Load(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - mockAdapter := new(EngineDataSourceMockAdapter) + mockAdapter := new(mockAdapter) tt.mockSetup(mockAdapter) dataSource := &NatsRequestDataSource{ diff --git a/router/pkg/pubsub/nats/lazy_client.go b/router/pkg/pubsub/nats/lazy_client.go deleted file mode 100644 index a5abc82bda..0000000000 --- a/router/pkg/pubsub/nats/lazy_client.go +++ /dev/null @@ -1,53 +0,0 @@ -package nats - -import ( - "sync" - - "github.com/nats-io/nats.go" - "github.com/nats-io/nats.go/jetstream" -) - -type LazyClient struct { - once sync.Once - url string - opts []nats.Option - client *nats.Conn - js jetstream.JetStream - err error -} - -func (c *LazyClient) Connect(opts ...nats.Option) error { - c.once.Do(func() { - c.client, c.err = nats.Connect(c.url, opts...) - if c.err != nil { - return - } - c.js, c.err = jetstream.New(c.client) - }) - return c.err -} - -func (c *LazyClient) GetClient() (*nats.Conn, error) { - if c.client == nil { - if err := c.Connect(c.opts...); err != nil { - return nil, err - } - } - return c.client, c.err -} - -func (c *LazyClient) GetJetStream() (jetstream.JetStream, error) { - if c.js == nil { - if err := c.Connect(c.opts...); err != nil { - return nil, err - } - } - return c.js, c.err -} - -func NewLazyClient(url string, opts ...nats.Option) *LazyClient { - return &LazyClient{ - url: url, - opts: opts, - } -} diff --git a/router/pkg/pubsub/nats/lazy_client_test.go b/router/pkg/pubsub/nats/lazy_client_test.go deleted file mode 100644 index 03b63b27a8..0000000000 --- a/router/pkg/pubsub/nats/lazy_client_test.go +++ /dev/null @@ -1,413 +0,0 @@ -package nats - -import ( - "errors" - "sync" - "testing" - "time" - - "github.com/nats-io/nats.go" - "github.com/nats-io/nats.go/jetstream" - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" -) - -// Define interfaces for our testing -type natsConnector interface { - Connect(url string, opts ...nats.Option) (*nats.Conn, error) -} - -type jetStreamCreator interface { - Create(nc *nats.Conn) (jetstream.JetStream, error) -} - -// mockNatsConnector implements natsConnector for testing -type mockNatsConnector struct { - mockConn *nats.Conn - mockErr error - callCount int - lastOpts []nats.Option -} - -func (m *mockNatsConnector) Connect(url string, opts ...nats.Option) (*nats.Conn, error) { - m.callCount++ - m.lastOpts = opts - return m.mockConn, m.mockErr -} - -// threadSafeConnector is a specialized version for thread safety testing -type threadSafeConnector struct { - mockConn *nats.Conn - mockErr error - callCount int - countMutex sync.Mutex - sleepTime time.Duration -} - -func (t *threadSafeConnector) Connect(url string, opts ...nats.Option) (*nats.Conn, error) { - // Simulate a slow connection - time.Sleep(t.sleepTime) - t.countMutex.Lock() - t.callCount++ - t.countMutex.Unlock() - return t.mockConn, t.mockErr -} - -// mockJetStreamCreator implements jetStreamCreator for testing -type mockJetStreamCreator struct { - mockJS jetstream.JetStream - mockErr error - callCount int -} - -func (m *mockJetStreamCreator) Create(nc *nats.Conn) (jetstream.JetStream, error) { - m.callCount++ - return m.mockJS, m.mockErr -} - -// testLazyClient is a wrapper for LazyClient that allows us to inject mocks -type testLazyClient struct { - *LazyClient - connector natsConnector - jetStreamCreator jetStreamCreator -} - -// newTestLazyClient creates a LazyClient with mocked dependencies -func newTestLazyClient(url string, connector natsConnector, creator jetStreamCreator, opts ...nats.Option) *testLazyClient { - c := &testLazyClient{ - LazyClient: NewLazyClient(url, opts...), - connector: connector, - jetStreamCreator: creator, - } - - return c -} - -// Connect overrides LazyClient.Connect to use our mocks -func (c *testLazyClient) Connect(opts ...nats.Option) error { - c.once.Do(func() { - // If no options are provided, use the ones stored during initialization - optionsToUse := opts - if len(optionsToUse) == 0 { - optionsToUse = c.opts - } - c.client, c.err = c.connector.Connect(c.url, optionsToUse...) - if c.err != nil { - return - } - c.js, c.err = c.jetStreamCreator.Create(c.client) - }) - return c.err -} - -// GetClient overrides LazyClient.GetClient to ensure we use our Connect method -func (c *testLazyClient) GetClient() (*nats.Conn, error) { - if c.client == nil { - if err := c.Connect(c.opts...); err != nil { - return nil, err - } - } - return c.client, c.err -} - -// GetJetStream overrides LazyClient.GetJetStream to ensure we use our Connect method -func (c *testLazyClient) GetJetStream() (jetstream.JetStream, error) { - if c.js == nil { - if err := c.Connect(c.opts...); err != nil { - return nil, err - } - } - return c.js, c.err -} - -func TestNewLazyClient(t *testing.T) { - url := "nats://localhost:4222" - opts := []nats.Option{nats.Name("test-client")} - - client := NewLazyClient(url, opts...) - - assert.Equal(t, url, client.url) - assert.Equal(t, opts, client.opts) - assert.Nil(t, client.client) - assert.Nil(t, client.js) - assert.Nil(t, client.err) -} - -func TestLazyClient_Connect_Success(t *testing.T) { - // Create mocks - connector := &mockNatsConnector{ - mockConn: &nats.Conn{}, - } - - jsCreator := &mockJetStreamCreator{ - mockJS: &struct{ jetstream.JetStream }{}, - } - - // Create test client - client := newTestLazyClient("nats://localhost:4222", connector, jsCreator) - - // First call should connect - err := client.Connect() - require.NoError(t, err) - assert.Equal(t, 1, connector.callCount, "Connect should be called once") - assert.Equal(t, 1, jsCreator.callCount, "JetStream.Create should be called once") - assert.Equal(t, connector.mockConn, client.client) - assert.Equal(t, jsCreator.mockJS, client.js) - - // Second call should not connect again due to sync.Once - err = client.Connect() - require.NoError(t, err) - assert.Equal(t, 1, connector.callCount, "Connect should still be called only once") - assert.Equal(t, 1, jsCreator.callCount, "JetStream.Create should still be called only once") -} - -func TestLazyClient_Connect_Error(t *testing.T) { - // Create mocks with connection error - connector := &mockNatsConnector{ - mockErr: errors.New("mock connect error"), - } - - jsCreator := &mockJetStreamCreator{ - mockJS: &struct{ jetstream.JetStream }{}, - } - - // Create test client - client := newTestLazyClient("nats://localhost:4222", connector, jsCreator) - - // Connect should return an error - err := client.Connect() - require.Error(t, err) - assert.Equal(t, 1, connector.callCount, "Connect should be called once") - assert.Equal(t, 0, jsCreator.callCount, "JetStream.Create should not be called") - assert.Nil(t, client.client) - assert.Nil(t, client.js) - assert.NotNil(t, client.err) - assert.Equal(t, "mock connect error", client.err.Error()) - - // Second call should not connect again and return the same error - connector.mockErr = errors.New("different error") // Should be ignored due to sync.Once - err2 := client.Connect() - require.Error(t, err2) - assert.Equal(t, err, err2, "Should return the same error") - assert.Equal(t, 1, connector.callCount, "Connect should still be called only once") - assert.Equal(t, 0, jsCreator.callCount, "JetStream.Create should still not be called") -} - -func TestLazyClient_Connect_JetStreamError(t *testing.T) { - // Create mocks with jetstream error - connector := &mockNatsConnector{ - mockConn: &nats.Conn{}, - } - - jsCreator := &mockJetStreamCreator{ - mockErr: errors.New("mock jetstream error"), - } - - // Create test client - client := newTestLazyClient("nats://localhost:4222", connector, jsCreator) - - // Connect should return the jetstream error - err := client.Connect() - require.Error(t, err) - assert.Equal(t, 1, connector.callCount, "Connect should be called once") - assert.Equal(t, 1, jsCreator.callCount, "JetStream.Create should be called once") - assert.NotNil(t, client.client) // NATS connection was successful - assert.Nil(t, client.js) // JetStream failed - assert.NotNil(t, client.err) - assert.Equal(t, "mock jetstream error", client.err.Error()) - - // Second call should not connect again and return the same error - jsCreator.mockErr = errors.New("different error") // Should be ignored due to sync.Once - err2 := client.Connect() - require.Error(t, err2) - assert.Equal(t, err, err2, "Should return the same error") - assert.Equal(t, 1, connector.callCount, "Connect should still be called only once") - assert.Equal(t, 1, jsCreator.callCount, "JetStream.Create should still be called only once") -} - -func TestLazyClient_GetClient(t *testing.T) { - t.Run("with successful connection", func(t *testing.T) { - // Create mocks - connector := &mockNatsConnector{ - mockConn: &nats.Conn{}, - } - - jsCreator := &mockJetStreamCreator{ - mockJS: &struct{ jetstream.JetStream }{}, - } - - // Create test client - client := newTestLazyClient("nats://localhost:4222", connector, jsCreator) - - // First call to GetClient should connect - conn, err := client.GetClient() - require.NoError(t, err) - assert.Equal(t, connector.mockConn, conn) - assert.Equal(t, 1, connector.callCount, "Connect should be called once") - - // Second call should not connect again - conn2, err := client.GetClient() - require.NoError(t, err) - assert.Equal(t, conn, conn2) - assert.Equal(t, 1, connector.callCount, "Connect should still be called only once") - }) - - t.Run("with failed connection", func(t *testing.T) { - // Create mocks with connection error - connector := &mockNatsConnector{ - mockErr: errors.New("mock connect error"), - } - - jsCreator := &mockJetStreamCreator{} - - // Create test client - client := newTestLazyClient("nats://localhost:4222", connector, jsCreator) - - // GetClient should attempt to connect and return an error - conn, err := client.GetClient() - require.Error(t, err) - assert.Nil(t, conn) - assert.Equal(t, 1, connector.callCount, "Connect should be called once") - assert.Equal(t, 0, jsCreator.callCount, "JetStream.Create should not be called") - assert.Equal(t, "mock connect error", err.Error()) - }) -} - -func TestLazyClient_GetJetStream(t *testing.T) { - t.Run("with successful connection", func(t *testing.T) { - // Create mocks - connector := &mockNatsConnector{ - mockConn: &nats.Conn{}, - } - - jsCreator := &mockJetStreamCreator{ - mockJS: &struct{ jetstream.JetStream }{}, - } - - // Create test client - client := newTestLazyClient("nats://localhost:4222", connector, jsCreator) - - // First call to GetJetStream should connect - js, err := client.GetJetStream() - require.NoError(t, err) - assert.Equal(t, jsCreator.mockJS, js) - assert.Equal(t, 1, connector.callCount, "Connect should be called once") - assert.Equal(t, 1, jsCreator.callCount, "JetStream.Create should be called once") - - // Second call should not connect again - js2, err := client.GetJetStream() - require.NoError(t, err) - assert.Equal(t, js, js2) - assert.Equal(t, 1, connector.callCount, "Connect should still be called only once") - assert.Equal(t, 1, jsCreator.callCount, "JetStream.Create should still be called only once") - }) - - t.Run("with failed connection", func(t *testing.T) { - // Create mocks with connection error - connector := &mockNatsConnector{ - mockErr: errors.New("mock connect error"), - } - - jsCreator := &mockJetStreamCreator{} - - // Create test client - client := newTestLazyClient("nats://localhost:4222", connector, jsCreator) - - // GetJetStream should attempt to connect and return an error - js, err := client.GetJetStream() - require.Error(t, err) - assert.Nil(t, js) - assert.Equal(t, 1, connector.callCount, "Connect should be called once") - assert.Equal(t, 0, jsCreator.callCount, "JetStream.Create should not be called") - assert.Equal(t, "mock connect error", err.Error()) - }) - - t.Run("with jetstream creation failure", func(t *testing.T) { - // Create mocks with jetstream error - connector := &mockNatsConnector{ - mockConn: &nats.Conn{}, - } - - jsCreator := &mockJetStreamCreator{ - mockErr: errors.New("mock jetstream error"), - } - - // Create test client - client := newTestLazyClient("nats://localhost:4222", connector, jsCreator) - - // GetJetStream should create the connection but fail on jetstream - js, err := client.GetJetStream() - require.Error(t, err) - assert.Nil(t, js) - assert.Equal(t, 1, connector.callCount, "Connect should be called once") - assert.Equal(t, 1, jsCreator.callCount, "JetStream.Create should be called once") - assert.Equal(t, "mock jetstream error", err.Error()) - }) -} - -func TestLazyClient_WithOptions(t *testing.T) { - // Create mocks that will track options - connector := &mockNatsConnector{ - mockConn: &nats.Conn{}, - } - - jsCreator := &mockJetStreamCreator{ - mockJS: &struct{ jetstream.JetStream }{}, - } - - // Create options that we can verify are passed to Connect - option1 := nats.Name("test-client") - option2 := nats.NoEcho() - - // Create test client with options - client := newTestLazyClient("nats://localhost:4222", connector, jsCreator, option1, option2) - - // Call Connect to trigger the connection - err := client.Connect() - require.NoError(t, err) - - // Verify that the options were passed - they're stored in connector.lastOpts - require.Len(t, connector.lastOpts, 2, "Options should be passed to Connect") - - // Now we can call GetClient() and verify it reuses the connection - prevCallCount := connector.callCount - _, err = client.GetClient() - require.NoError(t, err) - - // Verify Connect wasn't called again - assert.Equal(t, prevCallCount, connector.callCount, "GetClient should reuse the existing connection") -} - -func TestLazyClient_ThreadSafety(t *testing.T) { - // This test checks that LazyClient's sync.Once protection works as expected - // by calling Connect from multiple goroutines simultaneously - - // Create a thread-safe connector that simulates slow connections - connector := &threadSafeConnector{ - mockConn: &nats.Conn{}, - sleepTime: 10 * time.Millisecond, - } - - jsCreator := &mockJetStreamCreator{ - mockJS: &struct{ jetstream.JetStream }{}, - } - - // Create test client - client := newTestLazyClient("nats://localhost:4222", connector, jsCreator) - - // Launch multiple goroutines that call Connect simultaneously - var wg sync.WaitGroup - for i := 0; i < 10; i++ { - wg.Add(1) - go func() { - defer wg.Done() - err := client.Connect() - assert.NoError(t, err) - }() - } - - wg.Wait() - - // Connect should have been called exactly once - assert.Equal(t, 1, connector.callCount, "Connect should have been called exactly once") -} diff --git a/router/pkg/pubsub/nats/provider.go b/router/pkg/pubsub/nats/provider.go index eaa4c4d5a3..a4e9af1248 100644 --- a/router/pkg/pubsub/nats/provider.go +++ b/router/pkg/pubsub/nats/provider.go @@ -151,6 +151,11 @@ func GetProvider(ctx context.Context, in *nodev1.DataSourceConfiguration, dsMeta } func (c *PubSubProvider) Startup(ctx context.Context) error { + for _, provider := range c.Providers { + if err := provider.Startup(ctx); err != nil { + return err + } + } return nil } diff --git a/router/pkg/pubsub/nats/provider_test.go b/router/pkg/pubsub/nats/provider_test.go index fd2255bf60..9a4ba9f03a 100644 --- a/router/pkg/pubsub/nats/provider_test.go +++ b/router/pkg/pubsub/nats/provider_test.go @@ -36,6 +36,11 @@ func (m *mockAdapter) Request(ctx context.Context, event PublishAndRequestEventC return args.Error(0) } +func (m *mockAdapter) Startup(ctx context.Context) error { + args := m.Called(ctx) + return args.Error(0) +} + func (m *mockAdapter) Shutdown(ctx context.Context) error { args := m.Called(ctx) return args.Error(0) diff --git a/router/pkg/pubsub/nats/pubsub_datasource_test.go b/router/pkg/pubsub/nats/pubsub_datasource_test.go index 43fb75fef8..d14a8721a6 100644 --- a/router/pkg/pubsub/nats/pubsub_datasource_test.go +++ b/router/pkg/pubsub/nats/pubsub_datasource_test.go @@ -11,37 +11,8 @@ import ( "github.com/stretchr/testify/require" nodev1 "github.com/wundergraph/cosmo/router/gen/proto/wg/cosmo/node/v1" "github.com/wundergraph/cosmo/router/pkg/pubsub/datasource" - "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/resolve" ) -// MockAdapter mocks the required functionality from the Adapter for testing -type MockAdapter struct { - mock.Mock -} - -// Ensure MockAdapter implements AdapterInterface -var _ AdapterInterface = (*MockAdapter)(nil) - -func (m *MockAdapter) Subscribe(ctx context.Context, event SubscriptionEventConfiguration, updater resolve.SubscriptionUpdater) error { - args := m.Called(ctx, event, updater) - return args.Error(0) -} - -func (m *MockAdapter) Publish(ctx context.Context, event PublishAndRequestEventConfiguration) error { - args := m.Called(ctx, event) - return args.Error(0) -} - -func (m *MockAdapter) Request(ctx context.Context, event PublishAndRequestEventConfiguration, w io.Writer) error { - args := m.Called(ctx, event, w) - return args.Error(0) -} - -func (m *MockAdapter) Shutdown(ctx context.Context) error { - args := m.Called(ctx) - return args.Error(0) -} - func TestNatsPubSubDataSource(t *testing.T) { // Create event configuration with required fields engineEventConfig := &nodev1.EngineEventConfiguration{ @@ -82,7 +53,7 @@ func TestPubSubDataSourceWithMockAdapter(t *testing.T) { } // Create mock adapter - mockAdapter := new(MockAdapter) + mockAdapter := new(mockAdapter) // Configure mock expectations for Publish mockAdapter.On("Publish", mock.Anything, mock.MatchedBy(func(event PublishAndRequestEventConfiguration) bool { @@ -128,7 +99,7 @@ func TestPubSubDataSource_GetResolveDataSource_WrongType(t *testing.T) { } // Create mock adapter - mockAdapter := new(MockAdapter) + mockAdapter := new(mockAdapter) // Create the data source with mock adapter pubsub := &PubSubDataSource{ @@ -279,7 +250,7 @@ func TestPubSubDataSource_RequestDataSource(t *testing.T) { } // Create mock adapter - mockAdapter := new(MockAdapter) + mockAdapter := new(mockAdapter) // Configure mock expectations for Request mockAdapter.On("Request", mock.Anything, mock.MatchedBy(func(event PublishAndRequestEventConfiguration) bool { From 0a6e8a01baede997824cc32d027d5fc3c5a7cc1d Mon Sep 17 00:00:00 2001 From: Alessandro Pagnin Date: Mon, 14 Apr 2025 11:33:15 +0200 Subject: [PATCH 025/126] refactor: enhance NATS adapter with flush timeout and update test expectations for log entries --- router-tests/events/nats_events_test.go | 2 +- router-tests/structured_logging_test.go | 6 ++++-- router-tests/testenv/testenv.go | 4 ++++ router/core/factoryresolver.go | 3 ++- router/pkg/pubsub/nats/adapter.go | 8 ++++++++ 5 files changed, 19 insertions(+), 4 deletions(-) diff --git a/router-tests/events/nats_events_test.go b/router-tests/events/nats_events_test.go index 46fbf310ad..a8d06e3b22 100644 --- a/router-tests/events/nats_events_test.go +++ b/router-tests/events/nats_events_test.go @@ -136,7 +136,7 @@ func TestNatsEvents(t *testing.T) { natsLogs := xEnv.Observer().FilterMessageSnippet("Nats").All() require.Len(t, natsLogs, 4) providerIDFields := xEnv.Observer().FilterField(zap.String("provider_id", "my-nats")).All() - require.Len(t, providerIDFields, 1) + require.Len(t, providerIDFields, 3) }) }) diff --git a/router-tests/structured_logging_test.go b/router-tests/structured_logging_test.go index b6213327ba..67c87d5199 100644 --- a/router-tests/structured_logging_test.go +++ b/router-tests/structured_logging_test.go @@ -164,11 +164,13 @@ func TestRouterStartLogs(t *testing.T) { }, }, func(t *testing.T, xEnv *testenv.Environment) { logEntries := xEnv.Observer().All() - require.Len(t, logEntries, 11) + require.Len(t, logEntries, 15) natsLogs := xEnv.Observer().FilterMessageSnippet("Nats Event source enabled").All() require.Len(t, natsLogs, 4) + natsConnectedLogs := xEnv.Observer().FilterMessageSnippet("NATS connection established").All() + require.Len(t, natsConnectedLogs, 4) providerIDFields := xEnv.Observer().FilterField(zap.String("provider_id", "default")).All() - require.Len(t, providerIDFields, 1) + require.Len(t, providerIDFields, 3) kafkaLogs := xEnv.Observer().FilterMessageSnippet("Kafka Event source enabled").All() require.Len(t, kafkaLogs, 2) playgroundLog := xEnv.Observer().FilterMessage("Serving GraphQL playground") diff --git a/router-tests/testenv/testenv.go b/router-tests/testenv/testenv.go index f0a2003ba5..f974863b24 100644 --- a/router-tests/testenv/testenv.go +++ b/router-tests/testenv/testenv.go @@ -2098,6 +2098,10 @@ func subgraphOptions(ctx context.Context, t testing.TB, logger *zap.Logger, nats for _, sourceName := range demoNatsProviders { adapter, err := pubsubNats.NewAdapter(ctx, logger, natsData.Params[0].Url, natsData.Params[0].Opts, "hostname", "listenaddr") require.NoError(t, err) + require.NoError(t, adapter.Startup(ctx)) + t.Cleanup(func() { + require.NoError(t, adapter.Shutdown(context.Background())) + }) natsPubSubByProviderID[sourceName] = adapter } diff --git a/router/core/factoryresolver.go b/router/core/factoryresolver.go index 6b684ed733..262751de01 100644 --- a/router/core/factoryresolver.go +++ b/router/core/factoryresolver.go @@ -420,7 +420,8 @@ func (l *Loader) Load(engineConfig *nodev1.EngineConfiguration, subgraphs []*nod var providers []datasource.PubSubProvider dsMeta := l.dataSourceMetaData(in) - for _, providerFactory := range pubsub.GetProviderFactories() { + providersFactories := pubsub.GetProviderFactories() + for _, providerFactory := range providersFactories { provider, err := providerFactory( l.ctx, in, diff --git a/router/pkg/pubsub/nats/adapter.go b/router/pkg/pubsub/nats/adapter.go index 34a646b158..a355cb676a 100644 --- a/router/pkg/pubsub/nats/adapter.go +++ b/router/pkg/pubsub/nats/adapter.go @@ -41,6 +41,7 @@ type Adapter struct { routerListenAddr string url string opts []nats.Option + flushTimeout time.Duration } // getInstanceIdentifier returns an identifier for the current instance. @@ -250,6 +251,12 @@ func (p *Adapter) flush(ctx context.Context) error { if p.client == nil { return nil } + _, ok := ctx.Deadline() + if !ok { + var cancel context.CancelFunc + ctx, cancel = context.WithTimeout(ctx, p.flushTimeout) + defer cancel() + } return p.client.FlushWithContext(ctx) } @@ -309,5 +316,6 @@ func NewAdapter(ctx context.Context, logger *zap.Logger, url string, opts []nats routerListenAddr: routerListenAddr, url: url, opts: opts, + flushTimeout: 10 * time.Second, }, nil } From 3aeba040957ba9e981e1807466a8e910a628bd1d Mon Sep 17 00:00:00 2001 From: Alessandro Pagnin Date: Mon, 14 Apr 2025 11:55:21 +0200 Subject: [PATCH 026/126] test: log unexpected errors during WebSocket message read in tests --- router-tests/websocket_test.go | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/router-tests/websocket_test.go b/router-tests/websocket_test.go index b47d7a756f..b6a1b59066 100644 --- a/router-tests/websocket_test.go +++ b/router-tests/websocket_test.go @@ -2160,6 +2160,9 @@ func expectConnectAndReadCurrentTime(t *testing.T, xEnv *testenv.Environment) { err = testenv.WSReadJSON(t, conn, &msg) require.NoError(t, err) require.Equal(t, "1", msg.ID) + if msg.Type == "error" { + t.Logf("unexpected error on read: %s", string(msg.Payload)) + } require.Equal(t, "next", msg.Type) err = json.Unmarshal(msg.Payload, &payload) require.NoError(t, err) @@ -2169,6 +2172,9 @@ func expectConnectAndReadCurrentTime(t *testing.T, xEnv *testenv.Environment) { err = testenv.WSReadJSON(t, conn, &msg) require.NoError(t, err) require.Equal(t, "1", msg.ID) + if msg.Type == "error" { + t.Logf("unexpected error on read: %s", string(msg.Payload)) + } require.Equal(t, "next", msg.Type) err = json.Unmarshal(msg.Payload, &payload) require.NoError(t, err) @@ -2189,6 +2195,9 @@ func expectConnectAndReadCurrentTime(t *testing.T, xEnv *testenv.Environment) { err = testenv.WSReadJSON(t, conn, &complete) require.NoError(t, err) require.Equal(t, "1", complete.ID) + if complete.Type == "error" { + t.Logf("unexpected error on read: %s", string(complete.Payload)) + } require.Equal(t, "complete", complete.Type) err = conn.SetReadDeadline(time.Now().Add(1 * time.Second)) From f5e8e907268d3849aab0eaccc91ab5e3e318d221 Mon Sep 17 00:00:00 2001 From: Alessandro Pagnin Date: Mon, 14 Apr 2025 12:38:29 +0200 Subject: [PATCH 027/126] feat: add custom JSON unmarshalling for WebSocketMessage to improve error handling --- router-tests/testenv/testenv.go | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/router-tests/testenv/testenv.go b/router-tests/testenv/testenv.go index f974863b24..b9a0e6d8da 100644 --- a/router-tests/testenv/testenv.go +++ b/router-tests/testenv/testenv.go @@ -1545,6 +1545,18 @@ type WebSocketMessage struct { Payload json.RawMessage `json:"payload,omitempty"` } +func (t *WebSocketMessage) UnmarshalJSON(data []byte) error { + err := json.Unmarshal(data, (*struct { + ID string `json:"id,omitempty"` + Type string `json:"type"` + Payload json.RawMessage `json:"payload,omitempty"` + })(t)) + if err != nil { + return fmt.Errorf("failed to unmarshal WebSocketMessage: %w (data: %s)", err, string(data)) + } + return nil +} + type GraphQLResponse struct { Data json.RawMessage `json:"data,omitempty"` Errors []GraphQLError `json:"errors,omitempty"` From ad96e3dc6d2a4735190358cfe57b1382790003f8 Mon Sep 17 00:00:00 2001 From: Alessandro Pagnin Date: Tue, 15 Apr 2025 09:31:23 +0200 Subject: [PATCH 028/126] refactor: replace custom JSON unmarshalling in WebSocketMessage with standard unmarshalling and improve error logging during message reads --- router-tests/testenv/testenv.go | 31 ++++++++++++++++--------------- 1 file changed, 16 insertions(+), 15 deletions(-) diff --git a/router-tests/testenv/testenv.go b/router-tests/testenv/testenv.go index b9a0e6d8da..4664bba11a 100644 --- a/router-tests/testenv/testenv.go +++ b/router-tests/testenv/testenv.go @@ -1545,18 +1545,6 @@ type WebSocketMessage struct { Payload json.RawMessage `json:"payload,omitempty"` } -func (t *WebSocketMessage) UnmarshalJSON(data []byte) error { - err := json.Unmarshal(data, (*struct { - ID string `json:"id,omitempty"` - Type string `json:"type"` - Payload json.RawMessage `json:"payload,omitempty"` - })(t)) - if err != nil { - return fmt.Errorf("failed to unmarshal WebSocketMessage: %w (data: %s)", err, string(data)) - } - return nil -} - type GraphQLResponse struct { Data json.RawMessage `json:"data,omitempty"` Errors []GraphQLError `json:"errors,omitempty"` @@ -1624,8 +1612,14 @@ func (e *Environment) InitGraphQLWebSocketConnection(header http.Header, query u }) require.NoError(e.t, err) var ack WebSocketMessage - err = conn.ReadJSON(&ack) - require.NoError(e.t, err) + _, payload, err := conn.ReadMessage() + if err != nil { + require.NoError(e.t, err) + } + if err := json.Unmarshal(payload, &ack); err != nil { + e.t.Logf("Failed to decode WebSocket message. Raw payload: %s", string(payload)) + require.NoError(e.t, err) + } require.Equal(e.t, "connection_ack", ack.Type) return conn } @@ -1986,7 +1980,14 @@ func WSReadJSON(t testing.TB, conn *websocket.Conn, v interface{}) (err error) { return err } - err = conn.ReadJSON(v) + _, payload, err := conn.ReadMessage() + if err != nil { + require.NoError(t, err) + } + if err := json.Unmarshal(payload, &v); err != nil { + t.Logf("Failed to decode WebSocket message. Raw payload: %s", string(payload)) + require.NoError(t, err) + } // Reset the deadline to prevent future operations from timing out if resetErr := conn.SetReadDeadline(time.Time{}); resetErr != nil { From 85adb377bb1e5d49e5073e49d239dd929102a2e2 Mon Sep 17 00:00:00 2001 From: Alessandro Pagnin Date: Wed, 16 Apr 2025 08:40:44 +0200 Subject: [PATCH 029/126] fix: adapter base interface --- router/pkg/pubsub/README.md | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/router/pkg/pubsub/README.md b/router/pkg/pubsub/README.md index 76e9efcbc2..6862d311f8 100644 --- a/router/pkg/pubsub/README.md +++ b/router/pkg/pubsub/README.md @@ -30,6 +30,8 @@ The Adapter contains the logic that is actually calling the provider, usually it type AdapterInterface interface { Subscribe(ctx context.Context, event SubscriptionEventConfiguration, updater resolve.SubscriptionUpdater) error Publish(ctx context.Context, event PublishEventConfiguration) error + Startup(ctx context.Context) error + Shutdown(ctx context.Context) error } ``` @@ -69,4 +71,17 @@ To complete the `PubSubDataSource` implementation you should also add the engine So you have to implement the SubscriptionDataSource, a structure that implements all the methods needed by the interface `resolve.SubscriptionDataSource`, like the [kafka implementation](./kafka/engine_datasource.go). -And also, you have to implement the DataSource, a structure that implements all the methods needed by the interface `resolve.DataSource`, like `PublishDataSource` in the [kafka implementation](./kafka/pubsub_datasource.go). \ No newline at end of file +And also, you have to implement the DataSource, a structure that implements all the methods needed by the interface `resolve.DataSource`, like `PublishDataSource` in the [kafka implementation](./kafka/pubsub_datasource.go). + +## How to use the new PubSub Provider + +After you have implemented all the above, you can use your PubSub Provider by adding the following to your router config: + +```yaml +pubsub: + providers: + - name: provider-name + type: new-provider +``` + +But to use it in the schema you will have to work in the [composition](../../../composition) folder. \ No newline at end of file From 1bb2dfd60b5fd0b3d1461468227f5115fc8eb87f Mon Sep 17 00:00:00 2001 From: Alessandro Pagnin Date: Wed, 16 Apr 2025 10:21:05 +0200 Subject: [PATCH 030/126] docs: update README for PubSub Provider usage section --- router/pkg/pubsub/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/router/pkg/pubsub/README.md b/router/pkg/pubsub/README.md index 6862d311f8..ebcc636424 100644 --- a/router/pkg/pubsub/README.md +++ b/router/pkg/pubsub/README.md @@ -73,7 +73,7 @@ So you have to implement the SubscriptionDataSource, a structure that implements And also, you have to implement the DataSource, a structure that implements all the methods needed by the interface `resolve.DataSource`, like `PublishDataSource` in the [kafka implementation](./kafka/pubsub_datasource.go). -## How to use the new PubSub Provider +# How to use the new PubSub Provider After you have implemented all the above, you can use your PubSub Provider by adding the following to your router config: From 43977a0dec1d0624fce940cc938a2e1bb2a99bd1 Mon Sep 17 00:00:00 2001 From: Alessandro Pagnin Date: Wed, 23 Apr 2025 08:56:17 +0200 Subject: [PATCH 031/126] refactor: remove unused EnginePubSubProviders struct and related import from graph_server.go --- router/core/graph_server.go | 6 ------ 1 file changed, 6 deletions(-) diff --git a/router/core/graph_server.go b/router/core/graph_server.go index c75a717b74..917f9088be 100644 --- a/router/core/graph_server.go +++ b/router/core/graph_server.go @@ -14,7 +14,6 @@ import ( "github.com/cespare/xxhash/v2" "github.com/wundergraph/cosmo/router/pkg/execution_config" rtrace "github.com/wundergraph/cosmo/router/pkg/trace" - "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/datasource/pubsub_datasource" otelmetric "go.opentelemetry.io/otel/metric" oteltrace "go.opentelemetry.io/otel/trace" @@ -61,11 +60,6 @@ type ( HealthChecks() health.Checker } - EnginePubSubProviders struct { - nats map[string]pubsub_datasource.NatsPubSub - kafka map[string]pubsub_datasource.KafkaPubSub - } - // graphServer is the swappable implementation of a Graph instance which is an HTTP mux with middlewares. // Everytime a schema is updated, the old graph server is shutdown and a new graph server is created. // For feature flags, a graphql server has multiple mux and is dynamically switched based on the feature flag header or cookie. From 13f8d33c7aa1e10aad63c4077df84aa7f49a5895 Mon Sep 17 00:00:00 2001 From: Alessandro Pagnin Date: Wed, 23 Apr 2025 09:22:42 +0200 Subject: [PATCH 032/126] refactor: update MoodHandler and NewSchema to include GetPubSubName parameter --- demo/pkg/subgraphs/mood/mood.go | 3 ++- demo/pkg/subgraphs/subgraphs.go | 4 ++-- router-tests/mcp_test.go | 2 ++ 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/demo/pkg/subgraphs/mood/mood.go b/demo/pkg/subgraphs/mood/mood.go index 8bce0d004b..efbc307be6 100644 --- a/demo/pkg/subgraphs/mood/mood.go +++ b/demo/pkg/subgraphs/mood/mood.go @@ -8,8 +8,9 @@ import ( "github.com/wundergraph/cosmo/demo/pkg/subgraphs/mood/subgraph/generated" ) -func NewSchema(natsPubSubByProviderID map[string]nats.AdapterInterface) graphql.ExecutableSchema { +func NewSchema(natsPubSubByProviderID map[string]nats.AdapterInterface, getPubSubName func(string) string) graphql.ExecutableSchema { return generated.NewExecutableSchema(generated.Config{Resolvers: &subgraph.Resolver{ NatsPubSubByProviderID: natsPubSubByProviderID, + GetPubSubName: getPubSubName, }}) } diff --git a/demo/pkg/subgraphs/subgraphs.go b/demo/pkg/subgraphs/subgraphs.go index c5e91ab034..a66199e643 100644 --- a/demo/pkg/subgraphs/subgraphs.go +++ b/demo/pkg/subgraphs/subgraphs.go @@ -194,7 +194,7 @@ func AvailabilityHandler(opts *SubgraphOptions) http.Handler { } func MoodHandler(opts *SubgraphOptions) http.Handler { - return subgraphHandler(mood.NewSchema(opts.NatsPubSubByProviderID)) + return subgraphHandler(mood.NewSchema(opts.NatsPubSubByProviderID, opts.GetPubSubName)) } func CountriesHandler(opts *SubgraphOptions) http.Handler { @@ -260,7 +260,7 @@ func New(ctx context.Context, config *Config) (*Subgraphs, error) { if srv := newServer("availability", config.EnableDebug, config.Ports.Availability, availability.NewSchema(natsPubSubByProviderID, config.GetPubSubName)); srv != nil { servers = append(servers, srv) } - if srv := newServer("mood", config.EnableDebug, config.Ports.Mood, mood.NewSchema(natsPubSubByProviderID)); srv != nil { + if srv := newServer("mood", config.EnableDebug, config.Ports.Mood, mood.NewSchema(natsPubSubByProviderID, config.GetPubSubName)); srv != nil { servers = append(servers, srv) } if srv := newServer("countries", config.EnableDebug, config.Ports.Countries, countries.NewSchema(natsPubSubByProviderID)); srv != nil { diff --git a/router-tests/mcp_test.go b/router-tests/mcp_test.go index 1fea3e2660..9a9e078b68 100644 --- a/router-tests/mcp_test.go +++ b/router-tests/mcp_test.go @@ -179,6 +179,7 @@ func TestMCP(t *testing.T) { t.Run("Execute Query", func(t *testing.T) { t.Run("Execute operation of type query with valid input", func(t *testing.T) { testenv.Run(t, &testenv.Config{ + EnableNats: true, MCP: config.MCPConfiguration{ Enabled: true, }, @@ -235,6 +236,7 @@ func TestMCP(t *testing.T) { t.Run("Execute Mutation", func(t *testing.T) { t.Run("Execute operation of type mutation with valid input", func(t *testing.T) { testenv.Run(t, &testenv.Config{ + EnableNats: true, MCP: config.MCPConfiguration{ Enabled: true, }, From 5f957398ba9715d7468bf3ce8f2d11c9cf296d86 Mon Sep 17 00:00:00 2001 From: Alessandro Pagnin Date: Wed, 23 Apr 2025 09:30:44 +0200 Subject: [PATCH 033/126] refactor: enhance NATS publishing logic in UpdateMood resolver to handle missing providers --- demo/cmd/mood/main.go | 7 ++-- .../mood/subgraph/schema.resolvers.go | 32 ++++++++++++------- 2 files changed, 25 insertions(+), 14 deletions(-) diff --git a/demo/cmd/mood/main.go b/demo/cmd/mood/main.go index 555de06584..96f7658c93 100644 --- a/demo/cmd/mood/main.go +++ b/demo/cmd/mood/main.go @@ -3,11 +3,12 @@ package main import ( "context" "fmt" - "github.com/wundergraph/cosmo/demo/pkg/subgraphs/mood" "log" "net/http" "os" + "github.com/wundergraph/cosmo/demo/pkg/subgraphs/mood" + "github.com/99designs/gqlgen/graphql" "github.com/99designs/gqlgen/graphql/handler/debug" "github.com/99designs/gqlgen/graphql/playground" @@ -31,7 +32,9 @@ func main() { port = defaultPort } - srv := subgraphs.NewDemoServer(mood.NewSchema(nil)) + srv := subgraphs.NewDemoServer(mood.NewSchema(nil, func(name string) string { + return name + })) srv.Use(&debug.Tracer{}) srv.Use(otelgqlgen.Middleware(otelgqlgen.WithCreateSpanFromFields(func(ctx *graphql.FieldContext) bool { diff --git a/demo/pkg/subgraphs/mood/subgraph/schema.resolvers.go b/demo/pkg/subgraphs/mood/subgraph/schema.resolvers.go index 3508b7d36d..8ab7c73941 100644 --- a/demo/pkg/subgraphs/mood/subgraph/schema.resolvers.go +++ b/demo/pkg/subgraphs/mood/subgraph/schema.resolvers.go @@ -18,21 +18,29 @@ func (r *mutationResolver) UpdateMood(ctx context.Context, employeeID int, mood storage.Set(employeeID, mood) myNatsTopic := r.GetPubSubName(fmt.Sprintf("employeeUpdated.%d", employeeID)) payload := fmt.Sprintf(`{"id":%d,"__typename": "Employee"}`, employeeID) - err := r.NatsPubSubByProviderID["default"].Publish(ctx, nats.PublishAndRequestEventConfiguration{ - Subject: myNatsTopic, - Data: []byte(payload), - }) - if err != nil { - return nil, err + if r.NatsPubSubByProviderID["default"] != nil { + err := r.NatsPubSubByProviderID["default"].Publish(ctx, nats.PublishAndRequestEventConfiguration{ + Subject: myNatsTopic, + Data: []byte(payload), + }) + if err != nil { + return nil, err + } + } else { + return nil, fmt.Errorf("no nats pubsub default provider found") } defaultTopic := r.GetPubSubName(fmt.Sprintf("employeeUpdatedMyNats.%d", employeeID)) - err = r.NatsPubSubByProviderID["my-nats"].Publish(ctx, nats.PublishAndRequestEventConfiguration{ - Subject: defaultTopic, - Data: []byte(payload), - }) - if err != nil { - return nil, err + if r.NatsPubSubByProviderID["my-nats"] != nil { + err := r.NatsPubSubByProviderID["my-nats"].Publish(ctx, nats.PublishAndRequestEventConfiguration{ + Subject: defaultTopic, + Data: []byte(payload), + }) + if err != nil { + return nil, err + } + } else { + return nil, fmt.Errorf("no nats pubsub my-nats provider found") } return &model.Employee{ID: employeeID, CurrentMood: mood}, nil From 01e12bc143487e91ac06ab291b26b6aa8a005433 Mon Sep 17 00:00:00 2001 From: Alessandro Pagnin Date: Wed, 7 May 2025 14:11:13 +0200 Subject: [PATCH 034/126] chore: pass up providers instead of passing down a callback, small fixes --- router/core/executor.go | 11 +++++- router/core/factoryresolver.go | 39 ++++++++++--------- router/core/graph_server.go | 12 ++---- router/core/plan_generator.go | 7 ++-- router/pkg/plan_generator/plan_generator.go | 2 + router/pkg/pubsub/datasource/datasource.go | 10 ++--- router/pkg/pubsub/datasource/planner.go | 16 ++++---- router/pkg/pubsub/datasource/test_utils.go | 10 ++--- .../{utils/utils.go => eventdata/build.go} | 2 +- router/pkg/pubsub/kafka/pubsub_datasource.go | 10 ++--- .../pubsub/kafka/pubsub_datasource_test.go | 12 +++--- router/pkg/pubsub/nats/pubsub_datasource.go | 10 ++--- .../pkg/pubsub/nats/pubsub_datasource_test.go | 18 ++++----- 13 files changed, 82 insertions(+), 77 deletions(-) rename router/pkg/pubsub/{utils/utils.go => eventdata/build.go} (98%) diff --git a/router/core/executor.go b/router/core/executor.go index a4f4cb6738..ee334c2adc 100644 --- a/router/core/executor.go +++ b/router/core/executor.go @@ -34,7 +34,7 @@ type ExecutorConfigurationBuilder struct { subscriptionClientOptions *SubscriptionClientOptions instanceData InstanceData - addPubSubProviderCallback func(provider datasource.PubSubProvider) + providers []datasource.PubSubProvider } type Executor struct { @@ -213,7 +213,7 @@ func (b *ExecutorConfigurationBuilder) buildPlannerConfiguration(ctx context.Con routerEngineCfg.Execution.EnableSingleFlight, routerEngineCfg.Execution.EnableNetPoll, b.instanceData, - ), b.logger, b.addPubSubProviderCallback) + ), b.logger) // this generates the plan config using the data source factories from the config package planConfig, err := loader.Load(engineConfig, subgraphs, routerEngineCfg) @@ -234,5 +234,12 @@ func (b *ExecutorConfigurationBuilder) buildPlannerConfiguration(ctx context.Con planConfig.MinifySubgraphOperations = routerEngineCfg.Execution.MinifySubgraphOperations planConfig.EnableOperationNamePropagation = routerEngineCfg.Execution.EnableSubgraphFetchOperationName + + b.providers = loader.GetProviders() + return planConfig, nil } + +func (b *ExecutorConfigurationBuilder) GetProviders() []datasource.PubSubProvider { + return b.providers +} diff --git a/router/core/factoryresolver.go b/router/core/factoryresolver.go index dd524189c0..61cc7652ee 100644 --- a/router/core/factoryresolver.go +++ b/router/core/factoryresolver.go @@ -31,14 +31,14 @@ type Loader struct { ctx context.Context resolver FactoryResolver // includeInfo controls whether additional information like type usage and field usage is included in the plan de - includeInfo bool - logger *zap.Logger - addPubSubProviderCallback func(provider datasource.PubSubProvider) + includeInfo bool + logger *zap.Logger + providers []datasource.PubSubProvider } type InstanceData struct { - hostName string - listenAddress string + HostName string + ListenAddress string } type FactoryResolver interface { @@ -175,13 +175,13 @@ func (d *DefaultFactoryResolver) InstanceData() InstanceData { return d.instanceData } -func NewLoader(ctx context.Context, includeInfo bool, resolver FactoryResolver, logger *zap.Logger, addPubSubProviderCallback func(provider datasource.PubSubProvider)) *Loader { +func NewLoader(ctx context.Context, includeInfo bool, resolver FactoryResolver, logger *zap.Logger) *Loader { return &Loader{ - ctx: ctx, - resolver: resolver, - includeInfo: includeInfo, - logger: logger, - addPubSubProviderCallback: addPubSubProviderCallback, + ctx: ctx, + resolver: resolver, + includeInfo: includeInfo, + logger: logger, + providers: []datasource.PubSubProvider{}, } } @@ -194,6 +194,10 @@ func (l *Loader) LoadInternedString(engineConfig *nodev1.EngineConfiguration, st return s, nil } +func (l *Loader) GetProviders() []datasource.PubSubProvider { + return l.providers +} + type RouterEngineConfiguration struct { Execution config.EngineExecutionConfiguration Headers *config.HeaderRules @@ -431,8 +435,6 @@ func (l *Loader) Load(engineConfig *nodev1.EngineConfiguration, subgraphs []*nod case nodev1.DataSourceKind_PUBSUB: var err error - var providers []datasource.PubSubProvider - dsMeta := l.dataSourceMetaData(in) providersFactories := pubsub.GetProviderFactories() for _, providerFactory := range providersFactories { @@ -442,23 +444,22 @@ func (l *Loader) Load(engineConfig *nodev1.EngineConfiguration, subgraphs []*nod dsMeta, routerEngineConfig.Events, l.logger, - l.resolver.InstanceData().hostName, - l.resolver.InstanceData().listenAddress, + l.resolver.InstanceData().HostName, + l.resolver.InstanceData().ListenAddress, ) if err != nil { return nil, err } if provider != nil { - providers = append(providers, provider) - l.addPubSubProviderCallback(provider) + l.providers = append(l.providers, provider) } } out, err = plan.NewDataSourceConfiguration( in.Id, - datasource.NewFactory(l.ctx, routerEngineConfig.Events, providers), + datasource.NewFactory(l.ctx, routerEngineConfig.Events, l.providers), dsMeta, - providers, + l.providers, ) if err != nil { return nil, err diff --git a/router/core/graph_server.go b/router/core/graph_server.go index 5981cca590..93d7b0c586 100644 --- a/router/core/graph_server.go +++ b/router/core/graph_server.go @@ -125,8 +125,8 @@ func newGraphServer(ctx context.Context, r *Router, routerConfig *nodev1.RouterC inFlightRequests: &atomic.Uint64{}, graphMuxList: make([]*graphMux, 0, 1), instanceData: InstanceData{ - hostName: r.hostName, - listenAddress: r.listenAddr, + HostName: r.hostName, + ListenAddress: r.listenAddr, }, storageProviders: &r.storageProviders, } @@ -922,12 +922,6 @@ func (s *graphServer) buildGraphMux(ctx context.Context, SubgraphErrorPropagation: s.subgraphErrorPropagation, } - var pubSubProviders []datasource.PubSubProvider - - addPubSubProviderCallback := func(provider datasource.PubSubProvider) { - pubSubProviders = append(pubSubProviders, provider) - } - // map[string]*http.Transport cannot be coerced into map[string]http.RoundTripper, unfortunately subgraphTippers := map[string]http.RoundTripper{} for subgraph, subgraphTransport := range s.subgraphTransports { @@ -966,7 +960,6 @@ func (s *graphServer) buildGraphMux(ctx context.Context, LocalhostFallbackInsideDocker: s.localhostFallbackInsideDocker, Logger: s.logger, }, - addPubSubProviderCallback: addPubSubProviderCallback, } executor, err := ecb.Build( @@ -986,6 +979,7 @@ func (s *graphServer) buildGraphMux(ctx context.Context, return nil, fmt.Errorf("failed to build plan configuration: %w", err) } + pubSubProviders := ecb.GetProviders() if len(pubSubProviders) > 0 { for _, provider := range pubSubProviders { if err := provider.Startup(ctx); err != nil { diff --git a/router/core/plan_generator.go b/router/core/plan_generator.go index 63aa5882ee..4420f70327 100644 --- a/router/core/plan_generator.go +++ b/router/core/plan_generator.go @@ -10,7 +10,6 @@ import ( log "github.com/jensneuse/abstractlogger" nodev1 "github.com/wundergraph/cosmo/router/gen/proto/wg/cosmo/node/v1" "github.com/wundergraph/cosmo/router/pkg/config" - "github.com/wundergraph/cosmo/router/pkg/pubsub/datasource" "github.com/wundergraph/cosmo/router/pkg/pubsub/kafka" "github.com/wundergraph/cosmo/router/pkg/pubsub/nats" "github.com/wundergraph/graphql-go-tools/v2/pkg/ast" @@ -275,13 +274,15 @@ func (pg *PlanGenerator) loadConfiguration(routerConfig *nodev1.RouterConfig, lo graphql_datasource.WithNetPollConfiguration(netPollConfig), ) - ctx := context.Background() + ctx, cancel := context.WithCancel(context.Background()) + defer cancel() + loader := NewLoader(ctx, false, &DefaultFactoryResolver{ engineCtx: ctx, httpClient: http.DefaultClient, streamingClient: http.DefaultClient, subscriptionClient: subscriptionClient, - }, logger, func(provider datasource.PubSubProvider) {}) + }, logger) // this generates the plan configuration using the data source factories from the config package planConfig, err := loader.Load(routerConfig.GetEngineConfig(), routerConfig.GetSubgraphs(), &routerEngineConfig) diff --git a/router/pkg/plan_generator/plan_generator.go b/router/pkg/plan_generator/plan_generator.go index 530b453ea7..8b14858431 100644 --- a/router/pkg/plan_generator/plan_generator.go +++ b/router/pkg/plan_generator/plan_generator.go @@ -116,6 +116,8 @@ func PlanGenerator(ctx context.Context, cfg QueryPlanConfig) error { defer wg.Done() planner, err := pg.GetPlanner() if err != nil { + // if we fail to get the planner, we need to cancel the context to stop the other goroutines + // and return here to stop the current goroutine cancelError(fmt.Errorf("failed to get planner: %v", err)) return } diff --git a/router/pkg/pubsub/datasource/datasource.go b/router/pkg/pubsub/datasource/datasource.go index 458a44e709..5885a2cc2b 100644 --- a/router/pkg/pubsub/datasource/datasource.go +++ b/router/pkg/pubsub/datasource/datasource.go @@ -6,9 +6,9 @@ import ( ) type PubSubDataSource interface { - GetResolveDataSource() (resolve.DataSource, error) - GetResolveDataSourceInput(event []byte) (string, error) - GetEngineEventConfiguration() *nodev1.EngineEventConfiguration - GetResolveDataSourceSubscription() (resolve.SubscriptionDataSource, error) - GetResolveDataSourceSubscriptionInput() (string, error) + ResolveDataSource() (resolve.DataSource, error) + ResolveDataSourceInput(event []byte) (string, error) + EngineEventConfiguration() *nodev1.EngineEventConfiguration + ResolveDataSourceSubscription() (resolve.SubscriptionDataSource, error) + ResolveDataSourceSubscriptionInput() (string, error) } diff --git a/router/pkg/pubsub/datasource/planner.go b/router/pkg/pubsub/datasource/planner.go index 9f9ae3326a..81490ac162 100644 --- a/router/pkg/pubsub/datasource/planner.go +++ b/router/pkg/pubsub/datasource/planner.go @@ -4,7 +4,7 @@ import ( "fmt" "strings" - "github.com/wundergraph/cosmo/router/pkg/pubsub/utils" + "github.com/wundergraph/cosmo/router/pkg/pubsub/eventdata" "github.com/wundergraph/graphql-go-tools/v2/pkg/ast" "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/argument_templates" "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/plan" @@ -55,19 +55,19 @@ func (p *Planner) ConfigureFetch() resolve.FetchConfiguration { var dataSource resolve.DataSource - dataSource, err := p.pubSubDataSource.GetResolveDataSource() + dataSource, err := p.pubSubDataSource.ResolveDataSource() if err != nil { p.visitor.Walker.StopWithInternalErr(fmt.Errorf("failed to get data source: %w", err)) return resolve.FetchConfiguration{} } - event, err := utils.BuildEventDataBytes(p.rootFieldRef, p.visitor, &p.variables) + event, err := eventdata.BuildEventDataBytes(p.rootFieldRef, p.visitor, &p.variables) if err != nil { p.visitor.Walker.StopWithInternalErr(fmt.Errorf("failed to get resolve data source input: %w", err)) return resolve.FetchConfiguration{} } - input, err := p.pubSubDataSource.GetResolveDataSourceInput(event) + input, err := p.pubSubDataSource.ResolveDataSourceInput(event) if err != nil { p.visitor.Walker.StopWithInternalErr(fmt.Errorf("failed to get resolve data source input: %w", err)) return resolve.FetchConfiguration{} @@ -78,7 +78,7 @@ func (p *Planner) ConfigureFetch() resolve.FetchConfiguration { Variables: p.variables, DataSource: dataSource, PostProcessing: resolve.PostProcessingConfiguration{ - MergePath: []string{p.pubSubDataSource.GetEngineEventConfiguration().GetFieldName()}, + MergePath: []string{p.pubSubDataSource.EngineEventConfiguration().GetFieldName()}, }, } } @@ -89,13 +89,13 @@ func (p *Planner) ConfigureSubscription() plan.SubscriptionConfiguration { return plan.SubscriptionConfiguration{} } - dataSource, err := p.pubSubDataSource.GetResolveDataSourceSubscription() + dataSource, err := p.pubSubDataSource.ResolveDataSourceSubscription() if err != nil { p.visitor.Walker.StopWithInternalErr(fmt.Errorf("failed to get resolve data source subscription: %w", err)) return plan.SubscriptionConfiguration{} } - input, err := p.pubSubDataSource.GetResolveDataSourceSubscriptionInput() + input, err := p.pubSubDataSource.ResolveDataSourceSubscriptionInput() if err != nil { p.visitor.Walker.StopWithInternalErr(fmt.Errorf("failed to get resolve data source subscription input: %w", err)) return plan.SubscriptionConfiguration{} @@ -106,7 +106,7 @@ func (p *Planner) ConfigureSubscription() plan.SubscriptionConfiguration { Variables: p.variables, DataSource: dataSource, PostProcessing: resolve.PostProcessingConfiguration{ - MergePath: []string{p.pubSubDataSource.GetEngineEventConfiguration().GetFieldName()}, + MergePath: []string{p.pubSubDataSource.EngineEventConfiguration().GetFieldName()}, }, } } diff --git a/router/pkg/pubsub/datasource/test_utils.go b/router/pkg/pubsub/datasource/test_utils.go index 33500536ce..40b53c743e 100644 --- a/router/pkg/pubsub/datasource/test_utils.go +++ b/router/pkg/pubsub/datasource/test_utils.go @@ -12,17 +12,17 @@ import ( // This function can be used by other packages to test their PubSubDataSource implementations func VerifyPubSubDataSourceImplementation(t *testing.T, pubSub PubSubDataSource) { // Test GetEngineEventConfiguration - engineEventConfig := pubSub.GetEngineEventConfiguration() + engineEventConfig := pubSub.EngineEventConfiguration() require.NotNil(t, engineEventConfig, "Expected non-nil EngineEventConfiguration") // Test GetResolveDataSource - dataSource, err := pubSub.GetResolveDataSource() + dataSource, err := pubSub.ResolveDataSource() require.NoError(t, err, "Expected no error from GetResolveDataSource") require.NotNil(t, dataSource, "Expected non-nil DataSource") // Test GetResolveDataSourceInput with sample event data testEvent := []byte(`{"test":"data"}`) - input, err := pubSub.GetResolveDataSourceInput(testEvent) + input, err := pubSub.ResolveDataSourceInput(testEvent) require.NoError(t, err, "Expected no error from GetResolveDataSourceInput") assert.NotEmpty(t, input, "Expected non-empty input") @@ -32,12 +32,12 @@ func VerifyPubSubDataSourceImplementation(t *testing.T, pubSub PubSubDataSource) assert.NoError(t, err, "Expected valid JSON from GetResolveDataSourceInput") // Test GetResolveDataSourceSubscription - subscription, err := pubSub.GetResolveDataSourceSubscription() + subscription, err := pubSub.ResolveDataSourceSubscription() require.NoError(t, err, "Expected no error from GetResolveDataSourceSubscription") require.NotNil(t, subscription, "Expected non-nil SubscriptionDataSource") // Test GetResolveDataSourceSubscriptionInput - subscriptionInput, err := pubSub.GetResolveDataSourceSubscriptionInput() + subscriptionInput, err := pubSub.ResolveDataSourceSubscriptionInput() require.NoError(t, err, "Expected no error from GetResolveDataSourceSubscriptionInput") assert.NotEmpty(t, subscriptionInput, "Expected non-empty subscription input") diff --git a/router/pkg/pubsub/utils/utils.go b/router/pkg/pubsub/eventdata/build.go similarity index 98% rename from router/pkg/pubsub/utils/utils.go rename to router/pkg/pubsub/eventdata/build.go index c51775a37f..5d1b980849 100644 --- a/router/pkg/pubsub/utils/utils.go +++ b/router/pkg/pubsub/eventdata/build.go @@ -1,4 +1,4 @@ -package utils +package eventdata import ( "bytes" diff --git a/router/pkg/pubsub/kafka/pubsub_datasource.go b/router/pkg/pubsub/kafka/pubsub_datasource.go index f559faa372..1f749ab474 100644 --- a/router/pkg/pubsub/kafka/pubsub_datasource.go +++ b/router/pkg/pubsub/kafka/pubsub_datasource.go @@ -13,11 +13,11 @@ type PubSubDataSource struct { KafkaAdapter AdapterInterface } -func (c *PubSubDataSource) GetEngineEventConfiguration() *nodev1.EngineEventConfiguration { +func (c *PubSubDataSource) EngineEventConfiguration() *nodev1.EngineEventConfiguration { return c.EventConfiguration.GetEngineEventConfiguration() } -func (c *PubSubDataSource) GetResolveDataSource() (resolve.DataSource, error) { +func (c *PubSubDataSource) ResolveDataSource() (resolve.DataSource, error) { var dataSource resolve.DataSource typeName := c.EventConfiguration.GetEngineEventConfiguration().GetType() @@ -33,7 +33,7 @@ func (c *PubSubDataSource) GetResolveDataSource() (resolve.DataSource, error) { return dataSource, nil } -func (c *PubSubDataSource) GetResolveDataSourceInput(event []byte) (string, error) { +func (c *PubSubDataSource) ResolveDataSourceInput(event []byte) (string, error) { topics := c.EventConfiguration.GetTopics() if len(topics) != 1 { @@ -53,13 +53,13 @@ func (c *PubSubDataSource) GetResolveDataSourceInput(event []byte) (string, erro return evtCfg.MarshalJSONTemplate(), nil } -func (c *PubSubDataSource) GetResolveDataSourceSubscription() (resolve.SubscriptionDataSource, error) { +func (c *PubSubDataSource) ResolveDataSourceSubscription() (resolve.SubscriptionDataSource, error) { return &SubscriptionDataSource{ pubSub: c.KafkaAdapter, }, nil } -func (c *PubSubDataSource) GetResolveDataSourceSubscriptionInput() (string, error) { +func (c *PubSubDataSource) ResolveDataSourceSubscriptionInput() (string, error) { providerId := c.GetProviderId() evtCfg := SubscriptionEventConfiguration{ ProviderID: providerId, diff --git a/router/pkg/pubsub/kafka/pubsub_datasource_test.go b/router/pkg/pubsub/kafka/pubsub_datasource_test.go index 4388a637a8..cd780730a0 100644 --- a/router/pkg/pubsub/kafka/pubsub_datasource_test.go +++ b/router/pkg/pubsub/kafka/pubsub_datasource_test.go @@ -67,11 +67,11 @@ func TestPubSubDataSourceWithMockAdapter(t *testing.T) { } // Get the data source - ds, err := pubsub.GetResolveDataSource() + ds, err := pubsub.ResolveDataSource() require.NoError(t, err) // Get the input - input, err := pubsub.GetResolveDataSourceInput([]byte(`{"test":"data"}`)) + input, err := pubsub.ResolveDataSourceInput([]byte(`{"test":"data"}`)) require.NoError(t, err) // Call Load on the data source @@ -109,7 +109,7 @@ func TestPubSubDataSource_GetResolveDataSource_WrongType(t *testing.T) { } // Get the data source - ds, err := pubsub.GetResolveDataSource() + ds, err := pubsub.ResolveDataSource() require.Error(t, err) require.Nil(t, ds) } @@ -135,7 +135,7 @@ func TestPubSubDataSource_GetResolveDataSourceInput_MultipleTopics(t *testing.T) } // Get the input - input, err := pubsub.GetResolveDataSourceInput([]byte(`{"test":"data"}`)) + input, err := pubsub.ResolveDataSourceInput([]byte(`{"test":"data"}`)) require.Error(t, err) require.Empty(t, input) } @@ -161,7 +161,7 @@ func TestPubSubDataSource_GetResolveDataSourceInput_NoTopics(t *testing.T) { } // Get the input - input, err := pubsub.GetResolveDataSourceInput([]byte(`{"test":"data"}`)) + input, err := pubsub.ResolveDataSourceInput([]byte(`{"test":"data"}`)) require.Error(t, err) require.Empty(t, input) } @@ -189,7 +189,7 @@ func TestKafkaPubSubDataSourceMultiTopicSubscription(t *testing.T) { } // Test GetResolveDataSourceSubscriptionInput - subscriptionInput, err := pubsub.GetResolveDataSourceSubscriptionInput() + subscriptionInput, err := pubsub.ResolveDataSourceSubscriptionInput() require.NoError(t, err, "Expected no error from GetResolveDataSourceSubscriptionInput") require.NotEmpty(t, subscriptionInput, "Expected non-empty subscription input") diff --git a/router/pkg/pubsub/nats/pubsub_datasource.go b/router/pkg/pubsub/nats/pubsub_datasource.go index ca8aae2506..ffbac39db6 100644 --- a/router/pkg/pubsub/nats/pubsub_datasource.go +++ b/router/pkg/pubsub/nats/pubsub_datasource.go @@ -14,11 +14,11 @@ type PubSubDataSource struct { NatsAdapter AdapterInterface } -func (c *PubSubDataSource) GetEngineEventConfiguration() *nodev1.EngineEventConfiguration { +func (c *PubSubDataSource) EngineEventConfiguration() *nodev1.EngineEventConfiguration { return c.EventConfiguration.GetEngineEventConfiguration() } -func (c *PubSubDataSource) GetResolveDataSource() (resolve.DataSource, error) { +func (c *PubSubDataSource) ResolveDataSource() (resolve.DataSource, error) { var dataSource resolve.DataSource typeName := c.EventConfiguration.GetEngineEventConfiguration().GetType() @@ -38,7 +38,7 @@ func (c *PubSubDataSource) GetResolveDataSource() (resolve.DataSource, error) { return dataSource, nil } -func (c *PubSubDataSource) GetResolveDataSourceInput(event []byte) (string, error) { +func (c *PubSubDataSource) ResolveDataSourceInput(event []byte) (string, error) { subjects := c.EventConfiguration.GetSubjects() if len(subjects) != 1 { @@ -58,13 +58,13 @@ func (c *PubSubDataSource) GetResolveDataSourceInput(event []byte) (string, erro return evtCfg.MarshalJSONTemplate(), nil } -func (c *PubSubDataSource) GetResolveDataSourceSubscription() (resolve.SubscriptionDataSource, error) { +func (c *PubSubDataSource) ResolveDataSourceSubscription() (resolve.SubscriptionDataSource, error) { return &SubscriptionSource{ pubSub: c.NatsAdapter, }, nil } -func (c *PubSubDataSource) GetResolveDataSourceSubscriptionInput() (string, error) { +func (c *PubSubDataSource) ResolveDataSourceSubscriptionInput() (string, error) { providerId := c.GetProviderId() evtCfg := SubscriptionEventConfiguration{ diff --git a/router/pkg/pubsub/nats/pubsub_datasource_test.go b/router/pkg/pubsub/nats/pubsub_datasource_test.go index d14a8721a6..64525e9d7a 100644 --- a/router/pkg/pubsub/nats/pubsub_datasource_test.go +++ b/router/pkg/pubsub/nats/pubsub_datasource_test.go @@ -67,11 +67,11 @@ func TestPubSubDataSourceWithMockAdapter(t *testing.T) { } // Get the data source - ds, err := pubsub.GetResolveDataSource() + ds, err := pubsub.ResolveDataSource() require.NoError(t, err) // Get the input - input, err := pubsub.GetResolveDataSourceInput([]byte(`{"test":"data"}`)) + input, err := pubsub.ResolveDataSourceInput([]byte(`{"test":"data"}`)) require.NoError(t, err) // Call Load on the data source @@ -108,7 +108,7 @@ func TestPubSubDataSource_GetResolveDataSource_WrongType(t *testing.T) { } // Get the data source - ds, err := pubsub.GetResolveDataSource() + ds, err := pubsub.ResolveDataSource() require.Error(t, err) require.Nil(t, ds) } @@ -133,7 +133,7 @@ func TestPubSubDataSource_GetResolveDataSourceInput_MultipleSubjects(t *testing. } // Get the input - input, err := pubsub.GetResolveDataSourceInput([]byte(`{"test":"data"}`)) + input, err := pubsub.ResolveDataSourceInput([]byte(`{"test":"data"}`)) require.Error(t, err) require.Empty(t, input) } @@ -158,7 +158,7 @@ func TestPubSubDataSource_GetResolveDataSourceInput_NoSubjects(t *testing.T) { } // Get the input - input, err := pubsub.GetResolveDataSourceInput([]byte(`{"test":"data"}`)) + input, err := pubsub.ResolveDataSourceInput([]byte(`{"test":"data"}`)) require.Error(t, err) require.Empty(t, input) } @@ -183,7 +183,7 @@ func TestNatsPubSubDataSourceMultiSubjectSubscription(t *testing.T) { } // Test GetResolveDataSourceSubscriptionInput - subscriptionInput, err := pubsub.GetResolveDataSourceSubscriptionInput() + subscriptionInput, err := pubsub.ResolveDataSourceSubscriptionInput() require.NoError(t, err, "Expected no error from GetResolveDataSourceSubscriptionInput") require.NotEmpty(t, subscriptionInput, "Expected non-empty subscription input") @@ -221,7 +221,7 @@ func TestNatsPubSubDataSourceWithStreamConfiguration(t *testing.T) { } // Test GetResolveDataSourceSubscriptionInput with stream configuration - subscriptionInput, err := pubsub.GetResolveDataSourceSubscriptionInput() + subscriptionInput, err := pubsub.ResolveDataSourceSubscriptionInput() require.NoError(t, err, "Expected no error from GetResolveDataSourceSubscriptionInput") require.NotEmpty(t, subscriptionInput, "Expected non-empty subscription input") @@ -267,12 +267,12 @@ func TestPubSubDataSource_RequestDataSource(t *testing.T) { } // Get the data source - ds, err := pubsub.GetResolveDataSource() + ds, err := pubsub.ResolveDataSource() require.NoError(t, err) require.NotNil(t, ds) // Get the input - input, err := pubsub.GetResolveDataSourceInput([]byte(`{"test":"data"}`)) + input, err := pubsub.ResolveDataSourceInput([]byte(`{"test":"data"}`)) require.NoError(t, err) // Call Load on the data source From b5c73577d3f20820fe154dc7a4833ff7f93c1876 Mon Sep 17 00:00:00 2001 From: Alessandro Pagnin Date: Wed, 7 May 2025 14:13:31 +0200 Subject: [PATCH 035/126] fix: rename NatParams to NatsParams for consistency in pubsub.go --- router-tests/testenv/pubsub.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/router-tests/testenv/pubsub.go b/router-tests/testenv/pubsub.go index f141045ad2..53075005b1 100644 --- a/router-tests/testenv/pubsub.go +++ b/router-tests/testenv/pubsub.go @@ -8,20 +8,20 @@ import ( nodev1 "github.com/wundergraph/cosmo/router/gen/proto/wg/cosmo/node/v1" ) -type NatParams struct { +type NatsParams struct { Opts []nats.Option Url string } type NatsData struct { Connections []*nats.Conn - Params []*NatParams + Params []*NatsParams } func setupNatsClients(t testing.TB) (*NatsData, error) { natsData := &NatsData{} for range demoNatsProviders { - param := &NatParams{ + param := &NatsParams{ Url: nats.DefaultURL, Opts: []nats.Option{ nats.MaxReconnects(10), From 8eb72eb356609d86fc810c3a4c81676fef1d7b17 Mon Sep 17 00:00:00 2001 From: Alessandro Pagnin Date: Wed, 7 May 2025 14:26:04 +0200 Subject: [PATCH 036/126] refactor: replace datasource package with pubsubtest for common PubSubDataSource tests --- router/pkg/pubsub/kafka/pubsub_datasource_test.go | 4 ++-- router/pkg/pubsub/nats/pubsub_datasource_test.go | 4 ++-- .../{datasource/test_utils.go => pubsubtest/pubsubtest.go} | 5 +++-- 3 files changed, 7 insertions(+), 6 deletions(-) rename router/pkg/pubsub/{datasource/test_utils.go => pubsubtest/pubsubtest.go} (91%) diff --git a/router/pkg/pubsub/kafka/pubsub_datasource_test.go b/router/pkg/pubsub/kafka/pubsub_datasource_test.go index cd780730a0..cd10a1eadb 100644 --- a/router/pkg/pubsub/kafka/pubsub_datasource_test.go +++ b/router/pkg/pubsub/kafka/pubsub_datasource_test.go @@ -9,7 +9,7 @@ import ( "github.com/stretchr/testify/mock" "github.com/stretchr/testify/require" nodev1 "github.com/wundergraph/cosmo/router/gen/proto/wg/cosmo/node/v1" - "github.com/wundergraph/cosmo/router/pkg/pubsub/datasource" + "github.com/wundergraph/cosmo/router/pkg/pubsub/pubsubtest" ) func TestKafkaPubSubDataSource(t *testing.T) { @@ -34,7 +34,7 @@ func TestKafkaPubSubDataSource(t *testing.T) { } // Run the standard test suite - datasource.VerifyPubSubDataSourceImplementation(t, pubsub) + pubsubtest.VerifyPubSubDataSourceImplementation(t, pubsub) } // TestPubSubDataSourceWithMockAdapter tests the PubSubDataSource with a mocked adapter diff --git a/router/pkg/pubsub/nats/pubsub_datasource_test.go b/router/pkg/pubsub/nats/pubsub_datasource_test.go index 64525e9d7a..e48639b0c9 100644 --- a/router/pkg/pubsub/nats/pubsub_datasource_test.go +++ b/router/pkg/pubsub/nats/pubsub_datasource_test.go @@ -10,7 +10,7 @@ import ( "github.com/stretchr/testify/mock" "github.com/stretchr/testify/require" nodev1 "github.com/wundergraph/cosmo/router/gen/proto/wg/cosmo/node/v1" - "github.com/wundergraph/cosmo/router/pkg/pubsub/datasource" + "github.com/wundergraph/cosmo/router/pkg/pubsub/pubsubtest" ) func TestNatsPubSubDataSource(t *testing.T) { @@ -35,7 +35,7 @@ func TestNatsPubSubDataSource(t *testing.T) { } // Run the standard test suite - datasource.VerifyPubSubDataSourceImplementation(t, pubsub) + pubsubtest.VerifyPubSubDataSourceImplementation(t, pubsub) } func TestPubSubDataSourceWithMockAdapter(t *testing.T) { diff --git a/router/pkg/pubsub/datasource/test_utils.go b/router/pkg/pubsub/pubsubtest/pubsubtest.go similarity index 91% rename from router/pkg/pubsub/datasource/test_utils.go rename to router/pkg/pubsub/pubsubtest/pubsubtest.go index 40b53c743e..09ad3b25b0 100644 --- a/router/pkg/pubsub/datasource/test_utils.go +++ b/router/pkg/pubsub/pubsubtest/pubsubtest.go @@ -1,4 +1,4 @@ -package datasource +package pubsubtest import ( "encoding/json" @@ -6,11 +6,12 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" + "github.com/wundergraph/cosmo/router/pkg/pubsub/datasource" ) // VerifyPubSubDataSourceImplementation is a common test function to verify any PubSubDataSource implementation // This function can be used by other packages to test their PubSubDataSource implementations -func VerifyPubSubDataSourceImplementation(t *testing.T, pubSub PubSubDataSource) { +func VerifyPubSubDataSourceImplementation(t *testing.T, pubSub datasource.PubSubDataSource) { // Test GetEngineEventConfiguration engineEventConfig := pubSub.EngineEventConfiguration() require.NotNil(t, engineEventConfig, "Expected non-nil EngineEventConfiguration") From 3148ce30c83c041458639801bf9b3c0cb03eaf1f Mon Sep 17 00:00:00 2001 From: Alessandro Pagnin Date: Wed, 7 May 2025 16:29:28 +0200 Subject: [PATCH 037/126] docs: enhance PubSubDataSource interface documentation with detailed method descriptions and implementation guidelines --- router/pkg/pubsub/datasource/datasource.go | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/router/pkg/pubsub/datasource/datasource.go b/router/pkg/pubsub/datasource/datasource.go index 5885a2cc2b..7107a9efe1 100644 --- a/router/pkg/pubsub/datasource/datasource.go +++ b/router/pkg/pubsub/datasource/datasource.go @@ -5,10 +5,26 @@ import ( "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/resolve" ) +// PubSubDataSource is the interface that all pubsub data sources must implement. +// It serves three main purposes: +// 1. Resolving the data source and subscription data source +// 2. Generating the appropriate input for these data sources +// 3. Providing access to the engine event configuration +// +// For detailed implementation guidelines, see: +// https://github.com/wundergraph/cosmo/blob/main/router/pkg/pubsub/README.md type PubSubDataSource interface { + // ResolveDataSource returns the engine DataSource implementation that contains + // methods which will be called by the Planner when resolving a field ResolveDataSource() (resolve.DataSource, error) + // ResolveDataSourceInput build the input that will be passed to the engine DataSource ResolveDataSourceInput(event []byte) (string, error) + // EngineEventConfiguration get the engine event configuration, contains the provider id, type, type name and field name EngineEventConfiguration() *nodev1.EngineEventConfiguration + // ResolveDataSourceSubscription returns the engine SubscriptionDataSource implementation + // that contains methods to start a subscription, which will be called by the Planner + // when a subscription is initiated ResolveDataSourceSubscription() (resolve.SubscriptionDataSource, error) + // ResolveDataSourceSubscriptionInput build the input that will be passed to the engine SubscriptionDataSource ResolveDataSourceSubscriptionInput() (string, error) } From 02c0a45230011e9d8ede794f493b603a087b499e Mon Sep 17 00:00:00 2001 From: Alessandro Pagnin Date: Wed, 7 May 2025 18:15:10 +0200 Subject: [PATCH 038/126] fix: improve pubsub provider startup and shutdown processes with timeout handling --- router/core/graph_server.go | 90 +++++++++++++++++++++++++++++++------ 1 file changed, 77 insertions(+), 13 deletions(-) diff --git a/router/core/graph_server.go b/router/core/graph_server.go index 93d7b0c586..27c292d035 100644 --- a/router/core/graph_server.go +++ b/router/core/graph_server.go @@ -979,15 +979,9 @@ func (s *graphServer) buildGraphMux(ctx context.Context, return nil, fmt.Errorf("failed to build plan configuration: %w", err) } - pubSubProviders := ecb.GetProviders() - if len(pubSubProviders) > 0 { - for _, provider := range pubSubProviders { - if err := provider.Startup(ctx); err != nil { - return nil, fmt.Errorf("failed to startup pubsub provider: %w", err) - } - } - - s.pubSubProviders = pubSubProviders + s.pubSubProviders = ecb.GetProviders() + if pubSubStartupErr := s.startupPubSubProviders(ctx); pubSubStartupErr != nil { + return nil, pubSubStartupErr } operationProcessor := NewOperationProcessor(OperationProcessorOptions{ @@ -1316,10 +1310,8 @@ func (s *graphServer) Shutdown(ctx context.Context) error { } } - for _, provider := range s.pubSubProviders { - if providerErr := provider.Shutdown(ctx); providerErr != nil { - finalErr = errors.Join(finalErr, providerErr) - } + if err := s.shutdownPubSubProviders(ctx); err != nil { + finalErr = errors.Join(finalErr, err) } // Shutdown all graphs muxes to release resources @@ -1341,6 +1333,78 @@ func (s *graphServer) Shutdown(ctx context.Context) error { return finalErr } +// startupPubSubProviders starts all pubsub providers +// It returns an error if any of the providers fail to start +// or if some providers takes to long to start +func (s *graphServer) startupPubSubProviders(ctx context.Context) error { + // Default timeout for pubsub provider startup + const defaultStartupTimeout = 5 * time.Second + + cancellableCtx, cancel := context.WithCancel(ctx) + defer cancel() + + for _, provider := range s.pubSubProviders { + startupDone := make(chan error, 1) + + go func(p datasource.PubSubProvider) { + startupDone <- p.Startup(cancellableCtx) + }(provider) + + timer := time.NewTimer(defaultStartupTimeout) + defer timer.Stop() + + select { + case err := <-startupDone: + if err != nil { + return fmt.Errorf("failed to startup pubsub provider within allowed time: %s", err.Error()) + } + case <-timer.C: + return fmt.Errorf("pubsub provider startup timed out after %s", defaultStartupTimeout) + } + } + + return nil +} + +// shutdownPubSubProviders shuts down all pubsub providers +// It returns an error if any of the providers fail to shutdown +// or if some providers takes to long to shutdown +func (s *graphServer) shutdownPubSubProviders(ctx context.Context) error { + // Default timeout for pubsub provider shutdown + const defaultShutdownTimeout = 5 * time.Second + cancellableCtx, cancel := context.WithCancel(ctx) + defer cancel() + + var finalErrs []error + var wg sync.WaitGroup + for _, provider := range s.pubSubProviders { + shutdownDone := make(chan error, 1) + + wg.Add(1) + go func(p datasource.PubSubProvider) { + shutdownDone <- p.Shutdown(cancellableCtx) + }(provider) + + timer := time.NewTimer(defaultShutdownTimeout) + defer timer.Stop() + + select { + case err := <-shutdownDone: + wg.Done() + if err != nil { + finalErrs = append(finalErrs, fmt.Errorf("failed to shutdown pubsub provider within allowed time: %s", err.Error())) + } + case <-timer.C: + wg.Done() + finalErrs = append(finalErrs, fmt.Errorf("pubsub provider shutdown timed out after %s", defaultShutdownTimeout)) + } + } + + wg.Wait() + + return errors.Join(finalErrs...) +} + func configureSubgraphOverwrites( engineConfig *nodev1.EngineConfiguration, configSubgraphs []*nodev1.Subgraph, From 711c37dc34489d62d781e49df2bfb13d59154848 Mon Sep 17 00:00:00 2001 From: Alessandro Pagnin Date: Thu, 8 May 2025 10:44:02 +0200 Subject: [PATCH 039/126] feat: add tests for Kafka and NATS startup/shutdown behavior with incorrect broker/URLs --- router-tests/events/kafka_events_test.go | 25 +++++++++++ router-tests/events/nats_events_test.go | 31 ++++++++++++++ router-tests/testenv/pubsub.go | 2 +- router-tests/testenv/testenv.go | 16 +++---- router-tests/testenv/waitinglistener.go | 54 ++++++++++++++++++++++++ 5 files changed, 119 insertions(+), 9 deletions(-) create mode 100644 router-tests/testenv/waitinglistener.go diff --git a/router-tests/events/kafka_events_test.go b/router-tests/events/kafka_events_test.go index 958722f0ef..06374cea2b 100644 --- a/router-tests/events/kafka_events_test.go +++ b/router-tests/events/kafka_events_test.go @@ -7,6 +7,7 @@ import ( "encoding/json" "fmt" "net/http" + "strconv" "sync/atomic" "testing" "time" @@ -1060,6 +1061,30 @@ func TestKafkaEvents(t *testing.T) { require.Equal(t, `{"employeeID":3,"update":{"name":"name test"}}`, string(records[0].Value)) }) }) + + t.Run("kafka startup and shutdown with wrong broker should not stop router from starting indefinitely", func(t *testing.T) { + t.Parallel() + + listener := testenv.NewWaitingListener(t, time.Second*10) + listener.Start() + defer listener.Close() + + // kafka client is lazy and will not connect to the broker until the first message is produced + // so the router will start even if the kafka connection fails + errRouter := testenv.RunWithError(t, &testenv.Config{ + RouterConfigJSONTemplate: testenv.ConfigWithEdfsKafkaJSONTemplate, + EnableKafka: true, + ModifyEventsConfiguration: func(config *config.EventsConfiguration) { + for i := range config.Providers.Kafka { + config.Providers.Kafka[i].Brokers = []string{"localhost:" + strconv.Itoa(listener.Port())} + } + }, + }, func(t *testing.T, xEnv *testenv.Environment) { + t.Log("should be called") + }) + + assert.NoError(t, errRouter) + }) } func TestFlakyKafkaEvents(t *testing.T) { diff --git a/router-tests/events/nats_events_test.go b/router-tests/events/nats_events_test.go index 989a9a4106..09bca3c995 100644 --- a/router-tests/events/nats_events_test.go +++ b/router-tests/events/nats_events_test.go @@ -8,6 +8,7 @@ import ( "io" "net/http" "net/url" + "strconv" "sync/atomic" "testing" "time" @@ -1807,6 +1808,36 @@ func TestNatsEvents(t *testing.T) { assert.Eventually(t, completed.Load, NatsWaitTimeout, time.Millisecond*100) }) }) + + t.Run("NATS startup and shutdown with wrong URLs should not stop router from starting indefinitely", func(t *testing.T) { + t.Parallel() + + listener := testenv.NewWaitingListener(t, time.Second*10) + listener.Start() + defer listener.Close() + + // kafka client is lazy and will not connect to the broker until the first message is produced + // so the router will start even if the kafka connection fails + errRouter := testenv.RunWithError(t, &testenv.Config{ + RouterConfigJSONTemplate: testenv.ConfigWithEdfsNatsJSONTemplate, + EnableNats: false, + ModifyEventsConfiguration: func(cfg *config.EventsConfiguration) { + url := "nats://127.0.0.1:" + strconv.Itoa(listener.Port()) + natsEventSources := make([]config.NatsEventSource, len(testenv.DemoNatsProviders)) + for _, sourceName := range testenv.DemoNatsProviders { + natsEventSources = append(natsEventSources, config.NatsEventSource{ + ID: sourceName, + URL: url, + }) + } + cfg.Providers.Nats = natsEventSources + }, + }, func(t *testing.T, xEnv *testenv.Environment) { + assert.Fail(t, "Should not be called") + }) + + assert.Error(t, errRouter) + }) } func TestFlakyNatsEvents(t *testing.T) { diff --git a/router-tests/testenv/pubsub.go b/router-tests/testenv/pubsub.go index 53075005b1..4011c231d4 100644 --- a/router-tests/testenv/pubsub.go +++ b/router-tests/testenv/pubsub.go @@ -20,7 +20,7 @@ type NatsData struct { func setupNatsClients(t testing.TB) (*NatsData, error) { natsData := &NatsData{} - for range demoNatsProviders { + for range DemoNatsProviders { param := &NatsParams{ Url: nats.DefaultURL, Opts: []nats.Option{ diff --git a/router-tests/testenv/testenv.go b/router-tests/testenv/testenv.go index 5adf63ccde..73094b17fa 100644 --- a/router-tests/testenv/testenv.go +++ b/router-tests/testenv/testenv.go @@ -80,8 +80,8 @@ var ( ConfigWithEdfsKafkaJSONTemplate string //go:embed testdata/configWithEdfsNats.json ConfigWithEdfsNatsJSONTemplate string - demoNatsProviders = []string{natsDefaultSourceName, myNatsProviderID} - demoKafkaProviders = []string{myKafkaProviderID} + DemoNatsProviders = []string{natsDefaultSourceName, myNatsProviderID} + DemoKafkaProviders = []string{myKafkaProviderID} ) func init() { @@ -843,18 +843,18 @@ func configureRouter(listenerAddr string, testConfig *Config, routerConfig *node testConfig.ModifySubgraphErrorPropagation(&cfg.SubgraphErrorPropagation) } - natsEventSources := make([]config.NatsEventSource, len(demoNatsProviders)) - kafkaEventSources := make([]config.KafkaEventSource, len(demoKafkaProviders)) + natsEventSources := make([]config.NatsEventSource, len(DemoNatsProviders)) + kafkaEventSources := make([]config.KafkaEventSource, len(DemoKafkaProviders)) if natsData != nil { - for _, sourceName := range demoNatsProviders { + for _, sourceName := range DemoNatsProviders { natsEventSources = append(natsEventSources, config.NatsEventSource{ ID: sourceName, URL: nats.DefaultURL, }) } } - for _, sourceName := range demoKafkaProviders { + for _, sourceName := range DemoKafkaProviders { kafkaEventSources = append(kafkaEventSources, config.KafkaEventSource{ ID: sourceName, Brokers: testConfig.KafkaSeeds, @@ -2250,8 +2250,8 @@ func subgraphOptions(ctx context.Context, t testing.TB, logger *zap.Logger, nats GetPubSubName: pubSubName, } } - natsPubSubByProviderID := make(map[string]pubsubNats.AdapterInterface, len(demoNatsProviders)) - for _, sourceName := range demoNatsProviders { + natsPubSubByProviderID := make(map[string]pubsubNats.AdapterInterface, len(DemoNatsProviders)) + for _, sourceName := range DemoNatsProviders { adapter, err := pubsubNats.NewAdapter(ctx, logger, natsData.Params[0].Url, natsData.Params[0].Opts, "hostname", "listenaddr") require.NoError(t, err) require.NoError(t, adapter.Startup(ctx)) diff --git a/router-tests/testenv/waitinglistener.go b/router-tests/testenv/waitinglistener.go new file mode 100644 index 0000000000..25aa32c80f --- /dev/null +++ b/router-tests/testenv/waitinglistener.go @@ -0,0 +1,54 @@ +package testenv + +import ( + "context" + "net" + "testing" + "time" + + "github.com/stretchr/testify/require" +) + +type WaitingListener struct { + cancel context.CancelFunc + listener *net.Listener + waitTime time.Duration + port int +} + +func (l *WaitingListener) Close() error { + l.cancel() + return (*l.listener).Close() +} + +func (l *WaitingListener) Start() { + go func() { + for { + conn, err := (*l.listener).Accept() + if err != nil { + return + } + time.Sleep(l.waitTime) + conn.Close() + } + }() +} + +func (l *WaitingListener) Port() int { + return l.port +} + +func NewWaitingListener(t *testing.T, waitTime time.Duration) (wl *WaitingListener) { + ctx, cancel := context.WithCancel(context.Background()) + var lc net.ListenConfig + listener, err := lc.Listen(ctx, "tcp", "127.0.0.1:0") + require.NoError(t, err) + + wl = &WaitingListener{ + cancel: cancel, + listener: &listener, + waitTime: waitTime, + port: listener.Addr().(*net.TCPAddr).Port, + } + return wl +} From 25e15aa3578ce827696ce2437b7b728987cad408 Mon Sep 17 00:00:00 2001 From: Alessandro Pagnin Date: Thu, 8 May 2025 11:29:24 +0200 Subject: [PATCH 040/126] refactor: extract JSON reading and checking logic into a reusable function for WebSocket messages --- router-tests/testenv/testenv.go | 30 ++++++++++++++---------------- 1 file changed, 14 insertions(+), 16 deletions(-) diff --git a/router-tests/testenv/testenv.go b/router-tests/testenv/testenv.go index 73094b17fa..18588d5dfc 100644 --- a/router-tests/testenv/testenv.go +++ b/router-tests/testenv/testenv.go @@ -1743,6 +1743,18 @@ func (e *Environment) GraphQLWebsocketDialWithRetry(header http.Header, query ur return nil, nil, err } +func ReadAndCheckJSON(t testing.TB, conn *websocket.Conn, v interface{}) (err error) { + _, payload, err := conn.ReadMessage() + if err != nil { + return err + } + if err := json.Unmarshal(payload, &v); err != nil { + t.Logf("Failed to decode WebSocket message. Raw payload: %s", string(payload)) + return err + } + return nil +} + func (e *Environment) InitGraphQLWebSocketConnection(header http.Header, query url.Values, initialPayload json.RawMessage) *websocket.Conn { conn, _, err := e.GraphQLWebsocketDialWithRetry(header, query) require.NoError(e.t, err) @@ -1755,14 +1767,7 @@ func (e *Environment) InitGraphQLWebSocketConnection(header http.Header, query u }) require.NoError(e.t, err) var ack WebSocketMessage - _, payload, err := conn.ReadMessage() - if err != nil { - require.NoError(e.t, err) - } - if err := json.Unmarshal(payload, &ack); err != nil { - e.t.Logf("Failed to decode WebSocket message. Raw payload: %s", string(payload)) - require.NoError(e.t, err) - } + require.NoError(e.t, ReadAndCheckJSON(e.t, conn, &ack)) require.Equal(e.t, "connection_ack", ack.Type) return conn } @@ -2123,14 +2128,7 @@ func WSReadJSON(t testing.TB, conn *websocket.Conn, v interface{}) (err error) { return err } - _, payload, err := conn.ReadMessage() - if err != nil { - require.NoError(t, err) - } - if err := json.Unmarshal(payload, &v); err != nil { - t.Logf("Failed to decode WebSocket message. Raw payload: %s", string(payload)) - require.NoError(t, err) - } + require.NoError(t, ReadAndCheckJSON(t, conn, v)) // Reset the deadline to prevent future operations from timing out if resetErr := conn.SetReadDeadline(time.Time{}); resetErr != nil { From 18745214de19dd08fead0227e957965bd6bb64e0 Mon Sep 17 00:00:00 2001 From: Alessandro Pagnin Date: Thu, 8 May 2025 11:30:20 +0200 Subject: [PATCH 041/126] refactor: move ReadAndCheckJSON function to improve code organization and avoid duplication --- router-tests/testenv/testenv.go | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/router-tests/testenv/testenv.go b/router-tests/testenv/testenv.go index 18588d5dfc..a77178ef5b 100644 --- a/router-tests/testenv/testenv.go +++ b/router-tests/testenv/testenv.go @@ -1149,6 +1149,18 @@ func gqlURL(srv *httptest.Server) string { return path } +func ReadAndCheckJSON(t testing.TB, conn *websocket.Conn, v interface{}) (err error) { + _, payload, err := conn.ReadMessage() + if err != nil { + return err + } + if err := json.Unmarshal(payload, &v); err != nil { + t.Logf("Failed to decode WebSocket message. Raw payload: %s", string(payload)) + return err + } + return nil +} + type Environment struct { t testing.TB cfg *Config @@ -1743,18 +1755,6 @@ func (e *Environment) GraphQLWebsocketDialWithRetry(header http.Header, query ur return nil, nil, err } -func ReadAndCheckJSON(t testing.TB, conn *websocket.Conn, v interface{}) (err error) { - _, payload, err := conn.ReadMessage() - if err != nil { - return err - } - if err := json.Unmarshal(payload, &v); err != nil { - t.Logf("Failed to decode WebSocket message. Raw payload: %s", string(payload)) - return err - } - return nil -} - func (e *Environment) InitGraphQLWebSocketConnection(header http.Header, query url.Values, initialPayload json.RawMessage) *websocket.Conn { conn, _, err := e.GraphQLWebsocketDialWithRetry(header, query) require.NoError(e.t, err) From 92b91d7ad07ca2f11fa291976f14b8e3f4188477 Mon Sep 17 00:00:00 2001 From: Alessandro Pagnin Date: Fri, 9 May 2025 08:55:29 +0200 Subject: [PATCH 042/126] refactor: remove outdated comment regarding Kafka client connection behavior in NATS events test --- router-tests/events/nats_events_test.go | 2 -- 1 file changed, 2 deletions(-) diff --git a/router-tests/events/nats_events_test.go b/router-tests/events/nats_events_test.go index 09bca3c995..531bcee18a 100644 --- a/router-tests/events/nats_events_test.go +++ b/router-tests/events/nats_events_test.go @@ -1816,8 +1816,6 @@ func TestNatsEvents(t *testing.T) { listener.Start() defer listener.Close() - // kafka client is lazy and will not connect to the broker until the first message is produced - // so the router will start even if the kafka connection fails errRouter := testenv.RunWithError(t, &testenv.Config{ RouterConfigJSONTemplate: testenv.ConfigWithEdfsNatsJSONTemplate, EnableNats: false, From 802659a7f16e5a5baf036a767e14db3434ed1e9b Mon Sep 17 00:00:00 2001 From: Alessandro Pagnin Date: Fri, 9 May 2025 09:12:35 +0200 Subject: [PATCH 043/126] refactor: rename datasource import to pubsub_datasource for clarity in executor.go --- router/core/executor.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/router/core/executor.go b/router/core/executor.go index ee334c2adc..ed66fe2018 100644 --- a/router/core/executor.go +++ b/router/core/executor.go @@ -18,7 +18,7 @@ import ( nodev1 "github.com/wundergraph/cosmo/router/gen/proto/wg/cosmo/node/v1" "github.com/wundergraph/cosmo/router/pkg/config" - "github.com/wundergraph/cosmo/router/pkg/pubsub/datasource" + pubsub_datasource "github.com/wundergraph/cosmo/router/pkg/pubsub/datasource" ) type ExecutorConfigurationBuilder struct { @@ -34,7 +34,7 @@ type ExecutorConfigurationBuilder struct { subscriptionClientOptions *SubscriptionClientOptions instanceData InstanceData - providers []datasource.PubSubProvider + providers []pubsub_datasource.PubSubProvider } type Executor struct { @@ -240,6 +240,6 @@ func (b *ExecutorConfigurationBuilder) buildPlannerConfiguration(ctx context.Con return planConfig, nil } -func (b *ExecutorConfigurationBuilder) GetProviders() []datasource.PubSubProvider { +func (b *ExecutorConfigurationBuilder) GetProviders() []pubsub_datasource.PubSubProvider { return b.providers } From 86fada30c42e2832532b855d5ed4f86c17724eca Mon Sep 17 00:00:00 2001 From: Alessandro Pagnin Date: Fri, 9 May 2025 09:14:27 +0200 Subject: [PATCH 044/126] fix: instanceData not set in the structure --- router/core/factoryresolver.go | 1 + 1 file changed, 1 insertion(+) diff --git a/router/core/factoryresolver.go b/router/core/factoryresolver.go index 61cc7652ee..5dcb11f9d4 100644 --- a/router/core/factoryresolver.go +++ b/router/core/factoryresolver.go @@ -156,6 +156,7 @@ func NewDefaultFactoryResolver( httpClient: defaultHTTPClient, subgraphHTTPClients: subgraphHTTPClients, + instanceData: instanceData, } } From ee87b59a4b6355bd568f9d2a5fbd34ed708c00c1 Mon Sep 17 00:00:00 2001 From: Alessandro Pagnin Date: Fri, 9 May 2025 10:03:37 +0200 Subject: [PATCH 045/126] refactor: streamline pubsub provider startup and shutdown with unified timeout handling --- router/core/graph_server.go | 75 +++++++++++++------------------------ 1 file changed, 27 insertions(+), 48 deletions(-) diff --git a/router/core/graph_server.go b/router/core/graph_server.go index 27c292d035..092c714a20 100644 --- a/router/core/graph_server.go +++ b/router/core/graph_server.go @@ -31,6 +31,7 @@ import ( "go.uber.org/zap" "go.uber.org/zap/zapcore" "golang.org/x/exp/maps" + "golang.org/x/sync/errgroup" "github.com/wundergraph/cosmo/router/gen/proto/wg/cosmo/common" nodev1 "github.com/wundergraph/cosmo/router/gen/proto/wg/cosmo/node/v1" @@ -1340,30 +1341,9 @@ func (s *graphServer) startupPubSubProviders(ctx context.Context) error { // Default timeout for pubsub provider startup const defaultStartupTimeout = 5 * time.Second - cancellableCtx, cancel := context.WithCancel(ctx) - defer cancel() - - for _, provider := range s.pubSubProviders { - startupDone := make(chan error, 1) - - go func(p datasource.PubSubProvider) { - startupDone <- p.Startup(cancellableCtx) - }(provider) - - timer := time.NewTimer(defaultStartupTimeout) - defer timer.Stop() - - select { - case err := <-startupDone: - if err != nil { - return fmt.Errorf("failed to startup pubsub provider within allowed time: %s", err.Error()) - } - case <-timer.C: - return fmt.Errorf("pubsub provider startup timed out after %s", defaultStartupTimeout) - } - } - - return nil + return s.providersActionWithTimeout(ctx, func(ctx context.Context, provider datasource.PubSubProvider) error { + return provider.Startup(ctx) + }, defaultStartupTimeout, "pubsub provider startup timed out") } // shutdownPubSubProviders shuts down all pubsub providers @@ -1372,37 +1352,36 @@ func (s *graphServer) startupPubSubProviders(ctx context.Context) error { func (s *graphServer) shutdownPubSubProviders(ctx context.Context) error { // Default timeout for pubsub provider shutdown const defaultShutdownTimeout = 5 * time.Second - cancellableCtx, cancel := context.WithCancel(ctx) - defer cancel() - var finalErrs []error - var wg sync.WaitGroup - for _, provider := range s.pubSubProviders { - shutdownDone := make(chan error, 1) + return s.providersActionWithTimeout(ctx, func(ctx context.Context, provider datasource.PubSubProvider) error { + return provider.Shutdown(ctx) + }, defaultShutdownTimeout, "pubsub provider shutdown timed out") +} - wg.Add(1) - go func(p datasource.PubSubProvider) { - shutdownDone <- p.Shutdown(cancellableCtx) - }(provider) +func (s *graphServer) providersActionWithTimeout(ctx context.Context, action func(ctx context.Context, provider datasource.PubSubProvider) error, timeout time.Duration, timeoutMessage string) error { + cancellableCtx, cancel := context.WithCancel(ctx) + defer cancel() - timer := time.NewTimer(defaultShutdownTimeout) - defer timer.Stop() + timer := time.NewTimer(timeout) + defer timer.Stop() - select { - case err := <-shutdownDone: - wg.Done() - if err != nil { - finalErrs = append(finalErrs, fmt.Errorf("failed to shutdown pubsub provider within allowed time: %s", err.Error())) + providersGroup := new(errgroup.Group) + for _, provider := range s.pubSubProviders { + providersGroup.Go(func() error { + actionDone := make(chan error, 1) + go func() { + actionDone <- action(cancellableCtx, provider) + }() + select { + case err := <-actionDone: + return err + case <-timer.C: + return fmt.Errorf(timeoutMessage, timeout) } - case <-timer.C: - wg.Done() - finalErrs = append(finalErrs, fmt.Errorf("pubsub provider shutdown timed out after %s", defaultShutdownTimeout)) - } + }) } - wg.Wait() - - return errors.Join(finalErrs...) + return providersGroup.Wait() } func configureSubgraphOverwrites( From 39517e819f96e8121215111dc139133138712d42 Mon Sep 17 00:00:00 2001 From: Alessandro Pagnin Date: Fri, 9 May 2025 10:31:45 +0200 Subject: [PATCH 046/126] fix: replace timeout error formatting with errors.New for consistency in providersActionWithTimeout --- router/core/graph_server.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/router/core/graph_server.go b/router/core/graph_server.go index 092c714a20..d6cda32a13 100644 --- a/router/core/graph_server.go +++ b/router/core/graph_server.go @@ -1376,7 +1376,7 @@ func (s *graphServer) providersActionWithTimeout(ctx context.Context, action fun case err := <-actionDone: return err case <-timer.C: - return fmt.Errorf(timeoutMessage, timeout) + return errors.New(timeoutMessage) } }) } From 914f21c50140dbf051d1f266eb5fdf9d39df0584 Mon Sep 17 00:00:00 2001 From: Alessandro Pagnin Date: Fri, 9 May 2025 11:44:44 +0200 Subject: [PATCH 047/126] refactor: update ExecutorConfigurationBuilder and Loader to return PubSubProviders in error handling --- router/core/executor.go | 34 +++++++++++----------------- router/core/factoryresolver.go | 41 ++++++++++++++++------------------ router/core/graph_server.go | 4 ++-- router/core/plan_generator.go | 2 +- 4 files changed, 35 insertions(+), 46 deletions(-) diff --git a/router/core/executor.go b/router/core/executor.go index ed66fe2018..0958ee147a 100644 --- a/router/core/executor.go +++ b/router/core/executor.go @@ -33,8 +33,6 @@ type ExecutorConfigurationBuilder struct { subscriptionClientOptions *SubscriptionClientOptions instanceData InstanceData - - providers []pubsub_datasource.PubSubProvider } type Executor struct { @@ -60,10 +58,10 @@ type ExecutorBuildOptions struct { InstanceData InstanceData } -func (b *ExecutorConfigurationBuilder) Build(ctx context.Context, opts *ExecutorBuildOptions) (*Executor, error) { - planConfig, err := b.buildPlannerConfiguration(ctx, opts.EngineConfig, opts.Subgraphs, opts.RouterEngineConfig) +func (b *ExecutorConfigurationBuilder) Build(ctx context.Context, opts *ExecutorBuildOptions) (*Executor, []pubsub_datasource.PubSubProvider, error) { + planConfig, providers, err := b.buildPlannerConfiguration(ctx, opts.EngineConfig, opts.Subgraphs, opts.RouterEngineConfig) if err != nil { - return nil, fmt.Errorf("failed to build planner configuration: %w", err) + return nil, nil, fmt.Errorf("failed to build planner configuration: %w", err) } options := resolve.ResolverOptions{ @@ -127,7 +125,7 @@ func (b *ExecutorConfigurationBuilder) Build(ctx context.Context, opts *Executor routerSchemaDefinition, report = astparser.ParseGraphqlDocumentString(opts.EngineConfig.GraphqlSchema) if report.HasErrors() { - return nil, fmt.Errorf("failed to parse graphql schema from engine config: %w", report) + return nil, providers, fmt.Errorf("failed to parse graphql schema from engine config: %w", report) } // we need to merge the base schema, it contains the __schema and __type queries, // as well as built-in scalars like Int, String, etc... @@ -135,7 +133,7 @@ func (b *ExecutorConfigurationBuilder) Build(ctx context.Context, opts *Executor // the engine needs to have them defined, otherwise it cannot resolve such fields err = asttransform.MergeDefinitionWithBaseSchema(&routerSchemaDefinition) if err != nil { - return nil, fmt.Errorf("failed to merge graphql schema with base schema: %w", err) + return nil, providers, fmt.Errorf("failed to merge graphql schema with base schema: %w", err) } if clientSchemaStr := opts.EngineConfig.GetGraphqlClientSchema(); clientSchemaStr != "" { @@ -144,11 +142,11 @@ func (b *ExecutorConfigurationBuilder) Build(ctx context.Context, opts *Executor clientSchema, report := astparser.ParseGraphqlDocumentString(clientSchemaStr) if report.HasErrors() { - return nil, fmt.Errorf("failed to parse graphql client schema from engine config: %w", report) + return nil, providers, fmt.Errorf("failed to parse graphql client schema from engine config: %w", report) } err = asttransform.MergeDefinitionWithBaseSchema(&clientSchema) if err != nil { - return nil, fmt.Errorf("failed to merge graphql client schema with base schema: %w", err) + return nil, providers, fmt.Errorf("failed to merge graphql client schema with base schema: %w", err) } clientSchemaDefinition = &clientSchema } else { @@ -164,7 +162,7 @@ func (b *ExecutorConfigurationBuilder) Build(ctx context.Context, opts *Executor // datasource is attached to Query.__schema, Query.__type, __Type.fields and __Type.enumValues fields introspectionFactory, err := introspection_datasource.NewIntrospectionConfigFactory(clientSchemaDefinition) if err != nil { - return nil, fmt.Errorf("failed to create introspection config factory: %w", err) + return nil, providers, fmt.Errorf("failed to create introspection config factory: %w", err) } fieldConfigs := introspectionFactory.BuildFieldConfigurations() // we need to add these fields to the config @@ -195,10 +193,10 @@ func (b *ExecutorConfigurationBuilder) Build(ctx context.Context, opts *Executor Resolver: resolver, RenameTypeNames: renameTypeNames, TrackUsageInfo: b.trackUsageInfo, - }, nil + }, providers, nil } -func (b *ExecutorConfigurationBuilder) buildPlannerConfiguration(ctx context.Context, engineConfig *nodev1.EngineConfiguration, subgraphs []*nodev1.Subgraph, routerEngineCfg *RouterEngineConfiguration) (*plan.Configuration, error) { +func (b *ExecutorConfigurationBuilder) buildPlannerConfiguration(ctx context.Context, engineConfig *nodev1.EngineConfiguration, subgraphs []*nodev1.Subgraph, routerEngineCfg *RouterEngineConfiguration) (*plan.Configuration, []pubsub_datasource.PubSubProvider, error) { // this loader is used to take the engine config and create a plan config // the plan config is what the engine uses to turn a GraphQL Request into an execution plan // the plan config is stateful as it carries connection pools and other things @@ -216,9 +214,9 @@ func (b *ExecutorConfigurationBuilder) buildPlannerConfiguration(ctx context.Con ), b.logger) // this generates the plan config using the data source factories from the config package - planConfig, err := loader.Load(engineConfig, subgraphs, routerEngineCfg) + planConfig, providers, err := loader.Load(engineConfig, subgraphs, routerEngineCfg) if err != nil { - return nil, fmt.Errorf("failed to load configuration: %w", err) + return nil, nil, fmt.Errorf("failed to load configuration: %w", err) } debug := &routerEngineCfg.Execution.Debug planConfig.Debug = plan.DebugConfiguration{ @@ -235,11 +233,5 @@ func (b *ExecutorConfigurationBuilder) buildPlannerConfiguration(ctx context.Con planConfig.EnableOperationNamePropagation = routerEngineCfg.Execution.EnableSubgraphFetchOperationName - b.providers = loader.GetProviders() - - return planConfig, nil -} - -func (b *ExecutorConfigurationBuilder) GetProviders() []pubsub_datasource.PubSubProvider { - return b.providers + return planConfig, providers, nil } diff --git a/router/core/factoryresolver.go b/router/core/factoryresolver.go index 5dcb11f9d4..feb340890d 100644 --- a/router/core/factoryresolver.go +++ b/router/core/factoryresolver.go @@ -12,6 +12,7 @@ import ( "github.com/buger/jsonparser" "github.com/wundergraph/cosmo/router/pkg/pubsub" "github.com/wundergraph/cosmo/router/pkg/pubsub/datasource" + pubsub_datasource "github.com/wundergraph/cosmo/router/pkg/pubsub/datasource" "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/argument_templates" "github.com/wundergraph/cosmo/router/pkg/config" @@ -33,7 +34,6 @@ type Loader struct { // includeInfo controls whether additional information like type usage and field usage is included in the plan de includeInfo bool logger *zap.Logger - providers []datasource.PubSubProvider } type InstanceData struct { @@ -182,7 +182,6 @@ func NewLoader(ctx context.Context, includeInfo bool, resolver FactoryResolver, resolver: resolver, includeInfo: includeInfo, logger: logger, - providers: []datasource.PubSubProvider{}, } } @@ -195,10 +194,6 @@ func (l *Loader) LoadInternedString(engineConfig *nodev1.EngineConfiguration, st return s, nil } -func (l *Loader) GetProviders() []datasource.PubSubProvider { - return l.providers -} - type RouterEngineConfiguration struct { Execution config.EngineExecutionConfiguration Headers *config.HeaderRules @@ -259,7 +254,7 @@ func mapProtoFilterToPlanFilter(input *nodev1.SubscriptionFilterCondition, outpu return nil } -func (l *Loader) Load(engineConfig *nodev1.EngineConfiguration, subgraphs []*nodev1.Subgraph, routerEngineConfig *RouterEngineConfiguration) (*plan.Configuration, error) { +func (l *Loader) Load(engineConfig *nodev1.EngineConfiguration, subgraphs []*nodev1.Subgraph, routerEngineConfig *RouterEngineConfiguration) (*plan.Configuration, []pubsub_datasource.PubSubProvider, error) { var outConfig plan.Configuration // attach field usage information to the plan outConfig.DefaultFlushIntervalMillis = engineConfig.DefaultFlushInterval @@ -294,6 +289,8 @@ func (l *Loader) Load(engineConfig *nodev1.EngineConfiguration, subgraphs []*nod }) } + var providers []pubsub_datasource.PubSubProvider + for _, in := range engineConfig.DatasourceConfigurations { var out plan.DataSource @@ -301,7 +298,7 @@ func (l *Loader) Load(engineConfig *nodev1.EngineConfiguration, subgraphs []*nod case nodev1.DataSourceKind_STATIC: factory, err := l.resolver.ResolveStaticFactory() if err != nil { - return nil, err + return nil, providers, err } out, err = plan.NewDataSourceConfiguration[staticdatasource.Configuration]( @@ -313,7 +310,7 @@ func (l *Loader) Load(engineConfig *nodev1.EngineConfiguration, subgraphs []*nod }, ) if err != nil { - return nil, fmt.Errorf("error creating data source configuration for data source %s: %w", in.Id, err) + return nil, providers, fmt.Errorf("error creating data source configuration for data source %s: %w", in.Id, err) } case nodev1.DataSourceKind_GRAPHQL: @@ -341,7 +338,7 @@ func (l *Loader) Load(engineConfig *nodev1.EngineConfiguration, subgraphs []*nod graphqlSchema, err := l.LoadInternedString(engineConfig, in.CustomGraphql.GetUpstreamSchema()) if err != nil { - return nil, fmt.Errorf("could not load GraphQL schema for data source %s: %w", in.Id, err) + return nil, providers, fmt.Errorf("could not load GraphQL schema for data source %s: %w", in.Id, err) } var subscriptionUseSSE bool @@ -380,7 +377,7 @@ func (l *Loader) Load(engineConfig *nodev1.EngineConfiguration, subgraphs []*nod dataSourceRules := FetchURLRules(routerEngineConfig.Headers, subgraphs, subscriptionUrl) forwardedClientHeaders, forwardedClientRegexps, err := PropagatedHeaders(dataSourceRules) if err != nil { - return nil, fmt.Errorf("error parsing header rules for data source %s: %w", in.Id, err) + return nil, providers, fmt.Errorf("error parsing header rules for data source %s: %w", in.Id, err) } schemaConfiguration, err := graphql_datasource.NewSchemaConfiguration( @@ -391,7 +388,7 @@ func (l *Loader) Load(engineConfig *nodev1.EngineConfiguration, subgraphs []*nod }, ) if err != nil { - return nil, fmt.Errorf("error creating schema configuration for data source %s: %w", in.Id, err) + return nil, providers, fmt.Errorf("error creating schema configuration for data source %s: %w", in.Id, err) } customConfiguration, err := graphql_datasource.NewConfiguration(graphql_datasource.ConfigurationInput{ @@ -412,14 +409,14 @@ func (l *Loader) Load(engineConfig *nodev1.EngineConfiguration, subgraphs []*nod CustomScalarTypeFields: customScalarTypeFields, }) if err != nil { - return nil, fmt.Errorf("error creating custom configuration for data source %s: %w", in.Id, err) + return nil, providers, fmt.Errorf("error creating custom configuration for data source %s: %w", in.Id, err) } dataSourceName := l.subgraphName(subgraphs, in.Id) factory, err := l.resolver.ResolveGraphqlFactory(dataSourceName) if err != nil { - return nil, err + return nil, providers, err } out, err = plan.NewDataSourceConfigurationWithName[graphql_datasource.Configuration]( @@ -430,7 +427,7 @@ func (l *Loader) Load(engineConfig *nodev1.EngineConfiguration, subgraphs []*nod customConfiguration, ) if err != nil { - return nil, fmt.Errorf("error creating data source configuration for data source %s: %w", in.Id, err) + return nil, providers, fmt.Errorf("error creating data source configuration for data source %s: %w", in.Id, err) } case nodev1.DataSourceKind_PUBSUB: @@ -449,29 +446,29 @@ func (l *Loader) Load(engineConfig *nodev1.EngineConfiguration, subgraphs []*nod l.resolver.InstanceData().ListenAddress, ) if err != nil { - return nil, err + return nil, providers, err } if provider != nil { - l.providers = append(l.providers, provider) + providers = append(providers, provider) } } out, err = plan.NewDataSourceConfiguration( in.Id, - datasource.NewFactory(l.ctx, routerEngineConfig.Events, l.providers), + datasource.NewFactory(l.ctx, routerEngineConfig.Events, providers), dsMeta, - l.providers, + providers, ) if err != nil { - return nil, err + return nil, providers, err } default: - return nil, fmt.Errorf("unknown data source type %q", in.Kind) + return nil, providers, fmt.Errorf("unknown data source type %q", in.Kind) } outConfig.DataSources = append(outConfig.DataSources, out) } - return &outConfig, nil + return &outConfig, providers, nil } func (l *Loader) subgraphName(subgraphs []*nodev1.Subgraph, dataSourceID string) string { diff --git a/router/core/graph_server.go b/router/core/graph_server.go index d6cda32a13..ca7e7c97a7 100644 --- a/router/core/graph_server.go +++ b/router/core/graph_server.go @@ -963,7 +963,7 @@ func (s *graphServer) buildGraphMux(ctx context.Context, }, } - executor, err := ecb.Build( + executor, providers, err := ecb.Build( ctx, &ExecutorBuildOptions{ EngineConfig: engineConfig, @@ -980,7 +980,7 @@ func (s *graphServer) buildGraphMux(ctx context.Context, return nil, fmt.Errorf("failed to build plan configuration: %w", err) } - s.pubSubProviders = ecb.GetProviders() + s.pubSubProviders = providers if pubSubStartupErr := s.startupPubSubProviders(ctx); pubSubStartupErr != nil { return nil, pubSubStartupErr } diff --git a/router/core/plan_generator.go b/router/core/plan_generator.go index 4420f70327..8d5f4f0e03 100644 --- a/router/core/plan_generator.go +++ b/router/core/plan_generator.go @@ -285,7 +285,7 @@ func (pg *PlanGenerator) loadConfiguration(routerConfig *nodev1.RouterConfig, lo }, logger) // this generates the plan configuration using the data source factories from the config package - planConfig, err := loader.Load(routerConfig.GetEngineConfig(), routerConfig.GetSubgraphs(), &routerEngineConfig) + planConfig, _, err := loader.Load(routerConfig.GetEngineConfig(), routerConfig.GetSubgraphs(), &routerEngineConfig) if err != nil { return fmt.Errorf("failed to load configuration: %w", err) } From ddb437d2f0ff241463886b371194a1b03e833477 Mon Sep 17 00:00:00 2001 From: Alessandro Pagnin Date: Fri, 9 May 2025 11:59:44 +0200 Subject: [PATCH 048/126] refactor: update BuildEventDataBytes to use operation from ast.Document instead of plan.Visitor --- router/pkg/pubsub/datasource/planner.go | 2 +- router/pkg/pubsub/eventdata/build.go | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/router/pkg/pubsub/datasource/planner.go b/router/pkg/pubsub/datasource/planner.go index 81490ac162..9b5fe1a84a 100644 --- a/router/pkg/pubsub/datasource/planner.go +++ b/router/pkg/pubsub/datasource/planner.go @@ -61,7 +61,7 @@ func (p *Planner) ConfigureFetch() resolve.FetchConfiguration { return resolve.FetchConfiguration{} } - event, err := eventdata.BuildEventDataBytes(p.rootFieldRef, p.visitor, &p.variables) + event, err := eventdata.BuildEventDataBytes(p.rootFieldRef, p.visitor.Operation, &p.variables) if err != nil { p.visitor.Walker.StopWithInternalErr(fmt.Errorf("failed to get resolve data source input: %w", err)) return resolve.FetchConfiguration{} diff --git a/router/pkg/pubsub/eventdata/build.go b/router/pkg/pubsub/eventdata/build.go index 5d1b980849..23d6acf933 100644 --- a/router/pkg/pubsub/eventdata/build.go +++ b/router/pkg/pubsub/eventdata/build.go @@ -4,27 +4,27 @@ import ( "bytes" "encoding/json" - "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/plan" + "github.com/wundergraph/graphql-go-tools/v2/pkg/ast" "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/resolve" ) -func BuildEventDataBytes(ref int, visitor *plan.Visitor, variables *resolve.Variables) ([]byte, error) { +func BuildEventDataBytes(ref int, operation *ast.Document, variables *resolve.Variables) ([]byte, error) { // Collect the field arguments for fetch based operations - fieldArgs := visitor.Operation.FieldArguments(ref) + fieldArgs := operation.FieldArguments(ref) var dataBuffer bytes.Buffer dataBuffer.WriteByte('{') for i, arg := range fieldArgs { if i > 0 { dataBuffer.WriteByte(',') } - argValue := visitor.Operation.ArgumentValue(arg) - variableName := visitor.Operation.VariableValueNameBytes(argValue.Ref) + argValue := operation.ArgumentValue(arg) + variableName := operation.VariableValueNameBytes(argValue.Ref) contextVariable := &resolve.ContextVariable{ Path: []string{string(variableName)}, Renderer: resolve.NewPlainVariableRenderer(), } variablePlaceHolder, _ := variables.AddVariable(contextVariable) - argumentName := visitor.Operation.ArgumentNameString(arg) + argumentName := operation.ArgumentNameString(arg) escapedKey, err := json.Marshal(argumentName) if err != nil { return nil, err From 0205b27328e8b998595568b402cc1d10a4ff9085 Mon Sep 17 00:00:00 2001 From: Alessandro Pagnin Date: Mon, 12 May 2025 14:35:21 +0200 Subject: [PATCH 049/126] refactor: enhance PubSub provider structure by consolidating data source handling and improving configuration management --- router/core/factoryresolver.go | 44 +++---- router/pkg/pubsub/datasource/datasource.go | 1 + router/pkg/pubsub/datasource/factory.go | 15 +-- router/pkg/pubsub/datasource/planner.go | 27 +--- router/pkg/pubsub/datasource/provider.go | 4 +- router/pkg/pubsub/kafka/provider.go | 107 +++++++++++----- router/pkg/pubsub/kafka/provider_test.go | 49 +++---- router/pkg/pubsub/kafka/pubsub_datasource.go | 55 +++++--- .../pubsub/kafka/pubsub_datasource_test.go | 10 +- router/pkg/pubsub/nats/provider.go | 120 +++++++++++------- router/pkg/pubsub/nats/provider_test.go | 68 ++-------- router/pkg/pubsub/nats/pubsub_datasource.go | 59 ++++++--- .../pkg/pubsub/nats/pubsub_datasource_test.go | 16 +-- router/pkg/pubsub/pubsub.go | 29 +++++ router/pkg/pubsub/pubsubtest/pubsubtest.go | 3 +- 15 files changed, 327 insertions(+), 280 deletions(-) diff --git a/router/core/factoryresolver.go b/router/core/factoryresolver.go index feb340890d..6867ad6ef1 100644 --- a/router/core/factoryresolver.go +++ b/router/core/factoryresolver.go @@ -11,7 +11,6 @@ import ( "github.com/buger/jsonparser" "github.com/wundergraph/cosmo/router/pkg/pubsub" - "github.com/wundergraph/cosmo/router/pkg/pubsub/datasource" pubsub_datasource "github.com/wundergraph/cosmo/router/pkg/pubsub/datasource" "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/argument_templates" @@ -292,7 +291,7 @@ func (l *Loader) Load(engineConfig *nodev1.EngineConfiguration, subgraphs []*nod var providers []pubsub_datasource.PubSubProvider for _, in := range engineConfig.DatasourceConfigurations { - var out plan.DataSource + var outs []plan.DataSource switch in.Kind { case nodev1.DataSourceKind_STATIC: @@ -301,7 +300,7 @@ func (l *Loader) Load(engineConfig *nodev1.EngineConfiguration, subgraphs []*nod return nil, providers, err } - out, err = plan.NewDataSourceConfiguration[staticdatasource.Configuration]( + out, err := plan.NewDataSourceConfiguration[staticdatasource.Configuration]( in.Id, factory, l.dataSourceMetaData(in), @@ -312,6 +311,7 @@ func (l *Loader) Load(engineConfig *nodev1.EngineConfiguration, subgraphs []*nod if err != nil { return nil, providers, fmt.Errorf("error creating data source configuration for data source %s: %w", in.Id, err) } + outs = append(outs, out) case nodev1.DataSourceKind_GRAPHQL: header := http.Header{} @@ -419,7 +419,7 @@ func (l *Loader) Load(engineConfig *nodev1.EngineConfiguration, subgraphs []*nod return nil, providers, err } - out, err = plan.NewDataSourceConfigurationWithName[graphql_datasource.Configuration]( + out, err := plan.NewDataSourceConfigurationWithName[graphql_datasource.Configuration]( in.Id, dataSourceName, factory, @@ -429,44 +429,32 @@ func (l *Loader) Load(engineConfig *nodev1.EngineConfiguration, subgraphs []*nod if err != nil { return nil, providers, fmt.Errorf("error creating data source configuration for data source %s: %w", in.Id, err) } + outs = append(outs, out) case nodev1.DataSourceKind_PUBSUB: var err error dsMeta := l.dataSourceMetaData(in) - providersFactories := pubsub.GetProviderFactories() - for _, providerFactory := range providersFactories { - provider, err := providerFactory( - l.ctx, - in, - dsMeta, - routerEngineConfig.Events, - l.logger, - l.resolver.InstanceData().HostName, - l.resolver.InstanceData().ListenAddress, - ) - if err != nil { - return nil, providers, err - } - if provider != nil { - providers = append(providers, provider) - } - } - - out, err = plan.NewDataSourceConfiguration( - in.Id, - datasource.NewFactory(l.ctx, routerEngineConfig.Events, providers), + providersDs, pubsubDataSources, err := pubsub.GetProviderDataSources( + l.ctx, + in, dsMeta, - providers, + routerEngineConfig.Events, + l.logger, + l.resolver.InstanceData().HostName, + l.resolver.InstanceData().ListenAddress, ) if err != nil { return nil, providers, err } + outs = append(outs, pubsubDataSources...) + providers = append(providers, providersDs...) + default: return nil, providers, fmt.Errorf("unknown data source type %q", in.Kind) } - outConfig.DataSources = append(outConfig.DataSources, out) + outConfig.DataSources = append(outConfig.DataSources, outs...) } return &outConfig, providers, nil } diff --git a/router/pkg/pubsub/datasource/datasource.go b/router/pkg/pubsub/datasource/datasource.go index 7107a9efe1..843ad55ba8 100644 --- a/router/pkg/pubsub/datasource/datasource.go +++ b/router/pkg/pubsub/datasource/datasource.go @@ -14,6 +14,7 @@ import ( // For detailed implementation guidelines, see: // https://github.com/wundergraph/cosmo/blob/main/router/pkg/pubsub/README.md type PubSubDataSource interface { + SetCurrentField(typeName string, fieldName string, extractFn ArgumentTemplateCallback) error // ResolveDataSource returns the engine DataSource implementation that contains // methods which will be called by the Planner when resolving a field ResolveDataSource() (resolve.DataSource, error) diff --git a/router/pkg/pubsub/datasource/factory.go b/router/pkg/pubsub/datasource/factory.go index ce22f9934b..c531540102 100644 --- a/router/pkg/pubsub/datasource/factory.go +++ b/router/pkg/pubsub/datasource/factory.go @@ -4,28 +4,25 @@ import ( "context" "github.com/jensneuse/abstractlogger" - "github.com/wundergraph/cosmo/router/pkg/config" "github.com/wundergraph/graphql-go-tools/v2/pkg/ast" "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/plan" ) -func NewFactory(executionContext context.Context, config config.EventsConfiguration, providers []PubSubProvider) *Factory { +func NewFactory(executionContext context.Context, pubSubDataSource PubSubDataSource) *Factory { return &Factory{ - providers: providers, + pubSubDataSource: pubSubDataSource, executionContext: executionContext, - config: config, } } type Factory struct { - providers []PubSubProvider + pubSubDataSource PubSubDataSource executionContext context.Context - config config.EventsConfiguration } -func (f *Factory) Planner(_ abstractlogger.Logger) plan.DataSourcePlanner[[]PubSubProvider] { +func (f *Factory) Planner(_ abstractlogger.Logger) plan.DataSourcePlanner[PubSubDataSource] { return &Planner{ - providers: f.providers, + pubSubDataSource: f.pubSubDataSource, } } @@ -33,6 +30,6 @@ func (f *Factory) Context() context.Context { return f.executionContext } -func (f *Factory) UpstreamSchema(dataSourceConfig plan.DataSourceConfiguration[[]PubSubProvider]) (*ast.Document, bool) { +func (f *Factory) UpstreamSchema(dataSourceConfig plan.DataSourceConfiguration[PubSubDataSource]) (*ast.Document, bool) { return nil, false } diff --git a/router/pkg/pubsub/datasource/planner.go b/router/pkg/pubsub/datasource/planner.go index 9b5fe1a84a..205af6b698 100644 --- a/router/pkg/pubsub/datasource/planner.go +++ b/router/pkg/pubsub/datasource/planner.go @@ -13,7 +13,6 @@ import ( type Planner struct { id int - providers []PubSubProvider pubSubDataSource PubSubDataSource rootFieldRef int variables resolve.Variables @@ -40,11 +39,12 @@ func (p *Planner) DataSourcePlanningBehavior() plan.DataSourcePlanningBehavior { } } -func (p *Planner) Register(visitor *plan.Visitor, configuration plan.DataSourceConfiguration[[]PubSubProvider], _ plan.DataSourcePlannerConfiguration) error { +func (p *Planner) Register(visitor *plan.Visitor, configuration plan.DataSourceConfiguration[PubSubDataSource], _ plan.DataSourcePlannerConfiguration) error { p.visitor = visitor visitor.Walker.RegisterEnterFieldVisitor(p) visitor.Walker.RegisterEnterDocumentVisitor(p) - p.providers = configuration.CustomConfiguration() + p.pubSubDataSource = configuration.CustomConfiguration() + return nil } @@ -192,23 +192,8 @@ func (p *Planner) EnterField(ref int) { return p.extractArgumentTemplate(ref, tpl) } - var pubSubDataSource PubSubDataSource - var err error - - for _, pubSub := range p.providers { - pubSubDataSource, err = pubSub.FindPubSubDataSource(typeName, fieldName, extractFn) - if err != nil { - p.visitor.Walker.StopWithInternalErr(fmt.Errorf("failed to find event config for type name \"%s\" and field name \"%s\": %w", typeName, fieldName, err)) - return - } - if pubSubDataSource != nil { - break - } - } - - if pubSubDataSource == nil { - p.visitor.Walker.StopWithInternalErr(fmt.Errorf("failed to find event config for type name \"%s\" and field name \"%s\"", typeName, fieldName)) + err := p.pubSubDataSource.SetCurrentField(typeName, fieldName, extractFn) + if err != nil { + p.visitor.Walker.StopWithInternalErr(err) } - - p.pubSubDataSource = pubSubDataSource } diff --git a/router/pkg/pubsub/datasource/provider.go b/router/pkg/pubsub/datasource/provider.go index fa58f3b30e..d0848816f0 100644 --- a/router/pkg/pubsub/datasource/provider.go +++ b/router/pkg/pubsub/datasource/provider.go @@ -9,12 +9,12 @@ import ( "go.uber.org/zap" ) -type ProviderFactory func(ctx context.Context, in *nodev1.DataSourceConfiguration, dsMeta *plan.DataSourceMetadata, config config.EventsConfiguration, logger *zap.Logger, hostName string, routerListenAddr string) (PubSubProvider, error) +type ProviderFactory func(ctx context.Context, in *nodev1.DataSourceConfiguration, dsMeta *plan.DataSourceMetadata, config config.EventsConfiguration, logger *zap.Logger, hostName string, routerListenAddr string) ([]PubSubProvider, []plan.DataSource, error) type ArgumentTemplateCallback func(tpl string) (string, error) type PubSubProvider interface { + Id() string Startup(ctx context.Context) error Shutdown(ctx context.Context) error - FindPubSubDataSource(typeName string, fieldName string, extractFn ArgumentTemplateCallback) (PubSubDataSource, error) } diff --git a/router/pkg/pubsub/kafka/provider.go b/router/pkg/pubsub/kafka/provider.go index 3d444f7923..5b9f2a3022 100644 --- a/router/pkg/pubsub/kafka/provider.go +++ b/router/pkg/pubsub/kafka/provider.go @@ -4,6 +4,7 @@ import ( "context" "crypto/tls" "fmt" + "slices" "time" "github.com/twmb/franz-go/pkg/kgo" @@ -44,78 +45,116 @@ func buildKafkaOptions(eventSource config.KafkaEventSource) ([]kgo.Opt, error) { return opts, nil } -func GetProvider(ctx context.Context, in *nodev1.DataSourceConfiguration, dsMeta *plan.DataSourceMetadata, config config.EventsConfiguration, logger *zap.Logger, hostName string, routerListenAddr string) (datasource.PubSubProvider, error) { +func GetProviderDataSources(ctx context.Context, in *nodev1.DataSourceConfiguration, dsMeta *plan.DataSourceMetadata, config config.EventsConfiguration, logger *zap.Logger, hostName string, routerListenAddr string) ([]datasource.PubSubProvider, []plan.DataSource, error) { providers := make(map[string]AdapterInterface) + pubSubProviders := []datasource.PubSubProvider{} definedProviders := make(map[string]bool) for _, provider := range config.Providers.Kafka { definedProviders[provider.ID] = true } - usedProviders := make(map[string]bool) if kafkaData := in.GetCustomEvents().GetKafka(); kafkaData != nil { + // prepare providers and root fields + usedProviders := make(map[string]bool) + rootFields := make(map[string][]string) for _, event := range kafkaData { - if !definedProviders[event.EngineEventConfiguration.ProviderId] { - return nil, fmt.Errorf("failed to find Kafka provider with ID %s", event.EngineEventConfiguration.ProviderId) + providerId := event.EngineEventConfiguration.ProviderId + if !definedProviders[providerId] { + return nil, nil, fmt.Errorf("failed to find Kafka provider with ID %s", providerId) } - usedProviders[event.EngineEventConfiguration.ProviderId] = true + usedProviders[providerId] = true + typeName := event.GetEngineEventConfiguration().GetTypeName() + fieldName := event.GetEngineEventConfiguration().GetFieldName() + if _, ok := rootFields[typeName]; !ok { + rootFields[typeName] = []string{} + } + rootFields[typeName] = append(rootFields[typeName], fieldName) } + // create providers only if they are used for _, provider := range config.Providers.Kafka { if !usedProviders[provider.ID] { continue } options, err := buildKafkaOptions(provider) if err != nil { - return nil, fmt.Errorf("failed to build options for Kafka provider with ID \"%s\": %w", provider.ID, err) + return nil, nil, fmt.Errorf("failed to build options for Kafka provider with ID \"%s\": %w", provider.ID, err) } adapter, err := NewAdapter(ctx, logger, options) if err != nil { - return nil, fmt.Errorf("failed to create adapter for Kafka provider with ID \"%s\": %w", provider.ID, err) + return nil, nil, fmt.Errorf("failed to create adapter for Kafka provider with ID \"%s\": %w", provider.ID, err) } providers[provider.ID] = adapter + pubSubProvider := &PubSubProvider{ + id: provider.ID, + Adapter: adapter, + Logger: logger, + } + pubSubProviders = append(pubSubProviders, pubSubProvider) + } + + // create data sources + ds := &PubSubDataSource{ + EventConfigurations: kafkaData, + KafkaAdapters: providers, + } + // filter dsMeta.RootNodes + newRootNodes := []plan.TypeField{} + for _, node := range dsMeta.RootNodes { + newRootNode := plan.TypeField{ + TypeName: node.TypeName, + FieldNames: []string{}, + ExternalFieldNames: node.ExternalFieldNames, + } + for _, fieldName := range node.FieldNames { + if slices.Contains(rootFields[node.TypeName], fieldName) { + newRootNode.FieldNames = append(newRootNode.FieldNames, fieldName) + } + } + newRootNodes = append(newRootNodes, newRootNode) + } + newDsMets := *dsMeta + newDsMets.RootNodes = newRootNodes + + out, err := plan.NewDataSourceConfiguration( + in.Id+"-kafka", + datasource.NewFactory(ctx, datasource.PubSubDataSource(ds)), + &newDsMets, + datasource.PubSubDataSource(ds), + ) + if err != nil { + return nil, nil, err } - return &PubSubProvider{ - EventConfiguration: kafkaData, - Logger: logger, - Providers: providers, - }, nil + return pubSubProviders, []plan.DataSource{out}, nil } - return nil, nil + return nil, nil, nil +} + +func GetProvider(ctx context.Context, in *nodev1.DataSourceConfiguration, dsMeta *plan.DataSourceMetadata, config config.EventsConfiguration, logger *zap.Logger, hostName string, routerListenAddr string) ([]datasource.PubSubProvider, []plan.DataSource, error) { + return GetProviderDataSources(ctx, in, dsMeta, config, logger, hostName, routerListenAddr) } type PubSubProvider struct { - EventConfiguration []*nodev1.KafkaEventConfiguration - Logger *zap.Logger - Providers map[string]AdapterInterface + id string + Logger *zap.Logger + Adapter AdapterInterface } -func (c *PubSubProvider) FindPubSubDataSource(typeName string, fieldName string, extractFn datasource.ArgumentTemplateCallback) (datasource.PubSubDataSource, error) { - for _, cfg := range c.EventConfiguration { - if cfg.GetEngineEventConfiguration().GetTypeName() == typeName && cfg.GetEngineEventConfiguration().GetFieldName() == fieldName { - return &PubSubDataSource{ - KafkaAdapter: c.Providers[cfg.GetEngineEventConfiguration().GetProviderId()], - EventConfiguration: cfg, - }, nil - } - } - return nil, nil +func (c *PubSubProvider) Id() string { + return c.id } func (c *PubSubProvider) Startup(ctx context.Context) error { - for _, provider := range c.Providers { - if err := provider.Startup(ctx); err != nil { - return err - } + if err := c.Adapter.Startup(ctx); err != nil { + return err } return nil } func (c *PubSubProvider) Shutdown(ctx context.Context) error { - for _, provider := range c.Providers { - if err := provider.Shutdown(ctx); err != nil { - return err - } + if err := c.Adapter.Shutdown(ctx); err != nil { + return err } return nil } diff --git a/router/pkg/pubsub/kafka/provider_test.go b/router/pkg/pubsub/kafka/provider_test.go index 52621affe6..f2a2e751ab 100644 --- a/router/pkg/pubsub/kafka/provider_test.go +++ b/router/pkg/pubsub/kafka/provider_test.go @@ -100,7 +100,7 @@ func TestGetProvider(t *testing.T) { cfg := config.EventsConfiguration{} logger := zaptest.NewLogger(t) - provider, err := GetProvider(ctx, in, dsMeta, cfg, logger, "host", "addr") + provider, _, err := GetProvider(ctx, in, dsMeta, cfg, logger, "host", "addr") require.NoError(t, err) require.Nil(t, provider) }) @@ -129,7 +129,7 @@ func TestGetProvider(t *testing.T) { } logger := zaptest.NewLogger(t) - provider, err := GetProvider(ctx, in, dsMeta, cfg, logger, "host", "addr") + provider, _, err := GetProvider(ctx, in, dsMeta, cfg, logger, "host", "addr") require.Error(t, err) require.Nil(t, provider) assert.Contains(t, err.Error(), "failed to find Kafka provider with ID") @@ -161,56 +161,37 @@ func TestGetProvider(t *testing.T) { logger := zaptest.NewLogger(t) // Create mock adapter for testing - provider, err := GetProvider(context.Background(), in, &plan.DataSourceMetadata{}, cfg, logger, "host", "addr") + provider, _, err := GetProvider(context.Background(), in, &plan.DataSourceMetadata{}, cfg, logger, "host", "addr") require.NoError(t, err) require.NotNil(t, provider) // Check the returned provider - kafkaProvider, ok := provider.(*PubSubProvider) + kafkaProvider, ok := provider[0].(*PubSubProvider) require.True(t, ok) assert.NotNil(t, kafkaProvider.Logger) - assert.NotNil(t, kafkaProvider.Providers) - assert.Contains(t, kafkaProvider.Providers, providerId) + assert.NotNil(t, kafkaProvider.Adapter) }) } func TestPubSubProvider_FindPubSubDataSource(t *testing.T) { mock := &mockAdapter{} - providerId := "test-provider" - typeName := "TestType" - fieldName := "testField" provider := &PubSubProvider{ - EventConfiguration: []*nodev1.KafkaEventConfiguration{ - { - EngineEventConfiguration: &nodev1.EngineEventConfiguration{ - TypeName: typeName, - FieldName: fieldName, - ProviderId: providerId, - }, - }, - }, - Logger: zap.NewNop(), - Providers: map[string]AdapterInterface{ - providerId: mock, - }, + Logger: zap.NewNop(), + Adapter: mock, } - t.Run("find matching datasource", func(t *testing.T) { - ds, err := provider.FindPubSubDataSource(typeName, fieldName, nil) + t.Run("calling Shutdown calls adapter Shutdown", func(t *testing.T) { + mock.On("Shutdown", context.Background()).Return(nil) + err := provider.Shutdown(context.Background()) require.NoError(t, err) - require.NotNil(t, ds) - - // Check the returned datasource - kafkaDs, ok := ds.(*PubSubDataSource) - require.True(t, ok) - assert.Equal(t, mock, kafkaDs.KafkaAdapter) - assert.Equal(t, provider.EventConfiguration[0], kafkaDs.EventConfiguration) + mock.AssertCalled(t, "Shutdown", context.Background()) }) - t.Run("return nil if no match", func(t *testing.T) { - ds, err := provider.FindPubSubDataSource("OtherType", fieldName, nil) + t.Run("calling Startup calls adapter Startup", func(t *testing.T) { + mock.On("Startup", context.Background()).Return(nil) + err := provider.Startup(context.Background()) require.NoError(t, err) - require.Nil(t, ds) + mock.AssertCalled(t, "Startup", context.Background()) }) } diff --git a/router/pkg/pubsub/kafka/pubsub_datasource.go b/router/pkg/pubsub/kafka/pubsub_datasource.go index 1f749ab474..8cc1d1ef9d 100644 --- a/router/pkg/pubsub/kafka/pubsub_datasource.go +++ b/router/pkg/pubsub/kafka/pubsub_datasource.go @@ -5,12 +5,39 @@ import ( "fmt" nodev1 "github.com/wundergraph/cosmo/router/gen/proto/wg/cosmo/node/v1" + "github.com/wundergraph/cosmo/router/pkg/pubsub/datasource" "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/resolve" ) type PubSubDataSource struct { - EventConfiguration *nodev1.KafkaEventConfiguration - KafkaAdapter AdapterInterface + EventConfiguration *nodev1.KafkaEventConfiguration + EventConfigurations []*nodev1.KafkaEventConfiguration + KafkaAdapters map[string]AdapterInterface +} + +func (c *PubSubDataSource) SetCurrentField(typeName string, fieldName string, extractFn datasource.ArgumentTemplateCallback) error { + for _, event := range c.EventConfigurations { + if event.GetEngineEventConfiguration().GetTypeName() == typeName && event.GetEngineEventConfiguration().GetFieldName() == fieldName { + var newTopics []string + for _, topic := range event.GetTopics() { + newTopic, err := extractFn(topic) + if err != nil { + return err + } + newTopics = append(newTopics, newTopic) + } + event.Topics = newTopics + c.EventConfiguration = event + + return nil + } + } + + if c.EventConfiguration == nil { + return fmt.Errorf("failed to find event configuration for typeName: %s, fieldName: %s", typeName, fieldName) + } + + return nil } func (c *PubSubDataSource) EngineEventConfiguration() *nodev1.EngineEventConfiguration { @@ -20,34 +47,34 @@ func (c *PubSubDataSource) EngineEventConfiguration() *nodev1.EngineEventConfigu func (c *PubSubDataSource) ResolveDataSource() (resolve.DataSource, error) { var dataSource resolve.DataSource - typeName := c.EventConfiguration.GetEngineEventConfiguration().GetType() - switch typeName { + eventType := c.EventConfiguration.GetEngineEventConfiguration().GetType() + switch eventType { case nodev1.EventType_PUBLISH: dataSource = &PublishDataSource{ - pubSub: c.KafkaAdapter, + pubSub: c.KafkaAdapters[c.EventConfiguration.GetEngineEventConfiguration().GetProviderId()], } default: - return nil, fmt.Errorf("failed to configure fetch: invalid event type \"%s\" for Kafka", typeName.String()) + return nil, fmt.Errorf("failed to configure fetch: invalid event type \"%s\" for Kafka", eventType.String()) } return dataSource, nil } -func (c *PubSubDataSource) ResolveDataSourceInput(event []byte) (string, error) { +func (c *PubSubDataSource) ResolveDataSourceInput(eventData []byte) (string, error) { topics := c.EventConfiguration.GetTopics() if len(topics) != 1 { - return "", fmt.Errorf("publish and request events should define one topic but received %d", len(topics)) + return "", fmt.Errorf("publish events should define one topic but received %d", len(topics)) } topic := topics[0] - providerId := c.GetProviderId() + providerId := c.EventConfiguration.GetEngineEventConfiguration().GetProviderId() evtCfg := PublishEventConfiguration{ ProviderID: providerId, Topic: topic, - Data: event, + Data: eventData, } return evtCfg.MarshalJSONTemplate(), nil @@ -55,12 +82,12 @@ func (c *PubSubDataSource) ResolveDataSourceInput(event []byte) (string, error) func (c *PubSubDataSource) ResolveDataSourceSubscription() (resolve.SubscriptionDataSource, error) { return &SubscriptionDataSource{ - pubSub: c.KafkaAdapter, + pubSub: c.KafkaAdapters[c.EventConfiguration.GetEngineEventConfiguration().GetProviderId()], }, nil } func (c *PubSubDataSource) ResolveDataSourceSubscriptionInput() (string, error) { - providerId := c.GetProviderId() + providerId := c.EventConfiguration.GetEngineEventConfiguration().GetProviderId() evtCfg := SubscriptionEventConfiguration{ ProviderID: providerId, Topics: c.EventConfiguration.GetTopics(), @@ -72,10 +99,6 @@ func (c *PubSubDataSource) ResolveDataSourceSubscriptionInput() (string, error) return string(object), nil } -func (c *PubSubDataSource) GetProviderId() string { - return c.EventConfiguration.GetEngineEventConfiguration().GetProviderId() -} - type SubscriptionEventConfiguration struct { ProviderID string `json:"providerId"` Topics []string `json:"topics"` diff --git a/router/pkg/pubsub/kafka/pubsub_datasource_test.go b/router/pkg/pubsub/kafka/pubsub_datasource_test.go index cd10a1eadb..43a10c8507 100644 --- a/router/pkg/pubsub/kafka/pubsub_datasource_test.go +++ b/router/pkg/pubsub/kafka/pubsub_datasource_test.go @@ -29,12 +29,12 @@ func TestKafkaPubSubDataSource(t *testing.T) { // Create the data source to test with a real adapter adapter := &Adapter{} pubsub := &PubSubDataSource{ - EventConfiguration: kafkaCfg, - KafkaAdapter: adapter, + EventConfigurations: []*nodev1.KafkaEventConfiguration{kafkaCfg}, + KafkaAdapters: map[string]AdapterInterface{kafkaCfg.GetEngineEventConfiguration().GetProviderId(): adapter}, } // Run the standard test suite - pubsubtest.VerifyPubSubDataSourceImplementation(t, pubsub) + pubsubtest.VerifyPubSubDataSourceImplementation(t, pubsub, "TestType", "testField") } // TestPubSubDataSourceWithMockAdapter tests the PubSubDataSource with a mocked adapter @@ -63,7 +63,7 @@ func TestPubSubDataSourceWithMockAdapter(t *testing.T) { // Create the data source with mock adapter pubsub := &PubSubDataSource{ EventConfiguration: kafkaCfg, - KafkaAdapter: mockAdapter, + KafkaAdapters: map[string]AdapterInterface{kafkaCfg.GetEngineEventConfiguration().GetProviderId(): mockAdapter}, } // Get the data source @@ -105,7 +105,7 @@ func TestPubSubDataSource_GetResolveDataSource_WrongType(t *testing.T) { // Create the data source with mock adapter pubsub := &PubSubDataSource{ EventConfiguration: kafkaCfg, - KafkaAdapter: mockAdapter, + KafkaAdapters: map[string]AdapterInterface{kafkaCfg.GetEngineEventConfiguration().GetProviderId(): mockAdapter}, } // Get the data source diff --git a/router/pkg/pubsub/nats/provider.go b/router/pkg/pubsub/nats/provider.go index a4e9af1248..025fb130c5 100644 --- a/router/pkg/pubsub/nats/provider.go +++ b/router/pkg/pubsub/nats/provider.go @@ -89,81 +89,109 @@ func transformEventConfig(cfg *nodev1.NatsEventConfiguration, fn datasource.Argu } type PubSubProvider struct { + id string EventConfiguration []*nodev1.NatsEventConfiguration Logger *zap.Logger - Providers map[string]AdapterInterface + Adapter AdapterInterface } -func (c *PubSubProvider) FindPubSubDataSource(typeName string, fieldName string, extractFn datasource.ArgumentTemplateCallback) (datasource.PubSubDataSource, error) { - for _, cfg := range c.EventConfiguration { - if cfg.GetEngineEventConfiguration().GetTypeName() == typeName && cfg.GetEngineEventConfiguration().GetFieldName() == fieldName { - transformedCfg, err := transformEventConfig(cfg, extractFn) - if err != nil { - return nil, err - } - return &PubSubDataSource{ - EventConfiguration: transformedCfg, - NatsAdapter: c.Providers[cfg.GetEngineEventConfiguration().GetProviderId()], - }, nil - } - } - return nil, nil +func (c *PubSubProvider) Id() string { + return c.id } -func GetProvider(ctx context.Context, in *nodev1.DataSourceConfiguration, dsMeta *plan.DataSourceMetadata, config config.EventsConfiguration, logger *zap.Logger, hostName string, routerListenAddr string) (datasource.PubSubProvider, error) { - var providers map[string]AdapterInterface +func GetProviderDataSources(ctx context.Context, in *nodev1.DataSourceConfiguration, dsMeta *plan.DataSourceMetadata, config config.EventsConfiguration, logger *zap.Logger, hostName string, routerListenAddr string) ([]datasource.PubSubProvider, []plan.DataSource, error) { + providers := make(map[string]AdapterInterface) + pubSubProviders := []datasource.PubSubProvider{} + definedProviders := make(map[string]bool) + for _, provider := range config.Providers.Nats { + definedProviders[provider.ID] = true + } if natsData := in.GetCustomEvents().GetNats(); natsData != nil { - definedProviders := make(map[string]bool) - for _, provider := range config.Providers.Nats { - definedProviders[provider.ID] = true - } + // prepare providers and root fields usedProviders := make(map[string]bool) + rootFields := make(map[string][]string) for _, event := range natsData { - if _, found := definedProviders[event.EngineEventConfiguration.ProviderId]; !found { - return nil, fmt.Errorf("failed to find Nats provider with ID %s", event.EngineEventConfiguration.ProviderId) + providerId := event.EngineEventConfiguration.ProviderId + if !definedProviders[providerId] { + return nil, nil, fmt.Errorf("failed to find Nats provider with ID %s", providerId) } - usedProviders[event.EngineEventConfiguration.ProviderId] = true + usedProviders[providerId] = true + typeName := event.GetEngineEventConfiguration().GetTypeName() + fieldName := event.GetEngineEventConfiguration().GetFieldName() + if _, ok := rootFields[typeName]; !ok { + rootFields[typeName] = []string{} + } + rootFields[typeName] = append(rootFields[typeName], fieldName) } - providers = map[string]AdapterInterface{} + + // create providers only if they are used for _, provider := range config.Providers.Nats { if !usedProviders[provider.ID] { continue } options, err := buildNatsOptions(provider, logger) if err != nil { - return nil, fmt.Errorf("failed to build options for Nats provider with ID \"%s\": %w", provider.ID, err) + return nil, nil, fmt.Errorf("failed to build options for Nats provider with ID \"%s\": %w", provider.ID, err) } - adapter, err := NewAdapter(ctx, logger, provider.URL, options, hostName, routerListenAddr) if err != nil { - return nil, fmt.Errorf("failed to create adapter for Nats provider with ID \"%s\": %w", provider.ID, err) + return nil, nil, fmt.Errorf("failed to create adapter for Nats provider with ID \"%s\": %w", provider.ID, err) } providers[provider.ID] = adapter + pubSubProvider := &PubSubProvider{ + id: provider.ID, + Adapter: adapter, + } + pubSubProviders = append(pubSubProviders, pubSubProvider) + } + + // create data sources + ds := &PubSubDataSource{ + EventConfigurations: natsData, + NatsAdapters: providers, } - return &PubSubProvider{ - EventConfiguration: natsData, - Logger: logger, - Providers: providers, - }, nil + // filter dsMeta.RootNodes + newRootNodes := []plan.TypeField{} + for _, node := range dsMeta.RootNodes { + newRootNode := plan.TypeField{ + TypeName: node.TypeName, + FieldNames: []string{}, + ExternalFieldNames: node.ExternalFieldNames, + } + for _, fieldName := range node.FieldNames { + if slices.Contains(rootFields[node.TypeName], fieldName) { + newRootNode.FieldNames = append(newRootNode.FieldNames, fieldName) + } + } + newRootNodes = append(newRootNodes, newRootNode) + } + newDsMets := *dsMeta + newDsMets.RootNodes = newRootNodes + + out, err := plan.NewDataSourceConfiguration( + in.Id+"-nats", + datasource.NewFactory(ctx, datasource.PubSubDataSource(ds)), + &newDsMets, + datasource.PubSubDataSource(ds), + ) + if err != nil { + return nil, nil, err + } + + return pubSubProviders, []plan.DataSource{out}, nil } - return nil, nil + return nil, nil, nil +} + +func GetProvider(ctx context.Context, in *nodev1.DataSourceConfiguration, dsMeta *plan.DataSourceMetadata, config config.EventsConfiguration, logger *zap.Logger, hostName string, routerListenAddr string) ([]datasource.PubSubProvider, []plan.DataSource, error) { + return GetProviderDataSources(ctx, in, dsMeta, config, logger, hostName, routerListenAddr) } func (c *PubSubProvider) Startup(ctx context.Context) error { - for _, provider := range c.Providers { - if err := provider.Startup(ctx); err != nil { - return err - } - } - return nil + return c.Adapter.Startup(ctx) } func (c *PubSubProvider) Shutdown(ctx context.Context) error { - for _, provider := range c.Providers { - if err := provider.Shutdown(ctx); err != nil { - return err - } - } - return nil + return c.Adapter.Shutdown(ctx) } diff --git a/router/pkg/pubsub/nats/provider_test.go b/router/pkg/pubsub/nats/provider_test.go index 9a4ba9f03a..e613fb5b74 100644 --- a/router/pkg/pubsub/nats/provider_test.go +++ b/router/pkg/pubsub/nats/provider_test.go @@ -169,7 +169,7 @@ func TestGetProvider(t *testing.T) { cfg := config.EventsConfiguration{} logger := zaptest.NewLogger(t) - provider, err := GetProvider(ctx, in, dsMeta, cfg, logger, "host", "addr") + provider, _, err := GetProvider(ctx, in, dsMeta, cfg, logger, "host", "addr") require.NoError(t, err) require.Nil(t, provider) }) @@ -198,7 +198,7 @@ func TestGetProvider(t *testing.T) { } logger := zaptest.NewLogger(t) - provider, err := GetProvider(ctx, in, dsMeta, cfg, logger, "host", "addr") + provider, _, err := GetProvider(ctx, in, dsMeta, cfg, logger, "host", "addr") require.Error(t, err) require.Nil(t, provider) assert.Contains(t, err.Error(), "failed to find Nats provider with ID") @@ -223,65 +223,21 @@ func TestPubSubProvider_FindPubSubDataSource(t *testing.T) { Subjects: []string{"test.subject"}, }, }, - Logger: zap.NewNop(), - Providers: map[string]AdapterInterface{ - providerId: mockNats, - }, + Logger: zap.NewNop(), + Adapter: mockNats, } - t.Run("find matching datasource", func(t *testing.T) { - // Identity transform function - transformFn := func(s string) (string, error) { - return s, nil - } - - ds, err := provider.FindPubSubDataSource(typeName, fieldName, transformFn) + t.Run("calling Startup", func(t *testing.T) { + mockNats.On("Startup", context.Background()).Return(nil) + err := provider.Startup(context.Background()) require.NoError(t, err) - require.NotNil(t, ds) - - // Check the returned datasource - natsDs, ok := ds.(*PubSubDataSource) - require.True(t, ok) - assert.Equal(t, mockNats, natsDs.NatsAdapter) - assert.Equal(t, provider.EventConfiguration[0], natsDs.EventConfiguration) + mockNats.AssertCalled(t, "Startup", context.Background()) }) - t.Run("return nil if no match", func(t *testing.T) { - ds, err := provider.FindPubSubDataSource("OtherType", fieldName, nil) + t.Run("calling Shutdown", func(t *testing.T) { + mockNats.On("Shutdown", context.Background()).Return(nil) + err := provider.Shutdown(context.Background()) require.NoError(t, err) - require.Nil(t, ds) - }) - - t.Run("handle error in transform function", func(t *testing.T) { - // Function that returns error - errorFn := func(s string) (string, error) { - return "", assert.AnError - } - - ds, err := provider.FindPubSubDataSource(typeName, fieldName, errorFn) - require.Error(t, err) - require.Nil(t, ds) - }) - - t.Run("handle error in transform function", func(t *testing.T) { - // Function that returns error - errorFn := func(s string) (string, error) { - return "", assert.AnError - } - - ds, err := provider.FindPubSubDataSource(typeName, fieldName, errorFn) - require.Error(t, err) - require.Nil(t, ds) - }) - - t.Run("handle error in transform function with invalid subject", func(t *testing.T) { - // Function that returns error - errorFn := func(s string) (string, error) { - return " ", nil - } - - ds, err := provider.FindPubSubDataSource(typeName, fieldName, errorFn) - require.Error(t, err) - require.Nil(t, ds) + mockNats.AssertCalled(t, "Shutdown", context.Background()) }) } diff --git a/router/pkg/pubsub/nats/pubsub_datasource.go b/router/pkg/pubsub/nats/pubsub_datasource.go index ffbac39db6..08bc553a26 100644 --- a/router/pkg/pubsub/nats/pubsub_datasource.go +++ b/router/pkg/pubsub/nats/pubsub_datasource.go @@ -5,13 +5,35 @@ import ( "fmt" nodev1 "github.com/wundergraph/cosmo/router/gen/proto/wg/cosmo/node/v1" + "github.com/wundergraph/cosmo/router/pkg/pubsub/datasource" "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/resolve" ) type PubSubDataSource struct { - EventConfiguration *nodev1.NatsEventConfiguration - NatsAdapter AdapterInterface + EventConfiguration *nodev1.NatsEventConfiguration + EventConfigurations []*nodev1.NatsEventConfiguration + NatsAdapters map[string]AdapterInterface +} + +func (c *PubSubDataSource) SetCurrentField(typeName string, fieldName string, extractFn datasource.ArgumentTemplateCallback) error { + for _, event := range c.EventConfigurations { + if event.GetEngineEventConfiguration().GetTypeName() == typeName && event.GetEngineEventConfiguration().GetFieldName() == fieldName { + event, err := transformEventConfig(event, extractFn) + if err != nil { + return err + } + c.EventConfiguration = event + + return nil + } + } + + if c.EventConfiguration == nil { + return fmt.Errorf("failed to find event configuration for typeName: %s, fieldName: %s", typeName, fieldName) + } + + return nil } func (c *PubSubDataSource) EngineEventConfiguration() *nodev1.EngineEventConfiguration { @@ -20,25 +42,26 @@ func (c *PubSubDataSource) EngineEventConfiguration() *nodev1.EngineEventConfigu func (c *PubSubDataSource) ResolveDataSource() (resolve.DataSource, error) { var dataSource resolve.DataSource + eventType := c.EventConfiguration.GetEngineEventConfiguration().GetType() + providerId := c.EventConfiguration.GetEngineEventConfiguration().GetProviderId() - typeName := c.EventConfiguration.GetEngineEventConfiguration().GetType() - switch typeName { + switch eventType { case nodev1.EventType_PUBLISH: dataSource = &NatsPublishDataSource{ - pubSub: c.NatsAdapter, + pubSub: c.NatsAdapters[providerId], } case nodev1.EventType_REQUEST: dataSource = &NatsRequestDataSource{ - pubSub: c.NatsAdapter, + pubSub: c.NatsAdapters[providerId], } default: - return nil, fmt.Errorf("failed to configure fetch: invalid event type \"%s\" for Nats", typeName.String()) + return nil, fmt.Errorf("failed to configure fetch: invalid event type \"%s\" for Nats", eventType.String()) } return dataSource, nil } -func (c *PubSubDataSource) ResolveDataSourceInput(event []byte) (string, error) { +func (c *PubSubDataSource) ResolveDataSourceInput(eventData []byte) (string, error) { subjects := c.EventConfiguration.GetSubjects() if len(subjects) != 1 { @@ -47,12 +70,12 @@ func (c *PubSubDataSource) ResolveDataSourceInput(event []byte) (string, error) subject := subjects[0] - providerId := c.GetProviderId() + providerId := c.EventConfiguration.GetEngineEventConfiguration().GetProviderId() evtCfg := PublishEventConfiguration{ ProviderID: providerId, Subject: subject, - Data: event, + Data: eventData, } return evtCfg.MarshalJSONTemplate(), nil @@ -60,22 +83,22 @@ func (c *PubSubDataSource) ResolveDataSourceInput(event []byte) (string, error) func (c *PubSubDataSource) ResolveDataSourceSubscription() (resolve.SubscriptionDataSource, error) { return &SubscriptionSource{ - pubSub: c.NatsAdapter, + pubSub: c.NatsAdapters[c.EventConfiguration.GetEngineEventConfiguration().GetProviderId()], }, nil } func (c *PubSubDataSource) ResolveDataSourceSubscriptionInput() (string, error) { - providerId := c.GetProviderId() + providerId := c.EventConfiguration.GetEngineEventConfiguration().GetProviderId() evtCfg := SubscriptionEventConfiguration{ ProviderID: providerId, Subjects: c.EventConfiguration.GetSubjects(), } - if c.EventConfiguration.StreamConfiguration != nil { + if c.EventConfiguration.GetStreamConfiguration() != nil { evtCfg.StreamConfiguration = &StreamConfiguration{ - Consumer: c.EventConfiguration.StreamConfiguration.ConsumerName, - StreamName: c.EventConfiguration.StreamConfiguration.StreamName, - ConsumerInactiveThreshold: c.EventConfiguration.StreamConfiguration.ConsumerInactiveThreshold, + Consumer: c.EventConfiguration.GetStreamConfiguration().GetConsumerName(), + StreamName: c.EventConfiguration.GetStreamConfiguration().GetStreamName(), + ConsumerInactiveThreshold: c.EventConfiguration.GetStreamConfiguration().GetConsumerInactiveThreshold(), } } object, err := json.Marshal(evtCfg) @@ -85,10 +108,6 @@ func (c *PubSubDataSource) ResolveDataSourceSubscriptionInput() (string, error) return string(object), nil } -func (c *PubSubDataSource) GetProviderId() string { - return c.EventConfiguration.GetEngineEventConfiguration().GetProviderId() -} - type StreamConfiguration struct { Consumer string `json:"consumer"` ConsumerInactiveThreshold int32 `json:"consumerInactiveThreshold"` diff --git a/router/pkg/pubsub/nats/pubsub_datasource_test.go b/router/pkg/pubsub/nats/pubsub_datasource_test.go index e48639b0c9..56609fde9d 100644 --- a/router/pkg/pubsub/nats/pubsub_datasource_test.go +++ b/router/pkg/pubsub/nats/pubsub_datasource_test.go @@ -31,11 +31,11 @@ func TestNatsPubSubDataSource(t *testing.T) { adapter := &Adapter{} pubsub := &PubSubDataSource{ EventConfiguration: natsCfg, - NatsAdapter: adapter, + NatsAdapters: map[string]AdapterInterface{"test-provider": adapter}, } // Run the standard test suite - pubsubtest.VerifyPubSubDataSourceImplementation(t, pubsub) + pubsubtest.VerifyPubSubDataSourceImplementation(t, pubsub, "TestType", "testField") } func TestPubSubDataSourceWithMockAdapter(t *testing.T) { @@ -63,7 +63,7 @@ func TestPubSubDataSourceWithMockAdapter(t *testing.T) { // Create the data source with mock adapter pubsub := &PubSubDataSource{ EventConfiguration: natsCfg, - NatsAdapter: mockAdapter, + NatsAdapters: map[string]AdapterInterface{"test-provider": mockAdapter}, } // Get the data source @@ -104,7 +104,7 @@ func TestPubSubDataSource_GetResolveDataSource_WrongType(t *testing.T) { // Create the data source with mock adapter pubsub := &PubSubDataSource{ EventConfiguration: natsCfg, - NatsAdapter: mockAdapter, + NatsAdapters: map[string]AdapterInterface{"test-provider": mockAdapter}, } // Get the data source @@ -129,7 +129,7 @@ func TestPubSubDataSource_GetResolveDataSourceInput_MultipleSubjects(t *testing. // Create the data source with mock adapter pubsub := &PubSubDataSource{ - EventConfiguration: natsCfg, + EventConfigurations: []*nodev1.NatsEventConfiguration{natsCfg}, } // Get the input @@ -217,7 +217,7 @@ func TestNatsPubSubDataSourceWithStreamConfiguration(t *testing.T) { // Create the data source to test pubsub := &PubSubDataSource{ - EventConfiguration: natsCfg, + EventConfigurations: []*nodev1.NatsEventConfiguration{natsCfg}, } // Test GetResolveDataSourceSubscriptionInput with stream configuration @@ -262,8 +262,8 @@ func TestPubSubDataSource_RequestDataSource(t *testing.T) { // Create the data source with mock adapter pubsub := &PubSubDataSource{ - EventConfiguration: natsCfg, - NatsAdapter: mockAdapter, + EventConfigurations: []*nodev1.NatsEventConfiguration{natsCfg}, + NatsAdapters: map[string]AdapterInterface{"test-provider": mockAdapter}, } // Get the data source diff --git a/router/pkg/pubsub/pubsub.go b/router/pkg/pubsub/pubsub.go index e70cf66f33..c3eccfaf1d 100644 --- a/router/pkg/pubsub/pubsub.go +++ b/router/pkg/pubsub/pubsub.go @@ -1,10 +1,17 @@ package pubsub import ( + "context" + + "github.com/wundergraph/cosmo/router/pkg/config" "github.com/wundergraph/cosmo/router/pkg/pubsub/datasource" + "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/plan" + "go.uber.org/zap" "github.com/wundergraph/cosmo/router/pkg/pubsub/kafka" "github.com/wundergraph/cosmo/router/pkg/pubsub/nats" + + nodev1 "github.com/wundergraph/cosmo/router/gen/proto/wg/cosmo/node/v1" ) var additionalProviders []datasource.ProviderFactory @@ -21,3 +28,25 @@ func GetProviderFactories() []datasource.ProviderFactory { nats.GetProvider, }, additionalProviders...) } + +func GetProviderDataSources(ctx context.Context, in *nodev1.DataSourceConfiguration, dsMeta *plan.DataSourceMetadata, config config.EventsConfiguration, logger *zap.Logger, hostName string, routerListenAddr string) ([]datasource.PubSubProvider, []plan.DataSource, error) { + datasources := []plan.DataSource{} + providers := []datasource.PubSubProvider{} + for _, providerFactory := range GetProviderFactories() { + providerProviders, providerDataSources, err := providerFactory( + ctx, + in, + dsMeta, + config, + logger, + hostName, + routerListenAddr, + ) + if err != nil { + return nil, nil, err + } + providers = append(providers, providerProviders...) + datasources = append(datasources, providerDataSources...) + } + return providers, datasources, nil +} diff --git a/router/pkg/pubsub/pubsubtest/pubsubtest.go b/router/pkg/pubsub/pubsubtest/pubsubtest.go index 09ad3b25b0..912915634b 100644 --- a/router/pkg/pubsub/pubsubtest/pubsubtest.go +++ b/router/pkg/pubsub/pubsubtest/pubsubtest.go @@ -11,7 +11,8 @@ import ( // VerifyPubSubDataSourceImplementation is a common test function to verify any PubSubDataSource implementation // This function can be used by other packages to test their PubSubDataSource implementations -func VerifyPubSubDataSourceImplementation(t *testing.T, pubSub datasource.PubSubDataSource) { +func VerifyPubSubDataSourceImplementation(t *testing.T, pubSub datasource.PubSubDataSource, typeName, fieldName string) { + pubSub.SetCurrentField(typeName, fieldName, nil) // Test GetEngineEventConfiguration engineEventConfig := pubSub.EngineEventConfiguration() require.NotNil(t, engineEventConfig, "Expected non-nil EngineEventConfiguration") From 158313eb9fac39766295e2a2c0865f4bee3683ba Mon Sep 17 00:00:00 2001 From: Alessandro Pagnin Date: Mon, 12 May 2025 14:53:04 +0200 Subject: [PATCH 050/126] fix: change tests to use EventConfiguration istead of EventConfigurations --- router/pkg/pubsub/kafka/pubsub_datasource_test.go | 4 ++-- router/pkg/pubsub/nats/pubsub_datasource_test.go | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/router/pkg/pubsub/kafka/pubsub_datasource_test.go b/router/pkg/pubsub/kafka/pubsub_datasource_test.go index 43a10c8507..fb3476ad0a 100644 --- a/router/pkg/pubsub/kafka/pubsub_datasource_test.go +++ b/router/pkg/pubsub/kafka/pubsub_datasource_test.go @@ -29,8 +29,8 @@ func TestKafkaPubSubDataSource(t *testing.T) { // Create the data source to test with a real adapter adapter := &Adapter{} pubsub := &PubSubDataSource{ - EventConfigurations: []*nodev1.KafkaEventConfiguration{kafkaCfg}, - KafkaAdapters: map[string]AdapterInterface{kafkaCfg.GetEngineEventConfiguration().GetProviderId(): adapter}, + EventConfiguration: kafkaCfg, + KafkaAdapters: map[string]AdapterInterface{kafkaCfg.GetEngineEventConfiguration().GetProviderId(): adapter}, } // Run the standard test suite diff --git a/router/pkg/pubsub/nats/pubsub_datasource_test.go b/router/pkg/pubsub/nats/pubsub_datasource_test.go index 56609fde9d..51fb1b5c25 100644 --- a/router/pkg/pubsub/nats/pubsub_datasource_test.go +++ b/router/pkg/pubsub/nats/pubsub_datasource_test.go @@ -129,7 +129,7 @@ func TestPubSubDataSource_GetResolveDataSourceInput_MultipleSubjects(t *testing. // Create the data source with mock adapter pubsub := &PubSubDataSource{ - EventConfigurations: []*nodev1.NatsEventConfiguration{natsCfg}, + EventConfiguration: natsCfg, } // Get the input @@ -217,7 +217,7 @@ func TestNatsPubSubDataSourceWithStreamConfiguration(t *testing.T) { // Create the data source to test pubsub := &PubSubDataSource{ - EventConfigurations: []*nodev1.NatsEventConfiguration{natsCfg}, + EventConfiguration: natsCfg, } // Test GetResolveDataSourceSubscriptionInput with stream configuration @@ -262,8 +262,8 @@ func TestPubSubDataSource_RequestDataSource(t *testing.T) { // Create the data source with mock adapter pubsub := &PubSubDataSource{ - EventConfigurations: []*nodev1.NatsEventConfiguration{natsCfg}, - NatsAdapters: map[string]AdapterInterface{"test-provider": mockAdapter}, + EventConfiguration: natsCfg, + NatsAdapters: map[string]AdapterInterface{"test-provider": mockAdapter}, } // Get the data source From 73644c80efda2b38481480f1c47f3825acc9fce6 Mon Sep 17 00:00:00 2001 From: Alessandro Pagnin Date: Tue, 13 May 2025 11:59:35 +0200 Subject: [PATCH 051/126] chore: add PubSubProviderBuilder to allow the filter of datasource metadata root fields in a common place --- router-tests/events/events_config_test.go | 7 +- router/core/factoryresolver.go | 2 +- router/pkg/pubsub/datasource/datasource.go | 43 ++++++- router/pkg/pubsub/datasource/factory.go | 16 +-- router/pkg/pubsub/datasource/planner.go | 28 ++--- router/pkg/pubsub/datasource/provider.go | 54 +++++++++ router/pkg/pubsub/kafka/provider.go | 101 ++-------------- router/pkg/pubsub/kafka/provider_builder.go | 83 +++++++++++++ router/pkg/pubsub/kafka/provider_test.go | 2 +- router/pkg/pubsub/kafka/pubsub_datasource.go | 35 +----- .../pubsub/kafka/pubsub_datasource_test.go | 8 +- router/pkg/pubsub/nats/provider.go | 113 ++++-------------- router/pkg/pubsub/nats/provider_builder.go | 88 ++++++++++++++ router/pkg/pubsub/nats/provider_test.go | 16 +-- router/pkg/pubsub/nats/pubsub_datasource.go | 33 +---- .../pkg/pubsub/nats/pubsub_datasource_test.go | 10 +- router/pkg/pubsub/pubsub.go | 19 +-- router/pkg/pubsub/pubsubtest/pubsubtest.go | 3 +- 18 files changed, 351 insertions(+), 310 deletions(-) create mode 100644 router/pkg/pubsub/kafka/provider_builder.go create mode 100644 router/pkg/pubsub/nats/provider_builder.go diff --git a/router-tests/events/events_config_test.go b/router-tests/events/events_config_test.go index 110d0d4cff..f5c05bf8ac 100644 --- a/router-tests/events/events_config_test.go +++ b/router-tests/events/events_config_test.go @@ -1,10 +1,11 @@ package events_test import ( + "testing" + "github.com/stretchr/testify/assert" "github.com/wundergraph/cosmo/router-tests/testenv" "github.com/wundergraph/cosmo/router/pkg/config" - "testing" ) func TestEventsConfig(t *testing.T) { @@ -23,7 +24,7 @@ func TestEventsConfig(t *testing.T) { }, func(t *testing.T, xEnv *testenv.Environment) { assert.Fail(t, "should not be called") }) - assert.ErrorContains(t, err, "failed to find Kafka provider with ID") + assert.ErrorContains(t, err, "kafka provider with ID my-kafka is not defined") }) t.Run("nats provider not specified in the router configuration", func(t *testing.T) { @@ -37,6 +38,6 @@ func TestEventsConfig(t *testing.T) { }, func(t *testing.T, xEnv *testenv.Environment) { assert.Fail(t, "should not be called") }) - assert.ErrorContains(t, err, "failed to find Nats provider with ID") + assert.ErrorContains(t, err, "nats provider with ID default is not defined") }) } diff --git a/router/core/factoryresolver.go b/router/core/factoryresolver.go index 6867ad6ef1..98bc7c3248 100644 --- a/router/core/factoryresolver.go +++ b/router/core/factoryresolver.go @@ -435,7 +435,7 @@ func (l *Loader) Load(engineConfig *nodev1.EngineConfiguration, subgraphs []*nod var err error dsMeta := l.dataSourceMetaData(in) - providersDs, pubsubDataSources, err := pubsub.GetProviderDataSources( + providersDs, pubsubDataSources, err := pubsub.GetProvidersDataSources( l.ctx, in, dsMeta, diff --git a/router/pkg/pubsub/datasource/datasource.go b/router/pkg/pubsub/datasource/datasource.go index 843ad55ba8..0a213bc48d 100644 --- a/router/pkg/pubsub/datasource/datasource.go +++ b/router/pkg/pubsub/datasource/datasource.go @@ -1,7 +1,10 @@ package datasource import ( + "slices" + nodev1 "github.com/wundergraph/cosmo/router/gen/proto/wg/cosmo/node/v1" + "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/plan" "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/resolve" ) @@ -14,7 +17,6 @@ import ( // For detailed implementation guidelines, see: // https://github.com/wundergraph/cosmo/blob/main/router/pkg/pubsub/README.md type PubSubDataSource interface { - SetCurrentField(typeName string, fieldName string, extractFn ArgumentTemplateCallback) error // ResolveDataSource returns the engine DataSource implementation that contains // methods which will be called by the Planner when resolving a field ResolveDataSource() (resolve.DataSource, error) @@ -29,3 +31,42 @@ type PubSubDataSource interface { // ResolveDataSourceSubscriptionInput build the input that will be passed to the engine SubscriptionDataSource ResolveDataSourceSubscriptionInput() (string, error) } + +type EngineEventConfiguration interface { + GetEngineEventConfiguration() *nodev1.EngineEventConfiguration +} + +type PubSubDataSourceMatcherFn func(typeName string, fieldName string, extractFn ArgumentTemplateCallback) (PubSubDataSource, error) + +func GetFilteredDataSourceMetadata[E EngineEventConfiguration](data []E, dsMeta *plan.DataSourceMetadata) *plan.DataSourceMetadata { + // find used root types and fields + rootFields := make(map[string][]string) + for _, event := range data { + typeName := event.GetEngineEventConfiguration().GetTypeName() + fieldName := event.GetEngineEventConfiguration().GetFieldName() + if _, ok := rootFields[typeName]; !ok { + rootFields[typeName] = []string{} + } + rootFields[typeName] = append(rootFields[typeName], fieldName) + } + + // filter dsMeta.RootNodes + newRootNodes := []plan.TypeField{} + for _, node := range dsMeta.RootNodes { + newRootNode := plan.TypeField{ + TypeName: node.TypeName, + FieldNames: []string{}, + ExternalFieldNames: node.ExternalFieldNames, + } + for _, fieldName := range node.FieldNames { + if slices.Contains(rootFields[node.TypeName], fieldName) { + newRootNode.FieldNames = append(newRootNode.FieldNames, fieldName) + } + } + newRootNodes = append(newRootNodes, newRootNode) + } + newDsMets := *dsMeta + newDsMets.RootNodes = newRootNodes + + return &newDsMets +} diff --git a/router/pkg/pubsub/datasource/factory.go b/router/pkg/pubsub/datasource/factory.go index c531540102..86c195ad76 100644 --- a/router/pkg/pubsub/datasource/factory.go +++ b/router/pkg/pubsub/datasource/factory.go @@ -8,21 +8,21 @@ import ( "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/plan" ) -func NewFactory(executionContext context.Context, pubSubDataSource PubSubDataSource) *Factory { +func NewFactory(executionContext context.Context, pubSubDataSourceMatcher PubSubDataSourceMatcherFn) *Factory { return &Factory{ - pubSubDataSource: pubSubDataSource, - executionContext: executionContext, + pubSubDataSourceMatcher: pubSubDataSourceMatcher, + executionContext: executionContext, } } type Factory struct { - pubSubDataSource PubSubDataSource - executionContext context.Context + pubSubDataSourceMatcher PubSubDataSourceMatcherFn + executionContext context.Context } -func (f *Factory) Planner(_ abstractlogger.Logger) plan.DataSourcePlanner[PubSubDataSource] { +func (f *Factory) Planner(_ abstractlogger.Logger) plan.DataSourcePlanner[PubSubDataSourceMatcherFn] { return &Planner{ - pubSubDataSource: f.pubSubDataSource, + pubSubDataSourceMatcher: f.pubSubDataSourceMatcher, } } @@ -30,6 +30,6 @@ func (f *Factory) Context() context.Context { return f.executionContext } -func (f *Factory) UpstreamSchema(dataSourceConfig plan.DataSourceConfiguration[PubSubDataSource]) (*ast.Document, bool) { +func (f *Factory) UpstreamSchema(dataSourceConfig plan.DataSourceConfiguration[PubSubDataSourceMatcherFn]) (*ast.Document, bool) { return nil, false } diff --git a/router/pkg/pubsub/datasource/planner.go b/router/pkg/pubsub/datasource/planner.go index 205af6b698..95a4e3e131 100644 --- a/router/pkg/pubsub/datasource/planner.go +++ b/router/pkg/pubsub/datasource/planner.go @@ -12,11 +12,12 @@ import ( ) type Planner struct { - id int - pubSubDataSource PubSubDataSource - rootFieldRef int - variables resolve.Variables - visitor *plan.Visitor + id int + pubSubDataSource PubSubDataSource + pubSubDataSourceMatcher PubSubDataSourceMatcherFn + rootFieldRef int + variables resolve.Variables + visitor *plan.Visitor } func (p *Planner) SetID(id int) { @@ -39,20 +40,16 @@ func (p *Planner) DataSourcePlanningBehavior() plan.DataSourcePlanningBehavior { } } -func (p *Planner) Register(visitor *plan.Visitor, configuration plan.DataSourceConfiguration[PubSubDataSource], _ plan.DataSourcePlannerConfiguration) error { +func (p *Planner) Register(visitor *plan.Visitor, configuration plan.DataSourceConfiguration[PubSubDataSourceMatcherFn], _ plan.DataSourcePlannerConfiguration) error { p.visitor = visitor visitor.Walker.RegisterEnterFieldVisitor(p) visitor.Walker.RegisterEnterDocumentVisitor(p) - p.pubSubDataSource = configuration.CustomConfiguration() + p.pubSubDataSourceMatcher = configuration.CustomConfiguration() return nil } func (p *Planner) ConfigureFetch() resolve.FetchConfiguration { - if p.pubSubDataSource == nil { - return resolve.FetchConfiguration{} - } - var dataSource resolve.DataSource dataSource, err := p.pubSubDataSource.ResolveDataSource() @@ -84,11 +81,6 @@ func (p *Planner) ConfigureFetch() resolve.FetchConfiguration { } func (p *Planner) ConfigureSubscription() plan.SubscriptionConfiguration { - if p.pubSubDataSource == nil { - // p.visitor.Walker.StopWithInternalErr(fmt.Errorf("failed to configure subscription: event manager is nil")) - return plan.SubscriptionConfiguration{} - } - dataSource, err := p.pubSubDataSource.ResolveDataSourceSubscription() if err != nil { p.visitor.Walker.StopWithInternalErr(fmt.Errorf("failed to get resolve data source subscription: %w", err)) @@ -192,8 +184,10 @@ func (p *Planner) EnterField(ref int) { return p.extractArgumentTemplate(ref, tpl) } - err := p.pubSubDataSource.SetCurrentField(typeName, fieldName, extractFn) + ds, err := p.pubSubDataSourceMatcher(typeName, fieldName, extractFn) if err != nil { p.visitor.Walker.StopWithInternalErr(err) } + + p.pubSubDataSource = ds } diff --git a/router/pkg/pubsub/datasource/provider.go b/router/pkg/pubsub/datasource/provider.go index d0848816f0..25ee496441 100644 --- a/router/pkg/pubsub/datasource/provider.go +++ b/router/pkg/pubsub/datasource/provider.go @@ -2,6 +2,8 @@ package datasource import ( "context" + "fmt" + "slices" nodev1 "github.com/wundergraph/cosmo/router/gen/proto/wg/cosmo/node/v1" "github.com/wundergraph/cosmo/router/pkg/config" @@ -18,3 +20,55 @@ type PubSubProvider interface { Startup(ctx context.Context) error Shutdown(ctx context.Context) error } + +type PubSubProviderBuilder[A any] interface { + Id() string + BuildProviders(usedProviders []string) (map[string]A, []PubSubProvider, error) + GetMatcher(data []EngineEventConfiguration, adapters map[string]A) PubSubDataSourceMatcherFn +} + +func BuildProviderDataSources[A any](providerBuilder PubSubProviderBuilder[A], ctx context.Context, in *nodev1.DataSourceConfiguration, dsMeta *plan.DataSourceMetadata, config config.EventsConfiguration, logger *zap.Logger, hostName string, routerListenAddr string, data []EngineEventConfiguration) ([]PubSubProvider, []plan.DataSource, error) { + if len(data) == 0 { + return nil, nil, nil + } + + // Collect all used providers + var usedProviders []string + for _, event := range data { + providerId := event.GetEngineEventConfiguration().GetProviderId() + if !slices.Contains(usedProviders, providerId) { + usedProviders = append(usedProviders, providerId) + } + } + + // Initialize used providers + adapters, pubSubProviders, err := providerBuilder.BuildProviders(usedProviders) + if err != nil { + return nil, nil, err + } + + // Verify that all used providers are defined + definedProviders := make([]string, 0, len(adapters)) + for providerID := range adapters { + definedProviders = append(definedProviders, providerID) + } + for _, event := range data { + if !slices.Contains(definedProviders, event.GetEngineEventConfiguration().GetProviderId()) { + return nil, nil, fmt.Errorf(providerBuilder.Id()+" provider with ID %s is not defined", event.GetEngineEventConfiguration().GetProviderId()) + } + } + + // Create data sources + matcherFn := providerBuilder.GetMatcher(data, adapters) + out, err := plan.NewDataSourceConfiguration( + in.Id+"-"+providerBuilder.Id(), + NewFactory(ctx, matcherFn), + GetFilteredDataSourceMetadata(data, dsMeta), + matcherFn, + ) + if err != nil { + return nil, nil, err + } + + return pubSubProviders, []plan.DataSource{out}, nil +} diff --git a/router/pkg/pubsub/kafka/provider.go b/router/pkg/pubsub/kafka/provider.go index 5b9f2a3022..8d6f3b2cee 100644 --- a/router/pkg/pubsub/kafka/provider.go +++ b/router/pkg/pubsub/kafka/provider.go @@ -3,8 +3,6 @@ package kafka import ( "context" "crypto/tls" - "fmt" - "slices" "time" "github.com/twmb/franz-go/pkg/kgo" @@ -17,6 +15,8 @@ import ( "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/plan" ) +const providerId = "kafka" + // buildKafkaOptions creates a list of kgo.Opt options for the given Kafka event source configuration. // Only general options like TLS, SASL, etc. are configured here. Specific options like topics, etc. are // configured in the KafkaPubSub implementation. @@ -45,94 +45,19 @@ func buildKafkaOptions(eventSource config.KafkaEventSource) ([]kgo.Opt, error) { return opts, nil } -func GetProviderDataSources(ctx context.Context, in *nodev1.DataSourceConfiguration, dsMeta *plan.DataSourceMetadata, config config.EventsConfiguration, logger *zap.Logger, hostName string, routerListenAddr string) ([]datasource.PubSubProvider, []plan.DataSource, error) { - providers := make(map[string]AdapterInterface) - pubSubProviders := []datasource.PubSubProvider{} - definedProviders := make(map[string]bool) - for _, provider := range config.Providers.Kafka { - definedProviders[provider.ID] = true +func GetProvider(ctx context.Context, in *nodev1.DataSourceConfiguration, dsMeta *plan.DataSourceMetadata, config config.EventsConfiguration, logger *zap.Logger, hostName string, routerListenAddr string) ([]datasource.PubSubProvider, []plan.DataSource, error) { + kafkaData := make([]datasource.EngineEventConfiguration, 0, len(in.GetCustomEvents().GetKafka())) + for _, kafkaEvent := range in.GetCustomEvents().GetKafka() { + kafkaData = append(kafkaData, kafkaEvent) } - if kafkaData := in.GetCustomEvents().GetKafka(); kafkaData != nil { - // prepare providers and root fields - usedProviders := make(map[string]bool) - rootFields := make(map[string][]string) - for _, event := range kafkaData { - providerId := event.EngineEventConfiguration.ProviderId - if !definedProviders[providerId] { - return nil, nil, fmt.Errorf("failed to find Kafka provider with ID %s", providerId) - } - usedProviders[providerId] = true - typeName := event.GetEngineEventConfiguration().GetTypeName() - fieldName := event.GetEngineEventConfiguration().GetFieldName() - if _, ok := rootFields[typeName]; !ok { - rootFields[typeName] = []string{} - } - rootFields[typeName] = append(rootFields[typeName], fieldName) - } - - // create providers only if they are used - for _, provider := range config.Providers.Kafka { - if !usedProviders[provider.ID] { - continue - } - options, err := buildKafkaOptions(provider) - if err != nil { - return nil, nil, fmt.Errorf("failed to build options for Kafka provider with ID \"%s\": %w", provider.ID, err) - } - adapter, err := NewAdapter(ctx, logger, options) - if err != nil { - return nil, nil, fmt.Errorf("failed to create adapter for Kafka provider with ID \"%s\": %w", provider.ID, err) - } - providers[provider.ID] = adapter - pubSubProvider := &PubSubProvider{ - id: provider.ID, - Adapter: adapter, - Logger: logger, - } - pubSubProviders = append(pubSubProviders, pubSubProvider) - } - - // create data sources - ds := &PubSubDataSource{ - EventConfigurations: kafkaData, - KafkaAdapters: providers, - } - // filter dsMeta.RootNodes - newRootNodes := []plan.TypeField{} - for _, node := range dsMeta.RootNodes { - newRootNode := plan.TypeField{ - TypeName: node.TypeName, - FieldNames: []string{}, - ExternalFieldNames: node.ExternalFieldNames, - } - for _, fieldName := range node.FieldNames { - if slices.Contains(rootFields[node.TypeName], fieldName) { - newRootNode.FieldNames = append(newRootNode.FieldNames, fieldName) - } - } - newRootNodes = append(newRootNodes, newRootNode) - } - newDsMets := *dsMeta - newDsMets.RootNodes = newRootNodes - - out, err := plan.NewDataSourceConfiguration( - in.Id+"-kafka", - datasource.NewFactory(ctx, datasource.PubSubDataSource(ds)), - &newDsMets, - datasource.PubSubDataSource(ds), - ) - if err != nil { - return nil, nil, err - } - - return pubSubProviders, []plan.DataSource{out}, nil + providerBuilder := &PubSubProviderBuilder{ + ctx: ctx, + config: config, + logger: logger, + hostName: hostName, + routerListenAddr: routerListenAddr, } - - return nil, nil, nil -} - -func GetProvider(ctx context.Context, in *nodev1.DataSourceConfiguration, dsMeta *plan.DataSourceMetadata, config config.EventsConfiguration, logger *zap.Logger, hostName string, routerListenAddr string) ([]datasource.PubSubProvider, []plan.DataSource, error) { - return GetProviderDataSources(ctx, in, dsMeta, config, logger, hostName, routerListenAddr) + return datasource.BuildProviderDataSources(providerBuilder, ctx, in, dsMeta, config, logger, hostName, routerListenAddr, kafkaData) } type PubSubProvider struct { diff --git a/router/pkg/pubsub/kafka/provider_builder.go b/router/pkg/pubsub/kafka/provider_builder.go new file mode 100644 index 0000000000..8f4559192b --- /dev/null +++ b/router/pkg/pubsub/kafka/provider_builder.go @@ -0,0 +1,83 @@ +package kafka + +import ( + "context" + "fmt" + "slices" + + nodev1 "github.com/wundergraph/cosmo/router/gen/proto/wg/cosmo/node/v1" + "github.com/wundergraph/cosmo/router/pkg/config" + "github.com/wundergraph/cosmo/router/pkg/pubsub/datasource" + "go.uber.org/zap" +) + +var _ datasource.PubSubProviderBuilder[AdapterInterface] = &PubSubProviderBuilder{} + +type PubSubProviderBuilder struct { + ctx context.Context + config config.EventsConfiguration + logger *zap.Logger + hostName string + routerListenAddr string +} + +func (p *PubSubProviderBuilder) Id() string { + return providerId +} + +func (p *PubSubProviderBuilder) GetMatcher(data []datasource.EngineEventConfiguration, adapters map[string]AdapterInterface) datasource.PubSubDataSourceMatcherFn { + return func(typeName string, fieldName string, extractFn datasource.ArgumentTemplateCallback) (datasource.PubSubDataSource, error) { + for _, event := range data { + kafkaEvent, ok := event.(*nodev1.KafkaEventConfiguration) + if !ok { + continue + } + if kafkaEvent.GetEngineEventConfiguration().GetTypeName() == typeName && kafkaEvent.GetEngineEventConfiguration().GetFieldName() == fieldName { + providerId := kafkaEvent.GetEngineEventConfiguration().GetProviderId() + return &PubSubDataSource{ + EventConfiguration: kafkaEvent, + KafkaAdapter: adapters[providerId], + }, nil + } + } + return nil, fmt.Errorf("failed to find Kafka event configuration for typeName: %s, fieldName: %s", typeName, fieldName) + } +} + +func (p *PubSubProviderBuilder) BuildProviders(usedProviders []string) (map[string]AdapterInterface, []datasource.PubSubProvider, error) { + adapters := make(map[string]AdapterInterface) + pubSubProviders := []datasource.PubSubProvider{} + + // create providers + for _, provider := range p.config.Providers.Kafka { + if usedProviders != nil && !slices.Contains(usedProviders, provider.ID) { + continue + } + adapter, pubSubProvider, err := buildProvider(p.ctx, provider, p.logger) + if err != nil { + return nil, nil, err + } + adapters[provider.ID] = adapter + pubSubProviders = append(pubSubProviders, pubSubProvider) + } + + return adapters, pubSubProviders, nil +} + +func buildProvider(ctx context.Context, provider config.KafkaEventSource, logger *zap.Logger) (AdapterInterface, datasource.PubSubProvider, error) { + options, err := buildKafkaOptions(provider) + if err != nil { + return nil, nil, fmt.Errorf("failed to build options for Kafka provider with ID \"%s\": %w", provider.ID, err) + } + adapter, err := NewAdapter(ctx, logger, options) + if err != nil { + return nil, nil, fmt.Errorf("failed to create adapter for Kafka provider with ID \"%s\": %w", provider.ID, err) + } + pubSubProvider := &PubSubProvider{ + id: provider.ID, + Adapter: adapter, + Logger: logger, + } + + return adapter, pubSubProvider, nil +} diff --git a/router/pkg/pubsub/kafka/provider_test.go b/router/pkg/pubsub/kafka/provider_test.go index f2a2e751ab..871ad6b614 100644 --- a/router/pkg/pubsub/kafka/provider_test.go +++ b/router/pkg/pubsub/kafka/provider_test.go @@ -132,7 +132,7 @@ func TestGetProvider(t *testing.T) { provider, _, err := GetProvider(ctx, in, dsMeta, cfg, logger, "host", "addr") require.Error(t, err) require.Nil(t, provider) - assert.Contains(t, err.Error(), "failed to find Kafka provider with ID") + assert.Contains(t, err.Error(), "provider with ID unknown is not defined") }) t.Run("creates provider with configured adapters", func(t *testing.T) { diff --git a/router/pkg/pubsub/kafka/pubsub_datasource.go b/router/pkg/pubsub/kafka/pubsub_datasource.go index 8cc1d1ef9d..a6b6db5165 100644 --- a/router/pkg/pubsub/kafka/pubsub_datasource.go +++ b/router/pkg/pubsub/kafka/pubsub_datasource.go @@ -5,39 +5,12 @@ import ( "fmt" nodev1 "github.com/wundergraph/cosmo/router/gen/proto/wg/cosmo/node/v1" - "github.com/wundergraph/cosmo/router/pkg/pubsub/datasource" "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/resolve" ) type PubSubDataSource struct { - EventConfiguration *nodev1.KafkaEventConfiguration - EventConfigurations []*nodev1.KafkaEventConfiguration - KafkaAdapters map[string]AdapterInterface -} - -func (c *PubSubDataSource) SetCurrentField(typeName string, fieldName string, extractFn datasource.ArgumentTemplateCallback) error { - for _, event := range c.EventConfigurations { - if event.GetEngineEventConfiguration().GetTypeName() == typeName && event.GetEngineEventConfiguration().GetFieldName() == fieldName { - var newTopics []string - for _, topic := range event.GetTopics() { - newTopic, err := extractFn(topic) - if err != nil { - return err - } - newTopics = append(newTopics, newTopic) - } - event.Topics = newTopics - c.EventConfiguration = event - - return nil - } - } - - if c.EventConfiguration == nil { - return fmt.Errorf("failed to find event configuration for typeName: %s, fieldName: %s", typeName, fieldName) - } - - return nil + EventConfiguration *nodev1.KafkaEventConfiguration + KafkaAdapter AdapterInterface } func (c *PubSubDataSource) EngineEventConfiguration() *nodev1.EngineEventConfiguration { @@ -51,7 +24,7 @@ func (c *PubSubDataSource) ResolveDataSource() (resolve.DataSource, error) { switch eventType { case nodev1.EventType_PUBLISH: dataSource = &PublishDataSource{ - pubSub: c.KafkaAdapters[c.EventConfiguration.GetEngineEventConfiguration().GetProviderId()], + pubSub: c.KafkaAdapter, } default: return nil, fmt.Errorf("failed to configure fetch: invalid event type \"%s\" for Kafka", eventType.String()) @@ -82,7 +55,7 @@ func (c *PubSubDataSource) ResolveDataSourceInput(eventData []byte) (string, err func (c *PubSubDataSource) ResolveDataSourceSubscription() (resolve.SubscriptionDataSource, error) { return &SubscriptionDataSource{ - pubSub: c.KafkaAdapters[c.EventConfiguration.GetEngineEventConfiguration().GetProviderId()], + pubSub: c.KafkaAdapter, }, nil } diff --git a/router/pkg/pubsub/kafka/pubsub_datasource_test.go b/router/pkg/pubsub/kafka/pubsub_datasource_test.go index fb3476ad0a..cd10a1eadb 100644 --- a/router/pkg/pubsub/kafka/pubsub_datasource_test.go +++ b/router/pkg/pubsub/kafka/pubsub_datasource_test.go @@ -30,11 +30,11 @@ func TestKafkaPubSubDataSource(t *testing.T) { adapter := &Adapter{} pubsub := &PubSubDataSource{ EventConfiguration: kafkaCfg, - KafkaAdapters: map[string]AdapterInterface{kafkaCfg.GetEngineEventConfiguration().GetProviderId(): adapter}, + KafkaAdapter: adapter, } // Run the standard test suite - pubsubtest.VerifyPubSubDataSourceImplementation(t, pubsub, "TestType", "testField") + pubsubtest.VerifyPubSubDataSourceImplementation(t, pubsub) } // TestPubSubDataSourceWithMockAdapter tests the PubSubDataSource with a mocked adapter @@ -63,7 +63,7 @@ func TestPubSubDataSourceWithMockAdapter(t *testing.T) { // Create the data source with mock adapter pubsub := &PubSubDataSource{ EventConfiguration: kafkaCfg, - KafkaAdapters: map[string]AdapterInterface{kafkaCfg.GetEngineEventConfiguration().GetProviderId(): mockAdapter}, + KafkaAdapter: mockAdapter, } // Get the data source @@ -105,7 +105,7 @@ func TestPubSubDataSource_GetResolveDataSource_WrongType(t *testing.T) { // Create the data source with mock adapter pubsub := &PubSubDataSource{ EventConfiguration: kafkaCfg, - KafkaAdapters: map[string]AdapterInterface{kafkaCfg.GetEngineEventConfiguration().GetProviderId(): mockAdapter}, + KafkaAdapter: mockAdapter, } // Get the data source diff --git a/router/pkg/pubsub/nats/provider.go b/router/pkg/pubsub/nats/provider.go index 025fb130c5..ad8fb521a8 100644 --- a/router/pkg/pubsub/nats/provider.go +++ b/router/pkg/pubsub/nats/provider.go @@ -15,6 +15,8 @@ import ( "go.uber.org/zap" ) +const providerId = "nats" + func buildNatsOptions(eventSource config.NatsEventSource, logger *zap.Logger) ([]nats.Option, error) { opts := []nats.Option{ nats.Name(fmt.Sprintf("cosmo.router.edfs.nats.%s", eventSource.ID)), @@ -88,104 +90,29 @@ func transformEventConfig(cfg *nodev1.NatsEventConfiguration, fn datasource.Argu return cfg, nil } -type PubSubProvider struct { - id string - EventConfiguration []*nodev1.NatsEventConfiguration - Logger *zap.Logger - Adapter AdapterInterface -} - -func (c *PubSubProvider) Id() string { - return c.id -} - -func GetProviderDataSources(ctx context.Context, in *nodev1.DataSourceConfiguration, dsMeta *plan.DataSourceMetadata, config config.EventsConfiguration, logger *zap.Logger, hostName string, routerListenAddr string) ([]datasource.PubSubProvider, []plan.DataSource, error) { - providers := make(map[string]AdapterInterface) - pubSubProviders := []datasource.PubSubProvider{} - definedProviders := make(map[string]bool) - for _, provider := range config.Providers.Nats { - definedProviders[provider.ID] = true +func GetProvider(ctx context.Context, in *nodev1.DataSourceConfiguration, dsMeta *plan.DataSourceMetadata, config config.EventsConfiguration, logger *zap.Logger, hostName string, routerListenAddr string) ([]datasource.PubSubProvider, []plan.DataSource, error) { + natsData := make([]datasource.EngineEventConfiguration, 0, len(in.GetCustomEvents().GetNats())) + for _, natsEvent := range in.GetCustomEvents().GetNats() { + natsData = append(natsData, natsEvent) } - if natsData := in.GetCustomEvents().GetNats(); natsData != nil { - // prepare providers and root fields - usedProviders := make(map[string]bool) - rootFields := make(map[string][]string) - for _, event := range natsData { - providerId := event.EngineEventConfiguration.ProviderId - if !definedProviders[providerId] { - return nil, nil, fmt.Errorf("failed to find Nats provider with ID %s", providerId) - } - usedProviders[providerId] = true - typeName := event.GetEngineEventConfiguration().GetTypeName() - fieldName := event.GetEngineEventConfiguration().GetFieldName() - if _, ok := rootFields[typeName]; !ok { - rootFields[typeName] = []string{} - } - rootFields[typeName] = append(rootFields[typeName], fieldName) - } - - // create providers only if they are used - for _, provider := range config.Providers.Nats { - if !usedProviders[provider.ID] { - continue - } - options, err := buildNatsOptions(provider, logger) - if err != nil { - return nil, nil, fmt.Errorf("failed to build options for Nats provider with ID \"%s\": %w", provider.ID, err) - } - adapter, err := NewAdapter(ctx, logger, provider.URL, options, hostName, routerListenAddr) - if err != nil { - return nil, nil, fmt.Errorf("failed to create adapter for Nats provider with ID \"%s\": %w", provider.ID, err) - } - providers[provider.ID] = adapter - pubSubProvider := &PubSubProvider{ - id: provider.ID, - Adapter: adapter, - } - pubSubProviders = append(pubSubProviders, pubSubProvider) - } - - // create data sources - ds := &PubSubDataSource{ - EventConfigurations: natsData, - NatsAdapters: providers, - } - // filter dsMeta.RootNodes - newRootNodes := []plan.TypeField{} - for _, node := range dsMeta.RootNodes { - newRootNode := plan.TypeField{ - TypeName: node.TypeName, - FieldNames: []string{}, - ExternalFieldNames: node.ExternalFieldNames, - } - for _, fieldName := range node.FieldNames { - if slices.Contains(rootFields[node.TypeName], fieldName) { - newRootNode.FieldNames = append(newRootNode.FieldNames, fieldName) - } - } - newRootNodes = append(newRootNodes, newRootNode) - } - newDsMets := *dsMeta - newDsMets.RootNodes = newRootNodes - - out, err := plan.NewDataSourceConfiguration( - in.Id+"-nats", - datasource.NewFactory(ctx, datasource.PubSubDataSource(ds)), - &newDsMets, - datasource.PubSubDataSource(ds), - ) - if err != nil { - return nil, nil, err - } - - return pubSubProviders, []plan.DataSource{out}, nil + providerBuilder := &PubSubProviderBuilder{ + ctx: ctx, + config: config, + logger: logger, + hostName: hostName, + routerListenAddr: routerListenAddr, } + return datasource.BuildProviderDataSources(providerBuilder, ctx, in, dsMeta, config, logger, hostName, routerListenAddr, natsData) +} - return nil, nil, nil +type PubSubProvider struct { + id string + Adapter AdapterInterface + Logger *zap.Logger } -func GetProvider(ctx context.Context, in *nodev1.DataSourceConfiguration, dsMeta *plan.DataSourceMetadata, config config.EventsConfiguration, logger *zap.Logger, hostName string, routerListenAddr string) ([]datasource.PubSubProvider, []plan.DataSource, error) { - return GetProviderDataSources(ctx, in, dsMeta, config, logger, hostName, routerListenAddr) +func (c *PubSubProvider) Id() string { + return c.id } func (c *PubSubProvider) Startup(ctx context.Context) error { diff --git a/router/pkg/pubsub/nats/provider_builder.go b/router/pkg/pubsub/nats/provider_builder.go new file mode 100644 index 0000000000..efd69ea148 --- /dev/null +++ b/router/pkg/pubsub/nats/provider_builder.go @@ -0,0 +1,88 @@ +package nats + +import ( + "context" + "fmt" + "slices" + + nodev1 "github.com/wundergraph/cosmo/router/gen/proto/wg/cosmo/node/v1" + "github.com/wundergraph/cosmo/router/pkg/config" + "github.com/wundergraph/cosmo/router/pkg/pubsub/datasource" + "go.uber.org/zap" +) + +var _ datasource.PubSubProviderBuilder[AdapterInterface] = &PubSubProviderBuilder{} + +type PubSubProviderBuilder struct { + ctx context.Context + config config.EventsConfiguration + logger *zap.Logger + hostName string + routerListenAddr string +} + +func (p *PubSubProviderBuilder) Id() string { + return providerId +} + +func (p *PubSubProviderBuilder) GetMatcher(data []datasource.EngineEventConfiguration, adapters map[string]AdapterInterface) datasource.PubSubDataSourceMatcherFn { + return func(typeName string, fieldName string, extractFn datasource.ArgumentTemplateCallback) (datasource.PubSubDataSource, error) { + for _, event := range data { + natsEvent, ok := event.(*nodev1.NatsEventConfiguration) + if !ok { + continue + } + + if natsEvent.GetEngineEventConfiguration().GetTypeName() == typeName && natsEvent.GetEngineEventConfiguration().GetFieldName() == fieldName { + transformedEventConfig, err := transformEventConfig(natsEvent, extractFn) + if err != nil { + return nil, fmt.Errorf("failed to transform event configuration for typeName: %s, fieldName: %s: %w", typeName, fieldName, err) + } + providerId := natsEvent.GetEngineEventConfiguration().GetProviderId() + return &PubSubDataSource{ + EventConfiguration: transformedEventConfig, + NatsAdapter: adapters[providerId], + }, nil + } + } + return nil, fmt.Errorf("failed to find Nats event configuration for typeName: %s, fieldName: %s", typeName, fieldName) + } +} + +func (p *PubSubProviderBuilder) BuildProviders(usedProviders []string) (map[string]AdapterInterface, []datasource.PubSubProvider, error) { + adapters := make(map[string]AdapterInterface) + pubSubProviders := []datasource.PubSubProvider{} + + // create providers + for _, provider := range p.config.Providers.Nats { + if usedProviders != nil && !slices.Contains(usedProviders, provider.ID) { + continue + } + adapter, pubSubProvider, err := buildProvider(p.ctx, provider, p.config, p.logger, p.hostName, p.routerListenAddr) + if err != nil { + return nil, nil, err + } + adapters[provider.ID] = adapter + pubSubProviders = append(pubSubProviders, pubSubProvider) + } + + return adapters, pubSubProviders, nil +} + +func buildProvider(ctx context.Context, provider config.NatsEventSource, config config.EventsConfiguration, logger *zap.Logger, hostName string, routerListenAddr string) (AdapterInterface, datasource.PubSubProvider, error) { + options, err := buildNatsOptions(provider, logger) + if err != nil { + return nil, nil, fmt.Errorf("failed to build options for Nats provider with ID \"%s\": %w", provider.ID, err) + } + adapter, err := NewAdapter(ctx, logger, provider.URL, options, hostName, routerListenAddr) + if err != nil { + return nil, nil, fmt.Errorf("failed to create adapter for Nats provider with ID \"%s\": %w", provider.ID, err) + } + pubSubProvider := &PubSubProvider{ + id: provider.ID, + Adapter: adapter, + Logger: logger, + } + + return adapter, pubSubProvider, nil +} diff --git a/router/pkg/pubsub/nats/provider_test.go b/router/pkg/pubsub/nats/provider_test.go index e613fb5b74..599c383f8f 100644 --- a/router/pkg/pubsub/nats/provider_test.go +++ b/router/pkg/pubsub/nats/provider_test.go @@ -201,28 +201,14 @@ func TestGetProvider(t *testing.T) { provider, _, err := GetProvider(ctx, in, dsMeta, cfg, logger, "host", "addr") require.Error(t, err) require.Nil(t, provider) - assert.Contains(t, err.Error(), "failed to find Nats provider with ID") + assert.Contains(t, err.Error(), "provider with ID unknown is not defined") }) } func TestPubSubProvider_FindPubSubDataSource(t *testing.T) { mockNats := &mockAdapter{} - providerId := "test-provider" - typeName := "TestType" - fieldName := "testField" provider := &PubSubProvider{ - EventConfiguration: []*nodev1.NatsEventConfiguration{ - { - EngineEventConfiguration: &nodev1.EngineEventConfiguration{ - TypeName: typeName, - FieldName: fieldName, - ProviderId: providerId, - Type: nodev1.EventType_PUBLISH, - }, - Subjects: []string{"test.subject"}, - }, - }, Logger: zap.NewNop(), Adapter: mockNats, } diff --git a/router/pkg/pubsub/nats/pubsub_datasource.go b/router/pkg/pubsub/nats/pubsub_datasource.go index 08bc553a26..bf2f001345 100644 --- a/router/pkg/pubsub/nats/pubsub_datasource.go +++ b/router/pkg/pubsub/nats/pubsub_datasource.go @@ -5,35 +5,13 @@ import ( "fmt" nodev1 "github.com/wundergraph/cosmo/router/gen/proto/wg/cosmo/node/v1" - "github.com/wundergraph/cosmo/router/pkg/pubsub/datasource" "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/resolve" ) type PubSubDataSource struct { - EventConfiguration *nodev1.NatsEventConfiguration - EventConfigurations []*nodev1.NatsEventConfiguration - NatsAdapters map[string]AdapterInterface -} - -func (c *PubSubDataSource) SetCurrentField(typeName string, fieldName string, extractFn datasource.ArgumentTemplateCallback) error { - for _, event := range c.EventConfigurations { - if event.GetEngineEventConfiguration().GetTypeName() == typeName && event.GetEngineEventConfiguration().GetFieldName() == fieldName { - event, err := transformEventConfig(event, extractFn) - if err != nil { - return err - } - c.EventConfiguration = event - - return nil - } - } - - if c.EventConfiguration == nil { - return fmt.Errorf("failed to find event configuration for typeName: %s, fieldName: %s", typeName, fieldName) - } - - return nil + EventConfiguration *nodev1.NatsEventConfiguration + NatsAdapter AdapterInterface } func (c *PubSubDataSource) EngineEventConfiguration() *nodev1.EngineEventConfiguration { @@ -43,16 +21,15 @@ func (c *PubSubDataSource) EngineEventConfiguration() *nodev1.EngineEventConfigu func (c *PubSubDataSource) ResolveDataSource() (resolve.DataSource, error) { var dataSource resolve.DataSource eventType := c.EventConfiguration.GetEngineEventConfiguration().GetType() - providerId := c.EventConfiguration.GetEngineEventConfiguration().GetProviderId() switch eventType { case nodev1.EventType_PUBLISH: dataSource = &NatsPublishDataSource{ - pubSub: c.NatsAdapters[providerId], + pubSub: c.NatsAdapter, } case nodev1.EventType_REQUEST: dataSource = &NatsRequestDataSource{ - pubSub: c.NatsAdapters[providerId], + pubSub: c.NatsAdapter, } default: return nil, fmt.Errorf("failed to configure fetch: invalid event type \"%s\" for Nats", eventType.String()) @@ -83,7 +60,7 @@ func (c *PubSubDataSource) ResolveDataSourceInput(eventData []byte) (string, err func (c *PubSubDataSource) ResolveDataSourceSubscription() (resolve.SubscriptionDataSource, error) { return &SubscriptionSource{ - pubSub: c.NatsAdapters[c.EventConfiguration.GetEngineEventConfiguration().GetProviderId()], + pubSub: c.NatsAdapter, }, nil } diff --git a/router/pkg/pubsub/nats/pubsub_datasource_test.go b/router/pkg/pubsub/nats/pubsub_datasource_test.go index 51fb1b5c25..e48639b0c9 100644 --- a/router/pkg/pubsub/nats/pubsub_datasource_test.go +++ b/router/pkg/pubsub/nats/pubsub_datasource_test.go @@ -31,11 +31,11 @@ func TestNatsPubSubDataSource(t *testing.T) { adapter := &Adapter{} pubsub := &PubSubDataSource{ EventConfiguration: natsCfg, - NatsAdapters: map[string]AdapterInterface{"test-provider": adapter}, + NatsAdapter: adapter, } // Run the standard test suite - pubsubtest.VerifyPubSubDataSourceImplementation(t, pubsub, "TestType", "testField") + pubsubtest.VerifyPubSubDataSourceImplementation(t, pubsub) } func TestPubSubDataSourceWithMockAdapter(t *testing.T) { @@ -63,7 +63,7 @@ func TestPubSubDataSourceWithMockAdapter(t *testing.T) { // Create the data source with mock adapter pubsub := &PubSubDataSource{ EventConfiguration: natsCfg, - NatsAdapters: map[string]AdapterInterface{"test-provider": mockAdapter}, + NatsAdapter: mockAdapter, } // Get the data source @@ -104,7 +104,7 @@ func TestPubSubDataSource_GetResolveDataSource_WrongType(t *testing.T) { // Create the data source with mock adapter pubsub := &PubSubDataSource{ EventConfiguration: natsCfg, - NatsAdapters: map[string]AdapterInterface{"test-provider": mockAdapter}, + NatsAdapter: mockAdapter, } // Get the data source @@ -263,7 +263,7 @@ func TestPubSubDataSource_RequestDataSource(t *testing.T) { // Create the data source with mock adapter pubsub := &PubSubDataSource{ EventConfiguration: natsCfg, - NatsAdapters: map[string]AdapterInterface{"test-provider": mockAdapter}, + NatsAdapter: mockAdapter, } // Get the data source diff --git a/router/pkg/pubsub/pubsub.go b/router/pkg/pubsub/pubsub.go index c3eccfaf1d..af91464e86 100644 --- a/router/pkg/pubsub/pubsub.go +++ b/router/pkg/pubsub/pubsub.go @@ -14,25 +14,18 @@ import ( nodev1 "github.com/wundergraph/cosmo/router/gen/proto/wg/cosmo/node/v1" ) -var additionalProviders []datasource.ProviderFactory - -// RegisterAdditionalProvider registers an additional PubSub provider -func RegisterAdditionalProvider(provider datasource.ProviderFactory) { - additionalProviders = append(additionalProviders, provider) -} - -// GetProviderFactories returns a list of all PubSub implementations -func GetProviderFactories() []datasource.ProviderFactory { - return append([]datasource.ProviderFactory{ +// getProviderFactories returns a list of all PubSub implementations +func getProviderFactories() []datasource.ProviderFactory { + return []datasource.ProviderFactory{ kafka.GetProvider, nats.GetProvider, - }, additionalProviders...) + } } -func GetProviderDataSources(ctx context.Context, in *nodev1.DataSourceConfiguration, dsMeta *plan.DataSourceMetadata, config config.EventsConfiguration, logger *zap.Logger, hostName string, routerListenAddr string) ([]datasource.PubSubProvider, []plan.DataSource, error) { +func GetProvidersDataSources(ctx context.Context, in *nodev1.DataSourceConfiguration, dsMeta *plan.DataSourceMetadata, config config.EventsConfiguration, logger *zap.Logger, hostName string, routerListenAddr string) ([]datasource.PubSubProvider, []plan.DataSource, error) { datasources := []plan.DataSource{} providers := []datasource.PubSubProvider{} - for _, providerFactory := range GetProviderFactories() { + for _, providerFactory := range getProviderFactories() { providerProviders, providerDataSources, err := providerFactory( ctx, in, diff --git a/router/pkg/pubsub/pubsubtest/pubsubtest.go b/router/pkg/pubsub/pubsubtest/pubsubtest.go index 912915634b..09ad3b25b0 100644 --- a/router/pkg/pubsub/pubsubtest/pubsubtest.go +++ b/router/pkg/pubsub/pubsubtest/pubsubtest.go @@ -11,8 +11,7 @@ import ( // VerifyPubSubDataSourceImplementation is a common test function to verify any PubSubDataSource implementation // This function can be used by other packages to test their PubSubDataSource implementations -func VerifyPubSubDataSourceImplementation(t *testing.T, pubSub datasource.PubSubDataSource, typeName, fieldName string) { - pubSub.SetCurrentField(typeName, fieldName, nil) +func VerifyPubSubDataSourceImplementation(t *testing.T, pubSub datasource.PubSubDataSource) { // Test GetEngineEventConfiguration engineEventConfig := pubSub.EngineEventConfiguration() require.NotNil(t, engineEventConfig, "Expected non-nil EngineEventConfiguration") From a24c72b3cca0b1c27e5d0e7132b9eac17a4c75b5 Mon Sep 17 00:00:00 2001 From: Alessandro Pagnin Date: Tue, 13 May 2025 18:22:36 +0200 Subject: [PATCH 052/126] chore: a datasource per event --- router/pkg/pubsub/datasource/datasource.go | 19 +++++------ router/pkg/pubsub/datasource/factory.go | 16 ++++----- router/pkg/pubsub/datasource/planner.go | 32 +++++++++-------- router/pkg/pubsub/datasource/provider.go | 34 +++++++++++------- router/pkg/pubsub/kafka/provider_builder.go | 27 ++++++--------- router/pkg/pubsub/kafka/pubsub_datasource.go | 5 +++ router/pkg/pubsub/nats/provider_builder.go | 36 +++++++------------- router/pkg/pubsub/nats/pubsub_datasource.go | 10 ++++++ 8 files changed, 93 insertions(+), 86 deletions(-) diff --git a/router/pkg/pubsub/datasource/datasource.go b/router/pkg/pubsub/datasource/datasource.go index 0a213bc48d..3f354e8de5 100644 --- a/router/pkg/pubsub/datasource/datasource.go +++ b/router/pkg/pubsub/datasource/datasource.go @@ -30,25 +30,24 @@ type PubSubDataSource interface { ResolveDataSourceSubscription() (resolve.SubscriptionDataSource, error) // ResolveDataSourceSubscriptionInput build the input that will be passed to the engine SubscriptionDataSource ResolveDataSourceSubscriptionInput() (string, error) + // TransformEventData allows the data source to transform the event data using the extractFn + TransformEventData(extractFn ArgumentTemplateCallback) error } type EngineEventConfiguration interface { GetEngineEventConfiguration() *nodev1.EngineEventConfiguration } -type PubSubDataSourceMatcherFn func(typeName string, fieldName string, extractFn ArgumentTemplateCallback) (PubSubDataSource, error) - -func GetFilteredDataSourceMetadata[E EngineEventConfiguration](data []E, dsMeta *plan.DataSourceMetadata) *plan.DataSourceMetadata { +func GetFilteredDataSourceMetadata[E EngineEventConfiguration](event E, dsMeta *plan.DataSourceMetadata) *plan.DataSourceMetadata { // find used root types and fields rootFields := make(map[string][]string) - for _, event := range data { - typeName := event.GetEngineEventConfiguration().GetTypeName() - fieldName := event.GetEngineEventConfiguration().GetFieldName() - if _, ok := rootFields[typeName]; !ok { - rootFields[typeName] = []string{} - } - rootFields[typeName] = append(rootFields[typeName], fieldName) + + typeName := event.GetEngineEventConfiguration().GetTypeName() + fieldName := event.GetEngineEventConfiguration().GetFieldName() + if _, ok := rootFields[typeName]; !ok { + rootFields[typeName] = []string{} } + rootFields[typeName] = append(rootFields[typeName], fieldName) // filter dsMeta.RootNodes newRootNodes := []plan.TypeField{} diff --git a/router/pkg/pubsub/datasource/factory.go b/router/pkg/pubsub/datasource/factory.go index 86c195ad76..c531540102 100644 --- a/router/pkg/pubsub/datasource/factory.go +++ b/router/pkg/pubsub/datasource/factory.go @@ -8,21 +8,21 @@ import ( "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/plan" ) -func NewFactory(executionContext context.Context, pubSubDataSourceMatcher PubSubDataSourceMatcherFn) *Factory { +func NewFactory(executionContext context.Context, pubSubDataSource PubSubDataSource) *Factory { return &Factory{ - pubSubDataSourceMatcher: pubSubDataSourceMatcher, - executionContext: executionContext, + pubSubDataSource: pubSubDataSource, + executionContext: executionContext, } } type Factory struct { - pubSubDataSourceMatcher PubSubDataSourceMatcherFn - executionContext context.Context + pubSubDataSource PubSubDataSource + executionContext context.Context } -func (f *Factory) Planner(_ abstractlogger.Logger) plan.DataSourcePlanner[PubSubDataSourceMatcherFn] { +func (f *Factory) Planner(_ abstractlogger.Logger) plan.DataSourcePlanner[PubSubDataSource] { return &Planner{ - pubSubDataSourceMatcher: f.pubSubDataSourceMatcher, + pubSubDataSource: f.pubSubDataSource, } } @@ -30,6 +30,6 @@ func (f *Factory) Context() context.Context { return f.executionContext } -func (f *Factory) UpstreamSchema(dataSourceConfig plan.DataSourceConfiguration[PubSubDataSourceMatcherFn]) (*ast.Document, bool) { +func (f *Factory) UpstreamSchema(dataSourceConfig plan.DataSourceConfiguration[PubSubDataSource]) (*ast.Document, bool) { return nil, false } diff --git a/router/pkg/pubsub/datasource/planner.go b/router/pkg/pubsub/datasource/planner.go index 95a4e3e131..ddf157d595 100644 --- a/router/pkg/pubsub/datasource/planner.go +++ b/router/pkg/pubsub/datasource/planner.go @@ -12,12 +12,11 @@ import ( ) type Planner struct { - id int - pubSubDataSource PubSubDataSource - pubSubDataSourceMatcher PubSubDataSourceMatcherFn - rootFieldRef int - variables resolve.Variables - visitor *plan.Visitor + id int + pubSubDataSource PubSubDataSource + rootFieldRef int + variables resolve.Variables + visitor *plan.Visitor } func (p *Planner) SetID(id int) { @@ -40,11 +39,11 @@ func (p *Planner) DataSourcePlanningBehavior() plan.DataSourcePlanningBehavior { } } -func (p *Planner) Register(visitor *plan.Visitor, configuration plan.DataSourceConfiguration[PubSubDataSourceMatcherFn], _ plan.DataSourcePlannerConfiguration) error { +func (p *Planner) Register(visitor *plan.Visitor, configuration plan.DataSourceConfiguration[PubSubDataSource], _ plan.DataSourcePlannerConfiguration) error { p.visitor = visitor visitor.Walker.RegisterEnterFieldVisitor(p) visitor.Walker.RegisterEnterDocumentVisitor(p) - p.pubSubDataSourceMatcher = configuration.CustomConfiguration() + p.pubSubDataSource = configuration.CustomConfiguration() return nil } @@ -52,6 +51,11 @@ func (p *Planner) Register(visitor *plan.Visitor, configuration plan.DataSourceC func (p *Planner) ConfigureFetch() resolve.FetchConfiguration { var dataSource resolve.DataSource + if p.pubSubDataSource == nil { + p.visitor.Walker.StopWithInternalErr(fmt.Errorf("data source not set")) + return resolve.FetchConfiguration{} + } + dataSource, err := p.pubSubDataSource.ResolveDataSource() if err != nil { p.visitor.Walker.StopWithInternalErr(fmt.Errorf("failed to get data source: %w", err)) @@ -81,6 +85,11 @@ func (p *Planner) ConfigureFetch() resolve.FetchConfiguration { } func (p *Planner) ConfigureSubscription() plan.SubscriptionConfiguration { + if p.pubSubDataSource == nil { + p.visitor.Walker.StopWithInternalErr(fmt.Errorf("data source not set")) + return plan.SubscriptionConfiguration{} + } + dataSource, err := p.pubSubDataSource.ResolveDataSourceSubscription() if err != nil { p.visitor.Walker.StopWithInternalErr(fmt.Errorf("failed to get resolve data source subscription: %w", err)) @@ -177,17 +186,12 @@ func (p *Planner) EnterField(ref int) { } p.rootFieldRef = ref - fieldName := p.visitor.Operation.FieldNameString(ref) - typeName := p.visitor.Walker.EnclosingTypeDefinition.NameString(p.visitor.Definition) - extractFn := func(tpl string) (string, error) { return p.extractArgumentTemplate(ref, tpl) } - ds, err := p.pubSubDataSourceMatcher(typeName, fieldName, extractFn) + err := p.pubSubDataSource.TransformEventData(extractFn) if err != nil { p.visitor.Walker.StopWithInternalErr(err) } - - p.pubSubDataSource = ds } diff --git a/router/pkg/pubsub/datasource/provider.go b/router/pkg/pubsub/datasource/provider.go index 25ee496441..0190d6d6df 100644 --- a/router/pkg/pubsub/datasource/provider.go +++ b/router/pkg/pubsub/datasource/provider.go @@ -4,6 +4,7 @@ import ( "context" "fmt" "slices" + "strconv" nodev1 "github.com/wundergraph/cosmo/router/gen/proto/wg/cosmo/node/v1" "github.com/wundergraph/cosmo/router/pkg/config" @@ -23,8 +24,8 @@ type PubSubProvider interface { type PubSubProviderBuilder[A any] interface { Id() string - BuildProviders(usedProviders []string) (map[string]A, []PubSubProvider, error) - GetMatcher(data []EngineEventConfiguration, adapters map[string]A) PubSubDataSourceMatcherFn + Providers(usedProviders []string) (map[string]A, []PubSubProvider, error) + DataSource(data EngineEventConfiguration, adapters map[string]A) (PubSubDataSource, error) } func BuildProviderDataSources[A any](providerBuilder PubSubProviderBuilder[A], ctx context.Context, in *nodev1.DataSourceConfiguration, dsMeta *plan.DataSourceMetadata, config config.EventsConfiguration, logger *zap.Logger, hostName string, routerListenAddr string, data []EngineEventConfiguration) ([]PubSubProvider, []plan.DataSource, error) { @@ -42,7 +43,7 @@ func BuildProviderDataSources[A any](providerBuilder PubSubProviderBuilder[A], c } // Initialize used providers - adapters, pubSubProviders, err := providerBuilder.BuildProviders(usedProviders) + adapters, pubSubProviders, err := providerBuilder.Providers(usedProviders) if err != nil { return nil, nil, err } @@ -59,16 +60,23 @@ func BuildProviderDataSources[A any](providerBuilder PubSubProviderBuilder[A], c } // Create data sources - matcherFn := providerBuilder.GetMatcher(data, adapters) - out, err := plan.NewDataSourceConfiguration( - in.Id+"-"+providerBuilder.Id(), - NewFactory(ctx, matcherFn), - GetFilteredDataSourceMetadata(data, dsMeta), - matcherFn, - ) - if err != nil { - return nil, nil, err + var outs []plan.DataSource + for i, event := range data { + pubsubDataSource, err := providerBuilder.DataSource(event, adapters) + if err != nil { + return nil, nil, err + } + out, err := plan.NewDataSourceConfiguration( + in.Id+"-"+providerBuilder.Id()+"-"+strconv.Itoa(i), + NewFactory(ctx, pubsubDataSource), + GetFilteredDataSourceMetadata(event, dsMeta), + pubsubDataSource, + ) + if err != nil { + return nil, nil, err + } + outs = append(outs, out) } - return pubSubProviders, []plan.DataSource{out}, nil + return pubSubProviders, outs, nil } diff --git a/router/pkg/pubsub/kafka/provider_builder.go b/router/pkg/pubsub/kafka/provider_builder.go index 8f4559192b..2974028640 100644 --- a/router/pkg/pubsub/kafka/provider_builder.go +++ b/router/pkg/pubsub/kafka/provider_builder.go @@ -25,26 +25,19 @@ func (p *PubSubProviderBuilder) Id() string { return providerId } -func (p *PubSubProviderBuilder) GetMatcher(data []datasource.EngineEventConfiguration, adapters map[string]AdapterInterface) datasource.PubSubDataSourceMatcherFn { - return func(typeName string, fieldName string, extractFn datasource.ArgumentTemplateCallback) (datasource.PubSubDataSource, error) { - for _, event := range data { - kafkaEvent, ok := event.(*nodev1.KafkaEventConfiguration) - if !ok { - continue - } - if kafkaEvent.GetEngineEventConfiguration().GetTypeName() == typeName && kafkaEvent.GetEngineEventConfiguration().GetFieldName() == fieldName { - providerId := kafkaEvent.GetEngineEventConfiguration().GetProviderId() - return &PubSubDataSource{ - EventConfiguration: kafkaEvent, - KafkaAdapter: adapters[providerId], - }, nil - } - } - return nil, fmt.Errorf("failed to find Kafka event configuration for typeName: %s, fieldName: %s", typeName, fieldName) +func (p *PubSubProviderBuilder) DataSource(data datasource.EngineEventConfiguration, adapters map[string]AdapterInterface) (datasource.PubSubDataSource, error) { + kafkaEvent, ok := data.(*nodev1.KafkaEventConfiguration) + if !ok { + return nil, fmt.Errorf("failed to cast data to KafkaEventConfiguration") } + providerId := kafkaEvent.GetEngineEventConfiguration().GetProviderId() + return &PubSubDataSource{ + EventConfiguration: kafkaEvent, + KafkaAdapter: adapters[providerId], + }, nil } -func (p *PubSubProviderBuilder) BuildProviders(usedProviders []string) (map[string]AdapterInterface, []datasource.PubSubProvider, error) { +func (p *PubSubProviderBuilder) Providers(usedProviders []string) (map[string]AdapterInterface, []datasource.PubSubProvider, error) { adapters := make(map[string]AdapterInterface) pubSubProviders := []datasource.PubSubProvider{} diff --git a/router/pkg/pubsub/kafka/pubsub_datasource.go b/router/pkg/pubsub/kafka/pubsub_datasource.go index a6b6db5165..51c0a834cb 100644 --- a/router/pkg/pubsub/kafka/pubsub_datasource.go +++ b/router/pkg/pubsub/kafka/pubsub_datasource.go @@ -5,6 +5,7 @@ import ( "fmt" nodev1 "github.com/wundergraph/cosmo/router/gen/proto/wg/cosmo/node/v1" + "github.com/wundergraph/cosmo/router/pkg/pubsub/datasource" "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/resolve" ) @@ -72,6 +73,10 @@ func (c *PubSubDataSource) ResolveDataSourceSubscriptionInput() (string, error) return string(object), nil } +func (c *PubSubDataSource) TransformEventData(extractFn datasource.ArgumentTemplateCallback) error { + return nil +} + type SubscriptionEventConfiguration struct { ProviderID string `json:"providerId"` Topics []string `json:"topics"` diff --git a/router/pkg/pubsub/nats/provider_builder.go b/router/pkg/pubsub/nats/provider_builder.go index efd69ea148..3fdfd121c0 100644 --- a/router/pkg/pubsub/nats/provider_builder.go +++ b/router/pkg/pubsub/nats/provider_builder.go @@ -25,31 +25,19 @@ func (p *PubSubProviderBuilder) Id() string { return providerId } -func (p *PubSubProviderBuilder) GetMatcher(data []datasource.EngineEventConfiguration, adapters map[string]AdapterInterface) datasource.PubSubDataSourceMatcherFn { - return func(typeName string, fieldName string, extractFn datasource.ArgumentTemplateCallback) (datasource.PubSubDataSource, error) { - for _, event := range data { - natsEvent, ok := event.(*nodev1.NatsEventConfiguration) - if !ok { - continue - } - - if natsEvent.GetEngineEventConfiguration().GetTypeName() == typeName && natsEvent.GetEngineEventConfiguration().GetFieldName() == fieldName { - transformedEventConfig, err := transformEventConfig(natsEvent, extractFn) - if err != nil { - return nil, fmt.Errorf("failed to transform event configuration for typeName: %s, fieldName: %s: %w", typeName, fieldName, err) - } - providerId := natsEvent.GetEngineEventConfiguration().GetProviderId() - return &PubSubDataSource{ - EventConfiguration: transformedEventConfig, - NatsAdapter: adapters[providerId], - }, nil - } - } - return nil, fmt.Errorf("failed to find Nats event configuration for typeName: %s, fieldName: %s", typeName, fieldName) +func (p *PubSubProviderBuilder) DataSource(data datasource.EngineEventConfiguration, adapters map[string]AdapterInterface) (datasource.PubSubDataSource, error) { + natsEvent, ok := data.(*nodev1.NatsEventConfiguration) + if !ok { + return nil, fmt.Errorf("failed to cast data to NatsEventConfiguration") } + providerId := natsEvent.GetEngineEventConfiguration().GetProviderId() + return &PubSubDataSource{ + EventConfiguration: natsEvent, + NatsAdapter: adapters[providerId], + }, nil } -func (p *PubSubProviderBuilder) BuildProviders(usedProviders []string) (map[string]AdapterInterface, []datasource.PubSubProvider, error) { +func (p *PubSubProviderBuilder) Providers(usedProviders []string) (map[string]AdapterInterface, []datasource.PubSubProvider, error) { adapters := make(map[string]AdapterInterface) pubSubProviders := []datasource.PubSubProvider{} @@ -58,7 +46,7 @@ func (p *PubSubProviderBuilder) BuildProviders(usedProviders []string) (map[stri if usedProviders != nil && !slices.Contains(usedProviders, provider.ID) { continue } - adapter, pubSubProvider, err := buildProvider(p.ctx, provider, p.config, p.logger, p.hostName, p.routerListenAddr) + adapter, pubSubProvider, err := buildProvider(p.ctx, provider, p.logger, p.hostName, p.routerListenAddr) if err != nil { return nil, nil, err } @@ -69,7 +57,7 @@ func (p *PubSubProviderBuilder) BuildProviders(usedProviders []string) (map[stri return adapters, pubSubProviders, nil } -func buildProvider(ctx context.Context, provider config.NatsEventSource, config config.EventsConfiguration, logger *zap.Logger, hostName string, routerListenAddr string) (AdapterInterface, datasource.PubSubProvider, error) { +func buildProvider(ctx context.Context, provider config.NatsEventSource, logger *zap.Logger, hostName string, routerListenAddr string) (AdapterInterface, datasource.PubSubProvider, error) { options, err := buildNatsOptions(provider, logger) if err != nil { return nil, nil, fmt.Errorf("failed to build options for Nats provider with ID \"%s\": %w", provider.ID, err) diff --git a/router/pkg/pubsub/nats/pubsub_datasource.go b/router/pkg/pubsub/nats/pubsub_datasource.go index bf2f001345..e23655300e 100644 --- a/router/pkg/pubsub/nats/pubsub_datasource.go +++ b/router/pkg/pubsub/nats/pubsub_datasource.go @@ -5,6 +5,7 @@ import ( "fmt" nodev1 "github.com/wundergraph/cosmo/router/gen/proto/wg/cosmo/node/v1" + "github.com/wundergraph/cosmo/router/pkg/pubsub/datasource" "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/resolve" ) @@ -85,6 +86,15 @@ func (c *PubSubDataSource) ResolveDataSourceSubscriptionInput() (string, error) return string(object), nil } +func (c *PubSubDataSource) TransformEventData(extractFn datasource.ArgumentTemplateCallback) error { + transformedEventConfig, err := transformEventConfig(c.EventConfiguration, extractFn) + if err != nil { + return err + } + c.EventConfiguration = transformedEventConfig + return nil +} + type StreamConfiguration struct { Consumer string `json:"consumer"` ConsumerInactiveThreshold int32 `json:"consumerInactiveThreshold"` From 57c3d7f88967737402d761ac3e41e76e0ccee66c Mon Sep 17 00:00:00 2001 From: Alessandro Pagnin Date: Thu, 15 May 2025 12:03:03 +0200 Subject: [PATCH 053/126] feat: refactor data source handling and improve provider initialization --- router/core/factoryresolver.go | 32 ++++--- router/pkg/pubsub/datasource/builder.go | 98 +++++++++++++++++++++ router/pkg/pubsub/datasource/datasource.go | 35 -------- router/pkg/pubsub/datasource/planner.go | 2 +- router/pkg/pubsub/datasource/provider.go | 69 +++------------ router/pkg/pubsub/eventdata/build.go | 2 +- router/pkg/pubsub/kafka/provider.go | 67 ++++---------- router/pkg/pubsub/kafka/provider_builder.go | 36 +++++++- router/pkg/pubsub/kafka/provider_test.go | 6 +- router/pkg/pubsub/nats/provider.go | 6 +- router/pkg/pubsub/nats/provider_builder.go | 4 +- router/pkg/pubsub/nats/provider_test.go | 4 +- router/pkg/pubsub/pubsub.go | 40 ++------- 13 files changed, 191 insertions(+), 210 deletions(-) create mode 100644 router/pkg/pubsub/datasource/builder.go diff --git a/router/core/factoryresolver.go b/router/core/factoryresolver.go index 98bc7c3248..b62cf99932 100644 --- a/router/core/factoryresolver.go +++ b/router/core/factoryresolver.go @@ -5,7 +5,6 @@ import ( "encoding/json" "fmt" "net/http" - "net/url" "slices" @@ -432,24 +431,23 @@ func (l *Loader) Load(engineConfig *nodev1.EngineConfiguration, subgraphs []*nod outs = append(outs, out) case nodev1.DataSourceKind_PUBSUB: - var err error - dsMeta := l.dataSourceMetaData(in) - providersDs, pubsubDataSources, err := pubsub.GetProvidersDataSources( - l.ctx, - in, - dsMeta, - routerEngineConfig.Events, - l.logger, - l.resolver.InstanceData().HostName, - l.resolver.InstanceData().ListenAddress, - ) - if err != nil { - return nil, providers, err + for _, providerFactory := range pubsub.ProvidersAndDataSourcesBuilders() { + factoryProviders, factoryDataSources, err := providerFactory( + l.ctx, + in, + dsMeta, + routerEngineConfig.Events, + l.logger, + l.resolver.InstanceData().HostName, + l.resolver.InstanceData().ListenAddress, + ) + if err != nil { + return nil, providers, err + } + providers = append(providers, factoryProviders...) + outs = append(outs, factoryDataSources...) } - outs = append(outs, pubsubDataSources...) - providers = append(providers, providersDs...) - default: return nil, providers, fmt.Errorf("unknown data source type %q", in.Kind) } diff --git a/router/pkg/pubsub/datasource/builder.go b/router/pkg/pubsub/datasource/builder.go new file mode 100644 index 0000000000..90fea6b5a4 --- /dev/null +++ b/router/pkg/pubsub/datasource/builder.go @@ -0,0 +1,98 @@ +package datasource + +import ( + "context" + "fmt" + "slices" + "strconv" + + "github.com/wundergraph/cosmo/router/gen/proto/wg/cosmo/node/v1" + "github.com/wundergraph/cosmo/router/pkg/config" + "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/plan" + "go.uber.org/zap" +) + +func BuildProvidersAndDataSources[A any](providerBuilder PubSubProviderBuilder[A], ctx context.Context, in *nodev1.DataSourceConfiguration, dsMeta *plan.DataSourceMetadata, config config.EventsConfiguration, logger *zap.Logger, hostName string, routerListenAddr string, data []EngineEventConfiguration) ([]PubSubProvider, []plan.DataSource, error) { + if len(data) == 0 { + return nil, nil, nil + } + + // Collect all used providers + var usedProviders []string + for _, event := range data { + providerId := event.GetEngineEventConfiguration().GetProviderId() + if !slices.Contains(usedProviders, providerId) { + usedProviders = append(usedProviders, providerId) + } + } + + // Initialize used providers + adapters, pubSubProviders, err := providerBuilder.Providers(usedProviders) + if err != nil { + return nil, nil, err + } + + // Verify that all used providers are defined + definedProviders := make([]string, 0, len(adapters)) + for providerID := range adapters { + definedProviders = append(definedProviders, providerID) + } + for _, event := range data { + if !slices.Contains(definedProviders, event.GetEngineEventConfiguration().GetProviderId()) { + return nil, nil, fmt.Errorf(providerBuilder.TypeID()+" provider with ID %s is not defined", event.GetEngineEventConfiguration().GetProviderId()) + } + } + + // Create data sources + var outs []plan.DataSource + for i, event := range data { + pubsubDataSource, err := providerBuilder.DataSource(event, adapters) + if err != nil { + return nil, nil, err + } + out, err := plan.NewDataSourceConfiguration( + in.Id+"-"+providerBuilder.TypeID()+"-"+strconv.Itoa(i), + NewFactory(ctx, pubsubDataSource), + getFilteredDataSourceMetadata(event, dsMeta), + pubsubDataSource, + ) + if err != nil { + return nil, nil, err + } + outs = append(outs, out) + } + + return pubSubProviders, outs, nil +} + +func getFilteredDataSourceMetadata[E EngineEventConfiguration](event E, dsMeta *plan.DataSourceMetadata) *plan.DataSourceMetadata { + // find used root types and fields + rootFields := make(map[string][]string) + + typeName := event.GetEngineEventConfiguration().GetTypeName() + fieldName := event.GetEngineEventConfiguration().GetFieldName() + if _, ok := rootFields[typeName]; !ok { + rootFields[typeName] = []string{} + } + rootFields[typeName] = append(rootFields[typeName], fieldName) + + // filter dsMeta.RootNodes + newRootNodes := []plan.TypeField{} + for _, node := range dsMeta.RootNodes { + newRootNode := plan.TypeField{ + TypeName: node.TypeName, + FieldNames: []string{}, + ExternalFieldNames: node.ExternalFieldNames, + } + for _, fieldName := range node.FieldNames { + if slices.Contains(rootFields[node.TypeName], fieldName) { + newRootNode.FieldNames = append(newRootNode.FieldNames, fieldName) + } + } + newRootNodes = append(newRootNodes, newRootNode) + } + newDsMeta := *dsMeta + newDsMeta.RootNodes = newRootNodes + + return &newDsMeta +} diff --git a/router/pkg/pubsub/datasource/datasource.go b/router/pkg/pubsub/datasource/datasource.go index 3f354e8de5..2deeee893b 100644 --- a/router/pkg/pubsub/datasource/datasource.go +++ b/router/pkg/pubsub/datasource/datasource.go @@ -1,10 +1,7 @@ package datasource import ( - "slices" - nodev1 "github.com/wundergraph/cosmo/router/gen/proto/wg/cosmo/node/v1" - "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/plan" "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/resolve" ) @@ -37,35 +34,3 @@ type PubSubDataSource interface { type EngineEventConfiguration interface { GetEngineEventConfiguration() *nodev1.EngineEventConfiguration } - -func GetFilteredDataSourceMetadata[E EngineEventConfiguration](event E, dsMeta *plan.DataSourceMetadata) *plan.DataSourceMetadata { - // find used root types and fields - rootFields := make(map[string][]string) - - typeName := event.GetEngineEventConfiguration().GetTypeName() - fieldName := event.GetEngineEventConfiguration().GetFieldName() - if _, ok := rootFields[typeName]; !ok { - rootFields[typeName] = []string{} - } - rootFields[typeName] = append(rootFields[typeName], fieldName) - - // filter dsMeta.RootNodes - newRootNodes := []plan.TypeField{} - for _, node := range dsMeta.RootNodes { - newRootNode := plan.TypeField{ - TypeName: node.TypeName, - FieldNames: []string{}, - ExternalFieldNames: node.ExternalFieldNames, - } - for _, fieldName := range node.FieldNames { - if slices.Contains(rootFields[node.TypeName], fieldName) { - newRootNode.FieldNames = append(newRootNode.FieldNames, fieldName) - } - } - newRootNodes = append(newRootNodes, newRootNode) - } - newDsMets := *dsMeta - newDsMets.RootNodes = newRootNodes - - return &newDsMets -} diff --git a/router/pkg/pubsub/datasource/planner.go b/router/pkg/pubsub/datasource/planner.go index ddf157d595..c56173b628 100644 --- a/router/pkg/pubsub/datasource/planner.go +++ b/router/pkg/pubsub/datasource/planner.go @@ -150,7 +150,7 @@ func (p *Planner) extractArgumentTemplate(fieldRef int, template string) (string } templateWithVariableTemplateReplacements := template for templateNumber, groups := range matches { - // The first group is the whole template; the second is the period delimited argument path + // The first group is the whole template; the second is the period-delimited argument path if len(groups) != 2 { return "", fmt.Errorf(`argument template #%d defined on field "%s" is invalid: expected 2 matching groups but received %d`, templateNumber+1, fieldNameBytes, len(groups)-1) } diff --git a/router/pkg/pubsub/datasource/provider.go b/router/pkg/pubsub/datasource/provider.go index 0190d6d6df..2aa9abfaf2 100644 --- a/router/pkg/pubsub/datasource/provider.go +++ b/router/pkg/pubsub/datasource/provider.go @@ -2,9 +2,6 @@ package datasource import ( "context" - "fmt" - "slices" - "strconv" nodev1 "github.com/wundergraph/cosmo/router/gen/proto/wg/cosmo/node/v1" "github.com/wundergraph/cosmo/router/pkg/config" @@ -12,71 +9,25 @@ import ( "go.uber.org/zap" ) -type ProviderFactory func(ctx context.Context, in *nodev1.DataSourceConfiguration, dsMeta *plan.DataSourceMetadata, config config.EventsConfiguration, logger *zap.Logger, hostName string, routerListenAddr string) ([]PubSubProvider, []plan.DataSource, error) +type ProvidersAndDataSourcesBuilder func(ctx context.Context, in *nodev1.DataSourceConfiguration, dsMeta *plan.DataSourceMetadata, config config.EventsConfiguration, logger *zap.Logger, hostName string, routerListenAddr string) ([]PubSubProvider, []plan.DataSource, error) type ArgumentTemplateCallback func(tpl string) (string, error) +// PubSubProvider is the interface that the single PubSub provider must implement. type PubSubProvider interface { - Id() string + // ID Get the provider ID as specified in the configuration + ID() string + // Startup is the method called when the provider is started Startup(ctx context.Context) error + // Shutdown is the method called when the provider is shut down Shutdown(ctx context.Context) error } type PubSubProviderBuilder[A any] interface { - Id() string + // TypeID Get the provider type id (e.g. "kafka", "nats") + TypeID() string + // Providers Build the providers and their adapters Providers(usedProviders []string) (map[string]A, []PubSubProvider, error) + // DataSource Build the data source for the given provider and event configuration DataSource(data EngineEventConfiguration, adapters map[string]A) (PubSubDataSource, error) } - -func BuildProviderDataSources[A any](providerBuilder PubSubProviderBuilder[A], ctx context.Context, in *nodev1.DataSourceConfiguration, dsMeta *plan.DataSourceMetadata, config config.EventsConfiguration, logger *zap.Logger, hostName string, routerListenAddr string, data []EngineEventConfiguration) ([]PubSubProvider, []plan.DataSource, error) { - if len(data) == 0 { - return nil, nil, nil - } - - // Collect all used providers - var usedProviders []string - for _, event := range data { - providerId := event.GetEngineEventConfiguration().GetProviderId() - if !slices.Contains(usedProviders, providerId) { - usedProviders = append(usedProviders, providerId) - } - } - - // Initialize used providers - adapters, pubSubProviders, err := providerBuilder.Providers(usedProviders) - if err != nil { - return nil, nil, err - } - - // Verify that all used providers are defined - definedProviders := make([]string, 0, len(adapters)) - for providerID := range adapters { - definedProviders = append(definedProviders, providerID) - } - for _, event := range data { - if !slices.Contains(definedProviders, event.GetEngineEventConfiguration().GetProviderId()) { - return nil, nil, fmt.Errorf(providerBuilder.Id()+" provider with ID %s is not defined", event.GetEngineEventConfiguration().GetProviderId()) - } - } - - // Create data sources - var outs []plan.DataSource - for i, event := range data { - pubsubDataSource, err := providerBuilder.DataSource(event, adapters) - if err != nil { - return nil, nil, err - } - out, err := plan.NewDataSourceConfiguration( - in.Id+"-"+providerBuilder.Id()+"-"+strconv.Itoa(i), - NewFactory(ctx, pubsubDataSource), - GetFilteredDataSourceMetadata(event, dsMeta), - pubsubDataSource, - ) - if err != nil { - return nil, nil, err - } - outs = append(outs, out) - } - - return pubSubProviders, outs, nil -} diff --git a/router/pkg/pubsub/eventdata/build.go b/router/pkg/pubsub/eventdata/build.go index 23d6acf933..3d7e276c0b 100644 --- a/router/pkg/pubsub/eventdata/build.go +++ b/router/pkg/pubsub/eventdata/build.go @@ -9,7 +9,7 @@ import ( ) func BuildEventDataBytes(ref int, operation *ast.Document, variables *resolve.Variables) ([]byte, error) { - // Collect the field arguments for fetch based operations + // Collect the field arguments for fetch-based operations fieldArgs := operation.FieldArguments(ref) var dataBuffer bytes.Buffer dataBuffer.WriteByte('{') diff --git a/router/pkg/pubsub/kafka/provider.go b/router/pkg/pubsub/kafka/provider.go index 8d6f3b2cee..75b1324f72 100644 --- a/router/pkg/pubsub/kafka/provider.go +++ b/router/pkg/pubsub/kafka/provider.go @@ -2,71 +2,23 @@ package kafka import ( "context" - "crypto/tls" - "time" - "github.com/twmb/franz-go/pkg/kgo" - "github.com/twmb/franz-go/pkg/sasl/plain" nodev1 "github.com/wundergraph/cosmo/router/gen/proto/wg/cosmo/node/v1" "github.com/wundergraph/cosmo/router/pkg/config" "github.com/wundergraph/cosmo/router/pkg/pubsub/datasource" - "go.uber.org/zap" - "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/plan" + "go.uber.org/zap" ) const providerId = "kafka" -// buildKafkaOptions creates a list of kgo.Opt options for the given Kafka event source configuration. -// Only general options like TLS, SASL, etc. are configured here. Specific options like topics, etc. are -// configured in the KafkaPubSub implementation. -func buildKafkaOptions(eventSource config.KafkaEventSource) ([]kgo.Opt, error) { - opts := []kgo.Opt{ - kgo.SeedBrokers(eventSource.Brokers...), - // Ensure proper timeouts are set - kgo.ProduceRequestTimeout(10 * time.Second), - kgo.ConnIdleTimeout(60 * time.Second), - } - - if eventSource.TLS != nil && eventSource.TLS.Enabled { - opts = append(opts, - // Configure TLS. Uses SystemCertPool for RootCAs by default. - kgo.DialTLSConfig(new(tls.Config)), - ) - } - - if eventSource.Authentication != nil && eventSource.Authentication.SASLPlain.Username != nil && eventSource.Authentication.SASLPlain.Password != nil { - opts = append(opts, kgo.SASL(plain.Auth{ - User: *eventSource.Authentication.SASLPlain.Username, - Pass: *eventSource.Authentication.SASLPlain.Password, - }.AsMechanism())) - } - - return opts, nil -} - -func GetProvider(ctx context.Context, in *nodev1.DataSourceConfiguration, dsMeta *plan.DataSourceMetadata, config config.EventsConfiguration, logger *zap.Logger, hostName string, routerListenAddr string) ([]datasource.PubSubProvider, []plan.DataSource, error) { - kafkaData := make([]datasource.EngineEventConfiguration, 0, len(in.GetCustomEvents().GetKafka())) - for _, kafkaEvent := range in.GetCustomEvents().GetKafka() { - kafkaData = append(kafkaData, kafkaEvent) - } - providerBuilder := &PubSubProviderBuilder{ - ctx: ctx, - config: config, - logger: logger, - hostName: hostName, - routerListenAddr: routerListenAddr, - } - return datasource.BuildProviderDataSources(providerBuilder, ctx, in, dsMeta, config, logger, hostName, routerListenAddr, kafkaData) -} - type PubSubProvider struct { id string Logger *zap.Logger Adapter AdapterInterface } -func (c *PubSubProvider) Id() string { +func (c *PubSubProvider) ID() string { return c.id } @@ -83,3 +35,18 @@ func (c *PubSubProvider) Shutdown(ctx context.Context) error { } return nil } + +func BuildProvidersAndDataSources(ctx context.Context, in *nodev1.DataSourceConfiguration, dsMeta *plan.DataSourceMetadata, config config.EventsConfiguration, logger *zap.Logger, hostName string, routerListenAddr string) ([]datasource.PubSubProvider, []plan.DataSource, error) { + kafkaData := make([]datasource.EngineEventConfiguration, 0, len(in.GetCustomEvents().GetKafka())) + for _, kafkaEvent := range in.GetCustomEvents().GetKafka() { + kafkaData = append(kafkaData, kafkaEvent) + } + providerBuilder := &PubSubProviderBuilder{ + ctx: ctx, + config: config, + logger: logger, + hostName: hostName, + routerListenAddr: routerListenAddr, + } + return datasource.BuildProvidersAndDataSources(providerBuilder, ctx, in, dsMeta, config, logger, hostName, routerListenAddr, kafkaData) +} diff --git a/router/pkg/pubsub/kafka/provider_builder.go b/router/pkg/pubsub/kafka/provider_builder.go index 2974028640..9a35514e30 100644 --- a/router/pkg/pubsub/kafka/provider_builder.go +++ b/router/pkg/pubsub/kafka/provider_builder.go @@ -2,9 +2,13 @@ package kafka import ( "context" + "crypto/tls" "fmt" "slices" + "time" + "github.com/twmb/franz-go/pkg/kgo" + "github.com/twmb/franz-go/pkg/sasl/plain" nodev1 "github.com/wundergraph/cosmo/router/gen/proto/wg/cosmo/node/v1" "github.com/wundergraph/cosmo/router/pkg/config" "github.com/wundergraph/cosmo/router/pkg/pubsub/datasource" @@ -21,7 +25,7 @@ type PubSubProviderBuilder struct { routerListenAddr string } -func (p *PubSubProviderBuilder) Id() string { +func (p *PubSubProviderBuilder) TypeID() string { return providerId } @@ -43,7 +47,7 @@ func (p *PubSubProviderBuilder) Providers(usedProviders []string) (map[string]Ad // create providers for _, provider := range p.config.Providers.Kafka { - if usedProviders != nil && !slices.Contains(usedProviders, provider.ID) { + if !slices.Contains(usedProviders, provider.ID) { continue } adapter, pubSubProvider, err := buildProvider(p.ctx, provider, p.logger) @@ -57,6 +61,34 @@ func (p *PubSubProviderBuilder) Providers(usedProviders []string) (map[string]Ad return adapters, pubSubProviders, nil } +// buildKafkaOptions creates a list of kgo.Opt options for the given Kafka event source configuration. +// Only general options like TLS, SASL, etc. are configured here. Specific options like topics, etc. are +// configured in the KafkaPubSub implementation. +func buildKafkaOptions(eventSource config.KafkaEventSource) ([]kgo.Opt, error) { + opts := []kgo.Opt{ + kgo.SeedBrokers(eventSource.Brokers...), + // Ensure proper timeouts are set + kgo.ProduceRequestTimeout(10 * time.Second), + kgo.ConnIdleTimeout(60 * time.Second), + } + + if eventSource.TLS != nil && eventSource.TLS.Enabled { + opts = append(opts, + // Configure TLS. Uses SystemCertPool for RootCAs by default. + kgo.DialTLSConfig(new(tls.Config)), + ) + } + + if eventSource.Authentication != nil && eventSource.Authentication.SASLPlain.Username != nil && eventSource.Authentication.SASLPlain.Password != nil { + opts = append(opts, kgo.SASL(plain.Auth{ + User: *eventSource.Authentication.SASLPlain.Username, + Pass: *eventSource.Authentication.SASLPlain.Password, + }.AsMechanism())) + } + + return opts, nil +} + func buildProvider(ctx context.Context, provider config.KafkaEventSource, logger *zap.Logger) (AdapterInterface, datasource.PubSubProvider, error) { options, err := buildKafkaOptions(provider) if err != nil { diff --git a/router/pkg/pubsub/kafka/provider_test.go b/router/pkg/pubsub/kafka/provider_test.go index 871ad6b614..16bbf788e6 100644 --- a/router/pkg/pubsub/kafka/provider_test.go +++ b/router/pkg/pubsub/kafka/provider_test.go @@ -100,7 +100,7 @@ func TestGetProvider(t *testing.T) { cfg := config.EventsConfiguration{} logger := zaptest.NewLogger(t) - provider, _, err := GetProvider(ctx, in, dsMeta, cfg, logger, "host", "addr") + provider, _, err := BuildProvidersAndDataSources(ctx, in, dsMeta, cfg, logger, "host", "addr") require.NoError(t, err) require.Nil(t, provider) }) @@ -129,7 +129,7 @@ func TestGetProvider(t *testing.T) { } logger := zaptest.NewLogger(t) - provider, _, err := GetProvider(ctx, in, dsMeta, cfg, logger, "host", "addr") + provider, _, err := BuildProvidersAndDataSources(ctx, in, dsMeta, cfg, logger, "host", "addr") require.Error(t, err) require.Nil(t, provider) assert.Contains(t, err.Error(), "provider with ID unknown is not defined") @@ -161,7 +161,7 @@ func TestGetProvider(t *testing.T) { logger := zaptest.NewLogger(t) // Create mock adapter for testing - provider, _, err := GetProvider(context.Background(), in, &plan.DataSourceMetadata{}, cfg, logger, "host", "addr") + provider, _, err := BuildProvidersAndDataSources(context.Background(), in, &plan.DataSourceMetadata{}, cfg, logger, "host", "addr") require.NoError(t, err) require.NotNil(t, provider) diff --git a/router/pkg/pubsub/nats/provider.go b/router/pkg/pubsub/nats/provider.go index ad8fb521a8..c0975dcdb8 100644 --- a/router/pkg/pubsub/nats/provider.go +++ b/router/pkg/pubsub/nats/provider.go @@ -90,7 +90,7 @@ func transformEventConfig(cfg *nodev1.NatsEventConfiguration, fn datasource.Argu return cfg, nil } -func GetProvider(ctx context.Context, in *nodev1.DataSourceConfiguration, dsMeta *plan.DataSourceMetadata, config config.EventsConfiguration, logger *zap.Logger, hostName string, routerListenAddr string) ([]datasource.PubSubProvider, []plan.DataSource, error) { +func BuildProvidersAndDataSources(ctx context.Context, in *nodev1.DataSourceConfiguration, dsMeta *plan.DataSourceMetadata, config config.EventsConfiguration, logger *zap.Logger, hostName string, routerListenAddr string) ([]datasource.PubSubProvider, []plan.DataSource, error) { natsData := make([]datasource.EngineEventConfiguration, 0, len(in.GetCustomEvents().GetNats())) for _, natsEvent := range in.GetCustomEvents().GetNats() { natsData = append(natsData, natsEvent) @@ -102,7 +102,7 @@ func GetProvider(ctx context.Context, in *nodev1.DataSourceConfiguration, dsMeta hostName: hostName, routerListenAddr: routerListenAddr, } - return datasource.BuildProviderDataSources(providerBuilder, ctx, in, dsMeta, config, logger, hostName, routerListenAddr, natsData) + return datasource.BuildProvidersAndDataSources(providerBuilder, ctx, in, dsMeta, config, logger, hostName, routerListenAddr, natsData) } type PubSubProvider struct { @@ -111,7 +111,7 @@ type PubSubProvider struct { Logger *zap.Logger } -func (c *PubSubProvider) Id() string { +func (c *PubSubProvider) ID() string { return c.id } diff --git a/router/pkg/pubsub/nats/provider_builder.go b/router/pkg/pubsub/nats/provider_builder.go index 3fdfd121c0..16e530373e 100644 --- a/router/pkg/pubsub/nats/provider_builder.go +++ b/router/pkg/pubsub/nats/provider_builder.go @@ -21,7 +21,7 @@ type PubSubProviderBuilder struct { routerListenAddr string } -func (p *PubSubProviderBuilder) Id() string { +func (p *PubSubProviderBuilder) TypeID() string { return providerId } @@ -43,7 +43,7 @@ func (p *PubSubProviderBuilder) Providers(usedProviders []string) (map[string]Ad // create providers for _, provider := range p.config.Providers.Nats { - if usedProviders != nil && !slices.Contains(usedProviders, provider.ID) { + if !slices.Contains(usedProviders, provider.ID) { continue } adapter, pubSubProvider, err := buildProvider(p.ctx, provider, p.logger, p.hostName, p.routerListenAddr) diff --git a/router/pkg/pubsub/nats/provider_test.go b/router/pkg/pubsub/nats/provider_test.go index 599c383f8f..2f4e360371 100644 --- a/router/pkg/pubsub/nats/provider_test.go +++ b/router/pkg/pubsub/nats/provider_test.go @@ -169,7 +169,7 @@ func TestGetProvider(t *testing.T) { cfg := config.EventsConfiguration{} logger := zaptest.NewLogger(t) - provider, _, err := GetProvider(ctx, in, dsMeta, cfg, logger, "host", "addr") + provider, _, err := BuildProvidersAndDataSources(ctx, in, dsMeta, cfg, logger, "host", "addr") require.NoError(t, err) require.Nil(t, provider) }) @@ -198,7 +198,7 @@ func TestGetProvider(t *testing.T) { } logger := zaptest.NewLogger(t) - provider, _, err := GetProvider(ctx, in, dsMeta, cfg, logger, "host", "addr") + provider, _, err := BuildProvidersAndDataSources(ctx, in, dsMeta, cfg, logger, "host", "addr") require.Error(t, err) require.Nil(t, provider) assert.Contains(t, err.Error(), "provider with ID unknown is not defined") diff --git a/router/pkg/pubsub/pubsub.go b/router/pkg/pubsub/pubsub.go index af91464e86..914450bd98 100644 --- a/router/pkg/pubsub/pubsub.go +++ b/router/pkg/pubsub/pubsub.go @@ -1,45 +1,15 @@ package pubsub import ( - "context" - - "github.com/wundergraph/cosmo/router/pkg/config" "github.com/wundergraph/cosmo/router/pkg/pubsub/datasource" - "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/plan" - "go.uber.org/zap" - "github.com/wundergraph/cosmo/router/pkg/pubsub/kafka" "github.com/wundergraph/cosmo/router/pkg/pubsub/nats" - - nodev1 "github.com/wundergraph/cosmo/router/gen/proto/wg/cosmo/node/v1" ) -// getProviderFactories returns a list of all PubSub implementations -func getProviderFactories() []datasource.ProviderFactory { - return []datasource.ProviderFactory{ - kafka.GetProvider, - nats.GetProvider, - } -} - -func GetProvidersDataSources(ctx context.Context, in *nodev1.DataSourceConfiguration, dsMeta *plan.DataSourceMetadata, config config.EventsConfiguration, logger *zap.Logger, hostName string, routerListenAddr string) ([]datasource.PubSubProvider, []plan.DataSource, error) { - datasources := []plan.DataSource{} - providers := []datasource.PubSubProvider{} - for _, providerFactory := range getProviderFactories() { - providerProviders, providerDataSources, err := providerFactory( - ctx, - in, - dsMeta, - config, - logger, - hostName, - routerListenAddr, - ) - if err != nil { - return nil, nil, err - } - providers = append(providers, providerProviders...) - datasources = append(datasources, providerDataSources...) +// ProvidersAndDataSourcesBuilders returns a list of all PubSub builders +func ProvidersAndDataSourcesBuilders() []datasource.ProvidersAndDataSourcesBuilder { + return []datasource.ProvidersAndDataSourcesBuilder{ + kafka.BuildProvidersAndDataSources, + nats.BuildProvidersAndDataSources, } - return providers, datasources, nil } From 56217b04e9f0c174ee097f5325f8318c84266cc4 Mon Sep 17 00:00:00 2001 From: Alessandro Pagnin Date: Thu, 15 May 2025 12:09:44 +0200 Subject: [PATCH 054/126] refactor: simplify BuildProvidersAndDataSources function signature and remove unused StringParser --- router/pkg/pubsub/datasource/builder.go | 12 +++++++++--- router/pkg/pubsub/datasource/planner.go | 8 -------- router/pkg/pubsub/kafka/provider.go | 2 +- router/pkg/pubsub/kafka/provider_test.go | 17 ++++++++--------- router/pkg/pubsub/nats/provider.go | 2 +- 5 files changed, 19 insertions(+), 22 deletions(-) diff --git a/router/pkg/pubsub/datasource/builder.go b/router/pkg/pubsub/datasource/builder.go index 90fea6b5a4..6e24b36d43 100644 --- a/router/pkg/pubsub/datasource/builder.go +++ b/router/pkg/pubsub/datasource/builder.go @@ -7,12 +7,18 @@ import ( "strconv" "github.com/wundergraph/cosmo/router/gen/proto/wg/cosmo/node/v1" - "github.com/wundergraph/cosmo/router/pkg/config" "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/plan" - "go.uber.org/zap" ) -func BuildProvidersAndDataSources[A any](providerBuilder PubSubProviderBuilder[A], ctx context.Context, in *nodev1.DataSourceConfiguration, dsMeta *plan.DataSourceMetadata, config config.EventsConfiguration, logger *zap.Logger, hostName string, routerListenAddr string, data []EngineEventConfiguration) ([]PubSubProvider, []plan.DataSource, error) { +// BuildProvidersAndDataSources is a generic function that builds providers and data sources for the given provider +// builder and event configurations. +func BuildProvidersAndDataSources[A any]( + providerBuilder PubSubProviderBuilder[A], + ctx context.Context, + in *nodev1.DataSourceConfiguration, + dsMeta *plan.DataSourceMetadata, + data []EngineEventConfiguration, +) ([]PubSubProvider, []plan.DataSource, error) { if len(data) == 0 { return nil, nil, nil } diff --git a/router/pkg/pubsub/datasource/planner.go b/router/pkg/pubsub/datasource/planner.go index c56173b628..62d26454bf 100644 --- a/router/pkg/pubsub/datasource/planner.go +++ b/router/pkg/pubsub/datasource/planner.go @@ -128,14 +128,6 @@ func (p *Planner) addContextVariableByArgumentRef(argumentRef int, argumentPath return variablePlaceHolder, nil } -func StringParser(subject string) (string, error) { - matches := argument_templates.ArgumentTemplateRegex.FindAllStringSubmatch(subject, -1) - if len(matches) < 1 { - return subject, nil - } - return "", fmt.Errorf(`subject "%s" is not a valid NATS subject`, subject) -} - func (p *Planner) extractArgumentTemplate(fieldRef int, template string) (string, error) { matches := argument_templates.ArgumentTemplateRegex.FindAllStringSubmatch(template, -1) // If no argument templates are defined, there are only static values diff --git a/router/pkg/pubsub/kafka/provider.go b/router/pkg/pubsub/kafka/provider.go index 75b1324f72..cbeb45f1a6 100644 --- a/router/pkg/pubsub/kafka/provider.go +++ b/router/pkg/pubsub/kafka/provider.go @@ -48,5 +48,5 @@ func BuildProvidersAndDataSources(ctx context.Context, in *nodev1.DataSourceConf hostName: hostName, routerListenAddr: routerListenAddr, } - return datasource.BuildProvidersAndDataSources(providerBuilder, ctx, in, dsMeta, config, logger, hostName, routerListenAddr, kafkaData) + return datasource.BuildProvidersAndDataSources(providerBuilder, ctx, in, dsMeta, kafkaData) } diff --git a/router/pkg/pubsub/kafka/provider_test.go b/router/pkg/pubsub/kafka/provider_test.go index 16bbf788e6..0b647d79fb 100644 --- a/router/pkg/pubsub/kafka/provider_test.go +++ b/router/pkg/pubsub/kafka/provider_test.go @@ -53,11 +53,10 @@ func TestBuildKafkaOptions(t *testing.T) { }) t.Run("with TLS", func(t *testing.T) { - enabled := true cfg := config.KafkaEventSource{ Brokers: []string{"localhost:9092"}, TLS: &config.KafkaTLSConfiguration{ - Enabled: enabled, + Enabled: true, }, } @@ -160,7 +159,7 @@ func TestGetProvider(t *testing.T) { logger := zaptest.NewLogger(t) - // Create mock adapter for testing + // Create a mock adapter for testing provider, _, err := BuildProvidersAndDataSources(context.Background(), in, &plan.DataSourceMetadata{}, cfg, logger, "host", "addr") require.NoError(t, err) require.NotNil(t, provider) @@ -174,24 +173,24 @@ func TestGetProvider(t *testing.T) { } func TestPubSubProvider_FindPubSubDataSource(t *testing.T) { - mock := &mockAdapter{} + mocked := &mockAdapter{} provider := &PubSubProvider{ Logger: zap.NewNop(), - Adapter: mock, + Adapter: mocked, } t.Run("calling Shutdown calls adapter Shutdown", func(t *testing.T) { - mock.On("Shutdown", context.Background()).Return(nil) + mocked.On("Shutdown", context.Background()).Return(nil) err := provider.Shutdown(context.Background()) require.NoError(t, err) - mock.AssertCalled(t, "Shutdown", context.Background()) + mocked.AssertCalled(t, "Shutdown", context.Background()) }) t.Run("calling Startup calls adapter Startup", func(t *testing.T) { - mock.On("Startup", context.Background()).Return(nil) + mocked.On("Startup", context.Background()).Return(nil) err := provider.Startup(context.Background()) require.NoError(t, err) - mock.AssertCalled(t, "Startup", context.Background()) + mocked.AssertCalled(t, "Startup", context.Background()) }) } diff --git a/router/pkg/pubsub/nats/provider.go b/router/pkg/pubsub/nats/provider.go index c0975dcdb8..f0b76bd6c9 100644 --- a/router/pkg/pubsub/nats/provider.go +++ b/router/pkg/pubsub/nats/provider.go @@ -102,7 +102,7 @@ func BuildProvidersAndDataSources(ctx context.Context, in *nodev1.DataSourceConf hostName: hostName, routerListenAddr: routerListenAddr, } - return datasource.BuildProvidersAndDataSources(providerBuilder, ctx, in, dsMeta, config, logger, hostName, routerListenAddr, natsData) + return datasource.BuildProvidersAndDataSources(providerBuilder, ctx, in, dsMeta, natsData) } type PubSubProvider struct { From 526dc48bd604f6910f453ff13d77d5159a9cdd01 Mon Sep 17 00:00:00 2001 From: Alessandro Pagnin Date: Thu, 15 May 2025 12:14:11 +0200 Subject: [PATCH 055/126] refactor: move EngineEventConfiguration interface to provider.go --- router/pkg/pubsub/datasource/datasource.go | 4 ---- router/pkg/pubsub/datasource/provider.go | 4 ++++ 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/router/pkg/pubsub/datasource/datasource.go b/router/pkg/pubsub/datasource/datasource.go index 2deeee893b..6a43fcf80c 100644 --- a/router/pkg/pubsub/datasource/datasource.go +++ b/router/pkg/pubsub/datasource/datasource.go @@ -30,7 +30,3 @@ type PubSubDataSource interface { // TransformEventData allows the data source to transform the event data using the extractFn TransformEventData(extractFn ArgumentTemplateCallback) error } - -type EngineEventConfiguration interface { - GetEngineEventConfiguration() *nodev1.EngineEventConfiguration -} diff --git a/router/pkg/pubsub/datasource/provider.go b/router/pkg/pubsub/datasource/provider.go index 2aa9abfaf2..f20803839b 100644 --- a/router/pkg/pubsub/datasource/provider.go +++ b/router/pkg/pubsub/datasource/provider.go @@ -23,6 +23,10 @@ type PubSubProvider interface { Shutdown(ctx context.Context) error } +type EngineEventConfiguration interface { + GetEngineEventConfiguration() *nodev1.EngineEventConfiguration +} + type PubSubProviderBuilder[A any] interface { // TypeID Get the provider type id (e.g. "kafka", "nats") TypeID() string From c3c5889e168d7df5f68b9e25276eb70ca739fdeb Mon Sep 17 00:00:00 2001 From: Alessandro Pagnin Date: Thu, 15 May 2025 12:22:28 +0200 Subject: [PATCH 056/126] chore: improved docs --- router/pkg/pubsub/datasource/provider.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/router/pkg/pubsub/datasource/provider.go b/router/pkg/pubsub/datasource/provider.go index f20803839b..2893a10054 100644 --- a/router/pkg/pubsub/datasource/provider.go +++ b/router/pkg/pubsub/datasource/provider.go @@ -13,7 +13,7 @@ type ProvidersAndDataSourcesBuilder func(ctx context.Context, in *nodev1.DataSou type ArgumentTemplateCallback func(tpl string) (string, error) -// PubSubProvider is the interface that the single PubSub provider must implement. +// PubSubProvider is the interface that the PubSub provider must implement type PubSubProvider interface { // ID Get the provider ID as specified in the configuration ID() string @@ -27,6 +27,7 @@ type EngineEventConfiguration interface { GetEngineEventConfiguration() *nodev1.EngineEventConfiguration } +// PubSubProviderBuilder is the interface that the provider builder must implement. type PubSubProviderBuilder[A any] interface { // TypeID Get the provider type id (e.g. "kafka", "nats") TypeID() string From a898da3258855baa107794b3d57ca596c1556b44 Mon Sep 17 00:00:00 2001 From: Alessandro Pagnin Date: Thu, 15 May 2025 12:37:04 +0200 Subject: [PATCH 057/126] refactor: reorganize NATS provider structure --- router/pkg/pubsub/nats/provider.go | 102 +++----------------- router/pkg/pubsub/nats/provider_builder.go | 47 +++++++++ router/pkg/pubsub/nats/pubsub_datasource.go | 30 ++++++ 3 files changed, 89 insertions(+), 90 deletions(-) diff --git a/router/pkg/pubsub/nats/provider.go b/router/pkg/pubsub/nats/provider.go index f0b76bd6c9..f2453719d6 100644 --- a/router/pkg/pubsub/nats/provider.go +++ b/router/pkg/pubsub/nats/provider.go @@ -2,12 +2,7 @@ package nats import ( "context" - "errors" - "fmt" - "slices" - "time" - "github.com/nats-io/nats.go" nodev1 "github.com/wundergraph/cosmo/router/gen/proto/wg/cosmo/node/v1" "github.com/wundergraph/cosmo/router/pkg/config" "github.com/wundergraph/cosmo/router/pkg/pubsub/datasource" @@ -17,77 +12,22 @@ import ( const providerId = "nats" -func buildNatsOptions(eventSource config.NatsEventSource, logger *zap.Logger) ([]nats.Option, error) { - opts := []nats.Option{ - nats.Name(fmt.Sprintf("cosmo.router.edfs.nats.%s", eventSource.ID)), - nats.ReconnectJitter(500*time.Millisecond, 2*time.Second), - nats.ClosedHandler(func(conn *nats.Conn) { - logger.Info("NATS connection closed", zap.String("provider_id", eventSource.ID), zap.Error(conn.LastError())) - }), - nats.ConnectHandler(func(nc *nats.Conn) { - logger.Info("NATS connection established", zap.String("provider_id", eventSource.ID), zap.String("url", nc.ConnectedUrlRedacted())) - }), - nats.DisconnectErrHandler(func(nc *nats.Conn, err error) { - if err != nil { - logger.Error("NATS disconnected; will attempt to reconnect", zap.Error(err), zap.String("provider_id", eventSource.ID)) - } else { - logger.Info("NATS disconnected", zap.String("provider_id", eventSource.ID)) - } - }), - nats.ErrorHandler(func(conn *nats.Conn, subscription *nats.Subscription, err error) { - if errors.Is(err, nats.ErrSlowConsumer) { - logger.Warn( - "NATS slow consumer detected. Events are being dropped. Please consider increasing the buffer size or reducing the number of messages being sent.", - zap.Error(err), - zap.String("provider_id", eventSource.ID), - ) - } else { - logger.Error("NATS error", zap.Error(err)) - } - }), - nats.ReconnectHandler(func(conn *nats.Conn) { - logger.Info("NATS reconnected", zap.String("provider_id", eventSource.ID), zap.String("url", conn.ConnectedUrlRedacted())) - }), - } +type PubSubProvider struct { + id string + Adapter AdapterInterface + Logger *zap.Logger +} - if eventSource.Authentication != nil { - if eventSource.Authentication.Token != nil { - opts = append(opts, nats.Token(*eventSource.Authentication.Token)) - } else if eventSource.Authentication.UserInfo.Username != nil && eventSource.Authentication.UserInfo.Password != nil { - opts = append(opts, nats.UserInfo(*eventSource.Authentication.UserInfo.Username, *eventSource.Authentication.UserInfo.Password)) - } - } +func (c *PubSubProvider) ID() string { + return c.id +} - return opts, nil +func (c *PubSubProvider) Startup(ctx context.Context) error { + return c.Adapter.Startup(ctx) } -func transformEventConfig(cfg *nodev1.NatsEventConfiguration, fn datasource.ArgumentTemplateCallback) (*nodev1.NatsEventConfiguration, error) { - switch v := cfg.GetEngineEventConfiguration().GetType(); v { - case nodev1.EventType_PUBLISH, nodev1.EventType_REQUEST: - extractedSubject, err := fn(cfg.GetSubjects()[0]) - if err != nil { - return cfg, fmt.Errorf("unable to parse subject with id %s", cfg.GetSubjects()[0]) - } - if !isValidNatsSubject(extractedSubject) { - return cfg, fmt.Errorf("invalid subject: %s", extractedSubject) - } - cfg.Subjects = []string{extractedSubject} - case nodev1.EventType_SUBSCRIBE: - extractedSubjects := make([]string, 0, len(cfg.Subjects)) - for _, rawSubject := range cfg.Subjects { - extractedSubject, err := fn(rawSubject) - if err != nil { - return cfg, nil - } - if !isValidNatsSubject(extractedSubject) { - return cfg, fmt.Errorf("invalid subject: %s", extractedSubject) - } - extractedSubjects = append(extractedSubjects, extractedSubject) - } - slices.Sort(extractedSubjects) - cfg.Subjects = extractedSubjects - } - return cfg, nil +func (c *PubSubProvider) Shutdown(ctx context.Context) error { + return c.Adapter.Shutdown(ctx) } func BuildProvidersAndDataSources(ctx context.Context, in *nodev1.DataSourceConfiguration, dsMeta *plan.DataSourceMetadata, config config.EventsConfiguration, logger *zap.Logger, hostName string, routerListenAddr string) ([]datasource.PubSubProvider, []plan.DataSource, error) { @@ -104,21 +44,3 @@ func BuildProvidersAndDataSources(ctx context.Context, in *nodev1.DataSourceConf } return datasource.BuildProvidersAndDataSources(providerBuilder, ctx, in, dsMeta, natsData) } - -type PubSubProvider struct { - id string - Adapter AdapterInterface - Logger *zap.Logger -} - -func (c *PubSubProvider) ID() string { - return c.id -} - -func (c *PubSubProvider) Startup(ctx context.Context) error { - return c.Adapter.Startup(ctx) -} - -func (c *PubSubProvider) Shutdown(ctx context.Context) error { - return c.Adapter.Shutdown(ctx) -} diff --git a/router/pkg/pubsub/nats/provider_builder.go b/router/pkg/pubsub/nats/provider_builder.go index 16e530373e..cc22df5135 100644 --- a/router/pkg/pubsub/nats/provider_builder.go +++ b/router/pkg/pubsub/nats/provider_builder.go @@ -2,9 +2,12 @@ package nats import ( "context" + "errors" "fmt" "slices" + "time" + "github.com/nats-io/nats.go" nodev1 "github.com/wundergraph/cosmo/router/gen/proto/wg/cosmo/node/v1" "github.com/wundergraph/cosmo/router/pkg/config" "github.com/wundergraph/cosmo/router/pkg/pubsub/datasource" @@ -57,6 +60,50 @@ func (p *PubSubProviderBuilder) Providers(usedProviders []string) (map[string]Ad return adapters, pubSubProviders, nil } +func buildNatsOptions(eventSource config.NatsEventSource, logger *zap.Logger) ([]nats.Option, error) { + opts := []nats.Option{ + nats.Name(fmt.Sprintf("cosmo.router.edfs.nats.%s", eventSource.ID)), + nats.ReconnectJitter(500*time.Millisecond, 2*time.Second), + nats.ClosedHandler(func(conn *nats.Conn) { + logger.Info("NATS connection closed", zap.String("provider_id", eventSource.ID), zap.Error(conn.LastError())) + }), + nats.ConnectHandler(func(nc *nats.Conn) { + logger.Info("NATS connection established", zap.String("provider_id", eventSource.ID), zap.String("url", nc.ConnectedUrlRedacted())) + }), + nats.DisconnectErrHandler(func(nc *nats.Conn, err error) { + if err != nil { + logger.Error("NATS disconnected; will attempt to reconnect", zap.Error(err), zap.String("provider_id", eventSource.ID)) + } else { + logger.Info("NATS disconnected", zap.String("provider_id", eventSource.ID)) + } + }), + nats.ErrorHandler(func(conn *nats.Conn, subscription *nats.Subscription, err error) { + if errors.Is(err, nats.ErrSlowConsumer) { + logger.Warn( + "NATS slow consumer detected. Events are being dropped. Please consider increasing the buffer size or reducing the number of messages being sent.", + zap.Error(err), + zap.String("provider_id", eventSource.ID), + ) + } else { + logger.Error("NATS error", zap.Error(err)) + } + }), + nats.ReconnectHandler(func(conn *nats.Conn) { + logger.Info("NATS reconnected", zap.String("provider_id", eventSource.ID), zap.String("url", conn.ConnectedUrlRedacted())) + }), + } + + if eventSource.Authentication != nil { + if eventSource.Authentication.Token != nil { + opts = append(opts, nats.Token(*eventSource.Authentication.Token)) + } else if eventSource.Authentication.UserInfo.Username != nil && eventSource.Authentication.UserInfo.Password != nil { + opts = append(opts, nats.UserInfo(*eventSource.Authentication.UserInfo.Username, *eventSource.Authentication.UserInfo.Password)) + } + } + + return opts, nil +} + func buildProvider(ctx context.Context, provider config.NatsEventSource, logger *zap.Logger, hostName string, routerListenAddr string) (AdapterInterface, datasource.PubSubProvider, error) { options, err := buildNatsOptions(provider, logger) if err != nil { diff --git a/router/pkg/pubsub/nats/pubsub_datasource.go b/router/pkg/pubsub/nats/pubsub_datasource.go index e23655300e..7b3a86c853 100644 --- a/router/pkg/pubsub/nats/pubsub_datasource.go +++ b/router/pkg/pubsub/nats/pubsub_datasource.go @@ -3,6 +3,7 @@ package nats import ( "encoding/json" "fmt" + "slices" nodev1 "github.com/wundergraph/cosmo/router/gen/proto/wg/cosmo/node/v1" "github.com/wundergraph/cosmo/router/pkg/pubsub/datasource" @@ -126,3 +127,32 @@ type PublishEventConfiguration struct { func (s *PublishEventConfiguration) MarshalJSONTemplate() string { return fmt.Sprintf(`{"subject":"%s", "data": %s, "providerId":"%s"}`, s.Subject, s.Data, s.ProviderID) } + +func transformEventConfig(cfg *nodev1.NatsEventConfiguration, fn datasource.ArgumentTemplateCallback) (*nodev1.NatsEventConfiguration, error) { + switch v := cfg.GetEngineEventConfiguration().GetType(); v { + case nodev1.EventType_PUBLISH, nodev1.EventType_REQUEST: + extractedSubject, err := fn(cfg.GetSubjects()[0]) + if err != nil { + return cfg, fmt.Errorf("unable to parse subject with id %s", cfg.GetSubjects()[0]) + } + if !isValidNatsSubject(extractedSubject) { + return cfg, fmt.Errorf("invalid subject: %s", extractedSubject) + } + cfg.Subjects = []string{extractedSubject} + case nodev1.EventType_SUBSCRIBE: + extractedSubjects := make([]string, 0, len(cfg.Subjects)) + for _, rawSubject := range cfg.Subjects { + extractedSubject, err := fn(rawSubject) + if err != nil { + return cfg, nil + } + if !isValidNatsSubject(extractedSubject) { + return cfg, fmt.Errorf("invalid subject: %s", extractedSubject) + } + extractedSubjects = append(extractedSubjects, extractedSubject) + } + slices.Sort(extractedSubjects) + cfg.Subjects = extractedSubjects + } + return cfg, nil +} From ffff3378989c0d9c3da4938bf8c76ff5b9ea8b54 Mon Sep 17 00:00:00 2001 From: Alessandro Pagnin Date: Thu, 15 May 2025 16:20:35 +0200 Subject: [PATCH 058/126] feat: reuse provider in different graphs, streamline pub sub builder --- router/core/factoryresolver.go | 59 +++++++++------ router/pkg/pubsub/datasource/builder.go | 74 +++++++++---------- router/pkg/pubsub/datasource/provider.go | 15 ++-- router/pkg/pubsub/kafka/provider.go | 27 ++----- router/pkg/pubsub/kafka/provider_builder.go | 61 +++++++++++---- ...vider_test.go => provider_builder_test.go} | 68 +++++------------ router/pkg/pubsub/nats/provider.go | 25 ++----- router/pkg/pubsub/nats/provider_builder.go | 56 ++++++++++---- ...vider_test.go => provider_builder_test.go} | 62 +++++++++------- router/pkg/pubsub/pubsub.go | 8 +- 10 files changed, 238 insertions(+), 217 deletions(-) rename router/pkg/pubsub/kafka/{provider_test.go => provider_builder_test.go} (69%) rename router/pkg/pubsub/nats/{provider_test.go => provider_builder_test.go} (83%) diff --git a/router/core/factoryresolver.go b/router/core/factoryresolver.go index b62cf99932..9a4283ad50 100644 --- a/router/core/factoryresolver.go +++ b/router/core/factoryresolver.go @@ -288,9 +288,10 @@ func (l *Loader) Load(engineConfig *nodev1.EngineConfiguration, subgraphs []*nod } var providers []pubsub_datasource.PubSubProvider + var pubSubDS []pubsub_datasource.DataSourceConfigurationWithMetadata for _, in := range engineConfig.DatasourceConfigurations { - var outs []plan.DataSource + var out plan.DataSource switch in.Kind { case nodev1.DataSourceKind_STATIC: @@ -299,7 +300,7 @@ func (l *Loader) Load(engineConfig *nodev1.EngineConfiguration, subgraphs []*nod return nil, providers, err } - out, err := plan.NewDataSourceConfiguration[staticdatasource.Configuration]( + out, err = plan.NewDataSourceConfiguration[staticdatasource.Configuration]( in.Id, factory, l.dataSourceMetaData(in), @@ -310,7 +311,6 @@ func (l *Loader) Load(engineConfig *nodev1.EngineConfiguration, subgraphs []*nod if err != nil { return nil, providers, fmt.Errorf("error creating data source configuration for data source %s: %w", in.Id, err) } - outs = append(outs, out) case nodev1.DataSourceKind_GRAPHQL: header := http.Header{} @@ -418,7 +418,7 @@ func (l *Loader) Load(engineConfig *nodev1.EngineConfiguration, subgraphs []*nod return nil, providers, err } - out, err := plan.NewDataSourceConfigurationWithName[graphql_datasource.Configuration]( + out, err = plan.NewDataSourceConfigurationWithName[graphql_datasource.Configuration]( in.Id, dataSourceName, factory, @@ -428,32 +428,45 @@ func (l *Loader) Load(engineConfig *nodev1.EngineConfiguration, subgraphs []*nod if err != nil { return nil, providers, fmt.Errorf("error creating data source configuration for data source %s: %w", in.Id, err) } - outs = append(outs, out) case nodev1.DataSourceKind_PUBSUB: - dsMeta := l.dataSourceMetaData(in) - for _, providerFactory := range pubsub.ProvidersAndDataSourcesBuilders() { - factoryProviders, factoryDataSources, err := providerFactory( - l.ctx, - in, - dsMeta, - routerEngineConfig.Events, - l.logger, - l.resolver.InstanceData().HostName, - l.resolver.InstanceData().ListenAddress, - ) - if err != nil { - return nil, providers, err - } - providers = append(providers, factoryProviders...) - outs = append(outs, factoryDataSources...) - } + pubSubDS = append(pubSubDS, pubsub_datasource.DataSourceConfigurationWithMetadata{ + Configuration: in, + Metadata: l.dataSourceMetaData(in), + }) default: return nil, providers, fmt.Errorf("unknown data source type %q", in.Kind) } - outConfig.DataSources = append(outConfig.DataSources, outs...) + if out != nil { + outConfig.DataSources = append(outConfig.DataSources, out) + } } + + for _, providerBuilderFactory := range pubsub.ProviderBuilderFactories() { + providerBuilder := providerBuilderFactory( + l.ctx, + routerEngineConfig.Events, + l.logger, + l.resolver.InstanceData().HostName, + l.resolver.InstanceData().ListenAddress, + ) + factoryProviders, factoryDataSources, err := pubsub_datasource.BuildProvidersAndDataSources( + l.ctx, + providerBuilder, + pubSubDS, + ) + if err != nil { + return nil, providers, err + } + if len(factoryProviders) > 0 { + providers = append(providers, factoryProviders...) + } + if len(factoryDataSources) > 0 { + outConfig.DataSources = append(outConfig.DataSources, factoryDataSources...) + } + } + return &outConfig, providers, nil } diff --git a/router/pkg/pubsub/datasource/builder.go b/router/pkg/pubsub/datasource/builder.go index 6e24b36d43..75d805d841 100644 --- a/router/pkg/pubsub/datasource/builder.go +++ b/router/pkg/pubsub/datasource/builder.go @@ -2,7 +2,6 @@ package datasource import ( "context" - "fmt" "slices" "strconv" @@ -10,62 +9,55 @@ import ( "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/plan" ) +type DataSourceConfigurationWithMetadata struct { + Configuration *nodev1.DataSourceConfiguration + Metadata *plan.DataSourceMetadata +} + // BuildProvidersAndDataSources is a generic function that builds providers and data sources for the given provider // builder and event configurations. -func BuildProvidersAndDataSources[A any]( - providerBuilder PubSubProviderBuilder[A], +func BuildProvidersAndDataSources( ctx context.Context, - in *nodev1.DataSourceConfiguration, - dsMeta *plan.DataSourceMetadata, - data []EngineEventConfiguration, + providerBuilder PubSubProviderBuilder, + dsConfs []DataSourceConfigurationWithMetadata, ) ([]PubSubProvider, []plan.DataSource, error) { - if len(data) == 0 { - return nil, nil, nil - } - // Collect all used providers - var usedProviders []string - for _, event := range data { - providerId := event.GetEngineEventConfiguration().GetProviderId() - if !slices.Contains(usedProviders, providerId) { - usedProviders = append(usedProviders, providerId) + // Collect providers to initialize + var providerIds []string + for _, dsConf := range dsConfs { + for _, event := range providerBuilder.EngineEventConfigurations(dsConf.Configuration) { + providerId := event.GetEngineEventConfiguration().GetProviderId() + if !slices.Contains(providerIds, providerId) { + providerIds = append(providerIds, providerId) + } } } // Initialize used providers - adapters, pubSubProviders, err := providerBuilder.Providers(usedProviders) + pubSubProviders, err := providerBuilder.Providers(providerIds) if err != nil { return nil, nil, err } - // Verify that all used providers are defined - definedProviders := make([]string, 0, len(adapters)) - for providerID := range adapters { - definedProviders = append(definedProviders, providerID) - } - for _, event := range data { - if !slices.Contains(definedProviders, event.GetEngineEventConfiguration().GetProviderId()) { - return nil, nil, fmt.Errorf(providerBuilder.TypeID()+" provider with ID %s is not defined", event.GetEngineEventConfiguration().GetProviderId()) - } - } - // Create data sources var outs []plan.DataSource - for i, event := range data { - pubsubDataSource, err := providerBuilder.DataSource(event, adapters) - if err != nil { - return nil, nil, err - } - out, err := plan.NewDataSourceConfiguration( - in.Id+"-"+providerBuilder.TypeID()+"-"+strconv.Itoa(i), - NewFactory(ctx, pubsubDataSource), - getFilteredDataSourceMetadata(event, dsMeta), - pubsubDataSource, - ) - if err != nil { - return nil, nil, err + for _, dsConf := range dsConfs { + for i, event := range providerBuilder.EngineEventConfigurations(dsConf.Configuration) { + pubSubDataSource, err := providerBuilder.DataSource(event) + if err != nil { + return nil, nil, err + } + out, err := plan.NewDataSourceConfiguration( + dsConf.Configuration.Id+"-"+providerBuilder.TypeID()+"-"+strconv.Itoa(i), + NewFactory(ctx, pubSubDataSource), + getFilteredDataSourceMetadata(event, dsConf.Metadata), + pubSubDataSource, + ) + if err != nil { + return nil, nil, err + } + outs = append(outs, out) } - outs = append(outs, out) } return pubSubProviders, outs, nil diff --git a/router/pkg/pubsub/datasource/provider.go b/router/pkg/pubsub/datasource/provider.go index 2893a10054..b29581b5f3 100644 --- a/router/pkg/pubsub/datasource/provider.go +++ b/router/pkg/pubsub/datasource/provider.go @@ -5,11 +5,10 @@ import ( nodev1 "github.com/wundergraph/cosmo/router/gen/proto/wg/cosmo/node/v1" "github.com/wundergraph/cosmo/router/pkg/config" - "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/plan" "go.uber.org/zap" ) -type ProvidersAndDataSourcesBuilder func(ctx context.Context, in *nodev1.DataSourceConfiguration, dsMeta *plan.DataSourceMetadata, config config.EventsConfiguration, logger *zap.Logger, hostName string, routerListenAddr string) ([]PubSubProvider, []plan.DataSource, error) +type PubSubProviderBuilderFactory func(ctx context.Context, config config.EventsConfiguration, logger *zap.Logger, hostName string, routerListenAddr string) PubSubProviderBuilder type ArgumentTemplateCallback func(tpl string) (string, error) @@ -17,6 +16,8 @@ type ArgumentTemplateCallback func(tpl string) (string, error) type PubSubProvider interface { // ID Get the provider ID as specified in the configuration ID() string + // TypeID Get the provider type id (e.g. "kafka", "nats") + TypeID() string // Startup is the method called when the provider is started Startup(ctx context.Context) error // Shutdown is the method called when the provider is shut down @@ -28,11 +29,13 @@ type EngineEventConfiguration interface { } // PubSubProviderBuilder is the interface that the provider builder must implement. -type PubSubProviderBuilder[A any] interface { +type PubSubProviderBuilder interface { // TypeID Get the provider type id (e.g. "kafka", "nats") TypeID() string - // Providers Build the providers and their adapters - Providers(usedProviders []string) (map[string]A, []PubSubProvider, error) + // Providers Build the providers and their adapters; if ids are empty, all providers are built + Providers(ids []string) ([]PubSubProvider, error) // DataSource Build the data source for the given provider and event configuration - DataSource(data EngineEventConfiguration, adapters map[string]A) (PubSubDataSource, error) + DataSource(data EngineEventConfiguration) (PubSubDataSource, error) + // EngineEventConfigurations Get the engine event configurations for the given data source configuration + EngineEventConfigurations(in *nodev1.DataSourceConfiguration) []EngineEventConfiguration } diff --git a/router/pkg/pubsub/kafka/provider.go b/router/pkg/pubsub/kafka/provider.go index cbeb45f1a6..59474dec56 100644 --- a/router/pkg/pubsub/kafka/provider.go +++ b/router/pkg/pubsub/kafka/provider.go @@ -3,25 +3,25 @@ package kafka import ( "context" - nodev1 "github.com/wundergraph/cosmo/router/gen/proto/wg/cosmo/node/v1" - "github.com/wundergraph/cosmo/router/pkg/config" - "github.com/wundergraph/cosmo/router/pkg/pubsub/datasource" - "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/plan" "go.uber.org/zap" ) -const providerId = "kafka" +const providerTypeID = "kafka" type PubSubProvider struct { id string - Logger *zap.Logger Adapter AdapterInterface + Logger *zap.Logger } func (c *PubSubProvider) ID() string { return c.id } +func (c *PubSubProvider) TypeID() string { + return providerTypeID +} + func (c *PubSubProvider) Startup(ctx context.Context) error { if err := c.Adapter.Startup(ctx); err != nil { return err @@ -35,18 +35,3 @@ func (c *PubSubProvider) Shutdown(ctx context.Context) error { } return nil } - -func BuildProvidersAndDataSources(ctx context.Context, in *nodev1.DataSourceConfiguration, dsMeta *plan.DataSourceMetadata, config config.EventsConfiguration, logger *zap.Logger, hostName string, routerListenAddr string) ([]datasource.PubSubProvider, []plan.DataSource, error) { - kafkaData := make([]datasource.EngineEventConfiguration, 0, len(in.GetCustomEvents().GetKafka())) - for _, kafkaEvent := range in.GetCustomEvents().GetKafka() { - kafkaData = append(kafkaData, kafkaEvent) - } - providerBuilder := &PubSubProviderBuilder{ - ctx: ctx, - config: config, - logger: logger, - hostName: hostName, - routerListenAddr: routerListenAddr, - } - return datasource.BuildProvidersAndDataSources(providerBuilder, ctx, in, dsMeta, kafkaData) -} diff --git a/router/pkg/pubsub/kafka/provider_builder.go b/router/pkg/pubsub/kafka/provider_builder.go index 9a35514e30..02b009a76d 100644 --- a/router/pkg/pubsub/kafka/provider_builder.go +++ b/router/pkg/pubsub/kafka/provider_builder.go @@ -15,50 +15,69 @@ import ( "go.uber.org/zap" ) -var _ datasource.PubSubProviderBuilder[AdapterInterface] = &PubSubProviderBuilder{} - type PubSubProviderBuilder struct { ctx context.Context - config config.EventsConfiguration + config []config.KafkaEventSource logger *zap.Logger hostName string routerListenAddr string + adapters map[string]AdapterInterface } func (p *PubSubProviderBuilder) TypeID() string { - return providerId + return providerTypeID } -func (p *PubSubProviderBuilder) DataSource(data datasource.EngineEventConfiguration, adapters map[string]AdapterInterface) (datasource.PubSubDataSource, error) { +func (p *PubSubProviderBuilder) DataSource(data datasource.EngineEventConfiguration) (datasource.PubSubDataSource, error) { kafkaEvent, ok := data.(*nodev1.KafkaEventConfiguration) if !ok { return nil, fmt.Errorf("failed to cast data to KafkaEventConfiguration") } providerId := kafkaEvent.GetEngineEventConfiguration().GetProviderId() + adapter, ok := p.adapters[providerId] + if !ok { + return nil, fmt.Errorf("failed to get adapter for provider %s with ID %s", p.TypeID(), providerId) + } + return &PubSubDataSource{ EventConfiguration: kafkaEvent, - KafkaAdapter: adapters[providerId], + KafkaAdapter: adapter, }, nil } -func (p *PubSubProviderBuilder) Providers(usedProviders []string) (map[string]AdapterInterface, []datasource.PubSubProvider, error) { - adapters := make(map[string]AdapterInterface) +func (p *PubSubProviderBuilder) Providers(ids []string) ([]datasource.PubSubProvider, error) { + p.adapters = make(map[string]AdapterInterface) pubSubProviders := []datasource.PubSubProvider{} // create providers - for _, provider := range p.config.Providers.Kafka { - if !slices.Contains(usedProviders, provider.ID) { + for _, provider := range p.config { + if !slices.Contains(ids, provider.ID) { continue } adapter, pubSubProvider, err := buildProvider(p.ctx, provider, p.logger) if err != nil { - return nil, nil, err + return nil, err } - adapters[provider.ID] = adapter + p.adapters[provider.ID] = adapter pubSubProviders = append(pubSubProviders, pubSubProvider) } - return adapters, pubSubProviders, nil + for _, id := range ids { + if _, ok := p.adapters[id]; !ok { + return nil, fmt.Errorf("%s provider with ID %s is not defined", p.TypeID(), id) + } + } + + return pubSubProviders, nil +} + +func (p *PubSubProviderBuilder) EngineEventConfigurations(in *nodev1.DataSourceConfiguration) []datasource.EngineEventConfiguration { + kafkaData := make([]datasource.EngineEventConfiguration, 0, len(in.GetCustomEvents().GetKafka())) + for _, kafkaEvent := range in.GetCustomEvents().GetKafka() { + kafkaData = append(kafkaData, kafkaEvent) + } + + return kafkaData } // buildKafkaOptions creates a list of kgo.Opt options for the given Kafka event source configuration. @@ -106,3 +125,19 @@ func buildProvider(ctx context.Context, provider config.KafkaEventSource, logger return adapter, pubSubProvider, nil } + +func PubSubProviderBuilderFactory( + ctx context.Context, + config config.EventsConfiguration, + logger *zap.Logger, + hostName string, + routerListenAddr string, +) datasource.PubSubProviderBuilder { + return &PubSubProviderBuilder{ + ctx: ctx, + config: config.Providers.Kafka, + logger: logger, + hostName: hostName, + routerListenAddr: routerListenAddr, + } +} diff --git a/router/pkg/pubsub/kafka/provider_test.go b/router/pkg/pubsub/kafka/provider_builder_test.go similarity index 69% rename from router/pkg/pubsub/kafka/provider_test.go rename to router/pkg/pubsub/kafka/provider_builder_test.go index 0b647d79fb..49ef049446 100644 --- a/router/pkg/pubsub/kafka/provider_test.go +++ b/router/pkg/pubsub/kafka/provider_builder_test.go @@ -7,13 +7,10 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/mock" "github.com/stretchr/testify/require" - nodev1 "github.com/wundergraph/cosmo/router/gen/proto/wg/cosmo/node/v1" "github.com/wundergraph/cosmo/router/pkg/config" "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/resolve" "go.uber.org/zap" "go.uber.org/zap/zaptest" - - "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/plan" ) // mockAdapter is a mock of AdapterInterface @@ -88,67 +85,35 @@ func TestBuildKafkaOptions(t *testing.T) { }) } -func TestGetProvider(t *testing.T) { +func TestPubSubProviderBuilderFactory(t *testing.T) { t.Run("returns nil if no Kafka configuration", func(t *testing.T) { ctx := context.Background() - in := &nodev1.DataSourceConfiguration{ - CustomEvents: &nodev1.DataSourceCustomEvents{}, - } - - dsMeta := &plan.DataSourceMetadata{} cfg := config.EventsConfiguration{} logger := zaptest.NewLogger(t) - provider, _, err := BuildProvidersAndDataSources(ctx, in, dsMeta, cfg, logger, "host", "addr") + builder := PubSubProviderBuilderFactory(ctx, cfg, logger, "host", "addr") + require.NotNil(t, builder) + providers, err := builder.Providers(nil) require.NoError(t, err) - require.Nil(t, provider) + require.Empty(t, providers) }) t.Run("errors if provider not found", func(t *testing.T) { ctx := context.Background() - in := &nodev1.DataSourceConfiguration{ - CustomEvents: &nodev1.DataSourceCustomEvents{ - Kafka: []*nodev1.KafkaEventConfiguration{ - { - EngineEventConfiguration: &nodev1.EngineEventConfiguration{ - ProviderId: "unknown", - }, - }, - }, - }, - } - - dsMeta := &plan.DataSourceMetadata{} - cfg := config.EventsConfiguration{ - Providers: config.EventProviders{ - Kafka: []config.KafkaEventSource{ - {ID: "provider1", Brokers: []string{"localhost:9092"}}, - }, - }, - } + cfg := config.EventsConfiguration{} logger := zaptest.NewLogger(t) - provider, _, err := BuildProvidersAndDataSources(ctx, in, dsMeta, cfg, logger, "host", "addr") + builder := PubSubProviderBuilderFactory(ctx, cfg, logger, "host", "addr") + require.NotNil(t, builder) + providers, err := builder.Providers([]string{"unknown"}) require.Error(t, err) - require.Nil(t, provider) + require.Empty(t, providers) assert.Contains(t, err.Error(), "provider with ID unknown is not defined") }) t.Run("creates provider with configured adapters", func(t *testing.T) { providerId := "test-provider" - in := &nodev1.DataSourceConfiguration{ - CustomEvents: &nodev1.DataSourceCustomEvents{ - Kafka: []*nodev1.KafkaEventConfiguration{ - { - EngineEventConfiguration: &nodev1.EngineEventConfiguration{ - ProviderId: providerId, - }, - }, - }, - }, - } - cfg := config.EventsConfiguration{ Providers: config.EventProviders{ Kafka: []config.KafkaEventSource{ @@ -159,20 +124,23 @@ func TestGetProvider(t *testing.T) { logger := zaptest.NewLogger(t) - // Create a mock adapter for testing - provider, _, err := BuildProvidersAndDataSources(context.Background(), in, &plan.DataSourceMetadata{}, cfg, logger, "host", "addr") + ctx := context.Background() + + builder := PubSubProviderBuilderFactory(ctx, cfg, logger, "host", "addr") + require.NotNil(t, builder) + providers, err := builder.Providers([]string{providerId}) require.NoError(t, err) - require.NotNil(t, provider) + require.Len(t, providers, 1) // Check the returned provider - kafkaProvider, ok := provider[0].(*PubSubProvider) + kafkaProvider, ok := providers[0].(*PubSubProvider) require.True(t, ok) assert.NotNil(t, kafkaProvider.Logger) assert.NotNil(t, kafkaProvider.Adapter) }) } -func TestPubSubProvider_FindPubSubDataSource(t *testing.T) { +func TestPubSubProvider(t *testing.T) { mocked := &mockAdapter{} provider := &PubSubProvider{ diff --git a/router/pkg/pubsub/nats/provider.go b/router/pkg/pubsub/nats/provider.go index f2453719d6..16addceb14 100644 --- a/router/pkg/pubsub/nats/provider.go +++ b/router/pkg/pubsub/nats/provider.go @@ -3,14 +3,10 @@ package nats import ( "context" - nodev1 "github.com/wundergraph/cosmo/router/gen/proto/wg/cosmo/node/v1" - "github.com/wundergraph/cosmo/router/pkg/config" - "github.com/wundergraph/cosmo/router/pkg/pubsub/datasource" - "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/plan" "go.uber.org/zap" ) -const providerId = "nats" +const providerTypeID = "nats" type PubSubProvider struct { id string @@ -22,6 +18,10 @@ func (c *PubSubProvider) ID() string { return c.id } +func (c *PubSubProvider) TypeID() string { + return providerTypeID +} + func (c *PubSubProvider) Startup(ctx context.Context) error { return c.Adapter.Startup(ctx) } @@ -29,18 +29,3 @@ func (c *PubSubProvider) Startup(ctx context.Context) error { func (c *PubSubProvider) Shutdown(ctx context.Context) error { return c.Adapter.Shutdown(ctx) } - -func BuildProvidersAndDataSources(ctx context.Context, in *nodev1.DataSourceConfiguration, dsMeta *plan.DataSourceMetadata, config config.EventsConfiguration, logger *zap.Logger, hostName string, routerListenAddr string) ([]datasource.PubSubProvider, []plan.DataSource, error) { - natsData := make([]datasource.EngineEventConfiguration, 0, len(in.GetCustomEvents().GetNats())) - for _, natsEvent := range in.GetCustomEvents().GetNats() { - natsData = append(natsData, natsEvent) - } - providerBuilder := &PubSubProviderBuilder{ - ctx: ctx, - config: config, - logger: logger, - hostName: hostName, - routerListenAddr: routerListenAddr, - } - return datasource.BuildProvidersAndDataSources(providerBuilder, ctx, in, dsMeta, natsData) -} diff --git a/router/pkg/pubsub/nats/provider_builder.go b/router/pkg/pubsub/nats/provider_builder.go index cc22df5135..49d6c8911b 100644 --- a/router/pkg/pubsub/nats/provider_builder.go +++ b/router/pkg/pubsub/nats/provider_builder.go @@ -14,21 +14,20 @@ import ( "go.uber.org/zap" ) -var _ datasource.PubSubProviderBuilder[AdapterInterface] = &PubSubProviderBuilder{} - type PubSubProviderBuilder struct { ctx context.Context - config config.EventsConfiguration + config []config.NatsEventSource logger *zap.Logger hostName string routerListenAddr string + adapters map[string]AdapterInterface } func (p *PubSubProviderBuilder) TypeID() string { - return providerId + return providerTypeID } -func (p *PubSubProviderBuilder) DataSource(data datasource.EngineEventConfiguration, adapters map[string]AdapterInterface) (datasource.PubSubDataSource, error) { +func (p *PubSubProviderBuilder) DataSource(data datasource.EngineEventConfiguration) (datasource.PubSubDataSource, error) { natsEvent, ok := data.(*nodev1.NatsEventConfiguration) if !ok { return nil, fmt.Errorf("failed to cast data to NatsEventConfiguration") @@ -36,28 +35,43 @@ func (p *PubSubProviderBuilder) DataSource(data datasource.EngineEventConfigurat providerId := natsEvent.GetEngineEventConfiguration().GetProviderId() return &PubSubDataSource{ EventConfiguration: natsEvent, - NatsAdapter: adapters[providerId], + NatsAdapter: p.adapters[providerId], }, nil } -func (p *PubSubProviderBuilder) Providers(usedProviders []string) (map[string]AdapterInterface, []datasource.PubSubProvider, error) { - adapters := make(map[string]AdapterInterface) +func (p *PubSubProviderBuilder) Providers(ids []string) ([]datasource.PubSubProvider, error) { + p.adapters = make(map[string]AdapterInterface) pubSubProviders := []datasource.PubSubProvider{} // create providers - for _, provider := range p.config.Providers.Nats { - if !slices.Contains(usedProviders, provider.ID) { + for _, provider := range p.config { + if !slices.Contains(ids, provider.ID) { continue } adapter, pubSubProvider, err := buildProvider(p.ctx, provider, p.logger, p.hostName, p.routerListenAddr) if err != nil { - return nil, nil, err + return nil, err } - adapters[provider.ID] = adapter + p.adapters[provider.ID] = adapter pubSubProviders = append(pubSubProviders, pubSubProvider) } - return adapters, pubSubProviders, nil + for _, id := range ids { + if _, ok := p.adapters[id]; !ok { + return nil, fmt.Errorf("%s provider with ID %s is not defined", p.TypeID(), id) + } + } + + return pubSubProviders, nil +} + +func (p *PubSubProviderBuilder) EngineEventConfigurations(in *nodev1.DataSourceConfiguration) []datasource.EngineEventConfiguration { + natsData := make([]datasource.EngineEventConfiguration, 0, len(in.GetCustomEvents().GetNats())) + for _, kafkaEvent := range in.GetCustomEvents().GetNats() { + natsData = append(natsData, kafkaEvent) + } + + return natsData } func buildNatsOptions(eventSource config.NatsEventSource, logger *zap.Logger) ([]nats.Option, error) { @@ -121,3 +135,19 @@ func buildProvider(ctx context.Context, provider config.NatsEventSource, logger return adapter, pubSubProvider, nil } + +func PubSubProviderBuilderFactory( + ctx context.Context, + config config.EventsConfiguration, + logger *zap.Logger, + hostName string, + routerListenAddr string, +) datasource.PubSubProviderBuilder { + return &PubSubProviderBuilder{ + ctx: ctx, + config: config.Providers.Nats, + logger: logger, + hostName: hostName, + routerListenAddr: routerListenAddr, + } +} diff --git a/router/pkg/pubsub/nats/provider_test.go b/router/pkg/pubsub/nats/provider_builder_test.go similarity index 83% rename from router/pkg/pubsub/nats/provider_test.go rename to router/pkg/pubsub/nats/provider_builder_test.go index 2f4e360371..61efd1d0e0 100644 --- a/router/pkg/pubsub/nats/provider_test.go +++ b/router/pkg/pubsub/nats/provider_builder_test.go @@ -10,7 +10,6 @@ import ( "github.com/stretchr/testify/require" nodev1 "github.com/wundergraph/cosmo/router/gen/proto/wg/cosmo/node/v1" "github.com/wundergraph/cosmo/router/pkg/config" - "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/plan" "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/resolve" "go.uber.org/zap" "go.uber.org/zap/zaptest" @@ -158,50 +157,61 @@ func TestTransformEventConfig(t *testing.T) { }) } -func TestGetProvider(t *testing.T) { +func TestPubSubProviderBuilderFactory(t *testing.T) { t.Run("returns nil if no NATS configuration", func(t *testing.T) { ctx := context.Background() - in := &nodev1.DataSourceConfiguration{ - CustomEvents: &nodev1.DataSourceCustomEvents{}, - } - - dsMeta := &plan.DataSourceMetadata{} cfg := config.EventsConfiguration{} logger := zaptest.NewLogger(t) - provider, _, err := BuildProvidersAndDataSources(ctx, in, dsMeta, cfg, logger, "host", "addr") + builder := PubSubProviderBuilderFactory(ctx, cfg, logger, "host", "addr") + require.NotNil(t, builder) + providers, err := builder.Providers(nil) require.NoError(t, err) - require.Nil(t, provider) + require.Empty(t, providers) }) t.Run("errors if provider not found", func(t *testing.T) { ctx := context.Background() - in := &nodev1.DataSourceConfiguration{ - CustomEvents: &nodev1.DataSourceCustomEvents{ - Nats: []*nodev1.NatsEventConfiguration{ - { - EngineEventConfiguration: &nodev1.EngineEventConfiguration{ - ProviderId: "unknown", - }, - }, - }, - }, - } + cfg := config.EventsConfiguration{} + logger := zaptest.NewLogger(t) + + builder := PubSubProviderBuilderFactory(ctx, cfg, logger, "host", "addr") + require.NotNil(t, builder) + providers, err := builder.Providers([]string{"unknown"}) + require.Error(t, err) + require.Empty(t, providers) + assert.Contains(t, err.Error(), "provider with ID unknown is not defined") + }) + + t.Run("creates provider with configured adapters", func(t *testing.T) { + providerId := "test-provider" - dsMeta := &plan.DataSourceMetadata{} cfg := config.EventsConfiguration{ Providers: config.EventProviders{ Nats: []config.NatsEventSource{ - {ID: "provider1", URL: "nats://localhost:4222"}, + { + ID: providerId, + URL: "nats://localhost:4222", + }, }, }, } + logger := zaptest.NewLogger(t) - provider, _, err := BuildProvidersAndDataSources(ctx, in, dsMeta, cfg, logger, "host", "addr") - require.Error(t, err) - require.Nil(t, provider) - assert.Contains(t, err.Error(), "provider with ID unknown is not defined") + ctx := context.Background() + + builder := PubSubProviderBuilderFactory(ctx, cfg, logger, "host", "addr") + require.NotNil(t, builder) + providers, err := builder.Providers([]string{providerId}) + require.NoError(t, err) + require.Len(t, providers, 1) + + // Check the returned provider + kafkaProvider, ok := providers[0].(*PubSubProvider) + require.True(t, ok) + assert.NotNil(t, kafkaProvider.Logger) + assert.NotNil(t, kafkaProvider.Adapter) }) } diff --git a/router/pkg/pubsub/pubsub.go b/router/pkg/pubsub/pubsub.go index 914450bd98..a42bb64ebd 100644 --- a/router/pkg/pubsub/pubsub.go +++ b/router/pkg/pubsub/pubsub.go @@ -7,9 +7,9 @@ import ( ) // ProvidersAndDataSourcesBuilders returns a list of all PubSub builders -func ProvidersAndDataSourcesBuilders() []datasource.ProvidersAndDataSourcesBuilder { - return []datasource.ProvidersAndDataSourcesBuilder{ - kafka.BuildProvidersAndDataSources, - nats.BuildProvidersAndDataSources, +func ProviderBuilderFactories() []datasource.PubSubProviderBuilderFactory { + return []datasource.PubSubProviderBuilderFactory{ + kafka.PubSubProviderBuilderFactory, + nats.PubSubProviderBuilderFactory, } } From 765d73168a36416e627d16a552e1019809dbf254 Mon Sep 17 00:00:00 2001 From: Alessandro Pagnin Date: Thu, 15 May 2025 17:44:04 +0200 Subject: [PATCH 059/126] test: add unit tests for BuildProvidersAndDataSources function --- router/pkg/pubsub/datasource/builder_test.go | 268 +++++++++++++++++++ 1 file changed, 268 insertions(+) create mode 100644 router/pkg/pubsub/datasource/builder_test.go diff --git a/router/pkg/pubsub/datasource/builder_test.go b/router/pkg/pubsub/datasource/builder_test.go new file mode 100644 index 0000000000..f4b3b0bc25 --- /dev/null +++ b/router/pkg/pubsub/datasource/builder_test.go @@ -0,0 +1,268 @@ +package datasource + +import ( + "context" + "errors" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/mock" + "github.com/stretchr/testify/require" + "github.com/wundergraph/cosmo/router/gen/proto/wg/cosmo/node/v1" + "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/plan" + "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/resolve" +) + +func TestBuildProvidersAndDataSources_OK(t *testing.T) { + ctx := context.Background() + mockBuilder := new(MockPubSubProviderBuilder) + + dsMeta := &plan.DataSourceMetadata{ + RootNodes: []plan.TypeField{ + { + TypeName: "Type1", + FieldNames: []string{"Field1", "Field2"}, + }, + }, + } + + // Mock input data + event := &nodev1.EngineEventConfiguration{ + ProviderId: "provider-1", + TypeName: "Type1", + FieldName: "Field1", + Type: nodev1.EventType_PUBLISH, + } + dsConf := DataSourceConfigurationWithMetadata{ + Configuration: &nodev1.DataSourceConfiguration{ + Id: "test-id", + CustomEvents: &nodev1.DataSourceCustomEvents{ + Nats: []*nodev1.NatsEventConfiguration{ + { + EngineEventConfiguration: event, + }, + }, + }, + }, + Metadata: dsMeta, + } + dsConfs := []DataSourceConfigurationWithMetadata{dsConf} + var generalEvents []EngineEventConfiguration + for _, e := range dsConfs[0].Configuration.CustomEvents.Nats { + generalEvents = append(generalEvents, e) + } + + mockBuilder.On("EngineEventConfigurations", dsConf.Configuration).Return(generalEvents) + mockBuilder.On("Providers", []string{"provider-1"}).Return([]PubSubProvider{&MockPubSubProvider{}}, nil) + mockBuilder.On("DataSource", generalEvents[0]).Return(PubSubDataSource(&MockPubSubDataSource{}), nil) + + // Execute the function + providers, dataSources, err := BuildProvidersAndDataSources(ctx, mockBuilder, dsConfs) + + // Assertions + mockBuilder.AssertExpectations(t) + assert.NoError(t, err) + require.Len(t, providers, 1) + require.Len(t, dataSources, 1) + assert.True(t, dataSources[0].HasRootNode("Type1", "Field1")) + assert.False(t, dataSources[0].HasRootNode("Type1", "Field2")) +} + +func TestBuildProvidersAndDataSources_ProviderError(t *testing.T) { + ctx := context.Background() + mockBuilder := new(MockPubSubProviderBuilder) + + dsMeta := &plan.DataSourceMetadata{ + RootNodes: []plan.TypeField{ + { + TypeName: "Type1", + FieldNames: []string{"Field1", "Field2"}, + }, + }, + } + + // Mock input data + event := &nodev1.EngineEventConfiguration{ + ProviderId: "provider-1", + TypeName: "Type1", + FieldName: "Field1", + Type: nodev1.EventType_PUBLISH, + } + dsConf := DataSourceConfigurationWithMetadata{ + Configuration: &nodev1.DataSourceConfiguration{ + Id: "test-id", + CustomEvents: &nodev1.DataSourceCustomEvents{ + Nats: []*nodev1.NatsEventConfiguration{ + { + EngineEventConfiguration: event, + }, + }, + }, + }, + Metadata: dsMeta, + } + dsConfs := []DataSourceConfigurationWithMetadata{dsConf} + var generalEvents []EngineEventConfiguration + for _, e := range dsConfs[0].Configuration.CustomEvents.Nats { + generalEvents = append(generalEvents, e) + } + + mockBuilder.On("EngineEventConfigurations", dsConf.Configuration).Return(generalEvents) + mockBuilder.On("Providers", []string{"provider-1"}).Return(nil, errors.New("provider error")) + + // Execute the function + providers, dataSources, err := BuildProvidersAndDataSources(ctx, mockBuilder, dsConfs) + + // Assertions + mockBuilder.AssertExpectations(t) + assert.Error(t, err) + require.Len(t, providers, 0) + require.Len(t, dataSources, 0) +} + +func TestBuildProvidersAndDataSources_DataSourceError(t *testing.T) { + ctx := context.Background() + mockBuilder := new(MockPubSubProviderBuilder) + + dsMeta := &plan.DataSourceMetadata{ + RootNodes: []plan.TypeField{ + { + TypeName: "Type1", + FieldNames: []string{"Field1", "Field2"}, + }, + }, + } + + // Mock input data + event := &nodev1.EngineEventConfiguration{ + ProviderId: "provider-1", + TypeName: "Type1", + FieldName: "Field1", + Type: nodev1.EventType_PUBLISH, + } + dsConf := DataSourceConfigurationWithMetadata{ + Configuration: &nodev1.DataSourceConfiguration{ + Id: "test-id", + CustomEvents: &nodev1.DataSourceCustomEvents{ + Nats: []*nodev1.NatsEventConfiguration{ + { + EngineEventConfiguration: event, + }, + }, + }, + }, + Metadata: dsMeta, + } + dsConfs := []DataSourceConfigurationWithMetadata{dsConf} + var generalEvents []EngineEventConfiguration + for _, e := range dsConfs[0].Configuration.CustomEvents.Nats { + generalEvents = append(generalEvents, e) + } + + mockBuilder.On("EngineEventConfigurations", dsConf.Configuration).Return(generalEvents) + mockBuilder.On("Providers", []string{"provider-1"}).Return([]PubSubProvider{&MockPubSubProvider{}}, nil) + mockBuilder.On("DataSource", generalEvents[0]).Return(nil, errors.New("data source error")) + + // Execute the function + providers, dataSources, err := BuildProvidersAndDataSources(ctx, mockBuilder, dsConfs) + + // Assertions + mockBuilder.AssertExpectations(t) + assert.Error(t, err) + require.Len(t, providers, 0) + require.Len(t, dataSources, 0) +} + +type MockPubSubProviderBuilder struct { + mock.Mock +} + +func (m *MockPubSubProviderBuilder) EngineEventConfigurations(config *nodev1.DataSourceConfiguration) []EngineEventConfiguration { + args := m.Called(config) + arg := args.Get(0) + if arg == nil { + return nil + } + return arg.([]EngineEventConfiguration) +} + +func (m *MockPubSubProviderBuilder) Providers(providerIds []string) ([]PubSubProvider, error) { + args := m.Called(providerIds) + arg := args.Get(0) + if arg == nil { + return nil, args.Error(1) + } + return arg.([]PubSubProvider), args.Error(1) +} + +func (m *MockPubSubProviderBuilder) DataSource(event EngineEventConfiguration) (PubSubDataSource, error) { + args := m.Called(event) + arg := args.Get(0) + if arg == nil { + return nil, args.Error(1) + } + return arg.(PubSubDataSource), args.Error(1) +} + +func (m *MockPubSubProviderBuilder) TypeID() string { + return "mockType" +} + +type MockPubSubDataSource struct { + mock.Mock +} + +func (m *MockPubSubDataSource) ResolveDataSource() (resolve.DataSource, error) { + args := m.Called() + return args.Get(0).(resolve.DataSource), args.Error(1) +} + +func (m *MockPubSubDataSource) ResolveDataSourceInput(event []byte) (string, error) { + args := m.Called(event) + return args.String(0), args.Error(1) +} + +func (m *MockPubSubDataSource) EngineEventConfiguration() *nodev1.EngineEventConfiguration { + args := m.Called() + return args.Get(0).(*nodev1.EngineEventConfiguration) +} + +func (m *MockPubSubDataSource) ResolveDataSourceSubscription() (resolve.SubscriptionDataSource, error) { + args := m.Called() + return args.Get(0).(resolve.SubscriptionDataSource), args.Error(1) +} + +func (m *MockPubSubDataSource) ResolveDataSourceSubscriptionInput() (string, error) { + args := m.Called() + return args.String(0), args.Error(1) +} + +func (m *MockPubSubDataSource) TransformEventData(extractFn ArgumentTemplateCallback) error { + args := m.Called(extractFn) + return args.Error(0) +} + +// MockPubSubProvider is a mock implementation of the PubSubProvider interface +type MockPubSubProvider struct { + mock.Mock +} + +func (m *MockPubSubProvider) ID() string { + args := m.Called() + return args.String(0) +} + +func (m *MockPubSubProvider) TypeID() string { + args := m.Called() + return args.String(0) +} + +func (m *MockPubSubProvider) Startup(ctx context.Context) error { + args := m.Called(ctx) + return args.Error(0) +} + +func (m *MockPubSubProvider) Shutdown(ctx context.Context) error { + args := m.Called(ctx) + return args.Error(0) +} From c5623ca57ddcb7ec46f0c3748b90db8853d63bd4 Mon Sep 17 00:00:00 2001 From: Alessandro Pagnin Date: Thu, 15 May 2025 18:02:05 +0200 Subject: [PATCH 060/126] test: add unit tests for provider --- router/pkg/pubsub/kafka/provider_test.go | 101 +++++++++++++++++++++ router/pkg/pubsub/nats/provider_test.go | 107 +++++++++++++++++++++++ 2 files changed, 208 insertions(+) create mode 100644 router/pkg/pubsub/kafka/provider_test.go create mode 100644 router/pkg/pubsub/nats/provider_test.go diff --git a/router/pkg/pubsub/kafka/provider_test.go b/router/pkg/pubsub/kafka/provider_test.go new file mode 100644 index 0000000000..7c4606f294 --- /dev/null +++ b/router/pkg/pubsub/kafka/provider_test.go @@ -0,0 +1,101 @@ +package kafka + +import ( + "context" + "errors" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/mock" + "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/resolve" +) + +// MockAdapter is a mock implementation of AdapterInterface. +type MockAdapter struct { + mock.Mock +} + +func (m *MockAdapter) Startup(ctx context.Context) error { + args := m.Called(ctx) + return args.Error(0) +} + +func (m *MockAdapter) Shutdown(ctx context.Context) error { + args := m.Called(ctx) + return args.Error(0) +} + +func (m *MockAdapter) Publish(ctx context.Context, event PublishEventConfiguration) error { + args := m.Called(ctx, event) + return args.Error(0) +} + +func (m *MockAdapter) Subscribe(ctx context.Context, event SubscriptionEventConfiguration, updater resolve.SubscriptionUpdater) error { + args := m.Called(ctx, event, updater) + return args.Error(0) +} + +func TestProvider_Startup_Success(t *testing.T) { + mockAdapter := new(MockAdapter) + mockAdapter.On("Startup", mock.Anything).Return(nil) + + provider := PubSubProvider{ + Adapter: mockAdapter, + } + err := provider.Startup(context.Background()) + + assert.NoError(t, err) + mockAdapter.AssertExpectations(t) +} + +func TestProvider_Startup_Error(t *testing.T) { + mockAdapter := new(MockAdapter) + mockAdapter.On("Startup", mock.Anything).Return(errors.New("connect error")) + + provider := PubSubProvider{ + Adapter: mockAdapter, + } + err := provider.Startup(context.Background()) + + assert.Error(t, err) + mockAdapter.AssertExpectations(t) +} + +func TestProvider_Shutdown_Success(t *testing.T) { + mockAdapter := new(MockAdapter) + mockAdapter.On("Shutdown", mock.Anything).Return(nil) + + provider := PubSubProvider{ + Adapter: mockAdapter, + } + err := provider.Shutdown(context.Background()) + + assert.NoError(t, err) + mockAdapter.AssertExpectations(t) +} + +func TestProvider_Shutdown_Error(t *testing.T) { + mockAdapter := new(MockAdapter) + mockAdapter.On("Shutdown", mock.Anything).Return(errors.New("close error")) + + provider := PubSubProvider{ + Adapter: mockAdapter, + } + err := provider.Shutdown(context.Background()) + + assert.Error(t, err) + mockAdapter.AssertExpectations(t) +} + +func TestProvider_ID(t *testing.T) { + const testID = "test-id" + provider := PubSubProvider{ + id: testID, + } + assert.Equal(t, testID, provider.ID()) +} + +func TestProvider_TypeID(t *testing.T) { + provider := PubSubProvider{} + assert.Equal(t, providerTypeID, provider.TypeID()) +} diff --git a/router/pkg/pubsub/nats/provider_test.go b/router/pkg/pubsub/nats/provider_test.go new file mode 100644 index 0000000000..a3910f2850 --- /dev/null +++ b/router/pkg/pubsub/nats/provider_test.go @@ -0,0 +1,107 @@ +package nats + +import ( + "context" + "errors" + "io" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/mock" + "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/resolve" +) + +// MockAdapter is a mock implementation of AdapterInterface. +type MockAdapter struct { + mock.Mock +} + +func (m *MockAdapter) Startup(ctx context.Context) error { + args := m.Called(ctx) + return args.Error(0) +} + +func (m *MockAdapter) Shutdown(ctx context.Context) error { + args := m.Called(ctx) + return args.Error(0) +} + +func (m *MockAdapter) Publish(ctx context.Context, event PublishAndRequestEventConfiguration) error { + args := m.Called(ctx, event) + return args.Error(0) +} + +func (m *MockAdapter) Subscribe(ctx context.Context, event SubscriptionEventConfiguration, updater resolve.SubscriptionUpdater) error { + args := m.Called(ctx, event, updater) + return args.Error(0) +} + +func (m *MockAdapter) Request(ctx context.Context, event PublishAndRequestEventConfiguration, w io.Writer) error { + args := m.Called(ctx, event, w) + return args.Error(0) +} + +func TestProvider_Startup_Success(t *testing.T) { + mockAdapter := new(MockAdapter) + mockAdapter.On("Startup", mock.Anything).Return(nil) + + provider := PubSubProvider{ + Adapter: mockAdapter, + } + err := provider.Startup(context.Background()) + + assert.NoError(t, err) + mockAdapter.AssertExpectations(t) +} + +func TestProvider_Startup_Error(t *testing.T) { + mockAdapter := new(MockAdapter) + mockAdapter.On("Startup", mock.Anything).Return(errors.New("connect error")) + + provider := PubSubProvider{ + Adapter: mockAdapter, + } + err := provider.Startup(context.Background()) + + assert.Error(t, err) + mockAdapter.AssertExpectations(t) +} + +func TestProvider_Shutdown_Success(t *testing.T) { + mockAdapter := new(MockAdapter) + mockAdapter.On("Shutdown", mock.Anything).Return(nil) + + provider := PubSubProvider{ + Adapter: mockAdapter, + } + err := provider.Shutdown(context.Background()) + + assert.NoError(t, err) + mockAdapter.AssertExpectations(t) +} + +func TestProvider_Shutdown_Error(t *testing.T) { + mockAdapter := new(MockAdapter) + mockAdapter.On("Shutdown", mock.Anything).Return(errors.New("close error")) + + provider := PubSubProvider{ + Adapter: mockAdapter, + } + err := provider.Shutdown(context.Background()) + + assert.Error(t, err) + mockAdapter.AssertExpectations(t) +} + +func TestProvider_ID(t *testing.T) { + const testID = "test-id" + provider := PubSubProvider{ + id: testID, + } + assert.Equal(t, testID, provider.ID()) +} + +func TestProvider_TypeID(t *testing.T) { + provider := PubSubProvider{} + assert.Equal(t, providerTypeID, provider.TypeID()) +} From 839e8b755d99e723a8fd41994443fb886572f09c Mon Sep 17 00:00:00 2001 From: Alessandro Pagnin Date: Thu, 15 May 2025 18:44:22 +0200 Subject: [PATCH 061/126] docs: update README with detailed PubSub provider implementation steps --- router/pkg/pubsub/README.md | 58 +++++++++++++++++++------------------ 1 file changed, 30 insertions(+), 28 deletions(-) diff --git a/router/pkg/pubsub/README.md b/router/pkg/pubsub/README.md index ebcc636424..9922825bb6 100644 --- a/router/pkg/pubsub/README.md +++ b/router/pkg/pubsub/README.md @@ -7,24 +7,23 @@ You need to change the [router proto](../../../proto/wg/cosmo/node/v1/node.proto Add the provider configuration like the `KafkaEventConfiguration` and then add it as repeated inside the `DataSourceCustomEvents`. -The fields of `KafkaEventConfiguration` will depends on the provider. If the providers uses as grouping mechanisms of the messages "channel" it will be called "channels", if it is "Topic" it will be "topics", and so on. +The fields of `KafkaEventConfiguration` will depends on the provider. If the providers use as grouping mechanisms of the messages "channel," it will be called "channels," if it is "Topic," it will be "topics," and so on. After this you will have to compile the proto launching from the main folder the command `make generate-go`. ## Build the PubSub Provider -To build a PubSub provider you need to implement 4 things: +To build a PubSub provider, you need to implement five things: - `Adapter` -- `ProviderFactory` -- `PubSubProvider` - `PubSubDataSource` - -And then add it inside the `GetProviderFactories` function. +- `PubSubProvider` +- `PubSubProviderBuilder` +- `PubSubProviderBuilderFactory` ### Adapter -The Adapter contains the logic that is actually calling the provider, usually it implement an interface as follows: +The Adapter contains the logic actually calling the provider. Usually it implements an interface as follows: ```go type AdapterInterface interface { @@ -38,40 +37,43 @@ type AdapterInterface interface { The content of `SubscriptionEventConfiguration` and `PublishEventConfiguration` depends on the provider, you can see an example of them in the [kafka implementation](./kafka/pubsub_datasource.go). -### ProviderFactory +### PubSubDataSource -The `ProviderFactory` is the initial contact point where you receive: -- `ctx context.Context`, usually passed down to the adapter -- [`*nodev1.DataSourceConfiguration`](../../gen/proto/wg/cosmo/node/v1/node.pb.go#DataSourceConfiguration), that contains everything you need about the provider data parsed from the schema. -- `*plan.DataSourceMetadata`, usually not needed -- [`config.EventsConfiguration`](../config/config.go#EventsConfiguration) that contains the config needed to setup the provider connection -- `*zap.Logger` -- `hostName string`, useful if you need to identify the connection based on the local host name -- `routerListenAddr string`, useful if you need to identify the connection based on different router instances in the same host +The `[PubSubDataSource](./datasource/datasource.go)` is the junction between the engine `resolve.DataSource` and the Provider that we are implementing. -The responsability of the factory is to initialize the PubSubProvider, like in this implementation for an `ExampleProvider`: +You can see an example in [kafka `PubSubDataSource`](./kafka/pubsub_datasource.go). -You can see as an example of the `GetProvider` function in the [kafka implementation](./kafka/provider.go). +To complete the `PubSubDataSource` implementation you should also add the engine data source. -### PubSubProvider +Then you have to implement a `SubscriptionDataSource`, a structure that must implement all the methods needed by the interface `resolve.SubscriptionDataSource`, like the [kafka implementation](./kafka/engine_datasource.go). -So, the `PubSubProvider` has already the Adapter of the provider initialized, and it will be called on a `Visitor.EnterField` call from the engine to check if the `PubSubProvider` is matching any `EngineEventConfiguration`. +And also, you have to implement a `DataSource`, a structure that must implement all the methods needed by the interface `resolve.DataSource`, like `PublishDataSource` in the [kafka implementation](./kafka/pubsub_datasource.go). -The responsability of the `PubSubProvider` is to match the `EngineEventConfiguration` and initialize a `PubSubDataSource` with the matching event and the provider `Adapter`. + +### PubSubProvider + +The PubSubProvider expose the `Startup` and `Shutdown` methods of the adapter to the router. You can see as an example of the `PubSubProvider` in the [kafka implementation](./kafka/provider.go). -### PubSubDataSource +### PubSubProviderBuilder -The `[PubSubDataSource](./datasource/datasource.go)` is the junction between the engine `resolve.DataSource` and the Provider that we are implementing. +The `PubSubProviderBuilder` is the structure that the router uses to create the provider. +It must implement all the methods specified in [datasource.PubSubProviderBuilder interface](./datasource/provider.go). -You can see an example in [kafka `PubSubDataSource`](./kafka/pubsub_datasource.go). +You can see as an example of the `PubSubProviderBuilder` in the [kafka implementation](./kafka/provider_builder.go). -To complete the `PubSubDataSource` implementation you should also add the engine data source. -So you have to implement the SubscriptionDataSource, a structure that implements all the methods needed by the interface `resolve.SubscriptionDataSource`, like the [kafka implementation](./kafka/engine_datasource.go). +### PubSubProviderBuilderFactory + +The `PubSubProviderBuilderFactory` is the initial contact point where you receive: +- `ctx context.Context`, usually passed down to the adapter +- [`config.EventsConfiguration`](../config/config.go) that contains the config needed to set up the provider connection +- `*zap.Logger` +- `hostName string`, useful if you need to identify the connection based on the local host name +- `routerListenAddr string`, useful if you need to identify the connection based on different router instances in the same host -And also, you have to implement the DataSource, a structure that implements all the methods needed by the interface `resolve.DataSource`, like `PublishDataSource` in the [kafka implementation](./kafka/pubsub_datasource.go). +You can see as an example of the `PubSubProviderBuilderFactory` function in the [kafka implementation](./kafka/provider_builder.go). # How to use the new PubSub Provider @@ -84,4 +86,4 @@ pubsub: type: new-provider ``` -But to use it in the schema you will have to work in the [composition](../../../composition) folder. \ No newline at end of file +But to use it in the schema, you will have to work in the [composition](../../../composition) folder. \ No newline at end of file From 5e4a9b8c64a921957768f70a3471247283a58839 Mon Sep 17 00:00:00 2001 From: Alessandro Pagnin Date: Fri, 16 May 2025 15:01:50 +0200 Subject: [PATCH 062/126] feat: add Redis event configuration and PubSub support --- composition/src/router-configuration/types.ts | 15 +- composition/src/utils/string-constants.ts | 5 + .../directive-definition-data.ts | 70 + .../v1/normalization/normalization-factory.ts | 110 +- composition/src/v1/normalization/utils.ts | 6 + composition/src/v1/utils/constants.ts | 63 + composition/tests/v1/events.test.ts | 219 + .../gen/proto/wg/cosmo/node/v1/node.pb.go | 851 +-- connect/src/wg/cosmo/node/v1/node_pb.ts | 49 + .../employeeupdated/subgraph/schema.graphqls | 9 + proto/wg/cosmo/node/v1/node.proto | 6 + router-tests/events/events_config_test.go | 17 + router-tests/events/redis_events_test.go | 925 +++ router-tests/testenv/pubsub.go | 7 + .../testenv/testdata/configWithEdfsRedis.json | 5089 +++++++++++++++++ router-tests/testenv/testenv.go | 31 +- router/gen/proto/wg/cosmo/node/v1/node.pb.go | 850 +-- router/pkg/config/config.go | 6 + router/pkg/pubsub/pubsub.go | 2 + router/pkg/pubsub/redis/adapter.go | 136 + router/pkg/pubsub/redis/engine_datasource.go | 81 + router/pkg/pubsub/redis/provider.go | 33 + router/pkg/pubsub/redis/provider_builder.go | 123 + router/pkg/pubsub/redis/pubsub_datasource.go | 89 + 24 files changed, 8029 insertions(+), 763 deletions(-) create mode 100644 router-tests/events/redis_events_test.go create mode 100644 router-tests/testenv/testdata/configWithEdfsRedis.json create mode 100644 router/pkg/pubsub/redis/adapter.go create mode 100644 router/pkg/pubsub/redis/engine_datasource.go create mode 100644 router/pkg/pubsub/redis/provider.go create mode 100644 router/pkg/pubsub/redis/provider_builder.go create mode 100644 router/pkg/pubsub/redis/pubsub_datasource.go diff --git a/composition/src/router-configuration/types.ts b/composition/src/router-configuration/types.ts index 4d66db9d4f..72908b2e0c 100644 --- a/composition/src/router-configuration/types.ts +++ b/composition/src/router-configuration/types.ts @@ -2,6 +2,8 @@ export type NatsEventType = 'subscribe' | 'publish' | 'request'; export type KafkaEventType = 'subscribe' | 'publish'; +export type RedisEventType = 'subscribe' | 'publish'; + export type StreamConfiguration = { consumerInactiveThreshold: number; consumerName: string; @@ -25,7 +27,18 @@ export type NatsEventConfiguration = { streamConfiguration?: StreamConfiguration; }; -export type EventConfiguration = KafkaEventConfiguration | NatsEventConfiguration; +export type RedisEventConfiguration = { + fieldName: string; + providerId: string; + providerType: 'redis'; + channels: string[]; + type: RedisEventType; +}; + +export type EventConfiguration = + | KafkaEventConfiguration + | NatsEventConfiguration + | RedisEventConfiguration; export type SubscriptionFilterValue = boolean | null | number | string; diff --git a/composition/src/utils/string-constants.ts b/composition/src/utils/string-constants.ts index afe8dd85b0..c11afbe31f 100644 --- a/composition/src/utils/string-constants.ts +++ b/composition/src/utils/string-constants.ts @@ -27,6 +27,8 @@ export const EDFS_NATS_REQUEST = 'edfs__natsRequest'; export const EDFS_NATS_SUBSCRIBE = 'edfs__natsSubscribe'; export const EDFS_PUBLISH_RESULT = 'edfs__PublishResult'; export const EDFS_NATS_STREAM_CONFIGURATION = 'edfs__NatsStreamConfiguration'; +export const EDFS_REDIS_PUBLISH = 'edfs__redisPublish'; +export const EDFS_REDIS_SUBSCRIBE = 'edfs__redisSubscribe'; export const ENTITIES = 'entities'; export const ENTITIES_FIELD = '_entities'; export const ENTITY_UNION = '_Entity'; @@ -80,6 +82,7 @@ export const MUTATION_UPPER = 'MUTATION'; export const PROPAGATE = 'propagate'; export const PROVIDER_TYPE_KAFKA = 'kafka'; export const PROVIDER_TYPE_NATS = 'nats'; +export const PROVIDER_TYPE_REDIS = 'redis'; export const NOT_APPLICABLE = 'N/A'; export const NAME = 'name'; export const NON_NULLABLE_EDFS_PUBLISH_EVENT_RESULT = 'edfs__PublishResult!'; @@ -143,6 +146,8 @@ export const UNION_UPPER = 'UNION'; export const URL_LOWER = 'url'; export const VALUES = 'values'; export const VARIABLE_DEFINITION_UPPER = 'VARIABLE_DEFINITION'; +export const CHANNEL = 'channel'; +export const CHANNELS = 'channels'; export const EXECUTABLE_DIRECTIVE_LOCATIONS = new Set([ FIELD_UPPER, diff --git a/composition/src/v1/normalization/directive-definition-data.ts b/composition/src/v1/normalization/directive-definition-data.ts index 079fc6411e..1ee54c4ebc 100644 --- a/composition/src/v1/normalization/directive-definition-data.ts +++ b/composition/src/v1/normalization/directive-definition-data.ts @@ -10,6 +10,8 @@ import { EDFS_NATS_PUBLISH_DEFINITION, EDFS_NATS_REQUEST_DEFINITION, EDFS_NATS_SUBSCRIBE_DEFINITION, + EDFS_REDIS_PUBLISH_DEFINITION, + EDFS_REDIS_SUBSCRIBE_DEFINITION, EXTENDS_DEFINITION, EXTERNAL_DEFINITION, INACCESSIBLE_DEFINITION, @@ -92,6 +94,10 @@ import { TOPICS, UNION_UPPER, URL_LOWER, + CHANNEL, + CHANNELS, + EDFS_REDIS_PUBLISH, + EDFS_REDIS_SUBSCRIBE, } from '../../utils/string-constants'; export const AUTHENTICATED_DEFINITION_DATA: DirectiveDefinitionData = { @@ -433,6 +439,70 @@ export const NATS_SUBSCRIBE_DEFINITION_DATA: DirectiveDefinitionData = { requiredArgumentNames: new Set([SUBJECTS]), }; +export const REDIS_PUBLISH_DEFINITION_DATA: DirectiveDefinitionData = { + argumentTypeNodeByArgumentName: new Map([ + [ + CHANNEL, + { + name: CHANNEL, + typeNode: REQUIRED_STRING_TYPE_NODE, + }, + ], + [ + PROVIDER_ID, + { + name: PROVIDER_ID, + typeNode: REQUIRED_STRING_TYPE_NODE, + defaultValue: { + kind: Kind.STRING, + value: DEFAULT_EDFS_PROVIDER_ID, + }, + }, + ], + ]), + isRepeatable: false, + locations: new Set([FIELD_DEFINITION_UPPER]), + name: EDFS_REDIS_PUBLISH, + node: EDFS_REDIS_PUBLISH_DEFINITION, + optionalArgumentNames: new Set([PROVIDER_ID]), + requiredArgumentNames: new Set([CHANNEL]), +}; + +export const REDIS_SUBSCRIBE_DEFINITION_DATA: DirectiveDefinitionData = { + argumentTypeNodeByArgumentName: new Map([ + [ + CHANNELS, + { + name: CHANNELS, + typeNode: { + kind: Kind.NON_NULL_TYPE, + type: { + kind: Kind.LIST_TYPE, + type: REQUIRED_STRING_TYPE_NODE, + }, + }, + }, + ], + [ + PROVIDER_ID, + { + name: PROVIDER_ID, + typeNode: REQUIRED_STRING_TYPE_NODE, + defaultValue: { + kind: Kind.STRING, + value: DEFAULT_EDFS_PROVIDER_ID, + }, + }, + ], + ]), + isRepeatable: false, + locations: new Set([FIELD_DEFINITION_UPPER]), + name: EDFS_REDIS_SUBSCRIBE, + node: EDFS_REDIS_SUBSCRIBE_DEFINITION, + optionalArgumentNames: new Set([PROVIDER_ID]), + requiredArgumentNames: new Set([CHANNELS]), +}; + export const OVERRIDE_DEFINITION_DATA: DirectiveDefinitionData = { argumentTypeNodeByArgumentName: new Map([ [ diff --git a/composition/src/v1/normalization/normalization-factory.ts b/composition/src/v1/normalization/normalization-factory.ts index 553ded1b0e..78ef1f88af 100644 --- a/composition/src/v1/normalization/normalization-factory.ts +++ b/composition/src/v1/normalization/normalization-factory.ts @@ -322,6 +322,11 @@ import { SUCCESS, TOPIC, TOPICS, + CHANNEL, + CHANNELS, + EDFS_REDIS_PUBLISH, + EDFS_REDIS_SUBSCRIBE, + PROVIDER_TYPE_REDIS, } from '../../utils/string-constants'; import { MAX_INT32 } from '../../utils/integer-constants'; import { @@ -2409,6 +2414,89 @@ export class NormalizationFactory { }; } + getRedisPublishConfiguration( + directive: ConstDirectiveNode, + argumentDataByArgumentName: Map, + fieldName: string, + errorMessages: string[], + ): EventConfiguration | undefined { + const channels: string[] = []; + let providerId = DEFAULT_EDFS_PROVIDER_ID; + for (const argumentNode of directive.arguments || []) { + switch (argumentNode.name.value) { + case CHANNEL: { + if (argumentNode.value.kind !== Kind.STRING || argumentNode.value.value.length < 1) { + errorMessages.push(invalidEventSubjectErrorMessage(CHANNEL)); + continue; + } + validateArgumentTemplateReferences(argumentNode.value.value, argumentDataByArgumentName, errorMessages); + channels.push(argumentNode.value.value); + break; + } + case PROVIDER_ID: { + if (argumentNode.value.kind !== Kind.STRING || argumentNode.value.value.length < 1) { + errorMessages.push(invalidEventProviderIdErrorMessage); + continue; + } + providerId = argumentNode.value.value; + break; + } + } + } + if (errorMessages.length > 0) { + return; + } + return { fieldName, providerId, providerType: PROVIDER_TYPE_REDIS, channels, type: PUBLISH }; + } + + getRedisSubscribeConfiguration( + directive: ConstDirectiveNode, + argumentDataByArgumentName: Map, + fieldName: string, + errorMessages: string[], + ): EventConfiguration | undefined { + const channels: string[] = []; + let providerId = DEFAULT_EDFS_PROVIDER_ID; + for (const argumentNode of directive.arguments || []) { + switch (argumentNode.name.value) { + case CHANNELS: { + //@TODO list coercion + if (argumentNode.value.kind !== Kind.LIST) { + errorMessages.push(invalidEventSubjectsErrorMessage(CHANNELS)); + continue; + } + for (const value of argumentNode.value.values) { + if (value.kind !== Kind.STRING || value.value.length < 1) { + errorMessages.push(invalidEventSubjectsItemErrorMessage(CHANNELS)); + break; + } + validateArgumentTemplateReferences(value.value, argumentDataByArgumentName, errorMessages); + channels.push(value.value); + } + break; + } + case PROVIDER_ID: { + if (argumentNode.value.kind !== Kind.STRING || argumentNode.value.value.length < 1) { + errorMessages.push(invalidEventProviderIdErrorMessage); + continue; + } + providerId = argumentNode.value.value; + break; + } + } + } + if (errorMessages.length > 0) { + return; + } + return { + fieldName, + providerId, + providerType: PROVIDER_TYPE_REDIS, + channels, + type: SUBSCRIBE, + }; + } + validateSubscriptionFilterDirectiveLocation(node: FieldDefinitionNode) { if (!node.directives) { return; @@ -2486,6 +2574,24 @@ export class NormalizationFactory { ); break; } + case EDFS_REDIS_PUBLISH: { + eventConfiguration = this.getRedisPublishConfiguration( + directive, + argumentDataByArgumentName, + fieldName, + errorMessages, + ); + break; + } + case EDFS_REDIS_SUBSCRIBE: { + eventConfiguration = this.getRedisSubscribeConfiguration( + directive, + argumentDataByArgumentName, + fieldName, + errorMessages, + ); + break; + } default: continue; } @@ -2511,11 +2617,11 @@ export class NormalizationFactory { getValidEventsDirectiveNamesForOperationTypeNode(operationTypeNode: OperationTypeNode): Set { switch (operationTypeNode) { case OperationTypeNode.MUTATION: - return new Set([EDFS_KAFKA_PUBLISH, EDFS_NATS_PUBLISH, EDFS_NATS_REQUEST]); + return new Set([EDFS_KAFKA_PUBLISH, EDFS_NATS_PUBLISH, EDFS_NATS_REQUEST, EDFS_REDIS_PUBLISH]); case OperationTypeNode.QUERY: return new Set([EDFS_NATS_REQUEST]); case OperationTypeNode.SUBSCRIPTION: - return new Set([EDFS_KAFKA_SUBSCRIBE, EDFS_NATS_SUBSCRIBE]); + return new Set([EDFS_KAFKA_SUBSCRIBE, EDFS_NATS_SUBSCRIBE, EDFS_REDIS_SUBSCRIBE]); } } diff --git a/composition/src/v1/normalization/utils.ts b/composition/src/v1/normalization/utils.ts index f91055c06f..fa95a399c8 100644 --- a/composition/src/v1/normalization/utils.ts +++ b/composition/src/v1/normalization/utils.ts @@ -37,6 +37,8 @@ import { NATS_PUBLISH_DEFINITION_DATA, NATS_REQUEST_DEFINITION_DATA, NATS_SUBSCRIBE_DEFINITION_DATA, + REDIS_PUBLISH_DEFINITION_DATA, + REDIS_SUBSCRIBE_DEFINITION_DATA, OVERRIDE_DEFINITION_DATA, PROVIDES_DEFINITION_DATA, REQUIRES_DEFINITION_DATA, @@ -57,6 +59,8 @@ import { EDFS_NATS_PUBLISH, EDFS_NATS_REQUEST, EDFS_NATS_SUBSCRIBE, + EDFS_REDIS_PUBLISH, + EDFS_REDIS_SUBSCRIBE, EXTENDS, EXTERNAL, FIELDS, @@ -390,6 +394,8 @@ export function initializeDirectiveDefinitionDatas(): Map([ [DEPRECATED, DEPRECATED_DEFINITION], [EXTENDS, EXTENDS_DEFINITION], @@ -424,6 +483,8 @@ export const BASE_DIRECTIVE_DEFINITION_BY_DIRECTIVE_NAME = new Map { ); }); + + test('that an error is returned if a Redis subscribe subject references a valid argument and an invalid one', () => { + const result = normalizeSubgraph( + subgraphAS.definitions, + subgraphAS.name, + undefined, + ROUTER_COMPATIBILITY_VERSION_ONE, + ) as NormalizationResultFailure; + expect(result.success).toBe(false); + expect(result.errors).toHaveLength(1); + expect(result.errors[0]).toStrictEqual( + invalidEventDirectiveError('edfs__redisSubscribe', 'Subscription.entitySubscription', [ + undefinedEventSubjectsArgumentErrorMessage('invalid'), + ]), + ); + }); + + test('that an error is returned if a Redis publish subject references a valid argument and an invalid one', () => { + const result = normalizeSubgraph( + subgraphAT.definitions, + subgraphAT.name, + undefined, + ROUTER_COMPATIBILITY_VERSION_ONE, + ) as NormalizationResultFailure; + expect(result.success).toBe(false); + expect(result.errors).toHaveLength(1); + expect(result.errors[0]).toStrictEqual( + invalidEventDirectiveError('edfs__redisPublish', 'Mutation.entityPublish', [ + undefinedEventSubjectsArgumentErrorMessage('invalid'), + ]), + ); + }); + + test('that an error is returned if a Redis subscribe subject references two invalid arguments', () => { + const result = normalizeSubgraph( + subgraphAU.definitions, + subgraphAU.name, + undefined, + ROUTER_COMPATIBILITY_VERSION_ONE, + ) as NormalizationResultFailure; + expect(result.success).toBe(false); + expect(result.errors).toHaveLength(1); + expect(result.errors[0]).toStrictEqual( + invalidEventDirectiveError('edfs__redisSubscribe', 'Subscription.entitySubscription', [ + undefinedEventSubjectsArgumentErrorMessage('invalid'), + undefinedEventSubjectsArgumentErrorMessage('alsoinvalid'), + ]), + ); + }); + + test('that an error is returned if a Redis publish subject references two invalid arguments', () => { + const result = normalizeSubgraph( + subgraphAV.definitions, + subgraphAV.name, + undefined, + ROUTER_COMPATIBILITY_VERSION_ONE, + ) as NormalizationResultFailure; + expect(result.success).toBe(false); + expect(result.errors).toHaveLength(1); + expect(result.errors[0]).toStrictEqual( + invalidEventDirectiveError('edfs__redisPublish', 'Mutation.entityPublish', [ + undefinedEventSubjectsArgumentErrorMessage('invalid'), + undefinedEventSubjectsArgumentErrorMessage('alsoinvalid'), + ]), + ); + }); + + test('that Redis configuration is correctly generated', () => { + const result = normalizeSubgraph( + subgraphAW.definitions, + subgraphAW.name, + undefined, + ROUTER_COMPATIBILITY_VERSION_ONE, + ) as NormalizationResultSuccess; + expect(result.success).toBe(true); + expect(result.configurationDataByTypeName).toStrictEqual( + new Map([ + [ + 'Entity', + { + externalFieldNames: new Set(['id']), + fieldNames: new Set(['id']), + isRootNode: true, + keys: [{ fieldName: '', selectionSet: 'id', disableEntityResolver: true }], + typeName: 'Entity', + }, + ], + [ + 'Mutation', + { + fieldNames: new Set(['redisMutation']), + isRootNode: true, + typeName: 'Mutation', + events: [ + { + fieldName: 'redisMutation', + providerId: 'myRedis', + providerType: PROVIDER_TYPE_REDIS, + channels: ['entityAdded'], + type: 'publish', + }, + ], + }, + ], + [ + 'Subscription', + { + fieldNames: new Set(['redisSubscription']), + isRootNode: true, + typeName: 'Subscription', + events: [ + { + fieldName: 'redisSubscription', + providerId: 'myRedis', + providerType: PROVIDER_TYPE_REDIS, + channels: ['entityAdded', 'entityUpdated'], + type: 'subscribe', + }, + ], + }, + ], + [ + 'edfs__PublishResult', + { + fieldNames: new Set(['success']), + isRootNode: false, + typeName: 'edfs__PublishResult', + }, + ], + ]), + ); + }); + describe('Federation tests', () => { test('that an error is returned if the subgraph includes fields that are not part of an entity key', () => { const result = federateSubgraphs([subgraphC], ROUTER_COMPATIBILITY_VERSION_ONE) as FederationResultFailure; @@ -1954,3 +2090,86 @@ const subgraphAR: Subgraph = { } `), }; + + +const subgraphAS: Subgraph = { + name: 'subgraph-as', + url: '', + definitions: parse(` + type Subscription { + entitySubscription(id: ID!): Entity! @edfs__redisSubscribe( + channels: ["entities.{{ args.invalid }}{{ args.id }}"], + ) + } + type Entity @key(fields: "id", resolvable: false) { + id: ID! @external + } + `), +}; + +const subgraphAT: Subgraph = { + name: 'subgraph-at', + url: '', + definitions: parse(` + type Mutation { + entityPublish(id: ID!): edfs__PublishResult! @edfs__redisPublish( + channel: "entities.{{ args.invalid }}{{ args.id }}", + ) + } + type edfs__PublishResult { + success: Boolean! + } + `), +}; + +const subgraphAU: Subgraph = { + name: 'subgraph-au', + url: '', + definitions: parse(` + type Subscription { + entitySubscription(id: ID!): Entity! @edfs__redisSubscribe( + channels: ["entities.{{ args.invalid }}{{ args.alsoinvalid }}"], + ) + } + type Entity @key(fields: "id", resolvable: false) { + id: ID! @external + } + `), +}; + +const subgraphAV: Subgraph = { + name: 'subgraph-av', + url: '', + definitions: parse(` + type Mutation { + entityPublish(id: ID!): edfs__PublishResult! @edfs__redisPublish( + channel: "entities.{{ args.invalid }}{{ args.alsoinvalid }}", + ) + } + type edfs__PublishResult { + success: Boolean! + } + `), +}; + +const subgraphAW: Subgraph = { + name: 'subgraph-aw', + url: '', + definitions: parse(` + type Entity @key(fields: "id", resolvable: false) { + id: ID! @external + } + + type Mutation { + redisMutation: edfs__PublishResult! @edfs__redisPublish(channel: "entityAdded", providerId: "myRedis") + } + + type Subscription { + redisSubscription: Entity! @edfs__redisSubscribe(channels: ["entityAdded", "entityUpdated"], providerId: "myRedis") + } + + type edfs__PublishResult { + success: Boolean! + } + `), +}; \ No newline at end of file diff --git a/connect-go/gen/proto/wg/cosmo/node/v1/node.pb.go b/connect-go/gen/proto/wg/cosmo/node/v1/node.pb.go index f6ecade50e..0344ddb638 100644 --- a/connect-go/gen/proto/wg/cosmo/node/v1/node.pb.go +++ b/connect-go/gen/proto/wg/cosmo/node/v1/node.pb.go @@ -2189,6 +2189,61 @@ func (x *KafkaEventConfiguration) GetTopics() []string { return nil } +type RedisEventConfiguration struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + EngineEventConfiguration *EngineEventConfiguration `protobuf:"bytes,1,opt,name=engine_event_configuration,json=engineEventConfiguration,proto3" json:"engine_event_configuration,omitempty"` + Channels []string `protobuf:"bytes,2,rep,name=channels,proto3" json:"channels,omitempty"` +} + +func (x *RedisEventConfiguration) Reset() { + *x = RedisEventConfiguration{} + if protoimpl.UnsafeEnabled { + mi := &file_wg_cosmo_node_v1_node_proto_msgTypes[28] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *RedisEventConfiguration) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RedisEventConfiguration) ProtoMessage() {} + +func (x *RedisEventConfiguration) ProtoReflect() protoreflect.Message { + mi := &file_wg_cosmo_node_v1_node_proto_msgTypes[28] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RedisEventConfiguration.ProtoReflect.Descriptor instead. +func (*RedisEventConfiguration) Descriptor() ([]byte, []int) { + return file_wg_cosmo_node_v1_node_proto_rawDescGZIP(), []int{28} +} + +func (x *RedisEventConfiguration) GetEngineEventConfiguration() *EngineEventConfiguration { + if x != nil { + return x.EngineEventConfiguration + } + return nil +} + +func (x *RedisEventConfiguration) GetChannels() []string { + if x != nil { + return x.Channels + } + return nil +} + type EngineEventConfiguration struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -2203,7 +2258,7 @@ type EngineEventConfiguration struct { func (x *EngineEventConfiguration) Reset() { *x = EngineEventConfiguration{} if protoimpl.UnsafeEnabled { - mi := &file_wg_cosmo_node_v1_node_proto_msgTypes[28] + mi := &file_wg_cosmo_node_v1_node_proto_msgTypes[29] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2216,7 +2271,7 @@ func (x *EngineEventConfiguration) String() string { func (*EngineEventConfiguration) ProtoMessage() {} func (x *EngineEventConfiguration) ProtoReflect() protoreflect.Message { - mi := &file_wg_cosmo_node_v1_node_proto_msgTypes[28] + mi := &file_wg_cosmo_node_v1_node_proto_msgTypes[29] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2229,7 +2284,7 @@ func (x *EngineEventConfiguration) ProtoReflect() protoreflect.Message { // Deprecated: Use EngineEventConfiguration.ProtoReflect.Descriptor instead. func (*EngineEventConfiguration) Descriptor() ([]byte, []int) { - return file_wg_cosmo_node_v1_node_proto_rawDescGZIP(), []int{28} + return file_wg_cosmo_node_v1_node_proto_rawDescGZIP(), []int{29} } func (x *EngineEventConfiguration) GetProviderId() string { @@ -2267,12 +2322,13 @@ type DataSourceCustomEvents struct { Nats []*NatsEventConfiguration `protobuf:"bytes,1,rep,name=nats,proto3" json:"nats,omitempty"` Kafka []*KafkaEventConfiguration `protobuf:"bytes,2,rep,name=kafka,proto3" json:"kafka,omitempty"` + Redis []*RedisEventConfiguration `protobuf:"bytes,3,rep,name=redis,proto3" json:"redis,omitempty"` } func (x *DataSourceCustomEvents) Reset() { *x = DataSourceCustomEvents{} if protoimpl.UnsafeEnabled { - mi := &file_wg_cosmo_node_v1_node_proto_msgTypes[29] + mi := &file_wg_cosmo_node_v1_node_proto_msgTypes[30] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2285,7 +2341,7 @@ func (x *DataSourceCustomEvents) String() string { func (*DataSourceCustomEvents) ProtoMessage() {} func (x *DataSourceCustomEvents) ProtoReflect() protoreflect.Message { - mi := &file_wg_cosmo_node_v1_node_proto_msgTypes[29] + mi := &file_wg_cosmo_node_v1_node_proto_msgTypes[30] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2298,7 +2354,7 @@ func (x *DataSourceCustomEvents) ProtoReflect() protoreflect.Message { // Deprecated: Use DataSourceCustomEvents.ProtoReflect.Descriptor instead. func (*DataSourceCustomEvents) Descriptor() ([]byte, []int) { - return file_wg_cosmo_node_v1_node_proto_rawDescGZIP(), []int{29} + return file_wg_cosmo_node_v1_node_proto_rawDescGZIP(), []int{30} } func (x *DataSourceCustomEvents) GetNats() []*NatsEventConfiguration { @@ -2315,6 +2371,13 @@ func (x *DataSourceCustomEvents) GetKafka() []*KafkaEventConfiguration { return nil } +func (x *DataSourceCustomEvents) GetRedis() []*RedisEventConfiguration { + if x != nil { + return x.Redis + } + return nil +} + type DataSourceCustom_Static struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -2326,7 +2389,7 @@ type DataSourceCustom_Static struct { func (x *DataSourceCustom_Static) Reset() { *x = DataSourceCustom_Static{} if protoimpl.UnsafeEnabled { - mi := &file_wg_cosmo_node_v1_node_proto_msgTypes[30] + mi := &file_wg_cosmo_node_v1_node_proto_msgTypes[31] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2339,7 +2402,7 @@ func (x *DataSourceCustom_Static) String() string { func (*DataSourceCustom_Static) ProtoMessage() {} func (x *DataSourceCustom_Static) ProtoReflect() protoreflect.Message { - mi := &file_wg_cosmo_node_v1_node_proto_msgTypes[30] + mi := &file_wg_cosmo_node_v1_node_proto_msgTypes[31] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2352,7 +2415,7 @@ func (x *DataSourceCustom_Static) ProtoReflect() protoreflect.Message { // Deprecated: Use DataSourceCustom_Static.ProtoReflect.Descriptor instead. func (*DataSourceCustom_Static) Descriptor() ([]byte, []int) { - return file_wg_cosmo_node_v1_node_proto_rawDescGZIP(), []int{30} + return file_wg_cosmo_node_v1_node_proto_rawDescGZIP(), []int{31} } func (x *DataSourceCustom_Static) GetData() *ConfigurationVariable { @@ -2377,7 +2440,7 @@ type ConfigurationVariable struct { func (x *ConfigurationVariable) Reset() { *x = ConfigurationVariable{} if protoimpl.UnsafeEnabled { - mi := &file_wg_cosmo_node_v1_node_proto_msgTypes[31] + mi := &file_wg_cosmo_node_v1_node_proto_msgTypes[32] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2390,7 +2453,7 @@ func (x *ConfigurationVariable) String() string { func (*ConfigurationVariable) ProtoMessage() {} func (x *ConfigurationVariable) ProtoReflect() protoreflect.Message { - mi := &file_wg_cosmo_node_v1_node_proto_msgTypes[31] + mi := &file_wg_cosmo_node_v1_node_proto_msgTypes[32] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2403,7 +2466,7 @@ func (x *ConfigurationVariable) ProtoReflect() protoreflect.Message { // Deprecated: Use ConfigurationVariable.ProtoReflect.Descriptor instead. func (*ConfigurationVariable) Descriptor() ([]byte, []int) { - return file_wg_cosmo_node_v1_node_proto_rawDescGZIP(), []int{31} + return file_wg_cosmo_node_v1_node_proto_rawDescGZIP(), []int{32} } func (x *ConfigurationVariable) GetKind() ConfigurationVariableKind { @@ -2453,7 +2516,7 @@ type DirectiveConfiguration struct { func (x *DirectiveConfiguration) Reset() { *x = DirectiveConfiguration{} if protoimpl.UnsafeEnabled { - mi := &file_wg_cosmo_node_v1_node_proto_msgTypes[32] + mi := &file_wg_cosmo_node_v1_node_proto_msgTypes[33] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2466,7 +2529,7 @@ func (x *DirectiveConfiguration) String() string { func (*DirectiveConfiguration) ProtoMessage() {} func (x *DirectiveConfiguration) ProtoReflect() protoreflect.Message { - mi := &file_wg_cosmo_node_v1_node_proto_msgTypes[32] + mi := &file_wg_cosmo_node_v1_node_proto_msgTypes[33] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2479,7 +2542,7 @@ func (x *DirectiveConfiguration) ProtoReflect() protoreflect.Message { // Deprecated: Use DirectiveConfiguration.ProtoReflect.Descriptor instead. func (*DirectiveConfiguration) Descriptor() ([]byte, []int) { - return file_wg_cosmo_node_v1_node_proto_rawDescGZIP(), []int{32} + return file_wg_cosmo_node_v1_node_proto_rawDescGZIP(), []int{33} } func (x *DirectiveConfiguration) GetDirectiveName() string { @@ -2508,7 +2571,7 @@ type URLQueryConfiguration struct { func (x *URLQueryConfiguration) Reset() { *x = URLQueryConfiguration{} if protoimpl.UnsafeEnabled { - mi := &file_wg_cosmo_node_v1_node_proto_msgTypes[33] + mi := &file_wg_cosmo_node_v1_node_proto_msgTypes[34] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2521,7 +2584,7 @@ func (x *URLQueryConfiguration) String() string { func (*URLQueryConfiguration) ProtoMessage() {} func (x *URLQueryConfiguration) ProtoReflect() protoreflect.Message { - mi := &file_wg_cosmo_node_v1_node_proto_msgTypes[33] + mi := &file_wg_cosmo_node_v1_node_proto_msgTypes[34] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2534,7 +2597,7 @@ func (x *URLQueryConfiguration) ProtoReflect() protoreflect.Message { // Deprecated: Use URLQueryConfiguration.ProtoReflect.Descriptor instead. func (*URLQueryConfiguration) Descriptor() ([]byte, []int) { - return file_wg_cosmo_node_v1_node_proto_rawDescGZIP(), []int{33} + return file_wg_cosmo_node_v1_node_proto_rawDescGZIP(), []int{34} } func (x *URLQueryConfiguration) GetName() string { @@ -2562,7 +2625,7 @@ type HTTPHeader struct { func (x *HTTPHeader) Reset() { *x = HTTPHeader{} if protoimpl.UnsafeEnabled { - mi := &file_wg_cosmo_node_v1_node_proto_msgTypes[34] + mi := &file_wg_cosmo_node_v1_node_proto_msgTypes[35] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2575,7 +2638,7 @@ func (x *HTTPHeader) String() string { func (*HTTPHeader) ProtoMessage() {} func (x *HTTPHeader) ProtoReflect() protoreflect.Message { - mi := &file_wg_cosmo_node_v1_node_proto_msgTypes[34] + mi := &file_wg_cosmo_node_v1_node_proto_msgTypes[35] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2588,7 +2651,7 @@ func (x *HTTPHeader) ProtoReflect() protoreflect.Message { // Deprecated: Use HTTPHeader.ProtoReflect.Descriptor instead. func (*HTTPHeader) Descriptor() ([]byte, []int) { - return file_wg_cosmo_node_v1_node_proto_rawDescGZIP(), []int{34} + return file_wg_cosmo_node_v1_node_proto_rawDescGZIP(), []int{35} } func (x *HTTPHeader) GetValues() []*ConfigurationVariable { @@ -2611,7 +2674,7 @@ type MTLSConfiguration struct { func (x *MTLSConfiguration) Reset() { *x = MTLSConfiguration{} if protoimpl.UnsafeEnabled { - mi := &file_wg_cosmo_node_v1_node_proto_msgTypes[35] + mi := &file_wg_cosmo_node_v1_node_proto_msgTypes[36] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2624,7 +2687,7 @@ func (x *MTLSConfiguration) String() string { func (*MTLSConfiguration) ProtoMessage() {} func (x *MTLSConfiguration) ProtoReflect() protoreflect.Message { - mi := &file_wg_cosmo_node_v1_node_proto_msgTypes[35] + mi := &file_wg_cosmo_node_v1_node_proto_msgTypes[36] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2637,7 +2700,7 @@ func (x *MTLSConfiguration) ProtoReflect() protoreflect.Message { // Deprecated: Use MTLSConfiguration.ProtoReflect.Descriptor instead. func (*MTLSConfiguration) Descriptor() ([]byte, []int) { - return file_wg_cosmo_node_v1_node_proto_rawDescGZIP(), []int{35} + return file_wg_cosmo_node_v1_node_proto_rawDescGZIP(), []int{36} } func (x *MTLSConfiguration) GetKey() *ConfigurationVariable { @@ -2677,7 +2740,7 @@ type GraphQLSubscriptionConfiguration struct { func (x *GraphQLSubscriptionConfiguration) Reset() { *x = GraphQLSubscriptionConfiguration{} if protoimpl.UnsafeEnabled { - mi := &file_wg_cosmo_node_v1_node_proto_msgTypes[36] + mi := &file_wg_cosmo_node_v1_node_proto_msgTypes[37] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2690,7 +2753,7 @@ func (x *GraphQLSubscriptionConfiguration) String() string { func (*GraphQLSubscriptionConfiguration) ProtoMessage() {} func (x *GraphQLSubscriptionConfiguration) ProtoReflect() protoreflect.Message { - mi := &file_wg_cosmo_node_v1_node_proto_msgTypes[36] + mi := &file_wg_cosmo_node_v1_node_proto_msgTypes[37] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2703,7 +2766,7 @@ func (x *GraphQLSubscriptionConfiguration) ProtoReflect() protoreflect.Message { // Deprecated: Use GraphQLSubscriptionConfiguration.ProtoReflect.Descriptor instead. func (*GraphQLSubscriptionConfiguration) Descriptor() ([]byte, []int) { - return file_wg_cosmo_node_v1_node_proto_rawDescGZIP(), []int{36} + return file_wg_cosmo_node_v1_node_proto_rawDescGZIP(), []int{37} } func (x *GraphQLSubscriptionConfiguration) GetEnabled() bool { @@ -2753,7 +2816,7 @@ type GraphQLFederationConfiguration struct { func (x *GraphQLFederationConfiguration) Reset() { *x = GraphQLFederationConfiguration{} if protoimpl.UnsafeEnabled { - mi := &file_wg_cosmo_node_v1_node_proto_msgTypes[37] + mi := &file_wg_cosmo_node_v1_node_proto_msgTypes[38] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2766,7 +2829,7 @@ func (x *GraphQLFederationConfiguration) String() string { func (*GraphQLFederationConfiguration) ProtoMessage() {} func (x *GraphQLFederationConfiguration) ProtoReflect() protoreflect.Message { - mi := &file_wg_cosmo_node_v1_node_proto_msgTypes[37] + mi := &file_wg_cosmo_node_v1_node_proto_msgTypes[38] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2779,7 +2842,7 @@ func (x *GraphQLFederationConfiguration) ProtoReflect() protoreflect.Message { // Deprecated: Use GraphQLFederationConfiguration.ProtoReflect.Descriptor instead. func (*GraphQLFederationConfiguration) Descriptor() ([]byte, []int) { - return file_wg_cosmo_node_v1_node_proto_rawDescGZIP(), []int{37} + return file_wg_cosmo_node_v1_node_proto_rawDescGZIP(), []int{38} } func (x *GraphQLFederationConfiguration) GetEnabled() bool { @@ -2808,7 +2871,7 @@ type InternedString struct { func (x *InternedString) Reset() { *x = InternedString{} if protoimpl.UnsafeEnabled { - mi := &file_wg_cosmo_node_v1_node_proto_msgTypes[38] + mi := &file_wg_cosmo_node_v1_node_proto_msgTypes[39] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2821,7 +2884,7 @@ func (x *InternedString) String() string { func (*InternedString) ProtoMessage() {} func (x *InternedString) ProtoReflect() protoreflect.Message { - mi := &file_wg_cosmo_node_v1_node_proto_msgTypes[38] + mi := &file_wg_cosmo_node_v1_node_proto_msgTypes[39] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2834,7 +2897,7 @@ func (x *InternedString) ProtoReflect() protoreflect.Message { // Deprecated: Use InternedString.ProtoReflect.Descriptor instead. func (*InternedString) Descriptor() ([]byte, []int) { - return file_wg_cosmo_node_v1_node_proto_rawDescGZIP(), []int{38} + return file_wg_cosmo_node_v1_node_proto_rawDescGZIP(), []int{39} } func (x *InternedString) GetKey() string { @@ -2856,7 +2919,7 @@ type SingleTypeField struct { func (x *SingleTypeField) Reset() { *x = SingleTypeField{} if protoimpl.UnsafeEnabled { - mi := &file_wg_cosmo_node_v1_node_proto_msgTypes[39] + mi := &file_wg_cosmo_node_v1_node_proto_msgTypes[40] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2869,7 +2932,7 @@ func (x *SingleTypeField) String() string { func (*SingleTypeField) ProtoMessage() {} func (x *SingleTypeField) ProtoReflect() protoreflect.Message { - mi := &file_wg_cosmo_node_v1_node_proto_msgTypes[39] + mi := &file_wg_cosmo_node_v1_node_proto_msgTypes[40] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2882,7 +2945,7 @@ func (x *SingleTypeField) ProtoReflect() protoreflect.Message { // Deprecated: Use SingleTypeField.ProtoReflect.Descriptor instead. func (*SingleTypeField) Descriptor() ([]byte, []int) { - return file_wg_cosmo_node_v1_node_proto_rawDescGZIP(), []int{39} + return file_wg_cosmo_node_v1_node_proto_rawDescGZIP(), []int{40} } func (x *SingleTypeField) GetTypeName() string { @@ -2911,7 +2974,7 @@ type SubscriptionFieldCondition struct { func (x *SubscriptionFieldCondition) Reset() { *x = SubscriptionFieldCondition{} if protoimpl.UnsafeEnabled { - mi := &file_wg_cosmo_node_v1_node_proto_msgTypes[40] + mi := &file_wg_cosmo_node_v1_node_proto_msgTypes[41] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2924,7 +2987,7 @@ func (x *SubscriptionFieldCondition) String() string { func (*SubscriptionFieldCondition) ProtoMessage() {} func (x *SubscriptionFieldCondition) ProtoReflect() protoreflect.Message { - mi := &file_wg_cosmo_node_v1_node_proto_msgTypes[40] + mi := &file_wg_cosmo_node_v1_node_proto_msgTypes[41] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2937,7 +3000,7 @@ func (x *SubscriptionFieldCondition) ProtoReflect() protoreflect.Message { // Deprecated: Use SubscriptionFieldCondition.ProtoReflect.Descriptor instead. func (*SubscriptionFieldCondition) Descriptor() ([]byte, []int) { - return file_wg_cosmo_node_v1_node_proto_rawDescGZIP(), []int{40} + return file_wg_cosmo_node_v1_node_proto_rawDescGZIP(), []int{41} } func (x *SubscriptionFieldCondition) GetFieldPath() []string { @@ -2968,7 +3031,7 @@ type SubscriptionFilterCondition struct { func (x *SubscriptionFilterCondition) Reset() { *x = SubscriptionFilterCondition{} if protoimpl.UnsafeEnabled { - mi := &file_wg_cosmo_node_v1_node_proto_msgTypes[41] + mi := &file_wg_cosmo_node_v1_node_proto_msgTypes[42] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2981,7 +3044,7 @@ func (x *SubscriptionFilterCondition) String() string { func (*SubscriptionFilterCondition) ProtoMessage() {} func (x *SubscriptionFilterCondition) ProtoReflect() protoreflect.Message { - mi := &file_wg_cosmo_node_v1_node_proto_msgTypes[41] + mi := &file_wg_cosmo_node_v1_node_proto_msgTypes[42] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2994,7 +3057,7 @@ func (x *SubscriptionFilterCondition) ProtoReflect() protoreflect.Message { // Deprecated: Use SubscriptionFilterCondition.ProtoReflect.Descriptor instead. func (*SubscriptionFilterCondition) Descriptor() ([]byte, []int) { - return file_wg_cosmo_node_v1_node_proto_rawDescGZIP(), []int{41} + return file_wg_cosmo_node_v1_node_proto_rawDescGZIP(), []int{42} } func (x *SubscriptionFilterCondition) GetAnd() []*SubscriptionFilterCondition { @@ -3036,7 +3099,7 @@ type CacheWarmerOperations struct { func (x *CacheWarmerOperations) Reset() { *x = CacheWarmerOperations{} if protoimpl.UnsafeEnabled { - mi := &file_wg_cosmo_node_v1_node_proto_msgTypes[42] + mi := &file_wg_cosmo_node_v1_node_proto_msgTypes[43] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3049,7 +3112,7 @@ func (x *CacheWarmerOperations) String() string { func (*CacheWarmerOperations) ProtoMessage() {} func (x *CacheWarmerOperations) ProtoReflect() protoreflect.Message { - mi := &file_wg_cosmo_node_v1_node_proto_msgTypes[42] + mi := &file_wg_cosmo_node_v1_node_proto_msgTypes[43] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3062,7 +3125,7 @@ func (x *CacheWarmerOperations) ProtoReflect() protoreflect.Message { // Deprecated: Use CacheWarmerOperations.ProtoReflect.Descriptor instead. func (*CacheWarmerOperations) Descriptor() ([]byte, []int) { - return file_wg_cosmo_node_v1_node_proto_rawDescGZIP(), []int{42} + return file_wg_cosmo_node_v1_node_proto_rawDescGZIP(), []int{43} } func (x *CacheWarmerOperations) GetOperations() []*Operation { @@ -3084,7 +3147,7 @@ type Operation struct { func (x *Operation) Reset() { *x = Operation{} if protoimpl.UnsafeEnabled { - mi := &file_wg_cosmo_node_v1_node_proto_msgTypes[43] + mi := &file_wg_cosmo_node_v1_node_proto_msgTypes[44] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3097,7 +3160,7 @@ func (x *Operation) String() string { func (*Operation) ProtoMessage() {} func (x *Operation) ProtoReflect() protoreflect.Message { - mi := &file_wg_cosmo_node_v1_node_proto_msgTypes[43] + mi := &file_wg_cosmo_node_v1_node_proto_msgTypes[44] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3110,7 +3173,7 @@ func (x *Operation) ProtoReflect() protoreflect.Message { // Deprecated: Use Operation.ProtoReflect.Descriptor instead. func (*Operation) Descriptor() ([]byte, []int) { - return file_wg_cosmo_node_v1_node_proto_rawDescGZIP(), []int{43} + return file_wg_cosmo_node_v1_node_proto_rawDescGZIP(), []int{44} } func (x *Operation) GetRequest() *OperationRequest { @@ -3140,7 +3203,7 @@ type OperationRequest struct { func (x *OperationRequest) Reset() { *x = OperationRequest{} if protoimpl.UnsafeEnabled { - mi := &file_wg_cosmo_node_v1_node_proto_msgTypes[44] + mi := &file_wg_cosmo_node_v1_node_proto_msgTypes[45] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3153,7 +3216,7 @@ func (x *OperationRequest) String() string { func (*OperationRequest) ProtoMessage() {} func (x *OperationRequest) ProtoReflect() protoreflect.Message { - mi := &file_wg_cosmo_node_v1_node_proto_msgTypes[44] + mi := &file_wg_cosmo_node_v1_node_proto_msgTypes[45] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3166,7 +3229,7 @@ func (x *OperationRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use OperationRequest.ProtoReflect.Descriptor instead. func (*OperationRequest) Descriptor() ([]byte, []int) { - return file_wg_cosmo_node_v1_node_proto_rawDescGZIP(), []int{44} + return file_wg_cosmo_node_v1_node_proto_rawDescGZIP(), []int{45} } func (x *OperationRequest) GetOperationName() string { @@ -3201,7 +3264,7 @@ type Extension struct { func (x *Extension) Reset() { *x = Extension{} if protoimpl.UnsafeEnabled { - mi := &file_wg_cosmo_node_v1_node_proto_msgTypes[45] + mi := &file_wg_cosmo_node_v1_node_proto_msgTypes[46] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3214,7 +3277,7 @@ func (x *Extension) String() string { func (*Extension) ProtoMessage() {} func (x *Extension) ProtoReflect() protoreflect.Message { - mi := &file_wg_cosmo_node_v1_node_proto_msgTypes[45] + mi := &file_wg_cosmo_node_v1_node_proto_msgTypes[46] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3227,7 +3290,7 @@ func (x *Extension) ProtoReflect() protoreflect.Message { // Deprecated: Use Extension.ProtoReflect.Descriptor instead. func (*Extension) Descriptor() ([]byte, []int) { - return file_wg_cosmo_node_v1_node_proto_rawDescGZIP(), []int{45} + return file_wg_cosmo_node_v1_node_proto_rawDescGZIP(), []int{46} } func (x *Extension) GetPersistedQuery() *PersistedQuery { @@ -3249,7 +3312,7 @@ type PersistedQuery struct { func (x *PersistedQuery) Reset() { *x = PersistedQuery{} if protoimpl.UnsafeEnabled { - mi := &file_wg_cosmo_node_v1_node_proto_msgTypes[46] + mi := &file_wg_cosmo_node_v1_node_proto_msgTypes[47] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3262,7 +3325,7 @@ func (x *PersistedQuery) String() string { func (*PersistedQuery) ProtoMessage() {} func (x *PersistedQuery) ProtoReflect() protoreflect.Message { - mi := &file_wg_cosmo_node_v1_node_proto_msgTypes[46] + mi := &file_wg_cosmo_node_v1_node_proto_msgTypes[47] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3275,7 +3338,7 @@ func (x *PersistedQuery) ProtoReflect() protoreflect.Message { // Deprecated: Use PersistedQuery.ProtoReflect.Descriptor instead. func (*PersistedQuery) Descriptor() ([]byte, []int) { - return file_wg_cosmo_node_v1_node_proto_rawDescGZIP(), []int{46} + return file_wg_cosmo_node_v1_node_proto_rawDescGZIP(), []int{47} } func (x *PersistedQuery) GetSha256Hash() string { @@ -3304,7 +3367,7 @@ type ClientInfo struct { func (x *ClientInfo) Reset() { *x = ClientInfo{} if protoimpl.UnsafeEnabled { - mi := &file_wg_cosmo_node_v1_node_proto_msgTypes[47] + mi := &file_wg_cosmo_node_v1_node_proto_msgTypes[48] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3317,7 +3380,7 @@ func (x *ClientInfo) String() string { func (*ClientInfo) ProtoMessage() {} func (x *ClientInfo) ProtoReflect() protoreflect.Message { - mi := &file_wg_cosmo_node_v1_node_proto_msgTypes[47] + mi := &file_wg_cosmo_node_v1_node_proto_msgTypes[48] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3330,7 +3393,7 @@ func (x *ClientInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use ClientInfo.ProtoReflect.Descriptor instead. func (*ClientInfo) Descriptor() ([]byte, []int) { - return file_wg_cosmo_node_v1_node_proto_rawDescGZIP(), []int{47} + return file_wg_cosmo_node_v1_node_proto_rawDescGZIP(), []int{48} } func (x *ClientInfo) GetName() string { @@ -3777,230 +3840,245 @@ var file_wg_cosmo_node_v1_node_proto_rawDesc = []byte{ 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x73, 0x22, - 0xa8, 0x01, 0x0a, 0x18, 0x45, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1f, 0x0a, 0x0b, - 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x49, 0x64, 0x12, 0x2f, 0x0a, - 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1b, 0x2e, 0x77, 0x67, - 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x45, - 0x76, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x1b, - 0x0a, 0x09, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x08, 0x74, 0x79, 0x70, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x66, - 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x09, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x97, 0x01, 0x0a, 0x16, 0x44, - 0x61, 0x74, 0x61, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x45, - 0x76, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x3c, 0x0a, 0x04, 0x6e, 0x61, 0x74, 0x73, 0x18, 0x01, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x77, 0x67, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x2e, 0x6e, - 0x6f, 0x64, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x61, 0x74, 0x73, 0x45, 0x76, 0x65, 0x6e, 0x74, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x04, 0x6e, - 0x61, 0x74, 0x73, 0x12, 0x3f, 0x0a, 0x05, 0x6b, 0x61, 0x66, 0x6b, 0x61, 0x18, 0x02, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x77, 0x67, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x2e, 0x6e, 0x6f, - 0x64, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4b, 0x61, 0x66, 0x6b, 0x61, 0x45, 0x76, 0x65, 0x6e, 0x74, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x05, 0x6b, - 0x61, 0x66, 0x6b, 0x61, 0x22, 0x56, 0x0a, 0x17, 0x44, 0x61, 0x74, 0x61, 0x53, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x5f, 0x53, 0x74, 0x61, 0x74, 0x69, 0x63, 0x12, - 0x3b, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, + 0x9f, 0x01, 0x0a, 0x17, 0x52, 0x65, 0x64, 0x69, 0x73, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x68, 0x0a, 0x1a, 0x65, + 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x63, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x2a, 0x2e, 0x77, 0x67, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, + 0x76, 0x31, 0x2e, 0x45, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x18, 0x65, 0x6e, 0x67, + 0x69, 0x6e, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, + 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, + 0x73, 0x22, 0xa8, 0x01, 0x0a, 0x18, 0x45, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x45, 0x76, 0x65, 0x6e, + 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1f, + 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x49, 0x64, 0x12, + 0x2f, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1b, 0x2e, 0x77, 0x67, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x76, 0x31, - 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x61, - 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0xd5, 0x02, 0x0a, - 0x15, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x61, - 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x3f, 0x0a, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2b, 0x2e, 0x77, 0x67, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x2e, - 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x4b, 0x69, 0x6e, - 0x64, 0x52, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x12, 0x36, 0x0a, 0x17, 0x73, 0x74, 0x61, 0x74, 0x69, - 0x63, 0x5f, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, - 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x15, 0x73, 0x74, 0x61, 0x74, 0x69, 0x63, - 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, - 0x3a, 0x0a, 0x19, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x76, - 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x17, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x56, - 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x4b, 0x0a, 0x22, 0x65, - 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x76, 0x61, 0x72, 0x69, 0x61, - 0x62, 0x6c, 0x65, 0x5f, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x1f, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, - 0x6d, 0x65, 0x6e, 0x74, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x44, 0x65, 0x66, 0x61, - 0x75, 0x6c, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3a, 0x0a, 0x19, 0x70, 0x6c, 0x61, 0x63, - 0x65, 0x68, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x5f, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, - 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x17, 0x70, 0x6c, 0x61, - 0x63, 0x65, 0x68, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, - 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x5c, 0x0a, 0x16, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x76, - 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x25, - 0x0a, 0x0e, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x76, - 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x5f, - 0x74, 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x6e, 0x61, 0x6d, 0x65, - 0x54, 0x6f, 0x22, 0x41, 0x0a, 0x15, 0x55, 0x52, 0x4c, 0x51, 0x75, 0x65, 0x72, 0x79, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x6e, - 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, - 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x4d, 0x0a, 0x0a, 0x48, 0x54, 0x54, 0x50, 0x48, 0x65, 0x61, - 0x64, 0x65, 0x72, 0x12, 0x3f, 0x0a, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x01, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x77, 0x67, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x2e, 0x6e, - 0x6f, 0x64, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x06, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x73, 0x22, 0xbb, 0x01, 0x0a, 0x11, 0x4d, 0x54, 0x4c, 0x53, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x39, 0x0a, 0x03, 0x6b, 0x65, - 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x77, 0x67, 0x2e, 0x63, 0x6f, 0x73, + 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, + 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x79, 0x70, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1d, 0x0a, + 0x0a, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x09, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0xd8, 0x01, 0x0a, + 0x16, 0x44, 0x61, 0x74, 0x61, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x43, 0x75, 0x73, 0x74, 0x6f, + 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x3c, 0x0a, 0x04, 0x6e, 0x61, 0x74, 0x73, 0x18, + 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x77, 0x67, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, + 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x61, 0x74, 0x73, 0x45, 0x76, 0x65, + 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, + 0x04, 0x6e, 0x61, 0x74, 0x73, 0x12, 0x3f, 0x0a, 0x05, 0x6b, 0x61, 0x66, 0x6b, 0x61, 0x18, 0x02, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x77, 0x67, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x2e, + 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4b, 0x61, 0x66, 0x6b, 0x61, 0x45, 0x76, 0x65, + 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, + 0x05, 0x6b, 0x61, 0x66, 0x6b, 0x61, 0x12, 0x3f, 0x0a, 0x05, 0x72, 0x65, 0x64, 0x69, 0x73, 0x18, + 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x77, 0x67, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, + 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x64, 0x69, 0x73, 0x45, 0x76, + 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x52, 0x05, 0x72, 0x65, 0x64, 0x69, 0x73, 0x22, 0x56, 0x0a, 0x17, 0x44, 0x61, 0x74, 0x61, 0x53, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x5f, 0x53, 0x74, 0x61, 0x74, + 0x69, 0x63, 0x12, 0x3b, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x27, 0x2e, 0x77, 0x67, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x2e, 0x6e, 0x6f, 0x64, 0x65, + 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, + 0xd5, 0x02, 0x0a, 0x15, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x3f, 0x0a, 0x04, 0x6b, 0x69, 0x6e, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2b, 0x2e, 0x77, 0x67, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, - 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x3b, 0x0a, 0x04, 0x63, 0x65, 0x72, 0x74, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x77, 0x67, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x2e, 0x6e, - 0x6f, 0x64, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x04, 0x63, 0x65, - 0x72, 0x74, 0x12, 0x2e, 0x0a, 0x12, 0x69, 0x6e, 0x73, 0x65, 0x63, 0x75, 0x72, 0x65, 0x53, 0x6b, - 0x69, 0x70, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x12, - 0x69, 0x6e, 0x73, 0x65, 0x63, 0x75, 0x72, 0x65, 0x53, 0x6b, 0x69, 0x70, 0x56, 0x65, 0x72, 0x69, - 0x66, 0x79, 0x22, 0xfb, 0x02, 0x0a, 0x20, 0x47, 0x72, 0x61, 0x70, 0x68, 0x51, 0x4c, 0x53, 0x75, - 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, - 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, - 0x64, 0x12, 0x39, 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, - 0x2e, 0x77, 0x67, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x76, - 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, - 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x03, 0x75, 0x72, 0x6c, 0x12, 0x1b, 0x0a, 0x06, - 0x75, 0x73, 0x65, 0x53, 0x53, 0x45, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x06, - 0x75, 0x73, 0x65, 0x53, 0x53, 0x45, 0x88, 0x01, 0x01, 0x12, 0x4d, 0x0a, 0x08, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2c, 0x2e, 0x77, 0x67, - 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x47, 0x72, - 0x61, 0x70, 0x68, 0x51, 0x4c, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, - 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x48, 0x01, 0x52, 0x08, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x88, 0x01, 0x01, 0x12, 0x65, 0x0a, 0x14, 0x77, 0x65, 0x62, 0x73, - 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x53, 0x75, 0x62, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2c, 0x2e, 0x77, 0x67, 0x2e, 0x63, 0x6f, 0x73, 0x6d, - 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x47, 0x72, 0x61, 0x70, 0x68, 0x51, 0x4c, - 0x57, 0x65, 0x62, 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x53, 0x75, 0x62, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x63, 0x6f, 0x6c, 0x48, 0x02, 0x52, 0x14, 0x77, 0x65, 0x62, 0x73, 0x6f, 0x63, 0x6b, 0x65, - 0x74, 0x53, 0x75, 0x62, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x88, 0x01, 0x01, 0x42, - 0x09, 0x0a, 0x07, 0x5f, 0x75, 0x73, 0x65, 0x53, 0x53, 0x45, 0x42, 0x0b, 0x0a, 0x09, 0x5f, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x42, 0x17, 0x0a, 0x15, 0x5f, 0x77, 0x65, 0x62, 0x73, - 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x53, 0x75, 0x62, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, - 0x22, 0x5a, 0x0a, 0x1e, 0x47, 0x72, 0x61, 0x70, 0x68, 0x51, 0x4c, 0x46, 0x65, 0x64, 0x65, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x1e, 0x0a, 0x0a, - 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x64, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0a, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x64, 0x6c, 0x22, 0x22, 0x0a, 0x0e, - 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x65, 0x64, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x12, 0x10, - 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, - 0x22, 0x4d, 0x0a, 0x0f, 0x53, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, 0x46, 0x69, - 0x65, 0x6c, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x79, 0x70, 0x65, 0x4e, 0x61, 0x6d, 0x65, - 0x12, 0x1d, 0x0a, 0x0a, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x22, - 0x4f, 0x0a, 0x1a, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x46, - 0x69, 0x65, 0x6c, 0x64, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1d, 0x0a, - 0x0a, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x09, 0x52, 0x09, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x50, 0x61, 0x74, 0x68, 0x12, 0x12, 0x0a, 0x04, - 0x6a, 0x73, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6a, 0x73, 0x6f, 0x6e, - 0x22, 0xb5, 0x02, 0x0a, 0x1b, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, - 0x6e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x12, 0x3f, 0x0a, 0x03, 0x61, 0x6e, 0x64, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2d, 0x2e, - 0x77, 0x67, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x76, 0x31, - 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x46, 0x69, 0x6c, - 0x74, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x03, 0x61, 0x6e, - 0x64, 0x12, 0x41, 0x0a, 0x02, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, - 0x77, 0x67, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x76, 0x31, - 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x46, 0x69, 0x65, - 0x6c, 0x64, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x02, 0x69, - 0x6e, 0x88, 0x01, 0x01, 0x12, 0x44, 0x0a, 0x03, 0x6e, 0x6f, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x2d, 0x2e, 0x77, 0x67, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x2e, 0x6e, 0x6f, 0x64, - 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, - 0x6e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x48, 0x01, 0x52, 0x03, 0x6e, 0x6f, 0x74, 0x88, 0x01, 0x01, 0x12, 0x3d, 0x0a, 0x02, 0x6f, 0x72, - 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x77, 0x67, 0x2e, 0x63, 0x6f, 0x73, 0x6d, - 0x6f, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, - 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x64, - 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x02, 0x6f, 0x72, 0x42, 0x05, 0x0a, 0x03, 0x5f, 0x69, 0x6e, - 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x6e, 0x6f, 0x74, 0x22, 0x54, 0x0a, 0x15, 0x43, 0x61, 0x63, 0x68, - 0x65, 0x57, 0x61, 0x72, 0x6d, 0x65, 0x72, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x12, 0x3b, 0x0a, 0x0a, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, - 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x77, 0x67, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, - 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x52, 0x0a, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x7f, - 0x0a, 0x09, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3c, 0x0a, 0x07, 0x72, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x77, - 0x67, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x76, 0x31, 0x2e, - 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x52, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x34, 0x0a, 0x06, 0x63, 0x6c, 0x69, - 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x77, 0x67, 0x2e, 0x63, - 0x6f, 0x73, 0x6d, 0x6f, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x69, - 0x65, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x22, - 0x8c, 0x01, 0x0a, 0x10, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6f, 0x70, - 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x71, - 0x75, 0x65, 0x72, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x71, 0x75, 0x65, 0x72, - 0x79, 0x12, 0x3b, 0x0a, 0x0a, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x77, 0x67, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, - 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, - 0x6f, 0x6e, 0x52, 0x0a, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x56, - 0x0a, 0x09, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x49, 0x0a, 0x0f, 0x70, - 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x77, 0x67, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x2e, - 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, - 0x64, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x0e, 0x70, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, - 0x64, 0x51, 0x75, 0x65, 0x72, 0x79, 0x22, 0x4b, 0x0a, 0x0e, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, - 0x74, 0x65, 0x64, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x68, 0x61, 0x32, - 0x35, 0x36, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, - 0x68, 0x61, 0x32, 0x35, 0x36, 0x48, 0x61, 0x73, 0x68, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, - 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, - 0x69, 0x6f, 0x6e, 0x22, 0x3a, 0x0a, 0x0a, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x6e, 0x66, - 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x2a, - 0x82, 0x01, 0x0a, 0x1b, 0x41, 0x72, 0x67, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x6e, 0x64, - 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, - 0x1b, 0x0a, 0x17, 0x52, 0x45, 0x4e, 0x44, 0x45, 0x52, 0x5f, 0x41, 0x52, 0x47, 0x55, 0x4d, 0x45, - 0x4e, 0x54, 0x5f, 0x44, 0x45, 0x46, 0x41, 0x55, 0x4c, 0x54, 0x10, 0x00, 0x12, 0x24, 0x0a, 0x20, - 0x52, 0x45, 0x4e, 0x44, 0x45, 0x52, 0x5f, 0x41, 0x52, 0x47, 0x55, 0x4d, 0x45, 0x4e, 0x54, 0x5f, - 0x41, 0x53, 0x5f, 0x47, 0x52, 0x41, 0x50, 0x48, 0x51, 0x4c, 0x5f, 0x56, 0x41, 0x4c, 0x55, 0x45, - 0x10, 0x01, 0x12, 0x20, 0x0a, 0x1c, 0x52, 0x45, 0x4e, 0x44, 0x45, 0x52, 0x5f, 0x41, 0x52, 0x47, - 0x55, 0x4d, 0x45, 0x4e, 0x54, 0x5f, 0x41, 0x53, 0x5f, 0x41, 0x52, 0x52, 0x41, 0x59, 0x5f, 0x43, - 0x53, 0x56, 0x10, 0x02, 0x2a, 0x36, 0x0a, 0x0e, 0x41, 0x72, 0x67, 0x75, 0x6d, 0x65, 0x6e, 0x74, - 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x10, 0x0a, 0x0c, 0x4f, 0x42, 0x4a, 0x45, 0x43, 0x54, - 0x5f, 0x46, 0x49, 0x45, 0x4c, 0x44, 0x10, 0x00, 0x12, 0x12, 0x0a, 0x0e, 0x46, 0x49, 0x45, 0x4c, - 0x44, 0x5f, 0x41, 0x52, 0x47, 0x55, 0x4d, 0x45, 0x4e, 0x54, 0x10, 0x01, 0x2a, 0x35, 0x0a, 0x0e, - 0x44, 0x61, 0x74, 0x61, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4b, 0x69, 0x6e, 0x64, 0x12, 0x0a, - 0x0a, 0x06, 0x53, 0x54, 0x41, 0x54, 0x49, 0x43, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x47, 0x52, - 0x41, 0x50, 0x48, 0x51, 0x4c, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x50, 0x55, 0x42, 0x53, 0x55, - 0x42, 0x10, 0x02, 0x2a, 0x34, 0x0a, 0x09, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, - 0x12, 0x0b, 0x0a, 0x07, 0x50, 0x55, 0x42, 0x4c, 0x49, 0x53, 0x48, 0x10, 0x00, 0x12, 0x0b, 0x0a, - 0x07, 0x52, 0x45, 0x51, 0x55, 0x45, 0x53, 0x54, 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x53, 0x55, - 0x42, 0x53, 0x43, 0x52, 0x49, 0x42, 0x45, 0x10, 0x02, 0x2a, 0x86, 0x01, 0x0a, 0x19, 0x43, 0x6f, + 0x4b, 0x69, 0x6e, 0x64, 0x52, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x12, 0x36, 0x0a, 0x17, 0x73, 0x74, + 0x61, 0x74, 0x69, 0x63, 0x5f, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x63, 0x6f, + 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x15, 0x73, 0x74, 0x61, + 0x74, 0x69, 0x63, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, + 0x6e, 0x74, 0x12, 0x3a, 0x0a, 0x19, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, + 0x74, 0x5f, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x17, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, + 0x6e, 0x74, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x4b, + 0x0a, 0x22, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x76, 0x61, + 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x1f, 0x65, 0x6e, 0x76, 0x69, + 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x44, + 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3a, 0x0a, 0x19, 0x70, + 0x6c, 0x61, 0x63, 0x65, 0x68, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x5f, 0x76, 0x61, 0x72, 0x69, 0x61, + 0x62, 0x6c, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x17, + 0x70, 0x6c, 0x61, 0x63, 0x65, 0x68, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x56, 0x61, 0x72, 0x69, 0x61, + 0x62, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x5c, 0x0a, 0x16, 0x44, 0x69, 0x72, 0x65, 0x63, + 0x74, 0x69, 0x76, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x12, 0x25, 0x0a, 0x0e, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x6e, + 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x64, 0x69, 0x72, 0x65, 0x63, + 0x74, 0x69, 0x76, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x65, 0x6e, 0x61, + 0x6d, 0x65, 0x5f, 0x74, 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x6e, + 0x61, 0x6d, 0x65, 0x54, 0x6f, 0x22, 0x41, 0x0a, 0x15, 0x55, 0x52, 0x4c, 0x51, 0x75, 0x65, 0x72, + 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, + 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, + 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x4d, 0x0a, 0x0a, 0x48, 0x54, 0x54, 0x50, + 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x3f, 0x0a, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, + 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x77, 0x67, 0x2e, 0x63, 0x6f, 0x73, 0x6d, + 0x6f, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x52, + 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x22, 0xbb, 0x01, 0x0a, 0x11, 0x4d, 0x54, 0x4c, 0x53, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x39, 0x0a, + 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x77, 0x67, 0x2e, + 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x61, 0x72, 0x69, 0x61, - 0x62, 0x6c, 0x65, 0x4b, 0x69, 0x6e, 0x64, 0x12, 0x21, 0x0a, 0x1d, 0x53, 0x54, 0x41, 0x54, 0x49, - 0x43, 0x5f, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x55, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, - 0x56, 0x41, 0x52, 0x49, 0x41, 0x42, 0x4c, 0x45, 0x10, 0x00, 0x12, 0x1e, 0x0a, 0x1a, 0x45, 0x4e, - 0x56, 0x5f, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x55, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, - 0x56, 0x41, 0x52, 0x49, 0x41, 0x42, 0x4c, 0x45, 0x10, 0x01, 0x12, 0x26, 0x0a, 0x22, 0x50, 0x4c, - 0x41, 0x43, 0x45, 0x48, 0x4f, 0x4c, 0x44, 0x45, 0x52, 0x5f, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, - 0x55, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x56, 0x41, 0x52, 0x49, 0x41, 0x42, 0x4c, 0x45, - 0x10, 0x02, 0x2a, 0x41, 0x0a, 0x0a, 0x48, 0x54, 0x54, 0x50, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, - 0x12, 0x07, 0x0a, 0x03, 0x47, 0x45, 0x54, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x50, 0x4f, 0x53, - 0x54, 0x10, 0x01, 0x12, 0x07, 0x0a, 0x03, 0x50, 0x55, 0x54, 0x10, 0x02, 0x12, 0x0a, 0x0a, 0x06, - 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x10, 0x03, 0x12, 0x0b, 0x0a, 0x07, 0x4f, 0x50, 0x54, 0x49, - 0x4f, 0x4e, 0x53, 0x10, 0x04, 0x32, 0x6e, 0x0a, 0x0b, 0x4e, 0x6f, 0x64, 0x65, 0x53, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x12, 0x5f, 0x0a, 0x0c, 0x53, 0x65, 0x6c, 0x66, 0x52, 0x65, 0x67, 0x69, - 0x73, 0x74, 0x65, 0x72, 0x12, 0x25, 0x2e, 0x77, 0x67, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x2e, - 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x6c, 0x66, 0x52, 0x65, 0x67, 0x69, - 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x77, 0x67, - 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x53, - 0x65, 0x6c, 0x66, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0xcf, 0x01, 0x0a, 0x14, 0x63, 0x6f, 0x6d, 0x2e, 0x77, 0x67, - 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x76, 0x31, 0x42, 0x09, - 0x4e, 0x6f, 0x64, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x49, 0x67, 0x69, 0x74, - 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x77, 0x75, 0x6e, 0x64, 0x65, 0x72, 0x67, 0x72, - 0x61, 0x70, 0x68, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x2f, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, - 0x74, 0x2d, 0x67, 0x6f, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x77, - 0x67, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x2f, 0x6e, 0x6f, 0x64, 0x65, 0x2f, 0x76, 0x31, 0x3b, - 0x6e, 0x6f, 0x64, 0x65, 0x76, 0x31, 0xa2, 0x02, 0x03, 0x57, 0x43, 0x4e, 0xaa, 0x02, 0x10, 0x57, - 0x67, 0x2e, 0x43, 0x6f, 0x73, 0x6d, 0x6f, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x2e, 0x56, 0x31, 0xca, - 0x02, 0x10, 0x57, 0x67, 0x5c, 0x43, 0x6f, 0x73, 0x6d, 0x6f, 0x5c, 0x4e, 0x6f, 0x64, 0x65, 0x5c, - 0x56, 0x31, 0xe2, 0x02, 0x1c, 0x57, 0x67, 0x5c, 0x43, 0x6f, 0x73, 0x6d, 0x6f, 0x5c, 0x4e, 0x6f, - 0x64, 0x65, 0x5c, 0x56, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, - 0x61, 0xea, 0x02, 0x13, 0x57, 0x67, 0x3a, 0x3a, 0x43, 0x6f, 0x73, 0x6d, 0x6f, 0x3a, 0x3a, 0x4e, - 0x6f, 0x64, 0x65, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x62, 0x6c, 0x65, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x3b, 0x0a, 0x04, 0x63, 0x65, 0x72, 0x74, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x77, 0x67, 0x2e, 0x63, 0x6f, 0x73, 0x6d, + 0x6f, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x52, + 0x04, 0x63, 0x65, 0x72, 0x74, 0x12, 0x2e, 0x0a, 0x12, 0x69, 0x6e, 0x73, 0x65, 0x63, 0x75, 0x72, + 0x65, 0x53, 0x6b, 0x69, 0x70, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x12, 0x69, 0x6e, 0x73, 0x65, 0x63, 0x75, 0x72, 0x65, 0x53, 0x6b, 0x69, 0x70, 0x56, + 0x65, 0x72, 0x69, 0x66, 0x79, 0x22, 0xfb, 0x02, 0x0a, 0x20, 0x47, 0x72, 0x61, 0x70, 0x68, 0x51, + 0x4c, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, + 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x65, 0x6e, 0x61, + 0x62, 0x6c, 0x65, 0x64, 0x12, 0x39, 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x27, 0x2e, 0x77, 0x67, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x2e, 0x6e, 0x6f, 0x64, + 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x03, 0x75, 0x72, 0x6c, 0x12, + 0x1b, 0x0a, 0x06, 0x75, 0x73, 0x65, 0x53, 0x53, 0x45, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x48, + 0x00, 0x52, 0x06, 0x75, 0x73, 0x65, 0x53, 0x53, 0x45, 0x88, 0x01, 0x01, 0x12, 0x4d, 0x0a, 0x08, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2c, + 0x2e, 0x77, 0x67, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, + 0x2e, 0x47, 0x72, 0x61, 0x70, 0x68, 0x51, 0x4c, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x48, 0x01, 0x52, 0x08, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x88, 0x01, 0x01, 0x12, 0x65, 0x0a, 0x14, 0x77, + 0x65, 0x62, 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x53, 0x75, 0x62, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x63, 0x6f, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2c, 0x2e, 0x77, 0x67, 0x2e, 0x63, + 0x6f, 0x73, 0x6d, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x47, 0x72, 0x61, 0x70, + 0x68, 0x51, 0x4c, 0x57, 0x65, 0x62, 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x53, 0x75, 0x62, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x48, 0x02, 0x52, 0x14, 0x77, 0x65, 0x62, 0x73, 0x6f, + 0x63, 0x6b, 0x65, 0x74, 0x53, 0x75, 0x62, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x88, + 0x01, 0x01, 0x42, 0x09, 0x0a, 0x07, 0x5f, 0x75, 0x73, 0x65, 0x53, 0x53, 0x45, 0x42, 0x0b, 0x0a, + 0x09, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x42, 0x17, 0x0a, 0x15, 0x5f, 0x77, + 0x65, 0x62, 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x53, 0x75, 0x62, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x63, 0x6f, 0x6c, 0x22, 0x5a, 0x0a, 0x1e, 0x47, 0x72, 0x61, 0x70, 0x68, 0x51, 0x4c, 0x46, 0x65, + 0x64, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, + 0x1e, 0x0a, 0x0a, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x64, 0x6c, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x64, 0x6c, 0x22, + 0x22, 0x0a, 0x0e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x65, 0x64, 0x53, 0x74, 0x72, 0x69, 0x6e, + 0x67, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, + 0x6b, 0x65, 0x79, 0x22, 0x4d, 0x0a, 0x0f, 0x53, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x54, 0x79, 0x70, + 0x65, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x6e, + 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x79, 0x70, 0x65, 0x4e, + 0x61, 0x6d, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x6e, 0x61, 0x6d, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x4e, 0x61, + 0x6d, 0x65, 0x22, 0x4f, 0x0a, 0x1a, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, + 0x6f, 0x6e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, + 0x12, 0x1d, 0x0a, 0x0a, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, + 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x50, 0x61, 0x74, 0x68, 0x12, + 0x12, 0x0a, 0x04, 0x6a, 0x73, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6a, + 0x73, 0x6f, 0x6e, 0x22, 0xb5, 0x02, 0x0a, 0x1b, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, + 0x69, 0x6f, 0x6e, 0x12, 0x3f, 0x0a, 0x03, 0x61, 0x6e, 0x64, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x2d, 0x2e, 0x77, 0x67, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x2e, 0x6e, 0x6f, 0x64, 0x65, + 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, + 0x03, 0x61, 0x6e, 0x64, 0x12, 0x41, 0x0a, 0x02, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x2c, 0x2e, 0x77, 0x67, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x2e, 0x6e, 0x6f, 0x64, 0x65, + 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x46, 0x69, 0x65, 0x6c, 0x64, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, + 0x52, 0x02, 0x69, 0x6e, 0x88, 0x01, 0x01, 0x12, 0x44, 0x0a, 0x03, 0x6e, 0x6f, 0x74, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x77, 0x67, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x2e, + 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, + 0x69, 0x6f, 0x6e, 0x48, 0x01, 0x52, 0x03, 0x6e, 0x6f, 0x74, 0x88, 0x01, 0x01, 0x12, 0x3d, 0x0a, + 0x02, 0x6f, 0x72, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x77, 0x67, 0x2e, 0x63, + 0x6f, 0x73, 0x6d, 0x6f, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x75, 0x62, + 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x43, + 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x02, 0x6f, 0x72, 0x42, 0x05, 0x0a, 0x03, + 0x5f, 0x69, 0x6e, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x6e, 0x6f, 0x74, 0x22, 0x54, 0x0a, 0x15, 0x43, + 0x61, 0x63, 0x68, 0x65, 0x57, 0x61, 0x72, 0x6d, 0x65, 0x72, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x3b, 0x0a, 0x0a, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x77, 0x67, 0x2e, 0x63, 0x6f, + 0x73, 0x6d, 0x6f, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x70, 0x65, 0x72, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x22, 0x7f, 0x0a, 0x09, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3c, + 0x0a, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x22, 0x2e, 0x77, 0x67, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, + 0x76, 0x31, 0x2e, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x52, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x34, 0x0a, 0x06, + 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x77, + 0x67, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x76, 0x31, 0x2e, + 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06, 0x63, 0x6c, 0x69, 0x65, + 0x6e, 0x74, 0x22, 0x8c, 0x01, 0x0a, 0x10, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x6f, 0x70, 0x65, 0x72, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0d, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x14, + 0x0a, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x71, + 0x75, 0x65, 0x72, 0x79, 0x12, 0x3b, 0x0a, 0x0a, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, + 0x6e, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x77, 0x67, 0x2e, 0x63, 0x6f, + 0x73, 0x6d, 0x6f, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x78, 0x74, 0x65, + 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, + 0x73, 0x22, 0x56, 0x0a, 0x09, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x49, + 0x0a, 0x0f, 0x70, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x71, 0x75, 0x65, 0x72, + 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x77, 0x67, 0x2e, 0x63, 0x6f, 0x73, + 0x6d, 0x6f, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x65, 0x72, 0x73, 0x69, + 0x73, 0x74, 0x65, 0x64, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x0e, 0x70, 0x65, 0x72, 0x73, 0x69, + 0x73, 0x74, 0x65, 0x64, 0x51, 0x75, 0x65, 0x72, 0x79, 0x22, 0x4b, 0x0a, 0x0e, 0x50, 0x65, 0x72, + 0x73, 0x69, 0x73, 0x74, 0x65, 0x64, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x1f, 0x0a, 0x0b, 0x73, + 0x68, 0x61, 0x32, 0x35, 0x36, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0a, 0x73, 0x68, 0x61, 0x32, 0x35, 0x36, 0x48, 0x61, 0x73, 0x68, 0x12, 0x18, 0x0a, 0x07, + 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x76, + 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x3a, 0x0a, 0x0a, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, + 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, + 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, + 0x6f, 0x6e, 0x2a, 0x82, 0x01, 0x0a, 0x1b, 0x41, 0x72, 0x67, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x52, + 0x65, 0x6e, 0x64, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x12, 0x1b, 0x0a, 0x17, 0x52, 0x45, 0x4e, 0x44, 0x45, 0x52, 0x5f, 0x41, 0x52, 0x47, + 0x55, 0x4d, 0x45, 0x4e, 0x54, 0x5f, 0x44, 0x45, 0x46, 0x41, 0x55, 0x4c, 0x54, 0x10, 0x00, 0x12, + 0x24, 0x0a, 0x20, 0x52, 0x45, 0x4e, 0x44, 0x45, 0x52, 0x5f, 0x41, 0x52, 0x47, 0x55, 0x4d, 0x45, + 0x4e, 0x54, 0x5f, 0x41, 0x53, 0x5f, 0x47, 0x52, 0x41, 0x50, 0x48, 0x51, 0x4c, 0x5f, 0x56, 0x41, + 0x4c, 0x55, 0x45, 0x10, 0x01, 0x12, 0x20, 0x0a, 0x1c, 0x52, 0x45, 0x4e, 0x44, 0x45, 0x52, 0x5f, + 0x41, 0x52, 0x47, 0x55, 0x4d, 0x45, 0x4e, 0x54, 0x5f, 0x41, 0x53, 0x5f, 0x41, 0x52, 0x52, 0x41, + 0x59, 0x5f, 0x43, 0x53, 0x56, 0x10, 0x02, 0x2a, 0x36, 0x0a, 0x0e, 0x41, 0x72, 0x67, 0x75, 0x6d, + 0x65, 0x6e, 0x74, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x10, 0x0a, 0x0c, 0x4f, 0x42, 0x4a, + 0x45, 0x43, 0x54, 0x5f, 0x46, 0x49, 0x45, 0x4c, 0x44, 0x10, 0x00, 0x12, 0x12, 0x0a, 0x0e, 0x46, + 0x49, 0x45, 0x4c, 0x44, 0x5f, 0x41, 0x52, 0x47, 0x55, 0x4d, 0x45, 0x4e, 0x54, 0x10, 0x01, 0x2a, + 0x35, 0x0a, 0x0e, 0x44, 0x61, 0x74, 0x61, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4b, 0x69, 0x6e, + 0x64, 0x12, 0x0a, 0x0a, 0x06, 0x53, 0x54, 0x41, 0x54, 0x49, 0x43, 0x10, 0x00, 0x12, 0x0b, 0x0a, + 0x07, 0x47, 0x52, 0x41, 0x50, 0x48, 0x51, 0x4c, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x50, 0x55, + 0x42, 0x53, 0x55, 0x42, 0x10, 0x02, 0x2a, 0x34, 0x0a, 0x09, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x54, + 0x79, 0x70, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x50, 0x55, 0x42, 0x4c, 0x49, 0x53, 0x48, 0x10, 0x00, + 0x12, 0x0b, 0x0a, 0x07, 0x52, 0x45, 0x51, 0x55, 0x45, 0x53, 0x54, 0x10, 0x01, 0x12, 0x0d, 0x0a, + 0x09, 0x53, 0x55, 0x42, 0x53, 0x43, 0x52, 0x49, 0x42, 0x45, 0x10, 0x02, 0x2a, 0x86, 0x01, 0x0a, + 0x19, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x61, + 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x4b, 0x69, 0x6e, 0x64, 0x12, 0x21, 0x0a, 0x1d, 0x53, 0x54, + 0x41, 0x54, 0x49, 0x43, 0x5f, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x55, 0x52, 0x41, 0x54, 0x49, + 0x4f, 0x4e, 0x5f, 0x56, 0x41, 0x52, 0x49, 0x41, 0x42, 0x4c, 0x45, 0x10, 0x00, 0x12, 0x1e, 0x0a, + 0x1a, 0x45, 0x4e, 0x56, 0x5f, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x55, 0x52, 0x41, 0x54, 0x49, + 0x4f, 0x4e, 0x5f, 0x56, 0x41, 0x52, 0x49, 0x41, 0x42, 0x4c, 0x45, 0x10, 0x01, 0x12, 0x26, 0x0a, + 0x22, 0x50, 0x4c, 0x41, 0x43, 0x45, 0x48, 0x4f, 0x4c, 0x44, 0x45, 0x52, 0x5f, 0x43, 0x4f, 0x4e, + 0x46, 0x49, 0x47, 0x55, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x56, 0x41, 0x52, 0x49, 0x41, + 0x42, 0x4c, 0x45, 0x10, 0x02, 0x2a, 0x41, 0x0a, 0x0a, 0x48, 0x54, 0x54, 0x50, 0x4d, 0x65, 0x74, + 0x68, 0x6f, 0x64, 0x12, 0x07, 0x0a, 0x03, 0x47, 0x45, 0x54, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, + 0x50, 0x4f, 0x53, 0x54, 0x10, 0x01, 0x12, 0x07, 0x0a, 0x03, 0x50, 0x55, 0x54, 0x10, 0x02, 0x12, + 0x0a, 0x0a, 0x06, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x10, 0x03, 0x12, 0x0b, 0x0a, 0x07, 0x4f, + 0x50, 0x54, 0x49, 0x4f, 0x4e, 0x53, 0x10, 0x04, 0x32, 0x6e, 0x0a, 0x0b, 0x4e, 0x6f, 0x64, 0x65, + 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x5f, 0x0a, 0x0c, 0x53, 0x65, 0x6c, 0x66, 0x52, + 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x12, 0x25, 0x2e, 0x77, 0x67, 0x2e, 0x63, 0x6f, 0x73, + 0x6d, 0x6f, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x6c, 0x66, 0x52, + 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, + 0x2e, 0x77, 0x67, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x76, + 0x31, 0x2e, 0x53, 0x65, 0x6c, 0x66, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0xcf, 0x01, 0x0a, 0x14, 0x63, 0x6f, 0x6d, + 0x2e, 0x77, 0x67, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x76, + 0x31, 0x42, 0x09, 0x4e, 0x6f, 0x64, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x49, + 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x77, 0x75, 0x6e, 0x64, 0x65, + 0x72, 0x67, 0x72, 0x61, 0x70, 0x68, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x2f, 0x63, 0x6f, 0x6e, + 0x6e, 0x65, 0x63, 0x74, 0x2d, 0x67, 0x6f, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x2f, 0x77, 0x67, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x2f, 0x6e, 0x6f, 0x64, 0x65, 0x2f, + 0x76, 0x31, 0x3b, 0x6e, 0x6f, 0x64, 0x65, 0x76, 0x31, 0xa2, 0x02, 0x03, 0x57, 0x43, 0x4e, 0xaa, + 0x02, 0x10, 0x57, 0x67, 0x2e, 0x43, 0x6f, 0x73, 0x6d, 0x6f, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x2e, + 0x56, 0x31, 0xca, 0x02, 0x10, 0x57, 0x67, 0x5c, 0x43, 0x6f, 0x73, 0x6d, 0x6f, 0x5c, 0x4e, 0x6f, + 0x64, 0x65, 0x5c, 0x56, 0x31, 0xe2, 0x02, 0x1c, 0x57, 0x67, 0x5c, 0x43, 0x6f, 0x73, 0x6d, 0x6f, + 0x5c, 0x4e, 0x6f, 0x64, 0x65, 0x5c, 0x56, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, + 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x13, 0x57, 0x67, 0x3a, 0x3a, 0x43, 0x6f, 0x73, 0x6d, 0x6f, + 0x3a, 0x3a, 0x4e, 0x6f, 0x64, 0x65, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x33, } var ( @@ -4016,7 +4094,7 @@ func file_wg_cosmo_node_v1_node_proto_rawDescGZIP() []byte { } var file_wg_cosmo_node_v1_node_proto_enumTypes = make([]protoimpl.EnumInfo, 6) -var file_wg_cosmo_node_v1_node_proto_msgTypes = make([]protoimpl.MessageInfo, 51) +var file_wg_cosmo_node_v1_node_proto_msgTypes = make([]protoimpl.MessageInfo, 52) var file_wg_cosmo_node_v1_node_proto_goTypes = []any{ (ArgumentRenderConfiguration)(0), // 0: wg.cosmo.node.v1.ArgumentRenderConfiguration (ArgumentSource)(0), // 1: wg.cosmo.node.v1.ArgumentSource @@ -4052,58 +4130,59 @@ var file_wg_cosmo_node_v1_node_proto_goTypes = []any{ (*NatsStreamConfiguration)(nil), // 31: wg.cosmo.node.v1.NatsStreamConfiguration (*NatsEventConfiguration)(nil), // 32: wg.cosmo.node.v1.NatsEventConfiguration (*KafkaEventConfiguration)(nil), // 33: wg.cosmo.node.v1.KafkaEventConfiguration - (*EngineEventConfiguration)(nil), // 34: wg.cosmo.node.v1.EngineEventConfiguration - (*DataSourceCustomEvents)(nil), // 35: wg.cosmo.node.v1.DataSourceCustomEvents - (*DataSourceCustom_Static)(nil), // 36: wg.cosmo.node.v1.DataSourceCustom_Static - (*ConfigurationVariable)(nil), // 37: wg.cosmo.node.v1.ConfigurationVariable - (*DirectiveConfiguration)(nil), // 38: wg.cosmo.node.v1.DirectiveConfiguration - (*URLQueryConfiguration)(nil), // 39: wg.cosmo.node.v1.URLQueryConfiguration - (*HTTPHeader)(nil), // 40: wg.cosmo.node.v1.HTTPHeader - (*MTLSConfiguration)(nil), // 41: wg.cosmo.node.v1.MTLSConfiguration - (*GraphQLSubscriptionConfiguration)(nil), // 42: wg.cosmo.node.v1.GraphQLSubscriptionConfiguration - (*GraphQLFederationConfiguration)(nil), // 43: wg.cosmo.node.v1.GraphQLFederationConfiguration - (*InternedString)(nil), // 44: wg.cosmo.node.v1.InternedString - (*SingleTypeField)(nil), // 45: wg.cosmo.node.v1.SingleTypeField - (*SubscriptionFieldCondition)(nil), // 46: wg.cosmo.node.v1.SubscriptionFieldCondition - (*SubscriptionFilterCondition)(nil), // 47: wg.cosmo.node.v1.SubscriptionFilterCondition - (*CacheWarmerOperations)(nil), // 48: wg.cosmo.node.v1.CacheWarmerOperations - (*Operation)(nil), // 49: wg.cosmo.node.v1.Operation - (*OperationRequest)(nil), // 50: wg.cosmo.node.v1.OperationRequest - (*Extension)(nil), // 51: wg.cosmo.node.v1.Extension - (*PersistedQuery)(nil), // 52: wg.cosmo.node.v1.PersistedQuery - (*ClientInfo)(nil), // 53: wg.cosmo.node.v1.ClientInfo - nil, // 54: wg.cosmo.node.v1.FeatureFlagRouterExecutionConfigs.ConfigByFeatureFlagNameEntry - nil, // 55: wg.cosmo.node.v1.EngineConfiguration.StringStorageEntry - nil, // 56: wg.cosmo.node.v1.FetchConfiguration.HeaderEntry - (common.EnumStatusCode)(0), // 57: wg.cosmo.common.EnumStatusCode - (common.GraphQLSubscriptionProtocol)(0), // 58: wg.cosmo.common.GraphQLSubscriptionProtocol - (common.GraphQLWebsocketSubprotocol)(0), // 59: wg.cosmo.common.GraphQLWebsocketSubprotocol + (*RedisEventConfiguration)(nil), // 34: wg.cosmo.node.v1.RedisEventConfiguration + (*EngineEventConfiguration)(nil), // 35: wg.cosmo.node.v1.EngineEventConfiguration + (*DataSourceCustomEvents)(nil), // 36: wg.cosmo.node.v1.DataSourceCustomEvents + (*DataSourceCustom_Static)(nil), // 37: wg.cosmo.node.v1.DataSourceCustom_Static + (*ConfigurationVariable)(nil), // 38: wg.cosmo.node.v1.ConfigurationVariable + (*DirectiveConfiguration)(nil), // 39: wg.cosmo.node.v1.DirectiveConfiguration + (*URLQueryConfiguration)(nil), // 40: wg.cosmo.node.v1.URLQueryConfiguration + (*HTTPHeader)(nil), // 41: wg.cosmo.node.v1.HTTPHeader + (*MTLSConfiguration)(nil), // 42: wg.cosmo.node.v1.MTLSConfiguration + (*GraphQLSubscriptionConfiguration)(nil), // 43: wg.cosmo.node.v1.GraphQLSubscriptionConfiguration + (*GraphQLFederationConfiguration)(nil), // 44: wg.cosmo.node.v1.GraphQLFederationConfiguration + (*InternedString)(nil), // 45: wg.cosmo.node.v1.InternedString + (*SingleTypeField)(nil), // 46: wg.cosmo.node.v1.SingleTypeField + (*SubscriptionFieldCondition)(nil), // 47: wg.cosmo.node.v1.SubscriptionFieldCondition + (*SubscriptionFilterCondition)(nil), // 48: wg.cosmo.node.v1.SubscriptionFilterCondition + (*CacheWarmerOperations)(nil), // 49: wg.cosmo.node.v1.CacheWarmerOperations + (*Operation)(nil), // 50: wg.cosmo.node.v1.Operation + (*OperationRequest)(nil), // 51: wg.cosmo.node.v1.OperationRequest + (*Extension)(nil), // 52: wg.cosmo.node.v1.Extension + (*PersistedQuery)(nil), // 53: wg.cosmo.node.v1.PersistedQuery + (*ClientInfo)(nil), // 54: wg.cosmo.node.v1.ClientInfo + nil, // 55: wg.cosmo.node.v1.FeatureFlagRouterExecutionConfigs.ConfigByFeatureFlagNameEntry + nil, // 56: wg.cosmo.node.v1.EngineConfiguration.StringStorageEntry + nil, // 57: wg.cosmo.node.v1.FetchConfiguration.HeaderEntry + (common.EnumStatusCode)(0), // 58: wg.cosmo.common.EnumStatusCode + (common.GraphQLSubscriptionProtocol)(0), // 59: wg.cosmo.common.GraphQLSubscriptionProtocol + (common.GraphQLWebsocketSubprotocol)(0), // 60: wg.cosmo.common.GraphQLWebsocketSubprotocol } var file_wg_cosmo_node_v1_node_proto_depIdxs = []int32{ - 54, // 0: wg.cosmo.node.v1.FeatureFlagRouterExecutionConfigs.config_by_feature_flag_name:type_name -> wg.cosmo.node.v1.FeatureFlagRouterExecutionConfigs.ConfigByFeatureFlagNameEntry + 55, // 0: wg.cosmo.node.v1.FeatureFlagRouterExecutionConfigs.config_by_feature_flag_name:type_name -> wg.cosmo.node.v1.FeatureFlagRouterExecutionConfigs.ConfigByFeatureFlagNameEntry 16, // 1: wg.cosmo.node.v1.FeatureFlagRouterExecutionConfig.engine_config:type_name -> wg.cosmo.node.v1.EngineConfiguration 6, // 2: wg.cosmo.node.v1.FeatureFlagRouterExecutionConfig.subgraphs:type_name -> wg.cosmo.node.v1.Subgraph 16, // 3: wg.cosmo.node.v1.RouterConfig.engine_config:type_name -> wg.cosmo.node.v1.EngineConfiguration 6, // 4: wg.cosmo.node.v1.RouterConfig.subgraphs:type_name -> wg.cosmo.node.v1.Subgraph 7, // 5: wg.cosmo.node.v1.RouterConfig.feature_flag_configs:type_name -> wg.cosmo.node.v1.FeatureFlagRouterExecutionConfigs - 57, // 6: wg.cosmo.node.v1.Response.code:type_name -> wg.cosmo.common.EnumStatusCode + 58, // 6: wg.cosmo.node.v1.Response.code:type_name -> wg.cosmo.common.EnumStatusCode 13, // 7: wg.cosmo.node.v1.RegistrationInfo.account_limits:type_name -> wg.cosmo.node.v1.AccountLimits 10, // 8: wg.cosmo.node.v1.SelfRegisterResponse.response:type_name -> wg.cosmo.node.v1.Response 12, // 9: wg.cosmo.node.v1.SelfRegisterResponse.registrationInfo:type_name -> wg.cosmo.node.v1.RegistrationInfo 17, // 10: wg.cosmo.node.v1.EngineConfiguration.datasource_configurations:type_name -> wg.cosmo.node.v1.DataSourceConfiguration 21, // 11: wg.cosmo.node.v1.EngineConfiguration.field_configurations:type_name -> wg.cosmo.node.v1.FieldConfiguration 22, // 12: wg.cosmo.node.v1.EngineConfiguration.type_configurations:type_name -> wg.cosmo.node.v1.TypeConfiguration - 55, // 13: wg.cosmo.node.v1.EngineConfiguration.string_storage:type_name -> wg.cosmo.node.v1.EngineConfiguration.StringStorageEntry + 56, // 13: wg.cosmo.node.v1.EngineConfiguration.string_storage:type_name -> wg.cosmo.node.v1.EngineConfiguration.StringStorageEntry 2, // 14: wg.cosmo.node.v1.DataSourceConfiguration.kind:type_name -> wg.cosmo.node.v1.DataSourceKind 23, // 15: wg.cosmo.node.v1.DataSourceConfiguration.root_nodes:type_name -> wg.cosmo.node.v1.TypeField 23, // 16: wg.cosmo.node.v1.DataSourceConfiguration.child_nodes:type_name -> wg.cosmo.node.v1.TypeField 30, // 17: wg.cosmo.node.v1.DataSourceConfiguration.custom_graphql:type_name -> wg.cosmo.node.v1.DataSourceCustom_GraphQL - 36, // 18: wg.cosmo.node.v1.DataSourceConfiguration.custom_static:type_name -> wg.cosmo.node.v1.DataSourceCustom_Static - 38, // 19: wg.cosmo.node.v1.DataSourceConfiguration.directives:type_name -> wg.cosmo.node.v1.DirectiveConfiguration + 37, // 18: wg.cosmo.node.v1.DataSourceConfiguration.custom_static:type_name -> wg.cosmo.node.v1.DataSourceCustom_Static + 39, // 19: wg.cosmo.node.v1.DataSourceConfiguration.directives:type_name -> wg.cosmo.node.v1.DirectiveConfiguration 26, // 20: wg.cosmo.node.v1.DataSourceConfiguration.keys:type_name -> wg.cosmo.node.v1.RequiredField 26, // 21: wg.cosmo.node.v1.DataSourceConfiguration.provides:type_name -> wg.cosmo.node.v1.RequiredField 26, // 22: wg.cosmo.node.v1.DataSourceConfiguration.requires:type_name -> wg.cosmo.node.v1.RequiredField - 35, // 23: wg.cosmo.node.v1.DataSourceConfiguration.custom_events:type_name -> wg.cosmo.node.v1.DataSourceCustomEvents + 36, // 23: wg.cosmo.node.v1.DataSourceConfiguration.custom_events:type_name -> wg.cosmo.node.v1.DataSourceCustomEvents 27, // 24: wg.cosmo.node.v1.DataSourceConfiguration.entity_interfaces:type_name -> wg.cosmo.node.v1.EntityInterfaceConfiguration 27, // 25: wg.cosmo.node.v1.DataSourceConfiguration.interface_objects:type_name -> wg.cosmo.node.v1.EntityInterfaceConfiguration 1, // 26: wg.cosmo.node.v1.ArgumentConfiguration.source_type:type_name -> wg.cosmo.node.v1.ArgumentSource @@ -4111,55 +4190,57 @@ var file_wg_cosmo_node_v1_node_proto_depIdxs = []int32{ 19, // 28: wg.cosmo.node.v1.AuthorizationConfiguration.required_or_scopes_by_or:type_name -> wg.cosmo.node.v1.Scopes 18, // 29: wg.cosmo.node.v1.FieldConfiguration.arguments_configuration:type_name -> wg.cosmo.node.v1.ArgumentConfiguration 20, // 30: wg.cosmo.node.v1.FieldConfiguration.authorization_configuration:type_name -> wg.cosmo.node.v1.AuthorizationConfiguration - 47, // 31: wg.cosmo.node.v1.FieldConfiguration.subscription_filter_condition:type_name -> wg.cosmo.node.v1.SubscriptionFilterCondition + 48, // 31: wg.cosmo.node.v1.FieldConfiguration.subscription_filter_condition:type_name -> wg.cosmo.node.v1.SubscriptionFilterCondition 24, // 32: wg.cosmo.node.v1.FieldSetCondition.field_coordinates_path:type_name -> wg.cosmo.node.v1.FieldCoordinates 25, // 33: wg.cosmo.node.v1.RequiredField.conditions:type_name -> wg.cosmo.node.v1.FieldSetCondition - 37, // 34: wg.cosmo.node.v1.FetchConfiguration.url:type_name -> wg.cosmo.node.v1.ConfigurationVariable + 38, // 34: wg.cosmo.node.v1.FetchConfiguration.url:type_name -> wg.cosmo.node.v1.ConfigurationVariable 5, // 35: wg.cosmo.node.v1.FetchConfiguration.method:type_name -> wg.cosmo.node.v1.HTTPMethod - 56, // 36: wg.cosmo.node.v1.FetchConfiguration.header:type_name -> wg.cosmo.node.v1.FetchConfiguration.HeaderEntry - 37, // 37: wg.cosmo.node.v1.FetchConfiguration.body:type_name -> wg.cosmo.node.v1.ConfigurationVariable - 39, // 38: wg.cosmo.node.v1.FetchConfiguration.query:type_name -> wg.cosmo.node.v1.URLQueryConfiguration - 41, // 39: wg.cosmo.node.v1.FetchConfiguration.mtls:type_name -> wg.cosmo.node.v1.MTLSConfiguration - 37, // 40: wg.cosmo.node.v1.FetchConfiguration.base_url:type_name -> wg.cosmo.node.v1.ConfigurationVariable - 37, // 41: wg.cosmo.node.v1.FetchConfiguration.path:type_name -> wg.cosmo.node.v1.ConfigurationVariable - 37, // 42: wg.cosmo.node.v1.FetchConfiguration.http_proxy_url:type_name -> wg.cosmo.node.v1.ConfigurationVariable + 57, // 36: wg.cosmo.node.v1.FetchConfiguration.header:type_name -> wg.cosmo.node.v1.FetchConfiguration.HeaderEntry + 38, // 37: wg.cosmo.node.v1.FetchConfiguration.body:type_name -> wg.cosmo.node.v1.ConfigurationVariable + 40, // 38: wg.cosmo.node.v1.FetchConfiguration.query:type_name -> wg.cosmo.node.v1.URLQueryConfiguration + 42, // 39: wg.cosmo.node.v1.FetchConfiguration.mtls:type_name -> wg.cosmo.node.v1.MTLSConfiguration + 38, // 40: wg.cosmo.node.v1.FetchConfiguration.base_url:type_name -> wg.cosmo.node.v1.ConfigurationVariable + 38, // 41: wg.cosmo.node.v1.FetchConfiguration.path:type_name -> wg.cosmo.node.v1.ConfigurationVariable + 38, // 42: wg.cosmo.node.v1.FetchConfiguration.http_proxy_url:type_name -> wg.cosmo.node.v1.ConfigurationVariable 28, // 43: wg.cosmo.node.v1.DataSourceCustom_GraphQL.fetch:type_name -> wg.cosmo.node.v1.FetchConfiguration - 42, // 44: wg.cosmo.node.v1.DataSourceCustom_GraphQL.subscription:type_name -> wg.cosmo.node.v1.GraphQLSubscriptionConfiguration - 43, // 45: wg.cosmo.node.v1.DataSourceCustom_GraphQL.federation:type_name -> wg.cosmo.node.v1.GraphQLFederationConfiguration - 44, // 46: wg.cosmo.node.v1.DataSourceCustom_GraphQL.upstream_schema:type_name -> wg.cosmo.node.v1.InternedString - 45, // 47: wg.cosmo.node.v1.DataSourceCustom_GraphQL.custom_scalar_type_fields:type_name -> wg.cosmo.node.v1.SingleTypeField - 34, // 48: wg.cosmo.node.v1.NatsEventConfiguration.engine_event_configuration:type_name -> wg.cosmo.node.v1.EngineEventConfiguration + 43, // 44: wg.cosmo.node.v1.DataSourceCustom_GraphQL.subscription:type_name -> wg.cosmo.node.v1.GraphQLSubscriptionConfiguration + 44, // 45: wg.cosmo.node.v1.DataSourceCustom_GraphQL.federation:type_name -> wg.cosmo.node.v1.GraphQLFederationConfiguration + 45, // 46: wg.cosmo.node.v1.DataSourceCustom_GraphQL.upstream_schema:type_name -> wg.cosmo.node.v1.InternedString + 46, // 47: wg.cosmo.node.v1.DataSourceCustom_GraphQL.custom_scalar_type_fields:type_name -> wg.cosmo.node.v1.SingleTypeField + 35, // 48: wg.cosmo.node.v1.NatsEventConfiguration.engine_event_configuration:type_name -> wg.cosmo.node.v1.EngineEventConfiguration 31, // 49: wg.cosmo.node.v1.NatsEventConfiguration.stream_configuration:type_name -> wg.cosmo.node.v1.NatsStreamConfiguration - 34, // 50: wg.cosmo.node.v1.KafkaEventConfiguration.engine_event_configuration:type_name -> wg.cosmo.node.v1.EngineEventConfiguration - 3, // 51: wg.cosmo.node.v1.EngineEventConfiguration.type:type_name -> wg.cosmo.node.v1.EventType - 32, // 52: wg.cosmo.node.v1.DataSourceCustomEvents.nats:type_name -> wg.cosmo.node.v1.NatsEventConfiguration - 33, // 53: wg.cosmo.node.v1.DataSourceCustomEvents.kafka:type_name -> wg.cosmo.node.v1.KafkaEventConfiguration - 37, // 54: wg.cosmo.node.v1.DataSourceCustom_Static.data:type_name -> wg.cosmo.node.v1.ConfigurationVariable - 4, // 55: wg.cosmo.node.v1.ConfigurationVariable.kind:type_name -> wg.cosmo.node.v1.ConfigurationVariableKind - 37, // 56: wg.cosmo.node.v1.HTTPHeader.values:type_name -> wg.cosmo.node.v1.ConfigurationVariable - 37, // 57: wg.cosmo.node.v1.MTLSConfiguration.key:type_name -> wg.cosmo.node.v1.ConfigurationVariable - 37, // 58: wg.cosmo.node.v1.MTLSConfiguration.cert:type_name -> wg.cosmo.node.v1.ConfigurationVariable - 37, // 59: wg.cosmo.node.v1.GraphQLSubscriptionConfiguration.url:type_name -> wg.cosmo.node.v1.ConfigurationVariable - 58, // 60: wg.cosmo.node.v1.GraphQLSubscriptionConfiguration.protocol:type_name -> wg.cosmo.common.GraphQLSubscriptionProtocol - 59, // 61: wg.cosmo.node.v1.GraphQLSubscriptionConfiguration.websocketSubprotocol:type_name -> wg.cosmo.common.GraphQLWebsocketSubprotocol - 47, // 62: wg.cosmo.node.v1.SubscriptionFilterCondition.and:type_name -> wg.cosmo.node.v1.SubscriptionFilterCondition - 46, // 63: wg.cosmo.node.v1.SubscriptionFilterCondition.in:type_name -> wg.cosmo.node.v1.SubscriptionFieldCondition - 47, // 64: wg.cosmo.node.v1.SubscriptionFilterCondition.not:type_name -> wg.cosmo.node.v1.SubscriptionFilterCondition - 47, // 65: wg.cosmo.node.v1.SubscriptionFilterCondition.or:type_name -> wg.cosmo.node.v1.SubscriptionFilterCondition - 49, // 66: wg.cosmo.node.v1.CacheWarmerOperations.operations:type_name -> wg.cosmo.node.v1.Operation - 50, // 67: wg.cosmo.node.v1.Operation.request:type_name -> wg.cosmo.node.v1.OperationRequest - 53, // 68: wg.cosmo.node.v1.Operation.client:type_name -> wg.cosmo.node.v1.ClientInfo - 51, // 69: wg.cosmo.node.v1.OperationRequest.extensions:type_name -> wg.cosmo.node.v1.Extension - 52, // 70: wg.cosmo.node.v1.Extension.persisted_query:type_name -> wg.cosmo.node.v1.PersistedQuery - 8, // 71: wg.cosmo.node.v1.FeatureFlagRouterExecutionConfigs.ConfigByFeatureFlagNameEntry.value:type_name -> wg.cosmo.node.v1.FeatureFlagRouterExecutionConfig - 40, // 72: wg.cosmo.node.v1.FetchConfiguration.HeaderEntry.value:type_name -> wg.cosmo.node.v1.HTTPHeader - 14, // 73: wg.cosmo.node.v1.NodeService.SelfRegister:input_type -> wg.cosmo.node.v1.SelfRegisterRequest - 15, // 74: wg.cosmo.node.v1.NodeService.SelfRegister:output_type -> wg.cosmo.node.v1.SelfRegisterResponse - 74, // [74:75] is the sub-list for method output_type - 73, // [73:74] is the sub-list for method input_type - 73, // [73:73] is the sub-list for extension type_name - 73, // [73:73] is the sub-list for extension extendee - 0, // [0:73] is the sub-list for field type_name + 35, // 50: wg.cosmo.node.v1.KafkaEventConfiguration.engine_event_configuration:type_name -> wg.cosmo.node.v1.EngineEventConfiguration + 35, // 51: wg.cosmo.node.v1.RedisEventConfiguration.engine_event_configuration:type_name -> wg.cosmo.node.v1.EngineEventConfiguration + 3, // 52: wg.cosmo.node.v1.EngineEventConfiguration.type:type_name -> wg.cosmo.node.v1.EventType + 32, // 53: wg.cosmo.node.v1.DataSourceCustomEvents.nats:type_name -> wg.cosmo.node.v1.NatsEventConfiguration + 33, // 54: wg.cosmo.node.v1.DataSourceCustomEvents.kafka:type_name -> wg.cosmo.node.v1.KafkaEventConfiguration + 34, // 55: wg.cosmo.node.v1.DataSourceCustomEvents.redis:type_name -> wg.cosmo.node.v1.RedisEventConfiguration + 38, // 56: wg.cosmo.node.v1.DataSourceCustom_Static.data:type_name -> wg.cosmo.node.v1.ConfigurationVariable + 4, // 57: wg.cosmo.node.v1.ConfigurationVariable.kind:type_name -> wg.cosmo.node.v1.ConfigurationVariableKind + 38, // 58: wg.cosmo.node.v1.HTTPHeader.values:type_name -> wg.cosmo.node.v1.ConfigurationVariable + 38, // 59: wg.cosmo.node.v1.MTLSConfiguration.key:type_name -> wg.cosmo.node.v1.ConfigurationVariable + 38, // 60: wg.cosmo.node.v1.MTLSConfiguration.cert:type_name -> wg.cosmo.node.v1.ConfigurationVariable + 38, // 61: wg.cosmo.node.v1.GraphQLSubscriptionConfiguration.url:type_name -> wg.cosmo.node.v1.ConfigurationVariable + 59, // 62: wg.cosmo.node.v1.GraphQLSubscriptionConfiguration.protocol:type_name -> wg.cosmo.common.GraphQLSubscriptionProtocol + 60, // 63: wg.cosmo.node.v1.GraphQLSubscriptionConfiguration.websocketSubprotocol:type_name -> wg.cosmo.common.GraphQLWebsocketSubprotocol + 48, // 64: wg.cosmo.node.v1.SubscriptionFilterCondition.and:type_name -> wg.cosmo.node.v1.SubscriptionFilterCondition + 47, // 65: wg.cosmo.node.v1.SubscriptionFilterCondition.in:type_name -> wg.cosmo.node.v1.SubscriptionFieldCondition + 48, // 66: wg.cosmo.node.v1.SubscriptionFilterCondition.not:type_name -> wg.cosmo.node.v1.SubscriptionFilterCondition + 48, // 67: wg.cosmo.node.v1.SubscriptionFilterCondition.or:type_name -> wg.cosmo.node.v1.SubscriptionFilterCondition + 50, // 68: wg.cosmo.node.v1.CacheWarmerOperations.operations:type_name -> wg.cosmo.node.v1.Operation + 51, // 69: wg.cosmo.node.v1.Operation.request:type_name -> wg.cosmo.node.v1.OperationRequest + 54, // 70: wg.cosmo.node.v1.Operation.client:type_name -> wg.cosmo.node.v1.ClientInfo + 52, // 71: wg.cosmo.node.v1.OperationRequest.extensions:type_name -> wg.cosmo.node.v1.Extension + 53, // 72: wg.cosmo.node.v1.Extension.persisted_query:type_name -> wg.cosmo.node.v1.PersistedQuery + 8, // 73: wg.cosmo.node.v1.FeatureFlagRouterExecutionConfigs.ConfigByFeatureFlagNameEntry.value:type_name -> wg.cosmo.node.v1.FeatureFlagRouterExecutionConfig + 41, // 74: wg.cosmo.node.v1.FetchConfiguration.HeaderEntry.value:type_name -> wg.cosmo.node.v1.HTTPHeader + 14, // 75: wg.cosmo.node.v1.NodeService.SelfRegister:input_type -> wg.cosmo.node.v1.SelfRegisterRequest + 15, // 76: wg.cosmo.node.v1.NodeService.SelfRegister:output_type -> wg.cosmo.node.v1.SelfRegisterResponse + 76, // [76:77] is the sub-list for method output_type + 75, // [75:76] is the sub-list for method input_type + 75, // [75:75] is the sub-list for extension type_name + 75, // [75:75] is the sub-list for extension extendee + 0, // [0:75] is the sub-list for field type_name } func init() { file_wg_cosmo_node_v1_node_proto_init() } @@ -4505,7 +4586,7 @@ func file_wg_cosmo_node_v1_node_proto_init() { } } file_wg_cosmo_node_v1_node_proto_msgTypes[28].Exporter = func(v any, i int) any { - switch v := v.(*EngineEventConfiguration); i { + switch v := v.(*RedisEventConfiguration); i { case 0: return &v.state case 1: @@ -4517,7 +4598,7 @@ func file_wg_cosmo_node_v1_node_proto_init() { } } file_wg_cosmo_node_v1_node_proto_msgTypes[29].Exporter = func(v any, i int) any { - switch v := v.(*DataSourceCustomEvents); i { + switch v := v.(*EngineEventConfiguration); i { case 0: return &v.state case 1: @@ -4529,7 +4610,7 @@ func file_wg_cosmo_node_v1_node_proto_init() { } } file_wg_cosmo_node_v1_node_proto_msgTypes[30].Exporter = func(v any, i int) any { - switch v := v.(*DataSourceCustom_Static); i { + switch v := v.(*DataSourceCustomEvents); i { case 0: return &v.state case 1: @@ -4541,7 +4622,7 @@ func file_wg_cosmo_node_v1_node_proto_init() { } } file_wg_cosmo_node_v1_node_proto_msgTypes[31].Exporter = func(v any, i int) any { - switch v := v.(*ConfigurationVariable); i { + switch v := v.(*DataSourceCustom_Static); i { case 0: return &v.state case 1: @@ -4553,7 +4634,7 @@ func file_wg_cosmo_node_v1_node_proto_init() { } } file_wg_cosmo_node_v1_node_proto_msgTypes[32].Exporter = func(v any, i int) any { - switch v := v.(*DirectiveConfiguration); i { + switch v := v.(*ConfigurationVariable); i { case 0: return &v.state case 1: @@ -4565,7 +4646,7 @@ func file_wg_cosmo_node_v1_node_proto_init() { } } file_wg_cosmo_node_v1_node_proto_msgTypes[33].Exporter = func(v any, i int) any { - switch v := v.(*URLQueryConfiguration); i { + switch v := v.(*DirectiveConfiguration); i { case 0: return &v.state case 1: @@ -4577,7 +4658,7 @@ func file_wg_cosmo_node_v1_node_proto_init() { } } file_wg_cosmo_node_v1_node_proto_msgTypes[34].Exporter = func(v any, i int) any { - switch v := v.(*HTTPHeader); i { + switch v := v.(*URLQueryConfiguration); i { case 0: return &v.state case 1: @@ -4589,7 +4670,7 @@ func file_wg_cosmo_node_v1_node_proto_init() { } } file_wg_cosmo_node_v1_node_proto_msgTypes[35].Exporter = func(v any, i int) any { - switch v := v.(*MTLSConfiguration); i { + switch v := v.(*HTTPHeader); i { case 0: return &v.state case 1: @@ -4601,7 +4682,7 @@ func file_wg_cosmo_node_v1_node_proto_init() { } } file_wg_cosmo_node_v1_node_proto_msgTypes[36].Exporter = func(v any, i int) any { - switch v := v.(*GraphQLSubscriptionConfiguration); i { + switch v := v.(*MTLSConfiguration); i { case 0: return &v.state case 1: @@ -4613,7 +4694,7 @@ func file_wg_cosmo_node_v1_node_proto_init() { } } file_wg_cosmo_node_v1_node_proto_msgTypes[37].Exporter = func(v any, i int) any { - switch v := v.(*GraphQLFederationConfiguration); i { + switch v := v.(*GraphQLSubscriptionConfiguration); i { case 0: return &v.state case 1: @@ -4625,7 +4706,7 @@ func file_wg_cosmo_node_v1_node_proto_init() { } } file_wg_cosmo_node_v1_node_proto_msgTypes[38].Exporter = func(v any, i int) any { - switch v := v.(*InternedString); i { + switch v := v.(*GraphQLFederationConfiguration); i { case 0: return &v.state case 1: @@ -4637,7 +4718,7 @@ func file_wg_cosmo_node_v1_node_proto_init() { } } file_wg_cosmo_node_v1_node_proto_msgTypes[39].Exporter = func(v any, i int) any { - switch v := v.(*SingleTypeField); i { + switch v := v.(*InternedString); i { case 0: return &v.state case 1: @@ -4649,7 +4730,7 @@ func file_wg_cosmo_node_v1_node_proto_init() { } } file_wg_cosmo_node_v1_node_proto_msgTypes[40].Exporter = func(v any, i int) any { - switch v := v.(*SubscriptionFieldCondition); i { + switch v := v.(*SingleTypeField); i { case 0: return &v.state case 1: @@ -4661,7 +4742,7 @@ func file_wg_cosmo_node_v1_node_proto_init() { } } file_wg_cosmo_node_v1_node_proto_msgTypes[41].Exporter = func(v any, i int) any { - switch v := v.(*SubscriptionFilterCondition); i { + switch v := v.(*SubscriptionFieldCondition); i { case 0: return &v.state case 1: @@ -4673,7 +4754,7 @@ func file_wg_cosmo_node_v1_node_proto_init() { } } file_wg_cosmo_node_v1_node_proto_msgTypes[42].Exporter = func(v any, i int) any { - switch v := v.(*CacheWarmerOperations); i { + switch v := v.(*SubscriptionFilterCondition); i { case 0: return &v.state case 1: @@ -4685,7 +4766,7 @@ func file_wg_cosmo_node_v1_node_proto_init() { } } file_wg_cosmo_node_v1_node_proto_msgTypes[43].Exporter = func(v any, i int) any { - switch v := v.(*Operation); i { + switch v := v.(*CacheWarmerOperations); i { case 0: return &v.state case 1: @@ -4697,7 +4778,7 @@ func file_wg_cosmo_node_v1_node_proto_init() { } } file_wg_cosmo_node_v1_node_proto_msgTypes[44].Exporter = func(v any, i int) any { - switch v := v.(*OperationRequest); i { + switch v := v.(*Operation); i { case 0: return &v.state case 1: @@ -4709,7 +4790,7 @@ func file_wg_cosmo_node_v1_node_proto_init() { } } file_wg_cosmo_node_v1_node_proto_msgTypes[45].Exporter = func(v any, i int) any { - switch v := v.(*Extension); i { + switch v := v.(*OperationRequest); i { case 0: return &v.state case 1: @@ -4721,7 +4802,7 @@ func file_wg_cosmo_node_v1_node_proto_init() { } } file_wg_cosmo_node_v1_node_proto_msgTypes[46].Exporter = func(v any, i int) any { - switch v := v.(*PersistedQuery); i { + switch v := v.(*Extension); i { case 0: return &v.state case 1: @@ -4733,6 +4814,18 @@ func file_wg_cosmo_node_v1_node_proto_init() { } } file_wg_cosmo_node_v1_node_proto_msgTypes[47].Exporter = func(v any, i int) any { + switch v := v.(*PersistedQuery); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_wg_cosmo_node_v1_node_proto_msgTypes[48].Exporter = func(v any, i int) any { switch v := v.(*ClientInfo); i { case 0: return &v.state @@ -4751,15 +4844,15 @@ func file_wg_cosmo_node_v1_node_proto_init() { file_wg_cosmo_node_v1_node_proto_msgTypes[10].OneofWrappers = []any{} file_wg_cosmo_node_v1_node_proto_msgTypes[15].OneofWrappers = []any{} file_wg_cosmo_node_v1_node_proto_msgTypes[22].OneofWrappers = []any{} - file_wg_cosmo_node_v1_node_proto_msgTypes[36].OneofWrappers = []any{} - file_wg_cosmo_node_v1_node_proto_msgTypes[41].OneofWrappers = []any{} + file_wg_cosmo_node_v1_node_proto_msgTypes[37].OneofWrappers = []any{} + file_wg_cosmo_node_v1_node_proto_msgTypes[42].OneofWrappers = []any{} type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_wg_cosmo_node_v1_node_proto_rawDesc, NumEnums: 6, - NumMessages: 51, + NumMessages: 52, NumExtensions: 0, NumServices: 1, }, diff --git a/connect/src/wg/cosmo/node/v1/node_pb.ts b/connect/src/wg/cosmo/node/v1/node_pb.ts index 5a20df63d1..48a8932a7c 100644 --- a/connect/src/wg/cosmo/node/v1/node_pb.ts +++ b/connect/src/wg/cosmo/node/v1/node_pb.ts @@ -1630,6 +1630,49 @@ export class KafkaEventConfiguration extends Message { } } +/** + * @generated from message wg.cosmo.node.v1.RedisEventConfiguration + */ +export class RedisEventConfiguration extends Message { + /** + * @generated from field: wg.cosmo.node.v1.EngineEventConfiguration engine_event_configuration = 1; + */ + engineEventConfiguration?: EngineEventConfiguration; + + /** + * @generated from field: repeated string channels = 2; + */ + channels: string[] = []; + + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime: typeof proto3 = proto3; + static readonly typeName = "wg.cosmo.node.v1.RedisEventConfiguration"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + { no: 1, name: "engine_event_configuration", kind: "message", T: EngineEventConfiguration }, + { no: 2, name: "channels", kind: "scalar", T: 9 /* ScalarType.STRING */, repeated: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): RedisEventConfiguration { + return new RedisEventConfiguration().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): RedisEventConfiguration { + return new RedisEventConfiguration().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): RedisEventConfiguration { + return new RedisEventConfiguration().fromJsonString(jsonString, options); + } + + static equals(a: RedisEventConfiguration | PlainMessage | undefined, b: RedisEventConfiguration | PlainMessage | undefined): boolean { + return proto3.util.equals(RedisEventConfiguration, a, b); + } +} + /** * @generated from message wg.cosmo.node.v1.EngineEventConfiguration */ @@ -1699,6 +1742,11 @@ export class DataSourceCustomEvents extends Message { */ kafka: KafkaEventConfiguration[] = []; + /** + * @generated from field: repeated wg.cosmo.node.v1.RedisEventConfiguration redis = 3; + */ + redis: RedisEventConfiguration[] = []; + constructor(data?: PartialMessage) { super(); proto3.util.initPartial(data, this); @@ -1709,6 +1757,7 @@ export class DataSourceCustomEvents extends Message { static readonly fields: FieldList = proto3.util.newFieldList(() => [ { no: 1, name: "nats", kind: "message", T: NatsEventConfiguration, repeated: true }, { no: 2, name: "kafka", kind: "message", T: KafkaEventConfiguration, repeated: true }, + { no: 3, name: "redis", kind: "message", T: RedisEventConfiguration, repeated: true }, ]); static fromBinary(bytes: Uint8Array, options?: Partial): DataSourceCustomEvents { diff --git a/demo/pkg/subgraphs/employeeupdated/subgraph/schema.graphqls b/demo/pkg/subgraphs/employeeupdated/subgraph/schema.graphqls index 48d8717576..b7bf9e6509 100644 --- a/demo/pkg/subgraphs/employeeupdated/subgraph/schema.graphqls +++ b/demo/pkg/subgraphs/employeeupdated/subgraph/schema.graphqls @@ -4,6 +4,8 @@ directive @edfs__natsSubscribe(subjects: [String!]!, providerId: String! = "defa directive @openfed__subscriptionFilter(condition: openfed__SubscriptionFilterCondition!) on FIELD_DEFINITION directive @edfs__kafkaPublish(topic: String!, providerId: String! = "default") on FIELD_DEFINITION directive @edfs__kafkaSubscribe(topics: [String!]!, providerId: String! = "default") on FIELD_DEFINITION +directive @edfs__redisPublish(channel: String!, providerId: String! = "default") on FIELD_DEFINITION +directive @edfs__redisSubscribe(channels: [String!]!, providerId: String! = "default") on FIELD_DEFINITION scalar openfed__SubscriptionFilterValue @@ -32,6 +34,8 @@ input UpdateEmployeeInput { type Mutation { updateEmployeeMyKafka(employeeID: Int!, update: UpdateEmployeeInput!): edfs__PublishResult! @edfs__kafkaPublish(topic: "employeeUpdated", providerId: "my-kafka") updateEmployeeMyNats(id: Int!, update: UpdateEmployeeInput!): edfs__PublishResult! @edfs__natsPublish(subject: "employeeUpdatedMyNats.{{ args.id }}", providerId: "my-nats") + updateEmployeeMyRedis(id: Int!, update: UpdateEmployeeInput!): edfs__PublishResult! @edfs__redisPublish(channel: "employeeUpdatedMyRedis", providerId: "my-redis") + updateEmployeeMyRedisOnCustomChannel(id: Int!, update: UpdateEmployeeInput!): edfs__PublishResult! @edfs__redisPublish(channel: "employeeUpdatedMyRedis.{{ args.id }}", providerId: "my-redis") } type Subscription { @@ -39,6 +43,8 @@ type Subscription { employeeUpdatedMyKafka(employeeID: Int!): Employee! @edfs__kafkaSubscribe(topics: ["employeeUpdated", "employeeUpdatedTwo"], providerId: "my-kafka") employeeUpdatedMyNats(id: Int!): Employee! @edfs__natsSubscribe(subjects: ["employeeUpdatedMyNats.{{ args.id }}", "employeeUpdatedMyNatsTwo.{{ args.id }}"], providerId: "my-nats") employeeUpdatedNatsStream(id: Int!): Employee! @edfs__natsSubscribe(subjects: ["employeeUpdated.{{ args.id }}"], streamConfiguration: { consumerName: "consumerName", streamName: "streamName"}) + employeeUpdatedMyRedis(id: Int!): Employee! @edfs__redisSubscribe(channels: ["employeeUpdatedMyRedis.{{ args.id }}"], providerId: "my-redis") + employeeUpdates: Employee! @edfs__redisSubscribe(channels: ["employeeUpdatedMyRedis"], providerId: "my-redis") filteredEmployeeUpdated(id: Int!): Employee! @edfs__natsSubscribe(subjects: ["employeeUpdated.{{ args.id }}"]) @openfed__subscriptionFilter(condition: { NOT: { IN: { fieldPath: "id", values: [2, 6, 9, 10, 12] } } }) @@ -56,6 +62,9 @@ type Subscription { { IN: { fieldPath: "id", values: ["1"] } }, ], }) + filteredEmployeeUpdatedMyRedis(id: ID!): Employee! + @edfs__redisSubscribe(channels: ["employeeUpdatedMyRedis"], providerId: "my-redis") + @openfed__subscriptionFilter(condition: { IN: { fieldPath: "id", values: [1, 3, 4, 7, 11] } }) } input KafkaInput { diff --git a/proto/wg/cosmo/node/v1/node.proto b/proto/wg/cosmo/node/v1/node.proto index 8f8a7fb211..bb35b1f612 100644 --- a/proto/wg/cosmo/node/v1/node.proto +++ b/proto/wg/cosmo/node/v1/node.proto @@ -224,6 +224,11 @@ message KafkaEventConfiguration { repeated string topics = 2; } +message RedisEventConfiguration { + EngineEventConfiguration engine_event_configuration = 1; + repeated string channels = 2; +} + message EngineEventConfiguration { string provider_id = 1; EventType type = 2; @@ -234,6 +239,7 @@ message EngineEventConfiguration { message DataSourceCustomEvents { repeated NatsEventConfiguration nats = 1; repeated KafkaEventConfiguration kafka = 2; + repeated RedisEventConfiguration redis = 3; } message DataSourceCustom_Static { diff --git a/router-tests/events/events_config_test.go b/router-tests/events/events_config_test.go index f5c05bf8ac..957807acfd 100644 --- a/router-tests/events/events_config_test.go +++ b/router-tests/events/events_config_test.go @@ -18,6 +18,7 @@ func TestEventsConfig(t *testing.T) { RouterConfigJSONTemplate: testenv.ConfigWithEdfsJSONTemplate, EnableNats: true, EnableKafka: false, + EnableRedis: true, ModifyEventsConfiguration: func(eventsConfiguration *config.EventsConfiguration) { eventsConfiguration.Providers.Kafka = nil }, @@ -32,6 +33,7 @@ func TestEventsConfig(t *testing.T) { RouterConfigJSONTemplate: testenv.ConfigWithEdfsJSONTemplate, EnableNats: false, EnableKafka: true, + EnableRedis: true, ModifyEventsConfiguration: func(eventsConfiguration *config.EventsConfiguration) { eventsConfiguration.Providers.Nats = nil }, @@ -40,4 +42,19 @@ func TestEventsConfig(t *testing.T) { }) assert.ErrorContains(t, err, "nats provider with ID default is not defined") }) + + t.Run("redis provider not specified in the router configuration", func(t *testing.T) { + err := testenv.RunWithError(t, &testenv.Config{ + RouterConfigJSONTemplate: testenv.ConfigWithEdfsJSONTemplate, + EnableNats: true, + EnableKafka: true, + EnableRedis: false, + ModifyEventsConfiguration: func(eventsConfiguration *config.EventsConfiguration) { + eventsConfiguration.Providers.Redis = nil + }, + }, func(t *testing.T, xEnv *testenv.Environment) { + assert.Fail(t, "should not be called") + }) + assert.ErrorContains(t, err, "failed to find Redis provider with ID") + }) } diff --git a/router-tests/events/redis_events_test.go b/router-tests/events/redis_events_test.go new file mode 100644 index 0000000000..3867a60b33 --- /dev/null +++ b/router-tests/events/redis_events_test.go @@ -0,0 +1,925 @@ +package events_test + +import ( + "bufio" + "bytes" + "context" + "net/http" + "net/url" + "sync/atomic" + "testing" + "time" + + "github.com/redis/go-redis/v9" + "github.com/stretchr/testify/assert" + "github.com/wundergraph/cosmo/router/core" + + "github.com/hasura/go-graphql-client" + "github.com/stretchr/testify/require" + "github.com/tidwall/gjson" + "github.com/wundergraph/cosmo/router-tests/testenv" + "github.com/wundergraph/cosmo/router/pkg/config" +) + +const RedisWaitTimeout = time.Second * 30 + +func TestRedisEvents(t *testing.T) { + t.Parallel() + + if testing.Short() { + t.Skip("skipping test in short mode.") + } + t.Run("subscribe async", func(t *testing.T) { + t.Parallel() + + topics := []string{"employeeUpdatedMyRedis"} + + testenv.Run(t, &testenv.Config{ + RouterConfigJSONTemplate: testenv.ConfigWithEdfsRedisJSONTemplate, + EnableRedis: true, + }, func(t *testing.T, xEnv *testenv.Environment) { + var subscriptionOne struct { + employeeUpdates struct { + ID float64 `graphql:"id"` + Details struct { + Forename string `graphql:"forename"` + Surname string `graphql:"surname"` + } `graphql:"details"` + } `graphql:"employeeUpdates"` + } + + surl := xEnv.GraphQLWebSocketSubscriptionURL() + client := graphql.NewSubscriptionClient(surl) + t.Cleanup(func() { + _ = client.Close() + }) + + var counter atomic.Uint32 + + subscriptionOneID, err := client.Subscribe(&subscriptionOne, nil, func(dataValue []byte, errValue error) error { + defer counter.Add(1) + require.NoError(t, errValue) + require.JSONEq(t, `{"employeeUpdates":{"id":1,"details":{"forename":"Jens","surname":"Neuse"}}}`, string(dataValue)) + return nil + }) + require.NoError(t, err) + require.NotEmpty(t, subscriptionOneID) + + go func() { + clientErr := client.Run() + require.NoError(t, clientErr) + }() + + go func() { + require.Eventually(t, func() bool { + return counter.Load() == 1 + }, RedisWaitTimeout, time.Millisecond*100) + _ = client.Close() + }() + + xEnv.WaitForSubscriptionCount(1, RedisWaitTimeout) + + produceRedisMessage(t, xEnv, topics[0], `{"__typename":"Employee","id": 1,"update":{"name":"foo"}}`) + + xEnv.WaitForMessagesSent(1, RedisWaitTimeout) + xEnv.WaitForSubscriptionCount(0, RedisWaitTimeout) + xEnv.WaitForConnectionCount(0, RedisWaitTimeout) + }) + }) + + t.Run("message and resolve errors should not abort the subscription", func(t *testing.T) { + t.Parallel() + + topics := []string{"employeeUpdatedMyRedis"} + + testenv.Run(t, &testenv.Config{ + RouterConfigJSONTemplate: testenv.ConfigWithEdfsRedisJSONTemplate, + EnableRedis: true, + }, func(t *testing.T, xEnv *testenv.Environment) { + var subscriptionOne struct { + employeeUpdates struct { + ID float64 `graphql:"id"` + Details struct { + Forename string `graphql:"forename"` + Surname string `graphql:"surname"` + } `graphql:"details"` + } `graphql:"employeeUpdates"` + } + + surl := xEnv.GraphQLWebSocketSubscriptionURL() + client := graphql.NewSubscriptionClient(surl) + t.Cleanup(func() { + _ = client.Close() + }) + + var counter atomic.Uint32 + + subscriptionOneID, err := client.Subscribe(&subscriptionOne, nil, func(dataValue []byte, errValue error) error { + oldCount := counter.Load() + counter.Add(1) + + if oldCount == 0 { + var gqlErr graphql.Errors + require.ErrorAs(t, errValue, &gqlErr) + require.Equal(t, "Invalid message received", gqlErr[0].Message) + } else if oldCount == 1 || oldCount == 3 { + require.NoError(t, errValue) + require.JSONEq(t, `{"employeeUpdates":{"id":1,"details":{"forename":"Jens","surname":"Neuse"}}}`, string(dataValue)) + } else if oldCount == 2 { + var gqlErr graphql.Errors + require.ErrorAs(t, errValue, &gqlErr) + require.Equal(t, "Cannot return null for non-nullable field 'Subscription.employeeUpdates.id'.", gqlErr[0].Message) + } + + return nil + }) + require.NoError(t, err) + require.NotEmpty(t, subscriptionOneID) + + go func() { + clientErr := client.Run() + require.NoError(t, clientErr) + }() + + xEnv.WaitForSubscriptionCount(1, RedisWaitTimeout) + + produceRedisMessage(t, xEnv, topics[0], ``) // Empty message + require.Eventually(t, func() bool { + return counter.Load() == 1 + }, RedisWaitTimeout, time.Millisecond*100) + + produceRedisMessage(t, xEnv, topics[0], `{"__typename":"Employee","id": 1,"update":{"name":"foo"}}`) // Correct message + require.Eventually(t, func() bool { + return counter.Load() == 2 + }, RedisWaitTimeout, time.Millisecond*100) + + produceRedisMessage(t, xEnv, topics[0], `{"__typename":"Employee","update":{"name":"foo"}}`) // Missing entity = Resolver error + require.Eventually(t, func() bool { + return counter.Load() == 3 + }, RedisWaitTimeout, time.Millisecond*100) + + produceRedisMessage(t, xEnv, topics[0], `{"__typename":"Employee","id": 1,"update":{"name":"foo"}}`) // Correct message + require.Eventually(t, func() bool { + return counter.Load() == 4 + }, RedisWaitTimeout, time.Millisecond*100) + + require.NoError(t, client.Close()) + + xEnv.WaitForSubscriptionCount(0, RedisWaitTimeout) + xEnv.WaitForConnectionCount(0, RedisWaitTimeout) + }) + }) + + t.Run("every subscriber gets the message", func(t *testing.T) { + t.Parallel() + + topics := []string{"employeeUpdatedMyRedis"} + + testenv.Run(t, &testenv.Config{ + RouterConfigJSONTemplate: testenv.ConfigWithEdfsRedisJSONTemplate, + EnableRedis: true, + }, func(t *testing.T, xEnv *testenv.Environment) { + + var subscriptionOne struct { + employeeUpdates struct { + ID float64 `graphql:"id"` + Details struct { + Forename string `graphql:"forename"` + Surname string `graphql:"surname"` + } `graphql:"details"` + } `graphql:"employeeUpdates"` + } + + surl := xEnv.GraphQLWebSocketSubscriptionURL() + client := graphql.NewSubscriptionClient(surl) + + var counter atomic.Uint32 + + subscriptionOneID, err := client.Subscribe(&subscriptionOne, nil, func(dataValue []byte, errValue error) error { + defer counter.Add(1) + require.NoError(t, errValue) + require.JSONEq(t, `{"employeeUpdates":{"id":1,"details":{"forename":"Jens","surname":"Neuse"}}}`, string(dataValue)) + return nil + }) + require.NoError(t, err) + require.NotEmpty(t, subscriptionOneID) + + subscriptionTwoID, err := client.Subscribe(&subscriptionOne, nil, func(dataValue []byte, errValue error) error { + defer counter.Add(1) + require.NoError(t, errValue) + require.JSONEq(t, `{"employeeUpdates":{"id":1,"details":{"forename":"Jens","surname":"Neuse"}}}`, string(dataValue)) + return nil + }) + require.NoError(t, err) + require.NotEmpty(t, subscriptionTwoID) + + go func() { + clientErr := client.Run() + require.NoError(t, clientErr) + }() + + xEnv.WaitForSubscriptionCount(2, RedisWaitTimeout) + + produceRedisMessage(t, xEnv, topics[0], `{"__typename":"Employee","id": 1,"update":{"name":"foo"}}`) + + xEnv.WaitForMessagesSent(2, RedisWaitTimeout) + + require.Eventually(t, func() bool { + return counter.Load() == 2 + }, RedisWaitTimeout, time.Millisecond*100) + + _ = client.Close() + + xEnv.WaitForSubscriptionCount(0, RedisWaitTimeout) + xEnv.WaitForConnectionCount(0, RedisWaitTimeout) + }) + }) + + t.Run("subscribe to multiple topics through a single directive", func(t *testing.T) { + t.Parallel() + + topics := []string{"employeeUpdatedMyRedis"} + + testenv.Run(t, &testenv.Config{ + RouterConfigJSONTemplate: testenv.ConfigWithEdfsRedisJSONTemplate, + EnableRedis: true, + }, func(t *testing.T, xEnv *testenv.Environment) { + + var subscriptionOne struct { + employeeUpdates struct { + ID float64 `graphql:"id"` + Details struct { + Forename string `graphql:"forename"` + Surname string `graphql:"surname"` + } `graphql:"details"` + } `graphql:"employeeUpdates"` + } + + surl := xEnv.GraphQLWebSocketSubscriptionURL() + client := graphql.NewSubscriptionClient(surl) + t.Cleanup(func() { + _ = client.Close() + }) + + var counter atomic.Uint32 + + subscriptionOneID, err := client.Subscribe(&subscriptionOne, nil, func(dataValue []byte, errValue error) error { + defer counter.Add(1) + + require.NoError(t, errValue) + + employeeID := gjson.GetBytes(dataValue, "employeeUpdates.id").Int() + + if employeeID == 1 { + require.JSONEq(t, `{"employeeUpdates":{"id":1,"details":{"forename":"Jens","surname":"Neuse"}}}`, string(dataValue)) + } else if employeeID == 2 { + require.JSONEq(t, `{"employeeUpdates":{"id":2,"details":{"forename":"Dustin","surname":"Deus"}}}`, string(dataValue)) + } else { + t.Errorf("unexpected employeeID %d", employeeID) + } + + return nil + }) + require.NoError(t, err) + require.NotEmpty(t, subscriptionOneID) + + subscriptionTwoID, err := client.Subscribe(&subscriptionOne, nil, func(dataValue []byte, errValue error) error { + defer counter.Add(1) + + require.NoError(t, errValue) + + employeeID := gjson.GetBytes(dataValue, "employeeUpdates.id").Int() + + if employeeID == 1 { + require.JSONEq(t, `{"employeeUpdates":{"id":1,"details":{"forename":"Jens","surname":"Neuse"}}}`, string(dataValue)) + } else if employeeID == 2 { + require.JSONEq(t, `{"employeeUpdates":{"id":2,"details":{"forename":"Dustin","surname":"Deus"}}}`, string(dataValue)) + } else { + t.Errorf("unexpected employeeID %d", employeeID) + } + + return nil + }) + require.NoError(t, err) + require.NotEmpty(t, subscriptionTwoID) + + go func() { + clientErr := client.Run() + require.NoError(t, clientErr) + }() + + xEnv.WaitForSubscriptionCount(2, RedisWaitTimeout) + + produceRedisMessage(t, xEnv, topics[0], `{"__typename":"Employee","id": 1,"update":{"name":"foo"}}`) + produceRedisMessage(t, xEnv, topics[0], `{"__typename":"Employee","id": 2,"update":{"name":"foo"}}`) + + require.Eventually(t, func() bool { + return counter.Load() == 4 + }, RedisWaitTimeout, time.Millisecond*100, "expected 4 events, got %d", counter.Load()) + + require.NoError(t, client.Close()) + + xEnv.WaitForMessagesSent(4, RedisWaitTimeout) + xEnv.WaitForSubscriptionCount(0, RedisWaitTimeout) + xEnv.WaitForConnectionCount(0, RedisWaitTimeout) + }) + }) + + t.Run("subscribe async netPoll disabled", func(t *testing.T) { + t.Parallel() + + topics := []string{"employeeUpdatedMyRedis"} + + testenv.Run(t, &testenv.Config{ + RouterConfigJSONTemplate: testenv.ConfigWithEdfsRedisJSONTemplate, + EnableRedis: true, + ModifyEngineExecutionConfiguration: func(engineExecutionConfiguration *config.EngineExecutionConfiguration) { + engineExecutionConfiguration.EnableNetPoll = false + engineExecutionConfiguration.WebSocketClientReadTimeout = time.Millisecond * 100 + }, + }, func(t *testing.T, xEnv *testenv.Environment) { + + var subscriptionOne struct { + employeeUpdates struct { + ID float64 `graphql:"id"` + Details struct { + Forename string `graphql:"forename"` + Surname string `graphql:"surname"` + } `graphql:"details"` + } `graphql:"employeeUpdates"` + } + + surl := xEnv.GraphQLWebSocketSubscriptionURL() + client := graphql.NewSubscriptionClient(surl) + t.Cleanup(func() { + _ = client.Close() + }) + + var counter atomic.Uint32 + + subscriptionOneID, err := client.Subscribe(&subscriptionOne, nil, func(dataValue []byte, errValue error) error { + defer counter.Add(1) + require.NoError(t, errValue) + require.JSONEq(t, `{"employeeUpdates":{"id":1,"details":{"forename":"Jens","surname":"Neuse"}}}`, string(dataValue)) + return nil + }) + require.NoError(t, err) + require.NotEmpty(t, subscriptionOneID) + + go func() { + clientErr := client.Run() + require.NoError(t, clientErr) + }() + + go func() { + require.Eventually(t, func() bool { + return counter.Load() == 1 + }, RedisWaitTimeout, time.Millisecond*100) + _ = client.Close() + }() + + xEnv.WaitForSubscriptionCount(1, RedisWaitTimeout) + + produceRedisMessage(t, xEnv, topics[0], `{"__typename":"Employee","id": 1,"update":{"name":"foo"}}`) + + xEnv.WaitForMessagesSent(1, RedisWaitTimeout) + xEnv.WaitForSubscriptionCount(0, RedisWaitTimeout) + xEnv.WaitForConnectionCount(0, RedisWaitTimeout) + }) + }) + + t.Run("multipart", func(t *testing.T) { + t.Parallel() + + multipartHeartbeatInterval := time.Second * 5 + + t.Run("subscribe sync", func(t *testing.T) { + t.Parallel() + + topics := []string{"employeeUpdatedMyRedis"} + + testenv.Run(t, &testenv.Config{ + RouterConfigJSONTemplate: testenv.ConfigWithEdfsRedisJSONTemplate, + EnableRedis: true, + RouterOptions: []core.Option{ + core.WithMultipartHeartbeatInterval(multipartHeartbeatInterval), + }, + }, func(t *testing.T, xEnv *testenv.Environment) { + + subscribePayload := []byte(`{"query":"subscription { employeeUpdates { id details { forename surname } }}"}`) + + var started atomic.Bool + var consumed atomic.Uint32 + var produced atomic.Uint32 + + go func() { + client := http.Client{ + Timeout: time.Second * 100, + } + req := xEnv.MakeGraphQLMultipartRequest(http.MethodPost, bytes.NewReader(subscribePayload)) + resp, gErr := client.Do(req) + require.NoError(t, gErr) + require.Equal(t, http.StatusOK, resp.StatusCode) + defer resp.Body.Close() + reader := bufio.NewReader(resp.Body) + started.Store(true) + + assert.Eventually(t, func() bool { + return produced.Load() == 1 + }, RedisWaitTimeout, time.Millisecond*100) + assertMultipartValueEventually(t, reader, "{\"payload\":{\"data\":{\"employeeUpdates\":{\"id\":1,\"details\":{\"forename\":\"Jens\",\"surname\":\"Neuse\"}}}}}") + consumed.Add(1) + + assert.Eventually(t, func() bool { + return produced.Load() == 2 + }, RedisWaitTimeout, time.Millisecond*100) + assertMultipartValueEventually(t, reader, "{\"payload\":{\"data\":{\"employeeUpdates\":{\"id\":1,\"details\":{\"forename\":\"Jens\",\"surname\":\"Neuse\"}}}}}") + consumed.Add(1) + }() + + xEnv.WaitForSubscriptionCount(1, RedisWaitTimeout) + + assert.Eventually(t, started.Load, RedisWaitTimeout, time.Millisecond*100) + produceRedisMessage(t, xEnv, topics[0], `{"__typename":"Employee","id": 1,"update":{"name":"foo"}}`) + produced.Add(1) + + assert.Eventually(t, func() bool { + return consumed.Load() == 1 + }, RedisWaitTimeout, time.Millisecond*100) + produceRedisMessage(t, xEnv, topics[0], `{"__typename":"Employee","id": 1,"update":{"name":"foo"}}`) + produced.Add(1) + + // Wait for the client to finish + require.Eventually(t, func() bool { return consumed.Load() == 2 }, RedisWaitTimeout*2, time.Millisecond*100) + + xEnv.WaitForSubscriptionCount(0, RedisWaitTimeout) + xEnv.WaitForConnectionCount(0, RedisWaitTimeout) + }) + }) + + t.Run("Should block subscribe sync operation", func(t *testing.T) { + t.Parallel() + + subscribePayload := []byte(`{"query":"subscription { employeeUpdates { id details { forename surname } }}"}`) + + testenv.Run(t, &testenv.Config{ + RouterConfigJSONTemplate: testenv.ConfigWithEdfsRedisJSONTemplate, + EnableRedis: true, + ModifySecurityConfiguration: func(securityConfiguration *config.SecurityConfiguration) { + securityConfiguration.BlockSubscriptions = config.BlockOperationConfiguration{ + Enabled: true, + } + }, + }, func(t *testing.T, xEnv *testenv.Environment) { + client := http.Client{ + Timeout: time.Second * 100, + } + req := xEnv.MakeGraphQLMultipartRequest(http.MethodPost, bytes.NewReader(subscribePayload)) + resp, err := client.Do(req) + require.NoError(t, err) + require.Equal(t, http.StatusOK, resp.StatusCode) + + defer resp.Body.Close() + reader := bufio.NewReader(resp.Body) + + assertMultipartValueEventually(t, reader, "{\"payload\":{\"errors\":[{\"message\":\"operation type 'subscription' is blocked\"}]}}") + + xEnv.WaitForSubscriptionCount(0, RedisWaitTimeout) + xEnv.WaitForConnectionCount(0, RedisWaitTimeout) + }) + }) + }) + + t.Run("subscribe sync sse legacy method works", func(t *testing.T) { + t.Parallel() + + topics := []string{"employeeUpdatedMyRedis"} + + testenv.Run(t, &testenv.Config{ + RouterConfigJSONTemplate: testenv.ConfigWithEdfsRedisJSONTemplate, + EnableRedis: true, + }, func(t *testing.T, xEnv *testenv.Environment) { + + subscribePayload := []byte(`{"query":"subscription { employeeUpdates { id details { forename surname } }}"}`) + + var counter atomic.Uint32 + + go func() { + defer counter.Add(1) + + client := http.Client{ + Timeout: time.Second * 10, + } + req, gErr := http.NewRequest(http.MethodPost, xEnv.GraphQLRequestURL(), bytes.NewReader(subscribePayload)) + require.NoError(t, gErr) + + req.Header.Set("Content-Type", "application/json") + req.Header.Set("Accept", "text/event-stream") + req.Header.Set("Connection", "keep-alive") + req.Header.Set("Cache-Control", "no-cache") + + resp, gErr := client.Do(req) + require.NoError(t, gErr) + require.Equal(t, http.StatusOK, resp.StatusCode) + defer resp.Body.Close() + reader := bufio.NewReader(resp.Body) + + eventNext, _, gErr := reader.ReadLine() + require.NoError(t, gErr) + require.Equal(t, "event: next", string(eventNext)) + data, _, gErr := reader.ReadLine() + require.NoError(t, gErr) + require.Equal(t, "data: {\"data\":{\"employeeUpdates\":{\"id\":1,\"details\":{\"forename\":\"Jens\",\"surname\":\"Neuse\"}}}}", string(data)) + line, _, gErr := reader.ReadLine() + require.NoError(t, gErr) + require.Equal(t, "", string(line)) + }() + + xEnv.WaitForSubscriptionCount(1, RedisWaitTimeout) + + produceRedisMessage(t, xEnv, topics[0], `{"__typename":"Employee","id": 1,"update":{"name":"foo"}}`) + + require.Eventually(t, func() bool { + return counter.Load() == 1 + }, RedisWaitTimeout, time.Millisecond*100) + + xEnv.WaitForSubscriptionCount(0, RedisWaitTimeout) + xEnv.WaitForConnectionCount(0, RedisWaitTimeout) + }) + }) + + t.Run("subscribe sync sse", func(t *testing.T) { + t.Parallel() + + topics := []string{"employeeUpdatedMyRedis"} + + testenv.Run(t, &testenv.Config{ + RouterConfigJSONTemplate: testenv.ConfigWithEdfsRedisJSONTemplate, + EnableRedis: true, + }, func(t *testing.T, xEnv *testenv.Environment) { + + subscribePayload := []byte(`{"query":"subscription { employeeUpdates { id details { forename surname } }}"}`) + + var counter atomic.Uint32 + + go func() { + defer counter.Add(1) + + client := http.Client{ + Timeout: time.Second * 10, + } + req, gErr := http.NewRequest(http.MethodPost, xEnv.GraphQLRequestURL(), bytes.NewReader(subscribePayload)) + require.NoError(t, gErr) + + req.Header.Set("Content-Type", "application/json") + req.Header.Set("Accept", "text/event-stream") + req.Header.Set("Connection", "keep-alive") + req.Header.Set("Cache-Control", "no-cache") + + resp, gErr := client.Do(req) + require.NoError(t, gErr) + require.Equal(t, http.StatusOK, resp.StatusCode) + defer resp.Body.Close() + reader := bufio.NewReader(resp.Body) + + eventNext, _, gErr := reader.ReadLine() + require.NoError(t, gErr) + require.Equal(t, "event: next", string(eventNext)) + data, _, gErr := reader.ReadLine() + require.NoError(t, gErr) + require.Equal(t, "data: {\"data\":{\"employeeUpdates\":{\"id\":1,\"details\":{\"forename\":\"Jens\",\"surname\":\"Neuse\"}}}}", string(data)) + line, _, gErr := reader.ReadLine() + require.NoError(t, gErr) + require.Equal(t, "", string(line)) + }() + + xEnv.WaitForSubscriptionCount(1, RedisWaitTimeout) + + produceRedisMessage(t, xEnv, topics[0], `{"__typename":"Employee","id": 1,"update":{"name":"foo"}}`) + + require.Eventually(t, func() bool { + return counter.Load() == 1 + }, RedisWaitTimeout, time.Millisecond*100) + + xEnv.WaitForSubscriptionCount(0, RedisWaitTimeout) + xEnv.WaitForConnectionCount(0, RedisWaitTimeout) + }) + }) + + t.Run("should block subscribe sync sse operation", func(t *testing.T) { + t.Parallel() + + subscribePayload := []byte(`{"query":"subscription { employeeUpdates { id details { forename surname } }}"}`) + + testenv.Run(t, &testenv.Config{ + RouterConfigJSONTemplate: testenv.ConfigWithEdfsRedisJSONTemplate, + EnableRedis: true, + ModifySecurityConfiguration: func(securityConfiguration *config.SecurityConfiguration) { + securityConfiguration.BlockSubscriptions = config.BlockOperationConfiguration{ + Enabled: true, + } + }, + }, func(t *testing.T, xEnv *testenv.Environment) { + client := http.Client{ + Timeout: time.Second * 10, + } + req, err := http.NewRequest(http.MethodPost, xEnv.GraphQLRequestURL(), bytes.NewReader(subscribePayload)) + require.NoError(t, err) + + req.Header.Set("Content-Type", "application/json") + req.Header.Set("Accept", "text/event-stream") + req.Header.Set("Connection", "keep-alive") + req.Header.Set("Cache-Control", "no-cache") + + resp, err := client.Do(req) + require.NoError(t, err) + require.Equal(t, http.StatusOK, resp.StatusCode) + + defer resp.Body.Close() + reader := bufio.NewReader(resp.Body) + + eventNext, _, err := reader.ReadLine() + require.NoError(t, err) + require.Equal(t, "event: next", string(eventNext)) + data, _, err := reader.ReadLine() + require.NoError(t, err) + require.Equal(t, "data: {\"errors\":[{\"message\":\"operation type 'subscription' is blocked\"}]}", string(data)) + + xEnv.WaitForSubscriptionCount(0, RedisWaitTimeout) + xEnv.WaitForConnectionCount(0, RedisWaitTimeout) + }) + }) + + t.Run("subscribe async with filter", func(t *testing.T) { + t.Parallel() + + // topics := []string{"employeeUpdatedMyRedis"} + + // testenv.Run(t, &testenv.Config{ + // RouterConfigJSONTemplate: testenv.ConfigWithEdfsRedisJSONTemplate, + // EnableRedis: true, + // }, func(t *testing.T, xEnv *testenv.Environment) { + + // type subscriptionPayload struct { + // Data struct { + // FilteredEmployeeUpdatedMyRedis struct { + // ID float64 `graphql:"id"` + // Details struct { + // Forename string `graphql:"forename"` + // Surname string `graphql:"surname"` + // } `graphql:"details"` + // } `graphql:"filteredEmployeeUpdatedMyRedis(employeeID: 1)"` + // } `json:"data"` + // } + + // // conn.Close() is called in a cleanup defined in the function + // conn := xEnv.InitGraphQLWebSocketConnection(nil, nil, nil) + // err := conn.WriteJSON(&testenv.WebSocketMessage{ + // ID: "1", + // Type: "subscribe", + // Payload: []byte(`{"query":"subscription { filteredEmployeeUpdatedMyRedis(employeeID: 1) { id details { forename, surname } } }"}`), + // }) + + // require.NoError(t, err) + // var msg testenv.WebSocketMessage + // var payload subscriptionPayload + + // xEnv.WaitForSubscriptionCount(1, RedisWaitTimeout) + + // var produced atomic.Uint32 + // var consumed atomic.Uint32 + // const MsgCount = uint32(12) + + // go func() { + // consumed.Add(1) // the first message is ignored + + // require.Eventually(t, func() bool { + // return produced.Load() == MsgCount-11 + // }, RedisWaitTimeout, time.Millisecond*100) + // gErr := conn.ReadJSON(&msg) + // require.NoError(t, gErr) + // require.Equal(t, "1", msg.ID) + // require.Equal(t, "next", msg.Type) + // gErr = json.Unmarshal(msg.Payload, &payload) + // require.NoError(t, gErr) + // require.Equal(t, float64(11), payload.Data.FilteredEmployeeUpdatedMyRedis.ID) + // require.Equal(t, "Alexandra", payload.Data.FilteredEmployeeUpdatedMyRedis.Details.Forename) + // require.Equal(t, "Neuse", payload.Data.FilteredEmployeeUpdatedMyRedis.Details.Surname) + // consumed.Add(4) // should arrive to 5th message, with id 7 + + // require.Eventually(t, func() bool { + // return produced.Load() == MsgCount-7 + // }, RedisWaitTimeout, time.Millisecond*100) + // gErr = conn.ReadJSON(&msg) + // require.NoError(t, gErr) + // require.Equal(t, "1", msg.ID) + // require.Equal(t, "next", msg.Type) + // gErr = json.Unmarshal(msg.Payload, &payload) + // require.NoError(t, gErr) + // require.Equal(t, float64(7), payload.Data.FilteredEmployeeUpdatedMyRedis.ID) + // require.Equal(t, "Suvij", payload.Data.FilteredEmployeeUpdatedMyRedis.Details.Forename) + // require.Equal(t, "Surya", payload.Data.FilteredEmployeeUpdatedMyRedis.Details.Surname) + // consumed.Add(3) // should arrive to 8th message, with id 4 + + // require.Eventually(t, func() bool { + // return produced.Load() == MsgCount-4 + // }, RedisWaitTimeout, time.Millisecond*100) + // gErr = conn.ReadJSON(&msg) + // require.NoError(t, gErr) + // require.Equal(t, "1", msg.ID) + // require.Equal(t, "next", msg.Type) + // gErr = json.Unmarshal(msg.Payload, &payload) + // require.NoError(t, gErr) + // require.Equal(t, float64(4), payload.Data.FilteredEmployeeUpdatedMyRedis.ID) + // require.Equal(t, "Björn", payload.Data.FilteredEmployeeUpdatedMyRedis.Details.Forename) + // require.Equal(t, "Schwenzer", payload.Data.FilteredEmployeeUpdatedMyRedis.Details.Surname) + // consumed.Add(1) + + // require.Eventually(t, func() bool { + // return produced.Load() == MsgCount-3 + // }, RedisWaitTimeout, time.Millisecond*100) + // gErr = conn.ReadJSON(&msg) + // require.NoError(t, gErr) + // require.Equal(t, "1", msg.ID) + // require.Equal(t, "next", msg.Type) + // gErr = json.Unmarshal(msg.Payload, &payload) + // require.NoError(t, gErr) + // require.Equal(t, float64(3), payload.Data.FilteredEmployeeUpdatedMyRedis.ID) + // require.Equal(t, "Stefan", payload.Data.FilteredEmployeeUpdatedMyRedis.Details.Forename) + // require.Equal(t, "Avram", payload.Data.FilteredEmployeeUpdatedMyRedis.Details.Surname) + // consumed.Add(2) // should arrive to 10th message, with id 2 + + // require.Eventually(t, func() bool { + // return produced.Load() == MsgCount-1 + // }, RedisWaitTimeout, time.Millisecond*100) + // gErr = conn.ReadJSON(&msg) + // require.NoError(t, gErr) + // require.Equal(t, "1", msg.ID) + // require.Equal(t, "next", msg.Type) + // gErr = json.Unmarshal(msg.Payload, &payload) + // require.NoError(t, gErr) + // require.Equal(t, float64(1), payload.Data.FilteredEmployeeUpdatedMyRedis.ID) + // require.Equal(t, "Jens", payload.Data.FilteredEmployeeUpdatedMyRedis.Details.Forename) + // require.Equal(t, "Neuse", payload.Data.FilteredEmployeeUpdatedMyRedis.Details.Surname) + // consumed.Add(1) + // }() + + // // Events 1, 3, 4, 7, and 11 should be included + // for i := MsgCount; i > 0; i-- { + // require.Eventually(t, func() bool { + // return consumed.Load() >= MsgCount-i + // }, RedisWaitTimeout, time.Millisecond*100) + // produceRedisMessage(t, xEnv, topics[0], fmt.Sprintf(`{"__typename":"Employee","id":%d}`, i)) + // produced.Add(1) + // } + + // require.Eventually(t, func() bool { + // return consumed.Load() == MsgCount && produced.Load() == MsgCount + // }, RedisWaitTimeout, time.Millisecond*100) + // }) + }) + + t.Run("message with invalid JSON should give a specific error", func(t *testing.T) { + t.Parallel() + + topics := []string{"employeeUpdatedMyRedis"} + + testenv.Run(t, &testenv.Config{ + RouterConfigJSONTemplate: testenv.ConfigWithEdfsRedisJSONTemplate, + EnableRedis: true, + }, func(t *testing.T, xEnv *testenv.Environment) { + + var subscriptionOne struct { + employeeUpdates struct { + ID float64 `graphql:"id"` + Details struct { + Forename string `graphql:"forename"` + Surname string `graphql:"surname"` + } `graphql:"details"` + } `graphql:"employeeUpdates"` + } + + surl := xEnv.GraphQLWebSocketSubscriptionURL() + client := graphql.NewSubscriptionClient(surl) + t.Cleanup(func() { + _ = client.Close() + }) + + var counter atomic.Uint32 + + subscriptionOneID, err := client.Subscribe(&subscriptionOne, nil, func(dataValue []byte, errValue error) error { + oldCount := counter.Load() + counter.Add(1) + + if oldCount == 0 { + var gqlErr graphql.Errors + require.ErrorAs(t, errValue, &gqlErr) + require.Equal(t, "Invalid message received", gqlErr[0].Message) + } else if oldCount == 1 || oldCount == 3 { + require.NoError(t, errValue) + require.JSONEq(t, `{"employeeUpdates":{"id":1,"details":{"forename":"Jens","surname":"Neuse"}}}`, string(dataValue)) + } else if oldCount == 2 { + var gqlErr graphql.Errors + require.ErrorAs(t, errValue, &gqlErr) + require.Equal(t, "Cannot return null for non-nullable field 'Subscription.employeeUpdates.id'.", gqlErr[0].Message) + } + + return nil + }) + require.NoError(t, err) + require.NotEmpty(t, subscriptionOneID) + + go func() { + clientErr := client.Run() + require.NoError(t, clientErr) + }() + + xEnv.WaitForSubscriptionCount(1, RedisWaitTimeout) + + produceRedisMessage(t, xEnv, topics[0], `{asas`) // Invalid message + require.Eventually(t, func() bool { + return counter.Load() == 1 + }, RedisWaitTimeout, time.Millisecond*100) + produceRedisMessage(t, xEnv, topics[0], `{"__typename":"Employee","id":1}`) // Correct message + require.Eventually(t, func() bool { + return counter.Load() == 2 + }, RedisWaitTimeout, time.Millisecond*100) + produceRedisMessage(t, xEnv, topics[0], `{"__typename":"Employee","update":{"name":"foo"}}`) // Missing entity = Resolver error + require.Eventually(t, func() bool { + return counter.Load() == 3 + }, RedisWaitTimeout, time.Millisecond*100) + produceRedisMessage(t, xEnv, topics[0], `{"__typename":"Employee","id": 1,"update":{"name":"foo"}}`) // Correct message + require.Eventually(t, func() bool { + return counter.Load() == 4 + }, RedisWaitTimeout, time.Millisecond*100) + + require.NoError(t, client.Close()) + + xEnv.WaitForSubscriptionCount(0, RedisWaitTimeout) + xEnv.WaitForConnectionCount(0, RedisWaitTimeout) + }) + }) + + t.Run("mutate", func(t *testing.T) { + t.Parallel() + + channels := []string{"employeeUpdatedMyRedis"} + + testenv.Run(t, &testenv.Config{ + RouterConfigJSONTemplate: testenv.ConfigWithEdfsRedisJSONTemplate, + EnableRedis: true, + }, func(t *testing.T, xEnv *testenv.Environment) { + var msgCh <-chan *redis.Message + var started atomic.Bool + go func() { + var err error + msgCh, err = readRedisMessages(t, xEnv, channels[0]) + started.Store(true) + require.NoError(t, err) + }() + require.Eventually(t, started.Load, RedisWaitTimeout, time.Millisecond*100) + // Send a mutation to trigger the first subscription + resOne := xEnv.MakeGraphQLRequestOK(testenv.GraphQLRequest{ + Query: `mutation { updateEmployeeMyRedis(id: 3, update: {name: "name test"}) { success } }`, + }) + require.JSONEq(t, `{"data":{"updateEmployeeMyRedis":{"success":true}}}`, resOne.Body) + m := <-msgCh + require.Equal(t, `{"id":3,"update":{"name":"name test"}}`, m.Payload) + }) + }) +} + +func produceRedisMessage(t *testing.T, xEnv *testenv.Environment, topicName string, message string) { + ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) + defer cancel() + + parsedURL, err := url.Parse(xEnv.RedisHosts[0]) + if err != nil { + t.Fatalf("Failed to parse Redis URL: %v", err) + } + redisConn := redis.NewClient(&redis.Options{ + Addr: parsedURL.Host, + }) + intCmd := redisConn.Publish(ctx, xEnv.GetPubSubName(topicName), message) + require.NoError(t, intCmd.Err()) +} + +func readRedisMessages(t *testing.T, xEnv *testenv.Environment, channelName string) (<-chan *redis.Message, error) { + ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) + defer cancel() + + parsedURL, err := url.Parse(xEnv.RedisHosts[0]) + if err != nil { + return nil, err + } + redisConn := redis.NewClient(&redis.Options{ + Addr: parsedURL.Host, + }) + sub := redisConn.Subscribe(ctx, xEnv.GetPubSubName(channelName)) + t.Cleanup(func() { + sub.Close() + redisConn.Close() + }) + + return sub.Channel(), nil +} diff --git a/router-tests/testenv/pubsub.go b/router-tests/testenv/pubsub.go index 4011c231d4..94ae29f479 100644 --- a/router-tests/testenv/pubsub.go +++ b/router-tests/testenv/pubsub.go @@ -77,6 +77,13 @@ func addPubSubPrefixToEngineConfiguration(engineConfig *nodev1.EngineConfigurati } customEvents.Kafka[kafkaConfig].Topics = prefixedTopics } + for redisConfig := range customEvents.Redis { + var prefixedChannels []string + for _, channel := range customEvents.Redis[redisConfig].Channels { + prefixedChannels = append(prefixedChannels, getPubSubName(channel)) + } + customEvents.Redis[redisConfig].Channels = prefixedChannels + } } } } diff --git a/router-tests/testenv/testdata/configWithEdfsRedis.json b/router-tests/testenv/testdata/configWithEdfsRedis.json new file mode 100644 index 0000000000..20d8668efe --- /dev/null +++ b/router-tests/testenv/testdata/configWithEdfsRedis.json @@ -0,0 +1,5089 @@ +{ + "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 + }, + "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 + }, + "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 + }, + "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" + ] + }, + { + "typeName": "Mutation", + "fieldNames": [ + "addFact" + ] + }, + { + "typeName": "Employee", + "fieldNames": [ + "id", + "products", + "notes" + ] + }, + { + "typeName": "Consultancy", + "fieldNames": [ + "upc", + "name" + ] + }, + { + "typeName": "Cosmo", + "fieldNames": [ + "upc", + "name", + "repositoryURL" + ] + } + ], + "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 + }, + "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}\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" + }, + "upstreamSchema": { + "key": "c8cc058566134270eaf1cf6638137eec5a7de07e" + } + }, + "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 + }, + "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 + }, + "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 + }, + "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 + }, + "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": "GRAPHQL", + "rootNodes": [ + { + "typeName": "Mutation", + "fieldNames": [ + "updateEmployeeMyRedis", + "updateEmployeeMyRedisOnCustomChannel" + ] + }, + { + "typeName": "Subscription", + "fieldNames": [ + "employeeUpdatedMyRedis", + "employeeUpdates", + "filteredEmployeeUpdatedMyRedis" + ] + }, + { + "typeName": "Employee", + "externalFieldNames": [ + "id" + ] + } + ], + "childNodes": [ + { + "typeName": "edfs__PublishResult", + "fieldNames": [ + "success" + ] + } + ], + "overrideFieldPathFromAlias": true, + "customGraphql": { + "fetch": { + "url": {}, + "method": "POST", + "body": {}, + "baseUrl": {}, + "path": {} + }, + "subscription": { + "enabled": true + }, + "federation": { + "enabled": true, + "serviceSdl": "directive @edfs__natsRequest(subject: String!, providerId: String! = \"default\") on FIELD_DEFINITION\ndirective @edfs__natsPublish(subject: String!, providerId: String! = \"default\") on FIELD_DEFINITION\ndirective @edfs__natsSubscribe(subjects: [String!]!, providerId: String! = \"default\", streamConfiguration: edfs__NatsStreamConfiguration) on FIELD_DEFINITION\ndirective @openfed__subscriptionFilter(condition: openfed__SubscriptionFilterCondition!) on FIELD_DEFINITION\ndirective @edfs__kafkaPublish(topic: String!, providerId: String! = \"default\") on FIELD_DEFINITION\ndirective @edfs__kafkaSubscribe(topics: [String!]!, providerId: String! = \"default\") on FIELD_DEFINITION\ndirective @edfs__redisPublish(channel: String!, providerId: String! = \"default\") on FIELD_DEFINITION\ndirective @edfs__redisSubscribe(channels: [String!]!, providerId: String! = \"default\") on FIELD_DEFINITION\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\ntype Mutation {\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 Subscription {\n employeeUpdatedMyRedis(id: Int!): Employee! @edfs__redisSubscribe(channels: [\"employeeUpdatedMyRedis.{{ args.id }}\"], providerId: \"my-redis\")\n employeeUpdates: Employee! @edfs__redisSubscribe(channels: [\"employeeUpdatedMyRedis\"], providerId: \"my-redis\")\n filteredEmployeeUpdatedMyRedis(id: ID!): Employee!\n @edfs__redisSubscribe(channels: [\"employeeUpdatedMyRedis\"], providerId: \"my-redis\")\n @openfed__subscriptionFilter(condition: { IN: { fieldPath: \"id\", values: [1, 3, 4, 7, 11] } })\n}\n\ninput KafkaInput {\n ids: [Int!]!\n}\n\ntype Employee @key(fields: \"id\", resolvable: false) {\n id: Int! @external\n}\n\ntype edfs__PublishResult {\n success: Boolean!\n}\n\ninput edfs__NatsStreamConfiguration {\n consumerInactiveThreshold: Int! = 30\n consumerName: String!\n streamName: String!\n}\n" + }, + "upstreamSchema": { + "key": "838b649dcdb3e590186dfdf38cb1352512a148b5" + } + }, + "requestTimeoutSeconds": "10", + "id": "8", + "keys": [ + { + "typeName": "Employee", + "selectionSet": "id", + "disableEntityResolver": true + } + ] + } + ], + "fieldConfigurations": [ + { + "typeName": "Subscription", + "fieldName": "filteredEmployeeUpdatedMyRedis", + "argumentsConfiguration": [ + { + "name": "id", + "sourceType": "FIELD_ARGUMENT" + } + ], + "subscriptionFilterCondition": { + "in": { + "fieldPath": [ + "id" + ], + "json": "[1,3,4,7,11]" + } + } + }, + { + "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": "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": "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": "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": "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 \"\"\"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}\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 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 employeeUpdatedMyRedis(id: Int!): Employee!\n employeeUpdates: Employee!\n filteredEmployeeUpdatedMyRedis(id: 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 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 edfs__NatsStreamConfiguration {\n consumerInactiveThreshold: Int! = 30\n consumerName: String!\n streamName: 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}\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", + "c8cc058566134270eaf1cf6638137eec5a7de07e": "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 productTypes: [Products!]!\n sharedThings(numOfA: Int!, numOfB: Int!): [Thing!]! @shareable\n topSecretFederationFacts: [TopSecretFact!]! @requiresScopes(scopes: [[\"read:fact\"], [\"read:all\"]])\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", + "838b649dcdb3e590186dfdf38cb1352512a148b5": "schema {\n mutation: Mutation\n subscription: Subscription\n}\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 @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 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 Subscription {\n employeeUpdatedMyRedis(id: Int!): Employee! @edfs__redisSubscribe(channels: [\"employeeUpdatedMyRedis.{{ args.id }}\"], providerId: \"my-redis\")\n employeeUpdates: Employee! @edfs__redisSubscribe(channels: [\"employeeUpdatedMyRedis\"], providerId: \"my-redis\")\n filteredEmployeeUpdatedMyRedis(id: ID!): Employee! @edfs__redisSubscribe(channels: [\"employeeUpdatedMyRedis\"], providerId: \"my-redis\") @openfed__subscriptionFilter(condition: {IN: {fieldPath: \"id\", values: [1, 3, 4, 7, 11]}})\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 sharedThings(numOfA: Int!, numOfB: Int!): [Thing!]!\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}\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 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 employeeUpdatedMyRedis(id: Int!): Employee!\n employeeUpdates: Employee!\n filteredEmployeeUpdatedMyRedis(id: 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 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 edfs__NatsStreamConfiguration {\n consumerInactiveThreshold: Int! = 30\n consumerName: String!\n streamName: 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}\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}" + }, + "version": "1bb625ad-e179-496d-be2c-b97a967382f1", + "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" + } + ], + "featureFlagConfigs": { + "configByFeatureFlagName": { + "myff": { + "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 + }, + "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 + }, + "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 + }, + "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 + }, + "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 + }, + "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 + }, + "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 + }, + "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 + }, + "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": "GRAPHQL", + "rootNodes": [ + { + "typeName": "Mutation", + "fieldNames": [ + "updateEmployeeMyRedis", + "updateEmployeeMyRedisOnCustomChannel" + ] + }, + { + "typeName": "Subscription", + "fieldNames": [ + "employeeUpdatedMyRedis", + "employeeUpdates", + "filteredEmployeeUpdatedMyRedis" + ] + }, + { + "typeName": "Employee", + "externalFieldNames": [ + "id" + ] + } + ], + "childNodes": [ + { + "typeName": "edfs__PublishResult", + "fieldNames": [ + "success" + ] + } + ], + "overrideFieldPathFromAlias": true, + "customGraphql": { + "fetch": { + "url": {}, + "method": "POST", + "body": {}, + "baseUrl": {}, + "path": {} + }, + "subscription": { + "enabled": true + }, + "federation": { + "enabled": true, + "serviceSdl": "directive @edfs__natsRequest(subject: String!, providerId: String! = \"default\") on FIELD_DEFINITION\ndirective @edfs__natsPublish(subject: String!, providerId: String! = \"default\") on FIELD_DEFINITION\ndirective @edfs__natsSubscribe(subjects: [String!]!, providerId: String! = \"default\", streamConfiguration: edfs__NatsStreamConfiguration) on FIELD_DEFINITION\ndirective @openfed__subscriptionFilter(condition: openfed__SubscriptionFilterCondition!) on FIELD_DEFINITION\ndirective @edfs__kafkaPublish(topic: String!, providerId: String! = \"default\") on FIELD_DEFINITION\ndirective @edfs__kafkaSubscribe(topics: [String!]!, providerId: String! = \"default\") on FIELD_DEFINITION\ndirective @edfs__redisPublish(channel: String!, providerId: String! = \"default\") on FIELD_DEFINITION\ndirective @edfs__redisSubscribe(channels: [String!]!, providerId: String! = \"default\") on FIELD_DEFINITION\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\ntype Mutation {\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 Subscription {\n employeeUpdatedMyRedis(id: Int!): Employee! @edfs__redisSubscribe(channels: [\"employeeUpdatedMyRedis.{{ args.id }}\"], providerId: \"my-redis\")\n employeeUpdates: Employee! @edfs__redisSubscribe(channels: [\"employeeUpdatedMyRedis\"], providerId: \"my-redis\")\n filteredEmployeeUpdatedMyRedis(id: ID!): Employee!\n @edfs__redisSubscribe(channels: [\"employeeUpdatedMyRedis\"], providerId: \"my-redis\")\n @openfed__subscriptionFilter(condition: { IN: { fieldPath: \"id\", values: [1, 3, 4, 7, 11] } })\n}\n\ninput KafkaInput {\n ids: [Int!]!\n}\n\ntype Employee @key(fields: \"id\", resolvable: false) {\n id: Int! @external\n}\n\ntype edfs__PublishResult {\n success: Boolean!\n}\n\ninput edfs__NatsStreamConfiguration {\n consumerInactiveThreshold: Int! = 30\n consumerName: String!\n streamName: String!\n}\n" + }, + "upstreamSchema": { + "key": "838b649dcdb3e590186dfdf38cb1352512a148b5" + } + }, + "requestTimeoutSeconds": "10", + "id": "8", + "keys": [ + { + "typeName": "Employee", + "selectionSet": "id", + "disableEntityResolver": true + } + ] + } + ], + "fieldConfigurations": [ + { + "typeName": "Subscription", + "fieldName": "filteredEmployeeUpdatedMyRedis", + "argumentsConfiguration": [ + { + "name": "id", + "sourceType": "FIELD_ARGUMENT" + } + ], + "subscriptionFilterCondition": { + "in": { + "fieldPath": [ + "id" + ], + "json": "[1,3,4,7,11]" + } + } + }, + { + "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": "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": "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": "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}\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 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 employeeUpdatedMyRedis(id: Int!): Employee!\n employeeUpdates: Employee!\n filteredEmployeeUpdatedMyRedis(id: 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\ninput edfs__NatsStreamConfiguration {\n consumerInactiveThreshold: Int! = 30\n consumerName: String!\n streamName: 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 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", + "838b649dcdb3e590186dfdf38cb1352512a148b5": "schema {\n mutation: Mutation\n subscription: Subscription\n}\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 @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 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 Subscription {\n employeeUpdatedMyRedis(id: Int!): Employee! @edfs__redisSubscribe(channels: [\"employeeUpdatedMyRedis.{{ args.id }}\"], providerId: \"my-redis\")\n employeeUpdates: Employee! @edfs__redisSubscribe(channels: [\"employeeUpdatedMyRedis\"], providerId: \"my-redis\")\n filteredEmployeeUpdatedMyRedis(id: ID!): Employee! @edfs__redisSubscribe(channels: [\"employeeUpdatedMyRedis\"], providerId: \"my-redis\") @openfed__subscriptionFilter(condition: {IN: {fieldPath: \"id\", values: [1, 3, 4, 7, 11]}})\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}\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 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 employeeUpdatedMyRedis(id: Int!): Employee!\n employeeUpdates: Employee!\n filteredEmployeeUpdatedMyRedis(id: 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\ninput edfs__NatsStreamConfiguration {\n consumerInactiveThreshold: Int! = 30\n consumerName: String!\n streamName: 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 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}" + }, + "version": "bffd6e26-ef4d-44d7-b32a-dbfb25525eda", + "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" + } + ] + } + } + }, + "compatibilityVersion": "1:{{$COMPOSITION__VERSION}}" +} diff --git a/router-tests/testenv/testenv.go b/router-tests/testenv/testenv.go index 22ef283ccd..e20f5feb26 100644 --- a/router-tests/testenv/testenv.go +++ b/router-tests/testenv/testenv.go @@ -69,6 +69,7 @@ const ( natsDefaultSourceName = "default" myNatsProviderID = "my-nats" myKafkaProviderID = "my-kafka" + myRedisProviderID = "my-redis" ) var ( @@ -80,8 +81,11 @@ var ( ConfigWithEdfsKafkaJSONTemplate string //go:embed testdata/configWithEdfsNats.json ConfigWithEdfsNatsJSONTemplate string - DemoNatsProviders = []string{natsDefaultSourceName, myNatsProviderID} - DemoKafkaProviders = []string{myKafkaProviderID} + //go:embed testdata/configWithEdfsRedis.json + ConfigWithEdfsRedisJSONTemplate string + DemoNatsProviders = []string{natsDefaultSourceName, myNatsProviderID} + DemoKafkaProviders = []string{myKafkaProviderID} + DemoRedisProviders = []string{myRedisProviderID} ) func init() { @@ -312,6 +316,7 @@ type Config struct { UseVersionedGraph bool NoShutdownTestServer bool MCP config.MCPConfiguration + EnableRedis bool } type CacheMetricsAssertions struct { @@ -362,6 +367,8 @@ type MCPConfig struct { Port int } +var redisHost = "redis://localhost:6379" + func CreateTestEnv(t testing.TB, cfg *Config) (*Environment, error) { t.Helper() @@ -394,6 +401,11 @@ func CreateTestEnv(t testing.TB, cfg *Config) (*Environment, error) { natsSetup = s } + var enableRedis bool + if cfg.EnableRedis { + enableRedis = true + } + if cfg.AssertCacheMetrics != nil { if cfg.MetricReader == nil { cfg.MetricReader = metric.NewManualReader() @@ -730,6 +742,10 @@ func CreateTestEnv(t testing.TB, cfg *Config) (*Environment, error) { e.NatsConnectionMyNats = natsSetup.Connections[1] } + if enableRedis { + e.RedisHosts = []string{redisHost} + } + if routerConfig.FeatureFlagConfigs != nil { myFF, ok := routerConfig.FeatureFlagConfigs.ConfigByFeatureFlagName["myff"] if ok { @@ -850,6 +866,7 @@ func configureRouter(listenerAddr string, testConfig *Config, routerConfig *node natsEventSources := make([]config.NatsEventSource, len(DemoNatsProviders)) kafkaEventSources := make([]config.KafkaEventSource, len(DemoKafkaProviders)) + redisEventSources := make([]config.RedisEventSource, len(DemoRedisProviders)) if natsData != nil { for _, sourceName := range DemoNatsProviders { @@ -865,11 +882,20 @@ func configureRouter(listenerAddr string, testConfig *Config, routerConfig *node Brokers: testConfig.KafkaSeeds, }) } + if testConfig.EnableRedis { + for _, sourceName := range DemoRedisProviders { + redisEventSources = append(redisEventSources, config.RedisEventSource{ + ID: sourceName, + URLs: []string{redisHost}, + }) + } + } eventsConfiguration := config.EventsConfiguration{ Providers: config.EventProviders{ Nats: natsEventSources, Kafka: kafkaEventSources, + Redis: redisEventSources, }, } if testConfig.ModifyEventsConfiguration != nil { @@ -1188,6 +1214,7 @@ type Environment struct { logObserver *observer.ObservedLogs getPubSubName func(name string) string MCPClient *mcpclient.Client + RedisHosts []string shutdownDelay time.Duration extraURLQueryValues url.Values diff --git a/router/gen/proto/wg/cosmo/node/v1/node.pb.go b/router/gen/proto/wg/cosmo/node/v1/node.pb.go index 984e70cdec..632b10d582 100644 --- a/router/gen/proto/wg/cosmo/node/v1/node.pb.go +++ b/router/gen/proto/wg/cosmo/node/v1/node.pb.go @@ -2189,6 +2189,61 @@ func (x *KafkaEventConfiguration) GetTopics() []string { return nil } +type RedisEventConfiguration struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + EngineEventConfiguration *EngineEventConfiguration `protobuf:"bytes,1,opt,name=engine_event_configuration,json=engineEventConfiguration,proto3" json:"engine_event_configuration,omitempty"` + Channels []string `protobuf:"bytes,2,rep,name=channels,proto3" json:"channels,omitempty"` +} + +func (x *RedisEventConfiguration) Reset() { + *x = RedisEventConfiguration{} + if protoimpl.UnsafeEnabled { + mi := &file_wg_cosmo_node_v1_node_proto_msgTypes[28] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *RedisEventConfiguration) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RedisEventConfiguration) ProtoMessage() {} + +func (x *RedisEventConfiguration) ProtoReflect() protoreflect.Message { + mi := &file_wg_cosmo_node_v1_node_proto_msgTypes[28] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RedisEventConfiguration.ProtoReflect.Descriptor instead. +func (*RedisEventConfiguration) Descriptor() ([]byte, []int) { + return file_wg_cosmo_node_v1_node_proto_rawDescGZIP(), []int{28} +} + +func (x *RedisEventConfiguration) GetEngineEventConfiguration() *EngineEventConfiguration { + if x != nil { + return x.EngineEventConfiguration + } + return nil +} + +func (x *RedisEventConfiguration) GetChannels() []string { + if x != nil { + return x.Channels + } + return nil +} + type EngineEventConfiguration struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -2203,7 +2258,7 @@ type EngineEventConfiguration struct { func (x *EngineEventConfiguration) Reset() { *x = EngineEventConfiguration{} if protoimpl.UnsafeEnabled { - mi := &file_wg_cosmo_node_v1_node_proto_msgTypes[28] + mi := &file_wg_cosmo_node_v1_node_proto_msgTypes[29] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2216,7 +2271,7 @@ func (x *EngineEventConfiguration) String() string { func (*EngineEventConfiguration) ProtoMessage() {} func (x *EngineEventConfiguration) ProtoReflect() protoreflect.Message { - mi := &file_wg_cosmo_node_v1_node_proto_msgTypes[28] + mi := &file_wg_cosmo_node_v1_node_proto_msgTypes[29] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2229,7 +2284,7 @@ func (x *EngineEventConfiguration) ProtoReflect() protoreflect.Message { // Deprecated: Use EngineEventConfiguration.ProtoReflect.Descriptor instead. func (*EngineEventConfiguration) Descriptor() ([]byte, []int) { - return file_wg_cosmo_node_v1_node_proto_rawDescGZIP(), []int{28} + return file_wg_cosmo_node_v1_node_proto_rawDescGZIP(), []int{29} } func (x *EngineEventConfiguration) GetProviderId() string { @@ -2267,12 +2322,13 @@ type DataSourceCustomEvents struct { Nats []*NatsEventConfiguration `protobuf:"bytes,1,rep,name=nats,proto3" json:"nats,omitempty"` Kafka []*KafkaEventConfiguration `protobuf:"bytes,2,rep,name=kafka,proto3" json:"kafka,omitempty"` + Redis []*RedisEventConfiguration `protobuf:"bytes,3,rep,name=redis,proto3" json:"redis,omitempty"` } func (x *DataSourceCustomEvents) Reset() { *x = DataSourceCustomEvents{} if protoimpl.UnsafeEnabled { - mi := &file_wg_cosmo_node_v1_node_proto_msgTypes[29] + mi := &file_wg_cosmo_node_v1_node_proto_msgTypes[30] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2285,7 +2341,7 @@ func (x *DataSourceCustomEvents) String() string { func (*DataSourceCustomEvents) ProtoMessage() {} func (x *DataSourceCustomEvents) ProtoReflect() protoreflect.Message { - mi := &file_wg_cosmo_node_v1_node_proto_msgTypes[29] + mi := &file_wg_cosmo_node_v1_node_proto_msgTypes[30] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2298,7 +2354,7 @@ func (x *DataSourceCustomEvents) ProtoReflect() protoreflect.Message { // Deprecated: Use DataSourceCustomEvents.ProtoReflect.Descriptor instead. func (*DataSourceCustomEvents) Descriptor() ([]byte, []int) { - return file_wg_cosmo_node_v1_node_proto_rawDescGZIP(), []int{29} + return file_wg_cosmo_node_v1_node_proto_rawDescGZIP(), []int{30} } func (x *DataSourceCustomEvents) GetNats() []*NatsEventConfiguration { @@ -2315,6 +2371,13 @@ func (x *DataSourceCustomEvents) GetKafka() []*KafkaEventConfiguration { return nil } +func (x *DataSourceCustomEvents) GetRedis() []*RedisEventConfiguration { + if x != nil { + return x.Redis + } + return nil +} + type DataSourceCustom_Static struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -2326,7 +2389,7 @@ type DataSourceCustom_Static struct { func (x *DataSourceCustom_Static) Reset() { *x = DataSourceCustom_Static{} if protoimpl.UnsafeEnabled { - mi := &file_wg_cosmo_node_v1_node_proto_msgTypes[30] + mi := &file_wg_cosmo_node_v1_node_proto_msgTypes[31] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2339,7 +2402,7 @@ func (x *DataSourceCustom_Static) String() string { func (*DataSourceCustom_Static) ProtoMessage() {} func (x *DataSourceCustom_Static) ProtoReflect() protoreflect.Message { - mi := &file_wg_cosmo_node_v1_node_proto_msgTypes[30] + mi := &file_wg_cosmo_node_v1_node_proto_msgTypes[31] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2352,7 +2415,7 @@ func (x *DataSourceCustom_Static) ProtoReflect() protoreflect.Message { // Deprecated: Use DataSourceCustom_Static.ProtoReflect.Descriptor instead. func (*DataSourceCustom_Static) Descriptor() ([]byte, []int) { - return file_wg_cosmo_node_v1_node_proto_rawDescGZIP(), []int{30} + return file_wg_cosmo_node_v1_node_proto_rawDescGZIP(), []int{31} } func (x *DataSourceCustom_Static) GetData() *ConfigurationVariable { @@ -2377,7 +2440,7 @@ type ConfigurationVariable struct { func (x *ConfigurationVariable) Reset() { *x = ConfigurationVariable{} if protoimpl.UnsafeEnabled { - mi := &file_wg_cosmo_node_v1_node_proto_msgTypes[31] + mi := &file_wg_cosmo_node_v1_node_proto_msgTypes[32] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2390,7 +2453,7 @@ func (x *ConfigurationVariable) String() string { func (*ConfigurationVariable) ProtoMessage() {} func (x *ConfigurationVariable) ProtoReflect() protoreflect.Message { - mi := &file_wg_cosmo_node_v1_node_proto_msgTypes[31] + mi := &file_wg_cosmo_node_v1_node_proto_msgTypes[32] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2403,7 +2466,7 @@ func (x *ConfigurationVariable) ProtoReflect() protoreflect.Message { // Deprecated: Use ConfigurationVariable.ProtoReflect.Descriptor instead. func (*ConfigurationVariable) Descriptor() ([]byte, []int) { - return file_wg_cosmo_node_v1_node_proto_rawDescGZIP(), []int{31} + return file_wg_cosmo_node_v1_node_proto_rawDescGZIP(), []int{32} } func (x *ConfigurationVariable) GetKind() ConfigurationVariableKind { @@ -2453,7 +2516,7 @@ type DirectiveConfiguration struct { func (x *DirectiveConfiguration) Reset() { *x = DirectiveConfiguration{} if protoimpl.UnsafeEnabled { - mi := &file_wg_cosmo_node_v1_node_proto_msgTypes[32] + mi := &file_wg_cosmo_node_v1_node_proto_msgTypes[33] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2466,7 +2529,7 @@ func (x *DirectiveConfiguration) String() string { func (*DirectiveConfiguration) ProtoMessage() {} func (x *DirectiveConfiguration) ProtoReflect() protoreflect.Message { - mi := &file_wg_cosmo_node_v1_node_proto_msgTypes[32] + mi := &file_wg_cosmo_node_v1_node_proto_msgTypes[33] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2479,7 +2542,7 @@ func (x *DirectiveConfiguration) ProtoReflect() protoreflect.Message { // Deprecated: Use DirectiveConfiguration.ProtoReflect.Descriptor instead. func (*DirectiveConfiguration) Descriptor() ([]byte, []int) { - return file_wg_cosmo_node_v1_node_proto_rawDescGZIP(), []int{32} + return file_wg_cosmo_node_v1_node_proto_rawDescGZIP(), []int{33} } func (x *DirectiveConfiguration) GetDirectiveName() string { @@ -2508,7 +2571,7 @@ type URLQueryConfiguration struct { func (x *URLQueryConfiguration) Reset() { *x = URLQueryConfiguration{} if protoimpl.UnsafeEnabled { - mi := &file_wg_cosmo_node_v1_node_proto_msgTypes[33] + mi := &file_wg_cosmo_node_v1_node_proto_msgTypes[34] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2521,7 +2584,7 @@ func (x *URLQueryConfiguration) String() string { func (*URLQueryConfiguration) ProtoMessage() {} func (x *URLQueryConfiguration) ProtoReflect() protoreflect.Message { - mi := &file_wg_cosmo_node_v1_node_proto_msgTypes[33] + mi := &file_wg_cosmo_node_v1_node_proto_msgTypes[34] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2534,7 +2597,7 @@ func (x *URLQueryConfiguration) ProtoReflect() protoreflect.Message { // Deprecated: Use URLQueryConfiguration.ProtoReflect.Descriptor instead. func (*URLQueryConfiguration) Descriptor() ([]byte, []int) { - return file_wg_cosmo_node_v1_node_proto_rawDescGZIP(), []int{33} + return file_wg_cosmo_node_v1_node_proto_rawDescGZIP(), []int{34} } func (x *URLQueryConfiguration) GetName() string { @@ -2562,7 +2625,7 @@ type HTTPHeader struct { func (x *HTTPHeader) Reset() { *x = HTTPHeader{} if protoimpl.UnsafeEnabled { - mi := &file_wg_cosmo_node_v1_node_proto_msgTypes[34] + mi := &file_wg_cosmo_node_v1_node_proto_msgTypes[35] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2575,7 +2638,7 @@ func (x *HTTPHeader) String() string { func (*HTTPHeader) ProtoMessage() {} func (x *HTTPHeader) ProtoReflect() protoreflect.Message { - mi := &file_wg_cosmo_node_v1_node_proto_msgTypes[34] + mi := &file_wg_cosmo_node_v1_node_proto_msgTypes[35] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2588,7 +2651,7 @@ func (x *HTTPHeader) ProtoReflect() protoreflect.Message { // Deprecated: Use HTTPHeader.ProtoReflect.Descriptor instead. func (*HTTPHeader) Descriptor() ([]byte, []int) { - return file_wg_cosmo_node_v1_node_proto_rawDescGZIP(), []int{34} + return file_wg_cosmo_node_v1_node_proto_rawDescGZIP(), []int{35} } func (x *HTTPHeader) GetValues() []*ConfigurationVariable { @@ -2611,7 +2674,7 @@ type MTLSConfiguration struct { func (x *MTLSConfiguration) Reset() { *x = MTLSConfiguration{} if protoimpl.UnsafeEnabled { - mi := &file_wg_cosmo_node_v1_node_proto_msgTypes[35] + mi := &file_wg_cosmo_node_v1_node_proto_msgTypes[36] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2624,7 +2687,7 @@ func (x *MTLSConfiguration) String() string { func (*MTLSConfiguration) ProtoMessage() {} func (x *MTLSConfiguration) ProtoReflect() protoreflect.Message { - mi := &file_wg_cosmo_node_v1_node_proto_msgTypes[35] + mi := &file_wg_cosmo_node_v1_node_proto_msgTypes[36] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2637,7 +2700,7 @@ func (x *MTLSConfiguration) ProtoReflect() protoreflect.Message { // Deprecated: Use MTLSConfiguration.ProtoReflect.Descriptor instead. func (*MTLSConfiguration) Descriptor() ([]byte, []int) { - return file_wg_cosmo_node_v1_node_proto_rawDescGZIP(), []int{35} + return file_wg_cosmo_node_v1_node_proto_rawDescGZIP(), []int{36} } func (x *MTLSConfiguration) GetKey() *ConfigurationVariable { @@ -2677,7 +2740,7 @@ type GraphQLSubscriptionConfiguration struct { func (x *GraphQLSubscriptionConfiguration) Reset() { *x = GraphQLSubscriptionConfiguration{} if protoimpl.UnsafeEnabled { - mi := &file_wg_cosmo_node_v1_node_proto_msgTypes[36] + mi := &file_wg_cosmo_node_v1_node_proto_msgTypes[37] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2690,7 +2753,7 @@ func (x *GraphQLSubscriptionConfiguration) String() string { func (*GraphQLSubscriptionConfiguration) ProtoMessage() {} func (x *GraphQLSubscriptionConfiguration) ProtoReflect() protoreflect.Message { - mi := &file_wg_cosmo_node_v1_node_proto_msgTypes[36] + mi := &file_wg_cosmo_node_v1_node_proto_msgTypes[37] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2703,7 +2766,7 @@ func (x *GraphQLSubscriptionConfiguration) ProtoReflect() protoreflect.Message { // Deprecated: Use GraphQLSubscriptionConfiguration.ProtoReflect.Descriptor instead. func (*GraphQLSubscriptionConfiguration) Descriptor() ([]byte, []int) { - return file_wg_cosmo_node_v1_node_proto_rawDescGZIP(), []int{36} + return file_wg_cosmo_node_v1_node_proto_rawDescGZIP(), []int{37} } func (x *GraphQLSubscriptionConfiguration) GetEnabled() bool { @@ -2753,7 +2816,7 @@ type GraphQLFederationConfiguration struct { func (x *GraphQLFederationConfiguration) Reset() { *x = GraphQLFederationConfiguration{} if protoimpl.UnsafeEnabled { - mi := &file_wg_cosmo_node_v1_node_proto_msgTypes[37] + mi := &file_wg_cosmo_node_v1_node_proto_msgTypes[38] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2766,7 +2829,7 @@ func (x *GraphQLFederationConfiguration) String() string { func (*GraphQLFederationConfiguration) ProtoMessage() {} func (x *GraphQLFederationConfiguration) ProtoReflect() protoreflect.Message { - mi := &file_wg_cosmo_node_v1_node_proto_msgTypes[37] + mi := &file_wg_cosmo_node_v1_node_proto_msgTypes[38] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2779,7 +2842,7 @@ func (x *GraphQLFederationConfiguration) ProtoReflect() protoreflect.Message { // Deprecated: Use GraphQLFederationConfiguration.ProtoReflect.Descriptor instead. func (*GraphQLFederationConfiguration) Descriptor() ([]byte, []int) { - return file_wg_cosmo_node_v1_node_proto_rawDescGZIP(), []int{37} + return file_wg_cosmo_node_v1_node_proto_rawDescGZIP(), []int{38} } func (x *GraphQLFederationConfiguration) GetEnabled() bool { @@ -2808,7 +2871,7 @@ type InternedString struct { func (x *InternedString) Reset() { *x = InternedString{} if protoimpl.UnsafeEnabled { - mi := &file_wg_cosmo_node_v1_node_proto_msgTypes[38] + mi := &file_wg_cosmo_node_v1_node_proto_msgTypes[39] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2821,7 +2884,7 @@ func (x *InternedString) String() string { func (*InternedString) ProtoMessage() {} func (x *InternedString) ProtoReflect() protoreflect.Message { - mi := &file_wg_cosmo_node_v1_node_proto_msgTypes[38] + mi := &file_wg_cosmo_node_v1_node_proto_msgTypes[39] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2834,7 +2897,7 @@ func (x *InternedString) ProtoReflect() protoreflect.Message { // Deprecated: Use InternedString.ProtoReflect.Descriptor instead. func (*InternedString) Descriptor() ([]byte, []int) { - return file_wg_cosmo_node_v1_node_proto_rawDescGZIP(), []int{38} + return file_wg_cosmo_node_v1_node_proto_rawDescGZIP(), []int{39} } func (x *InternedString) GetKey() string { @@ -2856,7 +2919,7 @@ type SingleTypeField struct { func (x *SingleTypeField) Reset() { *x = SingleTypeField{} if protoimpl.UnsafeEnabled { - mi := &file_wg_cosmo_node_v1_node_proto_msgTypes[39] + mi := &file_wg_cosmo_node_v1_node_proto_msgTypes[40] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2869,7 +2932,7 @@ func (x *SingleTypeField) String() string { func (*SingleTypeField) ProtoMessage() {} func (x *SingleTypeField) ProtoReflect() protoreflect.Message { - mi := &file_wg_cosmo_node_v1_node_proto_msgTypes[39] + mi := &file_wg_cosmo_node_v1_node_proto_msgTypes[40] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2882,7 +2945,7 @@ func (x *SingleTypeField) ProtoReflect() protoreflect.Message { // Deprecated: Use SingleTypeField.ProtoReflect.Descriptor instead. func (*SingleTypeField) Descriptor() ([]byte, []int) { - return file_wg_cosmo_node_v1_node_proto_rawDescGZIP(), []int{39} + return file_wg_cosmo_node_v1_node_proto_rawDescGZIP(), []int{40} } func (x *SingleTypeField) GetTypeName() string { @@ -2911,7 +2974,7 @@ type SubscriptionFieldCondition struct { func (x *SubscriptionFieldCondition) Reset() { *x = SubscriptionFieldCondition{} if protoimpl.UnsafeEnabled { - mi := &file_wg_cosmo_node_v1_node_proto_msgTypes[40] + mi := &file_wg_cosmo_node_v1_node_proto_msgTypes[41] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2924,7 +2987,7 @@ func (x *SubscriptionFieldCondition) String() string { func (*SubscriptionFieldCondition) ProtoMessage() {} func (x *SubscriptionFieldCondition) ProtoReflect() protoreflect.Message { - mi := &file_wg_cosmo_node_v1_node_proto_msgTypes[40] + mi := &file_wg_cosmo_node_v1_node_proto_msgTypes[41] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2937,7 +3000,7 @@ func (x *SubscriptionFieldCondition) ProtoReflect() protoreflect.Message { // Deprecated: Use SubscriptionFieldCondition.ProtoReflect.Descriptor instead. func (*SubscriptionFieldCondition) Descriptor() ([]byte, []int) { - return file_wg_cosmo_node_v1_node_proto_rawDescGZIP(), []int{40} + return file_wg_cosmo_node_v1_node_proto_rawDescGZIP(), []int{41} } func (x *SubscriptionFieldCondition) GetFieldPath() []string { @@ -2968,7 +3031,7 @@ type SubscriptionFilterCondition struct { func (x *SubscriptionFilterCondition) Reset() { *x = SubscriptionFilterCondition{} if protoimpl.UnsafeEnabled { - mi := &file_wg_cosmo_node_v1_node_proto_msgTypes[41] + mi := &file_wg_cosmo_node_v1_node_proto_msgTypes[42] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2981,7 +3044,7 @@ func (x *SubscriptionFilterCondition) String() string { func (*SubscriptionFilterCondition) ProtoMessage() {} func (x *SubscriptionFilterCondition) ProtoReflect() protoreflect.Message { - mi := &file_wg_cosmo_node_v1_node_proto_msgTypes[41] + mi := &file_wg_cosmo_node_v1_node_proto_msgTypes[42] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2994,7 +3057,7 @@ func (x *SubscriptionFilterCondition) ProtoReflect() protoreflect.Message { // Deprecated: Use SubscriptionFilterCondition.ProtoReflect.Descriptor instead. func (*SubscriptionFilterCondition) Descriptor() ([]byte, []int) { - return file_wg_cosmo_node_v1_node_proto_rawDescGZIP(), []int{41} + return file_wg_cosmo_node_v1_node_proto_rawDescGZIP(), []int{42} } func (x *SubscriptionFilterCondition) GetAnd() []*SubscriptionFilterCondition { @@ -3036,7 +3099,7 @@ type CacheWarmerOperations struct { func (x *CacheWarmerOperations) Reset() { *x = CacheWarmerOperations{} if protoimpl.UnsafeEnabled { - mi := &file_wg_cosmo_node_v1_node_proto_msgTypes[42] + mi := &file_wg_cosmo_node_v1_node_proto_msgTypes[43] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3049,7 +3112,7 @@ func (x *CacheWarmerOperations) String() string { func (*CacheWarmerOperations) ProtoMessage() {} func (x *CacheWarmerOperations) ProtoReflect() protoreflect.Message { - mi := &file_wg_cosmo_node_v1_node_proto_msgTypes[42] + mi := &file_wg_cosmo_node_v1_node_proto_msgTypes[43] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3062,7 +3125,7 @@ func (x *CacheWarmerOperations) ProtoReflect() protoreflect.Message { // Deprecated: Use CacheWarmerOperations.ProtoReflect.Descriptor instead. func (*CacheWarmerOperations) Descriptor() ([]byte, []int) { - return file_wg_cosmo_node_v1_node_proto_rawDescGZIP(), []int{42} + return file_wg_cosmo_node_v1_node_proto_rawDescGZIP(), []int{43} } func (x *CacheWarmerOperations) GetOperations() []*Operation { @@ -3084,7 +3147,7 @@ type Operation struct { func (x *Operation) Reset() { *x = Operation{} if protoimpl.UnsafeEnabled { - mi := &file_wg_cosmo_node_v1_node_proto_msgTypes[43] + mi := &file_wg_cosmo_node_v1_node_proto_msgTypes[44] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3097,7 +3160,7 @@ func (x *Operation) String() string { func (*Operation) ProtoMessage() {} func (x *Operation) ProtoReflect() protoreflect.Message { - mi := &file_wg_cosmo_node_v1_node_proto_msgTypes[43] + mi := &file_wg_cosmo_node_v1_node_proto_msgTypes[44] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3110,7 +3173,7 @@ func (x *Operation) ProtoReflect() protoreflect.Message { // Deprecated: Use Operation.ProtoReflect.Descriptor instead. func (*Operation) Descriptor() ([]byte, []int) { - return file_wg_cosmo_node_v1_node_proto_rawDescGZIP(), []int{43} + return file_wg_cosmo_node_v1_node_proto_rawDescGZIP(), []int{44} } func (x *Operation) GetRequest() *OperationRequest { @@ -3140,7 +3203,7 @@ type OperationRequest struct { func (x *OperationRequest) Reset() { *x = OperationRequest{} if protoimpl.UnsafeEnabled { - mi := &file_wg_cosmo_node_v1_node_proto_msgTypes[44] + mi := &file_wg_cosmo_node_v1_node_proto_msgTypes[45] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3153,7 +3216,7 @@ func (x *OperationRequest) String() string { func (*OperationRequest) ProtoMessage() {} func (x *OperationRequest) ProtoReflect() protoreflect.Message { - mi := &file_wg_cosmo_node_v1_node_proto_msgTypes[44] + mi := &file_wg_cosmo_node_v1_node_proto_msgTypes[45] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3166,7 +3229,7 @@ func (x *OperationRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use OperationRequest.ProtoReflect.Descriptor instead. func (*OperationRequest) Descriptor() ([]byte, []int) { - return file_wg_cosmo_node_v1_node_proto_rawDescGZIP(), []int{44} + return file_wg_cosmo_node_v1_node_proto_rawDescGZIP(), []int{45} } func (x *OperationRequest) GetOperationName() string { @@ -3201,7 +3264,7 @@ type Extension struct { func (x *Extension) Reset() { *x = Extension{} if protoimpl.UnsafeEnabled { - mi := &file_wg_cosmo_node_v1_node_proto_msgTypes[45] + mi := &file_wg_cosmo_node_v1_node_proto_msgTypes[46] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3214,7 +3277,7 @@ func (x *Extension) String() string { func (*Extension) ProtoMessage() {} func (x *Extension) ProtoReflect() protoreflect.Message { - mi := &file_wg_cosmo_node_v1_node_proto_msgTypes[45] + mi := &file_wg_cosmo_node_v1_node_proto_msgTypes[46] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3227,7 +3290,7 @@ func (x *Extension) ProtoReflect() protoreflect.Message { // Deprecated: Use Extension.ProtoReflect.Descriptor instead. func (*Extension) Descriptor() ([]byte, []int) { - return file_wg_cosmo_node_v1_node_proto_rawDescGZIP(), []int{45} + return file_wg_cosmo_node_v1_node_proto_rawDescGZIP(), []int{46} } func (x *Extension) GetPersistedQuery() *PersistedQuery { @@ -3249,7 +3312,7 @@ type PersistedQuery struct { func (x *PersistedQuery) Reset() { *x = PersistedQuery{} if protoimpl.UnsafeEnabled { - mi := &file_wg_cosmo_node_v1_node_proto_msgTypes[46] + mi := &file_wg_cosmo_node_v1_node_proto_msgTypes[47] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3262,7 +3325,7 @@ func (x *PersistedQuery) String() string { func (*PersistedQuery) ProtoMessage() {} func (x *PersistedQuery) ProtoReflect() protoreflect.Message { - mi := &file_wg_cosmo_node_v1_node_proto_msgTypes[46] + mi := &file_wg_cosmo_node_v1_node_proto_msgTypes[47] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3275,7 +3338,7 @@ func (x *PersistedQuery) ProtoReflect() protoreflect.Message { // Deprecated: Use PersistedQuery.ProtoReflect.Descriptor instead. func (*PersistedQuery) Descriptor() ([]byte, []int) { - return file_wg_cosmo_node_v1_node_proto_rawDescGZIP(), []int{46} + return file_wg_cosmo_node_v1_node_proto_rawDescGZIP(), []int{47} } func (x *PersistedQuery) GetSha256Hash() string { @@ -3304,7 +3367,7 @@ type ClientInfo struct { func (x *ClientInfo) Reset() { *x = ClientInfo{} if protoimpl.UnsafeEnabled { - mi := &file_wg_cosmo_node_v1_node_proto_msgTypes[47] + mi := &file_wg_cosmo_node_v1_node_proto_msgTypes[48] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3317,7 +3380,7 @@ func (x *ClientInfo) String() string { func (*ClientInfo) ProtoMessage() {} func (x *ClientInfo) ProtoReflect() protoreflect.Message { - mi := &file_wg_cosmo_node_v1_node_proto_msgTypes[47] + mi := &file_wg_cosmo_node_v1_node_proto_msgTypes[48] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3330,7 +3393,7 @@ func (x *ClientInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use ClientInfo.ProtoReflect.Descriptor instead. func (*ClientInfo) Descriptor() ([]byte, []int) { - return file_wg_cosmo_node_v1_node_proto_rawDescGZIP(), []int{47} + return file_wg_cosmo_node_v1_node_proto_rawDescGZIP(), []int{48} } func (x *ClientInfo) GetName() string { @@ -3777,230 +3840,244 @@ var file_wg_cosmo_node_v1_node_proto_rawDesc = []byte{ 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x73, 0x22, - 0xa8, 0x01, 0x0a, 0x18, 0x45, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1f, 0x0a, 0x0b, - 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x49, 0x64, 0x12, 0x2f, 0x0a, - 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1b, 0x2e, 0x77, 0x67, - 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x45, - 0x76, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x1b, - 0x0a, 0x09, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x08, 0x74, 0x79, 0x70, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x66, - 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x09, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x97, 0x01, 0x0a, 0x16, 0x44, - 0x61, 0x74, 0x61, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x45, - 0x76, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x3c, 0x0a, 0x04, 0x6e, 0x61, 0x74, 0x73, 0x18, 0x01, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x77, 0x67, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x2e, 0x6e, - 0x6f, 0x64, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x61, 0x74, 0x73, 0x45, 0x76, 0x65, 0x6e, 0x74, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x04, 0x6e, - 0x61, 0x74, 0x73, 0x12, 0x3f, 0x0a, 0x05, 0x6b, 0x61, 0x66, 0x6b, 0x61, 0x18, 0x02, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x77, 0x67, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x2e, 0x6e, 0x6f, - 0x64, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4b, 0x61, 0x66, 0x6b, 0x61, 0x45, 0x76, 0x65, 0x6e, 0x74, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x05, 0x6b, - 0x61, 0x66, 0x6b, 0x61, 0x22, 0x56, 0x0a, 0x17, 0x44, 0x61, 0x74, 0x61, 0x53, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x5f, 0x53, 0x74, 0x61, 0x74, 0x69, 0x63, 0x12, - 0x3b, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, + 0x9f, 0x01, 0x0a, 0x17, 0x52, 0x65, 0x64, 0x69, 0x73, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x68, 0x0a, 0x1a, 0x65, + 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x63, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x2a, 0x2e, 0x77, 0x67, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, + 0x76, 0x31, 0x2e, 0x45, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x18, 0x65, 0x6e, 0x67, + 0x69, 0x6e, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, + 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, + 0x73, 0x22, 0xa8, 0x01, 0x0a, 0x18, 0x45, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x45, 0x76, 0x65, 0x6e, + 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1f, + 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x49, 0x64, 0x12, + 0x2f, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1b, 0x2e, 0x77, 0x67, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x76, 0x31, - 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x61, - 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0xd5, 0x02, 0x0a, - 0x15, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x61, - 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x3f, 0x0a, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2b, 0x2e, 0x77, 0x67, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x2e, - 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x4b, 0x69, 0x6e, - 0x64, 0x52, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x12, 0x36, 0x0a, 0x17, 0x73, 0x74, 0x61, 0x74, 0x69, - 0x63, 0x5f, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, - 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x15, 0x73, 0x74, 0x61, 0x74, 0x69, 0x63, - 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, - 0x3a, 0x0a, 0x19, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x76, - 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x17, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x56, - 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x4b, 0x0a, 0x22, 0x65, - 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x76, 0x61, 0x72, 0x69, 0x61, - 0x62, 0x6c, 0x65, 0x5f, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x1f, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, - 0x6d, 0x65, 0x6e, 0x74, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x44, 0x65, 0x66, 0x61, - 0x75, 0x6c, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3a, 0x0a, 0x19, 0x70, 0x6c, 0x61, 0x63, - 0x65, 0x68, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x5f, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, - 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x17, 0x70, 0x6c, 0x61, - 0x63, 0x65, 0x68, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, - 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x5c, 0x0a, 0x16, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x76, - 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x25, - 0x0a, 0x0e, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x76, - 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x5f, - 0x74, 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x6e, 0x61, 0x6d, 0x65, - 0x54, 0x6f, 0x22, 0x41, 0x0a, 0x15, 0x55, 0x52, 0x4c, 0x51, 0x75, 0x65, 0x72, 0x79, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x6e, - 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, - 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x4d, 0x0a, 0x0a, 0x48, 0x54, 0x54, 0x50, 0x48, 0x65, 0x61, - 0x64, 0x65, 0x72, 0x12, 0x3f, 0x0a, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x01, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x77, 0x67, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x2e, 0x6e, - 0x6f, 0x64, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x06, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x73, 0x22, 0xbb, 0x01, 0x0a, 0x11, 0x4d, 0x54, 0x4c, 0x53, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x39, 0x0a, 0x03, 0x6b, 0x65, - 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x77, 0x67, 0x2e, 0x63, 0x6f, 0x73, + 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, + 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x79, 0x70, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1d, 0x0a, + 0x0a, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x09, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0xd8, 0x01, 0x0a, + 0x16, 0x44, 0x61, 0x74, 0x61, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x43, 0x75, 0x73, 0x74, 0x6f, + 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x3c, 0x0a, 0x04, 0x6e, 0x61, 0x74, 0x73, 0x18, + 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x77, 0x67, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, + 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x61, 0x74, 0x73, 0x45, 0x76, 0x65, + 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, + 0x04, 0x6e, 0x61, 0x74, 0x73, 0x12, 0x3f, 0x0a, 0x05, 0x6b, 0x61, 0x66, 0x6b, 0x61, 0x18, 0x02, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x77, 0x67, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x2e, + 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4b, 0x61, 0x66, 0x6b, 0x61, 0x45, 0x76, 0x65, + 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, + 0x05, 0x6b, 0x61, 0x66, 0x6b, 0x61, 0x12, 0x3f, 0x0a, 0x05, 0x72, 0x65, 0x64, 0x69, 0x73, 0x18, + 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x77, 0x67, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, + 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x64, 0x69, 0x73, 0x45, 0x76, + 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x52, 0x05, 0x72, 0x65, 0x64, 0x69, 0x73, 0x22, 0x56, 0x0a, 0x17, 0x44, 0x61, 0x74, 0x61, 0x53, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x5f, 0x53, 0x74, 0x61, 0x74, + 0x69, 0x63, 0x12, 0x3b, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x27, 0x2e, 0x77, 0x67, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x2e, 0x6e, 0x6f, 0x64, 0x65, + 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, + 0xd5, 0x02, 0x0a, 0x15, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x3f, 0x0a, 0x04, 0x6b, 0x69, 0x6e, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2b, 0x2e, 0x77, 0x67, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, - 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x3b, 0x0a, 0x04, 0x63, 0x65, 0x72, 0x74, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x77, 0x67, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x2e, 0x6e, - 0x6f, 0x64, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x04, 0x63, 0x65, - 0x72, 0x74, 0x12, 0x2e, 0x0a, 0x12, 0x69, 0x6e, 0x73, 0x65, 0x63, 0x75, 0x72, 0x65, 0x53, 0x6b, - 0x69, 0x70, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x12, - 0x69, 0x6e, 0x73, 0x65, 0x63, 0x75, 0x72, 0x65, 0x53, 0x6b, 0x69, 0x70, 0x56, 0x65, 0x72, 0x69, - 0x66, 0x79, 0x22, 0xfb, 0x02, 0x0a, 0x20, 0x47, 0x72, 0x61, 0x70, 0x68, 0x51, 0x4c, 0x53, 0x75, - 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, - 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, - 0x64, 0x12, 0x39, 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, - 0x2e, 0x77, 0x67, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x76, - 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, - 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x03, 0x75, 0x72, 0x6c, 0x12, 0x1b, 0x0a, 0x06, - 0x75, 0x73, 0x65, 0x53, 0x53, 0x45, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x06, - 0x75, 0x73, 0x65, 0x53, 0x53, 0x45, 0x88, 0x01, 0x01, 0x12, 0x4d, 0x0a, 0x08, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2c, 0x2e, 0x77, 0x67, - 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x47, 0x72, - 0x61, 0x70, 0x68, 0x51, 0x4c, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, - 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x48, 0x01, 0x52, 0x08, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x88, 0x01, 0x01, 0x12, 0x65, 0x0a, 0x14, 0x77, 0x65, 0x62, 0x73, - 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x53, 0x75, 0x62, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2c, 0x2e, 0x77, 0x67, 0x2e, 0x63, 0x6f, 0x73, 0x6d, - 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x47, 0x72, 0x61, 0x70, 0x68, 0x51, 0x4c, - 0x57, 0x65, 0x62, 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x53, 0x75, 0x62, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x63, 0x6f, 0x6c, 0x48, 0x02, 0x52, 0x14, 0x77, 0x65, 0x62, 0x73, 0x6f, 0x63, 0x6b, 0x65, - 0x74, 0x53, 0x75, 0x62, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x88, 0x01, 0x01, 0x42, - 0x09, 0x0a, 0x07, 0x5f, 0x75, 0x73, 0x65, 0x53, 0x53, 0x45, 0x42, 0x0b, 0x0a, 0x09, 0x5f, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x42, 0x17, 0x0a, 0x15, 0x5f, 0x77, 0x65, 0x62, 0x73, - 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x53, 0x75, 0x62, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, - 0x22, 0x5a, 0x0a, 0x1e, 0x47, 0x72, 0x61, 0x70, 0x68, 0x51, 0x4c, 0x46, 0x65, 0x64, 0x65, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x1e, 0x0a, 0x0a, - 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x64, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0a, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x64, 0x6c, 0x22, 0x22, 0x0a, 0x0e, - 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x65, 0x64, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x12, 0x10, - 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, - 0x22, 0x4d, 0x0a, 0x0f, 0x53, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, 0x46, 0x69, - 0x65, 0x6c, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x79, 0x70, 0x65, 0x4e, 0x61, 0x6d, 0x65, - 0x12, 0x1d, 0x0a, 0x0a, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x22, - 0x4f, 0x0a, 0x1a, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x46, - 0x69, 0x65, 0x6c, 0x64, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1d, 0x0a, - 0x0a, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x09, 0x52, 0x09, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x50, 0x61, 0x74, 0x68, 0x12, 0x12, 0x0a, 0x04, - 0x6a, 0x73, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6a, 0x73, 0x6f, 0x6e, - 0x22, 0xb5, 0x02, 0x0a, 0x1b, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, - 0x6e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x12, 0x3f, 0x0a, 0x03, 0x61, 0x6e, 0x64, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2d, 0x2e, - 0x77, 0x67, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x76, 0x31, - 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x46, 0x69, 0x6c, - 0x74, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x03, 0x61, 0x6e, - 0x64, 0x12, 0x41, 0x0a, 0x02, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, - 0x77, 0x67, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x76, 0x31, - 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x46, 0x69, 0x65, - 0x6c, 0x64, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x02, 0x69, - 0x6e, 0x88, 0x01, 0x01, 0x12, 0x44, 0x0a, 0x03, 0x6e, 0x6f, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x2d, 0x2e, 0x77, 0x67, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x2e, 0x6e, 0x6f, 0x64, - 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, - 0x6e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x48, 0x01, 0x52, 0x03, 0x6e, 0x6f, 0x74, 0x88, 0x01, 0x01, 0x12, 0x3d, 0x0a, 0x02, 0x6f, 0x72, - 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x77, 0x67, 0x2e, 0x63, 0x6f, 0x73, 0x6d, - 0x6f, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, - 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x64, - 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x02, 0x6f, 0x72, 0x42, 0x05, 0x0a, 0x03, 0x5f, 0x69, 0x6e, - 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x6e, 0x6f, 0x74, 0x22, 0x54, 0x0a, 0x15, 0x43, 0x61, 0x63, 0x68, - 0x65, 0x57, 0x61, 0x72, 0x6d, 0x65, 0x72, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x12, 0x3b, 0x0a, 0x0a, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, - 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x77, 0x67, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, - 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x52, 0x0a, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x7f, - 0x0a, 0x09, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3c, 0x0a, 0x07, 0x72, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x77, - 0x67, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x76, 0x31, 0x2e, - 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x52, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x34, 0x0a, 0x06, 0x63, 0x6c, 0x69, - 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x77, 0x67, 0x2e, 0x63, - 0x6f, 0x73, 0x6d, 0x6f, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x69, - 0x65, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x22, - 0x8c, 0x01, 0x0a, 0x10, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6f, 0x70, - 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x71, - 0x75, 0x65, 0x72, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x71, 0x75, 0x65, 0x72, - 0x79, 0x12, 0x3b, 0x0a, 0x0a, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x77, 0x67, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, - 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, - 0x6f, 0x6e, 0x52, 0x0a, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x56, - 0x0a, 0x09, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x49, 0x0a, 0x0f, 0x70, - 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x77, 0x67, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x2e, - 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, - 0x64, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x0e, 0x70, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, - 0x64, 0x51, 0x75, 0x65, 0x72, 0x79, 0x22, 0x4b, 0x0a, 0x0e, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, - 0x74, 0x65, 0x64, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x68, 0x61, 0x32, - 0x35, 0x36, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, - 0x68, 0x61, 0x32, 0x35, 0x36, 0x48, 0x61, 0x73, 0x68, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, - 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, - 0x69, 0x6f, 0x6e, 0x22, 0x3a, 0x0a, 0x0a, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x6e, 0x66, - 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x2a, - 0x82, 0x01, 0x0a, 0x1b, 0x41, 0x72, 0x67, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x6e, 0x64, - 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, - 0x1b, 0x0a, 0x17, 0x52, 0x45, 0x4e, 0x44, 0x45, 0x52, 0x5f, 0x41, 0x52, 0x47, 0x55, 0x4d, 0x45, - 0x4e, 0x54, 0x5f, 0x44, 0x45, 0x46, 0x41, 0x55, 0x4c, 0x54, 0x10, 0x00, 0x12, 0x24, 0x0a, 0x20, - 0x52, 0x45, 0x4e, 0x44, 0x45, 0x52, 0x5f, 0x41, 0x52, 0x47, 0x55, 0x4d, 0x45, 0x4e, 0x54, 0x5f, - 0x41, 0x53, 0x5f, 0x47, 0x52, 0x41, 0x50, 0x48, 0x51, 0x4c, 0x5f, 0x56, 0x41, 0x4c, 0x55, 0x45, - 0x10, 0x01, 0x12, 0x20, 0x0a, 0x1c, 0x52, 0x45, 0x4e, 0x44, 0x45, 0x52, 0x5f, 0x41, 0x52, 0x47, - 0x55, 0x4d, 0x45, 0x4e, 0x54, 0x5f, 0x41, 0x53, 0x5f, 0x41, 0x52, 0x52, 0x41, 0x59, 0x5f, 0x43, - 0x53, 0x56, 0x10, 0x02, 0x2a, 0x36, 0x0a, 0x0e, 0x41, 0x72, 0x67, 0x75, 0x6d, 0x65, 0x6e, 0x74, - 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x10, 0x0a, 0x0c, 0x4f, 0x42, 0x4a, 0x45, 0x43, 0x54, - 0x5f, 0x46, 0x49, 0x45, 0x4c, 0x44, 0x10, 0x00, 0x12, 0x12, 0x0a, 0x0e, 0x46, 0x49, 0x45, 0x4c, - 0x44, 0x5f, 0x41, 0x52, 0x47, 0x55, 0x4d, 0x45, 0x4e, 0x54, 0x10, 0x01, 0x2a, 0x35, 0x0a, 0x0e, - 0x44, 0x61, 0x74, 0x61, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4b, 0x69, 0x6e, 0x64, 0x12, 0x0a, - 0x0a, 0x06, 0x53, 0x54, 0x41, 0x54, 0x49, 0x43, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x47, 0x52, - 0x41, 0x50, 0x48, 0x51, 0x4c, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x50, 0x55, 0x42, 0x53, 0x55, - 0x42, 0x10, 0x02, 0x2a, 0x34, 0x0a, 0x09, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, - 0x12, 0x0b, 0x0a, 0x07, 0x50, 0x55, 0x42, 0x4c, 0x49, 0x53, 0x48, 0x10, 0x00, 0x12, 0x0b, 0x0a, - 0x07, 0x52, 0x45, 0x51, 0x55, 0x45, 0x53, 0x54, 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x53, 0x55, - 0x42, 0x53, 0x43, 0x52, 0x49, 0x42, 0x45, 0x10, 0x02, 0x2a, 0x86, 0x01, 0x0a, 0x19, 0x43, 0x6f, + 0x4b, 0x69, 0x6e, 0x64, 0x52, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x12, 0x36, 0x0a, 0x17, 0x73, 0x74, + 0x61, 0x74, 0x69, 0x63, 0x5f, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x63, 0x6f, + 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x15, 0x73, 0x74, 0x61, + 0x74, 0x69, 0x63, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, + 0x6e, 0x74, 0x12, 0x3a, 0x0a, 0x19, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, + 0x74, 0x5f, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x17, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, + 0x6e, 0x74, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x4b, + 0x0a, 0x22, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x76, 0x61, + 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x1f, 0x65, 0x6e, 0x76, 0x69, + 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x44, + 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3a, 0x0a, 0x19, 0x70, + 0x6c, 0x61, 0x63, 0x65, 0x68, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x5f, 0x76, 0x61, 0x72, 0x69, 0x61, + 0x62, 0x6c, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x17, + 0x70, 0x6c, 0x61, 0x63, 0x65, 0x68, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x56, 0x61, 0x72, 0x69, 0x61, + 0x62, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x5c, 0x0a, 0x16, 0x44, 0x69, 0x72, 0x65, 0x63, + 0x74, 0x69, 0x76, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x12, 0x25, 0x0a, 0x0e, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x6e, + 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x64, 0x69, 0x72, 0x65, 0x63, + 0x74, 0x69, 0x76, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x65, 0x6e, 0x61, + 0x6d, 0x65, 0x5f, 0x74, 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x6e, + 0x61, 0x6d, 0x65, 0x54, 0x6f, 0x22, 0x41, 0x0a, 0x15, 0x55, 0x52, 0x4c, 0x51, 0x75, 0x65, 0x72, + 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, + 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, + 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x4d, 0x0a, 0x0a, 0x48, 0x54, 0x54, 0x50, + 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x3f, 0x0a, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, + 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x77, 0x67, 0x2e, 0x63, 0x6f, 0x73, 0x6d, + 0x6f, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x52, + 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x22, 0xbb, 0x01, 0x0a, 0x11, 0x4d, 0x54, 0x4c, 0x53, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x39, 0x0a, + 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x77, 0x67, 0x2e, + 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x61, 0x72, 0x69, 0x61, - 0x62, 0x6c, 0x65, 0x4b, 0x69, 0x6e, 0x64, 0x12, 0x21, 0x0a, 0x1d, 0x53, 0x54, 0x41, 0x54, 0x49, - 0x43, 0x5f, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x55, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, - 0x56, 0x41, 0x52, 0x49, 0x41, 0x42, 0x4c, 0x45, 0x10, 0x00, 0x12, 0x1e, 0x0a, 0x1a, 0x45, 0x4e, - 0x56, 0x5f, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x55, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, - 0x56, 0x41, 0x52, 0x49, 0x41, 0x42, 0x4c, 0x45, 0x10, 0x01, 0x12, 0x26, 0x0a, 0x22, 0x50, 0x4c, - 0x41, 0x43, 0x45, 0x48, 0x4f, 0x4c, 0x44, 0x45, 0x52, 0x5f, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, - 0x55, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x56, 0x41, 0x52, 0x49, 0x41, 0x42, 0x4c, 0x45, - 0x10, 0x02, 0x2a, 0x41, 0x0a, 0x0a, 0x48, 0x54, 0x54, 0x50, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, - 0x12, 0x07, 0x0a, 0x03, 0x47, 0x45, 0x54, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x50, 0x4f, 0x53, - 0x54, 0x10, 0x01, 0x12, 0x07, 0x0a, 0x03, 0x50, 0x55, 0x54, 0x10, 0x02, 0x12, 0x0a, 0x0a, 0x06, - 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x10, 0x03, 0x12, 0x0b, 0x0a, 0x07, 0x4f, 0x50, 0x54, 0x49, - 0x4f, 0x4e, 0x53, 0x10, 0x04, 0x32, 0x6e, 0x0a, 0x0b, 0x4e, 0x6f, 0x64, 0x65, 0x53, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x12, 0x5f, 0x0a, 0x0c, 0x53, 0x65, 0x6c, 0x66, 0x52, 0x65, 0x67, 0x69, - 0x73, 0x74, 0x65, 0x72, 0x12, 0x25, 0x2e, 0x77, 0x67, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x2e, - 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x6c, 0x66, 0x52, 0x65, 0x67, 0x69, - 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x77, 0x67, - 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x53, - 0x65, 0x6c, 0x66, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0xcb, 0x01, 0x0a, 0x14, 0x63, 0x6f, 0x6d, 0x2e, 0x77, 0x67, - 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x76, 0x31, 0x42, 0x09, - 0x4e, 0x6f, 0x64, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x45, 0x67, 0x69, 0x74, - 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x77, 0x75, 0x6e, 0x64, 0x65, 0x72, 0x67, 0x72, - 0x61, 0x70, 0x68, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x2f, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, - 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x77, 0x67, 0x2f, 0x63, 0x6f, - 0x73, 0x6d, 0x6f, 0x2f, 0x6e, 0x6f, 0x64, 0x65, 0x2f, 0x76, 0x31, 0x3b, 0x6e, 0x6f, 0x64, 0x65, - 0x76, 0x31, 0xa2, 0x02, 0x03, 0x57, 0x43, 0x4e, 0xaa, 0x02, 0x10, 0x57, 0x67, 0x2e, 0x43, 0x6f, - 0x73, 0x6d, 0x6f, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x2e, 0x56, 0x31, 0xca, 0x02, 0x10, 0x57, 0x67, - 0x5c, 0x43, 0x6f, 0x73, 0x6d, 0x6f, 0x5c, 0x4e, 0x6f, 0x64, 0x65, 0x5c, 0x56, 0x31, 0xe2, 0x02, - 0x1c, 0x57, 0x67, 0x5c, 0x43, 0x6f, 0x73, 0x6d, 0x6f, 0x5c, 0x4e, 0x6f, 0x64, 0x65, 0x5c, 0x56, - 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x13, - 0x57, 0x67, 0x3a, 0x3a, 0x43, 0x6f, 0x73, 0x6d, 0x6f, 0x3a, 0x3a, 0x4e, 0x6f, 0x64, 0x65, 0x3a, - 0x3a, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x62, 0x6c, 0x65, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x3b, 0x0a, 0x04, 0x63, 0x65, 0x72, 0x74, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x77, 0x67, 0x2e, 0x63, 0x6f, 0x73, 0x6d, + 0x6f, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x52, + 0x04, 0x63, 0x65, 0x72, 0x74, 0x12, 0x2e, 0x0a, 0x12, 0x69, 0x6e, 0x73, 0x65, 0x63, 0x75, 0x72, + 0x65, 0x53, 0x6b, 0x69, 0x70, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x12, 0x69, 0x6e, 0x73, 0x65, 0x63, 0x75, 0x72, 0x65, 0x53, 0x6b, 0x69, 0x70, 0x56, + 0x65, 0x72, 0x69, 0x66, 0x79, 0x22, 0xfb, 0x02, 0x0a, 0x20, 0x47, 0x72, 0x61, 0x70, 0x68, 0x51, + 0x4c, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, + 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x65, 0x6e, 0x61, + 0x62, 0x6c, 0x65, 0x64, 0x12, 0x39, 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x27, 0x2e, 0x77, 0x67, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x2e, 0x6e, 0x6f, 0x64, + 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x03, 0x75, 0x72, 0x6c, 0x12, + 0x1b, 0x0a, 0x06, 0x75, 0x73, 0x65, 0x53, 0x53, 0x45, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x48, + 0x00, 0x52, 0x06, 0x75, 0x73, 0x65, 0x53, 0x53, 0x45, 0x88, 0x01, 0x01, 0x12, 0x4d, 0x0a, 0x08, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2c, + 0x2e, 0x77, 0x67, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, + 0x2e, 0x47, 0x72, 0x61, 0x70, 0x68, 0x51, 0x4c, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x48, 0x01, 0x52, 0x08, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x88, 0x01, 0x01, 0x12, 0x65, 0x0a, 0x14, 0x77, + 0x65, 0x62, 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x53, 0x75, 0x62, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x63, 0x6f, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2c, 0x2e, 0x77, 0x67, 0x2e, 0x63, + 0x6f, 0x73, 0x6d, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x47, 0x72, 0x61, 0x70, + 0x68, 0x51, 0x4c, 0x57, 0x65, 0x62, 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x53, 0x75, 0x62, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x48, 0x02, 0x52, 0x14, 0x77, 0x65, 0x62, 0x73, 0x6f, + 0x63, 0x6b, 0x65, 0x74, 0x53, 0x75, 0x62, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x88, + 0x01, 0x01, 0x42, 0x09, 0x0a, 0x07, 0x5f, 0x75, 0x73, 0x65, 0x53, 0x53, 0x45, 0x42, 0x0b, 0x0a, + 0x09, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x42, 0x17, 0x0a, 0x15, 0x5f, 0x77, + 0x65, 0x62, 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x53, 0x75, 0x62, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x63, 0x6f, 0x6c, 0x22, 0x5a, 0x0a, 0x1e, 0x47, 0x72, 0x61, 0x70, 0x68, 0x51, 0x4c, 0x46, 0x65, + 0x64, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, + 0x1e, 0x0a, 0x0a, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x64, 0x6c, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x64, 0x6c, 0x22, + 0x22, 0x0a, 0x0e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x65, 0x64, 0x53, 0x74, 0x72, 0x69, 0x6e, + 0x67, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, + 0x6b, 0x65, 0x79, 0x22, 0x4d, 0x0a, 0x0f, 0x53, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x54, 0x79, 0x70, + 0x65, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x6e, + 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x79, 0x70, 0x65, 0x4e, + 0x61, 0x6d, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x6e, 0x61, 0x6d, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x4e, 0x61, + 0x6d, 0x65, 0x22, 0x4f, 0x0a, 0x1a, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, + 0x6f, 0x6e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, + 0x12, 0x1d, 0x0a, 0x0a, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, + 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x50, 0x61, 0x74, 0x68, 0x12, + 0x12, 0x0a, 0x04, 0x6a, 0x73, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6a, + 0x73, 0x6f, 0x6e, 0x22, 0xb5, 0x02, 0x0a, 0x1b, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, + 0x69, 0x6f, 0x6e, 0x12, 0x3f, 0x0a, 0x03, 0x61, 0x6e, 0x64, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x2d, 0x2e, 0x77, 0x67, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x2e, 0x6e, 0x6f, 0x64, 0x65, + 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, + 0x03, 0x61, 0x6e, 0x64, 0x12, 0x41, 0x0a, 0x02, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x2c, 0x2e, 0x77, 0x67, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x2e, 0x6e, 0x6f, 0x64, 0x65, + 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x46, 0x69, 0x65, 0x6c, 0x64, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, + 0x52, 0x02, 0x69, 0x6e, 0x88, 0x01, 0x01, 0x12, 0x44, 0x0a, 0x03, 0x6e, 0x6f, 0x74, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x77, 0x67, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x2e, + 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, + 0x69, 0x6f, 0x6e, 0x48, 0x01, 0x52, 0x03, 0x6e, 0x6f, 0x74, 0x88, 0x01, 0x01, 0x12, 0x3d, 0x0a, + 0x02, 0x6f, 0x72, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x77, 0x67, 0x2e, 0x63, + 0x6f, 0x73, 0x6d, 0x6f, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x75, 0x62, + 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x43, + 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x02, 0x6f, 0x72, 0x42, 0x05, 0x0a, 0x03, + 0x5f, 0x69, 0x6e, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x6e, 0x6f, 0x74, 0x22, 0x54, 0x0a, 0x15, 0x43, + 0x61, 0x63, 0x68, 0x65, 0x57, 0x61, 0x72, 0x6d, 0x65, 0x72, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x3b, 0x0a, 0x0a, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x77, 0x67, 0x2e, 0x63, 0x6f, + 0x73, 0x6d, 0x6f, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x70, 0x65, 0x72, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x22, 0x7f, 0x0a, 0x09, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3c, + 0x0a, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x22, 0x2e, 0x77, 0x67, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, + 0x76, 0x31, 0x2e, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x52, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x34, 0x0a, 0x06, + 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x77, + 0x67, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x76, 0x31, 0x2e, + 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06, 0x63, 0x6c, 0x69, 0x65, + 0x6e, 0x74, 0x22, 0x8c, 0x01, 0x0a, 0x10, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x6f, 0x70, 0x65, 0x72, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0d, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x14, + 0x0a, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x71, + 0x75, 0x65, 0x72, 0x79, 0x12, 0x3b, 0x0a, 0x0a, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, + 0x6e, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x77, 0x67, 0x2e, 0x63, 0x6f, + 0x73, 0x6d, 0x6f, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x78, 0x74, 0x65, + 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, + 0x73, 0x22, 0x56, 0x0a, 0x09, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x49, + 0x0a, 0x0f, 0x70, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x71, 0x75, 0x65, 0x72, + 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x77, 0x67, 0x2e, 0x63, 0x6f, 0x73, + 0x6d, 0x6f, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x65, 0x72, 0x73, 0x69, + 0x73, 0x74, 0x65, 0x64, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x0e, 0x70, 0x65, 0x72, 0x73, 0x69, + 0x73, 0x74, 0x65, 0x64, 0x51, 0x75, 0x65, 0x72, 0x79, 0x22, 0x4b, 0x0a, 0x0e, 0x50, 0x65, 0x72, + 0x73, 0x69, 0x73, 0x74, 0x65, 0x64, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x1f, 0x0a, 0x0b, 0x73, + 0x68, 0x61, 0x32, 0x35, 0x36, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0a, 0x73, 0x68, 0x61, 0x32, 0x35, 0x36, 0x48, 0x61, 0x73, 0x68, 0x12, 0x18, 0x0a, 0x07, + 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x76, + 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x3a, 0x0a, 0x0a, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, + 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, + 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, + 0x6f, 0x6e, 0x2a, 0x82, 0x01, 0x0a, 0x1b, 0x41, 0x72, 0x67, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x52, + 0x65, 0x6e, 0x64, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x12, 0x1b, 0x0a, 0x17, 0x52, 0x45, 0x4e, 0x44, 0x45, 0x52, 0x5f, 0x41, 0x52, 0x47, + 0x55, 0x4d, 0x45, 0x4e, 0x54, 0x5f, 0x44, 0x45, 0x46, 0x41, 0x55, 0x4c, 0x54, 0x10, 0x00, 0x12, + 0x24, 0x0a, 0x20, 0x52, 0x45, 0x4e, 0x44, 0x45, 0x52, 0x5f, 0x41, 0x52, 0x47, 0x55, 0x4d, 0x45, + 0x4e, 0x54, 0x5f, 0x41, 0x53, 0x5f, 0x47, 0x52, 0x41, 0x50, 0x48, 0x51, 0x4c, 0x5f, 0x56, 0x41, + 0x4c, 0x55, 0x45, 0x10, 0x01, 0x12, 0x20, 0x0a, 0x1c, 0x52, 0x45, 0x4e, 0x44, 0x45, 0x52, 0x5f, + 0x41, 0x52, 0x47, 0x55, 0x4d, 0x45, 0x4e, 0x54, 0x5f, 0x41, 0x53, 0x5f, 0x41, 0x52, 0x52, 0x41, + 0x59, 0x5f, 0x43, 0x53, 0x56, 0x10, 0x02, 0x2a, 0x36, 0x0a, 0x0e, 0x41, 0x72, 0x67, 0x75, 0x6d, + 0x65, 0x6e, 0x74, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x10, 0x0a, 0x0c, 0x4f, 0x42, 0x4a, + 0x45, 0x43, 0x54, 0x5f, 0x46, 0x49, 0x45, 0x4c, 0x44, 0x10, 0x00, 0x12, 0x12, 0x0a, 0x0e, 0x46, + 0x49, 0x45, 0x4c, 0x44, 0x5f, 0x41, 0x52, 0x47, 0x55, 0x4d, 0x45, 0x4e, 0x54, 0x10, 0x01, 0x2a, + 0x35, 0x0a, 0x0e, 0x44, 0x61, 0x74, 0x61, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4b, 0x69, 0x6e, + 0x64, 0x12, 0x0a, 0x0a, 0x06, 0x53, 0x54, 0x41, 0x54, 0x49, 0x43, 0x10, 0x00, 0x12, 0x0b, 0x0a, + 0x07, 0x47, 0x52, 0x41, 0x50, 0x48, 0x51, 0x4c, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x50, 0x55, + 0x42, 0x53, 0x55, 0x42, 0x10, 0x02, 0x2a, 0x34, 0x0a, 0x09, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x54, + 0x79, 0x70, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x50, 0x55, 0x42, 0x4c, 0x49, 0x53, 0x48, 0x10, 0x00, + 0x12, 0x0b, 0x0a, 0x07, 0x52, 0x45, 0x51, 0x55, 0x45, 0x53, 0x54, 0x10, 0x01, 0x12, 0x0d, 0x0a, + 0x09, 0x53, 0x55, 0x42, 0x53, 0x43, 0x52, 0x49, 0x42, 0x45, 0x10, 0x02, 0x2a, 0x86, 0x01, 0x0a, + 0x19, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x61, + 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x4b, 0x69, 0x6e, 0x64, 0x12, 0x21, 0x0a, 0x1d, 0x53, 0x54, + 0x41, 0x54, 0x49, 0x43, 0x5f, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x55, 0x52, 0x41, 0x54, 0x49, + 0x4f, 0x4e, 0x5f, 0x56, 0x41, 0x52, 0x49, 0x41, 0x42, 0x4c, 0x45, 0x10, 0x00, 0x12, 0x1e, 0x0a, + 0x1a, 0x45, 0x4e, 0x56, 0x5f, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x55, 0x52, 0x41, 0x54, 0x49, + 0x4f, 0x4e, 0x5f, 0x56, 0x41, 0x52, 0x49, 0x41, 0x42, 0x4c, 0x45, 0x10, 0x01, 0x12, 0x26, 0x0a, + 0x22, 0x50, 0x4c, 0x41, 0x43, 0x45, 0x48, 0x4f, 0x4c, 0x44, 0x45, 0x52, 0x5f, 0x43, 0x4f, 0x4e, + 0x46, 0x49, 0x47, 0x55, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x56, 0x41, 0x52, 0x49, 0x41, + 0x42, 0x4c, 0x45, 0x10, 0x02, 0x2a, 0x41, 0x0a, 0x0a, 0x48, 0x54, 0x54, 0x50, 0x4d, 0x65, 0x74, + 0x68, 0x6f, 0x64, 0x12, 0x07, 0x0a, 0x03, 0x47, 0x45, 0x54, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, + 0x50, 0x4f, 0x53, 0x54, 0x10, 0x01, 0x12, 0x07, 0x0a, 0x03, 0x50, 0x55, 0x54, 0x10, 0x02, 0x12, + 0x0a, 0x0a, 0x06, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x10, 0x03, 0x12, 0x0b, 0x0a, 0x07, 0x4f, + 0x50, 0x54, 0x49, 0x4f, 0x4e, 0x53, 0x10, 0x04, 0x32, 0x6e, 0x0a, 0x0b, 0x4e, 0x6f, 0x64, 0x65, + 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x5f, 0x0a, 0x0c, 0x53, 0x65, 0x6c, 0x66, 0x52, + 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x12, 0x25, 0x2e, 0x77, 0x67, 0x2e, 0x63, 0x6f, 0x73, + 0x6d, 0x6f, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x6c, 0x66, 0x52, + 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, + 0x2e, 0x77, 0x67, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x76, + 0x31, 0x2e, 0x53, 0x65, 0x6c, 0x66, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0xcb, 0x01, 0x0a, 0x14, 0x63, 0x6f, 0x6d, + 0x2e, 0x77, 0x67, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x76, + 0x31, 0x42, 0x09, 0x4e, 0x6f, 0x64, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x45, + 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x77, 0x75, 0x6e, 0x64, 0x65, + 0x72, 0x67, 0x72, 0x61, 0x70, 0x68, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x2f, 0x72, 0x6f, 0x75, + 0x74, 0x65, 0x72, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x77, 0x67, + 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x2f, 0x6e, 0x6f, 0x64, 0x65, 0x2f, 0x76, 0x31, 0x3b, 0x6e, + 0x6f, 0x64, 0x65, 0x76, 0x31, 0xa2, 0x02, 0x03, 0x57, 0x43, 0x4e, 0xaa, 0x02, 0x10, 0x57, 0x67, + 0x2e, 0x43, 0x6f, 0x73, 0x6d, 0x6f, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x2e, 0x56, 0x31, 0xca, 0x02, + 0x10, 0x57, 0x67, 0x5c, 0x43, 0x6f, 0x73, 0x6d, 0x6f, 0x5c, 0x4e, 0x6f, 0x64, 0x65, 0x5c, 0x56, + 0x31, 0xe2, 0x02, 0x1c, 0x57, 0x67, 0x5c, 0x43, 0x6f, 0x73, 0x6d, 0x6f, 0x5c, 0x4e, 0x6f, 0x64, + 0x65, 0x5c, 0x56, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, + 0xea, 0x02, 0x13, 0x57, 0x67, 0x3a, 0x3a, 0x43, 0x6f, 0x73, 0x6d, 0x6f, 0x3a, 0x3a, 0x4e, 0x6f, + 0x64, 0x65, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -4016,7 +4093,7 @@ func file_wg_cosmo_node_v1_node_proto_rawDescGZIP() []byte { } var file_wg_cosmo_node_v1_node_proto_enumTypes = make([]protoimpl.EnumInfo, 6) -var file_wg_cosmo_node_v1_node_proto_msgTypes = make([]protoimpl.MessageInfo, 51) +var file_wg_cosmo_node_v1_node_proto_msgTypes = make([]protoimpl.MessageInfo, 52) var file_wg_cosmo_node_v1_node_proto_goTypes = []any{ (ArgumentRenderConfiguration)(0), // 0: wg.cosmo.node.v1.ArgumentRenderConfiguration (ArgumentSource)(0), // 1: wg.cosmo.node.v1.ArgumentSource @@ -4052,58 +4129,59 @@ var file_wg_cosmo_node_v1_node_proto_goTypes = []any{ (*NatsStreamConfiguration)(nil), // 31: wg.cosmo.node.v1.NatsStreamConfiguration (*NatsEventConfiguration)(nil), // 32: wg.cosmo.node.v1.NatsEventConfiguration (*KafkaEventConfiguration)(nil), // 33: wg.cosmo.node.v1.KafkaEventConfiguration - (*EngineEventConfiguration)(nil), // 34: wg.cosmo.node.v1.EngineEventConfiguration - (*DataSourceCustomEvents)(nil), // 35: wg.cosmo.node.v1.DataSourceCustomEvents - (*DataSourceCustom_Static)(nil), // 36: wg.cosmo.node.v1.DataSourceCustom_Static - (*ConfigurationVariable)(nil), // 37: wg.cosmo.node.v1.ConfigurationVariable - (*DirectiveConfiguration)(nil), // 38: wg.cosmo.node.v1.DirectiveConfiguration - (*URLQueryConfiguration)(nil), // 39: wg.cosmo.node.v1.URLQueryConfiguration - (*HTTPHeader)(nil), // 40: wg.cosmo.node.v1.HTTPHeader - (*MTLSConfiguration)(nil), // 41: wg.cosmo.node.v1.MTLSConfiguration - (*GraphQLSubscriptionConfiguration)(nil), // 42: wg.cosmo.node.v1.GraphQLSubscriptionConfiguration - (*GraphQLFederationConfiguration)(nil), // 43: wg.cosmo.node.v1.GraphQLFederationConfiguration - (*InternedString)(nil), // 44: wg.cosmo.node.v1.InternedString - (*SingleTypeField)(nil), // 45: wg.cosmo.node.v1.SingleTypeField - (*SubscriptionFieldCondition)(nil), // 46: wg.cosmo.node.v1.SubscriptionFieldCondition - (*SubscriptionFilterCondition)(nil), // 47: wg.cosmo.node.v1.SubscriptionFilterCondition - (*CacheWarmerOperations)(nil), // 48: wg.cosmo.node.v1.CacheWarmerOperations - (*Operation)(nil), // 49: wg.cosmo.node.v1.Operation - (*OperationRequest)(nil), // 50: wg.cosmo.node.v1.OperationRequest - (*Extension)(nil), // 51: wg.cosmo.node.v1.Extension - (*PersistedQuery)(nil), // 52: wg.cosmo.node.v1.PersistedQuery - (*ClientInfo)(nil), // 53: wg.cosmo.node.v1.ClientInfo - nil, // 54: wg.cosmo.node.v1.FeatureFlagRouterExecutionConfigs.ConfigByFeatureFlagNameEntry - nil, // 55: wg.cosmo.node.v1.EngineConfiguration.StringStorageEntry - nil, // 56: wg.cosmo.node.v1.FetchConfiguration.HeaderEntry - (common.EnumStatusCode)(0), // 57: wg.cosmo.common.EnumStatusCode - (common.GraphQLSubscriptionProtocol)(0), // 58: wg.cosmo.common.GraphQLSubscriptionProtocol - (common.GraphQLWebsocketSubprotocol)(0), // 59: wg.cosmo.common.GraphQLWebsocketSubprotocol + (*RedisEventConfiguration)(nil), // 34: wg.cosmo.node.v1.RedisEventConfiguration + (*EngineEventConfiguration)(nil), // 35: wg.cosmo.node.v1.EngineEventConfiguration + (*DataSourceCustomEvents)(nil), // 36: wg.cosmo.node.v1.DataSourceCustomEvents + (*DataSourceCustom_Static)(nil), // 37: wg.cosmo.node.v1.DataSourceCustom_Static + (*ConfigurationVariable)(nil), // 38: wg.cosmo.node.v1.ConfigurationVariable + (*DirectiveConfiguration)(nil), // 39: wg.cosmo.node.v1.DirectiveConfiguration + (*URLQueryConfiguration)(nil), // 40: wg.cosmo.node.v1.URLQueryConfiguration + (*HTTPHeader)(nil), // 41: wg.cosmo.node.v1.HTTPHeader + (*MTLSConfiguration)(nil), // 42: wg.cosmo.node.v1.MTLSConfiguration + (*GraphQLSubscriptionConfiguration)(nil), // 43: wg.cosmo.node.v1.GraphQLSubscriptionConfiguration + (*GraphQLFederationConfiguration)(nil), // 44: wg.cosmo.node.v1.GraphQLFederationConfiguration + (*InternedString)(nil), // 45: wg.cosmo.node.v1.InternedString + (*SingleTypeField)(nil), // 46: wg.cosmo.node.v1.SingleTypeField + (*SubscriptionFieldCondition)(nil), // 47: wg.cosmo.node.v1.SubscriptionFieldCondition + (*SubscriptionFilterCondition)(nil), // 48: wg.cosmo.node.v1.SubscriptionFilterCondition + (*CacheWarmerOperations)(nil), // 49: wg.cosmo.node.v1.CacheWarmerOperations + (*Operation)(nil), // 50: wg.cosmo.node.v1.Operation + (*OperationRequest)(nil), // 51: wg.cosmo.node.v1.OperationRequest + (*Extension)(nil), // 52: wg.cosmo.node.v1.Extension + (*PersistedQuery)(nil), // 53: wg.cosmo.node.v1.PersistedQuery + (*ClientInfo)(nil), // 54: wg.cosmo.node.v1.ClientInfo + nil, // 55: wg.cosmo.node.v1.FeatureFlagRouterExecutionConfigs.ConfigByFeatureFlagNameEntry + nil, // 56: wg.cosmo.node.v1.EngineConfiguration.StringStorageEntry + nil, // 57: wg.cosmo.node.v1.FetchConfiguration.HeaderEntry + (common.EnumStatusCode)(0), // 58: wg.cosmo.common.EnumStatusCode + (common.GraphQLSubscriptionProtocol)(0), // 59: wg.cosmo.common.GraphQLSubscriptionProtocol + (common.GraphQLWebsocketSubprotocol)(0), // 60: wg.cosmo.common.GraphQLWebsocketSubprotocol } var file_wg_cosmo_node_v1_node_proto_depIdxs = []int32{ - 54, // 0: wg.cosmo.node.v1.FeatureFlagRouterExecutionConfigs.config_by_feature_flag_name:type_name -> wg.cosmo.node.v1.FeatureFlagRouterExecutionConfigs.ConfigByFeatureFlagNameEntry + 55, // 0: wg.cosmo.node.v1.FeatureFlagRouterExecutionConfigs.config_by_feature_flag_name:type_name -> wg.cosmo.node.v1.FeatureFlagRouterExecutionConfigs.ConfigByFeatureFlagNameEntry 16, // 1: wg.cosmo.node.v1.FeatureFlagRouterExecutionConfig.engine_config:type_name -> wg.cosmo.node.v1.EngineConfiguration 6, // 2: wg.cosmo.node.v1.FeatureFlagRouterExecutionConfig.subgraphs:type_name -> wg.cosmo.node.v1.Subgraph 16, // 3: wg.cosmo.node.v1.RouterConfig.engine_config:type_name -> wg.cosmo.node.v1.EngineConfiguration 6, // 4: wg.cosmo.node.v1.RouterConfig.subgraphs:type_name -> wg.cosmo.node.v1.Subgraph 7, // 5: wg.cosmo.node.v1.RouterConfig.feature_flag_configs:type_name -> wg.cosmo.node.v1.FeatureFlagRouterExecutionConfigs - 57, // 6: wg.cosmo.node.v1.Response.code:type_name -> wg.cosmo.common.EnumStatusCode + 58, // 6: wg.cosmo.node.v1.Response.code:type_name -> wg.cosmo.common.EnumStatusCode 13, // 7: wg.cosmo.node.v1.RegistrationInfo.account_limits:type_name -> wg.cosmo.node.v1.AccountLimits 10, // 8: wg.cosmo.node.v1.SelfRegisterResponse.response:type_name -> wg.cosmo.node.v1.Response 12, // 9: wg.cosmo.node.v1.SelfRegisterResponse.registrationInfo:type_name -> wg.cosmo.node.v1.RegistrationInfo 17, // 10: wg.cosmo.node.v1.EngineConfiguration.datasource_configurations:type_name -> wg.cosmo.node.v1.DataSourceConfiguration 21, // 11: wg.cosmo.node.v1.EngineConfiguration.field_configurations:type_name -> wg.cosmo.node.v1.FieldConfiguration 22, // 12: wg.cosmo.node.v1.EngineConfiguration.type_configurations:type_name -> wg.cosmo.node.v1.TypeConfiguration - 55, // 13: wg.cosmo.node.v1.EngineConfiguration.string_storage:type_name -> wg.cosmo.node.v1.EngineConfiguration.StringStorageEntry + 56, // 13: wg.cosmo.node.v1.EngineConfiguration.string_storage:type_name -> wg.cosmo.node.v1.EngineConfiguration.StringStorageEntry 2, // 14: wg.cosmo.node.v1.DataSourceConfiguration.kind:type_name -> wg.cosmo.node.v1.DataSourceKind 23, // 15: wg.cosmo.node.v1.DataSourceConfiguration.root_nodes:type_name -> wg.cosmo.node.v1.TypeField 23, // 16: wg.cosmo.node.v1.DataSourceConfiguration.child_nodes:type_name -> wg.cosmo.node.v1.TypeField 30, // 17: wg.cosmo.node.v1.DataSourceConfiguration.custom_graphql:type_name -> wg.cosmo.node.v1.DataSourceCustom_GraphQL - 36, // 18: wg.cosmo.node.v1.DataSourceConfiguration.custom_static:type_name -> wg.cosmo.node.v1.DataSourceCustom_Static - 38, // 19: wg.cosmo.node.v1.DataSourceConfiguration.directives:type_name -> wg.cosmo.node.v1.DirectiveConfiguration + 37, // 18: wg.cosmo.node.v1.DataSourceConfiguration.custom_static:type_name -> wg.cosmo.node.v1.DataSourceCustom_Static + 39, // 19: wg.cosmo.node.v1.DataSourceConfiguration.directives:type_name -> wg.cosmo.node.v1.DirectiveConfiguration 26, // 20: wg.cosmo.node.v1.DataSourceConfiguration.keys:type_name -> wg.cosmo.node.v1.RequiredField 26, // 21: wg.cosmo.node.v1.DataSourceConfiguration.provides:type_name -> wg.cosmo.node.v1.RequiredField 26, // 22: wg.cosmo.node.v1.DataSourceConfiguration.requires:type_name -> wg.cosmo.node.v1.RequiredField - 35, // 23: wg.cosmo.node.v1.DataSourceConfiguration.custom_events:type_name -> wg.cosmo.node.v1.DataSourceCustomEvents + 36, // 23: wg.cosmo.node.v1.DataSourceConfiguration.custom_events:type_name -> wg.cosmo.node.v1.DataSourceCustomEvents 27, // 24: wg.cosmo.node.v1.DataSourceConfiguration.entity_interfaces:type_name -> wg.cosmo.node.v1.EntityInterfaceConfiguration 27, // 25: wg.cosmo.node.v1.DataSourceConfiguration.interface_objects:type_name -> wg.cosmo.node.v1.EntityInterfaceConfiguration 1, // 26: wg.cosmo.node.v1.ArgumentConfiguration.source_type:type_name -> wg.cosmo.node.v1.ArgumentSource @@ -4111,55 +4189,57 @@ var file_wg_cosmo_node_v1_node_proto_depIdxs = []int32{ 19, // 28: wg.cosmo.node.v1.AuthorizationConfiguration.required_or_scopes_by_or:type_name -> wg.cosmo.node.v1.Scopes 18, // 29: wg.cosmo.node.v1.FieldConfiguration.arguments_configuration:type_name -> wg.cosmo.node.v1.ArgumentConfiguration 20, // 30: wg.cosmo.node.v1.FieldConfiguration.authorization_configuration:type_name -> wg.cosmo.node.v1.AuthorizationConfiguration - 47, // 31: wg.cosmo.node.v1.FieldConfiguration.subscription_filter_condition:type_name -> wg.cosmo.node.v1.SubscriptionFilterCondition + 48, // 31: wg.cosmo.node.v1.FieldConfiguration.subscription_filter_condition:type_name -> wg.cosmo.node.v1.SubscriptionFilterCondition 24, // 32: wg.cosmo.node.v1.FieldSetCondition.field_coordinates_path:type_name -> wg.cosmo.node.v1.FieldCoordinates 25, // 33: wg.cosmo.node.v1.RequiredField.conditions:type_name -> wg.cosmo.node.v1.FieldSetCondition - 37, // 34: wg.cosmo.node.v1.FetchConfiguration.url:type_name -> wg.cosmo.node.v1.ConfigurationVariable + 38, // 34: wg.cosmo.node.v1.FetchConfiguration.url:type_name -> wg.cosmo.node.v1.ConfigurationVariable 5, // 35: wg.cosmo.node.v1.FetchConfiguration.method:type_name -> wg.cosmo.node.v1.HTTPMethod - 56, // 36: wg.cosmo.node.v1.FetchConfiguration.header:type_name -> wg.cosmo.node.v1.FetchConfiguration.HeaderEntry - 37, // 37: wg.cosmo.node.v1.FetchConfiguration.body:type_name -> wg.cosmo.node.v1.ConfigurationVariable - 39, // 38: wg.cosmo.node.v1.FetchConfiguration.query:type_name -> wg.cosmo.node.v1.URLQueryConfiguration - 41, // 39: wg.cosmo.node.v1.FetchConfiguration.mtls:type_name -> wg.cosmo.node.v1.MTLSConfiguration - 37, // 40: wg.cosmo.node.v1.FetchConfiguration.base_url:type_name -> wg.cosmo.node.v1.ConfigurationVariable - 37, // 41: wg.cosmo.node.v1.FetchConfiguration.path:type_name -> wg.cosmo.node.v1.ConfigurationVariable - 37, // 42: wg.cosmo.node.v1.FetchConfiguration.http_proxy_url:type_name -> wg.cosmo.node.v1.ConfigurationVariable + 57, // 36: wg.cosmo.node.v1.FetchConfiguration.header:type_name -> wg.cosmo.node.v1.FetchConfiguration.HeaderEntry + 38, // 37: wg.cosmo.node.v1.FetchConfiguration.body:type_name -> wg.cosmo.node.v1.ConfigurationVariable + 40, // 38: wg.cosmo.node.v1.FetchConfiguration.query:type_name -> wg.cosmo.node.v1.URLQueryConfiguration + 42, // 39: wg.cosmo.node.v1.FetchConfiguration.mtls:type_name -> wg.cosmo.node.v1.MTLSConfiguration + 38, // 40: wg.cosmo.node.v1.FetchConfiguration.base_url:type_name -> wg.cosmo.node.v1.ConfigurationVariable + 38, // 41: wg.cosmo.node.v1.FetchConfiguration.path:type_name -> wg.cosmo.node.v1.ConfigurationVariable + 38, // 42: wg.cosmo.node.v1.FetchConfiguration.http_proxy_url:type_name -> wg.cosmo.node.v1.ConfigurationVariable 28, // 43: wg.cosmo.node.v1.DataSourceCustom_GraphQL.fetch:type_name -> wg.cosmo.node.v1.FetchConfiguration - 42, // 44: wg.cosmo.node.v1.DataSourceCustom_GraphQL.subscription:type_name -> wg.cosmo.node.v1.GraphQLSubscriptionConfiguration - 43, // 45: wg.cosmo.node.v1.DataSourceCustom_GraphQL.federation:type_name -> wg.cosmo.node.v1.GraphQLFederationConfiguration - 44, // 46: wg.cosmo.node.v1.DataSourceCustom_GraphQL.upstream_schema:type_name -> wg.cosmo.node.v1.InternedString - 45, // 47: wg.cosmo.node.v1.DataSourceCustom_GraphQL.custom_scalar_type_fields:type_name -> wg.cosmo.node.v1.SingleTypeField - 34, // 48: wg.cosmo.node.v1.NatsEventConfiguration.engine_event_configuration:type_name -> wg.cosmo.node.v1.EngineEventConfiguration + 43, // 44: wg.cosmo.node.v1.DataSourceCustom_GraphQL.subscription:type_name -> wg.cosmo.node.v1.GraphQLSubscriptionConfiguration + 44, // 45: wg.cosmo.node.v1.DataSourceCustom_GraphQL.federation:type_name -> wg.cosmo.node.v1.GraphQLFederationConfiguration + 45, // 46: wg.cosmo.node.v1.DataSourceCustom_GraphQL.upstream_schema:type_name -> wg.cosmo.node.v1.InternedString + 46, // 47: wg.cosmo.node.v1.DataSourceCustom_GraphQL.custom_scalar_type_fields:type_name -> wg.cosmo.node.v1.SingleTypeField + 35, // 48: wg.cosmo.node.v1.NatsEventConfiguration.engine_event_configuration:type_name -> wg.cosmo.node.v1.EngineEventConfiguration 31, // 49: wg.cosmo.node.v1.NatsEventConfiguration.stream_configuration:type_name -> wg.cosmo.node.v1.NatsStreamConfiguration - 34, // 50: wg.cosmo.node.v1.KafkaEventConfiguration.engine_event_configuration:type_name -> wg.cosmo.node.v1.EngineEventConfiguration - 3, // 51: wg.cosmo.node.v1.EngineEventConfiguration.type:type_name -> wg.cosmo.node.v1.EventType - 32, // 52: wg.cosmo.node.v1.DataSourceCustomEvents.nats:type_name -> wg.cosmo.node.v1.NatsEventConfiguration - 33, // 53: wg.cosmo.node.v1.DataSourceCustomEvents.kafka:type_name -> wg.cosmo.node.v1.KafkaEventConfiguration - 37, // 54: wg.cosmo.node.v1.DataSourceCustom_Static.data:type_name -> wg.cosmo.node.v1.ConfigurationVariable - 4, // 55: wg.cosmo.node.v1.ConfigurationVariable.kind:type_name -> wg.cosmo.node.v1.ConfigurationVariableKind - 37, // 56: wg.cosmo.node.v1.HTTPHeader.values:type_name -> wg.cosmo.node.v1.ConfigurationVariable - 37, // 57: wg.cosmo.node.v1.MTLSConfiguration.key:type_name -> wg.cosmo.node.v1.ConfigurationVariable - 37, // 58: wg.cosmo.node.v1.MTLSConfiguration.cert:type_name -> wg.cosmo.node.v1.ConfigurationVariable - 37, // 59: wg.cosmo.node.v1.GraphQLSubscriptionConfiguration.url:type_name -> wg.cosmo.node.v1.ConfigurationVariable - 58, // 60: wg.cosmo.node.v1.GraphQLSubscriptionConfiguration.protocol:type_name -> wg.cosmo.common.GraphQLSubscriptionProtocol - 59, // 61: wg.cosmo.node.v1.GraphQLSubscriptionConfiguration.websocketSubprotocol:type_name -> wg.cosmo.common.GraphQLWebsocketSubprotocol - 47, // 62: wg.cosmo.node.v1.SubscriptionFilterCondition.and:type_name -> wg.cosmo.node.v1.SubscriptionFilterCondition - 46, // 63: wg.cosmo.node.v1.SubscriptionFilterCondition.in:type_name -> wg.cosmo.node.v1.SubscriptionFieldCondition - 47, // 64: wg.cosmo.node.v1.SubscriptionFilterCondition.not:type_name -> wg.cosmo.node.v1.SubscriptionFilterCondition - 47, // 65: wg.cosmo.node.v1.SubscriptionFilterCondition.or:type_name -> wg.cosmo.node.v1.SubscriptionFilterCondition - 49, // 66: wg.cosmo.node.v1.CacheWarmerOperations.operations:type_name -> wg.cosmo.node.v1.Operation - 50, // 67: wg.cosmo.node.v1.Operation.request:type_name -> wg.cosmo.node.v1.OperationRequest - 53, // 68: wg.cosmo.node.v1.Operation.client:type_name -> wg.cosmo.node.v1.ClientInfo - 51, // 69: wg.cosmo.node.v1.OperationRequest.extensions:type_name -> wg.cosmo.node.v1.Extension - 52, // 70: wg.cosmo.node.v1.Extension.persisted_query:type_name -> wg.cosmo.node.v1.PersistedQuery - 8, // 71: wg.cosmo.node.v1.FeatureFlagRouterExecutionConfigs.ConfigByFeatureFlagNameEntry.value:type_name -> wg.cosmo.node.v1.FeatureFlagRouterExecutionConfig - 40, // 72: wg.cosmo.node.v1.FetchConfiguration.HeaderEntry.value:type_name -> wg.cosmo.node.v1.HTTPHeader - 14, // 73: wg.cosmo.node.v1.NodeService.SelfRegister:input_type -> wg.cosmo.node.v1.SelfRegisterRequest - 15, // 74: wg.cosmo.node.v1.NodeService.SelfRegister:output_type -> wg.cosmo.node.v1.SelfRegisterResponse - 74, // [74:75] is the sub-list for method output_type - 73, // [73:74] is the sub-list for method input_type - 73, // [73:73] is the sub-list for extension type_name - 73, // [73:73] is the sub-list for extension extendee - 0, // [0:73] is the sub-list for field type_name + 35, // 50: wg.cosmo.node.v1.KafkaEventConfiguration.engine_event_configuration:type_name -> wg.cosmo.node.v1.EngineEventConfiguration + 35, // 51: wg.cosmo.node.v1.RedisEventConfiguration.engine_event_configuration:type_name -> wg.cosmo.node.v1.EngineEventConfiguration + 3, // 52: wg.cosmo.node.v1.EngineEventConfiguration.type:type_name -> wg.cosmo.node.v1.EventType + 32, // 53: wg.cosmo.node.v1.DataSourceCustomEvents.nats:type_name -> wg.cosmo.node.v1.NatsEventConfiguration + 33, // 54: wg.cosmo.node.v1.DataSourceCustomEvents.kafka:type_name -> wg.cosmo.node.v1.KafkaEventConfiguration + 34, // 55: wg.cosmo.node.v1.DataSourceCustomEvents.redis:type_name -> wg.cosmo.node.v1.RedisEventConfiguration + 38, // 56: wg.cosmo.node.v1.DataSourceCustom_Static.data:type_name -> wg.cosmo.node.v1.ConfigurationVariable + 4, // 57: wg.cosmo.node.v1.ConfigurationVariable.kind:type_name -> wg.cosmo.node.v1.ConfigurationVariableKind + 38, // 58: wg.cosmo.node.v1.HTTPHeader.values:type_name -> wg.cosmo.node.v1.ConfigurationVariable + 38, // 59: wg.cosmo.node.v1.MTLSConfiguration.key:type_name -> wg.cosmo.node.v1.ConfigurationVariable + 38, // 60: wg.cosmo.node.v1.MTLSConfiguration.cert:type_name -> wg.cosmo.node.v1.ConfigurationVariable + 38, // 61: wg.cosmo.node.v1.GraphQLSubscriptionConfiguration.url:type_name -> wg.cosmo.node.v1.ConfigurationVariable + 59, // 62: wg.cosmo.node.v1.GraphQLSubscriptionConfiguration.protocol:type_name -> wg.cosmo.common.GraphQLSubscriptionProtocol + 60, // 63: wg.cosmo.node.v1.GraphQLSubscriptionConfiguration.websocketSubprotocol:type_name -> wg.cosmo.common.GraphQLWebsocketSubprotocol + 48, // 64: wg.cosmo.node.v1.SubscriptionFilterCondition.and:type_name -> wg.cosmo.node.v1.SubscriptionFilterCondition + 47, // 65: wg.cosmo.node.v1.SubscriptionFilterCondition.in:type_name -> wg.cosmo.node.v1.SubscriptionFieldCondition + 48, // 66: wg.cosmo.node.v1.SubscriptionFilterCondition.not:type_name -> wg.cosmo.node.v1.SubscriptionFilterCondition + 48, // 67: wg.cosmo.node.v1.SubscriptionFilterCondition.or:type_name -> wg.cosmo.node.v1.SubscriptionFilterCondition + 50, // 68: wg.cosmo.node.v1.CacheWarmerOperations.operations:type_name -> wg.cosmo.node.v1.Operation + 51, // 69: wg.cosmo.node.v1.Operation.request:type_name -> wg.cosmo.node.v1.OperationRequest + 54, // 70: wg.cosmo.node.v1.Operation.client:type_name -> wg.cosmo.node.v1.ClientInfo + 52, // 71: wg.cosmo.node.v1.OperationRequest.extensions:type_name -> wg.cosmo.node.v1.Extension + 53, // 72: wg.cosmo.node.v1.Extension.persisted_query:type_name -> wg.cosmo.node.v1.PersistedQuery + 8, // 73: wg.cosmo.node.v1.FeatureFlagRouterExecutionConfigs.ConfigByFeatureFlagNameEntry.value:type_name -> wg.cosmo.node.v1.FeatureFlagRouterExecutionConfig + 41, // 74: wg.cosmo.node.v1.FetchConfiguration.HeaderEntry.value:type_name -> wg.cosmo.node.v1.HTTPHeader + 14, // 75: wg.cosmo.node.v1.NodeService.SelfRegister:input_type -> wg.cosmo.node.v1.SelfRegisterRequest + 15, // 76: wg.cosmo.node.v1.NodeService.SelfRegister:output_type -> wg.cosmo.node.v1.SelfRegisterResponse + 76, // [76:77] is the sub-list for method output_type + 75, // [75:76] is the sub-list for method input_type + 75, // [75:75] is the sub-list for extension type_name + 75, // [75:75] is the sub-list for extension extendee + 0, // [0:75] is the sub-list for field type_name } func init() { file_wg_cosmo_node_v1_node_proto_init() } @@ -4505,7 +4585,7 @@ func file_wg_cosmo_node_v1_node_proto_init() { } } file_wg_cosmo_node_v1_node_proto_msgTypes[28].Exporter = func(v any, i int) any { - switch v := v.(*EngineEventConfiguration); i { + switch v := v.(*RedisEventConfiguration); i { case 0: return &v.state case 1: @@ -4517,7 +4597,7 @@ func file_wg_cosmo_node_v1_node_proto_init() { } } file_wg_cosmo_node_v1_node_proto_msgTypes[29].Exporter = func(v any, i int) any { - switch v := v.(*DataSourceCustomEvents); i { + switch v := v.(*EngineEventConfiguration); i { case 0: return &v.state case 1: @@ -4529,7 +4609,7 @@ func file_wg_cosmo_node_v1_node_proto_init() { } } file_wg_cosmo_node_v1_node_proto_msgTypes[30].Exporter = func(v any, i int) any { - switch v := v.(*DataSourceCustom_Static); i { + switch v := v.(*DataSourceCustomEvents); i { case 0: return &v.state case 1: @@ -4541,7 +4621,7 @@ func file_wg_cosmo_node_v1_node_proto_init() { } } file_wg_cosmo_node_v1_node_proto_msgTypes[31].Exporter = func(v any, i int) any { - switch v := v.(*ConfigurationVariable); i { + switch v := v.(*DataSourceCustom_Static); i { case 0: return &v.state case 1: @@ -4553,7 +4633,7 @@ func file_wg_cosmo_node_v1_node_proto_init() { } } file_wg_cosmo_node_v1_node_proto_msgTypes[32].Exporter = func(v any, i int) any { - switch v := v.(*DirectiveConfiguration); i { + switch v := v.(*ConfigurationVariable); i { case 0: return &v.state case 1: @@ -4565,7 +4645,7 @@ func file_wg_cosmo_node_v1_node_proto_init() { } } file_wg_cosmo_node_v1_node_proto_msgTypes[33].Exporter = func(v any, i int) any { - switch v := v.(*URLQueryConfiguration); i { + switch v := v.(*DirectiveConfiguration); i { case 0: return &v.state case 1: @@ -4577,7 +4657,7 @@ func file_wg_cosmo_node_v1_node_proto_init() { } } file_wg_cosmo_node_v1_node_proto_msgTypes[34].Exporter = func(v any, i int) any { - switch v := v.(*HTTPHeader); i { + switch v := v.(*URLQueryConfiguration); i { case 0: return &v.state case 1: @@ -4589,7 +4669,7 @@ func file_wg_cosmo_node_v1_node_proto_init() { } } file_wg_cosmo_node_v1_node_proto_msgTypes[35].Exporter = func(v any, i int) any { - switch v := v.(*MTLSConfiguration); i { + switch v := v.(*HTTPHeader); i { case 0: return &v.state case 1: @@ -4601,7 +4681,7 @@ func file_wg_cosmo_node_v1_node_proto_init() { } } file_wg_cosmo_node_v1_node_proto_msgTypes[36].Exporter = func(v any, i int) any { - switch v := v.(*GraphQLSubscriptionConfiguration); i { + switch v := v.(*MTLSConfiguration); i { case 0: return &v.state case 1: @@ -4613,7 +4693,7 @@ func file_wg_cosmo_node_v1_node_proto_init() { } } file_wg_cosmo_node_v1_node_proto_msgTypes[37].Exporter = func(v any, i int) any { - switch v := v.(*GraphQLFederationConfiguration); i { + switch v := v.(*GraphQLSubscriptionConfiguration); i { case 0: return &v.state case 1: @@ -4625,7 +4705,7 @@ func file_wg_cosmo_node_v1_node_proto_init() { } } file_wg_cosmo_node_v1_node_proto_msgTypes[38].Exporter = func(v any, i int) any { - switch v := v.(*InternedString); i { + switch v := v.(*GraphQLFederationConfiguration); i { case 0: return &v.state case 1: @@ -4637,7 +4717,7 @@ func file_wg_cosmo_node_v1_node_proto_init() { } } file_wg_cosmo_node_v1_node_proto_msgTypes[39].Exporter = func(v any, i int) any { - switch v := v.(*SingleTypeField); i { + switch v := v.(*InternedString); i { case 0: return &v.state case 1: @@ -4649,7 +4729,7 @@ func file_wg_cosmo_node_v1_node_proto_init() { } } file_wg_cosmo_node_v1_node_proto_msgTypes[40].Exporter = func(v any, i int) any { - switch v := v.(*SubscriptionFieldCondition); i { + switch v := v.(*SingleTypeField); i { case 0: return &v.state case 1: @@ -4661,7 +4741,7 @@ func file_wg_cosmo_node_v1_node_proto_init() { } } file_wg_cosmo_node_v1_node_proto_msgTypes[41].Exporter = func(v any, i int) any { - switch v := v.(*SubscriptionFilterCondition); i { + switch v := v.(*SubscriptionFieldCondition); i { case 0: return &v.state case 1: @@ -4673,7 +4753,7 @@ func file_wg_cosmo_node_v1_node_proto_init() { } } file_wg_cosmo_node_v1_node_proto_msgTypes[42].Exporter = func(v any, i int) any { - switch v := v.(*CacheWarmerOperations); i { + switch v := v.(*SubscriptionFilterCondition); i { case 0: return &v.state case 1: @@ -4685,7 +4765,7 @@ func file_wg_cosmo_node_v1_node_proto_init() { } } file_wg_cosmo_node_v1_node_proto_msgTypes[43].Exporter = func(v any, i int) any { - switch v := v.(*Operation); i { + switch v := v.(*CacheWarmerOperations); i { case 0: return &v.state case 1: @@ -4697,7 +4777,7 @@ func file_wg_cosmo_node_v1_node_proto_init() { } } file_wg_cosmo_node_v1_node_proto_msgTypes[44].Exporter = func(v any, i int) any { - switch v := v.(*OperationRequest); i { + switch v := v.(*Operation); i { case 0: return &v.state case 1: @@ -4709,7 +4789,7 @@ func file_wg_cosmo_node_v1_node_proto_init() { } } file_wg_cosmo_node_v1_node_proto_msgTypes[45].Exporter = func(v any, i int) any { - switch v := v.(*Extension); i { + switch v := v.(*OperationRequest); i { case 0: return &v.state case 1: @@ -4721,7 +4801,7 @@ func file_wg_cosmo_node_v1_node_proto_init() { } } file_wg_cosmo_node_v1_node_proto_msgTypes[46].Exporter = func(v any, i int) any { - switch v := v.(*PersistedQuery); i { + switch v := v.(*Extension); i { case 0: return &v.state case 1: @@ -4733,6 +4813,18 @@ func file_wg_cosmo_node_v1_node_proto_init() { } } file_wg_cosmo_node_v1_node_proto_msgTypes[47].Exporter = func(v any, i int) any { + switch v := v.(*PersistedQuery); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_wg_cosmo_node_v1_node_proto_msgTypes[48].Exporter = func(v any, i int) any { switch v := v.(*ClientInfo); i { case 0: return &v.state @@ -4751,15 +4843,15 @@ func file_wg_cosmo_node_v1_node_proto_init() { file_wg_cosmo_node_v1_node_proto_msgTypes[10].OneofWrappers = []any{} file_wg_cosmo_node_v1_node_proto_msgTypes[15].OneofWrappers = []any{} file_wg_cosmo_node_v1_node_proto_msgTypes[22].OneofWrappers = []any{} - file_wg_cosmo_node_v1_node_proto_msgTypes[36].OneofWrappers = []any{} - file_wg_cosmo_node_v1_node_proto_msgTypes[41].OneofWrappers = []any{} + file_wg_cosmo_node_v1_node_proto_msgTypes[37].OneofWrappers = []any{} + file_wg_cosmo_node_v1_node_proto_msgTypes[42].OneofWrappers = []any{} type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_wg_cosmo_node_v1_node_proto_rawDesc, NumEnums: 6, - NumMessages: 51, + NumMessages: 52, NumExtensions: 0, NumServices: 1, }, diff --git a/router/pkg/config/config.go b/router/pkg/config/config.go index a6e56d2d51..db0c358d0e 100644 --- a/router/pkg/config/config.go +++ b/router/pkg/config/config.go @@ -530,9 +530,15 @@ type KafkaEventSource struct { TLS *KafkaTLSConfiguration `yaml:"tls,omitempty"` } +type RedisEventSource struct { + ID string `yaml:"id,omitempty" env:"STORAGE_PROVIDER_REDIS_ID"` + URLs []string `yaml:"urls,omitempty" env:"STORAGE_PROVIDER_REDIS_URLS"` +} + type EventProviders struct { Nats []NatsEventSource `yaml:"nats,omitempty"` Kafka []KafkaEventSource `yaml:"kafka,omitempty"` + Redis []RedisEventSource `yaml:"redis,omitempty"` } type EventsConfiguration struct { diff --git a/router/pkg/pubsub/pubsub.go b/router/pkg/pubsub/pubsub.go index a42bb64ebd..0a018cb815 100644 --- a/router/pkg/pubsub/pubsub.go +++ b/router/pkg/pubsub/pubsub.go @@ -4,6 +4,7 @@ import ( "github.com/wundergraph/cosmo/router/pkg/pubsub/datasource" "github.com/wundergraph/cosmo/router/pkg/pubsub/kafka" "github.com/wundergraph/cosmo/router/pkg/pubsub/nats" + "github.com/wundergraph/cosmo/router/pkg/pubsub/redis" ) // ProvidersAndDataSourcesBuilders returns a list of all PubSub builders @@ -11,5 +12,6 @@ func ProviderBuilderFactories() []datasource.PubSubProviderBuilderFactory { return []datasource.PubSubProviderBuilderFactory{ kafka.PubSubProviderBuilderFactory, nats.PubSubProviderBuilderFactory, + redis.PubSubProviderBuilderFactory, } } diff --git a/router/pkg/pubsub/redis/adapter.go b/router/pkg/pubsub/redis/adapter.go new file mode 100644 index 0000000000..0845a166a6 --- /dev/null +++ b/router/pkg/pubsub/redis/adapter.go @@ -0,0 +1,136 @@ +package redis + +import ( + "context" + "encoding/json" + "fmt" + "sync" + + rd "github.com/wundergraph/cosmo/router/internal/persistedoperation/operationstorage/redis" + "github.com/wundergraph/cosmo/router/pkg/pubsub/datasource" + "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/resolve" + "go.uber.org/zap" +) + +// SubscriptionEventConfiguration contains configuration for subscription events +type SubscriptionEventConfiguration struct { + ProviderID string `json:"providerId"` + Channels []string `json:"channels"` +} + +// PublishAndRequestEventConfiguration contains configuration for publish events +type PublishAndRequestEventConfiguration struct { + ProviderID string `json:"providerId"` + Channel string `json:"channel"` + Data json.RawMessage `json:"data"` +} + +// AdapterInterface defines the methods that a Redis adapter should implement +type AdapterInterface interface { + // Subscribe subscribes to the given events and sends updates to the updater + Subscribe(ctx context.Context, event SubscriptionEventConfiguration, updater resolve.SubscriptionUpdater) error + // Publish publishes the given event to the specified channel + Publish(ctx context.Context, event PublishAndRequestEventConfiguration) error + // Startup initializes the adapter + Startup(ctx context.Context) error + // Shutdown gracefully shuts down the adapter + Shutdown(ctx context.Context) error +} + +func NewAdapter(logger *zap.Logger, urls []string) AdapterInterface { + return &Adapter{ + logger: logger, + urls: urls, + clusterEnabled: false, + } +} + +type Adapter struct { + ctx context.Context + conn rd.RDCloser + logger *zap.Logger + closeWg sync.WaitGroup + urls []string + clusterEnabled bool +} + +func (p *Adapter) Startup(ctx context.Context) error { + rdCloser, err := rd.NewRedisCloser(&rd.RedisCloserOptions{ + Logger: p.logger, + URLs: p.urls, + ClusterEnabled: p.clusterEnabled, + }) + if err != nil { + return err + } + + p.conn = rdCloser + p.ctx = ctx + + return nil +} + +func (p *Adapter) Shutdown(ctx context.Context) error { + return p.conn.Close() +} + +func (p *Adapter) Subscribe(ctx context.Context, event SubscriptionEventConfiguration, updater resolve.SubscriptionUpdater) error { + log := p.logger.With( + zap.String("provider_id", event.ProviderID), + zap.String("method", "subscribe"), + zap.Strings("channels", event.Channels), + ) + sub := p.conn.PSubscribe(p.ctx, event.Channels...) + msgChan := sub.Channel() + + p.closeWg.Add(1) + + var err error + go func() { + defer p.closeWg.Done() + + for { + select { + case msg := <-msgChan: + log.Debug("subscription update", zap.String("message_channel", msg.Channel), zap.String("data", msg.Payload)) + updater.Update([]byte(msg.Payload)) + case <-p.ctx.Done(): + // When the application context is done, we stop the subscriptions + err = sub.PUnsubscribe(ctx, event.Channels...) + if err != nil { + log.Error(fmt.Sprintf("error unsubscribing from redis for topics %v", event.Channels), zap.Error(err)) + } + return + case <-ctx.Done(): + // When the subscription context is done, we stop the subscription + err = sub.PUnsubscribe(context.Background(), event.Channels...) + return + } + } + }() + + return err +} + +func (p *Adapter) Publish(ctx context.Context, event PublishAndRequestEventConfiguration) error { + log := p.logger.With( + zap.String("provider_id", event.ProviderID), + zap.String("method", "publish"), + zap.String("channel", event.Channel), + ) + + log.Debug("publish", zap.ByteString("data", event.Data)) + + data, dataErr := event.Data.MarshalJSON() + if dataErr != nil { + log.Error("error marshalling data", zap.Error(dataErr)) + return datasource.NewError("error marshalling data", dataErr) + } + intCmd := p.conn.Publish(ctx, event.Channel, data) + if intCmd.Err() != nil { + log.Error("publish error", zap.Error(intCmd.Err())) + return datasource.NewError(fmt.Sprintf("error publishing to Redis PubSub channel %s", event.Channel), intCmd.Err()) + } + + return nil +} diff --git a/router/pkg/pubsub/redis/engine_datasource.go b/router/pkg/pubsub/redis/engine_datasource.go new file mode 100644 index 0000000000..cb89494d7f --- /dev/null +++ b/router/pkg/pubsub/redis/engine_datasource.go @@ -0,0 +1,81 @@ +package redis + +import ( + "bytes" + "context" + "encoding/json" + "io" + + "github.com/buger/jsonparser" + "github.com/cespare/xxhash/v2" + "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/datasource/httpclient" + "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/resolve" +) + +// SubscriptionDataSource implements resolve.SubscriptionDataSource for Redis +type SubscriptionDataSource struct { + pubSub AdapterInterface +} + +// UniqueRequestID computes a unique ID for the subscription request +func (s *SubscriptionDataSource) UniqueRequestID(ctx *resolve.Context, input []byte, xxh *xxhash.Digest) error { + val, _, _, err := jsonparser.Get(input, "channels") + if err != nil { + return err + } + + _, err = xxh.Write(val) + if err != nil { + return err + } + + val, _, _, err = jsonparser.Get(input, "providerId") + if err != nil { + return err + } + + _, err = xxh.Write(val) + return err +} + +// Start starts the subscription +func (s *SubscriptionDataSource) Start(ctx *resolve.Context, input []byte, updater resolve.SubscriptionUpdater) error { + var subscriptionConfiguration SubscriptionEventConfiguration + err := json.Unmarshal(input, &subscriptionConfiguration) + if err != nil { + return err + } + + return s.pubSub.Subscribe(ctx.Context(), subscriptionConfiguration, updater) +} + +// LoadInitialData implements the interface method (not used for this subscription type) +func (s *SubscriptionDataSource) LoadInitialData(ctx context.Context) (initial []byte, err error) { + return nil, nil +} + +// PublishDataSource implements resolve.DataSource for Redis publishing +type PublishDataSource struct { + pubSub AdapterInterface +} + +// Load processes a request to publish to Redis +func (s *PublishDataSource) Load(ctx context.Context, input []byte, out *bytes.Buffer) error { + var publishConfiguration PublishAndRequestEventConfiguration + err := json.Unmarshal(input, &publishConfiguration) + if err != nil { + return err + } + + if err := s.pubSub.Publish(ctx, publishConfiguration); err != nil { + _, err = io.WriteString(out, `{"success": false}`) + return err + } + _, err = io.WriteString(out, `{"success": true}`) + return err +} + +// LoadWithFiles implements resolve.DataSource.LoadWithFiles (not used for this type) +func (s *PublishDataSource) LoadWithFiles(ctx context.Context, input []byte, files []*httpclient.FileUpload, out *bytes.Buffer) (err error) { + panic("not implemented") +} diff --git a/router/pkg/pubsub/redis/provider.go b/router/pkg/pubsub/redis/provider.go new file mode 100644 index 0000000000..80374900b1 --- /dev/null +++ b/router/pkg/pubsub/redis/provider.go @@ -0,0 +1,33 @@ +package redis + +import ( + "context" +) + +const providerTypeID = "redis" + +// Provider implements the PubSub provider for Redis +type Provider struct { + id string + adapter AdapterInterface +} + +// ID returns the provider ID +func (p *Provider) ID() string { + return p.id +} + +// TypeID returns the provider type +func (p *Provider) TypeID() string { + return providerTypeID +} + +// Startup initializes the provider +func (p *Provider) Startup(ctx context.Context) error { + return p.adapter.Startup(ctx) +} + +// Shutdown gracefully shuts down the provider +func (p *Provider) Shutdown(ctx context.Context) error { + return p.adapter.Shutdown(ctx) +} diff --git a/router/pkg/pubsub/redis/provider_builder.go b/router/pkg/pubsub/redis/provider_builder.go new file mode 100644 index 0000000000..b828580998 --- /dev/null +++ b/router/pkg/pubsub/redis/provider_builder.go @@ -0,0 +1,123 @@ +package redis + +import ( + "context" + "fmt" + "slices" + + nodev1 "github.com/wundergraph/cosmo/router/gen/proto/wg/cosmo/node/v1" + "github.com/wundergraph/cosmo/router/pkg/config" + "github.com/wundergraph/cosmo/router/pkg/pubsub/datasource" + "go.uber.org/zap" +) + +// ProviderBuilder builds Redis PubSub providers +type PubSubProviderBuilder struct { + ctx context.Context + logger *zap.Logger + config []config.RedisEventSource + hostName string + routerListenAddr string + adapters map[string]AdapterInterface +} + +// NewProviderBuilder creates a new Redis PubSub provider builder +func NewPubSubProviderBuilder( + ctx context.Context, + config []config.RedisEventSource, + logger *zap.Logger, + hostName string, + routerListenAddr string, +) *PubSubProviderBuilder { + return &PubSubProviderBuilder{ + ctx: ctx, + config: config, + logger: logger, + hostName: hostName, + routerListenAddr: routerListenAddr, + adapters: make(map[string]AdapterInterface), + } +} + +// TypeID returns the provider type ID +func (b *PubSubProviderBuilder) TypeID() string { + return providerTypeID +} + +// Providers returns the Redis PubSub providers for the given provider IDs +func (b *PubSubProviderBuilder) Providers(ids []string) ([]datasource.PubSubProvider, error) { + b.adapters = make(map[string]AdapterInterface) + var providers []datasource.PubSubProvider + + if len(ids) == 0 { + return providers, nil + } + + // Create providers for each requested ID + for _, provider := range b.config { + if !slices.Contains(ids, provider.ID) { + continue + } + + adapter := NewAdapter(b.logger, provider.URLs) + if err := adapter.Startup(b.ctx); err != nil { + return nil, fmt.Errorf("failed to start Redis adapter for provider with ID \"%s\": %w", provider.ID, err) + } + + pubSubProvider := &Provider{ + id: provider.ID, + adapter: adapter, + } + b.adapters[provider.ID] = adapter + providers = append(providers, pubSubProvider) + } + + // Check that all requested providers were found + for _, id := range ids { + if _, ok := b.adapters[id]; !ok { + return nil, fmt.Errorf("%s provider with ID %s is not defined", b.TypeID(), id) + } + } + + return providers, nil +} + +// DataSource creates a Redis PubSub data source for the given event configuration +func (b *PubSubProviderBuilder) DataSource(data datasource.EngineEventConfiguration) (datasource.PubSubDataSource, error) { + redisEvent, ok := data.(*nodev1.RedisEventConfiguration) + if !ok { + return nil, fmt.Errorf("failed to cast data to RedisEventConfiguration") + } + providerId := redisEvent.GetEngineEventConfiguration().GetProviderId() + return &PubSubDataSource{ + EventConfiguration: redisEvent, + RedisAdapter: b.adapters[providerId], + }, nil +} + +// EngineEventConfigurations returns an empty slice since Redis is not yet in proto +func (b *PubSubProviderBuilder) EngineEventConfigurations(in *nodev1.DataSourceConfiguration) []datasource.EngineEventConfiguration { + redisData := make([]datasource.EngineEventConfiguration, 0, len(in.GetCustomEvents().GetRedis())) + for _, redisEvent := range in.GetCustomEvents().GetRedis() { + redisData = append(redisData, redisEvent) + } + + return redisData +} + +// PubSubProviderBuilderFactory creates a Redis PubSub provider builder +func PubSubProviderBuilderFactory( + ctx context.Context, + config config.EventsConfiguration, + logger *zap.Logger, + hostName string, + routerListenAddr string, +) datasource.PubSubProviderBuilder { + return &PubSubProviderBuilder{ + ctx: ctx, + config: config.Providers.Redis, + logger: logger, + hostName: hostName, + routerListenAddr: routerListenAddr, + } +} diff --git a/router/pkg/pubsub/redis/pubsub_datasource.go b/router/pkg/pubsub/redis/pubsub_datasource.go new file mode 100644 index 0000000000..3e636e66e9 --- /dev/null +++ b/router/pkg/pubsub/redis/pubsub_datasource.go @@ -0,0 +1,89 @@ +package redis + +import ( + "encoding/json" + "fmt" + + nodev1 "github.com/wundergraph/cosmo/router/gen/proto/wg/cosmo/node/v1" + "github.com/wundergraph/cosmo/router/pkg/pubsub/datasource" + "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/resolve" +) + +// PubSubDataSource implements the datasource.PubSubDataSource interface for Redis +type PubSubDataSource struct { + EventConfiguration *nodev1.RedisEventConfiguration + RedisAdapter AdapterInterface +} + +// EngineEventConfiguration returns the engine event configuration +func (c *PubSubDataSource) EngineEventConfiguration() *nodev1.EngineEventConfiguration { + return c.EventConfiguration.GetEngineEventConfiguration() +} + +// ResolveDataSource returns the appropriate data source based on the event type +func (c *PubSubDataSource) ResolveDataSource() (resolve.DataSource, error) { + var dataSource resolve.DataSource + + eventType := c.EventConfiguration.GetEngineEventConfiguration().GetType() + switch eventType { + case nodev1.EventType_PUBLISH: + dataSource = &PublishDataSource{ + pubSub: c.RedisAdapter, + } + default: + return nil, fmt.Errorf("failed to configure fetch: invalid event type \"%s\" for Redis", eventType.String()) + } + + return dataSource, nil +} + +// ResolveDataSourceInput builds the input for the data source +func (c *PubSubDataSource) ResolveDataSourceInput(eventData []byte) (string, error) { + channels := c.EventConfiguration.GetChannels() + + if len(channels) != 1 { + return "", fmt.Errorf("publish events should define one channel but received %d", len(channels)) + } + + channel := channels[0] + providerId := c.EventConfiguration.GetEngineEventConfiguration().GetProviderId() + + evtCfg := PublishAndRequestEventConfiguration{ + ProviderID: providerId, + Channel: channel, + Data: eventData, + } + + object, err := json.Marshal(evtCfg) + if err != nil { + return "", fmt.Errorf("failed to marshal publish event configuration: %w", err) + } + return string(object), nil +} + +// ResolveDataSourceSubscription returns the subscription data source +func (c *PubSubDataSource) ResolveDataSourceSubscription() (resolve.SubscriptionDataSource, error) { + return &SubscriptionDataSource{ + pubSub: c.RedisAdapter, + }, nil +} + +// ResolveDataSourceSubscriptionInput builds the input for the subscription data source +func (c *PubSubDataSource) ResolveDataSourceSubscriptionInput() (string, error) { + providerId := c.EventConfiguration.GetEngineEventConfiguration().GetProviderId() + evtCfg := SubscriptionEventConfiguration{ + ProviderID: providerId, + Channels: c.EventConfiguration.GetChannels(), + } + object, err := json.Marshal(evtCfg) + if err != nil { + return "", fmt.Errorf("failed to marshal event subscription configuration") + } + return string(object), nil +} + +// TransformEventData transforms the event data using the extract function +func (c *PubSubDataSource) TransformEventData(extractFn datasource.ArgumentTemplateCallback) error { + // No operation needed until full proto support is added + return nil +} From 0689f070fbb1a37e1bc1b62daead05edf56f103c Mon Sep 17 00:00:00 2001 From: Alessandro Pagnin Date: Mon, 26 May 2025 08:18:20 +0200 Subject: [PATCH 063/126] feat: add EDFS Redis publish and subscribe constants --- composition/src/v1/utils/constants.ts | 2 ++ composition/src/v1/utils/string-constants.ts | 4 ++++ 2 files changed, 6 insertions(+) diff --git a/composition/src/v1/utils/constants.ts b/composition/src/v1/utils/constants.ts index 97f5af2bcc..0089aa8576 100644 --- a/composition/src/v1/utils/constants.ts +++ b/composition/src/v1/utils/constants.ts @@ -503,6 +503,8 @@ export const ALL_IN_BUILT_DIRECTIVE_NAMES = new Set([ EDFS_NATS_SUBSCRIBE, EDFS_KAFKA_PUBLISH, EDFS_KAFKA_SUBSCRIBE, + EDFS_REDIS_PUBLISH, + EDFS_REDIS_SUBSCRIBE, EXTENDS, EXTERNAL, INACCESSIBLE, diff --git a/composition/src/v1/utils/string-constants.ts b/composition/src/v1/utils/string-constants.ts index 7cfbae25e4..e4ac905a94 100644 --- a/composition/src/v1/utils/string-constants.ts +++ b/composition/src/v1/utils/string-constants.ts @@ -8,6 +8,8 @@ import { EDFS_NATS_PUBLISH, EDFS_NATS_REQUEST, EDFS_NATS_SUBSCRIBE, + EDFS_REDIS_PUBLISH, + EDFS_REDIS_SUBSCRIBE, ENUM_UPPER, ENUM_VALUE_UPPER, FIELD_DEFINITION_UPPER, @@ -44,6 +46,8 @@ export const EVENT_DIRECTIVE_NAMES = new Set([ EDFS_NATS_PUBLISH, EDFS_NATS_REQUEST, EDFS_NATS_SUBSCRIBE, + EDFS_REDIS_PUBLISH, + EDFS_REDIS_SUBSCRIBE, ]); export const STREAM_CONFIGURATION_FIELD_NAMES = new Set([ From 703bb2947e673b9e53e9a1d0aba063e7f277c40a Mon Sep 17 00:00:00 2001 From: Alessandro Pagnin Date: Mon, 26 May 2025 08:25:56 +0200 Subject: [PATCH 064/126] chore: generate index.global.js --- composition-go/index.global.js | 364 ++++++++++++++++----------------- 1 file changed, 182 insertions(+), 182 deletions(-) diff --git a/composition-go/index.global.js b/composition-go/index.global.js index fda0b63b99..2d57c298f0 100644 --- a/composition-go/index.global.js +++ b/composition-go/index.global.js @@ -11,17 +11,17 @@ class URL { } } } -"use strict";var shim=(()=>{var OY=Object.create;var nd=Object.defineProperty,bY=Object.defineProperties,DY=Object.getOwnPropertyDescriptor,AY=Object.getOwnPropertyDescriptors,RY=Object.getOwnPropertyNames,tA=Object.getOwnPropertySymbols,FY=Object.getPrototypeOf,nA=Object.prototype.hasOwnProperty,PY=Object.prototype.propertyIsEnumerable;var nn=Math.pow,ty=(e,t,n)=>t in e?nd(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,k=(e,t)=>{for(var n in t||(t={}))nA.call(t,n)&&ty(e,n,t[n]);if(tA)for(var n of tA(t))PY.call(t,n)&&ty(e,n,t[n]);return e},Q=(e,t)=>bY(e,AY(t));var yu=(e,t)=>()=>(e&&(t=e(e=0)),t);var P=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),Vf=(e,t)=>{for(var n in t)nd(e,n,{get:t[n],enumerable:!0})},rA=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of RY(t))!nA.call(e,i)&&i!==n&&nd(e,i,{get:()=>t[i],enumerable:!(r=DY(t,i))||r.enumerable});return e};var os=(e,t,n)=>(n=e!=null?OY(FY(e)):{},rA(t||!e||!e.__esModule?nd(n,"default",{value:e,enumerable:!0}):n,e)),jf=e=>rA(nd({},"__esModule",{value:!0}),e);var v=(e,t,n)=>(ty(e,typeof t!="symbol"?t+"":t,n),n);var vi=(e,t,n)=>new Promise((r,i)=>{var a=l=>{try{c(n.next(l))}catch(p){i(p)}},o=l=>{try{c(n.throw(l))}catch(p){i(p)}},c=l=>l.done?r(l.value):Promise.resolve(l.value).then(a,o);c((n=n.apply(e,t)).next())});var f=yu(()=>{"use strict"});var O={};Vf(O,{_debugEnd:()=>$A,_debugProcess:()=>GA,_events:()=>oR,_eventsCount:()=>uR,_exiting:()=>OA,_fatalExceptions:()=>qA,_getActiveHandles:()=>RA,_getActiveRequests:()=>AA,_kill:()=>PA,_linkedBinding:()=>vA,_maxListeners:()=>sR,_preload_modules:()=>rR,_rawDebug:()=>gA,_startProfilerIdleNotifier:()=>QA,_stopProfilerIdleNotifier:()=>YA,_tickCallback:()=>KA,abort:()=>WA,addListener:()=>cR,allowedNodeEnvironmentFlags:()=>kA,arch:()=>uA,argv:()=>dA,argv0:()=>nR,assert:()=>MA,binding:()=>NA,chdir:()=>yA,config:()=>bA,cpuUsage:()=>$f,cwd:()=>EA,debugPort:()=>tR,default:()=>ER,dlopen:()=>DA,domain:()=>SA,emit:()=>mR,emitWarning:()=>TA,env:()=>lA,execArgv:()=>pA,execPath:()=>eR,exit:()=>BA,features:()=>xA,hasUncaughtExceptionCaptureCallback:()=>jA,hrtime:()=>Gf,kill:()=>CA,listeners:()=>hR,memoryUsage:()=>LA,moduleLoadList:()=>_A,nextTick:()=>aA,off:()=>dR,on:()=>cs,once:()=>lR,openStdin:()=>UA,pid:()=>XA,platform:()=>cA,ppid:()=>ZA,prependListener:()=>TR,prependOnceListener:()=>NR,reallyExit:()=>FA,release:()=>IA,removeAllListeners:()=>fR,removeListener:()=>pR,resourceUsage:()=>wA,setSourceMapsEnabled:()=>iR,setUncaughtExceptionCaptureCallback:()=>VA,stderr:()=>HA,stdin:()=>zA,stdout:()=>JA,title:()=>oA,umask:()=>hA,uptime:()=>aR,version:()=>fA,versions:()=>mA});function iy(e){throw new Error("Node.js process "+e+" is not supported by JSPM core outside of Node.js")}function wY(){!Lc||!Iu||(Lc=!1,Iu.length?us=Iu.concat(us):Kf=-1,us.length&&iA())}function iA(){if(!Lc){var e=setTimeout(wY,0);Lc=!0;for(var t=us.length;t;){for(Iu=us,us=[];++Kf1)for(var n=1;n{"use strict";f();T();m();us=[],Lc=!1,Kf=-1;sA.prototype.run=function(){this.fun.apply(null,this.array)};oA="browser",uA="x64",cA="browser",lA={PATH:"/usr/bin",LANG:navigator.language+".UTF-8",PWD:"/",HOME:"/home",TMP:"/tmp"},dA=["/usr/bin/node"],pA=[],fA="v16.8.0",mA={},TA=function(e,t){console.warn((t?t+": ":"")+e)},NA=function(e){iy("binding")},hA=function(e){return 0},EA=function(){return"/"},yA=function(e){},IA={name:"node",sourceUrl:"",headersUrl:"",libUrl:""};gA=yr,_A=[];SA={},OA=!1,bA={};FA=yr,PA=yr,$f=function(){return{}},wA=$f,LA=$f,CA=yr,BA=yr,UA=yr,kA={};xA={inspector:!1,debug:!1,uv:!1,ipv6:!1,tls_alpn:!1,tls_sni:!1,tls_ocsp:!1,tls:!1,cached_builtins:!0},qA=yr,VA=yr;KA=yr,GA=yr,$A=yr,QA=yr,YA=yr,JA=void 0,HA=void 0,zA=void 0,WA=yr,XA=2,ZA=1,eR="/bin/usr/node",tR=9229,nR="node",rR=[],iR=yr,Bo={now:typeof performance!="undefined"?performance.now.bind(performance):void 0,timing:typeof performance!="undefined"?performance.timing:void 0};Bo.now===void 0&&(ny=Date.now(),Bo.timing&&Bo.timing.navigationStart&&(ny=Bo.timing.navigationStart),Bo.now=()=>Date.now()-ny);ry=1e9;Gf.bigint=function(e){var t=Gf(e);return typeof BigInt=="undefined"?t[0]*ry+t[1]:BigInt(t[0]*ry)+BigInt(t[1])};sR=10,oR={},uR=0;cR=cs,lR=cs,dR=cs,pR=cs,fR=cs,mR=yr,TR=cs,NR=cs;ER={version:fA,versions:mA,arch:uA,platform:cA,release:IA,_rawDebug:gA,moduleLoadList:_A,binding:NA,_linkedBinding:vA,_events:oR,_eventsCount:uR,_maxListeners:sR,on:cs,addListener:cR,once:lR,off:dR,removeListener:pR,removeAllListeners:fR,emit:mR,prependListener:TR,prependOnceListener:NR,listeners:hR,domain:SA,_exiting:OA,config:bA,dlopen:DA,uptime:aR,_getActiveRequests:AA,_getActiveHandles:RA,reallyExit:FA,_kill:PA,cpuUsage:$f,resourceUsage:wA,memoryUsage:LA,kill:CA,exit:BA,openStdin:UA,allowedNodeEnvironmentFlags:kA,assert:MA,features:xA,_fatalExceptions:qA,setUncaughtExceptionCaptureCallback:VA,hasUncaughtExceptionCaptureCallback:jA,emitWarning:TA,nextTick:aA,_tickCallback:KA,_debugProcess:GA,_debugEnd:$A,_startProfilerIdleNotifier:QA,_stopProfilerIdleNotifier:YA,stdout:JA,stdin:zA,stderr:HA,abort:WA,umask:hA,chdir:yA,cwd:EA,env:lA,title:oA,argv:dA,execArgv:pA,pid:XA,ppid:ZA,execPath:eR,debugPort:tR,hrtime:Gf,argv0:nR,_preload_modules:rR,setSourceMapsEnabled:iR}});var m=yu(()=>{"use strict";yR()});function LY(){if(IR)return rd;IR=!0,rd.byteLength=c,rd.toByteArray=p,rd.fromByteArray=g;for(var e=[],t=[],n=typeof Uint8Array!="undefined"?Uint8Array:Array,r="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",i=0,a=r.length;i0)throw new Error("Invalid string. Length must be a multiple of 4");var B=_.indexOf("=");B===-1&&(B=F);var j=B===F?0:4-B%4;return[B,j]}function c(_){var F=o(_),B=F[0],j=F[1];return(B+j)*3/4-j}function l(_,F,B){return(F+B)*3/4-B}function p(_){var F,B=o(_),j=B[0],J=B[1],Z=new n(l(_,j,J)),W=0,Ne=J>0?j-4:j,le;for(le=0;le>16&255,Z[W++]=F>>8&255,Z[W++]=F&255;return J===2&&(F=t[_.charCodeAt(le)]<<2|t[_.charCodeAt(le+1)]>>4,Z[W++]=F&255),J===1&&(F=t[_.charCodeAt(le)]<<10|t[_.charCodeAt(le+1)]<<4|t[_.charCodeAt(le+2)]>>2,Z[W++]=F>>8&255,Z[W++]=F&255),Z}function N(_){return e[_>>18&63]+e[_>>12&63]+e[_>>6&63]+e[_&63]}function y(_,F,B){for(var j,J=[],Z=F;ZNe?Ne:W+Z));return j===1?(F=_[B-1],J.push(e[F>>2]+e[F<<4&63]+"==")):j===2&&(F=(_[B-2]<<8)+_[B-1],J.push(e[F>>10]+e[F>>4&63]+e[F<<2&63]+"=")),J.join("")}return rd}function CY(){if(gR)return Qf;gR=!0;return Qf.read=function(e,t,n,r,i){var a,o,c=i*8-r-1,l=(1<>1,N=-7,y=n?i-1:0,g=n?-1:1,_=e[t+y];for(y+=g,a=_&(1<<-N)-1,_>>=-N,N+=c;N>0;a=a*256+e[t+y],y+=g,N-=8);for(o=a&(1<<-N)-1,a>>=-N,N+=r;N>0;o=o*256+e[t+y],y+=g,N-=8);if(a===0)a=1-p;else{if(a===l)return o?NaN:(_?-1:1)*(1/0);o=o+Math.pow(2,r),a=a-p}return(_?-1:1)*o*Math.pow(2,a-r)},Qf.write=function(e,t,n,r,i,a){var o,c,l,p=a*8-i-1,N=(1<>1,g=i===23?Math.pow(2,-24)-Math.pow(2,-77):0,_=r?0:a-1,F=r?1:-1,B=t<0||t===0&&1/t<0?1:0;for(t=Math.abs(t),isNaN(t)||t===1/0?(c=isNaN(t)?1:0,o=N):(o=Math.floor(Math.log(t)/Math.LN2),t*(l=Math.pow(2,-o))<1&&(o--,l*=2),o+y>=1?t+=g/l:t+=g*Math.pow(2,1-y),t*l>=2&&(o++,l/=2),o+y>=N?(c=0,o=N):o+y>=1?(c=(t*l-1)*Math.pow(2,i),o=o+y):(c=t*Math.pow(2,y-1)*Math.pow(2,i),o=0));i>=8;e[n+_]=c&255,_+=F,c/=256,i-=8);for(o=o<0;e[n+_]=o&255,_+=F,o/=256,p-=8);e[n+_-F]|=B*128},Qf}function BY(){if(_R)return gu;_R=!0;let e=LY(),t=CY(),n=typeof Symbol=="function"&&typeof Symbol.for=="function"?Symbol.for("nodejs.util.inspect.custom"):null;gu.Buffer=o,gu.SlowBuffer=J,gu.INSPECT_MAX_BYTES=50;let r=2147483647;gu.kMaxLength=r,o.TYPED_ARRAY_SUPPORT=i(),!o.TYPED_ARRAY_SUPPORT&&typeof console!="undefined"&&typeof console.error=="function"&&console.error("This browser lacks typed array (Uint8Array) support which is required by `buffer` v5.x. Use `buffer` v4.x if you require old browser support.");function i(){try{let A=new Uint8Array(1),E={foo:function(){return 42}};return Object.setPrototypeOf(E,Uint8Array.prototype),Object.setPrototypeOf(A,E),A.foo()===42}catch(A){return!1}}Object.defineProperty(o.prototype,"parent",{enumerable:!0,get:function(){if(o.isBuffer(this))return this.buffer}}),Object.defineProperty(o.prototype,"offset",{enumerable:!0,get:function(){if(o.isBuffer(this))return this.byteOffset}});function a(A){if(A>r)throw new RangeError('The value "'+A+'" is invalid for option "size"');let E=new Uint8Array(A);return Object.setPrototypeOf(E,o.prototype),E}function o(A,E,I){if(typeof A=="number"){if(typeof E=="string")throw new TypeError('The "string" argument must be of type string. Received type number');return N(A)}return c(A,E,I)}o.poolSize=8192;function c(A,E,I){if(typeof A=="string")return y(A,E);if(ArrayBuffer.isView(A))return _(A);if(A==null)throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof A);if(kt(A,ArrayBuffer)||A&&kt(A.buffer,ArrayBuffer)||typeof SharedArrayBuffer!="undefined"&&(kt(A,SharedArrayBuffer)||A&&kt(A.buffer,SharedArrayBuffer)))return F(A,E,I);if(typeof A=="number")throw new TypeError('The "value" argument must not be of type number. Received type number');let C=A.valueOf&&A.valueOf();if(C!=null&&C!==A)return o.from(C,E,I);let G=B(A);if(G)return G;if(typeof Symbol!="undefined"&&Symbol.toPrimitive!=null&&typeof A[Symbol.toPrimitive]=="function")return o.from(A[Symbol.toPrimitive]("string"),E,I);throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof A)}o.from=function(A,E,I){return c(A,E,I)},Object.setPrototypeOf(o.prototype,Uint8Array.prototype),Object.setPrototypeOf(o,Uint8Array);function l(A){if(typeof A!="number")throw new TypeError('"size" argument must be of type number');if(A<0)throw new RangeError('The value "'+A+'" is invalid for option "size"')}function p(A,E,I){return l(A),A<=0?a(A):E!==void 0?typeof I=="string"?a(A).fill(E,I):a(A).fill(E):a(A)}o.alloc=function(A,E,I){return p(A,E,I)};function N(A){return l(A),a(A<0?0:j(A)|0)}o.allocUnsafe=function(A){return N(A)},o.allocUnsafeSlow=function(A){return N(A)};function y(A,E){if((typeof E!="string"||E==="")&&(E="utf8"),!o.isEncoding(E))throw new TypeError("Unknown encoding: "+E);let I=Z(A,E)|0,C=a(I),G=C.write(A,E);return G!==I&&(C=C.slice(0,G)),C}function g(A){let E=A.length<0?0:j(A.length)|0,I=a(E);for(let C=0;C=r)throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+r.toString(16)+" bytes");return A|0}function J(A){return+A!=A&&(A=0),o.alloc(+A)}o.isBuffer=function(E){return E!=null&&E._isBuffer===!0&&E!==o.prototype},o.compare=function(E,I){if(kt(E,Uint8Array)&&(E=o.from(E,E.offset,E.byteLength)),kt(I,Uint8Array)&&(I=o.from(I,I.offset,I.byteLength)),!o.isBuffer(E)||!o.isBuffer(I))throw new TypeError('The "buf1", "buf2" arguments must be one of type Buffer or Uint8Array');if(E===I)return 0;let C=E.length,G=I.length;for(let ee=0,ce=Math.min(C,G);eeG.length?(o.isBuffer(ce)||(ce=o.from(ce)),ce.copy(G,ee)):Uint8Array.prototype.set.call(G,ce,ee);else if(o.isBuffer(ce))ce.copy(G,ee);else throw new TypeError('"list" argument must be an Array of Buffers');ee+=ce.length}return G};function Z(A,E){if(o.isBuffer(A))return A.length;if(ArrayBuffer.isView(A)||kt(A,ArrayBuffer))return A.byteLength;if(typeof A!="string")throw new TypeError('The "string" argument must be one of type string, Buffer, or ArrayBuffer. Received type '+typeof A);let I=A.length,C=arguments.length>2&&arguments[2]===!0;if(!C&&I===0)return 0;let G=!1;for(;;)switch(E){case"ascii":case"latin1":case"binary":return I;case"utf8":case"utf-8":return Wa(A).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return I*2;case"hex":return I>>>1;case"base64":return mr(A).length;default:if(G)return C?-1:Wa(A).length;E=(""+E).toLowerCase(),G=!0}}o.byteLength=Z;function W(A,E,I){let C=!1;if((E===void 0||E<0)&&(E=0),E>this.length||((I===void 0||I>this.length)&&(I=this.length),I<=0)||(I>>>=0,E>>>=0,I<=E))return"";for(A||(A="utf8");;)switch(A){case"hex":return Fr(this,E,I);case"utf8":case"utf-8":return zt(this,E,I);case"ascii":return cn(this,E,I);case"latin1":case"binary":return Rr(this,E,I);case"base64":return Ht(this,E,I);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return kn(this,E,I);default:if(C)throw new TypeError("Unknown encoding: "+A);A=(A+"").toLowerCase(),C=!0}}o.prototype._isBuffer=!0;function Ne(A,E,I){let C=A[E];A[E]=A[I],A[I]=C}o.prototype.swap16=function(){let E=this.length;if(E%2!==0)throw new RangeError("Buffer size must be a multiple of 16-bits");for(let I=0;II&&(E+=" ... "),""},n&&(o.prototype[n]=o.prototype.inspect),o.prototype.compare=function(E,I,C,G,ee){if(kt(E,Uint8Array)&&(E=o.from(E,E.offset,E.byteLength)),!o.isBuffer(E))throw new TypeError('The "target" argument must be one of type Buffer or Uint8Array. Received type '+typeof E);if(I===void 0&&(I=0),C===void 0&&(C=E?E.length:0),G===void 0&&(G=0),ee===void 0&&(ee=this.length),I<0||C>E.length||G<0||ee>this.length)throw new RangeError("out of range index");if(G>=ee&&I>=C)return 0;if(G>=ee)return-1;if(I>=C)return 1;if(I>>>=0,C>>>=0,G>>>=0,ee>>>=0,this===E)return 0;let ce=ee-G,dt=C-I,ln=Math.min(ce,dt),tn=this.slice(G,ee),Tn=E.slice(I,C);for(let Wt=0;Wt2147483647?I=2147483647:I<-2147483648&&(I=-2147483648),I=+I,Tr(I)&&(I=G?0:A.length-1),I<0&&(I=A.length+I),I>=A.length){if(G)return-1;I=A.length-1}else if(I<0)if(G)I=0;else return-1;if(typeof E=="string"&&(E=o.from(E,C)),o.isBuffer(E))return E.length===0?-1:we(A,E,I,C,G);if(typeof E=="number")return E=E&255,typeof Uint8Array.prototype.indexOf=="function"?G?Uint8Array.prototype.indexOf.call(A,E,I):Uint8Array.prototype.lastIndexOf.call(A,E,I):we(A,[E],I,C,G);throw new TypeError("val must be string, number or Buffer")}function we(A,E,I,C,G){let ee=1,ce=A.length,dt=E.length;if(C!==void 0&&(C=String(C).toLowerCase(),C==="ucs2"||C==="ucs-2"||C==="utf16le"||C==="utf-16le")){if(A.length<2||E.length<2)return-1;ee=2,ce/=2,dt/=2,I/=2}function ln(Tn,Wt){return ee===1?Tn[Wt]:Tn.readUInt16BE(Wt*ee)}let tn;if(G){let Tn=-1;for(tn=I;tnce&&(I=ce-dt),tn=I;tn>=0;tn--){let Tn=!0;for(let Wt=0;WtG&&(C=G)):C=G;let ee=E.length;C>ee/2&&(C=ee/2);let ce;for(ce=0;ce>>0,isFinite(C)?(C=C>>>0,G===void 0&&(G="utf8")):(G=C,C=void 0);else throw new Error("Buffer.write(string, encoding, offset[, length]) is no longer supported");let ee=this.length-I;if((C===void 0||C>ee)&&(C=ee),E.length>0&&(C<0||I<0)||I>this.length)throw new RangeError("Attempt to write outside buffer bounds");G||(G="utf8");let ce=!1;for(;;)switch(G){case"hex":return qe(this,E,I,C);case"utf8":case"utf-8":return et(this,E,I,C);case"ascii":case"latin1":case"binary":return X(this,E,I,C);case"base64":return ve(this,E,I,C);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return gt(this,E,I,C);default:if(ce)throw new TypeError("Unknown encoding: "+G);G=(""+G).toLowerCase(),ce=!0}},o.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};function Ht(A,E,I){return E===0&&I===A.length?e.fromByteArray(A):e.fromByteArray(A.slice(E,I))}function zt(A,E,I){I=Math.min(A.length,I);let C=[],G=E;for(;G239?4:ee>223?3:ee>191?2:1;if(G+dt<=I){let ln,tn,Tn,Wt;switch(dt){case 1:ee<128&&(ce=ee);break;case 2:ln=A[G+1],(ln&192)===128&&(Wt=(ee&31)<<6|ln&63,Wt>127&&(ce=Wt));break;case 3:ln=A[G+1],tn=A[G+2],(ln&192)===128&&(tn&192)===128&&(Wt=(ee&15)<<12|(ln&63)<<6|tn&63,Wt>2047&&(Wt<55296||Wt>57343)&&(ce=Wt));break;case 4:ln=A[G+1],tn=A[G+2],Tn=A[G+3],(ln&192)===128&&(tn&192)===128&&(Tn&192)===128&&(Wt=(ee&15)<<18|(ln&63)<<12|(tn&63)<<6|Tn&63,Wt>65535&&Wt<1114112&&(ce=Wt))}}ce===null?(ce=65533,dt=1):ce>65535&&(ce-=65536,C.push(ce>>>10&1023|55296),ce=56320|ce&1023),C.push(ce),G+=dt}return qt(C)}let Dn=4096;function qt(A){let E=A.length;if(E<=Dn)return String.fromCharCode.apply(String,A);let I="",C=0;for(;CC)&&(I=C);let G="";for(let ee=E;eeC&&(E=C),I<0?(I+=C,I<0&&(I=0)):I>C&&(I=C),II)throw new RangeError("Trying to access beyond buffer length")}o.prototype.readUintLE=o.prototype.readUIntLE=function(E,I,C){E=E>>>0,I=I>>>0,C||$t(E,I,this.length);let G=this[E],ee=1,ce=0;for(;++ce>>0,I=I>>>0,C||$t(E,I,this.length);let G=this[E+--I],ee=1;for(;I>0&&(ee*=256);)G+=this[E+--I]*ee;return G},o.prototype.readUint8=o.prototype.readUInt8=function(E,I){return E=E>>>0,I||$t(E,1,this.length),this[E]},o.prototype.readUint16LE=o.prototype.readUInt16LE=function(E,I){return E=E>>>0,I||$t(E,2,this.length),this[E]|this[E+1]<<8},o.prototype.readUint16BE=o.prototype.readUInt16BE=function(E,I){return E=E>>>0,I||$t(E,2,this.length),this[E]<<8|this[E+1]},o.prototype.readUint32LE=o.prototype.readUInt32LE=function(E,I){return E=E>>>0,I||$t(E,4,this.length),(this[E]|this[E+1]<<8|this[E+2]<<16)+this[E+3]*16777216},o.prototype.readUint32BE=o.prototype.readUInt32BE=function(E,I){return E=E>>>0,I||$t(E,4,this.length),this[E]*16777216+(this[E+1]<<16|this[E+2]<<8|this[E+3])},o.prototype.readBigUInt64LE=Ia(function(E){E=E>>>0,tt(E,"offset");let I=this[E],C=this[E+7];(I===void 0||C===void 0)&&Dt(E,this.length-8);let G=I+this[++E]*nn(2,8)+this[++E]*nn(2,16)+this[++E]*nn(2,24),ee=this[++E]+this[++E]*nn(2,8)+this[++E]*nn(2,16)+C*nn(2,24);return BigInt(G)+(BigInt(ee)<>>0,tt(E,"offset");let I=this[E],C=this[E+7];(I===void 0||C===void 0)&&Dt(E,this.length-8);let G=I*nn(2,24)+this[++E]*nn(2,16)+this[++E]*nn(2,8)+this[++E],ee=this[++E]*nn(2,24)+this[++E]*nn(2,16)+this[++E]*nn(2,8)+C;return(BigInt(G)<>>0,I=I>>>0,C||$t(E,I,this.length);let G=this[E],ee=1,ce=0;for(;++ce=ee&&(G-=Math.pow(2,8*I)),G},o.prototype.readIntBE=function(E,I,C){E=E>>>0,I=I>>>0,C||$t(E,I,this.length);let G=I,ee=1,ce=this[E+--G];for(;G>0&&(ee*=256);)ce+=this[E+--G]*ee;return ee*=128,ce>=ee&&(ce-=Math.pow(2,8*I)),ce},o.prototype.readInt8=function(E,I){return E=E>>>0,I||$t(E,1,this.length),this[E]&128?(255-this[E]+1)*-1:this[E]},o.prototype.readInt16LE=function(E,I){E=E>>>0,I||$t(E,2,this.length);let C=this[E]|this[E+1]<<8;return C&32768?C|4294901760:C},o.prototype.readInt16BE=function(E,I){E=E>>>0,I||$t(E,2,this.length);let C=this[E+1]|this[E]<<8;return C&32768?C|4294901760:C},o.prototype.readInt32LE=function(E,I){return E=E>>>0,I||$t(E,4,this.length),this[E]|this[E+1]<<8|this[E+2]<<16|this[E+3]<<24},o.prototype.readInt32BE=function(E,I){return E=E>>>0,I||$t(E,4,this.length),this[E]<<24|this[E+1]<<16|this[E+2]<<8|this[E+3]},o.prototype.readBigInt64LE=Ia(function(E){E=E>>>0,tt(E,"offset");let I=this[E],C=this[E+7];(I===void 0||C===void 0)&&Dt(E,this.length-8);let G=this[E+4]+this[E+5]*nn(2,8)+this[E+6]*nn(2,16)+(C<<24);return(BigInt(G)<>>0,tt(E,"offset");let I=this[E],C=this[E+7];(I===void 0||C===void 0)&&Dt(E,this.length-8);let G=(I<<24)+this[++E]*nn(2,16)+this[++E]*nn(2,8)+this[++E];return(BigInt(G)<>>0,I||$t(E,4,this.length),t.read(this,E,!0,23,4)},o.prototype.readFloatBE=function(E,I){return E=E>>>0,I||$t(E,4,this.length),t.read(this,E,!1,23,4)},o.prototype.readDoubleLE=function(E,I){return E=E>>>0,I||$t(E,8,this.length),t.read(this,E,!0,52,8)},o.prototype.readDoubleBE=function(E,I){return E=E>>>0,I||$t(E,8,this.length),t.read(this,E,!1,52,8)};function An(A,E,I,C,G,ee){if(!o.isBuffer(A))throw new TypeError('"buffer" argument must be a Buffer instance');if(E>G||EA.length)throw new RangeError("Index out of range")}o.prototype.writeUintLE=o.prototype.writeUIntLE=function(E,I,C,G){if(E=+E,I=I>>>0,C=C>>>0,!G){let dt=Math.pow(2,8*C)-1;An(this,E,I,C,dt,0)}let ee=1,ce=0;for(this[I]=E&255;++ce>>0,C=C>>>0,!G){let dt=Math.pow(2,8*C)-1;An(this,E,I,C,dt,0)}let ee=C-1,ce=1;for(this[I+ee]=E&255;--ee>=0&&(ce*=256);)this[I+ee]=E/ce&255;return I+C},o.prototype.writeUint8=o.prototype.writeUInt8=function(E,I,C){return E=+E,I=I>>>0,C||An(this,E,I,1,255,0),this[I]=E&255,I+1},o.prototype.writeUint16LE=o.prototype.writeUInt16LE=function(E,I,C){return E=+E,I=I>>>0,C||An(this,E,I,2,65535,0),this[I]=E&255,this[I+1]=E>>>8,I+2},o.prototype.writeUint16BE=o.prototype.writeUInt16BE=function(E,I,C){return E=+E,I=I>>>0,C||An(this,E,I,2,65535,0),this[I]=E>>>8,this[I+1]=E&255,I+2},o.prototype.writeUint32LE=o.prototype.writeUInt32LE=function(E,I,C){return E=+E,I=I>>>0,C||An(this,E,I,4,4294967295,0),this[I+3]=E>>>24,this[I+2]=E>>>16,this[I+1]=E>>>8,this[I]=E&255,I+4},o.prototype.writeUint32BE=o.prototype.writeUInt32BE=function(E,I,C){return E=+E,I=I>>>0,C||An(this,E,I,4,4294967295,0),this[I]=E>>>24,this[I+1]=E>>>16,this[I+2]=E>>>8,this[I+3]=E&255,I+4};function ie(A,E,I,C,G){Lt(E,C,G,A,I,7);let ee=Number(E&BigInt(4294967295));A[I++]=ee,ee=ee>>8,A[I++]=ee,ee=ee>>8,A[I++]=ee,ee=ee>>8,A[I++]=ee;let ce=Number(E>>BigInt(32)&BigInt(4294967295));return A[I++]=ce,ce=ce>>8,A[I++]=ce,ce=ce>>8,A[I++]=ce,ce=ce>>8,A[I++]=ce,I}function be(A,E,I,C,G){Lt(E,C,G,A,I,7);let ee=Number(E&BigInt(4294967295));A[I+7]=ee,ee=ee>>8,A[I+6]=ee,ee=ee>>8,A[I+5]=ee,ee=ee>>8,A[I+4]=ee;let ce=Number(E>>BigInt(32)&BigInt(4294967295));return A[I+3]=ce,ce=ce>>8,A[I+2]=ce,ce=ce>>8,A[I+1]=ce,ce=ce>>8,A[I]=ce,I+8}o.prototype.writeBigUInt64LE=Ia(function(E,I=0){return ie(this,E,I,BigInt(0),BigInt("0xffffffffffffffff"))}),o.prototype.writeBigUInt64BE=Ia(function(E,I=0){return be(this,E,I,BigInt(0),BigInt("0xffffffffffffffff"))}),o.prototype.writeIntLE=function(E,I,C,G){if(E=+E,I=I>>>0,!G){let ln=Math.pow(2,8*C-1);An(this,E,I,C,ln-1,-ln)}let ee=0,ce=1,dt=0;for(this[I]=E&255;++ee>0)-dt&255;return I+C},o.prototype.writeIntBE=function(E,I,C,G){if(E=+E,I=I>>>0,!G){let ln=Math.pow(2,8*C-1);An(this,E,I,C,ln-1,-ln)}let ee=C-1,ce=1,dt=0;for(this[I+ee]=E&255;--ee>=0&&(ce*=256);)E<0&&dt===0&&this[I+ee+1]!==0&&(dt=1),this[I+ee]=(E/ce>>0)-dt&255;return I+C},o.prototype.writeInt8=function(E,I,C){return E=+E,I=I>>>0,C||An(this,E,I,1,127,-128),E<0&&(E=255+E+1),this[I]=E&255,I+1},o.prototype.writeInt16LE=function(E,I,C){return E=+E,I=I>>>0,C||An(this,E,I,2,32767,-32768),this[I]=E&255,this[I+1]=E>>>8,I+2},o.prototype.writeInt16BE=function(E,I,C){return E=+E,I=I>>>0,C||An(this,E,I,2,32767,-32768),this[I]=E>>>8,this[I+1]=E&255,I+2},o.prototype.writeInt32LE=function(E,I,C){return E=+E,I=I>>>0,C||An(this,E,I,4,2147483647,-2147483648),this[I]=E&255,this[I+1]=E>>>8,this[I+2]=E>>>16,this[I+3]=E>>>24,I+4},o.prototype.writeInt32BE=function(E,I,C){return E=+E,I=I>>>0,C||An(this,E,I,4,2147483647,-2147483648),E<0&&(E=4294967295+E+1),this[I]=E>>>24,this[I+1]=E>>>16,this[I+2]=E>>>8,this[I+3]=E&255,I+4},o.prototype.writeBigInt64LE=Ia(function(E,I=0){return ie(this,E,I,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))}),o.prototype.writeBigInt64BE=Ia(function(E,I=0){return be(this,E,I,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))});function _e(A,E,I,C,G,ee){if(I+C>A.length)throw new RangeError("Index out of range");if(I<0)throw new RangeError("Index out of range")}function Le(A,E,I,C,G){return E=+E,I=I>>>0,G||_e(A,E,I,4),t.write(A,E,I,C,23,4),I+4}o.prototype.writeFloatLE=function(E,I,C){return Le(this,E,I,!0,C)},o.prototype.writeFloatBE=function(E,I,C){return Le(this,E,I,!1,C)};function _t(A,E,I,C,G){return E=+E,I=I>>>0,G||_e(A,E,I,8),t.write(A,E,I,C,52,8),I+8}o.prototype.writeDoubleLE=function(E,I,C){return _t(this,E,I,!0,C)},o.prototype.writeDoubleBE=function(E,I,C){return _t(this,E,I,!1,C)},o.prototype.copy=function(E,I,C,G){if(!o.isBuffer(E))throw new TypeError("argument should be a Buffer");if(C||(C=0),!G&&G!==0&&(G=this.length),I>=E.length&&(I=E.length),I||(I=0),G>0&&G=this.length)throw new RangeError("Index out of range");if(G<0)throw new RangeError("sourceEnd out of bounds");G>this.length&&(G=this.length),E.length-I>>0,C=C===void 0?this.length:C>>>0,E||(E=0);let ee;if(typeof E=="number")for(ee=I;eenn(2,32)?G=Me(String(I)):typeof I=="bigint"&&(G=String(I),(I>nn(BigInt(2),BigInt(32))||I<-nn(BigInt(2),BigInt(32)))&&(G=Me(G)),G+="n"),C+=` It must be ${E}. Received ${G}`,C},RangeError);function Me(A){let E="",I=A.length,C=A[0]==="-"?1:0;for(;I>=C+4;I-=3)E=`_${A.slice(I-3,I)}${E}`;return`${A.slice(0,I)}${E}`}function Qe(A,E,I){tt(E,"offset"),(A[E]===void 0||A[E+I]===void 0)&&Dt(E,A.length-(I+1))}function Lt(A,E,I,C,G,ee){if(A>I||A3?E===0||E===BigInt(0)?dt=`>= 0${ce} and < 2${ce} ** ${(ee+1)*8}${ce}`:dt=`>= -(2${ce} ** ${(ee+1)*8-1}${ce}) and < 2 ** ${(ee+1)*8-1}${ce}`:dt=`>= ${E}${ce} and <= ${I}${ce}`,new Y.ERR_OUT_OF_RANGE("value",dt,A)}Qe(C,G,ee)}function tt(A,E){if(typeof A!="number")throw new Y.ERR_INVALID_ARG_TYPE(E,"number",A)}function Dt(A,E,I){throw Math.floor(A)!==A?(tt(A,I),new Y.ERR_OUT_OF_RANGE(I||"offset","an integer",A)):E<0?new Y.ERR_BUFFER_OUT_OF_BOUNDS:new Y.ERR_OUT_OF_RANGE(I||"offset",`>= ${I?1:0} and <= ${E}`,A)}let za=/[^+/0-9A-Za-z-_]/g;function qr(A){if(A=A.split("=")[0],A=A.trim().replace(za,""),A.length<2)return"";for(;A.length%4!==0;)A=A+"=";return A}function Wa(A,E){E=E||1/0;let I,C=A.length,G=null,ee=[];for(let ce=0;ce55295&&I<57344){if(!G){if(I>56319){(E-=3)>-1&&ee.push(239,191,189);continue}else if(ce+1===C){(E-=3)>-1&&ee.push(239,191,189);continue}G=I;continue}if(I<56320){(E-=3)>-1&&ee.push(239,191,189),G=I;continue}I=(G-55296<<10|I-56320)+65536}else G&&(E-=3)>-1&&ee.push(239,191,189);if(G=null,I<128){if((E-=1)<0)break;ee.push(I)}else if(I<2048){if((E-=2)<0)break;ee.push(I>>6|192,I&63|128)}else if(I<65536){if((E-=3)<0)break;ee.push(I>>12|224,I>>6&63|128,I&63|128)}else if(I<1114112){if((E-=4)<0)break;ee.push(I>>18|240,I>>12&63|128,I>>6&63|128,I&63|128)}else throw new Error("Invalid code point")}return ee}function yc(A){let E=[];for(let I=0;I>8,G=I%256,ee.push(G),ee.push(C);return ee}function mr(A){return e.toByteArray(qr(A))}function ni(A,E,I,C){let G;for(G=0;G=E.length||G>=A.length);++G)E[G+I]=A[G];return G}function kt(A,E){return A instanceof E||A!=null&&A.constructor!=null&&A.constructor.name!=null&&A.constructor.name===E.name}function Tr(A){return A!==A}let uu=function(){let A="0123456789abcdef",E=new Array(256);for(let I=0;I<16;++I){let C=I*16;for(let G=0;G<16;++G)E[C+G]=A[I]+A[G]}return E}();function Ia(A){return typeof BigInt=="undefined"?cu:A}function cu(){throw new Error("BigInt not supported")}return gu}var rd,IR,Qf,gR,gu,_R,_u,b,ede,tde,vR=yu(()=>{"use strict";f();T();m();rd={},IR=!1;Qf={},gR=!1;gu={},_R=!1;_u=BY();_u.Buffer;_u.SlowBuffer;_u.INSPECT_MAX_BYTES;_u.kMaxLength;b=_u.Buffer,ede=_u.INSPECT_MAX_BYTES,tde=_u.kMaxLength});var T=yu(()=>{"use strict";vR()});var SR=P(Cc=>{"use strict";f();T();m();Object.defineProperty(Cc,"__esModule",{value:!0});Cc.versionInfo=Cc.version=void 0;var UY="16.9.0";Cc.version=UY;var kY=Object.freeze({major:16,minor:9,patch:0,preReleaseTag:null});Cc.versionInfo=kY});var Cr=P(ay=>{"use strict";f();T();m();Object.defineProperty(ay,"__esModule",{value:!0});ay.devAssert=MY;function MY(e,t){if(!!!e)throw new Error(t)}});var Yf=P(sy=>{"use strict";f();T();m();Object.defineProperty(sy,"__esModule",{value:!0});sy.isPromise=xY;function xY(e){return typeof(e==null?void 0:e.then)=="function"}});var Sa=P(oy=>{"use strict";f();T();m();Object.defineProperty(oy,"__esModule",{value:!0});oy.isObjectLike=qY;function qY(e){return typeof e=="object"&&e!==null}});var Ir=P(uy=>{"use strict";f();T();m();Object.defineProperty(uy,"__esModule",{value:!0});uy.invariant=VY;function VY(e,t){if(!!!e)throw new Error(t!=null?t:"Unexpected invariant triggered.")}});var Jf=P(cy=>{"use strict";f();T();m();Object.defineProperty(cy,"__esModule",{value:!0});cy.getLocation=GY;var jY=Ir(),KY=/\r\n|[\n\r]/g;function GY(e,t){let n=0,r=1;for(let i of e.body.matchAll(KY)){if(typeof i.index=="number"||(0,jY.invariant)(!1),i.index>=t)break;n=i.index+i[0].length,r+=1}return{line:r,column:t+1-n}}});var ly=P(Hf=>{"use strict";f();T();m();Object.defineProperty(Hf,"__esModule",{value:!0});Hf.printLocation=QY;Hf.printSourceLocation=bR;var $Y=Jf();function QY(e){return bR(e.source,(0,$Y.getLocation)(e.source,e.start))}function bR(e,t){let n=e.locationOffset.column-1,r="".padStart(n)+e.body,i=t.line-1,a=e.locationOffset.line-1,o=t.line+a,c=t.line===1?n:0,l=t.column+c,p=`${e.name}:${o}:${l} -`,N=r.split(/\r\n|[\n\r]/g),y=N[i];if(y.length>120){let g=Math.floor(l/80),_=l%80,F=[];for(let B=0;B["|",B]),["|","^".padStart(_)],["|",F[g+1]]])}return p+OR([[`${o-1} |`,N[i-1]],[`${o} |`,y],["|","^".padStart(l)],[`${o+1} |`,N[i+1]]])}function OR(e){let t=e.filter(([r,i])=>i!==void 0),n=Math.max(...t.map(([r])=>r.length));return t.map(([r,i])=>r.padStart(n)+(i?" "+i:"")).join(` -`)}});var Je=P(Bc=>{"use strict";f();T();m();Object.defineProperty(Bc,"__esModule",{value:!0});Bc.GraphQLError=void 0;Bc.formatError=zY;Bc.printError=HY;var YY=Sa(),DR=Jf(),AR=ly();function JY(e){let t=e[0];return t==null||"kind"in t||"length"in t?{nodes:t,source:e[1],positions:e[2],path:e[3],originalError:e[4],extensions:e[5]}:t}var dy=class e extends Error{constructor(t,...n){var r,i,a;let{nodes:o,source:c,positions:l,path:p,originalError:N,extensions:y}=JY(n);super(t),this.name="GraphQLError",this.path=p!=null?p:void 0,this.originalError=N!=null?N:void 0,this.nodes=RR(Array.isArray(o)?o:o?[o]:void 0);let g=RR((r=this.nodes)===null||r===void 0?void 0:r.map(F=>F.loc).filter(F=>F!=null));this.source=c!=null?c:g==null||(i=g[0])===null||i===void 0?void 0:i.source,this.positions=l!=null?l:g==null?void 0:g.map(F=>F.start),this.locations=l&&c?l.map(F=>(0,DR.getLocation)(c,F)):g==null?void 0:g.map(F=>(0,DR.getLocation)(F.source,F.start));let _=(0,YY.isObjectLike)(N==null?void 0:N.extensions)?N==null?void 0:N.extensions:void 0;this.extensions=(a=y!=null?y:_)!==null&&a!==void 0?a:Object.create(null),Object.defineProperties(this,{message:{writable:!0,enumerable:!0},name:{enumerable:!1},nodes:{enumerable:!1},source:{enumerable:!1},positions:{enumerable:!1},originalError:{enumerable:!1}}),N!=null&&N.stack?Object.defineProperty(this,"stack",{value:N.stack,writable:!0,configurable:!0}):Error.captureStackTrace?Error.captureStackTrace(this,e):Object.defineProperty(this,"stack",{value:Error().stack,writable:!0,configurable:!0})}get[Symbol.toStringTag](){return"GraphQLError"}toString(){let t=this.message;if(this.nodes)for(let n of this.nodes)n.loc&&(t+=` +"use strict";var shim=(()=>{var bY=Object.create;var rd=Object.defineProperty,AY=Object.defineProperties,RY=Object.getOwnPropertyDescriptor,FY=Object.getOwnPropertyDescriptors,PY=Object.getOwnPropertyNames,rA=Object.getOwnPropertySymbols,wY=Object.getPrototypeOf,iA=Object.prototype.hasOwnProperty,LY=Object.prototype.propertyIsEnumerable;var nn=Math.pow,ny=(e,t,n)=>t in e?rd(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,M=(e,t)=>{for(var n in t||(t={}))iA.call(t,n)&&ny(e,n,t[n]);if(rA)for(var n of rA(t))LY.call(t,n)&&ny(e,n,t[n]);return e},Q=(e,t)=>AY(e,FY(t));var gu=(e,t)=>()=>(e&&(t=e(e=0)),t);var w=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),jf=(e,t)=>{for(var n in t)rd(e,n,{get:t[n],enumerable:!0})},aA=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of PY(t))!iA.call(e,i)&&i!==n&&rd(e,i,{get:()=>t[i],enumerable:!(r=RY(t,i))||r.enumerable});return e};var os=(e,t,n)=>(n=e!=null?bY(wY(e)):{},aA(t||!e||!e.__esModule?rd(n,"default",{value:e,enumerable:!0}):n,e)),Kf=e=>aA(rd({},"__esModule",{value:!0}),e);var v=(e,t,n)=>(ny(e,typeof t!="symbol"?t+"":t,n),n);var Si=(e,t,n)=>new Promise((r,i)=>{var a=l=>{try{c(n.next(l))}catch(p){i(p)}},o=l=>{try{c(n.throw(l))}catch(p){i(p)}},c=l=>l.done?r(l.value):Promise.resolve(l.value).then(a,o);c((n=n.apply(e,t)).next())});var f=gu(()=>{"use strict"});var O={};jf(O,{_debugEnd:()=>YA,_debugProcess:()=>QA,_events:()=>cR,_eventsCount:()=>lR,_exiting:()=>bA,_fatalExceptions:()=>jA,_getActiveHandles:()=>PA,_getActiveRequests:()=>FA,_kill:()=>LA,_linkedBinding:()=>OA,_maxListeners:()=>uR,_preload_modules:()=>aR,_rawDebug:()=>vA,_startProfilerIdleNotifier:()=>JA,_stopProfilerIdleNotifier:()=>HA,_tickCallback:()=>$A,abort:()=>ZA,addListener:()=>dR,allowedNodeEnvironmentFlags:()=>xA,arch:()=>lA,argv:()=>fA,argv0:()=>iR,assert:()=>qA,binding:()=>hA,chdir:()=>gA,config:()=>AA,cpuUsage:()=>Qf,cwd:()=>IA,debugPort:()=>rR,default:()=>IR,dlopen:()=>RA,domain:()=>DA,emit:()=>TR,emitWarning:()=>EA,env:()=>pA,execArgv:()=>mA,execPath:()=>nR,exit:()=>kA,features:()=>VA,hasUncaughtExceptionCaptureCallback:()=>GA,hrtime:()=>$f,kill:()=>UA,listeners:()=>yR,memoryUsage:()=>BA,moduleLoadList:()=>SA,nextTick:()=>oA,off:()=>fR,on:()=>cs,once:()=>pR,openStdin:()=>MA,pid:()=>eR,platform:()=>dA,ppid:()=>tR,prependListener:()=>ER,prependOnceListener:()=>hR,reallyExit:()=>wA,release:()=>_A,removeAllListeners:()=>NR,removeListener:()=>mR,resourceUsage:()=>CA,setSourceMapsEnabled:()=>sR,setUncaughtExceptionCaptureCallback:()=>KA,stderr:()=>WA,stdin:()=>XA,stdout:()=>zA,title:()=>cA,umask:()=>yA,uptime:()=>oR,version:()=>NA,versions:()=>TA});function ay(e){throw new Error("Node.js process "+e+" is not supported by JSPM core outside of Node.js")}function CY(){!Cc||!_u||(Cc=!1,_u.length?us=_u.concat(us):Gf=-1,us.length&&sA())}function sA(){if(!Cc){var e=setTimeout(CY,0);Cc=!0;for(var t=us.length;t;){for(_u=us,us=[];++Gf1)for(var n=1;n{"use strict";f();N();m();us=[],Cc=!1,Gf=-1;uA.prototype.run=function(){this.fun.apply(null,this.array)};cA="browser",lA="x64",dA="browser",pA={PATH:"/usr/bin",LANG:navigator.language+".UTF-8",PWD:"/",HOME:"/home",TMP:"/tmp"},fA=["/usr/bin/node"],mA=[],NA="v16.8.0",TA={},EA=function(e,t){console.warn((t?t+": ":"")+e)},hA=function(e){ay("binding")},yA=function(e){return 0},IA=function(){return"/"},gA=function(e){},_A={name:"node",sourceUrl:"",headersUrl:"",libUrl:""};vA=yr,SA=[];DA={},bA=!1,AA={};wA=yr,LA=yr,Qf=function(){return{}},CA=Qf,BA=Qf,UA=yr,kA=yr,MA=yr,xA={};VA={inspector:!1,debug:!1,uv:!1,ipv6:!1,tls_alpn:!1,tls_sni:!1,tls_ocsp:!1,tls:!1,cached_builtins:!0},jA=yr,KA=yr;$A=yr,QA=yr,YA=yr,JA=yr,HA=yr,zA=void 0,WA=void 0,XA=void 0,ZA=yr,eR=2,tR=1,nR="/bin/usr/node",rR=9229,iR="node",aR=[],sR=yr,Uo={now:typeof performance!="undefined"?performance.now.bind(performance):void 0,timing:typeof performance!="undefined"?performance.timing:void 0};Uo.now===void 0&&(ry=Date.now(),Uo.timing&&Uo.timing.navigationStart&&(ry=Uo.timing.navigationStart),Uo.now=()=>Date.now()-ry);iy=1e9;$f.bigint=function(e){var t=$f(e);return typeof BigInt=="undefined"?t[0]*iy+t[1]:BigInt(t[0]*iy)+BigInt(t[1])};uR=10,cR={},lR=0;dR=cs,pR=cs,fR=cs,mR=cs,NR=cs,TR=yr,ER=cs,hR=cs;IR={version:NA,versions:TA,arch:lA,platform:dA,release:_A,_rawDebug:vA,moduleLoadList:SA,binding:hA,_linkedBinding:OA,_events:cR,_eventsCount:lR,_maxListeners:uR,on:cs,addListener:dR,once:pR,off:fR,removeListener:mR,removeAllListeners:NR,emit:TR,prependListener:ER,prependOnceListener:hR,listeners:yR,domain:DA,_exiting:bA,config:AA,dlopen:RA,uptime:oR,_getActiveRequests:FA,_getActiveHandles:PA,reallyExit:wA,_kill:LA,cpuUsage:Qf,resourceUsage:CA,memoryUsage:BA,kill:UA,exit:kA,openStdin:MA,allowedNodeEnvironmentFlags:xA,assert:qA,features:VA,_fatalExceptions:jA,setUncaughtExceptionCaptureCallback:KA,hasUncaughtExceptionCaptureCallback:GA,emitWarning:EA,nextTick:oA,_tickCallback:$A,_debugProcess:QA,_debugEnd:YA,_startProfilerIdleNotifier:JA,_stopProfilerIdleNotifier:HA,stdout:zA,stdin:XA,stderr:WA,abort:ZA,umask:yA,chdir:gA,cwd:IA,env:pA,title:cA,argv:fA,execArgv:mA,pid:eR,ppid:tR,execPath:nR,debugPort:rR,hrtime:$f,argv0:iR,_preload_modules:aR,setSourceMapsEnabled:sR}});var m=gu(()=>{"use strict";gR()});function BY(){if(_R)return id;_R=!0,id.byteLength=c,id.toByteArray=p,id.fromByteArray=g;for(var e=[],t=[],n=typeof Uint8Array!="undefined"?Uint8Array:Array,r="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",i=0,a=r.length;i0)throw new Error("Invalid string. Length must be a multiple of 4");var U=_.indexOf("=");U===-1&&(U=F);var K=U===F?0:4-U%4;return[U,K]}function c(_){var F=o(_),U=F[0],K=F[1];return(U+K)*3/4-K}function l(_,F,U){return(F+U)*3/4-U}function p(_){var F,U=o(_),K=U[0],J=U[1],ee=new n(l(_,K,J)),W=0,Te=J>0?K-4:K,de;for(de=0;de>16&255,ee[W++]=F>>8&255,ee[W++]=F&255;return J===2&&(F=t[_.charCodeAt(de)]<<2|t[_.charCodeAt(de+1)]>>4,ee[W++]=F&255),J===1&&(F=t[_.charCodeAt(de)]<<10|t[_.charCodeAt(de+1)]<<4|t[_.charCodeAt(de+2)]>>2,ee[W++]=F>>8&255,ee[W++]=F&255),ee}function T(_){return e[_>>18&63]+e[_>>12&63]+e[_>>6&63]+e[_&63]}function y(_,F,U){for(var K,J=[],ee=F;eeTe?Te:W+ee));return K===1?(F=_[U-1],J.push(e[F>>2]+e[F<<4&63]+"==")):K===2&&(F=(_[U-2]<<8)+_[U-1],J.push(e[F>>10]+e[F>>4&63]+e[F<<2&63]+"=")),J.join("")}return id}function UY(){if(vR)return Yf;vR=!0;return Yf.read=function(e,t,n,r,i){var a,o,c=i*8-r-1,l=(1<>1,T=-7,y=n?i-1:0,g=n?-1:1,_=e[t+y];for(y+=g,a=_&(1<<-T)-1,_>>=-T,T+=c;T>0;a=a*256+e[t+y],y+=g,T-=8);for(o=a&(1<<-T)-1,a>>=-T,T+=r;T>0;o=o*256+e[t+y],y+=g,T-=8);if(a===0)a=1-p;else{if(a===l)return o?NaN:(_?-1:1)*(1/0);o=o+Math.pow(2,r),a=a-p}return(_?-1:1)*o*Math.pow(2,a-r)},Yf.write=function(e,t,n,r,i,a){var o,c,l,p=a*8-i-1,T=(1<>1,g=i===23?Math.pow(2,-24)-Math.pow(2,-77):0,_=r?0:a-1,F=r?1:-1,U=t<0||t===0&&1/t<0?1:0;for(t=Math.abs(t),isNaN(t)||t===1/0?(c=isNaN(t)?1:0,o=T):(o=Math.floor(Math.log(t)/Math.LN2),t*(l=Math.pow(2,-o))<1&&(o--,l*=2),o+y>=1?t+=g/l:t+=g*Math.pow(2,1-y),t*l>=2&&(o++,l/=2),o+y>=T?(c=0,o=T):o+y>=1?(c=(t*l-1)*Math.pow(2,i),o=o+y):(c=t*Math.pow(2,y-1)*Math.pow(2,i),o=0));i>=8;e[n+_]=c&255,_+=F,c/=256,i-=8);for(o=o<0;e[n+_]=o&255,_+=F,o/=256,p-=8);e[n+_-F]|=U*128},Yf}function kY(){if(SR)return vu;SR=!0;let e=BY(),t=UY(),n=typeof Symbol=="function"&&typeof Symbol.for=="function"?Symbol.for("nodejs.util.inspect.custom"):null;vu.Buffer=o,vu.SlowBuffer=J,vu.INSPECT_MAX_BYTES=50;let r=2147483647;vu.kMaxLength=r,o.TYPED_ARRAY_SUPPORT=i(),!o.TYPED_ARRAY_SUPPORT&&typeof console!="undefined"&&typeof console.error=="function"&&console.error("This browser lacks typed array (Uint8Array) support which is required by `buffer` v5.x. Use `buffer` v4.x if you require old browser support.");function i(){try{let A=new Uint8Array(1),h={foo:function(){return 42}};return Object.setPrototypeOf(h,Uint8Array.prototype),Object.setPrototypeOf(A,h),A.foo()===42}catch(A){return!1}}Object.defineProperty(o.prototype,"parent",{enumerable:!0,get:function(){if(o.isBuffer(this))return this.buffer}}),Object.defineProperty(o.prototype,"offset",{enumerable:!0,get:function(){if(o.isBuffer(this))return this.byteOffset}});function a(A){if(A>r)throw new RangeError('The value "'+A+'" is invalid for option "size"');let h=new Uint8Array(A);return Object.setPrototypeOf(h,o.prototype),h}function o(A,h,I){if(typeof A=="number"){if(typeof h=="string")throw new TypeError('The "string" argument must be of type string. Received type number');return T(A)}return c(A,h,I)}o.poolSize=8192;function c(A,h,I){if(typeof A=="string")return y(A,h);if(ArrayBuffer.isView(A))return _(A);if(A==null)throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof A);if(Mt(A,ArrayBuffer)||A&&Mt(A.buffer,ArrayBuffer)||typeof SharedArrayBuffer!="undefined"&&(Mt(A,SharedArrayBuffer)||A&&Mt(A.buffer,SharedArrayBuffer)))return F(A,h,I);if(typeof A=="number")throw new TypeError('The "value" argument must not be of type number. Received type number');let C=A.valueOf&&A.valueOf();if(C!=null&&C!==A)return o.from(C,h,I);let G=U(A);if(G)return G;if(typeof Symbol!="undefined"&&Symbol.toPrimitive!=null&&typeof A[Symbol.toPrimitive]=="function")return o.from(A[Symbol.toPrimitive]("string"),h,I);throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof A)}o.from=function(A,h,I){return c(A,h,I)},Object.setPrototypeOf(o.prototype,Uint8Array.prototype),Object.setPrototypeOf(o,Uint8Array);function l(A){if(typeof A!="number")throw new TypeError('"size" argument must be of type number');if(A<0)throw new RangeError('The value "'+A+'" is invalid for option "size"')}function p(A,h,I){return l(A),A<=0?a(A):h!==void 0?typeof I=="string"?a(A).fill(h,I):a(A).fill(h):a(A)}o.alloc=function(A,h,I){return p(A,h,I)};function T(A){return l(A),a(A<0?0:K(A)|0)}o.allocUnsafe=function(A){return T(A)},o.allocUnsafeSlow=function(A){return T(A)};function y(A,h){if((typeof h!="string"||h==="")&&(h="utf8"),!o.isEncoding(h))throw new TypeError("Unknown encoding: "+h);let I=ee(A,h)|0,C=a(I),G=C.write(A,h);return G!==I&&(C=C.slice(0,G)),C}function g(A){let h=A.length<0?0:K(A.length)|0,I=a(h);for(let C=0;C=r)throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+r.toString(16)+" bytes");return A|0}function J(A){return+A!=A&&(A=0),o.alloc(+A)}o.isBuffer=function(h){return h!=null&&h._isBuffer===!0&&h!==o.prototype},o.compare=function(h,I){if(Mt(h,Uint8Array)&&(h=o.from(h,h.offset,h.byteLength)),Mt(I,Uint8Array)&&(I=o.from(I,I.offset,I.byteLength)),!o.isBuffer(h)||!o.isBuffer(I))throw new TypeError('The "buf1", "buf2" arguments must be one of type Buffer or Uint8Array');if(h===I)return 0;let C=h.length,G=I.length;for(let te=0,le=Math.min(C,G);teG.length?(o.isBuffer(le)||(le=o.from(le)),le.copy(G,te)):Uint8Array.prototype.set.call(G,le,te);else if(o.isBuffer(le))le.copy(G,te);else throw new TypeError('"list" argument must be an Array of Buffers');te+=le.length}return G};function ee(A,h){if(o.isBuffer(A))return A.length;if(ArrayBuffer.isView(A)||Mt(A,ArrayBuffer))return A.byteLength;if(typeof A!="string")throw new TypeError('The "string" argument must be one of type string, Buffer, or ArrayBuffer. Received type '+typeof A);let I=A.length,C=arguments.length>2&&arguments[2]===!0;if(!C&&I===0)return 0;let G=!1;for(;;)switch(h){case"ascii":case"latin1":case"binary":return I;case"utf8":case"utf-8":return Wa(A).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return I*2;case"hex":return I>>>1;case"base64":return mr(A).length;default:if(G)return C?-1:Wa(A).length;h=(""+h).toLowerCase(),G=!0}}o.byteLength=ee;function W(A,h,I){let C=!1;if((h===void 0||h<0)&&(h=0),h>this.length||((I===void 0||I>this.length)&&(I=this.length),I<=0)||(I>>>=0,h>>>=0,I<=h))return"";for(A||(A="utf8");;)switch(A){case"hex":return Fr(this,h,I);case"utf8":case"utf-8":return zt(this,h,I);case"ascii":return dn(this,h,I);case"latin1":case"binary":return Rr(this,h,I);case"base64":return Ht(this,h,I);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return kn(this,h,I);default:if(C)throw new TypeError("Unknown encoding: "+A);A=(A+"").toLowerCase(),C=!0}}o.prototype._isBuffer=!0;function Te(A,h,I){let C=A[h];A[h]=A[I],A[I]=C}o.prototype.swap16=function(){let h=this.length;if(h%2!==0)throw new RangeError("Buffer size must be a multiple of 16-bits");for(let I=0;II&&(h+=" ... "),""},n&&(o.prototype[n]=o.prototype.inspect),o.prototype.compare=function(h,I,C,G,te){if(Mt(h,Uint8Array)&&(h=o.from(h,h.offset,h.byteLength)),!o.isBuffer(h))throw new TypeError('The "target" argument must be one of type Buffer or Uint8Array. Received type '+typeof h);if(I===void 0&&(I=0),C===void 0&&(C=h?h.length:0),G===void 0&&(G=0),te===void 0&&(te=this.length),I<0||C>h.length||G<0||te>this.length)throw new RangeError("out of range index");if(G>=te&&I>=C)return 0;if(G>=te)return-1;if(I>=C)return 1;if(I>>>=0,C>>>=0,G>>>=0,te>>>=0,this===h)return 0;let le=te-G,pt=C-I,pn=Math.min(le,pt),tn=this.slice(G,te),En=h.slice(I,C);for(let Wt=0;Wt2147483647?I=2147483647:I<-2147483648&&(I=-2147483648),I=+I,Nr(I)&&(I=G?0:A.length-1),I<0&&(I=A.length+I),I>=A.length){if(G)return-1;I=A.length-1}else if(I<0)if(G)I=0;else return-1;if(typeof h=="string"&&(h=o.from(h,C)),o.isBuffer(h))return h.length===0?-1:we(A,h,I,C,G);if(typeof h=="number")return h=h&255,typeof Uint8Array.prototype.indexOf=="function"?G?Uint8Array.prototype.indexOf.call(A,h,I):Uint8Array.prototype.lastIndexOf.call(A,h,I):we(A,[h],I,C,G);throw new TypeError("val must be string, number or Buffer")}function we(A,h,I,C,G){let te=1,le=A.length,pt=h.length;if(C!==void 0&&(C=String(C).toLowerCase(),C==="ucs2"||C==="ucs-2"||C==="utf16le"||C==="utf-16le")){if(A.length<2||h.length<2)return-1;te=2,le/=2,pt/=2,I/=2}function pn(En,Wt){return te===1?En[Wt]:En.readUInt16BE(Wt*te)}let tn;if(G){let En=-1;for(tn=I;tnle&&(I=le-pt),tn=I;tn>=0;tn--){let En=!0;for(let Wt=0;WtG&&(C=G)):C=G;let te=h.length;C>te/2&&(C=te/2);let le;for(le=0;le>>0,isFinite(C)?(C=C>>>0,G===void 0&&(G="utf8")):(G=C,C=void 0);else throw new Error("Buffer.write(string, encoding, offset[, length]) is no longer supported");let te=this.length-I;if((C===void 0||C>te)&&(C=te),h.length>0&&(C<0||I<0)||I>this.length)throw new RangeError("Attempt to write outside buffer bounds");G||(G="utf8");let le=!1;for(;;)switch(G){case"hex":return qe(this,h,I,C);case"utf8":case"utf-8":return et(this,h,I,C);case"ascii":case"latin1":case"binary":return X(this,h,I,C);case"base64":return ve(this,h,I,C);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return gt(this,h,I,C);default:if(le)throw new TypeError("Unknown encoding: "+G);G=(""+G).toLowerCase(),le=!0}},o.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};function Ht(A,h,I){return h===0&&I===A.length?e.fromByteArray(A):e.fromByteArray(A.slice(h,I))}function zt(A,h,I){I=Math.min(A.length,I);let C=[],G=h;for(;G239?4:te>223?3:te>191?2:1;if(G+pt<=I){let pn,tn,En,Wt;switch(pt){case 1:te<128&&(le=te);break;case 2:pn=A[G+1],(pn&192)===128&&(Wt=(te&31)<<6|pn&63,Wt>127&&(le=Wt));break;case 3:pn=A[G+1],tn=A[G+2],(pn&192)===128&&(tn&192)===128&&(Wt=(te&15)<<12|(pn&63)<<6|tn&63,Wt>2047&&(Wt<55296||Wt>57343)&&(le=Wt));break;case 4:pn=A[G+1],tn=A[G+2],En=A[G+3],(pn&192)===128&&(tn&192)===128&&(En&192)===128&&(Wt=(te&15)<<18|(pn&63)<<12|(tn&63)<<6|En&63,Wt>65535&&Wt<1114112&&(le=Wt))}}le===null?(le=65533,pt=1):le>65535&&(le-=65536,C.push(le>>>10&1023|55296),le=56320|le&1023),C.push(le),G+=pt}return Vt(C)}let bn=4096;function Vt(A){let h=A.length;if(h<=bn)return String.fromCharCode.apply(String,A);let I="",C=0;for(;CC)&&(I=C);let G="";for(let te=h;teC&&(h=C),I<0?(I+=C,I<0&&(I=0)):I>C&&(I=C),II)throw new RangeError("Trying to access beyond buffer length")}o.prototype.readUintLE=o.prototype.readUIntLE=function(h,I,C){h=h>>>0,I=I>>>0,C||$t(h,I,this.length);let G=this[h],te=1,le=0;for(;++le>>0,I=I>>>0,C||$t(h,I,this.length);let G=this[h+--I],te=1;for(;I>0&&(te*=256);)G+=this[h+--I]*te;return G},o.prototype.readUint8=o.prototype.readUInt8=function(h,I){return h=h>>>0,I||$t(h,1,this.length),this[h]},o.prototype.readUint16LE=o.prototype.readUInt16LE=function(h,I){return h=h>>>0,I||$t(h,2,this.length),this[h]|this[h+1]<<8},o.prototype.readUint16BE=o.prototype.readUInt16BE=function(h,I){return h=h>>>0,I||$t(h,2,this.length),this[h]<<8|this[h+1]},o.prototype.readUint32LE=o.prototype.readUInt32LE=function(h,I){return h=h>>>0,I||$t(h,4,this.length),(this[h]|this[h+1]<<8|this[h+2]<<16)+this[h+3]*16777216},o.prototype.readUint32BE=o.prototype.readUInt32BE=function(h,I){return h=h>>>0,I||$t(h,4,this.length),this[h]*16777216+(this[h+1]<<16|this[h+2]<<8|this[h+3])},o.prototype.readBigUInt64LE=Ia(function(h){h=h>>>0,tt(h,"offset");let I=this[h],C=this[h+7];(I===void 0||C===void 0)&&bt(h,this.length-8);let G=I+this[++h]*nn(2,8)+this[++h]*nn(2,16)+this[++h]*nn(2,24),te=this[++h]+this[++h]*nn(2,8)+this[++h]*nn(2,16)+C*nn(2,24);return BigInt(G)+(BigInt(te)<>>0,tt(h,"offset");let I=this[h],C=this[h+7];(I===void 0||C===void 0)&&bt(h,this.length-8);let G=I*nn(2,24)+this[++h]*nn(2,16)+this[++h]*nn(2,8)+this[++h],te=this[++h]*nn(2,24)+this[++h]*nn(2,16)+this[++h]*nn(2,8)+C;return(BigInt(G)<>>0,I=I>>>0,C||$t(h,I,this.length);let G=this[h],te=1,le=0;for(;++le=te&&(G-=Math.pow(2,8*I)),G},o.prototype.readIntBE=function(h,I,C){h=h>>>0,I=I>>>0,C||$t(h,I,this.length);let G=I,te=1,le=this[h+--G];for(;G>0&&(te*=256);)le+=this[h+--G]*te;return te*=128,le>=te&&(le-=Math.pow(2,8*I)),le},o.prototype.readInt8=function(h,I){return h=h>>>0,I||$t(h,1,this.length),this[h]&128?(255-this[h]+1)*-1:this[h]},o.prototype.readInt16LE=function(h,I){h=h>>>0,I||$t(h,2,this.length);let C=this[h]|this[h+1]<<8;return C&32768?C|4294901760:C},o.prototype.readInt16BE=function(h,I){h=h>>>0,I||$t(h,2,this.length);let C=this[h+1]|this[h]<<8;return C&32768?C|4294901760:C},o.prototype.readInt32LE=function(h,I){return h=h>>>0,I||$t(h,4,this.length),this[h]|this[h+1]<<8|this[h+2]<<16|this[h+3]<<24},o.prototype.readInt32BE=function(h,I){return h=h>>>0,I||$t(h,4,this.length),this[h]<<24|this[h+1]<<16|this[h+2]<<8|this[h+3]},o.prototype.readBigInt64LE=Ia(function(h){h=h>>>0,tt(h,"offset");let I=this[h],C=this[h+7];(I===void 0||C===void 0)&&bt(h,this.length-8);let G=this[h+4]+this[h+5]*nn(2,8)+this[h+6]*nn(2,16)+(C<<24);return(BigInt(G)<>>0,tt(h,"offset");let I=this[h],C=this[h+7];(I===void 0||C===void 0)&&bt(h,this.length-8);let G=(I<<24)+this[++h]*nn(2,16)+this[++h]*nn(2,8)+this[++h];return(BigInt(G)<>>0,I||$t(h,4,this.length),t.read(this,h,!0,23,4)},o.prototype.readFloatBE=function(h,I){return h=h>>>0,I||$t(h,4,this.length),t.read(this,h,!1,23,4)},o.prototype.readDoubleLE=function(h,I){return h=h>>>0,I||$t(h,8,this.length),t.read(this,h,!0,52,8)},o.prototype.readDoubleBE=function(h,I){return h=h>>>0,I||$t(h,8,this.length),t.read(this,h,!1,52,8)};function An(A,h,I,C,G,te){if(!o.isBuffer(A))throw new TypeError('"buffer" argument must be a Buffer instance');if(h>G||hA.length)throw new RangeError("Index out of range")}o.prototype.writeUintLE=o.prototype.writeUIntLE=function(h,I,C,G){if(h=+h,I=I>>>0,C=C>>>0,!G){let pt=Math.pow(2,8*C)-1;An(this,h,I,C,pt,0)}let te=1,le=0;for(this[I]=h&255;++le>>0,C=C>>>0,!G){let pt=Math.pow(2,8*C)-1;An(this,h,I,C,pt,0)}let te=C-1,le=1;for(this[I+te]=h&255;--te>=0&&(le*=256);)this[I+te]=h/le&255;return I+C},o.prototype.writeUint8=o.prototype.writeUInt8=function(h,I,C){return h=+h,I=I>>>0,C||An(this,h,I,1,255,0),this[I]=h&255,I+1},o.prototype.writeUint16LE=o.prototype.writeUInt16LE=function(h,I,C){return h=+h,I=I>>>0,C||An(this,h,I,2,65535,0),this[I]=h&255,this[I+1]=h>>>8,I+2},o.prototype.writeUint16BE=o.prototype.writeUInt16BE=function(h,I,C){return h=+h,I=I>>>0,C||An(this,h,I,2,65535,0),this[I]=h>>>8,this[I+1]=h&255,I+2},o.prototype.writeUint32LE=o.prototype.writeUInt32LE=function(h,I,C){return h=+h,I=I>>>0,C||An(this,h,I,4,4294967295,0),this[I+3]=h>>>24,this[I+2]=h>>>16,this[I+1]=h>>>8,this[I]=h&255,I+4},o.prototype.writeUint32BE=o.prototype.writeUInt32BE=function(h,I,C){return h=+h,I=I>>>0,C||An(this,h,I,4,4294967295,0),this[I]=h>>>24,this[I+1]=h>>>16,this[I+2]=h>>>8,this[I+3]=h&255,I+4};function se(A,h,I,C,G){Lt(h,C,G,A,I,7);let te=Number(h&BigInt(4294967295));A[I++]=te,te=te>>8,A[I++]=te,te=te>>8,A[I++]=te,te=te>>8,A[I++]=te;let le=Number(h>>BigInt(32)&BigInt(4294967295));return A[I++]=le,le=le>>8,A[I++]=le,le=le>>8,A[I++]=le,le=le>>8,A[I++]=le,I}function De(A,h,I,C,G){Lt(h,C,G,A,I,7);let te=Number(h&BigInt(4294967295));A[I+7]=te,te=te>>8,A[I+6]=te,te=te>>8,A[I+5]=te,te=te>>8,A[I+4]=te;let le=Number(h>>BigInt(32)&BigInt(4294967295));return A[I+3]=le,le=le>>8,A[I+2]=le,le=le>>8,A[I+1]=le,le=le>>8,A[I]=le,I+8}o.prototype.writeBigUInt64LE=Ia(function(h,I=0){return se(this,h,I,BigInt(0),BigInt("0xffffffffffffffff"))}),o.prototype.writeBigUInt64BE=Ia(function(h,I=0){return De(this,h,I,BigInt(0),BigInt("0xffffffffffffffff"))}),o.prototype.writeIntLE=function(h,I,C,G){if(h=+h,I=I>>>0,!G){let pn=Math.pow(2,8*C-1);An(this,h,I,C,pn-1,-pn)}let te=0,le=1,pt=0;for(this[I]=h&255;++te>0)-pt&255;return I+C},o.prototype.writeIntBE=function(h,I,C,G){if(h=+h,I=I>>>0,!G){let pn=Math.pow(2,8*C-1);An(this,h,I,C,pn-1,-pn)}let te=C-1,le=1,pt=0;for(this[I+te]=h&255;--te>=0&&(le*=256);)h<0&&pt===0&&this[I+te+1]!==0&&(pt=1),this[I+te]=(h/le>>0)-pt&255;return I+C},o.prototype.writeInt8=function(h,I,C){return h=+h,I=I>>>0,C||An(this,h,I,1,127,-128),h<0&&(h=255+h+1),this[I]=h&255,I+1},o.prototype.writeInt16LE=function(h,I,C){return h=+h,I=I>>>0,C||An(this,h,I,2,32767,-32768),this[I]=h&255,this[I+1]=h>>>8,I+2},o.prototype.writeInt16BE=function(h,I,C){return h=+h,I=I>>>0,C||An(this,h,I,2,32767,-32768),this[I]=h>>>8,this[I+1]=h&255,I+2},o.prototype.writeInt32LE=function(h,I,C){return h=+h,I=I>>>0,C||An(this,h,I,4,2147483647,-2147483648),this[I]=h&255,this[I+1]=h>>>8,this[I+2]=h>>>16,this[I+3]=h>>>24,I+4},o.prototype.writeInt32BE=function(h,I,C){return h=+h,I=I>>>0,C||An(this,h,I,4,2147483647,-2147483648),h<0&&(h=4294967295+h+1),this[I]=h>>>24,this[I+1]=h>>>16,this[I+2]=h>>>8,this[I+3]=h&255,I+4},o.prototype.writeBigInt64LE=Ia(function(h,I=0){return se(this,h,I,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))}),o.prototype.writeBigInt64BE=Ia(function(h,I=0){return De(this,h,I,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))});function _e(A,h,I,C,G,te){if(I+C>A.length)throw new RangeError("Index out of range");if(I<0)throw new RangeError("Index out of range")}function Le(A,h,I,C,G){return h=+h,I=I>>>0,G||_e(A,h,I,4),t.write(A,h,I,C,23,4),I+4}o.prototype.writeFloatLE=function(h,I,C){return Le(this,h,I,!0,C)},o.prototype.writeFloatBE=function(h,I,C){return Le(this,h,I,!1,C)};function _t(A,h,I,C,G){return h=+h,I=I>>>0,G||_e(A,h,I,8),t.write(A,h,I,C,52,8),I+8}o.prototype.writeDoubleLE=function(h,I,C){return _t(this,h,I,!0,C)},o.prototype.writeDoubleBE=function(h,I,C){return _t(this,h,I,!1,C)},o.prototype.copy=function(h,I,C,G){if(!o.isBuffer(h))throw new TypeError("argument should be a Buffer");if(C||(C=0),!G&&G!==0&&(G=this.length),I>=h.length&&(I=h.length),I||(I=0),G>0&&G=this.length)throw new RangeError("Index out of range");if(G<0)throw new RangeError("sourceEnd out of bounds");G>this.length&&(G=this.length),h.length-I>>0,C=C===void 0?this.length:C>>>0,h||(h=0);let te;if(typeof h=="number")for(te=I;tenn(2,32)?G=Me(String(I)):typeof I=="bigint"&&(G=String(I),(I>nn(BigInt(2),BigInt(32))||I<-nn(BigInt(2),BigInt(32)))&&(G=Me(G)),G+="n"),C+=` It must be ${h}. Received ${G}`,C},RangeError);function Me(A){let h="",I=A.length,C=A[0]==="-"?1:0;for(;I>=C+4;I-=3)h=`_${A.slice(I-3,I)}${h}`;return`${A.slice(0,I)}${h}`}function Qe(A,h,I){tt(h,"offset"),(A[h]===void 0||A[h+I]===void 0)&&bt(h,A.length-(I+1))}function Lt(A,h,I,C,G,te){if(A>I||A3?h===0||h===BigInt(0)?pt=`>= 0${le} and < 2${le} ** ${(te+1)*8}${le}`:pt=`>= -(2${le} ** ${(te+1)*8-1}${le}) and < 2 ** ${(te+1)*8-1}${le}`:pt=`>= ${h}${le} and <= ${I}${le}`,new Y.ERR_OUT_OF_RANGE("value",pt,A)}Qe(C,G,te)}function tt(A,h){if(typeof A!="number")throw new Y.ERR_INVALID_ARG_TYPE(h,"number",A)}function bt(A,h,I){throw Math.floor(A)!==A?(tt(A,I),new Y.ERR_OUT_OF_RANGE(I||"offset","an integer",A)):h<0?new Y.ERR_BUFFER_OUT_OF_BOUNDS:new Y.ERR_OUT_OF_RANGE(I||"offset",`>= ${I?1:0} and <= ${h}`,A)}let za=/[^+/0-9A-Za-z-_]/g;function qr(A){if(A=A.split("=")[0],A=A.trim().replace(za,""),A.length<2)return"";for(;A.length%4!==0;)A=A+"=";return A}function Wa(A,h){h=h||1/0;let I,C=A.length,G=null,te=[];for(let le=0;le55295&&I<57344){if(!G){if(I>56319){(h-=3)>-1&&te.push(239,191,189);continue}else if(le+1===C){(h-=3)>-1&&te.push(239,191,189);continue}G=I;continue}if(I<56320){(h-=3)>-1&&te.push(239,191,189),G=I;continue}I=(G-55296<<10|I-56320)+65536}else G&&(h-=3)>-1&&te.push(239,191,189);if(G=null,I<128){if((h-=1)<0)break;te.push(I)}else if(I<2048){if((h-=2)<0)break;te.push(I>>6|192,I&63|128)}else if(I<65536){if((h-=3)<0)break;te.push(I>>12|224,I>>6&63|128,I&63|128)}else if(I<1114112){if((h-=4)<0)break;te.push(I>>18|240,I>>12&63|128,I>>6&63|128,I&63|128)}else throw new Error("Invalid code point")}return te}function Ic(A){let h=[];for(let I=0;I>8,G=I%256,te.push(G),te.push(C);return te}function mr(A){return e.toByteArray(qr(A))}function ri(A,h,I,C){let G;for(G=0;G=h.length||G>=A.length);++G)h[G+I]=A[G];return G}function Mt(A,h){return A instanceof h||A!=null&&A.constructor!=null&&A.constructor.name!=null&&A.constructor.name===h.name}function Nr(A){return A!==A}let lu=function(){let A="0123456789abcdef",h=new Array(256);for(let I=0;I<16;++I){let C=I*16;for(let G=0;G<16;++G)h[C+G]=A[I]+A[G]}return h}();function Ia(A){return typeof BigInt=="undefined"?du:A}function du(){throw new Error("BigInt not supported")}return vu}var id,_R,Yf,vR,vu,SR,Su,D,nde,rde,OR=gu(()=>{"use strict";f();N();m();id={},_R=!1;Yf={},vR=!1;vu={},SR=!1;Su=kY();Su.Buffer;Su.SlowBuffer;Su.INSPECT_MAX_BYTES;Su.kMaxLength;D=Su.Buffer,nde=Su.INSPECT_MAX_BYTES,rde=Su.kMaxLength});var N=gu(()=>{"use strict";OR()});var DR=w(Bc=>{"use strict";f();N();m();Object.defineProperty(Bc,"__esModule",{value:!0});Bc.versionInfo=Bc.version=void 0;var MY="16.9.0";Bc.version=MY;var xY=Object.freeze({major:16,minor:9,patch:0,preReleaseTag:null});Bc.versionInfo=xY});var Cr=w(sy=>{"use strict";f();N();m();Object.defineProperty(sy,"__esModule",{value:!0});sy.devAssert=qY;function qY(e,t){if(!!!e)throw new Error(t)}});var Jf=w(oy=>{"use strict";f();N();m();Object.defineProperty(oy,"__esModule",{value:!0});oy.isPromise=VY;function VY(e){return typeof(e==null?void 0:e.then)=="function"}});var Sa=w(uy=>{"use strict";f();N();m();Object.defineProperty(uy,"__esModule",{value:!0});uy.isObjectLike=jY;function jY(e){return typeof e=="object"&&e!==null}});var Ir=w(cy=>{"use strict";f();N();m();Object.defineProperty(cy,"__esModule",{value:!0});cy.invariant=KY;function KY(e,t){if(!!!e)throw new Error(t!=null?t:"Unexpected invariant triggered.")}});var Hf=w(ly=>{"use strict";f();N();m();Object.defineProperty(ly,"__esModule",{value:!0});ly.getLocation=QY;var GY=Ir(),$Y=/\r\n|[\n\r]/g;function QY(e,t){let n=0,r=1;for(let i of e.body.matchAll($Y)){if(typeof i.index=="number"||(0,GY.invariant)(!1),i.index>=t)break;n=i.index+i[0].length,r+=1}return{line:r,column:t+1-n}}});var dy=w(zf=>{"use strict";f();N();m();Object.defineProperty(zf,"__esModule",{value:!0});zf.printLocation=JY;zf.printSourceLocation=AR;var YY=Hf();function JY(e){return AR(e.source,(0,YY.getLocation)(e.source,e.start))}function AR(e,t){let n=e.locationOffset.column-1,r="".padStart(n)+e.body,i=t.line-1,a=e.locationOffset.line-1,o=t.line+a,c=t.line===1?n:0,l=t.column+c,p=`${e.name}:${o}:${l} +`,T=r.split(/\r\n|[\n\r]/g),y=T[i];if(y.length>120){let g=Math.floor(l/80),_=l%80,F=[];for(let U=0;U["|",U]),["|","^".padStart(_)],["|",F[g+1]]])}return p+bR([[`${o-1} |`,T[i-1]],[`${o} |`,y],["|","^".padStart(l)],[`${o+1} |`,T[i+1]]])}function bR(e){let t=e.filter(([r,i])=>i!==void 0),n=Math.max(...t.map(([r])=>r.length));return t.map(([r,i])=>r.padStart(n)+(i?" "+i:"")).join(` +`)}});var He=w(Uc=>{"use strict";f();N();m();Object.defineProperty(Uc,"__esModule",{value:!0});Uc.GraphQLError=void 0;Uc.formatError=XY;Uc.printError=WY;var HY=Sa(),RR=Hf(),FR=dy();function zY(e){let t=e[0];return t==null||"kind"in t||"length"in t?{nodes:t,source:e[1],positions:e[2],path:e[3],originalError:e[4],extensions:e[5]}:t}var py=class e extends Error{constructor(t,...n){var r,i,a;let{nodes:o,source:c,positions:l,path:p,originalError:T,extensions:y}=zY(n);super(t),this.name="GraphQLError",this.path=p!=null?p:void 0,this.originalError=T!=null?T:void 0,this.nodes=PR(Array.isArray(o)?o:o?[o]:void 0);let g=PR((r=this.nodes)===null||r===void 0?void 0:r.map(F=>F.loc).filter(F=>F!=null));this.source=c!=null?c:g==null||(i=g[0])===null||i===void 0?void 0:i.source,this.positions=l!=null?l:g==null?void 0:g.map(F=>F.start),this.locations=l&&c?l.map(F=>(0,RR.getLocation)(c,F)):g==null?void 0:g.map(F=>(0,RR.getLocation)(F.source,F.start));let _=(0,HY.isObjectLike)(T==null?void 0:T.extensions)?T==null?void 0:T.extensions:void 0;this.extensions=(a=y!=null?y:_)!==null&&a!==void 0?a:Object.create(null),Object.defineProperties(this,{message:{writable:!0,enumerable:!0},name:{enumerable:!1},nodes:{enumerable:!1},source:{enumerable:!1},positions:{enumerable:!1},originalError:{enumerable:!1}}),T!=null&&T.stack?Object.defineProperty(this,"stack",{value:T.stack,writable:!0,configurable:!0}):Error.captureStackTrace?Error.captureStackTrace(this,e):Object.defineProperty(this,"stack",{value:Error().stack,writable:!0,configurable:!0})}get[Symbol.toStringTag](){return"GraphQLError"}toString(){let t=this.message;if(this.nodes)for(let n of this.nodes)n.loc&&(t+=` -`+(0,AR.printLocation)(n.loc));else if(this.source&&this.locations)for(let n of this.locations)t+=` +`+(0,FR.printLocation)(n.loc));else if(this.source&&this.locations)for(let n of this.locations)t+=` -`+(0,AR.printSourceLocation)(this.source,n);return t}toJSON(){let t={message:this.message};return this.locations!=null&&(t.locations=this.locations),this.path!=null&&(t.path=this.path),this.extensions!=null&&Object.keys(this.extensions).length>0&&(t.extensions=this.extensions),t}};Bc.GraphQLError=dy;function RR(e){return e===void 0||e.length===0?void 0:e}function HY(e){return e.toString()}function zY(e){return e.toJSON()}});var zf=P(py=>{"use strict";f();T();m();Object.defineProperty(py,"__esModule",{value:!0});py.syntaxError=XY;var WY=Je();function XY(e,t,n){return new WY.GraphQLError(`Syntax Error: ${n}`,{source:e,positions:[t]})}});var Oa=P(Si=>{"use strict";f();T();m();Object.defineProperty(Si,"__esModule",{value:!0});Si.Token=Si.QueryDocumentKeys=Si.OperationTypeNode=Si.Location=void 0;Si.isNode=eJ;var fy=class{constructor(t,n,r){this.start=t.start,this.end=n.end,this.startToken=t,this.endToken=n,this.source=r}get[Symbol.toStringTag](){return"Location"}toJSON(){return{start:this.start,end:this.end}}};Si.Location=fy;var my=class{constructor(t,n,r,i,a,o){this.kind=t,this.start=n,this.end=r,this.line=i,this.column=a,this.value=o,this.prev=null,this.next=null}get[Symbol.toStringTag](){return"Token"}toJSON(){return{kind:this.kind,value:this.value,line:this.line,column:this.column}}};Si.Token=my;var FR={Name:[],Document:["definitions"],OperationDefinition:["name","variableDefinitions","directives","selectionSet"],VariableDefinition:["variable","type","defaultValue","directives"],Variable:["name"],SelectionSet:["selections"],Field:["alias","name","arguments","directives","selectionSet"],Argument:["name","value"],FragmentSpread:["name","directives"],InlineFragment:["typeCondition","directives","selectionSet"],FragmentDefinition:["name","variableDefinitions","typeCondition","directives","selectionSet"],IntValue:[],FloatValue:[],StringValue:[],BooleanValue:[],NullValue:[],EnumValue:[],ListValue:["values"],ObjectValue:["fields"],ObjectField:["name","value"],Directive:["name","arguments"],NamedType:["name"],ListType:["type"],NonNullType:["type"],SchemaDefinition:["description","directives","operationTypes"],OperationTypeDefinition:["type"],ScalarTypeDefinition:["description","name","directives"],ObjectTypeDefinition:["description","name","interfaces","directives","fields"],FieldDefinition:["description","name","arguments","type","directives"],InputValueDefinition:["description","name","type","defaultValue","directives"],InterfaceTypeDefinition:["description","name","interfaces","directives","fields"],UnionTypeDefinition:["description","name","directives","types"],EnumTypeDefinition:["description","name","directives","values"],EnumValueDefinition:["description","name","directives"],InputObjectTypeDefinition:["description","name","directives","fields"],DirectiveDefinition:["description","name","arguments","locations"],SchemaExtension:["directives","operationTypes"],ScalarTypeExtension:["name","directives"],ObjectTypeExtension:["name","interfaces","directives","fields"],InterfaceTypeExtension:["name","interfaces","directives","fields"],UnionTypeExtension:["name","directives","types"],EnumTypeExtension:["name","directives","values"],InputObjectTypeExtension:["name","directives","fields"]};Si.QueryDocumentKeys=FR;var ZY=new Set(Object.keys(FR));function eJ(e){let t=e==null?void 0:e.kind;return typeof t=="string"&&ZY.has(t)}var Ty;Si.OperationTypeNode=Ty;(function(e){e.QUERY="query",e.MUTATION="mutation",e.SUBSCRIPTION="subscription"})(Ty||(Si.OperationTypeNode=Ty={}))});var Uc=P(id=>{"use strict";f();T();m();Object.defineProperty(id,"__esModule",{value:!0});id.DirectiveLocation=void 0;var Ny;id.DirectiveLocation=Ny;(function(e){e.QUERY="QUERY",e.MUTATION="MUTATION",e.SUBSCRIPTION="SUBSCRIPTION",e.FIELD="FIELD",e.FRAGMENT_DEFINITION="FRAGMENT_DEFINITION",e.FRAGMENT_SPREAD="FRAGMENT_SPREAD",e.INLINE_FRAGMENT="INLINE_FRAGMENT",e.VARIABLE_DEFINITION="VARIABLE_DEFINITION",e.SCHEMA="SCHEMA",e.SCALAR="SCALAR",e.OBJECT="OBJECT",e.FIELD_DEFINITION="FIELD_DEFINITION",e.ARGUMENT_DEFINITION="ARGUMENT_DEFINITION",e.INTERFACE="INTERFACE",e.UNION="UNION",e.ENUM="ENUM",e.ENUM_VALUE="ENUM_VALUE",e.INPUT_OBJECT="INPUT_OBJECT",e.INPUT_FIELD_DEFINITION="INPUT_FIELD_DEFINITION"})(Ny||(id.DirectiveLocation=Ny={}))});var Rt=P(ad=>{"use strict";f();T();m();Object.defineProperty(ad,"__esModule",{value:!0});ad.Kind=void 0;var hy;ad.Kind=hy;(function(e){e.NAME="Name",e.DOCUMENT="Document",e.OPERATION_DEFINITION="OperationDefinition",e.VARIABLE_DEFINITION="VariableDefinition",e.SELECTION_SET="SelectionSet",e.FIELD="Field",e.ARGUMENT="Argument",e.FRAGMENT_SPREAD="FragmentSpread",e.INLINE_FRAGMENT="InlineFragment",e.FRAGMENT_DEFINITION="FragmentDefinition",e.VARIABLE="Variable",e.INT="IntValue",e.FLOAT="FloatValue",e.STRING="StringValue",e.BOOLEAN="BooleanValue",e.NULL="NullValue",e.ENUM="EnumValue",e.LIST="ListValue",e.OBJECT="ObjectValue",e.OBJECT_FIELD="ObjectField",e.DIRECTIVE="Directive",e.NAMED_TYPE="NamedType",e.LIST_TYPE="ListType",e.NON_NULL_TYPE="NonNullType",e.SCHEMA_DEFINITION="SchemaDefinition",e.OPERATION_TYPE_DEFINITION="OperationTypeDefinition",e.SCALAR_TYPE_DEFINITION="ScalarTypeDefinition",e.OBJECT_TYPE_DEFINITION="ObjectTypeDefinition",e.FIELD_DEFINITION="FieldDefinition",e.INPUT_VALUE_DEFINITION="InputValueDefinition",e.INTERFACE_TYPE_DEFINITION="InterfaceTypeDefinition",e.UNION_TYPE_DEFINITION="UnionTypeDefinition",e.ENUM_TYPE_DEFINITION="EnumTypeDefinition",e.ENUM_VALUE_DEFINITION="EnumValueDefinition",e.INPUT_OBJECT_TYPE_DEFINITION="InputObjectTypeDefinition",e.DIRECTIVE_DEFINITION="DirectiveDefinition",e.SCHEMA_EXTENSION="SchemaExtension",e.SCALAR_TYPE_EXTENSION="ScalarTypeExtension",e.OBJECT_TYPE_EXTENSION="ObjectTypeExtension",e.INTERFACE_TYPE_EXTENSION="InterfaceTypeExtension",e.UNION_TYPE_EXTENSION="UnionTypeExtension",e.ENUM_TYPE_EXTENSION="EnumTypeExtension",e.INPUT_OBJECT_TYPE_EXTENSION="InputObjectTypeExtension"})(hy||(ad.Kind=hy={}))});var Wf=P(vu=>{"use strict";f();T();m();Object.defineProperty(vu,"__esModule",{value:!0});vu.isDigit=PR;vu.isLetter=Ey;vu.isNameContinue=rJ;vu.isNameStart=nJ;vu.isWhiteSpace=tJ;function tJ(e){return e===9||e===32}function PR(e){return e>=48&&e<=57}function Ey(e){return e>=97&&e<=122||e>=65&&e<=90}function nJ(e){return Ey(e)||e===95}function rJ(e){return Ey(e)||PR(e)||e===95}});var od=P(sd=>{"use strict";f();T();m();Object.defineProperty(sd,"__esModule",{value:!0});sd.dedentBlockStringLines=iJ;sd.isPrintableAsBlockString=sJ;sd.printBlockString=oJ;var yy=Wf();function iJ(e){var t;let n=Number.MAX_SAFE_INTEGER,r=null,i=-1;for(let o=0;oc===0?o:o.slice(n)).slice((t=r)!==null&&t!==void 0?t:0,i+1)}function aJ(e){let t=0;for(;t1&&r.slice(1).every(_=>_.length===0||(0,yy.isWhiteSpace)(_.charCodeAt(0))),o=n.endsWith('\\"""'),c=e.endsWith('"')&&!o,l=e.endsWith("\\"),p=c||l,N=!(t!=null&&t.minimize)&&(!i||e.length>70||p||a||o),y="",g=i&&(0,yy.isWhiteSpace)(e.charCodeAt(0));return(N&&!g||a)&&(y+=` -`),y+=n,(N||p)&&(y+=` -`),'"""'+y+'"""'}});var cd=P(ud=>{"use strict";f();T();m();Object.defineProperty(ud,"__esModule",{value:!0});ud.TokenKind=void 0;var Iy;ud.TokenKind=Iy;(function(e){e.SOF="",e.EOF="",e.BANG="!",e.DOLLAR="$",e.AMP="&",e.PAREN_L="(",e.PAREN_R=")",e.SPREAD="...",e.COLON=":",e.EQUALS="=",e.AT="@",e.BRACKET_L="[",e.BRACKET_R="]",e.BRACE_L="{",e.PIPE="|",e.BRACE_R="}",e.NAME="Name",e.INT="Int",e.FLOAT="Float",e.STRING="String",e.BLOCK_STRING="BlockString",e.COMMENT="Comment"})(Iy||(ud.TokenKind=Iy={}))});var Zf=P(dd=>{"use strict";f();T();m();Object.defineProperty(dd,"__esModule",{value:!0});dd.Lexer=void 0;dd.isPunctuatorTokenKind=cJ;var Wi=zf(),LR=Oa(),uJ=od(),Su=Wf(),It=cd(),_y=class{constructor(t){let n=new LR.Token(It.TokenKind.SOF,0,0,0,0);this.source=t,this.lastToken=n,this.token=n,this.line=1,this.lineStart=0}get[Symbol.toStringTag](){return"Lexer"}advance(){return this.lastToken=this.token,this.token=this.lookahead()}lookahead(){let t=this.token;if(t.kind!==It.TokenKind.EOF)do if(t.next)t=t.next;else{let n=lJ(this,t.end);t.next=n,n.prev=t,t=n}while(t.kind===It.TokenKind.COMMENT);return t}};dd.Lexer=_y;function cJ(e){return e===It.TokenKind.BANG||e===It.TokenKind.DOLLAR||e===It.TokenKind.AMP||e===It.TokenKind.PAREN_L||e===It.TokenKind.PAREN_R||e===It.TokenKind.SPREAD||e===It.TokenKind.COLON||e===It.TokenKind.EQUALS||e===It.TokenKind.AT||e===It.TokenKind.BRACKET_L||e===It.TokenKind.BRACKET_R||e===It.TokenKind.BRACE_L||e===It.TokenKind.PIPE||e===It.TokenKind.BRACE_R}function kc(e){return e>=0&&e<=55295||e>=57344&&e<=1114111}function Xf(e,t){return CR(e.charCodeAt(t))&&BR(e.charCodeAt(t+1))}function CR(e){return e>=55296&&e<=56319}function BR(e){return e>=56320&&e<=57343}function Ou(e,t){let n=e.source.body.codePointAt(t);if(n===void 0)return It.TokenKind.EOF;if(n>=32&&n<=126){let r=String.fromCodePoint(n);return r==='"'?`'"'`:`"${r}"`}return"U+"+n.toString(16).toUpperCase().padStart(4,"0")}function $n(e,t,n,r,i){let a=e.line,o=1+n-e.lineStart;return new LR.Token(t,n,r,a,o,i)}function lJ(e,t){let n=e.source.body,r=n.length,i=t;for(;i=48&&e<=57?e-48:e>=65&&e<=70?e-55:e>=97&&e<=102?e-87:-1}function NJ(e,t){let n=e.source.body;switch(n.charCodeAt(t+1)){case 34:return{value:'"',size:2};case 92:return{value:"\\",size:2};case 47:return{value:"/",size:2};case 98:return{value:"\b",size:2};case 102:return{value:"\f",size:2};case 110:return{value:` -`,size:2};case 114:return{value:"\r",size:2};case 116:return{value:" ",size:2}}throw(0,Wi.syntaxError)(e.source,t,`Invalid character escape sequence: "${n.slice(t,t+2)}".`)}function hJ(e,t){let n=e.source.body,r=n.length,i=e.lineStart,a=t+3,o=a,c="",l=[];for(;a{"use strict";f();T();m();Object.defineProperty(vy,"__esModule",{value:!0});vy.inspect=IJ;var yJ=10,UR=2;function IJ(e){return em(e,[])}function em(e,t){switch(typeof e){case"string":return JSON.stringify(e);case"function":return e.name?`[function ${e.name}]`:"[function]";case"object":return gJ(e,t);default:return String(e)}}function gJ(e,t){if(e===null)return"null";if(t.includes(e))return"[Circular]";let n=[...t,e];if(_J(e)){let r=e.toJSON();if(r!==e)return typeof r=="string"?r:em(r,n)}else if(Array.isArray(e))return SJ(e,n);return vJ(e,n)}function _J(e){return typeof e.toJSON=="function"}function vJ(e,t){let n=Object.entries(e);return n.length===0?"{}":t.length>UR?"["+OJ(e)+"]":"{ "+n.map(([i,a])=>i+": "+em(a,t)).join(", ")+" }"}function SJ(e,t){if(e.length===0)return"[]";if(t.length>UR)return"[Array]";let n=Math.min(yJ,e.length),r=e.length-n,i=[];for(let a=0;a1&&i.push(`... ${r} more items`),"["+i.join(", ")+"]"}function OJ(e){let t=Object.prototype.toString.call(e).replace(/^\[object /,"").replace(/]$/,"");if(t==="Object"&&typeof e.constructor=="function"){let n=e.constructor.name;if(typeof n=="string"&&n!=="")return n}return t}});var pd=P(tm=>{"use strict";f();T();m();Object.defineProperty(tm,"__esModule",{value:!0});tm.instanceOf=void 0;var bJ=Yt(),DJ=globalThis.process&&O.env.NODE_ENV==="production",AJ=DJ?function(t,n){return t instanceof n}:function(t,n){if(t instanceof n)return!0;if(typeof t=="object"&&t!==null){var r;let i=n.prototype[Symbol.toStringTag],a=Symbol.toStringTag in t?t[Symbol.toStringTag]:(r=t.constructor)===null||r===void 0?void 0:r.name;if(i===a){let o=(0,bJ.inspect)(t);throw new Error(`Cannot use ${i} "${o}" from another module or realm. +`+(0,FR.printSourceLocation)(this.source,n);return t}toJSON(){let t={message:this.message};return this.locations!=null&&(t.locations=this.locations),this.path!=null&&(t.path=this.path),this.extensions!=null&&Object.keys(this.extensions).length>0&&(t.extensions=this.extensions),t}};Uc.GraphQLError=py;function PR(e){return e===void 0||e.length===0?void 0:e}function WY(e){return e.toString()}function XY(e){return e.toJSON()}});var Wf=w(fy=>{"use strict";f();N();m();Object.defineProperty(fy,"__esModule",{value:!0});fy.syntaxError=eJ;var ZY=He();function eJ(e,t,n){return new ZY.GraphQLError(`Syntax Error: ${n}`,{source:e,positions:[t]})}});var Oa=w(Oi=>{"use strict";f();N();m();Object.defineProperty(Oi,"__esModule",{value:!0});Oi.Token=Oi.QueryDocumentKeys=Oi.OperationTypeNode=Oi.Location=void 0;Oi.isNode=nJ;var my=class{constructor(t,n,r){this.start=t.start,this.end=n.end,this.startToken=t,this.endToken=n,this.source=r}get[Symbol.toStringTag](){return"Location"}toJSON(){return{start:this.start,end:this.end}}};Oi.Location=my;var Ny=class{constructor(t,n,r,i,a,o){this.kind=t,this.start=n,this.end=r,this.line=i,this.column=a,this.value=o,this.prev=null,this.next=null}get[Symbol.toStringTag](){return"Token"}toJSON(){return{kind:this.kind,value:this.value,line:this.line,column:this.column}}};Oi.Token=Ny;var wR={Name:[],Document:["definitions"],OperationDefinition:["name","variableDefinitions","directives","selectionSet"],VariableDefinition:["variable","type","defaultValue","directives"],Variable:["name"],SelectionSet:["selections"],Field:["alias","name","arguments","directives","selectionSet"],Argument:["name","value"],FragmentSpread:["name","directives"],InlineFragment:["typeCondition","directives","selectionSet"],FragmentDefinition:["name","variableDefinitions","typeCondition","directives","selectionSet"],IntValue:[],FloatValue:[],StringValue:[],BooleanValue:[],NullValue:[],EnumValue:[],ListValue:["values"],ObjectValue:["fields"],ObjectField:["name","value"],Directive:["name","arguments"],NamedType:["name"],ListType:["type"],NonNullType:["type"],SchemaDefinition:["description","directives","operationTypes"],OperationTypeDefinition:["type"],ScalarTypeDefinition:["description","name","directives"],ObjectTypeDefinition:["description","name","interfaces","directives","fields"],FieldDefinition:["description","name","arguments","type","directives"],InputValueDefinition:["description","name","type","defaultValue","directives"],InterfaceTypeDefinition:["description","name","interfaces","directives","fields"],UnionTypeDefinition:["description","name","directives","types"],EnumTypeDefinition:["description","name","directives","values"],EnumValueDefinition:["description","name","directives"],InputObjectTypeDefinition:["description","name","directives","fields"],DirectiveDefinition:["description","name","arguments","locations"],SchemaExtension:["directives","operationTypes"],ScalarTypeExtension:["name","directives"],ObjectTypeExtension:["name","interfaces","directives","fields"],InterfaceTypeExtension:["name","interfaces","directives","fields"],UnionTypeExtension:["name","directives","types"],EnumTypeExtension:["name","directives","values"],InputObjectTypeExtension:["name","directives","fields"]};Oi.QueryDocumentKeys=wR;var tJ=new Set(Object.keys(wR));function nJ(e){let t=e==null?void 0:e.kind;return typeof t=="string"&&tJ.has(t)}var Ty;Oi.OperationTypeNode=Ty;(function(e){e.QUERY="query",e.MUTATION="mutation",e.SUBSCRIPTION="subscription"})(Ty||(Oi.OperationTypeNode=Ty={}))});var kc=w(ad=>{"use strict";f();N();m();Object.defineProperty(ad,"__esModule",{value:!0});ad.DirectiveLocation=void 0;var Ey;ad.DirectiveLocation=Ey;(function(e){e.QUERY="QUERY",e.MUTATION="MUTATION",e.SUBSCRIPTION="SUBSCRIPTION",e.FIELD="FIELD",e.FRAGMENT_DEFINITION="FRAGMENT_DEFINITION",e.FRAGMENT_SPREAD="FRAGMENT_SPREAD",e.INLINE_FRAGMENT="INLINE_FRAGMENT",e.VARIABLE_DEFINITION="VARIABLE_DEFINITION",e.SCHEMA="SCHEMA",e.SCALAR="SCALAR",e.OBJECT="OBJECT",e.FIELD_DEFINITION="FIELD_DEFINITION",e.ARGUMENT_DEFINITION="ARGUMENT_DEFINITION",e.INTERFACE="INTERFACE",e.UNION="UNION",e.ENUM="ENUM",e.ENUM_VALUE="ENUM_VALUE",e.INPUT_OBJECT="INPUT_OBJECT",e.INPUT_FIELD_DEFINITION="INPUT_FIELD_DEFINITION"})(Ey||(ad.DirectiveLocation=Ey={}))});var Rt=w(sd=>{"use strict";f();N();m();Object.defineProperty(sd,"__esModule",{value:!0});sd.Kind=void 0;var hy;sd.Kind=hy;(function(e){e.NAME="Name",e.DOCUMENT="Document",e.OPERATION_DEFINITION="OperationDefinition",e.VARIABLE_DEFINITION="VariableDefinition",e.SELECTION_SET="SelectionSet",e.FIELD="Field",e.ARGUMENT="Argument",e.FRAGMENT_SPREAD="FragmentSpread",e.INLINE_FRAGMENT="InlineFragment",e.FRAGMENT_DEFINITION="FragmentDefinition",e.VARIABLE="Variable",e.INT="IntValue",e.FLOAT="FloatValue",e.STRING="StringValue",e.BOOLEAN="BooleanValue",e.NULL="NullValue",e.ENUM="EnumValue",e.LIST="ListValue",e.OBJECT="ObjectValue",e.OBJECT_FIELD="ObjectField",e.DIRECTIVE="Directive",e.NAMED_TYPE="NamedType",e.LIST_TYPE="ListType",e.NON_NULL_TYPE="NonNullType",e.SCHEMA_DEFINITION="SchemaDefinition",e.OPERATION_TYPE_DEFINITION="OperationTypeDefinition",e.SCALAR_TYPE_DEFINITION="ScalarTypeDefinition",e.OBJECT_TYPE_DEFINITION="ObjectTypeDefinition",e.FIELD_DEFINITION="FieldDefinition",e.INPUT_VALUE_DEFINITION="InputValueDefinition",e.INTERFACE_TYPE_DEFINITION="InterfaceTypeDefinition",e.UNION_TYPE_DEFINITION="UnionTypeDefinition",e.ENUM_TYPE_DEFINITION="EnumTypeDefinition",e.ENUM_VALUE_DEFINITION="EnumValueDefinition",e.INPUT_OBJECT_TYPE_DEFINITION="InputObjectTypeDefinition",e.DIRECTIVE_DEFINITION="DirectiveDefinition",e.SCHEMA_EXTENSION="SchemaExtension",e.SCALAR_TYPE_EXTENSION="ScalarTypeExtension",e.OBJECT_TYPE_EXTENSION="ObjectTypeExtension",e.INTERFACE_TYPE_EXTENSION="InterfaceTypeExtension",e.UNION_TYPE_EXTENSION="UnionTypeExtension",e.ENUM_TYPE_EXTENSION="EnumTypeExtension",e.INPUT_OBJECT_TYPE_EXTENSION="InputObjectTypeExtension"})(hy||(sd.Kind=hy={}))});var Xf=w(Ou=>{"use strict";f();N();m();Object.defineProperty(Ou,"__esModule",{value:!0});Ou.isDigit=LR;Ou.isLetter=yy;Ou.isNameContinue=aJ;Ou.isNameStart=iJ;Ou.isWhiteSpace=rJ;function rJ(e){return e===9||e===32}function LR(e){return e>=48&&e<=57}function yy(e){return e>=97&&e<=122||e>=65&&e<=90}function iJ(e){return yy(e)||e===95}function aJ(e){return yy(e)||LR(e)||e===95}});var ud=w(od=>{"use strict";f();N();m();Object.defineProperty(od,"__esModule",{value:!0});od.dedentBlockStringLines=sJ;od.isPrintableAsBlockString=uJ;od.printBlockString=cJ;var Iy=Xf();function sJ(e){var t;let n=Number.MAX_SAFE_INTEGER,r=null,i=-1;for(let o=0;oc===0?o:o.slice(n)).slice((t=r)!==null&&t!==void 0?t:0,i+1)}function oJ(e){let t=0;for(;t1&&r.slice(1).every(_=>_.length===0||(0,Iy.isWhiteSpace)(_.charCodeAt(0))),o=n.endsWith('\\"""'),c=e.endsWith('"')&&!o,l=e.endsWith("\\"),p=c||l,T=!(t!=null&&t.minimize)&&(!i||e.length>70||p||a||o),y="",g=i&&(0,Iy.isWhiteSpace)(e.charCodeAt(0));return(T&&!g||a)&&(y+=` +`),y+=n,(T||p)&&(y+=` +`),'"""'+y+'"""'}});var ld=w(cd=>{"use strict";f();N();m();Object.defineProperty(cd,"__esModule",{value:!0});cd.TokenKind=void 0;var gy;cd.TokenKind=gy;(function(e){e.SOF="",e.EOF="",e.BANG="!",e.DOLLAR="$",e.AMP="&",e.PAREN_L="(",e.PAREN_R=")",e.SPREAD="...",e.COLON=":",e.EQUALS="=",e.AT="@",e.BRACKET_L="[",e.BRACKET_R="]",e.BRACE_L="{",e.PIPE="|",e.BRACE_R="}",e.NAME="Name",e.INT="Int",e.FLOAT="Float",e.STRING="String",e.BLOCK_STRING="BlockString",e.COMMENT="Comment"})(gy||(cd.TokenKind=gy={}))});var em=w(pd=>{"use strict";f();N();m();Object.defineProperty(pd,"__esModule",{value:!0});pd.Lexer=void 0;pd.isPunctuatorTokenKind=dJ;var Wi=Wf(),BR=Oa(),lJ=ud(),Du=Xf(),It=ld(),vy=class{constructor(t){let n=new BR.Token(It.TokenKind.SOF,0,0,0,0);this.source=t,this.lastToken=n,this.token=n,this.line=1,this.lineStart=0}get[Symbol.toStringTag](){return"Lexer"}advance(){return this.lastToken=this.token,this.token=this.lookahead()}lookahead(){let t=this.token;if(t.kind!==It.TokenKind.EOF)do if(t.next)t=t.next;else{let n=pJ(this,t.end);t.next=n,n.prev=t,t=n}while(t.kind===It.TokenKind.COMMENT);return t}};pd.Lexer=vy;function dJ(e){return e===It.TokenKind.BANG||e===It.TokenKind.DOLLAR||e===It.TokenKind.AMP||e===It.TokenKind.PAREN_L||e===It.TokenKind.PAREN_R||e===It.TokenKind.SPREAD||e===It.TokenKind.COLON||e===It.TokenKind.EQUALS||e===It.TokenKind.AT||e===It.TokenKind.BRACKET_L||e===It.TokenKind.BRACKET_R||e===It.TokenKind.BRACE_L||e===It.TokenKind.PIPE||e===It.TokenKind.BRACE_R}function Mc(e){return e>=0&&e<=55295||e>=57344&&e<=1114111}function Zf(e,t){return UR(e.charCodeAt(t))&&kR(e.charCodeAt(t+1))}function UR(e){return e>=55296&&e<=56319}function kR(e){return e>=56320&&e<=57343}function bu(e,t){let n=e.source.body.codePointAt(t);if(n===void 0)return It.TokenKind.EOF;if(n>=32&&n<=126){let r=String.fromCodePoint(n);return r==='"'?`'"'`:`"${r}"`}return"U+"+n.toString(16).toUpperCase().padStart(4,"0")}function $n(e,t,n,r,i){let a=e.line,o=1+n-e.lineStart;return new BR.Token(t,n,r,a,o,i)}function pJ(e,t){let n=e.source.body,r=n.length,i=t;for(;i=48&&e<=57?e-48:e>=65&&e<=70?e-55:e>=97&&e<=102?e-87:-1}function hJ(e,t){let n=e.source.body;switch(n.charCodeAt(t+1)){case 34:return{value:'"',size:2};case 92:return{value:"\\",size:2};case 47:return{value:"/",size:2};case 98:return{value:"\b",size:2};case 102:return{value:"\f",size:2};case 110:return{value:` +`,size:2};case 114:return{value:"\r",size:2};case 116:return{value:" ",size:2}}throw(0,Wi.syntaxError)(e.source,t,`Invalid character escape sequence: "${n.slice(t,t+2)}".`)}function yJ(e,t){let n=e.source.body,r=n.length,i=e.lineStart,a=t+3,o=a,c="",l=[];for(;a{"use strict";f();N();m();Object.defineProperty(Sy,"__esModule",{value:!0});Sy.inspect=_J;var gJ=10,MR=2;function _J(e){return tm(e,[])}function tm(e,t){switch(typeof e){case"string":return JSON.stringify(e);case"function":return e.name?`[function ${e.name}]`:"[function]";case"object":return vJ(e,t);default:return String(e)}}function vJ(e,t){if(e===null)return"null";if(t.includes(e))return"[Circular]";let n=[...t,e];if(SJ(e)){let r=e.toJSON();if(r!==e)return typeof r=="string"?r:tm(r,n)}else if(Array.isArray(e))return DJ(e,n);return OJ(e,n)}function SJ(e){return typeof e.toJSON=="function"}function OJ(e,t){let n=Object.entries(e);return n.length===0?"{}":t.length>MR?"["+bJ(e)+"]":"{ "+n.map(([i,a])=>i+": "+tm(a,t)).join(", ")+" }"}function DJ(e,t){if(e.length===0)return"[]";if(t.length>MR)return"[Array]";let n=Math.min(gJ,e.length),r=e.length-n,i=[];for(let a=0;a1&&i.push(`... ${r} more items`),"["+i.join(", ")+"]"}function bJ(e){let t=Object.prototype.toString.call(e).replace(/^\[object /,"").replace(/]$/,"");if(t==="Object"&&typeof e.constructor=="function"){let n=e.constructor.name;if(typeof n=="string"&&n!=="")return n}return t}});var fd=w(nm=>{"use strict";f();N();m();Object.defineProperty(nm,"__esModule",{value:!0});nm.instanceOf=void 0;var AJ=Yt(),RJ=globalThis.process&&O.env.NODE_ENV==="production",FJ=RJ?function(t,n){return t instanceof n}:function(t,n){if(t instanceof n)return!0;if(typeof t=="object"&&t!==null){var r;let i=n.prototype[Symbol.toStringTag],a=Symbol.toStringTag in t?t[Symbol.toStringTag]:(r=t.constructor)===null||r===void 0?void 0:r.name;if(i===a){let o=(0,AJ.inspect)(t);throw new Error(`Cannot use ${i} "${o}" from another module or realm. Ensure that there is only one instance of "graphql" in the node_modules directory. If different versions of "graphql" are the dependencies of other @@ -32,17 +32,17 @@ https://yarnpkg.com/en/docs/selective-version-resolutions Duplicate "graphql" modules cannot be used at the same time since different versions may have different capabilities and behavior. The data from one version used in the function from another could produce confusing and -spurious results.`)}}return!1};tm.instanceOf=AJ});var rm=P(fd=>{"use strict";f();T();m();Object.defineProperty(fd,"__esModule",{value:!0});fd.Source=void 0;fd.isSource=PJ;var Sy=Cr(),RJ=Yt(),FJ=pd(),nm=class{constructor(t,n="GraphQL request",r={line:1,column:1}){typeof t=="string"||(0,Sy.devAssert)(!1,`Body must be a string. Received: ${(0,RJ.inspect)(t)}.`),this.body=t,this.name=n,this.locationOffset=r,this.locationOffset.line>0||(0,Sy.devAssert)(!1,"line in locationOffset is 1-indexed and must be positive."),this.locationOffset.column>0||(0,Sy.devAssert)(!1,"column in locationOffset is 1-indexed and must be positive.")}get[Symbol.toStringTag](){return"Source"}};fd.Source=nm;function PJ(e){return(0,FJ.instanceOf)(e,nm)}});var Mc=P(Uo=>{"use strict";f();T();m();Object.defineProperty(Uo,"__esModule",{value:!0});Uo.Parser=void 0;Uo.parse=LJ;Uo.parseConstValue=BJ;Uo.parseType=UJ;Uo.parseValue=CJ;var bu=zf(),md=Oa(),wJ=Uc(),at=Rt(),MR=Zf(),kR=rm(),Se=cd();function LJ(e,t){return new Du(e,t).parseDocument()}function CJ(e,t){let n=new Du(e,t);n.expectToken(Se.TokenKind.SOF);let r=n.parseValueLiteral(!1);return n.expectToken(Se.TokenKind.EOF),r}function BJ(e,t){let n=new Du(e,t);n.expectToken(Se.TokenKind.SOF);let r=n.parseConstValueLiteral();return n.expectToken(Se.TokenKind.EOF),r}function UJ(e,t){let n=new Du(e,t);n.expectToken(Se.TokenKind.SOF);let r=n.parseTypeReference();return n.expectToken(Se.TokenKind.EOF),r}var Du=class{constructor(t,n={}){let r=(0,kR.isSource)(t)?t:new kR.Source(t);this._lexer=new MR.Lexer(r),this._options=n,this._tokenCounter=0}parseName(){let t=this.expectToken(Se.TokenKind.NAME);return this.node(t,{kind:at.Kind.NAME,value:t.value})}parseDocument(){return this.node(this._lexer.token,{kind:at.Kind.DOCUMENT,definitions:this.many(Se.TokenKind.SOF,this.parseDefinition,Se.TokenKind.EOF)})}parseDefinition(){if(this.peek(Se.TokenKind.BRACE_L))return this.parseOperationDefinition();let t=this.peekDescription(),n=t?this._lexer.lookahead():this._lexer.token;if(n.kind===Se.TokenKind.NAME){switch(n.value){case"schema":return this.parseSchemaDefinition();case"scalar":return this.parseScalarTypeDefinition();case"type":return this.parseObjectTypeDefinition();case"interface":return this.parseInterfaceTypeDefinition();case"union":return this.parseUnionTypeDefinition();case"enum":return this.parseEnumTypeDefinition();case"input":return this.parseInputObjectTypeDefinition();case"directive":return this.parseDirectiveDefinition()}if(t)throw(0,bu.syntaxError)(this._lexer.source,this._lexer.token.start,"Unexpected description, descriptions are supported only on type definitions.");switch(n.value){case"query":case"mutation":case"subscription":return this.parseOperationDefinition();case"fragment":return this.parseFragmentDefinition();case"extend":return this.parseTypeSystemExtension()}}throw this.unexpected(n)}parseOperationDefinition(){let t=this._lexer.token;if(this.peek(Se.TokenKind.BRACE_L))return this.node(t,{kind:at.Kind.OPERATION_DEFINITION,operation:md.OperationTypeNode.QUERY,name:void 0,variableDefinitions:[],directives:[],selectionSet:this.parseSelectionSet()});let n=this.parseOperationType(),r;return this.peek(Se.TokenKind.NAME)&&(r=this.parseName()),this.node(t,{kind:at.Kind.OPERATION_DEFINITION,operation:n,name:r,variableDefinitions:this.parseVariableDefinitions(),directives:this.parseDirectives(!1),selectionSet:this.parseSelectionSet()})}parseOperationType(){let t=this.expectToken(Se.TokenKind.NAME);switch(t.value){case"query":return md.OperationTypeNode.QUERY;case"mutation":return md.OperationTypeNode.MUTATION;case"subscription":return md.OperationTypeNode.SUBSCRIPTION}throw this.unexpected(t)}parseVariableDefinitions(){return this.optionalMany(Se.TokenKind.PAREN_L,this.parseVariableDefinition,Se.TokenKind.PAREN_R)}parseVariableDefinition(){return this.node(this._lexer.token,{kind:at.Kind.VARIABLE_DEFINITION,variable:this.parseVariable(),type:(this.expectToken(Se.TokenKind.COLON),this.parseTypeReference()),defaultValue:this.expectOptionalToken(Se.TokenKind.EQUALS)?this.parseConstValueLiteral():void 0,directives:this.parseConstDirectives()})}parseVariable(){let t=this._lexer.token;return this.expectToken(Se.TokenKind.DOLLAR),this.node(t,{kind:at.Kind.VARIABLE,name:this.parseName()})}parseSelectionSet(){return this.node(this._lexer.token,{kind:at.Kind.SELECTION_SET,selections:this.many(Se.TokenKind.BRACE_L,this.parseSelection,Se.TokenKind.BRACE_R)})}parseSelection(){return this.peek(Se.TokenKind.SPREAD)?this.parseFragment():this.parseField()}parseField(){let t=this._lexer.token,n=this.parseName(),r,i;return this.expectOptionalToken(Se.TokenKind.COLON)?(r=n,i=this.parseName()):i=n,this.node(t,{kind:at.Kind.FIELD,alias:r,name:i,arguments:this.parseArguments(!1),directives:this.parseDirectives(!1),selectionSet:this.peek(Se.TokenKind.BRACE_L)?this.parseSelectionSet():void 0})}parseArguments(t){let n=t?this.parseConstArgument:this.parseArgument;return this.optionalMany(Se.TokenKind.PAREN_L,n,Se.TokenKind.PAREN_R)}parseArgument(t=!1){let n=this._lexer.token,r=this.parseName();return this.expectToken(Se.TokenKind.COLON),this.node(n,{kind:at.Kind.ARGUMENT,name:r,value:this.parseValueLiteral(t)})}parseConstArgument(){return this.parseArgument(!0)}parseFragment(){let t=this._lexer.token;this.expectToken(Se.TokenKind.SPREAD);let n=this.expectOptionalKeyword("on");return!n&&this.peek(Se.TokenKind.NAME)?this.node(t,{kind:at.Kind.FRAGMENT_SPREAD,name:this.parseFragmentName(),directives:this.parseDirectives(!1)}):this.node(t,{kind:at.Kind.INLINE_FRAGMENT,typeCondition:n?this.parseNamedType():void 0,directives:this.parseDirectives(!1),selectionSet:this.parseSelectionSet()})}parseFragmentDefinition(){let t=this._lexer.token;return this.expectKeyword("fragment"),this._options.allowLegacyFragmentVariables===!0?this.node(t,{kind:at.Kind.FRAGMENT_DEFINITION,name:this.parseFragmentName(),variableDefinitions:this.parseVariableDefinitions(),typeCondition:(this.expectKeyword("on"),this.parseNamedType()),directives:this.parseDirectives(!1),selectionSet:this.parseSelectionSet()}):this.node(t,{kind:at.Kind.FRAGMENT_DEFINITION,name:this.parseFragmentName(),typeCondition:(this.expectKeyword("on"),this.parseNamedType()),directives:this.parseDirectives(!1),selectionSet:this.parseSelectionSet()})}parseFragmentName(){if(this._lexer.token.value==="on")throw this.unexpected();return this.parseName()}parseValueLiteral(t){let n=this._lexer.token;switch(n.kind){case Se.TokenKind.BRACKET_L:return this.parseList(t);case Se.TokenKind.BRACE_L:return this.parseObject(t);case Se.TokenKind.INT:return this.advanceLexer(),this.node(n,{kind:at.Kind.INT,value:n.value});case Se.TokenKind.FLOAT:return this.advanceLexer(),this.node(n,{kind:at.Kind.FLOAT,value:n.value});case Se.TokenKind.STRING:case Se.TokenKind.BLOCK_STRING:return this.parseStringLiteral();case Se.TokenKind.NAME:switch(this.advanceLexer(),n.value){case"true":return this.node(n,{kind:at.Kind.BOOLEAN,value:!0});case"false":return this.node(n,{kind:at.Kind.BOOLEAN,value:!1});case"null":return this.node(n,{kind:at.Kind.NULL});default:return this.node(n,{kind:at.Kind.ENUM,value:n.value})}case Se.TokenKind.DOLLAR:if(t)if(this.expectToken(Se.TokenKind.DOLLAR),this._lexer.token.kind===Se.TokenKind.NAME){let r=this._lexer.token.value;throw(0,bu.syntaxError)(this._lexer.source,n.start,`Unexpected variable "$${r}" in constant value.`)}else throw this.unexpected(n);return this.parseVariable();default:throw this.unexpected()}}parseConstValueLiteral(){return this.parseValueLiteral(!0)}parseStringLiteral(){let t=this._lexer.token;return this.advanceLexer(),this.node(t,{kind:at.Kind.STRING,value:t.value,block:t.kind===Se.TokenKind.BLOCK_STRING})}parseList(t){let n=()=>this.parseValueLiteral(t);return this.node(this._lexer.token,{kind:at.Kind.LIST,values:this.any(Se.TokenKind.BRACKET_L,n,Se.TokenKind.BRACKET_R)})}parseObject(t){let n=()=>this.parseObjectField(t);return this.node(this._lexer.token,{kind:at.Kind.OBJECT,fields:this.any(Se.TokenKind.BRACE_L,n,Se.TokenKind.BRACE_R)})}parseObjectField(t){let n=this._lexer.token,r=this.parseName();return this.expectToken(Se.TokenKind.COLON),this.node(n,{kind:at.Kind.OBJECT_FIELD,name:r,value:this.parseValueLiteral(t)})}parseDirectives(t){let n=[];for(;this.peek(Se.TokenKind.AT);)n.push(this.parseDirective(t));return n}parseConstDirectives(){return this.parseDirectives(!0)}parseDirective(t){let n=this._lexer.token;return this.expectToken(Se.TokenKind.AT),this.node(n,{kind:at.Kind.DIRECTIVE,name:this.parseName(),arguments:this.parseArguments(t)})}parseTypeReference(){let t=this._lexer.token,n;if(this.expectOptionalToken(Se.TokenKind.BRACKET_L)){let r=this.parseTypeReference();this.expectToken(Se.TokenKind.BRACKET_R),n=this.node(t,{kind:at.Kind.LIST_TYPE,type:r})}else n=this.parseNamedType();return this.expectOptionalToken(Se.TokenKind.BANG)?this.node(t,{kind:at.Kind.NON_NULL_TYPE,type:n}):n}parseNamedType(){return this.node(this._lexer.token,{kind:at.Kind.NAMED_TYPE,name:this.parseName()})}peekDescription(){return this.peek(Se.TokenKind.STRING)||this.peek(Se.TokenKind.BLOCK_STRING)}parseDescription(){if(this.peekDescription())return this.parseStringLiteral()}parseSchemaDefinition(){let t=this._lexer.token,n=this.parseDescription();this.expectKeyword("schema");let r=this.parseConstDirectives(),i=this.many(Se.TokenKind.BRACE_L,this.parseOperationTypeDefinition,Se.TokenKind.BRACE_R);return this.node(t,{kind:at.Kind.SCHEMA_DEFINITION,description:n,directives:r,operationTypes:i})}parseOperationTypeDefinition(){let t=this._lexer.token,n=this.parseOperationType();this.expectToken(Se.TokenKind.COLON);let r=this.parseNamedType();return this.node(t,{kind:at.Kind.OPERATION_TYPE_DEFINITION,operation:n,type:r})}parseScalarTypeDefinition(){let t=this._lexer.token,n=this.parseDescription();this.expectKeyword("scalar");let r=this.parseName(),i=this.parseConstDirectives();return this.node(t,{kind:at.Kind.SCALAR_TYPE_DEFINITION,description:n,name:r,directives:i})}parseObjectTypeDefinition(){let t=this._lexer.token,n=this.parseDescription();this.expectKeyword("type");let r=this.parseName(),i=this.parseImplementsInterfaces(),a=this.parseConstDirectives(),o=this.parseFieldsDefinition();return this.node(t,{kind:at.Kind.OBJECT_TYPE_DEFINITION,description:n,name:r,interfaces:i,directives:a,fields:o})}parseImplementsInterfaces(){return this.expectOptionalKeyword("implements")?this.delimitedMany(Se.TokenKind.AMP,this.parseNamedType):[]}parseFieldsDefinition(){return this.optionalMany(Se.TokenKind.BRACE_L,this.parseFieldDefinition,Se.TokenKind.BRACE_R)}parseFieldDefinition(){let t=this._lexer.token,n=this.parseDescription(),r=this.parseName(),i=this.parseArgumentDefs();this.expectToken(Se.TokenKind.COLON);let a=this.parseTypeReference(),o=this.parseConstDirectives();return this.node(t,{kind:at.Kind.FIELD_DEFINITION,description:n,name:r,arguments:i,type:a,directives:o})}parseArgumentDefs(){return this.optionalMany(Se.TokenKind.PAREN_L,this.parseInputValueDef,Se.TokenKind.PAREN_R)}parseInputValueDef(){let t=this._lexer.token,n=this.parseDescription(),r=this.parseName();this.expectToken(Se.TokenKind.COLON);let i=this.parseTypeReference(),a;this.expectOptionalToken(Se.TokenKind.EQUALS)&&(a=this.parseConstValueLiteral());let o=this.parseConstDirectives();return this.node(t,{kind:at.Kind.INPUT_VALUE_DEFINITION,description:n,name:r,type:i,defaultValue:a,directives:o})}parseInterfaceTypeDefinition(){let t=this._lexer.token,n=this.parseDescription();this.expectKeyword("interface");let r=this.parseName(),i=this.parseImplementsInterfaces(),a=this.parseConstDirectives(),o=this.parseFieldsDefinition();return this.node(t,{kind:at.Kind.INTERFACE_TYPE_DEFINITION,description:n,name:r,interfaces:i,directives:a,fields:o})}parseUnionTypeDefinition(){let t=this._lexer.token,n=this.parseDescription();this.expectKeyword("union");let r=this.parseName(),i=this.parseConstDirectives(),a=this.parseUnionMemberTypes();return this.node(t,{kind:at.Kind.UNION_TYPE_DEFINITION,description:n,name:r,directives:i,types:a})}parseUnionMemberTypes(){return this.expectOptionalToken(Se.TokenKind.EQUALS)?this.delimitedMany(Se.TokenKind.PIPE,this.parseNamedType):[]}parseEnumTypeDefinition(){let t=this._lexer.token,n=this.parseDescription();this.expectKeyword("enum");let r=this.parseName(),i=this.parseConstDirectives(),a=this.parseEnumValuesDefinition();return this.node(t,{kind:at.Kind.ENUM_TYPE_DEFINITION,description:n,name:r,directives:i,values:a})}parseEnumValuesDefinition(){return this.optionalMany(Se.TokenKind.BRACE_L,this.parseEnumValueDefinition,Se.TokenKind.BRACE_R)}parseEnumValueDefinition(){let t=this._lexer.token,n=this.parseDescription(),r=this.parseEnumValueName(),i=this.parseConstDirectives();return this.node(t,{kind:at.Kind.ENUM_VALUE_DEFINITION,description:n,name:r,directives:i})}parseEnumValueName(){if(this._lexer.token.value==="true"||this._lexer.token.value==="false"||this._lexer.token.value==="null")throw(0,bu.syntaxError)(this._lexer.source,this._lexer.token.start,`${im(this._lexer.token)} is reserved and cannot be used for an enum value.`);return this.parseName()}parseInputObjectTypeDefinition(){let t=this._lexer.token,n=this.parseDescription();this.expectKeyword("input");let r=this.parseName(),i=this.parseConstDirectives(),a=this.parseInputFieldsDefinition();return this.node(t,{kind:at.Kind.INPUT_OBJECT_TYPE_DEFINITION,description:n,name:r,directives:i,fields:a})}parseInputFieldsDefinition(){return this.optionalMany(Se.TokenKind.BRACE_L,this.parseInputValueDef,Se.TokenKind.BRACE_R)}parseTypeSystemExtension(){let t=this._lexer.lookahead();if(t.kind===Se.TokenKind.NAME)switch(t.value){case"schema":return this.parseSchemaExtension();case"scalar":return this.parseScalarTypeExtension();case"type":return this.parseObjectTypeExtension();case"interface":return this.parseInterfaceTypeExtension();case"union":return this.parseUnionTypeExtension();case"enum":return this.parseEnumTypeExtension();case"input":return this.parseInputObjectTypeExtension()}throw this.unexpected(t)}parseSchemaExtension(){let t=this._lexer.token;this.expectKeyword("extend"),this.expectKeyword("schema");let n=this.parseConstDirectives(),r=this.optionalMany(Se.TokenKind.BRACE_L,this.parseOperationTypeDefinition,Se.TokenKind.BRACE_R);if(n.length===0&&r.length===0)throw this.unexpected();return this.node(t,{kind:at.Kind.SCHEMA_EXTENSION,directives:n,operationTypes:r})}parseScalarTypeExtension(){let t=this._lexer.token;this.expectKeyword("extend"),this.expectKeyword("scalar");let n=this.parseName(),r=this.parseConstDirectives();if(r.length===0)throw this.unexpected();return this.node(t,{kind:at.Kind.SCALAR_TYPE_EXTENSION,name:n,directives:r})}parseObjectTypeExtension(){let t=this._lexer.token;this.expectKeyword("extend"),this.expectKeyword("type");let n=this.parseName(),r=this.parseImplementsInterfaces(),i=this.parseConstDirectives(),a=this.parseFieldsDefinition();if(r.length===0&&i.length===0&&a.length===0)throw this.unexpected();return this.node(t,{kind:at.Kind.OBJECT_TYPE_EXTENSION,name:n,interfaces:r,directives:i,fields:a})}parseInterfaceTypeExtension(){let t=this._lexer.token;this.expectKeyword("extend"),this.expectKeyword("interface");let n=this.parseName(),r=this.parseImplementsInterfaces(),i=this.parseConstDirectives(),a=this.parseFieldsDefinition();if(r.length===0&&i.length===0&&a.length===0)throw this.unexpected();return this.node(t,{kind:at.Kind.INTERFACE_TYPE_EXTENSION,name:n,interfaces:r,directives:i,fields:a})}parseUnionTypeExtension(){let t=this._lexer.token;this.expectKeyword("extend"),this.expectKeyword("union");let n=this.parseName(),r=this.parseConstDirectives(),i=this.parseUnionMemberTypes();if(r.length===0&&i.length===0)throw this.unexpected();return this.node(t,{kind:at.Kind.UNION_TYPE_EXTENSION,name:n,directives:r,types:i})}parseEnumTypeExtension(){let t=this._lexer.token;this.expectKeyword("extend"),this.expectKeyword("enum");let n=this.parseName(),r=this.parseConstDirectives(),i=this.parseEnumValuesDefinition();if(r.length===0&&i.length===0)throw this.unexpected();return this.node(t,{kind:at.Kind.ENUM_TYPE_EXTENSION,name:n,directives:r,values:i})}parseInputObjectTypeExtension(){let t=this._lexer.token;this.expectKeyword("extend"),this.expectKeyword("input");let n=this.parseName(),r=this.parseConstDirectives(),i=this.parseInputFieldsDefinition();if(r.length===0&&i.length===0)throw this.unexpected();return this.node(t,{kind:at.Kind.INPUT_OBJECT_TYPE_EXTENSION,name:n,directives:r,fields:i})}parseDirectiveDefinition(){let t=this._lexer.token,n=this.parseDescription();this.expectKeyword("directive"),this.expectToken(Se.TokenKind.AT);let r=this.parseName(),i=this.parseArgumentDefs(),a=this.expectOptionalKeyword("repeatable");this.expectKeyword("on");let o=this.parseDirectiveLocations();return this.node(t,{kind:at.Kind.DIRECTIVE_DEFINITION,description:n,name:r,arguments:i,repeatable:a,locations:o})}parseDirectiveLocations(){return this.delimitedMany(Se.TokenKind.PIPE,this.parseDirectiveLocation)}parseDirectiveLocation(){let t=this._lexer.token,n=this.parseName();if(Object.prototype.hasOwnProperty.call(wJ.DirectiveLocation,n.value))return n;throw this.unexpected(t)}node(t,n){return this._options.noLocation!==!0&&(n.loc=new md.Location(t,this._lexer.lastToken,this._lexer.source)),n}peek(t){return this._lexer.token.kind===t}expectToken(t){let n=this._lexer.token;if(n.kind===t)return this.advanceLexer(),n;throw(0,bu.syntaxError)(this._lexer.source,n.start,`Expected ${xR(t)}, found ${im(n)}.`)}expectOptionalToken(t){return this._lexer.token.kind===t?(this.advanceLexer(),!0):!1}expectKeyword(t){let n=this._lexer.token;if(n.kind===Se.TokenKind.NAME&&n.value===t)this.advanceLexer();else throw(0,bu.syntaxError)(this._lexer.source,n.start,`Expected "${t}", found ${im(n)}.`)}expectOptionalKeyword(t){let n=this._lexer.token;return n.kind===Se.TokenKind.NAME&&n.value===t?(this.advanceLexer(),!0):!1}unexpected(t){let n=t!=null?t:this._lexer.token;return(0,bu.syntaxError)(this._lexer.source,n.start,`Unexpected ${im(n)}.`)}any(t,n,r){this.expectToken(t);let i=[];for(;!this.expectOptionalToken(r);)i.push(n.call(this));return i}optionalMany(t,n,r){if(this.expectOptionalToken(t)){let i=[];do i.push(n.call(this));while(!this.expectOptionalToken(r));return i}return[]}many(t,n,r){this.expectToken(t);let i=[];do i.push(n.call(this));while(!this.expectOptionalToken(r));return i}delimitedMany(t,n){this.expectOptionalToken(t);let r=[];do r.push(n.call(this));while(this.expectOptionalToken(t));return r}advanceLexer(){let{maxTokens:t}=this._options,n=this._lexer.advance();if(t!==void 0&&n.kind!==Se.TokenKind.EOF&&(++this._tokenCounter,this._tokenCounter>t))throw(0,bu.syntaxError)(this._lexer.source,n.start,`Document contains more that ${t} tokens. Parsing aborted.`)}};Uo.Parser=Du;function im(e){let t=e.value;return xR(e.kind)+(t!=null?` "${t}"`:"")}function xR(e){return(0,MR.isPunctuatorTokenKind)(e)?`"${e}"`:e}});var ko=P(Oy=>{"use strict";f();T();m();Object.defineProperty(Oy,"__esModule",{value:!0});Oy.didYouMean=MJ;var kJ=5;function MJ(e,t){let[n,r]=t?[e,t]:[void 0,e],i=" Did you mean ";n&&(i+=n+" ");let a=r.map(l=>`"${l}"`);switch(a.length){case 0:return"";case 1:return i+a[0]+"?";case 2:return i+a[0]+" or "+a[1]+"?"}let o=a.slice(0,kJ),c=o.pop();return i+o.join(", ")+", or "+c+"?"}});var qR=P(by=>{"use strict";f();T();m();Object.defineProperty(by,"__esModule",{value:!0});by.identityFunc=xJ;function xJ(e){return e}});var Mo=P(Dy=>{"use strict";f();T();m();Object.defineProperty(Dy,"__esModule",{value:!0});Dy.keyMap=qJ;function qJ(e,t){let n=Object.create(null);for(let r of e)n[t(r)]=r;return n}});var Td=P(Ay=>{"use strict";f();T();m();Object.defineProperty(Ay,"__esModule",{value:!0});Ay.keyValMap=VJ;function VJ(e,t,n){let r=Object.create(null);for(let i of e)r[t(i)]=n(i);return r}});var Fy=P(Ry=>{"use strict";f();T();m();Object.defineProperty(Ry,"__esModule",{value:!0});Ry.mapValue=jJ;function jJ(e,t){let n=Object.create(null);for(let r of Object.keys(e))n[r]=t(e[r],r);return n}});var Nd=P(wy=>{"use strict";f();T();m();Object.defineProperty(wy,"__esModule",{value:!0});wy.naturalCompare=KJ;function KJ(e,t){let n=0,r=0;for(;n0);let c=0;do++r,c=c*10+a-Py,a=t.charCodeAt(r);while(am(a)&&c>0);if(oc)return 1}else{if(ia)return 1;++n,++r}}return e.length-t.length}var Py=48,GJ=57;function am(e){return!isNaN(e)&&Py<=e&&e<=GJ}});var xo=P(Cy=>{"use strict";f();T();m();Object.defineProperty(Cy,"__esModule",{value:!0});Cy.suggestionList=QJ;var $J=Nd();function QJ(e,t){let n=Object.create(null),r=new Ly(e),i=Math.floor(e.length*.4)+1;for(let a of t){let o=r.measure(a,i);o!==void 0&&(n[a]=o)}return Object.keys(n).sort((a,o)=>{let c=n[a]-n[o];return c!==0?c:(0,$J.naturalCompare)(a,o)})}var Ly=class{constructor(t){this._input=t,this._inputLowerCase=t.toLowerCase(),this._inputArray=VR(this._inputLowerCase),this._rows=[new Array(t.length+1).fill(0),new Array(t.length+1).fill(0),new Array(t.length+1).fill(0)]}measure(t,n){if(this._input===t)return 0;let r=t.toLowerCase();if(this._inputLowerCase===r)return 1;let i=VR(r),a=this._inputArray;if(i.lengthn)return;let l=this._rows;for(let N=0;N<=c;N++)l[0][N]=N;for(let N=1;N<=o;N++){let y=l[(N-1)%3],g=l[N%3],_=g[0]=N;for(let F=1;F<=c;F++){let B=i[N-1]===a[F-1]?0:1,j=Math.min(y[F]+1,g[F-1]+1,y[F-1]+B);if(N>1&&F>1&&i[N-1]===a[F-2]&&i[N-2]===a[F-1]){let J=l[(N-2)%3][F-2];j=Math.min(j,J+1)}j<_&&(_=j),g[F]=j}if(_>n)return}let p=l[o%3][c];return p<=n?p:void 0}};function VR(e){let t=e.length,n=new Array(t);for(let r=0;r{"use strict";f();T();m();Object.defineProperty(By,"__esModule",{value:!0});By.toObjMap=YJ;function YJ(e){if(e==null)return Object.create(null);if(Object.getPrototypeOf(e)===null)return e;let t=Object.create(null);for(let[n,r]of Object.entries(e))t[n]=r;return t}});var jR=P(Uy=>{"use strict";f();T();m();Object.defineProperty(Uy,"__esModule",{value:!0});Uy.printString=JJ;function JJ(e){return`"${e.replace(HJ,zJ)}"`}var HJ=/[\x00-\x1f\x22\x5c\x7f-\x9f]/g;function zJ(e){return WJ[e.charCodeAt(0)]}var WJ=["\\u0000","\\u0001","\\u0002","\\u0003","\\u0004","\\u0005","\\u0006","\\u0007","\\b","\\t","\\n","\\u000B","\\f","\\r","\\u000E","\\u000F","\\u0010","\\u0011","\\u0012","\\u0013","\\u0014","\\u0015","\\u0016","\\u0017","\\u0018","\\u0019","\\u001A","\\u001B","\\u001C","\\u001D","\\u001E","\\u001F","","",'\\"',"","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","\\\\","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","\\u007F","\\u0080","\\u0081","\\u0082","\\u0083","\\u0084","\\u0085","\\u0086","\\u0087","\\u0088","\\u0089","\\u008A","\\u008B","\\u008C","\\u008D","\\u008E","\\u008F","\\u0090","\\u0091","\\u0092","\\u0093","\\u0094","\\u0095","\\u0096","\\u0097","\\u0098","\\u0099","\\u009A","\\u009B","\\u009C","\\u009D","\\u009E","\\u009F"]});var Au=P(qo=>{"use strict";f();T();m();Object.defineProperty(qo,"__esModule",{value:!0});qo.BREAK=void 0;qo.getEnterLeaveForKind=om;qo.getVisitFn=n3;qo.visit=e3;qo.visitInParallel=t3;var XJ=Cr(),ZJ=Yt(),ky=Oa(),KR=Rt(),xc=Object.freeze({});qo.BREAK=xc;function e3(e,t,n=ky.QueryDocumentKeys){let r=new Map;for(let J of Object.values(KR.Kind))r.set(J,om(t,J));let i,a=Array.isArray(e),o=[e],c=-1,l=[],p=e,N,y,g=[],_=[];do{c++;let J=c===o.length,Z=J&&l.length!==0;if(J){if(N=_.length===0?void 0:g[g.length-1],p=y,y=_.pop(),Z)if(a){p=p.slice();let Ne=0;for(let[le,we]of l){let qe=le-Ne;we===null?(p.splice(qe,1),Ne++):p[qe]=we}}else{p=Object.defineProperties({},Object.getOwnPropertyDescriptors(p));for(let[Ne,le]of l)p[Ne]=le}c=i.index,o=i.keys,l=i.edits,a=i.inArray,i=i.prev}else if(y){if(N=a?c:o[c],p=y[N],p==null)continue;g.push(N)}let W;if(!Array.isArray(p)){var F,B;(0,ky.isNode)(p)||(0,XJ.devAssert)(!1,`Invalid AST Node: ${(0,ZJ.inspect)(p)}.`);let Ne=J?(F=r.get(p.kind))===null||F===void 0?void 0:F.leave:(B=r.get(p.kind))===null||B===void 0?void 0:B.enter;if(W=Ne==null?void 0:Ne.call(t,p,N,y,g,_),W===xc)break;if(W===!1){if(!J){g.pop();continue}}else if(W!==void 0&&(l.push([N,W]),!J))if((0,ky.isNode)(W))p=W;else{g.pop();continue}}if(W===void 0&&Z&&l.push([N,p]),J)g.pop();else{var j;i={inArray:a,index:c,keys:o,edits:l,prev:i},a=Array.isArray(p),o=a?p:(j=n[p.kind])!==null&&j!==void 0?j:[],c=-1,l=[],y&&_.push(y),y=p}}while(i!==void 0);return l.length!==0?l[l.length-1][1]:e}function t3(e){let t=new Array(e.length).fill(null),n=Object.create(null);for(let r of Object.values(KR.Kind)){let i=!1,a=new Array(e.length).fill(void 0),o=new Array(e.length).fill(void 0);for(let l=0;l{"use strict";f();T();m();Object.defineProperty(My,"__esModule",{value:!0});My.print=s3;var r3=od(),i3=jR(),a3=Au();function s3(e){return(0,a3.visit)(e,u3)}var o3=80,u3={Name:{leave:e=>e.value},Variable:{leave:e=>"$"+e.name},Document:{leave:e=>xe(e.definitions,` +spurious results.`)}}return!1};nm.instanceOf=FJ});var im=w(md=>{"use strict";f();N();m();Object.defineProperty(md,"__esModule",{value:!0});md.Source=void 0;md.isSource=LJ;var Oy=Cr(),PJ=Yt(),wJ=fd(),rm=class{constructor(t,n="GraphQL request",r={line:1,column:1}){typeof t=="string"||(0,Oy.devAssert)(!1,`Body must be a string. Received: ${(0,PJ.inspect)(t)}.`),this.body=t,this.name=n,this.locationOffset=r,this.locationOffset.line>0||(0,Oy.devAssert)(!1,"line in locationOffset is 1-indexed and must be positive."),this.locationOffset.column>0||(0,Oy.devAssert)(!1,"column in locationOffset is 1-indexed and must be positive.")}get[Symbol.toStringTag](){return"Source"}};md.Source=rm;function LJ(e){return(0,wJ.instanceOf)(e,rm)}});var xc=w(ko=>{"use strict";f();N();m();Object.defineProperty(ko,"__esModule",{value:!0});ko.Parser=void 0;ko.parse=BJ;ko.parseConstValue=kJ;ko.parseType=MJ;ko.parseValue=UJ;var Au=Wf(),Nd=Oa(),CJ=kc(),st=Rt(),qR=em(),xR=im(),Se=ld();function BJ(e,t){return new Ru(e,t).parseDocument()}function UJ(e,t){let n=new Ru(e,t);n.expectToken(Se.TokenKind.SOF);let r=n.parseValueLiteral(!1);return n.expectToken(Se.TokenKind.EOF),r}function kJ(e,t){let n=new Ru(e,t);n.expectToken(Se.TokenKind.SOF);let r=n.parseConstValueLiteral();return n.expectToken(Se.TokenKind.EOF),r}function MJ(e,t){let n=new Ru(e,t);n.expectToken(Se.TokenKind.SOF);let r=n.parseTypeReference();return n.expectToken(Se.TokenKind.EOF),r}var Ru=class{constructor(t,n={}){let r=(0,xR.isSource)(t)?t:new xR.Source(t);this._lexer=new qR.Lexer(r),this._options=n,this._tokenCounter=0}parseName(){let t=this.expectToken(Se.TokenKind.NAME);return this.node(t,{kind:st.Kind.NAME,value:t.value})}parseDocument(){return this.node(this._lexer.token,{kind:st.Kind.DOCUMENT,definitions:this.many(Se.TokenKind.SOF,this.parseDefinition,Se.TokenKind.EOF)})}parseDefinition(){if(this.peek(Se.TokenKind.BRACE_L))return this.parseOperationDefinition();let t=this.peekDescription(),n=t?this._lexer.lookahead():this._lexer.token;if(n.kind===Se.TokenKind.NAME){switch(n.value){case"schema":return this.parseSchemaDefinition();case"scalar":return this.parseScalarTypeDefinition();case"type":return this.parseObjectTypeDefinition();case"interface":return this.parseInterfaceTypeDefinition();case"union":return this.parseUnionTypeDefinition();case"enum":return this.parseEnumTypeDefinition();case"input":return this.parseInputObjectTypeDefinition();case"directive":return this.parseDirectiveDefinition()}if(t)throw(0,Au.syntaxError)(this._lexer.source,this._lexer.token.start,"Unexpected description, descriptions are supported only on type definitions.");switch(n.value){case"query":case"mutation":case"subscription":return this.parseOperationDefinition();case"fragment":return this.parseFragmentDefinition();case"extend":return this.parseTypeSystemExtension()}}throw this.unexpected(n)}parseOperationDefinition(){let t=this._lexer.token;if(this.peek(Se.TokenKind.BRACE_L))return this.node(t,{kind:st.Kind.OPERATION_DEFINITION,operation:Nd.OperationTypeNode.QUERY,name:void 0,variableDefinitions:[],directives:[],selectionSet:this.parseSelectionSet()});let n=this.parseOperationType(),r;return this.peek(Se.TokenKind.NAME)&&(r=this.parseName()),this.node(t,{kind:st.Kind.OPERATION_DEFINITION,operation:n,name:r,variableDefinitions:this.parseVariableDefinitions(),directives:this.parseDirectives(!1),selectionSet:this.parseSelectionSet()})}parseOperationType(){let t=this.expectToken(Se.TokenKind.NAME);switch(t.value){case"query":return Nd.OperationTypeNode.QUERY;case"mutation":return Nd.OperationTypeNode.MUTATION;case"subscription":return Nd.OperationTypeNode.SUBSCRIPTION}throw this.unexpected(t)}parseVariableDefinitions(){return this.optionalMany(Se.TokenKind.PAREN_L,this.parseVariableDefinition,Se.TokenKind.PAREN_R)}parseVariableDefinition(){return this.node(this._lexer.token,{kind:st.Kind.VARIABLE_DEFINITION,variable:this.parseVariable(),type:(this.expectToken(Se.TokenKind.COLON),this.parseTypeReference()),defaultValue:this.expectOptionalToken(Se.TokenKind.EQUALS)?this.parseConstValueLiteral():void 0,directives:this.parseConstDirectives()})}parseVariable(){let t=this._lexer.token;return this.expectToken(Se.TokenKind.DOLLAR),this.node(t,{kind:st.Kind.VARIABLE,name:this.parseName()})}parseSelectionSet(){return this.node(this._lexer.token,{kind:st.Kind.SELECTION_SET,selections:this.many(Se.TokenKind.BRACE_L,this.parseSelection,Se.TokenKind.BRACE_R)})}parseSelection(){return this.peek(Se.TokenKind.SPREAD)?this.parseFragment():this.parseField()}parseField(){let t=this._lexer.token,n=this.parseName(),r,i;return this.expectOptionalToken(Se.TokenKind.COLON)?(r=n,i=this.parseName()):i=n,this.node(t,{kind:st.Kind.FIELD,alias:r,name:i,arguments:this.parseArguments(!1),directives:this.parseDirectives(!1),selectionSet:this.peek(Se.TokenKind.BRACE_L)?this.parseSelectionSet():void 0})}parseArguments(t){let n=t?this.parseConstArgument:this.parseArgument;return this.optionalMany(Se.TokenKind.PAREN_L,n,Se.TokenKind.PAREN_R)}parseArgument(t=!1){let n=this._lexer.token,r=this.parseName();return this.expectToken(Se.TokenKind.COLON),this.node(n,{kind:st.Kind.ARGUMENT,name:r,value:this.parseValueLiteral(t)})}parseConstArgument(){return this.parseArgument(!0)}parseFragment(){let t=this._lexer.token;this.expectToken(Se.TokenKind.SPREAD);let n=this.expectOptionalKeyword("on");return!n&&this.peek(Se.TokenKind.NAME)?this.node(t,{kind:st.Kind.FRAGMENT_SPREAD,name:this.parseFragmentName(),directives:this.parseDirectives(!1)}):this.node(t,{kind:st.Kind.INLINE_FRAGMENT,typeCondition:n?this.parseNamedType():void 0,directives:this.parseDirectives(!1),selectionSet:this.parseSelectionSet()})}parseFragmentDefinition(){let t=this._lexer.token;return this.expectKeyword("fragment"),this._options.allowLegacyFragmentVariables===!0?this.node(t,{kind:st.Kind.FRAGMENT_DEFINITION,name:this.parseFragmentName(),variableDefinitions:this.parseVariableDefinitions(),typeCondition:(this.expectKeyword("on"),this.parseNamedType()),directives:this.parseDirectives(!1),selectionSet:this.parseSelectionSet()}):this.node(t,{kind:st.Kind.FRAGMENT_DEFINITION,name:this.parseFragmentName(),typeCondition:(this.expectKeyword("on"),this.parseNamedType()),directives:this.parseDirectives(!1),selectionSet:this.parseSelectionSet()})}parseFragmentName(){if(this._lexer.token.value==="on")throw this.unexpected();return this.parseName()}parseValueLiteral(t){let n=this._lexer.token;switch(n.kind){case Se.TokenKind.BRACKET_L:return this.parseList(t);case Se.TokenKind.BRACE_L:return this.parseObject(t);case Se.TokenKind.INT:return this.advanceLexer(),this.node(n,{kind:st.Kind.INT,value:n.value});case Se.TokenKind.FLOAT:return this.advanceLexer(),this.node(n,{kind:st.Kind.FLOAT,value:n.value});case Se.TokenKind.STRING:case Se.TokenKind.BLOCK_STRING:return this.parseStringLiteral();case Se.TokenKind.NAME:switch(this.advanceLexer(),n.value){case"true":return this.node(n,{kind:st.Kind.BOOLEAN,value:!0});case"false":return this.node(n,{kind:st.Kind.BOOLEAN,value:!1});case"null":return this.node(n,{kind:st.Kind.NULL});default:return this.node(n,{kind:st.Kind.ENUM,value:n.value})}case Se.TokenKind.DOLLAR:if(t)if(this.expectToken(Se.TokenKind.DOLLAR),this._lexer.token.kind===Se.TokenKind.NAME){let r=this._lexer.token.value;throw(0,Au.syntaxError)(this._lexer.source,n.start,`Unexpected variable "$${r}" in constant value.`)}else throw this.unexpected(n);return this.parseVariable();default:throw this.unexpected()}}parseConstValueLiteral(){return this.parseValueLiteral(!0)}parseStringLiteral(){let t=this._lexer.token;return this.advanceLexer(),this.node(t,{kind:st.Kind.STRING,value:t.value,block:t.kind===Se.TokenKind.BLOCK_STRING})}parseList(t){let n=()=>this.parseValueLiteral(t);return this.node(this._lexer.token,{kind:st.Kind.LIST,values:this.any(Se.TokenKind.BRACKET_L,n,Se.TokenKind.BRACKET_R)})}parseObject(t){let n=()=>this.parseObjectField(t);return this.node(this._lexer.token,{kind:st.Kind.OBJECT,fields:this.any(Se.TokenKind.BRACE_L,n,Se.TokenKind.BRACE_R)})}parseObjectField(t){let n=this._lexer.token,r=this.parseName();return this.expectToken(Se.TokenKind.COLON),this.node(n,{kind:st.Kind.OBJECT_FIELD,name:r,value:this.parseValueLiteral(t)})}parseDirectives(t){let n=[];for(;this.peek(Se.TokenKind.AT);)n.push(this.parseDirective(t));return n}parseConstDirectives(){return this.parseDirectives(!0)}parseDirective(t){let n=this._lexer.token;return this.expectToken(Se.TokenKind.AT),this.node(n,{kind:st.Kind.DIRECTIVE,name:this.parseName(),arguments:this.parseArguments(t)})}parseTypeReference(){let t=this._lexer.token,n;if(this.expectOptionalToken(Se.TokenKind.BRACKET_L)){let r=this.parseTypeReference();this.expectToken(Se.TokenKind.BRACKET_R),n=this.node(t,{kind:st.Kind.LIST_TYPE,type:r})}else n=this.parseNamedType();return this.expectOptionalToken(Se.TokenKind.BANG)?this.node(t,{kind:st.Kind.NON_NULL_TYPE,type:n}):n}parseNamedType(){return this.node(this._lexer.token,{kind:st.Kind.NAMED_TYPE,name:this.parseName()})}peekDescription(){return this.peek(Se.TokenKind.STRING)||this.peek(Se.TokenKind.BLOCK_STRING)}parseDescription(){if(this.peekDescription())return this.parseStringLiteral()}parseSchemaDefinition(){let t=this._lexer.token,n=this.parseDescription();this.expectKeyword("schema");let r=this.parseConstDirectives(),i=this.many(Se.TokenKind.BRACE_L,this.parseOperationTypeDefinition,Se.TokenKind.BRACE_R);return this.node(t,{kind:st.Kind.SCHEMA_DEFINITION,description:n,directives:r,operationTypes:i})}parseOperationTypeDefinition(){let t=this._lexer.token,n=this.parseOperationType();this.expectToken(Se.TokenKind.COLON);let r=this.parseNamedType();return this.node(t,{kind:st.Kind.OPERATION_TYPE_DEFINITION,operation:n,type:r})}parseScalarTypeDefinition(){let t=this._lexer.token,n=this.parseDescription();this.expectKeyword("scalar");let r=this.parseName(),i=this.parseConstDirectives();return this.node(t,{kind:st.Kind.SCALAR_TYPE_DEFINITION,description:n,name:r,directives:i})}parseObjectTypeDefinition(){let t=this._lexer.token,n=this.parseDescription();this.expectKeyword("type");let r=this.parseName(),i=this.parseImplementsInterfaces(),a=this.parseConstDirectives(),o=this.parseFieldsDefinition();return this.node(t,{kind:st.Kind.OBJECT_TYPE_DEFINITION,description:n,name:r,interfaces:i,directives:a,fields:o})}parseImplementsInterfaces(){return this.expectOptionalKeyword("implements")?this.delimitedMany(Se.TokenKind.AMP,this.parseNamedType):[]}parseFieldsDefinition(){return this.optionalMany(Se.TokenKind.BRACE_L,this.parseFieldDefinition,Se.TokenKind.BRACE_R)}parseFieldDefinition(){let t=this._lexer.token,n=this.parseDescription(),r=this.parseName(),i=this.parseArgumentDefs();this.expectToken(Se.TokenKind.COLON);let a=this.parseTypeReference(),o=this.parseConstDirectives();return this.node(t,{kind:st.Kind.FIELD_DEFINITION,description:n,name:r,arguments:i,type:a,directives:o})}parseArgumentDefs(){return this.optionalMany(Se.TokenKind.PAREN_L,this.parseInputValueDef,Se.TokenKind.PAREN_R)}parseInputValueDef(){let t=this._lexer.token,n=this.parseDescription(),r=this.parseName();this.expectToken(Se.TokenKind.COLON);let i=this.parseTypeReference(),a;this.expectOptionalToken(Se.TokenKind.EQUALS)&&(a=this.parseConstValueLiteral());let o=this.parseConstDirectives();return this.node(t,{kind:st.Kind.INPUT_VALUE_DEFINITION,description:n,name:r,type:i,defaultValue:a,directives:o})}parseInterfaceTypeDefinition(){let t=this._lexer.token,n=this.parseDescription();this.expectKeyword("interface");let r=this.parseName(),i=this.parseImplementsInterfaces(),a=this.parseConstDirectives(),o=this.parseFieldsDefinition();return this.node(t,{kind:st.Kind.INTERFACE_TYPE_DEFINITION,description:n,name:r,interfaces:i,directives:a,fields:o})}parseUnionTypeDefinition(){let t=this._lexer.token,n=this.parseDescription();this.expectKeyword("union");let r=this.parseName(),i=this.parseConstDirectives(),a=this.parseUnionMemberTypes();return this.node(t,{kind:st.Kind.UNION_TYPE_DEFINITION,description:n,name:r,directives:i,types:a})}parseUnionMemberTypes(){return this.expectOptionalToken(Se.TokenKind.EQUALS)?this.delimitedMany(Se.TokenKind.PIPE,this.parseNamedType):[]}parseEnumTypeDefinition(){let t=this._lexer.token,n=this.parseDescription();this.expectKeyword("enum");let r=this.parseName(),i=this.parseConstDirectives(),a=this.parseEnumValuesDefinition();return this.node(t,{kind:st.Kind.ENUM_TYPE_DEFINITION,description:n,name:r,directives:i,values:a})}parseEnumValuesDefinition(){return this.optionalMany(Se.TokenKind.BRACE_L,this.parseEnumValueDefinition,Se.TokenKind.BRACE_R)}parseEnumValueDefinition(){let t=this._lexer.token,n=this.parseDescription(),r=this.parseEnumValueName(),i=this.parseConstDirectives();return this.node(t,{kind:st.Kind.ENUM_VALUE_DEFINITION,description:n,name:r,directives:i})}parseEnumValueName(){if(this._lexer.token.value==="true"||this._lexer.token.value==="false"||this._lexer.token.value==="null")throw(0,Au.syntaxError)(this._lexer.source,this._lexer.token.start,`${am(this._lexer.token)} is reserved and cannot be used for an enum value.`);return this.parseName()}parseInputObjectTypeDefinition(){let t=this._lexer.token,n=this.parseDescription();this.expectKeyword("input");let r=this.parseName(),i=this.parseConstDirectives(),a=this.parseInputFieldsDefinition();return this.node(t,{kind:st.Kind.INPUT_OBJECT_TYPE_DEFINITION,description:n,name:r,directives:i,fields:a})}parseInputFieldsDefinition(){return this.optionalMany(Se.TokenKind.BRACE_L,this.parseInputValueDef,Se.TokenKind.BRACE_R)}parseTypeSystemExtension(){let t=this._lexer.lookahead();if(t.kind===Se.TokenKind.NAME)switch(t.value){case"schema":return this.parseSchemaExtension();case"scalar":return this.parseScalarTypeExtension();case"type":return this.parseObjectTypeExtension();case"interface":return this.parseInterfaceTypeExtension();case"union":return this.parseUnionTypeExtension();case"enum":return this.parseEnumTypeExtension();case"input":return this.parseInputObjectTypeExtension()}throw this.unexpected(t)}parseSchemaExtension(){let t=this._lexer.token;this.expectKeyword("extend"),this.expectKeyword("schema");let n=this.parseConstDirectives(),r=this.optionalMany(Se.TokenKind.BRACE_L,this.parseOperationTypeDefinition,Se.TokenKind.BRACE_R);if(n.length===0&&r.length===0)throw this.unexpected();return this.node(t,{kind:st.Kind.SCHEMA_EXTENSION,directives:n,operationTypes:r})}parseScalarTypeExtension(){let t=this._lexer.token;this.expectKeyword("extend"),this.expectKeyword("scalar");let n=this.parseName(),r=this.parseConstDirectives();if(r.length===0)throw this.unexpected();return this.node(t,{kind:st.Kind.SCALAR_TYPE_EXTENSION,name:n,directives:r})}parseObjectTypeExtension(){let t=this._lexer.token;this.expectKeyword("extend"),this.expectKeyword("type");let n=this.parseName(),r=this.parseImplementsInterfaces(),i=this.parseConstDirectives(),a=this.parseFieldsDefinition();if(r.length===0&&i.length===0&&a.length===0)throw this.unexpected();return this.node(t,{kind:st.Kind.OBJECT_TYPE_EXTENSION,name:n,interfaces:r,directives:i,fields:a})}parseInterfaceTypeExtension(){let t=this._lexer.token;this.expectKeyword("extend"),this.expectKeyword("interface");let n=this.parseName(),r=this.parseImplementsInterfaces(),i=this.parseConstDirectives(),a=this.parseFieldsDefinition();if(r.length===0&&i.length===0&&a.length===0)throw this.unexpected();return this.node(t,{kind:st.Kind.INTERFACE_TYPE_EXTENSION,name:n,interfaces:r,directives:i,fields:a})}parseUnionTypeExtension(){let t=this._lexer.token;this.expectKeyword("extend"),this.expectKeyword("union");let n=this.parseName(),r=this.parseConstDirectives(),i=this.parseUnionMemberTypes();if(r.length===0&&i.length===0)throw this.unexpected();return this.node(t,{kind:st.Kind.UNION_TYPE_EXTENSION,name:n,directives:r,types:i})}parseEnumTypeExtension(){let t=this._lexer.token;this.expectKeyword("extend"),this.expectKeyword("enum");let n=this.parseName(),r=this.parseConstDirectives(),i=this.parseEnumValuesDefinition();if(r.length===0&&i.length===0)throw this.unexpected();return this.node(t,{kind:st.Kind.ENUM_TYPE_EXTENSION,name:n,directives:r,values:i})}parseInputObjectTypeExtension(){let t=this._lexer.token;this.expectKeyword("extend"),this.expectKeyword("input");let n=this.parseName(),r=this.parseConstDirectives(),i=this.parseInputFieldsDefinition();if(r.length===0&&i.length===0)throw this.unexpected();return this.node(t,{kind:st.Kind.INPUT_OBJECT_TYPE_EXTENSION,name:n,directives:r,fields:i})}parseDirectiveDefinition(){let t=this._lexer.token,n=this.parseDescription();this.expectKeyword("directive"),this.expectToken(Se.TokenKind.AT);let r=this.parseName(),i=this.parseArgumentDefs(),a=this.expectOptionalKeyword("repeatable");this.expectKeyword("on");let o=this.parseDirectiveLocations();return this.node(t,{kind:st.Kind.DIRECTIVE_DEFINITION,description:n,name:r,arguments:i,repeatable:a,locations:o})}parseDirectiveLocations(){return this.delimitedMany(Se.TokenKind.PIPE,this.parseDirectiveLocation)}parseDirectiveLocation(){let t=this._lexer.token,n=this.parseName();if(Object.prototype.hasOwnProperty.call(CJ.DirectiveLocation,n.value))return n;throw this.unexpected(t)}node(t,n){return this._options.noLocation!==!0&&(n.loc=new Nd.Location(t,this._lexer.lastToken,this._lexer.source)),n}peek(t){return this._lexer.token.kind===t}expectToken(t){let n=this._lexer.token;if(n.kind===t)return this.advanceLexer(),n;throw(0,Au.syntaxError)(this._lexer.source,n.start,`Expected ${VR(t)}, found ${am(n)}.`)}expectOptionalToken(t){return this._lexer.token.kind===t?(this.advanceLexer(),!0):!1}expectKeyword(t){let n=this._lexer.token;if(n.kind===Se.TokenKind.NAME&&n.value===t)this.advanceLexer();else throw(0,Au.syntaxError)(this._lexer.source,n.start,`Expected "${t}", found ${am(n)}.`)}expectOptionalKeyword(t){let n=this._lexer.token;return n.kind===Se.TokenKind.NAME&&n.value===t?(this.advanceLexer(),!0):!1}unexpected(t){let n=t!=null?t:this._lexer.token;return(0,Au.syntaxError)(this._lexer.source,n.start,`Unexpected ${am(n)}.`)}any(t,n,r){this.expectToken(t);let i=[];for(;!this.expectOptionalToken(r);)i.push(n.call(this));return i}optionalMany(t,n,r){if(this.expectOptionalToken(t)){let i=[];do i.push(n.call(this));while(!this.expectOptionalToken(r));return i}return[]}many(t,n,r){this.expectToken(t);let i=[];do i.push(n.call(this));while(!this.expectOptionalToken(r));return i}delimitedMany(t,n){this.expectOptionalToken(t);let r=[];do r.push(n.call(this));while(this.expectOptionalToken(t));return r}advanceLexer(){let{maxTokens:t}=this._options,n=this._lexer.advance();if(t!==void 0&&n.kind!==Se.TokenKind.EOF&&(++this._tokenCounter,this._tokenCounter>t))throw(0,Au.syntaxError)(this._lexer.source,n.start,`Document contains more that ${t} tokens. Parsing aborted.`)}};ko.Parser=Ru;function am(e){let t=e.value;return VR(e.kind)+(t!=null?` "${t}"`:"")}function VR(e){return(0,qR.isPunctuatorTokenKind)(e)?`"${e}"`:e}});var Mo=w(Dy=>{"use strict";f();N();m();Object.defineProperty(Dy,"__esModule",{value:!0});Dy.didYouMean=qJ;var xJ=5;function qJ(e,t){let[n,r]=t?[e,t]:[void 0,e],i=" Did you mean ";n&&(i+=n+" ");let a=r.map(l=>`"${l}"`);switch(a.length){case 0:return"";case 1:return i+a[0]+"?";case 2:return i+a[0]+" or "+a[1]+"?"}let o=a.slice(0,xJ),c=o.pop();return i+o.join(", ")+", or "+c+"?"}});var jR=w(by=>{"use strict";f();N();m();Object.defineProperty(by,"__esModule",{value:!0});by.identityFunc=VJ;function VJ(e){return e}});var xo=w(Ay=>{"use strict";f();N();m();Object.defineProperty(Ay,"__esModule",{value:!0});Ay.keyMap=jJ;function jJ(e,t){let n=Object.create(null);for(let r of e)n[t(r)]=r;return n}});var Td=w(Ry=>{"use strict";f();N();m();Object.defineProperty(Ry,"__esModule",{value:!0});Ry.keyValMap=KJ;function KJ(e,t,n){let r=Object.create(null);for(let i of e)r[t(i)]=n(i);return r}});var Py=w(Fy=>{"use strict";f();N();m();Object.defineProperty(Fy,"__esModule",{value:!0});Fy.mapValue=GJ;function GJ(e,t){let n=Object.create(null);for(let r of Object.keys(e))n[r]=t(e[r],r);return n}});var Ed=w(Ly=>{"use strict";f();N();m();Object.defineProperty(Ly,"__esModule",{value:!0});Ly.naturalCompare=$J;function $J(e,t){let n=0,r=0;for(;n0);let c=0;do++r,c=c*10+a-wy,a=t.charCodeAt(r);while(sm(a)&&c>0);if(oc)return 1}else{if(ia)return 1;++n,++r}}return e.length-t.length}var wy=48,QJ=57;function sm(e){return!isNaN(e)&&wy<=e&&e<=QJ}});var qo=w(By=>{"use strict";f();N();m();Object.defineProperty(By,"__esModule",{value:!0});By.suggestionList=JJ;var YJ=Ed();function JJ(e,t){let n=Object.create(null),r=new Cy(e),i=Math.floor(e.length*.4)+1;for(let a of t){let o=r.measure(a,i);o!==void 0&&(n[a]=o)}return Object.keys(n).sort((a,o)=>{let c=n[a]-n[o];return c!==0?c:(0,YJ.naturalCompare)(a,o)})}var Cy=class{constructor(t){this._input=t,this._inputLowerCase=t.toLowerCase(),this._inputArray=KR(this._inputLowerCase),this._rows=[new Array(t.length+1).fill(0),new Array(t.length+1).fill(0),new Array(t.length+1).fill(0)]}measure(t,n){if(this._input===t)return 0;let r=t.toLowerCase();if(this._inputLowerCase===r)return 1;let i=KR(r),a=this._inputArray;if(i.lengthn)return;let l=this._rows;for(let T=0;T<=c;T++)l[0][T]=T;for(let T=1;T<=o;T++){let y=l[(T-1)%3],g=l[T%3],_=g[0]=T;for(let F=1;F<=c;F++){let U=i[T-1]===a[F-1]?0:1,K=Math.min(y[F]+1,g[F-1]+1,y[F-1]+U);if(T>1&&F>1&&i[T-1]===a[F-2]&&i[T-2]===a[F-1]){let J=l[(T-2)%3][F-2];K=Math.min(K,J+1)}K<_&&(_=K),g[F]=K}if(_>n)return}let p=l[o%3][c];return p<=n?p:void 0}};function KR(e){let t=e.length,n=new Array(t);for(let r=0;r{"use strict";f();N();m();Object.defineProperty(Uy,"__esModule",{value:!0});Uy.toObjMap=HJ;function HJ(e){if(e==null)return Object.create(null);if(Object.getPrototypeOf(e)===null)return e;let t=Object.create(null);for(let[n,r]of Object.entries(e))t[n]=r;return t}});var GR=w(ky=>{"use strict";f();N();m();Object.defineProperty(ky,"__esModule",{value:!0});ky.printString=zJ;function zJ(e){return`"${e.replace(WJ,XJ)}"`}var WJ=/[\x00-\x1f\x22\x5c\x7f-\x9f]/g;function XJ(e){return ZJ[e.charCodeAt(0)]}var ZJ=["\\u0000","\\u0001","\\u0002","\\u0003","\\u0004","\\u0005","\\u0006","\\u0007","\\b","\\t","\\n","\\u000B","\\f","\\r","\\u000E","\\u000F","\\u0010","\\u0011","\\u0012","\\u0013","\\u0014","\\u0015","\\u0016","\\u0017","\\u0018","\\u0019","\\u001A","\\u001B","\\u001C","\\u001D","\\u001E","\\u001F","","",'\\"',"","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","\\\\","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","\\u007F","\\u0080","\\u0081","\\u0082","\\u0083","\\u0084","\\u0085","\\u0086","\\u0087","\\u0088","\\u0089","\\u008A","\\u008B","\\u008C","\\u008D","\\u008E","\\u008F","\\u0090","\\u0091","\\u0092","\\u0093","\\u0094","\\u0095","\\u0096","\\u0097","\\u0098","\\u0099","\\u009A","\\u009B","\\u009C","\\u009D","\\u009E","\\u009F"]});var Fu=w(Vo=>{"use strict";f();N();m();Object.defineProperty(Vo,"__esModule",{value:!0});Vo.BREAK=void 0;Vo.getEnterLeaveForKind=um;Vo.getVisitFn=iH;Vo.visit=nH;Vo.visitInParallel=rH;var eH=Cr(),tH=Yt(),My=Oa(),$R=Rt(),qc=Object.freeze({});Vo.BREAK=qc;function nH(e,t,n=My.QueryDocumentKeys){let r=new Map;for(let J of Object.values($R.Kind))r.set(J,um(t,J));let i,a=Array.isArray(e),o=[e],c=-1,l=[],p=e,T,y,g=[],_=[];do{c++;let J=c===o.length,ee=J&&l.length!==0;if(J){if(T=_.length===0?void 0:g[g.length-1],p=y,y=_.pop(),ee)if(a){p=p.slice();let Te=0;for(let[de,we]of l){let qe=de-Te;we===null?(p.splice(qe,1),Te++):p[qe]=we}}else{p=Object.defineProperties({},Object.getOwnPropertyDescriptors(p));for(let[Te,de]of l)p[Te]=de}c=i.index,o=i.keys,l=i.edits,a=i.inArray,i=i.prev}else if(y){if(T=a?c:o[c],p=y[T],p==null)continue;g.push(T)}let W;if(!Array.isArray(p)){var F,U;(0,My.isNode)(p)||(0,eH.devAssert)(!1,`Invalid AST Node: ${(0,tH.inspect)(p)}.`);let Te=J?(F=r.get(p.kind))===null||F===void 0?void 0:F.leave:(U=r.get(p.kind))===null||U===void 0?void 0:U.enter;if(W=Te==null?void 0:Te.call(t,p,T,y,g,_),W===qc)break;if(W===!1){if(!J){g.pop();continue}}else if(W!==void 0&&(l.push([T,W]),!J))if((0,My.isNode)(W))p=W;else{g.pop();continue}}if(W===void 0&&ee&&l.push([T,p]),J)g.pop();else{var K;i={inArray:a,index:c,keys:o,edits:l,prev:i},a=Array.isArray(p),o=a?p:(K=n[p.kind])!==null&&K!==void 0?K:[],c=-1,l=[],y&&_.push(y),y=p}}while(i!==void 0);return l.length!==0?l[l.length-1][1]:e}function rH(e){let t=new Array(e.length).fill(null),n=Object.create(null);for(let r of Object.values($R.Kind)){let i=!1,a=new Array(e.length).fill(void 0),o=new Array(e.length).fill(void 0);for(let l=0;l{"use strict";f();N();m();Object.defineProperty(xy,"__esModule",{value:!0});xy.print=uH;var aH=ud(),sH=GR(),oH=Fu();function uH(e){return(0,oH.visit)(e,lH)}var cH=80,lH={Name:{leave:e=>e.value},Variable:{leave:e=>"$"+e.name},Document:{leave:e=>xe(e.definitions,` -`)},OperationDefinition:{leave(e){let t=Ot("(",xe(e.variableDefinitions,", "),")"),n=xe([e.operation,xe([e.name,t]),xe(e.directives," ")]," ");return(n==="query"?"":n+" ")+e.selectionSet}},VariableDefinition:{leave:({variable:e,type:t,defaultValue:n,directives:r})=>e+": "+t+Ot(" = ",n)+Ot(" ",xe(r," "))},SelectionSet:{leave:({selections:e})=>Xi(e)},Field:{leave({alias:e,name:t,arguments:n,directives:r,selectionSet:i}){let a=Ot("",e,": ")+t,o=a+Ot("(",xe(n,", "),")");return o.length>o3&&(o=a+Ot(`( -`,um(xe(n,` +`)},OperationDefinition:{leave(e){let t=Ot("(",xe(e.variableDefinitions,", "),")"),n=xe([e.operation,xe([e.name,t]),xe(e.directives," ")]," ");return(n==="query"?"":n+" ")+e.selectionSet}},VariableDefinition:{leave:({variable:e,type:t,defaultValue:n,directives:r})=>e+": "+t+Ot(" = ",n)+Ot(" ",xe(r," "))},SelectionSet:{leave:({selections:e})=>Xi(e)},Field:{leave({alias:e,name:t,arguments:n,directives:r,selectionSet:i}){let a=Ot("",e,": ")+t,o=a+Ot("(",xe(n,", "),")");return o.length>cH&&(o=a+Ot(`( +`,cm(xe(n,` `)),` -)`)),xe([o,xe(r," "),i]," ")}},Argument:{leave:({name:e,value:t})=>e+": "+t},FragmentSpread:{leave:({name:e,directives:t})=>"..."+e+Ot(" ",xe(t," "))},InlineFragment:{leave:({typeCondition:e,directives:t,selectionSet:n})=>xe(["...",Ot("on ",e),xe(t," "),n]," ")},FragmentDefinition:{leave:({name:e,typeCondition:t,variableDefinitions:n,directives:r,selectionSet:i})=>`fragment ${e}${Ot("(",xe(n,", "),")")} on ${t} ${Ot("",xe(r," ")," ")}`+i},IntValue:{leave:({value:e})=>e},FloatValue:{leave:({value:e})=>e},StringValue:{leave:({value:e,block:t})=>t?(0,r3.printBlockString)(e):(0,i3.printString)(e)},BooleanValue:{leave:({value:e})=>e?"true":"false"},NullValue:{leave:()=>"null"},EnumValue:{leave:({value:e})=>e},ListValue:{leave:({values:e})=>"["+xe(e,", ")+"]"},ObjectValue:{leave:({fields:e})=>"{"+xe(e,", ")+"}"},ObjectField:{leave:({name:e,value:t})=>e+": "+t},Directive:{leave:({name:e,arguments:t})=>"@"+e+Ot("(",xe(t,", "),")")},NamedType:{leave:({name:e})=>e},ListType:{leave:({type:e})=>"["+e+"]"},NonNullType:{leave:({type:e})=>e+"!"},SchemaDefinition:{leave:({description:e,directives:t,operationTypes:n})=>Ot("",e,` +)`)),xe([o,xe(r," "),i]," ")}},Argument:{leave:({name:e,value:t})=>e+": "+t},FragmentSpread:{leave:({name:e,directives:t})=>"..."+e+Ot(" ",xe(t," "))},InlineFragment:{leave:({typeCondition:e,directives:t,selectionSet:n})=>xe(["...",Ot("on ",e),xe(t," "),n]," ")},FragmentDefinition:{leave:({name:e,typeCondition:t,variableDefinitions:n,directives:r,selectionSet:i})=>`fragment ${e}${Ot("(",xe(n,", "),")")} on ${t} ${Ot("",xe(r," ")," ")}`+i},IntValue:{leave:({value:e})=>e},FloatValue:{leave:({value:e})=>e},StringValue:{leave:({value:e,block:t})=>t?(0,aH.printBlockString)(e):(0,sH.printString)(e)},BooleanValue:{leave:({value:e})=>e?"true":"false"},NullValue:{leave:()=>"null"},EnumValue:{leave:({value:e})=>e},ListValue:{leave:({values:e})=>"["+xe(e,", ")+"]"},ObjectValue:{leave:({fields:e})=>"{"+xe(e,", ")+"}"},ObjectField:{leave:({name:e,value:t})=>e+": "+t},Directive:{leave:({name:e,arguments:t})=>"@"+e+Ot("(",xe(t,", "),")")},NamedType:{leave:({name:e})=>e},ListType:{leave:({type:e})=>"["+e+"]"},NonNullType:{leave:({type:e})=>e+"!"},SchemaDefinition:{leave:({description:e,directives:t,operationTypes:n})=>Ot("",e,` `)+xe(["schema",xe(t," "),Xi(n)]," ")},OperationTypeDefinition:{leave:({operation:e,type:t})=>e+": "+t},ScalarTypeDefinition:{leave:({description:e,name:t,directives:n})=>Ot("",e,` `)+xe(["scalar",t,xe(n," ")]," ")},ObjectTypeDefinition:{leave:({description:e,name:t,interfaces:n,directives:r,fields:i})=>Ot("",e,` `)+xe(["type",t,Ot("implements ",xe(n," & ")),xe(r," "),Xi(i)]," ")},FieldDefinition:{leave:({description:e,name:t,arguments:n,type:r,directives:i})=>Ot("",e,` -`)+t+(GR(n)?Ot(`( -`,um(xe(n,` +`)+t+(QR(n)?Ot(`( +`,cm(xe(n,` `)),` )`):Ot("(",xe(n,", "),")"))+": "+r+Ot(" ",xe(i," "))},InputValueDefinition:{leave:({description:e,name:t,type:n,defaultValue:r,directives:i})=>Ot("",e,` `)+xe([t+": "+n,Ot("= ",r),xe(i," ")]," ")},InterfaceTypeDefinition:{leave:({description:e,name:t,interfaces:n,directives:r,fields:i})=>Ot("",e,` @@ -51,23 +51,23 @@ spurious results.`)}}return!1};tm.instanceOf=AJ});var rm=P(fd=>{"use strict";f() `)+xe(["enum",t,xe(n," "),Xi(r)]," ")},EnumValueDefinition:{leave:({description:e,name:t,directives:n})=>Ot("",e,` `)+xe([t,xe(n," ")]," ")},InputObjectTypeDefinition:{leave:({description:e,name:t,directives:n,fields:r})=>Ot("",e,` `)+xe(["input",t,xe(n," "),Xi(r)]," ")},DirectiveDefinition:{leave:({description:e,name:t,arguments:n,repeatable:r,locations:i})=>Ot("",e,` -`)+"directive @"+t+(GR(n)?Ot(`( -`,um(xe(n,` +`)+"directive @"+t+(QR(n)?Ot(`( +`,cm(xe(n,` `)),` )`):Ot("(",xe(n,", "),")"))+(r?" repeatable":"")+" on "+xe(i," | ")},SchemaExtension:{leave:({directives:e,operationTypes:t})=>xe(["extend schema",xe(e," "),Xi(t)]," ")},ScalarTypeExtension:{leave:({name:e,directives:t})=>xe(["extend scalar",e,xe(t," ")]," ")},ObjectTypeExtension:{leave:({name:e,interfaces:t,directives:n,fields:r})=>xe(["extend type",e,Ot("implements ",xe(t," & ")),xe(n," "),Xi(r)]," ")},InterfaceTypeExtension:{leave:({name:e,interfaces:t,directives:n,fields:r})=>xe(["extend interface",e,Ot("implements ",xe(t," & ")),xe(n," "),Xi(r)]," ")},UnionTypeExtension:{leave:({name:e,directives:t,types:n})=>xe(["extend union",e,xe(t," "),Ot("= ",xe(n," | "))]," ")},EnumTypeExtension:{leave:({name:e,directives:t,values:n})=>xe(["extend enum",e,xe(t," "),Xi(n)]," ")},InputObjectTypeExtension:{leave:({name:e,directives:t,fields:n})=>xe(["extend input",e,xe(t," "),Xi(n)]," ")}};function xe(e,t=""){var n;return(n=e==null?void 0:e.filter(r=>r).join(t))!==null&&n!==void 0?n:""}function Xi(e){return Ot(`{ -`,um(xe(e,` +`,cm(xe(e,` `)),` -}`)}function Ot(e,t,n=""){return t!=null&&t!==""?e+t+n:""}function um(e){return Ot(" ",e.replace(/\n/g,` - `))}function GR(e){var t;return(t=e==null?void 0:e.some(n=>n.includes(` -`)))!==null&&t!==void 0?t:!1}});var Vy=P(qy=>{"use strict";f();T();m();Object.defineProperty(qy,"__esModule",{value:!0});qy.valueFromASTUntyped=xy;var c3=Td(),ls=Rt();function xy(e,t){switch(e.kind){case ls.Kind.NULL:return null;case ls.Kind.INT:return parseInt(e.value,10);case ls.Kind.FLOAT:return parseFloat(e.value);case ls.Kind.STRING:case ls.Kind.ENUM:case ls.Kind.BOOLEAN:return e.value;case ls.Kind.LIST:return e.values.map(n=>xy(n,t));case ls.Kind.OBJECT:return(0,c3.keyValMap)(e.fields,n=>n.name.value,n=>xy(n.value,t));case ls.Kind.VARIABLE:return t==null?void 0:t[e.name.value]}}});var hd=P(lm=>{"use strict";f();T();m();Object.defineProperty(lm,"__esModule",{value:!0});lm.assertEnumValueName=l3;lm.assertName=YR;var $R=Cr(),cm=Je(),QR=Wf();function YR(e){if(e!=null||(0,$R.devAssert)(!1,"Must provide name."),typeof e=="string"||(0,$R.devAssert)(!1,"Expected name to be a string."),e.length===0)throw new cm.GraphQLError("Expected name to be a non-empty string.");for(let t=1;t{"use strict";f();T();m();Object.defineProperty(je,"__esModule",{value:!0});je.GraphQLUnionType=je.GraphQLScalarType=je.GraphQLObjectType=je.GraphQLNonNull=je.GraphQLList=je.GraphQLInterfaceType=je.GraphQLInputObjectType=je.GraphQLEnumType=void 0;je.argsToArgsConfig=sF;je.assertAbstractType=F3;je.assertCompositeType=R3;je.assertEnumType=_3;je.assertInputObjectType=v3;je.assertInputType=b3;je.assertInterfaceType=I3;je.assertLeafType=A3;je.assertListType=S3;je.assertNamedType=C3;je.assertNonNullType=O3;je.assertNullableType=w3;je.assertObjectType=y3;je.assertOutputType=D3;je.assertScalarType=E3;je.assertType=h3;je.assertUnionType=g3;je.assertWrappingType=P3;je.defineArguments=iF;je.getNamedType=B3;je.getNullableType=L3;je.isAbstractType=eF;je.isCompositeType=ZR;je.isEnumType=wu;je.isInputObjectType=yd;je.isInputType=jy;je.isInterfaceType=Fu;je.isLeafType=XR;je.isListType=_m;je.isNamedType=tF;je.isNonNullType=jo;je.isNullableType=Gy;je.isObjectType=Vc;je.isOutputType=Ky;je.isRequiredArgument=U3;je.isRequiredInputField=x3;je.isScalarType=Ru;je.isType=gm;je.isUnionType=Pu;je.isWrappingType=Id;je.resolveObjMapThunk=Qy;je.resolveReadonlyArrayThunk=$y;var ur=Cr(),d3=ko(),JR=qR(),un=Yt(),Vo=pd(),p3=Sa(),f3=Mo(),WR=Td(),Im=Fy(),m3=xo(),ba=sm(),Ed=Je(),T3=Rt(),HR=ci(),N3=Vy(),Da=hd();function gm(e){return Ru(e)||Vc(e)||Fu(e)||Pu(e)||wu(e)||yd(e)||_m(e)||jo(e)}function h3(e){if(!gm(e))throw new Error(`Expected ${(0,un.inspect)(e)} to be a GraphQL type.`);return e}function Ru(e){return(0,Vo.instanceOf)(e,mm)}function E3(e){if(!Ru(e))throw new Error(`Expected ${(0,un.inspect)(e)} to be a GraphQL Scalar type.`);return e}function Vc(e){return(0,Vo.instanceOf)(e,Tm)}function y3(e){if(!Vc(e))throw new Error(`Expected ${(0,un.inspect)(e)} to be a GraphQL Object type.`);return e}function Fu(e){return(0,Vo.instanceOf)(e,Nm)}function I3(e){if(!Fu(e))throw new Error(`Expected ${(0,un.inspect)(e)} to be a GraphQL Interface type.`);return e}function Pu(e){return(0,Vo.instanceOf)(e,hm)}function g3(e){if(!Pu(e))throw new Error(`Expected ${(0,un.inspect)(e)} to be a GraphQL Union type.`);return e}function wu(e){return(0,Vo.instanceOf)(e,Em)}function _3(e){if(!wu(e))throw new Error(`Expected ${(0,un.inspect)(e)} to be a GraphQL Enum type.`);return e}function yd(e){return(0,Vo.instanceOf)(e,ym)}function v3(e){if(!yd(e))throw new Error(`Expected ${(0,un.inspect)(e)} to be a GraphQL Input Object type.`);return e}function _m(e){return(0,Vo.instanceOf)(e,pm)}function S3(e){if(!_m(e))throw new Error(`Expected ${(0,un.inspect)(e)} to be a GraphQL List type.`);return e}function jo(e){return(0,Vo.instanceOf)(e,fm)}function O3(e){if(!jo(e))throw new Error(`Expected ${(0,un.inspect)(e)} to be a GraphQL Non-Null type.`);return e}function jy(e){return Ru(e)||wu(e)||yd(e)||Id(e)&&jy(e.ofType)}function b3(e){if(!jy(e))throw new Error(`Expected ${(0,un.inspect)(e)} to be a GraphQL input type.`);return e}function Ky(e){return Ru(e)||Vc(e)||Fu(e)||Pu(e)||wu(e)||Id(e)&&Ky(e.ofType)}function D3(e){if(!Ky(e))throw new Error(`Expected ${(0,un.inspect)(e)} to be a GraphQL output type.`);return e}function XR(e){return Ru(e)||wu(e)}function A3(e){if(!XR(e))throw new Error(`Expected ${(0,un.inspect)(e)} to be a GraphQL leaf type.`);return e}function ZR(e){return Vc(e)||Fu(e)||Pu(e)}function R3(e){if(!ZR(e))throw new Error(`Expected ${(0,un.inspect)(e)} to be a GraphQL composite type.`);return e}function eF(e){return Fu(e)||Pu(e)}function F3(e){if(!eF(e))throw new Error(`Expected ${(0,un.inspect)(e)} to be a GraphQL abstract type.`);return e}var pm=class{constructor(t){gm(t)||(0,ur.devAssert)(!1,`Expected ${(0,un.inspect)(t)} to be a GraphQL type.`),this.ofType=t}get[Symbol.toStringTag](){return"GraphQLList"}toString(){return"["+String(this.ofType)+"]"}toJSON(){return this.toString()}};je.GraphQLList=pm;var fm=class{constructor(t){Gy(t)||(0,ur.devAssert)(!1,`Expected ${(0,un.inspect)(t)} to be a GraphQL nullable type.`),this.ofType=t}get[Symbol.toStringTag](){return"GraphQLNonNull"}toString(){return String(this.ofType)+"!"}toJSON(){return this.toString()}};je.GraphQLNonNull=fm;function Id(e){return _m(e)||jo(e)}function P3(e){if(!Id(e))throw new Error(`Expected ${(0,un.inspect)(e)} to be a GraphQL wrapping type.`);return e}function Gy(e){return gm(e)&&!jo(e)}function w3(e){if(!Gy(e))throw new Error(`Expected ${(0,un.inspect)(e)} to be a GraphQL nullable type.`);return e}function L3(e){if(e)return jo(e)?e.ofType:e}function tF(e){return Ru(e)||Vc(e)||Fu(e)||Pu(e)||wu(e)||yd(e)}function C3(e){if(!tF(e))throw new Error(`Expected ${(0,un.inspect)(e)} to be a GraphQL named type.`);return e}function B3(e){if(e){let t=e;for(;Id(t);)t=t.ofType;return t}}function $y(e){return typeof e=="function"?e():e}function Qy(e){return typeof e=="function"?e():e}var mm=class{constructor(t){var n,r,i,a;let o=(n=t.parseValue)!==null&&n!==void 0?n:JR.identityFunc;this.name=(0,Da.assertName)(t.name),this.description=t.description,this.specifiedByURL=t.specifiedByURL,this.serialize=(r=t.serialize)!==null&&r!==void 0?r:JR.identityFunc,this.parseValue=o,this.parseLiteral=(i=t.parseLiteral)!==null&&i!==void 0?i:(c,l)=>o((0,N3.valueFromASTUntyped)(c,l)),this.extensions=(0,ba.toObjMap)(t.extensions),this.astNode=t.astNode,this.extensionASTNodes=(a=t.extensionASTNodes)!==null&&a!==void 0?a:[],t.specifiedByURL==null||typeof t.specifiedByURL=="string"||(0,ur.devAssert)(!1,`${this.name} must provide "specifiedByURL" as a string, but got: ${(0,un.inspect)(t.specifiedByURL)}.`),t.serialize==null||typeof t.serialize=="function"||(0,ur.devAssert)(!1,`${this.name} must provide "serialize" function. If this custom Scalar is also used as an input type, ensure "parseValue" and "parseLiteral" functions are also provided.`),t.parseLiteral&&(typeof t.parseValue=="function"&&typeof t.parseLiteral=="function"||(0,ur.devAssert)(!1,`${this.name} must provide both "parseValue" and "parseLiteral" functions.`))}get[Symbol.toStringTag](){return"GraphQLScalarType"}toConfig(){return{name:this.name,description:this.description,specifiedByURL:this.specifiedByURL,serialize:this.serialize,parseValue:this.parseValue,parseLiteral:this.parseLiteral,extensions:this.extensions,astNode:this.astNode,extensionASTNodes:this.extensionASTNodes}}toString(){return this.name}toJSON(){return this.toString()}};je.GraphQLScalarType=mm;var Tm=class{constructor(t){var n;this.name=(0,Da.assertName)(t.name),this.description=t.description,this.isTypeOf=t.isTypeOf,this.extensions=(0,ba.toObjMap)(t.extensions),this.astNode=t.astNode,this.extensionASTNodes=(n=t.extensionASTNodes)!==null&&n!==void 0?n:[],this._fields=()=>rF(t),this._interfaces=()=>nF(t),t.isTypeOf==null||typeof t.isTypeOf=="function"||(0,ur.devAssert)(!1,`${this.name} must provide "isTypeOf" as a function, but got: ${(0,un.inspect)(t.isTypeOf)}.`)}get[Symbol.toStringTag](){return"GraphQLObjectType"}getFields(){return typeof this._fields=="function"&&(this._fields=this._fields()),this._fields}getInterfaces(){return typeof this._interfaces=="function"&&(this._interfaces=this._interfaces()),this._interfaces}toConfig(){return{name:this.name,description:this.description,interfaces:this.getInterfaces(),fields:aF(this.getFields()),isTypeOf:this.isTypeOf,extensions:this.extensions,astNode:this.astNode,extensionASTNodes:this.extensionASTNodes}}toString(){return this.name}toJSON(){return this.toString()}};je.GraphQLObjectType=Tm;function nF(e){var t;let n=$y((t=e.interfaces)!==null&&t!==void 0?t:[]);return Array.isArray(n)||(0,ur.devAssert)(!1,`${e.name} interfaces must be an Array or a function which returns an Array.`),n}function rF(e){let t=Qy(e.fields);return qc(t)||(0,ur.devAssert)(!1,`${e.name} fields must be an object with field names as keys or a function which returns such an object.`),(0,Im.mapValue)(t,(n,r)=>{var i;qc(n)||(0,ur.devAssert)(!1,`${e.name}.${r} field config must be an object.`),n.resolve==null||typeof n.resolve=="function"||(0,ur.devAssert)(!1,`${e.name}.${r} field resolver must be a function if provided, but got: ${(0,un.inspect)(n.resolve)}.`);let a=(i=n.args)!==null&&i!==void 0?i:{};return qc(a)||(0,ur.devAssert)(!1,`${e.name}.${r} args must be an object with argument names as keys.`),{name:(0,Da.assertName)(r),description:n.description,type:n.type,args:iF(a),resolve:n.resolve,subscribe:n.subscribe,deprecationReason:n.deprecationReason,extensions:(0,ba.toObjMap)(n.extensions),astNode:n.astNode}})}function iF(e){return Object.entries(e).map(([t,n])=>({name:(0,Da.assertName)(t),description:n.description,type:n.type,defaultValue:n.defaultValue,deprecationReason:n.deprecationReason,extensions:(0,ba.toObjMap)(n.extensions),astNode:n.astNode}))}function qc(e){return(0,p3.isObjectLike)(e)&&!Array.isArray(e)}function aF(e){return(0,Im.mapValue)(e,t=>({description:t.description,type:t.type,args:sF(t.args),resolve:t.resolve,subscribe:t.subscribe,deprecationReason:t.deprecationReason,extensions:t.extensions,astNode:t.astNode}))}function sF(e){return(0,WR.keyValMap)(e,t=>t.name,t=>({description:t.description,type:t.type,defaultValue:t.defaultValue,deprecationReason:t.deprecationReason,extensions:t.extensions,astNode:t.astNode}))}function U3(e){return jo(e.type)&&e.defaultValue===void 0}var Nm=class{constructor(t){var n;this.name=(0,Da.assertName)(t.name),this.description=t.description,this.resolveType=t.resolveType,this.extensions=(0,ba.toObjMap)(t.extensions),this.astNode=t.astNode,this.extensionASTNodes=(n=t.extensionASTNodes)!==null&&n!==void 0?n:[],this._fields=rF.bind(void 0,t),this._interfaces=nF.bind(void 0,t),t.resolveType==null||typeof t.resolveType=="function"||(0,ur.devAssert)(!1,`${this.name} must provide "resolveType" as a function, but got: ${(0,un.inspect)(t.resolveType)}.`)}get[Symbol.toStringTag](){return"GraphQLInterfaceType"}getFields(){return typeof this._fields=="function"&&(this._fields=this._fields()),this._fields}getInterfaces(){return typeof this._interfaces=="function"&&(this._interfaces=this._interfaces()),this._interfaces}toConfig(){return{name:this.name,description:this.description,interfaces:this.getInterfaces(),fields:aF(this.getFields()),resolveType:this.resolveType,extensions:this.extensions,astNode:this.astNode,extensionASTNodes:this.extensionASTNodes}}toString(){return this.name}toJSON(){return this.toString()}};je.GraphQLInterfaceType=Nm;var hm=class{constructor(t){var n;this.name=(0,Da.assertName)(t.name),this.description=t.description,this.resolveType=t.resolveType,this.extensions=(0,ba.toObjMap)(t.extensions),this.astNode=t.astNode,this.extensionASTNodes=(n=t.extensionASTNodes)!==null&&n!==void 0?n:[],this._types=k3.bind(void 0,t),t.resolveType==null||typeof t.resolveType=="function"||(0,ur.devAssert)(!1,`${this.name} must provide "resolveType" as a function, but got: ${(0,un.inspect)(t.resolveType)}.`)}get[Symbol.toStringTag](){return"GraphQLUnionType"}getTypes(){return typeof this._types=="function"&&(this._types=this._types()),this._types}toConfig(){return{name:this.name,description:this.description,types:this.getTypes(),resolveType:this.resolveType,extensions:this.extensions,astNode:this.astNode,extensionASTNodes:this.extensionASTNodes}}toString(){return this.name}toJSON(){return this.toString()}};je.GraphQLUnionType=hm;function k3(e){let t=$y(e.types);return Array.isArray(t)||(0,ur.devAssert)(!1,`Must provide Array of types or a function which returns such an array for Union ${e.name}.`),t}var Em=class{constructor(t){var n;this.name=(0,Da.assertName)(t.name),this.description=t.description,this.extensions=(0,ba.toObjMap)(t.extensions),this.astNode=t.astNode,this.extensionASTNodes=(n=t.extensionASTNodes)!==null&&n!==void 0?n:[],this._values=typeof t.values=="function"?t.values:zR(this.name,t.values),this._valueLookup=null,this._nameLookup=null}get[Symbol.toStringTag](){return"GraphQLEnumType"}getValues(){return typeof this._values=="function"&&(this._values=zR(this.name,this._values())),this._values}getValue(t){return this._nameLookup===null&&(this._nameLookup=(0,f3.keyMap)(this.getValues(),n=>n.name)),this._nameLookup[t]}serialize(t){this._valueLookup===null&&(this._valueLookup=new Map(this.getValues().map(r=>[r.value,r])));let n=this._valueLookup.get(t);if(n===void 0)throw new Ed.GraphQLError(`Enum "${this.name}" cannot represent value: ${(0,un.inspect)(t)}`);return n.name}parseValue(t){if(typeof t!="string"){let r=(0,un.inspect)(t);throw new Ed.GraphQLError(`Enum "${this.name}" cannot represent non-string value: ${r}.`+dm(this,r))}let n=this.getValue(t);if(n==null)throw new Ed.GraphQLError(`Value "${t}" does not exist in "${this.name}" enum.`+dm(this,t));return n.value}parseLiteral(t,n){if(t.kind!==T3.Kind.ENUM){let i=(0,HR.print)(t);throw new Ed.GraphQLError(`Enum "${this.name}" cannot represent non-enum value: ${i}.`+dm(this,i),{nodes:t})}let r=this.getValue(t.value);if(r==null){let i=(0,HR.print)(t);throw new Ed.GraphQLError(`Value "${i}" does not exist in "${this.name}" enum.`+dm(this,i),{nodes:t})}return r.value}toConfig(){let t=(0,WR.keyValMap)(this.getValues(),n=>n.name,n=>({description:n.description,value:n.value,deprecationReason:n.deprecationReason,extensions:n.extensions,astNode:n.astNode}));return{name:this.name,description:this.description,values:t,extensions:this.extensions,astNode:this.astNode,extensionASTNodes:this.extensionASTNodes}}toString(){return this.name}toJSON(){return this.toString()}};je.GraphQLEnumType=Em;function dm(e,t){let n=e.getValues().map(i=>i.name),r=(0,m3.suggestionList)(t,n);return(0,d3.didYouMean)("the enum value",r)}function zR(e,t){return qc(t)||(0,ur.devAssert)(!1,`${e} values must be an object with value names as keys.`),Object.entries(t).map(([n,r])=>(qc(r)||(0,ur.devAssert)(!1,`${e}.${n} must refer to an object with a "value" key representing an internal value but got: ${(0,un.inspect)(r)}.`),{name:(0,Da.assertEnumValueName)(n),description:r.description,value:r.value!==void 0?r.value:n,deprecationReason:r.deprecationReason,extensions:(0,ba.toObjMap)(r.extensions),astNode:r.astNode}))}var ym=class{constructor(t){var n,r;this.name=(0,Da.assertName)(t.name),this.description=t.description,this.extensions=(0,ba.toObjMap)(t.extensions),this.astNode=t.astNode,this.extensionASTNodes=(n=t.extensionASTNodes)!==null&&n!==void 0?n:[],this.isOneOf=(r=t.isOneOf)!==null&&r!==void 0?r:!1,this._fields=M3.bind(void 0,t)}get[Symbol.toStringTag](){return"GraphQLInputObjectType"}getFields(){return typeof this._fields=="function"&&(this._fields=this._fields()),this._fields}toConfig(){let t=(0,Im.mapValue)(this.getFields(),n=>({description:n.description,type:n.type,defaultValue:n.defaultValue,deprecationReason:n.deprecationReason,extensions:n.extensions,astNode:n.astNode}));return{name:this.name,description:this.description,fields:t,extensions:this.extensions,astNode:this.astNode,extensionASTNodes:this.extensionASTNodes,isOneOf:this.isOneOf}}toString(){return this.name}toJSON(){return this.toString()}};je.GraphQLInputObjectType=ym;function M3(e){let t=Qy(e.fields);return qc(t)||(0,ur.devAssert)(!1,`${e.name} fields must be an object with field names as keys or a function which returns such an object.`),(0,Im.mapValue)(t,(n,r)=>(!("resolve"in n)||(0,ur.devAssert)(!1,`${e.name}.${r} field has a resolve property, but Input Types cannot define resolvers.`),{name:(0,Da.assertName)(r),description:n.description,type:n.type,defaultValue:n.defaultValue,deprecationReason:n.deprecationReason,extensions:(0,ba.toObjMap)(n.extensions),astNode:n.astNode}))}function x3(e){return jo(e.type)&&e.defaultValue===void 0}});var _d=P(gd=>{"use strict";f();T();m();Object.defineProperty(gd,"__esModule",{value:!0});gd.doTypesOverlap=q3;gd.isEqualType=Yy;gd.isTypeSubTypeOf=vm;var gr=Ft();function Yy(e,t){return e===t?!0:(0,gr.isNonNullType)(e)&&(0,gr.isNonNullType)(t)||(0,gr.isListType)(e)&&(0,gr.isListType)(t)?Yy(e.ofType,t.ofType):!1}function vm(e,t,n){return t===n?!0:(0,gr.isNonNullType)(n)?(0,gr.isNonNullType)(t)?vm(e,t.ofType,n.ofType):!1:(0,gr.isNonNullType)(t)?vm(e,t.ofType,n):(0,gr.isListType)(n)?(0,gr.isListType)(t)?vm(e,t.ofType,n.ofType):!1:(0,gr.isListType)(t)?!1:(0,gr.isAbstractType)(n)&&((0,gr.isInterfaceType)(t)||(0,gr.isObjectType)(t))&&e.isSubType(n,t)}function q3(e,t,n){return t===n?!0:(0,gr.isAbstractType)(t)?(0,gr.isAbstractType)(n)?e.getPossibleTypes(t).some(r=>e.isSubType(n,r)):e.isSubType(t,n):(0,gr.isAbstractType)(n)?e.isSubType(n,t):!1}});var Aa=P(zn=>{"use strict";f();T();m();Object.defineProperty(zn,"__esModule",{value:!0});zn.GraphQLString=zn.GraphQLInt=zn.GraphQLID=zn.GraphQLFloat=zn.GraphQLBoolean=zn.GRAPHQL_MIN_INT=zn.GRAPHQL_MAX_INT=void 0;zn.isSpecifiedScalarType=V3;zn.specifiedScalarTypes=void 0;var Zi=Yt(),oF=Sa(),cr=Je(),Lu=Rt(),vd=ci(),Sd=Ft(),Sm=2147483647;zn.GRAPHQL_MAX_INT=Sm;var Om=-2147483648;zn.GRAPHQL_MIN_INT=Om;var uF=new Sd.GraphQLScalarType({name:"Int",description:"The `Int` scalar type represents non-fractional signed whole numeric values. Int can represent values between -(2^31) and 2^31 - 1.",serialize(e){let t=Od(e);if(typeof t=="boolean")return t?1:0;let n=t;if(typeof t=="string"&&t!==""&&(n=Number(t)),typeof n!="number"||!Number.isInteger(n))throw new cr.GraphQLError(`Int cannot represent non-integer value: ${(0,Zi.inspect)(t)}`);if(n>Sm||nSm||eSm||te.name===t)}function Od(e){if((0,oF.isObjectLike)(e)){if(typeof e.valueOf=="function"){let t=e.valueOf();if(!(0,oF.isObjectLike)(t))return t}if(typeof e.toJSON=="function")return e.toJSON()}return e}});var $r=P(qn=>{"use strict";f();T();m();Object.defineProperty(qn,"__esModule",{value:!0});qn.GraphQLSpecifiedByDirective=qn.GraphQLSkipDirective=qn.GraphQLOneOfDirective=qn.GraphQLIncludeDirective=qn.GraphQLDirective=qn.GraphQLDeprecatedDirective=qn.DEFAULT_DEPRECATION_REASON=void 0;qn.assertDirective=Y3;qn.isDirective=TF;qn.isSpecifiedDirective=J3;qn.specifiedDirectives=void 0;var mF=Cr(),j3=Yt(),K3=pd(),G3=Sa(),$3=sm(),Oi=Uc(),Q3=hd(),bd=Ft(),bm=Aa();function TF(e){return(0,K3.instanceOf)(e,ds)}function Y3(e){if(!TF(e))throw new Error(`Expected ${(0,j3.inspect)(e)} to be a GraphQL directive.`);return e}var ds=class{constructor(t){var n,r;this.name=(0,Q3.assertName)(t.name),this.description=t.description,this.locations=t.locations,this.isRepeatable=(n=t.isRepeatable)!==null&&n!==void 0?n:!1,this.extensions=(0,$3.toObjMap)(t.extensions),this.astNode=t.astNode,Array.isArray(t.locations)||(0,mF.devAssert)(!1,`@${t.name} locations must be an Array.`);let i=(r=t.args)!==null&&r!==void 0?r:{};(0,G3.isObjectLike)(i)&&!Array.isArray(i)||(0,mF.devAssert)(!1,`@${t.name} args must be an object with argument names as keys.`),this.args=(0,bd.defineArguments)(i)}get[Symbol.toStringTag](){return"GraphQLDirective"}toConfig(){return{name:this.name,description:this.description,locations:this.locations,args:(0,bd.argsToArgsConfig)(this.args),isRepeatable:this.isRepeatable,extensions:this.extensions,astNode:this.astNode}}toString(){return"@"+this.name}toJSON(){return this.toString()}};qn.GraphQLDirective=ds;var NF=new ds({name:"include",description:"Directs the executor to include this field or fragment only when the `if` argument is true.",locations:[Oi.DirectiveLocation.FIELD,Oi.DirectiveLocation.FRAGMENT_SPREAD,Oi.DirectiveLocation.INLINE_FRAGMENT],args:{if:{type:new bd.GraphQLNonNull(bm.GraphQLBoolean),description:"Included when true."}}});qn.GraphQLIncludeDirective=NF;var hF=new ds({name:"skip",description:"Directs the executor to skip this field or fragment when the `if` argument is true.",locations:[Oi.DirectiveLocation.FIELD,Oi.DirectiveLocation.FRAGMENT_SPREAD,Oi.DirectiveLocation.INLINE_FRAGMENT],args:{if:{type:new bd.GraphQLNonNull(bm.GraphQLBoolean),description:"Skipped when true."}}});qn.GraphQLSkipDirective=hF;var EF="No longer supported";qn.DEFAULT_DEPRECATION_REASON=EF;var yF=new ds({name:"deprecated",description:"Marks an element of a GraphQL schema as no longer supported.",locations:[Oi.DirectiveLocation.FIELD_DEFINITION,Oi.DirectiveLocation.ARGUMENT_DEFINITION,Oi.DirectiveLocation.INPUT_FIELD_DEFINITION,Oi.DirectiveLocation.ENUM_VALUE],args:{reason:{type:bm.GraphQLString,description:"Explains why this element was deprecated, usually also including a suggestion for how to access supported similar data. Formatted using the Markdown syntax, as specified by [CommonMark](https://commonmark.org/).",defaultValue:EF}}});qn.GraphQLDeprecatedDirective=yF;var IF=new ds({name:"specifiedBy",description:"Exposes a URL that specifies the behavior of this scalar.",locations:[Oi.DirectiveLocation.SCALAR],args:{url:{type:new bd.GraphQLNonNull(bm.GraphQLString),description:"The URL that specifies the behavior of this scalar."}}});qn.GraphQLSpecifiedByDirective=IF;var gF=new ds({name:"oneOf",description:"Indicates exactly one field must be supplied and this field must not be `null`.",locations:[Oi.DirectiveLocation.INPUT_OBJECT],args:{}});qn.GraphQLOneOfDirective=gF;var _F=Object.freeze([NF,hF,yF,IF,gF]);qn.specifiedDirectives=_F;function J3(e){return _F.some(({name:t})=>t===e.name)}});var Dm=P(Jy=>{"use strict";f();T();m();Object.defineProperty(Jy,"__esModule",{value:!0});Jy.isIterableObject=H3;function H3(e){return typeof e=="object"&&typeof(e==null?void 0:e[Symbol.iterator])=="function"}});var Rd=P(Hy=>{"use strict";f();T();m();Object.defineProperty(Hy,"__esModule",{value:!0});Hy.astFromValue=Ad;var vF=Yt(),z3=Ir(),W3=Dm(),X3=Sa(),bi=Rt(),Dd=Ft(),Z3=Aa();function Ad(e,t){if((0,Dd.isNonNullType)(t)){let n=Ad(e,t.ofType);return(n==null?void 0:n.kind)===bi.Kind.NULL?null:n}if(e===null)return{kind:bi.Kind.NULL};if(e===void 0)return null;if((0,Dd.isListType)(t)){let n=t.ofType;if((0,W3.isIterableObject)(e)){let r=[];for(let i of e){let a=Ad(i,n);a!=null&&r.push(a)}return{kind:bi.Kind.LIST,values:r}}return Ad(e,n)}if((0,Dd.isInputObjectType)(t)){if(!(0,X3.isObjectLike)(e))return null;let n=[];for(let r of Object.values(t.getFields())){let i=Ad(e[r.name],r.type);i&&n.push({kind:bi.Kind.OBJECT_FIELD,name:{kind:bi.Kind.NAME,value:r.name},value:i})}return{kind:bi.Kind.OBJECT,fields:n}}if((0,Dd.isLeafType)(t)){let n=t.serialize(e);if(n==null)return null;if(typeof n=="boolean")return{kind:bi.Kind.BOOLEAN,value:n};if(typeof n=="number"&&Number.isFinite(n)){let r=String(n);return SF.test(r)?{kind:bi.Kind.INT,value:r}:{kind:bi.Kind.FLOAT,value:r}}if(typeof n=="string")return(0,Dd.isEnumType)(t)?{kind:bi.Kind.ENUM,value:n}:t===Z3.GraphQLID&&SF.test(n)?{kind:bi.Kind.INT,value:n}:{kind:bi.Kind.STRING,value:n};throw new TypeError(`Cannot convert value to AST: ${(0,vF.inspect)(n)}.`)}(0,z3.invariant)(!1,"Unexpected input type: "+(0,vF.inspect)(t))}var SF=/^-?(?:0|[1-9][0-9]*)$/});var Ai=P(Jt=>{"use strict";f();T();m();Object.defineProperty(Jt,"__esModule",{value:!0});Jt.introspectionTypes=Jt.__TypeKind=Jt.__Type=Jt.__Schema=Jt.__InputValue=Jt.__Field=Jt.__EnumValue=Jt.__DirectiveLocation=Jt.__Directive=Jt.TypeNameMetaFieldDef=Jt.TypeMetaFieldDef=Jt.TypeKind=Jt.SchemaMetaFieldDef=void 0;Jt.isIntrospectionType=oH;var eH=Yt(),tH=Ir(),Wn=Uc(),nH=ci(),rH=Rd(),Ue=Ft(),rn=Aa(),zy=new Ue.GraphQLObjectType({name:"__Schema",description:"A GraphQL Schema defines the capabilities of a GraphQL server. It exposes all available types and directives on the server, as well as the entry points for query, mutation, and subscription operations.",fields:()=>({description:{type:rn.GraphQLString,resolve:e=>e.description},types:{description:"A list of all types supported by this server.",type:new Ue.GraphQLNonNull(new Ue.GraphQLList(new Ue.GraphQLNonNull(Di))),resolve(e){return Object.values(e.getTypeMap())}},queryType:{description:"The type that query operations will be rooted at.",type:new Ue.GraphQLNonNull(Di),resolve:e=>e.getQueryType()},mutationType:{description:"If this server supports mutation, the type that mutation operations will be rooted at.",type:Di,resolve:e=>e.getMutationType()},subscriptionType:{description:"If this server support subscription, the type that subscription operations will be rooted at.",type:Di,resolve:e=>e.getSubscriptionType()},directives:{description:"A list of all directives supported by this server.",type:new Ue.GraphQLNonNull(new Ue.GraphQLList(new Ue.GraphQLNonNull(Wy))),resolve:e=>e.getDirectives()}})});Jt.__Schema=zy;var Wy=new Ue.GraphQLObjectType({name:"__Directive",description:`A Directive provides a way to describe alternate runtime execution and type validation behavior in a GraphQL document. +}`)}function Ot(e,t,n=""){return t!=null&&t!==""?e+t+n:""}function cm(e){return Ot(" ",e.replace(/\n/g,` + `))}function QR(e){var t;return(t=e==null?void 0:e.some(n=>n.includes(` +`)))!==null&&t!==void 0?t:!1}});var jy=w(Vy=>{"use strict";f();N();m();Object.defineProperty(Vy,"__esModule",{value:!0});Vy.valueFromASTUntyped=qy;var dH=Td(),ls=Rt();function qy(e,t){switch(e.kind){case ls.Kind.NULL:return null;case ls.Kind.INT:return parseInt(e.value,10);case ls.Kind.FLOAT:return parseFloat(e.value);case ls.Kind.STRING:case ls.Kind.ENUM:case ls.Kind.BOOLEAN:return e.value;case ls.Kind.LIST:return e.values.map(n=>qy(n,t));case ls.Kind.OBJECT:return(0,dH.keyValMap)(e.fields,n=>n.name.value,n=>qy(n.value,t));case ls.Kind.VARIABLE:return t==null?void 0:t[e.name.value]}}});var hd=w(dm=>{"use strict";f();N();m();Object.defineProperty(dm,"__esModule",{value:!0});dm.assertEnumValueName=pH;dm.assertName=HR;var YR=Cr(),lm=He(),JR=Xf();function HR(e){if(e!=null||(0,YR.devAssert)(!1,"Must provide name."),typeof e=="string"||(0,YR.devAssert)(!1,"Expected name to be a string."),e.length===0)throw new lm.GraphQLError("Expected name to be a non-empty string.");for(let t=1;t{"use strict";f();N();m();Object.defineProperty(je,"__esModule",{value:!0});je.GraphQLUnionType=je.GraphQLScalarType=je.GraphQLObjectType=je.GraphQLNonNull=je.GraphQLList=je.GraphQLInterfaceType=je.GraphQLInputObjectType=je.GraphQLEnumType=void 0;je.argsToArgsConfig=uF;je.assertAbstractType=wH;je.assertCompositeType=PH;je.assertEnumType=SH;je.assertInputObjectType=OH;je.assertInputType=AH;je.assertInterfaceType=_H;je.assertLeafType=FH;je.assertListType=DH;je.assertNamedType=UH;je.assertNonNullType=bH;je.assertNullableType=CH;je.assertObjectType=gH;je.assertOutputType=RH;je.assertScalarType=IH;je.assertType=yH;je.assertUnionType=vH;je.assertWrappingType=LH;je.defineArguments=sF;je.getNamedType=kH;je.getNullableType=BH;je.isAbstractType=nF;je.isCompositeType=tF;je.isEnumType=Cu;je.isInputObjectType=Id;je.isInputType=Ky;je.isInterfaceType=wu;je.isLeafType=eF;je.isListType=vm;je.isNamedType=rF;je.isNonNullType=Ko;je.isNullableType=$y;je.isObjectType=jc;je.isOutputType=Gy;je.isRequiredArgument=MH;je.isRequiredInputField=VH;je.isScalarType=Pu;je.isType=_m;je.isUnionType=Lu;je.isWrappingType=gd;je.resolveObjMapThunk=Yy;je.resolveReadonlyArrayThunk=Qy;var ur=Cr(),fH=Mo(),zR=jR(),un=Yt(),jo=fd(),mH=Sa(),NH=xo(),ZR=Td(),gm=Py(),TH=qo(),Da=om(),yd=He(),EH=Rt(),WR=li(),hH=jy(),ba=hd();function _m(e){return Pu(e)||jc(e)||wu(e)||Lu(e)||Cu(e)||Id(e)||vm(e)||Ko(e)}function yH(e){if(!_m(e))throw new Error(`Expected ${(0,un.inspect)(e)} to be a GraphQL type.`);return e}function Pu(e){return(0,jo.instanceOf)(e,Nm)}function IH(e){if(!Pu(e))throw new Error(`Expected ${(0,un.inspect)(e)} to be a GraphQL Scalar type.`);return e}function jc(e){return(0,jo.instanceOf)(e,Tm)}function gH(e){if(!jc(e))throw new Error(`Expected ${(0,un.inspect)(e)} to be a GraphQL Object type.`);return e}function wu(e){return(0,jo.instanceOf)(e,Em)}function _H(e){if(!wu(e))throw new Error(`Expected ${(0,un.inspect)(e)} to be a GraphQL Interface type.`);return e}function Lu(e){return(0,jo.instanceOf)(e,hm)}function vH(e){if(!Lu(e))throw new Error(`Expected ${(0,un.inspect)(e)} to be a GraphQL Union type.`);return e}function Cu(e){return(0,jo.instanceOf)(e,ym)}function SH(e){if(!Cu(e))throw new Error(`Expected ${(0,un.inspect)(e)} to be a GraphQL Enum type.`);return e}function Id(e){return(0,jo.instanceOf)(e,Im)}function OH(e){if(!Id(e))throw new Error(`Expected ${(0,un.inspect)(e)} to be a GraphQL Input Object type.`);return e}function vm(e){return(0,jo.instanceOf)(e,fm)}function DH(e){if(!vm(e))throw new Error(`Expected ${(0,un.inspect)(e)} to be a GraphQL List type.`);return e}function Ko(e){return(0,jo.instanceOf)(e,mm)}function bH(e){if(!Ko(e))throw new Error(`Expected ${(0,un.inspect)(e)} to be a GraphQL Non-Null type.`);return e}function Ky(e){return Pu(e)||Cu(e)||Id(e)||gd(e)&&Ky(e.ofType)}function AH(e){if(!Ky(e))throw new Error(`Expected ${(0,un.inspect)(e)} to be a GraphQL input type.`);return e}function Gy(e){return Pu(e)||jc(e)||wu(e)||Lu(e)||Cu(e)||gd(e)&&Gy(e.ofType)}function RH(e){if(!Gy(e))throw new Error(`Expected ${(0,un.inspect)(e)} to be a GraphQL output type.`);return e}function eF(e){return Pu(e)||Cu(e)}function FH(e){if(!eF(e))throw new Error(`Expected ${(0,un.inspect)(e)} to be a GraphQL leaf type.`);return e}function tF(e){return jc(e)||wu(e)||Lu(e)}function PH(e){if(!tF(e))throw new Error(`Expected ${(0,un.inspect)(e)} to be a GraphQL composite type.`);return e}function nF(e){return wu(e)||Lu(e)}function wH(e){if(!nF(e))throw new Error(`Expected ${(0,un.inspect)(e)} to be a GraphQL abstract type.`);return e}var fm=class{constructor(t){_m(t)||(0,ur.devAssert)(!1,`Expected ${(0,un.inspect)(t)} to be a GraphQL type.`),this.ofType=t}get[Symbol.toStringTag](){return"GraphQLList"}toString(){return"["+String(this.ofType)+"]"}toJSON(){return this.toString()}};je.GraphQLList=fm;var mm=class{constructor(t){$y(t)||(0,ur.devAssert)(!1,`Expected ${(0,un.inspect)(t)} to be a GraphQL nullable type.`),this.ofType=t}get[Symbol.toStringTag](){return"GraphQLNonNull"}toString(){return String(this.ofType)+"!"}toJSON(){return this.toString()}};je.GraphQLNonNull=mm;function gd(e){return vm(e)||Ko(e)}function LH(e){if(!gd(e))throw new Error(`Expected ${(0,un.inspect)(e)} to be a GraphQL wrapping type.`);return e}function $y(e){return _m(e)&&!Ko(e)}function CH(e){if(!$y(e))throw new Error(`Expected ${(0,un.inspect)(e)} to be a GraphQL nullable type.`);return e}function BH(e){if(e)return Ko(e)?e.ofType:e}function rF(e){return Pu(e)||jc(e)||wu(e)||Lu(e)||Cu(e)||Id(e)}function UH(e){if(!rF(e))throw new Error(`Expected ${(0,un.inspect)(e)} to be a GraphQL named type.`);return e}function kH(e){if(e){let t=e;for(;gd(t);)t=t.ofType;return t}}function Qy(e){return typeof e=="function"?e():e}function Yy(e){return typeof e=="function"?e():e}var Nm=class{constructor(t){var n,r,i,a;let o=(n=t.parseValue)!==null&&n!==void 0?n:zR.identityFunc;this.name=(0,ba.assertName)(t.name),this.description=t.description,this.specifiedByURL=t.specifiedByURL,this.serialize=(r=t.serialize)!==null&&r!==void 0?r:zR.identityFunc,this.parseValue=o,this.parseLiteral=(i=t.parseLiteral)!==null&&i!==void 0?i:(c,l)=>o((0,hH.valueFromASTUntyped)(c,l)),this.extensions=(0,Da.toObjMap)(t.extensions),this.astNode=t.astNode,this.extensionASTNodes=(a=t.extensionASTNodes)!==null&&a!==void 0?a:[],t.specifiedByURL==null||typeof t.specifiedByURL=="string"||(0,ur.devAssert)(!1,`${this.name} must provide "specifiedByURL" as a string, but got: ${(0,un.inspect)(t.specifiedByURL)}.`),t.serialize==null||typeof t.serialize=="function"||(0,ur.devAssert)(!1,`${this.name} must provide "serialize" function. If this custom Scalar is also used as an input type, ensure "parseValue" and "parseLiteral" functions are also provided.`),t.parseLiteral&&(typeof t.parseValue=="function"&&typeof t.parseLiteral=="function"||(0,ur.devAssert)(!1,`${this.name} must provide both "parseValue" and "parseLiteral" functions.`))}get[Symbol.toStringTag](){return"GraphQLScalarType"}toConfig(){return{name:this.name,description:this.description,specifiedByURL:this.specifiedByURL,serialize:this.serialize,parseValue:this.parseValue,parseLiteral:this.parseLiteral,extensions:this.extensions,astNode:this.astNode,extensionASTNodes:this.extensionASTNodes}}toString(){return this.name}toJSON(){return this.toString()}};je.GraphQLScalarType=Nm;var Tm=class{constructor(t){var n;this.name=(0,ba.assertName)(t.name),this.description=t.description,this.isTypeOf=t.isTypeOf,this.extensions=(0,Da.toObjMap)(t.extensions),this.astNode=t.astNode,this.extensionASTNodes=(n=t.extensionASTNodes)!==null&&n!==void 0?n:[],this._fields=()=>aF(t),this._interfaces=()=>iF(t),t.isTypeOf==null||typeof t.isTypeOf=="function"||(0,ur.devAssert)(!1,`${this.name} must provide "isTypeOf" as a function, but got: ${(0,un.inspect)(t.isTypeOf)}.`)}get[Symbol.toStringTag](){return"GraphQLObjectType"}getFields(){return typeof this._fields=="function"&&(this._fields=this._fields()),this._fields}getInterfaces(){return typeof this._interfaces=="function"&&(this._interfaces=this._interfaces()),this._interfaces}toConfig(){return{name:this.name,description:this.description,interfaces:this.getInterfaces(),fields:oF(this.getFields()),isTypeOf:this.isTypeOf,extensions:this.extensions,astNode:this.astNode,extensionASTNodes:this.extensionASTNodes}}toString(){return this.name}toJSON(){return this.toString()}};je.GraphQLObjectType=Tm;function iF(e){var t;let n=Qy((t=e.interfaces)!==null&&t!==void 0?t:[]);return Array.isArray(n)||(0,ur.devAssert)(!1,`${e.name} interfaces must be an Array or a function which returns an Array.`),n}function aF(e){let t=Yy(e.fields);return Vc(t)||(0,ur.devAssert)(!1,`${e.name} fields must be an object with field names as keys or a function which returns such an object.`),(0,gm.mapValue)(t,(n,r)=>{var i;Vc(n)||(0,ur.devAssert)(!1,`${e.name}.${r} field config must be an object.`),n.resolve==null||typeof n.resolve=="function"||(0,ur.devAssert)(!1,`${e.name}.${r} field resolver must be a function if provided, but got: ${(0,un.inspect)(n.resolve)}.`);let a=(i=n.args)!==null&&i!==void 0?i:{};return Vc(a)||(0,ur.devAssert)(!1,`${e.name}.${r} args must be an object with argument names as keys.`),{name:(0,ba.assertName)(r),description:n.description,type:n.type,args:sF(a),resolve:n.resolve,subscribe:n.subscribe,deprecationReason:n.deprecationReason,extensions:(0,Da.toObjMap)(n.extensions),astNode:n.astNode}})}function sF(e){return Object.entries(e).map(([t,n])=>({name:(0,ba.assertName)(t),description:n.description,type:n.type,defaultValue:n.defaultValue,deprecationReason:n.deprecationReason,extensions:(0,Da.toObjMap)(n.extensions),astNode:n.astNode}))}function Vc(e){return(0,mH.isObjectLike)(e)&&!Array.isArray(e)}function oF(e){return(0,gm.mapValue)(e,t=>({description:t.description,type:t.type,args:uF(t.args),resolve:t.resolve,subscribe:t.subscribe,deprecationReason:t.deprecationReason,extensions:t.extensions,astNode:t.astNode}))}function uF(e){return(0,ZR.keyValMap)(e,t=>t.name,t=>({description:t.description,type:t.type,defaultValue:t.defaultValue,deprecationReason:t.deprecationReason,extensions:t.extensions,astNode:t.astNode}))}function MH(e){return Ko(e.type)&&e.defaultValue===void 0}var Em=class{constructor(t){var n;this.name=(0,ba.assertName)(t.name),this.description=t.description,this.resolveType=t.resolveType,this.extensions=(0,Da.toObjMap)(t.extensions),this.astNode=t.astNode,this.extensionASTNodes=(n=t.extensionASTNodes)!==null&&n!==void 0?n:[],this._fields=aF.bind(void 0,t),this._interfaces=iF.bind(void 0,t),t.resolveType==null||typeof t.resolveType=="function"||(0,ur.devAssert)(!1,`${this.name} must provide "resolveType" as a function, but got: ${(0,un.inspect)(t.resolveType)}.`)}get[Symbol.toStringTag](){return"GraphQLInterfaceType"}getFields(){return typeof this._fields=="function"&&(this._fields=this._fields()),this._fields}getInterfaces(){return typeof this._interfaces=="function"&&(this._interfaces=this._interfaces()),this._interfaces}toConfig(){return{name:this.name,description:this.description,interfaces:this.getInterfaces(),fields:oF(this.getFields()),resolveType:this.resolveType,extensions:this.extensions,astNode:this.astNode,extensionASTNodes:this.extensionASTNodes}}toString(){return this.name}toJSON(){return this.toString()}};je.GraphQLInterfaceType=Em;var hm=class{constructor(t){var n;this.name=(0,ba.assertName)(t.name),this.description=t.description,this.resolveType=t.resolveType,this.extensions=(0,Da.toObjMap)(t.extensions),this.astNode=t.astNode,this.extensionASTNodes=(n=t.extensionASTNodes)!==null&&n!==void 0?n:[],this._types=xH.bind(void 0,t),t.resolveType==null||typeof t.resolveType=="function"||(0,ur.devAssert)(!1,`${this.name} must provide "resolveType" as a function, but got: ${(0,un.inspect)(t.resolveType)}.`)}get[Symbol.toStringTag](){return"GraphQLUnionType"}getTypes(){return typeof this._types=="function"&&(this._types=this._types()),this._types}toConfig(){return{name:this.name,description:this.description,types:this.getTypes(),resolveType:this.resolveType,extensions:this.extensions,astNode:this.astNode,extensionASTNodes:this.extensionASTNodes}}toString(){return this.name}toJSON(){return this.toString()}};je.GraphQLUnionType=hm;function xH(e){let t=Qy(e.types);return Array.isArray(t)||(0,ur.devAssert)(!1,`Must provide Array of types or a function which returns such an array for Union ${e.name}.`),t}var ym=class{constructor(t){var n;this.name=(0,ba.assertName)(t.name),this.description=t.description,this.extensions=(0,Da.toObjMap)(t.extensions),this.astNode=t.astNode,this.extensionASTNodes=(n=t.extensionASTNodes)!==null&&n!==void 0?n:[],this._values=typeof t.values=="function"?t.values:XR(this.name,t.values),this._valueLookup=null,this._nameLookup=null}get[Symbol.toStringTag](){return"GraphQLEnumType"}getValues(){return typeof this._values=="function"&&(this._values=XR(this.name,this._values())),this._values}getValue(t){return this._nameLookup===null&&(this._nameLookup=(0,NH.keyMap)(this.getValues(),n=>n.name)),this._nameLookup[t]}serialize(t){this._valueLookup===null&&(this._valueLookup=new Map(this.getValues().map(r=>[r.value,r])));let n=this._valueLookup.get(t);if(n===void 0)throw new yd.GraphQLError(`Enum "${this.name}" cannot represent value: ${(0,un.inspect)(t)}`);return n.name}parseValue(t){if(typeof t!="string"){let r=(0,un.inspect)(t);throw new yd.GraphQLError(`Enum "${this.name}" cannot represent non-string value: ${r}.`+pm(this,r))}let n=this.getValue(t);if(n==null)throw new yd.GraphQLError(`Value "${t}" does not exist in "${this.name}" enum.`+pm(this,t));return n.value}parseLiteral(t,n){if(t.kind!==EH.Kind.ENUM){let i=(0,WR.print)(t);throw new yd.GraphQLError(`Enum "${this.name}" cannot represent non-enum value: ${i}.`+pm(this,i),{nodes:t})}let r=this.getValue(t.value);if(r==null){let i=(0,WR.print)(t);throw new yd.GraphQLError(`Value "${i}" does not exist in "${this.name}" enum.`+pm(this,i),{nodes:t})}return r.value}toConfig(){let t=(0,ZR.keyValMap)(this.getValues(),n=>n.name,n=>({description:n.description,value:n.value,deprecationReason:n.deprecationReason,extensions:n.extensions,astNode:n.astNode}));return{name:this.name,description:this.description,values:t,extensions:this.extensions,astNode:this.astNode,extensionASTNodes:this.extensionASTNodes}}toString(){return this.name}toJSON(){return this.toString()}};je.GraphQLEnumType=ym;function pm(e,t){let n=e.getValues().map(i=>i.name),r=(0,TH.suggestionList)(t,n);return(0,fH.didYouMean)("the enum value",r)}function XR(e,t){return Vc(t)||(0,ur.devAssert)(!1,`${e} values must be an object with value names as keys.`),Object.entries(t).map(([n,r])=>(Vc(r)||(0,ur.devAssert)(!1,`${e}.${n} must refer to an object with a "value" key representing an internal value but got: ${(0,un.inspect)(r)}.`),{name:(0,ba.assertEnumValueName)(n),description:r.description,value:r.value!==void 0?r.value:n,deprecationReason:r.deprecationReason,extensions:(0,Da.toObjMap)(r.extensions),astNode:r.astNode}))}var Im=class{constructor(t){var n,r;this.name=(0,ba.assertName)(t.name),this.description=t.description,this.extensions=(0,Da.toObjMap)(t.extensions),this.astNode=t.astNode,this.extensionASTNodes=(n=t.extensionASTNodes)!==null&&n!==void 0?n:[],this.isOneOf=(r=t.isOneOf)!==null&&r!==void 0?r:!1,this._fields=qH.bind(void 0,t)}get[Symbol.toStringTag](){return"GraphQLInputObjectType"}getFields(){return typeof this._fields=="function"&&(this._fields=this._fields()),this._fields}toConfig(){let t=(0,gm.mapValue)(this.getFields(),n=>({description:n.description,type:n.type,defaultValue:n.defaultValue,deprecationReason:n.deprecationReason,extensions:n.extensions,astNode:n.astNode}));return{name:this.name,description:this.description,fields:t,extensions:this.extensions,astNode:this.astNode,extensionASTNodes:this.extensionASTNodes,isOneOf:this.isOneOf}}toString(){return this.name}toJSON(){return this.toString()}};je.GraphQLInputObjectType=Im;function qH(e){let t=Yy(e.fields);return Vc(t)||(0,ur.devAssert)(!1,`${e.name} fields must be an object with field names as keys or a function which returns such an object.`),(0,gm.mapValue)(t,(n,r)=>(!("resolve"in n)||(0,ur.devAssert)(!1,`${e.name}.${r} field has a resolve property, but Input Types cannot define resolvers.`),{name:(0,ba.assertName)(r),description:n.description,type:n.type,defaultValue:n.defaultValue,deprecationReason:n.deprecationReason,extensions:(0,Da.toObjMap)(n.extensions),astNode:n.astNode}))}function VH(e){return Ko(e.type)&&e.defaultValue===void 0}});var vd=w(_d=>{"use strict";f();N();m();Object.defineProperty(_d,"__esModule",{value:!0});_d.doTypesOverlap=jH;_d.isEqualType=Jy;_d.isTypeSubTypeOf=Sm;var gr=Ft();function Jy(e,t){return e===t?!0:(0,gr.isNonNullType)(e)&&(0,gr.isNonNullType)(t)||(0,gr.isListType)(e)&&(0,gr.isListType)(t)?Jy(e.ofType,t.ofType):!1}function Sm(e,t,n){return t===n?!0:(0,gr.isNonNullType)(n)?(0,gr.isNonNullType)(t)?Sm(e,t.ofType,n.ofType):!1:(0,gr.isNonNullType)(t)?Sm(e,t.ofType,n):(0,gr.isListType)(n)?(0,gr.isListType)(t)?Sm(e,t.ofType,n.ofType):!1:(0,gr.isListType)(t)?!1:(0,gr.isAbstractType)(n)&&((0,gr.isInterfaceType)(t)||(0,gr.isObjectType)(t))&&e.isSubType(n,t)}function jH(e,t,n){return t===n?!0:(0,gr.isAbstractType)(t)?(0,gr.isAbstractType)(n)?e.getPossibleTypes(t).some(r=>e.isSubType(n,r)):e.isSubType(t,n):(0,gr.isAbstractType)(n)?e.isSubType(n,t):!1}});var Aa=w(zn=>{"use strict";f();N();m();Object.defineProperty(zn,"__esModule",{value:!0});zn.GraphQLString=zn.GraphQLInt=zn.GraphQLID=zn.GraphQLFloat=zn.GraphQLBoolean=zn.GRAPHQL_MIN_INT=zn.GRAPHQL_MAX_INT=void 0;zn.isSpecifiedScalarType=KH;zn.specifiedScalarTypes=void 0;var Zi=Yt(),cF=Sa(),cr=He(),Bu=Rt(),Sd=li(),Od=Ft(),Om=2147483647;zn.GRAPHQL_MAX_INT=Om;var Dm=-2147483648;zn.GRAPHQL_MIN_INT=Dm;var lF=new Od.GraphQLScalarType({name:"Int",description:"The `Int` scalar type represents non-fractional signed whole numeric values. Int can represent values between -(2^31) and 2^31 - 1.",serialize(e){let t=Dd(e);if(typeof t=="boolean")return t?1:0;let n=t;if(typeof t=="string"&&t!==""&&(n=Number(t)),typeof n!="number"||!Number.isInteger(n))throw new cr.GraphQLError(`Int cannot represent non-integer value: ${(0,Zi.inspect)(t)}`);if(n>Om||nOm||eOm||te.name===t)}function Dd(e){if((0,cF.isObjectLike)(e)){if(typeof e.valueOf=="function"){let t=e.valueOf();if(!(0,cF.isObjectLike)(t))return t}if(typeof e.toJSON=="function")return e.toJSON()}return e}});var $r=w(qn=>{"use strict";f();N();m();Object.defineProperty(qn,"__esModule",{value:!0});qn.GraphQLSpecifiedByDirective=qn.GraphQLSkipDirective=qn.GraphQLOneOfDirective=qn.GraphQLIncludeDirective=qn.GraphQLDirective=qn.GraphQLDeprecatedDirective=qn.DEFAULT_DEPRECATION_REASON=void 0;qn.assertDirective=HH;qn.isDirective=EF;qn.isSpecifiedDirective=zH;qn.specifiedDirectives=void 0;var TF=Cr(),GH=Yt(),$H=fd(),QH=Sa(),YH=om(),Di=kc(),JH=hd(),bd=Ft(),bm=Aa();function EF(e){return(0,$H.instanceOf)(e,ds)}function HH(e){if(!EF(e))throw new Error(`Expected ${(0,GH.inspect)(e)} to be a GraphQL directive.`);return e}var ds=class{constructor(t){var n,r;this.name=(0,JH.assertName)(t.name),this.description=t.description,this.locations=t.locations,this.isRepeatable=(n=t.isRepeatable)!==null&&n!==void 0?n:!1,this.extensions=(0,YH.toObjMap)(t.extensions),this.astNode=t.astNode,Array.isArray(t.locations)||(0,TF.devAssert)(!1,`@${t.name} locations must be an Array.`);let i=(r=t.args)!==null&&r!==void 0?r:{};(0,QH.isObjectLike)(i)&&!Array.isArray(i)||(0,TF.devAssert)(!1,`@${t.name} args must be an object with argument names as keys.`),this.args=(0,bd.defineArguments)(i)}get[Symbol.toStringTag](){return"GraphQLDirective"}toConfig(){return{name:this.name,description:this.description,locations:this.locations,args:(0,bd.argsToArgsConfig)(this.args),isRepeatable:this.isRepeatable,extensions:this.extensions,astNode:this.astNode}}toString(){return"@"+this.name}toJSON(){return this.toString()}};qn.GraphQLDirective=ds;var hF=new ds({name:"include",description:"Directs the executor to include this field or fragment only when the `if` argument is true.",locations:[Di.DirectiveLocation.FIELD,Di.DirectiveLocation.FRAGMENT_SPREAD,Di.DirectiveLocation.INLINE_FRAGMENT],args:{if:{type:new bd.GraphQLNonNull(bm.GraphQLBoolean),description:"Included when true."}}});qn.GraphQLIncludeDirective=hF;var yF=new ds({name:"skip",description:"Directs the executor to skip this field or fragment when the `if` argument is true.",locations:[Di.DirectiveLocation.FIELD,Di.DirectiveLocation.FRAGMENT_SPREAD,Di.DirectiveLocation.INLINE_FRAGMENT],args:{if:{type:new bd.GraphQLNonNull(bm.GraphQLBoolean),description:"Skipped when true."}}});qn.GraphQLSkipDirective=yF;var IF="No longer supported";qn.DEFAULT_DEPRECATION_REASON=IF;var gF=new ds({name:"deprecated",description:"Marks an element of a GraphQL schema as no longer supported.",locations:[Di.DirectiveLocation.FIELD_DEFINITION,Di.DirectiveLocation.ARGUMENT_DEFINITION,Di.DirectiveLocation.INPUT_FIELD_DEFINITION,Di.DirectiveLocation.ENUM_VALUE],args:{reason:{type:bm.GraphQLString,description:"Explains why this element was deprecated, usually also including a suggestion for how to access supported similar data. Formatted using the Markdown syntax, as specified by [CommonMark](https://commonmark.org/).",defaultValue:IF}}});qn.GraphQLDeprecatedDirective=gF;var _F=new ds({name:"specifiedBy",description:"Exposes a URL that specifies the behavior of this scalar.",locations:[Di.DirectiveLocation.SCALAR],args:{url:{type:new bd.GraphQLNonNull(bm.GraphQLString),description:"The URL that specifies the behavior of this scalar."}}});qn.GraphQLSpecifiedByDirective=_F;var vF=new ds({name:"oneOf",description:"Indicates exactly one field must be supplied and this field must not be `null`.",locations:[Di.DirectiveLocation.INPUT_OBJECT],args:{}});qn.GraphQLOneOfDirective=vF;var SF=Object.freeze([hF,yF,gF,_F,vF]);qn.specifiedDirectives=SF;function zH(e){return SF.some(({name:t})=>t===e.name)}});var Am=w(Hy=>{"use strict";f();N();m();Object.defineProperty(Hy,"__esModule",{value:!0});Hy.isIterableObject=WH;function WH(e){return typeof e=="object"&&typeof(e==null?void 0:e[Symbol.iterator])=="function"}});var Fd=w(zy=>{"use strict";f();N();m();Object.defineProperty(zy,"__esModule",{value:!0});zy.astFromValue=Rd;var OF=Yt(),XH=Ir(),ZH=Am(),e3=Sa(),bi=Rt(),Ad=Ft(),t3=Aa();function Rd(e,t){if((0,Ad.isNonNullType)(t)){let n=Rd(e,t.ofType);return(n==null?void 0:n.kind)===bi.Kind.NULL?null:n}if(e===null)return{kind:bi.Kind.NULL};if(e===void 0)return null;if((0,Ad.isListType)(t)){let n=t.ofType;if((0,ZH.isIterableObject)(e)){let r=[];for(let i of e){let a=Rd(i,n);a!=null&&r.push(a)}return{kind:bi.Kind.LIST,values:r}}return Rd(e,n)}if((0,Ad.isInputObjectType)(t)){if(!(0,e3.isObjectLike)(e))return null;let n=[];for(let r of Object.values(t.getFields())){let i=Rd(e[r.name],r.type);i&&n.push({kind:bi.Kind.OBJECT_FIELD,name:{kind:bi.Kind.NAME,value:r.name},value:i})}return{kind:bi.Kind.OBJECT,fields:n}}if((0,Ad.isLeafType)(t)){let n=t.serialize(e);if(n==null)return null;if(typeof n=="boolean")return{kind:bi.Kind.BOOLEAN,value:n};if(typeof n=="number"&&Number.isFinite(n)){let r=String(n);return DF.test(r)?{kind:bi.Kind.INT,value:r}:{kind:bi.Kind.FLOAT,value:r}}if(typeof n=="string")return(0,Ad.isEnumType)(t)?{kind:bi.Kind.ENUM,value:n}:t===t3.GraphQLID&&DF.test(n)?{kind:bi.Kind.INT,value:n}:{kind:bi.Kind.STRING,value:n};throw new TypeError(`Cannot convert value to AST: ${(0,OF.inspect)(n)}.`)}(0,XH.invariant)(!1,"Unexpected input type: "+(0,OF.inspect)(t))}var DF=/^-?(?:0|[1-9][0-9]*)$/});var Ri=w(Jt=>{"use strict";f();N();m();Object.defineProperty(Jt,"__esModule",{value:!0});Jt.introspectionTypes=Jt.__TypeKind=Jt.__Type=Jt.__Schema=Jt.__InputValue=Jt.__Field=Jt.__EnumValue=Jt.__DirectiveLocation=Jt.__Directive=Jt.TypeNameMetaFieldDef=Jt.TypeMetaFieldDef=Jt.TypeKind=Jt.SchemaMetaFieldDef=void 0;Jt.isIntrospectionType=c3;var n3=Yt(),r3=Ir(),Wn=kc(),i3=li(),a3=Fd(),Ue=Ft(),rn=Aa(),Wy=new Ue.GraphQLObjectType({name:"__Schema",description:"A GraphQL Schema defines the capabilities of a GraphQL server. It exposes all available types and directives on the server, as well as the entry points for query, mutation, and subscription operations.",fields:()=>({description:{type:rn.GraphQLString,resolve:e=>e.description},types:{description:"A list of all types supported by this server.",type:new Ue.GraphQLNonNull(new Ue.GraphQLList(new Ue.GraphQLNonNull(Ai))),resolve(e){return Object.values(e.getTypeMap())}},queryType:{description:"The type that query operations will be rooted at.",type:new Ue.GraphQLNonNull(Ai),resolve:e=>e.getQueryType()},mutationType:{description:"If this server supports mutation, the type that mutation operations will be rooted at.",type:Ai,resolve:e=>e.getMutationType()},subscriptionType:{description:"If this server support subscription, the type that subscription operations will be rooted at.",type:Ai,resolve:e=>e.getSubscriptionType()},directives:{description:"A list of all directives supported by this server.",type:new Ue.GraphQLNonNull(new Ue.GraphQLList(new Ue.GraphQLNonNull(Xy))),resolve:e=>e.getDirectives()}})});Jt.__Schema=Wy;var Xy=new Ue.GraphQLObjectType({name:"__Directive",description:`A Directive provides a way to describe alternate runtime execution and type validation behavior in a GraphQL document. -In some cases, you need to provide options to alter GraphQL's execution behavior in ways field arguments will not suffice, such as conditionally including or skipping a field. Directives provide this by describing additional information to the executor.`,fields:()=>({name:{type:new Ue.GraphQLNonNull(rn.GraphQLString),resolve:e=>e.name},description:{type:rn.GraphQLString,resolve:e=>e.description},isRepeatable:{type:new Ue.GraphQLNonNull(rn.GraphQLBoolean),resolve:e=>e.isRepeatable},locations:{type:new Ue.GraphQLNonNull(new Ue.GraphQLList(new Ue.GraphQLNonNull(Xy))),resolve:e=>e.locations},args:{type:new Ue.GraphQLNonNull(new Ue.GraphQLList(new Ue.GraphQLNonNull(Fd))),args:{includeDeprecated:{type:rn.GraphQLBoolean,defaultValue:!1}},resolve(e,{includeDeprecated:t}){return t?e.args:e.args.filter(n=>n.deprecationReason==null)}}})});Jt.__Directive=Wy;var Xy=new Ue.GraphQLEnumType({name:"__DirectiveLocation",description:"A Directive can be adjacent to many parts of the GraphQL language, a __DirectiveLocation describes one such possible adjacencies.",values:{QUERY:{value:Wn.DirectiveLocation.QUERY,description:"Location adjacent to a query operation."},MUTATION:{value:Wn.DirectiveLocation.MUTATION,description:"Location adjacent to a mutation operation."},SUBSCRIPTION:{value:Wn.DirectiveLocation.SUBSCRIPTION,description:"Location adjacent to a subscription operation."},FIELD:{value:Wn.DirectiveLocation.FIELD,description:"Location adjacent to a field."},FRAGMENT_DEFINITION:{value:Wn.DirectiveLocation.FRAGMENT_DEFINITION,description:"Location adjacent to a fragment definition."},FRAGMENT_SPREAD:{value:Wn.DirectiveLocation.FRAGMENT_SPREAD,description:"Location adjacent to a fragment spread."},INLINE_FRAGMENT:{value:Wn.DirectiveLocation.INLINE_FRAGMENT,description:"Location adjacent to an inline fragment."},VARIABLE_DEFINITION:{value:Wn.DirectiveLocation.VARIABLE_DEFINITION,description:"Location adjacent to a variable definition."},SCHEMA:{value:Wn.DirectiveLocation.SCHEMA,description:"Location adjacent to a schema definition."},SCALAR:{value:Wn.DirectiveLocation.SCALAR,description:"Location adjacent to a scalar definition."},OBJECT:{value:Wn.DirectiveLocation.OBJECT,description:"Location adjacent to an object type definition."},FIELD_DEFINITION:{value:Wn.DirectiveLocation.FIELD_DEFINITION,description:"Location adjacent to a field definition."},ARGUMENT_DEFINITION:{value:Wn.DirectiveLocation.ARGUMENT_DEFINITION,description:"Location adjacent to an argument definition."},INTERFACE:{value:Wn.DirectiveLocation.INTERFACE,description:"Location adjacent to an interface definition."},UNION:{value:Wn.DirectiveLocation.UNION,description:"Location adjacent to a union definition."},ENUM:{value:Wn.DirectiveLocation.ENUM,description:"Location adjacent to an enum definition."},ENUM_VALUE:{value:Wn.DirectiveLocation.ENUM_VALUE,description:"Location adjacent to an enum value definition."},INPUT_OBJECT:{value:Wn.DirectiveLocation.INPUT_OBJECT,description:"Location adjacent to an input object type definition."},INPUT_FIELD_DEFINITION:{value:Wn.DirectiveLocation.INPUT_FIELD_DEFINITION,description:"Location adjacent to an input object field definition."}}});Jt.__DirectiveLocation=Xy;var Di=new Ue.GraphQLObjectType({name:"__Type",description:"The fundamental unit of any GraphQL Schema is the type. There are many kinds of types in GraphQL as represented by the `__TypeKind` enum.\n\nDepending on the kind of a type, certain fields describe information about that type. Scalar types provide no information beyond a name, description and optional `specifiedByURL`, while Enum types provide their values. Object and Interface types provide the fields they describe. Abstract types, Union and Interface, provide the Object types possible at runtime. List and NonNull types compose other types.",fields:()=>({kind:{type:new Ue.GraphQLNonNull(tI),resolve(e){if((0,Ue.isScalarType)(e))return Xn.SCALAR;if((0,Ue.isObjectType)(e))return Xn.OBJECT;if((0,Ue.isInterfaceType)(e))return Xn.INTERFACE;if((0,Ue.isUnionType)(e))return Xn.UNION;if((0,Ue.isEnumType)(e))return Xn.ENUM;if((0,Ue.isInputObjectType)(e))return Xn.INPUT_OBJECT;if((0,Ue.isListType)(e))return Xn.LIST;if((0,Ue.isNonNullType)(e))return Xn.NON_NULL;(0,tH.invariant)(!1,`Unexpected type: "${(0,eH.inspect)(e)}".`)}},name:{type:rn.GraphQLString,resolve:e=>"name"in e?e.name:void 0},description:{type:rn.GraphQLString,resolve:e=>"description"in e?e.description:void 0},specifiedByURL:{type:rn.GraphQLString,resolve:e=>"specifiedByURL"in e?e.specifiedByURL:void 0},fields:{type:new Ue.GraphQLList(new Ue.GraphQLNonNull(Zy)),args:{includeDeprecated:{type:rn.GraphQLBoolean,defaultValue:!1}},resolve(e,{includeDeprecated:t}){if((0,Ue.isObjectType)(e)||(0,Ue.isInterfaceType)(e)){let n=Object.values(e.getFields());return t?n:n.filter(r=>r.deprecationReason==null)}}},interfaces:{type:new Ue.GraphQLList(new Ue.GraphQLNonNull(Di)),resolve(e){if((0,Ue.isObjectType)(e)||(0,Ue.isInterfaceType)(e))return e.getInterfaces()}},possibleTypes:{type:new Ue.GraphQLList(new Ue.GraphQLNonNull(Di)),resolve(e,t,n,{schema:r}){if((0,Ue.isAbstractType)(e))return r.getPossibleTypes(e)}},enumValues:{type:new Ue.GraphQLList(new Ue.GraphQLNonNull(eI)),args:{includeDeprecated:{type:rn.GraphQLBoolean,defaultValue:!1}},resolve(e,{includeDeprecated:t}){if((0,Ue.isEnumType)(e)){let n=e.getValues();return t?n:n.filter(r=>r.deprecationReason==null)}}},inputFields:{type:new Ue.GraphQLList(new Ue.GraphQLNonNull(Fd)),args:{includeDeprecated:{type:rn.GraphQLBoolean,defaultValue:!1}},resolve(e,{includeDeprecated:t}){if((0,Ue.isInputObjectType)(e)){let n=Object.values(e.getFields());return t?n:n.filter(r=>r.deprecationReason==null)}}},ofType:{type:Di,resolve:e=>"ofType"in e?e.ofType:void 0},isOneOf:{type:rn.GraphQLBoolean,resolve:e=>{if((0,Ue.isInputObjectType)(e))return e.isOneOf}}})});Jt.__Type=Di;var Zy=new Ue.GraphQLObjectType({name:"__Field",description:"Object and Interface types are described by a list of Fields, each of which has a name, potentially a list of arguments, and a return type.",fields:()=>({name:{type:new Ue.GraphQLNonNull(rn.GraphQLString),resolve:e=>e.name},description:{type:rn.GraphQLString,resolve:e=>e.description},args:{type:new Ue.GraphQLNonNull(new Ue.GraphQLList(new Ue.GraphQLNonNull(Fd))),args:{includeDeprecated:{type:rn.GraphQLBoolean,defaultValue:!1}},resolve(e,{includeDeprecated:t}){return t?e.args:e.args.filter(n=>n.deprecationReason==null)}},type:{type:new Ue.GraphQLNonNull(Di),resolve:e=>e.type},isDeprecated:{type:new Ue.GraphQLNonNull(rn.GraphQLBoolean),resolve:e=>e.deprecationReason!=null},deprecationReason:{type:rn.GraphQLString,resolve:e=>e.deprecationReason}})});Jt.__Field=Zy;var Fd=new Ue.GraphQLObjectType({name:"__InputValue",description:"Arguments provided to Fields or Directives and the input fields of an InputObject are represented as Input Values which describe their type and optionally a default value.",fields:()=>({name:{type:new Ue.GraphQLNonNull(rn.GraphQLString),resolve:e=>e.name},description:{type:rn.GraphQLString,resolve:e=>e.description},type:{type:new Ue.GraphQLNonNull(Di),resolve:e=>e.type},defaultValue:{type:rn.GraphQLString,description:"A GraphQL-formatted string representing the default value for this input value.",resolve(e){let{type:t,defaultValue:n}=e,r=(0,rH.astFromValue)(n,t);return r?(0,nH.print)(r):null}},isDeprecated:{type:new Ue.GraphQLNonNull(rn.GraphQLBoolean),resolve:e=>e.deprecationReason!=null},deprecationReason:{type:rn.GraphQLString,resolve:e=>e.deprecationReason}})});Jt.__InputValue=Fd;var eI=new Ue.GraphQLObjectType({name:"__EnumValue",description:"One possible value for a given Enum. Enum values are unique values, not a placeholder for a string or numeric value. However an Enum value is returned in a JSON response as a string.",fields:()=>({name:{type:new Ue.GraphQLNonNull(rn.GraphQLString),resolve:e=>e.name},description:{type:rn.GraphQLString,resolve:e=>e.description},isDeprecated:{type:new Ue.GraphQLNonNull(rn.GraphQLBoolean),resolve:e=>e.deprecationReason!=null},deprecationReason:{type:rn.GraphQLString,resolve:e=>e.deprecationReason}})});Jt.__EnumValue=eI;var Xn;Jt.TypeKind=Xn;(function(e){e.SCALAR="SCALAR",e.OBJECT="OBJECT",e.INTERFACE="INTERFACE",e.UNION="UNION",e.ENUM="ENUM",e.INPUT_OBJECT="INPUT_OBJECT",e.LIST="LIST",e.NON_NULL="NON_NULL"})(Xn||(Jt.TypeKind=Xn={}));var tI=new Ue.GraphQLEnumType({name:"__TypeKind",description:"An enum describing what kind of type a given `__Type` is.",values:{SCALAR:{value:Xn.SCALAR,description:"Indicates this type is a scalar."},OBJECT:{value:Xn.OBJECT,description:"Indicates this type is an object. `fields` and `interfaces` are valid fields."},INTERFACE:{value:Xn.INTERFACE,description:"Indicates this type is an interface. `fields`, `interfaces`, and `possibleTypes` are valid fields."},UNION:{value:Xn.UNION,description:"Indicates this type is a union. `possibleTypes` is a valid field."},ENUM:{value:Xn.ENUM,description:"Indicates this type is an enum. `enumValues` is a valid field."},INPUT_OBJECT:{value:Xn.INPUT_OBJECT,description:"Indicates this type is an input object. `inputFields` is a valid field."},LIST:{value:Xn.LIST,description:"Indicates this type is a list. `ofType` is a valid field."},NON_NULL:{value:Xn.NON_NULL,description:"Indicates this type is a non-null. `ofType` is a valid field."}}});Jt.__TypeKind=tI;var iH={name:"__schema",type:new Ue.GraphQLNonNull(zy),description:"Access the current type schema of this server.",args:[],resolve:(e,t,n,{schema:r})=>r,deprecationReason:void 0,extensions:Object.create(null),astNode:void 0};Jt.SchemaMetaFieldDef=iH;var aH={name:"__type",type:Di,description:"Request the type information of a single type.",args:[{name:"name",description:void 0,type:new Ue.GraphQLNonNull(rn.GraphQLString),defaultValue:void 0,deprecationReason:void 0,extensions:Object.create(null),astNode:void 0}],resolve:(e,{name:t},n,{schema:r})=>r.getType(t),deprecationReason:void 0,extensions:Object.create(null),astNode:void 0};Jt.TypeMetaFieldDef=aH;var sH={name:"__typename",type:new Ue.GraphQLNonNull(rn.GraphQLString),description:"The name of the current Object type at runtime.",args:[],resolve:(e,t,n,{parentType:r})=>r.name,deprecationReason:void 0,extensions:Object.create(null),astNode:void 0};Jt.TypeNameMetaFieldDef=sH;var OF=Object.freeze([zy,Wy,Xy,Di,Zy,Fd,eI,tI]);Jt.introspectionTypes=OF;function oH(e){return OF.some(({name:t})=>e.name===t)}});var Cu=P(jc=>{"use strict";f();T();m();Object.defineProperty(jc,"__esModule",{value:!0});jc.GraphQLSchema=void 0;jc.assertSchema=pH;jc.isSchema=DF;var Am=Cr(),rI=Yt(),uH=pd(),cH=Sa(),lH=sm(),nI=Oa(),ea=Ft(),bF=$r(),dH=Ai();function DF(e){return(0,uH.instanceOf)(e,Rm)}function pH(e){if(!DF(e))throw new Error(`Expected ${(0,rI.inspect)(e)} to be a GraphQL schema.`);return e}var Rm=class{constructor(t){var n,r;this.__validationErrors=t.assumeValid===!0?[]:void 0,(0,cH.isObjectLike)(t)||(0,Am.devAssert)(!1,"Must provide configuration object."),!t.types||Array.isArray(t.types)||(0,Am.devAssert)(!1,`"types" must be Array if provided but got: ${(0,rI.inspect)(t.types)}.`),!t.directives||Array.isArray(t.directives)||(0,Am.devAssert)(!1,`"directives" must be Array if provided but got: ${(0,rI.inspect)(t.directives)}.`),this.description=t.description,this.extensions=(0,lH.toObjMap)(t.extensions),this.astNode=t.astNode,this.extensionASTNodes=(n=t.extensionASTNodes)!==null&&n!==void 0?n:[],this._queryType=t.query,this._mutationType=t.mutation,this._subscriptionType=t.subscription,this._directives=(r=t.directives)!==null&&r!==void 0?r:bF.specifiedDirectives;let i=new Set(t.types);if(t.types!=null)for(let a of t.types)i.delete(a),ta(a,i);this._queryType!=null&&ta(this._queryType,i),this._mutationType!=null&&ta(this._mutationType,i),this._subscriptionType!=null&&ta(this._subscriptionType,i);for(let a of this._directives)if((0,bF.isDirective)(a))for(let o of a.args)ta(o.type,i);ta(dH.__Schema,i),this._typeMap=Object.create(null),this._subTypeMap=Object.create(null),this._implementationsMap=Object.create(null);for(let a of i){if(a==null)continue;let o=a.name;if(o||(0,Am.devAssert)(!1,"One of the provided types for building the Schema is missing a name."),this._typeMap[o]!==void 0)throw new Error(`Schema must contain uniquely named types but contains multiple types named "${o}".`);if(this._typeMap[o]=a,(0,ea.isInterfaceType)(a)){for(let c of a.getInterfaces())if((0,ea.isInterfaceType)(c)){let l=this._implementationsMap[c.name];l===void 0&&(l=this._implementationsMap[c.name]={objects:[],interfaces:[]}),l.interfaces.push(a)}}else if((0,ea.isObjectType)(a)){for(let c of a.getInterfaces())if((0,ea.isInterfaceType)(c)){let l=this._implementationsMap[c.name];l===void 0&&(l=this._implementationsMap[c.name]={objects:[],interfaces:[]}),l.objects.push(a)}}}}get[Symbol.toStringTag](){return"GraphQLSchema"}getQueryType(){return this._queryType}getMutationType(){return this._mutationType}getSubscriptionType(){return this._subscriptionType}getRootType(t){switch(t){case nI.OperationTypeNode.QUERY:return this.getQueryType();case nI.OperationTypeNode.MUTATION:return this.getMutationType();case nI.OperationTypeNode.SUBSCRIPTION:return this.getSubscriptionType()}}getTypeMap(){return this._typeMap}getType(t){return this.getTypeMap()[t]}getPossibleTypes(t){return(0,ea.isUnionType)(t)?t.getTypes():this.getImplementations(t).objects}getImplementations(t){let n=this._implementationsMap[t.name];return n!=null?n:{objects:[],interfaces:[]}}isSubType(t,n){let r=this._subTypeMap[t.name];if(r===void 0){if(r=Object.create(null),(0,ea.isUnionType)(t))for(let i of t.getTypes())r[i.name]=!0;else{let i=this.getImplementations(t);for(let a of i.objects)r[a.name]=!0;for(let a of i.interfaces)r[a.name]=!0}this._subTypeMap[t.name]=r}return r[n.name]!==void 0}getDirectives(){return this._directives}getDirective(t){return this.getDirectives().find(n=>n.name===t)}toConfig(){return{description:this.description,query:this.getQueryType(),mutation:this.getMutationType(),subscription:this.getSubscriptionType(),types:Object.values(this.getTypeMap()),directives:this.getDirectives(),extensions:this.extensions,astNode:this.astNode,extensionASTNodes:this.extensionASTNodes,assumeValid:this.__validationErrors!==void 0}}};jc.GraphQLSchema=Rm;function ta(e,t){let n=(0,ea.getNamedType)(e);if(!t.has(n)){if(t.add(n),(0,ea.isUnionType)(n))for(let r of n.getTypes())ta(r,t);else if((0,ea.isObjectType)(n)||(0,ea.isInterfaceType)(n)){for(let r of n.getInterfaces())ta(r,t);for(let r of Object.values(n.getFields())){ta(r.type,t);for(let i of r.args)ta(i.type,t)}}else if((0,ea.isInputObjectType)(n))for(let r of Object.values(n.getFields()))ta(r.type,t)}return t}});var wd=P(Fm=>{"use strict";f();T();m();Object.defineProperty(Fm,"__esModule",{value:!0});Fm.assertValidSchema=NH;Fm.validateSchema=LF;var _r=Yt(),fH=Je(),iI=Oa(),AF=_d(),Fn=Ft(),wF=$r(),mH=Ai(),TH=Cu();function LF(e){if((0,TH.assertSchema)(e),e.__validationErrors)return e.__validationErrors;let t=new sI(e);hH(t),EH(t),yH(t);let n=t.getErrors();return e.__validationErrors=n,n}function NH(e){let t=LF(e);if(t.length!==0)throw new Error(t.map(n=>n.message).join(` +In some cases, you need to provide options to alter GraphQL's execution behavior in ways field arguments will not suffice, such as conditionally including or skipping a field. Directives provide this by describing additional information to the executor.`,fields:()=>({name:{type:new Ue.GraphQLNonNull(rn.GraphQLString),resolve:e=>e.name},description:{type:rn.GraphQLString,resolve:e=>e.description},isRepeatable:{type:new Ue.GraphQLNonNull(rn.GraphQLBoolean),resolve:e=>e.isRepeatable},locations:{type:new Ue.GraphQLNonNull(new Ue.GraphQLList(new Ue.GraphQLNonNull(Zy))),resolve:e=>e.locations},args:{type:new Ue.GraphQLNonNull(new Ue.GraphQLList(new Ue.GraphQLNonNull(Pd))),args:{includeDeprecated:{type:rn.GraphQLBoolean,defaultValue:!1}},resolve(e,{includeDeprecated:t}){return t?e.args:e.args.filter(n=>n.deprecationReason==null)}}})});Jt.__Directive=Xy;var Zy=new Ue.GraphQLEnumType({name:"__DirectiveLocation",description:"A Directive can be adjacent to many parts of the GraphQL language, a __DirectiveLocation describes one such possible adjacencies.",values:{QUERY:{value:Wn.DirectiveLocation.QUERY,description:"Location adjacent to a query operation."},MUTATION:{value:Wn.DirectiveLocation.MUTATION,description:"Location adjacent to a mutation operation."},SUBSCRIPTION:{value:Wn.DirectiveLocation.SUBSCRIPTION,description:"Location adjacent to a subscription operation."},FIELD:{value:Wn.DirectiveLocation.FIELD,description:"Location adjacent to a field."},FRAGMENT_DEFINITION:{value:Wn.DirectiveLocation.FRAGMENT_DEFINITION,description:"Location adjacent to a fragment definition."},FRAGMENT_SPREAD:{value:Wn.DirectiveLocation.FRAGMENT_SPREAD,description:"Location adjacent to a fragment spread."},INLINE_FRAGMENT:{value:Wn.DirectiveLocation.INLINE_FRAGMENT,description:"Location adjacent to an inline fragment."},VARIABLE_DEFINITION:{value:Wn.DirectiveLocation.VARIABLE_DEFINITION,description:"Location adjacent to a variable definition."},SCHEMA:{value:Wn.DirectiveLocation.SCHEMA,description:"Location adjacent to a schema definition."},SCALAR:{value:Wn.DirectiveLocation.SCALAR,description:"Location adjacent to a scalar definition."},OBJECT:{value:Wn.DirectiveLocation.OBJECT,description:"Location adjacent to an object type definition."},FIELD_DEFINITION:{value:Wn.DirectiveLocation.FIELD_DEFINITION,description:"Location adjacent to a field definition."},ARGUMENT_DEFINITION:{value:Wn.DirectiveLocation.ARGUMENT_DEFINITION,description:"Location adjacent to an argument definition."},INTERFACE:{value:Wn.DirectiveLocation.INTERFACE,description:"Location adjacent to an interface definition."},UNION:{value:Wn.DirectiveLocation.UNION,description:"Location adjacent to a union definition."},ENUM:{value:Wn.DirectiveLocation.ENUM,description:"Location adjacent to an enum definition."},ENUM_VALUE:{value:Wn.DirectiveLocation.ENUM_VALUE,description:"Location adjacent to an enum value definition."},INPUT_OBJECT:{value:Wn.DirectiveLocation.INPUT_OBJECT,description:"Location adjacent to an input object type definition."},INPUT_FIELD_DEFINITION:{value:Wn.DirectiveLocation.INPUT_FIELD_DEFINITION,description:"Location adjacent to an input object field definition."}}});Jt.__DirectiveLocation=Zy;var Ai=new Ue.GraphQLObjectType({name:"__Type",description:"The fundamental unit of any GraphQL Schema is the type. There are many kinds of types in GraphQL as represented by the `__TypeKind` enum.\n\nDepending on the kind of a type, certain fields describe information about that type. Scalar types provide no information beyond a name, description and optional `specifiedByURL`, while Enum types provide their values. Object and Interface types provide the fields they describe. Abstract types, Union and Interface, provide the Object types possible at runtime. List and NonNull types compose other types.",fields:()=>({kind:{type:new Ue.GraphQLNonNull(nI),resolve(e){if((0,Ue.isScalarType)(e))return Xn.SCALAR;if((0,Ue.isObjectType)(e))return Xn.OBJECT;if((0,Ue.isInterfaceType)(e))return Xn.INTERFACE;if((0,Ue.isUnionType)(e))return Xn.UNION;if((0,Ue.isEnumType)(e))return Xn.ENUM;if((0,Ue.isInputObjectType)(e))return Xn.INPUT_OBJECT;if((0,Ue.isListType)(e))return Xn.LIST;if((0,Ue.isNonNullType)(e))return Xn.NON_NULL;(0,r3.invariant)(!1,`Unexpected type: "${(0,n3.inspect)(e)}".`)}},name:{type:rn.GraphQLString,resolve:e=>"name"in e?e.name:void 0},description:{type:rn.GraphQLString,resolve:e=>"description"in e?e.description:void 0},specifiedByURL:{type:rn.GraphQLString,resolve:e=>"specifiedByURL"in e?e.specifiedByURL:void 0},fields:{type:new Ue.GraphQLList(new Ue.GraphQLNonNull(eI)),args:{includeDeprecated:{type:rn.GraphQLBoolean,defaultValue:!1}},resolve(e,{includeDeprecated:t}){if((0,Ue.isObjectType)(e)||(0,Ue.isInterfaceType)(e)){let n=Object.values(e.getFields());return t?n:n.filter(r=>r.deprecationReason==null)}}},interfaces:{type:new Ue.GraphQLList(new Ue.GraphQLNonNull(Ai)),resolve(e){if((0,Ue.isObjectType)(e)||(0,Ue.isInterfaceType)(e))return e.getInterfaces()}},possibleTypes:{type:new Ue.GraphQLList(new Ue.GraphQLNonNull(Ai)),resolve(e,t,n,{schema:r}){if((0,Ue.isAbstractType)(e))return r.getPossibleTypes(e)}},enumValues:{type:new Ue.GraphQLList(new Ue.GraphQLNonNull(tI)),args:{includeDeprecated:{type:rn.GraphQLBoolean,defaultValue:!1}},resolve(e,{includeDeprecated:t}){if((0,Ue.isEnumType)(e)){let n=e.getValues();return t?n:n.filter(r=>r.deprecationReason==null)}}},inputFields:{type:new Ue.GraphQLList(new Ue.GraphQLNonNull(Pd)),args:{includeDeprecated:{type:rn.GraphQLBoolean,defaultValue:!1}},resolve(e,{includeDeprecated:t}){if((0,Ue.isInputObjectType)(e)){let n=Object.values(e.getFields());return t?n:n.filter(r=>r.deprecationReason==null)}}},ofType:{type:Ai,resolve:e=>"ofType"in e?e.ofType:void 0},isOneOf:{type:rn.GraphQLBoolean,resolve:e=>{if((0,Ue.isInputObjectType)(e))return e.isOneOf}}})});Jt.__Type=Ai;var eI=new Ue.GraphQLObjectType({name:"__Field",description:"Object and Interface types are described by a list of Fields, each of which has a name, potentially a list of arguments, and a return type.",fields:()=>({name:{type:new Ue.GraphQLNonNull(rn.GraphQLString),resolve:e=>e.name},description:{type:rn.GraphQLString,resolve:e=>e.description},args:{type:new Ue.GraphQLNonNull(new Ue.GraphQLList(new Ue.GraphQLNonNull(Pd))),args:{includeDeprecated:{type:rn.GraphQLBoolean,defaultValue:!1}},resolve(e,{includeDeprecated:t}){return t?e.args:e.args.filter(n=>n.deprecationReason==null)}},type:{type:new Ue.GraphQLNonNull(Ai),resolve:e=>e.type},isDeprecated:{type:new Ue.GraphQLNonNull(rn.GraphQLBoolean),resolve:e=>e.deprecationReason!=null},deprecationReason:{type:rn.GraphQLString,resolve:e=>e.deprecationReason}})});Jt.__Field=eI;var Pd=new Ue.GraphQLObjectType({name:"__InputValue",description:"Arguments provided to Fields or Directives and the input fields of an InputObject are represented as Input Values which describe their type and optionally a default value.",fields:()=>({name:{type:new Ue.GraphQLNonNull(rn.GraphQLString),resolve:e=>e.name},description:{type:rn.GraphQLString,resolve:e=>e.description},type:{type:new Ue.GraphQLNonNull(Ai),resolve:e=>e.type},defaultValue:{type:rn.GraphQLString,description:"A GraphQL-formatted string representing the default value for this input value.",resolve(e){let{type:t,defaultValue:n}=e,r=(0,a3.astFromValue)(n,t);return r?(0,i3.print)(r):null}},isDeprecated:{type:new Ue.GraphQLNonNull(rn.GraphQLBoolean),resolve:e=>e.deprecationReason!=null},deprecationReason:{type:rn.GraphQLString,resolve:e=>e.deprecationReason}})});Jt.__InputValue=Pd;var tI=new Ue.GraphQLObjectType({name:"__EnumValue",description:"One possible value for a given Enum. Enum values are unique values, not a placeholder for a string or numeric value. However an Enum value is returned in a JSON response as a string.",fields:()=>({name:{type:new Ue.GraphQLNonNull(rn.GraphQLString),resolve:e=>e.name},description:{type:rn.GraphQLString,resolve:e=>e.description},isDeprecated:{type:new Ue.GraphQLNonNull(rn.GraphQLBoolean),resolve:e=>e.deprecationReason!=null},deprecationReason:{type:rn.GraphQLString,resolve:e=>e.deprecationReason}})});Jt.__EnumValue=tI;var Xn;Jt.TypeKind=Xn;(function(e){e.SCALAR="SCALAR",e.OBJECT="OBJECT",e.INTERFACE="INTERFACE",e.UNION="UNION",e.ENUM="ENUM",e.INPUT_OBJECT="INPUT_OBJECT",e.LIST="LIST",e.NON_NULL="NON_NULL"})(Xn||(Jt.TypeKind=Xn={}));var nI=new Ue.GraphQLEnumType({name:"__TypeKind",description:"An enum describing what kind of type a given `__Type` is.",values:{SCALAR:{value:Xn.SCALAR,description:"Indicates this type is a scalar."},OBJECT:{value:Xn.OBJECT,description:"Indicates this type is an object. `fields` and `interfaces` are valid fields."},INTERFACE:{value:Xn.INTERFACE,description:"Indicates this type is an interface. `fields`, `interfaces`, and `possibleTypes` are valid fields."},UNION:{value:Xn.UNION,description:"Indicates this type is a union. `possibleTypes` is a valid field."},ENUM:{value:Xn.ENUM,description:"Indicates this type is an enum. `enumValues` is a valid field."},INPUT_OBJECT:{value:Xn.INPUT_OBJECT,description:"Indicates this type is an input object. `inputFields` is a valid field."},LIST:{value:Xn.LIST,description:"Indicates this type is a list. `ofType` is a valid field."},NON_NULL:{value:Xn.NON_NULL,description:"Indicates this type is a non-null. `ofType` is a valid field."}}});Jt.__TypeKind=nI;var s3={name:"__schema",type:new Ue.GraphQLNonNull(Wy),description:"Access the current type schema of this server.",args:[],resolve:(e,t,n,{schema:r})=>r,deprecationReason:void 0,extensions:Object.create(null),astNode:void 0};Jt.SchemaMetaFieldDef=s3;var o3={name:"__type",type:Ai,description:"Request the type information of a single type.",args:[{name:"name",description:void 0,type:new Ue.GraphQLNonNull(rn.GraphQLString),defaultValue:void 0,deprecationReason:void 0,extensions:Object.create(null),astNode:void 0}],resolve:(e,{name:t},n,{schema:r})=>r.getType(t),deprecationReason:void 0,extensions:Object.create(null),astNode:void 0};Jt.TypeMetaFieldDef=o3;var u3={name:"__typename",type:new Ue.GraphQLNonNull(rn.GraphQLString),description:"The name of the current Object type at runtime.",args:[],resolve:(e,t,n,{parentType:r})=>r.name,deprecationReason:void 0,extensions:Object.create(null),astNode:void 0};Jt.TypeNameMetaFieldDef=u3;var bF=Object.freeze([Wy,Xy,Zy,Ai,eI,Pd,tI,nI]);Jt.introspectionTypes=bF;function c3(e){return bF.some(({name:t})=>e.name===t)}});var Uu=w(Kc=>{"use strict";f();N();m();Object.defineProperty(Kc,"__esModule",{value:!0});Kc.GraphQLSchema=void 0;Kc.assertSchema=m3;Kc.isSchema=RF;var Rm=Cr(),iI=Yt(),l3=fd(),d3=Sa(),p3=om(),rI=Oa(),ea=Ft(),AF=$r(),f3=Ri();function RF(e){return(0,l3.instanceOf)(e,Fm)}function m3(e){if(!RF(e))throw new Error(`Expected ${(0,iI.inspect)(e)} to be a GraphQL schema.`);return e}var Fm=class{constructor(t){var n,r;this.__validationErrors=t.assumeValid===!0?[]:void 0,(0,d3.isObjectLike)(t)||(0,Rm.devAssert)(!1,"Must provide configuration object."),!t.types||Array.isArray(t.types)||(0,Rm.devAssert)(!1,`"types" must be Array if provided but got: ${(0,iI.inspect)(t.types)}.`),!t.directives||Array.isArray(t.directives)||(0,Rm.devAssert)(!1,`"directives" must be Array if provided but got: ${(0,iI.inspect)(t.directives)}.`),this.description=t.description,this.extensions=(0,p3.toObjMap)(t.extensions),this.astNode=t.astNode,this.extensionASTNodes=(n=t.extensionASTNodes)!==null&&n!==void 0?n:[],this._queryType=t.query,this._mutationType=t.mutation,this._subscriptionType=t.subscription,this._directives=(r=t.directives)!==null&&r!==void 0?r:AF.specifiedDirectives;let i=new Set(t.types);if(t.types!=null)for(let a of t.types)i.delete(a),ta(a,i);this._queryType!=null&&ta(this._queryType,i),this._mutationType!=null&&ta(this._mutationType,i),this._subscriptionType!=null&&ta(this._subscriptionType,i);for(let a of this._directives)if((0,AF.isDirective)(a))for(let o of a.args)ta(o.type,i);ta(f3.__Schema,i),this._typeMap=Object.create(null),this._subTypeMap=Object.create(null),this._implementationsMap=Object.create(null);for(let a of i){if(a==null)continue;let o=a.name;if(o||(0,Rm.devAssert)(!1,"One of the provided types for building the Schema is missing a name."),this._typeMap[o]!==void 0)throw new Error(`Schema must contain uniquely named types but contains multiple types named "${o}".`);if(this._typeMap[o]=a,(0,ea.isInterfaceType)(a)){for(let c of a.getInterfaces())if((0,ea.isInterfaceType)(c)){let l=this._implementationsMap[c.name];l===void 0&&(l=this._implementationsMap[c.name]={objects:[],interfaces:[]}),l.interfaces.push(a)}}else if((0,ea.isObjectType)(a)){for(let c of a.getInterfaces())if((0,ea.isInterfaceType)(c)){let l=this._implementationsMap[c.name];l===void 0&&(l=this._implementationsMap[c.name]={objects:[],interfaces:[]}),l.objects.push(a)}}}}get[Symbol.toStringTag](){return"GraphQLSchema"}getQueryType(){return this._queryType}getMutationType(){return this._mutationType}getSubscriptionType(){return this._subscriptionType}getRootType(t){switch(t){case rI.OperationTypeNode.QUERY:return this.getQueryType();case rI.OperationTypeNode.MUTATION:return this.getMutationType();case rI.OperationTypeNode.SUBSCRIPTION:return this.getSubscriptionType()}}getTypeMap(){return this._typeMap}getType(t){return this.getTypeMap()[t]}getPossibleTypes(t){return(0,ea.isUnionType)(t)?t.getTypes():this.getImplementations(t).objects}getImplementations(t){let n=this._implementationsMap[t.name];return n!=null?n:{objects:[],interfaces:[]}}isSubType(t,n){let r=this._subTypeMap[t.name];if(r===void 0){if(r=Object.create(null),(0,ea.isUnionType)(t))for(let i of t.getTypes())r[i.name]=!0;else{let i=this.getImplementations(t);for(let a of i.objects)r[a.name]=!0;for(let a of i.interfaces)r[a.name]=!0}this._subTypeMap[t.name]=r}return r[n.name]!==void 0}getDirectives(){return this._directives}getDirective(t){return this.getDirectives().find(n=>n.name===t)}toConfig(){return{description:this.description,query:this.getQueryType(),mutation:this.getMutationType(),subscription:this.getSubscriptionType(),types:Object.values(this.getTypeMap()),directives:this.getDirectives(),extensions:this.extensions,astNode:this.astNode,extensionASTNodes:this.extensionASTNodes,assumeValid:this.__validationErrors!==void 0}}};Kc.GraphQLSchema=Fm;function ta(e,t){let n=(0,ea.getNamedType)(e);if(!t.has(n)){if(t.add(n),(0,ea.isUnionType)(n))for(let r of n.getTypes())ta(r,t);else if((0,ea.isObjectType)(n)||(0,ea.isInterfaceType)(n)){for(let r of n.getInterfaces())ta(r,t);for(let r of Object.values(n.getFields())){ta(r.type,t);for(let i of r.args)ta(i.type,t)}}else if((0,ea.isInputObjectType)(n))for(let r of Object.values(n.getFields()))ta(r.type,t)}return t}});var Ld=w(Pm=>{"use strict";f();N();m();Object.defineProperty(Pm,"__esModule",{value:!0});Pm.assertValidSchema=h3;Pm.validateSchema=BF;var _r=Yt(),N3=He(),aI=Oa(),FF=vd(),Fn=Ft(),CF=$r(),T3=Ri(),E3=Uu();function BF(e){if((0,E3.assertSchema)(e),e.__validationErrors)return e.__validationErrors;let t=new oI(e);y3(t),I3(t),g3(t);let n=t.getErrors();return e.__validationErrors=n,n}function h3(e){let t=BF(e);if(t.length!==0)throw new Error(t.map(n=>n.message).join(` -`))}var sI=class{constructor(t){this._errors=[],this.schema=t}reportError(t,n){let r=Array.isArray(n)?n.filter(Boolean):n;this._errors.push(new fH.GraphQLError(t,{nodes:r}))}getErrors(){return this._errors}};function hH(e){let t=e.schema,n=t.getQueryType();if(!n)e.reportError("Query root type must be provided.",t.astNode);else if(!(0,Fn.isObjectType)(n)){var r;e.reportError(`Query root type must be Object type, it cannot be ${(0,_r.inspect)(n)}.`,(r=aI(t,iI.OperationTypeNode.QUERY))!==null&&r!==void 0?r:n.astNode)}let i=t.getMutationType();if(i&&!(0,Fn.isObjectType)(i)){var a;e.reportError(`Mutation root type must be Object type if provided, it cannot be ${(0,_r.inspect)(i)}.`,(a=aI(t,iI.OperationTypeNode.MUTATION))!==null&&a!==void 0?a:i.astNode)}let o=t.getSubscriptionType();if(o&&!(0,Fn.isObjectType)(o)){var c;e.reportError(`Subscription root type must be Object type if provided, it cannot be ${(0,_r.inspect)(o)}.`,(c=aI(t,iI.OperationTypeNode.SUBSCRIPTION))!==null&&c!==void 0?c:o.astNode)}}function aI(e,t){var n;return(n=[e.astNode,...e.extensionASTNodes].flatMap(r=>{var i;return(i=r==null?void 0:r.operationTypes)!==null&&i!==void 0?i:[]}).find(r=>r.operation===t))===null||n===void 0?void 0:n.type}function EH(e){for(let n of e.schema.getDirectives()){if(!(0,wF.isDirective)(n)){e.reportError(`Expected directive but got: ${(0,_r.inspect)(n)}.`,n==null?void 0:n.astNode);continue}Bu(e,n);for(let r of n.args)if(Bu(e,r),(0,Fn.isInputType)(r.type)||e.reportError(`The type of @${n.name}(${r.name}:) must be Input Type but got: ${(0,_r.inspect)(r.type)}.`,r.astNode),(0,Fn.isRequiredArgument)(r)&&r.deprecationReason!=null){var t;e.reportError(`Required argument @${n.name}(${r.name}:) cannot be deprecated.`,[oI(r.astNode),(t=r.astNode)===null||t===void 0?void 0:t.type])}}}function Bu(e,t){t.name.startsWith("__")&&e.reportError(`Name "${t.name}" must not begin with "__", which is reserved by GraphQL introspection.`,t.astNode)}function yH(e){let t=bH(e),n=e.schema.getTypeMap();for(let r of Object.values(n)){if(!(0,Fn.isNamedType)(r)){e.reportError(`Expected GraphQL named type but got: ${(0,_r.inspect)(r)}.`,r.astNode);continue}(0,mH.isIntrospectionType)(r)||Bu(e,r),(0,Fn.isObjectType)(r)||(0,Fn.isInterfaceType)(r)?(RF(e,r),FF(e,r)):(0,Fn.isUnionType)(r)?_H(e,r):(0,Fn.isEnumType)(r)?vH(e,r):(0,Fn.isInputObjectType)(r)&&(SH(e,r),t(r))}}function RF(e,t){let n=Object.values(t.getFields());n.length===0&&e.reportError(`Type ${t.name} must define one or more fields.`,[t.astNode,...t.extensionASTNodes]);for(let o of n){if(Bu(e,o),!(0,Fn.isOutputType)(o.type)){var r;e.reportError(`The type of ${t.name}.${o.name} must be Output Type but got: ${(0,_r.inspect)(o.type)}.`,(r=o.astNode)===null||r===void 0?void 0:r.type)}for(let c of o.args){let l=c.name;if(Bu(e,c),!(0,Fn.isInputType)(c.type)){var i;e.reportError(`The type of ${t.name}.${o.name}(${l}:) must be Input Type but got: ${(0,_r.inspect)(c.type)}.`,(i=c.astNode)===null||i===void 0?void 0:i.type)}if((0,Fn.isRequiredArgument)(c)&&c.deprecationReason!=null){var a;e.reportError(`Required argument ${t.name}.${o.name}(${l}:) cannot be deprecated.`,[oI(c.astNode),(a=c.astNode)===null||a===void 0?void 0:a.type])}}}}function FF(e,t){let n=Object.create(null);for(let r of t.getInterfaces()){if(!(0,Fn.isInterfaceType)(r)){e.reportError(`Type ${(0,_r.inspect)(t)} must only implement Interface types, it cannot implement ${(0,_r.inspect)(r)}.`,Pd(t,r));continue}if(t===r){e.reportError(`Type ${t.name} cannot implement itself because it would create a circular reference.`,Pd(t,r));continue}if(n[r.name]){e.reportError(`Type ${t.name} can only implement ${r.name} once.`,Pd(t,r));continue}n[r.name]=!0,gH(e,t,r),IH(e,t,r)}}function IH(e,t,n){let r=t.getFields();for(let l of Object.values(n.getFields())){let p=l.name,N=r[p];if(!N){e.reportError(`Interface field ${n.name}.${p} expected but ${t.name} does not provide it.`,[l.astNode,t.astNode,...t.extensionASTNodes]);continue}if(!(0,AF.isTypeSubTypeOf)(e.schema,N.type,l.type)){var i,a;e.reportError(`Interface field ${n.name}.${p} expects type ${(0,_r.inspect)(l.type)} but ${t.name}.${p} is type ${(0,_r.inspect)(N.type)}.`,[(i=l.astNode)===null||i===void 0?void 0:i.type,(a=N.astNode)===null||a===void 0?void 0:a.type])}for(let y of l.args){let g=y.name,_=N.args.find(F=>F.name===g);if(!_){e.reportError(`Interface field argument ${n.name}.${p}(${g}:) expected but ${t.name}.${p} does not provide it.`,[y.astNode,N.astNode]);continue}if(!(0,AF.isEqualType)(y.type,_.type)){var o,c;e.reportError(`Interface field argument ${n.name}.${p}(${g}:) expects type ${(0,_r.inspect)(y.type)} but ${t.name}.${p}(${g}:) is type ${(0,_r.inspect)(_.type)}.`,[(o=y.astNode)===null||o===void 0?void 0:o.type,(c=_.astNode)===null||c===void 0?void 0:c.type])}}for(let y of N.args){let g=y.name;!l.args.find(F=>F.name===g)&&(0,Fn.isRequiredArgument)(y)&&e.reportError(`Object field ${t.name}.${p} includes required argument ${g} that is missing from the Interface field ${n.name}.${p}.`,[y.astNode,l.astNode])}}}function gH(e,t,n){let r=t.getInterfaces();for(let i of n.getInterfaces())r.includes(i)||e.reportError(i===t?`Type ${t.name} cannot implement ${n.name} because it would create a circular reference.`:`Type ${t.name} must implement ${i.name} because it is implemented by ${n.name}.`,[...Pd(n,i),...Pd(t,n)])}function _H(e,t){let n=t.getTypes();n.length===0&&e.reportError(`Union type ${t.name} must define one or more member types.`,[t.astNode,...t.extensionASTNodes]);let r=Object.create(null);for(let i of n){if(r[i.name]){e.reportError(`Union type ${t.name} can only include type ${i.name} once.`,PF(t,i.name));continue}r[i.name]=!0,(0,Fn.isObjectType)(i)||e.reportError(`Union type ${t.name} can only include Object types, it cannot include ${(0,_r.inspect)(i)}.`,PF(t,String(i)))}}function vH(e,t){let n=t.getValues();n.length===0&&e.reportError(`Enum type ${t.name} must define one or more values.`,[t.astNode,...t.extensionASTNodes]);for(let r of n)Bu(e,r)}function SH(e,t){let n=Object.values(t.getFields());n.length===0&&e.reportError(`Input Object type ${t.name} must define one or more fields.`,[t.astNode,...t.extensionASTNodes]);for(let a of n){if(Bu(e,a),!(0,Fn.isInputType)(a.type)){var r;e.reportError(`The type of ${t.name}.${a.name} must be Input Type but got: ${(0,_r.inspect)(a.type)}.`,(r=a.astNode)===null||r===void 0?void 0:r.type)}if((0,Fn.isRequiredInputField)(a)&&a.deprecationReason!=null){var i;e.reportError(`Required input field ${t.name}.${a.name} cannot be deprecated.`,[oI(a.astNode),(i=a.astNode)===null||i===void 0?void 0:i.type])}t.isOneOf&&OH(t,a,e)}}function OH(e,t,n){if((0,Fn.isNonNullType)(t.type)){var r;n.reportError(`OneOf input field ${e.name}.${t.name} must be nullable.`,(r=t.astNode)===null||r===void 0?void 0:r.type)}t.defaultValue!==void 0&&n.reportError(`OneOf input field ${e.name}.${t.name} cannot have a default value.`,t.astNode)}function bH(e){let t=Object.create(null),n=[],r=Object.create(null);return i;function i(a){if(t[a.name])return;t[a.name]=!0,r[a.name]=n.length;let o=Object.values(a.getFields());for(let c of o)if((0,Fn.isNonNullType)(c.type)&&(0,Fn.isInputObjectType)(c.type.ofType)){let l=c.type.ofType,p=r[l.name];if(n.push(c),p===void 0)i(l);else{let N=n.slice(p),y=N.map(g=>g.name).join(".");e.reportError(`Cannot reference Input Object "${l.name}" within itself through a series of non-null fields: "${y}".`,N.map(g=>g.astNode))}n.pop()}r[a.name]=void 0}}function Pd(e,t){let{astNode:n,extensionASTNodes:r}=e;return(n!=null?[n,...r]:r).flatMap(a=>{var o;return(o=a.interfaces)!==null&&o!==void 0?o:[]}).filter(a=>a.name.value===t.name)}function PF(e,t){let{astNode:n,extensionASTNodes:r}=e;return(n!=null?[n,...r]:r).flatMap(a=>{var o;return(o=a.types)!==null&&o!==void 0?o:[]}).filter(a=>a.name.value===t)}function oI(e){var t;return e==null||(t=e.directives)===null||t===void 0?void 0:t.find(n=>n.name.value===wF.GraphQLDeprecatedDirective.name)}});var Ra=P(lI=>{"use strict";f();T();m();Object.defineProperty(lI,"__esModule",{value:!0});lI.typeFromAST=cI;var uI=Rt(),CF=Ft();function cI(e,t){switch(t.kind){case uI.Kind.LIST_TYPE:{let n=cI(e,t.type);return n&&new CF.GraphQLList(n)}case uI.Kind.NON_NULL_TYPE:{let n=cI(e,t.type);return n&&new CF.GraphQLNonNull(n)}case uI.Kind.NAMED_TYPE:return e.getType(t.name.value)}}});var Pm=P(Ld=>{"use strict";f();T();m();Object.defineProperty(Ld,"__esModule",{value:!0});Ld.TypeInfo=void 0;Ld.visitWithTypeInfo=RH;var DH=Oa(),Pn=Rt(),BF=Au(),wn=Ft(),Kc=Ai(),UF=Ra(),dI=class{constructor(t,n,r){this._schema=t,this._typeStack=[],this._parentTypeStack=[],this._inputTypeStack=[],this._fieldDefStack=[],this._defaultValueStack=[],this._directive=null,this._argument=null,this._enumValue=null,this._getFieldDef=r!=null?r:AH,n&&((0,wn.isInputType)(n)&&this._inputTypeStack.push(n),(0,wn.isCompositeType)(n)&&this._parentTypeStack.push(n),(0,wn.isOutputType)(n)&&this._typeStack.push(n))}get[Symbol.toStringTag](){return"TypeInfo"}getType(){if(this._typeStack.length>0)return this._typeStack[this._typeStack.length-1]}getParentType(){if(this._parentTypeStack.length>0)return this._parentTypeStack[this._parentTypeStack.length-1]}getInputType(){if(this._inputTypeStack.length>0)return this._inputTypeStack[this._inputTypeStack.length-1]}getParentInputType(){if(this._inputTypeStack.length>1)return this._inputTypeStack[this._inputTypeStack.length-2]}getFieldDef(){if(this._fieldDefStack.length>0)return this._fieldDefStack[this._fieldDefStack.length-1]}getDefaultValue(){if(this._defaultValueStack.length>0)return this._defaultValueStack[this._defaultValueStack.length-1]}getDirective(){return this._directive}getArgument(){return this._argument}getEnumValue(){return this._enumValue}enter(t){let n=this._schema;switch(t.kind){case Pn.Kind.SELECTION_SET:{let i=(0,wn.getNamedType)(this.getType());this._parentTypeStack.push((0,wn.isCompositeType)(i)?i:void 0);break}case Pn.Kind.FIELD:{let i=this.getParentType(),a,o;i&&(a=this._getFieldDef(n,i,t),a&&(o=a.type)),this._fieldDefStack.push(a),this._typeStack.push((0,wn.isOutputType)(o)?o:void 0);break}case Pn.Kind.DIRECTIVE:this._directive=n.getDirective(t.name.value);break;case Pn.Kind.OPERATION_DEFINITION:{let i=n.getRootType(t.operation);this._typeStack.push((0,wn.isObjectType)(i)?i:void 0);break}case Pn.Kind.INLINE_FRAGMENT:case Pn.Kind.FRAGMENT_DEFINITION:{let i=t.typeCondition,a=i?(0,UF.typeFromAST)(n,i):(0,wn.getNamedType)(this.getType());this._typeStack.push((0,wn.isOutputType)(a)?a:void 0);break}case Pn.Kind.VARIABLE_DEFINITION:{let i=(0,UF.typeFromAST)(n,t.type);this._inputTypeStack.push((0,wn.isInputType)(i)?i:void 0);break}case Pn.Kind.ARGUMENT:{var r;let i,a,o=(r=this.getDirective())!==null&&r!==void 0?r:this.getFieldDef();o&&(i=o.args.find(c=>c.name===t.name.value),i&&(a=i.type)),this._argument=i,this._defaultValueStack.push(i?i.defaultValue:void 0),this._inputTypeStack.push((0,wn.isInputType)(a)?a:void 0);break}case Pn.Kind.LIST:{let i=(0,wn.getNullableType)(this.getInputType()),a=(0,wn.isListType)(i)?i.ofType:i;this._defaultValueStack.push(void 0),this._inputTypeStack.push((0,wn.isInputType)(a)?a:void 0);break}case Pn.Kind.OBJECT_FIELD:{let i=(0,wn.getNamedType)(this.getInputType()),a,o;(0,wn.isInputObjectType)(i)&&(o=i.getFields()[t.name.value],o&&(a=o.type)),this._defaultValueStack.push(o?o.defaultValue:void 0),this._inputTypeStack.push((0,wn.isInputType)(a)?a:void 0);break}case Pn.Kind.ENUM:{let i=(0,wn.getNamedType)(this.getInputType()),a;(0,wn.isEnumType)(i)&&(a=i.getValue(t.value)),this._enumValue=a;break}default:}}leave(t){switch(t.kind){case Pn.Kind.SELECTION_SET:this._parentTypeStack.pop();break;case Pn.Kind.FIELD:this._fieldDefStack.pop(),this._typeStack.pop();break;case Pn.Kind.DIRECTIVE:this._directive=null;break;case Pn.Kind.OPERATION_DEFINITION:case Pn.Kind.INLINE_FRAGMENT:case Pn.Kind.FRAGMENT_DEFINITION:this._typeStack.pop();break;case Pn.Kind.VARIABLE_DEFINITION:this._inputTypeStack.pop();break;case Pn.Kind.ARGUMENT:this._argument=null,this._defaultValueStack.pop(),this._inputTypeStack.pop();break;case Pn.Kind.LIST:case Pn.Kind.OBJECT_FIELD:this._defaultValueStack.pop(),this._inputTypeStack.pop();break;case Pn.Kind.ENUM:this._enumValue=null;break;default:}}};Ld.TypeInfo=dI;function AH(e,t,n){let r=n.name.value;if(r===Kc.SchemaMetaFieldDef.name&&e.getQueryType()===t)return Kc.SchemaMetaFieldDef;if(r===Kc.TypeMetaFieldDef.name&&e.getQueryType()===t)return Kc.TypeMetaFieldDef;if(r===Kc.TypeNameMetaFieldDef.name&&(0,wn.isCompositeType)(t))return Kc.TypeNameMetaFieldDef;if((0,wn.isObjectType)(t)||(0,wn.isInterfaceType)(t))return t.getFields()[r]}function RH(e,t){return{enter(...n){let r=n[0];e.enter(r);let i=(0,BF.getEnterLeaveForKind)(t,r.kind).enter;if(i){let a=i.apply(t,n);return a!==void 0&&(e.leave(r),(0,DH.isNode)(a)&&e.enter(a)),a}},leave(...n){let r=n[0],i=(0,BF.getEnterLeaveForKind)(t,r.kind).leave,a;return i&&(a=i.apply(t,n)),e.leave(r),a}}}});var Uu=P(Ri=>{"use strict";f();T();m();Object.defineProperty(Ri,"__esModule",{value:!0});Ri.isConstValueNode=pI;Ri.isDefinitionNode=FH;Ri.isExecutableDefinitionNode=kF;Ri.isSelectionNode=PH;Ri.isTypeDefinitionNode=qF;Ri.isTypeExtensionNode=jF;Ri.isTypeNode=wH;Ri.isTypeSystemDefinitionNode=xF;Ri.isTypeSystemExtensionNode=VF;Ri.isValueNode=MF;var Pt=Rt();function FH(e){return kF(e)||xF(e)||VF(e)}function kF(e){return e.kind===Pt.Kind.OPERATION_DEFINITION||e.kind===Pt.Kind.FRAGMENT_DEFINITION}function PH(e){return e.kind===Pt.Kind.FIELD||e.kind===Pt.Kind.FRAGMENT_SPREAD||e.kind===Pt.Kind.INLINE_FRAGMENT}function MF(e){return e.kind===Pt.Kind.VARIABLE||e.kind===Pt.Kind.INT||e.kind===Pt.Kind.FLOAT||e.kind===Pt.Kind.STRING||e.kind===Pt.Kind.BOOLEAN||e.kind===Pt.Kind.NULL||e.kind===Pt.Kind.ENUM||e.kind===Pt.Kind.LIST||e.kind===Pt.Kind.OBJECT}function pI(e){return MF(e)&&(e.kind===Pt.Kind.LIST?e.values.some(pI):e.kind===Pt.Kind.OBJECT?e.fields.some(t=>pI(t.value)):e.kind!==Pt.Kind.VARIABLE)}function wH(e){return e.kind===Pt.Kind.NAMED_TYPE||e.kind===Pt.Kind.LIST_TYPE||e.kind===Pt.Kind.NON_NULL_TYPE}function xF(e){return e.kind===Pt.Kind.SCHEMA_DEFINITION||qF(e)||e.kind===Pt.Kind.DIRECTIVE_DEFINITION}function qF(e){return e.kind===Pt.Kind.SCALAR_TYPE_DEFINITION||e.kind===Pt.Kind.OBJECT_TYPE_DEFINITION||e.kind===Pt.Kind.INTERFACE_TYPE_DEFINITION||e.kind===Pt.Kind.UNION_TYPE_DEFINITION||e.kind===Pt.Kind.ENUM_TYPE_DEFINITION||e.kind===Pt.Kind.INPUT_OBJECT_TYPE_DEFINITION}function VF(e){return e.kind===Pt.Kind.SCHEMA_EXTENSION||jF(e)}function jF(e){return e.kind===Pt.Kind.SCALAR_TYPE_EXTENSION||e.kind===Pt.Kind.OBJECT_TYPE_EXTENSION||e.kind===Pt.Kind.INTERFACE_TYPE_EXTENSION||e.kind===Pt.Kind.UNION_TYPE_EXTENSION||e.kind===Pt.Kind.ENUM_TYPE_EXTENSION||e.kind===Pt.Kind.INPUT_OBJECT_TYPE_EXTENSION}});var mI=P(fI=>{"use strict";f();T();m();Object.defineProperty(fI,"__esModule",{value:!0});fI.ExecutableDefinitionsRule=BH;var LH=Je(),KF=Rt(),CH=Uu();function BH(e){return{Document(t){for(let n of t.definitions)if(!(0,CH.isExecutableDefinitionNode)(n)){let r=n.kind===KF.Kind.SCHEMA_DEFINITION||n.kind===KF.Kind.SCHEMA_EXTENSION?"schema":'"'+n.name.value+'"';e.reportError(new LH.GraphQLError(`The ${r} definition is not executable.`,{nodes:n}))}return!1}}}});var NI=P(TI=>{"use strict";f();T();m();Object.defineProperty(TI,"__esModule",{value:!0});TI.FieldsOnCorrectTypeRule=xH;var GF=ko(),UH=Nd(),kH=xo(),MH=Je(),Cd=Ft();function xH(e){return{Field(t){let n=e.getParentType();if(n&&!e.getFieldDef()){let i=e.getSchema(),a=t.name.value,o=(0,GF.didYouMean)("to use an inline fragment on",qH(i,n,a));o===""&&(o=(0,GF.didYouMean)(VH(n,a))),e.reportError(new MH.GraphQLError(`Cannot query field "${a}" on type "${n.name}".`+o,{nodes:t}))}}}}function qH(e,t,n){if(!(0,Cd.isAbstractType)(t))return[];let r=new Set,i=Object.create(null);for(let o of e.getPossibleTypes(t))if(o.getFields()[n]){r.add(o),i[o.name]=1;for(let c of o.getInterfaces()){var a;c.getFields()[n]&&(r.add(c),i[c.name]=((a=i[c.name])!==null&&a!==void 0?a:0)+1)}}return[...r].sort((o,c)=>{let l=i[c.name]-i[o.name];return l!==0?l:(0,Cd.isInterfaceType)(o)&&e.isSubType(o,c)?-1:(0,Cd.isInterfaceType)(c)&&e.isSubType(c,o)?1:(0,UH.naturalCompare)(o.name,c.name)}).map(o=>o.name)}function VH(e,t){if((0,Cd.isObjectType)(e)||(0,Cd.isInterfaceType)(e)){let n=Object.keys(e.getFields());return(0,kH.suggestionList)(t,n)}return[]}});var EI=P(hI=>{"use strict";f();T();m();Object.defineProperty(hI,"__esModule",{value:!0});hI.FragmentsOnCompositeTypesRule=jH;var $F=Je(),QF=ci(),YF=Ft(),JF=Ra();function jH(e){return{InlineFragment(t){let n=t.typeCondition;if(n){let r=(0,JF.typeFromAST)(e.getSchema(),n);if(r&&!(0,YF.isCompositeType)(r)){let i=(0,QF.print)(n);e.reportError(new $F.GraphQLError(`Fragment cannot condition on non composite type "${i}".`,{nodes:n}))}}},FragmentDefinition(t){let n=(0,JF.typeFromAST)(e.getSchema(),t.typeCondition);if(n&&!(0,YF.isCompositeType)(n)){let r=(0,QF.print)(t.typeCondition);e.reportError(new $F.GraphQLError(`Fragment "${t.name.value}" cannot condition on non composite type "${r}".`,{nodes:t.typeCondition}))}}}}});var yI=P(wm=>{"use strict";f();T();m();Object.defineProperty(wm,"__esModule",{value:!0});wm.KnownArgumentNamesOnDirectivesRule=XF;wm.KnownArgumentNamesRule=$H;var HF=ko(),zF=xo(),WF=Je(),KH=Rt(),GH=$r();function $H(e){return Q(k({},XF(e)),{Argument(t){let n=e.getArgument(),r=e.getFieldDef(),i=e.getParentType();if(!n&&r&&i){let a=t.name.value,o=r.args.map(l=>l.name),c=(0,zF.suggestionList)(a,o);e.reportError(new WF.GraphQLError(`Unknown argument "${a}" on field "${i.name}.${r.name}".`+(0,HF.didYouMean)(c),{nodes:t}))}}})}function XF(e){let t=Object.create(null),n=e.getSchema(),r=n?n.getDirectives():GH.specifiedDirectives;for(let o of r)t[o.name]=o.args.map(c=>c.name);let i=e.getDocument().definitions;for(let o of i)if(o.kind===KH.Kind.DIRECTIVE_DEFINITION){var a;let c=(a=o.arguments)!==null&&a!==void 0?a:[];t[o.name.value]=c.map(l=>l.name.value)}return{Directive(o){let c=o.name.value,l=t[c];if(o.arguments&&l)for(let p of o.arguments){let N=p.name.value;if(!l.includes(N)){let y=(0,zF.suggestionList)(N,l);e.reportError(new WF.GraphQLError(`Unknown argument "${N}" on directive "@${c}".`+(0,HF.didYouMean)(y),{nodes:p}))}}return!1}}}});var vI=P(_I=>{"use strict";f();T();m();Object.defineProperty(_I,"__esModule",{value:!0});_I.KnownDirectivesRule=JH;var QH=Yt(),II=Ir(),ZF=Je(),gI=Oa(),Zn=Uc(),fn=Rt(),YH=$r();function JH(e){let t=Object.create(null),n=e.getSchema(),r=n?n.getDirectives():YH.specifiedDirectives;for(let a of r)t[a.name]=a.locations;let i=e.getDocument().definitions;for(let a of i)a.kind===fn.Kind.DIRECTIVE_DEFINITION&&(t[a.name.value]=a.locations.map(o=>o.value));return{Directive(a,o,c,l,p){let N=a.name.value,y=t[N];if(!y){e.reportError(new ZF.GraphQLError(`Unknown directive "@${N}".`,{nodes:a}));return}let g=HH(p);g&&!y.includes(g)&&e.reportError(new ZF.GraphQLError(`Directive "@${N}" may not be used on ${g}.`,{nodes:a}))}}}function HH(e){let t=e[e.length-1];switch("kind"in t||(0,II.invariant)(!1),t.kind){case fn.Kind.OPERATION_DEFINITION:return zH(t.operation);case fn.Kind.FIELD:return Zn.DirectiveLocation.FIELD;case fn.Kind.FRAGMENT_SPREAD:return Zn.DirectiveLocation.FRAGMENT_SPREAD;case fn.Kind.INLINE_FRAGMENT:return Zn.DirectiveLocation.INLINE_FRAGMENT;case fn.Kind.FRAGMENT_DEFINITION:return Zn.DirectiveLocation.FRAGMENT_DEFINITION;case fn.Kind.VARIABLE_DEFINITION:return Zn.DirectiveLocation.VARIABLE_DEFINITION;case fn.Kind.SCHEMA_DEFINITION:case fn.Kind.SCHEMA_EXTENSION:return Zn.DirectiveLocation.SCHEMA;case fn.Kind.SCALAR_TYPE_DEFINITION:case fn.Kind.SCALAR_TYPE_EXTENSION:return Zn.DirectiveLocation.SCALAR;case fn.Kind.OBJECT_TYPE_DEFINITION:case fn.Kind.OBJECT_TYPE_EXTENSION:return Zn.DirectiveLocation.OBJECT;case fn.Kind.FIELD_DEFINITION:return Zn.DirectiveLocation.FIELD_DEFINITION;case fn.Kind.INTERFACE_TYPE_DEFINITION:case fn.Kind.INTERFACE_TYPE_EXTENSION:return Zn.DirectiveLocation.INTERFACE;case fn.Kind.UNION_TYPE_DEFINITION:case fn.Kind.UNION_TYPE_EXTENSION:return Zn.DirectiveLocation.UNION;case fn.Kind.ENUM_TYPE_DEFINITION:case fn.Kind.ENUM_TYPE_EXTENSION:return Zn.DirectiveLocation.ENUM;case fn.Kind.ENUM_VALUE_DEFINITION:return Zn.DirectiveLocation.ENUM_VALUE;case fn.Kind.INPUT_OBJECT_TYPE_DEFINITION:case fn.Kind.INPUT_OBJECT_TYPE_EXTENSION:return Zn.DirectiveLocation.INPUT_OBJECT;case fn.Kind.INPUT_VALUE_DEFINITION:{let n=e[e.length-3];return"kind"in n||(0,II.invariant)(!1),n.kind===fn.Kind.INPUT_OBJECT_TYPE_DEFINITION?Zn.DirectiveLocation.INPUT_FIELD_DEFINITION:Zn.DirectiveLocation.ARGUMENT_DEFINITION}default:(0,II.invariant)(!1,"Unexpected kind: "+(0,QH.inspect)(t.kind))}}function zH(e){switch(e){case gI.OperationTypeNode.QUERY:return Zn.DirectiveLocation.QUERY;case gI.OperationTypeNode.MUTATION:return Zn.DirectiveLocation.MUTATION;case gI.OperationTypeNode.SUBSCRIPTION:return Zn.DirectiveLocation.SUBSCRIPTION}}});var OI=P(SI=>{"use strict";f();T();m();Object.defineProperty(SI,"__esModule",{value:!0});SI.KnownFragmentNamesRule=XH;var WH=Je();function XH(e){return{FragmentSpread(t){let n=t.name.value;e.getFragment(n)||e.reportError(new WH.GraphQLError(`Unknown fragment "${n}".`,{nodes:t.name}))}}}});var AI=P(DI=>{"use strict";f();T();m();Object.defineProperty(DI,"__esModule",{value:!0});DI.KnownTypeNamesRule=i6;var ZH=ko(),e6=xo(),t6=Je(),bI=Uu(),n6=Ai(),r6=Aa();function i6(e){let t=e.getSchema(),n=t?t.getTypeMap():Object.create(null),r=Object.create(null);for(let a of e.getDocument().definitions)(0,bI.isTypeDefinitionNode)(a)&&(r[a.name.value]=!0);let i=[...Object.keys(n),...Object.keys(r)];return{NamedType(a,o,c,l,p){let N=a.name.value;if(!n[N]&&!r[N]){var y;let g=(y=p[2])!==null&&y!==void 0?y:c,_=g!=null&&a6(g);if(_&&eP.includes(N))return;let F=(0,e6.suggestionList)(N,_?eP.concat(i):i);e.reportError(new t6.GraphQLError(`Unknown type "${N}".`+(0,ZH.didYouMean)(F),{nodes:a}))}}}}var eP=[...r6.specifiedScalarTypes,...n6.introspectionTypes].map(e=>e.name);function a6(e){return"kind"in e&&((0,bI.isTypeSystemDefinitionNode)(e)||(0,bI.isTypeSystemExtensionNode)(e))}});var FI=P(RI=>{"use strict";f();T();m();Object.defineProperty(RI,"__esModule",{value:!0});RI.LoneAnonymousOperationRule=u6;var s6=Je(),o6=Rt();function u6(e){let t=0;return{Document(n){t=n.definitions.filter(r=>r.kind===o6.Kind.OPERATION_DEFINITION).length},OperationDefinition(n){!n.name&&t>1&&e.reportError(new s6.GraphQLError("This anonymous operation must be the only defined operation.",{nodes:n}))}}}});var wI=P(PI=>{"use strict";f();T();m();Object.defineProperty(PI,"__esModule",{value:!0});PI.LoneSchemaDefinitionRule=c6;var tP=Je();function c6(e){var t,n,r;let i=e.getSchema(),a=(t=(n=(r=i==null?void 0:i.astNode)!==null&&r!==void 0?r:i==null?void 0:i.getQueryType())!==null&&n!==void 0?n:i==null?void 0:i.getMutationType())!==null&&t!==void 0?t:i==null?void 0:i.getSubscriptionType(),o=0;return{SchemaDefinition(c){if(a){e.reportError(new tP.GraphQLError("Cannot define a new schema within a schema extension.",{nodes:c}));return}o>0&&e.reportError(new tP.GraphQLError("Must provide only one schema definition.",{nodes:c})),++o}}}});var CI=P(LI=>{"use strict";f();T();m();Object.defineProperty(LI,"__esModule",{value:!0});LI.MaxIntrospectionDepthRule=p6;var l6=Je(),nP=Rt(),d6=3;function p6(e){function t(n,r=Object.create(null),i=0){if(n.kind===nP.Kind.FRAGMENT_SPREAD){let a=n.name.value;if(r[a]===!0)return!1;let o=e.getFragment(a);if(!o)return!1;try{return r[a]=!0,t(o,r,i)}finally{r[a]=void 0}}if(n.kind===nP.Kind.FIELD&&(n.name.value==="fields"||n.name.value==="interfaces"||n.name.value==="possibleTypes"||n.name.value==="inputFields")&&(i++,i>=d6))return!0;if("selectionSet"in n&&n.selectionSet){for(let a of n.selectionSet.selections)if(t(a,r,i))return!0}return!1}return{Field(n){if((n.name.value==="__schema"||n.name.value==="__type")&&t(n))return e.reportError(new l6.GraphQLError("Maximum introspection depth exceeded",{nodes:[n]})),!1}}}});var UI=P(BI=>{"use strict";f();T();m();Object.defineProperty(BI,"__esModule",{value:!0});BI.NoFragmentCyclesRule=m6;var f6=Je();function m6(e){let t=Object.create(null),n=[],r=Object.create(null);return{OperationDefinition:()=>!1,FragmentDefinition(a){return i(a),!1}};function i(a){if(t[a.name.value])return;let o=a.name.value;t[o]=!0;let c=e.getFragmentSpreads(a.selectionSet);if(c.length!==0){r[o]=n.length;for(let l of c){let p=l.name.value,N=r[p];if(n.push(l),N===void 0){let y=e.getFragment(p);y&&i(y)}else{let y=n.slice(N),g=y.slice(0,-1).map(_=>'"'+_.name.value+'"').join(", ");e.reportError(new f6.GraphQLError(`Cannot spread fragment "${p}" within itself`+(g!==""?` via ${g}.`:"."),{nodes:y}))}n.pop()}r[o]=void 0}}}});var MI=P(kI=>{"use strict";f();T();m();Object.defineProperty(kI,"__esModule",{value:!0});kI.NoUndefinedVariablesRule=N6;var T6=Je();function N6(e){let t=Object.create(null);return{OperationDefinition:{enter(){t=Object.create(null)},leave(n){let r=e.getRecursiveVariableUsages(n);for(let{node:i}of r){let a=i.name.value;t[a]!==!0&&e.reportError(new T6.GraphQLError(n.name?`Variable "$${a}" is not defined by operation "${n.name.value}".`:`Variable "$${a}" is not defined.`,{nodes:[i,n]}))}}},VariableDefinition(n){t[n.variable.name.value]=!0}}}});var qI=P(xI=>{"use strict";f();T();m();Object.defineProperty(xI,"__esModule",{value:!0});xI.NoUnusedFragmentsRule=E6;var h6=Je();function E6(e){let t=[],n=[];return{OperationDefinition(r){return t.push(r),!1},FragmentDefinition(r){return n.push(r),!1},Document:{leave(){let r=Object.create(null);for(let i of t)for(let a of e.getRecursivelyReferencedFragments(i))r[a.name.value]=!0;for(let i of n){let a=i.name.value;r[a]!==!0&&e.reportError(new h6.GraphQLError(`Fragment "${a}" is never used.`,{nodes:i}))}}}}}});var jI=P(VI=>{"use strict";f();T();m();Object.defineProperty(VI,"__esModule",{value:!0});VI.NoUnusedVariablesRule=I6;var y6=Je();function I6(e){let t=[];return{OperationDefinition:{enter(){t=[]},leave(n){let r=Object.create(null),i=e.getRecursiveVariableUsages(n);for(let{node:a}of i)r[a.name.value]=!0;for(let a of t){let o=a.variable.name.value;r[o]!==!0&&e.reportError(new y6.GraphQLError(n.name?`Variable "$${o}" is never used in operation "${n.name.value}".`:`Variable "$${o}" is never used.`,{nodes:a}))}}},VariableDefinition(n){t.push(n)}}}});var $I=P(GI=>{"use strict";f();T();m();Object.defineProperty(GI,"__esModule",{value:!0});GI.sortValueNode=KI;var g6=Nd(),ps=Rt();function KI(e){switch(e.kind){case ps.Kind.OBJECT:return Q(k({},e),{fields:_6(e.fields)});case ps.Kind.LIST:return Q(k({},e),{values:e.values.map(KI)});case ps.Kind.INT:case ps.Kind.FLOAT:case ps.Kind.STRING:case ps.Kind.BOOLEAN:case ps.Kind.NULL:case ps.Kind.ENUM:case ps.Kind.VARIABLE:return e}}function _6(e){return e.map(t=>Q(k({},t),{value:KI(t.value)})).sort((t,n)=>(0,g6.naturalCompare)(t.name.value,n.name.value))}});var XI=P(WI=>{"use strict";f();T();m();Object.defineProperty(WI,"__esModule",{value:!0});WI.OverlappingFieldsCanBeMergedRule=b6;var rP=Yt(),v6=Je(),QI=Rt(),S6=ci(),Qr=Ft(),O6=$I(),aP=Ra();function sP(e){return Array.isArray(e)?e.map(([t,n])=>`subfields "${t}" conflict because `+sP(n)).join(" and "):e}function b6(e){let t=new HI,n=new Map;return{SelectionSet(r){let i=D6(e,n,t,e.getParentType(),r);for(let[[a,o],c,l]of i){let p=sP(o);e.reportError(new v6.GraphQLError(`Fields "${a}" conflict because ${p}. Use different aliases on the fields to fetch both if this was intentional.`,{nodes:c.concat(l)}))}}}}function D6(e,t,n,r,i){let a=[],[o,c]=Bm(e,t,r,i);if(R6(e,a,t,n,o),c.length!==0)for(let l=0;l1)for(let c=0;c[a.value,o]));return n.every(a=>{let o=a.value,c=i.get(a.name.value);return c===void 0?!1:iP(o)===iP(c)})}function iP(e){return(0,S6.print)((0,O6.sortValueNode)(e))}function YI(e,t){return(0,Qr.isListType)(e)?(0,Qr.isListType)(t)?YI(e.ofType,t.ofType):!0:(0,Qr.isListType)(t)?!0:(0,Qr.isNonNullType)(e)?(0,Qr.isNonNullType)(t)?YI(e.ofType,t.ofType):!0:(0,Qr.isNonNullType)(t)?!0:(0,Qr.isLeafType)(e)||(0,Qr.isLeafType)(t)?e!==t:!1}function Bm(e,t,n,r){let i=t.get(r);if(i)return i;let a=Object.create(null),o=Object.create(null);uP(e,n,r,a,o);let c=[a,Object.keys(o)];return t.set(r,c),c}function JI(e,t,n){let r=t.get(n.selectionSet);if(r)return r;let i=(0,aP.typeFromAST)(e.getSchema(),n.typeCondition);return Bm(e,t,i,n.selectionSet)}function uP(e,t,n,r,i){for(let a of n.selections)switch(a.kind){case QI.Kind.FIELD:{let o=a.name.value,c;((0,Qr.isObjectType)(t)||(0,Qr.isInterfaceType)(t))&&(c=t.getFields()[o]);let l=a.alias?a.alias.value:o;r[l]||(r[l]=[]),r[l].push([t,a,c]);break}case QI.Kind.FRAGMENT_SPREAD:i[a.name.value]=!0;break;case QI.Kind.INLINE_FRAGMENT:{let o=a.typeCondition,c=o?(0,aP.typeFromAST)(e.getSchema(),o):t;uP(e,c,a.selectionSet,r,i);break}}}function P6(e,t,n,r){if(e.length>0)return[[t,e.map(([i])=>i)],[n,...e.map(([,i])=>i).flat()],[r,...e.map(([,,i])=>i).flat()]]}var HI=class{constructor(){this._data=new Map}has(t,n,r){var i;let[a,o]=t{"use strict";f();T();m();Object.defineProperty(eg,"__esModule",{value:!0});eg.PossibleFragmentSpreadsRule=L6;var Um=Yt(),cP=Je(),ZI=Ft(),lP=_d(),w6=Ra();function L6(e){return{InlineFragment(t){let n=e.getType(),r=e.getParentType();if((0,ZI.isCompositeType)(n)&&(0,ZI.isCompositeType)(r)&&!(0,lP.doTypesOverlap)(e.getSchema(),n,r)){let i=(0,Um.inspect)(r),a=(0,Um.inspect)(n);e.reportError(new cP.GraphQLError(`Fragment cannot be spread here as objects of type "${i}" can never be of type "${a}".`,{nodes:t}))}},FragmentSpread(t){let n=t.name.value,r=C6(e,n),i=e.getParentType();if(r&&i&&!(0,lP.doTypesOverlap)(e.getSchema(),r,i)){let a=(0,Um.inspect)(i),o=(0,Um.inspect)(r);e.reportError(new cP.GraphQLError(`Fragment "${n}" cannot be spread here as objects of type "${a}" can never be of type "${o}".`,{nodes:t}))}}}}function C6(e,t){let n=e.getFragment(t);if(n){let r=(0,w6.typeFromAST)(e.getSchema(),n.typeCondition);if((0,ZI.isCompositeType)(r))return r}}});var rg=P(ng=>{"use strict";f();T();m();Object.defineProperty(ng,"__esModule",{value:!0});ng.PossibleTypeExtensionsRule=M6;var B6=ko(),pP=Yt(),fP=Ir(),U6=xo(),dP=Je(),hn=Rt(),k6=Uu(),Gc=Ft();function M6(e){let t=e.getSchema(),n=Object.create(null);for(let i of e.getDocument().definitions)(0,k6.isTypeDefinitionNode)(i)&&(n[i.name.value]=i);return{ScalarTypeExtension:r,ObjectTypeExtension:r,InterfaceTypeExtension:r,UnionTypeExtension:r,EnumTypeExtension:r,InputObjectTypeExtension:r};function r(i){let a=i.name.value,o=n[a],c=t==null?void 0:t.getType(a),l;if(o?l=x6[o.kind]:c&&(l=q6(c)),l){if(l!==i.kind){let p=V6(i.kind);e.reportError(new dP.GraphQLError(`Cannot extend non-${p} type "${a}".`,{nodes:o?[o,i]:i}))}}else{let p=Object.keys(k(k({},n),t==null?void 0:t.getTypeMap())),N=(0,U6.suggestionList)(a,p);e.reportError(new dP.GraphQLError(`Cannot extend type "${a}" because it is not defined.`+(0,B6.didYouMean)(N),{nodes:i.name}))}}}var x6={[hn.Kind.SCALAR_TYPE_DEFINITION]:hn.Kind.SCALAR_TYPE_EXTENSION,[hn.Kind.OBJECT_TYPE_DEFINITION]:hn.Kind.OBJECT_TYPE_EXTENSION,[hn.Kind.INTERFACE_TYPE_DEFINITION]:hn.Kind.INTERFACE_TYPE_EXTENSION,[hn.Kind.UNION_TYPE_DEFINITION]:hn.Kind.UNION_TYPE_EXTENSION,[hn.Kind.ENUM_TYPE_DEFINITION]:hn.Kind.ENUM_TYPE_EXTENSION,[hn.Kind.INPUT_OBJECT_TYPE_DEFINITION]:hn.Kind.INPUT_OBJECT_TYPE_EXTENSION};function q6(e){if((0,Gc.isScalarType)(e))return hn.Kind.SCALAR_TYPE_EXTENSION;if((0,Gc.isObjectType)(e))return hn.Kind.OBJECT_TYPE_EXTENSION;if((0,Gc.isInterfaceType)(e))return hn.Kind.INTERFACE_TYPE_EXTENSION;if((0,Gc.isUnionType)(e))return hn.Kind.UNION_TYPE_EXTENSION;if((0,Gc.isEnumType)(e))return hn.Kind.ENUM_TYPE_EXTENSION;if((0,Gc.isInputObjectType)(e))return hn.Kind.INPUT_OBJECT_TYPE_EXTENSION;(0,fP.invariant)(!1,"Unexpected type: "+(0,pP.inspect)(e))}function V6(e){switch(e){case hn.Kind.SCALAR_TYPE_EXTENSION:return"scalar";case hn.Kind.OBJECT_TYPE_EXTENSION:return"object";case hn.Kind.INTERFACE_TYPE_EXTENSION:return"interface";case hn.Kind.UNION_TYPE_EXTENSION:return"union";case hn.Kind.ENUM_TYPE_EXTENSION:return"enum";case hn.Kind.INPUT_OBJECT_TYPE_EXTENSION:return"input object";default:(0,fP.invariant)(!1,"Unexpected kind: "+(0,pP.inspect)(e))}}});var ag=P(km=>{"use strict";f();T();m();Object.defineProperty(km,"__esModule",{value:!0});km.ProvidedRequiredArgumentsOnDirectivesRule=EP;km.ProvidedRequiredArgumentsRule=G6;var TP=Yt(),mP=Mo(),NP=Je(),hP=Rt(),j6=ci(),ig=Ft(),K6=$r();function G6(e){return Q(k({},EP(e)),{Field:{leave(t){var n;let r=e.getFieldDef();if(!r)return!1;let i=new Set((n=t.arguments)===null||n===void 0?void 0:n.map(a=>a.name.value));for(let a of r.args)if(!i.has(a.name)&&(0,ig.isRequiredArgument)(a)){let o=(0,TP.inspect)(a.type);e.reportError(new NP.GraphQLError(`Field "${r.name}" argument "${a.name}" of type "${o}" is required, but it was not provided.`,{nodes:t}))}}}})}function EP(e){var t;let n=Object.create(null),r=e.getSchema(),i=(t=r==null?void 0:r.getDirectives())!==null&&t!==void 0?t:K6.specifiedDirectives;for(let c of i)n[c.name]=(0,mP.keyMap)(c.args.filter(ig.isRequiredArgument),l=>l.name);let a=e.getDocument().definitions;for(let c of a)if(c.kind===hP.Kind.DIRECTIVE_DEFINITION){var o;let l=(o=c.arguments)!==null&&o!==void 0?o:[];n[c.name.value]=(0,mP.keyMap)(l.filter($6),p=>p.name.value)}return{Directive:{leave(c){let l=c.name.value,p=n[l];if(p){var N;let y=(N=c.arguments)!==null&&N!==void 0?N:[],g=new Set(y.map(_=>_.name.value));for(let[_,F]of Object.entries(p))if(!g.has(_)){let B=(0,ig.isType)(F.type)?(0,TP.inspect)(F.type):(0,j6.print)(F.type);e.reportError(new NP.GraphQLError(`Directive "@${l}" argument "${_}" of type "${B}" is required, but it was not provided.`,{nodes:c}))}}}}}}function $6(e){return e.type.kind===hP.Kind.NON_NULL_TYPE&&e.defaultValue==null}});var og=P(sg=>{"use strict";f();T();m();Object.defineProperty(sg,"__esModule",{value:!0});sg.ScalarLeafsRule=Q6;var yP=Yt(),IP=Je(),gP=Ft();function Q6(e){return{Field(t){let n=e.getType(),r=t.selectionSet;if(n){if((0,gP.isLeafType)((0,gP.getNamedType)(n))){if(r){let i=t.name.value,a=(0,yP.inspect)(n);e.reportError(new IP.GraphQLError(`Field "${i}" must not have a selection since type "${a}" has no subfields.`,{nodes:r}))}}else if(!r){let i=t.name.value,a=(0,yP.inspect)(n);e.reportError(new IP.GraphQLError(`Field "${i}" of type "${a}" must have a selection of subfields. Did you mean "${i} { ... }"?`,{nodes:t}))}}}}}});var cg=P(ug=>{"use strict";f();T();m();Object.defineProperty(ug,"__esModule",{value:!0});ug.printPathArray=Y6;function Y6(e){return e.map(t=>typeof t=="number"?"["+t.toString()+"]":"."+t).join("")}});var Bd=P(Mm=>{"use strict";f();T();m();Object.defineProperty(Mm,"__esModule",{value:!0});Mm.addPath=J6;Mm.pathToArray=H6;function J6(e,t,n){return{prev:e,key:t,typename:n}}function H6(e){let t=[],n=e;for(;n;)t.push(n.key),n=n.prev;return t.reverse()}});var dg=P(lg=>{"use strict";f();T();m();Object.defineProperty(lg,"__esModule",{value:!0});lg.coerceInputValue=nz;var z6=ko(),xm=Yt(),W6=Ir(),X6=Dm(),Z6=Sa(),na=Bd(),ez=cg(),tz=xo(),fs=Je(),Ud=Ft();function nz(e,t,n=rz){return kd(e,t,n,void 0)}function rz(e,t,n){let r="Invalid value "+(0,xm.inspect)(t);throw e.length>0&&(r+=` at "value${(0,ez.printPathArray)(e)}"`),n.message=r+": "+n.message,n}function kd(e,t,n,r){if((0,Ud.isNonNullType)(t)){if(e!=null)return kd(e,t.ofType,n,r);n((0,na.pathToArray)(r),e,new fs.GraphQLError(`Expected non-nullable type "${(0,xm.inspect)(t)}" not to be null.`));return}if(e==null)return null;if((0,Ud.isListType)(t)){let i=t.ofType;return(0,X6.isIterableObject)(e)?Array.from(e,(a,o)=>{let c=(0,na.addPath)(r,o,void 0);return kd(a,i,n,c)}):[kd(e,i,n,r)]}if((0,Ud.isInputObjectType)(t)){if(!(0,Z6.isObjectLike)(e)){n((0,na.pathToArray)(r),e,new fs.GraphQLError(`Expected type "${t.name}" to be an object.`));return}let i={},a=t.getFields();for(let o of Object.values(a)){let c=e[o.name];if(c===void 0){if(o.defaultValue!==void 0)i[o.name]=o.defaultValue;else if((0,Ud.isNonNullType)(o.type)){let l=(0,xm.inspect)(o.type);n((0,na.pathToArray)(r),e,new fs.GraphQLError(`Field "${o.name}" of required type "${l}" was not provided.`))}continue}i[o.name]=kd(c,o.type,n,(0,na.addPath)(r,o.name,t.name))}for(let o of Object.keys(e))if(!a[o]){let c=(0,tz.suggestionList)(o,Object.keys(t.getFields()));n((0,na.pathToArray)(r),e,new fs.GraphQLError(`Field "${o}" is not defined by type "${t.name}".`+(0,z6.didYouMean)(c)))}if(t.isOneOf){let o=Object.keys(i);o.length!==1&&n((0,na.pathToArray)(r),e,new fs.GraphQLError(`Exactly one key must be specified for OneOf type "${t.name}".`));let c=o[0],l=i[c];l===null&&n((0,na.pathToArray)(r).concat(c),l,new fs.GraphQLError(`Field "${c}" must be non-null.`))}return i}if((0,Ud.isLeafType)(t)){let i;try{i=t.parseValue(e)}catch(a){a instanceof fs.GraphQLError?n((0,na.pathToArray)(r),e,a):n((0,na.pathToArray)(r),e,new fs.GraphQLError(`Expected type "${t.name}". `+a.message,{originalError:a}));return}return i===void 0&&n((0,na.pathToArray)(r),e,new fs.GraphQLError(`Expected type "${t.name}".`)),i}(0,W6.invariant)(!1,"Unexpected input type: "+(0,xm.inspect)(t))}});var xd=P(pg=>{"use strict";f();T();m();Object.defineProperty(pg,"__esModule",{value:!0});pg.valueFromAST=Md;var iz=Yt(),az=Ir(),sz=Mo(),$c=Rt(),ku=Ft();function Md(e,t,n){if(e){if(e.kind===$c.Kind.VARIABLE){let r=e.name.value;if(n==null||n[r]===void 0)return;let i=n[r];return i===null&&(0,ku.isNonNullType)(t)?void 0:i}if((0,ku.isNonNullType)(t))return e.kind===$c.Kind.NULL?void 0:Md(e,t.ofType,n);if(e.kind===$c.Kind.NULL)return null;if((0,ku.isListType)(t)){let r=t.ofType;if(e.kind===$c.Kind.LIST){let a=[];for(let o of e.values)if(_P(o,n)){if((0,ku.isNonNullType)(r))return;a.push(null)}else{let c=Md(o,r,n);if(c===void 0)return;a.push(c)}return a}let i=Md(e,r,n);return i===void 0?void 0:[i]}if((0,ku.isInputObjectType)(t)){if(e.kind!==$c.Kind.OBJECT)return;let r=Object.create(null),i=(0,sz.keyMap)(e.fields,a=>a.name.value);for(let a of Object.values(t.getFields())){let o=i[a.name];if(!o||_P(o.value,n)){if(a.defaultValue!==void 0)r[a.name]=a.defaultValue;else if((0,ku.isNonNullType)(a.type))return;continue}let c=Md(o.value,a.type,n);if(c===void 0)return;r[a.name]=c}if(t.isOneOf){let a=Object.keys(r);if(a.length!==1||r[a[0]]===null)return}return r}if((0,ku.isLeafType)(t)){let r;try{r=t.parseLiteral(e,n)}catch(i){return}return r===void 0?void 0:r}(0,az.invariant)(!1,"Unexpected input type: "+(0,iz.inspect)(t))}}function _P(e,t){return e.kind===$c.Kind.VARIABLE&&(t==null||t[e.name.value]===void 0)}});var Jc=P(qd=>{"use strict";f();T();m();Object.defineProperty(qd,"__esModule",{value:!0});qd.getArgumentValues=bP;qd.getDirectiveValues=fz;qd.getVariableValues=dz;var Qc=Yt(),oz=Mo(),uz=cg(),ms=Je(),vP=Rt(),SP=ci(),Yc=Ft(),cz=dg(),lz=Ra(),OP=xd();function dz(e,t,n,r){let i=[],a=r==null?void 0:r.maxErrors;try{let o=pz(e,t,n,c=>{if(a!=null&&i.length>=a)throw new ms.GraphQLError("Too many errors processing variables, error limit reached. Execution aborted.");i.push(c)});if(i.length===0)return{coerced:o}}catch(o){i.push(o)}return{errors:i}}function pz(e,t,n,r){let i={};for(let a of t){let o=a.variable.name.value,c=(0,lz.typeFromAST)(e,a.type);if(!(0,Yc.isInputType)(c)){let p=(0,SP.print)(a.type);r(new ms.GraphQLError(`Variable "$${o}" expected value of type "${p}" which cannot be used as an input type.`,{nodes:a.type}));continue}if(!DP(n,o)){if(a.defaultValue)i[o]=(0,OP.valueFromAST)(a.defaultValue,c);else if((0,Yc.isNonNullType)(c)){let p=(0,Qc.inspect)(c);r(new ms.GraphQLError(`Variable "$${o}" of required type "${p}" was not provided.`,{nodes:a}))}continue}let l=n[o];if(l===null&&(0,Yc.isNonNullType)(c)){let p=(0,Qc.inspect)(c);r(new ms.GraphQLError(`Variable "$${o}" of non-null type "${p}" must not be null.`,{nodes:a}));continue}i[o]=(0,cz.coerceInputValue)(l,c,(p,N,y)=>{let g=`Variable "$${o}" got invalid value `+(0,Qc.inspect)(N);p.length>0&&(g+=` at "${o}${(0,uz.printPathArray)(p)}"`),r(new ms.GraphQLError(g+"; "+y.message,{nodes:a,originalError:y}))})}return i}function bP(e,t,n){var r;let i={},a=(r=t.arguments)!==null&&r!==void 0?r:[],o=(0,oz.keyMap)(a,c=>c.name.value);for(let c of e.args){let l=c.name,p=c.type,N=o[l];if(!N){if(c.defaultValue!==void 0)i[l]=c.defaultValue;else if((0,Yc.isNonNullType)(p))throw new ms.GraphQLError(`Argument "${l}" of required type "${(0,Qc.inspect)(p)}" was not provided.`,{nodes:t});continue}let y=N.value,g=y.kind===vP.Kind.NULL;if(y.kind===vP.Kind.VARIABLE){let F=y.name.value;if(n==null||!DP(n,F)){if(c.defaultValue!==void 0)i[l]=c.defaultValue;else if((0,Yc.isNonNullType)(p))throw new ms.GraphQLError(`Argument "${l}" of required type "${(0,Qc.inspect)(p)}" was provided the variable "$${F}" which was not provided a runtime value.`,{nodes:y});continue}g=n[F]==null}if(g&&(0,Yc.isNonNullType)(p))throw new ms.GraphQLError(`Argument "${l}" of non-null type "${(0,Qc.inspect)(p)}" must not be null.`,{nodes:y});let _=(0,OP.valueFromAST)(y,p,n);if(_===void 0)throw new ms.GraphQLError(`Argument "${l}" has invalid value ${(0,SP.print)(y)}.`,{nodes:y});i[l]=_}return i}function fz(e,t,n){var r;let i=(r=t.directives)===null||r===void 0?void 0:r.find(a=>a.name.value===e.name);if(i)return bP(e,i,n)}function DP(e,t){return Object.prototype.hasOwnProperty.call(e,t)}});var jm=P(Vm=>{"use strict";f();T();m();Object.defineProperty(Vm,"__esModule",{value:!0});Vm.collectFields=Nz;Vm.collectSubfields=hz;var fg=Rt(),mz=Ft(),AP=$r(),Tz=Ra(),RP=Jc();function Nz(e,t,n,r,i){let a=new Map;return qm(e,t,n,r,i,a,new Set),a}function hz(e,t,n,r,i){let a=new Map,o=new Set;for(let c of i)c.selectionSet&&qm(e,t,n,r,c.selectionSet,a,o);return a}function qm(e,t,n,r,i,a,o){for(let c of i.selections)switch(c.kind){case fg.Kind.FIELD:{if(!mg(n,c))continue;let l=Ez(c),p=a.get(l);p!==void 0?p.push(c):a.set(l,[c]);break}case fg.Kind.INLINE_FRAGMENT:{if(!mg(n,c)||!FP(e,c,r))continue;qm(e,t,n,r,c.selectionSet,a,o);break}case fg.Kind.FRAGMENT_SPREAD:{let l=c.name.value;if(o.has(l)||!mg(n,c))continue;o.add(l);let p=t[l];if(!p||!FP(e,p,r))continue;qm(e,t,n,r,p.selectionSet,a,o);break}}}function mg(e,t){let n=(0,RP.getDirectiveValues)(AP.GraphQLSkipDirective,t,e);if((n==null?void 0:n.if)===!0)return!1;let r=(0,RP.getDirectiveValues)(AP.GraphQLIncludeDirective,t,e);return(r==null?void 0:r.if)!==!1}function FP(e,t,n){let r=t.typeCondition;if(!r)return!0;let i=(0,Tz.typeFromAST)(e,r);return i===n?!0:(0,mz.isAbstractType)(i)?e.isSubType(i,n):!1}function Ez(e){return e.alias?e.alias.value:e.name.value}});var Ng=P(Tg=>{"use strict";f();T();m();Object.defineProperty(Tg,"__esModule",{value:!0});Tg.SingleFieldSubscriptionsRule=gz;var PP=Je(),yz=Rt(),Iz=jm();function gz(e){return{OperationDefinition(t){if(t.operation==="subscription"){let n=e.getSchema(),r=n.getSubscriptionType();if(r){let i=t.name?t.name.value:null,a=Object.create(null),o=e.getDocument(),c=Object.create(null);for(let p of o.definitions)p.kind===yz.Kind.FRAGMENT_DEFINITION&&(c[p.name.value]=p);let l=(0,Iz.collectFields)(n,c,a,r,t.selectionSet);if(l.size>1){let y=[...l.values()].slice(1).flat();e.reportError(new PP.GraphQLError(i!=null?`Subscription "${i}" must select only one top level field.`:"Anonymous Subscription must select only one top level field.",{nodes:y}))}for(let p of l.values())p[0].name.value.startsWith("__")&&e.reportError(new PP.GraphQLError(i!=null?`Subscription "${i}" must not select an introspection top level field.`:"Anonymous Subscription must not select an introspection top level field.",{nodes:p}))}}}}}});var Km=P(hg=>{"use strict";f();T();m();Object.defineProperty(hg,"__esModule",{value:!0});hg.groupBy=_z;function _z(e,t){let n=new Map;for(let r of e){let i=t(r),a=n.get(i);a===void 0?n.set(i,[r]):a.push(r)}return n}});var yg=P(Eg=>{"use strict";f();T();m();Object.defineProperty(Eg,"__esModule",{value:!0});Eg.UniqueArgumentDefinitionNamesRule=Oz;var vz=Km(),Sz=Je();function Oz(e){return{DirectiveDefinition(r){var i;let a=(i=r.arguments)!==null&&i!==void 0?i:[];return n(`@${r.name.value}`,a)},InterfaceTypeDefinition:t,InterfaceTypeExtension:t,ObjectTypeDefinition:t,ObjectTypeExtension:t};function t(r){var i;let a=r.name.value,o=(i=r.fields)!==null&&i!==void 0?i:[];for(let l of o){var c;let p=l.name.value,N=(c=l.arguments)!==null&&c!==void 0?c:[];n(`${a}.${p}`,N)}return!1}function n(r,i){let a=(0,vz.groupBy)(i,o=>o.name.value);for(let[o,c]of a)c.length>1&&e.reportError(new Sz.GraphQLError(`Argument "${r}(${o}:)" can only be defined once.`,{nodes:c.map(l=>l.name)}));return!1}}});var gg=P(Ig=>{"use strict";f();T();m();Object.defineProperty(Ig,"__esModule",{value:!0});Ig.UniqueArgumentNamesRule=Az;var bz=Km(),Dz=Je();function Az(e){return{Field:t,Directive:t};function t(n){var r;let i=(r=n.arguments)!==null&&r!==void 0?r:[],a=(0,bz.groupBy)(i,o=>o.name.value);for(let[o,c]of a)c.length>1&&e.reportError(new Dz.GraphQLError(`There can be only one argument named "${o}".`,{nodes:c.map(l=>l.name)}))}}});var vg=P(_g=>{"use strict";f();T();m();Object.defineProperty(_g,"__esModule",{value:!0});_g.UniqueDirectiveNamesRule=Rz;var wP=Je();function Rz(e){let t=Object.create(null),n=e.getSchema();return{DirectiveDefinition(r){let i=r.name.value;if(n!=null&&n.getDirective(i)){e.reportError(new wP.GraphQLError(`Directive "@${i}" already exists in the schema. It cannot be redefined.`,{nodes:r.name}));return}return t[i]?e.reportError(new wP.GraphQLError(`There can be only one directive named "@${i}".`,{nodes:[t[i],r.name]})):t[i]=r.name,!1}}}});var bg=P(Og=>{"use strict";f();T();m();Object.defineProperty(Og,"__esModule",{value:!0});Og.UniqueDirectivesPerLocationRule=wz;var Fz=Je(),Sg=Rt(),LP=Uu(),Pz=$r();function wz(e){let t=Object.create(null),n=e.getSchema(),r=n?n.getDirectives():Pz.specifiedDirectives;for(let c of r)t[c.name]=!c.isRepeatable;let i=e.getDocument().definitions;for(let c of i)c.kind===Sg.Kind.DIRECTIVE_DEFINITION&&(t[c.name.value]=!c.repeatable);let a=Object.create(null),o=Object.create(null);return{enter(c){if(!("directives"in c)||!c.directives)return;let l;if(c.kind===Sg.Kind.SCHEMA_DEFINITION||c.kind===Sg.Kind.SCHEMA_EXTENSION)l=a;else if((0,LP.isTypeDefinitionNode)(c)||(0,LP.isTypeExtensionNode)(c)){let p=c.name.value;l=o[p],l===void 0&&(o[p]=l=Object.create(null))}else l=Object.create(null);for(let p of c.directives){let N=p.name.value;t[N]&&(l[N]?e.reportError(new Fz.GraphQLError(`The directive "@${N}" can only be used once at this location.`,{nodes:[l[N],p]})):l[N]=p)}}}}});var Ag=P(Dg=>{"use strict";f();T();m();Object.defineProperty(Dg,"__esModule",{value:!0});Dg.UniqueEnumValueNamesRule=Cz;var CP=Je(),Lz=Ft();function Cz(e){let t=e.getSchema(),n=t?t.getTypeMap():Object.create(null),r=Object.create(null);return{EnumTypeDefinition:i,EnumTypeExtension:i};function i(a){var o;let c=a.name.value;r[c]||(r[c]=Object.create(null));let l=(o=a.values)!==null&&o!==void 0?o:[],p=r[c];for(let N of l){let y=N.name.value,g=n[c];(0,Lz.isEnumType)(g)&&g.getValue(y)?e.reportError(new CP.GraphQLError(`Enum value "${c}.${y}" already exists in the schema. It cannot also be defined in this type extension.`,{nodes:N.name})):p[y]?e.reportError(new CP.GraphQLError(`Enum value "${c}.${y}" can only be defined once.`,{nodes:[p[y],N.name]})):p[y]=N.name}return!1}}});var Pg=P(Fg=>{"use strict";f();T();m();Object.defineProperty(Fg,"__esModule",{value:!0});Fg.UniqueFieldDefinitionNamesRule=Bz;var BP=Je(),Rg=Ft();function Bz(e){let t=e.getSchema(),n=t?t.getTypeMap():Object.create(null),r=Object.create(null);return{InputObjectTypeDefinition:i,InputObjectTypeExtension:i,InterfaceTypeDefinition:i,InterfaceTypeExtension:i,ObjectTypeDefinition:i,ObjectTypeExtension:i};function i(a){var o;let c=a.name.value;r[c]||(r[c]=Object.create(null));let l=(o=a.fields)!==null&&o!==void 0?o:[],p=r[c];for(let N of l){let y=N.name.value;Uz(n[c],y)?e.reportError(new BP.GraphQLError(`Field "${c}.${y}" already exists in the schema. It cannot also be defined in this type extension.`,{nodes:N.name})):p[y]?e.reportError(new BP.GraphQLError(`Field "${c}.${y}" can only be defined once.`,{nodes:[p[y],N.name]})):p[y]=N.name}return!1}}function Uz(e,t){return(0,Rg.isObjectType)(e)||(0,Rg.isInterfaceType)(e)||(0,Rg.isInputObjectType)(e)?e.getFields()[t]!=null:!1}});var Lg=P(wg=>{"use strict";f();T();m();Object.defineProperty(wg,"__esModule",{value:!0});wg.UniqueFragmentNamesRule=Mz;var kz=Je();function Mz(e){let t=Object.create(null);return{OperationDefinition:()=>!1,FragmentDefinition(n){let r=n.name.value;return t[r]?e.reportError(new kz.GraphQLError(`There can be only one fragment named "${r}".`,{nodes:[t[r],n.name]})):t[r]=n.name,!1}}}});var Bg=P(Cg=>{"use strict";f();T();m();Object.defineProperty(Cg,"__esModule",{value:!0});Cg.UniqueInputFieldNamesRule=Vz;var xz=Ir(),qz=Je();function Vz(e){let t=[],n=Object.create(null);return{ObjectValue:{enter(){t.push(n),n=Object.create(null)},leave(){let r=t.pop();r||(0,xz.invariant)(!1),n=r}},ObjectField(r){let i=r.name.value;n[i]?e.reportError(new qz.GraphQLError(`There can be only one input field named "${i}".`,{nodes:[n[i],r.name]})):n[i]=r.name}}}});var kg=P(Ug=>{"use strict";f();T();m();Object.defineProperty(Ug,"__esModule",{value:!0});Ug.UniqueOperationNamesRule=Kz;var jz=Je();function Kz(e){let t=Object.create(null);return{OperationDefinition(n){let r=n.name;return r&&(t[r.value]?e.reportError(new jz.GraphQLError(`There can be only one operation named "${r.value}".`,{nodes:[t[r.value],r]})):t[r.value]=r),!1},FragmentDefinition:()=>!1}}});var xg=P(Mg=>{"use strict";f();T();m();Object.defineProperty(Mg,"__esModule",{value:!0});Mg.UniqueOperationTypesRule=Gz;var UP=Je();function Gz(e){let t=e.getSchema(),n=Object.create(null),r=t?{query:t.getQueryType(),mutation:t.getMutationType(),subscription:t.getSubscriptionType()}:{};return{SchemaDefinition:i,SchemaExtension:i};function i(a){var o;let c=(o=a.operationTypes)!==null&&o!==void 0?o:[];for(let l of c){let p=l.operation,N=n[p];r[p]?e.reportError(new UP.GraphQLError(`Type for ${p} already defined in the schema. It cannot be redefined.`,{nodes:l})):N?e.reportError(new UP.GraphQLError(`There can be only one ${p} type in schema.`,{nodes:[N,l]})):n[p]=l}return!1}}});var Vg=P(qg=>{"use strict";f();T();m();Object.defineProperty(qg,"__esModule",{value:!0});qg.UniqueTypeNamesRule=$z;var kP=Je();function $z(e){let t=Object.create(null),n=e.getSchema();return{ScalarTypeDefinition:r,ObjectTypeDefinition:r,InterfaceTypeDefinition:r,UnionTypeDefinition:r,EnumTypeDefinition:r,InputObjectTypeDefinition:r};function r(i){let a=i.name.value;if(n!=null&&n.getType(a)){e.reportError(new kP.GraphQLError(`Type "${a}" already exists in the schema. It cannot also be defined in this type definition.`,{nodes:i.name}));return}return t[a]?e.reportError(new kP.GraphQLError(`There can be only one type named "${a}".`,{nodes:[t[a],i.name]})):t[a]=i.name,!1}}});var Kg=P(jg=>{"use strict";f();T();m();Object.defineProperty(jg,"__esModule",{value:!0});jg.UniqueVariableNamesRule=Jz;var Qz=Km(),Yz=Je();function Jz(e){return{OperationDefinition(t){var n;let r=(n=t.variableDefinitions)!==null&&n!==void 0?n:[],i=(0,Qz.groupBy)(r,a=>a.variable.name.value);for(let[a,o]of i)o.length>1&&e.reportError(new Yz.GraphQLError(`There can be only one variable named "$${a}".`,{nodes:o.map(c=>c.variable.name)}))}}}});var Qg=P($g=>{"use strict";f();T();m();Object.defineProperty($g,"__esModule",{value:!0});$g.ValuesOfCorrectTypeRule=Xz;var Hz=ko(),Vd=Yt(),zz=Mo(),Wz=xo(),Pa=Je(),Gg=Rt(),Gm=ci(),Fa=Ft();function Xz(e){let t={};return{OperationDefinition:{enter(){t={}}},VariableDefinition(n){t[n.variable.name.value]=n},ListValue(n){let r=(0,Fa.getNullableType)(e.getParentInputType());if(!(0,Fa.isListType)(r))return Mu(e,n),!1},ObjectValue(n){let r=(0,Fa.getNamedType)(e.getInputType());if(!(0,Fa.isInputObjectType)(r))return Mu(e,n),!1;let i=(0,zz.keyMap)(n.fields,a=>a.name.value);for(let a of Object.values(r.getFields()))if(!i[a.name]&&(0,Fa.isRequiredInputField)(a)){let c=(0,Vd.inspect)(a.type);e.reportError(new Pa.GraphQLError(`Field "${r.name}.${a.name}" of required type "${c}" was not provided.`,{nodes:n}))}r.isOneOf&&Zz(e,n,r,i,t)},ObjectField(n){let r=(0,Fa.getNamedType)(e.getParentInputType());if(!e.getInputType()&&(0,Fa.isInputObjectType)(r)){let a=(0,Wz.suggestionList)(n.name.value,Object.keys(r.getFields()));e.reportError(new Pa.GraphQLError(`Field "${n.name.value}" is not defined by type "${r.name}".`+(0,Hz.didYouMean)(a),{nodes:n}))}},NullValue(n){let r=e.getInputType();(0,Fa.isNonNullType)(r)&&e.reportError(new Pa.GraphQLError(`Expected value of type "${(0,Vd.inspect)(r)}", found ${(0,Gm.print)(n)}.`,{nodes:n}))},EnumValue:n=>Mu(e,n),IntValue:n=>Mu(e,n),FloatValue:n=>Mu(e,n),StringValue:n=>Mu(e,n),BooleanValue:n=>Mu(e,n)}}function Mu(e,t){let n=e.getInputType();if(!n)return;let r=(0,Fa.getNamedType)(n);if(!(0,Fa.isLeafType)(r)){let i=(0,Vd.inspect)(n);e.reportError(new Pa.GraphQLError(`Expected value of type "${i}", found ${(0,Gm.print)(t)}.`,{nodes:t}));return}try{if(r.parseLiteral(t,void 0)===void 0){let a=(0,Vd.inspect)(n);e.reportError(new Pa.GraphQLError(`Expected value of type "${a}", found ${(0,Gm.print)(t)}.`,{nodes:t}))}}catch(i){let a=(0,Vd.inspect)(n);i instanceof Pa.GraphQLError?e.reportError(i):e.reportError(new Pa.GraphQLError(`Expected value of type "${a}", found ${(0,Gm.print)(t)}; `+i.message,{nodes:t,originalError:i}))}}function Zz(e,t,n,r,i){var a;let o=Object.keys(r);if(o.length!==1){e.reportError(new Pa.GraphQLError(`OneOf Input Object "${n.name}" must specify exactly one key.`,{nodes:[t]}));return}let l=(a=r[o[0]])===null||a===void 0?void 0:a.value,p=!l||l.kind===Gg.Kind.NULL,N=(l==null?void 0:l.kind)===Gg.Kind.VARIABLE;if(p){e.reportError(new Pa.GraphQLError(`Field "${n.name}.${o[0]}" must be non-null.`,{nodes:[t]}));return}if(N){let y=l.name.value;i[y].type.kind!==Gg.Kind.NON_NULL_TYPE&&e.reportError(new Pa.GraphQLError(`Variable "${y}" must be non-nullable to be used for OneOf Input Object "${n.name}".`,{nodes:[t]}))}}});var Jg=P(Yg=>{"use strict";f();T();m();Object.defineProperty(Yg,"__esModule",{value:!0});Yg.VariablesAreInputTypesRule=i4;var e4=Je(),t4=ci(),n4=Ft(),r4=Ra();function i4(e){return{VariableDefinition(t){let n=(0,r4.typeFromAST)(e.getSchema(),t.type);if(n!==void 0&&!(0,n4.isInputType)(n)){let r=t.variable.name.value,i=(0,t4.print)(t.type);e.reportError(new e4.GraphQLError(`Variable "$${r}" cannot be non-input type "${i}".`,{nodes:t.type}))}}}}});var zg=P(Hg=>{"use strict";f();T();m();Object.defineProperty(Hg,"__esModule",{value:!0});Hg.VariablesInAllowedPositionRule=u4;var MP=Yt(),a4=Je(),s4=Rt(),xP=Ft(),qP=_d(),o4=Ra();function u4(e){let t=Object.create(null);return{OperationDefinition:{enter(){t=Object.create(null)},leave(n){let r=e.getRecursiveVariableUsages(n);for(let{node:i,type:a,defaultValue:o}of r){let c=i.name.value,l=t[c];if(l&&a){let p=e.getSchema(),N=(0,o4.typeFromAST)(p,l.type);if(N&&!c4(p,N,l.defaultValue,a,o)){let y=(0,MP.inspect)(N),g=(0,MP.inspect)(a);e.reportError(new a4.GraphQLError(`Variable "$${c}" of type "${y}" used in position expecting type "${g}".`,{nodes:[l,i]}))}}}}},VariableDefinition(n){t[n.variable.name.value]=n}}}function c4(e,t,n,r,i){if((0,xP.isNonNullType)(r)&&!(0,xP.isNonNullType)(t)){if(!(n!=null&&n.kind!==s4.Kind.NULL)&&!(i!==void 0))return!1;let c=r.ofType;return(0,qP.isTypeSubTypeOf)(e,t,c)}return(0,qP.isTypeSubTypeOf)(e,t,r)}});var Wg=P(Ko=>{"use strict";f();T();m();Object.defineProperty(Ko,"__esModule",{value:!0});Ko.specifiedSDLRules=Ko.specifiedRules=Ko.recommendedRules=void 0;var l4=mI(),d4=NI(),p4=EI(),VP=yI(),jP=vI(),f4=OI(),KP=AI(),m4=FI(),T4=wI(),N4=CI(),h4=UI(),E4=MI(),y4=qI(),I4=jI(),g4=XI(),_4=tg(),v4=rg(),GP=ag(),S4=og(),O4=Ng(),b4=yg(),$P=gg(),D4=vg(),QP=bg(),A4=Ag(),R4=Pg(),F4=Lg(),YP=Bg(),P4=kg(),w4=xg(),L4=Vg(),C4=Kg(),B4=Qg(),U4=Jg(),k4=zg(),JP=Object.freeze([N4.MaxIntrospectionDepthRule]);Ko.recommendedRules=JP;var M4=Object.freeze([l4.ExecutableDefinitionsRule,P4.UniqueOperationNamesRule,m4.LoneAnonymousOperationRule,O4.SingleFieldSubscriptionsRule,KP.KnownTypeNamesRule,p4.FragmentsOnCompositeTypesRule,U4.VariablesAreInputTypesRule,S4.ScalarLeafsRule,d4.FieldsOnCorrectTypeRule,F4.UniqueFragmentNamesRule,f4.KnownFragmentNamesRule,y4.NoUnusedFragmentsRule,_4.PossibleFragmentSpreadsRule,h4.NoFragmentCyclesRule,C4.UniqueVariableNamesRule,E4.NoUndefinedVariablesRule,I4.NoUnusedVariablesRule,jP.KnownDirectivesRule,QP.UniqueDirectivesPerLocationRule,VP.KnownArgumentNamesRule,$P.UniqueArgumentNamesRule,B4.ValuesOfCorrectTypeRule,GP.ProvidedRequiredArgumentsRule,k4.VariablesInAllowedPositionRule,g4.OverlappingFieldsCanBeMergedRule,YP.UniqueInputFieldNamesRule,...JP]);Ko.specifiedRules=M4;var x4=Object.freeze([T4.LoneSchemaDefinitionRule,w4.UniqueOperationTypesRule,L4.UniqueTypeNamesRule,A4.UniqueEnumValueNamesRule,R4.UniqueFieldDefinitionNamesRule,b4.UniqueArgumentDefinitionNamesRule,D4.UniqueDirectiveNamesRule,KP.KnownTypeNamesRule,jP.KnownDirectivesRule,QP.UniqueDirectivesPerLocationRule,v4.PossibleTypeExtensionsRule,VP.KnownArgumentNamesOnDirectivesRule,$P.UniqueArgumentNamesRule,YP.UniqueInputFieldNamesRule,GP.ProvidedRequiredArgumentsOnDirectivesRule]);Ko.specifiedSDLRules=x4});var e_=P(Go=>{"use strict";f();T();m();Object.defineProperty(Go,"__esModule",{value:!0});Go.ValidationContext=Go.SDLValidationContext=Go.ASTValidationContext=void 0;var HP=Rt(),q4=Au(),zP=Pm(),jd=class{constructor(t,n){this._ast=t,this._fragments=void 0,this._fragmentSpreads=new Map,this._recursivelyReferencedFragments=new Map,this._onError=n}get[Symbol.toStringTag](){return"ASTValidationContext"}reportError(t){this._onError(t)}getDocument(){return this._ast}getFragment(t){let n;if(this._fragments)n=this._fragments;else{n=Object.create(null);for(let r of this.getDocument().definitions)r.kind===HP.Kind.FRAGMENT_DEFINITION&&(n[r.name.value]=r);this._fragments=n}return n[t]}getFragmentSpreads(t){let n=this._fragmentSpreads.get(t);if(!n){n=[];let r=[t],i;for(;i=r.pop();)for(let a of i.selections)a.kind===HP.Kind.FRAGMENT_SPREAD?n.push(a):a.selectionSet&&r.push(a.selectionSet);this._fragmentSpreads.set(t,n)}return n}getRecursivelyReferencedFragments(t){let n=this._recursivelyReferencedFragments.get(t);if(!n){n=[];let r=Object.create(null),i=[t.selectionSet],a;for(;a=i.pop();)for(let o of this.getFragmentSpreads(a)){let c=o.name.value;if(r[c]!==!0){r[c]=!0;let l=this.getFragment(c);l&&(n.push(l),i.push(l.selectionSet))}}this._recursivelyReferencedFragments.set(t,n)}return n}};Go.ASTValidationContext=jd;var Xg=class extends jd{constructor(t,n,r){super(t,r),this._schema=n}get[Symbol.toStringTag](){return"SDLValidationContext"}getSchema(){return this._schema}};Go.SDLValidationContext=Xg;var Zg=class extends jd{constructor(t,n,r,i){super(n,i),this._schema=t,this._typeInfo=r,this._variableUsages=new Map,this._recursiveVariableUsages=new Map}get[Symbol.toStringTag](){return"ValidationContext"}getSchema(){return this._schema}getVariableUsages(t){let n=this._variableUsages.get(t);if(!n){let r=[],i=new zP.TypeInfo(this._schema);(0,q4.visit)(t,(0,zP.visitWithTypeInfo)(i,{VariableDefinition:()=>!1,Variable(a){r.push({node:a,type:i.getInputType(),defaultValue:i.getDefaultValue()})}})),n=r,this._variableUsages.set(t,n)}return n}getRecursiveVariableUsages(t){let n=this._recursiveVariableUsages.get(t);if(!n){n=this.getVariableUsages(t);for(let r of this.getRecursivelyReferencedFragments(t))n=n.concat(this.getVariableUsages(r));this._recursiveVariableUsages.set(t,n)}return n}getType(){return this._typeInfo.getType()}getParentType(){return this._typeInfo.getParentType()}getInputType(){return this._typeInfo.getInputType()}getParentInputType(){return this._typeInfo.getParentInputType()}getFieldDef(){return this._typeInfo.getFieldDef()}getDirective(){return this._typeInfo.getDirective()}getArgument(){return this._typeInfo.getArgument()}getEnumValue(){return this._typeInfo.getEnumValue()}};Go.ValidationContext=Zg});var zc=P(Hc=>{"use strict";f();T();m();Object.defineProperty(Hc,"__esModule",{value:!0});Hc.assertValidSDL=$4;Hc.assertValidSDLExtension=Q4;Hc.validate=G4;Hc.validateSDL=t_;var V4=Cr(),j4=Je(),$m=Au(),K4=wd(),WP=Pm(),XP=Wg(),ZP=e_();function G4(e,t,n=XP.specifiedRules,r,i=new WP.TypeInfo(e)){var a;let o=(a=r==null?void 0:r.maxErrors)!==null&&a!==void 0?a:100;t||(0,V4.devAssert)(!1,"Must provide document."),(0,K4.assertValidSchema)(e);let c=Object.freeze({}),l=[],p=new ZP.ValidationContext(e,t,i,y=>{if(l.length>=o)throw l.push(new j4.GraphQLError("Too many validation errors, error limit reached. Validation aborted.")),c;l.push(y)}),N=(0,$m.visitInParallel)(n.map(y=>y(p)));try{(0,$m.visit)(t,(0,WP.visitWithTypeInfo)(i,N))}catch(y){if(y!==c)throw y}return l}function t_(e,t,n=XP.specifiedSDLRules){let r=[],i=new ZP.SDLValidationContext(e,t,o=>{r.push(o)}),a=n.map(o=>o(i));return(0,$m.visit)(e,(0,$m.visitInParallel)(a)),r}function $4(e){let t=t_(e);if(t.length!==0)throw new Error(t.map(n=>n.message).join(` +`))}var oI=class{constructor(t){this._errors=[],this.schema=t}reportError(t,n){let r=Array.isArray(n)?n.filter(Boolean):n;this._errors.push(new N3.GraphQLError(t,{nodes:r}))}getErrors(){return this._errors}};function y3(e){let t=e.schema,n=t.getQueryType();if(!n)e.reportError("Query root type must be provided.",t.astNode);else if(!(0,Fn.isObjectType)(n)){var r;e.reportError(`Query root type must be Object type, it cannot be ${(0,_r.inspect)(n)}.`,(r=sI(t,aI.OperationTypeNode.QUERY))!==null&&r!==void 0?r:n.astNode)}let i=t.getMutationType();if(i&&!(0,Fn.isObjectType)(i)){var a;e.reportError(`Mutation root type must be Object type if provided, it cannot be ${(0,_r.inspect)(i)}.`,(a=sI(t,aI.OperationTypeNode.MUTATION))!==null&&a!==void 0?a:i.astNode)}let o=t.getSubscriptionType();if(o&&!(0,Fn.isObjectType)(o)){var c;e.reportError(`Subscription root type must be Object type if provided, it cannot be ${(0,_r.inspect)(o)}.`,(c=sI(t,aI.OperationTypeNode.SUBSCRIPTION))!==null&&c!==void 0?c:o.astNode)}}function sI(e,t){var n;return(n=[e.astNode,...e.extensionASTNodes].flatMap(r=>{var i;return(i=r==null?void 0:r.operationTypes)!==null&&i!==void 0?i:[]}).find(r=>r.operation===t))===null||n===void 0?void 0:n.type}function I3(e){for(let n of e.schema.getDirectives()){if(!(0,CF.isDirective)(n)){e.reportError(`Expected directive but got: ${(0,_r.inspect)(n)}.`,n==null?void 0:n.astNode);continue}ku(e,n);for(let r of n.args)if(ku(e,r),(0,Fn.isInputType)(r.type)||e.reportError(`The type of @${n.name}(${r.name}:) must be Input Type but got: ${(0,_r.inspect)(r.type)}.`,r.astNode),(0,Fn.isRequiredArgument)(r)&&r.deprecationReason!=null){var t;e.reportError(`Required argument @${n.name}(${r.name}:) cannot be deprecated.`,[uI(r.astNode),(t=r.astNode)===null||t===void 0?void 0:t.type])}}}function ku(e,t){t.name.startsWith("__")&&e.reportError(`Name "${t.name}" must not begin with "__", which is reserved by GraphQL introspection.`,t.astNode)}function g3(e){let t=A3(e),n=e.schema.getTypeMap();for(let r of Object.values(n)){if(!(0,Fn.isNamedType)(r)){e.reportError(`Expected GraphQL named type but got: ${(0,_r.inspect)(r)}.`,r.astNode);continue}(0,T3.isIntrospectionType)(r)||ku(e,r),(0,Fn.isObjectType)(r)||(0,Fn.isInterfaceType)(r)?(PF(e,r),wF(e,r)):(0,Fn.isUnionType)(r)?S3(e,r):(0,Fn.isEnumType)(r)?O3(e,r):(0,Fn.isInputObjectType)(r)&&(D3(e,r),t(r))}}function PF(e,t){let n=Object.values(t.getFields());n.length===0&&e.reportError(`Type ${t.name} must define one or more fields.`,[t.astNode,...t.extensionASTNodes]);for(let o of n){if(ku(e,o),!(0,Fn.isOutputType)(o.type)){var r;e.reportError(`The type of ${t.name}.${o.name} must be Output Type but got: ${(0,_r.inspect)(o.type)}.`,(r=o.astNode)===null||r===void 0?void 0:r.type)}for(let c of o.args){let l=c.name;if(ku(e,c),!(0,Fn.isInputType)(c.type)){var i;e.reportError(`The type of ${t.name}.${o.name}(${l}:) must be Input Type but got: ${(0,_r.inspect)(c.type)}.`,(i=c.astNode)===null||i===void 0?void 0:i.type)}if((0,Fn.isRequiredArgument)(c)&&c.deprecationReason!=null){var a;e.reportError(`Required argument ${t.name}.${o.name}(${l}:) cannot be deprecated.`,[uI(c.astNode),(a=c.astNode)===null||a===void 0?void 0:a.type])}}}}function wF(e,t){let n=Object.create(null);for(let r of t.getInterfaces()){if(!(0,Fn.isInterfaceType)(r)){e.reportError(`Type ${(0,_r.inspect)(t)} must only implement Interface types, it cannot implement ${(0,_r.inspect)(r)}.`,wd(t,r));continue}if(t===r){e.reportError(`Type ${t.name} cannot implement itself because it would create a circular reference.`,wd(t,r));continue}if(n[r.name]){e.reportError(`Type ${t.name} can only implement ${r.name} once.`,wd(t,r));continue}n[r.name]=!0,v3(e,t,r),_3(e,t,r)}}function _3(e,t,n){let r=t.getFields();for(let l of Object.values(n.getFields())){let p=l.name,T=r[p];if(!T){e.reportError(`Interface field ${n.name}.${p} expected but ${t.name} does not provide it.`,[l.astNode,t.astNode,...t.extensionASTNodes]);continue}if(!(0,FF.isTypeSubTypeOf)(e.schema,T.type,l.type)){var i,a;e.reportError(`Interface field ${n.name}.${p} expects type ${(0,_r.inspect)(l.type)} but ${t.name}.${p} is type ${(0,_r.inspect)(T.type)}.`,[(i=l.astNode)===null||i===void 0?void 0:i.type,(a=T.astNode)===null||a===void 0?void 0:a.type])}for(let y of l.args){let g=y.name,_=T.args.find(F=>F.name===g);if(!_){e.reportError(`Interface field argument ${n.name}.${p}(${g}:) expected but ${t.name}.${p} does not provide it.`,[y.astNode,T.astNode]);continue}if(!(0,FF.isEqualType)(y.type,_.type)){var o,c;e.reportError(`Interface field argument ${n.name}.${p}(${g}:) expects type ${(0,_r.inspect)(y.type)} but ${t.name}.${p}(${g}:) is type ${(0,_r.inspect)(_.type)}.`,[(o=y.astNode)===null||o===void 0?void 0:o.type,(c=_.astNode)===null||c===void 0?void 0:c.type])}}for(let y of T.args){let g=y.name;!l.args.find(F=>F.name===g)&&(0,Fn.isRequiredArgument)(y)&&e.reportError(`Object field ${t.name}.${p} includes required argument ${g} that is missing from the Interface field ${n.name}.${p}.`,[y.astNode,l.astNode])}}}function v3(e,t,n){let r=t.getInterfaces();for(let i of n.getInterfaces())r.includes(i)||e.reportError(i===t?`Type ${t.name} cannot implement ${n.name} because it would create a circular reference.`:`Type ${t.name} must implement ${i.name} because it is implemented by ${n.name}.`,[...wd(n,i),...wd(t,n)])}function S3(e,t){let n=t.getTypes();n.length===0&&e.reportError(`Union type ${t.name} must define one or more member types.`,[t.astNode,...t.extensionASTNodes]);let r=Object.create(null);for(let i of n){if(r[i.name]){e.reportError(`Union type ${t.name} can only include type ${i.name} once.`,LF(t,i.name));continue}r[i.name]=!0,(0,Fn.isObjectType)(i)||e.reportError(`Union type ${t.name} can only include Object types, it cannot include ${(0,_r.inspect)(i)}.`,LF(t,String(i)))}}function O3(e,t){let n=t.getValues();n.length===0&&e.reportError(`Enum type ${t.name} must define one or more values.`,[t.astNode,...t.extensionASTNodes]);for(let r of n)ku(e,r)}function D3(e,t){let n=Object.values(t.getFields());n.length===0&&e.reportError(`Input Object type ${t.name} must define one or more fields.`,[t.astNode,...t.extensionASTNodes]);for(let a of n){if(ku(e,a),!(0,Fn.isInputType)(a.type)){var r;e.reportError(`The type of ${t.name}.${a.name} must be Input Type but got: ${(0,_r.inspect)(a.type)}.`,(r=a.astNode)===null||r===void 0?void 0:r.type)}if((0,Fn.isRequiredInputField)(a)&&a.deprecationReason!=null){var i;e.reportError(`Required input field ${t.name}.${a.name} cannot be deprecated.`,[uI(a.astNode),(i=a.astNode)===null||i===void 0?void 0:i.type])}t.isOneOf&&b3(t,a,e)}}function b3(e,t,n){if((0,Fn.isNonNullType)(t.type)){var r;n.reportError(`OneOf input field ${e.name}.${t.name} must be nullable.`,(r=t.astNode)===null||r===void 0?void 0:r.type)}t.defaultValue!==void 0&&n.reportError(`OneOf input field ${e.name}.${t.name} cannot have a default value.`,t.astNode)}function A3(e){let t=Object.create(null),n=[],r=Object.create(null);return i;function i(a){if(t[a.name])return;t[a.name]=!0,r[a.name]=n.length;let o=Object.values(a.getFields());for(let c of o)if((0,Fn.isNonNullType)(c.type)&&(0,Fn.isInputObjectType)(c.type.ofType)){let l=c.type.ofType,p=r[l.name];if(n.push(c),p===void 0)i(l);else{let T=n.slice(p),y=T.map(g=>g.name).join(".");e.reportError(`Cannot reference Input Object "${l.name}" within itself through a series of non-null fields: "${y}".`,T.map(g=>g.astNode))}n.pop()}r[a.name]=void 0}}function wd(e,t){let{astNode:n,extensionASTNodes:r}=e;return(n!=null?[n,...r]:r).flatMap(a=>{var o;return(o=a.interfaces)!==null&&o!==void 0?o:[]}).filter(a=>a.name.value===t.name)}function LF(e,t){let{astNode:n,extensionASTNodes:r}=e;return(n!=null?[n,...r]:r).flatMap(a=>{var o;return(o=a.types)!==null&&o!==void 0?o:[]}).filter(a=>a.name.value===t)}function uI(e){var t;return e==null||(t=e.directives)===null||t===void 0?void 0:t.find(n=>n.name.value===CF.GraphQLDeprecatedDirective.name)}});var Ra=w(dI=>{"use strict";f();N();m();Object.defineProperty(dI,"__esModule",{value:!0});dI.typeFromAST=lI;var cI=Rt(),UF=Ft();function lI(e,t){switch(t.kind){case cI.Kind.LIST_TYPE:{let n=lI(e,t.type);return n&&new UF.GraphQLList(n)}case cI.Kind.NON_NULL_TYPE:{let n=lI(e,t.type);return n&&new UF.GraphQLNonNull(n)}case cI.Kind.NAMED_TYPE:return e.getType(t.name.value)}}});var wm=w(Cd=>{"use strict";f();N();m();Object.defineProperty(Cd,"__esModule",{value:!0});Cd.TypeInfo=void 0;Cd.visitWithTypeInfo=P3;var R3=Oa(),Pn=Rt(),kF=Fu(),wn=Ft(),Gc=Ri(),MF=Ra(),pI=class{constructor(t,n,r){this._schema=t,this._typeStack=[],this._parentTypeStack=[],this._inputTypeStack=[],this._fieldDefStack=[],this._defaultValueStack=[],this._directive=null,this._argument=null,this._enumValue=null,this._getFieldDef=r!=null?r:F3,n&&((0,wn.isInputType)(n)&&this._inputTypeStack.push(n),(0,wn.isCompositeType)(n)&&this._parentTypeStack.push(n),(0,wn.isOutputType)(n)&&this._typeStack.push(n))}get[Symbol.toStringTag](){return"TypeInfo"}getType(){if(this._typeStack.length>0)return this._typeStack[this._typeStack.length-1]}getParentType(){if(this._parentTypeStack.length>0)return this._parentTypeStack[this._parentTypeStack.length-1]}getInputType(){if(this._inputTypeStack.length>0)return this._inputTypeStack[this._inputTypeStack.length-1]}getParentInputType(){if(this._inputTypeStack.length>1)return this._inputTypeStack[this._inputTypeStack.length-2]}getFieldDef(){if(this._fieldDefStack.length>0)return this._fieldDefStack[this._fieldDefStack.length-1]}getDefaultValue(){if(this._defaultValueStack.length>0)return this._defaultValueStack[this._defaultValueStack.length-1]}getDirective(){return this._directive}getArgument(){return this._argument}getEnumValue(){return this._enumValue}enter(t){let n=this._schema;switch(t.kind){case Pn.Kind.SELECTION_SET:{let i=(0,wn.getNamedType)(this.getType());this._parentTypeStack.push((0,wn.isCompositeType)(i)?i:void 0);break}case Pn.Kind.FIELD:{let i=this.getParentType(),a,o;i&&(a=this._getFieldDef(n,i,t),a&&(o=a.type)),this._fieldDefStack.push(a),this._typeStack.push((0,wn.isOutputType)(o)?o:void 0);break}case Pn.Kind.DIRECTIVE:this._directive=n.getDirective(t.name.value);break;case Pn.Kind.OPERATION_DEFINITION:{let i=n.getRootType(t.operation);this._typeStack.push((0,wn.isObjectType)(i)?i:void 0);break}case Pn.Kind.INLINE_FRAGMENT:case Pn.Kind.FRAGMENT_DEFINITION:{let i=t.typeCondition,a=i?(0,MF.typeFromAST)(n,i):(0,wn.getNamedType)(this.getType());this._typeStack.push((0,wn.isOutputType)(a)?a:void 0);break}case Pn.Kind.VARIABLE_DEFINITION:{let i=(0,MF.typeFromAST)(n,t.type);this._inputTypeStack.push((0,wn.isInputType)(i)?i:void 0);break}case Pn.Kind.ARGUMENT:{var r;let i,a,o=(r=this.getDirective())!==null&&r!==void 0?r:this.getFieldDef();o&&(i=o.args.find(c=>c.name===t.name.value),i&&(a=i.type)),this._argument=i,this._defaultValueStack.push(i?i.defaultValue:void 0),this._inputTypeStack.push((0,wn.isInputType)(a)?a:void 0);break}case Pn.Kind.LIST:{let i=(0,wn.getNullableType)(this.getInputType()),a=(0,wn.isListType)(i)?i.ofType:i;this._defaultValueStack.push(void 0),this._inputTypeStack.push((0,wn.isInputType)(a)?a:void 0);break}case Pn.Kind.OBJECT_FIELD:{let i=(0,wn.getNamedType)(this.getInputType()),a,o;(0,wn.isInputObjectType)(i)&&(o=i.getFields()[t.name.value],o&&(a=o.type)),this._defaultValueStack.push(o?o.defaultValue:void 0),this._inputTypeStack.push((0,wn.isInputType)(a)?a:void 0);break}case Pn.Kind.ENUM:{let i=(0,wn.getNamedType)(this.getInputType()),a;(0,wn.isEnumType)(i)&&(a=i.getValue(t.value)),this._enumValue=a;break}default:}}leave(t){switch(t.kind){case Pn.Kind.SELECTION_SET:this._parentTypeStack.pop();break;case Pn.Kind.FIELD:this._fieldDefStack.pop(),this._typeStack.pop();break;case Pn.Kind.DIRECTIVE:this._directive=null;break;case Pn.Kind.OPERATION_DEFINITION:case Pn.Kind.INLINE_FRAGMENT:case Pn.Kind.FRAGMENT_DEFINITION:this._typeStack.pop();break;case Pn.Kind.VARIABLE_DEFINITION:this._inputTypeStack.pop();break;case Pn.Kind.ARGUMENT:this._argument=null,this._defaultValueStack.pop(),this._inputTypeStack.pop();break;case Pn.Kind.LIST:case Pn.Kind.OBJECT_FIELD:this._defaultValueStack.pop(),this._inputTypeStack.pop();break;case Pn.Kind.ENUM:this._enumValue=null;break;default:}}};Cd.TypeInfo=pI;function F3(e,t,n){let r=n.name.value;if(r===Gc.SchemaMetaFieldDef.name&&e.getQueryType()===t)return Gc.SchemaMetaFieldDef;if(r===Gc.TypeMetaFieldDef.name&&e.getQueryType()===t)return Gc.TypeMetaFieldDef;if(r===Gc.TypeNameMetaFieldDef.name&&(0,wn.isCompositeType)(t))return Gc.TypeNameMetaFieldDef;if((0,wn.isObjectType)(t)||(0,wn.isInterfaceType)(t))return t.getFields()[r]}function P3(e,t){return{enter(...n){let r=n[0];e.enter(r);let i=(0,kF.getEnterLeaveForKind)(t,r.kind).enter;if(i){let a=i.apply(t,n);return a!==void 0&&(e.leave(r),(0,R3.isNode)(a)&&e.enter(a)),a}},leave(...n){let r=n[0],i=(0,kF.getEnterLeaveForKind)(t,r.kind).leave,a;return i&&(a=i.apply(t,n)),e.leave(r),a}}}});var Mu=w(Fi=>{"use strict";f();N();m();Object.defineProperty(Fi,"__esModule",{value:!0});Fi.isConstValueNode=fI;Fi.isDefinitionNode=w3;Fi.isExecutableDefinitionNode=xF;Fi.isSelectionNode=L3;Fi.isTypeDefinitionNode=jF;Fi.isTypeExtensionNode=GF;Fi.isTypeNode=C3;Fi.isTypeSystemDefinitionNode=VF;Fi.isTypeSystemExtensionNode=KF;Fi.isValueNode=qF;var Pt=Rt();function w3(e){return xF(e)||VF(e)||KF(e)}function xF(e){return e.kind===Pt.Kind.OPERATION_DEFINITION||e.kind===Pt.Kind.FRAGMENT_DEFINITION}function L3(e){return e.kind===Pt.Kind.FIELD||e.kind===Pt.Kind.FRAGMENT_SPREAD||e.kind===Pt.Kind.INLINE_FRAGMENT}function qF(e){return e.kind===Pt.Kind.VARIABLE||e.kind===Pt.Kind.INT||e.kind===Pt.Kind.FLOAT||e.kind===Pt.Kind.STRING||e.kind===Pt.Kind.BOOLEAN||e.kind===Pt.Kind.NULL||e.kind===Pt.Kind.ENUM||e.kind===Pt.Kind.LIST||e.kind===Pt.Kind.OBJECT}function fI(e){return qF(e)&&(e.kind===Pt.Kind.LIST?e.values.some(fI):e.kind===Pt.Kind.OBJECT?e.fields.some(t=>fI(t.value)):e.kind!==Pt.Kind.VARIABLE)}function C3(e){return e.kind===Pt.Kind.NAMED_TYPE||e.kind===Pt.Kind.LIST_TYPE||e.kind===Pt.Kind.NON_NULL_TYPE}function VF(e){return e.kind===Pt.Kind.SCHEMA_DEFINITION||jF(e)||e.kind===Pt.Kind.DIRECTIVE_DEFINITION}function jF(e){return e.kind===Pt.Kind.SCALAR_TYPE_DEFINITION||e.kind===Pt.Kind.OBJECT_TYPE_DEFINITION||e.kind===Pt.Kind.INTERFACE_TYPE_DEFINITION||e.kind===Pt.Kind.UNION_TYPE_DEFINITION||e.kind===Pt.Kind.ENUM_TYPE_DEFINITION||e.kind===Pt.Kind.INPUT_OBJECT_TYPE_DEFINITION}function KF(e){return e.kind===Pt.Kind.SCHEMA_EXTENSION||GF(e)}function GF(e){return e.kind===Pt.Kind.SCALAR_TYPE_EXTENSION||e.kind===Pt.Kind.OBJECT_TYPE_EXTENSION||e.kind===Pt.Kind.INTERFACE_TYPE_EXTENSION||e.kind===Pt.Kind.UNION_TYPE_EXTENSION||e.kind===Pt.Kind.ENUM_TYPE_EXTENSION||e.kind===Pt.Kind.INPUT_OBJECT_TYPE_EXTENSION}});var NI=w(mI=>{"use strict";f();N();m();Object.defineProperty(mI,"__esModule",{value:!0});mI.ExecutableDefinitionsRule=k3;var B3=He(),$F=Rt(),U3=Mu();function k3(e){return{Document(t){for(let n of t.definitions)if(!(0,U3.isExecutableDefinitionNode)(n)){let r=n.kind===$F.Kind.SCHEMA_DEFINITION||n.kind===$F.Kind.SCHEMA_EXTENSION?"schema":'"'+n.name.value+'"';e.reportError(new B3.GraphQLError(`The ${r} definition is not executable.`,{nodes:n}))}return!1}}}});var EI=w(TI=>{"use strict";f();N();m();Object.defineProperty(TI,"__esModule",{value:!0});TI.FieldsOnCorrectTypeRule=V3;var QF=Mo(),M3=Ed(),x3=qo(),q3=He(),Bd=Ft();function V3(e){return{Field(t){let n=e.getParentType();if(n&&!e.getFieldDef()){let i=e.getSchema(),a=t.name.value,o=(0,QF.didYouMean)("to use an inline fragment on",j3(i,n,a));o===""&&(o=(0,QF.didYouMean)(K3(n,a))),e.reportError(new q3.GraphQLError(`Cannot query field "${a}" on type "${n.name}".`+o,{nodes:t}))}}}}function j3(e,t,n){if(!(0,Bd.isAbstractType)(t))return[];let r=new Set,i=Object.create(null);for(let o of e.getPossibleTypes(t))if(o.getFields()[n]){r.add(o),i[o.name]=1;for(let c of o.getInterfaces()){var a;c.getFields()[n]&&(r.add(c),i[c.name]=((a=i[c.name])!==null&&a!==void 0?a:0)+1)}}return[...r].sort((o,c)=>{let l=i[c.name]-i[o.name];return l!==0?l:(0,Bd.isInterfaceType)(o)&&e.isSubType(o,c)?-1:(0,Bd.isInterfaceType)(c)&&e.isSubType(c,o)?1:(0,M3.naturalCompare)(o.name,c.name)}).map(o=>o.name)}function K3(e,t){if((0,Bd.isObjectType)(e)||(0,Bd.isInterfaceType)(e)){let n=Object.keys(e.getFields());return(0,x3.suggestionList)(t,n)}return[]}});var yI=w(hI=>{"use strict";f();N();m();Object.defineProperty(hI,"__esModule",{value:!0});hI.FragmentsOnCompositeTypesRule=G3;var YF=He(),JF=li(),HF=Ft(),zF=Ra();function G3(e){return{InlineFragment(t){let n=t.typeCondition;if(n){let r=(0,zF.typeFromAST)(e.getSchema(),n);if(r&&!(0,HF.isCompositeType)(r)){let i=(0,JF.print)(n);e.reportError(new YF.GraphQLError(`Fragment cannot condition on non composite type "${i}".`,{nodes:n}))}}},FragmentDefinition(t){let n=(0,zF.typeFromAST)(e.getSchema(),t.typeCondition);if(n&&!(0,HF.isCompositeType)(n)){let r=(0,JF.print)(t.typeCondition);e.reportError(new YF.GraphQLError(`Fragment "${t.name.value}" cannot condition on non composite type "${r}".`,{nodes:t.typeCondition}))}}}}});var II=w(Lm=>{"use strict";f();N();m();Object.defineProperty(Lm,"__esModule",{value:!0});Lm.KnownArgumentNamesOnDirectivesRule=eP;Lm.KnownArgumentNamesRule=Y3;var WF=Mo(),XF=qo(),ZF=He(),$3=Rt(),Q3=$r();function Y3(e){return Q(M({},eP(e)),{Argument(t){let n=e.getArgument(),r=e.getFieldDef(),i=e.getParentType();if(!n&&r&&i){let a=t.name.value,o=r.args.map(l=>l.name),c=(0,XF.suggestionList)(a,o);e.reportError(new ZF.GraphQLError(`Unknown argument "${a}" on field "${i.name}.${r.name}".`+(0,WF.didYouMean)(c),{nodes:t}))}}})}function eP(e){let t=Object.create(null),n=e.getSchema(),r=n?n.getDirectives():Q3.specifiedDirectives;for(let o of r)t[o.name]=o.args.map(c=>c.name);let i=e.getDocument().definitions;for(let o of i)if(o.kind===$3.Kind.DIRECTIVE_DEFINITION){var a;let c=(a=o.arguments)!==null&&a!==void 0?a:[];t[o.name.value]=c.map(l=>l.name.value)}return{Directive(o){let c=o.name.value,l=t[c];if(o.arguments&&l)for(let p of o.arguments){let T=p.name.value;if(!l.includes(T)){let y=(0,XF.suggestionList)(T,l);e.reportError(new ZF.GraphQLError(`Unknown argument "${T}" on directive "@${c}".`+(0,WF.didYouMean)(y),{nodes:p}))}}return!1}}}});var SI=w(vI=>{"use strict";f();N();m();Object.defineProperty(vI,"__esModule",{value:!0});vI.KnownDirectivesRule=z3;var J3=Yt(),gI=Ir(),tP=He(),_I=Oa(),Zn=kc(),Tn=Rt(),H3=$r();function z3(e){let t=Object.create(null),n=e.getSchema(),r=n?n.getDirectives():H3.specifiedDirectives;for(let a of r)t[a.name]=a.locations;let i=e.getDocument().definitions;for(let a of i)a.kind===Tn.Kind.DIRECTIVE_DEFINITION&&(t[a.name.value]=a.locations.map(o=>o.value));return{Directive(a,o,c,l,p){let T=a.name.value,y=t[T];if(!y){e.reportError(new tP.GraphQLError(`Unknown directive "@${T}".`,{nodes:a}));return}let g=W3(p);g&&!y.includes(g)&&e.reportError(new tP.GraphQLError(`Directive "@${T}" may not be used on ${g}.`,{nodes:a}))}}}function W3(e){let t=e[e.length-1];switch("kind"in t||(0,gI.invariant)(!1),t.kind){case Tn.Kind.OPERATION_DEFINITION:return X3(t.operation);case Tn.Kind.FIELD:return Zn.DirectiveLocation.FIELD;case Tn.Kind.FRAGMENT_SPREAD:return Zn.DirectiveLocation.FRAGMENT_SPREAD;case Tn.Kind.INLINE_FRAGMENT:return Zn.DirectiveLocation.INLINE_FRAGMENT;case Tn.Kind.FRAGMENT_DEFINITION:return Zn.DirectiveLocation.FRAGMENT_DEFINITION;case Tn.Kind.VARIABLE_DEFINITION:return Zn.DirectiveLocation.VARIABLE_DEFINITION;case Tn.Kind.SCHEMA_DEFINITION:case Tn.Kind.SCHEMA_EXTENSION:return Zn.DirectiveLocation.SCHEMA;case Tn.Kind.SCALAR_TYPE_DEFINITION:case Tn.Kind.SCALAR_TYPE_EXTENSION:return Zn.DirectiveLocation.SCALAR;case Tn.Kind.OBJECT_TYPE_DEFINITION:case Tn.Kind.OBJECT_TYPE_EXTENSION:return Zn.DirectiveLocation.OBJECT;case Tn.Kind.FIELD_DEFINITION:return Zn.DirectiveLocation.FIELD_DEFINITION;case Tn.Kind.INTERFACE_TYPE_DEFINITION:case Tn.Kind.INTERFACE_TYPE_EXTENSION:return Zn.DirectiveLocation.INTERFACE;case Tn.Kind.UNION_TYPE_DEFINITION:case Tn.Kind.UNION_TYPE_EXTENSION:return Zn.DirectiveLocation.UNION;case Tn.Kind.ENUM_TYPE_DEFINITION:case Tn.Kind.ENUM_TYPE_EXTENSION:return Zn.DirectiveLocation.ENUM;case Tn.Kind.ENUM_VALUE_DEFINITION:return Zn.DirectiveLocation.ENUM_VALUE;case Tn.Kind.INPUT_OBJECT_TYPE_DEFINITION:case Tn.Kind.INPUT_OBJECT_TYPE_EXTENSION:return Zn.DirectiveLocation.INPUT_OBJECT;case Tn.Kind.INPUT_VALUE_DEFINITION:{let n=e[e.length-3];return"kind"in n||(0,gI.invariant)(!1),n.kind===Tn.Kind.INPUT_OBJECT_TYPE_DEFINITION?Zn.DirectiveLocation.INPUT_FIELD_DEFINITION:Zn.DirectiveLocation.ARGUMENT_DEFINITION}default:(0,gI.invariant)(!1,"Unexpected kind: "+(0,J3.inspect)(t.kind))}}function X3(e){switch(e){case _I.OperationTypeNode.QUERY:return Zn.DirectiveLocation.QUERY;case _I.OperationTypeNode.MUTATION:return Zn.DirectiveLocation.MUTATION;case _I.OperationTypeNode.SUBSCRIPTION:return Zn.DirectiveLocation.SUBSCRIPTION}}});var DI=w(OI=>{"use strict";f();N();m();Object.defineProperty(OI,"__esModule",{value:!0});OI.KnownFragmentNamesRule=e6;var Z3=He();function e6(e){return{FragmentSpread(t){let n=t.name.value;e.getFragment(n)||e.reportError(new Z3.GraphQLError(`Unknown fragment "${n}".`,{nodes:t.name}))}}}});var RI=w(AI=>{"use strict";f();N();m();Object.defineProperty(AI,"__esModule",{value:!0});AI.KnownTypeNamesRule=s6;var t6=Mo(),n6=qo(),r6=He(),bI=Mu(),i6=Ri(),a6=Aa();function s6(e){let t=e.getSchema(),n=t?t.getTypeMap():Object.create(null),r=Object.create(null);for(let a of e.getDocument().definitions)(0,bI.isTypeDefinitionNode)(a)&&(r[a.name.value]=!0);let i=[...Object.keys(n),...Object.keys(r)];return{NamedType(a,o,c,l,p){let T=a.name.value;if(!n[T]&&!r[T]){var y;let g=(y=p[2])!==null&&y!==void 0?y:c,_=g!=null&&o6(g);if(_&&nP.includes(T))return;let F=(0,n6.suggestionList)(T,_?nP.concat(i):i);e.reportError(new r6.GraphQLError(`Unknown type "${T}".`+(0,t6.didYouMean)(F),{nodes:a}))}}}}var nP=[...a6.specifiedScalarTypes,...i6.introspectionTypes].map(e=>e.name);function o6(e){return"kind"in e&&((0,bI.isTypeSystemDefinitionNode)(e)||(0,bI.isTypeSystemExtensionNode)(e))}});var PI=w(FI=>{"use strict";f();N();m();Object.defineProperty(FI,"__esModule",{value:!0});FI.LoneAnonymousOperationRule=l6;var u6=He(),c6=Rt();function l6(e){let t=0;return{Document(n){t=n.definitions.filter(r=>r.kind===c6.Kind.OPERATION_DEFINITION).length},OperationDefinition(n){!n.name&&t>1&&e.reportError(new u6.GraphQLError("This anonymous operation must be the only defined operation.",{nodes:n}))}}}});var LI=w(wI=>{"use strict";f();N();m();Object.defineProperty(wI,"__esModule",{value:!0});wI.LoneSchemaDefinitionRule=d6;var rP=He();function d6(e){var t,n,r;let i=e.getSchema(),a=(t=(n=(r=i==null?void 0:i.astNode)!==null&&r!==void 0?r:i==null?void 0:i.getQueryType())!==null&&n!==void 0?n:i==null?void 0:i.getMutationType())!==null&&t!==void 0?t:i==null?void 0:i.getSubscriptionType(),o=0;return{SchemaDefinition(c){if(a){e.reportError(new rP.GraphQLError("Cannot define a new schema within a schema extension.",{nodes:c}));return}o>0&&e.reportError(new rP.GraphQLError("Must provide only one schema definition.",{nodes:c})),++o}}}});var BI=w(CI=>{"use strict";f();N();m();Object.defineProperty(CI,"__esModule",{value:!0});CI.MaxIntrospectionDepthRule=m6;var p6=He(),iP=Rt(),f6=3;function m6(e){function t(n,r=Object.create(null),i=0){if(n.kind===iP.Kind.FRAGMENT_SPREAD){let a=n.name.value;if(r[a]===!0)return!1;let o=e.getFragment(a);if(!o)return!1;try{return r[a]=!0,t(o,r,i)}finally{r[a]=void 0}}if(n.kind===iP.Kind.FIELD&&(n.name.value==="fields"||n.name.value==="interfaces"||n.name.value==="possibleTypes"||n.name.value==="inputFields")&&(i++,i>=f6))return!0;if("selectionSet"in n&&n.selectionSet){for(let a of n.selectionSet.selections)if(t(a,r,i))return!0}return!1}return{Field(n){if((n.name.value==="__schema"||n.name.value==="__type")&&t(n))return e.reportError(new p6.GraphQLError("Maximum introspection depth exceeded",{nodes:[n]})),!1}}}});var kI=w(UI=>{"use strict";f();N();m();Object.defineProperty(UI,"__esModule",{value:!0});UI.NoFragmentCyclesRule=T6;var N6=He();function T6(e){let t=Object.create(null),n=[],r=Object.create(null);return{OperationDefinition:()=>!1,FragmentDefinition(a){return i(a),!1}};function i(a){if(t[a.name.value])return;let o=a.name.value;t[o]=!0;let c=e.getFragmentSpreads(a.selectionSet);if(c.length!==0){r[o]=n.length;for(let l of c){let p=l.name.value,T=r[p];if(n.push(l),T===void 0){let y=e.getFragment(p);y&&i(y)}else{let y=n.slice(T),g=y.slice(0,-1).map(_=>'"'+_.name.value+'"').join(", ");e.reportError(new N6.GraphQLError(`Cannot spread fragment "${p}" within itself`+(g!==""?` via ${g}.`:"."),{nodes:y}))}n.pop()}r[o]=void 0}}}});var xI=w(MI=>{"use strict";f();N();m();Object.defineProperty(MI,"__esModule",{value:!0});MI.NoUndefinedVariablesRule=h6;var E6=He();function h6(e){let t=Object.create(null);return{OperationDefinition:{enter(){t=Object.create(null)},leave(n){let r=e.getRecursiveVariableUsages(n);for(let{node:i}of r){let a=i.name.value;t[a]!==!0&&e.reportError(new E6.GraphQLError(n.name?`Variable "$${a}" is not defined by operation "${n.name.value}".`:`Variable "$${a}" is not defined.`,{nodes:[i,n]}))}}},VariableDefinition(n){t[n.variable.name.value]=!0}}}});var VI=w(qI=>{"use strict";f();N();m();Object.defineProperty(qI,"__esModule",{value:!0});qI.NoUnusedFragmentsRule=I6;var y6=He();function I6(e){let t=[],n=[];return{OperationDefinition(r){return t.push(r),!1},FragmentDefinition(r){return n.push(r),!1},Document:{leave(){let r=Object.create(null);for(let i of t)for(let a of e.getRecursivelyReferencedFragments(i))r[a.name.value]=!0;for(let i of n){let a=i.name.value;r[a]!==!0&&e.reportError(new y6.GraphQLError(`Fragment "${a}" is never used.`,{nodes:i}))}}}}}});var KI=w(jI=>{"use strict";f();N();m();Object.defineProperty(jI,"__esModule",{value:!0});jI.NoUnusedVariablesRule=_6;var g6=He();function _6(e){let t=[];return{OperationDefinition:{enter(){t=[]},leave(n){let r=Object.create(null),i=e.getRecursiveVariableUsages(n);for(let{node:a}of i)r[a.name.value]=!0;for(let a of t){let o=a.variable.name.value;r[o]!==!0&&e.reportError(new g6.GraphQLError(n.name?`Variable "$${o}" is never used in operation "${n.name.value}".`:`Variable "$${o}" is never used.`,{nodes:a}))}}},VariableDefinition(n){t.push(n)}}}});var QI=w($I=>{"use strict";f();N();m();Object.defineProperty($I,"__esModule",{value:!0});$I.sortValueNode=GI;var v6=Ed(),ps=Rt();function GI(e){switch(e.kind){case ps.Kind.OBJECT:return Q(M({},e),{fields:S6(e.fields)});case ps.Kind.LIST:return Q(M({},e),{values:e.values.map(GI)});case ps.Kind.INT:case ps.Kind.FLOAT:case ps.Kind.STRING:case ps.Kind.BOOLEAN:case ps.Kind.NULL:case ps.Kind.ENUM:case ps.Kind.VARIABLE:return e}}function S6(e){return e.map(t=>Q(M({},t),{value:GI(t.value)})).sort((t,n)=>(0,v6.naturalCompare)(t.name.value,n.name.value))}});var ZI=w(XI=>{"use strict";f();N();m();Object.defineProperty(XI,"__esModule",{value:!0});XI.OverlappingFieldsCanBeMergedRule=A6;var aP=Yt(),O6=He(),YI=Rt(),D6=li(),Qr=Ft(),b6=QI(),oP=Ra();function uP(e){return Array.isArray(e)?e.map(([t,n])=>`subfields "${t}" conflict because `+uP(n)).join(" and "):e}function A6(e){let t=new zI,n=new Map;return{SelectionSet(r){let i=R6(e,n,t,e.getParentType(),r);for(let[[a,o],c,l]of i){let p=uP(o);e.reportError(new O6.GraphQLError(`Fields "${a}" conflict because ${p}. Use different aliases on the fields to fetch both if this was intentional.`,{nodes:c.concat(l)}))}}}}function R6(e,t,n,r,i){let a=[],[o,c]=Um(e,t,r,i);if(P6(e,a,t,n,o),c.length!==0)for(let l=0;l1)for(let c=0;c[a.value,o]));return n.every(a=>{let o=a.value,c=i.get(a.name.value);return c===void 0?!1:sP(o)===sP(c)})}function sP(e){return(0,D6.print)((0,b6.sortValueNode)(e))}function JI(e,t){return(0,Qr.isListType)(e)?(0,Qr.isListType)(t)?JI(e.ofType,t.ofType):!0:(0,Qr.isListType)(t)?!0:(0,Qr.isNonNullType)(e)?(0,Qr.isNonNullType)(t)?JI(e.ofType,t.ofType):!0:(0,Qr.isNonNullType)(t)?!0:(0,Qr.isLeafType)(e)||(0,Qr.isLeafType)(t)?e!==t:!1}function Um(e,t,n,r){let i=t.get(r);if(i)return i;let a=Object.create(null),o=Object.create(null);lP(e,n,r,a,o);let c=[a,Object.keys(o)];return t.set(r,c),c}function HI(e,t,n){let r=t.get(n.selectionSet);if(r)return r;let i=(0,oP.typeFromAST)(e.getSchema(),n.typeCondition);return Um(e,t,i,n.selectionSet)}function lP(e,t,n,r,i){for(let a of n.selections)switch(a.kind){case YI.Kind.FIELD:{let o=a.name.value,c;((0,Qr.isObjectType)(t)||(0,Qr.isInterfaceType)(t))&&(c=t.getFields()[o]);let l=a.alias?a.alias.value:o;r[l]||(r[l]=[]),r[l].push([t,a,c]);break}case YI.Kind.FRAGMENT_SPREAD:i[a.name.value]=!0;break;case YI.Kind.INLINE_FRAGMENT:{let o=a.typeCondition,c=o?(0,oP.typeFromAST)(e.getSchema(),o):t;lP(e,c,a.selectionSet,r,i);break}}}function L6(e,t,n,r){if(e.length>0)return[[t,e.map(([i])=>i)],[n,...e.map(([,i])=>i).flat()],[r,...e.map(([,,i])=>i).flat()]]}var zI=class{constructor(){this._data=new Map}has(t,n,r){var i;let[a,o]=t{"use strict";f();N();m();Object.defineProperty(tg,"__esModule",{value:!0});tg.PossibleFragmentSpreadsRule=B6;var km=Yt(),dP=He(),eg=Ft(),pP=vd(),C6=Ra();function B6(e){return{InlineFragment(t){let n=e.getType(),r=e.getParentType();if((0,eg.isCompositeType)(n)&&(0,eg.isCompositeType)(r)&&!(0,pP.doTypesOverlap)(e.getSchema(),n,r)){let i=(0,km.inspect)(r),a=(0,km.inspect)(n);e.reportError(new dP.GraphQLError(`Fragment cannot be spread here as objects of type "${i}" can never be of type "${a}".`,{nodes:t}))}},FragmentSpread(t){let n=t.name.value,r=U6(e,n),i=e.getParentType();if(r&&i&&!(0,pP.doTypesOverlap)(e.getSchema(),r,i)){let a=(0,km.inspect)(i),o=(0,km.inspect)(r);e.reportError(new dP.GraphQLError(`Fragment "${n}" cannot be spread here as objects of type "${a}" can never be of type "${o}".`,{nodes:t}))}}}}function U6(e,t){let n=e.getFragment(t);if(n){let r=(0,C6.typeFromAST)(e.getSchema(),n.typeCondition);if((0,eg.isCompositeType)(r))return r}}});var ig=w(rg=>{"use strict";f();N();m();Object.defineProperty(rg,"__esModule",{value:!0});rg.PossibleTypeExtensionsRule=q6;var k6=Mo(),mP=Yt(),NP=Ir(),M6=qo(),fP=He(),yn=Rt(),x6=Mu(),$c=Ft();function q6(e){let t=e.getSchema(),n=Object.create(null);for(let i of e.getDocument().definitions)(0,x6.isTypeDefinitionNode)(i)&&(n[i.name.value]=i);return{ScalarTypeExtension:r,ObjectTypeExtension:r,InterfaceTypeExtension:r,UnionTypeExtension:r,EnumTypeExtension:r,InputObjectTypeExtension:r};function r(i){let a=i.name.value,o=n[a],c=t==null?void 0:t.getType(a),l;if(o?l=V6[o.kind]:c&&(l=j6(c)),l){if(l!==i.kind){let p=K6(i.kind);e.reportError(new fP.GraphQLError(`Cannot extend non-${p} type "${a}".`,{nodes:o?[o,i]:i}))}}else{let p=Object.keys(M(M({},n),t==null?void 0:t.getTypeMap())),T=(0,M6.suggestionList)(a,p);e.reportError(new fP.GraphQLError(`Cannot extend type "${a}" because it is not defined.`+(0,k6.didYouMean)(T),{nodes:i.name}))}}}var V6={[yn.Kind.SCALAR_TYPE_DEFINITION]:yn.Kind.SCALAR_TYPE_EXTENSION,[yn.Kind.OBJECT_TYPE_DEFINITION]:yn.Kind.OBJECT_TYPE_EXTENSION,[yn.Kind.INTERFACE_TYPE_DEFINITION]:yn.Kind.INTERFACE_TYPE_EXTENSION,[yn.Kind.UNION_TYPE_DEFINITION]:yn.Kind.UNION_TYPE_EXTENSION,[yn.Kind.ENUM_TYPE_DEFINITION]:yn.Kind.ENUM_TYPE_EXTENSION,[yn.Kind.INPUT_OBJECT_TYPE_DEFINITION]:yn.Kind.INPUT_OBJECT_TYPE_EXTENSION};function j6(e){if((0,$c.isScalarType)(e))return yn.Kind.SCALAR_TYPE_EXTENSION;if((0,$c.isObjectType)(e))return yn.Kind.OBJECT_TYPE_EXTENSION;if((0,$c.isInterfaceType)(e))return yn.Kind.INTERFACE_TYPE_EXTENSION;if((0,$c.isUnionType)(e))return yn.Kind.UNION_TYPE_EXTENSION;if((0,$c.isEnumType)(e))return yn.Kind.ENUM_TYPE_EXTENSION;if((0,$c.isInputObjectType)(e))return yn.Kind.INPUT_OBJECT_TYPE_EXTENSION;(0,NP.invariant)(!1,"Unexpected type: "+(0,mP.inspect)(e))}function K6(e){switch(e){case yn.Kind.SCALAR_TYPE_EXTENSION:return"scalar";case yn.Kind.OBJECT_TYPE_EXTENSION:return"object";case yn.Kind.INTERFACE_TYPE_EXTENSION:return"interface";case yn.Kind.UNION_TYPE_EXTENSION:return"union";case yn.Kind.ENUM_TYPE_EXTENSION:return"enum";case yn.Kind.INPUT_OBJECT_TYPE_EXTENSION:return"input object";default:(0,NP.invariant)(!1,"Unexpected kind: "+(0,mP.inspect)(e))}}});var sg=w(Mm=>{"use strict";f();N();m();Object.defineProperty(Mm,"__esModule",{value:!0});Mm.ProvidedRequiredArgumentsOnDirectivesRule=IP;Mm.ProvidedRequiredArgumentsRule=Q6;var EP=Yt(),TP=xo(),hP=He(),yP=Rt(),G6=li(),ag=Ft(),$6=$r();function Q6(e){return Q(M({},IP(e)),{Field:{leave(t){var n;let r=e.getFieldDef();if(!r)return!1;let i=new Set((n=t.arguments)===null||n===void 0?void 0:n.map(a=>a.name.value));for(let a of r.args)if(!i.has(a.name)&&(0,ag.isRequiredArgument)(a)){let o=(0,EP.inspect)(a.type);e.reportError(new hP.GraphQLError(`Field "${r.name}" argument "${a.name}" of type "${o}" is required, but it was not provided.`,{nodes:t}))}}}})}function IP(e){var t;let n=Object.create(null),r=e.getSchema(),i=(t=r==null?void 0:r.getDirectives())!==null&&t!==void 0?t:$6.specifiedDirectives;for(let c of i)n[c.name]=(0,TP.keyMap)(c.args.filter(ag.isRequiredArgument),l=>l.name);let a=e.getDocument().definitions;for(let c of a)if(c.kind===yP.Kind.DIRECTIVE_DEFINITION){var o;let l=(o=c.arguments)!==null&&o!==void 0?o:[];n[c.name.value]=(0,TP.keyMap)(l.filter(Y6),p=>p.name.value)}return{Directive:{leave(c){let l=c.name.value,p=n[l];if(p){var T;let y=(T=c.arguments)!==null&&T!==void 0?T:[],g=new Set(y.map(_=>_.name.value));for(let[_,F]of Object.entries(p))if(!g.has(_)){let U=(0,ag.isType)(F.type)?(0,EP.inspect)(F.type):(0,G6.print)(F.type);e.reportError(new hP.GraphQLError(`Directive "@${l}" argument "${_}" of type "${U}" is required, but it was not provided.`,{nodes:c}))}}}}}}function Y6(e){return e.type.kind===yP.Kind.NON_NULL_TYPE&&e.defaultValue==null}});var ug=w(og=>{"use strict";f();N();m();Object.defineProperty(og,"__esModule",{value:!0});og.ScalarLeafsRule=J6;var gP=Yt(),_P=He(),vP=Ft();function J6(e){return{Field(t){let n=e.getType(),r=t.selectionSet;if(n){if((0,vP.isLeafType)((0,vP.getNamedType)(n))){if(r){let i=t.name.value,a=(0,gP.inspect)(n);e.reportError(new _P.GraphQLError(`Field "${i}" must not have a selection since type "${a}" has no subfields.`,{nodes:r}))}}else if(!r){let i=t.name.value,a=(0,gP.inspect)(n);e.reportError(new _P.GraphQLError(`Field "${i}" of type "${a}" must have a selection of subfields. Did you mean "${i} { ... }"?`,{nodes:t}))}}}}}});var lg=w(cg=>{"use strict";f();N();m();Object.defineProperty(cg,"__esModule",{value:!0});cg.printPathArray=H6;function H6(e){return e.map(t=>typeof t=="number"?"["+t.toString()+"]":"."+t).join("")}});var Ud=w(xm=>{"use strict";f();N();m();Object.defineProperty(xm,"__esModule",{value:!0});xm.addPath=z6;xm.pathToArray=W6;function z6(e,t,n){return{prev:e,key:t,typename:n}}function W6(e){let t=[],n=e;for(;n;)t.push(n.key),n=n.prev;return t.reverse()}});var pg=w(dg=>{"use strict";f();N();m();Object.defineProperty(dg,"__esModule",{value:!0});dg.coerceInputValue=iz;var X6=Mo(),qm=Yt(),Z6=Ir(),ez=Am(),tz=Sa(),na=Ud(),nz=lg(),rz=qo(),fs=He(),kd=Ft();function iz(e,t,n=az){return Md(e,t,n,void 0)}function az(e,t,n){let r="Invalid value "+(0,qm.inspect)(t);throw e.length>0&&(r+=` at "value${(0,nz.printPathArray)(e)}"`),n.message=r+": "+n.message,n}function Md(e,t,n,r){if((0,kd.isNonNullType)(t)){if(e!=null)return Md(e,t.ofType,n,r);n((0,na.pathToArray)(r),e,new fs.GraphQLError(`Expected non-nullable type "${(0,qm.inspect)(t)}" not to be null.`));return}if(e==null)return null;if((0,kd.isListType)(t)){let i=t.ofType;return(0,ez.isIterableObject)(e)?Array.from(e,(a,o)=>{let c=(0,na.addPath)(r,o,void 0);return Md(a,i,n,c)}):[Md(e,i,n,r)]}if((0,kd.isInputObjectType)(t)){if(!(0,tz.isObjectLike)(e)){n((0,na.pathToArray)(r),e,new fs.GraphQLError(`Expected type "${t.name}" to be an object.`));return}let i={},a=t.getFields();for(let o of Object.values(a)){let c=e[o.name];if(c===void 0){if(o.defaultValue!==void 0)i[o.name]=o.defaultValue;else if((0,kd.isNonNullType)(o.type)){let l=(0,qm.inspect)(o.type);n((0,na.pathToArray)(r),e,new fs.GraphQLError(`Field "${o.name}" of required type "${l}" was not provided.`))}continue}i[o.name]=Md(c,o.type,n,(0,na.addPath)(r,o.name,t.name))}for(let o of Object.keys(e))if(!a[o]){let c=(0,rz.suggestionList)(o,Object.keys(t.getFields()));n((0,na.pathToArray)(r),e,new fs.GraphQLError(`Field "${o}" is not defined by type "${t.name}".`+(0,X6.didYouMean)(c)))}if(t.isOneOf){let o=Object.keys(i);o.length!==1&&n((0,na.pathToArray)(r),e,new fs.GraphQLError(`Exactly one key must be specified for OneOf type "${t.name}".`));let c=o[0],l=i[c];l===null&&n((0,na.pathToArray)(r).concat(c),l,new fs.GraphQLError(`Field "${c}" must be non-null.`))}return i}if((0,kd.isLeafType)(t)){let i;try{i=t.parseValue(e)}catch(a){a instanceof fs.GraphQLError?n((0,na.pathToArray)(r),e,a):n((0,na.pathToArray)(r),e,new fs.GraphQLError(`Expected type "${t.name}". `+a.message,{originalError:a}));return}return i===void 0&&n((0,na.pathToArray)(r),e,new fs.GraphQLError(`Expected type "${t.name}".`)),i}(0,Z6.invariant)(!1,"Unexpected input type: "+(0,qm.inspect)(t))}});var qd=w(fg=>{"use strict";f();N();m();Object.defineProperty(fg,"__esModule",{value:!0});fg.valueFromAST=xd;var sz=Yt(),oz=Ir(),uz=xo(),Qc=Rt(),xu=Ft();function xd(e,t,n){if(e){if(e.kind===Qc.Kind.VARIABLE){let r=e.name.value;if(n==null||n[r]===void 0)return;let i=n[r];return i===null&&(0,xu.isNonNullType)(t)?void 0:i}if((0,xu.isNonNullType)(t))return e.kind===Qc.Kind.NULL?void 0:xd(e,t.ofType,n);if(e.kind===Qc.Kind.NULL)return null;if((0,xu.isListType)(t)){let r=t.ofType;if(e.kind===Qc.Kind.LIST){let a=[];for(let o of e.values)if(SP(o,n)){if((0,xu.isNonNullType)(r))return;a.push(null)}else{let c=xd(o,r,n);if(c===void 0)return;a.push(c)}return a}let i=xd(e,r,n);return i===void 0?void 0:[i]}if((0,xu.isInputObjectType)(t)){if(e.kind!==Qc.Kind.OBJECT)return;let r=Object.create(null),i=(0,uz.keyMap)(e.fields,a=>a.name.value);for(let a of Object.values(t.getFields())){let o=i[a.name];if(!o||SP(o.value,n)){if(a.defaultValue!==void 0)r[a.name]=a.defaultValue;else if((0,xu.isNonNullType)(a.type))return;continue}let c=xd(o.value,a.type,n);if(c===void 0)return;r[a.name]=c}if(t.isOneOf){let a=Object.keys(r);if(a.length!==1||r[a[0]]===null)return}return r}if((0,xu.isLeafType)(t)){let r;try{r=t.parseLiteral(e,n)}catch(i){return}return r===void 0?void 0:r}(0,oz.invariant)(!1,"Unexpected input type: "+(0,sz.inspect)(t))}}function SP(e,t){return e.kind===Qc.Kind.VARIABLE&&(t==null||t[e.name.value]===void 0)}});var Hc=w(Vd=>{"use strict";f();N();m();Object.defineProperty(Vd,"__esModule",{value:!0});Vd.getArgumentValues=AP;Vd.getDirectiveValues=Nz;Vd.getVariableValues=fz;var Yc=Yt(),cz=xo(),lz=lg(),ms=He(),OP=Rt(),DP=li(),Jc=Ft(),dz=pg(),pz=Ra(),bP=qd();function fz(e,t,n,r){let i=[],a=r==null?void 0:r.maxErrors;try{let o=mz(e,t,n,c=>{if(a!=null&&i.length>=a)throw new ms.GraphQLError("Too many errors processing variables, error limit reached. Execution aborted.");i.push(c)});if(i.length===0)return{coerced:o}}catch(o){i.push(o)}return{errors:i}}function mz(e,t,n,r){let i={};for(let a of t){let o=a.variable.name.value,c=(0,pz.typeFromAST)(e,a.type);if(!(0,Jc.isInputType)(c)){let p=(0,DP.print)(a.type);r(new ms.GraphQLError(`Variable "$${o}" expected value of type "${p}" which cannot be used as an input type.`,{nodes:a.type}));continue}if(!RP(n,o)){if(a.defaultValue)i[o]=(0,bP.valueFromAST)(a.defaultValue,c);else if((0,Jc.isNonNullType)(c)){let p=(0,Yc.inspect)(c);r(new ms.GraphQLError(`Variable "$${o}" of required type "${p}" was not provided.`,{nodes:a}))}continue}let l=n[o];if(l===null&&(0,Jc.isNonNullType)(c)){let p=(0,Yc.inspect)(c);r(new ms.GraphQLError(`Variable "$${o}" of non-null type "${p}" must not be null.`,{nodes:a}));continue}i[o]=(0,dz.coerceInputValue)(l,c,(p,T,y)=>{let g=`Variable "$${o}" got invalid value `+(0,Yc.inspect)(T);p.length>0&&(g+=` at "${o}${(0,lz.printPathArray)(p)}"`),r(new ms.GraphQLError(g+"; "+y.message,{nodes:a,originalError:y}))})}return i}function AP(e,t,n){var r;let i={},a=(r=t.arguments)!==null&&r!==void 0?r:[],o=(0,cz.keyMap)(a,c=>c.name.value);for(let c of e.args){let l=c.name,p=c.type,T=o[l];if(!T){if(c.defaultValue!==void 0)i[l]=c.defaultValue;else if((0,Jc.isNonNullType)(p))throw new ms.GraphQLError(`Argument "${l}" of required type "${(0,Yc.inspect)(p)}" was not provided.`,{nodes:t});continue}let y=T.value,g=y.kind===OP.Kind.NULL;if(y.kind===OP.Kind.VARIABLE){let F=y.name.value;if(n==null||!RP(n,F)){if(c.defaultValue!==void 0)i[l]=c.defaultValue;else if((0,Jc.isNonNullType)(p))throw new ms.GraphQLError(`Argument "${l}" of required type "${(0,Yc.inspect)(p)}" was provided the variable "$${F}" which was not provided a runtime value.`,{nodes:y});continue}g=n[F]==null}if(g&&(0,Jc.isNonNullType)(p))throw new ms.GraphQLError(`Argument "${l}" of non-null type "${(0,Yc.inspect)(p)}" must not be null.`,{nodes:y});let _=(0,bP.valueFromAST)(y,p,n);if(_===void 0)throw new ms.GraphQLError(`Argument "${l}" has invalid value ${(0,DP.print)(y)}.`,{nodes:y});i[l]=_}return i}function Nz(e,t,n){var r;let i=(r=t.directives)===null||r===void 0?void 0:r.find(a=>a.name.value===e.name);if(i)return AP(e,i,n)}function RP(e,t){return Object.prototype.hasOwnProperty.call(e,t)}});var Km=w(jm=>{"use strict";f();N();m();Object.defineProperty(jm,"__esModule",{value:!0});jm.collectFields=hz;jm.collectSubfields=yz;var mg=Rt(),Tz=Ft(),FP=$r(),Ez=Ra(),PP=Hc();function hz(e,t,n,r,i){let a=new Map;return Vm(e,t,n,r,i,a,new Set),a}function yz(e,t,n,r,i){let a=new Map,o=new Set;for(let c of i)c.selectionSet&&Vm(e,t,n,r,c.selectionSet,a,o);return a}function Vm(e,t,n,r,i,a,o){for(let c of i.selections)switch(c.kind){case mg.Kind.FIELD:{if(!Ng(n,c))continue;let l=Iz(c),p=a.get(l);p!==void 0?p.push(c):a.set(l,[c]);break}case mg.Kind.INLINE_FRAGMENT:{if(!Ng(n,c)||!wP(e,c,r))continue;Vm(e,t,n,r,c.selectionSet,a,o);break}case mg.Kind.FRAGMENT_SPREAD:{let l=c.name.value;if(o.has(l)||!Ng(n,c))continue;o.add(l);let p=t[l];if(!p||!wP(e,p,r))continue;Vm(e,t,n,r,p.selectionSet,a,o);break}}}function Ng(e,t){let n=(0,PP.getDirectiveValues)(FP.GraphQLSkipDirective,t,e);if((n==null?void 0:n.if)===!0)return!1;let r=(0,PP.getDirectiveValues)(FP.GraphQLIncludeDirective,t,e);return(r==null?void 0:r.if)!==!1}function wP(e,t,n){let r=t.typeCondition;if(!r)return!0;let i=(0,Ez.typeFromAST)(e,r);return i===n?!0:(0,Tz.isAbstractType)(i)?e.isSubType(i,n):!1}function Iz(e){return e.alias?e.alias.value:e.name.value}});var Eg=w(Tg=>{"use strict";f();N();m();Object.defineProperty(Tg,"__esModule",{value:!0});Tg.SingleFieldSubscriptionsRule=vz;var LP=He(),gz=Rt(),_z=Km();function vz(e){return{OperationDefinition(t){if(t.operation==="subscription"){let n=e.getSchema(),r=n.getSubscriptionType();if(r){let i=t.name?t.name.value:null,a=Object.create(null),o=e.getDocument(),c=Object.create(null);for(let p of o.definitions)p.kind===gz.Kind.FRAGMENT_DEFINITION&&(c[p.name.value]=p);let l=(0,_z.collectFields)(n,c,a,r,t.selectionSet);if(l.size>1){let y=[...l.values()].slice(1).flat();e.reportError(new LP.GraphQLError(i!=null?`Subscription "${i}" must select only one top level field.`:"Anonymous Subscription must select only one top level field.",{nodes:y}))}for(let p of l.values())p[0].name.value.startsWith("__")&&e.reportError(new LP.GraphQLError(i!=null?`Subscription "${i}" must not select an introspection top level field.`:"Anonymous Subscription must not select an introspection top level field.",{nodes:p}))}}}}}});var Gm=w(hg=>{"use strict";f();N();m();Object.defineProperty(hg,"__esModule",{value:!0});hg.groupBy=Sz;function Sz(e,t){let n=new Map;for(let r of e){let i=t(r),a=n.get(i);a===void 0?n.set(i,[r]):a.push(r)}return n}});var Ig=w(yg=>{"use strict";f();N();m();Object.defineProperty(yg,"__esModule",{value:!0});yg.UniqueArgumentDefinitionNamesRule=bz;var Oz=Gm(),Dz=He();function bz(e){return{DirectiveDefinition(r){var i;let a=(i=r.arguments)!==null&&i!==void 0?i:[];return n(`@${r.name.value}`,a)},InterfaceTypeDefinition:t,InterfaceTypeExtension:t,ObjectTypeDefinition:t,ObjectTypeExtension:t};function t(r){var i;let a=r.name.value,o=(i=r.fields)!==null&&i!==void 0?i:[];for(let l of o){var c;let p=l.name.value,T=(c=l.arguments)!==null&&c!==void 0?c:[];n(`${a}.${p}`,T)}return!1}function n(r,i){let a=(0,Oz.groupBy)(i,o=>o.name.value);for(let[o,c]of a)c.length>1&&e.reportError(new Dz.GraphQLError(`Argument "${r}(${o}:)" can only be defined once.`,{nodes:c.map(l=>l.name)}));return!1}}});var _g=w(gg=>{"use strict";f();N();m();Object.defineProperty(gg,"__esModule",{value:!0});gg.UniqueArgumentNamesRule=Fz;var Az=Gm(),Rz=He();function Fz(e){return{Field:t,Directive:t};function t(n){var r;let i=(r=n.arguments)!==null&&r!==void 0?r:[],a=(0,Az.groupBy)(i,o=>o.name.value);for(let[o,c]of a)c.length>1&&e.reportError(new Rz.GraphQLError(`There can be only one argument named "${o}".`,{nodes:c.map(l=>l.name)}))}}});var Sg=w(vg=>{"use strict";f();N();m();Object.defineProperty(vg,"__esModule",{value:!0});vg.UniqueDirectiveNamesRule=Pz;var CP=He();function Pz(e){let t=Object.create(null),n=e.getSchema();return{DirectiveDefinition(r){let i=r.name.value;if(n!=null&&n.getDirective(i)){e.reportError(new CP.GraphQLError(`Directive "@${i}" already exists in the schema. It cannot be redefined.`,{nodes:r.name}));return}return t[i]?e.reportError(new CP.GraphQLError(`There can be only one directive named "@${i}".`,{nodes:[t[i],r.name]})):t[i]=r.name,!1}}}});var bg=w(Dg=>{"use strict";f();N();m();Object.defineProperty(Dg,"__esModule",{value:!0});Dg.UniqueDirectivesPerLocationRule=Cz;var wz=He(),Og=Rt(),BP=Mu(),Lz=$r();function Cz(e){let t=Object.create(null),n=e.getSchema(),r=n?n.getDirectives():Lz.specifiedDirectives;for(let c of r)t[c.name]=!c.isRepeatable;let i=e.getDocument().definitions;for(let c of i)c.kind===Og.Kind.DIRECTIVE_DEFINITION&&(t[c.name.value]=!c.repeatable);let a=Object.create(null),o=Object.create(null);return{enter(c){if(!("directives"in c)||!c.directives)return;let l;if(c.kind===Og.Kind.SCHEMA_DEFINITION||c.kind===Og.Kind.SCHEMA_EXTENSION)l=a;else if((0,BP.isTypeDefinitionNode)(c)||(0,BP.isTypeExtensionNode)(c)){let p=c.name.value;l=o[p],l===void 0&&(o[p]=l=Object.create(null))}else l=Object.create(null);for(let p of c.directives){let T=p.name.value;t[T]&&(l[T]?e.reportError(new wz.GraphQLError(`The directive "@${T}" can only be used once at this location.`,{nodes:[l[T],p]})):l[T]=p)}}}}});var Rg=w(Ag=>{"use strict";f();N();m();Object.defineProperty(Ag,"__esModule",{value:!0});Ag.UniqueEnumValueNamesRule=Uz;var UP=He(),Bz=Ft();function Uz(e){let t=e.getSchema(),n=t?t.getTypeMap():Object.create(null),r=Object.create(null);return{EnumTypeDefinition:i,EnumTypeExtension:i};function i(a){var o;let c=a.name.value;r[c]||(r[c]=Object.create(null));let l=(o=a.values)!==null&&o!==void 0?o:[],p=r[c];for(let T of l){let y=T.name.value,g=n[c];(0,Bz.isEnumType)(g)&&g.getValue(y)?e.reportError(new UP.GraphQLError(`Enum value "${c}.${y}" already exists in the schema. It cannot also be defined in this type extension.`,{nodes:T.name})):p[y]?e.reportError(new UP.GraphQLError(`Enum value "${c}.${y}" can only be defined once.`,{nodes:[p[y],T.name]})):p[y]=T.name}return!1}}});var wg=w(Pg=>{"use strict";f();N();m();Object.defineProperty(Pg,"__esModule",{value:!0});Pg.UniqueFieldDefinitionNamesRule=kz;var kP=He(),Fg=Ft();function kz(e){let t=e.getSchema(),n=t?t.getTypeMap():Object.create(null),r=Object.create(null);return{InputObjectTypeDefinition:i,InputObjectTypeExtension:i,InterfaceTypeDefinition:i,InterfaceTypeExtension:i,ObjectTypeDefinition:i,ObjectTypeExtension:i};function i(a){var o;let c=a.name.value;r[c]||(r[c]=Object.create(null));let l=(o=a.fields)!==null&&o!==void 0?o:[],p=r[c];for(let T of l){let y=T.name.value;Mz(n[c],y)?e.reportError(new kP.GraphQLError(`Field "${c}.${y}" already exists in the schema. It cannot also be defined in this type extension.`,{nodes:T.name})):p[y]?e.reportError(new kP.GraphQLError(`Field "${c}.${y}" can only be defined once.`,{nodes:[p[y],T.name]})):p[y]=T.name}return!1}}function Mz(e,t){return(0,Fg.isObjectType)(e)||(0,Fg.isInterfaceType)(e)||(0,Fg.isInputObjectType)(e)?e.getFields()[t]!=null:!1}});var Cg=w(Lg=>{"use strict";f();N();m();Object.defineProperty(Lg,"__esModule",{value:!0});Lg.UniqueFragmentNamesRule=qz;var xz=He();function qz(e){let t=Object.create(null);return{OperationDefinition:()=>!1,FragmentDefinition(n){let r=n.name.value;return t[r]?e.reportError(new xz.GraphQLError(`There can be only one fragment named "${r}".`,{nodes:[t[r],n.name]})):t[r]=n.name,!1}}}});var Ug=w(Bg=>{"use strict";f();N();m();Object.defineProperty(Bg,"__esModule",{value:!0});Bg.UniqueInputFieldNamesRule=Kz;var Vz=Ir(),jz=He();function Kz(e){let t=[],n=Object.create(null);return{ObjectValue:{enter(){t.push(n),n=Object.create(null)},leave(){let r=t.pop();r||(0,Vz.invariant)(!1),n=r}},ObjectField(r){let i=r.name.value;n[i]?e.reportError(new jz.GraphQLError(`There can be only one input field named "${i}".`,{nodes:[n[i],r.name]})):n[i]=r.name}}}});var Mg=w(kg=>{"use strict";f();N();m();Object.defineProperty(kg,"__esModule",{value:!0});kg.UniqueOperationNamesRule=$z;var Gz=He();function $z(e){let t=Object.create(null);return{OperationDefinition(n){let r=n.name;return r&&(t[r.value]?e.reportError(new Gz.GraphQLError(`There can be only one operation named "${r.value}".`,{nodes:[t[r.value],r]})):t[r.value]=r),!1},FragmentDefinition:()=>!1}}});var qg=w(xg=>{"use strict";f();N();m();Object.defineProperty(xg,"__esModule",{value:!0});xg.UniqueOperationTypesRule=Qz;var MP=He();function Qz(e){let t=e.getSchema(),n=Object.create(null),r=t?{query:t.getQueryType(),mutation:t.getMutationType(),subscription:t.getSubscriptionType()}:{};return{SchemaDefinition:i,SchemaExtension:i};function i(a){var o;let c=(o=a.operationTypes)!==null&&o!==void 0?o:[];for(let l of c){let p=l.operation,T=n[p];r[p]?e.reportError(new MP.GraphQLError(`Type for ${p} already defined in the schema. It cannot be redefined.`,{nodes:l})):T?e.reportError(new MP.GraphQLError(`There can be only one ${p} type in schema.`,{nodes:[T,l]})):n[p]=l}return!1}}});var jg=w(Vg=>{"use strict";f();N();m();Object.defineProperty(Vg,"__esModule",{value:!0});Vg.UniqueTypeNamesRule=Yz;var xP=He();function Yz(e){let t=Object.create(null),n=e.getSchema();return{ScalarTypeDefinition:r,ObjectTypeDefinition:r,InterfaceTypeDefinition:r,UnionTypeDefinition:r,EnumTypeDefinition:r,InputObjectTypeDefinition:r};function r(i){let a=i.name.value;if(n!=null&&n.getType(a)){e.reportError(new xP.GraphQLError(`Type "${a}" already exists in the schema. It cannot also be defined in this type definition.`,{nodes:i.name}));return}return t[a]?e.reportError(new xP.GraphQLError(`There can be only one type named "${a}".`,{nodes:[t[a],i.name]})):t[a]=i.name,!1}}});var Gg=w(Kg=>{"use strict";f();N();m();Object.defineProperty(Kg,"__esModule",{value:!0});Kg.UniqueVariableNamesRule=zz;var Jz=Gm(),Hz=He();function zz(e){return{OperationDefinition(t){var n;let r=(n=t.variableDefinitions)!==null&&n!==void 0?n:[],i=(0,Jz.groupBy)(r,a=>a.variable.name.value);for(let[a,o]of i)o.length>1&&e.reportError(new Hz.GraphQLError(`There can be only one variable named "$${a}".`,{nodes:o.map(c=>c.variable.name)}))}}}});var Yg=w(Qg=>{"use strict";f();N();m();Object.defineProperty(Qg,"__esModule",{value:!0});Qg.ValuesOfCorrectTypeRule=e4;var Wz=Mo(),jd=Yt(),Xz=xo(),Zz=qo(),Pa=He(),$g=Rt(),$m=li(),Fa=Ft();function e4(e){let t={};return{OperationDefinition:{enter(){t={}}},VariableDefinition(n){t[n.variable.name.value]=n},ListValue(n){let r=(0,Fa.getNullableType)(e.getParentInputType());if(!(0,Fa.isListType)(r))return qu(e,n),!1},ObjectValue(n){let r=(0,Fa.getNamedType)(e.getInputType());if(!(0,Fa.isInputObjectType)(r))return qu(e,n),!1;let i=(0,Xz.keyMap)(n.fields,a=>a.name.value);for(let a of Object.values(r.getFields()))if(!i[a.name]&&(0,Fa.isRequiredInputField)(a)){let c=(0,jd.inspect)(a.type);e.reportError(new Pa.GraphQLError(`Field "${r.name}.${a.name}" of required type "${c}" was not provided.`,{nodes:n}))}r.isOneOf&&t4(e,n,r,i,t)},ObjectField(n){let r=(0,Fa.getNamedType)(e.getParentInputType());if(!e.getInputType()&&(0,Fa.isInputObjectType)(r)){let a=(0,Zz.suggestionList)(n.name.value,Object.keys(r.getFields()));e.reportError(new Pa.GraphQLError(`Field "${n.name.value}" is not defined by type "${r.name}".`+(0,Wz.didYouMean)(a),{nodes:n}))}},NullValue(n){let r=e.getInputType();(0,Fa.isNonNullType)(r)&&e.reportError(new Pa.GraphQLError(`Expected value of type "${(0,jd.inspect)(r)}", found ${(0,$m.print)(n)}.`,{nodes:n}))},EnumValue:n=>qu(e,n),IntValue:n=>qu(e,n),FloatValue:n=>qu(e,n),StringValue:n=>qu(e,n),BooleanValue:n=>qu(e,n)}}function qu(e,t){let n=e.getInputType();if(!n)return;let r=(0,Fa.getNamedType)(n);if(!(0,Fa.isLeafType)(r)){let i=(0,jd.inspect)(n);e.reportError(new Pa.GraphQLError(`Expected value of type "${i}", found ${(0,$m.print)(t)}.`,{nodes:t}));return}try{if(r.parseLiteral(t,void 0)===void 0){let a=(0,jd.inspect)(n);e.reportError(new Pa.GraphQLError(`Expected value of type "${a}", found ${(0,$m.print)(t)}.`,{nodes:t}))}}catch(i){let a=(0,jd.inspect)(n);i instanceof Pa.GraphQLError?e.reportError(i):e.reportError(new Pa.GraphQLError(`Expected value of type "${a}", found ${(0,$m.print)(t)}; `+i.message,{nodes:t,originalError:i}))}}function t4(e,t,n,r,i){var a;let o=Object.keys(r);if(o.length!==1){e.reportError(new Pa.GraphQLError(`OneOf Input Object "${n.name}" must specify exactly one key.`,{nodes:[t]}));return}let l=(a=r[o[0]])===null||a===void 0?void 0:a.value,p=!l||l.kind===$g.Kind.NULL,T=(l==null?void 0:l.kind)===$g.Kind.VARIABLE;if(p){e.reportError(new Pa.GraphQLError(`Field "${n.name}.${o[0]}" must be non-null.`,{nodes:[t]}));return}if(T){let y=l.name.value;i[y].type.kind!==$g.Kind.NON_NULL_TYPE&&e.reportError(new Pa.GraphQLError(`Variable "${y}" must be non-nullable to be used for OneOf Input Object "${n.name}".`,{nodes:[t]}))}}});var Hg=w(Jg=>{"use strict";f();N();m();Object.defineProperty(Jg,"__esModule",{value:!0});Jg.VariablesAreInputTypesRule=s4;var n4=He(),r4=li(),i4=Ft(),a4=Ra();function s4(e){return{VariableDefinition(t){let n=(0,a4.typeFromAST)(e.getSchema(),t.type);if(n!==void 0&&!(0,i4.isInputType)(n)){let r=t.variable.name.value,i=(0,r4.print)(t.type);e.reportError(new n4.GraphQLError(`Variable "$${r}" cannot be non-input type "${i}".`,{nodes:t.type}))}}}}});var Wg=w(zg=>{"use strict";f();N();m();Object.defineProperty(zg,"__esModule",{value:!0});zg.VariablesInAllowedPositionRule=l4;var qP=Yt(),o4=He(),u4=Rt(),VP=Ft(),jP=vd(),c4=Ra();function l4(e){let t=Object.create(null);return{OperationDefinition:{enter(){t=Object.create(null)},leave(n){let r=e.getRecursiveVariableUsages(n);for(let{node:i,type:a,defaultValue:o}of r){let c=i.name.value,l=t[c];if(l&&a){let p=e.getSchema(),T=(0,c4.typeFromAST)(p,l.type);if(T&&!d4(p,T,l.defaultValue,a,o)){let y=(0,qP.inspect)(T),g=(0,qP.inspect)(a);e.reportError(new o4.GraphQLError(`Variable "$${c}" of type "${y}" used in position expecting type "${g}".`,{nodes:[l,i]}))}}}}},VariableDefinition(n){t[n.variable.name.value]=n}}}function d4(e,t,n,r,i){if((0,VP.isNonNullType)(r)&&!(0,VP.isNonNullType)(t)){if(!(n!=null&&n.kind!==u4.Kind.NULL)&&!(i!==void 0))return!1;let c=r.ofType;return(0,jP.isTypeSubTypeOf)(e,t,c)}return(0,jP.isTypeSubTypeOf)(e,t,r)}});var Xg=w(Go=>{"use strict";f();N();m();Object.defineProperty(Go,"__esModule",{value:!0});Go.specifiedSDLRules=Go.specifiedRules=Go.recommendedRules=void 0;var p4=NI(),f4=EI(),m4=yI(),KP=II(),GP=SI(),N4=DI(),$P=RI(),T4=PI(),E4=LI(),h4=BI(),y4=kI(),I4=xI(),g4=VI(),_4=KI(),v4=ZI(),S4=ng(),O4=ig(),QP=sg(),D4=ug(),b4=Eg(),A4=Ig(),YP=_g(),R4=Sg(),JP=bg(),F4=Rg(),P4=wg(),w4=Cg(),HP=Ug(),L4=Mg(),C4=qg(),B4=jg(),U4=Gg(),k4=Yg(),M4=Hg(),x4=Wg(),zP=Object.freeze([h4.MaxIntrospectionDepthRule]);Go.recommendedRules=zP;var q4=Object.freeze([p4.ExecutableDefinitionsRule,L4.UniqueOperationNamesRule,T4.LoneAnonymousOperationRule,b4.SingleFieldSubscriptionsRule,$P.KnownTypeNamesRule,m4.FragmentsOnCompositeTypesRule,M4.VariablesAreInputTypesRule,D4.ScalarLeafsRule,f4.FieldsOnCorrectTypeRule,w4.UniqueFragmentNamesRule,N4.KnownFragmentNamesRule,g4.NoUnusedFragmentsRule,S4.PossibleFragmentSpreadsRule,y4.NoFragmentCyclesRule,U4.UniqueVariableNamesRule,I4.NoUndefinedVariablesRule,_4.NoUnusedVariablesRule,GP.KnownDirectivesRule,JP.UniqueDirectivesPerLocationRule,KP.KnownArgumentNamesRule,YP.UniqueArgumentNamesRule,k4.ValuesOfCorrectTypeRule,QP.ProvidedRequiredArgumentsRule,x4.VariablesInAllowedPositionRule,v4.OverlappingFieldsCanBeMergedRule,HP.UniqueInputFieldNamesRule,...zP]);Go.specifiedRules=q4;var V4=Object.freeze([E4.LoneSchemaDefinitionRule,C4.UniqueOperationTypesRule,B4.UniqueTypeNamesRule,F4.UniqueEnumValueNamesRule,P4.UniqueFieldDefinitionNamesRule,A4.UniqueArgumentDefinitionNamesRule,R4.UniqueDirectiveNamesRule,$P.KnownTypeNamesRule,GP.KnownDirectivesRule,JP.UniqueDirectivesPerLocationRule,O4.PossibleTypeExtensionsRule,KP.KnownArgumentNamesOnDirectivesRule,YP.UniqueArgumentNamesRule,HP.UniqueInputFieldNamesRule,QP.ProvidedRequiredArgumentsOnDirectivesRule]);Go.specifiedSDLRules=V4});var t_=w($o=>{"use strict";f();N();m();Object.defineProperty($o,"__esModule",{value:!0});$o.ValidationContext=$o.SDLValidationContext=$o.ASTValidationContext=void 0;var WP=Rt(),j4=Fu(),XP=wm(),Kd=class{constructor(t,n){this._ast=t,this._fragments=void 0,this._fragmentSpreads=new Map,this._recursivelyReferencedFragments=new Map,this._onError=n}get[Symbol.toStringTag](){return"ASTValidationContext"}reportError(t){this._onError(t)}getDocument(){return this._ast}getFragment(t){let n;if(this._fragments)n=this._fragments;else{n=Object.create(null);for(let r of this.getDocument().definitions)r.kind===WP.Kind.FRAGMENT_DEFINITION&&(n[r.name.value]=r);this._fragments=n}return n[t]}getFragmentSpreads(t){let n=this._fragmentSpreads.get(t);if(!n){n=[];let r=[t],i;for(;i=r.pop();)for(let a of i.selections)a.kind===WP.Kind.FRAGMENT_SPREAD?n.push(a):a.selectionSet&&r.push(a.selectionSet);this._fragmentSpreads.set(t,n)}return n}getRecursivelyReferencedFragments(t){let n=this._recursivelyReferencedFragments.get(t);if(!n){n=[];let r=Object.create(null),i=[t.selectionSet],a;for(;a=i.pop();)for(let o of this.getFragmentSpreads(a)){let c=o.name.value;if(r[c]!==!0){r[c]=!0;let l=this.getFragment(c);l&&(n.push(l),i.push(l.selectionSet))}}this._recursivelyReferencedFragments.set(t,n)}return n}};$o.ASTValidationContext=Kd;var Zg=class extends Kd{constructor(t,n,r){super(t,r),this._schema=n}get[Symbol.toStringTag](){return"SDLValidationContext"}getSchema(){return this._schema}};$o.SDLValidationContext=Zg;var e_=class extends Kd{constructor(t,n,r,i){super(n,i),this._schema=t,this._typeInfo=r,this._variableUsages=new Map,this._recursiveVariableUsages=new Map}get[Symbol.toStringTag](){return"ValidationContext"}getSchema(){return this._schema}getVariableUsages(t){let n=this._variableUsages.get(t);if(!n){let r=[],i=new XP.TypeInfo(this._schema);(0,j4.visit)(t,(0,XP.visitWithTypeInfo)(i,{VariableDefinition:()=>!1,Variable(a){r.push({node:a,type:i.getInputType(),defaultValue:i.getDefaultValue()})}})),n=r,this._variableUsages.set(t,n)}return n}getRecursiveVariableUsages(t){let n=this._recursiveVariableUsages.get(t);if(!n){n=this.getVariableUsages(t);for(let r of this.getRecursivelyReferencedFragments(t))n=n.concat(this.getVariableUsages(r));this._recursiveVariableUsages.set(t,n)}return n}getType(){return this._typeInfo.getType()}getParentType(){return this._typeInfo.getParentType()}getInputType(){return this._typeInfo.getInputType()}getParentInputType(){return this._typeInfo.getParentInputType()}getFieldDef(){return this._typeInfo.getFieldDef()}getDirective(){return this._typeInfo.getDirective()}getArgument(){return this._typeInfo.getArgument()}getEnumValue(){return this._typeInfo.getEnumValue()}};$o.ValidationContext=e_});var Wc=w(zc=>{"use strict";f();N();m();Object.defineProperty(zc,"__esModule",{value:!0});zc.assertValidSDL=Y4;zc.assertValidSDLExtension=J4;zc.validate=Q4;zc.validateSDL=n_;var K4=Cr(),G4=He(),Qm=Fu(),$4=Ld(),ZP=wm(),ew=Xg(),tw=t_();function Q4(e,t,n=ew.specifiedRules,r,i=new ZP.TypeInfo(e)){var a;let o=(a=r==null?void 0:r.maxErrors)!==null&&a!==void 0?a:100;t||(0,K4.devAssert)(!1,"Must provide document."),(0,$4.assertValidSchema)(e);let c=Object.freeze({}),l=[],p=new tw.ValidationContext(e,t,i,y=>{if(l.length>=o)throw l.push(new G4.GraphQLError("Too many validation errors, error limit reached. Validation aborted.")),c;l.push(y)}),T=(0,Qm.visitInParallel)(n.map(y=>y(p)));try{(0,Qm.visit)(t,(0,ZP.visitWithTypeInfo)(i,T))}catch(y){if(y!==c)throw y}return l}function n_(e,t,n=ew.specifiedSDLRules){let r=[],i=new tw.SDLValidationContext(e,t,o=>{r.push(o)}),a=n.map(o=>o(i));return(0,Qm.visit)(e,(0,Qm.visitInParallel)(a)),r}function Y4(e){let t=n_(e);if(t.length!==0)throw new Error(t.map(n=>n.message).join(` -`))}function Q4(e,t){let n=t_(e,t);if(n.length!==0)throw new Error(n.map(r=>r.message).join(` +`))}function J4(e,t){let n=n_(e,t);if(n.length!==0)throw new Error(n.map(r=>r.message).join(` -`))}});var ew=P(n_=>{"use strict";f();T();m();Object.defineProperty(n_,"__esModule",{value:!0});n_.memoize3=Y4;function Y4(e){let t;return function(r,i,a){t===void 0&&(t=new WeakMap);let o=t.get(r);o===void 0&&(o=new WeakMap,t.set(r,o));let c=o.get(i);c===void 0&&(c=new WeakMap,o.set(i,c));let l=c.get(a);return l===void 0&&(l=e(r,i,a),c.set(a,l)),l}}});var tw=P(r_=>{"use strict";f();T();m();Object.defineProperty(r_,"__esModule",{value:!0});r_.promiseForObject=J4;function J4(e){return Promise.all(Object.values(e)).then(t=>{let n=Object.create(null);for(let[r,i]of Object.keys(e).entries())n[i]=t[r];return n})}});var nw=P(i_=>{"use strict";f();T();m();Object.defineProperty(i_,"__esModule",{value:!0});i_.promiseReduce=z4;var H4=Yf();function z4(e,t,n){let r=n;for(let i of e)r=(0,H4.isPromise)(r)?r.then(a=>t(a,i)):t(r,i);return r}});var rw=P(s_=>{"use strict";f();T();m();Object.defineProperty(s_,"__esModule",{value:!0});s_.toError=X4;var W4=Yt();function X4(e){return e instanceof Error?e:new a_(e)}var a_=class extends Error{constructor(t){super("Unexpected error value: "+(0,W4.inspect)(t)),this.name="NonErrorThrown",this.thrownValue=t}}});var Qm=P(o_=>{"use strict";f();T();m();Object.defineProperty(o_,"__esModule",{value:!0});o_.locatedError=tW;var Z4=rw(),eW=Je();function tW(e,t,n){var r;let i=(0,Z4.toError)(e);return nW(i)?i:new eW.GraphQLError(i.message,{nodes:(r=i.nodes)!==null&&r!==void 0?r:t,source:i.source,positions:i.positions,path:n,originalError:i})}function nW(e){return Array.isArray(e.path)}});var Gd=P(Pi=>{"use strict";f();T();m();Object.defineProperty(Pi,"__esModule",{value:!0});Pi.assertValidExecutionArguments=dw;Pi.buildExecutionContext=pw;Pi.buildResolveInfo=mw;Pi.defaultTypeResolver=Pi.defaultFieldResolver=void 0;Pi.execute=lw;Pi.executeSync=cW;Pi.getFieldDef=Nw;var c_=Cr(),xu=Yt(),rW=Ir(),iW=Dm(),p_=Sa(),ra=Yf(),aW=ew(),qu=Bd(),iw=tw(),sW=nw(),Fi=Je(),Jm=Qm(),u_=Oa(),aw=Rt(),$o=Ft(),Wc=Ai(),oW=wd(),uw=jm(),cw=Jc(),uW=(0,aW.memoize3)((e,t,n)=>(0,uw.collectSubfields)(e.schema,e.fragments,e.variableValues,t,n));function lw(e){arguments.length<2||(0,c_.devAssert)(!1,"graphql@16 dropped long-deprecated support for positional arguments, please pass an object instead.");let{schema:t,document:n,variableValues:r,rootValue:i}=e;dw(t,n,r);let a=pw(e);if(!("schema"in a))return{errors:a};try{let{operation:o}=a,c=lW(a,o,i);return(0,ra.isPromise)(c)?c.then(l=>Ym(l,a.errors),l=>(a.errors.push(l),Ym(null,a.errors))):Ym(c,a.errors)}catch(o){return a.errors.push(o),Ym(null,a.errors)}}function cW(e){let t=lw(e);if((0,ra.isPromise)(t))throw new Error("GraphQL execution failed to complete synchronously.");return t}function Ym(e,t){return t.length===0?{data:e}:{errors:t,data:e}}function dw(e,t,n){t||(0,c_.devAssert)(!1,"Must provide document."),(0,oW.assertValidSchema)(e),n==null||(0,p_.isObjectLike)(n)||(0,c_.devAssert)(!1,"Variables must be provided as an Object where each property is a variable value. Perhaps look to see if an unparsed JSON string was provided.")}function pw(e){var t,n;let{schema:r,document:i,rootValue:a,contextValue:o,variableValues:c,operationName:l,fieldResolver:p,typeResolver:N,subscribeFieldResolver:y}=e,g,_=Object.create(null);for(let j of i.definitions)switch(j.kind){case aw.Kind.OPERATION_DEFINITION:if(l==null){if(g!==void 0)return[new Fi.GraphQLError("Must provide operation name if query contains multiple operations.")];g=j}else((t=j.name)===null||t===void 0?void 0:t.value)===l&&(g=j);break;case aw.Kind.FRAGMENT_DEFINITION:_[j.name.value]=j;break;default:}if(!g)return l!=null?[new Fi.GraphQLError(`Unknown operation named "${l}".`)]:[new Fi.GraphQLError("Must provide an operation.")];let F=(n=g.variableDefinitions)!==null&&n!==void 0?n:[],B=(0,cw.getVariableValues)(r,F,c!=null?c:{},{maxErrors:50});return B.errors?B.errors:{schema:r,fragments:_,rootValue:a,contextValue:o,operation:g,variableValues:B.coerced,fieldResolver:p!=null?p:d_,typeResolver:N!=null?N:Tw,subscribeFieldResolver:y!=null?y:d_,errors:[]}}function lW(e,t,n){let r=e.schema.getRootType(t.operation);if(r==null)throw new Fi.GraphQLError(`Schema is not configured to execute ${t.operation} operation.`,{nodes:t});let i=(0,uw.collectFields)(e.schema,e.fragments,e.variableValues,r,t.selectionSet),a=void 0;switch(t.operation){case u_.OperationTypeNode.QUERY:return Hm(e,r,n,a,i);case u_.OperationTypeNode.MUTATION:return dW(e,r,n,a,i);case u_.OperationTypeNode.SUBSCRIPTION:return Hm(e,r,n,a,i)}}function dW(e,t,n,r,i){return(0,sW.promiseReduce)(i.entries(),(a,[o,c])=>{let l=(0,qu.addPath)(r,o,t.name),p=fw(e,t,n,c,l);return p===void 0?a:(0,ra.isPromise)(p)?p.then(N=>(a[o]=N,a)):(a[o]=p,a)},Object.create(null))}function Hm(e,t,n,r,i){let a=Object.create(null),o=!1;try{for(let[c,l]of i.entries()){let p=(0,qu.addPath)(r,c,t.name),N=fw(e,t,n,l,p);N!==void 0&&(a[c]=N,(0,ra.isPromise)(N)&&(o=!0))}}catch(c){if(o)return(0,iw.promiseForObject)(a).finally(()=>{throw c});throw c}return o?(0,iw.promiseForObject)(a):a}function fw(e,t,n,r,i){var a;let o=Nw(e.schema,t,r[0]);if(!o)return;let c=o.type,l=(a=o.resolve)!==null&&a!==void 0?a:e.fieldResolver,p=mw(e,o,r,t,i);try{let N=(0,cw.getArgumentValues)(o,r[0],e.variableValues),y=e.contextValue,g=l(n,N,y,p),_;return(0,ra.isPromise)(g)?_=g.then(F=>Kd(e,c,r,p,i,F)):_=Kd(e,c,r,p,i,g),(0,ra.isPromise)(_)?_.then(void 0,F=>{let B=(0,Jm.locatedError)(F,r,(0,qu.pathToArray)(i));return zm(B,c,e)}):_}catch(N){let y=(0,Jm.locatedError)(N,r,(0,qu.pathToArray)(i));return zm(y,c,e)}}function mw(e,t,n,r,i){return{fieldName:t.name,fieldNodes:n,returnType:t.type,parentType:r,path:i,schema:e.schema,fragments:e.fragments,rootValue:e.rootValue,operation:e.operation,variableValues:e.variableValues}}function zm(e,t,n){if((0,$o.isNonNullType)(t))throw e;return n.errors.push(e),null}function Kd(e,t,n,r,i,a){if(a instanceof Error)throw a;if((0,$o.isNonNullType)(t)){let o=Kd(e,t.ofType,n,r,i,a);if(o===null)throw new Error(`Cannot return null for non-nullable field ${r.parentType.name}.${r.fieldName}.`);return o}if(a==null)return null;if((0,$o.isListType)(t))return pW(e,t,n,r,i,a);if((0,$o.isLeafType)(t))return fW(t,a);if((0,$o.isAbstractType)(t))return mW(e,t,n,r,i,a);if((0,$o.isObjectType)(t))return l_(e,t,n,r,i,a);(0,rW.invariant)(!1,"Cannot complete value of unexpected output type: "+(0,xu.inspect)(t))}function pW(e,t,n,r,i,a){if(!(0,iW.isIterableObject)(a))throw new Fi.GraphQLError(`Expected Iterable, but did not find one for field "${r.parentType.name}.${r.fieldName}".`);let o=t.ofType,c=!1,l=Array.from(a,(p,N)=>{let y=(0,qu.addPath)(i,N,void 0);try{let g;return(0,ra.isPromise)(p)?g=p.then(_=>Kd(e,o,n,r,y,_)):g=Kd(e,o,n,r,y,p),(0,ra.isPromise)(g)?(c=!0,g.then(void 0,_=>{let F=(0,Jm.locatedError)(_,n,(0,qu.pathToArray)(y));return zm(F,o,e)})):g}catch(g){let _=(0,Jm.locatedError)(g,n,(0,qu.pathToArray)(y));return zm(_,o,e)}});return c?Promise.all(l):l}function fW(e,t){let n=e.serialize(t);if(n==null)throw new Error(`Expected \`${(0,xu.inspect)(e)}.serialize(${(0,xu.inspect)(t)})\` to return non-nullable value, returned: ${(0,xu.inspect)(n)}`);return n}function mW(e,t,n,r,i,a){var o;let c=(o=t.resolveType)!==null&&o!==void 0?o:e.typeResolver,l=e.contextValue,p=c(a,l,r,t);return(0,ra.isPromise)(p)?p.then(N=>l_(e,sw(N,e,t,n,r,a),n,r,i,a)):l_(e,sw(p,e,t,n,r,a),n,r,i,a)}function sw(e,t,n,r,i,a){if(e==null)throw new Fi.GraphQLError(`Abstract type "${n.name}" must resolve to an Object type at runtime for field "${i.parentType.name}.${i.fieldName}". Either the "${n.name}" type should provide a "resolveType" function or each possible type should provide an "isTypeOf" function.`,r);if((0,$o.isObjectType)(e))throw new Fi.GraphQLError("Support for returning GraphQLObjectType from resolveType was removed in graphql-js@16.0.0 please return type name instead.");if(typeof e!="string")throw new Fi.GraphQLError(`Abstract type "${n.name}" must resolve to an Object type at runtime for field "${i.parentType.name}.${i.fieldName}" with value ${(0,xu.inspect)(a)}, received "${(0,xu.inspect)(e)}".`);let o=t.schema.getType(e);if(o==null)throw new Fi.GraphQLError(`Abstract type "${n.name}" was resolved to a type "${e}" that does not exist inside the schema.`,{nodes:r});if(!(0,$o.isObjectType)(o))throw new Fi.GraphQLError(`Abstract type "${n.name}" was resolved to a non-object type "${e}".`,{nodes:r});if(!t.schema.isSubType(n,o))throw new Fi.GraphQLError(`Runtime Object type "${o.name}" is not a possible type for "${n.name}".`,{nodes:r});return o}function l_(e,t,n,r,i,a){let o=uW(e,t,n);if(t.isTypeOf){let c=t.isTypeOf(a,e.contextValue,r);if((0,ra.isPromise)(c))return c.then(l=>{if(!l)throw ow(t,a,n);return Hm(e,t,a,i,o)});if(!c)throw ow(t,a,n)}return Hm(e,t,a,i,o)}function ow(e,t,n){return new Fi.GraphQLError(`Expected value of type "${e.name}" but got: ${(0,xu.inspect)(t)}.`,{nodes:n})}var Tw=function(e,t,n,r){if((0,p_.isObjectLike)(e)&&typeof e.__typename=="string")return e.__typename;let i=n.schema.getPossibleTypes(r),a=[];for(let o=0;o{for(let c=0;c{"use strict";f();T();m();Object.defineProperty(Wm,"__esModule",{value:!0});Wm.graphql=gW;Wm.graphqlSync=_W;var TW=Cr(),NW=Yf(),hW=Mc(),EW=wd(),yW=zc(),IW=Gd();function gW(e){return new Promise(t=>t(hw(e)))}function _W(e){let t=hw(e);if((0,NW.isPromise)(t))throw new Error("GraphQL execution failed to complete synchronously.");return t}function hw(e){arguments.length<2||(0,TW.devAssert)(!1,"graphql@16 dropped long-deprecated support for positional arguments, please pass an object instead.");let{schema:t,source:n,rootValue:r,contextValue:i,variableValues:a,operationName:o,fieldResolver:c,typeResolver:l}=e,p=(0,EW.validateSchema)(t);if(p.length>0)return{errors:p};let N;try{N=(0,hW.parse)(n)}catch(g){return{errors:[g]}}let y=(0,yW.validate)(t,N);return y.length>0?{errors:y}:(0,IW.execute)({schema:t,document:N,rootValue:r,contextValue:i,variableValues:a,operationName:o,fieldResolver:c,typeResolver:l})}});var gw=P(ye=>{"use strict";f();T();m();Object.defineProperty(ye,"__esModule",{value:!0});Object.defineProperty(ye,"DEFAULT_DEPRECATION_REASON",{enumerable:!0,get:function(){return ia.DEFAULT_DEPRECATION_REASON}});Object.defineProperty(ye,"GRAPHQL_MAX_INT",{enumerable:!0,get:function(){return Ts.GRAPHQL_MAX_INT}});Object.defineProperty(ye,"GRAPHQL_MIN_INT",{enumerable:!0,get:function(){return Ts.GRAPHQL_MIN_INT}});Object.defineProperty(ye,"GraphQLBoolean",{enumerable:!0,get:function(){return Ts.GraphQLBoolean}});Object.defineProperty(ye,"GraphQLDeprecatedDirective",{enumerable:!0,get:function(){return ia.GraphQLDeprecatedDirective}});Object.defineProperty(ye,"GraphQLDirective",{enumerable:!0,get:function(){return ia.GraphQLDirective}});Object.defineProperty(ye,"GraphQLEnumType",{enumerable:!0,get:function(){return nt.GraphQLEnumType}});Object.defineProperty(ye,"GraphQLFloat",{enumerable:!0,get:function(){return Ts.GraphQLFloat}});Object.defineProperty(ye,"GraphQLID",{enumerable:!0,get:function(){return Ts.GraphQLID}});Object.defineProperty(ye,"GraphQLIncludeDirective",{enumerable:!0,get:function(){return ia.GraphQLIncludeDirective}});Object.defineProperty(ye,"GraphQLInputObjectType",{enumerable:!0,get:function(){return nt.GraphQLInputObjectType}});Object.defineProperty(ye,"GraphQLInt",{enumerable:!0,get:function(){return Ts.GraphQLInt}});Object.defineProperty(ye,"GraphQLInterfaceType",{enumerable:!0,get:function(){return nt.GraphQLInterfaceType}});Object.defineProperty(ye,"GraphQLList",{enumerable:!0,get:function(){return nt.GraphQLList}});Object.defineProperty(ye,"GraphQLNonNull",{enumerable:!0,get:function(){return nt.GraphQLNonNull}});Object.defineProperty(ye,"GraphQLObjectType",{enumerable:!0,get:function(){return nt.GraphQLObjectType}});Object.defineProperty(ye,"GraphQLOneOfDirective",{enumerable:!0,get:function(){return ia.GraphQLOneOfDirective}});Object.defineProperty(ye,"GraphQLScalarType",{enumerable:!0,get:function(){return nt.GraphQLScalarType}});Object.defineProperty(ye,"GraphQLSchema",{enumerable:!0,get:function(){return f_.GraphQLSchema}});Object.defineProperty(ye,"GraphQLSkipDirective",{enumerable:!0,get:function(){return ia.GraphQLSkipDirective}});Object.defineProperty(ye,"GraphQLSpecifiedByDirective",{enumerable:!0,get:function(){return ia.GraphQLSpecifiedByDirective}});Object.defineProperty(ye,"GraphQLString",{enumerable:!0,get:function(){return Ts.GraphQLString}});Object.defineProperty(ye,"GraphQLUnionType",{enumerable:!0,get:function(){return nt.GraphQLUnionType}});Object.defineProperty(ye,"SchemaMetaFieldDef",{enumerable:!0,get:function(){return Yr.SchemaMetaFieldDef}});Object.defineProperty(ye,"TypeKind",{enumerable:!0,get:function(){return Yr.TypeKind}});Object.defineProperty(ye,"TypeMetaFieldDef",{enumerable:!0,get:function(){return Yr.TypeMetaFieldDef}});Object.defineProperty(ye,"TypeNameMetaFieldDef",{enumerable:!0,get:function(){return Yr.TypeNameMetaFieldDef}});Object.defineProperty(ye,"__Directive",{enumerable:!0,get:function(){return Yr.__Directive}});Object.defineProperty(ye,"__DirectiveLocation",{enumerable:!0,get:function(){return Yr.__DirectiveLocation}});Object.defineProperty(ye,"__EnumValue",{enumerable:!0,get:function(){return Yr.__EnumValue}});Object.defineProperty(ye,"__Field",{enumerable:!0,get:function(){return Yr.__Field}});Object.defineProperty(ye,"__InputValue",{enumerable:!0,get:function(){return Yr.__InputValue}});Object.defineProperty(ye,"__Schema",{enumerable:!0,get:function(){return Yr.__Schema}});Object.defineProperty(ye,"__Type",{enumerable:!0,get:function(){return Yr.__Type}});Object.defineProperty(ye,"__TypeKind",{enumerable:!0,get:function(){return Yr.__TypeKind}});Object.defineProperty(ye,"assertAbstractType",{enumerable:!0,get:function(){return nt.assertAbstractType}});Object.defineProperty(ye,"assertCompositeType",{enumerable:!0,get:function(){return nt.assertCompositeType}});Object.defineProperty(ye,"assertDirective",{enumerable:!0,get:function(){return ia.assertDirective}});Object.defineProperty(ye,"assertEnumType",{enumerable:!0,get:function(){return nt.assertEnumType}});Object.defineProperty(ye,"assertEnumValueName",{enumerable:!0,get:function(){return Iw.assertEnumValueName}});Object.defineProperty(ye,"assertInputObjectType",{enumerable:!0,get:function(){return nt.assertInputObjectType}});Object.defineProperty(ye,"assertInputType",{enumerable:!0,get:function(){return nt.assertInputType}});Object.defineProperty(ye,"assertInterfaceType",{enumerable:!0,get:function(){return nt.assertInterfaceType}});Object.defineProperty(ye,"assertLeafType",{enumerable:!0,get:function(){return nt.assertLeafType}});Object.defineProperty(ye,"assertListType",{enumerable:!0,get:function(){return nt.assertListType}});Object.defineProperty(ye,"assertName",{enumerable:!0,get:function(){return Iw.assertName}});Object.defineProperty(ye,"assertNamedType",{enumerable:!0,get:function(){return nt.assertNamedType}});Object.defineProperty(ye,"assertNonNullType",{enumerable:!0,get:function(){return nt.assertNonNullType}});Object.defineProperty(ye,"assertNullableType",{enumerable:!0,get:function(){return nt.assertNullableType}});Object.defineProperty(ye,"assertObjectType",{enumerable:!0,get:function(){return nt.assertObjectType}});Object.defineProperty(ye,"assertOutputType",{enumerable:!0,get:function(){return nt.assertOutputType}});Object.defineProperty(ye,"assertScalarType",{enumerable:!0,get:function(){return nt.assertScalarType}});Object.defineProperty(ye,"assertSchema",{enumerable:!0,get:function(){return f_.assertSchema}});Object.defineProperty(ye,"assertType",{enumerable:!0,get:function(){return nt.assertType}});Object.defineProperty(ye,"assertUnionType",{enumerable:!0,get:function(){return nt.assertUnionType}});Object.defineProperty(ye,"assertValidSchema",{enumerable:!0,get:function(){return yw.assertValidSchema}});Object.defineProperty(ye,"assertWrappingType",{enumerable:!0,get:function(){return nt.assertWrappingType}});Object.defineProperty(ye,"getNamedType",{enumerable:!0,get:function(){return nt.getNamedType}});Object.defineProperty(ye,"getNullableType",{enumerable:!0,get:function(){return nt.getNullableType}});Object.defineProperty(ye,"introspectionTypes",{enumerable:!0,get:function(){return Yr.introspectionTypes}});Object.defineProperty(ye,"isAbstractType",{enumerable:!0,get:function(){return nt.isAbstractType}});Object.defineProperty(ye,"isCompositeType",{enumerable:!0,get:function(){return nt.isCompositeType}});Object.defineProperty(ye,"isDirective",{enumerable:!0,get:function(){return ia.isDirective}});Object.defineProperty(ye,"isEnumType",{enumerable:!0,get:function(){return nt.isEnumType}});Object.defineProperty(ye,"isInputObjectType",{enumerable:!0,get:function(){return nt.isInputObjectType}});Object.defineProperty(ye,"isInputType",{enumerable:!0,get:function(){return nt.isInputType}});Object.defineProperty(ye,"isInterfaceType",{enumerable:!0,get:function(){return nt.isInterfaceType}});Object.defineProperty(ye,"isIntrospectionType",{enumerable:!0,get:function(){return Yr.isIntrospectionType}});Object.defineProperty(ye,"isLeafType",{enumerable:!0,get:function(){return nt.isLeafType}});Object.defineProperty(ye,"isListType",{enumerable:!0,get:function(){return nt.isListType}});Object.defineProperty(ye,"isNamedType",{enumerable:!0,get:function(){return nt.isNamedType}});Object.defineProperty(ye,"isNonNullType",{enumerable:!0,get:function(){return nt.isNonNullType}});Object.defineProperty(ye,"isNullableType",{enumerable:!0,get:function(){return nt.isNullableType}});Object.defineProperty(ye,"isObjectType",{enumerable:!0,get:function(){return nt.isObjectType}});Object.defineProperty(ye,"isOutputType",{enumerable:!0,get:function(){return nt.isOutputType}});Object.defineProperty(ye,"isRequiredArgument",{enumerable:!0,get:function(){return nt.isRequiredArgument}});Object.defineProperty(ye,"isRequiredInputField",{enumerable:!0,get:function(){return nt.isRequiredInputField}});Object.defineProperty(ye,"isScalarType",{enumerable:!0,get:function(){return nt.isScalarType}});Object.defineProperty(ye,"isSchema",{enumerable:!0,get:function(){return f_.isSchema}});Object.defineProperty(ye,"isSpecifiedDirective",{enumerable:!0,get:function(){return ia.isSpecifiedDirective}});Object.defineProperty(ye,"isSpecifiedScalarType",{enumerable:!0,get:function(){return Ts.isSpecifiedScalarType}});Object.defineProperty(ye,"isType",{enumerable:!0,get:function(){return nt.isType}});Object.defineProperty(ye,"isUnionType",{enumerable:!0,get:function(){return nt.isUnionType}});Object.defineProperty(ye,"isWrappingType",{enumerable:!0,get:function(){return nt.isWrappingType}});Object.defineProperty(ye,"resolveObjMapThunk",{enumerable:!0,get:function(){return nt.resolveObjMapThunk}});Object.defineProperty(ye,"resolveReadonlyArrayThunk",{enumerable:!0,get:function(){return nt.resolveReadonlyArrayThunk}});Object.defineProperty(ye,"specifiedDirectives",{enumerable:!0,get:function(){return ia.specifiedDirectives}});Object.defineProperty(ye,"specifiedScalarTypes",{enumerable:!0,get:function(){return Ts.specifiedScalarTypes}});Object.defineProperty(ye,"validateSchema",{enumerable:!0,get:function(){return yw.validateSchema}});var f_=Cu(),nt=Ft(),ia=$r(),Ts=Aa(),Yr=Ai(),yw=wd(),Iw=hd()});var vw=P(Ct=>{"use strict";f();T();m();Object.defineProperty(Ct,"__esModule",{value:!0});Object.defineProperty(Ct,"BREAK",{enumerable:!0,get:function(){return $d.BREAK}});Object.defineProperty(Ct,"DirectiveLocation",{enumerable:!0,get:function(){return RW.DirectiveLocation}});Object.defineProperty(Ct,"Kind",{enumerable:!0,get:function(){return OW.Kind}});Object.defineProperty(Ct,"Lexer",{enumerable:!0,get:function(){return DW.Lexer}});Object.defineProperty(Ct,"Location",{enumerable:!0,get:function(){return m_.Location}});Object.defineProperty(Ct,"OperationTypeNode",{enumerable:!0,get:function(){return m_.OperationTypeNode}});Object.defineProperty(Ct,"Source",{enumerable:!0,get:function(){return vW.Source}});Object.defineProperty(Ct,"Token",{enumerable:!0,get:function(){return m_.Token}});Object.defineProperty(Ct,"TokenKind",{enumerable:!0,get:function(){return bW.TokenKind}});Object.defineProperty(Ct,"getEnterLeaveForKind",{enumerable:!0,get:function(){return $d.getEnterLeaveForKind}});Object.defineProperty(Ct,"getLocation",{enumerable:!0,get:function(){return SW.getLocation}});Object.defineProperty(Ct,"getVisitFn",{enumerable:!0,get:function(){return $d.getVisitFn}});Object.defineProperty(Ct,"isConstValueNode",{enumerable:!0,get:function(){return wa.isConstValueNode}});Object.defineProperty(Ct,"isDefinitionNode",{enumerable:!0,get:function(){return wa.isDefinitionNode}});Object.defineProperty(Ct,"isExecutableDefinitionNode",{enumerable:!0,get:function(){return wa.isExecutableDefinitionNode}});Object.defineProperty(Ct,"isSelectionNode",{enumerable:!0,get:function(){return wa.isSelectionNode}});Object.defineProperty(Ct,"isTypeDefinitionNode",{enumerable:!0,get:function(){return wa.isTypeDefinitionNode}});Object.defineProperty(Ct,"isTypeExtensionNode",{enumerable:!0,get:function(){return wa.isTypeExtensionNode}});Object.defineProperty(Ct,"isTypeNode",{enumerable:!0,get:function(){return wa.isTypeNode}});Object.defineProperty(Ct,"isTypeSystemDefinitionNode",{enumerable:!0,get:function(){return wa.isTypeSystemDefinitionNode}});Object.defineProperty(Ct,"isTypeSystemExtensionNode",{enumerable:!0,get:function(){return wa.isTypeSystemExtensionNode}});Object.defineProperty(Ct,"isValueNode",{enumerable:!0,get:function(){return wa.isValueNode}});Object.defineProperty(Ct,"parse",{enumerable:!0,get:function(){return Xm.parse}});Object.defineProperty(Ct,"parseConstValue",{enumerable:!0,get:function(){return Xm.parseConstValue}});Object.defineProperty(Ct,"parseType",{enumerable:!0,get:function(){return Xm.parseType}});Object.defineProperty(Ct,"parseValue",{enumerable:!0,get:function(){return Xm.parseValue}});Object.defineProperty(Ct,"print",{enumerable:!0,get:function(){return AW.print}});Object.defineProperty(Ct,"printLocation",{enumerable:!0,get:function(){return _w.printLocation}});Object.defineProperty(Ct,"printSourceLocation",{enumerable:!0,get:function(){return _w.printSourceLocation}});Object.defineProperty(Ct,"visit",{enumerable:!0,get:function(){return $d.visit}});Object.defineProperty(Ct,"visitInParallel",{enumerable:!0,get:function(){return $d.visitInParallel}});var vW=rm(),SW=Jf(),_w=ly(),OW=Rt(),bW=cd(),DW=Zf(),Xm=Mc(),AW=ci(),$d=Au(),m_=Oa(),wa=Uu(),RW=Uc()});var Sw=P(T_=>{"use strict";f();T();m();Object.defineProperty(T_,"__esModule",{value:!0});T_.isAsyncIterable=FW;function FW(e){return typeof(e==null?void 0:e[Symbol.asyncIterator])=="function"}});var Ow=P(N_=>{"use strict";f();T();m();Object.defineProperty(N_,"__esModule",{value:!0});N_.mapAsyncIterator=PW;function PW(e,t){let n=e[Symbol.asyncIterator]();function r(a){return vi(this,null,function*(){if(a.done)return a;try{return{value:yield t(a.value),done:!1}}catch(o){if(typeof n.return=="function")try{yield n.return()}catch(c){}throw o}})}return{next(){return vi(this,null,function*(){return r(yield n.next())})},return(){return vi(this,null,function*(){return typeof n.return=="function"?r(yield n.return()):{value:void 0,done:!0}})},throw(a){return vi(this,null,function*(){if(typeof n.throw=="function")return r(yield n.throw(a));throw a})},[Symbol.asyncIterator](){return this}}}});var Rw=P(Zm=>{"use strict";f();T();m();Object.defineProperty(Zm,"__esModule",{value:!0});Zm.createSourceEventStream=Aw;Zm.subscribe=MW;var wW=Cr(),LW=Yt(),Dw=Sw(),bw=Bd(),h_=Je(),CW=Qm(),BW=jm(),Qd=Gd(),UW=Ow(),kW=Jc();function MW(t){return vi(this,arguments,function*(e){arguments.length<2||(0,wW.devAssert)(!1,"graphql@16 dropped long-deprecated support for positional arguments, please pass an object instead.");let n=yield Aw(e);if(!(0,Dw.isAsyncIterable)(n))return n;let r=i=>(0,Qd.execute)(Q(k({},e),{rootValue:i}));return(0,UW.mapAsyncIterator)(n,r)})}function xW(e){let t=e[0];return t&&"document"in t?t:{schema:t,document:e[1],rootValue:e[2],contextValue:e[3],variableValues:e[4],operationName:e[5],subscribeFieldResolver:e[6]}}function Aw(...e){return vi(this,null,function*(){let t=xW(e),{schema:n,document:r,variableValues:i}=t;(0,Qd.assertValidExecutionArguments)(n,r,i);let a=(0,Qd.buildExecutionContext)(t);if(!("schema"in a))return{errors:a};try{let o=yield qW(a);if(!(0,Dw.isAsyncIterable)(o))throw new Error(`Subscription field must return Async Iterable. Received: ${(0,LW.inspect)(o)}.`);return o}catch(o){if(o instanceof h_.GraphQLError)return{errors:[o]};throw o}})}function qW(e){return vi(this,null,function*(){let{schema:t,fragments:n,operation:r,variableValues:i,rootValue:a}=e,o=t.getSubscriptionType();if(o==null)throw new h_.GraphQLError("Schema is not configured to execute subscription operation.",{nodes:r});let c=(0,BW.collectFields)(t,n,i,o,r.selectionSet),[l,p]=[...c.entries()][0],N=(0,Qd.getFieldDef)(t,o,p[0]);if(!N){let F=p[0].name.value;throw new h_.GraphQLError(`The subscription field "${F}" is not defined.`,{nodes:p})}let y=(0,bw.addPath)(void 0,l,o.name),g=(0,Qd.buildResolveInfo)(e,N,p,o,y);try{var _;let F=(0,kW.getArgumentValues)(N,p[0],i),B=e.contextValue,J=yield((_=N.subscribe)!==null&&_!==void 0?_:e.subscribeFieldResolver)(a,F,B,g);if(J instanceof Error)throw J;return J}catch(F){throw(0,CW.locatedError)(F,p,(0,bw.pathToArray)(y))}})}});var Pw=P(wi=>{"use strict";f();T();m();Object.defineProperty(wi,"__esModule",{value:!0});Object.defineProperty(wi,"createSourceEventStream",{enumerable:!0,get:function(){return Fw.createSourceEventStream}});Object.defineProperty(wi,"defaultFieldResolver",{enumerable:!0,get:function(){return eT.defaultFieldResolver}});Object.defineProperty(wi,"defaultTypeResolver",{enumerable:!0,get:function(){return eT.defaultTypeResolver}});Object.defineProperty(wi,"execute",{enumerable:!0,get:function(){return eT.execute}});Object.defineProperty(wi,"executeSync",{enumerable:!0,get:function(){return eT.executeSync}});Object.defineProperty(wi,"getArgumentValues",{enumerable:!0,get:function(){return E_.getArgumentValues}});Object.defineProperty(wi,"getDirectiveValues",{enumerable:!0,get:function(){return E_.getDirectiveValues}});Object.defineProperty(wi,"getVariableValues",{enumerable:!0,get:function(){return E_.getVariableValues}});Object.defineProperty(wi,"responsePathAsArray",{enumerable:!0,get:function(){return VW.pathToArray}});Object.defineProperty(wi,"subscribe",{enumerable:!0,get:function(){return Fw.subscribe}});var VW=Bd(),eT=Gd(),Fw=Rw(),E_=Jc()});var ww=P(g_=>{"use strict";f();T();m();Object.defineProperty(g_,"__esModule",{value:!0});g_.NoDeprecatedCustomRule=jW;var y_=Ir(),Yd=Je(),I_=Ft();function jW(e){return{Field(t){let n=e.getFieldDef(),r=n==null?void 0:n.deprecationReason;if(n&&r!=null){let i=e.getParentType();i!=null||(0,y_.invariant)(!1),e.reportError(new Yd.GraphQLError(`The field ${i.name}.${n.name} is deprecated. ${r}`,{nodes:t}))}},Argument(t){let n=e.getArgument(),r=n==null?void 0:n.deprecationReason;if(n&&r!=null){let i=e.getDirective();if(i!=null)e.reportError(new Yd.GraphQLError(`Directive "@${i.name}" argument "${n.name}" is deprecated. ${r}`,{nodes:t}));else{let a=e.getParentType(),o=e.getFieldDef();a!=null&&o!=null||(0,y_.invariant)(!1),e.reportError(new Yd.GraphQLError(`Field "${a.name}.${o.name}" argument "${n.name}" is deprecated. ${r}`,{nodes:t}))}}},ObjectField(t){let n=(0,I_.getNamedType)(e.getParentInputType());if((0,I_.isInputObjectType)(n)){let r=n.getFields()[t.name.value],i=r==null?void 0:r.deprecationReason;i!=null&&e.reportError(new Yd.GraphQLError(`The input field ${n.name}.${r.name} is deprecated. ${i}`,{nodes:t}))}},EnumValue(t){let n=e.getEnumValue(),r=n==null?void 0:n.deprecationReason;if(n&&r!=null){let i=(0,I_.getNamedType)(e.getInputType());i!=null||(0,y_.invariant)(!1),e.reportError(new Yd.GraphQLError(`The enum value "${i.name}.${n.name}" is deprecated. ${r}`,{nodes:t}))}}}}});var Lw=P(__=>{"use strict";f();T();m();Object.defineProperty(__,"__esModule",{value:!0});__.NoSchemaIntrospectionCustomRule=QW;var KW=Je(),GW=Ft(),$W=Ai();function QW(e){return{Field(t){let n=(0,GW.getNamedType)(e.getType());n&&(0,$W.isIntrospectionType)(n)&&e.reportError(new KW.GraphQLError(`GraphQL introspection has been disabled, but the requested query contained the field "${t.name.value}".`,{nodes:t}))}}}});var Bw=P(lt=>{"use strict";f();T();m();Object.defineProperty(lt,"__esModule",{value:!0});Object.defineProperty(lt,"ExecutableDefinitionsRule",{enumerable:!0,get:function(){return HW.ExecutableDefinitionsRule}});Object.defineProperty(lt,"FieldsOnCorrectTypeRule",{enumerable:!0,get:function(){return zW.FieldsOnCorrectTypeRule}});Object.defineProperty(lt,"FragmentsOnCompositeTypesRule",{enumerable:!0,get:function(){return WW.FragmentsOnCompositeTypesRule}});Object.defineProperty(lt,"KnownArgumentNamesRule",{enumerable:!0,get:function(){return XW.KnownArgumentNamesRule}});Object.defineProperty(lt,"KnownDirectivesRule",{enumerable:!0,get:function(){return ZW.KnownDirectivesRule}});Object.defineProperty(lt,"KnownFragmentNamesRule",{enumerable:!0,get:function(){return e8.KnownFragmentNamesRule}});Object.defineProperty(lt,"KnownTypeNamesRule",{enumerable:!0,get:function(){return t8.KnownTypeNamesRule}});Object.defineProperty(lt,"LoneAnonymousOperationRule",{enumerable:!0,get:function(){return n8.LoneAnonymousOperationRule}});Object.defineProperty(lt,"LoneSchemaDefinitionRule",{enumerable:!0,get:function(){return _8.LoneSchemaDefinitionRule}});Object.defineProperty(lt,"MaxIntrospectionDepthRule",{enumerable:!0,get:function(){return g8.MaxIntrospectionDepthRule}});Object.defineProperty(lt,"NoDeprecatedCustomRule",{enumerable:!0,get:function(){return F8.NoDeprecatedCustomRule}});Object.defineProperty(lt,"NoFragmentCyclesRule",{enumerable:!0,get:function(){return r8.NoFragmentCyclesRule}});Object.defineProperty(lt,"NoSchemaIntrospectionCustomRule",{enumerable:!0,get:function(){return P8.NoSchemaIntrospectionCustomRule}});Object.defineProperty(lt,"NoUndefinedVariablesRule",{enumerable:!0,get:function(){return i8.NoUndefinedVariablesRule}});Object.defineProperty(lt,"NoUnusedFragmentsRule",{enumerable:!0,get:function(){return a8.NoUnusedFragmentsRule}});Object.defineProperty(lt,"NoUnusedVariablesRule",{enumerable:!0,get:function(){return s8.NoUnusedVariablesRule}});Object.defineProperty(lt,"OverlappingFieldsCanBeMergedRule",{enumerable:!0,get:function(){return o8.OverlappingFieldsCanBeMergedRule}});Object.defineProperty(lt,"PossibleFragmentSpreadsRule",{enumerable:!0,get:function(){return u8.PossibleFragmentSpreadsRule}});Object.defineProperty(lt,"PossibleTypeExtensionsRule",{enumerable:!0,get:function(){return R8.PossibleTypeExtensionsRule}});Object.defineProperty(lt,"ProvidedRequiredArgumentsRule",{enumerable:!0,get:function(){return c8.ProvidedRequiredArgumentsRule}});Object.defineProperty(lt,"ScalarLeafsRule",{enumerable:!0,get:function(){return l8.ScalarLeafsRule}});Object.defineProperty(lt,"SingleFieldSubscriptionsRule",{enumerable:!0,get:function(){return d8.SingleFieldSubscriptionsRule}});Object.defineProperty(lt,"UniqueArgumentDefinitionNamesRule",{enumerable:!0,get:function(){return D8.UniqueArgumentDefinitionNamesRule}});Object.defineProperty(lt,"UniqueArgumentNamesRule",{enumerable:!0,get:function(){return p8.UniqueArgumentNamesRule}});Object.defineProperty(lt,"UniqueDirectiveNamesRule",{enumerable:!0,get:function(){return A8.UniqueDirectiveNamesRule}});Object.defineProperty(lt,"UniqueDirectivesPerLocationRule",{enumerable:!0,get:function(){return f8.UniqueDirectivesPerLocationRule}});Object.defineProperty(lt,"UniqueEnumValueNamesRule",{enumerable:!0,get:function(){return O8.UniqueEnumValueNamesRule}});Object.defineProperty(lt,"UniqueFieldDefinitionNamesRule",{enumerable:!0,get:function(){return b8.UniqueFieldDefinitionNamesRule}});Object.defineProperty(lt,"UniqueFragmentNamesRule",{enumerable:!0,get:function(){return m8.UniqueFragmentNamesRule}});Object.defineProperty(lt,"UniqueInputFieldNamesRule",{enumerable:!0,get:function(){return T8.UniqueInputFieldNamesRule}});Object.defineProperty(lt,"UniqueOperationNamesRule",{enumerable:!0,get:function(){return N8.UniqueOperationNamesRule}});Object.defineProperty(lt,"UniqueOperationTypesRule",{enumerable:!0,get:function(){return v8.UniqueOperationTypesRule}});Object.defineProperty(lt,"UniqueTypeNamesRule",{enumerable:!0,get:function(){return S8.UniqueTypeNamesRule}});Object.defineProperty(lt,"UniqueVariableNamesRule",{enumerable:!0,get:function(){return h8.UniqueVariableNamesRule}});Object.defineProperty(lt,"ValidationContext",{enumerable:!0,get:function(){return JW.ValidationContext}});Object.defineProperty(lt,"ValuesOfCorrectTypeRule",{enumerable:!0,get:function(){return E8.ValuesOfCorrectTypeRule}});Object.defineProperty(lt,"VariablesAreInputTypesRule",{enumerable:!0,get:function(){return y8.VariablesAreInputTypesRule}});Object.defineProperty(lt,"VariablesInAllowedPositionRule",{enumerable:!0,get:function(){return I8.VariablesInAllowedPositionRule}});Object.defineProperty(lt,"recommendedRules",{enumerable:!0,get:function(){return Cw.recommendedRules}});Object.defineProperty(lt,"specifiedRules",{enumerable:!0,get:function(){return Cw.specifiedRules}});Object.defineProperty(lt,"validate",{enumerable:!0,get:function(){return YW.validate}});var YW=zc(),JW=e_(),Cw=Wg(),HW=mI(),zW=NI(),WW=EI(),XW=yI(),ZW=vI(),e8=OI(),t8=AI(),n8=FI(),r8=UI(),i8=MI(),a8=qI(),s8=jI(),o8=XI(),u8=tg(),c8=ag(),l8=og(),d8=Ng(),p8=gg(),f8=bg(),m8=Lg(),T8=Bg(),N8=kg(),h8=Kg(),E8=Qg(),y8=Jg(),I8=zg(),g8=CI(),_8=wI(),v8=xg(),S8=Vg(),O8=Ag(),b8=Pg(),D8=yg(),A8=vg(),R8=rg(),F8=ww(),P8=Lw()});var Uw=P(Vu=>{"use strict";f();T();m();Object.defineProperty(Vu,"__esModule",{value:!0});Object.defineProperty(Vu,"GraphQLError",{enumerable:!0,get:function(){return v_.GraphQLError}});Object.defineProperty(Vu,"formatError",{enumerable:!0,get:function(){return v_.formatError}});Object.defineProperty(Vu,"locatedError",{enumerable:!0,get:function(){return L8.locatedError}});Object.defineProperty(Vu,"printError",{enumerable:!0,get:function(){return v_.printError}});Object.defineProperty(Vu,"syntaxError",{enumerable:!0,get:function(){return w8.syntaxError}});var v_=Je(),w8=zf(),L8=Qm()});var O_=P(S_=>{"use strict";f();T();m();Object.defineProperty(S_,"__esModule",{value:!0});S_.getIntrospectionQuery=C8;function C8(e){let t=k({descriptions:!0,specifiedByUrl:!1,directiveIsRepeatable:!1,schemaDescription:!1,inputValueDeprecation:!1,oneOf:!1},e),n=t.descriptions?"description":"",r=t.specifiedByUrl?"specifiedByURL":"",i=t.directiveIsRepeatable?"isRepeatable":"",a=t.schemaDescription?n:"";function o(l){return t.inputValueDeprecation?l:""}let c=t.oneOf?"isOneOf":"";return` +`))}});var nw=w(r_=>{"use strict";f();N();m();Object.defineProperty(r_,"__esModule",{value:!0});r_.memoize3=H4;function H4(e){let t;return function(r,i,a){t===void 0&&(t=new WeakMap);let o=t.get(r);o===void 0&&(o=new WeakMap,t.set(r,o));let c=o.get(i);c===void 0&&(c=new WeakMap,o.set(i,c));let l=c.get(a);return l===void 0&&(l=e(r,i,a),c.set(a,l)),l}}});var rw=w(i_=>{"use strict";f();N();m();Object.defineProperty(i_,"__esModule",{value:!0});i_.promiseForObject=z4;function z4(e){return Promise.all(Object.values(e)).then(t=>{let n=Object.create(null);for(let[r,i]of Object.keys(e).entries())n[i]=t[r];return n})}});var iw=w(a_=>{"use strict";f();N();m();Object.defineProperty(a_,"__esModule",{value:!0});a_.promiseReduce=X4;var W4=Jf();function X4(e,t,n){let r=n;for(let i of e)r=(0,W4.isPromise)(r)?r.then(a=>t(a,i)):t(r,i);return r}});var aw=w(o_=>{"use strict";f();N();m();Object.defineProperty(o_,"__esModule",{value:!0});o_.toError=eW;var Z4=Yt();function eW(e){return e instanceof Error?e:new s_(e)}var s_=class extends Error{constructor(t){super("Unexpected error value: "+(0,Z4.inspect)(t)),this.name="NonErrorThrown",this.thrownValue=t}}});var Ym=w(u_=>{"use strict";f();N();m();Object.defineProperty(u_,"__esModule",{value:!0});u_.locatedError=rW;var tW=aw(),nW=He();function rW(e,t,n){var r;let i=(0,tW.toError)(e);return iW(i)?i:new nW.GraphQLError(i.message,{nodes:(r=i.nodes)!==null&&r!==void 0?r:t,source:i.source,positions:i.positions,path:n,originalError:i})}function iW(e){return Array.isArray(e.path)}});var $d=w(wi=>{"use strict";f();N();m();Object.defineProperty(wi,"__esModule",{value:!0});wi.assertValidExecutionArguments=fw;wi.buildExecutionContext=mw;wi.buildResolveInfo=Tw;wi.defaultTypeResolver=wi.defaultFieldResolver=void 0;wi.execute=pw;wi.executeSync=dW;wi.getFieldDef=hw;var l_=Cr(),Vu=Yt(),aW=Ir(),sW=Am(),f_=Sa(),ra=Jf(),oW=nw(),ju=Ud(),sw=rw(),uW=iw(),Pi=He(),Hm=Ym(),c_=Oa(),ow=Rt(),Qo=Ft(),Xc=Ri(),cW=Ld(),lw=Km(),dw=Hc(),lW=(0,oW.memoize3)((e,t,n)=>(0,lw.collectSubfields)(e.schema,e.fragments,e.variableValues,t,n));function pw(e){arguments.length<2||(0,l_.devAssert)(!1,"graphql@16 dropped long-deprecated support for positional arguments, please pass an object instead.");let{schema:t,document:n,variableValues:r,rootValue:i}=e;fw(t,n,r);let a=mw(e);if(!("schema"in a))return{errors:a};try{let{operation:o}=a,c=pW(a,o,i);return(0,ra.isPromise)(c)?c.then(l=>Jm(l,a.errors),l=>(a.errors.push(l),Jm(null,a.errors))):Jm(c,a.errors)}catch(o){return a.errors.push(o),Jm(null,a.errors)}}function dW(e){let t=pw(e);if((0,ra.isPromise)(t))throw new Error("GraphQL execution failed to complete synchronously.");return t}function Jm(e,t){return t.length===0?{data:e}:{errors:t,data:e}}function fw(e,t,n){t||(0,l_.devAssert)(!1,"Must provide document."),(0,cW.assertValidSchema)(e),n==null||(0,f_.isObjectLike)(n)||(0,l_.devAssert)(!1,"Variables must be provided as an Object where each property is a variable value. Perhaps look to see if an unparsed JSON string was provided.")}function mw(e){var t,n;let{schema:r,document:i,rootValue:a,contextValue:o,variableValues:c,operationName:l,fieldResolver:p,typeResolver:T,subscribeFieldResolver:y}=e,g,_=Object.create(null);for(let K of i.definitions)switch(K.kind){case ow.Kind.OPERATION_DEFINITION:if(l==null){if(g!==void 0)return[new Pi.GraphQLError("Must provide operation name if query contains multiple operations.")];g=K}else((t=K.name)===null||t===void 0?void 0:t.value)===l&&(g=K);break;case ow.Kind.FRAGMENT_DEFINITION:_[K.name.value]=K;break;default:}if(!g)return l!=null?[new Pi.GraphQLError(`Unknown operation named "${l}".`)]:[new Pi.GraphQLError("Must provide an operation.")];let F=(n=g.variableDefinitions)!==null&&n!==void 0?n:[],U=(0,dw.getVariableValues)(r,F,c!=null?c:{},{maxErrors:50});return U.errors?U.errors:{schema:r,fragments:_,rootValue:a,contextValue:o,operation:g,variableValues:U.coerced,fieldResolver:p!=null?p:p_,typeResolver:T!=null?T:Ew,subscribeFieldResolver:y!=null?y:p_,errors:[]}}function pW(e,t,n){let r=e.schema.getRootType(t.operation);if(r==null)throw new Pi.GraphQLError(`Schema is not configured to execute ${t.operation} operation.`,{nodes:t});let i=(0,lw.collectFields)(e.schema,e.fragments,e.variableValues,r,t.selectionSet),a=void 0;switch(t.operation){case c_.OperationTypeNode.QUERY:return zm(e,r,n,a,i);case c_.OperationTypeNode.MUTATION:return fW(e,r,n,a,i);case c_.OperationTypeNode.SUBSCRIPTION:return zm(e,r,n,a,i)}}function fW(e,t,n,r,i){return(0,uW.promiseReduce)(i.entries(),(a,[o,c])=>{let l=(0,ju.addPath)(r,o,t.name),p=Nw(e,t,n,c,l);return p===void 0?a:(0,ra.isPromise)(p)?p.then(T=>(a[o]=T,a)):(a[o]=p,a)},Object.create(null))}function zm(e,t,n,r,i){let a=Object.create(null),o=!1;try{for(let[c,l]of i.entries()){let p=(0,ju.addPath)(r,c,t.name),T=Nw(e,t,n,l,p);T!==void 0&&(a[c]=T,(0,ra.isPromise)(T)&&(o=!0))}}catch(c){if(o)return(0,sw.promiseForObject)(a).finally(()=>{throw c});throw c}return o?(0,sw.promiseForObject)(a):a}function Nw(e,t,n,r,i){var a;let o=hw(e.schema,t,r[0]);if(!o)return;let c=o.type,l=(a=o.resolve)!==null&&a!==void 0?a:e.fieldResolver,p=Tw(e,o,r,t,i);try{let T=(0,dw.getArgumentValues)(o,r[0],e.variableValues),y=e.contextValue,g=l(n,T,y,p),_;return(0,ra.isPromise)(g)?_=g.then(F=>Gd(e,c,r,p,i,F)):_=Gd(e,c,r,p,i,g),(0,ra.isPromise)(_)?_.then(void 0,F=>{let U=(0,Hm.locatedError)(F,r,(0,ju.pathToArray)(i));return Wm(U,c,e)}):_}catch(T){let y=(0,Hm.locatedError)(T,r,(0,ju.pathToArray)(i));return Wm(y,c,e)}}function Tw(e,t,n,r,i){return{fieldName:t.name,fieldNodes:n,returnType:t.type,parentType:r,path:i,schema:e.schema,fragments:e.fragments,rootValue:e.rootValue,operation:e.operation,variableValues:e.variableValues}}function Wm(e,t,n){if((0,Qo.isNonNullType)(t))throw e;return n.errors.push(e),null}function Gd(e,t,n,r,i,a){if(a instanceof Error)throw a;if((0,Qo.isNonNullType)(t)){let o=Gd(e,t.ofType,n,r,i,a);if(o===null)throw new Error(`Cannot return null for non-nullable field ${r.parentType.name}.${r.fieldName}.`);return o}if(a==null)return null;if((0,Qo.isListType)(t))return mW(e,t,n,r,i,a);if((0,Qo.isLeafType)(t))return NW(t,a);if((0,Qo.isAbstractType)(t))return TW(e,t,n,r,i,a);if((0,Qo.isObjectType)(t))return d_(e,t,n,r,i,a);(0,aW.invariant)(!1,"Cannot complete value of unexpected output type: "+(0,Vu.inspect)(t))}function mW(e,t,n,r,i,a){if(!(0,sW.isIterableObject)(a))throw new Pi.GraphQLError(`Expected Iterable, but did not find one for field "${r.parentType.name}.${r.fieldName}".`);let o=t.ofType,c=!1,l=Array.from(a,(p,T)=>{let y=(0,ju.addPath)(i,T,void 0);try{let g;return(0,ra.isPromise)(p)?g=p.then(_=>Gd(e,o,n,r,y,_)):g=Gd(e,o,n,r,y,p),(0,ra.isPromise)(g)?(c=!0,g.then(void 0,_=>{let F=(0,Hm.locatedError)(_,n,(0,ju.pathToArray)(y));return Wm(F,o,e)})):g}catch(g){let _=(0,Hm.locatedError)(g,n,(0,ju.pathToArray)(y));return Wm(_,o,e)}});return c?Promise.all(l):l}function NW(e,t){let n=e.serialize(t);if(n==null)throw new Error(`Expected \`${(0,Vu.inspect)(e)}.serialize(${(0,Vu.inspect)(t)})\` to return non-nullable value, returned: ${(0,Vu.inspect)(n)}`);return n}function TW(e,t,n,r,i,a){var o;let c=(o=t.resolveType)!==null&&o!==void 0?o:e.typeResolver,l=e.contextValue,p=c(a,l,r,t);return(0,ra.isPromise)(p)?p.then(T=>d_(e,uw(T,e,t,n,r,a),n,r,i,a)):d_(e,uw(p,e,t,n,r,a),n,r,i,a)}function uw(e,t,n,r,i,a){if(e==null)throw new Pi.GraphQLError(`Abstract type "${n.name}" must resolve to an Object type at runtime for field "${i.parentType.name}.${i.fieldName}". Either the "${n.name}" type should provide a "resolveType" function or each possible type should provide an "isTypeOf" function.`,r);if((0,Qo.isObjectType)(e))throw new Pi.GraphQLError("Support for returning GraphQLObjectType from resolveType was removed in graphql-js@16.0.0 please return type name instead.");if(typeof e!="string")throw new Pi.GraphQLError(`Abstract type "${n.name}" must resolve to an Object type at runtime for field "${i.parentType.name}.${i.fieldName}" with value ${(0,Vu.inspect)(a)}, received "${(0,Vu.inspect)(e)}".`);let o=t.schema.getType(e);if(o==null)throw new Pi.GraphQLError(`Abstract type "${n.name}" was resolved to a type "${e}" that does not exist inside the schema.`,{nodes:r});if(!(0,Qo.isObjectType)(o))throw new Pi.GraphQLError(`Abstract type "${n.name}" was resolved to a non-object type "${e}".`,{nodes:r});if(!t.schema.isSubType(n,o))throw new Pi.GraphQLError(`Runtime Object type "${o.name}" is not a possible type for "${n.name}".`,{nodes:r});return o}function d_(e,t,n,r,i,a){let o=lW(e,t,n);if(t.isTypeOf){let c=t.isTypeOf(a,e.contextValue,r);if((0,ra.isPromise)(c))return c.then(l=>{if(!l)throw cw(t,a,n);return zm(e,t,a,i,o)});if(!c)throw cw(t,a,n)}return zm(e,t,a,i,o)}function cw(e,t,n){return new Pi.GraphQLError(`Expected value of type "${e.name}" but got: ${(0,Vu.inspect)(t)}.`,{nodes:n})}var Ew=function(e,t,n,r){if((0,f_.isObjectLike)(e)&&typeof e.__typename=="string")return e.__typename;let i=n.schema.getPossibleTypes(r),a=[];for(let o=0;o{for(let c=0;c{"use strict";f();N();m();Object.defineProperty(Xm,"__esModule",{value:!0});Xm.graphql=vW;Xm.graphqlSync=SW;var EW=Cr(),hW=Jf(),yW=xc(),IW=Ld(),gW=Wc(),_W=$d();function vW(e){return new Promise(t=>t(yw(e)))}function SW(e){let t=yw(e);if((0,hW.isPromise)(t))throw new Error("GraphQL execution failed to complete synchronously.");return t}function yw(e){arguments.length<2||(0,EW.devAssert)(!1,"graphql@16 dropped long-deprecated support for positional arguments, please pass an object instead.");let{schema:t,source:n,rootValue:r,contextValue:i,variableValues:a,operationName:o,fieldResolver:c,typeResolver:l}=e,p=(0,IW.validateSchema)(t);if(p.length>0)return{errors:p};let T;try{T=(0,yW.parse)(n)}catch(g){return{errors:[g]}}let y=(0,gW.validate)(t,T);return y.length>0?{errors:y}:(0,_W.execute)({schema:t,document:T,rootValue:r,contextValue:i,variableValues:a,operationName:o,fieldResolver:c,typeResolver:l})}});var vw=w(ye=>{"use strict";f();N();m();Object.defineProperty(ye,"__esModule",{value:!0});Object.defineProperty(ye,"DEFAULT_DEPRECATION_REASON",{enumerable:!0,get:function(){return ia.DEFAULT_DEPRECATION_REASON}});Object.defineProperty(ye,"GRAPHQL_MAX_INT",{enumerable:!0,get:function(){return Ns.GRAPHQL_MAX_INT}});Object.defineProperty(ye,"GRAPHQL_MIN_INT",{enumerable:!0,get:function(){return Ns.GRAPHQL_MIN_INT}});Object.defineProperty(ye,"GraphQLBoolean",{enumerable:!0,get:function(){return Ns.GraphQLBoolean}});Object.defineProperty(ye,"GraphQLDeprecatedDirective",{enumerable:!0,get:function(){return ia.GraphQLDeprecatedDirective}});Object.defineProperty(ye,"GraphQLDirective",{enumerable:!0,get:function(){return ia.GraphQLDirective}});Object.defineProperty(ye,"GraphQLEnumType",{enumerable:!0,get:function(){return nt.GraphQLEnumType}});Object.defineProperty(ye,"GraphQLFloat",{enumerable:!0,get:function(){return Ns.GraphQLFloat}});Object.defineProperty(ye,"GraphQLID",{enumerable:!0,get:function(){return Ns.GraphQLID}});Object.defineProperty(ye,"GraphQLIncludeDirective",{enumerable:!0,get:function(){return ia.GraphQLIncludeDirective}});Object.defineProperty(ye,"GraphQLInputObjectType",{enumerable:!0,get:function(){return nt.GraphQLInputObjectType}});Object.defineProperty(ye,"GraphQLInt",{enumerable:!0,get:function(){return Ns.GraphQLInt}});Object.defineProperty(ye,"GraphQLInterfaceType",{enumerable:!0,get:function(){return nt.GraphQLInterfaceType}});Object.defineProperty(ye,"GraphQLList",{enumerable:!0,get:function(){return nt.GraphQLList}});Object.defineProperty(ye,"GraphQLNonNull",{enumerable:!0,get:function(){return nt.GraphQLNonNull}});Object.defineProperty(ye,"GraphQLObjectType",{enumerable:!0,get:function(){return nt.GraphQLObjectType}});Object.defineProperty(ye,"GraphQLOneOfDirective",{enumerable:!0,get:function(){return ia.GraphQLOneOfDirective}});Object.defineProperty(ye,"GraphQLScalarType",{enumerable:!0,get:function(){return nt.GraphQLScalarType}});Object.defineProperty(ye,"GraphQLSchema",{enumerable:!0,get:function(){return m_.GraphQLSchema}});Object.defineProperty(ye,"GraphQLSkipDirective",{enumerable:!0,get:function(){return ia.GraphQLSkipDirective}});Object.defineProperty(ye,"GraphQLSpecifiedByDirective",{enumerable:!0,get:function(){return ia.GraphQLSpecifiedByDirective}});Object.defineProperty(ye,"GraphQLString",{enumerable:!0,get:function(){return Ns.GraphQLString}});Object.defineProperty(ye,"GraphQLUnionType",{enumerable:!0,get:function(){return nt.GraphQLUnionType}});Object.defineProperty(ye,"SchemaMetaFieldDef",{enumerable:!0,get:function(){return Yr.SchemaMetaFieldDef}});Object.defineProperty(ye,"TypeKind",{enumerable:!0,get:function(){return Yr.TypeKind}});Object.defineProperty(ye,"TypeMetaFieldDef",{enumerable:!0,get:function(){return Yr.TypeMetaFieldDef}});Object.defineProperty(ye,"TypeNameMetaFieldDef",{enumerable:!0,get:function(){return Yr.TypeNameMetaFieldDef}});Object.defineProperty(ye,"__Directive",{enumerable:!0,get:function(){return Yr.__Directive}});Object.defineProperty(ye,"__DirectiveLocation",{enumerable:!0,get:function(){return Yr.__DirectiveLocation}});Object.defineProperty(ye,"__EnumValue",{enumerable:!0,get:function(){return Yr.__EnumValue}});Object.defineProperty(ye,"__Field",{enumerable:!0,get:function(){return Yr.__Field}});Object.defineProperty(ye,"__InputValue",{enumerable:!0,get:function(){return Yr.__InputValue}});Object.defineProperty(ye,"__Schema",{enumerable:!0,get:function(){return Yr.__Schema}});Object.defineProperty(ye,"__Type",{enumerable:!0,get:function(){return Yr.__Type}});Object.defineProperty(ye,"__TypeKind",{enumerable:!0,get:function(){return Yr.__TypeKind}});Object.defineProperty(ye,"assertAbstractType",{enumerable:!0,get:function(){return nt.assertAbstractType}});Object.defineProperty(ye,"assertCompositeType",{enumerable:!0,get:function(){return nt.assertCompositeType}});Object.defineProperty(ye,"assertDirective",{enumerable:!0,get:function(){return ia.assertDirective}});Object.defineProperty(ye,"assertEnumType",{enumerable:!0,get:function(){return nt.assertEnumType}});Object.defineProperty(ye,"assertEnumValueName",{enumerable:!0,get:function(){return _w.assertEnumValueName}});Object.defineProperty(ye,"assertInputObjectType",{enumerable:!0,get:function(){return nt.assertInputObjectType}});Object.defineProperty(ye,"assertInputType",{enumerable:!0,get:function(){return nt.assertInputType}});Object.defineProperty(ye,"assertInterfaceType",{enumerable:!0,get:function(){return nt.assertInterfaceType}});Object.defineProperty(ye,"assertLeafType",{enumerable:!0,get:function(){return nt.assertLeafType}});Object.defineProperty(ye,"assertListType",{enumerable:!0,get:function(){return nt.assertListType}});Object.defineProperty(ye,"assertName",{enumerable:!0,get:function(){return _w.assertName}});Object.defineProperty(ye,"assertNamedType",{enumerable:!0,get:function(){return nt.assertNamedType}});Object.defineProperty(ye,"assertNonNullType",{enumerable:!0,get:function(){return nt.assertNonNullType}});Object.defineProperty(ye,"assertNullableType",{enumerable:!0,get:function(){return nt.assertNullableType}});Object.defineProperty(ye,"assertObjectType",{enumerable:!0,get:function(){return nt.assertObjectType}});Object.defineProperty(ye,"assertOutputType",{enumerable:!0,get:function(){return nt.assertOutputType}});Object.defineProperty(ye,"assertScalarType",{enumerable:!0,get:function(){return nt.assertScalarType}});Object.defineProperty(ye,"assertSchema",{enumerable:!0,get:function(){return m_.assertSchema}});Object.defineProperty(ye,"assertType",{enumerable:!0,get:function(){return nt.assertType}});Object.defineProperty(ye,"assertUnionType",{enumerable:!0,get:function(){return nt.assertUnionType}});Object.defineProperty(ye,"assertValidSchema",{enumerable:!0,get:function(){return gw.assertValidSchema}});Object.defineProperty(ye,"assertWrappingType",{enumerable:!0,get:function(){return nt.assertWrappingType}});Object.defineProperty(ye,"getNamedType",{enumerable:!0,get:function(){return nt.getNamedType}});Object.defineProperty(ye,"getNullableType",{enumerable:!0,get:function(){return nt.getNullableType}});Object.defineProperty(ye,"introspectionTypes",{enumerable:!0,get:function(){return Yr.introspectionTypes}});Object.defineProperty(ye,"isAbstractType",{enumerable:!0,get:function(){return nt.isAbstractType}});Object.defineProperty(ye,"isCompositeType",{enumerable:!0,get:function(){return nt.isCompositeType}});Object.defineProperty(ye,"isDirective",{enumerable:!0,get:function(){return ia.isDirective}});Object.defineProperty(ye,"isEnumType",{enumerable:!0,get:function(){return nt.isEnumType}});Object.defineProperty(ye,"isInputObjectType",{enumerable:!0,get:function(){return nt.isInputObjectType}});Object.defineProperty(ye,"isInputType",{enumerable:!0,get:function(){return nt.isInputType}});Object.defineProperty(ye,"isInterfaceType",{enumerable:!0,get:function(){return nt.isInterfaceType}});Object.defineProperty(ye,"isIntrospectionType",{enumerable:!0,get:function(){return Yr.isIntrospectionType}});Object.defineProperty(ye,"isLeafType",{enumerable:!0,get:function(){return nt.isLeafType}});Object.defineProperty(ye,"isListType",{enumerable:!0,get:function(){return nt.isListType}});Object.defineProperty(ye,"isNamedType",{enumerable:!0,get:function(){return nt.isNamedType}});Object.defineProperty(ye,"isNonNullType",{enumerable:!0,get:function(){return nt.isNonNullType}});Object.defineProperty(ye,"isNullableType",{enumerable:!0,get:function(){return nt.isNullableType}});Object.defineProperty(ye,"isObjectType",{enumerable:!0,get:function(){return nt.isObjectType}});Object.defineProperty(ye,"isOutputType",{enumerable:!0,get:function(){return nt.isOutputType}});Object.defineProperty(ye,"isRequiredArgument",{enumerable:!0,get:function(){return nt.isRequiredArgument}});Object.defineProperty(ye,"isRequiredInputField",{enumerable:!0,get:function(){return nt.isRequiredInputField}});Object.defineProperty(ye,"isScalarType",{enumerable:!0,get:function(){return nt.isScalarType}});Object.defineProperty(ye,"isSchema",{enumerable:!0,get:function(){return m_.isSchema}});Object.defineProperty(ye,"isSpecifiedDirective",{enumerable:!0,get:function(){return ia.isSpecifiedDirective}});Object.defineProperty(ye,"isSpecifiedScalarType",{enumerable:!0,get:function(){return Ns.isSpecifiedScalarType}});Object.defineProperty(ye,"isType",{enumerable:!0,get:function(){return nt.isType}});Object.defineProperty(ye,"isUnionType",{enumerable:!0,get:function(){return nt.isUnionType}});Object.defineProperty(ye,"isWrappingType",{enumerable:!0,get:function(){return nt.isWrappingType}});Object.defineProperty(ye,"resolveObjMapThunk",{enumerable:!0,get:function(){return nt.resolveObjMapThunk}});Object.defineProperty(ye,"resolveReadonlyArrayThunk",{enumerable:!0,get:function(){return nt.resolveReadonlyArrayThunk}});Object.defineProperty(ye,"specifiedDirectives",{enumerable:!0,get:function(){return ia.specifiedDirectives}});Object.defineProperty(ye,"specifiedScalarTypes",{enumerable:!0,get:function(){return Ns.specifiedScalarTypes}});Object.defineProperty(ye,"validateSchema",{enumerable:!0,get:function(){return gw.validateSchema}});var m_=Uu(),nt=Ft(),ia=$r(),Ns=Aa(),Yr=Ri(),gw=Ld(),_w=hd()});var Ow=w(Ct=>{"use strict";f();N();m();Object.defineProperty(Ct,"__esModule",{value:!0});Object.defineProperty(Ct,"BREAK",{enumerable:!0,get:function(){return Qd.BREAK}});Object.defineProperty(Ct,"DirectiveLocation",{enumerable:!0,get:function(){return PW.DirectiveLocation}});Object.defineProperty(Ct,"Kind",{enumerable:!0,get:function(){return bW.Kind}});Object.defineProperty(Ct,"Lexer",{enumerable:!0,get:function(){return RW.Lexer}});Object.defineProperty(Ct,"Location",{enumerable:!0,get:function(){return N_.Location}});Object.defineProperty(Ct,"OperationTypeNode",{enumerable:!0,get:function(){return N_.OperationTypeNode}});Object.defineProperty(Ct,"Source",{enumerable:!0,get:function(){return OW.Source}});Object.defineProperty(Ct,"Token",{enumerable:!0,get:function(){return N_.Token}});Object.defineProperty(Ct,"TokenKind",{enumerable:!0,get:function(){return AW.TokenKind}});Object.defineProperty(Ct,"getEnterLeaveForKind",{enumerable:!0,get:function(){return Qd.getEnterLeaveForKind}});Object.defineProperty(Ct,"getLocation",{enumerable:!0,get:function(){return DW.getLocation}});Object.defineProperty(Ct,"getVisitFn",{enumerable:!0,get:function(){return Qd.getVisitFn}});Object.defineProperty(Ct,"isConstValueNode",{enumerable:!0,get:function(){return wa.isConstValueNode}});Object.defineProperty(Ct,"isDefinitionNode",{enumerable:!0,get:function(){return wa.isDefinitionNode}});Object.defineProperty(Ct,"isExecutableDefinitionNode",{enumerable:!0,get:function(){return wa.isExecutableDefinitionNode}});Object.defineProperty(Ct,"isSelectionNode",{enumerable:!0,get:function(){return wa.isSelectionNode}});Object.defineProperty(Ct,"isTypeDefinitionNode",{enumerable:!0,get:function(){return wa.isTypeDefinitionNode}});Object.defineProperty(Ct,"isTypeExtensionNode",{enumerable:!0,get:function(){return wa.isTypeExtensionNode}});Object.defineProperty(Ct,"isTypeNode",{enumerable:!0,get:function(){return wa.isTypeNode}});Object.defineProperty(Ct,"isTypeSystemDefinitionNode",{enumerable:!0,get:function(){return wa.isTypeSystemDefinitionNode}});Object.defineProperty(Ct,"isTypeSystemExtensionNode",{enumerable:!0,get:function(){return wa.isTypeSystemExtensionNode}});Object.defineProperty(Ct,"isValueNode",{enumerable:!0,get:function(){return wa.isValueNode}});Object.defineProperty(Ct,"parse",{enumerable:!0,get:function(){return Zm.parse}});Object.defineProperty(Ct,"parseConstValue",{enumerable:!0,get:function(){return Zm.parseConstValue}});Object.defineProperty(Ct,"parseType",{enumerable:!0,get:function(){return Zm.parseType}});Object.defineProperty(Ct,"parseValue",{enumerable:!0,get:function(){return Zm.parseValue}});Object.defineProperty(Ct,"print",{enumerable:!0,get:function(){return FW.print}});Object.defineProperty(Ct,"printLocation",{enumerable:!0,get:function(){return Sw.printLocation}});Object.defineProperty(Ct,"printSourceLocation",{enumerable:!0,get:function(){return Sw.printSourceLocation}});Object.defineProperty(Ct,"visit",{enumerable:!0,get:function(){return Qd.visit}});Object.defineProperty(Ct,"visitInParallel",{enumerable:!0,get:function(){return Qd.visitInParallel}});var OW=im(),DW=Hf(),Sw=dy(),bW=Rt(),AW=ld(),RW=em(),Zm=xc(),FW=li(),Qd=Fu(),N_=Oa(),wa=Mu(),PW=kc()});var Dw=w(T_=>{"use strict";f();N();m();Object.defineProperty(T_,"__esModule",{value:!0});T_.isAsyncIterable=wW;function wW(e){return typeof(e==null?void 0:e[Symbol.asyncIterator])=="function"}});var bw=w(E_=>{"use strict";f();N();m();Object.defineProperty(E_,"__esModule",{value:!0});E_.mapAsyncIterator=LW;function LW(e,t){let n=e[Symbol.asyncIterator]();function r(a){return Si(this,null,function*(){if(a.done)return a;try{return{value:yield t(a.value),done:!1}}catch(o){if(typeof n.return=="function")try{yield n.return()}catch(c){}throw o}})}return{next(){return Si(this,null,function*(){return r(yield n.next())})},return(){return Si(this,null,function*(){return typeof n.return=="function"?r(yield n.return()):{value:void 0,done:!0}})},throw(a){return Si(this,null,function*(){if(typeof n.throw=="function")return r(yield n.throw(a));throw a})},[Symbol.asyncIterator](){return this}}}});var Pw=w(eN=>{"use strict";f();N();m();Object.defineProperty(eN,"__esModule",{value:!0});eN.createSourceEventStream=Fw;eN.subscribe=qW;var CW=Cr(),BW=Yt(),Rw=Dw(),Aw=Ud(),h_=He(),UW=Ym(),kW=Km(),Yd=$d(),MW=bw(),xW=Hc();function qW(t){return Si(this,arguments,function*(e){arguments.length<2||(0,CW.devAssert)(!1,"graphql@16 dropped long-deprecated support for positional arguments, please pass an object instead.");let n=yield Fw(e);if(!(0,Rw.isAsyncIterable)(n))return n;let r=i=>(0,Yd.execute)(Q(M({},e),{rootValue:i}));return(0,MW.mapAsyncIterator)(n,r)})}function VW(e){let t=e[0];return t&&"document"in t?t:{schema:t,document:e[1],rootValue:e[2],contextValue:e[3],variableValues:e[4],operationName:e[5],subscribeFieldResolver:e[6]}}function Fw(...e){return Si(this,null,function*(){let t=VW(e),{schema:n,document:r,variableValues:i}=t;(0,Yd.assertValidExecutionArguments)(n,r,i);let a=(0,Yd.buildExecutionContext)(t);if(!("schema"in a))return{errors:a};try{let o=yield jW(a);if(!(0,Rw.isAsyncIterable)(o))throw new Error(`Subscription field must return Async Iterable. Received: ${(0,BW.inspect)(o)}.`);return o}catch(o){if(o instanceof h_.GraphQLError)return{errors:[o]};throw o}})}function jW(e){return Si(this,null,function*(){let{schema:t,fragments:n,operation:r,variableValues:i,rootValue:a}=e,o=t.getSubscriptionType();if(o==null)throw new h_.GraphQLError("Schema is not configured to execute subscription operation.",{nodes:r});let c=(0,kW.collectFields)(t,n,i,o,r.selectionSet),[l,p]=[...c.entries()][0],T=(0,Yd.getFieldDef)(t,o,p[0]);if(!T){let F=p[0].name.value;throw new h_.GraphQLError(`The subscription field "${F}" is not defined.`,{nodes:p})}let y=(0,Aw.addPath)(void 0,l,o.name),g=(0,Yd.buildResolveInfo)(e,T,p,o,y);try{var _;let F=(0,xW.getArgumentValues)(T,p[0],i),U=e.contextValue,J=yield((_=T.subscribe)!==null&&_!==void 0?_:e.subscribeFieldResolver)(a,F,U,g);if(J instanceof Error)throw J;return J}catch(F){throw(0,UW.locatedError)(F,p,(0,Aw.pathToArray)(y))}})}});var Lw=w(Li=>{"use strict";f();N();m();Object.defineProperty(Li,"__esModule",{value:!0});Object.defineProperty(Li,"createSourceEventStream",{enumerable:!0,get:function(){return ww.createSourceEventStream}});Object.defineProperty(Li,"defaultFieldResolver",{enumerable:!0,get:function(){return tN.defaultFieldResolver}});Object.defineProperty(Li,"defaultTypeResolver",{enumerable:!0,get:function(){return tN.defaultTypeResolver}});Object.defineProperty(Li,"execute",{enumerable:!0,get:function(){return tN.execute}});Object.defineProperty(Li,"executeSync",{enumerable:!0,get:function(){return tN.executeSync}});Object.defineProperty(Li,"getArgumentValues",{enumerable:!0,get:function(){return y_.getArgumentValues}});Object.defineProperty(Li,"getDirectiveValues",{enumerable:!0,get:function(){return y_.getDirectiveValues}});Object.defineProperty(Li,"getVariableValues",{enumerable:!0,get:function(){return y_.getVariableValues}});Object.defineProperty(Li,"responsePathAsArray",{enumerable:!0,get:function(){return KW.pathToArray}});Object.defineProperty(Li,"subscribe",{enumerable:!0,get:function(){return ww.subscribe}});var KW=Ud(),tN=$d(),ww=Pw(),y_=Hc()});var Cw=w(__=>{"use strict";f();N();m();Object.defineProperty(__,"__esModule",{value:!0});__.NoDeprecatedCustomRule=GW;var I_=Ir(),Jd=He(),g_=Ft();function GW(e){return{Field(t){let n=e.getFieldDef(),r=n==null?void 0:n.deprecationReason;if(n&&r!=null){let i=e.getParentType();i!=null||(0,I_.invariant)(!1),e.reportError(new Jd.GraphQLError(`The field ${i.name}.${n.name} is deprecated. ${r}`,{nodes:t}))}},Argument(t){let n=e.getArgument(),r=n==null?void 0:n.deprecationReason;if(n&&r!=null){let i=e.getDirective();if(i!=null)e.reportError(new Jd.GraphQLError(`Directive "@${i.name}" argument "${n.name}" is deprecated. ${r}`,{nodes:t}));else{let a=e.getParentType(),o=e.getFieldDef();a!=null&&o!=null||(0,I_.invariant)(!1),e.reportError(new Jd.GraphQLError(`Field "${a.name}.${o.name}" argument "${n.name}" is deprecated. ${r}`,{nodes:t}))}}},ObjectField(t){let n=(0,g_.getNamedType)(e.getParentInputType());if((0,g_.isInputObjectType)(n)){let r=n.getFields()[t.name.value],i=r==null?void 0:r.deprecationReason;i!=null&&e.reportError(new Jd.GraphQLError(`The input field ${n.name}.${r.name} is deprecated. ${i}`,{nodes:t}))}},EnumValue(t){let n=e.getEnumValue(),r=n==null?void 0:n.deprecationReason;if(n&&r!=null){let i=(0,g_.getNamedType)(e.getInputType());i!=null||(0,I_.invariant)(!1),e.reportError(new Jd.GraphQLError(`The enum value "${i.name}.${n.name}" is deprecated. ${r}`,{nodes:t}))}}}}});var Bw=w(v_=>{"use strict";f();N();m();Object.defineProperty(v_,"__esModule",{value:!0});v_.NoSchemaIntrospectionCustomRule=JW;var $W=He(),QW=Ft(),YW=Ri();function JW(e){return{Field(t){let n=(0,QW.getNamedType)(e.getType());n&&(0,YW.isIntrospectionType)(n)&&e.reportError(new $W.GraphQLError(`GraphQL introspection has been disabled, but the requested query contained the field "${t.name.value}".`,{nodes:t}))}}}});var kw=w(dt=>{"use strict";f();N();m();Object.defineProperty(dt,"__esModule",{value:!0});Object.defineProperty(dt,"ExecutableDefinitionsRule",{enumerable:!0,get:function(){return WW.ExecutableDefinitionsRule}});Object.defineProperty(dt,"FieldsOnCorrectTypeRule",{enumerable:!0,get:function(){return XW.FieldsOnCorrectTypeRule}});Object.defineProperty(dt,"FragmentsOnCompositeTypesRule",{enumerable:!0,get:function(){return ZW.FragmentsOnCompositeTypesRule}});Object.defineProperty(dt,"KnownArgumentNamesRule",{enumerable:!0,get:function(){return e8.KnownArgumentNamesRule}});Object.defineProperty(dt,"KnownDirectivesRule",{enumerable:!0,get:function(){return t8.KnownDirectivesRule}});Object.defineProperty(dt,"KnownFragmentNamesRule",{enumerable:!0,get:function(){return n8.KnownFragmentNamesRule}});Object.defineProperty(dt,"KnownTypeNamesRule",{enumerable:!0,get:function(){return r8.KnownTypeNamesRule}});Object.defineProperty(dt,"LoneAnonymousOperationRule",{enumerable:!0,get:function(){return i8.LoneAnonymousOperationRule}});Object.defineProperty(dt,"LoneSchemaDefinitionRule",{enumerable:!0,get:function(){return S8.LoneSchemaDefinitionRule}});Object.defineProperty(dt,"MaxIntrospectionDepthRule",{enumerable:!0,get:function(){return v8.MaxIntrospectionDepthRule}});Object.defineProperty(dt,"NoDeprecatedCustomRule",{enumerable:!0,get:function(){return w8.NoDeprecatedCustomRule}});Object.defineProperty(dt,"NoFragmentCyclesRule",{enumerable:!0,get:function(){return a8.NoFragmentCyclesRule}});Object.defineProperty(dt,"NoSchemaIntrospectionCustomRule",{enumerable:!0,get:function(){return L8.NoSchemaIntrospectionCustomRule}});Object.defineProperty(dt,"NoUndefinedVariablesRule",{enumerable:!0,get:function(){return s8.NoUndefinedVariablesRule}});Object.defineProperty(dt,"NoUnusedFragmentsRule",{enumerable:!0,get:function(){return o8.NoUnusedFragmentsRule}});Object.defineProperty(dt,"NoUnusedVariablesRule",{enumerable:!0,get:function(){return u8.NoUnusedVariablesRule}});Object.defineProperty(dt,"OverlappingFieldsCanBeMergedRule",{enumerable:!0,get:function(){return c8.OverlappingFieldsCanBeMergedRule}});Object.defineProperty(dt,"PossibleFragmentSpreadsRule",{enumerable:!0,get:function(){return l8.PossibleFragmentSpreadsRule}});Object.defineProperty(dt,"PossibleTypeExtensionsRule",{enumerable:!0,get:function(){return P8.PossibleTypeExtensionsRule}});Object.defineProperty(dt,"ProvidedRequiredArgumentsRule",{enumerable:!0,get:function(){return d8.ProvidedRequiredArgumentsRule}});Object.defineProperty(dt,"ScalarLeafsRule",{enumerable:!0,get:function(){return p8.ScalarLeafsRule}});Object.defineProperty(dt,"SingleFieldSubscriptionsRule",{enumerable:!0,get:function(){return f8.SingleFieldSubscriptionsRule}});Object.defineProperty(dt,"UniqueArgumentDefinitionNamesRule",{enumerable:!0,get:function(){return R8.UniqueArgumentDefinitionNamesRule}});Object.defineProperty(dt,"UniqueArgumentNamesRule",{enumerable:!0,get:function(){return m8.UniqueArgumentNamesRule}});Object.defineProperty(dt,"UniqueDirectiveNamesRule",{enumerable:!0,get:function(){return F8.UniqueDirectiveNamesRule}});Object.defineProperty(dt,"UniqueDirectivesPerLocationRule",{enumerable:!0,get:function(){return N8.UniqueDirectivesPerLocationRule}});Object.defineProperty(dt,"UniqueEnumValueNamesRule",{enumerable:!0,get:function(){return b8.UniqueEnumValueNamesRule}});Object.defineProperty(dt,"UniqueFieldDefinitionNamesRule",{enumerable:!0,get:function(){return A8.UniqueFieldDefinitionNamesRule}});Object.defineProperty(dt,"UniqueFragmentNamesRule",{enumerable:!0,get:function(){return T8.UniqueFragmentNamesRule}});Object.defineProperty(dt,"UniqueInputFieldNamesRule",{enumerable:!0,get:function(){return E8.UniqueInputFieldNamesRule}});Object.defineProperty(dt,"UniqueOperationNamesRule",{enumerable:!0,get:function(){return h8.UniqueOperationNamesRule}});Object.defineProperty(dt,"UniqueOperationTypesRule",{enumerable:!0,get:function(){return O8.UniqueOperationTypesRule}});Object.defineProperty(dt,"UniqueTypeNamesRule",{enumerable:!0,get:function(){return D8.UniqueTypeNamesRule}});Object.defineProperty(dt,"UniqueVariableNamesRule",{enumerable:!0,get:function(){return y8.UniqueVariableNamesRule}});Object.defineProperty(dt,"ValidationContext",{enumerable:!0,get:function(){return zW.ValidationContext}});Object.defineProperty(dt,"ValuesOfCorrectTypeRule",{enumerable:!0,get:function(){return I8.ValuesOfCorrectTypeRule}});Object.defineProperty(dt,"VariablesAreInputTypesRule",{enumerable:!0,get:function(){return g8.VariablesAreInputTypesRule}});Object.defineProperty(dt,"VariablesInAllowedPositionRule",{enumerable:!0,get:function(){return _8.VariablesInAllowedPositionRule}});Object.defineProperty(dt,"recommendedRules",{enumerable:!0,get:function(){return Uw.recommendedRules}});Object.defineProperty(dt,"specifiedRules",{enumerable:!0,get:function(){return Uw.specifiedRules}});Object.defineProperty(dt,"validate",{enumerable:!0,get:function(){return HW.validate}});var HW=Wc(),zW=t_(),Uw=Xg(),WW=NI(),XW=EI(),ZW=yI(),e8=II(),t8=SI(),n8=DI(),r8=RI(),i8=PI(),a8=kI(),s8=xI(),o8=VI(),u8=KI(),c8=ZI(),l8=ng(),d8=sg(),p8=ug(),f8=Eg(),m8=_g(),N8=bg(),T8=Cg(),E8=Ug(),h8=Mg(),y8=Gg(),I8=Yg(),g8=Hg(),_8=Wg(),v8=BI(),S8=LI(),O8=qg(),D8=jg(),b8=Rg(),A8=wg(),R8=Ig(),F8=Sg(),P8=ig(),w8=Cw(),L8=Bw()});var Mw=w(Ku=>{"use strict";f();N();m();Object.defineProperty(Ku,"__esModule",{value:!0});Object.defineProperty(Ku,"GraphQLError",{enumerable:!0,get:function(){return S_.GraphQLError}});Object.defineProperty(Ku,"formatError",{enumerable:!0,get:function(){return S_.formatError}});Object.defineProperty(Ku,"locatedError",{enumerable:!0,get:function(){return B8.locatedError}});Object.defineProperty(Ku,"printError",{enumerable:!0,get:function(){return S_.printError}});Object.defineProperty(Ku,"syntaxError",{enumerable:!0,get:function(){return C8.syntaxError}});var S_=He(),C8=Wf(),B8=Ym()});var D_=w(O_=>{"use strict";f();N();m();Object.defineProperty(O_,"__esModule",{value:!0});O_.getIntrospectionQuery=U8;function U8(e){let t=M({descriptions:!0,specifiedByUrl:!1,directiveIsRepeatable:!1,schemaDescription:!1,inputValueDeprecation:!1,oneOf:!1},e),n=t.descriptions?"description":"",r=t.specifiedByUrl?"specifiedByURL":"",i=t.directiveIsRepeatable?"isRepeatable":"",a=t.schemaDescription?n:"";function o(l){return t.inputValueDeprecation?l:""}let c=t.oneOf?"isOneOf":"";return` query IntrospectionQuery { __schema { ${a} @@ -173,54 +173,54 @@ In some cases, you need to provide options to alter GraphQL's execution behavior } } } - `}});var kw=P(b_=>{"use strict";f();T();m();Object.defineProperty(b_,"__esModule",{value:!0});b_.getOperationAST=U8;var B8=Rt();function U8(e,t){let n=null;for(let i of e.definitions)if(i.kind===B8.Kind.OPERATION_DEFINITION){var r;if(t==null){if(n)return null;n=i}else if(((r=i.name)===null||r===void 0?void 0:r.value)===t)return i}return n}});var Mw=P(D_=>{"use strict";f();T();m();Object.defineProperty(D_,"__esModule",{value:!0});D_.getOperationRootType=k8;var tT=Je();function k8(e,t){if(t.operation==="query"){let n=e.getQueryType();if(!n)throw new tT.GraphQLError("Schema does not define the required query root type.",{nodes:t});return n}if(t.operation==="mutation"){let n=e.getMutationType();if(!n)throw new tT.GraphQLError("Schema is not configured for mutations.",{nodes:t});return n}if(t.operation==="subscription"){let n=e.getSubscriptionType();if(!n)throw new tT.GraphQLError("Schema is not configured for subscriptions.",{nodes:t});return n}throw new tT.GraphQLError("Can only have query, mutation and subscription operations.",{nodes:t})}});var xw=P(A_=>{"use strict";f();T();m();Object.defineProperty(A_,"__esModule",{value:!0});A_.introspectionFromSchema=j8;var M8=Ir(),x8=Mc(),q8=Gd(),V8=O_();function j8(e,t){let n=k({specifiedByUrl:!0,directiveIsRepeatable:!0,schemaDescription:!0,inputValueDeprecation:!0,oneOf:!0},t),r=(0,x8.parse)((0,V8.getIntrospectionQuery)(n)),i=(0,q8.executeSync)({schema:e,document:r});return!i.errors&&i.data||(0,M8.invariant)(!1),i.data}});var Vw=P(R_=>{"use strict";f();T();m();Object.defineProperty(R_,"__esModule",{value:!0});R_.buildClientSchema=H8;var K8=Cr(),li=Yt(),qw=Sa(),nT=Td(),G8=Mc(),di=Ft(),$8=$r(),La=Ai(),Q8=Aa(),Y8=Cu(),J8=xd();function H8(e,t){(0,qw.isObjectLike)(e)&&(0,qw.isObjectLike)(e.__schema)||(0,K8.devAssert)(!1,`Invalid or incomplete introspection result. Ensure that you are passing "data" property of introspection response and no "errors" was returned alongside: ${(0,li.inspect)(e)}.`);let n=e.__schema,r=(0,nT.keyValMap)(n.types,X=>X.name,X=>g(X));for(let X of[...Q8.specifiedScalarTypes,...La.introspectionTypes])r[X.name]&&(r[X.name]=X);let i=n.queryType?N(n.queryType):null,a=n.mutationType?N(n.mutationType):null,o=n.subscriptionType?N(n.subscriptionType):null,c=n.directives?n.directives.map(et):[];return new Y8.GraphQLSchema({description:n.description,query:i,mutation:a,subscription:o,types:Object.values(r),directives:c,assumeValid:t==null?void 0:t.assumeValid});function l(X){if(X.kind===La.TypeKind.LIST){let ve=X.ofType;if(!ve)throw new Error("Decorated type deeper than introspection query.");return new di.GraphQLList(l(ve))}if(X.kind===La.TypeKind.NON_NULL){let ve=X.ofType;if(!ve)throw new Error("Decorated type deeper than introspection query.");let gt=l(ve);return new di.GraphQLNonNull((0,di.assertNullableType)(gt))}return p(X)}function p(X){let ve=X.name;if(!ve)throw new Error(`Unknown type reference: ${(0,li.inspect)(X)}.`);let gt=r[ve];if(!gt)throw new Error(`Invalid or incomplete schema, unknown type: ${ve}. Ensure that a full introspection query is used in order to build a client schema.`);return gt}function N(X){return(0,di.assertObjectType)(p(X))}function y(X){return(0,di.assertInterfaceType)(p(X))}function g(X){if(X!=null&&X.name!=null&&X.kind!=null)switch(X.kind){case La.TypeKind.SCALAR:return _(X);case La.TypeKind.OBJECT:return B(X);case La.TypeKind.INTERFACE:return j(X);case La.TypeKind.UNION:return J(X);case La.TypeKind.ENUM:return Z(X);case La.TypeKind.INPUT_OBJECT:return W(X)}let ve=(0,li.inspect)(X);throw new Error(`Invalid or incomplete introspection result. Ensure that a full introspection query is used in order to build a client schema: ${ve}.`)}function _(X){return new di.GraphQLScalarType({name:X.name,description:X.description,specifiedByURL:X.specifiedByURL})}function F(X){if(X.interfaces===null&&X.kind===La.TypeKind.INTERFACE)return[];if(!X.interfaces){let ve=(0,li.inspect)(X);throw new Error(`Introspection result missing interfaces: ${ve}.`)}return X.interfaces.map(y)}function B(X){return new di.GraphQLObjectType({name:X.name,description:X.description,interfaces:()=>F(X),fields:()=>Ne(X)})}function j(X){return new di.GraphQLInterfaceType({name:X.name,description:X.description,interfaces:()=>F(X),fields:()=>Ne(X)})}function J(X){if(!X.possibleTypes){let ve=(0,li.inspect)(X);throw new Error(`Introspection result missing possibleTypes: ${ve}.`)}return new di.GraphQLUnionType({name:X.name,description:X.description,types:()=>X.possibleTypes.map(N)})}function Z(X){if(!X.enumValues){let ve=(0,li.inspect)(X);throw new Error(`Introspection result missing enumValues: ${ve}.`)}return new di.GraphQLEnumType({name:X.name,description:X.description,values:(0,nT.keyValMap)(X.enumValues,ve=>ve.name,ve=>({description:ve.description,deprecationReason:ve.deprecationReason}))})}function W(X){if(!X.inputFields){let ve=(0,li.inspect)(X);throw new Error(`Introspection result missing inputFields: ${ve}.`)}return new di.GraphQLInputObjectType({name:X.name,description:X.description,fields:()=>we(X.inputFields),isOneOf:X.isOneOf})}function Ne(X){if(!X.fields)throw new Error(`Introspection result missing fields: ${(0,li.inspect)(X)}.`);return(0,nT.keyValMap)(X.fields,ve=>ve.name,le)}function le(X){let ve=l(X.type);if(!(0,di.isOutputType)(ve)){let gt=(0,li.inspect)(ve);throw new Error(`Introspection must provide output type for fields, but received: ${gt}.`)}if(!X.args){let gt=(0,li.inspect)(X);throw new Error(`Introspection result missing field args: ${gt}.`)}return{description:X.description,deprecationReason:X.deprecationReason,type:ve,args:we(X.args)}}function we(X){return(0,nT.keyValMap)(X,ve=>ve.name,qe)}function qe(X){let ve=l(X.type);if(!(0,di.isInputType)(ve)){let Ht=(0,li.inspect)(ve);throw new Error(`Introspection must provide input type for arguments, but received: ${Ht}.`)}let gt=X.defaultValue!=null?(0,J8.valueFromAST)((0,G8.parseValue)(X.defaultValue),ve):void 0;return{description:X.description,type:ve,defaultValue:gt,deprecationReason:X.deprecationReason}}function et(X){if(!X.args){let ve=(0,li.inspect)(X);throw new Error(`Introspection result missing directive args: ${ve}.`)}if(!X.locations){let ve=(0,li.inspect)(X);throw new Error(`Introspection result missing directive locations: ${ve}.`)}return new $8.GraphQLDirective({name:X.name,description:X.description,isRepeatable:X.isRepeatable,locations:X.locations.slice(),args:we(X.args)})}}});var P_=P(iT=>{"use strict";f();T();m();Object.defineProperty(iT,"__esModule",{value:!0});iT.extendSchema=t5;iT.extendSchemaImpl=Hw;var z8=Cr(),W8=Yt(),X8=Ir(),Z8=Mo(),Jd=Fy(),Li=Rt(),jw=Uu(),En=Ft(),Hd=$r(),Yw=Ai(),Jw=Aa(),Kw=Cu(),e5=zc(),F_=Jc(),Gw=xd();function t5(e,t,n){(0,Kw.assertSchema)(e),t!=null&&t.kind===Li.Kind.DOCUMENT||(0,z8.devAssert)(!1,"Must provide valid Document AST."),(n==null?void 0:n.assumeValid)!==!0&&(n==null?void 0:n.assumeValidSDL)!==!0&&(0,e5.assertValidSDLExtension)(t,e);let r=e.toConfig(),i=Hw(r,t,n);return r===i?e:new Kw.GraphQLSchema(i)}function Hw(e,t,n){var r,i,a,o;let c=[],l=Object.create(null),p=[],N,y=[];for(let ie of t.definitions)if(ie.kind===Li.Kind.SCHEMA_DEFINITION)N=ie;else if(ie.kind===Li.Kind.SCHEMA_EXTENSION)y.push(ie);else if((0,jw.isTypeDefinitionNode)(ie))c.push(ie);else if((0,jw.isTypeExtensionNode)(ie)){let be=ie.name.value,_e=l[be];l[be]=_e?_e.concat([ie]):[ie]}else ie.kind===Li.Kind.DIRECTIVE_DEFINITION&&p.push(ie);if(Object.keys(l).length===0&&c.length===0&&p.length===0&&y.length===0&&N==null)return e;let g=Object.create(null);for(let ie of e.types)g[ie.name]=Z(ie);for(let ie of c){var _;let be=ie.name.value;g[be]=(_=$w[be])!==null&&_!==void 0?_:An(ie)}let F=k(k({query:e.query&&j(e.query),mutation:e.mutation&&j(e.mutation),subscription:e.subscription&&j(e.subscription)},N&>([N])),gt(y));return Q(k({description:(r=N)===null||r===void 0||(i=r.description)===null||i===void 0?void 0:i.value},F),{types:Object.values(g),directives:[...e.directives.map(J),...p.map(Dn)],extensions:Object.create(null),astNode:(a=N)!==null&&a!==void 0?a:e.astNode,extensionASTNodes:e.extensionASTNodes.concat(y),assumeValid:(o=n==null?void 0:n.assumeValid)!==null&&o!==void 0?o:!1});function B(ie){return(0,En.isListType)(ie)?new En.GraphQLList(B(ie.ofType)):(0,En.isNonNullType)(ie)?new En.GraphQLNonNull(B(ie.ofType)):j(ie)}function j(ie){return g[ie.name]}function J(ie){let be=ie.toConfig();return new Hd.GraphQLDirective(Q(k({},be),{args:(0,Jd.mapValue)(be.args,ve)}))}function Z(ie){if((0,Yw.isIntrospectionType)(ie)||(0,Jw.isSpecifiedScalarType)(ie))return ie;if((0,En.isScalarType)(ie))return le(ie);if((0,En.isObjectType)(ie))return we(ie);if((0,En.isInterfaceType)(ie))return qe(ie);if((0,En.isUnionType)(ie))return et(ie);if((0,En.isEnumType)(ie))return Ne(ie);if((0,En.isInputObjectType)(ie))return W(ie);(0,X8.invariant)(!1,"Unexpected type: "+(0,W8.inspect)(ie))}function W(ie){var be;let _e=ie.toConfig(),Le=(be=l[_e.name])!==null&&be!==void 0?be:[];return new En.GraphQLInputObjectType(Q(k({},_e),{fields:()=>k(k({},(0,Jd.mapValue)(_e.fields,_t=>Q(k({},_t),{type:B(_t.type)}))),Rr(Le)),extensionASTNodes:_e.extensionASTNodes.concat(Le)}))}function Ne(ie){var be;let _e=ie.toConfig(),Le=(be=l[ie.name])!==null&&be!==void 0?be:[];return new En.GraphQLEnumType(Q(k({},_e),{values:k(k({},_e.values),Fr(Le)),extensionASTNodes:_e.extensionASTNodes.concat(Le)}))}function le(ie){var be;let _e=ie.toConfig(),Le=(be=l[_e.name])!==null&&be!==void 0?be:[],_t=_e.specifiedByURL;for(let re of Le){var Y;_t=(Y=Qw(re))!==null&&Y!==void 0?Y:_t}return new En.GraphQLScalarType(Q(k({},_e),{specifiedByURL:_t,extensionASTNodes:_e.extensionASTNodes.concat(Le)}))}function we(ie){var be;let _e=ie.toConfig(),Le=(be=l[_e.name])!==null&&be!==void 0?be:[];return new En.GraphQLObjectType(Q(k({},_e),{interfaces:()=>[...ie.getInterfaces().map(j),...kn(Le)],fields:()=>k(k({},(0,Jd.mapValue)(_e.fields,X)),qt(Le)),extensionASTNodes:_e.extensionASTNodes.concat(Le)}))}function qe(ie){var be;let _e=ie.toConfig(),Le=(be=l[_e.name])!==null&&be!==void 0?be:[];return new En.GraphQLInterfaceType(Q(k({},_e),{interfaces:()=>[...ie.getInterfaces().map(j),...kn(Le)],fields:()=>k(k({},(0,Jd.mapValue)(_e.fields,X)),qt(Le)),extensionASTNodes:_e.extensionASTNodes.concat(Le)}))}function et(ie){var be;let _e=ie.toConfig(),Le=(be=l[_e.name])!==null&&be!==void 0?be:[];return new En.GraphQLUnionType(Q(k({},_e),{types:()=>[...ie.getTypes().map(j),...$t(Le)],extensionASTNodes:_e.extensionASTNodes.concat(Le)}))}function X(ie){return Q(k({},ie),{type:B(ie.type),args:ie.args&&(0,Jd.mapValue)(ie.args,ve)})}function ve(ie){return Q(k({},ie),{type:B(ie.type)})}function gt(ie){let be={};for(let Le of ie){var _e;let _t=(_e=Le.operationTypes)!==null&&_e!==void 0?_e:[];for(let Y of _t)be[Y.operation]=Ht(Y.type)}return be}function Ht(ie){var be;let _e=ie.name.value,Le=(be=$w[_e])!==null&&be!==void 0?be:g[_e];if(Le===void 0)throw new Error(`Unknown type: "${_e}".`);return Le}function zt(ie){return ie.kind===Li.Kind.LIST_TYPE?new En.GraphQLList(zt(ie.type)):ie.kind===Li.Kind.NON_NULL_TYPE?new En.GraphQLNonNull(zt(ie.type)):Ht(ie)}function Dn(ie){var be;return new Hd.GraphQLDirective({name:ie.name.value,description:(be=ie.description)===null||be===void 0?void 0:be.value,locations:ie.locations.map(({value:_e})=>_e),isRepeatable:ie.repeatable,args:cn(ie.arguments),astNode:ie})}function qt(ie){let be=Object.create(null);for(let _t of ie){var _e;let Y=(_e=_t.fields)!==null&&_e!==void 0?_e:[];for(let re of Y){var Le;be[re.name.value]={type:zt(re.type),description:(Le=re.description)===null||Le===void 0?void 0:Le.value,args:cn(re.arguments),deprecationReason:rT(re),astNode:re}}}return be}function cn(ie){let be=ie!=null?ie:[],_e=Object.create(null);for(let _t of be){var Le;let Y=zt(_t.type);_e[_t.name.value]={type:Y,description:(Le=_t.description)===null||Le===void 0?void 0:Le.value,defaultValue:(0,Gw.valueFromAST)(_t.defaultValue,Y),deprecationReason:rT(_t),astNode:_t}}return _e}function Rr(ie){let be=Object.create(null);for(let _t of ie){var _e;let Y=(_e=_t.fields)!==null&&_e!==void 0?_e:[];for(let re of Y){var Le;let Me=zt(re.type);be[re.name.value]={type:Me,description:(Le=re.description)===null||Le===void 0?void 0:Le.value,defaultValue:(0,Gw.valueFromAST)(re.defaultValue,Me),deprecationReason:rT(re),astNode:re}}}return be}function Fr(ie){let be=Object.create(null);for(let _t of ie){var _e;let Y=(_e=_t.values)!==null&&_e!==void 0?_e:[];for(let re of Y){var Le;be[re.name.value]={description:(Le=re.description)===null||Le===void 0?void 0:Le.value,deprecationReason:rT(re),astNode:re}}}return be}function kn(ie){return ie.flatMap(be=>{var _e,Le;return(_e=(Le=be.interfaces)===null||Le===void 0?void 0:Le.map(Ht))!==null&&_e!==void 0?_e:[]})}function $t(ie){return ie.flatMap(be=>{var _e,Le;return(_e=(Le=be.types)===null||Le===void 0?void 0:Le.map(Ht))!==null&&_e!==void 0?_e:[]})}function An(ie){var be;let _e=ie.name.value,Le=(be=l[_e])!==null&&be!==void 0?be:[];switch(ie.kind){case Li.Kind.OBJECT_TYPE_DEFINITION:{var _t;let tt=[ie,...Le];return new En.GraphQLObjectType({name:_e,description:(_t=ie.description)===null||_t===void 0?void 0:_t.value,interfaces:()=>kn(tt),fields:()=>qt(tt),astNode:ie,extensionASTNodes:Le})}case Li.Kind.INTERFACE_TYPE_DEFINITION:{var Y;let tt=[ie,...Le];return new En.GraphQLInterfaceType({name:_e,description:(Y=ie.description)===null||Y===void 0?void 0:Y.value,interfaces:()=>kn(tt),fields:()=>qt(tt),astNode:ie,extensionASTNodes:Le})}case Li.Kind.ENUM_TYPE_DEFINITION:{var re;let tt=[ie,...Le];return new En.GraphQLEnumType({name:_e,description:(re=ie.description)===null||re===void 0?void 0:re.value,values:Fr(tt),astNode:ie,extensionASTNodes:Le})}case Li.Kind.UNION_TYPE_DEFINITION:{var Me;let tt=[ie,...Le];return new En.GraphQLUnionType({name:_e,description:(Me=ie.description)===null||Me===void 0?void 0:Me.value,types:()=>$t(tt),astNode:ie,extensionASTNodes:Le})}case Li.Kind.SCALAR_TYPE_DEFINITION:{var Qe;return new En.GraphQLScalarType({name:_e,description:(Qe=ie.description)===null||Qe===void 0?void 0:Qe.value,specifiedByURL:Qw(ie),astNode:ie,extensionASTNodes:Le})}case Li.Kind.INPUT_OBJECT_TYPE_DEFINITION:{var Lt;let tt=[ie,...Le];return new En.GraphQLInputObjectType({name:_e,description:(Lt=ie.description)===null||Lt===void 0?void 0:Lt.value,fields:()=>Rr(tt),astNode:ie,extensionASTNodes:Le,isOneOf:n5(ie)})}}}}var $w=(0,Z8.keyMap)([...Jw.specifiedScalarTypes,...Yw.introspectionTypes],e=>e.name);function rT(e){let t=(0,F_.getDirectiveValues)(Hd.GraphQLDeprecatedDirective,e);return t==null?void 0:t.reason}function Qw(e){let t=(0,F_.getDirectiveValues)(Hd.GraphQLSpecifiedByDirective,e);return t==null?void 0:t.url}function n5(e){return!!(0,F_.getDirectiveValues)(Hd.GraphQLOneOfDirective,e)}});var Ww=P(aT=>{"use strict";f();T();m();Object.defineProperty(aT,"__esModule",{value:!0});aT.buildASTSchema=zw;aT.buildSchema=l5;var r5=Cr(),i5=Rt(),a5=Mc(),s5=$r(),o5=Cu(),u5=zc(),c5=P_();function zw(e,t){e!=null&&e.kind===i5.Kind.DOCUMENT||(0,r5.devAssert)(!1,"Must provide valid Document AST."),(t==null?void 0:t.assumeValid)!==!0&&(t==null?void 0:t.assumeValidSDL)!==!0&&(0,u5.assertValidSDL)(e);let n={description:void 0,types:[],directives:[],extensions:Object.create(null),extensionASTNodes:[],assumeValid:!1},r=(0,c5.extendSchemaImpl)(n,e,t);if(r.astNode==null)for(let a of r.types)switch(a.name){case"Query":r.query=a;break;case"Mutation":r.mutation=a;break;case"Subscription":r.subscription=a;break}let i=[...r.directives,...s5.specifiedDirectives.filter(a=>r.directives.every(o=>o.name!==a.name))];return new o5.GraphQLSchema(Q(k({},r),{directives:i}))}function l5(e,t){let n=(0,a5.parse)(e,{noLocation:t==null?void 0:t.noLocation,allowLegacyFragmentVariables:t==null?void 0:t.allowLegacyFragmentVariables});return zw(n,{assumeValidSDL:t==null?void 0:t.assumeValidSDL,assumeValid:t==null?void 0:t.assumeValid})}});var eL=P(L_=>{"use strict";f();T();m();Object.defineProperty(L_,"__esModule",{value:!0});L_.lexicographicSortSchema=h5;var d5=Yt(),p5=Ir(),f5=Td(),Xw=Nd(),Br=Ft(),m5=$r(),T5=Ai(),N5=Cu();function h5(e){let t=e.toConfig(),n=(0,f5.keyValMap)(w_(t.types),g=>g.name,y);return new N5.GraphQLSchema(Q(k({},t),{types:Object.values(n),directives:w_(t.directives).map(o),query:a(t.query),mutation:a(t.mutation),subscription:a(t.subscription)}));function r(g){return(0,Br.isListType)(g)?new Br.GraphQLList(r(g.ofType)):(0,Br.isNonNullType)(g)?new Br.GraphQLNonNull(r(g.ofType)):i(g)}function i(g){return n[g.name]}function a(g){return g&&i(g)}function o(g){let _=g.toConfig();return new m5.GraphQLDirective(Q(k({},_),{locations:Zw(_.locations,F=>F),args:c(_.args)}))}function c(g){return sT(g,_=>Q(k({},_),{type:r(_.type)}))}function l(g){return sT(g,_=>Q(k({},_),{type:r(_.type),args:_.args&&c(_.args)}))}function p(g){return sT(g,_=>Q(k({},_),{type:r(_.type)}))}function N(g){return w_(g).map(i)}function y(g){if((0,Br.isScalarType)(g)||(0,T5.isIntrospectionType)(g))return g;if((0,Br.isObjectType)(g)){let _=g.toConfig();return new Br.GraphQLObjectType(Q(k({},_),{interfaces:()=>N(_.interfaces),fields:()=>l(_.fields)}))}if((0,Br.isInterfaceType)(g)){let _=g.toConfig();return new Br.GraphQLInterfaceType(Q(k({},_),{interfaces:()=>N(_.interfaces),fields:()=>l(_.fields)}))}if((0,Br.isUnionType)(g)){let _=g.toConfig();return new Br.GraphQLUnionType(Q(k({},_),{types:()=>N(_.types)}))}if((0,Br.isEnumType)(g)){let _=g.toConfig();return new Br.GraphQLEnumType(Q(k({},_),{values:sT(_.values,F=>F)}))}if((0,Br.isInputObjectType)(g)){let _=g.toConfig();return new Br.GraphQLInputObjectType(Q(k({},_),{fields:()=>p(_.fields)}))}(0,p5.invariant)(!1,"Unexpected type: "+(0,d5.inspect)(g))}}function sT(e,t){let n=Object.create(null);for(let r of Object.keys(e).sort(Xw.naturalCompare))n[r]=t(e[r]);return n}function w_(e){return Zw(e,t=>t.name)}function Zw(e,t){return e.slice().sort((n,r)=>{let i=t(n),a=t(r);return(0,Xw.naturalCompare)(i,a)})}});var oL=P(zd=>{"use strict";f();T();m();Object.defineProperty(zd,"__esModule",{value:!0});zd.printIntrospectionSchema=S5;zd.printSchema=v5;zd.printType=rL;var E5=Yt(),y5=Ir(),I5=od(),B_=Rt(),oT=ci(),Xc=Ft(),U_=$r(),tL=Ai(),g5=Aa(),_5=Rd();function v5(e){return nL(e,t=>!(0,U_.isSpecifiedDirective)(t),O5)}function S5(e){return nL(e,U_.isSpecifiedDirective,tL.isIntrospectionType)}function O5(e){return!(0,g5.isSpecifiedScalarType)(e)&&!(0,tL.isIntrospectionType)(e)}function nL(e,t,n){let r=e.getDirectives().filter(t),i=Object.values(e.getTypeMap()).filter(n);return[b5(e),...r.map(a=>C5(a)),...i.map(a=>rL(a))].filter(Boolean).join(` + `}});var xw=w(b_=>{"use strict";f();N();m();Object.defineProperty(b_,"__esModule",{value:!0});b_.getOperationAST=M8;var k8=Rt();function M8(e,t){let n=null;for(let i of e.definitions)if(i.kind===k8.Kind.OPERATION_DEFINITION){var r;if(t==null){if(n)return null;n=i}else if(((r=i.name)===null||r===void 0?void 0:r.value)===t)return i}return n}});var qw=w(A_=>{"use strict";f();N();m();Object.defineProperty(A_,"__esModule",{value:!0});A_.getOperationRootType=x8;var nN=He();function x8(e,t){if(t.operation==="query"){let n=e.getQueryType();if(!n)throw new nN.GraphQLError("Schema does not define the required query root type.",{nodes:t});return n}if(t.operation==="mutation"){let n=e.getMutationType();if(!n)throw new nN.GraphQLError("Schema is not configured for mutations.",{nodes:t});return n}if(t.operation==="subscription"){let n=e.getSubscriptionType();if(!n)throw new nN.GraphQLError("Schema is not configured for subscriptions.",{nodes:t});return n}throw new nN.GraphQLError("Can only have query, mutation and subscription operations.",{nodes:t})}});var Vw=w(R_=>{"use strict";f();N();m();Object.defineProperty(R_,"__esModule",{value:!0});R_.introspectionFromSchema=G8;var q8=Ir(),V8=xc(),j8=$d(),K8=D_();function G8(e,t){let n=M({specifiedByUrl:!0,directiveIsRepeatable:!0,schemaDescription:!0,inputValueDeprecation:!0,oneOf:!0},t),r=(0,V8.parse)((0,K8.getIntrospectionQuery)(n)),i=(0,j8.executeSync)({schema:e,document:r});return!i.errors&&i.data||(0,q8.invariant)(!1),i.data}});var Kw=w(F_=>{"use strict";f();N();m();Object.defineProperty(F_,"__esModule",{value:!0});F_.buildClientSchema=W8;var $8=Cr(),di=Yt(),jw=Sa(),rN=Td(),Q8=xc(),pi=Ft(),Y8=$r(),La=Ri(),J8=Aa(),H8=Uu(),z8=qd();function W8(e,t){(0,jw.isObjectLike)(e)&&(0,jw.isObjectLike)(e.__schema)||(0,$8.devAssert)(!1,`Invalid or incomplete introspection result. Ensure that you are passing "data" property of introspection response and no "errors" was returned alongside: ${(0,di.inspect)(e)}.`);let n=e.__schema,r=(0,rN.keyValMap)(n.types,X=>X.name,X=>g(X));for(let X of[...J8.specifiedScalarTypes,...La.introspectionTypes])r[X.name]&&(r[X.name]=X);let i=n.queryType?T(n.queryType):null,a=n.mutationType?T(n.mutationType):null,o=n.subscriptionType?T(n.subscriptionType):null,c=n.directives?n.directives.map(et):[];return new H8.GraphQLSchema({description:n.description,query:i,mutation:a,subscription:o,types:Object.values(r),directives:c,assumeValid:t==null?void 0:t.assumeValid});function l(X){if(X.kind===La.TypeKind.LIST){let ve=X.ofType;if(!ve)throw new Error("Decorated type deeper than introspection query.");return new pi.GraphQLList(l(ve))}if(X.kind===La.TypeKind.NON_NULL){let ve=X.ofType;if(!ve)throw new Error("Decorated type deeper than introspection query.");let gt=l(ve);return new pi.GraphQLNonNull((0,pi.assertNullableType)(gt))}return p(X)}function p(X){let ve=X.name;if(!ve)throw new Error(`Unknown type reference: ${(0,di.inspect)(X)}.`);let gt=r[ve];if(!gt)throw new Error(`Invalid or incomplete schema, unknown type: ${ve}. Ensure that a full introspection query is used in order to build a client schema.`);return gt}function T(X){return(0,pi.assertObjectType)(p(X))}function y(X){return(0,pi.assertInterfaceType)(p(X))}function g(X){if(X!=null&&X.name!=null&&X.kind!=null)switch(X.kind){case La.TypeKind.SCALAR:return _(X);case La.TypeKind.OBJECT:return U(X);case La.TypeKind.INTERFACE:return K(X);case La.TypeKind.UNION:return J(X);case La.TypeKind.ENUM:return ee(X);case La.TypeKind.INPUT_OBJECT:return W(X)}let ve=(0,di.inspect)(X);throw new Error(`Invalid or incomplete introspection result. Ensure that a full introspection query is used in order to build a client schema: ${ve}.`)}function _(X){return new pi.GraphQLScalarType({name:X.name,description:X.description,specifiedByURL:X.specifiedByURL})}function F(X){if(X.interfaces===null&&X.kind===La.TypeKind.INTERFACE)return[];if(!X.interfaces){let ve=(0,di.inspect)(X);throw new Error(`Introspection result missing interfaces: ${ve}.`)}return X.interfaces.map(y)}function U(X){return new pi.GraphQLObjectType({name:X.name,description:X.description,interfaces:()=>F(X),fields:()=>Te(X)})}function K(X){return new pi.GraphQLInterfaceType({name:X.name,description:X.description,interfaces:()=>F(X),fields:()=>Te(X)})}function J(X){if(!X.possibleTypes){let ve=(0,di.inspect)(X);throw new Error(`Introspection result missing possibleTypes: ${ve}.`)}return new pi.GraphQLUnionType({name:X.name,description:X.description,types:()=>X.possibleTypes.map(T)})}function ee(X){if(!X.enumValues){let ve=(0,di.inspect)(X);throw new Error(`Introspection result missing enumValues: ${ve}.`)}return new pi.GraphQLEnumType({name:X.name,description:X.description,values:(0,rN.keyValMap)(X.enumValues,ve=>ve.name,ve=>({description:ve.description,deprecationReason:ve.deprecationReason}))})}function W(X){if(!X.inputFields){let ve=(0,di.inspect)(X);throw new Error(`Introspection result missing inputFields: ${ve}.`)}return new pi.GraphQLInputObjectType({name:X.name,description:X.description,fields:()=>we(X.inputFields),isOneOf:X.isOneOf})}function Te(X){if(!X.fields)throw new Error(`Introspection result missing fields: ${(0,di.inspect)(X)}.`);return(0,rN.keyValMap)(X.fields,ve=>ve.name,de)}function de(X){let ve=l(X.type);if(!(0,pi.isOutputType)(ve)){let gt=(0,di.inspect)(ve);throw new Error(`Introspection must provide output type for fields, but received: ${gt}.`)}if(!X.args){let gt=(0,di.inspect)(X);throw new Error(`Introspection result missing field args: ${gt}.`)}return{description:X.description,deprecationReason:X.deprecationReason,type:ve,args:we(X.args)}}function we(X){return(0,rN.keyValMap)(X,ve=>ve.name,qe)}function qe(X){let ve=l(X.type);if(!(0,pi.isInputType)(ve)){let Ht=(0,di.inspect)(ve);throw new Error(`Introspection must provide input type for arguments, but received: ${Ht}.`)}let gt=X.defaultValue!=null?(0,z8.valueFromAST)((0,Q8.parseValue)(X.defaultValue),ve):void 0;return{description:X.description,type:ve,defaultValue:gt,deprecationReason:X.deprecationReason}}function et(X){if(!X.args){let ve=(0,di.inspect)(X);throw new Error(`Introspection result missing directive args: ${ve}.`)}if(!X.locations){let ve=(0,di.inspect)(X);throw new Error(`Introspection result missing directive locations: ${ve}.`)}return new Y8.GraphQLDirective({name:X.name,description:X.description,isRepeatable:X.isRepeatable,locations:X.locations.slice(),args:we(X.args)})}}});var w_=w(aN=>{"use strict";f();N();m();Object.defineProperty(aN,"__esModule",{value:!0});aN.extendSchema=r5;aN.extendSchemaImpl=Ww;var X8=Cr(),Z8=Yt(),e5=Ir(),t5=xo(),Hd=Py(),Ci=Rt(),Gw=Mu(),In=Ft(),zd=$r(),Hw=Ri(),zw=Aa(),$w=Uu(),n5=Wc(),P_=Hc(),Qw=qd();function r5(e,t,n){(0,$w.assertSchema)(e),t!=null&&t.kind===Ci.Kind.DOCUMENT||(0,X8.devAssert)(!1,"Must provide valid Document AST."),(n==null?void 0:n.assumeValid)!==!0&&(n==null?void 0:n.assumeValidSDL)!==!0&&(0,n5.assertValidSDLExtension)(t,e);let r=e.toConfig(),i=Ww(r,t,n);return r===i?e:new $w.GraphQLSchema(i)}function Ww(e,t,n){var r,i,a,o;let c=[],l=Object.create(null),p=[],T,y=[];for(let se of t.definitions)if(se.kind===Ci.Kind.SCHEMA_DEFINITION)T=se;else if(se.kind===Ci.Kind.SCHEMA_EXTENSION)y.push(se);else if((0,Gw.isTypeDefinitionNode)(se))c.push(se);else if((0,Gw.isTypeExtensionNode)(se)){let De=se.name.value,_e=l[De];l[De]=_e?_e.concat([se]):[se]}else se.kind===Ci.Kind.DIRECTIVE_DEFINITION&&p.push(se);if(Object.keys(l).length===0&&c.length===0&&p.length===0&&y.length===0&&T==null)return e;let g=Object.create(null);for(let se of e.types)g[se.name]=ee(se);for(let se of c){var _;let De=se.name.value;g[De]=(_=Yw[De])!==null&&_!==void 0?_:An(se)}let F=M(M({query:e.query&&K(e.query),mutation:e.mutation&&K(e.mutation),subscription:e.subscription&&K(e.subscription)},T&>([T])),gt(y));return Q(M({description:(r=T)===null||r===void 0||(i=r.description)===null||i===void 0?void 0:i.value},F),{types:Object.values(g),directives:[...e.directives.map(J),...p.map(bn)],extensions:Object.create(null),astNode:(a=T)!==null&&a!==void 0?a:e.astNode,extensionASTNodes:e.extensionASTNodes.concat(y),assumeValid:(o=n==null?void 0:n.assumeValid)!==null&&o!==void 0?o:!1});function U(se){return(0,In.isListType)(se)?new In.GraphQLList(U(se.ofType)):(0,In.isNonNullType)(se)?new In.GraphQLNonNull(U(se.ofType)):K(se)}function K(se){return g[se.name]}function J(se){let De=se.toConfig();return new zd.GraphQLDirective(Q(M({},De),{args:(0,Hd.mapValue)(De.args,ve)}))}function ee(se){if((0,Hw.isIntrospectionType)(se)||(0,zw.isSpecifiedScalarType)(se))return se;if((0,In.isScalarType)(se))return de(se);if((0,In.isObjectType)(se))return we(se);if((0,In.isInterfaceType)(se))return qe(se);if((0,In.isUnionType)(se))return et(se);if((0,In.isEnumType)(se))return Te(se);if((0,In.isInputObjectType)(se))return W(se);(0,e5.invariant)(!1,"Unexpected type: "+(0,Z8.inspect)(se))}function W(se){var De;let _e=se.toConfig(),Le=(De=l[_e.name])!==null&&De!==void 0?De:[];return new In.GraphQLInputObjectType(Q(M({},_e),{fields:()=>M(M({},(0,Hd.mapValue)(_e.fields,_t=>Q(M({},_t),{type:U(_t.type)}))),Rr(Le)),extensionASTNodes:_e.extensionASTNodes.concat(Le)}))}function Te(se){var De;let _e=se.toConfig(),Le=(De=l[se.name])!==null&&De!==void 0?De:[];return new In.GraphQLEnumType(Q(M({},_e),{values:M(M({},_e.values),Fr(Le)),extensionASTNodes:_e.extensionASTNodes.concat(Le)}))}function de(se){var De;let _e=se.toConfig(),Le=(De=l[_e.name])!==null&&De!==void 0?De:[],_t=_e.specifiedByURL;for(let ae of Le){var Y;_t=(Y=Jw(ae))!==null&&Y!==void 0?Y:_t}return new In.GraphQLScalarType(Q(M({},_e),{specifiedByURL:_t,extensionASTNodes:_e.extensionASTNodes.concat(Le)}))}function we(se){var De;let _e=se.toConfig(),Le=(De=l[_e.name])!==null&&De!==void 0?De:[];return new In.GraphQLObjectType(Q(M({},_e),{interfaces:()=>[...se.getInterfaces().map(K),...kn(Le)],fields:()=>M(M({},(0,Hd.mapValue)(_e.fields,X)),Vt(Le)),extensionASTNodes:_e.extensionASTNodes.concat(Le)}))}function qe(se){var De;let _e=se.toConfig(),Le=(De=l[_e.name])!==null&&De!==void 0?De:[];return new In.GraphQLInterfaceType(Q(M({},_e),{interfaces:()=>[...se.getInterfaces().map(K),...kn(Le)],fields:()=>M(M({},(0,Hd.mapValue)(_e.fields,X)),Vt(Le)),extensionASTNodes:_e.extensionASTNodes.concat(Le)}))}function et(se){var De;let _e=se.toConfig(),Le=(De=l[_e.name])!==null&&De!==void 0?De:[];return new In.GraphQLUnionType(Q(M({},_e),{types:()=>[...se.getTypes().map(K),...$t(Le)],extensionASTNodes:_e.extensionASTNodes.concat(Le)}))}function X(se){return Q(M({},se),{type:U(se.type),args:se.args&&(0,Hd.mapValue)(se.args,ve)})}function ve(se){return Q(M({},se),{type:U(se.type)})}function gt(se){let De={};for(let Le of se){var _e;let _t=(_e=Le.operationTypes)!==null&&_e!==void 0?_e:[];for(let Y of _t)De[Y.operation]=Ht(Y.type)}return De}function Ht(se){var De;let _e=se.name.value,Le=(De=Yw[_e])!==null&&De!==void 0?De:g[_e];if(Le===void 0)throw new Error(`Unknown type: "${_e}".`);return Le}function zt(se){return se.kind===Ci.Kind.LIST_TYPE?new In.GraphQLList(zt(se.type)):se.kind===Ci.Kind.NON_NULL_TYPE?new In.GraphQLNonNull(zt(se.type)):Ht(se)}function bn(se){var De;return new zd.GraphQLDirective({name:se.name.value,description:(De=se.description)===null||De===void 0?void 0:De.value,locations:se.locations.map(({value:_e})=>_e),isRepeatable:se.repeatable,args:dn(se.arguments),astNode:se})}function Vt(se){let De=Object.create(null);for(let _t of se){var _e;let Y=(_e=_t.fields)!==null&&_e!==void 0?_e:[];for(let ae of Y){var Le;De[ae.name.value]={type:zt(ae.type),description:(Le=ae.description)===null||Le===void 0?void 0:Le.value,args:dn(ae.arguments),deprecationReason:iN(ae),astNode:ae}}}return De}function dn(se){let De=se!=null?se:[],_e=Object.create(null);for(let _t of De){var Le;let Y=zt(_t.type);_e[_t.name.value]={type:Y,description:(Le=_t.description)===null||Le===void 0?void 0:Le.value,defaultValue:(0,Qw.valueFromAST)(_t.defaultValue,Y),deprecationReason:iN(_t),astNode:_t}}return _e}function Rr(se){let De=Object.create(null);for(let _t of se){var _e;let Y=(_e=_t.fields)!==null&&_e!==void 0?_e:[];for(let ae of Y){var Le;let Me=zt(ae.type);De[ae.name.value]={type:Me,description:(Le=ae.description)===null||Le===void 0?void 0:Le.value,defaultValue:(0,Qw.valueFromAST)(ae.defaultValue,Me),deprecationReason:iN(ae),astNode:ae}}}return De}function Fr(se){let De=Object.create(null);for(let _t of se){var _e;let Y=(_e=_t.values)!==null&&_e!==void 0?_e:[];for(let ae of Y){var Le;De[ae.name.value]={description:(Le=ae.description)===null||Le===void 0?void 0:Le.value,deprecationReason:iN(ae),astNode:ae}}}return De}function kn(se){return se.flatMap(De=>{var _e,Le;return(_e=(Le=De.interfaces)===null||Le===void 0?void 0:Le.map(Ht))!==null&&_e!==void 0?_e:[]})}function $t(se){return se.flatMap(De=>{var _e,Le;return(_e=(Le=De.types)===null||Le===void 0?void 0:Le.map(Ht))!==null&&_e!==void 0?_e:[]})}function An(se){var De;let _e=se.name.value,Le=(De=l[_e])!==null&&De!==void 0?De:[];switch(se.kind){case Ci.Kind.OBJECT_TYPE_DEFINITION:{var _t;let tt=[se,...Le];return new In.GraphQLObjectType({name:_e,description:(_t=se.description)===null||_t===void 0?void 0:_t.value,interfaces:()=>kn(tt),fields:()=>Vt(tt),astNode:se,extensionASTNodes:Le})}case Ci.Kind.INTERFACE_TYPE_DEFINITION:{var Y;let tt=[se,...Le];return new In.GraphQLInterfaceType({name:_e,description:(Y=se.description)===null||Y===void 0?void 0:Y.value,interfaces:()=>kn(tt),fields:()=>Vt(tt),astNode:se,extensionASTNodes:Le})}case Ci.Kind.ENUM_TYPE_DEFINITION:{var ae;let tt=[se,...Le];return new In.GraphQLEnumType({name:_e,description:(ae=se.description)===null||ae===void 0?void 0:ae.value,values:Fr(tt),astNode:se,extensionASTNodes:Le})}case Ci.Kind.UNION_TYPE_DEFINITION:{var Me;let tt=[se,...Le];return new In.GraphQLUnionType({name:_e,description:(Me=se.description)===null||Me===void 0?void 0:Me.value,types:()=>$t(tt),astNode:se,extensionASTNodes:Le})}case Ci.Kind.SCALAR_TYPE_DEFINITION:{var Qe;return new In.GraphQLScalarType({name:_e,description:(Qe=se.description)===null||Qe===void 0?void 0:Qe.value,specifiedByURL:Jw(se),astNode:se,extensionASTNodes:Le})}case Ci.Kind.INPUT_OBJECT_TYPE_DEFINITION:{var Lt;let tt=[se,...Le];return new In.GraphQLInputObjectType({name:_e,description:(Lt=se.description)===null||Lt===void 0?void 0:Lt.value,fields:()=>Rr(tt),astNode:se,extensionASTNodes:Le,isOneOf:i5(se)})}}}}var Yw=(0,t5.keyMap)([...zw.specifiedScalarTypes,...Hw.introspectionTypes],e=>e.name);function iN(e){let t=(0,P_.getDirectiveValues)(zd.GraphQLDeprecatedDirective,e);return t==null?void 0:t.reason}function Jw(e){let t=(0,P_.getDirectiveValues)(zd.GraphQLSpecifiedByDirective,e);return t==null?void 0:t.url}function i5(e){return!!(0,P_.getDirectiveValues)(zd.GraphQLOneOfDirective,e)}});var Zw=w(sN=>{"use strict";f();N();m();Object.defineProperty(sN,"__esModule",{value:!0});sN.buildASTSchema=Xw;sN.buildSchema=p5;var a5=Cr(),s5=Rt(),o5=xc(),u5=$r(),c5=Uu(),l5=Wc(),d5=w_();function Xw(e,t){e!=null&&e.kind===s5.Kind.DOCUMENT||(0,a5.devAssert)(!1,"Must provide valid Document AST."),(t==null?void 0:t.assumeValid)!==!0&&(t==null?void 0:t.assumeValidSDL)!==!0&&(0,l5.assertValidSDL)(e);let n={description:void 0,types:[],directives:[],extensions:Object.create(null),extensionASTNodes:[],assumeValid:!1},r=(0,d5.extendSchemaImpl)(n,e,t);if(r.astNode==null)for(let a of r.types)switch(a.name){case"Query":r.query=a;break;case"Mutation":r.mutation=a;break;case"Subscription":r.subscription=a;break}let i=[...r.directives,...u5.specifiedDirectives.filter(a=>r.directives.every(o=>o.name!==a.name))];return new c5.GraphQLSchema(Q(M({},r),{directives:i}))}function p5(e,t){let n=(0,o5.parse)(e,{noLocation:t==null?void 0:t.noLocation,allowLegacyFragmentVariables:t==null?void 0:t.allowLegacyFragmentVariables});return Xw(n,{assumeValidSDL:t==null?void 0:t.assumeValidSDL,assumeValid:t==null?void 0:t.assumeValid})}});var nL=w(C_=>{"use strict";f();N();m();Object.defineProperty(C_,"__esModule",{value:!0});C_.lexicographicSortSchema=y5;var f5=Yt(),m5=Ir(),N5=Td(),eL=Ed(),Br=Ft(),T5=$r(),E5=Ri(),h5=Uu();function y5(e){let t=e.toConfig(),n=(0,N5.keyValMap)(L_(t.types),g=>g.name,y);return new h5.GraphQLSchema(Q(M({},t),{types:Object.values(n),directives:L_(t.directives).map(o),query:a(t.query),mutation:a(t.mutation),subscription:a(t.subscription)}));function r(g){return(0,Br.isListType)(g)?new Br.GraphQLList(r(g.ofType)):(0,Br.isNonNullType)(g)?new Br.GraphQLNonNull(r(g.ofType)):i(g)}function i(g){return n[g.name]}function a(g){return g&&i(g)}function o(g){let _=g.toConfig();return new T5.GraphQLDirective(Q(M({},_),{locations:tL(_.locations,F=>F),args:c(_.args)}))}function c(g){return oN(g,_=>Q(M({},_),{type:r(_.type)}))}function l(g){return oN(g,_=>Q(M({},_),{type:r(_.type),args:_.args&&c(_.args)}))}function p(g){return oN(g,_=>Q(M({},_),{type:r(_.type)}))}function T(g){return L_(g).map(i)}function y(g){if((0,Br.isScalarType)(g)||(0,E5.isIntrospectionType)(g))return g;if((0,Br.isObjectType)(g)){let _=g.toConfig();return new Br.GraphQLObjectType(Q(M({},_),{interfaces:()=>T(_.interfaces),fields:()=>l(_.fields)}))}if((0,Br.isInterfaceType)(g)){let _=g.toConfig();return new Br.GraphQLInterfaceType(Q(M({},_),{interfaces:()=>T(_.interfaces),fields:()=>l(_.fields)}))}if((0,Br.isUnionType)(g)){let _=g.toConfig();return new Br.GraphQLUnionType(Q(M({},_),{types:()=>T(_.types)}))}if((0,Br.isEnumType)(g)){let _=g.toConfig();return new Br.GraphQLEnumType(Q(M({},_),{values:oN(_.values,F=>F)}))}if((0,Br.isInputObjectType)(g)){let _=g.toConfig();return new Br.GraphQLInputObjectType(Q(M({},_),{fields:()=>p(_.fields)}))}(0,m5.invariant)(!1,"Unexpected type: "+(0,f5.inspect)(g))}}function oN(e,t){let n=Object.create(null);for(let r of Object.keys(e).sort(eL.naturalCompare))n[r]=t(e[r]);return n}function L_(e){return tL(e,t=>t.name)}function tL(e,t){return e.slice().sort((n,r)=>{let i=t(n),a=t(r);return(0,eL.naturalCompare)(i,a)})}});var cL=w(Wd=>{"use strict";f();N();m();Object.defineProperty(Wd,"__esModule",{value:!0});Wd.printIntrospectionSchema=D5;Wd.printSchema=O5;Wd.printType=aL;var I5=Yt(),g5=Ir(),_5=ud(),U_=Rt(),uN=li(),Zc=Ft(),k_=$r(),rL=Ri(),v5=Aa(),S5=Fd();function O5(e){return iL(e,t=>!(0,k_.isSpecifiedDirective)(t),b5)}function D5(e){return iL(e,k_.isSpecifiedDirective,rL.isIntrospectionType)}function b5(e){return!(0,v5.isSpecifiedScalarType)(e)&&!(0,rL.isIntrospectionType)(e)}function iL(e,t,n){let r=e.getDirectives().filter(t),i=Object.values(e.getTypeMap()).filter(n);return[A5(e),...r.map(a=>U5(a)),...i.map(a=>aL(a))].filter(Boolean).join(` -`)}function b5(e){if(e.description==null&&D5(e))return;let t=[],n=e.getQueryType();n&&t.push(` query: ${n.name}`);let r=e.getMutationType();r&&t.push(` mutation: ${r.name}`);let i=e.getSubscriptionType();return i&&t.push(` subscription: ${i.name}`),Ci(e)+`schema { +`)}function A5(e){if(e.description==null&&R5(e))return;let t=[],n=e.getQueryType();n&&t.push(` query: ${n.name}`);let r=e.getMutationType();r&&t.push(` mutation: ${r.name}`);let i=e.getSubscriptionType();return i&&t.push(` subscription: ${i.name}`),Bi(e)+`schema { ${t.join(` `)} -}`}function D5(e){let t=e.getQueryType();if(t&&t.name!=="Query")return!1;let n=e.getMutationType();if(n&&n.name!=="Mutation")return!1;let r=e.getSubscriptionType();return!(r&&r.name!=="Subscription")}function rL(e){if((0,Xc.isScalarType)(e))return A5(e);if((0,Xc.isObjectType)(e))return R5(e);if((0,Xc.isInterfaceType)(e))return F5(e);if((0,Xc.isUnionType)(e))return P5(e);if((0,Xc.isEnumType)(e))return w5(e);if((0,Xc.isInputObjectType)(e))return L5(e);(0,y5.invariant)(!1,"Unexpected type: "+(0,E5.inspect)(e))}function A5(e){return Ci(e)+`scalar ${e.name}`+B5(e)}function iL(e){let t=e.getInterfaces();return t.length?" implements "+t.map(n=>n.name).join(" & "):""}function R5(e){return Ci(e)+`type ${e.name}`+iL(e)+aL(e)}function F5(e){return Ci(e)+`interface ${e.name}`+iL(e)+aL(e)}function P5(e){let t=e.getTypes(),n=t.length?" = "+t.join(" | "):"";return Ci(e)+"union "+e.name+n}function w5(e){let t=e.getValues().map((n,r)=>Ci(n," ",!r)+" "+n.name+M_(n.deprecationReason));return Ci(e)+`enum ${e.name}`+k_(t)}function L5(e){let t=Object.values(e.getFields()).map((n,r)=>Ci(n," ",!r)+" "+C_(n));return Ci(e)+`input ${e.name}`+(e.isOneOf?" @oneOf":"")+k_(t)}function aL(e){let t=Object.values(e.getFields()).map((n,r)=>Ci(n," ",!r)+" "+n.name+sL(n.args," ")+": "+String(n.type)+M_(n.deprecationReason));return k_(t)}function k_(e){return e.length!==0?` { +}`}function R5(e){let t=e.getQueryType();if(t&&t.name!=="Query")return!1;let n=e.getMutationType();if(n&&n.name!=="Mutation")return!1;let r=e.getSubscriptionType();return!(r&&r.name!=="Subscription")}function aL(e){if((0,Zc.isScalarType)(e))return F5(e);if((0,Zc.isObjectType)(e))return P5(e);if((0,Zc.isInterfaceType)(e))return w5(e);if((0,Zc.isUnionType)(e))return L5(e);if((0,Zc.isEnumType)(e))return C5(e);if((0,Zc.isInputObjectType)(e))return B5(e);(0,g5.invariant)(!1,"Unexpected type: "+(0,I5.inspect)(e))}function F5(e){return Bi(e)+`scalar ${e.name}`+k5(e)}function sL(e){let t=e.getInterfaces();return t.length?" implements "+t.map(n=>n.name).join(" & "):""}function P5(e){return Bi(e)+`type ${e.name}`+sL(e)+oL(e)}function w5(e){return Bi(e)+`interface ${e.name}`+sL(e)+oL(e)}function L5(e){let t=e.getTypes(),n=t.length?" = "+t.join(" | "):"";return Bi(e)+"union "+e.name+n}function C5(e){let t=e.getValues().map((n,r)=>Bi(n," ",!r)+" "+n.name+x_(n.deprecationReason));return Bi(e)+`enum ${e.name}`+M_(t)}function B5(e){let t=Object.values(e.getFields()).map((n,r)=>Bi(n," ",!r)+" "+B_(n));return Bi(e)+`input ${e.name}`+(e.isOneOf?" @oneOf":"")+M_(t)}function oL(e){let t=Object.values(e.getFields()).map((n,r)=>Bi(n," ",!r)+" "+n.name+uL(n.args," ")+": "+String(n.type)+x_(n.deprecationReason));return M_(t)}function M_(e){return e.length!==0?` { `+e.join(` `)+` -}`:""}function sL(e,t=""){return e.length===0?"":e.every(n=>!n.description)?"("+e.map(C_).join(", ")+")":`( -`+e.map((n,r)=>Ci(n," "+t,!r)+" "+t+C_(n)).join(` +}`:""}function uL(e,t=""){return e.length===0?"":e.every(n=>!n.description)?"("+e.map(B_).join(", ")+")":`( +`+e.map((n,r)=>Bi(n," "+t,!r)+" "+t+B_(n)).join(` `)+` -`+t+")"}function C_(e){let t=(0,_5.astFromValue)(e.defaultValue,e.type),n=e.name+": "+String(e.type);return t&&(n+=` = ${(0,oT.print)(t)}`),n+M_(e.deprecationReason)}function C5(e){return Ci(e)+"directive @"+e.name+sL(e.args)+(e.isRepeatable?" repeatable":"")+" on "+e.locations.join(" | ")}function M_(e){return e==null?"":e!==U_.DEFAULT_DEPRECATION_REASON?` @deprecated(reason: ${(0,oT.print)({kind:B_.Kind.STRING,value:e})})`:" @deprecated"}function B5(e){return e.specifiedByURL==null?"":` @specifiedBy(url: ${(0,oT.print)({kind:B_.Kind.STRING,value:e.specifiedByURL})})`}function Ci(e,t="",n=!0){let{description:r}=e;if(r==null)return"";let i=(0,oT.print)({kind:B_.Kind.STRING,value:r,block:(0,I5.isPrintableAsBlockString)(r)});return(t&&!n?` +`+t+")"}function B_(e){let t=(0,S5.astFromValue)(e.defaultValue,e.type),n=e.name+": "+String(e.type);return t&&(n+=` = ${(0,uN.print)(t)}`),n+x_(e.deprecationReason)}function U5(e){return Bi(e)+"directive @"+e.name+uL(e.args)+(e.isRepeatable?" repeatable":"")+" on "+e.locations.join(" | ")}function x_(e){return e==null?"":e!==k_.DEFAULT_DEPRECATION_REASON?` @deprecated(reason: ${(0,uN.print)({kind:U_.Kind.STRING,value:e})})`:" @deprecated"}function k5(e){return e.specifiedByURL==null?"":` @specifiedBy(url: ${(0,uN.print)({kind:U_.Kind.STRING,value:e.specifiedByURL})})`}function Bi(e,t="",n=!0){let{description:r}=e;if(r==null)return"";let i=(0,uN.print)({kind:U_.Kind.STRING,value:r,block:(0,_5.isPrintableAsBlockString)(r)});return(t&&!n?` `+t:t)+i.replace(/\n/g,` `+t)+` -`}});var uL=P(x_=>{"use strict";f();T();m();Object.defineProperty(x_,"__esModule",{value:!0});x_.concatAST=k5;var U5=Rt();function k5(e){let t=[];for(let n of e)t.push(...n.definitions);return{kind:U5.Kind.DOCUMENT,definitions:t}}});var dL=P(q_=>{"use strict";f();T();m();Object.defineProperty(q_,"__esModule",{value:!0});q_.separateOperations=x5;var uT=Rt(),M5=Au();function x5(e){let t=[],n=Object.create(null);for(let i of e.definitions)switch(i.kind){case uT.Kind.OPERATION_DEFINITION:t.push(i);break;case uT.Kind.FRAGMENT_DEFINITION:n[i.name.value]=cL(i.selectionSet);break;default:}let r=Object.create(null);for(let i of t){let a=new Set;for(let c of cL(i.selectionSet))lL(a,n,c);let o=i.name?i.name.value:"";r[o]={kind:uT.Kind.DOCUMENT,definitions:e.definitions.filter(c=>c===i||c.kind===uT.Kind.FRAGMENT_DEFINITION&&a.has(c.name.value))}}return r}function lL(e,t,n){if(!e.has(n)){e.add(n);let r=t[n];if(r!==void 0)for(let i of r)lL(e,t,i)}}function cL(e){let t=[];return(0,M5.visit)(e,{FragmentSpread(n){t.push(n.name.value)}}),t}});var mL=P(j_=>{"use strict";f();T();m();Object.defineProperty(j_,"__esModule",{value:!0});j_.stripIgnoredCharacters=V5;var q5=od(),pL=Zf(),fL=rm(),V_=cd();function V5(e){let t=(0,fL.isSource)(e)?e:new fL.Source(e),n=t.body,r=new pL.Lexer(t),i="",a=!1;for(;r.advance().kind!==V_.TokenKind.EOF;){let o=r.token,c=o.kind,l=!(0,pL.isPunctuatorTokenKind)(o.kind);a&&(l||o.kind===V_.TokenKind.SPREAD)&&(i+=" ");let p=n.slice(o.start,o.end);c===V_.TokenKind.BLOCK_STRING?i+=(0,q5.printBlockString)(o.value,{minimize:!0}):i+=p,a=l}return i}});var NL=P(cT=>{"use strict";f();T();m();Object.defineProperty(cT,"__esModule",{value:!0});cT.assertValidName=$5;cT.isValidNameError=TL;var j5=Cr(),K5=Je(),G5=hd();function $5(e){let t=TL(e);if(t)throw t;return e}function TL(e){if(typeof e=="string"||(0,j5.devAssert)(!1,"Expected name to be a string."),e.startsWith("__"))return new K5.GraphQLError(`Name "${e}" must not begin with "__", which is reserved by GraphQL introspection.`);try{(0,G5.assertName)(e)}catch(t){return t}}});var SL=P(Ca=>{"use strict";f();T();m();Object.defineProperty(Ca,"__esModule",{value:!0});Ca.DangerousChangeType=Ca.BreakingChangeType=void 0;Ca.findBreakingChanges=W5;Ca.findDangerousChanges=X5;var Q5=Yt(),_L=Ir(),hL=Mo(),Y5=ci(),Mt=Ft(),J5=Aa(),H5=Rd(),z5=$I(),Ln;Ca.BreakingChangeType=Ln;(function(e){e.TYPE_REMOVED="TYPE_REMOVED",e.TYPE_CHANGED_KIND="TYPE_CHANGED_KIND",e.TYPE_REMOVED_FROM_UNION="TYPE_REMOVED_FROM_UNION",e.VALUE_REMOVED_FROM_ENUM="VALUE_REMOVED_FROM_ENUM",e.REQUIRED_INPUT_FIELD_ADDED="REQUIRED_INPUT_FIELD_ADDED",e.IMPLEMENTED_INTERFACE_REMOVED="IMPLEMENTED_INTERFACE_REMOVED",e.FIELD_REMOVED="FIELD_REMOVED",e.FIELD_CHANGED_KIND="FIELD_CHANGED_KIND",e.REQUIRED_ARG_ADDED="REQUIRED_ARG_ADDED",e.ARG_REMOVED="ARG_REMOVED",e.ARG_CHANGED_KIND="ARG_CHANGED_KIND",e.DIRECTIVE_REMOVED="DIRECTIVE_REMOVED",e.DIRECTIVE_ARG_REMOVED="DIRECTIVE_ARG_REMOVED",e.REQUIRED_DIRECTIVE_ARG_ADDED="REQUIRED_DIRECTIVE_ARG_ADDED",e.DIRECTIVE_REPEATABLE_REMOVED="DIRECTIVE_REPEATABLE_REMOVED",e.DIRECTIVE_LOCATION_REMOVED="DIRECTIVE_LOCATION_REMOVED"})(Ln||(Ca.BreakingChangeType=Ln={}));var aa;Ca.DangerousChangeType=aa;(function(e){e.VALUE_ADDED_TO_ENUM="VALUE_ADDED_TO_ENUM",e.TYPE_ADDED_TO_UNION="TYPE_ADDED_TO_UNION",e.OPTIONAL_INPUT_FIELD_ADDED="OPTIONAL_INPUT_FIELD_ADDED",e.OPTIONAL_ARG_ADDED="OPTIONAL_ARG_ADDED",e.IMPLEMENTED_INTERFACE_ADDED="IMPLEMENTED_INTERFACE_ADDED",e.ARG_DEFAULT_VALUE_CHANGE="ARG_DEFAULT_VALUE_CHANGE"})(aa||(Ca.DangerousChangeType=aa={}));function W5(e,t){return vL(e,t).filter(n=>n.type in Ln)}function X5(e,t){return vL(e,t).filter(n=>n.type in aa)}function vL(e,t){return[...eX(e,t),...Z5(e,t)]}function Z5(e,t){let n=[],r=Ns(e.getDirectives(),t.getDirectives());for(let i of r.removed)n.push({type:Ln.DIRECTIVE_REMOVED,description:`${i.name} was removed.`});for(let[i,a]of r.persisted){let o=Ns(i.args,a.args);for(let c of o.added)(0,Mt.isRequiredArgument)(c)&&n.push({type:Ln.REQUIRED_DIRECTIVE_ARG_ADDED,description:`A required arg ${c.name} on directive ${i.name} was added.`});for(let c of o.removed)n.push({type:Ln.DIRECTIVE_ARG_REMOVED,description:`${c.name} was removed from ${i.name}.`});i.isRepeatable&&!a.isRepeatable&&n.push({type:Ln.DIRECTIVE_REPEATABLE_REMOVED,description:`Repeatable flag was removed from ${i.name}.`});for(let c of i.locations)a.locations.includes(c)||n.push({type:Ln.DIRECTIVE_LOCATION_REMOVED,description:`${c} was removed from ${i.name}.`})}return n}function eX(e,t){let n=[],r=Ns(Object.values(e.getTypeMap()),Object.values(t.getTypeMap()));for(let i of r.removed)n.push({type:Ln.TYPE_REMOVED,description:(0,J5.isSpecifiedScalarType)(i)?`Standard scalar ${i.name} was removed because it is not referenced anymore.`:`${i.name} was removed.`});for(let[i,a]of r.persisted)(0,Mt.isEnumType)(i)&&(0,Mt.isEnumType)(a)?n.push(...rX(i,a)):(0,Mt.isUnionType)(i)&&(0,Mt.isUnionType)(a)?n.push(...nX(i,a)):(0,Mt.isInputObjectType)(i)&&(0,Mt.isInputObjectType)(a)?n.push(...tX(i,a)):(0,Mt.isObjectType)(i)&&(0,Mt.isObjectType)(a)?n.push(...yL(i,a),...EL(i,a)):(0,Mt.isInterfaceType)(i)&&(0,Mt.isInterfaceType)(a)?n.push(...yL(i,a),...EL(i,a)):i.constructor!==a.constructor&&n.push({type:Ln.TYPE_CHANGED_KIND,description:`${i.name} changed from ${IL(i)} to ${IL(a)}.`});return n}function tX(e,t){let n=[],r=Ns(Object.values(e.getFields()),Object.values(t.getFields()));for(let i of r.added)(0,Mt.isRequiredInputField)(i)?n.push({type:Ln.REQUIRED_INPUT_FIELD_ADDED,description:`A required field ${i.name} on input type ${e.name} was added.`}):n.push({type:aa.OPTIONAL_INPUT_FIELD_ADDED,description:`An optional field ${i.name} on input type ${e.name} was added.`});for(let i of r.removed)n.push({type:Ln.FIELD_REMOVED,description:`${e.name}.${i.name} was removed.`});for(let[i,a]of r.persisted)Xd(i.type,a.type)||n.push({type:Ln.FIELD_CHANGED_KIND,description:`${e.name}.${i.name} changed type from ${String(i.type)} to ${String(a.type)}.`});return n}function nX(e,t){let n=[],r=Ns(e.getTypes(),t.getTypes());for(let i of r.added)n.push({type:aa.TYPE_ADDED_TO_UNION,description:`${i.name} was added to union type ${e.name}.`});for(let i of r.removed)n.push({type:Ln.TYPE_REMOVED_FROM_UNION,description:`${i.name} was removed from union type ${e.name}.`});return n}function rX(e,t){let n=[],r=Ns(e.getValues(),t.getValues());for(let i of r.added)n.push({type:aa.VALUE_ADDED_TO_ENUM,description:`${i.name} was added to enum type ${e.name}.`});for(let i of r.removed)n.push({type:Ln.VALUE_REMOVED_FROM_ENUM,description:`${i.name} was removed from enum type ${e.name}.`});return n}function EL(e,t){let n=[],r=Ns(e.getInterfaces(),t.getInterfaces());for(let i of r.added)n.push({type:aa.IMPLEMENTED_INTERFACE_ADDED,description:`${i.name} added to interfaces implemented by ${e.name}.`});for(let i of r.removed)n.push({type:Ln.IMPLEMENTED_INTERFACE_REMOVED,description:`${e.name} no longer implements interface ${i.name}.`});return n}function yL(e,t){let n=[],r=Ns(Object.values(e.getFields()),Object.values(t.getFields()));for(let i of r.removed)n.push({type:Ln.FIELD_REMOVED,description:`${e.name}.${i.name} was removed.`});for(let[i,a]of r.persisted)n.push(...iX(e,i,a)),Wd(i.type,a.type)||n.push({type:Ln.FIELD_CHANGED_KIND,description:`${e.name}.${i.name} changed type from ${String(i.type)} to ${String(a.type)}.`});return n}function iX(e,t,n){let r=[],i=Ns(t.args,n.args);for(let a of i.removed)r.push({type:Ln.ARG_REMOVED,description:`${e.name}.${t.name} arg ${a.name} was removed.`});for(let[a,o]of i.persisted)if(!Xd(a.type,o.type))r.push({type:Ln.ARG_CHANGED_KIND,description:`${e.name}.${t.name} arg ${a.name} has changed type from ${String(a.type)} to ${String(o.type)}.`});else if(a.defaultValue!==void 0)if(o.defaultValue===void 0)r.push({type:aa.ARG_DEFAULT_VALUE_CHANGE,description:`${e.name}.${t.name} arg ${a.name} defaultValue was removed.`});else{let l=gL(a.defaultValue,a.type),p=gL(o.defaultValue,o.type);l!==p&&r.push({type:aa.ARG_DEFAULT_VALUE_CHANGE,description:`${e.name}.${t.name} arg ${a.name} has changed defaultValue from ${l} to ${p}.`})}for(let a of i.added)(0,Mt.isRequiredArgument)(a)?r.push({type:Ln.REQUIRED_ARG_ADDED,description:`A required arg ${a.name} on ${e.name}.${t.name} was added.`}):r.push({type:aa.OPTIONAL_ARG_ADDED,description:`An optional arg ${a.name} on ${e.name}.${t.name} was added.`});return r}function Wd(e,t){return(0,Mt.isListType)(e)?(0,Mt.isListType)(t)&&Wd(e.ofType,t.ofType)||(0,Mt.isNonNullType)(t)&&Wd(e,t.ofType):(0,Mt.isNonNullType)(e)?(0,Mt.isNonNullType)(t)&&Wd(e.ofType,t.ofType):(0,Mt.isNamedType)(t)&&e.name===t.name||(0,Mt.isNonNullType)(t)&&Wd(e,t.ofType)}function Xd(e,t){return(0,Mt.isListType)(e)?(0,Mt.isListType)(t)&&Xd(e.ofType,t.ofType):(0,Mt.isNonNullType)(e)?(0,Mt.isNonNullType)(t)&&Xd(e.ofType,t.ofType)||!(0,Mt.isNonNullType)(t)&&Xd(e.ofType,t):(0,Mt.isNamedType)(t)&&e.name===t.name}function IL(e){if((0,Mt.isScalarType)(e))return"a Scalar type";if((0,Mt.isObjectType)(e))return"an Object type";if((0,Mt.isInterfaceType)(e))return"an Interface type";if((0,Mt.isUnionType)(e))return"a Union type";if((0,Mt.isEnumType)(e))return"an Enum type";if((0,Mt.isInputObjectType)(e))return"an Input type";(0,_L.invariant)(!1,"Unexpected type: "+(0,Q5.inspect)(e))}function gL(e,t){let n=(0,H5.astFromValue)(e,t);return n!=null||(0,_L.invariant)(!1),(0,Y5.print)((0,z5.sortValueNode)(n))}function Ns(e,t){let n=[],r=[],i=[],a=(0,hL.keyMap)(e,({name:c})=>c),o=(0,hL.keyMap)(t,({name:c})=>c);for(let c of e){let l=o[c.name];l===void 0?r.push(c):i.push([c,l])}for(let c of t)a[c.name]===void 0&&n.push(c);return{added:n,persisted:i,removed:r}}});var AL=P(Bt=>{"use strict";f();T();m();Object.defineProperty(Bt,"__esModule",{value:!0});Object.defineProperty(Bt,"BreakingChangeType",{enumerable:!0,get:function(){return lT.BreakingChangeType}});Object.defineProperty(Bt,"DangerousChangeType",{enumerable:!0,get:function(){return lT.DangerousChangeType}});Object.defineProperty(Bt,"TypeInfo",{enumerable:!0,get:function(){return bL.TypeInfo}});Object.defineProperty(Bt,"assertValidName",{enumerable:!0,get:function(){return DL.assertValidName}});Object.defineProperty(Bt,"astFromValue",{enumerable:!0,get:function(){return TX.astFromValue}});Object.defineProperty(Bt,"buildASTSchema",{enumerable:!0,get:function(){return OL.buildASTSchema}});Object.defineProperty(Bt,"buildClientSchema",{enumerable:!0,get:function(){return cX.buildClientSchema}});Object.defineProperty(Bt,"buildSchema",{enumerable:!0,get:function(){return OL.buildSchema}});Object.defineProperty(Bt,"coerceInputValue",{enumerable:!0,get:function(){return NX.coerceInputValue}});Object.defineProperty(Bt,"concatAST",{enumerable:!0,get:function(){return hX.concatAST}});Object.defineProperty(Bt,"doTypesOverlap",{enumerable:!0,get:function(){return G_.doTypesOverlap}});Object.defineProperty(Bt,"extendSchema",{enumerable:!0,get:function(){return lX.extendSchema}});Object.defineProperty(Bt,"findBreakingChanges",{enumerable:!0,get:function(){return lT.findBreakingChanges}});Object.defineProperty(Bt,"findDangerousChanges",{enumerable:!0,get:function(){return lT.findDangerousChanges}});Object.defineProperty(Bt,"getIntrospectionQuery",{enumerable:!0,get:function(){return aX.getIntrospectionQuery}});Object.defineProperty(Bt,"getOperationAST",{enumerable:!0,get:function(){return sX.getOperationAST}});Object.defineProperty(Bt,"getOperationRootType",{enumerable:!0,get:function(){return oX.getOperationRootType}});Object.defineProperty(Bt,"introspectionFromSchema",{enumerable:!0,get:function(){return uX.introspectionFromSchema}});Object.defineProperty(Bt,"isEqualType",{enumerable:!0,get:function(){return G_.isEqualType}});Object.defineProperty(Bt,"isTypeSubTypeOf",{enumerable:!0,get:function(){return G_.isTypeSubTypeOf}});Object.defineProperty(Bt,"isValidNameError",{enumerable:!0,get:function(){return DL.isValidNameError}});Object.defineProperty(Bt,"lexicographicSortSchema",{enumerable:!0,get:function(){return dX.lexicographicSortSchema}});Object.defineProperty(Bt,"printIntrospectionSchema",{enumerable:!0,get:function(){return K_.printIntrospectionSchema}});Object.defineProperty(Bt,"printSchema",{enumerable:!0,get:function(){return K_.printSchema}});Object.defineProperty(Bt,"printType",{enumerable:!0,get:function(){return K_.printType}});Object.defineProperty(Bt,"separateOperations",{enumerable:!0,get:function(){return EX.separateOperations}});Object.defineProperty(Bt,"stripIgnoredCharacters",{enumerable:!0,get:function(){return yX.stripIgnoredCharacters}});Object.defineProperty(Bt,"typeFromAST",{enumerable:!0,get:function(){return pX.typeFromAST}});Object.defineProperty(Bt,"valueFromAST",{enumerable:!0,get:function(){return fX.valueFromAST}});Object.defineProperty(Bt,"valueFromASTUntyped",{enumerable:!0,get:function(){return mX.valueFromASTUntyped}});Object.defineProperty(Bt,"visitWithTypeInfo",{enumerable:!0,get:function(){return bL.visitWithTypeInfo}});var aX=O_(),sX=kw(),oX=Mw(),uX=xw(),cX=Vw(),OL=Ww(),lX=P_(),dX=eL(),K_=oL(),pX=Ra(),fX=xd(),mX=Vy(),TX=Rd(),bL=Pm(),NX=dg(),hX=uL(),EX=dL(),yX=mL(),G_=_d(),DL=NL(),lT=SL()});var Ae=P(x=>{"use strict";f();T();m();Object.defineProperty(x,"__esModule",{value:!0});Object.defineProperty(x,"BREAK",{enumerable:!0,get:function(){return jt.BREAK}});Object.defineProperty(x,"BreakingChangeType",{enumerable:!0,get:function(){return Kt.BreakingChangeType}});Object.defineProperty(x,"DEFAULT_DEPRECATION_REASON",{enumerable:!0,get:function(){return Ie.DEFAULT_DEPRECATION_REASON}});Object.defineProperty(x,"DangerousChangeType",{enumerable:!0,get:function(){return Kt.DangerousChangeType}});Object.defineProperty(x,"DirectiveLocation",{enumerable:!0,get:function(){return jt.DirectiveLocation}});Object.defineProperty(x,"ExecutableDefinitionsRule",{enumerable:!0,get:function(){return mt.ExecutableDefinitionsRule}});Object.defineProperty(x,"FieldsOnCorrectTypeRule",{enumerable:!0,get:function(){return mt.FieldsOnCorrectTypeRule}});Object.defineProperty(x,"FragmentsOnCompositeTypesRule",{enumerable:!0,get:function(){return mt.FragmentsOnCompositeTypesRule}});Object.defineProperty(x,"GRAPHQL_MAX_INT",{enumerable:!0,get:function(){return Ie.GRAPHQL_MAX_INT}});Object.defineProperty(x,"GRAPHQL_MIN_INT",{enumerable:!0,get:function(){return Ie.GRAPHQL_MIN_INT}});Object.defineProperty(x,"GraphQLBoolean",{enumerable:!0,get:function(){return Ie.GraphQLBoolean}});Object.defineProperty(x,"GraphQLDeprecatedDirective",{enumerable:!0,get:function(){return Ie.GraphQLDeprecatedDirective}});Object.defineProperty(x,"GraphQLDirective",{enumerable:!0,get:function(){return Ie.GraphQLDirective}});Object.defineProperty(x,"GraphQLEnumType",{enumerable:!0,get:function(){return Ie.GraphQLEnumType}});Object.defineProperty(x,"GraphQLError",{enumerable:!0,get:function(){return Zd.GraphQLError}});Object.defineProperty(x,"GraphQLFloat",{enumerable:!0,get:function(){return Ie.GraphQLFloat}});Object.defineProperty(x,"GraphQLID",{enumerable:!0,get:function(){return Ie.GraphQLID}});Object.defineProperty(x,"GraphQLIncludeDirective",{enumerable:!0,get:function(){return Ie.GraphQLIncludeDirective}});Object.defineProperty(x,"GraphQLInputObjectType",{enumerable:!0,get:function(){return Ie.GraphQLInputObjectType}});Object.defineProperty(x,"GraphQLInt",{enumerable:!0,get:function(){return Ie.GraphQLInt}});Object.defineProperty(x,"GraphQLInterfaceType",{enumerable:!0,get:function(){return Ie.GraphQLInterfaceType}});Object.defineProperty(x,"GraphQLList",{enumerable:!0,get:function(){return Ie.GraphQLList}});Object.defineProperty(x,"GraphQLNonNull",{enumerable:!0,get:function(){return Ie.GraphQLNonNull}});Object.defineProperty(x,"GraphQLObjectType",{enumerable:!0,get:function(){return Ie.GraphQLObjectType}});Object.defineProperty(x,"GraphQLOneOfDirective",{enumerable:!0,get:function(){return Ie.GraphQLOneOfDirective}});Object.defineProperty(x,"GraphQLScalarType",{enumerable:!0,get:function(){return Ie.GraphQLScalarType}});Object.defineProperty(x,"GraphQLSchema",{enumerable:!0,get:function(){return Ie.GraphQLSchema}});Object.defineProperty(x,"GraphQLSkipDirective",{enumerable:!0,get:function(){return Ie.GraphQLSkipDirective}});Object.defineProperty(x,"GraphQLSpecifiedByDirective",{enumerable:!0,get:function(){return Ie.GraphQLSpecifiedByDirective}});Object.defineProperty(x,"GraphQLString",{enumerable:!0,get:function(){return Ie.GraphQLString}});Object.defineProperty(x,"GraphQLUnionType",{enumerable:!0,get:function(){return Ie.GraphQLUnionType}});Object.defineProperty(x,"Kind",{enumerable:!0,get:function(){return jt.Kind}});Object.defineProperty(x,"KnownArgumentNamesRule",{enumerable:!0,get:function(){return mt.KnownArgumentNamesRule}});Object.defineProperty(x,"KnownDirectivesRule",{enumerable:!0,get:function(){return mt.KnownDirectivesRule}});Object.defineProperty(x,"KnownFragmentNamesRule",{enumerable:!0,get:function(){return mt.KnownFragmentNamesRule}});Object.defineProperty(x,"KnownTypeNamesRule",{enumerable:!0,get:function(){return mt.KnownTypeNamesRule}});Object.defineProperty(x,"Lexer",{enumerable:!0,get:function(){return jt.Lexer}});Object.defineProperty(x,"Location",{enumerable:!0,get:function(){return jt.Location}});Object.defineProperty(x,"LoneAnonymousOperationRule",{enumerable:!0,get:function(){return mt.LoneAnonymousOperationRule}});Object.defineProperty(x,"LoneSchemaDefinitionRule",{enumerable:!0,get:function(){return mt.LoneSchemaDefinitionRule}});Object.defineProperty(x,"MaxIntrospectionDepthRule",{enumerable:!0,get:function(){return mt.MaxIntrospectionDepthRule}});Object.defineProperty(x,"NoDeprecatedCustomRule",{enumerable:!0,get:function(){return mt.NoDeprecatedCustomRule}});Object.defineProperty(x,"NoFragmentCyclesRule",{enumerable:!0,get:function(){return mt.NoFragmentCyclesRule}});Object.defineProperty(x,"NoSchemaIntrospectionCustomRule",{enumerable:!0,get:function(){return mt.NoSchemaIntrospectionCustomRule}});Object.defineProperty(x,"NoUndefinedVariablesRule",{enumerable:!0,get:function(){return mt.NoUndefinedVariablesRule}});Object.defineProperty(x,"NoUnusedFragmentsRule",{enumerable:!0,get:function(){return mt.NoUnusedFragmentsRule}});Object.defineProperty(x,"NoUnusedVariablesRule",{enumerable:!0,get:function(){return mt.NoUnusedVariablesRule}});Object.defineProperty(x,"OperationTypeNode",{enumerable:!0,get:function(){return jt.OperationTypeNode}});Object.defineProperty(x,"OverlappingFieldsCanBeMergedRule",{enumerable:!0,get:function(){return mt.OverlappingFieldsCanBeMergedRule}});Object.defineProperty(x,"PossibleFragmentSpreadsRule",{enumerable:!0,get:function(){return mt.PossibleFragmentSpreadsRule}});Object.defineProperty(x,"PossibleTypeExtensionsRule",{enumerable:!0,get:function(){return mt.PossibleTypeExtensionsRule}});Object.defineProperty(x,"ProvidedRequiredArgumentsRule",{enumerable:!0,get:function(){return mt.ProvidedRequiredArgumentsRule}});Object.defineProperty(x,"ScalarLeafsRule",{enumerable:!0,get:function(){return mt.ScalarLeafsRule}});Object.defineProperty(x,"SchemaMetaFieldDef",{enumerable:!0,get:function(){return Ie.SchemaMetaFieldDef}});Object.defineProperty(x,"SingleFieldSubscriptionsRule",{enumerable:!0,get:function(){return mt.SingleFieldSubscriptionsRule}});Object.defineProperty(x,"Source",{enumerable:!0,get:function(){return jt.Source}});Object.defineProperty(x,"Token",{enumerable:!0,get:function(){return jt.Token}});Object.defineProperty(x,"TokenKind",{enumerable:!0,get:function(){return jt.TokenKind}});Object.defineProperty(x,"TypeInfo",{enumerable:!0,get:function(){return Kt.TypeInfo}});Object.defineProperty(x,"TypeKind",{enumerable:!0,get:function(){return Ie.TypeKind}});Object.defineProperty(x,"TypeMetaFieldDef",{enumerable:!0,get:function(){return Ie.TypeMetaFieldDef}});Object.defineProperty(x,"TypeNameMetaFieldDef",{enumerable:!0,get:function(){return Ie.TypeNameMetaFieldDef}});Object.defineProperty(x,"UniqueArgumentDefinitionNamesRule",{enumerable:!0,get:function(){return mt.UniqueArgumentDefinitionNamesRule}});Object.defineProperty(x,"UniqueArgumentNamesRule",{enumerable:!0,get:function(){return mt.UniqueArgumentNamesRule}});Object.defineProperty(x,"UniqueDirectiveNamesRule",{enumerable:!0,get:function(){return mt.UniqueDirectiveNamesRule}});Object.defineProperty(x,"UniqueDirectivesPerLocationRule",{enumerable:!0,get:function(){return mt.UniqueDirectivesPerLocationRule}});Object.defineProperty(x,"UniqueEnumValueNamesRule",{enumerable:!0,get:function(){return mt.UniqueEnumValueNamesRule}});Object.defineProperty(x,"UniqueFieldDefinitionNamesRule",{enumerable:!0,get:function(){return mt.UniqueFieldDefinitionNamesRule}});Object.defineProperty(x,"UniqueFragmentNamesRule",{enumerable:!0,get:function(){return mt.UniqueFragmentNamesRule}});Object.defineProperty(x,"UniqueInputFieldNamesRule",{enumerable:!0,get:function(){return mt.UniqueInputFieldNamesRule}});Object.defineProperty(x,"UniqueOperationNamesRule",{enumerable:!0,get:function(){return mt.UniqueOperationNamesRule}});Object.defineProperty(x,"UniqueOperationTypesRule",{enumerable:!0,get:function(){return mt.UniqueOperationTypesRule}});Object.defineProperty(x,"UniqueTypeNamesRule",{enumerable:!0,get:function(){return mt.UniqueTypeNamesRule}});Object.defineProperty(x,"UniqueVariableNamesRule",{enumerable:!0,get:function(){return mt.UniqueVariableNamesRule}});Object.defineProperty(x,"ValidationContext",{enumerable:!0,get:function(){return mt.ValidationContext}});Object.defineProperty(x,"ValuesOfCorrectTypeRule",{enumerable:!0,get:function(){return mt.ValuesOfCorrectTypeRule}});Object.defineProperty(x,"VariablesAreInputTypesRule",{enumerable:!0,get:function(){return mt.VariablesAreInputTypesRule}});Object.defineProperty(x,"VariablesInAllowedPositionRule",{enumerable:!0,get:function(){return mt.VariablesInAllowedPositionRule}});Object.defineProperty(x,"__Directive",{enumerable:!0,get:function(){return Ie.__Directive}});Object.defineProperty(x,"__DirectiveLocation",{enumerable:!0,get:function(){return Ie.__DirectiveLocation}});Object.defineProperty(x,"__EnumValue",{enumerable:!0,get:function(){return Ie.__EnumValue}});Object.defineProperty(x,"__Field",{enumerable:!0,get:function(){return Ie.__Field}});Object.defineProperty(x,"__InputValue",{enumerable:!0,get:function(){return Ie.__InputValue}});Object.defineProperty(x,"__Schema",{enumerable:!0,get:function(){return Ie.__Schema}});Object.defineProperty(x,"__Type",{enumerable:!0,get:function(){return Ie.__Type}});Object.defineProperty(x,"__TypeKind",{enumerable:!0,get:function(){return Ie.__TypeKind}});Object.defineProperty(x,"assertAbstractType",{enumerable:!0,get:function(){return Ie.assertAbstractType}});Object.defineProperty(x,"assertCompositeType",{enumerable:!0,get:function(){return Ie.assertCompositeType}});Object.defineProperty(x,"assertDirective",{enumerable:!0,get:function(){return Ie.assertDirective}});Object.defineProperty(x,"assertEnumType",{enumerable:!0,get:function(){return Ie.assertEnumType}});Object.defineProperty(x,"assertEnumValueName",{enumerable:!0,get:function(){return Ie.assertEnumValueName}});Object.defineProperty(x,"assertInputObjectType",{enumerable:!0,get:function(){return Ie.assertInputObjectType}});Object.defineProperty(x,"assertInputType",{enumerable:!0,get:function(){return Ie.assertInputType}});Object.defineProperty(x,"assertInterfaceType",{enumerable:!0,get:function(){return Ie.assertInterfaceType}});Object.defineProperty(x,"assertLeafType",{enumerable:!0,get:function(){return Ie.assertLeafType}});Object.defineProperty(x,"assertListType",{enumerable:!0,get:function(){return Ie.assertListType}});Object.defineProperty(x,"assertName",{enumerable:!0,get:function(){return Ie.assertName}});Object.defineProperty(x,"assertNamedType",{enumerable:!0,get:function(){return Ie.assertNamedType}});Object.defineProperty(x,"assertNonNullType",{enumerable:!0,get:function(){return Ie.assertNonNullType}});Object.defineProperty(x,"assertNullableType",{enumerable:!0,get:function(){return Ie.assertNullableType}});Object.defineProperty(x,"assertObjectType",{enumerable:!0,get:function(){return Ie.assertObjectType}});Object.defineProperty(x,"assertOutputType",{enumerable:!0,get:function(){return Ie.assertOutputType}});Object.defineProperty(x,"assertScalarType",{enumerable:!0,get:function(){return Ie.assertScalarType}});Object.defineProperty(x,"assertSchema",{enumerable:!0,get:function(){return Ie.assertSchema}});Object.defineProperty(x,"assertType",{enumerable:!0,get:function(){return Ie.assertType}});Object.defineProperty(x,"assertUnionType",{enumerable:!0,get:function(){return Ie.assertUnionType}});Object.defineProperty(x,"assertValidName",{enumerable:!0,get:function(){return Kt.assertValidName}});Object.defineProperty(x,"assertValidSchema",{enumerable:!0,get:function(){return Ie.assertValidSchema}});Object.defineProperty(x,"assertWrappingType",{enumerable:!0,get:function(){return Ie.assertWrappingType}});Object.defineProperty(x,"astFromValue",{enumerable:!0,get:function(){return Kt.astFromValue}});Object.defineProperty(x,"buildASTSchema",{enumerable:!0,get:function(){return Kt.buildASTSchema}});Object.defineProperty(x,"buildClientSchema",{enumerable:!0,get:function(){return Kt.buildClientSchema}});Object.defineProperty(x,"buildSchema",{enumerable:!0,get:function(){return Kt.buildSchema}});Object.defineProperty(x,"coerceInputValue",{enumerable:!0,get:function(){return Kt.coerceInputValue}});Object.defineProperty(x,"concatAST",{enumerable:!0,get:function(){return Kt.concatAST}});Object.defineProperty(x,"createSourceEventStream",{enumerable:!0,get:function(){return Ba.createSourceEventStream}});Object.defineProperty(x,"defaultFieldResolver",{enumerable:!0,get:function(){return Ba.defaultFieldResolver}});Object.defineProperty(x,"defaultTypeResolver",{enumerable:!0,get:function(){return Ba.defaultTypeResolver}});Object.defineProperty(x,"doTypesOverlap",{enumerable:!0,get:function(){return Kt.doTypesOverlap}});Object.defineProperty(x,"execute",{enumerable:!0,get:function(){return Ba.execute}});Object.defineProperty(x,"executeSync",{enumerable:!0,get:function(){return Ba.executeSync}});Object.defineProperty(x,"extendSchema",{enumerable:!0,get:function(){return Kt.extendSchema}});Object.defineProperty(x,"findBreakingChanges",{enumerable:!0,get:function(){return Kt.findBreakingChanges}});Object.defineProperty(x,"findDangerousChanges",{enumerable:!0,get:function(){return Kt.findDangerousChanges}});Object.defineProperty(x,"formatError",{enumerable:!0,get:function(){return Zd.formatError}});Object.defineProperty(x,"getArgumentValues",{enumerable:!0,get:function(){return Ba.getArgumentValues}});Object.defineProperty(x,"getDirectiveValues",{enumerable:!0,get:function(){return Ba.getDirectiveValues}});Object.defineProperty(x,"getEnterLeaveForKind",{enumerable:!0,get:function(){return jt.getEnterLeaveForKind}});Object.defineProperty(x,"getIntrospectionQuery",{enumerable:!0,get:function(){return Kt.getIntrospectionQuery}});Object.defineProperty(x,"getLocation",{enumerable:!0,get:function(){return jt.getLocation}});Object.defineProperty(x,"getNamedType",{enumerable:!0,get:function(){return Ie.getNamedType}});Object.defineProperty(x,"getNullableType",{enumerable:!0,get:function(){return Ie.getNullableType}});Object.defineProperty(x,"getOperationAST",{enumerable:!0,get:function(){return Kt.getOperationAST}});Object.defineProperty(x,"getOperationRootType",{enumerable:!0,get:function(){return Kt.getOperationRootType}});Object.defineProperty(x,"getVariableValues",{enumerable:!0,get:function(){return Ba.getVariableValues}});Object.defineProperty(x,"getVisitFn",{enumerable:!0,get:function(){return jt.getVisitFn}});Object.defineProperty(x,"graphql",{enumerable:!0,get:function(){return FL.graphql}});Object.defineProperty(x,"graphqlSync",{enumerable:!0,get:function(){return FL.graphqlSync}});Object.defineProperty(x,"introspectionFromSchema",{enumerable:!0,get:function(){return Kt.introspectionFromSchema}});Object.defineProperty(x,"introspectionTypes",{enumerable:!0,get:function(){return Ie.introspectionTypes}});Object.defineProperty(x,"isAbstractType",{enumerable:!0,get:function(){return Ie.isAbstractType}});Object.defineProperty(x,"isCompositeType",{enumerable:!0,get:function(){return Ie.isCompositeType}});Object.defineProperty(x,"isConstValueNode",{enumerable:!0,get:function(){return jt.isConstValueNode}});Object.defineProperty(x,"isDefinitionNode",{enumerable:!0,get:function(){return jt.isDefinitionNode}});Object.defineProperty(x,"isDirective",{enumerable:!0,get:function(){return Ie.isDirective}});Object.defineProperty(x,"isEnumType",{enumerable:!0,get:function(){return Ie.isEnumType}});Object.defineProperty(x,"isEqualType",{enumerable:!0,get:function(){return Kt.isEqualType}});Object.defineProperty(x,"isExecutableDefinitionNode",{enumerable:!0,get:function(){return jt.isExecutableDefinitionNode}});Object.defineProperty(x,"isInputObjectType",{enumerable:!0,get:function(){return Ie.isInputObjectType}});Object.defineProperty(x,"isInputType",{enumerable:!0,get:function(){return Ie.isInputType}});Object.defineProperty(x,"isInterfaceType",{enumerable:!0,get:function(){return Ie.isInterfaceType}});Object.defineProperty(x,"isIntrospectionType",{enumerable:!0,get:function(){return Ie.isIntrospectionType}});Object.defineProperty(x,"isLeafType",{enumerable:!0,get:function(){return Ie.isLeafType}});Object.defineProperty(x,"isListType",{enumerable:!0,get:function(){return Ie.isListType}});Object.defineProperty(x,"isNamedType",{enumerable:!0,get:function(){return Ie.isNamedType}});Object.defineProperty(x,"isNonNullType",{enumerable:!0,get:function(){return Ie.isNonNullType}});Object.defineProperty(x,"isNullableType",{enumerable:!0,get:function(){return Ie.isNullableType}});Object.defineProperty(x,"isObjectType",{enumerable:!0,get:function(){return Ie.isObjectType}});Object.defineProperty(x,"isOutputType",{enumerable:!0,get:function(){return Ie.isOutputType}});Object.defineProperty(x,"isRequiredArgument",{enumerable:!0,get:function(){return Ie.isRequiredArgument}});Object.defineProperty(x,"isRequiredInputField",{enumerable:!0,get:function(){return Ie.isRequiredInputField}});Object.defineProperty(x,"isScalarType",{enumerable:!0,get:function(){return Ie.isScalarType}});Object.defineProperty(x,"isSchema",{enumerable:!0,get:function(){return Ie.isSchema}});Object.defineProperty(x,"isSelectionNode",{enumerable:!0,get:function(){return jt.isSelectionNode}});Object.defineProperty(x,"isSpecifiedDirective",{enumerable:!0,get:function(){return Ie.isSpecifiedDirective}});Object.defineProperty(x,"isSpecifiedScalarType",{enumerable:!0,get:function(){return Ie.isSpecifiedScalarType}});Object.defineProperty(x,"isType",{enumerable:!0,get:function(){return Ie.isType}});Object.defineProperty(x,"isTypeDefinitionNode",{enumerable:!0,get:function(){return jt.isTypeDefinitionNode}});Object.defineProperty(x,"isTypeExtensionNode",{enumerable:!0,get:function(){return jt.isTypeExtensionNode}});Object.defineProperty(x,"isTypeNode",{enumerable:!0,get:function(){return jt.isTypeNode}});Object.defineProperty(x,"isTypeSubTypeOf",{enumerable:!0,get:function(){return Kt.isTypeSubTypeOf}});Object.defineProperty(x,"isTypeSystemDefinitionNode",{enumerable:!0,get:function(){return jt.isTypeSystemDefinitionNode}});Object.defineProperty(x,"isTypeSystemExtensionNode",{enumerable:!0,get:function(){return jt.isTypeSystemExtensionNode}});Object.defineProperty(x,"isUnionType",{enumerable:!0,get:function(){return Ie.isUnionType}});Object.defineProperty(x,"isValidNameError",{enumerable:!0,get:function(){return Kt.isValidNameError}});Object.defineProperty(x,"isValueNode",{enumerable:!0,get:function(){return jt.isValueNode}});Object.defineProperty(x,"isWrappingType",{enumerable:!0,get:function(){return Ie.isWrappingType}});Object.defineProperty(x,"lexicographicSortSchema",{enumerable:!0,get:function(){return Kt.lexicographicSortSchema}});Object.defineProperty(x,"locatedError",{enumerable:!0,get:function(){return Zd.locatedError}});Object.defineProperty(x,"parse",{enumerable:!0,get:function(){return jt.parse}});Object.defineProperty(x,"parseConstValue",{enumerable:!0,get:function(){return jt.parseConstValue}});Object.defineProperty(x,"parseType",{enumerable:!0,get:function(){return jt.parseType}});Object.defineProperty(x,"parseValue",{enumerable:!0,get:function(){return jt.parseValue}});Object.defineProperty(x,"print",{enumerable:!0,get:function(){return jt.print}});Object.defineProperty(x,"printError",{enumerable:!0,get:function(){return Zd.printError}});Object.defineProperty(x,"printIntrospectionSchema",{enumerable:!0,get:function(){return Kt.printIntrospectionSchema}});Object.defineProperty(x,"printLocation",{enumerable:!0,get:function(){return jt.printLocation}});Object.defineProperty(x,"printSchema",{enumerable:!0,get:function(){return Kt.printSchema}});Object.defineProperty(x,"printSourceLocation",{enumerable:!0,get:function(){return jt.printSourceLocation}});Object.defineProperty(x,"printType",{enumerable:!0,get:function(){return Kt.printType}});Object.defineProperty(x,"recommendedRules",{enumerable:!0,get:function(){return mt.recommendedRules}});Object.defineProperty(x,"resolveObjMapThunk",{enumerable:!0,get:function(){return Ie.resolveObjMapThunk}});Object.defineProperty(x,"resolveReadonlyArrayThunk",{enumerable:!0,get:function(){return Ie.resolveReadonlyArrayThunk}});Object.defineProperty(x,"responsePathAsArray",{enumerable:!0,get:function(){return Ba.responsePathAsArray}});Object.defineProperty(x,"separateOperations",{enumerable:!0,get:function(){return Kt.separateOperations}});Object.defineProperty(x,"specifiedDirectives",{enumerable:!0,get:function(){return Ie.specifiedDirectives}});Object.defineProperty(x,"specifiedRules",{enumerable:!0,get:function(){return mt.specifiedRules}});Object.defineProperty(x,"specifiedScalarTypes",{enumerable:!0,get:function(){return Ie.specifiedScalarTypes}});Object.defineProperty(x,"stripIgnoredCharacters",{enumerable:!0,get:function(){return Kt.stripIgnoredCharacters}});Object.defineProperty(x,"subscribe",{enumerable:!0,get:function(){return Ba.subscribe}});Object.defineProperty(x,"syntaxError",{enumerable:!0,get:function(){return Zd.syntaxError}});Object.defineProperty(x,"typeFromAST",{enumerable:!0,get:function(){return Kt.typeFromAST}});Object.defineProperty(x,"validate",{enumerable:!0,get:function(){return mt.validate}});Object.defineProperty(x,"validateSchema",{enumerable:!0,get:function(){return Ie.validateSchema}});Object.defineProperty(x,"valueFromAST",{enumerable:!0,get:function(){return Kt.valueFromAST}});Object.defineProperty(x,"valueFromASTUntyped",{enumerable:!0,get:function(){return Kt.valueFromASTUntyped}});Object.defineProperty(x,"version",{enumerable:!0,get:function(){return RL.version}});Object.defineProperty(x,"versionInfo",{enumerable:!0,get:function(){return RL.versionInfo}});Object.defineProperty(x,"visit",{enumerable:!0,get:function(){return jt.visit}});Object.defineProperty(x,"visitInParallel",{enumerable:!0,get:function(){return jt.visitInParallel}});Object.defineProperty(x,"visitWithTypeInfo",{enumerable:!0,get:function(){return Kt.visitWithTypeInfo}});var RL=SR(),FL=Ew(),Ie=gw(),jt=vw(),Ba=Pw(),mt=Bw(),Zd=Uw(),Kt=AL()});var lr=P(w=>{"use strict";f();T();m();Object.defineProperty(w,"__esModule",{value:!0});w.FRAGMENT_DEFINITION_UPPER=w.FOR=w.FLOAT_SCALAR=w.FIRST_ORDINAL=w.FIELD_DEFINITION_UPPER=w.FIELDS=w.FIELD_SET_SCALAR=w.FIELD_UPPER=w.FIELD_PATH=w.FIELD=w.EXTENSIONS=w.EXTENDS=w.EXTERNAL=w.EXECUTION=w.ENUM_VALUE_UPPER=w.ENUM_VALUE=w.ENUM_UPPER=w.ENUM=w.ENTITY_UNION=w.ENTITIES_FIELD=w.ENTITIES=w.EDFS_NATS_STREAM_CONFIGURATION=w.EDFS_PUBLISH_RESULT=w.EDFS_NATS_SUBSCRIBE=w.EDFS_NATS_REQUEST=w.EDFS_NATS_PUBLISH=w.EDFS_KAFKA_SUBSCRIBE=w.EDFS_KAFKA_PUBLISH=w.DIRECTIVE_DEFINITION=w.DESCRIPTION_OVERRIDE=w.DEPRECATED_DEFAULT_ARGUMENT_VALUE=w.DEPRECATED=w.DEFAULT_SUBSCRIPTION=w.DEFAULT_QUERY=w.DEFAULT_MUTATION=w.DEFAULT_EDFS_PROVIDER_ID=w.DEFAULT=w.CONSUMER_NAME=w.CONFIGURE_CHILD_DESCRIPTIONS=w.CONFIGURE_DESCRIPTION=w.CONDITION=w.COMPOSE_DIRECTIVE=w.BOOLEAN_SCALAR=w.BOOLEAN=w.ARGUMENT_DEFINITION_UPPER=w.AUTHENTICATED=w.ARGUMENT=w.ANY_SCALAR=w.AND_UPPER=w.AS=void 0;w.PROVIDER_ID=w.PERIOD=w.PARENT_EXTENSION_DATA_MAP=w.PARENT_DEFINITION_DATA_MAP=w.PARENT_DEFINITION_DATA=w.OVERRIDE=w.OR_UPPER=w.OBJECT_UPPER=w.OBJECT=w.OPERATION_TO_DEFAULT=w.NULL=w.NOT_UPPER=w.NON_NULLABLE_STRING=w.NON_NULLABLE_INT=w.NON_NULLABLE_BOOLEAN=w.NON_NULLABLE_EDFS_PUBLISH_EVENT_RESULT=w.NAME=w.NOT_APPLICABLE=w.PROVIDER_TYPE_NATS=w.PROVIDER_TYPE_KAFKA=w.PROPAGATE=w.MUTATION_UPPER=w.MUTATION=w.NUMBER=w.LITERAL_NEW_LINE=w.LITERAL_SPACE=w.LIST=w.LINK_PURPOSE=w.LINK_IMPORT=w.LINK=w.LEFT_PARENTHESIS=w.KEY=w.INTERFACE_OBJECT=w.INTERFACE_UPPER=w.INTERFACE=w.INT_SCALAR=w.INPUT_VALUE=w.INPUT_OBJECT_UPPER=w.INPUT_OBJECT=w.INPUT_FIELD_DEFINITION_UPPER=w.INPUT_FIELD=w.INLINE_FRAGMENT_UPPER=w.INLINE_FRAGMENT=w.INACCESSIBLE=w.IN_UPPER=w.IMPORT=w.ID_SCALAR=w.HYPHEN_JOIN=w.FROM=w.FRAGMENT_SPREAD_UPPER=void 0;w.INHERITABLE_DIRECTIVE_NAMES=w.PERSISTED_CLIENT_DIRECTIVES=w.AUTHORIZATION_DIRECTIVES=w.ROOT_TYPE_NAMES=w.EXECUTABLE_DIRECTIVE_LOCATIONS=w.VARIABLE_DEFINITION_UPPER=w.VALUES=w.URL_LOWER=w.UNION_UPPER=w.UNION=w.TOPICS=w.TOPIC=w.TAG=w.SUCCESS=w.SUBSCRIPTION_UPPER=w.SUBSCRIBE=w.SUBSCRIPTION_FILTER_VALUE=w.SUBSCRIPTION_FILTER_CONDITION=w.SUBSCRIPTION_FILTER=w.SUBSCRIPTION_FIELD_CONDITION=w.SUBSCRIPTION=w.SUBJECTS=w.SUBJECT=w.STRING_SCALAR=w.STRING=w.STREAM_NAME=w.CONSUMER_INACTIVE_THRESHOLD=w.STREAM_CONFIGURATION=w.SPECIFIED_BY=w.SHAREABLE=w.SERVICE_FIELD=w.SERVICE_OBJECT=w.SELECTION_REPRESENTATION=w.SECURITY=w.SCOPE_SCALAR=w.SCOPES=w.SCHEMA_UPPER=w.SCHEMA=w.SCALAR_UPPER=w.SCALAR=w.RESOLVABLE=w.REQUIRES_SCOPES=w.REQUIRES=w.REQUEST=w.REASON=w.QUOTATION_JOIN=w.QUERY_UPPER=w.QUERY=w.PUBLISH=w.PROVIDES=void 0;w.IGNORED_FIELDS=void 0;w.AS="as";w.AND_UPPER="AND";w.ANY_SCALAR="_Any";w.ARGUMENT="argument";w.AUTHENTICATED="authenticated";w.ARGUMENT_DEFINITION_UPPER="ARGUMENT_DEFINITION";w.BOOLEAN="boolean";w.BOOLEAN_SCALAR="Boolean";w.COMPOSE_DIRECTIVE="composeDirective";w.CONDITION="condition";w.CONFIGURE_DESCRIPTION="openfed__configureDescription";w.CONFIGURE_CHILD_DESCRIPTIONS="openfed__configureChildDescriptions";w.CONSUMER_NAME="consumerName";w.DEFAULT="default";w.DEFAULT_EDFS_PROVIDER_ID="default";w.DEFAULT_MUTATION="Mutation";w.DEFAULT_QUERY="Query";w.DEFAULT_SUBSCRIPTION="Subscription";w.DEPRECATED="deprecated";w.DEPRECATED_DEFAULT_ARGUMENT_VALUE="No longer supported";w.DESCRIPTION_OVERRIDE="descriptionOverride";w.DIRECTIVE_DEFINITION="directive definition";w.EDFS_KAFKA_PUBLISH="edfs__kafkaPublish";w.EDFS_KAFKA_SUBSCRIBE="edfs__kafkaSubscribe";w.EDFS_NATS_PUBLISH="edfs__natsPublish";w.EDFS_NATS_REQUEST="edfs__natsRequest";w.EDFS_NATS_SUBSCRIBE="edfs__natsSubscribe";w.EDFS_PUBLISH_RESULT="edfs__PublishResult";w.EDFS_NATS_STREAM_CONFIGURATION="edfs__NatsStreamConfiguration";w.ENTITIES="entities";w.ENTITIES_FIELD="_entities";w.ENTITY_UNION="_Entity";w.ENUM="Enum";w.ENUM_UPPER="ENUM";w.ENUM_VALUE="Enum Value";w.ENUM_VALUE_UPPER="ENUM_VALUE";w.EXECUTION="EXECUTION";w.EXTERNAL="external";w.EXTENDS="extends";w.EXTENSIONS="extensions";w.FIELD="Field";w.FIELD_PATH="fieldPath";w.FIELD_UPPER="FIELD";w.FIELD_SET_SCALAR="openfed__FieldSet";w.FIELDS="fields";w.FIELD_DEFINITION_UPPER="FIELD_DEFINITION";w.FIRST_ORDINAL="1st";w.FLOAT_SCALAR="Float";w.FOR="for";w.FRAGMENT_DEFINITION_UPPER="FRAGMENT_DEFINITION";w.FRAGMENT_SPREAD_UPPER="FRAGMENT_SPREAD";w.FROM="from";w.HYPHEN_JOIN=` - -`;w.ID_SCALAR="ID";w.IMPORT="import";w.IN_UPPER="IN";w.INACCESSIBLE="inaccessible";w.INLINE_FRAGMENT="inlineFragment";w.INLINE_FRAGMENT_UPPER="INLINE_FRAGMENT";w.INPUT_FIELD="Input field";w.INPUT_FIELD_DEFINITION_UPPER="INPUT_FIELD_DEFINITION";w.INPUT_OBJECT="Input Object";w.INPUT_OBJECT_UPPER="INPUT_OBJECT";w.INPUT_VALUE="Input Value";w.INT_SCALAR="Int";w.INTERFACE="Interface";w.INTERFACE_UPPER="INTERFACE";w.INTERFACE_OBJECT="interfaceObject";w.KEY="key";w.LEFT_PARENTHESIS="(";w.LINK="link";w.LINK_IMPORT="link__Import";w.LINK_PURPOSE="link__Purpose";w.LIST="list";w.LITERAL_SPACE=" ";w.LITERAL_NEW_LINE=` -`;w.NUMBER="number";w.MUTATION="Mutation";w.MUTATION_UPPER="MUTATION";w.PROPAGATE="propagate";w.PROVIDER_TYPE_KAFKA="kafka";w.PROVIDER_TYPE_NATS="nats";w.NOT_APPLICABLE="N/A";w.NAME="name";w.NON_NULLABLE_EDFS_PUBLISH_EVENT_RESULT="edfs__PublishResult!";w.NON_NULLABLE_BOOLEAN="Boolean!";w.NON_NULLABLE_INT="Int!";w.NON_NULLABLE_STRING="String!";w.NOT_UPPER="NOT";w.NULL="Null";w.OPERATION_TO_DEFAULT="operationTypeNodeToDefaultType";w.OBJECT="Object";w.OBJECT_UPPER="OBJECT";w.OR_UPPER="OR";w.OVERRIDE="override";w.PARENT_DEFINITION_DATA="parentDefinitionDataByTypeName";w.PARENT_DEFINITION_DATA_MAP="parentDefinitionDataByParentTypeName";w.PARENT_EXTENSION_DATA_MAP="parentExtensionDataByParentTypeName";w.PERIOD=".";w.PROVIDER_ID="providerId";w.PROVIDES="provides";w.PUBLISH="publish";w.QUERY="Query";w.QUERY_UPPER="QUERY";w.QUOTATION_JOIN='", "';w.REASON="reason";w.REQUEST="request";w.REQUIRES="requires";w.REQUIRES_SCOPES="requiresScopes";w.RESOLVABLE="resolvable";w.SCALAR="Scalar";w.SCALAR_UPPER="SCALAR";w.SCHEMA="schema";w.SCHEMA_UPPER="SCHEMA";w.SCOPES="scopes";w.SCOPE_SCALAR="openfed__Scope";w.SECURITY="SECURITY";w.SELECTION_REPRESENTATION=" { ... }";w.SERVICE_OBJECT="_Service";w.SERVICE_FIELD="_service";w.SHAREABLE="shareable";w.SPECIFIED_BY="specifiedBy";w.STREAM_CONFIGURATION="streamConfiguration";w.CONSUMER_INACTIVE_THRESHOLD="consumerInactiveThreshold";w.STREAM_NAME="streamName";w.STRING="string";w.STRING_SCALAR="String";w.SUBJECT="subject";w.SUBJECTS="subjects";w.SUBSCRIPTION="Subscription";w.SUBSCRIPTION_FIELD_CONDITION="openfed__SubscriptionFieldCondition";w.SUBSCRIPTION_FILTER="openfed__subscriptionFilter";w.SUBSCRIPTION_FILTER_CONDITION="openfed__SubscriptionFilterCondition";w.SUBSCRIPTION_FILTER_VALUE="openfed__SubscriptionFilterValue";w.SUBSCRIBE="subscribe";w.SUBSCRIPTION_UPPER="SUBSCRIPTION";w.SUCCESS="success";w.TAG="tag";w.TOPIC="topic";w.TOPICS="topics";w.UNION="Union";w.UNION_UPPER="UNION";w.URL_LOWER="url";w.VALUES="values";w.VARIABLE_DEFINITION_UPPER="VARIABLE_DEFINITION";w.EXECUTABLE_DIRECTIVE_LOCATIONS=new Set([w.FIELD_UPPER,w.FRAGMENT_DEFINITION_UPPER,w.FRAGMENT_SPREAD_UPPER,w.INLINE_FRAGMENT_UPPER,w.MUTATION_UPPER,w.QUERY_UPPER,w.SUBSCRIPTION_UPPER]);w.ROOT_TYPE_NAMES=new Set([w.MUTATION,w.QUERY,w.SUBSCRIPTION]);w.AUTHORIZATION_DIRECTIVES=new Set([w.AUTHENTICATED,w.REQUIRES_SCOPES]);w.PERSISTED_CLIENT_DIRECTIVES=new Set([w.DEPRECATED]);w.INHERITABLE_DIRECTIVE_NAMES=[w.EXTERNAL,w.SHAREABLE];w.IGNORED_FIELDS=new Set([w.ENTITIES_FIELD,w.SERVICE_FIELD])});var Jr=P(Qn=>{"use strict";f();T();m();Object.defineProperty(Qn,"__esModule",{value:!0});Qn.operationTypeNodeToDefaultType=void 0;Qn.isObjectLikeNodeEntity=IX;Qn.isNodeInterfaceObject=gX;Qn.stringToNameNode=pT;Qn.stringArrayToNameNodeArray=_X;Qn.setToNameNodeArray=vX;Qn.stringToNamedTypeNode=PL;Qn.setToNamedTypeNodeArray=SX;Qn.nodeKindToDirectiveLocation=OX;Qn.isKindAbstract=bX;Qn.extractExecutableDirectiveLocations=DX;Qn.formatDescription=AX;Qn.lexicographicallySortArgumentNodes=wL;Qn.lexicographicallySortSelectionSetNode=dT;Qn.lexicographicallySortDocumentNode=RX;Qn.parse=LL;Qn.safeParse=FX;var Ut=Ae(),vn=lr();function IX(e){var t;if(!((t=e.directives)!=null&&t.length))return!1;for(let n of e.directives)if(n.name.value===vn.KEY)return!0;return!1}function gX(e){var t;if(!((t=e.directives)!=null&&t.length))return!1;for(let n of e.directives)if(n.name.value===vn.INTERFACE_OBJECT)return!0;return!1}function pT(e){return{kind:Ut.Kind.NAME,value:e}}function _X(e){let t=[];for(let n of e)t.push(pT(n));return t}function vX(e){let t=[];for(let n of e)t.push(pT(n));return t}function PL(e){return{kind:Ut.Kind.NAMED_TYPE,name:pT(e)}}function SX(e){let t=[];for(let n of e)t.push(PL(n));return t}function OX(e){switch(e){case Ut.Kind.ARGUMENT:return vn.ARGUMENT_DEFINITION_UPPER;case Ut.Kind.ENUM_TYPE_DEFINITION:case Ut.Kind.ENUM_TYPE_EXTENSION:return vn.ENUM_UPPER;case Ut.Kind.ENUM_VALUE_DEFINITION:return vn.ENUM_VALUE_UPPER;case Ut.Kind.FIELD_DEFINITION:return vn.FIELD_DEFINITION_UPPER;case Ut.Kind.FRAGMENT_DEFINITION:return vn.FRAGMENT_DEFINITION_UPPER;case Ut.Kind.FRAGMENT_SPREAD:return vn.FRAGMENT_SPREAD_UPPER;case Ut.Kind.INLINE_FRAGMENT:return vn.INLINE_FRAGMENT_UPPER;case Ut.Kind.INPUT_VALUE_DEFINITION:return vn.INPUT_FIELD_DEFINITION_UPPER;case Ut.Kind.INPUT_OBJECT_TYPE_DEFINITION:case Ut.Kind.INPUT_OBJECT_TYPE_EXTENSION:return vn.INPUT_OBJECT_UPPER;case Ut.Kind.INTERFACE_TYPE_DEFINITION:case Ut.Kind.INTERFACE_TYPE_EXTENSION:return vn.INTERFACE_UPPER;case Ut.Kind.OBJECT_TYPE_DEFINITION:case Ut.Kind.OBJECT_TYPE_EXTENSION:return vn.OBJECT_UPPER;case Ut.Kind.SCALAR_TYPE_DEFINITION:case Ut.Kind.SCALAR_TYPE_EXTENSION:return vn.SCALAR_UPPER;case Ut.Kind.SCHEMA_DEFINITION:case Ut.Kind.SCHEMA_EXTENSION:return vn.SCHEMA_UPPER;case Ut.Kind.UNION_TYPE_DEFINITION:case Ut.Kind.UNION_TYPE_EXTENSION:return vn.UNION_UPPER;default:return e}}Qn.operationTypeNodeToDefaultType=new Map([[Ut.OperationTypeNode.MUTATION,vn.MUTATION],[Ut.OperationTypeNode.QUERY,vn.QUERY],[Ut.OperationTypeNode.SUBSCRIPTION,vn.SUBSCRIPTION]]);function bX(e){return e===Ut.Kind.INTERFACE_TYPE_DEFINITION||e===Ut.Kind.UNION_TYPE_DEFINITION}function DX(e,t){for(let n of e){let r=n.value;vn.EXECUTABLE_DIRECTIVE_LOCATIONS.has(r)&&t.add(r)}return t}function AX(e){if(!e)return e;let t=e.value;if(e.block){let n=t.split(` +`}});var lL=w(q_=>{"use strict";f();N();m();Object.defineProperty(q_,"__esModule",{value:!0});q_.concatAST=x5;var M5=Rt();function x5(e){let t=[];for(let n of e)t.push(...n.definitions);return{kind:M5.Kind.DOCUMENT,definitions:t}}});var fL=w(V_=>{"use strict";f();N();m();Object.defineProperty(V_,"__esModule",{value:!0});V_.separateOperations=V5;var cN=Rt(),q5=Fu();function V5(e){let t=[],n=Object.create(null);for(let i of e.definitions)switch(i.kind){case cN.Kind.OPERATION_DEFINITION:t.push(i);break;case cN.Kind.FRAGMENT_DEFINITION:n[i.name.value]=dL(i.selectionSet);break;default:}let r=Object.create(null);for(let i of t){let a=new Set;for(let c of dL(i.selectionSet))pL(a,n,c);let o=i.name?i.name.value:"";r[o]={kind:cN.Kind.DOCUMENT,definitions:e.definitions.filter(c=>c===i||c.kind===cN.Kind.FRAGMENT_DEFINITION&&a.has(c.name.value))}}return r}function pL(e,t,n){if(!e.has(n)){e.add(n);let r=t[n];if(r!==void 0)for(let i of r)pL(e,t,i)}}function dL(e){let t=[];return(0,q5.visit)(e,{FragmentSpread(n){t.push(n.name.value)}}),t}});var TL=w(K_=>{"use strict";f();N();m();Object.defineProperty(K_,"__esModule",{value:!0});K_.stripIgnoredCharacters=K5;var j5=ud(),mL=em(),NL=im(),j_=ld();function K5(e){let t=(0,NL.isSource)(e)?e:new NL.Source(e),n=t.body,r=new mL.Lexer(t),i="",a=!1;for(;r.advance().kind!==j_.TokenKind.EOF;){let o=r.token,c=o.kind,l=!(0,mL.isPunctuatorTokenKind)(o.kind);a&&(l||o.kind===j_.TokenKind.SPREAD)&&(i+=" ");let p=n.slice(o.start,o.end);c===j_.TokenKind.BLOCK_STRING?i+=(0,j5.printBlockString)(o.value,{minimize:!0}):i+=p,a=l}return i}});var hL=w(lN=>{"use strict";f();N();m();Object.defineProperty(lN,"__esModule",{value:!0});lN.assertValidName=Y5;lN.isValidNameError=EL;var G5=Cr(),$5=He(),Q5=hd();function Y5(e){let t=EL(e);if(t)throw t;return e}function EL(e){if(typeof e=="string"||(0,G5.devAssert)(!1,"Expected name to be a string."),e.startsWith("__"))return new $5.GraphQLError(`Name "${e}" must not begin with "__", which is reserved by GraphQL introspection.`);try{(0,Q5.assertName)(e)}catch(t){return t}}});var DL=w(Ca=>{"use strict";f();N();m();Object.defineProperty(Ca,"__esModule",{value:!0});Ca.DangerousChangeType=Ca.BreakingChangeType=void 0;Ca.findBreakingChanges=Z5;Ca.findDangerousChanges=eX;var J5=Yt(),SL=Ir(),yL=xo(),H5=li(),xt=Ft(),z5=Aa(),W5=Fd(),X5=QI(),Ln;Ca.BreakingChangeType=Ln;(function(e){e.TYPE_REMOVED="TYPE_REMOVED",e.TYPE_CHANGED_KIND="TYPE_CHANGED_KIND",e.TYPE_REMOVED_FROM_UNION="TYPE_REMOVED_FROM_UNION",e.VALUE_REMOVED_FROM_ENUM="VALUE_REMOVED_FROM_ENUM",e.REQUIRED_INPUT_FIELD_ADDED="REQUIRED_INPUT_FIELD_ADDED",e.IMPLEMENTED_INTERFACE_REMOVED="IMPLEMENTED_INTERFACE_REMOVED",e.FIELD_REMOVED="FIELD_REMOVED",e.FIELD_CHANGED_KIND="FIELD_CHANGED_KIND",e.REQUIRED_ARG_ADDED="REQUIRED_ARG_ADDED",e.ARG_REMOVED="ARG_REMOVED",e.ARG_CHANGED_KIND="ARG_CHANGED_KIND",e.DIRECTIVE_REMOVED="DIRECTIVE_REMOVED",e.DIRECTIVE_ARG_REMOVED="DIRECTIVE_ARG_REMOVED",e.REQUIRED_DIRECTIVE_ARG_ADDED="REQUIRED_DIRECTIVE_ARG_ADDED",e.DIRECTIVE_REPEATABLE_REMOVED="DIRECTIVE_REPEATABLE_REMOVED",e.DIRECTIVE_LOCATION_REMOVED="DIRECTIVE_LOCATION_REMOVED"})(Ln||(Ca.BreakingChangeType=Ln={}));var aa;Ca.DangerousChangeType=aa;(function(e){e.VALUE_ADDED_TO_ENUM="VALUE_ADDED_TO_ENUM",e.TYPE_ADDED_TO_UNION="TYPE_ADDED_TO_UNION",e.OPTIONAL_INPUT_FIELD_ADDED="OPTIONAL_INPUT_FIELD_ADDED",e.OPTIONAL_ARG_ADDED="OPTIONAL_ARG_ADDED",e.IMPLEMENTED_INTERFACE_ADDED="IMPLEMENTED_INTERFACE_ADDED",e.ARG_DEFAULT_VALUE_CHANGE="ARG_DEFAULT_VALUE_CHANGE"})(aa||(Ca.DangerousChangeType=aa={}));function Z5(e,t){return OL(e,t).filter(n=>n.type in Ln)}function eX(e,t){return OL(e,t).filter(n=>n.type in aa)}function OL(e,t){return[...nX(e,t),...tX(e,t)]}function tX(e,t){let n=[],r=Ts(e.getDirectives(),t.getDirectives());for(let i of r.removed)n.push({type:Ln.DIRECTIVE_REMOVED,description:`${i.name} was removed.`});for(let[i,a]of r.persisted){let o=Ts(i.args,a.args);for(let c of o.added)(0,xt.isRequiredArgument)(c)&&n.push({type:Ln.REQUIRED_DIRECTIVE_ARG_ADDED,description:`A required arg ${c.name} on directive ${i.name} was added.`});for(let c of o.removed)n.push({type:Ln.DIRECTIVE_ARG_REMOVED,description:`${c.name} was removed from ${i.name}.`});i.isRepeatable&&!a.isRepeatable&&n.push({type:Ln.DIRECTIVE_REPEATABLE_REMOVED,description:`Repeatable flag was removed from ${i.name}.`});for(let c of i.locations)a.locations.includes(c)||n.push({type:Ln.DIRECTIVE_LOCATION_REMOVED,description:`${c} was removed from ${i.name}.`})}return n}function nX(e,t){let n=[],r=Ts(Object.values(e.getTypeMap()),Object.values(t.getTypeMap()));for(let i of r.removed)n.push({type:Ln.TYPE_REMOVED,description:(0,z5.isSpecifiedScalarType)(i)?`Standard scalar ${i.name} was removed because it is not referenced anymore.`:`${i.name} was removed.`});for(let[i,a]of r.persisted)(0,xt.isEnumType)(i)&&(0,xt.isEnumType)(a)?n.push(...aX(i,a)):(0,xt.isUnionType)(i)&&(0,xt.isUnionType)(a)?n.push(...iX(i,a)):(0,xt.isInputObjectType)(i)&&(0,xt.isInputObjectType)(a)?n.push(...rX(i,a)):(0,xt.isObjectType)(i)&&(0,xt.isObjectType)(a)?n.push(...gL(i,a),...IL(i,a)):(0,xt.isInterfaceType)(i)&&(0,xt.isInterfaceType)(a)?n.push(...gL(i,a),...IL(i,a)):i.constructor!==a.constructor&&n.push({type:Ln.TYPE_CHANGED_KIND,description:`${i.name} changed from ${_L(i)} to ${_L(a)}.`});return n}function rX(e,t){let n=[],r=Ts(Object.values(e.getFields()),Object.values(t.getFields()));for(let i of r.added)(0,xt.isRequiredInputField)(i)?n.push({type:Ln.REQUIRED_INPUT_FIELD_ADDED,description:`A required field ${i.name} on input type ${e.name} was added.`}):n.push({type:aa.OPTIONAL_INPUT_FIELD_ADDED,description:`An optional field ${i.name} on input type ${e.name} was added.`});for(let i of r.removed)n.push({type:Ln.FIELD_REMOVED,description:`${e.name}.${i.name} was removed.`});for(let[i,a]of r.persisted)Zd(i.type,a.type)||n.push({type:Ln.FIELD_CHANGED_KIND,description:`${e.name}.${i.name} changed type from ${String(i.type)} to ${String(a.type)}.`});return n}function iX(e,t){let n=[],r=Ts(e.getTypes(),t.getTypes());for(let i of r.added)n.push({type:aa.TYPE_ADDED_TO_UNION,description:`${i.name} was added to union type ${e.name}.`});for(let i of r.removed)n.push({type:Ln.TYPE_REMOVED_FROM_UNION,description:`${i.name} was removed from union type ${e.name}.`});return n}function aX(e,t){let n=[],r=Ts(e.getValues(),t.getValues());for(let i of r.added)n.push({type:aa.VALUE_ADDED_TO_ENUM,description:`${i.name} was added to enum type ${e.name}.`});for(let i of r.removed)n.push({type:Ln.VALUE_REMOVED_FROM_ENUM,description:`${i.name} was removed from enum type ${e.name}.`});return n}function IL(e,t){let n=[],r=Ts(e.getInterfaces(),t.getInterfaces());for(let i of r.added)n.push({type:aa.IMPLEMENTED_INTERFACE_ADDED,description:`${i.name} added to interfaces implemented by ${e.name}.`});for(let i of r.removed)n.push({type:Ln.IMPLEMENTED_INTERFACE_REMOVED,description:`${e.name} no longer implements interface ${i.name}.`});return n}function gL(e,t){let n=[],r=Ts(Object.values(e.getFields()),Object.values(t.getFields()));for(let i of r.removed)n.push({type:Ln.FIELD_REMOVED,description:`${e.name}.${i.name} was removed.`});for(let[i,a]of r.persisted)n.push(...sX(e,i,a)),Xd(i.type,a.type)||n.push({type:Ln.FIELD_CHANGED_KIND,description:`${e.name}.${i.name} changed type from ${String(i.type)} to ${String(a.type)}.`});return n}function sX(e,t,n){let r=[],i=Ts(t.args,n.args);for(let a of i.removed)r.push({type:Ln.ARG_REMOVED,description:`${e.name}.${t.name} arg ${a.name} was removed.`});for(let[a,o]of i.persisted)if(!Zd(a.type,o.type))r.push({type:Ln.ARG_CHANGED_KIND,description:`${e.name}.${t.name} arg ${a.name} has changed type from ${String(a.type)} to ${String(o.type)}.`});else if(a.defaultValue!==void 0)if(o.defaultValue===void 0)r.push({type:aa.ARG_DEFAULT_VALUE_CHANGE,description:`${e.name}.${t.name} arg ${a.name} defaultValue was removed.`});else{let l=vL(a.defaultValue,a.type),p=vL(o.defaultValue,o.type);l!==p&&r.push({type:aa.ARG_DEFAULT_VALUE_CHANGE,description:`${e.name}.${t.name} arg ${a.name} has changed defaultValue from ${l} to ${p}.`})}for(let a of i.added)(0,xt.isRequiredArgument)(a)?r.push({type:Ln.REQUIRED_ARG_ADDED,description:`A required arg ${a.name} on ${e.name}.${t.name} was added.`}):r.push({type:aa.OPTIONAL_ARG_ADDED,description:`An optional arg ${a.name} on ${e.name}.${t.name} was added.`});return r}function Xd(e,t){return(0,xt.isListType)(e)?(0,xt.isListType)(t)&&Xd(e.ofType,t.ofType)||(0,xt.isNonNullType)(t)&&Xd(e,t.ofType):(0,xt.isNonNullType)(e)?(0,xt.isNonNullType)(t)&&Xd(e.ofType,t.ofType):(0,xt.isNamedType)(t)&&e.name===t.name||(0,xt.isNonNullType)(t)&&Xd(e,t.ofType)}function Zd(e,t){return(0,xt.isListType)(e)?(0,xt.isListType)(t)&&Zd(e.ofType,t.ofType):(0,xt.isNonNullType)(e)?(0,xt.isNonNullType)(t)&&Zd(e.ofType,t.ofType)||!(0,xt.isNonNullType)(t)&&Zd(e.ofType,t):(0,xt.isNamedType)(t)&&e.name===t.name}function _L(e){if((0,xt.isScalarType)(e))return"a Scalar type";if((0,xt.isObjectType)(e))return"an Object type";if((0,xt.isInterfaceType)(e))return"an Interface type";if((0,xt.isUnionType)(e))return"a Union type";if((0,xt.isEnumType)(e))return"an Enum type";if((0,xt.isInputObjectType)(e))return"an Input type";(0,SL.invariant)(!1,"Unexpected type: "+(0,J5.inspect)(e))}function vL(e,t){let n=(0,W5.astFromValue)(e,t);return n!=null||(0,SL.invariant)(!1),(0,H5.print)((0,X5.sortValueNode)(n))}function Ts(e,t){let n=[],r=[],i=[],a=(0,yL.keyMap)(e,({name:c})=>c),o=(0,yL.keyMap)(t,({name:c})=>c);for(let c of e){let l=o[c.name];l===void 0?r.push(c):i.push([c,l])}for(let c of t)a[c.name]===void 0&&n.push(c);return{added:n,persisted:i,removed:r}}});var FL=w(Bt=>{"use strict";f();N();m();Object.defineProperty(Bt,"__esModule",{value:!0});Object.defineProperty(Bt,"BreakingChangeType",{enumerable:!0,get:function(){return dN.BreakingChangeType}});Object.defineProperty(Bt,"DangerousChangeType",{enumerable:!0,get:function(){return dN.DangerousChangeType}});Object.defineProperty(Bt,"TypeInfo",{enumerable:!0,get:function(){return AL.TypeInfo}});Object.defineProperty(Bt,"assertValidName",{enumerable:!0,get:function(){return RL.assertValidName}});Object.defineProperty(Bt,"astFromValue",{enumerable:!0,get:function(){return EX.astFromValue}});Object.defineProperty(Bt,"buildASTSchema",{enumerable:!0,get:function(){return bL.buildASTSchema}});Object.defineProperty(Bt,"buildClientSchema",{enumerable:!0,get:function(){return dX.buildClientSchema}});Object.defineProperty(Bt,"buildSchema",{enumerable:!0,get:function(){return bL.buildSchema}});Object.defineProperty(Bt,"coerceInputValue",{enumerable:!0,get:function(){return hX.coerceInputValue}});Object.defineProperty(Bt,"concatAST",{enumerable:!0,get:function(){return yX.concatAST}});Object.defineProperty(Bt,"doTypesOverlap",{enumerable:!0,get:function(){return $_.doTypesOverlap}});Object.defineProperty(Bt,"extendSchema",{enumerable:!0,get:function(){return pX.extendSchema}});Object.defineProperty(Bt,"findBreakingChanges",{enumerable:!0,get:function(){return dN.findBreakingChanges}});Object.defineProperty(Bt,"findDangerousChanges",{enumerable:!0,get:function(){return dN.findDangerousChanges}});Object.defineProperty(Bt,"getIntrospectionQuery",{enumerable:!0,get:function(){return oX.getIntrospectionQuery}});Object.defineProperty(Bt,"getOperationAST",{enumerable:!0,get:function(){return uX.getOperationAST}});Object.defineProperty(Bt,"getOperationRootType",{enumerable:!0,get:function(){return cX.getOperationRootType}});Object.defineProperty(Bt,"introspectionFromSchema",{enumerable:!0,get:function(){return lX.introspectionFromSchema}});Object.defineProperty(Bt,"isEqualType",{enumerable:!0,get:function(){return $_.isEqualType}});Object.defineProperty(Bt,"isTypeSubTypeOf",{enumerable:!0,get:function(){return $_.isTypeSubTypeOf}});Object.defineProperty(Bt,"isValidNameError",{enumerable:!0,get:function(){return RL.isValidNameError}});Object.defineProperty(Bt,"lexicographicSortSchema",{enumerable:!0,get:function(){return fX.lexicographicSortSchema}});Object.defineProperty(Bt,"printIntrospectionSchema",{enumerable:!0,get:function(){return G_.printIntrospectionSchema}});Object.defineProperty(Bt,"printSchema",{enumerable:!0,get:function(){return G_.printSchema}});Object.defineProperty(Bt,"printType",{enumerable:!0,get:function(){return G_.printType}});Object.defineProperty(Bt,"separateOperations",{enumerable:!0,get:function(){return IX.separateOperations}});Object.defineProperty(Bt,"stripIgnoredCharacters",{enumerable:!0,get:function(){return gX.stripIgnoredCharacters}});Object.defineProperty(Bt,"typeFromAST",{enumerable:!0,get:function(){return mX.typeFromAST}});Object.defineProperty(Bt,"valueFromAST",{enumerable:!0,get:function(){return NX.valueFromAST}});Object.defineProperty(Bt,"valueFromASTUntyped",{enumerable:!0,get:function(){return TX.valueFromASTUntyped}});Object.defineProperty(Bt,"visitWithTypeInfo",{enumerable:!0,get:function(){return AL.visitWithTypeInfo}});var oX=D_(),uX=xw(),cX=qw(),lX=Vw(),dX=Kw(),bL=Zw(),pX=w_(),fX=nL(),G_=cL(),mX=Ra(),NX=qd(),TX=jy(),EX=Fd(),AL=wm(),hX=pg(),yX=lL(),IX=fL(),gX=TL(),$_=vd(),RL=hL(),dN=DL()});var Ae=w(V=>{"use strict";f();N();m();Object.defineProperty(V,"__esModule",{value:!0});Object.defineProperty(V,"BREAK",{enumerable:!0,get:function(){return Kt.BREAK}});Object.defineProperty(V,"BreakingChangeType",{enumerable:!0,get:function(){return Gt.BreakingChangeType}});Object.defineProperty(V,"DEFAULT_DEPRECATION_REASON",{enumerable:!0,get:function(){return Ie.DEFAULT_DEPRECATION_REASON}});Object.defineProperty(V,"DangerousChangeType",{enumerable:!0,get:function(){return Gt.DangerousChangeType}});Object.defineProperty(V,"DirectiveLocation",{enumerable:!0,get:function(){return Kt.DirectiveLocation}});Object.defineProperty(V,"ExecutableDefinitionsRule",{enumerable:!0,get:function(){return mt.ExecutableDefinitionsRule}});Object.defineProperty(V,"FieldsOnCorrectTypeRule",{enumerable:!0,get:function(){return mt.FieldsOnCorrectTypeRule}});Object.defineProperty(V,"FragmentsOnCompositeTypesRule",{enumerable:!0,get:function(){return mt.FragmentsOnCompositeTypesRule}});Object.defineProperty(V,"GRAPHQL_MAX_INT",{enumerable:!0,get:function(){return Ie.GRAPHQL_MAX_INT}});Object.defineProperty(V,"GRAPHQL_MIN_INT",{enumerable:!0,get:function(){return Ie.GRAPHQL_MIN_INT}});Object.defineProperty(V,"GraphQLBoolean",{enumerable:!0,get:function(){return Ie.GraphQLBoolean}});Object.defineProperty(V,"GraphQLDeprecatedDirective",{enumerable:!0,get:function(){return Ie.GraphQLDeprecatedDirective}});Object.defineProperty(V,"GraphQLDirective",{enumerable:!0,get:function(){return Ie.GraphQLDirective}});Object.defineProperty(V,"GraphQLEnumType",{enumerable:!0,get:function(){return Ie.GraphQLEnumType}});Object.defineProperty(V,"GraphQLError",{enumerable:!0,get:function(){return ep.GraphQLError}});Object.defineProperty(V,"GraphQLFloat",{enumerable:!0,get:function(){return Ie.GraphQLFloat}});Object.defineProperty(V,"GraphQLID",{enumerable:!0,get:function(){return Ie.GraphQLID}});Object.defineProperty(V,"GraphQLIncludeDirective",{enumerable:!0,get:function(){return Ie.GraphQLIncludeDirective}});Object.defineProperty(V,"GraphQLInputObjectType",{enumerable:!0,get:function(){return Ie.GraphQLInputObjectType}});Object.defineProperty(V,"GraphQLInt",{enumerable:!0,get:function(){return Ie.GraphQLInt}});Object.defineProperty(V,"GraphQLInterfaceType",{enumerable:!0,get:function(){return Ie.GraphQLInterfaceType}});Object.defineProperty(V,"GraphQLList",{enumerable:!0,get:function(){return Ie.GraphQLList}});Object.defineProperty(V,"GraphQLNonNull",{enumerable:!0,get:function(){return Ie.GraphQLNonNull}});Object.defineProperty(V,"GraphQLObjectType",{enumerable:!0,get:function(){return Ie.GraphQLObjectType}});Object.defineProperty(V,"GraphQLOneOfDirective",{enumerable:!0,get:function(){return Ie.GraphQLOneOfDirective}});Object.defineProperty(V,"GraphQLScalarType",{enumerable:!0,get:function(){return Ie.GraphQLScalarType}});Object.defineProperty(V,"GraphQLSchema",{enumerable:!0,get:function(){return Ie.GraphQLSchema}});Object.defineProperty(V,"GraphQLSkipDirective",{enumerable:!0,get:function(){return Ie.GraphQLSkipDirective}});Object.defineProperty(V,"GraphQLSpecifiedByDirective",{enumerable:!0,get:function(){return Ie.GraphQLSpecifiedByDirective}});Object.defineProperty(V,"GraphQLString",{enumerable:!0,get:function(){return Ie.GraphQLString}});Object.defineProperty(V,"GraphQLUnionType",{enumerable:!0,get:function(){return Ie.GraphQLUnionType}});Object.defineProperty(V,"Kind",{enumerable:!0,get:function(){return Kt.Kind}});Object.defineProperty(V,"KnownArgumentNamesRule",{enumerable:!0,get:function(){return mt.KnownArgumentNamesRule}});Object.defineProperty(V,"KnownDirectivesRule",{enumerable:!0,get:function(){return mt.KnownDirectivesRule}});Object.defineProperty(V,"KnownFragmentNamesRule",{enumerable:!0,get:function(){return mt.KnownFragmentNamesRule}});Object.defineProperty(V,"KnownTypeNamesRule",{enumerable:!0,get:function(){return mt.KnownTypeNamesRule}});Object.defineProperty(V,"Lexer",{enumerable:!0,get:function(){return Kt.Lexer}});Object.defineProperty(V,"Location",{enumerable:!0,get:function(){return Kt.Location}});Object.defineProperty(V,"LoneAnonymousOperationRule",{enumerable:!0,get:function(){return mt.LoneAnonymousOperationRule}});Object.defineProperty(V,"LoneSchemaDefinitionRule",{enumerable:!0,get:function(){return mt.LoneSchemaDefinitionRule}});Object.defineProperty(V,"MaxIntrospectionDepthRule",{enumerable:!0,get:function(){return mt.MaxIntrospectionDepthRule}});Object.defineProperty(V,"NoDeprecatedCustomRule",{enumerable:!0,get:function(){return mt.NoDeprecatedCustomRule}});Object.defineProperty(V,"NoFragmentCyclesRule",{enumerable:!0,get:function(){return mt.NoFragmentCyclesRule}});Object.defineProperty(V,"NoSchemaIntrospectionCustomRule",{enumerable:!0,get:function(){return mt.NoSchemaIntrospectionCustomRule}});Object.defineProperty(V,"NoUndefinedVariablesRule",{enumerable:!0,get:function(){return mt.NoUndefinedVariablesRule}});Object.defineProperty(V,"NoUnusedFragmentsRule",{enumerable:!0,get:function(){return mt.NoUnusedFragmentsRule}});Object.defineProperty(V,"NoUnusedVariablesRule",{enumerable:!0,get:function(){return mt.NoUnusedVariablesRule}});Object.defineProperty(V,"OperationTypeNode",{enumerable:!0,get:function(){return Kt.OperationTypeNode}});Object.defineProperty(V,"OverlappingFieldsCanBeMergedRule",{enumerable:!0,get:function(){return mt.OverlappingFieldsCanBeMergedRule}});Object.defineProperty(V,"PossibleFragmentSpreadsRule",{enumerable:!0,get:function(){return mt.PossibleFragmentSpreadsRule}});Object.defineProperty(V,"PossibleTypeExtensionsRule",{enumerable:!0,get:function(){return mt.PossibleTypeExtensionsRule}});Object.defineProperty(V,"ProvidedRequiredArgumentsRule",{enumerable:!0,get:function(){return mt.ProvidedRequiredArgumentsRule}});Object.defineProperty(V,"ScalarLeafsRule",{enumerable:!0,get:function(){return mt.ScalarLeafsRule}});Object.defineProperty(V,"SchemaMetaFieldDef",{enumerable:!0,get:function(){return Ie.SchemaMetaFieldDef}});Object.defineProperty(V,"SingleFieldSubscriptionsRule",{enumerable:!0,get:function(){return mt.SingleFieldSubscriptionsRule}});Object.defineProperty(V,"Source",{enumerable:!0,get:function(){return Kt.Source}});Object.defineProperty(V,"Token",{enumerable:!0,get:function(){return Kt.Token}});Object.defineProperty(V,"TokenKind",{enumerable:!0,get:function(){return Kt.TokenKind}});Object.defineProperty(V,"TypeInfo",{enumerable:!0,get:function(){return Gt.TypeInfo}});Object.defineProperty(V,"TypeKind",{enumerable:!0,get:function(){return Ie.TypeKind}});Object.defineProperty(V,"TypeMetaFieldDef",{enumerable:!0,get:function(){return Ie.TypeMetaFieldDef}});Object.defineProperty(V,"TypeNameMetaFieldDef",{enumerable:!0,get:function(){return Ie.TypeNameMetaFieldDef}});Object.defineProperty(V,"UniqueArgumentDefinitionNamesRule",{enumerable:!0,get:function(){return mt.UniqueArgumentDefinitionNamesRule}});Object.defineProperty(V,"UniqueArgumentNamesRule",{enumerable:!0,get:function(){return mt.UniqueArgumentNamesRule}});Object.defineProperty(V,"UniqueDirectiveNamesRule",{enumerable:!0,get:function(){return mt.UniqueDirectiveNamesRule}});Object.defineProperty(V,"UniqueDirectivesPerLocationRule",{enumerable:!0,get:function(){return mt.UniqueDirectivesPerLocationRule}});Object.defineProperty(V,"UniqueEnumValueNamesRule",{enumerable:!0,get:function(){return mt.UniqueEnumValueNamesRule}});Object.defineProperty(V,"UniqueFieldDefinitionNamesRule",{enumerable:!0,get:function(){return mt.UniqueFieldDefinitionNamesRule}});Object.defineProperty(V,"UniqueFragmentNamesRule",{enumerable:!0,get:function(){return mt.UniqueFragmentNamesRule}});Object.defineProperty(V,"UniqueInputFieldNamesRule",{enumerable:!0,get:function(){return mt.UniqueInputFieldNamesRule}});Object.defineProperty(V,"UniqueOperationNamesRule",{enumerable:!0,get:function(){return mt.UniqueOperationNamesRule}});Object.defineProperty(V,"UniqueOperationTypesRule",{enumerable:!0,get:function(){return mt.UniqueOperationTypesRule}});Object.defineProperty(V,"UniqueTypeNamesRule",{enumerable:!0,get:function(){return mt.UniqueTypeNamesRule}});Object.defineProperty(V,"UniqueVariableNamesRule",{enumerable:!0,get:function(){return mt.UniqueVariableNamesRule}});Object.defineProperty(V,"ValidationContext",{enumerable:!0,get:function(){return mt.ValidationContext}});Object.defineProperty(V,"ValuesOfCorrectTypeRule",{enumerable:!0,get:function(){return mt.ValuesOfCorrectTypeRule}});Object.defineProperty(V,"VariablesAreInputTypesRule",{enumerable:!0,get:function(){return mt.VariablesAreInputTypesRule}});Object.defineProperty(V,"VariablesInAllowedPositionRule",{enumerable:!0,get:function(){return mt.VariablesInAllowedPositionRule}});Object.defineProperty(V,"__Directive",{enumerable:!0,get:function(){return Ie.__Directive}});Object.defineProperty(V,"__DirectiveLocation",{enumerable:!0,get:function(){return Ie.__DirectiveLocation}});Object.defineProperty(V,"__EnumValue",{enumerable:!0,get:function(){return Ie.__EnumValue}});Object.defineProperty(V,"__Field",{enumerable:!0,get:function(){return Ie.__Field}});Object.defineProperty(V,"__InputValue",{enumerable:!0,get:function(){return Ie.__InputValue}});Object.defineProperty(V,"__Schema",{enumerable:!0,get:function(){return Ie.__Schema}});Object.defineProperty(V,"__Type",{enumerable:!0,get:function(){return Ie.__Type}});Object.defineProperty(V,"__TypeKind",{enumerable:!0,get:function(){return Ie.__TypeKind}});Object.defineProperty(V,"assertAbstractType",{enumerable:!0,get:function(){return Ie.assertAbstractType}});Object.defineProperty(V,"assertCompositeType",{enumerable:!0,get:function(){return Ie.assertCompositeType}});Object.defineProperty(V,"assertDirective",{enumerable:!0,get:function(){return Ie.assertDirective}});Object.defineProperty(V,"assertEnumType",{enumerable:!0,get:function(){return Ie.assertEnumType}});Object.defineProperty(V,"assertEnumValueName",{enumerable:!0,get:function(){return Ie.assertEnumValueName}});Object.defineProperty(V,"assertInputObjectType",{enumerable:!0,get:function(){return Ie.assertInputObjectType}});Object.defineProperty(V,"assertInputType",{enumerable:!0,get:function(){return Ie.assertInputType}});Object.defineProperty(V,"assertInterfaceType",{enumerable:!0,get:function(){return Ie.assertInterfaceType}});Object.defineProperty(V,"assertLeafType",{enumerable:!0,get:function(){return Ie.assertLeafType}});Object.defineProperty(V,"assertListType",{enumerable:!0,get:function(){return Ie.assertListType}});Object.defineProperty(V,"assertName",{enumerable:!0,get:function(){return Ie.assertName}});Object.defineProperty(V,"assertNamedType",{enumerable:!0,get:function(){return Ie.assertNamedType}});Object.defineProperty(V,"assertNonNullType",{enumerable:!0,get:function(){return Ie.assertNonNullType}});Object.defineProperty(V,"assertNullableType",{enumerable:!0,get:function(){return Ie.assertNullableType}});Object.defineProperty(V,"assertObjectType",{enumerable:!0,get:function(){return Ie.assertObjectType}});Object.defineProperty(V,"assertOutputType",{enumerable:!0,get:function(){return Ie.assertOutputType}});Object.defineProperty(V,"assertScalarType",{enumerable:!0,get:function(){return Ie.assertScalarType}});Object.defineProperty(V,"assertSchema",{enumerable:!0,get:function(){return Ie.assertSchema}});Object.defineProperty(V,"assertType",{enumerable:!0,get:function(){return Ie.assertType}});Object.defineProperty(V,"assertUnionType",{enumerable:!0,get:function(){return Ie.assertUnionType}});Object.defineProperty(V,"assertValidName",{enumerable:!0,get:function(){return Gt.assertValidName}});Object.defineProperty(V,"assertValidSchema",{enumerable:!0,get:function(){return Ie.assertValidSchema}});Object.defineProperty(V,"assertWrappingType",{enumerable:!0,get:function(){return Ie.assertWrappingType}});Object.defineProperty(V,"astFromValue",{enumerable:!0,get:function(){return Gt.astFromValue}});Object.defineProperty(V,"buildASTSchema",{enumerable:!0,get:function(){return Gt.buildASTSchema}});Object.defineProperty(V,"buildClientSchema",{enumerable:!0,get:function(){return Gt.buildClientSchema}});Object.defineProperty(V,"buildSchema",{enumerable:!0,get:function(){return Gt.buildSchema}});Object.defineProperty(V,"coerceInputValue",{enumerable:!0,get:function(){return Gt.coerceInputValue}});Object.defineProperty(V,"concatAST",{enumerable:!0,get:function(){return Gt.concatAST}});Object.defineProperty(V,"createSourceEventStream",{enumerable:!0,get:function(){return Ba.createSourceEventStream}});Object.defineProperty(V,"defaultFieldResolver",{enumerable:!0,get:function(){return Ba.defaultFieldResolver}});Object.defineProperty(V,"defaultTypeResolver",{enumerable:!0,get:function(){return Ba.defaultTypeResolver}});Object.defineProperty(V,"doTypesOverlap",{enumerable:!0,get:function(){return Gt.doTypesOverlap}});Object.defineProperty(V,"execute",{enumerable:!0,get:function(){return Ba.execute}});Object.defineProperty(V,"executeSync",{enumerable:!0,get:function(){return Ba.executeSync}});Object.defineProperty(V,"extendSchema",{enumerable:!0,get:function(){return Gt.extendSchema}});Object.defineProperty(V,"findBreakingChanges",{enumerable:!0,get:function(){return Gt.findBreakingChanges}});Object.defineProperty(V,"findDangerousChanges",{enumerable:!0,get:function(){return Gt.findDangerousChanges}});Object.defineProperty(V,"formatError",{enumerable:!0,get:function(){return ep.formatError}});Object.defineProperty(V,"getArgumentValues",{enumerable:!0,get:function(){return Ba.getArgumentValues}});Object.defineProperty(V,"getDirectiveValues",{enumerable:!0,get:function(){return Ba.getDirectiveValues}});Object.defineProperty(V,"getEnterLeaveForKind",{enumerable:!0,get:function(){return Kt.getEnterLeaveForKind}});Object.defineProperty(V,"getIntrospectionQuery",{enumerable:!0,get:function(){return Gt.getIntrospectionQuery}});Object.defineProperty(V,"getLocation",{enumerable:!0,get:function(){return Kt.getLocation}});Object.defineProperty(V,"getNamedType",{enumerable:!0,get:function(){return Ie.getNamedType}});Object.defineProperty(V,"getNullableType",{enumerable:!0,get:function(){return Ie.getNullableType}});Object.defineProperty(V,"getOperationAST",{enumerable:!0,get:function(){return Gt.getOperationAST}});Object.defineProperty(V,"getOperationRootType",{enumerable:!0,get:function(){return Gt.getOperationRootType}});Object.defineProperty(V,"getVariableValues",{enumerable:!0,get:function(){return Ba.getVariableValues}});Object.defineProperty(V,"getVisitFn",{enumerable:!0,get:function(){return Kt.getVisitFn}});Object.defineProperty(V,"graphql",{enumerable:!0,get:function(){return wL.graphql}});Object.defineProperty(V,"graphqlSync",{enumerable:!0,get:function(){return wL.graphqlSync}});Object.defineProperty(V,"introspectionFromSchema",{enumerable:!0,get:function(){return Gt.introspectionFromSchema}});Object.defineProperty(V,"introspectionTypes",{enumerable:!0,get:function(){return Ie.introspectionTypes}});Object.defineProperty(V,"isAbstractType",{enumerable:!0,get:function(){return Ie.isAbstractType}});Object.defineProperty(V,"isCompositeType",{enumerable:!0,get:function(){return Ie.isCompositeType}});Object.defineProperty(V,"isConstValueNode",{enumerable:!0,get:function(){return Kt.isConstValueNode}});Object.defineProperty(V,"isDefinitionNode",{enumerable:!0,get:function(){return Kt.isDefinitionNode}});Object.defineProperty(V,"isDirective",{enumerable:!0,get:function(){return Ie.isDirective}});Object.defineProperty(V,"isEnumType",{enumerable:!0,get:function(){return Ie.isEnumType}});Object.defineProperty(V,"isEqualType",{enumerable:!0,get:function(){return Gt.isEqualType}});Object.defineProperty(V,"isExecutableDefinitionNode",{enumerable:!0,get:function(){return Kt.isExecutableDefinitionNode}});Object.defineProperty(V,"isInputObjectType",{enumerable:!0,get:function(){return Ie.isInputObjectType}});Object.defineProperty(V,"isInputType",{enumerable:!0,get:function(){return Ie.isInputType}});Object.defineProperty(V,"isInterfaceType",{enumerable:!0,get:function(){return Ie.isInterfaceType}});Object.defineProperty(V,"isIntrospectionType",{enumerable:!0,get:function(){return Ie.isIntrospectionType}});Object.defineProperty(V,"isLeafType",{enumerable:!0,get:function(){return Ie.isLeafType}});Object.defineProperty(V,"isListType",{enumerable:!0,get:function(){return Ie.isListType}});Object.defineProperty(V,"isNamedType",{enumerable:!0,get:function(){return Ie.isNamedType}});Object.defineProperty(V,"isNonNullType",{enumerable:!0,get:function(){return Ie.isNonNullType}});Object.defineProperty(V,"isNullableType",{enumerable:!0,get:function(){return Ie.isNullableType}});Object.defineProperty(V,"isObjectType",{enumerable:!0,get:function(){return Ie.isObjectType}});Object.defineProperty(V,"isOutputType",{enumerable:!0,get:function(){return Ie.isOutputType}});Object.defineProperty(V,"isRequiredArgument",{enumerable:!0,get:function(){return Ie.isRequiredArgument}});Object.defineProperty(V,"isRequiredInputField",{enumerable:!0,get:function(){return Ie.isRequiredInputField}});Object.defineProperty(V,"isScalarType",{enumerable:!0,get:function(){return Ie.isScalarType}});Object.defineProperty(V,"isSchema",{enumerable:!0,get:function(){return Ie.isSchema}});Object.defineProperty(V,"isSelectionNode",{enumerable:!0,get:function(){return Kt.isSelectionNode}});Object.defineProperty(V,"isSpecifiedDirective",{enumerable:!0,get:function(){return Ie.isSpecifiedDirective}});Object.defineProperty(V,"isSpecifiedScalarType",{enumerable:!0,get:function(){return Ie.isSpecifiedScalarType}});Object.defineProperty(V,"isType",{enumerable:!0,get:function(){return Ie.isType}});Object.defineProperty(V,"isTypeDefinitionNode",{enumerable:!0,get:function(){return Kt.isTypeDefinitionNode}});Object.defineProperty(V,"isTypeExtensionNode",{enumerable:!0,get:function(){return Kt.isTypeExtensionNode}});Object.defineProperty(V,"isTypeNode",{enumerable:!0,get:function(){return Kt.isTypeNode}});Object.defineProperty(V,"isTypeSubTypeOf",{enumerable:!0,get:function(){return Gt.isTypeSubTypeOf}});Object.defineProperty(V,"isTypeSystemDefinitionNode",{enumerable:!0,get:function(){return Kt.isTypeSystemDefinitionNode}});Object.defineProperty(V,"isTypeSystemExtensionNode",{enumerable:!0,get:function(){return Kt.isTypeSystemExtensionNode}});Object.defineProperty(V,"isUnionType",{enumerable:!0,get:function(){return Ie.isUnionType}});Object.defineProperty(V,"isValidNameError",{enumerable:!0,get:function(){return Gt.isValidNameError}});Object.defineProperty(V,"isValueNode",{enumerable:!0,get:function(){return Kt.isValueNode}});Object.defineProperty(V,"isWrappingType",{enumerable:!0,get:function(){return Ie.isWrappingType}});Object.defineProperty(V,"lexicographicSortSchema",{enumerable:!0,get:function(){return Gt.lexicographicSortSchema}});Object.defineProperty(V,"locatedError",{enumerable:!0,get:function(){return ep.locatedError}});Object.defineProperty(V,"parse",{enumerable:!0,get:function(){return Kt.parse}});Object.defineProperty(V,"parseConstValue",{enumerable:!0,get:function(){return Kt.parseConstValue}});Object.defineProperty(V,"parseType",{enumerable:!0,get:function(){return Kt.parseType}});Object.defineProperty(V,"parseValue",{enumerable:!0,get:function(){return Kt.parseValue}});Object.defineProperty(V,"print",{enumerable:!0,get:function(){return Kt.print}});Object.defineProperty(V,"printError",{enumerable:!0,get:function(){return ep.printError}});Object.defineProperty(V,"printIntrospectionSchema",{enumerable:!0,get:function(){return Gt.printIntrospectionSchema}});Object.defineProperty(V,"printLocation",{enumerable:!0,get:function(){return Kt.printLocation}});Object.defineProperty(V,"printSchema",{enumerable:!0,get:function(){return Gt.printSchema}});Object.defineProperty(V,"printSourceLocation",{enumerable:!0,get:function(){return Kt.printSourceLocation}});Object.defineProperty(V,"printType",{enumerable:!0,get:function(){return Gt.printType}});Object.defineProperty(V,"recommendedRules",{enumerable:!0,get:function(){return mt.recommendedRules}});Object.defineProperty(V,"resolveObjMapThunk",{enumerable:!0,get:function(){return Ie.resolveObjMapThunk}});Object.defineProperty(V,"resolveReadonlyArrayThunk",{enumerable:!0,get:function(){return Ie.resolveReadonlyArrayThunk}});Object.defineProperty(V,"responsePathAsArray",{enumerable:!0,get:function(){return Ba.responsePathAsArray}});Object.defineProperty(V,"separateOperations",{enumerable:!0,get:function(){return Gt.separateOperations}});Object.defineProperty(V,"specifiedDirectives",{enumerable:!0,get:function(){return Ie.specifiedDirectives}});Object.defineProperty(V,"specifiedRules",{enumerable:!0,get:function(){return mt.specifiedRules}});Object.defineProperty(V,"specifiedScalarTypes",{enumerable:!0,get:function(){return Ie.specifiedScalarTypes}});Object.defineProperty(V,"stripIgnoredCharacters",{enumerable:!0,get:function(){return Gt.stripIgnoredCharacters}});Object.defineProperty(V,"subscribe",{enumerable:!0,get:function(){return Ba.subscribe}});Object.defineProperty(V,"syntaxError",{enumerable:!0,get:function(){return ep.syntaxError}});Object.defineProperty(V,"typeFromAST",{enumerable:!0,get:function(){return Gt.typeFromAST}});Object.defineProperty(V,"validate",{enumerable:!0,get:function(){return mt.validate}});Object.defineProperty(V,"validateSchema",{enumerable:!0,get:function(){return Ie.validateSchema}});Object.defineProperty(V,"valueFromAST",{enumerable:!0,get:function(){return Gt.valueFromAST}});Object.defineProperty(V,"valueFromASTUntyped",{enumerable:!0,get:function(){return Gt.valueFromASTUntyped}});Object.defineProperty(V,"version",{enumerable:!0,get:function(){return PL.version}});Object.defineProperty(V,"versionInfo",{enumerable:!0,get:function(){return PL.versionInfo}});Object.defineProperty(V,"visit",{enumerable:!0,get:function(){return Kt.visit}});Object.defineProperty(V,"visitInParallel",{enumerable:!0,get:function(){return Kt.visitInParallel}});Object.defineProperty(V,"visitWithTypeInfo",{enumerable:!0,get:function(){return Gt.visitWithTypeInfo}});var PL=DR(),wL=Iw(),Ie=vw(),Kt=Ow(),Ba=Lw(),mt=kw(),ep=Mw(),Gt=FL()});var lr=w(P=>{"use strict";f();N();m();Object.defineProperty(P,"__esModule",{value:!0});P.FLOAT_SCALAR=P.FIRST_ORDINAL=P.FIELD_DEFINITION_UPPER=P.FIELDS=P.FIELD_SET_SCALAR=P.FIELD_UPPER=P.FIELD_PATH=P.FIELD=P.EXTENSIONS=P.EXTENDS=P.EXTERNAL=P.EXECUTION=P.ENUM_VALUE_UPPER=P.ENUM_VALUE=P.ENUM_UPPER=P.ENUM=P.ENTITY_UNION=P.ENTITIES_FIELD=P.ENTITIES=P.EDFS_REDIS_SUBSCRIBE=P.EDFS_REDIS_PUBLISH=P.EDFS_NATS_STREAM_CONFIGURATION=P.EDFS_PUBLISH_RESULT=P.EDFS_NATS_SUBSCRIBE=P.EDFS_NATS_REQUEST=P.EDFS_NATS_PUBLISH=P.EDFS_KAFKA_SUBSCRIBE=P.EDFS_KAFKA_PUBLISH=P.DIRECTIVE_DEFINITION=P.DESCRIPTION_OVERRIDE=P.DEPRECATED_DEFAULT_ARGUMENT_VALUE=P.DEPRECATED=P.DEFAULT_SUBSCRIPTION=P.DEFAULT_QUERY=P.DEFAULT_MUTATION=P.DEFAULT_EDFS_PROVIDER_ID=P.DEFAULT=P.CONSUMER_NAME=P.CONFIGURE_CHILD_DESCRIPTIONS=P.CONFIGURE_DESCRIPTION=P.CONDITION=P.COMPOSE_DIRECTIVE=P.BOOLEAN_SCALAR=P.BOOLEAN=P.ARGUMENT_DEFINITION_UPPER=P.AUTHENTICATED=P.ARGUMENT=P.ANY_SCALAR=P.AND_UPPER=P.AS=void 0;P.PARENT_DEFINITION_DATA_MAP=P.PARENT_DEFINITION_DATA=P.OVERRIDE=P.OR_UPPER=P.OBJECT_UPPER=P.OBJECT=P.OPERATION_TO_DEFAULT=P.NULL=P.NOT_UPPER=P.NON_NULLABLE_STRING=P.NON_NULLABLE_INT=P.NON_NULLABLE_BOOLEAN=P.NON_NULLABLE_EDFS_PUBLISH_EVENT_RESULT=P.NAME=P.NOT_APPLICABLE=P.PROVIDER_TYPE_REDIS=P.PROVIDER_TYPE_NATS=P.PROVIDER_TYPE_KAFKA=P.PROPAGATE=P.MUTATION_UPPER=P.MUTATION=P.NUMBER=P.LITERAL_NEW_LINE=P.LITERAL_SPACE=P.LIST=P.LINK_PURPOSE=P.LINK_IMPORT=P.LINK=P.LEFT_PARENTHESIS=P.KEY=P.INTERFACE_OBJECT=P.INTERFACE_UPPER=P.INTERFACE=P.INT_SCALAR=P.INPUT_VALUE=P.INPUT_OBJECT_UPPER=P.INPUT_OBJECT=P.INPUT_FIELD_DEFINITION_UPPER=P.INPUT_FIELD=P.INLINE_FRAGMENT_UPPER=P.INLINE_FRAGMENT=P.INACCESSIBLE=P.IN_UPPER=P.IMPORT=P.ID_SCALAR=P.HYPHEN_JOIN=P.FROM=P.FRAGMENT_SPREAD_UPPER=P.FRAGMENT_DEFINITION_UPPER=P.FOR=void 0;P.CHANNELS=P.CHANNEL=P.VARIABLE_DEFINITION_UPPER=P.VALUES=P.URL_LOWER=P.UNION_UPPER=P.UNION=P.TOPICS=P.TOPIC=P.TAG=P.SUCCESS=P.SUBSCRIPTION_UPPER=P.SUBSCRIBE=P.SUBSCRIPTION_FILTER_VALUE=P.SUBSCRIPTION_FILTER_CONDITION=P.SUBSCRIPTION_FILTER=P.SUBSCRIPTION_FIELD_CONDITION=P.SUBSCRIPTION=P.SUBJECTS=P.SUBJECT=P.STRING_SCALAR=P.STRING=P.STREAM_NAME=P.CONSUMER_INACTIVE_THRESHOLD=P.STREAM_CONFIGURATION=P.SPECIFIED_BY=P.SHAREABLE=P.SERVICE_FIELD=P.SERVICE_OBJECT=P.SELECTION_REPRESENTATION=P.SECURITY=P.SCOPE_SCALAR=P.SCOPES=P.SCHEMA_UPPER=P.SCHEMA=P.SCALAR_UPPER=P.SCALAR=P.RESOLVABLE=P.REQUIRES_SCOPES=P.REQUIRES=P.REQUEST=P.REASON=P.QUOTATION_JOIN=P.QUERY_UPPER=P.QUERY=P.PUBLISH=P.PROVIDES=P.PROVIDER_ID=P.PERIOD=P.PARENT_EXTENSION_DATA_MAP=void 0;P.IGNORED_FIELDS=P.INHERITABLE_DIRECTIVE_NAMES=P.PERSISTED_CLIENT_DIRECTIVES=P.AUTHORIZATION_DIRECTIVES=P.ROOT_TYPE_NAMES=P.EXECUTABLE_DIRECTIVE_LOCATIONS=void 0;P.AS="as";P.AND_UPPER="AND";P.ANY_SCALAR="_Any";P.ARGUMENT="argument";P.AUTHENTICATED="authenticated";P.ARGUMENT_DEFINITION_UPPER="ARGUMENT_DEFINITION";P.BOOLEAN="boolean";P.BOOLEAN_SCALAR="Boolean";P.COMPOSE_DIRECTIVE="composeDirective";P.CONDITION="condition";P.CONFIGURE_DESCRIPTION="openfed__configureDescription";P.CONFIGURE_CHILD_DESCRIPTIONS="openfed__configureChildDescriptions";P.CONSUMER_NAME="consumerName";P.DEFAULT="default";P.DEFAULT_EDFS_PROVIDER_ID="default";P.DEFAULT_MUTATION="Mutation";P.DEFAULT_QUERY="Query";P.DEFAULT_SUBSCRIPTION="Subscription";P.DEPRECATED="deprecated";P.DEPRECATED_DEFAULT_ARGUMENT_VALUE="No longer supported";P.DESCRIPTION_OVERRIDE="descriptionOverride";P.DIRECTIVE_DEFINITION="directive definition";P.EDFS_KAFKA_PUBLISH="edfs__kafkaPublish";P.EDFS_KAFKA_SUBSCRIBE="edfs__kafkaSubscribe";P.EDFS_NATS_PUBLISH="edfs__natsPublish";P.EDFS_NATS_REQUEST="edfs__natsRequest";P.EDFS_NATS_SUBSCRIBE="edfs__natsSubscribe";P.EDFS_PUBLISH_RESULT="edfs__PublishResult";P.EDFS_NATS_STREAM_CONFIGURATION="edfs__NatsStreamConfiguration";P.EDFS_REDIS_PUBLISH="edfs__redisPublish";P.EDFS_REDIS_SUBSCRIBE="edfs__redisSubscribe";P.ENTITIES="entities";P.ENTITIES_FIELD="_entities";P.ENTITY_UNION="_Entity";P.ENUM="Enum";P.ENUM_UPPER="ENUM";P.ENUM_VALUE="Enum Value";P.ENUM_VALUE_UPPER="ENUM_VALUE";P.EXECUTION="EXECUTION";P.EXTERNAL="external";P.EXTENDS="extends";P.EXTENSIONS="extensions";P.FIELD="Field";P.FIELD_PATH="fieldPath";P.FIELD_UPPER="FIELD";P.FIELD_SET_SCALAR="openfed__FieldSet";P.FIELDS="fields";P.FIELD_DEFINITION_UPPER="FIELD_DEFINITION";P.FIRST_ORDINAL="1st";P.FLOAT_SCALAR="Float";P.FOR="for";P.FRAGMENT_DEFINITION_UPPER="FRAGMENT_DEFINITION";P.FRAGMENT_SPREAD_UPPER="FRAGMENT_SPREAD";P.FROM="from";P.HYPHEN_JOIN=` + -`;P.ID_SCALAR="ID";P.IMPORT="import";P.IN_UPPER="IN";P.INACCESSIBLE="inaccessible";P.INLINE_FRAGMENT="inlineFragment";P.INLINE_FRAGMENT_UPPER="INLINE_FRAGMENT";P.INPUT_FIELD="Input field";P.INPUT_FIELD_DEFINITION_UPPER="INPUT_FIELD_DEFINITION";P.INPUT_OBJECT="Input Object";P.INPUT_OBJECT_UPPER="INPUT_OBJECT";P.INPUT_VALUE="Input Value";P.INT_SCALAR="Int";P.INTERFACE="Interface";P.INTERFACE_UPPER="INTERFACE";P.INTERFACE_OBJECT="interfaceObject";P.KEY="key";P.LEFT_PARENTHESIS="(";P.LINK="link";P.LINK_IMPORT="link__Import";P.LINK_PURPOSE="link__Purpose";P.LIST="list";P.LITERAL_SPACE=" ";P.LITERAL_NEW_LINE=` +`;P.NUMBER="number";P.MUTATION="Mutation";P.MUTATION_UPPER="MUTATION";P.PROPAGATE="propagate";P.PROVIDER_TYPE_KAFKA="kafka";P.PROVIDER_TYPE_NATS="nats";P.PROVIDER_TYPE_REDIS="redis";P.NOT_APPLICABLE="N/A";P.NAME="name";P.NON_NULLABLE_EDFS_PUBLISH_EVENT_RESULT="edfs__PublishResult!";P.NON_NULLABLE_BOOLEAN="Boolean!";P.NON_NULLABLE_INT="Int!";P.NON_NULLABLE_STRING="String!";P.NOT_UPPER="NOT";P.NULL="Null";P.OPERATION_TO_DEFAULT="operationTypeNodeToDefaultType";P.OBJECT="Object";P.OBJECT_UPPER="OBJECT";P.OR_UPPER="OR";P.OVERRIDE="override";P.PARENT_DEFINITION_DATA="parentDefinitionDataByTypeName";P.PARENT_DEFINITION_DATA_MAP="parentDefinitionDataByParentTypeName";P.PARENT_EXTENSION_DATA_MAP="parentExtensionDataByParentTypeName";P.PERIOD=".";P.PROVIDER_ID="providerId";P.PROVIDES="provides";P.PUBLISH="publish";P.QUERY="Query";P.QUERY_UPPER="QUERY";P.QUOTATION_JOIN='", "';P.REASON="reason";P.REQUEST="request";P.REQUIRES="requires";P.REQUIRES_SCOPES="requiresScopes";P.RESOLVABLE="resolvable";P.SCALAR="Scalar";P.SCALAR_UPPER="SCALAR";P.SCHEMA="schema";P.SCHEMA_UPPER="SCHEMA";P.SCOPES="scopes";P.SCOPE_SCALAR="openfed__Scope";P.SECURITY="SECURITY";P.SELECTION_REPRESENTATION=" { ... }";P.SERVICE_OBJECT="_Service";P.SERVICE_FIELD="_service";P.SHAREABLE="shareable";P.SPECIFIED_BY="specifiedBy";P.STREAM_CONFIGURATION="streamConfiguration";P.CONSUMER_INACTIVE_THRESHOLD="consumerInactiveThreshold";P.STREAM_NAME="streamName";P.STRING="string";P.STRING_SCALAR="String";P.SUBJECT="subject";P.SUBJECTS="subjects";P.SUBSCRIPTION="Subscription";P.SUBSCRIPTION_FIELD_CONDITION="openfed__SubscriptionFieldCondition";P.SUBSCRIPTION_FILTER="openfed__subscriptionFilter";P.SUBSCRIPTION_FILTER_CONDITION="openfed__SubscriptionFilterCondition";P.SUBSCRIPTION_FILTER_VALUE="openfed__SubscriptionFilterValue";P.SUBSCRIBE="subscribe";P.SUBSCRIPTION_UPPER="SUBSCRIPTION";P.SUCCESS="success";P.TAG="tag";P.TOPIC="topic";P.TOPICS="topics";P.UNION="Union";P.UNION_UPPER="UNION";P.URL_LOWER="url";P.VALUES="values";P.VARIABLE_DEFINITION_UPPER="VARIABLE_DEFINITION";P.CHANNEL="channel";P.CHANNELS="channels";P.EXECUTABLE_DIRECTIVE_LOCATIONS=new Set([P.FIELD_UPPER,P.FRAGMENT_DEFINITION_UPPER,P.FRAGMENT_SPREAD_UPPER,P.INLINE_FRAGMENT_UPPER,P.MUTATION_UPPER,P.QUERY_UPPER,P.SUBSCRIPTION_UPPER]);P.ROOT_TYPE_NAMES=new Set([P.MUTATION,P.QUERY,P.SUBSCRIPTION]);P.AUTHORIZATION_DIRECTIVES=new Set([P.AUTHENTICATED,P.REQUIRES_SCOPES]);P.PERSISTED_CLIENT_DIRECTIVES=new Set([P.DEPRECATED]);P.INHERITABLE_DIRECTIVE_NAMES=[P.EXTERNAL,P.SHAREABLE];P.IGNORED_FIELDS=new Set([P.ENTITIES_FIELD,P.SERVICE_FIELD])});var Jr=w(Qn=>{"use strict";f();N();m();Object.defineProperty(Qn,"__esModule",{value:!0});Qn.operationTypeNodeToDefaultType=void 0;Qn.isObjectLikeNodeEntity=_X;Qn.isNodeInterfaceObject=vX;Qn.stringToNameNode=fN;Qn.stringArrayToNameNodeArray=SX;Qn.setToNameNodeArray=OX;Qn.stringToNamedTypeNode=LL;Qn.setToNamedTypeNodeArray=DX;Qn.nodeKindToDirectiveLocation=bX;Qn.isKindAbstract=AX;Qn.extractExecutableDirectiveLocations=RX;Qn.formatDescription=FX;Qn.lexicographicallySortArgumentNodes=CL;Qn.lexicographicallySortSelectionSetNode=pN;Qn.lexicographicallySortDocumentNode=PX;Qn.parse=BL;Qn.safeParse=wX;var Ut=Ae(),Sn=lr();function _X(e){var t;if(!((t=e.directives)!=null&&t.length))return!1;for(let n of e.directives)if(n.name.value===Sn.KEY)return!0;return!1}function vX(e){var t;if(!((t=e.directives)!=null&&t.length))return!1;for(let n of e.directives)if(n.name.value===Sn.INTERFACE_OBJECT)return!0;return!1}function fN(e){return{kind:Ut.Kind.NAME,value:e}}function SX(e){let t=[];for(let n of e)t.push(fN(n));return t}function OX(e){let t=[];for(let n of e)t.push(fN(n));return t}function LL(e){return{kind:Ut.Kind.NAMED_TYPE,name:fN(e)}}function DX(e){let t=[];for(let n of e)t.push(LL(n));return t}function bX(e){switch(e){case Ut.Kind.ARGUMENT:return Sn.ARGUMENT_DEFINITION_UPPER;case Ut.Kind.ENUM_TYPE_DEFINITION:case Ut.Kind.ENUM_TYPE_EXTENSION:return Sn.ENUM_UPPER;case Ut.Kind.ENUM_VALUE_DEFINITION:return Sn.ENUM_VALUE_UPPER;case Ut.Kind.FIELD_DEFINITION:return Sn.FIELD_DEFINITION_UPPER;case Ut.Kind.FRAGMENT_DEFINITION:return Sn.FRAGMENT_DEFINITION_UPPER;case Ut.Kind.FRAGMENT_SPREAD:return Sn.FRAGMENT_SPREAD_UPPER;case Ut.Kind.INLINE_FRAGMENT:return Sn.INLINE_FRAGMENT_UPPER;case Ut.Kind.INPUT_VALUE_DEFINITION:return Sn.INPUT_FIELD_DEFINITION_UPPER;case Ut.Kind.INPUT_OBJECT_TYPE_DEFINITION:case Ut.Kind.INPUT_OBJECT_TYPE_EXTENSION:return Sn.INPUT_OBJECT_UPPER;case Ut.Kind.INTERFACE_TYPE_DEFINITION:case Ut.Kind.INTERFACE_TYPE_EXTENSION:return Sn.INTERFACE_UPPER;case Ut.Kind.OBJECT_TYPE_DEFINITION:case Ut.Kind.OBJECT_TYPE_EXTENSION:return Sn.OBJECT_UPPER;case Ut.Kind.SCALAR_TYPE_DEFINITION:case Ut.Kind.SCALAR_TYPE_EXTENSION:return Sn.SCALAR_UPPER;case Ut.Kind.SCHEMA_DEFINITION:case Ut.Kind.SCHEMA_EXTENSION:return Sn.SCHEMA_UPPER;case Ut.Kind.UNION_TYPE_DEFINITION:case Ut.Kind.UNION_TYPE_EXTENSION:return Sn.UNION_UPPER;default:return e}}Qn.operationTypeNodeToDefaultType=new Map([[Ut.OperationTypeNode.MUTATION,Sn.MUTATION],[Ut.OperationTypeNode.QUERY,Sn.QUERY],[Ut.OperationTypeNode.SUBSCRIPTION,Sn.SUBSCRIPTION]]);function AX(e){return e===Ut.Kind.INTERFACE_TYPE_DEFINITION||e===Ut.Kind.UNION_TYPE_DEFINITION}function RX(e,t){for(let n of e){let r=n.value;Sn.EXECUTABLE_DIRECTIVE_LOCATIONS.has(r)&&t.add(r)}return t}function FX(e){if(!e)return e;let t=e.value;if(e.block){let n=t.split(` `);n.length>1&&(t=n.map(r=>r.trimStart()).join(` -`))}return Q(k({},e),{value:t,block:!0})}function wL(e){return e.arguments?e.arguments.sort((n,r)=>n.name.value.localeCompare(r.name.value)):e.arguments}function dT(e){let t=e.selections;return Q(k({},e),{selections:t.sort((n,r)=>{var a,o,c,l;return vn.NAME in n?vn.NAME in r?n.name.value.localeCompare(r.name.value):-1:vn.NAME in r?1:((o=(a=n.typeCondition)==null?void 0:a.name.value)!=null?o:"").localeCompare((l=(c=r.typeCondition)==null?void 0:c.name.value)!=null?l:"")}).map(n=>{switch(n.kind){case Ut.Kind.FIELD:return Q(k({},n),{arguments:wL(n),selectionSet:n.selectionSet?dT(n.selectionSet):n.selectionSet});case Ut.Kind.FRAGMENT_SPREAD:return n;case Ut.Kind.INLINE_FRAGMENT:return Q(k({},n),{selectionSet:dT(n.selectionSet)})}})})}function RX(e){return Q(k({},e),{definitions:e.definitions.map(t=>t.kind!==Ut.Kind.OPERATION_DEFINITION?t:Q(k({},t),{selectionSet:dT(t.selectionSet)}))})}function LL(e,t=!0){return(0,Ut.parse)(e,{noLocation:t})}function FX(e,t=!0){try{return{documentNode:LL(e,t)}}catch(n){return{error:n}}}});var UL=P(el=>{"use strict";f();T();m();Object.defineProperty(el,"__esModule",{value:!0});el.AccumulatorMap=void 0;el.mapValue=Zc;el.extendSchemaImpl=PX;var Be=Ae(),hs=class extends Map{get[Symbol.toStringTag](){return"AccumulatorMap"}add(t,n){let r=this.get(t);r===void 0?this.set(t,[n]):r.push(n)}};el.AccumulatorMap=hs;function Zc(e,t){let n=Object.create(null);for(let r of Object.keys(e))n[r]=t(e[r],r);return n}function PX(e,t,n){var be,_e,Le,_t;let r=[],i=new hs,a=new hs,o=new hs,c=new hs,l=new hs,p=new hs,N=[],y,g=[],_=!1;for(let Y of t.definitions){switch(Y.kind){case Be.Kind.SCHEMA_DEFINITION:y=Y;break;case Be.Kind.SCHEMA_EXTENSION:g.push(Y);break;case Be.Kind.DIRECTIVE_DEFINITION:N.push(Y);break;case Be.Kind.SCALAR_TYPE_DEFINITION:case Be.Kind.OBJECT_TYPE_DEFINITION:case Be.Kind.INTERFACE_TYPE_DEFINITION:case Be.Kind.UNION_TYPE_DEFINITION:case Be.Kind.ENUM_TYPE_DEFINITION:case Be.Kind.INPUT_OBJECT_TYPE_DEFINITION:r.push(Y);break;case Be.Kind.SCALAR_TYPE_EXTENSION:i.add(Y.name.value,Y);break;case Be.Kind.OBJECT_TYPE_EXTENSION:a.add(Y.name.value,Y);break;case Be.Kind.INTERFACE_TYPE_EXTENSION:o.add(Y.name.value,Y);break;case Be.Kind.UNION_TYPE_EXTENSION:c.add(Y.name.value,Y);break;case Be.Kind.ENUM_TYPE_EXTENSION:l.add(Y.name.value,Y);break;case Be.Kind.INPUT_OBJECT_TYPE_EXTENSION:p.add(Y.name.value,Y);break;default:continue}_=!0}if(!_)return e;let F=new Map;for(let Y of e.types){let re=W(Y);re&&F.set(Y.name,re)}for(let Y of r){let re=Y.name.value;F.set(re,(be=CL.get(re))!=null?be:ie(Y))}for(let[Y,re]of a)F.set(Y,new Be.GraphQLObjectType({name:Y,interfaces:()=>$t(re),fields:()=>cn(re),extensionASTNodes:re}));if(n!=null&&n.addInvalidExtensionOrphans){for(let[Y,re]of o)F.set(Y,new Be.GraphQLInterfaceType({name:Y,interfaces:()=>$t(re),fields:()=>cn(re),extensionASTNodes:re}));for(let[Y,re]of l)F.set(Y,new Be.GraphQLEnumType({name:Y,values:kn(re),extensionASTNodes:re}));for(let[Y,re]of c)F.set(Y,new Be.GraphQLUnionType({name:Y,types:()=>An(re),extensionASTNodes:re}));for(let[Y,re]of i)F.set(Y,new Be.GraphQLScalarType({name:Y,extensionASTNodes:re}));for(let[Y,re]of p)F.set(Y,new Be.GraphQLInputObjectType({name:Y,fields:()=>Fr(re),extensionASTNodes:re}))}let B=k(k({query:e.query&&J(e.query),mutation:e.mutation&&J(e.mutation),subscription:e.subscription&&J(e.subscription)},y&&Ht([y])),Ht(g));return Q(k({description:(Le=(_e=y==null?void 0:y.description)==null?void 0:_e.value)!=null?Le:e.description},B),{types:Array.from(F.values()),directives:[...e.directives.map(Z),...N.map(qt)],extensions:e.extensions,astNode:y!=null?y:e.astNode,extensionASTNodes:e.extensionASTNodes.concat(g),assumeValid:(_t=n==null?void 0:n.assumeValid)!=null?_t:!1});function j(Y){return(0,Be.isListType)(Y)?new Be.GraphQLList(j(Y.ofType)):(0,Be.isNonNullType)(Y)?new Be.GraphQLNonNull(j(Y.ofType)):J(Y)}function J(Y){return F.get(Y.name)}function Z(Y){if((0,Be.isSpecifiedDirective)(Y))return Y;let re=Y.toConfig();return new Be.GraphQLDirective(Q(k({},re),{args:Zc(re.args,gt)}))}function W(Y){if((0,Be.isIntrospectionType)(Y)||(0,Be.isSpecifiedScalarType)(Y))return Y;if((0,Be.isScalarType)(Y))return we(Y);if((0,Be.isObjectType)(Y))return qe(Y);if((0,Be.isInterfaceType)(Y))return et(Y);if((0,Be.isUnionType)(Y))return X(Y);if((0,Be.isEnumType)(Y))return le(Y);if((0,Be.isInputObjectType)(Y))return Ne(Y)}function Ne(Y){var Qe;let re=Y.toConfig(),Me=(Qe=p.get(re.name))!=null?Qe:[];return new Be.GraphQLInputObjectType(Q(k({},re),{fields:()=>k(k({},Zc(re.fields,Lt=>Q(k({},Lt),{type:j(Lt.type)}))),Fr(Me)),extensionASTNodes:re.extensionASTNodes.concat(Me)}))}function le(Y){var Qe;let re=Y.toConfig(),Me=(Qe=l.get(Y.name))!=null?Qe:[];return new Be.GraphQLEnumType(Q(k({},re),{values:k(k({},re.values),kn(Me)),extensionASTNodes:re.extensionASTNodes.concat(Me)}))}function we(Y){var Lt,tt;let re=Y.toConfig(),Me=(Lt=i.get(re.name))!=null?Lt:[],Qe=re.specifiedByURL;for(let Dt of Me)Qe=(tt=BL(Dt))!=null?tt:Qe;return new Be.GraphQLScalarType(Q(k({},re),{specifiedByURL:Qe,extensionASTNodes:re.extensionASTNodes.concat(Me)}))}function qe(Y){var Qe;let re=Y.toConfig(),Me=(Qe=a.get(re.name))!=null?Qe:[];return new Be.GraphQLObjectType(Q(k({},re),{interfaces:()=>[...Y.getInterfaces().map(J),...$t(Me)],fields:()=>k(k({},Zc(re.fields,ve)),cn(Me)),extensionASTNodes:re.extensionASTNodes.concat(Me)}))}function et(Y){var Qe;let re=Y.toConfig(),Me=(Qe=o.get(re.name))!=null?Qe:[];return new Be.GraphQLInterfaceType(Q(k({},re),{interfaces:()=>[...Y.getInterfaces().map(J),...$t(Me)],fields:()=>k(k({},Zc(re.fields,ve)),cn(Me)),extensionASTNodes:re.extensionASTNodes.concat(Me)}))}function X(Y){var Qe;let re=Y.toConfig(),Me=(Qe=c.get(re.name))!=null?Qe:[];return new Be.GraphQLUnionType(Q(k({},re),{types:()=>[...Y.getTypes().map(J),...An(Me)],extensionASTNodes:re.extensionASTNodes.concat(Me)}))}function ve(Y){return Q(k({},Y),{type:j(Y.type),args:Y.args&&Zc(Y.args,gt)})}function gt(Y){return Q(k({},Y),{type:j(Y.type)})}function Ht(Y){var Me;let re={};for(let Qe of Y){let Lt=(Me=Qe.operationTypes)!=null?Me:[];for(let tt of Lt)re[tt.operation]=zt(tt.type)}return re}function zt(Y){var Qe;let re=Y.name.value,Me=(Qe=CL.get(re))!=null?Qe:F.get(re);if(Me===void 0)throw new Error(`Unknown type: "${re}".`);return Me}function Dn(Y){return Y.kind===Be.Kind.LIST_TYPE?new Be.GraphQLList(Dn(Y.type)):Y.kind===Be.Kind.NON_NULL_TYPE?new Be.GraphQLNonNull(Dn(Y.type)):zt(Y)}function qt(Y){var re;return new Be.GraphQLDirective({name:Y.name.value,description:(re=Y.description)==null?void 0:re.value,locations:Y.locations.map(({value:Me})=>Me),isRepeatable:Y.repeatable,args:Rr(Y.arguments),astNode:Y})}function cn(Y){var Me,Qe;let re=Object.create(null);for(let Lt of Y){let tt=(Me=Lt.fields)!=null?Me:[];for(let Dt of tt)re[Dt.name.value]={type:Dn(Dt.type),description:(Qe=Dt.description)==null?void 0:Qe.value,args:Rr(Dt.arguments),deprecationReason:fT(Dt),astNode:Dt}}return re}function Rr(Y){var Qe;let re=Y!=null?Y:[],Me=Object.create(null);for(let Lt of re){let tt=Dn(Lt.type);Me[Lt.name.value]={type:tt,description:(Qe=Lt.description)==null?void 0:Qe.value,defaultValue:(0,Be.valueFromAST)(Lt.defaultValue,tt),deprecationReason:fT(Lt),astNode:Lt}}return Me}function Fr(Y){var Me,Qe;let re=Object.create(null);for(let Lt of Y){let tt=(Me=Lt.fields)!=null?Me:[];for(let Dt of tt){let za=Dn(Dt.type);re[Dt.name.value]={type:za,description:(Qe=Dt.description)==null?void 0:Qe.value,defaultValue:(0,Be.valueFromAST)(Dt.defaultValue,za),deprecationReason:fT(Dt),astNode:Dt}}}return re}function kn(Y){var Me,Qe;let re=Object.create(null);for(let Lt of Y){let tt=(Me=Lt.values)!=null?Me:[];for(let Dt of tt)re[Dt.name.value]={description:(Qe=Dt.description)==null?void 0:Qe.value,deprecationReason:fT(Dt),astNode:Dt}}return re}function $t(Y){return Y.flatMap(re=>{var Me,Qe;return(Qe=(Me=re.interfaces)==null?void 0:Me.map(zt))!=null?Qe:[]})}function An(Y){return Y.flatMap(re=>{var Me,Qe;return(Qe=(Me=re.types)==null?void 0:Me.map(zt))!=null?Qe:[]})}function ie(Y){var Me,Qe,Lt,tt,Dt,za,qr,Wa,yc,ya,mr,ni;let re=Y.name.value;switch(Y.kind){case Be.Kind.OBJECT_TYPE_DEFINITION:{let kt=(Me=a.get(re))!=null?Me:[],Tr=[Y,...kt];return a.delete(re),new Be.GraphQLObjectType({name:re,description:(Qe=Y.description)==null?void 0:Qe.value,interfaces:()=>$t(Tr),fields:()=>cn(Tr),astNode:Y,extensionASTNodes:kt})}case Be.Kind.INTERFACE_TYPE_DEFINITION:{let kt=(Lt=o.get(re))!=null?Lt:[],Tr=[Y,...kt];return o.delete(re),new Be.GraphQLInterfaceType({name:re,description:(tt=Y.description)==null?void 0:tt.value,interfaces:()=>$t(Tr),fields:()=>cn(Tr),astNode:Y,extensionASTNodes:kt})}case Be.Kind.ENUM_TYPE_DEFINITION:{let kt=(Dt=l.get(re))!=null?Dt:[],Tr=[Y,...kt];return l.delete(re),new Be.GraphQLEnumType({name:re,description:(za=Y.description)==null?void 0:za.value,values:kn(Tr),astNode:Y,extensionASTNodes:kt})}case Be.Kind.UNION_TYPE_DEFINITION:{let kt=(qr=c.get(re))!=null?qr:[],Tr=[Y,...kt];return c.delete(re),new Be.GraphQLUnionType({name:re,description:(Wa=Y.description)==null?void 0:Wa.value,types:()=>An(Tr),astNode:Y,extensionASTNodes:kt})}case Be.Kind.SCALAR_TYPE_DEFINITION:{let kt=(yc=i.get(re))!=null?yc:[];return i.delete(re),new Be.GraphQLScalarType({name:re,description:(ya=Y.description)==null?void 0:ya.value,specifiedByURL:BL(Y),astNode:Y,extensionASTNodes:kt})}case Be.Kind.INPUT_OBJECT_TYPE_DEFINITION:{let kt=(mr=p.get(re))!=null?mr:[],Tr=[Y,...kt];return p.delete(re),new Be.GraphQLInputObjectType({name:re,description:(ni=Y.description)==null?void 0:ni.value,fields:()=>Fr(Tr),astNode:Y,extensionASTNodes:kt})}}}}var CL=new Map([...Be.specifiedScalarTypes,...Be.introspectionTypes].map(e=>[e.name,e]));function fT(e){let t=(0,Be.getDirectiveValues)(Be.GraphQLDeprecatedDirective,e);return t==null?void 0:t.reason}function BL(e){let t=(0,Be.getDirectiveValues)(Be.GraphQLSpecifiedByDirective,e);return t==null?void 0:t.url}});var Q_=P($_=>{"use strict";f();T();m();Object.defineProperty($_,"__esModule",{value:!0});$_.buildASTSchema=CX;var kL=Ae(),wX=zc(),LX=UL();function CX(e,t){(t==null?void 0:t.assumeValid)!==!0&&(t==null?void 0:t.assumeValidSDL)!==!0&&(0,wX.assertValidSDL)(e);let n={description:void 0,types:[],directives:[],extensions:Object.create(null),extensionASTNodes:[],assumeValid:!1},r=(0,LX.extendSchemaImpl)(n,e,t);if(r.astNode==null)for(let a of r.types)switch(a.name){case"Query":r.query=a;break;case"Mutation":r.mutation=a;break;case"Subscription":r.subscription=a;break}let i=[...r.directives,...kL.specifiedDirectives.filter(a=>r.directives.every(o=>o.name!==a.name))];return new kL.GraphQLSchema(Q(k({},r),{directives:i}))}});var tl=P(Qo=>{"use strict";f();T();m();Object.defineProperty(Qo,"__esModule",{value:!0});Qo.MAX_INT32=Qo.MAX_SUBSCRIPTION_FILTER_DEPTH=Qo.MAXIMUM_TYPE_NESTING=void 0;Qo.MAXIMUM_TYPE_NESTING=30;Qo.MAX_SUBSCRIPTION_FILTER_DEPTH=5;Qo.MAX_INT32=nn(2,31)-1});var Hr=P(er=>{"use strict";f();T();m();Object.defineProperty(er,"__esModule",{value:!0});er.areSetsEqual=UX;er.getOrThrowError=kX;er.getAllSetDisparities=MX;er.getEntriesNotInHashSet=xX;er.numberToOrdinal=qX;er.addIterableValuesToSet=VX;er.addSets=jX;er.kindToTypeString=KX;er.getValueOrDefault=GX;er.add=$X;er.generateSimpleDirective=QX;er.generateRequiresScopesDirective=YX;er.copyObjectValueMap=JX;er.addNewObjectValueMapEntries=HX;er.copyArrayValueMap=zX;er.addMapEntries=WX;er.getSingleSetEntry=XX;var an=Ae(),vr=lr(),BX=sa(),Y_=Jr();function UX(e,t){if(e.size!==t.size)return!1;for(let n of e)if(!t.has(n))return!1;return!0}function kX(e,t,n){let r=e.get(t);if(r===void 0)throw(0,BX.invalidKeyFatalError)(t,n);return r}function MX(e,t){let n=new Set(t),r=[];for(let i of e)n.delete(i)||r.push(i);for(let i of n)r.push(i);return r}function xX(e,t){let n=[];for(let r of e)t.has(r)||n.push(r);return n}function qX(e){let t=e.toString();switch(t[t.length-1]){case"1":return`${t}st`;case"2":return`${t}nd`;case"3":return`${t}rd`;default:return`${t}th`}}function VX(e,t){for(let n of e)t.add(n)}function jX(e,t){let n=new Set(e);for(let r of t)n.add(r);return n}function KX(e){switch(e){case an.Kind.BOOLEAN:return vr.BOOLEAN_SCALAR;case an.Kind.ENUM:case an.Kind.ENUM_TYPE_DEFINITION:return vr.ENUM;case an.Kind.ENUM_TYPE_EXTENSION:return"Enum extension";case an.Kind.ENUM_VALUE_DEFINITION:return vr.ENUM_VALUE;case an.Kind.FIELD_DEFINITION:return vr.FIELD;case an.Kind.FLOAT:return vr.FLOAT_SCALAR;case an.Kind.INPUT_OBJECT_TYPE_DEFINITION:return vr.INPUT_OBJECT;case an.Kind.INPUT_OBJECT_TYPE_EXTENSION:return"Input Object extension";case an.Kind.INPUT_VALUE_DEFINITION:return vr.INPUT_VALUE;case an.Kind.INT:return vr.INT_SCALAR;case an.Kind.INTERFACE_TYPE_DEFINITION:return vr.INTERFACE;case an.Kind.INTERFACE_TYPE_EXTENSION:return"Interface extension";case an.Kind.NULL:return vr.NULL;case an.Kind.OBJECT:case an.Kind.OBJECT_TYPE_DEFINITION:return vr.OBJECT;case an.Kind.OBJECT_TYPE_EXTENSION:return"Object extension";case an.Kind.STRING:return vr.STRING_SCALAR;case an.Kind.SCALAR_TYPE_DEFINITION:return vr.SCALAR;case an.Kind.SCALAR_TYPE_EXTENSION:return"Scalar extension";case an.Kind.UNION_TYPE_DEFINITION:return vr.UNION;case an.Kind.UNION_TYPE_EXTENSION:return"Union extension";default:return e}}function GX(e,t,n){let r=e.get(t);if(r)return r;let i=n();return e.set(t,i),i}function $X(e,t){return e.has(t)?!1:(e.add(t),!0)}function QX(e){return{kind:an.Kind.DIRECTIVE,name:(0,Y_.stringToNameNode)(e)}}function YX(e){let t=[];for(let n of e){let r=[];for(let i of n)r.push({kind:an.Kind.STRING,value:i});t.push({kind:an.Kind.LIST,values:r})}return{kind:an.Kind.DIRECTIVE,name:(0,Y_.stringToNameNode)(vr.REQUIRES_SCOPES),arguments:[{kind:an.Kind.ARGUMENT,name:(0,Y_.stringToNameNode)(vr.SCOPES),value:{kind:an.Kind.LIST,values:t}}]}}function JX(e){let t=new Map;for(let[n,r]of e)t.set(n,k({},r));return t}function HX(e,t){for(let[n,r]of e)t.set(n,k({},r))}function zX(e){let t=new Map;for(let[n,r]of e)t.set(n,[...r]);return t}function WX(e,t){for(let[n,r]of e)t.set(n,r)}function XX(e){let{value:t,done:n}=e.values().next();if(!n)return t}});var sa=P(z=>{"use strict";f();T();m();Object.defineProperty(z,"__esModule",{value:!0});z.invalidEventProviderIdErrorMessage=z.invalidNatsStreamConfigurationDefinitionErrorMessage=z.invalidEdfsPublishResultObjectErrorMessage=z.invalidNatsStreamInputErrorMessage=z.inlineFragmentInFieldSetErrorMessage=z.inaccessibleQueryRootTypeError=z.subgraphValidationFailureError=z.minimumSubgraphRequirementError=void 0;z.multipleNamedTypeDefinitionError=ZX;z.incompatibleArgumentTypesError=e9;z.incompatibleInputValueDefaultValueTypeError=t9;z.incompatibleChildTypesError=n9;z.incompatibleInputValueDefaultValuesError=r9;z.incompatibleSharedEnumError=i9;z.invalidSubgraphNamesError=a9;z.duplicateDirectiveDefinitionError=s9;z.duplicateEnumValueDefinitionError=o9;z.duplicateFieldDefinitionError=u9;z.duplicateInputFieldDefinitionError=c9;z.duplicateImplementedInterfaceError=l9;z.duplicateUnionMemberDefinitionError=d9;z.duplicateTypeDefinitionError=p9;z.duplicateOperationTypeDefinitionError=f9;z.noBaseDefinitionForExtensionError=m9;z.noBaseScalarDefinitionError=T9;z.noDefinedUnionMembersError=N9;z.noDefinedEnumValuesError=h9;z.operationDefinitionError=E9;z.invalidFieldShareabilityError=y9;z.undefinedDirectiveError=I9;z.undefinedTypeError=g9;z.invalidRepeatedDirectiveErrorMessage=_9;z.invalidDirectiveError=v9;z.invalidRepeatedFederatedDirectiveErrorMessage=S9;z.invalidDirectiveLocationErrorMessage=O9;z.undefinedRequiredArgumentsErrorMessage=b9;z.unexpectedDirectiveArgumentErrorMessage=D9;z.duplicateDirectiveArgumentDefinitionsErrorMessage=A9;z.invalidArgumentValueErrorMessage=R9;z.invalidKeyDirectivesError=F9;z.maximumTypeNestingExceededError=P9;z.unexpectedKindFatalError=w9;z.incompatibleParentKindFatalError=L9;z.unexpectedEdgeFatalError=C9;z.incompatibleParentKindMergeError=B9;z.fieldTypeMergeFatalError=U9;z.unexpectedTypeNodeKindFatalError=k9;z.invalidKeyFatalError=M9;z.unexpectedParentKindForChildError=x9;z.subgraphValidationError=q9;z.invalidSubgraphNameErrorMessage=V9;z.invalidOperationTypeDefinitionError=j9;z.invalidRootTypeDefinitionError=K9;z.subgraphInvalidSyntaxError=G9;z.invalidInterfaceImplementationError=$9;z.invalidRequiredInputValueError=Q9;z.duplicateArgumentsError=Y9;z.invalidArgumentsError=J9;z.noQueryRootTypeError=H9;z.expectedEntityError=z9;z.abstractTypeInKeyFieldSetErrorMessage=W9;z.unknownTypeInFieldSetErrorMessage=X9;z.invalidSelectionSetErrorMessage=Z9;z.invalidSelectionSetDefinitionErrorMessage=e7;z.undefinedFieldInFieldSetErrorMessage=t7;z.unparsableFieldSetErrorMessage=n7;z.unparsableFieldSetSelectionErrorMessage=r7;z.undefinedCompositeOutputTypeError=i7;z.unexpectedArgumentErrorMessage=a7;z.argumentsInKeyFieldSetErrorMessage=s7;z.invalidProvidesOrRequiresDirectivesError=o7;z.duplicateFieldInFieldSetErrorMessage=u7;z.invalidConfigurationDataErrorMessage=c7;z.incompatibleTypeWithProvidesErrorMessage=l7;z.invalidInlineFragmentTypeErrorMessage=d7;z.inlineFragmentWithoutTypeConditionErrorMessage=p7;z.unknownInlineFragmentTypeConditionErrorMessage=f7;z.invalidInlineFragmentTypeConditionTypeErrorMessage=m7;z.invalidInlineFragmentTypeConditionErrorMessage=T7;z.invalidSelectionOnUnionErrorMessage=N7;z.duplicateOverriddenFieldErrorMessage=h7;z.duplicateOverriddenFieldsError=E7;z.noFieldDefinitionsError=y7;z.noInputValueDefinitionsError=I7;z.allChildDefinitionsAreInaccessibleError=g7;z.equivalentSourceAndTargetOverrideErrorMessage=_7;z.undefinedEntityInterfaceImplementationsError=v7;z.orScopesLimitError=S7;z.invalidEventDrivenGraphError=O7;z.invalidRootTypeFieldEventsDirectivesErrorMessage=b7;z.invalidEventDrivenMutationResponseTypeErrorMessage=D7;z.invalidRootTypeFieldResponseTypesEventDrivenErrorMessage=A7;z.invalidNatsStreamInputFieldsErrorMessage=R7;z.invalidKeyFieldSetsEventDrivenErrorMessage=F7;z.nonExternalKeyFieldNamesEventDrivenErrorMessage=P7;z.nonKeyFieldNamesEventDrivenErrorMessage=w7;z.nonEntityObjectExtensionsEventDrivenErrorMessage=L7;z.nonKeyComposingObjectTypeNamesEventDrivenErrorMessage=C7;z.invalidEdfsDirectiveName=B7;z.invalidImplementedTypeError=U7;z.selfImplementationError=k7;z.invalidEventSubjectErrorMessage=M7;z.invalidEventSubjectsErrorMessage=x7;z.invalidEventSubjectsItemErrorMessage=q7;z.invalidEventSubjectsArgumentErrorMessage=V7;z.undefinedEventSubjectsArgumentErrorMessage=j7;z.invalidEventDirectiveError=K7;z.invalidReferencesOfInaccessibleTypeError=G7;z.inaccessibleRequiredInputValueError=$7;z.invalidUnionMemberTypeError=Q7;z.invalidRootTypeError=Y7;z.invalidSubscriptionFilterLocationError=J7;z.invalidSubscriptionFilterDirectiveError=H7;z.subscriptionFilterNamedTypeErrorMessage=z7;z.subscriptionFilterConditionDepthExceededErrorMessage=W7;z.subscriptionFilterConditionInvalidInputFieldNumberErrorMessage=X7;z.subscriptionFilterConditionInvalidInputFieldErrorMessage=Z7;z.subscriptionFilterConditionInvalidInputFieldTypeErrorMessage=eZ;z.subscriptionFilterArrayConditionInvalidItemTypeErrorMessage=tZ;z.subscriptionFilterArrayConditionInvalidLengthErrorMessage=nZ;z.invalidInputFieldTypeErrorMessage=rZ;z.subscriptionFieldConditionInvalidInputFieldErrorMessage=iZ;z.subscriptionFieldConditionInvalidValuesArrayErrorMessage=aZ;z.subscriptionFieldConditionEmptyValuesArrayErrorMessage=sZ;z.unknownFieldSubgraphNameError=oZ;z.invalidSubscriptionFieldConditionFieldPathErrorMessage=uZ;z.invalidSubscriptionFieldConditionFieldPathParentErrorMessage=cZ;z.undefinedSubscriptionFieldConditionFieldPathFieldErrorMessage=lZ;z.invalidSubscriptionFieldConditionFieldPathFieldErrorMessage=dZ;z.inaccessibleSubscriptionFieldConditionFieldPathFieldErrorMessage=pZ;z.nonLeafSubscriptionFieldConditionFieldPathFinalFieldErrorMessage=fZ;z.unresolvablePathError=mZ;z.allExternalFieldInstancesError=TZ;z.externalInterfaceFieldsError=NZ;z.nonExternalConditionalFieldError=hZ;z.incompatibleFederatedFieldNamedTypeError=EZ;z.unknownNamedTypeErrorMessage=KL;z.unknownNamedTypeError=yZ;z.unknownFieldDataError=IZ;z.unexpectedNonCompositeOutputTypeError=gZ;z.invalidExternalDirectiveError=_Z;z.configureDescriptionNoDescriptionError=vZ;z.configureDescriptionPropagationError=SZ;z.duplicateDirectiveDefinitionArgumentErrorMessage=OZ;z.duplicateDirectiveDefinitionLocationErrorMessage=bZ;z.invalidDirectiveDefinitionLocationErrorMessage=DZ;z.invalidDirectiveDefinitionError=AZ;z.fieldAlreadyProvidedErrorMessage=RZ;z.invalidInterfaceObjectImplementationDefinitionsError=FZ;var ML=Ae(),Xe=lr(),xL=tl(),ep=Hr();z.minimumSubgraphRequirementError=new Error("At least one subgraph is required for federation.");function ZX(e,t,n){return new Error(`The named type "${e}" is defined as both types "${t}" and "${n}". -However, there must be only one type named "${e}".`)}function e9(e,t,n,r){return new Error(`Incompatible types when merging two instances of argument "${e}" on path "${t}": - Expected type "${n}" but received "${r}"`)}function t9(e,t,n,r){return new Error(`The ${e} of type "${n}" defined on path "${t}" is incompatible with the default value of "${r}".`)}function n9(e,t,n){return new Error(`Incompatible types when merging two instances of "${e}": - Expected type "${t}" but received "${n}"`)}function r9(e,t,n,r,i){return new Error(`Expected the ${e} defined on path "${t}" to define the default value "${r}". +`))}return Q(M({},e),{value:t,block:!0})}function CL(e){return e.arguments?e.arguments.sort((n,r)=>n.name.value.localeCompare(r.name.value)):e.arguments}function pN(e){let t=e.selections;return Q(M({},e),{selections:t.sort((n,r)=>{var a,o,c,l;return Sn.NAME in n?Sn.NAME in r?n.name.value.localeCompare(r.name.value):-1:Sn.NAME in r?1:((o=(a=n.typeCondition)==null?void 0:a.name.value)!=null?o:"").localeCompare((l=(c=r.typeCondition)==null?void 0:c.name.value)!=null?l:"")}).map(n=>{switch(n.kind){case Ut.Kind.FIELD:return Q(M({},n),{arguments:CL(n),selectionSet:n.selectionSet?pN(n.selectionSet):n.selectionSet});case Ut.Kind.FRAGMENT_SPREAD:return n;case Ut.Kind.INLINE_FRAGMENT:return Q(M({},n),{selectionSet:pN(n.selectionSet)})}})})}function PX(e){return Q(M({},e),{definitions:e.definitions.map(t=>t.kind!==Ut.Kind.OPERATION_DEFINITION?t:Q(M({},t),{selectionSet:pN(t.selectionSet)}))})}function BL(e,t=!0){return(0,Ut.parse)(e,{noLocation:t})}function wX(e,t=!0){try{return{documentNode:BL(e,t)}}catch(n){return{error:n}}}});var ML=w(tl=>{"use strict";f();N();m();Object.defineProperty(tl,"__esModule",{value:!0});tl.AccumulatorMap=void 0;tl.mapValue=el;tl.extendSchemaImpl=LX;var Be=Ae(),Es=class extends Map{get[Symbol.toStringTag](){return"AccumulatorMap"}add(t,n){let r=this.get(t);r===void 0?this.set(t,[n]):r.push(n)}};tl.AccumulatorMap=Es;function el(e,t){let n=Object.create(null);for(let r of Object.keys(e))n[r]=t(e[r],r);return n}function LX(e,t,n){var De,_e,Le,_t;let r=[],i=new Es,a=new Es,o=new Es,c=new Es,l=new Es,p=new Es,T=[],y,g=[],_=!1;for(let Y of t.definitions){switch(Y.kind){case Be.Kind.SCHEMA_DEFINITION:y=Y;break;case Be.Kind.SCHEMA_EXTENSION:g.push(Y);break;case Be.Kind.DIRECTIVE_DEFINITION:T.push(Y);break;case Be.Kind.SCALAR_TYPE_DEFINITION:case Be.Kind.OBJECT_TYPE_DEFINITION:case Be.Kind.INTERFACE_TYPE_DEFINITION:case Be.Kind.UNION_TYPE_DEFINITION:case Be.Kind.ENUM_TYPE_DEFINITION:case Be.Kind.INPUT_OBJECT_TYPE_DEFINITION:r.push(Y);break;case Be.Kind.SCALAR_TYPE_EXTENSION:i.add(Y.name.value,Y);break;case Be.Kind.OBJECT_TYPE_EXTENSION:a.add(Y.name.value,Y);break;case Be.Kind.INTERFACE_TYPE_EXTENSION:o.add(Y.name.value,Y);break;case Be.Kind.UNION_TYPE_EXTENSION:c.add(Y.name.value,Y);break;case Be.Kind.ENUM_TYPE_EXTENSION:l.add(Y.name.value,Y);break;case Be.Kind.INPUT_OBJECT_TYPE_EXTENSION:p.add(Y.name.value,Y);break;default:continue}_=!0}if(!_)return e;let F=new Map;for(let Y of e.types){let ae=W(Y);ae&&F.set(Y.name,ae)}for(let Y of r){let ae=Y.name.value;F.set(ae,(De=UL.get(ae))!=null?De:se(Y))}for(let[Y,ae]of a)F.set(Y,new Be.GraphQLObjectType({name:Y,interfaces:()=>$t(ae),fields:()=>dn(ae),extensionASTNodes:ae}));if(n!=null&&n.addInvalidExtensionOrphans){for(let[Y,ae]of o)F.set(Y,new Be.GraphQLInterfaceType({name:Y,interfaces:()=>$t(ae),fields:()=>dn(ae),extensionASTNodes:ae}));for(let[Y,ae]of l)F.set(Y,new Be.GraphQLEnumType({name:Y,values:kn(ae),extensionASTNodes:ae}));for(let[Y,ae]of c)F.set(Y,new Be.GraphQLUnionType({name:Y,types:()=>An(ae),extensionASTNodes:ae}));for(let[Y,ae]of i)F.set(Y,new Be.GraphQLScalarType({name:Y,extensionASTNodes:ae}));for(let[Y,ae]of p)F.set(Y,new Be.GraphQLInputObjectType({name:Y,fields:()=>Fr(ae),extensionASTNodes:ae}))}let U=M(M({query:e.query&&J(e.query),mutation:e.mutation&&J(e.mutation),subscription:e.subscription&&J(e.subscription)},y&&Ht([y])),Ht(g));return Q(M({description:(Le=(_e=y==null?void 0:y.description)==null?void 0:_e.value)!=null?Le:e.description},U),{types:Array.from(F.values()),directives:[...e.directives.map(ee),...T.map(Vt)],extensions:e.extensions,astNode:y!=null?y:e.astNode,extensionASTNodes:e.extensionASTNodes.concat(g),assumeValid:(_t=n==null?void 0:n.assumeValid)!=null?_t:!1});function K(Y){return(0,Be.isListType)(Y)?new Be.GraphQLList(K(Y.ofType)):(0,Be.isNonNullType)(Y)?new Be.GraphQLNonNull(K(Y.ofType)):J(Y)}function J(Y){return F.get(Y.name)}function ee(Y){if((0,Be.isSpecifiedDirective)(Y))return Y;let ae=Y.toConfig();return new Be.GraphQLDirective(Q(M({},ae),{args:el(ae.args,gt)}))}function W(Y){if((0,Be.isIntrospectionType)(Y)||(0,Be.isSpecifiedScalarType)(Y))return Y;if((0,Be.isScalarType)(Y))return we(Y);if((0,Be.isObjectType)(Y))return qe(Y);if((0,Be.isInterfaceType)(Y))return et(Y);if((0,Be.isUnionType)(Y))return X(Y);if((0,Be.isEnumType)(Y))return de(Y);if((0,Be.isInputObjectType)(Y))return Te(Y)}function Te(Y){var Qe;let ae=Y.toConfig(),Me=(Qe=p.get(ae.name))!=null?Qe:[];return new Be.GraphQLInputObjectType(Q(M({},ae),{fields:()=>M(M({},el(ae.fields,Lt=>Q(M({},Lt),{type:K(Lt.type)}))),Fr(Me)),extensionASTNodes:ae.extensionASTNodes.concat(Me)}))}function de(Y){var Qe;let ae=Y.toConfig(),Me=(Qe=l.get(Y.name))!=null?Qe:[];return new Be.GraphQLEnumType(Q(M({},ae),{values:M(M({},ae.values),kn(Me)),extensionASTNodes:ae.extensionASTNodes.concat(Me)}))}function we(Y){var Lt,tt;let ae=Y.toConfig(),Me=(Lt=i.get(ae.name))!=null?Lt:[],Qe=ae.specifiedByURL;for(let bt of Me)Qe=(tt=kL(bt))!=null?tt:Qe;return new Be.GraphQLScalarType(Q(M({},ae),{specifiedByURL:Qe,extensionASTNodes:ae.extensionASTNodes.concat(Me)}))}function qe(Y){var Qe;let ae=Y.toConfig(),Me=(Qe=a.get(ae.name))!=null?Qe:[];return new Be.GraphQLObjectType(Q(M({},ae),{interfaces:()=>[...Y.getInterfaces().map(J),...$t(Me)],fields:()=>M(M({},el(ae.fields,ve)),dn(Me)),extensionASTNodes:ae.extensionASTNodes.concat(Me)}))}function et(Y){var Qe;let ae=Y.toConfig(),Me=(Qe=o.get(ae.name))!=null?Qe:[];return new Be.GraphQLInterfaceType(Q(M({},ae),{interfaces:()=>[...Y.getInterfaces().map(J),...$t(Me)],fields:()=>M(M({},el(ae.fields,ve)),dn(Me)),extensionASTNodes:ae.extensionASTNodes.concat(Me)}))}function X(Y){var Qe;let ae=Y.toConfig(),Me=(Qe=c.get(ae.name))!=null?Qe:[];return new Be.GraphQLUnionType(Q(M({},ae),{types:()=>[...Y.getTypes().map(J),...An(Me)],extensionASTNodes:ae.extensionASTNodes.concat(Me)}))}function ve(Y){return Q(M({},Y),{type:K(Y.type),args:Y.args&&el(Y.args,gt)})}function gt(Y){return Q(M({},Y),{type:K(Y.type)})}function Ht(Y){var Me;let ae={};for(let Qe of Y){let Lt=(Me=Qe.operationTypes)!=null?Me:[];for(let tt of Lt)ae[tt.operation]=zt(tt.type)}return ae}function zt(Y){var Qe;let ae=Y.name.value,Me=(Qe=UL.get(ae))!=null?Qe:F.get(ae);if(Me===void 0)throw new Error(`Unknown type: "${ae}".`);return Me}function bn(Y){return Y.kind===Be.Kind.LIST_TYPE?new Be.GraphQLList(bn(Y.type)):Y.kind===Be.Kind.NON_NULL_TYPE?new Be.GraphQLNonNull(bn(Y.type)):zt(Y)}function Vt(Y){var ae;return new Be.GraphQLDirective({name:Y.name.value,description:(ae=Y.description)==null?void 0:ae.value,locations:Y.locations.map(({value:Me})=>Me),isRepeatable:Y.repeatable,args:Rr(Y.arguments),astNode:Y})}function dn(Y){var Me,Qe;let ae=Object.create(null);for(let Lt of Y){let tt=(Me=Lt.fields)!=null?Me:[];for(let bt of tt)ae[bt.name.value]={type:bn(bt.type),description:(Qe=bt.description)==null?void 0:Qe.value,args:Rr(bt.arguments),deprecationReason:mN(bt),astNode:bt}}return ae}function Rr(Y){var Qe;let ae=Y!=null?Y:[],Me=Object.create(null);for(let Lt of ae){let tt=bn(Lt.type);Me[Lt.name.value]={type:tt,description:(Qe=Lt.description)==null?void 0:Qe.value,defaultValue:(0,Be.valueFromAST)(Lt.defaultValue,tt),deprecationReason:mN(Lt),astNode:Lt}}return Me}function Fr(Y){var Me,Qe;let ae=Object.create(null);for(let Lt of Y){let tt=(Me=Lt.fields)!=null?Me:[];for(let bt of tt){let za=bn(bt.type);ae[bt.name.value]={type:za,description:(Qe=bt.description)==null?void 0:Qe.value,defaultValue:(0,Be.valueFromAST)(bt.defaultValue,za),deprecationReason:mN(bt),astNode:bt}}}return ae}function kn(Y){var Me,Qe;let ae=Object.create(null);for(let Lt of Y){let tt=(Me=Lt.values)!=null?Me:[];for(let bt of tt)ae[bt.name.value]={description:(Qe=bt.description)==null?void 0:Qe.value,deprecationReason:mN(bt),astNode:bt}}return ae}function $t(Y){return Y.flatMap(ae=>{var Me,Qe;return(Qe=(Me=ae.interfaces)==null?void 0:Me.map(zt))!=null?Qe:[]})}function An(Y){return Y.flatMap(ae=>{var Me,Qe;return(Qe=(Me=ae.types)==null?void 0:Me.map(zt))!=null?Qe:[]})}function se(Y){var Me,Qe,Lt,tt,bt,za,qr,Wa,Ic,ya,mr,ri;let ae=Y.name.value;switch(Y.kind){case Be.Kind.OBJECT_TYPE_DEFINITION:{let Mt=(Me=a.get(ae))!=null?Me:[],Nr=[Y,...Mt];return a.delete(ae),new Be.GraphQLObjectType({name:ae,description:(Qe=Y.description)==null?void 0:Qe.value,interfaces:()=>$t(Nr),fields:()=>dn(Nr),astNode:Y,extensionASTNodes:Mt})}case Be.Kind.INTERFACE_TYPE_DEFINITION:{let Mt=(Lt=o.get(ae))!=null?Lt:[],Nr=[Y,...Mt];return o.delete(ae),new Be.GraphQLInterfaceType({name:ae,description:(tt=Y.description)==null?void 0:tt.value,interfaces:()=>$t(Nr),fields:()=>dn(Nr),astNode:Y,extensionASTNodes:Mt})}case Be.Kind.ENUM_TYPE_DEFINITION:{let Mt=(bt=l.get(ae))!=null?bt:[],Nr=[Y,...Mt];return l.delete(ae),new Be.GraphQLEnumType({name:ae,description:(za=Y.description)==null?void 0:za.value,values:kn(Nr),astNode:Y,extensionASTNodes:Mt})}case Be.Kind.UNION_TYPE_DEFINITION:{let Mt=(qr=c.get(ae))!=null?qr:[],Nr=[Y,...Mt];return c.delete(ae),new Be.GraphQLUnionType({name:ae,description:(Wa=Y.description)==null?void 0:Wa.value,types:()=>An(Nr),astNode:Y,extensionASTNodes:Mt})}case Be.Kind.SCALAR_TYPE_DEFINITION:{let Mt=(Ic=i.get(ae))!=null?Ic:[];return i.delete(ae),new Be.GraphQLScalarType({name:ae,description:(ya=Y.description)==null?void 0:ya.value,specifiedByURL:kL(Y),astNode:Y,extensionASTNodes:Mt})}case Be.Kind.INPUT_OBJECT_TYPE_DEFINITION:{let Mt=(mr=p.get(ae))!=null?mr:[],Nr=[Y,...Mt];return p.delete(ae),new Be.GraphQLInputObjectType({name:ae,description:(ri=Y.description)==null?void 0:ri.value,fields:()=>Fr(Nr),astNode:Y,extensionASTNodes:Mt})}}}}var UL=new Map([...Be.specifiedScalarTypes,...Be.introspectionTypes].map(e=>[e.name,e]));function mN(e){let t=(0,Be.getDirectiveValues)(Be.GraphQLDeprecatedDirective,e);return t==null?void 0:t.reason}function kL(e){let t=(0,Be.getDirectiveValues)(Be.GraphQLSpecifiedByDirective,e);return t==null?void 0:t.url}});var Y_=w(Q_=>{"use strict";f();N();m();Object.defineProperty(Q_,"__esModule",{value:!0});Q_.buildASTSchema=UX;var xL=Ae(),CX=Wc(),BX=ML();function UX(e,t){(t==null?void 0:t.assumeValid)!==!0&&(t==null?void 0:t.assumeValidSDL)!==!0&&(0,CX.assertValidSDL)(e);let n={description:void 0,types:[],directives:[],extensions:Object.create(null),extensionASTNodes:[],assumeValid:!1},r=(0,BX.extendSchemaImpl)(n,e,t);if(r.astNode==null)for(let a of r.types)switch(a.name){case"Query":r.query=a;break;case"Mutation":r.mutation=a;break;case"Subscription":r.subscription=a;break}let i=[...r.directives,...xL.specifiedDirectives.filter(a=>r.directives.every(o=>o.name!==a.name))];return new xL.GraphQLSchema(Q(M({},r),{directives:i}))}});var nl=w(Yo=>{"use strict";f();N();m();Object.defineProperty(Yo,"__esModule",{value:!0});Yo.MAX_INT32=Yo.MAX_SUBSCRIPTION_FILTER_DEPTH=Yo.MAXIMUM_TYPE_NESTING=void 0;Yo.MAXIMUM_TYPE_NESTING=30;Yo.MAX_SUBSCRIPTION_FILTER_DEPTH=5;Yo.MAX_INT32=nn(2,31)-1});var Hr=w(er=>{"use strict";f();N();m();Object.defineProperty(er,"__esModule",{value:!0});er.areSetsEqual=MX;er.getOrThrowError=xX;er.getAllSetDisparities=qX;er.getEntriesNotInHashSet=VX;er.numberToOrdinal=jX;er.addIterableValuesToSet=KX;er.addSets=GX;er.kindToTypeString=$X;er.getValueOrDefault=QX;er.add=YX;er.generateSimpleDirective=JX;er.generateRequiresScopesDirective=HX;er.copyObjectValueMap=zX;er.addNewObjectValueMapEntries=WX;er.copyArrayValueMap=XX;er.addMapEntries=ZX;er.getSingleSetEntry=e9;var an=Ae(),vr=lr(),kX=sa(),J_=Jr();function MX(e,t){if(e.size!==t.size)return!1;for(let n of e)if(!t.has(n))return!1;return!0}function xX(e,t,n){let r=e.get(t);if(r===void 0)throw(0,kX.invalidKeyFatalError)(t,n);return r}function qX(e,t){let n=new Set(t),r=[];for(let i of e)n.delete(i)||r.push(i);for(let i of n)r.push(i);return r}function VX(e,t){let n=[];for(let r of e)t.has(r)||n.push(r);return n}function jX(e){let t=e.toString();switch(t[t.length-1]){case"1":return`${t}st`;case"2":return`${t}nd`;case"3":return`${t}rd`;default:return`${t}th`}}function KX(e,t){for(let n of e)t.add(n)}function GX(e,t){let n=new Set(e);for(let r of t)n.add(r);return n}function $X(e){switch(e){case an.Kind.BOOLEAN:return vr.BOOLEAN_SCALAR;case an.Kind.ENUM:case an.Kind.ENUM_TYPE_DEFINITION:return vr.ENUM;case an.Kind.ENUM_TYPE_EXTENSION:return"Enum extension";case an.Kind.ENUM_VALUE_DEFINITION:return vr.ENUM_VALUE;case an.Kind.FIELD_DEFINITION:return vr.FIELD;case an.Kind.FLOAT:return vr.FLOAT_SCALAR;case an.Kind.INPUT_OBJECT_TYPE_DEFINITION:return vr.INPUT_OBJECT;case an.Kind.INPUT_OBJECT_TYPE_EXTENSION:return"Input Object extension";case an.Kind.INPUT_VALUE_DEFINITION:return vr.INPUT_VALUE;case an.Kind.INT:return vr.INT_SCALAR;case an.Kind.INTERFACE_TYPE_DEFINITION:return vr.INTERFACE;case an.Kind.INTERFACE_TYPE_EXTENSION:return"Interface extension";case an.Kind.NULL:return vr.NULL;case an.Kind.OBJECT:case an.Kind.OBJECT_TYPE_DEFINITION:return vr.OBJECT;case an.Kind.OBJECT_TYPE_EXTENSION:return"Object extension";case an.Kind.STRING:return vr.STRING_SCALAR;case an.Kind.SCALAR_TYPE_DEFINITION:return vr.SCALAR;case an.Kind.SCALAR_TYPE_EXTENSION:return"Scalar extension";case an.Kind.UNION_TYPE_DEFINITION:return vr.UNION;case an.Kind.UNION_TYPE_EXTENSION:return"Union extension";default:return e}}function QX(e,t,n){let r=e.get(t);if(r)return r;let i=n();return e.set(t,i),i}function YX(e,t){return e.has(t)?!1:(e.add(t),!0)}function JX(e){return{kind:an.Kind.DIRECTIVE,name:(0,J_.stringToNameNode)(e)}}function HX(e){let t=[];for(let n of e){let r=[];for(let i of n)r.push({kind:an.Kind.STRING,value:i});t.push({kind:an.Kind.LIST,values:r})}return{kind:an.Kind.DIRECTIVE,name:(0,J_.stringToNameNode)(vr.REQUIRES_SCOPES),arguments:[{kind:an.Kind.ARGUMENT,name:(0,J_.stringToNameNode)(vr.SCOPES),value:{kind:an.Kind.LIST,values:t}}]}}function zX(e){let t=new Map;for(let[n,r]of e)t.set(n,M({},r));return t}function WX(e,t){for(let[n,r]of e)t.set(n,M({},r))}function XX(e){let t=new Map;for(let[n,r]of e)t.set(n,[...r]);return t}function ZX(e,t){for(let[n,r]of e)t.set(n,r)}function e9(e){let{value:t,done:n}=e.values().next();if(!n)return t}});var sa=w(z=>{"use strict";f();N();m();Object.defineProperty(z,"__esModule",{value:!0});z.invalidEventProviderIdErrorMessage=z.invalidNatsStreamConfigurationDefinitionErrorMessage=z.invalidEdfsPublishResultObjectErrorMessage=z.invalidNatsStreamInputErrorMessage=z.inlineFragmentInFieldSetErrorMessage=z.inaccessibleQueryRootTypeError=z.subgraphValidationFailureError=z.minimumSubgraphRequirementError=void 0;z.multipleNamedTypeDefinitionError=t9;z.incompatibleArgumentTypesError=n9;z.incompatibleInputValueDefaultValueTypeError=r9;z.incompatibleChildTypesError=i9;z.incompatibleInputValueDefaultValuesError=a9;z.incompatibleSharedEnumError=s9;z.invalidSubgraphNamesError=o9;z.duplicateDirectiveDefinitionError=u9;z.duplicateEnumValueDefinitionError=c9;z.duplicateFieldDefinitionError=l9;z.duplicateInputFieldDefinitionError=d9;z.duplicateImplementedInterfaceError=p9;z.duplicateUnionMemberDefinitionError=f9;z.duplicateTypeDefinitionError=m9;z.duplicateOperationTypeDefinitionError=N9;z.noBaseDefinitionForExtensionError=T9;z.noBaseScalarDefinitionError=E9;z.noDefinedUnionMembersError=h9;z.noDefinedEnumValuesError=y9;z.operationDefinitionError=I9;z.invalidFieldShareabilityError=g9;z.undefinedDirectiveError=_9;z.undefinedTypeError=v9;z.invalidRepeatedDirectiveErrorMessage=S9;z.invalidDirectiveError=O9;z.invalidRepeatedFederatedDirectiveErrorMessage=D9;z.invalidDirectiveLocationErrorMessage=b9;z.undefinedRequiredArgumentsErrorMessage=A9;z.unexpectedDirectiveArgumentErrorMessage=R9;z.duplicateDirectiveArgumentDefinitionsErrorMessage=F9;z.invalidArgumentValueErrorMessage=P9;z.invalidKeyDirectivesError=w9;z.maximumTypeNestingExceededError=L9;z.unexpectedKindFatalError=C9;z.incompatibleParentKindFatalError=B9;z.unexpectedEdgeFatalError=U9;z.incompatibleParentKindMergeError=k9;z.fieldTypeMergeFatalError=M9;z.unexpectedTypeNodeKindFatalError=x9;z.invalidKeyFatalError=q9;z.unexpectedParentKindForChildError=V9;z.subgraphValidationError=j9;z.invalidSubgraphNameErrorMessage=K9;z.invalidOperationTypeDefinitionError=G9;z.invalidRootTypeDefinitionError=$9;z.subgraphInvalidSyntaxError=Q9;z.invalidInterfaceImplementationError=Y9;z.invalidRequiredInputValueError=J9;z.duplicateArgumentsError=H9;z.invalidArgumentsError=z9;z.noQueryRootTypeError=W9;z.expectedEntityError=X9;z.abstractTypeInKeyFieldSetErrorMessage=Z9;z.unknownTypeInFieldSetErrorMessage=e7;z.invalidSelectionSetErrorMessage=t7;z.invalidSelectionSetDefinitionErrorMessage=n7;z.undefinedFieldInFieldSetErrorMessage=r7;z.unparsableFieldSetErrorMessage=i7;z.unparsableFieldSetSelectionErrorMessage=a7;z.undefinedCompositeOutputTypeError=s7;z.unexpectedArgumentErrorMessage=o7;z.argumentsInKeyFieldSetErrorMessage=u7;z.invalidProvidesOrRequiresDirectivesError=c7;z.duplicateFieldInFieldSetErrorMessage=l7;z.invalidConfigurationDataErrorMessage=d7;z.incompatibleTypeWithProvidesErrorMessage=p7;z.invalidInlineFragmentTypeErrorMessage=f7;z.inlineFragmentWithoutTypeConditionErrorMessage=m7;z.unknownInlineFragmentTypeConditionErrorMessage=N7;z.invalidInlineFragmentTypeConditionTypeErrorMessage=T7;z.invalidInlineFragmentTypeConditionErrorMessage=E7;z.invalidSelectionOnUnionErrorMessage=h7;z.duplicateOverriddenFieldErrorMessage=y7;z.duplicateOverriddenFieldsError=I7;z.noFieldDefinitionsError=g7;z.noInputValueDefinitionsError=_7;z.allChildDefinitionsAreInaccessibleError=v7;z.equivalentSourceAndTargetOverrideErrorMessage=S7;z.undefinedEntityInterfaceImplementationsError=O7;z.orScopesLimitError=D7;z.invalidEventDrivenGraphError=b7;z.invalidRootTypeFieldEventsDirectivesErrorMessage=A7;z.invalidEventDrivenMutationResponseTypeErrorMessage=R7;z.invalidRootTypeFieldResponseTypesEventDrivenErrorMessage=F7;z.invalidNatsStreamInputFieldsErrorMessage=P7;z.invalidKeyFieldSetsEventDrivenErrorMessage=w7;z.nonExternalKeyFieldNamesEventDrivenErrorMessage=L7;z.nonKeyFieldNamesEventDrivenErrorMessage=C7;z.nonEntityObjectExtensionsEventDrivenErrorMessage=B7;z.nonKeyComposingObjectTypeNamesEventDrivenErrorMessage=U7;z.invalidEdfsDirectiveName=k7;z.invalidImplementedTypeError=M7;z.selfImplementationError=x7;z.invalidEventSubjectErrorMessage=q7;z.invalidEventSubjectsErrorMessage=V7;z.invalidEventSubjectsItemErrorMessage=j7;z.invalidEventSubjectsArgumentErrorMessage=K7;z.undefinedEventSubjectsArgumentErrorMessage=G7;z.invalidEventDirectiveError=$7;z.invalidReferencesOfInaccessibleTypeError=Q7;z.inaccessibleRequiredInputValueError=Y7;z.invalidUnionMemberTypeError=J7;z.invalidRootTypeError=H7;z.invalidSubscriptionFilterLocationError=z7;z.invalidSubscriptionFilterDirectiveError=W7;z.subscriptionFilterNamedTypeErrorMessage=X7;z.subscriptionFilterConditionDepthExceededErrorMessage=Z7;z.subscriptionFilterConditionInvalidInputFieldNumberErrorMessage=eZ;z.subscriptionFilterConditionInvalidInputFieldErrorMessage=tZ;z.subscriptionFilterConditionInvalidInputFieldTypeErrorMessage=nZ;z.subscriptionFilterArrayConditionInvalidItemTypeErrorMessage=rZ;z.subscriptionFilterArrayConditionInvalidLengthErrorMessage=iZ;z.invalidInputFieldTypeErrorMessage=aZ;z.subscriptionFieldConditionInvalidInputFieldErrorMessage=sZ;z.subscriptionFieldConditionInvalidValuesArrayErrorMessage=oZ;z.subscriptionFieldConditionEmptyValuesArrayErrorMessage=uZ;z.unknownFieldSubgraphNameError=cZ;z.invalidSubscriptionFieldConditionFieldPathErrorMessage=lZ;z.invalidSubscriptionFieldConditionFieldPathParentErrorMessage=dZ;z.undefinedSubscriptionFieldConditionFieldPathFieldErrorMessage=pZ;z.invalidSubscriptionFieldConditionFieldPathFieldErrorMessage=fZ;z.inaccessibleSubscriptionFieldConditionFieldPathFieldErrorMessage=mZ;z.nonLeafSubscriptionFieldConditionFieldPathFinalFieldErrorMessage=NZ;z.unresolvablePathError=TZ;z.allExternalFieldInstancesError=EZ;z.externalInterfaceFieldsError=hZ;z.nonExternalConditionalFieldError=yZ;z.incompatibleFederatedFieldNamedTypeError=IZ;z.unknownNamedTypeErrorMessage=$L;z.unknownNamedTypeError=gZ;z.unknownFieldDataError=_Z;z.unexpectedNonCompositeOutputTypeError=vZ;z.invalidExternalDirectiveError=SZ;z.configureDescriptionNoDescriptionError=OZ;z.configureDescriptionPropagationError=DZ;z.duplicateDirectiveDefinitionArgumentErrorMessage=bZ;z.duplicateDirectiveDefinitionLocationErrorMessage=AZ;z.invalidDirectiveDefinitionLocationErrorMessage=RZ;z.invalidDirectiveDefinitionError=FZ;z.fieldAlreadyProvidedErrorMessage=PZ;z.invalidInterfaceObjectImplementationDefinitionsError=wZ;var qL=Ae(),Ze=lr(),VL=nl(),tp=Hr();z.minimumSubgraphRequirementError=new Error("At least one subgraph is required for federation.");function t9(e,t,n){return new Error(`The named type "${e}" is defined as both types "${t}" and "${n}". +However, there must be only one type named "${e}".`)}function n9(e,t,n,r){return new Error(`Incompatible types when merging two instances of argument "${e}" on path "${t}": + Expected type "${n}" but received "${r}"`)}function r9(e,t,n,r){return new Error(`The ${e} of type "${n}" defined on path "${t}" is incompatible with the default value of "${r}".`)}function i9(e,t,n){return new Error(`Incompatible types when merging two instances of "${e}": + Expected type "${t}" but received "${n}"`)}function a9(e,t,n,r,i){return new Error(`Expected the ${e} defined on path "${t}" to define the default value "${r}". "However, the default value "${i}" is defined in the following subgraph`+(n.length>1?"s":"")+`: - "`+n.join(Xe.QUOTATION_JOIN)+`" -If an instance defines a default value, that default value must be consistently defined across all subgraphs.`)}function i9(e){return new Error(`Enum "${e}" was used as both an input and output but was inconsistently defined across inclusive subgraphs.`)}function a9(e,t){let n="Subgraphs to be federated must each have a unique, non-empty name.";e.length>0&&(n+=` + "`+n.join(Ze.QUOTATION_JOIN)+`" +If an instance defines a default value, that default value must be consistently defined across all subgraphs.`)}function s9(e){return new Error(`Enum "${e}" was used as both an input and output but was inconsistently defined across inclusive subgraphs.`)}function o9(e,t){let n="Subgraphs to be federated must each have a unique, non-empty name.";e.length>0&&(n+=` The following subgraph names are not unique: "`+e.join('", "')+'"');for(let r of t)n+=` - ${r}`;return new Error(n)}function s9(e){return new Error(`The directive "${e}" must only be defined once.`)}function o9(e,t){return new Error(`The Enum "${e}" must only define the Enum value definition "${t}" once.`)}function u9(e,t,n){return new Error(`The ${e} "${t}" must only define the field definition "${n}" once.`)}function c9(e,t){return new Error(`The Input Object "${e}" must only define the Input field definition "${t}" once.`)}function l9(e,t,n){return new Error(`The ${e} "${t}" must only implement the Interface "${n}" once.`)}function d9(e,t){return new Error(`The Union "${e}" must only define the Union member "${t}" once.`)}function p9(e,t){return new Error(`The ${e} "${t}" must only be defined once.`)}function f9(e,t,n){return new Error(`The operation type "${e}" cannot be defined as "${t}" because it has already been defined as "${n}".`)}function m9(e,t){return new Error(`The ${e} "${t}" is an extension, but no base ${e} definition of "${t}" is defined in any subgraph.`)}function T9(e){return new Error(`The Scalar extension "${e}" is invalid because no base Scalar definition of "${e} is defined in the subgraph.`)}function N9(e){return new Error(`The Union "${e}" must define at least one Union member.`)}function h9(e){return new Error(`The Enum "${e}" must define at least one Enum value.`)}function E9(e,t,n){return new Error(`Expected the response type "${e}" for operation "${t}" to be type Object but received "${n}.`)}function y9(e,t){let n=e.name,r=[];for(let[i,a]of e.fieldDataByFieldName){if(!t.has(i))continue;let o=[],c=[];for(let[l,p]of a.isShareableBySubgraphName)p?o.push(l):c.push(l);o.length<1?r.push(` + ${r}`;return new Error(n)}function u9(e){return new Error(`The directive "${e}" must only be defined once.`)}function c9(e,t){return new Error(`The Enum "${e}" must only define the Enum value definition "${t}" once.`)}function l9(e,t,n){return new Error(`The ${e} "${t}" must only define the field definition "${n}" once.`)}function d9(e,t){return new Error(`The Input Object "${e}" must only define the Input field definition "${t}" once.`)}function p9(e,t,n){return new Error(`The ${e} "${t}" must only implement the Interface "${n}" once.`)}function f9(e,t){return new Error(`The Union "${e}" must only define the Union member "${t}" once.`)}function m9(e,t){return new Error(`The ${e} "${t}" must only be defined once.`)}function N9(e,t,n){return new Error(`The operation type "${e}" cannot be defined as "${t}" because it has already been defined as "${n}".`)}function T9(e,t){return new Error(`The ${e} "${t}" is an extension, but no base ${e} definition of "${t}" is defined in any subgraph.`)}function E9(e){return new Error(`The Scalar extension "${e}" is invalid because no base Scalar definition of "${e} is defined in the subgraph.`)}function h9(e){return new Error(`The Union "${e}" must define at least one Union member.`)}function y9(e){return new Error(`The Enum "${e}" must define at least one Enum value.`)}function I9(e,t,n){return new Error(`Expected the response type "${e}" for operation "${t}" to be type Object but received "${n}.`)}function g9(e,t){let n=e.name,r=[];for(let[i,a]of e.fieldDataByFieldName){if(!t.has(i))continue;let o=[],c=[];for(let[l,p]of a.isShareableBySubgraphName)p?o.push(l):c.push(l);o.length<1?r.push(` The field "${i}" is defined in the following subgraphs: "${[...a.subgraphNames].join('", "')}". However, it is not declared "@shareable" in any of them.`):r.push(` - The field "${i}" is defined and declared "@shareable" in the following subgraph`+(o.length>1?"s":"")+': "'+o.join(Xe.QUOTATION_JOIN)+`". - However, it is not declared "@shareable" in the following subgraph`+(c.length>1?"s":"")+`: "${c.join(Xe.QUOTATION_JOIN)}".`)}return new Error(`The Object "${n}" defines the same fields in multiple subgraphs without the "@shareable" directive:${r.join(` -`)}`)}function I9(e,t){return new Error(`The directive "@${e}" declared on coordinates "${t}" is not defined in the schema.`)}function g9(e){return new Error(` The type "${e}" was referenced in the schema, but it was never defined.`)}function _9(e){return`The definition for the directive "@${e}" does not define it as repeatable, but it is declared more than once on these coordinates.`}function v9(e,t,n,r){return new Error(`The ${n} instance of the directive "@${e}" declared on coordinates "${t}" is invalid for the following reason`+(r.length>1?`s: + The field "${i}" is defined and declared "@shareable" in the following subgraph`+(o.length>1?"s":"")+': "'+o.join(Ze.QUOTATION_JOIN)+`". + However, it is not declared "@shareable" in the following subgraph`+(c.length>1?"s":"")+`: "${c.join(Ze.QUOTATION_JOIN)}".`)}return new Error(`The Object "${n}" defines the same fields in multiple subgraphs without the "@shareable" directive:${r.join(` +`)}`)}function _9(e,t){return new Error(`The directive "@${e}" declared on coordinates "${t}" is not defined in the schema.`)}function v9(e){return new Error(` The type "${e}" was referenced in the schema, but it was never defined.`)}function S9(e){return`The definition for the directive "@${e}" does not define it as repeatable, but it is declared more than once on these coordinates.`}function O9(e,t,n,r){return new Error(`The ${n} instance of the directive "@${e}" declared on coordinates "${t}" is invalid for the following reason`+(r.length>1?`s: `:`: `)+r.join(` -`))}function S9(e,t){return new Error(`The definition for the directive "@${e}" does not define it as repeatable, but the directive has been declared on more than one instance of the type "${t}".`)}function O9(e,t){return` The definition for "@${e}" does not define "${t}" as a valid location.`}function b9(e,t,n){let r=` The definition for "@${e}" defines the following `+t.length+" required argument"+(t.length>1?"s: ":": ")+'"'+t.join('", "')+`". - However,`;return n.length<1?r+" no arguments are defined on this instance.":r+" the following required argument"+(n.length>1?"s are":" is")+' not defined on this instance: "'+n.join(Xe.QUOTATION_JOIN)+'".'}function D9(e,t){return` The definition for "@${e}" does not define the following argument`+(t.length>1?"s that are":" that is")+' provided: "'+t.join(Xe.QUOTATION_JOIN)+'".'}function A9(e){return" The following argument"+(e.length>1?"s are":" is")+' defined more than once: "'+e.join(Xe.QUOTATION_JOIN)+'"'}function R9(e,t,n,r){return` The value "${e}" provided to argument "${t}(${n}: ...)" is not a valid "${r}" type.`}function F9(e,t){return new Error(`The entity "${e}" defines the following invalid "key" directive`+(t.length>1?"s":"")+`: +`))}function D9(e,t){return new Error(`The definition for the directive "@${e}" does not define it as repeatable, but the directive has been declared on more than one instance of the type "${t}".`)}function b9(e,t){return` The definition for "@${e}" does not define "${t}" as a valid location.`}function A9(e,t,n){let r=` The definition for "@${e}" defines the following `+t.length+" required argument"+(t.length>1?"s: ":": ")+'"'+t.join('", "')+`". + However,`;return n.length<1?r+" no arguments are defined on this instance.":r+" the following required argument"+(n.length>1?"s are":" is")+' not defined on this instance: "'+n.join(Ze.QUOTATION_JOIN)+'".'}function R9(e,t){return` The definition for "@${e}" does not define the following argument`+(t.length>1?"s that are":" that is")+' provided: "'+t.join(Ze.QUOTATION_JOIN)+'".'}function F9(e){return" The following argument"+(e.length>1?"s are":" is")+' defined more than once: "'+e.join(Ze.QUOTATION_JOIN)+'"'}function P9(e,t,n,r){return` The value "${e}" provided to argument "${t}(${n}: ...)" is not a valid "${r}" type.`}function w9(e,t){return new Error(`The entity "${e}" defines the following invalid "key" directive`+(t.length>1?"s":"")+`: `+t.join(` -`))}function P9(e){return new Error(` The type defined at path "${e}" has more than ${xL.MAXIMUM_TYPE_NESTING} layers of nesting, or there is a cyclical error.`)}function w9(e){return new Error(`Fatal: Unexpected type for "${e}"`)}function L9(e,t,n){return new Error(`Fatal: Expected "${e}" to be type ${(0,ep.kindToTypeString)(t)} but received "${(0,ep.kindToTypeString)(n)}".`)}function C9(e,t){return new Error(`Fatal: The type "${e}" visited the following unexpected edge`+(t.length>1?"s":"")+`: - " ${t.join(Xe.QUOTATION_JOIN)}".`)}function B9(e,t,n){return new Error(` When merging types, expected "${e}" to be type "${t}" but received "${n}".`)}function U9(e){return new Error(`Fatal: Unsuccessfully merged the cross-subgraph types of field "${e}" without producing a type error object.`)}function k9(e){return new Error(`Fatal: Expected all constituent types at path "${e}" to be one of the following: "LIST_TYPE", "NAMED_TYPE", or "NON_NULL_TYPE".`)}function M9(e,t){return new Error(`Fatal: Expected key "${e}" to exist in the map "${t}".`)}z.subgraphValidationFailureError=new Error(" Fatal: Subgraph validation did not return a valid AST.");function x9(e,t,n,r,i){return new Error(` Expected "${e}" to be type ${t} but received "${n}" when handling child "${r}" of type "${i}".`)}function q9(e,t){return new Error(`The subgraph "${e}" could not be federated for the following reason`+(t.length>1?"s":"")+`: +`))}function L9(e){return new Error(` The type defined at path "${e}" has more than ${VL.MAXIMUM_TYPE_NESTING} layers of nesting, or there is a cyclical error.`)}function C9(e){return new Error(`Fatal: Unexpected type for "${e}"`)}function B9(e,t,n){return new Error(`Fatal: Expected "${e}" to be type ${(0,tp.kindToTypeString)(t)} but received "${(0,tp.kindToTypeString)(n)}".`)}function U9(e,t){return new Error(`Fatal: The type "${e}" visited the following unexpected edge`+(t.length>1?"s":"")+`: + " ${t.join(Ze.QUOTATION_JOIN)}".`)}function k9(e,t,n){return new Error(` When merging types, expected "${e}" to be type "${t}" but received "${n}".`)}function M9(e){return new Error(`Fatal: Unsuccessfully merged the cross-subgraph types of field "${e}" without producing a type error object.`)}function x9(e){return new Error(`Fatal: Expected all constituent types at path "${e}" to be one of the following: "LIST_TYPE", "NAMED_TYPE", or "NON_NULL_TYPE".`)}function q9(e,t){return new Error(`Fatal: Expected key "${e}" to exist in the map "${t}".`)}z.subgraphValidationFailureError=new Error(" Fatal: Subgraph validation did not return a valid AST.");function V9(e,t,n,r,i){return new Error(` Expected "${e}" to be type ${t} but received "${n}" when handling child "${r}" of type "${i}".`)}function j9(e,t){return new Error(`The subgraph "${e}" could not be federated for the following reason`+(t.length>1?"s":"")+`: `+t.map(n=>n.message).join(` -`))}function V9(e,t){return`The ${(0,ep.numberToOrdinal)(e+1)} subgraph in the array did not define a name. Consequently, any further errors will temporarily identify this subgraph as "${t}".`}function j9(e,t,n){return new Error(`The schema definition defines the "${e}" operation as type "${t}". However, "${t}" was also used for the "${n}" operation. - If explicitly defined, each operation type must be a unique and valid Object type.`)}function K9(e,t,n){return new Error(`The schema definition defines the "${e}" operation as type "${t}". However, the schema also defines another type named "${n}", which is the default (root) type name for the "${e}" operation. -For federation, it is only possible to use the default root types names ("Mutation", "Query", "Subscription") as operation definitions. No other definitions with these default root type names are valid.`)}function G9(e){let t="The subgraph has syntax errors and could not be parsed.";return e&&(t+=` - The reason provided was: `+e.message),new Error(t)}function $9(e,t,n){let r=[];for(let[i,a]of n){let o=` The implementation of Interface "${i}" by "${e}" is invalid because: +`))}function K9(e,t){return`The ${(0,tp.numberToOrdinal)(e+1)} subgraph in the array did not define a name. Consequently, any further errors will temporarily identify this subgraph as "${t}".`}function G9(e,t,n){return new Error(`The schema definition defines the "${e}" operation as type "${t}". However, "${t}" was also used for the "${n}" operation. + If explicitly defined, each operation type must be a unique and valid Object type.`)}function $9(e,t,n){return new Error(`The schema definition defines the "${e}" operation as type "${t}". However, the schema also defines another type named "${n}", which is the default (root) type name for the "${e}" operation. +For federation, it is only possible to use the default root types names ("Mutation", "Query", "Subscription") as operation definitions. No other definitions with these default root type names are valid.`)}function Q9(e){let t="The subgraph has syntax errors and could not be parsed.";return e&&(t+=` + The reason provided was: `+e.message),new Error(t)}function Y9(e,t,n){let r=[];for(let[i,a]of n){let o=` The implementation of Interface "${i}" by "${e}" is invalid because: `,c=a.unimplementedFields.length;c&&(o+=` The following field${c>1?"s are":" is"} not implemented: "`+a.unimplementedFields.join('", "')+`" -`);for(let[l,p]of a.invalidFieldImplementations){let N=p.unimplementedArguments.size,y=p.invalidImplementedArguments.length,g=p.invalidAdditionalArguments.size;if(o+=` The field "${l}" is invalid because: -`,N&&(o+=` The following argument${N>1?"s are":" is"} not implemented: "`+[...p.unimplementedArguments].join('", "')+`" +`);for(let[l,p]of a.invalidFieldImplementations){let T=p.unimplementedArguments.size,y=p.invalidImplementedArguments.length,g=p.invalidAdditionalArguments.size;if(o+=` The field "${l}" is invalid because: +`,T&&(o+=` The following argument${T>1?"s are":" is"} not implemented: "`+[...p.unimplementedArguments].join('", "')+`" `),y){o+=` The following implemented argument${y>1?"s are":" is"} invalid: `;for(let _ of p.invalidImplementedArguments)o+=` The argument "${_.argumentName}" must define type "`+_.expectedType+`" and not "${_.actualType}" `}g&&(o+=` If a field from an Interface is implemented, any additional Arguments that were not defined on the original Interface field must be optional (nullable). @@ -230,89 +230,89 @@ For federation, it is only possible to use the default root types names ("Mutati Consequently, the Interface implementation cannot be satisfied. `)}r.push(o)}return new Error(`The ${t} "${e}" has the following Interface implementation errors: `+r.join(` -`))}function Q9(e,t,n,r=!0){let i=r?Xe.ARGUMENT:Xe.INPUT_FIELD,a=`The ${e} "${t}" could not be federated because: +`))}function J9(e,t,n,r=!0){let i=r?Ze.ARGUMENT:Ze.INPUT_FIELD,a=`The ${e} "${t}" could not be federated because: `;for(let o of n)a+=` The ${i} "${o.inputValueName}" is required in the following subgraph`+(o.requiredSubgraphs.length>1?"s":"")+': "'+o.requiredSubgraphs.join('", "')+`" However, the ${i} "${o.inputValueName}" is not defined in the following subgraph`+(o.missingSubgraphs.length>1?"s":"")+': "'+o.missingSubgraphs.join('", "')+`" If an ${i} is required on a ${e} in any one subgraph, it must be at least defined as optional on all other definitions of that ${e} in all other subgraphs. -`;return new Error(a)}function Y9(e,t){return new Error(`The field "${e}" is invalid because: - The following argument`+(t.length>1?"s are":" is")+' defined more than once: "'+t.join(Xe.QUOTATION_JOIN)+`" -`)}function J9(e,t){let n=`The field "${e}" is invalid because: +`;return new Error(a)}function H9(e,t){return new Error(`The field "${e}" is invalid because: + The following argument`+(t.length>1?"s are":" is")+' defined more than once: "'+t.join(Ze.QUOTATION_JOIN)+`" +`)}function z9(e,t){let n=`The field "${e}" is invalid because: The named type (root type) of an input must be on of Enum, Input Object, or Scalar type. For example: "Float", "[[String!]]!", or "[SomeInputObjectName]" `;for(let r of t)n+=` The argument "${r.argumentName}" defines type "${r.typeName}" but the named type "${r.namedType}" is type "`+r.typeString+`", which is not a valid input type. -`;return new Error(n)}function H9(e=!0){return new Error(`The ${e?"router":"client"} schema does not define at least one accessible query root type field after federation was completed, which is necessary for a federated graph to be valid. +`;return new Error(n)}function W9(e=!0){return new Error(`The ${e?"router":"client"} schema does not define at least one accessible query root type field after federation was completed, which is necessary for a federated graph to be valid. For example: type Query { dummy: String - }`)}z.inaccessibleQueryRootTypeError=new Error('The root query type "Query" must be present in the client schema; consequently, it must not be declared "@inaccessible".');function z9(e){return new Error(`Expected object "${e}" to define a "key" directive, but it defines no directives.`)}z.inlineFragmentInFieldSetErrorMessage=" Inline fragments are not currently supported within a field set argument.";function W9(e,t,n,r){return` The following field set is invalid: + }`)}z.inaccessibleQueryRootTypeError=new Error('The root query type "Query" must be present in the client schema; consequently, it must not be declared "@inaccessible".');function X9(e){return new Error(`Expected object "${e}" to define a "key" directive, but it defines no directives.`)}z.inlineFragmentInFieldSetErrorMessage=" Inline fragments are not currently supported within a field set argument.";function Z9(e,t,n,r){return` The following field set is invalid: "${e}" This is because "${t}" returns "${n}", which is type "${r}". - Fields that return abstract types (Interfaces and Unions) cannot be included in the field set of "@key" directives.`}function X9(e,t,n){return` The following field set is invalid: + Fields that return abstract types (Interfaces and Unions) cannot be included in the field set of "@key" directives.`}function e7(e,t,n){return` The following field set is invalid: "${e}" - This is because "${t}" returns the unknown type "${n}".`}function Z9(e,t,n,r){return` The following field set is invalid: + This is because "${t}" returns the unknown type "${n}".`}function t7(e,t,n,r){return` The following field set is invalid: "${e}" - This is because of the selection set corresponding to the `+mT(t,n,r)+` Composite types such as "${r}" types must define a selection set with at least one field selection.`}function e7(e,t,n,r){return` The following field set is invalid: + This is because of the selection set corresponding to the `+NN(t,n,r)+` Composite types such as "${r}" types must define a selection set with at least one field selection.`}function n7(e,t,n,r){return` The following field set is invalid: "${e}" - This is because of the selection set corresponding to the `+mT(t,n,r)+` Non-composite types such as "${r}" cannot define a selection set.`}function t7(e,t,n){return` The following field set is invalid: + This is because of the selection set corresponding to the `+NN(t,n,r)+` Non-composite types such as "${r}" cannot define a selection set.`}function r7(e,t,n){return` The following field set is invalid: "${e}" This is because of the selection set corresponding to the field coordinates "${t}.${n}". - The type "${t}" does not define a field named "${n}".`}function n7(e,t){let n=` The following field set is invalid: + The type "${t}" does not define a field named "${n}".`}function i7(e,t){let n=` The following field set is invalid: "${e}" The field set could not be parsed.`;return t&&(n+=` - The reason provided was: `+t.message),n}function r7(e,t){return` The following field set is invalid: + The reason provided was: `+t.message),n}function a7(e,t){return` The following field set is invalid: "${e}" - This is because the selection set defined on "${t}" could not be parsed.`}function i7(e){return new Error(` Expected an object/interface or object/interface extension named "${e}" to exist.`)}function a7(e,t,n){return` The following field set is invalid: + This is because the selection set defined on "${t}" could not be parsed.`}function s7(e){return new Error(` Expected an object/interface or object/interface extension named "${e}" to exist.`)}function o7(e,t,n){return` The following field set is invalid: "${e}" - This is because "${t}" does not define an argument named "${n}".`}function s7(e,t){return` The following field set is invalid: + This is because "${t}" does not define an argument named "${n}".`}function u7(e,t){return` The following field set is invalid: "${e}" This is because "${t}" defines arguments. - Fields that define arguments cannot be included in the field set of @key directives.`}function o7(e,t){return new Error(`The following "${e}" directive`+(t.length>1?"s are":" is")+` invalid: + Fields that define arguments cannot be included in the field set of @key directives.`}function c7(e,t){return new Error(`The following "${e}" directive`+(t.length>1?"s are":" is")+` invalid: `+t.join(` -`))}function u7(e,t){return` The following field set is invalid: +`))}function l7(e,t){return` The following field set is invalid: "${e}" - This is because "${t}" was included in the field set more than once.`}function c7(e,t,n){return` Expected ConfigurationData to exist for type "${e}" when adding field "${t}" while validating field set "${n}".`}function l7(e,t){return` A "@provides" directive is declared on field "${e}". - However, the response type "${t}" is not an Object nor Interface.`}function J_(e,t,n=!1){return e.length<1?`enclosing type name "${t}". + This is because "${t}" was included in the field set more than once.`}function d7(e,t,n){return` Expected ConfigurationData to exist for type "${e}" when adding field "${t}" while validating field set "${n}".`}function p7(e,t){return` A "@provides" directive is declared on field "${e}". + However, the response type "${t}" is not an Object nor Interface.`}function H_(e,t,n=!1){return e.length<1?`enclosing type name "${t}". `:`field coordinates "${e[e.length-1]}"`+(n?` that returns "${t}"`:"")+`. -`}function mT(e,t,n){return e.length<1?`enclosing type name "${t}", which is type "${n}". +`}function NN(e,t,n){return e.length<1?`enclosing type name "${t}", which is type "${n}". `:`field coordinates "${e[e.length-1]}" that returns "${t}", which is type "${n}". -`}function d7(e,t,n,r){return` The following field set is invalid: +`}function f7(e,t,n,r){return` The following field set is invalid: "${e}" - This is because an inline fragment with the type condition "${n}" is defined on the selection set corresponding to the `+J_(t,r,!0)+` However, "${r}" is not an abstract (Interface or Union) type. - Consequently, the only valid type condition at this selection set would be "${r}".`}function p7(e,t){return` The following field set is invalid: + This is because an inline fragment with the type condition "${n}" is defined on the selection set corresponding to the `+H_(t,r,!0)+` However, "${r}" is not an abstract (Interface or Union) type. + Consequently, the only valid type condition at this selection set would be "${r}".`}function m7(e,t){return` The following field set is invalid: "${e}" - This is because "${t}" defines an inline fragment without a type condition.`}function f7(e,t,n,r){return` The following field set is invalid: + This is because "${t}" defines an inline fragment without a type condition.`}function N7(e,t,n,r){return` The following field set is invalid: "${e}" - This is because an inline fragment with the unknown type condition "${r}" is defined on the selection set corresponding to the `+J_(t,n)}function m7(e,t,n,r,i){return` The following field set is invalid: + This is because an inline fragment with the unknown type condition "${r}" is defined on the selection set corresponding to the `+H_(t,n)}function T7(e,t,n,r,i){return` The following field set is invalid: "${e}" - This is because an inline fragment with the type condition "${r}" is defined on the selection set corresponding to the `+J_(t,n)+` However, "${r}" is type "${i}" when types "Interface" or "Object" would be expected.`}function T7(e,t,n,r,i){let a=` The following field set is invalid: + This is because an inline fragment with the type condition "${r}" is defined on the selection set corresponding to the `+H_(t,n)+` However, "${r}" is type "${i}" when types "Interface" or "Object" would be expected.`}function E7(e,t,n,r,i){let a=` The following field set is invalid: "${e}" - This is because an inline fragment with the type condition "${n}" is defined on the selection set corresponding to the `+mT(t,i,r);return r===Xe.INTERFACE?a+` However, "${n}" does not implement "${i}"`:a+` However, "${n}" is not a member of "${i}".`}function N7(e,t,n){return` The following field set is invalid: + This is because an inline fragment with the type condition "${n}" is defined on the selection set corresponding to the `+NN(t,i,r);return r===Ze.INTERFACE?a+` However, "${n}" does not implement "${i}"`:a+` However, "${n}" is not a member of "${i}".`}function h7(e,t,n){return` The following field set is invalid: "${e}" - This is because of the selection set corresponding to the `+mT(t,n,Xe.UNION)+` Union types such as "${n}" must define field selections (besides "__typename") on an inline fragment whose type condition corresponds to a constituent union member.`}function h7(e,t){return` The field "${e}" declares an @override directive in the following subgraphs: "`+t.join(Xe.QUOTATION_JOIN)+'".'}function E7(e){return new Error('The "@override" directive must only be declared on one single instance of a field. However, an "@override" directive was declared on more than one instance of the following field'+(e.length>1?"s":"")+': "'+e.join(Xe.QUOTATION_JOIN)+`". -`)}function y7(e,t){return new Error(`The ${e} "${t}" is invalid because it does not define any fields.`)}function I7(e){return new Error(`The Input Object "${e}" is invalid because it does not define any input values.`)}function g7(e,t,n){return new Error(`The ${e} "${t}" is invalid because all its ${n} definitions are declared "@inaccessible".`)}function _7(e,t){return`Cannot override field "${t}" because the source and target subgraph names are both "${e}"`}function v7(e,t){let n=`Federation was unsuccessful because any one subgraph that defines a specific entity interface must also define each and every entity object that implements that entity interface. -`;for(let[r,i]of e){let o=(0,ep.getOrThrowError)(t,r,"entityInterfaceFederationDataByTypeName").concreteTypeNames;n+=` Across all subgraphs, the entity interface "${r}" is implemented by the following entities`+(o.size>1?"s":"")+`: - "`+Array.from(o).join(Xe.QUOTATION_JOIN)+`" + This is because of the selection set corresponding to the `+NN(t,n,Ze.UNION)+` Union types such as "${n}" must define field selections (besides "__typename") on an inline fragment whose type condition corresponds to a constituent union member.`}function y7(e,t){return` The field "${e}" declares an @override directive in the following subgraphs: "`+t.join(Ze.QUOTATION_JOIN)+'".'}function I7(e){return new Error('The "@override" directive must only be declared on one single instance of a field. However, an "@override" directive was declared on more than one instance of the following field'+(e.length>1?"s":"")+': "'+e.join(Ze.QUOTATION_JOIN)+`". +`)}function g7(e,t){return new Error(`The ${e} "${t}" is invalid because it does not define any fields.`)}function _7(e){return new Error(`The Input Object "${e}" is invalid because it does not define any input values.`)}function v7(e,t,n){return new Error(`The ${e} "${t}" is invalid because all its ${n} definitions are declared "@inaccessible".`)}function S7(e,t){return`Cannot override field "${t}" because the source and target subgraph names are both "${e}"`}function O7(e,t){let n=`Federation was unsuccessful because any one subgraph that defines a specific entity interface must also define each and every entity object that implements that entity interface. +`;for(let[r,i]of e){let o=(0,tp.getOrThrowError)(t,r,"entityInterfaceFederationDataByTypeName").concreteTypeNames;n+=` Across all subgraphs, the entity interface "${r}" is implemented by the following entities`+(o.size>1?"s":"")+`: + "`+Array.from(o).join(Ze.QUOTATION_JOIN)+`" However, the definition of at least one of these implementations is missing in a subgraph that defines the entity interface "${r}": -`;for(let{subgraphName:c,concreteTypeNames:l}of i){let p=(0,ep.getEntriesNotInHashSet)(o,l);n+=` Subgraph "${c}" does not define the following implementations: "`+p.join(Xe.QUOTATION_JOIN)+`" -`}}return new Error(n)}function S7(e,t){return new Error(`The maximum number of OR scopes that can be defined by @requiresScopes on a single field is ${e}. However, the following coordinates attempt to define more: - "`+t.join(Xe.QUOTATION_JOIN)+`" -If you require more, please contact support.`)}function O7(e){return new Error(`An "Event Driven" graph\u2014a subgraph that defines event driven directives\u2014must not define any resolvers. +`;for(let{subgraphName:c,concreteTypeNames:l}of i){let p=(0,tp.getEntriesNotInHashSet)(o,l);n+=` Subgraph "${c}" does not define the following implementations: "`+p.join(Ze.QUOTATION_JOIN)+`" +`}}return new Error(n)}function D7(e,t){return new Error(`The maximum number of OR scopes that can be defined by @requiresScopes on a single field is ${e}. However, the following coordinates attempt to define more: + "`+t.join(Ze.QUOTATION_JOIN)+`" +If you require more, please contact support.`)}function b7(e){return new Error(`An "Event Driven" graph\u2014a subgraph that defines event driven directives\u2014must not define any resolvers. Consequently, any "@key" definitions must also include the "resolvable: false" argument. Moreover, only fields that compose part of an entity's (composite) key and are declared "@external" are permitted. `+e.join(` -`))}function b7(e){let t=` Root type fields defined in an Event Driven graph must define a valid events directive: +`))}function A7(e){let t=` Root type fields defined in an Event Driven graph must define a valid events directive: Mutation type fields must define either a edfs publish or request directive." Query type fields must define "@edfs__natsRequest" Subscription type fields must define an edfs subscribe directive The following root field path`+(e.size>1?"s are":" is")+` invalid: `;for(let[n,r]of e)r.definesDirectives?t+=` The root field path "${n}" defines the following invalid events directive`+(r.invalidDirectiveNames.length>1?"s":"")+': "@'+r.invalidDirectiveNames.join('", "@')+`" `:t+=` The root field path "${n}" does not define any valid events directives. -`;return t}function D7(e){let t=` Mutation type fields defined in an Event Driven graph must return the non-nullable type "edfs__PublishResult!", which has the following definition: +`;return t}function R7(e){let t=` Mutation type fields defined in an Event Driven graph must return the non-nullable type "edfs__PublishResult!", which has the following definition: type edfs__PublishResult { success: Boolean! } However, the following mutation field path`+(e.size>1?"s are":" is")+` invalid: `;for(let[n,r]of e)t+=` The mutation field path "${n}" returns "${r}". -`;return t}function A7(e){let t=` The named response type of root type fields defined in an Event Driven graph must be a non-nullable, non-list named type that is either an entity, an interface implemented by an entity, or a union of which an entity is a member. +`;return t}function F7(e){let t=` The named response type of root type fields defined in an Event Driven graph must be a non-nullable, non-list named type that is either an entity, an interface implemented by an entity, or a union of which an entity is a member. Consequently, the following root field path`+(e.size>1?"s are":" is")+` invalid: `;for(let[n,r]of e)t+=` The root field path "${n}", which returns the invalid type "${r}" `;return t}z.invalidNatsStreamInputErrorMessage=`The "streamConfiguration" argument must be a valid input object with the following form: @@ -320,20 +320,20 @@ Moreover, only fields that compose part of an entity's (composite) key and are d consumerInactiveThreshold: Int! = 30 consumerName: String! streamName: String! - }`;function R7(e,t,n,r){let i=z.invalidNatsStreamInputErrorMessage,a=[];return e.length>0&&a.push("The following required field"+(e.length>1?"s were":" was")+' not defined: "'+e.join(Xe.QUOTATION_JOIN)+'".'),t.length>0&&a.push("The following required field"+(t.length>1?"s were":" was")+' defined more than once: "'+t.join(Xe.QUOTATION_JOIN)+'".'),n.length>0&&a.push("The following required field"+(n.length>1?"s were":" was")+' not type "String!" with a minimum length of 1: "'+n.join(Xe.QUOTATION_JOIN)+'".'),r.length>0&&a.push("The following field"+(r.length>1?"s are":" is")+' not part of a valid "edfs__NatsStreamConfiguration" input definition: "'+r.join(Xe.QUOTATION_JOIN)+'".'),i+=` + }`;function P7(e,t,n,r){let i=z.invalidNatsStreamInputErrorMessage,a=[];return e.length>0&&a.push("The following required field"+(e.length>1?"s were":" was")+' not defined: "'+e.join(Ze.QUOTATION_JOIN)+'".'),t.length>0&&a.push("The following required field"+(t.length>1?"s were":" was")+' defined more than once: "'+t.join(Ze.QUOTATION_JOIN)+'".'),n.length>0&&a.push("The following required field"+(n.length>1?"s were":" was")+' not type "String!" with a minimum length of 1: "'+n.join(Ze.QUOTATION_JOIN)+'".'),r.length>0&&a.push("The following field"+(r.length>1?"s are":" is")+' not part of a valid "edfs__NatsStreamConfiguration" input definition: "'+r.join(Ze.QUOTATION_JOIN)+'".'),i+=` However, the provided input was invalid for the following reason`+(a.length>1?"s":"")+`: `+a.join(` - `),i}function F7(e=new Map){let t="";for(let[n,r]of e)t+=' The following "@key" field set'+(r.length>1?"s are":" is")+` defined on the entity "${n}" without a "resolvable: false" argument: - "`+r.join(Xe.QUOTATION_JOIN)+`" -`;return t}function P7(e){let t=" The following field"+(e.size>1?"s are referenced":" is referenced")+` within an entity "@key" field without an "@external" declaration: + `),i}function w7(e=new Map){let t="";for(let[n,r]of e)t+=' The following "@key" field set'+(r.length>1?"s are":" is")+` defined on the entity "${n}" without a "resolvable: false" argument: + "`+r.join(Ze.QUOTATION_JOIN)+`" +`;return t}function L7(e){let t=" The following field"+(e.size>1?"s are referenced":" is referenced")+` within an entity "@key" field without an "@external" declaration: `;for(let[n,r]of e)t+=` field "${r}" defined on path "${n}" -`;return t}function w7(e){let t=" The following field"+(e.size>1?"s are":" is")+` defined despite not composing part of a "@key" directive field set: +`;return t}function C7(e){let t=" The following field"+(e.size>1?"s are":" is")+` defined despite not composing part of a "@key" directive field set: `;for(let[n,r]of e)t+=` Field "${r}" defined on path "${n}" -`;return t}function L7(e){return`Only root types and entities (objects that define one or more primary keys with the "@key" directive) may be defined as object extensions in an Event Driven graph. +`;return t}function B7(e){return`Only root types and entities (objects that define one or more primary keys with the "@key" directive) may be defined as object extensions in an Event Driven graph. Consequently, the following object extension definition`+(e.length>1?"s are":" is")+` invalid: - "`+e.join(Xe.QUOTATION_JOIN)+`" -`}function C7(e){return` Only object definitions whose fields compose part of a "@key" directive's field set may be defined in an Event Driven graph. Consequently, the following object type definition`+(e.length>1?"s are":" is")+` invalid: - "`+e.join(Xe.QUOTATION_JOIN)+`" + "`+e.join(Ze.QUOTATION_JOIN)+`" +`}function U7(e){return` Only object definitions whose fields compose part of a "@key" directive's field set may be defined in an Event Driven graph. Consequently, the following object type definition`+(e.length>1?"s are":" is")+` invalid: + "`+e.join(Ze.QUOTATION_JOIN)+`" `}z.invalidEdfsPublishResultObjectErrorMessage=` The object "edfs__PublishResult" that was defined in the Event Driven graph is invalid and must instead have the following definition: type edfs__PublishResult { success: Boolean! @@ -342,138 +342,138 @@ Consequently, the following object extension definition`+(e.length>1?"s are":" i consumerInactiveThreshold: Int! = 30 consumerName: String! streamName: String! - }`;function B7(e){return new Error(`Could not retrieve definition for Event-Driven Federated Subscription directive "${e}".`)}function U7(e,t){let n=` Only interfaces can be implemented. However, the type "${e}" attempts to implement the following invalid type`+(t.size>1?"s":"")+`: + }`;function k7(e){return new Error(`Could not retrieve definition for Event-Driven Federated Subscription directive "${e}".`)}function M7(e,t){let n=` Only interfaces can be implemented. However, the type "${e}" attempts to implement the following invalid type`+(t.size>1?"s":"")+`: `;for(let[r,i]of t)n+=` "${r}", which is type "${i}" -`;return new Error(n)}function k7(e){return new Error(` The interface "${e}" must not implement itself.`)}function M7(e){return`The "${e}" argument must be string with a minimum length of one.`}function x7(e){return`The "${e}" argument must be a list of strings.`}function q7(e){return`Each item in the "${e}" argument list must be a string with a minimum length of one. However, at least one value provided in the list was invalid.`}function V7(e){return`An argument template references the invalid argument "${e}".`}function j7(e){return`An argument template references the undefined argument "${e}".`}z.invalidEventProviderIdErrorMessage='If explicitly defined, the "providerId" argument must be a string with a minimum length of one.';function K7(e,t,n){return new Error(`The event directive "${e}" declared on "${t}" is invalid for the following reason`+(n.length>1?"s":"")+`: +`;return new Error(n)}function x7(e){return new Error(` The interface "${e}" must not implement itself.`)}function q7(e){return`The "${e}" argument must be string with a minimum length of one.`}function V7(e){return`The "${e}" argument must be a list of strings.`}function j7(e){return`Each item in the "${e}" argument list must be a string with a minimum length of one. However, at least one value provided in the list was invalid.`}function K7(e){return`An argument template references the invalid argument "${e}".`}function G7(e){return`An argument template references the undefined argument "${e}".`}z.invalidEventProviderIdErrorMessage='If explicitly defined, the "providerId" argument must be a string with a minimum length of one.';function $7(e,t,n){return new Error(`The event directive "${e}" declared on "${t}" is invalid for the following reason`+(n.length>1?"s":"")+`: `+n.join(` - `))}function G7(e,t,n){return new Error(`The ${e} "${t}" is declared "@inaccessible"; however, the ${e} is still referenced at the following paths: - "`+n.join(Xe.QUOTATION_JOIN)+`" -`)}function $7(e,t){return new Error(`The ${e.kind===ML.Kind.ARGUMENT?"argument":"Input field"} "${e.name}" defined at coordinates "${e.federatedCoords}" is declared "@inaccessible"; however, it is a required ${e.kind===ML.Kind.ARGUMENT?"argument of field":"field of Input Object"} "${t}".`)}function Q7(e,t){return new Error(` The union "${e}" defines the following member`+(t.length>1?"s that are not object types":" that is not an object type")+`: + `))}function Q7(e,t,n){return new Error(`The ${e} "${t}" is declared "@inaccessible"; however, the ${e} is still referenced at the following paths: + "`+n.join(Ze.QUOTATION_JOIN)+`" +`)}function Y7(e,t){return new Error(`The ${e.kind===qL.Kind.ARGUMENT?"argument":"Input field"} "${e.name}" defined at coordinates "${e.federatedCoords}" is declared "@inaccessible"; however, it is a required ${e.kind===qL.Kind.ARGUMENT?"argument of field":"field of Input Object"} "${t}".`)}function J7(e,t){return new Error(` The union "${e}" defines the following member`+(t.length>1?"s that are not object types":" that is not an object type")+`: `+t.join(` - `))}function Y7(e){return new Error(`Expected type "${e}" to be a root type but could not find its respective OperationTypeNode.`)}function J7(e){return new Error(`The "@${Xe.SUBSCRIPTION_FILTER}" directive must only be defined on a subscription root field, but it was defined on the path "${e}".`)}function H7(e,t){return new Error(`The "@${Xe.SUBSCRIPTION_FILTER}" directive defined on path "${e}" is invalid for the following reason`+(t.length>1?"s":"")+`: + `))}function H7(e){return new Error(`Expected type "${e}" to be a root type but could not find its respective OperationTypeNode.`)}function z7(e){return new Error(`The "@${Ze.SUBSCRIPTION_FILTER}" directive must only be defined on a subscription root field, but it was defined on the path "${e}".`)}function W7(e,t){return new Error(`The "@${Ze.SUBSCRIPTION_FILTER}" directive defined on path "${e}" is invalid for the following reason`+(t.length>1?"s":"")+`: `+t.join(` -`))}function z7(e){return` Unknown type "${e}".`}function W7(e){return` The input path "${e}" exceeds the maximum depth of ${xL.MAX_SUBSCRIPTION_FILTER_DEPTH} for any one filter condition. - If you require a larger maximum depth, please contact support.`}var qL=` Each "${Xe.SUBSCRIPTION_FILTER_CONDITION}" input object must define exactly one of the following input value fields: "${Xe.AND_UPPER}", "${Xe.IN_UPPER}", "${Xe.NOT_UPPER}", or "${Xe.OR_UPPER}". -`;function X7(e,t){return qL+` However, input path "${e}" defines ${t} fields.`}function Z7(e,t){return qL+` However, input path "${e}" defines the invalid input value field "${t}".`}function eZ(e,t,n){return` Expected the value of input path "${e}" to be type "${t}" but received type "${n}"`}var VL=` An AND or OR input field defined on a "${Xe.SUBSCRIPTION_FILTER_CONDITION}" should define a list of 1\u20135 nested conditions. -`;function tZ(e,t){let n=t.length>1;return VL+" However, the following "+(n?"indices":"index")+` defined on input path "${e}" `+(n?"are":"is")+' not type "object": '+t.join(", ")}function nZ(e,t){return VL+` However, the list defined on input path "${e}" has a length of ${t}.`}function rZ(e,t,n){return` Expected the input path "${e}" to be type "${t}" but received "${n}".`}function iZ(e,t,n,r,i){let a=` Each "${Xe.SUBSCRIPTION_FIELD_CONDITION}" input object must only define the following two input value fields: "${Xe.FIELD_PATH}" and "${Xe.VALUES}". +`))}function X7(e){return` Unknown type "${e}".`}function Z7(e){return` The input path "${e}" exceeds the maximum depth of ${VL.MAX_SUBSCRIPTION_FILTER_DEPTH} for any one filter condition. + If you require a larger maximum depth, please contact support.`}var jL=` Each "${Ze.SUBSCRIPTION_FILTER_CONDITION}" input object must define exactly one of the following input value fields: "${Ze.AND_UPPER}", "${Ze.IN_UPPER}", "${Ze.NOT_UPPER}", or "${Ze.OR_UPPER}". +`;function eZ(e,t){return jL+` However, input path "${e}" defines ${t} fields.`}function tZ(e,t){return jL+` However, input path "${e}" defines the invalid input value field "${t}".`}function nZ(e,t,n){return` Expected the value of input path "${e}" to be type "${t}" but received type "${n}"`}var KL=` An AND or OR input field defined on a "${Ze.SUBSCRIPTION_FILTER_CONDITION}" should define a list of 1\u20135 nested conditions. +`;function rZ(e,t){let n=t.length>1;return KL+" However, the following "+(n?"indices":"index")+` defined on input path "${e}" `+(n?"are":"is")+' not type "object": '+t.join(", ")}function iZ(e,t){return KL+` However, the list defined on input path "${e}" has a length of ${t}.`}function aZ(e,t,n){return` Expected the input path "${e}" to be type "${t}" but received "${n}".`}function sZ(e,t,n,r,i){let a=` Each "${Ze.SUBSCRIPTION_FIELD_CONDITION}" input object must only define the following two input value fields: "${Ze.FIELD_PATH}" and "${Ze.VALUES}". However, input path "${e}" is invalid because:`;return t.length>0&&(a+=` The following required field`+(t.length>1?"s are":" is")+` not defined: - "`+t.join(Xe.QUOTATION_JOIN)+'"'),n.length>0&&(a+=` + "`+t.join(Ze.QUOTATION_JOIN)+'"'),n.length>0&&(a+=` The following required field`+(n.length>1?"s are":" is")+` defined more than once: - "`+n.join(Xe.QUOTATION_JOIN)+'"'),r.length>0&&(a+=` + "`+n.join(Ze.QUOTATION_JOIN)+'"'),r.length>0&&(a+=` The following invalid field`+(r.length>1?"s are":" is")+` defined: - "`+r.join(Xe.QUOTATION_JOIN)+'"'),i.length>0&&(a+=` + "`+r.join(Ze.QUOTATION_JOIN)+'"'),i.length>0&&(a+=` `+i.join(` - `)),a}var jL=` A "${Xe.SUBSCRIPTION_FIELD_CONDITION}" input object must define a "values" input value field with a list of at least one valid "${Xe.SUBSCRIPTION_FILTER_VALUE}" kind (boolean, enum, float, int, null, or string). -`;function aZ(e,t){let n=t.length>1;return jL+" However, the following "+(n?"indices":"index")+` defined on input path "${e}" `+(n?"are":"is")+` not a valid "${Xe.SUBSCRIPTION_FILTER_VALUE}": `+t.join(", ")}function sZ(e){return jL+` However, the list defined on input path "${e}" is empty.`}function oZ(e){return new Error(` Field "${e}" defined no subgraph names.`)}function uZ(e,t){return` Input path "${e}" defines the value "${t}", which is not a period (.) delimited field path.`}function cZ(e,t,n){return` Input path "${e}" defines the value "${t}". - However, "${n}" is not type "object"`}function lZ(e,t,n,r,i){return` Input path "${e}" defines the value "${t}". - However, the path "${n}" is invalid because no field named "${r}" exists on type "${i}".`}function dZ(e,t,n,r,i){return`Input path "${e}" defines the value "${t}". - However, only fields that are defined in the same graph as the "@${Xe.SUBSCRIPTION_FILTER}" directive can compose part of an "IN" condition's "fieldPath" input value field. - Consequently, the path "${n}" is invalid because field "${r}" is not defined in subgraph "${i}".`}function pZ(e,t,n,r){return` Input path "${e}" defines the value "${t}". - The path segment "${n}" is invalid because it refers to "${r}", which is declared "@inaccessible".`}function fZ(e,t,n,r,i){return` Input path "${e}" defines the value "${t}". - However, the final field "${n}" is ${r} "${i}", which is not a leaf type; therefore, it requires further selections.`}function mZ({fieldName:e,selectionSet:t},n){let r=`The field "${e}" is unresolvable at the following path: + `)),a}var GL=` A "${Ze.SUBSCRIPTION_FIELD_CONDITION}" input object must define a "values" input value field with a list of at least one valid "${Ze.SUBSCRIPTION_FILTER_VALUE}" kind (boolean, enum, float, int, null, or string). +`;function oZ(e,t){let n=t.length>1;return GL+" However, the following "+(n?"indices":"index")+` defined on input path "${e}" `+(n?"are":"is")+` not a valid "${Ze.SUBSCRIPTION_FILTER_VALUE}": `+t.join(", ")}function uZ(e){return GL+` However, the list defined on input path "${e}" is empty.`}function cZ(e){return new Error(` Field "${e}" defined no subgraph names.`)}function lZ(e,t){return` Input path "${e}" defines the value "${t}", which is not a period (.) delimited field path.`}function dZ(e,t,n){return` Input path "${e}" defines the value "${t}". + However, "${n}" is not type "object"`}function pZ(e,t,n,r,i){return` Input path "${e}" defines the value "${t}". + However, the path "${n}" is invalid because no field named "${r}" exists on type "${i}".`}function fZ(e,t,n,r,i){return`Input path "${e}" defines the value "${t}". + However, only fields that are defined in the same graph as the "@${Ze.SUBSCRIPTION_FILTER}" directive can compose part of an "IN" condition's "fieldPath" input value field. + Consequently, the path "${n}" is invalid because field "${r}" is not defined in subgraph "${i}".`}function mZ(e,t,n,r){return` Input path "${e}" defines the value "${t}". + The path segment "${n}" is invalid because it refers to "${r}", which is declared "@inaccessible".`}function NZ(e,t,n,r,i){return` Input path "${e}" defines the value "${t}". + However, the final field "${n}" is ${r} "${i}", which is not a leaf type; therefore, it requires further selections.`}function TZ({fieldName:e,selectionSet:t},n){let r=`The field "${e}" is unresolvable at the following path: ${t} This is because: - `+n.join(` - - `);return new Error(r)}function TZ(e,t){let n=`The Object "${e}" is invalid because the following field definition`+(t.size>1?"s are":" is")+` declared "@external" on all instances of that field: -`;for(let[r,i]of t)n+=` "${r}" in subgraph`+(i.length>1?"s":"")+' "'+i.join(Xe.QUOTATION_JOIN)+`" -`;return n+='At least one instance of a field definition must always be resolvable (and therefore not declared "@external").',new Error(n)}function NZ(e,t){return new Error(`The interface "${e}" is invalid because the following field definition`+(t.length>1?"s are":" is")+` declared "@external": - "`+t.join(Xe.QUOTATION_JOIN)+`" -Interface fields should not be declared "@external". This is because interface fields do not resolve directly, but the "@external" directive relates to whether a field instance can be resolved by the subgraph in which it is defined.`)}function hZ(e,t,n,r,i){return new Error(`The field "${e}" in subgraph "${t}" defines a "@${i}" directive with the following field set: + - `);return new Error(r)}function EZ(e,t){let n=`The Object "${e}" is invalid because the following field definition`+(t.size>1?"s are":" is")+` declared "@external" on all instances of that field: +`;for(let[r,i]of t)n+=` "${r}" in subgraph`+(i.length>1?"s":"")+' "'+i.join(Ze.QUOTATION_JOIN)+`" +`;return n+='At least one instance of a field definition must always be resolvable (and therefore not declared "@external").',new Error(n)}function hZ(e,t){return new Error(`The interface "${e}" is invalid because the following field definition`+(t.length>1?"s are":" is")+` declared "@external": + "`+t.join(Ze.QUOTATION_JOIN)+`" +Interface fields should not be declared "@external". This is because interface fields do not resolve directly, but the "@external" directive relates to whether a field instance can be resolved by the subgraph in which it is defined.`)}function yZ(e,t,n,r,i){return new Error(`The field "${e}" in subgraph "${t}" defines a "@${i}" directive with the following field set: "${r}". However, neither the field "${n}" nor any of its field set ancestors are declared "@external". -Consequently, "${n}" is already provided by subgraph "${t}" and should not form part of a "@${i}" directive field set.`)}function EZ(e,t){let n=[];for(let[r,i]of t){let a=[...i];n.push(` The named type "${r}" is returned by the following subgraph`+(a.length>1?"s":"")+': "'+a.join(Xe.QUOTATION_JOIN)+'".')}return new Error(`Each instance of a shared field must resolve identically across subgraphs. +Consequently, "${n}" is already provided by subgraph "${t}" and should not form part of a "@${i}" directive field set.`)}function IZ(e,t){let n=[];for(let[r,i]of t){let a=[...i];n.push(` The named type "${r}" is returned by the following subgraph`+(a.length>1?"s":"")+': "'+a.join(Ze.QUOTATION_JOIN)+'".')}return new Error(`Each instance of a shared field must resolve identically across subgraphs. The field "${e}" could not be federated due to incompatible types across subgraphs. The discrepancies are as follows: `+n.join(` -`))}function KL(e,t){return`The field "${e}" returns the unknown named type "${t}".`}function yZ(e,t){return new Error(KL(e,t))}function IZ(e){return new Error(`Could not find FieldData for field "${e}" -.This should never happen. Please report this issue on GitHub.`)}function gZ(e,t){return new Error(`Expected named type "${e}" to be a composite output type (Object or Interface) but received "${t}". -This should never happen. Please report this issue on GitHub.`)}function _Z(e){return new Error(`The Object field "${e}" is invalidly declared "@external". An Object field should only be declared "@external" if it is part of a "@key", "@provides", or "@requires" field set, or the field is necessary to satisfy an Interface implementation. In the case that none of these conditions is true, the "@external" directive should be removed.`)}function vZ(e,t){return new Error(`The "@openfed__configureDescription" directive defined on ${e} "${t}" is invalid because neither a description nor the "descriptionOverride" argument is defined.`)}function SZ(e,t){return new Error(`The coordinates "${e}" declare "@openfed__configureDescription(propagate: true)" in the following subgraphs: - "`+t.join(Xe.QUOTATION_JOIN)+`" -A federated graph only supports a single description; consequently, only one subgraph may define argument "propagate" as true (this is the default value).`)}function OZ(e){return"- The following argument"+(e.length>1?"s are":" is")+` defined more than once: - "`+e.join(Xe.QUOTATION_JOIN)+'"'}function bZ(e){return`- The location "${e}" is defined multiple times.`}function DZ(e){return`- "${e}" is not a valid directive location.`}function AZ(e,t){return new Error(`The directive definition for "@${e}" is invalid for the following reason`+(t.length>1?"s":"")+`: -`+t.join(Xe.LITERAL_NEW_LINE)+'"')}function RZ(e,t,n){return` The field "${e}" is unconditionally provided by subgraph "${t}" and should not form part of any "@${n}" field set. Although "${e}" is declared "@external", it is part of a "@key" directive on an extension type. Such fields are only declared "@external" for legacy syntactical reasons and are not internally considered "@external".`}function FZ(e,t,n){return new Error(`The subgraph that defines an entity Interface Object (using "@interfaceObject") must not define any implementation types of that interface. However, the subgraph "${t}" defines the entity Interface "${e}" as an Interface Object alongside the following implementation type`+(n.length>1?"s":"")+` of "${e}": - "`+n.join(Xe.QUOTATION_JOIN)+'"')}});var $L=P(GL=>{"use strict";f();T();m();Object.defineProperty(GL,"__esModule",{value:!0})});var Yo=P(Or=>{"use strict";f();T();m();Object.defineProperty(Or,"__esModule",{value:!0});Or.getMutableDirectiveDefinitionNode=wZ;Or.getMutableEnumNode=LZ;Or.getMutableEnumValueNode=CZ;Or.getMutableFieldNode=BZ;Or.getMutableInputObjectNode=UZ;Or.getMutableInputValueNode=kZ;Or.getMutableInterfaceNode=MZ;Or.getMutableObjectNode=xZ;Or.getMutableObjectExtensionNode=qZ;Or.getMutableScalarNode=VZ;Or.getMutableTypeNode=H_;Or.getMutableUnionNode=jZ;Or.getTypeNodeNamedTypeName=z_;Or.getNamedTypeNode=YL;var Sr=Ae(),nl=Jr(),QL=sa(),PZ=tl();function wZ(e){return{arguments:[],kind:e.kind,locations:[],name:k({},e.name),repeatable:e.repeatable,description:(0,nl.formatDescription)(e.description)}}function LZ(e){return{kind:Sr.Kind.ENUM_TYPE_DEFINITION,name:k({},e)}}function CZ(e){return{directives:[],kind:e.kind,name:k({},e.name),description:(0,nl.formatDescription)(e.description)}}function BZ(e,t,n){return{arguments:[],directives:[],kind:e.kind,name:k({},e.name),type:H_(e.type,t,n),description:(0,nl.formatDescription)(e.description)}}function UZ(e){return{kind:Sr.Kind.INPUT_OBJECT_TYPE_DEFINITION,name:k({},e)}}function kZ(e,t,n){return{directives:[],kind:e.kind,name:k({},e.name),type:H_(e.type,t,n),defaultValue:e.defaultValue,description:(0,nl.formatDescription)(e.description)}}function MZ(e){return{kind:Sr.Kind.INTERFACE_TYPE_DEFINITION,name:k({},e)}}function xZ(e){return{kind:Sr.Kind.OBJECT_TYPE_DEFINITION,name:k({},e)}}function qZ(e){let t=e.kind===Sr.Kind.OBJECT_TYPE_DEFINITION?e.description:void 0;return{kind:Sr.Kind.OBJECT_TYPE_EXTENSION,name:k({},e.name),description:(0,nl.formatDescription)(t)}}function VZ(e){return{kind:Sr.Kind.SCALAR_TYPE_DEFINITION,name:k({},e)}}function H_(e,t,n){let r={kind:e.kind},i=r;for(let a=0;a{"use strict";f();T();m();Object.defineProperty(TT,"__esModule",{value:!0});TT.DEFAULT_CONSUMER_INACTIVE_THRESHOLD=void 0;TT.DEFAULT_CONSUMER_INACTIVE_THRESHOLD=30});var Es=P(ne=>{"use strict";f();T();m();Object.defineProperty(ne,"__esModule",{value:!0});ne.MAX_OR_SCOPES=ne.EDFS_ARGS_REGEXP=ne.CONFIGURE_CHILD_DESCRIPTIONS_DEFINITION=ne.CONFIGURE_DESCRIPTION_DEFINITION=ne.EDFS_NATS_STREAM_CONFIGURATION_DEFINITION=ne.SCOPE_SCALAR_DEFINITION=ne.FIELD_SET_SCALAR_DEFINITION=ne.VERSION_TWO_DIRECTIVE_DEFINITIONS=ne.EVENT_DRIVEN_DIRECTIVE_DEFINITIONS_BY_DIRECTIVE_NAME=ne.BASE_DIRECTIVE_DEFINITIONS=ne.V2_DIRECTIVE_DEFINITION_BY_DIRECTIVE_NAME=ne.SUBSCRIPTION_FIELD_CONDITION_DEFINITION=ne.SUBSCRIPTION_FILTER_VALUE_DEFINITION=ne.SUBSCRIPTION_FILTER_CONDITION_DEFINITION=ne.SUBSCRIPTION_FILTER_DEFINITION=ne.SHAREABLE_DEFINITION=ne.REQUIRES_SCOPES_DEFINITION=ne.OVERRIDE_DEFINITION=ne.LINK_DEFINITION=ne.LINK_PURPOSE_DEFINITION=ne.LINK_IMPORT_DEFINITION=ne.INTERFACE_OBJECT_DEFINITION=ne.INACCESSIBLE_DEFINITION=ne.COMPOSE_DIRECTIVE_DEFINITION=ne.AUTHENTICATED_DEFINITION=ne.ALL_IN_BUILT_DIRECTIVE_NAMES=ne.BASE_DIRECTIVE_DEFINITION_BY_DIRECTIVE_NAME=ne.TAG_DEFINITION=ne.SPECIFIED_BY_DEFINITION=ne.REQUIRES_DEFINITION=ne.PROVIDES_DEFINITION=ne.KEY_DEFINITION=ne.REQUIRED_FIELDSET_TYPE_NODE=ne.EDFS_NATS_SUBSCRIBE_DEFINITION=ne.EDFS_NATS_REQUEST_DEFINITION=ne.EDFS_NATS_PUBLISH_DEFINITION=ne.EDFS_KAFKA_SUBSCRIBE_DEFINITION=ne.EDFS_KAFKA_PUBLISH_DEFINITION=ne.EXTERNAL_DEFINITION=ne.EXTENDS_DEFINITION=ne.DEPRECATED_DEFINITION=ne.BASE_SCALARS=ne.REQUIRED_STRING_TYPE_NODE=void 0;var pe=Ae(),se=Jr(),KZ=W_(),M=lr();ne.REQUIRED_STRING_TYPE_NODE={kind:pe.Kind.NON_NULL_TYPE,type:(0,se.stringToNamedTypeNode)(M.STRING_SCALAR)};ne.BASE_SCALARS=new Set(["_Any","_Entities",M.BOOLEAN_SCALAR,M.FLOAT_SCALAR,M.ID_SCALAR,M.INT_SCALAR,M.FIELD_SET_SCALAR,M.SCOPE_SCALAR,M.STRING_SCALAR]);ne.DEPRECATED_DEFINITION={arguments:[{directives:[],kind:pe.Kind.INPUT_VALUE_DEFINITION,name:(0,se.stringToNameNode)(M.REASON),type:(0,se.stringToNamedTypeNode)(M.STRING_SCALAR),defaultValue:{kind:pe.Kind.STRING,value:pe.DEFAULT_DEPRECATION_REASON}}],kind:pe.Kind.DIRECTIVE_DEFINITION,locations:(0,se.stringArrayToNameNodeArray)([M.ARGUMENT_DEFINITION_UPPER,M.ENUM_VALUE_UPPER,M.FIELD_DEFINITION_UPPER,M.INPUT_FIELD_DEFINITION_UPPER]),name:(0,se.stringToNameNode)(M.DEPRECATED),repeatable:!1};ne.EXTENDS_DEFINITION={kind:pe.Kind.DIRECTIVE_DEFINITION,locations:(0,se.stringArrayToNameNodeArray)([M.INTERFACE_UPPER,M.OBJECT_UPPER]),name:(0,se.stringToNameNode)(M.EXTENDS),repeatable:!1};ne.EXTERNAL_DEFINITION={kind:pe.Kind.DIRECTIVE_DEFINITION,locations:(0,se.stringArrayToNameNodeArray)([M.FIELD_DEFINITION_UPPER,M.OBJECT_UPPER]),name:(0,se.stringToNameNode)(M.EXTERNAL),repeatable:!1};ne.EDFS_KAFKA_PUBLISH_DEFINITION={arguments:[{kind:pe.Kind.INPUT_VALUE_DEFINITION,name:(0,se.stringToNameNode)(M.TOPIC),type:ne.REQUIRED_STRING_TYPE_NODE},{kind:pe.Kind.INPUT_VALUE_DEFINITION,name:(0,se.stringToNameNode)(M.PROVIDER_ID),type:ne.REQUIRED_STRING_TYPE_NODE,defaultValue:{kind:pe.Kind.STRING,value:M.DEFAULT_EDFS_PROVIDER_ID}}],kind:pe.Kind.DIRECTIVE_DEFINITION,locations:[(0,se.stringToNameNode)(M.FIELD_DEFINITION_UPPER)],name:(0,se.stringToNameNode)(M.EDFS_KAFKA_PUBLISH),repeatable:!1};ne.EDFS_KAFKA_SUBSCRIBE_DEFINITION={arguments:[{kind:pe.Kind.INPUT_VALUE_DEFINITION,name:(0,se.stringToNameNode)(M.TOPICS),type:{kind:pe.Kind.NON_NULL_TYPE,type:{kind:pe.Kind.LIST_TYPE,type:ne.REQUIRED_STRING_TYPE_NODE}}},{kind:pe.Kind.INPUT_VALUE_DEFINITION,name:(0,se.stringToNameNode)(M.PROVIDER_ID),type:ne.REQUIRED_STRING_TYPE_NODE,defaultValue:{kind:pe.Kind.STRING,value:M.DEFAULT_EDFS_PROVIDER_ID}}],kind:pe.Kind.DIRECTIVE_DEFINITION,locations:[(0,se.stringToNameNode)(M.FIELD_DEFINITION_UPPER)],name:(0,se.stringToNameNode)(M.EDFS_KAFKA_SUBSCRIBE),repeatable:!1};ne.EDFS_NATS_PUBLISH_DEFINITION={arguments:[{kind:pe.Kind.INPUT_VALUE_DEFINITION,name:(0,se.stringToNameNode)(M.SUBJECT),type:ne.REQUIRED_STRING_TYPE_NODE},{kind:pe.Kind.INPUT_VALUE_DEFINITION,name:(0,se.stringToNameNode)(M.PROVIDER_ID),type:{kind:pe.Kind.NON_NULL_TYPE,type:(0,se.stringToNamedTypeNode)(M.STRING_SCALAR)},defaultValue:{kind:pe.Kind.STRING,value:M.DEFAULT_EDFS_PROVIDER_ID}}],kind:pe.Kind.DIRECTIVE_DEFINITION,locations:[(0,se.stringToNameNode)(M.FIELD_DEFINITION_UPPER)],name:(0,se.stringToNameNode)(M.EDFS_NATS_PUBLISH),repeatable:!1};ne.EDFS_NATS_REQUEST_DEFINITION={arguments:[{kind:pe.Kind.INPUT_VALUE_DEFINITION,name:(0,se.stringToNameNode)(M.SUBJECT),type:{kind:pe.Kind.NON_NULL_TYPE,type:(0,se.stringToNamedTypeNode)(M.STRING_SCALAR)}},{kind:pe.Kind.INPUT_VALUE_DEFINITION,name:(0,se.stringToNameNode)(M.PROVIDER_ID),type:{kind:pe.Kind.NON_NULL_TYPE,type:(0,se.stringToNamedTypeNode)(M.STRING_SCALAR)},defaultValue:{kind:pe.Kind.STRING,value:M.DEFAULT_EDFS_PROVIDER_ID}}],kind:pe.Kind.DIRECTIVE_DEFINITION,locations:[(0,se.stringToNameNode)(M.FIELD_DEFINITION_UPPER)],name:(0,se.stringToNameNode)(M.EDFS_NATS_REQUEST),repeatable:!1};ne.EDFS_NATS_SUBSCRIBE_DEFINITION={arguments:[{kind:pe.Kind.INPUT_VALUE_DEFINITION,name:(0,se.stringToNameNode)(M.SUBJECTS),type:{kind:pe.Kind.NON_NULL_TYPE,type:{kind:pe.Kind.LIST_TYPE,type:ne.REQUIRED_STRING_TYPE_NODE}}},{kind:pe.Kind.INPUT_VALUE_DEFINITION,name:(0,se.stringToNameNode)(M.PROVIDER_ID),type:ne.REQUIRED_STRING_TYPE_NODE,defaultValue:{kind:pe.Kind.STRING,value:M.DEFAULT_EDFS_PROVIDER_ID}},{kind:pe.Kind.INPUT_VALUE_DEFINITION,name:(0,se.stringToNameNode)(M.STREAM_CONFIGURATION),type:(0,se.stringToNamedTypeNode)(M.EDFS_NATS_STREAM_CONFIGURATION)}],kind:pe.Kind.DIRECTIVE_DEFINITION,locations:[(0,se.stringToNameNode)(M.FIELD_DEFINITION_UPPER)],name:(0,se.stringToNameNode)(M.EDFS_NATS_SUBSCRIBE),repeatable:!1};ne.REQUIRED_FIELDSET_TYPE_NODE={kind:pe.Kind.NON_NULL_TYPE,type:(0,se.stringToNamedTypeNode)(M.FIELD_SET_SCALAR)};ne.KEY_DEFINITION={arguments:[{kind:pe.Kind.INPUT_VALUE_DEFINITION,name:(0,se.stringToNameNode)(M.FIELDS),type:ne.REQUIRED_FIELDSET_TYPE_NODE},{kind:pe.Kind.INPUT_VALUE_DEFINITION,name:(0,se.stringToNameNode)(M.RESOLVABLE),type:(0,se.stringToNamedTypeNode)(M.BOOLEAN_SCALAR),defaultValue:{kind:pe.Kind.BOOLEAN,value:!0}}],kind:pe.Kind.DIRECTIVE_DEFINITION,locations:(0,se.stringArrayToNameNodeArray)([M.INTERFACE_UPPER,M.OBJECT_UPPER]),name:(0,se.stringToNameNode)(M.KEY),repeatable:!0};ne.PROVIDES_DEFINITION={arguments:[{kind:pe.Kind.INPUT_VALUE_DEFINITION,name:(0,se.stringToNameNode)(M.FIELDS),type:ne.REQUIRED_FIELDSET_TYPE_NODE}],kind:pe.Kind.DIRECTIVE_DEFINITION,locations:[(0,se.stringToNameNode)(M.FIELD_DEFINITION_UPPER)],name:(0,se.stringToNameNode)(M.PROVIDES),repeatable:!1};ne.REQUIRES_DEFINITION={arguments:[{kind:pe.Kind.INPUT_VALUE_DEFINITION,name:(0,se.stringToNameNode)(M.FIELDS),type:{kind:pe.Kind.NON_NULL_TYPE,type:(0,se.stringToNamedTypeNode)(M.FIELD_SET_SCALAR)}}],kind:pe.Kind.DIRECTIVE_DEFINITION,locations:[(0,se.stringToNameNode)(M.FIELD_DEFINITION_UPPER)],name:(0,se.stringToNameNode)(M.REQUIRES),repeatable:!1};ne.SPECIFIED_BY_DEFINITION={arguments:[{kind:pe.Kind.INPUT_VALUE_DEFINITION,name:(0,se.stringToNameNode)(M.URL_LOWER),type:ne.REQUIRED_STRING_TYPE_NODE}],kind:pe.Kind.DIRECTIVE_DEFINITION,locations:(0,se.stringArrayToNameNodeArray)([M.SCALAR_UPPER]),name:(0,se.stringToNameNode)(M.SPECIFIED_BY),repeatable:!1};ne.TAG_DEFINITION={arguments:[{directives:[],kind:pe.Kind.INPUT_VALUE_DEFINITION,name:(0,se.stringToNameNode)(M.NAME),type:{kind:pe.Kind.NON_NULL_TYPE,type:(0,se.stringToNamedTypeNode)(M.STRING_SCALAR)}}],kind:pe.Kind.DIRECTIVE_DEFINITION,locations:(0,se.stringArrayToNameNodeArray)([M.ARGUMENT_DEFINITION_UPPER,M.ENUM_UPPER,M.ENUM_VALUE_UPPER,M.FIELD_DEFINITION_UPPER,M.INPUT_FIELD_DEFINITION_UPPER,M.INPUT_OBJECT_UPPER,M.INTERFACE_UPPER,M.OBJECT_UPPER,M.SCALAR_UPPER,M.UNION_UPPER]),name:(0,se.stringToNameNode)(M.TAG),repeatable:!0};ne.BASE_DIRECTIVE_DEFINITION_BY_DIRECTIVE_NAME=new Map([[M.DEPRECATED,ne.DEPRECATED_DEFINITION],[M.EXTENDS,ne.EXTENDS_DEFINITION],[M.EXTERNAL,ne.EXTERNAL_DEFINITION],[M.EDFS_KAFKA_PUBLISH,ne.EDFS_KAFKA_PUBLISH_DEFINITION],[M.EDFS_KAFKA_SUBSCRIBE,ne.EDFS_KAFKA_SUBSCRIBE_DEFINITION],[M.EDFS_NATS_PUBLISH,ne.EDFS_NATS_PUBLISH_DEFINITION],[M.EDFS_NATS_REQUEST,ne.EDFS_NATS_REQUEST_DEFINITION],[M.EDFS_NATS_SUBSCRIBE,ne.EDFS_NATS_SUBSCRIBE_DEFINITION],[M.KEY,ne.KEY_DEFINITION],[M.PROVIDES,ne.PROVIDES_DEFINITION],[M.REQUIRES,ne.REQUIRES_DEFINITION],[M.SPECIFIED_BY,ne.SPECIFIED_BY_DEFINITION],[M.TAG,ne.TAG_DEFINITION]]);ne.ALL_IN_BUILT_DIRECTIVE_NAMES=new Set([M.AUTHENTICATED,M.COMPOSE_DIRECTIVE,M.CONFIGURE_DESCRIPTION,M.CONFIGURE_CHILD_DESCRIPTIONS,M.DEPRECATED,M.EDFS_NATS_PUBLISH,M.EDFS_NATS_REQUEST,M.EDFS_NATS_SUBSCRIBE,M.EDFS_KAFKA_PUBLISH,M.EDFS_KAFKA_SUBSCRIBE,M.EXTENDS,M.EXTERNAL,M.INACCESSIBLE,M.INTERFACE_OBJECT,M.KEY,M.LINK,M.OVERRIDE,M.PROVIDES,M.REQUIRES,M.REQUIRES_SCOPES,M.SHAREABLE,M.SPECIFIED_BY,M.SUBSCRIPTION_FILTER,M.TAG]);ne.AUTHENTICATED_DEFINITION={arguments:[],kind:pe.Kind.DIRECTIVE_DEFINITION,locations:(0,se.stringArrayToNameNodeArray)([M.ENUM_UPPER,M.FIELD_DEFINITION_UPPER,M.INTERFACE_UPPER,M.OBJECT_UPPER,M.SCALAR_UPPER]),name:(0,se.stringToNameNode)(M.AUTHENTICATED),repeatable:!1};ne.COMPOSE_DIRECTIVE_DEFINITION={arguments:[{kind:pe.Kind.INPUT_VALUE_DEFINITION,name:(0,se.stringToNameNode)(M.NAME),type:ne.REQUIRED_STRING_TYPE_NODE}],kind:pe.Kind.DIRECTIVE_DEFINITION,locations:(0,se.stringArrayToNameNodeArray)([M.SCHEMA_UPPER]),name:(0,se.stringToNameNode)(M.COMPOSE_DIRECTIVE),repeatable:!0};ne.INACCESSIBLE_DEFINITION={arguments:[],kind:pe.Kind.DIRECTIVE_DEFINITION,locations:(0,se.stringArrayToNameNodeArray)([M.ARGUMENT_DEFINITION_UPPER,M.ENUM_UPPER,M.ENUM_VALUE_UPPER,M.FIELD_DEFINITION_UPPER,M.INPUT_FIELD_DEFINITION_UPPER,M.INPUT_OBJECT_UPPER,M.INTERFACE_UPPER,M.OBJECT_UPPER,M.SCALAR_UPPER,M.UNION_UPPER]),name:(0,se.stringToNameNode)(M.INACCESSIBLE),repeatable:!1};ne.INTERFACE_OBJECT_DEFINITION={kind:pe.Kind.DIRECTIVE_DEFINITION,locations:(0,se.stringArrayToNameNodeArray)([M.OBJECT_UPPER]),name:(0,se.stringToNameNode)(M.INTERFACE_OBJECT),repeatable:!1};ne.LINK_IMPORT_DEFINITION={kind:pe.Kind.SCALAR_TYPE_DEFINITION,name:(0,se.stringToNameNode)(M.LINK_IMPORT)};ne.LINK_PURPOSE_DEFINITION={kind:pe.Kind.ENUM_TYPE_DEFINITION,name:(0,se.stringToNameNode)(M.LINK_PURPOSE),values:[{directives:[],kind:pe.Kind.ENUM_VALUE_DEFINITION,name:(0,se.stringToNameNode)(M.EXECUTION)},{directives:[],kind:pe.Kind.ENUM_VALUE_DEFINITION,name:(0,se.stringToNameNode)(M.SECURITY)}]};ne.LINK_DEFINITION={arguments:[{kind:pe.Kind.INPUT_VALUE_DEFINITION,name:(0,se.stringToNameNode)(M.URL_LOWER),type:{kind:pe.Kind.NON_NULL_TYPE,type:(0,se.stringToNamedTypeNode)(M.STRING_SCALAR)}},{kind:pe.Kind.INPUT_VALUE_DEFINITION,name:(0,se.stringToNameNode)(M.AS),type:(0,se.stringToNamedTypeNode)(M.STRING_SCALAR)},{kind:pe.Kind.INPUT_VALUE_DEFINITION,name:(0,se.stringToNameNode)(M.FOR),type:(0,se.stringToNamedTypeNode)(M.LINK_PURPOSE)},{kind:pe.Kind.INPUT_VALUE_DEFINITION,name:(0,se.stringToNameNode)(M.IMPORT),type:{kind:pe.Kind.LIST_TYPE,type:(0,se.stringToNamedTypeNode)(M.LINK_IMPORT)}}],kind:pe.Kind.DIRECTIVE_DEFINITION,locations:(0,se.stringArrayToNameNodeArray)([M.SCHEMA_UPPER]),name:(0,se.stringToNameNode)(M.LINK),repeatable:!0};ne.OVERRIDE_DEFINITION={arguments:[{kind:pe.Kind.INPUT_VALUE_DEFINITION,name:(0,se.stringToNameNode)(M.FROM),type:{kind:pe.Kind.NON_NULL_TYPE,type:(0,se.stringToNamedTypeNode)(M.STRING_SCALAR)}}],kind:pe.Kind.DIRECTIVE_DEFINITION,locations:(0,se.stringArrayToNameNodeArray)([M.FIELD_DEFINITION_UPPER]),name:(0,se.stringToNameNode)(M.OVERRIDE),repeatable:!1};ne.REQUIRES_SCOPES_DEFINITION={arguments:[{directives:[],kind:pe.Kind.INPUT_VALUE_DEFINITION,name:(0,se.stringToNameNode)(M.SCOPES),type:{kind:pe.Kind.NON_NULL_TYPE,type:{kind:pe.Kind.LIST_TYPE,type:{kind:pe.Kind.NON_NULL_TYPE,type:{kind:pe.Kind.LIST_TYPE,type:{kind:pe.Kind.NON_NULL_TYPE,type:(0,se.stringToNamedTypeNode)(M.SCOPE_SCALAR)}}}}}}],kind:pe.Kind.DIRECTIVE_DEFINITION,locations:(0,se.stringArrayToNameNodeArray)([M.ENUM_UPPER,M.FIELD_DEFINITION_UPPER,M.INTERFACE_UPPER,M.OBJECT_UPPER,M.SCALAR_UPPER]),name:(0,se.stringToNameNode)(M.REQUIRES_SCOPES),repeatable:!1};ne.SHAREABLE_DEFINITION={kind:pe.Kind.DIRECTIVE_DEFINITION,locations:(0,se.stringArrayToNameNodeArray)([M.FIELD_DEFINITION_UPPER,M.OBJECT_UPPER]),name:(0,se.stringToNameNode)(M.SHAREABLE),repeatable:!0};ne.SUBSCRIPTION_FILTER_DEFINITION={arguments:[{kind:pe.Kind.INPUT_VALUE_DEFINITION,name:(0,se.stringToNameNode)(M.CONDITION),type:{kind:pe.Kind.NON_NULL_TYPE,type:(0,se.stringToNamedTypeNode)(M.SUBSCRIPTION_FILTER_CONDITION)}}],kind:pe.Kind.DIRECTIVE_DEFINITION,locations:(0,se.stringArrayToNameNodeArray)([M.FIELD_DEFINITION_UPPER]),name:(0,se.stringToNameNode)(M.SUBSCRIPTION_FILTER),repeatable:!1};ne.SUBSCRIPTION_FILTER_CONDITION_DEFINITION={fields:[{kind:pe.Kind.INPUT_VALUE_DEFINITION,name:(0,se.stringToNameNode)(M.AND_UPPER),type:{kind:pe.Kind.LIST_TYPE,type:{kind:pe.Kind.NON_NULL_TYPE,type:(0,se.stringToNamedTypeNode)(M.SUBSCRIPTION_FILTER_CONDITION)}}},{kind:pe.Kind.INPUT_VALUE_DEFINITION,name:(0,se.stringToNameNode)(M.IN_UPPER),type:(0,se.stringToNamedTypeNode)(M.SUBSCRIPTION_FIELD_CONDITION)},{kind:pe.Kind.INPUT_VALUE_DEFINITION,name:(0,se.stringToNameNode)(M.OR_UPPER),type:{kind:pe.Kind.LIST_TYPE,type:{kind:pe.Kind.NON_NULL_TYPE,type:(0,se.stringToNamedTypeNode)(M.SUBSCRIPTION_FILTER_CONDITION)}}},{kind:pe.Kind.INPUT_VALUE_DEFINITION,name:(0,se.stringToNameNode)(M.NOT_UPPER),type:(0,se.stringToNamedTypeNode)(M.SUBSCRIPTION_FILTER_CONDITION)}],kind:pe.Kind.INPUT_OBJECT_TYPE_DEFINITION,name:(0,se.stringToNameNode)(M.SUBSCRIPTION_FILTER_CONDITION)};ne.SUBSCRIPTION_FILTER_VALUE_DEFINITION={kind:pe.Kind.SCALAR_TYPE_DEFINITION,name:(0,se.stringToNameNode)(M.SUBSCRIPTION_FILTER_VALUE)};ne.SUBSCRIPTION_FIELD_CONDITION_DEFINITION={fields:[{kind:pe.Kind.INPUT_VALUE_DEFINITION,name:(0,se.stringToNameNode)(M.FIELD_PATH),type:{kind:pe.Kind.NON_NULL_TYPE,type:(0,se.stringToNamedTypeNode)(M.STRING_SCALAR)}},{kind:pe.Kind.INPUT_VALUE_DEFINITION,name:(0,se.stringToNameNode)(M.VALUES),type:{kind:pe.Kind.NON_NULL_TYPE,type:{kind:pe.Kind.LIST_TYPE,type:(0,se.stringToNamedTypeNode)(M.SUBSCRIPTION_FILTER_VALUE)}}}],kind:pe.Kind.INPUT_OBJECT_TYPE_DEFINITION,name:(0,se.stringToNameNode)(M.SUBSCRIPTION_FIELD_CONDITION)};ne.V2_DIRECTIVE_DEFINITION_BY_DIRECTIVE_NAME=new Map([[M.AUTHENTICATED,ne.AUTHENTICATED_DEFINITION],[M.COMPOSE_DIRECTIVE,ne.COMPOSE_DIRECTIVE_DEFINITION],[M.INACCESSIBLE,ne.INACCESSIBLE_DEFINITION],[M.INTERFACE_OBJECT,ne.INTERFACE_OBJECT_DEFINITION],[M.LINK,ne.LINK_DEFINITION],[M.OVERRIDE,ne.OVERRIDE_DEFINITION],[M.REQUIRES_SCOPES,ne.REQUIRES_SCOPES_DEFINITION],[M.SHAREABLE,ne.SHAREABLE_DEFINITION]]);ne.BASE_DIRECTIVE_DEFINITIONS=[ne.DEPRECATED_DEFINITION,ne.EXTENDS_DEFINITION,ne.EXTERNAL_DEFINITION,ne.KEY_DEFINITION,ne.PROVIDES_DEFINITION,ne.REQUIRES_DEFINITION,ne.SPECIFIED_BY_DEFINITION,ne.TAG_DEFINITION];ne.EVENT_DRIVEN_DIRECTIVE_DEFINITIONS_BY_DIRECTIVE_NAME=new Map([[M.EDFS_KAFKA_PUBLISH,ne.EDFS_KAFKA_PUBLISH_DEFINITION],[M.EDFS_KAFKA_SUBSCRIBE,ne.EDFS_KAFKA_SUBSCRIBE_DEFINITION],[M.EDFS_NATS_PUBLISH,ne.EDFS_NATS_PUBLISH_DEFINITION],[M.EDFS_NATS_REQUEST,ne.EDFS_NATS_REQUEST_DEFINITION],[M.EDFS_NATS_SUBSCRIBE,ne.EDFS_NATS_SUBSCRIBE_DEFINITION]]);ne.VERSION_TWO_DIRECTIVE_DEFINITIONS=[ne.AUTHENTICATED_DEFINITION,ne.COMPOSE_DIRECTIVE_DEFINITION,ne.INACCESSIBLE_DEFINITION,ne.INTERFACE_OBJECT_DEFINITION,ne.OVERRIDE_DEFINITION,ne.REQUIRES_SCOPES_DEFINITION,ne.SHAREABLE_DEFINITION];ne.FIELD_SET_SCALAR_DEFINITION={kind:pe.Kind.SCALAR_TYPE_DEFINITION,name:(0,se.stringToNameNode)(M.FIELD_SET_SCALAR)};ne.SCOPE_SCALAR_DEFINITION={kind:pe.Kind.SCALAR_TYPE_DEFINITION,name:(0,se.stringToNameNode)(M.SCOPE_SCALAR)};ne.EDFS_NATS_STREAM_CONFIGURATION_DEFINITION={kind:pe.Kind.INPUT_OBJECT_TYPE_DEFINITION,name:(0,se.stringToNameNode)(M.EDFS_NATS_STREAM_CONFIGURATION),fields:[{kind:pe.Kind.INPUT_VALUE_DEFINITION,name:(0,se.stringToNameNode)(M.CONSUMER_NAME),type:{kind:pe.Kind.NON_NULL_TYPE,type:(0,se.stringToNamedTypeNode)(M.STRING_SCALAR)}},{kind:pe.Kind.INPUT_VALUE_DEFINITION,name:(0,se.stringToNameNode)(M.STREAM_NAME),type:{kind:pe.Kind.NON_NULL_TYPE,type:(0,se.stringToNamedTypeNode)(M.STRING_SCALAR)}},{kind:pe.Kind.INPUT_VALUE_DEFINITION,name:(0,se.stringToNameNode)(M.CONSUMER_INACTIVE_THRESHOLD),type:{kind:pe.Kind.NON_NULL_TYPE,type:(0,se.stringToNamedTypeNode)(M.INT_SCALAR)},defaultValue:{kind:pe.Kind.INT,value:KZ.DEFAULT_CONSUMER_INACTIVE_THRESHOLD.toString()}}]};ne.CONFIGURE_DESCRIPTION_DEFINITION={arguments:[{directives:[],kind:pe.Kind.INPUT_VALUE_DEFINITION,name:(0,se.stringToNameNode)(M.PROPAGATE),type:{kind:pe.Kind.NON_NULL_TYPE,type:(0,se.stringToNamedTypeNode)(M.BOOLEAN_SCALAR)},defaultValue:{kind:pe.Kind.BOOLEAN,value:!0}},{directives:[],kind:pe.Kind.INPUT_VALUE_DEFINITION,name:(0,se.stringToNameNode)(M.DESCRIPTION_OVERRIDE),type:(0,se.stringToNamedTypeNode)(M.STRING_SCALAR)}],kind:pe.Kind.DIRECTIVE_DEFINITION,locations:(0,se.stringArrayToNameNodeArray)([M.ARGUMENT_DEFINITION_UPPER,M.ENUM_UPPER,M.ENUM_VALUE_UPPER,M.FIELD_DEFINITION_UPPER,M.INTERFACE_UPPER,M.INPUT_OBJECT_UPPER,M.INPUT_FIELD_DEFINITION_UPPER,M.OBJECT_UPPER,M.SCALAR_UPPER,M.SCHEMA_UPPER,M.UNION_UPPER]),name:(0,se.stringToNameNode)(M.CONFIGURE_DESCRIPTION),repeatable:!1};ne.CONFIGURE_CHILD_DESCRIPTIONS_DEFINITION={arguments:[{directives:[],kind:pe.Kind.INPUT_VALUE_DEFINITION,name:(0,se.stringToNameNode)(M.PROPAGATE),type:{kind:pe.Kind.NON_NULL_TYPE,type:(0,se.stringToNamedTypeNode)(M.BOOLEAN_SCALAR)},defaultValue:{kind:pe.Kind.BOOLEAN,value:!0}}],kind:pe.Kind.DIRECTIVE_DEFINITION,locations:(0,se.stringArrayToNameNodeArray)([M.ENUM_UPPER,M.INPUT_OBJECT_UPPER,M.INTERFACE_UPPER,M.OBJECT_UPPER]),name:(0,se.stringToNameNode)(M.CONFIGURE_CHILD_DESCRIPTIONS),repeatable:!1};ne.EDFS_ARGS_REGEXP=/{{\s*args\.([a-zA-Z0-9_]+)\s*}}/g;ne.MAX_OR_SCOPES=16});var NT=P(ju=>{"use strict";f();T();m();Object.defineProperty(ju,"__esModule",{value:!0});ju.newParentTagData=YZ;ju.newChildTagData=JZ;ju.validateImplicitFieldSets=HZ;ju.newContractTagOptionsFromArrays=zZ;ju.getDescriptionFromString=WZ;var GZ=Yo(),zr=Ae(),$Z=Es(),QZ=Jr(),JL=Hr();function YZ(e){return{childTagDataByChildName:new Map,tagNames:new Set,typeName:e}}function JZ(e){return{name:e,tagNames:new Set,tagNamesByArgumentName:new Map}}function HZ({conditionalFieldDataByCoords:e,currentSubgraphName:t,entityData:n,implicitKeys:r,objectData:i,parentDefinitionDataByTypeName:a,graphNode:o}){let c=(0,JL.getValueOrDefault)(n.keyFieldSetDatasBySubgraphName,t,()=>new Map);for(let[l,p]of n.documentNodeByKeyFieldSet){if(c.has(l))continue;let N=[i],y=[],g=[],_=-1,F=!0,B=!0;(0,zr.visit)(p,{Argument:{enter(){return B=!1,zr.BREAK}},Field:{enter(j){let J=N[_];if(F)return B=!1,zr.BREAK;let Z=j.name.value,W=J.fieldDataByFieldName.get(Z);if(!W||W.argumentDataByArgumentName.size||y[_].has(Z))return B=!1,zr.BREAK;let{isUnconditionallyProvided:Ne}=(0,JL.getOrThrowError)(W.externalFieldDataBySubgraphName,t,`${W.originalParentTypeName}.${Z}.externalFieldDataBySubgraphName`),le=e.get(`${W.renamedParentTypeName}.${Z}`);if(le){if(le.providedBy.length>0)g.push(...le.providedBy);else if(le.requiredBy.length>0)return B=!1,zr.BREAK}else if(!Ne)return B=!1,zr.BREAK;y[_].add(Z);let we=(0,GZ.getTypeNodeNamedTypeName)(W.node.type);if($Z.BASE_SCALARS.has(we))return;let qe=a.get(we);if(!qe)return B=!1,zr.BREAK;if(qe.kind===zr.Kind.OBJECT_TYPE_DEFINITION){F=!0,N.push(qe);return}if((0,QZ.isKindAbstract)(qe.kind))return B=!1,zr.BREAK}},InlineFragment:{enter(){return B=!1,zr.BREAK}},SelectionSet:{enter(){if(!F||(_+=1,F=!1,_<0||_>=N.length))return B=!1,zr.BREAK;y.push(new Set)},leave(){if(F)return B=!1,zr.BREAK;_-=1,N.pop(),y.pop()}}}),B&&(r.push(Q(k({fieldName:"",selectionSet:l},g.length>0?{conditions:g}:{}),{disableEntityResolver:!0})),o&&o.satisfiedFieldSets.add(l))}}function zZ(e,t){return{tagNamesToExclude:new Set(e),tagNamesToInclude:new Set(t)}}function WZ(e){if(e)return{block:!0,kind:zr.Kind.STRING,value:e}}});var tp=P(Bi=>{"use strict";f();T();m();Object.defineProperty(Bi,"__esModule",{value:!0});Bi.SUBSCRIPTION_FILTER_LIST_INPUT_NAMES=Bi.SUBSCRIPTION_FILTER_INPUT_NAMES=Bi.STREAM_CONFIGURATION_FIELD_NAMES=Bi.EVENT_DIRECTIVE_NAMES=Bi.TYPE_SYSTEM_DIRECTIVE_LOCATIONS=void 0;var mn=lr();Bi.TYPE_SYSTEM_DIRECTIVE_LOCATIONS=new Set([mn.ARGUMENT_DEFINITION_UPPER,mn.ENUM_UPPER,mn.ENUM_VALUE_UPPER,mn.FIELD_DEFINITION_UPPER,mn.INPUT_FIELD_DEFINITION_UPPER,mn.INPUT_OBJECT_UPPER,mn.INTERFACE_UPPER,mn.OBJECT_UPPER,mn.SCALAR_UPPER,mn.SCHEMA_UPPER,mn.UNION_UPPER]);Bi.EVENT_DIRECTIVE_NAMES=new Set([mn.EDFS_KAFKA_PUBLISH,mn.EDFS_KAFKA_SUBSCRIBE,mn.EDFS_NATS_PUBLISH,mn.EDFS_NATS_REQUEST,mn.EDFS_NATS_SUBSCRIBE]);Bi.STREAM_CONFIGURATION_FIELD_NAMES=new Set([mn.CONSUMER_INACTIVE_THRESHOLD,mn.CONSUMER_NAME,mn.STREAM_NAME]);Bi.SUBSCRIPTION_FILTER_INPUT_NAMES=new Set([mn.AND_UPPER,mn.IN_UPPER,mn.NOT_UPPER,mn.OR_UPPER]);Bi.SUBSCRIPTION_FILTER_LIST_INPUT_NAMES=new Set([mn.AND_UPPER,mn.OR_UPPER])});var Ui=P((X_,HL)=>{"use strict";f();T();m();var np=function(e){return e&&e.Math===Math&&e};HL.exports=np(typeof globalThis=="object"&&globalThis)||np(typeof window=="object"&&window)||np(typeof self=="object"&&self)||np(typeof global=="object"&&global)||np(typeof X_=="object"&&X_)||function(){return this}()||Function("return this")()});var ys=P((Mge,zL)=>{"use strict";f();T();m();zL.exports=function(e){try{return!!e()}catch(t){return!0}}});var Jo=P((jge,WL)=>{"use strict";f();T();m();var XZ=ys();WL.exports=!XZ(function(){return Object.defineProperty({},1,{get:function(){return 7}})[1]!==7})});var Z_=P((Qge,XL)=>{"use strict";f();T();m();var ZZ=ys();XL.exports=!ZZ(function(){var e=function(){}.bind();return typeof e!="function"||e.hasOwnProperty("prototype")})});var Ku=P((zge,ZL)=>{"use strict";f();T();m();var eee=Z_(),hT=Function.prototype.call;ZL.exports=eee?hT.bind(hT):function(){return hT.apply(hT,arguments)}});var rC=P(nC=>{"use strict";f();T();m();var eC={}.propertyIsEnumerable,tC=Object.getOwnPropertyDescriptor,tee=tC&&!eC.call({1:2},1);nC.f=tee?function(t){var n=tC(this,t);return!!n&&n.enumerable}:eC});var ev=P((i_e,iC)=>{"use strict";f();T();m();iC.exports=function(e,t){return{enumerable:!(e&1),configurable:!(e&2),writable:!(e&4),value:t}}});var pi=P((u_e,oC)=>{"use strict";f();T();m();var aC=Z_(),sC=Function.prototype,tv=sC.call,nee=aC&&sC.bind.bind(tv,tv);oC.exports=aC?nee:function(e){return function(){return tv.apply(e,arguments)}}});var lC=P((p_e,cC)=>{"use strict";f();T();m();var uC=pi(),ree=uC({}.toString),iee=uC("".slice);cC.exports=function(e){return iee(ree(e),8,-1)}});var pC=P((N_e,dC)=>{"use strict";f();T();m();var aee=pi(),see=ys(),oee=lC(),nv=Object,uee=aee("".split);dC.exports=see(function(){return!nv("z").propertyIsEnumerable(0)})?function(e){return oee(e)==="String"?uee(e,""):nv(e)}:nv});var rv=P((I_e,fC)=>{"use strict";f();T();m();fC.exports=function(e){return e==null}});var iv=P((S_e,mC)=>{"use strict";f();T();m();var cee=rv(),lee=TypeError;mC.exports=function(e){if(cee(e))throw new lee("Can't call method on "+e);return e}});var ET=P((A_e,TC)=>{"use strict";f();T();m();var dee=pC(),pee=iv();TC.exports=function(e){return dee(pee(e))}});var oa=P((w_e,NC)=>{"use strict";f();T();m();var av=typeof document=="object"&&document.all;NC.exports=typeof av=="undefined"&&av!==void 0?function(e){return typeof e=="function"||e===av}:function(e){return typeof e=="function"}});var rl=P((U_e,hC)=>{"use strict";f();T();m();var fee=oa();hC.exports=function(e){return typeof e=="object"?e!==null:fee(e)}});var yT=P((q_e,EC)=>{"use strict";f();T();m();var sv=Ui(),mee=oa(),Tee=function(e){return mee(e)?e:void 0};EC.exports=function(e,t){return arguments.length<2?Tee(sv[e]):sv[e]&&sv[e][t]}});var IC=P((G_e,yC)=>{"use strict";f();T();m();var Nee=pi();yC.exports=Nee({}.isPrototypeOf)});var SC=P((J_e,vC)=>{"use strict";f();T();m();var hee=Ui(),gC=hee.navigator,_C=gC&&gC.userAgent;vC.exports=_C?String(_C):""});var PC=P((X_e,FC)=>{"use strict";f();T();m();var RC=Ui(),ov=SC(),OC=RC.process,bC=RC.Deno,DC=OC&&OC.versions||bC&&bC.version,AC=DC&&DC.v8,ua,IT;AC&&(ua=AC.split("."),IT=ua[0]>0&&ua[0]<4?1:+(ua[0]+ua[1]));!IT&&ov&&(ua=ov.match(/Edge\/(\d+)/),(!ua||ua[1]>=74)&&(ua=ov.match(/Chrome\/(\d+)/),ua&&(IT=+ua[1])));FC.exports=IT});var uv=P((nve,LC)=>{"use strict";f();T();m();var wC=PC(),Eee=ys(),yee=Ui(),Iee=yee.String;LC.exports=!!Object.getOwnPropertySymbols&&!Eee(function(){var e=Symbol("symbol detection");return!Iee(e)||!(Object(e)instanceof Symbol)||!Symbol.sham&&wC&&wC<41})});var cv=P((sve,CC)=>{"use strict";f();T();m();var gee=uv();CC.exports=gee&&!Symbol.sham&&typeof Symbol.iterator=="symbol"});var lv=P((lve,BC)=>{"use strict";f();T();m();var _ee=yT(),vee=oa(),See=IC(),Oee=cv(),bee=Object;BC.exports=Oee?function(e){return typeof e=="symbol"}:function(e){var t=_ee("Symbol");return vee(t)&&See(t.prototype,bee(e))}});var kC=P((mve,UC)=>{"use strict";f();T();m();var Dee=String;UC.exports=function(e){try{return Dee(e)}catch(t){return"Object"}}});var gT=P((Eve,MC)=>{"use strict";f();T();m();var Aee=oa(),Ree=kC(),Fee=TypeError;MC.exports=function(e){if(Aee(e))return e;throw new Fee(Ree(e)+" is not a function")}});var dv=P((_ve,xC)=>{"use strict";f();T();m();var Pee=gT(),wee=rv();xC.exports=function(e,t){var n=e[t];return wee(n)?void 0:Pee(n)}});var VC=P((bve,qC)=>{"use strict";f();T();m();var pv=Ku(),fv=oa(),mv=rl(),Lee=TypeError;qC.exports=function(e,t){var n,r;if(t==="string"&&fv(n=e.toString)&&!mv(r=pv(n,e))||fv(n=e.valueOf)&&!mv(r=pv(n,e))||t!=="string"&&fv(n=e.toString)&&!mv(r=pv(n,e)))return r;throw new Lee("Can't convert object to primitive value")}});var KC=P((Fve,jC)=>{"use strict";f();T();m();jC.exports=!1});var _T=P((Cve,$C)=>{"use strict";f();T();m();var GC=Ui(),Cee=Object.defineProperty;$C.exports=function(e,t){try{Cee(GC,e,{value:t,configurable:!0,writable:!0})}catch(n){GC[e]=t}return t}});var vT=P((Mve,JC)=>{"use strict";f();T();m();var Bee=KC(),Uee=Ui(),kee=_T(),QC="__core-js_shared__",YC=JC.exports=Uee[QC]||kee(QC,{});(YC.versions||(YC.versions=[])).push({version:"3.41.0",mode:Bee?"pure":"global",copyright:"\xA9 2014-2025 Denis Pushkarev (zloirock.ru)",license:"https://github.com/zloirock/core-js/blob/v3.41.0/LICENSE",source:"https://github.com/zloirock/core-js"})});var Tv=P((jve,zC)=>{"use strict";f();T();m();var HC=vT();zC.exports=function(e,t){return HC[e]||(HC[e]=t||{})}});var XC=P((Qve,WC)=>{"use strict";f();T();m();var Mee=iv(),xee=Object;WC.exports=function(e){return xee(Mee(e))}});var Ho=P((zve,ZC)=>{"use strict";f();T();m();var qee=pi(),Vee=XC(),jee=qee({}.hasOwnProperty);ZC.exports=Object.hasOwn||function(t,n){return jee(Vee(t),n)}});var Nv=P((eSe,eB)=>{"use strict";f();T();m();var Kee=pi(),Gee=0,$ee=Math.random(),Qee=Kee(1 .toString);eB.exports=function(e){return"Symbol("+(e===void 0?"":e)+")_"+Qee(++Gee+$ee,36)}});var rB=P((iSe,nB)=>{"use strict";f();T();m();var Yee=Ui(),Jee=Tv(),tB=Ho(),Hee=Nv(),zee=uv(),Wee=cv(),il=Yee.Symbol,hv=Jee("wks"),Xee=Wee?il.for||il:il&&il.withoutSetter||Hee;nB.exports=function(e){return tB(hv,e)||(hv[e]=zee&&tB(il,e)?il[e]:Xee("Symbol."+e)),hv[e]}});var oB=P((uSe,sB)=>{"use strict";f();T();m();var Zee=Ku(),iB=rl(),aB=lv(),ete=dv(),tte=VC(),nte=rB(),rte=TypeError,ite=nte("toPrimitive");sB.exports=function(e,t){if(!iB(e)||aB(e))return e;var n=ete(e,ite),r;if(n){if(t===void 0&&(t="default"),r=Zee(n,e,t),!iB(r)||aB(r))return r;throw new rte("Can't convert object to primitive value")}return t===void 0&&(t="number"),tte(e,t)}});var Ev=P((pSe,uB)=>{"use strict";f();T();m();var ate=oB(),ste=lv();uB.exports=function(e){var t=ate(e,"string");return ste(t)?t:t+""}});var dB=P((NSe,lB)=>{"use strict";f();T();m();var ote=Ui(),cB=rl(),yv=ote.document,ute=cB(yv)&&cB(yv.createElement);lB.exports=function(e){return ute?yv.createElement(e):{}}});var Iv=P((ISe,pB)=>{"use strict";f();T();m();var cte=Jo(),lte=ys(),dte=dB();pB.exports=!cte&&!lte(function(){return Object.defineProperty(dte("div"),"a",{get:function(){return 7}}).a!==7})});var gv=P(mB=>{"use strict";f();T();m();var pte=Jo(),fte=Ku(),mte=rC(),Tte=ev(),Nte=ET(),hte=Ev(),Ete=Ho(),yte=Iv(),fB=Object.getOwnPropertyDescriptor;mB.f=pte?fB:function(t,n){if(t=Nte(t),n=hte(n),yte)try{return fB(t,n)}catch(r){}if(Ete(t,n))return Tte(!fte(mte.f,t,n),t[n])}});var NB=P((ASe,TB)=>{"use strict";f();T();m();var Ite=Jo(),gte=ys();TB.exports=Ite&>e(function(){return Object.defineProperty(function(){},"prototype",{value:42,writable:!1}).prototype!==42})});var rp=P((wSe,hB)=>{"use strict";f();T();m();var _te=rl(),vte=String,Ste=TypeError;hB.exports=function(e){if(_te(e))return e;throw new Ste(vte(e)+" is not an object")}});var OT=P(yB=>{"use strict";f();T();m();var Ote=Jo(),bte=Iv(),Dte=NB(),ST=rp(),EB=Ev(),Ate=TypeError,_v=Object.defineProperty,Rte=Object.getOwnPropertyDescriptor,vv="enumerable",Sv="configurable",Ov="writable";yB.f=Ote?Dte?function(t,n,r){if(ST(t),n=EB(n),ST(r),typeof t=="function"&&n==="prototype"&&"value"in r&&Ov in r&&!r[Ov]){var i=Rte(t,n);i&&i[Ov]&&(t[n]=r.value,r={configurable:Sv in r?r[Sv]:i[Sv],enumerable:vv in r?r[vv]:i[vv],writable:!1})}return _v(t,n,r)}:_v:function(t,n,r){if(ST(t),n=EB(n),ST(r),bte)try{return _v(t,n,r)}catch(i){}if("get"in r||"set"in r)throw new Ate("Accessors not supported");return"value"in r&&(t[n]=r.value),t}});var bv=P((qSe,IB)=>{"use strict";f();T();m();var Fte=Jo(),Pte=OT(),wte=ev();IB.exports=Fte?function(e,t,n){return Pte.f(e,t,wte(1,n))}:function(e,t,n){return e[t]=n,e}});var vB=P((GSe,_B)=>{"use strict";f();T();m();var Dv=Jo(),Lte=Ho(),gB=Function.prototype,Cte=Dv&&Object.getOwnPropertyDescriptor,Av=Lte(gB,"name"),Bte=Av&&function(){}.name==="something",Ute=Av&&(!Dv||Dv&&Cte(gB,"name").configurable);_B.exports={EXISTS:Av,PROPER:Bte,CONFIGURABLE:Ute}});var OB=P((JSe,SB)=>{"use strict";f();T();m();var kte=pi(),Mte=oa(),Rv=vT(),xte=kte(Function.toString);Mte(Rv.inspectSource)||(Rv.inspectSource=function(e){return xte(e)});SB.exports=Rv.inspectSource});var AB=P((XSe,DB)=>{"use strict";f();T();m();var qte=Ui(),Vte=oa(),bB=qte.WeakMap;DB.exports=Vte(bB)&&/native code/.test(String(bB))});var PB=P((nOe,FB)=>{"use strict";f();T();m();var jte=Tv(),Kte=Nv(),RB=jte("keys");FB.exports=function(e){return RB[e]||(RB[e]=Kte(e))}});var Fv=P((sOe,wB)=>{"use strict";f();T();m();wB.exports={}});var UB=P((lOe,BB)=>{"use strict";f();T();m();var Gte=AB(),CB=Ui(),$te=rl(),Qte=bv(),Pv=Ho(),wv=vT(),Yte=PB(),Jte=Fv(),LB="Object already initialized",Lv=CB.TypeError,Hte=CB.WeakMap,bT,ip,DT,zte=function(e){return DT(e)?ip(e):bT(e,{})},Wte=function(e){return function(t){var n;if(!$te(t)||(n=ip(t)).type!==e)throw new Lv("Incompatible receiver, "+e+" required");return n}};Gte||wv.state?(ca=wv.state||(wv.state=new Hte),ca.get=ca.get,ca.has=ca.has,ca.set=ca.set,bT=function(e,t){if(ca.has(e))throw new Lv(LB);return t.facade=e,ca.set(e,t),t},ip=function(e){return ca.get(e)||{}},DT=function(e){return ca.has(e)}):(Gu=Yte("state"),Jte[Gu]=!0,bT=function(e,t){if(Pv(e,Gu))throw new Lv(LB);return t.facade=e,Qte(e,Gu,t),t},ip=function(e){return Pv(e,Gu)?e[Gu]:{}},DT=function(e){return Pv(e,Gu)});var ca,Gu;BB.exports={set:bT,get:ip,has:DT,enforce:zte,getterFor:Wte}});var qB=P((mOe,xB)=>{"use strict";f();T();m();var Bv=pi(),Xte=ys(),Zte=oa(),AT=Ho(),Cv=Jo(),ene=vB().CONFIGURABLE,tne=OB(),MB=UB(),nne=MB.enforce,rne=MB.get,kB=String,RT=Object.defineProperty,ine=Bv("".slice),ane=Bv("".replace),sne=Bv([].join),one=Cv&&!Xte(function(){return RT(function(){},"length",{value:8}).length!==8}),une=String(String).split("String"),cne=xB.exports=function(e,t,n){ine(kB(t),0,7)==="Symbol("&&(t="["+ane(kB(t),/^Symbol\(([^)]*)\).*$/,"$1")+"]"),n&&n.getter&&(t="get "+t),n&&n.setter&&(t="set "+t),(!AT(e,"name")||ene&&e.name!==t)&&(Cv?RT(e,"name",{value:t,configurable:!0}):e.name=t),one&&n&&AT(n,"arity")&&e.length!==n.arity&&RT(e,"length",{value:n.arity});try{n&&AT(n,"constructor")&&n.constructor?Cv&&RT(e,"prototype",{writable:!1}):e.prototype&&(e.prototype=void 0)}catch(i){}var r=nne(e);return AT(r,"source")||(r.source=sne(une,typeof t=="string"?t:"")),e};Function.prototype.toString=cne(function(){return Zte(this)&&rne(this).source||tne(this)},"toString")});var jB=P((EOe,VB)=>{"use strict";f();T();m();var lne=oa(),dne=OT(),pne=qB(),fne=_T();VB.exports=function(e,t,n,r){r||(r={});var i=r.enumerable,a=r.name!==void 0?r.name:t;if(lne(n)&&pne(n,a,r),r.global)i?e[t]=n:fne(t,n);else{try{r.unsafe?e[t]&&(i=!0):delete e[t]}catch(o){}i?e[t]=n:dne.f(e,t,{value:n,enumerable:!1,configurable:!r.nonConfigurable,writable:!r.nonWritable})}return e}});var GB=P((_Oe,KB)=>{"use strict";f();T();m();var mne=Math.ceil,Tne=Math.floor;KB.exports=Math.trunc||function(t){var n=+t;return(n>0?Tne:mne)(n)}});var FT=P((bOe,$B)=>{"use strict";f();T();m();var Nne=GB();$B.exports=function(e){var t=+e;return t!==t||t===0?0:Nne(t)}});var YB=P((FOe,QB)=>{"use strict";f();T();m();var hne=FT(),Ene=Math.max,yne=Math.min;QB.exports=function(e,t){var n=hne(e);return n<0?Ene(n+t,0):yne(n,t)}});var HB=P((COe,JB)=>{"use strict";f();T();m();var Ine=FT(),gne=Math.min;JB.exports=function(e){var t=Ine(e);return t>0?gne(t,9007199254740991):0}});var WB=P((MOe,zB)=>{"use strict";f();T();m();var _ne=HB();zB.exports=function(e){return _ne(e.length)}});var eU=P((jOe,ZB)=>{"use strict";f();T();m();var vne=ET(),Sne=YB(),One=WB(),XB=function(e){return function(t,n,r){var i=vne(t),a=One(i);if(a===0)return!e&&-1;var o=Sne(r,a),c;if(e&&n!==n){for(;a>o;)if(c=i[o++],c!==c)return!0}else for(;a>o;o++)if((e||o in i)&&i[o]===n)return e||o||0;return!e&&-1}};ZB.exports={includes:XB(!0),indexOf:XB(!1)}});var rU=P((QOe,nU)=>{"use strict";f();T();m();var bne=pi(),Uv=Ho(),Dne=ET(),Ane=eU().indexOf,Rne=Fv(),tU=bne([].push);nU.exports=function(e,t){var n=Dne(e),r=0,i=[],a;for(a in n)!Uv(Rne,a)&&Uv(n,a)&&tU(i,a);for(;t.length>r;)Uv(n,a=t[r++])&&(~Ane(i,a)||tU(i,a));return i}});var aU=P((zOe,iU)=>{"use strict";f();T();m();iU.exports=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"]});var oU=P(sU=>{"use strict";f();T();m();var Fne=rU(),Pne=aU(),wne=Pne.concat("length","prototype");sU.f=Object.getOwnPropertyNames||function(t){return Fne(t,wne)}});var cU=P(uU=>{"use strict";f();T();m();uU.f=Object.getOwnPropertySymbols});var dU=P((ube,lU)=>{"use strict";f();T();m();var Lne=yT(),Cne=pi(),Bne=oU(),Une=cU(),kne=rp(),Mne=Cne([].concat);lU.exports=Lne("Reflect","ownKeys")||function(t){var n=Bne.f(kne(t)),r=Une.f;return r?Mne(n,r(t)):n}});var mU=P((pbe,fU)=>{"use strict";f();T();m();var pU=Ho(),xne=dU(),qne=gv(),Vne=OT();fU.exports=function(e,t,n){for(var r=xne(t),i=Vne.f,a=qne.f,o=0;o{"use strict";f();T();m();var jne=ys(),Kne=oa(),Gne=/#|\.prototype\./,ap=function(e,t){var n=Qne[$ne(e)];return n===Jne?!0:n===Yne?!1:Kne(t)?jne(t):!!t},$ne=ap.normalize=function(e){return String(e).replace(Gne,".").toLowerCase()},Qne=ap.data={},Yne=ap.NATIVE="N",Jne=ap.POLYFILL="P";TU.exports=ap});var kv=P((Ibe,hU)=>{"use strict";f();T();m();var PT=Ui(),Hne=gv().f,zne=bv(),Wne=jB(),Xne=_T(),Zne=mU(),ere=NU();hU.exports=function(e,t){var n=e.target,r=e.global,i=e.stat,a,o,c,l,p,N;if(r?o=PT:i?o=PT[n]||Xne(n,{}):o=PT[n]&&PT[n].prototype,o)for(c in t){if(p=t[c],e.dontCallGetSet?(N=Hne(o,c),l=N&&N.value):l=o[c],a=ere(r?c:n+(i?".":"#")+c,e.forced),!a&&l!==void 0){if(typeof p==typeof l)continue;Zne(p,l)}(e.sham||l&&l.sham)&&zne(p,"sham",!0),Wne(o,c,p,e)}}});var sp=P((Sbe,EU)=>{"use strict";f();T();m();var Mv=pi(),wT=Set.prototype;EU.exports={Set,add:Mv(wT.add),has:Mv(wT.has),remove:Mv(wT.delete),proto:wT}});var xv=P((Abe,yU)=>{"use strict";f();T();m();var tre=sp().has;yU.exports=function(e){return tre(e),e}});var gU=P((wbe,IU)=>{"use strict";f();T();m();var nre=pi(),rre=gT();IU.exports=function(e,t,n){try{return nre(rre(Object.getOwnPropertyDescriptor(e,t)[n]))}catch(r){}}});var qv=P((Ube,_U)=>{"use strict";f();T();m();var ire=gU(),are=sp();_U.exports=ire(are.proto,"size","get")||function(e){return e.size}});var Vv=P((qbe,vU)=>{"use strict";f();T();m();var sre=Ku();vU.exports=function(e,t,n){for(var r=n?e:e.iterator,i=e.next,a,o;!(a=sre(i,r)).done;)if(o=t(a.value),o!==void 0)return o}});var RU=P((Gbe,AU)=>{"use strict";f();T();m();var SU=pi(),ore=Vv(),OU=sp(),ure=OU.Set,bU=OU.proto,cre=SU(bU.forEach),DU=SU(bU.keys),lre=DU(new ure).next;AU.exports=function(e,t,n){return n?ore({iterator:DU(e),next:lre},t):cre(e,t)}});var PU=P((Jbe,FU)=>{"use strict";f();T();m();FU.exports=function(e){return{iterator:e,next:e.next,done:!1}}});var jv=P((Xbe,kU)=>{"use strict";f();T();m();var wU=gT(),BU=rp(),LU=Ku(),dre=FT(),pre=PU(),CU="Invalid size",fre=RangeError,mre=TypeError,Tre=Math.max,UU=function(e,t){this.set=e,this.size=Tre(t,0),this.has=wU(e.has),this.keys=wU(e.keys)};UU.prototype={getIterator:function(){return pre(BU(LU(this.keys,this.set)))},includes:function(e){return LU(this.has,this.set,e)}};kU.exports=function(e){BU(e);var t=+e.size;if(t!==t)throw new mre(CU);var n=dre(t);if(n<0)throw new fre(CU);return new UU(e,n)}});var xU=P((nDe,MU)=>{"use strict";f();T();m();var Nre=xv(),hre=qv(),Ere=RU(),yre=jv();MU.exports=function(t){var n=Nre(this),r=yre(t);return hre(n)>r.size?!1:Ere(n,function(i){if(!r.includes(i))return!1},!0)!==!1}});var Kv=P((sDe,jU)=>{"use strict";f();T();m();var Ire=yT(),qU=function(e){return{size:e,has:function(){return!1},keys:function(){return{next:function(){return{done:!0}}}}}},VU=function(e){return{size:e,has:function(){return!0},keys:function(){throw new Error("e")}}};jU.exports=function(e,t){var n=Ire("Set");try{new n()[e](qU(0));try{return new n()[e](qU(-1)),!1}catch(i){if(!t)return!0;try{return new n()[e](VU(-1/0)),!1}catch(a){var r=new n;return r.add(1),r.add(2),t(r[e](VU(1/0)))}}}catch(i){return!1}}});var KU=P(()=>{"use strict";f();T();m();var gre=kv(),_re=xU(),vre=Kv(),Sre=!vre("isSubsetOf",function(e){return e});gre({target:"Set",proto:!0,real:!0,forced:Sre},{isSubsetOf:_re})});var GU=P(()=>{"use strict";f();T();m();KU()});var YU=P((IDe,QU)=>{"use strict";f();T();m();var Ore=Ku(),$U=rp(),bre=dv();QU.exports=function(e,t,n){var r,i;$U(e);try{if(r=bre(e,"return"),!r){if(t==="throw")throw n;return n}r=Ore(r,e)}catch(a){i=!0,r=a}if(t==="throw")throw n;if(i)throw r;return $U(r),n}});var HU=P((SDe,JU)=>{"use strict";f();T();m();var Dre=xv(),Are=sp().has,Rre=qv(),Fre=jv(),Pre=Vv(),wre=YU();JU.exports=function(t){var n=Dre(this),r=Fre(t);if(Rre(n){"use strict";f();T();m();var Lre=kv(),Cre=HU(),Bre=Kv(),Ure=!Bre("isSupersetOf",function(e){return!e});Lre({target:"Set",proto:!0,real:!0,forced:Ure},{isSupersetOf:Cre})});var WU=P(()=>{"use strict";f();T();m();zU()});var op=P(Cn=>{"use strict";f();T();m();Object.defineProperty(Cn,"__esModule",{value:!0});Cn.subtractSet=kre;Cn.mapToArrayOfValues=Mre;Cn.kindToConvertedTypeString=xre;Cn.fieldDatasToSimpleFieldDatas=qre;Cn.isNodeLeaf=Vre;Cn.newEntityInterfaceFederationData=jre;Cn.upsertEntityInterfaceFederationData=Kre;Cn.upsertEntityData=$re;Cn.updateEntityData=XU;Cn.newFieldAuthorizationData=Qre;Cn.newAuthorizationData=Yre;Cn.addScopes=Gv;Cn.mergeRequiredScopesByAND=BT;Cn.mergeRequiredScopesByOR=$v;Cn.upsertFieldAuthorizationData=ZU;Cn.upsertAuthorizationData=zre;Cn.upsertAuthorizationConfiguration=Wre;Cn.isNodeKindObject=Xre;Cn.isInterfaceDefinitionData=Zre;Cn.isObjectDefinitionData=eie;var Zt=Ae(),Wr=lr(),LT=Hr(),CT=Es();GU();WU();function kre(e,t){for(let n of e)t.delete(n)}function Mre(e){let t=[];for(let n of e.values())t.push(n);return t}function xre(e){switch(e){case Zt.Kind.BOOLEAN:return Wr.BOOLEAN_SCALAR;case Zt.Kind.ENUM:case Zt.Kind.ENUM_TYPE_DEFINITION:case Zt.Kind.ENUM_TYPE_EXTENSION:return Wr.ENUM;case Zt.Kind.ENUM_VALUE_DEFINITION:return Wr.ENUM_VALUE;case Zt.Kind.FIELD_DEFINITION:return Wr.FIELD;case Zt.Kind.FLOAT:return Wr.FLOAT_SCALAR;case Zt.Kind.INPUT_OBJECT_TYPE_DEFINITION:case Zt.Kind.INPUT_OBJECT_TYPE_EXTENSION:return Wr.INPUT_OBJECT;case Zt.Kind.INPUT_VALUE_DEFINITION:return Wr.INPUT_VALUE;case Zt.Kind.INT:return Wr.INT_SCALAR;case Zt.Kind.INTERFACE_TYPE_DEFINITION:case Zt.Kind.INTERFACE_TYPE_EXTENSION:return Wr.INTERFACE;case Zt.Kind.NULL:return Wr.NULL;case Zt.Kind.OBJECT:case Zt.Kind.OBJECT_TYPE_DEFINITION:case Zt.Kind.OBJECT_TYPE_EXTENSION:return Wr.OBJECT;case Zt.Kind.STRING:return Wr.STRING_SCALAR;case Zt.Kind.SCALAR_TYPE_DEFINITION:case Zt.Kind.SCALAR_TYPE_EXTENSION:return Wr.SCALAR;case Zt.Kind.UNION_TYPE_DEFINITION:case Zt.Kind.UNION_TYPE_EXTENSION:return Wr.UNION;default:return e}}function qre(e){let t=[];for(let{name:n,namedTypeName:r}of e)t.push({name:n,namedTypeName:r});return t}function Vre(e){if(!e)return!0;switch(e){case Zt.Kind.OBJECT_TYPE_DEFINITION:case Zt.Kind.INTERFACE_TYPE_DEFINITION:case Zt.Kind.UNION_TYPE_DEFINITION:return!1;default:return!0}}function jre(e,t){return{concreteTypeNames:new Set(e.concreteTypeNames),fieldDatasBySubgraphName:new Map([[t,e.fieldDatas]]),interfaceFieldNames:new Set(e.interfaceFieldNames),interfaceObjectFieldNames:new Set(e.interfaceObjectFieldNames),interfaceObjectSubgraphs:new Set(e.isInterfaceObject?[t]:[]),subgraphDataByTypeName:new Map([[t,e]]),typeName:e.typeName}}function Kre(e,t,n){(0,LT.addIterableValuesToSet)(t.concreteTypeNames,e.concreteTypeNames),e.subgraphDataByTypeName.set(n,t),e.fieldDatasBySubgraphName.set(n,t.fieldDatas),(0,LT.addIterableValuesToSet)(t.interfaceFieldNames,e.interfaceFieldNames),(0,LT.addIterableValuesToSet)(t.interfaceObjectFieldNames,e.interfaceObjectFieldNames),t.isInterfaceObject&&e.interfaceObjectSubgraphs.add(n)}function Gre({keyFieldSetDataByFieldSet:e,subgraphName:t,typeName:n}){let r=new Map([[t,e]]),i=new Map;for(let[a,{documentNode:o,isUnresolvable:c}]of e)c||i.set(a,o);return{keyFieldSetDatasBySubgraphName:r,documentNodeByKeyFieldSet:i,keyFieldSets:new Set,subgraphNames:new Set([t]),typeName:n}}function $re({entityDataByTypeName:e,keyFieldSetDataByFieldSet:t,subgraphName:n,typeName:r}){let i=e.get(r);i?XU({entityData:i,keyFieldSetDataByFieldSet:t,subgraphName:n}):e.set(r,Gre({keyFieldSetDataByFieldSet:t,subgraphName:n,typeName:r}))}function XU({entityData:e,keyFieldSetDataByFieldSet:t,subgraphName:n}){e.subgraphNames.add(n);let r=e.keyFieldSetDatasBySubgraphName.get(n);if(!r){e.keyFieldSetDatasBySubgraphName.set(n,t);for(let[i,{documentNode:a,isUnresolvable:o}]of t)o||e.documentNodeByKeyFieldSet.set(i,a);return}for(let[i,a]of t){a.isUnresolvable||e.documentNodeByKeyFieldSet.set(i,a.documentNode);let o=r.get(i);if(o){o.isUnresolvable||(o.isUnresolvable=a.isUnresolvable);continue}r.set(i,a)}}function Qre(e){return{fieldName:e,inheritedData:{requiredScopes:[],requiredScopesByOR:[],requiresAuthentication:!1},originalData:{requiredScopes:[],requiresAuthentication:!1}}}function Yre(e){return{fieldAuthDataByFieldName:new Map,requiredScopes:[],requiredScopesByOR:[],requiresAuthentication:!1,typeName:e}}function Gv(e,t){for(let n=e.length-1;n>-1;n--){if(e[n].isSubsetOf(t))return;e[n].isSupersetOf(t)&&e.splice(n,1)}e.push(t)}function BT(e,t){if(e.length<1||t.length<1){for(let r of t)e.push(new Set(r));return e}let n=[];for(let r of t)for(let i of e){let a=(0,LT.addSets)(r,i);Gv(n,a)}return n}function $v(e,t){for(let n of t)Gv(e,n);return e.length<=CT.MAX_OR_SCOPES}function ZU(e,t){var i,a;let n=t.fieldName,r=e.get(n);return r?((i=r.inheritedData).requiresAuthentication||(i.requiresAuthentication=t.inheritedData.requiresAuthentication),(a=r.originalData).requiresAuthentication||(a.requiresAuthentication=t.originalData.requiresAuthentication),!$v(r.inheritedData.requiredScopesByOR,t.inheritedData.requiredScopes)||r.inheritedData.requiredScopes.length*t.inheritedData.requiredScopes.length>CT.MAX_OR_SCOPES||r.originalData.requiredScopes.length*t.originalData.requiredScopes.length>CT.MAX_OR_SCOPES?!1:(r.inheritedData.requiredScopes=BT(r.inheritedData.requiredScopes,t.inheritedData.requiredScopes),r.originalData.requiredScopes=BT(r.originalData.requiredScopes,t.originalData.requiredScopes),!0)):(e.set(n,ek(t)),!0)}function Jre(e){let t=new Map;for(let[n,r]of e)t.set(n,ek(r));return t}function ek(e){return{fieldName:e.fieldName,inheritedData:{requiredScopes:[...e.inheritedData.requiredScopes],requiredScopesByOR:[...e.inheritedData.requiredScopes],requiresAuthentication:e.inheritedData.requiresAuthentication},originalData:{requiredScopes:[...e.originalData.requiredScopes],requiresAuthentication:e.originalData.requiresAuthentication}}}function Hre(e){return{fieldAuthDataByFieldName:Jre(e.fieldAuthDataByFieldName),requiredScopes:[...e.requiredScopes],requiredScopesByOR:[...e.requiredScopes],requiresAuthentication:e.requiresAuthentication,typeName:e.typeName}}function zre(e,t,n){let r=e.get(t.typeName);if(!r){e.set(t.typeName,Hre(t));return}r.requiresAuthentication||(r.requiresAuthentication=t.requiresAuthentication),!$v(r.requiredScopesByOR,t.requiredScopes)||r.requiredScopes.length*t.requiredScopes.length>CT.MAX_OR_SCOPES?n.add(t.typeName):r.requiredScopes=BT(r.requiredScopes,t.requiredScopes);for(let[i,a]of t.fieldAuthDataByFieldName)ZU(r.fieldAuthDataByFieldName,a)||n.add(`${t.typeName}.${i}`)}function Wre(e,t){let n=t.typeName;for(let[r,i]of t.fieldAuthDataByFieldName){let a=`${n}.${r}`,o=e.get(a);o?(o.requiresAuthentication=i.inheritedData.requiresAuthentication,o.requiredScopes=i.inheritedData.requiredScopes.map(c=>[...c]),o.requiredScopesByOR=i.inheritedData.requiredScopesByOR.map(c=>[...c])):e.set(a,{argumentNames:[],typeName:n,fieldName:r,requiresAuthentication:i.inheritedData.requiresAuthentication,requiredScopes:i.inheritedData.requiredScopes.map(c=>[...c]),requiredScopesByOR:i.inheritedData.requiredScopesByOR.map(c=>[...c])})}}function Xre(e){return e===Zt.Kind.OBJECT_TYPE_DEFINITION||e===Zt.Kind.OBJECT_TYPE_EXTENSION}function Zre(e){return e.kind===Zt.Kind.INTERFACE_TYPE_DEFINITION}function eie(e){return e?e.kind===Zt.Kind.OBJECT_TYPE_DEFINITION:!1}});var Jv={};Vf(Jv,{__addDisposableResource:()=>gk,__assign:()=>UT,__asyncDelegator:()=>fk,__asyncGenerator:()=>pk,__asyncValues:()=>mk,__await:()=>al,__awaiter:()=>sk,__classPrivateFieldGet:()=>Ek,__classPrivateFieldIn:()=>Ik,__classPrivateFieldSet:()=>yk,__createBinding:()=>MT,__decorate:()=>rk,__disposeResources:()=>_k,__esDecorate:()=>tie,__exportStar:()=>uk,__extends:()=>tk,__generator:()=>ok,__importDefault:()=>hk,__importStar:()=>Nk,__makeTemplateObject:()=>Tk,__metadata:()=>ak,__param:()=>ik,__propKey:()=>rie,__read:()=>Yv,__rest:()=>nk,__runInitializers:()=>nie,__setFunctionName:()=>iie,__spread:()=>ck,__spreadArray:()=>dk,__spreadArrays:()=>lk,__values:()=>kT,default:()=>oie});function tk(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");Qv(e,t);function n(){this.constructor=e}e.prototype=t===null?Object.create(t):(n.prototype=t.prototype,new n)}function nk(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var i=0,r=Object.getOwnPropertySymbols(e);i=0;c--)(o=e[c])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a}function ik(e,t){return function(n,r){t(n,r,e)}}function tie(e,t,n,r,i,a){function o(J){if(J!==void 0&&typeof J!="function")throw new TypeError("Function expected");return J}for(var c=r.kind,l=c==="getter"?"get":c==="setter"?"set":"value",p=!t&&e?r.static?e:e.prototype:null,N=t||(p?Object.getOwnPropertyDescriptor(p,r.name):{}),y,g=!1,_=n.length-1;_>=0;_--){var F={};for(var B in r)F[B]=B==="access"?{}:r[B];for(var B in r.access)F.access[B]=r.access[B];F.addInitializer=function(J){if(g)throw new TypeError("Cannot add initializers after decoration has completed");a.push(o(J||null))};var j=(0,n[_])(c==="accessor"?{get:N.get,set:N.set}:N[l],F);if(c==="accessor"){if(j===void 0)continue;if(j===null||typeof j!="object")throw new TypeError("Object expected");(y=o(j.get))&&(N.get=y),(y=o(j.set))&&(N.set=y),(y=o(j.init))&&i.unshift(y)}else(y=o(j))&&(c==="field"?i.unshift(y):N[l]=y)}p&&Object.defineProperty(p,r.name,N),g=!0}function nie(e,t,n){for(var r=arguments.length>2,i=0;i0&&a[a.length-1])&&(p[0]===6||p[0]===2)){n=0;continue}if(p[0]===3&&(!a||p[1]>a[0]&&p[1]=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")}function Yv(e,t){var n=typeof Symbol=="function"&&e[Symbol.iterator];if(!n)return e;var r=n.call(e),i,a=[],o;try{for(;(t===void 0||t-- >0)&&!(i=r.next()).done;)a.push(i.value)}catch(c){o={error:c}}finally{try{i&&!i.done&&(n=r.return)&&n.call(r)}finally{if(o)throw o.error}}return a}function ck(){for(var e=[],t=0;t1||c(g,_)})})}function c(g,_){try{l(r[g](_))}catch(F){y(a[0][3],F)}}function l(g){g.value instanceof al?Promise.resolve(g.value.v).then(p,N):y(a[0][2],g)}function p(g){c("next",g)}function N(g){c("throw",g)}function y(g,_){g(_),a.shift(),a.length&&c(a[0][0],a[0][1])}}function fk(e){var t,n;return t={},r("next"),r("throw",function(i){throw i}),r("return"),t[Symbol.iterator]=function(){return this},t;function r(i,a){t[i]=e[i]?function(o){return(n=!n)?{value:al(e[i](o)),done:!1}:a?a(o):o}:a}}function mk(e){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var t=e[Symbol.asyncIterator],n;return t?t.call(e):(e=typeof kT=="function"?kT(e):e[Symbol.iterator](),n={},r("next"),r("throw"),r("return"),n[Symbol.asyncIterator]=function(){return this},n);function r(a){n[a]=e[a]&&function(o){return new Promise(function(c,l){o=e[a](o),i(c,l,o.done,o.value)})}}function i(a,o,c,l){Promise.resolve(l).then(function(p){a({value:p,done:c})},o)}}function Tk(e,t){return Object.defineProperty?Object.defineProperty(e,"raw",{value:t}):e.raw=t,e}function Nk(e){if(e&&e.__esModule)return e;var t={};if(e!=null)for(var n in e)n!=="default"&&Object.prototype.hasOwnProperty.call(e,n)&&MT(t,e,n);return aie(t,e),t}function hk(e){return e&&e.__esModule?e:{default:e}}function Ek(e,t,n,r){if(n==="a"&&!r)throw new TypeError("Private accessor was defined without a getter");if(typeof t=="function"?e!==t||!r:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return n==="m"?r:n==="a"?r.call(e):r?r.value:t.get(e)}function yk(e,t,n,r,i){if(r==="m")throw new TypeError("Private method is not writable");if(r==="a"&&!i)throw new TypeError("Private accessor was defined without a setter");if(typeof t=="function"?e!==t||!i:!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return r==="a"?i.call(e,n):i?i.value=n:t.set(e,n),n}function Ik(e,t){if(t===null||typeof t!="object"&&typeof t!="function")throw new TypeError("Cannot use 'in' operator on non-object");return typeof e=="function"?t===e:e.has(t)}function gk(e,t,n){if(t!=null){if(typeof t!="object"&&typeof t!="function")throw new TypeError("Object expected.");var r;if(n){if(!Symbol.asyncDispose)throw new TypeError("Symbol.asyncDispose is not defined.");r=t[Symbol.asyncDispose]}if(r===void 0){if(!Symbol.dispose)throw new TypeError("Symbol.dispose is not defined.");r=t[Symbol.dispose]}if(typeof r!="function")throw new TypeError("Object not disposable.");e.stack.push({value:t,dispose:r,async:n})}else n&&e.stack.push({async:!0});return t}function _k(e){function t(r){e.error=e.hasError?new sie(r,e.error,"An error was suppressed during disposal."):r,e.hasError=!0}function n(){for(;e.stack.length;){var r=e.stack.pop();try{var i=r.dispose&&r.dispose.call(r.value);if(r.async)return Promise.resolve(i).then(n,function(a){return t(a),n()})}catch(a){t(a)}}if(e.hasError)throw e.error}return n()}var Qv,UT,MT,aie,sie,oie,Hv=yu(()=>{"use strict";f();T();m();Qv=function(e,t){return Qv=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,r){n.__proto__=r}||function(n,r){for(var i in r)Object.prototype.hasOwnProperty.call(r,i)&&(n[i]=r[i])},Qv(e,t)};UT=function(){return UT=Object.assign||function(t){for(var n,r=1,i=arguments.length;rKk,__assign:()=>xT,__asyncDelegator:()=>Bk,__asyncGenerator:()=>Ck,__asyncValues:()=>Uk,__await:()=>sl,__awaiter:()=>Ak,__classPrivateFieldGet:()=>qk,__classPrivateFieldIn:()=>jk,__classPrivateFieldSet:()=>Vk,__createBinding:()=>VT,__decorate:()=>Ok,__disposeResources:()=>Gk,__esDecorate:()=>uie,__exportStar:()=>Fk,__extends:()=>vk,__generator:()=>Rk,__importDefault:()=>xk,__importStar:()=>Mk,__makeTemplateObject:()=>kk,__metadata:()=>Dk,__param:()=>bk,__propKey:()=>lie,__read:()=>Wv,__rest:()=>Sk,__runInitializers:()=>cie,__setFunctionName:()=>die,__spread:()=>Pk,__spreadArray:()=>Lk,__spreadArrays:()=>wk,__values:()=>qT,default:()=>mie});function vk(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");zv(e,t);function n(){this.constructor=e}e.prototype=t===null?Object.create(t):(n.prototype=t.prototype,new n)}function Sk(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var i=0,r=Object.getOwnPropertySymbols(e);i=0;c--)(o=e[c])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a}function bk(e,t){return function(n,r){t(n,r,e)}}function uie(e,t,n,r,i,a){function o(J){if(J!==void 0&&typeof J!="function")throw new TypeError("Function expected");return J}for(var c=r.kind,l=c==="getter"?"get":c==="setter"?"set":"value",p=!t&&e?r.static?e:e.prototype:null,N=t||(p?Object.getOwnPropertyDescriptor(p,r.name):{}),y,g=!1,_=n.length-1;_>=0;_--){var F={};for(var B in r)F[B]=B==="access"?{}:r[B];for(var B in r.access)F.access[B]=r.access[B];F.addInitializer=function(J){if(g)throw new TypeError("Cannot add initializers after decoration has completed");a.push(o(J||null))};var j=(0,n[_])(c==="accessor"?{get:N.get,set:N.set}:N[l],F);if(c==="accessor"){if(j===void 0)continue;if(j===null||typeof j!="object")throw new TypeError("Object expected");(y=o(j.get))&&(N.get=y),(y=o(j.set))&&(N.set=y),(y=o(j.init))&&i.unshift(y)}else(y=o(j))&&(c==="field"?i.unshift(y):N[l]=y)}p&&Object.defineProperty(p,r.name,N),g=!0}function cie(e,t,n){for(var r=arguments.length>2,i=0;i0&&a[a.length-1])&&(p[0]===6||p[0]===2)){n=0;continue}if(p[0]===3&&(!a||p[1]>a[0]&&p[1]=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")}function Wv(e,t){var n=typeof Symbol=="function"&&e[Symbol.iterator];if(!n)return e;var r=n.call(e),i,a=[],o;try{for(;(t===void 0||t-- >0)&&!(i=r.next()).done;)a.push(i.value)}catch(c){o={error:c}}finally{try{i&&!i.done&&(n=r.return)&&n.call(r)}finally{if(o)throw o.error}}return a}function Pk(){for(var e=[],t=0;t1||c(g,_)})})}function c(g,_){try{l(r[g](_))}catch(F){y(a[0][3],F)}}function l(g){g.value instanceof sl?Promise.resolve(g.value.v).then(p,N):y(a[0][2],g)}function p(g){c("next",g)}function N(g){c("throw",g)}function y(g,_){g(_),a.shift(),a.length&&c(a[0][0],a[0][1])}}function Bk(e){var t,n;return t={},r("next"),r("throw",function(i){throw i}),r("return"),t[Symbol.iterator]=function(){return this},t;function r(i,a){t[i]=e[i]?function(o){return(n=!n)?{value:sl(e[i](o)),done:!1}:a?a(o):o}:a}}function Uk(e){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var t=e[Symbol.asyncIterator],n;return t?t.call(e):(e=typeof qT=="function"?qT(e):e[Symbol.iterator](),n={},r("next"),r("throw"),r("return"),n[Symbol.asyncIterator]=function(){return this},n);function r(a){n[a]=e[a]&&function(o){return new Promise(function(c,l){o=e[a](o),i(c,l,o.done,o.value)})}}function i(a,o,c,l){Promise.resolve(l).then(function(p){a({value:p,done:c})},o)}}function kk(e,t){return Object.defineProperty?Object.defineProperty(e,"raw",{value:t}):e.raw=t,e}function Mk(e){if(e&&e.__esModule)return e;var t={};if(e!=null)for(var n in e)n!=="default"&&Object.prototype.hasOwnProperty.call(e,n)&&VT(t,e,n);return pie(t,e),t}function xk(e){return e&&e.__esModule?e:{default:e}}function qk(e,t,n,r){if(n==="a"&&!r)throw new TypeError("Private accessor was defined without a getter");if(typeof t=="function"?e!==t||!r:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return n==="m"?r:n==="a"?r.call(e):r?r.value:t.get(e)}function Vk(e,t,n,r,i){if(r==="m")throw new TypeError("Private method is not writable");if(r==="a"&&!i)throw new TypeError("Private accessor was defined without a setter");if(typeof t=="function"?e!==t||!i:!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return r==="a"?i.call(e,n):i?i.value=n:t.set(e,n),n}function jk(e,t){if(t===null||typeof t!="object"&&typeof t!="function")throw new TypeError("Cannot use 'in' operator on non-object");return typeof e=="function"?t===e:e.has(t)}function Kk(e,t,n){if(t!=null){if(typeof t!="object"&&typeof t!="function")throw new TypeError("Object expected.");var r;if(n){if(!Symbol.asyncDispose)throw new TypeError("Symbol.asyncDispose is not defined.");r=t[Symbol.asyncDispose]}if(r===void 0){if(!Symbol.dispose)throw new TypeError("Symbol.dispose is not defined.");r=t[Symbol.dispose]}if(typeof r!="function")throw new TypeError("Object not disposable.");e.stack.push({value:t,dispose:r,async:n})}else n&&e.stack.push({async:!0});return t}function Gk(e){function t(r){e.error=e.hasError?new fie(r,e.error,"An error was suppressed during disposal."):r,e.hasError=!0}function n(){for(;e.stack.length;){var r=e.stack.pop();try{var i=r.dispose&&r.dispose.call(r.value);if(r.async)return Promise.resolve(i).then(n,function(a){return t(a),n()})}catch(a){t(a)}}if(e.hasError)throw e.error}return n()}var zv,xT,VT,pie,fie,mie,Qk=yu(()=>{"use strict";f();T();m();zv=function(e,t){return zv=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,r){n.__proto__=r}||function(n,r){for(var i in r)Object.prototype.hasOwnProperty.call(r,i)&&(n[i]=r[i])},zv(e,t)};xT=function(){return xT=Object.assign||function(t){for(var n,r=1,i=arguments.length;r{"use strict";f();T();m()});var up=P(dr=>{"use strict";f();T();m();Object.defineProperty(dr,"__esModule",{value:!0});dr.assertSome=dr.isSome=dr.compareNodes=dr.nodeToString=dr.compareStrings=dr.isValidPath=dr.isDocumentString=dr.asArray=void 0;var Tie=Ae(),Nie=e=>Array.isArray(e)?e:e?[e]:[];dr.asArray=Nie;var hie=/\.[a-z0-9]+$/i;function Eie(e){if(typeof e!="string"||hie.test(e))return!1;try{return(0,Tie.parse)(e),!0}catch(t){}return!1}dr.isDocumentString=Eie;var yie=/[‘“!%^<>`]/;function Iie(e){return typeof e=="string"&&!yie.test(e)}dr.isValidPath=Iie;function Jk(e,t){return String(e)String(t)?1:0}dr.compareStrings=Jk;function Xv(e){var n,r;let t;return"alias"in e&&(t=(n=e.alias)==null?void 0:n.value),t==null&&"name"in e&&(t=(r=e.name)==null?void 0:r.value),t==null&&(t=e.kind),t}dr.nodeToString=Xv;function gie(e,t,n){let r=Xv(e),i=Xv(t);return typeof n=="function"?n(r,i):Jk(r,i)}dr.compareNodes=gie;function _ie(e){return e!=null}dr.isSome=_ie;function vie(e,t="Value should be something"){if(e==null)throw new Error(t)}dr.assertSome=vie});var cp=P(KT=>{"use strict";f();T();m();Object.defineProperty(KT,"__esModule",{value:!0});KT.inspect=void 0;var Wk=3;function Sie(e){return jT(e,[])}KT.inspect=Sie;function jT(e,t){switch(typeof e){case"string":return JSON.stringify(e);case"function":return e.name?`[function ${e.name}]`:"[function]";case"object":return Oie(e,t);default:return String(e)}}function Hk(e){return(e.name="GraphQLError")?e.toString():`${e.name}: ${e.message}; - ${e.stack}`}function Oie(e,t){if(e===null)return"null";if(e instanceof Error)return e.name==="AggregateError"?Hk(e)+` -`+zk(e.errors,t):Hk(e);if(t.includes(e))return"[Circular]";let n=[...t,e];if(bie(e)){let r=e.toJSON();if(r!==e)return typeof r=="string"?r:jT(r,n)}else if(Array.isArray(e))return zk(e,n);return Die(e,n)}function bie(e){return typeof e.toJSON=="function"}function Die(e,t){let n=Object.entries(e);return n.length===0?"{}":t.length>Wk?"["+Aie(e)+"]":"{ "+n.map(([i,a])=>i+": "+jT(a,t)).join(", ")+" }"}function zk(e,t){if(e.length===0)return"[]";if(t.length>Wk)return"[Array]";let n=e.length,r=[];for(let i=0;i{"use strict";f();T();m();Object.defineProperty(ol,"__esModule",{value:!0});ol.relocatedError=ol.createGraphQLError=void 0;var Zv=Ae(),Rie=["message","locations","path","nodes","source","positions","originalError","name","stack","extensions"];function Fie(e){return e!=null&&typeof e=="object"&&Object.keys(e).every(t=>Rie.includes(t))}function eS(e,t){return t!=null&&t.originalError&&!(t.originalError instanceof Error)&&Fie(t.originalError)&&(t.originalError=eS(t.originalError.message,t.originalError)),Zv.versionInfo.major>=17?new Zv.GraphQLError(e,t):new Zv.GraphQLError(e,t==null?void 0:t.nodes,t==null?void 0:t.source,t==null?void 0:t.positions,t==null?void 0:t.path,t==null?void 0:t.originalError,t==null?void 0:t.extensions)}ol.createGraphQLError=eS;function Pie(e,t){return eS(e.message,{nodes:e.nodes,source:e.source,positions:e.positions,path:t==null?e.path:t,originalError:e,extensions:e.extensions})}ol.relocatedError=Pie});var lp=P(ki=>{"use strict";f();T();m();Object.defineProperty(ki,"__esModule",{value:!0});ki.hasOwnProperty=ki.promiseReduce=ki.isPromise=ki.isObjectLike=ki.isIterableObject=void 0;function wie(e){return e!=null&&typeof e=="object"&&Symbol.iterator in e}ki.isIterableObject=wie;function Lie(e){return typeof e=="object"&&e!==null}ki.isObjectLike=Lie;function Xk(e){return(e==null?void 0:e.then)!=null}ki.isPromise=Xk;function Cie(e,t,n){let r=n;for(let i of e)r=Xk(r)?r.then(a=>t(a,i)):t(r,i);return r}ki.promiseReduce=Cie;function Bie(e,t){return Object.prototype.hasOwnProperty.call(e,t)}ki.hasOwnProperty=Bie});var nS=P(QT=>{"use strict";f();T();m();Object.defineProperty(QT,"__esModule",{value:!0});QT.getArgumentValues=void 0;var tS=cp(),$u=Ae(),$T=GT(),Uie=lp();function kie(e,t,n={}){var o;let r={},a=((o=t.arguments)!=null?o:[]).reduce((c,l)=>Q(k({},c),{[l.name.value]:l}),{});for(let{name:c,type:l,defaultValue:p}of e.args){let N=a[c];if(!N){if(p!==void 0)r[c]=p;else if((0,$u.isNonNullType)(l))throw(0,$T.createGraphQLError)(`Argument "${c}" of required type "${(0,tS.inspect)(l)}" was not provided.`,{nodes:[t]});continue}let y=N.value,g=y.kind===$u.Kind.NULL;if(y.kind===$u.Kind.VARIABLE){let F=y.name.value;if(n==null||!(0,Uie.hasOwnProperty)(n,F)){if(p!==void 0)r[c]=p;else if((0,$u.isNonNullType)(l))throw(0,$T.createGraphQLError)(`Argument "${c}" of required type "${(0,tS.inspect)(l)}" was provided the variable "$${F}" which was not provided a runtime value.`,{nodes:[y]});continue}g=n[F]==null}if(g&&(0,$u.isNonNullType)(l))throw(0,$T.createGraphQLError)(`Argument "${c}" of non-null type "${(0,tS.inspect)(l)}" must not be null.`,{nodes:[y]});let _=(0,$u.valueFromAST)(y,l,n);if(_===void 0)throw(0,$T.createGraphQLError)(`Argument "${c}" has invalid value ${(0,$u.print)(y)}.`,{nodes:[y]});r[c]=_}return r}QT.getArgumentValues=kie});var rS=P(Ua=>{"use strict";f();T();m();Object.defineProperty(Ua,"__esModule",{value:!0});Ua.getDirective=Ua.getDirectives=Ua.getDirectiveInExtensions=Ua.getDirectivesInExtensions=void 0;var eM=nS();function tM(e,t=["directives"]){return t.reduce((n,r)=>n==null?n:n[r],e==null?void 0:e.extensions)}Ua.getDirectivesInExtensions=tM;function Zk(e,t){let n=e.filter(r=>r.name===t);if(n.length)return n.map(r=>{var i;return(i=r.args)!=null?i:{}})}function nM(e,t,n=["directives"]){let r=n.reduce((a,o)=>a==null?a:a[o],e==null?void 0:e.extensions);if(r===void 0)return;if(Array.isArray(r))return Zk(r,t);let i=[];for(let[a,o]of Object.entries(r))if(Array.isArray(o))for(let c of o)i.push({name:a,args:c});else i.push({name:a,args:o});return Zk(i,t)}Ua.getDirectiveInExtensions=nM;function Mie(e,t,n=["directives"]){let r=tM(t,n);if(r!=null&&r.length>0)return r;let a=(e&&e.getDirectives?e.getDirectives():[]).reduce((l,p)=>(l[p.name]=p,l),{}),o=[];t.astNode&&o.push(t.astNode),"extensionASTNodes"in t&&t.extensionASTNodes&&(o=[...o,...t.extensionASTNodes]);let c=[];for(let l of o)if(l.directives)for(let p of l.directives){let N=a[p.name.value];N&&c.push({name:p.name.value,args:(0,eM.getArgumentValues)(N,p)})}return c}Ua.getDirectives=Mie;function xie(e,t,n,r=["directives"]){let i=nM(t,n,r);if(i!=null)return i;let a=e&&e.getDirective?e.getDirective(n):void 0;if(a==null)return;let o=[];t.astNode&&o.push(t.astNode),"extensionASTNodes"in t&&t.extensionASTNodes&&(o=[...o,...t.extensionASTNodes]);let c=[];for(let l of o)if(l.directives)for(let p of l.directives)p.name.value===n&&c.push((0,eM.getArgumentValues)(a,p));if(c.length)return c}Ua.getDirective=xie});var iS=P(YT=>{"use strict";f();T();m();Object.defineProperty(YT,"__esModule",{value:!0});YT.getFieldsWithDirectives=void 0;var qie=Ae();function Vie(e,t={}){let n={},r=["ObjectTypeDefinition","ObjectTypeExtension"];t.includeInputTypes&&(r=[...r,"InputObjectTypeDefinition","InputObjectTypeExtension"]);let i=e.definitions.filter(a=>r.includes(a.kind));for(let a of i){let o=a.name.value;if(a.fields!=null){for(let c of a.fields)if(c.directives&&c.directives.length>0){let l=c.name.value,p=`${o}.${l}`,N=c.directives.map(y=>({name:y.name.value,args:(y.arguments||[]).reduce((g,_)=>Q(k({},g),{[_.name.value]:(0,qie.valueFromASTUntyped)(_.value)}),{})}));n[p]=N}}}return n}YT.getFieldsWithDirectives=Vie});var rM=P(JT=>{"use strict";f();T();m();Object.defineProperty(JT,"__esModule",{value:!0});JT.getArgumentsWithDirectives=void 0;var aS=Ae();function jie(e){return e.kind===aS.Kind.OBJECT_TYPE_DEFINITION||e.kind===aS.Kind.OBJECT_TYPE_EXTENSION}function Kie(e){var r;let t={},n=e.definitions.filter(jie);for(let i of n)if(i.fields!=null)for(let a of i.fields){let o=(r=a.arguments)==null?void 0:r.filter(l=>{var p;return(p=l.directives)==null?void 0:p.length});if(!(o!=null&&o.length))continue;let c=t[`${i.name.value}.${a.name.value}`]={};for(let l of o){let p=l.directives.map(N=>({name:N.name.value,args:(N.arguments||[]).reduce((y,g)=>Q(k({},y),{[g.name.value]:(0,aS.valueFromASTUntyped)(g.value)}),{})}));c[l.name.value]=p}}return t}JT.getArgumentsWithDirectives=Kie});var sS=P(HT=>{"use strict";f();T();m();Object.defineProperty(HT,"__esModule",{value:!0});HT.getImplementingTypes=void 0;var Gie=Ae();function $ie(e,t){let n=t.getTypeMap(),r=[];for(let i in n){let a=n[i];(0,Gie.isObjectType)(a)&&a.getInterfaces().find(c=>c.name===e)&&r.push(a.name)}return r}HT.getImplementingTypes=$ie});var uS=P(zT=>{"use strict";f();T();m();Object.defineProperty(zT,"__esModule",{value:!0});zT.astFromType=void 0;var Qie=cp(),Qu=Ae();function oS(e){if((0,Qu.isNonNullType)(e)){let t=oS(e.ofType);if(t.kind===Qu.Kind.NON_NULL_TYPE)throw new Error(`Invalid type node ${(0,Qie.inspect)(e)}. Inner type of non-null type cannot be a non-null type.`);return{kind:Qu.Kind.NON_NULL_TYPE,type:t}}else if((0,Qu.isListType)(e))return{kind:Qu.Kind.LIST_TYPE,type:oS(e.ofType)};return{kind:Qu.Kind.NAMED_TYPE,name:{kind:Qu.Kind.NAME,value:e.name}}}zT.astFromType=oS});var XT=P(WT=>{"use strict";f();T();m();Object.defineProperty(WT,"__esModule",{value:!0});WT.astFromValueUntyped=void 0;var ka=Ae();function cS(e){if(e===null)return{kind:ka.Kind.NULL};if(e===void 0)return null;if(Array.isArray(e)){let t=[];for(let n of e){let r=cS(n);r!=null&&t.push(r)}return{kind:ka.Kind.LIST,values:t}}if(typeof e=="object"){let t=[];for(let n in e){let r=e[n],i=cS(r);i&&t.push({kind:ka.Kind.OBJECT_FIELD,name:{kind:ka.Kind.NAME,value:n},value:i})}return{kind:ka.Kind.OBJECT,fields:t}}if(typeof e=="boolean")return{kind:ka.Kind.BOOLEAN,value:e};if(typeof e=="bigint")return{kind:ka.Kind.INT,value:String(e)};if(typeof e=="number"&&isFinite(e)){let t=String(e);return Yie.test(t)?{kind:ka.Kind.INT,value:t}:{kind:ka.Kind.FLOAT,value:t}}if(typeof e=="string")return{kind:ka.Kind.STRING,value:e};throw new TypeError(`Cannot convert value to AST: ${e}.`)}WT.astFromValueUntyped=cS;var Yie=/^-?(?:0|[1-9][0-9]*)$/});var aM=P(ZT=>{"use strict";f();T();m();Object.defineProperty(ZT,"__esModule",{value:!0});ZT.astFromValue=void 0;var Jie=cp(),fi=Ae(),Hie=XT(),iM=lp();function dp(e,t){if((0,fi.isNonNullType)(t)){let n=dp(e,t.ofType);return(n==null?void 0:n.kind)===fi.Kind.NULL?null:n}if(e===null)return{kind:fi.Kind.NULL};if(e===void 0)return null;if((0,fi.isListType)(t)){let n=t.ofType;if((0,iM.isIterableObject)(e)){let r=[];for(let i of e){let a=dp(i,n);a!=null&&r.push(a)}return{kind:fi.Kind.LIST,values:r}}return dp(e,n)}if((0,fi.isInputObjectType)(t)){if(!(0,iM.isObjectLike)(e))return null;let n=[];for(let r of Object.values(t.getFields())){let i=dp(e[r.name],r.type);i&&n.push({kind:fi.Kind.OBJECT_FIELD,name:{kind:fi.Kind.NAME,value:r.name},value:i})}return{kind:fi.Kind.OBJECT,fields:n}}if((0,fi.isLeafType)(t)){let n=t.serialize(e);return n==null?null:(0,fi.isEnumType)(t)?{kind:fi.Kind.ENUM,value:n}:t.name==="ID"&&typeof n=="string"&&zie.test(n)?{kind:fi.Kind.INT,value:n}:(0,Hie.astFromValueUntyped)(n)}console.assert(!1,"Unexpected input type: "+(0,Jie.inspect)(t))}ZT.astFromValue=dp;var zie=/^-?(?:0|[1-9][0-9]*)$/});var sM=P(eN=>{"use strict";f();T();m();Object.defineProperty(eN,"__esModule",{value:!0});eN.getDescriptionNode=void 0;var Wie=Ae();function Xie(e){var t;if((t=e.astNode)!=null&&t.description)return Q(k({},e.astNode.description),{block:!0});if(e.description)return{kind:Wie.Kind.STRING,value:e.description,block:!0}}eN.getDescriptionNode=Xie});var ul=P(br=>{"use strict";f();T();m();Object.defineProperty(br,"__esModule",{value:!0});br.memoize2of5=br.memoize2of4=br.memoize5=br.memoize4=br.memoize3=br.memoize2=br.memoize1=void 0;function Zie(e){let t=new WeakMap;return function(r){let i=t.get(r);if(i===void 0){let a=e(r);return t.set(r,a),a}return i}}br.memoize1=Zie;function eae(e){let t=new WeakMap;return function(r,i){let a=t.get(r);if(!a){a=new WeakMap,t.set(r,a);let c=e(r,i);return a.set(i,c),c}let o=a.get(i);if(o===void 0){let c=e(r,i);return a.set(i,c),c}return o}}br.memoize2=eae;function tae(e){let t=new WeakMap;return function(r,i,a){let o=t.get(r);if(!o){o=new WeakMap,t.set(r,o);let p=new WeakMap;o.set(i,p);let N=e(r,i,a);return p.set(a,N),N}let c=o.get(i);if(!c){c=new WeakMap,o.set(i,c);let p=e(r,i,a);return c.set(a,p),p}let l=c.get(a);if(l===void 0){let p=e(r,i,a);return c.set(a,p),p}return l}}br.memoize3=tae;function nae(e){let t=new WeakMap;return function(r,i,a,o){let c=t.get(r);if(!c){c=new WeakMap,t.set(r,c);let y=new WeakMap;c.set(i,y);let g=new WeakMap;y.set(a,g);let _=e(r,i,a,o);return g.set(o,_),_}let l=c.get(i);if(!l){l=new WeakMap,c.set(i,l);let y=new WeakMap;l.set(a,y);let g=e(r,i,a,o);return y.set(o,g),g}let p=l.get(a);if(!p){let y=new WeakMap;l.set(a,y);let g=e(r,i,a,o);return y.set(o,g),g}let N=p.get(o);if(N===void 0){let y=e(r,i,a,o);return p.set(o,y),y}return N}}br.memoize4=nae;function rae(e){let t=new WeakMap;return function(r,i,a,o,c){let l=t.get(r);if(!l){l=new WeakMap,t.set(r,l);let _=new WeakMap;l.set(i,_);let F=new WeakMap;_.set(a,F);let B=new WeakMap;F.set(o,B);let j=e(r,i,a,o,c);return B.set(c,j),j}let p=l.get(i);if(!p){p=new WeakMap,l.set(i,p);let _=new WeakMap;p.set(a,_);let F=new WeakMap;_.set(o,F);let B=e(r,i,a,o,c);return F.set(c,B),B}let N=p.get(a);if(!N){N=new WeakMap,p.set(a,N);let _=new WeakMap;N.set(o,_);let F=e(r,i,a,o,c);return _.set(c,F),F}let y=N.get(o);if(!y){y=new WeakMap,N.set(o,y);let _=e(r,i,a,o,c);return y.set(c,_),_}let g=y.get(c);if(g===void 0){let _=e(r,i,a,o,c);return y.set(c,_),_}return g}}br.memoize5=rae;function iae(e){let t=new WeakMap;return function(r,i,a,o){let c=t.get(r);if(!c){c=new WeakMap,t.set(r,c);let p=e(r,i,a,o);return c.set(i,p),p}let l=c.get(i);if(l===void 0){let p=e(r,i,a,o);return c.set(i,p),p}return l}}br.memoize2of4=iae;function aae(e){let t=new WeakMap;return function(r,i,a,o,c){let l=t.get(r);if(!l){l=new WeakMap,t.set(r,l);let N=e(r,i,a,o,c);return l.set(i,N),N}let p=l.get(i);if(p===void 0){let N=e(r,i,a,o,c);return l.set(i,N),N}return p}}br.memoize2of5=aae});var pp=P(mi=>{"use strict";f();T();m();Object.defineProperty(mi,"__esModule",{value:!0});mi.getRootTypeMap=mi.getRootTypes=mi.getRootTypeNames=mi.getDefinedRootType=void 0;var sae=GT(),lS=ul();function oae(e,t,n){let i=(0,mi.getRootTypeMap)(e).get(t);if(i==null)throw(0,sae.createGraphQLError)(`Schema is not configured to execute ${t} operation.`,{nodes:n});return i}mi.getDefinedRootType=oae;mi.getRootTypeNames=(0,lS.memoize1)(function(t){let n=(0,mi.getRootTypes)(t);return new Set([...n].map(r=>r.name))});mi.getRootTypes=(0,lS.memoize1)(function(t){let n=(0,mi.getRootTypeMap)(t);return new Set(n.values())});mi.getRootTypeMap=(0,lS.memoize1)(function(t){let n=new Map,r=t.getQueryType();r&&n.set("query",r);let i=t.getMutationType();i&&n.set("mutation",i);let a=t.getSubscriptionType();return a&&n.set("subscription",a),n})});var TS=P(Et=>{"use strict";f();T();m();Object.defineProperty(Et,"__esModule",{value:!0});Et.makeDirectiveNodes=Et.makeDirectiveNode=Et.makeDeprecatedDirective=Et.astFromEnumValue=Et.astFromInputField=Et.astFromField=Et.astFromScalarType=Et.astFromEnumType=Et.astFromInputObjectType=Et.astFromUnionType=Et.astFromInterfaceType=Et.astFromObjectType=Et.astFromArg=Et.getDeprecatableDirectiveNodes=Et.getDirectiveNodes=Et.astFromDirective=Et.astFromSchema=Et.printSchemaWithDirectives=Et.getDocumentNodeFromSchema=void 0;var ot=Ae(),Yu=uS(),dS=aM(),uae=XT(),Mi=sM(),pS=rS(),cae=up(),lae=pp();function oM(e,t={}){let n=t.pathToDirectivesInExtensions,r=e.getTypeMap(),i=uM(e,n),a=i!=null?[i]:[],o=e.getDirectives();for(let c of o)(0,ot.isSpecifiedDirective)(c)||a.push(cM(c,e,n));for(let c in r){let l=r[c],p=(0,ot.isSpecifiedScalarType)(l),N=(0,ot.isIntrospectionType)(l);if(!(p||N))if((0,ot.isObjectType)(l))a.push(lM(l,e,n));else if((0,ot.isInterfaceType)(l))a.push(dM(l,e,n));else if((0,ot.isUnionType)(l))a.push(pM(l,e,n));else if((0,ot.isInputObjectType)(l))a.push(fM(l,e,n));else if((0,ot.isEnumType)(l))a.push(mM(l,e,n));else if((0,ot.isScalarType)(l))a.push(TM(l,e,n));else throw new Error(`Unknown type ${l}.`)}return{kind:ot.Kind.DOCUMENT,definitions:a}}Et.getDocumentNodeFromSchema=oM;function dae(e,t={}){let n=oM(e,t);return(0,ot.print)(n)}Et.printSchemaWithDirectives=dae;function uM(e,t){let n=new Map([["query",void 0],["mutation",void 0],["subscription",void 0]]),r=[];if(e.astNode!=null&&r.push(e.astNode),e.extensionASTNodes!=null)for(let p of e.extensionASTNodes)r.push(p);for(let p of r)if(p.operationTypes)for(let N of p.operationTypes)n.set(N.operation,N);let i=(0,lae.getRootTypeMap)(e);for(let[p,N]of n){let y=i.get(p);if(y!=null){let g=(0,Yu.astFromType)(y);N!=null?N.type=g:n.set(p,{kind:ot.Kind.OPERATION_TYPE_DEFINITION,operation:p,type:g})}}let a=[...n.values()].filter(cae.isSome),o=Ju(e,e,t);if(!a.length&&!o.length)return null;let c={kind:a!=null?ot.Kind.SCHEMA_DEFINITION:ot.Kind.SCHEMA_EXTENSION,operationTypes:a,directives:o},l=(0,Mi.getDescriptionNode)(e);return l&&(c.description=l),c}Et.astFromSchema=uM;function cM(e,t,n){var r,i;return{kind:ot.Kind.DIRECTIVE_DEFINITION,description:(0,Mi.getDescriptionNode)(e),name:{kind:ot.Kind.NAME,value:e.name},arguments:(r=e.args)==null?void 0:r.map(a=>fS(a,t,n)),repeatable:e.isRepeatable,locations:((i=e.locations)==null?void 0:i.map(a=>({kind:ot.Kind.NAME,value:a})))||[]}}Et.astFromDirective=cM;function Ju(e,t,n){let r=(0,pS.getDirectivesInExtensions)(e,n),i=[];e.astNode!=null&&i.push(e.astNode),"extensionASTNodes"in e&&e.extensionASTNodes!=null&&(i=i.concat(e.extensionASTNodes));let a;if(r!=null)a=tN(t,r);else{a=[];for(let o of i)o.directives&&a.push(...o.directives)}return a}Et.getDirectiveNodes=Ju;function mp(e,t,n){var c,l;let r=[],i=null,a=(0,pS.getDirectivesInExtensions)(e,n),o;return a!=null?o=tN(t,a):o=(c=e.astNode)==null?void 0:c.directives,o!=null&&(r=o.filter(p=>p.name.value!=="deprecated"),e.deprecationReason!=null&&(i=(l=o.filter(p=>p.name.value==="deprecated"))==null?void 0:l[0])),e.deprecationReason!=null&&i==null&&(i=EM(e.deprecationReason)),i==null?r:[i].concat(r)}Et.getDeprecatableDirectiveNodes=mp;function fS(e,t,n){var r;return{kind:ot.Kind.INPUT_VALUE_DEFINITION,description:(0,Mi.getDescriptionNode)(e),name:{kind:ot.Kind.NAME,value:e.name},type:(0,Yu.astFromType)(e.type),defaultValue:e.defaultValue!==void 0&&(r=(0,dS.astFromValue)(e.defaultValue,e.type))!=null?r:void 0,directives:mp(e,t,n)}}Et.astFromArg=fS;function lM(e,t,n){return{kind:ot.Kind.OBJECT_TYPE_DEFINITION,description:(0,Mi.getDescriptionNode)(e),name:{kind:ot.Kind.NAME,value:e.name},fields:Object.values(e.getFields()).map(r=>mS(r,t,n)),interfaces:Object.values(e.getInterfaces()).map(r=>(0,Yu.astFromType)(r)),directives:Ju(e,t,n)}}Et.astFromObjectType=lM;function dM(e,t,n){let r={kind:ot.Kind.INTERFACE_TYPE_DEFINITION,description:(0,Mi.getDescriptionNode)(e),name:{kind:ot.Kind.NAME,value:e.name},fields:Object.values(e.getFields()).map(i=>mS(i,t,n)),directives:Ju(e,t,n)};return"getInterfaces"in e&&(r.interfaces=Object.values(e.getInterfaces()).map(i=>(0,Yu.astFromType)(i))),r}Et.astFromInterfaceType=dM;function pM(e,t,n){return{kind:ot.Kind.UNION_TYPE_DEFINITION,description:(0,Mi.getDescriptionNode)(e),name:{kind:ot.Kind.NAME,value:e.name},directives:Ju(e,t,n),types:e.getTypes().map(r=>(0,Yu.astFromType)(r))}}Et.astFromUnionType=pM;function fM(e,t,n){return{kind:ot.Kind.INPUT_OBJECT_TYPE_DEFINITION,description:(0,Mi.getDescriptionNode)(e),name:{kind:ot.Kind.NAME,value:e.name},fields:Object.values(e.getFields()).map(r=>NM(r,t,n)),directives:Ju(e,t,n)}}Et.astFromInputObjectType=fM;function mM(e,t,n){return{kind:ot.Kind.ENUM_TYPE_DEFINITION,description:(0,Mi.getDescriptionNode)(e),name:{kind:ot.Kind.NAME,value:e.name},values:Object.values(e.getValues()).map(r=>hM(r,t,n)),directives:Ju(e,t,n)}}Et.astFromEnumType=mM;function TM(e,t,n){var o;let r=(0,pS.getDirectivesInExtensions)(e,n),i=r?tN(t,r):((o=e.astNode)==null?void 0:o.directives)||[],a=e.specifiedByUrl||e.specifiedByURL;if(a&&!i.some(c=>c.name.value==="specifiedBy")){let c={url:a};i.push(fp("specifiedBy",c))}return{kind:ot.Kind.SCALAR_TYPE_DEFINITION,description:(0,Mi.getDescriptionNode)(e),name:{kind:ot.Kind.NAME,value:e.name},directives:i}}Et.astFromScalarType=TM;function mS(e,t,n){return{kind:ot.Kind.FIELD_DEFINITION,description:(0,Mi.getDescriptionNode)(e),name:{kind:ot.Kind.NAME,value:e.name},arguments:e.args.map(r=>fS(r,t,n)),type:(0,Yu.astFromType)(e.type),directives:mp(e,t,n)}}Et.astFromField=mS;function NM(e,t,n){var r;return{kind:ot.Kind.INPUT_VALUE_DEFINITION,description:(0,Mi.getDescriptionNode)(e),name:{kind:ot.Kind.NAME,value:e.name},type:(0,Yu.astFromType)(e.type),directives:mp(e,t,n),defaultValue:(r=(0,dS.astFromValue)(e.defaultValue,e.type))!=null?r:void 0}}Et.astFromInputField=NM;function hM(e,t,n){return{kind:ot.Kind.ENUM_VALUE_DEFINITION,description:(0,Mi.getDescriptionNode)(e),name:{kind:ot.Kind.NAME,value:e.name},directives:mp(e,t,n)}}Et.astFromEnumValue=hM;function EM(e){return fp("deprecated",{reason:e},ot.GraphQLDeprecatedDirective)}Et.makeDeprecatedDirective=EM;function fp(e,t,n){let r=[];if(n!=null)for(let i of n.args){let a=i.name,o=t[a];if(o!==void 0){let c=(0,dS.astFromValue)(o,i.type);c&&r.push({kind:ot.Kind.ARGUMENT,name:{kind:ot.Kind.NAME,value:a},value:c})}}else for(let i in t){let a=t[i],o=(0,uae.astFromValueUntyped)(a);o&&r.push({kind:ot.Kind.ARGUMENT,name:{kind:ot.Kind.NAME,value:i},value:o})}return{kind:ot.Kind.DIRECTIVE,name:{kind:ot.Kind.NAME,value:e},arguments:r}}Et.makeDirectiveNode=fp;function tN(e,t){let n=[];for(let r in t){let i=t[r],a=e==null?void 0:e.getDirective(r);if(Array.isArray(i))for(let o of i)n.push(fp(r,o,a));else n.push(fp(r,i,a))}return n}Et.makeDirectiveNodes=tN});var IM=P(cl=>{"use strict";f();T();m();Object.defineProperty(cl,"__esModule",{value:!0});cl.createDefaultRules=cl.validateGraphQlDocuments=void 0;var Tp=Ae();function pae(e,t,n=yM()){var c;let r=new Set,i=new Map;for(let l of t)for(let p of l.definitions)p.kind===Tp.Kind.FRAGMENT_DEFINITION?i.set(p.name.value,p):r.add(p);let a={kind:Tp.Kind.DOCUMENT,definitions:Array.from([...r,...i.values()])},o=(0,Tp.validate)(e,a,n);for(let l of o)if(l.stack=l.message,l.locations)for(let p of l.locations)l.stack+=` - at ${(c=l.source)==null?void 0:c.name}:${p.line}:${p.column}`;return o}cl.validateGraphQlDocuments=pae;function yM(){let e=["NoUnusedFragmentsRule","NoUnusedVariablesRule","KnownDirectivesRule"];return Tp.versionInfo.major<15&&(e=e.map(t=>t.replace(/Rule$/,""))),Tp.specifiedRules.filter(t=>!e.includes(t.name))}cl.createDefaultRules=yM});var gM=P(nN=>{"use strict";f();T();m();Object.defineProperty(nN,"__esModule",{value:!0});nN.parseGraphQLJSON=void 0;var fae=Ae();function mae(e){return e=e.toString(),e.charCodeAt(0)===65279&&(e=e.slice(1)),e}function Tae(e){return JSON.parse(mae(e))}function Nae(e,t,n){let r=Tae(t);if(r.data&&(r=r.data),r.kind==="Document")return{location:e,document:r};if(r.__schema){let i=(0,fae.buildClientSchema)(r,n);return{location:e,schema:i}}else if(typeof r=="string")return{location:e,rawSDL:r};throw new Error("Not valid JSON content")}nN.parseGraphQLJSON=Nae});var hS=P(Bn=>{"use strict";f();T();m();Object.defineProperty(Bn,"__esModule",{value:!0});Bn.getBlockStringIndentation=Bn.dedentBlockStringValue=Bn.getLeadingCommentBlock=Bn.getComment=Bn.getDescription=Bn.printWithComments=Bn.printComment=Bn.pushComment=Bn.collectComment=Bn.resetComments=void 0;var OM=Ae(),hae=80,ll={};function Eae(){ll={}}Bn.resetComments=Eae;function yae(e){var n;let t=(n=e.name)==null?void 0:n.value;if(t!=null)switch(Np(e,t),e.kind){case"EnumTypeDefinition":if(e.values)for(let r of e.values)Np(r,t,r.name.value);break;case"ObjectTypeDefinition":case"InputObjectTypeDefinition":case"InterfaceTypeDefinition":if(e.fields){for(let r of e.fields)if(Np(r,t,r.name.value),Sae(r)&&r.arguments)for(let i of r.arguments)Np(i,t,r.name.value,i.name.value)}break}}Bn.collectComment=yae;function Np(e,t,n,r){let i=NS(e);if(typeof i!="string"||i.length===0)return;let a=[t];n&&(a.push(n),r&&a.push(r));let o=a.join(".");ll[o]||(ll[o]=[]),ll[o].push(i)}Bn.pushComment=Np;function bM(e){return` +`))}function $L(e,t){return`The field "${e}" returns the unknown named type "${t}".`}function gZ(e,t){return new Error($L(e,t))}function _Z(e){return new Error(`Could not find FieldData for field "${e}" +.This should never happen. Please report this issue on GitHub.`)}function vZ(e,t){return new Error(`Expected named type "${e}" to be a composite output type (Object or Interface) but received "${t}". +This should never happen. Please report this issue on GitHub.`)}function SZ(e){return new Error(`The Object field "${e}" is invalidly declared "@external". An Object field should only be declared "@external" if it is part of a "@key", "@provides", or "@requires" field set, or the field is necessary to satisfy an Interface implementation. In the case that none of these conditions is true, the "@external" directive should be removed.`)}function OZ(e,t){return new Error(`The "@openfed__configureDescription" directive defined on ${e} "${t}" is invalid because neither a description nor the "descriptionOverride" argument is defined.`)}function DZ(e,t){return new Error(`The coordinates "${e}" declare "@openfed__configureDescription(propagate: true)" in the following subgraphs: + "`+t.join(Ze.QUOTATION_JOIN)+`" +A federated graph only supports a single description; consequently, only one subgraph may define argument "propagate" as true (this is the default value).`)}function bZ(e){return"- The following argument"+(e.length>1?"s are":" is")+` defined more than once: + "`+e.join(Ze.QUOTATION_JOIN)+'"'}function AZ(e){return`- The location "${e}" is defined multiple times.`}function RZ(e){return`- "${e}" is not a valid directive location.`}function FZ(e,t){return new Error(`The directive definition for "@${e}" is invalid for the following reason`+(t.length>1?"s":"")+`: +`+t.join(Ze.LITERAL_NEW_LINE)+'"')}function PZ(e,t,n){return` The field "${e}" is unconditionally provided by subgraph "${t}" and should not form part of any "@${n}" field set. Although "${e}" is declared "@external", it is part of a "@key" directive on an extension type. Such fields are only declared "@external" for legacy syntactical reasons and are not internally considered "@external".`}function wZ(e,t,n){return new Error(`The subgraph that defines an entity Interface Object (using "@interfaceObject") must not define any implementation types of that interface. However, the subgraph "${t}" defines the entity Interface "${e}" as an Interface Object alongside the following implementation type`+(n.length>1?"s":"")+` of "${e}": + "`+n.join(Ze.QUOTATION_JOIN)+'"')}});var YL=w(QL=>{"use strict";f();N();m();Object.defineProperty(QL,"__esModule",{value:!0})});var Jo=w(Or=>{"use strict";f();N();m();Object.defineProperty(Or,"__esModule",{value:!0});Or.getMutableDirectiveDefinitionNode=CZ;Or.getMutableEnumNode=BZ;Or.getMutableEnumValueNode=UZ;Or.getMutableFieldNode=kZ;Or.getMutableInputObjectNode=MZ;Or.getMutableInputValueNode=xZ;Or.getMutableInterfaceNode=qZ;Or.getMutableObjectNode=VZ;Or.getMutableObjectExtensionNode=jZ;Or.getMutableScalarNode=KZ;Or.getMutableTypeNode=z_;Or.getMutableUnionNode=GZ;Or.getTypeNodeNamedTypeName=W_;Or.getNamedTypeNode=HL;var Sr=Ae(),rl=Jr(),JL=sa(),LZ=nl();function CZ(e){return{arguments:[],kind:e.kind,locations:[],name:M({},e.name),repeatable:e.repeatable,description:(0,rl.formatDescription)(e.description)}}function BZ(e){return{kind:Sr.Kind.ENUM_TYPE_DEFINITION,name:M({},e)}}function UZ(e){return{directives:[],kind:e.kind,name:M({},e.name),description:(0,rl.formatDescription)(e.description)}}function kZ(e,t,n){return{arguments:[],directives:[],kind:e.kind,name:M({},e.name),type:z_(e.type,t,n),description:(0,rl.formatDescription)(e.description)}}function MZ(e){return{kind:Sr.Kind.INPUT_OBJECT_TYPE_DEFINITION,name:M({},e)}}function xZ(e,t,n){return{directives:[],kind:e.kind,name:M({},e.name),type:z_(e.type,t,n),defaultValue:e.defaultValue,description:(0,rl.formatDescription)(e.description)}}function qZ(e){return{kind:Sr.Kind.INTERFACE_TYPE_DEFINITION,name:M({},e)}}function VZ(e){return{kind:Sr.Kind.OBJECT_TYPE_DEFINITION,name:M({},e)}}function jZ(e){let t=e.kind===Sr.Kind.OBJECT_TYPE_DEFINITION?e.description:void 0;return{kind:Sr.Kind.OBJECT_TYPE_EXTENSION,name:M({},e.name),description:(0,rl.formatDescription)(t)}}function KZ(e){return{kind:Sr.Kind.SCALAR_TYPE_DEFINITION,name:M({},e)}}function z_(e,t,n){let r={kind:e.kind},i=r;for(let a=0;a{"use strict";f();N();m();Object.defineProperty(TN,"__esModule",{value:!0});TN.DEFAULT_CONSUMER_INACTIVE_THRESHOLD=void 0;TN.DEFAULT_CONSUMER_INACTIVE_THRESHOLD=30});var hs=w(Z=>{"use strict";f();N();m();Object.defineProperty(Z,"__esModule",{value:!0});Z.MAX_OR_SCOPES=Z.EDFS_ARGS_REGEXP=Z.CONFIGURE_CHILD_DESCRIPTIONS_DEFINITION=Z.CONFIGURE_DESCRIPTION_DEFINITION=Z.EDFS_NATS_STREAM_CONFIGURATION_DEFINITION=Z.SCOPE_SCALAR_DEFINITION=Z.FIELD_SET_SCALAR_DEFINITION=Z.VERSION_TWO_DIRECTIVE_DEFINITIONS=Z.EVENT_DRIVEN_DIRECTIVE_DEFINITIONS_BY_DIRECTIVE_NAME=Z.BASE_DIRECTIVE_DEFINITIONS=Z.V2_DIRECTIVE_DEFINITION_BY_DIRECTIVE_NAME=Z.SUBSCRIPTION_FIELD_CONDITION_DEFINITION=Z.SUBSCRIPTION_FILTER_VALUE_DEFINITION=Z.SUBSCRIPTION_FILTER_CONDITION_DEFINITION=Z.SUBSCRIPTION_FILTER_DEFINITION=Z.SHAREABLE_DEFINITION=Z.REQUIRES_SCOPES_DEFINITION=Z.OVERRIDE_DEFINITION=Z.LINK_DEFINITION=Z.LINK_PURPOSE_DEFINITION=Z.LINK_IMPORT_DEFINITION=Z.INTERFACE_OBJECT_DEFINITION=Z.INACCESSIBLE_DEFINITION=Z.COMPOSE_DIRECTIVE_DEFINITION=Z.AUTHENTICATED_DEFINITION=Z.ALL_IN_BUILT_DIRECTIVE_NAMES=Z.BASE_DIRECTIVE_DEFINITION_BY_DIRECTIVE_NAME=Z.EDFS_REDIS_SUBSCRIBE_DEFINITION=Z.EDFS_REDIS_PUBLISH_DEFINITION=Z.TAG_DEFINITION=Z.SPECIFIED_BY_DEFINITION=Z.REQUIRES_DEFINITION=Z.PROVIDES_DEFINITION=Z.KEY_DEFINITION=Z.REQUIRED_FIELDSET_TYPE_NODE=Z.EDFS_NATS_SUBSCRIBE_DEFINITION=Z.EDFS_NATS_REQUEST_DEFINITION=Z.EDFS_NATS_PUBLISH_DEFINITION=Z.EDFS_KAFKA_SUBSCRIBE_DEFINITION=Z.EDFS_KAFKA_PUBLISH_DEFINITION=Z.EXTERNAL_DEFINITION=Z.EXTENDS_DEFINITION=Z.DEPRECATED_DEFINITION=Z.BASE_SCALARS=Z.REQUIRED_STRING_TYPE_NODE=void 0;var ue=Ae(),ie=Jr(),$Z=X_(),B=lr();Z.REQUIRED_STRING_TYPE_NODE={kind:ue.Kind.NON_NULL_TYPE,type:(0,ie.stringToNamedTypeNode)(B.STRING_SCALAR)};Z.BASE_SCALARS=new Set(["_Any","_Entities",B.BOOLEAN_SCALAR,B.FLOAT_SCALAR,B.ID_SCALAR,B.INT_SCALAR,B.FIELD_SET_SCALAR,B.SCOPE_SCALAR,B.STRING_SCALAR]);Z.DEPRECATED_DEFINITION={arguments:[{directives:[],kind:ue.Kind.INPUT_VALUE_DEFINITION,name:(0,ie.stringToNameNode)(B.REASON),type:(0,ie.stringToNamedTypeNode)(B.STRING_SCALAR),defaultValue:{kind:ue.Kind.STRING,value:ue.DEFAULT_DEPRECATION_REASON}}],kind:ue.Kind.DIRECTIVE_DEFINITION,locations:(0,ie.stringArrayToNameNodeArray)([B.ARGUMENT_DEFINITION_UPPER,B.ENUM_VALUE_UPPER,B.FIELD_DEFINITION_UPPER,B.INPUT_FIELD_DEFINITION_UPPER]),name:(0,ie.stringToNameNode)(B.DEPRECATED),repeatable:!1};Z.EXTENDS_DEFINITION={kind:ue.Kind.DIRECTIVE_DEFINITION,locations:(0,ie.stringArrayToNameNodeArray)([B.INTERFACE_UPPER,B.OBJECT_UPPER]),name:(0,ie.stringToNameNode)(B.EXTENDS),repeatable:!1};Z.EXTERNAL_DEFINITION={kind:ue.Kind.DIRECTIVE_DEFINITION,locations:(0,ie.stringArrayToNameNodeArray)([B.FIELD_DEFINITION_UPPER,B.OBJECT_UPPER]),name:(0,ie.stringToNameNode)(B.EXTERNAL),repeatable:!1};Z.EDFS_KAFKA_PUBLISH_DEFINITION={arguments:[{kind:ue.Kind.INPUT_VALUE_DEFINITION,name:(0,ie.stringToNameNode)(B.TOPIC),type:Z.REQUIRED_STRING_TYPE_NODE},{kind:ue.Kind.INPUT_VALUE_DEFINITION,name:(0,ie.stringToNameNode)(B.PROVIDER_ID),type:Z.REQUIRED_STRING_TYPE_NODE,defaultValue:{kind:ue.Kind.STRING,value:B.DEFAULT_EDFS_PROVIDER_ID}}],kind:ue.Kind.DIRECTIVE_DEFINITION,locations:[(0,ie.stringToNameNode)(B.FIELD_DEFINITION_UPPER)],name:(0,ie.stringToNameNode)(B.EDFS_KAFKA_PUBLISH),repeatable:!1};Z.EDFS_KAFKA_SUBSCRIBE_DEFINITION={arguments:[{kind:ue.Kind.INPUT_VALUE_DEFINITION,name:(0,ie.stringToNameNode)(B.TOPICS),type:{kind:ue.Kind.NON_NULL_TYPE,type:{kind:ue.Kind.LIST_TYPE,type:Z.REQUIRED_STRING_TYPE_NODE}}},{kind:ue.Kind.INPUT_VALUE_DEFINITION,name:(0,ie.stringToNameNode)(B.PROVIDER_ID),type:Z.REQUIRED_STRING_TYPE_NODE,defaultValue:{kind:ue.Kind.STRING,value:B.DEFAULT_EDFS_PROVIDER_ID}}],kind:ue.Kind.DIRECTIVE_DEFINITION,locations:[(0,ie.stringToNameNode)(B.FIELD_DEFINITION_UPPER)],name:(0,ie.stringToNameNode)(B.EDFS_KAFKA_SUBSCRIBE),repeatable:!1};Z.EDFS_NATS_PUBLISH_DEFINITION={arguments:[{kind:ue.Kind.INPUT_VALUE_DEFINITION,name:(0,ie.stringToNameNode)(B.SUBJECT),type:Z.REQUIRED_STRING_TYPE_NODE},{kind:ue.Kind.INPUT_VALUE_DEFINITION,name:(0,ie.stringToNameNode)(B.PROVIDER_ID),type:{kind:ue.Kind.NON_NULL_TYPE,type:(0,ie.stringToNamedTypeNode)(B.STRING_SCALAR)},defaultValue:{kind:ue.Kind.STRING,value:B.DEFAULT_EDFS_PROVIDER_ID}}],kind:ue.Kind.DIRECTIVE_DEFINITION,locations:[(0,ie.stringToNameNode)(B.FIELD_DEFINITION_UPPER)],name:(0,ie.stringToNameNode)(B.EDFS_NATS_PUBLISH),repeatable:!1};Z.EDFS_NATS_REQUEST_DEFINITION={arguments:[{kind:ue.Kind.INPUT_VALUE_DEFINITION,name:(0,ie.stringToNameNode)(B.SUBJECT),type:{kind:ue.Kind.NON_NULL_TYPE,type:(0,ie.stringToNamedTypeNode)(B.STRING_SCALAR)}},{kind:ue.Kind.INPUT_VALUE_DEFINITION,name:(0,ie.stringToNameNode)(B.PROVIDER_ID),type:{kind:ue.Kind.NON_NULL_TYPE,type:(0,ie.stringToNamedTypeNode)(B.STRING_SCALAR)},defaultValue:{kind:ue.Kind.STRING,value:B.DEFAULT_EDFS_PROVIDER_ID}}],kind:ue.Kind.DIRECTIVE_DEFINITION,locations:[(0,ie.stringToNameNode)(B.FIELD_DEFINITION_UPPER)],name:(0,ie.stringToNameNode)(B.EDFS_NATS_REQUEST),repeatable:!1};Z.EDFS_NATS_SUBSCRIBE_DEFINITION={arguments:[{kind:ue.Kind.INPUT_VALUE_DEFINITION,name:(0,ie.stringToNameNode)(B.SUBJECTS),type:{kind:ue.Kind.NON_NULL_TYPE,type:{kind:ue.Kind.LIST_TYPE,type:Z.REQUIRED_STRING_TYPE_NODE}}},{kind:ue.Kind.INPUT_VALUE_DEFINITION,name:(0,ie.stringToNameNode)(B.PROVIDER_ID),type:Z.REQUIRED_STRING_TYPE_NODE,defaultValue:{kind:ue.Kind.STRING,value:B.DEFAULT_EDFS_PROVIDER_ID}},{kind:ue.Kind.INPUT_VALUE_DEFINITION,name:(0,ie.stringToNameNode)(B.STREAM_CONFIGURATION),type:(0,ie.stringToNamedTypeNode)(B.EDFS_NATS_STREAM_CONFIGURATION)}],kind:ue.Kind.DIRECTIVE_DEFINITION,locations:[(0,ie.stringToNameNode)(B.FIELD_DEFINITION_UPPER)],name:(0,ie.stringToNameNode)(B.EDFS_NATS_SUBSCRIBE),repeatable:!1};Z.REQUIRED_FIELDSET_TYPE_NODE={kind:ue.Kind.NON_NULL_TYPE,type:(0,ie.stringToNamedTypeNode)(B.FIELD_SET_SCALAR)};Z.KEY_DEFINITION={arguments:[{kind:ue.Kind.INPUT_VALUE_DEFINITION,name:(0,ie.stringToNameNode)(B.FIELDS),type:Z.REQUIRED_FIELDSET_TYPE_NODE},{kind:ue.Kind.INPUT_VALUE_DEFINITION,name:(0,ie.stringToNameNode)(B.RESOLVABLE),type:(0,ie.stringToNamedTypeNode)(B.BOOLEAN_SCALAR),defaultValue:{kind:ue.Kind.BOOLEAN,value:!0}}],kind:ue.Kind.DIRECTIVE_DEFINITION,locations:(0,ie.stringArrayToNameNodeArray)([B.INTERFACE_UPPER,B.OBJECT_UPPER]),name:(0,ie.stringToNameNode)(B.KEY),repeatable:!0};Z.PROVIDES_DEFINITION={arguments:[{kind:ue.Kind.INPUT_VALUE_DEFINITION,name:(0,ie.stringToNameNode)(B.FIELDS),type:Z.REQUIRED_FIELDSET_TYPE_NODE}],kind:ue.Kind.DIRECTIVE_DEFINITION,locations:[(0,ie.stringToNameNode)(B.FIELD_DEFINITION_UPPER)],name:(0,ie.stringToNameNode)(B.PROVIDES),repeatable:!1};Z.REQUIRES_DEFINITION={arguments:[{kind:ue.Kind.INPUT_VALUE_DEFINITION,name:(0,ie.stringToNameNode)(B.FIELDS),type:{kind:ue.Kind.NON_NULL_TYPE,type:(0,ie.stringToNamedTypeNode)(B.FIELD_SET_SCALAR)}}],kind:ue.Kind.DIRECTIVE_DEFINITION,locations:[(0,ie.stringToNameNode)(B.FIELD_DEFINITION_UPPER)],name:(0,ie.stringToNameNode)(B.REQUIRES),repeatable:!1};Z.SPECIFIED_BY_DEFINITION={arguments:[{kind:ue.Kind.INPUT_VALUE_DEFINITION,name:(0,ie.stringToNameNode)(B.URL_LOWER),type:Z.REQUIRED_STRING_TYPE_NODE}],kind:ue.Kind.DIRECTIVE_DEFINITION,locations:(0,ie.stringArrayToNameNodeArray)([B.SCALAR_UPPER]),name:(0,ie.stringToNameNode)(B.SPECIFIED_BY),repeatable:!1};Z.TAG_DEFINITION={arguments:[{directives:[],kind:ue.Kind.INPUT_VALUE_DEFINITION,name:(0,ie.stringToNameNode)(B.NAME),type:{kind:ue.Kind.NON_NULL_TYPE,type:(0,ie.stringToNamedTypeNode)(B.STRING_SCALAR)}}],kind:ue.Kind.DIRECTIVE_DEFINITION,locations:(0,ie.stringArrayToNameNodeArray)([B.ARGUMENT_DEFINITION_UPPER,B.ENUM_UPPER,B.ENUM_VALUE_UPPER,B.FIELD_DEFINITION_UPPER,B.INPUT_FIELD_DEFINITION_UPPER,B.INPUT_OBJECT_UPPER,B.INTERFACE_UPPER,B.OBJECT_UPPER,B.SCALAR_UPPER,B.UNION_UPPER]),name:(0,ie.stringToNameNode)(B.TAG),repeatable:!0};Z.EDFS_REDIS_PUBLISH_DEFINITION={arguments:[{kind:ue.Kind.INPUT_VALUE_DEFINITION,name:(0,ie.stringToNameNode)(B.CHANNEL),type:Z.REQUIRED_STRING_TYPE_NODE},{kind:ue.Kind.INPUT_VALUE_DEFINITION,name:(0,ie.stringToNameNode)(B.PROVIDER_ID),type:Z.REQUIRED_STRING_TYPE_NODE,defaultValue:{kind:ue.Kind.STRING,value:B.DEFAULT_EDFS_PROVIDER_ID}}],kind:ue.Kind.DIRECTIVE_DEFINITION,locations:[(0,ie.stringToNameNode)(B.FIELD_DEFINITION_UPPER)],name:(0,ie.stringToNameNode)(B.EDFS_REDIS_PUBLISH),repeatable:!1};Z.EDFS_REDIS_SUBSCRIBE_DEFINITION={arguments:[{kind:ue.Kind.INPUT_VALUE_DEFINITION,name:(0,ie.stringToNameNode)(B.CHANNELS),type:{kind:ue.Kind.NON_NULL_TYPE,type:{kind:ue.Kind.LIST_TYPE,type:Z.REQUIRED_STRING_TYPE_NODE}}},{kind:ue.Kind.INPUT_VALUE_DEFINITION,name:(0,ie.stringToNameNode)(B.PROVIDER_ID),type:Z.REQUIRED_STRING_TYPE_NODE,defaultValue:{kind:ue.Kind.STRING,value:B.DEFAULT_EDFS_PROVIDER_ID}}],kind:ue.Kind.DIRECTIVE_DEFINITION,locations:[(0,ie.stringToNameNode)(B.FIELD_DEFINITION_UPPER)],name:(0,ie.stringToNameNode)(B.EDFS_REDIS_SUBSCRIBE),repeatable:!1};Z.BASE_DIRECTIVE_DEFINITION_BY_DIRECTIVE_NAME=new Map([[B.DEPRECATED,Z.DEPRECATED_DEFINITION],[B.EXTENDS,Z.EXTENDS_DEFINITION],[B.EXTERNAL,Z.EXTERNAL_DEFINITION],[B.EDFS_KAFKA_PUBLISH,Z.EDFS_KAFKA_PUBLISH_DEFINITION],[B.EDFS_KAFKA_SUBSCRIBE,Z.EDFS_KAFKA_SUBSCRIBE_DEFINITION],[B.EDFS_NATS_PUBLISH,Z.EDFS_NATS_PUBLISH_DEFINITION],[B.EDFS_NATS_REQUEST,Z.EDFS_NATS_REQUEST_DEFINITION],[B.EDFS_NATS_SUBSCRIBE,Z.EDFS_NATS_SUBSCRIBE_DEFINITION],[B.EDFS_REDIS_PUBLISH,Z.EDFS_REDIS_PUBLISH_DEFINITION],[B.EDFS_REDIS_SUBSCRIBE,Z.EDFS_REDIS_SUBSCRIBE_DEFINITION],[B.KEY,Z.KEY_DEFINITION],[B.PROVIDES,Z.PROVIDES_DEFINITION],[B.REQUIRES,Z.REQUIRES_DEFINITION],[B.SPECIFIED_BY,Z.SPECIFIED_BY_DEFINITION],[B.TAG,Z.TAG_DEFINITION]]);Z.ALL_IN_BUILT_DIRECTIVE_NAMES=new Set([B.AUTHENTICATED,B.COMPOSE_DIRECTIVE,B.CONFIGURE_DESCRIPTION,B.CONFIGURE_CHILD_DESCRIPTIONS,B.DEPRECATED,B.EDFS_NATS_PUBLISH,B.EDFS_NATS_REQUEST,B.EDFS_NATS_SUBSCRIBE,B.EDFS_KAFKA_PUBLISH,B.EDFS_KAFKA_SUBSCRIBE,B.EDFS_REDIS_PUBLISH,B.EDFS_REDIS_SUBSCRIBE,B.EXTENDS,B.EXTERNAL,B.INACCESSIBLE,B.INTERFACE_OBJECT,B.KEY,B.LINK,B.OVERRIDE,B.PROVIDES,B.REQUIRES,B.REQUIRES_SCOPES,B.SHAREABLE,B.SPECIFIED_BY,B.SUBSCRIPTION_FILTER,B.TAG]);Z.AUTHENTICATED_DEFINITION={arguments:[],kind:ue.Kind.DIRECTIVE_DEFINITION,locations:(0,ie.stringArrayToNameNodeArray)([B.ENUM_UPPER,B.FIELD_DEFINITION_UPPER,B.INTERFACE_UPPER,B.OBJECT_UPPER,B.SCALAR_UPPER]),name:(0,ie.stringToNameNode)(B.AUTHENTICATED),repeatable:!1};Z.COMPOSE_DIRECTIVE_DEFINITION={arguments:[{kind:ue.Kind.INPUT_VALUE_DEFINITION,name:(0,ie.stringToNameNode)(B.NAME),type:Z.REQUIRED_STRING_TYPE_NODE}],kind:ue.Kind.DIRECTIVE_DEFINITION,locations:(0,ie.stringArrayToNameNodeArray)([B.SCHEMA_UPPER]),name:(0,ie.stringToNameNode)(B.COMPOSE_DIRECTIVE),repeatable:!0};Z.INACCESSIBLE_DEFINITION={arguments:[],kind:ue.Kind.DIRECTIVE_DEFINITION,locations:(0,ie.stringArrayToNameNodeArray)([B.ARGUMENT_DEFINITION_UPPER,B.ENUM_UPPER,B.ENUM_VALUE_UPPER,B.FIELD_DEFINITION_UPPER,B.INPUT_FIELD_DEFINITION_UPPER,B.INPUT_OBJECT_UPPER,B.INTERFACE_UPPER,B.OBJECT_UPPER,B.SCALAR_UPPER,B.UNION_UPPER]),name:(0,ie.stringToNameNode)(B.INACCESSIBLE),repeatable:!1};Z.INTERFACE_OBJECT_DEFINITION={kind:ue.Kind.DIRECTIVE_DEFINITION,locations:(0,ie.stringArrayToNameNodeArray)([B.OBJECT_UPPER]),name:(0,ie.stringToNameNode)(B.INTERFACE_OBJECT),repeatable:!1};Z.LINK_IMPORT_DEFINITION={kind:ue.Kind.SCALAR_TYPE_DEFINITION,name:(0,ie.stringToNameNode)(B.LINK_IMPORT)};Z.LINK_PURPOSE_DEFINITION={kind:ue.Kind.ENUM_TYPE_DEFINITION,name:(0,ie.stringToNameNode)(B.LINK_PURPOSE),values:[{directives:[],kind:ue.Kind.ENUM_VALUE_DEFINITION,name:(0,ie.stringToNameNode)(B.EXECUTION)},{directives:[],kind:ue.Kind.ENUM_VALUE_DEFINITION,name:(0,ie.stringToNameNode)(B.SECURITY)}]};Z.LINK_DEFINITION={arguments:[{kind:ue.Kind.INPUT_VALUE_DEFINITION,name:(0,ie.stringToNameNode)(B.URL_LOWER),type:{kind:ue.Kind.NON_NULL_TYPE,type:(0,ie.stringToNamedTypeNode)(B.STRING_SCALAR)}},{kind:ue.Kind.INPUT_VALUE_DEFINITION,name:(0,ie.stringToNameNode)(B.AS),type:(0,ie.stringToNamedTypeNode)(B.STRING_SCALAR)},{kind:ue.Kind.INPUT_VALUE_DEFINITION,name:(0,ie.stringToNameNode)(B.FOR),type:(0,ie.stringToNamedTypeNode)(B.LINK_PURPOSE)},{kind:ue.Kind.INPUT_VALUE_DEFINITION,name:(0,ie.stringToNameNode)(B.IMPORT),type:{kind:ue.Kind.LIST_TYPE,type:(0,ie.stringToNamedTypeNode)(B.LINK_IMPORT)}}],kind:ue.Kind.DIRECTIVE_DEFINITION,locations:(0,ie.stringArrayToNameNodeArray)([B.SCHEMA_UPPER]),name:(0,ie.stringToNameNode)(B.LINK),repeatable:!0};Z.OVERRIDE_DEFINITION={arguments:[{kind:ue.Kind.INPUT_VALUE_DEFINITION,name:(0,ie.stringToNameNode)(B.FROM),type:{kind:ue.Kind.NON_NULL_TYPE,type:(0,ie.stringToNamedTypeNode)(B.STRING_SCALAR)}}],kind:ue.Kind.DIRECTIVE_DEFINITION,locations:(0,ie.stringArrayToNameNodeArray)([B.FIELD_DEFINITION_UPPER]),name:(0,ie.stringToNameNode)(B.OVERRIDE),repeatable:!1};Z.REQUIRES_SCOPES_DEFINITION={arguments:[{directives:[],kind:ue.Kind.INPUT_VALUE_DEFINITION,name:(0,ie.stringToNameNode)(B.SCOPES),type:{kind:ue.Kind.NON_NULL_TYPE,type:{kind:ue.Kind.LIST_TYPE,type:{kind:ue.Kind.NON_NULL_TYPE,type:{kind:ue.Kind.LIST_TYPE,type:{kind:ue.Kind.NON_NULL_TYPE,type:(0,ie.stringToNamedTypeNode)(B.SCOPE_SCALAR)}}}}}}],kind:ue.Kind.DIRECTIVE_DEFINITION,locations:(0,ie.stringArrayToNameNodeArray)([B.ENUM_UPPER,B.FIELD_DEFINITION_UPPER,B.INTERFACE_UPPER,B.OBJECT_UPPER,B.SCALAR_UPPER]),name:(0,ie.stringToNameNode)(B.REQUIRES_SCOPES),repeatable:!1};Z.SHAREABLE_DEFINITION={kind:ue.Kind.DIRECTIVE_DEFINITION,locations:(0,ie.stringArrayToNameNodeArray)([B.FIELD_DEFINITION_UPPER,B.OBJECT_UPPER]),name:(0,ie.stringToNameNode)(B.SHAREABLE),repeatable:!0};Z.SUBSCRIPTION_FILTER_DEFINITION={arguments:[{kind:ue.Kind.INPUT_VALUE_DEFINITION,name:(0,ie.stringToNameNode)(B.CONDITION),type:{kind:ue.Kind.NON_NULL_TYPE,type:(0,ie.stringToNamedTypeNode)(B.SUBSCRIPTION_FILTER_CONDITION)}}],kind:ue.Kind.DIRECTIVE_DEFINITION,locations:(0,ie.stringArrayToNameNodeArray)([B.FIELD_DEFINITION_UPPER]),name:(0,ie.stringToNameNode)(B.SUBSCRIPTION_FILTER),repeatable:!1};Z.SUBSCRIPTION_FILTER_CONDITION_DEFINITION={fields:[{kind:ue.Kind.INPUT_VALUE_DEFINITION,name:(0,ie.stringToNameNode)(B.AND_UPPER),type:{kind:ue.Kind.LIST_TYPE,type:{kind:ue.Kind.NON_NULL_TYPE,type:(0,ie.stringToNamedTypeNode)(B.SUBSCRIPTION_FILTER_CONDITION)}}},{kind:ue.Kind.INPUT_VALUE_DEFINITION,name:(0,ie.stringToNameNode)(B.IN_UPPER),type:(0,ie.stringToNamedTypeNode)(B.SUBSCRIPTION_FIELD_CONDITION)},{kind:ue.Kind.INPUT_VALUE_DEFINITION,name:(0,ie.stringToNameNode)(B.OR_UPPER),type:{kind:ue.Kind.LIST_TYPE,type:{kind:ue.Kind.NON_NULL_TYPE,type:(0,ie.stringToNamedTypeNode)(B.SUBSCRIPTION_FILTER_CONDITION)}}},{kind:ue.Kind.INPUT_VALUE_DEFINITION,name:(0,ie.stringToNameNode)(B.NOT_UPPER),type:(0,ie.stringToNamedTypeNode)(B.SUBSCRIPTION_FILTER_CONDITION)}],kind:ue.Kind.INPUT_OBJECT_TYPE_DEFINITION,name:(0,ie.stringToNameNode)(B.SUBSCRIPTION_FILTER_CONDITION)};Z.SUBSCRIPTION_FILTER_VALUE_DEFINITION={kind:ue.Kind.SCALAR_TYPE_DEFINITION,name:(0,ie.stringToNameNode)(B.SUBSCRIPTION_FILTER_VALUE)};Z.SUBSCRIPTION_FIELD_CONDITION_DEFINITION={fields:[{kind:ue.Kind.INPUT_VALUE_DEFINITION,name:(0,ie.stringToNameNode)(B.FIELD_PATH),type:{kind:ue.Kind.NON_NULL_TYPE,type:(0,ie.stringToNamedTypeNode)(B.STRING_SCALAR)}},{kind:ue.Kind.INPUT_VALUE_DEFINITION,name:(0,ie.stringToNameNode)(B.VALUES),type:{kind:ue.Kind.NON_NULL_TYPE,type:{kind:ue.Kind.LIST_TYPE,type:(0,ie.stringToNamedTypeNode)(B.SUBSCRIPTION_FILTER_VALUE)}}}],kind:ue.Kind.INPUT_OBJECT_TYPE_DEFINITION,name:(0,ie.stringToNameNode)(B.SUBSCRIPTION_FIELD_CONDITION)};Z.V2_DIRECTIVE_DEFINITION_BY_DIRECTIVE_NAME=new Map([[B.AUTHENTICATED,Z.AUTHENTICATED_DEFINITION],[B.COMPOSE_DIRECTIVE,Z.COMPOSE_DIRECTIVE_DEFINITION],[B.INACCESSIBLE,Z.INACCESSIBLE_DEFINITION],[B.INTERFACE_OBJECT,Z.INTERFACE_OBJECT_DEFINITION],[B.LINK,Z.LINK_DEFINITION],[B.OVERRIDE,Z.OVERRIDE_DEFINITION],[B.REQUIRES_SCOPES,Z.REQUIRES_SCOPES_DEFINITION],[B.SHAREABLE,Z.SHAREABLE_DEFINITION]]);Z.BASE_DIRECTIVE_DEFINITIONS=[Z.DEPRECATED_DEFINITION,Z.EXTENDS_DEFINITION,Z.EXTERNAL_DEFINITION,Z.KEY_DEFINITION,Z.PROVIDES_DEFINITION,Z.REQUIRES_DEFINITION,Z.SPECIFIED_BY_DEFINITION,Z.TAG_DEFINITION];Z.EVENT_DRIVEN_DIRECTIVE_DEFINITIONS_BY_DIRECTIVE_NAME=new Map([[B.EDFS_KAFKA_PUBLISH,Z.EDFS_KAFKA_PUBLISH_DEFINITION],[B.EDFS_KAFKA_SUBSCRIBE,Z.EDFS_KAFKA_SUBSCRIBE_DEFINITION],[B.EDFS_NATS_PUBLISH,Z.EDFS_NATS_PUBLISH_DEFINITION],[B.EDFS_NATS_REQUEST,Z.EDFS_NATS_REQUEST_DEFINITION],[B.EDFS_NATS_SUBSCRIBE,Z.EDFS_NATS_SUBSCRIBE_DEFINITION],[B.EDFS_REDIS_PUBLISH,Z.EDFS_REDIS_PUBLISH_DEFINITION],[B.EDFS_REDIS_SUBSCRIBE,Z.EDFS_REDIS_SUBSCRIBE_DEFINITION]]);Z.VERSION_TWO_DIRECTIVE_DEFINITIONS=[Z.AUTHENTICATED_DEFINITION,Z.COMPOSE_DIRECTIVE_DEFINITION,Z.INACCESSIBLE_DEFINITION,Z.INTERFACE_OBJECT_DEFINITION,Z.OVERRIDE_DEFINITION,Z.REQUIRES_SCOPES_DEFINITION,Z.SHAREABLE_DEFINITION];Z.FIELD_SET_SCALAR_DEFINITION={kind:ue.Kind.SCALAR_TYPE_DEFINITION,name:(0,ie.stringToNameNode)(B.FIELD_SET_SCALAR)};Z.SCOPE_SCALAR_DEFINITION={kind:ue.Kind.SCALAR_TYPE_DEFINITION,name:(0,ie.stringToNameNode)(B.SCOPE_SCALAR)};Z.EDFS_NATS_STREAM_CONFIGURATION_DEFINITION={kind:ue.Kind.INPUT_OBJECT_TYPE_DEFINITION,name:(0,ie.stringToNameNode)(B.EDFS_NATS_STREAM_CONFIGURATION),fields:[{kind:ue.Kind.INPUT_VALUE_DEFINITION,name:(0,ie.stringToNameNode)(B.CONSUMER_NAME),type:{kind:ue.Kind.NON_NULL_TYPE,type:(0,ie.stringToNamedTypeNode)(B.STRING_SCALAR)}},{kind:ue.Kind.INPUT_VALUE_DEFINITION,name:(0,ie.stringToNameNode)(B.STREAM_NAME),type:{kind:ue.Kind.NON_NULL_TYPE,type:(0,ie.stringToNamedTypeNode)(B.STRING_SCALAR)}},{kind:ue.Kind.INPUT_VALUE_DEFINITION,name:(0,ie.stringToNameNode)(B.CONSUMER_INACTIVE_THRESHOLD),type:{kind:ue.Kind.NON_NULL_TYPE,type:(0,ie.stringToNamedTypeNode)(B.INT_SCALAR)},defaultValue:{kind:ue.Kind.INT,value:$Z.DEFAULT_CONSUMER_INACTIVE_THRESHOLD.toString()}}]};Z.CONFIGURE_DESCRIPTION_DEFINITION={arguments:[{directives:[],kind:ue.Kind.INPUT_VALUE_DEFINITION,name:(0,ie.stringToNameNode)(B.PROPAGATE),type:{kind:ue.Kind.NON_NULL_TYPE,type:(0,ie.stringToNamedTypeNode)(B.BOOLEAN_SCALAR)},defaultValue:{kind:ue.Kind.BOOLEAN,value:!0}},{directives:[],kind:ue.Kind.INPUT_VALUE_DEFINITION,name:(0,ie.stringToNameNode)(B.DESCRIPTION_OVERRIDE),type:(0,ie.stringToNamedTypeNode)(B.STRING_SCALAR)}],kind:ue.Kind.DIRECTIVE_DEFINITION,locations:(0,ie.stringArrayToNameNodeArray)([B.ARGUMENT_DEFINITION_UPPER,B.ENUM_UPPER,B.ENUM_VALUE_UPPER,B.FIELD_DEFINITION_UPPER,B.INTERFACE_UPPER,B.INPUT_OBJECT_UPPER,B.INPUT_FIELD_DEFINITION_UPPER,B.OBJECT_UPPER,B.SCALAR_UPPER,B.SCHEMA_UPPER,B.UNION_UPPER]),name:(0,ie.stringToNameNode)(B.CONFIGURE_DESCRIPTION),repeatable:!1};Z.CONFIGURE_CHILD_DESCRIPTIONS_DEFINITION={arguments:[{directives:[],kind:ue.Kind.INPUT_VALUE_DEFINITION,name:(0,ie.stringToNameNode)(B.PROPAGATE),type:{kind:ue.Kind.NON_NULL_TYPE,type:(0,ie.stringToNamedTypeNode)(B.BOOLEAN_SCALAR)},defaultValue:{kind:ue.Kind.BOOLEAN,value:!0}}],kind:ue.Kind.DIRECTIVE_DEFINITION,locations:(0,ie.stringArrayToNameNodeArray)([B.ENUM_UPPER,B.INPUT_OBJECT_UPPER,B.INTERFACE_UPPER,B.OBJECT_UPPER]),name:(0,ie.stringToNameNode)(B.CONFIGURE_CHILD_DESCRIPTIONS),repeatable:!1};Z.EDFS_ARGS_REGEXP=/{{\s*args\.([a-zA-Z0-9_]+)\s*}}/g;Z.MAX_OR_SCOPES=16});var EN=w(Gu=>{"use strict";f();N();m();Object.defineProperty(Gu,"__esModule",{value:!0});Gu.newParentTagData=HZ;Gu.newChildTagData=zZ;Gu.validateImplicitFieldSets=WZ;Gu.newContractTagOptionsFromArrays=XZ;Gu.getDescriptionFromString=ZZ;var QZ=Jo(),zr=Ae(),YZ=hs(),JZ=Jr(),zL=Hr();function HZ(e){return{childTagDataByChildName:new Map,tagNames:new Set,typeName:e}}function zZ(e){return{name:e,tagNames:new Set,tagNamesByArgumentName:new Map}}function WZ({conditionalFieldDataByCoords:e,currentSubgraphName:t,entityData:n,implicitKeys:r,objectData:i,parentDefinitionDataByTypeName:a,graphNode:o}){let c=(0,zL.getValueOrDefault)(n.keyFieldSetDatasBySubgraphName,t,()=>new Map);for(let[l,p]of n.documentNodeByKeyFieldSet){if(c.has(l))continue;let T=[i],y=[],g=[],_=-1,F=!0,U=!0;(0,zr.visit)(p,{Argument:{enter(){return U=!1,zr.BREAK}},Field:{enter(K){let J=T[_];if(F)return U=!1,zr.BREAK;let ee=K.name.value,W=J.fieldDataByFieldName.get(ee);if(!W||W.argumentDataByArgumentName.size||y[_].has(ee))return U=!1,zr.BREAK;let{isUnconditionallyProvided:Te}=(0,zL.getOrThrowError)(W.externalFieldDataBySubgraphName,t,`${W.originalParentTypeName}.${ee}.externalFieldDataBySubgraphName`),de=e.get(`${W.renamedParentTypeName}.${ee}`);if(de){if(de.providedBy.length>0)g.push(...de.providedBy);else if(de.requiredBy.length>0)return U=!1,zr.BREAK}else if(!Te)return U=!1,zr.BREAK;y[_].add(ee);let we=(0,QZ.getTypeNodeNamedTypeName)(W.node.type);if(YZ.BASE_SCALARS.has(we))return;let qe=a.get(we);if(!qe)return U=!1,zr.BREAK;if(qe.kind===zr.Kind.OBJECT_TYPE_DEFINITION){F=!0,T.push(qe);return}if((0,JZ.isKindAbstract)(qe.kind))return U=!1,zr.BREAK}},InlineFragment:{enter(){return U=!1,zr.BREAK}},SelectionSet:{enter(){if(!F||(_+=1,F=!1,_<0||_>=T.length))return U=!1,zr.BREAK;y.push(new Set)},leave(){if(F)return U=!1,zr.BREAK;_-=1,T.pop(),y.pop()}}}),U&&(r.push(Q(M({fieldName:"",selectionSet:l},g.length>0?{conditions:g}:{}),{disableEntityResolver:!0})),o&&o.satisfiedFieldSets.add(l))}}function XZ(e,t){return{tagNamesToExclude:new Set(e),tagNamesToInclude:new Set(t)}}function ZZ(e){if(e)return{block:!0,kind:zr.Kind.STRING,value:e}}});var np=w(Ui=>{"use strict";f();N();m();Object.defineProperty(Ui,"__esModule",{value:!0});Ui.SUBSCRIPTION_FILTER_LIST_INPUT_NAMES=Ui.SUBSCRIPTION_FILTER_INPUT_NAMES=Ui.STREAM_CONFIGURATION_FIELD_NAMES=Ui.EVENT_DIRECTIVE_NAMES=Ui.TYPE_SYSTEM_DIRECTIVE_LOCATIONS=void 0;var cn=lr();Ui.TYPE_SYSTEM_DIRECTIVE_LOCATIONS=new Set([cn.ARGUMENT_DEFINITION_UPPER,cn.ENUM_UPPER,cn.ENUM_VALUE_UPPER,cn.FIELD_DEFINITION_UPPER,cn.INPUT_FIELD_DEFINITION_UPPER,cn.INPUT_OBJECT_UPPER,cn.INTERFACE_UPPER,cn.OBJECT_UPPER,cn.SCALAR_UPPER,cn.SCHEMA_UPPER,cn.UNION_UPPER]);Ui.EVENT_DIRECTIVE_NAMES=new Set([cn.EDFS_KAFKA_PUBLISH,cn.EDFS_KAFKA_SUBSCRIBE,cn.EDFS_NATS_PUBLISH,cn.EDFS_NATS_REQUEST,cn.EDFS_NATS_SUBSCRIBE,cn.EDFS_REDIS_PUBLISH,cn.EDFS_REDIS_SUBSCRIBE]);Ui.STREAM_CONFIGURATION_FIELD_NAMES=new Set([cn.CONSUMER_INACTIVE_THRESHOLD,cn.CONSUMER_NAME,cn.STREAM_NAME]);Ui.SUBSCRIPTION_FILTER_INPUT_NAMES=new Set([cn.AND_UPPER,cn.IN_UPPER,cn.NOT_UPPER,cn.OR_UPPER]);Ui.SUBSCRIPTION_FILTER_LIST_INPUT_NAMES=new Set([cn.AND_UPPER,cn.OR_UPPER])});var ki=w((Z_,WL)=>{"use strict";f();N();m();var rp=function(e){return e&&e.Math===Math&&e};WL.exports=rp(typeof globalThis=="object"&&globalThis)||rp(typeof window=="object"&&window)||rp(typeof self=="object"&&self)||rp(typeof global=="object"&&global)||rp(typeof Z_=="object"&&Z_)||function(){return this}()||Function("return this")()});var ys=w((qge,XL)=>{"use strict";f();N();m();XL.exports=function(e){try{return!!e()}catch(t){return!0}}});var Ho=w((Gge,ZL)=>{"use strict";f();N();m();var eee=ys();ZL.exports=!eee(function(){return Object.defineProperty({},1,{get:function(){return 7}})[1]!==7})});var ev=w((Jge,eC)=>{"use strict";f();N();m();var tee=ys();eC.exports=!tee(function(){var e=function(){}.bind();return typeof e!="function"||e.hasOwnProperty("prototype")})});var $u=w((Xge,tC)=>{"use strict";f();N();m();var nee=ev(),hN=Function.prototype.call;tC.exports=nee?hN.bind(hN):function(){return hN.apply(hN,arguments)}});var aC=w(iC=>{"use strict";f();N();m();var nC={}.propertyIsEnumerable,rC=Object.getOwnPropertyDescriptor,ree=rC&&!nC.call({1:2},1);iC.f=ree?function(t){var n=rC(this,t);return!!n&&n.enumerable}:nC});var tv=w((s_e,sC)=>{"use strict";f();N();m();sC.exports=function(e,t){return{enumerable:!(e&1),configurable:!(e&2),writable:!(e&4),value:t}}});var fi=w((l_e,cC)=>{"use strict";f();N();m();var oC=ev(),uC=Function.prototype,nv=uC.call,iee=oC&&uC.bind.bind(nv,nv);cC.exports=oC?iee:function(e){return function(){return nv.apply(e,arguments)}}});var pC=w((m_e,dC)=>{"use strict";f();N();m();var lC=fi(),aee=lC({}.toString),see=lC("".slice);dC.exports=function(e){return see(aee(e),8,-1)}});var mC=w((h_e,fC)=>{"use strict";f();N();m();var oee=fi(),uee=ys(),cee=pC(),rv=Object,lee=oee("".split);fC.exports=uee(function(){return!rv("z").propertyIsEnumerable(0)})?function(e){return cee(e)==="String"?lee(e,""):rv(e)}:rv});var iv=w((__e,NC)=>{"use strict";f();N();m();NC.exports=function(e){return e==null}});var av=w((D_e,TC)=>{"use strict";f();N();m();var dee=iv(),pee=TypeError;TC.exports=function(e){if(dee(e))throw new pee("Can't call method on "+e);return e}});var yN=w((F_e,EC)=>{"use strict";f();N();m();var fee=mC(),mee=av();EC.exports=function(e){return fee(mee(e))}});var oa=w((C_e,hC)=>{"use strict";f();N();m();var sv=typeof document=="object"&&document.all;hC.exports=typeof sv=="undefined"&&sv!==void 0?function(e){return typeof e=="function"||e===sv}:function(e){return typeof e=="function"}});var il=w((M_e,yC)=>{"use strict";f();N();m();var Nee=oa();yC.exports=function(e){return typeof e=="object"?e!==null:Nee(e)}});var IN=w((j_e,IC)=>{"use strict";f();N();m();var ov=ki(),Tee=oa(),Eee=function(e){return Tee(e)?e:void 0};IC.exports=function(e,t){return arguments.length<2?Eee(ov[e]):ov[e]&&ov[e][t]}});var _C=w((Q_e,gC)=>{"use strict";f();N();m();var hee=fi();gC.exports=hee({}.isPrototypeOf)});var DC=w((z_e,OC)=>{"use strict";f();N();m();var yee=ki(),vC=yee.navigator,SC=vC&&vC.userAgent;OC.exports=SC?String(SC):""});var LC=w((eve,wC)=>{"use strict";f();N();m();var PC=ki(),uv=DC(),bC=PC.process,AC=PC.Deno,RC=bC&&bC.versions||AC&&AC.version,FC=RC&&RC.v8,ua,gN;FC&&(ua=FC.split("."),gN=ua[0]>0&&ua[0]<4?1:+(ua[0]+ua[1]));!gN&&uv&&(ua=uv.match(/Edge\/(\d+)/),(!ua||ua[1]>=74)&&(ua=uv.match(/Chrome\/(\d+)/),ua&&(gN=+ua[1])));wC.exports=gN});var cv=w((ive,BC)=>{"use strict";f();N();m();var CC=LC(),Iee=ys(),gee=ki(),_ee=gee.String;BC.exports=!!Object.getOwnPropertySymbols&&!Iee(function(){var e=Symbol("symbol detection");return!_ee(e)||!(Object(e)instanceof Symbol)||!Symbol.sham&&CC&&CC<41})});var lv=w((uve,UC)=>{"use strict";f();N();m();var vee=cv();UC.exports=vee&&!Symbol.sham&&typeof Symbol.iterator=="symbol"});var dv=w((pve,kC)=>{"use strict";f();N();m();var See=IN(),Oee=oa(),Dee=_C(),bee=lv(),Aee=Object;kC.exports=bee?function(e){return typeof e=="symbol"}:function(e){var t=See("Symbol");return Oee(t)&&Dee(t.prototype,Aee(e))}});var xC=w((Tve,MC)=>{"use strict";f();N();m();var Ree=String;MC.exports=function(e){try{return Ree(e)}catch(t){return"Object"}}});var _N=w((Ive,qC)=>{"use strict";f();N();m();var Fee=oa(),Pee=xC(),wee=TypeError;qC.exports=function(e){if(Fee(e))return e;throw new wee(Pee(e)+" is not a function")}});var pv=w((Sve,VC)=>{"use strict";f();N();m();var Lee=_N(),Cee=iv();VC.exports=function(e,t){var n=e[t];return Cee(n)?void 0:Lee(n)}});var KC=w((Ave,jC)=>{"use strict";f();N();m();var fv=$u(),mv=oa(),Nv=il(),Bee=TypeError;jC.exports=function(e,t){var n,r;if(t==="string"&&mv(n=e.toString)&&!Nv(r=fv(n,e))||mv(n=e.valueOf)&&!Nv(r=fv(n,e))||t!=="string"&&mv(n=e.toString)&&!Nv(r=fv(n,e)))return r;throw new Bee("Can't convert object to primitive value")}});var $C=w((wve,GC)=>{"use strict";f();N();m();GC.exports=!1});var vN=w((Uve,YC)=>{"use strict";f();N();m();var QC=ki(),Uee=Object.defineProperty;YC.exports=function(e,t){try{Uee(QC,e,{value:t,configurable:!0,writable:!0})}catch(n){QC[e]=t}return t}});var SN=w((qve,zC)=>{"use strict";f();N();m();var kee=$C(),Mee=ki(),xee=vN(),JC="__core-js_shared__",HC=zC.exports=Mee[JC]||xee(JC,{});(HC.versions||(HC.versions=[])).push({version:"3.41.0",mode:kee?"pure":"global",copyright:"\xA9 2014-2025 Denis Pushkarev (zloirock.ru)",license:"https://github.com/zloirock/core-js/blob/v3.41.0/LICENSE",source:"https://github.com/zloirock/core-js"})});var Tv=w((Gve,XC)=>{"use strict";f();N();m();var WC=SN();XC.exports=function(e,t){return WC[e]||(WC[e]=t||{})}});var eB=w((Jve,ZC)=>{"use strict";f();N();m();var qee=av(),Vee=Object;ZC.exports=function(e){return Vee(qee(e))}});var zo=w((Xve,tB)=>{"use strict";f();N();m();var jee=fi(),Kee=eB(),Gee=jee({}.hasOwnProperty);tB.exports=Object.hasOwn||function(t,n){return Gee(Kee(t),n)}});var Ev=w((nSe,nB)=>{"use strict";f();N();m();var $ee=fi(),Qee=0,Yee=Math.random(),Jee=$ee(1 .toString);nB.exports=function(e){return"Symbol("+(e===void 0?"":e)+")_"+Jee(++Qee+Yee,36)}});var aB=w((sSe,iB)=>{"use strict";f();N();m();var Hee=ki(),zee=Tv(),rB=zo(),Wee=Ev(),Xee=cv(),Zee=lv(),al=Hee.Symbol,hv=zee("wks"),ete=Zee?al.for||al:al&&al.withoutSetter||Wee;iB.exports=function(e){return rB(hv,e)||(hv[e]=Xee&&rB(al,e)?al[e]:ete("Symbol."+e)),hv[e]}});var cB=w((lSe,uB)=>{"use strict";f();N();m();var tte=$u(),sB=il(),oB=dv(),nte=pv(),rte=KC(),ite=aB(),ate=TypeError,ste=ite("toPrimitive");uB.exports=function(e,t){if(!sB(e)||oB(e))return e;var n=nte(e,ste),r;if(n){if(t===void 0&&(t="default"),r=tte(n,e,t),!sB(r)||oB(r))return r;throw new ate("Can't convert object to primitive value")}return t===void 0&&(t="number"),rte(e,t)}});var yv=w((mSe,lB)=>{"use strict";f();N();m();var ote=cB(),ute=dv();lB.exports=function(e){var t=ote(e,"string");return ute(t)?t:t+""}});var fB=w((hSe,pB)=>{"use strict";f();N();m();var cte=ki(),dB=il(),Iv=cte.document,lte=dB(Iv)&&dB(Iv.createElement);pB.exports=function(e){return lte?Iv.createElement(e):{}}});var gv=w((_Se,mB)=>{"use strict";f();N();m();var dte=Ho(),pte=ys(),fte=fB();mB.exports=!dte&&!pte(function(){return Object.defineProperty(fte("div"),"a",{get:function(){return 7}}).a!==7})});var _v=w(TB=>{"use strict";f();N();m();var mte=Ho(),Nte=$u(),Tte=aC(),Ete=tv(),hte=yN(),yte=yv(),Ite=zo(),gte=gv(),NB=Object.getOwnPropertyDescriptor;TB.f=mte?NB:function(t,n){if(t=hte(t),n=yte(n),gte)try{return NB(t,n)}catch(r){}if(Ite(t,n))return Ete(!Nte(Tte.f,t,n),t[n])}});var hB=w((FSe,EB)=>{"use strict";f();N();m();var _te=Ho(),vte=ys();EB.exports=_te&&vte(function(){return Object.defineProperty(function(){},"prototype",{value:42,writable:!1}).prototype!==42})});var ip=w((CSe,yB)=>{"use strict";f();N();m();var Ste=il(),Ote=String,Dte=TypeError;yB.exports=function(e){if(Ste(e))return e;throw new Dte(Ote(e)+" is not an object")}});var DN=w(gB=>{"use strict";f();N();m();var bte=Ho(),Ate=gv(),Rte=hB(),ON=ip(),IB=yv(),Fte=TypeError,vv=Object.defineProperty,Pte=Object.getOwnPropertyDescriptor,Sv="enumerable",Ov="configurable",Dv="writable";gB.f=bte?Rte?function(t,n,r){if(ON(t),n=IB(n),ON(r),typeof t=="function"&&n==="prototype"&&"value"in r&&Dv in r&&!r[Dv]){var i=Pte(t,n);i&&i[Dv]&&(t[n]=r.value,r={configurable:Ov in r?r[Ov]:i[Ov],enumerable:Sv in r?r[Sv]:i[Sv],writable:!1})}return vv(t,n,r)}:vv:function(t,n,r){if(ON(t),n=IB(n),ON(r),Ate)try{return vv(t,n,r)}catch(i){}if("get"in r||"set"in r)throw new Fte("Accessors not supported");return"value"in r&&(t[n]=r.value),t}});var bv=w((jSe,_B)=>{"use strict";f();N();m();var wte=Ho(),Lte=DN(),Cte=tv();_B.exports=wte?function(e,t,n){return Lte.f(e,t,Cte(1,n))}:function(e,t,n){return e[t]=n,e}});var OB=w((QSe,SB)=>{"use strict";f();N();m();var Av=Ho(),Bte=zo(),vB=Function.prototype,Ute=Av&&Object.getOwnPropertyDescriptor,Rv=Bte(vB,"name"),kte=Rv&&function(){}.name==="something",Mte=Rv&&(!Av||Av&&Ute(vB,"name").configurable);SB.exports={EXISTS:Rv,PROPER:kte,CONFIGURABLE:Mte}});var bB=w((zSe,DB)=>{"use strict";f();N();m();var xte=fi(),qte=oa(),Fv=SN(),Vte=xte(Function.toString);qte(Fv.inspectSource)||(Fv.inspectSource=function(e){return Vte(e)});DB.exports=Fv.inspectSource});var FB=w((eOe,RB)=>{"use strict";f();N();m();var jte=ki(),Kte=oa(),AB=jte.WeakMap;RB.exports=Kte(AB)&&/native code/.test(String(AB))});var LB=w((iOe,wB)=>{"use strict";f();N();m();var Gte=Tv(),$te=Ev(),PB=Gte("keys");wB.exports=function(e){return PB[e]||(PB[e]=$te(e))}});var Pv=w((uOe,CB)=>{"use strict";f();N();m();CB.exports={}});var MB=w((pOe,kB)=>{"use strict";f();N();m();var Qte=FB(),UB=ki(),Yte=il(),Jte=bv(),wv=zo(),Lv=SN(),Hte=LB(),zte=Pv(),BB="Object already initialized",Cv=UB.TypeError,Wte=UB.WeakMap,bN,ap,AN,Xte=function(e){return AN(e)?ap(e):bN(e,{})},Zte=function(e){return function(t){var n;if(!Yte(t)||(n=ap(t)).type!==e)throw new Cv("Incompatible receiver, "+e+" required");return n}};Qte||Lv.state?(ca=Lv.state||(Lv.state=new Wte),ca.get=ca.get,ca.has=ca.has,ca.set=ca.set,bN=function(e,t){if(ca.has(e))throw new Cv(BB);return t.facade=e,ca.set(e,t),t},ap=function(e){return ca.get(e)||{}},AN=function(e){return ca.has(e)}):(Qu=Hte("state"),zte[Qu]=!0,bN=function(e,t){if(wv(e,Qu))throw new Cv(BB);return t.facade=e,Jte(e,Qu,t),t},ap=function(e){return wv(e,Qu)?e[Qu]:{}},AN=function(e){return wv(e,Qu)});var ca,Qu;kB.exports={set:bN,get:ap,has:AN,enforce:Xte,getterFor:Zte}});var jB=w((TOe,VB)=>{"use strict";f();N();m();var Uv=fi(),ene=ys(),tne=oa(),RN=zo(),Bv=Ho(),nne=OB().CONFIGURABLE,rne=bB(),qB=MB(),ine=qB.enforce,ane=qB.get,xB=String,FN=Object.defineProperty,sne=Uv("".slice),one=Uv("".replace),une=Uv([].join),cne=Bv&&!ene(function(){return FN(function(){},"length",{value:8}).length!==8}),lne=String(String).split("String"),dne=VB.exports=function(e,t,n){sne(xB(t),0,7)==="Symbol("&&(t="["+one(xB(t),/^Symbol\(([^)]*)\).*$/,"$1")+"]"),n&&n.getter&&(t="get "+t),n&&n.setter&&(t="set "+t),(!RN(e,"name")||nne&&e.name!==t)&&(Bv?FN(e,"name",{value:t,configurable:!0}):e.name=t),cne&&n&&RN(n,"arity")&&e.length!==n.arity&&FN(e,"length",{value:n.arity});try{n&&RN(n,"constructor")&&n.constructor?Bv&&FN(e,"prototype",{writable:!1}):e.prototype&&(e.prototype=void 0)}catch(i){}var r=ine(e);return RN(r,"source")||(r.source=une(lne,typeof t=="string"?t:"")),e};Function.prototype.toString=dne(function(){return tne(this)&&ane(this).source||rne(this)},"toString")});var GB=w((IOe,KB)=>{"use strict";f();N();m();var pne=oa(),fne=DN(),mne=jB(),Nne=vN();KB.exports=function(e,t,n,r){r||(r={});var i=r.enumerable,a=r.name!==void 0?r.name:t;if(pne(n)&&mne(n,a,r),r.global)i?e[t]=n:Nne(t,n);else{try{r.unsafe?e[t]&&(i=!0):delete e[t]}catch(o){}i?e[t]=n:fne.f(e,t,{value:n,enumerable:!1,configurable:!r.nonConfigurable,writable:!r.nonWritable})}return e}});var QB=w((SOe,$B)=>{"use strict";f();N();m();var Tne=Math.ceil,Ene=Math.floor;$B.exports=Math.trunc||function(t){var n=+t;return(n>0?Ene:Tne)(n)}});var PN=w((AOe,YB)=>{"use strict";f();N();m();var hne=QB();YB.exports=function(e){var t=+e;return t!==t||t===0?0:hne(t)}});var HB=w((wOe,JB)=>{"use strict";f();N();m();var yne=PN(),Ine=Math.max,gne=Math.min;JB.exports=function(e,t){var n=yne(e);return n<0?Ine(n+t,0):gne(n,t)}});var WB=w((UOe,zB)=>{"use strict";f();N();m();var _ne=PN(),vne=Math.min;zB.exports=function(e){var t=_ne(e);return t>0?vne(t,9007199254740991):0}});var ZB=w((qOe,XB)=>{"use strict";f();N();m();var Sne=WB();XB.exports=function(e){return Sne(e.length)}});var nU=w((GOe,tU)=>{"use strict";f();N();m();var One=yN(),Dne=HB(),bne=ZB(),eU=function(e){return function(t,n,r){var i=One(t),a=bne(i);if(a===0)return!e&&-1;var o=Dne(r,a),c;if(e&&n!==n){for(;a>o;)if(c=i[o++],c!==c)return!0}else for(;a>o;o++)if((e||o in i)&&i[o]===n)return e||o||0;return!e&&-1}};tU.exports={includes:eU(!0),indexOf:eU(!1)}});var aU=w((JOe,iU)=>{"use strict";f();N();m();var Ane=fi(),kv=zo(),Rne=yN(),Fne=nU().indexOf,Pne=Pv(),rU=Ane([].push);iU.exports=function(e,t){var n=Rne(e),r=0,i=[],a;for(a in n)!kv(Pne,a)&&kv(n,a)&&rU(i,a);for(;t.length>r;)kv(n,a=t[r++])&&(~Fne(i,a)||rU(i,a));return i}});var oU=w((XOe,sU)=>{"use strict";f();N();m();sU.exports=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"]});var cU=w(uU=>{"use strict";f();N();m();var wne=aU(),Lne=oU(),Cne=Lne.concat("length","prototype");uU.f=Object.getOwnPropertyNames||function(t){return wne(t,Cne)}});var dU=w(lU=>{"use strict";f();N();m();lU.f=Object.getOwnPropertySymbols});var fU=w((lDe,pU)=>{"use strict";f();N();m();var Bne=IN(),Une=fi(),kne=cU(),Mne=dU(),xne=ip(),qne=Une([].concat);pU.exports=Bne("Reflect","ownKeys")||function(t){var n=kne.f(xne(t)),r=Mne.f;return r?qne(n,r(t)):n}});var TU=w((mDe,NU)=>{"use strict";f();N();m();var mU=zo(),Vne=fU(),jne=_v(),Kne=DN();NU.exports=function(e,t,n){for(var r=Vne(t),i=Kne.f,a=jne.f,o=0;o{"use strict";f();N();m();var Gne=ys(),$ne=oa(),Qne=/#|\.prototype\./,sp=function(e,t){var n=Jne[Yne(e)];return n===zne?!0:n===Hne?!1:$ne(t)?Gne(t):!!t},Yne=sp.normalize=function(e){return String(e).replace(Qne,".").toLowerCase()},Jne=sp.data={},Hne=sp.NATIVE="N",zne=sp.POLYFILL="P";EU.exports=sp});var Mv=w((_De,yU)=>{"use strict";f();N();m();var wN=ki(),Wne=_v().f,Xne=bv(),Zne=GB(),ere=vN(),tre=TU(),nre=hU();yU.exports=function(e,t){var n=e.target,r=e.global,i=e.stat,a,o,c,l,p,T;if(r?o=wN:i?o=wN[n]||ere(n,{}):o=wN[n]&&wN[n].prototype,o)for(c in t){if(p=t[c],e.dontCallGetSet?(T=Wne(o,c),l=T&&T.value):l=o[c],a=nre(r?c:n+(i?".":"#")+c,e.forced),!a&&l!==void 0){if(typeof p==typeof l)continue;tre(p,l)}(e.sham||l&&l.sham)&&Xne(p,"sham",!0),Zne(o,c,p,e)}}});var op=w((DDe,IU)=>{"use strict";f();N();m();var xv=fi(),LN=Set.prototype;IU.exports={Set,add:xv(LN.add),has:xv(LN.has),remove:xv(LN.delete),proto:LN}});var qv=w((FDe,gU)=>{"use strict";f();N();m();var rre=op().has;gU.exports=function(e){return rre(e),e}});var vU=w((CDe,_U)=>{"use strict";f();N();m();var ire=fi(),are=_N();_U.exports=function(e,t,n){try{return ire(are(Object.getOwnPropertyDescriptor(e,t)[n]))}catch(r){}}});var Vv=w((MDe,SU)=>{"use strict";f();N();m();var sre=vU(),ore=op();SU.exports=sre(ore.proto,"size","get")||function(e){return e.size}});var jv=w((jDe,OU)=>{"use strict";f();N();m();var ure=$u();OU.exports=function(e,t,n){for(var r=n?e:e.iterator,i=e.next,a,o;!(a=ure(i,r)).done;)if(o=t(a.value),o!==void 0)return o}});var PU=w((QDe,FU)=>{"use strict";f();N();m();var DU=fi(),cre=jv(),bU=op(),lre=bU.Set,AU=bU.proto,dre=DU(AU.forEach),RU=DU(AU.keys),pre=RU(new lre).next;FU.exports=function(e,t,n){return n?cre({iterator:RU(e),next:pre},t):dre(e,t)}});var LU=w((zDe,wU)=>{"use strict";f();N();m();wU.exports=function(e){return{iterator:e,next:e.next,done:!1}}});var Kv=w((ebe,xU)=>{"use strict";f();N();m();var CU=_N(),kU=ip(),BU=$u(),fre=PN(),mre=LU(),UU="Invalid size",Nre=RangeError,Tre=TypeError,Ere=Math.max,MU=function(e,t){this.set=e,this.size=Ere(t,0),this.has=CU(e.has),this.keys=CU(e.keys)};MU.prototype={getIterator:function(){return mre(kU(BU(this.keys,this.set)))},includes:function(e){return BU(this.has,this.set,e)}};xU.exports=function(e){kU(e);var t=+e.size;if(t!==t)throw new Tre(UU);var n=fre(t);if(n<0)throw new Nre(UU);return new MU(e,n)}});var VU=w((ibe,qU)=>{"use strict";f();N();m();var hre=qv(),yre=Vv(),Ire=PU(),gre=Kv();qU.exports=function(t){var n=hre(this),r=gre(t);return yre(n)>r.size?!1:Ire(n,function(i){if(!r.includes(i))return!1},!0)!==!1}});var Gv=w((ube,GU)=>{"use strict";f();N();m();var _re=IN(),jU=function(e){return{size:e,has:function(){return!1},keys:function(){return{next:function(){return{done:!0}}}}}},KU=function(e){return{size:e,has:function(){return!0},keys:function(){throw new Error("e")}}};GU.exports=function(e,t){var n=_re("Set");try{new n()[e](jU(0));try{return new n()[e](jU(-1)),!1}catch(i){if(!t)return!0;try{return new n()[e](KU(-1/0)),!1}catch(a){var r=new n;return r.add(1),r.add(2),t(r[e](KU(1/0)))}}}catch(i){return!1}}});var $U=w(()=>{"use strict";f();N();m();var vre=Mv(),Sre=VU(),Ore=Gv(),Dre=!Ore("isSubsetOf",function(e){return e});vre({target:"Set",proto:!0,real:!0,forced:Dre},{isSubsetOf:Sre})});var QU=w(()=>{"use strict";f();N();m();$U()});var HU=w((_be,JU)=>{"use strict";f();N();m();var bre=$u(),YU=ip(),Are=pv();JU.exports=function(e,t,n){var r,i;YU(e);try{if(r=Are(e,"return"),!r){if(t==="throw")throw n;return n}r=bre(r,e)}catch(a){i=!0,r=a}if(t==="throw")throw n;if(i)throw r;return YU(r),n}});var WU=w((Dbe,zU)=>{"use strict";f();N();m();var Rre=qv(),Fre=op().has,Pre=Vv(),wre=Kv(),Lre=jv(),Cre=HU();zU.exports=function(t){var n=Rre(this),r=wre(t);if(Pre(n){"use strict";f();N();m();var Bre=Mv(),Ure=WU(),kre=Gv(),Mre=!kre("isSupersetOf",function(e){return!e});Bre({target:"Set",proto:!0,real:!0,forced:Mre},{isSupersetOf:Ure})});var ZU=w(()=>{"use strict";f();N();m();XU()});var up=w(Cn=>{"use strict";f();N();m();Object.defineProperty(Cn,"__esModule",{value:!0});Cn.subtractSet=xre;Cn.mapToArrayOfValues=qre;Cn.kindToConvertedTypeString=Vre;Cn.fieldDatasToSimpleFieldDatas=jre;Cn.isNodeLeaf=Kre;Cn.newEntityInterfaceFederationData=Gre;Cn.upsertEntityInterfaceFederationData=$re;Cn.upsertEntityData=Yre;Cn.updateEntityData=ek;Cn.newFieldAuthorizationData=Jre;Cn.newAuthorizationData=Hre;Cn.addScopes=$v;Cn.mergeRequiredScopesByAND=UN;Cn.mergeRequiredScopesByOR=Qv;Cn.upsertFieldAuthorizationData=tk;Cn.upsertAuthorizationData=Xre;Cn.upsertAuthorizationConfiguration=Zre;Cn.isNodeKindObject=eie;Cn.isInterfaceDefinitionData=tie;Cn.isObjectDefinitionData=nie;var Zt=Ae(),Wr=lr(),CN=Hr(),BN=hs();QU();ZU();function xre(e,t){for(let n of e)t.delete(n)}function qre(e){let t=[];for(let n of e.values())t.push(n);return t}function Vre(e){switch(e){case Zt.Kind.BOOLEAN:return Wr.BOOLEAN_SCALAR;case Zt.Kind.ENUM:case Zt.Kind.ENUM_TYPE_DEFINITION:case Zt.Kind.ENUM_TYPE_EXTENSION:return Wr.ENUM;case Zt.Kind.ENUM_VALUE_DEFINITION:return Wr.ENUM_VALUE;case Zt.Kind.FIELD_DEFINITION:return Wr.FIELD;case Zt.Kind.FLOAT:return Wr.FLOAT_SCALAR;case Zt.Kind.INPUT_OBJECT_TYPE_DEFINITION:case Zt.Kind.INPUT_OBJECT_TYPE_EXTENSION:return Wr.INPUT_OBJECT;case Zt.Kind.INPUT_VALUE_DEFINITION:return Wr.INPUT_VALUE;case Zt.Kind.INT:return Wr.INT_SCALAR;case Zt.Kind.INTERFACE_TYPE_DEFINITION:case Zt.Kind.INTERFACE_TYPE_EXTENSION:return Wr.INTERFACE;case Zt.Kind.NULL:return Wr.NULL;case Zt.Kind.OBJECT:case Zt.Kind.OBJECT_TYPE_DEFINITION:case Zt.Kind.OBJECT_TYPE_EXTENSION:return Wr.OBJECT;case Zt.Kind.STRING:return Wr.STRING_SCALAR;case Zt.Kind.SCALAR_TYPE_DEFINITION:case Zt.Kind.SCALAR_TYPE_EXTENSION:return Wr.SCALAR;case Zt.Kind.UNION_TYPE_DEFINITION:case Zt.Kind.UNION_TYPE_EXTENSION:return Wr.UNION;default:return e}}function jre(e){let t=[];for(let{name:n,namedTypeName:r}of e)t.push({name:n,namedTypeName:r});return t}function Kre(e){if(!e)return!0;switch(e){case Zt.Kind.OBJECT_TYPE_DEFINITION:case Zt.Kind.INTERFACE_TYPE_DEFINITION:case Zt.Kind.UNION_TYPE_DEFINITION:return!1;default:return!0}}function Gre(e,t){return{concreteTypeNames:new Set(e.concreteTypeNames),fieldDatasBySubgraphName:new Map([[t,e.fieldDatas]]),interfaceFieldNames:new Set(e.interfaceFieldNames),interfaceObjectFieldNames:new Set(e.interfaceObjectFieldNames),interfaceObjectSubgraphs:new Set(e.isInterfaceObject?[t]:[]),subgraphDataByTypeName:new Map([[t,e]]),typeName:e.typeName}}function $re(e,t,n){(0,CN.addIterableValuesToSet)(t.concreteTypeNames,e.concreteTypeNames),e.subgraphDataByTypeName.set(n,t),e.fieldDatasBySubgraphName.set(n,t.fieldDatas),(0,CN.addIterableValuesToSet)(t.interfaceFieldNames,e.interfaceFieldNames),(0,CN.addIterableValuesToSet)(t.interfaceObjectFieldNames,e.interfaceObjectFieldNames),t.isInterfaceObject&&e.interfaceObjectSubgraphs.add(n)}function Qre({keyFieldSetDataByFieldSet:e,subgraphName:t,typeName:n}){let r=new Map([[t,e]]),i=new Map;for(let[a,{documentNode:o,isUnresolvable:c}]of e)c||i.set(a,o);return{keyFieldSetDatasBySubgraphName:r,documentNodeByKeyFieldSet:i,keyFieldSets:new Set,subgraphNames:new Set([t]),typeName:n}}function Yre({entityDataByTypeName:e,keyFieldSetDataByFieldSet:t,subgraphName:n,typeName:r}){let i=e.get(r);i?ek({entityData:i,keyFieldSetDataByFieldSet:t,subgraphName:n}):e.set(r,Qre({keyFieldSetDataByFieldSet:t,subgraphName:n,typeName:r}))}function ek({entityData:e,keyFieldSetDataByFieldSet:t,subgraphName:n}){e.subgraphNames.add(n);let r=e.keyFieldSetDatasBySubgraphName.get(n);if(!r){e.keyFieldSetDatasBySubgraphName.set(n,t);for(let[i,{documentNode:a,isUnresolvable:o}]of t)o||e.documentNodeByKeyFieldSet.set(i,a);return}for(let[i,a]of t){a.isUnresolvable||e.documentNodeByKeyFieldSet.set(i,a.documentNode);let o=r.get(i);if(o){o.isUnresolvable||(o.isUnresolvable=a.isUnresolvable);continue}r.set(i,a)}}function Jre(e){return{fieldName:e,inheritedData:{requiredScopes:[],requiredScopesByOR:[],requiresAuthentication:!1},originalData:{requiredScopes:[],requiresAuthentication:!1}}}function Hre(e){return{fieldAuthDataByFieldName:new Map,requiredScopes:[],requiredScopesByOR:[],requiresAuthentication:!1,typeName:e}}function $v(e,t){for(let n=e.length-1;n>-1;n--){if(e[n].isSubsetOf(t))return;e[n].isSupersetOf(t)&&e.splice(n,1)}e.push(t)}function UN(e,t){if(e.length<1||t.length<1){for(let r of t)e.push(new Set(r));return e}let n=[];for(let r of t)for(let i of e){let a=(0,CN.addSets)(r,i);$v(n,a)}return n}function Qv(e,t){for(let n of t)$v(e,n);return e.length<=BN.MAX_OR_SCOPES}function tk(e,t){var i,a;let n=t.fieldName,r=e.get(n);return r?((i=r.inheritedData).requiresAuthentication||(i.requiresAuthentication=t.inheritedData.requiresAuthentication),(a=r.originalData).requiresAuthentication||(a.requiresAuthentication=t.originalData.requiresAuthentication),!Qv(r.inheritedData.requiredScopesByOR,t.inheritedData.requiredScopes)||r.inheritedData.requiredScopes.length*t.inheritedData.requiredScopes.length>BN.MAX_OR_SCOPES||r.originalData.requiredScopes.length*t.originalData.requiredScopes.length>BN.MAX_OR_SCOPES?!1:(r.inheritedData.requiredScopes=UN(r.inheritedData.requiredScopes,t.inheritedData.requiredScopes),r.originalData.requiredScopes=UN(r.originalData.requiredScopes,t.originalData.requiredScopes),!0)):(e.set(n,nk(t)),!0)}function zre(e){let t=new Map;for(let[n,r]of e)t.set(n,nk(r));return t}function nk(e){return{fieldName:e.fieldName,inheritedData:{requiredScopes:[...e.inheritedData.requiredScopes],requiredScopesByOR:[...e.inheritedData.requiredScopes],requiresAuthentication:e.inheritedData.requiresAuthentication},originalData:{requiredScopes:[...e.originalData.requiredScopes],requiresAuthentication:e.originalData.requiresAuthentication}}}function Wre(e){return{fieldAuthDataByFieldName:zre(e.fieldAuthDataByFieldName),requiredScopes:[...e.requiredScopes],requiredScopesByOR:[...e.requiredScopes],requiresAuthentication:e.requiresAuthentication,typeName:e.typeName}}function Xre(e,t,n){let r=e.get(t.typeName);if(!r){e.set(t.typeName,Wre(t));return}r.requiresAuthentication||(r.requiresAuthentication=t.requiresAuthentication),!Qv(r.requiredScopesByOR,t.requiredScopes)||r.requiredScopes.length*t.requiredScopes.length>BN.MAX_OR_SCOPES?n.add(t.typeName):r.requiredScopes=UN(r.requiredScopes,t.requiredScopes);for(let[i,a]of t.fieldAuthDataByFieldName)tk(r.fieldAuthDataByFieldName,a)||n.add(`${t.typeName}.${i}`)}function Zre(e,t){let n=t.typeName;for(let[r,i]of t.fieldAuthDataByFieldName){let a=`${n}.${r}`,o=e.get(a);o?(o.requiresAuthentication=i.inheritedData.requiresAuthentication,o.requiredScopes=i.inheritedData.requiredScopes.map(c=>[...c]),o.requiredScopesByOR=i.inheritedData.requiredScopesByOR.map(c=>[...c])):e.set(a,{argumentNames:[],typeName:n,fieldName:r,requiresAuthentication:i.inheritedData.requiresAuthentication,requiredScopes:i.inheritedData.requiredScopes.map(c=>[...c]),requiredScopesByOR:i.inheritedData.requiredScopesByOR.map(c=>[...c])})}}function eie(e){return e===Zt.Kind.OBJECT_TYPE_DEFINITION||e===Zt.Kind.OBJECT_TYPE_EXTENSION}function tie(e){return e.kind===Zt.Kind.INTERFACE_TYPE_DEFINITION}function nie(e){return e?e.kind===Zt.Kind.OBJECT_TYPE_DEFINITION:!1}});var Hv={};jf(Hv,{__addDisposableResource:()=>vk,__assign:()=>kN,__asyncDelegator:()=>Nk,__asyncGenerator:()=>mk,__asyncValues:()=>Tk,__await:()=>sl,__awaiter:()=>uk,__classPrivateFieldGet:()=>Ik,__classPrivateFieldIn:()=>_k,__classPrivateFieldSet:()=>gk,__createBinding:()=>xN,__decorate:()=>ak,__disposeResources:()=>Sk,__esDecorate:()=>rie,__exportStar:()=>lk,__extends:()=>rk,__generator:()=>ck,__importDefault:()=>yk,__importStar:()=>hk,__makeTemplateObject:()=>Ek,__metadata:()=>ok,__param:()=>sk,__propKey:()=>aie,__read:()=>Jv,__rest:()=>ik,__runInitializers:()=>iie,__setFunctionName:()=>sie,__spread:()=>dk,__spreadArray:()=>fk,__spreadArrays:()=>pk,__values:()=>MN,default:()=>cie});function rk(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");Yv(e,t);function n(){this.constructor=e}e.prototype=t===null?Object.create(t):(n.prototype=t.prototype,new n)}function ik(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var i=0,r=Object.getOwnPropertySymbols(e);i=0;c--)(o=e[c])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a}function sk(e,t){return function(n,r){t(n,r,e)}}function rie(e,t,n,r,i,a){function o(J){if(J!==void 0&&typeof J!="function")throw new TypeError("Function expected");return J}for(var c=r.kind,l=c==="getter"?"get":c==="setter"?"set":"value",p=!t&&e?r.static?e:e.prototype:null,T=t||(p?Object.getOwnPropertyDescriptor(p,r.name):{}),y,g=!1,_=n.length-1;_>=0;_--){var F={};for(var U in r)F[U]=U==="access"?{}:r[U];for(var U in r.access)F.access[U]=r.access[U];F.addInitializer=function(J){if(g)throw new TypeError("Cannot add initializers after decoration has completed");a.push(o(J||null))};var K=(0,n[_])(c==="accessor"?{get:T.get,set:T.set}:T[l],F);if(c==="accessor"){if(K===void 0)continue;if(K===null||typeof K!="object")throw new TypeError("Object expected");(y=o(K.get))&&(T.get=y),(y=o(K.set))&&(T.set=y),(y=o(K.init))&&i.unshift(y)}else(y=o(K))&&(c==="field"?i.unshift(y):T[l]=y)}p&&Object.defineProperty(p,r.name,T),g=!0}function iie(e,t,n){for(var r=arguments.length>2,i=0;i0&&a[a.length-1])&&(p[0]===6||p[0]===2)){n=0;continue}if(p[0]===3&&(!a||p[1]>a[0]&&p[1]=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")}function Jv(e,t){var n=typeof Symbol=="function"&&e[Symbol.iterator];if(!n)return e;var r=n.call(e),i,a=[],o;try{for(;(t===void 0||t-- >0)&&!(i=r.next()).done;)a.push(i.value)}catch(c){o={error:c}}finally{try{i&&!i.done&&(n=r.return)&&n.call(r)}finally{if(o)throw o.error}}return a}function dk(){for(var e=[],t=0;t1||c(g,_)})})}function c(g,_){try{l(r[g](_))}catch(F){y(a[0][3],F)}}function l(g){g.value instanceof sl?Promise.resolve(g.value.v).then(p,T):y(a[0][2],g)}function p(g){c("next",g)}function T(g){c("throw",g)}function y(g,_){g(_),a.shift(),a.length&&c(a[0][0],a[0][1])}}function Nk(e){var t,n;return t={},r("next"),r("throw",function(i){throw i}),r("return"),t[Symbol.iterator]=function(){return this},t;function r(i,a){t[i]=e[i]?function(o){return(n=!n)?{value:sl(e[i](o)),done:!1}:a?a(o):o}:a}}function Tk(e){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var t=e[Symbol.asyncIterator],n;return t?t.call(e):(e=typeof MN=="function"?MN(e):e[Symbol.iterator](),n={},r("next"),r("throw"),r("return"),n[Symbol.asyncIterator]=function(){return this},n);function r(a){n[a]=e[a]&&function(o){return new Promise(function(c,l){o=e[a](o),i(c,l,o.done,o.value)})}}function i(a,o,c,l){Promise.resolve(l).then(function(p){a({value:p,done:c})},o)}}function Ek(e,t){return Object.defineProperty?Object.defineProperty(e,"raw",{value:t}):e.raw=t,e}function hk(e){if(e&&e.__esModule)return e;var t={};if(e!=null)for(var n in e)n!=="default"&&Object.prototype.hasOwnProperty.call(e,n)&&xN(t,e,n);return oie(t,e),t}function yk(e){return e&&e.__esModule?e:{default:e}}function Ik(e,t,n,r){if(n==="a"&&!r)throw new TypeError("Private accessor was defined without a getter");if(typeof t=="function"?e!==t||!r:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return n==="m"?r:n==="a"?r.call(e):r?r.value:t.get(e)}function gk(e,t,n,r,i){if(r==="m")throw new TypeError("Private method is not writable");if(r==="a"&&!i)throw new TypeError("Private accessor was defined without a setter");if(typeof t=="function"?e!==t||!i:!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return r==="a"?i.call(e,n):i?i.value=n:t.set(e,n),n}function _k(e,t){if(t===null||typeof t!="object"&&typeof t!="function")throw new TypeError("Cannot use 'in' operator on non-object");return typeof e=="function"?t===e:e.has(t)}function vk(e,t,n){if(t!=null){if(typeof t!="object"&&typeof t!="function")throw new TypeError("Object expected.");var r;if(n){if(!Symbol.asyncDispose)throw new TypeError("Symbol.asyncDispose is not defined.");r=t[Symbol.asyncDispose]}if(r===void 0){if(!Symbol.dispose)throw new TypeError("Symbol.dispose is not defined.");r=t[Symbol.dispose]}if(typeof r!="function")throw new TypeError("Object not disposable.");e.stack.push({value:t,dispose:r,async:n})}else n&&e.stack.push({async:!0});return t}function Sk(e){function t(r){e.error=e.hasError?new uie(r,e.error,"An error was suppressed during disposal."):r,e.hasError=!0}function n(){for(;e.stack.length;){var r=e.stack.pop();try{var i=r.dispose&&r.dispose.call(r.value);if(r.async)return Promise.resolve(i).then(n,function(a){return t(a),n()})}catch(a){t(a)}}if(e.hasError)throw e.error}return n()}var Yv,kN,xN,oie,uie,cie,zv=gu(()=>{"use strict";f();N();m();Yv=function(e,t){return Yv=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,r){n.__proto__=r}||function(n,r){for(var i in r)Object.prototype.hasOwnProperty.call(r,i)&&(n[i]=r[i])},Yv(e,t)};kN=function(){return kN=Object.assign||function(t){for(var n,r=1,i=arguments.length;r$k,__assign:()=>qN,__asyncDelegator:()=>kk,__asyncGenerator:()=>Uk,__asyncValues:()=>Mk,__await:()=>ol,__awaiter:()=>Fk,__classPrivateFieldGet:()=>jk,__classPrivateFieldIn:()=>Gk,__classPrivateFieldSet:()=>Kk,__createBinding:()=>jN,__decorate:()=>bk,__disposeResources:()=>Qk,__esDecorate:()=>lie,__exportStar:()=>wk,__extends:()=>Ok,__generator:()=>Pk,__importDefault:()=>Vk,__importStar:()=>qk,__makeTemplateObject:()=>xk,__metadata:()=>Rk,__param:()=>Ak,__propKey:()=>pie,__read:()=>Xv,__rest:()=>Dk,__runInitializers:()=>die,__setFunctionName:()=>fie,__spread:()=>Lk,__spreadArray:()=>Bk,__spreadArrays:()=>Ck,__values:()=>VN,default:()=>Tie});function Ok(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");Wv(e,t);function n(){this.constructor=e}e.prototype=t===null?Object.create(t):(n.prototype=t.prototype,new n)}function Dk(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var i=0,r=Object.getOwnPropertySymbols(e);i=0;c--)(o=e[c])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a}function Ak(e,t){return function(n,r){t(n,r,e)}}function lie(e,t,n,r,i,a){function o(J){if(J!==void 0&&typeof J!="function")throw new TypeError("Function expected");return J}for(var c=r.kind,l=c==="getter"?"get":c==="setter"?"set":"value",p=!t&&e?r.static?e:e.prototype:null,T=t||(p?Object.getOwnPropertyDescriptor(p,r.name):{}),y,g=!1,_=n.length-1;_>=0;_--){var F={};for(var U in r)F[U]=U==="access"?{}:r[U];for(var U in r.access)F.access[U]=r.access[U];F.addInitializer=function(J){if(g)throw new TypeError("Cannot add initializers after decoration has completed");a.push(o(J||null))};var K=(0,n[_])(c==="accessor"?{get:T.get,set:T.set}:T[l],F);if(c==="accessor"){if(K===void 0)continue;if(K===null||typeof K!="object")throw new TypeError("Object expected");(y=o(K.get))&&(T.get=y),(y=o(K.set))&&(T.set=y),(y=o(K.init))&&i.unshift(y)}else(y=o(K))&&(c==="field"?i.unshift(y):T[l]=y)}p&&Object.defineProperty(p,r.name,T),g=!0}function die(e,t,n){for(var r=arguments.length>2,i=0;i0&&a[a.length-1])&&(p[0]===6||p[0]===2)){n=0;continue}if(p[0]===3&&(!a||p[1]>a[0]&&p[1]=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")}function Xv(e,t){var n=typeof Symbol=="function"&&e[Symbol.iterator];if(!n)return e;var r=n.call(e),i,a=[],o;try{for(;(t===void 0||t-- >0)&&!(i=r.next()).done;)a.push(i.value)}catch(c){o={error:c}}finally{try{i&&!i.done&&(n=r.return)&&n.call(r)}finally{if(o)throw o.error}}return a}function Lk(){for(var e=[],t=0;t1||c(g,_)})})}function c(g,_){try{l(r[g](_))}catch(F){y(a[0][3],F)}}function l(g){g.value instanceof ol?Promise.resolve(g.value.v).then(p,T):y(a[0][2],g)}function p(g){c("next",g)}function T(g){c("throw",g)}function y(g,_){g(_),a.shift(),a.length&&c(a[0][0],a[0][1])}}function kk(e){var t,n;return t={},r("next"),r("throw",function(i){throw i}),r("return"),t[Symbol.iterator]=function(){return this},t;function r(i,a){t[i]=e[i]?function(o){return(n=!n)?{value:ol(e[i](o)),done:!1}:a?a(o):o}:a}}function Mk(e){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var t=e[Symbol.asyncIterator],n;return t?t.call(e):(e=typeof VN=="function"?VN(e):e[Symbol.iterator](),n={},r("next"),r("throw"),r("return"),n[Symbol.asyncIterator]=function(){return this},n);function r(a){n[a]=e[a]&&function(o){return new Promise(function(c,l){o=e[a](o),i(c,l,o.done,o.value)})}}function i(a,o,c,l){Promise.resolve(l).then(function(p){a({value:p,done:c})},o)}}function xk(e,t){return Object.defineProperty?Object.defineProperty(e,"raw",{value:t}):e.raw=t,e}function qk(e){if(e&&e.__esModule)return e;var t={};if(e!=null)for(var n in e)n!=="default"&&Object.prototype.hasOwnProperty.call(e,n)&&jN(t,e,n);return mie(t,e),t}function Vk(e){return e&&e.__esModule?e:{default:e}}function jk(e,t,n,r){if(n==="a"&&!r)throw new TypeError("Private accessor was defined without a getter");if(typeof t=="function"?e!==t||!r:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return n==="m"?r:n==="a"?r.call(e):r?r.value:t.get(e)}function Kk(e,t,n,r,i){if(r==="m")throw new TypeError("Private method is not writable");if(r==="a"&&!i)throw new TypeError("Private accessor was defined without a setter");if(typeof t=="function"?e!==t||!i:!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return r==="a"?i.call(e,n):i?i.value=n:t.set(e,n),n}function Gk(e,t){if(t===null||typeof t!="object"&&typeof t!="function")throw new TypeError("Cannot use 'in' operator on non-object");return typeof e=="function"?t===e:e.has(t)}function $k(e,t,n){if(t!=null){if(typeof t!="object"&&typeof t!="function")throw new TypeError("Object expected.");var r;if(n){if(!Symbol.asyncDispose)throw new TypeError("Symbol.asyncDispose is not defined.");r=t[Symbol.asyncDispose]}if(r===void 0){if(!Symbol.dispose)throw new TypeError("Symbol.dispose is not defined.");r=t[Symbol.dispose]}if(typeof r!="function")throw new TypeError("Object not disposable.");e.stack.push({value:t,dispose:r,async:n})}else n&&e.stack.push({async:!0});return t}function Qk(e){function t(r){e.error=e.hasError?new Nie(r,e.error,"An error was suppressed during disposal."):r,e.hasError=!0}function n(){for(;e.stack.length;){var r=e.stack.pop();try{var i=r.dispose&&r.dispose.call(r.value);if(r.async)return Promise.resolve(i).then(n,function(a){return t(a),n()})}catch(a){t(a)}}if(e.hasError)throw e.error}return n()}var Wv,qN,jN,mie,Nie,Tie,Jk=gu(()=>{"use strict";f();N();m();Wv=function(e,t){return Wv=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,r){n.__proto__=r}||function(n,r){for(var i in r)Object.prototype.hasOwnProperty.call(r,i)&&(n[i]=r[i])},Wv(e,t)};qN=function(){return qN=Object.assign||function(t){for(var n,r=1,i=arguments.length;r{"use strict";f();N();m()});var cp=w(dr=>{"use strict";f();N();m();Object.defineProperty(dr,"__esModule",{value:!0});dr.assertSome=dr.isSome=dr.compareNodes=dr.nodeToString=dr.compareStrings=dr.isValidPath=dr.isDocumentString=dr.asArray=void 0;var Eie=Ae(),hie=e=>Array.isArray(e)?e:e?[e]:[];dr.asArray=hie;var yie=/\.[a-z0-9]+$/i;function Iie(e){if(typeof e!="string"||yie.test(e))return!1;try{return(0,Eie.parse)(e),!0}catch(t){}return!1}dr.isDocumentString=Iie;var gie=/[‘“!%^<>`]/;function _ie(e){return typeof e=="string"&&!gie.test(e)}dr.isValidPath=_ie;function zk(e,t){return String(e)String(t)?1:0}dr.compareStrings=zk;function Zv(e){var n,r;let t;return"alias"in e&&(t=(n=e.alias)==null?void 0:n.value),t==null&&"name"in e&&(t=(r=e.name)==null?void 0:r.value),t==null&&(t=e.kind),t}dr.nodeToString=Zv;function vie(e,t,n){let r=Zv(e),i=Zv(t);return typeof n=="function"?n(r,i):zk(r,i)}dr.compareNodes=vie;function Sie(e){return e!=null}dr.isSome=Sie;function Oie(e,t="Value should be something"){if(e==null)throw new Error(t)}dr.assertSome=Oie});var lp=w(GN=>{"use strict";f();N();m();Object.defineProperty(GN,"__esModule",{value:!0});GN.inspect=void 0;var Zk=3;function Die(e){return KN(e,[])}GN.inspect=Die;function KN(e,t){switch(typeof e){case"string":return JSON.stringify(e);case"function":return e.name?`[function ${e.name}]`:"[function]";case"object":return bie(e,t);default:return String(e)}}function Wk(e){return(e.name="GraphQLError")?e.toString():`${e.name}: ${e.message}; + ${e.stack}`}function bie(e,t){if(e===null)return"null";if(e instanceof Error)return e.name==="AggregateError"?Wk(e)+` +`+Xk(e.errors,t):Wk(e);if(t.includes(e))return"[Circular]";let n=[...t,e];if(Aie(e)){let r=e.toJSON();if(r!==e)return typeof r=="string"?r:KN(r,n)}else if(Array.isArray(e))return Xk(e,n);return Rie(e,n)}function Aie(e){return typeof e.toJSON=="function"}function Rie(e,t){let n=Object.entries(e);return n.length===0?"{}":t.length>Zk?"["+Fie(e)+"]":"{ "+n.map(([i,a])=>i+": "+KN(a,t)).join(", ")+" }"}function Xk(e,t){if(e.length===0)return"[]";if(t.length>Zk)return"[Array]";let n=e.length,r=[];for(let i=0;i{"use strict";f();N();m();Object.defineProperty(ul,"__esModule",{value:!0});ul.relocatedError=ul.createGraphQLError=void 0;var eS=Ae(),Pie=["message","locations","path","nodes","source","positions","originalError","name","stack","extensions"];function wie(e){return e!=null&&typeof e=="object"&&Object.keys(e).every(t=>Pie.includes(t))}function tS(e,t){return t!=null&&t.originalError&&!(t.originalError instanceof Error)&&wie(t.originalError)&&(t.originalError=tS(t.originalError.message,t.originalError)),eS.versionInfo.major>=17?new eS.GraphQLError(e,t):new eS.GraphQLError(e,t==null?void 0:t.nodes,t==null?void 0:t.source,t==null?void 0:t.positions,t==null?void 0:t.path,t==null?void 0:t.originalError,t==null?void 0:t.extensions)}ul.createGraphQLError=tS;function Lie(e,t){return tS(e.message,{nodes:e.nodes,source:e.source,positions:e.positions,path:t==null?e.path:t,originalError:e,extensions:e.extensions})}ul.relocatedError=Lie});var dp=w(Mi=>{"use strict";f();N();m();Object.defineProperty(Mi,"__esModule",{value:!0});Mi.hasOwnProperty=Mi.promiseReduce=Mi.isPromise=Mi.isObjectLike=Mi.isIterableObject=void 0;function Cie(e){return e!=null&&typeof e=="object"&&Symbol.iterator in e}Mi.isIterableObject=Cie;function Bie(e){return typeof e=="object"&&e!==null}Mi.isObjectLike=Bie;function eM(e){return(e==null?void 0:e.then)!=null}Mi.isPromise=eM;function Uie(e,t,n){let r=n;for(let i of e)r=eM(r)?r.then(a=>t(a,i)):t(r,i);return r}Mi.promiseReduce=Uie;function kie(e,t){return Object.prototype.hasOwnProperty.call(e,t)}Mi.hasOwnProperty=kie});var rS=w(YN=>{"use strict";f();N();m();Object.defineProperty(YN,"__esModule",{value:!0});YN.getArgumentValues=void 0;var nS=lp(),Yu=Ae(),QN=$N(),Mie=dp();function xie(e,t,n={}){var o;let r={},a=((o=t.arguments)!=null?o:[]).reduce((c,l)=>Q(M({},c),{[l.name.value]:l}),{});for(let{name:c,type:l,defaultValue:p}of e.args){let T=a[c];if(!T){if(p!==void 0)r[c]=p;else if((0,Yu.isNonNullType)(l))throw(0,QN.createGraphQLError)(`Argument "${c}" of required type "${(0,nS.inspect)(l)}" was not provided.`,{nodes:[t]});continue}let y=T.value,g=y.kind===Yu.Kind.NULL;if(y.kind===Yu.Kind.VARIABLE){let F=y.name.value;if(n==null||!(0,Mie.hasOwnProperty)(n,F)){if(p!==void 0)r[c]=p;else if((0,Yu.isNonNullType)(l))throw(0,QN.createGraphQLError)(`Argument "${c}" of required type "${(0,nS.inspect)(l)}" was provided the variable "$${F}" which was not provided a runtime value.`,{nodes:[y]});continue}g=n[F]==null}if(g&&(0,Yu.isNonNullType)(l))throw(0,QN.createGraphQLError)(`Argument "${c}" of non-null type "${(0,nS.inspect)(l)}" must not be null.`,{nodes:[y]});let _=(0,Yu.valueFromAST)(y,l,n);if(_===void 0)throw(0,QN.createGraphQLError)(`Argument "${c}" has invalid value ${(0,Yu.print)(y)}.`,{nodes:[y]});r[c]=_}return r}YN.getArgumentValues=xie});var iS=w(Ua=>{"use strict";f();N();m();Object.defineProperty(Ua,"__esModule",{value:!0});Ua.getDirective=Ua.getDirectives=Ua.getDirectiveInExtensions=Ua.getDirectivesInExtensions=void 0;var nM=rS();function rM(e,t=["directives"]){return t.reduce((n,r)=>n==null?n:n[r],e==null?void 0:e.extensions)}Ua.getDirectivesInExtensions=rM;function tM(e,t){let n=e.filter(r=>r.name===t);if(n.length)return n.map(r=>{var i;return(i=r.args)!=null?i:{}})}function iM(e,t,n=["directives"]){let r=n.reduce((a,o)=>a==null?a:a[o],e==null?void 0:e.extensions);if(r===void 0)return;if(Array.isArray(r))return tM(r,t);let i=[];for(let[a,o]of Object.entries(r))if(Array.isArray(o))for(let c of o)i.push({name:a,args:c});else i.push({name:a,args:o});return tM(i,t)}Ua.getDirectiveInExtensions=iM;function qie(e,t,n=["directives"]){let r=rM(t,n);if(r!=null&&r.length>0)return r;let a=(e&&e.getDirectives?e.getDirectives():[]).reduce((l,p)=>(l[p.name]=p,l),{}),o=[];t.astNode&&o.push(t.astNode),"extensionASTNodes"in t&&t.extensionASTNodes&&(o=[...o,...t.extensionASTNodes]);let c=[];for(let l of o)if(l.directives)for(let p of l.directives){let T=a[p.name.value];T&&c.push({name:p.name.value,args:(0,nM.getArgumentValues)(T,p)})}return c}Ua.getDirectives=qie;function Vie(e,t,n,r=["directives"]){let i=iM(t,n,r);if(i!=null)return i;let a=e&&e.getDirective?e.getDirective(n):void 0;if(a==null)return;let o=[];t.astNode&&o.push(t.astNode),"extensionASTNodes"in t&&t.extensionASTNodes&&(o=[...o,...t.extensionASTNodes]);let c=[];for(let l of o)if(l.directives)for(let p of l.directives)p.name.value===n&&c.push((0,nM.getArgumentValues)(a,p));if(c.length)return c}Ua.getDirective=Vie});var aS=w(JN=>{"use strict";f();N();m();Object.defineProperty(JN,"__esModule",{value:!0});JN.getFieldsWithDirectives=void 0;var jie=Ae();function Kie(e,t={}){let n={},r=["ObjectTypeDefinition","ObjectTypeExtension"];t.includeInputTypes&&(r=[...r,"InputObjectTypeDefinition","InputObjectTypeExtension"]);let i=e.definitions.filter(a=>r.includes(a.kind));for(let a of i){let o=a.name.value;if(a.fields!=null){for(let c of a.fields)if(c.directives&&c.directives.length>0){let l=c.name.value,p=`${o}.${l}`,T=c.directives.map(y=>({name:y.name.value,args:(y.arguments||[]).reduce((g,_)=>Q(M({},g),{[_.name.value]:(0,jie.valueFromASTUntyped)(_.value)}),{})}));n[p]=T}}}return n}JN.getFieldsWithDirectives=Kie});var aM=w(HN=>{"use strict";f();N();m();Object.defineProperty(HN,"__esModule",{value:!0});HN.getArgumentsWithDirectives=void 0;var sS=Ae();function Gie(e){return e.kind===sS.Kind.OBJECT_TYPE_DEFINITION||e.kind===sS.Kind.OBJECT_TYPE_EXTENSION}function $ie(e){var r;let t={},n=e.definitions.filter(Gie);for(let i of n)if(i.fields!=null)for(let a of i.fields){let o=(r=a.arguments)==null?void 0:r.filter(l=>{var p;return(p=l.directives)==null?void 0:p.length});if(!(o!=null&&o.length))continue;let c=t[`${i.name.value}.${a.name.value}`]={};for(let l of o){let p=l.directives.map(T=>({name:T.name.value,args:(T.arguments||[]).reduce((y,g)=>Q(M({},y),{[g.name.value]:(0,sS.valueFromASTUntyped)(g.value)}),{})}));c[l.name.value]=p}}return t}HN.getArgumentsWithDirectives=$ie});var oS=w(zN=>{"use strict";f();N();m();Object.defineProperty(zN,"__esModule",{value:!0});zN.getImplementingTypes=void 0;var Qie=Ae();function Yie(e,t){let n=t.getTypeMap(),r=[];for(let i in n){let a=n[i];(0,Qie.isObjectType)(a)&&a.getInterfaces().find(c=>c.name===e)&&r.push(a.name)}return r}zN.getImplementingTypes=Yie});var cS=w(WN=>{"use strict";f();N();m();Object.defineProperty(WN,"__esModule",{value:!0});WN.astFromType=void 0;var Jie=lp(),Ju=Ae();function uS(e){if((0,Ju.isNonNullType)(e)){let t=uS(e.ofType);if(t.kind===Ju.Kind.NON_NULL_TYPE)throw new Error(`Invalid type node ${(0,Jie.inspect)(e)}. Inner type of non-null type cannot be a non-null type.`);return{kind:Ju.Kind.NON_NULL_TYPE,type:t}}else if((0,Ju.isListType)(e))return{kind:Ju.Kind.LIST_TYPE,type:uS(e.ofType)};return{kind:Ju.Kind.NAMED_TYPE,name:{kind:Ju.Kind.NAME,value:e.name}}}WN.astFromType=uS});var ZN=w(XN=>{"use strict";f();N();m();Object.defineProperty(XN,"__esModule",{value:!0});XN.astFromValueUntyped=void 0;var ka=Ae();function lS(e){if(e===null)return{kind:ka.Kind.NULL};if(e===void 0)return null;if(Array.isArray(e)){let t=[];for(let n of e){let r=lS(n);r!=null&&t.push(r)}return{kind:ka.Kind.LIST,values:t}}if(typeof e=="object"){let t=[];for(let n in e){let r=e[n],i=lS(r);i&&t.push({kind:ka.Kind.OBJECT_FIELD,name:{kind:ka.Kind.NAME,value:n},value:i})}return{kind:ka.Kind.OBJECT,fields:t}}if(typeof e=="boolean")return{kind:ka.Kind.BOOLEAN,value:e};if(typeof e=="bigint")return{kind:ka.Kind.INT,value:String(e)};if(typeof e=="number"&&isFinite(e)){let t=String(e);return Hie.test(t)?{kind:ka.Kind.INT,value:t}:{kind:ka.Kind.FLOAT,value:t}}if(typeof e=="string")return{kind:ka.Kind.STRING,value:e};throw new TypeError(`Cannot convert value to AST: ${e}.`)}XN.astFromValueUntyped=lS;var Hie=/^-?(?:0|[1-9][0-9]*)$/});var oM=w(eT=>{"use strict";f();N();m();Object.defineProperty(eT,"__esModule",{value:!0});eT.astFromValue=void 0;var zie=lp(),mi=Ae(),Wie=ZN(),sM=dp();function pp(e,t){if((0,mi.isNonNullType)(t)){let n=pp(e,t.ofType);return(n==null?void 0:n.kind)===mi.Kind.NULL?null:n}if(e===null)return{kind:mi.Kind.NULL};if(e===void 0)return null;if((0,mi.isListType)(t)){let n=t.ofType;if((0,sM.isIterableObject)(e)){let r=[];for(let i of e){let a=pp(i,n);a!=null&&r.push(a)}return{kind:mi.Kind.LIST,values:r}}return pp(e,n)}if((0,mi.isInputObjectType)(t)){if(!(0,sM.isObjectLike)(e))return null;let n=[];for(let r of Object.values(t.getFields())){let i=pp(e[r.name],r.type);i&&n.push({kind:mi.Kind.OBJECT_FIELD,name:{kind:mi.Kind.NAME,value:r.name},value:i})}return{kind:mi.Kind.OBJECT,fields:n}}if((0,mi.isLeafType)(t)){let n=t.serialize(e);return n==null?null:(0,mi.isEnumType)(t)?{kind:mi.Kind.ENUM,value:n}:t.name==="ID"&&typeof n=="string"&&Xie.test(n)?{kind:mi.Kind.INT,value:n}:(0,Wie.astFromValueUntyped)(n)}console.assert(!1,"Unexpected input type: "+(0,zie.inspect)(t))}eT.astFromValue=pp;var Xie=/^-?(?:0|[1-9][0-9]*)$/});var uM=w(tT=>{"use strict";f();N();m();Object.defineProperty(tT,"__esModule",{value:!0});tT.getDescriptionNode=void 0;var Zie=Ae();function eae(e){var t;if((t=e.astNode)!=null&&t.description)return Q(M({},e.astNode.description),{block:!0});if(e.description)return{kind:Zie.Kind.STRING,value:e.description,block:!0}}tT.getDescriptionNode=eae});var cl=w(Dr=>{"use strict";f();N();m();Object.defineProperty(Dr,"__esModule",{value:!0});Dr.memoize2of5=Dr.memoize2of4=Dr.memoize5=Dr.memoize4=Dr.memoize3=Dr.memoize2=Dr.memoize1=void 0;function tae(e){let t=new WeakMap;return function(r){let i=t.get(r);if(i===void 0){let a=e(r);return t.set(r,a),a}return i}}Dr.memoize1=tae;function nae(e){let t=new WeakMap;return function(r,i){let a=t.get(r);if(!a){a=new WeakMap,t.set(r,a);let c=e(r,i);return a.set(i,c),c}let o=a.get(i);if(o===void 0){let c=e(r,i);return a.set(i,c),c}return o}}Dr.memoize2=nae;function rae(e){let t=new WeakMap;return function(r,i,a){let o=t.get(r);if(!o){o=new WeakMap,t.set(r,o);let p=new WeakMap;o.set(i,p);let T=e(r,i,a);return p.set(a,T),T}let c=o.get(i);if(!c){c=new WeakMap,o.set(i,c);let p=e(r,i,a);return c.set(a,p),p}let l=c.get(a);if(l===void 0){let p=e(r,i,a);return c.set(a,p),p}return l}}Dr.memoize3=rae;function iae(e){let t=new WeakMap;return function(r,i,a,o){let c=t.get(r);if(!c){c=new WeakMap,t.set(r,c);let y=new WeakMap;c.set(i,y);let g=new WeakMap;y.set(a,g);let _=e(r,i,a,o);return g.set(o,_),_}let l=c.get(i);if(!l){l=new WeakMap,c.set(i,l);let y=new WeakMap;l.set(a,y);let g=e(r,i,a,o);return y.set(o,g),g}let p=l.get(a);if(!p){let y=new WeakMap;l.set(a,y);let g=e(r,i,a,o);return y.set(o,g),g}let T=p.get(o);if(T===void 0){let y=e(r,i,a,o);return p.set(o,y),y}return T}}Dr.memoize4=iae;function aae(e){let t=new WeakMap;return function(r,i,a,o,c){let l=t.get(r);if(!l){l=new WeakMap,t.set(r,l);let _=new WeakMap;l.set(i,_);let F=new WeakMap;_.set(a,F);let U=new WeakMap;F.set(o,U);let K=e(r,i,a,o,c);return U.set(c,K),K}let p=l.get(i);if(!p){p=new WeakMap,l.set(i,p);let _=new WeakMap;p.set(a,_);let F=new WeakMap;_.set(o,F);let U=e(r,i,a,o,c);return F.set(c,U),U}let T=p.get(a);if(!T){T=new WeakMap,p.set(a,T);let _=new WeakMap;T.set(o,_);let F=e(r,i,a,o,c);return _.set(c,F),F}let y=T.get(o);if(!y){y=new WeakMap,T.set(o,y);let _=e(r,i,a,o,c);return y.set(c,_),_}let g=y.get(c);if(g===void 0){let _=e(r,i,a,o,c);return y.set(c,_),_}return g}}Dr.memoize5=aae;function sae(e){let t=new WeakMap;return function(r,i,a,o){let c=t.get(r);if(!c){c=new WeakMap,t.set(r,c);let p=e(r,i,a,o);return c.set(i,p),p}let l=c.get(i);if(l===void 0){let p=e(r,i,a,o);return c.set(i,p),p}return l}}Dr.memoize2of4=sae;function oae(e){let t=new WeakMap;return function(r,i,a,o,c){let l=t.get(r);if(!l){l=new WeakMap,t.set(r,l);let T=e(r,i,a,o,c);return l.set(i,T),T}let p=l.get(i);if(p===void 0){let T=e(r,i,a,o,c);return l.set(i,T),T}return p}}Dr.memoize2of5=oae});var fp=w(Ni=>{"use strict";f();N();m();Object.defineProperty(Ni,"__esModule",{value:!0});Ni.getRootTypeMap=Ni.getRootTypes=Ni.getRootTypeNames=Ni.getDefinedRootType=void 0;var uae=$N(),dS=cl();function cae(e,t,n){let i=(0,Ni.getRootTypeMap)(e).get(t);if(i==null)throw(0,uae.createGraphQLError)(`Schema is not configured to execute ${t} operation.`,{nodes:n});return i}Ni.getDefinedRootType=cae;Ni.getRootTypeNames=(0,dS.memoize1)(function(t){let n=(0,Ni.getRootTypes)(t);return new Set([...n].map(r=>r.name))});Ni.getRootTypes=(0,dS.memoize1)(function(t){let n=(0,Ni.getRootTypeMap)(t);return new Set(n.values())});Ni.getRootTypeMap=(0,dS.memoize1)(function(t){let n=new Map,r=t.getQueryType();r&&n.set("query",r);let i=t.getMutationType();i&&n.set("mutation",i);let a=t.getSubscriptionType();return a&&n.set("subscription",a),n})});var TS=w(ht=>{"use strict";f();N();m();Object.defineProperty(ht,"__esModule",{value:!0});ht.makeDirectiveNodes=ht.makeDirectiveNode=ht.makeDeprecatedDirective=ht.astFromEnumValue=ht.astFromInputField=ht.astFromField=ht.astFromScalarType=ht.astFromEnumType=ht.astFromInputObjectType=ht.astFromUnionType=ht.astFromInterfaceType=ht.astFromObjectType=ht.astFromArg=ht.getDeprecatableDirectiveNodes=ht.getDirectiveNodes=ht.astFromDirective=ht.astFromSchema=ht.printSchemaWithDirectives=ht.getDocumentNodeFromSchema=void 0;var ut=Ae(),Hu=cS(),pS=oM(),lae=ZN(),xi=uM(),fS=iS(),dae=cp(),pae=fp();function cM(e,t={}){let n=t.pathToDirectivesInExtensions,r=e.getTypeMap(),i=lM(e,n),a=i!=null?[i]:[],o=e.getDirectives();for(let c of o)(0,ut.isSpecifiedDirective)(c)||a.push(dM(c,e,n));for(let c in r){let l=r[c],p=(0,ut.isSpecifiedScalarType)(l),T=(0,ut.isIntrospectionType)(l);if(!(p||T))if((0,ut.isObjectType)(l))a.push(pM(l,e,n));else if((0,ut.isInterfaceType)(l))a.push(fM(l,e,n));else if((0,ut.isUnionType)(l))a.push(mM(l,e,n));else if((0,ut.isInputObjectType)(l))a.push(NM(l,e,n));else if((0,ut.isEnumType)(l))a.push(TM(l,e,n));else if((0,ut.isScalarType)(l))a.push(EM(l,e,n));else throw new Error(`Unknown type ${l}.`)}return{kind:ut.Kind.DOCUMENT,definitions:a}}ht.getDocumentNodeFromSchema=cM;function fae(e,t={}){let n=cM(e,t);return(0,ut.print)(n)}ht.printSchemaWithDirectives=fae;function lM(e,t){let n=new Map([["query",void 0],["mutation",void 0],["subscription",void 0]]),r=[];if(e.astNode!=null&&r.push(e.astNode),e.extensionASTNodes!=null)for(let p of e.extensionASTNodes)r.push(p);for(let p of r)if(p.operationTypes)for(let T of p.operationTypes)n.set(T.operation,T);let i=(0,pae.getRootTypeMap)(e);for(let[p,T]of n){let y=i.get(p);if(y!=null){let g=(0,Hu.astFromType)(y);T!=null?T.type=g:n.set(p,{kind:ut.Kind.OPERATION_TYPE_DEFINITION,operation:p,type:g})}}let a=[...n.values()].filter(dae.isSome),o=zu(e,e,t);if(!a.length&&!o.length)return null;let c={kind:a!=null?ut.Kind.SCHEMA_DEFINITION:ut.Kind.SCHEMA_EXTENSION,operationTypes:a,directives:o},l=(0,xi.getDescriptionNode)(e);return l&&(c.description=l),c}ht.astFromSchema=lM;function dM(e,t,n){var r,i;return{kind:ut.Kind.DIRECTIVE_DEFINITION,description:(0,xi.getDescriptionNode)(e),name:{kind:ut.Kind.NAME,value:e.name},arguments:(r=e.args)==null?void 0:r.map(a=>mS(a,t,n)),repeatable:e.isRepeatable,locations:((i=e.locations)==null?void 0:i.map(a=>({kind:ut.Kind.NAME,value:a})))||[]}}ht.astFromDirective=dM;function zu(e,t,n){let r=(0,fS.getDirectivesInExtensions)(e,n),i=[];e.astNode!=null&&i.push(e.astNode),"extensionASTNodes"in e&&e.extensionASTNodes!=null&&(i=i.concat(e.extensionASTNodes));let a;if(r!=null)a=nT(t,r);else{a=[];for(let o of i)o.directives&&a.push(...o.directives)}return a}ht.getDirectiveNodes=zu;function Np(e,t,n){var c,l;let r=[],i=null,a=(0,fS.getDirectivesInExtensions)(e,n),o;return a!=null?o=nT(t,a):o=(c=e.astNode)==null?void 0:c.directives,o!=null&&(r=o.filter(p=>p.name.value!=="deprecated"),e.deprecationReason!=null&&(i=(l=o.filter(p=>p.name.value==="deprecated"))==null?void 0:l[0])),e.deprecationReason!=null&&i==null&&(i=IM(e.deprecationReason)),i==null?r:[i].concat(r)}ht.getDeprecatableDirectiveNodes=Np;function mS(e,t,n){var r;return{kind:ut.Kind.INPUT_VALUE_DEFINITION,description:(0,xi.getDescriptionNode)(e),name:{kind:ut.Kind.NAME,value:e.name},type:(0,Hu.astFromType)(e.type),defaultValue:e.defaultValue!==void 0&&(r=(0,pS.astFromValue)(e.defaultValue,e.type))!=null?r:void 0,directives:Np(e,t,n)}}ht.astFromArg=mS;function pM(e,t,n){return{kind:ut.Kind.OBJECT_TYPE_DEFINITION,description:(0,xi.getDescriptionNode)(e),name:{kind:ut.Kind.NAME,value:e.name},fields:Object.values(e.getFields()).map(r=>NS(r,t,n)),interfaces:Object.values(e.getInterfaces()).map(r=>(0,Hu.astFromType)(r)),directives:zu(e,t,n)}}ht.astFromObjectType=pM;function fM(e,t,n){let r={kind:ut.Kind.INTERFACE_TYPE_DEFINITION,description:(0,xi.getDescriptionNode)(e),name:{kind:ut.Kind.NAME,value:e.name},fields:Object.values(e.getFields()).map(i=>NS(i,t,n)),directives:zu(e,t,n)};return"getInterfaces"in e&&(r.interfaces=Object.values(e.getInterfaces()).map(i=>(0,Hu.astFromType)(i))),r}ht.astFromInterfaceType=fM;function mM(e,t,n){return{kind:ut.Kind.UNION_TYPE_DEFINITION,description:(0,xi.getDescriptionNode)(e),name:{kind:ut.Kind.NAME,value:e.name},directives:zu(e,t,n),types:e.getTypes().map(r=>(0,Hu.astFromType)(r))}}ht.astFromUnionType=mM;function NM(e,t,n){return{kind:ut.Kind.INPUT_OBJECT_TYPE_DEFINITION,description:(0,xi.getDescriptionNode)(e),name:{kind:ut.Kind.NAME,value:e.name},fields:Object.values(e.getFields()).map(r=>hM(r,t,n)),directives:zu(e,t,n)}}ht.astFromInputObjectType=NM;function TM(e,t,n){return{kind:ut.Kind.ENUM_TYPE_DEFINITION,description:(0,xi.getDescriptionNode)(e),name:{kind:ut.Kind.NAME,value:e.name},values:Object.values(e.getValues()).map(r=>yM(r,t,n)),directives:zu(e,t,n)}}ht.astFromEnumType=TM;function EM(e,t,n){var o;let r=(0,fS.getDirectivesInExtensions)(e,n),i=r?nT(t,r):((o=e.astNode)==null?void 0:o.directives)||[],a=e.specifiedByUrl||e.specifiedByURL;if(a&&!i.some(c=>c.name.value==="specifiedBy")){let c={url:a};i.push(mp("specifiedBy",c))}return{kind:ut.Kind.SCALAR_TYPE_DEFINITION,description:(0,xi.getDescriptionNode)(e),name:{kind:ut.Kind.NAME,value:e.name},directives:i}}ht.astFromScalarType=EM;function NS(e,t,n){return{kind:ut.Kind.FIELD_DEFINITION,description:(0,xi.getDescriptionNode)(e),name:{kind:ut.Kind.NAME,value:e.name},arguments:e.args.map(r=>mS(r,t,n)),type:(0,Hu.astFromType)(e.type),directives:Np(e,t,n)}}ht.astFromField=NS;function hM(e,t,n){var r;return{kind:ut.Kind.INPUT_VALUE_DEFINITION,description:(0,xi.getDescriptionNode)(e),name:{kind:ut.Kind.NAME,value:e.name},type:(0,Hu.astFromType)(e.type),directives:Np(e,t,n),defaultValue:(r=(0,pS.astFromValue)(e.defaultValue,e.type))!=null?r:void 0}}ht.astFromInputField=hM;function yM(e,t,n){return{kind:ut.Kind.ENUM_VALUE_DEFINITION,description:(0,xi.getDescriptionNode)(e),name:{kind:ut.Kind.NAME,value:e.name},directives:Np(e,t,n)}}ht.astFromEnumValue=yM;function IM(e){return mp("deprecated",{reason:e},ut.GraphQLDeprecatedDirective)}ht.makeDeprecatedDirective=IM;function mp(e,t,n){let r=[];if(n!=null)for(let i of n.args){let a=i.name,o=t[a];if(o!==void 0){let c=(0,pS.astFromValue)(o,i.type);c&&r.push({kind:ut.Kind.ARGUMENT,name:{kind:ut.Kind.NAME,value:a},value:c})}}else for(let i in t){let a=t[i],o=(0,lae.astFromValueUntyped)(a);o&&r.push({kind:ut.Kind.ARGUMENT,name:{kind:ut.Kind.NAME,value:i},value:o})}return{kind:ut.Kind.DIRECTIVE,name:{kind:ut.Kind.NAME,value:e},arguments:r}}ht.makeDirectiveNode=mp;function nT(e,t){let n=[];for(let r in t){let i=t[r],a=e==null?void 0:e.getDirective(r);if(Array.isArray(i))for(let o of i)n.push(mp(r,o,a));else n.push(mp(r,i,a))}return n}ht.makeDirectiveNodes=nT});var _M=w(ll=>{"use strict";f();N();m();Object.defineProperty(ll,"__esModule",{value:!0});ll.createDefaultRules=ll.validateGraphQlDocuments=void 0;var Tp=Ae();function mae(e,t,n=gM()){var c;let r=new Set,i=new Map;for(let l of t)for(let p of l.definitions)p.kind===Tp.Kind.FRAGMENT_DEFINITION?i.set(p.name.value,p):r.add(p);let a={kind:Tp.Kind.DOCUMENT,definitions:Array.from([...r,...i.values()])},o=(0,Tp.validate)(e,a,n);for(let l of o)if(l.stack=l.message,l.locations)for(let p of l.locations)l.stack+=` + at ${(c=l.source)==null?void 0:c.name}:${p.line}:${p.column}`;return o}ll.validateGraphQlDocuments=mae;function gM(){let e=["NoUnusedFragmentsRule","NoUnusedVariablesRule","KnownDirectivesRule"];return Tp.versionInfo.major<15&&(e=e.map(t=>t.replace(/Rule$/,""))),Tp.specifiedRules.filter(t=>!e.includes(t.name))}ll.createDefaultRules=gM});var vM=w(rT=>{"use strict";f();N();m();Object.defineProperty(rT,"__esModule",{value:!0});rT.parseGraphQLJSON=void 0;var Nae=Ae();function Tae(e){return e=e.toString(),e.charCodeAt(0)===65279&&(e=e.slice(1)),e}function Eae(e){return JSON.parse(Tae(e))}function hae(e,t,n){let r=Eae(t);if(r.data&&(r=r.data),r.kind==="Document")return{location:e,document:r};if(r.__schema){let i=(0,Nae.buildClientSchema)(r,n);return{location:e,schema:i}}else if(typeof r=="string")return{location:e,rawSDL:r};throw new Error("Not valid JSON content")}rT.parseGraphQLJSON=hae});var hS=w(Bn=>{"use strict";f();N();m();Object.defineProperty(Bn,"__esModule",{value:!0});Bn.getBlockStringIndentation=Bn.dedentBlockStringValue=Bn.getLeadingCommentBlock=Bn.getComment=Bn.getDescription=Bn.printWithComments=Bn.printComment=Bn.pushComment=Bn.collectComment=Bn.resetComments=void 0;var bM=Ae(),yae=80,dl={};function Iae(){dl={}}Bn.resetComments=Iae;function gae(e){var n;let t=(n=e.name)==null?void 0:n.value;if(t!=null)switch(Ep(e,t),e.kind){case"EnumTypeDefinition":if(e.values)for(let r of e.values)Ep(r,t,r.name.value);break;case"ObjectTypeDefinition":case"InputObjectTypeDefinition":case"InterfaceTypeDefinition":if(e.fields){for(let r of e.fields)if(Ep(r,t,r.name.value),Dae(r)&&r.arguments)for(let i of r.arguments)Ep(i,t,r.name.value,i.name.value)}break}}Bn.collectComment=gae;function Ep(e,t,n,r){let i=ES(e);if(typeof i!="string"||i.length===0)return;let a=[t];n&&(a.push(n),r&&a.push(r));let o=a.join(".");dl[o]||(dl[o]=[]),dl[o].push(i)}Bn.pushComment=Ep;function AM(e){return` # `+e.replace(/\n/g,` -# `)}Bn.printComment=bM;function ke(e,t){return e?e.filter(n=>n).join(t||""):""}function _M(e){var t;return(t=e==null?void 0:e.some(n=>n.includes(` -`)))!=null?t:!1}function Iae(e){return(t,n,r,i,a)=>{var N;let o=[],c=i.reduce((y,g)=>(["fields","arguments","values"].includes(g)&&y.name&&o.push(y.name.value),y[g]),a[0]),l=[...o,(N=c==null?void 0:c.name)==null?void 0:N.value].filter(Boolean).join("."),p=[];return t.kind.includes("Definition")&&ll[l]&&p.push(...ll[l]),ke([...p.map(bM),t.description,e(t,n,r,i,a)],` +# `)}Bn.printComment=AM;function ke(e,t){return e?e.filter(n=>n).join(t||""):""}function SM(e){var t;return(t=e==null?void 0:e.some(n=>n.includes(` +`)))!=null?t:!1}function _ae(e){return(t,n,r,i,a)=>{var T;let o=[],c=i.reduce((y,g)=>(["fields","arguments","values"].includes(g)&&y.name&&o.push(y.name.value),y[g]),a[0]),l=[...o,(T=c==null?void 0:c.name)==null?void 0:T.value].filter(Boolean).join("."),p=[];return t.kind.includes("Definition")&&dl[l]&&p.push(...dl[l]),ke([...p.map(AM),t.description,e(t,n,r,i,a)],` `)}}function hp(e){return e&&` ${e.replace(/\n/g,` `)}`}function la(e){return e&&e.length!==0?`{ ${hp(ke(e,` `))} -}`:""}function Sn(e,t,n){return t?e+t+(n||""):""}function gae(e,t=!1){let n=e.replace(/"""/g,'\\"""');return(e[0]===" "||e[0]===" ")&&e.indexOf(` +}`:""}function On(e,t,n){return t?e+t+(n||""):""}function vae(e,t=!1){let n=e.replace(/"""/g,'\\"""');return(e[0]===" "||e[0]===" ")&&e.indexOf(` `)===-1?`"""${n.replace(/"$/,`" `)}"""`:`""" ${t?n:hp(n)} -"""`}var vM={Name:{leave:e=>e.value},Variable:{leave:e=>"$"+e.name},Document:{leave:e=>ke(e.definitions,` +"""`}var OM={Name:{leave:e=>e.value},Variable:{leave:e=>"$"+e.name},Document:{leave:e=>ke(e.definitions,` -`)},OperationDefinition:{leave:e=>{let t=Sn("(",ke(e.variableDefinitions,", "),")");return ke([e.operation,ke([e.name,t]),ke(e.directives," ")]," ")+" "+e.selectionSet}},VariableDefinition:{leave:({variable:e,type:t,defaultValue:n,directives:r})=>e+": "+t+Sn(" = ",n)+Sn(" ",ke(r," "))},SelectionSet:{leave:({selections:e})=>la(e)},Field:{leave({alias:e,name:t,arguments:n,directives:r,selectionSet:i}){let a=Sn("",e,": ")+t,o=a+Sn("(",ke(n,", "),")");return o.length>hae&&(o=a+Sn(`( +`)},OperationDefinition:{leave:e=>{let t=On("(",ke(e.variableDefinitions,", "),")");return ke([e.operation,ke([e.name,t]),ke(e.directives," ")]," ")+" "+e.selectionSet}},VariableDefinition:{leave:({variable:e,type:t,defaultValue:n,directives:r})=>e+": "+t+On(" = ",n)+On(" ",ke(r," "))},SelectionSet:{leave:({selections:e})=>la(e)},Field:{leave({alias:e,name:t,arguments:n,directives:r,selectionSet:i}){let a=On("",e,": ")+t,o=a+On("(",ke(n,", "),")");return o.length>yae&&(o=a+On(`( `,hp(ke(n,` `)),` -)`)),ke([o,ke(r," "),i]," ")}},Argument:{leave:({name:e,value:t})=>e+": "+t},FragmentSpread:{leave:({name:e,directives:t})=>"..."+e+Sn(" ",ke(t," "))},InlineFragment:{leave:({typeCondition:e,directives:t,selectionSet:n})=>ke(["...",Sn("on ",e),ke(t," "),n]," ")},FragmentDefinition:{leave:({name:e,typeCondition:t,variableDefinitions:n,directives:r,selectionSet:i})=>`fragment ${e}${Sn("(",ke(n,", "),")")} on ${t} ${Sn("",ke(r," ")," ")}`+i},IntValue:{leave:({value:e})=>e},FloatValue:{leave:({value:e})=>e},StringValue:{leave:({value:e,block:t})=>t?gae(e):JSON.stringify(e)},BooleanValue:{leave:({value:e})=>e?"true":"false"},NullValue:{leave:()=>"null"},EnumValue:{leave:({value:e})=>e},ListValue:{leave:({values:e})=>"["+ke(e,", ")+"]"},ObjectValue:{leave:({fields:e})=>"{"+ke(e,", ")+"}"},ObjectField:{leave:({name:e,value:t})=>e+": "+t},Directive:{leave:({name:e,arguments:t})=>"@"+e+Sn("(",ke(t,", "),")")},NamedType:{leave:({name:e})=>e},ListType:{leave:({type:e})=>"["+e+"]"},NonNullType:{leave:({type:e})=>e+"!"},SchemaDefinition:{leave:({directives:e,operationTypes:t})=>ke(["schema",ke(e," "),la(t)]," ")},OperationTypeDefinition:{leave:({operation:e,type:t})=>e+": "+t},ScalarTypeDefinition:{leave:({name:e,directives:t})=>ke(["scalar",e,ke(t," ")]," ")},ObjectTypeDefinition:{leave:({name:e,interfaces:t,directives:n,fields:r})=>ke(["type",e,Sn("implements ",ke(t," & ")),ke(n," "),la(r)]," ")},FieldDefinition:{leave:({name:e,arguments:t,type:n,directives:r})=>e+(_M(t)?Sn(`( +)`)),ke([o,ke(r," "),i]," ")}},Argument:{leave:({name:e,value:t})=>e+": "+t},FragmentSpread:{leave:({name:e,directives:t})=>"..."+e+On(" ",ke(t," "))},InlineFragment:{leave:({typeCondition:e,directives:t,selectionSet:n})=>ke(["...",On("on ",e),ke(t," "),n]," ")},FragmentDefinition:{leave:({name:e,typeCondition:t,variableDefinitions:n,directives:r,selectionSet:i})=>`fragment ${e}${On("(",ke(n,", "),")")} on ${t} ${On("",ke(r," ")," ")}`+i},IntValue:{leave:({value:e})=>e},FloatValue:{leave:({value:e})=>e},StringValue:{leave:({value:e,block:t})=>t?vae(e):JSON.stringify(e)},BooleanValue:{leave:({value:e})=>e?"true":"false"},NullValue:{leave:()=>"null"},EnumValue:{leave:({value:e})=>e},ListValue:{leave:({values:e})=>"["+ke(e,", ")+"]"},ObjectValue:{leave:({fields:e})=>"{"+ke(e,", ")+"}"},ObjectField:{leave:({name:e,value:t})=>e+": "+t},Directive:{leave:({name:e,arguments:t})=>"@"+e+On("(",ke(t,", "),")")},NamedType:{leave:({name:e})=>e},ListType:{leave:({type:e})=>"["+e+"]"},NonNullType:{leave:({type:e})=>e+"!"},SchemaDefinition:{leave:({directives:e,operationTypes:t})=>ke(["schema",ke(e," "),la(t)]," ")},OperationTypeDefinition:{leave:({operation:e,type:t})=>e+": "+t},ScalarTypeDefinition:{leave:({name:e,directives:t})=>ke(["scalar",e,ke(t," ")]," ")},ObjectTypeDefinition:{leave:({name:e,interfaces:t,directives:n,fields:r})=>ke(["type",e,On("implements ",ke(t," & ")),ke(n," "),la(r)]," ")},FieldDefinition:{leave:({name:e,arguments:t,type:n,directives:r})=>e+(SM(t)?On(`( `,hp(ke(t,` `)),` -)`):Sn("(",ke(t,", "),")"))+": "+n+Sn(" ",ke(r," "))},InputValueDefinition:{leave:({name:e,type:t,defaultValue:n,directives:r})=>ke([e+": "+t,Sn("= ",n),ke(r," ")]," ")},InterfaceTypeDefinition:{leave:({name:e,interfaces:t,directives:n,fields:r})=>ke(["interface",e,Sn("implements ",ke(t," & ")),ke(n," "),la(r)]," ")},UnionTypeDefinition:{leave:({name:e,directives:t,types:n})=>ke(["union",e,ke(t," "),Sn("= ",ke(n," | "))]," ")},EnumTypeDefinition:{leave:({name:e,directives:t,values:n})=>ke(["enum",e,ke(t," "),la(n)]," ")},EnumValueDefinition:{leave:({name:e,directives:t})=>ke([e,ke(t," ")]," ")},InputObjectTypeDefinition:{leave:({name:e,directives:t,fields:n})=>ke(["input",e,ke(t," "),la(n)]," ")},DirectiveDefinition:{leave:({name:e,arguments:t,repeatable:n,locations:r})=>"directive @"+e+(_M(t)?Sn(`( +)`):On("(",ke(t,", "),")"))+": "+n+On(" ",ke(r," "))},InputValueDefinition:{leave:({name:e,type:t,defaultValue:n,directives:r})=>ke([e+": "+t,On("= ",n),ke(r," ")]," ")},InterfaceTypeDefinition:{leave:({name:e,interfaces:t,directives:n,fields:r})=>ke(["interface",e,On("implements ",ke(t," & ")),ke(n," "),la(r)]," ")},UnionTypeDefinition:{leave:({name:e,directives:t,types:n})=>ke(["union",e,ke(t," "),On("= ",ke(n," | "))]," ")},EnumTypeDefinition:{leave:({name:e,directives:t,values:n})=>ke(["enum",e,ke(t," "),la(n)]," ")},EnumValueDefinition:{leave:({name:e,directives:t})=>ke([e,ke(t," ")]," ")},InputObjectTypeDefinition:{leave:({name:e,directives:t,fields:n})=>ke(["input",e,ke(t," "),la(n)]," ")},DirectiveDefinition:{leave:({name:e,arguments:t,repeatable:n,locations:r})=>"directive @"+e+(SM(t)?On(`( `,hp(ke(t,` `)),` -)`):Sn("(",ke(t,", "),")"))+(n?" repeatable":"")+" on "+ke(r," | ")},SchemaExtension:{leave:({directives:e,operationTypes:t})=>ke(["extend schema",ke(e," "),la(t)]," ")},ScalarTypeExtension:{leave:({name:e,directives:t})=>ke(["extend scalar",e,ke(t," ")]," ")},ObjectTypeExtension:{leave:({name:e,interfaces:t,directives:n,fields:r})=>ke(["extend type",e,Sn("implements ",ke(t," & ")),ke(n," "),la(r)]," ")},InterfaceTypeExtension:{leave:({name:e,interfaces:t,directives:n,fields:r})=>ke(["extend interface",e,Sn("implements ",ke(t," & ")),ke(n," "),la(r)]," ")},UnionTypeExtension:{leave:({name:e,directives:t,types:n})=>ke(["extend union",e,ke(t," "),Sn("= ",ke(n," | "))]," ")},EnumTypeExtension:{leave:({name:e,directives:t,values:n})=>ke(["extend enum",e,ke(t," "),la(n)]," ")},InputObjectTypeExtension:{leave:({name:e,directives:t,fields:n})=>ke(["extend input",e,ke(t," "),la(n)]," ")}},_ae=Object.keys(vM).reduce((e,t)=>Q(k({},e),{[t]:{leave:Iae(vM[t].leave)}}),{});function vae(e){return(0,OM.visit)(e,_ae)}Bn.printWithComments=vae;function Sae(e){return e.kind==="FieldDefinition"}function Oae(e,t){if(e.description!=null)return e.description.value;if(t!=null&&t.commentDescriptions)return NS(e)}Bn.getDescription=Oae;function NS(e){let t=DM(e);if(t!==void 0)return AM(` -${t}`)}Bn.getComment=NS;function DM(e){let t=e.loc;if(!t)return;let n=[],r=t.startToken.prev;for(;r!=null&&r.kind===OM.TokenKind.COMMENT&&r.next!=null&&r.prev!=null&&r.line+1===r.next.line&&r.line!==r.prev.line;){let i=String(r.value);n.push(i),r=r.prev}return n.length>0?n.reverse().join(` -`):void 0}Bn.getLeadingCommentBlock=DM;function AM(e){let t=e.split(/\r\n|[\n\r]/g),n=RM(t);if(n!==0)for(let r=1;r0&&SM(t[0]);)t.shift();for(;t.length>0&&SM(t[t.length-1]);)t.pop();return t.join(` -`)}Bn.dedentBlockStringValue=AM;function RM(e){let t=null;for(let n=1;n{"use strict";f();T();m();Object.defineProperty(zo,"__esModule",{value:!0});zo.isDescribable=zo.transformCommentsToDescriptions=zo.parseGraphQLSDL=void 0;var xi=Ae(),PM=hS();function bae(e,t,n={}){let r;try{n.commentDescriptions&&t.includes("#")?(r=wM(t,n),n.noLocation&&(r=(0,xi.parse)((0,xi.print)(r),n))):r=(0,xi.parse)(new xi.Source(t,e),n)}catch(i){if(i.message.includes("EOF")&&t.replace(/(\#[^*]*)/g,"").trim()==="")r={kind:xi.Kind.DOCUMENT,definitions:[]};else throw i}return{location:e,document:r}}zo.parseGraphQLSDL=bae;function wM(e,t={}){let n=(0,xi.parse)(e,Q(k({},t),{noLocation:!1}));return(0,xi.visit)(n,{leave:i=>{if(LM(i)){let a=(0,PM.getLeadingCommentBlock)(i);if(a!==void 0){let o=(0,PM.dedentBlockStringValue)(` +)`):On("(",ke(t,", "),")"))+(n?" repeatable":"")+" on "+ke(r," | ")},SchemaExtension:{leave:({directives:e,operationTypes:t})=>ke(["extend schema",ke(e," "),la(t)]," ")},ScalarTypeExtension:{leave:({name:e,directives:t})=>ke(["extend scalar",e,ke(t," ")]," ")},ObjectTypeExtension:{leave:({name:e,interfaces:t,directives:n,fields:r})=>ke(["extend type",e,On("implements ",ke(t," & ")),ke(n," "),la(r)]," ")},InterfaceTypeExtension:{leave:({name:e,interfaces:t,directives:n,fields:r})=>ke(["extend interface",e,On("implements ",ke(t," & ")),ke(n," "),la(r)]," ")},UnionTypeExtension:{leave:({name:e,directives:t,types:n})=>ke(["extend union",e,ke(t," "),On("= ",ke(n," | "))]," ")},EnumTypeExtension:{leave:({name:e,directives:t,values:n})=>ke(["extend enum",e,ke(t," "),la(n)]," ")},InputObjectTypeExtension:{leave:({name:e,directives:t,fields:n})=>ke(["extend input",e,ke(t," "),la(n)]," ")}},Sae=Object.keys(OM).reduce((e,t)=>Q(M({},e),{[t]:{leave:_ae(OM[t].leave)}}),{});function Oae(e){return(0,bM.visit)(e,Sae)}Bn.printWithComments=Oae;function Dae(e){return e.kind==="FieldDefinition"}function bae(e,t){if(e.description!=null)return e.description.value;if(t!=null&&t.commentDescriptions)return ES(e)}Bn.getDescription=bae;function ES(e){let t=RM(e);if(t!==void 0)return FM(` +${t}`)}Bn.getComment=ES;function RM(e){let t=e.loc;if(!t)return;let n=[],r=t.startToken.prev;for(;r!=null&&r.kind===bM.TokenKind.COMMENT&&r.next!=null&&r.prev!=null&&r.line+1===r.next.line&&r.line!==r.prev.line;){let i=String(r.value);n.push(i),r=r.prev}return n.length>0?n.reverse().join(` +`):void 0}Bn.getLeadingCommentBlock=RM;function FM(e){let t=e.split(/\r\n|[\n\r]/g),n=PM(t);if(n!==0)for(let r=1;r0&&DM(t[0]);)t.shift();for(;t.length>0&&DM(t[t.length-1]);)t.pop();return t.join(` +`)}Bn.dedentBlockStringValue=FM;function PM(e){let t=null;for(let n=1;n{"use strict";f();N();m();Object.defineProperty(Wo,"__esModule",{value:!0});Wo.isDescribable=Wo.transformCommentsToDescriptions=Wo.parseGraphQLSDL=void 0;var qi=Ae(),LM=hS();function Aae(e,t,n={}){let r;try{n.commentDescriptions&&t.includes("#")?(r=CM(t,n),n.noLocation&&(r=(0,qi.parse)((0,qi.print)(r),n))):r=(0,qi.parse)(new qi.Source(t,e),n)}catch(i){if(i.message.includes("EOF")&&t.replace(/(\#[^*]*)/g,"").trim()==="")r={kind:qi.Kind.DOCUMENT,definitions:[]};else throw i}return{location:e,document:r}}Wo.parseGraphQLSDL=Aae;function CM(e,t={}){let n=(0,qi.parse)(e,Q(M({},t),{noLocation:!1}));return(0,qi.visit)(n,{leave:i=>{if(BM(i)){let a=(0,LM.getLeadingCommentBlock)(i);if(a!==void 0){let o=(0,LM.dedentBlockStringValue)(` `+a),c=o.includes(` -`);return i.description?Q(k({},i),{description:Q(k({},i.description),{value:i.description.value+` -`+o,block:!0})}):Q(k({},i),{description:{kind:xi.Kind.STRING,value:o,block:c}})}}}})}zo.transformCommentsToDescriptions=wM;function LM(e){return(0,xi.isTypeSystemDefinitionNode)(e)||e.kind===xi.Kind.FIELD_DEFINITION||e.kind===xi.Kind.INPUT_VALUE_DEFINITION||e.kind===xi.Kind.ENUM_VALUE_DEFINITION}zo.isDescribable=LM});var jM=P(iN=>{"use strict";f();T();m();Object.defineProperty(iN,"__esModule",{value:!0});iN.buildOperationNodeForField=void 0;var ut=Ae(),MM=pp(),IS=[],rN=new Map;function xM(e){IS.push(e)}function BM(){IS=[]}function UM(){rN=new Map}function Dae({schema:e,kind:t,field:n,models:r,ignore:i=[],depthLimit:a,circularReferenceDepth:o,argNames:c,selectedFields:l=!0}){BM(),UM();let p=(0,MM.getRootTypeNames)(e),N=Aae({schema:e,fieldName:n,kind:t,models:r||[],ignore:i,depthLimit:a||1/0,circularReferenceDepth:o||1,argNames:c,selectedFields:l,rootTypeNames:p});return N.variableDefinitions=[...IS],BM(),UM(),N}iN.buildOperationNodeForField=Dae;function Aae({schema:e,fieldName:t,kind:n,models:r,ignore:i,depthLimit:a,circularReferenceDepth:o,argNames:c,selectedFields:l,rootTypeNames:p}){let N=(0,MM.getDefinedRootType)(e,n),y=N.getFields()[t],g=`${t}_${n}`;if(y.args)for(let _ of y.args){let F=_.name;(!c||c.includes(F))&&xM(qM(_,F))}return{kind:ut.Kind.OPERATION_DEFINITION,operation:n,name:{kind:ut.Kind.NAME,value:g},variableDefinitions:[],selectionSet:{kind:ut.Kind.SELECTION_SET,selections:[VM({type:N,field:y,models:r,firstCall:!0,path:[],ancestors:[],ignore:i,depthLimit:a,circularReferenceDepth:o,schema:e,depth:0,argNames:c,selectedFields:l,rootTypeNames:p})]}}}function yS({parent:e,type:t,models:n,firstCall:r,path:i,ancestors:a,ignore:o,depthLimit:c,circularReferenceDepth:l,schema:p,depth:N,argNames:y,selectedFields:g,rootTypeNames:_}){if(!(typeof g=="boolean"&&N>c)){if((0,ut.isUnionType)(t)){let F=t.getTypes();return{kind:ut.Kind.SELECTION_SET,selections:F.filter(B=>!ES([...a,B],{depth:l})).map(B=>({kind:ut.Kind.INLINE_FRAGMENT,typeCondition:{kind:ut.Kind.NAMED_TYPE,name:{kind:ut.Kind.NAME,value:B.name}},selectionSet:yS({parent:t,type:B,models:n,path:i,ancestors:a,ignore:o,depthLimit:c,circularReferenceDepth:l,schema:p,depth:N,argNames:y,selectedFields:g,rootTypeNames:_})})).filter(B=>{var j,J;return((J=(j=B==null?void 0:B.selectionSet)==null?void 0:j.selections)==null?void 0:J.length)>0})}}if((0,ut.isInterfaceType)(t)){let F=Object.values(p.getTypeMap()).filter(B=>(0,ut.isObjectType)(B)&&B.getInterfaces().includes(t));return{kind:ut.Kind.SELECTION_SET,selections:F.filter(B=>!ES([...a,B],{depth:l})).map(B=>({kind:ut.Kind.INLINE_FRAGMENT,typeCondition:{kind:ut.Kind.NAMED_TYPE,name:{kind:ut.Kind.NAME,value:B.name}},selectionSet:yS({parent:t,type:B,models:n,path:i,ancestors:a,ignore:o,depthLimit:c,circularReferenceDepth:l,schema:p,depth:N,argNames:y,selectedFields:g,rootTypeNames:_})})).filter(B=>{var j,J;return((J=(j=B==null?void 0:B.selectionSet)==null?void 0:j.selections)==null?void 0:J.length)>0})}}if((0,ut.isObjectType)(t)&&!_.has(t.name)){let F=o.includes(t.name)||o.includes(`${e.name}.${i[i.length-1]}`),B=n.includes(t.name);if(!r&&B&&!F)return{kind:ut.Kind.SELECTION_SET,selections:[{kind:ut.Kind.FIELD,name:{kind:ut.Kind.NAME,value:"id"}}]};let j=t.getFields();return{kind:ut.Kind.SELECTION_SET,selections:Object.keys(j).filter(J=>!ES([...a,(0,ut.getNamedType)(j[J].type)],{depth:l})).map(J=>{let Z=typeof g=="object"?g[J]:!0;return Z?VM({type:t,field:j[J],models:n,path:[...i,J],ancestors:a,ignore:o,depthLimit:c,circularReferenceDepth:l,schema:p,depth:N,argNames:y,selectedFields:Z,rootTypeNames:_}):null}).filter(J=>{var Z,W;return J==null?!1:"selectionSet"in J?!!((W=(Z=J.selectionSet)==null?void 0:Z.selections)!=null&&W.length):!0})}}}}function qM(e,t){function n(r){return(0,ut.isListType)(r)?{kind:ut.Kind.LIST_TYPE,type:n(r.ofType)}:(0,ut.isNonNullType)(r)?{kind:ut.Kind.NON_NULL_TYPE,type:n(r.ofType)}:{kind:ut.Kind.NAMED_TYPE,name:{kind:ut.Kind.NAME,value:r.name}}}return{kind:ut.Kind.VARIABLE_DEFINITION,variable:{kind:ut.Kind.VARIABLE,name:{kind:ut.Kind.NAME,value:t||e.name}},type:n(e.type)}}function kM(e,t){return[...t,e].join("_")}function VM({type:e,field:t,models:n,firstCall:r,path:i,ancestors:a,ignore:o,depthLimit:c,circularReferenceDepth:l,schema:p,depth:N,argNames:y,selectedFields:g,rootTypeNames:_}){let F=(0,ut.getNamedType)(t.type),B=[],j=!1;if(t.args&&t.args.length&&(B=t.args.map(Ne=>{let le=kM(Ne.name,i);return y&&!y.includes(le)?((0,ut.isNonNullType)(Ne.type)&&(j=!0),null):(r||xM(qM(Ne,le)),{kind:ut.Kind.ARGUMENT,name:{kind:ut.Kind.NAME,value:Ne.name},value:{kind:ut.Kind.VARIABLE,name:{kind:ut.Kind.NAME,value:kM(Ne.name,i)}}})}).filter(Boolean)),j)return null;let J=[...i,t.name],Z=J.join("."),W=t.name;return rN.has(Z)&&rN.get(Z)!==t.type.toString()&&(W+=t.type.toString().replace("!","NonNull").replace("[","List").replace("]","")),rN.set(Z,t.type.toString()),!(0,ut.isScalarType)(F)&&!(0,ut.isEnumType)(F)?Q(k({kind:ut.Kind.FIELD,name:{kind:ut.Kind.NAME,value:t.name}},W!==t.name&&{alias:{kind:ut.Kind.NAME,value:W}}),{selectionSet:yS({parent:e,type:F,models:n,firstCall:r,path:J,ancestors:[...a,e],ignore:o,depthLimit:c,circularReferenceDepth:l,schema:p,depth:N+1,argNames:y,selectedFields:g,rootTypeNames:_})||void 0,arguments:B}):Q(k({kind:ut.Kind.FIELD,name:{kind:ut.Kind.NAME,value:t.name}},W!==t.name&&{alias:{kind:ut.Kind.NAME,value:W}}),{arguments:B})}function ES(e,t={depth:1}){let n=e[e.length-1];return(0,ut.isScalarType)(n)?!1:e.filter(i=>i.name===n.name).length>t.depth}});var GM=P(aN=>{"use strict";f();T();m();Object.defineProperty(aN,"__esModule",{value:!0});aN.DirectiveLocation=void 0;var KM;(function(e){e.QUERY="QUERY",e.MUTATION="MUTATION",e.SUBSCRIPTION="SUBSCRIPTION",e.FIELD="FIELD",e.FRAGMENT_DEFINITION="FRAGMENT_DEFINITION",e.FRAGMENT_SPREAD="FRAGMENT_SPREAD",e.INLINE_FRAGMENT="INLINE_FRAGMENT",e.VARIABLE_DEFINITION="VARIABLE_DEFINITION",e.SCHEMA="SCHEMA",e.SCALAR="SCALAR",e.OBJECT="OBJECT",e.FIELD_DEFINITION="FIELD_DEFINITION",e.ARGUMENT_DEFINITION="ARGUMENT_DEFINITION",e.INTERFACE="INTERFACE",e.UNION="UNION",e.ENUM="ENUM",e.ENUM_VALUE="ENUM_VALUE",e.INPUT_OBJECT="INPUT_OBJECT",e.INPUT_FIELD_DEFINITION="INPUT_FIELD_DEFINITION"})(KM||(aN.DirectiveLocation=KM={}))});var Hu=P(sN=>{"use strict";f();T();m();Object.defineProperty(sN,"__esModule",{value:!0});sN.MapperKind=void 0;var $M;(function(e){e.TYPE="MapperKind.TYPE",e.SCALAR_TYPE="MapperKind.SCALAR_TYPE",e.ENUM_TYPE="MapperKind.ENUM_TYPE",e.COMPOSITE_TYPE="MapperKind.COMPOSITE_TYPE",e.OBJECT_TYPE="MapperKind.OBJECT_TYPE",e.INPUT_OBJECT_TYPE="MapperKind.INPUT_OBJECT_TYPE",e.ABSTRACT_TYPE="MapperKind.ABSTRACT_TYPE",e.UNION_TYPE="MapperKind.UNION_TYPE",e.INTERFACE_TYPE="MapperKind.INTERFACE_TYPE",e.ROOT_OBJECT="MapperKind.ROOT_OBJECT",e.QUERY="MapperKind.QUERY",e.MUTATION="MapperKind.MUTATION",e.SUBSCRIPTION="MapperKind.SUBSCRIPTION",e.DIRECTIVE="MapperKind.DIRECTIVE",e.FIELD="MapperKind.FIELD",e.COMPOSITE_FIELD="MapperKind.COMPOSITE_FIELD",e.OBJECT_FIELD="MapperKind.OBJECT_FIELD",e.ROOT_FIELD="MapperKind.ROOT_FIELD",e.QUERY_ROOT_FIELD="MapperKind.QUERY_ROOT_FIELD",e.MUTATION_ROOT_FIELD="MapperKind.MUTATION_ROOT_FIELD",e.SUBSCRIPTION_ROOT_FIELD="MapperKind.SUBSCRIPTION_ROOT_FIELD",e.INTERFACE_FIELD="MapperKind.INTERFACE_FIELD",e.INPUT_OBJECT_FIELD="MapperKind.INPUT_OBJECT_FIELD",e.ARGUMENT="MapperKind.ARGUMENT",e.ENUM_VALUE="MapperKind.ENUM_VALUE"})($M||(sN.MapperKind=$M={}))});var gS=P(oN=>{"use strict";f();T();m();Object.defineProperty(oN,"__esModule",{value:!0});oN.getObjectTypeFromTypeMap=void 0;var Rae=Ae();function Fae(e,t){if(t){let n=e[t.name];if((0,Rae.isObjectType)(n))return n}}oN.getObjectTypeFromTypeMap=Fae});var SS=P(Ma=>{"use strict";f();T();m();Object.defineProperty(Ma,"__esModule",{value:!0});Ma.getBuiltInForStub=Ma.isNamedStub=Ma.createStub=Ma.createNamedStub=void 0;var pr=Ae();function _S(e,t){let n;return t==="object"?n=pr.GraphQLObjectType:t==="interface"?n=pr.GraphQLInterfaceType:n=pr.GraphQLInputObjectType,new n({name:e,fields:{_fake:{type:pr.GraphQLString}}})}Ma.createNamedStub=_S;function vS(e,t){switch(e.kind){case pr.Kind.LIST_TYPE:return new pr.GraphQLList(vS(e.type,t));case pr.Kind.NON_NULL_TYPE:return new pr.GraphQLNonNull(vS(e.type,t));default:return t==="output"?_S(e.name.value,"object"):_S(e.name.value,"input")}}Ma.createStub=vS;function Pae(e){if("getFields"in e){let t=e.getFields();for(let n in t)return t[n].name==="_fake"}return!1}Ma.isNamedStub=Pae;function wae(e){switch(e.name){case pr.GraphQLInt.name:return pr.GraphQLInt;case pr.GraphQLFloat.name:return pr.GraphQLFloat;case pr.GraphQLString.name:return pr.GraphQLString;case pr.GraphQLBoolean.name:return pr.GraphQLBoolean;case pr.GraphQLID.name:return pr.GraphQLID;default:return e}}Ma.getBuiltInForStub=wae});var cN=P(uN=>{"use strict";f();T();m();Object.defineProperty(uN,"__esModule",{value:!0});uN.rewireTypes=void 0;var Yn=Ae(),QM=SS();function Lae(e,t){let n=Object.create(null);for(let g in e)n[g]=e[g];let r=Object.create(null);for(let g in n){let _=n[g];if(_==null||g.startsWith("__"))continue;let F=_.name;if(!F.startsWith("__")){if(r[F]!=null){console.warn(`Duplicate schema type name ${F} found; keeping the existing one found in the schema`);continue}r[F]=_}}for(let g in r)r[g]=c(r[g]);let i=t.map(g=>a(g));return{typeMap:r,directives:i};function a(g){if((0,Yn.isSpecifiedDirective)(g))return g;let _=g.toConfig();return _.args=o(_.args),new Yn.GraphQLDirective(_)}function o(g){let _={};for(let F in g){let B=g[F],j=y(B.type);j!=null&&(B.type=j,_[F]=B)}return _}function c(g){if((0,Yn.isObjectType)(g)){let _=g.toConfig(),F=Q(k({},_),{fields:()=>l(_.fields),interfaces:()=>N(_.interfaces)});return new Yn.GraphQLObjectType(F)}else if((0,Yn.isInterfaceType)(g)){let _=g.toConfig(),F=Q(k({},_),{fields:()=>l(_.fields)});return"interfaces"in F&&(F.interfaces=()=>N(_.interfaces)),new Yn.GraphQLInterfaceType(F)}else if((0,Yn.isUnionType)(g)){let _=g.toConfig(),F=Q(k({},_),{types:()=>N(_.types)});return new Yn.GraphQLUnionType(F)}else if((0,Yn.isInputObjectType)(g)){let _=g.toConfig(),F=Q(k({},_),{fields:()=>p(_.fields)});return new Yn.GraphQLInputObjectType(F)}else if((0,Yn.isEnumType)(g)){let _=g.toConfig();return new Yn.GraphQLEnumType(_)}else if((0,Yn.isScalarType)(g)){if((0,Yn.isSpecifiedScalarType)(g))return g;let _=g.toConfig();return new Yn.GraphQLScalarType(_)}throw new Error(`Unexpected schema type: ${g}`)}function l(g){let _={};for(let F in g){let B=g[F],j=y(B.type);j!=null&&B.args&&(B.type=j,B.args=o(B.args),_[F]=B)}return _}function p(g){let _={};for(let F in g){let B=g[F],j=y(B.type);j!=null&&(B.type=j,_[F]=B)}return _}function N(g){let _=[];for(let F of g){let B=y(F);B!=null&&_.push(B)}return _}function y(g){if((0,Yn.isListType)(g)){let _=y(g.ofType);return _!=null?new Yn.GraphQLList(_):null}else if((0,Yn.isNonNullType)(g)){let _=y(g.ofType);return _!=null?new Yn.GraphQLNonNull(_):null}else if((0,Yn.isNamedType)(g)){let _=n[g.name];return _===void 0&&(_=(0,QM.isNamedStub)(g)?(0,QM.getBuiltInForStub)(g):c(g),r[_.name]=n[g.name]=_),_!=null?r[_.name]:null}return null}}uN.rewireTypes=Lae});var OS=P(xa=>{"use strict";f();T();m();Object.defineProperty(xa,"__esModule",{value:!0});xa.parseInputValueLiteral=xa.parseInputValue=xa.serializeInputValue=xa.transformInputValue=void 0;var lN=Ae(),Cae=up();function dl(e,t,n=null,r=null){if(t==null)return t;let i=(0,lN.getNullableType)(e);if((0,lN.isLeafType)(i))return n!=null?n(i,t):t;if((0,lN.isListType)(i))return(0,Cae.asArray)(t).map(a=>dl(i.ofType,a,n,r));if((0,lN.isInputObjectType)(i)){let a=i.getFields(),o={};for(let c in t){let l=a[c];l!=null&&(o[c]=dl(l.type,t[c],n,r))}return r!=null?r(i,o):o}}xa.transformInputValue=dl;function Bae(e,t){return dl(e,t,(n,r)=>{try{return n.serialize(r)}catch(i){return r}})}xa.serializeInputValue=Bae;function Uae(e,t){return dl(e,t,(n,r)=>{try{return n.parseValue(r)}catch(i){return r}})}xa.parseInputValue=Uae;function kae(e,t){return dl(e,t,(n,r)=>n.parseLiteral(r,{}))}xa.parseInputValueLiteral=kae});var ml=P(fl=>{"use strict";f();T();m();Object.defineProperty(fl,"__esModule",{value:!0});fl.correctASTNodes=fl.mapSchema=void 0;var rt=Ae(),pl=gS(),bt=Hu(),Mae=cN(),YM=OS();function xae(e,t={}){let n=zM(HM(bS(JM(qae(bS(JM(e.getTypeMap(),e,YM.serializeInputValue),e,t,c=>(0,rt.isLeafType)(c)),e,t),e,YM.parseInputValue),e,t,c=>!(0,rt.isLeafType)(c)),e,t),e,t),r=e.getDirectives(),i=Vae(r,e,t),{typeMap:a,directives:o}=(0,Mae.rewireTypes)(n,i);return new rt.GraphQLSchema(Q(k({},e.toConfig()),{query:(0,pl.getObjectTypeFromTypeMap)(a,(0,pl.getObjectTypeFromTypeMap)(n,e.getQueryType())),mutation:(0,pl.getObjectTypeFromTypeMap)(a,(0,pl.getObjectTypeFromTypeMap)(n,e.getMutationType())),subscription:(0,pl.getObjectTypeFromTypeMap)(a,(0,pl.getObjectTypeFromTypeMap)(n,e.getSubscriptionType())),types:Object.values(a),directives:o}))}fl.mapSchema=xae;function bS(e,t,n,r=()=>!0){let i={};for(let a in e)if(!a.startsWith("__")){let o=e[a];if(o==null||!r(o)){i[a]=o;continue}let c=Kae(t,n,a);if(c==null){i[a]=o;continue}let l=c(o,t);if(l===void 0){i[a]=o;continue}i[a]=l}return i}function qae(e,t,n){let r=Jae(n);return r?bS(e,t,{[bt.MapperKind.ENUM_TYPE]:i=>{let a=i.toConfig(),o=a.values,c={};for(let l in o){let p=o[l],N=r(p,i.name,t,l);if(N===void 0)c[l]=p;else if(Array.isArray(N)){let[y,g]=N;c[y]=g===void 0?p:g}else N!==null&&(c[l]=N)}return Ep(new rt.GraphQLEnumType(Q(k({},a),{values:c})))}},i=>(0,rt.isEnumType)(i)):e}function JM(e,t,n){let r=zM(e,t,{[bt.MapperKind.ARGUMENT]:i=>{if(i.defaultValue===void 0)return i;let a=dN(e,i.type);if(a!=null)return Q(k({},i),{defaultValue:n(a,i.defaultValue)})}});return HM(r,t,{[bt.MapperKind.INPUT_OBJECT_FIELD]:i=>{if(i.defaultValue===void 0)return i;let a=dN(r,i.type);if(a!=null)return Q(k({},i),{defaultValue:n(a,i.defaultValue)})}})}function dN(e,t){if((0,rt.isListType)(t)){let n=dN(e,t.ofType);return n!=null?new rt.GraphQLList(n):null}else if((0,rt.isNonNullType)(t)){let n=dN(e,t.ofType);return n!=null?new rt.GraphQLNonNull(n):null}else if((0,rt.isNamedType)(t)){let n=e[t.name];return n!=null?n:null}return null}function HM(e,t,n){let r={};for(let i in e)if(!i.startsWith("__")){let a=e[i];if(!(0,rt.isObjectType)(a)&&!(0,rt.isInterfaceType)(a)&&!(0,rt.isInputObjectType)(a)){r[i]=a;continue}let o=$ae(t,n,i);if(o==null){r[i]=a;continue}let c=a.toConfig(),l=c.fields,p={};for(let N in l){let y=l[N],g=o(y,N,i,t);if(g===void 0)p[N]=y;else if(Array.isArray(g)){let[_,F]=g;F.astNode!=null&&(F.astNode=Q(k({},F.astNode),{name:Q(k({},F.astNode.name),{value:_})})),p[_]=F===void 0?y:F}else g!==null&&(p[N]=g)}(0,rt.isObjectType)(a)?r[i]=Ep(new rt.GraphQLObjectType(Q(k({},c),{fields:p}))):(0,rt.isInterfaceType)(a)?r[i]=Ep(new rt.GraphQLInterfaceType(Q(k({},c),{fields:p}))):r[i]=Ep(new rt.GraphQLInputObjectType(Q(k({},c),{fields:p})))}return r}function zM(e,t,n){let r={};for(let i in e)if(!i.startsWith("__")){let a=e[i];if(!(0,rt.isObjectType)(a)&&!(0,rt.isInterfaceType)(a)){r[i]=a;continue}let o=Qae(n);if(o==null){r[i]=a;continue}let c=a.toConfig(),l=c.fields,p={};for(let N in l){let y=l[N],g=y.args;if(g==null){p[N]=y;continue}let _=Object.keys(g);if(!_.length){p[N]=y;continue}let F={};for(let B of _){let j=g[B],J=o(j,N,i,t);if(J===void 0)F[B]=j;else if(Array.isArray(J)){let[Z,W]=J;F[Z]=W}else J!==null&&(F[B]=J)}p[N]=Q(k({},y),{args:F})}(0,rt.isObjectType)(a)?r[i]=new rt.GraphQLObjectType(Q(k({},c),{fields:p})):(0,rt.isInterfaceType)(a)?r[i]=new rt.GraphQLInterfaceType(Q(k({},c),{fields:p})):r[i]=new rt.GraphQLInputObjectType(Q(k({},c),{fields:p}))}return r}function Vae(e,t,n){let r=Yae(n);if(r==null)return e.slice();let i=[];for(let a of e){let o=r(a,t);o===void 0?i.push(a):o!==null&&i.push(o)}return i}function jae(e,t){var i,a,o;let n=e.getType(t),r=[bt.MapperKind.TYPE];return(0,rt.isObjectType)(n)?(r.push(bt.MapperKind.COMPOSITE_TYPE,bt.MapperKind.OBJECT_TYPE),t===((i=e.getQueryType())==null?void 0:i.name)?r.push(bt.MapperKind.ROOT_OBJECT,bt.MapperKind.QUERY):t===((a=e.getMutationType())==null?void 0:a.name)?r.push(bt.MapperKind.ROOT_OBJECT,bt.MapperKind.MUTATION):t===((o=e.getSubscriptionType())==null?void 0:o.name)&&r.push(bt.MapperKind.ROOT_OBJECT,bt.MapperKind.SUBSCRIPTION)):(0,rt.isInputObjectType)(n)?r.push(bt.MapperKind.INPUT_OBJECT_TYPE):(0,rt.isInterfaceType)(n)?r.push(bt.MapperKind.COMPOSITE_TYPE,bt.MapperKind.ABSTRACT_TYPE,bt.MapperKind.INTERFACE_TYPE):(0,rt.isUnionType)(n)?r.push(bt.MapperKind.COMPOSITE_TYPE,bt.MapperKind.ABSTRACT_TYPE,bt.MapperKind.UNION_TYPE):(0,rt.isEnumType)(n)?r.push(bt.MapperKind.ENUM_TYPE):(0,rt.isScalarType)(n)&&r.push(bt.MapperKind.SCALAR_TYPE),r}function Kae(e,t,n){let r=jae(e,n),i,a=[...r];for(;!i&&a.length>0;){let o=a.pop();i=t[o]}return i!=null?i:null}function Gae(e,t){var i,a,o;let n=e.getType(t),r=[bt.MapperKind.FIELD];return(0,rt.isObjectType)(n)?(r.push(bt.MapperKind.COMPOSITE_FIELD,bt.MapperKind.OBJECT_FIELD),t===((i=e.getQueryType())==null?void 0:i.name)?r.push(bt.MapperKind.ROOT_FIELD,bt.MapperKind.QUERY_ROOT_FIELD):t===((a=e.getMutationType())==null?void 0:a.name)?r.push(bt.MapperKind.ROOT_FIELD,bt.MapperKind.MUTATION_ROOT_FIELD):t===((o=e.getSubscriptionType())==null?void 0:o.name)&&r.push(bt.MapperKind.ROOT_FIELD,bt.MapperKind.SUBSCRIPTION_ROOT_FIELD)):(0,rt.isInterfaceType)(n)?r.push(bt.MapperKind.COMPOSITE_FIELD,bt.MapperKind.INTERFACE_FIELD):(0,rt.isInputObjectType)(n)&&r.push(bt.MapperKind.INPUT_OBJECT_FIELD),r}function $ae(e,t,n){let r=Gae(e,n),i,a=[...r];for(;!i&&a.length>0;){let o=a.pop();i=t[o]}return i!=null?i:null}function Qae(e){let t=e[bt.MapperKind.ARGUMENT];return t!=null?t:null}function Yae(e){let t=e[bt.MapperKind.DIRECTIVE];return t!=null?t:null}function Jae(e){let t=e[bt.MapperKind.ENUM_VALUE];return t!=null?t:null}function Ep(e){if((0,rt.isObjectType)(e)){let t=e.toConfig();if(t.astNode!=null){let n=[];for(let r in t.fields){let i=t.fields[r];i.astNode!=null&&n.push(i.astNode)}t.astNode=Q(k({},t.astNode),{kind:rt.Kind.OBJECT_TYPE_DEFINITION,fields:n})}return t.extensionASTNodes!=null&&(t.extensionASTNodes=t.extensionASTNodes.map(n=>Q(k({},n),{kind:rt.Kind.OBJECT_TYPE_EXTENSION,fields:void 0}))),new rt.GraphQLObjectType(t)}else if((0,rt.isInterfaceType)(e)){let t=e.toConfig();if(t.astNode!=null){let n=[];for(let r in t.fields){let i=t.fields[r];i.astNode!=null&&n.push(i.astNode)}t.astNode=Q(k({},t.astNode),{kind:rt.Kind.INTERFACE_TYPE_DEFINITION,fields:n})}return t.extensionASTNodes!=null&&(t.extensionASTNodes=t.extensionASTNodes.map(n=>Q(k({},n),{kind:rt.Kind.INTERFACE_TYPE_EXTENSION,fields:void 0}))),new rt.GraphQLInterfaceType(t)}else if((0,rt.isInputObjectType)(e)){let t=e.toConfig();if(t.astNode!=null){let n=[];for(let r in t.fields){let i=t.fields[r];i.astNode!=null&&n.push(i.astNode)}t.astNode=Q(k({},t.astNode),{kind:rt.Kind.INPUT_OBJECT_TYPE_DEFINITION,fields:n})}return t.extensionASTNodes!=null&&(t.extensionASTNodes=t.extensionASTNodes.map(n=>Q(k({},n),{kind:rt.Kind.INPUT_OBJECT_TYPE_EXTENSION,fields:void 0}))),new rt.GraphQLInputObjectType(t)}else if((0,rt.isEnumType)(e)){let t=e.toConfig();if(t.astNode!=null){let n=[];for(let r in t.values){let i=t.values[r];i.astNode!=null&&n.push(i.astNode)}t.astNode=Q(k({},t.astNode),{values:n})}return t.extensionASTNodes!=null&&(t.extensionASTNodes=t.extensionASTNodes.map(n=>Q(k({},n),{values:void 0}))),new rt.GraphQLEnumType(t)}else return e}fl.correctASTNodes=Ep});var WM=P(fN=>{"use strict";f();T();m();Object.defineProperty(fN,"__esModule",{value:!0});fN.filterSchema=void 0;var pN=Ae(),Is=Hu(),Hae=ml();function zae({schema:e,typeFilter:t=()=>!0,fieldFilter:n=void 0,rootFieldFilter:r=void 0,objectFieldFilter:i=void 0,interfaceFieldFilter:a=void 0,inputObjectFieldFilter:o=void 0,argumentFilter:c=void 0}){return(0,Hae.mapSchema)(e,{[Is.MapperKind.QUERY]:p=>DS(p,"Query",r,c),[Is.MapperKind.MUTATION]:p=>DS(p,"Mutation",r,c),[Is.MapperKind.SUBSCRIPTION]:p=>DS(p,"Subscription",r,c),[Is.MapperKind.OBJECT_TYPE]:p=>t(p.name,p)?AS(pN.GraphQLObjectType,p,i||n,c):null,[Is.MapperKind.INTERFACE_TYPE]:p=>t(p.name,p)?AS(pN.GraphQLInterfaceType,p,a||n,c):null,[Is.MapperKind.INPUT_OBJECT_TYPE]:p=>t(p.name,p)?AS(pN.GraphQLInputObjectType,p,o||n):null,[Is.MapperKind.UNION_TYPE]:p=>t(p.name,p)?void 0:null,[Is.MapperKind.ENUM_TYPE]:p=>t(p.name,p)?void 0:null,[Is.MapperKind.SCALAR_TYPE]:p=>t(p.name,p)?void 0:null})}fN.filterSchema=zae;function DS(e,t,n,r){if(n||r){let i=e.toConfig();for(let a in i.fields){let o=i.fields[a];if(n&&!n(t,a,i.fields[a]))delete i.fields[a];else if(r&&o.args)for(let c in o.args)r(t,a,c,o.args[c])||delete o.args[c]}return new pN.GraphQLObjectType(i)}return e}function AS(e,t,n,r){if(n||r){let i=t.toConfig();for(let a in i.fields){let o=i.fields[a];if(n&&!n(t.name,a,i.fields[a]))delete i.fields[a];else if(r&&"args"in o)for(let c in o.args)r(t.name,a,c,o.args[c])||delete o.args[c]}return new e(i)}}});var ZM=P(Tl=>{"use strict";f();T();m();Object.defineProperty(Tl,"__esModule",{value:!0});Tl.healTypes=Tl.healSchema=void 0;var qa=Ae();function Wae(e){return XM(e.getTypeMap(),e.getDirectives()),e}Tl.healSchema=Wae;function XM(e,t){let n=Object.create(null);for(let p in e){let N=e[p];if(N==null||p.startsWith("__"))continue;let y=N.name;if(!y.startsWith("__")){if(n[y]!=null){console.warn(`Duplicate schema type name ${y} found; keeping the existing one found in the schema`);continue}n[y]=N}}for(let p in n){let N=n[p];e[p]=N}for(let p of t)p.args=p.args.filter(N=>(N.type=l(N.type),N.type!==null));for(let p in e){let N=e[p];!p.startsWith("__")&&p in n&&N!=null&&r(N)}for(let p in e)!p.startsWith("__")&&!(p in n)&&delete e[p];function r(p){if((0,qa.isObjectType)(p)){i(p),a(p);return}else if((0,qa.isInterfaceType)(p)){i(p),"getInterfaces"in p&&a(p);return}else if((0,qa.isUnionType)(p)){c(p);return}else if((0,qa.isInputObjectType)(p)){o(p);return}else if((0,qa.isLeafType)(p))return;throw new Error(`Unexpected schema type: ${p}`)}function i(p){let N=p.getFields();for(let[y,g]of Object.entries(N))g.args.map(_=>(_.type=l(_.type),_.type===null?null:_)).filter(Boolean),g.type=l(g.type),g.type===null&&delete N[y]}function a(p){if("getInterfaces"in p){let N=p.getInterfaces();N.push(...N.splice(0).map(y=>l(y)).filter(Boolean))}}function o(p){let N=p.getFields();for(let[y,g]of Object.entries(N))g.type=l(g.type),g.type===null&&delete N[y]}function c(p){let N=p.getTypes();N.push(...N.splice(0).map(y=>l(y)).filter(Boolean))}function l(p){if((0,qa.isListType)(p)){let N=l(p.ofType);return N!=null?new qa.GraphQLList(N):null}else if((0,qa.isNonNullType)(p)){let N=l(p.ofType);return N!=null?new qa.GraphQLNonNull(N):null}else if((0,qa.isNamedType)(p)){let N=e[p.name];if(N&&p!==N)return N}return p}}Tl.healTypes=XM});var ex=P(mN=>{"use strict";f();T();m();Object.defineProperty(mN,"__esModule",{value:!0});mN.getResolversFromSchema=void 0;var zu=Ae();function Xae(e,t){var i,a;let n=Object.create(null),r=e.getTypeMap();for(let o in r)if(!o.startsWith("__")){let c=r[o];if((0,zu.isScalarType)(c)){if(!(0,zu.isSpecifiedScalarType)(c)){let l=c.toConfig();delete l.astNode,n[o]=new zu.GraphQLScalarType(l)}}else if((0,zu.isEnumType)(c)){n[o]={};let l=c.getValues();for(let p of l)n[o][p.name]=p.value}else if((0,zu.isInterfaceType)(c))c.resolveType!=null&&(n[o]={__resolveType:c.resolveType});else if((0,zu.isUnionType)(c))c.resolveType!=null&&(n[o]={__resolveType:c.resolveType});else if((0,zu.isObjectType)(c)){n[o]={},c.isTypeOf!=null&&(n[o].__isTypeOf=c.isTypeOf);let l=c.getFields();for(let p in l){let N=l[p];if(N.subscribe!=null&&(n[o][p]=n[o][p]||{},n[o][p].subscribe=N.subscribe),N.resolve!=null&&((i=N.resolve)==null?void 0:i.name)!=="defaultFieldResolver"){switch((a=N.resolve)==null?void 0:a.name){case"defaultMergedResolver":if(!t)continue;break;case"defaultFieldResolver":continue}n[o][p]=n[o][p]||{},n[o][p].resolve=N.resolve}}}}return n}mN.getResolversFromSchema=Xae});var nx=P(TN=>{"use strict";f();T();m();Object.defineProperty(TN,"__esModule",{value:!0});TN.forEachField=void 0;var tx=Ae();function Zae(e,t){let n=e.getTypeMap();for(let r in n){let i=n[r];if(!(0,tx.getNamedType)(i).name.startsWith("__")&&(0,tx.isObjectType)(i)){let a=i.getFields();for(let o in a){let c=a[o];t(c,r,o)}}}}TN.forEachField=Zae});var rx=P(NN=>{"use strict";f();T();m();Object.defineProperty(NN,"__esModule",{value:!0});NN.forEachDefaultValue=void 0;var RS=Ae();function ese(e,t){let n=e.getTypeMap();for(let r in n){let i=n[r];if(!(0,RS.getNamedType)(i).name.startsWith("__")){if((0,RS.isObjectType)(i)){let a=i.getFields();for(let o in a){let c=a[o];for(let l of c.args)l.defaultValue=t(l.type,l.defaultValue)}}else if((0,RS.isInputObjectType)(i)){let a=i.getFields();for(let o in a){let c=a[o];c.defaultValue=t(c.type,c.defaultValue)}}}}}NN.forEachDefaultValue=ese});var wS=P(hN=>{"use strict";f();T();m();Object.defineProperty(hN,"__esModule",{value:!0});hN.addTypes=void 0;var FS=Ae(),PS=gS(),tse=cN();function nse(e,t){let n=e.toConfig(),r={};for(let c of n.types)r[c.name]=c;let i={};for(let c of n.directives)i[c.name]=c;for(let c of t)(0,FS.isNamedType)(c)?r[c.name]=c:(0,FS.isDirective)(c)&&(i[c.name]=c);let{typeMap:a,directives:o}=(0,tse.rewireTypes)(r,Object.values(i));return new FS.GraphQLSchema(Q(k({},n),{query:(0,PS.getObjectTypeFromTypeMap)(a,e.getQueryType()),mutation:(0,PS.getObjectTypeFromTypeMap)(a,e.getMutationType()),subscription:(0,PS.getObjectTypeFromTypeMap)(a,e.getSubscriptionType()),types:Object.values(a),directives:o}))}hN.addTypes=nse});var ax=P(yN=>{"use strict";f();T();m();Object.defineProperty(yN,"__esModule",{value:!0});yN.pruneSchema=void 0;var tr=Ae(),rse=sS(),ise=Hu(),ase=ml(),sse=pp();function ose(e,t={}){let{skipEmptyCompositeTypePruning:n,skipEmptyUnionPruning:r,skipPruning:i,skipUnimplementedInterfacesPruning:a,skipUnusedTypesPruning:o}=t,c=[],l=e;do{let p=use(l);if(i){let N=[];for(let y in l.getTypeMap()){if(y.startsWith("__"))continue;let g=l.getType(y);g&&i(g)&&N.push(y)}p=ix(N,l,p)}c=[],l=(0,ase.mapSchema)(l,{[ise.MapperKind.TYPE]:N=>!p.has(N.name)&&!(0,tr.isSpecifiedScalarType)(N)?((0,tr.isUnionType)(N)||(0,tr.isInputObjectType)(N)||(0,tr.isInterfaceType)(N)||(0,tr.isObjectType)(N)||(0,tr.isScalarType)(N))&&(o||(0,tr.isUnionType)(N)&&r&&!Object.keys(N.getTypes()).length||((0,tr.isInputObjectType)(N)||(0,tr.isInterfaceType)(N)||(0,tr.isObjectType)(N))&&n&&!Object.keys(N.getFields()).length||(0,tr.isInterfaceType)(N)&&a)?N:(c.push(N.name),p.delete(N.name),null):N})}while(c.length);return l}yN.pruneSchema=ose;function use(e){let t=[];for(let n of(0,sse.getRootTypes)(e))t.push(n.name);return ix(t,e)}function ix(e,t,n=new Set){let r=new Map;for(;e.length;){let i=e.pop();if(n.has(i)&&r[i]!==!0)continue;let a=t.getType(i);if(a){if((0,tr.isUnionType)(a)&&e.push(...a.getTypes().map(o=>o.name)),(0,tr.isInterfaceType)(a)&&r[i]===!0&&(e.push(...(0,rse.getImplementingTypes)(a.name,t)),r[i]=!1),(0,tr.isEnumType)(a)&&e.push(...a.getValues().flatMap(o=>o.astNode?EN(t,o.astNode):[])),"getInterfaces"in a&&e.push(...a.getInterfaces().map(o=>o.name)),"getFields"in a){let o=a.getFields(),c=Object.entries(o);if(!c.length)continue;for(let[,l]of c){(0,tr.isObjectType)(a)&&e.push(...l.args.flatMap(N=>{let y=[(0,tr.getNamedType)(N.type).name];return N.astNode&&y.push(...EN(t,N.astNode)),y}));let p=(0,tr.getNamedType)(l.type);e.push(p.name),l.astNode&&e.push(...EN(t,l.astNode)),(0,tr.isInterfaceType)(p)&&!(p.name in r)&&(r[p.name]=!0)}}a.astNode&&e.push(...EN(t,a.astNode)),n.add(i)}}return n}function EN(e,t){var n;return((n=t.directives)!=null?n:[]).flatMap(r=>{var i,a;return(a=(i=e.getDirective(r.name.value))==null?void 0:i.args.map(o=>(0,tr.getNamedType)(o.type).name))!=null?a:[]})}});var ox=P(IN=>{"use strict";f();T();m();Object.defineProperty(IN,"__esModule",{value:!0});IN.mergeDeep=void 0;var cse=up();function sx(e,t=!1,n=!1){let r=e[0]||{},i={};t&&Object.setPrototypeOf(i,Object.create(Object.getPrototypeOf(r)));for(let a of e)if(LS(r)&&LS(a)){if(t){let o=Object.getPrototypeOf(i),c=Object.getPrototypeOf(a);if(c)for(let l of Object.getOwnPropertyNames(c)){let p=Object.getOwnPropertyDescriptor(c,l);(0,cse.isSome)(p)&&Object.defineProperty(o,l,p)}}for(let o in a)LS(a[o])?o in i?i[o]=sx([i[o],a[o]],t,n):Object.assign(i,{[o]:a[o]}):n&&Array.isArray(i[o])?Array.isArray(a[o])?i[o].push(...a[o]):i[o].push(a[o]):Object.assign(i,{[o]:a[o]})}else if(n&&Array.isArray(r))Array.isArray(a)?r.push(...a):r.push(a);else if(n&&Array.isArray(a))return[r,...a];return i}IN.mergeDeep=sx;function LS(e){return e&&typeof e=="object"&&!Array.isArray(e)}});var ux=P(gN=>{"use strict";f();T();m();Object.defineProperty(gN,"__esModule",{value:!0});gN.parseSelectionSet=void 0;var lse=Ae();function dse(e,t){return(0,lse.parse)(e,t).definitions[0].selectionSet}gN.parseSelectionSet=dse});var cx=P(_N=>{"use strict";f();T();m();Object.defineProperty(_N,"__esModule",{value:!0});_N.getResponseKeyFromInfo=void 0;function pse(e){return e.fieldNodes[0].alias!=null?e.fieldNodes[0].alias.value:e.fieldName}_N.getResponseKeyFromInfo=pse});var lx=P(Va=>{"use strict";f();T();m();Object.defineProperty(Va,"__esModule",{value:!0});Va.modifyObjectFields=Va.selectObjectFields=Va.removeObjectFields=Va.appendObjectFields=void 0;var vN=Ae(),fse=wS(),SN=Hu(),Wu=ml();function mse(e,t,n){return e.getType(t)==null?(0,fse.addTypes)(e,[new vN.GraphQLObjectType({name:t,fields:n})]):(0,Wu.mapSchema)(e,{[SN.MapperKind.OBJECT_TYPE]:r=>{if(r.name===t){let i=r.toConfig(),a=i.fields,o={};for(let c in a)o[c]=a[c];for(let c in n)o[c]=n[c];return(0,Wu.correctASTNodes)(new vN.GraphQLObjectType(Q(k({},i),{fields:o})))}}})}Va.appendObjectFields=mse;function Tse(e,t,n){let r={};return[(0,Wu.mapSchema)(e,{[SN.MapperKind.OBJECT_TYPE]:a=>{if(a.name===t){let o=a.toConfig(),c=o.fields,l={};for(let p in c){let N=c[p];n(p,N)?r[p]=N:l[p]=N}return(0,Wu.correctASTNodes)(new vN.GraphQLObjectType(Q(k({},o),{fields:l})))}}}),r]}Va.removeObjectFields=Tse;function Nse(e,t,n){let r={};return(0,Wu.mapSchema)(e,{[SN.MapperKind.OBJECT_TYPE]:i=>{if(i.name===t){let o=i.toConfig().fields;for(let c in o){let l=o[c];n(c,l)&&(r[c]=l)}}}}),r}Va.selectObjectFields=Nse;function hse(e,t,n,r){let i={};return[(0,Wu.mapSchema)(e,{[SN.MapperKind.OBJECT_TYPE]:o=>{if(o.name===t){let c=o.toConfig(),l=c.fields,p={};for(let N in l){let y=l[N];n(N,y)?i[N]=y:p[N]=y}for(let N in r){let y=r[N];p[N]=y}return(0,Wu.correctASTNodes)(new vN.GraphQLObjectType(Q(k({},c),{fields:p})))}}}),i]}Va.modifyObjectFields=hse});var dx=P(ON=>{"use strict";f();T();m();Object.defineProperty(ON,"__esModule",{value:!0});ON.renameType=void 0;var qi=Ae();function Ese(e,t){if((0,qi.isObjectType)(e))return new qi.GraphQLObjectType(Q(k({},e.toConfig()),{name:t,astNode:e.astNode==null?e.astNode:Q(k({},e.astNode),{name:Q(k({},e.astNode.name),{value:t})}),extensionASTNodes:e.extensionASTNodes==null?e.extensionASTNodes:e.extensionASTNodes.map(n=>Q(k({},n),{name:Q(k({},n.name),{value:t})}))}));if((0,qi.isInterfaceType)(e))return new qi.GraphQLInterfaceType(Q(k({},e.toConfig()),{name:t,astNode:e.astNode==null?e.astNode:Q(k({},e.astNode),{name:Q(k({},e.astNode.name),{value:t})}),extensionASTNodes:e.extensionASTNodes==null?e.extensionASTNodes:e.extensionASTNodes.map(n=>Q(k({},n),{name:Q(k({},n.name),{value:t})}))}));if((0,qi.isUnionType)(e))return new qi.GraphQLUnionType(Q(k({},e.toConfig()),{name:t,astNode:e.astNode==null?e.astNode:Q(k({},e.astNode),{name:Q(k({},e.astNode.name),{value:t})}),extensionASTNodes:e.extensionASTNodes==null?e.extensionASTNodes:e.extensionASTNodes.map(n=>Q(k({},n),{name:Q(k({},n.name),{value:t})}))}));if((0,qi.isInputObjectType)(e))return new qi.GraphQLInputObjectType(Q(k({},e.toConfig()),{name:t,astNode:e.astNode==null?e.astNode:Q(k({},e.astNode),{name:Q(k({},e.astNode.name),{value:t})}),extensionASTNodes:e.extensionASTNodes==null?e.extensionASTNodes:e.extensionASTNodes.map(n=>Q(k({},n),{name:Q(k({},n.name),{value:t})}))}));if((0,qi.isEnumType)(e))return new qi.GraphQLEnumType(Q(k({},e.toConfig()),{name:t,astNode:e.astNode==null?e.astNode:Q(k({},e.astNode),{name:Q(k({},e.astNode.name),{value:t})}),extensionASTNodes:e.extensionASTNodes==null?e.extensionASTNodes:e.extensionASTNodes.map(n=>Q(k({},n),{name:Q(k({},n.name),{value:t})}))}));if((0,qi.isScalarType)(e))return new qi.GraphQLScalarType(Q(k({},e.toConfig()),{name:t,astNode:e.astNode==null?e.astNode:Q(k({},e.astNode),{name:Q(k({},e.astNode.name),{value:t})}),extensionASTNodes:e.extensionASTNodes==null?e.extensionASTNodes:e.extensionASTNodes.map(n=>Q(k({},n),{name:Q(k({},n.name),{value:t})}))}));throw new Error(`Unknown type ${e}.`)}ON.renameType=Ese});var mx=P(bN=>{"use strict";f();T();m();Object.defineProperty(bN,"__esModule",{value:!0});bN.mapAsyncIterator=void 0;var yse=lp();function Ise(e,t,n,r){let i,a,o;r&&(o=p=>{let N=r();return(0,yse.isPromise)(N)?N.then(()=>p):p}),typeof e.return=="function"&&(i=e.return,a=p=>{let N=()=>Promise.reject(p);return i.call(e).then(N,N)});function c(p){return p.done?o?o(p):p:px(p.value,t).then(fx,a)}let l;if(n){let p=n;l=N=>px(N,p).then(fx,a)}return{next(){return e.next().then(c,l)},return(){let p=i?i.call(e).then(c,l):Promise.resolve({value:void 0,done:!0});return o?p.then(o):p},throw(p){return typeof e.throw=="function"?e.throw(p).then(c,l):Promise.reject(p).catch(a)},[Symbol.asyncIterator](){return this}}}bN.mapAsyncIterator=Ise;function px(e,t){return new Promise(n=>n(t(e)))}function fx(e){return{value:e,done:!1}}});var Tx=P(Nl=>{"use strict";f();T();m();Object.defineProperty(Nl,"__esModule",{value:!0});Nl.createVariableNameGenerator=Nl.updateArgument=void 0;var Xu=Ae(),gse=uS();function _se(e,t,n,r,i,a,o){if(e[r]={kind:Xu.Kind.ARGUMENT,name:{kind:Xu.Kind.NAME,value:r},value:{kind:Xu.Kind.VARIABLE,name:{kind:Xu.Kind.NAME,value:i}}},t[i]={kind:Xu.Kind.VARIABLE_DEFINITION,variable:{kind:Xu.Kind.VARIABLE,name:{kind:Xu.Kind.NAME,value:i}},type:(0,gse.astFromType)(a)},o!==void 0){n[i]=o;return}i in n&&delete n[i]}Nl.updateArgument=_se;function vse(e){let t=0;return n=>{let r;do r=`_v${(t++).toString()}_${n}`;while(r in e);return r}}Nl.createVariableNameGenerator=vse});var Nx=P(DN=>{"use strict";f();T();m();Object.defineProperty(DN,"__esModule",{value:!0});DN.implementsAbstractType=void 0;var CS=Ae();function Sse(e,t,n){return n==null||t==null?!1:t===n?!0:(0,CS.isCompositeType)(t)&&(0,CS.isCompositeType)(n)?(0,CS.doTypesOverlap)(e,t,n):!1}DN.implementsAbstractType=Sse});var hx=P(AN=>{"use strict";f();T();m();Object.defineProperty(AN,"__esModule",{value:!0});AN.observableToAsyncIterable=void 0;function Ose(e){let t=[],n=[],r=!0,i=N=>{t.length!==0?t.shift()({value:N,done:!1}):n.push({value:N,done:!1})},a=N=>{t.length!==0?t.shift()({value:{errors:[N]},done:!1}):n.push({value:{errors:[N]},done:!1})},o=()=>{t.length!==0?t.shift()({done:!0}):n.push({done:!0})},c=()=>new Promise(N=>{if(n.length!==0){let y=n.shift();N(y)}else t.push(N)}),l=e.subscribe({next(N){i(N)},error(N){a(N)},complete(){o()}}),p=()=>{if(r){r=!1,l.unsubscribe();for(let N of t)N({value:void 0,done:!0});t.length=0,n.length=0}};return{next(){return r?c():this.return()},return(){return p(),Promise.resolve({value:void 0,done:!0})},throw(N){return p(),Promise.reject(N)},[Symbol.asyncIterator](){return this}}}AN.observableToAsyncIterable=Ose});var Ex=P(RN=>{"use strict";f();T();m();Object.defineProperty(RN,"__esModule",{value:!0});RN.AccumulatorMap=void 0;var BS=class extends Map{get[Symbol.toStringTag](){return"AccumulatorMap"}add(t,n){let r=this.get(t);r===void 0?this.set(t,[n]):r.push(n)}};RN.AccumulatorMap=BS});var US=P(hl=>{"use strict";f();T();m();Object.defineProperty(hl,"__esModule",{value:!0});hl.GraphQLStreamDirective=hl.GraphQLDeferDirective=void 0;var Vi=Ae();hl.GraphQLDeferDirective=new Vi.GraphQLDirective({name:"defer",description:"Directs the executor to defer this fragment when the `if` argument is true or undefined.",locations:[Vi.DirectiveLocation.FRAGMENT_SPREAD,Vi.DirectiveLocation.INLINE_FRAGMENT],args:{if:{type:new Vi.GraphQLNonNull(Vi.GraphQLBoolean),description:"Deferred when true or undefined.",defaultValue:!0},label:{type:Vi.GraphQLString,description:"Unique name"}}});hl.GraphQLStreamDirective=new Vi.GraphQLDirective({name:"stream",description:"Directs the executor to stream plural fields when the `if` argument is true or undefined.",locations:[Vi.DirectiveLocation.FIELD],args:{if:{type:new Vi.GraphQLNonNull(Vi.GraphQLBoolean),description:"Stream when true or undefined.",defaultValue:!0},label:{type:Vi.GraphQLString,description:"Unique name"},initialCount:{defaultValue:0,type:Vi.GraphQLInt,description:"Number of items to return immediately"}}})});var xS=P(Xr=>{"use strict";f();T();m();Object.defineProperty(Xr,"__esModule",{value:!0});Xr.collectSubFields=Xr.getDeferValues=Xr.getFieldEntryKey=Xr.doesFragmentConditionMatch=Xr.shouldIncludeNode=Xr.collectFields=void 0;var ja=Ae(),PN=Ex(),bse=US(),Dse=ul();function El(e,t,n,r,i,a,o,c){for(let l of i.selections)switch(l.kind){case ja.Kind.FIELD:{if(!FN(n,l))continue;a.add(yx(l),l);break}case ja.Kind.INLINE_FRAGMENT:{if(!FN(n,l)||!kS(e,l,r))continue;let p=MS(n,l);if(p){let N=new PN.AccumulatorMap;El(e,t,n,r,l.selectionSet,N,o,c),o.push({label:p.label,fields:N})}else El(e,t,n,r,l.selectionSet,a,o,c);break}case ja.Kind.FRAGMENT_SPREAD:{let p=l.name.value;if(!FN(n,l))continue;let N=MS(n,l);if(c.has(p)&&!N)continue;let y=t[p];if(!y||!kS(e,y,r))continue;if(N||c.add(p),N){let g=new PN.AccumulatorMap;El(e,t,n,r,y.selectionSet,g,o,c),o.push({label:N.label,fields:g})}else El(e,t,n,r,y.selectionSet,a,o,c);break}}}function Ase(e,t,n,r,i){let a=new PN.AccumulatorMap,o=[];return El(e,t,n,r,i,a,o,new Set),{fields:a,patches:o}}Xr.collectFields=Ase;function FN(e,t){let n=(0,ja.getDirectiveValues)(ja.GraphQLSkipDirective,t,e);if((n==null?void 0:n.if)===!0)return!1;let r=(0,ja.getDirectiveValues)(ja.GraphQLIncludeDirective,t,e);return(r==null?void 0:r.if)!==!1}Xr.shouldIncludeNode=FN;function kS(e,t,n){let r=t.typeCondition;if(!r)return!0;let i=(0,ja.typeFromAST)(e,r);return i===n?!0:(0,ja.isAbstractType)(i)?e.getPossibleTypes(i).includes(n):!1}Xr.doesFragmentConditionMatch=kS;function yx(e){return e.alias?e.alias.value:e.name.value}Xr.getFieldEntryKey=yx;function MS(e,t){let n=(0,ja.getDirectiveValues)(bse.GraphQLDeferDirective,t,e);if(n&&n.if!==!1)return{label:typeof n.label=="string"?n.label:void 0}}Xr.getDeferValues=MS;Xr.collectSubFields=(0,Dse.memoize5)(function(t,n,r,i,a){let o=new PN.AccumulatorMap,c=new Set,l=[],p={fields:o,patches:l};for(let N of a)N.selectionSet&&El(t,n,r,i,N.selectionSet,o,l,c);return p})});var qS=P(yl=>{"use strict";f();T();m();Object.defineProperty(yl,"__esModule",{value:!0});yl.getOperationASTFromRequest=yl.getOperationASTFromDocument=void 0;var Rse=Ae(),Fse=ul();function Ix(e,t){let n=(0,Rse.getOperationAST)(e,t);if(!n)throw new Error(`Cannot infer operation ${t||""}`);return n}yl.getOperationASTFromDocument=Ix;yl.getOperationASTFromRequest=(0,Fse.memoize1)(function(t){return Ix(t.document,t.operationName)})});var vx=P(Xo=>{"use strict";f();T();m();Object.defineProperty(Xo,"__esModule",{value:!0});Xo.visitResult=Xo.visitErrors=Xo.visitData=void 0;var Wo=Ae(),VS=xS(),Pse=qS();function jS(e,t,n){if(Array.isArray(e))return e.map(r=>jS(r,t,n));if(typeof e=="object"){let r=t!=null?t(e):e;if(r!=null)for(let i in r){let a=r[i];Object.defineProperty(r,i,{value:jS(a,t,n)})}return n!=null?n(r):r}return e}Xo.visitData=jS;function wse(e,t){return e.map(n=>t(n))}Xo.visitErrors=wse;function Lse(e,t,n,r,i){let a=t.document.definitions.reduce((g,_)=>(_.kind===Wo.Kind.FRAGMENT_DEFINITION&&(g[_.name.value]=_),g),{}),o=t.variables||{},c={segmentInfoMap:new Map,unpathedErrors:new Set},l=e.data,p=e.errors,N=p!=null&&i!=null,y=(0,Pse.getOperationASTFromRequest)(t);return l!=null&&y!=null&&(e.data=Use(l,y,n,a,o,r,N?p:void 0,c)),p!=null&&i&&(e.errors=Cse(p,i,c)),e}Xo.visitResult=Lse;function Cse(e,t,n){let r=n.segmentInfoMap,i=n.unpathedErrors,a=t.__unpathed;return e.map(o=>{let c=r.get(o),l=c==null?o:c.reduceRight((p,N)=>{let y=N.type.name,g=t[y];if(g==null)return p;let _=g[N.fieldName];return _==null?p:_(p,N.pathIndex)},o);return a&&i.has(o)?a(l):l})}function Bse(e,t){switch(t.operation){case"query":return e.getQueryType();case"mutation":return e.getMutationType();case"subscription":return e.getSubscriptionType()}}function Use(e,t,n,r,i,a,o,c){let l=Bse(n,t),{fields:p}=(0,VS.collectFields)(n,r,i,l,t.selectionSet);return KS(e,l,p,n,r,i,a,0,o,c)}function KS(e,t,n,r,i,a,o,c,l,p){var Z;let N=t.getFields(),y=o==null?void 0:o[t.name],g=y==null?void 0:y.__enter,_=g!=null?g(e):e,F,B=null;if(l!=null){F=Mse(l,c),B=F.errorMap;for(let W of F.unpathedErrors)p.unpathedErrors.add(W)}for(let[W,Ne]of n){let le=Ne[0].name.value,we=(Z=N[le])==null?void 0:Z.type;if(we==null)switch(le){case"__typename":we=Wo.TypeNameMetaFieldDef.type;break;case"__schema":we=Wo.SchemaMetaFieldDef.type;break;case"__type":we=Wo.TypeMetaFieldDef.type;break}let qe=c+1,et;B&&(et=B[W],et!=null&&delete B[W],xse(t,le,qe,et,p));let X=_x(e[W],we,Ne,r,i,a,o,qe,et,p);gx(_,W,X,y,le)}let j=_.__typename;if(j!=null&&gx(_,"__typename",j,y,"__typename"),B)for(let W in B){let Ne=B[W];for(let le of Ne)p.unpathedErrors.add(le)}let J=y==null?void 0:y.__leave;return J!=null?J(_):_}function gx(e,t,n,r,i){if(r==null){e[t]=n;return}let a=r[i];if(a==null){e[t]=n;return}let o=a(n);if(o===void 0){delete e[t];return}e[t]=o}function kse(e,t,n,r,i,a,o,c,l,p){return e.map(N=>_x(N,t,n,r,i,a,o,c+1,l,p))}function _x(e,t,n,r,i,a,o,c,l=[],p){if(e==null)return e;let N=(0,Wo.getNullableType)(t);if((0,Wo.isListType)(N))return kse(e,N.ofType,n,r,i,a,o,c,l,p);if((0,Wo.isAbstractType)(N)){let _=r.getType(e.__typename),{fields:F}=(0,VS.collectSubFields)(r,i,a,_,n);return KS(e,_,F,r,i,a,o,c,l,p)}else if((0,Wo.isObjectType)(N)){let{fields:_}=(0,VS.collectSubFields)(r,i,a,N,n);return KS(e,N,_,r,i,a,o,c,l,p)}let y=o==null?void 0:o[N.name];if(y==null)return e;let g=y(e);return g===void 0?e:g}function Mse(e,t){var i;let n=Object.create(null),r=new Set;for(let a of e){let o=(i=a.path)==null?void 0:i[t];if(o==null){r.add(a);continue}o in n?n[o].push(a):n[o]=[a]}return{errorMap:n,unpathedErrors:r}}function xse(e,t,n,r=[],i){for(let a of r){let o={type:e,fieldName:t,pathIndex:n},c=i.segmentInfoMap.get(a);c==null?i.segmentInfoMap.set(a,[o]):c.push(o)}}});var Sx=P(wN=>{"use strict";f();T();m();Object.defineProperty(wN,"__esModule",{value:!0});wN.valueMatchesCriteria=void 0;function GS(e,t){return e==null?e===t:Array.isArray(e)?Array.isArray(t)&&e.every((n,r)=>GS(n,t[r])):typeof e=="object"?typeof t=="object"&&t&&Object.keys(t).every(n=>GS(e[n],t[n])):t instanceof RegExp?t.test(e):e===t}wN.valueMatchesCriteria=GS});var Ox=P(LN=>{"use strict";f();T();m();Object.defineProperty(LN,"__esModule",{value:!0});LN.isAsyncIterable=void 0;function qse(e){return(e==null?void 0:e[Symbol.asyncIterator])!=null}LN.isAsyncIterable=qse});var bx=P(CN=>{"use strict";f();T();m();Object.defineProperty(CN,"__esModule",{value:!0});CN.isDocumentNode=void 0;var Vse=Ae();function jse(e){return e&&typeof e=="object"&&"kind"in e&&e.kind===Vse.Kind.DOCUMENT}CN.isDocumentNode=jse});var Dx=P(()=>{"use strict";f();T();m()});var Px=P(Zo=>{"use strict";f();T();m();Object.defineProperty(Zo,"__esModule",{value:!0});Zo.withCancel=Zo.getAsyncIterableWithCancel=Zo.getAsyncIteratorWithCancel=void 0;var Kse=ul();function Gse(e){return vi(this,null,function*(){return{value:e,done:!0}})}var Ax=(0,Kse.memoize2)(function(t,n){return function(...i){return Reflect.apply(n,t,i)}});function Rx(e,t){return new Proxy(e,{has(n,r){return r==="return"?!0:Reflect.has(n,r)},get(n,r,i){let a=Reflect.get(n,r,i);if(r==="return"){let o=a||Gse;return function(l){return vi(this,null,function*(){let p=yield t(l);return Reflect.apply(o,n,[p])})}}else if(typeof a=="function")return Ax(n,a);return a}})}Zo.getAsyncIteratorWithCancel=Rx;function Fx(e,t){return new Proxy(e,{get(n,r,i){let a=Reflect.get(n,r,i);return Symbol.asyncIterator===r?function(){let c=Reflect.apply(a,n,[]);return Rx(c,t)}:typeof a=="function"?Ax(n,a):a}})}Zo.getAsyncIterableWithCancel=Fx;Zo.withCancel=Fx});var wx=P(BN=>{"use strict";f();T();m();Object.defineProperty(BN,"__esModule",{value:!0});BN.fixSchemaAst=void 0;var $se=Ae(),Qse=TS();function Yse(e,t){let n=(0,Qse.getDocumentNodeFromSchema)(e);return(0,$se.buildASTSchema)(n,k({},t||{}))}function Jse(e,t){let n;return(!e.astNode||!e.extensionASTNodes)&&(n=Yse(e,t)),!e.astNode&&(n!=null&&n.astNode)&&(e.astNode=n.astNode),!e.extensionASTNodes&&(n!=null&&n.astNode)&&(e.extensionASTNodes=n.extensionASTNodes),e}BN.fixSchemaAst=Jse});var Lx=P(UN=>{"use strict";f();T();m();Object.defineProperty(UN,"__esModule",{value:!0});UN.extractExtensionsFromSchema=void 0;var gs=Hu(),Hse=ml();function da(e={}){let t=k({},e),n=t.directives;if(n!=null)for(let r in n){let i=n[r];Array.isArray(i)||(n[r]=[i])}return t}function zse(e){let t={schemaExtensions:da(e.extensions),types:{}};return(0,Hse.mapSchema)(e,{[gs.MapperKind.OBJECT_TYPE]:n=>(t.types[n.name]={fields:{},type:"object",extensions:da(n.extensions)},n),[gs.MapperKind.INTERFACE_TYPE]:n=>(t.types[n.name]={fields:{},type:"interface",extensions:da(n.extensions)},n),[gs.MapperKind.FIELD]:(n,r,i)=>{t.types[i].fields[r]={arguments:{},extensions:da(n.extensions)};let a=n.args;if(a!=null)for(let o in a)t.types[i].fields[r].arguments[o]=da(a[o].extensions);return n},[gs.MapperKind.ENUM_TYPE]:n=>(t.types[n.name]={values:{},type:"enum",extensions:da(n.extensions)},n),[gs.MapperKind.ENUM_VALUE]:(n,r,i,a)=>(t.types[r].values[a]=da(n.extensions),n),[gs.MapperKind.SCALAR_TYPE]:n=>(t.types[n.name]={type:"scalar",extensions:da(n.extensions)},n),[gs.MapperKind.UNION_TYPE]:n=>(t.types[n.name]={type:"union",extensions:da(n.extensions)},n),[gs.MapperKind.INPUT_OBJECT_TYPE]:n=>(t.types[n.name]={fields:{},type:"input",extensions:da(n.extensions)},n),[gs.MapperKind.INPUT_OBJECT_FIELD]:(n,r,i)=>(t.types[i].fields[r]={extensions:da(n.extensions)},n)}),t}UN.extractExtensionsFromSchema=zse});var Cx=P(eu=>{"use strict";f();T();m();Object.defineProperty(eu,"__esModule",{value:!0});eu.printPathArray=eu.pathToArray=eu.addPath=void 0;function Wse(e,t,n){return{prev:e,key:t,typename:n}}eu.addPath=Wse;function Xse(e){let t=[],n=e;for(;n;)t.push(n.key),n=n.prev;return t.reverse()}eu.pathToArray=Xse;function Zse(e){return e.map(t=>typeof t=="number"?"["+t.toString()+"]":"."+t).join("")}eu.printPathArray=Zse});var Bx=P($S=>{"use strict";f();T();m();function kN(e,t,n){if(typeof e=="object"&&typeof t=="object"){if(Array.isArray(e)&&Array.isArray(t))for(n=0;n{"use strict";f();T();m();Object.defineProperty(MN,"__esModule",{value:!0});MN.mergeIncrementalResult=void 0;var QS=Bx();function Ux({incrementalResult:e,executionResult:t}){var r;let n=["data",...(r=e.path)!=null?r:[]];if(e.items)for(let i of e.items)(0,QS.dset)(t,n,i),n[n.length-1]++;e.data&&(0,QS.dset)(t,n,e.data),e.errors&&(t.errors=t.errors||[],t.errors.push(...e.errors)),e.extensions&&(0,QS.dset)(t,"extensions",e.extensions),e.incremental&&e.incremental.forEach(i=>{Ux({incrementalResult:i,executionResult:t})})}MN.mergeIncrementalResult=Ux});var xx=P(Il=>{"use strict";f();T();m();Object.defineProperty(Il,"__esModule",{value:!0});Il.debugTimerEnd=Il.debugTimerStart=void 0;var Mx=new Set;function toe(e){let t=(globalThis==null?void 0:globalThis.process.env.DEBUG)||globalThis.DEBUG;(t==="1"||t!=null&&t.includes(e))&&(Mx.add(e),console.time(e))}Il.debugTimerStart=toe;function noe(e){Mx.has(e)&&console.timeEnd(e)}Il.debugTimerEnd=noe});var pa=P(Ke=>{"use strict";f();T();m();Object.defineProperty(Ke,"__esModule",{value:!0});Ke.inspect=void 0;var Ye=(Qk(),jf($k));Ye.__exportStar(Yk(),Ke);Ye.__exportStar(up(),Ke);Ye.__exportStar(rS(),Ke);Ye.__exportStar(iS(),Ke);Ye.__exportStar(rM(),Ke);Ye.__exportStar(sS(),Ke);Ye.__exportStar(TS(),Ke);Ye.__exportStar(iS(),Ke);Ye.__exportStar(IM(),Ke);Ye.__exportStar(gM(),Ke);Ye.__exportStar(CM(),Ke);Ye.__exportStar(jM(),Ke);Ye.__exportStar(GM(),Ke);Ye.__exportStar(WM(),Ke);Ye.__exportStar(ZM(),Ke);Ye.__exportStar(ex(),Ke);Ye.__exportStar(nx(),Ke);Ye.__exportStar(rx(),Ke);Ye.__exportStar(ml(),Ke);Ye.__exportStar(wS(),Ke);Ye.__exportStar(cN(),Ke);Ye.__exportStar(ax(),Ke);Ye.__exportStar(ox(),Ke);Ye.__exportStar(Hu(),Ke);Ye.__exportStar(SS(),Ke);Ye.__exportStar(ux(),Ke);Ye.__exportStar(cx(),Ke);Ye.__exportStar(lx(),Ke);Ye.__exportStar(dx(),Ke);Ye.__exportStar(OS(),Ke);Ye.__exportStar(mx(),Ke);Ye.__exportStar(Tx(),Ke);Ye.__exportStar(Nx(),Ke);Ye.__exportStar(GT(),Ke);Ye.__exportStar(hx(),Ke);Ye.__exportStar(vx(),Ke);Ye.__exportStar(nS(),Ke);Ye.__exportStar(Sx(),Ke);Ye.__exportStar(Ox(),Ke);Ye.__exportStar(bx(),Ke);Ye.__exportStar(XT(),Ke);Ye.__exportStar(Dx(),Ke);Ye.__exportStar(Px(),Ke);Ye.__exportStar(pp(),Ke);Ye.__exportStar(hS(),Ke);Ye.__exportStar(xS(),Ke);var roe=cp();Object.defineProperty(Ke,"inspect",{enumerable:!0,get:function(){return roe.inspect}});Ye.__exportStar(ul(),Ke);Ye.__exportStar(wx(),Ke);Ye.__exportStar(qS(),Ke);Ye.__exportStar(Lx(),Ke);Ye.__exportStar(Cx(),Ke);Ye.__exportStar(lp(),Ke);Ye.__exportStar(US(),Ke);Ye.__exportStar(kx(),Ke);Ye.__exportStar(xx(),Ke)});var Vx=P(xN=>{"use strict";f();T();m();Object.defineProperty(xN,"__esModule",{value:!0});xN.mergeResolvers=void 0;var ioe=pa();function qx(e,t){if(!e||Array.isArray(e)&&e.length===0)return{};if(!Array.isArray(e))return e;if(e.length===1)return e[0]||{};let n=new Array;for(let i of e)Array.isArray(i)&&(i=qx(i)),typeof i=="object"&&i&&n.push(i);let r=(0,ioe.mergeDeep)(n,!0);if(t!=null&&t.exclusions)for(let i of t.exclusions){let[a,o]=i.split(".");!o||o==="*"?delete r[a]:r[a]&&delete r[a][o]}return r}xN.mergeResolvers=qx});var YS=P(qN=>{"use strict";f();T();m();Object.defineProperty(qN,"__esModule",{value:!0});qN.mergeArguments=void 0;var jx=pa();function aoe(e,t,n){let r=soe([...t,...e].filter(jx.isSome),n);return n&&n.sort&&r.sort(jx.compareNodes),r}qN.mergeArguments=aoe;function soe(e,t){return e.reduce((n,r)=>{let i=n.findIndex(a=>a.name.value===r.name.value);return i===-1?n.concat([r]):(t!=null&&t.reverseArguments||(n[i]=r),n)},[])}});var ji=P(gl=>{"use strict";f();T();m();Object.defineProperty(gl,"__esModule",{value:!0});gl.mergeDirective=gl.mergeDirectives=void 0;var Kx=Ae(),ooe=pa();function uoe(e,t){return!!e.find(n=>n.name.value===t.name.value)}function Gx(e,t){var n;return!!((n=t==null?void 0:t[e.name.value])!=null&&n.repeatable)}function coe(e,t){return t.some(({value:n})=>n===e.value)}function $x(e,t){let n=[...t];for(let r of e){let i=n.findIndex(a=>a.name.value===r.name.value);if(i>-1){let a=n[i];if(a.value.kind==="ListValue"){let o=a.value.values,c=r.value.values;a.value.values=moe(o,c,(l,p)=>{let N=l.value;return!N||!p.some(y=>y.value===N)})}else a.value=r.value}else n.push(r)}return n}function loe(e,t){return e.map((n,r,i)=>{let a=i.findIndex(o=>o.name.value===n.name.value);if(a!==r&&!Gx(n,t)){let o=i[a];return n.arguments=$x(n.arguments,o.arguments),null}return n}).filter(ooe.isSome)}function doe(e=[],t=[],n,r){let i=n&&n.reverseDirectives,a=i?e:t,o=i?t:e,c=loe([...a],r);for(let l of o)if(uoe(c,l)&&!Gx(l,r)){let p=c.findIndex(y=>y.name.value===l.name.value),N=c[p];c[p].arguments=$x(l.arguments||[],N.arguments||[])}else c.push(l);return c}gl.mergeDirectives=doe;function poe(e,t){let n=(0,Kx.print)(Q(k({},e),{description:void 0})),r=(0,Kx.print)(Q(k({},t),{description:void 0})),i=new RegExp("(directive @w*d*)|( on .*$)","g");if(!(n.replace(i,"")===r.replace(i,"")))throw new Error(`Unable to merge GraphQL directive "${e.name.value}". +`);return i.description?Q(M({},i),{description:Q(M({},i.description),{value:i.description.value+` +`+o,block:!0})}):Q(M({},i),{description:{kind:qi.Kind.STRING,value:o,block:c}})}}}})}Wo.transformCommentsToDescriptions=CM;function BM(e){return(0,qi.isTypeSystemDefinitionNode)(e)||e.kind===qi.Kind.FIELD_DEFINITION||e.kind===qi.Kind.INPUT_VALUE_DEFINITION||e.kind===qi.Kind.ENUM_VALUE_DEFINITION}Wo.isDescribable=BM});var GM=w(aT=>{"use strict";f();N();m();Object.defineProperty(aT,"__esModule",{value:!0});aT.buildOperationNodeForField=void 0;var ct=Ae(),qM=fp(),gS=[],iT=new Map;function VM(e){gS.push(e)}function kM(){gS=[]}function MM(){iT=new Map}function Rae({schema:e,kind:t,field:n,models:r,ignore:i=[],depthLimit:a,circularReferenceDepth:o,argNames:c,selectedFields:l=!0}){kM(),MM();let p=(0,qM.getRootTypeNames)(e),T=Fae({schema:e,fieldName:n,kind:t,models:r||[],ignore:i,depthLimit:a||1/0,circularReferenceDepth:o||1,argNames:c,selectedFields:l,rootTypeNames:p});return T.variableDefinitions=[...gS],kM(),MM(),T}aT.buildOperationNodeForField=Rae;function Fae({schema:e,fieldName:t,kind:n,models:r,ignore:i,depthLimit:a,circularReferenceDepth:o,argNames:c,selectedFields:l,rootTypeNames:p}){let T=(0,qM.getDefinedRootType)(e,n),y=T.getFields()[t],g=`${t}_${n}`;if(y.args)for(let _ of y.args){let F=_.name;(!c||c.includes(F))&&VM(jM(_,F))}return{kind:ct.Kind.OPERATION_DEFINITION,operation:n,name:{kind:ct.Kind.NAME,value:g},variableDefinitions:[],selectionSet:{kind:ct.Kind.SELECTION_SET,selections:[KM({type:T,field:y,models:r,firstCall:!0,path:[],ancestors:[],ignore:i,depthLimit:a,circularReferenceDepth:o,schema:e,depth:0,argNames:c,selectedFields:l,rootTypeNames:p})]}}}function IS({parent:e,type:t,models:n,firstCall:r,path:i,ancestors:a,ignore:o,depthLimit:c,circularReferenceDepth:l,schema:p,depth:T,argNames:y,selectedFields:g,rootTypeNames:_}){if(!(typeof g=="boolean"&&T>c)){if((0,ct.isUnionType)(t)){let F=t.getTypes();return{kind:ct.Kind.SELECTION_SET,selections:F.filter(U=>!yS([...a,U],{depth:l})).map(U=>({kind:ct.Kind.INLINE_FRAGMENT,typeCondition:{kind:ct.Kind.NAMED_TYPE,name:{kind:ct.Kind.NAME,value:U.name}},selectionSet:IS({parent:t,type:U,models:n,path:i,ancestors:a,ignore:o,depthLimit:c,circularReferenceDepth:l,schema:p,depth:T,argNames:y,selectedFields:g,rootTypeNames:_})})).filter(U=>{var K,J;return((J=(K=U==null?void 0:U.selectionSet)==null?void 0:K.selections)==null?void 0:J.length)>0})}}if((0,ct.isInterfaceType)(t)){let F=Object.values(p.getTypeMap()).filter(U=>(0,ct.isObjectType)(U)&&U.getInterfaces().includes(t));return{kind:ct.Kind.SELECTION_SET,selections:F.filter(U=>!yS([...a,U],{depth:l})).map(U=>({kind:ct.Kind.INLINE_FRAGMENT,typeCondition:{kind:ct.Kind.NAMED_TYPE,name:{kind:ct.Kind.NAME,value:U.name}},selectionSet:IS({parent:t,type:U,models:n,path:i,ancestors:a,ignore:o,depthLimit:c,circularReferenceDepth:l,schema:p,depth:T,argNames:y,selectedFields:g,rootTypeNames:_})})).filter(U=>{var K,J;return((J=(K=U==null?void 0:U.selectionSet)==null?void 0:K.selections)==null?void 0:J.length)>0})}}if((0,ct.isObjectType)(t)&&!_.has(t.name)){let F=o.includes(t.name)||o.includes(`${e.name}.${i[i.length-1]}`),U=n.includes(t.name);if(!r&&U&&!F)return{kind:ct.Kind.SELECTION_SET,selections:[{kind:ct.Kind.FIELD,name:{kind:ct.Kind.NAME,value:"id"}}]};let K=t.getFields();return{kind:ct.Kind.SELECTION_SET,selections:Object.keys(K).filter(J=>!yS([...a,(0,ct.getNamedType)(K[J].type)],{depth:l})).map(J=>{let ee=typeof g=="object"?g[J]:!0;return ee?KM({type:t,field:K[J],models:n,path:[...i,J],ancestors:a,ignore:o,depthLimit:c,circularReferenceDepth:l,schema:p,depth:T,argNames:y,selectedFields:ee,rootTypeNames:_}):null}).filter(J=>{var ee,W;return J==null?!1:"selectionSet"in J?!!((W=(ee=J.selectionSet)==null?void 0:ee.selections)!=null&&W.length):!0})}}}}function jM(e,t){function n(r){return(0,ct.isListType)(r)?{kind:ct.Kind.LIST_TYPE,type:n(r.ofType)}:(0,ct.isNonNullType)(r)?{kind:ct.Kind.NON_NULL_TYPE,type:n(r.ofType)}:{kind:ct.Kind.NAMED_TYPE,name:{kind:ct.Kind.NAME,value:r.name}}}return{kind:ct.Kind.VARIABLE_DEFINITION,variable:{kind:ct.Kind.VARIABLE,name:{kind:ct.Kind.NAME,value:t||e.name}},type:n(e.type)}}function xM(e,t){return[...t,e].join("_")}function KM({type:e,field:t,models:n,firstCall:r,path:i,ancestors:a,ignore:o,depthLimit:c,circularReferenceDepth:l,schema:p,depth:T,argNames:y,selectedFields:g,rootTypeNames:_}){let F=(0,ct.getNamedType)(t.type),U=[],K=!1;if(t.args&&t.args.length&&(U=t.args.map(Te=>{let de=xM(Te.name,i);return y&&!y.includes(de)?((0,ct.isNonNullType)(Te.type)&&(K=!0),null):(r||VM(jM(Te,de)),{kind:ct.Kind.ARGUMENT,name:{kind:ct.Kind.NAME,value:Te.name},value:{kind:ct.Kind.VARIABLE,name:{kind:ct.Kind.NAME,value:xM(Te.name,i)}}})}).filter(Boolean)),K)return null;let J=[...i,t.name],ee=J.join("."),W=t.name;return iT.has(ee)&&iT.get(ee)!==t.type.toString()&&(W+=t.type.toString().replace("!","NonNull").replace("[","List").replace("]","")),iT.set(ee,t.type.toString()),!(0,ct.isScalarType)(F)&&!(0,ct.isEnumType)(F)?Q(M({kind:ct.Kind.FIELD,name:{kind:ct.Kind.NAME,value:t.name}},W!==t.name&&{alias:{kind:ct.Kind.NAME,value:W}}),{selectionSet:IS({parent:e,type:F,models:n,firstCall:r,path:J,ancestors:[...a,e],ignore:o,depthLimit:c,circularReferenceDepth:l,schema:p,depth:T+1,argNames:y,selectedFields:g,rootTypeNames:_})||void 0,arguments:U}):Q(M({kind:ct.Kind.FIELD,name:{kind:ct.Kind.NAME,value:t.name}},W!==t.name&&{alias:{kind:ct.Kind.NAME,value:W}}),{arguments:U})}function yS(e,t={depth:1}){let n=e[e.length-1];return(0,ct.isScalarType)(n)?!1:e.filter(i=>i.name===n.name).length>t.depth}});var QM=w(sT=>{"use strict";f();N();m();Object.defineProperty(sT,"__esModule",{value:!0});sT.DirectiveLocation=void 0;var $M;(function(e){e.QUERY="QUERY",e.MUTATION="MUTATION",e.SUBSCRIPTION="SUBSCRIPTION",e.FIELD="FIELD",e.FRAGMENT_DEFINITION="FRAGMENT_DEFINITION",e.FRAGMENT_SPREAD="FRAGMENT_SPREAD",e.INLINE_FRAGMENT="INLINE_FRAGMENT",e.VARIABLE_DEFINITION="VARIABLE_DEFINITION",e.SCHEMA="SCHEMA",e.SCALAR="SCALAR",e.OBJECT="OBJECT",e.FIELD_DEFINITION="FIELD_DEFINITION",e.ARGUMENT_DEFINITION="ARGUMENT_DEFINITION",e.INTERFACE="INTERFACE",e.UNION="UNION",e.ENUM="ENUM",e.ENUM_VALUE="ENUM_VALUE",e.INPUT_OBJECT="INPUT_OBJECT",e.INPUT_FIELD_DEFINITION="INPUT_FIELD_DEFINITION"})($M||(sT.DirectiveLocation=$M={}))});var Wu=w(oT=>{"use strict";f();N();m();Object.defineProperty(oT,"__esModule",{value:!0});oT.MapperKind=void 0;var YM;(function(e){e.TYPE="MapperKind.TYPE",e.SCALAR_TYPE="MapperKind.SCALAR_TYPE",e.ENUM_TYPE="MapperKind.ENUM_TYPE",e.COMPOSITE_TYPE="MapperKind.COMPOSITE_TYPE",e.OBJECT_TYPE="MapperKind.OBJECT_TYPE",e.INPUT_OBJECT_TYPE="MapperKind.INPUT_OBJECT_TYPE",e.ABSTRACT_TYPE="MapperKind.ABSTRACT_TYPE",e.UNION_TYPE="MapperKind.UNION_TYPE",e.INTERFACE_TYPE="MapperKind.INTERFACE_TYPE",e.ROOT_OBJECT="MapperKind.ROOT_OBJECT",e.QUERY="MapperKind.QUERY",e.MUTATION="MapperKind.MUTATION",e.SUBSCRIPTION="MapperKind.SUBSCRIPTION",e.DIRECTIVE="MapperKind.DIRECTIVE",e.FIELD="MapperKind.FIELD",e.COMPOSITE_FIELD="MapperKind.COMPOSITE_FIELD",e.OBJECT_FIELD="MapperKind.OBJECT_FIELD",e.ROOT_FIELD="MapperKind.ROOT_FIELD",e.QUERY_ROOT_FIELD="MapperKind.QUERY_ROOT_FIELD",e.MUTATION_ROOT_FIELD="MapperKind.MUTATION_ROOT_FIELD",e.SUBSCRIPTION_ROOT_FIELD="MapperKind.SUBSCRIPTION_ROOT_FIELD",e.INTERFACE_FIELD="MapperKind.INTERFACE_FIELD",e.INPUT_OBJECT_FIELD="MapperKind.INPUT_OBJECT_FIELD",e.ARGUMENT="MapperKind.ARGUMENT",e.ENUM_VALUE="MapperKind.ENUM_VALUE"})(YM||(oT.MapperKind=YM={}))});var _S=w(uT=>{"use strict";f();N();m();Object.defineProperty(uT,"__esModule",{value:!0});uT.getObjectTypeFromTypeMap=void 0;var Pae=Ae();function wae(e,t){if(t){let n=e[t.name];if((0,Pae.isObjectType)(n))return n}}uT.getObjectTypeFromTypeMap=wae});var OS=w(Ma=>{"use strict";f();N();m();Object.defineProperty(Ma,"__esModule",{value:!0});Ma.getBuiltInForStub=Ma.isNamedStub=Ma.createStub=Ma.createNamedStub=void 0;var pr=Ae();function vS(e,t){let n;return t==="object"?n=pr.GraphQLObjectType:t==="interface"?n=pr.GraphQLInterfaceType:n=pr.GraphQLInputObjectType,new n({name:e,fields:{_fake:{type:pr.GraphQLString}}})}Ma.createNamedStub=vS;function SS(e,t){switch(e.kind){case pr.Kind.LIST_TYPE:return new pr.GraphQLList(SS(e.type,t));case pr.Kind.NON_NULL_TYPE:return new pr.GraphQLNonNull(SS(e.type,t));default:return t==="output"?vS(e.name.value,"object"):vS(e.name.value,"input")}}Ma.createStub=SS;function Lae(e){if("getFields"in e){let t=e.getFields();for(let n in t)return t[n].name==="_fake"}return!1}Ma.isNamedStub=Lae;function Cae(e){switch(e.name){case pr.GraphQLInt.name:return pr.GraphQLInt;case pr.GraphQLFloat.name:return pr.GraphQLFloat;case pr.GraphQLString.name:return pr.GraphQLString;case pr.GraphQLBoolean.name:return pr.GraphQLBoolean;case pr.GraphQLID.name:return pr.GraphQLID;default:return e}}Ma.getBuiltInForStub=Cae});var lT=w(cT=>{"use strict";f();N();m();Object.defineProperty(cT,"__esModule",{value:!0});cT.rewireTypes=void 0;var Yn=Ae(),JM=OS();function Bae(e,t){let n=Object.create(null);for(let g in e)n[g]=e[g];let r=Object.create(null);for(let g in n){let _=n[g];if(_==null||g.startsWith("__"))continue;let F=_.name;if(!F.startsWith("__")){if(r[F]!=null){console.warn(`Duplicate schema type name ${F} found; keeping the existing one found in the schema`);continue}r[F]=_}}for(let g in r)r[g]=c(r[g]);let i=t.map(g=>a(g));return{typeMap:r,directives:i};function a(g){if((0,Yn.isSpecifiedDirective)(g))return g;let _=g.toConfig();return _.args=o(_.args),new Yn.GraphQLDirective(_)}function o(g){let _={};for(let F in g){let U=g[F],K=y(U.type);K!=null&&(U.type=K,_[F]=U)}return _}function c(g){if((0,Yn.isObjectType)(g)){let _=g.toConfig(),F=Q(M({},_),{fields:()=>l(_.fields),interfaces:()=>T(_.interfaces)});return new Yn.GraphQLObjectType(F)}else if((0,Yn.isInterfaceType)(g)){let _=g.toConfig(),F=Q(M({},_),{fields:()=>l(_.fields)});return"interfaces"in F&&(F.interfaces=()=>T(_.interfaces)),new Yn.GraphQLInterfaceType(F)}else if((0,Yn.isUnionType)(g)){let _=g.toConfig(),F=Q(M({},_),{types:()=>T(_.types)});return new Yn.GraphQLUnionType(F)}else if((0,Yn.isInputObjectType)(g)){let _=g.toConfig(),F=Q(M({},_),{fields:()=>p(_.fields)});return new Yn.GraphQLInputObjectType(F)}else if((0,Yn.isEnumType)(g)){let _=g.toConfig();return new Yn.GraphQLEnumType(_)}else if((0,Yn.isScalarType)(g)){if((0,Yn.isSpecifiedScalarType)(g))return g;let _=g.toConfig();return new Yn.GraphQLScalarType(_)}throw new Error(`Unexpected schema type: ${g}`)}function l(g){let _={};for(let F in g){let U=g[F],K=y(U.type);K!=null&&U.args&&(U.type=K,U.args=o(U.args),_[F]=U)}return _}function p(g){let _={};for(let F in g){let U=g[F],K=y(U.type);K!=null&&(U.type=K,_[F]=U)}return _}function T(g){let _=[];for(let F of g){let U=y(F);U!=null&&_.push(U)}return _}function y(g){if((0,Yn.isListType)(g)){let _=y(g.ofType);return _!=null?new Yn.GraphQLList(_):null}else if((0,Yn.isNonNullType)(g)){let _=y(g.ofType);return _!=null?new Yn.GraphQLNonNull(_):null}else if((0,Yn.isNamedType)(g)){let _=n[g.name];return _===void 0&&(_=(0,JM.isNamedStub)(g)?(0,JM.getBuiltInForStub)(g):c(g),r[_.name]=n[g.name]=_),_!=null?r[_.name]:null}return null}}cT.rewireTypes=Bae});var DS=w(xa=>{"use strict";f();N();m();Object.defineProperty(xa,"__esModule",{value:!0});xa.parseInputValueLiteral=xa.parseInputValue=xa.serializeInputValue=xa.transformInputValue=void 0;var dT=Ae(),Uae=cp();function pl(e,t,n=null,r=null){if(t==null)return t;let i=(0,dT.getNullableType)(e);if((0,dT.isLeafType)(i))return n!=null?n(i,t):t;if((0,dT.isListType)(i))return(0,Uae.asArray)(t).map(a=>pl(i.ofType,a,n,r));if((0,dT.isInputObjectType)(i)){let a=i.getFields(),o={};for(let c in t){let l=a[c];l!=null&&(o[c]=pl(l.type,t[c],n,r))}return r!=null?r(i,o):o}}xa.transformInputValue=pl;function kae(e,t){return pl(e,t,(n,r)=>{try{return n.serialize(r)}catch(i){return r}})}xa.serializeInputValue=kae;function Mae(e,t){return pl(e,t,(n,r)=>{try{return n.parseValue(r)}catch(i){return r}})}xa.parseInputValue=Mae;function xae(e,t){return pl(e,t,(n,r)=>n.parseLiteral(r,{}))}xa.parseInputValueLiteral=xae});var Nl=w(ml=>{"use strict";f();N();m();Object.defineProperty(ml,"__esModule",{value:!0});ml.correctASTNodes=ml.mapSchema=void 0;var rt=Ae(),fl=_S(),Dt=Wu(),qae=lT(),HM=DS();function Vae(e,t={}){let n=XM(WM(bS(zM(jae(bS(zM(e.getTypeMap(),e,HM.serializeInputValue),e,t,c=>(0,rt.isLeafType)(c)),e,t),e,HM.parseInputValue),e,t,c=>!(0,rt.isLeafType)(c)),e,t),e,t),r=e.getDirectives(),i=Kae(r,e,t),{typeMap:a,directives:o}=(0,qae.rewireTypes)(n,i);return new rt.GraphQLSchema(Q(M({},e.toConfig()),{query:(0,fl.getObjectTypeFromTypeMap)(a,(0,fl.getObjectTypeFromTypeMap)(n,e.getQueryType())),mutation:(0,fl.getObjectTypeFromTypeMap)(a,(0,fl.getObjectTypeFromTypeMap)(n,e.getMutationType())),subscription:(0,fl.getObjectTypeFromTypeMap)(a,(0,fl.getObjectTypeFromTypeMap)(n,e.getSubscriptionType())),types:Object.values(a),directives:o}))}ml.mapSchema=Vae;function bS(e,t,n,r=()=>!0){let i={};for(let a in e)if(!a.startsWith("__")){let o=e[a];if(o==null||!r(o)){i[a]=o;continue}let c=$ae(t,n,a);if(c==null){i[a]=o;continue}let l=c(o,t);if(l===void 0){i[a]=o;continue}i[a]=l}return i}function jae(e,t,n){let r=zae(n);return r?bS(e,t,{[Dt.MapperKind.ENUM_TYPE]:i=>{let a=i.toConfig(),o=a.values,c={};for(let l in o){let p=o[l],T=r(p,i.name,t,l);if(T===void 0)c[l]=p;else if(Array.isArray(T)){let[y,g]=T;c[y]=g===void 0?p:g}else T!==null&&(c[l]=T)}return yp(new rt.GraphQLEnumType(Q(M({},a),{values:c})))}},i=>(0,rt.isEnumType)(i)):e}function zM(e,t,n){let r=XM(e,t,{[Dt.MapperKind.ARGUMENT]:i=>{if(i.defaultValue===void 0)return i;let a=pT(e,i.type);if(a!=null)return Q(M({},i),{defaultValue:n(a,i.defaultValue)})}});return WM(r,t,{[Dt.MapperKind.INPUT_OBJECT_FIELD]:i=>{if(i.defaultValue===void 0)return i;let a=pT(r,i.type);if(a!=null)return Q(M({},i),{defaultValue:n(a,i.defaultValue)})}})}function pT(e,t){if((0,rt.isListType)(t)){let n=pT(e,t.ofType);return n!=null?new rt.GraphQLList(n):null}else if((0,rt.isNonNullType)(t)){let n=pT(e,t.ofType);return n!=null?new rt.GraphQLNonNull(n):null}else if((0,rt.isNamedType)(t)){let n=e[t.name];return n!=null?n:null}return null}function WM(e,t,n){let r={};for(let i in e)if(!i.startsWith("__")){let a=e[i];if(!(0,rt.isObjectType)(a)&&!(0,rt.isInterfaceType)(a)&&!(0,rt.isInputObjectType)(a)){r[i]=a;continue}let o=Yae(t,n,i);if(o==null){r[i]=a;continue}let c=a.toConfig(),l=c.fields,p={};for(let T in l){let y=l[T],g=o(y,T,i,t);if(g===void 0)p[T]=y;else if(Array.isArray(g)){let[_,F]=g;F.astNode!=null&&(F.astNode=Q(M({},F.astNode),{name:Q(M({},F.astNode.name),{value:_})})),p[_]=F===void 0?y:F}else g!==null&&(p[T]=g)}(0,rt.isObjectType)(a)?r[i]=yp(new rt.GraphQLObjectType(Q(M({},c),{fields:p}))):(0,rt.isInterfaceType)(a)?r[i]=yp(new rt.GraphQLInterfaceType(Q(M({},c),{fields:p}))):r[i]=yp(new rt.GraphQLInputObjectType(Q(M({},c),{fields:p})))}return r}function XM(e,t,n){let r={};for(let i in e)if(!i.startsWith("__")){let a=e[i];if(!(0,rt.isObjectType)(a)&&!(0,rt.isInterfaceType)(a)){r[i]=a;continue}let o=Jae(n);if(o==null){r[i]=a;continue}let c=a.toConfig(),l=c.fields,p={};for(let T in l){let y=l[T],g=y.args;if(g==null){p[T]=y;continue}let _=Object.keys(g);if(!_.length){p[T]=y;continue}let F={};for(let U of _){let K=g[U],J=o(K,T,i,t);if(J===void 0)F[U]=K;else if(Array.isArray(J)){let[ee,W]=J;F[ee]=W}else J!==null&&(F[U]=J)}p[T]=Q(M({},y),{args:F})}(0,rt.isObjectType)(a)?r[i]=new rt.GraphQLObjectType(Q(M({},c),{fields:p})):(0,rt.isInterfaceType)(a)?r[i]=new rt.GraphQLInterfaceType(Q(M({},c),{fields:p})):r[i]=new rt.GraphQLInputObjectType(Q(M({},c),{fields:p}))}return r}function Kae(e,t,n){let r=Hae(n);if(r==null)return e.slice();let i=[];for(let a of e){let o=r(a,t);o===void 0?i.push(a):o!==null&&i.push(o)}return i}function Gae(e,t){var i,a,o;let n=e.getType(t),r=[Dt.MapperKind.TYPE];return(0,rt.isObjectType)(n)?(r.push(Dt.MapperKind.COMPOSITE_TYPE,Dt.MapperKind.OBJECT_TYPE),t===((i=e.getQueryType())==null?void 0:i.name)?r.push(Dt.MapperKind.ROOT_OBJECT,Dt.MapperKind.QUERY):t===((a=e.getMutationType())==null?void 0:a.name)?r.push(Dt.MapperKind.ROOT_OBJECT,Dt.MapperKind.MUTATION):t===((o=e.getSubscriptionType())==null?void 0:o.name)&&r.push(Dt.MapperKind.ROOT_OBJECT,Dt.MapperKind.SUBSCRIPTION)):(0,rt.isInputObjectType)(n)?r.push(Dt.MapperKind.INPUT_OBJECT_TYPE):(0,rt.isInterfaceType)(n)?r.push(Dt.MapperKind.COMPOSITE_TYPE,Dt.MapperKind.ABSTRACT_TYPE,Dt.MapperKind.INTERFACE_TYPE):(0,rt.isUnionType)(n)?r.push(Dt.MapperKind.COMPOSITE_TYPE,Dt.MapperKind.ABSTRACT_TYPE,Dt.MapperKind.UNION_TYPE):(0,rt.isEnumType)(n)?r.push(Dt.MapperKind.ENUM_TYPE):(0,rt.isScalarType)(n)&&r.push(Dt.MapperKind.SCALAR_TYPE),r}function $ae(e,t,n){let r=Gae(e,n),i,a=[...r];for(;!i&&a.length>0;){let o=a.pop();i=t[o]}return i!=null?i:null}function Qae(e,t){var i,a,o;let n=e.getType(t),r=[Dt.MapperKind.FIELD];return(0,rt.isObjectType)(n)?(r.push(Dt.MapperKind.COMPOSITE_FIELD,Dt.MapperKind.OBJECT_FIELD),t===((i=e.getQueryType())==null?void 0:i.name)?r.push(Dt.MapperKind.ROOT_FIELD,Dt.MapperKind.QUERY_ROOT_FIELD):t===((a=e.getMutationType())==null?void 0:a.name)?r.push(Dt.MapperKind.ROOT_FIELD,Dt.MapperKind.MUTATION_ROOT_FIELD):t===((o=e.getSubscriptionType())==null?void 0:o.name)&&r.push(Dt.MapperKind.ROOT_FIELD,Dt.MapperKind.SUBSCRIPTION_ROOT_FIELD)):(0,rt.isInterfaceType)(n)?r.push(Dt.MapperKind.COMPOSITE_FIELD,Dt.MapperKind.INTERFACE_FIELD):(0,rt.isInputObjectType)(n)&&r.push(Dt.MapperKind.INPUT_OBJECT_FIELD),r}function Yae(e,t,n){let r=Qae(e,n),i,a=[...r];for(;!i&&a.length>0;){let o=a.pop();i=t[o]}return i!=null?i:null}function Jae(e){let t=e[Dt.MapperKind.ARGUMENT];return t!=null?t:null}function Hae(e){let t=e[Dt.MapperKind.DIRECTIVE];return t!=null?t:null}function zae(e){let t=e[Dt.MapperKind.ENUM_VALUE];return t!=null?t:null}function yp(e){if((0,rt.isObjectType)(e)){let t=e.toConfig();if(t.astNode!=null){let n=[];for(let r in t.fields){let i=t.fields[r];i.astNode!=null&&n.push(i.astNode)}t.astNode=Q(M({},t.astNode),{kind:rt.Kind.OBJECT_TYPE_DEFINITION,fields:n})}return t.extensionASTNodes!=null&&(t.extensionASTNodes=t.extensionASTNodes.map(n=>Q(M({},n),{kind:rt.Kind.OBJECT_TYPE_EXTENSION,fields:void 0}))),new rt.GraphQLObjectType(t)}else if((0,rt.isInterfaceType)(e)){let t=e.toConfig();if(t.astNode!=null){let n=[];for(let r in t.fields){let i=t.fields[r];i.astNode!=null&&n.push(i.astNode)}t.astNode=Q(M({},t.astNode),{kind:rt.Kind.INTERFACE_TYPE_DEFINITION,fields:n})}return t.extensionASTNodes!=null&&(t.extensionASTNodes=t.extensionASTNodes.map(n=>Q(M({},n),{kind:rt.Kind.INTERFACE_TYPE_EXTENSION,fields:void 0}))),new rt.GraphQLInterfaceType(t)}else if((0,rt.isInputObjectType)(e)){let t=e.toConfig();if(t.astNode!=null){let n=[];for(let r in t.fields){let i=t.fields[r];i.astNode!=null&&n.push(i.astNode)}t.astNode=Q(M({},t.astNode),{kind:rt.Kind.INPUT_OBJECT_TYPE_DEFINITION,fields:n})}return t.extensionASTNodes!=null&&(t.extensionASTNodes=t.extensionASTNodes.map(n=>Q(M({},n),{kind:rt.Kind.INPUT_OBJECT_TYPE_EXTENSION,fields:void 0}))),new rt.GraphQLInputObjectType(t)}else if((0,rt.isEnumType)(e)){let t=e.toConfig();if(t.astNode!=null){let n=[];for(let r in t.values){let i=t.values[r];i.astNode!=null&&n.push(i.astNode)}t.astNode=Q(M({},t.astNode),{values:n})}return t.extensionASTNodes!=null&&(t.extensionASTNodes=t.extensionASTNodes.map(n=>Q(M({},n),{values:void 0}))),new rt.GraphQLEnumType(t)}else return e}ml.correctASTNodes=yp});var ZM=w(mT=>{"use strict";f();N();m();Object.defineProperty(mT,"__esModule",{value:!0});mT.filterSchema=void 0;var fT=Ae(),Is=Wu(),Wae=Nl();function Xae({schema:e,typeFilter:t=()=>!0,fieldFilter:n=void 0,rootFieldFilter:r=void 0,objectFieldFilter:i=void 0,interfaceFieldFilter:a=void 0,inputObjectFieldFilter:o=void 0,argumentFilter:c=void 0}){return(0,Wae.mapSchema)(e,{[Is.MapperKind.QUERY]:p=>AS(p,"Query",r,c),[Is.MapperKind.MUTATION]:p=>AS(p,"Mutation",r,c),[Is.MapperKind.SUBSCRIPTION]:p=>AS(p,"Subscription",r,c),[Is.MapperKind.OBJECT_TYPE]:p=>t(p.name,p)?RS(fT.GraphQLObjectType,p,i||n,c):null,[Is.MapperKind.INTERFACE_TYPE]:p=>t(p.name,p)?RS(fT.GraphQLInterfaceType,p,a||n,c):null,[Is.MapperKind.INPUT_OBJECT_TYPE]:p=>t(p.name,p)?RS(fT.GraphQLInputObjectType,p,o||n):null,[Is.MapperKind.UNION_TYPE]:p=>t(p.name,p)?void 0:null,[Is.MapperKind.ENUM_TYPE]:p=>t(p.name,p)?void 0:null,[Is.MapperKind.SCALAR_TYPE]:p=>t(p.name,p)?void 0:null})}mT.filterSchema=Xae;function AS(e,t,n,r){if(n||r){let i=e.toConfig();for(let a in i.fields){let o=i.fields[a];if(n&&!n(t,a,i.fields[a]))delete i.fields[a];else if(r&&o.args)for(let c in o.args)r(t,a,c,o.args[c])||delete o.args[c]}return new fT.GraphQLObjectType(i)}return e}function RS(e,t,n,r){if(n||r){let i=t.toConfig();for(let a in i.fields){let o=i.fields[a];if(n&&!n(t.name,a,i.fields[a]))delete i.fields[a];else if(r&&"args"in o)for(let c in o.args)r(t.name,a,c,o.args[c])||delete o.args[c]}return new e(i)}}});var tx=w(Tl=>{"use strict";f();N();m();Object.defineProperty(Tl,"__esModule",{value:!0});Tl.healTypes=Tl.healSchema=void 0;var qa=Ae();function Zae(e){return ex(e.getTypeMap(),e.getDirectives()),e}Tl.healSchema=Zae;function ex(e,t){let n=Object.create(null);for(let p in e){let T=e[p];if(T==null||p.startsWith("__"))continue;let y=T.name;if(!y.startsWith("__")){if(n[y]!=null){console.warn(`Duplicate schema type name ${y} found; keeping the existing one found in the schema`);continue}n[y]=T}}for(let p in n){let T=n[p];e[p]=T}for(let p of t)p.args=p.args.filter(T=>(T.type=l(T.type),T.type!==null));for(let p in e){let T=e[p];!p.startsWith("__")&&p in n&&T!=null&&r(T)}for(let p in e)!p.startsWith("__")&&!(p in n)&&delete e[p];function r(p){if((0,qa.isObjectType)(p)){i(p),a(p);return}else if((0,qa.isInterfaceType)(p)){i(p),"getInterfaces"in p&&a(p);return}else if((0,qa.isUnionType)(p)){c(p);return}else if((0,qa.isInputObjectType)(p)){o(p);return}else if((0,qa.isLeafType)(p))return;throw new Error(`Unexpected schema type: ${p}`)}function i(p){let T=p.getFields();for(let[y,g]of Object.entries(T))g.args.map(_=>(_.type=l(_.type),_.type===null?null:_)).filter(Boolean),g.type=l(g.type),g.type===null&&delete T[y]}function a(p){if("getInterfaces"in p){let T=p.getInterfaces();T.push(...T.splice(0).map(y=>l(y)).filter(Boolean))}}function o(p){let T=p.getFields();for(let[y,g]of Object.entries(T))g.type=l(g.type),g.type===null&&delete T[y]}function c(p){let T=p.getTypes();T.push(...T.splice(0).map(y=>l(y)).filter(Boolean))}function l(p){if((0,qa.isListType)(p)){let T=l(p.ofType);return T!=null?new qa.GraphQLList(T):null}else if((0,qa.isNonNullType)(p)){let T=l(p.ofType);return T!=null?new qa.GraphQLNonNull(T):null}else if((0,qa.isNamedType)(p)){let T=e[p.name];if(T&&p!==T)return T}return p}}Tl.healTypes=ex});var nx=w(NT=>{"use strict";f();N();m();Object.defineProperty(NT,"__esModule",{value:!0});NT.getResolversFromSchema=void 0;var Xu=Ae();function ese(e,t){var i,a;let n=Object.create(null),r=e.getTypeMap();for(let o in r)if(!o.startsWith("__")){let c=r[o];if((0,Xu.isScalarType)(c)){if(!(0,Xu.isSpecifiedScalarType)(c)){let l=c.toConfig();delete l.astNode,n[o]=new Xu.GraphQLScalarType(l)}}else if((0,Xu.isEnumType)(c)){n[o]={};let l=c.getValues();for(let p of l)n[o][p.name]=p.value}else if((0,Xu.isInterfaceType)(c))c.resolveType!=null&&(n[o]={__resolveType:c.resolveType});else if((0,Xu.isUnionType)(c))c.resolveType!=null&&(n[o]={__resolveType:c.resolveType});else if((0,Xu.isObjectType)(c)){n[o]={},c.isTypeOf!=null&&(n[o].__isTypeOf=c.isTypeOf);let l=c.getFields();for(let p in l){let T=l[p];if(T.subscribe!=null&&(n[o][p]=n[o][p]||{},n[o][p].subscribe=T.subscribe),T.resolve!=null&&((i=T.resolve)==null?void 0:i.name)!=="defaultFieldResolver"){switch((a=T.resolve)==null?void 0:a.name){case"defaultMergedResolver":if(!t)continue;break;case"defaultFieldResolver":continue}n[o][p]=n[o][p]||{},n[o][p].resolve=T.resolve}}}}return n}NT.getResolversFromSchema=ese});var ix=w(TT=>{"use strict";f();N();m();Object.defineProperty(TT,"__esModule",{value:!0});TT.forEachField=void 0;var rx=Ae();function tse(e,t){let n=e.getTypeMap();for(let r in n){let i=n[r];if(!(0,rx.getNamedType)(i).name.startsWith("__")&&(0,rx.isObjectType)(i)){let a=i.getFields();for(let o in a){let c=a[o];t(c,r,o)}}}}TT.forEachField=tse});var ax=w(ET=>{"use strict";f();N();m();Object.defineProperty(ET,"__esModule",{value:!0});ET.forEachDefaultValue=void 0;var FS=Ae();function nse(e,t){let n=e.getTypeMap();for(let r in n){let i=n[r];if(!(0,FS.getNamedType)(i).name.startsWith("__")){if((0,FS.isObjectType)(i)){let a=i.getFields();for(let o in a){let c=a[o];for(let l of c.args)l.defaultValue=t(l.type,l.defaultValue)}}else if((0,FS.isInputObjectType)(i)){let a=i.getFields();for(let o in a){let c=a[o];c.defaultValue=t(c.type,c.defaultValue)}}}}}ET.forEachDefaultValue=nse});var LS=w(hT=>{"use strict";f();N();m();Object.defineProperty(hT,"__esModule",{value:!0});hT.addTypes=void 0;var PS=Ae(),wS=_S(),rse=lT();function ise(e,t){let n=e.toConfig(),r={};for(let c of n.types)r[c.name]=c;let i={};for(let c of n.directives)i[c.name]=c;for(let c of t)(0,PS.isNamedType)(c)?r[c.name]=c:(0,PS.isDirective)(c)&&(i[c.name]=c);let{typeMap:a,directives:o}=(0,rse.rewireTypes)(r,Object.values(i));return new PS.GraphQLSchema(Q(M({},n),{query:(0,wS.getObjectTypeFromTypeMap)(a,e.getQueryType()),mutation:(0,wS.getObjectTypeFromTypeMap)(a,e.getMutationType()),subscription:(0,wS.getObjectTypeFromTypeMap)(a,e.getSubscriptionType()),types:Object.values(a),directives:o}))}hT.addTypes=ise});var ox=w(IT=>{"use strict";f();N();m();Object.defineProperty(IT,"__esModule",{value:!0});IT.pruneSchema=void 0;var tr=Ae(),ase=oS(),sse=Wu(),ose=Nl(),use=fp();function cse(e,t={}){let{skipEmptyCompositeTypePruning:n,skipEmptyUnionPruning:r,skipPruning:i,skipUnimplementedInterfacesPruning:a,skipUnusedTypesPruning:o}=t,c=[],l=e;do{let p=lse(l);if(i){let T=[];for(let y in l.getTypeMap()){if(y.startsWith("__"))continue;let g=l.getType(y);g&&i(g)&&T.push(y)}p=sx(T,l,p)}c=[],l=(0,ose.mapSchema)(l,{[sse.MapperKind.TYPE]:T=>!p.has(T.name)&&!(0,tr.isSpecifiedScalarType)(T)?((0,tr.isUnionType)(T)||(0,tr.isInputObjectType)(T)||(0,tr.isInterfaceType)(T)||(0,tr.isObjectType)(T)||(0,tr.isScalarType)(T))&&(o||(0,tr.isUnionType)(T)&&r&&!Object.keys(T.getTypes()).length||((0,tr.isInputObjectType)(T)||(0,tr.isInterfaceType)(T)||(0,tr.isObjectType)(T))&&n&&!Object.keys(T.getFields()).length||(0,tr.isInterfaceType)(T)&&a)?T:(c.push(T.name),p.delete(T.name),null):T})}while(c.length);return l}IT.pruneSchema=cse;function lse(e){let t=[];for(let n of(0,use.getRootTypes)(e))t.push(n.name);return sx(t,e)}function sx(e,t,n=new Set){let r=new Map;for(;e.length;){let i=e.pop();if(n.has(i)&&r[i]!==!0)continue;let a=t.getType(i);if(a){if((0,tr.isUnionType)(a)&&e.push(...a.getTypes().map(o=>o.name)),(0,tr.isInterfaceType)(a)&&r[i]===!0&&(e.push(...(0,ase.getImplementingTypes)(a.name,t)),r[i]=!1),(0,tr.isEnumType)(a)&&e.push(...a.getValues().flatMap(o=>o.astNode?yT(t,o.astNode):[])),"getInterfaces"in a&&e.push(...a.getInterfaces().map(o=>o.name)),"getFields"in a){let o=a.getFields(),c=Object.entries(o);if(!c.length)continue;for(let[,l]of c){(0,tr.isObjectType)(a)&&e.push(...l.args.flatMap(T=>{let y=[(0,tr.getNamedType)(T.type).name];return T.astNode&&y.push(...yT(t,T.astNode)),y}));let p=(0,tr.getNamedType)(l.type);e.push(p.name),l.astNode&&e.push(...yT(t,l.astNode)),(0,tr.isInterfaceType)(p)&&!(p.name in r)&&(r[p.name]=!0)}}a.astNode&&e.push(...yT(t,a.astNode)),n.add(i)}}return n}function yT(e,t){var n;return((n=t.directives)!=null?n:[]).flatMap(r=>{var i,a;return(a=(i=e.getDirective(r.name.value))==null?void 0:i.args.map(o=>(0,tr.getNamedType)(o.type).name))!=null?a:[]})}});var cx=w(gT=>{"use strict";f();N();m();Object.defineProperty(gT,"__esModule",{value:!0});gT.mergeDeep=void 0;var dse=cp();function ux(e,t=!1,n=!1){let r=e[0]||{},i={};t&&Object.setPrototypeOf(i,Object.create(Object.getPrototypeOf(r)));for(let a of e)if(CS(r)&&CS(a)){if(t){let o=Object.getPrototypeOf(i),c=Object.getPrototypeOf(a);if(c)for(let l of Object.getOwnPropertyNames(c)){let p=Object.getOwnPropertyDescriptor(c,l);(0,dse.isSome)(p)&&Object.defineProperty(o,l,p)}}for(let o in a)CS(a[o])?o in i?i[o]=ux([i[o],a[o]],t,n):Object.assign(i,{[o]:a[o]}):n&&Array.isArray(i[o])?Array.isArray(a[o])?i[o].push(...a[o]):i[o].push(a[o]):Object.assign(i,{[o]:a[o]})}else if(n&&Array.isArray(r))Array.isArray(a)?r.push(...a):r.push(a);else if(n&&Array.isArray(a))return[r,...a];return i}gT.mergeDeep=ux;function CS(e){return e&&typeof e=="object"&&!Array.isArray(e)}});var lx=w(_T=>{"use strict";f();N();m();Object.defineProperty(_T,"__esModule",{value:!0});_T.parseSelectionSet=void 0;var pse=Ae();function fse(e,t){return(0,pse.parse)(e,t).definitions[0].selectionSet}_T.parseSelectionSet=fse});var dx=w(vT=>{"use strict";f();N();m();Object.defineProperty(vT,"__esModule",{value:!0});vT.getResponseKeyFromInfo=void 0;function mse(e){return e.fieldNodes[0].alias!=null?e.fieldNodes[0].alias.value:e.fieldName}vT.getResponseKeyFromInfo=mse});var px=w(Va=>{"use strict";f();N();m();Object.defineProperty(Va,"__esModule",{value:!0});Va.modifyObjectFields=Va.selectObjectFields=Va.removeObjectFields=Va.appendObjectFields=void 0;var ST=Ae(),Nse=LS(),OT=Wu(),Zu=Nl();function Tse(e,t,n){return e.getType(t)==null?(0,Nse.addTypes)(e,[new ST.GraphQLObjectType({name:t,fields:n})]):(0,Zu.mapSchema)(e,{[OT.MapperKind.OBJECT_TYPE]:r=>{if(r.name===t){let i=r.toConfig(),a=i.fields,o={};for(let c in a)o[c]=a[c];for(let c in n)o[c]=n[c];return(0,Zu.correctASTNodes)(new ST.GraphQLObjectType(Q(M({},i),{fields:o})))}}})}Va.appendObjectFields=Tse;function Ese(e,t,n){let r={};return[(0,Zu.mapSchema)(e,{[OT.MapperKind.OBJECT_TYPE]:a=>{if(a.name===t){let o=a.toConfig(),c=o.fields,l={};for(let p in c){let T=c[p];n(p,T)?r[p]=T:l[p]=T}return(0,Zu.correctASTNodes)(new ST.GraphQLObjectType(Q(M({},o),{fields:l})))}}}),r]}Va.removeObjectFields=Ese;function hse(e,t,n){let r={};return(0,Zu.mapSchema)(e,{[OT.MapperKind.OBJECT_TYPE]:i=>{if(i.name===t){let o=i.toConfig().fields;for(let c in o){let l=o[c];n(c,l)&&(r[c]=l)}}}}),r}Va.selectObjectFields=hse;function yse(e,t,n,r){let i={};return[(0,Zu.mapSchema)(e,{[OT.MapperKind.OBJECT_TYPE]:o=>{if(o.name===t){let c=o.toConfig(),l=c.fields,p={};for(let T in l){let y=l[T];n(T,y)?i[T]=y:p[T]=y}for(let T in r){let y=r[T];p[T]=y}return(0,Zu.correctASTNodes)(new ST.GraphQLObjectType(Q(M({},c),{fields:p})))}}}),i]}Va.modifyObjectFields=yse});var fx=w(DT=>{"use strict";f();N();m();Object.defineProperty(DT,"__esModule",{value:!0});DT.renameType=void 0;var Vi=Ae();function Ise(e,t){if((0,Vi.isObjectType)(e))return new Vi.GraphQLObjectType(Q(M({},e.toConfig()),{name:t,astNode:e.astNode==null?e.astNode:Q(M({},e.astNode),{name:Q(M({},e.astNode.name),{value:t})}),extensionASTNodes:e.extensionASTNodes==null?e.extensionASTNodes:e.extensionASTNodes.map(n=>Q(M({},n),{name:Q(M({},n.name),{value:t})}))}));if((0,Vi.isInterfaceType)(e))return new Vi.GraphQLInterfaceType(Q(M({},e.toConfig()),{name:t,astNode:e.astNode==null?e.astNode:Q(M({},e.astNode),{name:Q(M({},e.astNode.name),{value:t})}),extensionASTNodes:e.extensionASTNodes==null?e.extensionASTNodes:e.extensionASTNodes.map(n=>Q(M({},n),{name:Q(M({},n.name),{value:t})}))}));if((0,Vi.isUnionType)(e))return new Vi.GraphQLUnionType(Q(M({},e.toConfig()),{name:t,astNode:e.astNode==null?e.astNode:Q(M({},e.astNode),{name:Q(M({},e.astNode.name),{value:t})}),extensionASTNodes:e.extensionASTNodes==null?e.extensionASTNodes:e.extensionASTNodes.map(n=>Q(M({},n),{name:Q(M({},n.name),{value:t})}))}));if((0,Vi.isInputObjectType)(e))return new Vi.GraphQLInputObjectType(Q(M({},e.toConfig()),{name:t,astNode:e.astNode==null?e.astNode:Q(M({},e.astNode),{name:Q(M({},e.astNode.name),{value:t})}),extensionASTNodes:e.extensionASTNodes==null?e.extensionASTNodes:e.extensionASTNodes.map(n=>Q(M({},n),{name:Q(M({},n.name),{value:t})}))}));if((0,Vi.isEnumType)(e))return new Vi.GraphQLEnumType(Q(M({},e.toConfig()),{name:t,astNode:e.astNode==null?e.astNode:Q(M({},e.astNode),{name:Q(M({},e.astNode.name),{value:t})}),extensionASTNodes:e.extensionASTNodes==null?e.extensionASTNodes:e.extensionASTNodes.map(n=>Q(M({},n),{name:Q(M({},n.name),{value:t})}))}));if((0,Vi.isScalarType)(e))return new Vi.GraphQLScalarType(Q(M({},e.toConfig()),{name:t,astNode:e.astNode==null?e.astNode:Q(M({},e.astNode),{name:Q(M({},e.astNode.name),{value:t})}),extensionASTNodes:e.extensionASTNodes==null?e.extensionASTNodes:e.extensionASTNodes.map(n=>Q(M({},n),{name:Q(M({},n.name),{value:t})}))}));throw new Error(`Unknown type ${e}.`)}DT.renameType=Ise});var Tx=w(bT=>{"use strict";f();N();m();Object.defineProperty(bT,"__esModule",{value:!0});bT.mapAsyncIterator=void 0;var gse=dp();function _se(e,t,n,r){let i,a,o;r&&(o=p=>{let T=r();return(0,gse.isPromise)(T)?T.then(()=>p):p}),typeof e.return=="function"&&(i=e.return,a=p=>{let T=()=>Promise.reject(p);return i.call(e).then(T,T)});function c(p){return p.done?o?o(p):p:mx(p.value,t).then(Nx,a)}let l;if(n){let p=n;l=T=>mx(T,p).then(Nx,a)}return{next(){return e.next().then(c,l)},return(){let p=i?i.call(e).then(c,l):Promise.resolve({value:void 0,done:!0});return o?p.then(o):p},throw(p){return typeof e.throw=="function"?e.throw(p).then(c,l):Promise.reject(p).catch(a)},[Symbol.asyncIterator](){return this}}}bT.mapAsyncIterator=_se;function mx(e,t){return new Promise(n=>n(t(e)))}function Nx(e){return{value:e,done:!1}}});var Ex=w(El=>{"use strict";f();N();m();Object.defineProperty(El,"__esModule",{value:!0});El.createVariableNameGenerator=El.updateArgument=void 0;var ec=Ae(),vse=cS();function Sse(e,t,n,r,i,a,o){if(e[r]={kind:ec.Kind.ARGUMENT,name:{kind:ec.Kind.NAME,value:r},value:{kind:ec.Kind.VARIABLE,name:{kind:ec.Kind.NAME,value:i}}},t[i]={kind:ec.Kind.VARIABLE_DEFINITION,variable:{kind:ec.Kind.VARIABLE,name:{kind:ec.Kind.NAME,value:i}},type:(0,vse.astFromType)(a)},o!==void 0){n[i]=o;return}i in n&&delete n[i]}El.updateArgument=Sse;function Ose(e){let t=0;return n=>{let r;do r=`_v${(t++).toString()}_${n}`;while(r in e);return r}}El.createVariableNameGenerator=Ose});var hx=w(AT=>{"use strict";f();N();m();Object.defineProperty(AT,"__esModule",{value:!0});AT.implementsAbstractType=void 0;var BS=Ae();function Dse(e,t,n){return n==null||t==null?!1:t===n?!0:(0,BS.isCompositeType)(t)&&(0,BS.isCompositeType)(n)?(0,BS.doTypesOverlap)(e,t,n):!1}AT.implementsAbstractType=Dse});var yx=w(RT=>{"use strict";f();N();m();Object.defineProperty(RT,"__esModule",{value:!0});RT.observableToAsyncIterable=void 0;function bse(e){let t=[],n=[],r=!0,i=T=>{t.length!==0?t.shift()({value:T,done:!1}):n.push({value:T,done:!1})},a=T=>{t.length!==0?t.shift()({value:{errors:[T]},done:!1}):n.push({value:{errors:[T]},done:!1})},o=()=>{t.length!==0?t.shift()({done:!0}):n.push({done:!0})},c=()=>new Promise(T=>{if(n.length!==0){let y=n.shift();T(y)}else t.push(T)}),l=e.subscribe({next(T){i(T)},error(T){a(T)},complete(){o()}}),p=()=>{if(r){r=!1,l.unsubscribe();for(let T of t)T({value:void 0,done:!0});t.length=0,n.length=0}};return{next(){return r?c():this.return()},return(){return p(),Promise.resolve({value:void 0,done:!0})},throw(T){return p(),Promise.reject(T)},[Symbol.asyncIterator](){return this}}}RT.observableToAsyncIterable=bse});var Ix=w(FT=>{"use strict";f();N();m();Object.defineProperty(FT,"__esModule",{value:!0});FT.AccumulatorMap=void 0;var US=class extends Map{get[Symbol.toStringTag](){return"AccumulatorMap"}add(t,n){let r=this.get(t);r===void 0?this.set(t,[n]):r.push(n)}};FT.AccumulatorMap=US});var kS=w(hl=>{"use strict";f();N();m();Object.defineProperty(hl,"__esModule",{value:!0});hl.GraphQLStreamDirective=hl.GraphQLDeferDirective=void 0;var ji=Ae();hl.GraphQLDeferDirective=new ji.GraphQLDirective({name:"defer",description:"Directs the executor to defer this fragment when the `if` argument is true or undefined.",locations:[ji.DirectiveLocation.FRAGMENT_SPREAD,ji.DirectiveLocation.INLINE_FRAGMENT],args:{if:{type:new ji.GraphQLNonNull(ji.GraphQLBoolean),description:"Deferred when true or undefined.",defaultValue:!0},label:{type:ji.GraphQLString,description:"Unique name"}}});hl.GraphQLStreamDirective=new ji.GraphQLDirective({name:"stream",description:"Directs the executor to stream plural fields when the `if` argument is true or undefined.",locations:[ji.DirectiveLocation.FIELD],args:{if:{type:new ji.GraphQLNonNull(ji.GraphQLBoolean),description:"Stream when true or undefined.",defaultValue:!0},label:{type:ji.GraphQLString,description:"Unique name"},initialCount:{defaultValue:0,type:ji.GraphQLInt,description:"Number of items to return immediately"}}})});var qS=w(Xr=>{"use strict";f();N();m();Object.defineProperty(Xr,"__esModule",{value:!0});Xr.collectSubFields=Xr.getDeferValues=Xr.getFieldEntryKey=Xr.doesFragmentConditionMatch=Xr.shouldIncludeNode=Xr.collectFields=void 0;var ja=Ae(),wT=Ix(),Ase=kS(),Rse=cl();function yl(e,t,n,r,i,a,o,c){for(let l of i.selections)switch(l.kind){case ja.Kind.FIELD:{if(!PT(n,l))continue;a.add(gx(l),l);break}case ja.Kind.INLINE_FRAGMENT:{if(!PT(n,l)||!MS(e,l,r))continue;let p=xS(n,l);if(p){let T=new wT.AccumulatorMap;yl(e,t,n,r,l.selectionSet,T,o,c),o.push({label:p.label,fields:T})}else yl(e,t,n,r,l.selectionSet,a,o,c);break}case ja.Kind.FRAGMENT_SPREAD:{let p=l.name.value;if(!PT(n,l))continue;let T=xS(n,l);if(c.has(p)&&!T)continue;let y=t[p];if(!y||!MS(e,y,r))continue;if(T||c.add(p),T){let g=new wT.AccumulatorMap;yl(e,t,n,r,y.selectionSet,g,o,c),o.push({label:T.label,fields:g})}else yl(e,t,n,r,y.selectionSet,a,o,c);break}}}function Fse(e,t,n,r,i){let a=new wT.AccumulatorMap,o=[];return yl(e,t,n,r,i,a,o,new Set),{fields:a,patches:o}}Xr.collectFields=Fse;function PT(e,t){let n=(0,ja.getDirectiveValues)(ja.GraphQLSkipDirective,t,e);if((n==null?void 0:n.if)===!0)return!1;let r=(0,ja.getDirectiveValues)(ja.GraphQLIncludeDirective,t,e);return(r==null?void 0:r.if)!==!1}Xr.shouldIncludeNode=PT;function MS(e,t,n){let r=t.typeCondition;if(!r)return!0;let i=(0,ja.typeFromAST)(e,r);return i===n?!0:(0,ja.isAbstractType)(i)?e.getPossibleTypes(i).includes(n):!1}Xr.doesFragmentConditionMatch=MS;function gx(e){return e.alias?e.alias.value:e.name.value}Xr.getFieldEntryKey=gx;function xS(e,t){let n=(0,ja.getDirectiveValues)(Ase.GraphQLDeferDirective,t,e);if(n&&n.if!==!1)return{label:typeof n.label=="string"?n.label:void 0}}Xr.getDeferValues=xS;Xr.collectSubFields=(0,Rse.memoize5)(function(t,n,r,i,a){let o=new wT.AccumulatorMap,c=new Set,l=[],p={fields:o,patches:l};for(let T of a)T.selectionSet&&yl(t,n,r,i,T.selectionSet,o,l,c);return p})});var VS=w(Il=>{"use strict";f();N();m();Object.defineProperty(Il,"__esModule",{value:!0});Il.getOperationASTFromRequest=Il.getOperationASTFromDocument=void 0;var Pse=Ae(),wse=cl();function _x(e,t){let n=(0,Pse.getOperationAST)(e,t);if(!n)throw new Error(`Cannot infer operation ${t||""}`);return n}Il.getOperationASTFromDocument=_x;Il.getOperationASTFromRequest=(0,wse.memoize1)(function(t){return _x(t.document,t.operationName)})});var Ox=w(Zo=>{"use strict";f();N();m();Object.defineProperty(Zo,"__esModule",{value:!0});Zo.visitResult=Zo.visitErrors=Zo.visitData=void 0;var Xo=Ae(),jS=qS(),Lse=VS();function KS(e,t,n){if(Array.isArray(e))return e.map(r=>KS(r,t,n));if(typeof e=="object"){let r=t!=null?t(e):e;if(r!=null)for(let i in r){let a=r[i];Object.defineProperty(r,i,{value:KS(a,t,n)})}return n!=null?n(r):r}return e}Zo.visitData=KS;function Cse(e,t){return e.map(n=>t(n))}Zo.visitErrors=Cse;function Bse(e,t,n,r,i){let a=t.document.definitions.reduce((g,_)=>(_.kind===Xo.Kind.FRAGMENT_DEFINITION&&(g[_.name.value]=_),g),{}),o=t.variables||{},c={segmentInfoMap:new Map,unpathedErrors:new Set},l=e.data,p=e.errors,T=p!=null&&i!=null,y=(0,Lse.getOperationASTFromRequest)(t);return l!=null&&y!=null&&(e.data=Mse(l,y,n,a,o,r,T?p:void 0,c)),p!=null&&i&&(e.errors=Use(p,i,c)),e}Zo.visitResult=Bse;function Use(e,t,n){let r=n.segmentInfoMap,i=n.unpathedErrors,a=t.__unpathed;return e.map(o=>{let c=r.get(o),l=c==null?o:c.reduceRight((p,T)=>{let y=T.type.name,g=t[y];if(g==null)return p;let _=g[T.fieldName];return _==null?p:_(p,T.pathIndex)},o);return a&&i.has(o)?a(l):l})}function kse(e,t){switch(t.operation){case"query":return e.getQueryType();case"mutation":return e.getMutationType();case"subscription":return e.getSubscriptionType()}}function Mse(e,t,n,r,i,a,o,c){let l=kse(n,t),{fields:p}=(0,jS.collectFields)(n,r,i,l,t.selectionSet);return GS(e,l,p,n,r,i,a,0,o,c)}function GS(e,t,n,r,i,a,o,c,l,p){var ee;let T=t.getFields(),y=o==null?void 0:o[t.name],g=y==null?void 0:y.__enter,_=g!=null?g(e):e,F,U=null;if(l!=null){F=qse(l,c),U=F.errorMap;for(let W of F.unpathedErrors)p.unpathedErrors.add(W)}for(let[W,Te]of n){let de=Te[0].name.value,we=(ee=T[de])==null?void 0:ee.type;if(we==null)switch(de){case"__typename":we=Xo.TypeNameMetaFieldDef.type;break;case"__schema":we=Xo.SchemaMetaFieldDef.type;break;case"__type":we=Xo.TypeMetaFieldDef.type;break}let qe=c+1,et;U&&(et=U[W],et!=null&&delete U[W],Vse(t,de,qe,et,p));let X=Sx(e[W],we,Te,r,i,a,o,qe,et,p);vx(_,W,X,y,de)}let K=_.__typename;if(K!=null&&vx(_,"__typename",K,y,"__typename"),U)for(let W in U){let Te=U[W];for(let de of Te)p.unpathedErrors.add(de)}let J=y==null?void 0:y.__leave;return J!=null?J(_):_}function vx(e,t,n,r,i){if(r==null){e[t]=n;return}let a=r[i];if(a==null){e[t]=n;return}let o=a(n);if(o===void 0){delete e[t];return}e[t]=o}function xse(e,t,n,r,i,a,o,c,l,p){return e.map(T=>Sx(T,t,n,r,i,a,o,c+1,l,p))}function Sx(e,t,n,r,i,a,o,c,l=[],p){if(e==null)return e;let T=(0,Xo.getNullableType)(t);if((0,Xo.isListType)(T))return xse(e,T.ofType,n,r,i,a,o,c,l,p);if((0,Xo.isAbstractType)(T)){let _=r.getType(e.__typename),{fields:F}=(0,jS.collectSubFields)(r,i,a,_,n);return GS(e,_,F,r,i,a,o,c,l,p)}else if((0,Xo.isObjectType)(T)){let{fields:_}=(0,jS.collectSubFields)(r,i,a,T,n);return GS(e,T,_,r,i,a,o,c,l,p)}let y=o==null?void 0:o[T.name];if(y==null)return e;let g=y(e);return g===void 0?e:g}function qse(e,t){var i;let n=Object.create(null),r=new Set;for(let a of e){let o=(i=a.path)==null?void 0:i[t];if(o==null){r.add(a);continue}o in n?n[o].push(a):n[o]=[a]}return{errorMap:n,unpathedErrors:r}}function Vse(e,t,n,r=[],i){for(let a of r){let o={type:e,fieldName:t,pathIndex:n},c=i.segmentInfoMap.get(a);c==null?i.segmentInfoMap.set(a,[o]):c.push(o)}}});var Dx=w(LT=>{"use strict";f();N();m();Object.defineProperty(LT,"__esModule",{value:!0});LT.valueMatchesCriteria=void 0;function $S(e,t){return e==null?e===t:Array.isArray(e)?Array.isArray(t)&&e.every((n,r)=>$S(n,t[r])):typeof e=="object"?typeof t=="object"&&t&&Object.keys(t).every(n=>$S(e[n],t[n])):t instanceof RegExp?t.test(e):e===t}LT.valueMatchesCriteria=$S});var bx=w(CT=>{"use strict";f();N();m();Object.defineProperty(CT,"__esModule",{value:!0});CT.isAsyncIterable=void 0;function jse(e){return(e==null?void 0:e[Symbol.asyncIterator])!=null}CT.isAsyncIterable=jse});var Ax=w(BT=>{"use strict";f();N();m();Object.defineProperty(BT,"__esModule",{value:!0});BT.isDocumentNode=void 0;var Kse=Ae();function Gse(e){return e&&typeof e=="object"&&"kind"in e&&e.kind===Kse.Kind.DOCUMENT}BT.isDocumentNode=Gse});var Rx=w(()=>{"use strict";f();N();m()});var Lx=w(eu=>{"use strict";f();N();m();Object.defineProperty(eu,"__esModule",{value:!0});eu.withCancel=eu.getAsyncIterableWithCancel=eu.getAsyncIteratorWithCancel=void 0;var $se=cl();function Qse(e){return Si(this,null,function*(){return{value:e,done:!0}})}var Fx=(0,$se.memoize2)(function(t,n){return function(...i){return Reflect.apply(n,t,i)}});function Px(e,t){return new Proxy(e,{has(n,r){return r==="return"?!0:Reflect.has(n,r)},get(n,r,i){let a=Reflect.get(n,r,i);if(r==="return"){let o=a||Qse;return function(l){return Si(this,null,function*(){let p=yield t(l);return Reflect.apply(o,n,[p])})}}else if(typeof a=="function")return Fx(n,a);return a}})}eu.getAsyncIteratorWithCancel=Px;function wx(e,t){return new Proxy(e,{get(n,r,i){let a=Reflect.get(n,r,i);return Symbol.asyncIterator===r?function(){let c=Reflect.apply(a,n,[]);return Px(c,t)}:typeof a=="function"?Fx(n,a):a}})}eu.getAsyncIterableWithCancel=wx;eu.withCancel=wx});var Cx=w(UT=>{"use strict";f();N();m();Object.defineProperty(UT,"__esModule",{value:!0});UT.fixSchemaAst=void 0;var Yse=Ae(),Jse=TS();function Hse(e,t){let n=(0,Jse.getDocumentNodeFromSchema)(e);return(0,Yse.buildASTSchema)(n,M({},t||{}))}function zse(e,t){let n;return(!e.astNode||!e.extensionASTNodes)&&(n=Hse(e,t)),!e.astNode&&(n!=null&&n.astNode)&&(e.astNode=n.astNode),!e.extensionASTNodes&&(n!=null&&n.astNode)&&(e.extensionASTNodes=n.extensionASTNodes),e}UT.fixSchemaAst=zse});var Bx=w(kT=>{"use strict";f();N();m();Object.defineProperty(kT,"__esModule",{value:!0});kT.extractExtensionsFromSchema=void 0;var gs=Wu(),Wse=Nl();function da(e={}){let t=M({},e),n=t.directives;if(n!=null)for(let r in n){let i=n[r];Array.isArray(i)||(n[r]=[i])}return t}function Xse(e){let t={schemaExtensions:da(e.extensions),types:{}};return(0,Wse.mapSchema)(e,{[gs.MapperKind.OBJECT_TYPE]:n=>(t.types[n.name]={fields:{},type:"object",extensions:da(n.extensions)},n),[gs.MapperKind.INTERFACE_TYPE]:n=>(t.types[n.name]={fields:{},type:"interface",extensions:da(n.extensions)},n),[gs.MapperKind.FIELD]:(n,r,i)=>{t.types[i].fields[r]={arguments:{},extensions:da(n.extensions)};let a=n.args;if(a!=null)for(let o in a)t.types[i].fields[r].arguments[o]=da(a[o].extensions);return n},[gs.MapperKind.ENUM_TYPE]:n=>(t.types[n.name]={values:{},type:"enum",extensions:da(n.extensions)},n),[gs.MapperKind.ENUM_VALUE]:(n,r,i,a)=>(t.types[r].values[a]=da(n.extensions),n),[gs.MapperKind.SCALAR_TYPE]:n=>(t.types[n.name]={type:"scalar",extensions:da(n.extensions)},n),[gs.MapperKind.UNION_TYPE]:n=>(t.types[n.name]={type:"union",extensions:da(n.extensions)},n),[gs.MapperKind.INPUT_OBJECT_TYPE]:n=>(t.types[n.name]={fields:{},type:"input",extensions:da(n.extensions)},n),[gs.MapperKind.INPUT_OBJECT_FIELD]:(n,r,i)=>(t.types[i].fields[r]={extensions:da(n.extensions)},n)}),t}kT.extractExtensionsFromSchema=Xse});var Ux=w(tu=>{"use strict";f();N();m();Object.defineProperty(tu,"__esModule",{value:!0});tu.printPathArray=tu.pathToArray=tu.addPath=void 0;function Zse(e,t,n){return{prev:e,key:t,typename:n}}tu.addPath=Zse;function eoe(e){let t=[],n=e;for(;n;)t.push(n.key),n=n.prev;return t.reverse()}tu.pathToArray=eoe;function toe(e){return e.map(t=>typeof t=="number"?"["+t.toString()+"]":"."+t).join("")}tu.printPathArray=toe});var kx=w(QS=>{"use strict";f();N();m();function MT(e,t,n){if(typeof e=="object"&&typeof t=="object"){if(Array.isArray(e)&&Array.isArray(t))for(n=0;n{"use strict";f();N();m();Object.defineProperty(xT,"__esModule",{value:!0});xT.mergeIncrementalResult=void 0;var YS=kx();function Mx({incrementalResult:e,executionResult:t}){var r;let n=["data",...(r=e.path)!=null?r:[]];if(e.items)for(let i of e.items)(0,YS.dset)(t,n,i),n[n.length-1]++;e.data&&(0,YS.dset)(t,n,e.data),e.errors&&(t.errors=t.errors||[],t.errors.push(...e.errors)),e.extensions&&(0,YS.dset)(t,"extensions",e.extensions),e.incremental&&e.incremental.forEach(i=>{Mx({incrementalResult:i,executionResult:t})})}xT.mergeIncrementalResult=Mx});var Vx=w(gl=>{"use strict";f();N();m();Object.defineProperty(gl,"__esModule",{value:!0});gl.debugTimerEnd=gl.debugTimerStart=void 0;var qx=new Set;function roe(e){let t=(globalThis==null?void 0:globalThis.process.env.DEBUG)||globalThis.DEBUG;(t==="1"||t!=null&&t.includes(e))&&(qx.add(e),console.time(e))}gl.debugTimerStart=roe;function ioe(e){qx.has(e)&&console.timeEnd(e)}gl.debugTimerEnd=ioe});var pa=w(Ke=>{"use strict";f();N();m();Object.defineProperty(Ke,"__esModule",{value:!0});Ke.inspect=void 0;var Ye=(Jk(),Kf(Yk));Ye.__exportStar(Hk(),Ke);Ye.__exportStar(cp(),Ke);Ye.__exportStar(iS(),Ke);Ye.__exportStar(aS(),Ke);Ye.__exportStar(aM(),Ke);Ye.__exportStar(oS(),Ke);Ye.__exportStar(TS(),Ke);Ye.__exportStar(aS(),Ke);Ye.__exportStar(_M(),Ke);Ye.__exportStar(vM(),Ke);Ye.__exportStar(UM(),Ke);Ye.__exportStar(GM(),Ke);Ye.__exportStar(QM(),Ke);Ye.__exportStar(ZM(),Ke);Ye.__exportStar(tx(),Ke);Ye.__exportStar(nx(),Ke);Ye.__exportStar(ix(),Ke);Ye.__exportStar(ax(),Ke);Ye.__exportStar(Nl(),Ke);Ye.__exportStar(LS(),Ke);Ye.__exportStar(lT(),Ke);Ye.__exportStar(ox(),Ke);Ye.__exportStar(cx(),Ke);Ye.__exportStar(Wu(),Ke);Ye.__exportStar(OS(),Ke);Ye.__exportStar(lx(),Ke);Ye.__exportStar(dx(),Ke);Ye.__exportStar(px(),Ke);Ye.__exportStar(fx(),Ke);Ye.__exportStar(DS(),Ke);Ye.__exportStar(Tx(),Ke);Ye.__exportStar(Ex(),Ke);Ye.__exportStar(hx(),Ke);Ye.__exportStar($N(),Ke);Ye.__exportStar(yx(),Ke);Ye.__exportStar(Ox(),Ke);Ye.__exportStar(rS(),Ke);Ye.__exportStar(Dx(),Ke);Ye.__exportStar(bx(),Ke);Ye.__exportStar(Ax(),Ke);Ye.__exportStar(ZN(),Ke);Ye.__exportStar(Rx(),Ke);Ye.__exportStar(Lx(),Ke);Ye.__exportStar(fp(),Ke);Ye.__exportStar(hS(),Ke);Ye.__exportStar(qS(),Ke);var aoe=lp();Object.defineProperty(Ke,"inspect",{enumerable:!0,get:function(){return aoe.inspect}});Ye.__exportStar(cl(),Ke);Ye.__exportStar(Cx(),Ke);Ye.__exportStar(VS(),Ke);Ye.__exportStar(Bx(),Ke);Ye.__exportStar(Ux(),Ke);Ye.__exportStar(dp(),Ke);Ye.__exportStar(kS(),Ke);Ye.__exportStar(xx(),Ke);Ye.__exportStar(Vx(),Ke)});var Kx=w(qT=>{"use strict";f();N();m();Object.defineProperty(qT,"__esModule",{value:!0});qT.mergeResolvers=void 0;var soe=pa();function jx(e,t){if(!e||Array.isArray(e)&&e.length===0)return{};if(!Array.isArray(e))return e;if(e.length===1)return e[0]||{};let n=new Array;for(let i of e)Array.isArray(i)&&(i=jx(i)),typeof i=="object"&&i&&n.push(i);let r=(0,soe.mergeDeep)(n,!0);if(t!=null&&t.exclusions)for(let i of t.exclusions){let[a,o]=i.split(".");!o||o==="*"?delete r[a]:r[a]&&delete r[a][o]}return r}qT.mergeResolvers=jx});var JS=w(VT=>{"use strict";f();N();m();Object.defineProperty(VT,"__esModule",{value:!0});VT.mergeArguments=void 0;var Gx=pa();function ooe(e,t,n){let r=uoe([...t,...e].filter(Gx.isSome),n);return n&&n.sort&&r.sort(Gx.compareNodes),r}VT.mergeArguments=ooe;function uoe(e,t){return e.reduce((n,r)=>{let i=n.findIndex(a=>a.name.value===r.name.value);return i===-1?n.concat([r]):(t!=null&&t.reverseArguments||(n[i]=r),n)},[])}});var Ki=w(_l=>{"use strict";f();N();m();Object.defineProperty(_l,"__esModule",{value:!0});_l.mergeDirective=_l.mergeDirectives=void 0;var $x=Ae(),coe=pa();function loe(e,t){return!!e.find(n=>n.name.value===t.name.value)}function Qx(e,t){var n;return!!((n=t==null?void 0:t[e.name.value])!=null&&n.repeatable)}function doe(e,t){return t.some(({value:n})=>n===e.value)}function Yx(e,t){let n=[...t];for(let r of e){let i=n.findIndex(a=>a.name.value===r.name.value);if(i>-1){let a=n[i];if(a.value.kind==="ListValue"){let o=a.value.values,c=r.value.values;a.value.values=Toe(o,c,(l,p)=>{let T=l.value;return!T||!p.some(y=>y.value===T)})}else a.value=r.value}else n.push(r)}return n}function poe(e,t){return e.map((n,r,i)=>{let a=i.findIndex(o=>o.name.value===n.name.value);if(a!==r&&!Qx(n,t)){let o=i[a];return n.arguments=Yx(n.arguments,o.arguments),null}return n}).filter(coe.isSome)}function foe(e=[],t=[],n,r){let i=n&&n.reverseDirectives,a=i?e:t,o=i?t:e,c=poe([...a],r);for(let l of o)if(loe(c,l)&&!Qx(l,r)){let p=c.findIndex(y=>y.name.value===l.name.value),T=c[p];c[p].arguments=Yx(l.arguments||[],T.arguments||[])}else c.push(l);return c}_l.mergeDirectives=foe;function moe(e,t){let n=(0,$x.print)(Q(M({},e),{description:void 0})),r=(0,$x.print)(Q(M({},t),{description:void 0})),i=new RegExp("(directive @w*d*)|( on .*$)","g");if(!(n.replace(i,"")===r.replace(i,"")))throw new Error(`Unable to merge GraphQL directive "${e.name.value}". Existing directive: ${r} Received directive: - ${n}`)}function foe(e,t){return t?(poe(e,t),Q(k({},e),{locations:[...t.locations,...e.locations.filter(n=>!coe(n,t.locations))]})):e}gl.mergeDirective=foe;function moe(e,t,n){return e.concat(t.filter(r=>n(r,e)))}});var JS=P(VN=>{"use strict";f();T();m();Object.defineProperty(VN,"__esModule",{value:!0});VN.mergeEnumValues=void 0;var Toe=ji(),Noe=pa();function hoe(e,t,n,r){if(n!=null&&n.consistentEnumMerge){let o=[];e&&o.push(...e),e=t,t=o}let i=new Map;if(e)for(let o of e)i.set(o.name.value,o);if(t)for(let o of t){let c=o.name.value;if(i.has(c)){let l=i.get(c);l.description=o.description||l.description,l.directives=(0,Toe.mergeDirectives)(o.directives,l.directives,r)}else i.set(c,o)}let a=[...i.values()];return n&&n.sort&&a.sort(Noe.compareNodes),a}VN.mergeEnumValues=hoe});var HS=P(jN=>{"use strict";f();T();m();Object.defineProperty(jN,"__esModule",{value:!0});jN.mergeEnum=void 0;var Eoe=Ae(),yoe=ji(),Ioe=JS();function goe(e,t,n,r){return t?{name:e.name,description:e.description||t.description,kind:n!=null&&n.convertExtensions||e.kind==="EnumTypeDefinition"||t.kind==="EnumTypeDefinition"?"EnumTypeDefinition":"EnumTypeExtension",loc:e.loc,directives:(0,yoe.mergeDirectives)(e.directives,t.directives,n,r),values:(0,Ioe.mergeEnumValues)(e.values,t.values,n)}:n!=null&&n.convertExtensions?Q(k({},e),{kind:Eoe.Kind.ENUM_TYPE_DEFINITION}):e}jN.mergeEnum=goe});var KN=P(Vn=>{"use strict";f();T();m();Object.defineProperty(Vn,"__esModule",{value:!0});Vn.defaultStringComparator=Vn.CompareVal=Vn.printTypeNode=Vn.isNonNullTypeNode=Vn.isListTypeNode=Vn.isWrappingTypeNode=Vn.extractType=Vn.isSourceTypes=Vn.isStringTypes=void 0;var yp=Ae();function _oe(e){return typeof e=="string"}Vn.isStringTypes=_oe;function voe(e){return e instanceof yp.Source}Vn.isSourceTypes=voe;function Soe(e){let t=e;for(;t.kind===yp.Kind.LIST_TYPE||t.kind==="NonNullType";)t=t.type;return t}Vn.extractType=Soe;function Ooe(e){return e.kind!==yp.Kind.NAMED_TYPE}Vn.isWrappingTypeNode=Ooe;function Qx(e){return e.kind===yp.Kind.LIST_TYPE}Vn.isListTypeNode=Qx;function Yx(e){return e.kind===yp.Kind.NON_NULL_TYPE}Vn.isNonNullTypeNode=Yx;function zS(e){return Qx(e)?`[${zS(e.type)}]`:Yx(e)?`${zS(e.type)}!`:e.name.value}Vn.printTypeNode=zS;var Zu;(function(e){e[e.A_SMALLER_THAN_B=-1]="A_SMALLER_THAN_B",e[e.A_EQUALS_B=0]="A_EQUALS_B",e[e.A_GREATER_THAN_B=1]="A_GREATER_THAN_B"})(Zu=Vn.CompareVal||(Vn.CompareVal={}));function boe(e,t){return e==null&&t==null?Zu.A_EQUALS_B:e==null?Zu.A_SMALLER_THAN_B:t==null?Zu.A_GREATER_THAN_B:et?Zu.A_GREATER_THAN_B:Zu.A_EQUALS_B}Vn.defaultStringComparator=boe});var gp=P(GN=>{"use strict";f();T();m();Object.defineProperty(GN,"__esModule",{value:!0});GN.mergeFields=void 0;var Zr=KN(),Doe=ji(),Aoe=pa(),Roe=YS();function Foe(e,t){let n=e.findIndex(r=>r.name.value===t.name.value);return[n>-1?e[n]:null,n]}function Poe(e,t,n,r,i){let a=[];if(n!=null&&a.push(...n),t!=null)for(let o of t){let[c,l]=Foe(a,o);if(c&&!(r!=null&&r.ignoreFieldConflicts)){let p=(r==null?void 0:r.onFieldTypeConflict)&&r.onFieldTypeConflict(c,o,e,r==null?void 0:r.throwOnConflict)||woe(e,c,o,r==null?void 0:r.throwOnConflict);p.arguments=(0,Roe.mergeArguments)(o.arguments||[],c.arguments||[],r),p.directives=(0,Doe.mergeDirectives)(o.directives,c.directives,r,i),p.description=o.description||c.description,a[l]=p}else a.push(o)}if(r&&r.sort&&a.sort(Aoe.compareNodes),r&&r.exclusions){let o=r.exclusions;return a.filter(c=>!o.includes(`${e.name.value}.${c.name.value}`))}return a}GN.mergeFields=Poe;function woe(e,t,n,r=!1){let i=(0,Zr.printTypeNode)(t.type),a=(0,Zr.printTypeNode)(n.type);if(i!==a){let o=(0,Zr.extractType)(t.type),c=(0,Zr.extractType)(n.type);if(o.name.value!==c.name.value)throw new Error(`Field "${n.name.value}" already defined with a different type. Declared as "${o.name.value}", but you tried to override with "${c.name.value}"`);if(!Ip(t.type,n.type,!r))throw new Error(`Field '${e.name.value}.${t.name.value}' changed type from '${i}' to '${a}'`)}return(0,Zr.isNonNullTypeNode)(n.type)&&!(0,Zr.isNonNullTypeNode)(t.type)&&(t.type=n.type),t}function Ip(e,t,n=!1){if(!(0,Zr.isWrappingTypeNode)(e)&&!(0,Zr.isWrappingTypeNode)(t))return e.toString()===t.toString();if((0,Zr.isNonNullTypeNode)(t)){let r=(0,Zr.isNonNullTypeNode)(e)?e.type:e;return Ip(r,t.type)}return(0,Zr.isNonNullTypeNode)(e)?Ip(t,e,n):(0,Zr.isListTypeNode)(e)?(0,Zr.isListTypeNode)(t)&&Ip(e.type,t.type)||(0,Zr.isNonNullTypeNode)(t)&&Ip(e,t.type):!1}});var WS=P($N=>{"use strict";f();T();m();Object.defineProperty($N,"__esModule",{value:!0});$N.mergeInputType=void 0;var Loe=Ae(),Coe=gp(),Boe=ji();function Uoe(e,t,n,r){if(t)try{return{name:e.name,description:e.description||t.description,kind:n!=null&&n.convertExtensions||e.kind==="InputObjectTypeDefinition"||t.kind==="InputObjectTypeDefinition"?"InputObjectTypeDefinition":"InputObjectTypeExtension",loc:e.loc,fields:(0,Coe.mergeFields)(e,e.fields,t.fields,n),directives:(0,Boe.mergeDirectives)(e.directives,t.directives,n,r)}}catch(i){throw new Error(`Unable to merge GraphQL input type "${e.name.value}": ${i.message}`)}return n!=null&&n.convertExtensions?Q(k({},e),{kind:Loe.Kind.INPUT_OBJECT_TYPE_DEFINITION}):e}$N.mergeInputType=Uoe});var _p=P(QN=>{"use strict";f();T();m();Object.defineProperty(QN,"__esModule",{value:!0});QN.mergeNamedTypeArray=void 0;var koe=pa();function Moe(e,t){return!!e.find(n=>n.name.value===t.name.value)}function xoe(e=[],t=[],n={}){let r=[...t,...e.filter(i=>!Moe(t,i))];return n&&n.sort&&r.sort(koe.compareNodes),r}QN.mergeNamedTypeArray=xoe});var XS=P(YN=>{"use strict";f();T();m();Object.defineProperty(YN,"__esModule",{value:!0});YN.mergeInterface=void 0;var qoe=Ae(),Voe=gp(),joe=ji(),Koe=_p();function Goe(e,t,n,r){if(t)try{return{name:e.name,description:e.description||t.description,kind:n!=null&&n.convertExtensions||e.kind==="InterfaceTypeDefinition"||t.kind==="InterfaceTypeDefinition"?"InterfaceTypeDefinition":"InterfaceTypeExtension",loc:e.loc,fields:(0,Voe.mergeFields)(e,e.fields,t.fields,n),directives:(0,joe.mergeDirectives)(e.directives,t.directives,n,r),interfaces:e.interfaces?(0,Koe.mergeNamedTypeArray)(e.interfaces,t.interfaces,n):void 0}}catch(i){throw new Error(`Unable to merge GraphQL interface "${e.name.value}": ${i.message}`)}return n!=null&&n.convertExtensions?Q(k({},e),{kind:qoe.Kind.INTERFACE_TYPE_DEFINITION}):e}YN.mergeInterface=Goe});var ZS=P(JN=>{"use strict";f();T();m();Object.defineProperty(JN,"__esModule",{value:!0});JN.mergeType=void 0;var $oe=Ae(),Qoe=gp(),Yoe=ji(),Joe=_p();function Hoe(e,t,n,r){if(t)try{return{name:e.name,description:e.description||t.description,kind:n!=null&&n.convertExtensions||e.kind==="ObjectTypeDefinition"||t.kind==="ObjectTypeDefinition"?"ObjectTypeDefinition":"ObjectTypeExtension",loc:e.loc,fields:(0,Qoe.mergeFields)(e,e.fields,t.fields,n),directives:(0,Yoe.mergeDirectives)(e.directives,t.directives,n,r),interfaces:(0,Joe.mergeNamedTypeArray)(e.interfaces,t.interfaces,n)}}catch(i){throw new Error(`Unable to merge GraphQL type "${e.name.value}": ${i.message}`)}return n!=null&&n.convertExtensions?Q(k({},e),{kind:$oe.Kind.OBJECT_TYPE_DEFINITION}):e}JN.mergeType=Hoe});var eO=P(HN=>{"use strict";f();T();m();Object.defineProperty(HN,"__esModule",{value:!0});HN.mergeScalar=void 0;var zoe=Ae(),Woe=ji();function Xoe(e,t,n,r){return t?{name:e.name,description:e.description||t.description,kind:n!=null&&n.convertExtensions||e.kind==="ScalarTypeDefinition"||t.kind==="ScalarTypeDefinition"?"ScalarTypeDefinition":"ScalarTypeExtension",loc:e.loc,directives:(0,Woe.mergeDirectives)(e.directives,t.directives,n,r)}:n!=null&&n.convertExtensions?Q(k({},e),{kind:zoe.Kind.SCALAR_TYPE_DEFINITION}):e}HN.mergeScalar=Xoe});var nO=P(zN=>{"use strict";f();T();m();Object.defineProperty(zN,"__esModule",{value:!0});zN.mergeUnion=void 0;var tO=Ae(),Zoe=ji(),eue=_p();function tue(e,t,n,r){return t?{name:e.name,description:e.description||t.description,directives:(0,Zoe.mergeDirectives)(e.directives,t.directives,n,r),kind:n!=null&&n.convertExtensions||e.kind==="UnionTypeDefinition"||t.kind==="UnionTypeDefinition"?tO.Kind.UNION_TYPE_DEFINITION:tO.Kind.UNION_TYPE_EXTENSION,loc:e.loc,types:(0,eue.mergeNamedTypeArray)(e.types,t.types,n)}:n!=null&&n.convertExtensions?Q(k({},e),{kind:tO.Kind.UNION_TYPE_DEFINITION}):e}zN.mergeUnion=tue});var rO=P(ec=>{"use strict";f();T();m();Object.defineProperty(ec,"__esModule",{value:!0});ec.mergeSchemaDefs=ec.DEFAULT_OPERATION_TYPE_NAME_MAP=void 0;var vp=Ae(),nue=ji();ec.DEFAULT_OPERATION_TYPE_NAME_MAP={query:"Query",mutation:"Mutation",subscription:"Subscription"};function rue(e=[],t=[]){let n=[];for(let r in ec.DEFAULT_OPERATION_TYPE_NAME_MAP){let i=e.find(a=>a.operation===r)||t.find(a=>a.operation===r);i&&n.push(i)}return n}function iue(e,t,n,r){return t?{kind:e.kind===vp.Kind.SCHEMA_DEFINITION||t.kind===vp.Kind.SCHEMA_DEFINITION?vp.Kind.SCHEMA_DEFINITION:vp.Kind.SCHEMA_EXTENSION,description:e.description||t.description,directives:(0,nue.mergeDirectives)(e.directives,t.directives,n,r),operationTypes:rue(e.operationTypes,t.operationTypes)}:n!=null&&n.convertExtensions?Q(k({},e),{kind:vp.Kind.SCHEMA_DEFINITION}):e}ec.mergeSchemaDefs=iue});var iO=P(Ka=>{"use strict";f();T();m();Object.defineProperty(Ka,"__esModule",{value:!0});Ka.mergeGraphQLNodes=Ka.isNamedDefinitionNode=Ka.schemaDefSymbol=void 0;var Ur=Ae(),aue=ZS(),sue=HS(),oue=eO(),uue=nO(),cue=WS(),lue=XS(),due=ji(),pue=rO(),fue=pa();Ka.schemaDefSymbol="SCHEMA_DEF_SYMBOL";function Jx(e){return"name"in e}Ka.isNamedDefinitionNode=Jx;function mue(e,t,n={}){var i,a,o;let r=n;for(let c of e)if(Jx(c)){let l=(i=c.name)==null?void 0:i.value;if(t!=null&&t.commentDescriptions&&(0,fue.collectComment)(c),l==null)continue;if((a=t==null?void 0:t.exclusions)!=null&&a.includes(l+".*")||(o=t==null?void 0:t.exclusions)!=null&&o.includes(l))delete r[l];else switch(c.kind){case Ur.Kind.OBJECT_TYPE_DEFINITION:case Ur.Kind.OBJECT_TYPE_EXTENSION:r[l]=(0,aue.mergeType)(c,r[l],t,n);break;case Ur.Kind.ENUM_TYPE_DEFINITION:case Ur.Kind.ENUM_TYPE_EXTENSION:r[l]=(0,sue.mergeEnum)(c,r[l],t,n);break;case Ur.Kind.UNION_TYPE_DEFINITION:case Ur.Kind.UNION_TYPE_EXTENSION:r[l]=(0,uue.mergeUnion)(c,r[l],t,n);break;case Ur.Kind.SCALAR_TYPE_DEFINITION:case Ur.Kind.SCALAR_TYPE_EXTENSION:r[l]=(0,oue.mergeScalar)(c,r[l],t,n);break;case Ur.Kind.INPUT_OBJECT_TYPE_DEFINITION:case Ur.Kind.INPUT_OBJECT_TYPE_EXTENSION:r[l]=(0,cue.mergeInputType)(c,r[l],t,n);break;case Ur.Kind.INTERFACE_TYPE_DEFINITION:case Ur.Kind.INTERFACE_TYPE_EXTENSION:r[l]=(0,lue.mergeInterface)(c,r[l],t,n);break;case Ur.Kind.DIRECTIVE_DEFINITION:r[l]=(0,due.mergeDirective)(c,r[l]);break}}else(c.kind===Ur.Kind.SCHEMA_DEFINITION||c.kind===Ur.Kind.SCHEMA_EXTENSION)&&(r[Ka.schemaDefSymbol]=(0,pue.mergeSchemaDefs)(c,r[Ka.schemaDefSymbol],t));return r}Ka.mergeGraphQLNodes=mue});var Wx=P(Ol=>{"use strict";f();T();m();Object.defineProperty(Ol,"__esModule",{value:!0});Ol.mergeGraphQLTypes=Ol.mergeTypeDefs=void 0;var Ki=Ae(),aO=KN(),_l=iO(),Sl=pa(),Hx=rO();function Tue(e,t){(0,Sl.resetComments)();let n={kind:Ki.Kind.DOCUMENT,definitions:zx(e,k({useSchemaDefinition:!0,forceSchemaDefinition:!1,throwOnConflict:!1,commentDescriptions:!1},t))},r;return t!=null&&t.commentDescriptions?r=(0,Sl.printWithComments)(n):r=n,(0,Sl.resetComments)(),r}Ol.mergeTypeDefs=Tue;function vl(e,t,n=[],r=[],i=new Set){if(e&&!i.has(e))if(i.add(e),typeof e=="function")vl(e(),t,n,r,i);else if(Array.isArray(e))for(let a of e)vl(a,t,n,r,i);else if((0,Ki.isSchema)(e)){let a=(0,Sl.getDocumentNodeFromSchema)(e,t);vl(a.definitions,t,n,r,i)}else if((0,aO.isStringTypes)(e)||(0,aO.isSourceTypes)(e)){let a=(0,Ki.parse)(e,t);vl(a.definitions,t,n,r,i)}else if(typeof e=="object"&&(0,Ki.isDefinitionNode)(e))e.kind===Ki.Kind.DIRECTIVE_DEFINITION?n.push(e):r.push(e);else if((0,Sl.isDocumentNode)(e))vl(e.definitions,t,n,r,i);else throw new Error(`typeDefs must contain only strings, documents, schemas, or functions, got ${typeof e}`);return{allDirectives:n,allNodes:r}}function zx(e,t){var c,l,p;(0,Sl.resetComments)();let{allDirectives:n,allNodes:r}=vl(e,t),i=(0,_l.mergeGraphQLNodes)(n,t),a=(0,_l.mergeGraphQLNodes)(r,t,i);if(t!=null&&t.useSchemaDefinition){let N=a[_l.schemaDefSymbol]||{kind:Ki.Kind.SCHEMA_DEFINITION,operationTypes:[]},y=N.operationTypes;for(let g in Hx.DEFAULT_OPERATION_TYPE_NAME_MAP)if(!y.find(F=>F.operation===g)){let F=Hx.DEFAULT_OPERATION_TYPE_NAME_MAP[g],B=a[F];B!=null&&B.name!=null&&y.push({kind:Ki.Kind.OPERATION_TYPE_DEFINITION,type:{kind:Ki.Kind.NAMED_TYPE,name:B.name},operation:g})}((c=N==null?void 0:N.operationTypes)==null?void 0:c.length)!=null&&N.operationTypes.length>0&&(a[_l.schemaDefSymbol]=N)}t!=null&&t.forceSchemaDefinition&&!((p=(l=a[_l.schemaDefSymbol])==null?void 0:l.operationTypes)!=null&&p.length)&&(a[_l.schemaDefSymbol]={kind:Ki.Kind.SCHEMA_DEFINITION,operationTypes:[{kind:Ki.Kind.OPERATION_TYPE_DEFINITION,operation:"query",type:{kind:Ki.Kind.NAMED_TYPE,name:{kind:Ki.Kind.NAME,value:"Query"}}}]});let o=Object.values(a);if(t!=null&&t.sort){let N=typeof t.sort=="function"?t.sort:aO.defaultStringComparator;o.sort((y,g)=>{var _,F;return N((_=y.name)==null?void 0:_.value,(F=g.name)==null?void 0:F.value)})}return o}Ol.mergeGraphQLTypes=zx});var Xx=P(Dr=>{"use strict";f();T();m();Object.defineProperty(Dr,"__esModule",{value:!0});var ei=(Hv(),jf(Jv));ei.__exportStar(YS(),Dr);ei.__exportStar(ji(),Dr);ei.__exportStar(JS(),Dr);ei.__exportStar(HS(),Dr);ei.__exportStar(gp(),Dr);ei.__exportStar(WS(),Dr);ei.__exportStar(XS(),Dr);ei.__exportStar(_p(),Dr);ei.__exportStar(iO(),Dr);ei.__exportStar(Wx(),Dr);ei.__exportStar(eO(),Dr);ei.__exportStar(ZS(),Dr);ei.__exportStar(nO(),Dr);ei.__exportStar(KN(),Dr)});var eq=P(tu=>{"use strict";f();T();m();Object.defineProperty(tu,"__esModule",{value:!0});tu.applyExtensions=tu.mergeExtensions=tu.extractExtensionsFromSchema=void 0;var Zx=pa(),Nue=pa();Object.defineProperty(tu,"extractExtensionsFromSchema",{enumerable:!0,get:function(){return Nue.extractExtensionsFromSchema}});function hue(e){return(0,Zx.mergeDeep)(e)}tu.mergeExtensions=hue;function bl(e,t){e&&(e.extensions=(0,Zx.mergeDeep)([e.extensions||{},t||{}]))}function Eue(e,t){bl(e,t.schemaExtensions);for(let[n,r]of Object.entries(t.types||{})){let i=e.getType(n);if(i){if(bl(i,r.extensions),r.type==="object"||r.type==="interface")for(let[a,o]of Object.entries(r.fields)){let c=i.getFields()[a];if(c){bl(c,o.extensions);for(let[l,p]of Object.entries(o.arguments))bl(c.args.find(N=>N.name===l),p)}}else if(r.type==="input")for(let[a,o]of Object.entries(r.fields)){let c=i.getFields()[a];bl(c,o.extensions)}else if(r.type==="enum")for(let[a,o]of Object.entries(r.values)){let c=i.getValue(a);bl(c,o)}}}return e}tu.applyExtensions=Eue});var oO=P(Sp=>{"use strict";f();T();m();Object.defineProperty(Sp,"__esModule",{value:!0});var sO=(Hv(),jf(Jv));sO.__exportStar(Vx(),Sp);sO.__exportStar(Xx(),Sp);sO.__exportStar(eq(),Sp)});var uO=P(Ze=>{"use strict";f();T();m();Object.defineProperty(Ze,"__esModule",{value:!0});Ze.TAG_DEFINITION_DATA=Ze.SUBSCRIPTION_FILTER_DEFINITION_DATA=Ze.SHAREABLE_DEFINITION_DATA=Ze.SPECIFIED_BY_DEFINITION_DATA=Ze.REQUIRES_SCOPES_DEFINITION_DATA=Ze.REQUIRES_DEFINITION_DATA=Ze.PROVIDES_DEFINITION_DATA=Ze.LINK_DEFINITION_DATA=Ze.KEY_DEFINITION_DATA=Ze.OVERRIDE_DEFINITION_DATA=Ze.NATS_SUBSCRIBE_DEFINITION_DATA=Ze.NATS_REQUEST_DEFINITION_DATA=Ze.NATS_PUBLISH_DEFINITION_DATA=Ze.KAFKA_SUBSCRIBE_DEFINITION_DATA=Ze.KAFKA_PUBLISH_DEFINITION_DATA=Ze.INTERFACE_OBJECT_DEFINITION_DATA=Ze.INACCESSIBLE_DEFINITION_DATA=Ze.EXTERNAL_DEFINITION_DATA=Ze.EXTENDS_DEFINITION_DATA=Ze.DEPRECATED_DEFINITION_DATA=Ze.CONFIGURE_CHILD_DESCRIPTIONS_DEFINITION_DATA=Ze.CONFIGURE_DESCRIPTION_DEFINITION_DATA=Ze.COMPOSE_DIRECTIVE_DEFINITION_DATA=Ze.AUTHENTICATED_DEFINITION_DATA=void 0;var pt=Es(),fa=Jr(),On=Ae(),K=lr();Ze.AUTHENTICATED_DEFINITION_DATA={argumentTypeNodeByArgumentName:new Map([]),isRepeatable:!1,locations:new Set([K.ENUM_UPPER,K.FIELD_DEFINITION_UPPER,K.INTERFACE_UPPER,K.OBJECT_UPPER,K.SCALAR_UPPER]),name:K.AUTHENTICATED,node:pt.AUTHENTICATED_DEFINITION,optionalArgumentNames:new Set,requiredArgumentNames:new Set};Ze.COMPOSE_DIRECTIVE_DEFINITION_DATA={argumentTypeNodeByArgumentName:new Map([[K.NAME,{name:K.NAME,typeNode:pt.REQUIRED_STRING_TYPE_NODE}]]),isRepeatable:!0,locations:new Set([K.SCHEMA_UPPER]),name:K.COMPOSE_DIRECTIVE,node:pt.COMPOSE_DIRECTIVE_DEFINITION,optionalArgumentNames:new Set,requiredArgumentNames:new Set([K.NAME])};Ze.CONFIGURE_DESCRIPTION_DEFINITION_DATA={argumentTypeNodeByArgumentName:new Map([[K.PROPAGATE,{name:K.PROPAGATE,typeNode:{kind:On.Kind.NON_NULL_TYPE,type:(0,fa.stringToNamedTypeNode)(K.BOOLEAN_SCALAR)},defaultValue:{kind:On.Kind.BOOLEAN,value:!0}}],[K.DESCRIPTION_OVERRIDE,{name:K.DESCRIPTION_OVERRIDE,typeNode:(0,fa.stringToNamedTypeNode)(K.STRING_SCALAR)}]]),isRepeatable:!1,locations:new Set([K.ARGUMENT_DEFINITION_UPPER,K.ENUM_UPPER,K.ENUM_VALUE_UPPER,K.FIELD_DEFINITION_UPPER,K.INTERFACE_UPPER,K.INPUT_OBJECT_UPPER,K.INPUT_FIELD_DEFINITION_UPPER,K.OBJECT_UPPER,K.SCALAR_UPPER,K.SCHEMA_UPPER,K.UNION_UPPER]),name:K.CONFIGURE_DESCRIPTION,node:pt.CONFIGURE_DESCRIPTION_DEFINITION,optionalArgumentNames:new Set([K.PROPAGATE,K.DESCRIPTION_OVERRIDE]),requiredArgumentNames:new Set};Ze.CONFIGURE_CHILD_DESCRIPTIONS_DEFINITION_DATA={argumentTypeNodeByArgumentName:new Map([[K.PROPAGATE,{name:K.PROPAGATE,typeNode:{kind:On.Kind.NON_NULL_TYPE,type:(0,fa.stringToNamedTypeNode)(K.BOOLEAN_SCALAR)},defaultValue:{kind:On.Kind.BOOLEAN,value:!0}}]]),isRepeatable:!1,locations:new Set([K.ENUM_UPPER,K.INPUT_OBJECT_UPPER,K.INTERFACE_UPPER,K.OBJECT_UPPER]),name:K.CONFIGURE_CHILD_DESCRIPTIONS,node:pt.CONFIGURE_CHILD_DESCRIPTIONS_DEFINITION,optionalArgumentNames:new Set([K.PROPAGATE]),requiredArgumentNames:new Set};Ze.DEPRECATED_DEFINITION_DATA={argumentTypeNodeByArgumentName:new Map([[K.REASON,{name:K.REASON,typeNode:(0,fa.stringToNamedTypeNode)(K.STRING_SCALAR),defaultValue:{kind:On.Kind.STRING,value:On.DEFAULT_DEPRECATION_REASON}}]]),isRepeatable:!1,locations:new Set([K.ARGUMENT_DEFINITION_UPPER,K.ENUM_VALUE_UPPER,K.FIELD_DEFINITION_UPPER,K.INPUT_FIELD_DEFINITION_UPPER]),name:K.DEPRECATED,node:pt.DEPRECATED_DEFINITION,optionalArgumentNames:new Set([K.REASON]),requiredArgumentNames:new Set};Ze.EXTENDS_DEFINITION_DATA={argumentTypeNodeByArgumentName:new Map,isRepeatable:!1,locations:new Set([K.INTERFACE_UPPER,K.OBJECT_UPPER]),name:K.EXTENDS,node:pt.EXTENDS_DEFINITION,optionalArgumentNames:new Set,requiredArgumentNames:new Set};Ze.EXTERNAL_DEFINITION_DATA={argumentTypeNodeByArgumentName:new Map,isRepeatable:!1,locations:new Set([K.FIELD_DEFINITION_UPPER,K.OBJECT_UPPER]),name:K.EXTERNAL,node:pt.EXTERNAL_DEFINITION,optionalArgumentNames:new Set,requiredArgumentNames:new Set};Ze.INACCESSIBLE_DEFINITION_DATA={argumentTypeNodeByArgumentName:new Map,isRepeatable:!1,locations:new Set([K.ARGUMENT_DEFINITION_UPPER,K.ENUM_UPPER,K.ENUM_VALUE_UPPER,K.FIELD_DEFINITION_UPPER,K.INPUT_FIELD_DEFINITION_UPPER,K.INPUT_OBJECT_UPPER,K.INTERFACE_UPPER,K.OBJECT_UPPER,K.SCALAR_UPPER,K.UNION_UPPER]),name:K.INACCESSIBLE,node:pt.INACCESSIBLE_DEFINITION,optionalArgumentNames:new Set,requiredArgumentNames:new Set};Ze.INTERFACE_OBJECT_DEFINITION_DATA={argumentTypeNodeByArgumentName:new Map,isRepeatable:!1,locations:new Set([K.OBJECT_UPPER]),name:K.INTERFACE_OBJECT,node:pt.INTERFACE_OBJECT_DEFINITION,optionalArgumentNames:new Set,requiredArgumentNames:new Set};Ze.KAFKA_PUBLISH_DEFINITION_DATA={argumentTypeNodeByArgumentName:new Map([[K.TOPIC,{name:K.TOPIC,typeNode:pt.REQUIRED_STRING_TYPE_NODE}],[K.PROVIDER_ID,{name:K.PROVIDER_ID,typeNode:pt.REQUIRED_STRING_TYPE_NODE,defaultValue:{kind:On.Kind.STRING,value:K.DEFAULT_EDFS_PROVIDER_ID}}]]),isRepeatable:!1,locations:new Set([K.FIELD_DEFINITION_UPPER]),name:K.EDFS_KAFKA_PUBLISH,node:pt.EDFS_KAFKA_PUBLISH_DEFINITION,optionalArgumentNames:new Set([K.PROVIDER_ID]),requiredArgumentNames:new Set([K.TOPIC])};Ze.KAFKA_SUBSCRIBE_DEFINITION_DATA={argumentTypeNodeByArgumentName:new Map([[K.TOPICS,{name:K.TOPICS,typeNode:{kind:On.Kind.NON_NULL_TYPE,type:{kind:On.Kind.LIST_TYPE,type:pt.REQUIRED_STRING_TYPE_NODE}}}],[K.PROVIDER_ID,{name:K.PROVIDER_ID,typeNode:pt.REQUIRED_STRING_TYPE_NODE,defaultValue:{kind:On.Kind.STRING,value:K.DEFAULT_EDFS_PROVIDER_ID}}]]),isRepeatable:!1,locations:new Set([K.FIELD_DEFINITION_UPPER]),name:K.EDFS_KAFKA_SUBSCRIBE,node:pt.EDFS_KAFKA_SUBSCRIBE_DEFINITION,optionalArgumentNames:new Set([K.PROVIDER_ID]),requiredArgumentNames:new Set([K.TOPICS])};Ze.NATS_PUBLISH_DEFINITION_DATA={argumentTypeNodeByArgumentName:new Map([[K.SUBJECT,{name:K.SUBJECT,typeNode:pt.REQUIRED_STRING_TYPE_NODE}],[K.PROVIDER_ID,{name:K.PROVIDER_ID,typeNode:pt.REQUIRED_STRING_TYPE_NODE,defaultValue:{kind:On.Kind.STRING,value:K.DEFAULT_EDFS_PROVIDER_ID}}]]),isRepeatable:!1,locations:new Set([K.FIELD_DEFINITION_UPPER]),name:K.EDFS_NATS_PUBLISH,node:pt.EDFS_NATS_PUBLISH_DEFINITION,optionalArgumentNames:new Set([K.PROVIDER_ID]),requiredArgumentNames:new Set([K.SUBJECT])};Ze.NATS_REQUEST_DEFINITION_DATA={argumentTypeNodeByArgumentName:new Map([[K.SUBJECT,{name:K.SUBJECT,typeNode:pt.REQUIRED_STRING_TYPE_NODE}],[K.PROVIDER_ID,{name:K.PROVIDER_ID,typeNode:pt.REQUIRED_STRING_TYPE_NODE,defaultValue:{kind:On.Kind.STRING,value:K.DEFAULT_EDFS_PROVIDER_ID}}]]),isRepeatable:!1,locations:new Set([K.FIELD_DEFINITION_UPPER]),name:K.EDFS_NATS_REQUEST,node:pt.EDFS_NATS_REQUEST_DEFINITION,optionalArgumentNames:new Set([K.PROVIDER_ID]),requiredArgumentNames:new Set([K.SUBJECT])};Ze.NATS_SUBSCRIBE_DEFINITION_DATA={argumentTypeNodeByArgumentName:new Map([[K.SUBJECTS,{name:K.SUBJECTS,typeNode:{kind:On.Kind.NON_NULL_TYPE,type:{kind:On.Kind.LIST_TYPE,type:pt.REQUIRED_STRING_TYPE_NODE}}}],[K.PROVIDER_ID,{name:K.PROVIDER_ID,typeNode:pt.REQUIRED_STRING_TYPE_NODE,defaultValue:{kind:On.Kind.STRING,value:K.DEFAULT_EDFS_PROVIDER_ID}}],[K.STREAM_CONFIGURATION,{name:K.STREAM_CONFIGURATION,typeNode:(0,fa.stringToNamedTypeNode)(K.EDFS_NATS_STREAM_CONFIGURATION)}]]),isRepeatable:!1,locations:new Set([K.FIELD_DEFINITION_UPPER]),name:K.EDFS_NATS_SUBSCRIBE,node:pt.EDFS_NATS_SUBSCRIBE_DEFINITION,optionalArgumentNames:new Set([K.PROVIDER_ID]),requiredArgumentNames:new Set([K.SUBJECTS])};Ze.OVERRIDE_DEFINITION_DATA={argumentTypeNodeByArgumentName:new Map([[K.FROM,{name:K.FROM,typeNode:pt.REQUIRED_STRING_TYPE_NODE}]]),isRepeatable:!1,locations:new Set([K.FIELD_DEFINITION_UPPER]),name:K.OVERRIDE,node:pt.OVERRIDE_DEFINITION,optionalArgumentNames:new Set,requiredArgumentNames:new Set([K.FROM])};Ze.KEY_DEFINITION_DATA={argumentTypeNodeByArgumentName:new Map([[K.FIELDS,{name:K.FIELDS,typeNode:pt.REQUIRED_FIELDSET_TYPE_NODE}],[K.RESOLVABLE,{name:K.RESOLVABLE,typeNode:(0,fa.stringToNamedTypeNode)(K.BOOLEAN_SCALAR),defaultValue:{kind:On.Kind.BOOLEAN,value:!0}}]]),isRepeatable:!0,locations:new Set([K.INTERFACE_UPPER,K.OBJECT_UPPER]),name:K.KEY,node:pt.KEY_DEFINITION,optionalArgumentNames:new Set([K.RESOLVABLE]),requiredArgumentNames:new Set([K.FIELDS])};Ze.LINK_DEFINITION_DATA={argumentTypeNodeByArgumentName:new Map([[K.URL_LOWER,{name:K.URL_LOWER,typeNode:pt.REQUIRED_STRING_TYPE_NODE}],[K.AS,{name:K.AS,typeNode:(0,fa.stringToNamedTypeNode)(K.STRING_SCALAR)}],[K.FOR,{name:K.FOR,typeNode:(0,fa.stringToNamedTypeNode)(K.LINK_PURPOSE)}],[K.IMPORT,{name:K.IMPORT,typeNode:{kind:On.Kind.LIST_TYPE,type:(0,fa.stringToNamedTypeNode)(K.LINK_IMPORT)}}]]),isRepeatable:!0,locations:new Set([K.SCHEMA_UPPER]),name:K.LINK,node:pt.LINK_DEFINITION,optionalArgumentNames:new Set([K.AS,K.FOR,K.IMPORT]),requiredArgumentNames:new Set([K.URL_LOWER])};Ze.PROVIDES_DEFINITION_DATA={argumentTypeNodeByArgumentName:new Map([[K.FIELDS,{name:K.FIELDS,typeNode:pt.REQUIRED_FIELDSET_TYPE_NODE}]]),isRepeatable:!1,locations:new Set([K.FIELD_DEFINITION_UPPER]),name:K.PROVIDES,node:pt.PROVIDES_DEFINITION,optionalArgumentNames:new Set,requiredArgumentNames:new Set([K.FIELDS])};Ze.REQUIRES_DEFINITION_DATA={argumentTypeNodeByArgumentName:new Map([[K.FIELDS,{name:K.FIELDS,typeNode:pt.REQUIRED_FIELDSET_TYPE_NODE}]]),isRepeatable:!1,locations:new Set([K.FIELD_DEFINITION_UPPER]),name:K.REQUIRES,node:pt.REQUIRES_DEFINITION,optionalArgumentNames:new Set,requiredArgumentNames:new Set([K.FIELDS])};Ze.REQUIRES_SCOPES_DEFINITION_DATA={argumentTypeNodeByArgumentName:new Map([[K.SCOPES,{name:K.SCOPES,typeNode:{kind:On.Kind.NON_NULL_TYPE,type:{kind:On.Kind.LIST_TYPE,type:{kind:On.Kind.NON_NULL_TYPE,type:{kind:On.Kind.LIST_TYPE,type:{kind:On.Kind.NON_NULL_TYPE,type:(0,fa.stringToNamedTypeNode)(K.SCOPE_SCALAR)}}}}}}]]),isRepeatable:!1,locations:new Set([K.ENUM_UPPER,K.FIELD_DEFINITION_UPPER,K.INTERFACE_UPPER,K.OBJECT_UPPER,K.SCALAR_UPPER]),name:K.REQUIRES_SCOPES,node:pt.REQUIRES_SCOPES_DEFINITION,optionalArgumentNames:new Set,requiredArgumentNames:new Set([K.SCOPES])};Ze.SPECIFIED_BY_DEFINITION_DATA={argumentTypeNodeByArgumentName:new Map([[K.URL_LOWER,{name:K.URL_LOWER,typeNode:pt.REQUIRED_STRING_TYPE_NODE}]]),isRepeatable:!1,locations:new Set([K.SCALAR_UPPER]),name:K.SPECIFIED_BY,node:pt.SPECIFIED_BY_DEFINITION,optionalArgumentNames:new Set,requiredArgumentNames:new Set([K.URL_LOWER])};Ze.SHAREABLE_DEFINITION_DATA={argumentTypeNodeByArgumentName:new Map,isRepeatable:!0,locations:new Set([K.FIELD_DEFINITION_UPPER,K.OBJECT_UPPER]),name:K.SHAREABLE,node:pt.SHAREABLE_DEFINITION,optionalArgumentNames:new Set,requiredArgumentNames:new Set};Ze.SUBSCRIPTION_FILTER_DEFINITION_DATA={argumentTypeNodeByArgumentName:new Map([[K.CONDITION,{name:K.CONDITION,typeNode:{kind:On.Kind.NON_NULL_TYPE,type:(0,fa.stringToNamedTypeNode)(K.SUBSCRIPTION_FILTER_CONDITION)}}]]),isRepeatable:!1,locations:new Set([K.FIELD_DEFINITION_UPPER]),name:K.SUBSCRIPTION_FILTER,node:pt.SUBSCRIPTION_FILTER_DEFINITION,optionalArgumentNames:new Set,requiredArgumentNames:new Set([K.CONDITION])};Ze.TAG_DEFINITION_DATA={argumentTypeNodeByArgumentName:new Map([[K.NAME,{name:K.NAME,typeNode:pt.REQUIRED_STRING_TYPE_NODE}]]),isRepeatable:!0,locations:new Set([K.ARGUMENT_DEFINITION_UPPER,K.ENUM_UPPER,K.ENUM_VALUE_UPPER,K.FIELD_DEFINITION_UPPER,K.INPUT_FIELD_DEFINITION_UPPER,K.INPUT_OBJECT_UPPER,K.INTERFACE_UPPER,K.OBJECT_UPPER,K.SCALAR_UPPER,K.UNION_UPPER]),name:K.TAG,node:pt.TAG_DEFINITION,optionalArgumentNames:new Set,requiredArgumentNames:new Set([K.NAME])}});var Op=P(ma=>{"use strict";f();T();m();Object.defineProperty(ma,"__esModule",{value:!0});ma.newFieldSetData=yue;ma.extractFieldSetValue=Iue;ma.getNormalizedFieldSet=gue;ma.getInitialFieldCoordsPath=_ue;ma.validateKeyFieldSets=vue;ma.getConditionalFieldSetDirectiveName=Sue;ma.isNodeQuery=Oue;ma.validateArgumentTemplateReferences=bue;ma.initializeDirectiveDefinitionDatas=Due;var nr=Ae(),tq=Jr(),Ar=sa(),nq=Es(),cO=Yo(),yn=uO(),Gt=lr(),nu=Hr();function yue(){return{provides:new Map,requires:new Map}}function Iue(e,t,n){if(!n||n.length>1)return;let r=n[0].arguments;if(!r||r.length!==1)return;let i=r[0];i.name.value!==Gt.FIELDS||i.value.kind!==nr.Kind.STRING||t.set(e,i.value.value)}function gue(e){return(0,nr.print)((0,tq.lexicographicallySortDocumentNode)(e)).replaceAll(/\s+/g," ").slice(2,-2)}function _ue(e,t){return e?[t]:[]}function vue(e,t,n){let r=e.entityInterfaceDataByTypeName.get(t.name),i=t.name,a=[],o=[],c=r?void 0:e.internalGraph.addEntityDataNode(t.name),l=e.internalGraph.addOrUpdateNode(t.name),p=0;for(let[N,{documentNode:y,isUnresolvable:g,rawFieldSet:_}]of n){r&&(r.resolvable||(r.resolvable=!g)),p+=1;let F=[],B=[t],j=[],J=[],Z=new Set,W=-1,Ne=!0,le="";if((0,nr.visit)(y,{Argument:{enter(we){return F.push((0,Ar.unexpectedArgumentErrorMessage)(_,`${B[W].name}.${le}`,we.name.value)),nr.BREAK}},Field:{enter(we){let qe=B[W],et=qe.name;if(Ne){let Dn=`${et}.${le}`,qt=qe.fieldDataByFieldName.get(le);if(!qt)return F.push((0,Ar.undefinedFieldInFieldSetErrorMessage)(_,Dn,le)),nr.BREAK;let cn=(0,cO.getTypeNodeNamedTypeName)(qt.node.type),Rr=e.parentDefinitionDataByTypeName.get(cn),Fr=Rr?Rr.kind:nr.Kind.SCALAR_TYPE_DEFINITION;return F.push((0,Ar.invalidSelectionSetErrorMessage)(_,[Dn],cn,(0,nu.kindToTypeString)(Fr))),nr.BREAK}let X=we.name.value,ve=`${et}.${X}`;le=X;let gt=qe.fieldDataByFieldName.get(X);if(!gt)return F.push((0,Ar.undefinedFieldInFieldSetErrorMessage)(_,et,X)),nr.BREAK;if(gt.argumentDataByArgumentName.size)return F.push((0,Ar.argumentsInKeyFieldSetErrorMessage)(_,ve)),nr.BREAK;if(j[W].has(X))return F.push((0,Ar.duplicateFieldInFieldSetErrorMessage)(_,ve)),nr.BREAK;(0,nu.getValueOrDefault)((0,nu.getValueOrDefault)(e.keyFieldSetsByEntityTypeNameByFieldCoords,ve,()=>new Map),i,()=>new Set).add(N),J.push(X),gt.isShareableBySubgraphName.set(e.subgraphName,!0),j[W].add(X),(0,nu.getValueOrDefault)(e.keyFieldNamesByParentTypeName,et,()=>new Set).add(X);let Ht=(0,cO.getTypeNodeNamedTypeName)(gt.node.type);if(nq.BASE_SCALARS.has(Ht)){Z.add(J.join(Gt.PERIOD)),J.pop();return}let zt=e.parentDefinitionDataByTypeName.get(Ht);if(!zt)return F.push((0,Ar.unknownTypeInFieldSetErrorMessage)(_,ve,Ht)),nr.BREAK;if(zt.kind===nr.Kind.OBJECT_TYPE_DEFINITION){Ne=!0,B.push(zt);return}if((0,tq.isKindAbstract)(zt.kind))return F.push((0,Ar.abstractTypeInKeyFieldSetErrorMessage)(_,ve,Ht,(0,nu.kindToTypeString)(zt.kind))),nr.BREAK;Z.add(J.join(Gt.PERIOD)),J.pop()}},InlineFragment:{enter(){return F.push(Ar.inlineFragmentInFieldSetErrorMessage),nr.BREAK}},SelectionSet:{enter(){if(!Ne){let we=B[W],et=`${we.name}.${le}`,X=we.fieldDataByFieldName.get(le);if(!X)return F.push((0,Ar.undefinedFieldInFieldSetErrorMessage)(_,et,le)),nr.BREAK;let ve=(0,cO.getTypeNodeNamedTypeName)(X.node.type),gt=e.parentDefinitionDataByTypeName.get(ve),Ht=gt?gt.kind:nr.Kind.SCALAR_TYPE_DEFINITION;return F.push((0,Ar.invalidSelectionSetDefinitionErrorMessage)(_,[et],ve,(0,nu.kindToTypeString)(Ht))),nr.BREAK}if(W+=1,Ne=!1,W<0||W>=B.length)return F.push((0,Ar.unparsableFieldSetSelectionErrorMessage)(_,le)),nr.BREAK;j.push(new Set)},leave(){if(Ne){let qe=B[W].name,et=B[W+1],X=`${qe}.${le}`;F.push((0,Ar.invalidSelectionSetErrorMessage)(_,[X],et.name,(0,nu.kindToTypeString)(et.kind))),Ne=!1}W-=1,B.pop(),j.pop()}}}),F.length>0){e.errors.push((0,Ar.invalidDirectiveError)(Gt.KEY,i,(0,nu.numberToOrdinal)(p),F));continue}a.push(k({fieldName:"",selectionSet:N},g?{disableEntityResolver:!0}:{})),l.satisfiedFieldSets.add(N),!g&&(c==null||c.addTargetSubgraphByFieldSet(N,e.subgraphName),o.push(Z))}if(a.length>0)return a}function Sue(e){return e?Gt.PROVIDES:Gt.REQUIRES}function Oue(e,t){return e===Gt.QUERY||t===nr.OperationTypeNode.QUERY}function bue(e,t,n){let r=e.matchAll(nq.EDFS_ARGS_REGEXP),i=new Set,a=new Set;for(let o of r){if(o.length<2){a.add(o[0]);continue}t.has(o[1])||i.add(o[1])}for(let o of i)n.push((0,Ar.undefinedEventSubjectsArgumentErrorMessage)(o));for(let o of a)n.push((0,Ar.invalidEventSubjectsArgumentErrorMessage)(o))}function Due(){return new Map([[Gt.AUTHENTICATED,yn.AUTHENTICATED_DEFINITION_DATA],[Gt.COMPOSE_DIRECTIVE,yn.COMPOSE_DIRECTIVE_DEFINITION_DATA],[Gt.CONFIGURE_DESCRIPTION,yn.CONFIGURE_DESCRIPTION_DEFINITION_DATA],[Gt.CONFIGURE_CHILD_DESCRIPTIONS,yn.CONFIGURE_CHILD_DESCRIPTIONS_DEFINITION_DATA],[Gt.DEPRECATED,yn.DEPRECATED_DEFINITION_DATA],[Gt.EDFS_KAFKA_PUBLISH,yn.KAFKA_PUBLISH_DEFINITION_DATA],[Gt.EDFS_KAFKA_SUBSCRIBE,yn.KAFKA_SUBSCRIBE_DEFINITION_DATA],[Gt.EDFS_NATS_PUBLISH,yn.NATS_PUBLISH_DEFINITION_DATA],[Gt.EDFS_NATS_REQUEST,yn.NATS_REQUEST_DEFINITION_DATA],[Gt.EDFS_NATS_SUBSCRIBE,yn.NATS_SUBSCRIBE_DEFINITION_DATA],[Gt.EXTENDS,yn.EXTENDS_DEFINITION_DATA],[Gt.EXTERNAL,yn.EXTERNAL_DEFINITION_DATA],[Gt.INACCESSIBLE,yn.INACCESSIBLE_DEFINITION_DATA],[Gt.INTERFACE_OBJECT,yn.INTERFACE_OBJECT_DEFINITION_DATA],[Gt.KEY,yn.KEY_DEFINITION_DATA],[Gt.LINK,yn.LINK_DEFINITION_DATA],[Gt.OVERRIDE,yn.OVERRIDE_DEFINITION_DATA],[Gt.PROVIDES,yn.PROVIDES_DEFINITION_DATA],[Gt.REQUIRES,yn.REQUIRES_DEFINITION_DATA],[Gt.REQUIRES_SCOPES,yn.REQUIRES_SCOPES_DEFINITION_DATA],[Gt.SHAREABLE,yn.SHAREABLE_DEFINITION_DATA],[Gt.SPECIFIED_BY,yn.SPECIFIED_BY_DEFINITION_DATA],[Gt.SUBSCRIPTION_FILTER,yn.SUBSCRIPTION_FILTER_DEFINITION_DATA],[Gt.TAG,yn.TAG_DEFINITION_DATA]])}});var dO=P(lO=>{"use strict";f();T();m();Object.defineProperty(lO,"__esModule",{value:!0});lO.recordSubgraphName=Aue;function Aue(e,t,n){if(!t.has(e)){t.add(e);return}n.add(e)}});var fO=P(WN=>{"use strict";f();T();m();Object.defineProperty(WN,"__esModule",{value:!0});WN.Warning=void 0;var pO=class extends Error{constructor(n){super(n.message);v(this,"subgraph");this.name="Warning",this.subgraph=n.subgraph}};WN.Warning=pO});var ZN=P(Ta=>{"use strict";f();T();m();Object.defineProperty(Ta,"__esModule",{value:!0});Ta.invalidOverrideTargetSubgraphNameWarning=Rue;Ta.externalInterfaceFieldsWarning=Fue;Ta.nonExternalConditionalFieldWarning=Pue;Ta.unimplementedInterfaceOutputTypeWarning=wue;Ta.invalidExternalFieldWarning=Lue;Ta.requiresDefinedOnNonEntityFieldWarning=Cue;Ta.consumerInactiveThresholdInvalidValueWarning=Bue;Ta.externalEntityExtensionKeyFieldWarning=Uue;Ta.fieldAlreadyProvidedWarning=kue;var _s=fO(),mO=lr();function Rue(e,t,n,r){return new _s.Warning({message:`The Object type "${t}" defines the directive "@override(from: "${e}")" on the following field`+(n.length>1?"s":"")+': "'+n.join(mO.QUOTATION_JOIN)+`". + ${n}`)}function Noe(e,t){return t?(moe(e,t),Q(M({},e),{locations:[...t.locations,...e.locations.filter(n=>!doe(n,t.locations))]})):e}_l.mergeDirective=Noe;function Toe(e,t,n){return e.concat(t.filter(r=>n(r,e)))}});var HS=w(jT=>{"use strict";f();N();m();Object.defineProperty(jT,"__esModule",{value:!0});jT.mergeEnumValues=void 0;var Eoe=Ki(),hoe=pa();function yoe(e,t,n,r){if(n!=null&&n.consistentEnumMerge){let o=[];e&&o.push(...e),e=t,t=o}let i=new Map;if(e)for(let o of e)i.set(o.name.value,o);if(t)for(let o of t){let c=o.name.value;if(i.has(c)){let l=i.get(c);l.description=o.description||l.description,l.directives=(0,Eoe.mergeDirectives)(o.directives,l.directives,r)}else i.set(c,o)}let a=[...i.values()];return n&&n.sort&&a.sort(hoe.compareNodes),a}jT.mergeEnumValues=yoe});var zS=w(KT=>{"use strict";f();N();m();Object.defineProperty(KT,"__esModule",{value:!0});KT.mergeEnum=void 0;var Ioe=Ae(),goe=Ki(),_oe=HS();function voe(e,t,n,r){return t?{name:e.name,description:e.description||t.description,kind:n!=null&&n.convertExtensions||e.kind==="EnumTypeDefinition"||t.kind==="EnumTypeDefinition"?"EnumTypeDefinition":"EnumTypeExtension",loc:e.loc,directives:(0,goe.mergeDirectives)(e.directives,t.directives,n,r),values:(0,_oe.mergeEnumValues)(e.values,t.values,n)}:n!=null&&n.convertExtensions?Q(M({},e),{kind:Ioe.Kind.ENUM_TYPE_DEFINITION}):e}KT.mergeEnum=voe});var GT=w(Vn=>{"use strict";f();N();m();Object.defineProperty(Vn,"__esModule",{value:!0});Vn.defaultStringComparator=Vn.CompareVal=Vn.printTypeNode=Vn.isNonNullTypeNode=Vn.isListTypeNode=Vn.isWrappingTypeNode=Vn.extractType=Vn.isSourceTypes=Vn.isStringTypes=void 0;var Ip=Ae();function Soe(e){return typeof e=="string"}Vn.isStringTypes=Soe;function Ooe(e){return e instanceof Ip.Source}Vn.isSourceTypes=Ooe;function Doe(e){let t=e;for(;t.kind===Ip.Kind.LIST_TYPE||t.kind==="NonNullType";)t=t.type;return t}Vn.extractType=Doe;function boe(e){return e.kind!==Ip.Kind.NAMED_TYPE}Vn.isWrappingTypeNode=boe;function Jx(e){return e.kind===Ip.Kind.LIST_TYPE}Vn.isListTypeNode=Jx;function Hx(e){return e.kind===Ip.Kind.NON_NULL_TYPE}Vn.isNonNullTypeNode=Hx;function WS(e){return Jx(e)?`[${WS(e.type)}]`:Hx(e)?`${WS(e.type)}!`:e.name.value}Vn.printTypeNode=WS;var tc;(function(e){e[e.A_SMALLER_THAN_B=-1]="A_SMALLER_THAN_B",e[e.A_EQUALS_B=0]="A_EQUALS_B",e[e.A_GREATER_THAN_B=1]="A_GREATER_THAN_B"})(tc=Vn.CompareVal||(Vn.CompareVal={}));function Aoe(e,t){return e==null&&t==null?tc.A_EQUALS_B:e==null?tc.A_SMALLER_THAN_B:t==null?tc.A_GREATER_THAN_B:et?tc.A_GREATER_THAN_B:tc.A_EQUALS_B}Vn.defaultStringComparator=Aoe});var _p=w($T=>{"use strict";f();N();m();Object.defineProperty($T,"__esModule",{value:!0});$T.mergeFields=void 0;var Zr=GT(),Roe=Ki(),Foe=pa(),Poe=JS();function woe(e,t){let n=e.findIndex(r=>r.name.value===t.name.value);return[n>-1?e[n]:null,n]}function Loe(e,t,n,r,i){let a=[];if(n!=null&&a.push(...n),t!=null)for(let o of t){let[c,l]=woe(a,o);if(c&&!(r!=null&&r.ignoreFieldConflicts)){let p=(r==null?void 0:r.onFieldTypeConflict)&&r.onFieldTypeConflict(c,o,e,r==null?void 0:r.throwOnConflict)||Coe(e,c,o,r==null?void 0:r.throwOnConflict);p.arguments=(0,Poe.mergeArguments)(o.arguments||[],c.arguments||[],r),p.directives=(0,Roe.mergeDirectives)(o.directives,c.directives,r,i),p.description=o.description||c.description,a[l]=p}else a.push(o)}if(r&&r.sort&&a.sort(Foe.compareNodes),r&&r.exclusions){let o=r.exclusions;return a.filter(c=>!o.includes(`${e.name.value}.${c.name.value}`))}return a}$T.mergeFields=Loe;function Coe(e,t,n,r=!1){let i=(0,Zr.printTypeNode)(t.type),a=(0,Zr.printTypeNode)(n.type);if(i!==a){let o=(0,Zr.extractType)(t.type),c=(0,Zr.extractType)(n.type);if(o.name.value!==c.name.value)throw new Error(`Field "${n.name.value}" already defined with a different type. Declared as "${o.name.value}", but you tried to override with "${c.name.value}"`);if(!gp(t.type,n.type,!r))throw new Error(`Field '${e.name.value}.${t.name.value}' changed type from '${i}' to '${a}'`)}return(0,Zr.isNonNullTypeNode)(n.type)&&!(0,Zr.isNonNullTypeNode)(t.type)&&(t.type=n.type),t}function gp(e,t,n=!1){if(!(0,Zr.isWrappingTypeNode)(e)&&!(0,Zr.isWrappingTypeNode)(t))return e.toString()===t.toString();if((0,Zr.isNonNullTypeNode)(t)){let r=(0,Zr.isNonNullTypeNode)(e)?e.type:e;return gp(r,t.type)}return(0,Zr.isNonNullTypeNode)(e)?gp(t,e,n):(0,Zr.isListTypeNode)(e)?(0,Zr.isListTypeNode)(t)&&gp(e.type,t.type)||(0,Zr.isNonNullTypeNode)(t)&&gp(e,t.type):!1}});var XS=w(QT=>{"use strict";f();N();m();Object.defineProperty(QT,"__esModule",{value:!0});QT.mergeInputType=void 0;var Boe=Ae(),Uoe=_p(),koe=Ki();function Moe(e,t,n,r){if(t)try{return{name:e.name,description:e.description||t.description,kind:n!=null&&n.convertExtensions||e.kind==="InputObjectTypeDefinition"||t.kind==="InputObjectTypeDefinition"?"InputObjectTypeDefinition":"InputObjectTypeExtension",loc:e.loc,fields:(0,Uoe.mergeFields)(e,e.fields,t.fields,n),directives:(0,koe.mergeDirectives)(e.directives,t.directives,n,r)}}catch(i){throw new Error(`Unable to merge GraphQL input type "${e.name.value}": ${i.message}`)}return n!=null&&n.convertExtensions?Q(M({},e),{kind:Boe.Kind.INPUT_OBJECT_TYPE_DEFINITION}):e}QT.mergeInputType=Moe});var vp=w(YT=>{"use strict";f();N();m();Object.defineProperty(YT,"__esModule",{value:!0});YT.mergeNamedTypeArray=void 0;var xoe=pa();function qoe(e,t){return!!e.find(n=>n.name.value===t.name.value)}function Voe(e=[],t=[],n={}){let r=[...t,...e.filter(i=>!qoe(t,i))];return n&&n.sort&&r.sort(xoe.compareNodes),r}YT.mergeNamedTypeArray=Voe});var ZS=w(JT=>{"use strict";f();N();m();Object.defineProperty(JT,"__esModule",{value:!0});JT.mergeInterface=void 0;var joe=Ae(),Koe=_p(),Goe=Ki(),$oe=vp();function Qoe(e,t,n,r){if(t)try{return{name:e.name,description:e.description||t.description,kind:n!=null&&n.convertExtensions||e.kind==="InterfaceTypeDefinition"||t.kind==="InterfaceTypeDefinition"?"InterfaceTypeDefinition":"InterfaceTypeExtension",loc:e.loc,fields:(0,Koe.mergeFields)(e,e.fields,t.fields,n),directives:(0,Goe.mergeDirectives)(e.directives,t.directives,n,r),interfaces:e.interfaces?(0,$oe.mergeNamedTypeArray)(e.interfaces,t.interfaces,n):void 0}}catch(i){throw new Error(`Unable to merge GraphQL interface "${e.name.value}": ${i.message}`)}return n!=null&&n.convertExtensions?Q(M({},e),{kind:joe.Kind.INTERFACE_TYPE_DEFINITION}):e}JT.mergeInterface=Qoe});var eO=w(HT=>{"use strict";f();N();m();Object.defineProperty(HT,"__esModule",{value:!0});HT.mergeType=void 0;var Yoe=Ae(),Joe=_p(),Hoe=Ki(),zoe=vp();function Woe(e,t,n,r){if(t)try{return{name:e.name,description:e.description||t.description,kind:n!=null&&n.convertExtensions||e.kind==="ObjectTypeDefinition"||t.kind==="ObjectTypeDefinition"?"ObjectTypeDefinition":"ObjectTypeExtension",loc:e.loc,fields:(0,Joe.mergeFields)(e,e.fields,t.fields,n),directives:(0,Hoe.mergeDirectives)(e.directives,t.directives,n,r),interfaces:(0,zoe.mergeNamedTypeArray)(e.interfaces,t.interfaces,n)}}catch(i){throw new Error(`Unable to merge GraphQL type "${e.name.value}": ${i.message}`)}return n!=null&&n.convertExtensions?Q(M({},e),{kind:Yoe.Kind.OBJECT_TYPE_DEFINITION}):e}HT.mergeType=Woe});var tO=w(zT=>{"use strict";f();N();m();Object.defineProperty(zT,"__esModule",{value:!0});zT.mergeScalar=void 0;var Xoe=Ae(),Zoe=Ki();function eue(e,t,n,r){return t?{name:e.name,description:e.description||t.description,kind:n!=null&&n.convertExtensions||e.kind==="ScalarTypeDefinition"||t.kind==="ScalarTypeDefinition"?"ScalarTypeDefinition":"ScalarTypeExtension",loc:e.loc,directives:(0,Zoe.mergeDirectives)(e.directives,t.directives,n,r)}:n!=null&&n.convertExtensions?Q(M({},e),{kind:Xoe.Kind.SCALAR_TYPE_DEFINITION}):e}zT.mergeScalar=eue});var rO=w(WT=>{"use strict";f();N();m();Object.defineProperty(WT,"__esModule",{value:!0});WT.mergeUnion=void 0;var nO=Ae(),tue=Ki(),nue=vp();function rue(e,t,n,r){return t?{name:e.name,description:e.description||t.description,directives:(0,tue.mergeDirectives)(e.directives,t.directives,n,r),kind:n!=null&&n.convertExtensions||e.kind==="UnionTypeDefinition"||t.kind==="UnionTypeDefinition"?nO.Kind.UNION_TYPE_DEFINITION:nO.Kind.UNION_TYPE_EXTENSION,loc:e.loc,types:(0,nue.mergeNamedTypeArray)(e.types,t.types,n)}:n!=null&&n.convertExtensions?Q(M({},e),{kind:nO.Kind.UNION_TYPE_DEFINITION}):e}WT.mergeUnion=rue});var iO=w(nc=>{"use strict";f();N();m();Object.defineProperty(nc,"__esModule",{value:!0});nc.mergeSchemaDefs=nc.DEFAULT_OPERATION_TYPE_NAME_MAP=void 0;var Sp=Ae(),iue=Ki();nc.DEFAULT_OPERATION_TYPE_NAME_MAP={query:"Query",mutation:"Mutation",subscription:"Subscription"};function aue(e=[],t=[]){let n=[];for(let r in nc.DEFAULT_OPERATION_TYPE_NAME_MAP){let i=e.find(a=>a.operation===r)||t.find(a=>a.operation===r);i&&n.push(i)}return n}function sue(e,t,n,r){return t?{kind:e.kind===Sp.Kind.SCHEMA_DEFINITION||t.kind===Sp.Kind.SCHEMA_DEFINITION?Sp.Kind.SCHEMA_DEFINITION:Sp.Kind.SCHEMA_EXTENSION,description:e.description||t.description,directives:(0,iue.mergeDirectives)(e.directives,t.directives,n,r),operationTypes:aue(e.operationTypes,t.operationTypes)}:n!=null&&n.convertExtensions?Q(M({},e),{kind:Sp.Kind.SCHEMA_DEFINITION}):e}nc.mergeSchemaDefs=sue});var aO=w(Ka=>{"use strict";f();N();m();Object.defineProperty(Ka,"__esModule",{value:!0});Ka.mergeGraphQLNodes=Ka.isNamedDefinitionNode=Ka.schemaDefSymbol=void 0;var Ur=Ae(),oue=eO(),uue=zS(),cue=tO(),lue=rO(),due=XS(),pue=ZS(),fue=Ki(),mue=iO(),Nue=pa();Ka.schemaDefSymbol="SCHEMA_DEF_SYMBOL";function zx(e){return"name"in e}Ka.isNamedDefinitionNode=zx;function Tue(e,t,n={}){var i,a,o;let r=n;for(let c of e)if(zx(c)){let l=(i=c.name)==null?void 0:i.value;if(t!=null&&t.commentDescriptions&&(0,Nue.collectComment)(c),l==null)continue;if((a=t==null?void 0:t.exclusions)!=null&&a.includes(l+".*")||(o=t==null?void 0:t.exclusions)!=null&&o.includes(l))delete r[l];else switch(c.kind){case Ur.Kind.OBJECT_TYPE_DEFINITION:case Ur.Kind.OBJECT_TYPE_EXTENSION:r[l]=(0,oue.mergeType)(c,r[l],t,n);break;case Ur.Kind.ENUM_TYPE_DEFINITION:case Ur.Kind.ENUM_TYPE_EXTENSION:r[l]=(0,uue.mergeEnum)(c,r[l],t,n);break;case Ur.Kind.UNION_TYPE_DEFINITION:case Ur.Kind.UNION_TYPE_EXTENSION:r[l]=(0,lue.mergeUnion)(c,r[l],t,n);break;case Ur.Kind.SCALAR_TYPE_DEFINITION:case Ur.Kind.SCALAR_TYPE_EXTENSION:r[l]=(0,cue.mergeScalar)(c,r[l],t,n);break;case Ur.Kind.INPUT_OBJECT_TYPE_DEFINITION:case Ur.Kind.INPUT_OBJECT_TYPE_EXTENSION:r[l]=(0,due.mergeInputType)(c,r[l],t,n);break;case Ur.Kind.INTERFACE_TYPE_DEFINITION:case Ur.Kind.INTERFACE_TYPE_EXTENSION:r[l]=(0,pue.mergeInterface)(c,r[l],t,n);break;case Ur.Kind.DIRECTIVE_DEFINITION:r[l]=(0,fue.mergeDirective)(c,r[l]);break}}else(c.kind===Ur.Kind.SCHEMA_DEFINITION||c.kind===Ur.Kind.SCHEMA_EXTENSION)&&(r[Ka.schemaDefSymbol]=(0,mue.mergeSchemaDefs)(c,r[Ka.schemaDefSymbol],t));return r}Ka.mergeGraphQLNodes=Tue});var Zx=w(Dl=>{"use strict";f();N();m();Object.defineProperty(Dl,"__esModule",{value:!0});Dl.mergeGraphQLTypes=Dl.mergeTypeDefs=void 0;var Gi=Ae(),sO=GT(),vl=aO(),Ol=pa(),Wx=iO();function Eue(e,t){(0,Ol.resetComments)();let n={kind:Gi.Kind.DOCUMENT,definitions:Xx(e,M({useSchemaDefinition:!0,forceSchemaDefinition:!1,throwOnConflict:!1,commentDescriptions:!1},t))},r;return t!=null&&t.commentDescriptions?r=(0,Ol.printWithComments)(n):r=n,(0,Ol.resetComments)(),r}Dl.mergeTypeDefs=Eue;function Sl(e,t,n=[],r=[],i=new Set){if(e&&!i.has(e))if(i.add(e),typeof e=="function")Sl(e(),t,n,r,i);else if(Array.isArray(e))for(let a of e)Sl(a,t,n,r,i);else if((0,Gi.isSchema)(e)){let a=(0,Ol.getDocumentNodeFromSchema)(e,t);Sl(a.definitions,t,n,r,i)}else if((0,sO.isStringTypes)(e)||(0,sO.isSourceTypes)(e)){let a=(0,Gi.parse)(e,t);Sl(a.definitions,t,n,r,i)}else if(typeof e=="object"&&(0,Gi.isDefinitionNode)(e))e.kind===Gi.Kind.DIRECTIVE_DEFINITION?n.push(e):r.push(e);else if((0,Ol.isDocumentNode)(e))Sl(e.definitions,t,n,r,i);else throw new Error(`typeDefs must contain only strings, documents, schemas, or functions, got ${typeof e}`);return{allDirectives:n,allNodes:r}}function Xx(e,t){var c,l,p;(0,Ol.resetComments)();let{allDirectives:n,allNodes:r}=Sl(e,t),i=(0,vl.mergeGraphQLNodes)(n,t),a=(0,vl.mergeGraphQLNodes)(r,t,i);if(t!=null&&t.useSchemaDefinition){let T=a[vl.schemaDefSymbol]||{kind:Gi.Kind.SCHEMA_DEFINITION,operationTypes:[]},y=T.operationTypes;for(let g in Wx.DEFAULT_OPERATION_TYPE_NAME_MAP)if(!y.find(F=>F.operation===g)){let F=Wx.DEFAULT_OPERATION_TYPE_NAME_MAP[g],U=a[F];U!=null&&U.name!=null&&y.push({kind:Gi.Kind.OPERATION_TYPE_DEFINITION,type:{kind:Gi.Kind.NAMED_TYPE,name:U.name},operation:g})}((c=T==null?void 0:T.operationTypes)==null?void 0:c.length)!=null&&T.operationTypes.length>0&&(a[vl.schemaDefSymbol]=T)}t!=null&&t.forceSchemaDefinition&&!((p=(l=a[vl.schemaDefSymbol])==null?void 0:l.operationTypes)!=null&&p.length)&&(a[vl.schemaDefSymbol]={kind:Gi.Kind.SCHEMA_DEFINITION,operationTypes:[{kind:Gi.Kind.OPERATION_TYPE_DEFINITION,operation:"query",type:{kind:Gi.Kind.NAMED_TYPE,name:{kind:Gi.Kind.NAME,value:"Query"}}}]});let o=Object.values(a);if(t!=null&&t.sort){let T=typeof t.sort=="function"?t.sort:sO.defaultStringComparator;o.sort((y,g)=>{var _,F;return T((_=y.name)==null?void 0:_.value,(F=g.name)==null?void 0:F.value)})}return o}Dl.mergeGraphQLTypes=Xx});var eq=w(br=>{"use strict";f();N();m();Object.defineProperty(br,"__esModule",{value:!0});var ei=(zv(),Kf(Hv));ei.__exportStar(JS(),br);ei.__exportStar(Ki(),br);ei.__exportStar(HS(),br);ei.__exportStar(zS(),br);ei.__exportStar(_p(),br);ei.__exportStar(XS(),br);ei.__exportStar(ZS(),br);ei.__exportStar(vp(),br);ei.__exportStar(aO(),br);ei.__exportStar(Zx(),br);ei.__exportStar(tO(),br);ei.__exportStar(eO(),br);ei.__exportStar(rO(),br);ei.__exportStar(GT(),br)});var nq=w(nu=>{"use strict";f();N();m();Object.defineProperty(nu,"__esModule",{value:!0});nu.applyExtensions=nu.mergeExtensions=nu.extractExtensionsFromSchema=void 0;var tq=pa(),hue=pa();Object.defineProperty(nu,"extractExtensionsFromSchema",{enumerable:!0,get:function(){return hue.extractExtensionsFromSchema}});function yue(e){return(0,tq.mergeDeep)(e)}nu.mergeExtensions=yue;function bl(e,t){e&&(e.extensions=(0,tq.mergeDeep)([e.extensions||{},t||{}]))}function Iue(e,t){bl(e,t.schemaExtensions);for(let[n,r]of Object.entries(t.types||{})){let i=e.getType(n);if(i){if(bl(i,r.extensions),r.type==="object"||r.type==="interface")for(let[a,o]of Object.entries(r.fields)){let c=i.getFields()[a];if(c){bl(c,o.extensions);for(let[l,p]of Object.entries(o.arguments))bl(c.args.find(T=>T.name===l),p)}}else if(r.type==="input")for(let[a,o]of Object.entries(r.fields)){let c=i.getFields()[a];bl(c,o.extensions)}else if(r.type==="enum")for(let[a,o]of Object.entries(r.values)){let c=i.getValue(a);bl(c,o)}}}return e}nu.applyExtensions=Iue});var uO=w(Op=>{"use strict";f();N();m();Object.defineProperty(Op,"__esModule",{value:!0});var oO=(zv(),Kf(Hv));oO.__exportStar(Kx(),Op);oO.__exportStar(eq(),Op);oO.__exportStar(nq(),Op)});var cO=w(Je=>{"use strict";f();N();m();Object.defineProperty(Je,"__esModule",{value:!0});Je.TAG_DEFINITION_DATA=Je.SUBSCRIPTION_FILTER_DEFINITION_DATA=Je.SHAREABLE_DEFINITION_DATA=Je.SPECIFIED_BY_DEFINITION_DATA=Je.REQUIRES_SCOPES_DEFINITION_DATA=Je.REQUIRES_DEFINITION_DATA=Je.PROVIDES_DEFINITION_DATA=Je.LINK_DEFINITION_DATA=Je.KEY_DEFINITION_DATA=Je.OVERRIDE_DEFINITION_DATA=Je.REDIS_SUBSCRIBE_DEFINITION_DATA=Je.REDIS_PUBLISH_DEFINITION_DATA=Je.NATS_SUBSCRIBE_DEFINITION_DATA=Je.NATS_REQUEST_DEFINITION_DATA=Je.NATS_PUBLISH_DEFINITION_DATA=Je.KAFKA_SUBSCRIBE_DEFINITION_DATA=Je.KAFKA_PUBLISH_DEFINITION_DATA=Je.INTERFACE_OBJECT_DEFINITION_DATA=Je.INACCESSIBLE_DEFINITION_DATA=Je.EXTERNAL_DEFINITION_DATA=Je.EXTENDS_DEFINITION_DATA=Je.DEPRECATED_DEFINITION_DATA=Je.CONFIGURE_CHILD_DESCRIPTIONS_DEFINITION_DATA=Je.CONFIGURE_DESCRIPTION_DEFINITION_DATA=Je.COMPOSE_DIRECTIVE_DEFINITION_DATA=Je.AUTHENTICATED_DEFINITION_DATA=void 0;var it=hs(),fa=Jr(),ln=Ae(),q=lr();Je.AUTHENTICATED_DEFINITION_DATA={argumentTypeNodeByArgumentName:new Map([]),isRepeatable:!1,locations:new Set([q.ENUM_UPPER,q.FIELD_DEFINITION_UPPER,q.INTERFACE_UPPER,q.OBJECT_UPPER,q.SCALAR_UPPER]),name:q.AUTHENTICATED,node:it.AUTHENTICATED_DEFINITION,optionalArgumentNames:new Set,requiredArgumentNames:new Set};Je.COMPOSE_DIRECTIVE_DEFINITION_DATA={argumentTypeNodeByArgumentName:new Map([[q.NAME,{name:q.NAME,typeNode:it.REQUIRED_STRING_TYPE_NODE}]]),isRepeatable:!0,locations:new Set([q.SCHEMA_UPPER]),name:q.COMPOSE_DIRECTIVE,node:it.COMPOSE_DIRECTIVE_DEFINITION,optionalArgumentNames:new Set,requiredArgumentNames:new Set([q.NAME])};Je.CONFIGURE_DESCRIPTION_DEFINITION_DATA={argumentTypeNodeByArgumentName:new Map([[q.PROPAGATE,{name:q.PROPAGATE,typeNode:{kind:ln.Kind.NON_NULL_TYPE,type:(0,fa.stringToNamedTypeNode)(q.BOOLEAN_SCALAR)},defaultValue:{kind:ln.Kind.BOOLEAN,value:!0}}],[q.DESCRIPTION_OVERRIDE,{name:q.DESCRIPTION_OVERRIDE,typeNode:(0,fa.stringToNamedTypeNode)(q.STRING_SCALAR)}]]),isRepeatable:!1,locations:new Set([q.ARGUMENT_DEFINITION_UPPER,q.ENUM_UPPER,q.ENUM_VALUE_UPPER,q.FIELD_DEFINITION_UPPER,q.INTERFACE_UPPER,q.INPUT_OBJECT_UPPER,q.INPUT_FIELD_DEFINITION_UPPER,q.OBJECT_UPPER,q.SCALAR_UPPER,q.SCHEMA_UPPER,q.UNION_UPPER]),name:q.CONFIGURE_DESCRIPTION,node:it.CONFIGURE_DESCRIPTION_DEFINITION,optionalArgumentNames:new Set([q.PROPAGATE,q.DESCRIPTION_OVERRIDE]),requiredArgumentNames:new Set};Je.CONFIGURE_CHILD_DESCRIPTIONS_DEFINITION_DATA={argumentTypeNodeByArgumentName:new Map([[q.PROPAGATE,{name:q.PROPAGATE,typeNode:{kind:ln.Kind.NON_NULL_TYPE,type:(0,fa.stringToNamedTypeNode)(q.BOOLEAN_SCALAR)},defaultValue:{kind:ln.Kind.BOOLEAN,value:!0}}]]),isRepeatable:!1,locations:new Set([q.ENUM_UPPER,q.INPUT_OBJECT_UPPER,q.INTERFACE_UPPER,q.OBJECT_UPPER]),name:q.CONFIGURE_CHILD_DESCRIPTIONS,node:it.CONFIGURE_CHILD_DESCRIPTIONS_DEFINITION,optionalArgumentNames:new Set([q.PROPAGATE]),requiredArgumentNames:new Set};Je.DEPRECATED_DEFINITION_DATA={argumentTypeNodeByArgumentName:new Map([[q.REASON,{name:q.REASON,typeNode:(0,fa.stringToNamedTypeNode)(q.STRING_SCALAR),defaultValue:{kind:ln.Kind.STRING,value:ln.DEFAULT_DEPRECATION_REASON}}]]),isRepeatable:!1,locations:new Set([q.ARGUMENT_DEFINITION_UPPER,q.ENUM_VALUE_UPPER,q.FIELD_DEFINITION_UPPER,q.INPUT_FIELD_DEFINITION_UPPER]),name:q.DEPRECATED,node:it.DEPRECATED_DEFINITION,optionalArgumentNames:new Set([q.REASON]),requiredArgumentNames:new Set};Je.EXTENDS_DEFINITION_DATA={argumentTypeNodeByArgumentName:new Map,isRepeatable:!1,locations:new Set([q.INTERFACE_UPPER,q.OBJECT_UPPER]),name:q.EXTENDS,node:it.EXTENDS_DEFINITION,optionalArgumentNames:new Set,requiredArgumentNames:new Set};Je.EXTERNAL_DEFINITION_DATA={argumentTypeNodeByArgumentName:new Map,isRepeatable:!1,locations:new Set([q.FIELD_DEFINITION_UPPER,q.OBJECT_UPPER]),name:q.EXTERNAL,node:it.EXTERNAL_DEFINITION,optionalArgumentNames:new Set,requiredArgumentNames:new Set};Je.INACCESSIBLE_DEFINITION_DATA={argumentTypeNodeByArgumentName:new Map,isRepeatable:!1,locations:new Set([q.ARGUMENT_DEFINITION_UPPER,q.ENUM_UPPER,q.ENUM_VALUE_UPPER,q.FIELD_DEFINITION_UPPER,q.INPUT_FIELD_DEFINITION_UPPER,q.INPUT_OBJECT_UPPER,q.INTERFACE_UPPER,q.OBJECT_UPPER,q.SCALAR_UPPER,q.UNION_UPPER]),name:q.INACCESSIBLE,node:it.INACCESSIBLE_DEFINITION,optionalArgumentNames:new Set,requiredArgumentNames:new Set};Je.INTERFACE_OBJECT_DEFINITION_DATA={argumentTypeNodeByArgumentName:new Map,isRepeatable:!1,locations:new Set([q.OBJECT_UPPER]),name:q.INTERFACE_OBJECT,node:it.INTERFACE_OBJECT_DEFINITION,optionalArgumentNames:new Set,requiredArgumentNames:new Set};Je.KAFKA_PUBLISH_DEFINITION_DATA={argumentTypeNodeByArgumentName:new Map([[q.TOPIC,{name:q.TOPIC,typeNode:it.REQUIRED_STRING_TYPE_NODE}],[q.PROVIDER_ID,{name:q.PROVIDER_ID,typeNode:it.REQUIRED_STRING_TYPE_NODE,defaultValue:{kind:ln.Kind.STRING,value:q.DEFAULT_EDFS_PROVIDER_ID}}]]),isRepeatable:!1,locations:new Set([q.FIELD_DEFINITION_UPPER]),name:q.EDFS_KAFKA_PUBLISH,node:it.EDFS_KAFKA_PUBLISH_DEFINITION,optionalArgumentNames:new Set([q.PROVIDER_ID]),requiredArgumentNames:new Set([q.TOPIC])};Je.KAFKA_SUBSCRIBE_DEFINITION_DATA={argumentTypeNodeByArgumentName:new Map([[q.TOPICS,{name:q.TOPICS,typeNode:{kind:ln.Kind.NON_NULL_TYPE,type:{kind:ln.Kind.LIST_TYPE,type:it.REQUIRED_STRING_TYPE_NODE}}}],[q.PROVIDER_ID,{name:q.PROVIDER_ID,typeNode:it.REQUIRED_STRING_TYPE_NODE,defaultValue:{kind:ln.Kind.STRING,value:q.DEFAULT_EDFS_PROVIDER_ID}}]]),isRepeatable:!1,locations:new Set([q.FIELD_DEFINITION_UPPER]),name:q.EDFS_KAFKA_SUBSCRIBE,node:it.EDFS_KAFKA_SUBSCRIBE_DEFINITION,optionalArgumentNames:new Set([q.PROVIDER_ID]),requiredArgumentNames:new Set([q.TOPICS])};Je.NATS_PUBLISH_DEFINITION_DATA={argumentTypeNodeByArgumentName:new Map([[q.SUBJECT,{name:q.SUBJECT,typeNode:it.REQUIRED_STRING_TYPE_NODE}],[q.PROVIDER_ID,{name:q.PROVIDER_ID,typeNode:it.REQUIRED_STRING_TYPE_NODE,defaultValue:{kind:ln.Kind.STRING,value:q.DEFAULT_EDFS_PROVIDER_ID}}]]),isRepeatable:!1,locations:new Set([q.FIELD_DEFINITION_UPPER]),name:q.EDFS_NATS_PUBLISH,node:it.EDFS_NATS_PUBLISH_DEFINITION,optionalArgumentNames:new Set([q.PROVIDER_ID]),requiredArgumentNames:new Set([q.SUBJECT])};Je.NATS_REQUEST_DEFINITION_DATA={argumentTypeNodeByArgumentName:new Map([[q.SUBJECT,{name:q.SUBJECT,typeNode:it.REQUIRED_STRING_TYPE_NODE}],[q.PROVIDER_ID,{name:q.PROVIDER_ID,typeNode:it.REQUIRED_STRING_TYPE_NODE,defaultValue:{kind:ln.Kind.STRING,value:q.DEFAULT_EDFS_PROVIDER_ID}}]]),isRepeatable:!1,locations:new Set([q.FIELD_DEFINITION_UPPER]),name:q.EDFS_NATS_REQUEST,node:it.EDFS_NATS_REQUEST_DEFINITION,optionalArgumentNames:new Set([q.PROVIDER_ID]),requiredArgumentNames:new Set([q.SUBJECT])};Je.NATS_SUBSCRIBE_DEFINITION_DATA={argumentTypeNodeByArgumentName:new Map([[q.SUBJECTS,{name:q.SUBJECTS,typeNode:{kind:ln.Kind.NON_NULL_TYPE,type:{kind:ln.Kind.LIST_TYPE,type:it.REQUIRED_STRING_TYPE_NODE}}}],[q.PROVIDER_ID,{name:q.PROVIDER_ID,typeNode:it.REQUIRED_STRING_TYPE_NODE,defaultValue:{kind:ln.Kind.STRING,value:q.DEFAULT_EDFS_PROVIDER_ID}}],[q.STREAM_CONFIGURATION,{name:q.STREAM_CONFIGURATION,typeNode:(0,fa.stringToNamedTypeNode)(q.EDFS_NATS_STREAM_CONFIGURATION)}]]),isRepeatable:!1,locations:new Set([q.FIELD_DEFINITION_UPPER]),name:q.EDFS_NATS_SUBSCRIBE,node:it.EDFS_NATS_SUBSCRIBE_DEFINITION,optionalArgumentNames:new Set([q.PROVIDER_ID]),requiredArgumentNames:new Set([q.SUBJECTS])};Je.REDIS_PUBLISH_DEFINITION_DATA={argumentTypeNodeByArgumentName:new Map([[q.CHANNEL,{name:q.CHANNEL,typeNode:it.REQUIRED_STRING_TYPE_NODE}],[q.PROVIDER_ID,{name:q.PROVIDER_ID,typeNode:it.REQUIRED_STRING_TYPE_NODE,defaultValue:{kind:ln.Kind.STRING,value:q.DEFAULT_EDFS_PROVIDER_ID}}]]),isRepeatable:!1,locations:new Set([q.FIELD_DEFINITION_UPPER]),name:q.EDFS_REDIS_PUBLISH,node:it.EDFS_REDIS_PUBLISH_DEFINITION,optionalArgumentNames:new Set([q.PROVIDER_ID]),requiredArgumentNames:new Set([q.CHANNEL])};Je.REDIS_SUBSCRIBE_DEFINITION_DATA={argumentTypeNodeByArgumentName:new Map([[q.CHANNELS,{name:q.CHANNELS,typeNode:{kind:ln.Kind.NON_NULL_TYPE,type:{kind:ln.Kind.LIST_TYPE,type:it.REQUIRED_STRING_TYPE_NODE}}}],[q.PROVIDER_ID,{name:q.PROVIDER_ID,typeNode:it.REQUIRED_STRING_TYPE_NODE,defaultValue:{kind:ln.Kind.STRING,value:q.DEFAULT_EDFS_PROVIDER_ID}}]]),isRepeatable:!1,locations:new Set([q.FIELD_DEFINITION_UPPER]),name:q.EDFS_REDIS_SUBSCRIBE,node:it.EDFS_REDIS_SUBSCRIBE_DEFINITION,optionalArgumentNames:new Set([q.PROVIDER_ID]),requiredArgumentNames:new Set([q.CHANNELS])};Je.OVERRIDE_DEFINITION_DATA={argumentTypeNodeByArgumentName:new Map([[q.FROM,{name:q.FROM,typeNode:it.REQUIRED_STRING_TYPE_NODE}]]),isRepeatable:!1,locations:new Set([q.FIELD_DEFINITION_UPPER]),name:q.OVERRIDE,node:it.OVERRIDE_DEFINITION,optionalArgumentNames:new Set,requiredArgumentNames:new Set([q.FROM])};Je.KEY_DEFINITION_DATA={argumentTypeNodeByArgumentName:new Map([[q.FIELDS,{name:q.FIELDS,typeNode:it.REQUIRED_FIELDSET_TYPE_NODE}],[q.RESOLVABLE,{name:q.RESOLVABLE,typeNode:(0,fa.stringToNamedTypeNode)(q.BOOLEAN_SCALAR),defaultValue:{kind:ln.Kind.BOOLEAN,value:!0}}]]),isRepeatable:!0,locations:new Set([q.INTERFACE_UPPER,q.OBJECT_UPPER]),name:q.KEY,node:it.KEY_DEFINITION,optionalArgumentNames:new Set([q.RESOLVABLE]),requiredArgumentNames:new Set([q.FIELDS])};Je.LINK_DEFINITION_DATA={argumentTypeNodeByArgumentName:new Map([[q.URL_LOWER,{name:q.URL_LOWER,typeNode:it.REQUIRED_STRING_TYPE_NODE}],[q.AS,{name:q.AS,typeNode:(0,fa.stringToNamedTypeNode)(q.STRING_SCALAR)}],[q.FOR,{name:q.FOR,typeNode:(0,fa.stringToNamedTypeNode)(q.LINK_PURPOSE)}],[q.IMPORT,{name:q.IMPORT,typeNode:{kind:ln.Kind.LIST_TYPE,type:(0,fa.stringToNamedTypeNode)(q.LINK_IMPORT)}}]]),isRepeatable:!0,locations:new Set([q.SCHEMA_UPPER]),name:q.LINK,node:it.LINK_DEFINITION,optionalArgumentNames:new Set([q.AS,q.FOR,q.IMPORT]),requiredArgumentNames:new Set([q.URL_LOWER])};Je.PROVIDES_DEFINITION_DATA={argumentTypeNodeByArgumentName:new Map([[q.FIELDS,{name:q.FIELDS,typeNode:it.REQUIRED_FIELDSET_TYPE_NODE}]]),isRepeatable:!1,locations:new Set([q.FIELD_DEFINITION_UPPER]),name:q.PROVIDES,node:it.PROVIDES_DEFINITION,optionalArgumentNames:new Set,requiredArgumentNames:new Set([q.FIELDS])};Je.REQUIRES_DEFINITION_DATA={argumentTypeNodeByArgumentName:new Map([[q.FIELDS,{name:q.FIELDS,typeNode:it.REQUIRED_FIELDSET_TYPE_NODE}]]),isRepeatable:!1,locations:new Set([q.FIELD_DEFINITION_UPPER]),name:q.REQUIRES,node:it.REQUIRES_DEFINITION,optionalArgumentNames:new Set,requiredArgumentNames:new Set([q.FIELDS])};Je.REQUIRES_SCOPES_DEFINITION_DATA={argumentTypeNodeByArgumentName:new Map([[q.SCOPES,{name:q.SCOPES,typeNode:{kind:ln.Kind.NON_NULL_TYPE,type:{kind:ln.Kind.LIST_TYPE,type:{kind:ln.Kind.NON_NULL_TYPE,type:{kind:ln.Kind.LIST_TYPE,type:{kind:ln.Kind.NON_NULL_TYPE,type:(0,fa.stringToNamedTypeNode)(q.SCOPE_SCALAR)}}}}}}]]),isRepeatable:!1,locations:new Set([q.ENUM_UPPER,q.FIELD_DEFINITION_UPPER,q.INTERFACE_UPPER,q.OBJECT_UPPER,q.SCALAR_UPPER]),name:q.REQUIRES_SCOPES,node:it.REQUIRES_SCOPES_DEFINITION,optionalArgumentNames:new Set,requiredArgumentNames:new Set([q.SCOPES])};Je.SPECIFIED_BY_DEFINITION_DATA={argumentTypeNodeByArgumentName:new Map([[q.URL_LOWER,{name:q.URL_LOWER,typeNode:it.REQUIRED_STRING_TYPE_NODE}]]),isRepeatable:!1,locations:new Set([q.SCALAR_UPPER]),name:q.SPECIFIED_BY,node:it.SPECIFIED_BY_DEFINITION,optionalArgumentNames:new Set,requiredArgumentNames:new Set([q.URL_LOWER])};Je.SHAREABLE_DEFINITION_DATA={argumentTypeNodeByArgumentName:new Map,isRepeatable:!0,locations:new Set([q.FIELD_DEFINITION_UPPER,q.OBJECT_UPPER]),name:q.SHAREABLE,node:it.SHAREABLE_DEFINITION,optionalArgumentNames:new Set,requiredArgumentNames:new Set};Je.SUBSCRIPTION_FILTER_DEFINITION_DATA={argumentTypeNodeByArgumentName:new Map([[q.CONDITION,{name:q.CONDITION,typeNode:{kind:ln.Kind.NON_NULL_TYPE,type:(0,fa.stringToNamedTypeNode)(q.SUBSCRIPTION_FILTER_CONDITION)}}]]),isRepeatable:!1,locations:new Set([q.FIELD_DEFINITION_UPPER]),name:q.SUBSCRIPTION_FILTER,node:it.SUBSCRIPTION_FILTER_DEFINITION,optionalArgumentNames:new Set,requiredArgumentNames:new Set([q.CONDITION])};Je.TAG_DEFINITION_DATA={argumentTypeNodeByArgumentName:new Map([[q.NAME,{name:q.NAME,typeNode:it.REQUIRED_STRING_TYPE_NODE}]]),isRepeatable:!0,locations:new Set([q.ARGUMENT_DEFINITION_UPPER,q.ENUM_UPPER,q.ENUM_VALUE_UPPER,q.FIELD_DEFINITION_UPPER,q.INPUT_FIELD_DEFINITION_UPPER,q.INPUT_OBJECT_UPPER,q.INTERFACE_UPPER,q.OBJECT_UPPER,q.SCALAR_UPPER,q.UNION_UPPER]),name:q.TAG,node:it.TAG_DEFINITION,optionalArgumentNames:new Set,requiredArgumentNames:new Set([q.NAME])}});var Dp=w(ma=>{"use strict";f();N();m();Object.defineProperty(ma,"__esModule",{value:!0});ma.newFieldSetData=gue;ma.extractFieldSetValue=_ue;ma.getNormalizedFieldSet=vue;ma.getInitialFieldCoordsPath=Sue;ma.validateKeyFieldSets=Oue;ma.getConditionalFieldSetDirectiveName=Due;ma.isNodeQuery=bue;ma.validateArgumentTemplateReferences=Aue;ma.initializeDirectiveDefinitionDatas=Rue;var nr=Ae(),rq=Jr(),Ar=sa(),iq=hs(),lO=Jo(),mn=cO(),kt=lr(),ru=Hr();function gue(){return{provides:new Map,requires:new Map}}function _ue(e,t,n){if(!n||n.length>1)return;let r=n[0].arguments;if(!r||r.length!==1)return;let i=r[0];i.name.value!==kt.FIELDS||i.value.kind!==nr.Kind.STRING||t.set(e,i.value.value)}function vue(e){return(0,nr.print)((0,rq.lexicographicallySortDocumentNode)(e)).replaceAll(/\s+/g," ").slice(2,-2)}function Sue(e,t){return e?[t]:[]}function Oue(e,t,n){let r=e.entityInterfaceDataByTypeName.get(t.name),i=t.name,a=[],o=[],c=r?void 0:e.internalGraph.addEntityDataNode(t.name),l=e.internalGraph.addOrUpdateNode(t.name),p=0;for(let[T,{documentNode:y,isUnresolvable:g,rawFieldSet:_}]of n){r&&(r.resolvable||(r.resolvable=!g)),p+=1;let F=[],U=[t],K=[],J=[],ee=new Set,W=-1,Te=!0,de="";if((0,nr.visit)(y,{Argument:{enter(we){return F.push((0,Ar.unexpectedArgumentErrorMessage)(_,`${U[W].name}.${de}`,we.name.value)),nr.BREAK}},Field:{enter(we){let qe=U[W],et=qe.name;if(Te){let bn=`${et}.${de}`,Vt=qe.fieldDataByFieldName.get(de);if(!Vt)return F.push((0,Ar.undefinedFieldInFieldSetErrorMessage)(_,bn,de)),nr.BREAK;let dn=(0,lO.getTypeNodeNamedTypeName)(Vt.node.type),Rr=e.parentDefinitionDataByTypeName.get(dn),Fr=Rr?Rr.kind:nr.Kind.SCALAR_TYPE_DEFINITION;return F.push((0,Ar.invalidSelectionSetErrorMessage)(_,[bn],dn,(0,ru.kindToTypeString)(Fr))),nr.BREAK}let X=we.name.value,ve=`${et}.${X}`;de=X;let gt=qe.fieldDataByFieldName.get(X);if(!gt)return F.push((0,Ar.undefinedFieldInFieldSetErrorMessage)(_,et,X)),nr.BREAK;if(gt.argumentDataByArgumentName.size)return F.push((0,Ar.argumentsInKeyFieldSetErrorMessage)(_,ve)),nr.BREAK;if(K[W].has(X))return F.push((0,Ar.duplicateFieldInFieldSetErrorMessage)(_,ve)),nr.BREAK;(0,ru.getValueOrDefault)((0,ru.getValueOrDefault)(e.keyFieldSetsByEntityTypeNameByFieldCoords,ve,()=>new Map),i,()=>new Set).add(T),J.push(X),gt.isShareableBySubgraphName.set(e.subgraphName,!0),K[W].add(X),(0,ru.getValueOrDefault)(e.keyFieldNamesByParentTypeName,et,()=>new Set).add(X);let Ht=(0,lO.getTypeNodeNamedTypeName)(gt.node.type);if(iq.BASE_SCALARS.has(Ht)){ee.add(J.join(kt.PERIOD)),J.pop();return}let zt=e.parentDefinitionDataByTypeName.get(Ht);if(!zt)return F.push((0,Ar.unknownTypeInFieldSetErrorMessage)(_,ve,Ht)),nr.BREAK;if(zt.kind===nr.Kind.OBJECT_TYPE_DEFINITION){Te=!0,U.push(zt);return}if((0,rq.isKindAbstract)(zt.kind))return F.push((0,Ar.abstractTypeInKeyFieldSetErrorMessage)(_,ve,Ht,(0,ru.kindToTypeString)(zt.kind))),nr.BREAK;ee.add(J.join(kt.PERIOD)),J.pop()}},InlineFragment:{enter(){return F.push(Ar.inlineFragmentInFieldSetErrorMessage),nr.BREAK}},SelectionSet:{enter(){if(!Te){let we=U[W],et=`${we.name}.${de}`,X=we.fieldDataByFieldName.get(de);if(!X)return F.push((0,Ar.undefinedFieldInFieldSetErrorMessage)(_,et,de)),nr.BREAK;let ve=(0,lO.getTypeNodeNamedTypeName)(X.node.type),gt=e.parentDefinitionDataByTypeName.get(ve),Ht=gt?gt.kind:nr.Kind.SCALAR_TYPE_DEFINITION;return F.push((0,Ar.invalidSelectionSetDefinitionErrorMessage)(_,[et],ve,(0,ru.kindToTypeString)(Ht))),nr.BREAK}if(W+=1,Te=!1,W<0||W>=U.length)return F.push((0,Ar.unparsableFieldSetSelectionErrorMessage)(_,de)),nr.BREAK;K.push(new Set)},leave(){if(Te){let qe=U[W].name,et=U[W+1],X=`${qe}.${de}`;F.push((0,Ar.invalidSelectionSetErrorMessage)(_,[X],et.name,(0,ru.kindToTypeString)(et.kind))),Te=!1}W-=1,U.pop(),K.pop()}}}),F.length>0){e.errors.push((0,Ar.invalidDirectiveError)(kt.KEY,i,(0,ru.numberToOrdinal)(p),F));continue}a.push(M({fieldName:"",selectionSet:T},g?{disableEntityResolver:!0}:{})),l.satisfiedFieldSets.add(T),!g&&(c==null||c.addTargetSubgraphByFieldSet(T,e.subgraphName),o.push(ee))}if(a.length>0)return a}function Due(e){return e?kt.PROVIDES:kt.REQUIRES}function bue(e,t){return e===kt.QUERY||t===nr.OperationTypeNode.QUERY}function Aue(e,t,n){let r=e.matchAll(iq.EDFS_ARGS_REGEXP),i=new Set,a=new Set;for(let o of r){if(o.length<2){a.add(o[0]);continue}t.has(o[1])||i.add(o[1])}for(let o of i)n.push((0,Ar.undefinedEventSubjectsArgumentErrorMessage)(o));for(let o of a)n.push((0,Ar.invalidEventSubjectsArgumentErrorMessage)(o))}function Rue(){return new Map([[kt.AUTHENTICATED,mn.AUTHENTICATED_DEFINITION_DATA],[kt.COMPOSE_DIRECTIVE,mn.COMPOSE_DIRECTIVE_DEFINITION_DATA],[kt.CONFIGURE_DESCRIPTION,mn.CONFIGURE_DESCRIPTION_DEFINITION_DATA],[kt.CONFIGURE_CHILD_DESCRIPTIONS,mn.CONFIGURE_CHILD_DESCRIPTIONS_DEFINITION_DATA],[kt.DEPRECATED,mn.DEPRECATED_DEFINITION_DATA],[kt.EDFS_KAFKA_PUBLISH,mn.KAFKA_PUBLISH_DEFINITION_DATA],[kt.EDFS_KAFKA_SUBSCRIBE,mn.KAFKA_SUBSCRIBE_DEFINITION_DATA],[kt.EDFS_NATS_PUBLISH,mn.NATS_PUBLISH_DEFINITION_DATA],[kt.EDFS_NATS_REQUEST,mn.NATS_REQUEST_DEFINITION_DATA],[kt.EDFS_NATS_SUBSCRIBE,mn.NATS_SUBSCRIBE_DEFINITION_DATA],[kt.EDFS_REDIS_PUBLISH,mn.REDIS_PUBLISH_DEFINITION_DATA],[kt.EDFS_REDIS_SUBSCRIBE,mn.REDIS_SUBSCRIBE_DEFINITION_DATA],[kt.EXTENDS,mn.EXTENDS_DEFINITION_DATA],[kt.EXTERNAL,mn.EXTERNAL_DEFINITION_DATA],[kt.INACCESSIBLE,mn.INACCESSIBLE_DEFINITION_DATA],[kt.INTERFACE_OBJECT,mn.INTERFACE_OBJECT_DEFINITION_DATA],[kt.KEY,mn.KEY_DEFINITION_DATA],[kt.LINK,mn.LINK_DEFINITION_DATA],[kt.OVERRIDE,mn.OVERRIDE_DEFINITION_DATA],[kt.PROVIDES,mn.PROVIDES_DEFINITION_DATA],[kt.REQUIRES,mn.REQUIRES_DEFINITION_DATA],[kt.REQUIRES_SCOPES,mn.REQUIRES_SCOPES_DEFINITION_DATA],[kt.SHAREABLE,mn.SHAREABLE_DEFINITION_DATA],[kt.SPECIFIED_BY,mn.SPECIFIED_BY_DEFINITION_DATA],[kt.SUBSCRIPTION_FILTER,mn.SUBSCRIPTION_FILTER_DEFINITION_DATA],[kt.TAG,mn.TAG_DEFINITION_DATA]])}});var pO=w(dO=>{"use strict";f();N();m();Object.defineProperty(dO,"__esModule",{value:!0});dO.recordSubgraphName=Fue;function Fue(e,t,n){if(!t.has(e)){t.add(e);return}n.add(e)}});var mO=w(XT=>{"use strict";f();N();m();Object.defineProperty(XT,"__esModule",{value:!0});XT.Warning=void 0;var fO=class extends Error{constructor(n){super(n.message);v(this,"subgraph");this.name="Warning",this.subgraph=n.subgraph}};XT.Warning=fO});var eE=w(Na=>{"use strict";f();N();m();Object.defineProperty(Na,"__esModule",{value:!0});Na.invalidOverrideTargetSubgraphNameWarning=Pue;Na.externalInterfaceFieldsWarning=wue;Na.nonExternalConditionalFieldWarning=Lue;Na.unimplementedInterfaceOutputTypeWarning=Cue;Na.invalidExternalFieldWarning=Bue;Na.requiresDefinedOnNonEntityFieldWarning=Uue;Na.consumerInactiveThresholdInvalidValueWarning=kue;Na.externalEntityExtensionKeyFieldWarning=Mue;Na.fieldAlreadyProvidedWarning=xue;var _s=mO(),NO=lr();function Pue(e,t,n,r){return new _s.Warning({message:`The Object type "${t}" defines the directive "@override(from: "${e}")" on the following field`+(n.length>1?"s":"")+': "'+n.join(NO.QUOTATION_JOIN)+`". The required "from" argument of type "String!" should be provided with an existing subgraph name. However, a subgraph by the name of "${e}" does not exist. -If this subgraph has been recently deleted, remember to clean up unused "@override" directives that reference this subgraph.`,subgraph:{name:r}})}function XN(e){return`The subgraph "${e}" is currently a "version one" subgraph, but if it were updated to "version two" in its current state, composition would be unsuccessful due to the following warning that would instead propagate as an error: -`}function Fue(e,t,n){return new _s.Warning({message:XN(e)+`The Interface "${t}" is invalid because the following field definition`+(n.length>1?"s are":" is")+` declared "@external": - "`+n.join(mO.QUOTATION_JOIN)+`" -Interface fields should not be declared "@external". This is because Interface fields do not resolve directly, but the "@external" directive relates to whether a Field instance can be resolved by the subgraph in which it is defined.`,subgraph:{name:e}})}function Pue(e,t,n,r,i){return new _s.Warning({message:XN(t)+`The Field "${e}" in subgraph "${t}" defines a "@${i}" directive with the following field set: +If this subgraph has been recently deleted, remember to clean up unused "@override" directives that reference this subgraph.`,subgraph:{name:r}})}function ZT(e){return`The subgraph "${e}" is currently a "version one" subgraph, but if it were updated to "version two" in its current state, composition would be unsuccessful due to the following warning that would instead propagate as an error: +`}function wue(e,t,n){return new _s.Warning({message:ZT(e)+`The Interface "${t}" is invalid because the following field definition`+(n.length>1?"s are":" is")+` declared "@external": + "`+n.join(NO.QUOTATION_JOIN)+`" +Interface fields should not be declared "@external". This is because Interface fields do not resolve directly, but the "@external" directive relates to whether a Field instance can be resolved by the subgraph in which it is defined.`,subgraph:{name:e}})}function Lue(e,t,n,r,i){return new _s.Warning({message:ZT(t)+`The Field "${e}" in subgraph "${t}" defines a "@${i}" directive with the following field set: "${r}". However, neither the field "${n}" nor any of its field set ancestors are declared @external. -Consequently, "${n}" is already provided by subgraph "${t}" and should not form part of a "@${i}" directive field set.`,subgraph:{name:t}})}function wue(e,t){return new _s.Warning({message:`Subgraph "${e}": The Interface "${t}" is used as an output type without at least one Object type implementation defined in the schema.`,subgraph:{name:e}})}function Lue(e,t){return new _s.Warning({message:XN(t)+` The Object Field "${e}" is invalidly declared "@external". An Object field should only be declared "@external" if it is part of a "@key", "@provides", or "@requires" filed set, or the field is necessary to satisfy an Interface implementation. In the case that none of these conditions is true, the "@external" directive should be removed.`,subgraph:{name:t}})}function Cue(e,t){return new _s.Warning({message:` The Object Field "${e}" defines a "@requires" directive, but the Object is not an entity. Consequently, the "@requires" FieldSet cannot be satisfied because there is no entity resolver with which to provide the required Fields.`,subgraph:{name:t}})}function Bue(e,t=""){return new _s.Warning({message:'The "consumerInactiveThreshold" argument of type "Int" should be positive and smaller than 2,147,483,648.'+ +t?` -${t}`:"",subgraph:{name:e}})}function Uue(e,t,n,r){return new _s.Warning({message:`The entity extension "${e}" defined in subgraph "${r}" defines a "@key" directive with the field set "${t}". +Consequently, "${n}" is already provided by subgraph "${t}" and should not form part of a "@${i}" directive field set.`,subgraph:{name:t}})}function Cue(e,t){return new _s.Warning({message:`Subgraph "${e}": The Interface "${t}" is used as an output type without at least one Object type implementation defined in the schema.`,subgraph:{name:e}})}function Bue(e,t){return new _s.Warning({message:ZT(t)+` The Object Field "${e}" is invalidly declared "@external". An Object field should only be declared "@external" if it is part of a "@key", "@provides", or "@requires" filed set, or the field is necessary to satisfy an Interface implementation. In the case that none of these conditions is true, the "@external" directive should be removed.`,subgraph:{name:t}})}function Uue(e,t){return new _s.Warning({message:` The Object Field "${e}" defines a "@requires" directive, but the Object is not an entity. Consequently, the "@requires" FieldSet cannot be satisfied because there is no entity resolver with which to provide the required Fields.`,subgraph:{name:t}})}function kue(e,t=""){return new _s.Warning({message:'The "consumerInactiveThreshold" argument of type "Int" should be positive and smaller than 2,147,483,648.'+ +t?` +${t}`:"",subgraph:{name:e}})}function Mue(e,t,n,r){return new _s.Warning({message:`The entity extension "${e}" defined in subgraph "${r}" defines a "@key" directive with the field set "${t}". The following field coordinates that form part of that field set are declared "@external": - "`+n.join(mO.QUOTATION_JOIN)+`" -Please note fields that form part of entity extension "@key" field sets are always provided in that subgraph. Any such "@external" declarations are unnecessary relics of Federation Version 1 syntax and are effectively ignored.`,subgraph:{name:r}})}function kue(e,t,n,r){return new _s.Warning({message:XN(r)+`The field "${e}" is unconditionally provided by subgraph "${r}" and should not form part of any "@${t}" field set. + "`+n.join(NO.QUOTATION_JOIN)+`" +Please note fields that form part of entity extension "@key" field sets are always provided in that subgraph. Any such "@external" declarations are unnecessary relics of Federation Version 1 syntax and are effectively ignored.`,subgraph:{name:r}})}function xue(e,t,n,r){return new _s.Warning({message:ZT(r)+`The field "${e}" is unconditionally provided by subgraph "${r}" and should not form part of any "@${t}" field set. However, "${e}" forms part of the "@${t}" field set defined "${n}". -Although "${e}" is declared "@external", it is part of a "@key" directive on an extension type. Such fields are only declared "@external" for legacy syntactical reasons and are not internally considered "@external".`,subgraph:{name:r}})}});var bp=P(eh=>{"use strict";f();T();m();Object.defineProperty(eh,"__esModule",{value:!0});eh.ExtensionType=void 0;var rq;(function(e){e[e.EXTENDS=0]="EXTENDS",e[e.NONE=1]="NONE",e[e.REAL=2]="REAL"})(rq||(eh.ExtensionType=rq={}))});var Ap=P(Tt=>{"use strict";f();T();m();Object.defineProperty(Tt,"__esModule",{value:!0});Tt.MergeMethod=void 0;Tt.newPersistedDirectivesData=xue;Tt.isNodeExternalOrShareable=que;Tt.isTypeRequired=Vue;Tt.areDefaultValuesCompatible=aq;Tt.compareAndValidateInputValueDefaultValues=jue;Tt.setMutualExecutableLocations=Kue;Tt.isTypeNameRootType=Gue;Tt.getRenamedRootTypeName=$ue;Tt.childMapToValueArray=Yue;Tt.removeInheritableDirectivesFromObjectParent=Jue;Tt.setLongestDescription=Hue;Tt.isParentDataRootType=sq;Tt.isParentDataInterfaceType=zue;Tt.setParentDataExtensionType=Wue;Tt.extractPersistedDirectives=ece;Tt.propagateAuthDirectives=tce;Tt.propagateFieldAuthDirectives=nce;Tt.generateDeprecatedDirective=EO;Tt.getClientPersistedDirectiveNodes=NO;Tt.getNodeForRouterSchemaByData=ice;Tt.getClientSchemaFieldNodeByFieldData=ace;Tt.getNodeWithPersistedDirectivesByInputValueData=uq;Tt.addValidPersistedDirectiveDefinitionNodeByData=oce;Tt.newInvalidFieldNames=uce;Tt.validateExternalAndShareable=cce;Tt.isTypeValidImplementation=th;Tt.isNodeDataInaccessible=cq;Tt.isLeafKind=lce;Tt.getSubscriptionFilterValue=dce;Tt.getParentTypeName=pce;Tt.newConditionalFieldData=fce;Tt.getDefinitionDataCoords=mce;Tt.isParentDataCompositeOutputType=Tce;Tt.newExternalFieldData=Nce;Tt.getInitialFederatedDescription=hce;Tt.areKindsEqual=Ece;Tt.isFieldData=lq;var it=Ae(),TO=bp(),Dl=Jr(),hO=sa(),xt=lr(),Dp=Hr(),Mue=NT();function xue(){return{deprecatedReason:"",directivesByDirectiveName:new Map,isDeprecated:!1,tagDirectiveByName:new Map}}function que(e,t,n){var i;let r={isExternal:n.has(xt.EXTERNAL),isShareable:t||n.has(xt.SHAREABLE)};if(!((i=e.directives)!=null&&i.length))return r;for(let a of e.directives){let o=a.name.value;if(o===xt.EXTERNAL){r.isExternal=!0;continue}o===xt.SHAREABLE&&(r.isShareable=!0)}return r}function Vue(e){return e.kind===it.Kind.NON_NULL_TYPE}function aq(e,t){switch(e.kind){case it.Kind.LIST_TYPE:return t.kind===it.Kind.LIST||t.kind===it.Kind.NULL;case it.Kind.NAMED_TYPE:if(t.kind===it.Kind.NULL)return!0;switch(e.name.value){case xt.BOOLEAN_SCALAR:return t.kind===it.Kind.BOOLEAN;case xt.FLOAT_SCALAR:return t.kind===it.Kind.INT||t.kind===it.Kind.FLOAT;case xt.INT_SCALAR:return t.kind===it.Kind.INT;case xt.STRING_SCALAR:return t.kind===it.Kind.STRING;default:return!0}case it.Kind.NON_NULL_TYPE:return t.kind===it.Kind.NULL?!1:aq(e.type,t)}}function jue(e,t,n){if(!e.defaultValue)return;if(!t.defaultValue){e.includeDefaultValue=!1;return}let r=(0,it.print)(e.defaultValue),i=(0,it.print)(t.defaultValue);if(r!==i){n.push((0,hO.incompatibleInputValueDefaultValuesError)(`${e.isArgument?xt.ARGUMENT:xt.INPUT_FIELD} "${e.name}"`,e.originalCoords,[...t.subgraphNames],r,i));return}}function Kue(e,t){let n=new Set;for(let r of t)e.executableLocations.has(r)&&n.add(r);e.executableLocations=n}function Gue(e,t){return xt.ROOT_TYPE_NAMES.has(e)||t.has(e)}function $ue(e,t){let n=t.get(e);if(!n)return e;switch(n){case it.OperationTypeNode.MUTATION:return xt.MUTATION;case it.OperationTypeNode.SUBSCRIPTION:return xt.SUBSCRIPTION;default:return xt.QUERY}}function Que(e){for(let t of e.argumentDataByArgumentName.values()){for(let n of t.directivesByDirectiveName.values())t.node.directives.push(...n);e.node.arguments.push(t.node)}}function Yue(e){let t=[];for(let n of e.values()){lq(n)&&Que(n);for(let r of n.directivesByDirectiveName.values())n.node.directives.push(...r);t.push(n.node)}return t}function Jue(e){if(e.kind===it.Kind.OBJECT_TYPE_DEFINITION)for(let t of xt.INHERITABLE_DIRECTIVE_NAMES)e.directivesByDirectiveName.delete(t)}function Hue(e,t){if(t.description){if("configureDescriptionDataBySubgraphName"in t){for(let{propagate:n}of t.configureDescriptionDataBySubgraphName.values())if(!n)return}(!e.description||e.description.value.length0&&e.persistedDirectivesData.directivesByDirectiveName.set(xt.REQUIRES_SCOPES,[(0,Dp.generateRequiresScopesDirective)(t.requiredScopes)]))}function nce(e,t){if(!t)return;let n=t.fieldAuthDataByFieldName.get(e.name);n&&(n.originalData.requiresAuthentication&&e.persistedDirectivesData.directivesByDirectiveName.set(xt.AUTHENTICATED,[(0,Dp.generateSimpleDirective)(xt.AUTHENTICATED)]),n.originalData.requiredScopes.length>0&&e.persistedDirectivesData.directivesByDirectiveName.set(xt.REQUIRES_SCOPES,[(0,Dp.generateRequiresScopesDirective)(n.originalData.requiredScopes)]))}function EO(e){return{kind:it.Kind.DIRECTIVE,name:(0,Dl.stringToNameNode)(xt.DEPRECATED),arguments:[{kind:it.Kind.ARGUMENT,name:(0,Dl.stringToNameNode)(xt.REASON),value:{kind:it.Kind.STRING,value:e||xt.DEPRECATED_DEFAULT_ARGUMENT_VALUE}}]}}function rce(e,t,n,r){let i=[];for(let[a,o]of e){let c=t.get(a);if(c){if(o.length<2){i.push(...o);continue}if(!c.repeatable){r.push((0,hO.invalidRepeatedFederatedDirectiveErrorMessage)(a,n));continue}i.push(...o)}}return i}function oq(e,t,n){let r=[...e.persistedDirectivesData.tagDirectiveByName.values()];return e.persistedDirectivesData.isDeprecated&&r.push(EO(e.persistedDirectivesData.deprecatedReason)),r.push(...rce(e.persistedDirectivesData.directivesByDirectiveName,t,e.name,n)),r}function NO(e){let t=[];e.persistedDirectivesData.isDeprecated&&t.push(EO(e.persistedDirectivesData.deprecatedReason));for(let[n,r]of e.persistedDirectivesData.directivesByDirectiveName)xt.PERSISTED_CLIENT_DIRECTIVES.has(n)&&t.push(r[0]);return t}function ice(e,t,n){return e.node.name=(0,Dl.stringToNameNode)(e.name),e.node.description=e.description,e.node.directives=oq(e,t,n),e.node}function ace(e){let t=NO(e),n=[];for(let r of e.argumentDataByArgumentName.values())cq(r)||n.push(Q(k({},r.node),{directives:NO(r)}));return Q(k({},e.node),{directives:t,arguments:n})}function uq(e,t,n){return e.node.name=(0,Dl.stringToNameNode)(e.name),e.node.type=e.type,e.node.description=e.description,e.node.directives=oq(e,t,n),e.includeDefaultValue&&(e.node.defaultValue=e.defaultValue),e.node}function sce(e,t,n,r,i){let a=[];for(let[o,c]of t.argumentDataByArgumentName){let l=(0,Dp.getEntriesNotInHashSet)(t.subgraphNames,c.subgraphNames);if(l.length>0){c.requiredSubgraphNames.size>0&&a.push({inputValueName:o,missingSubgraphs:l,requiredSubgraphs:[...c.requiredSubgraphNames]});continue}e.push(uq(c,n,r)),i&&i.add(o)}return a.length>0?(r.push((0,hO.invalidRequiredInputValueError)(xt.DIRECTIVE_DEFINITION,`@${t.name}`,a)),!1):!0}function oce(e,t,n,r){let i=[];sce(i,t,n,r)&&e.push({arguments:i,kind:it.Kind.DIRECTIVE_DEFINITION,locations:(0,Dl.setToNameNodeArray)(t.executableLocations),name:(0,Dl.stringToNameNode)(t.name),repeatable:t.repeatable,description:t.description})}function uce(){return{byShareable:new Set,subgraphNamesByExternalFieldName:new Map}}function cce(e,t){let n=e.isShareableBySubgraphName.size,r=[],i=0;for(let[a,o]of e.isShareableBySubgraphName){let c=e.externalFieldDataBySubgraphName.get(a);if(c&&!c.isUnconditionallyProvided){r.push(a);continue}o||(i+=1)}switch(i){case 0:n===r.length&&t.subgraphNamesByExternalFieldName.set(e.name,r);return;case 1:if(n===1)return;n-r.length!==1&&t.byShareable.add(e.name);return;default:t.byShareable.add(e.name)}}var iq;(function(e){e[e.UNION=0]="UNION",e[e.INTERSECTION=1]="INTERSECTION",e[e.CONSISTENT=2]="CONSISTENT"})(iq||(Tt.MergeMethod=iq={}));function th(e,t,n){if(e.kind===it.Kind.NON_NULL_TYPE)return t.kind!==it.Kind.NON_NULL_TYPE?!1:th(e.type,t.type,n);if(t.kind===it.Kind.NON_NULL_TYPE)return th(e,t.type,n);switch(e.kind){case it.Kind.NAMED_TYPE:if(t.kind===it.Kind.NAMED_TYPE){let r=e.name.value,i=t.name.value;if(r===i)return!0;let a=n.get(r);return a?a.has(i):!1}return!1;default:return t.kind===it.Kind.LIST_TYPE?th(e.type,t.type,n):!1}}function cq(e){return e.persistedDirectivesData.directivesByDirectiveName.has(xt.INACCESSIBLE)||e.directivesByDirectiveName.has(xt.INACCESSIBLE)}function lce(e){return e===it.Kind.SCALAR_TYPE_DEFINITION||e===it.Kind.ENUM_TYPE_DEFINITION}function dce(e){switch(e.kind){case it.Kind.BOOLEAN:return e.value;case it.Kind.ENUM:case it.Kind.STRING:return e.value;case it.Kind.FLOAT:case it.Kind.INT:try{return parseFloat(e.value)}catch(t){return"NaN"}case it.Kind.NULL:return null}}function pce(e){return e.kind===it.Kind.OBJECT_TYPE_DEFINITION&&e.renamedTypeName||e.name}function fce(){return{providedBy:[],requiredBy:[]}}function mce(e,t){switch(e.kind){case it.Kind.ENUM_VALUE_DEFINITION:return`${e.parentTypeName}.${e.name}`;case it.Kind.FIELD_DEFINITION:return`${t?e.renamedParentTypeName:e.originalParentTypeName}.${e.name}`;case it.Kind.ARGUMENT:case it.Kind.INPUT_VALUE_DEFINITION:return t?e.federatedCoords:e.originalCoords;case it.Kind.OBJECT_TYPE_DEFINITION:return t?e.renamedTypeName:e.name;default:return e.name}}function Tce(e){return e.kind===it.Kind.OBJECT_TYPE_DEFINITION||e.kind===it.Kind.INTERFACE_TYPE_DEFINITION}function Nce(e){return{isDefinedExternal:e,isUnconditionallyProvided:!e}}function hce(e){let{value:t,done:n}=e.configureDescriptionDataBySubgraphName.values().next();if(n)return e.description;if(t.propagate)return(0,Mue.getDescriptionFromString)(t.description)||e.description}function Ece(e,t){return e.kind===t.kind}function lq(e){return e.kind===it.Kind.FIELD_DEFINITION}});var IO=P(rh=>{"use strict";f();T();m();Object.defineProperty(rh,"__esModule",{value:!0});rh.upsertDirectiveSchemaAndEntityDefinitions=gce;rh.upsertParentsAndChildren=_ce;var jn=Ae(),ru=sa(),nc=Es(),nh=op(),Al=Jr(),yO=Op(),yce=tp(),tc=Ap(),Rp=Yo(),Ice=ZN(),rr=lr(),fr=Hr();function gce(e,t){(0,jn.visit)(t,{Directive:{enter(n){let r=n.name.value;if(yce.EVENT_DIRECTIVE_NAMES.has(r)&&e.edfsDirectiveReferences.add(r),nc.V2_DIRECTIVE_DEFINITION_BY_DIRECTIVE_NAME.has(r))return e.isSubgraphVersionTwo=!0,!1;if(nc.BASE_DIRECTIVE_DEFINITION_BY_DIRECTIVE_NAME.has(r))return!1;switch(r){case rr.SUBSCRIPTION_FILTER:{e.directiveDefinitionByDirectiveName.set(rr.SUBSCRIPTION_FILTER,nc.SUBSCRIPTION_FILTER_DEFINITION);break}case rr.CONFIGURE_DESCRIPTION:{e.directiveDefinitionByDirectiveName.set(rr.CONFIGURE_DESCRIPTION,nc.CONFIGURE_DESCRIPTION_DEFINITION);break}case rr.CONFIGURE_CHILD_DESCRIPTIONS:{e.directiveDefinitionByDirectiveName.set(rr.CONFIGURE_CHILD_DESCRIPTIONS,nc.CONFIGURE_CHILD_DESCRIPTIONS_DEFINITION);break}}e.referencedDirectiveNames.add(r)}},DirectiveDefinition:{enter(n){return e.addDirectiveDefinitionDataByNode(n)&&e.customDirectiveDefinitions.set(n.name.value,n),!1}},InterfaceTypeDefinition:{enter(n){let r=n.name.value;if(e.internalGraph.addOrUpdateNode(r,{isAbstract:!0}),!(0,Al.isObjectLikeNodeEntity)(n))return;let i=(0,fr.getValueOrDefault)(e.keyFieldSetDatasByTypeName,r,()=>new Map);e.extractKeyFieldSets(n,i),(0,nh.upsertEntityData)({entityDataByTypeName:e.entityDataByTypeName,keyFieldSetDataByFieldSet:i,subgraphName:e.subgraphName,typeName:r}),(0,fr.getValueOrDefault)(e.entityInterfaceDataByTypeName,r,()=>({concreteTypeNames:new Set,fieldDatas:[],interfaceFieldNames:new Set,interfaceObjectFieldNames:new Set,isInterfaceObject:!1,resolvable:!1,typeName:r}))}},InterfaceTypeExtension:{enter(n){let r=n.name.value;if(e.internalGraph.addOrUpdateNode(r,{isAbstract:!0}),!(0,Al.isObjectLikeNodeEntity)(n))return;let i=(0,fr.getValueOrDefault)(e.keyFieldSetDatasByTypeName,r,()=>new Map);e.extractKeyFieldSets(n,i),(0,nh.upsertEntityData)({entityDataByTypeName:e.entityDataByTypeName,keyFieldSetDataByFieldSet:i,subgraphName:e.subgraphName,typeName:r}),(0,fr.getValueOrDefault)(e.entityInterfaceDataByTypeName,r,()=>({concreteTypeNames:new Set,fieldDatas:[],interfaceFieldNames:new Set,interfaceObjectFieldNames:new Set,isInterfaceObject:!1,resolvable:!1,typeName:r}))}},ObjectTypeDefinition:{enter(n){if(!(0,Al.isObjectLikeNodeEntity)(n))return;let r=n.name.value;(0,Al.isNodeInterfaceObject)(n)&&(e.entityInterfaceDataByTypeName.set(r,{concreteTypeNames:new Set,fieldDatas:[],interfaceObjectFieldNames:new Set,interfaceFieldNames:new Set,isInterfaceObject:!0,resolvable:!1,typeName:r}),e.internalGraph.addOrUpdateNode(r,{isAbstract:!0}));let i=(0,fr.getValueOrDefault)(e.keyFieldSetDatasByTypeName,r,()=>new Map);e.extractKeyFieldSets(n,i),(0,nh.upsertEntityData)({entityDataByTypeName:e.entityDataByTypeName,keyFieldSetDataByFieldSet:i,subgraphName:e.subgraphName,typeName:r})}},ObjectTypeExtension:{enter(n){if(!(0,Al.isObjectLikeNodeEntity)(n))return;let r=n.name.value,i=(0,fr.getValueOrDefault)(e.keyFieldSetDatasByTypeName,r,()=>new Map);e.extractKeyFieldSets(n,i),(0,nh.upsertEntityData)({entityDataByTypeName:e.entityDataByTypeName,keyFieldSetDataByFieldSet:i,subgraphName:e.subgraphName,typeName:r})}},OperationTypeDefinition:{enter(n){let r=n.operation,i=e.schemaData.operationTypes.get(r),a=(0,Rp.getTypeNodeNamedTypeName)(n.type);if(i)return(0,ru.duplicateOperationTypeDefinitionError)(r,a,(0,Rp.getTypeNodeNamedTypeName)(i.type)),!1;let o=e.operationTypeNodeByTypeName.get(a);return o?(e.errors.push((0,ru.invalidOperationTypeDefinitionError)(o,a,r)),!1):(e.operationTypeNodeByTypeName.set(a,r),e.schemaData.operationTypes.set(r,n),!1)}},SchemaDefinition:{enter(n){e.schemaData.description=n.description,e.extractDirectives(n,e.schemaData.directivesByDirectiveName)}},SchemaExtension:{enter(n){e.extractDirectives(n,e.schemaData.directivesByDirectiveName)}}})}function _ce(e,t){let n=!1,r;(0,jn.visit)(t,{EnumTypeDefinition:{enter(i){e.originalParentTypeName=i.name.value,e.lastParentNodeKind=i.kind,e.upsertEnumDataByNode(i)},leave(){e.originalParentTypeName="",e.lastParentNodeKind=jn.Kind.NULL}},EnumTypeExtension:{enter(i){e.originalParentTypeName=i.name.value,e.lastParentNodeKind=i.kind,e.upsertEnumDataByNode(i,!0)},leave(){e.originalParentTypeName="",e.lastParentNodeKind=jn.Kind.NULL}},EnumValueDefinition:{enter(i){let a=i.name.value;e.lastChildNodeKind=i.kind;let o=(0,fr.getOrThrowError)(e.parentDefinitionDataByTypeName,e.originalParentTypeName,rr.PARENT_DEFINITION_DATA);if(o.kind!==jn.Kind.ENUM_TYPE_DEFINITION){e.errors.push((0,ru.unexpectedParentKindForChildError)(e.originalParentTypeName,"Enum or Enum extension",(0,fr.kindToTypeString)(o.kind),a,(0,fr.kindToTypeString)(i.kind)));return}if(o.enumValueDataByValueName.has(a)){e.errors.push((0,ru.duplicateEnumValueDefinitionError)(e.originalParentTypeName,a));return}o.enumValueDataByValueName.set(a,{appearances:1,configureDescriptionDataBySubgraphName:new Map,directivesByDirectiveName:e.extractDirectives(i,new Map),federatedCoords:`${e.originalParentTypeName}.${a}`,kind:jn.Kind.ENUM_VALUE_DEFINITION,name:a,node:(0,Rp.getMutableEnumValueNode)(i),parentTypeName:e.originalParentTypeName,persistedDirectivesData:(0,tc.newPersistedDirectivesData)(),subgraphNames:new Set([e.subgraphName]),description:(0,Al.formatDescription)(i.description)})},leave(){e.lastChildNodeKind=jn.Kind.NULL}},FieldDefinition:{enter(i){let a=i.name.value;if(n&&rr.IGNORED_FIELDS.has(a))return!1;e.edfsDirectiveReferences.size>0&&e.validateSubscriptionFilterDirectiveLocation(i),e.lastChildNodeKind=i.kind;let o=(0,Rp.getTypeNodeNamedTypeName)(i.type);(0,fr.getValueOrDefault)(e.fieldCoordsByNamedTypeName,o,()=>new Set).add(`${e.renamedParentTypeName||e.originalParentTypeName}.${a}`),r&&!r.isAbstract&&e.internalGraph.addEdge(r,e.internalGraph.addOrUpdateNode(o),a),nc.BASE_SCALARS.has(o)||e.referencedTypeNames.add(o);let c=(0,fr.getOrThrowError)(e.parentDefinitionDataByTypeName,e.originalParentTypeName,rr.PARENT_DEFINITION_DATA);if(!(0,tc.isParentDataCompositeOutputType)(c)){e.errors.push((0,ru.unexpectedParentKindForChildError)(e.originalParentTypeName,'"Object" or "Interface"',(0,fr.kindToTypeString)(c.kind),a,(0,fr.kindToTypeString)(i.kind)));return}if(c.fieldDataByFieldName.has(a)){e.errors.push((0,ru.duplicateFieldDefinitionError)((0,fr.kindToTypeString)(c.kind),c.name,a));return}let l=e.extractArguments(new Map,i),p=e.extractDirectives(i,new Map);(0,tc.isParentDataInterfaceType)(c)||(e.addInheritedDirectivesToFieldData(p),p.has(rr.EXTERNAL)&&e.unvalidatedExternalFieldCoords.add(`${e.originalParentTypeName}.${a}`));let N=e.addFieldDataByNode(c.fieldDataByFieldName,i,l,p);n&&e.extractEventDirectivesToConfiguration(i,l);let y=N.directivesByDirectiveName.get(rr.PROVIDES),g=N.directivesByDirectiveName.get(rr.REQUIRES);if(!g&&!y)return;let _=e.entityDataByTypeName.get(e.originalParentTypeName),F=(0,fr.getValueOrDefault)(e.fieldSetDataByTypeName,e.originalParentTypeName,yO.newFieldSetData);y&&(0,yO.extractFieldSetValue)(a,F.provides,y),g&&(_||e.warnings.push((0,Ice.requiresDefinedOnNonEntityFieldWarning)(`${e.originalParentTypeName}.${a}`,e.subgraphName)),(0,yO.extractFieldSetValue)(a,F.requires,g))},leave(){e.lastChildNodeKind=jn.Kind.NULL}},InputObjectTypeDefinition:{enter(i){e.originalParentTypeName=i.name.value,e.lastParentNodeKind=i.kind,e.upsertInputObjectByNode(i)},leave(){e.lastParentNodeKind=jn.Kind.NULL,e.originalParentTypeName=""}},InputObjectTypeExtension:{enter(i){e.originalParentTypeName=i.name.value,e.lastParentNodeKind=i.kind,e.upsertInputObjectByNode(i,!0)},leave(){e.originalParentTypeName="",e.lastParentNodeKind=jn.Kind.NULL}},InputValueDefinition:{enter(i){let a=i.name.value;if(e.lastParentNodeKind!==jn.Kind.INPUT_OBJECT_TYPE_DEFINITION&&e.lastParentNodeKind!==jn.Kind.INPUT_OBJECT_TYPE_EXTENSION){e.argumentName=a;return}e.lastChildNodeKind=i.kind;let o=`${e.originalParentTypeName}.${a}`,c=(0,Rp.getTypeNodeNamedTypeName)(i.type);nc.BASE_SCALARS.has(c)||e.referencedTypeNames.add(c);let l=(0,fr.getOrThrowError)(e.parentDefinitionDataByTypeName,e.originalParentTypeName,rr.PARENT_DEFINITION_DATA);if(l.kind!==jn.Kind.INPUT_OBJECT_TYPE_DEFINITION)return e.errors.push((0,ru.unexpectedParentKindForChildError)(e.originalParentTypeName,"input object or input object extension",(0,fr.kindToTypeString)(l.kind),a,(0,fr.kindToTypeString)(i.kind))),!1;if(l.inputValueDataByValueName.has(a)){e.errors.push((0,ru.duplicateInputFieldDefinitionError)(e.originalParentTypeName,a));return}e.addInputValueDataByNode(l.inputValueDataByValueName,i,o)},leave(){e.argumentName="",e.lastChildNodeKind===jn.Kind.INPUT_VALUE_DEFINITION&&(e.lastChildNodeKind=jn.Kind.NULL)}},InterfaceTypeDefinition:{enter(i){e.originalParentTypeName=i.name.value,e.lastParentNodeKind=i.kind,e.upsertInterfaceDataByNode(i)},leave(){e.originalParentTypeName="",e.lastParentNodeKind=jn.Kind.NULL}},InterfaceTypeExtension:{enter(i){e.originalParentTypeName=i.name.value,e.lastParentNodeKind=i.kind,e.upsertInterfaceDataByNode(i,!0)},leave(){e.originalParentTypeName="",e.lastParentNodeKind=jn.Kind.NULL}},ObjectTypeDefinition:{enter(i){if(i.name.value===rr.SERVICE_OBJECT)return!1;e.originalParentTypeName=i.name.value,n=(0,tc.isTypeNameRootType)(e.originalParentTypeName,e.operationTypeNodeByTypeName),e.renamedParentTypeName=(0,tc.getRenamedRootTypeName)(e.originalParentTypeName,e.operationTypeNodeByTypeName),e.originalTypeNameByRenamedTypeName.set(e.renamedParentTypeName,e.originalParentTypeName),r=n?e.internalGraph.getRootNode(e.renamedParentTypeName):e.internalGraph.addOrUpdateNode(e.renamedParentTypeName),e.lastParentNodeKind=i.kind,e.upsertObjectDataByNode(i)},leave(){r=void 0,n=!1,e.originalParentTypeName="",e.renamedParentTypeName="",e.lastParentNodeKind=jn.Kind.NULL,e.isParentObjectExternal=!1,e.isParentObjectShareable=!1}},ObjectTypeExtension:{enter(i){if(i.name.value===rr.SERVICE_OBJECT)return!1;e.originalParentTypeName=i.name.value,n=(0,tc.isTypeNameRootType)(e.originalParentTypeName,e.operationTypeNodeByTypeName),e.renamedParentTypeName=(0,tc.getRenamedRootTypeName)(e.originalParentTypeName,e.operationTypeNodeByTypeName),e.originalTypeNameByRenamedTypeName.set(e.renamedParentTypeName,e.originalParentTypeName),r=n?e.internalGraph.getRootNode(e.renamedParentTypeName):e.internalGraph.addOrUpdateNode(e.renamedParentTypeName),e.lastParentNodeKind=i.kind,e.upsertObjectDataByNode(i,!0)},leave(){r=void 0,n=!1,e.originalParentTypeName="",e.renamedParentTypeName="",e.lastParentNodeKind=jn.Kind.NULL,e.isParentObjectExternal=!1,e.isParentObjectShareable=!1}},ScalarTypeDefinition:{enter(i){if(i.name.value===rr.ANY_SCALAR)return!1;e.originalParentTypeName=i.name.value,e.lastParentNodeKind=i.kind,e.upsertScalarByNode(i)},leave(){e.originalParentTypeName="",e.lastParentNodeKind=jn.Kind.NULL}},ScalarTypeExtension:{enter(i){if(i.name.value===rr.ANY_SCALAR)return!1;e.originalParentTypeName=i.name.value,e.lastParentNodeKind=i.kind,e.upsertScalarByNode(i,!0)},leave(){e.originalParentTypeName="",e.lastParentNodeKind=jn.Kind.NULL}},UnionTypeDefinition:{enter(i){i.name.value!==rr.ENTITY_UNION&&e.upsertUnionByNode(i)}},UnionTypeExtension:{enter(i){if(i.name.value===rr.ENTITY_UNION)return!1;e.upsertUnionByNode(i,!0)}}})}});var OO=P(Ga=>{"use strict";f();T();m();Object.defineProperty(Ga,"__esModule",{value:!0});Ga.EntityDataNode=Ga.RootNode=Ga.GraphNode=Ga.Edge=void 0;var ih=Hr(),gO=class{constructor(t,n,r,i=!1){v(this,"edgeName");v(this,"id");v(this,"isAbstractEdge");v(this,"isInaccessible",!1);v(this,"node");v(this,"visitedIndices",new Set);this.edgeName=i?`... on ${r}`:r,this.id=t,this.isAbstractEdge=i,this.node=n}};Ga.Edge=gO;var _O=class{constructor(t,n,r){v(this,"fieldDataByFieldName",new Map);v(this,"headToTailEdges",new Map);v(this,"entityEdges",[]);v(this,"nodeName");v(this,"hasEntitySiblings",!1);v(this,"isAbstract");v(this,"isInaccessible",!1);v(this,"isLeaf",!1);v(this,"isRootNode",!1);v(this,"satisfiedFieldSets",new Set);v(this,"subgraphName");v(this,"typeName");this.isAbstract=!!(r!=null&&r.isAbstract),this.isLeaf=!!(r!=null&&r.isLeaf),this.nodeName=`${t}.${n}`,this.subgraphName=t,this.typeName=n}handleInaccessibleEdges(){if(this.isAbstract)return;let t=(0,ih.getEntriesNotInHashSet)(this.headToTailEdges.keys(),this.fieldDataByFieldName);for(let n of t){let r=this.headToTailEdges.get(n);r&&(r.isInaccessible=!0)}}getAllAccessibleEntityNodeNames(){let t=new Set([this.nodeName]);return this.getAccessibleEntityNodeNames(this,t),t.delete(this.nodeName),t}getAccessibleEntityNodeNames(t,n){for(let r of t.entityEdges)(0,ih.add)(n,r.node.nodeName)&&this.getAccessibleEntityNodeNames(r.node,n)}};Ga.GraphNode=_O;var vO=class{constructor(t){v(this,"fieldDataByFieldName",new Map);v(this,"headToShareableTailEdges",new Map);v(this,"isAbstract",!1);v(this,"isRootNode",!0);v(this,"typeName");this.typeName=t}removeInaccessibleEdges(t){for(let[n,r]of this.headToShareableTailEdges)if(!t.has(n))for(let i of r)i.isInaccessible=!0}};Ga.RootNode=vO;var SO=class{constructor(t){v(this,"fieldSetsByTargetSubgraphName",new Map);v(this,"targetSubgraphNamesByFieldSet",new Map);v(this,"typeName");this.typeName=t}addTargetSubgraphByFieldSet(t,n){(0,ih.getValueOrDefault)(this.targetSubgraphNamesByFieldSet,t,()=>new Set).add(n),(0,ih.getValueOrDefault)(this.fieldSetsByTargetSubgraphName,n,()=>new Set).add(t)}};Ga.EntityDataNode=SO});var DO=P(vs=>{"use strict";f();T();m();Object.defineProperty(vs,"__esModule",{value:!0});vs.NodeResolutionData=void 0;vs.newRootFieldData=vce;vs.generateResolvabilityErrorReasons=fq;vs.generateSelectionSetSegments=mq;vs.renderSelectionSet=Tq;vs.generateResolvabilityErrors=bce;var dq=sa(),rc=lr(),pq=Hr(),bO=class{constructor(t,n){v(this,"fieldDataByFieldName");v(this,"isResolved",!1);v(this,"resolvedFieldNames",new Set);v(this,"typeName");this.fieldDataByFieldName=n,this.typeName=t}add(t){if(this.resolvedFieldNames.add(t),this.resolvedFieldNames.size>this.fieldDataByFieldName.size){let n=(0,pq.getEntriesNotInHashSet)(this.resolvedFieldNames,this.fieldDataByFieldName);throw(0,dq.unexpectedEdgeFatalError)(this.typeName,n)}return this.isResolved=this.resolvedFieldNames.size===this.fieldDataByFieldName.size,this.isResolved}};vs.NodeResolutionData=bO;function vce(e,t,n){return{coordinate:`${e}.${t}`,message:`The root type field "${e}.${t}" is defined in the following subgraph`+(n.size>1?"s":"")+`: "${[...n].join(rc.QUOTATION_JOIN)}".`,subgraphNames:n}}function Sce(e,t){return e.isLeaf?e.name+` <-- +Although "${e}" is declared "@external", it is part of a "@key" directive on an extension type. Such fields are only declared "@external" for legacy syntactical reasons and are not internally considered "@external".`,subgraph:{name:r}})}});var bp=w(tE=>{"use strict";f();N();m();Object.defineProperty(tE,"__esModule",{value:!0});tE.ExtensionType=void 0;var aq;(function(e){e[e.EXTENDS=0]="EXTENDS",e[e.NONE=1]="NONE",e[e.REAL=2]="REAL"})(aq||(tE.ExtensionType=aq={}))});var Rp=w(Nt=>{"use strict";f();N();m();Object.defineProperty(Nt,"__esModule",{value:!0});Nt.MergeMethod=void 0;Nt.newPersistedDirectivesData=Vue;Nt.isNodeExternalOrShareable=jue;Nt.isTypeRequired=Kue;Nt.areDefaultValuesCompatible=oq;Nt.compareAndValidateInputValueDefaultValues=Gue;Nt.setMutualExecutableLocations=$ue;Nt.isTypeNameRootType=Que;Nt.getRenamedRootTypeName=Yue;Nt.childMapToValueArray=Hue;Nt.removeInheritableDirectivesFromObjectParent=zue;Nt.setLongestDescription=Wue;Nt.isParentDataRootType=uq;Nt.isParentDataInterfaceType=Xue;Nt.setParentDataExtensionType=Zue;Nt.extractPersistedDirectives=nce;Nt.propagateAuthDirectives=rce;Nt.propagateFieldAuthDirectives=ice;Nt.generateDeprecatedDirective=yO;Nt.getClientPersistedDirectiveNodes=EO;Nt.getNodeForRouterSchemaByData=sce;Nt.getClientSchemaFieldNodeByFieldData=oce;Nt.getNodeWithPersistedDirectivesByInputValueData=lq;Nt.addValidPersistedDirectiveDefinitionNodeByData=cce;Nt.newInvalidFieldNames=lce;Nt.validateExternalAndShareable=dce;Nt.isTypeValidImplementation=nE;Nt.isNodeDataInaccessible=dq;Nt.isLeafKind=pce;Nt.getSubscriptionFilterValue=fce;Nt.getParentTypeName=mce;Nt.newConditionalFieldData=Nce;Nt.getDefinitionDataCoords=Tce;Nt.isParentDataCompositeOutputType=Ece;Nt.newExternalFieldData=hce;Nt.getInitialFederatedDescription=yce;Nt.areKindsEqual=Ice;Nt.isFieldData=pq;var at=Ae(),TO=bp(),Al=Jr(),hO=sa(),qt=lr(),Ap=Hr(),que=EN();function Vue(){return{deprecatedReason:"",directivesByDirectiveName:new Map,isDeprecated:!1,tagDirectiveByName:new Map}}function jue(e,t,n){var i;let r={isExternal:n.has(qt.EXTERNAL),isShareable:t||n.has(qt.SHAREABLE)};if(!((i=e.directives)!=null&&i.length))return r;for(let a of e.directives){let o=a.name.value;if(o===qt.EXTERNAL){r.isExternal=!0;continue}o===qt.SHAREABLE&&(r.isShareable=!0)}return r}function Kue(e){return e.kind===at.Kind.NON_NULL_TYPE}function oq(e,t){switch(e.kind){case at.Kind.LIST_TYPE:return t.kind===at.Kind.LIST||t.kind===at.Kind.NULL;case at.Kind.NAMED_TYPE:if(t.kind===at.Kind.NULL)return!0;switch(e.name.value){case qt.BOOLEAN_SCALAR:return t.kind===at.Kind.BOOLEAN;case qt.FLOAT_SCALAR:return t.kind===at.Kind.INT||t.kind===at.Kind.FLOAT;case qt.INT_SCALAR:return t.kind===at.Kind.INT;case qt.STRING_SCALAR:return t.kind===at.Kind.STRING;default:return!0}case at.Kind.NON_NULL_TYPE:return t.kind===at.Kind.NULL?!1:oq(e.type,t)}}function Gue(e,t,n){if(!e.defaultValue)return;if(!t.defaultValue){e.includeDefaultValue=!1;return}let r=(0,at.print)(e.defaultValue),i=(0,at.print)(t.defaultValue);if(r!==i){n.push((0,hO.incompatibleInputValueDefaultValuesError)(`${e.isArgument?qt.ARGUMENT:qt.INPUT_FIELD} "${e.name}"`,e.originalCoords,[...t.subgraphNames],r,i));return}}function $ue(e,t){let n=new Set;for(let r of t)e.executableLocations.has(r)&&n.add(r);e.executableLocations=n}function Que(e,t){return qt.ROOT_TYPE_NAMES.has(e)||t.has(e)}function Yue(e,t){let n=t.get(e);if(!n)return e;switch(n){case at.OperationTypeNode.MUTATION:return qt.MUTATION;case at.OperationTypeNode.SUBSCRIPTION:return qt.SUBSCRIPTION;default:return qt.QUERY}}function Jue(e){for(let t of e.argumentDataByArgumentName.values()){for(let n of t.directivesByDirectiveName.values())t.node.directives.push(...n);e.node.arguments.push(t.node)}}function Hue(e){let t=[];for(let n of e.values()){pq(n)&&Jue(n);for(let r of n.directivesByDirectiveName.values())n.node.directives.push(...r);t.push(n.node)}return t}function zue(e){if(e.kind===at.Kind.OBJECT_TYPE_DEFINITION)for(let t of qt.INHERITABLE_DIRECTIVE_NAMES)e.directivesByDirectiveName.delete(t)}function Wue(e,t){if(t.description){if("configureDescriptionDataBySubgraphName"in t){for(let{propagate:n}of t.configureDescriptionDataBySubgraphName.values())if(!n)return}(!e.description||e.description.value.length0&&e.persistedDirectivesData.directivesByDirectiveName.set(qt.REQUIRES_SCOPES,[(0,Ap.generateRequiresScopesDirective)(t.requiredScopes)]))}function ice(e,t){if(!t)return;let n=t.fieldAuthDataByFieldName.get(e.name);n&&(n.originalData.requiresAuthentication&&e.persistedDirectivesData.directivesByDirectiveName.set(qt.AUTHENTICATED,[(0,Ap.generateSimpleDirective)(qt.AUTHENTICATED)]),n.originalData.requiredScopes.length>0&&e.persistedDirectivesData.directivesByDirectiveName.set(qt.REQUIRES_SCOPES,[(0,Ap.generateRequiresScopesDirective)(n.originalData.requiredScopes)]))}function yO(e){return{kind:at.Kind.DIRECTIVE,name:(0,Al.stringToNameNode)(qt.DEPRECATED),arguments:[{kind:at.Kind.ARGUMENT,name:(0,Al.stringToNameNode)(qt.REASON),value:{kind:at.Kind.STRING,value:e||qt.DEPRECATED_DEFAULT_ARGUMENT_VALUE}}]}}function ace(e,t,n,r){let i=[];for(let[a,o]of e){let c=t.get(a);if(c){if(o.length<2){i.push(...o);continue}if(!c.repeatable){r.push((0,hO.invalidRepeatedFederatedDirectiveErrorMessage)(a,n));continue}i.push(...o)}}return i}function cq(e,t,n){let r=[...e.persistedDirectivesData.tagDirectiveByName.values()];return e.persistedDirectivesData.isDeprecated&&r.push(yO(e.persistedDirectivesData.deprecatedReason)),r.push(...ace(e.persistedDirectivesData.directivesByDirectiveName,t,e.name,n)),r}function EO(e){let t=[];e.persistedDirectivesData.isDeprecated&&t.push(yO(e.persistedDirectivesData.deprecatedReason));for(let[n,r]of e.persistedDirectivesData.directivesByDirectiveName)qt.PERSISTED_CLIENT_DIRECTIVES.has(n)&&t.push(r[0]);return t}function sce(e,t,n){return e.node.name=(0,Al.stringToNameNode)(e.name),e.node.description=e.description,e.node.directives=cq(e,t,n),e.node}function oce(e){let t=EO(e),n=[];for(let r of e.argumentDataByArgumentName.values())dq(r)||n.push(Q(M({},r.node),{directives:EO(r)}));return Q(M({},e.node),{directives:t,arguments:n})}function lq(e,t,n){return e.node.name=(0,Al.stringToNameNode)(e.name),e.node.type=e.type,e.node.description=e.description,e.node.directives=cq(e,t,n),e.includeDefaultValue&&(e.node.defaultValue=e.defaultValue),e.node}function uce(e,t,n,r,i){let a=[];for(let[o,c]of t.argumentDataByArgumentName){let l=(0,Ap.getEntriesNotInHashSet)(t.subgraphNames,c.subgraphNames);if(l.length>0){c.requiredSubgraphNames.size>0&&a.push({inputValueName:o,missingSubgraphs:l,requiredSubgraphs:[...c.requiredSubgraphNames]});continue}e.push(lq(c,n,r)),i&&i.add(o)}return a.length>0?(r.push((0,hO.invalidRequiredInputValueError)(qt.DIRECTIVE_DEFINITION,`@${t.name}`,a)),!1):!0}function cce(e,t,n,r){let i=[];uce(i,t,n,r)&&e.push({arguments:i,kind:at.Kind.DIRECTIVE_DEFINITION,locations:(0,Al.setToNameNodeArray)(t.executableLocations),name:(0,Al.stringToNameNode)(t.name),repeatable:t.repeatable,description:t.description})}function lce(){return{byShareable:new Set,subgraphNamesByExternalFieldName:new Map}}function dce(e,t){let n=e.isShareableBySubgraphName.size,r=[],i=0;for(let[a,o]of e.isShareableBySubgraphName){let c=e.externalFieldDataBySubgraphName.get(a);if(c&&!c.isUnconditionallyProvided){r.push(a);continue}o||(i+=1)}switch(i){case 0:n===r.length&&t.subgraphNamesByExternalFieldName.set(e.name,r);return;case 1:if(n===1)return;n-r.length!==1&&t.byShareable.add(e.name);return;default:t.byShareable.add(e.name)}}var sq;(function(e){e[e.UNION=0]="UNION",e[e.INTERSECTION=1]="INTERSECTION",e[e.CONSISTENT=2]="CONSISTENT"})(sq||(Nt.MergeMethod=sq={}));function nE(e,t,n){if(e.kind===at.Kind.NON_NULL_TYPE)return t.kind!==at.Kind.NON_NULL_TYPE?!1:nE(e.type,t.type,n);if(t.kind===at.Kind.NON_NULL_TYPE)return nE(e,t.type,n);switch(e.kind){case at.Kind.NAMED_TYPE:if(t.kind===at.Kind.NAMED_TYPE){let r=e.name.value,i=t.name.value;if(r===i)return!0;let a=n.get(r);return a?a.has(i):!1}return!1;default:return t.kind===at.Kind.LIST_TYPE?nE(e.type,t.type,n):!1}}function dq(e){return e.persistedDirectivesData.directivesByDirectiveName.has(qt.INACCESSIBLE)||e.directivesByDirectiveName.has(qt.INACCESSIBLE)}function pce(e){return e===at.Kind.SCALAR_TYPE_DEFINITION||e===at.Kind.ENUM_TYPE_DEFINITION}function fce(e){switch(e.kind){case at.Kind.BOOLEAN:return e.value;case at.Kind.ENUM:case at.Kind.STRING:return e.value;case at.Kind.FLOAT:case at.Kind.INT:try{return parseFloat(e.value)}catch(t){return"NaN"}case at.Kind.NULL:return null}}function mce(e){return e.kind===at.Kind.OBJECT_TYPE_DEFINITION&&e.renamedTypeName||e.name}function Nce(){return{providedBy:[],requiredBy:[]}}function Tce(e,t){switch(e.kind){case at.Kind.ENUM_VALUE_DEFINITION:return`${e.parentTypeName}.${e.name}`;case at.Kind.FIELD_DEFINITION:return`${t?e.renamedParentTypeName:e.originalParentTypeName}.${e.name}`;case at.Kind.ARGUMENT:case at.Kind.INPUT_VALUE_DEFINITION:return t?e.federatedCoords:e.originalCoords;case at.Kind.OBJECT_TYPE_DEFINITION:return t?e.renamedTypeName:e.name;default:return e.name}}function Ece(e){return e.kind===at.Kind.OBJECT_TYPE_DEFINITION||e.kind===at.Kind.INTERFACE_TYPE_DEFINITION}function hce(e){return{isDefinedExternal:e,isUnconditionallyProvided:!e}}function yce(e){let{value:t,done:n}=e.configureDescriptionDataBySubgraphName.values().next();if(n)return e.description;if(t.propagate)return(0,que.getDescriptionFromString)(t.description)||e.description}function Ice(e,t){return e.kind===t.kind}function pq(e){return e.kind===at.Kind.FIELD_DEFINITION}});var gO=w(iE=>{"use strict";f();N();m();Object.defineProperty(iE,"__esModule",{value:!0});iE.upsertDirectiveSchemaAndEntityDefinitions=vce;iE.upsertParentsAndChildren=Sce;var jn=Ae(),iu=sa(),ic=hs(),rE=up(),Rl=Jr(),IO=Dp(),gce=np(),rc=Rp(),Fp=Jo(),_ce=eE(),rr=lr(),fr=Hr();function vce(e,t){(0,jn.visit)(t,{Directive:{enter(n){let r=n.name.value;if(gce.EVENT_DIRECTIVE_NAMES.has(r)&&e.edfsDirectiveReferences.add(r),ic.V2_DIRECTIVE_DEFINITION_BY_DIRECTIVE_NAME.has(r))return e.isSubgraphVersionTwo=!0,!1;if(ic.BASE_DIRECTIVE_DEFINITION_BY_DIRECTIVE_NAME.has(r))return!1;switch(r){case rr.SUBSCRIPTION_FILTER:{e.directiveDefinitionByDirectiveName.set(rr.SUBSCRIPTION_FILTER,ic.SUBSCRIPTION_FILTER_DEFINITION);break}case rr.CONFIGURE_DESCRIPTION:{e.directiveDefinitionByDirectiveName.set(rr.CONFIGURE_DESCRIPTION,ic.CONFIGURE_DESCRIPTION_DEFINITION);break}case rr.CONFIGURE_CHILD_DESCRIPTIONS:{e.directiveDefinitionByDirectiveName.set(rr.CONFIGURE_CHILD_DESCRIPTIONS,ic.CONFIGURE_CHILD_DESCRIPTIONS_DEFINITION);break}}e.referencedDirectiveNames.add(r)}},DirectiveDefinition:{enter(n){return e.addDirectiveDefinitionDataByNode(n)&&e.customDirectiveDefinitions.set(n.name.value,n),!1}},InterfaceTypeDefinition:{enter(n){let r=n.name.value;if(e.internalGraph.addOrUpdateNode(r,{isAbstract:!0}),!(0,Rl.isObjectLikeNodeEntity)(n))return;let i=(0,fr.getValueOrDefault)(e.keyFieldSetDatasByTypeName,r,()=>new Map);e.extractKeyFieldSets(n,i),(0,rE.upsertEntityData)({entityDataByTypeName:e.entityDataByTypeName,keyFieldSetDataByFieldSet:i,subgraphName:e.subgraphName,typeName:r}),(0,fr.getValueOrDefault)(e.entityInterfaceDataByTypeName,r,()=>({concreteTypeNames:new Set,fieldDatas:[],interfaceFieldNames:new Set,interfaceObjectFieldNames:new Set,isInterfaceObject:!1,resolvable:!1,typeName:r}))}},InterfaceTypeExtension:{enter(n){let r=n.name.value;if(e.internalGraph.addOrUpdateNode(r,{isAbstract:!0}),!(0,Rl.isObjectLikeNodeEntity)(n))return;let i=(0,fr.getValueOrDefault)(e.keyFieldSetDatasByTypeName,r,()=>new Map);e.extractKeyFieldSets(n,i),(0,rE.upsertEntityData)({entityDataByTypeName:e.entityDataByTypeName,keyFieldSetDataByFieldSet:i,subgraphName:e.subgraphName,typeName:r}),(0,fr.getValueOrDefault)(e.entityInterfaceDataByTypeName,r,()=>({concreteTypeNames:new Set,fieldDatas:[],interfaceFieldNames:new Set,interfaceObjectFieldNames:new Set,isInterfaceObject:!1,resolvable:!1,typeName:r}))}},ObjectTypeDefinition:{enter(n){if(!(0,Rl.isObjectLikeNodeEntity)(n))return;let r=n.name.value;(0,Rl.isNodeInterfaceObject)(n)&&(e.entityInterfaceDataByTypeName.set(r,{concreteTypeNames:new Set,fieldDatas:[],interfaceObjectFieldNames:new Set,interfaceFieldNames:new Set,isInterfaceObject:!0,resolvable:!1,typeName:r}),e.internalGraph.addOrUpdateNode(r,{isAbstract:!0}));let i=(0,fr.getValueOrDefault)(e.keyFieldSetDatasByTypeName,r,()=>new Map);e.extractKeyFieldSets(n,i),(0,rE.upsertEntityData)({entityDataByTypeName:e.entityDataByTypeName,keyFieldSetDataByFieldSet:i,subgraphName:e.subgraphName,typeName:r})}},ObjectTypeExtension:{enter(n){if(!(0,Rl.isObjectLikeNodeEntity)(n))return;let r=n.name.value,i=(0,fr.getValueOrDefault)(e.keyFieldSetDatasByTypeName,r,()=>new Map);e.extractKeyFieldSets(n,i),(0,rE.upsertEntityData)({entityDataByTypeName:e.entityDataByTypeName,keyFieldSetDataByFieldSet:i,subgraphName:e.subgraphName,typeName:r})}},OperationTypeDefinition:{enter(n){let r=n.operation,i=e.schemaData.operationTypes.get(r),a=(0,Fp.getTypeNodeNamedTypeName)(n.type);if(i)return(0,iu.duplicateOperationTypeDefinitionError)(r,a,(0,Fp.getTypeNodeNamedTypeName)(i.type)),!1;let o=e.operationTypeNodeByTypeName.get(a);return o?(e.errors.push((0,iu.invalidOperationTypeDefinitionError)(o,a,r)),!1):(e.operationTypeNodeByTypeName.set(a,r),e.schemaData.operationTypes.set(r,n),!1)}},SchemaDefinition:{enter(n){e.schemaData.description=n.description,e.extractDirectives(n,e.schemaData.directivesByDirectiveName)}},SchemaExtension:{enter(n){e.extractDirectives(n,e.schemaData.directivesByDirectiveName)}}})}function Sce(e,t){let n=!1,r;(0,jn.visit)(t,{EnumTypeDefinition:{enter(i){e.originalParentTypeName=i.name.value,e.lastParentNodeKind=i.kind,e.upsertEnumDataByNode(i)},leave(){e.originalParentTypeName="",e.lastParentNodeKind=jn.Kind.NULL}},EnumTypeExtension:{enter(i){e.originalParentTypeName=i.name.value,e.lastParentNodeKind=i.kind,e.upsertEnumDataByNode(i,!0)},leave(){e.originalParentTypeName="",e.lastParentNodeKind=jn.Kind.NULL}},EnumValueDefinition:{enter(i){let a=i.name.value;e.lastChildNodeKind=i.kind;let o=(0,fr.getOrThrowError)(e.parentDefinitionDataByTypeName,e.originalParentTypeName,rr.PARENT_DEFINITION_DATA);if(o.kind!==jn.Kind.ENUM_TYPE_DEFINITION){e.errors.push((0,iu.unexpectedParentKindForChildError)(e.originalParentTypeName,"Enum or Enum extension",(0,fr.kindToTypeString)(o.kind),a,(0,fr.kindToTypeString)(i.kind)));return}if(o.enumValueDataByValueName.has(a)){e.errors.push((0,iu.duplicateEnumValueDefinitionError)(e.originalParentTypeName,a));return}o.enumValueDataByValueName.set(a,{appearances:1,configureDescriptionDataBySubgraphName:new Map,directivesByDirectiveName:e.extractDirectives(i,new Map),federatedCoords:`${e.originalParentTypeName}.${a}`,kind:jn.Kind.ENUM_VALUE_DEFINITION,name:a,node:(0,Fp.getMutableEnumValueNode)(i),parentTypeName:e.originalParentTypeName,persistedDirectivesData:(0,rc.newPersistedDirectivesData)(),subgraphNames:new Set([e.subgraphName]),description:(0,Rl.formatDescription)(i.description)})},leave(){e.lastChildNodeKind=jn.Kind.NULL}},FieldDefinition:{enter(i){let a=i.name.value;if(n&&rr.IGNORED_FIELDS.has(a))return!1;e.edfsDirectiveReferences.size>0&&e.validateSubscriptionFilterDirectiveLocation(i),e.lastChildNodeKind=i.kind;let o=(0,Fp.getTypeNodeNamedTypeName)(i.type);(0,fr.getValueOrDefault)(e.fieldCoordsByNamedTypeName,o,()=>new Set).add(`${e.renamedParentTypeName||e.originalParentTypeName}.${a}`),r&&!r.isAbstract&&e.internalGraph.addEdge(r,e.internalGraph.addOrUpdateNode(o),a),ic.BASE_SCALARS.has(o)||e.referencedTypeNames.add(o);let c=(0,fr.getOrThrowError)(e.parentDefinitionDataByTypeName,e.originalParentTypeName,rr.PARENT_DEFINITION_DATA);if(!(0,rc.isParentDataCompositeOutputType)(c)){e.errors.push((0,iu.unexpectedParentKindForChildError)(e.originalParentTypeName,'"Object" or "Interface"',(0,fr.kindToTypeString)(c.kind),a,(0,fr.kindToTypeString)(i.kind)));return}if(c.fieldDataByFieldName.has(a)){e.errors.push((0,iu.duplicateFieldDefinitionError)((0,fr.kindToTypeString)(c.kind),c.name,a));return}let l=e.extractArguments(new Map,i),p=e.extractDirectives(i,new Map);(0,rc.isParentDataInterfaceType)(c)||(e.addInheritedDirectivesToFieldData(p),p.has(rr.EXTERNAL)&&e.unvalidatedExternalFieldCoords.add(`${e.originalParentTypeName}.${a}`));let T=e.addFieldDataByNode(c.fieldDataByFieldName,i,l,p);n&&e.extractEventDirectivesToConfiguration(i,l);let y=T.directivesByDirectiveName.get(rr.PROVIDES),g=T.directivesByDirectiveName.get(rr.REQUIRES);if(!g&&!y)return;let _=e.entityDataByTypeName.get(e.originalParentTypeName),F=(0,fr.getValueOrDefault)(e.fieldSetDataByTypeName,e.originalParentTypeName,IO.newFieldSetData);y&&(0,IO.extractFieldSetValue)(a,F.provides,y),g&&(_||e.warnings.push((0,_ce.requiresDefinedOnNonEntityFieldWarning)(`${e.originalParentTypeName}.${a}`,e.subgraphName)),(0,IO.extractFieldSetValue)(a,F.requires,g))},leave(){e.lastChildNodeKind=jn.Kind.NULL}},InputObjectTypeDefinition:{enter(i){e.originalParentTypeName=i.name.value,e.lastParentNodeKind=i.kind,e.upsertInputObjectByNode(i)},leave(){e.lastParentNodeKind=jn.Kind.NULL,e.originalParentTypeName=""}},InputObjectTypeExtension:{enter(i){e.originalParentTypeName=i.name.value,e.lastParentNodeKind=i.kind,e.upsertInputObjectByNode(i,!0)},leave(){e.originalParentTypeName="",e.lastParentNodeKind=jn.Kind.NULL}},InputValueDefinition:{enter(i){let a=i.name.value;if(e.lastParentNodeKind!==jn.Kind.INPUT_OBJECT_TYPE_DEFINITION&&e.lastParentNodeKind!==jn.Kind.INPUT_OBJECT_TYPE_EXTENSION){e.argumentName=a;return}e.lastChildNodeKind=i.kind;let o=`${e.originalParentTypeName}.${a}`,c=(0,Fp.getTypeNodeNamedTypeName)(i.type);ic.BASE_SCALARS.has(c)||e.referencedTypeNames.add(c);let l=(0,fr.getOrThrowError)(e.parentDefinitionDataByTypeName,e.originalParentTypeName,rr.PARENT_DEFINITION_DATA);if(l.kind!==jn.Kind.INPUT_OBJECT_TYPE_DEFINITION)return e.errors.push((0,iu.unexpectedParentKindForChildError)(e.originalParentTypeName,"input object or input object extension",(0,fr.kindToTypeString)(l.kind),a,(0,fr.kindToTypeString)(i.kind))),!1;if(l.inputValueDataByValueName.has(a)){e.errors.push((0,iu.duplicateInputFieldDefinitionError)(e.originalParentTypeName,a));return}e.addInputValueDataByNode(l.inputValueDataByValueName,i,o)},leave(){e.argumentName="",e.lastChildNodeKind===jn.Kind.INPUT_VALUE_DEFINITION&&(e.lastChildNodeKind=jn.Kind.NULL)}},InterfaceTypeDefinition:{enter(i){e.originalParentTypeName=i.name.value,e.lastParentNodeKind=i.kind,e.upsertInterfaceDataByNode(i)},leave(){e.originalParentTypeName="",e.lastParentNodeKind=jn.Kind.NULL}},InterfaceTypeExtension:{enter(i){e.originalParentTypeName=i.name.value,e.lastParentNodeKind=i.kind,e.upsertInterfaceDataByNode(i,!0)},leave(){e.originalParentTypeName="",e.lastParentNodeKind=jn.Kind.NULL}},ObjectTypeDefinition:{enter(i){if(i.name.value===rr.SERVICE_OBJECT)return!1;e.originalParentTypeName=i.name.value,n=(0,rc.isTypeNameRootType)(e.originalParentTypeName,e.operationTypeNodeByTypeName),e.renamedParentTypeName=(0,rc.getRenamedRootTypeName)(e.originalParentTypeName,e.operationTypeNodeByTypeName),e.originalTypeNameByRenamedTypeName.set(e.renamedParentTypeName,e.originalParentTypeName),r=n?e.internalGraph.getRootNode(e.renamedParentTypeName):e.internalGraph.addOrUpdateNode(e.renamedParentTypeName),e.lastParentNodeKind=i.kind,e.upsertObjectDataByNode(i)},leave(){r=void 0,n=!1,e.originalParentTypeName="",e.renamedParentTypeName="",e.lastParentNodeKind=jn.Kind.NULL,e.isParentObjectExternal=!1,e.isParentObjectShareable=!1}},ObjectTypeExtension:{enter(i){if(i.name.value===rr.SERVICE_OBJECT)return!1;e.originalParentTypeName=i.name.value,n=(0,rc.isTypeNameRootType)(e.originalParentTypeName,e.operationTypeNodeByTypeName),e.renamedParentTypeName=(0,rc.getRenamedRootTypeName)(e.originalParentTypeName,e.operationTypeNodeByTypeName),e.originalTypeNameByRenamedTypeName.set(e.renamedParentTypeName,e.originalParentTypeName),r=n?e.internalGraph.getRootNode(e.renamedParentTypeName):e.internalGraph.addOrUpdateNode(e.renamedParentTypeName),e.lastParentNodeKind=i.kind,e.upsertObjectDataByNode(i,!0)},leave(){r=void 0,n=!1,e.originalParentTypeName="",e.renamedParentTypeName="",e.lastParentNodeKind=jn.Kind.NULL,e.isParentObjectExternal=!1,e.isParentObjectShareable=!1}},ScalarTypeDefinition:{enter(i){if(i.name.value===rr.ANY_SCALAR)return!1;e.originalParentTypeName=i.name.value,e.lastParentNodeKind=i.kind,e.upsertScalarByNode(i)},leave(){e.originalParentTypeName="",e.lastParentNodeKind=jn.Kind.NULL}},ScalarTypeExtension:{enter(i){if(i.name.value===rr.ANY_SCALAR)return!1;e.originalParentTypeName=i.name.value,e.lastParentNodeKind=i.kind,e.upsertScalarByNode(i,!0)},leave(){e.originalParentTypeName="",e.lastParentNodeKind=jn.Kind.NULL}},UnionTypeDefinition:{enter(i){i.name.value!==rr.ENTITY_UNION&&e.upsertUnionByNode(i)}},UnionTypeExtension:{enter(i){if(i.name.value===rr.ENTITY_UNION)return!1;e.upsertUnionByNode(i,!0)}}})}});var DO=w(Ga=>{"use strict";f();N();m();Object.defineProperty(Ga,"__esModule",{value:!0});Ga.EntityDataNode=Ga.RootNode=Ga.GraphNode=Ga.Edge=void 0;var aE=Hr(),_O=class{constructor(t,n,r,i=!1){v(this,"edgeName");v(this,"id");v(this,"isAbstractEdge");v(this,"isInaccessible",!1);v(this,"node");v(this,"visitedIndices",new Set);this.edgeName=i?`... on ${r}`:r,this.id=t,this.isAbstractEdge=i,this.node=n}};Ga.Edge=_O;var vO=class{constructor(t,n,r){v(this,"fieldDataByFieldName",new Map);v(this,"headToTailEdges",new Map);v(this,"entityEdges",[]);v(this,"nodeName");v(this,"hasEntitySiblings",!1);v(this,"isAbstract");v(this,"isInaccessible",!1);v(this,"isLeaf",!1);v(this,"isRootNode",!1);v(this,"satisfiedFieldSets",new Set);v(this,"subgraphName");v(this,"typeName");this.isAbstract=!!(r!=null&&r.isAbstract),this.isLeaf=!!(r!=null&&r.isLeaf),this.nodeName=`${t}.${n}`,this.subgraphName=t,this.typeName=n}handleInaccessibleEdges(){if(this.isAbstract)return;let t=(0,aE.getEntriesNotInHashSet)(this.headToTailEdges.keys(),this.fieldDataByFieldName);for(let n of t){let r=this.headToTailEdges.get(n);r&&(r.isInaccessible=!0)}}getAllAccessibleEntityNodeNames(){let t=new Set([this.nodeName]);return this.getAccessibleEntityNodeNames(this,t),t.delete(this.nodeName),t}getAccessibleEntityNodeNames(t,n){for(let r of t.entityEdges)(0,aE.add)(n,r.node.nodeName)&&this.getAccessibleEntityNodeNames(r.node,n)}};Ga.GraphNode=vO;var SO=class{constructor(t){v(this,"fieldDataByFieldName",new Map);v(this,"headToShareableTailEdges",new Map);v(this,"isAbstract",!1);v(this,"isRootNode",!0);v(this,"typeName");this.typeName=t}removeInaccessibleEdges(t){for(let[n,r]of this.headToShareableTailEdges)if(!t.has(n))for(let i of r)i.isInaccessible=!0}};Ga.RootNode=SO;var OO=class{constructor(t){v(this,"fieldSetsByTargetSubgraphName",new Map);v(this,"targetSubgraphNamesByFieldSet",new Map);v(this,"typeName");this.typeName=t}addTargetSubgraphByFieldSet(t,n){(0,aE.getValueOrDefault)(this.targetSubgraphNamesByFieldSet,t,()=>new Set).add(n),(0,aE.getValueOrDefault)(this.fieldSetsByTargetSubgraphName,n,()=>new Set).add(t)}};Ga.EntityDataNode=OO});var AO=w(vs=>{"use strict";f();N();m();Object.defineProperty(vs,"__esModule",{value:!0});vs.NodeResolutionData=void 0;vs.newRootFieldData=Oce;vs.generateResolvabilityErrorReasons=Nq;vs.generateSelectionSetSegments=Tq;vs.renderSelectionSet=Eq;vs.generateResolvabilityErrors=Ace;var fq=sa(),ac=lr(),mq=Hr(),bO=class{constructor(t,n){v(this,"fieldDataByFieldName");v(this,"isResolved",!1);v(this,"resolvedFieldNames",new Set);v(this,"typeName");this.fieldDataByFieldName=n,this.typeName=t}add(t){if(this.resolvedFieldNames.add(t),this.resolvedFieldNames.size>this.fieldDataByFieldName.size){let n=(0,mq.getEntriesNotInHashSet)(this.resolvedFieldNames,this.fieldDataByFieldName);throw(0,fq.unexpectedEdgeFatalError)(this.typeName,n)}return this.isResolved=this.resolvedFieldNames.size===this.fieldDataByFieldName.size,this.isResolved}};vs.NodeResolutionData=bO;function Oce(e,t,n){return{coordinate:`${e}.${t}`,message:`The root type field "${e}.${t}" is defined in the following subgraph`+(n.size>1?"s":"")+`: "${[...n].join(ac.QUOTATION_JOIN)}".`,subgraphNames:n}}function Dce(e,t){return e.isLeaf?e.name+` <-- `:e.name+` { <-- -`+rc.LITERAL_SPACE.repeat(t+3)+`... -`+rc.LITERAL_SPACE.repeat(t+2)+`} -`}function fq({entityAncestorData:e,rootFieldData:t,unresolvableFieldData:n}){let{fieldName:r,typeName:i,subgraphNames:a}=n,o=[t.message,`The field "${i}.${r}" is defined in the following subgraph`+(a.size>1?"s":"")+`: "${[...a].join(rc.QUOTATION_JOIN)}".`];if(e){let c=!1;for(let[l,p]of e.fieldSetsByTargetSubgraphName)if(a.has(l)){c=!0;for(let N of p)o.push(`The entity ancestor "${e.typeName}" in subgraph "${e.subgraphName}" does not satisfy the key field set "${N}" to access subgraph "${l}".`)}c||o.push(`The entity ancestor "${e.typeName}" in subgraph "${e.subgraphName}" has no accessible target entities (resolvable @key directives) in the subgraphs where "${i}.${r}" is defined.`),o.push(`The type "${i}" is not a descendent of any other entity ancestors that can provide a shared route to access "${r}".`)}else t.subgraphNames.size>1&&o.push(`None of the subgraphs that share the same root type field "${t.coordinate}" can provide a route to access "${r}".`),o.push(`The type "${i}" is not a descendent of an entity ancestor that can provide a shared route to access "${r}".`);return i!==(e==null?void 0:e.typeName)&&o.push(`The type "${i}" has no accessible target entities (resolvable @key directives) in any other subgraph, so accessing other subgraphs is not possible.`),o}function mq(e){let t=e.split(new RegExp("(?<=\\w)\\.")),n="",r="";for(let i=0;i{"use strict";f();T();m();Object.defineProperty(ah,"__esModule",{value:!0});ah.Graph=void 0;var Rl=OO(),Fl=DO(),Nq=lr(),kr=Hr(),AO=class{constructor(){v(this,"edgeId",-1);v(this,"entityDataNodes",new Map);v(this,"entityNodeNamesBySharedFieldPath",new Map);v(this,"nodeByNodeName",new Map);v(this,"nodesByTypeName",new Map);v(this,"rootNodeByRootTypeName",new Map);v(this,"subgraphName",Nq.NOT_APPLICABLE);v(this,"resolvableFieldNamesByRelativeFieldPathByEntityNodeName",new Map);v(this,"nodeResolutionDataByFieldPath",new Map);v(this,"unresolvableFieldPaths",new Set);v(this,"failureResultByEntityNodeName",new Map);v(this,"walkerIndex",-1)}getRootNode(t){return(0,kr.getValueOrDefault)(this.rootNodeByRootTypeName,t,()=>new Rl.RootNode(t))}addOrUpdateNode(t,n){let r=`${this.subgraphName}.${t}`,i=this.nodeByNodeName.get(r);if(i)return i.isAbstract||(i.isAbstract=!!(n!=null&&n.isAbstract)),!i.isLeaf&&(n!=null&&n.isLeaf)&&(i.isLeaf=!0),i;let a=new Rl.GraphNode(this.subgraphName,t,n);return this.nodeByNodeName.set(r,a),(0,kr.getValueOrDefault)(this.nodesByTypeName,t,()=>[]).push(a),a}addEdge(t,n,r,i=!1){if(t.isRootNode){let c=new Rl.Edge(this.getNextEdgeId(),n,r);return(0,kr.getValueOrDefault)(t.headToShareableTailEdges,r,()=>[]).push(c),c}let a=t,o=new Rl.Edge(this.getNextEdgeId(),n,i?n.typeName:r,i);return a.headToTailEdges.set(r,o),o}addEntityDataNode(t){let n=this.entityDataNodes.get(t);if(n)return n;let r=new Rl.EntityDataNode(t);return this.entityDataNodes.set(t,r),r}getNextEdgeId(){return this.edgeId+=1}setNodeInaccessible(t){let n=this.nodesByTypeName.get(t);if(n)for(let r of n)r.isInaccessible=!0}initializeNode(t,n){let r=this.entityDataNodes.get(t);if(Nq.ROOT_TYPE_NAMES.has(t)){let a=this.getRootNode(t);a.removeInaccessibleEdges(n),a.fieldDataByFieldName=n;return}let i=this.nodesByTypeName.get(t);if(i){for(let a of i)if(a.fieldDataByFieldName=n,a.handleInaccessibleEdges(),a.isLeaf=!1,!!r){a.hasEntitySiblings=!0;for(let o of a.satisfiedFieldSets){let c=r.targetSubgraphNamesByFieldSet.get(o);for(let l of c||[]){if(l===a.subgraphName)continue;let p=this.nodeByNodeName.get(`${l}.${a.typeName}`);p&&a.entityEdges.push(new Rl.Edge(this.getNextEdgeId(),p,""))}}}}}setSubgraphName(t){this.subgraphName=t}validateEntities(t,n){let r=new Map;for(let[i,a]of t){let o=a.size>1,c,l=o?new Map:void 0,p=new Set,N=new Map;for(let y of a){let g=this.nodeByNodeName.get(y);if(!g)throw new Error(`Fatal: Could not find entity node for "${y}".`);if(this.resolvableFieldNamesByRelativeFieldPathByEntityNodeName.get(y)){let J=this.failureResultByEntityNodeName.get(y);if(!J){c=void 0;break}if(!o)return J}let F=this.nodesByTypeName.get(g.typeName)||[],B=(0,kr.getValueOrDefault)(r,y,()=>o?N:new Map),j=new RO({interSubgraphNodes:F,entityNodeNamesBySharedFieldPath:B,originNode:g,resolvableFieldNamesByRelativeFieldPathByEntityNodeName:this.resolvableFieldNamesByRelativeFieldPathByEntityNodeName,walkerIndex:this.walkerIndex+=1,sharedResolvableFieldNamesByRelativeFieldPath:l,unresolvableSharedFieldPaths:p});if(j.visitEntityNode(g),j.unresolvableFieldPaths.size>0){if(o&&p.size<1){c=void 0;break}c={entityAncestorData:{fieldSetsByTargetSubgraphName:(0,kr.getOrThrowError)(this.entityDataNodes,g.typeName,"entityDataNodes").fieldSetsByTargetSubgraphName,subgraphName:g.subgraphName,typeName:g.typeName},nodeName:y,parentFieldPathForEntityReference:[i],success:!1,typeName:g.typeName,unresolvableFieldPaths:o?p:j.unresolvableFieldPaths},this.failureResultByEntityNodeName.set(y,c);continue}c=void 0;break}if(c)return o&&l&&this.resolvableFieldNamesByRelativeFieldPathByEntityNodeName.set(c.nodeName,l),c}if(r.size>0)for(let[i,a]of r){let o=this.validateEntities(a,n);if(!o.success){for(let[c,l]of t)if(l.has(i)){o.parentFieldPathForEntityReference.push(c);break}return o}}return{success:!0}}validate(){let t=[];for(let n of this.rootNodeByRootTypeName.values())e:for(let[r,i]of n.headToShareableTailEdges){for(let c of i){if(c.isInaccessible)continue e;this.walkerIndex+=1,this.visitEdge(c,`${n.typeName.toLowerCase()}`)}let a=(0,kr.getOrThrowError)(n.fieldDataByFieldName,r,"fieldDataByFieldName"),o=(0,Fl.newRootFieldData)(n.typeName,r,a.subgraphNames);if(this.unresolvableFieldPaths.size>0&&(0,Fl.generateResolvabilityErrors)({unresolvableFieldPaths:this.unresolvableFieldPaths,nodeResolutionDataByFieldPath:this.nodeResolutionDataByFieldPath,rootFieldData:o,errors:t}),this.entityNodeNamesBySharedFieldPath.size>0){let c=this.validateEntities(this.entityNodeNamesBySharedFieldPath,o);c.success||this.generateEntityResolvabilityErrors(c,o,t)}if(t.length>0)return t;this.entityNodeNamesBySharedFieldPath=new Map}return[]}visitEdge(t,n){return t.isInaccessible||t.node.isInaccessible?!1:(!(0,kr.add)(t.visitedIndices,this.walkerIndex)||t.node.isLeaf||(t.node.isAbstract?this.validateAbstractNode(t.node,`${n}.${t.edgeName}`):this.validateConcreteNode(t.node,`${n}.${t.edgeName}`)),!0)}validateConcreteNode(t,n){if(t.headToTailEdges.size<1)return;if(t.hasEntitySiblings){(0,kr.getValueOrDefault)(this.entityNodeNamesBySharedFieldPath,n,()=>new Set).add(t.nodeName);return}let r=(0,kr.getValueOrDefault)(this.nodeResolutionDataByFieldPath,n,()=>new Fl.NodeResolutionData(t.typeName,t.fieldDataByFieldName));for(let[i,a]of t.headToTailEdges)this.visitEdge(a,n)&&r.add(i);r.isResolved?this.unresolvableFieldPaths.delete(n):this.unresolvableFieldPaths.add(n)}validateAbstractNode(t,n){if(!(t.headToTailEdges.size<1))for(let r of t.headToTailEdges.values())this.visitEdge(r,n)}generateEntityResolvabilityErrors(t,n,r){let i=(0,kr.getOrThrowError)(this.resolvableFieldNamesByRelativeFieldPathByEntityNodeName,t.nodeName,"resolvableFieldNamesByRelativeFieldPathByEntityNodeName"),a="";for(let o of t.parentFieldPathForEntityReference)a=o+a;(0,Fl.generateResolvabilityErrors)({unresolvableFieldPaths:t.unresolvableFieldPaths,nodeResolutionDataByFieldPath:i,rootFieldData:n,errors:r,pathFromRoot:a,entityAncestorData:t.entityAncestorData})}};ah.Graph=AO;var RO=class{constructor({entityNodeNamesBySharedFieldPath:t,interSubgraphNodes:n,originNode:r,resolvableFieldNamesByRelativeFieldPathByEntityNodeName:i,unresolvableSharedFieldPaths:a,walkerIndex:o,sharedResolvableFieldNamesByRelativeFieldPath:c}){v(this,"entityNodeNamesBySharedFieldPath");v(this,"interSubgraphNodes");v(this,"originNode");v(this,"resolvableFieldNamesByRelativeFieldPath");v(this,"resolvableFieldNamesByRelativeFieldPathByEntityNodeName");v(this,"unresolvableFieldPaths",new Set);v(this,"unresolvableSharedFieldPaths");v(this,"walkerIndex");v(this,"sharedResolvableFieldNamesByRelativeFieldPath");this.entityNodeNamesBySharedFieldPath=t,this.interSubgraphNodes=n,this.originNode=r,this.resolvableFieldNamesByRelativeFieldPathByEntityNodeName=i,this.resolvableFieldNamesByRelativeFieldPath=(0,kr.getValueOrDefault)(this.resolvableFieldNamesByRelativeFieldPathByEntityNodeName,r.nodeName,()=>new Map),this.unresolvableSharedFieldPaths=a,this.walkerIndex=o,this.sharedResolvableFieldNamesByRelativeFieldPath=c}visitEntityNode(t){this.validateEntityRelatedConcreteNode(t,"");let n=t.getAllAccessibleEntityNodeNames();for(let r of this.interSubgraphNodes){if(this.unresolvableFieldPaths.size<0)return;n.has(r.nodeName)&&this.validateEntityRelatedConcreteNode(r,"")}}visitEntityRelatedEdge(t,n){return t.isInaccessible||t.node.isInaccessible?!1:!(0,kr.add)(t.visitedIndices,this.walkerIndex)||t.node.isLeaf?!0:t.node.hasEntitySiblings?((0,kr.getValueOrDefault)(this.entityNodeNamesBySharedFieldPath,`${n}.${t.edgeName}`,()=>new Set).add(t.node.nodeName),!0):(t.node.isAbstract?this.validateEntityRelatedAbstractNode(t.node,`${n}.${t.edgeName}`):this.validateEntityRelatedConcreteNode(t.node,`${n}.${t.edgeName}`),!0)}validateEntityRelatedConcreteNode(t,n){if(t.headToTailEdges.size<1)return;let r=(0,kr.getValueOrDefault)(this.resolvableFieldNamesByRelativeFieldPath,n,()=>new Fl.NodeResolutionData(t.typeName,t.fieldDataByFieldName)),i=this.sharedResolvableFieldNamesByRelativeFieldPath?(0,kr.getValueOrDefault)(this.sharedResolvableFieldNamesByRelativeFieldPath,n,()=>new Fl.NodeResolutionData(t.typeName,t.fieldDataByFieldName)):void 0;for(let[a,o]of t.headToTailEdges)this.visitEntityRelatedEdge(o,n)&&(r.add(a),i==null||i.add(a));r.isResolved?this.unresolvableFieldPaths.delete(n):this.unresolvableFieldPaths.add(n),i&&(i.isResolved?this.unresolvableSharedFieldPaths.delete(n):this.unresolvableSharedFieldPaths.add(n))}validateEntityRelatedAbstractNode(t,n){if(!(t.headToTailEdges.size<1))for(let r of t.headToTailEdges.values())this.visitEntityRelatedEdge(r,n)}}});var PO=P(sh=>{"use strict";f();T();m();Object.defineProperty(sh,"__esModule",{value:!0});sh.newFieldSetConditionData=Dce;sh.newConfigurationData=Ace;function Dce({fieldCoordinatesPath:e,fieldPath:t}){return{fieldCoordinatesPath:e,fieldPath:t}}function Ace(e,t){return{fieldNames:new Set,isRootNode:e,typeName:t}}});var LO=P(ic=>{"use strict";f();T();m();Object.defineProperty(ic,"__esModule",{value:!0});ic.NormalizationFactory=void 0;ic.normalizeSubgraphFromString=wce;ic.normalizeSubgraph=Eq;ic.batchNormalize=Lce;var ue=Ae(),bn=Jr(),Gi=Op(),en=Es(),ar=op(),Te=sa(),oh=tp(),Rce=Q_(),$i=oO(),Fce=dO(),Ss=ZN(),hq=IO(),$a=bp(),In=Ap(),ir=Yo(),wO=FO(),uh=W_(),ae=lr(),Pce=tl(),Ge=Hr(),gn=Ae(),Fp=PO();function wce(e,t=!0){let{error:n,documentNode:r}=(0,bn.safeParse)(e,t);return n||!r?{errors:[(0,Te.subgraphInvalidSyntaxError)(n)],success:!1,warnings:[]}:new Pp(new wO.Graph).normalize(r)}function Eq(e,t,n){return new Pp(n||new wO.Graph,t).normalize(e)}var Pp=class{constructor(t,n){v(this,"argumentName","");v(this,"authorizationDataByParentTypeName",new Map);v(this,"concreteTypeNamesByAbstractTypeName",new Map);v(this,"conditionalFieldDataByCoords",new Map);v(this,"configurationDataByTypeName",new Map);v(this,"customDirectiveDefinitions",new Map);v(this,"definedDirectiveNames",new Set);v(this,"directiveDefinitionByDirectiveName",new Map);v(this,"directiveDefinitionDataByDirectiveName",(0,Gi.initializeDirectiveDefinitionDatas)());v(this,"edfsDirectiveReferences",new Set);v(this,"errors",[]);v(this,"entityDataByTypeName",new Map);v(this,"entityInterfaceDataByTypeName",new Map);v(this,"eventsConfigurations",new Map);v(this,"fieldSetDataByTypeName",new Map);v(this,"internalGraph");v(this,"invalidConfigureDescriptionNodeDatas",[]);v(this,"invalidRepeatedDirectiveNameByCoords",new Map);v(this,"isCurrentParentExtension",!1);v(this,"isParentObjectExternal",!1);v(this,"isParentObjectShareable",!1);v(this,"isSubgraphEventDrivenGraph",!1);v(this,"isSubgraphVersionTwo",!1);v(this,"keyFieldSetDatasByTypeName",new Map);v(this,"lastParentNodeKind",ue.Kind.NULL);v(this,"lastChildNodeKind",ue.Kind.NULL);v(this,"parentTypeNamesWithAuthDirectives",new Set);v(this,"keyFieldSetDataByTypeName",new Map);v(this,"keyFieldSetsByEntityTypeNameByFieldCoords",new Map);v(this,"keyFieldNamesByParentTypeName",new Map);v(this,"fieldCoordsByNamedTypeName",new Map);v(this,"operationTypeNodeByTypeName",new Map);v(this,"originalParentTypeName","");v(this,"originalTypeNameByRenamedTypeName",new Map);v(this,"parentDefinitionDataByTypeName",new Map);v(this,"parentsWithChildArguments",new Set);v(this,"overridesByTargetSubgraphName",new Map);v(this,"invalidORScopesCoords",new Set);v(this,"schemaData");v(this,"referencedDirectiveNames",new Set);v(this,"referencedTypeNames",new Set);v(this,"renamedParentTypeName","");v(this,"subgraphName");v(this,"unvalidatedExternalFieldCoords",new Set);v(this,"usesEdfsNatsStreamConfiguration",!1);v(this,"warnings",[]);for(let[r,i]of en.BASE_DIRECTIVE_DEFINITION_BY_DIRECTIVE_NAME)this.directiveDefinitionByDirectiveName.set(r,i);this.subgraphName=n||ae.NOT_APPLICABLE,this.internalGraph=t,this.internalGraph.setSubgraphName(this.subgraphName),this.schemaData={directivesByDirectiveName:new Map,kind:ue.Kind.SCHEMA_DEFINITION,name:ae.SCHEMA,operationTypes:new Map}}validateInputNamedType(t){if(en.BASE_SCALARS.has(t))return{hasUnhandledError:!1,typeString:""};let n=this.parentDefinitionDataByTypeName.get(t);if(!n)return{hasUnhandledError:!1,typeString:""};switch(n.kind){case ue.Kind.ENUM_TYPE_DEFINITION:case ue.Kind.INPUT_OBJECT_TYPE_DEFINITION:case ue.Kind.SCALAR_TYPE_DEFINITION:return{hasUnhandledError:!1,typeString:""};default:return{hasUnhandledError:!0,typeString:(0,Ge.kindToTypeString)(n.kind)}}}validateArguments(t,n){let r=[];for(let[i,a]of t.argumentDataByArgumentName){let o=(0,ir.getTypeNodeNamedTypeName)(a.type);en.BASE_SCALARS.has(o)||this.referencedTypeNames.add(o);let{hasUnhandledError:c,typeString:l}=this.validateInputNamedType(o);c&&r.push({argumentName:i,namedType:o,typeString:l,typeName:(0,$i.printTypeNode)(a.type)})}r.length>0&&this.errors.push((0,Te.invalidArgumentsError)(n,r))}isTypeNameRootType(t){return ae.ROOT_TYPE_NAMES.has(t)||this.operationTypeNodeByTypeName.has(t)}isArgumentValueValid(t,n){if(n.kind===ue.Kind.NULL)return t.kind!==ue.Kind.NON_NULL_TYPE;switch(t.kind){case ue.Kind.LIST_TYPE:{if(n.kind!==ue.Kind.LIST)return this.isArgumentValueValid((0,ir.getNamedTypeNode)(t.type),n);for(let r of n.values)if(!this.isArgumentValueValid(t.type,r))return!1;return!0}case ue.Kind.NAMED_TYPE:switch(t.name.value){case ae.BOOLEAN_SCALAR:return n.kind===ue.Kind.BOOLEAN;case ae.FLOAT_SCALAR:return n.kind===ue.Kind.FLOAT||n.kind===ue.Kind.INT;case ae.ID_SCALAR:return n.kind===ue.Kind.STRING||n.kind===ue.Kind.INT;case ae.INT_SCALAR:return n.kind===ue.Kind.INT;case ae.FIELD_SET_SCALAR:case ae.SCOPE_SCALAR:case ae.STRING_SCALAR:return n.kind===ue.Kind.STRING;case ae.LINK_IMPORT:return!0;case ae.LINK_PURPOSE:return n.kind!==ue.Kind.ENUM?!1:n.value===ae.SECURITY||n.value===ae.EXECUTION;case ae.SUBSCRIPTION_FIELD_CONDITION:case ae.SUBSCRIPTION_FILTER_CONDITION:return n.kind===ue.Kind.OBJECT;default:{let r=this.parentDefinitionDataByTypeName.get(t.name.value);if(!r)return!1;if(r.kind===ue.Kind.SCALAR_TYPE_DEFINITION)return!0;if(r.kind===ue.Kind.ENUM_TYPE_DEFINITION){if(n.kind!==ue.Kind.ENUM)return!1;let i=r.enumValueDataByValueName.get(n.value);return i?!i.directivesByDirectiveName.has(ae.INACCESSIBLE):!1}return r.kind!==ue.Kind.INPUT_OBJECT_TYPE_DEFINITION?!1:n.kind===ue.Kind.OBJECT}}default:return this.isArgumentValueValid(t.type,n)}}addInheritedDirectivesToFieldData(t){return this.isParentObjectShareable&&(0,Ge.getValueOrDefault)(t,ae.SHAREABLE,()=>[(0,Ge.generateSimpleDirective)(ae.SHAREABLE)]),this.isParentObjectExternal&&(0,Ge.getValueOrDefault)(t,ae.EXTERNAL,()=>[(0,Ge.generateSimpleDirective)(ae.EXTERNAL)]),t}extractDirectives(t,n){if(!t.directives)return n;for(let r of t.directives){let i=r.name.value;i===ae.SHAREABLE?(0,Ge.getValueOrDefault)(n,i,()=>[r]):(0,Ge.getValueOrDefault)(n,i,()=>[]).push(r),(0,ar.isNodeKindObject)(t.kind)&&(this.isParentObjectExternal||(this.isParentObjectExternal=i===ae.EXTERNAL),this.isParentObjectShareable||(this.isParentObjectShareable=i===ae.SHAREABLE))}return n}validateDirective({data:t,definitionData:n,directiveCoords:r,directiveNode:i,errorMessages:a,requiredArgumentNames:o}){let c=i.name.value,l=t.kind===ue.Kind.FIELD_DEFINITION?t.renamedParentTypeName||t.originalParentTypeName:t.name,p=c===ae.AUTHENTICATED,N=c===ae.OVERRIDE,y=c===ae.REQUIRES_SCOPES;if(!i.arguments||i.arguments.length<1)return n.requiredArgumentNames.size>0&&a.push((0,Te.undefinedRequiredArgumentsErrorMessage)(c,o,[])),p&&this.handleAuthenticatedDirective(t,l),a;let g=new Set,_=new Set,F=new Set,B=[];for(let Z of i.arguments){let W=Z.name.value;if(g.has(W)){_.add(W);continue}g.add(W);let Ne=n.argumentTypeNodeByArgumentName.get(W);if(!Ne){F.add(W);continue}if(!this.isArgumentValueValid(Ne.typeNode,Z.value)){a.push((0,Te.invalidArgumentValueErrorMessage)((0,ue.print)(Z.value),`@${c}`,W,(0,$i.printTypeNode)(Ne.typeNode)));continue}if(N&&t.kind===ue.Kind.FIELD_DEFINITION){this.handleOverrideDirective({data:t,directiveCoords:r,errorMessages:a,targetSubgraphName:Z.value.value});continue}!y||W!==ae.SCOPES||this.extractRequiredScopes({directiveCoords:r,orScopes:Z.value.values,requiredScopes:B})}_.size>0&&a.push((0,Te.duplicateDirectiveArgumentDefinitionsErrorMessage)([..._])),F.size>0&&a.push((0,Te.unexpectedDirectiveArgumentErrorMessage)(c,[...F]));let j=(0,Ge.getEntriesNotInHashSet)(o,g);if(j.length>0&&a.push((0,Te.undefinedRequiredArgumentsErrorMessage)(c,o,j)),a.length>0||!y)return a;let J=(0,Ge.getValueOrDefault)(this.authorizationDataByParentTypeName,l,()=>(0,ar.newAuthorizationData)(l));if(t.kind!==ue.Kind.FIELD_DEFINITION)this.parentTypeNamesWithAuthDirectives.add(l),J.requiredScopes.push(...B);else{let Z=(0,Ge.getValueOrDefault)(J.fieldAuthDataByFieldName,t.name,()=>(0,ar.newFieldAuthorizationData)(t.name));Z.inheritedData.requiredScopes.push(...B),Z.originalData.requiredScopes.push(...B)}return a}validateDirectives(t,n){let r=new Set;for(let[i,a]of t.directivesByDirectiveName){let o=this.directiveDefinitionDataByDirectiveName.get(i);if(!o){r.has(i)||(this.errors.push((0,Te.undefinedDirectiveError)(i,n)),r.add(i));continue}let c=[],l=(0,bn.nodeKindToDirectiveLocation)(t.kind);if(o.locations.has(l)||c.push((0,Te.invalidDirectiveLocationErrorMessage)(i,l)),a.length>1&&!o.isRepeatable){let N=(0,Ge.getValueOrDefault)(this.invalidRepeatedDirectiveNameByCoords,n,()=>new Set);N.has(i)||(N.add(i),c.push((0,Te.invalidRepeatedDirectiveErrorMessage)(i)))}let p=[...o.requiredArgumentNames];for(let N=0;N0&&this.errors.push((0,Te.invalidDirectiveError)(i,n,(0,Ge.numberToOrdinal)(N+1),y))}}switch(t.kind){case ue.Kind.ENUM_TYPE_DEFINITION:{for(let[i,a]of t.enumValueDataByValueName)this.validateDirectives(a,`${t.name}.${i}`);return}case ue.Kind.FIELD_DEFINITION:{for(let[i,a]of t.argumentDataByArgumentName)this.validateDirectives(a,`${t.originalParentTypeName}.${t.name}(${i}: ...)`);return}case ue.Kind.INPUT_OBJECT_TYPE_DEFINITION:{for(let[i,a]of t.inputValueDataByValueName)this.validateDirectives(a,`${t.name}.${i}`);return}case ue.Kind.INTERFACE_TYPE_DEFINITION:case ue.Kind.OBJECT_TYPE_DEFINITION:{for(let[i,a]of t.fieldDataByFieldName)this.validateDirectives(a,`${t.name}.${i}`);return}default:return}}getNodeExtensionType(t,n,r=!1){return t?$a.ExtensionType.REAL:r||!n.has(ae.EXTENDS)?$a.ExtensionType.NONE:$a.ExtensionType.EXTENDS}setParentDataExtensionType(t,n){switch(t.extensionType){case $a.ExtensionType.EXTENDS:case $a.ExtensionType.NONE:{if(n===$a.ExtensionType.REAL)return;this.errors.push((0,Te.duplicateTypeDefinitionError)((0,Ge.kindToTypeString)(t.kind),t.name));return}default:t.extensionType=n}}extractConfigureDescriptionData(t,n){var i,a;if(!n.arguments||n.arguments.length<1){t.description||this.invalidConfigureDescriptionNodeDatas.push(t),t.configureDescriptionDataBySubgraphName.set(this.subgraphName,{propagate:!0,description:((i=t.description)==null?void 0:i.value)||""});return}let r={propagate:!0,description:((a=t.description)==null?void 0:a.value)||""};for(let o of n.arguments)switch(o.name.value){case ae.PROPAGATE:{if(o.value.kind!=ue.Kind.BOOLEAN)return;r.propagate=o.value.value;break}case ae.DESCRIPTION_OVERRIDE:{if(o.value.kind!=ue.Kind.STRING)return;r.description=o.value.value;break}default:return}!t.description&&!r.description&&this.invalidConfigureDescriptionNodeDatas.push(t),t.configureDescriptionDataBySubgraphName.set(this.subgraphName,r)}extractConfigureDescriptionsData(t){let n=t.directivesByDirectiveName.get(ae.CONFIGURE_DESCRIPTION);n&&n.length==1&&this.extractConfigureDescriptionData(t,n[0])}extractImplementedInterfaceTypeNames(t,n){if(!t.interfaces)return n;let r=t.name.value;for(let i of t.interfaces){let a=i.name.value;if(n.has(a)){this.errors.push((0,Te.duplicateImplementedInterfaceError)((0,ar.kindToConvertedTypeString)(t.kind),r,a));continue}n.add(a)}return n}updateCompositeOutputDataByNode(t,n,r){this.setParentDataExtensionType(n,r),this.extractImplementedInterfaceTypeNames(t,n.implementedInterfaceTypeNames),n.description||(n.description=(0,bn.formatDescription)("description"in t?t.description:void 0)),this.extractConfigureDescriptionsData(n),n.isEntity||(n.isEntity=n.directivesByDirectiveName.has(ae.KEY)),n.isInaccessible||(n.isInaccessible=n.directivesByDirectiveName.has(ae.INACCESSIBLE)),n.subgraphNames.add(this.subgraphName)}addConcreteTypeNamesForImplementedInterfaces(t,n){for(let r of t)(0,Ge.getValueOrDefault)(this.concreteTypeNamesByAbstractTypeName,r,()=>new Set).add(n),this.internalGraph.addEdge(this.internalGraph.addOrUpdateNode(r,{isAbstract:!0}),this.internalGraph.addOrUpdateNode(n),n,!0)}extractArguments(t,n){var c;if(!((c=n.arguments)!=null&&c.length))return t;let r=n.name.value,i=`${this.originalParentTypeName}.${r}`,a=`${this.renamedParentTypeName}.${r}`;this.parentsWithChildArguments.add(this.originalParentTypeName);let o=new Set;for(let l of n.arguments){let p=l.name.value;if(t.has(p)){o.add(p);continue}this.addInputValueDataByNode(t,l,`${i}(${p}: ...)`,`${a}(${p}: ...)`)}return o.size>0&&this.errors.push((0,Te.duplicateArgumentsError)(i,[...o])),t}addPersistedDirectiveDefinitionDataByNode(t,n,r){let i=n.name.value,a=new Map;for(let o of n.arguments||[]){let c=`@${i}(${o.name.value}: ...)`;this.addInputValueDataByNode(a,o,c,c)}t.set(i,{argumentDataByArgumentName:a,executableLocations:r,name:i,repeatable:n.repeatable,subgraphNames:new Set([this.subgraphName]),description:(0,bn.formatDescription)(n.description)})}extractDirectiveLocations(t,n){let r=new Set,i=new Set;for(let a of t.locations){let o=a.value;if(!i.has(o)){if(!ae.EXECUTABLE_DIRECTIVE_LOCATIONS.has(o)&&!oh.TYPE_SYSTEM_DIRECTIVE_LOCATIONS.has(o)){n.push((0,Te.invalidDirectiveDefinitionLocationErrorMessage)(o)),i.add(o);continue}if(r.has(o)){n.push((0,Te.duplicateDirectiveDefinitionLocationErrorMessage)(o)),i.add(o);continue}r.add(o)}}return r}extractArgumentData(t,n){let r=new Map,i=new Set,a=new Set,o={argumentTypeNodeByArgumentName:r,optionalArgumentNames:i,requiredArgumentNames:a};if(!t)return o;let c=new Set;for(let l of t){let p=l.name.value;if(r.has(p)){c.add(p);continue}l.defaultValue&&i.add(p),(0,In.isTypeRequired)(l.type)&&!l.defaultValue&&a.add(p),r.set(p,{name:p,typeNode:l.type,defaultValue:l.defaultValue})}return c.size>0&&n.push((0,Te.duplicateDirectiveDefinitionArgumentErrorMessage)([...c])),o}addDirectiveDefinitionDataByNode(t){let n=t.name.value;if(this.definedDirectiveNames.has(n))return this.errors.push((0,Te.duplicateDirectiveDefinitionError)(n)),!1;if(this.definedDirectiveNames.add(n),this.directiveDefinitionByDirectiveName.set(n,t),en.V2_DIRECTIVE_DEFINITION_BY_DIRECTIVE_NAME.has(n))return this.isSubgraphVersionTwo=!0,!1;if(en.ALL_IN_BUILT_DIRECTIVE_NAMES.has(n))return!1;let r=[],{argumentTypeNodeByArgumentName:i,optionalArgumentNames:a,requiredArgumentNames:o}=this.extractArgumentData(t.arguments,r);return this.directiveDefinitionDataByDirectiveName.set(n,{argumentTypeNodeByArgumentName:i,isRepeatable:t.repeatable,locations:this.extractDirectiveLocations(t,r),name:n,node:t,optionalArgumentNames:a,requiredArgumentNames:o}),r.length>0&&this.errors.push((0,Te.invalidDirectiveDefinitionError)(n,r)),!0}addFieldDataByNode(t,n,r,i){let a=n.name.value,o=this.renamedParentTypeName||this.originalParentTypeName,c=`${this.originalParentTypeName}.${a}`,{isExternal:l,isShareable:p}=(0,In.isNodeExternalOrShareable)(n,!this.isSubgraphVersionTwo,i),N={argumentDataByArgumentName:r,configureDescriptionDataBySubgraphName:new Map,externalFieldDataBySubgraphName:new Map([[this.subgraphName,(0,In.newExternalFieldData)(l)]]),federatedCoords:`${o}.${a}`,isInaccessible:i.has(ae.INACCESSIBLE),isShareableBySubgraphName:new Map([[this.subgraphName,p]]),kind:ue.Kind.FIELD_DEFINITION,name:a,namedTypeName:(0,ir.getTypeNodeNamedTypeName)(n.type),node:(0,ir.getMutableFieldNode)(n,c,this.errors),originalParentTypeName:this.originalParentTypeName,persistedDirectivesData:(0,In.newPersistedDirectivesData)(),renamedParentTypeName:o,subgraphNames:new Set([this.subgraphName]),type:(0,ir.getMutableTypeNode)(n.type,c,this.errors),directivesByDirectiveName:i,description:(0,bn.formatDescription)(n.description)};return en.BASE_SCALARS.has(N.namedTypeName)||this.referencedTypeNames.add(N.namedTypeName),this.extractConfigureDescriptionsData(N),t.set(a,N),N}addInputValueDataByNode(t,n,r,i){let a=n.name.value,o=!!i;n.defaultValue&&!(0,In.areDefaultValuesCompatible)(n.type,n.defaultValue)&&this.errors.push((0,Te.incompatibleInputValueDefaultValueTypeError)((o?ae.ARGUMENT:ae.INPUT_FIELD)+` "${a}"`,r,(0,$i.printTypeNode)(n.type),(0,ue.print)(n.defaultValue)));let c={configureDescriptionDataBySubgraphName:new Map,directivesByDirectiveName:this.extractDirectives(n,new Map),includeDefaultValue:!!n.defaultValue,isArgument:o,kind:o?ue.Kind.ARGUMENT:ue.Kind.INPUT_VALUE_DEFINITION,name:a,namedTypeName:(0,ir.getTypeNodeNamedTypeName)(n.type),node:(0,ir.getMutableInputValueNode)(n,r,this.errors),originalCoords:r,persistedDirectivesData:(0,In.newPersistedDirectivesData)(),federatedCoords:i||r,requiredSubgraphNames:new Set((0,In.isTypeRequired)(n.type)?[this.subgraphName]:[]),subgraphNames:new Set([this.subgraphName]),type:(0,ir.getMutableTypeNode)(n.type,r,this.errors),defaultValue:n.defaultValue,description:(0,bn.formatDescription)(n.description)};this.extractConfigureDescriptionsData(c),t.set(a,c)}upsertInterfaceDataByNode(t,n=!1){let r=t.name.value,i=this.parentDefinitionDataByTypeName.get(r),a=this.extractDirectives(t,(i==null?void 0:i.directivesByDirectiveName)||new Map),o=this.getNodeExtensionType(n,a),c=this.entityInterfaceDataByTypeName.get(r);if(c&&t.fields)for(let p of t.fields)c.interfaceFieldNames.add(p.name.value);if(i){if(i.kind!==ue.Kind.INTERFACE_TYPE_DEFINITION){this.errors.push((0,Te.multipleNamedTypeDefinitionError)(r,(0,Ge.kindToTypeString)(i.kind),(0,ar.kindToConvertedTypeString)(t.kind)));return}this.updateCompositeOutputDataByNode(t,i,o);return}let l={configureDescriptionDataBySubgraphName:new Map,directivesByDirectiveName:a,extensionType:o,fieldDataByFieldName:new Map,implementedInterfaceTypeNames:this.extractImplementedInterfaceTypeNames(t,new Set),isEntity:a.has(ae.KEY),isInaccessible:a.has(ae.INACCESSIBLE),kind:ue.Kind.INTERFACE_TYPE_DEFINITION,name:r,node:(0,ir.getMutableInterfaceNode)(t.name),persistedDirectivesData:(0,In.newPersistedDirectivesData)(),subgraphNames:new Set([this.subgraphName]),description:(0,bn.formatDescription)("description"in t?t.description:void 0)};this.extractConfigureDescriptionsData(l),this.parentDefinitionDataByTypeName.set(r,l)}getRenamedRootTypeName(t){let n=this.operationTypeNodeByTypeName.get(t);if(!n)return t;switch(n){case ue.OperationTypeNode.MUTATION:return ae.MUTATION;case ue.OperationTypeNode.SUBSCRIPTION:return ae.SUBSCRIPTION;default:return ae.QUERY}}addInterfaceObjectFieldsByNode(t){let n=t.name.value,r=this.entityInterfaceDataByTypeName.get(n);if(!(!r||!r.isInterfaceObject||!t.fields))for(let i of t.fields)r.interfaceObjectFieldNames.add(i.name.value)}upsertObjectDataByNode(t,n=!1){let r=t.name.value,i=this.parentDefinitionDataByTypeName.get(r),a=this.extractDirectives(t,(i==null?void 0:i.directivesByDirectiveName)||new Map),o=this.isTypeNameRootType(r),c=this.getNodeExtensionType(n,a,o);if(this.addInterfaceObjectFieldsByNode(t),i){if(i.kind!==ue.Kind.OBJECT_TYPE_DEFINITION){this.errors.push((0,Te.multipleNamedTypeDefinitionError)(r,(0,Ge.kindToTypeString)(i.kind),(0,ar.kindToConvertedTypeString)(t.kind)));return}this.updateCompositeOutputDataByNode(t,i,c),this.addConcreteTypeNamesForImplementedInterfaces(i.implementedInterfaceTypeNames,r);return}let l=this.extractImplementedInterfaceTypeNames(t,new Set);this.addConcreteTypeNamesForImplementedInterfaces(l,r);let p={configureDescriptionDataBySubgraphName:new Map,directivesByDirectiveName:a,extensionType:c,fieldDataByFieldName:new Map,implementedInterfaceTypeNames:l,isEntity:a.has(ae.KEY),isInaccessible:a.has(ae.INACCESSIBLE),isRootType:o,kind:ue.Kind.OBJECT_TYPE_DEFINITION,name:r,node:(0,ir.getMutableObjectNode)(t.name),persistedDirectivesData:(0,In.newPersistedDirectivesData)(),renamedTypeName:this.getRenamedRootTypeName(r),subgraphNames:new Set([this.subgraphName]),description:(0,bn.formatDescription)("description"in t?t.description:void 0)};this.extractConfigureDescriptionsData(p),this.parentDefinitionDataByTypeName.set(r,p)}upsertEnumDataByNode(t,n=!1){let r=t.name.value;this.internalGraph.addOrUpdateNode(r,{isLeaf:!0});let i=this.parentDefinitionDataByTypeName.get(r),a=this.extractDirectives(t,(i==null?void 0:i.directivesByDirectiveName)||new Map),o=this.getNodeExtensionType(n,a);if(i){if(i.kind!==ue.Kind.ENUM_TYPE_DEFINITION){this.errors.push((0,Te.multipleNamedTypeDefinitionError)(r,(0,Ge.kindToTypeString)(i.kind),(0,ar.kindToConvertedTypeString)(t.kind)));return}this.setParentDataExtensionType(i,o),i.isInaccessible||(i.isInaccessible=a.has(ae.INACCESSIBLE)),i.subgraphNames.add(this.subgraphName),i.description||(i.description=(0,bn.formatDescription)("description"in t?t.description:void 0)),this.extractConfigureDescriptionsData(i);return}let c={appearances:1,configureDescriptionDataBySubgraphName:new Map,directivesByDirectiveName:a,extensionType:o,enumValueDataByValueName:new Map,isInaccessible:a.has(ae.INACCESSIBLE),kind:ue.Kind.ENUM_TYPE_DEFINITION,name:r,node:(0,ir.getMutableEnumNode)(t.name),persistedDirectivesData:(0,In.newPersistedDirectivesData)(),subgraphNames:new Set([this.subgraphName]),description:(0,bn.formatDescription)("description"in t?t.description:void 0)};this.extractConfigureDescriptionsData(c),this.parentDefinitionDataByTypeName.set(r,c)}upsertInputObjectByNode(t,n=!1){let r=t.name.value,i=this.parentDefinitionDataByTypeName.get(r),a=this.extractDirectives(t,(i==null?void 0:i.directivesByDirectiveName)||new Map),o=this.getNodeExtensionType(n,a);if(i){if(i.kind!==ue.Kind.INPUT_OBJECT_TYPE_DEFINITION){this.errors.push((0,Te.multipleNamedTypeDefinitionError)(r,(0,Ge.kindToTypeString)(i.kind),(0,ar.kindToConvertedTypeString)(t.kind)));return}this.setParentDataExtensionType(i,o),i.isInaccessible||(i.isInaccessible=a.has(ae.INACCESSIBLE)),i.subgraphNames.add(this.subgraphName),i.description||(i.description=(0,bn.formatDescription)("description"in t?t.description:void 0)),this.extractConfigureDescriptionsData(i);return}let c={configureDescriptionDataBySubgraphName:new Map,directivesByDirectiveName:a,extensionType:o,inputValueDataByValueName:new Map,isInaccessible:a.has(ae.INACCESSIBLE),kind:ue.Kind.INPUT_OBJECT_TYPE_DEFINITION,name:r,node:(0,ir.getMutableInputObjectNode)(t.name),persistedDirectivesData:(0,In.newPersistedDirectivesData)(),subgraphNames:new Set([this.subgraphName]),description:(0,bn.formatDescription)("description"in t?t.description:void 0)};this.extractConfigureDescriptionsData(c),this.parentDefinitionDataByTypeName.set(r,c)}upsertScalarByNode(t,n=!1){let r=t.name.value;this.internalGraph.addOrUpdateNode(r,{isLeaf:!0});let i=this.parentDefinitionDataByTypeName.get(r),a=this.extractDirectives(t,(i==null?void 0:i.directivesByDirectiveName)||new Map),o=this.getNodeExtensionType(n,a);if(i){if(i.kind!==ue.Kind.SCALAR_TYPE_DEFINITION){this.errors.push((0,Te.multipleNamedTypeDefinitionError)(r,(0,Ge.kindToTypeString)(i.kind),(0,ar.kindToConvertedTypeString)(t.kind)));return}this.setParentDataExtensionType(i,o),i.description||(i.description=(0,bn.formatDescription)("description"in t?t.description:void 0)),i.subgraphNames.add(this.subgraphName),this.extractConfigureDescriptionsData(i);return}let c={configureDescriptionDataBySubgraphName:new Map,directivesByDirectiveName:a,extensionType:o,kind:ue.Kind.SCALAR_TYPE_DEFINITION,name:r,node:(0,ir.getMutableScalarNode)(t.name),persistedDirectivesData:(0,In.newPersistedDirectivesData)(),subgraphNames:new Set([this.subgraphName]),description:(0,bn.formatDescription)("description"in t?t.description:void 0)};this.extractConfigureDescriptionsData(c),this.parentDefinitionDataByTypeName.set(r,c)}extractUnionMembers(t,n){if(!t.types)return n;let r=t.name.value;for(let i of t.types){let a=i.name.value;if(n.has(a)){this.errors.push((0,Te.duplicateUnionMemberDefinitionError)(r,a));continue}(0,Ge.getValueOrDefault)(this.concreteTypeNamesByAbstractTypeName,r,()=>new Set).add(a),en.BASE_SCALARS.has(a)||this.referencedTypeNames.add(a),n.set(a,i)}return n}upsertUnionByNode(t,n=!1){let r=t.name.value,i=this.parentDefinitionDataByTypeName.get(r),a=this.extractDirectives(t,(i==null?void 0:i.directivesByDirectiveName)||new Map),o=this.getNodeExtensionType(n,a);if(this.addConcreteTypeNamesForUnion(t),i){if(i.kind!==ue.Kind.UNION_TYPE_DEFINITION){this.errors.push((0,Te.multipleNamedTypeDefinitionError)(r,(0,Ge.kindToTypeString)(i.kind),(0,ar.kindToConvertedTypeString)(t.kind)));return}this.setParentDataExtensionType(i,o),this.extractUnionMembers(t,i.memberByMemberTypeName),i.description||(i.description=(0,bn.formatDescription)("description"in t?t.description:void 0)),i.subgraphNames.add(this.subgraphName),this.extractConfigureDescriptionsData(i);return}let c={configureDescriptionDataBySubgraphName:new Map,directivesByDirectiveName:a,extensionType:o,kind:ue.Kind.UNION_TYPE_DEFINITION,memberByMemberTypeName:this.extractUnionMembers(t,new Map),name:r,node:(0,ir.getMutableUnionNode)(t.name),persistedDirectivesData:(0,In.newPersistedDirectivesData)(),subgraphNames:new Set([this.subgraphName]),description:(0,bn.formatDescription)("description"in t?t.description:void 0)};this.extractConfigureDescriptionsData(c),this.parentDefinitionDataByTypeName.set(r,c)}extractKeyFieldSets(t,n){var a;let r=t.name.value;if(!((a=t.directives)!=null&&a.length)){this.errors.push((0,Te.expectedEntityError)(r));return}let i=0;for(let o of t.directives){if(o.name.value!==ae.KEY||(i+=1,!o.arguments||o.arguments.length<1))continue;let c,l=!1;for(let _ of o.arguments){if(_.name.value===ae.RESOLVABLE){_.value.kind===ue.Kind.BOOLEAN&&!_.value.value&&(l=!0);continue}if(_.name.value!==ae.FIELDS){c=void 0;break}if(_.value.kind!==ue.Kind.STRING){c=void 0;break}c=_.value.value}if(c===void 0)continue;let{error:p,documentNode:N}=(0,bn.safeParse)("{"+c+"}");if(p||!N){this.errors.push((0,Te.invalidDirectiveError)(ae.KEY,r,(0,Ge.numberToOrdinal)(i),[(0,Te.unparsableFieldSetErrorMessage)(c,p)]));continue}let y=(0,Gi.getNormalizedFieldSet)(N),g=n.get(y);g?g.isUnresolvable||(g.isUnresolvable=l):n.set(y,{documentNode:N,isUnresolvable:l,normalizedFieldSet:y,rawFieldSet:c})}}getFieldSetParent(t,n,r,i){if(!t)return{fieldSetParentData:n};let a=(0,Ge.getOrThrowError)(n.fieldDataByFieldName,r,`${i}.fieldDataByFieldName`),o=(0,ir.getTypeNodeNamedTypeName)(a.node.type),c=this.parentDefinitionDataByTypeName.get(o);return c?c.kind!==ue.Kind.INTERFACE_TYPE_DEFINITION&&c.kind!==ue.Kind.OBJECT_TYPE_DEFINITION?{errorString:(0,Te.incompatibleTypeWithProvidesErrorMessage)(`${i}.${r}`,o)}:{fieldSetParentData:c}:{errorString:(0,Te.unknownNamedTypeErrorMessage)(`${i}.${r}`,o)}}validateConditionalFieldSet(t,n,r,i,a){let{error:o,documentNode:c}=(0,bn.safeParse)("{"+n+"}");if(o||!c)return{errorMessages:[(0,Te.unparsableFieldSetErrorMessage)(n,o)]};let l=this,p=[t],N=(0,Gi.getConditionalFieldSetDirectiveName)(i),y=[],g=`${a}.${r}`,_=(0,Gi.getInitialFieldCoordsPath)(i,g),F=[r],B=new Set,j=[],J=-1,Z=!0,W=r,Ne=!1;return(0,gn.visit)(c,{Argument:{enter(){return!1}},Field:{enter(le){let we=p[J],qe=we.name;if(we.kind===ue.Kind.UNION_TYPE_DEFINITION)return j.push((0,Te.invalidSelectionOnUnionErrorMessage)(n,_,qe)),gn.BREAK;let et=le.name.value,X=`${qe}.${et}`;if(l.unvalidatedExternalFieldCoords.delete(X),Z)return j.push((0,Te.invalidSelectionSetErrorMessage)(n,_,qe,(0,Ge.kindToTypeString)(we.kind))),gn.BREAK;_.push(X),F.push(et),W=et;let ve=we.fieldDataByFieldName.get(et);if(!ve)return j.push((0,Te.undefinedFieldInFieldSetErrorMessage)(n,qe,et)),gn.BREAK;if(y[J].has(et))return j.push((0,Te.duplicateFieldInFieldSetErrorMessage)(n,X)),gn.BREAK;y[J].add(et);let{isDefinedExternal:gt,isUnconditionallyProvided:Ht}=(0,Ge.getOrThrowError)(ve.externalFieldDataBySubgraphName,l.subgraphName,`${X}.externalFieldDataBySubgraphName`),zt=gt&&!Ht;Ht||(Ne=!0);let Dn=(0,ir.getTypeNodeNamedTypeName)(ve.node.type),qt=l.parentDefinitionDataByTypeName.get(Dn);if(en.BASE_SCALARS.has(Dn)||(qt==null?void 0:qt.kind)===ue.Kind.SCALAR_TYPE_DEFINITION||(qt==null?void 0:qt.kind)===ue.Kind.ENUM_TYPE_DEFINITION){if(B.size<1&&!gt){if(l.isSubgraphVersionTwo){l.errors.push((0,Te.nonExternalConditionalFieldError)(g,l.subgraphName,X,n,N));return}l.warnings.push((0,Ss.nonExternalConditionalFieldWarning)(g,l.subgraphName,X,n,N));return}if(B.size<1&&Ht){l.isSubgraphVersionTwo?j.push((0,Te.fieldAlreadyProvidedErrorMessage)(X,l.subgraphName,N)):l.warnings.push((0,Ss.fieldAlreadyProvidedWarning)(X,N,g,l.subgraphName));return}if(!zt&&!i)return;let cn=(0,Ge.getValueOrDefault)(l.conditionalFieldDataByCoords,X,In.newConditionalFieldData),Rr=(0,Fp.newFieldSetConditionData)({fieldCoordinatesPath:[..._],fieldPath:[...F]});i?cn.providedBy.push(Rr):cn.requiredBy.push(Rr);return}if(!qt)return j.push((0,Te.unknownTypeInFieldSetErrorMessage)(n,X,Dn)),gn.BREAK;if(gt&&(i&&(0,Ge.getValueOrDefault)(l.conditionalFieldDataByCoords,X,In.newConditionalFieldData).providedBy.push((0,Fp.newFieldSetConditionData)({fieldCoordinatesPath:[..._],fieldPath:[...F]})),B.add(X)),qt.kind===ue.Kind.OBJECT_TYPE_DEFINITION||qt.kind===ue.Kind.INTERFACE_TYPE_DEFINITION||qt.kind===ue.Kind.UNION_TYPE_DEFINITION){Z=!0,p.push(qt);return}},leave(){B.delete(_.pop()||""),F.pop()}},InlineFragment:{enter(le){let we=p[J],qe=we.name,et=_.length<1?t.name:_[_.length-1];if(!le.typeCondition)return j.push((0,Te.inlineFragmentWithoutTypeConditionErrorMessage)(n,et)),gn.BREAK;let X=le.typeCondition.name.value;if(X===qe){p.push(we),Z=!0;return}if(!(0,bn.isKindAbstract)(we.kind))return j.push((0,Te.invalidInlineFragmentTypeErrorMessage)(n,_,X,qe)),gn.BREAK;let ve=l.parentDefinitionDataByTypeName.get(X);if(!ve)return j.push((0,Te.unknownInlineFragmentTypeConditionErrorMessage)(n,_,qe,X)),gn.BREAK;switch(Z=!0,ve.kind){case ue.Kind.INTERFACE_TYPE_DEFINITION:{if(!ve.implementedInterfaceTypeNames.has(qe))break;p.push(ve);return}case ue.Kind.OBJECT_TYPE_DEFINITION:{let gt=l.concreteTypeNamesByAbstractTypeName.get(qe);if(!gt||!gt.has(X))break;p.push(ve);return}case ue.Kind.UNION_TYPE_DEFINITION:{p.push(ve);return}default:return j.push((0,Te.invalidInlineFragmentTypeConditionTypeErrorMessage)(n,_,qe,X,(0,Ge.kindToTypeString)(ve.kind))),gn.BREAK}return j.push((0,Te.invalidInlineFragmentTypeConditionErrorMessage)(n,_,X,(0,Ge.kindToTypeString)(we.kind),qe)),gn.BREAK}},SelectionSet:{enter(){if(!Z){let le=p[J];if(le.kind===ue.Kind.UNION_TYPE_DEFINITION)return j.push((0,Te.unparsableFieldSetSelectionErrorMessage)(n,W)),gn.BREAK;let we=le.fieldDataByFieldName.get(W);if(!we)return j.push((0,Te.undefinedFieldInFieldSetErrorMessage)(n,le.name,W)),gn.BREAK;let qe=(0,ir.getTypeNodeNamedTypeName)(we.node.type),et=l.parentDefinitionDataByTypeName.get(qe),X=et?et.kind:ue.Kind.SCALAR_TYPE_DEFINITION;return j.push((0,Te.invalidSelectionSetDefinitionErrorMessage)(n,_,qe,(0,Ge.kindToTypeString)(X))),gn.BREAK}if(J+=1,Z=!1,J<0||J>=p.length)return j.push((0,Te.unparsableFieldSetSelectionErrorMessage)(n,W)),gn.BREAK;y.push(new Set)},leave(){if(Z){let le=p[J+1];j.push((0,Te.invalidSelectionSetErrorMessage)(n,_,le.name,(0,Ge.kindToTypeString)(le.kind))),Z=!1}J-=1,p.pop(),y.pop()}}}),j.length>0||!Ne?{errorMessages:j}:{configuration:{fieldName:r,selectionSet:(0,Gi.getNormalizedFieldSet)(c)},errorMessages:j}}validateProvidesOrRequires(t,n,r){let i=[],a=[],o=(0,In.getParentTypeName)(t);for(let[c,l]of n){let{fieldSetParentData:p,errorString:N}=this.getFieldSetParent(r,t,c,o),y=`${o}.${c}`;if(N){i.push(N);continue}if(!p)continue;let{errorMessages:g,configuration:_}=this.validateConditionalFieldSet(p,l,c,r,o);if(g.length>0){i.push(` On field "${y}": - -`+g.join(ae.HYPHEN_JOIN));continue}_&&a.push(_)}if(i.length>0){this.errors.push((0,Te.invalidProvidesOrRequiresDirectivesError)((0,Gi.getConditionalFieldSetDirectiveName)(r),i));return}if(a.length>0)return a}validateInterfaceImplementations(t){if(t.implementedInterfaceTypeNames.size<1)return;let n=t.directivesByDirectiveName.has(ae.INACCESSIBLE),r=new Map,i=new Map,a=!1;for(let o of t.implementedInterfaceTypeNames){let c=this.parentDefinitionDataByTypeName.get(o);if(en.BASE_SCALARS.has(o)&&this.referencedTypeNames.add(o),!c)continue;if(c.kind!==ue.Kind.INTERFACE_TYPE_DEFINITION){i.set(c.name,(0,Ge.kindToTypeString)(c.kind));continue}if(t.name===c.name){a=!0;continue}let l={invalidFieldImplementations:new Map,unimplementedFields:[]},p=!1;for(let[N,y]of c.fieldDataByFieldName){this.unvalidatedExternalFieldCoords.delete(`${t.name}.${N}`);let g=!1,_=t.fieldDataByFieldName.get(N);if(!_){p=!0,l.unimplementedFields.push(N);continue}let F={invalidAdditionalArguments:new Set,invalidImplementedArguments:[],isInaccessible:!1,originalResponseType:(0,$i.printTypeNode)(y.node.type),unimplementedArguments:new Set};(0,In.isTypeValidImplementation)(y.node.type,_.node.type,this.concreteTypeNamesByAbstractTypeName)||(p=!0,g=!0,F.implementedResponseType=(0,$i.printTypeNode)(_.node.type));let B=new Set;for(let[j,J]of y.argumentDataByArgumentName){B.add(j);let Z=_.argumentDataByArgumentName.get(j);if(!Z){p=!0,g=!0,F.unimplementedArguments.add(j);continue}let W=(0,$i.printTypeNode)(Z.type),Ne=(0,$i.printTypeNode)(J.type);Ne!==W&&(p=!0,g=!0,F.invalidImplementedArguments.push({actualType:W,argumentName:j,expectedType:Ne}))}for(let[j,J]of _.argumentDataByArgumentName)B.has(j)||J.type.kind===ue.Kind.NON_NULL_TYPE&&(p=!0,g=!0,F.invalidAdditionalArguments.add(j));!n&&_.isInaccessible&&!y.isInaccessible&&(p=!0,g=!0,F.isInaccessible=!0),g&&l.invalidFieldImplementations.set(N,F)}p&&r.set(o,l)}i.size>0&&this.errors.push((0,Te.invalidImplementedTypeError)(t.name,i)),a&&this.errors.push((0,Te.selfImplementationError)(t.name)),r.size>0&&this.errors.push((0,Te.invalidInterfaceImplementationError)(t.name,(0,Ge.kindToTypeString)(t.kind),r))}handleAuthenticatedDirective(t,n){let r=(0,Ge.getValueOrDefault)(this.authorizationDataByParentTypeName,n,()=>(0,ar.newAuthorizationData)(n));if(t.kind===ue.Kind.FIELD_DEFINITION){let i=(0,Ge.getValueOrDefault)(r.fieldAuthDataByFieldName,t.name,()=>(0,ar.newFieldAuthorizationData)(t.name));i.inheritedData.requiresAuthentication=!0,i.originalData.requiresAuthentication=!0}else r.requiresAuthentication=!0,this.parentTypeNamesWithAuthDirectives.add(n)}handleOverrideDirective({data:t,directiveCoords:n,errorMessages:r,targetSubgraphName:i}){if(i===this.subgraphName){r.push((0,Te.equivalentSourceAndTargetOverrideErrorMessage)(i,n));return}let a=(0,Ge.getValueOrDefault)(this.overridesByTargetSubgraphName,i,()=>new Map);(0,Ge.getValueOrDefault)(a,t.renamedParentTypeName,()=>new Set).add(t.name)}extractRequiredScopes({directiveCoords:t,orScopes:n,requiredScopes:r}){if(n.length>en.MAX_OR_SCOPES){this.invalidORScopesCoords.add(t);return}for(let i of n){let a=new Set;for(let o of i.values)a.add(o.value);a.size<1||(0,ar.addScopes)(r,a)}}getKafkaPublishConfiguration(t,n,r,i){let a=[],o=ae.DEFAULT_EDFS_PROVIDER_ID;for(let c of t.arguments||[])switch(c.name.value){case ae.TOPIC:{if(c.value.kind!==ue.Kind.STRING||c.value.value.length<1){i.push((0,Te.invalidEventSubjectErrorMessage)(ae.TOPIC));continue}(0,Gi.validateArgumentTemplateReferences)(c.value.value,n,i),a.push(c.value.value);break}case ae.PROVIDER_ID:{if(c.value.kind!==ue.Kind.STRING||c.value.value.length<1){i.push(Te.invalidEventProviderIdErrorMessage);continue}o=c.value.value;break}}if(!(i.length>0))return{fieldName:r,providerId:o,providerType:ae.PROVIDER_TYPE_KAFKA,topics:a,type:ae.PUBLISH}}getKafkaSubscribeConfiguration(t,n,r,i){let a=[],o=ae.DEFAULT_EDFS_PROVIDER_ID;for(let c of t.arguments||[])switch(c.name.value){case ae.TOPICS:{if(c.value.kind!==ue.Kind.LIST){i.push((0,Te.invalidEventSubjectsErrorMessage)(ae.TOPICS));continue}for(let l of c.value.values){if(l.kind!==ue.Kind.STRING||l.value.length<1){i.push((0,Te.invalidEventSubjectsItemErrorMessage)(ae.TOPICS));break}(0,Gi.validateArgumentTemplateReferences)(l.value,n,i),a.push(l.value)}break}case ae.PROVIDER_ID:{if(c.value.kind!==ue.Kind.STRING||c.value.value.length<1){i.push(Te.invalidEventProviderIdErrorMessage);continue}o=c.value.value;break}}if(!(i.length>0))return{fieldName:r,providerId:o,providerType:ae.PROVIDER_TYPE_KAFKA,topics:a,type:ae.SUBSCRIBE}}getNatsPublishAndRequestConfiguration(t,n,r,i,a){let o=[],c=ae.DEFAULT_EDFS_PROVIDER_ID;for(let l of n.arguments||[])switch(l.name.value){case ae.SUBJECT:{if(l.value.kind!==ue.Kind.STRING||l.value.value.length<1){a.push((0,Te.invalidEventSubjectErrorMessage)(ae.SUBJECT));continue}(0,Gi.validateArgumentTemplateReferences)(l.value.value,r,a),o.push(l.value.value);break}case ae.PROVIDER_ID:{if(l.value.kind!==ue.Kind.STRING||l.value.value.length<1){a.push(Te.invalidEventProviderIdErrorMessage);continue}c=l.value.value;break}}if(!(a.length>0))return{fieldName:i,providerId:c,providerType:ae.PROVIDER_TYPE_NATS,subjects:o,type:t}}getNatsSubscribeConfiguration(t,n,r,i){let a=[],o=ae.DEFAULT_EDFS_PROVIDER_ID,c=uh.DEFAULT_CONSUMER_INACTIVE_THRESHOLD,l="",p="";for(let N of t.arguments||[])switch(N.name.value){case ae.SUBJECTS:{if(N.value.kind!==ue.Kind.LIST){i.push((0,Te.invalidEventSubjectsErrorMessage)(ae.SUBJECTS));continue}for(let y of N.value.values){if(y.kind!==ue.Kind.STRING||y.value.length<1){i.push((0,Te.invalidEventSubjectsItemErrorMessage)(ae.SUBJECTS));break}(0,Gi.validateArgumentTemplateReferences)(y.value,n,i),a.push(y.value)}break}case ae.PROVIDER_ID:{if(N.value.kind!==ue.Kind.STRING||N.value.value.length<1){i.push(Te.invalidEventProviderIdErrorMessage);continue}o=N.value.value;break}case ae.STREAM_CONFIGURATION:{if(this.usesEdfsNatsStreamConfiguration=!0,N.value.kind!==ue.Kind.OBJECT||N.value.fields.length<1){i.push(Te.invalidNatsStreamInputErrorMessage);continue}let y=!0,g=new Set,_=new Set(oh.STREAM_CONFIGURATION_FIELD_NAMES),F=new Set([ae.CONSUMER_NAME,ae.STREAM_NAME]),B=new Set,j=new Set;for(let J of N.value.fields){let Z=J.name.value;if(!oh.STREAM_CONFIGURATION_FIELD_NAMES.has(Z)){g.add(Z),y=!1;continue}if(_.has(Z))_.delete(Z);else{B.add(Z),y=!1;continue}switch(F.has(Z)&&F.delete(Z),Z){case ae.CONSUMER_NAME:if(J.value.kind!=ue.Kind.STRING||J.value.value.length<1){j.add(Z),y=!1;continue}l=J.value.value;break;case ae.STREAM_NAME:if(J.value.kind!=ue.Kind.STRING||J.value.value.length<1){j.add(Z),y=!1;continue}p=J.value.value;break;case ae.CONSUMER_INACTIVE_THRESHOLD:if(J.value.kind!=ue.Kind.INT){i.push((0,Te.invalidArgumentValueErrorMessage)((0,ue.print)(J.value),"edfs__NatsStreamConfiguration","consumerInactiveThreshold",ae.INT_SCALAR)),y=!1;continue}try{c=parseInt(J.value.value,10)}catch(W){i.push((0,Te.invalidArgumentValueErrorMessage)((0,ue.print)(J.value),"edfs__NatsStreamConfiguration","consumerInactiveThreshold",ae.INT_SCALAR)),y=!1}break}}(!y||F.size>0)&&i.push((0,Te.invalidNatsStreamInputFieldsErrorMessage)([...F],[...B],[...j],[...g]))}}if(!(i.length>0))return c<0?(c=uh.DEFAULT_CONSUMER_INACTIVE_THRESHOLD,this.warnings.push((0,Ss.consumerInactiveThresholdInvalidValueWarning)(this.subgraphName,`The value has been set to ${uh.DEFAULT_CONSUMER_INACTIVE_THRESHOLD}.`))):c>Pce.MAX_INT32&&(c=0,this.warnings.push((0,Ss.consumerInactiveThresholdInvalidValueWarning)(this.subgraphName,"The value has been set to 0. This means the consumer will remain indefinitely active until its manual deletion."))),k({fieldName:r,providerId:o,providerType:ae.PROVIDER_TYPE_NATS,subjects:a,type:ae.SUBSCRIBE},l&&p?{streamConfiguration:{consumerInactiveThreshold:c,consumerName:l,streamName:p}}:{})}validateSubscriptionFilterDirectiveLocation(t){if(!t.directives)return;let n=this.renamedParentTypeName||this.originalParentTypeName,r=`${n}.${t.name.value}`,i=this.getOperationTypeNodeForRootTypeName(n)===ue.OperationTypeNode.SUBSCRIPTION;for(let a of t.directives)if(a.name.value===ae.SUBSCRIPTION_FILTER&&!i){this.errors.push((0,Te.invalidSubscriptionFilterLocationError)(r));return}}extractEventDirectivesToConfiguration(t,n){if(!t.directives)return;let r=t.name.value,i=`${this.renamedParentTypeName||this.originalParentTypeName}.${r}`;for(let a of t.directives){let o=[],c;switch(a.name.value){case ae.EDFS_KAFKA_PUBLISH:c=this.getKafkaPublishConfiguration(a,n,r,o);break;case ae.EDFS_KAFKA_SUBSCRIBE:c=this.getKafkaSubscribeConfiguration(a,n,r,o);break;case ae.EDFS_NATS_PUBLISH:{c=this.getNatsPublishAndRequestConfiguration(ae.PUBLISH,a,n,r,o);break}case ae.EDFS_NATS_REQUEST:{c=this.getNatsPublishAndRequestConfiguration(ae.REQUEST,a,n,r,o);break}case ae.EDFS_NATS_SUBSCRIBE:{c=this.getNatsSubscribeConfiguration(a,n,r,o);break}default:continue}if(o.length>0){this.errors.push((0,Te.invalidEventDirectiveError)(a.name.value,i,o));continue}c&&(0,Ge.getValueOrDefault)(this.eventsConfigurations,this.renamedParentTypeName||this.originalParentTypeName,()=>[]).push(c)}}getValidEventsDirectiveNamesForOperationTypeNode(t){switch(t){case ue.OperationTypeNode.MUTATION:return new Set([ae.EDFS_KAFKA_PUBLISH,ae.EDFS_NATS_PUBLISH,ae.EDFS_NATS_REQUEST]);case ue.OperationTypeNode.QUERY:return new Set([ae.EDFS_NATS_REQUEST]);case ue.OperationTypeNode.SUBSCRIPTION:return new Set([ae.EDFS_KAFKA_SUBSCRIBE,ae.EDFS_NATS_SUBSCRIBE])}}getOperationTypeNodeForRootTypeName(t){let n=this.operationTypeNodeByTypeName.get(t);if(n)return n;switch(t){case ae.MUTATION:return ue.OperationTypeNode.MUTATION;case ae.QUERY:return ue.OperationTypeNode.QUERY;case ae.SUBSCRIPTION:return ue.OperationTypeNode.SUBSCRIPTION;default:return}}validateEventDrivenRootType(t,n,r,i){let a=this.getOperationTypeNodeForRootTypeName(t.name);if(!a){this.errors.push((0,Te.invalidRootTypeError)(t.name));return}let o=this.getValidEventsDirectiveNamesForOperationTypeNode(a);for(let[c,l]of t.fieldDataByFieldName){let p=`${l.originalParentTypeName}.${c}`,N=new Set;for(let j of oh.EVENT_DIRECTIVE_NAMES)l.directivesByDirectiveName.has(j)&&N.add(j);let y=new Set;for(let j of N)o.has(j)||y.add(j);if((N.size<1||y.size>0)&&n.set(p,{definesDirectives:N.size>0,invalidDirectiveNames:[...y]}),a===ue.OperationTypeNode.MUTATION){let j=(0,$i.printTypeNode)(l.type);j!==ae.NON_NULLABLE_EDFS_PUBLISH_EVENT_RESULT&&i.set(p,j);continue}let g=(0,$i.printTypeNode)(l.type),_=l.namedTypeName+"!",F=!1,B=this.concreteTypeNamesByAbstractTypeName.get(l.namedTypeName)||new Set([l.namedTypeName]);for(let j of B)if(F||(F=this.entityDataByTypeName.has(j)),F)break;(!F||g!==_)&&r.set(p,g)}}validateEventDrivenKeyDefinition(t,n){let r=this.keyFieldSetDatasByTypeName.get(t);if(r)for(let[i,{isUnresolvable:a}]of r)a||(0,Ge.getValueOrDefault)(n,t,()=>[]).push(i)}validateEventDrivenObjectFields(t,n,r,i){var a;for(let[o,c]of t){let l=`${c.originalParentTypeName}.${o}`;if(n.has(o)){(a=c.externalFieldDataBySubgraphName.get(this.subgraphName))!=null&&a.isDefinedExternal||r.set(l,o);continue}i.set(l,o)}}isEdfsPublishResultValid(){let t=this.parentDefinitionDataByTypeName.get(ae.EDFS_PUBLISH_RESULT);if(!t)return!0;if(t.kind!==ue.Kind.OBJECT_TYPE_DEFINITION||t.fieldDataByFieldName.size!=1)return!1;for(let[n,r]of t.fieldDataByFieldName)if(r.argumentDataByArgumentName.size>0||n!==ae.SUCCESS||(0,$i.printTypeNode)(r.type)!==ae.NON_NULLABLE_BOOLEAN)return!1;return!0}isNatsStreamConfigurationInputObjectValid(t){if(t.kind!==ue.Kind.INPUT_OBJECT_TYPE_DEFINITION||t.inputValueDataByValueName.size!=3)return!1;for(let[n,r]of t.inputValueDataByValueName)switch(n){case ae.CONSUMER_INACTIVE_THRESHOLD:{if((0,$i.printTypeNode)(r.type)!==ae.NON_NULLABLE_INT||!r.defaultValue||r.defaultValue.kind!==ue.Kind.INT||r.defaultValue.value!==`${uh.DEFAULT_CONSUMER_INACTIVE_THRESHOLD}`)return!1;break}case ae.CONSUMER_NAME:case ae.STREAM_NAME:{if((0,$i.printTypeNode)(r.type)!==ae.NON_NULLABLE_STRING)return!1;break}default:return!1}return!0}validateEventDrivenSubgraph(t){let n=[],r=new Map,i=new Map,a=new Map,o=new Map,c=new Map,l=new Map,p=new Set,N=new Set;for(let[y,g]of this.parentDefinitionDataByTypeName){if(y===ae.EDFS_PUBLISH_RESULT||y===ae.EDFS_NATS_STREAM_CONFIGURATION||g.kind!==ue.Kind.OBJECT_TYPE_DEFINITION)continue;if(g.isRootType){this.validateEventDrivenRootType(g,r,i,a);continue}let _=this.keyFieldNamesByParentTypeName.get(y);if(!_){N.add(y);continue}this.validateEventDrivenKeyDefinition(y,o),this.validateEventDrivenObjectFields(g.fieldDataByFieldName,_,c,l)}if(this.isEdfsPublishResultValid()||n.push(Te.invalidEdfsPublishResultObjectErrorMessage),this.edfsDirectiveReferences.has(ae.EDFS_NATS_SUBSCRIBE)){let y=this.parentDefinitionDataByTypeName.get(ae.EDFS_NATS_STREAM_CONFIGURATION);y&&this.usesEdfsNatsStreamConfiguration&&!this.isNatsStreamConfigurationInputObjectValid(y)&&n.push(Te.invalidNatsStreamConfigurationDefinitionErrorMessage),this.parentDefinitionDataByTypeName.delete(ae.EDFS_NATS_STREAM_CONFIGURATION),t.push(en.EDFS_NATS_STREAM_CONFIGURATION_DEFINITION)}this.referencedDirectiveNames.has(ae.LINK)&&(t.push(en.LINK_DEFINITION),t.push(en.LINK_IMPORT_DEFINITION),t.push(en.LINK_PURPOSE_DEFINITION)),r.size>0&&n.push((0,Te.invalidRootTypeFieldEventsDirectivesErrorMessage)(r)),a.size>0&&n.push((0,Te.invalidEventDrivenMutationResponseTypeErrorMessage)(a)),i.size>0&&n.push((0,Te.invalidRootTypeFieldResponseTypesEventDrivenErrorMessage)(i)),o.size>0&&n.push((0,Te.invalidKeyFieldSetsEventDrivenErrorMessage)(o)),c.size>0&&n.push((0,Te.nonExternalKeyFieldNamesEventDrivenErrorMessage)(c)),l.size>0&&n.push((0,Te.nonKeyFieldNamesEventDrivenErrorMessage)(l)),p.size>0&&n.push((0,Te.nonEntityObjectExtensionsEventDrivenErrorMessage)([...p])),N.size>0&&n.push((0,Te.nonKeyComposingObjectTypeNamesEventDrivenErrorMessage)([...N])),n.length>0&&this.errors.push((0,Te.invalidEventDrivenGraphError)(n))}validateUnionMembers(t){if(t.memberByMemberTypeName.size<1){this.errors.push((0,Te.noDefinedUnionMembersError)(t.name));return}let n=[];for(let r of t.memberByMemberTypeName.keys()){let i=this.parentDefinitionDataByTypeName.get(r);i&&i.kind!==ue.Kind.OBJECT_TYPE_DEFINITION&&n.push(`"${r}", which is type "${(0,Ge.kindToTypeString)(i.kind)}"`)}n.length>0&&this.errors.push((0,Te.invalidUnionMemberTypeError)(t.name,n))}addConcreteTypeNamesForUnion(t){if(!t.types||t.types.length<1)return;let n=t.name.value;for(let r of t.types){let i=r.name.value;(0,Ge.getValueOrDefault)(this.concreteTypeNamesByAbstractTypeName,n,()=>new Set).add(i),this.internalGraph.addEdge(this.internalGraph.addOrUpdateNode(n,{isAbstract:!0}),this.internalGraph.addOrUpdateNode(i),i,!0)}}addValidKeyFieldSetConfigurations(){for(let[t,n]of this.keyFieldSetDatasByTypeName){let r=this.parentDefinitionDataByTypeName.get(t);if(!r||r.kind!==ue.Kind.OBJECT_TYPE_DEFINITION&&r.kind!==ue.Kind.INTERFACE_TYPE_DEFINITION){this.errors.push((0,Te.undefinedCompositeOutputTypeError)(t));continue}let i=(0,In.getParentTypeName)(r),a=(0,Ge.getValueOrDefault)(this.configurationDataByTypeName,i,()=>(0,Fp.newConfigurationData)(!0,i)),o=(0,Gi.validateKeyFieldSets)(this,r,n);o&&(a.keys=o)}}getValidFlattenedDirectiveArray(t,n){let r=[];for(let[i,a]of t){let o=this.directiveDefinitionDataByDirectiveName.get(i);if(!o)continue;if(!o.isRepeatable&&a.length>1){let p=(0,Ge.getValueOrDefault)(this.invalidRepeatedDirectiveNameByCoords,n,()=>new Set);p.has(i)||(p.add(i),this.errors.push((0,Te.invalidDirectiveError)(i,n,"1st",[(0,Te.invalidRepeatedDirectiveErrorMessage)(i)])));continue}if(i!==ae.KEY){r.push(...a);continue}let c=[],l=new Set;for(let p=0;pnew Set).add(B)),(0,Ge.getValueOrDefault)(a.keyFieldNamesByParentTypeName,_,()=>new Set).add(F);let Z=(0,ir.getTypeNodeNamedTypeName)(j.node.type);if(en.BASE_SCALARS.has(Z))return;let W=a.parentDefinitionDataByTypeName.get(Z);if(!W)return gn.BREAK;if(W.kind===ue.Kind.OBJECT_TYPE_DEFINITION){N=!0,c.push(W);return}if((0,bn.isKindAbstract)(W.kind))return gn.BREAK}},InlineFragment:{enter(){return gn.BREAK}},SelectionSet:{enter(){if(!N||(p+=1,N=!1,p<0||p>=c.length))return gn.BREAK},leave(){N&&(N=!1),p-=1,c.pop()}}}),!(l.size<1))for(let[y,g]of l)this.warnings.push((0,Ss.externalEntityExtensionKeyFieldWarning)(i.name,y,[...g],this.subgraphName))}}for(let n of t)this.keyFieldSetDatasByTypeName.delete(n)}addValidConditionalFieldSetConfigurations(){for(let[t,n]of this.fieldSetDataByTypeName){let r=this.parentDefinitionDataByTypeName.get(t);if(!r||r.kind!==ue.Kind.OBJECT_TYPE_DEFINITION&&r.kind!==ue.Kind.INTERFACE_TYPE_DEFINITION){this.errors.push((0,Te.undefinedCompositeOutputTypeError)(t));continue}let i=(0,In.getParentTypeName)(r),a=(0,Ge.getValueOrDefault)(this.configurationDataByTypeName,i,()=>(0,Fp.newConfigurationData)(!1,i)),o=this.validateProvidesOrRequires(r,n.provides,!0);o&&(a.provides=o);let c=this.validateProvidesOrRequires(r,n.requires,!1);c&&(a.requires=c)}}addFieldNamesToConfigurationData(t,n){let r=new Set;for(let[i,a]of t){let o=a.externalFieldDataBySubgraphName.get(this.subgraphName);if(!o||o.isUnconditionallyProvided){n.fieldNames.add(i);continue}r.add(i),this.edfsDirectiveReferences.size>0&&n.fieldNames.add(i)}r.size>0&&(n.externalFieldNames=r)}normalize(t){var a;(0,hq.upsertDirectiveSchemaAndEntityDefinitions)(this,t),(0,hq.upsertParentsAndChildren)(this,t),this.validateDirectives(this.schemaData,ae.SCHEMA);for(let[o,c]of this.parentDefinitionDataByTypeName)this.validateDirectives(c,o);this.invalidORScopesCoords.size>0&&this.errors.push((0,Te.orScopesLimitError)(en.MAX_OR_SCOPES,[...this.invalidORScopesCoords]));let n=[];for(let o of en.BASE_DIRECTIVE_DEFINITIONS)n.push(o);if(n.push(en.FIELD_SET_SCALAR_DEFINITION),this.isSubgraphVersionTwo){for(let o of en.VERSION_TWO_DIRECTIVE_DEFINITIONS)n.push(o),this.directiveDefinitionByDirectiveName.set(o.name.value,o);n.push(en.SCOPE_SCALAR_DEFINITION)}for(let o of this.edfsDirectiveReferences){let c=en.EVENT_DRIVEN_DIRECTIVE_DEFINITIONS_BY_DIRECTIVE_NAME.get(o);if(!c){this.errors.push((0,Te.invalidEdfsDirectiveName)(o));continue}n.push(c)}this.edfsDirectiveReferences.size>0&&this.referencedDirectiveNames.has(ae.SUBSCRIPTION_FILTER)&&(n.push(en.SUBSCRIPTION_FILTER_DEFINITION),n.push(en.SUBSCRIPTION_FILTER_CONDITION_DEFINITION),n.push(en.SUBSCRIPTION_FIELD_CONDITION_DEFINITION),n.push(en.SUBSCRIPTION_FILTER_VALUE_DEFINITION)),this.referencedDirectiveNames.has(ae.CONFIGURE_DESCRIPTION)&&n.push(en.CONFIGURE_DESCRIPTION_DEFINITION),this.referencedDirectiveNames.has(ae.CONFIGURE_CHILD_DESCRIPTIONS)&&n.push(en.CONFIGURE_CHILD_DESCRIPTIONS_DEFINITION);for(let o of this.customDirectiveDefinitions.values())n.push(o);this.schemaData.operationTypes.size>0&&n.push(this.getSchemaNodeByData(this.schemaData));for(let o of this.invalidConfigureDescriptionNodeDatas)o.description||this.errors.push((0,Te.configureDescriptionNoDescriptionError)((0,Ge.kindToTypeString)(o.kind),o.name));this.evaluateExternalKeyFields();for(let[o,c]of this.parentDefinitionDataByTypeName)switch(c.kind){case ue.Kind.ENUM_TYPE_DEFINITION:if(c.enumValueDataByValueName.size<1){this.errors.push((0,Te.noDefinedEnumValuesError)(o));break}n.push(this.getEnumNodeByData(c));break;case ue.Kind.INPUT_OBJECT_TYPE_DEFINITION:if(c.inputValueDataByValueName.size<1){this.errors.push((0,Te.noInputValueDefinitionsError)(o));break}n.push(this.getInputObjectNodeByData(c));break;case ue.Kind.INTERFACE_TYPE_DEFINITION:case ue.Kind.OBJECT_TYPE_DEFINITION:let l=this.entityDataByTypeName.has(o),p=this.operationTypeNodeByTypeName.get(o),N=c.kind===ue.Kind.OBJECT_TYPE_DEFINITION;if(this.isSubgraphVersionTwo&&c.extensionType===$a.ExtensionType.EXTENDS&&(c.extensionType=$a.ExtensionType.NONE),p&&(c.fieldDataByFieldName.delete(ae.SERVICE_FIELD),c.fieldDataByFieldName.delete(ae.ENTITIES_FIELD)),(0,In.removeInheritableDirectivesFromObjectParent)(c),this.parentsWithChildArguments.has(o)||!N){let B=[];for(let[j,J]of c.fieldDataByFieldName)!N&&((a=J.externalFieldDataBySubgraphName.get(this.subgraphName))!=null&&a.isDefinedExternal)&&B.push(j),this.validateArguments(J,`${o}.${j}`);B.length>0&&(this.isSubgraphVersionTwo?this.errors.push((0,Te.externalInterfaceFieldsError)(o,B)):this.warnings.push((0,Ss.externalInterfaceFieldsWarning)(this.subgraphName,o,B)))}let y=(0,In.getParentTypeName)(c),g=(0,Ge.getValueOrDefault)(this.configurationDataByTypeName,y,()=>(0,Fp.newConfigurationData)(l,o)),_=this.entityInterfaceDataByTypeName.get(o);if(_){_.fieldDatas=(0,ar.fieldDatasToSimpleFieldDatas)(c.fieldDataByFieldName.values());let B=this.concreteTypeNamesByAbstractTypeName.get(o);B&&(0,Ge.addIterableValuesToSet)(B,_.concreteTypeNames),g.isInterfaceObject=_.isInterfaceObject,g.entityInterfaceConcreteTypeNames=_.concreteTypeNames}let F=this.eventsConfigurations.get(y);F&&(g.events=F),this.addFieldNamesToConfigurationData(c.fieldDataByFieldName,g),this.validateInterfaceImplementations(c),n.push(this.getCompositeOutputNodeByData(c)),c.fieldDataByFieldName.size<1&&!(0,Gi.isNodeQuery)(o,p)&&this.errors.push((0,Te.noFieldDefinitionsError)((0,Ge.kindToTypeString)(c.kind),o));break;case ue.Kind.SCALAR_TYPE_DEFINITION:if(c.extensionType===$a.ExtensionType.REAL){this.errors.push((0,Te.noBaseScalarDefinitionError)(o));break}n.push(this.getScalarNodeByData(c));break;case ue.Kind.UNION_TYPE_DEFINITION:n.push(this.getUnionNodeByData(c)),this.validateUnionMembers(c);break;default:throw(0,Te.unexpectedKindFatalError)(o)}this.addValidConditionalFieldSetConfigurations(),this.addValidKeyFieldSetConfigurations();for(let o of Object.values(ue.OperationTypeNode)){let c=this.schemaData.operationTypes.get(o),l=(0,Ge.getOrThrowError)(bn.operationTypeNodeToDefaultType,o,ae.OPERATION_TO_DEFAULT),p=c?(0,ir.getTypeNodeNamedTypeName)(c.type):l;if(en.BASE_SCALARS.has(p)&&this.referencedTypeNames.add(p),p!==l&&this.parentDefinitionDataByTypeName.has(l)){this.errors.push((0,Te.invalidRootTypeDefinitionError)(o,p,l));continue}let N=this.parentDefinitionDataByTypeName.get(p);if(c){if(!N)continue;this.operationTypeNodeByTypeName.set(p,o)}if(!N)continue;let y=this.configurationDataByTypeName.get(l);y&&(y.isRootNode=!0,y.typeName=l),N.kind!==ue.Kind.OBJECT_TYPE_DEFINITION&&this.errors.push((0,Te.operationDefinitionError)(p,o,N.kind))}for(let o of this.referencedTypeNames){let c=this.parentDefinitionDataByTypeName.get(o);if(c){if(c.kind!==ue.Kind.INTERFACE_TYPE_DEFINITION)continue;let l=this.concreteTypeNamesByAbstractTypeName.get(o);(!l||l.size<0)&&this.warnings.push((0,Ss.unimplementedInterfaceOutputTypeWarning)(this.subgraphName,o));continue}this.entityDataByTypeName.has(o)||this.errors.push((0,Te.undefinedTypeError)(o))}let r=new Map;for(let o of this.directiveDefinitionByDirectiveName.values()){let c=(0,bn.extractExecutableDirectiveLocations)(o.locations,new Set);c.size<1||this.addPersistedDirectiveDefinitionDataByNode(r,o,c)}this.isSubgraphEventDrivenGraph=this.edfsDirectiveReferences.size>0,this.isSubgraphEventDrivenGraph&&this.validateEventDrivenSubgraph(n);for(let o of this.unvalidatedExternalFieldCoords)this.isSubgraphVersionTwo?this.errors.push((0,Te.invalidExternalDirectiveError)(o)):this.warnings.push((0,Ss.invalidExternalFieldWarning)(o,this.subgraphName));if(this.errors.length>0)return{success:!1,errors:this.errors,warnings:this.warnings};let i={kind:ue.Kind.DOCUMENT,definitions:n};return{authorizationDataByParentTypeName:this.authorizationDataByParentTypeName,concreteTypeNamesByAbstractTypeName:this.concreteTypeNamesByAbstractTypeName,conditionalFieldDataByCoordinates:this.conditionalFieldDataByCoords,configurationDataByTypeName:this.configurationDataByTypeName,entityDataByTypeName:this.entityDataByTypeName,entityInterfaces:this.entityInterfaceDataByTypeName,fieldCoordsByNamedTypeName:this.fieldCoordsByNamedTypeName,isEventDrivenGraph:this.isSubgraphEventDrivenGraph,isVersionTwo:this.isSubgraphVersionTwo,keyFieldNamesByParentTypeName:this.keyFieldNamesByParentTypeName,keyFieldSetsByEntityTypeNameByKeyFieldCoords:this.keyFieldSetsByEntityTypeNameByFieldCoords,operationTypes:this.operationTypeNodeByTypeName,originalTypeNameByRenamedTypeName:this.originalTypeNameByRenamedTypeName,overridesByTargetSubgraphName:this.overridesByTargetSubgraphName,parentDefinitionDataByTypeName:this.parentDefinitionDataByTypeName,persistedDirectiveDefinitionDataByDirectiveName:r,subgraphAST:i,subgraphString:(0,ue.print)(i),schema:(0,Rce.buildASTSchema)(i,{assumeValid:!0,assumeValidSDL:!0}),success:!0,warnings:this.warnings}}};ic.NormalizationFactory=Pp;function Lce(e){let t=new Map,n=new Map,r=new Map,i=new Map,a=new Map,o=new Map,c=new Set,l=new Map,p=new Set,N=new Set,y=[],g=new Set,_=new Map,F=[],B=[];for(let Z of e)Z.name&&(0,Fce.recordSubgraphName)(Z.name,p,N);let j=new wO.Graph;for(let Z=0;Z0&&F.push(...le.warnings),!le.success){B.push((0,Te.subgraphValidationError)(Ne,le.errors));continue}if(!le){B.push((0,Te.subgraphValidationError)(Ne,[Te.subgraphValidationFailureError]));continue}l.set(Ne,le.parentDefinitionDataByTypeName);for(let we of le.authorizationDataByParentTypeName.values())(0,ar.upsertAuthorizationData)(t,we,g);for(let[we,qe]of le.fieldCoordsByNamedTypeName)(0,Ge.addIterableValuesToSet)(qe,(0,Ge.getValueOrDefault)(_,we,()=>new Set));for(let[we,qe]of le.concreteTypeNamesByAbstractTypeName){let et=n.get(we);if(!et){n.set(we,new Set(qe));continue}(0,Ge.addIterableValuesToSet)(qe,et)}for(let[we,qe]of le.entityDataByTypeName){let et=qe.keyFieldSetDatasBySubgraphName.get(Ne);et&&(0,ar.upsertEntityData)({entityDataByTypeName:r,keyFieldSetDataByFieldSet:et,typeName:we,subgraphName:Ne})}if(W.name&&i.set(Ne,{conditionalFieldDataByCoordinates:le.conditionalFieldDataByCoordinates,configurationDataByTypeName:le.configurationDataByTypeName,definitions:le.subgraphAST,entityInterfaces:le.entityInterfaces,isVersionTwo:le.isVersionTwo,keyFieldNamesByParentTypeName:le.keyFieldNamesByParentTypeName,name:Ne,operationTypes:le.operationTypes,overriddenFieldNamesByParentTypeName:new Map,parentDefinitionDataByTypeName:le.parentDefinitionDataByTypeName,persistedDirectiveDefinitionDataByDirectiveName:le.persistedDirectiveDefinitionDataByDirectiveName,schema:le.schema,url:W.url}),!(le.overridesByTargetSubgraphName.size<1))for(let[we,qe]of le.overridesByTargetSubgraphName){let et=p.has(we);for(let[X,ve]of qe){let gt=le.originalTypeNameByRenamedTypeName.get(X)||X;if(!et)F.push((0,Ss.invalidOverrideTargetSubgraphNameWarning)(we,gt,[...ve],W.name));else{let Ht=(0,Ge.getValueOrDefault)(a,we,()=>new Map),zt=(0,Ge.getValueOrDefault)(Ht,X,()=>new Set(ve));(0,Ge.addIterableValuesToSet)(ve,zt)}for(let Ht of ve){let zt=`${gt}.${Ht}`,Dn=o.get(zt);if(!Dn){o.set(zt,[Ne]);continue}Dn.push(Ne),c.add(zt)}}}}let J=[];if(g.size>0&&J.push((0,Te.orScopesLimitError)(en.MAX_OR_SCOPES,[...g])),(y.length>0||N.size>0)&&J.push((0,Te.invalidSubgraphNamesError)([...N],y)),c.size>0){let Z=[];for(let W of c){let Ne=(0,Ge.getOrThrowError)(o,W,"overrideSourceSubgraphNamesByFieldPath");Z.push((0,Te.duplicateOverriddenFieldErrorMessage)(W,Ne))}J.push((0,Te.duplicateOverriddenFieldsError)(Z))}if(J.push(...B),J.length>0)return{errors:J,success:!1,warnings:F};for(let[Z,W]of a){let Ne=(0,Ge.getOrThrowError)(i,Z,"internalSubgraphBySubgraphName");Ne.overriddenFieldNamesByParentTypeName=W;for(let[le,we]of W){let qe=Ne.configurationDataByTypeName.get(le);qe&&((0,ar.subtractSet)(we,qe.fieldNames),qe.fieldNames.size<1&&Ne.configurationDataByTypeName.delete(le))}}return{authorizationDataByParentTypeName:t,concreteTypeNamesByAbstractTypeName:n,entityDataByTypeName:r,fieldCoordsByNamedTypeName:_,internalSubgraphBySubgraphName:i,internalGraph:j,success:!0,warnings:F}}});var ch=P(oc=>{"use strict";f();T();m();Object.defineProperty(oc,"__esModule",{value:!0});oc.DivergentType=void 0;oc.getLeastRestrictiveMergedTypeNode=Bce;oc.getMostRestrictiveMergedTypeNode=Uce;oc.renameNamedTypeName=kce;var ac=Ae(),Iq=sa(),Cce=Yo(),yq=Jr(),gq=tl(),sc;(function(e){e[e.NONE=0]="NONE",e[e.CURRENT=1]="CURRENT",e[e.OTHER=2]="OTHER"})(sc||(oc.DivergentType=sc={}));function _q(e,t,n,r,i){t=(0,Cce.getMutableTypeNode)(t,n,i);let a={kind:e.kind},o=sc.NONE,c=a;for(let l=0;l{"use strict";f();T();m();Object.defineProperty(BO,"__esModule",{value:!0});BO.renameRootTypes=qce;var Mce=Ae(),CO=Jr(),xce=ch(),iu=lr(),uc=Hr();function qce(e,t){let n,r=!1,i;(0,Mce.visit)(t.definitions,{FieldDefinition:{enter(a){let o=a.name.value;if(r&&(o===iu.SERVICE_FIELD||o===iu.ENTITIES_FIELD))return n.fieldDataByFieldName.delete(o),!1;let c=n.name,l=(0,uc.getOrThrowError)(n.fieldDataByFieldName,o,`${c}.fieldDataByFieldName`),p=t.operationTypes.get(l.namedTypeName);if(p){let N=(0,uc.getOrThrowError)(CO.operationTypeNodeToDefaultType,p,iu.OPERATION_TO_DEFAULT);l.namedTypeName!==N&&(0,xce.renameNamedTypeName)(l,N,e.errors)}return i!=null&&i.has(o)&&l.isShareableBySubgraphName.delete(t.name),!1}},InterfaceTypeDefinition:{enter(a){let o=a.name.value;if(!e.entityInterfaceFederationDataByTypeName.get(o))return!1;n=(0,uc.getOrThrowError)(t.parentDefinitionDataByTypeName,o,iu.PARENT_DEFINITION_DATA)},leave(){n=void 0}},ObjectTypeDefinition:{enter(a){let o=a.name.value,c=t.operationTypes.get(o),l=c?(0,uc.getOrThrowError)(CO.operationTypeNodeToDefaultType,c,iu.OPERATION_TO_DEFAULT):o;n=(0,uc.getOrThrowError)(t.parentDefinitionDataByTypeName,o,iu.PARENT_DEFINITION_DATA),r=n.isRootType,!e.entityInterfaceFederationDataByTypeName.get(o)&&(e.addValidPrimaryKeyTargetsToEntityData(o),i=t.overriddenFieldNamesByParentTypeName.get(l),o!==l&&(n.name=l,t.parentDefinitionDataByTypeName.set(l,n),t.parentDefinitionDataByTypeName.delete(o)))},leave(){n=void 0,r=!1,i=void 0}},ObjectTypeExtension:{enter(a){let o=a.name.value,c=t.operationTypes.get(o),l=c?(0,uc.getOrThrowError)(CO.operationTypeNodeToDefaultType,c,iu.OPERATION_TO_DEFAULT):o;n=(0,uc.getOrThrowError)(t.parentDefinitionDataByTypeName,o,iu.PARENT_DEFINITION_DATA),r=n.isRootType,e.addValidPrimaryKeyTargetsToEntityData(o),i=t.overriddenFieldNamesByParentTypeName.get(o),o!==l&&(n.name=l,t.parentDefinitionDataByTypeName.set(l,n),t.parentDefinitionDataByTypeName.delete(o))},leave(){n=void 0,r=!1,i=void 0}}})}});var vq=P((Pl,wp)=>{"use strict";f();T();m();(function(){var e,t="4.17.21",n=200,r="Unsupported core-js use. Try https://npms.io/search?q=ponyfill.",i="Expected a function",a="Invalid `variable` option passed into `_.template`",o="__lodash_hash_undefined__",c=500,l="__lodash_placeholder__",p=1,N=2,y=4,g=1,_=2,F=1,B=2,j=4,J=8,Z=16,W=32,Ne=64,le=128,we=256,qe=512,et=30,X="...",ve=800,gt=16,Ht=1,zt=2,Dn=3,qt=1/0,cn=9007199254740991,Rr=17976931348623157e292,Fr=NaN,kn=4294967295,$t=kn-1,An=kn>>>1,ie=[["ary",le],["bind",F],["bindKey",B],["curry",J],["curryRight",Z],["flip",qe],["partial",W],["partialRight",Ne],["rearg",we]],be="[object Arguments]",_e="[object Array]",Le="[object AsyncFunction]",_t="[object Boolean]",Y="[object Date]",re="[object DOMException]",Me="[object Error]",Qe="[object Function]",Lt="[object GeneratorFunction]",tt="[object Map]",Dt="[object Number]",za="[object Null]",qr="[object Object]",Wa="[object Promise]",yc="[object Proxy]",ya="[object RegExp]",mr="[object Set]",ni="[object String]",kt="[object Symbol]",Tr="[object Undefined]",uu="[object WeakMap]",Ia="[object WeakSet]",cu="[object ArrayBuffer]",A="[object DataView]",E="[object Float32Array]",I="[object Float64Array]",C="[object Int8Array]",G="[object Int16Array]",ee="[object Int32Array]",ce="[object Uint8Array]",dt="[object Uint8ClampedArray]",ln="[object Uint16Array]",tn="[object Uint32Array]",Tn=/\b__p \+= '';/g,Wt=/\b(__p \+=) '' \+/g,JV=/(__e\(.*?\)|\b__t\)) \+\n'';/g,bb=/&(?:amp|lt|gt|quot|#39);/g,Db=/[&<>"']/g,HV=RegExp(bb.source),zV=RegExp(Db.source),WV=/<%-([\s\S]+?)%>/g,XV=/<%([\s\S]+?)%>/g,Ab=/<%=([\s\S]+?)%>/g,ZV=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,ej=/^\w*$/,tj=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,Kh=/[\\^$.*+?()[\]{}|]/g,nj=RegExp(Kh.source),Gh=/^\s+/,rj=/\s/,ij=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/,aj=/\{\n\/\* \[wrapped with (.+)\] \*/,sj=/,? & /,oj=/[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g,uj=/[()=,{}\[\]\/\s]/,cj=/\\(\\)?/g,lj=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,Rb=/\w*$/,dj=/^[-+]0x[0-9a-f]+$/i,pj=/^0b[01]+$/i,fj=/^\[object .+?Constructor\]$/,mj=/^0o[0-7]+$/i,Tj=/^(?:0|[1-9]\d*)$/,Nj=/[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g,Xp=/($^)/,hj=/['\n\r\u2028\u2029\\]/g,Zp="\\ud800-\\udfff",Ej="\\u0300-\\u036f",yj="\\ufe20-\\ufe2f",Ij="\\u20d0-\\u20ff",Fb=Ej+yj+Ij,Pb="\\u2700-\\u27bf",wb="a-z\\xdf-\\xf6\\xf8-\\xff",gj="\\xac\\xb1\\xd7\\xf7",_j="\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf",vj="\\u2000-\\u206f",Sj=" \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000",Lb="A-Z\\xc0-\\xd6\\xd8-\\xde",Cb="\\ufe0e\\ufe0f",Bb=gj+_j+vj+Sj,$h="['\u2019]",Oj="["+Zp+"]",Ub="["+Bb+"]",ef="["+Fb+"]",kb="\\d+",bj="["+Pb+"]",Mb="["+wb+"]",xb="[^"+Zp+Bb+kb+Pb+wb+Lb+"]",Qh="\\ud83c[\\udffb-\\udfff]",Dj="(?:"+ef+"|"+Qh+")",qb="[^"+Zp+"]",Yh="(?:\\ud83c[\\udde6-\\uddff]){2}",Jh="[\\ud800-\\udbff][\\udc00-\\udfff]",Ic="["+Lb+"]",Vb="\\u200d",jb="(?:"+Mb+"|"+xb+")",Aj="(?:"+Ic+"|"+xb+")",Kb="(?:"+$h+"(?:d|ll|m|re|s|t|ve))?",Gb="(?:"+$h+"(?:D|LL|M|RE|S|T|VE))?",$b=Dj+"?",Qb="["+Cb+"]?",Rj="(?:"+Vb+"(?:"+[qb,Yh,Jh].join("|")+")"+Qb+$b+")*",Fj="\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])",Pj="\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])",Yb=Qb+$b+Rj,wj="(?:"+[bj,Yh,Jh].join("|")+")"+Yb,Lj="(?:"+[qb+ef+"?",ef,Yh,Jh,Oj].join("|")+")",Cj=RegExp($h,"g"),Bj=RegExp(ef,"g"),Hh=RegExp(Qh+"(?="+Qh+")|"+Lj+Yb,"g"),Uj=RegExp([Ic+"?"+Mb+"+"+Kb+"(?="+[Ub,Ic,"$"].join("|")+")",Aj+"+"+Gb+"(?="+[Ub,Ic+jb,"$"].join("|")+")",Ic+"?"+jb+"+"+Kb,Ic+"+"+Gb,Pj,Fj,kb,wj].join("|"),"g"),kj=RegExp("["+Vb+Zp+Fb+Cb+"]"),Mj=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,xj=["Array","Buffer","DataView","Date","Error","Float32Array","Float64Array","Function","Int8Array","Int16Array","Int32Array","Map","Math","Object","Promise","RegExp","Set","String","Symbol","TypeError","Uint8Array","Uint8ClampedArray","Uint16Array","Uint32Array","WeakMap","_","clearTimeout","isFinite","parseInt","setTimeout"],qj=-1,pn={};pn[E]=pn[I]=pn[C]=pn[G]=pn[ee]=pn[ce]=pn[dt]=pn[ln]=pn[tn]=!0,pn[be]=pn[_e]=pn[cu]=pn[_t]=pn[A]=pn[Y]=pn[Me]=pn[Qe]=pn[tt]=pn[Dt]=pn[qr]=pn[ya]=pn[mr]=pn[ni]=pn[uu]=!1;var dn={};dn[be]=dn[_e]=dn[cu]=dn[A]=dn[_t]=dn[Y]=dn[E]=dn[I]=dn[C]=dn[G]=dn[ee]=dn[tt]=dn[Dt]=dn[qr]=dn[ya]=dn[mr]=dn[ni]=dn[kt]=dn[ce]=dn[dt]=dn[ln]=dn[tn]=!0,dn[Me]=dn[Qe]=dn[uu]=!1;var Vj={\u00C0:"A",\u00C1:"A",\u00C2:"A",\u00C3:"A",\u00C4:"A",\u00C5:"A",\u00E0:"a",\u00E1:"a",\u00E2:"a",\u00E3:"a",\u00E4:"a",\u00E5:"a",\u00C7:"C",\u00E7:"c",\u00D0:"D",\u00F0:"d",\u00C8:"E",\u00C9:"E",\u00CA:"E",\u00CB:"E",\u00E8:"e",\u00E9:"e",\u00EA:"e",\u00EB:"e",\u00CC:"I",\u00CD:"I",\u00CE:"I",\u00CF:"I",\u00EC:"i",\u00ED:"i",\u00EE:"i",\u00EF:"i",\u00D1:"N",\u00F1:"n",\u00D2:"O",\u00D3:"O",\u00D4:"O",\u00D5:"O",\u00D6:"O",\u00D8:"O",\u00F2:"o",\u00F3:"o",\u00F4:"o",\u00F5:"o",\u00F6:"o",\u00F8:"o",\u00D9:"U",\u00DA:"U",\u00DB:"U",\u00DC:"U",\u00F9:"u",\u00FA:"u",\u00FB:"u",\u00FC:"u",\u00DD:"Y",\u00FD:"y",\u00FF:"y",\u00C6:"Ae",\u00E6:"ae",\u00DE:"Th",\u00FE:"th",\u00DF:"ss",\u0100:"A",\u0102:"A",\u0104:"A",\u0101:"a",\u0103:"a",\u0105:"a",\u0106:"C",\u0108:"C",\u010A:"C",\u010C:"C",\u0107:"c",\u0109:"c",\u010B:"c",\u010D:"c",\u010E:"D",\u0110:"D",\u010F:"d",\u0111:"d",\u0112:"E",\u0114:"E",\u0116:"E",\u0118:"E",\u011A:"E",\u0113:"e",\u0115:"e",\u0117:"e",\u0119:"e",\u011B:"e",\u011C:"G",\u011E:"G",\u0120:"G",\u0122:"G",\u011D:"g",\u011F:"g",\u0121:"g",\u0123:"g",\u0124:"H",\u0126:"H",\u0125:"h",\u0127:"h",\u0128:"I",\u012A:"I",\u012C:"I",\u012E:"I",\u0130:"I",\u0129:"i",\u012B:"i",\u012D:"i",\u012F:"i",\u0131:"i",\u0134:"J",\u0135:"j",\u0136:"K",\u0137:"k",\u0138:"k",\u0139:"L",\u013B:"L",\u013D:"L",\u013F:"L",\u0141:"L",\u013A:"l",\u013C:"l",\u013E:"l",\u0140:"l",\u0142:"l",\u0143:"N",\u0145:"N",\u0147:"N",\u014A:"N",\u0144:"n",\u0146:"n",\u0148:"n",\u014B:"n",\u014C:"O",\u014E:"O",\u0150:"O",\u014D:"o",\u014F:"o",\u0151:"o",\u0154:"R",\u0156:"R",\u0158:"R",\u0155:"r",\u0157:"r",\u0159:"r",\u015A:"S",\u015C:"S",\u015E:"S",\u0160:"S",\u015B:"s",\u015D:"s",\u015F:"s",\u0161:"s",\u0162:"T",\u0164:"T",\u0166:"T",\u0163:"t",\u0165:"t",\u0167:"t",\u0168:"U",\u016A:"U",\u016C:"U",\u016E:"U",\u0170:"U",\u0172:"U",\u0169:"u",\u016B:"u",\u016D:"u",\u016F:"u",\u0171:"u",\u0173:"u",\u0174:"W",\u0175:"w",\u0176:"Y",\u0177:"y",\u0178:"Y",\u0179:"Z",\u017B:"Z",\u017D:"Z",\u017A:"z",\u017C:"z",\u017E:"z",\u0132:"IJ",\u0133:"ij",\u0152:"Oe",\u0153:"oe",\u0149:"'n",\u017F:"s"},jj={"&":"&","<":"<",">":">",'"':""","'":"'"},Kj={"&":"&","<":"<",">":">",""":'"',"'":"'"},Gj={"\\":"\\","'":"'","\n":"n","\r":"r","\u2028":"u2028","\u2029":"u2029"},$j=parseFloat,Qj=parseInt,Jb=typeof global=="object"&&global&&global.Object===Object&&global,Yj=typeof self=="object"&&self&&self.Object===Object&&self,sr=Jb||Yj||Function("return this")(),zh=typeof Pl=="object"&&Pl&&!Pl.nodeType&&Pl,lu=zh&&typeof wp=="object"&&wp&&!wp.nodeType&&wp,Hb=lu&&lu.exports===zh,Wh=Hb&&Jb.process,Ti=function(){try{var $=lu&&lu.require&&lu.require("util").types;return $||Wh&&Wh.binding&&Wh.binding("util")}catch(oe){}}(),zb=Ti&&Ti.isArrayBuffer,Wb=Ti&&Ti.isDate,Xb=Ti&&Ti.isMap,Zb=Ti&&Ti.isRegExp,eD=Ti&&Ti.isSet,tD=Ti&&Ti.isTypedArray;function ri($,oe,te){switch(te.length){case 0:return $.call(oe);case 1:return $.call(oe,te[0]);case 2:return $.call(oe,te[0],te[1]);case 3:return $.call(oe,te[0],te[1],te[2])}return $.apply(oe,te)}function Jj($,oe,te,Ce){for(var st=-1,Vt=$==null?0:$.length;++st-1}function Xh($,oe,te){for(var Ce=-1,st=$==null?0:$.length;++Ce-1;);return te}function cD($,oe){for(var te=$.length;te--&&gc(oe,$[te],0)>-1;);return te}function r1($,oe){for(var te=$.length,Ce=0;te--;)$[te]===oe&&++Ce;return Ce}var i1=nE(Vj),a1=nE(jj);function s1($){return"\\"+Gj[$]}function o1($,oe){return $==null?e:$[oe]}function _c($){return kj.test($)}function u1($){return Mj.test($)}function c1($){for(var oe,te=[];!(oe=$.next()).done;)te.push(oe.value);return te}function sE($){var oe=-1,te=Array($.size);return $.forEach(function(Ce,st){te[++oe]=[st,Ce]}),te}function lD($,oe){return function(te){return $(oe(te))}}function Do($,oe){for(var te=-1,Ce=$.length,st=0,Vt=[];++te-1}function z1(s,u){var d=this.__data__,h=yf(d,s);return h<0?(++this.size,d.push([s,u])):d[h][1]=u,this}Xa.prototype.clear=Q1,Xa.prototype.delete=Y1,Xa.prototype.get=J1,Xa.prototype.has=H1,Xa.prototype.set=z1;function Za(s){var u=-1,d=s==null?0:s.length;for(this.clear();++u=u?s:u)),s}function yi(s,u,d,h,S,L){var U,V=u&p,H=u&N,de=u&y;if(d&&(U=S?d(s,h,S,L):d(s)),U!==e)return U;if(!_n(s))return s;var fe=ct(s);if(fe){if(U=eG(s),!V)return Vr(s,U)}else{var he=Er(s),De=he==Qe||he==Lt;if(Co(s))return QD(s,V);if(he==qr||he==be||De&&!S){if(U=H||De?{}:d0(s),!V)return H?KK(s,pK(U,s)):jK(s,_D(U,s))}else{if(!dn[he])return S?s:{};U=tG(s,he,V)}}L||(L=new Ji);var Ve=L.get(s);if(Ve)return Ve;L.set(s,U),q0(s)?s.forEach(function(We){U.add(yi(We,u,d,We,s,L))}):M0(s)&&s.forEach(function(We,vt){U.set(vt,yi(We,u,d,vt,s,L))});var ze=de?H?wE:PE:H?Kr:or,ht=fe?e:ze(s);return Ni(ht||s,function(We,vt){ht&&(vt=We,We=s[vt]),Yl(U,vt,yi(We,u,d,vt,s,L))}),U}function fK(s){var u=or(s);return function(d){return vD(d,s,u)}}function vD(s,u,d){var h=d.length;if(s==null)return!h;for(s=on(s);h--;){var S=d[h],L=u[S],U=s[S];if(U===e&&!(S in s)||!L(U))return!1}return!0}function SD(s,u,d){if(typeof s!="function")throw new hi(i);return ed(function(){s.apply(e,d)},u)}function Jl(s,u,d,h){var S=-1,L=tf,U=!0,V=s.length,H=[],de=u.length;if(!V)return H;d&&(u=Nn(u,ii(d))),h?(L=Xh,U=!1):u.length>=n&&(L=Vl,U=!1,u=new fu(u));e:for(;++SS?0:S+d),h=h===e||h>S?S:ft(h),h<0&&(h+=S),h=d>h?0:j0(h);d0&&d(V)?u>1?Nr(V,u-1,d,h,S):bo(S,V):h||(S[S.length]=V)}return S}var fE=XD(),DD=XD(!0);function ga(s,u){return s&&fE(s,u,or)}function mE(s,u){return s&&DD(s,u,or)}function gf(s,u){return Oo(u,function(d){return is(s[d])})}function Tu(s,u){u=wo(u,s);for(var d=0,h=u.length;s!=null&&du}function NK(s,u){return s!=null&&Xt.call(s,u)}function hK(s,u){return s!=null&&u in on(s)}function EK(s,u,d){return s>=hr(u,d)&&s=120&&fe.length>=120)?new fu(U&&fe):e}fe=s[0];var he=-1,De=V[0];e:for(;++he-1;)V!==s&&pf.call(V,H,1),pf.call(s,H,1);return s}function MD(s,u){for(var d=s?u.length:0,h=d-1;d--;){var S=u[d];if(d==h||S!==L){var L=S;rs(S)?pf.call(s,S,1):SE(s,S)}}return s}function gE(s,u){return s+Tf(ED()*(u-s+1))}function PK(s,u,d,h){for(var S=-1,L=Hn(mf((u-s)/(d||1)),0),U=te(L);L--;)U[h?L:++S]=s,s+=d;return U}function _E(s,u){var d="";if(!s||u<1||u>cn)return d;do u%2&&(d+=s),u=Tf(u/2),u&&(s+=s);while(u);return d}function yt(s,u){return xE(m0(s,u,Gr),s+"")}function wK(s){return gD(wc(s))}function LK(s,u){var d=wc(s);return wf(d,mu(u,0,d.length))}function Wl(s,u,d,h){if(!_n(s))return s;u=wo(u,s);for(var S=-1,L=u.length,U=L-1,V=s;V!=null&&++SS?0:S+u),d=d>S?S:d,d<0&&(d+=S),S=u>d?0:d-u>>>0,u>>>=0;for(var L=te(S);++h>>1,U=s[L];U!==null&&!si(U)&&(d?U<=u:U=n){var de=u?null:YK(s);if(de)return rf(de);U=!1,S=Vl,H=new fu}else H=u?[]:V;e:for(;++h=h?s:Ii(s,u,d)}var $D=S1||function(s){return sr.clearTimeout(s)};function QD(s,u){if(u)return s.slice();var d=s.length,h=fD?fD(d):new s.constructor(d);return s.copy(h),h}function AE(s){var u=new s.constructor(s.byteLength);return new lf(u).set(new lf(s)),u}function MK(s,u){var d=u?AE(s.buffer):s.buffer;return new s.constructor(d,s.byteOffset,s.byteLength)}function xK(s){var u=new s.constructor(s.source,Rb.exec(s));return u.lastIndex=s.lastIndex,u}function qK(s){return Ql?on(Ql.call(s)):{}}function YD(s,u){var d=u?AE(s.buffer):s.buffer;return new s.constructor(d,s.byteOffset,s.length)}function JD(s,u){if(s!==u){var d=s!==e,h=s===null,S=s===s,L=si(s),U=u!==e,V=u===null,H=u===u,de=si(u);if(!V&&!de&&!L&&s>u||L&&U&&H&&!V&&!de||h&&U&&H||!d&&H||!S)return 1;if(!h&&!L&&!de&&s=V)return H;var de=d[h];return H*(de=="desc"?-1:1)}}return s.index-u.index}function HD(s,u,d,h){for(var S=-1,L=s.length,U=d.length,V=-1,H=u.length,de=Hn(L-U,0),fe=te(H+de),he=!h;++V1?d[S-1]:e,U=S>2?d[2]:e;for(L=s.length>3&&typeof L=="function"?(S--,L):e,U&&wr(d[0],d[1],U)&&(L=S<3?e:L,S=1),u=on(u);++h-1?S[L?u[U]:U]:e}}function t0(s){return ns(function(u){var d=u.length,h=d,S=Ei.prototype.thru;for(s&&u.reverse();h--;){var L=u[h];if(typeof L!="function")throw new hi(i);if(S&&!U&&Ff(L)=="wrapper")var U=new Ei([],!0)}for(h=U?h:d;++h1&&At.reverse(),fe&&HV))return!1;var de=L.get(s),fe=L.get(u);if(de&&fe)return de==u&&fe==s;var he=-1,De=!0,Ve=d&_?new fu:e;for(L.set(s,u),L.set(u,s);++he1?"& ":"")+u[h],u=u.join(d>2?", ":" "),s.replace(ij,`{ +`+ac.LITERAL_SPACE.repeat(t+3)+`... +`+ac.LITERAL_SPACE.repeat(t+2)+`} +`}function Nq({entityAncestorData:e,rootFieldData:t,unresolvableFieldData:n}){let{fieldName:r,typeName:i,subgraphNames:a}=n,o=[t.message,`The field "${i}.${r}" is defined in the following subgraph`+(a.size>1?"s":"")+`: "${[...a].join(ac.QUOTATION_JOIN)}".`];if(e){let c=!1;for(let[l,p]of e.fieldSetsByTargetSubgraphName)if(a.has(l)){c=!0;for(let T of p)o.push(`The entity ancestor "${e.typeName}" in subgraph "${e.subgraphName}" does not satisfy the key field set "${T}" to access subgraph "${l}".`)}c||o.push(`The entity ancestor "${e.typeName}" in subgraph "${e.subgraphName}" has no accessible target entities (resolvable @key directives) in the subgraphs where "${i}.${r}" is defined.`),o.push(`The type "${i}" is not a descendent of any other entity ancestors that can provide a shared route to access "${r}".`)}else t.subgraphNames.size>1&&o.push(`None of the subgraphs that share the same root type field "${t.coordinate}" can provide a route to access "${r}".`),o.push(`The type "${i}" is not a descendent of an entity ancestor that can provide a shared route to access "${r}".`);return i!==(e==null?void 0:e.typeName)&&o.push(`The type "${i}" has no accessible target entities (resolvable @key directives) in any other subgraph, so accessing other subgraphs is not possible.`),o}function Tq(e){let t=e.split(new RegExp("(?<=\\w)\\.")),n="",r="";for(let i=0;i{"use strict";f();N();m();Object.defineProperty(sE,"__esModule",{value:!0});sE.Graph=void 0;var Fl=DO(),Pl=AO(),hq=lr(),kr=Hr(),RO=class{constructor(){v(this,"edgeId",-1);v(this,"entityDataNodes",new Map);v(this,"entityNodeNamesBySharedFieldPath",new Map);v(this,"nodeByNodeName",new Map);v(this,"nodesByTypeName",new Map);v(this,"rootNodeByRootTypeName",new Map);v(this,"subgraphName",hq.NOT_APPLICABLE);v(this,"resolvableFieldNamesByRelativeFieldPathByEntityNodeName",new Map);v(this,"nodeResolutionDataByFieldPath",new Map);v(this,"unresolvableFieldPaths",new Set);v(this,"failureResultByEntityNodeName",new Map);v(this,"walkerIndex",-1)}getRootNode(t){return(0,kr.getValueOrDefault)(this.rootNodeByRootTypeName,t,()=>new Fl.RootNode(t))}addOrUpdateNode(t,n){let r=`${this.subgraphName}.${t}`,i=this.nodeByNodeName.get(r);if(i)return i.isAbstract||(i.isAbstract=!!(n!=null&&n.isAbstract)),!i.isLeaf&&(n!=null&&n.isLeaf)&&(i.isLeaf=!0),i;let a=new Fl.GraphNode(this.subgraphName,t,n);return this.nodeByNodeName.set(r,a),(0,kr.getValueOrDefault)(this.nodesByTypeName,t,()=>[]).push(a),a}addEdge(t,n,r,i=!1){if(t.isRootNode){let c=new Fl.Edge(this.getNextEdgeId(),n,r);return(0,kr.getValueOrDefault)(t.headToShareableTailEdges,r,()=>[]).push(c),c}let a=t,o=new Fl.Edge(this.getNextEdgeId(),n,i?n.typeName:r,i);return a.headToTailEdges.set(r,o),o}addEntityDataNode(t){let n=this.entityDataNodes.get(t);if(n)return n;let r=new Fl.EntityDataNode(t);return this.entityDataNodes.set(t,r),r}getNextEdgeId(){return this.edgeId+=1}setNodeInaccessible(t){let n=this.nodesByTypeName.get(t);if(n)for(let r of n)r.isInaccessible=!0}initializeNode(t,n){let r=this.entityDataNodes.get(t);if(hq.ROOT_TYPE_NAMES.has(t)){let a=this.getRootNode(t);a.removeInaccessibleEdges(n),a.fieldDataByFieldName=n;return}let i=this.nodesByTypeName.get(t);if(i){for(let a of i)if(a.fieldDataByFieldName=n,a.handleInaccessibleEdges(),a.isLeaf=!1,!!r){a.hasEntitySiblings=!0;for(let o of a.satisfiedFieldSets){let c=r.targetSubgraphNamesByFieldSet.get(o);for(let l of c||[]){if(l===a.subgraphName)continue;let p=this.nodeByNodeName.get(`${l}.${a.typeName}`);p&&a.entityEdges.push(new Fl.Edge(this.getNextEdgeId(),p,""))}}}}}setSubgraphName(t){this.subgraphName=t}validateEntities(t,n){let r=new Map;for(let[i,a]of t){let o=a.size>1,c,l=o?new Map:void 0,p=new Set,T=new Map;for(let y of a){let g=this.nodeByNodeName.get(y);if(!g)throw new Error(`Fatal: Could not find entity node for "${y}".`);if(this.resolvableFieldNamesByRelativeFieldPathByEntityNodeName.get(y)){let J=this.failureResultByEntityNodeName.get(y);if(!J){c=void 0;break}if(!o)return J}let F=this.nodesByTypeName.get(g.typeName)||[],U=(0,kr.getValueOrDefault)(r,y,()=>o?T:new Map),K=new FO({interSubgraphNodes:F,entityNodeNamesBySharedFieldPath:U,originNode:g,resolvableFieldNamesByRelativeFieldPathByEntityNodeName:this.resolvableFieldNamesByRelativeFieldPathByEntityNodeName,walkerIndex:this.walkerIndex+=1,sharedResolvableFieldNamesByRelativeFieldPath:l,unresolvableSharedFieldPaths:p});if(K.visitEntityNode(g),K.unresolvableFieldPaths.size>0){if(o&&p.size<1){c=void 0;break}c={entityAncestorData:{fieldSetsByTargetSubgraphName:(0,kr.getOrThrowError)(this.entityDataNodes,g.typeName,"entityDataNodes").fieldSetsByTargetSubgraphName,subgraphName:g.subgraphName,typeName:g.typeName},nodeName:y,parentFieldPathForEntityReference:[i],success:!1,typeName:g.typeName,unresolvableFieldPaths:o?p:K.unresolvableFieldPaths},this.failureResultByEntityNodeName.set(y,c);continue}c=void 0;break}if(c)return o&&l&&this.resolvableFieldNamesByRelativeFieldPathByEntityNodeName.set(c.nodeName,l),c}if(r.size>0)for(let[i,a]of r){let o=this.validateEntities(a,n);if(!o.success){for(let[c,l]of t)if(l.has(i)){o.parentFieldPathForEntityReference.push(c);break}return o}}return{success:!0}}validate(){let t=[];for(let n of this.rootNodeByRootTypeName.values())e:for(let[r,i]of n.headToShareableTailEdges){for(let c of i){if(c.isInaccessible)continue e;this.walkerIndex+=1,this.visitEdge(c,`${n.typeName.toLowerCase()}`)}let a=(0,kr.getOrThrowError)(n.fieldDataByFieldName,r,"fieldDataByFieldName"),o=(0,Pl.newRootFieldData)(n.typeName,r,a.subgraphNames);if(this.unresolvableFieldPaths.size>0&&(0,Pl.generateResolvabilityErrors)({unresolvableFieldPaths:this.unresolvableFieldPaths,nodeResolutionDataByFieldPath:this.nodeResolutionDataByFieldPath,rootFieldData:o,errors:t}),this.entityNodeNamesBySharedFieldPath.size>0){let c=this.validateEntities(this.entityNodeNamesBySharedFieldPath,o);c.success||this.generateEntityResolvabilityErrors(c,o,t)}if(t.length>0)return t;this.entityNodeNamesBySharedFieldPath=new Map}return[]}visitEdge(t,n){return t.isInaccessible||t.node.isInaccessible?!1:(!(0,kr.add)(t.visitedIndices,this.walkerIndex)||t.node.isLeaf||(t.node.isAbstract?this.validateAbstractNode(t.node,`${n}.${t.edgeName}`):this.validateConcreteNode(t.node,`${n}.${t.edgeName}`)),!0)}validateConcreteNode(t,n){if(t.headToTailEdges.size<1)return;if(t.hasEntitySiblings){(0,kr.getValueOrDefault)(this.entityNodeNamesBySharedFieldPath,n,()=>new Set).add(t.nodeName);return}let r=(0,kr.getValueOrDefault)(this.nodeResolutionDataByFieldPath,n,()=>new Pl.NodeResolutionData(t.typeName,t.fieldDataByFieldName));for(let[i,a]of t.headToTailEdges)this.visitEdge(a,n)&&r.add(i);r.isResolved?this.unresolvableFieldPaths.delete(n):this.unresolvableFieldPaths.add(n)}validateAbstractNode(t,n){if(!(t.headToTailEdges.size<1))for(let r of t.headToTailEdges.values())this.visitEdge(r,n)}generateEntityResolvabilityErrors(t,n,r){let i=(0,kr.getOrThrowError)(this.resolvableFieldNamesByRelativeFieldPathByEntityNodeName,t.nodeName,"resolvableFieldNamesByRelativeFieldPathByEntityNodeName"),a="";for(let o of t.parentFieldPathForEntityReference)a=o+a;(0,Pl.generateResolvabilityErrors)({unresolvableFieldPaths:t.unresolvableFieldPaths,nodeResolutionDataByFieldPath:i,rootFieldData:n,errors:r,pathFromRoot:a,entityAncestorData:t.entityAncestorData})}};sE.Graph=RO;var FO=class{constructor({entityNodeNamesBySharedFieldPath:t,interSubgraphNodes:n,originNode:r,resolvableFieldNamesByRelativeFieldPathByEntityNodeName:i,unresolvableSharedFieldPaths:a,walkerIndex:o,sharedResolvableFieldNamesByRelativeFieldPath:c}){v(this,"entityNodeNamesBySharedFieldPath");v(this,"interSubgraphNodes");v(this,"originNode");v(this,"resolvableFieldNamesByRelativeFieldPath");v(this,"resolvableFieldNamesByRelativeFieldPathByEntityNodeName");v(this,"unresolvableFieldPaths",new Set);v(this,"unresolvableSharedFieldPaths");v(this,"walkerIndex");v(this,"sharedResolvableFieldNamesByRelativeFieldPath");this.entityNodeNamesBySharedFieldPath=t,this.interSubgraphNodes=n,this.originNode=r,this.resolvableFieldNamesByRelativeFieldPathByEntityNodeName=i,this.resolvableFieldNamesByRelativeFieldPath=(0,kr.getValueOrDefault)(this.resolvableFieldNamesByRelativeFieldPathByEntityNodeName,r.nodeName,()=>new Map),this.unresolvableSharedFieldPaths=a,this.walkerIndex=o,this.sharedResolvableFieldNamesByRelativeFieldPath=c}visitEntityNode(t){this.validateEntityRelatedConcreteNode(t,"");let n=t.getAllAccessibleEntityNodeNames();for(let r of this.interSubgraphNodes){if(this.unresolvableFieldPaths.size<0)return;n.has(r.nodeName)&&this.validateEntityRelatedConcreteNode(r,"")}}visitEntityRelatedEdge(t,n){return t.isInaccessible||t.node.isInaccessible?!1:!(0,kr.add)(t.visitedIndices,this.walkerIndex)||t.node.isLeaf?!0:t.node.hasEntitySiblings?((0,kr.getValueOrDefault)(this.entityNodeNamesBySharedFieldPath,`${n}.${t.edgeName}`,()=>new Set).add(t.node.nodeName),!0):(t.node.isAbstract?this.validateEntityRelatedAbstractNode(t.node,`${n}.${t.edgeName}`):this.validateEntityRelatedConcreteNode(t.node,`${n}.${t.edgeName}`),!0)}validateEntityRelatedConcreteNode(t,n){if(t.headToTailEdges.size<1)return;let r=(0,kr.getValueOrDefault)(this.resolvableFieldNamesByRelativeFieldPath,n,()=>new Pl.NodeResolutionData(t.typeName,t.fieldDataByFieldName)),i=this.sharedResolvableFieldNamesByRelativeFieldPath?(0,kr.getValueOrDefault)(this.sharedResolvableFieldNamesByRelativeFieldPath,n,()=>new Pl.NodeResolutionData(t.typeName,t.fieldDataByFieldName)):void 0;for(let[a,o]of t.headToTailEdges)this.visitEntityRelatedEdge(o,n)&&(r.add(a),i==null||i.add(a));r.isResolved?this.unresolvableFieldPaths.delete(n):this.unresolvableFieldPaths.add(n),i&&(i.isResolved?this.unresolvableSharedFieldPaths.delete(n):this.unresolvableSharedFieldPaths.add(n))}validateEntityRelatedAbstractNode(t,n){if(!(t.headToTailEdges.size<1))for(let r of t.headToTailEdges.values())this.visitEntityRelatedEdge(r,n)}}});var wO=w(oE=>{"use strict";f();N();m();Object.defineProperty(oE,"__esModule",{value:!0});oE.newFieldSetConditionData=Rce;oE.newConfigurationData=Fce;function Rce({fieldCoordinatesPath:e,fieldPath:t}){return{fieldCoordinatesPath:e,fieldPath:t}}function Fce(e,t){return{fieldNames:new Set,isRootNode:e,typeName:t}}});var CO=w(sc=>{"use strict";f();N();m();Object.defineProperty(sc,"__esModule",{value:!0});sc.NormalizationFactory=void 0;sc.normalizeSubgraphFromString=Cce;sc.normalizeSubgraph=Iq;sc.batchNormalize=Bce;var oe=Ae(),Dn=Jr(),ti=Dp(),en=hs(),ar=up(),pe=sa(),uE=np(),Pce=Y_(),$i=uO(),wce=pO(),Ss=eE(),yq=gO(),$a=bp(),gn=Rp(),ir=Jo(),LO=PO(),cE=X_(),ne=lr(),Lce=nl(),Ge=Hr(),_n=Ae(),Pp=wO();function Cce(e,t=!0){let{error:n,documentNode:r}=(0,Dn.safeParse)(e,t);return n||!r?{errors:[(0,pe.subgraphInvalidSyntaxError)(n)],success:!1,warnings:[]}:new wp(new LO.Graph).normalize(r)}function Iq(e,t,n){return new wp(n||new LO.Graph,t).normalize(e)}var wp=class{constructor(t,n){v(this,"argumentName","");v(this,"authorizationDataByParentTypeName",new Map);v(this,"concreteTypeNamesByAbstractTypeName",new Map);v(this,"conditionalFieldDataByCoords",new Map);v(this,"configurationDataByTypeName",new Map);v(this,"customDirectiveDefinitions",new Map);v(this,"definedDirectiveNames",new Set);v(this,"directiveDefinitionByDirectiveName",new Map);v(this,"directiveDefinitionDataByDirectiveName",(0,ti.initializeDirectiveDefinitionDatas)());v(this,"edfsDirectiveReferences",new Set);v(this,"errors",[]);v(this,"entityDataByTypeName",new Map);v(this,"entityInterfaceDataByTypeName",new Map);v(this,"eventsConfigurations",new Map);v(this,"fieldSetDataByTypeName",new Map);v(this,"internalGraph");v(this,"invalidConfigureDescriptionNodeDatas",[]);v(this,"invalidRepeatedDirectiveNameByCoords",new Map);v(this,"isCurrentParentExtension",!1);v(this,"isParentObjectExternal",!1);v(this,"isParentObjectShareable",!1);v(this,"isSubgraphEventDrivenGraph",!1);v(this,"isSubgraphVersionTwo",!1);v(this,"keyFieldSetDatasByTypeName",new Map);v(this,"lastParentNodeKind",oe.Kind.NULL);v(this,"lastChildNodeKind",oe.Kind.NULL);v(this,"parentTypeNamesWithAuthDirectives",new Set);v(this,"keyFieldSetDataByTypeName",new Map);v(this,"keyFieldSetsByEntityTypeNameByFieldCoords",new Map);v(this,"keyFieldNamesByParentTypeName",new Map);v(this,"fieldCoordsByNamedTypeName",new Map);v(this,"operationTypeNodeByTypeName",new Map);v(this,"originalParentTypeName","");v(this,"originalTypeNameByRenamedTypeName",new Map);v(this,"parentDefinitionDataByTypeName",new Map);v(this,"parentsWithChildArguments",new Set);v(this,"overridesByTargetSubgraphName",new Map);v(this,"invalidORScopesCoords",new Set);v(this,"schemaData");v(this,"referencedDirectiveNames",new Set);v(this,"referencedTypeNames",new Set);v(this,"renamedParentTypeName","");v(this,"subgraphName");v(this,"unvalidatedExternalFieldCoords",new Set);v(this,"usesEdfsNatsStreamConfiguration",!1);v(this,"warnings",[]);for(let[r,i]of en.BASE_DIRECTIVE_DEFINITION_BY_DIRECTIVE_NAME)this.directiveDefinitionByDirectiveName.set(r,i);this.subgraphName=n||ne.NOT_APPLICABLE,this.internalGraph=t,this.internalGraph.setSubgraphName(this.subgraphName),this.schemaData={directivesByDirectiveName:new Map,kind:oe.Kind.SCHEMA_DEFINITION,name:ne.SCHEMA,operationTypes:new Map}}validateInputNamedType(t){if(en.BASE_SCALARS.has(t))return{hasUnhandledError:!1,typeString:""};let n=this.parentDefinitionDataByTypeName.get(t);if(!n)return{hasUnhandledError:!1,typeString:""};switch(n.kind){case oe.Kind.ENUM_TYPE_DEFINITION:case oe.Kind.INPUT_OBJECT_TYPE_DEFINITION:case oe.Kind.SCALAR_TYPE_DEFINITION:return{hasUnhandledError:!1,typeString:""};default:return{hasUnhandledError:!0,typeString:(0,Ge.kindToTypeString)(n.kind)}}}validateArguments(t,n){let r=[];for(let[i,a]of t.argumentDataByArgumentName){let o=(0,ir.getTypeNodeNamedTypeName)(a.type);en.BASE_SCALARS.has(o)||this.referencedTypeNames.add(o);let{hasUnhandledError:c,typeString:l}=this.validateInputNamedType(o);c&&r.push({argumentName:i,namedType:o,typeString:l,typeName:(0,$i.printTypeNode)(a.type)})}r.length>0&&this.errors.push((0,pe.invalidArgumentsError)(n,r))}isTypeNameRootType(t){return ne.ROOT_TYPE_NAMES.has(t)||this.operationTypeNodeByTypeName.has(t)}isArgumentValueValid(t,n){if(n.kind===oe.Kind.NULL)return t.kind!==oe.Kind.NON_NULL_TYPE;switch(t.kind){case oe.Kind.LIST_TYPE:{if(n.kind!==oe.Kind.LIST)return this.isArgumentValueValid((0,ir.getNamedTypeNode)(t.type),n);for(let r of n.values)if(!this.isArgumentValueValid(t.type,r))return!1;return!0}case oe.Kind.NAMED_TYPE:switch(t.name.value){case ne.BOOLEAN_SCALAR:return n.kind===oe.Kind.BOOLEAN;case ne.FLOAT_SCALAR:return n.kind===oe.Kind.FLOAT||n.kind===oe.Kind.INT;case ne.ID_SCALAR:return n.kind===oe.Kind.STRING||n.kind===oe.Kind.INT;case ne.INT_SCALAR:return n.kind===oe.Kind.INT;case ne.FIELD_SET_SCALAR:case ne.SCOPE_SCALAR:case ne.STRING_SCALAR:return n.kind===oe.Kind.STRING;case ne.LINK_IMPORT:return!0;case ne.LINK_PURPOSE:return n.kind!==oe.Kind.ENUM?!1:n.value===ne.SECURITY||n.value===ne.EXECUTION;case ne.SUBSCRIPTION_FIELD_CONDITION:case ne.SUBSCRIPTION_FILTER_CONDITION:return n.kind===oe.Kind.OBJECT;default:{let r=this.parentDefinitionDataByTypeName.get(t.name.value);if(!r)return!1;if(r.kind===oe.Kind.SCALAR_TYPE_DEFINITION)return!0;if(r.kind===oe.Kind.ENUM_TYPE_DEFINITION){if(n.kind!==oe.Kind.ENUM)return!1;let i=r.enumValueDataByValueName.get(n.value);return i?!i.directivesByDirectiveName.has(ne.INACCESSIBLE):!1}return r.kind!==oe.Kind.INPUT_OBJECT_TYPE_DEFINITION?!1:n.kind===oe.Kind.OBJECT}}default:return this.isArgumentValueValid(t.type,n)}}addInheritedDirectivesToFieldData(t){return this.isParentObjectShareable&&(0,Ge.getValueOrDefault)(t,ne.SHAREABLE,()=>[(0,Ge.generateSimpleDirective)(ne.SHAREABLE)]),this.isParentObjectExternal&&(0,Ge.getValueOrDefault)(t,ne.EXTERNAL,()=>[(0,Ge.generateSimpleDirective)(ne.EXTERNAL)]),t}extractDirectives(t,n){if(!t.directives)return n;for(let r of t.directives){let i=r.name.value;i===ne.SHAREABLE?(0,Ge.getValueOrDefault)(n,i,()=>[r]):(0,Ge.getValueOrDefault)(n,i,()=>[]).push(r),(0,ar.isNodeKindObject)(t.kind)&&(this.isParentObjectExternal||(this.isParentObjectExternal=i===ne.EXTERNAL),this.isParentObjectShareable||(this.isParentObjectShareable=i===ne.SHAREABLE))}return n}validateDirective({data:t,definitionData:n,directiveCoords:r,directiveNode:i,errorMessages:a,requiredArgumentNames:o}){let c=i.name.value,l=t.kind===oe.Kind.FIELD_DEFINITION?t.renamedParentTypeName||t.originalParentTypeName:t.name,p=c===ne.AUTHENTICATED,T=c===ne.OVERRIDE,y=c===ne.REQUIRES_SCOPES;if(!i.arguments||i.arguments.length<1)return n.requiredArgumentNames.size>0&&a.push((0,pe.undefinedRequiredArgumentsErrorMessage)(c,o,[])),p&&this.handleAuthenticatedDirective(t,l),a;let g=new Set,_=new Set,F=new Set,U=[];for(let ee of i.arguments){let W=ee.name.value;if(g.has(W)){_.add(W);continue}g.add(W);let Te=n.argumentTypeNodeByArgumentName.get(W);if(!Te){F.add(W);continue}if(!this.isArgumentValueValid(Te.typeNode,ee.value)){a.push((0,pe.invalidArgumentValueErrorMessage)((0,oe.print)(ee.value),`@${c}`,W,(0,$i.printTypeNode)(Te.typeNode)));continue}if(T&&t.kind===oe.Kind.FIELD_DEFINITION){this.handleOverrideDirective({data:t,directiveCoords:r,errorMessages:a,targetSubgraphName:ee.value.value});continue}!y||W!==ne.SCOPES||this.extractRequiredScopes({directiveCoords:r,orScopes:ee.value.values,requiredScopes:U})}_.size>0&&a.push((0,pe.duplicateDirectiveArgumentDefinitionsErrorMessage)([..._])),F.size>0&&a.push((0,pe.unexpectedDirectiveArgumentErrorMessage)(c,[...F]));let K=(0,Ge.getEntriesNotInHashSet)(o,g);if(K.length>0&&a.push((0,pe.undefinedRequiredArgumentsErrorMessage)(c,o,K)),a.length>0||!y)return a;let J=(0,Ge.getValueOrDefault)(this.authorizationDataByParentTypeName,l,()=>(0,ar.newAuthorizationData)(l));if(t.kind!==oe.Kind.FIELD_DEFINITION)this.parentTypeNamesWithAuthDirectives.add(l),J.requiredScopes.push(...U);else{let ee=(0,Ge.getValueOrDefault)(J.fieldAuthDataByFieldName,t.name,()=>(0,ar.newFieldAuthorizationData)(t.name));ee.inheritedData.requiredScopes.push(...U),ee.originalData.requiredScopes.push(...U)}return a}validateDirectives(t,n){let r=new Set;for(let[i,a]of t.directivesByDirectiveName){let o=this.directiveDefinitionDataByDirectiveName.get(i);if(!o){r.has(i)||(this.errors.push((0,pe.undefinedDirectiveError)(i,n)),r.add(i));continue}let c=[],l=(0,Dn.nodeKindToDirectiveLocation)(t.kind);if(o.locations.has(l)||c.push((0,pe.invalidDirectiveLocationErrorMessage)(i,l)),a.length>1&&!o.isRepeatable){let T=(0,Ge.getValueOrDefault)(this.invalidRepeatedDirectiveNameByCoords,n,()=>new Set);T.has(i)||(T.add(i),c.push((0,pe.invalidRepeatedDirectiveErrorMessage)(i)))}let p=[...o.requiredArgumentNames];for(let T=0;T0&&this.errors.push((0,pe.invalidDirectiveError)(i,n,(0,Ge.numberToOrdinal)(T+1),y))}}switch(t.kind){case oe.Kind.ENUM_TYPE_DEFINITION:{for(let[i,a]of t.enumValueDataByValueName)this.validateDirectives(a,`${t.name}.${i}`);return}case oe.Kind.FIELD_DEFINITION:{for(let[i,a]of t.argumentDataByArgumentName)this.validateDirectives(a,`${t.originalParentTypeName}.${t.name}(${i}: ...)`);return}case oe.Kind.INPUT_OBJECT_TYPE_DEFINITION:{for(let[i,a]of t.inputValueDataByValueName)this.validateDirectives(a,`${t.name}.${i}`);return}case oe.Kind.INTERFACE_TYPE_DEFINITION:case oe.Kind.OBJECT_TYPE_DEFINITION:{for(let[i,a]of t.fieldDataByFieldName)this.validateDirectives(a,`${t.name}.${i}`);return}default:return}}getNodeExtensionType(t,n,r=!1){return t?$a.ExtensionType.REAL:r||!n.has(ne.EXTENDS)?$a.ExtensionType.NONE:$a.ExtensionType.EXTENDS}setParentDataExtensionType(t,n){switch(t.extensionType){case $a.ExtensionType.EXTENDS:case $a.ExtensionType.NONE:{if(n===$a.ExtensionType.REAL)return;this.errors.push((0,pe.duplicateTypeDefinitionError)((0,Ge.kindToTypeString)(t.kind),t.name));return}default:t.extensionType=n}}extractConfigureDescriptionData(t,n){var i,a;if(!n.arguments||n.arguments.length<1){t.description||this.invalidConfigureDescriptionNodeDatas.push(t),t.configureDescriptionDataBySubgraphName.set(this.subgraphName,{propagate:!0,description:((i=t.description)==null?void 0:i.value)||""});return}let r={propagate:!0,description:((a=t.description)==null?void 0:a.value)||""};for(let o of n.arguments)switch(o.name.value){case ne.PROPAGATE:{if(o.value.kind!=oe.Kind.BOOLEAN)return;r.propagate=o.value.value;break}case ne.DESCRIPTION_OVERRIDE:{if(o.value.kind!=oe.Kind.STRING)return;r.description=o.value.value;break}default:return}!t.description&&!r.description&&this.invalidConfigureDescriptionNodeDatas.push(t),t.configureDescriptionDataBySubgraphName.set(this.subgraphName,r)}extractConfigureDescriptionsData(t){let n=t.directivesByDirectiveName.get(ne.CONFIGURE_DESCRIPTION);n&&n.length==1&&this.extractConfigureDescriptionData(t,n[0])}extractImplementedInterfaceTypeNames(t,n){if(!t.interfaces)return n;let r=t.name.value;for(let i of t.interfaces){let a=i.name.value;if(n.has(a)){this.errors.push((0,pe.duplicateImplementedInterfaceError)((0,ar.kindToConvertedTypeString)(t.kind),r,a));continue}n.add(a)}return n}updateCompositeOutputDataByNode(t,n,r){this.setParentDataExtensionType(n,r),this.extractImplementedInterfaceTypeNames(t,n.implementedInterfaceTypeNames),n.description||(n.description=(0,Dn.formatDescription)("description"in t?t.description:void 0)),this.extractConfigureDescriptionsData(n),n.isEntity||(n.isEntity=n.directivesByDirectiveName.has(ne.KEY)),n.isInaccessible||(n.isInaccessible=n.directivesByDirectiveName.has(ne.INACCESSIBLE)),n.subgraphNames.add(this.subgraphName)}addConcreteTypeNamesForImplementedInterfaces(t,n){for(let r of t)(0,Ge.getValueOrDefault)(this.concreteTypeNamesByAbstractTypeName,r,()=>new Set).add(n),this.internalGraph.addEdge(this.internalGraph.addOrUpdateNode(r,{isAbstract:!0}),this.internalGraph.addOrUpdateNode(n),n,!0)}extractArguments(t,n){var c;if(!((c=n.arguments)!=null&&c.length))return t;let r=n.name.value,i=`${this.originalParentTypeName}.${r}`,a=`${this.renamedParentTypeName}.${r}`;this.parentsWithChildArguments.add(this.originalParentTypeName);let o=new Set;for(let l of n.arguments){let p=l.name.value;if(t.has(p)){o.add(p);continue}this.addInputValueDataByNode(t,l,`${i}(${p}: ...)`,`${a}(${p}: ...)`)}return o.size>0&&this.errors.push((0,pe.duplicateArgumentsError)(i,[...o])),t}addPersistedDirectiveDefinitionDataByNode(t,n,r){let i=n.name.value,a=new Map;for(let o of n.arguments||[]){let c=`@${i}(${o.name.value}: ...)`;this.addInputValueDataByNode(a,o,c,c)}t.set(i,{argumentDataByArgumentName:a,executableLocations:r,name:i,repeatable:n.repeatable,subgraphNames:new Set([this.subgraphName]),description:(0,Dn.formatDescription)(n.description)})}extractDirectiveLocations(t,n){let r=new Set,i=new Set;for(let a of t.locations){let o=a.value;if(!i.has(o)){if(!ne.EXECUTABLE_DIRECTIVE_LOCATIONS.has(o)&&!uE.TYPE_SYSTEM_DIRECTIVE_LOCATIONS.has(o)){n.push((0,pe.invalidDirectiveDefinitionLocationErrorMessage)(o)),i.add(o);continue}if(r.has(o)){n.push((0,pe.duplicateDirectiveDefinitionLocationErrorMessage)(o)),i.add(o);continue}r.add(o)}}return r}extractArgumentData(t,n){let r=new Map,i=new Set,a=new Set,o={argumentTypeNodeByArgumentName:r,optionalArgumentNames:i,requiredArgumentNames:a};if(!t)return o;let c=new Set;for(let l of t){let p=l.name.value;if(r.has(p)){c.add(p);continue}l.defaultValue&&i.add(p),(0,gn.isTypeRequired)(l.type)&&!l.defaultValue&&a.add(p),r.set(p,{name:p,typeNode:l.type,defaultValue:l.defaultValue})}return c.size>0&&n.push((0,pe.duplicateDirectiveDefinitionArgumentErrorMessage)([...c])),o}addDirectiveDefinitionDataByNode(t){let n=t.name.value;if(this.definedDirectiveNames.has(n))return this.errors.push((0,pe.duplicateDirectiveDefinitionError)(n)),!1;if(this.definedDirectiveNames.add(n),this.directiveDefinitionByDirectiveName.set(n,t),en.V2_DIRECTIVE_DEFINITION_BY_DIRECTIVE_NAME.has(n))return this.isSubgraphVersionTwo=!0,!1;if(en.ALL_IN_BUILT_DIRECTIVE_NAMES.has(n))return!1;let r=[],{argumentTypeNodeByArgumentName:i,optionalArgumentNames:a,requiredArgumentNames:o}=this.extractArgumentData(t.arguments,r);return this.directiveDefinitionDataByDirectiveName.set(n,{argumentTypeNodeByArgumentName:i,isRepeatable:t.repeatable,locations:this.extractDirectiveLocations(t,r),name:n,node:t,optionalArgumentNames:a,requiredArgumentNames:o}),r.length>0&&this.errors.push((0,pe.invalidDirectiveDefinitionError)(n,r)),!0}addFieldDataByNode(t,n,r,i){let a=n.name.value,o=this.renamedParentTypeName||this.originalParentTypeName,c=`${this.originalParentTypeName}.${a}`,{isExternal:l,isShareable:p}=(0,gn.isNodeExternalOrShareable)(n,!this.isSubgraphVersionTwo,i),T={argumentDataByArgumentName:r,configureDescriptionDataBySubgraphName:new Map,externalFieldDataBySubgraphName:new Map([[this.subgraphName,(0,gn.newExternalFieldData)(l)]]),federatedCoords:`${o}.${a}`,isInaccessible:i.has(ne.INACCESSIBLE),isShareableBySubgraphName:new Map([[this.subgraphName,p]]),kind:oe.Kind.FIELD_DEFINITION,name:a,namedTypeName:(0,ir.getTypeNodeNamedTypeName)(n.type),node:(0,ir.getMutableFieldNode)(n,c,this.errors),originalParentTypeName:this.originalParentTypeName,persistedDirectivesData:(0,gn.newPersistedDirectivesData)(),renamedParentTypeName:o,subgraphNames:new Set([this.subgraphName]),type:(0,ir.getMutableTypeNode)(n.type,c,this.errors),directivesByDirectiveName:i,description:(0,Dn.formatDescription)(n.description)};return en.BASE_SCALARS.has(T.namedTypeName)||this.referencedTypeNames.add(T.namedTypeName),this.extractConfigureDescriptionsData(T),t.set(a,T),T}addInputValueDataByNode(t,n,r,i){let a=n.name.value,o=!!i;n.defaultValue&&!(0,gn.areDefaultValuesCompatible)(n.type,n.defaultValue)&&this.errors.push((0,pe.incompatibleInputValueDefaultValueTypeError)((o?ne.ARGUMENT:ne.INPUT_FIELD)+` "${a}"`,r,(0,$i.printTypeNode)(n.type),(0,oe.print)(n.defaultValue)));let c={configureDescriptionDataBySubgraphName:new Map,directivesByDirectiveName:this.extractDirectives(n,new Map),includeDefaultValue:!!n.defaultValue,isArgument:o,kind:o?oe.Kind.ARGUMENT:oe.Kind.INPUT_VALUE_DEFINITION,name:a,namedTypeName:(0,ir.getTypeNodeNamedTypeName)(n.type),node:(0,ir.getMutableInputValueNode)(n,r,this.errors),originalCoords:r,persistedDirectivesData:(0,gn.newPersistedDirectivesData)(),federatedCoords:i||r,requiredSubgraphNames:new Set((0,gn.isTypeRequired)(n.type)?[this.subgraphName]:[]),subgraphNames:new Set([this.subgraphName]),type:(0,ir.getMutableTypeNode)(n.type,r,this.errors),defaultValue:n.defaultValue,description:(0,Dn.formatDescription)(n.description)};this.extractConfigureDescriptionsData(c),t.set(a,c)}upsertInterfaceDataByNode(t,n=!1){let r=t.name.value,i=this.parentDefinitionDataByTypeName.get(r),a=this.extractDirectives(t,(i==null?void 0:i.directivesByDirectiveName)||new Map),o=this.getNodeExtensionType(n,a),c=this.entityInterfaceDataByTypeName.get(r);if(c&&t.fields)for(let p of t.fields)c.interfaceFieldNames.add(p.name.value);if(i){if(i.kind!==oe.Kind.INTERFACE_TYPE_DEFINITION){this.errors.push((0,pe.multipleNamedTypeDefinitionError)(r,(0,Ge.kindToTypeString)(i.kind),(0,ar.kindToConvertedTypeString)(t.kind)));return}this.updateCompositeOutputDataByNode(t,i,o);return}let l={configureDescriptionDataBySubgraphName:new Map,directivesByDirectiveName:a,extensionType:o,fieldDataByFieldName:new Map,implementedInterfaceTypeNames:this.extractImplementedInterfaceTypeNames(t,new Set),isEntity:a.has(ne.KEY),isInaccessible:a.has(ne.INACCESSIBLE),kind:oe.Kind.INTERFACE_TYPE_DEFINITION,name:r,node:(0,ir.getMutableInterfaceNode)(t.name),persistedDirectivesData:(0,gn.newPersistedDirectivesData)(),subgraphNames:new Set([this.subgraphName]),description:(0,Dn.formatDescription)("description"in t?t.description:void 0)};this.extractConfigureDescriptionsData(l),this.parentDefinitionDataByTypeName.set(r,l)}getRenamedRootTypeName(t){let n=this.operationTypeNodeByTypeName.get(t);if(!n)return t;switch(n){case oe.OperationTypeNode.MUTATION:return ne.MUTATION;case oe.OperationTypeNode.SUBSCRIPTION:return ne.SUBSCRIPTION;default:return ne.QUERY}}addInterfaceObjectFieldsByNode(t){let n=t.name.value,r=this.entityInterfaceDataByTypeName.get(n);if(!(!r||!r.isInterfaceObject||!t.fields))for(let i of t.fields)r.interfaceObjectFieldNames.add(i.name.value)}upsertObjectDataByNode(t,n=!1){let r=t.name.value,i=this.parentDefinitionDataByTypeName.get(r),a=this.extractDirectives(t,(i==null?void 0:i.directivesByDirectiveName)||new Map),o=this.isTypeNameRootType(r),c=this.getNodeExtensionType(n,a,o);if(this.addInterfaceObjectFieldsByNode(t),i){if(i.kind!==oe.Kind.OBJECT_TYPE_DEFINITION){this.errors.push((0,pe.multipleNamedTypeDefinitionError)(r,(0,Ge.kindToTypeString)(i.kind),(0,ar.kindToConvertedTypeString)(t.kind)));return}this.updateCompositeOutputDataByNode(t,i,c),this.addConcreteTypeNamesForImplementedInterfaces(i.implementedInterfaceTypeNames,r);return}let l=this.extractImplementedInterfaceTypeNames(t,new Set);this.addConcreteTypeNamesForImplementedInterfaces(l,r);let p={configureDescriptionDataBySubgraphName:new Map,directivesByDirectiveName:a,extensionType:c,fieldDataByFieldName:new Map,implementedInterfaceTypeNames:l,isEntity:a.has(ne.KEY),isInaccessible:a.has(ne.INACCESSIBLE),isRootType:o,kind:oe.Kind.OBJECT_TYPE_DEFINITION,name:r,node:(0,ir.getMutableObjectNode)(t.name),persistedDirectivesData:(0,gn.newPersistedDirectivesData)(),renamedTypeName:this.getRenamedRootTypeName(r),subgraphNames:new Set([this.subgraphName]),description:(0,Dn.formatDescription)("description"in t?t.description:void 0)};this.extractConfigureDescriptionsData(p),this.parentDefinitionDataByTypeName.set(r,p)}upsertEnumDataByNode(t,n=!1){let r=t.name.value;this.internalGraph.addOrUpdateNode(r,{isLeaf:!0});let i=this.parentDefinitionDataByTypeName.get(r),a=this.extractDirectives(t,(i==null?void 0:i.directivesByDirectiveName)||new Map),o=this.getNodeExtensionType(n,a);if(i){if(i.kind!==oe.Kind.ENUM_TYPE_DEFINITION){this.errors.push((0,pe.multipleNamedTypeDefinitionError)(r,(0,Ge.kindToTypeString)(i.kind),(0,ar.kindToConvertedTypeString)(t.kind)));return}this.setParentDataExtensionType(i,o),i.isInaccessible||(i.isInaccessible=a.has(ne.INACCESSIBLE)),i.subgraphNames.add(this.subgraphName),i.description||(i.description=(0,Dn.formatDescription)("description"in t?t.description:void 0)),this.extractConfigureDescriptionsData(i);return}let c={appearances:1,configureDescriptionDataBySubgraphName:new Map,directivesByDirectiveName:a,extensionType:o,enumValueDataByValueName:new Map,isInaccessible:a.has(ne.INACCESSIBLE),kind:oe.Kind.ENUM_TYPE_DEFINITION,name:r,node:(0,ir.getMutableEnumNode)(t.name),persistedDirectivesData:(0,gn.newPersistedDirectivesData)(),subgraphNames:new Set([this.subgraphName]),description:(0,Dn.formatDescription)("description"in t?t.description:void 0)};this.extractConfigureDescriptionsData(c),this.parentDefinitionDataByTypeName.set(r,c)}upsertInputObjectByNode(t,n=!1){let r=t.name.value,i=this.parentDefinitionDataByTypeName.get(r),a=this.extractDirectives(t,(i==null?void 0:i.directivesByDirectiveName)||new Map),o=this.getNodeExtensionType(n,a);if(i){if(i.kind!==oe.Kind.INPUT_OBJECT_TYPE_DEFINITION){this.errors.push((0,pe.multipleNamedTypeDefinitionError)(r,(0,Ge.kindToTypeString)(i.kind),(0,ar.kindToConvertedTypeString)(t.kind)));return}this.setParentDataExtensionType(i,o),i.isInaccessible||(i.isInaccessible=a.has(ne.INACCESSIBLE)),i.subgraphNames.add(this.subgraphName),i.description||(i.description=(0,Dn.formatDescription)("description"in t?t.description:void 0)),this.extractConfigureDescriptionsData(i);return}let c={configureDescriptionDataBySubgraphName:new Map,directivesByDirectiveName:a,extensionType:o,inputValueDataByValueName:new Map,isInaccessible:a.has(ne.INACCESSIBLE),kind:oe.Kind.INPUT_OBJECT_TYPE_DEFINITION,name:r,node:(0,ir.getMutableInputObjectNode)(t.name),persistedDirectivesData:(0,gn.newPersistedDirectivesData)(),subgraphNames:new Set([this.subgraphName]),description:(0,Dn.formatDescription)("description"in t?t.description:void 0)};this.extractConfigureDescriptionsData(c),this.parentDefinitionDataByTypeName.set(r,c)}upsertScalarByNode(t,n=!1){let r=t.name.value;this.internalGraph.addOrUpdateNode(r,{isLeaf:!0});let i=this.parentDefinitionDataByTypeName.get(r),a=this.extractDirectives(t,(i==null?void 0:i.directivesByDirectiveName)||new Map),o=this.getNodeExtensionType(n,a);if(i){if(i.kind!==oe.Kind.SCALAR_TYPE_DEFINITION){this.errors.push((0,pe.multipleNamedTypeDefinitionError)(r,(0,Ge.kindToTypeString)(i.kind),(0,ar.kindToConvertedTypeString)(t.kind)));return}this.setParentDataExtensionType(i,o),i.description||(i.description=(0,Dn.formatDescription)("description"in t?t.description:void 0)),i.subgraphNames.add(this.subgraphName),this.extractConfigureDescriptionsData(i);return}let c={configureDescriptionDataBySubgraphName:new Map,directivesByDirectiveName:a,extensionType:o,kind:oe.Kind.SCALAR_TYPE_DEFINITION,name:r,node:(0,ir.getMutableScalarNode)(t.name),persistedDirectivesData:(0,gn.newPersistedDirectivesData)(),subgraphNames:new Set([this.subgraphName]),description:(0,Dn.formatDescription)("description"in t?t.description:void 0)};this.extractConfigureDescriptionsData(c),this.parentDefinitionDataByTypeName.set(r,c)}extractUnionMembers(t,n){if(!t.types)return n;let r=t.name.value;for(let i of t.types){let a=i.name.value;if(n.has(a)){this.errors.push((0,pe.duplicateUnionMemberDefinitionError)(r,a));continue}(0,Ge.getValueOrDefault)(this.concreteTypeNamesByAbstractTypeName,r,()=>new Set).add(a),en.BASE_SCALARS.has(a)||this.referencedTypeNames.add(a),n.set(a,i)}return n}upsertUnionByNode(t,n=!1){let r=t.name.value,i=this.parentDefinitionDataByTypeName.get(r),a=this.extractDirectives(t,(i==null?void 0:i.directivesByDirectiveName)||new Map),o=this.getNodeExtensionType(n,a);if(this.addConcreteTypeNamesForUnion(t),i){if(i.kind!==oe.Kind.UNION_TYPE_DEFINITION){this.errors.push((0,pe.multipleNamedTypeDefinitionError)(r,(0,Ge.kindToTypeString)(i.kind),(0,ar.kindToConvertedTypeString)(t.kind)));return}this.setParentDataExtensionType(i,o),this.extractUnionMembers(t,i.memberByMemberTypeName),i.description||(i.description=(0,Dn.formatDescription)("description"in t?t.description:void 0)),i.subgraphNames.add(this.subgraphName),this.extractConfigureDescriptionsData(i);return}let c={configureDescriptionDataBySubgraphName:new Map,directivesByDirectiveName:a,extensionType:o,kind:oe.Kind.UNION_TYPE_DEFINITION,memberByMemberTypeName:this.extractUnionMembers(t,new Map),name:r,node:(0,ir.getMutableUnionNode)(t.name),persistedDirectivesData:(0,gn.newPersistedDirectivesData)(),subgraphNames:new Set([this.subgraphName]),description:(0,Dn.formatDescription)("description"in t?t.description:void 0)};this.extractConfigureDescriptionsData(c),this.parentDefinitionDataByTypeName.set(r,c)}extractKeyFieldSets(t,n){var a;let r=t.name.value;if(!((a=t.directives)!=null&&a.length)){this.errors.push((0,pe.expectedEntityError)(r));return}let i=0;for(let o of t.directives){if(o.name.value!==ne.KEY||(i+=1,!o.arguments||o.arguments.length<1))continue;let c,l=!1;for(let _ of o.arguments){if(_.name.value===ne.RESOLVABLE){_.value.kind===oe.Kind.BOOLEAN&&!_.value.value&&(l=!0);continue}if(_.name.value!==ne.FIELDS){c=void 0;break}if(_.value.kind!==oe.Kind.STRING){c=void 0;break}c=_.value.value}if(c===void 0)continue;let{error:p,documentNode:T}=(0,Dn.safeParse)("{"+c+"}");if(p||!T){this.errors.push((0,pe.invalidDirectiveError)(ne.KEY,r,(0,Ge.numberToOrdinal)(i),[(0,pe.unparsableFieldSetErrorMessage)(c,p)]));continue}let y=(0,ti.getNormalizedFieldSet)(T),g=n.get(y);g?g.isUnresolvable||(g.isUnresolvable=l):n.set(y,{documentNode:T,isUnresolvable:l,normalizedFieldSet:y,rawFieldSet:c})}}getFieldSetParent(t,n,r,i){if(!t)return{fieldSetParentData:n};let a=(0,Ge.getOrThrowError)(n.fieldDataByFieldName,r,`${i}.fieldDataByFieldName`),o=(0,ir.getTypeNodeNamedTypeName)(a.node.type),c=this.parentDefinitionDataByTypeName.get(o);return c?c.kind!==oe.Kind.INTERFACE_TYPE_DEFINITION&&c.kind!==oe.Kind.OBJECT_TYPE_DEFINITION?{errorString:(0,pe.incompatibleTypeWithProvidesErrorMessage)(`${i}.${r}`,o)}:{fieldSetParentData:c}:{errorString:(0,pe.unknownNamedTypeErrorMessage)(`${i}.${r}`,o)}}validateConditionalFieldSet(t,n,r,i,a){let{error:o,documentNode:c}=(0,Dn.safeParse)("{"+n+"}");if(o||!c)return{errorMessages:[(0,pe.unparsableFieldSetErrorMessage)(n,o)]};let l=this,p=[t],T=(0,ti.getConditionalFieldSetDirectiveName)(i),y=[],g=`${a}.${r}`,_=(0,ti.getInitialFieldCoordsPath)(i,g),F=[r],U=new Set,K=[],J=-1,ee=!0,W=r,Te=!1;return(0,_n.visit)(c,{Argument:{enter(){return!1}},Field:{enter(de){let we=p[J],qe=we.name;if(we.kind===oe.Kind.UNION_TYPE_DEFINITION)return K.push((0,pe.invalidSelectionOnUnionErrorMessage)(n,_,qe)),_n.BREAK;let et=de.name.value,X=`${qe}.${et}`;if(l.unvalidatedExternalFieldCoords.delete(X),ee)return K.push((0,pe.invalidSelectionSetErrorMessage)(n,_,qe,(0,Ge.kindToTypeString)(we.kind))),_n.BREAK;_.push(X),F.push(et),W=et;let ve=we.fieldDataByFieldName.get(et);if(!ve)return K.push((0,pe.undefinedFieldInFieldSetErrorMessage)(n,qe,et)),_n.BREAK;if(y[J].has(et))return K.push((0,pe.duplicateFieldInFieldSetErrorMessage)(n,X)),_n.BREAK;y[J].add(et);let{isDefinedExternal:gt,isUnconditionallyProvided:Ht}=(0,Ge.getOrThrowError)(ve.externalFieldDataBySubgraphName,l.subgraphName,`${X}.externalFieldDataBySubgraphName`),zt=gt&&!Ht;Ht||(Te=!0);let bn=(0,ir.getTypeNodeNamedTypeName)(ve.node.type),Vt=l.parentDefinitionDataByTypeName.get(bn);if(en.BASE_SCALARS.has(bn)||(Vt==null?void 0:Vt.kind)===oe.Kind.SCALAR_TYPE_DEFINITION||(Vt==null?void 0:Vt.kind)===oe.Kind.ENUM_TYPE_DEFINITION){if(U.size<1&&!gt){if(l.isSubgraphVersionTwo){l.errors.push((0,pe.nonExternalConditionalFieldError)(g,l.subgraphName,X,n,T));return}l.warnings.push((0,Ss.nonExternalConditionalFieldWarning)(g,l.subgraphName,X,n,T));return}if(U.size<1&&Ht){l.isSubgraphVersionTwo?K.push((0,pe.fieldAlreadyProvidedErrorMessage)(X,l.subgraphName,T)):l.warnings.push((0,Ss.fieldAlreadyProvidedWarning)(X,T,g,l.subgraphName));return}if(!zt&&!i)return;let dn=(0,Ge.getValueOrDefault)(l.conditionalFieldDataByCoords,X,gn.newConditionalFieldData),Rr=(0,Pp.newFieldSetConditionData)({fieldCoordinatesPath:[..._],fieldPath:[...F]});i?dn.providedBy.push(Rr):dn.requiredBy.push(Rr);return}if(!Vt)return K.push((0,pe.unknownTypeInFieldSetErrorMessage)(n,X,bn)),_n.BREAK;if(gt&&(i&&(0,Ge.getValueOrDefault)(l.conditionalFieldDataByCoords,X,gn.newConditionalFieldData).providedBy.push((0,Pp.newFieldSetConditionData)({fieldCoordinatesPath:[..._],fieldPath:[...F]})),U.add(X)),Vt.kind===oe.Kind.OBJECT_TYPE_DEFINITION||Vt.kind===oe.Kind.INTERFACE_TYPE_DEFINITION||Vt.kind===oe.Kind.UNION_TYPE_DEFINITION){ee=!0,p.push(Vt);return}},leave(){U.delete(_.pop()||""),F.pop()}},InlineFragment:{enter(de){let we=p[J],qe=we.name,et=_.length<1?t.name:_[_.length-1];if(!de.typeCondition)return K.push((0,pe.inlineFragmentWithoutTypeConditionErrorMessage)(n,et)),_n.BREAK;let X=de.typeCondition.name.value;if(X===qe){p.push(we),ee=!0;return}if(!(0,Dn.isKindAbstract)(we.kind))return K.push((0,pe.invalidInlineFragmentTypeErrorMessage)(n,_,X,qe)),_n.BREAK;let ve=l.parentDefinitionDataByTypeName.get(X);if(!ve)return K.push((0,pe.unknownInlineFragmentTypeConditionErrorMessage)(n,_,qe,X)),_n.BREAK;switch(ee=!0,ve.kind){case oe.Kind.INTERFACE_TYPE_DEFINITION:{if(!ve.implementedInterfaceTypeNames.has(qe))break;p.push(ve);return}case oe.Kind.OBJECT_TYPE_DEFINITION:{let gt=l.concreteTypeNamesByAbstractTypeName.get(qe);if(!gt||!gt.has(X))break;p.push(ve);return}case oe.Kind.UNION_TYPE_DEFINITION:{p.push(ve);return}default:return K.push((0,pe.invalidInlineFragmentTypeConditionTypeErrorMessage)(n,_,qe,X,(0,Ge.kindToTypeString)(ve.kind))),_n.BREAK}return K.push((0,pe.invalidInlineFragmentTypeConditionErrorMessage)(n,_,X,(0,Ge.kindToTypeString)(we.kind),qe)),_n.BREAK}},SelectionSet:{enter(){if(!ee){let de=p[J];if(de.kind===oe.Kind.UNION_TYPE_DEFINITION)return K.push((0,pe.unparsableFieldSetSelectionErrorMessage)(n,W)),_n.BREAK;let we=de.fieldDataByFieldName.get(W);if(!we)return K.push((0,pe.undefinedFieldInFieldSetErrorMessage)(n,de.name,W)),_n.BREAK;let qe=(0,ir.getTypeNodeNamedTypeName)(we.node.type),et=l.parentDefinitionDataByTypeName.get(qe),X=et?et.kind:oe.Kind.SCALAR_TYPE_DEFINITION;return K.push((0,pe.invalidSelectionSetDefinitionErrorMessage)(n,_,qe,(0,Ge.kindToTypeString)(X))),_n.BREAK}if(J+=1,ee=!1,J<0||J>=p.length)return K.push((0,pe.unparsableFieldSetSelectionErrorMessage)(n,W)),_n.BREAK;y.push(new Set)},leave(){if(ee){let de=p[J+1];K.push((0,pe.invalidSelectionSetErrorMessage)(n,_,de.name,(0,Ge.kindToTypeString)(de.kind))),ee=!1}J-=1,p.pop(),y.pop()}}}),K.length>0||!Te?{errorMessages:K}:{configuration:{fieldName:r,selectionSet:(0,ti.getNormalizedFieldSet)(c)},errorMessages:K}}validateProvidesOrRequires(t,n,r){let i=[],a=[],o=(0,gn.getParentTypeName)(t);for(let[c,l]of n){let{fieldSetParentData:p,errorString:T}=this.getFieldSetParent(r,t,c,o),y=`${o}.${c}`;if(T){i.push(T);continue}if(!p)continue;let{errorMessages:g,configuration:_}=this.validateConditionalFieldSet(p,l,c,r,o);if(g.length>0){i.push(` On field "${y}": + -`+g.join(ne.HYPHEN_JOIN));continue}_&&a.push(_)}if(i.length>0){this.errors.push((0,pe.invalidProvidesOrRequiresDirectivesError)((0,ti.getConditionalFieldSetDirectiveName)(r),i));return}if(a.length>0)return a}validateInterfaceImplementations(t){if(t.implementedInterfaceTypeNames.size<1)return;let n=t.directivesByDirectiveName.has(ne.INACCESSIBLE),r=new Map,i=new Map,a=!1;for(let o of t.implementedInterfaceTypeNames){let c=this.parentDefinitionDataByTypeName.get(o);if(en.BASE_SCALARS.has(o)&&this.referencedTypeNames.add(o),!c)continue;if(c.kind!==oe.Kind.INTERFACE_TYPE_DEFINITION){i.set(c.name,(0,Ge.kindToTypeString)(c.kind));continue}if(t.name===c.name){a=!0;continue}let l={invalidFieldImplementations:new Map,unimplementedFields:[]},p=!1;for(let[T,y]of c.fieldDataByFieldName){this.unvalidatedExternalFieldCoords.delete(`${t.name}.${T}`);let g=!1,_=t.fieldDataByFieldName.get(T);if(!_){p=!0,l.unimplementedFields.push(T);continue}let F={invalidAdditionalArguments:new Set,invalidImplementedArguments:[],isInaccessible:!1,originalResponseType:(0,$i.printTypeNode)(y.node.type),unimplementedArguments:new Set};(0,gn.isTypeValidImplementation)(y.node.type,_.node.type,this.concreteTypeNamesByAbstractTypeName)||(p=!0,g=!0,F.implementedResponseType=(0,$i.printTypeNode)(_.node.type));let U=new Set;for(let[K,J]of y.argumentDataByArgumentName){U.add(K);let ee=_.argumentDataByArgumentName.get(K);if(!ee){p=!0,g=!0,F.unimplementedArguments.add(K);continue}let W=(0,$i.printTypeNode)(ee.type),Te=(0,$i.printTypeNode)(J.type);Te!==W&&(p=!0,g=!0,F.invalidImplementedArguments.push({actualType:W,argumentName:K,expectedType:Te}))}for(let[K,J]of _.argumentDataByArgumentName)U.has(K)||J.type.kind===oe.Kind.NON_NULL_TYPE&&(p=!0,g=!0,F.invalidAdditionalArguments.add(K));!n&&_.isInaccessible&&!y.isInaccessible&&(p=!0,g=!0,F.isInaccessible=!0),g&&l.invalidFieldImplementations.set(T,F)}p&&r.set(o,l)}i.size>0&&this.errors.push((0,pe.invalidImplementedTypeError)(t.name,i)),a&&this.errors.push((0,pe.selfImplementationError)(t.name)),r.size>0&&this.errors.push((0,pe.invalidInterfaceImplementationError)(t.name,(0,Ge.kindToTypeString)(t.kind),r))}handleAuthenticatedDirective(t,n){let r=(0,Ge.getValueOrDefault)(this.authorizationDataByParentTypeName,n,()=>(0,ar.newAuthorizationData)(n));if(t.kind===oe.Kind.FIELD_DEFINITION){let i=(0,Ge.getValueOrDefault)(r.fieldAuthDataByFieldName,t.name,()=>(0,ar.newFieldAuthorizationData)(t.name));i.inheritedData.requiresAuthentication=!0,i.originalData.requiresAuthentication=!0}else r.requiresAuthentication=!0,this.parentTypeNamesWithAuthDirectives.add(n)}handleOverrideDirective({data:t,directiveCoords:n,errorMessages:r,targetSubgraphName:i}){if(i===this.subgraphName){r.push((0,pe.equivalentSourceAndTargetOverrideErrorMessage)(i,n));return}let a=(0,Ge.getValueOrDefault)(this.overridesByTargetSubgraphName,i,()=>new Map);(0,Ge.getValueOrDefault)(a,t.renamedParentTypeName,()=>new Set).add(t.name)}extractRequiredScopes({directiveCoords:t,orScopes:n,requiredScopes:r}){if(n.length>en.MAX_OR_SCOPES){this.invalidORScopesCoords.add(t);return}for(let i of n){let a=new Set;for(let o of i.values)a.add(o.value);a.size<1||(0,ar.addScopes)(r,a)}}getKafkaPublishConfiguration(t,n,r,i){let a=[],o=ne.DEFAULT_EDFS_PROVIDER_ID;for(let c of t.arguments||[])switch(c.name.value){case ne.TOPIC:{if(c.value.kind!==oe.Kind.STRING||c.value.value.length<1){i.push((0,pe.invalidEventSubjectErrorMessage)(ne.TOPIC));continue}(0,ti.validateArgumentTemplateReferences)(c.value.value,n,i),a.push(c.value.value);break}case ne.PROVIDER_ID:{if(c.value.kind!==oe.Kind.STRING||c.value.value.length<1){i.push(pe.invalidEventProviderIdErrorMessage);continue}o=c.value.value;break}}if(!(i.length>0))return{fieldName:r,providerId:o,providerType:ne.PROVIDER_TYPE_KAFKA,topics:a,type:ne.PUBLISH}}getKafkaSubscribeConfiguration(t,n,r,i){let a=[],o=ne.DEFAULT_EDFS_PROVIDER_ID;for(let c of t.arguments||[])switch(c.name.value){case ne.TOPICS:{if(c.value.kind!==oe.Kind.LIST){i.push((0,pe.invalidEventSubjectsErrorMessage)(ne.TOPICS));continue}for(let l of c.value.values){if(l.kind!==oe.Kind.STRING||l.value.length<1){i.push((0,pe.invalidEventSubjectsItemErrorMessage)(ne.TOPICS));break}(0,ti.validateArgumentTemplateReferences)(l.value,n,i),a.push(l.value)}break}case ne.PROVIDER_ID:{if(c.value.kind!==oe.Kind.STRING||c.value.value.length<1){i.push(pe.invalidEventProviderIdErrorMessage);continue}o=c.value.value;break}}if(!(i.length>0))return{fieldName:r,providerId:o,providerType:ne.PROVIDER_TYPE_KAFKA,topics:a,type:ne.SUBSCRIBE}}getNatsPublishAndRequestConfiguration(t,n,r,i,a){let o=[],c=ne.DEFAULT_EDFS_PROVIDER_ID;for(let l of n.arguments||[])switch(l.name.value){case ne.SUBJECT:{if(l.value.kind!==oe.Kind.STRING||l.value.value.length<1){a.push((0,pe.invalidEventSubjectErrorMessage)(ne.SUBJECT));continue}(0,ti.validateArgumentTemplateReferences)(l.value.value,r,a),o.push(l.value.value);break}case ne.PROVIDER_ID:{if(l.value.kind!==oe.Kind.STRING||l.value.value.length<1){a.push(pe.invalidEventProviderIdErrorMessage);continue}c=l.value.value;break}}if(!(a.length>0))return{fieldName:i,providerId:c,providerType:ne.PROVIDER_TYPE_NATS,subjects:o,type:t}}getNatsSubscribeConfiguration(t,n,r,i){let a=[],o=ne.DEFAULT_EDFS_PROVIDER_ID,c=cE.DEFAULT_CONSUMER_INACTIVE_THRESHOLD,l="",p="";for(let T of t.arguments||[])switch(T.name.value){case ne.SUBJECTS:{if(T.value.kind!==oe.Kind.LIST){i.push((0,pe.invalidEventSubjectsErrorMessage)(ne.SUBJECTS));continue}for(let y of T.value.values){if(y.kind!==oe.Kind.STRING||y.value.length<1){i.push((0,pe.invalidEventSubjectsItemErrorMessage)(ne.SUBJECTS));break}(0,ti.validateArgumentTemplateReferences)(y.value,n,i),a.push(y.value)}break}case ne.PROVIDER_ID:{if(T.value.kind!==oe.Kind.STRING||T.value.value.length<1){i.push(pe.invalidEventProviderIdErrorMessage);continue}o=T.value.value;break}case ne.STREAM_CONFIGURATION:{if(this.usesEdfsNatsStreamConfiguration=!0,T.value.kind!==oe.Kind.OBJECT||T.value.fields.length<1){i.push(pe.invalidNatsStreamInputErrorMessage);continue}let y=!0,g=new Set,_=new Set(uE.STREAM_CONFIGURATION_FIELD_NAMES),F=new Set([ne.CONSUMER_NAME,ne.STREAM_NAME]),U=new Set,K=new Set;for(let J of T.value.fields){let ee=J.name.value;if(!uE.STREAM_CONFIGURATION_FIELD_NAMES.has(ee)){g.add(ee),y=!1;continue}if(_.has(ee))_.delete(ee);else{U.add(ee),y=!1;continue}switch(F.has(ee)&&F.delete(ee),ee){case ne.CONSUMER_NAME:if(J.value.kind!=oe.Kind.STRING||J.value.value.length<1){K.add(ee),y=!1;continue}l=J.value.value;break;case ne.STREAM_NAME:if(J.value.kind!=oe.Kind.STRING||J.value.value.length<1){K.add(ee),y=!1;continue}p=J.value.value;break;case ne.CONSUMER_INACTIVE_THRESHOLD:if(J.value.kind!=oe.Kind.INT){i.push((0,pe.invalidArgumentValueErrorMessage)((0,oe.print)(J.value),"edfs__NatsStreamConfiguration","consumerInactiveThreshold",ne.INT_SCALAR)),y=!1;continue}try{c=parseInt(J.value.value,10)}catch(W){i.push((0,pe.invalidArgumentValueErrorMessage)((0,oe.print)(J.value),"edfs__NatsStreamConfiguration","consumerInactiveThreshold",ne.INT_SCALAR)),y=!1}break}}(!y||F.size>0)&&i.push((0,pe.invalidNatsStreamInputFieldsErrorMessage)([...F],[...U],[...K],[...g]))}}if(!(i.length>0))return c<0?(c=cE.DEFAULT_CONSUMER_INACTIVE_THRESHOLD,this.warnings.push((0,Ss.consumerInactiveThresholdInvalidValueWarning)(this.subgraphName,`The value has been set to ${cE.DEFAULT_CONSUMER_INACTIVE_THRESHOLD}.`))):c>Lce.MAX_INT32&&(c=0,this.warnings.push((0,Ss.consumerInactiveThresholdInvalidValueWarning)(this.subgraphName,"The value has been set to 0. This means the consumer will remain indefinitely active until its manual deletion."))),M({fieldName:r,providerId:o,providerType:ne.PROVIDER_TYPE_NATS,subjects:a,type:ne.SUBSCRIBE},l&&p?{streamConfiguration:{consumerInactiveThreshold:c,consumerName:l,streamName:p}}:{})}getRedisPublishConfiguration(t,n,r,i){let a=[],o=ne.DEFAULT_EDFS_PROVIDER_ID;for(let c of t.arguments||[])switch(c.name.value){case ne.CHANNEL:{if(c.value.kind!==oe.Kind.STRING||c.value.value.length<1){i.push((0,pe.invalidEventSubjectErrorMessage)(ne.CHANNEL));continue}(0,ti.validateArgumentTemplateReferences)(c.value.value,n,i),a.push(c.value.value);break}case ne.PROVIDER_ID:{if(c.value.kind!==oe.Kind.STRING||c.value.value.length<1){i.push(pe.invalidEventProviderIdErrorMessage);continue}o=c.value.value;break}}if(!(i.length>0))return{fieldName:r,providerId:o,providerType:ne.PROVIDER_TYPE_REDIS,channels:a,type:ne.PUBLISH}}getRedisSubscribeConfiguration(t,n,r,i){let a=[],o=ne.DEFAULT_EDFS_PROVIDER_ID;for(let c of t.arguments||[])switch(c.name.value){case ne.CHANNELS:{if(c.value.kind!==oe.Kind.LIST){i.push((0,pe.invalidEventSubjectsErrorMessage)(ne.CHANNELS));continue}for(let l of c.value.values){if(l.kind!==oe.Kind.STRING||l.value.length<1){i.push((0,pe.invalidEventSubjectsItemErrorMessage)(ne.CHANNELS));break}(0,ti.validateArgumentTemplateReferences)(l.value,n,i),a.push(l.value)}break}case ne.PROVIDER_ID:{if(c.value.kind!==oe.Kind.STRING||c.value.value.length<1){i.push(pe.invalidEventProviderIdErrorMessage);continue}o=c.value.value;break}}if(!(i.length>0))return{fieldName:r,providerId:o,providerType:ne.PROVIDER_TYPE_REDIS,channels:a,type:ne.SUBSCRIBE}}validateSubscriptionFilterDirectiveLocation(t){if(!t.directives)return;let n=this.renamedParentTypeName||this.originalParentTypeName,r=`${n}.${t.name.value}`,i=this.getOperationTypeNodeForRootTypeName(n)===oe.OperationTypeNode.SUBSCRIPTION;for(let a of t.directives)if(a.name.value===ne.SUBSCRIPTION_FILTER&&!i){this.errors.push((0,pe.invalidSubscriptionFilterLocationError)(r));return}}extractEventDirectivesToConfiguration(t,n){if(!t.directives)return;let r=t.name.value,i=`${this.renamedParentTypeName||this.originalParentTypeName}.${r}`;for(let a of t.directives){let o=[],c;switch(a.name.value){case ne.EDFS_KAFKA_PUBLISH:c=this.getKafkaPublishConfiguration(a,n,r,o);break;case ne.EDFS_KAFKA_SUBSCRIBE:c=this.getKafkaSubscribeConfiguration(a,n,r,o);break;case ne.EDFS_NATS_PUBLISH:{c=this.getNatsPublishAndRequestConfiguration(ne.PUBLISH,a,n,r,o);break}case ne.EDFS_NATS_REQUEST:{c=this.getNatsPublishAndRequestConfiguration(ne.REQUEST,a,n,r,o);break}case ne.EDFS_NATS_SUBSCRIBE:{c=this.getNatsSubscribeConfiguration(a,n,r,o);break}case ne.EDFS_REDIS_PUBLISH:{c=this.getRedisPublishConfiguration(a,n,r,o);break}case ne.EDFS_REDIS_SUBSCRIBE:{c=this.getRedisSubscribeConfiguration(a,n,r,o);break}default:continue}if(o.length>0){this.errors.push((0,pe.invalidEventDirectiveError)(a.name.value,i,o));continue}c&&(0,Ge.getValueOrDefault)(this.eventsConfigurations,this.renamedParentTypeName||this.originalParentTypeName,()=>[]).push(c)}}getValidEventsDirectiveNamesForOperationTypeNode(t){switch(t){case oe.OperationTypeNode.MUTATION:return new Set([ne.EDFS_KAFKA_PUBLISH,ne.EDFS_NATS_PUBLISH,ne.EDFS_NATS_REQUEST,ne.EDFS_REDIS_PUBLISH]);case oe.OperationTypeNode.QUERY:return new Set([ne.EDFS_NATS_REQUEST]);case oe.OperationTypeNode.SUBSCRIPTION:return new Set([ne.EDFS_KAFKA_SUBSCRIBE,ne.EDFS_NATS_SUBSCRIBE,ne.EDFS_REDIS_SUBSCRIBE])}}getOperationTypeNodeForRootTypeName(t){let n=this.operationTypeNodeByTypeName.get(t);if(n)return n;switch(t){case ne.MUTATION:return oe.OperationTypeNode.MUTATION;case ne.QUERY:return oe.OperationTypeNode.QUERY;case ne.SUBSCRIPTION:return oe.OperationTypeNode.SUBSCRIPTION;default:return}}validateEventDrivenRootType(t,n,r,i){let a=this.getOperationTypeNodeForRootTypeName(t.name);if(!a){this.errors.push((0,pe.invalidRootTypeError)(t.name));return}let o=this.getValidEventsDirectiveNamesForOperationTypeNode(a);for(let[c,l]of t.fieldDataByFieldName){let p=`${l.originalParentTypeName}.${c}`,T=new Set;for(let K of uE.EVENT_DIRECTIVE_NAMES)l.directivesByDirectiveName.has(K)&&T.add(K);let y=new Set;for(let K of T)o.has(K)||y.add(K);if((T.size<1||y.size>0)&&n.set(p,{definesDirectives:T.size>0,invalidDirectiveNames:[...y]}),a===oe.OperationTypeNode.MUTATION){let K=(0,$i.printTypeNode)(l.type);K!==ne.NON_NULLABLE_EDFS_PUBLISH_EVENT_RESULT&&i.set(p,K);continue}let g=(0,$i.printTypeNode)(l.type),_=l.namedTypeName+"!",F=!1,U=this.concreteTypeNamesByAbstractTypeName.get(l.namedTypeName)||new Set([l.namedTypeName]);for(let K of U)if(F||(F=this.entityDataByTypeName.has(K)),F)break;(!F||g!==_)&&r.set(p,g)}}validateEventDrivenKeyDefinition(t,n){let r=this.keyFieldSetDatasByTypeName.get(t);if(r)for(let[i,{isUnresolvable:a}]of r)a||(0,Ge.getValueOrDefault)(n,t,()=>[]).push(i)}validateEventDrivenObjectFields(t,n,r,i){var a;for(let[o,c]of t){let l=`${c.originalParentTypeName}.${o}`;if(n.has(o)){(a=c.externalFieldDataBySubgraphName.get(this.subgraphName))!=null&&a.isDefinedExternal||r.set(l,o);continue}i.set(l,o)}}isEdfsPublishResultValid(){let t=this.parentDefinitionDataByTypeName.get(ne.EDFS_PUBLISH_RESULT);if(!t)return!0;if(t.kind!==oe.Kind.OBJECT_TYPE_DEFINITION||t.fieldDataByFieldName.size!=1)return!1;for(let[n,r]of t.fieldDataByFieldName)if(r.argumentDataByArgumentName.size>0||n!==ne.SUCCESS||(0,$i.printTypeNode)(r.type)!==ne.NON_NULLABLE_BOOLEAN)return!1;return!0}isNatsStreamConfigurationInputObjectValid(t){if(t.kind!==oe.Kind.INPUT_OBJECT_TYPE_DEFINITION||t.inputValueDataByValueName.size!=3)return!1;for(let[n,r]of t.inputValueDataByValueName)switch(n){case ne.CONSUMER_INACTIVE_THRESHOLD:{if((0,$i.printTypeNode)(r.type)!==ne.NON_NULLABLE_INT||!r.defaultValue||r.defaultValue.kind!==oe.Kind.INT||r.defaultValue.value!==`${cE.DEFAULT_CONSUMER_INACTIVE_THRESHOLD}`)return!1;break}case ne.CONSUMER_NAME:case ne.STREAM_NAME:{if((0,$i.printTypeNode)(r.type)!==ne.NON_NULLABLE_STRING)return!1;break}default:return!1}return!0}validateEventDrivenSubgraph(t){let n=[],r=new Map,i=new Map,a=new Map,o=new Map,c=new Map,l=new Map,p=new Set,T=new Set;for(let[y,g]of this.parentDefinitionDataByTypeName){if(y===ne.EDFS_PUBLISH_RESULT||y===ne.EDFS_NATS_STREAM_CONFIGURATION||g.kind!==oe.Kind.OBJECT_TYPE_DEFINITION)continue;if(g.isRootType){this.validateEventDrivenRootType(g,r,i,a);continue}let _=this.keyFieldNamesByParentTypeName.get(y);if(!_){T.add(y);continue}this.validateEventDrivenKeyDefinition(y,o),this.validateEventDrivenObjectFields(g.fieldDataByFieldName,_,c,l)}if(this.isEdfsPublishResultValid()||n.push(pe.invalidEdfsPublishResultObjectErrorMessage),this.edfsDirectiveReferences.has(ne.EDFS_NATS_SUBSCRIBE)){let y=this.parentDefinitionDataByTypeName.get(ne.EDFS_NATS_STREAM_CONFIGURATION);y&&this.usesEdfsNatsStreamConfiguration&&!this.isNatsStreamConfigurationInputObjectValid(y)&&n.push(pe.invalidNatsStreamConfigurationDefinitionErrorMessage),this.parentDefinitionDataByTypeName.delete(ne.EDFS_NATS_STREAM_CONFIGURATION),t.push(en.EDFS_NATS_STREAM_CONFIGURATION_DEFINITION)}this.referencedDirectiveNames.has(ne.LINK)&&(t.push(en.LINK_DEFINITION),t.push(en.LINK_IMPORT_DEFINITION),t.push(en.LINK_PURPOSE_DEFINITION)),r.size>0&&n.push((0,pe.invalidRootTypeFieldEventsDirectivesErrorMessage)(r)),a.size>0&&n.push((0,pe.invalidEventDrivenMutationResponseTypeErrorMessage)(a)),i.size>0&&n.push((0,pe.invalidRootTypeFieldResponseTypesEventDrivenErrorMessage)(i)),o.size>0&&n.push((0,pe.invalidKeyFieldSetsEventDrivenErrorMessage)(o)),c.size>0&&n.push((0,pe.nonExternalKeyFieldNamesEventDrivenErrorMessage)(c)),l.size>0&&n.push((0,pe.nonKeyFieldNamesEventDrivenErrorMessage)(l)),p.size>0&&n.push((0,pe.nonEntityObjectExtensionsEventDrivenErrorMessage)([...p])),T.size>0&&n.push((0,pe.nonKeyComposingObjectTypeNamesEventDrivenErrorMessage)([...T])),n.length>0&&this.errors.push((0,pe.invalidEventDrivenGraphError)(n))}validateUnionMembers(t){if(t.memberByMemberTypeName.size<1){this.errors.push((0,pe.noDefinedUnionMembersError)(t.name));return}let n=[];for(let r of t.memberByMemberTypeName.keys()){let i=this.parentDefinitionDataByTypeName.get(r);i&&i.kind!==oe.Kind.OBJECT_TYPE_DEFINITION&&n.push(`"${r}", which is type "${(0,Ge.kindToTypeString)(i.kind)}"`)}n.length>0&&this.errors.push((0,pe.invalidUnionMemberTypeError)(t.name,n))}addConcreteTypeNamesForUnion(t){if(!t.types||t.types.length<1)return;let n=t.name.value;for(let r of t.types){let i=r.name.value;(0,Ge.getValueOrDefault)(this.concreteTypeNamesByAbstractTypeName,n,()=>new Set).add(i),this.internalGraph.addEdge(this.internalGraph.addOrUpdateNode(n,{isAbstract:!0}),this.internalGraph.addOrUpdateNode(i),i,!0)}}addValidKeyFieldSetConfigurations(){for(let[t,n]of this.keyFieldSetDatasByTypeName){let r=this.parentDefinitionDataByTypeName.get(t);if(!r||r.kind!==oe.Kind.OBJECT_TYPE_DEFINITION&&r.kind!==oe.Kind.INTERFACE_TYPE_DEFINITION){this.errors.push((0,pe.undefinedCompositeOutputTypeError)(t));continue}let i=(0,gn.getParentTypeName)(r),a=(0,Ge.getValueOrDefault)(this.configurationDataByTypeName,i,()=>(0,Pp.newConfigurationData)(!0,i)),o=(0,ti.validateKeyFieldSets)(this,r,n);o&&(a.keys=o)}}getValidFlattenedDirectiveArray(t,n){let r=[];for(let[i,a]of t){let o=this.directiveDefinitionDataByDirectiveName.get(i);if(!o)continue;if(!o.isRepeatable&&a.length>1){let p=(0,Ge.getValueOrDefault)(this.invalidRepeatedDirectiveNameByCoords,n,()=>new Set);p.has(i)||(p.add(i),this.errors.push((0,pe.invalidDirectiveError)(i,n,"1st",[(0,pe.invalidRepeatedDirectiveErrorMessage)(i)])));continue}if(i!==ne.KEY){r.push(...a);continue}let c=[],l=new Set;for(let p=0;pnew Set).add(U)),(0,Ge.getValueOrDefault)(a.keyFieldNamesByParentTypeName,_,()=>new Set).add(F);let ee=(0,ir.getTypeNodeNamedTypeName)(K.node.type);if(en.BASE_SCALARS.has(ee))return;let W=a.parentDefinitionDataByTypeName.get(ee);if(!W)return _n.BREAK;if(W.kind===oe.Kind.OBJECT_TYPE_DEFINITION){T=!0,c.push(W);return}if((0,Dn.isKindAbstract)(W.kind))return _n.BREAK}},InlineFragment:{enter(){return _n.BREAK}},SelectionSet:{enter(){if(!T||(p+=1,T=!1,p<0||p>=c.length))return _n.BREAK},leave(){T&&(T=!1),p-=1,c.pop()}}}),!(l.size<1))for(let[y,g]of l)this.warnings.push((0,Ss.externalEntityExtensionKeyFieldWarning)(i.name,y,[...g],this.subgraphName))}}for(let n of t)this.keyFieldSetDatasByTypeName.delete(n)}addValidConditionalFieldSetConfigurations(){for(let[t,n]of this.fieldSetDataByTypeName){let r=this.parentDefinitionDataByTypeName.get(t);if(!r||r.kind!==oe.Kind.OBJECT_TYPE_DEFINITION&&r.kind!==oe.Kind.INTERFACE_TYPE_DEFINITION){this.errors.push((0,pe.undefinedCompositeOutputTypeError)(t));continue}let i=(0,gn.getParentTypeName)(r),a=(0,Ge.getValueOrDefault)(this.configurationDataByTypeName,i,()=>(0,Pp.newConfigurationData)(!1,i)),o=this.validateProvidesOrRequires(r,n.provides,!0);o&&(a.provides=o);let c=this.validateProvidesOrRequires(r,n.requires,!1);c&&(a.requires=c)}}addFieldNamesToConfigurationData(t,n){let r=new Set;for(let[i,a]of t){let o=a.externalFieldDataBySubgraphName.get(this.subgraphName);if(!o||o.isUnconditionallyProvided){n.fieldNames.add(i);continue}r.add(i),this.edfsDirectiveReferences.size>0&&n.fieldNames.add(i)}r.size>0&&(n.externalFieldNames=r)}normalize(t){var a;(0,yq.upsertDirectiveSchemaAndEntityDefinitions)(this,t),(0,yq.upsertParentsAndChildren)(this,t),this.validateDirectives(this.schemaData,ne.SCHEMA);for(let[o,c]of this.parentDefinitionDataByTypeName)this.validateDirectives(c,o);this.invalidORScopesCoords.size>0&&this.errors.push((0,pe.orScopesLimitError)(en.MAX_OR_SCOPES,[...this.invalidORScopesCoords]));let n=[];for(let o of en.BASE_DIRECTIVE_DEFINITIONS)n.push(o);if(n.push(en.FIELD_SET_SCALAR_DEFINITION),this.isSubgraphVersionTwo){for(let o of en.VERSION_TWO_DIRECTIVE_DEFINITIONS)n.push(o),this.directiveDefinitionByDirectiveName.set(o.name.value,o);n.push(en.SCOPE_SCALAR_DEFINITION)}for(let o of this.edfsDirectiveReferences){let c=en.EVENT_DRIVEN_DIRECTIVE_DEFINITIONS_BY_DIRECTIVE_NAME.get(o);if(!c){this.errors.push((0,pe.invalidEdfsDirectiveName)(o));continue}n.push(c)}this.edfsDirectiveReferences.size>0&&this.referencedDirectiveNames.has(ne.SUBSCRIPTION_FILTER)&&(n.push(en.SUBSCRIPTION_FILTER_DEFINITION),n.push(en.SUBSCRIPTION_FILTER_CONDITION_DEFINITION),n.push(en.SUBSCRIPTION_FIELD_CONDITION_DEFINITION),n.push(en.SUBSCRIPTION_FILTER_VALUE_DEFINITION)),this.referencedDirectiveNames.has(ne.CONFIGURE_DESCRIPTION)&&n.push(en.CONFIGURE_DESCRIPTION_DEFINITION),this.referencedDirectiveNames.has(ne.CONFIGURE_CHILD_DESCRIPTIONS)&&n.push(en.CONFIGURE_CHILD_DESCRIPTIONS_DEFINITION);for(let o of this.customDirectiveDefinitions.values())n.push(o);this.schemaData.operationTypes.size>0&&n.push(this.getSchemaNodeByData(this.schemaData));for(let o of this.invalidConfigureDescriptionNodeDatas)o.description||this.errors.push((0,pe.configureDescriptionNoDescriptionError)((0,Ge.kindToTypeString)(o.kind),o.name));this.evaluateExternalKeyFields();for(let[o,c]of this.parentDefinitionDataByTypeName)switch(c.kind){case oe.Kind.ENUM_TYPE_DEFINITION:if(c.enumValueDataByValueName.size<1){this.errors.push((0,pe.noDefinedEnumValuesError)(o));break}n.push(this.getEnumNodeByData(c));break;case oe.Kind.INPUT_OBJECT_TYPE_DEFINITION:if(c.inputValueDataByValueName.size<1){this.errors.push((0,pe.noInputValueDefinitionsError)(o));break}n.push(this.getInputObjectNodeByData(c));break;case oe.Kind.INTERFACE_TYPE_DEFINITION:case oe.Kind.OBJECT_TYPE_DEFINITION:let l=this.entityDataByTypeName.has(o),p=this.operationTypeNodeByTypeName.get(o),T=c.kind===oe.Kind.OBJECT_TYPE_DEFINITION;if(this.isSubgraphVersionTwo&&c.extensionType===$a.ExtensionType.EXTENDS&&(c.extensionType=$a.ExtensionType.NONE),p&&(c.fieldDataByFieldName.delete(ne.SERVICE_FIELD),c.fieldDataByFieldName.delete(ne.ENTITIES_FIELD)),(0,gn.removeInheritableDirectivesFromObjectParent)(c),this.parentsWithChildArguments.has(o)||!T){let U=[];for(let[K,J]of c.fieldDataByFieldName)!T&&((a=J.externalFieldDataBySubgraphName.get(this.subgraphName))!=null&&a.isDefinedExternal)&&U.push(K),this.validateArguments(J,`${o}.${K}`);U.length>0&&(this.isSubgraphVersionTwo?this.errors.push((0,pe.externalInterfaceFieldsError)(o,U)):this.warnings.push((0,Ss.externalInterfaceFieldsWarning)(this.subgraphName,o,U)))}let y=(0,gn.getParentTypeName)(c),g=(0,Ge.getValueOrDefault)(this.configurationDataByTypeName,y,()=>(0,Pp.newConfigurationData)(l,o)),_=this.entityInterfaceDataByTypeName.get(o);if(_){_.fieldDatas=(0,ar.fieldDatasToSimpleFieldDatas)(c.fieldDataByFieldName.values());let U=this.concreteTypeNamesByAbstractTypeName.get(o);U&&(0,Ge.addIterableValuesToSet)(U,_.concreteTypeNames),g.isInterfaceObject=_.isInterfaceObject,g.entityInterfaceConcreteTypeNames=_.concreteTypeNames}let F=this.eventsConfigurations.get(y);F&&(g.events=F),this.addFieldNamesToConfigurationData(c.fieldDataByFieldName,g),this.validateInterfaceImplementations(c),n.push(this.getCompositeOutputNodeByData(c)),c.fieldDataByFieldName.size<1&&!(0,ti.isNodeQuery)(o,p)&&this.errors.push((0,pe.noFieldDefinitionsError)((0,Ge.kindToTypeString)(c.kind),o));break;case oe.Kind.SCALAR_TYPE_DEFINITION:if(c.extensionType===$a.ExtensionType.REAL){this.errors.push((0,pe.noBaseScalarDefinitionError)(o));break}n.push(this.getScalarNodeByData(c));break;case oe.Kind.UNION_TYPE_DEFINITION:n.push(this.getUnionNodeByData(c)),this.validateUnionMembers(c);break;default:throw(0,pe.unexpectedKindFatalError)(o)}this.addValidConditionalFieldSetConfigurations(),this.addValidKeyFieldSetConfigurations();for(let o of Object.values(oe.OperationTypeNode)){let c=this.schemaData.operationTypes.get(o),l=(0,Ge.getOrThrowError)(Dn.operationTypeNodeToDefaultType,o,ne.OPERATION_TO_DEFAULT),p=c?(0,ir.getTypeNodeNamedTypeName)(c.type):l;if(en.BASE_SCALARS.has(p)&&this.referencedTypeNames.add(p),p!==l&&this.parentDefinitionDataByTypeName.has(l)){this.errors.push((0,pe.invalidRootTypeDefinitionError)(o,p,l));continue}let T=this.parentDefinitionDataByTypeName.get(p);if(c){if(!T)continue;this.operationTypeNodeByTypeName.set(p,o)}if(!T)continue;let y=this.configurationDataByTypeName.get(l);y&&(y.isRootNode=!0,y.typeName=l),T.kind!==oe.Kind.OBJECT_TYPE_DEFINITION&&this.errors.push((0,pe.operationDefinitionError)(p,o,T.kind))}for(let o of this.referencedTypeNames){let c=this.parentDefinitionDataByTypeName.get(o);if(c){if(c.kind!==oe.Kind.INTERFACE_TYPE_DEFINITION)continue;let l=this.concreteTypeNamesByAbstractTypeName.get(o);(!l||l.size<0)&&this.warnings.push((0,Ss.unimplementedInterfaceOutputTypeWarning)(this.subgraphName,o));continue}this.entityDataByTypeName.has(o)||this.errors.push((0,pe.undefinedTypeError)(o))}let r=new Map;for(let o of this.directiveDefinitionByDirectiveName.values()){let c=(0,Dn.extractExecutableDirectiveLocations)(o.locations,new Set);c.size<1||this.addPersistedDirectiveDefinitionDataByNode(r,o,c)}this.isSubgraphEventDrivenGraph=this.edfsDirectiveReferences.size>0,this.isSubgraphEventDrivenGraph&&this.validateEventDrivenSubgraph(n);for(let o of this.unvalidatedExternalFieldCoords)this.isSubgraphVersionTwo?this.errors.push((0,pe.invalidExternalDirectiveError)(o)):this.warnings.push((0,Ss.invalidExternalFieldWarning)(o,this.subgraphName));if(this.errors.length>0)return{success:!1,errors:this.errors,warnings:this.warnings};let i={kind:oe.Kind.DOCUMENT,definitions:n};return{authorizationDataByParentTypeName:this.authorizationDataByParentTypeName,concreteTypeNamesByAbstractTypeName:this.concreteTypeNamesByAbstractTypeName,conditionalFieldDataByCoordinates:this.conditionalFieldDataByCoords,configurationDataByTypeName:this.configurationDataByTypeName,entityDataByTypeName:this.entityDataByTypeName,entityInterfaces:this.entityInterfaceDataByTypeName,fieldCoordsByNamedTypeName:this.fieldCoordsByNamedTypeName,isEventDrivenGraph:this.isSubgraphEventDrivenGraph,isVersionTwo:this.isSubgraphVersionTwo,keyFieldNamesByParentTypeName:this.keyFieldNamesByParentTypeName,keyFieldSetsByEntityTypeNameByKeyFieldCoords:this.keyFieldSetsByEntityTypeNameByFieldCoords,operationTypes:this.operationTypeNodeByTypeName,originalTypeNameByRenamedTypeName:this.originalTypeNameByRenamedTypeName,overridesByTargetSubgraphName:this.overridesByTargetSubgraphName,parentDefinitionDataByTypeName:this.parentDefinitionDataByTypeName,persistedDirectiveDefinitionDataByDirectiveName:r,subgraphAST:i,subgraphString:(0,oe.print)(i),schema:(0,Pce.buildASTSchema)(i,{assumeValid:!0,assumeValidSDL:!0}),success:!0,warnings:this.warnings}}};sc.NormalizationFactory=wp;function Bce(e){let t=new Map,n=new Map,r=new Map,i=new Map,a=new Map,o=new Map,c=new Set,l=new Map,p=new Set,T=new Set,y=[],g=new Set,_=new Map,F=[],U=[];for(let ee of e)ee.name&&(0,wce.recordSubgraphName)(ee.name,p,T);let K=new LO.Graph;for(let ee=0;ee0&&F.push(...de.warnings),!de.success){U.push((0,pe.subgraphValidationError)(Te,de.errors));continue}if(!de){U.push((0,pe.subgraphValidationError)(Te,[pe.subgraphValidationFailureError]));continue}l.set(Te,de.parentDefinitionDataByTypeName);for(let we of de.authorizationDataByParentTypeName.values())(0,ar.upsertAuthorizationData)(t,we,g);for(let[we,qe]of de.fieldCoordsByNamedTypeName)(0,Ge.addIterableValuesToSet)(qe,(0,Ge.getValueOrDefault)(_,we,()=>new Set));for(let[we,qe]of de.concreteTypeNamesByAbstractTypeName){let et=n.get(we);if(!et){n.set(we,new Set(qe));continue}(0,Ge.addIterableValuesToSet)(qe,et)}for(let[we,qe]of de.entityDataByTypeName){let et=qe.keyFieldSetDatasBySubgraphName.get(Te);et&&(0,ar.upsertEntityData)({entityDataByTypeName:r,keyFieldSetDataByFieldSet:et,typeName:we,subgraphName:Te})}if(W.name&&i.set(Te,{conditionalFieldDataByCoordinates:de.conditionalFieldDataByCoordinates,configurationDataByTypeName:de.configurationDataByTypeName,definitions:de.subgraphAST,entityInterfaces:de.entityInterfaces,isVersionTwo:de.isVersionTwo,keyFieldNamesByParentTypeName:de.keyFieldNamesByParentTypeName,name:Te,operationTypes:de.operationTypes,overriddenFieldNamesByParentTypeName:new Map,parentDefinitionDataByTypeName:de.parentDefinitionDataByTypeName,persistedDirectiveDefinitionDataByDirectiveName:de.persistedDirectiveDefinitionDataByDirectiveName,schema:de.schema,url:W.url}),!(de.overridesByTargetSubgraphName.size<1))for(let[we,qe]of de.overridesByTargetSubgraphName){let et=p.has(we);for(let[X,ve]of qe){let gt=de.originalTypeNameByRenamedTypeName.get(X)||X;if(!et)F.push((0,Ss.invalidOverrideTargetSubgraphNameWarning)(we,gt,[...ve],W.name));else{let Ht=(0,Ge.getValueOrDefault)(a,we,()=>new Map),zt=(0,Ge.getValueOrDefault)(Ht,X,()=>new Set(ve));(0,Ge.addIterableValuesToSet)(ve,zt)}for(let Ht of ve){let zt=`${gt}.${Ht}`,bn=o.get(zt);if(!bn){o.set(zt,[Te]);continue}bn.push(Te),c.add(zt)}}}}let J=[];if(g.size>0&&J.push((0,pe.orScopesLimitError)(en.MAX_OR_SCOPES,[...g])),(y.length>0||T.size>0)&&J.push((0,pe.invalidSubgraphNamesError)([...T],y)),c.size>0){let ee=[];for(let W of c){let Te=(0,Ge.getOrThrowError)(o,W,"overrideSourceSubgraphNamesByFieldPath");ee.push((0,pe.duplicateOverriddenFieldErrorMessage)(W,Te))}J.push((0,pe.duplicateOverriddenFieldsError)(ee))}if(J.push(...U),J.length>0)return{errors:J,success:!1,warnings:F};for(let[ee,W]of a){let Te=(0,Ge.getOrThrowError)(i,ee,"internalSubgraphBySubgraphName");Te.overriddenFieldNamesByParentTypeName=W;for(let[de,we]of W){let qe=Te.configurationDataByTypeName.get(de);qe&&((0,ar.subtractSet)(we,qe.fieldNames),qe.fieldNames.size<1&&Te.configurationDataByTypeName.delete(de))}}return{authorizationDataByParentTypeName:t,concreteTypeNamesByAbstractTypeName:n,entityDataByTypeName:r,fieldCoordsByNamedTypeName:_,internalSubgraphBySubgraphName:i,internalGraph:K,success:!0,warnings:F}}});var lE=w(cc=>{"use strict";f();N();m();Object.defineProperty(cc,"__esModule",{value:!0});cc.DivergentType=void 0;cc.getLeastRestrictiveMergedTypeNode=kce;cc.getMostRestrictiveMergedTypeNode=Mce;cc.renameNamedTypeName=xce;var oc=Ae(),_q=sa(),Uce=Jo(),gq=Jr(),vq=nl(),uc;(function(e){e[e.NONE=0]="NONE",e[e.CURRENT=1]="CURRENT",e[e.OTHER=2]="OTHER"})(uc||(cc.DivergentType=uc={}));function Sq(e,t,n,r,i){t=(0,Uce.getMutableTypeNode)(t,n,i);let a={kind:e.kind},o=uc.NONE,c=a;for(let l=0;l{"use strict";f();N();m();Object.defineProperty(UO,"__esModule",{value:!0});UO.renameRootTypes=jce;var qce=Ae(),BO=Jr(),Vce=lE(),au=lr(),lc=Hr();function jce(e,t){let n,r=!1,i;(0,qce.visit)(t.definitions,{FieldDefinition:{enter(a){let o=a.name.value;if(r&&(o===au.SERVICE_FIELD||o===au.ENTITIES_FIELD))return n.fieldDataByFieldName.delete(o),!1;let c=n.name,l=(0,lc.getOrThrowError)(n.fieldDataByFieldName,o,`${c}.fieldDataByFieldName`),p=t.operationTypes.get(l.namedTypeName);if(p){let T=(0,lc.getOrThrowError)(BO.operationTypeNodeToDefaultType,p,au.OPERATION_TO_DEFAULT);l.namedTypeName!==T&&(0,Vce.renameNamedTypeName)(l,T,e.errors)}return i!=null&&i.has(o)&&l.isShareableBySubgraphName.delete(t.name),!1}},InterfaceTypeDefinition:{enter(a){let o=a.name.value;if(!e.entityInterfaceFederationDataByTypeName.get(o))return!1;n=(0,lc.getOrThrowError)(t.parentDefinitionDataByTypeName,o,au.PARENT_DEFINITION_DATA)},leave(){n=void 0}},ObjectTypeDefinition:{enter(a){let o=a.name.value,c=t.operationTypes.get(o),l=c?(0,lc.getOrThrowError)(BO.operationTypeNodeToDefaultType,c,au.OPERATION_TO_DEFAULT):o;n=(0,lc.getOrThrowError)(t.parentDefinitionDataByTypeName,o,au.PARENT_DEFINITION_DATA),r=n.isRootType,!e.entityInterfaceFederationDataByTypeName.get(o)&&(e.addValidPrimaryKeyTargetsToEntityData(o),i=t.overriddenFieldNamesByParentTypeName.get(l),o!==l&&(n.name=l,t.parentDefinitionDataByTypeName.set(l,n),t.parentDefinitionDataByTypeName.delete(o)))},leave(){n=void 0,r=!1,i=void 0}},ObjectTypeExtension:{enter(a){let o=a.name.value,c=t.operationTypes.get(o),l=c?(0,lc.getOrThrowError)(BO.operationTypeNodeToDefaultType,c,au.OPERATION_TO_DEFAULT):o;n=(0,lc.getOrThrowError)(t.parentDefinitionDataByTypeName,o,au.PARENT_DEFINITION_DATA),r=n.isRootType,e.addValidPrimaryKeyTargetsToEntityData(o),i=t.overriddenFieldNamesByParentTypeName.get(o),o!==l&&(n.name=l,t.parentDefinitionDataByTypeName.set(l,n),t.parentDefinitionDataByTypeName.delete(o))},leave(){n=void 0,r=!1,i=void 0}}})}});var Oq=w((wl,Lp)=>{"use strict";f();N();m();(function(){var e,t="4.17.21",n=200,r="Unsupported core-js use. Try https://npms.io/search?q=ponyfill.",i="Expected a function",a="Invalid `variable` option passed into `_.template`",o="__lodash_hash_undefined__",c=500,l="__lodash_placeholder__",p=1,T=2,y=4,g=1,_=2,F=1,U=2,K=4,J=8,ee=16,W=32,Te=64,de=128,we=256,qe=512,et=30,X="...",ve=800,gt=16,Ht=1,zt=2,bn=3,Vt=1/0,dn=9007199254740991,Rr=17976931348623157e292,Fr=NaN,kn=4294967295,$t=kn-1,An=kn>>>1,se=[["ary",de],["bind",F],["bindKey",U],["curry",J],["curryRight",ee],["flip",qe],["partial",W],["partialRight",Te],["rearg",we]],De="[object Arguments]",_e="[object Array]",Le="[object AsyncFunction]",_t="[object Boolean]",Y="[object Date]",ae="[object DOMException]",Me="[object Error]",Qe="[object Function]",Lt="[object GeneratorFunction]",tt="[object Map]",bt="[object Number]",za="[object Null]",qr="[object Object]",Wa="[object Promise]",Ic="[object Proxy]",ya="[object RegExp]",mr="[object Set]",ri="[object String]",Mt="[object Symbol]",Nr="[object Undefined]",lu="[object WeakMap]",Ia="[object WeakSet]",du="[object ArrayBuffer]",A="[object DataView]",h="[object Float32Array]",I="[object Float64Array]",C="[object Int8Array]",G="[object Int16Array]",te="[object Int32Array]",le="[object Uint8Array]",pt="[object Uint8ClampedArray]",pn="[object Uint16Array]",tn="[object Uint32Array]",En=/\b__p \+= '';/g,Wt=/\b(__p \+=) '' \+/g,zV=/(__e\(.*?\)|\b__t\)) \+\n'';/g,AD=/&(?:amp|lt|gt|quot|#39);/g,RD=/[&<>"']/g,WV=RegExp(AD.source),XV=RegExp(RD.source),ZV=/<%-([\s\S]+?)%>/g,ej=/<%([\s\S]+?)%>/g,FD=/<%=([\s\S]+?)%>/g,tj=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,nj=/^\w*$/,rj=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,GE=/[\\^$.*+?()[\]{}|]/g,ij=RegExp(GE.source),$E=/^\s+/,aj=/\s/,sj=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/,oj=/\{\n\/\* \[wrapped with (.+)\] \*/,uj=/,? & /,cj=/[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g,lj=/[()=,{}\[\]\/\s]/,dj=/\\(\\)?/g,pj=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,PD=/\w*$/,fj=/^[-+]0x[0-9a-f]+$/i,mj=/^0b[01]+$/i,Nj=/^\[object .+?Constructor\]$/,Tj=/^0o[0-7]+$/i,Ej=/^(?:0|[1-9]\d*)$/,hj=/[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g,Zp=/($^)/,yj=/['\n\r\u2028\u2029\\]/g,ef="\\ud800-\\udfff",Ij="\\u0300-\\u036f",gj="\\ufe20-\\ufe2f",_j="\\u20d0-\\u20ff",wD=Ij+gj+_j,LD="\\u2700-\\u27bf",CD="a-z\\xdf-\\xf6\\xf8-\\xff",vj="\\xac\\xb1\\xd7\\xf7",Sj="\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf",Oj="\\u2000-\\u206f",Dj=" \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000",BD="A-Z\\xc0-\\xd6\\xd8-\\xde",UD="\\ufe0e\\ufe0f",kD=vj+Sj+Oj+Dj,QE="['\u2019]",bj="["+ef+"]",MD="["+kD+"]",tf="["+wD+"]",xD="\\d+",Aj="["+LD+"]",qD="["+CD+"]",VD="[^"+ef+kD+xD+LD+CD+BD+"]",YE="\\ud83c[\\udffb-\\udfff]",Rj="(?:"+tf+"|"+YE+")",jD="[^"+ef+"]",JE="(?:\\ud83c[\\udde6-\\uddff]){2}",HE="[\\ud800-\\udbff][\\udc00-\\udfff]",gc="["+BD+"]",KD="\\u200d",GD="(?:"+qD+"|"+VD+")",Fj="(?:"+gc+"|"+VD+")",$D="(?:"+QE+"(?:d|ll|m|re|s|t|ve))?",QD="(?:"+QE+"(?:D|LL|M|RE|S|T|VE))?",YD=Rj+"?",JD="["+UD+"]?",Pj="(?:"+KD+"(?:"+[jD,JE,HE].join("|")+")"+JD+YD+")*",wj="\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])",Lj="\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])",HD=JD+YD+Pj,Cj="(?:"+[Aj,JE,HE].join("|")+")"+HD,Bj="(?:"+[jD+tf+"?",tf,JE,HE,bj].join("|")+")",Uj=RegExp(QE,"g"),kj=RegExp(tf,"g"),zE=RegExp(YE+"(?="+YE+")|"+Bj+HD,"g"),Mj=RegExp([gc+"?"+qD+"+"+$D+"(?="+[MD,gc,"$"].join("|")+")",Fj+"+"+QD+"(?="+[MD,gc+GD,"$"].join("|")+")",gc+"?"+GD+"+"+$D,gc+"+"+QD,Lj,wj,xD,Cj].join("|"),"g"),xj=RegExp("["+KD+ef+wD+UD+"]"),qj=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,Vj=["Array","Buffer","DataView","Date","Error","Float32Array","Float64Array","Function","Int8Array","Int16Array","Int32Array","Map","Math","Object","Promise","RegExp","Set","String","Symbol","TypeError","Uint8Array","Uint8ClampedArray","Uint16Array","Uint32Array","WeakMap","_","clearTimeout","isFinite","parseInt","setTimeout"],jj=-1,Nn={};Nn[h]=Nn[I]=Nn[C]=Nn[G]=Nn[te]=Nn[le]=Nn[pt]=Nn[pn]=Nn[tn]=!0,Nn[De]=Nn[_e]=Nn[du]=Nn[_t]=Nn[A]=Nn[Y]=Nn[Me]=Nn[Qe]=Nn[tt]=Nn[bt]=Nn[qr]=Nn[ya]=Nn[mr]=Nn[ri]=Nn[lu]=!1;var fn={};fn[De]=fn[_e]=fn[du]=fn[A]=fn[_t]=fn[Y]=fn[h]=fn[I]=fn[C]=fn[G]=fn[te]=fn[tt]=fn[bt]=fn[qr]=fn[ya]=fn[mr]=fn[ri]=fn[Mt]=fn[le]=fn[pt]=fn[pn]=fn[tn]=!0,fn[Me]=fn[Qe]=fn[lu]=!1;var Kj={\u00C0:"A",\u00C1:"A",\u00C2:"A",\u00C3:"A",\u00C4:"A",\u00C5:"A",\u00E0:"a",\u00E1:"a",\u00E2:"a",\u00E3:"a",\u00E4:"a",\u00E5:"a",\u00C7:"C",\u00E7:"c",\u00D0:"D",\u00F0:"d",\u00C8:"E",\u00C9:"E",\u00CA:"E",\u00CB:"E",\u00E8:"e",\u00E9:"e",\u00EA:"e",\u00EB:"e",\u00CC:"I",\u00CD:"I",\u00CE:"I",\u00CF:"I",\u00EC:"i",\u00ED:"i",\u00EE:"i",\u00EF:"i",\u00D1:"N",\u00F1:"n",\u00D2:"O",\u00D3:"O",\u00D4:"O",\u00D5:"O",\u00D6:"O",\u00D8:"O",\u00F2:"o",\u00F3:"o",\u00F4:"o",\u00F5:"o",\u00F6:"o",\u00F8:"o",\u00D9:"U",\u00DA:"U",\u00DB:"U",\u00DC:"U",\u00F9:"u",\u00FA:"u",\u00FB:"u",\u00FC:"u",\u00DD:"Y",\u00FD:"y",\u00FF:"y",\u00C6:"Ae",\u00E6:"ae",\u00DE:"Th",\u00FE:"th",\u00DF:"ss",\u0100:"A",\u0102:"A",\u0104:"A",\u0101:"a",\u0103:"a",\u0105:"a",\u0106:"C",\u0108:"C",\u010A:"C",\u010C:"C",\u0107:"c",\u0109:"c",\u010B:"c",\u010D:"c",\u010E:"D",\u0110:"D",\u010F:"d",\u0111:"d",\u0112:"E",\u0114:"E",\u0116:"E",\u0118:"E",\u011A:"E",\u0113:"e",\u0115:"e",\u0117:"e",\u0119:"e",\u011B:"e",\u011C:"G",\u011E:"G",\u0120:"G",\u0122:"G",\u011D:"g",\u011F:"g",\u0121:"g",\u0123:"g",\u0124:"H",\u0126:"H",\u0125:"h",\u0127:"h",\u0128:"I",\u012A:"I",\u012C:"I",\u012E:"I",\u0130:"I",\u0129:"i",\u012B:"i",\u012D:"i",\u012F:"i",\u0131:"i",\u0134:"J",\u0135:"j",\u0136:"K",\u0137:"k",\u0138:"k",\u0139:"L",\u013B:"L",\u013D:"L",\u013F:"L",\u0141:"L",\u013A:"l",\u013C:"l",\u013E:"l",\u0140:"l",\u0142:"l",\u0143:"N",\u0145:"N",\u0147:"N",\u014A:"N",\u0144:"n",\u0146:"n",\u0148:"n",\u014B:"n",\u014C:"O",\u014E:"O",\u0150:"O",\u014D:"o",\u014F:"o",\u0151:"o",\u0154:"R",\u0156:"R",\u0158:"R",\u0155:"r",\u0157:"r",\u0159:"r",\u015A:"S",\u015C:"S",\u015E:"S",\u0160:"S",\u015B:"s",\u015D:"s",\u015F:"s",\u0161:"s",\u0162:"T",\u0164:"T",\u0166:"T",\u0163:"t",\u0165:"t",\u0167:"t",\u0168:"U",\u016A:"U",\u016C:"U",\u016E:"U",\u0170:"U",\u0172:"U",\u0169:"u",\u016B:"u",\u016D:"u",\u016F:"u",\u0171:"u",\u0173:"u",\u0174:"W",\u0175:"w",\u0176:"Y",\u0177:"y",\u0178:"Y",\u0179:"Z",\u017B:"Z",\u017D:"Z",\u017A:"z",\u017C:"z",\u017E:"z",\u0132:"IJ",\u0133:"ij",\u0152:"Oe",\u0153:"oe",\u0149:"'n",\u017F:"s"},Gj={"&":"&","<":"<",">":">",'"':""","'":"'"},$j={"&":"&","<":"<",">":">",""":'"',"'":"'"},Qj={"\\":"\\","'":"'","\n":"n","\r":"r","\u2028":"u2028","\u2029":"u2029"},Yj=parseFloat,Jj=parseInt,zD=typeof global=="object"&&global&&global.Object===Object&&global,Hj=typeof self=="object"&&self&&self.Object===Object&&self,sr=zD||Hj||Function("return this")(),WE=typeof wl=="object"&&wl&&!wl.nodeType&&wl,pu=WE&&typeof Lp=="object"&&Lp&&!Lp.nodeType&&Lp,WD=pu&&pu.exports===WE,XE=WD&&zD.process,Ti=function(){try{var $=pu&&pu.require&&pu.require("util").types;return $||XE&&XE.binding&&XE.binding("util")}catch(ce){}}(),XD=Ti&&Ti.isArrayBuffer,ZD=Ti&&Ti.isDate,eb=Ti&&Ti.isMap,tb=Ti&&Ti.isRegExp,nb=Ti&&Ti.isSet,rb=Ti&&Ti.isTypedArray;function ii($,ce,re){switch(re.length){case 0:return $.call(ce);case 1:return $.call(ce,re[0]);case 2:return $.call(ce,re[0],re[1]);case 3:return $.call(ce,re[0],re[1],re[2])}return $.apply(ce,re)}function zj($,ce,re,Ce){for(var ot=-1,jt=$==null?0:$.length;++ot-1}function ZE($,ce,re){for(var Ce=-1,ot=$==null?0:$.length;++Ce-1;);return re}function db($,ce){for(var re=$.length;re--&&_c(ce,$[re],0)>-1;);return re}function a1($,ce){for(var re=$.length,Ce=0;re--;)$[re]===ce&&++Ce;return Ce}var s1=rh(Kj),o1=rh(Gj);function u1($){return"\\"+Qj[$]}function c1($,ce){return $==null?e:$[ce]}function vc($){return xj.test($)}function l1($){return qj.test($)}function d1($){for(var ce,re=[];!(ce=$.next()).done;)re.push(ce.value);return re}function oh($){var ce=-1,re=Array($.size);return $.forEach(function(Ce,ot){re[++ce]=[ot,Ce]}),re}function pb($,ce){return function(re){return $(ce(re))}}function Ao($,ce){for(var re=-1,Ce=$.length,ot=0,jt=[];++re-1}function X1(s,u){var d=this.__data__,E=If(d,s);return E<0?(++this.size,d.push([s,u])):d[E][1]=u,this}Xa.prototype.clear=J1,Xa.prototype.delete=H1,Xa.prototype.get=z1,Xa.prototype.has=W1,Xa.prototype.set=X1;function Za(s){var u=-1,d=s==null?0:s.length;for(this.clear();++u=u?s:u)),s}function Ii(s,u,d,E,S,L){var k,j=u&p,H=u&T,fe=u&y;if(d&&(k=S?d(s,E,S,L):d(s)),k!==e)return k;if(!vn(s))return s;var me=lt(s);if(me){if(k=nG(s),!j)return Vr(s,k)}else{var Ee=hr(s),be=Ee==Qe||Ee==Lt;if(Bo(s))return Jb(s,j);if(Ee==qr||Ee==De||be&&!S){if(k=H||be?{}:f0(s),!j)return H?$K(s,mK(k,s)):GK(s,Sb(k,s))}else{if(!fn[Ee])return S?s:{};k=rG(s,Ee,j)}}L||(L=new Ji);var Ve=L.get(s);if(Ve)return Ve;L.set(s,k),j0(s)?s.forEach(function(Xe){k.add(Ii(Xe,u,d,Xe,s,L))}):q0(s)&&s.forEach(function(Xe,vt){k.set(vt,Ii(Xe,u,d,vt,s,L))});var We=fe?H?Lh:wh:H?Kr:or,Et=me?e:We(s);return Ei(Et||s,function(Xe,vt){Et&&(vt=Xe,Xe=s[vt]),Jl(k,vt,Ii(Xe,u,d,vt,s,L))}),k}function NK(s){var u=or(s);return function(d){return Ob(d,s,u)}}function Ob(s,u,d){var E=d.length;if(s==null)return!E;for(s=on(s);E--;){var S=d[E],L=u[S],k=s[S];if(k===e&&!(S in s)||!L(k))return!1}return!0}function Db(s,u,d){if(typeof s!="function")throw new hi(i);return td(function(){s.apply(e,d)},u)}function Hl(s,u,d,E){var S=-1,L=nf,k=!0,j=s.length,H=[],fe=u.length;if(!j)return H;d&&(u=hn(u,ai(d))),E?(L=ZE,k=!1):u.length>=n&&(L=jl,k=!1,u=new Nu(u));e:for(;++SS?0:S+d),E=E===e||E>S?S:ft(E),E<0&&(E+=S),E=d>E?0:G0(E);d0&&d(j)?u>1?Tr(j,u-1,d,E,S):bo(S,j):E||(S[S.length]=j)}return S}var mh=e0(),Rb=e0(!0);function ga(s,u){return s&&mh(s,u,or)}function Nh(s,u){return s&&Rb(s,u,or)}function _f(s,u){return Do(u,function(d){return is(s[d])})}function Eu(s,u){u=Lo(u,s);for(var d=0,E=u.length;s!=null&&du}function hK(s,u){return s!=null&&Xt.call(s,u)}function yK(s,u){return s!=null&&u in on(s)}function IK(s,u,d){return s>=Er(u,d)&&s=120&&me.length>=120)?new Nu(k&&me):e}me=s[0];var Ee=-1,be=j[0];e:for(;++Ee-1;)j!==s&&ff.call(j,H,1),ff.call(s,H,1);return s}function qb(s,u){for(var d=s?u.length:0,E=d-1;d--;){var S=u[d];if(d==E||S!==L){var L=S;rs(S)?ff.call(s,S,1):Oh(s,S)}}return s}function _h(s,u){return s+Tf(Ib()*(u-s+1))}function LK(s,u,d,E){for(var S=-1,L=Hn(Nf((u-s)/(d||1)),0),k=re(L);L--;)k[E?L:++S]=s,s+=d;return k}function vh(s,u){var d="";if(!s||u<1||u>dn)return d;do u%2&&(d+=s),u=Tf(u/2),u&&(s+=s);while(u);return d}function yt(s,u){return qh(T0(s,u,Gr),s+"")}function CK(s){return vb(Lc(s))}function BK(s,u){var d=Lc(s);return Lf(d,Tu(u,0,d.length))}function Xl(s,u,d,E){if(!vn(s))return s;u=Lo(u,s);for(var S=-1,L=u.length,k=L-1,j=s;j!=null&&++SS?0:S+u),d=d>S?S:d,d<0&&(d+=S),S=u>d?0:d-u>>>0,u>>>=0;for(var L=re(S);++E>>1,k=s[L];k!==null&&!oi(k)&&(d?k<=u:k=n){var fe=u?null:HK(s);if(fe)return af(fe);k=!1,S=jl,H=new Nu}else H=u?[]:j;e:for(;++E=E?s:gi(s,u,d)}var Yb=D1||function(s){return sr.clearTimeout(s)};function Jb(s,u){if(u)return s.slice();var d=s.length,E=Nb?Nb(d):new s.constructor(d);return s.copy(E),E}function Rh(s){var u=new s.constructor(s.byteLength);return new df(u).set(new df(s)),u}function qK(s,u){var d=u?Rh(s.buffer):s.buffer;return new s.constructor(d,s.byteOffset,s.byteLength)}function VK(s){var u=new s.constructor(s.source,PD.exec(s));return u.lastIndex=s.lastIndex,u}function jK(s){return Yl?on(Yl.call(s)):{}}function Hb(s,u){var d=u?Rh(s.buffer):s.buffer;return new s.constructor(d,s.byteOffset,s.length)}function zb(s,u){if(s!==u){var d=s!==e,E=s===null,S=s===s,L=oi(s),k=u!==e,j=u===null,H=u===u,fe=oi(u);if(!j&&!fe&&!L&&s>u||L&&k&&H&&!j&&!fe||E&&k&&H||!d&&H||!S)return 1;if(!E&&!L&&!fe&&s=j)return H;var fe=d[E];return H*(fe=="desc"?-1:1)}}return s.index-u.index}function Wb(s,u,d,E){for(var S=-1,L=s.length,k=d.length,j=-1,H=u.length,fe=Hn(L-k,0),me=re(H+fe),Ee=!E;++j1?d[S-1]:e,k=S>2?d[2]:e;for(L=s.length>3&&typeof L=="function"?(S--,L):e,k&&wr(d[0],d[1],k)&&(L=S<3?e:L,S=1),u=on(u);++E-1?S[L?u[k]:k]:e}}function r0(s){return ns(function(u){var d=u.length,E=d,S=yi.prototype.thru;for(s&&u.reverse();E--;){var L=u[E];if(typeof L!="function")throw new hi(i);if(S&&!k&&Pf(L)=="wrapper")var k=new yi([],!0)}for(E=k?E:d;++E1&&At.reverse(),me&&Hj))return!1;var fe=L.get(s),me=L.get(u);if(fe&&me)return fe==u&&me==s;var Ee=-1,be=!0,Ve=d&_?new Nu:e;for(L.set(s,u),L.set(u,s);++Ee1?"& ":"")+u[E],u=u.join(d>2?", ":" "),s.replace(sj,`{ /* [wrapped with `+u+`] */ -`)}function rG(s){return ct(s)||Eu(s)||!!(ND&&s&&s[ND])}function rs(s,u){var d=typeof s;return u=u==null?cn:u,!!u&&(d=="number"||d!="symbol"&&Tj.test(s))&&s>-1&&s%1==0&&s0){if(++u>=ve)return arguments[0]}else u=0;return s.apply(e,arguments)}}function wf(s,u){var d=-1,h=s.length,S=h-1;for(u=u===e?h:u;++d1?s[u-1]:e;return d=typeof d=="function"?(s.pop(),d):e,b0(s,d)});function D0(s){var u=R(s);return u.__chain__=!0,u}function m$(s,u){return u(s),s}function Lf(s,u){return u(s)}var T$=ns(function(s){var u=s.length,d=u?s[0]:0,h=this.__wrapped__,S=function(L){return pE(L,s)};return u>1||this.__actions__.length||!(h instanceof St)||!rs(d)?this.thru(S):(h=h.slice(d,+d+(u?1:0)),h.__actions__.push({func:Lf,args:[S],thisArg:e}),new Ei(h,this.__chain__).thru(function(L){return u&&!L.length&&L.push(e),L}))});function N$(){return D0(this)}function h$(){return new Ei(this.value(),this.__chain__)}function E$(){this.__values__===e&&(this.__values__=V0(this.value()));var s=this.__index__>=this.__values__.length,u=s?e:this.__values__[this.__index__++];return{done:s,value:u}}function y$(){return this}function I$(s){for(var u,d=this;d instanceof Ef;){var h=I0(d);h.__index__=0,h.__values__=e,u?S.__wrapped__=h:u=h;var S=h;d=d.__wrapped__}return S.__wrapped__=s,u}function g$(){var s=this.__wrapped__;if(s instanceof St){var u=s;return this.__actions__.length&&(u=new St(this)),u=u.reverse(),u.__actions__.push({func:Lf,args:[qE],thisArg:e}),new Ei(u,this.__chain__)}return this.thru(qE)}function _$(){return KD(this.__wrapped__,this.__actions__)}var v$=Of(function(s,u,d){Xt.call(s,d)?++s[d]:es(s,d,1)});function S$(s,u,d){var h=ct(s)?nD:mK;return d&&wr(s,u,d)&&(u=e),h(s,He(u,3))}function O$(s,u){var d=ct(s)?Oo:bD;return d(s,He(u,3))}var b$=e0(g0),D$=e0(_0);function A$(s,u){return Nr(Cf(s,u),1)}function R$(s,u){return Nr(Cf(s,u),qt)}function F$(s,u,d){return d=d===e?1:ft(d),Nr(Cf(s,u),d)}function A0(s,u){var d=ct(s)?Ni:Fo;return d(s,He(u,3))}function R0(s,u){var d=ct(s)?Hj:OD;return d(s,He(u,3))}var P$=Of(function(s,u,d){Xt.call(s,d)?s[d].push(u):es(s,d,[u])});function w$(s,u,d,h){s=jr(s)?s:wc(s),d=d&&!h?ft(d):0;var S=s.length;return d<0&&(d=Hn(S+d,0)),xf(s)?d<=S&&s.indexOf(u,d)>-1:!!S&&gc(s,u,d)>-1}var L$=yt(function(s,u,d){var h=-1,S=typeof u=="function",L=jr(s)?te(s.length):[];return Fo(s,function(U){L[++h]=S?ri(u,U,d):Hl(U,u,d)}),L}),C$=Of(function(s,u,d){es(s,d,u)});function Cf(s,u){var d=ct(s)?Nn:wD;return d(s,He(u,3))}function B$(s,u,d,h){return s==null?[]:(ct(u)||(u=u==null?[]:[u]),d=h?e:d,ct(d)||(d=d==null?[]:[d]),UD(s,u,d))}var U$=Of(function(s,u,d){s[d?0:1].push(u)},function(){return[[],[]]});function k$(s,u,d){var h=ct(s)?Zh:sD,S=arguments.length<3;return h(s,He(u,4),d,S,Fo)}function M$(s,u,d){var h=ct(s)?zj:sD,S=arguments.length<3;return h(s,He(u,4),d,S,OD)}function x$(s,u){var d=ct(s)?Oo:bD;return d(s,kf(He(u,3)))}function q$(s){var u=ct(s)?gD:wK;return u(s)}function V$(s,u,d){(d?wr(s,u,d):u===e)?u=1:u=ft(u);var h=ct(s)?cK:LK;return h(s,u)}function j$(s){var u=ct(s)?lK:BK;return u(s)}function K$(s){if(s==null)return 0;if(jr(s))return xf(s)?vc(s):s.length;var u=Er(s);return u==tt||u==mr?s.size:EE(s).length}function G$(s,u,d){var h=ct(s)?eE:UK;return d&&wr(s,u,d)&&(u=e),h(s,He(u,3))}var $$=yt(function(s,u){if(s==null)return[];var d=u.length;return d>1&&wr(s,u[0],u[1])?u=[]:d>2&&wr(u[0],u[1],u[2])&&(u=[u[0]]),UD(s,Nr(u,1),[])}),Bf=O1||function(){return sr.Date.now()};function Q$(s,u){if(typeof u!="function")throw new hi(i);return s=ft(s),function(){if(--s<1)return u.apply(this,arguments)}}function F0(s,u,d){return u=d?e:u,u=s&&u==null?s.length:u,ts(s,le,e,e,e,e,u)}function P0(s,u){var d;if(typeof u!="function")throw new hi(i);return s=ft(s),function(){return--s>0&&(d=u.apply(this,arguments)),s<=1&&(u=e),d}}var jE=yt(function(s,u,d){var h=F;if(d.length){var S=Do(d,Fc(jE));h|=W}return ts(s,h,u,d,S)}),w0=yt(function(s,u,d){var h=F|B;if(d.length){var S=Do(d,Fc(w0));h|=W}return ts(u,h,s,d,S)});function L0(s,u,d){u=d?e:u;var h=ts(s,J,e,e,e,e,e,u);return h.placeholder=L0.placeholder,h}function C0(s,u,d){u=d?e:u;var h=ts(s,Z,e,e,e,e,e,u);return h.placeholder=C0.placeholder,h}function B0(s,u,d){var h,S,L,U,V,H,de=0,fe=!1,he=!1,De=!0;if(typeof s!="function")throw new hi(i);u=_i(u)||0,_n(d)&&(fe=!!d.leading,he="maxWait"in d,L=he?Hn(_i(d.maxWait)||0,u):L,De="trailing"in d?!!d.trailing:De);function Ve(xn){var zi=h,ss=S;return h=S=e,de=xn,U=s.apply(ss,zi),U}function ze(xn){return de=xn,V=ed(vt,u),fe?Ve(xn):U}function ht(xn){var zi=xn-H,ss=xn-de,eA=u-zi;return he?hr(eA,L-ss):eA}function We(xn){var zi=xn-H,ss=xn-de;return H===e||zi>=u||zi<0||he&&ss>=L}function vt(){var xn=Bf();if(We(xn))return At(xn);V=ed(vt,ht(xn))}function At(xn){return V=e,De&&h?Ve(xn):(h=S=e,U)}function oi(){V!==e&&$D(V),de=0,h=H=S=V=e}function Lr(){return V===e?U:At(Bf())}function ui(){var xn=Bf(),zi=We(xn);if(h=arguments,S=this,H=xn,zi){if(V===e)return ze(H);if(he)return $D(V),V=ed(vt,u),Ve(H)}return V===e&&(V=ed(vt,u)),U}return ui.cancel=oi,ui.flush=Lr,ui}var Y$=yt(function(s,u){return SD(s,1,u)}),J$=yt(function(s,u,d){return SD(s,_i(u)||0,d)});function H$(s){return ts(s,qe)}function Uf(s,u){if(typeof s!="function"||u!=null&&typeof u!="function")throw new hi(i);var d=function(){var h=arguments,S=u?u.apply(this,h):h[0],L=d.cache;if(L.has(S))return L.get(S);var U=s.apply(this,h);return d.cache=L.set(S,U)||L,U};return d.cache=new(Uf.Cache||Za),d}Uf.Cache=Za;function kf(s){if(typeof s!="function")throw new hi(i);return function(){var u=arguments;switch(u.length){case 0:return!s.call(this);case 1:return!s.call(this,u[0]);case 2:return!s.call(this,u[0],u[1]);case 3:return!s.call(this,u[0],u[1],u[2])}return!s.apply(this,u)}}function z$(s){return P0(2,s)}var W$=kK(function(s,u){u=u.length==1&&ct(u[0])?Nn(u[0],ii(He())):Nn(Nr(u,1),ii(He()));var d=u.length;return yt(function(h){for(var S=-1,L=hr(h.length,d);++S=u}),Eu=RD(function(){return arguments}())?RD:function(s){return Rn(s)&&Xt.call(s,"callee")&&!TD.call(s,"callee")},ct=te.isArray,pQ=zb?ii(zb):IK;function jr(s){return s!=null&&Mf(s.length)&&!is(s)}function Mn(s){return Rn(s)&&jr(s)}function fQ(s){return s===!0||s===!1||Rn(s)&&Pr(s)==_t}var Co=D1||ey,mQ=Wb?ii(Wb):gK;function TQ(s){return Rn(s)&&s.nodeType===1&&!td(s)}function NQ(s){if(s==null)return!0;if(jr(s)&&(ct(s)||typeof s=="string"||typeof s.splice=="function"||Co(s)||Pc(s)||Eu(s)))return!s.length;var u=Er(s);if(u==tt||u==mr)return!s.size;if(Zl(s))return!EE(s).length;for(var d in s)if(Xt.call(s,d))return!1;return!0}function hQ(s,u){return zl(s,u)}function EQ(s,u,d){d=typeof d=="function"?d:e;var h=d?d(s,u):e;return h===e?zl(s,u,e,d):!!h}function GE(s){if(!Rn(s))return!1;var u=Pr(s);return u==Me||u==re||typeof s.message=="string"&&typeof s.name=="string"&&!td(s)}function yQ(s){return typeof s=="number"&&hD(s)}function is(s){if(!_n(s))return!1;var u=Pr(s);return u==Qe||u==Lt||u==Le||u==yc}function k0(s){return typeof s=="number"&&s==ft(s)}function Mf(s){return typeof s=="number"&&s>-1&&s%1==0&&s<=cn}function _n(s){var u=typeof s;return s!=null&&(u=="object"||u=="function")}function Rn(s){return s!=null&&typeof s=="object"}var M0=Xb?ii(Xb):vK;function IQ(s,u){return s===u||hE(s,u,CE(u))}function gQ(s,u,d){return d=typeof d=="function"?d:e,hE(s,u,CE(u),d)}function _Q(s){return x0(s)&&s!=+s}function vQ(s){if(sG(s))throw new st(r);return FD(s)}function SQ(s){return s===null}function OQ(s){return s==null}function x0(s){return typeof s=="number"||Rn(s)&&Pr(s)==Dt}function td(s){if(!Rn(s)||Pr(s)!=qr)return!1;var u=df(s);if(u===null)return!0;var d=Xt.call(u,"constructor")&&u.constructor;return typeof d=="function"&&d instanceof d&&of.call(d)==g1}var $E=Zb?ii(Zb):SK;function bQ(s){return k0(s)&&s>=-cn&&s<=cn}var q0=eD?ii(eD):OK;function xf(s){return typeof s=="string"||!ct(s)&&Rn(s)&&Pr(s)==ni}function si(s){return typeof s=="symbol"||Rn(s)&&Pr(s)==kt}var Pc=tD?ii(tD):bK;function DQ(s){return s===e}function AQ(s){return Rn(s)&&Er(s)==uu}function RQ(s){return Rn(s)&&Pr(s)==Ia}var FQ=Rf(yE),PQ=Rf(function(s,u){return s<=u});function V0(s){if(!s)return[];if(jr(s))return xf(s)?Yi(s):Vr(s);if(jl&&s[jl])return c1(s[jl]());var u=Er(s),d=u==tt?sE:u==mr?rf:wc;return d(s)}function as(s){if(!s)return s===0?s:0;if(s=_i(s),s===qt||s===-qt){var u=s<0?-1:1;return u*Rr}return s===s?s:0}function ft(s){var u=as(s),d=u%1;return u===u?d?u-d:u:0}function j0(s){return s?mu(ft(s),0,kn):0}function _i(s){if(typeof s=="number")return s;if(si(s))return Fr;if(_n(s)){var u=typeof s.valueOf=="function"?s.valueOf():s;s=_n(u)?u+"":u}if(typeof s!="string")return s===0?s:+s;s=oD(s);var d=pj.test(s);return d||mj.test(s)?Qj(s.slice(2),d?2:8):dj.test(s)?Fr:+s}function K0(s){return _a(s,Kr(s))}function wQ(s){return s?mu(ft(s),-cn,cn):s===0?s:0}function Qt(s){return s==null?"":ai(s)}var LQ=Ac(function(s,u){if(Zl(u)||jr(u)){_a(u,or(u),s);return}for(var d in u)Xt.call(u,d)&&Yl(s,d,u[d])}),G0=Ac(function(s,u){_a(u,Kr(u),s)}),qf=Ac(function(s,u,d,h){_a(u,Kr(u),s,h)}),CQ=Ac(function(s,u,d,h){_a(u,or(u),s,h)}),BQ=ns(pE);function UQ(s,u){var d=Dc(s);return u==null?d:_D(d,u)}var kQ=yt(function(s,u){s=on(s);var d=-1,h=u.length,S=h>2?u[2]:e;for(S&&wr(u[0],u[1],S)&&(h=1);++d1),L}),_a(s,wE(s),d),h&&(d=yi(d,p|N|y,JK));for(var S=u.length;S--;)SE(d,u[S]);return d});function t2(s,u){return Q0(s,kf(He(u)))}var n2=ns(function(s,u){return s==null?{}:RK(s,u)});function Q0(s,u){if(s==null)return{};var d=Nn(wE(s),function(h){return[h]});return u=He(u),kD(s,d,function(h,S){return u(h,S[0])})}function r2(s,u,d){u=wo(u,s);var h=-1,S=u.length;for(S||(S=1,s=e);++hu){var h=s;s=u,u=h}if(d||s%1||u%1){var S=ED();return hr(s+S*(u-s+$j("1e-"+((S+"").length-1))),u)}return gE(s,u)}var m2=Rc(function(s,u,d){return u=u.toLowerCase(),s+(d?H0(u):u)});function H0(s){return JE(Qt(s).toLowerCase())}function z0(s){return s=Qt(s),s&&s.replace(Nj,i1).replace(Bj,"")}function T2(s,u,d){s=Qt(s),u=ai(u);var h=s.length;d=d===e?h:mu(ft(d),0,h);var S=d;return d-=u.length,d>=0&&s.slice(d,S)==u}function N2(s){return s=Qt(s),s&&zV.test(s)?s.replace(Db,a1):s}function h2(s){return s=Qt(s),s&&nj.test(s)?s.replace(Kh,"\\$&"):s}var E2=Rc(function(s,u,d){return s+(d?"-":"")+u.toLowerCase()}),y2=Rc(function(s,u,d){return s+(d?" ":"")+u.toLowerCase()}),I2=ZD("toLowerCase");function g2(s,u,d){s=Qt(s),u=ft(u);var h=u?vc(s):0;if(!u||h>=u)return s;var S=(u-h)/2;return Af(Tf(S),d)+s+Af(mf(S),d)}function _2(s,u,d){s=Qt(s),u=ft(u);var h=u?vc(s):0;return u&&h>>0,d?(s=Qt(s),s&&(typeof u=="string"||u!=null&&!$E(u))&&(u=ai(u),!u&&_c(s))?Lo(Yi(s),0,d):s.split(u,d)):[]}var R2=Rc(function(s,u,d){return s+(d?" ":"")+JE(u)});function F2(s,u,d){return s=Qt(s),d=d==null?0:mu(ft(d),0,s.length),u=ai(u),s.slice(d,d+u.length)==u}function P2(s,u,d){var h=R.templateSettings;d&&wr(s,u,d)&&(u=e),s=Qt(s),u=qf({},u,h,s0);var S=qf({},u.imports,h.imports,s0),L=or(S),U=aE(S,L),V,H,de=0,fe=u.interpolate||Xp,he="__p += '",De=oE((u.escape||Xp).source+"|"+fe.source+"|"+(fe===Ab?lj:Xp).source+"|"+(u.evaluate||Xp).source+"|$","g"),Ve="//# sourceURL="+(Xt.call(u,"sourceURL")?(u.sourceURL+"").replace(/\s/g," "):"lodash.templateSources["+ ++qj+"]")+` -`;s.replace(De,function(We,vt,At,oi,Lr,ui){return At||(At=oi),he+=s.slice(de,ui).replace(hj,s1),vt&&(V=!0,he+=`' + +`)}function aG(s){return lt(s)||Iu(s)||!!(hb&&s&&s[hb])}function rs(s,u){var d=typeof s;return u=u==null?dn:u,!!u&&(d=="number"||d!="symbol"&&Ej.test(s))&&s>-1&&s%1==0&&s0){if(++u>=ve)return arguments[0]}else u=0;return s.apply(e,arguments)}}function Lf(s,u){var d=-1,E=s.length,S=E-1;for(u=u===e?E:u;++d1?s[u-1]:e;return d=typeof d=="function"?(s.pop(),d):e,A0(s,d)});function R0(s){var u=R(s);return u.__chain__=!0,u}function T$(s,u){return u(s),s}function Cf(s,u){return u(s)}var E$=ns(function(s){var u=s.length,d=u?s[0]:0,E=this.__wrapped__,S=function(L){return fh(L,s)};return u>1||this.__actions__.length||!(E instanceof St)||!rs(d)?this.thru(S):(E=E.slice(d,+d+(u?1:0)),E.__actions__.push({func:Cf,args:[S],thisArg:e}),new yi(E,this.__chain__).thru(function(L){return u&&!L.length&&L.push(e),L}))});function h$(){return R0(this)}function y$(){return new yi(this.value(),this.__chain__)}function I$(){this.__values__===e&&(this.__values__=K0(this.value()));var s=this.__index__>=this.__values__.length,u=s?e:this.__values__[this.__index__++];return{done:s,value:u}}function g$(){return this}function _$(s){for(var u,d=this;d instanceof yf;){var E=_0(d);E.__index__=0,E.__values__=e,u?S.__wrapped__=E:u=E;var S=E;d=d.__wrapped__}return S.__wrapped__=s,u}function v$(){var s=this.__wrapped__;if(s instanceof St){var u=s;return this.__actions__.length&&(u=new St(this)),u=u.reverse(),u.__actions__.push({func:Cf,args:[Vh],thisArg:e}),new yi(u,this.__chain__)}return this.thru(Vh)}function S$(){return $b(this.__wrapped__,this.__actions__)}var O$=Df(function(s,u,d){Xt.call(s,d)?++s[d]:es(s,d,1)});function D$(s,u,d){var E=lt(s)?ib:TK;return d&&wr(s,u,d)&&(u=e),E(s,ze(u,3))}function b$(s,u){var d=lt(s)?Do:Ab;return d(s,ze(u,3))}var A$=n0(v0),R$=n0(S0);function F$(s,u){return Tr(Bf(s,u),1)}function P$(s,u){return Tr(Bf(s,u),Vt)}function w$(s,u,d){return d=d===e?1:ft(d),Tr(Bf(s,u),d)}function F0(s,u){var d=lt(s)?Ei:Po;return d(s,ze(u,3))}function P0(s,u){var d=lt(s)?Wj:bb;return d(s,ze(u,3))}var L$=Df(function(s,u,d){Xt.call(s,d)?s[d].push(u):es(s,d,[u])});function C$(s,u,d,E){s=jr(s)?s:Lc(s),d=d&&!E?ft(d):0;var S=s.length;return d<0&&(d=Hn(S+d,0)),qf(s)?d<=S&&s.indexOf(u,d)>-1:!!S&&_c(s,u,d)>-1}var B$=yt(function(s,u,d){var E=-1,S=typeof u=="function",L=jr(s)?re(s.length):[];return Po(s,function(k){L[++E]=S?ii(u,k,d):zl(k,u,d)}),L}),U$=Df(function(s,u,d){es(s,d,u)});function Bf(s,u){var d=lt(s)?hn:Cb;return d(s,ze(u,3))}function k$(s,u,d,E){return s==null?[]:(lt(u)||(u=u==null?[]:[u]),d=E?e:d,lt(d)||(d=d==null?[]:[d]),Mb(s,u,d))}var M$=Df(function(s,u,d){s[d?0:1].push(u)},function(){return[[],[]]});function x$(s,u,d){var E=lt(s)?eh:ub,S=arguments.length<3;return E(s,ze(u,4),d,S,Po)}function q$(s,u,d){var E=lt(s)?Xj:ub,S=arguments.length<3;return E(s,ze(u,4),d,S,bb)}function V$(s,u){var d=lt(s)?Do:Ab;return d(s,Mf(ze(u,3)))}function j$(s){var u=lt(s)?vb:CK;return u(s)}function K$(s,u,d){(d?wr(s,u,d):u===e)?u=1:u=ft(u);var E=lt(s)?dK:BK;return E(s,u)}function G$(s){var u=lt(s)?pK:kK;return u(s)}function $$(s){if(s==null)return 0;if(jr(s))return qf(s)?Sc(s):s.length;var u=hr(s);return u==tt||u==mr?s.size:yh(s).length}function Q$(s,u,d){var E=lt(s)?th:MK;return d&&wr(s,u,d)&&(u=e),E(s,ze(u,3))}var Y$=yt(function(s,u){if(s==null)return[];var d=u.length;return d>1&&wr(s,u[0],u[1])?u=[]:d>2&&wr(u[0],u[1],u[2])&&(u=[u[0]]),Mb(s,Tr(u,1),[])}),Uf=b1||function(){return sr.Date.now()};function J$(s,u){if(typeof u!="function")throw new hi(i);return s=ft(s),function(){if(--s<1)return u.apply(this,arguments)}}function w0(s,u,d){return u=d?e:u,u=s&&u==null?s.length:u,ts(s,de,e,e,e,e,u)}function L0(s,u){var d;if(typeof u!="function")throw new hi(i);return s=ft(s),function(){return--s>0&&(d=u.apply(this,arguments)),s<=1&&(u=e),d}}var Kh=yt(function(s,u,d){var E=F;if(d.length){var S=Ao(d,Pc(Kh));E|=W}return ts(s,E,u,d,S)}),C0=yt(function(s,u,d){var E=F|U;if(d.length){var S=Ao(d,Pc(C0));E|=W}return ts(u,E,s,d,S)});function B0(s,u,d){u=d?e:u;var E=ts(s,J,e,e,e,e,e,u);return E.placeholder=B0.placeholder,E}function U0(s,u,d){u=d?e:u;var E=ts(s,ee,e,e,e,e,e,u);return E.placeholder=U0.placeholder,E}function k0(s,u,d){var E,S,L,k,j,H,fe=0,me=!1,Ee=!1,be=!0;if(typeof s!="function")throw new hi(i);u=vi(u)||0,vn(d)&&(me=!!d.leading,Ee="maxWait"in d,L=Ee?Hn(vi(d.maxWait)||0,u):L,be="trailing"in d?!!d.trailing:be);function Ve(xn){var zi=E,ss=S;return E=S=e,fe=xn,k=s.apply(ss,zi),k}function We(xn){return fe=xn,j=td(vt,u),me?Ve(xn):k}function Et(xn){var zi=xn-H,ss=xn-fe,nA=u-zi;return Ee?Er(nA,L-ss):nA}function Xe(xn){var zi=xn-H,ss=xn-fe;return H===e||zi>=u||zi<0||Ee&&ss>=L}function vt(){var xn=Uf();if(Xe(xn))return At(xn);j=td(vt,Et(xn))}function At(xn){return j=e,be&&E?Ve(xn):(E=S=e,k)}function ui(){j!==e&&Yb(j),fe=0,E=H=S=j=e}function Lr(){return j===e?k:At(Uf())}function ci(){var xn=Uf(),zi=Xe(xn);if(E=arguments,S=this,H=xn,zi){if(j===e)return We(H);if(Ee)return Yb(j),j=td(vt,u),Ve(H)}return j===e&&(j=td(vt,u)),k}return ci.cancel=ui,ci.flush=Lr,ci}var H$=yt(function(s,u){return Db(s,1,u)}),z$=yt(function(s,u,d){return Db(s,vi(u)||0,d)});function W$(s){return ts(s,qe)}function kf(s,u){if(typeof s!="function"||u!=null&&typeof u!="function")throw new hi(i);var d=function(){var E=arguments,S=u?u.apply(this,E):E[0],L=d.cache;if(L.has(S))return L.get(S);var k=s.apply(this,E);return d.cache=L.set(S,k)||L,k};return d.cache=new(kf.Cache||Za),d}kf.Cache=Za;function Mf(s){if(typeof s!="function")throw new hi(i);return function(){var u=arguments;switch(u.length){case 0:return!s.call(this);case 1:return!s.call(this,u[0]);case 2:return!s.call(this,u[0],u[1]);case 3:return!s.call(this,u[0],u[1],u[2])}return!s.apply(this,u)}}function X$(s){return L0(2,s)}var Z$=xK(function(s,u){u=u.length==1&<(u[0])?hn(u[0],ai(ze())):hn(Tr(u,1),ai(ze()));var d=u.length;return yt(function(E){for(var S=-1,L=Er(E.length,d);++S=u}),Iu=Pb(function(){return arguments}())?Pb:function(s){return Rn(s)&&Xt.call(s,"callee")&&!Eb.call(s,"callee")},lt=re.isArray,mQ=XD?ai(XD):_K;function jr(s){return s!=null&&xf(s.length)&&!is(s)}function Mn(s){return Rn(s)&&jr(s)}function NQ(s){return s===!0||s===!1||Rn(s)&&Pr(s)==_t}var Bo=R1||ty,TQ=ZD?ai(ZD):vK;function EQ(s){return Rn(s)&&s.nodeType===1&&!nd(s)}function hQ(s){if(s==null)return!0;if(jr(s)&&(lt(s)||typeof s=="string"||typeof s.splice=="function"||Bo(s)||wc(s)||Iu(s)))return!s.length;var u=hr(s);if(u==tt||u==mr)return!s.size;if(ed(s))return!yh(s).length;for(var d in s)if(Xt.call(s,d))return!1;return!0}function yQ(s,u){return Wl(s,u)}function IQ(s,u,d){d=typeof d=="function"?d:e;var E=d?d(s,u):e;return E===e?Wl(s,u,e,d):!!E}function $h(s){if(!Rn(s))return!1;var u=Pr(s);return u==Me||u==ae||typeof s.message=="string"&&typeof s.name=="string"&&!nd(s)}function gQ(s){return typeof s=="number"&&yb(s)}function is(s){if(!vn(s))return!1;var u=Pr(s);return u==Qe||u==Lt||u==Le||u==Ic}function x0(s){return typeof s=="number"&&s==ft(s)}function xf(s){return typeof s=="number"&&s>-1&&s%1==0&&s<=dn}function vn(s){var u=typeof s;return s!=null&&(u=="object"||u=="function")}function Rn(s){return s!=null&&typeof s=="object"}var q0=eb?ai(eb):OK;function _Q(s,u){return s===u||hh(s,u,Bh(u))}function vQ(s,u,d){return d=typeof d=="function"?d:e,hh(s,u,Bh(u),d)}function SQ(s){return V0(s)&&s!=+s}function OQ(s){if(uG(s))throw new ot(r);return wb(s)}function DQ(s){return s===null}function bQ(s){return s==null}function V0(s){return typeof s=="number"||Rn(s)&&Pr(s)==bt}function nd(s){if(!Rn(s)||Pr(s)!=qr)return!1;var u=pf(s);if(u===null)return!0;var d=Xt.call(u,"constructor")&&u.constructor;return typeof d=="function"&&d instanceof d&&uf.call(d)==v1}var Qh=tb?ai(tb):DK;function AQ(s){return x0(s)&&s>=-dn&&s<=dn}var j0=nb?ai(nb):bK;function qf(s){return typeof s=="string"||!lt(s)&&Rn(s)&&Pr(s)==ri}function oi(s){return typeof s=="symbol"||Rn(s)&&Pr(s)==Mt}var wc=rb?ai(rb):AK;function RQ(s){return s===e}function FQ(s){return Rn(s)&&hr(s)==lu}function PQ(s){return Rn(s)&&Pr(s)==Ia}var wQ=Ff(Ih),LQ=Ff(function(s,u){return s<=u});function K0(s){if(!s)return[];if(jr(s))return qf(s)?Yi(s):Vr(s);if(Kl&&s[Kl])return d1(s[Kl]());var u=hr(s),d=u==tt?oh:u==mr?af:Lc;return d(s)}function as(s){if(!s)return s===0?s:0;if(s=vi(s),s===Vt||s===-Vt){var u=s<0?-1:1;return u*Rr}return s===s?s:0}function ft(s){var u=as(s),d=u%1;return u===u?d?u-d:u:0}function G0(s){return s?Tu(ft(s),0,kn):0}function vi(s){if(typeof s=="number")return s;if(oi(s))return Fr;if(vn(s)){var u=typeof s.valueOf=="function"?s.valueOf():s;s=vn(u)?u+"":u}if(typeof s!="string")return s===0?s:+s;s=cb(s);var d=mj.test(s);return d||Tj.test(s)?Jj(s.slice(2),d?2:8):fj.test(s)?Fr:+s}function $0(s){return _a(s,Kr(s))}function CQ(s){return s?Tu(ft(s),-dn,dn):s===0?s:0}function Qt(s){return s==null?"":si(s)}var BQ=Rc(function(s,u){if(ed(u)||jr(u)){_a(u,or(u),s);return}for(var d in u)Xt.call(u,d)&&Jl(s,d,u[d])}),Q0=Rc(function(s,u){_a(u,Kr(u),s)}),Vf=Rc(function(s,u,d,E){_a(u,Kr(u),s,E)}),UQ=Rc(function(s,u,d,E){_a(u,or(u),s,E)}),kQ=ns(fh);function MQ(s,u){var d=Ac(s);return u==null?d:Sb(d,u)}var xQ=yt(function(s,u){s=on(s);var d=-1,E=u.length,S=E>2?u[2]:e;for(S&&wr(u[0],u[1],S)&&(E=1);++d1),L}),_a(s,Lh(s),d),E&&(d=Ii(d,p|T|y,zK));for(var S=u.length;S--;)Oh(d,u[S]);return d});function r2(s,u){return J0(s,Mf(ze(u)))}var i2=ns(function(s,u){return s==null?{}:PK(s,u)});function J0(s,u){if(s==null)return{};var d=hn(Lh(s),function(E){return[E]});return u=ze(u),xb(s,d,function(E,S){return u(E,S[0])})}function a2(s,u,d){u=Lo(u,s);var E=-1,S=u.length;for(S||(S=1,s=e);++Eu){var E=s;s=u,u=E}if(d||s%1||u%1){var S=Ib();return Er(s+S*(u-s+Yj("1e-"+((S+"").length-1))),u)}return _h(s,u)}var T2=Fc(function(s,u,d){return u=u.toLowerCase(),s+(d?W0(u):u)});function W0(s){return Hh(Qt(s).toLowerCase())}function X0(s){return s=Qt(s),s&&s.replace(hj,s1).replace(kj,"")}function E2(s,u,d){s=Qt(s),u=si(u);var E=s.length;d=d===e?E:Tu(ft(d),0,E);var S=d;return d-=u.length,d>=0&&s.slice(d,S)==u}function h2(s){return s=Qt(s),s&&XV.test(s)?s.replace(RD,o1):s}function y2(s){return s=Qt(s),s&&ij.test(s)?s.replace(GE,"\\$&"):s}var I2=Fc(function(s,u,d){return s+(d?"-":"")+u.toLowerCase()}),g2=Fc(function(s,u,d){return s+(d?" ":"")+u.toLowerCase()}),_2=t0("toLowerCase");function v2(s,u,d){s=Qt(s),u=ft(u);var E=u?Sc(s):0;if(!u||E>=u)return s;var S=(u-E)/2;return Rf(Tf(S),d)+s+Rf(Nf(S),d)}function S2(s,u,d){s=Qt(s),u=ft(u);var E=u?Sc(s):0;return u&&E>>0,d?(s=Qt(s),s&&(typeof u=="string"||u!=null&&!Qh(u))&&(u=si(u),!u&&vc(s))?Co(Yi(s),0,d):s.split(u,d)):[]}var P2=Fc(function(s,u,d){return s+(d?" ":"")+Hh(u)});function w2(s,u,d){return s=Qt(s),d=d==null?0:Tu(ft(d),0,s.length),u=si(u),s.slice(d,d+u.length)==u}function L2(s,u,d){var E=R.templateSettings;d&&wr(s,u,d)&&(u=e),s=Qt(s),u=Vf({},u,E,u0);var S=Vf({},u.imports,E.imports,u0),L=or(S),k=sh(S,L),j,H,fe=0,me=u.interpolate||Zp,Ee="__p += '",be=uh((u.escape||Zp).source+"|"+me.source+"|"+(me===FD?pj:Zp).source+"|"+(u.evaluate||Zp).source+"|$","g"),Ve="//# sourceURL="+(Xt.call(u,"sourceURL")?(u.sourceURL+"").replace(/\s/g," "):"lodash.templateSources["+ ++jj+"]")+` +`;s.replace(be,function(Xe,vt,At,ui,Lr,ci){return At||(At=ui),Ee+=s.slice(fe,ci).replace(yj,u1),vt&&(j=!0,Ee+=`' + __e(`+vt+`) + -'`),Lr&&(H=!0,he+=`'; +'`),Lr&&(H=!0,Ee+=`'; `+Lr+`; -__p += '`),At&&(he+=`' + +__p += '`),At&&(Ee+=`' + ((__t = (`+At+`)) == null ? '' : __t) + -'`),de=ui+We.length,We}),he+=`'; -`;var ze=Xt.call(u,"variable")&&u.variable;if(!ze)he=`with (obj) { -`+he+` +'`),fe=ci+Xe.length,Xe}),Ee+=`'; +`;var We=Xt.call(u,"variable")&&u.variable;if(!We)Ee=`with (obj) { +`+Ee+` } -`;else if(uj.test(ze))throw new st(a);he=(H?he.replace(Tn,""):he).replace(Wt,"$1").replace(JV,"$1;"),he="function("+(ze||"obj")+`) { -`+(ze?"":`obj || (obj = {}); -`)+"var __t, __p = ''"+(V?", __e = _.escape":"")+(H?`, __j = Array.prototype.join; +`;else if(lj.test(We))throw new ot(a);Ee=(H?Ee.replace(En,""):Ee).replace(Wt,"$1").replace(zV,"$1;"),Ee="function("+(We||"obj")+`) { +`+(We?"":`obj || (obj = {}); +`)+"var __t, __p = ''"+(j?", __e = _.escape":"")+(H?`, __j = Array.prototype.join; function print() { __p += __j.call(arguments, '') } `:`; -`)+he+`return __p -}`;var ht=X0(function(){return Vt(L,Ve+"return "+he).apply(e,U)});if(ht.source=he,GE(ht))throw ht;return ht}function w2(s){return Qt(s).toLowerCase()}function L2(s){return Qt(s).toUpperCase()}function C2(s,u,d){if(s=Qt(s),s&&(d||u===e))return oD(s);if(!s||!(u=ai(u)))return s;var h=Yi(s),S=Yi(u),L=uD(h,S),U=cD(h,S)+1;return Lo(h,L,U).join("")}function B2(s,u,d){if(s=Qt(s),s&&(d||u===e))return s.slice(0,dD(s)+1);if(!s||!(u=ai(u)))return s;var h=Yi(s),S=cD(h,Yi(u))+1;return Lo(h,0,S).join("")}function U2(s,u,d){if(s=Qt(s),s&&(d||u===e))return s.replace(Gh,"");if(!s||!(u=ai(u)))return s;var h=Yi(s),S=uD(h,Yi(u));return Lo(h,S).join("")}function k2(s,u){var d=et,h=X;if(_n(u)){var S="separator"in u?u.separator:S;d="length"in u?ft(u.length):d,h="omission"in u?ai(u.omission):h}s=Qt(s);var L=s.length;if(_c(s)){var U=Yi(s);L=U.length}if(d>=L)return s;var V=d-vc(h);if(V<1)return h;var H=U?Lo(U,0,V).join(""):s.slice(0,V);if(S===e)return H+h;if(U&&(V+=H.length-V),$E(S)){if(s.slice(V).search(S)){var de,fe=H;for(S.global||(S=oE(S.source,Qt(Rb.exec(S))+"g")),S.lastIndex=0;de=S.exec(fe);)var he=de.index;H=H.slice(0,he===e?V:he)}}else if(s.indexOf(ai(S),V)!=V){var De=H.lastIndexOf(S);De>-1&&(H=H.slice(0,De))}return H+h}function M2(s){return s=Qt(s),s&&HV.test(s)?s.replace(bb,f1):s}var x2=Rc(function(s,u,d){return s+(d?" ":"")+u.toUpperCase()}),JE=ZD("toUpperCase");function W0(s,u,d){return s=Qt(s),u=d?e:u,u===e?u1(s)?N1(s):Zj(s):s.match(u)||[]}var X0=yt(function(s,u){try{return ri(s,e,u)}catch(d){return GE(d)?d:new st(d)}}),q2=ns(function(s,u){return Ni(u,function(d){d=va(d),es(s,d,jE(s[d],s))}),s});function V2(s){var u=s==null?0:s.length,d=He();return s=u?Nn(s,function(h){if(typeof h[1]!="function")throw new hi(i);return[d(h[0]),h[1]]}):[],yt(function(h){for(var S=-1;++Scn)return[];var d=kn,h=hr(s,kn);u=He(u),s-=kn;for(var S=iE(h,u);++d0||u<0)?new St(d):(s<0?d=d.takeRight(-s):s&&(d=d.drop(s)),u!==e&&(u=ft(u),d=u<0?d.dropRight(-u):d.take(u-s)),d)},St.prototype.takeRightWhile=function(s){return this.reverse().takeWhile(s).reverse()},St.prototype.toArray=function(){return this.take(kn)},ga(St.prototype,function(s,u){var d=/^(?:filter|find|map|reject)|While$/.test(u),h=/^(?:head|last)$/.test(u),S=R[h?"take"+(u=="last"?"Right":""):u],L=h||/^find/.test(u);S&&(R.prototype[u]=function(){var U=this.__wrapped__,V=h?[1]:arguments,H=U instanceof St,de=V[0],fe=H||ct(U),he=function(vt){var At=S.apply(R,bo([vt],V));return h&&De?At[0]:At};fe&&d&&typeof de=="function"&&de.length!=1&&(H=fe=!1);var De=this.__chain__,Ve=!!this.__actions__.length,ze=L&&!De,ht=H&&!Ve;if(!L&&fe){U=ht?U:new St(this);var We=s.apply(U,V);return We.__actions__.push({func:Lf,args:[he],thisArg:e}),new Ei(We,De)}return ze&&ht?s.apply(this,V):(We=this.thru(he),ze?h?We.value()[0]:We.value():We)})}),Ni(["pop","push","shift","sort","splice","unshift"],function(s){var u=af[s],d=/^(?:push|sort|unshift)$/.test(s)?"tap":"thru",h=/^(?:pop|shift)$/.test(s);R.prototype[s]=function(){var S=arguments;if(h&&!this.__chain__){var L=this.value();return u.apply(ct(L)?L:[],S)}return this[d](function(U){return u.apply(ct(U)?U:[],S)})}}),ga(St.prototype,function(s,u){var d=R[u];if(d){var h=d.name+"";Xt.call(bc,h)||(bc[h]=[]),bc[h].push({name:u,func:d})}}),bc[bf(e,B).name]=[{name:"wrapper",func:e}],St.prototype.clone=M1,St.prototype.reverse=x1,St.prototype.value=q1,R.prototype.at=T$,R.prototype.chain=N$,R.prototype.commit=h$,R.prototype.next=E$,R.prototype.plant=I$,R.prototype.reverse=g$,R.prototype.toJSON=R.prototype.valueOf=R.prototype.value=_$,R.prototype.first=R.prototype.head,jl&&(R.prototype[jl]=y$),R},Ao=h1();typeof define=="function"&&typeof define.amd=="object"&&define.amd?(sr._=Ao,define(function(){return Ao})):lu?((lu.exports=Ao)._=Ao,zh._=Ao):sr._=Ao}).call(Pl)});var Aq=P(lc=>{"use strict";f();T();m();Object.defineProperty(lc,"__esModule",{value:!0});lc.FederationFactory=void 0;lc.federateSubgraphs=Gce;lc.federateSubgraphsWithContracts=$ce;lc.federateSubgraphsContract=Qce;var Re=Ae(),Sq=Yo(),Mr=Jr(),Fe=sa(),cc=NT(),Oq=tp(),ti=op(),lh=oO(),Kn=Es(),Vce=LO(),jce=Op(),bq=bp(),ge=Ap(),Kce=UO(),Dq=vq(),wl=ch(),Oe=lr(),dh=tl(),Ee=Hr(),ph=class{constructor(t){v(this,"authorizationDataByParentTypeName");v(this,"concreteTypeNamesByAbstractTypeName");v(this,"clientDefinitions",[Kn.DEPRECATED_DEFINITION]);v(this,"currentSubgraphName","");v(this,"subgraphNamesByNamedTypeNameByFieldCoords",new Map);v(this,"entityDataByTypeName");v(this,"entityInterfaceFederationDataByTypeName");v(this,"errors",[]);v(this,"fieldConfigurationByFieldCoords",new Map);v(this,"fieldCoordsByNamedTypeName");v(this,"inaccessibleCoords",new Set);v(this,"inaccessibleRequiredInputValueErrorByCoords",new Map);v(this,"isMaxDepth",!1);v(this,"internalGraph");v(this,"internalSubgraphBySubgraphName");v(this,"invalidORScopesCoords",new Set);v(this,"isVersionTwo",!1);v(this,"namedInputValueTypeNames",new Set);v(this,"namedOutputTypeNames",new Set);v(this,"parentDefinitionDataByTypeName",new Map);v(this,"parentTagDataByTypeName",new Map);v(this,"coordsByNamedTypeName",new Map);v(this,"persistedDirectiveDefinitionByDirectiveName",new Map([[Oe.AUTHENTICATED,Kn.AUTHENTICATED_DEFINITION],[Oe.DEPRECATED,Kn.DEPRECATED_DEFINITION],[Oe.INACCESSIBLE,Kn.INACCESSIBLE_DEFINITION],[Oe.REQUIRES_SCOPES,Kn.REQUIRES_SCOPES_DEFINITION],[Oe.TAG,Kn.TAG_DEFINITION]]));v(this,"persistedDirectiveDefinitions",new Set([Oe.AUTHENTICATED,Oe.DEPRECATED,Oe.INACCESSIBLE,Oe.TAG,Oe.REQUIRES_SCOPES]));v(this,"potentialPersistedDirectiveDefinitionDataByDirectiveName",new Map);v(this,"routerDefinitions",[Kn.DEPRECATED_DEFINITION,Kn.TAG_DEFINITION]);v(this,"subscriptionFilterDataByFieldPath",new Map);v(this,"tagNamesByCoords",new Map);v(this,"warnings");this.authorizationDataByParentTypeName=t.authorizationDataByParentTypeName,this.concreteTypeNamesByAbstractTypeName=t.concreteTypeNamesByAbstractTypeName,this.entityDataByTypeName=t.entityDataByTypeName,this.entityInterfaceFederationDataByTypeName=t.entityInterfaceFederationDataByTypeName,this.fieldCoordsByNamedTypeName=t.fieldCoordsByNamedTypeName,this.internalSubgraphBySubgraphName=t.internalSubgraphBySubgraphName,this.internalGraph=t.internalGraph,this.warnings=t.warnings}getValidImplementedInterfaces(t){var o;let n=[];if(t.implementedInterfaceTypeNames.size<1)return n;let r=(0,ge.isNodeDataInaccessible)(t),i=new Map,a=new Map;for(let c of t.implementedInterfaceTypeNames){n.push((0,Mr.stringToNamedTypeNode)(c));let l=(0,Ee.getOrThrowError)(this.parentDefinitionDataByTypeName,c,Oe.PARENT_DEFINITION_DATA);if(l.kind!==Re.Kind.INTERFACE_TYPE_DEFINITION){a.set(l.name,(0,Ee.kindToTypeString)(l.kind));continue}let p={invalidFieldImplementations:new Map,unimplementedFields:[]},N=!1;for(let[y,g]of l.fieldDataByFieldName){let _=!1,F=t.fieldDataByFieldName.get(y);if(!F){N=!0,p.unimplementedFields.push(y);continue}let B={invalidAdditionalArguments:new Set,invalidImplementedArguments:[],isInaccessible:!1,originalResponseType:(0,lh.printTypeNode)(g.node.type),unimplementedArguments:new Set};(0,ge.isTypeValidImplementation)(g.node.type,F.node.type,this.concreteTypeNamesByAbstractTypeName)||(N=!0,_=!0,B.implementedResponseType=(0,lh.printTypeNode)(F.node.type));let j=new Set;for(let[J,Z]of g.argumentDataByArgumentName){let W=Z.node;j.add(J);let Ne=(o=F.argumentDataByArgumentName.get(J))==null?void 0:o.node;if(!Ne){N=!0,_=!0,B.unimplementedArguments.add(J);continue}let le=(0,lh.printTypeNode)(Ne.type),we=(0,lh.printTypeNode)(W.type);we!==le&&(N=!0,_=!0,B.invalidImplementedArguments.push({actualType:le,argumentName:J,expectedType:we}))}for(let[J,Z]of F.argumentDataByArgumentName){let W=Z.node;j.has(J)||W.type.kind===Re.Kind.NON_NULL_TYPE&&(N=!0,_=!0,B.invalidAdditionalArguments.add(J))}!r&&F.isInaccessible&&!g.isInaccessible&&(N=!0,_=!0,B.isInaccessible=!0),_&&p.invalidFieldImplementations.set(y,B)}N&&i.set(c,p)}return a.size>0&&this.errors.push((0,Fe.invalidImplementedTypeError)(t.name,a)),i.size>0&&this.errors.push((0,Fe.invalidInterfaceImplementationError)(t.node.name.value,(0,Ee.kindToTypeString)(t.kind),i)),n}addValidPrimaryKeyTargetsToEntityData(t){var N;let n=this.entityDataByTypeName.get(t);if(!n)return;let r=(0,Ee.getOrThrowError)(this.internalSubgraphBySubgraphName,this.currentSubgraphName,"internalSubgraphBySubgraphName"),i=r.parentDefinitionDataByTypeName,a=i.get(n.typeName);if(!a||a.kind!==Re.Kind.OBJECT_TYPE_DEFINITION)throw(0,Fe.incompatibleParentKindFatalError)(n.typeName,Re.Kind.OBJECT_TYPE_DEFINITION,(a==null?void 0:a.kind)||Re.Kind.NULL);let o=(0,Ee.getOrThrowError)(r.configurationDataByTypeName,n.typeName,"internalSubgraph.configurationDataByTypeName"),c=[],l=this.internalGraph.nodeByNodeName.get(`${this.currentSubgraphName}.${n.typeName}`);(0,cc.validateImplicitFieldSets)({conditionalFieldDataByCoords:r.conditionalFieldDataByCoordinates,currentSubgraphName:this.currentSubgraphName,entityData:n,implicitKeys:c,objectData:a,parentDefinitionDataByTypeName:i,graphNode:l});for(let[y,g]of this.entityInterfaceFederationDataByTypeName){if(!((N=g.concreteTypeNames)!=null&&N.has(n.typeName)))continue;let _=this.entityDataByTypeName.get(y);_&&(0,cc.validateImplicitFieldSets)({conditionalFieldDataByCoords:r.conditionalFieldDataByCoordinates,currentSubgraphName:this.currentSubgraphName,entityData:_,implicitKeys:c,objectData:a,parentDefinitionDataByTypeName:i,graphNode:l})}if(c.length<1)return;if(!o.keys||o.keys.length<1){o.isRootNode=!0,o.keys=c;return}let p=new Set(o.keys.map(y=>y.selectionSet));for(let y of c)p.has(y.selectionSet)||(o.keys.push(y),p.add(y.selectionSet))}addValidPrimaryKeyTargetsFromInterfaceObject(t,n,r,i){let a=t.parentDefinitionDataByTypeName,o=a.get(n);if(!o||!(0,ge.isParentDataCompositeOutputType)(o))throw(0,Fe.incompatibleParentKindFatalError)(n,Re.Kind.INTERFACE_TYPE_DEFINITION,(o==null?void 0:o.kind)||Re.Kind.NULL);let c=(0,Ee.getOrThrowError)(t.configurationDataByTypeName,r.typeName,"internalSubgraph.configurationDataByTypeName"),l=[];if((0,cc.validateImplicitFieldSets)({conditionalFieldDataByCoords:t.conditionalFieldDataByCoordinates,currentSubgraphName:t.name,entityData:r,implicitKeys:l,objectData:o,parentDefinitionDataByTypeName:a,graphNode:i}),l.length<1)return;if(!c.keys||c.keys.length<1){c.isRootNode=!0,c.keys=l;return}let p=new Set(c.keys.map(N=>N.selectionSet));for(let N of l)p.has(N.selectionSet)||(c.keys.push(N),p.add(N.selectionSet))}getEnumValueMergeMethod(t){return this.namedInputValueTypeNames.has(t)?this.namedOutputTypeNames.has(t)?ge.MergeMethod.CONSISTENT:ge.MergeMethod.INTERSECTION:ge.MergeMethod.UNION}generateTagData(){for(let[t,n]of this.tagNamesByCoords){let r=t.split(".");if(r.length<1)continue;let i=(0,Ee.getValueOrDefault)(this.parentTagDataByTypeName,r[0],()=>(0,cc.newParentTagData)(r[0]));switch(r.length){case 1:for(let l of n)i.tagNames.add(l);break;case 2:let a=(0,Ee.getValueOrDefault)(i.childTagDataByChildName,r[1],()=>(0,cc.newChildTagData)(r[1]));for(let l of n)a.tagNames.add(l);break;case 3:let o=(0,Ee.getValueOrDefault)(i.childTagDataByChildName,r[1],()=>(0,cc.newChildTagData)(r[1])),c=(0,Ee.getValueOrDefault)(o.tagNamesByArgumentName,r[2],()=>new Set);for(let l of n)c.add(l);break;default:break}}}upsertEnumValueData(t,n,r){let i=t.get(n.name),a=i||this.copyEnumValueData(n);(0,ge.extractPersistedDirectives)(a.persistedDirectivesData,n.directivesByDirectiveName,this.persistedDirectiveDefinitionByDirectiveName);let o=(0,ge.isNodeDataInaccessible)(n);if((r||o)&&this.inaccessibleCoords.add(a.federatedCoords),this.recordTagNamesByCoords(a,a.federatedCoords),!i){t.set(a.name,a);return}a.appearances+=1,(0,Ee.addNewObjectValueMapEntries)(n.configureDescriptionDataBySubgraphName,a.configureDescriptionDataBySubgraphName),(0,ge.setLongestDescription)(a,n),(0,Ee.addIterableValuesToSet)(n.subgraphNames,a.subgraphNames)}upsertInputValueData(t,n,r,i){let a=t.get(n.name),o=a||this.copyInputValueData(n);if((0,ge.extractPersistedDirectives)(o.persistedDirectivesData,n.directivesByDirectiveName,this.persistedDirectiveDefinitionByDirectiveName),this.recordTagNamesByCoords(o,`${r}.${o.name}`),this.namedInputValueTypeNames.add(o.namedTypeName),(0,Ee.getValueOrDefault)(this.coordsByNamedTypeName,o.namedTypeName,()=>new Set).add(o.federatedCoords),!a){t.set(o.name,o);return}(0,Ee.addNewObjectValueMapEntries)(n.configureDescriptionDataBySubgraphName,o.configureDescriptionDataBySubgraphName),(0,ge.setLongestDescription)(o,n),(0,Ee.addIterableValuesToSet)(n.requiredSubgraphNames,o.requiredSubgraphNames),(0,Ee.addIterableValuesToSet)(n.subgraphNames,o.subgraphNames),this.handleInputValueInaccessibility(i,o,r);let{typeErrors:c,typeNode:l}=(0,wl.getMostRestrictiveMergedTypeNode)(o.type,n.type,o.originalCoords,this.errors);if(l)o.type=l;else{if(!c||c.length<2)throw(0,Fe.fieldTypeMergeFatalError)(o.name);a.isArgument?this.errors.push((0,Fe.incompatibleArgumentTypesError)(o.name,o.federatedCoords,c[0],c[1])):this.errors.push((0,Fe.incompatibleChildTypesError)(o.federatedCoords,c[0],c[1]))}(0,ge.compareAndValidateInputValueDefaultValues)(o,n,this.errors)}handleInputValueInaccessibility(t,n,r){if(t){this.inaccessibleRequiredInputValueErrorByCoords.delete(n.federatedCoords),this.inaccessibleCoords.add(n.federatedCoords);return}if((0,ge.isNodeDataInaccessible)(n)){if((0,ge.isTypeRequired)(n.type)){this.inaccessibleRequiredInputValueErrorByCoords.set(n.federatedCoords,(0,Fe.inaccessibleRequiredInputValueError)(n,r));return}this.inaccessibleCoords.add(n.federatedCoords)}}handleSubscriptionFilterDirective(t,n){let r=t.directivesByDirectiveName.get(Oe.SUBSCRIPTION_FILTER);if(!r)return;let i=(0,Ee.getSingleSetEntry)(t.subgraphNames);if(i===void 0){this.errors.push((0,Fe.unknownFieldSubgraphNameError)(t.federatedCoords));return}this.subscriptionFilterDataByFieldPath.set(t.federatedCoords,{directive:r[0],fieldData:n||t,directiveSubgraphName:i})}federateOutputType({current:t,other:n,coords:r,mostRestrictive:i}){n=(0,Sq.getMutableTypeNode)(n,r,this.errors);let a={kind:t.kind},o=wl.DivergentType.NONE,c=a;for(let l=0;lnew Set))}upsertFieldData(t,n,r){let i=t.get(n.name),a=i||this.copyFieldData(n,r||(0,ge.isNodeDataInaccessible)(n));(0,Ee.getValueOrDefault)(this.coordsByNamedTypeName,n.namedTypeName,()=>new Set).add(a.federatedCoords),this.namedOutputTypeNames.add(n.namedTypeName),this.handleSubscriptionFilterDirective(n,a),(0,ge.extractPersistedDirectives)(a.persistedDirectivesData,n.directivesByDirectiveName,this.persistedDirectiveDefinitionByDirectiveName);let o=r||(0,ge.isNodeDataInaccessible)(a);if(o&&this.inaccessibleCoords.add(a.federatedCoords),this.recordTagNamesByCoords(a,a.federatedCoords),!i){t.set(a.name,a);return}let c=this.federateOutputType({current:a.type,other:n.type,coords:a.federatedCoords,mostRestrictive:!1});if(c.success)if(a.type=c.typeNode,a.namedTypeName!==n.namedTypeName){let l=(0,Ee.getValueOrDefault)(this.subgraphNamesByNamedTypeNameByFieldCoords,a.federatedCoords,()=>new Map),p=(0,Ee.getValueOrDefault)(l,a.namedTypeName,()=>new Set);if(p.size<1)for(let N of a.subgraphNames)n.subgraphNames.has(N)||p.add(N);(0,Ee.addIterableValuesToSet)(n.subgraphNames,(0,Ee.getValueOrDefault)(l,n.namedTypeName,()=>new Set))}else this.addSubgraphNameToExistingFieldNamedTypeDisparity(n);for(let l of n.argumentDataByArgumentName.values())this.upsertInputValueData(a.argumentDataByArgumentName,l,a.federatedCoords,o);(0,Ee.addNewObjectValueMapEntries)(n.configureDescriptionDataBySubgraphName,i.configureDescriptionDataBySubgraphName),(0,ge.setLongestDescription)(a,n),a.isInaccessible||(a.isInaccessible=n.isInaccessible),(0,Ee.addNewObjectValueMapEntries)(n.externalFieldDataBySubgraphName,a.externalFieldDataBySubgraphName),(0,Ee.addMapEntries)(n.isShareableBySubgraphName,a.isShareableBySubgraphName),(0,Ee.addIterableValuesToSet)(n.subgraphNames,a.subgraphNames)}getClientSchemaUnionMembers(t){let n=[];for(let[r,i]of t.memberByMemberTypeName)this.inaccessibleCoords.has(r)||n.push(i);return n}recordTagNamesByCoords(t,n){let r=n||t.name;if(t.persistedDirectivesData.tagDirectiveByName.size<1)return;let i=(0,Ee.getValueOrDefault)(this.tagNamesByCoords,r,()=>new Set);for(let a of t.persistedDirectivesData.tagDirectiveByName.keys())i.add(a)}copyMutualParentDefinitionData(t){return{configureDescriptionDataBySubgraphName:(0,Ee.copyObjectValueMap)(t.configureDescriptionDataBySubgraphName),directivesByDirectiveName:(0,Ee.copyArrayValueMap)(t.directivesByDirectiveName),extensionType:t.extensionType,name:t.name,persistedDirectivesData:(0,ge.extractPersistedDirectives)((0,ge.newPersistedDirectivesData)(),t.directivesByDirectiveName,this.persistedDirectiveDefinitionByDirectiveName),description:(0,ge.getInitialFederatedDescription)(t)}}copyEnumValueData(t){return{appearances:t.appearances,configureDescriptionDataBySubgraphName:(0,Ee.copyObjectValueMap)(t.configureDescriptionDataBySubgraphName),federatedCoords:t.federatedCoords,directivesByDirectiveName:(0,Ee.copyArrayValueMap)(t.directivesByDirectiveName),kind:t.kind,name:t.name,node:{directives:[],kind:t.kind,name:(0,Mr.stringToNameNode)(t.name)},parentTypeName:t.parentTypeName,persistedDirectivesData:(0,ge.extractPersistedDirectives)((0,ge.newPersistedDirectivesData)(),t.directivesByDirectiveName,this.persistedDirectiveDefinitionByDirectiveName),subgraphNames:new Set(t.subgraphNames),description:(0,ge.getInitialFederatedDescription)(t)}}copyInputValueData(t){return{configureDescriptionDataBySubgraphName:(0,Ee.copyObjectValueMap)(t.configureDescriptionDataBySubgraphName),directivesByDirectiveName:(0,Ee.copyArrayValueMap)(t.directivesByDirectiveName),includeDefaultValue:t.includeDefaultValue,isArgument:t.isArgument,kind:t.kind,name:t.name,namedTypeName:t.namedTypeName,node:{directives:[],kind:Re.Kind.INPUT_VALUE_DEFINITION,name:(0,Mr.stringToNameNode)(t.name),type:t.type},originalCoords:t.originalCoords,persistedDirectivesData:(0,ge.extractPersistedDirectives)((0,ge.newPersistedDirectivesData)(),t.directivesByDirectiveName,this.persistedDirectiveDefinitionByDirectiveName),federatedCoords:t.federatedCoords,requiredSubgraphNames:new Set(t.requiredSubgraphNames),subgraphNames:new Set(t.subgraphNames),type:t.type,defaultValue:t.defaultValue,description:(0,ge.getInitialFederatedDescription)(t)}}copyInputValueDataByValueName(t,n,r){let i=new Map;for(let[a,o]of t){let c=this.copyInputValueData(o);this.handleInputValueInaccessibility(n,c,r),(0,Ee.getValueOrDefault)(this.coordsByNamedTypeName,c.namedTypeName,()=>new Set).add(c.federatedCoords),this.namedInputValueTypeNames.add(c.namedTypeName),this.recordTagNamesByCoords(c,`${r}.${o.name}`),i.set(a,c)}return i}copyFieldData(t,n){return{argumentDataByArgumentName:this.copyInputValueDataByValueName(t.argumentDataByArgumentName,n,t.federatedCoords),configureDescriptionDataBySubgraphName:(0,Ee.copyObjectValueMap)(t.configureDescriptionDataBySubgraphName),directivesByDirectiveName:(0,Ee.copyArrayValueMap)(t.directivesByDirectiveName),externalFieldDataBySubgraphName:(0,Ee.copyObjectValueMap)(t.externalFieldDataBySubgraphName),federatedCoords:t.federatedCoords,isInaccessible:t.isInaccessible,isShareableBySubgraphName:new Map(t.isShareableBySubgraphName),kind:t.kind,name:t.name,namedTypeName:t.namedTypeName,node:{arguments:[],directives:[],kind:t.kind,name:(0,Mr.stringToNameNode)(t.name),type:t.type},originalParentTypeName:t.originalParentTypeName,persistedDirectivesData:(0,ge.extractPersistedDirectives)((0,ge.newPersistedDirectivesData)(),t.directivesByDirectiveName,this.persistedDirectiveDefinitionByDirectiveName),renamedParentTypeName:t.renamedParentTypeName,subgraphNames:new Set(t.subgraphNames),type:t.type,description:(0,ge.getInitialFederatedDescription)(t)}}copyEnumValueDataByValueName(t,n){let r=new Map;for(let[i,a]of t){let o=this.copyEnumValueData(a);this.recordTagNamesByCoords(o,o.federatedCoords),(n||(0,ge.isNodeDataInaccessible)(o))&&this.inaccessibleCoords.add(o.federatedCoords),r.set(i,o)}return r}copyFieldDataByFieldName(t,n){let r=new Map;for(let[i,a]of t){let o=n||(0,ge.isNodeDataInaccessible)(a),c=this.copyFieldData(a,o);this.handleSubscriptionFilterDirective(c),(0,Ee.getValueOrDefault)(this.coordsByNamedTypeName,c.namedTypeName,()=>new Set).add(c.federatedCoords),this.namedOutputTypeNames.add(c.namedTypeName),this.recordTagNamesByCoords(c,c.federatedCoords),o&&this.inaccessibleCoords.add(c.federatedCoords),r.set(i,c)}return r}copyParentDefinitionData(t){let n=this.copyMutualParentDefinitionData(t);switch(t.kind){case Re.Kind.ENUM_TYPE_DEFINITION:return Q(k({},n),{appearances:t.appearances,enumValueDataByValueName:this.copyEnumValueDataByValueName(t.enumValueDataByValueName,t.isInaccessible),isInaccessible:t.isInaccessible,kind:t.kind,node:{kind:t.kind,name:(0,Mr.stringToNameNode)(t.name)},subgraphNames:new Set(t.subgraphNames)});case Re.Kind.INPUT_OBJECT_TYPE_DEFINITION:return Q(k({},n),{inputValueDataByValueName:this.copyInputValueDataByValueName(t.inputValueDataByValueName,t.isInaccessible,t.name),isInaccessible:t.isInaccessible,kind:t.kind,node:{kind:t.kind,name:(0,Mr.stringToNameNode)(t.name)},subgraphNames:new Set(t.subgraphNames)});case Re.Kind.INTERFACE_TYPE_DEFINITION:return Q(k({},n),{fieldDataByFieldName:this.copyFieldDataByFieldName(t.fieldDataByFieldName,t.isInaccessible),implementedInterfaceTypeNames:new Set(t.implementedInterfaceTypeNames),isEntity:t.isEntity,isInaccessible:t.isInaccessible,kind:t.kind,node:{kind:t.kind,name:(0,Mr.stringToNameNode)(t.name)},subgraphNames:new Set(t.subgraphNames)});case Re.Kind.OBJECT_TYPE_DEFINITION:return Q(k({},n),{fieldDataByFieldName:this.copyFieldDataByFieldName(t.fieldDataByFieldName,t.isInaccessible),implementedInterfaceTypeNames:new Set(t.implementedInterfaceTypeNames),isEntity:t.isEntity,isInaccessible:t.isInaccessible,isRootType:t.isRootType,kind:t.kind,node:{kind:t.kind,name:(0,Mr.stringToNameNode)(t.renamedTypeName||t.name)},renamedTypeName:t.renamedTypeName,subgraphNames:new Set(t.subgraphNames)});case Re.Kind.SCALAR_TYPE_DEFINITION:return Q(k({},n),{kind:t.kind,node:{kind:t.kind,name:(0,Mr.stringToNameNode)(t.name)},subgraphNames:new Set(t.subgraphNames)});case Re.Kind.UNION_TYPE_DEFINITION:return Q(k({},n),{kind:t.kind,node:{kind:t.kind,name:(0,Mr.stringToNameNode)(t.name)},memberByMemberTypeName:new Map(t.memberByMemberTypeName),subgraphNames:new Set(t.subgraphNames)})}}getParentTargetData({existingData:t,incomingData:n}){if(!t){let r=this.copyParentDefinitionData(n);return(0,ge.isParentDataRootType)(r)&&(r.extensionType=bq.ExtensionType.NONE),r}return(0,ge.extractPersistedDirectives)(t.persistedDirectivesData,n.directivesByDirectiveName,this.persistedDirectiveDefinitionByDirectiveName),t}upsertParentDefinitionData(t,n){let r=this.entityInterfaceFederationDataByTypeName.get(t.name),i=this.parentDefinitionDataByTypeName.get(t.name),a=this.getParentTargetData({existingData:i,incomingData:t});this.recordTagNamesByCoords(a);let o=(0,ge.isNodeDataInaccessible)(a);if(o&&this.inaccessibleCoords.add(a.name),r&&r.interfaceObjectSubgraphs.has(n)&&(a.kind=Re.Kind.INTERFACE_TYPE_DEFINITION,a.node.kind=Re.Kind.INTERFACE_TYPE_DEFINITION),!i){this.parentDefinitionDataByTypeName.set(a.name,a);return}if(a.kind!==t.kind&&(!r||!r.interfaceObjectSubgraphs.has(n)||a.kind!==Re.Kind.INTERFACE_TYPE_DEFINITION||t.kind!==Re.Kind.OBJECT_TYPE_DEFINITION)){this.errors.push((0,Fe.incompatibleParentKindMergeError)(a.name,(0,Ee.kindToTypeString)(a.kind),(0,Ee.kindToTypeString)(t.kind)));return}switch((0,Ee.addNewObjectValueMapEntries)(t.configureDescriptionDataBySubgraphName,a.configureDescriptionDataBySubgraphName),(0,ge.setLongestDescription)(a,t),(0,ge.setParentDataExtensionType)(a,t),a.kind){case Re.Kind.ENUM_TYPE_DEFINITION:if(!(0,ge.areKindsEqual)(a,t))return;a.appearances+=1,a.isInaccessible||(a.isInaccessible=o),(0,Ee.addIterableValuesToSet)(t.subgraphNames,a.subgraphNames);for(let l of t.enumValueDataByValueName.values())this.upsertEnumValueData(a.enumValueDataByValueName,l,o);return;case Re.Kind.INPUT_OBJECT_TYPE_DEFINITION:if(!(0,ge.areKindsEqual)(a,t))return;o&&!a.isInaccessible&&this.propagateInaccessibilityToExistingChildren(a),a.isInaccessible||(a.isInaccessible=o),(0,Ee.addIterableValuesToSet)(t.subgraphNames,a.subgraphNames);for(let l of t.inputValueDataByValueName.values())this.upsertInputValueData(a.inputValueDataByValueName,l,a.name,a.isInaccessible);return;case Re.Kind.INTERFACE_TYPE_DEFINITION:case Re.Kind.OBJECT_TYPE_DEFINITION:let c=t;o&&!a.isInaccessible&&this.propagateInaccessibilityToExistingChildren(a),a.isInaccessible||(a.isInaccessible=o),(0,Ee.addIterableValuesToSet)(c.implementedInterfaceTypeNames,a.implementedInterfaceTypeNames),(0,Ee.addIterableValuesToSet)(c.subgraphNames,a.subgraphNames);for(let l of c.fieldDataByFieldName.values())this.upsertFieldData(a.fieldDataByFieldName,l,a.isInaccessible);return;case Re.Kind.UNION_TYPE_DEFINITION:if(!(0,ge.areKindsEqual)(a,t))return;(0,Ee.addMapEntries)(t.memberByMemberTypeName,a.memberByMemberTypeName),(0,Ee.addIterableValuesToSet)(t.subgraphNames,a.subgraphNames);return;default:(0,Ee.addIterableValuesToSet)(t.subgraphNames,a.subgraphNames);return}}propagateInaccessibilityToExistingChildren(t){switch(t.kind){case Re.Kind.INPUT_OBJECT_TYPE_DEFINITION:for(let n of t.inputValueDataByValueName.values())this.inaccessibleCoords.add(n.federatedCoords);break;default:for(let n of t.fieldDataByFieldName.values()){this.inaccessibleCoords.add(n.federatedCoords);for(let r of n.argumentDataByArgumentName.values())this.inaccessibleCoords.add(r.federatedCoords)}}}upsertPersistedDirectiveDefinitionData(t,n){let r=t.name,i=this.potentialPersistedDirectiveDefinitionDataByDirectiveName.get(r);if(!i){if(n>1)return;let a=new Map;for(let o of t.argumentDataByArgumentName.values())this.namedInputValueTypeNames.add(o.namedTypeName),this.upsertInputValueData(a,o,`@${t.name}`,!1);this.potentialPersistedDirectiveDefinitionDataByDirectiveName.set(r,{argumentDataByArgumentName:a,executableLocations:new Set(t.executableLocations),name:r,repeatable:t.repeatable,subgraphNames:new Set(t.subgraphNames),description:t.description});return}if(i.subgraphNames.size+1!==n){this.potentialPersistedDirectiveDefinitionDataByDirectiveName.delete(r);return}if((0,ge.setMutualExecutableLocations)(i,t.executableLocations),i.executableLocations.size<1){this.potentialPersistedDirectiveDefinitionDataByDirectiveName.delete(r);return}for(let a of t.argumentDataByArgumentName.values())this.namedInputValueTypeNames.add((0,Sq.getTypeNodeNamedTypeName)(a.type)),this.upsertInputValueData(i.argumentDataByArgumentName,a,`@${i.name}`,!1);(0,ge.setLongestDescription)(i,t),i.repeatable&&(i.repeatable=t.repeatable),(0,Ee.addIterableValuesToSet)(t.subgraphNames,i.subgraphNames)}shouldUpdateFederatedFieldAbstractNamedType(t,n){if(!t)return!1;let r=this.concreteTypeNamesByAbstractTypeName.get(t);if(!r||r.size<1)return!1;for(let i of n)if(!r.has(i))return!1;return!0}updateTypeNodeNamedType(t,n){let r=t;for(let i=0;i1){this.errors.push((0,Fe.incompatibleFederatedFieldNamedTypeError)(t,n));continue}break}case Re.Kind.UNION_TYPE_DEFINITION:{if(l){this.errors.push((0,Fe.incompatibleFederatedFieldNamedTypeError)(t,n));continue}l=N;break}default:{this.errors.push((0,Fe.incompatibleFederatedFieldNamedTypeError)(t,n));break}}}if(o.size<0&&!l){this.errors.push((0,Fe.incompatibleFederatedFieldNamedTypeError)(t,n));continue}let p=l;if(o.size>0){if(l){this.errors.push((0,Fe.incompatibleFederatedFieldNamedTypeError)(t,n));continue}for(let N of o.keys()){p=N;for(let[y,g]of o)if(N!==y&&!g.implementedInterfaceTypeNames.has(N)){p="";break}if(p)break}}if(!this.shouldUpdateFederatedFieldAbstractNamedType(p,c)){this.errors.push((0,Fe.incompatibleFederatedFieldNamedTypeError)(t,n));continue}a.namedTypeName=p,this.updateTypeNodeNamedType(a.type,p)}}federateInternalSubgraphData(){let t=0,n=!1;for(let r of this.internalSubgraphBySubgraphName.values()){t+=1,this.currentSubgraphName=r.name,this.isVersionTwo||(this.isVersionTwo=r.isVersionTwo),(0,Kce.renameRootTypes)(this,r);for(let i of r.parentDefinitionDataByTypeName.values())this.upsertParentDefinitionData(i,r.name);if(!n){if(!r.persistedDirectiveDefinitionDataByDirectiveName.size){n=!0;continue}for(let i of r.persistedDirectiveDefinitionDataByDirectiveName.values())this.upsertPersistedDirectiveDefinitionData(i,t);this.potentialPersistedDirectiveDefinitionDataByDirectiveName.size<1&&(n=!0)}}this.handleDisparateFieldNamedTypes()}handleInterfaceObjectForInternalGraph({entityData:t,internalSubgraph:n,interfaceObjectData:r,interfaceObjectNode:i,resolvableKeyFieldSets:a,subgraphName:o}){let c=this.internalGraph.addOrUpdateNode(t.typeName),l=this.internalGraph.addEntityDataNode(t.typeName);for(let N of i.satisfiedFieldSets)c.satisfiedFieldSets.add(N),a.has(N)&&l.addTargetSubgraphByFieldSet(N,o);let p=r.fieldDatasBySubgraphName.get(o);for(let{name:N,namedTypeName:y}of p||[])this.internalGraph.addEdge(c,this.internalGraph.addOrUpdateNode(y),N);this.internalGraph.addEdge(i,c,t.typeName,!0),this.addValidPrimaryKeyTargetsFromInterfaceObject(n,i.typeName,t,c)}handleEntityInterfaces(){for(let[t,n]of this.entityInterfaceFederationDataByTypeName){(0,ti.subtractSet)(n.interfaceFieldNames,n.interfaceObjectFieldNames);let r=(0,Ee.getOrThrowError)(this.parentDefinitionDataByTypeName,t,Oe.PARENT_DEFINITION_DATA);if(r.kind===Re.Kind.INTERFACE_TYPE_DEFINITION)for(let i of n.interfaceObjectSubgraphs){let a=(0,Ee.getOrThrowError)(this.internalSubgraphBySubgraphName,i,"internalSubgraphBySubgraphName"),o=a.configurationDataByTypeName,c=this.concreteTypeNamesByAbstractTypeName.get(t);if(!c)continue;let l=(0,Ee.getOrThrowError)(o,t,"configurationDataMap"),p=l.keys;if(!p)continue;l.entityInterfaceConcreteTypeNames=n.concreteTypeNames;let N=l.fieldNames;this.internalGraph.setSubgraphName(i);let y=this.internalGraph.addOrUpdateNode(t,{isAbstract:!0});for(let g of c){if(o.has(g))continue;let _=(0,Ee.getOrThrowError)(this.parentDefinitionDataByTypeName,g,Oe.PARENT_DEFINITION_DATA);if(!(0,ti.isObjectDefinitionData)(_))continue;let F=(0,Ee.getOrThrowError)(this.entityDataByTypeName,g,"entityDataByTypeName");F.subgraphNames.add(i);let B={fieldNames:N,isRootNode:!0,keys:p,typeName:g},j=new Set;for(let Z of p.filter(W=>!W.disableEntityResolver))j.add(Z.selectionSet);let J=this.authorizationDataByParentTypeName.get(t);for(let Z of n.interfaceObjectFieldNames){let W=`${g}.${Z}`,Ne=(0,Ee.getOrThrowError)(r.fieldDataByFieldName,Z,`${t}.fieldDataByFieldName`);(0,Ee.getValueOrDefault)(this.fieldCoordsByNamedTypeName,Ne.namedTypeName,()=>new Set).add(W);let le=J==null?void 0:J.fieldAuthDataByFieldName.get(Z);if(le){let et=(0,Ee.getValueOrDefault)(this.authorizationDataByParentTypeName,g,()=>(0,ti.newAuthorizationData)(g));(0,ti.upsertFieldAuthorizationData)(et.fieldAuthDataByFieldName,le)||this.invalidORScopesCoords.add(W)}if(_.fieldDataByFieldName.get(Z))continue;let qe=r.isInaccessible||_.isInaccessible||Ne.isInaccessible;_.fieldDataByFieldName.set(Z,this.copyFieldData(Ne,qe))}o.set(g,B),this.handleInterfaceObjectForInternalGraph({internalSubgraph:a,subgraphName:i,interfaceObjectData:n,interfaceObjectNode:y,resolvableKeyFieldSets:j,entityData:F})}}}}fieldDataToGraphFieldData(t){var n;return{name:t.name,namedTypeName:t.namedTypeName,isLeaf:(0,ti.isNodeLeaf)((n=this.parentDefinitionDataByTypeName.get(t.namedTypeName))==null?void 0:n.kind),subgraphNames:t.subgraphNames}}getValidFlattenedPersistedDirectiveNodeArray(t,n){let r=[];for(let[i,a]of t){let o=this.persistedDirectiveDefinitionByDirectiveName.get(i);if(o){if(a.length<2){r.push(...a);continue}if(!o.repeatable){this.errors.push((0,Fe.invalidRepeatedFederatedDirectiveErrorMessage)(i,n));continue}r.push(...a)}}return r}getRouterPersistedDirectiveNodes(t){let n=[...t.persistedDirectivesData.tagDirectiveByName.values()];return t.persistedDirectivesData.isDeprecated&&n.push((0,ge.generateDeprecatedDirective)(t.persistedDirectivesData.deprecatedReason)),n.push(...this.getValidFlattenedPersistedDirectiveNodeArray(t.persistedDirectivesData.directivesByDirectiveName,t.name)),n}getFederatedGraphNodeDescription(t){if(t.configureDescriptionDataBySubgraphName.size<1)return t.description;let n=[],r="";for(let[i,{propagate:a,description:o}]of t.configureDescriptionDataBySubgraphName)a&&(n.push(i),r=o);if(n.length===1)return(0,cc.getDescriptionFromString)(r);if(n.length<1)return t.description;this.errors.push((0,Fe.configureDescriptionPropagationError)((0,ge.getDefinitionDataCoords)(t,!0),n))}getNodeForRouterSchemaByData(t){return t.node.name=(0,Mr.stringToNameNode)(t.name),t.node.description=this.getFederatedGraphNodeDescription(t),t.node.directives=this.getRouterPersistedDirectiveNodes(t),t.node}getNodeWithPersistedDirectivesByInputValueData(t){return t.node.name=(0,Mr.stringToNameNode)(t.name),t.node.type=t.type,t.node.description=this.getFederatedGraphNodeDescription(t),t.node.directives=this.getRouterPersistedDirectiveNodes(t),t.includeDefaultValue&&(t.node.defaultValue=t.defaultValue),t.node}getValidFieldArgumentNodes(t){let n=[],r=[],i=[],a=`${t.renamedParentTypeName}.${t.name}`;for(let[o,c]of t.argumentDataByArgumentName)t.subgraphNames.size===c.subgraphNames.size?(r.push(o),n.push(this.getNodeWithPersistedDirectivesByInputValueData(c))):(0,ge.isTypeRequired)(c.type)&&i.push({inputValueName:o,missingSubgraphs:(0,Ee.getEntriesNotInHashSet)(t.subgraphNames,c.subgraphNames),requiredSubgraphs:[...c.requiredSubgraphNames]});return i.length>0?this.errors.push((0,Fe.invalidRequiredInputValueError)(Oe.FIELD,a,i)):r.length>0&&((0,Ee.getValueOrDefault)(this.fieldConfigurationByFieldCoords,a,()=>({argumentNames:r,fieldName:t.name,typeName:t.renamedParentTypeName})).argumentNames=r),n}getNodeWithPersistedDirectivesByFieldData(t,n){return t.node.arguments=n,t.node.name=(0,Mr.stringToNameNode)(t.name),t.node.type=t.type,t.node.description=this.getFederatedGraphNodeDescription(t),t.node.directives=this.getRouterPersistedDirectiveNodes(t),t.node}pushParentDefinitionDataToDocumentDefinitions(t){for(let[n,r]of this.parentDefinitionDataByTypeName)switch(r.extensionType!==bq.ExtensionType.NONE&&this.errors.push((0,Fe.noBaseDefinitionForExtensionError)((0,Ee.kindToTypeString)(r.kind),n)),r.kind){case Re.Kind.ENUM_TYPE_DEFINITION:let i=[],a=[],o=this.getEnumValueMergeMethod(n);(0,ge.propagateAuthDirectives)(r,this.authorizationDataByParentTypeName.get(n));for(let Z of r.enumValueDataByValueName.values()){let W=(0,ge.getNodeForRouterSchemaByData)(Z,this.persistedDirectiveDefinitionByDirectiveName,this.errors),Ne=(0,ge.isNodeDataInaccessible)(Z),le=Q(k({},Z.node),{directives:(0,ge.getClientPersistedDirectiveNodes)(Z)});switch(o){case ge.MergeMethod.CONSISTENT:!Ne&&r.appearances>Z.appearances&&this.errors.push((0,Fe.incompatibleSharedEnumError)(n)),i.push(W),Ne||a.push(le);break;case ge.MergeMethod.INTERSECTION:r.appearances===Z.appearances&&(i.push(W),Ne||a.push(le));break;default:i.push(W),Ne||a.push(le);break}}if(r.node.values=i,this.routerDefinitions.push(this.getNodeForRouterSchemaByData(r)),(0,ge.isNodeDataInaccessible)(r)){this.validateReferencesOfInaccessibleType(r),this.internalGraph.setNodeInaccessible(r.name);break}if(a.length<1){this.errors.push((0,Fe.allChildDefinitionsAreInaccessibleError)((0,Ee.kindToTypeString)(r.kind),n,Oe.ENUM_VALUE));break}this.clientDefinitions.push(Q(k({},r.node),{directives:(0,ge.getClientPersistedDirectiveNodes)(r),values:a}));break;case Re.Kind.INPUT_OBJECT_TYPE_DEFINITION:let c=[],l=[],p=[];for(let[Z,W]of r.inputValueDataByValueName)if(r.subgraphNames.size===W.subgraphNames.size){if(l.push(this.getNodeWithPersistedDirectivesByInputValueData(W)),(0,ge.isNodeDataInaccessible)(W))continue;p.push(Q(k({},W.node),{directives:(0,ge.getClientPersistedDirectiveNodes)(W)}))}else(0,ge.isTypeRequired)(W.type)&&c.push({inputValueName:Z,missingSubgraphs:(0,Ee.getEntriesNotInHashSet)(r.subgraphNames,W.subgraphNames),requiredSubgraphs:[...W.requiredSubgraphNames]});if(c.length>0){this.errors.push((0,Fe.invalidRequiredInputValueError)(Oe.INPUT_OBJECT,n,c,!1));break}if(r.node.fields=l,this.routerDefinitions.push(this.getNodeForRouterSchemaByData(r)),(0,ge.isNodeDataInaccessible)(r)){this.validateReferencesOfInaccessibleType(r);break}if(p.length<1){this.errors.push((0,Fe.allChildDefinitionsAreInaccessibleError)((0,Ee.kindToTypeString)(r.kind),n,"input field"));break}this.clientDefinitions.push(Q(k({},r.node),{directives:(0,ge.getClientPersistedDirectiveNodes)(r),fields:p}));break;case Re.Kind.INTERFACE_TYPE_DEFINITION:case Re.Kind.OBJECT_TYPE_DEFINITION:let N=[],y=[],g=new Map,_=(0,ge.newInvalidFieldNames)(),F=r.kind===Re.Kind.OBJECT_TYPE_DEFINITION,B=this.authorizationDataByParentTypeName.get(n);(0,ge.propagateAuthDirectives)(r,B);for(let[Z,W]of r.fieldDataByFieldName){(0,ge.propagateFieldAuthDirectives)(W,B);let Ne=this.getValidFieldArgumentNodes(W);F&&(0,ge.validateExternalAndShareable)(W,_),N.push(this.getNodeWithPersistedDirectivesByFieldData(W,Ne)),!(0,ge.isNodeDataInaccessible)(W)&&(y.push((0,ge.getClientSchemaFieldNodeByFieldData)(W)),g.set(Z,this.fieldDataToGraphFieldData(W)))}if(F&&(_.byShareable.size>0&&this.errors.push((0,Fe.invalidFieldShareabilityError)(r,_.byShareable)),_.subgraphNamesByExternalFieldName.size>0&&this.errors.push((0,Fe.allExternalFieldInstancesError)(n,_.subgraphNamesByExternalFieldName))),r.node.fields=N,this.internalGraph.initializeNode(n,g),r.implementedInterfaceTypeNames.size>0){t.push({data:r,clientSchemaFieldNodes:y});break}this.routerDefinitions.push(this.getNodeForRouterSchemaByData(r));let j=(0,jce.isNodeQuery)(n);if((0,ge.isNodeDataInaccessible)(r)){if(j){this.errors.push(Fe.inaccessibleQueryRootTypeError);break}this.validateReferencesOfInaccessibleType(r),this.internalGraph.setNodeInaccessible(r.name);break}if(y.length<1){let Z=j?(0,Fe.noQueryRootTypeError)(!1):(0,Fe.allChildDefinitionsAreInaccessibleError)((0,Ee.kindToTypeString)(r.kind),n,Oe.FIELD);this.errors.push(Z);break}this.clientDefinitions.push(Q(k({},r.node),{directives:(0,ge.getClientPersistedDirectiveNodes)(r),fields:y}));break;case Re.Kind.SCALAR_TYPE_DEFINITION:if(Kn.BASE_SCALARS.has(n))break;if((0,ge.propagateAuthDirectives)(r,this.authorizationDataByParentTypeName.get(n)),this.routerDefinitions.push(this.getNodeForRouterSchemaByData(r)),(0,ge.isNodeDataInaccessible)(r)){this.validateReferencesOfInaccessibleType(r),this.internalGraph.setNodeInaccessible(r.name);break}this.clientDefinitions.push(Q(k({},r.node),{directives:(0,ge.getClientPersistedDirectiveNodes)(r)}));break;case Re.Kind.UNION_TYPE_DEFINITION:if(r.node.types=(0,ti.mapToArrayOfValues)(r.memberByMemberTypeName),this.routerDefinitions.push(this.getNodeForRouterSchemaByData(r)),(0,ge.isNodeDataInaccessible)(r)){this.validateReferencesOfInaccessibleType(r),this.internalGraph.setNodeInaccessible(r.name);break}let J=this.getClientSchemaUnionMembers(r);if(J.length<1){this.errors.push((0,Fe.allChildDefinitionsAreInaccessibleError)(Oe.UNION,n,"union member type"));break}this.clientDefinitions.push(Q(k({},r.node),{directives:(0,ge.getClientPersistedDirectiveNodes)(r),types:J}));break}}pushNamedTypeAuthDataToFields(){var t;for(let[n,r]of this.authorizationDataByParentTypeName){if(!r.requiresAuthentication&&r.requiredScopes.length<1)continue;let i=this.fieldCoordsByNamedTypeName.get(n);if(i)for(let a of i){let o=a.split(Oe.PERIOD);switch(o.length){case 2:{let c=(0,Ee.getValueOrDefault)(this.authorizationDataByParentTypeName,o[0],()=>(0,ti.newAuthorizationData)(o[0])),l=(0,Ee.getValueOrDefault)(c.fieldAuthDataByFieldName,o[1],()=>(0,ti.newFieldAuthorizationData)(o[1]));(t=l.inheritedData).requiresAuthentication||(t.requiresAuthentication=r.requiresAuthentication),l.inheritedData.requiredScopes.length*r.requiredScopes.length>Kn.MAX_OR_SCOPES?this.invalidORScopesCoords.add(a):(l.inheritedData.requiredScopesByOR=(0,ti.mergeRequiredScopesByAND)(l.inheritedData.requiredScopesByOR,r.requiredScopesByOR),l.inheritedData.requiredScopes=(0,ti.mergeRequiredScopesByAND)(l.inheritedData.requiredScopes,r.requiredScopes));break}default:break}}}}federateSubgraphData(){this.federateInternalSubgraphData(),this.handleEntityInterfaces(),this.generateTagData(),this.pushVersionTwoDirectiveDefinitionsToDocumentDefinitions(),this.pushNamedTypeAuthDataToFields()}validateInterfaceImplementationsAndPushToDocumentDefinitions(t){for(let{data:n,clientSchemaFieldNodes:r}of t){if(n.node.interfaces=this.getValidImplementedInterfaces(n),this.routerDefinitions.push((0,ge.getNodeForRouterSchemaByData)(n,this.persistedDirectiveDefinitionByDirectiveName,this.errors)),(0,ge.isNodeDataInaccessible)(n)){this.validateReferencesOfInaccessibleType(n),this.internalGraph.setNodeInaccessible(n.name);continue}let i=[];for(let a of n.implementedInterfaceTypeNames)this.inaccessibleCoords.has(a)||i.push((0,Mr.stringToNamedTypeNode)(a));this.clientDefinitions.push(Q(k({},n.node),{directives:(0,ge.getClientPersistedDirectiveNodes)(n),fields:r,interfaces:i}))}}pushVersionTwoDirectiveDefinitionsToDocumentDefinitions(){this.isVersionTwo&&(this.routerDefinitions=[Kn.AUTHENTICATED_DEFINITION,Kn.DEPRECATED_DEFINITION,Kn.INACCESSIBLE_DEFINITION,Kn.REQUIRES_SCOPES_DEFINITION,Kn.TAG_DEFINITION,Kn.SCOPE_SCALAR_DEFINITION],this.clientDefinitions=[Kn.DEPRECATED_DEFINITION])}validatePathSegmentInaccessibility(t){if(!t)return!1;let r=t.split(Oe.LEFT_PARENTHESIS)[0].split(Oe.PERIOD),i=r[0];for(let a=0;a0&&this.errors.push((0,Fe.invalidReferencesOfInaccessibleTypeError)((0,Ee.kindToTypeString)(t.kind),t.name,r))}validateQueryRootType(){let t=this.parentDefinitionDataByTypeName.get(Oe.QUERY);if(!t||t.kind!==Re.Kind.OBJECT_TYPE_DEFINITION||t.fieldDataByFieldName.size<1){this.errors.push((0,Fe.noQueryRootTypeError)());return}for(let n of t.fieldDataByFieldName.values())if(!(0,ge.isNodeDataInaccessible)(n))return;this.errors.push((0,Fe.noQueryRootTypeError)())}validateSubscriptionFieldConditionFieldPath(t,n,r,i,a){let o=t.split(Oe.PERIOD);if(o.length<1)return a.push((0,Fe.invalidSubscriptionFieldConditionFieldPathErrorMessage)(r,t)),[];let c=n;if(this.inaccessibleCoords.has(c.renamedTypeName))return a.push((0,Fe.inaccessibleSubscriptionFieldConditionFieldPathFieldErrorMessage)(r,t,o[0],c.renamedTypeName)),[];let l="";for(let p=0;p0?`.${N}`:N,c.kind!==Re.Kind.OBJECT_TYPE_DEFINITION)return a.push((0,Fe.invalidSubscriptionFieldConditionFieldPathParentErrorMessage)(r,t,l)),[];let y=c.fieldDataByFieldName.get(N);if(!y)return a.push((0,Fe.undefinedSubscriptionFieldConditionFieldPathFieldErrorMessage)(r,t,l,N,c.renamedTypeName)),[];let g=`${c.renamedTypeName}.${N}`;if(!y.subgraphNames.has(i))return a.push((0,Fe.invalidSubscriptionFieldConditionFieldPathFieldErrorMessage)(r,t,l,g,i)),[];if(this.inaccessibleCoords.has(g))return a.push((0,Fe.inaccessibleSubscriptionFieldConditionFieldPathFieldErrorMessage)(r,t,l,g)),[];if(Kn.BASE_SCALARS.has(y.namedTypeName)){c={kind:Re.Kind.SCALAR_TYPE_DEFINITION,name:y.namedTypeName};continue}c=(0,Ee.getOrThrowError)(this.parentDefinitionDataByTypeName,y.namedTypeName,Oe.PARENT_DEFINITION_DATA)}return(0,ge.isLeafKind)(c.kind)?o:(a.push((0,Fe.nonLeafSubscriptionFieldConditionFieldPathFinalFieldErrorMessage)(r,t,o[o.length-1],(0,Ee.kindToTypeString)(c.kind),c.name)),[])}validateSubscriptionFieldCondition(t,n,r,i,a,o,c){if(i>dh.MAX_SUBSCRIPTION_FILTER_DEPTH||this.isMaxDepth)return c.push((0,Fe.subscriptionFilterConditionDepthExceededErrorMessage)(a)),this.isMaxDepth=!0,!1;let l=!1,p=new Set([Oe.FIELD_PATH,Oe.VALUES]),N=new Set,y=new Set,g=[];for(let _ of t.fields){let F=_.name.value,B=a+`.${F}`;switch(F){case Oe.FIELD_PATH:{if(p.has(Oe.FIELD_PATH))p.delete(Oe.FIELD_PATH);else{l=!0,N.add(Oe.FIELD_PATH);break}if(_.value.kind!==Re.Kind.STRING){g.push((0,Fe.invalidInputFieldTypeErrorMessage)(B,Oe.STRING,(0,Ee.kindToTypeString)(_.value.kind))),l=!0;break}let j=this.validateSubscriptionFieldConditionFieldPath(_.value.value,r,B,o,g);if(j.length<1){l=!0;break}n.fieldPath=j;break}case Oe.VALUES:{if(p.has(Oe.VALUES))p.delete(Oe.VALUES);else{l=!0,N.add(Oe.VALUES);break}let j=_.value.kind;if(j==Re.Kind.NULL||j==Re.Kind.OBJECT){g.push((0,Fe.invalidInputFieldTypeErrorMessage)(B,Oe.LIST,(0,Ee.kindToTypeString)(_.value.kind))),l=!0;break}if(j!==Re.Kind.LIST){n.values=[(0,ge.getSubscriptionFilterValue)(_.value)];break}let J=new Set,Z=[];for(let W=0;W<_.value.values.length;W++){let Ne=_.value.values[W];if(Ne.kind===Re.Kind.OBJECT||Ne.kind===Re.Kind.LIST){l=!0,Z.push(W);continue}J.add((0,ge.getSubscriptionFilterValue)(Ne))}if(Z.length>0){g.push((0,Fe.subscriptionFieldConditionInvalidValuesArrayErrorMessage)(B,Z));continue}if(J.size<1){l=!0,g.push((0,Fe.subscriptionFieldConditionEmptyValuesArrayErrorMessage)(B));continue}n.values=[...J];break}default:l=!0,y.add(F)}}return l?(c.push((0,Fe.subscriptionFieldConditionInvalidInputFieldErrorMessage)(a,[...p],[...N],[...y],g)),!1):!0}validateSubscriptionFilterCondition(t,n,r,i,a,o,c){if(i>dh.MAX_SUBSCRIPTION_FILTER_DEPTH||this.isMaxDepth)return c.push((0,Fe.subscriptionFilterConditionDepthExceededErrorMessage)(a)),this.isMaxDepth=!0,!1;if(i+=1,t.fields.length!==1)return c.push((0,Fe.subscriptionFilterConditionInvalidInputFieldNumberErrorMessage)(a,t.fields.length)),!1;let l=t.fields[0],p=l.name.value;if(!Oq.SUBSCRIPTION_FILTER_INPUT_NAMES.has(p))return c.push((0,Fe.subscriptionFilterConditionInvalidInputFieldErrorMessage)(a,p)),!1;let N=a+`.${p}`;switch(l.value.kind){case Re.Kind.OBJECT:switch(p){case Oe.IN_UPPER:return n.in={fieldPath:[],values:[]},this.validateSubscriptionFieldCondition(l.value,n.in,r,i,a+".IN",o,c);case Oe.NOT_UPPER:return n.not={},this.validateSubscriptionFilterCondition(l.value,n.not,r,i,a+".NOT",o,c);default:return c.push((0,Fe.subscriptionFilterConditionInvalidInputFieldTypeErrorMessage)(N,Oe.LIST,Oe.OBJECT)),!1}case Re.Kind.LIST:{let y=[];switch(p){case Oe.AND_UPPER:{n.and=y;break}case Oe.OR_UPPER:{n.or=y;break}default:return c.push((0,Fe.subscriptionFilterConditionInvalidInputFieldTypeErrorMessage)(N,Oe.OBJECT,Oe.LIST)),!1}let g=l.value.values.length;if(g<1||g>5)return c.push((0,Fe.subscriptionFilterArrayConditionInvalidLengthErrorMessage)(N,g)),!1;let _=!0,F=[];for(let B=0;B0?(c.push((0,Fe.subscriptionFilterArrayConditionInvalidItemTypeErrorMessage)(N,F)),!1):_}default:{let y=Oq.SUBSCRIPTION_FILTER_LIST_INPUT_NAMES.has(p)?Oe.LIST:Oe.OBJECT;return c.push((0,Fe.subscriptionFilterConditionInvalidInputFieldTypeErrorMessage)(N,y,(0,Ee.kindToTypeString)(l.value.kind))),!1}}}validateSubscriptionFilterAndGenerateConfiguration(t,n,r,i,a,o){if(!t.arguments||t.arguments.length!==1)return;let c=t.arguments[0];if(c.value.kind!==Re.Kind.OBJECT){this.errors.push((0,Fe.invalidSubscriptionFilterDirectiveError)(r,[(0,Fe.subscriptionFilterConditionInvalidInputFieldTypeErrorMessage)(Oe.CONDITION,Oe.OBJECT,(0,Ee.kindToTypeString)(c.value.kind))]));return}let l={},p=[];if(!this.validateSubscriptionFilterCondition(c.value,l,n,0,Oe.CONDITION,o,p)){this.errors.push((0,Fe.invalidSubscriptionFilterDirectiveError)(r,p)),this.isMaxDepth=!1;return}(0,Ee.getValueOrDefault)(this.fieldConfigurationByFieldCoords,r,()=>({argumentNames:[],fieldName:i,typeName:a})).subscriptionFilterCondition=l}validateSubscriptionFiltersAndGenerateConfiguration(){for(let[t,n]of this.subscriptionFilterDataByFieldPath){if(this.inaccessibleCoords.has(t))continue;let r=this.parentDefinitionDataByTypeName.get(n.fieldData.namedTypeName);if(!r){this.errors.push((0,Fe.invalidSubscriptionFilterDirectiveError)(t,[(0,Fe.subscriptionFilterNamedTypeErrorMessage)(n.fieldData.namedTypeName)]));continue}(0,ge.isNodeDataInaccessible)(r)||r.kind===Re.Kind.OBJECT_TYPE_DEFINITION&&this.validateSubscriptionFilterAndGenerateConfiguration(n.directive,r,t,n.fieldData.name,n.fieldData.renamedParentTypeName,n.directiveSubgraphName)}}buildFederationResult(){this.subscriptionFilterDataByFieldPath.size>0&&this.validateSubscriptionFiltersAndGenerateConfiguration(),this.invalidORScopesCoords.size>0&&this.errors.push((0,Fe.orScopesLimitError)(Kn.MAX_OR_SCOPES,[...this.invalidORScopesCoords]));for(let a of this.potentialPersistedDirectiveDefinitionDataByDirectiveName.values())(0,ge.addValidPersistedDirectiveDefinitionNodeByData)(this.routerDefinitions,a,this.persistedDirectiveDefinitionByDirectiveName,this.errors);let t=[];this.pushParentDefinitionDataToDocumentDefinitions(t),this.validateInterfaceImplementationsAndPushToDocumentDefinitions(t),this.validateQueryRootType();for(let a of this.inaccessibleRequiredInputValueErrorByCoords.values())this.errors.push(a);if(this.errors.length>0)return{errors:this.errors,success:!1,warnings:this.warnings};if(this.internalSubgraphBySubgraphName.size>1){let a=this.internalGraph.validate();if(a.length>0)return{errors:a,success:!1,warnings:this.warnings}}if(this.errors.length>0)return{errors:this.errors,success:!1,warnings:this.warnings};let n={kind:Re.Kind.DOCUMENT,definitions:this.routerDefinitions},r=(0,Re.buildASTSchema)({kind:Re.Kind.DOCUMENT,definitions:this.clientDefinitions},{assumeValid:!0,assumeValidSDL:!0}),i=new Map;for(let a of this.internalSubgraphBySubgraphName.values())i.set(a.name,{configurationDataByTypeName:a.configurationDataByTypeName,parentDefinitionDataByTypeName:a.parentDefinitionDataByTypeName,schema:a.schema});for(let a of this.authorizationDataByParentTypeName.values())(0,ti.upsertAuthorizationConfiguration)(this.fieldConfigurationByFieldCoords,a);return k({fieldConfigurations:Array.from(this.fieldConfigurationByFieldCoords.values()),subgraphConfigBySubgraphName:i,federatedGraphAST:n,federatedGraphSchema:(0,Re.buildASTSchema)(n,{assumeValid:!0,assumeValidSDL:!0}),federatedGraphClientSchema:r,parentDefinitionDataByTypeName:this.parentDefinitionDataByTypeName,success:!0,warnings:this.warnings},this.getClientSchemaObjectBoolean())}getClientSchemaObjectBoolean(){return this.inaccessibleCoords.size<1&&this.tagNamesByCoords.size<1?{}:{shouldIncludeClientSchema:!0}}handleChildTagExclusions(t,n,r,i){let a=n.size;for(let[o,c]of r){let l=(0,Ee.getOrThrowError)(n,o,`${t.name}.childDataByChildName`);if((0,ge.isNodeDataInaccessible)(l)){a-=1;continue}i.isDisjointFrom(c.tagNames)||((0,Ee.getValueOrDefault)(l.persistedDirectivesData.directivesByDirectiveName,Oe.INACCESSIBLE,()=>[(0,Ee.generateSimpleDirective)(Oe.INACCESSIBLE)]),this.inaccessibleCoords.add(`${t.name}.${o}`),a-=1)}a<1&&(t.persistedDirectivesData.directivesByDirectiveName.set(Oe.INACCESSIBLE,[(0,Ee.generateSimpleDirective)(Oe.INACCESSIBLE)]),this.inaccessibleCoords.add(t.name))}handleChildTagInclusions(t,n,r,i){let a=n.size;for(let[o,c]of n){if((0,ge.isNodeDataInaccessible)(c)){a-=1;continue}let l=r.get(o);(!l||i.isDisjointFrom(l.tagNames))&&((0,Ee.getValueOrDefault)(c.persistedDirectivesData.directivesByDirectiveName,Oe.INACCESSIBLE,()=>[(0,Ee.generateSimpleDirective)(Oe.INACCESSIBLE)]),this.inaccessibleCoords.add(`${t.name}.${o}`),a-=1)}a<1&&(t.persistedDirectivesData.directivesByDirectiveName.set(Oe.INACCESSIBLE,[(0,Ee.generateSimpleDirective)(Oe.INACCESSIBLE)]),this.inaccessibleCoords.add(t.name))}buildFederationContractResult(t){if(this.isVersionTwo||this.routerDefinitions.push(Kn.INACCESSIBLE_DEFINITION),t.tagNamesToExclude.size>0)for(let[o,c]of this.parentTagDataByTypeName){let l=(0,Ee.getOrThrowError)(this.parentDefinitionDataByTypeName,o,Oe.PARENT_DEFINITION_DATA);if(!(0,ge.isNodeDataInaccessible)(l)){if(!t.tagNamesToExclude.isDisjointFrom(c.tagNames)){l.persistedDirectivesData.directivesByDirectiveName.set(Oe.INACCESSIBLE,[(0,Ee.generateSimpleDirective)(Oe.INACCESSIBLE)]),this.inaccessibleCoords.add(o);continue}if(!(c.childTagDataByChildName.size<1))switch(l.kind){case Re.Kind.SCALAR_TYPE_DEFINITION:case Re.Kind.UNION_TYPE_DEFINITION:continue;case Re.Kind.ENUM_TYPE_DEFINITION:this.handleChildTagExclusions(l,l.enumValueDataByValueName,c.childTagDataByChildName,t.tagNamesToExclude);break;case Re.Kind.INPUT_OBJECT_TYPE_DEFINITION:this.handleChildTagExclusions(l,l.inputValueDataByValueName,c.childTagDataByChildName,t.tagNamesToExclude);break;default:let p=l.fieldDataByFieldName.size;for(let[N,y]of c.childTagDataByChildName){let g=(0,Ee.getOrThrowError)(l.fieldDataByFieldName,N,`${o}.fieldDataByFieldName`);if((0,ge.isNodeDataInaccessible)(g)){p-=1;continue}if(!t.tagNamesToExclude.isDisjointFrom(y.tagNames)){(0,Ee.getValueOrDefault)(g.persistedDirectivesData.directivesByDirectiveName,Oe.INACCESSIBLE,()=>[(0,Ee.generateSimpleDirective)(Oe.INACCESSIBLE)]),this.inaccessibleCoords.add(g.federatedCoords),p-=1;continue}for(let[_,F]of y.tagNamesByArgumentName){let B=(0,Ee.getOrThrowError)(g.argumentDataByArgumentName,_,`${N}.argumentDataByArgumentName`);(0,ge.isNodeDataInaccessible)(B)||F.isDisjointFrom(F)||((0,Ee.getValueOrDefault)(B.persistedDirectivesData.directivesByDirectiveName,Oe.INACCESSIBLE,()=>[(0,Ee.generateSimpleDirective)(Oe.INACCESSIBLE)]),this.inaccessibleCoords.add(B.federatedCoords))}}p<1&&(l.persistedDirectivesData.directivesByDirectiveName.set(Oe.INACCESSIBLE,[(0,Ee.generateSimpleDirective)(Oe.INACCESSIBLE)]),this.inaccessibleCoords.add(o))}}}else if(t.tagNamesToInclude.size>0)for(let[o,c]of this.parentDefinitionDataByTypeName){if((0,ge.isNodeDataInaccessible)(c))continue;let l=this.parentTagDataByTypeName.get(o);if(!l){c.persistedDirectivesData.directivesByDirectiveName.set(Oe.INACCESSIBLE,[(0,Ee.generateSimpleDirective)(Oe.INACCESSIBLE)]),this.inaccessibleCoords.add(o);continue}if(t.tagNamesToInclude.isDisjointFrom(l.tagNames)){if(l.childTagDataByChildName.size<1){c.persistedDirectivesData.directivesByDirectiveName.set(Oe.INACCESSIBLE,[(0,Ee.generateSimpleDirective)(Oe.INACCESSIBLE)]),this.inaccessibleCoords.add(o);continue}switch(c.kind){case Re.Kind.SCALAR_TYPE_DEFINITION:case Re.Kind.UNION_TYPE_DEFINITION:continue;case Re.Kind.ENUM_TYPE_DEFINITION:this.handleChildTagInclusions(c,c.enumValueDataByValueName,l.childTagDataByChildName,t.tagNamesToInclude);break;case Re.Kind.INPUT_OBJECT_TYPE_DEFINITION:this.handleChildTagInclusions(c,c.inputValueDataByValueName,l.childTagDataByChildName,t.tagNamesToInclude);break;default:let p=c.fieldDataByFieldName.size;for(let[N,y]of c.fieldDataByFieldName){if((0,ge.isNodeDataInaccessible)(y)){p-=1;continue}let g=l.childTagDataByChildName.get(N);(!g||t.tagNamesToInclude.isDisjointFrom(g.tagNames))&&((0,Ee.getValueOrDefault)(y.persistedDirectivesData.directivesByDirectiveName,Oe.INACCESSIBLE,()=>[(0,Ee.generateSimpleDirective)(Oe.INACCESSIBLE)]),this.inaccessibleCoords.add(y.federatedCoords),p-=1)}p<1&&(c.persistedDirectivesData.directivesByDirectiveName.set(Oe.INACCESSIBLE,[(0,Ee.generateSimpleDirective)(Oe.INACCESSIBLE)]),this.inaccessibleCoords.add(o))}}}this.subscriptionFilterDataByFieldPath.size>0&&this.validateSubscriptionFiltersAndGenerateConfiguration();for(let o of this.potentialPersistedDirectiveDefinitionDataByDirectiveName.values())(0,ge.addValidPersistedDirectiveDefinitionNodeByData)(this.routerDefinitions,o,this.persistedDirectiveDefinitionByDirectiveName,this.errors);let n=[];if(this.pushParentDefinitionDataToDocumentDefinitions(n),this.validateInterfaceImplementationsAndPushToDocumentDefinitions(n),this.validateQueryRootType(),this.errors.length>0)return{errors:this.errors,success:!1,warnings:this.warnings};let r={kind:Re.Kind.DOCUMENT,definitions:this.routerDefinitions},i=(0,Re.buildASTSchema)({kind:Re.Kind.DOCUMENT,definitions:this.clientDefinitions},{assumeValid:!0,assumeValidSDL:!0}),a=new Map;for(let o of this.internalSubgraphBySubgraphName.values())a.set(o.name,{configurationDataByTypeName:o.configurationDataByTypeName,parentDefinitionDataByTypeName:o.parentDefinitionDataByTypeName,schema:o.schema});for(let o of this.authorizationDataByParentTypeName.values())(0,ti.upsertAuthorizationConfiguration)(this.fieldConfigurationByFieldCoords,o);return k({fieldConfigurations:Array.from(this.fieldConfigurationByFieldCoords.values()),subgraphConfigBySubgraphName:a,federatedGraphAST:r,federatedGraphSchema:(0,Re.buildASTSchema)(r,{assumeValid:!0,assumeValidSDL:!0}),federatedGraphClientSchema:i,parentDefinitionDataByTypeName:this.parentDefinitionDataByTypeName,success:!0,warnings:this.warnings},this.getClientSchemaObjectBoolean())}federateSubgraphsInternal(){return this.federateSubgraphData(),this.buildFederationResult()}};lc.FederationFactory=ph;function kO(e){if(e.length<1)return{errors:[Fe.minimumSubgraphRequirementError],success:!1,warnings:[]};let t=(0,Vce.batchNormalize)(e);if(!t.success)return{errors:t.errors,success:!1,warnings:t.warnings};let n=new Map,r=new Map;for(let[a,o]of t.internalSubgraphBySubgraphName)for(let[c,l]of o.entityInterfaces){let p=n.get(c);if(!p){n.set(c,(0,ti.newEntityInterfaceFederationData)(l,a));continue}(0,ti.upsertEntityInterfaceFederationData)(p,l,a)}let i=[];for(let[a,o]of n){let c=o.concreteTypeNames.size;for(let[l,p]of o.subgraphDataByTypeName){if(!p.isInterfaceObject){p.resolvable&&p.concreteTypeNames.size!==c&&(0,Ee.getValueOrDefault)(r,a,()=>[]).push({subgraphName:l,concreteTypeNames:p.concreteTypeNames});continue}let N=(0,Ee.getOrThrowError)(t.internalSubgraphBySubgraphName,l,"internalSubgraphBySubgraphName").parentDefinitionDataByTypeName,y=[];for(let g of o.concreteTypeNames)N.has(g)&&y.push(g);y.length>0&&i.push((0,Fe.invalidInterfaceObjectImplementationDefinitionsError)(a,l,y))}}return r.size>0&&i.push((0,Fe.undefinedEntityInterfaceImplementationsError)(r,n)),i.length>0?{errors:i,success:!1,warnings:t.warnings}:{federationFactory:new ph({authorizationDataByParentTypeName:t.authorizationDataByParentTypeName,concreteTypeNamesByAbstractTypeName:t.concreteTypeNamesByAbstractTypeName,entityDataByTypeName:t.entityDataByTypeName,entityInterfaceFederationDataByTypeName:n,fieldCoordsByNamedTypeName:t.fieldCoordsByNamedTypeName,internalSubgraphBySubgraphName:t.internalSubgraphBySubgraphName,internalGraph:t.internalGraph,warnings:t.warnings}),success:!0,warnings:t.warnings}}function Gce(e){let t=kO(e);return t.success?t.federationFactory.federateSubgraphsInternal():{errors:t.errors,success:!1,warnings:t.warnings}}function $ce(e,t){let n=kO(e);if(!n.success)return{errors:n.errors,success:!1,warnings:n.warnings};n.federationFactory.federateSubgraphData();let r=[(0,Dq.cloneDeep)(n.federationFactory)],i=n.federationFactory.buildFederationResult();if(!i.success)return{errors:i.errors,success:!1,warnings:i.warnings};let a=t.size-1,o=new Map,c=0;for(let[l,p]of t){c!==a&&r.push((0,Dq.cloneDeep)(r[c]));let N=r[c].buildFederationContractResult(p);o.set(l,N),c++}return Q(k({},i),{federationResultByContractName:o})}function Qce(e,t){let n=kO(e);return n.success?(n.federationFactory.federateSubgraphData(),n.federationFactory.buildFederationContractResult(t)):{errors:n.errors,success:!1,warnings:n.warnings}}});var fh=P(Os=>{"use strict";f();T();m();Object.defineProperty(Os,"__esModule",{value:!0});Os.LATEST_ROUTER_COMPATIBILITY_VERSION=Os.ROUTER_COMPATIBILITY_VERSIONS=Os.ROUTER_COMPATIBILITY_VERSION_ONE=void 0;Os.ROUTER_COMPATIBILITY_VERSION_ONE="1";Os.ROUTER_COMPATIBILITY_VERSIONS=new Set([Os.ROUTER_COMPATIBILITY_VERSION_ONE]);Os.LATEST_ROUTER_COMPATIBILITY_VERSION="1"});var Rq=P(Lp=>{"use strict";f();T();m();Object.defineProperty(Lp,"__esModule",{value:!0});Lp.federateSubgraphs=Yce;Lp.federateSubgraphsWithContracts=Jce;Lp.federateSubgraphsContract=Hce;var MO=Aq(),xO=fh();function Yce(e,t=xO.ROUTER_COMPATIBILITY_VERSION_ONE){switch(t){default:return(0,MO.federateSubgraphs)(e)}}function Jce(e,t,n=xO.ROUTER_COMPATIBILITY_VERSION_ONE){switch(n){default:return(0,MO.federateSubgraphsWithContracts)(e,t)}}function Hce(e,t,n=xO.ROUTER_COMPATIBILITY_VERSION_ONE){switch(n){default:return(0,MO.federateSubgraphsContract)(e,t)}}});var Pq=P(Fq=>{"use strict";f();T();m();Object.defineProperty(Fq,"__esModule",{value:!0})});var wq=P(Cp=>{"use strict";f();T();m();Object.defineProperty(Cp,"__esModule",{value:!0});Cp.normalizeSubgraphFromString=zce;Cp.normalizeSubgraph=Wce;Cp.batchNormalize=Xce;var qO=LO(),VO=fh();function zce(e,t=!0,n=VO.ROUTER_COMPATIBILITY_VERSION_ONE){switch(n){default:return(0,qO.normalizeSubgraphFromString)(e,t)}}function Wce(e,t,n,r=VO.ROUTER_COMPATIBILITY_VERSION_ONE){switch(r){default:return(0,qO.normalizeSubgraph)(e,t,n)}}function Xce(e,t=VO.ROUTER_COMPATIBILITY_VERSION_ONE){switch(t){default:return(0,qO.batchNormalize)(e)}}});var Cq=P(Lq=>{"use strict";f();T();m();Object.defineProperty(Lq,"__esModule",{value:!0})});var Uq=P(Bq=>{"use strict";f();T();m();Object.defineProperty(Bq,"__esModule",{value:!0})});var Mq=P(kq=>{"use strict";f();T();m();Object.defineProperty(kq,"__esModule",{value:!0})});var xq=P(mh=>{"use strict";f();T();m();Object.defineProperty(mh,"__esModule",{value:!0});mh.COMPOSITION_VERSION=void 0;mh.COMPOSITION_VERSION="{{$COMPOSITION__VERSION}}"});var Vq=P(qq=>{"use strict";f();T();m();Object.defineProperty(qq,"__esModule",{value:!0})});var Kq=P(jq=>{"use strict";f();T();m();Object.defineProperty(jq,"__esModule",{value:!0})});var Th=P(Nt=>{"use strict";f();T();m();var Zce=Nt&&Nt.__createBinding||(Object.create?function(e,t,n,r){r===void 0&&(r=n);var i=Object.getOwnPropertyDescriptor(t,n);(!i||("get"in i?!t.__esModule:i.writable||i.configurable))&&(i={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,i)}:function(e,t,n,r){r===void 0&&(r=n),e[r]=t[n]}),wt=Nt&&Nt.__exportStar||function(e,t){for(var n in e)n!=="default"&&!Object.prototype.hasOwnProperty.call(t,n)&&Zce(t,e,n)};Object.defineProperty(Nt,"__esModule",{value:!0});wt(Jr(),Nt);wt(Q_(),Nt);wt(sa(),Nt);wt($L(),Nt);wt(Rq(),Nt);wt(Pq(),Nt);wt(wq(),Nt);wt(Cq(),Nt);wt(FO(),Nt);wt(OO(),Nt);wt(DO(),Nt);wt(fh(),Nt);wt(Uq(),Nt);wt(PO(),Nt);wt(Yo(),Nt);wt(bp(),Nt);wt(Ap(),Nt);wt(Mq(),Nt);wt(xq(),Nt);wt(lr(),Nt);wt(Vq(),Nt);wt(Hr(),Nt);wt(fO(),Nt);wt(NT(),Nt);wt(UO(),Nt);wt(uO(),Nt);wt(Op(),Nt);wt(Kq(),Nt);wt(IO(),Nt);wt(ch(),Nt);wt(dO(),Nt);wt(Es(),Nt);wt(op(),Nt);wt(tp(),Nt);wt(ZN(),Nt)});var Qle={};Vf(Qle,{buildRouterConfiguration:()=>$le,federateSubgraphs:()=>Gle});f();T();m();var hc=os(Th());f();T();m();f();T();m();function jO(e){if(!e)return e;if(!URL.canParse(e))throw new Error("Invalid URL");let t=e.indexOf("?"),n=e.indexOf("#"),r=e;return t>0?r=r.slice(0,n>0?Math.min(t,n):t):n>0&&(r=r.slice(0,n)),r}f();T();m();f();T();m();var Gq={};f();T();m();function $q(e){return e!=null}f();T();m();f();T();m();var zq=os(Ae(),1);f();T();m();var Qq;if(typeof AggregateError=="undefined"){class e extends Error{constructor(n,r=""){super(r),this.errors=n,this.name="AggregateError",Error.captureStackTrace(this,e)}}Qq=function(t,n){return new e(t,n)}}else Qq=AggregateError;function Yq(e){return"errors"in e&&Array.isArray(e.errors)}var Wq=3;function Xq(e){return Nh(e,[])}function Nh(e,t){switch(typeof e){case"string":return JSON.stringify(e);case"function":return e.name?`[function ${e.name}]`:"[function]";case"object":return ele(e,t);default:return String(e)}}function Jq(e){return e instanceof zq.GraphQLError?e.toString():`${e.name}: ${e.message}; - ${e.stack}`}function ele(e,t){if(e===null)return"null";if(e instanceof Error)return Yq(e)?Jq(e)+` -`+Hq(e.errors,t):Jq(e);if(t.includes(e))return"[Circular]";let n=[...t,e];if(tle(e)){let r=e.toJSON();if(r!==e)return typeof r=="string"?r:Nh(r,n)}else if(Array.isArray(e))return Hq(e,n);return nle(e,n)}function tle(e){return typeof e.toJSON=="function"}function nle(e,t){let n=Object.entries(e);return n.length===0?"{}":t.length>Wq?"["+rle(e)+"]":"{ "+n.map(([i,a])=>i+": "+Nh(a,t)).join(", ")+" }"}function Hq(e,t){if(e.length===0)return"[]";if(t.length>Wq)return"[Array]";let n=e.length,r=[];for(let i=0;in==null?n:n[r],e==null?void 0:e.extensions)}f();T();m();var Pe=os(Ae(),1);f();T();m();var Qa=os(Ae(),1);function Ya(e){if((0,Qa.isNonNullType)(e)){let t=Ya(e.ofType);if(t.kind===Qa.Kind.NON_NULL_TYPE)throw new Error(`Invalid type node ${Xq(e)}. Inner type of non-null type cannot be a non-null type.`);return{kind:Qa.Kind.NON_NULL_TYPE,type:t}}else if((0,Qa.isListType)(e))return{kind:Qa.Kind.LIST_TYPE,type:Ya(e.ofType)};return{kind:Qa.Kind.NAMED_TYPE,name:{kind:Qa.Kind.NAME,value:e.name}}}f();T();m();var Ja=os(Ae(),1);function Eh(e){if(e===null)return{kind:Ja.Kind.NULL};if(e===void 0)return null;if(Array.isArray(e)){let t=[];for(let n of e){let r=Eh(n);r!=null&&t.push(r)}return{kind:Ja.Kind.LIST,values:t}}if(typeof e=="object"){let t=[];for(let n in e){let r=e[n],i=Eh(r);i&&t.push({kind:Ja.Kind.OBJECT_FIELD,name:{kind:Ja.Kind.NAME,value:n},value:i})}return{kind:Ja.Kind.OBJECT,fields:t}}if(typeof e=="boolean")return{kind:Ja.Kind.BOOLEAN,value:e};if(typeof e=="number"&&isFinite(e)){let t=String(e);return ile.test(t)?{kind:Ja.Kind.INT,value:t}:{kind:Ja.Kind.FLOAT,value:t}}if(typeof e=="string")return{kind:Ja.Kind.STRING,value:e};throw new TypeError(`Cannot convert value to AST: ${e}.`)}var ile=/^-?(?:0|[1-9][0-9]*)$/;f();T();m();f();T();m();function yh(e){let t=new WeakMap;return function(r){let i=t.get(r);if(i===void 0){let a=e(r);return t.set(r,a),a}return i}}var NUe=yh(function(t){let n=ale(t);return new Set([...n].map(r=>r.name))}),ale=yh(function(t){let n=KO(t);return new Set(n.values())}),KO=yh(function(t){let n=new Map,r=t.getQueryType();r&&n.set("query",r);let i=t.getMutationType();i&&n.set("mutation",i);let a=t.getSubscriptionType();return a&&n.set("subscription",a),n});function sle(e,t={}){let n=t.pathToDirectivesInExtensions,r=e.getTypeMap(),i=ole(e,n),a=i!=null?[i]:[],o=e.getDirectives();for(let c of o)(0,Pe.isSpecifiedDirective)(c)||a.push(ule(c,e,n));for(let c in r){let l=r[c],p=(0,Pe.isSpecifiedScalarType)(l),N=(0,Pe.isIntrospectionType)(l);if(!(p||N))if((0,Pe.isObjectType)(l))a.push(cle(l,e,n));else if((0,Pe.isInterfaceType)(l))a.push(lle(l,e,n));else if((0,Pe.isUnionType)(l))a.push(dle(l,e,n));else if((0,Pe.isInputObjectType)(l))a.push(ple(l,e,n));else if((0,Pe.isEnumType)(l))a.push(fle(l,e,n));else if((0,Pe.isScalarType)(l))a.push(mle(l,e,n));else throw new Error(`Unknown type ${l}.`)}return{kind:Pe.Kind.DOCUMENT,definitions:a}}function Zq(e,t={}){let n=sle(e,t);return(0,Pe.print)(n)}function ole(e,t){var n,r;let i=new Map([["query",void 0],["mutation",void 0],["subscription",void 0]]),a=[];if(e.astNode!=null&&a.push(e.astNode),e.extensionASTNodes!=null)for(let N of e.extensionASTNodes)a.push(N);for(let N of a)if(N.operationTypes)for(let y of N.operationTypes)i.set(y.operation,y);let o=KO(e);for(let[N,y]of i){let g=o.get(N);if(g!=null){let _=Ya(g);y!=null?y.type=_:i.set(N,{kind:Pe.Kind.OPERATION_TYPE_DEFINITION,operation:N,type:_})}}let c=[...i.values()].filter($q),l=Ll(e,e,t);if(!c.length&&!l.length)return null;let p={kind:c!=null?Pe.Kind.SCHEMA_DEFINITION:Pe.Kind.SCHEMA_EXTENSION,operationTypes:c,directives:l};return p.description=((r=(n=e.astNode)===null||n===void 0?void 0:n.description)!==null&&r!==void 0?r:e.description!=null)?{kind:Pe.Kind.STRING,value:e.description,block:!0}:void 0,p}function ule(e,t,n){var r,i,a,o;return{kind:Pe.Kind.DIRECTIVE_DEFINITION,description:(i=(r=e.astNode)===null||r===void 0?void 0:r.description)!==null&&i!==void 0?i:e.description?{kind:Pe.Kind.STRING,value:e.description}:void 0,name:{kind:Pe.Kind.NAME,value:e.name},arguments:(a=e.args)===null||a===void 0?void 0:a.map(c=>eV(c,t,n)),repeatable:e.isRepeatable,locations:((o=e.locations)===null||o===void 0?void 0:o.map(c=>({kind:Pe.Kind.NAME,value:c})))||[]}}function Ll(e,t,n){let r=hh(e,n),i=[];e.astNode!=null&&i.push(e.astNode),"extensionASTNodes"in e&&e.extensionASTNodes!=null&&(i=i.concat(e.extensionASTNodes));let a;if(r!=null)a=GO(t,r);else{a=[];for(let o of i)o.directives&&a.push(...o.directives)}return a}function gh(e,t,n){var r,i;let a=[],o=null,c=hh(e,n),l;return c!=null?l=GO(t,c):l=(r=e.astNode)===null||r===void 0?void 0:r.directives,l!=null&&(a=l.filter(p=>p.name.value!=="deprecated"),e.deprecationReason!=null&&(o=(i=l.filter(p=>p.name.value==="deprecated"))===null||i===void 0?void 0:i[0])),e.deprecationReason!=null&&o==null&&(o=hle(e.deprecationReason)),o==null?a:[o].concat(a)}function eV(e,t,n){var r,i,a;return{kind:Pe.Kind.INPUT_VALUE_DEFINITION,description:(i=(r=e.astNode)===null||r===void 0?void 0:r.description)!==null&&i!==void 0?i:e.description?{kind:Pe.Kind.STRING,value:e.description,block:!0}:void 0,name:{kind:Pe.Kind.NAME,value:e.name},type:Ya(e.type),defaultValue:e.defaultValue!==void 0&&(a=(0,Pe.astFromValue)(e.defaultValue,e.type))!==null&&a!==void 0?a:void 0,directives:gh(e,t,n)}}function cle(e,t,n){var r,i;return{kind:Pe.Kind.OBJECT_TYPE_DEFINITION,description:(i=(r=e.astNode)===null||r===void 0?void 0:r.description)!==null&&i!==void 0?i:e.description?{kind:Pe.Kind.STRING,value:e.description,block:!0}:void 0,name:{kind:Pe.Kind.NAME,value:e.name},fields:Object.values(e.getFields()).map(a=>tV(a,t,n)),interfaces:Object.values(e.getInterfaces()).map(a=>Ya(a)),directives:Ll(e,t,n)}}function lle(e,t,n){var r,i;let a={kind:Pe.Kind.INTERFACE_TYPE_DEFINITION,description:(i=(r=e.astNode)===null||r===void 0?void 0:r.description)!==null&&i!==void 0?i:e.description?{kind:Pe.Kind.STRING,value:e.description,block:!0}:void 0,name:{kind:Pe.Kind.NAME,value:e.name},fields:Object.values(e.getFields()).map(o=>tV(o,t,n)),directives:Ll(e,t,n)};return"getInterfaces"in e&&(a.interfaces=Object.values(e.getInterfaces()).map(o=>Ya(o))),a}function dle(e,t,n){var r,i;return{kind:Pe.Kind.UNION_TYPE_DEFINITION,description:(i=(r=e.astNode)===null||r===void 0?void 0:r.description)!==null&&i!==void 0?i:e.description?{kind:Pe.Kind.STRING,value:e.description,block:!0}:void 0,name:{kind:Pe.Kind.NAME,value:e.name},directives:Ll(e,t,n),types:e.getTypes().map(a=>Ya(a))}}function ple(e,t,n){var r,i;return{kind:Pe.Kind.INPUT_OBJECT_TYPE_DEFINITION,description:(i=(r=e.astNode)===null||r===void 0?void 0:r.description)!==null&&i!==void 0?i:e.description?{kind:Pe.Kind.STRING,value:e.description,block:!0}:void 0,name:{kind:Pe.Kind.NAME,value:e.name},fields:Object.values(e.getFields()).map(a=>Tle(a,t,n)),directives:Ll(e,t,n)}}function fle(e,t,n){var r,i;return{kind:Pe.Kind.ENUM_TYPE_DEFINITION,description:(i=(r=e.astNode)===null||r===void 0?void 0:r.description)!==null&&i!==void 0?i:e.description?{kind:Pe.Kind.STRING,value:e.description,block:!0}:void 0,name:{kind:Pe.Kind.NAME,value:e.name},values:Object.values(e.getValues()).map(a=>Nle(a,t,n)),directives:Ll(e,t,n)}}function mle(e,t,n){var r,i,a;let o=hh(e,n),c=o?GO(t,o):((r=e.astNode)===null||r===void 0?void 0:r.directives)||[],l=e.specifiedByUrl||e.specifiedByURL;if(l&&!c.some(p=>p.name.value==="specifiedBy")){let p={url:l};c.push(Ih("specifiedBy",p))}return{kind:Pe.Kind.SCALAR_TYPE_DEFINITION,description:(a=(i=e.astNode)===null||i===void 0?void 0:i.description)!==null&&a!==void 0?a:e.description?{kind:Pe.Kind.STRING,value:e.description,block:!0}:void 0,name:{kind:Pe.Kind.NAME,value:e.name},directives:c}}function tV(e,t,n){var r,i;return{kind:Pe.Kind.FIELD_DEFINITION,description:(i=(r=e.astNode)===null||r===void 0?void 0:r.description)!==null&&i!==void 0?i:e.description?{kind:Pe.Kind.STRING,value:e.description,block:!0}:void 0,name:{kind:Pe.Kind.NAME,value:e.name},arguments:e.args.map(a=>eV(a,t,n)),type:Ya(e.type),directives:gh(e,t,n)}}function Tle(e,t,n){var r,i,a;return{kind:Pe.Kind.INPUT_VALUE_DEFINITION,description:(i=(r=e.astNode)===null||r===void 0?void 0:r.description)!==null&&i!==void 0?i:e.description?{kind:Pe.Kind.STRING,value:e.description,block:!0}:void 0,name:{kind:Pe.Kind.NAME,value:e.name},type:Ya(e.type),directives:gh(e,t,n),defaultValue:(a=(0,Pe.astFromValue)(e.defaultValue,e.type))!==null&&a!==void 0?a:void 0}}function Nle(e,t,n){var r,i;return{kind:Pe.Kind.ENUM_VALUE_DEFINITION,description:(i=(r=e.astNode)===null||r===void 0?void 0:r.description)!==null&&i!==void 0?i:e.description?{kind:Pe.Kind.STRING,value:e.description,block:!0}:void 0,name:{kind:Pe.Kind.NAME,value:e.name},directives:gh(e,t,n)}}function hle(e){return Ih("deprecated",{reason:e},Pe.GraphQLDeprecatedDirective)}function Ih(e,t,n){let r=[];if(n!=null)for(let i of n.args){let a=i.name,o=t[a];if(o!==void 0){let c=(0,Pe.astFromValue)(o,i.type);c&&r.push({kind:Pe.Kind.ARGUMENT,name:{kind:Pe.Kind.NAME,value:a},value:c})}}else for(let i in t){let a=t[i],o=Eh(a);o&&r.push({kind:Pe.Kind.ARGUMENT,name:{kind:Pe.Kind.NAME,value:i},value:o})}return{kind:Pe.Kind.DIRECTIVE,name:{kind:Pe.Kind.NAME,value:e},arguments:r}}function GO(e,t){let n=[];for(let r in t){let i=t[r],a=e==null?void 0:e.getDirective(r);if(Array.isArray(i))for(let o of i)n.push(Ih(r,o,a));else n.push(Ih(r,i,a))}return n}var ql=os(Th(),1),$V=os(Ae(),1);f();T();m();f();T();m();f();T();m();f();T();m();f();T();m();f();T();m();function sn(e,t){if(!e)throw new Error(t)}var Ele=34028234663852886e22,yle=-34028234663852886e22,Ile=4294967295,gle=2147483647,_le=-2147483648;function Cl(e){if(typeof e!="number")throw new Error("invalid int 32: "+typeof e);if(!Number.isInteger(e)||e>gle||e<_le)throw new Error("invalid int 32: "+e)}function Bp(e){if(typeof e!="number")throw new Error("invalid uint 32: "+typeof e);if(!Number.isInteger(e)||e>Ile||e<0)throw new Error("invalid uint 32: "+e)}function _h(e){if(typeof e!="number")throw new Error("invalid float 32: "+typeof e);if(Number.isFinite(e)&&(e>Ele||e({no:i.no,name:i.name,localName:e[i.no]})),r)}function QO(e,t,n){let r=Object.create(null),i=Object.create(null),a=[];for(let o of t){let c=aV(o);a.push(c),r[o.name]=c,i[o.no]=c}return{typeName:e,values:a,findName(o){return r[o]},findNumber(o){return i[o]}}}function iV(e,t,n){let r={};for(let i of t){let a=aV(i);r[a.localName]=a.no,r[a.no]=a.localName}return $O(r,e,t,n),r}function aV(e){return"localName"in e?e:Object.assign(Object.assign({},e),{localName:e.name})}f();T();m();f();T();m();var $e=class{equals(t){return this.getType().runtime.util.equals(this.getType(),this,t)}clone(){return this.getType().runtime.util.clone(this)}fromBinary(t,n){let r=this.getType(),i=r.runtime.bin,a=i.makeReadOptions(n);return i.readMessage(this,a.readerFactory(t),t.byteLength,a),this}fromJson(t,n){let r=this.getType(),i=r.runtime.json,a=i.makeReadOptions(n);return i.readMessage(r,t,a,this),this}fromJsonString(t,n){let r;try{r=JSON.parse(t)}catch(i){throw new Error(`cannot decode ${this.getType().typeName} from JSON: ${i instanceof Error?i.message:String(i)}`)}return this.fromJson(r,n)}toBinary(t){let n=this.getType(),r=n.runtime.bin,i=r.makeWriteOptions(t),a=i.writerFactory();return r.writeMessage(this,a,i),a.finish()}toJson(t){let n=this.getType(),r=n.runtime.json,i=r.makeWriteOptions(t);return r.writeMessage(this,i)}toJsonString(t){var n;let r=this.toJson(t);return JSON.stringify(r,null,(n=t==null?void 0:t.prettySpaces)!==null&&n!==void 0?n:0)}toJSON(){return this.toJson({emitDefaultValues:!0})}getType(){return Object.getPrototypeOf(this).constructor}};function sV(e,t,n,r){var i;let a=(i=r==null?void 0:r.localName)!==null&&i!==void 0?i:t.substring(t.lastIndexOf(".")+1),o={[a]:function(c){e.util.initFields(this),e.util.initPartial(c,this)}}[a];return Object.setPrototypeOf(o.prototype,new $e),Object.assign(o,{runtime:e,typeName:t,fields:e.util.newFieldList(n),fromBinary(c,l){return new o().fromBinary(c,l)},fromJson(c,l){return new o().fromJson(c,l)},fromJsonString(c,l){return new o().fromJsonString(c,l)},equals(c,l){return e.util.equals(o,c,l)}}),o}f();T();m();f();T();m();f();T();m();f();T();m();function uV(){let e=0,t=0;for(let r=0;r<28;r+=7){let i=this.buf[this.pos++];if(e|=(i&127)<>4,!(n&128))return this.assertBounds(),[e,t];for(let r=3;r<=31;r+=7){let i=this.buf[this.pos++];if(t|=(i&127)<>>a,c=!(!(o>>>7)&&t==0),l=(c?o|128:o)&255;if(n.push(l),!c)return}let r=e>>>28&15|(t&7)<<4,i=!!(t>>3);if(n.push((i?r|128:r)&255),!!i){for(let a=3;a<31;a=a+7){let o=t>>>a,c=!!(o>>>7),l=(c?o|128:o)&255;if(n.push(l),!c)return}n.push(t>>>31&1)}}var vh=4294967296;function YO(e){let t=e[0]==="-";t&&(e=e.slice(1));let n=1e6,r=0,i=0;function a(o,c){let l=Number(e.slice(o,c));i*=n,r=r*n+l,r>=vh&&(i=i+(r/vh|0),r=r%vh)}return a(-24,-18),a(-18,-12),a(-12,-6),a(-6),t?lV(r,i):HO(r,i)}function cV(e,t){let n=HO(e,t),r=n.hi&2147483648;r&&(n=lV(n.lo,n.hi));let i=JO(n.lo,n.hi);return r?"-"+i:i}function JO(e,t){if({lo:e,hi:t}=vle(e,t),t<=2097151)return String(vh*t+e);let n=e&16777215,r=(e>>>24|t<<8)&16777215,i=t>>16&65535,a=n+r*6777216+i*6710656,o=r+i*8147497,c=i*2,l=1e7;return a>=l&&(o+=Math.floor(a/l),a%=l),o>=l&&(c+=Math.floor(o/l),o%=l),c.toString()+oV(o)+oV(a)}function vle(e,t){return{lo:e>>>0,hi:t>>>0}}function HO(e,t){return{lo:e|0,hi:t|0}}function lV(e,t){return t=~t,e?e=~e+1:t+=1,HO(e,t)}var oV=e=>{let t=String(e);return"0000000".slice(t.length)+t};function zO(e,t){if(e>=0){for(;e>127;)t.push(e&127|128),e=e>>>7;t.push(e)}else{for(let n=0;n<9;n++)t.push(e&127|128),e=e>>7;t.push(1)}}function dV(){let e=this.buf[this.pos++],t=e&127;if(!(e&128))return this.assertBounds(),t;if(e=this.buf[this.pos++],t|=(e&127)<<7,!(e&128))return this.assertBounds(),t;if(e=this.buf[this.pos++],t|=(e&127)<<14,!(e&128))return this.assertBounds(),t;if(e=this.buf[this.pos++],t|=(e&127)<<21,!(e&128))return this.assertBounds(),t;e=this.buf[this.pos++],t|=(e&15)<<28;for(let n=5;e&128&&n<10;n++)e=this.buf[this.pos++];if(e&128)throw new Error("invalid varint");return this.assertBounds(),t>>>0}function Sle(){let e=new DataView(new ArrayBuffer(8));if(typeof BigInt=="function"&&typeof e.getBigInt64=="function"&&typeof e.getBigUint64=="function"&&typeof e.setBigInt64=="function"&&typeof e.setBigUint64=="function"&&(typeof O!="object"||typeof O.env!="object"||O.env.BUF_BIGINT_DISABLE!=="1")){let i=BigInt("-9223372036854775808"),a=BigInt("9223372036854775807"),o=BigInt("0"),c=BigInt("18446744073709551615");return{zero:BigInt(0),supported:!0,parse(l){let p=typeof l=="bigint"?l:BigInt(l);if(p>a||pc||psn(/^-?[0-9]+$/.test(i),`int64 invalid: ${i}`),r=i=>sn(/^[0-9]+$/.test(i),`uint64 invalid: ${i}`);return{zero:"0",supported:!1,parse(i){return typeof i!="string"&&(i=i.toString()),n(i),i},uParse(i){return typeof i!="string"&&(i=i.toString()),r(i),i},enc(i){return typeof i!="string"&&(i=i.toString()),n(i),YO(i)},uEnc(i){return typeof i!="string"&&(i=i.toString()),r(i),YO(i)},dec(i,a){return cV(i,a)},uDec(i,a){return JO(i,a)}}}var Gn=Sle();f();T();m();var me;(function(e){e[e.DOUBLE=1]="DOUBLE",e[e.FLOAT=2]="FLOAT",e[e.INT64=3]="INT64",e[e.UINT64=4]="UINT64",e[e.INT32=5]="INT32",e[e.FIXED64=6]="FIXED64",e[e.FIXED32=7]="FIXED32",e[e.BOOL=8]="BOOL",e[e.STRING=9]="STRING",e[e.BYTES=12]="BYTES",e[e.UINT32=13]="UINT32",e[e.SFIXED32=15]="SFIXED32",e[e.SFIXED64=16]="SFIXED64",e[e.SINT32=17]="SINT32",e[e.SINT64=18]="SINT64"})(me||(me={}));var Na;(function(e){e[e.BIGINT=0]="BIGINT",e[e.STRING=1]="STRING"})(Na||(Na={}));function bs(e,t,n){if(t===n)return!0;if(e==me.BYTES){if(!(t instanceof Uint8Array)||!(n instanceof Uint8Array)||t.length!==n.length)return!1;for(let r=0;r>>0)}raw(t){return this.buf.length&&(this.chunks.push(new Uint8Array(this.buf)),this.buf=[]),this.chunks.push(t),this}uint32(t){for(Bp(t);t>127;)this.buf.push(t&127|128),t=t>>>7;return this.buf.push(t),this}int32(t){return Cl(t),zO(t,this.buf),this}bool(t){return this.buf.push(t?1:0),this}bytes(t){return this.uint32(t.byteLength),this.raw(t)}string(t){let n=this.textEncoder.encode(t);return this.uint32(n.byteLength),this.raw(n)}float(t){_h(t);let n=new Uint8Array(4);return new DataView(n.buffer).setFloat32(0,t,!0),this.raw(n)}double(t){let n=new Uint8Array(8);return new DataView(n.buffer).setFloat64(0,t,!0),this.raw(n)}fixed32(t){Bp(t);let n=new Uint8Array(4);return new DataView(n.buffer).setUint32(0,t,!0),this.raw(n)}sfixed32(t){Cl(t);let n=new Uint8Array(4);return new DataView(n.buffer).setInt32(0,t,!0),this.raw(n)}sint32(t){return Cl(t),t=(t<<1^t>>31)>>>0,zO(t,this.buf),this}sfixed64(t){let n=new Uint8Array(8),r=new DataView(n.buffer),i=Gn.enc(t);return r.setInt32(0,i.lo,!0),r.setInt32(4,i.hi,!0),this.raw(n)}fixed64(t){let n=new Uint8Array(8),r=new DataView(n.buffer),i=Gn.uEnc(t);return r.setInt32(0,i.lo,!0),r.setInt32(4,i.hi,!0),this.raw(n)}int64(t){let n=Gn.enc(t);return Sh(n.lo,n.hi,this.buf),this}sint64(t){let n=Gn.enc(t),r=n.hi>>31,i=n.lo<<1^r,a=(n.hi<<1|n.lo>>>31)^r;return Sh(i,a,this.buf),this}uint64(t){let n=Gn.uEnc(t);return Sh(n.lo,n.hi,this.buf),this}},Dh=class{constructor(t,n){this.varint64=uV,this.uint32=dV,this.buf=t,this.len=t.length,this.pos=0,this.view=new DataView(t.buffer,t.byteOffset,t.byteLength),this.textDecoder=n!=null?n:new TextDecoder}tag(){let t=this.uint32(),n=t>>>3,r=t&7;if(n<=0||r<0||r>5)throw new Error("illegal tag: field no "+n+" wire type "+r);return[n,r]}skip(t){let n=this.pos;switch(t){case Un.Varint:for(;this.buf[this.pos++]&128;);break;case Un.Bit64:this.pos+=4;case Un.Bit32:this.pos+=4;break;case Un.LengthDelimited:let r=this.uint32();this.pos+=r;break;case Un.StartGroup:let i;for(;(i=this.tag()[1])!==Un.EndGroup;)this.skip(i);break;default:throw new Error("cant skip wire type "+t)}return this.assertBounds(),this.buf.subarray(n,this.pos)}assertBounds(){if(this.pos>this.len)throw new RangeError("premature EOF")}int32(){return this.uint32()|0}sint32(){let t=this.uint32();return t>>>1^-(t&1)}int64(){return Gn.dec(...this.varint64())}uint64(){return Gn.uDec(...this.varint64())}sint64(){let[t,n]=this.varint64(),r=-(t&1);return t=(t>>>1|(n&1)<<31)^r,n=n>>>1^r,Gn.dec(t,n)}bool(){let[t,n]=this.varint64();return t!==0||n!==0}fixed32(){return this.view.getUint32((this.pos+=4)-4,!0)}sfixed32(){return this.view.getInt32((this.pos+=4)-4,!0)}fixed64(){return Gn.uDec(this.sfixed32(),this.sfixed32())}sfixed64(){return Gn.dec(this.sfixed32(),this.sfixed32())}float(){return this.view.getFloat32((this.pos+=4)-4,!0)}double(){return this.view.getFloat64((this.pos+=8)-8,!0)}bytes(){let t=this.uint32(),n=this.pos;return this.pos+=t,this.assertBounds(),this.buf.subarray(n,n+t)}string(){return this.textDecoder.decode(this.bytes())}};function pV(e,t,n,r){let i;return{typeName:t,extendee:n,get field(){if(!i){let a=typeof r=="function"?r():r;a.name=t.split(".").pop(),a.jsonName=`[${t}]`,i=e.util.newFieldList([a]).list()[0]}return i},runtime:e}}function Ah(e){let t=e.field.localName,n=Object.create(null);return n[t]=Ole(e),[n,()=>n[t]]}function Ole(e){let t=e.field;if(t.repeated)return[];if(t.default!==void 0)return t.default;switch(t.kind){case"enum":return t.T.values[0].no;case"scalar":return ha(t.T,t.L);case"message":let n=t.T,r=new n;return n.fieldWrapper?n.fieldWrapper.unwrapField(r):r;case"map":throw"map fields are not allowed to be extensions"}}function fV(e,t){if(!t.repeated&&(t.kind=="enum"||t.kind=="scalar")){for(let n=e.length-1;n>=0;--n)if(e[n].no==t.no)return[e[n]];return[]}return e.filter(n=>n.no===t.no)}f();T();m();f();T();m();var Ds="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split(""),Rh=[];for(let e=0;e>4,o=a,i=2;break;case 2:n[r++]=(o&15)<<4|(a&60)>>2,o=a,i=3;break;case 3:n[r++]=(o&3)<<6|a,i=0;break}}if(i==1)throw Error("invalid base64 string.");return n.subarray(0,r)},enc(e){let t="",n=0,r,i=0;for(let a=0;a>2],i=(r&3)<<4,n=1;break;case 1:t+=Ds[i|r>>4],i=(r&15)<<2,n=2;break;case 2:t+=Ds[i|r>>6],t+=Ds[r&63],n=0;break}return n&&(t+=Ds[i],t+="=",n==1&&(t+="=")),t}};f();T();m();function mV(e,t,n){NV(t,e);let r=t.runtime.bin.makeReadOptions(n),i=fV(e.getType().runtime.bin.listUnknownFields(e),t.field),[a,o]=Ah(t);for(let c of i)t.runtime.bin.readField(a,r.readerFactory(c.data),t.field,c.wireType,r);return o()}function TV(e,t,n,r){NV(t,e);let i=t.runtime.bin.makeReadOptions(r),a=t.runtime.bin.makeWriteOptions(r);if(XO(e,t)){let p=e.getType().runtime.bin.listUnknownFields(e).filter(N=>N.no!=t.field.no);e.getType().runtime.bin.discardUnknownFields(e);for(let N of p)e.getType().runtime.bin.onUnknownField(e,N.no,N.wireType,N.data)}let o=a.writerFactory(),c=t.field;!c.opt&&!c.repeated&&(c.kind=="enum"||c.kind=="scalar")&&(c=Object.assign(Object.assign({},t.field),{opt:!0})),t.runtime.bin.writeField(c,n,o,a);let l=i.readerFactory(o.finish());for(;l.posr.no==t.field.no)}function NV(e,t){sn(e.extendee.typeName==t.getType().typeName,`extension ${e.typeName} can only be applied to message ${e.extendee.typeName}`)}f();T();m();function Fh(e,t){let n=e.localName;if(e.repeated)return t[n].length>0;if(e.oneof)return t[e.oneof.localName].case===n;switch(e.kind){case"enum":case"scalar":return e.opt||e.req?t[n]!==void 0:e.kind=="enum"?t[n]!==e.T.values[0].no:!Oh(e.T,t[n]);case"message":return t[n]!==void 0;case"map":return Object.keys(t[n]).length>0}}function ZO(e,t){let n=e.localName,r=!e.opt&&!e.req;if(e.repeated)t[n]=[];else if(e.oneof)t[e.oneof.localName]={case:void 0};else switch(e.kind){case"map":t[n]={};break;case"enum":t[n]=r?e.T.values[0].no:void 0;break;case"scalar":t[n]=r?ha(e.T,e.L):void 0;break;case"message":t[n]=void 0;break}}f();T();m();f();T();m();function Ea(e,t){if(e===null||typeof e!="object"||!Object.getOwnPropertyNames($e.prototype).every(r=>r in e&&typeof e[r]=="function"))return!1;let n=e.getType();return n===null||typeof n!="function"||!("typeName"in n)||typeof n.typeName!="string"?!1:t===void 0?!0:n.typeName==t.typeName}function Ph(e,t){return Ea(t)||!e.fieldWrapper?t:e.fieldWrapper.wrapField(t)}var Hke={"google.protobuf.DoubleValue":me.DOUBLE,"google.protobuf.FloatValue":me.FLOAT,"google.protobuf.Int64Value":me.INT64,"google.protobuf.UInt64Value":me.UINT64,"google.protobuf.Int32Value":me.INT32,"google.protobuf.UInt32Value":me.UINT32,"google.protobuf.BoolValue":me.BOOL,"google.protobuf.StringValue":me.STRING,"google.protobuf.BytesValue":me.BYTES};var hV={ignoreUnknownFields:!1},EV={emitDefaultValues:!1,enumAsInteger:!1,useProtoFieldName:!1,prettySpaces:0};function ble(e){return e?Object.assign(Object.assign({},hV),e):hV}function Dle(e){return e?Object.assign(Object.assign({},EV),e):EV}var Ch=Symbol(),wh=Symbol();function gV(){return{makeReadOptions:ble,makeWriteOptions:Dle,readMessage(e,t,n,r){if(t==null||Array.isArray(t)||typeof t!="object")throw new Error(`cannot decode message ${e.typeName} from JSON: ${Ha(t)}`);r=r!=null?r:new e;let i=new Map,a=n.typeRegistry;for(let[o,c]of Object.entries(t)){let l=e.fields.findJsonName(o);if(l){if(l.oneof){if(c===null&&l.kind=="scalar")continue;let p=i.get(l.oneof);if(p!==void 0)throw new Error(`cannot decode message ${e.typeName} from JSON: multiple keys for oneof "${l.oneof.name}" present: "${p}", "${o}"`);i.set(l.oneof,o)}yV(r,c,l,n,e)}else{let p=!1;if(a!=null&&a.findExtension&&o.startsWith("[")&&o.endsWith("]")){let N=a.findExtension(o.substring(1,o.length-1));if(N&&N.extendee.typeName==e.typeName){p=!0;let[y,g]=Ah(N);yV(y,c,N.field,n,N),TV(r,N,g(),n)}}if(!p&&!n.ignoreUnknownFields)throw new Error(`cannot decode message ${e.typeName} from JSON: key "${o}" is unknown`)}}return r},writeMessage(e,t){let n=e.getType(),r={},i;try{for(i of n.fields.byNumber()){if(!Fh(i,e)){if(i.req)throw"required field not set";if(!t.emitDefaultValues||!Rle(i))continue}let o=i.oneof?e[i.oneof.localName].value:e[i.localName],c=IV(i,o,t);c!==void 0&&(r[t.useProtoFieldName?i.name:i.jsonName]=c)}let a=t.typeRegistry;if(a!=null&&a.findExtensionFor)for(let o of n.runtime.bin.listUnknownFields(e)){let c=a.findExtensionFor(n.typeName,o.no);if(c&&XO(e,c)){let l=mV(e,c,t),p=IV(c.field,l,t);p!==void 0&&(r[c.field.jsonName]=p)}}}catch(a){let o=i?`cannot encode field ${n.typeName}.${i.name} to JSON`:`cannot encode message ${n.typeName} to JSON`,c=a instanceof Error?a.message:String(a);throw new Error(o+(c.length>0?`: ${c}`:""))}return r},readScalar(e,t,n){return Up(e,t,n!=null?n:Na.BIGINT,!0)},writeScalar(e,t,n){if(t!==void 0&&(n||Oh(e,t)))return Lh(e,t)},debug:Ha}}function Ha(e){if(e===null)return"null";switch(typeof e){case"object":return Array.isArray(e)?"array":"object";case"string":return e.length>100?"string":`"${e.split('"').join('\\"')}"`;default:return String(e)}}function yV(e,t,n,r,i){let a=n.localName;if(n.repeated){if(sn(n.kind!="map"),t===null)return;if(!Array.isArray(t))throw new Error(`cannot decode field ${i.typeName}.${n.name} from JSON: ${Ha(t)}`);let o=e[a];for(let c of t){if(c===null)throw new Error(`cannot decode field ${i.typeName}.${n.name} from JSON: ${Ha(c)}`);switch(n.kind){case"message":o.push(n.T.fromJson(c,r));break;case"enum":let l=eb(n.T,c,r.ignoreUnknownFields,!0);l!==wh&&o.push(l);break;case"scalar":try{o.push(Up(n.T,c,n.L,!0))}catch(p){let N=`cannot decode field ${i.typeName}.${n.name} from JSON: ${Ha(c)}`;throw p instanceof Error&&p.message.length>0&&(N+=`: ${p.message}`),new Error(N)}break}}}else if(n.kind=="map"){if(t===null)return;if(typeof t!="object"||Array.isArray(t))throw new Error(`cannot decode field ${i.typeName}.${n.name} from JSON: ${Ha(t)}`);let o=e[a];for(let[c,l]of Object.entries(t)){if(l===null)throw new Error(`cannot decode field ${i.typeName}.${n.name} from JSON: map value null`);let p;try{p=Ale(n.K,c)}catch(N){let y=`cannot decode map key for field ${i.typeName}.${n.name} from JSON: ${Ha(t)}`;throw N instanceof Error&&N.message.length>0&&(y+=`: ${N.message}`),new Error(y)}switch(n.V.kind){case"message":o[p]=n.V.T.fromJson(l,r);break;case"enum":let N=eb(n.V.T,l,r.ignoreUnknownFields,!0);N!==wh&&(o[p]=N);break;case"scalar":try{o[p]=Up(n.V.T,l,Na.BIGINT,!0)}catch(y){let g=`cannot decode map value for field ${i.typeName}.${n.name} from JSON: ${Ha(t)}`;throw y instanceof Error&&y.message.length>0&&(g+=`: ${y.message}`),new Error(g)}break}}}else switch(n.oneof&&(e=e[n.oneof.localName]={case:a},a="value"),n.kind){case"message":let o=n.T;if(t===null&&o.typeName!="google.protobuf.Value")return;let c=e[a];Ea(c)?c.fromJson(t,r):(e[a]=c=o.fromJson(t,r),o.fieldWrapper&&!n.oneof&&(e[a]=o.fieldWrapper.unwrapField(c)));break;case"enum":let l=eb(n.T,t,r.ignoreUnknownFields,!1);switch(l){case Ch:ZO(n,e);break;case wh:break;default:e[a]=l;break}break;case"scalar":try{let p=Up(n.T,t,n.L,!1);switch(p){case Ch:ZO(n,e);break;default:e[a]=p;break}}catch(p){let N=`cannot decode field ${i.typeName}.${n.name} from JSON: ${Ha(t)}`;throw p instanceof Error&&p.message.length>0&&(N+=`: ${p.message}`),new Error(N)}break}}function Ale(e,t){if(e===me.BOOL)switch(t){case"true":t=!0;break;case"false":t=!1;break}return Up(e,t,Na.BIGINT,!0).toString()}function Up(e,t,n,r){if(t===null)return r?ha(e,n):Ch;switch(e){case me.DOUBLE:case me.FLOAT:if(t==="NaN")return Number.NaN;if(t==="Infinity")return Number.POSITIVE_INFINITY;if(t==="-Infinity")return Number.NEGATIVE_INFINITY;if(t===""||typeof t=="string"&&t.trim().length!==t.length||typeof t!="string"&&typeof t!="number")break;let i=Number(t);if(Number.isNaN(i)||!Number.isFinite(i))break;return e==me.FLOAT&&_h(i),i;case me.INT32:case me.FIXED32:case me.SFIXED32:case me.SINT32:case me.UINT32:let a;if(typeof t=="number"?a=t:typeof t=="string"&&t.length>0&&t.trim().length===t.length&&(a=Number(t)),a===void 0)break;return e==me.UINT32||e==me.FIXED32?Bp(a):Cl(a),a;case me.INT64:case me.SFIXED64:case me.SINT64:if(typeof t!="number"&&typeof t!="string")break;let o=Gn.parse(t);return n?o.toString():o;case me.FIXED64:case me.UINT64:if(typeof t!="number"&&typeof t!="string")break;let c=Gn.uParse(t);return n?c.toString():c;case me.BOOL:if(typeof t!="boolean")break;return t;case me.STRING:if(typeof t!="string")break;try{encodeURIComponent(t)}catch(l){throw new Error("invalid UTF8")}return t;case me.BYTES:if(t==="")return new Uint8Array(0);if(typeof t!="string")break;return WO.dec(t)}throw new Error}function eb(e,t,n,r){if(t===null)return e.typeName=="google.protobuf.NullValue"?0:r?e.values[0].no:Ch;switch(typeof t){case"number":if(Number.isInteger(t))return t;break;case"string":let i=e.findName(t);if(i!==void 0)return i.no;if(n)return wh;break}throw new Error(`cannot decode enum ${e.typeName} from JSON: ${Ha(t)}`)}function Rle(e){return e.repeated||e.kind=="map"?!0:!(e.oneof||e.kind=="message"||e.opt||e.req)}function IV(e,t,n){if(e.kind=="map"){sn(typeof t=="object"&&t!=null);let r={},i=Object.entries(t);switch(e.V.kind){case"scalar":for(let[o,c]of i)r[o.toString()]=Lh(e.V.T,c);break;case"message":for(let[o,c]of i)r[o.toString()]=c.toJson(n);break;case"enum":let a=e.V.T;for(let[o,c]of i)r[o.toString()]=tb(a,c,n.enumAsInteger);break}return n.emitDefaultValues||i.length>0?r:void 0}if(e.repeated){sn(Array.isArray(t));let r=[];switch(e.kind){case"scalar":for(let i=0;i0?r:void 0}switch(e.kind){case"scalar":return Lh(e.T,t);case"enum":return tb(e.T,t,n.enumAsInteger);case"message":return Ph(e.T,t).toJson(n)}}function tb(e,t,n){var r;if(sn(typeof t=="number"),e.typeName=="google.protobuf.NullValue")return null;if(n)return t;let i=e.findNumber(t);return(r=i==null?void 0:i.name)!==null&&r!==void 0?r:t}function Lh(e,t){switch(e){case me.INT32:case me.SFIXED32:case me.SINT32:case me.FIXED32:case me.UINT32:return sn(typeof t=="number"),t;case me.FLOAT:case me.DOUBLE:return sn(typeof t=="number"),Number.isNaN(t)?"NaN":t===Number.POSITIVE_INFINITY?"Infinity":t===Number.NEGATIVE_INFINITY?"-Infinity":t;case me.STRING:return sn(typeof t=="string"),t;case me.BOOL:return sn(typeof t=="boolean"),t;case me.UINT64:case me.FIXED64:case me.INT64:case me.SFIXED64:case me.SINT64:return sn(typeof t=="bigint"||typeof t=="string"||typeof t=="number"),t.toString();case me.BYTES:return sn(t instanceof Uint8Array),WO.enc(t)}}f();T();m();var Bl=Symbol("@bufbuild/protobuf/unknown-fields"),_V={readUnknownFields:!0,readerFactory:e=>new Dh(e)},vV={writeUnknownFields:!0,writerFactory:()=>new bh};function Fle(e){return e?Object.assign(Object.assign({},_V),e):_V}function Ple(e){return e?Object.assign(Object.assign({},vV),e):vV}function DV(){return{makeReadOptions:Fle,makeWriteOptions:Ple,listUnknownFields(e){var t;return(t=e[Bl])!==null&&t!==void 0?t:[]},discardUnknownFields(e){delete e[Bl]},writeUnknownFields(e,t){let r=e[Bl];if(r)for(let i of r)t.tag(i.no,i.wireType).raw(i.data)},onUnknownField(e,t,n,r){let i=e;Array.isArray(i[Bl])||(i[Bl]=[]),i[Bl].push({no:t,wireType:n,data:r})},readMessage(e,t,n,r,i){let a=e.getType(),o=i?t.len:t.pos+n,c,l;for(;t.pos0&&(l=Lle),a){let g=e[o];if(r==Un.LengthDelimited&&c!=me.STRING&&c!=me.BYTES){let F=t.uint32()+t.pos;for(;t.posEa(g,y)?g:new y(g));else{let g=o[i];y.fieldWrapper?y.typeName==="google.protobuf.BytesValue"?a[i]=Mp(g):a[i]=g:a[i]=Ea(g,y)?g:new y(g)}break}}},equals(e,t,n){return t===n?!0:!t||!n?!1:e.fields.byMember().every(r=>{let i=t[r.localName],a=n[r.localName];if(r.repeated){if(i.length!==a.length)return!1;switch(r.kind){case"message":return i.every((o,c)=>r.T.equals(o,a[c]));case"scalar":return i.every((o,c)=>bs(r.T,o,a[c]));case"enum":return i.every((o,c)=>bs(me.INT32,o,a[c]))}throw new Error(`repeated cannot contain ${r.kind}`)}switch(r.kind){case"message":return r.T.equals(i,a);case"enum":return bs(me.INT32,i,a);case"scalar":return bs(r.T,i,a);case"oneof":if(i.case!==a.case)return!1;let o=r.findField(i.case);if(o===void 0)return!0;switch(o.kind){case"message":return o.T.equals(i.value,a.value);case"enum":return bs(me.INT32,i.value,a.value);case"scalar":return bs(o.T,i.value,a.value)}throw new Error(`oneof cannot contain ${o.kind}`);case"map":let c=Object.keys(i).concat(Object.keys(a));switch(r.V.kind){case"message":let l=r.V.T;return c.every(N=>l.equals(i[N],a[N]));case"enum":return c.every(N=>bs(me.INT32,i[N],a[N]));case"scalar":let p=r.V.T;return c.every(N=>bs(p,i[N],a[N]))}break}})},clone(e){let t=e.getType(),n=new t,r=n;for(let i of t.fields.byMember()){let a=e[i.localName],o;if(i.repeated)o=a.map(kh);else if(i.kind=="map"){o=r[i.localName];for(let[c,l]of Object.entries(a))o[c]=kh(l)}else i.kind=="oneof"?o=i.findField(a.case)?{case:a.case,value:kh(a.value)}:{case:void 0}:o=kh(a);r[i.localName]=o}for(let i of t.runtime.bin.listUnknownFields(e))t.runtime.bin.onUnknownField(r,i.no,i.wireType,i.data);return n}}}function kh(e){if(e===void 0)return e;if(Ea(e))return e.clone();if(e instanceof Uint8Array){let t=new Uint8Array(e.byteLength);return t.set(e),t}return e}function Mp(e){return e instanceof Uint8Array?e:new Uint8Array(e)}function FV(e,t,n){return{syntax:e,json:gV(),bin:DV(),util:Object.assign(Object.assign({},RV()),{newFieldList:t,initFields:n}),makeMessageType(r,i,a){return sV(this,r,i,a)},makeEnum:iV,makeEnumType:QO,getEnumType:rV,makeExtension(r,i,a){return pV(this,r,i,a)}}}f();T();m();var Mh=class{constructor(t,n){this._fields=t,this._normalizer=n}findJsonName(t){if(!this.jsonNames){let n={};for(let r of this.list())n[r.jsonName]=n[r.name]=r;this.jsonNames=n}return this.jsonNames[t]}find(t){if(!this.numbers){let n={};for(let r of this.list())n[r.no]=r;this.numbers=n}return this.numbers[t]}list(){return this.all||(this.all=this._normalizer(this._fields)),this.all}byNumber(){return this.numbersAsc||(this.numbersAsc=this.list().concat().sort((t,n)=>t.no-n.no)),this.numbersAsc}byMember(){if(!this.members){this.members=[];let t=this.members,n;for(let r of this.list())r.oneof?r.oneof!==n&&(n=r.oneof,t.push(n)):t.push(r)}return this.members}};f();T();m();f();T();m();f();T();m();function nb(e,t){let n=LV(e);return t?n:xle(Mle(n))}function PV(e){return nb(e,!1)}var wV=LV;function LV(e){let t=!1,n=[];for(let r=0;r`${e}$`,Mle=e=>kle.has(e)?CV(e):e,xle=e=>Ule.has(e)?CV(e):e;var xh=class{constructor(t){this.kind="oneof",this.repeated=!1,this.packed=!1,this.opt=!1,this.req=!1,this.default=void 0,this.fields=[],this.name=t,this.localName=PV(t)}addField(t){sn(t.oneof===this,`field ${t.name} not one of ${this.name}`),this.fields.push(t)}findField(t){if(!this._lookup){this._lookup=Object.create(null);for(let n=0;nnew Mh(e,t=>BV(t,!0)),e=>{for(let t of e.getType().fields.byMember()){if(t.opt)continue;let n=t.localName,r=e;if(t.repeated){r[n]=[];continue}switch(t.kind){case"oneof":r[n]={case:void 0};break;case"enum":r[n]=0;break;case"map":r[n]={};break;case"scalar":r[n]=ha(t.T,t.L);break;case"message":break}}});var Ul;(function(e){e[e.OK=0]="OK",e[e.ERR=1]="ERR",e[e.ERR_NOT_FOUND=2]="ERR_NOT_FOUND",e[e.ERR_ALREADY_EXISTS=3]="ERR_ALREADY_EXISTS",e[e.ERR_INVALID_SUBGRAPH_SCHEMA=4]="ERR_INVALID_SUBGRAPH_SCHEMA",e[e.ERR_SUBGRAPH_COMPOSITION_FAILED=5]="ERR_SUBGRAPH_COMPOSITION_FAILED",e[e.ERR_SUBGRAPH_CHECK_FAILED=6]="ERR_SUBGRAPH_CHECK_FAILED",e[e.ERR_INVALID_LABELS=7]="ERR_INVALID_LABELS",e[e.ERR_ANALYTICS_DISABLED=8]="ERR_ANALYTICS_DISABLED",e[e.ERROR_NOT_AUTHENTICATED=9]="ERROR_NOT_AUTHENTICATED",e[e.ERR_OPENAI_DISABLED=10]="ERR_OPENAI_DISABLED",e[e.ERR_FREE_TRIAL_EXPIRED=11]="ERR_FREE_TRIAL_EXPIRED",e[e.ERROR_NOT_AUTHORIZED=12]="ERROR_NOT_AUTHORIZED",e[e.ERR_LIMIT_REACHED=13]="ERR_LIMIT_REACHED",e[e.ERR_DEPLOYMENT_FAILED=14]="ERR_DEPLOYMENT_FAILED",e[e.ERR_INVALID_NAME=15]="ERR_INVALID_NAME",e[e.ERR_UPGRADE_PLAN=16]="ERR_UPGRADE_PLAN",e[e.ERR_BAD_REQUEST=17]="ERR_BAD_REQUEST",e[e.ERR_SCHEMA_MISMATCH_WITH_APPROVED_PROPOSAL=18]="ERR_SCHEMA_MISMATCH_WITH_APPROVED_PROPOSAL"})(Ul||(Ul={}));q.util.setEnumType(Ul,"wg.cosmo.common.EnumStatusCode",[{no:0,name:"OK"},{no:1,name:"ERR"},{no:2,name:"ERR_NOT_FOUND"},{no:3,name:"ERR_ALREADY_EXISTS"},{no:4,name:"ERR_INVALID_SUBGRAPH_SCHEMA"},{no:5,name:"ERR_SUBGRAPH_COMPOSITION_FAILED"},{no:6,name:"ERR_SUBGRAPH_CHECK_FAILED"},{no:7,name:"ERR_INVALID_LABELS"},{no:8,name:"ERR_ANALYTICS_DISABLED"},{no:9,name:"ERROR_NOT_AUTHENTICATED"},{no:10,name:"ERR_OPENAI_DISABLED"},{no:11,name:"ERR_FREE_TRIAL_EXPIRED"},{no:12,name:"ERROR_NOT_AUTHORIZED"},{no:13,name:"ERR_LIMIT_REACHED"},{no:14,name:"ERR_DEPLOYMENT_FAILED"},{no:15,name:"ERR_INVALID_NAME"},{no:16,name:"ERR_UPGRADE_PLAN"},{no:17,name:"ERR_BAD_REQUEST"},{no:18,name:"ERR_SCHEMA_MISMATCH_WITH_APPROVED_PROPOSAL"}]);var As;(function(e){e[e.GRAPHQL_SUBSCRIPTION_PROTOCOL_WS=0]="GRAPHQL_SUBSCRIPTION_PROTOCOL_WS",e[e.GRAPHQL_SUBSCRIPTION_PROTOCOL_SSE=1]="GRAPHQL_SUBSCRIPTION_PROTOCOL_SSE",e[e.GRAPHQL_SUBSCRIPTION_PROTOCOL_SSE_POST=2]="GRAPHQL_SUBSCRIPTION_PROTOCOL_SSE_POST"})(As||(As={}));q.util.setEnumType(As,"wg.cosmo.common.GraphQLSubscriptionProtocol",[{no:0,name:"GRAPHQL_SUBSCRIPTION_PROTOCOL_WS"},{no:1,name:"GRAPHQL_SUBSCRIPTION_PROTOCOL_SSE"},{no:2,name:"GRAPHQL_SUBSCRIPTION_PROTOCOL_SSE_POST"}]);var Rs;(function(e){e[e.GRAPHQL_WEBSOCKET_SUBPROTOCOL_AUTO=0]="GRAPHQL_WEBSOCKET_SUBPROTOCOL_AUTO",e[e.GRAPHQL_WEBSOCKET_SUBPROTOCOL_WS=1]="GRAPHQL_WEBSOCKET_SUBPROTOCOL_WS",e[e.GRAPHQL_WEBSOCKET_SUBPROTOCOL_TRANSPORT_WS=2]="GRAPHQL_WEBSOCKET_SUBPROTOCOL_TRANSPORT_WS"})(Rs||(Rs={}));q.util.setEnumType(Rs,"wg.cosmo.common.GraphQLWebsocketSubprotocol",[{no:0,name:"GRAPHQL_WEBSOCKET_SUBPROTOCOL_AUTO"},{no:1,name:"GRAPHQL_WEBSOCKET_SUBPROTOCOL_WS"},{no:2,name:"GRAPHQL_WEBSOCKET_SUBPROTOCOL_TRANSPORT_WS"}]);f();T();m();var rb;(function(e){e[e.RENDER_ARGUMENT_DEFAULT=0]="RENDER_ARGUMENT_DEFAULT",e[e.RENDER_ARGUMENT_AS_GRAPHQL_VALUE=1]="RENDER_ARGUMENT_AS_GRAPHQL_VALUE",e[e.RENDER_ARGUMENT_AS_ARRAY_CSV=2]="RENDER_ARGUMENT_AS_ARRAY_CSV"})(rb||(rb={}));q.util.setEnumType(rb,"wg.cosmo.node.v1.ArgumentRenderConfiguration",[{no:0,name:"RENDER_ARGUMENT_DEFAULT"},{no:1,name:"RENDER_ARGUMENT_AS_GRAPHQL_VALUE"},{no:2,name:"RENDER_ARGUMENT_AS_ARRAY_CSV"}]);var pc;(function(e){e[e.OBJECT_FIELD=0]="OBJECT_FIELD",e[e.FIELD_ARGUMENT=1]="FIELD_ARGUMENT"})(pc||(pc={}));q.util.setEnumType(pc,"wg.cosmo.node.v1.ArgumentSource",[{no:0,name:"OBJECT_FIELD"},{no:1,name:"FIELD_ARGUMENT"}]);var au;(function(e){e[e.STATIC=0]="STATIC",e[e.GRAPHQL=1]="GRAPHQL",e[e.PUBSUB=2]="PUBSUB"})(au||(au={}));q.util.setEnumType(au,"wg.cosmo.node.v1.DataSourceKind",[{no:0,name:"STATIC"},{no:1,name:"GRAPHQL"},{no:2,name:"PUBSUB"}]);var So;(function(e){e[e.PUBLISH=0]="PUBLISH",e[e.REQUEST=1]="REQUEST",e[e.SUBSCRIBE=2]="SUBSCRIBE"})(So||(So={}));q.util.setEnumType(So,"wg.cosmo.node.v1.EventType",[{no:0,name:"PUBLISH"},{no:1,name:"REQUEST"},{no:2,name:"SUBSCRIBE"}]);var su;(function(e){e[e.STATIC_CONFIGURATION_VARIABLE=0]="STATIC_CONFIGURATION_VARIABLE",e[e.ENV_CONFIGURATION_VARIABLE=1]="ENV_CONFIGURATION_VARIABLE",e[e.PLACEHOLDER_CONFIGURATION_VARIABLE=2]="PLACEHOLDER_CONFIGURATION_VARIABLE"})(su||(su={}));q.util.setEnumType(su,"wg.cosmo.node.v1.ConfigurationVariableKind",[{no:0,name:"STATIC_CONFIGURATION_VARIABLE"},{no:1,name:"ENV_CONFIGURATION_VARIABLE"},{no:2,name:"PLACEHOLDER_CONFIGURATION_VARIABLE"}]);var fc;(function(e){e[e.GET=0]="GET",e[e.POST=1]="POST",e[e.PUT=2]="PUT",e[e.DELETE=3]="DELETE",e[e.OPTIONS=4]="OPTIONS"})(fc||(fc={}));q.util.setEnumType(fc,"wg.cosmo.node.v1.HTTPMethod",[{no:0,name:"GET"},{no:1,name:"POST"},{no:2,name:"PUT"},{no:3,name:"DELETE"},{no:4,name:"OPTIONS"}]);var Fs=class Fs extends $e{constructor(n){super();v(this,"id","");v(this,"name","");v(this,"routingUrl","");q.util.initPartial(n,this)}static fromBinary(n,r){return new Fs().fromBinary(n,r)}static fromJson(n,r){return new Fs().fromJson(n,r)}static fromJsonString(n,r){return new Fs().fromJsonString(n,r)}static equals(n,r){return q.util.equals(Fs,n,r)}};v(Fs,"runtime",q),v(Fs,"typeName","wg.cosmo.node.v1.Subgraph"),v(Fs,"fields",q.util.newFieldList(()=>[{no:1,name:"id",kind:"scalar",T:9},{no:2,name:"name",kind:"scalar",T:9},{no:3,name:"routing_url",kind:"scalar",T:9}]));var qh=Fs,Ps=class Ps extends $e{constructor(n){super();v(this,"configByFeatureFlagName",{});q.util.initPartial(n,this)}static fromBinary(n,r){return new Ps().fromBinary(n,r)}static fromJson(n,r){return new Ps().fromJson(n,r)}static fromJsonString(n,r){return new Ps().fromJsonString(n,r)}static equals(n,r){return q.util.equals(Ps,n,r)}};v(Ps,"runtime",q),v(Ps,"typeName","wg.cosmo.node.v1.FeatureFlagRouterExecutionConfigs"),v(Ps,"fields",q.util.newFieldList(()=>[{no:1,name:"config_by_feature_flag_name",kind:"map",K:9,V:{kind:"message",T:ab}}]));var ib=Ps,ws=class ws extends $e{constructor(n){super();v(this,"engineConfig");v(this,"version","");v(this,"subgraphs",[]);q.util.initPartial(n,this)}static fromBinary(n,r){return new ws().fromBinary(n,r)}static fromJson(n,r){return new ws().fromJson(n,r)}static fromJsonString(n,r){return new ws().fromJsonString(n,r)}static equals(n,r){return q.util.equals(ws,n,r)}};v(ws,"runtime",q),v(ws,"typeName","wg.cosmo.node.v1.FeatureFlagRouterExecutionConfig"),v(ws,"fields",q.util.newFieldList(()=>[{no:1,name:"engine_config",kind:"message",T:kl},{no:2,name:"version",kind:"scalar",T:9},{no:3,name:"subgraphs",kind:"message",T:qh,repeated:!0}]));var ab=ws,Ls=class Ls extends $e{constructor(n){super();v(this,"engineConfig");v(this,"version","");v(this,"subgraphs",[]);v(this,"featureFlagConfigs");v(this,"compatibilityVersion","");q.util.initPartial(n,this)}static fromBinary(n,r){return new Ls().fromBinary(n,r)}static fromJson(n,r){return new Ls().fromJson(n,r)}static fromJsonString(n,r){return new Ls().fromJsonString(n,r)}static equals(n,r){return q.util.equals(Ls,n,r)}};v(Ls,"runtime",q),v(Ls,"typeName","wg.cosmo.node.v1.RouterConfig"),v(Ls,"fields",q.util.newFieldList(()=>[{no:1,name:"engine_config",kind:"message",T:kl},{no:2,name:"version",kind:"scalar",T:9},{no:3,name:"subgraphs",kind:"message",T:qh,repeated:!0},{no:4,name:"feature_flag_configs",kind:"message",T:ib,opt:!0},{no:5,name:"compatibility_version",kind:"scalar",T:9}]));var xp=Ls,Cs=class Cs extends $e{constructor(n){super();v(this,"code",Ul.OK);v(this,"details");q.util.initPartial(n,this)}static fromBinary(n,r){return new Cs().fromBinary(n,r)}static fromJson(n,r){return new Cs().fromJson(n,r)}static fromJsonString(n,r){return new Cs().fromJsonString(n,r)}static equals(n,r){return q.util.equals(Cs,n,r)}};v(Cs,"runtime",q),v(Cs,"typeName","wg.cosmo.node.v1.Response"),v(Cs,"fields",q.util.newFieldList(()=>[{no:1,name:"code",kind:"enum",T:q.getEnumType(Ul)},{no:2,name:"details",kind:"scalar",T:9,opt:!0}]));var sb=Cs,Bs=class Bs extends $e{constructor(n){super();v(this,"code",0);v(this,"message","");q.util.initPartial(n,this)}static fromBinary(n,r){return new Bs().fromBinary(n,r)}static fromJson(n,r){return new Bs().fromJson(n,r)}static fromJsonString(n,r){return new Bs().fromJsonString(n,r)}static equals(n,r){return q.util.equals(Bs,n,r)}};v(Bs,"runtime",q),v(Bs,"typeName","wg.cosmo.node.v1.ResponseStatus"),v(Bs,"fields",q.util.newFieldList(()=>[{no:1,name:"code",kind:"scalar",T:5},{no:2,name:"message",kind:"scalar",T:9}]));var UV=Bs,Us=class Us extends $e{constructor(n){super();v(this,"accountLimits");v(this,"graphPublicKey","");q.util.initPartial(n,this)}static fromBinary(n,r){return new Us().fromBinary(n,r)}static fromJson(n,r){return new Us().fromJson(n,r)}static fromJsonString(n,r){return new Us().fromJsonString(n,r)}static equals(n,r){return q.util.equals(Us,n,r)}};v(Us,"runtime",q),v(Us,"typeName","wg.cosmo.node.v1.RegistrationInfo"),v(Us,"fields",q.util.newFieldList(()=>[{no:1,name:"account_limits",kind:"message",T:ub},{no:2,name:"graph_public_key",kind:"scalar",T:9}]));var ob=Us,ks=class ks extends $e{constructor(n){super();v(this,"traceSamplingRate",0);q.util.initPartial(n,this)}static fromBinary(n,r){return new ks().fromBinary(n,r)}static fromJson(n,r){return new ks().fromJson(n,r)}static fromJsonString(n,r){return new ks().fromJsonString(n,r)}static equals(n,r){return q.util.equals(ks,n,r)}};v(ks,"runtime",q),v(ks,"typeName","wg.cosmo.node.v1.AccountLimits"),v(ks,"fields",q.util.newFieldList(()=>[{no:1,name:"trace_sampling_rate",kind:"scalar",T:2}]));var ub=ks,Ms=class Ms extends $e{constructor(t){super(),q.util.initPartial(t,this)}static fromBinary(t,n){return new Ms().fromBinary(t,n)}static fromJson(t,n){return new Ms().fromJson(t,n)}static fromJsonString(t,n){return new Ms().fromJsonString(t,n)}static equals(t,n){return q.util.equals(Ms,t,n)}};v(Ms,"runtime",q),v(Ms,"typeName","wg.cosmo.node.v1.SelfRegisterRequest"),v(Ms,"fields",q.util.newFieldList(()=>[]));var kV=Ms,xs=class xs extends $e{constructor(n){super();v(this,"response");v(this,"registrationInfo");q.util.initPartial(n,this)}static fromBinary(n,r){return new xs().fromBinary(n,r)}static fromJson(n,r){return new xs().fromJson(n,r)}static fromJsonString(n,r){return new xs().fromJsonString(n,r)}static equals(n,r){return q.util.equals(xs,n,r)}};v(xs,"runtime",q),v(xs,"typeName","wg.cosmo.node.v1.SelfRegisterResponse"),v(xs,"fields",q.util.newFieldList(()=>[{no:1,name:"response",kind:"message",T:sb},{no:2,name:"registrationInfo",kind:"message",T:ob,opt:!0}]));var MV=xs,qs=class qs extends $e{constructor(n){super();v(this,"defaultFlushInterval",Gn.zero);v(this,"datasourceConfigurations",[]);v(this,"fieldConfigurations",[]);v(this,"graphqlSchema","");v(this,"typeConfigurations",[]);v(this,"stringStorage",{});v(this,"graphqlClientSchema");q.util.initPartial(n,this)}static fromBinary(n,r){return new qs().fromBinary(n,r)}static fromJson(n,r){return new qs().fromJson(n,r)}static fromJsonString(n,r){return new qs().fromJsonString(n,r)}static equals(n,r){return q.util.equals(qs,n,r)}};v(qs,"runtime",q),v(qs,"typeName","wg.cosmo.node.v1.EngineConfiguration"),v(qs,"fields",q.util.newFieldList(()=>[{no:1,name:"defaultFlushInterval",kind:"scalar",T:3},{no:2,name:"datasource_configurations",kind:"message",T:qp,repeated:!0},{no:3,name:"field_configurations",kind:"message",T:Kp,repeated:!0},{no:4,name:"graphqlSchema",kind:"scalar",T:9},{no:5,name:"type_configurations",kind:"message",T:cb,repeated:!0},{no:6,name:"string_storage",kind:"map",K:9,V:{kind:"scalar",T:9}},{no:7,name:"graphql_client_schema",kind:"scalar",T:9,opt:!0}]));var kl=qs,Vs=class Vs extends $e{constructor(n){super();v(this,"kind",au.STATIC);v(this,"rootNodes",[]);v(this,"childNodes",[]);v(this,"overrideFieldPathFromAlias",!1);v(this,"customGraphql");v(this,"customStatic");v(this,"directives",[]);v(this,"requestTimeoutSeconds",Gn.zero);v(this,"id","");v(this,"keys",[]);v(this,"provides",[]);v(this,"requires",[]);v(this,"customEvents");v(this,"entityInterfaces",[]);v(this,"interfaceObjects",[]);q.util.initPartial(n,this)}static fromBinary(n,r){return new Vs().fromBinary(n,r)}static fromJson(n,r){return new Vs().fromJson(n,r)}static fromJsonString(n,r){return new Vs().fromJsonString(n,r)}static equals(n,r){return q.util.equals(Vs,n,r)}};v(Vs,"runtime",q),v(Vs,"typeName","wg.cosmo.node.v1.DataSourceConfiguration"),v(Vs,"fields",q.util.newFieldList(()=>[{no:1,name:"kind",kind:"enum",T:q.getEnumType(au)},{no:2,name:"root_nodes",kind:"message",T:Ml,repeated:!0},{no:3,name:"child_nodes",kind:"message",T:Ml,repeated:!0},{no:4,name:"override_field_path_from_alias",kind:"scalar",T:8},{no:5,name:"custom_graphql",kind:"message",T:Qp},{no:6,name:"custom_static",kind:"message",T:db},{no:7,name:"directives",kind:"message",T:pb,repeated:!0},{no:8,name:"request_timeout_seconds",kind:"scalar",T:3},{no:9,name:"id",kind:"scalar",T:9},{no:10,name:"keys",kind:"message",T:dc,repeated:!0},{no:11,name:"provides",kind:"message",T:dc,repeated:!0},{no:12,name:"requires",kind:"message",T:dc,repeated:!0},{no:13,name:"custom_events",kind:"message",T:Nc},{no:14,name:"entity_interfaces",kind:"message",T:xl,repeated:!0},{no:15,name:"interface_objects",kind:"message",T:xl,repeated:!0}]));var qp=Vs,js=class js extends $e{constructor(n){super();v(this,"name","");v(this,"sourceType",pc.OBJECT_FIELD);q.util.initPartial(n,this)}static fromBinary(n,r){return new js().fromBinary(n,r)}static fromJson(n,r){return new js().fromJson(n,r)}static fromJsonString(n,r){return new js().fromJsonString(n,r)}static equals(n,r){return q.util.equals(js,n,r)}};v(js,"runtime",q),v(js,"typeName","wg.cosmo.node.v1.ArgumentConfiguration"),v(js,"fields",q.util.newFieldList(()=>[{no:1,name:"name",kind:"scalar",T:9},{no:2,name:"source_type",kind:"enum",T:q.getEnumType(pc)}]));var Vp=js,Ks=class Ks extends $e{constructor(n){super();v(this,"requiredAndScopes",[]);q.util.initPartial(n,this)}static fromBinary(n,r){return new Ks().fromBinary(n,r)}static fromJson(n,r){return new Ks().fromJson(n,r)}static fromJsonString(n,r){return new Ks().fromJsonString(n,r)}static equals(n,r){return q.util.equals(Ks,n,r)}};v(Ks,"runtime",q),v(Ks,"typeName","wg.cosmo.node.v1.Scopes"),v(Ks,"fields",q.util.newFieldList(()=>[{no:1,name:"required_and_scopes",kind:"scalar",T:9,repeated:!0}]));var mc=Ks,Gs=class Gs extends $e{constructor(n){super();v(this,"requiresAuthentication",!1);v(this,"requiredOrScopes",[]);v(this,"requiredOrScopesByOr",[]);q.util.initPartial(n,this)}static fromBinary(n,r){return new Gs().fromBinary(n,r)}static fromJson(n,r){return new Gs().fromJson(n,r)}static fromJsonString(n,r){return new Gs().fromJsonString(n,r)}static equals(n,r){return q.util.equals(Gs,n,r)}};v(Gs,"runtime",q),v(Gs,"typeName","wg.cosmo.node.v1.AuthorizationConfiguration"),v(Gs,"fields",q.util.newFieldList(()=>[{no:1,name:"requires_authentication",kind:"scalar",T:8},{no:2,name:"required_or_scopes",kind:"message",T:mc,repeated:!0},{no:3,name:"required_or_scopes_by_or",kind:"message",T:mc,repeated:!0}]));var jp=Gs,$s=class $s extends $e{constructor(n){super();v(this,"typeName","");v(this,"fieldName","");v(this,"argumentsConfiguration",[]);v(this,"authorizationConfiguration");v(this,"subscriptionFilterCondition");q.util.initPartial(n,this)}static fromBinary(n,r){return new $s().fromBinary(n,r)}static fromJson(n,r){return new $s().fromJson(n,r)}static fromJsonString(n,r){return new $s().fromJsonString(n,r)}static equals(n,r){return q.util.equals($s,n,r)}};v($s,"runtime",q),v($s,"typeName","wg.cosmo.node.v1.FieldConfiguration"),v($s,"fields",q.util.newFieldList(()=>[{no:1,name:"type_name",kind:"scalar",T:9},{no:2,name:"field_name",kind:"scalar",T:9},{no:3,name:"arguments_configuration",kind:"message",T:Vp,repeated:!0},{no:4,name:"authorization_configuration",kind:"message",T:jp},{no:5,name:"subscription_filter_condition",kind:"message",T:ou,opt:!0}]));var Kp=$s,Qs=class Qs extends $e{constructor(n){super();v(this,"typeName","");v(this,"renameTo","");q.util.initPartial(n,this)}static fromBinary(n,r){return new Qs().fromBinary(n,r)}static fromJson(n,r){return new Qs().fromJson(n,r)}static fromJsonString(n,r){return new Qs().fromJsonString(n,r)}static equals(n,r){return q.util.equals(Qs,n,r)}};v(Qs,"runtime",q),v(Qs,"typeName","wg.cosmo.node.v1.TypeConfiguration"),v(Qs,"fields",q.util.newFieldList(()=>[{no:1,name:"type_name",kind:"scalar",T:9},{no:2,name:"rename_to",kind:"scalar",T:9}]));var cb=Qs,Ys=class Ys extends $e{constructor(n){super();v(this,"typeName","");v(this,"fieldNames",[]);v(this,"externalFieldNames",[]);q.util.initPartial(n,this)}static fromBinary(n,r){return new Ys().fromBinary(n,r)}static fromJson(n,r){return new Ys().fromJson(n,r)}static fromJsonString(n,r){return new Ys().fromJsonString(n,r)}static equals(n,r){return q.util.equals(Ys,n,r)}};v(Ys,"runtime",q),v(Ys,"typeName","wg.cosmo.node.v1.TypeField"),v(Ys,"fields",q.util.newFieldList(()=>[{no:1,name:"type_name",kind:"scalar",T:9},{no:2,name:"field_names",kind:"scalar",T:9,repeated:!0},{no:3,name:"external_field_names",kind:"scalar",T:9,repeated:!0}]));var Ml=Ys,Js=class Js extends $e{constructor(n){super();v(this,"fieldName","");v(this,"typeName","");q.util.initPartial(n,this)}static fromBinary(n,r){return new Js().fromBinary(n,r)}static fromJson(n,r){return new Js().fromJson(n,r)}static fromJsonString(n,r){return new Js().fromJsonString(n,r)}static equals(n,r){return q.util.equals(Js,n,r)}};v(Js,"runtime",q),v(Js,"typeName","wg.cosmo.node.v1.FieldCoordinates"),v(Js,"fields",q.util.newFieldList(()=>[{no:1,name:"field_name",kind:"scalar",T:9},{no:2,name:"type_name",kind:"scalar",T:9}]));var Gp=Js,Hs=class Hs extends $e{constructor(n){super();v(this,"fieldCoordinatesPath",[]);v(this,"fieldPath",[]);q.util.initPartial(n,this)}static fromBinary(n,r){return new Hs().fromBinary(n,r)}static fromJson(n,r){return new Hs().fromJson(n,r)}static fromJsonString(n,r){return new Hs().fromJsonString(n,r)}static equals(n,r){return q.util.equals(Hs,n,r)}};v(Hs,"runtime",q),v(Hs,"typeName","wg.cosmo.node.v1.FieldSetCondition"),v(Hs,"fields",q.util.newFieldList(()=>[{no:1,name:"field_coordinates_path",kind:"message",T:Gp,repeated:!0},{no:2,name:"field_path",kind:"scalar",T:9,repeated:!0}]));var $p=Hs,zs=class zs extends $e{constructor(n){super();v(this,"typeName","");v(this,"fieldName","");v(this,"selectionSet","");v(this,"disableEntityResolver",!1);v(this,"conditions",[]);q.util.initPartial(n,this)}static fromBinary(n,r){return new zs().fromBinary(n,r)}static fromJson(n,r){return new zs().fromJson(n,r)}static fromJsonString(n,r){return new zs().fromJsonString(n,r)}static equals(n,r){return q.util.equals(zs,n,r)}};v(zs,"runtime",q),v(zs,"typeName","wg.cosmo.node.v1.RequiredField"),v(zs,"fields",q.util.newFieldList(()=>[{no:1,name:"type_name",kind:"scalar",T:9},{no:2,name:"field_name",kind:"scalar",T:9},{no:3,name:"selection_set",kind:"scalar",T:9},{no:4,name:"disable_entity_resolver",kind:"scalar",T:8},{no:5,name:"conditions",kind:"message",T:$p,repeated:!0}]));var dc=zs,Ws=class Ws extends $e{constructor(n){super();v(this,"interfaceTypeName","");v(this,"concreteTypeNames",[]);q.util.initPartial(n,this)}static fromBinary(n,r){return new Ws().fromBinary(n,r)}static fromJson(n,r){return new Ws().fromJson(n,r)}static fromJsonString(n,r){return new Ws().fromJsonString(n,r)}static equals(n,r){return q.util.equals(Ws,n,r)}};v(Ws,"runtime",q),v(Ws,"typeName","wg.cosmo.node.v1.EntityInterfaceConfiguration"),v(Ws,"fields",q.util.newFieldList(()=>[{no:1,name:"interface_type_name",kind:"scalar",T:9},{no:2,name:"concrete_type_names",kind:"scalar",T:9,repeated:!0}]));var xl=Ws,Xs=class Xs extends $e{constructor(n){super();v(this,"url");v(this,"method",fc.GET);v(this,"header",{});v(this,"body");v(this,"query",[]);v(this,"urlEncodeBody",!1);v(this,"mtls");v(this,"baseUrl");v(this,"path");v(this,"httpProxyUrl");q.util.initPartial(n,this)}static fromBinary(n,r){return new Xs().fromBinary(n,r)}static fromJson(n,r){return new Xs().fromJson(n,r)}static fromJsonString(n,r){return new Xs().fromJsonString(n,r)}static equals(n,r){return q.util.equals(Xs,n,r)}};v(Xs,"runtime",q),v(Xs,"typeName","wg.cosmo.node.v1.FetchConfiguration"),v(Xs,"fields",q.util.newFieldList(()=>[{no:1,name:"url",kind:"message",T:xr},{no:2,name:"method",kind:"enum",T:q.getEnumType(fc)},{no:3,name:"header",kind:"map",K:9,V:{kind:"message",T:mb}},{no:4,name:"body",kind:"message",T:xr},{no:5,name:"query",kind:"message",T:fb,repeated:!0},{no:7,name:"url_encode_body",kind:"scalar",T:8},{no:8,name:"mtls",kind:"message",T:Tb},{no:9,name:"base_url",kind:"message",T:xr},{no:10,name:"path",kind:"message",T:xr},{no:11,name:"http_proxy_url",kind:"message",T:xr,opt:!0}]));var lb=Xs,Zs=class Zs extends $e{constructor(n){super();v(this,"statusCode",Gn.zero);v(this,"typeName","");v(this,"injectStatusCodeIntoBody",!1);q.util.initPartial(n,this)}static fromBinary(n,r){return new Zs().fromBinary(n,r)}static fromJson(n,r){return new Zs().fromJson(n,r)}static fromJsonString(n,r){return new Zs().fromJsonString(n,r)}static equals(n,r){return q.util.equals(Zs,n,r)}};v(Zs,"runtime",q),v(Zs,"typeName","wg.cosmo.node.v1.StatusCodeTypeMapping"),v(Zs,"fields",q.util.newFieldList(()=>[{no:1,name:"status_code",kind:"scalar",T:3},{no:2,name:"type_name",kind:"scalar",T:9},{no:3,name:"inject_status_code_into_body",kind:"scalar",T:8}]));var xV=Zs,eo=class eo extends $e{constructor(n){super();v(this,"fetch");v(this,"subscription");v(this,"federation");v(this,"upstreamSchema");v(this,"customScalarTypeFields",[]);q.util.initPartial(n,this)}static fromBinary(n,r){return new eo().fromBinary(n,r)}static fromJson(n,r){return new eo().fromJson(n,r)}static fromJsonString(n,r){return new eo().fromJsonString(n,r)}static equals(n,r){return q.util.equals(eo,n,r)}};v(eo,"runtime",q),v(eo,"typeName","wg.cosmo.node.v1.DataSourceCustom_GraphQL"),v(eo,"fields",q.util.newFieldList(()=>[{no:1,name:"fetch",kind:"message",T:lb},{no:2,name:"subscription",kind:"message",T:Nb},{no:3,name:"federation",kind:"message",T:hb},{no:4,name:"upstream_schema",kind:"message",T:zp},{no:6,name:"custom_scalar_type_fields",kind:"message",T:Eb,repeated:!0}]));var Qp=eo,to=class to extends $e{constructor(n){super();v(this,"consumerName","");v(this,"streamName","");v(this,"consumerInactiveThreshold",0);q.util.initPartial(n,this)}static fromBinary(n,r){return new to().fromBinary(n,r)}static fromJson(n,r){return new to().fromJson(n,r)}static fromJsonString(n,r){return new to().fromJsonString(n,r)}static equals(n,r){return q.util.equals(to,n,r)}};v(to,"runtime",q),v(to,"typeName","wg.cosmo.node.v1.NatsStreamConfiguration"),v(to,"fields",q.util.newFieldList(()=>[{no:1,name:"consumer_name",kind:"scalar",T:9},{no:2,name:"stream_name",kind:"scalar",T:9},{no:3,name:"consumer_inactive_threshold",kind:"scalar",T:5}]));var Yp=to,no=class no extends $e{constructor(n){super();v(this,"engineEventConfiguration");v(this,"subjects",[]);v(this,"streamConfiguration");q.util.initPartial(n,this)}static fromBinary(n,r){return new no().fromBinary(n,r)}static fromJson(n,r){return new no().fromJson(n,r)}static fromJsonString(n,r){return new no().fromJsonString(n,r)}static equals(n,r){return q.util.equals(no,n,r)}};v(no,"runtime",q),v(no,"typeName","wg.cosmo.node.v1.NatsEventConfiguration"),v(no,"fields",q.util.newFieldList(()=>[{no:1,name:"engine_event_configuration",kind:"message",T:Tc},{no:2,name:"subjects",kind:"scalar",T:9,repeated:!0},{no:3,name:"stream_configuration",kind:"message",T:Yp}]));var Jp=no,ro=class ro extends $e{constructor(n){super();v(this,"engineEventConfiguration");v(this,"topics",[]);q.util.initPartial(n,this)}static fromBinary(n,r){return new ro().fromBinary(n,r)}static fromJson(n,r){return new ro().fromJson(n,r)}static fromJsonString(n,r){return new ro().fromJsonString(n,r)}static equals(n,r){return q.util.equals(ro,n,r)}};v(ro,"runtime",q),v(ro,"typeName","wg.cosmo.node.v1.KafkaEventConfiguration"),v(ro,"fields",q.util.newFieldList(()=>[{no:1,name:"engine_event_configuration",kind:"message",T:Tc},{no:2,name:"topics",kind:"scalar",T:9,repeated:!0}]));var Hp=ro,io=class io extends $e{constructor(n){super();v(this,"providerId","");v(this,"type",So.PUBLISH);v(this,"typeName","");v(this,"fieldName","");q.util.initPartial(n,this)}static fromBinary(n,r){return new io().fromBinary(n,r)}static fromJson(n,r){return new io().fromJson(n,r)}static fromJsonString(n,r){return new io().fromJsonString(n,r)}static equals(n,r){return q.util.equals(io,n,r)}};v(io,"runtime",q),v(io,"typeName","wg.cosmo.node.v1.EngineEventConfiguration"),v(io,"fields",q.util.newFieldList(()=>[{no:1,name:"provider_id",kind:"scalar",T:9},{no:2,name:"type",kind:"enum",T:q.getEnumType(So)},{no:3,name:"type_name",kind:"scalar",T:9},{no:4,name:"field_name",kind:"scalar",T:9}]));var Tc=io,ao=class ao extends $e{constructor(n){super();v(this,"nats",[]);v(this,"kafka",[]);q.util.initPartial(n,this)}static fromBinary(n,r){return new ao().fromBinary(n,r)}static fromJson(n,r){return new ao().fromJson(n,r)}static fromJsonString(n,r){return new ao().fromJsonString(n,r)}static equals(n,r){return q.util.equals(ao,n,r)}};v(ao,"runtime",q),v(ao,"typeName","wg.cosmo.node.v1.DataSourceCustomEvents"),v(ao,"fields",q.util.newFieldList(()=>[{no:1,name:"nats",kind:"message",T:Jp,repeated:!0},{no:2,name:"kafka",kind:"message",T:Hp,repeated:!0}]));var Nc=ao,so=class so extends $e{constructor(n){super();v(this,"data");q.util.initPartial(n,this)}static fromBinary(n,r){return new so().fromBinary(n,r)}static fromJson(n,r){return new so().fromJson(n,r)}static fromJsonString(n,r){return new so().fromJsonString(n,r)}static equals(n,r){return q.util.equals(so,n,r)}};v(so,"runtime",q),v(so,"typeName","wg.cosmo.node.v1.DataSourceCustom_Static"),v(so,"fields",q.util.newFieldList(()=>[{no:1,name:"data",kind:"message",T:xr}]));var db=so,oo=class oo extends $e{constructor(n){super();v(this,"kind",su.STATIC_CONFIGURATION_VARIABLE);v(this,"staticVariableContent","");v(this,"environmentVariableName","");v(this,"environmentVariableDefaultValue","");v(this,"placeholderVariableName","");q.util.initPartial(n,this)}static fromBinary(n,r){return new oo().fromBinary(n,r)}static fromJson(n,r){return new oo().fromJson(n,r)}static fromJsonString(n,r){return new oo().fromJsonString(n,r)}static equals(n,r){return q.util.equals(oo,n,r)}};v(oo,"runtime",q),v(oo,"typeName","wg.cosmo.node.v1.ConfigurationVariable"),v(oo,"fields",q.util.newFieldList(()=>[{no:1,name:"kind",kind:"enum",T:q.getEnumType(su)},{no:2,name:"static_variable_content",kind:"scalar",T:9},{no:3,name:"environment_variable_name",kind:"scalar",T:9},{no:4,name:"environment_variable_default_value",kind:"scalar",T:9},{no:5,name:"placeholder_variable_name",kind:"scalar",T:9}]));var xr=oo,uo=class uo extends $e{constructor(n){super();v(this,"directiveName","");v(this,"renameTo","");q.util.initPartial(n,this)}static fromBinary(n,r){return new uo().fromBinary(n,r)}static fromJson(n,r){return new uo().fromJson(n,r)}static fromJsonString(n,r){return new uo().fromJsonString(n,r)}static equals(n,r){return q.util.equals(uo,n,r)}};v(uo,"runtime",q),v(uo,"typeName","wg.cosmo.node.v1.DirectiveConfiguration"),v(uo,"fields",q.util.newFieldList(()=>[{no:1,name:"directive_name",kind:"scalar",T:9},{no:2,name:"rename_to",kind:"scalar",T:9}]));var pb=uo,co=class co extends $e{constructor(n){super();v(this,"name","");v(this,"value","");q.util.initPartial(n,this)}static fromBinary(n,r){return new co().fromBinary(n,r)}static fromJson(n,r){return new co().fromJson(n,r)}static fromJsonString(n,r){return new co().fromJsonString(n,r)}static equals(n,r){return q.util.equals(co,n,r)}};v(co,"runtime",q),v(co,"typeName","wg.cosmo.node.v1.URLQueryConfiguration"),v(co,"fields",q.util.newFieldList(()=>[{no:1,name:"name",kind:"scalar",T:9},{no:2,name:"value",kind:"scalar",T:9}]));var fb=co,lo=class lo extends $e{constructor(n){super();v(this,"values",[]);q.util.initPartial(n,this)}static fromBinary(n,r){return new lo().fromBinary(n,r)}static fromJson(n,r){return new lo().fromJson(n,r)}static fromJsonString(n,r){return new lo().fromJsonString(n,r)}static equals(n,r){return q.util.equals(lo,n,r)}};v(lo,"runtime",q),v(lo,"typeName","wg.cosmo.node.v1.HTTPHeader"),v(lo,"fields",q.util.newFieldList(()=>[{no:1,name:"values",kind:"message",T:xr,repeated:!0}]));var mb=lo,po=class po extends $e{constructor(n){super();v(this,"key");v(this,"cert");v(this,"insecureSkipVerify",!1);q.util.initPartial(n,this)}static fromBinary(n,r){return new po().fromBinary(n,r)}static fromJson(n,r){return new po().fromJson(n,r)}static fromJsonString(n,r){return new po().fromJsonString(n,r)}static equals(n,r){return q.util.equals(po,n,r)}};v(po,"runtime",q),v(po,"typeName","wg.cosmo.node.v1.MTLSConfiguration"),v(po,"fields",q.util.newFieldList(()=>[{no:1,name:"key",kind:"message",T:xr},{no:2,name:"cert",kind:"message",T:xr},{no:3,name:"insecureSkipVerify",kind:"scalar",T:8}]));var Tb=po,fo=class fo extends $e{constructor(n){super();v(this,"enabled",!1);v(this,"url");v(this,"useSSE");v(this,"protocol");v(this,"websocketSubprotocol");q.util.initPartial(n,this)}static fromBinary(n,r){return new fo().fromBinary(n,r)}static fromJson(n,r){return new fo().fromJson(n,r)}static fromJsonString(n,r){return new fo().fromJsonString(n,r)}static equals(n,r){return q.util.equals(fo,n,r)}};v(fo,"runtime",q),v(fo,"typeName","wg.cosmo.node.v1.GraphQLSubscriptionConfiguration"),v(fo,"fields",q.util.newFieldList(()=>[{no:1,name:"enabled",kind:"scalar",T:8},{no:2,name:"url",kind:"message",T:xr},{no:3,name:"useSSE",kind:"scalar",T:8,opt:!0},{no:4,name:"protocol",kind:"enum",T:q.getEnumType(As),opt:!0},{no:5,name:"websocketSubprotocol",kind:"enum",T:q.getEnumType(Rs),opt:!0}]));var Nb=fo,mo=class mo extends $e{constructor(n){super();v(this,"enabled",!1);v(this,"serviceSdl","");q.util.initPartial(n,this)}static fromBinary(n,r){return new mo().fromBinary(n,r)}static fromJson(n,r){return new mo().fromJson(n,r)}static fromJsonString(n,r){return new mo().fromJsonString(n,r)}static equals(n,r){return q.util.equals(mo,n,r)}};v(mo,"runtime",q),v(mo,"typeName","wg.cosmo.node.v1.GraphQLFederationConfiguration"),v(mo,"fields",q.util.newFieldList(()=>[{no:1,name:"enabled",kind:"scalar",T:8},{no:2,name:"serviceSdl",kind:"scalar",T:9}]));var hb=mo,To=class To extends $e{constructor(n){super();v(this,"key","");q.util.initPartial(n,this)}static fromBinary(n,r){return new To().fromBinary(n,r)}static fromJson(n,r){return new To().fromJson(n,r)}static fromJsonString(n,r){return new To().fromJsonString(n,r)}static equals(n,r){return q.util.equals(To,n,r)}};v(To,"runtime",q),v(To,"typeName","wg.cosmo.node.v1.InternedString"),v(To,"fields",q.util.newFieldList(()=>[{no:1,name:"key",kind:"scalar",T:9}]));var zp=To,No=class No extends $e{constructor(n){super();v(this,"typeName","");v(this,"fieldName","");q.util.initPartial(n,this)}static fromBinary(n,r){return new No().fromBinary(n,r)}static fromJson(n,r){return new No().fromJson(n,r)}static fromJsonString(n,r){return new No().fromJsonString(n,r)}static equals(n,r){return q.util.equals(No,n,r)}};v(No,"runtime",q),v(No,"typeName","wg.cosmo.node.v1.SingleTypeField"),v(No,"fields",q.util.newFieldList(()=>[{no:1,name:"type_name",kind:"scalar",T:9},{no:2,name:"field_name",kind:"scalar",T:9}]));var Eb=No,ho=class ho extends $e{constructor(n){super();v(this,"fieldPath",[]);v(this,"json","");q.util.initPartial(n,this)}static fromBinary(n,r){return new ho().fromBinary(n,r)}static fromJson(n,r){return new ho().fromJson(n,r)}static fromJsonString(n,r){return new ho().fromJsonString(n,r)}static equals(n,r){return q.util.equals(ho,n,r)}};v(ho,"runtime",q),v(ho,"typeName","wg.cosmo.node.v1.SubscriptionFieldCondition"),v(ho,"fields",q.util.newFieldList(()=>[{no:1,name:"field_path",kind:"scalar",T:9,repeated:!0},{no:2,name:"json",kind:"scalar",T:9}]));var Wp=ho,Qi=class Qi extends $e{constructor(n){super();v(this,"and",[]);v(this,"in");v(this,"not");v(this,"or",[]);q.util.initPartial(n,this)}static fromBinary(n,r){return new Qi().fromBinary(n,r)}static fromJson(n,r){return new Qi().fromJson(n,r)}static fromJsonString(n,r){return new Qi().fromJsonString(n,r)}static equals(n,r){return q.util.equals(Qi,n,r)}};v(Qi,"runtime",q),v(Qi,"typeName","wg.cosmo.node.v1.SubscriptionFilterCondition"),v(Qi,"fields",q.util.newFieldList(()=>[{no:1,name:"and",kind:"message",T:Qi,repeated:!0},{no:2,name:"in",kind:"message",T:Wp,opt:!0},{no:3,name:"not",kind:"message",T:Qi,opt:!0},{no:4,name:"or",kind:"message",T:Qi,repeated:!0}]));var ou=Qi,Eo=class Eo extends $e{constructor(n){super();v(this,"operations",[]);q.util.initPartial(n,this)}static fromBinary(n,r){return new Eo().fromBinary(n,r)}static fromJson(n,r){return new Eo().fromJson(n,r)}static fromJsonString(n,r){return new Eo().fromJsonString(n,r)}static equals(n,r){return q.util.equals(Eo,n,r)}};v(Eo,"runtime",q),v(Eo,"typeName","wg.cosmo.node.v1.CacheWarmerOperations"),v(Eo,"fields",q.util.newFieldList(()=>[{no:1,name:"operations",kind:"message",T:yb,repeated:!0}]));var qV=Eo,yo=class yo extends $e{constructor(n){super();v(this,"request");v(this,"client");q.util.initPartial(n,this)}static fromBinary(n,r){return new yo().fromBinary(n,r)}static fromJson(n,r){return new yo().fromJson(n,r)}static fromJsonString(n,r){return new yo().fromJsonString(n,r)}static equals(n,r){return q.util.equals(yo,n,r)}};v(yo,"runtime",q),v(yo,"typeName","wg.cosmo.node.v1.Operation"),v(yo,"fields",q.util.newFieldList(()=>[{no:1,name:"request",kind:"message",T:Ib},{no:2,name:"client",kind:"message",T:vb}]));var yb=yo,Io=class Io extends $e{constructor(n){super();v(this,"operationName","");v(this,"query","");v(this,"extensions");q.util.initPartial(n,this)}static fromBinary(n,r){return new Io().fromBinary(n,r)}static fromJson(n,r){return new Io().fromJson(n,r)}static fromJsonString(n,r){return new Io().fromJsonString(n,r)}static equals(n,r){return q.util.equals(Io,n,r)}};v(Io,"runtime",q),v(Io,"typeName","wg.cosmo.node.v1.OperationRequest"),v(Io,"fields",q.util.newFieldList(()=>[{no:1,name:"operation_name",kind:"scalar",T:9},{no:2,name:"query",kind:"scalar",T:9},{no:3,name:"extensions",kind:"message",T:gb}]));var Ib=Io,go=class go extends $e{constructor(n){super();v(this,"persistedQuery");q.util.initPartial(n,this)}static fromBinary(n,r){return new go().fromBinary(n,r)}static fromJson(n,r){return new go().fromJson(n,r)}static fromJsonString(n,r){return new go().fromJsonString(n,r)}static equals(n,r){return q.util.equals(go,n,r)}};v(go,"runtime",q),v(go,"typeName","wg.cosmo.node.v1.Extension"),v(go,"fields",q.util.newFieldList(()=>[{no:1,name:"persisted_query",kind:"message",T:_b}]));var gb=go,_o=class _o extends $e{constructor(n){super();v(this,"sha256Hash","");v(this,"version",0);q.util.initPartial(n,this)}static fromBinary(n,r){return new _o().fromBinary(n,r)}static fromJson(n,r){return new _o().fromJson(n,r)}static fromJsonString(n,r){return new _o().fromJsonString(n,r)}static equals(n,r){return q.util.equals(_o,n,r)}};v(_o,"runtime",q),v(_o,"typeName","wg.cosmo.node.v1.PersistedQuery"),v(_o,"fields",q.util.newFieldList(()=>[{no:1,name:"sha256_hash",kind:"scalar",T:9},{no:2,name:"version",kind:"scalar",T:5}]));var _b=_o,vo=class vo extends $e{constructor(n){super();v(this,"name","");v(this,"version","");q.util.initPartial(n,this)}static fromBinary(n,r){return new vo().fromBinary(n,r)}static fromJson(n,r){return new vo().fromJson(n,r)}static fromJsonString(n,r){return new vo().fromJsonString(n,r)}static equals(n,r){return q.util.equals(vo,n,r)}};v(vo,"runtime",q),v(vo,"typeName","wg.cosmo.node.v1.ClientInfo"),v(vo,"fields",q.util.newFieldList(()=>[{no:1,name:"name",kind:"scalar",T:9},{no:2,name:"version",kind:"scalar",T:9}]));var vb=vo;f();T();m();var jh=os(Th(),1);function qle(e){if(!e.conditions)return;let t=[];for(let n of e.conditions){let r=[];for(let i of n.fieldCoordinatesPath){let a=i.split(".");if(a.length!==2)throw new Error(`fatal: malformed conditional field coordinates "${i}" for field set "${e.selectionSet}".`);r.push(new Gp({fieldName:a[1],typeName:a[0]}))}t.push(new $p({fieldCoordinatesPath:r,fieldPath:n.fieldPath}))}return t}function Sb(e,t,n){if(e)for(let r of e){let i=qle(r);t.push(new dc(k(k({typeName:n,fieldName:r.fieldName,selectionSet:r.selectionSet},r.disableEntityResolver?{disableEntityResolver:!0}:{}),i?{conditions:i}:{})))}}function VV(e){switch(e){case"publish":return So.PUBLISH;case"request":return So.REQUEST;case"subscribe":return So.SUBSCRIBE}}function jV(e){var n;let t={rootNodes:[],childNodes:[],keys:[],provides:[],events:new Nc({nats:[],kafka:[]}),requires:[],entityInterfaces:[],interfaceObjects:[]};for(let r of e.values()){let i=r.typeName,a=[...r.fieldNames],o=new Ml({typeName:i,fieldNames:a});if(r.externalFieldNames&&r.externalFieldNames.size>0&&(o.externalFieldNames=[...r.externalFieldNames]),r.isRootNode?t.rootNodes.push(o):t.childNodes.push(o),r.entityInterfaceConcreteTypeNames){let p=new xl({interfaceTypeName:i,concreteTypeNames:[...r.entityInterfaceConcreteTypeNames]});r.isInterfaceObject?t.interfaceObjects.push(p):t.entityInterfaces.push(p)}Sb(r.keys,t.keys,i),Sb(r.provides,t.provides,i),Sb(r.requires,t.requires,i);let c=[],l=[];for(let p of(n=r.events)!=null?n:[])switch(p.providerType){case jh.PROVIDER_TYPE_KAFKA:{l.push(new Hp({engineEventConfiguration:new Tc({fieldName:p.fieldName,providerId:p.providerId,type:VV(p.type),typeName:i}),topics:p.topics}));break}case jh.PROVIDER_TYPE_NATS:{c.push(new Jp(k({engineEventConfiguration:new Tc({fieldName:p.fieldName,providerId:p.providerId,type:VV(p.type),typeName:i}),subjects:p.subjects},p.streamConfiguration?{streamConfiguration:new Yp({consumerInactiveThreshold:p.streamConfiguration.consumerInactiveThreshold,consumerName:p.streamConfiguration.consumerName,streamName:p.streamConfiguration.streamName})}:{})));break}default:throw new Error("Fatal: Unknown event provider.")}t.events.nats.push(...c),t.events.kafka.push(...l)}return t}function KV(e){var n,r;let t=[];for(let i of e){let a=i.argumentNames.map(N=>new Vp({name:N,sourceType:pc.FIELD_ARGUMENT})),o=new Kp({argumentsConfiguration:a,fieldName:i.fieldName,typeName:i.typeName}),c=((n=i.requiredScopes)==null?void 0:n.map(N=>new mc({requiredAndScopes:N})))||[],l=((r=i.requiredScopesByOR)==null?void 0:r.map(N=>new mc({requiredAndScopes:N})))||[],p=c.length>0;if((i.requiresAuthentication||p)&&(o.authorizationConfiguration=new jp({requiresAuthentication:i.requiresAuthentication||p,requiredOrScopes:c,requiredOrScopesByOr:l})),i.subscriptionFilterCondition){let N=new ou;Vh(N,i.subscriptionFilterCondition),o.subscriptionFilterCondition=N}t.push(o)}return t}function Vh(e,t){if(t.and!==void 0){let n=[];for(let r of t.and){let i=new ou;Vh(i,r),n.push(i)}e.and=n;return}if(t.in!==void 0){e.in=new Wp({fieldPath:t.in.fieldPath,json:JSON.stringify(t.in.values)});return}if(t.not!==void 0){e.not=new ou,Vh(e.not,t.not);return}if(t.or!==void 0){let n=[];for(let r of t.or){let i=new ou;Vh(i,r),n.push(i)}e.or=n;return}throw new Error("Fatal: Incoming SubscriptionCondition object was malformed.")}f();T();m();function Ob(e){return new Error(`Normalization failed to return a ${e}.`)}function GV(e){return new Error(`Invalid router compatibility version "${e}".`)}var Vle=(e,t)=>{let n=stringHash(t);return e.stringStorage[n]=t,new zp({key:n})},jle=e=>{switch(e){case"ws":return As.GRAPHQL_SUBSCRIPTION_PROTOCOL_WS;case"sse":return As.GRAPHQL_SUBSCRIPTION_PROTOCOL_SSE;case"sse_post":return As.GRAPHQL_SUBSCRIPTION_PROTOCOL_SSE_POST}throw new Error(`Unsupported subscription protocol '${e}'`)},Kle=e=>{switch(e){case"auto":return Rs.GRAPHQL_WEBSOCKET_SUBPROTOCOL_AUTO;case"graphql-ws":return Rs.GRAPHQL_WEBSOCKET_SUBPROTOCOL_WS;case"graphql-transport-ws":return Rs.GRAPHQL_WEBSOCKET_SUBPROTOCOL_TRANSPORT_WS}throw new Error(`Unsupported websocket subprotocol '${e}'`)},QV=function(e){if(!ql.ROUTER_COMPATIBILITY_VERSIONS.has(e.routerCompatibilityVersion))throw GV(e.routerCompatibilityVersion);let t=new kl({defaultFlushInterval:BigInt(500),datasourceConfigurations:[],fieldConfigurations:[],graphqlSchema:"",stringStorage:{},typeConfigurations:[]});for(let n of e.subgraphs){if(!n.configurationDataByTypeName)throw Ob("ConfigurationDataByTypeName");if(!n.schema)throw Ob("GraphQLSchema");let r=Vle(t,Zq((0,$V.lexicographicSortSchema)(n.schema))),{childNodes:i,entityInterfaces:a,events:o,interfaceObjects:c,keys:l,provides:p,requires:N,rootNodes:y}=jV(n.configurationDataByTypeName),g=jle(n.subscriptionProtocol||"ws"),_=Kle(n.websocketSubprotocol||"auto"),F,B,j;if(o.kafka.length>0||o.nats.length>0){F=au.PUBSUB,j=new Nc({kafka:o.kafka,nats:o.nats});let Z=le=>ql.ROOT_TYPE_NAMES.has(le.typeName),W=0,Ne=0;for(;W({id:n.id,name:n.name,routingUrl:n.url})),compatibilityVersion:`${e.routerCompatibilityVersion}:${ql.COMPOSITION_VERSION}`})};f();T();m();var Ec=os(Ae());function YV(e){let t;try{t=(0,Ec.parse)(e.schema)}catch(n){throw new Error(`could not parse schema for Graph ${e.name}: ${n}`)}return{definitions:t,name:e.name,url:e.url}}function Gle(e){let t=(0,hc.federateSubgraphs)(e.map(YV),hc.LATEST_ROUTER_COMPATIBILITY_VERSION);if(!t.success)throw new Error(`could not federate schema: ${t.errors.map(n=>n.message).join(", ")}`);return{fieldConfigurations:t.fieldConfigurations,sdl:(0,Ec.print)(t.federatedGraphAST)}}function $le(e){let t=(0,hc.federateSubgraphs)(e.map(YV),hc.LATEST_ROUTER_COMPATIBILITY_VERSION);if(!t.success)throw new Error(`could not federate schema: ${t.errors.map(r=>r.message).join(", ")}`);return QV({federatedClientSDL:(0,Ec.printSchema)(t.federatedGraphClientSchema),federatedSDL:(0,Ec.printSchema)(t.federatedGraphSchema),fieldConfigurations:t.fieldConfigurations,routerCompatibilityVersion:hc.LATEST_ROUTER_COMPATIBILITY_VERSION,schemaVersionId:"",subgraphs:e.map((r,i)=>{var l,p;let a=t.subgraphConfigBySubgraphName.get(r.name),o=a==null?void 0:a.schema,c=a==null?void 0:a.configurationDataByTypeName;return{id:`${i}`,name:r.name,url:jO(r.url),sdl:r.schema,subscriptionUrl:jO((l=r.subscription_url)!=null?l:r.url),subscriptionProtocol:(p=r.subscription_protocol)!=null?p:"ws",websocketSubprotocol:r.subscription_protocol==="ws"?r.websocketSubprotocol||"auto":void 0,schema:o,configurationDataByTypeName:c}})}).toJsonString()}return jf(Qle);})(); +`)+Ee+`return __p +}`;var Et=eA(function(){return jt(L,Ve+"return "+Ee).apply(e,k)});if(Et.source=Ee,$h(Et))throw Et;return Et}function C2(s){return Qt(s).toLowerCase()}function B2(s){return Qt(s).toUpperCase()}function U2(s,u,d){if(s=Qt(s),s&&(d||u===e))return cb(s);if(!s||!(u=si(u)))return s;var E=Yi(s),S=Yi(u),L=lb(E,S),k=db(E,S)+1;return Co(E,L,k).join("")}function k2(s,u,d){if(s=Qt(s),s&&(d||u===e))return s.slice(0,fb(s)+1);if(!s||!(u=si(u)))return s;var E=Yi(s),S=db(E,Yi(u))+1;return Co(E,0,S).join("")}function M2(s,u,d){if(s=Qt(s),s&&(d||u===e))return s.replace($E,"");if(!s||!(u=si(u)))return s;var E=Yi(s),S=lb(E,Yi(u));return Co(E,S).join("")}function x2(s,u){var d=et,E=X;if(vn(u)){var S="separator"in u?u.separator:S;d="length"in u?ft(u.length):d,E="omission"in u?si(u.omission):E}s=Qt(s);var L=s.length;if(vc(s)){var k=Yi(s);L=k.length}if(d>=L)return s;var j=d-Sc(E);if(j<1)return E;var H=k?Co(k,0,j).join(""):s.slice(0,j);if(S===e)return H+E;if(k&&(j+=H.length-j),Qh(S)){if(s.slice(j).search(S)){var fe,me=H;for(S.global||(S=uh(S.source,Qt(PD.exec(S))+"g")),S.lastIndex=0;fe=S.exec(me);)var Ee=fe.index;H=H.slice(0,Ee===e?j:Ee)}}else if(s.indexOf(si(S),j)!=j){var be=H.lastIndexOf(S);be>-1&&(H=H.slice(0,be))}return H+E}function q2(s){return s=Qt(s),s&&WV.test(s)?s.replace(AD,N1):s}var V2=Fc(function(s,u,d){return s+(d?" ":"")+u.toUpperCase()}),Hh=t0("toUpperCase");function Z0(s,u,d){return s=Qt(s),u=d?e:u,u===e?l1(s)?h1(s):t1(s):s.match(u)||[]}var eA=yt(function(s,u){try{return ii(s,e,u)}catch(d){return $h(d)?d:new ot(d)}}),j2=ns(function(s,u){return Ei(u,function(d){d=va(d),es(s,d,Kh(s[d],s))}),s});function K2(s){var u=s==null?0:s.length,d=ze();return s=u?hn(s,function(E){if(typeof E[1]!="function")throw new hi(i);return[d(E[0]),E[1]]}):[],yt(function(E){for(var S=-1;++Sdn)return[];var d=kn,E=Er(s,kn);u=ze(u),s-=kn;for(var S=ah(E,u);++d0||u<0)?new St(d):(s<0?d=d.takeRight(-s):s&&(d=d.drop(s)),u!==e&&(u=ft(u),d=u<0?d.dropRight(-u):d.take(u-s)),d)},St.prototype.takeRightWhile=function(s){return this.reverse().takeWhile(s).reverse()},St.prototype.toArray=function(){return this.take(kn)},ga(St.prototype,function(s,u){var d=/^(?:filter|find|map|reject)|While$/.test(u),E=/^(?:head|last)$/.test(u),S=R[E?"take"+(u=="last"?"Right":""):u],L=E||/^find/.test(u);S&&(R.prototype[u]=function(){var k=this.__wrapped__,j=E?[1]:arguments,H=k instanceof St,fe=j[0],me=H||lt(k),Ee=function(vt){var At=S.apply(R,bo([vt],j));return E&&be?At[0]:At};me&&d&&typeof fe=="function"&&fe.length!=1&&(H=me=!1);var be=this.__chain__,Ve=!!this.__actions__.length,We=L&&!be,Et=H&&!Ve;if(!L&&me){k=Et?k:new St(this);var Xe=s.apply(k,j);return Xe.__actions__.push({func:Cf,args:[Ee],thisArg:e}),new yi(Xe,be)}return We&&Et?s.apply(this,j):(Xe=this.thru(Ee),We?E?Xe.value()[0]:Xe.value():Xe)})}),Ei(["pop","push","shift","sort","splice","unshift"],function(s){var u=sf[s],d=/^(?:push|sort|unshift)$/.test(s)?"tap":"thru",E=/^(?:pop|shift)$/.test(s);R.prototype[s]=function(){var S=arguments;if(E&&!this.__chain__){var L=this.value();return u.apply(lt(L)?L:[],S)}return this[d](function(k){return u.apply(lt(k)?k:[],S)})}}),ga(St.prototype,function(s,u){var d=R[u];if(d){var E=d.name+"";Xt.call(bc,E)||(bc[E]=[]),bc[E].push({name:u,func:d})}}),bc[bf(e,U).name]=[{name:"wrapper",func:e}],St.prototype.clone=q1,St.prototype.reverse=V1,St.prototype.value=j1,R.prototype.at=E$,R.prototype.chain=h$,R.prototype.commit=y$,R.prototype.next=I$,R.prototype.plant=_$,R.prototype.reverse=v$,R.prototype.toJSON=R.prototype.valueOf=R.prototype.value=S$,R.prototype.first=R.prototype.head,Kl&&(R.prototype[Kl]=g$),R},Ro=y1();typeof define=="function"&&typeof define.amd=="object"&&define.amd?(sr._=Ro,define(function(){return Ro})):pu?((pu.exports=Ro)._=Ro,WE._=Ro):sr._=Ro}).call(wl)});var Fq=w(pc=>{"use strict";f();N();m();Object.defineProperty(pc,"__esModule",{value:!0});pc.FederationFactory=void 0;pc.federateSubgraphs=Qce;pc.federateSubgraphsWithContracts=Yce;pc.federateSubgraphsContract=Jce;var Re=Ae(),Dq=Jo(),Mr=Jr(),Fe=sa(),dc=EN(),bq=np(),ni=up(),dE=uO(),Kn=hs(),Kce=CO(),Gce=Dp(),Aq=bp(),ge=Rp(),$ce=kO(),Rq=Oq(),Ll=lE(),Oe=lr(),pE=nl(),he=Hr(),fE=class{constructor(t){v(this,"authorizationDataByParentTypeName");v(this,"concreteTypeNamesByAbstractTypeName");v(this,"clientDefinitions",[Kn.DEPRECATED_DEFINITION]);v(this,"currentSubgraphName","");v(this,"subgraphNamesByNamedTypeNameByFieldCoords",new Map);v(this,"entityDataByTypeName");v(this,"entityInterfaceFederationDataByTypeName");v(this,"errors",[]);v(this,"fieldConfigurationByFieldCoords",new Map);v(this,"fieldCoordsByNamedTypeName");v(this,"inaccessibleCoords",new Set);v(this,"inaccessibleRequiredInputValueErrorByCoords",new Map);v(this,"isMaxDepth",!1);v(this,"internalGraph");v(this,"internalSubgraphBySubgraphName");v(this,"invalidORScopesCoords",new Set);v(this,"isVersionTwo",!1);v(this,"namedInputValueTypeNames",new Set);v(this,"namedOutputTypeNames",new Set);v(this,"parentDefinitionDataByTypeName",new Map);v(this,"parentTagDataByTypeName",new Map);v(this,"coordsByNamedTypeName",new Map);v(this,"persistedDirectiveDefinitionByDirectiveName",new Map([[Oe.AUTHENTICATED,Kn.AUTHENTICATED_DEFINITION],[Oe.DEPRECATED,Kn.DEPRECATED_DEFINITION],[Oe.INACCESSIBLE,Kn.INACCESSIBLE_DEFINITION],[Oe.REQUIRES_SCOPES,Kn.REQUIRES_SCOPES_DEFINITION],[Oe.TAG,Kn.TAG_DEFINITION]]));v(this,"persistedDirectiveDefinitions",new Set([Oe.AUTHENTICATED,Oe.DEPRECATED,Oe.INACCESSIBLE,Oe.TAG,Oe.REQUIRES_SCOPES]));v(this,"potentialPersistedDirectiveDefinitionDataByDirectiveName",new Map);v(this,"routerDefinitions",[Kn.DEPRECATED_DEFINITION,Kn.TAG_DEFINITION]);v(this,"subscriptionFilterDataByFieldPath",new Map);v(this,"tagNamesByCoords",new Map);v(this,"warnings");this.authorizationDataByParentTypeName=t.authorizationDataByParentTypeName,this.concreteTypeNamesByAbstractTypeName=t.concreteTypeNamesByAbstractTypeName,this.entityDataByTypeName=t.entityDataByTypeName,this.entityInterfaceFederationDataByTypeName=t.entityInterfaceFederationDataByTypeName,this.fieldCoordsByNamedTypeName=t.fieldCoordsByNamedTypeName,this.internalSubgraphBySubgraphName=t.internalSubgraphBySubgraphName,this.internalGraph=t.internalGraph,this.warnings=t.warnings}getValidImplementedInterfaces(t){var o;let n=[];if(t.implementedInterfaceTypeNames.size<1)return n;let r=(0,ge.isNodeDataInaccessible)(t),i=new Map,a=new Map;for(let c of t.implementedInterfaceTypeNames){n.push((0,Mr.stringToNamedTypeNode)(c));let l=(0,he.getOrThrowError)(this.parentDefinitionDataByTypeName,c,Oe.PARENT_DEFINITION_DATA);if(l.kind!==Re.Kind.INTERFACE_TYPE_DEFINITION){a.set(l.name,(0,he.kindToTypeString)(l.kind));continue}let p={invalidFieldImplementations:new Map,unimplementedFields:[]},T=!1;for(let[y,g]of l.fieldDataByFieldName){let _=!1,F=t.fieldDataByFieldName.get(y);if(!F){T=!0,p.unimplementedFields.push(y);continue}let U={invalidAdditionalArguments:new Set,invalidImplementedArguments:[],isInaccessible:!1,originalResponseType:(0,dE.printTypeNode)(g.node.type),unimplementedArguments:new Set};(0,ge.isTypeValidImplementation)(g.node.type,F.node.type,this.concreteTypeNamesByAbstractTypeName)||(T=!0,_=!0,U.implementedResponseType=(0,dE.printTypeNode)(F.node.type));let K=new Set;for(let[J,ee]of g.argumentDataByArgumentName){let W=ee.node;K.add(J);let Te=(o=F.argumentDataByArgumentName.get(J))==null?void 0:o.node;if(!Te){T=!0,_=!0,U.unimplementedArguments.add(J);continue}let de=(0,dE.printTypeNode)(Te.type),we=(0,dE.printTypeNode)(W.type);we!==de&&(T=!0,_=!0,U.invalidImplementedArguments.push({actualType:de,argumentName:J,expectedType:we}))}for(let[J,ee]of F.argumentDataByArgumentName){let W=ee.node;K.has(J)||W.type.kind===Re.Kind.NON_NULL_TYPE&&(T=!0,_=!0,U.invalidAdditionalArguments.add(J))}!r&&F.isInaccessible&&!g.isInaccessible&&(T=!0,_=!0,U.isInaccessible=!0),_&&p.invalidFieldImplementations.set(y,U)}T&&i.set(c,p)}return a.size>0&&this.errors.push((0,Fe.invalidImplementedTypeError)(t.name,a)),i.size>0&&this.errors.push((0,Fe.invalidInterfaceImplementationError)(t.node.name.value,(0,he.kindToTypeString)(t.kind),i)),n}addValidPrimaryKeyTargetsToEntityData(t){var T;let n=this.entityDataByTypeName.get(t);if(!n)return;let r=(0,he.getOrThrowError)(this.internalSubgraphBySubgraphName,this.currentSubgraphName,"internalSubgraphBySubgraphName"),i=r.parentDefinitionDataByTypeName,a=i.get(n.typeName);if(!a||a.kind!==Re.Kind.OBJECT_TYPE_DEFINITION)throw(0,Fe.incompatibleParentKindFatalError)(n.typeName,Re.Kind.OBJECT_TYPE_DEFINITION,(a==null?void 0:a.kind)||Re.Kind.NULL);let o=(0,he.getOrThrowError)(r.configurationDataByTypeName,n.typeName,"internalSubgraph.configurationDataByTypeName"),c=[],l=this.internalGraph.nodeByNodeName.get(`${this.currentSubgraphName}.${n.typeName}`);(0,dc.validateImplicitFieldSets)({conditionalFieldDataByCoords:r.conditionalFieldDataByCoordinates,currentSubgraphName:this.currentSubgraphName,entityData:n,implicitKeys:c,objectData:a,parentDefinitionDataByTypeName:i,graphNode:l});for(let[y,g]of this.entityInterfaceFederationDataByTypeName){if(!((T=g.concreteTypeNames)!=null&&T.has(n.typeName)))continue;let _=this.entityDataByTypeName.get(y);_&&(0,dc.validateImplicitFieldSets)({conditionalFieldDataByCoords:r.conditionalFieldDataByCoordinates,currentSubgraphName:this.currentSubgraphName,entityData:_,implicitKeys:c,objectData:a,parentDefinitionDataByTypeName:i,graphNode:l})}if(c.length<1)return;if(!o.keys||o.keys.length<1){o.isRootNode=!0,o.keys=c;return}let p=new Set(o.keys.map(y=>y.selectionSet));for(let y of c)p.has(y.selectionSet)||(o.keys.push(y),p.add(y.selectionSet))}addValidPrimaryKeyTargetsFromInterfaceObject(t,n,r,i){let a=t.parentDefinitionDataByTypeName,o=a.get(n);if(!o||!(0,ge.isParentDataCompositeOutputType)(o))throw(0,Fe.incompatibleParentKindFatalError)(n,Re.Kind.INTERFACE_TYPE_DEFINITION,(o==null?void 0:o.kind)||Re.Kind.NULL);let c=(0,he.getOrThrowError)(t.configurationDataByTypeName,r.typeName,"internalSubgraph.configurationDataByTypeName"),l=[];if((0,dc.validateImplicitFieldSets)({conditionalFieldDataByCoords:t.conditionalFieldDataByCoordinates,currentSubgraphName:t.name,entityData:r,implicitKeys:l,objectData:o,parentDefinitionDataByTypeName:a,graphNode:i}),l.length<1)return;if(!c.keys||c.keys.length<1){c.isRootNode=!0,c.keys=l;return}let p=new Set(c.keys.map(T=>T.selectionSet));for(let T of l)p.has(T.selectionSet)||(c.keys.push(T),p.add(T.selectionSet))}getEnumValueMergeMethod(t){return this.namedInputValueTypeNames.has(t)?this.namedOutputTypeNames.has(t)?ge.MergeMethod.CONSISTENT:ge.MergeMethod.INTERSECTION:ge.MergeMethod.UNION}generateTagData(){for(let[t,n]of this.tagNamesByCoords){let r=t.split(".");if(r.length<1)continue;let i=(0,he.getValueOrDefault)(this.parentTagDataByTypeName,r[0],()=>(0,dc.newParentTagData)(r[0]));switch(r.length){case 1:for(let l of n)i.tagNames.add(l);break;case 2:let a=(0,he.getValueOrDefault)(i.childTagDataByChildName,r[1],()=>(0,dc.newChildTagData)(r[1]));for(let l of n)a.tagNames.add(l);break;case 3:let o=(0,he.getValueOrDefault)(i.childTagDataByChildName,r[1],()=>(0,dc.newChildTagData)(r[1])),c=(0,he.getValueOrDefault)(o.tagNamesByArgumentName,r[2],()=>new Set);for(let l of n)c.add(l);break;default:break}}}upsertEnumValueData(t,n,r){let i=t.get(n.name),a=i||this.copyEnumValueData(n);(0,ge.extractPersistedDirectives)(a.persistedDirectivesData,n.directivesByDirectiveName,this.persistedDirectiveDefinitionByDirectiveName);let o=(0,ge.isNodeDataInaccessible)(n);if((r||o)&&this.inaccessibleCoords.add(a.federatedCoords),this.recordTagNamesByCoords(a,a.federatedCoords),!i){t.set(a.name,a);return}a.appearances+=1,(0,he.addNewObjectValueMapEntries)(n.configureDescriptionDataBySubgraphName,a.configureDescriptionDataBySubgraphName),(0,ge.setLongestDescription)(a,n),(0,he.addIterableValuesToSet)(n.subgraphNames,a.subgraphNames)}upsertInputValueData(t,n,r,i){let a=t.get(n.name),o=a||this.copyInputValueData(n);if((0,ge.extractPersistedDirectives)(o.persistedDirectivesData,n.directivesByDirectiveName,this.persistedDirectiveDefinitionByDirectiveName),this.recordTagNamesByCoords(o,`${r}.${o.name}`),this.namedInputValueTypeNames.add(o.namedTypeName),(0,he.getValueOrDefault)(this.coordsByNamedTypeName,o.namedTypeName,()=>new Set).add(o.federatedCoords),!a){t.set(o.name,o);return}(0,he.addNewObjectValueMapEntries)(n.configureDescriptionDataBySubgraphName,o.configureDescriptionDataBySubgraphName),(0,ge.setLongestDescription)(o,n),(0,he.addIterableValuesToSet)(n.requiredSubgraphNames,o.requiredSubgraphNames),(0,he.addIterableValuesToSet)(n.subgraphNames,o.subgraphNames),this.handleInputValueInaccessibility(i,o,r);let{typeErrors:c,typeNode:l}=(0,Ll.getMostRestrictiveMergedTypeNode)(o.type,n.type,o.originalCoords,this.errors);if(l)o.type=l;else{if(!c||c.length<2)throw(0,Fe.fieldTypeMergeFatalError)(o.name);a.isArgument?this.errors.push((0,Fe.incompatibleArgumentTypesError)(o.name,o.federatedCoords,c[0],c[1])):this.errors.push((0,Fe.incompatibleChildTypesError)(o.federatedCoords,c[0],c[1]))}(0,ge.compareAndValidateInputValueDefaultValues)(o,n,this.errors)}handleInputValueInaccessibility(t,n,r){if(t){this.inaccessibleRequiredInputValueErrorByCoords.delete(n.federatedCoords),this.inaccessibleCoords.add(n.federatedCoords);return}if((0,ge.isNodeDataInaccessible)(n)){if((0,ge.isTypeRequired)(n.type)){this.inaccessibleRequiredInputValueErrorByCoords.set(n.federatedCoords,(0,Fe.inaccessibleRequiredInputValueError)(n,r));return}this.inaccessibleCoords.add(n.federatedCoords)}}handleSubscriptionFilterDirective(t,n){let r=t.directivesByDirectiveName.get(Oe.SUBSCRIPTION_FILTER);if(!r)return;let i=(0,he.getSingleSetEntry)(t.subgraphNames);if(i===void 0){this.errors.push((0,Fe.unknownFieldSubgraphNameError)(t.federatedCoords));return}this.subscriptionFilterDataByFieldPath.set(t.federatedCoords,{directive:r[0],fieldData:n||t,directiveSubgraphName:i})}federateOutputType({current:t,other:n,coords:r,mostRestrictive:i}){n=(0,Dq.getMutableTypeNode)(n,r,this.errors);let a={kind:t.kind},o=Ll.DivergentType.NONE,c=a;for(let l=0;lnew Set))}upsertFieldData(t,n,r){let i=t.get(n.name),a=i||this.copyFieldData(n,r||(0,ge.isNodeDataInaccessible)(n));(0,he.getValueOrDefault)(this.coordsByNamedTypeName,n.namedTypeName,()=>new Set).add(a.federatedCoords),this.namedOutputTypeNames.add(n.namedTypeName),this.handleSubscriptionFilterDirective(n,a),(0,ge.extractPersistedDirectives)(a.persistedDirectivesData,n.directivesByDirectiveName,this.persistedDirectiveDefinitionByDirectiveName);let o=r||(0,ge.isNodeDataInaccessible)(a);if(o&&this.inaccessibleCoords.add(a.federatedCoords),this.recordTagNamesByCoords(a,a.federatedCoords),!i){t.set(a.name,a);return}let c=this.federateOutputType({current:a.type,other:n.type,coords:a.federatedCoords,mostRestrictive:!1});if(c.success)if(a.type=c.typeNode,a.namedTypeName!==n.namedTypeName){let l=(0,he.getValueOrDefault)(this.subgraphNamesByNamedTypeNameByFieldCoords,a.federatedCoords,()=>new Map),p=(0,he.getValueOrDefault)(l,a.namedTypeName,()=>new Set);if(p.size<1)for(let T of a.subgraphNames)n.subgraphNames.has(T)||p.add(T);(0,he.addIterableValuesToSet)(n.subgraphNames,(0,he.getValueOrDefault)(l,n.namedTypeName,()=>new Set))}else this.addSubgraphNameToExistingFieldNamedTypeDisparity(n);for(let l of n.argumentDataByArgumentName.values())this.upsertInputValueData(a.argumentDataByArgumentName,l,a.federatedCoords,o);(0,he.addNewObjectValueMapEntries)(n.configureDescriptionDataBySubgraphName,i.configureDescriptionDataBySubgraphName),(0,ge.setLongestDescription)(a,n),a.isInaccessible||(a.isInaccessible=n.isInaccessible),(0,he.addNewObjectValueMapEntries)(n.externalFieldDataBySubgraphName,a.externalFieldDataBySubgraphName),(0,he.addMapEntries)(n.isShareableBySubgraphName,a.isShareableBySubgraphName),(0,he.addIterableValuesToSet)(n.subgraphNames,a.subgraphNames)}getClientSchemaUnionMembers(t){let n=[];for(let[r,i]of t.memberByMemberTypeName)this.inaccessibleCoords.has(r)||n.push(i);return n}recordTagNamesByCoords(t,n){let r=n||t.name;if(t.persistedDirectivesData.tagDirectiveByName.size<1)return;let i=(0,he.getValueOrDefault)(this.tagNamesByCoords,r,()=>new Set);for(let a of t.persistedDirectivesData.tagDirectiveByName.keys())i.add(a)}copyMutualParentDefinitionData(t){return{configureDescriptionDataBySubgraphName:(0,he.copyObjectValueMap)(t.configureDescriptionDataBySubgraphName),directivesByDirectiveName:(0,he.copyArrayValueMap)(t.directivesByDirectiveName),extensionType:t.extensionType,name:t.name,persistedDirectivesData:(0,ge.extractPersistedDirectives)((0,ge.newPersistedDirectivesData)(),t.directivesByDirectiveName,this.persistedDirectiveDefinitionByDirectiveName),description:(0,ge.getInitialFederatedDescription)(t)}}copyEnumValueData(t){return{appearances:t.appearances,configureDescriptionDataBySubgraphName:(0,he.copyObjectValueMap)(t.configureDescriptionDataBySubgraphName),federatedCoords:t.federatedCoords,directivesByDirectiveName:(0,he.copyArrayValueMap)(t.directivesByDirectiveName),kind:t.kind,name:t.name,node:{directives:[],kind:t.kind,name:(0,Mr.stringToNameNode)(t.name)},parentTypeName:t.parentTypeName,persistedDirectivesData:(0,ge.extractPersistedDirectives)((0,ge.newPersistedDirectivesData)(),t.directivesByDirectiveName,this.persistedDirectiveDefinitionByDirectiveName),subgraphNames:new Set(t.subgraphNames),description:(0,ge.getInitialFederatedDescription)(t)}}copyInputValueData(t){return{configureDescriptionDataBySubgraphName:(0,he.copyObjectValueMap)(t.configureDescriptionDataBySubgraphName),directivesByDirectiveName:(0,he.copyArrayValueMap)(t.directivesByDirectiveName),includeDefaultValue:t.includeDefaultValue,isArgument:t.isArgument,kind:t.kind,name:t.name,namedTypeName:t.namedTypeName,node:{directives:[],kind:Re.Kind.INPUT_VALUE_DEFINITION,name:(0,Mr.stringToNameNode)(t.name),type:t.type},originalCoords:t.originalCoords,persistedDirectivesData:(0,ge.extractPersistedDirectives)((0,ge.newPersistedDirectivesData)(),t.directivesByDirectiveName,this.persistedDirectiveDefinitionByDirectiveName),federatedCoords:t.federatedCoords,requiredSubgraphNames:new Set(t.requiredSubgraphNames),subgraphNames:new Set(t.subgraphNames),type:t.type,defaultValue:t.defaultValue,description:(0,ge.getInitialFederatedDescription)(t)}}copyInputValueDataByValueName(t,n,r){let i=new Map;for(let[a,o]of t){let c=this.copyInputValueData(o);this.handleInputValueInaccessibility(n,c,r),(0,he.getValueOrDefault)(this.coordsByNamedTypeName,c.namedTypeName,()=>new Set).add(c.federatedCoords),this.namedInputValueTypeNames.add(c.namedTypeName),this.recordTagNamesByCoords(c,`${r}.${o.name}`),i.set(a,c)}return i}copyFieldData(t,n){return{argumentDataByArgumentName:this.copyInputValueDataByValueName(t.argumentDataByArgumentName,n,t.federatedCoords),configureDescriptionDataBySubgraphName:(0,he.copyObjectValueMap)(t.configureDescriptionDataBySubgraphName),directivesByDirectiveName:(0,he.copyArrayValueMap)(t.directivesByDirectiveName),externalFieldDataBySubgraphName:(0,he.copyObjectValueMap)(t.externalFieldDataBySubgraphName),federatedCoords:t.federatedCoords,isInaccessible:t.isInaccessible,isShareableBySubgraphName:new Map(t.isShareableBySubgraphName),kind:t.kind,name:t.name,namedTypeName:t.namedTypeName,node:{arguments:[],directives:[],kind:t.kind,name:(0,Mr.stringToNameNode)(t.name),type:t.type},originalParentTypeName:t.originalParentTypeName,persistedDirectivesData:(0,ge.extractPersistedDirectives)((0,ge.newPersistedDirectivesData)(),t.directivesByDirectiveName,this.persistedDirectiveDefinitionByDirectiveName),renamedParentTypeName:t.renamedParentTypeName,subgraphNames:new Set(t.subgraphNames),type:t.type,description:(0,ge.getInitialFederatedDescription)(t)}}copyEnumValueDataByValueName(t,n){let r=new Map;for(let[i,a]of t){let o=this.copyEnumValueData(a);this.recordTagNamesByCoords(o,o.federatedCoords),(n||(0,ge.isNodeDataInaccessible)(o))&&this.inaccessibleCoords.add(o.federatedCoords),r.set(i,o)}return r}copyFieldDataByFieldName(t,n){let r=new Map;for(let[i,a]of t){let o=n||(0,ge.isNodeDataInaccessible)(a),c=this.copyFieldData(a,o);this.handleSubscriptionFilterDirective(c),(0,he.getValueOrDefault)(this.coordsByNamedTypeName,c.namedTypeName,()=>new Set).add(c.federatedCoords),this.namedOutputTypeNames.add(c.namedTypeName),this.recordTagNamesByCoords(c,c.federatedCoords),o&&this.inaccessibleCoords.add(c.federatedCoords),r.set(i,c)}return r}copyParentDefinitionData(t){let n=this.copyMutualParentDefinitionData(t);switch(t.kind){case Re.Kind.ENUM_TYPE_DEFINITION:return Q(M({},n),{appearances:t.appearances,enumValueDataByValueName:this.copyEnumValueDataByValueName(t.enumValueDataByValueName,t.isInaccessible),isInaccessible:t.isInaccessible,kind:t.kind,node:{kind:t.kind,name:(0,Mr.stringToNameNode)(t.name)},subgraphNames:new Set(t.subgraphNames)});case Re.Kind.INPUT_OBJECT_TYPE_DEFINITION:return Q(M({},n),{inputValueDataByValueName:this.copyInputValueDataByValueName(t.inputValueDataByValueName,t.isInaccessible,t.name),isInaccessible:t.isInaccessible,kind:t.kind,node:{kind:t.kind,name:(0,Mr.stringToNameNode)(t.name)},subgraphNames:new Set(t.subgraphNames)});case Re.Kind.INTERFACE_TYPE_DEFINITION:return Q(M({},n),{fieldDataByFieldName:this.copyFieldDataByFieldName(t.fieldDataByFieldName,t.isInaccessible),implementedInterfaceTypeNames:new Set(t.implementedInterfaceTypeNames),isEntity:t.isEntity,isInaccessible:t.isInaccessible,kind:t.kind,node:{kind:t.kind,name:(0,Mr.stringToNameNode)(t.name)},subgraphNames:new Set(t.subgraphNames)});case Re.Kind.OBJECT_TYPE_DEFINITION:return Q(M({},n),{fieldDataByFieldName:this.copyFieldDataByFieldName(t.fieldDataByFieldName,t.isInaccessible),implementedInterfaceTypeNames:new Set(t.implementedInterfaceTypeNames),isEntity:t.isEntity,isInaccessible:t.isInaccessible,isRootType:t.isRootType,kind:t.kind,node:{kind:t.kind,name:(0,Mr.stringToNameNode)(t.renamedTypeName||t.name)},renamedTypeName:t.renamedTypeName,subgraphNames:new Set(t.subgraphNames)});case Re.Kind.SCALAR_TYPE_DEFINITION:return Q(M({},n),{kind:t.kind,node:{kind:t.kind,name:(0,Mr.stringToNameNode)(t.name)},subgraphNames:new Set(t.subgraphNames)});case Re.Kind.UNION_TYPE_DEFINITION:return Q(M({},n),{kind:t.kind,node:{kind:t.kind,name:(0,Mr.stringToNameNode)(t.name)},memberByMemberTypeName:new Map(t.memberByMemberTypeName),subgraphNames:new Set(t.subgraphNames)})}}getParentTargetData({existingData:t,incomingData:n}){if(!t){let r=this.copyParentDefinitionData(n);return(0,ge.isParentDataRootType)(r)&&(r.extensionType=Aq.ExtensionType.NONE),r}return(0,ge.extractPersistedDirectives)(t.persistedDirectivesData,n.directivesByDirectiveName,this.persistedDirectiveDefinitionByDirectiveName),t}upsertParentDefinitionData(t,n){let r=this.entityInterfaceFederationDataByTypeName.get(t.name),i=this.parentDefinitionDataByTypeName.get(t.name),a=this.getParentTargetData({existingData:i,incomingData:t});this.recordTagNamesByCoords(a);let o=(0,ge.isNodeDataInaccessible)(a);if(o&&this.inaccessibleCoords.add(a.name),r&&r.interfaceObjectSubgraphs.has(n)&&(a.kind=Re.Kind.INTERFACE_TYPE_DEFINITION,a.node.kind=Re.Kind.INTERFACE_TYPE_DEFINITION),!i){this.parentDefinitionDataByTypeName.set(a.name,a);return}if(a.kind!==t.kind&&(!r||!r.interfaceObjectSubgraphs.has(n)||a.kind!==Re.Kind.INTERFACE_TYPE_DEFINITION||t.kind!==Re.Kind.OBJECT_TYPE_DEFINITION)){this.errors.push((0,Fe.incompatibleParentKindMergeError)(a.name,(0,he.kindToTypeString)(a.kind),(0,he.kindToTypeString)(t.kind)));return}switch((0,he.addNewObjectValueMapEntries)(t.configureDescriptionDataBySubgraphName,a.configureDescriptionDataBySubgraphName),(0,ge.setLongestDescription)(a,t),(0,ge.setParentDataExtensionType)(a,t),a.kind){case Re.Kind.ENUM_TYPE_DEFINITION:if(!(0,ge.areKindsEqual)(a,t))return;a.appearances+=1,a.isInaccessible||(a.isInaccessible=o),(0,he.addIterableValuesToSet)(t.subgraphNames,a.subgraphNames);for(let l of t.enumValueDataByValueName.values())this.upsertEnumValueData(a.enumValueDataByValueName,l,o);return;case Re.Kind.INPUT_OBJECT_TYPE_DEFINITION:if(!(0,ge.areKindsEqual)(a,t))return;o&&!a.isInaccessible&&this.propagateInaccessibilityToExistingChildren(a),a.isInaccessible||(a.isInaccessible=o),(0,he.addIterableValuesToSet)(t.subgraphNames,a.subgraphNames);for(let l of t.inputValueDataByValueName.values())this.upsertInputValueData(a.inputValueDataByValueName,l,a.name,a.isInaccessible);return;case Re.Kind.INTERFACE_TYPE_DEFINITION:case Re.Kind.OBJECT_TYPE_DEFINITION:let c=t;o&&!a.isInaccessible&&this.propagateInaccessibilityToExistingChildren(a),a.isInaccessible||(a.isInaccessible=o),(0,he.addIterableValuesToSet)(c.implementedInterfaceTypeNames,a.implementedInterfaceTypeNames),(0,he.addIterableValuesToSet)(c.subgraphNames,a.subgraphNames);for(let l of c.fieldDataByFieldName.values())this.upsertFieldData(a.fieldDataByFieldName,l,a.isInaccessible);return;case Re.Kind.UNION_TYPE_DEFINITION:if(!(0,ge.areKindsEqual)(a,t))return;(0,he.addMapEntries)(t.memberByMemberTypeName,a.memberByMemberTypeName),(0,he.addIterableValuesToSet)(t.subgraphNames,a.subgraphNames);return;default:(0,he.addIterableValuesToSet)(t.subgraphNames,a.subgraphNames);return}}propagateInaccessibilityToExistingChildren(t){switch(t.kind){case Re.Kind.INPUT_OBJECT_TYPE_DEFINITION:for(let n of t.inputValueDataByValueName.values())this.inaccessibleCoords.add(n.federatedCoords);break;default:for(let n of t.fieldDataByFieldName.values()){this.inaccessibleCoords.add(n.federatedCoords);for(let r of n.argumentDataByArgumentName.values())this.inaccessibleCoords.add(r.federatedCoords)}}}upsertPersistedDirectiveDefinitionData(t,n){let r=t.name,i=this.potentialPersistedDirectiveDefinitionDataByDirectiveName.get(r);if(!i){if(n>1)return;let a=new Map;for(let o of t.argumentDataByArgumentName.values())this.namedInputValueTypeNames.add(o.namedTypeName),this.upsertInputValueData(a,o,`@${t.name}`,!1);this.potentialPersistedDirectiveDefinitionDataByDirectiveName.set(r,{argumentDataByArgumentName:a,executableLocations:new Set(t.executableLocations),name:r,repeatable:t.repeatable,subgraphNames:new Set(t.subgraphNames),description:t.description});return}if(i.subgraphNames.size+1!==n){this.potentialPersistedDirectiveDefinitionDataByDirectiveName.delete(r);return}if((0,ge.setMutualExecutableLocations)(i,t.executableLocations),i.executableLocations.size<1){this.potentialPersistedDirectiveDefinitionDataByDirectiveName.delete(r);return}for(let a of t.argumentDataByArgumentName.values())this.namedInputValueTypeNames.add((0,Dq.getTypeNodeNamedTypeName)(a.type)),this.upsertInputValueData(i.argumentDataByArgumentName,a,`@${i.name}`,!1);(0,ge.setLongestDescription)(i,t),i.repeatable&&(i.repeatable=t.repeatable),(0,he.addIterableValuesToSet)(t.subgraphNames,i.subgraphNames)}shouldUpdateFederatedFieldAbstractNamedType(t,n){if(!t)return!1;let r=this.concreteTypeNamesByAbstractTypeName.get(t);if(!r||r.size<1)return!1;for(let i of n)if(!r.has(i))return!1;return!0}updateTypeNodeNamedType(t,n){let r=t;for(let i=0;i1){this.errors.push((0,Fe.incompatibleFederatedFieldNamedTypeError)(t,n));continue}break}case Re.Kind.UNION_TYPE_DEFINITION:{if(l){this.errors.push((0,Fe.incompatibleFederatedFieldNamedTypeError)(t,n));continue}l=T;break}default:{this.errors.push((0,Fe.incompatibleFederatedFieldNamedTypeError)(t,n));break}}}if(o.size<0&&!l){this.errors.push((0,Fe.incompatibleFederatedFieldNamedTypeError)(t,n));continue}let p=l;if(o.size>0){if(l){this.errors.push((0,Fe.incompatibleFederatedFieldNamedTypeError)(t,n));continue}for(let T of o.keys()){p=T;for(let[y,g]of o)if(T!==y&&!g.implementedInterfaceTypeNames.has(T)){p="";break}if(p)break}}if(!this.shouldUpdateFederatedFieldAbstractNamedType(p,c)){this.errors.push((0,Fe.incompatibleFederatedFieldNamedTypeError)(t,n));continue}a.namedTypeName=p,this.updateTypeNodeNamedType(a.type,p)}}federateInternalSubgraphData(){let t=0,n=!1;for(let r of this.internalSubgraphBySubgraphName.values()){t+=1,this.currentSubgraphName=r.name,this.isVersionTwo||(this.isVersionTwo=r.isVersionTwo),(0,$ce.renameRootTypes)(this,r);for(let i of r.parentDefinitionDataByTypeName.values())this.upsertParentDefinitionData(i,r.name);if(!n){if(!r.persistedDirectiveDefinitionDataByDirectiveName.size){n=!0;continue}for(let i of r.persistedDirectiveDefinitionDataByDirectiveName.values())this.upsertPersistedDirectiveDefinitionData(i,t);this.potentialPersistedDirectiveDefinitionDataByDirectiveName.size<1&&(n=!0)}}this.handleDisparateFieldNamedTypes()}handleInterfaceObjectForInternalGraph({entityData:t,internalSubgraph:n,interfaceObjectData:r,interfaceObjectNode:i,resolvableKeyFieldSets:a,subgraphName:o}){let c=this.internalGraph.addOrUpdateNode(t.typeName),l=this.internalGraph.addEntityDataNode(t.typeName);for(let T of i.satisfiedFieldSets)c.satisfiedFieldSets.add(T),a.has(T)&&l.addTargetSubgraphByFieldSet(T,o);let p=r.fieldDatasBySubgraphName.get(o);for(let{name:T,namedTypeName:y}of p||[])this.internalGraph.addEdge(c,this.internalGraph.addOrUpdateNode(y),T);this.internalGraph.addEdge(i,c,t.typeName,!0),this.addValidPrimaryKeyTargetsFromInterfaceObject(n,i.typeName,t,c)}handleEntityInterfaces(){for(let[t,n]of this.entityInterfaceFederationDataByTypeName){(0,ni.subtractSet)(n.interfaceFieldNames,n.interfaceObjectFieldNames);let r=(0,he.getOrThrowError)(this.parentDefinitionDataByTypeName,t,Oe.PARENT_DEFINITION_DATA);if(r.kind===Re.Kind.INTERFACE_TYPE_DEFINITION)for(let i of n.interfaceObjectSubgraphs){let a=(0,he.getOrThrowError)(this.internalSubgraphBySubgraphName,i,"internalSubgraphBySubgraphName"),o=a.configurationDataByTypeName,c=this.concreteTypeNamesByAbstractTypeName.get(t);if(!c)continue;let l=(0,he.getOrThrowError)(o,t,"configurationDataMap"),p=l.keys;if(!p)continue;l.entityInterfaceConcreteTypeNames=n.concreteTypeNames;let T=l.fieldNames;this.internalGraph.setSubgraphName(i);let y=this.internalGraph.addOrUpdateNode(t,{isAbstract:!0});for(let g of c){if(o.has(g))continue;let _=(0,he.getOrThrowError)(this.parentDefinitionDataByTypeName,g,Oe.PARENT_DEFINITION_DATA);if(!(0,ni.isObjectDefinitionData)(_))continue;let F=(0,he.getOrThrowError)(this.entityDataByTypeName,g,"entityDataByTypeName");F.subgraphNames.add(i);let U={fieldNames:T,isRootNode:!0,keys:p,typeName:g},K=new Set;for(let ee of p.filter(W=>!W.disableEntityResolver))K.add(ee.selectionSet);let J=this.authorizationDataByParentTypeName.get(t);for(let ee of n.interfaceObjectFieldNames){let W=`${g}.${ee}`,Te=(0,he.getOrThrowError)(r.fieldDataByFieldName,ee,`${t}.fieldDataByFieldName`);(0,he.getValueOrDefault)(this.fieldCoordsByNamedTypeName,Te.namedTypeName,()=>new Set).add(W);let de=J==null?void 0:J.fieldAuthDataByFieldName.get(ee);if(de){let et=(0,he.getValueOrDefault)(this.authorizationDataByParentTypeName,g,()=>(0,ni.newAuthorizationData)(g));(0,ni.upsertFieldAuthorizationData)(et.fieldAuthDataByFieldName,de)||this.invalidORScopesCoords.add(W)}if(_.fieldDataByFieldName.get(ee))continue;let qe=r.isInaccessible||_.isInaccessible||Te.isInaccessible;_.fieldDataByFieldName.set(ee,this.copyFieldData(Te,qe))}o.set(g,U),this.handleInterfaceObjectForInternalGraph({internalSubgraph:a,subgraphName:i,interfaceObjectData:n,interfaceObjectNode:y,resolvableKeyFieldSets:K,entityData:F})}}}}fieldDataToGraphFieldData(t){var n;return{name:t.name,namedTypeName:t.namedTypeName,isLeaf:(0,ni.isNodeLeaf)((n=this.parentDefinitionDataByTypeName.get(t.namedTypeName))==null?void 0:n.kind),subgraphNames:t.subgraphNames}}getValidFlattenedPersistedDirectiveNodeArray(t,n){let r=[];for(let[i,a]of t){let o=this.persistedDirectiveDefinitionByDirectiveName.get(i);if(o){if(a.length<2){r.push(...a);continue}if(!o.repeatable){this.errors.push((0,Fe.invalidRepeatedFederatedDirectiveErrorMessage)(i,n));continue}r.push(...a)}}return r}getRouterPersistedDirectiveNodes(t){let n=[...t.persistedDirectivesData.tagDirectiveByName.values()];return t.persistedDirectivesData.isDeprecated&&n.push((0,ge.generateDeprecatedDirective)(t.persistedDirectivesData.deprecatedReason)),n.push(...this.getValidFlattenedPersistedDirectiveNodeArray(t.persistedDirectivesData.directivesByDirectiveName,t.name)),n}getFederatedGraphNodeDescription(t){if(t.configureDescriptionDataBySubgraphName.size<1)return t.description;let n=[],r="";for(let[i,{propagate:a,description:o}]of t.configureDescriptionDataBySubgraphName)a&&(n.push(i),r=o);if(n.length===1)return(0,dc.getDescriptionFromString)(r);if(n.length<1)return t.description;this.errors.push((0,Fe.configureDescriptionPropagationError)((0,ge.getDefinitionDataCoords)(t,!0),n))}getNodeForRouterSchemaByData(t){return t.node.name=(0,Mr.stringToNameNode)(t.name),t.node.description=this.getFederatedGraphNodeDescription(t),t.node.directives=this.getRouterPersistedDirectiveNodes(t),t.node}getNodeWithPersistedDirectivesByInputValueData(t){return t.node.name=(0,Mr.stringToNameNode)(t.name),t.node.type=t.type,t.node.description=this.getFederatedGraphNodeDescription(t),t.node.directives=this.getRouterPersistedDirectiveNodes(t),t.includeDefaultValue&&(t.node.defaultValue=t.defaultValue),t.node}getValidFieldArgumentNodes(t){let n=[],r=[],i=[],a=`${t.renamedParentTypeName}.${t.name}`;for(let[o,c]of t.argumentDataByArgumentName)t.subgraphNames.size===c.subgraphNames.size?(r.push(o),n.push(this.getNodeWithPersistedDirectivesByInputValueData(c))):(0,ge.isTypeRequired)(c.type)&&i.push({inputValueName:o,missingSubgraphs:(0,he.getEntriesNotInHashSet)(t.subgraphNames,c.subgraphNames),requiredSubgraphs:[...c.requiredSubgraphNames]});return i.length>0?this.errors.push((0,Fe.invalidRequiredInputValueError)(Oe.FIELD,a,i)):r.length>0&&((0,he.getValueOrDefault)(this.fieldConfigurationByFieldCoords,a,()=>({argumentNames:r,fieldName:t.name,typeName:t.renamedParentTypeName})).argumentNames=r),n}getNodeWithPersistedDirectivesByFieldData(t,n){return t.node.arguments=n,t.node.name=(0,Mr.stringToNameNode)(t.name),t.node.type=t.type,t.node.description=this.getFederatedGraphNodeDescription(t),t.node.directives=this.getRouterPersistedDirectiveNodes(t),t.node}pushParentDefinitionDataToDocumentDefinitions(t){for(let[n,r]of this.parentDefinitionDataByTypeName)switch(r.extensionType!==Aq.ExtensionType.NONE&&this.errors.push((0,Fe.noBaseDefinitionForExtensionError)((0,he.kindToTypeString)(r.kind),n)),r.kind){case Re.Kind.ENUM_TYPE_DEFINITION:let i=[],a=[],o=this.getEnumValueMergeMethod(n);(0,ge.propagateAuthDirectives)(r,this.authorizationDataByParentTypeName.get(n));for(let ee of r.enumValueDataByValueName.values()){let W=(0,ge.getNodeForRouterSchemaByData)(ee,this.persistedDirectiveDefinitionByDirectiveName,this.errors),Te=(0,ge.isNodeDataInaccessible)(ee),de=Q(M({},ee.node),{directives:(0,ge.getClientPersistedDirectiveNodes)(ee)});switch(o){case ge.MergeMethod.CONSISTENT:!Te&&r.appearances>ee.appearances&&this.errors.push((0,Fe.incompatibleSharedEnumError)(n)),i.push(W),Te||a.push(de);break;case ge.MergeMethod.INTERSECTION:r.appearances===ee.appearances&&(i.push(W),Te||a.push(de));break;default:i.push(W),Te||a.push(de);break}}if(r.node.values=i,this.routerDefinitions.push(this.getNodeForRouterSchemaByData(r)),(0,ge.isNodeDataInaccessible)(r)){this.validateReferencesOfInaccessibleType(r),this.internalGraph.setNodeInaccessible(r.name);break}if(a.length<1){this.errors.push((0,Fe.allChildDefinitionsAreInaccessibleError)((0,he.kindToTypeString)(r.kind),n,Oe.ENUM_VALUE));break}this.clientDefinitions.push(Q(M({},r.node),{directives:(0,ge.getClientPersistedDirectiveNodes)(r),values:a}));break;case Re.Kind.INPUT_OBJECT_TYPE_DEFINITION:let c=[],l=[],p=[];for(let[ee,W]of r.inputValueDataByValueName)if(r.subgraphNames.size===W.subgraphNames.size){if(l.push(this.getNodeWithPersistedDirectivesByInputValueData(W)),(0,ge.isNodeDataInaccessible)(W))continue;p.push(Q(M({},W.node),{directives:(0,ge.getClientPersistedDirectiveNodes)(W)}))}else(0,ge.isTypeRequired)(W.type)&&c.push({inputValueName:ee,missingSubgraphs:(0,he.getEntriesNotInHashSet)(r.subgraphNames,W.subgraphNames),requiredSubgraphs:[...W.requiredSubgraphNames]});if(c.length>0){this.errors.push((0,Fe.invalidRequiredInputValueError)(Oe.INPUT_OBJECT,n,c,!1));break}if(r.node.fields=l,this.routerDefinitions.push(this.getNodeForRouterSchemaByData(r)),(0,ge.isNodeDataInaccessible)(r)){this.validateReferencesOfInaccessibleType(r);break}if(p.length<1){this.errors.push((0,Fe.allChildDefinitionsAreInaccessibleError)((0,he.kindToTypeString)(r.kind),n,"input field"));break}this.clientDefinitions.push(Q(M({},r.node),{directives:(0,ge.getClientPersistedDirectiveNodes)(r),fields:p}));break;case Re.Kind.INTERFACE_TYPE_DEFINITION:case Re.Kind.OBJECT_TYPE_DEFINITION:let T=[],y=[],g=new Map,_=(0,ge.newInvalidFieldNames)(),F=r.kind===Re.Kind.OBJECT_TYPE_DEFINITION,U=this.authorizationDataByParentTypeName.get(n);(0,ge.propagateAuthDirectives)(r,U);for(let[ee,W]of r.fieldDataByFieldName){(0,ge.propagateFieldAuthDirectives)(W,U);let Te=this.getValidFieldArgumentNodes(W);F&&(0,ge.validateExternalAndShareable)(W,_),T.push(this.getNodeWithPersistedDirectivesByFieldData(W,Te)),!(0,ge.isNodeDataInaccessible)(W)&&(y.push((0,ge.getClientSchemaFieldNodeByFieldData)(W)),g.set(ee,this.fieldDataToGraphFieldData(W)))}if(F&&(_.byShareable.size>0&&this.errors.push((0,Fe.invalidFieldShareabilityError)(r,_.byShareable)),_.subgraphNamesByExternalFieldName.size>0&&this.errors.push((0,Fe.allExternalFieldInstancesError)(n,_.subgraphNamesByExternalFieldName))),r.node.fields=T,this.internalGraph.initializeNode(n,g),r.implementedInterfaceTypeNames.size>0){t.push({data:r,clientSchemaFieldNodes:y});break}this.routerDefinitions.push(this.getNodeForRouterSchemaByData(r));let K=(0,Gce.isNodeQuery)(n);if((0,ge.isNodeDataInaccessible)(r)){if(K){this.errors.push(Fe.inaccessibleQueryRootTypeError);break}this.validateReferencesOfInaccessibleType(r),this.internalGraph.setNodeInaccessible(r.name);break}if(y.length<1){let ee=K?(0,Fe.noQueryRootTypeError)(!1):(0,Fe.allChildDefinitionsAreInaccessibleError)((0,he.kindToTypeString)(r.kind),n,Oe.FIELD);this.errors.push(ee);break}this.clientDefinitions.push(Q(M({},r.node),{directives:(0,ge.getClientPersistedDirectiveNodes)(r),fields:y}));break;case Re.Kind.SCALAR_TYPE_DEFINITION:if(Kn.BASE_SCALARS.has(n))break;if((0,ge.propagateAuthDirectives)(r,this.authorizationDataByParentTypeName.get(n)),this.routerDefinitions.push(this.getNodeForRouterSchemaByData(r)),(0,ge.isNodeDataInaccessible)(r)){this.validateReferencesOfInaccessibleType(r),this.internalGraph.setNodeInaccessible(r.name);break}this.clientDefinitions.push(Q(M({},r.node),{directives:(0,ge.getClientPersistedDirectiveNodes)(r)}));break;case Re.Kind.UNION_TYPE_DEFINITION:if(r.node.types=(0,ni.mapToArrayOfValues)(r.memberByMemberTypeName),this.routerDefinitions.push(this.getNodeForRouterSchemaByData(r)),(0,ge.isNodeDataInaccessible)(r)){this.validateReferencesOfInaccessibleType(r),this.internalGraph.setNodeInaccessible(r.name);break}let J=this.getClientSchemaUnionMembers(r);if(J.length<1){this.errors.push((0,Fe.allChildDefinitionsAreInaccessibleError)(Oe.UNION,n,"union member type"));break}this.clientDefinitions.push(Q(M({},r.node),{directives:(0,ge.getClientPersistedDirectiveNodes)(r),types:J}));break}}pushNamedTypeAuthDataToFields(){var t;for(let[n,r]of this.authorizationDataByParentTypeName){if(!r.requiresAuthentication&&r.requiredScopes.length<1)continue;let i=this.fieldCoordsByNamedTypeName.get(n);if(i)for(let a of i){let o=a.split(Oe.PERIOD);switch(o.length){case 2:{let c=(0,he.getValueOrDefault)(this.authorizationDataByParentTypeName,o[0],()=>(0,ni.newAuthorizationData)(o[0])),l=(0,he.getValueOrDefault)(c.fieldAuthDataByFieldName,o[1],()=>(0,ni.newFieldAuthorizationData)(o[1]));(t=l.inheritedData).requiresAuthentication||(t.requiresAuthentication=r.requiresAuthentication),l.inheritedData.requiredScopes.length*r.requiredScopes.length>Kn.MAX_OR_SCOPES?this.invalidORScopesCoords.add(a):(l.inheritedData.requiredScopesByOR=(0,ni.mergeRequiredScopesByAND)(l.inheritedData.requiredScopesByOR,r.requiredScopesByOR),l.inheritedData.requiredScopes=(0,ni.mergeRequiredScopesByAND)(l.inheritedData.requiredScopes,r.requiredScopes));break}default:break}}}}federateSubgraphData(){this.federateInternalSubgraphData(),this.handleEntityInterfaces(),this.generateTagData(),this.pushVersionTwoDirectiveDefinitionsToDocumentDefinitions(),this.pushNamedTypeAuthDataToFields()}validateInterfaceImplementationsAndPushToDocumentDefinitions(t){for(let{data:n,clientSchemaFieldNodes:r}of t){if(n.node.interfaces=this.getValidImplementedInterfaces(n),this.routerDefinitions.push((0,ge.getNodeForRouterSchemaByData)(n,this.persistedDirectiveDefinitionByDirectiveName,this.errors)),(0,ge.isNodeDataInaccessible)(n)){this.validateReferencesOfInaccessibleType(n),this.internalGraph.setNodeInaccessible(n.name);continue}let i=[];for(let a of n.implementedInterfaceTypeNames)this.inaccessibleCoords.has(a)||i.push((0,Mr.stringToNamedTypeNode)(a));this.clientDefinitions.push(Q(M({},n.node),{directives:(0,ge.getClientPersistedDirectiveNodes)(n),fields:r,interfaces:i}))}}pushVersionTwoDirectiveDefinitionsToDocumentDefinitions(){this.isVersionTwo&&(this.routerDefinitions=[Kn.AUTHENTICATED_DEFINITION,Kn.DEPRECATED_DEFINITION,Kn.INACCESSIBLE_DEFINITION,Kn.REQUIRES_SCOPES_DEFINITION,Kn.TAG_DEFINITION,Kn.SCOPE_SCALAR_DEFINITION],this.clientDefinitions=[Kn.DEPRECATED_DEFINITION])}validatePathSegmentInaccessibility(t){if(!t)return!1;let r=t.split(Oe.LEFT_PARENTHESIS)[0].split(Oe.PERIOD),i=r[0];for(let a=0;a0&&this.errors.push((0,Fe.invalidReferencesOfInaccessibleTypeError)((0,he.kindToTypeString)(t.kind),t.name,r))}validateQueryRootType(){let t=this.parentDefinitionDataByTypeName.get(Oe.QUERY);if(!t||t.kind!==Re.Kind.OBJECT_TYPE_DEFINITION||t.fieldDataByFieldName.size<1){this.errors.push((0,Fe.noQueryRootTypeError)());return}for(let n of t.fieldDataByFieldName.values())if(!(0,ge.isNodeDataInaccessible)(n))return;this.errors.push((0,Fe.noQueryRootTypeError)())}validateSubscriptionFieldConditionFieldPath(t,n,r,i,a){let o=t.split(Oe.PERIOD);if(o.length<1)return a.push((0,Fe.invalidSubscriptionFieldConditionFieldPathErrorMessage)(r,t)),[];let c=n;if(this.inaccessibleCoords.has(c.renamedTypeName))return a.push((0,Fe.inaccessibleSubscriptionFieldConditionFieldPathFieldErrorMessage)(r,t,o[0],c.renamedTypeName)),[];let l="";for(let p=0;p0?`.${T}`:T,c.kind!==Re.Kind.OBJECT_TYPE_DEFINITION)return a.push((0,Fe.invalidSubscriptionFieldConditionFieldPathParentErrorMessage)(r,t,l)),[];let y=c.fieldDataByFieldName.get(T);if(!y)return a.push((0,Fe.undefinedSubscriptionFieldConditionFieldPathFieldErrorMessage)(r,t,l,T,c.renamedTypeName)),[];let g=`${c.renamedTypeName}.${T}`;if(!y.subgraphNames.has(i))return a.push((0,Fe.invalidSubscriptionFieldConditionFieldPathFieldErrorMessage)(r,t,l,g,i)),[];if(this.inaccessibleCoords.has(g))return a.push((0,Fe.inaccessibleSubscriptionFieldConditionFieldPathFieldErrorMessage)(r,t,l,g)),[];if(Kn.BASE_SCALARS.has(y.namedTypeName)){c={kind:Re.Kind.SCALAR_TYPE_DEFINITION,name:y.namedTypeName};continue}c=(0,he.getOrThrowError)(this.parentDefinitionDataByTypeName,y.namedTypeName,Oe.PARENT_DEFINITION_DATA)}return(0,ge.isLeafKind)(c.kind)?o:(a.push((0,Fe.nonLeafSubscriptionFieldConditionFieldPathFinalFieldErrorMessage)(r,t,o[o.length-1],(0,he.kindToTypeString)(c.kind),c.name)),[])}validateSubscriptionFieldCondition(t,n,r,i,a,o,c){if(i>pE.MAX_SUBSCRIPTION_FILTER_DEPTH||this.isMaxDepth)return c.push((0,Fe.subscriptionFilterConditionDepthExceededErrorMessage)(a)),this.isMaxDepth=!0,!1;let l=!1,p=new Set([Oe.FIELD_PATH,Oe.VALUES]),T=new Set,y=new Set,g=[];for(let _ of t.fields){let F=_.name.value,U=a+`.${F}`;switch(F){case Oe.FIELD_PATH:{if(p.has(Oe.FIELD_PATH))p.delete(Oe.FIELD_PATH);else{l=!0,T.add(Oe.FIELD_PATH);break}if(_.value.kind!==Re.Kind.STRING){g.push((0,Fe.invalidInputFieldTypeErrorMessage)(U,Oe.STRING,(0,he.kindToTypeString)(_.value.kind))),l=!0;break}let K=this.validateSubscriptionFieldConditionFieldPath(_.value.value,r,U,o,g);if(K.length<1){l=!0;break}n.fieldPath=K;break}case Oe.VALUES:{if(p.has(Oe.VALUES))p.delete(Oe.VALUES);else{l=!0,T.add(Oe.VALUES);break}let K=_.value.kind;if(K==Re.Kind.NULL||K==Re.Kind.OBJECT){g.push((0,Fe.invalidInputFieldTypeErrorMessage)(U,Oe.LIST,(0,he.kindToTypeString)(_.value.kind))),l=!0;break}if(K!==Re.Kind.LIST){n.values=[(0,ge.getSubscriptionFilterValue)(_.value)];break}let J=new Set,ee=[];for(let W=0;W<_.value.values.length;W++){let Te=_.value.values[W];if(Te.kind===Re.Kind.OBJECT||Te.kind===Re.Kind.LIST){l=!0,ee.push(W);continue}J.add((0,ge.getSubscriptionFilterValue)(Te))}if(ee.length>0){g.push((0,Fe.subscriptionFieldConditionInvalidValuesArrayErrorMessage)(U,ee));continue}if(J.size<1){l=!0,g.push((0,Fe.subscriptionFieldConditionEmptyValuesArrayErrorMessage)(U));continue}n.values=[...J];break}default:l=!0,y.add(F)}}return l?(c.push((0,Fe.subscriptionFieldConditionInvalidInputFieldErrorMessage)(a,[...p],[...T],[...y],g)),!1):!0}validateSubscriptionFilterCondition(t,n,r,i,a,o,c){if(i>pE.MAX_SUBSCRIPTION_FILTER_DEPTH||this.isMaxDepth)return c.push((0,Fe.subscriptionFilterConditionDepthExceededErrorMessage)(a)),this.isMaxDepth=!0,!1;if(i+=1,t.fields.length!==1)return c.push((0,Fe.subscriptionFilterConditionInvalidInputFieldNumberErrorMessage)(a,t.fields.length)),!1;let l=t.fields[0],p=l.name.value;if(!bq.SUBSCRIPTION_FILTER_INPUT_NAMES.has(p))return c.push((0,Fe.subscriptionFilterConditionInvalidInputFieldErrorMessage)(a,p)),!1;let T=a+`.${p}`;switch(l.value.kind){case Re.Kind.OBJECT:switch(p){case Oe.IN_UPPER:return n.in={fieldPath:[],values:[]},this.validateSubscriptionFieldCondition(l.value,n.in,r,i,a+".IN",o,c);case Oe.NOT_UPPER:return n.not={},this.validateSubscriptionFilterCondition(l.value,n.not,r,i,a+".NOT",o,c);default:return c.push((0,Fe.subscriptionFilterConditionInvalidInputFieldTypeErrorMessage)(T,Oe.LIST,Oe.OBJECT)),!1}case Re.Kind.LIST:{let y=[];switch(p){case Oe.AND_UPPER:{n.and=y;break}case Oe.OR_UPPER:{n.or=y;break}default:return c.push((0,Fe.subscriptionFilterConditionInvalidInputFieldTypeErrorMessage)(T,Oe.OBJECT,Oe.LIST)),!1}let g=l.value.values.length;if(g<1||g>5)return c.push((0,Fe.subscriptionFilterArrayConditionInvalidLengthErrorMessage)(T,g)),!1;let _=!0,F=[];for(let U=0;U0?(c.push((0,Fe.subscriptionFilterArrayConditionInvalidItemTypeErrorMessage)(T,F)),!1):_}default:{let y=bq.SUBSCRIPTION_FILTER_LIST_INPUT_NAMES.has(p)?Oe.LIST:Oe.OBJECT;return c.push((0,Fe.subscriptionFilterConditionInvalidInputFieldTypeErrorMessage)(T,y,(0,he.kindToTypeString)(l.value.kind))),!1}}}validateSubscriptionFilterAndGenerateConfiguration(t,n,r,i,a,o){if(!t.arguments||t.arguments.length!==1)return;let c=t.arguments[0];if(c.value.kind!==Re.Kind.OBJECT){this.errors.push((0,Fe.invalidSubscriptionFilterDirectiveError)(r,[(0,Fe.subscriptionFilterConditionInvalidInputFieldTypeErrorMessage)(Oe.CONDITION,Oe.OBJECT,(0,he.kindToTypeString)(c.value.kind))]));return}let l={},p=[];if(!this.validateSubscriptionFilterCondition(c.value,l,n,0,Oe.CONDITION,o,p)){this.errors.push((0,Fe.invalidSubscriptionFilterDirectiveError)(r,p)),this.isMaxDepth=!1;return}(0,he.getValueOrDefault)(this.fieldConfigurationByFieldCoords,r,()=>({argumentNames:[],fieldName:i,typeName:a})).subscriptionFilterCondition=l}validateSubscriptionFiltersAndGenerateConfiguration(){for(let[t,n]of this.subscriptionFilterDataByFieldPath){if(this.inaccessibleCoords.has(t))continue;let r=this.parentDefinitionDataByTypeName.get(n.fieldData.namedTypeName);if(!r){this.errors.push((0,Fe.invalidSubscriptionFilterDirectiveError)(t,[(0,Fe.subscriptionFilterNamedTypeErrorMessage)(n.fieldData.namedTypeName)]));continue}(0,ge.isNodeDataInaccessible)(r)||r.kind===Re.Kind.OBJECT_TYPE_DEFINITION&&this.validateSubscriptionFilterAndGenerateConfiguration(n.directive,r,t,n.fieldData.name,n.fieldData.renamedParentTypeName,n.directiveSubgraphName)}}buildFederationResult(){this.subscriptionFilterDataByFieldPath.size>0&&this.validateSubscriptionFiltersAndGenerateConfiguration(),this.invalidORScopesCoords.size>0&&this.errors.push((0,Fe.orScopesLimitError)(Kn.MAX_OR_SCOPES,[...this.invalidORScopesCoords]));for(let a of this.potentialPersistedDirectiveDefinitionDataByDirectiveName.values())(0,ge.addValidPersistedDirectiveDefinitionNodeByData)(this.routerDefinitions,a,this.persistedDirectiveDefinitionByDirectiveName,this.errors);let t=[];this.pushParentDefinitionDataToDocumentDefinitions(t),this.validateInterfaceImplementationsAndPushToDocumentDefinitions(t),this.validateQueryRootType();for(let a of this.inaccessibleRequiredInputValueErrorByCoords.values())this.errors.push(a);if(this.errors.length>0)return{errors:this.errors,success:!1,warnings:this.warnings};if(this.internalSubgraphBySubgraphName.size>1){let a=this.internalGraph.validate();if(a.length>0)return{errors:a,success:!1,warnings:this.warnings}}if(this.errors.length>0)return{errors:this.errors,success:!1,warnings:this.warnings};let n={kind:Re.Kind.DOCUMENT,definitions:this.routerDefinitions},r=(0,Re.buildASTSchema)({kind:Re.Kind.DOCUMENT,definitions:this.clientDefinitions},{assumeValid:!0,assumeValidSDL:!0}),i=new Map;for(let a of this.internalSubgraphBySubgraphName.values())i.set(a.name,{configurationDataByTypeName:a.configurationDataByTypeName,parentDefinitionDataByTypeName:a.parentDefinitionDataByTypeName,schema:a.schema});for(let a of this.authorizationDataByParentTypeName.values())(0,ni.upsertAuthorizationConfiguration)(this.fieldConfigurationByFieldCoords,a);return M({fieldConfigurations:Array.from(this.fieldConfigurationByFieldCoords.values()),subgraphConfigBySubgraphName:i,federatedGraphAST:n,federatedGraphSchema:(0,Re.buildASTSchema)(n,{assumeValid:!0,assumeValidSDL:!0}),federatedGraphClientSchema:r,parentDefinitionDataByTypeName:this.parentDefinitionDataByTypeName,success:!0,warnings:this.warnings},this.getClientSchemaObjectBoolean())}getClientSchemaObjectBoolean(){return this.inaccessibleCoords.size<1&&this.tagNamesByCoords.size<1?{}:{shouldIncludeClientSchema:!0}}handleChildTagExclusions(t,n,r,i){let a=n.size;for(let[o,c]of r){let l=(0,he.getOrThrowError)(n,o,`${t.name}.childDataByChildName`);if((0,ge.isNodeDataInaccessible)(l)){a-=1;continue}i.isDisjointFrom(c.tagNames)||((0,he.getValueOrDefault)(l.persistedDirectivesData.directivesByDirectiveName,Oe.INACCESSIBLE,()=>[(0,he.generateSimpleDirective)(Oe.INACCESSIBLE)]),this.inaccessibleCoords.add(`${t.name}.${o}`),a-=1)}a<1&&(t.persistedDirectivesData.directivesByDirectiveName.set(Oe.INACCESSIBLE,[(0,he.generateSimpleDirective)(Oe.INACCESSIBLE)]),this.inaccessibleCoords.add(t.name))}handleChildTagInclusions(t,n,r,i){let a=n.size;for(let[o,c]of n){if((0,ge.isNodeDataInaccessible)(c)){a-=1;continue}let l=r.get(o);(!l||i.isDisjointFrom(l.tagNames))&&((0,he.getValueOrDefault)(c.persistedDirectivesData.directivesByDirectiveName,Oe.INACCESSIBLE,()=>[(0,he.generateSimpleDirective)(Oe.INACCESSIBLE)]),this.inaccessibleCoords.add(`${t.name}.${o}`),a-=1)}a<1&&(t.persistedDirectivesData.directivesByDirectiveName.set(Oe.INACCESSIBLE,[(0,he.generateSimpleDirective)(Oe.INACCESSIBLE)]),this.inaccessibleCoords.add(t.name))}buildFederationContractResult(t){if(this.isVersionTwo||this.routerDefinitions.push(Kn.INACCESSIBLE_DEFINITION),t.tagNamesToExclude.size>0)for(let[o,c]of this.parentTagDataByTypeName){let l=(0,he.getOrThrowError)(this.parentDefinitionDataByTypeName,o,Oe.PARENT_DEFINITION_DATA);if(!(0,ge.isNodeDataInaccessible)(l)){if(!t.tagNamesToExclude.isDisjointFrom(c.tagNames)){l.persistedDirectivesData.directivesByDirectiveName.set(Oe.INACCESSIBLE,[(0,he.generateSimpleDirective)(Oe.INACCESSIBLE)]),this.inaccessibleCoords.add(o);continue}if(!(c.childTagDataByChildName.size<1))switch(l.kind){case Re.Kind.SCALAR_TYPE_DEFINITION:case Re.Kind.UNION_TYPE_DEFINITION:continue;case Re.Kind.ENUM_TYPE_DEFINITION:this.handleChildTagExclusions(l,l.enumValueDataByValueName,c.childTagDataByChildName,t.tagNamesToExclude);break;case Re.Kind.INPUT_OBJECT_TYPE_DEFINITION:this.handleChildTagExclusions(l,l.inputValueDataByValueName,c.childTagDataByChildName,t.tagNamesToExclude);break;default:let p=l.fieldDataByFieldName.size;for(let[T,y]of c.childTagDataByChildName){let g=(0,he.getOrThrowError)(l.fieldDataByFieldName,T,`${o}.fieldDataByFieldName`);if((0,ge.isNodeDataInaccessible)(g)){p-=1;continue}if(!t.tagNamesToExclude.isDisjointFrom(y.tagNames)){(0,he.getValueOrDefault)(g.persistedDirectivesData.directivesByDirectiveName,Oe.INACCESSIBLE,()=>[(0,he.generateSimpleDirective)(Oe.INACCESSIBLE)]),this.inaccessibleCoords.add(g.federatedCoords),p-=1;continue}for(let[_,F]of y.tagNamesByArgumentName){let U=(0,he.getOrThrowError)(g.argumentDataByArgumentName,_,`${T}.argumentDataByArgumentName`);(0,ge.isNodeDataInaccessible)(U)||F.isDisjointFrom(F)||((0,he.getValueOrDefault)(U.persistedDirectivesData.directivesByDirectiveName,Oe.INACCESSIBLE,()=>[(0,he.generateSimpleDirective)(Oe.INACCESSIBLE)]),this.inaccessibleCoords.add(U.federatedCoords))}}p<1&&(l.persistedDirectivesData.directivesByDirectiveName.set(Oe.INACCESSIBLE,[(0,he.generateSimpleDirective)(Oe.INACCESSIBLE)]),this.inaccessibleCoords.add(o))}}}else if(t.tagNamesToInclude.size>0)for(let[o,c]of this.parentDefinitionDataByTypeName){if((0,ge.isNodeDataInaccessible)(c))continue;let l=this.parentTagDataByTypeName.get(o);if(!l){c.persistedDirectivesData.directivesByDirectiveName.set(Oe.INACCESSIBLE,[(0,he.generateSimpleDirective)(Oe.INACCESSIBLE)]),this.inaccessibleCoords.add(o);continue}if(t.tagNamesToInclude.isDisjointFrom(l.tagNames)){if(l.childTagDataByChildName.size<1){c.persistedDirectivesData.directivesByDirectiveName.set(Oe.INACCESSIBLE,[(0,he.generateSimpleDirective)(Oe.INACCESSIBLE)]),this.inaccessibleCoords.add(o);continue}switch(c.kind){case Re.Kind.SCALAR_TYPE_DEFINITION:case Re.Kind.UNION_TYPE_DEFINITION:continue;case Re.Kind.ENUM_TYPE_DEFINITION:this.handleChildTagInclusions(c,c.enumValueDataByValueName,l.childTagDataByChildName,t.tagNamesToInclude);break;case Re.Kind.INPUT_OBJECT_TYPE_DEFINITION:this.handleChildTagInclusions(c,c.inputValueDataByValueName,l.childTagDataByChildName,t.tagNamesToInclude);break;default:let p=c.fieldDataByFieldName.size;for(let[T,y]of c.fieldDataByFieldName){if((0,ge.isNodeDataInaccessible)(y)){p-=1;continue}let g=l.childTagDataByChildName.get(T);(!g||t.tagNamesToInclude.isDisjointFrom(g.tagNames))&&((0,he.getValueOrDefault)(y.persistedDirectivesData.directivesByDirectiveName,Oe.INACCESSIBLE,()=>[(0,he.generateSimpleDirective)(Oe.INACCESSIBLE)]),this.inaccessibleCoords.add(y.federatedCoords),p-=1)}p<1&&(c.persistedDirectivesData.directivesByDirectiveName.set(Oe.INACCESSIBLE,[(0,he.generateSimpleDirective)(Oe.INACCESSIBLE)]),this.inaccessibleCoords.add(o))}}}this.subscriptionFilterDataByFieldPath.size>0&&this.validateSubscriptionFiltersAndGenerateConfiguration();for(let o of this.potentialPersistedDirectiveDefinitionDataByDirectiveName.values())(0,ge.addValidPersistedDirectiveDefinitionNodeByData)(this.routerDefinitions,o,this.persistedDirectiveDefinitionByDirectiveName,this.errors);let n=[];if(this.pushParentDefinitionDataToDocumentDefinitions(n),this.validateInterfaceImplementationsAndPushToDocumentDefinitions(n),this.validateQueryRootType(),this.errors.length>0)return{errors:this.errors,success:!1,warnings:this.warnings};let r={kind:Re.Kind.DOCUMENT,definitions:this.routerDefinitions},i=(0,Re.buildASTSchema)({kind:Re.Kind.DOCUMENT,definitions:this.clientDefinitions},{assumeValid:!0,assumeValidSDL:!0}),a=new Map;for(let o of this.internalSubgraphBySubgraphName.values())a.set(o.name,{configurationDataByTypeName:o.configurationDataByTypeName,parentDefinitionDataByTypeName:o.parentDefinitionDataByTypeName,schema:o.schema});for(let o of this.authorizationDataByParentTypeName.values())(0,ni.upsertAuthorizationConfiguration)(this.fieldConfigurationByFieldCoords,o);return M({fieldConfigurations:Array.from(this.fieldConfigurationByFieldCoords.values()),subgraphConfigBySubgraphName:a,federatedGraphAST:r,federatedGraphSchema:(0,Re.buildASTSchema)(r,{assumeValid:!0,assumeValidSDL:!0}),federatedGraphClientSchema:i,parentDefinitionDataByTypeName:this.parentDefinitionDataByTypeName,success:!0,warnings:this.warnings},this.getClientSchemaObjectBoolean())}federateSubgraphsInternal(){return this.federateSubgraphData(),this.buildFederationResult()}};pc.FederationFactory=fE;function MO(e){if(e.length<1)return{errors:[Fe.minimumSubgraphRequirementError],success:!1,warnings:[]};let t=(0,Kce.batchNormalize)(e);if(!t.success)return{errors:t.errors,success:!1,warnings:t.warnings};let n=new Map,r=new Map;for(let[a,o]of t.internalSubgraphBySubgraphName)for(let[c,l]of o.entityInterfaces){let p=n.get(c);if(!p){n.set(c,(0,ni.newEntityInterfaceFederationData)(l,a));continue}(0,ni.upsertEntityInterfaceFederationData)(p,l,a)}let i=[];for(let[a,o]of n){let c=o.concreteTypeNames.size;for(let[l,p]of o.subgraphDataByTypeName){if(!p.isInterfaceObject){p.resolvable&&p.concreteTypeNames.size!==c&&(0,he.getValueOrDefault)(r,a,()=>[]).push({subgraphName:l,concreteTypeNames:p.concreteTypeNames});continue}let T=(0,he.getOrThrowError)(t.internalSubgraphBySubgraphName,l,"internalSubgraphBySubgraphName").parentDefinitionDataByTypeName,y=[];for(let g of o.concreteTypeNames)T.has(g)&&y.push(g);y.length>0&&i.push((0,Fe.invalidInterfaceObjectImplementationDefinitionsError)(a,l,y))}}return r.size>0&&i.push((0,Fe.undefinedEntityInterfaceImplementationsError)(r,n)),i.length>0?{errors:i,success:!1,warnings:t.warnings}:{federationFactory:new fE({authorizationDataByParentTypeName:t.authorizationDataByParentTypeName,concreteTypeNamesByAbstractTypeName:t.concreteTypeNamesByAbstractTypeName,entityDataByTypeName:t.entityDataByTypeName,entityInterfaceFederationDataByTypeName:n,fieldCoordsByNamedTypeName:t.fieldCoordsByNamedTypeName,internalSubgraphBySubgraphName:t.internalSubgraphBySubgraphName,internalGraph:t.internalGraph,warnings:t.warnings}),success:!0,warnings:t.warnings}}function Qce(e){let t=MO(e);return t.success?t.federationFactory.federateSubgraphsInternal():{errors:t.errors,success:!1,warnings:t.warnings}}function Yce(e,t){let n=MO(e);if(!n.success)return{errors:n.errors,success:!1,warnings:n.warnings};n.federationFactory.federateSubgraphData();let r=[(0,Rq.cloneDeep)(n.federationFactory)],i=n.federationFactory.buildFederationResult();if(!i.success)return{errors:i.errors,success:!1,warnings:i.warnings};let a=t.size-1,o=new Map,c=0;for(let[l,p]of t){c!==a&&r.push((0,Rq.cloneDeep)(r[c]));let T=r[c].buildFederationContractResult(p);o.set(l,T),c++}return Q(M({},i),{federationResultByContractName:o})}function Jce(e,t){let n=MO(e);return n.success?(n.federationFactory.federateSubgraphData(),n.federationFactory.buildFederationContractResult(t)):{errors:n.errors,success:!1,warnings:n.warnings}}});var mE=w(Os=>{"use strict";f();N();m();Object.defineProperty(Os,"__esModule",{value:!0});Os.LATEST_ROUTER_COMPATIBILITY_VERSION=Os.ROUTER_COMPATIBILITY_VERSIONS=Os.ROUTER_COMPATIBILITY_VERSION_ONE=void 0;Os.ROUTER_COMPATIBILITY_VERSION_ONE="1";Os.ROUTER_COMPATIBILITY_VERSIONS=new Set([Os.ROUTER_COMPATIBILITY_VERSION_ONE]);Os.LATEST_ROUTER_COMPATIBILITY_VERSION="1"});var Pq=w(Cp=>{"use strict";f();N();m();Object.defineProperty(Cp,"__esModule",{value:!0});Cp.federateSubgraphs=Hce;Cp.federateSubgraphsWithContracts=zce;Cp.federateSubgraphsContract=Wce;var xO=Fq(),qO=mE();function Hce(e,t=qO.ROUTER_COMPATIBILITY_VERSION_ONE){switch(t){default:return(0,xO.federateSubgraphs)(e)}}function zce(e,t,n=qO.ROUTER_COMPATIBILITY_VERSION_ONE){switch(n){default:return(0,xO.federateSubgraphsWithContracts)(e,t)}}function Wce(e,t,n=qO.ROUTER_COMPATIBILITY_VERSION_ONE){switch(n){default:return(0,xO.federateSubgraphsContract)(e,t)}}});var Lq=w(wq=>{"use strict";f();N();m();Object.defineProperty(wq,"__esModule",{value:!0})});var Cq=w(Bp=>{"use strict";f();N();m();Object.defineProperty(Bp,"__esModule",{value:!0});Bp.normalizeSubgraphFromString=Xce;Bp.normalizeSubgraph=Zce;Bp.batchNormalize=ele;var VO=CO(),jO=mE();function Xce(e,t=!0,n=jO.ROUTER_COMPATIBILITY_VERSION_ONE){switch(n){default:return(0,VO.normalizeSubgraphFromString)(e,t)}}function Zce(e,t,n,r=jO.ROUTER_COMPATIBILITY_VERSION_ONE){switch(r){default:return(0,VO.normalizeSubgraph)(e,t,n)}}function ele(e,t=jO.ROUTER_COMPATIBILITY_VERSION_ONE){switch(t){default:return(0,VO.batchNormalize)(e)}}});var Uq=w(Bq=>{"use strict";f();N();m();Object.defineProperty(Bq,"__esModule",{value:!0})});var Mq=w(kq=>{"use strict";f();N();m();Object.defineProperty(kq,"__esModule",{value:!0})});var qq=w(xq=>{"use strict";f();N();m();Object.defineProperty(xq,"__esModule",{value:!0})});var Vq=w(NE=>{"use strict";f();N();m();Object.defineProperty(NE,"__esModule",{value:!0});NE.COMPOSITION_VERSION=void 0;NE.COMPOSITION_VERSION="{{$COMPOSITION__VERSION}}"});var Kq=w(jq=>{"use strict";f();N();m();Object.defineProperty(jq,"__esModule",{value:!0})});var $q=w(Gq=>{"use strict";f();N();m();Object.defineProperty(Gq,"__esModule",{value:!0})});var TE=w(Tt=>{"use strict";f();N();m();var tle=Tt&&Tt.__createBinding||(Object.create?function(e,t,n,r){r===void 0&&(r=n);var i=Object.getOwnPropertyDescriptor(t,n);(!i||("get"in i?!t.__esModule:i.writable||i.configurable))&&(i={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,i)}:function(e,t,n,r){r===void 0&&(r=n),e[r]=t[n]}),wt=Tt&&Tt.__exportStar||function(e,t){for(var n in e)n!=="default"&&!Object.prototype.hasOwnProperty.call(t,n)&&tle(t,e,n)};Object.defineProperty(Tt,"__esModule",{value:!0});wt(Jr(),Tt);wt(Y_(),Tt);wt(sa(),Tt);wt(YL(),Tt);wt(Pq(),Tt);wt(Lq(),Tt);wt(Cq(),Tt);wt(Uq(),Tt);wt(PO(),Tt);wt(DO(),Tt);wt(AO(),Tt);wt(mE(),Tt);wt(Mq(),Tt);wt(wO(),Tt);wt(Jo(),Tt);wt(bp(),Tt);wt(Rp(),Tt);wt(qq(),Tt);wt(Vq(),Tt);wt(lr(),Tt);wt(Kq(),Tt);wt(Hr(),Tt);wt(mO(),Tt);wt(EN(),Tt);wt(kO(),Tt);wt(cO(),Tt);wt(Dp(),Tt);wt($q(),Tt);wt(gO(),Tt);wt(lE(),Tt);wt(pO(),Tt);wt(hs(),Tt);wt(up(),Tt);wt(np(),Tt);wt(eE(),Tt)});var Jle={};jf(Jle,{buildRouterConfiguration:()=>Yle,federateSubgraphs:()=>Qle});f();N();m();var hc=os(TE());f();N();m();f();N();m();function KO(e){if(!e)return e;if(!URL.canParse(e))throw new Error("Invalid URL");let t=e.indexOf("?"),n=e.indexOf("#"),r=e;return t>0?r=r.slice(0,n>0?Math.min(t,n):t):n>0&&(r=r.slice(0,n)),r}f();N();m();f();N();m();var Qq={};f();N();m();function Yq(e){return e!=null}f();N();m();f();N();m();var Xq=os(Ae(),1);f();N();m();var Jq;if(typeof AggregateError=="undefined"){class e extends Error{constructor(n,r=""){super(r),this.errors=n,this.name="AggregateError",Error.captureStackTrace(this,e)}}Jq=function(t,n){return new e(t,n)}}else Jq=AggregateError;function Hq(e){return"errors"in e&&Array.isArray(e.errors)}var Zq=3;function eV(e){return EE(e,[])}function EE(e,t){switch(typeof e){case"string":return JSON.stringify(e);case"function":return e.name?`[function ${e.name}]`:"[function]";case"object":return nle(e,t);default:return String(e)}}function zq(e){return e instanceof Xq.GraphQLError?e.toString():`${e.name}: ${e.message}; + ${e.stack}`}function nle(e,t){if(e===null)return"null";if(e instanceof Error)return Hq(e)?zq(e)+` +`+Wq(e.errors,t):zq(e);if(t.includes(e))return"[Circular]";let n=[...t,e];if(rle(e)){let r=e.toJSON();if(r!==e)return typeof r=="string"?r:EE(r,n)}else if(Array.isArray(e))return Wq(e,n);return ile(e,n)}function rle(e){return typeof e.toJSON=="function"}function ile(e,t){let n=Object.entries(e);return n.length===0?"{}":t.length>Zq?"["+ale(e)+"]":"{ "+n.map(([i,a])=>i+": "+EE(a,t)).join(", ")+" }"}function Wq(e,t){if(e.length===0)return"[]";if(t.length>Zq)return"[Array]";let n=e.length,r=[];for(let i=0;in==null?n:n[r],e==null?void 0:e.extensions)}f();N();m();var Pe=os(Ae(),1);f();N();m();var Qa=os(Ae(),1);function Ya(e){if((0,Qa.isNonNullType)(e)){let t=Ya(e.ofType);if(t.kind===Qa.Kind.NON_NULL_TYPE)throw new Error(`Invalid type node ${eV(e)}. Inner type of non-null type cannot be a non-null type.`);return{kind:Qa.Kind.NON_NULL_TYPE,type:t}}else if((0,Qa.isListType)(e))return{kind:Qa.Kind.LIST_TYPE,type:Ya(e.ofType)};return{kind:Qa.Kind.NAMED_TYPE,name:{kind:Qa.Kind.NAME,value:e.name}}}f();N();m();var Ja=os(Ae(),1);function yE(e){if(e===null)return{kind:Ja.Kind.NULL};if(e===void 0)return null;if(Array.isArray(e)){let t=[];for(let n of e){let r=yE(n);r!=null&&t.push(r)}return{kind:Ja.Kind.LIST,values:t}}if(typeof e=="object"){let t=[];for(let n in e){let r=e[n],i=yE(r);i&&t.push({kind:Ja.Kind.OBJECT_FIELD,name:{kind:Ja.Kind.NAME,value:n},value:i})}return{kind:Ja.Kind.OBJECT,fields:t}}if(typeof e=="boolean")return{kind:Ja.Kind.BOOLEAN,value:e};if(typeof e=="number"&&isFinite(e)){let t=String(e);return sle.test(t)?{kind:Ja.Kind.INT,value:t}:{kind:Ja.Kind.FLOAT,value:t}}if(typeof e=="string")return{kind:Ja.Kind.STRING,value:e};throw new TypeError(`Cannot convert value to AST: ${e}.`)}var sle=/^-?(?:0|[1-9][0-9]*)$/;f();N();m();f();N();m();function IE(e){let t=new WeakMap;return function(r){let i=t.get(r);if(i===void 0){let a=e(r);return t.set(r,a),a}return i}}var hUe=IE(function(t){let n=ole(t);return new Set([...n].map(r=>r.name))}),ole=IE(function(t){let n=GO(t);return new Set(n.values())}),GO=IE(function(t){let n=new Map,r=t.getQueryType();r&&n.set("query",r);let i=t.getMutationType();i&&n.set("mutation",i);let a=t.getSubscriptionType();return a&&n.set("subscription",a),n});function ule(e,t={}){let n=t.pathToDirectivesInExtensions,r=e.getTypeMap(),i=cle(e,n),a=i!=null?[i]:[],o=e.getDirectives();for(let c of o)(0,Pe.isSpecifiedDirective)(c)||a.push(lle(c,e,n));for(let c in r){let l=r[c],p=(0,Pe.isSpecifiedScalarType)(l),T=(0,Pe.isIntrospectionType)(l);if(!(p||T))if((0,Pe.isObjectType)(l))a.push(dle(l,e,n));else if((0,Pe.isInterfaceType)(l))a.push(ple(l,e,n));else if((0,Pe.isUnionType)(l))a.push(fle(l,e,n));else if((0,Pe.isInputObjectType)(l))a.push(mle(l,e,n));else if((0,Pe.isEnumType)(l))a.push(Nle(l,e,n));else if((0,Pe.isScalarType)(l))a.push(Tle(l,e,n));else throw new Error(`Unknown type ${l}.`)}return{kind:Pe.Kind.DOCUMENT,definitions:a}}function tV(e,t={}){let n=ule(e,t);return(0,Pe.print)(n)}function cle(e,t){var n,r;let i=new Map([["query",void 0],["mutation",void 0],["subscription",void 0]]),a=[];if(e.astNode!=null&&a.push(e.astNode),e.extensionASTNodes!=null)for(let T of e.extensionASTNodes)a.push(T);for(let T of a)if(T.operationTypes)for(let y of T.operationTypes)i.set(y.operation,y);let o=GO(e);for(let[T,y]of i){let g=o.get(T);if(g!=null){let _=Ya(g);y!=null?y.type=_:i.set(T,{kind:Pe.Kind.OPERATION_TYPE_DEFINITION,operation:T,type:_})}}let c=[...i.values()].filter(Yq),l=Cl(e,e,t);if(!c.length&&!l.length)return null;let p={kind:c!=null?Pe.Kind.SCHEMA_DEFINITION:Pe.Kind.SCHEMA_EXTENSION,operationTypes:c,directives:l};return p.description=((r=(n=e.astNode)===null||n===void 0?void 0:n.description)!==null&&r!==void 0?r:e.description!=null)?{kind:Pe.Kind.STRING,value:e.description,block:!0}:void 0,p}function lle(e,t,n){var r,i,a,o;return{kind:Pe.Kind.DIRECTIVE_DEFINITION,description:(i=(r=e.astNode)===null||r===void 0?void 0:r.description)!==null&&i!==void 0?i:e.description?{kind:Pe.Kind.STRING,value:e.description}:void 0,name:{kind:Pe.Kind.NAME,value:e.name},arguments:(a=e.args)===null||a===void 0?void 0:a.map(c=>nV(c,t,n)),repeatable:e.isRepeatable,locations:((o=e.locations)===null||o===void 0?void 0:o.map(c=>({kind:Pe.Kind.NAME,value:c})))||[]}}function Cl(e,t,n){let r=hE(e,n),i=[];e.astNode!=null&&i.push(e.astNode),"extensionASTNodes"in e&&e.extensionASTNodes!=null&&(i=i.concat(e.extensionASTNodes));let a;if(r!=null)a=$O(t,r);else{a=[];for(let o of i)o.directives&&a.push(...o.directives)}return a}function _E(e,t,n){var r,i;let a=[],o=null,c=hE(e,n),l;return c!=null?l=$O(t,c):l=(r=e.astNode)===null||r===void 0?void 0:r.directives,l!=null&&(a=l.filter(p=>p.name.value!=="deprecated"),e.deprecationReason!=null&&(o=(i=l.filter(p=>p.name.value==="deprecated"))===null||i===void 0?void 0:i[0])),e.deprecationReason!=null&&o==null&&(o=yle(e.deprecationReason)),o==null?a:[o].concat(a)}function nV(e,t,n){var r,i,a;return{kind:Pe.Kind.INPUT_VALUE_DEFINITION,description:(i=(r=e.astNode)===null||r===void 0?void 0:r.description)!==null&&i!==void 0?i:e.description?{kind:Pe.Kind.STRING,value:e.description,block:!0}:void 0,name:{kind:Pe.Kind.NAME,value:e.name},type:Ya(e.type),defaultValue:e.defaultValue!==void 0&&(a=(0,Pe.astFromValue)(e.defaultValue,e.type))!==null&&a!==void 0?a:void 0,directives:_E(e,t,n)}}function dle(e,t,n){var r,i;return{kind:Pe.Kind.OBJECT_TYPE_DEFINITION,description:(i=(r=e.astNode)===null||r===void 0?void 0:r.description)!==null&&i!==void 0?i:e.description?{kind:Pe.Kind.STRING,value:e.description,block:!0}:void 0,name:{kind:Pe.Kind.NAME,value:e.name},fields:Object.values(e.getFields()).map(a=>rV(a,t,n)),interfaces:Object.values(e.getInterfaces()).map(a=>Ya(a)),directives:Cl(e,t,n)}}function ple(e,t,n){var r,i;let a={kind:Pe.Kind.INTERFACE_TYPE_DEFINITION,description:(i=(r=e.astNode)===null||r===void 0?void 0:r.description)!==null&&i!==void 0?i:e.description?{kind:Pe.Kind.STRING,value:e.description,block:!0}:void 0,name:{kind:Pe.Kind.NAME,value:e.name},fields:Object.values(e.getFields()).map(o=>rV(o,t,n)),directives:Cl(e,t,n)};return"getInterfaces"in e&&(a.interfaces=Object.values(e.getInterfaces()).map(o=>Ya(o))),a}function fle(e,t,n){var r,i;return{kind:Pe.Kind.UNION_TYPE_DEFINITION,description:(i=(r=e.astNode)===null||r===void 0?void 0:r.description)!==null&&i!==void 0?i:e.description?{kind:Pe.Kind.STRING,value:e.description,block:!0}:void 0,name:{kind:Pe.Kind.NAME,value:e.name},directives:Cl(e,t,n),types:e.getTypes().map(a=>Ya(a))}}function mle(e,t,n){var r,i;return{kind:Pe.Kind.INPUT_OBJECT_TYPE_DEFINITION,description:(i=(r=e.astNode)===null||r===void 0?void 0:r.description)!==null&&i!==void 0?i:e.description?{kind:Pe.Kind.STRING,value:e.description,block:!0}:void 0,name:{kind:Pe.Kind.NAME,value:e.name},fields:Object.values(e.getFields()).map(a=>Ele(a,t,n)),directives:Cl(e,t,n)}}function Nle(e,t,n){var r,i;return{kind:Pe.Kind.ENUM_TYPE_DEFINITION,description:(i=(r=e.astNode)===null||r===void 0?void 0:r.description)!==null&&i!==void 0?i:e.description?{kind:Pe.Kind.STRING,value:e.description,block:!0}:void 0,name:{kind:Pe.Kind.NAME,value:e.name},values:Object.values(e.getValues()).map(a=>hle(a,t,n)),directives:Cl(e,t,n)}}function Tle(e,t,n){var r,i,a;let o=hE(e,n),c=o?$O(t,o):((r=e.astNode)===null||r===void 0?void 0:r.directives)||[],l=e.specifiedByUrl||e.specifiedByURL;if(l&&!c.some(p=>p.name.value==="specifiedBy")){let p={url:l};c.push(gE("specifiedBy",p))}return{kind:Pe.Kind.SCALAR_TYPE_DEFINITION,description:(a=(i=e.astNode)===null||i===void 0?void 0:i.description)!==null&&a!==void 0?a:e.description?{kind:Pe.Kind.STRING,value:e.description,block:!0}:void 0,name:{kind:Pe.Kind.NAME,value:e.name},directives:c}}function rV(e,t,n){var r,i;return{kind:Pe.Kind.FIELD_DEFINITION,description:(i=(r=e.astNode)===null||r===void 0?void 0:r.description)!==null&&i!==void 0?i:e.description?{kind:Pe.Kind.STRING,value:e.description,block:!0}:void 0,name:{kind:Pe.Kind.NAME,value:e.name},arguments:e.args.map(a=>nV(a,t,n)),type:Ya(e.type),directives:_E(e,t,n)}}function Ele(e,t,n){var r,i,a;return{kind:Pe.Kind.INPUT_VALUE_DEFINITION,description:(i=(r=e.astNode)===null||r===void 0?void 0:r.description)!==null&&i!==void 0?i:e.description?{kind:Pe.Kind.STRING,value:e.description,block:!0}:void 0,name:{kind:Pe.Kind.NAME,value:e.name},type:Ya(e.type),directives:_E(e,t,n),defaultValue:(a=(0,Pe.astFromValue)(e.defaultValue,e.type))!==null&&a!==void 0?a:void 0}}function hle(e,t,n){var r,i;return{kind:Pe.Kind.ENUM_VALUE_DEFINITION,description:(i=(r=e.astNode)===null||r===void 0?void 0:r.description)!==null&&i!==void 0?i:e.description?{kind:Pe.Kind.STRING,value:e.description,block:!0}:void 0,name:{kind:Pe.Kind.NAME,value:e.name},directives:_E(e,t,n)}}function yle(e){return gE("deprecated",{reason:e},Pe.GraphQLDeprecatedDirective)}function gE(e,t,n){let r=[];if(n!=null)for(let i of n.args){let a=i.name,o=t[a];if(o!==void 0){let c=(0,Pe.astFromValue)(o,i.type);c&&r.push({kind:Pe.Kind.ARGUMENT,name:{kind:Pe.Kind.NAME,value:a},value:c})}}else for(let i in t){let a=t[i],o=yE(a);o&&r.push({kind:Pe.Kind.ARGUMENT,name:{kind:Pe.Kind.NAME,value:i},value:o})}return{kind:Pe.Kind.DIRECTIVE,name:{kind:Pe.Kind.NAME,value:e},arguments:r}}function $O(e,t){let n=[];for(let r in t){let i=t[r],a=e==null?void 0:e.getDirective(r);if(Array.isArray(i))for(let o of i)n.push(gE(r,o,a));else n.push(gE(r,i,a))}return n}var Vl=os(TE(),1),YV=os(Ae(),1);f();N();m();f();N();m();f();N();m();f();N();m();f();N();m();f();N();m();function sn(e,t){if(!e)throw new Error(t)}var Ile=34028234663852886e22,gle=-34028234663852886e22,_le=4294967295,vle=2147483647,Sle=-2147483648;function Bl(e){if(typeof e!="number")throw new Error("invalid int 32: "+typeof e);if(!Number.isInteger(e)||e>vle||e_le||e<0)throw new Error("invalid uint 32: "+e)}function vE(e){if(typeof e!="number")throw new Error("invalid float 32: "+typeof e);if(Number.isFinite(e)&&(e>Ile||e({no:i.no,name:i.name,localName:e[i.no]})),r)}function YO(e,t,n){let r=Object.create(null),i=Object.create(null),a=[];for(let o of t){let c=oV(o);a.push(c),r[o.name]=c,i[o.no]=c}return{typeName:e,values:a,findName(o){return r[o]},findNumber(o){return i[o]}}}function sV(e,t,n){let r={};for(let i of t){let a=oV(i);r[a.localName]=a.no,r[a.no]=a.localName}return QO(r,e,t,n),r}function oV(e){return"localName"in e?e:Object.assign(Object.assign({},e),{localName:e.name})}f();N();m();f();N();m();var $e=class{equals(t){return this.getType().runtime.util.equals(this.getType(),this,t)}clone(){return this.getType().runtime.util.clone(this)}fromBinary(t,n){let r=this.getType(),i=r.runtime.bin,a=i.makeReadOptions(n);return i.readMessage(this,a.readerFactory(t),t.byteLength,a),this}fromJson(t,n){let r=this.getType(),i=r.runtime.json,a=i.makeReadOptions(n);return i.readMessage(r,t,a,this),this}fromJsonString(t,n){let r;try{r=JSON.parse(t)}catch(i){throw new Error(`cannot decode ${this.getType().typeName} from JSON: ${i instanceof Error?i.message:String(i)}`)}return this.fromJson(r,n)}toBinary(t){let n=this.getType(),r=n.runtime.bin,i=r.makeWriteOptions(t),a=i.writerFactory();return r.writeMessage(this,a,i),a.finish()}toJson(t){let n=this.getType(),r=n.runtime.json,i=r.makeWriteOptions(t);return r.writeMessage(this,i)}toJsonString(t){var n;let r=this.toJson(t);return JSON.stringify(r,null,(n=t==null?void 0:t.prettySpaces)!==null&&n!==void 0?n:0)}toJSON(){return this.toJson({emitDefaultValues:!0})}getType(){return Object.getPrototypeOf(this).constructor}};function uV(e,t,n,r){var i;let a=(i=r==null?void 0:r.localName)!==null&&i!==void 0?i:t.substring(t.lastIndexOf(".")+1),o={[a]:function(c){e.util.initFields(this),e.util.initPartial(c,this)}}[a];return Object.setPrototypeOf(o.prototype,new $e),Object.assign(o,{runtime:e,typeName:t,fields:e.util.newFieldList(n),fromBinary(c,l){return new o().fromBinary(c,l)},fromJson(c,l){return new o().fromJson(c,l)},fromJsonString(c,l){return new o().fromJsonString(c,l)},equals(c,l){return e.util.equals(o,c,l)}}),o}f();N();m();f();N();m();f();N();m();f();N();m();function lV(){let e=0,t=0;for(let r=0;r<28;r+=7){let i=this.buf[this.pos++];if(e|=(i&127)<>4,!(n&128))return this.assertBounds(),[e,t];for(let r=3;r<=31;r+=7){let i=this.buf[this.pos++];if(t|=(i&127)<>>a,c=!(!(o>>>7)&&t==0),l=(c?o|128:o)&255;if(n.push(l),!c)return}let r=e>>>28&15|(t&7)<<4,i=!!(t>>3);if(n.push((i?r|128:r)&255),!!i){for(let a=3;a<31;a=a+7){let o=t>>>a,c=!!(o>>>7),l=(c?o|128:o)&255;if(n.push(l),!c)return}n.push(t>>>31&1)}}var SE=4294967296;function JO(e){let t=e[0]==="-";t&&(e=e.slice(1));let n=1e6,r=0,i=0;function a(o,c){let l=Number(e.slice(o,c));i*=n,r=r*n+l,r>=SE&&(i=i+(r/SE|0),r=r%SE)}return a(-24,-18),a(-18,-12),a(-12,-6),a(-6),t?pV(r,i):zO(r,i)}function dV(e,t){let n=zO(e,t),r=n.hi&2147483648;r&&(n=pV(n.lo,n.hi));let i=HO(n.lo,n.hi);return r?"-"+i:i}function HO(e,t){if({lo:e,hi:t}=Ole(e,t),t<=2097151)return String(SE*t+e);let n=e&16777215,r=(e>>>24|t<<8)&16777215,i=t>>16&65535,a=n+r*6777216+i*6710656,o=r+i*8147497,c=i*2,l=1e7;return a>=l&&(o+=Math.floor(a/l),a%=l),o>=l&&(c+=Math.floor(o/l),o%=l),c.toString()+cV(o)+cV(a)}function Ole(e,t){return{lo:e>>>0,hi:t>>>0}}function zO(e,t){return{lo:e|0,hi:t|0}}function pV(e,t){return t=~t,e?e=~e+1:t+=1,zO(e,t)}var cV=e=>{let t=String(e);return"0000000".slice(t.length)+t};function WO(e,t){if(e>=0){for(;e>127;)t.push(e&127|128),e=e>>>7;t.push(e)}else{for(let n=0;n<9;n++)t.push(e&127|128),e=e>>7;t.push(1)}}function fV(){let e=this.buf[this.pos++],t=e&127;if(!(e&128))return this.assertBounds(),t;if(e=this.buf[this.pos++],t|=(e&127)<<7,!(e&128))return this.assertBounds(),t;if(e=this.buf[this.pos++],t|=(e&127)<<14,!(e&128))return this.assertBounds(),t;if(e=this.buf[this.pos++],t|=(e&127)<<21,!(e&128))return this.assertBounds(),t;e=this.buf[this.pos++],t|=(e&15)<<28;for(let n=5;e&128&&n<10;n++)e=this.buf[this.pos++];if(e&128)throw new Error("invalid varint");return this.assertBounds(),t>>>0}function Dle(){let e=new DataView(new ArrayBuffer(8));if(typeof BigInt=="function"&&typeof e.getBigInt64=="function"&&typeof e.getBigUint64=="function"&&typeof e.setBigInt64=="function"&&typeof e.setBigUint64=="function"&&(typeof O!="object"||typeof O.env!="object"||O.env.BUF_BIGINT_DISABLE!=="1")){let i=BigInt("-9223372036854775808"),a=BigInt("9223372036854775807"),o=BigInt("0"),c=BigInt("18446744073709551615");return{zero:BigInt(0),supported:!0,parse(l){let p=typeof l=="bigint"?l:BigInt(l);if(p>a||pc||psn(/^-?[0-9]+$/.test(i),`int64 invalid: ${i}`),r=i=>sn(/^[0-9]+$/.test(i),`uint64 invalid: ${i}`);return{zero:"0",supported:!1,parse(i){return typeof i!="string"&&(i=i.toString()),n(i),i},uParse(i){return typeof i!="string"&&(i=i.toString()),r(i),i},enc(i){return typeof i!="string"&&(i=i.toString()),n(i),JO(i)},uEnc(i){return typeof i!="string"&&(i=i.toString()),r(i),JO(i)},dec(i,a){return dV(i,a)},uDec(i,a){return HO(i,a)}}}var Gn=Dle();f();N();m();var Ne;(function(e){e[e.DOUBLE=1]="DOUBLE",e[e.FLOAT=2]="FLOAT",e[e.INT64=3]="INT64",e[e.UINT64=4]="UINT64",e[e.INT32=5]="INT32",e[e.FIXED64=6]="FIXED64",e[e.FIXED32=7]="FIXED32",e[e.BOOL=8]="BOOL",e[e.STRING=9]="STRING",e[e.BYTES=12]="BYTES",e[e.UINT32=13]="UINT32",e[e.SFIXED32=15]="SFIXED32",e[e.SFIXED64=16]="SFIXED64",e[e.SINT32=17]="SINT32",e[e.SINT64=18]="SINT64"})(Ne||(Ne={}));var Ta;(function(e){e[e.BIGINT=0]="BIGINT",e[e.STRING=1]="STRING"})(Ta||(Ta={}));function Ds(e,t,n){if(t===n)return!0;if(e==Ne.BYTES){if(!(t instanceof Uint8Array)||!(n instanceof Uint8Array)||t.length!==n.length)return!1;for(let r=0;r>>0)}raw(t){return this.buf.length&&(this.chunks.push(new Uint8Array(this.buf)),this.buf=[]),this.chunks.push(t),this}uint32(t){for(Up(t);t>127;)this.buf.push(t&127|128),t=t>>>7;return this.buf.push(t),this}int32(t){return Bl(t),WO(t,this.buf),this}bool(t){return this.buf.push(t?1:0),this}bytes(t){return this.uint32(t.byteLength),this.raw(t)}string(t){let n=this.textEncoder.encode(t);return this.uint32(n.byteLength),this.raw(n)}float(t){vE(t);let n=new Uint8Array(4);return new DataView(n.buffer).setFloat32(0,t,!0),this.raw(n)}double(t){let n=new Uint8Array(8);return new DataView(n.buffer).setFloat64(0,t,!0),this.raw(n)}fixed32(t){Up(t);let n=new Uint8Array(4);return new DataView(n.buffer).setUint32(0,t,!0),this.raw(n)}sfixed32(t){Bl(t);let n=new Uint8Array(4);return new DataView(n.buffer).setInt32(0,t,!0),this.raw(n)}sint32(t){return Bl(t),t=(t<<1^t>>31)>>>0,WO(t,this.buf),this}sfixed64(t){let n=new Uint8Array(8),r=new DataView(n.buffer),i=Gn.enc(t);return r.setInt32(0,i.lo,!0),r.setInt32(4,i.hi,!0),this.raw(n)}fixed64(t){let n=new Uint8Array(8),r=new DataView(n.buffer),i=Gn.uEnc(t);return r.setInt32(0,i.lo,!0),r.setInt32(4,i.hi,!0),this.raw(n)}int64(t){let n=Gn.enc(t);return OE(n.lo,n.hi,this.buf),this}sint64(t){let n=Gn.enc(t),r=n.hi>>31,i=n.lo<<1^r,a=(n.hi<<1|n.lo>>>31)^r;return OE(i,a,this.buf),this}uint64(t){let n=Gn.uEnc(t);return OE(n.lo,n.hi,this.buf),this}},AE=class{constructor(t,n){this.varint64=lV,this.uint32=fV,this.buf=t,this.len=t.length,this.pos=0,this.view=new DataView(t.buffer,t.byteOffset,t.byteLength),this.textDecoder=n!=null?n:new TextDecoder}tag(){let t=this.uint32(),n=t>>>3,r=t&7;if(n<=0||r<0||r>5)throw new Error("illegal tag: field no "+n+" wire type "+r);return[n,r]}skip(t){let n=this.pos;switch(t){case Un.Varint:for(;this.buf[this.pos++]&128;);break;case Un.Bit64:this.pos+=4;case Un.Bit32:this.pos+=4;break;case Un.LengthDelimited:let r=this.uint32();this.pos+=r;break;case Un.StartGroup:let i;for(;(i=this.tag()[1])!==Un.EndGroup;)this.skip(i);break;default:throw new Error("cant skip wire type "+t)}return this.assertBounds(),this.buf.subarray(n,this.pos)}assertBounds(){if(this.pos>this.len)throw new RangeError("premature EOF")}int32(){return this.uint32()|0}sint32(){let t=this.uint32();return t>>>1^-(t&1)}int64(){return Gn.dec(...this.varint64())}uint64(){return Gn.uDec(...this.varint64())}sint64(){let[t,n]=this.varint64(),r=-(t&1);return t=(t>>>1|(n&1)<<31)^r,n=n>>>1^r,Gn.dec(t,n)}bool(){let[t,n]=this.varint64();return t!==0||n!==0}fixed32(){return this.view.getUint32((this.pos+=4)-4,!0)}sfixed32(){return this.view.getInt32((this.pos+=4)-4,!0)}fixed64(){return Gn.uDec(this.sfixed32(),this.sfixed32())}sfixed64(){return Gn.dec(this.sfixed32(),this.sfixed32())}float(){return this.view.getFloat32((this.pos+=4)-4,!0)}double(){return this.view.getFloat64((this.pos+=8)-8,!0)}bytes(){let t=this.uint32(),n=this.pos;return this.pos+=t,this.assertBounds(),this.buf.subarray(n,n+t)}string(){return this.textDecoder.decode(this.bytes())}};function mV(e,t,n,r){let i;return{typeName:t,extendee:n,get field(){if(!i){let a=typeof r=="function"?r():r;a.name=t.split(".").pop(),a.jsonName=`[${t}]`,i=e.util.newFieldList([a]).list()[0]}return i},runtime:e}}function RE(e){let t=e.field.localName,n=Object.create(null);return n[t]=ble(e),[n,()=>n[t]]}function ble(e){let t=e.field;if(t.repeated)return[];if(t.default!==void 0)return t.default;switch(t.kind){case"enum":return t.T.values[0].no;case"scalar":return Ea(t.T,t.L);case"message":let n=t.T,r=new n;return n.fieldWrapper?n.fieldWrapper.unwrapField(r):r;case"map":throw"map fields are not allowed to be extensions"}}function NV(e,t){if(!t.repeated&&(t.kind=="enum"||t.kind=="scalar")){for(let n=e.length-1;n>=0;--n)if(e[n].no==t.no)return[e[n]];return[]}return e.filter(n=>n.no===t.no)}f();N();m();f();N();m();var bs="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split(""),FE=[];for(let e=0;e>4,o=a,i=2;break;case 2:n[r++]=(o&15)<<4|(a&60)>>2,o=a,i=3;break;case 3:n[r++]=(o&3)<<6|a,i=0;break}}if(i==1)throw Error("invalid base64 string.");return n.subarray(0,r)},enc(e){let t="",n=0,r,i=0;for(let a=0;a>2],i=(r&3)<<4,n=1;break;case 1:t+=bs[i|r>>4],i=(r&15)<<2,n=2;break;case 2:t+=bs[i|r>>6],t+=bs[r&63],n=0;break}return n&&(t+=bs[i],t+="=",n==1&&(t+="=")),t}};f();N();m();function TV(e,t,n){hV(t,e);let r=t.runtime.bin.makeReadOptions(n),i=NV(e.getType().runtime.bin.listUnknownFields(e),t.field),[a,o]=RE(t);for(let c of i)t.runtime.bin.readField(a,r.readerFactory(c.data),t.field,c.wireType,r);return o()}function EV(e,t,n,r){hV(t,e);let i=t.runtime.bin.makeReadOptions(r),a=t.runtime.bin.makeWriteOptions(r);if(ZO(e,t)){let p=e.getType().runtime.bin.listUnknownFields(e).filter(T=>T.no!=t.field.no);e.getType().runtime.bin.discardUnknownFields(e);for(let T of p)e.getType().runtime.bin.onUnknownField(e,T.no,T.wireType,T.data)}let o=a.writerFactory(),c=t.field;!c.opt&&!c.repeated&&(c.kind=="enum"||c.kind=="scalar")&&(c=Object.assign(Object.assign({},t.field),{opt:!0})),t.runtime.bin.writeField(c,n,o,a);let l=i.readerFactory(o.finish());for(;l.posr.no==t.field.no)}function hV(e,t){sn(e.extendee.typeName==t.getType().typeName,`extension ${e.typeName} can only be applied to message ${e.extendee.typeName}`)}f();N();m();function PE(e,t){let n=e.localName;if(e.repeated)return t[n].length>0;if(e.oneof)return t[e.oneof.localName].case===n;switch(e.kind){case"enum":case"scalar":return e.opt||e.req?t[n]!==void 0:e.kind=="enum"?t[n]!==e.T.values[0].no:!DE(e.T,t[n]);case"message":return t[n]!==void 0;case"map":return Object.keys(t[n]).length>0}}function eD(e,t){let n=e.localName,r=!e.opt&&!e.req;if(e.repeated)t[n]=[];else if(e.oneof)t[e.oneof.localName]={case:void 0};else switch(e.kind){case"map":t[n]={};break;case"enum":t[n]=r?e.T.values[0].no:void 0;break;case"scalar":t[n]=r?Ea(e.T,e.L):void 0;break;case"message":t[n]=void 0;break}}f();N();m();f();N();m();function ha(e,t){if(e===null||typeof e!="object"||!Object.getOwnPropertyNames($e.prototype).every(r=>r in e&&typeof e[r]=="function"))return!1;let n=e.getType();return n===null||typeof n!="function"||!("typeName"in n)||typeof n.typeName!="string"?!1:t===void 0?!0:n.typeName==t.typeName}function wE(e,t){return ha(t)||!e.fieldWrapper?t:e.fieldWrapper.wrapField(t)}var Wke={"google.protobuf.DoubleValue":Ne.DOUBLE,"google.protobuf.FloatValue":Ne.FLOAT,"google.protobuf.Int64Value":Ne.INT64,"google.protobuf.UInt64Value":Ne.UINT64,"google.protobuf.Int32Value":Ne.INT32,"google.protobuf.UInt32Value":Ne.UINT32,"google.protobuf.BoolValue":Ne.BOOL,"google.protobuf.StringValue":Ne.STRING,"google.protobuf.BytesValue":Ne.BYTES};var yV={ignoreUnknownFields:!1},IV={emitDefaultValues:!1,enumAsInteger:!1,useProtoFieldName:!1,prettySpaces:0};function Ale(e){return e?Object.assign(Object.assign({},yV),e):yV}function Rle(e){return e?Object.assign(Object.assign({},IV),e):IV}var BE=Symbol(),LE=Symbol();function vV(){return{makeReadOptions:Ale,makeWriteOptions:Rle,readMessage(e,t,n,r){if(t==null||Array.isArray(t)||typeof t!="object")throw new Error(`cannot decode message ${e.typeName} from JSON: ${Ha(t)}`);r=r!=null?r:new e;let i=new Map,a=n.typeRegistry;for(let[o,c]of Object.entries(t)){let l=e.fields.findJsonName(o);if(l){if(l.oneof){if(c===null&&l.kind=="scalar")continue;let p=i.get(l.oneof);if(p!==void 0)throw new Error(`cannot decode message ${e.typeName} from JSON: multiple keys for oneof "${l.oneof.name}" present: "${p}", "${o}"`);i.set(l.oneof,o)}gV(r,c,l,n,e)}else{let p=!1;if(a!=null&&a.findExtension&&o.startsWith("[")&&o.endsWith("]")){let T=a.findExtension(o.substring(1,o.length-1));if(T&&T.extendee.typeName==e.typeName){p=!0;let[y,g]=RE(T);gV(y,c,T.field,n,T),EV(r,T,g(),n)}}if(!p&&!n.ignoreUnknownFields)throw new Error(`cannot decode message ${e.typeName} from JSON: key "${o}" is unknown`)}}return r},writeMessage(e,t){let n=e.getType(),r={},i;try{for(i of n.fields.byNumber()){if(!PE(i,e)){if(i.req)throw"required field not set";if(!t.emitDefaultValues||!Ple(i))continue}let o=i.oneof?e[i.oneof.localName].value:e[i.localName],c=_V(i,o,t);c!==void 0&&(r[t.useProtoFieldName?i.name:i.jsonName]=c)}let a=t.typeRegistry;if(a!=null&&a.findExtensionFor)for(let o of n.runtime.bin.listUnknownFields(e)){let c=a.findExtensionFor(n.typeName,o.no);if(c&&ZO(e,c)){let l=TV(e,c,t),p=_V(c.field,l,t);p!==void 0&&(r[c.field.jsonName]=p)}}}catch(a){let o=i?`cannot encode field ${n.typeName}.${i.name} to JSON`:`cannot encode message ${n.typeName} to JSON`,c=a instanceof Error?a.message:String(a);throw new Error(o+(c.length>0?`: ${c}`:""))}return r},readScalar(e,t,n){return kp(e,t,n!=null?n:Ta.BIGINT,!0)},writeScalar(e,t,n){if(t!==void 0&&(n||DE(e,t)))return CE(e,t)},debug:Ha}}function Ha(e){if(e===null)return"null";switch(typeof e){case"object":return Array.isArray(e)?"array":"object";case"string":return e.length>100?"string":`"${e.split('"').join('\\"')}"`;default:return String(e)}}function gV(e,t,n,r,i){let a=n.localName;if(n.repeated){if(sn(n.kind!="map"),t===null)return;if(!Array.isArray(t))throw new Error(`cannot decode field ${i.typeName}.${n.name} from JSON: ${Ha(t)}`);let o=e[a];for(let c of t){if(c===null)throw new Error(`cannot decode field ${i.typeName}.${n.name} from JSON: ${Ha(c)}`);switch(n.kind){case"message":o.push(n.T.fromJson(c,r));break;case"enum":let l=tD(n.T,c,r.ignoreUnknownFields,!0);l!==LE&&o.push(l);break;case"scalar":try{o.push(kp(n.T,c,n.L,!0))}catch(p){let T=`cannot decode field ${i.typeName}.${n.name} from JSON: ${Ha(c)}`;throw p instanceof Error&&p.message.length>0&&(T+=`: ${p.message}`),new Error(T)}break}}}else if(n.kind=="map"){if(t===null)return;if(typeof t!="object"||Array.isArray(t))throw new Error(`cannot decode field ${i.typeName}.${n.name} from JSON: ${Ha(t)}`);let o=e[a];for(let[c,l]of Object.entries(t)){if(l===null)throw new Error(`cannot decode field ${i.typeName}.${n.name} from JSON: map value null`);let p;try{p=Fle(n.K,c)}catch(T){let y=`cannot decode map key for field ${i.typeName}.${n.name} from JSON: ${Ha(t)}`;throw T instanceof Error&&T.message.length>0&&(y+=`: ${T.message}`),new Error(y)}switch(n.V.kind){case"message":o[p]=n.V.T.fromJson(l,r);break;case"enum":let T=tD(n.V.T,l,r.ignoreUnknownFields,!0);T!==LE&&(o[p]=T);break;case"scalar":try{o[p]=kp(n.V.T,l,Ta.BIGINT,!0)}catch(y){let g=`cannot decode map value for field ${i.typeName}.${n.name} from JSON: ${Ha(t)}`;throw y instanceof Error&&y.message.length>0&&(g+=`: ${y.message}`),new Error(g)}break}}}else switch(n.oneof&&(e=e[n.oneof.localName]={case:a},a="value"),n.kind){case"message":let o=n.T;if(t===null&&o.typeName!="google.protobuf.Value")return;let c=e[a];ha(c)?c.fromJson(t,r):(e[a]=c=o.fromJson(t,r),o.fieldWrapper&&!n.oneof&&(e[a]=o.fieldWrapper.unwrapField(c)));break;case"enum":let l=tD(n.T,t,r.ignoreUnknownFields,!1);switch(l){case BE:eD(n,e);break;case LE:break;default:e[a]=l;break}break;case"scalar":try{let p=kp(n.T,t,n.L,!1);switch(p){case BE:eD(n,e);break;default:e[a]=p;break}}catch(p){let T=`cannot decode field ${i.typeName}.${n.name} from JSON: ${Ha(t)}`;throw p instanceof Error&&p.message.length>0&&(T+=`: ${p.message}`),new Error(T)}break}}function Fle(e,t){if(e===Ne.BOOL)switch(t){case"true":t=!0;break;case"false":t=!1;break}return kp(e,t,Ta.BIGINT,!0).toString()}function kp(e,t,n,r){if(t===null)return r?Ea(e,n):BE;switch(e){case Ne.DOUBLE:case Ne.FLOAT:if(t==="NaN")return Number.NaN;if(t==="Infinity")return Number.POSITIVE_INFINITY;if(t==="-Infinity")return Number.NEGATIVE_INFINITY;if(t===""||typeof t=="string"&&t.trim().length!==t.length||typeof t!="string"&&typeof t!="number")break;let i=Number(t);if(Number.isNaN(i)||!Number.isFinite(i))break;return e==Ne.FLOAT&&vE(i),i;case Ne.INT32:case Ne.FIXED32:case Ne.SFIXED32:case Ne.SINT32:case Ne.UINT32:let a;if(typeof t=="number"?a=t:typeof t=="string"&&t.length>0&&t.trim().length===t.length&&(a=Number(t)),a===void 0)break;return e==Ne.UINT32||e==Ne.FIXED32?Up(a):Bl(a),a;case Ne.INT64:case Ne.SFIXED64:case Ne.SINT64:if(typeof t!="number"&&typeof t!="string")break;let o=Gn.parse(t);return n?o.toString():o;case Ne.FIXED64:case Ne.UINT64:if(typeof t!="number"&&typeof t!="string")break;let c=Gn.uParse(t);return n?c.toString():c;case Ne.BOOL:if(typeof t!="boolean")break;return t;case Ne.STRING:if(typeof t!="string")break;try{encodeURIComponent(t)}catch(l){throw new Error("invalid UTF8")}return t;case Ne.BYTES:if(t==="")return new Uint8Array(0);if(typeof t!="string")break;return XO.dec(t)}throw new Error}function tD(e,t,n,r){if(t===null)return e.typeName=="google.protobuf.NullValue"?0:r?e.values[0].no:BE;switch(typeof t){case"number":if(Number.isInteger(t))return t;break;case"string":let i=e.findName(t);if(i!==void 0)return i.no;if(n)return LE;break}throw new Error(`cannot decode enum ${e.typeName} from JSON: ${Ha(t)}`)}function Ple(e){return e.repeated||e.kind=="map"?!0:!(e.oneof||e.kind=="message"||e.opt||e.req)}function _V(e,t,n){if(e.kind=="map"){sn(typeof t=="object"&&t!=null);let r={},i=Object.entries(t);switch(e.V.kind){case"scalar":for(let[o,c]of i)r[o.toString()]=CE(e.V.T,c);break;case"message":for(let[o,c]of i)r[o.toString()]=c.toJson(n);break;case"enum":let a=e.V.T;for(let[o,c]of i)r[o.toString()]=nD(a,c,n.enumAsInteger);break}return n.emitDefaultValues||i.length>0?r:void 0}if(e.repeated){sn(Array.isArray(t));let r=[];switch(e.kind){case"scalar":for(let i=0;i0?r:void 0}switch(e.kind){case"scalar":return CE(e.T,t);case"enum":return nD(e.T,t,n.enumAsInteger);case"message":return wE(e.T,t).toJson(n)}}function nD(e,t,n){var r;if(sn(typeof t=="number"),e.typeName=="google.protobuf.NullValue")return null;if(n)return t;let i=e.findNumber(t);return(r=i==null?void 0:i.name)!==null&&r!==void 0?r:t}function CE(e,t){switch(e){case Ne.INT32:case Ne.SFIXED32:case Ne.SINT32:case Ne.FIXED32:case Ne.UINT32:return sn(typeof t=="number"),t;case Ne.FLOAT:case Ne.DOUBLE:return sn(typeof t=="number"),Number.isNaN(t)?"NaN":t===Number.POSITIVE_INFINITY?"Infinity":t===Number.NEGATIVE_INFINITY?"-Infinity":t;case Ne.STRING:return sn(typeof t=="string"),t;case Ne.BOOL:return sn(typeof t=="boolean"),t;case Ne.UINT64:case Ne.FIXED64:case Ne.INT64:case Ne.SFIXED64:case Ne.SINT64:return sn(typeof t=="bigint"||typeof t=="string"||typeof t=="number"),t.toString();case Ne.BYTES:return sn(t instanceof Uint8Array),XO.enc(t)}}f();N();m();var Ul=Symbol("@bufbuild/protobuf/unknown-fields"),SV={readUnknownFields:!0,readerFactory:e=>new AE(e)},OV={writeUnknownFields:!0,writerFactory:()=>new bE};function wle(e){return e?Object.assign(Object.assign({},SV),e):SV}function Lle(e){return e?Object.assign(Object.assign({},OV),e):OV}function RV(){return{makeReadOptions:wle,makeWriteOptions:Lle,listUnknownFields(e){var t;return(t=e[Ul])!==null&&t!==void 0?t:[]},discardUnknownFields(e){delete e[Ul]},writeUnknownFields(e,t){let r=e[Ul];if(r)for(let i of r)t.tag(i.no,i.wireType).raw(i.data)},onUnknownField(e,t,n,r){let i=e;Array.isArray(i[Ul])||(i[Ul]=[]),i[Ul].push({no:t,wireType:n,data:r})},readMessage(e,t,n,r,i){let a=e.getType(),o=i?t.len:t.pos+n,c,l;for(;t.pos0&&(l=Ble),a){let g=e[o];if(r==Un.LengthDelimited&&c!=Ne.STRING&&c!=Ne.BYTES){let F=t.uint32()+t.pos;for(;t.posha(g,y)?g:new y(g));else{let g=o[i];y.fieldWrapper?y.typeName==="google.protobuf.BytesValue"?a[i]=xp(g):a[i]=g:a[i]=ha(g,y)?g:new y(g)}break}}},equals(e,t,n){return t===n?!0:!t||!n?!1:e.fields.byMember().every(r=>{let i=t[r.localName],a=n[r.localName];if(r.repeated){if(i.length!==a.length)return!1;switch(r.kind){case"message":return i.every((o,c)=>r.T.equals(o,a[c]));case"scalar":return i.every((o,c)=>Ds(r.T,o,a[c]));case"enum":return i.every((o,c)=>Ds(Ne.INT32,o,a[c]))}throw new Error(`repeated cannot contain ${r.kind}`)}switch(r.kind){case"message":return r.T.equals(i,a);case"enum":return Ds(Ne.INT32,i,a);case"scalar":return Ds(r.T,i,a);case"oneof":if(i.case!==a.case)return!1;let o=r.findField(i.case);if(o===void 0)return!0;switch(o.kind){case"message":return o.T.equals(i.value,a.value);case"enum":return Ds(Ne.INT32,i.value,a.value);case"scalar":return Ds(o.T,i.value,a.value)}throw new Error(`oneof cannot contain ${o.kind}`);case"map":let c=Object.keys(i).concat(Object.keys(a));switch(r.V.kind){case"message":let l=r.V.T;return c.every(T=>l.equals(i[T],a[T]));case"enum":return c.every(T=>Ds(Ne.INT32,i[T],a[T]));case"scalar":let p=r.V.T;return c.every(T=>Ds(p,i[T],a[T]))}break}})},clone(e){let t=e.getType(),n=new t,r=n;for(let i of t.fields.byMember()){let a=e[i.localName],o;if(i.repeated)o=a.map(ME);else if(i.kind=="map"){o=r[i.localName];for(let[c,l]of Object.entries(a))o[c]=ME(l)}else i.kind=="oneof"?o=i.findField(a.case)?{case:a.case,value:ME(a.value)}:{case:void 0}:o=ME(a);r[i.localName]=o}for(let i of t.runtime.bin.listUnknownFields(e))t.runtime.bin.onUnknownField(r,i.no,i.wireType,i.data);return n}}}function ME(e){if(e===void 0)return e;if(ha(e))return e.clone();if(e instanceof Uint8Array){let t=new Uint8Array(e.byteLength);return t.set(e),t}return e}function xp(e){return e instanceof Uint8Array?e:new Uint8Array(e)}function wV(e,t,n){return{syntax:e,json:vV(),bin:RV(),util:Object.assign(Object.assign({},PV()),{newFieldList:t,initFields:n}),makeMessageType(r,i,a){return uV(this,r,i,a)},makeEnum:sV,makeEnumType:YO,getEnumType:aV,makeExtension(r,i,a){return mV(this,r,i,a)}}}f();N();m();var xE=class{constructor(t,n){this._fields=t,this._normalizer=n}findJsonName(t){if(!this.jsonNames){let n={};for(let r of this.list())n[r.jsonName]=n[r.name]=r;this.jsonNames=n}return this.jsonNames[t]}find(t){if(!this.numbers){let n={};for(let r of this.list())n[r.no]=r;this.numbers=n}return this.numbers[t]}list(){return this.all||(this.all=this._normalizer(this._fields)),this.all}byNumber(){return this.numbersAsc||(this.numbersAsc=this.list().concat().sort((t,n)=>t.no-n.no)),this.numbersAsc}byMember(){if(!this.members){this.members=[];let t=this.members,n;for(let r of this.list())r.oneof?r.oneof!==n&&(n=r.oneof,t.push(n)):t.push(r)}return this.members}};f();N();m();f();N();m();f();N();m();function rD(e,t){let n=BV(e);return t?n:Vle(qle(n))}function LV(e){return rD(e,!1)}var CV=BV;function BV(e){let t=!1,n=[];for(let r=0;r`${e}$`,qle=e=>xle.has(e)?UV(e):e,Vle=e=>Mle.has(e)?UV(e):e;var qE=class{constructor(t){this.kind="oneof",this.repeated=!1,this.packed=!1,this.opt=!1,this.req=!1,this.default=void 0,this.fields=[],this.name=t,this.localName=LV(t)}addField(t){sn(t.oneof===this,`field ${t.name} not one of ${this.name}`),this.fields.push(t)}findField(t){if(!this._lookup){this._lookup=Object.create(null);for(let n=0;nnew xE(e,t=>kV(t,!0)),e=>{for(let t of e.getType().fields.byMember()){if(t.opt)continue;let n=t.localName,r=e;if(t.repeated){r[n]=[];continue}switch(t.kind){case"oneof":r[n]={case:void 0};break;case"enum":r[n]=0;break;case"map":r[n]={};break;case"scalar":r[n]=Ea(t.T,t.L);break;case"message":break}}});var kl;(function(e){e[e.OK=0]="OK",e[e.ERR=1]="ERR",e[e.ERR_NOT_FOUND=2]="ERR_NOT_FOUND",e[e.ERR_ALREADY_EXISTS=3]="ERR_ALREADY_EXISTS",e[e.ERR_INVALID_SUBGRAPH_SCHEMA=4]="ERR_INVALID_SUBGRAPH_SCHEMA",e[e.ERR_SUBGRAPH_COMPOSITION_FAILED=5]="ERR_SUBGRAPH_COMPOSITION_FAILED",e[e.ERR_SUBGRAPH_CHECK_FAILED=6]="ERR_SUBGRAPH_CHECK_FAILED",e[e.ERR_INVALID_LABELS=7]="ERR_INVALID_LABELS",e[e.ERR_ANALYTICS_DISABLED=8]="ERR_ANALYTICS_DISABLED",e[e.ERROR_NOT_AUTHENTICATED=9]="ERROR_NOT_AUTHENTICATED",e[e.ERR_OPENAI_DISABLED=10]="ERR_OPENAI_DISABLED",e[e.ERR_FREE_TRIAL_EXPIRED=11]="ERR_FREE_TRIAL_EXPIRED",e[e.ERROR_NOT_AUTHORIZED=12]="ERROR_NOT_AUTHORIZED",e[e.ERR_LIMIT_REACHED=13]="ERR_LIMIT_REACHED",e[e.ERR_DEPLOYMENT_FAILED=14]="ERR_DEPLOYMENT_FAILED",e[e.ERR_INVALID_NAME=15]="ERR_INVALID_NAME",e[e.ERR_UPGRADE_PLAN=16]="ERR_UPGRADE_PLAN",e[e.ERR_BAD_REQUEST=17]="ERR_BAD_REQUEST",e[e.ERR_SCHEMA_MISMATCH_WITH_APPROVED_PROPOSAL=18]="ERR_SCHEMA_MISMATCH_WITH_APPROVED_PROPOSAL"})(kl||(kl={}));x.util.setEnumType(kl,"wg.cosmo.common.EnumStatusCode",[{no:0,name:"OK"},{no:1,name:"ERR"},{no:2,name:"ERR_NOT_FOUND"},{no:3,name:"ERR_ALREADY_EXISTS"},{no:4,name:"ERR_INVALID_SUBGRAPH_SCHEMA"},{no:5,name:"ERR_SUBGRAPH_COMPOSITION_FAILED"},{no:6,name:"ERR_SUBGRAPH_CHECK_FAILED"},{no:7,name:"ERR_INVALID_LABELS"},{no:8,name:"ERR_ANALYTICS_DISABLED"},{no:9,name:"ERROR_NOT_AUTHENTICATED"},{no:10,name:"ERR_OPENAI_DISABLED"},{no:11,name:"ERR_FREE_TRIAL_EXPIRED"},{no:12,name:"ERROR_NOT_AUTHORIZED"},{no:13,name:"ERR_LIMIT_REACHED"},{no:14,name:"ERR_DEPLOYMENT_FAILED"},{no:15,name:"ERR_INVALID_NAME"},{no:16,name:"ERR_UPGRADE_PLAN"},{no:17,name:"ERR_BAD_REQUEST"},{no:18,name:"ERR_SCHEMA_MISMATCH_WITH_APPROVED_PROPOSAL"}]);var As;(function(e){e[e.GRAPHQL_SUBSCRIPTION_PROTOCOL_WS=0]="GRAPHQL_SUBSCRIPTION_PROTOCOL_WS",e[e.GRAPHQL_SUBSCRIPTION_PROTOCOL_SSE=1]="GRAPHQL_SUBSCRIPTION_PROTOCOL_SSE",e[e.GRAPHQL_SUBSCRIPTION_PROTOCOL_SSE_POST=2]="GRAPHQL_SUBSCRIPTION_PROTOCOL_SSE_POST"})(As||(As={}));x.util.setEnumType(As,"wg.cosmo.common.GraphQLSubscriptionProtocol",[{no:0,name:"GRAPHQL_SUBSCRIPTION_PROTOCOL_WS"},{no:1,name:"GRAPHQL_SUBSCRIPTION_PROTOCOL_SSE"},{no:2,name:"GRAPHQL_SUBSCRIPTION_PROTOCOL_SSE_POST"}]);var Rs;(function(e){e[e.GRAPHQL_WEBSOCKET_SUBPROTOCOL_AUTO=0]="GRAPHQL_WEBSOCKET_SUBPROTOCOL_AUTO",e[e.GRAPHQL_WEBSOCKET_SUBPROTOCOL_WS=1]="GRAPHQL_WEBSOCKET_SUBPROTOCOL_WS",e[e.GRAPHQL_WEBSOCKET_SUBPROTOCOL_TRANSPORT_WS=2]="GRAPHQL_WEBSOCKET_SUBPROTOCOL_TRANSPORT_WS"})(Rs||(Rs={}));x.util.setEnumType(Rs,"wg.cosmo.common.GraphQLWebsocketSubprotocol",[{no:0,name:"GRAPHQL_WEBSOCKET_SUBPROTOCOL_AUTO"},{no:1,name:"GRAPHQL_WEBSOCKET_SUBPROTOCOL_WS"},{no:2,name:"GRAPHQL_WEBSOCKET_SUBPROTOCOL_TRANSPORT_WS"}]);f();N();m();var iD;(function(e){e[e.RENDER_ARGUMENT_DEFAULT=0]="RENDER_ARGUMENT_DEFAULT",e[e.RENDER_ARGUMENT_AS_GRAPHQL_VALUE=1]="RENDER_ARGUMENT_AS_GRAPHQL_VALUE",e[e.RENDER_ARGUMENT_AS_ARRAY_CSV=2]="RENDER_ARGUMENT_AS_ARRAY_CSV"})(iD||(iD={}));x.util.setEnumType(iD,"wg.cosmo.node.v1.ArgumentRenderConfiguration",[{no:0,name:"RENDER_ARGUMENT_DEFAULT"},{no:1,name:"RENDER_ARGUMENT_AS_GRAPHQL_VALUE"},{no:2,name:"RENDER_ARGUMENT_AS_ARRAY_CSV"}]);var mc;(function(e){e[e.OBJECT_FIELD=0]="OBJECT_FIELD",e[e.FIELD_ARGUMENT=1]="FIELD_ARGUMENT"})(mc||(mc={}));x.util.setEnumType(mc,"wg.cosmo.node.v1.ArgumentSource",[{no:0,name:"OBJECT_FIELD"},{no:1,name:"FIELD_ARGUMENT"}]);var su;(function(e){e[e.STATIC=0]="STATIC",e[e.GRAPHQL=1]="GRAPHQL",e[e.PUBSUB=2]="PUBSUB"})(su||(su={}));x.util.setEnumType(su,"wg.cosmo.node.v1.DataSourceKind",[{no:0,name:"STATIC"},{no:1,name:"GRAPHQL"},{no:2,name:"PUBSUB"}]);var Oo;(function(e){e[e.PUBLISH=0]="PUBLISH",e[e.REQUEST=1]="REQUEST",e[e.SUBSCRIBE=2]="SUBSCRIBE"})(Oo||(Oo={}));x.util.setEnumType(Oo,"wg.cosmo.node.v1.EventType",[{no:0,name:"PUBLISH"},{no:1,name:"REQUEST"},{no:2,name:"SUBSCRIBE"}]);var ou;(function(e){e[e.STATIC_CONFIGURATION_VARIABLE=0]="STATIC_CONFIGURATION_VARIABLE",e[e.ENV_CONFIGURATION_VARIABLE=1]="ENV_CONFIGURATION_VARIABLE",e[e.PLACEHOLDER_CONFIGURATION_VARIABLE=2]="PLACEHOLDER_CONFIGURATION_VARIABLE"})(ou||(ou={}));x.util.setEnumType(ou,"wg.cosmo.node.v1.ConfigurationVariableKind",[{no:0,name:"STATIC_CONFIGURATION_VARIABLE"},{no:1,name:"ENV_CONFIGURATION_VARIABLE"},{no:2,name:"PLACEHOLDER_CONFIGURATION_VARIABLE"}]);var Nc;(function(e){e[e.GET=0]="GET",e[e.POST=1]="POST",e[e.PUT=2]="PUT",e[e.DELETE=3]="DELETE",e[e.OPTIONS=4]="OPTIONS"})(Nc||(Nc={}));x.util.setEnumType(Nc,"wg.cosmo.node.v1.HTTPMethod",[{no:0,name:"GET"},{no:1,name:"POST"},{no:2,name:"PUT"},{no:3,name:"DELETE"},{no:4,name:"OPTIONS"}]);var Fs=class Fs extends $e{constructor(n){super();v(this,"id","");v(this,"name","");v(this,"routingUrl","");x.util.initPartial(n,this)}static fromBinary(n,r){return new Fs().fromBinary(n,r)}static fromJson(n,r){return new Fs().fromJson(n,r)}static fromJsonString(n,r){return new Fs().fromJsonString(n,r)}static equals(n,r){return x.util.equals(Fs,n,r)}};v(Fs,"runtime",x),v(Fs,"typeName","wg.cosmo.node.v1.Subgraph"),v(Fs,"fields",x.util.newFieldList(()=>[{no:1,name:"id",kind:"scalar",T:9},{no:2,name:"name",kind:"scalar",T:9},{no:3,name:"routing_url",kind:"scalar",T:9}]));var VE=Fs,Ps=class Ps extends $e{constructor(n){super();v(this,"configByFeatureFlagName",{});x.util.initPartial(n,this)}static fromBinary(n,r){return new Ps().fromBinary(n,r)}static fromJson(n,r){return new Ps().fromJson(n,r)}static fromJsonString(n,r){return new Ps().fromJsonString(n,r)}static equals(n,r){return x.util.equals(Ps,n,r)}};v(Ps,"runtime",x),v(Ps,"typeName","wg.cosmo.node.v1.FeatureFlagRouterExecutionConfigs"),v(Ps,"fields",x.util.newFieldList(()=>[{no:1,name:"config_by_feature_flag_name",kind:"map",K:9,V:{kind:"message",T:sD}}]));var aD=Ps,ws=class ws extends $e{constructor(n){super();v(this,"engineConfig");v(this,"version","");v(this,"subgraphs",[]);x.util.initPartial(n,this)}static fromBinary(n,r){return new ws().fromBinary(n,r)}static fromJson(n,r){return new ws().fromJson(n,r)}static fromJsonString(n,r){return new ws().fromJsonString(n,r)}static equals(n,r){return x.util.equals(ws,n,r)}};v(ws,"runtime",x),v(ws,"typeName","wg.cosmo.node.v1.FeatureFlagRouterExecutionConfig"),v(ws,"fields",x.util.newFieldList(()=>[{no:1,name:"engine_config",kind:"message",T:Ml},{no:2,name:"version",kind:"scalar",T:9},{no:3,name:"subgraphs",kind:"message",T:VE,repeated:!0}]));var sD=ws,Ls=class Ls extends $e{constructor(n){super();v(this,"engineConfig");v(this,"version","");v(this,"subgraphs",[]);v(this,"featureFlagConfigs");v(this,"compatibilityVersion","");x.util.initPartial(n,this)}static fromBinary(n,r){return new Ls().fromBinary(n,r)}static fromJson(n,r){return new Ls().fromJson(n,r)}static fromJsonString(n,r){return new Ls().fromJsonString(n,r)}static equals(n,r){return x.util.equals(Ls,n,r)}};v(Ls,"runtime",x),v(Ls,"typeName","wg.cosmo.node.v1.RouterConfig"),v(Ls,"fields",x.util.newFieldList(()=>[{no:1,name:"engine_config",kind:"message",T:Ml},{no:2,name:"version",kind:"scalar",T:9},{no:3,name:"subgraphs",kind:"message",T:VE,repeated:!0},{no:4,name:"feature_flag_configs",kind:"message",T:aD,opt:!0},{no:5,name:"compatibility_version",kind:"scalar",T:9}]));var qp=Ls,Cs=class Cs extends $e{constructor(n){super();v(this,"code",kl.OK);v(this,"details");x.util.initPartial(n,this)}static fromBinary(n,r){return new Cs().fromBinary(n,r)}static fromJson(n,r){return new Cs().fromJson(n,r)}static fromJsonString(n,r){return new Cs().fromJsonString(n,r)}static equals(n,r){return x.util.equals(Cs,n,r)}};v(Cs,"runtime",x),v(Cs,"typeName","wg.cosmo.node.v1.Response"),v(Cs,"fields",x.util.newFieldList(()=>[{no:1,name:"code",kind:"enum",T:x.getEnumType(kl)},{no:2,name:"details",kind:"scalar",T:9,opt:!0}]));var oD=Cs,Bs=class Bs extends $e{constructor(n){super();v(this,"code",0);v(this,"message","");x.util.initPartial(n,this)}static fromBinary(n,r){return new Bs().fromBinary(n,r)}static fromJson(n,r){return new Bs().fromJson(n,r)}static fromJsonString(n,r){return new Bs().fromJsonString(n,r)}static equals(n,r){return x.util.equals(Bs,n,r)}};v(Bs,"runtime",x),v(Bs,"typeName","wg.cosmo.node.v1.ResponseStatus"),v(Bs,"fields",x.util.newFieldList(()=>[{no:1,name:"code",kind:"scalar",T:5},{no:2,name:"message",kind:"scalar",T:9}]));var MV=Bs,Us=class Us extends $e{constructor(n){super();v(this,"accountLimits");v(this,"graphPublicKey","");x.util.initPartial(n,this)}static fromBinary(n,r){return new Us().fromBinary(n,r)}static fromJson(n,r){return new Us().fromJson(n,r)}static fromJsonString(n,r){return new Us().fromJsonString(n,r)}static equals(n,r){return x.util.equals(Us,n,r)}};v(Us,"runtime",x),v(Us,"typeName","wg.cosmo.node.v1.RegistrationInfo"),v(Us,"fields",x.util.newFieldList(()=>[{no:1,name:"account_limits",kind:"message",T:cD},{no:2,name:"graph_public_key",kind:"scalar",T:9}]));var uD=Us,ks=class ks extends $e{constructor(n){super();v(this,"traceSamplingRate",0);x.util.initPartial(n,this)}static fromBinary(n,r){return new ks().fromBinary(n,r)}static fromJson(n,r){return new ks().fromJson(n,r)}static fromJsonString(n,r){return new ks().fromJsonString(n,r)}static equals(n,r){return x.util.equals(ks,n,r)}};v(ks,"runtime",x),v(ks,"typeName","wg.cosmo.node.v1.AccountLimits"),v(ks,"fields",x.util.newFieldList(()=>[{no:1,name:"trace_sampling_rate",kind:"scalar",T:2}]));var cD=ks,Ms=class Ms extends $e{constructor(t){super(),x.util.initPartial(t,this)}static fromBinary(t,n){return new Ms().fromBinary(t,n)}static fromJson(t,n){return new Ms().fromJson(t,n)}static fromJsonString(t,n){return new Ms().fromJsonString(t,n)}static equals(t,n){return x.util.equals(Ms,t,n)}};v(Ms,"runtime",x),v(Ms,"typeName","wg.cosmo.node.v1.SelfRegisterRequest"),v(Ms,"fields",x.util.newFieldList(()=>[]));var xV=Ms,xs=class xs extends $e{constructor(n){super();v(this,"response");v(this,"registrationInfo");x.util.initPartial(n,this)}static fromBinary(n,r){return new xs().fromBinary(n,r)}static fromJson(n,r){return new xs().fromJson(n,r)}static fromJsonString(n,r){return new xs().fromJsonString(n,r)}static equals(n,r){return x.util.equals(xs,n,r)}};v(xs,"runtime",x),v(xs,"typeName","wg.cosmo.node.v1.SelfRegisterResponse"),v(xs,"fields",x.util.newFieldList(()=>[{no:1,name:"response",kind:"message",T:oD},{no:2,name:"registrationInfo",kind:"message",T:uD,opt:!0}]));var qV=xs,qs=class qs extends $e{constructor(n){super();v(this,"defaultFlushInterval",Gn.zero);v(this,"datasourceConfigurations",[]);v(this,"fieldConfigurations",[]);v(this,"graphqlSchema","");v(this,"typeConfigurations",[]);v(this,"stringStorage",{});v(this,"graphqlClientSchema");x.util.initPartial(n,this)}static fromBinary(n,r){return new qs().fromBinary(n,r)}static fromJson(n,r){return new qs().fromJson(n,r)}static fromJsonString(n,r){return new qs().fromJsonString(n,r)}static equals(n,r){return x.util.equals(qs,n,r)}};v(qs,"runtime",x),v(qs,"typeName","wg.cosmo.node.v1.EngineConfiguration"),v(qs,"fields",x.util.newFieldList(()=>[{no:1,name:"defaultFlushInterval",kind:"scalar",T:3},{no:2,name:"datasource_configurations",kind:"message",T:Vp,repeated:!0},{no:3,name:"field_configurations",kind:"message",T:Gp,repeated:!0},{no:4,name:"graphqlSchema",kind:"scalar",T:9},{no:5,name:"type_configurations",kind:"message",T:lD,repeated:!0},{no:6,name:"string_storage",kind:"map",K:9,V:{kind:"scalar",T:9}},{no:7,name:"graphql_client_schema",kind:"scalar",T:9,opt:!0}]));var Ml=qs,Vs=class Vs extends $e{constructor(n){super();v(this,"kind",su.STATIC);v(this,"rootNodes",[]);v(this,"childNodes",[]);v(this,"overrideFieldPathFromAlias",!1);v(this,"customGraphql");v(this,"customStatic");v(this,"directives",[]);v(this,"requestTimeoutSeconds",Gn.zero);v(this,"id","");v(this,"keys",[]);v(this,"provides",[]);v(this,"requires",[]);v(this,"customEvents");v(this,"entityInterfaces",[]);v(this,"interfaceObjects",[]);x.util.initPartial(n,this)}static fromBinary(n,r){return new Vs().fromBinary(n,r)}static fromJson(n,r){return new Vs().fromJson(n,r)}static fromJsonString(n,r){return new Vs().fromJsonString(n,r)}static equals(n,r){return x.util.equals(Vs,n,r)}};v(Vs,"runtime",x),v(Vs,"typeName","wg.cosmo.node.v1.DataSourceConfiguration"),v(Vs,"fields",x.util.newFieldList(()=>[{no:1,name:"kind",kind:"enum",T:x.getEnumType(su)},{no:2,name:"root_nodes",kind:"message",T:xl,repeated:!0},{no:3,name:"child_nodes",kind:"message",T:xl,repeated:!0},{no:4,name:"override_field_path_from_alias",kind:"scalar",T:8},{no:5,name:"custom_graphql",kind:"message",T:Yp},{no:6,name:"custom_static",kind:"message",T:fD},{no:7,name:"directives",kind:"message",T:mD,repeated:!0},{no:8,name:"request_timeout_seconds",kind:"scalar",T:3},{no:9,name:"id",kind:"scalar",T:9},{no:10,name:"keys",kind:"message",T:fc,repeated:!0},{no:11,name:"provides",kind:"message",T:fc,repeated:!0},{no:12,name:"requires",kind:"message",T:fc,repeated:!0},{no:13,name:"custom_events",kind:"message",T:Ec},{no:14,name:"entity_interfaces",kind:"message",T:ql,repeated:!0},{no:15,name:"interface_objects",kind:"message",T:ql,repeated:!0}]));var Vp=Vs,js=class js extends $e{constructor(n){super();v(this,"name","");v(this,"sourceType",mc.OBJECT_FIELD);x.util.initPartial(n,this)}static fromBinary(n,r){return new js().fromBinary(n,r)}static fromJson(n,r){return new js().fromJson(n,r)}static fromJsonString(n,r){return new js().fromJsonString(n,r)}static equals(n,r){return x.util.equals(js,n,r)}};v(js,"runtime",x),v(js,"typeName","wg.cosmo.node.v1.ArgumentConfiguration"),v(js,"fields",x.util.newFieldList(()=>[{no:1,name:"name",kind:"scalar",T:9},{no:2,name:"source_type",kind:"enum",T:x.getEnumType(mc)}]));var jp=js,Ks=class Ks extends $e{constructor(n){super();v(this,"requiredAndScopes",[]);x.util.initPartial(n,this)}static fromBinary(n,r){return new Ks().fromBinary(n,r)}static fromJson(n,r){return new Ks().fromJson(n,r)}static fromJsonString(n,r){return new Ks().fromJsonString(n,r)}static equals(n,r){return x.util.equals(Ks,n,r)}};v(Ks,"runtime",x),v(Ks,"typeName","wg.cosmo.node.v1.Scopes"),v(Ks,"fields",x.util.newFieldList(()=>[{no:1,name:"required_and_scopes",kind:"scalar",T:9,repeated:!0}]));var Tc=Ks,Gs=class Gs extends $e{constructor(n){super();v(this,"requiresAuthentication",!1);v(this,"requiredOrScopes",[]);v(this,"requiredOrScopesByOr",[]);x.util.initPartial(n,this)}static fromBinary(n,r){return new Gs().fromBinary(n,r)}static fromJson(n,r){return new Gs().fromJson(n,r)}static fromJsonString(n,r){return new Gs().fromJsonString(n,r)}static equals(n,r){return x.util.equals(Gs,n,r)}};v(Gs,"runtime",x),v(Gs,"typeName","wg.cosmo.node.v1.AuthorizationConfiguration"),v(Gs,"fields",x.util.newFieldList(()=>[{no:1,name:"requires_authentication",kind:"scalar",T:8},{no:2,name:"required_or_scopes",kind:"message",T:Tc,repeated:!0},{no:3,name:"required_or_scopes_by_or",kind:"message",T:Tc,repeated:!0}]));var Kp=Gs,$s=class $s extends $e{constructor(n){super();v(this,"typeName","");v(this,"fieldName","");v(this,"argumentsConfiguration",[]);v(this,"authorizationConfiguration");v(this,"subscriptionFilterCondition");x.util.initPartial(n,this)}static fromBinary(n,r){return new $s().fromBinary(n,r)}static fromJson(n,r){return new $s().fromJson(n,r)}static fromJsonString(n,r){return new $s().fromJsonString(n,r)}static equals(n,r){return x.util.equals($s,n,r)}};v($s,"runtime",x),v($s,"typeName","wg.cosmo.node.v1.FieldConfiguration"),v($s,"fields",x.util.newFieldList(()=>[{no:1,name:"type_name",kind:"scalar",T:9},{no:2,name:"field_name",kind:"scalar",T:9},{no:3,name:"arguments_configuration",kind:"message",T:jp,repeated:!0},{no:4,name:"authorization_configuration",kind:"message",T:Kp},{no:5,name:"subscription_filter_condition",kind:"message",T:cu,opt:!0}]));var Gp=$s,Qs=class Qs extends $e{constructor(n){super();v(this,"typeName","");v(this,"renameTo","");x.util.initPartial(n,this)}static fromBinary(n,r){return new Qs().fromBinary(n,r)}static fromJson(n,r){return new Qs().fromJson(n,r)}static fromJsonString(n,r){return new Qs().fromJsonString(n,r)}static equals(n,r){return x.util.equals(Qs,n,r)}};v(Qs,"runtime",x),v(Qs,"typeName","wg.cosmo.node.v1.TypeConfiguration"),v(Qs,"fields",x.util.newFieldList(()=>[{no:1,name:"type_name",kind:"scalar",T:9},{no:2,name:"rename_to",kind:"scalar",T:9}]));var lD=Qs,Ys=class Ys extends $e{constructor(n){super();v(this,"typeName","");v(this,"fieldNames",[]);v(this,"externalFieldNames",[]);x.util.initPartial(n,this)}static fromBinary(n,r){return new Ys().fromBinary(n,r)}static fromJson(n,r){return new Ys().fromJson(n,r)}static fromJsonString(n,r){return new Ys().fromJsonString(n,r)}static equals(n,r){return x.util.equals(Ys,n,r)}};v(Ys,"runtime",x),v(Ys,"typeName","wg.cosmo.node.v1.TypeField"),v(Ys,"fields",x.util.newFieldList(()=>[{no:1,name:"type_name",kind:"scalar",T:9},{no:2,name:"field_names",kind:"scalar",T:9,repeated:!0},{no:3,name:"external_field_names",kind:"scalar",T:9,repeated:!0}]));var xl=Ys,Js=class Js extends $e{constructor(n){super();v(this,"fieldName","");v(this,"typeName","");x.util.initPartial(n,this)}static fromBinary(n,r){return new Js().fromBinary(n,r)}static fromJson(n,r){return new Js().fromJson(n,r)}static fromJsonString(n,r){return new Js().fromJsonString(n,r)}static equals(n,r){return x.util.equals(Js,n,r)}};v(Js,"runtime",x),v(Js,"typeName","wg.cosmo.node.v1.FieldCoordinates"),v(Js,"fields",x.util.newFieldList(()=>[{no:1,name:"field_name",kind:"scalar",T:9},{no:2,name:"type_name",kind:"scalar",T:9}]));var $p=Js,Hs=class Hs extends $e{constructor(n){super();v(this,"fieldCoordinatesPath",[]);v(this,"fieldPath",[]);x.util.initPartial(n,this)}static fromBinary(n,r){return new Hs().fromBinary(n,r)}static fromJson(n,r){return new Hs().fromJson(n,r)}static fromJsonString(n,r){return new Hs().fromJsonString(n,r)}static equals(n,r){return x.util.equals(Hs,n,r)}};v(Hs,"runtime",x),v(Hs,"typeName","wg.cosmo.node.v1.FieldSetCondition"),v(Hs,"fields",x.util.newFieldList(()=>[{no:1,name:"field_coordinates_path",kind:"message",T:$p,repeated:!0},{no:2,name:"field_path",kind:"scalar",T:9,repeated:!0}]));var Qp=Hs,zs=class zs extends $e{constructor(n){super();v(this,"typeName","");v(this,"fieldName","");v(this,"selectionSet","");v(this,"disableEntityResolver",!1);v(this,"conditions",[]);x.util.initPartial(n,this)}static fromBinary(n,r){return new zs().fromBinary(n,r)}static fromJson(n,r){return new zs().fromJson(n,r)}static fromJsonString(n,r){return new zs().fromJsonString(n,r)}static equals(n,r){return x.util.equals(zs,n,r)}};v(zs,"runtime",x),v(zs,"typeName","wg.cosmo.node.v1.RequiredField"),v(zs,"fields",x.util.newFieldList(()=>[{no:1,name:"type_name",kind:"scalar",T:9},{no:2,name:"field_name",kind:"scalar",T:9},{no:3,name:"selection_set",kind:"scalar",T:9},{no:4,name:"disable_entity_resolver",kind:"scalar",T:8},{no:5,name:"conditions",kind:"message",T:Qp,repeated:!0}]));var fc=zs,Ws=class Ws extends $e{constructor(n){super();v(this,"interfaceTypeName","");v(this,"concreteTypeNames",[]);x.util.initPartial(n,this)}static fromBinary(n,r){return new Ws().fromBinary(n,r)}static fromJson(n,r){return new Ws().fromJson(n,r)}static fromJsonString(n,r){return new Ws().fromJsonString(n,r)}static equals(n,r){return x.util.equals(Ws,n,r)}};v(Ws,"runtime",x),v(Ws,"typeName","wg.cosmo.node.v1.EntityInterfaceConfiguration"),v(Ws,"fields",x.util.newFieldList(()=>[{no:1,name:"interface_type_name",kind:"scalar",T:9},{no:2,name:"concrete_type_names",kind:"scalar",T:9,repeated:!0}]));var ql=Ws,Xs=class Xs extends $e{constructor(n){super();v(this,"url");v(this,"method",Nc.GET);v(this,"header",{});v(this,"body");v(this,"query",[]);v(this,"urlEncodeBody",!1);v(this,"mtls");v(this,"baseUrl");v(this,"path");v(this,"httpProxyUrl");x.util.initPartial(n,this)}static fromBinary(n,r){return new Xs().fromBinary(n,r)}static fromJson(n,r){return new Xs().fromJson(n,r)}static fromJsonString(n,r){return new Xs().fromJsonString(n,r)}static equals(n,r){return x.util.equals(Xs,n,r)}};v(Xs,"runtime",x),v(Xs,"typeName","wg.cosmo.node.v1.FetchConfiguration"),v(Xs,"fields",x.util.newFieldList(()=>[{no:1,name:"url",kind:"message",T:xr},{no:2,name:"method",kind:"enum",T:x.getEnumType(Nc)},{no:3,name:"header",kind:"map",K:9,V:{kind:"message",T:TD}},{no:4,name:"body",kind:"message",T:xr},{no:5,name:"query",kind:"message",T:ND,repeated:!0},{no:7,name:"url_encode_body",kind:"scalar",T:8},{no:8,name:"mtls",kind:"message",T:ED},{no:9,name:"base_url",kind:"message",T:xr},{no:10,name:"path",kind:"message",T:xr},{no:11,name:"http_proxy_url",kind:"message",T:xr,opt:!0}]));var dD=Xs,Zs=class Zs extends $e{constructor(n){super();v(this,"statusCode",Gn.zero);v(this,"typeName","");v(this,"injectStatusCodeIntoBody",!1);x.util.initPartial(n,this)}static fromBinary(n,r){return new Zs().fromBinary(n,r)}static fromJson(n,r){return new Zs().fromJson(n,r)}static fromJsonString(n,r){return new Zs().fromJsonString(n,r)}static equals(n,r){return x.util.equals(Zs,n,r)}};v(Zs,"runtime",x),v(Zs,"typeName","wg.cosmo.node.v1.StatusCodeTypeMapping"),v(Zs,"fields",x.util.newFieldList(()=>[{no:1,name:"status_code",kind:"scalar",T:3},{no:2,name:"type_name",kind:"scalar",T:9},{no:3,name:"inject_status_code_into_body",kind:"scalar",T:8}]));var VV=Zs,eo=class eo extends $e{constructor(n){super();v(this,"fetch");v(this,"subscription");v(this,"federation");v(this,"upstreamSchema");v(this,"customScalarTypeFields",[]);x.util.initPartial(n,this)}static fromBinary(n,r){return new eo().fromBinary(n,r)}static fromJson(n,r){return new eo().fromJson(n,r)}static fromJsonString(n,r){return new eo().fromJsonString(n,r)}static equals(n,r){return x.util.equals(eo,n,r)}};v(eo,"runtime",x),v(eo,"typeName","wg.cosmo.node.v1.DataSourceCustom_GraphQL"),v(eo,"fields",x.util.newFieldList(()=>[{no:1,name:"fetch",kind:"message",T:dD},{no:2,name:"subscription",kind:"message",T:hD},{no:3,name:"federation",kind:"message",T:yD},{no:4,name:"upstream_schema",kind:"message",T:Wp},{no:6,name:"custom_scalar_type_fields",kind:"message",T:ID,repeated:!0}]));var Yp=eo,to=class to extends $e{constructor(n){super();v(this,"consumerName","");v(this,"streamName","");v(this,"consumerInactiveThreshold",0);x.util.initPartial(n,this)}static fromBinary(n,r){return new to().fromBinary(n,r)}static fromJson(n,r){return new to().fromJson(n,r)}static fromJsonString(n,r){return new to().fromJsonString(n,r)}static equals(n,r){return x.util.equals(to,n,r)}};v(to,"runtime",x),v(to,"typeName","wg.cosmo.node.v1.NatsStreamConfiguration"),v(to,"fields",x.util.newFieldList(()=>[{no:1,name:"consumer_name",kind:"scalar",T:9},{no:2,name:"stream_name",kind:"scalar",T:9},{no:3,name:"consumer_inactive_threshold",kind:"scalar",T:5}]));var Jp=to,no=class no extends $e{constructor(n){super();v(this,"engineEventConfiguration");v(this,"subjects",[]);v(this,"streamConfiguration");x.util.initPartial(n,this)}static fromBinary(n,r){return new no().fromBinary(n,r)}static fromJson(n,r){return new no().fromJson(n,r)}static fromJsonString(n,r){return new no().fromJsonString(n,r)}static equals(n,r){return x.util.equals(no,n,r)}};v(no,"runtime",x),v(no,"typeName","wg.cosmo.node.v1.NatsEventConfiguration"),v(no,"fields",x.util.newFieldList(()=>[{no:1,name:"engine_event_configuration",kind:"message",T:uu},{no:2,name:"subjects",kind:"scalar",T:9,repeated:!0},{no:3,name:"stream_configuration",kind:"message",T:Jp}]));var Hp=no,ro=class ro extends $e{constructor(n){super();v(this,"engineEventConfiguration");v(this,"topics",[]);x.util.initPartial(n,this)}static fromBinary(n,r){return new ro().fromBinary(n,r)}static fromJson(n,r){return new ro().fromJson(n,r)}static fromJsonString(n,r){return new ro().fromJsonString(n,r)}static equals(n,r){return x.util.equals(ro,n,r)}};v(ro,"runtime",x),v(ro,"typeName","wg.cosmo.node.v1.KafkaEventConfiguration"),v(ro,"fields",x.util.newFieldList(()=>[{no:1,name:"engine_event_configuration",kind:"message",T:uu},{no:2,name:"topics",kind:"scalar",T:9,repeated:!0}]));var zp=ro,io=class io extends $e{constructor(n){super();v(this,"engineEventConfiguration");v(this,"channels",[]);x.util.initPartial(n,this)}static fromBinary(n,r){return new io().fromBinary(n,r)}static fromJson(n,r){return new io().fromJson(n,r)}static fromJsonString(n,r){return new io().fromJsonString(n,r)}static equals(n,r){return x.util.equals(io,n,r)}};v(io,"runtime",x),v(io,"typeName","wg.cosmo.node.v1.RedisEventConfiguration"),v(io,"fields",x.util.newFieldList(()=>[{no:1,name:"engine_event_configuration",kind:"message",T:uu},{no:2,name:"channels",kind:"scalar",T:9,repeated:!0}]));var pD=io,ao=class ao extends $e{constructor(n){super();v(this,"providerId","");v(this,"type",Oo.PUBLISH);v(this,"typeName","");v(this,"fieldName","");x.util.initPartial(n,this)}static fromBinary(n,r){return new ao().fromBinary(n,r)}static fromJson(n,r){return new ao().fromJson(n,r)}static fromJsonString(n,r){return new ao().fromJsonString(n,r)}static equals(n,r){return x.util.equals(ao,n,r)}};v(ao,"runtime",x),v(ao,"typeName","wg.cosmo.node.v1.EngineEventConfiguration"),v(ao,"fields",x.util.newFieldList(()=>[{no:1,name:"provider_id",kind:"scalar",T:9},{no:2,name:"type",kind:"enum",T:x.getEnumType(Oo)},{no:3,name:"type_name",kind:"scalar",T:9},{no:4,name:"field_name",kind:"scalar",T:9}]));var uu=ao,so=class so extends $e{constructor(n){super();v(this,"nats",[]);v(this,"kafka",[]);v(this,"redis",[]);x.util.initPartial(n,this)}static fromBinary(n,r){return new so().fromBinary(n,r)}static fromJson(n,r){return new so().fromJson(n,r)}static fromJsonString(n,r){return new so().fromJsonString(n,r)}static equals(n,r){return x.util.equals(so,n,r)}};v(so,"runtime",x),v(so,"typeName","wg.cosmo.node.v1.DataSourceCustomEvents"),v(so,"fields",x.util.newFieldList(()=>[{no:1,name:"nats",kind:"message",T:Hp,repeated:!0},{no:2,name:"kafka",kind:"message",T:zp,repeated:!0},{no:3,name:"redis",kind:"message",T:pD,repeated:!0}]));var Ec=so,oo=class oo extends $e{constructor(n){super();v(this,"data");x.util.initPartial(n,this)}static fromBinary(n,r){return new oo().fromBinary(n,r)}static fromJson(n,r){return new oo().fromJson(n,r)}static fromJsonString(n,r){return new oo().fromJsonString(n,r)}static equals(n,r){return x.util.equals(oo,n,r)}};v(oo,"runtime",x),v(oo,"typeName","wg.cosmo.node.v1.DataSourceCustom_Static"),v(oo,"fields",x.util.newFieldList(()=>[{no:1,name:"data",kind:"message",T:xr}]));var fD=oo,uo=class uo extends $e{constructor(n){super();v(this,"kind",ou.STATIC_CONFIGURATION_VARIABLE);v(this,"staticVariableContent","");v(this,"environmentVariableName","");v(this,"environmentVariableDefaultValue","");v(this,"placeholderVariableName","");x.util.initPartial(n,this)}static fromBinary(n,r){return new uo().fromBinary(n,r)}static fromJson(n,r){return new uo().fromJson(n,r)}static fromJsonString(n,r){return new uo().fromJsonString(n,r)}static equals(n,r){return x.util.equals(uo,n,r)}};v(uo,"runtime",x),v(uo,"typeName","wg.cosmo.node.v1.ConfigurationVariable"),v(uo,"fields",x.util.newFieldList(()=>[{no:1,name:"kind",kind:"enum",T:x.getEnumType(ou)},{no:2,name:"static_variable_content",kind:"scalar",T:9},{no:3,name:"environment_variable_name",kind:"scalar",T:9},{no:4,name:"environment_variable_default_value",kind:"scalar",T:9},{no:5,name:"placeholder_variable_name",kind:"scalar",T:9}]));var xr=uo,co=class co extends $e{constructor(n){super();v(this,"directiveName","");v(this,"renameTo","");x.util.initPartial(n,this)}static fromBinary(n,r){return new co().fromBinary(n,r)}static fromJson(n,r){return new co().fromJson(n,r)}static fromJsonString(n,r){return new co().fromJsonString(n,r)}static equals(n,r){return x.util.equals(co,n,r)}};v(co,"runtime",x),v(co,"typeName","wg.cosmo.node.v1.DirectiveConfiguration"),v(co,"fields",x.util.newFieldList(()=>[{no:1,name:"directive_name",kind:"scalar",T:9},{no:2,name:"rename_to",kind:"scalar",T:9}]));var mD=co,lo=class lo extends $e{constructor(n){super();v(this,"name","");v(this,"value","");x.util.initPartial(n,this)}static fromBinary(n,r){return new lo().fromBinary(n,r)}static fromJson(n,r){return new lo().fromJson(n,r)}static fromJsonString(n,r){return new lo().fromJsonString(n,r)}static equals(n,r){return x.util.equals(lo,n,r)}};v(lo,"runtime",x),v(lo,"typeName","wg.cosmo.node.v1.URLQueryConfiguration"),v(lo,"fields",x.util.newFieldList(()=>[{no:1,name:"name",kind:"scalar",T:9},{no:2,name:"value",kind:"scalar",T:9}]));var ND=lo,po=class po extends $e{constructor(n){super();v(this,"values",[]);x.util.initPartial(n,this)}static fromBinary(n,r){return new po().fromBinary(n,r)}static fromJson(n,r){return new po().fromJson(n,r)}static fromJsonString(n,r){return new po().fromJsonString(n,r)}static equals(n,r){return x.util.equals(po,n,r)}};v(po,"runtime",x),v(po,"typeName","wg.cosmo.node.v1.HTTPHeader"),v(po,"fields",x.util.newFieldList(()=>[{no:1,name:"values",kind:"message",T:xr,repeated:!0}]));var TD=po,fo=class fo extends $e{constructor(n){super();v(this,"key");v(this,"cert");v(this,"insecureSkipVerify",!1);x.util.initPartial(n,this)}static fromBinary(n,r){return new fo().fromBinary(n,r)}static fromJson(n,r){return new fo().fromJson(n,r)}static fromJsonString(n,r){return new fo().fromJsonString(n,r)}static equals(n,r){return x.util.equals(fo,n,r)}};v(fo,"runtime",x),v(fo,"typeName","wg.cosmo.node.v1.MTLSConfiguration"),v(fo,"fields",x.util.newFieldList(()=>[{no:1,name:"key",kind:"message",T:xr},{no:2,name:"cert",kind:"message",T:xr},{no:3,name:"insecureSkipVerify",kind:"scalar",T:8}]));var ED=fo,mo=class mo extends $e{constructor(n){super();v(this,"enabled",!1);v(this,"url");v(this,"useSSE");v(this,"protocol");v(this,"websocketSubprotocol");x.util.initPartial(n,this)}static fromBinary(n,r){return new mo().fromBinary(n,r)}static fromJson(n,r){return new mo().fromJson(n,r)}static fromJsonString(n,r){return new mo().fromJsonString(n,r)}static equals(n,r){return x.util.equals(mo,n,r)}};v(mo,"runtime",x),v(mo,"typeName","wg.cosmo.node.v1.GraphQLSubscriptionConfiguration"),v(mo,"fields",x.util.newFieldList(()=>[{no:1,name:"enabled",kind:"scalar",T:8},{no:2,name:"url",kind:"message",T:xr},{no:3,name:"useSSE",kind:"scalar",T:8,opt:!0},{no:4,name:"protocol",kind:"enum",T:x.getEnumType(As),opt:!0},{no:5,name:"websocketSubprotocol",kind:"enum",T:x.getEnumType(Rs),opt:!0}]));var hD=mo,No=class No extends $e{constructor(n){super();v(this,"enabled",!1);v(this,"serviceSdl","");x.util.initPartial(n,this)}static fromBinary(n,r){return new No().fromBinary(n,r)}static fromJson(n,r){return new No().fromJson(n,r)}static fromJsonString(n,r){return new No().fromJsonString(n,r)}static equals(n,r){return x.util.equals(No,n,r)}};v(No,"runtime",x),v(No,"typeName","wg.cosmo.node.v1.GraphQLFederationConfiguration"),v(No,"fields",x.util.newFieldList(()=>[{no:1,name:"enabled",kind:"scalar",T:8},{no:2,name:"serviceSdl",kind:"scalar",T:9}]));var yD=No,To=class To extends $e{constructor(n){super();v(this,"key","");x.util.initPartial(n,this)}static fromBinary(n,r){return new To().fromBinary(n,r)}static fromJson(n,r){return new To().fromJson(n,r)}static fromJsonString(n,r){return new To().fromJsonString(n,r)}static equals(n,r){return x.util.equals(To,n,r)}};v(To,"runtime",x),v(To,"typeName","wg.cosmo.node.v1.InternedString"),v(To,"fields",x.util.newFieldList(()=>[{no:1,name:"key",kind:"scalar",T:9}]));var Wp=To,Eo=class Eo extends $e{constructor(n){super();v(this,"typeName","");v(this,"fieldName","");x.util.initPartial(n,this)}static fromBinary(n,r){return new Eo().fromBinary(n,r)}static fromJson(n,r){return new Eo().fromJson(n,r)}static fromJsonString(n,r){return new Eo().fromJsonString(n,r)}static equals(n,r){return x.util.equals(Eo,n,r)}};v(Eo,"runtime",x),v(Eo,"typeName","wg.cosmo.node.v1.SingleTypeField"),v(Eo,"fields",x.util.newFieldList(()=>[{no:1,name:"type_name",kind:"scalar",T:9},{no:2,name:"field_name",kind:"scalar",T:9}]));var ID=Eo,ho=class ho extends $e{constructor(n){super();v(this,"fieldPath",[]);v(this,"json","");x.util.initPartial(n,this)}static fromBinary(n,r){return new ho().fromBinary(n,r)}static fromJson(n,r){return new ho().fromJson(n,r)}static fromJsonString(n,r){return new ho().fromJsonString(n,r)}static equals(n,r){return x.util.equals(ho,n,r)}};v(ho,"runtime",x),v(ho,"typeName","wg.cosmo.node.v1.SubscriptionFieldCondition"),v(ho,"fields",x.util.newFieldList(()=>[{no:1,name:"field_path",kind:"scalar",T:9,repeated:!0},{no:2,name:"json",kind:"scalar",T:9}]));var Xp=ho,Qi=class Qi extends $e{constructor(n){super();v(this,"and",[]);v(this,"in");v(this,"not");v(this,"or",[]);x.util.initPartial(n,this)}static fromBinary(n,r){return new Qi().fromBinary(n,r)}static fromJson(n,r){return new Qi().fromJson(n,r)}static fromJsonString(n,r){return new Qi().fromJsonString(n,r)}static equals(n,r){return x.util.equals(Qi,n,r)}};v(Qi,"runtime",x),v(Qi,"typeName","wg.cosmo.node.v1.SubscriptionFilterCondition"),v(Qi,"fields",x.util.newFieldList(()=>[{no:1,name:"and",kind:"message",T:Qi,repeated:!0},{no:2,name:"in",kind:"message",T:Xp,opt:!0},{no:3,name:"not",kind:"message",T:Qi,opt:!0},{no:4,name:"or",kind:"message",T:Qi,repeated:!0}]));var cu=Qi,yo=class yo extends $e{constructor(n){super();v(this,"operations",[]);x.util.initPartial(n,this)}static fromBinary(n,r){return new yo().fromBinary(n,r)}static fromJson(n,r){return new yo().fromJson(n,r)}static fromJsonString(n,r){return new yo().fromJsonString(n,r)}static equals(n,r){return x.util.equals(yo,n,r)}};v(yo,"runtime",x),v(yo,"typeName","wg.cosmo.node.v1.CacheWarmerOperations"),v(yo,"fields",x.util.newFieldList(()=>[{no:1,name:"operations",kind:"message",T:gD,repeated:!0}]));var jV=yo,Io=class Io extends $e{constructor(n){super();v(this,"request");v(this,"client");x.util.initPartial(n,this)}static fromBinary(n,r){return new Io().fromBinary(n,r)}static fromJson(n,r){return new Io().fromJson(n,r)}static fromJsonString(n,r){return new Io().fromJsonString(n,r)}static equals(n,r){return x.util.equals(Io,n,r)}};v(Io,"runtime",x),v(Io,"typeName","wg.cosmo.node.v1.Operation"),v(Io,"fields",x.util.newFieldList(()=>[{no:1,name:"request",kind:"message",T:_D},{no:2,name:"client",kind:"message",T:OD}]));var gD=Io,go=class go extends $e{constructor(n){super();v(this,"operationName","");v(this,"query","");v(this,"extensions");x.util.initPartial(n,this)}static fromBinary(n,r){return new go().fromBinary(n,r)}static fromJson(n,r){return new go().fromJson(n,r)}static fromJsonString(n,r){return new go().fromJsonString(n,r)}static equals(n,r){return x.util.equals(go,n,r)}};v(go,"runtime",x),v(go,"typeName","wg.cosmo.node.v1.OperationRequest"),v(go,"fields",x.util.newFieldList(()=>[{no:1,name:"operation_name",kind:"scalar",T:9},{no:2,name:"query",kind:"scalar",T:9},{no:3,name:"extensions",kind:"message",T:vD}]));var _D=go,_o=class _o extends $e{constructor(n){super();v(this,"persistedQuery");x.util.initPartial(n,this)}static fromBinary(n,r){return new _o().fromBinary(n,r)}static fromJson(n,r){return new _o().fromJson(n,r)}static fromJsonString(n,r){return new _o().fromJsonString(n,r)}static equals(n,r){return x.util.equals(_o,n,r)}};v(_o,"runtime",x),v(_o,"typeName","wg.cosmo.node.v1.Extension"),v(_o,"fields",x.util.newFieldList(()=>[{no:1,name:"persisted_query",kind:"message",T:SD}]));var vD=_o,vo=class vo extends $e{constructor(n){super();v(this,"sha256Hash","");v(this,"version",0);x.util.initPartial(n,this)}static fromBinary(n,r){return new vo().fromBinary(n,r)}static fromJson(n,r){return new vo().fromJson(n,r)}static fromJsonString(n,r){return new vo().fromJsonString(n,r)}static equals(n,r){return x.util.equals(vo,n,r)}};v(vo,"runtime",x),v(vo,"typeName","wg.cosmo.node.v1.PersistedQuery"),v(vo,"fields",x.util.newFieldList(()=>[{no:1,name:"sha256_hash",kind:"scalar",T:9},{no:2,name:"version",kind:"scalar",T:5}]));var SD=vo,So=class So extends $e{constructor(n){super();v(this,"name","");v(this,"version","");x.util.initPartial(n,this)}static fromBinary(n,r){return new So().fromBinary(n,r)}static fromJson(n,r){return new So().fromJson(n,r)}static fromJsonString(n,r){return new So().fromJsonString(n,r)}static equals(n,r){return x.util.equals(So,n,r)}};v(So,"runtime",x),v(So,"typeName","wg.cosmo.node.v1.ClientInfo"),v(So,"fields",x.util.newFieldList(()=>[{no:1,name:"name",kind:"scalar",T:9},{no:2,name:"version",kind:"scalar",T:9}]));var OD=So;f();N();m();var KE=os(TE(),1);function jle(e){if(!e.conditions)return;let t=[];for(let n of e.conditions){let r=[];for(let i of n.fieldCoordinatesPath){let a=i.split(".");if(a.length!==2)throw new Error(`fatal: malformed conditional field coordinates "${i}" for field set "${e.selectionSet}".`);r.push(new $p({fieldName:a[1],typeName:a[0]}))}t.push(new Qp({fieldCoordinatesPath:r,fieldPath:n.fieldPath}))}return t}function DD(e,t,n){if(e)for(let r of e){let i=jle(r);t.push(new fc(M(M({typeName:n,fieldName:r.fieldName,selectionSet:r.selectionSet},r.disableEntityResolver?{disableEntityResolver:!0}:{}),i?{conditions:i}:{})))}}function KV(e){switch(e){case"publish":return Oo.PUBLISH;case"request":return Oo.REQUEST;case"subscribe":return Oo.SUBSCRIBE}}function GV(e){var n;let t={rootNodes:[],childNodes:[],keys:[],provides:[],events:new Ec({nats:[],kafka:[]}),requires:[],entityInterfaces:[],interfaceObjects:[]};for(let r of e.values()){let i=r.typeName,a=[...r.fieldNames],o=new xl({typeName:i,fieldNames:a});if(r.externalFieldNames&&r.externalFieldNames.size>0&&(o.externalFieldNames=[...r.externalFieldNames]),r.isRootNode?t.rootNodes.push(o):t.childNodes.push(o),r.entityInterfaceConcreteTypeNames){let p=new ql({interfaceTypeName:i,concreteTypeNames:[...r.entityInterfaceConcreteTypeNames]});r.isInterfaceObject?t.interfaceObjects.push(p):t.entityInterfaces.push(p)}DD(r.keys,t.keys,i),DD(r.provides,t.provides,i),DD(r.requires,t.requires,i);let c=[],l=[];for(let p of(n=r.events)!=null?n:[])switch(p.providerType){case KE.PROVIDER_TYPE_KAFKA:{l.push(new zp({engineEventConfiguration:new uu({fieldName:p.fieldName,providerId:p.providerId,type:KV(p.type),typeName:i}),topics:p.topics}));break}case KE.PROVIDER_TYPE_NATS:{c.push(new Hp(M({engineEventConfiguration:new uu({fieldName:p.fieldName,providerId:p.providerId,type:KV(p.type),typeName:i}),subjects:p.subjects},p.streamConfiguration?{streamConfiguration:new Jp({consumerInactiveThreshold:p.streamConfiguration.consumerInactiveThreshold,consumerName:p.streamConfiguration.consumerName,streamName:p.streamConfiguration.streamName})}:{})));break}default:throw new Error("Fatal: Unknown event provider.")}t.events.nats.push(...c),t.events.kafka.push(...l)}return t}function $V(e){var n,r;let t=[];for(let i of e){let a=i.argumentNames.map(T=>new jp({name:T,sourceType:mc.FIELD_ARGUMENT})),o=new Gp({argumentsConfiguration:a,fieldName:i.fieldName,typeName:i.typeName}),c=((n=i.requiredScopes)==null?void 0:n.map(T=>new Tc({requiredAndScopes:T})))||[],l=((r=i.requiredScopesByOR)==null?void 0:r.map(T=>new Tc({requiredAndScopes:T})))||[],p=c.length>0;if((i.requiresAuthentication||p)&&(o.authorizationConfiguration=new Kp({requiresAuthentication:i.requiresAuthentication||p,requiredOrScopes:c,requiredOrScopesByOr:l})),i.subscriptionFilterCondition){let T=new cu;jE(T,i.subscriptionFilterCondition),o.subscriptionFilterCondition=T}t.push(o)}return t}function jE(e,t){if(t.and!==void 0){let n=[];for(let r of t.and){let i=new cu;jE(i,r),n.push(i)}e.and=n;return}if(t.in!==void 0){e.in=new Xp({fieldPath:t.in.fieldPath,json:JSON.stringify(t.in.values)});return}if(t.not!==void 0){e.not=new cu,jE(e.not,t.not);return}if(t.or!==void 0){let n=[];for(let r of t.or){let i=new cu;jE(i,r),n.push(i)}e.or=n;return}throw new Error("Fatal: Incoming SubscriptionCondition object was malformed.")}f();N();m();function bD(e){return new Error(`Normalization failed to return a ${e}.`)}function QV(e){return new Error(`Invalid router compatibility version "${e}".`)}var Kle=(e,t)=>{let n=stringHash(t);return e.stringStorage[n]=t,new Wp({key:n})},Gle=e=>{switch(e){case"ws":return As.GRAPHQL_SUBSCRIPTION_PROTOCOL_WS;case"sse":return As.GRAPHQL_SUBSCRIPTION_PROTOCOL_SSE;case"sse_post":return As.GRAPHQL_SUBSCRIPTION_PROTOCOL_SSE_POST}throw new Error(`Unsupported subscription protocol '${e}'`)},$le=e=>{switch(e){case"auto":return Rs.GRAPHQL_WEBSOCKET_SUBPROTOCOL_AUTO;case"graphql-ws":return Rs.GRAPHQL_WEBSOCKET_SUBPROTOCOL_WS;case"graphql-transport-ws":return Rs.GRAPHQL_WEBSOCKET_SUBPROTOCOL_TRANSPORT_WS}throw new Error(`Unsupported websocket subprotocol '${e}'`)},JV=function(e){if(!Vl.ROUTER_COMPATIBILITY_VERSIONS.has(e.routerCompatibilityVersion))throw QV(e.routerCompatibilityVersion);let t=new Ml({defaultFlushInterval:BigInt(500),datasourceConfigurations:[],fieldConfigurations:[],graphqlSchema:"",stringStorage:{},typeConfigurations:[]});for(let n of e.subgraphs){if(!n.configurationDataByTypeName)throw bD("ConfigurationDataByTypeName");if(!n.schema)throw bD("GraphQLSchema");let r=Kle(t,tV((0,YV.lexicographicSortSchema)(n.schema))),{childNodes:i,entityInterfaces:a,events:o,interfaceObjects:c,keys:l,provides:p,requires:T,rootNodes:y}=GV(n.configurationDataByTypeName),g=Gle(n.subscriptionProtocol||"ws"),_=$le(n.websocketSubprotocol||"auto"),F,U,K;if(o.kafka.length>0||o.nats.length>0){F=su.PUBSUB,K=new Ec({kafka:o.kafka,nats:o.nats});let ee=de=>Vl.ROOT_TYPE_NAMES.has(de.typeName),W=0,Te=0;for(;W({id:n.id,name:n.name,routingUrl:n.url})),compatibilityVersion:`${e.routerCompatibilityVersion}:${Vl.COMPOSITION_VERSION}`})};f();N();m();var yc=os(Ae());function HV(e){let t;try{t=(0,yc.parse)(e.schema)}catch(n){throw new Error(`could not parse schema for Graph ${e.name}: ${n}`)}return{definitions:t,name:e.name,url:e.url}}function Qle(e){let t=(0,hc.federateSubgraphs)(e.map(HV),hc.LATEST_ROUTER_COMPATIBILITY_VERSION);if(!t.success)throw new Error(`could not federate schema: ${t.errors.map(n=>n.message).join(", ")}`);return{fieldConfigurations:t.fieldConfigurations,sdl:(0,yc.print)(t.federatedGraphAST)}}function Yle(e){let t=(0,hc.federateSubgraphs)(e.map(HV),hc.LATEST_ROUTER_COMPATIBILITY_VERSION);if(!t.success)throw new Error(`could not federate schema: ${t.errors.map(r=>r.message).join(", ")}`);return JV({federatedClientSDL:(0,yc.printSchema)(t.federatedGraphClientSchema),federatedSDL:(0,yc.printSchema)(t.federatedGraphSchema),fieldConfigurations:t.fieldConfigurations,routerCompatibilityVersion:hc.LATEST_ROUTER_COMPATIBILITY_VERSION,schemaVersionId:"",subgraphs:e.map((r,i)=>{var l,p;let a=t.subgraphConfigBySubgraphName.get(r.name),o=a==null?void 0:a.schema,c=a==null?void 0:a.configurationDataByTypeName;return{id:`${i}`,name:r.name,url:KO(r.url),sdl:r.schema,subscriptionUrl:KO((l=r.subscription_url)!=null?l:r.url),subscriptionProtocol:(p=r.subscription_protocol)!=null?p:"ws",websocketSubprotocol:r.subscription_protocol==="ws"?r.websocketSubprotocol||"auto":void 0,schema:o,configurationDataByTypeName:c}})}).toJsonString()}return Kf(Jle);})(); /*! Bundled license information: @jspm/core/nodelibs/browser/buffer.js: From 4c4293b983d940e6b8f696baa2dbe4e17f430a8c Mon Sep 17 00:00:00 2001 From: Alessandro Pagnin Date: Mon, 26 May 2025 08:28:57 +0200 Subject: [PATCH 065/126] chore: lint --- composition/src/router-configuration/types.ts | 5 +---- composition/src/v1/utils/constants.ts | 1 - composition/tests/v1/events.test.ts | 4 +--- 3 files changed, 2 insertions(+), 8 deletions(-) diff --git a/composition/src/router-configuration/types.ts b/composition/src/router-configuration/types.ts index 72908b2e0c..06b26dee16 100644 --- a/composition/src/router-configuration/types.ts +++ b/composition/src/router-configuration/types.ts @@ -35,10 +35,7 @@ export type RedisEventConfiguration = { type: RedisEventType; }; -export type EventConfiguration = - | KafkaEventConfiguration - | NatsEventConfiguration - | RedisEventConfiguration; +export type EventConfiguration = KafkaEventConfiguration | NatsEventConfiguration | RedisEventConfiguration; export type SubscriptionFilterValue = boolean | null | number | string; diff --git a/composition/src/v1/utils/constants.ts b/composition/src/v1/utils/constants.ts index 0089aa8576..aa00247731 100644 --- a/composition/src/v1/utils/constants.ts +++ b/composition/src/v1/utils/constants.ts @@ -419,7 +419,6 @@ export const TAG_DEFINITION: MutableDirectiveDefinitionNode = { repeatable: true, }; - // directive @edfs__redisPublish(channel: String!, providerId: String! = "default") on FIELD_DEFINITION export const EDFS_REDIS_PUBLISH_DEFINITION: DirectiveDefinitionNode = { arguments: [ diff --git a/composition/tests/v1/events.test.ts b/composition/tests/v1/events.test.ts index f47294eb92..8c60bb4620 100644 --- a/composition/tests/v1/events.test.ts +++ b/composition/tests/v1/events.test.ts @@ -866,7 +866,6 @@ describe('events Configuration tests', () => { ); }); - test('that an error is returned if a Redis subscribe subject references a valid argument and an invalid one', () => { const result = normalizeSubgraph( subgraphAS.definitions, @@ -2091,7 +2090,6 @@ const subgraphAR: Subgraph = { `), }; - const subgraphAS: Subgraph = { name: 'subgraph-as', url: '', @@ -2172,4 +2170,4 @@ const subgraphAW: Subgraph = { success: Boolean! } `), -}; \ No newline at end of file +}; From 5496d7eff8ac75e1bf5cfea672e81301e5393362 Mon Sep 17 00:00:00 2001 From: Alessandro Pagnin Date: Mon, 26 May 2025 15:25:43 +0200 Subject: [PATCH 066/126] chore: rename PublishAndRequestEventConfiguration to PublishEventConfiguration andd add MarshalJSONTemplate method, various fixes --- router-tests/events/redis_events_test.go | 2 + .../testenv/testdata/configWithEdfsRedis.json | 10018 ++++++++-------- router/pkg/pubsub/redis/adapter.go | 22 +- router/pkg/pubsub/redis/engine_datasource.go | 2 +- router/pkg/pubsub/redis/pubsub_datasource.go | 8 +- shared/src/router-config/builder.ts | 3 +- .../router-config/graphql-configuration.ts | 20 +- 7 files changed, 5126 insertions(+), 4949 deletions(-) diff --git a/router-tests/events/redis_events_test.go b/router-tests/events/redis_events_test.go index 3867a60b33..268c2b583b 100644 --- a/router-tests/events/redis_events_test.go +++ b/router-tests/events/redis_events_test.go @@ -29,6 +29,7 @@ func TestRedisEvents(t *testing.T) { if testing.Short() { t.Skip("skipping test in short mode.") } + t.Run("subscribe async", func(t *testing.T) { t.Parallel() @@ -868,6 +869,7 @@ func TestRedisEvents(t *testing.T) { testenv.Run(t, &testenv.Config{ RouterConfigJSONTemplate: testenv.ConfigWithEdfsRedisJSONTemplate, EnableRedis: true, + NoRetryClient: true, }, func(t *testing.T, xEnv *testenv.Environment) { var msgCh <-chan *redis.Message var started atomic.Bool diff --git a/router-tests/testenv/testdata/configWithEdfsRedis.json b/router-tests/testenv/testdata/configWithEdfsRedis.json index 20d8668efe..7e8927c849 100644 --- a/router-tests/testenv/testdata/configWithEdfsRedis.json +++ b/router-tests/testenv/testdata/configWithEdfsRedis.json @@ -1,5089 +1,5251 @@ { - "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 - }, - "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 - }, - "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 - }, - "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" - ] - }, - { - "typeName": "Mutation", - "fieldNames": [ - "addFact" - ] - }, - { - "typeName": "Employee", - "fieldNames": [ - "id", - "products", - "notes" - ] - }, - { - "typeName": "Consultancy", - "fieldNames": [ - "upc", - "name" - ] - }, - { - "typeName": "Cosmo", - "fieldNames": [ - "upc", - "name", - "repositoryURL" - ] - } - ], - "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 - }, - "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}\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" - }, - "upstreamSchema": { - "key": "c8cc058566134270eaf1cf6638137eec5a7de07e" - } - }, - "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 - }, - "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 - }, - "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 - }, - "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 - }, - "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": "GRAPHQL", - "rootNodes": [ - { - "typeName": "Mutation", - "fieldNames": [ - "updateEmployeeMyRedis", - "updateEmployeeMyRedisOnCustomChannel" - ] - }, - { - "typeName": "Subscription", - "fieldNames": [ - "employeeUpdatedMyRedis", - "employeeUpdates", - "filteredEmployeeUpdatedMyRedis" - ] - }, - { - "typeName": "Employee", - "externalFieldNames": [ - "id" - ] - } - ], - "childNodes": [ - { - "typeName": "edfs__PublishResult", - "fieldNames": [ - "success" - ] - } - ], - "overrideFieldPathFromAlias": true, - "customGraphql": { - "fetch": { - "url": {}, - "method": "POST", - "body": {}, - "baseUrl": {}, - "path": {} - }, - "subscription": { - "enabled": true - }, - "federation": { - "enabled": true, - "serviceSdl": "directive @edfs__natsRequest(subject: String!, providerId: String! = \"default\") on FIELD_DEFINITION\ndirective @edfs__natsPublish(subject: String!, providerId: String! = \"default\") on FIELD_DEFINITION\ndirective @edfs__natsSubscribe(subjects: [String!]!, providerId: String! = \"default\", streamConfiguration: edfs__NatsStreamConfiguration) on FIELD_DEFINITION\ndirective @openfed__subscriptionFilter(condition: openfed__SubscriptionFilterCondition!) on FIELD_DEFINITION\ndirective @edfs__kafkaPublish(topic: String!, providerId: String! = \"default\") on FIELD_DEFINITION\ndirective @edfs__kafkaSubscribe(topics: [String!]!, providerId: String! = \"default\") on FIELD_DEFINITION\ndirective @edfs__redisPublish(channel: String!, providerId: String! = \"default\") on FIELD_DEFINITION\ndirective @edfs__redisSubscribe(channels: [String!]!, providerId: String! = \"default\") on FIELD_DEFINITION\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\ntype Mutation {\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 Subscription {\n employeeUpdatedMyRedis(id: Int!): Employee! @edfs__redisSubscribe(channels: [\"employeeUpdatedMyRedis.{{ args.id }}\"], providerId: \"my-redis\")\n employeeUpdates: Employee! @edfs__redisSubscribe(channels: [\"employeeUpdatedMyRedis\"], providerId: \"my-redis\")\n filteredEmployeeUpdatedMyRedis(id: ID!): Employee!\n @edfs__redisSubscribe(channels: [\"employeeUpdatedMyRedis\"], providerId: \"my-redis\")\n @openfed__subscriptionFilter(condition: { IN: { fieldPath: \"id\", values: [1, 3, 4, 7, 11] } })\n}\n\ninput KafkaInput {\n ids: [Int!]!\n}\n\ntype Employee @key(fields: \"id\", resolvable: false) {\n id: Int! @external\n}\n\ntype edfs__PublishResult {\n success: Boolean!\n}\n\ninput edfs__NatsStreamConfiguration {\n consumerInactiveThreshold: Int! = 30\n consumerName: String!\n streamName: String!\n}\n" - }, - "upstreamSchema": { - "key": "838b649dcdb3e590186dfdf38cb1352512a148b5" - } - }, - "requestTimeoutSeconds": "10", - "id": "8", - "keys": [ - { - "typeName": "Employee", - "selectionSet": "id", - "disableEntityResolver": true - } - ] - } - ], - "fieldConfigurations": [ - { - "typeName": "Subscription", - "fieldName": "filteredEmployeeUpdatedMyRedis", - "argumentsConfiguration": [ - { - "name": "id", - "sourceType": "FIELD_ARGUMENT" - } - ], - "subscriptionFilterCondition": { - "in": { - "fieldPath": [ - "id" - ], - "json": "[1,3,4,7,11]" - } - } - }, - { - "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": "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": "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" - ] - }, + "engineConfig": { + "defaultFlushInterval": "500", + "datasourceConfigurations": [ { - "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": "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": "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" - ] + "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 }" + } + ] }, { - "requiredAndScopes": [ - "read:all" - ] - } - ], - "requiredOrScopesByOr": [ - { - "requiredAndScopes": [ - "read:employee", - "read:private" - ] + "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" + } + ] }, { - "requiredAndScopes": [ - "read:all" - ] - } - ] - } - }, - { - "typeName": "Query", - "fieldName": "topSecretFederationFacts", - "authorizationConfiguration": { - "requiresAuthentication": true, - "requiredOrScopes": [ - { - "requiredAndScopes": [ - "read:fact" - ] + "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" + } + ] }, { - "requiredAndScopes": [ - "read:all" - ] - } - ], - "requiredOrScopesByOr": [ - { - "requiredAndScopes": [ - "read:fact" - ] + "kind": "GRAPHQL", + "rootNodes": [ + { + "typeName": "Query", + "fieldNames": [ + "productTypes", + "topSecretFederationFacts", + "factTypes", + "sharedThings" + ] + }, + { + "typeName": "Mutation", + "fieldNames": [ + "addFact" + ] + }, + { + "typeName": "Employee", + "fieldNames": [ + "id", + "products", + "notes" + ] + }, + { + "typeName": "Consultancy", + "fieldNames": [ + "upc", + "name" + ] + }, + { + "typeName": "Cosmo", + "fieldNames": [ + "upc", + "name", + "repositoryURL" + ] + } + ], + "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}\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" + }, + "upstreamSchema": { + "key": "c8cc058566134270eaf1cf6638137eec5a7de07e" + } + }, + "requestTimeoutSeconds": "10", + "id": "3", + "keys": [ + { + "typeName": "Employee", + "selectionSet": "id" + }, + { + "typeName": "Consultancy", + "selectionSet": "upc" + }, + { + "typeName": "Cosmo", + "selectionSet": "upc" + } + ] }, { - "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" - ] + "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" + } + ] }, { - "requiredAndScopes": [ - "read:all" - ] - } - ], - "requiredOrScopesByOr": [ - { - "requiredAndScopes": [ - "read:scalar" - ] + "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" + } + ] }, { - "requiredAndScopes": [ - "read:all" - ] - } - ] - } - }, - { - "typeName": "DirectiveFact", - "fieldName": "factType", - "authorizationConfiguration": { - "requiresAuthentication": true - } - }, - { - "typeName": "DirectiveFact", - "fieldName": "description", - "authorizationConfiguration": { - "requiresAuthentication": true, - "requiredOrScopes": [ - { - "requiredAndScopes": [ - "read:scalar" - ] + "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" + } + ] }, { - "requiredAndScopes": [ - "read:all" - ] - } - ], - "requiredOrScopesByOr": [ - { - "requiredAndScopes": [ - "read:scalar" - ] + "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 }" + } + ] }, { - "requiredAndScopes": [ - "read:all" - ] + "kind": "PUBSUB", + "rootNodes": [ + { + "typeName": "Mutation", + "fieldNames": [ + "updateEmployeeMyRedis", + "updateEmployeeMyRedisOnCustomChannel" + ] + }, + { + "typeName": "Subscription", + "fieldNames": [ + "employeeUpdatedMyRedis", + "employeeUpdates", + "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": { + "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" + ] + } + ] + } } - ] - } - }, - { - "typeName": "EntityFact", - "fieldName": "factType", - "authorizationConfiguration": { - "requiresAuthentication": true - } - }, - { - "typeName": "EntityFact", - "fieldName": "description", - "authorizationConfiguration": { - "requiresAuthentication": true, - "requiredOrScopes": [ + ], + "fieldConfigurations": [ { - "requiredAndScopes": [ - "read:scalar" - ] + "typeName": "Subscription", + "fieldName": "filteredEmployeeUpdatedMyRedis", + "argumentsConfiguration": [ + { + "name": "id", + "sourceType": "FIELD_ARGUMENT" + } + ], + "subscriptionFilterCondition": { + "in": { + "fieldPath": [ + "id" + ], + "json": "[1,3,4,7,11]" + } + } }, { - "requiredAndScopes": [ - "read:all" - ] - } - ], - "requiredOrScopesByOr": [ - { - "requiredAndScopes": [ - "read:scalar" - ] + "typeName": "Query", + "fieldName": "employee", + "argumentsConfiguration": [ + { + "name": "id", + "sourceType": "FIELD_ARGUMENT" + } + ] }, { - "requiredAndScopes": [ - "read:all" - ] - } - ] - } - }, - { - "typeName": "MiscellaneousFact", - "fieldName": "description", - "authorizationConfiguration": { - "requiresAuthentication": true, - "requiredOrScopes": [ - { - "requiredAndScopes": [ - "read:scalar", - "read:miscellaneous" - ] + "typeName": "Query", + "fieldName": "employeeAsList", + "argumentsConfiguration": [ + { + "name": "id", + "sourceType": "FIELD_ARGUMENT" + } + ] }, { - "requiredAndScopes": [ - "read:all", - "read:miscellaneous" - ] - } - ], - "requiredOrScopesByOr": [ - { - "requiredAndScopes": [ - "read:scalar", - "read:miscellaneous" - ] + "typeName": "Query", + "fieldName": "teammates", + "argumentsConfiguration": [ + { + "name": "team", + "sourceType": "FIELD_ARGUMENT" + } + ] }, { - "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 \"\"\"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}\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 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 employeeUpdatedMyRedis(id: Int!): Employee!\n employeeUpdates: Employee!\n filteredEmployeeUpdatedMyRedis(id: 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 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 edfs__NatsStreamConfiguration {\n consumerInactiveThreshold: Int! = 30\n consumerName: String!\n streamName: 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}\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", - "c8cc058566134270eaf1cf6638137eec5a7de07e": "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 productTypes: [Products!]!\n sharedThings(numOfA: Int!, numOfB: Int!): [Thing!]! @shareable\n topSecretFederationFacts: [TopSecretFact!]! @requiresScopes(scopes: [[\"read:fact\"], [\"read:all\"]])\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", - "838b649dcdb3e590186dfdf38cb1352512a148b5": "schema {\n mutation: Mutation\n subscription: Subscription\n}\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 @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 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 Subscription {\n employeeUpdatedMyRedis(id: Int!): Employee! @edfs__redisSubscribe(channels: [\"employeeUpdatedMyRedis.{{ args.id }}\"], providerId: \"my-redis\")\n employeeUpdates: Employee! @edfs__redisSubscribe(channels: [\"employeeUpdatedMyRedis\"], providerId: \"my-redis\")\n filteredEmployeeUpdatedMyRedis(id: ID!): Employee! @edfs__redisSubscribe(channels: [\"employeeUpdatedMyRedis\"], providerId: \"my-redis\") @openfed__subscriptionFilter(condition: {IN: {fieldPath: \"id\", values: [1, 3, 4, 7, 11]}})\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 sharedThings(numOfA: Int!, numOfB: Int!): [Thing!]!\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}\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 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 employeeUpdatedMyRedis(id: Int!): Employee!\n employeeUpdates: Employee!\n filteredEmployeeUpdatedMyRedis(id: 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 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 edfs__NatsStreamConfiguration {\n consumerInactiveThreshold: Int! = 30\n consumerName: String!\n streamName: 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}\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}" - }, - "version": "1bb625ad-e179-496d-be2c-b97a967382f1", - "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" - } - ], - "featureFlagConfigs": { - "configByFeatureFlagName": { - "myff": { - "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 - }, - "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 }" - } - ] + "typeName": "Query", + "fieldName": "findEmployees", + "argumentsConfiguration": [ + { + "name": "criteria", + "sourceType": "FIELD_ARGUMENT" + } + ] }, { - "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 - }, - "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" - } - ] + "typeName": "Query", + "fieldName": "sharedThings", + "argumentsConfiguration": [ + { + "name": "numOfA", + "sourceType": "FIELD_ARGUMENT" + }, + { + "name": "numOfB", + "sourceType": "FIELD_ARGUMENT" + } + ] }, { - "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 - }, - "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" - } - ] + "typeName": "Query", + "fieldName": "headerValue", + "argumentsConfiguration": [ + { + "name": "name", + "sourceType": "FIELD_ARGUMENT" + } + ] }, { - "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 - }, - "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" - } - ] + "typeName": "Query", + "fieldName": "initPayloadValue", + "argumentsConfiguration": [ + { + "name": "key", + "sourceType": "FIELD_ARGUMENT" + } + ] }, { - "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 - }, - "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" - } - ] + "typeName": "Query", + "fieldName": "delay", + "argumentsConfiguration": [ + { + "name": "response", + "sourceType": "FIELD_ARGUMENT" + }, + { + "name": "ms", + "sourceType": "FIELD_ARGUMENT" + } + ] }, { - "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 - }, - "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" - } - ] + "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" + } + ] }, { - "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 - }, - "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" - } - ] + "typeName": "Query", + "fieldName": "longResponse", + "argumentsConfiguration": [ + { + "name": "artificialDelay", + "sourceType": "FIELD_ARGUMENT" + }, + { + "name": "bytes", + "sourceType": "FIELD_ARGUMENT" + } + ] }, { - "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 - }, - "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 }" - } - ] + "typeName": "Query", + "fieldName": "rootFieldWithListArg", + "argumentsConfiguration": [ + { + "name": "arg", + "sourceType": "FIELD_ARGUMENT" + } + ] }, { - "kind": "GRAPHQL", - "rootNodes": [ - { - "typeName": "Mutation", - "fieldNames": [ - "updateEmployeeMyRedis", - "updateEmployeeMyRedisOnCustomChannel" - ] - }, - { - "typeName": "Subscription", - "fieldNames": [ - "employeeUpdatedMyRedis", - "employeeUpdates", - "filteredEmployeeUpdatedMyRedis" - ] - }, - { - "typeName": "Employee", - "externalFieldNames": [ - "id" - ] - } - ], - "childNodes": [ - { - "typeName": "edfs__PublishResult", - "fieldNames": [ - "success" - ] - } - ], - "overrideFieldPathFromAlias": true, - "customGraphql": { - "fetch": { - "url": {}, - "method": "POST", - "body": {}, - "baseUrl": {}, - "path": {} - }, - "subscription": { - "enabled": true - }, - "federation": { - "enabled": true, - "serviceSdl": "directive @edfs__natsRequest(subject: String!, providerId: String! = \"default\") on FIELD_DEFINITION\ndirective @edfs__natsPublish(subject: String!, providerId: String! = \"default\") on FIELD_DEFINITION\ndirective @edfs__natsSubscribe(subjects: [String!]!, providerId: String! = \"default\", streamConfiguration: edfs__NatsStreamConfiguration) on FIELD_DEFINITION\ndirective @openfed__subscriptionFilter(condition: openfed__SubscriptionFilterCondition!) on FIELD_DEFINITION\ndirective @edfs__kafkaPublish(topic: String!, providerId: String! = \"default\") on FIELD_DEFINITION\ndirective @edfs__kafkaSubscribe(topics: [String!]!, providerId: String! = \"default\") on FIELD_DEFINITION\ndirective @edfs__redisPublish(channel: String!, providerId: String! = \"default\") on FIELD_DEFINITION\ndirective @edfs__redisSubscribe(channels: [String!]!, providerId: String! = \"default\") on FIELD_DEFINITION\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\ntype Mutation {\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 Subscription {\n employeeUpdatedMyRedis(id: Int!): Employee! @edfs__redisSubscribe(channels: [\"employeeUpdatedMyRedis.{{ args.id }}\"], providerId: \"my-redis\")\n employeeUpdates: Employee! @edfs__redisSubscribe(channels: [\"employeeUpdatedMyRedis\"], providerId: \"my-redis\")\n filteredEmployeeUpdatedMyRedis(id: ID!): Employee!\n @edfs__redisSubscribe(channels: [\"employeeUpdatedMyRedis\"], providerId: \"my-redis\")\n @openfed__subscriptionFilter(condition: { IN: { fieldPath: \"id\", values: [1, 3, 4, 7, 11] } })\n}\n\ninput KafkaInput {\n ids: [Int!]!\n}\n\ntype Employee @key(fields: \"id\", resolvable: false) {\n id: Int! @external\n}\n\ntype edfs__PublishResult {\n success: Boolean!\n}\n\ninput edfs__NatsStreamConfiguration {\n consumerInactiveThreshold: Int! = 30\n consumerName: String!\n streamName: String!\n}\n" - }, - "upstreamSchema": { - "key": "838b649dcdb3e590186dfdf38cb1352512a148b5" - } - }, - "requestTimeoutSeconds": "10", - "id": "8", - "keys": [ - { - "typeName": "Employee", - "selectionSet": "id", - "disableEntityResolver": true - } - ] - } - ], - "fieldConfigurations": [ - { - "typeName": "Subscription", - "fieldName": "filteredEmployeeUpdatedMyRedis", - "argumentsConfiguration": [ - { - "name": "id", - "sourceType": "FIELD_ARGUMENT" - } - ], - "subscriptionFilterCondition": { - "in": { - "fieldPath": [ - "id" - ], - "json": "[1,3,4,7,11]" - } - } + "typeName": "Query", + "fieldName": "rootFieldWithNestedListArg", + "argumentsConfiguration": [ + { + "name": "arg", + "sourceType": "FIELD_ARGUMENT" + } + ] }, { - "typeName": "Query", - "fieldName": "employee", - "argumentsConfiguration": [ - { - "name": "id", - "sourceType": "FIELD_ARGUMENT" - } - ] + "typeName": "Query", + "fieldName": "rootFieldWithListOfInputArg", + "argumentsConfiguration": [ + { + "name": "arg", + "sourceType": "FIELD_ARGUMENT" + } + ] }, { - "typeName": "Query", - "fieldName": "employeeAsList", - "argumentsConfiguration": [ - { - "name": "id", - "sourceType": "FIELD_ARGUMENT" - } - ] + "typeName": "Query", + "fieldName": "rootFieldWithListOfEnumArg", + "argumentsConfiguration": [ + { + "name": "arg", + "sourceType": "FIELD_ARGUMENT" + } + ] }, { - "typeName": "Query", - "fieldName": "teammates", - "argumentsConfiguration": [ - { - "name": "team", - "sourceType": "FIELD_ARGUMENT" - } - ] + "typeName": "Query", + "fieldName": "rootFieldWithInput", + "argumentsConfiguration": [ + { + "name": "arg", + "sourceType": "FIELD_ARGUMENT" + } + ] }, { - "typeName": "Query", - "fieldName": "findEmployees", - "argumentsConfiguration": [ - { - "name": "criteria", - "sourceType": "FIELD_ARGUMENT" - } - ] + "typeName": "Query", + "fieldName": "floatField", + "argumentsConfiguration": [ + { + "name": "arg", + "sourceType": "FIELD_ARGUMENT" + } + ] }, { - "typeName": "Query", - "fieldName": "headerValue", - "argumentsConfiguration": [ - { - "name": "name", - "sourceType": "FIELD_ARGUMENT" - } - ] + "typeName": "Mutation", + "fieldName": "updateEmployeeTag", + "argumentsConfiguration": [ + { + "name": "id", + "sourceType": "FIELD_ARGUMENT" + }, + { + "name": "tag", + "sourceType": "FIELD_ARGUMENT" + } + ] }, { - "typeName": "Query", - "fieldName": "initPayloadValue", - "argumentsConfiguration": [ - { - "name": "key", - "sourceType": "FIELD_ARGUMENT" - } - ] + "typeName": "Mutation", + "fieldName": "singleUpload", + "argumentsConfiguration": [ + { + "name": "file", + "sourceType": "FIELD_ARGUMENT" + } + ] }, { - "typeName": "Query", - "fieldName": "delay", - "argumentsConfiguration": [ - { - "name": "response", - "sourceType": "FIELD_ARGUMENT" - }, - { - "name": "ms", - "sourceType": "FIELD_ARGUMENT" - } - ] + "typeName": "Mutation", + "fieldName": "singleUploadWithInput", + "argumentsConfiguration": [ + { + "name": "arg", + "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": "Mutation", + "fieldName": "multipleUpload", + "argumentsConfiguration": [ + { + "name": "files", + "sourceType": "FIELD_ARGUMENT" + } + ] }, { - "typeName": "Query", - "fieldName": "longResponse", - "argumentsConfiguration": [ - { - "name": "artificialDelay", - "sourceType": "FIELD_ARGUMENT" - }, - { - "name": "bytes", - "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": "Query", - "fieldName": "rootFieldWithListArg", - "argumentsConfiguration": [ - { - "name": "arg", - "sourceType": "FIELD_ARGUMENT" - } - ] + "typeName": "Mutation", + "fieldName": "updateAvailability", + "argumentsConfiguration": [ + { + "name": "employeeID", + "sourceType": "FIELD_ARGUMENT" + }, + { + "name": "isAvailable", + "sourceType": "FIELD_ARGUMENT" + } + ] }, { - "typeName": "Query", - "fieldName": "rootFieldWithNestedListArg", - "argumentsConfiguration": [ - { - "name": "arg", - "sourceType": "FIELD_ARGUMENT" - } - ] + "typeName": "Mutation", + "fieldName": "updateMood", + "argumentsConfiguration": [ + { + "name": "employeeID", + "sourceType": "FIELD_ARGUMENT" + }, + { + "name": "mood", + "sourceType": "FIELD_ARGUMENT" + } + ] }, { - "typeName": "Query", - "fieldName": "rootFieldWithListOfInputArg", - "argumentsConfiguration": [ - { - "name": "arg", - "sourceType": "FIELD_ARGUMENT" - } - ] + "typeName": "Mutation", + "fieldName": "updateEmployeeMyRedis", + "argumentsConfiguration": [ + { + "name": "id", + "sourceType": "FIELD_ARGUMENT" + }, + { + "name": "update", + "sourceType": "FIELD_ARGUMENT" + } + ] }, { - "typeName": "Query", - "fieldName": "rootFieldWithListOfEnumArg", - "argumentsConfiguration": [ - { - "name": "arg", - "sourceType": "FIELD_ARGUMENT" - } - ] + "typeName": "Mutation", + "fieldName": "updateEmployeeMyRedisOnCustomChannel", + "argumentsConfiguration": [ + { + "name": "id", + "sourceType": "FIELD_ARGUMENT" + }, + { + "name": "update", + "sourceType": "FIELD_ARGUMENT" + } + ] }, { - "typeName": "Query", - "fieldName": "rootFieldWithInput", - "argumentsConfiguration": [ - { - "name": "arg", - "sourceType": "FIELD_ARGUMENT" - } - ] + "typeName": "Subscription", + "fieldName": "countEmp", + "argumentsConfiguration": [ + { + "name": "max", + "sourceType": "FIELD_ARGUMENT" + }, + { + "name": "intervalMilliseconds", + "sourceType": "FIELD_ARGUMENT" + } + ] }, { - "typeName": "Query", - "fieldName": "floatField", - "argumentsConfiguration": [ - { - "name": "arg", - "sourceType": "FIELD_ARGUMENT" - } - ] + "typeName": "Subscription", + "fieldName": "countEmp2", + "argumentsConfiguration": [ + { + "name": "max", + "sourceType": "FIELD_ARGUMENT" + }, + { + "name": "intervalMilliseconds", + "sourceType": "FIELD_ARGUMENT" + } + ] }, { - "typeName": "Query", - "fieldName": "sharedThings", - "argumentsConfiguration": [ - { - "name": "numOfA", - "sourceType": "FIELD_ARGUMENT" - }, - { - "name": "numOfB", - "sourceType": "FIELD_ARGUMENT" - } - ] + "typeName": "Subscription", + "fieldName": "countFor", + "argumentsConfiguration": [ + { + "name": "count", + "sourceType": "FIELD_ARGUMENT" + } + ] }, { - "typeName": "Mutation", - "fieldName": "updateEmployeeTag", - "argumentsConfiguration": [ - { - "name": "id", - "sourceType": "FIELD_ARGUMENT" - }, - { - "name": "tag", - "sourceType": "FIELD_ARGUMENT" - } - ] + "typeName": "Subscription", + "fieldName": "countHob", + "argumentsConfiguration": [ + { + "name": "max", + "sourceType": "FIELD_ARGUMENT" + }, + { + "name": "intervalMilliseconds", + "sourceType": "FIELD_ARGUMENT" + } + ] }, { - "typeName": "Mutation", - "fieldName": "singleUpload", - "argumentsConfiguration": [ - { - "name": "file", - "sourceType": "FIELD_ARGUMENT" - } - ] + "typeName": "Subscription", + "fieldName": "headerValue", + "argumentsConfiguration": [ + { + "name": "name", + "sourceType": "FIELD_ARGUMENT" + }, + { + "name": "repeat", + "sourceType": "FIELD_ARGUMENT" + } + ] }, { - "typeName": "Mutation", - "fieldName": "singleUploadWithInput", - "argumentsConfiguration": [ - { - "name": "arg", - "sourceType": "FIELD_ARGUMENT" - } - ] + "typeName": "Subscription", + "fieldName": "initPayloadValue", + "argumentsConfiguration": [ + { + "name": "key", + "sourceType": "FIELD_ARGUMENT" + }, + { + "name": "repeat", + "sourceType": "FIELD_ARGUMENT" + } + ] }, { - "typeName": "Mutation", - "fieldName": "multipleUpload", - "argumentsConfiguration": [ - { - "name": "files", - "sourceType": "FIELD_ARGUMENT" - } - ] + "typeName": "Subscription", + "fieldName": "initialPayload", + "argumentsConfiguration": [ + { + "name": "repeat", + "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": "Subscription", + "fieldName": "employeeUpdatedMyRedis", + "argumentsConfiguration": [ + { + "name": "id", + "sourceType": "FIELD_ARGUMENT" + } ] - } }, { - "typeName": "Mutation", - "fieldName": "updateAvailability", - "argumentsConfiguration": [ - { - "name": "employeeID", - "sourceType": "FIELD_ARGUMENT" - }, - { - "name": "isAvailable", - "sourceType": "FIELD_ARGUMENT" - } - ] + "typeName": "Documentation", + "fieldName": "url", + "argumentsConfiguration": [ + { + "name": "product", + "sourceType": "FIELD_ARGUMENT" + } + ] }, { - "typeName": "Mutation", - "fieldName": "updateMood", - "argumentsConfiguration": [ - { - "name": "employeeID", - "sourceType": "FIELD_ARGUMENT" - }, - { - "name": "mood", - "sourceType": "FIELD_ARGUMENT" - } - ] + "typeName": "Documentation", + "fieldName": "urls", + "argumentsConfiguration": [ + { + "name": "products", + "sourceType": "FIELD_ARGUMENT" + } + ] }, { - "typeName": "Mutation", - "fieldName": "updateEmployeeMyRedis", - "argumentsConfiguration": [ - { - "name": "id", - "sourceType": "FIELD_ARGUMENT" - }, - { - "name": "update", - "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": "Mutation", - "fieldName": "updateEmployeeMyRedisOnCustomChannel", - "argumentsConfiguration": [ - { - "name": "id", - "sourceType": "FIELD_ARGUMENT" - }, - { - "name": "update", - "sourceType": "FIELD_ARGUMENT" + "typeName": "Query", + "fieldName": "topSecretFederationFacts", + "authorizationConfiguration": { + "requiresAuthentication": true, + "requiredOrScopes": [ + { + "requiredAndScopes": [ + "read:fact" + ] + }, + { + "requiredAndScopes": [ + "read:all" + ] + } + ], + "requiredOrScopesByOr": [ + { + "requiredAndScopes": [ + "read:fact" + ] + }, + { + "requiredAndScopes": [ + "read:all" + ] + } + ] } - ] }, { - "typeName": "Subscription", - "fieldName": "countEmp", - "argumentsConfiguration": [ - { - "name": "max", - "sourceType": "FIELD_ARGUMENT" - }, - { - "name": "intervalMilliseconds", - "sourceType": "FIELD_ARGUMENT" + "typeName": "Query", + "fieldName": "secret", + "authorizationConfiguration": { + "requiresAuthentication": true, + "requiredOrScopes": [ + { + "requiredAndScopes": [ + "read:secret" + ] + } + ], + "requiredOrScopesByOr": [ + { + "requiredAndScopes": [ + "read:secret" + ] + } + ] } - ] }, { - "typeName": "Subscription", - "fieldName": "countEmp2", - "argumentsConfiguration": [ - { - "name": "max", - "sourceType": "FIELD_ARGUMENT" - }, - { - "name": "intervalMilliseconds", - "sourceType": "FIELD_ARGUMENT" + "typeName": "Query", + "fieldName": "factTypes", + "authorizationConfiguration": { + "requiresAuthentication": true } - ] }, { - "typeName": "Subscription", - "fieldName": "countFor", - "argumentsConfiguration": [ - { - "name": "count", - "sourceType": "FIELD_ARGUMENT" + "typeName": "TopSecretFact", + "fieldName": "factType", + "authorizationConfiguration": { + "requiresAuthentication": true } - ] }, { - "typeName": "Subscription", - "fieldName": "countHob", - "argumentsConfiguration": [ - { - "name": "max", - "sourceType": "FIELD_ARGUMENT" - }, - { - "name": "intervalMilliseconds", - "sourceType": "FIELD_ARGUMENT" + "typeName": "TopSecretFact", + "fieldName": "description", + "authorizationConfiguration": { + "requiresAuthentication": true, + "requiredOrScopes": [ + { + "requiredAndScopes": [ + "read:scalar" + ] + }, + { + "requiredAndScopes": [ + "read:all" + ] + } + ], + "requiredOrScopesByOr": [ + { + "requiredAndScopes": [ + "read:scalar" + ] + }, + { + "requiredAndScopes": [ + "read:all" + ] + } + ] } - ] }, { - "typeName": "Subscription", - "fieldName": "headerValue", - "argumentsConfiguration": [ - { - "name": "name", - "sourceType": "FIELD_ARGUMENT" - }, - { - "name": "repeat", - "sourceType": "FIELD_ARGUMENT" + "typeName": "DirectiveFact", + "fieldName": "factType", + "authorizationConfiguration": { + "requiresAuthentication": true } - ] }, { - "typeName": "Subscription", - "fieldName": "initPayloadValue", - "argumentsConfiguration": [ - { - "name": "key", - "sourceType": "FIELD_ARGUMENT" - }, - { - "name": "repeat", - "sourceType": "FIELD_ARGUMENT" + "typeName": "DirectiveFact", + "fieldName": "description", + "authorizationConfiguration": { + "requiresAuthentication": true, + "requiredOrScopes": [ + { + "requiredAndScopes": [ + "read:scalar" + ] + }, + { + "requiredAndScopes": [ + "read:all" + ] + } + ], + "requiredOrScopesByOr": [ + { + "requiredAndScopes": [ + "read:scalar" + ] + }, + { + "requiredAndScopes": [ + "read:all" + ] + } + ] } - ] }, { - "typeName": "Subscription", - "fieldName": "initialPayload", - "argumentsConfiguration": [ - { - "name": "repeat", - "sourceType": "FIELD_ARGUMENT" + "typeName": "EntityFact", + "fieldName": "factType", + "authorizationConfiguration": { + "requiresAuthentication": true } - ] }, { - "typeName": "Subscription", - "fieldName": "employeeUpdatedMyRedis", - "argumentsConfiguration": [ - { - "name": "id", - "sourceType": "FIELD_ARGUMENT" + "typeName": "EntityFact", + "fieldName": "description", + "authorizationConfiguration": { + "requiresAuthentication": true, + "requiredOrScopes": [ + { + "requiredAndScopes": [ + "read:scalar" + ] + }, + { + "requiredAndScopes": [ + "read:all" + ] + } + ], + "requiredOrScopesByOr": [ + { + "requiredAndScopes": [ + "read:scalar" + ] + }, + { + "requiredAndScopes": [ + "read:all" + ] + } + ] } - ] }, { - "typeName": "Documentation", - "fieldName": "url", - "argumentsConfiguration": [ - { - "name": "product", - "sourceType": "FIELD_ARGUMENT" + "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": "Documentation", - "fieldName": "urls", - "argumentsConfiguration": [ - { - "name": "products", - "sourceType": "FIELD_ARGUMENT" + "typeName": "MiscellaneousFact", + "fieldName": "factType", + "authorizationConfiguration": { + "requiresAuthentication": true } - ] - }, - { - "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}\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 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 employeeUpdatedMyRedis(id: Int!): Employee!\n employeeUpdates: Employee!\n filteredEmployeeUpdatedMyRedis(id: 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\ninput edfs__NatsStreamConfiguration {\n consumerInactiveThreshold: Int! = 30\n consumerName: String!\n streamName: 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 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": { + ], + "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 \"\"\"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}\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 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 employeeUpdatedMyRedis(id: Int!): Employee!\n employeeUpdates: Employee!\n filteredEmployeeUpdatedMyRedis(id: 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 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\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 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", + "c8cc058566134270eaf1cf6638137eec5a7de07e": "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 productTypes: [Products!]!\n sharedThings(numOfA: Int!, numOfB: Int!): [Thing!]! @shareable\n topSecretFederationFacts: [TopSecretFact!]! @requiresScopes(scopes: [[\"read:fact\"], [\"read:all\"]])\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", - "838b649dcdb3e590186dfdf38cb1352512a148b5": "schema {\n mutation: Mutation\n subscription: Subscription\n}\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 @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 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 Subscription {\n employeeUpdatedMyRedis(id: Int!): Employee! @edfs__redisSubscribe(channels: [\"employeeUpdatedMyRedis.{{ args.id }}\"], providerId: \"my-redis\")\n employeeUpdates: Employee! @edfs__redisSubscribe(channels: [\"employeeUpdatedMyRedis\"], providerId: \"my-redis\")\n filteredEmployeeUpdatedMyRedis(id: ID!): Employee! @edfs__redisSubscribe(channels: [\"employeeUpdatedMyRedis\"], providerId: \"my-redis\") @openfed__subscriptionFilter(condition: {IN: {fieldPath: \"id\", values: [1, 3, 4, 7, 11]}})\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}\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 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 employeeUpdatedMyRedis(id: Int!): Employee!\n employeeUpdates: Employee!\n filteredEmployeeUpdatedMyRedis(id: 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\ninput edfs__NatsStreamConfiguration {\n consumerInactiveThreshold: Int! = 30\n consumerName: String!\n streamName: 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 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}" + "759739c7be53a5653a2cede9e5dec9b32c9875df": "schema {\n mutation: Mutation\n subscription: Subscription\n}\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\ntype Mutation {\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 Subscription {\n employeeUpdatedMyRedis(id: Int!): Employee! @edfs__redisSubscribe(channels: [\"employeeUpdatedMyRedis.{{ args.id }}\"], providerId: \"my-redis\")\n employeeUpdates: Employee! @edfs__redisSubscribe(channels: [\"employeeUpdatedMyRedis\"], providerId: \"my-redis\")\n filteredEmployeeUpdatedMyRedis(id: ID!): Employee! @edfs__redisSubscribe(channels: [\"employeeUpdatedMyRedis\"], providerId: \"my-redis\") @openfed__subscriptionFilter(condition: {IN: {fieldPath: \"id\", values: [1, 3, 4, 7, 11]}})\n}\n\ninput UpdateEmployeeInput {\n email: String\n name: 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" }, - "version": "bffd6e26-ef4d-44d7-b32a-dbfb25525eda", - "subgraphs": [ - { + "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\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}\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 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 employeeUpdatedMyRedis(id: Int!): Employee!\n employeeUpdates: Employee!\n filteredEmployeeUpdatedMyRedis(id: 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 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\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 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}" + }, + "version": "54ebb491-3bdb-437b-85ec-2c53e68e55d4", + "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" - }, - { + "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" - } - ] - } - } - }, - "compatibilityVersion": "1:{{$COMPOSITION__VERSION}}" -} + } + ], + "featureFlagConfigs": { + "configByFeatureFlagName": { + "myff": { + "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": "Mutation", + "fieldNames": [ + "updateEmployeeMyRedis", + "updateEmployeeMyRedisOnCustomChannel" + ] + }, + { + "typeName": "Subscription", + "fieldNames": [ + "employeeUpdatedMyRedis", + "employeeUpdates", + "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": { + "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": "filteredEmployeeUpdatedMyRedis", + "argumentsConfiguration": [ + { + "name": "id", + "sourceType": "FIELD_ARGUMENT" + } + ], + "subscriptionFilterCondition": { + "in": { + "fieldPath": [ + "id" + ], + "json": "[1,3,4,7,11]" + } + } + }, + { + "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": "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": "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": "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}\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 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 employeeUpdatedMyRedis(id: Int!): Employee!\n employeeUpdates: Employee!\n filteredEmployeeUpdatedMyRedis(id: 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\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", + "759739c7be53a5653a2cede9e5dec9b32c9875df": "schema {\n mutation: Mutation\n subscription: Subscription\n}\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\ntype Mutation {\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 Subscription {\n employeeUpdatedMyRedis(id: Int!): Employee! @edfs__redisSubscribe(channels: [\"employeeUpdatedMyRedis.{{ args.id }}\"], providerId: \"my-redis\")\n employeeUpdates: Employee! @edfs__redisSubscribe(channels: [\"employeeUpdatedMyRedis\"], providerId: \"my-redis\")\n filteredEmployeeUpdatedMyRedis(id: ID!): Employee! @edfs__redisSubscribe(channels: [\"employeeUpdatedMyRedis\"], providerId: \"my-redis\") @openfed__subscriptionFilter(condition: {IN: {fieldPath: \"id\", values: [1, 3, 4, 7, 11]}})\n}\n\ninput UpdateEmployeeInput {\n email: String\n name: 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}\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 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 employeeUpdatedMyRedis(id: Int!): Employee!\n employeeUpdates: Employee!\n filteredEmployeeUpdatedMyRedis(id: 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\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}" + }, + "version": "cc6cf16b-668a-4061-869d-ad9a8423c334", + "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" + } + ] + } + } + }, + "compatibilityVersion": "1:{{$COMPOSITION__VERSION}}" +} \ No newline at end of file diff --git a/router/pkg/pubsub/redis/adapter.go b/router/pkg/pubsub/redis/adapter.go index 0845a166a6..9c577f2b1c 100644 --- a/router/pkg/pubsub/redis/adapter.go +++ b/router/pkg/pubsub/redis/adapter.go @@ -18,19 +18,23 @@ type SubscriptionEventConfiguration struct { Channels []string `json:"channels"` } -// PublishAndRequestEventConfiguration contains configuration for publish events -type PublishAndRequestEventConfiguration struct { +// PublishEventConfiguration contains configuration for publish events +type PublishEventConfiguration struct { ProviderID string `json:"providerId"` Channel string `json:"channel"` Data json.RawMessage `json:"data"` } +func (s *PublishEventConfiguration) MarshalJSONTemplate() (string, error) { + return fmt.Sprintf(`{"channel":"%s", "data": %s, "providerId":"%s"}`, s.Channel, s.Data, s.ProviderID), nil +} + // AdapterInterface defines the methods that a Redis adapter should implement type AdapterInterface interface { // Subscribe subscribes to the given events and sends updates to the updater Subscribe(ctx context.Context, event SubscriptionEventConfiguration, updater resolve.SubscriptionUpdater) error // Publish publishes the given event to the specified channel - Publish(ctx context.Context, event PublishAndRequestEventConfiguration) error + Publish(ctx context.Context, event PublishEventConfiguration) error // Startup initializes the adapter Startup(ctx context.Context) error // Shutdown gracefully shuts down the adapter @@ -46,7 +50,6 @@ func NewAdapter(logger *zap.Logger, urls []string) AdapterInterface { } type Adapter struct { - ctx context.Context conn rd.RDCloser logger *zap.Logger closeWg sync.WaitGroup @@ -65,7 +68,6 @@ func (p *Adapter) Startup(ctx context.Context) error { } p.conn = rdCloser - p.ctx = ctx return nil } @@ -80,7 +82,7 @@ func (p *Adapter) Subscribe(ctx context.Context, event SubscriptionEventConfigur zap.String("method", "subscribe"), zap.Strings("channels", event.Channels), ) - sub := p.conn.PSubscribe(p.ctx, event.Channels...) + sub := p.conn.PSubscribe(ctx, event.Channels...) msgChan := sub.Channel() p.closeWg.Add(1) @@ -94,17 +96,13 @@ func (p *Adapter) Subscribe(ctx context.Context, event SubscriptionEventConfigur case msg := <-msgChan: log.Debug("subscription update", zap.String("message_channel", msg.Channel), zap.String("data", msg.Payload)) updater.Update([]byte(msg.Payload)) - case <-p.ctx.Done(): + case <-ctx.Done(): // When the application context is done, we stop the subscriptions err = sub.PUnsubscribe(ctx, event.Channels...) if err != nil { log.Error(fmt.Sprintf("error unsubscribing from redis for topics %v", event.Channels), zap.Error(err)) } return - case <-ctx.Done(): - // When the subscription context is done, we stop the subscription - err = sub.PUnsubscribe(context.Background(), event.Channels...) - return } } }() @@ -112,7 +110,7 @@ func (p *Adapter) Subscribe(ctx context.Context, event SubscriptionEventConfigur return err } -func (p *Adapter) Publish(ctx context.Context, event PublishAndRequestEventConfiguration) error { +func (p *Adapter) Publish(ctx context.Context, event PublishEventConfiguration) error { log := p.logger.With( zap.String("provider_id", event.ProviderID), zap.String("method", "publish"), diff --git a/router/pkg/pubsub/redis/engine_datasource.go b/router/pkg/pubsub/redis/engine_datasource.go index cb89494d7f..b6ea1de1c2 100644 --- a/router/pkg/pubsub/redis/engine_datasource.go +++ b/router/pkg/pubsub/redis/engine_datasource.go @@ -61,7 +61,7 @@ type PublishDataSource struct { // Load processes a request to publish to Redis func (s *PublishDataSource) Load(ctx context.Context, input []byte, out *bytes.Buffer) error { - var publishConfiguration PublishAndRequestEventConfiguration + var publishConfiguration PublishEventConfiguration err := json.Unmarshal(input, &publishConfiguration) if err != nil { return err diff --git a/router/pkg/pubsub/redis/pubsub_datasource.go b/router/pkg/pubsub/redis/pubsub_datasource.go index 3e636e66e9..969cba1cb3 100644 --- a/router/pkg/pubsub/redis/pubsub_datasource.go +++ b/router/pkg/pubsub/redis/pubsub_datasource.go @@ -48,17 +48,13 @@ func (c *PubSubDataSource) ResolveDataSourceInput(eventData []byte) (string, err channel := channels[0] providerId := c.EventConfiguration.GetEngineEventConfiguration().GetProviderId() - evtCfg := PublishAndRequestEventConfiguration{ + evtCfg := PublishEventConfiguration{ ProviderID: providerId, Channel: channel, Data: eventData, } - object, err := json.Marshal(evtCfg) - if err != nil { - return "", fmt.Errorf("failed to marshal publish event configuration: %w", err) - } - return string(object), nil + return evtCfg.MarshalJSONTemplate() } // ResolveDataSourceSubscription returns the subscription data source diff --git a/shared/src/router-config/builder.ts b/shared/src/router-config/builder.ts index 9eddff24b2..0e207c287c 100644 --- a/shared/src/router-config/builder.ts +++ b/shared/src/router-config/builder.ts @@ -137,11 +137,12 @@ export const buildRouterConfig = function (input: Input): RouterConfig { let customGraphql: DataSourceCustom_GraphQL | undefined; // eslint-disable-next-line camelcase let customEvents: DataSourceCustomEvents | undefined; - if (events.kafka.length > 0 || events.nats.length > 0) { + if (events.kafka.length > 0 || events.nats.length > 0 || events.redis.length > 0) { kind = DataSourceKind.PUBSUB; customEvents = new DataSourceCustomEvents({ kafka: events.kafka, nats: events.nats, + redis: events.redis, }); // PUBSUB data sources cannot have root nodes other than // Query/Mutation/Subscription. Filter rootNodes in place diff --git a/shared/src/router-config/graphql-configuration.ts b/shared/src/router-config/graphql-configuration.ts index 6eb375f399..43a42645bb 100644 --- a/shared/src/router-config/graphql-configuration.ts +++ b/shared/src/router-config/graphql-configuration.ts @@ -13,6 +13,7 @@ import { KafkaEventConfiguration, NatsEventConfiguration, NatsStreamConfiguration, + RedisEventConfiguration, RequiredField, Scopes, SubscriptionFieldCondition, @@ -27,6 +28,7 @@ import { PROVIDER_TYPE_NATS, RequiredFieldConfiguration, SubscriptionCondition, + PROVIDER_TYPE_REDIS, } from '@wundergraph/composition'; export type DataSourceConfiguration = { @@ -115,7 +117,7 @@ export function configurationDatasToDataSourceConfiguration( childNodes: [], keys: [], provides: [], - events: new DataSourceCustomEvents({ nats: [], kafka: [] }), + events: new DataSourceCustomEvents({ nats: [], kafka: [], redis: [] }), requires: [], entityInterfaces: [], interfaceObjects: [], @@ -146,6 +148,7 @@ export function configurationDatasToDataSourceConfiguration( addRequiredFields(data.requires, output.requires, typeName); const natsEventConfigurations: NatsEventConfiguration[] = []; const kafkaEventConfigurations: KafkaEventConfiguration[] = []; + const redisEventConfigurations: RedisEventConfiguration[] = []; for (const event of data.events ?? []) { switch (event.providerType) { case PROVIDER_TYPE_KAFKA: { @@ -185,6 +188,20 @@ export function configurationDatasToDataSourceConfiguration( ); break; } + case PROVIDER_TYPE_REDIS: { + redisEventConfigurations.push( + new RedisEventConfiguration({ + engineEventConfiguration: new EngineEventConfiguration({ + fieldName: event.fieldName, + providerId: event.providerId, + type: eventType(event.type), + typeName, + }), + channels: event.channels, + }), + ); + break; + } default: { throw new Error(`Fatal: Unknown event provider.`); } @@ -192,6 +209,7 @@ export function configurationDatasToDataSourceConfiguration( } output.events.nats.push(...natsEventConfigurations); output.events.kafka.push(...kafkaEventConfigurations); + output.events.redis.push(...redisEventConfigurations); } return output; } From a150cc1eeb5aa5fb5d10de7686db0d72926c8341 Mon Sep 17 00:00:00 2001 From: Alessandro Pagnin Date: Mon, 26 May 2025 15:29:55 +0200 Subject: [PATCH 067/126] chore: compile index.global.js --- composition-go/index.global.js | 182 ++++++++++++++++----------------- 1 file changed, 91 insertions(+), 91 deletions(-) diff --git a/composition-go/index.global.js b/composition-go/index.global.js index 2d57c298f0..4bb80ef682 100644 --- a/composition-go/index.global.js +++ b/composition-go/index.global.js @@ -11,17 +11,17 @@ class URL { } } } -"use strict";var shim=(()=>{var bY=Object.create;var rd=Object.defineProperty,AY=Object.defineProperties,RY=Object.getOwnPropertyDescriptor,FY=Object.getOwnPropertyDescriptors,PY=Object.getOwnPropertyNames,rA=Object.getOwnPropertySymbols,wY=Object.getPrototypeOf,iA=Object.prototype.hasOwnProperty,LY=Object.prototype.propertyIsEnumerable;var nn=Math.pow,ny=(e,t,n)=>t in e?rd(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,M=(e,t)=>{for(var n in t||(t={}))iA.call(t,n)&&ny(e,n,t[n]);if(rA)for(var n of rA(t))LY.call(t,n)&&ny(e,n,t[n]);return e},Q=(e,t)=>AY(e,FY(t));var gu=(e,t)=>()=>(e&&(t=e(e=0)),t);var w=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),jf=(e,t)=>{for(var n in t)rd(e,n,{get:t[n],enumerable:!0})},aA=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of PY(t))!iA.call(e,i)&&i!==n&&rd(e,i,{get:()=>t[i],enumerable:!(r=RY(t,i))||r.enumerable});return e};var os=(e,t,n)=>(n=e!=null?bY(wY(e)):{},aA(t||!e||!e.__esModule?rd(n,"default",{value:e,enumerable:!0}):n,e)),Kf=e=>aA(rd({},"__esModule",{value:!0}),e);var v=(e,t,n)=>(ny(e,typeof t!="symbol"?t+"":t,n),n);var Si=(e,t,n)=>new Promise((r,i)=>{var a=l=>{try{c(n.next(l))}catch(p){i(p)}},o=l=>{try{c(n.throw(l))}catch(p){i(p)}},c=l=>l.done?r(l.value):Promise.resolve(l.value).then(a,o);c((n=n.apply(e,t)).next())});var f=gu(()=>{"use strict"});var O={};jf(O,{_debugEnd:()=>YA,_debugProcess:()=>QA,_events:()=>cR,_eventsCount:()=>lR,_exiting:()=>bA,_fatalExceptions:()=>jA,_getActiveHandles:()=>PA,_getActiveRequests:()=>FA,_kill:()=>LA,_linkedBinding:()=>OA,_maxListeners:()=>uR,_preload_modules:()=>aR,_rawDebug:()=>vA,_startProfilerIdleNotifier:()=>JA,_stopProfilerIdleNotifier:()=>HA,_tickCallback:()=>$A,abort:()=>ZA,addListener:()=>dR,allowedNodeEnvironmentFlags:()=>xA,arch:()=>lA,argv:()=>fA,argv0:()=>iR,assert:()=>qA,binding:()=>hA,chdir:()=>gA,config:()=>AA,cpuUsage:()=>Qf,cwd:()=>IA,debugPort:()=>rR,default:()=>IR,dlopen:()=>RA,domain:()=>DA,emit:()=>TR,emitWarning:()=>EA,env:()=>pA,execArgv:()=>mA,execPath:()=>nR,exit:()=>kA,features:()=>VA,hasUncaughtExceptionCaptureCallback:()=>GA,hrtime:()=>$f,kill:()=>UA,listeners:()=>yR,memoryUsage:()=>BA,moduleLoadList:()=>SA,nextTick:()=>oA,off:()=>fR,on:()=>cs,once:()=>pR,openStdin:()=>MA,pid:()=>eR,platform:()=>dA,ppid:()=>tR,prependListener:()=>ER,prependOnceListener:()=>hR,reallyExit:()=>wA,release:()=>_A,removeAllListeners:()=>NR,removeListener:()=>mR,resourceUsage:()=>CA,setSourceMapsEnabled:()=>sR,setUncaughtExceptionCaptureCallback:()=>KA,stderr:()=>WA,stdin:()=>XA,stdout:()=>zA,title:()=>cA,umask:()=>yA,uptime:()=>oR,version:()=>NA,versions:()=>TA});function ay(e){throw new Error("Node.js process "+e+" is not supported by JSPM core outside of Node.js")}function CY(){!Cc||!_u||(Cc=!1,_u.length?us=_u.concat(us):Gf=-1,us.length&&sA())}function sA(){if(!Cc){var e=setTimeout(CY,0);Cc=!0;for(var t=us.length;t;){for(_u=us,us=[];++Gf1)for(var n=1;n{"use strict";f();N();m();us=[],Cc=!1,Gf=-1;uA.prototype.run=function(){this.fun.apply(null,this.array)};cA="browser",lA="x64",dA="browser",pA={PATH:"/usr/bin",LANG:navigator.language+".UTF-8",PWD:"/",HOME:"/home",TMP:"/tmp"},fA=["/usr/bin/node"],mA=[],NA="v16.8.0",TA={},EA=function(e,t){console.warn((t?t+": ":"")+e)},hA=function(e){ay("binding")},yA=function(e){return 0},IA=function(){return"/"},gA=function(e){},_A={name:"node",sourceUrl:"",headersUrl:"",libUrl:""};vA=yr,SA=[];DA={},bA=!1,AA={};wA=yr,LA=yr,Qf=function(){return{}},CA=Qf,BA=Qf,UA=yr,kA=yr,MA=yr,xA={};VA={inspector:!1,debug:!1,uv:!1,ipv6:!1,tls_alpn:!1,tls_sni:!1,tls_ocsp:!1,tls:!1,cached_builtins:!0},jA=yr,KA=yr;$A=yr,QA=yr,YA=yr,JA=yr,HA=yr,zA=void 0,WA=void 0,XA=void 0,ZA=yr,eR=2,tR=1,nR="/bin/usr/node",rR=9229,iR="node",aR=[],sR=yr,Uo={now:typeof performance!="undefined"?performance.now.bind(performance):void 0,timing:typeof performance!="undefined"?performance.timing:void 0};Uo.now===void 0&&(ry=Date.now(),Uo.timing&&Uo.timing.navigationStart&&(ry=Uo.timing.navigationStart),Uo.now=()=>Date.now()-ry);iy=1e9;$f.bigint=function(e){var t=$f(e);return typeof BigInt=="undefined"?t[0]*iy+t[1]:BigInt(t[0]*iy)+BigInt(t[1])};uR=10,cR={},lR=0;dR=cs,pR=cs,fR=cs,mR=cs,NR=cs,TR=yr,ER=cs,hR=cs;IR={version:NA,versions:TA,arch:lA,platform:dA,release:_A,_rawDebug:vA,moduleLoadList:SA,binding:hA,_linkedBinding:OA,_events:cR,_eventsCount:lR,_maxListeners:uR,on:cs,addListener:dR,once:pR,off:fR,removeListener:mR,removeAllListeners:NR,emit:TR,prependListener:ER,prependOnceListener:hR,listeners:yR,domain:DA,_exiting:bA,config:AA,dlopen:RA,uptime:oR,_getActiveRequests:FA,_getActiveHandles:PA,reallyExit:wA,_kill:LA,cpuUsage:Qf,resourceUsage:CA,memoryUsage:BA,kill:UA,exit:kA,openStdin:MA,allowedNodeEnvironmentFlags:xA,assert:qA,features:VA,_fatalExceptions:jA,setUncaughtExceptionCaptureCallback:KA,hasUncaughtExceptionCaptureCallback:GA,emitWarning:EA,nextTick:oA,_tickCallback:$A,_debugProcess:QA,_debugEnd:YA,_startProfilerIdleNotifier:JA,_stopProfilerIdleNotifier:HA,stdout:zA,stdin:XA,stderr:WA,abort:ZA,umask:yA,chdir:gA,cwd:IA,env:pA,title:cA,argv:fA,execArgv:mA,pid:eR,ppid:tR,execPath:nR,debugPort:rR,hrtime:$f,argv0:iR,_preload_modules:aR,setSourceMapsEnabled:sR}});var m=gu(()=>{"use strict";gR()});function BY(){if(_R)return id;_R=!0,id.byteLength=c,id.toByteArray=p,id.fromByteArray=g;for(var e=[],t=[],n=typeof Uint8Array!="undefined"?Uint8Array:Array,r="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",i=0,a=r.length;i0)throw new Error("Invalid string. Length must be a multiple of 4");var U=_.indexOf("=");U===-1&&(U=F);var K=U===F?0:4-U%4;return[U,K]}function c(_){var F=o(_),U=F[0],K=F[1];return(U+K)*3/4-K}function l(_,F,U){return(F+U)*3/4-U}function p(_){var F,U=o(_),K=U[0],J=U[1],ee=new n(l(_,K,J)),W=0,Te=J>0?K-4:K,de;for(de=0;de>16&255,ee[W++]=F>>8&255,ee[W++]=F&255;return J===2&&(F=t[_.charCodeAt(de)]<<2|t[_.charCodeAt(de+1)]>>4,ee[W++]=F&255),J===1&&(F=t[_.charCodeAt(de)]<<10|t[_.charCodeAt(de+1)]<<4|t[_.charCodeAt(de+2)]>>2,ee[W++]=F>>8&255,ee[W++]=F&255),ee}function T(_){return e[_>>18&63]+e[_>>12&63]+e[_>>6&63]+e[_&63]}function y(_,F,U){for(var K,J=[],ee=F;eeTe?Te:W+ee));return K===1?(F=_[U-1],J.push(e[F>>2]+e[F<<4&63]+"==")):K===2&&(F=(_[U-2]<<8)+_[U-1],J.push(e[F>>10]+e[F>>4&63]+e[F<<2&63]+"=")),J.join("")}return id}function UY(){if(vR)return Yf;vR=!0;return Yf.read=function(e,t,n,r,i){var a,o,c=i*8-r-1,l=(1<>1,T=-7,y=n?i-1:0,g=n?-1:1,_=e[t+y];for(y+=g,a=_&(1<<-T)-1,_>>=-T,T+=c;T>0;a=a*256+e[t+y],y+=g,T-=8);for(o=a&(1<<-T)-1,a>>=-T,T+=r;T>0;o=o*256+e[t+y],y+=g,T-=8);if(a===0)a=1-p;else{if(a===l)return o?NaN:(_?-1:1)*(1/0);o=o+Math.pow(2,r),a=a-p}return(_?-1:1)*o*Math.pow(2,a-r)},Yf.write=function(e,t,n,r,i,a){var o,c,l,p=a*8-i-1,T=(1<>1,g=i===23?Math.pow(2,-24)-Math.pow(2,-77):0,_=r?0:a-1,F=r?1:-1,U=t<0||t===0&&1/t<0?1:0;for(t=Math.abs(t),isNaN(t)||t===1/0?(c=isNaN(t)?1:0,o=T):(o=Math.floor(Math.log(t)/Math.LN2),t*(l=Math.pow(2,-o))<1&&(o--,l*=2),o+y>=1?t+=g/l:t+=g*Math.pow(2,1-y),t*l>=2&&(o++,l/=2),o+y>=T?(c=0,o=T):o+y>=1?(c=(t*l-1)*Math.pow(2,i),o=o+y):(c=t*Math.pow(2,y-1)*Math.pow(2,i),o=0));i>=8;e[n+_]=c&255,_+=F,c/=256,i-=8);for(o=o<0;e[n+_]=o&255,_+=F,o/=256,p-=8);e[n+_-F]|=U*128},Yf}function kY(){if(SR)return vu;SR=!0;let e=BY(),t=UY(),n=typeof Symbol=="function"&&typeof Symbol.for=="function"?Symbol.for("nodejs.util.inspect.custom"):null;vu.Buffer=o,vu.SlowBuffer=J,vu.INSPECT_MAX_BYTES=50;let r=2147483647;vu.kMaxLength=r,o.TYPED_ARRAY_SUPPORT=i(),!o.TYPED_ARRAY_SUPPORT&&typeof console!="undefined"&&typeof console.error=="function"&&console.error("This browser lacks typed array (Uint8Array) support which is required by `buffer` v5.x. Use `buffer` v4.x if you require old browser support.");function i(){try{let A=new Uint8Array(1),h={foo:function(){return 42}};return Object.setPrototypeOf(h,Uint8Array.prototype),Object.setPrototypeOf(A,h),A.foo()===42}catch(A){return!1}}Object.defineProperty(o.prototype,"parent",{enumerable:!0,get:function(){if(o.isBuffer(this))return this.buffer}}),Object.defineProperty(o.prototype,"offset",{enumerable:!0,get:function(){if(o.isBuffer(this))return this.byteOffset}});function a(A){if(A>r)throw new RangeError('The value "'+A+'" is invalid for option "size"');let h=new Uint8Array(A);return Object.setPrototypeOf(h,o.prototype),h}function o(A,h,I){if(typeof A=="number"){if(typeof h=="string")throw new TypeError('The "string" argument must be of type string. Received type number');return T(A)}return c(A,h,I)}o.poolSize=8192;function c(A,h,I){if(typeof A=="string")return y(A,h);if(ArrayBuffer.isView(A))return _(A);if(A==null)throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof A);if(Mt(A,ArrayBuffer)||A&&Mt(A.buffer,ArrayBuffer)||typeof SharedArrayBuffer!="undefined"&&(Mt(A,SharedArrayBuffer)||A&&Mt(A.buffer,SharedArrayBuffer)))return F(A,h,I);if(typeof A=="number")throw new TypeError('The "value" argument must not be of type number. Received type number');let C=A.valueOf&&A.valueOf();if(C!=null&&C!==A)return o.from(C,h,I);let G=U(A);if(G)return G;if(typeof Symbol!="undefined"&&Symbol.toPrimitive!=null&&typeof A[Symbol.toPrimitive]=="function")return o.from(A[Symbol.toPrimitive]("string"),h,I);throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof A)}o.from=function(A,h,I){return c(A,h,I)},Object.setPrototypeOf(o.prototype,Uint8Array.prototype),Object.setPrototypeOf(o,Uint8Array);function l(A){if(typeof A!="number")throw new TypeError('"size" argument must be of type number');if(A<0)throw new RangeError('The value "'+A+'" is invalid for option "size"')}function p(A,h,I){return l(A),A<=0?a(A):h!==void 0?typeof I=="string"?a(A).fill(h,I):a(A).fill(h):a(A)}o.alloc=function(A,h,I){return p(A,h,I)};function T(A){return l(A),a(A<0?0:K(A)|0)}o.allocUnsafe=function(A){return T(A)},o.allocUnsafeSlow=function(A){return T(A)};function y(A,h){if((typeof h!="string"||h==="")&&(h="utf8"),!o.isEncoding(h))throw new TypeError("Unknown encoding: "+h);let I=ee(A,h)|0,C=a(I),G=C.write(A,h);return G!==I&&(C=C.slice(0,G)),C}function g(A){let h=A.length<0?0:K(A.length)|0,I=a(h);for(let C=0;C=r)throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+r.toString(16)+" bytes");return A|0}function J(A){return+A!=A&&(A=0),o.alloc(+A)}o.isBuffer=function(h){return h!=null&&h._isBuffer===!0&&h!==o.prototype},o.compare=function(h,I){if(Mt(h,Uint8Array)&&(h=o.from(h,h.offset,h.byteLength)),Mt(I,Uint8Array)&&(I=o.from(I,I.offset,I.byteLength)),!o.isBuffer(h)||!o.isBuffer(I))throw new TypeError('The "buf1", "buf2" arguments must be one of type Buffer or Uint8Array');if(h===I)return 0;let C=h.length,G=I.length;for(let te=0,le=Math.min(C,G);teG.length?(o.isBuffer(le)||(le=o.from(le)),le.copy(G,te)):Uint8Array.prototype.set.call(G,le,te);else if(o.isBuffer(le))le.copy(G,te);else throw new TypeError('"list" argument must be an Array of Buffers');te+=le.length}return G};function ee(A,h){if(o.isBuffer(A))return A.length;if(ArrayBuffer.isView(A)||Mt(A,ArrayBuffer))return A.byteLength;if(typeof A!="string")throw new TypeError('The "string" argument must be one of type string, Buffer, or ArrayBuffer. Received type '+typeof A);let I=A.length,C=arguments.length>2&&arguments[2]===!0;if(!C&&I===0)return 0;let G=!1;for(;;)switch(h){case"ascii":case"latin1":case"binary":return I;case"utf8":case"utf-8":return Wa(A).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return I*2;case"hex":return I>>>1;case"base64":return mr(A).length;default:if(G)return C?-1:Wa(A).length;h=(""+h).toLowerCase(),G=!0}}o.byteLength=ee;function W(A,h,I){let C=!1;if((h===void 0||h<0)&&(h=0),h>this.length||((I===void 0||I>this.length)&&(I=this.length),I<=0)||(I>>>=0,h>>>=0,I<=h))return"";for(A||(A="utf8");;)switch(A){case"hex":return Fr(this,h,I);case"utf8":case"utf-8":return zt(this,h,I);case"ascii":return dn(this,h,I);case"latin1":case"binary":return Rr(this,h,I);case"base64":return Ht(this,h,I);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return kn(this,h,I);default:if(C)throw new TypeError("Unknown encoding: "+A);A=(A+"").toLowerCase(),C=!0}}o.prototype._isBuffer=!0;function Te(A,h,I){let C=A[h];A[h]=A[I],A[I]=C}o.prototype.swap16=function(){let h=this.length;if(h%2!==0)throw new RangeError("Buffer size must be a multiple of 16-bits");for(let I=0;II&&(h+=" ... "),""},n&&(o.prototype[n]=o.prototype.inspect),o.prototype.compare=function(h,I,C,G,te){if(Mt(h,Uint8Array)&&(h=o.from(h,h.offset,h.byteLength)),!o.isBuffer(h))throw new TypeError('The "target" argument must be one of type Buffer or Uint8Array. Received type '+typeof h);if(I===void 0&&(I=0),C===void 0&&(C=h?h.length:0),G===void 0&&(G=0),te===void 0&&(te=this.length),I<0||C>h.length||G<0||te>this.length)throw new RangeError("out of range index");if(G>=te&&I>=C)return 0;if(G>=te)return-1;if(I>=C)return 1;if(I>>>=0,C>>>=0,G>>>=0,te>>>=0,this===h)return 0;let le=te-G,pt=C-I,pn=Math.min(le,pt),tn=this.slice(G,te),En=h.slice(I,C);for(let Wt=0;Wt2147483647?I=2147483647:I<-2147483648&&(I=-2147483648),I=+I,Nr(I)&&(I=G?0:A.length-1),I<0&&(I=A.length+I),I>=A.length){if(G)return-1;I=A.length-1}else if(I<0)if(G)I=0;else return-1;if(typeof h=="string"&&(h=o.from(h,C)),o.isBuffer(h))return h.length===0?-1:we(A,h,I,C,G);if(typeof h=="number")return h=h&255,typeof Uint8Array.prototype.indexOf=="function"?G?Uint8Array.prototype.indexOf.call(A,h,I):Uint8Array.prototype.lastIndexOf.call(A,h,I):we(A,[h],I,C,G);throw new TypeError("val must be string, number or Buffer")}function we(A,h,I,C,G){let te=1,le=A.length,pt=h.length;if(C!==void 0&&(C=String(C).toLowerCase(),C==="ucs2"||C==="ucs-2"||C==="utf16le"||C==="utf-16le")){if(A.length<2||h.length<2)return-1;te=2,le/=2,pt/=2,I/=2}function pn(En,Wt){return te===1?En[Wt]:En.readUInt16BE(Wt*te)}let tn;if(G){let En=-1;for(tn=I;tnle&&(I=le-pt),tn=I;tn>=0;tn--){let En=!0;for(let Wt=0;WtG&&(C=G)):C=G;let te=h.length;C>te/2&&(C=te/2);let le;for(le=0;le>>0,isFinite(C)?(C=C>>>0,G===void 0&&(G="utf8")):(G=C,C=void 0);else throw new Error("Buffer.write(string, encoding, offset[, length]) is no longer supported");let te=this.length-I;if((C===void 0||C>te)&&(C=te),h.length>0&&(C<0||I<0)||I>this.length)throw new RangeError("Attempt to write outside buffer bounds");G||(G="utf8");let le=!1;for(;;)switch(G){case"hex":return qe(this,h,I,C);case"utf8":case"utf-8":return et(this,h,I,C);case"ascii":case"latin1":case"binary":return X(this,h,I,C);case"base64":return ve(this,h,I,C);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return gt(this,h,I,C);default:if(le)throw new TypeError("Unknown encoding: "+G);G=(""+G).toLowerCase(),le=!0}},o.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};function Ht(A,h,I){return h===0&&I===A.length?e.fromByteArray(A):e.fromByteArray(A.slice(h,I))}function zt(A,h,I){I=Math.min(A.length,I);let C=[],G=h;for(;G239?4:te>223?3:te>191?2:1;if(G+pt<=I){let pn,tn,En,Wt;switch(pt){case 1:te<128&&(le=te);break;case 2:pn=A[G+1],(pn&192)===128&&(Wt=(te&31)<<6|pn&63,Wt>127&&(le=Wt));break;case 3:pn=A[G+1],tn=A[G+2],(pn&192)===128&&(tn&192)===128&&(Wt=(te&15)<<12|(pn&63)<<6|tn&63,Wt>2047&&(Wt<55296||Wt>57343)&&(le=Wt));break;case 4:pn=A[G+1],tn=A[G+2],En=A[G+3],(pn&192)===128&&(tn&192)===128&&(En&192)===128&&(Wt=(te&15)<<18|(pn&63)<<12|(tn&63)<<6|En&63,Wt>65535&&Wt<1114112&&(le=Wt))}}le===null?(le=65533,pt=1):le>65535&&(le-=65536,C.push(le>>>10&1023|55296),le=56320|le&1023),C.push(le),G+=pt}return Vt(C)}let bn=4096;function Vt(A){let h=A.length;if(h<=bn)return String.fromCharCode.apply(String,A);let I="",C=0;for(;CC)&&(I=C);let G="";for(let te=h;teC&&(h=C),I<0?(I+=C,I<0&&(I=0)):I>C&&(I=C),II)throw new RangeError("Trying to access beyond buffer length")}o.prototype.readUintLE=o.prototype.readUIntLE=function(h,I,C){h=h>>>0,I=I>>>0,C||$t(h,I,this.length);let G=this[h],te=1,le=0;for(;++le>>0,I=I>>>0,C||$t(h,I,this.length);let G=this[h+--I],te=1;for(;I>0&&(te*=256);)G+=this[h+--I]*te;return G},o.prototype.readUint8=o.prototype.readUInt8=function(h,I){return h=h>>>0,I||$t(h,1,this.length),this[h]},o.prototype.readUint16LE=o.prototype.readUInt16LE=function(h,I){return h=h>>>0,I||$t(h,2,this.length),this[h]|this[h+1]<<8},o.prototype.readUint16BE=o.prototype.readUInt16BE=function(h,I){return h=h>>>0,I||$t(h,2,this.length),this[h]<<8|this[h+1]},o.prototype.readUint32LE=o.prototype.readUInt32LE=function(h,I){return h=h>>>0,I||$t(h,4,this.length),(this[h]|this[h+1]<<8|this[h+2]<<16)+this[h+3]*16777216},o.prototype.readUint32BE=o.prototype.readUInt32BE=function(h,I){return h=h>>>0,I||$t(h,4,this.length),this[h]*16777216+(this[h+1]<<16|this[h+2]<<8|this[h+3])},o.prototype.readBigUInt64LE=Ia(function(h){h=h>>>0,tt(h,"offset");let I=this[h],C=this[h+7];(I===void 0||C===void 0)&&bt(h,this.length-8);let G=I+this[++h]*nn(2,8)+this[++h]*nn(2,16)+this[++h]*nn(2,24),te=this[++h]+this[++h]*nn(2,8)+this[++h]*nn(2,16)+C*nn(2,24);return BigInt(G)+(BigInt(te)<>>0,tt(h,"offset");let I=this[h],C=this[h+7];(I===void 0||C===void 0)&&bt(h,this.length-8);let G=I*nn(2,24)+this[++h]*nn(2,16)+this[++h]*nn(2,8)+this[++h],te=this[++h]*nn(2,24)+this[++h]*nn(2,16)+this[++h]*nn(2,8)+C;return(BigInt(G)<>>0,I=I>>>0,C||$t(h,I,this.length);let G=this[h],te=1,le=0;for(;++le=te&&(G-=Math.pow(2,8*I)),G},o.prototype.readIntBE=function(h,I,C){h=h>>>0,I=I>>>0,C||$t(h,I,this.length);let G=I,te=1,le=this[h+--G];for(;G>0&&(te*=256);)le+=this[h+--G]*te;return te*=128,le>=te&&(le-=Math.pow(2,8*I)),le},o.prototype.readInt8=function(h,I){return h=h>>>0,I||$t(h,1,this.length),this[h]&128?(255-this[h]+1)*-1:this[h]},o.prototype.readInt16LE=function(h,I){h=h>>>0,I||$t(h,2,this.length);let C=this[h]|this[h+1]<<8;return C&32768?C|4294901760:C},o.prototype.readInt16BE=function(h,I){h=h>>>0,I||$t(h,2,this.length);let C=this[h+1]|this[h]<<8;return C&32768?C|4294901760:C},o.prototype.readInt32LE=function(h,I){return h=h>>>0,I||$t(h,4,this.length),this[h]|this[h+1]<<8|this[h+2]<<16|this[h+3]<<24},o.prototype.readInt32BE=function(h,I){return h=h>>>0,I||$t(h,4,this.length),this[h]<<24|this[h+1]<<16|this[h+2]<<8|this[h+3]},o.prototype.readBigInt64LE=Ia(function(h){h=h>>>0,tt(h,"offset");let I=this[h],C=this[h+7];(I===void 0||C===void 0)&&bt(h,this.length-8);let G=this[h+4]+this[h+5]*nn(2,8)+this[h+6]*nn(2,16)+(C<<24);return(BigInt(G)<>>0,tt(h,"offset");let I=this[h],C=this[h+7];(I===void 0||C===void 0)&&bt(h,this.length-8);let G=(I<<24)+this[++h]*nn(2,16)+this[++h]*nn(2,8)+this[++h];return(BigInt(G)<>>0,I||$t(h,4,this.length),t.read(this,h,!0,23,4)},o.prototype.readFloatBE=function(h,I){return h=h>>>0,I||$t(h,4,this.length),t.read(this,h,!1,23,4)},o.prototype.readDoubleLE=function(h,I){return h=h>>>0,I||$t(h,8,this.length),t.read(this,h,!0,52,8)},o.prototype.readDoubleBE=function(h,I){return h=h>>>0,I||$t(h,8,this.length),t.read(this,h,!1,52,8)};function An(A,h,I,C,G,te){if(!o.isBuffer(A))throw new TypeError('"buffer" argument must be a Buffer instance');if(h>G||hA.length)throw new RangeError("Index out of range")}o.prototype.writeUintLE=o.prototype.writeUIntLE=function(h,I,C,G){if(h=+h,I=I>>>0,C=C>>>0,!G){let pt=Math.pow(2,8*C)-1;An(this,h,I,C,pt,0)}let te=1,le=0;for(this[I]=h&255;++le>>0,C=C>>>0,!G){let pt=Math.pow(2,8*C)-1;An(this,h,I,C,pt,0)}let te=C-1,le=1;for(this[I+te]=h&255;--te>=0&&(le*=256);)this[I+te]=h/le&255;return I+C},o.prototype.writeUint8=o.prototype.writeUInt8=function(h,I,C){return h=+h,I=I>>>0,C||An(this,h,I,1,255,0),this[I]=h&255,I+1},o.prototype.writeUint16LE=o.prototype.writeUInt16LE=function(h,I,C){return h=+h,I=I>>>0,C||An(this,h,I,2,65535,0),this[I]=h&255,this[I+1]=h>>>8,I+2},o.prototype.writeUint16BE=o.prototype.writeUInt16BE=function(h,I,C){return h=+h,I=I>>>0,C||An(this,h,I,2,65535,0),this[I]=h>>>8,this[I+1]=h&255,I+2},o.prototype.writeUint32LE=o.prototype.writeUInt32LE=function(h,I,C){return h=+h,I=I>>>0,C||An(this,h,I,4,4294967295,0),this[I+3]=h>>>24,this[I+2]=h>>>16,this[I+1]=h>>>8,this[I]=h&255,I+4},o.prototype.writeUint32BE=o.prototype.writeUInt32BE=function(h,I,C){return h=+h,I=I>>>0,C||An(this,h,I,4,4294967295,0),this[I]=h>>>24,this[I+1]=h>>>16,this[I+2]=h>>>8,this[I+3]=h&255,I+4};function se(A,h,I,C,G){Lt(h,C,G,A,I,7);let te=Number(h&BigInt(4294967295));A[I++]=te,te=te>>8,A[I++]=te,te=te>>8,A[I++]=te,te=te>>8,A[I++]=te;let le=Number(h>>BigInt(32)&BigInt(4294967295));return A[I++]=le,le=le>>8,A[I++]=le,le=le>>8,A[I++]=le,le=le>>8,A[I++]=le,I}function De(A,h,I,C,G){Lt(h,C,G,A,I,7);let te=Number(h&BigInt(4294967295));A[I+7]=te,te=te>>8,A[I+6]=te,te=te>>8,A[I+5]=te,te=te>>8,A[I+4]=te;let le=Number(h>>BigInt(32)&BigInt(4294967295));return A[I+3]=le,le=le>>8,A[I+2]=le,le=le>>8,A[I+1]=le,le=le>>8,A[I]=le,I+8}o.prototype.writeBigUInt64LE=Ia(function(h,I=0){return se(this,h,I,BigInt(0),BigInt("0xffffffffffffffff"))}),o.prototype.writeBigUInt64BE=Ia(function(h,I=0){return De(this,h,I,BigInt(0),BigInt("0xffffffffffffffff"))}),o.prototype.writeIntLE=function(h,I,C,G){if(h=+h,I=I>>>0,!G){let pn=Math.pow(2,8*C-1);An(this,h,I,C,pn-1,-pn)}let te=0,le=1,pt=0;for(this[I]=h&255;++te>0)-pt&255;return I+C},o.prototype.writeIntBE=function(h,I,C,G){if(h=+h,I=I>>>0,!G){let pn=Math.pow(2,8*C-1);An(this,h,I,C,pn-1,-pn)}let te=C-1,le=1,pt=0;for(this[I+te]=h&255;--te>=0&&(le*=256);)h<0&&pt===0&&this[I+te+1]!==0&&(pt=1),this[I+te]=(h/le>>0)-pt&255;return I+C},o.prototype.writeInt8=function(h,I,C){return h=+h,I=I>>>0,C||An(this,h,I,1,127,-128),h<0&&(h=255+h+1),this[I]=h&255,I+1},o.prototype.writeInt16LE=function(h,I,C){return h=+h,I=I>>>0,C||An(this,h,I,2,32767,-32768),this[I]=h&255,this[I+1]=h>>>8,I+2},o.prototype.writeInt16BE=function(h,I,C){return h=+h,I=I>>>0,C||An(this,h,I,2,32767,-32768),this[I]=h>>>8,this[I+1]=h&255,I+2},o.prototype.writeInt32LE=function(h,I,C){return h=+h,I=I>>>0,C||An(this,h,I,4,2147483647,-2147483648),this[I]=h&255,this[I+1]=h>>>8,this[I+2]=h>>>16,this[I+3]=h>>>24,I+4},o.prototype.writeInt32BE=function(h,I,C){return h=+h,I=I>>>0,C||An(this,h,I,4,2147483647,-2147483648),h<0&&(h=4294967295+h+1),this[I]=h>>>24,this[I+1]=h>>>16,this[I+2]=h>>>8,this[I+3]=h&255,I+4},o.prototype.writeBigInt64LE=Ia(function(h,I=0){return se(this,h,I,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))}),o.prototype.writeBigInt64BE=Ia(function(h,I=0){return De(this,h,I,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))});function _e(A,h,I,C,G,te){if(I+C>A.length)throw new RangeError("Index out of range");if(I<0)throw new RangeError("Index out of range")}function Le(A,h,I,C,G){return h=+h,I=I>>>0,G||_e(A,h,I,4),t.write(A,h,I,C,23,4),I+4}o.prototype.writeFloatLE=function(h,I,C){return Le(this,h,I,!0,C)},o.prototype.writeFloatBE=function(h,I,C){return Le(this,h,I,!1,C)};function _t(A,h,I,C,G){return h=+h,I=I>>>0,G||_e(A,h,I,8),t.write(A,h,I,C,52,8),I+8}o.prototype.writeDoubleLE=function(h,I,C){return _t(this,h,I,!0,C)},o.prototype.writeDoubleBE=function(h,I,C){return _t(this,h,I,!1,C)},o.prototype.copy=function(h,I,C,G){if(!o.isBuffer(h))throw new TypeError("argument should be a Buffer");if(C||(C=0),!G&&G!==0&&(G=this.length),I>=h.length&&(I=h.length),I||(I=0),G>0&&G=this.length)throw new RangeError("Index out of range");if(G<0)throw new RangeError("sourceEnd out of bounds");G>this.length&&(G=this.length),h.length-I>>0,C=C===void 0?this.length:C>>>0,h||(h=0);let te;if(typeof h=="number")for(te=I;tenn(2,32)?G=Me(String(I)):typeof I=="bigint"&&(G=String(I),(I>nn(BigInt(2),BigInt(32))||I<-nn(BigInt(2),BigInt(32)))&&(G=Me(G)),G+="n"),C+=` It must be ${h}. Received ${G}`,C},RangeError);function Me(A){let h="",I=A.length,C=A[0]==="-"?1:0;for(;I>=C+4;I-=3)h=`_${A.slice(I-3,I)}${h}`;return`${A.slice(0,I)}${h}`}function Qe(A,h,I){tt(h,"offset"),(A[h]===void 0||A[h+I]===void 0)&&bt(h,A.length-(I+1))}function Lt(A,h,I,C,G,te){if(A>I||A3?h===0||h===BigInt(0)?pt=`>= 0${le} and < 2${le} ** ${(te+1)*8}${le}`:pt=`>= -(2${le} ** ${(te+1)*8-1}${le}) and < 2 ** ${(te+1)*8-1}${le}`:pt=`>= ${h}${le} and <= ${I}${le}`,new Y.ERR_OUT_OF_RANGE("value",pt,A)}Qe(C,G,te)}function tt(A,h){if(typeof A!="number")throw new Y.ERR_INVALID_ARG_TYPE(h,"number",A)}function bt(A,h,I){throw Math.floor(A)!==A?(tt(A,I),new Y.ERR_OUT_OF_RANGE(I||"offset","an integer",A)):h<0?new Y.ERR_BUFFER_OUT_OF_BOUNDS:new Y.ERR_OUT_OF_RANGE(I||"offset",`>= ${I?1:0} and <= ${h}`,A)}let za=/[^+/0-9A-Za-z-_]/g;function qr(A){if(A=A.split("=")[0],A=A.trim().replace(za,""),A.length<2)return"";for(;A.length%4!==0;)A=A+"=";return A}function Wa(A,h){h=h||1/0;let I,C=A.length,G=null,te=[];for(let le=0;le55295&&I<57344){if(!G){if(I>56319){(h-=3)>-1&&te.push(239,191,189);continue}else if(le+1===C){(h-=3)>-1&&te.push(239,191,189);continue}G=I;continue}if(I<56320){(h-=3)>-1&&te.push(239,191,189),G=I;continue}I=(G-55296<<10|I-56320)+65536}else G&&(h-=3)>-1&&te.push(239,191,189);if(G=null,I<128){if((h-=1)<0)break;te.push(I)}else if(I<2048){if((h-=2)<0)break;te.push(I>>6|192,I&63|128)}else if(I<65536){if((h-=3)<0)break;te.push(I>>12|224,I>>6&63|128,I&63|128)}else if(I<1114112){if((h-=4)<0)break;te.push(I>>18|240,I>>12&63|128,I>>6&63|128,I&63|128)}else throw new Error("Invalid code point")}return te}function Ic(A){let h=[];for(let I=0;I>8,G=I%256,te.push(G),te.push(C);return te}function mr(A){return e.toByteArray(qr(A))}function ri(A,h,I,C){let G;for(G=0;G=h.length||G>=A.length);++G)h[G+I]=A[G];return G}function Mt(A,h){return A instanceof h||A!=null&&A.constructor!=null&&A.constructor.name!=null&&A.constructor.name===h.name}function Nr(A){return A!==A}let lu=function(){let A="0123456789abcdef",h=new Array(256);for(let I=0;I<16;++I){let C=I*16;for(let G=0;G<16;++G)h[C+G]=A[I]+A[G]}return h}();function Ia(A){return typeof BigInt=="undefined"?du:A}function du(){throw new Error("BigInt not supported")}return vu}var id,_R,Yf,vR,vu,SR,Su,D,nde,rde,OR=gu(()=>{"use strict";f();N();m();id={},_R=!1;Yf={},vR=!1;vu={},SR=!1;Su=kY();Su.Buffer;Su.SlowBuffer;Su.INSPECT_MAX_BYTES;Su.kMaxLength;D=Su.Buffer,nde=Su.INSPECT_MAX_BYTES,rde=Su.kMaxLength});var N=gu(()=>{"use strict";OR()});var DR=w(Bc=>{"use strict";f();N();m();Object.defineProperty(Bc,"__esModule",{value:!0});Bc.versionInfo=Bc.version=void 0;var MY="16.9.0";Bc.version=MY;var xY=Object.freeze({major:16,minor:9,patch:0,preReleaseTag:null});Bc.versionInfo=xY});var Cr=w(sy=>{"use strict";f();N();m();Object.defineProperty(sy,"__esModule",{value:!0});sy.devAssert=qY;function qY(e,t){if(!!!e)throw new Error(t)}});var Jf=w(oy=>{"use strict";f();N();m();Object.defineProperty(oy,"__esModule",{value:!0});oy.isPromise=VY;function VY(e){return typeof(e==null?void 0:e.then)=="function"}});var Sa=w(uy=>{"use strict";f();N();m();Object.defineProperty(uy,"__esModule",{value:!0});uy.isObjectLike=jY;function jY(e){return typeof e=="object"&&e!==null}});var Ir=w(cy=>{"use strict";f();N();m();Object.defineProperty(cy,"__esModule",{value:!0});cy.invariant=KY;function KY(e,t){if(!!!e)throw new Error(t!=null?t:"Unexpected invariant triggered.")}});var Hf=w(ly=>{"use strict";f();N();m();Object.defineProperty(ly,"__esModule",{value:!0});ly.getLocation=QY;var GY=Ir(),$Y=/\r\n|[\n\r]/g;function QY(e,t){let n=0,r=1;for(let i of e.body.matchAll($Y)){if(typeof i.index=="number"||(0,GY.invariant)(!1),i.index>=t)break;n=i.index+i[0].length,r+=1}return{line:r,column:t+1-n}}});var dy=w(zf=>{"use strict";f();N();m();Object.defineProperty(zf,"__esModule",{value:!0});zf.printLocation=JY;zf.printSourceLocation=AR;var YY=Hf();function JY(e){return AR(e.source,(0,YY.getLocation)(e.source,e.start))}function AR(e,t){let n=e.locationOffset.column-1,r="".padStart(n)+e.body,i=t.line-1,a=e.locationOffset.line-1,o=t.line+a,c=t.line===1?n:0,l=t.column+c,p=`${e.name}:${o}:${l} -`,T=r.split(/\r\n|[\n\r]/g),y=T[i];if(y.length>120){let g=Math.floor(l/80),_=l%80,F=[];for(let U=0;U["|",U]),["|","^".padStart(_)],["|",F[g+1]]])}return p+bR([[`${o-1} |`,T[i-1]],[`${o} |`,y],["|","^".padStart(l)],[`${o+1} |`,T[i+1]]])}function bR(e){let t=e.filter(([r,i])=>i!==void 0),n=Math.max(...t.map(([r])=>r.length));return t.map(([r,i])=>r.padStart(n)+(i?" "+i:"")).join(` -`)}});var He=w(Uc=>{"use strict";f();N();m();Object.defineProperty(Uc,"__esModule",{value:!0});Uc.GraphQLError=void 0;Uc.formatError=XY;Uc.printError=WY;var HY=Sa(),RR=Hf(),FR=dy();function zY(e){let t=e[0];return t==null||"kind"in t||"length"in t?{nodes:t,source:e[1],positions:e[2],path:e[3],originalError:e[4],extensions:e[5]}:t}var py=class e extends Error{constructor(t,...n){var r,i,a;let{nodes:o,source:c,positions:l,path:p,originalError:T,extensions:y}=zY(n);super(t),this.name="GraphQLError",this.path=p!=null?p:void 0,this.originalError=T!=null?T:void 0,this.nodes=PR(Array.isArray(o)?o:o?[o]:void 0);let g=PR((r=this.nodes)===null||r===void 0?void 0:r.map(F=>F.loc).filter(F=>F!=null));this.source=c!=null?c:g==null||(i=g[0])===null||i===void 0?void 0:i.source,this.positions=l!=null?l:g==null?void 0:g.map(F=>F.start),this.locations=l&&c?l.map(F=>(0,RR.getLocation)(c,F)):g==null?void 0:g.map(F=>(0,RR.getLocation)(F.source,F.start));let _=(0,HY.isObjectLike)(T==null?void 0:T.extensions)?T==null?void 0:T.extensions:void 0;this.extensions=(a=y!=null?y:_)!==null&&a!==void 0?a:Object.create(null),Object.defineProperties(this,{message:{writable:!0,enumerable:!0},name:{enumerable:!1},nodes:{enumerable:!1},source:{enumerable:!1},positions:{enumerable:!1},originalError:{enumerable:!1}}),T!=null&&T.stack?Object.defineProperty(this,"stack",{value:T.stack,writable:!0,configurable:!0}):Error.captureStackTrace?Error.captureStackTrace(this,e):Object.defineProperty(this,"stack",{value:Error().stack,writable:!0,configurable:!0})}get[Symbol.toStringTag](){return"GraphQLError"}toString(){let t=this.message;if(this.nodes)for(let n of this.nodes)n.loc&&(t+=` +"use strict";var shim=(()=>{var bY=Object.create;var id=Object.defineProperty,AY=Object.defineProperties,RY=Object.getOwnPropertyDescriptor,FY=Object.getOwnPropertyDescriptors,PY=Object.getOwnPropertyNames,iA=Object.getOwnPropertySymbols,wY=Object.getPrototypeOf,aA=Object.prototype.hasOwnProperty,LY=Object.prototype.propertyIsEnumerable;var nn=Math.pow,ry=(e,t,n)=>t in e?id(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,M=(e,t)=>{for(var n in t||(t={}))aA.call(t,n)&&ry(e,n,t[n]);if(iA)for(var n of iA(t))LY.call(t,n)&&ry(e,n,t[n]);return e},Q=(e,t)=>AY(e,FY(t));var gu=(e,t)=>()=>(e&&(t=e(e=0)),t);var w=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),Gf=(e,t)=>{for(var n in t)id(e,n,{get:t[n],enumerable:!0})},sA=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of PY(t))!aA.call(e,i)&&i!==n&&id(e,i,{get:()=>t[i],enumerable:!(r=RY(t,i))||r.enumerable});return e};var os=(e,t,n)=>(n=e!=null?bY(wY(e)):{},sA(t||!e||!e.__esModule?id(n,"default",{value:e,enumerable:!0}):n,e)),$f=e=>sA(id({},"__esModule",{value:!0}),e);var v=(e,t,n)=>(ry(e,typeof t!="symbol"?t+"":t,n),n);var Si=(e,t,n)=>new Promise((r,i)=>{var a=l=>{try{c(n.next(l))}catch(p){i(p)}},o=l=>{try{c(n.throw(l))}catch(p){i(p)}},c=l=>l.done?r(l.value):Promise.resolve(l.value).then(a,o);c((n=n.apply(e,t)).next())});var m=gu(()=>{"use strict"});var O={};Gf(O,{_debugEnd:()=>JA,_debugProcess:()=>YA,_events:()=>lR,_eventsCount:()=>dR,_exiting:()=>AA,_fatalExceptions:()=>KA,_getActiveHandles:()=>wA,_getActiveRequests:()=>PA,_kill:()=>CA,_linkedBinding:()=>DA,_maxListeners:()=>cR,_preload_modules:()=>sR,_rawDebug:()=>SA,_startProfilerIdleNotifier:()=>HA,_stopProfilerIdleNotifier:()=>zA,_tickCallback:()=>QA,abort:()=>eR,addListener:()=>pR,allowedNodeEnvironmentFlags:()=>qA,arch:()=>dA,argv:()=>mA,argv0:()=>aR,assert:()=>VA,binding:()=>yA,chdir:()=>_A,config:()=>RA,cpuUsage:()=>Jf,cwd:()=>gA,debugPort:()=>iR,default:()=>gR,dlopen:()=>FA,domain:()=>bA,emit:()=>ER,emitWarning:()=>hA,env:()=>fA,execArgv:()=>NA,execPath:()=>rR,exit:()=>MA,features:()=>jA,hasUncaughtExceptionCaptureCallback:()=>$A,hrtime:()=>Yf,kill:()=>kA,listeners:()=>IR,memoryUsage:()=>UA,moduleLoadList:()=>OA,nextTick:()=>uA,off:()=>mR,on:()=>cs,once:()=>fR,openStdin:()=>xA,pid:()=>tR,platform:()=>pA,ppid:()=>nR,prependListener:()=>hR,prependOnceListener:()=>yR,reallyExit:()=>LA,release:()=>vA,removeAllListeners:()=>TR,removeListener:()=>NR,resourceUsage:()=>BA,setSourceMapsEnabled:()=>oR,setUncaughtExceptionCaptureCallback:()=>GA,stderr:()=>XA,stdin:()=>ZA,stdout:()=>WA,title:()=>lA,umask:()=>IA,uptime:()=>uR,version:()=>TA,versions:()=>EA});function sy(e){throw new Error("Node.js process "+e+" is not supported by JSPM core outside of Node.js")}function CY(){!Cc||!_u||(Cc=!1,_u.length?us=_u.concat(us):Qf=-1,us.length&&oA())}function oA(){if(!Cc){var e=setTimeout(CY,0);Cc=!0;for(var t=us.length;t;){for(_u=us,us=[];++Qf1)for(var n=1;n{"use strict";m();T();N();us=[],Cc=!1,Qf=-1;cA.prototype.run=function(){this.fun.apply(null,this.array)};lA="browser",dA="x64",pA="browser",fA={PATH:"/usr/bin",LANG:navigator.language+".UTF-8",PWD:"/",HOME:"/home",TMP:"/tmp"},mA=["/usr/bin/node"],NA=[],TA="v16.8.0",EA={},hA=function(e,t){console.warn((t?t+": ":"")+e)},yA=function(e){sy("binding")},IA=function(e){return 0},gA=function(){return"/"},_A=function(e){},vA={name:"node",sourceUrl:"",headersUrl:"",libUrl:""};SA=yr,OA=[];bA={},AA=!1,RA={};LA=yr,CA=yr,Jf=function(){return{}},BA=Jf,UA=Jf,kA=yr,MA=yr,xA=yr,qA={};jA={inspector:!1,debug:!1,uv:!1,ipv6:!1,tls_alpn:!1,tls_sni:!1,tls_ocsp:!1,tls:!1,cached_builtins:!0},KA=yr,GA=yr;QA=yr,YA=yr,JA=yr,HA=yr,zA=yr,WA=void 0,XA=void 0,ZA=void 0,eR=yr,tR=2,nR=1,rR="/bin/usr/node",iR=9229,aR="node",sR=[],oR=yr,ko={now:typeof performance!="undefined"?performance.now.bind(performance):void 0,timing:typeof performance!="undefined"?performance.timing:void 0};ko.now===void 0&&(iy=Date.now(),ko.timing&&ko.timing.navigationStart&&(iy=ko.timing.navigationStart),ko.now=()=>Date.now()-iy);ay=1e9;Yf.bigint=function(e){var t=Yf(e);return typeof BigInt=="undefined"?t[0]*ay+t[1]:BigInt(t[0]*ay)+BigInt(t[1])};cR=10,lR={},dR=0;pR=cs,fR=cs,mR=cs,NR=cs,TR=cs,ER=yr,hR=cs,yR=cs;gR={version:TA,versions:EA,arch:dA,platform:pA,release:vA,_rawDebug:SA,moduleLoadList:OA,binding:yA,_linkedBinding:DA,_events:lR,_eventsCount:dR,_maxListeners:cR,on:cs,addListener:pR,once:fR,off:mR,removeListener:NR,removeAllListeners:TR,emit:ER,prependListener:hR,prependOnceListener:yR,listeners:IR,domain:bA,_exiting:AA,config:RA,dlopen:FA,uptime:uR,_getActiveRequests:PA,_getActiveHandles:wA,reallyExit:LA,_kill:CA,cpuUsage:Jf,resourceUsage:BA,memoryUsage:UA,kill:kA,exit:MA,openStdin:xA,allowedNodeEnvironmentFlags:qA,assert:VA,features:jA,_fatalExceptions:KA,setUncaughtExceptionCaptureCallback:GA,hasUncaughtExceptionCaptureCallback:$A,emitWarning:hA,nextTick:uA,_tickCallback:QA,_debugProcess:YA,_debugEnd:JA,_startProfilerIdleNotifier:HA,_stopProfilerIdleNotifier:zA,stdout:WA,stdin:ZA,stderr:XA,abort:eR,umask:IA,chdir:_A,cwd:gA,env:fA,title:lA,argv:mA,execArgv:NA,pid:tR,ppid:nR,execPath:rR,debugPort:iR,hrtime:Yf,argv0:aR,_preload_modules:sR,setSourceMapsEnabled:oR}});var N=gu(()=>{"use strict";_R()});function BY(){if(vR)return ad;vR=!0,ad.byteLength=c,ad.toByteArray=p,ad.fromByteArray=g;for(var e=[],t=[],n=typeof Uint8Array!="undefined"?Uint8Array:Array,r="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",i=0,a=r.length;i0)throw new Error("Invalid string. Length must be a multiple of 4");var U=_.indexOf("=");U===-1&&(U=F);var K=U===F?0:4-U%4;return[U,K]}function c(_){var F=o(_),U=F[0],K=F[1];return(U+K)*3/4-K}function l(_,F,U){return(F+U)*3/4-U}function p(_){var F,U=o(_),K=U[0],J=U[1],ee=new n(l(_,K,J)),W=0,Te=J>0?K-4:K,de;for(de=0;de>16&255,ee[W++]=F>>8&255,ee[W++]=F&255;return J===2&&(F=t[_.charCodeAt(de)]<<2|t[_.charCodeAt(de+1)]>>4,ee[W++]=F&255),J===1&&(F=t[_.charCodeAt(de)]<<10|t[_.charCodeAt(de+1)]<<4|t[_.charCodeAt(de+2)]>>2,ee[W++]=F>>8&255,ee[W++]=F&255),ee}function f(_){return e[_>>18&63]+e[_>>12&63]+e[_>>6&63]+e[_&63]}function y(_,F,U){for(var K,J=[],ee=F;eeTe?Te:W+ee));return K===1?(F=_[U-1],J.push(e[F>>2]+e[F<<4&63]+"==")):K===2&&(F=(_[U-2]<<8)+_[U-1],J.push(e[F>>10]+e[F>>4&63]+e[F<<2&63]+"=")),J.join("")}return ad}function UY(){if(SR)return Hf;SR=!0;return Hf.read=function(e,t,n,r,i){var a,o,c=i*8-r-1,l=(1<>1,f=-7,y=n?i-1:0,g=n?-1:1,_=e[t+y];for(y+=g,a=_&(1<<-f)-1,_>>=-f,f+=c;f>0;a=a*256+e[t+y],y+=g,f-=8);for(o=a&(1<<-f)-1,a>>=-f,f+=r;f>0;o=o*256+e[t+y],y+=g,f-=8);if(a===0)a=1-p;else{if(a===l)return o?NaN:(_?-1:1)*(1/0);o=o+Math.pow(2,r),a=a-p}return(_?-1:1)*o*Math.pow(2,a-r)},Hf.write=function(e,t,n,r,i,a){var o,c,l,p=a*8-i-1,f=(1<>1,g=i===23?Math.pow(2,-24)-Math.pow(2,-77):0,_=r?0:a-1,F=r?1:-1,U=t<0||t===0&&1/t<0?1:0;for(t=Math.abs(t),isNaN(t)||t===1/0?(c=isNaN(t)?1:0,o=f):(o=Math.floor(Math.log(t)/Math.LN2),t*(l=Math.pow(2,-o))<1&&(o--,l*=2),o+y>=1?t+=g/l:t+=g*Math.pow(2,1-y),t*l>=2&&(o++,l/=2),o+y>=f?(c=0,o=f):o+y>=1?(c=(t*l-1)*Math.pow(2,i),o=o+y):(c=t*Math.pow(2,y-1)*Math.pow(2,i),o=0));i>=8;e[n+_]=c&255,_+=F,c/=256,i-=8);for(o=o<0;e[n+_]=o&255,_+=F,o/=256,p-=8);e[n+_-F]|=U*128},Hf}function kY(){if(OR)return vu;OR=!0;let e=BY(),t=UY(),n=typeof Symbol=="function"&&typeof Symbol.for=="function"?Symbol.for("nodejs.util.inspect.custom"):null;vu.Buffer=o,vu.SlowBuffer=J,vu.INSPECT_MAX_BYTES=50;let r=2147483647;vu.kMaxLength=r,o.TYPED_ARRAY_SUPPORT=i(),!o.TYPED_ARRAY_SUPPORT&&typeof console!="undefined"&&typeof console.error=="function"&&console.error("This browser lacks typed array (Uint8Array) support which is required by `buffer` v5.x. Use `buffer` v4.x if you require old browser support.");function i(){try{let A=new Uint8Array(1),h={foo:function(){return 42}};return Object.setPrototypeOf(h,Uint8Array.prototype),Object.setPrototypeOf(A,h),A.foo()===42}catch(A){return!1}}Object.defineProperty(o.prototype,"parent",{enumerable:!0,get:function(){if(o.isBuffer(this))return this.buffer}}),Object.defineProperty(o.prototype,"offset",{enumerable:!0,get:function(){if(o.isBuffer(this))return this.byteOffset}});function a(A){if(A>r)throw new RangeError('The value "'+A+'" is invalid for option "size"');let h=new Uint8Array(A);return Object.setPrototypeOf(h,o.prototype),h}function o(A,h,I){if(typeof A=="number"){if(typeof h=="string")throw new TypeError('The "string" argument must be of type string. Received type number');return f(A)}return c(A,h,I)}o.poolSize=8192;function c(A,h,I){if(typeof A=="string")return y(A,h);if(ArrayBuffer.isView(A))return _(A);if(A==null)throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof A);if(Mt(A,ArrayBuffer)||A&&Mt(A.buffer,ArrayBuffer)||typeof SharedArrayBuffer!="undefined"&&(Mt(A,SharedArrayBuffer)||A&&Mt(A.buffer,SharedArrayBuffer)))return F(A,h,I);if(typeof A=="number")throw new TypeError('The "value" argument must not be of type number. Received type number');let C=A.valueOf&&A.valueOf();if(C!=null&&C!==A)return o.from(C,h,I);let G=U(A);if(G)return G;if(typeof Symbol!="undefined"&&Symbol.toPrimitive!=null&&typeof A[Symbol.toPrimitive]=="function")return o.from(A[Symbol.toPrimitive]("string"),h,I);throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof A)}o.from=function(A,h,I){return c(A,h,I)},Object.setPrototypeOf(o.prototype,Uint8Array.prototype),Object.setPrototypeOf(o,Uint8Array);function l(A){if(typeof A!="number")throw new TypeError('"size" argument must be of type number');if(A<0)throw new RangeError('The value "'+A+'" is invalid for option "size"')}function p(A,h,I){return l(A),A<=0?a(A):h!==void 0?typeof I=="string"?a(A).fill(h,I):a(A).fill(h):a(A)}o.alloc=function(A,h,I){return p(A,h,I)};function f(A){return l(A),a(A<0?0:K(A)|0)}o.allocUnsafe=function(A){return f(A)},o.allocUnsafeSlow=function(A){return f(A)};function y(A,h){if((typeof h!="string"||h==="")&&(h="utf8"),!o.isEncoding(h))throw new TypeError("Unknown encoding: "+h);let I=ee(A,h)|0,C=a(I),G=C.write(A,h);return G!==I&&(C=C.slice(0,G)),C}function g(A){let h=A.length<0?0:K(A.length)|0,I=a(h);for(let C=0;C=r)throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+r.toString(16)+" bytes");return A|0}function J(A){return+A!=A&&(A=0),o.alloc(+A)}o.isBuffer=function(h){return h!=null&&h._isBuffer===!0&&h!==o.prototype},o.compare=function(h,I){if(Mt(h,Uint8Array)&&(h=o.from(h,h.offset,h.byteLength)),Mt(I,Uint8Array)&&(I=o.from(I,I.offset,I.byteLength)),!o.isBuffer(h)||!o.isBuffer(I))throw new TypeError('The "buf1", "buf2" arguments must be one of type Buffer or Uint8Array');if(h===I)return 0;let C=h.length,G=I.length;for(let te=0,le=Math.min(C,G);teG.length?(o.isBuffer(le)||(le=o.from(le)),le.copy(G,te)):Uint8Array.prototype.set.call(G,le,te);else if(o.isBuffer(le))le.copy(G,te);else throw new TypeError('"list" argument must be an Array of Buffers');te+=le.length}return G};function ee(A,h){if(o.isBuffer(A))return A.length;if(ArrayBuffer.isView(A)||Mt(A,ArrayBuffer))return A.byteLength;if(typeof A!="string")throw new TypeError('The "string" argument must be one of type string, Buffer, or ArrayBuffer. Received type '+typeof A);let I=A.length,C=arguments.length>2&&arguments[2]===!0;if(!C&&I===0)return 0;let G=!1;for(;;)switch(h){case"ascii":case"latin1":case"binary":return I;case"utf8":case"utf-8":return Wa(A).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return I*2;case"hex":return I>>>1;case"base64":return mr(A).length;default:if(G)return C?-1:Wa(A).length;h=(""+h).toLowerCase(),G=!0}}o.byteLength=ee;function W(A,h,I){let C=!1;if((h===void 0||h<0)&&(h=0),h>this.length||((I===void 0||I>this.length)&&(I=this.length),I<=0)||(I>>>=0,h>>>=0,I<=h))return"";for(A||(A="utf8");;)switch(A){case"hex":return Fr(this,h,I);case"utf8":case"utf-8":return zt(this,h,I);case"ascii":return dn(this,h,I);case"latin1":case"binary":return Rr(this,h,I);case"base64":return Ht(this,h,I);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return kn(this,h,I);default:if(C)throw new TypeError("Unknown encoding: "+A);A=(A+"").toLowerCase(),C=!0}}o.prototype._isBuffer=!0;function Te(A,h,I){let C=A[h];A[h]=A[I],A[I]=C}o.prototype.swap16=function(){let h=this.length;if(h%2!==0)throw new RangeError("Buffer size must be a multiple of 16-bits");for(let I=0;II&&(h+=" ... "),""},n&&(o.prototype[n]=o.prototype.inspect),o.prototype.compare=function(h,I,C,G,te){if(Mt(h,Uint8Array)&&(h=o.from(h,h.offset,h.byteLength)),!o.isBuffer(h))throw new TypeError('The "target" argument must be one of type Buffer or Uint8Array. Received type '+typeof h);if(I===void 0&&(I=0),C===void 0&&(C=h?h.length:0),G===void 0&&(G=0),te===void 0&&(te=this.length),I<0||C>h.length||G<0||te>this.length)throw new RangeError("out of range index");if(G>=te&&I>=C)return 0;if(G>=te)return-1;if(I>=C)return 1;if(I>>>=0,C>>>=0,G>>>=0,te>>>=0,this===h)return 0;let le=te-G,pt=C-I,pn=Math.min(le,pt),tn=this.slice(G,te),En=h.slice(I,C);for(let Wt=0;Wt2147483647?I=2147483647:I<-2147483648&&(I=-2147483648),I=+I,Nr(I)&&(I=G?0:A.length-1),I<0&&(I=A.length+I),I>=A.length){if(G)return-1;I=A.length-1}else if(I<0)if(G)I=0;else return-1;if(typeof h=="string"&&(h=o.from(h,C)),o.isBuffer(h))return h.length===0?-1:we(A,h,I,C,G);if(typeof h=="number")return h=h&255,typeof Uint8Array.prototype.indexOf=="function"?G?Uint8Array.prototype.indexOf.call(A,h,I):Uint8Array.prototype.lastIndexOf.call(A,h,I):we(A,[h],I,C,G);throw new TypeError("val must be string, number or Buffer")}function we(A,h,I,C,G){let te=1,le=A.length,pt=h.length;if(C!==void 0&&(C=String(C).toLowerCase(),C==="ucs2"||C==="ucs-2"||C==="utf16le"||C==="utf-16le")){if(A.length<2||h.length<2)return-1;te=2,le/=2,pt/=2,I/=2}function pn(En,Wt){return te===1?En[Wt]:En.readUInt16BE(Wt*te)}let tn;if(G){let En=-1;for(tn=I;tnle&&(I=le-pt),tn=I;tn>=0;tn--){let En=!0;for(let Wt=0;WtG&&(C=G)):C=G;let te=h.length;C>te/2&&(C=te/2);let le;for(le=0;le>>0,isFinite(C)?(C=C>>>0,G===void 0&&(G="utf8")):(G=C,C=void 0);else throw new Error("Buffer.write(string, encoding, offset[, length]) is no longer supported");let te=this.length-I;if((C===void 0||C>te)&&(C=te),h.length>0&&(C<0||I<0)||I>this.length)throw new RangeError("Attempt to write outside buffer bounds");G||(G="utf8");let le=!1;for(;;)switch(G){case"hex":return qe(this,h,I,C);case"utf8":case"utf-8":return et(this,h,I,C);case"ascii":case"latin1":case"binary":return X(this,h,I,C);case"base64":return ve(this,h,I,C);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return gt(this,h,I,C);default:if(le)throw new TypeError("Unknown encoding: "+G);G=(""+G).toLowerCase(),le=!0}},o.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};function Ht(A,h,I){return h===0&&I===A.length?e.fromByteArray(A):e.fromByteArray(A.slice(h,I))}function zt(A,h,I){I=Math.min(A.length,I);let C=[],G=h;for(;G239?4:te>223?3:te>191?2:1;if(G+pt<=I){let pn,tn,En,Wt;switch(pt){case 1:te<128&&(le=te);break;case 2:pn=A[G+1],(pn&192)===128&&(Wt=(te&31)<<6|pn&63,Wt>127&&(le=Wt));break;case 3:pn=A[G+1],tn=A[G+2],(pn&192)===128&&(tn&192)===128&&(Wt=(te&15)<<12|(pn&63)<<6|tn&63,Wt>2047&&(Wt<55296||Wt>57343)&&(le=Wt));break;case 4:pn=A[G+1],tn=A[G+2],En=A[G+3],(pn&192)===128&&(tn&192)===128&&(En&192)===128&&(Wt=(te&15)<<18|(pn&63)<<12|(tn&63)<<6|En&63,Wt>65535&&Wt<1114112&&(le=Wt))}}le===null?(le=65533,pt=1):le>65535&&(le-=65536,C.push(le>>>10&1023|55296),le=56320|le&1023),C.push(le),G+=pt}return Vt(C)}let bn=4096;function Vt(A){let h=A.length;if(h<=bn)return String.fromCharCode.apply(String,A);let I="",C=0;for(;CC)&&(I=C);let G="";for(let te=h;teC&&(h=C),I<0?(I+=C,I<0&&(I=0)):I>C&&(I=C),II)throw new RangeError("Trying to access beyond buffer length")}o.prototype.readUintLE=o.prototype.readUIntLE=function(h,I,C){h=h>>>0,I=I>>>0,C||$t(h,I,this.length);let G=this[h],te=1,le=0;for(;++le>>0,I=I>>>0,C||$t(h,I,this.length);let G=this[h+--I],te=1;for(;I>0&&(te*=256);)G+=this[h+--I]*te;return G},o.prototype.readUint8=o.prototype.readUInt8=function(h,I){return h=h>>>0,I||$t(h,1,this.length),this[h]},o.prototype.readUint16LE=o.prototype.readUInt16LE=function(h,I){return h=h>>>0,I||$t(h,2,this.length),this[h]|this[h+1]<<8},o.prototype.readUint16BE=o.prototype.readUInt16BE=function(h,I){return h=h>>>0,I||$t(h,2,this.length),this[h]<<8|this[h+1]},o.prototype.readUint32LE=o.prototype.readUInt32LE=function(h,I){return h=h>>>0,I||$t(h,4,this.length),(this[h]|this[h+1]<<8|this[h+2]<<16)+this[h+3]*16777216},o.prototype.readUint32BE=o.prototype.readUInt32BE=function(h,I){return h=h>>>0,I||$t(h,4,this.length),this[h]*16777216+(this[h+1]<<16|this[h+2]<<8|this[h+3])},o.prototype.readBigUInt64LE=Ia(function(h){h=h>>>0,tt(h,"offset");let I=this[h],C=this[h+7];(I===void 0||C===void 0)&&bt(h,this.length-8);let G=I+this[++h]*nn(2,8)+this[++h]*nn(2,16)+this[++h]*nn(2,24),te=this[++h]+this[++h]*nn(2,8)+this[++h]*nn(2,16)+C*nn(2,24);return BigInt(G)+(BigInt(te)<>>0,tt(h,"offset");let I=this[h],C=this[h+7];(I===void 0||C===void 0)&&bt(h,this.length-8);let G=I*nn(2,24)+this[++h]*nn(2,16)+this[++h]*nn(2,8)+this[++h],te=this[++h]*nn(2,24)+this[++h]*nn(2,16)+this[++h]*nn(2,8)+C;return(BigInt(G)<>>0,I=I>>>0,C||$t(h,I,this.length);let G=this[h],te=1,le=0;for(;++le=te&&(G-=Math.pow(2,8*I)),G},o.prototype.readIntBE=function(h,I,C){h=h>>>0,I=I>>>0,C||$t(h,I,this.length);let G=I,te=1,le=this[h+--G];for(;G>0&&(te*=256);)le+=this[h+--G]*te;return te*=128,le>=te&&(le-=Math.pow(2,8*I)),le},o.prototype.readInt8=function(h,I){return h=h>>>0,I||$t(h,1,this.length),this[h]&128?(255-this[h]+1)*-1:this[h]},o.prototype.readInt16LE=function(h,I){h=h>>>0,I||$t(h,2,this.length);let C=this[h]|this[h+1]<<8;return C&32768?C|4294901760:C},o.prototype.readInt16BE=function(h,I){h=h>>>0,I||$t(h,2,this.length);let C=this[h+1]|this[h]<<8;return C&32768?C|4294901760:C},o.prototype.readInt32LE=function(h,I){return h=h>>>0,I||$t(h,4,this.length),this[h]|this[h+1]<<8|this[h+2]<<16|this[h+3]<<24},o.prototype.readInt32BE=function(h,I){return h=h>>>0,I||$t(h,4,this.length),this[h]<<24|this[h+1]<<16|this[h+2]<<8|this[h+3]},o.prototype.readBigInt64LE=Ia(function(h){h=h>>>0,tt(h,"offset");let I=this[h],C=this[h+7];(I===void 0||C===void 0)&&bt(h,this.length-8);let G=this[h+4]+this[h+5]*nn(2,8)+this[h+6]*nn(2,16)+(C<<24);return(BigInt(G)<>>0,tt(h,"offset");let I=this[h],C=this[h+7];(I===void 0||C===void 0)&&bt(h,this.length-8);let G=(I<<24)+this[++h]*nn(2,16)+this[++h]*nn(2,8)+this[++h];return(BigInt(G)<>>0,I||$t(h,4,this.length),t.read(this,h,!0,23,4)},o.prototype.readFloatBE=function(h,I){return h=h>>>0,I||$t(h,4,this.length),t.read(this,h,!1,23,4)},o.prototype.readDoubleLE=function(h,I){return h=h>>>0,I||$t(h,8,this.length),t.read(this,h,!0,52,8)},o.prototype.readDoubleBE=function(h,I){return h=h>>>0,I||$t(h,8,this.length),t.read(this,h,!1,52,8)};function An(A,h,I,C,G,te){if(!o.isBuffer(A))throw new TypeError('"buffer" argument must be a Buffer instance');if(h>G||hA.length)throw new RangeError("Index out of range")}o.prototype.writeUintLE=o.prototype.writeUIntLE=function(h,I,C,G){if(h=+h,I=I>>>0,C=C>>>0,!G){let pt=Math.pow(2,8*C)-1;An(this,h,I,C,pt,0)}let te=1,le=0;for(this[I]=h&255;++le>>0,C=C>>>0,!G){let pt=Math.pow(2,8*C)-1;An(this,h,I,C,pt,0)}let te=C-1,le=1;for(this[I+te]=h&255;--te>=0&&(le*=256);)this[I+te]=h/le&255;return I+C},o.prototype.writeUint8=o.prototype.writeUInt8=function(h,I,C){return h=+h,I=I>>>0,C||An(this,h,I,1,255,0),this[I]=h&255,I+1},o.prototype.writeUint16LE=o.prototype.writeUInt16LE=function(h,I,C){return h=+h,I=I>>>0,C||An(this,h,I,2,65535,0),this[I]=h&255,this[I+1]=h>>>8,I+2},o.prototype.writeUint16BE=o.prototype.writeUInt16BE=function(h,I,C){return h=+h,I=I>>>0,C||An(this,h,I,2,65535,0),this[I]=h>>>8,this[I+1]=h&255,I+2},o.prototype.writeUint32LE=o.prototype.writeUInt32LE=function(h,I,C){return h=+h,I=I>>>0,C||An(this,h,I,4,4294967295,0),this[I+3]=h>>>24,this[I+2]=h>>>16,this[I+1]=h>>>8,this[I]=h&255,I+4},o.prototype.writeUint32BE=o.prototype.writeUInt32BE=function(h,I,C){return h=+h,I=I>>>0,C||An(this,h,I,4,4294967295,0),this[I]=h>>>24,this[I+1]=h>>>16,this[I+2]=h>>>8,this[I+3]=h&255,I+4};function se(A,h,I,C,G){Lt(h,C,G,A,I,7);let te=Number(h&BigInt(4294967295));A[I++]=te,te=te>>8,A[I++]=te,te=te>>8,A[I++]=te,te=te>>8,A[I++]=te;let le=Number(h>>BigInt(32)&BigInt(4294967295));return A[I++]=le,le=le>>8,A[I++]=le,le=le>>8,A[I++]=le,le=le>>8,A[I++]=le,I}function De(A,h,I,C,G){Lt(h,C,G,A,I,7);let te=Number(h&BigInt(4294967295));A[I+7]=te,te=te>>8,A[I+6]=te,te=te>>8,A[I+5]=te,te=te>>8,A[I+4]=te;let le=Number(h>>BigInt(32)&BigInt(4294967295));return A[I+3]=le,le=le>>8,A[I+2]=le,le=le>>8,A[I+1]=le,le=le>>8,A[I]=le,I+8}o.prototype.writeBigUInt64LE=Ia(function(h,I=0){return se(this,h,I,BigInt(0),BigInt("0xffffffffffffffff"))}),o.prototype.writeBigUInt64BE=Ia(function(h,I=0){return De(this,h,I,BigInt(0),BigInt("0xffffffffffffffff"))}),o.prototype.writeIntLE=function(h,I,C,G){if(h=+h,I=I>>>0,!G){let pn=Math.pow(2,8*C-1);An(this,h,I,C,pn-1,-pn)}let te=0,le=1,pt=0;for(this[I]=h&255;++te>0)-pt&255;return I+C},o.prototype.writeIntBE=function(h,I,C,G){if(h=+h,I=I>>>0,!G){let pn=Math.pow(2,8*C-1);An(this,h,I,C,pn-1,-pn)}let te=C-1,le=1,pt=0;for(this[I+te]=h&255;--te>=0&&(le*=256);)h<0&&pt===0&&this[I+te+1]!==0&&(pt=1),this[I+te]=(h/le>>0)-pt&255;return I+C},o.prototype.writeInt8=function(h,I,C){return h=+h,I=I>>>0,C||An(this,h,I,1,127,-128),h<0&&(h=255+h+1),this[I]=h&255,I+1},o.prototype.writeInt16LE=function(h,I,C){return h=+h,I=I>>>0,C||An(this,h,I,2,32767,-32768),this[I]=h&255,this[I+1]=h>>>8,I+2},o.prototype.writeInt16BE=function(h,I,C){return h=+h,I=I>>>0,C||An(this,h,I,2,32767,-32768),this[I]=h>>>8,this[I+1]=h&255,I+2},o.prototype.writeInt32LE=function(h,I,C){return h=+h,I=I>>>0,C||An(this,h,I,4,2147483647,-2147483648),this[I]=h&255,this[I+1]=h>>>8,this[I+2]=h>>>16,this[I+3]=h>>>24,I+4},o.prototype.writeInt32BE=function(h,I,C){return h=+h,I=I>>>0,C||An(this,h,I,4,2147483647,-2147483648),h<0&&(h=4294967295+h+1),this[I]=h>>>24,this[I+1]=h>>>16,this[I+2]=h>>>8,this[I+3]=h&255,I+4},o.prototype.writeBigInt64LE=Ia(function(h,I=0){return se(this,h,I,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))}),o.prototype.writeBigInt64BE=Ia(function(h,I=0){return De(this,h,I,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))});function _e(A,h,I,C,G,te){if(I+C>A.length)throw new RangeError("Index out of range");if(I<0)throw new RangeError("Index out of range")}function Le(A,h,I,C,G){return h=+h,I=I>>>0,G||_e(A,h,I,4),t.write(A,h,I,C,23,4),I+4}o.prototype.writeFloatLE=function(h,I,C){return Le(this,h,I,!0,C)},o.prototype.writeFloatBE=function(h,I,C){return Le(this,h,I,!1,C)};function _t(A,h,I,C,G){return h=+h,I=I>>>0,G||_e(A,h,I,8),t.write(A,h,I,C,52,8),I+8}o.prototype.writeDoubleLE=function(h,I,C){return _t(this,h,I,!0,C)},o.prototype.writeDoubleBE=function(h,I,C){return _t(this,h,I,!1,C)},o.prototype.copy=function(h,I,C,G){if(!o.isBuffer(h))throw new TypeError("argument should be a Buffer");if(C||(C=0),!G&&G!==0&&(G=this.length),I>=h.length&&(I=h.length),I||(I=0),G>0&&G=this.length)throw new RangeError("Index out of range");if(G<0)throw new RangeError("sourceEnd out of bounds");G>this.length&&(G=this.length),h.length-I>>0,C=C===void 0?this.length:C>>>0,h||(h=0);let te;if(typeof h=="number")for(te=I;tenn(2,32)?G=Me(String(I)):typeof I=="bigint"&&(G=String(I),(I>nn(BigInt(2),BigInt(32))||I<-nn(BigInt(2),BigInt(32)))&&(G=Me(G)),G+="n"),C+=` It must be ${h}. Received ${G}`,C},RangeError);function Me(A){let h="",I=A.length,C=A[0]==="-"?1:0;for(;I>=C+4;I-=3)h=`_${A.slice(I-3,I)}${h}`;return`${A.slice(0,I)}${h}`}function Qe(A,h,I){tt(h,"offset"),(A[h]===void 0||A[h+I]===void 0)&&bt(h,A.length-(I+1))}function Lt(A,h,I,C,G,te){if(A>I||A3?h===0||h===BigInt(0)?pt=`>= 0${le} and < 2${le} ** ${(te+1)*8}${le}`:pt=`>= -(2${le} ** ${(te+1)*8-1}${le}) and < 2 ** ${(te+1)*8-1}${le}`:pt=`>= ${h}${le} and <= ${I}${le}`,new Y.ERR_OUT_OF_RANGE("value",pt,A)}Qe(C,G,te)}function tt(A,h){if(typeof A!="number")throw new Y.ERR_INVALID_ARG_TYPE(h,"number",A)}function bt(A,h,I){throw Math.floor(A)!==A?(tt(A,I),new Y.ERR_OUT_OF_RANGE(I||"offset","an integer",A)):h<0?new Y.ERR_BUFFER_OUT_OF_BOUNDS:new Y.ERR_OUT_OF_RANGE(I||"offset",`>= ${I?1:0} and <= ${h}`,A)}let za=/[^+/0-9A-Za-z-_]/g;function qr(A){if(A=A.split("=")[0],A=A.trim().replace(za,""),A.length<2)return"";for(;A.length%4!==0;)A=A+"=";return A}function Wa(A,h){h=h||1/0;let I,C=A.length,G=null,te=[];for(let le=0;le55295&&I<57344){if(!G){if(I>56319){(h-=3)>-1&&te.push(239,191,189);continue}else if(le+1===C){(h-=3)>-1&&te.push(239,191,189);continue}G=I;continue}if(I<56320){(h-=3)>-1&&te.push(239,191,189),G=I;continue}I=(G-55296<<10|I-56320)+65536}else G&&(h-=3)>-1&&te.push(239,191,189);if(G=null,I<128){if((h-=1)<0)break;te.push(I)}else if(I<2048){if((h-=2)<0)break;te.push(I>>6|192,I&63|128)}else if(I<65536){if((h-=3)<0)break;te.push(I>>12|224,I>>6&63|128,I&63|128)}else if(I<1114112){if((h-=4)<0)break;te.push(I>>18|240,I>>12&63|128,I>>6&63|128,I&63|128)}else throw new Error("Invalid code point")}return te}function Ic(A){let h=[];for(let I=0;I>8,G=I%256,te.push(G),te.push(C);return te}function mr(A){return e.toByteArray(qr(A))}function ri(A,h,I,C){let G;for(G=0;G=h.length||G>=A.length);++G)h[G+I]=A[G];return G}function Mt(A,h){return A instanceof h||A!=null&&A.constructor!=null&&A.constructor.name!=null&&A.constructor.name===h.name}function Nr(A){return A!==A}let lu=function(){let A="0123456789abcdef",h=new Array(256);for(let I=0;I<16;++I){let C=I*16;for(let G=0;G<16;++G)h[C+G]=A[I]+A[G]}return h}();function Ia(A){return typeof BigInt=="undefined"?du:A}function du(){throw new Error("BigInt not supported")}return vu}var ad,vR,Hf,SR,vu,OR,Su,D,nde,rde,DR=gu(()=>{"use strict";m();T();N();ad={},vR=!1;Hf={},SR=!1;vu={},OR=!1;Su=kY();Su.Buffer;Su.SlowBuffer;Su.INSPECT_MAX_BYTES;Su.kMaxLength;D=Su.Buffer,nde=Su.INSPECT_MAX_BYTES,rde=Su.kMaxLength});var T=gu(()=>{"use strict";DR()});var bR=w(Bc=>{"use strict";m();T();N();Object.defineProperty(Bc,"__esModule",{value:!0});Bc.versionInfo=Bc.version=void 0;var MY="16.9.0";Bc.version=MY;var xY=Object.freeze({major:16,minor:9,patch:0,preReleaseTag:null});Bc.versionInfo=xY});var Cr=w(oy=>{"use strict";m();T();N();Object.defineProperty(oy,"__esModule",{value:!0});oy.devAssert=qY;function qY(e,t){if(!!!e)throw new Error(t)}});var zf=w(uy=>{"use strict";m();T();N();Object.defineProperty(uy,"__esModule",{value:!0});uy.isPromise=VY;function VY(e){return typeof(e==null?void 0:e.then)=="function"}});var Sa=w(cy=>{"use strict";m();T();N();Object.defineProperty(cy,"__esModule",{value:!0});cy.isObjectLike=jY;function jY(e){return typeof e=="object"&&e!==null}});var Ir=w(ly=>{"use strict";m();T();N();Object.defineProperty(ly,"__esModule",{value:!0});ly.invariant=KY;function KY(e,t){if(!!!e)throw new Error(t!=null?t:"Unexpected invariant triggered.")}});var Wf=w(dy=>{"use strict";m();T();N();Object.defineProperty(dy,"__esModule",{value:!0});dy.getLocation=QY;var GY=Ir(),$Y=/\r\n|[\n\r]/g;function QY(e,t){let n=0,r=1;for(let i of e.body.matchAll($Y)){if(typeof i.index=="number"||(0,GY.invariant)(!1),i.index>=t)break;n=i.index+i[0].length,r+=1}return{line:r,column:t+1-n}}});var py=w(Xf=>{"use strict";m();T();N();Object.defineProperty(Xf,"__esModule",{value:!0});Xf.printLocation=JY;Xf.printSourceLocation=RR;var YY=Wf();function JY(e){return RR(e.source,(0,YY.getLocation)(e.source,e.start))}function RR(e,t){let n=e.locationOffset.column-1,r="".padStart(n)+e.body,i=t.line-1,a=e.locationOffset.line-1,o=t.line+a,c=t.line===1?n:0,l=t.column+c,p=`${e.name}:${o}:${l} +`,f=r.split(/\r\n|[\n\r]/g),y=f[i];if(y.length>120){let g=Math.floor(l/80),_=l%80,F=[];for(let U=0;U["|",U]),["|","^".padStart(_)],["|",F[g+1]]])}return p+AR([[`${o-1} |`,f[i-1]],[`${o} |`,y],["|","^".padStart(l)],[`${o+1} |`,f[i+1]]])}function AR(e){let t=e.filter(([r,i])=>i!==void 0),n=Math.max(...t.map(([r])=>r.length));return t.map(([r,i])=>r.padStart(n)+(i?" "+i:"")).join(` +`)}});var He=w(Uc=>{"use strict";m();T();N();Object.defineProperty(Uc,"__esModule",{value:!0});Uc.GraphQLError=void 0;Uc.formatError=XY;Uc.printError=WY;var HY=Sa(),FR=Wf(),PR=py();function zY(e){let t=e[0];return t==null||"kind"in t||"length"in t?{nodes:t,source:e[1],positions:e[2],path:e[3],originalError:e[4],extensions:e[5]}:t}var fy=class e extends Error{constructor(t,...n){var r,i,a;let{nodes:o,source:c,positions:l,path:p,originalError:f,extensions:y}=zY(n);super(t),this.name="GraphQLError",this.path=p!=null?p:void 0,this.originalError=f!=null?f:void 0,this.nodes=wR(Array.isArray(o)?o:o?[o]:void 0);let g=wR((r=this.nodes)===null||r===void 0?void 0:r.map(F=>F.loc).filter(F=>F!=null));this.source=c!=null?c:g==null||(i=g[0])===null||i===void 0?void 0:i.source,this.positions=l!=null?l:g==null?void 0:g.map(F=>F.start),this.locations=l&&c?l.map(F=>(0,FR.getLocation)(c,F)):g==null?void 0:g.map(F=>(0,FR.getLocation)(F.source,F.start));let _=(0,HY.isObjectLike)(f==null?void 0:f.extensions)?f==null?void 0:f.extensions:void 0;this.extensions=(a=y!=null?y:_)!==null&&a!==void 0?a:Object.create(null),Object.defineProperties(this,{message:{writable:!0,enumerable:!0},name:{enumerable:!1},nodes:{enumerable:!1},source:{enumerable:!1},positions:{enumerable:!1},originalError:{enumerable:!1}}),f!=null&&f.stack?Object.defineProperty(this,"stack",{value:f.stack,writable:!0,configurable:!0}):Error.captureStackTrace?Error.captureStackTrace(this,e):Object.defineProperty(this,"stack",{value:Error().stack,writable:!0,configurable:!0})}get[Symbol.toStringTag](){return"GraphQLError"}toString(){let t=this.message;if(this.nodes)for(let n of this.nodes)n.loc&&(t+=` -`+(0,FR.printLocation)(n.loc));else if(this.source&&this.locations)for(let n of this.locations)t+=` +`+(0,PR.printLocation)(n.loc));else if(this.source&&this.locations)for(let n of this.locations)t+=` -`+(0,FR.printSourceLocation)(this.source,n);return t}toJSON(){let t={message:this.message};return this.locations!=null&&(t.locations=this.locations),this.path!=null&&(t.path=this.path),this.extensions!=null&&Object.keys(this.extensions).length>0&&(t.extensions=this.extensions),t}};Uc.GraphQLError=py;function PR(e){return e===void 0||e.length===0?void 0:e}function WY(e){return e.toString()}function XY(e){return e.toJSON()}});var Wf=w(fy=>{"use strict";f();N();m();Object.defineProperty(fy,"__esModule",{value:!0});fy.syntaxError=eJ;var ZY=He();function eJ(e,t,n){return new ZY.GraphQLError(`Syntax Error: ${n}`,{source:e,positions:[t]})}});var Oa=w(Oi=>{"use strict";f();N();m();Object.defineProperty(Oi,"__esModule",{value:!0});Oi.Token=Oi.QueryDocumentKeys=Oi.OperationTypeNode=Oi.Location=void 0;Oi.isNode=nJ;var my=class{constructor(t,n,r){this.start=t.start,this.end=n.end,this.startToken=t,this.endToken=n,this.source=r}get[Symbol.toStringTag](){return"Location"}toJSON(){return{start:this.start,end:this.end}}};Oi.Location=my;var Ny=class{constructor(t,n,r,i,a,o){this.kind=t,this.start=n,this.end=r,this.line=i,this.column=a,this.value=o,this.prev=null,this.next=null}get[Symbol.toStringTag](){return"Token"}toJSON(){return{kind:this.kind,value:this.value,line:this.line,column:this.column}}};Oi.Token=Ny;var wR={Name:[],Document:["definitions"],OperationDefinition:["name","variableDefinitions","directives","selectionSet"],VariableDefinition:["variable","type","defaultValue","directives"],Variable:["name"],SelectionSet:["selections"],Field:["alias","name","arguments","directives","selectionSet"],Argument:["name","value"],FragmentSpread:["name","directives"],InlineFragment:["typeCondition","directives","selectionSet"],FragmentDefinition:["name","variableDefinitions","typeCondition","directives","selectionSet"],IntValue:[],FloatValue:[],StringValue:[],BooleanValue:[],NullValue:[],EnumValue:[],ListValue:["values"],ObjectValue:["fields"],ObjectField:["name","value"],Directive:["name","arguments"],NamedType:["name"],ListType:["type"],NonNullType:["type"],SchemaDefinition:["description","directives","operationTypes"],OperationTypeDefinition:["type"],ScalarTypeDefinition:["description","name","directives"],ObjectTypeDefinition:["description","name","interfaces","directives","fields"],FieldDefinition:["description","name","arguments","type","directives"],InputValueDefinition:["description","name","type","defaultValue","directives"],InterfaceTypeDefinition:["description","name","interfaces","directives","fields"],UnionTypeDefinition:["description","name","directives","types"],EnumTypeDefinition:["description","name","directives","values"],EnumValueDefinition:["description","name","directives"],InputObjectTypeDefinition:["description","name","directives","fields"],DirectiveDefinition:["description","name","arguments","locations"],SchemaExtension:["directives","operationTypes"],ScalarTypeExtension:["name","directives"],ObjectTypeExtension:["name","interfaces","directives","fields"],InterfaceTypeExtension:["name","interfaces","directives","fields"],UnionTypeExtension:["name","directives","types"],EnumTypeExtension:["name","directives","values"],InputObjectTypeExtension:["name","directives","fields"]};Oi.QueryDocumentKeys=wR;var tJ=new Set(Object.keys(wR));function nJ(e){let t=e==null?void 0:e.kind;return typeof t=="string"&&tJ.has(t)}var Ty;Oi.OperationTypeNode=Ty;(function(e){e.QUERY="query",e.MUTATION="mutation",e.SUBSCRIPTION="subscription"})(Ty||(Oi.OperationTypeNode=Ty={}))});var kc=w(ad=>{"use strict";f();N();m();Object.defineProperty(ad,"__esModule",{value:!0});ad.DirectiveLocation=void 0;var Ey;ad.DirectiveLocation=Ey;(function(e){e.QUERY="QUERY",e.MUTATION="MUTATION",e.SUBSCRIPTION="SUBSCRIPTION",e.FIELD="FIELD",e.FRAGMENT_DEFINITION="FRAGMENT_DEFINITION",e.FRAGMENT_SPREAD="FRAGMENT_SPREAD",e.INLINE_FRAGMENT="INLINE_FRAGMENT",e.VARIABLE_DEFINITION="VARIABLE_DEFINITION",e.SCHEMA="SCHEMA",e.SCALAR="SCALAR",e.OBJECT="OBJECT",e.FIELD_DEFINITION="FIELD_DEFINITION",e.ARGUMENT_DEFINITION="ARGUMENT_DEFINITION",e.INTERFACE="INTERFACE",e.UNION="UNION",e.ENUM="ENUM",e.ENUM_VALUE="ENUM_VALUE",e.INPUT_OBJECT="INPUT_OBJECT",e.INPUT_FIELD_DEFINITION="INPUT_FIELD_DEFINITION"})(Ey||(ad.DirectiveLocation=Ey={}))});var Rt=w(sd=>{"use strict";f();N();m();Object.defineProperty(sd,"__esModule",{value:!0});sd.Kind=void 0;var hy;sd.Kind=hy;(function(e){e.NAME="Name",e.DOCUMENT="Document",e.OPERATION_DEFINITION="OperationDefinition",e.VARIABLE_DEFINITION="VariableDefinition",e.SELECTION_SET="SelectionSet",e.FIELD="Field",e.ARGUMENT="Argument",e.FRAGMENT_SPREAD="FragmentSpread",e.INLINE_FRAGMENT="InlineFragment",e.FRAGMENT_DEFINITION="FragmentDefinition",e.VARIABLE="Variable",e.INT="IntValue",e.FLOAT="FloatValue",e.STRING="StringValue",e.BOOLEAN="BooleanValue",e.NULL="NullValue",e.ENUM="EnumValue",e.LIST="ListValue",e.OBJECT="ObjectValue",e.OBJECT_FIELD="ObjectField",e.DIRECTIVE="Directive",e.NAMED_TYPE="NamedType",e.LIST_TYPE="ListType",e.NON_NULL_TYPE="NonNullType",e.SCHEMA_DEFINITION="SchemaDefinition",e.OPERATION_TYPE_DEFINITION="OperationTypeDefinition",e.SCALAR_TYPE_DEFINITION="ScalarTypeDefinition",e.OBJECT_TYPE_DEFINITION="ObjectTypeDefinition",e.FIELD_DEFINITION="FieldDefinition",e.INPUT_VALUE_DEFINITION="InputValueDefinition",e.INTERFACE_TYPE_DEFINITION="InterfaceTypeDefinition",e.UNION_TYPE_DEFINITION="UnionTypeDefinition",e.ENUM_TYPE_DEFINITION="EnumTypeDefinition",e.ENUM_VALUE_DEFINITION="EnumValueDefinition",e.INPUT_OBJECT_TYPE_DEFINITION="InputObjectTypeDefinition",e.DIRECTIVE_DEFINITION="DirectiveDefinition",e.SCHEMA_EXTENSION="SchemaExtension",e.SCALAR_TYPE_EXTENSION="ScalarTypeExtension",e.OBJECT_TYPE_EXTENSION="ObjectTypeExtension",e.INTERFACE_TYPE_EXTENSION="InterfaceTypeExtension",e.UNION_TYPE_EXTENSION="UnionTypeExtension",e.ENUM_TYPE_EXTENSION="EnumTypeExtension",e.INPUT_OBJECT_TYPE_EXTENSION="InputObjectTypeExtension"})(hy||(sd.Kind=hy={}))});var Xf=w(Ou=>{"use strict";f();N();m();Object.defineProperty(Ou,"__esModule",{value:!0});Ou.isDigit=LR;Ou.isLetter=yy;Ou.isNameContinue=aJ;Ou.isNameStart=iJ;Ou.isWhiteSpace=rJ;function rJ(e){return e===9||e===32}function LR(e){return e>=48&&e<=57}function yy(e){return e>=97&&e<=122||e>=65&&e<=90}function iJ(e){return yy(e)||e===95}function aJ(e){return yy(e)||LR(e)||e===95}});var ud=w(od=>{"use strict";f();N();m();Object.defineProperty(od,"__esModule",{value:!0});od.dedentBlockStringLines=sJ;od.isPrintableAsBlockString=uJ;od.printBlockString=cJ;var Iy=Xf();function sJ(e){var t;let n=Number.MAX_SAFE_INTEGER,r=null,i=-1;for(let o=0;oc===0?o:o.slice(n)).slice((t=r)!==null&&t!==void 0?t:0,i+1)}function oJ(e){let t=0;for(;t1&&r.slice(1).every(_=>_.length===0||(0,Iy.isWhiteSpace)(_.charCodeAt(0))),o=n.endsWith('\\"""'),c=e.endsWith('"')&&!o,l=e.endsWith("\\"),p=c||l,T=!(t!=null&&t.minimize)&&(!i||e.length>70||p||a||o),y="",g=i&&(0,Iy.isWhiteSpace)(e.charCodeAt(0));return(T&&!g||a)&&(y+=` -`),y+=n,(T||p)&&(y+=` -`),'"""'+y+'"""'}});var ld=w(cd=>{"use strict";f();N();m();Object.defineProperty(cd,"__esModule",{value:!0});cd.TokenKind=void 0;var gy;cd.TokenKind=gy;(function(e){e.SOF="",e.EOF="",e.BANG="!",e.DOLLAR="$",e.AMP="&",e.PAREN_L="(",e.PAREN_R=")",e.SPREAD="...",e.COLON=":",e.EQUALS="=",e.AT="@",e.BRACKET_L="[",e.BRACKET_R="]",e.BRACE_L="{",e.PIPE="|",e.BRACE_R="}",e.NAME="Name",e.INT="Int",e.FLOAT="Float",e.STRING="String",e.BLOCK_STRING="BlockString",e.COMMENT="Comment"})(gy||(cd.TokenKind=gy={}))});var em=w(pd=>{"use strict";f();N();m();Object.defineProperty(pd,"__esModule",{value:!0});pd.Lexer=void 0;pd.isPunctuatorTokenKind=dJ;var Wi=Wf(),BR=Oa(),lJ=ud(),Du=Xf(),It=ld(),vy=class{constructor(t){let n=new BR.Token(It.TokenKind.SOF,0,0,0,0);this.source=t,this.lastToken=n,this.token=n,this.line=1,this.lineStart=0}get[Symbol.toStringTag](){return"Lexer"}advance(){return this.lastToken=this.token,this.token=this.lookahead()}lookahead(){let t=this.token;if(t.kind!==It.TokenKind.EOF)do if(t.next)t=t.next;else{let n=pJ(this,t.end);t.next=n,n.prev=t,t=n}while(t.kind===It.TokenKind.COMMENT);return t}};pd.Lexer=vy;function dJ(e){return e===It.TokenKind.BANG||e===It.TokenKind.DOLLAR||e===It.TokenKind.AMP||e===It.TokenKind.PAREN_L||e===It.TokenKind.PAREN_R||e===It.TokenKind.SPREAD||e===It.TokenKind.COLON||e===It.TokenKind.EQUALS||e===It.TokenKind.AT||e===It.TokenKind.BRACKET_L||e===It.TokenKind.BRACKET_R||e===It.TokenKind.BRACE_L||e===It.TokenKind.PIPE||e===It.TokenKind.BRACE_R}function Mc(e){return e>=0&&e<=55295||e>=57344&&e<=1114111}function Zf(e,t){return UR(e.charCodeAt(t))&&kR(e.charCodeAt(t+1))}function UR(e){return e>=55296&&e<=56319}function kR(e){return e>=56320&&e<=57343}function bu(e,t){let n=e.source.body.codePointAt(t);if(n===void 0)return It.TokenKind.EOF;if(n>=32&&n<=126){let r=String.fromCodePoint(n);return r==='"'?`'"'`:`"${r}"`}return"U+"+n.toString(16).toUpperCase().padStart(4,"0")}function $n(e,t,n,r,i){let a=e.line,o=1+n-e.lineStart;return new BR.Token(t,n,r,a,o,i)}function pJ(e,t){let n=e.source.body,r=n.length,i=t;for(;i=48&&e<=57?e-48:e>=65&&e<=70?e-55:e>=97&&e<=102?e-87:-1}function hJ(e,t){let n=e.source.body;switch(n.charCodeAt(t+1)){case 34:return{value:'"',size:2};case 92:return{value:"\\",size:2};case 47:return{value:"/",size:2};case 98:return{value:"\b",size:2};case 102:return{value:"\f",size:2};case 110:return{value:` -`,size:2};case 114:return{value:"\r",size:2};case 116:return{value:" ",size:2}}throw(0,Wi.syntaxError)(e.source,t,`Invalid character escape sequence: "${n.slice(t,t+2)}".`)}function yJ(e,t){let n=e.source.body,r=n.length,i=e.lineStart,a=t+3,o=a,c="",l=[];for(;a{"use strict";f();N();m();Object.defineProperty(Sy,"__esModule",{value:!0});Sy.inspect=_J;var gJ=10,MR=2;function _J(e){return tm(e,[])}function tm(e,t){switch(typeof e){case"string":return JSON.stringify(e);case"function":return e.name?`[function ${e.name}]`:"[function]";case"object":return vJ(e,t);default:return String(e)}}function vJ(e,t){if(e===null)return"null";if(t.includes(e))return"[Circular]";let n=[...t,e];if(SJ(e)){let r=e.toJSON();if(r!==e)return typeof r=="string"?r:tm(r,n)}else if(Array.isArray(e))return DJ(e,n);return OJ(e,n)}function SJ(e){return typeof e.toJSON=="function"}function OJ(e,t){let n=Object.entries(e);return n.length===0?"{}":t.length>MR?"["+bJ(e)+"]":"{ "+n.map(([i,a])=>i+": "+tm(a,t)).join(", ")+" }"}function DJ(e,t){if(e.length===0)return"[]";if(t.length>MR)return"[Array]";let n=Math.min(gJ,e.length),r=e.length-n,i=[];for(let a=0;a1&&i.push(`... ${r} more items`),"["+i.join(", ")+"]"}function bJ(e){let t=Object.prototype.toString.call(e).replace(/^\[object /,"").replace(/]$/,"");if(t==="Object"&&typeof e.constructor=="function"){let n=e.constructor.name;if(typeof n=="string"&&n!=="")return n}return t}});var fd=w(nm=>{"use strict";f();N();m();Object.defineProperty(nm,"__esModule",{value:!0});nm.instanceOf=void 0;var AJ=Yt(),RJ=globalThis.process&&O.env.NODE_ENV==="production",FJ=RJ?function(t,n){return t instanceof n}:function(t,n){if(t instanceof n)return!0;if(typeof t=="object"&&t!==null){var r;let i=n.prototype[Symbol.toStringTag],a=Symbol.toStringTag in t?t[Symbol.toStringTag]:(r=t.constructor)===null||r===void 0?void 0:r.name;if(i===a){let o=(0,AJ.inspect)(t);throw new Error(`Cannot use ${i} "${o}" from another module or realm. +`+(0,PR.printSourceLocation)(this.source,n);return t}toJSON(){let t={message:this.message};return this.locations!=null&&(t.locations=this.locations),this.path!=null&&(t.path=this.path),this.extensions!=null&&Object.keys(this.extensions).length>0&&(t.extensions=this.extensions),t}};Uc.GraphQLError=fy;function wR(e){return e===void 0||e.length===0?void 0:e}function WY(e){return e.toString()}function XY(e){return e.toJSON()}});var Zf=w(my=>{"use strict";m();T();N();Object.defineProperty(my,"__esModule",{value:!0});my.syntaxError=eJ;var ZY=He();function eJ(e,t,n){return new ZY.GraphQLError(`Syntax Error: ${n}`,{source:e,positions:[t]})}});var Oa=w(Oi=>{"use strict";m();T();N();Object.defineProperty(Oi,"__esModule",{value:!0});Oi.Token=Oi.QueryDocumentKeys=Oi.OperationTypeNode=Oi.Location=void 0;Oi.isNode=nJ;var Ny=class{constructor(t,n,r){this.start=t.start,this.end=n.end,this.startToken=t,this.endToken=n,this.source=r}get[Symbol.toStringTag](){return"Location"}toJSON(){return{start:this.start,end:this.end}}};Oi.Location=Ny;var Ty=class{constructor(t,n,r,i,a,o){this.kind=t,this.start=n,this.end=r,this.line=i,this.column=a,this.value=o,this.prev=null,this.next=null}get[Symbol.toStringTag](){return"Token"}toJSON(){return{kind:this.kind,value:this.value,line:this.line,column:this.column}}};Oi.Token=Ty;var LR={Name:[],Document:["definitions"],OperationDefinition:["name","variableDefinitions","directives","selectionSet"],VariableDefinition:["variable","type","defaultValue","directives"],Variable:["name"],SelectionSet:["selections"],Field:["alias","name","arguments","directives","selectionSet"],Argument:["name","value"],FragmentSpread:["name","directives"],InlineFragment:["typeCondition","directives","selectionSet"],FragmentDefinition:["name","variableDefinitions","typeCondition","directives","selectionSet"],IntValue:[],FloatValue:[],StringValue:[],BooleanValue:[],NullValue:[],EnumValue:[],ListValue:["values"],ObjectValue:["fields"],ObjectField:["name","value"],Directive:["name","arguments"],NamedType:["name"],ListType:["type"],NonNullType:["type"],SchemaDefinition:["description","directives","operationTypes"],OperationTypeDefinition:["type"],ScalarTypeDefinition:["description","name","directives"],ObjectTypeDefinition:["description","name","interfaces","directives","fields"],FieldDefinition:["description","name","arguments","type","directives"],InputValueDefinition:["description","name","type","defaultValue","directives"],InterfaceTypeDefinition:["description","name","interfaces","directives","fields"],UnionTypeDefinition:["description","name","directives","types"],EnumTypeDefinition:["description","name","directives","values"],EnumValueDefinition:["description","name","directives"],InputObjectTypeDefinition:["description","name","directives","fields"],DirectiveDefinition:["description","name","arguments","locations"],SchemaExtension:["directives","operationTypes"],ScalarTypeExtension:["name","directives"],ObjectTypeExtension:["name","interfaces","directives","fields"],InterfaceTypeExtension:["name","interfaces","directives","fields"],UnionTypeExtension:["name","directives","types"],EnumTypeExtension:["name","directives","values"],InputObjectTypeExtension:["name","directives","fields"]};Oi.QueryDocumentKeys=LR;var tJ=new Set(Object.keys(LR));function nJ(e){let t=e==null?void 0:e.kind;return typeof t=="string"&&tJ.has(t)}var Ey;Oi.OperationTypeNode=Ey;(function(e){e.QUERY="query",e.MUTATION="mutation",e.SUBSCRIPTION="subscription"})(Ey||(Oi.OperationTypeNode=Ey={}))});var kc=w(sd=>{"use strict";m();T();N();Object.defineProperty(sd,"__esModule",{value:!0});sd.DirectiveLocation=void 0;var hy;sd.DirectiveLocation=hy;(function(e){e.QUERY="QUERY",e.MUTATION="MUTATION",e.SUBSCRIPTION="SUBSCRIPTION",e.FIELD="FIELD",e.FRAGMENT_DEFINITION="FRAGMENT_DEFINITION",e.FRAGMENT_SPREAD="FRAGMENT_SPREAD",e.INLINE_FRAGMENT="INLINE_FRAGMENT",e.VARIABLE_DEFINITION="VARIABLE_DEFINITION",e.SCHEMA="SCHEMA",e.SCALAR="SCALAR",e.OBJECT="OBJECT",e.FIELD_DEFINITION="FIELD_DEFINITION",e.ARGUMENT_DEFINITION="ARGUMENT_DEFINITION",e.INTERFACE="INTERFACE",e.UNION="UNION",e.ENUM="ENUM",e.ENUM_VALUE="ENUM_VALUE",e.INPUT_OBJECT="INPUT_OBJECT",e.INPUT_FIELD_DEFINITION="INPUT_FIELD_DEFINITION"})(hy||(sd.DirectiveLocation=hy={}))});var Rt=w(od=>{"use strict";m();T();N();Object.defineProperty(od,"__esModule",{value:!0});od.Kind=void 0;var yy;od.Kind=yy;(function(e){e.NAME="Name",e.DOCUMENT="Document",e.OPERATION_DEFINITION="OperationDefinition",e.VARIABLE_DEFINITION="VariableDefinition",e.SELECTION_SET="SelectionSet",e.FIELD="Field",e.ARGUMENT="Argument",e.FRAGMENT_SPREAD="FragmentSpread",e.INLINE_FRAGMENT="InlineFragment",e.FRAGMENT_DEFINITION="FragmentDefinition",e.VARIABLE="Variable",e.INT="IntValue",e.FLOAT="FloatValue",e.STRING="StringValue",e.BOOLEAN="BooleanValue",e.NULL="NullValue",e.ENUM="EnumValue",e.LIST="ListValue",e.OBJECT="ObjectValue",e.OBJECT_FIELD="ObjectField",e.DIRECTIVE="Directive",e.NAMED_TYPE="NamedType",e.LIST_TYPE="ListType",e.NON_NULL_TYPE="NonNullType",e.SCHEMA_DEFINITION="SchemaDefinition",e.OPERATION_TYPE_DEFINITION="OperationTypeDefinition",e.SCALAR_TYPE_DEFINITION="ScalarTypeDefinition",e.OBJECT_TYPE_DEFINITION="ObjectTypeDefinition",e.FIELD_DEFINITION="FieldDefinition",e.INPUT_VALUE_DEFINITION="InputValueDefinition",e.INTERFACE_TYPE_DEFINITION="InterfaceTypeDefinition",e.UNION_TYPE_DEFINITION="UnionTypeDefinition",e.ENUM_TYPE_DEFINITION="EnumTypeDefinition",e.ENUM_VALUE_DEFINITION="EnumValueDefinition",e.INPUT_OBJECT_TYPE_DEFINITION="InputObjectTypeDefinition",e.DIRECTIVE_DEFINITION="DirectiveDefinition",e.SCHEMA_EXTENSION="SchemaExtension",e.SCALAR_TYPE_EXTENSION="ScalarTypeExtension",e.OBJECT_TYPE_EXTENSION="ObjectTypeExtension",e.INTERFACE_TYPE_EXTENSION="InterfaceTypeExtension",e.UNION_TYPE_EXTENSION="UnionTypeExtension",e.ENUM_TYPE_EXTENSION="EnumTypeExtension",e.INPUT_OBJECT_TYPE_EXTENSION="InputObjectTypeExtension"})(yy||(od.Kind=yy={}))});var em=w(Ou=>{"use strict";m();T();N();Object.defineProperty(Ou,"__esModule",{value:!0});Ou.isDigit=CR;Ou.isLetter=Iy;Ou.isNameContinue=aJ;Ou.isNameStart=iJ;Ou.isWhiteSpace=rJ;function rJ(e){return e===9||e===32}function CR(e){return e>=48&&e<=57}function Iy(e){return e>=97&&e<=122||e>=65&&e<=90}function iJ(e){return Iy(e)||e===95}function aJ(e){return Iy(e)||CR(e)||e===95}});var cd=w(ud=>{"use strict";m();T();N();Object.defineProperty(ud,"__esModule",{value:!0});ud.dedentBlockStringLines=sJ;ud.isPrintableAsBlockString=uJ;ud.printBlockString=cJ;var gy=em();function sJ(e){var t;let n=Number.MAX_SAFE_INTEGER,r=null,i=-1;for(let o=0;oc===0?o:o.slice(n)).slice((t=r)!==null&&t!==void 0?t:0,i+1)}function oJ(e){let t=0;for(;t1&&r.slice(1).every(_=>_.length===0||(0,gy.isWhiteSpace)(_.charCodeAt(0))),o=n.endsWith('\\"""'),c=e.endsWith('"')&&!o,l=e.endsWith("\\"),p=c||l,f=!(t!=null&&t.minimize)&&(!i||e.length>70||p||a||o),y="",g=i&&(0,gy.isWhiteSpace)(e.charCodeAt(0));return(f&&!g||a)&&(y+=` +`),y+=n,(f||p)&&(y+=` +`),'"""'+y+'"""'}});var dd=w(ld=>{"use strict";m();T();N();Object.defineProperty(ld,"__esModule",{value:!0});ld.TokenKind=void 0;var _y;ld.TokenKind=_y;(function(e){e.SOF="",e.EOF="",e.BANG="!",e.DOLLAR="$",e.AMP="&",e.PAREN_L="(",e.PAREN_R=")",e.SPREAD="...",e.COLON=":",e.EQUALS="=",e.AT="@",e.BRACKET_L="[",e.BRACKET_R="]",e.BRACE_L="{",e.PIPE="|",e.BRACE_R="}",e.NAME="Name",e.INT="Int",e.FLOAT="Float",e.STRING="String",e.BLOCK_STRING="BlockString",e.COMMENT="Comment"})(_y||(ld.TokenKind=_y={}))});var nm=w(fd=>{"use strict";m();T();N();Object.defineProperty(fd,"__esModule",{value:!0});fd.Lexer=void 0;fd.isPunctuatorTokenKind=dJ;var Wi=Zf(),UR=Oa(),lJ=cd(),Du=em(),It=dd(),Sy=class{constructor(t){let n=new UR.Token(It.TokenKind.SOF,0,0,0,0);this.source=t,this.lastToken=n,this.token=n,this.line=1,this.lineStart=0}get[Symbol.toStringTag](){return"Lexer"}advance(){return this.lastToken=this.token,this.token=this.lookahead()}lookahead(){let t=this.token;if(t.kind!==It.TokenKind.EOF)do if(t.next)t=t.next;else{let n=pJ(this,t.end);t.next=n,n.prev=t,t=n}while(t.kind===It.TokenKind.COMMENT);return t}};fd.Lexer=Sy;function dJ(e){return e===It.TokenKind.BANG||e===It.TokenKind.DOLLAR||e===It.TokenKind.AMP||e===It.TokenKind.PAREN_L||e===It.TokenKind.PAREN_R||e===It.TokenKind.SPREAD||e===It.TokenKind.COLON||e===It.TokenKind.EQUALS||e===It.TokenKind.AT||e===It.TokenKind.BRACKET_L||e===It.TokenKind.BRACKET_R||e===It.TokenKind.BRACE_L||e===It.TokenKind.PIPE||e===It.TokenKind.BRACE_R}function Mc(e){return e>=0&&e<=55295||e>=57344&&e<=1114111}function tm(e,t){return kR(e.charCodeAt(t))&&MR(e.charCodeAt(t+1))}function kR(e){return e>=55296&&e<=56319}function MR(e){return e>=56320&&e<=57343}function bu(e,t){let n=e.source.body.codePointAt(t);if(n===void 0)return It.TokenKind.EOF;if(n>=32&&n<=126){let r=String.fromCodePoint(n);return r==='"'?`'"'`:`"${r}"`}return"U+"+n.toString(16).toUpperCase().padStart(4,"0")}function $n(e,t,n,r,i){let a=e.line,o=1+n-e.lineStart;return new UR.Token(t,n,r,a,o,i)}function pJ(e,t){let n=e.source.body,r=n.length,i=t;for(;i=48&&e<=57?e-48:e>=65&&e<=70?e-55:e>=97&&e<=102?e-87:-1}function hJ(e,t){let n=e.source.body;switch(n.charCodeAt(t+1)){case 34:return{value:'"',size:2};case 92:return{value:"\\",size:2};case 47:return{value:"/",size:2};case 98:return{value:"\b",size:2};case 102:return{value:"\f",size:2};case 110:return{value:` +`,size:2};case 114:return{value:"\r",size:2};case 116:return{value:" ",size:2}}throw(0,Wi.syntaxError)(e.source,t,`Invalid character escape sequence: "${n.slice(t,t+2)}".`)}function yJ(e,t){let n=e.source.body,r=n.length,i=e.lineStart,a=t+3,o=a,c="",l=[];for(;a{"use strict";m();T();N();Object.defineProperty(Oy,"__esModule",{value:!0});Oy.inspect=_J;var gJ=10,xR=2;function _J(e){return rm(e,[])}function rm(e,t){switch(typeof e){case"string":return JSON.stringify(e);case"function":return e.name?`[function ${e.name}]`:"[function]";case"object":return vJ(e,t);default:return String(e)}}function vJ(e,t){if(e===null)return"null";if(t.includes(e))return"[Circular]";let n=[...t,e];if(SJ(e)){let r=e.toJSON();if(r!==e)return typeof r=="string"?r:rm(r,n)}else if(Array.isArray(e))return DJ(e,n);return OJ(e,n)}function SJ(e){return typeof e.toJSON=="function"}function OJ(e,t){let n=Object.entries(e);return n.length===0?"{}":t.length>xR?"["+bJ(e)+"]":"{ "+n.map(([i,a])=>i+": "+rm(a,t)).join(", ")+" }"}function DJ(e,t){if(e.length===0)return"[]";if(t.length>xR)return"[Array]";let n=Math.min(gJ,e.length),r=e.length-n,i=[];for(let a=0;a1&&i.push(`... ${r} more items`),"["+i.join(", ")+"]"}function bJ(e){let t=Object.prototype.toString.call(e).replace(/^\[object /,"").replace(/]$/,"");if(t==="Object"&&typeof e.constructor=="function"){let n=e.constructor.name;if(typeof n=="string"&&n!=="")return n}return t}});var md=w(im=>{"use strict";m();T();N();Object.defineProperty(im,"__esModule",{value:!0});im.instanceOf=void 0;var AJ=Yt(),RJ=globalThis.process&&O.env.NODE_ENV==="production",FJ=RJ?function(t,n){return t instanceof n}:function(t,n){if(t instanceof n)return!0;if(typeof t=="object"&&t!==null){var r;let i=n.prototype[Symbol.toStringTag],a=Symbol.toStringTag in t?t[Symbol.toStringTag]:(r=t.constructor)===null||r===void 0?void 0:r.name;if(i===a){let o=(0,AJ.inspect)(t);throw new Error(`Cannot use ${i} "${o}" from another module or realm. Ensure that there is only one instance of "graphql" in the node_modules directory. If different versions of "graphql" are the dependencies of other @@ -32,17 +32,17 @@ https://yarnpkg.com/en/docs/selective-version-resolutions Duplicate "graphql" modules cannot be used at the same time since different versions may have different capabilities and behavior. The data from one version used in the function from another could produce confusing and -spurious results.`)}}return!1};nm.instanceOf=FJ});var im=w(md=>{"use strict";f();N();m();Object.defineProperty(md,"__esModule",{value:!0});md.Source=void 0;md.isSource=LJ;var Oy=Cr(),PJ=Yt(),wJ=fd(),rm=class{constructor(t,n="GraphQL request",r={line:1,column:1}){typeof t=="string"||(0,Oy.devAssert)(!1,`Body must be a string. Received: ${(0,PJ.inspect)(t)}.`),this.body=t,this.name=n,this.locationOffset=r,this.locationOffset.line>0||(0,Oy.devAssert)(!1,"line in locationOffset is 1-indexed and must be positive."),this.locationOffset.column>0||(0,Oy.devAssert)(!1,"column in locationOffset is 1-indexed and must be positive.")}get[Symbol.toStringTag](){return"Source"}};md.Source=rm;function LJ(e){return(0,wJ.instanceOf)(e,rm)}});var xc=w(ko=>{"use strict";f();N();m();Object.defineProperty(ko,"__esModule",{value:!0});ko.Parser=void 0;ko.parse=BJ;ko.parseConstValue=kJ;ko.parseType=MJ;ko.parseValue=UJ;var Au=Wf(),Nd=Oa(),CJ=kc(),st=Rt(),qR=em(),xR=im(),Se=ld();function BJ(e,t){return new Ru(e,t).parseDocument()}function UJ(e,t){let n=new Ru(e,t);n.expectToken(Se.TokenKind.SOF);let r=n.parseValueLiteral(!1);return n.expectToken(Se.TokenKind.EOF),r}function kJ(e,t){let n=new Ru(e,t);n.expectToken(Se.TokenKind.SOF);let r=n.parseConstValueLiteral();return n.expectToken(Se.TokenKind.EOF),r}function MJ(e,t){let n=new Ru(e,t);n.expectToken(Se.TokenKind.SOF);let r=n.parseTypeReference();return n.expectToken(Se.TokenKind.EOF),r}var Ru=class{constructor(t,n={}){let r=(0,xR.isSource)(t)?t:new xR.Source(t);this._lexer=new qR.Lexer(r),this._options=n,this._tokenCounter=0}parseName(){let t=this.expectToken(Se.TokenKind.NAME);return this.node(t,{kind:st.Kind.NAME,value:t.value})}parseDocument(){return this.node(this._lexer.token,{kind:st.Kind.DOCUMENT,definitions:this.many(Se.TokenKind.SOF,this.parseDefinition,Se.TokenKind.EOF)})}parseDefinition(){if(this.peek(Se.TokenKind.BRACE_L))return this.parseOperationDefinition();let t=this.peekDescription(),n=t?this._lexer.lookahead():this._lexer.token;if(n.kind===Se.TokenKind.NAME){switch(n.value){case"schema":return this.parseSchemaDefinition();case"scalar":return this.parseScalarTypeDefinition();case"type":return this.parseObjectTypeDefinition();case"interface":return this.parseInterfaceTypeDefinition();case"union":return this.parseUnionTypeDefinition();case"enum":return this.parseEnumTypeDefinition();case"input":return this.parseInputObjectTypeDefinition();case"directive":return this.parseDirectiveDefinition()}if(t)throw(0,Au.syntaxError)(this._lexer.source,this._lexer.token.start,"Unexpected description, descriptions are supported only on type definitions.");switch(n.value){case"query":case"mutation":case"subscription":return this.parseOperationDefinition();case"fragment":return this.parseFragmentDefinition();case"extend":return this.parseTypeSystemExtension()}}throw this.unexpected(n)}parseOperationDefinition(){let t=this._lexer.token;if(this.peek(Se.TokenKind.BRACE_L))return this.node(t,{kind:st.Kind.OPERATION_DEFINITION,operation:Nd.OperationTypeNode.QUERY,name:void 0,variableDefinitions:[],directives:[],selectionSet:this.parseSelectionSet()});let n=this.parseOperationType(),r;return this.peek(Se.TokenKind.NAME)&&(r=this.parseName()),this.node(t,{kind:st.Kind.OPERATION_DEFINITION,operation:n,name:r,variableDefinitions:this.parseVariableDefinitions(),directives:this.parseDirectives(!1),selectionSet:this.parseSelectionSet()})}parseOperationType(){let t=this.expectToken(Se.TokenKind.NAME);switch(t.value){case"query":return Nd.OperationTypeNode.QUERY;case"mutation":return Nd.OperationTypeNode.MUTATION;case"subscription":return Nd.OperationTypeNode.SUBSCRIPTION}throw this.unexpected(t)}parseVariableDefinitions(){return this.optionalMany(Se.TokenKind.PAREN_L,this.parseVariableDefinition,Se.TokenKind.PAREN_R)}parseVariableDefinition(){return this.node(this._lexer.token,{kind:st.Kind.VARIABLE_DEFINITION,variable:this.parseVariable(),type:(this.expectToken(Se.TokenKind.COLON),this.parseTypeReference()),defaultValue:this.expectOptionalToken(Se.TokenKind.EQUALS)?this.parseConstValueLiteral():void 0,directives:this.parseConstDirectives()})}parseVariable(){let t=this._lexer.token;return this.expectToken(Se.TokenKind.DOLLAR),this.node(t,{kind:st.Kind.VARIABLE,name:this.parseName()})}parseSelectionSet(){return this.node(this._lexer.token,{kind:st.Kind.SELECTION_SET,selections:this.many(Se.TokenKind.BRACE_L,this.parseSelection,Se.TokenKind.BRACE_R)})}parseSelection(){return this.peek(Se.TokenKind.SPREAD)?this.parseFragment():this.parseField()}parseField(){let t=this._lexer.token,n=this.parseName(),r,i;return this.expectOptionalToken(Se.TokenKind.COLON)?(r=n,i=this.parseName()):i=n,this.node(t,{kind:st.Kind.FIELD,alias:r,name:i,arguments:this.parseArguments(!1),directives:this.parseDirectives(!1),selectionSet:this.peek(Se.TokenKind.BRACE_L)?this.parseSelectionSet():void 0})}parseArguments(t){let n=t?this.parseConstArgument:this.parseArgument;return this.optionalMany(Se.TokenKind.PAREN_L,n,Se.TokenKind.PAREN_R)}parseArgument(t=!1){let n=this._lexer.token,r=this.parseName();return this.expectToken(Se.TokenKind.COLON),this.node(n,{kind:st.Kind.ARGUMENT,name:r,value:this.parseValueLiteral(t)})}parseConstArgument(){return this.parseArgument(!0)}parseFragment(){let t=this._lexer.token;this.expectToken(Se.TokenKind.SPREAD);let n=this.expectOptionalKeyword("on");return!n&&this.peek(Se.TokenKind.NAME)?this.node(t,{kind:st.Kind.FRAGMENT_SPREAD,name:this.parseFragmentName(),directives:this.parseDirectives(!1)}):this.node(t,{kind:st.Kind.INLINE_FRAGMENT,typeCondition:n?this.parseNamedType():void 0,directives:this.parseDirectives(!1),selectionSet:this.parseSelectionSet()})}parseFragmentDefinition(){let t=this._lexer.token;return this.expectKeyword("fragment"),this._options.allowLegacyFragmentVariables===!0?this.node(t,{kind:st.Kind.FRAGMENT_DEFINITION,name:this.parseFragmentName(),variableDefinitions:this.parseVariableDefinitions(),typeCondition:(this.expectKeyword("on"),this.parseNamedType()),directives:this.parseDirectives(!1),selectionSet:this.parseSelectionSet()}):this.node(t,{kind:st.Kind.FRAGMENT_DEFINITION,name:this.parseFragmentName(),typeCondition:(this.expectKeyword("on"),this.parseNamedType()),directives:this.parseDirectives(!1),selectionSet:this.parseSelectionSet()})}parseFragmentName(){if(this._lexer.token.value==="on")throw this.unexpected();return this.parseName()}parseValueLiteral(t){let n=this._lexer.token;switch(n.kind){case Se.TokenKind.BRACKET_L:return this.parseList(t);case Se.TokenKind.BRACE_L:return this.parseObject(t);case Se.TokenKind.INT:return this.advanceLexer(),this.node(n,{kind:st.Kind.INT,value:n.value});case Se.TokenKind.FLOAT:return this.advanceLexer(),this.node(n,{kind:st.Kind.FLOAT,value:n.value});case Se.TokenKind.STRING:case Se.TokenKind.BLOCK_STRING:return this.parseStringLiteral();case Se.TokenKind.NAME:switch(this.advanceLexer(),n.value){case"true":return this.node(n,{kind:st.Kind.BOOLEAN,value:!0});case"false":return this.node(n,{kind:st.Kind.BOOLEAN,value:!1});case"null":return this.node(n,{kind:st.Kind.NULL});default:return this.node(n,{kind:st.Kind.ENUM,value:n.value})}case Se.TokenKind.DOLLAR:if(t)if(this.expectToken(Se.TokenKind.DOLLAR),this._lexer.token.kind===Se.TokenKind.NAME){let r=this._lexer.token.value;throw(0,Au.syntaxError)(this._lexer.source,n.start,`Unexpected variable "$${r}" in constant value.`)}else throw this.unexpected(n);return this.parseVariable();default:throw this.unexpected()}}parseConstValueLiteral(){return this.parseValueLiteral(!0)}parseStringLiteral(){let t=this._lexer.token;return this.advanceLexer(),this.node(t,{kind:st.Kind.STRING,value:t.value,block:t.kind===Se.TokenKind.BLOCK_STRING})}parseList(t){let n=()=>this.parseValueLiteral(t);return this.node(this._lexer.token,{kind:st.Kind.LIST,values:this.any(Se.TokenKind.BRACKET_L,n,Se.TokenKind.BRACKET_R)})}parseObject(t){let n=()=>this.parseObjectField(t);return this.node(this._lexer.token,{kind:st.Kind.OBJECT,fields:this.any(Se.TokenKind.BRACE_L,n,Se.TokenKind.BRACE_R)})}parseObjectField(t){let n=this._lexer.token,r=this.parseName();return this.expectToken(Se.TokenKind.COLON),this.node(n,{kind:st.Kind.OBJECT_FIELD,name:r,value:this.parseValueLiteral(t)})}parseDirectives(t){let n=[];for(;this.peek(Se.TokenKind.AT);)n.push(this.parseDirective(t));return n}parseConstDirectives(){return this.parseDirectives(!0)}parseDirective(t){let n=this._lexer.token;return this.expectToken(Se.TokenKind.AT),this.node(n,{kind:st.Kind.DIRECTIVE,name:this.parseName(),arguments:this.parseArguments(t)})}parseTypeReference(){let t=this._lexer.token,n;if(this.expectOptionalToken(Se.TokenKind.BRACKET_L)){let r=this.parseTypeReference();this.expectToken(Se.TokenKind.BRACKET_R),n=this.node(t,{kind:st.Kind.LIST_TYPE,type:r})}else n=this.parseNamedType();return this.expectOptionalToken(Se.TokenKind.BANG)?this.node(t,{kind:st.Kind.NON_NULL_TYPE,type:n}):n}parseNamedType(){return this.node(this._lexer.token,{kind:st.Kind.NAMED_TYPE,name:this.parseName()})}peekDescription(){return this.peek(Se.TokenKind.STRING)||this.peek(Se.TokenKind.BLOCK_STRING)}parseDescription(){if(this.peekDescription())return this.parseStringLiteral()}parseSchemaDefinition(){let t=this._lexer.token,n=this.parseDescription();this.expectKeyword("schema");let r=this.parseConstDirectives(),i=this.many(Se.TokenKind.BRACE_L,this.parseOperationTypeDefinition,Se.TokenKind.BRACE_R);return this.node(t,{kind:st.Kind.SCHEMA_DEFINITION,description:n,directives:r,operationTypes:i})}parseOperationTypeDefinition(){let t=this._lexer.token,n=this.parseOperationType();this.expectToken(Se.TokenKind.COLON);let r=this.parseNamedType();return this.node(t,{kind:st.Kind.OPERATION_TYPE_DEFINITION,operation:n,type:r})}parseScalarTypeDefinition(){let t=this._lexer.token,n=this.parseDescription();this.expectKeyword("scalar");let r=this.parseName(),i=this.parseConstDirectives();return this.node(t,{kind:st.Kind.SCALAR_TYPE_DEFINITION,description:n,name:r,directives:i})}parseObjectTypeDefinition(){let t=this._lexer.token,n=this.parseDescription();this.expectKeyword("type");let r=this.parseName(),i=this.parseImplementsInterfaces(),a=this.parseConstDirectives(),o=this.parseFieldsDefinition();return this.node(t,{kind:st.Kind.OBJECT_TYPE_DEFINITION,description:n,name:r,interfaces:i,directives:a,fields:o})}parseImplementsInterfaces(){return this.expectOptionalKeyword("implements")?this.delimitedMany(Se.TokenKind.AMP,this.parseNamedType):[]}parseFieldsDefinition(){return this.optionalMany(Se.TokenKind.BRACE_L,this.parseFieldDefinition,Se.TokenKind.BRACE_R)}parseFieldDefinition(){let t=this._lexer.token,n=this.parseDescription(),r=this.parseName(),i=this.parseArgumentDefs();this.expectToken(Se.TokenKind.COLON);let a=this.parseTypeReference(),o=this.parseConstDirectives();return this.node(t,{kind:st.Kind.FIELD_DEFINITION,description:n,name:r,arguments:i,type:a,directives:o})}parseArgumentDefs(){return this.optionalMany(Se.TokenKind.PAREN_L,this.parseInputValueDef,Se.TokenKind.PAREN_R)}parseInputValueDef(){let t=this._lexer.token,n=this.parseDescription(),r=this.parseName();this.expectToken(Se.TokenKind.COLON);let i=this.parseTypeReference(),a;this.expectOptionalToken(Se.TokenKind.EQUALS)&&(a=this.parseConstValueLiteral());let o=this.parseConstDirectives();return this.node(t,{kind:st.Kind.INPUT_VALUE_DEFINITION,description:n,name:r,type:i,defaultValue:a,directives:o})}parseInterfaceTypeDefinition(){let t=this._lexer.token,n=this.parseDescription();this.expectKeyword("interface");let r=this.parseName(),i=this.parseImplementsInterfaces(),a=this.parseConstDirectives(),o=this.parseFieldsDefinition();return this.node(t,{kind:st.Kind.INTERFACE_TYPE_DEFINITION,description:n,name:r,interfaces:i,directives:a,fields:o})}parseUnionTypeDefinition(){let t=this._lexer.token,n=this.parseDescription();this.expectKeyword("union");let r=this.parseName(),i=this.parseConstDirectives(),a=this.parseUnionMemberTypes();return this.node(t,{kind:st.Kind.UNION_TYPE_DEFINITION,description:n,name:r,directives:i,types:a})}parseUnionMemberTypes(){return this.expectOptionalToken(Se.TokenKind.EQUALS)?this.delimitedMany(Se.TokenKind.PIPE,this.parseNamedType):[]}parseEnumTypeDefinition(){let t=this._lexer.token,n=this.parseDescription();this.expectKeyword("enum");let r=this.parseName(),i=this.parseConstDirectives(),a=this.parseEnumValuesDefinition();return this.node(t,{kind:st.Kind.ENUM_TYPE_DEFINITION,description:n,name:r,directives:i,values:a})}parseEnumValuesDefinition(){return this.optionalMany(Se.TokenKind.BRACE_L,this.parseEnumValueDefinition,Se.TokenKind.BRACE_R)}parseEnumValueDefinition(){let t=this._lexer.token,n=this.parseDescription(),r=this.parseEnumValueName(),i=this.parseConstDirectives();return this.node(t,{kind:st.Kind.ENUM_VALUE_DEFINITION,description:n,name:r,directives:i})}parseEnumValueName(){if(this._lexer.token.value==="true"||this._lexer.token.value==="false"||this._lexer.token.value==="null")throw(0,Au.syntaxError)(this._lexer.source,this._lexer.token.start,`${am(this._lexer.token)} is reserved and cannot be used for an enum value.`);return this.parseName()}parseInputObjectTypeDefinition(){let t=this._lexer.token,n=this.parseDescription();this.expectKeyword("input");let r=this.parseName(),i=this.parseConstDirectives(),a=this.parseInputFieldsDefinition();return this.node(t,{kind:st.Kind.INPUT_OBJECT_TYPE_DEFINITION,description:n,name:r,directives:i,fields:a})}parseInputFieldsDefinition(){return this.optionalMany(Se.TokenKind.BRACE_L,this.parseInputValueDef,Se.TokenKind.BRACE_R)}parseTypeSystemExtension(){let t=this._lexer.lookahead();if(t.kind===Se.TokenKind.NAME)switch(t.value){case"schema":return this.parseSchemaExtension();case"scalar":return this.parseScalarTypeExtension();case"type":return this.parseObjectTypeExtension();case"interface":return this.parseInterfaceTypeExtension();case"union":return this.parseUnionTypeExtension();case"enum":return this.parseEnumTypeExtension();case"input":return this.parseInputObjectTypeExtension()}throw this.unexpected(t)}parseSchemaExtension(){let t=this._lexer.token;this.expectKeyword("extend"),this.expectKeyword("schema");let n=this.parseConstDirectives(),r=this.optionalMany(Se.TokenKind.BRACE_L,this.parseOperationTypeDefinition,Se.TokenKind.BRACE_R);if(n.length===0&&r.length===0)throw this.unexpected();return this.node(t,{kind:st.Kind.SCHEMA_EXTENSION,directives:n,operationTypes:r})}parseScalarTypeExtension(){let t=this._lexer.token;this.expectKeyword("extend"),this.expectKeyword("scalar");let n=this.parseName(),r=this.parseConstDirectives();if(r.length===0)throw this.unexpected();return this.node(t,{kind:st.Kind.SCALAR_TYPE_EXTENSION,name:n,directives:r})}parseObjectTypeExtension(){let t=this._lexer.token;this.expectKeyword("extend"),this.expectKeyword("type");let n=this.parseName(),r=this.parseImplementsInterfaces(),i=this.parseConstDirectives(),a=this.parseFieldsDefinition();if(r.length===0&&i.length===0&&a.length===0)throw this.unexpected();return this.node(t,{kind:st.Kind.OBJECT_TYPE_EXTENSION,name:n,interfaces:r,directives:i,fields:a})}parseInterfaceTypeExtension(){let t=this._lexer.token;this.expectKeyword("extend"),this.expectKeyword("interface");let n=this.parseName(),r=this.parseImplementsInterfaces(),i=this.parseConstDirectives(),a=this.parseFieldsDefinition();if(r.length===0&&i.length===0&&a.length===0)throw this.unexpected();return this.node(t,{kind:st.Kind.INTERFACE_TYPE_EXTENSION,name:n,interfaces:r,directives:i,fields:a})}parseUnionTypeExtension(){let t=this._lexer.token;this.expectKeyword("extend"),this.expectKeyword("union");let n=this.parseName(),r=this.parseConstDirectives(),i=this.parseUnionMemberTypes();if(r.length===0&&i.length===0)throw this.unexpected();return this.node(t,{kind:st.Kind.UNION_TYPE_EXTENSION,name:n,directives:r,types:i})}parseEnumTypeExtension(){let t=this._lexer.token;this.expectKeyword("extend"),this.expectKeyword("enum");let n=this.parseName(),r=this.parseConstDirectives(),i=this.parseEnumValuesDefinition();if(r.length===0&&i.length===0)throw this.unexpected();return this.node(t,{kind:st.Kind.ENUM_TYPE_EXTENSION,name:n,directives:r,values:i})}parseInputObjectTypeExtension(){let t=this._lexer.token;this.expectKeyword("extend"),this.expectKeyword("input");let n=this.parseName(),r=this.parseConstDirectives(),i=this.parseInputFieldsDefinition();if(r.length===0&&i.length===0)throw this.unexpected();return this.node(t,{kind:st.Kind.INPUT_OBJECT_TYPE_EXTENSION,name:n,directives:r,fields:i})}parseDirectiveDefinition(){let t=this._lexer.token,n=this.parseDescription();this.expectKeyword("directive"),this.expectToken(Se.TokenKind.AT);let r=this.parseName(),i=this.parseArgumentDefs(),a=this.expectOptionalKeyword("repeatable");this.expectKeyword("on");let o=this.parseDirectiveLocations();return this.node(t,{kind:st.Kind.DIRECTIVE_DEFINITION,description:n,name:r,arguments:i,repeatable:a,locations:o})}parseDirectiveLocations(){return this.delimitedMany(Se.TokenKind.PIPE,this.parseDirectiveLocation)}parseDirectiveLocation(){let t=this._lexer.token,n=this.parseName();if(Object.prototype.hasOwnProperty.call(CJ.DirectiveLocation,n.value))return n;throw this.unexpected(t)}node(t,n){return this._options.noLocation!==!0&&(n.loc=new Nd.Location(t,this._lexer.lastToken,this._lexer.source)),n}peek(t){return this._lexer.token.kind===t}expectToken(t){let n=this._lexer.token;if(n.kind===t)return this.advanceLexer(),n;throw(0,Au.syntaxError)(this._lexer.source,n.start,`Expected ${VR(t)}, found ${am(n)}.`)}expectOptionalToken(t){return this._lexer.token.kind===t?(this.advanceLexer(),!0):!1}expectKeyword(t){let n=this._lexer.token;if(n.kind===Se.TokenKind.NAME&&n.value===t)this.advanceLexer();else throw(0,Au.syntaxError)(this._lexer.source,n.start,`Expected "${t}", found ${am(n)}.`)}expectOptionalKeyword(t){let n=this._lexer.token;return n.kind===Se.TokenKind.NAME&&n.value===t?(this.advanceLexer(),!0):!1}unexpected(t){let n=t!=null?t:this._lexer.token;return(0,Au.syntaxError)(this._lexer.source,n.start,`Unexpected ${am(n)}.`)}any(t,n,r){this.expectToken(t);let i=[];for(;!this.expectOptionalToken(r);)i.push(n.call(this));return i}optionalMany(t,n,r){if(this.expectOptionalToken(t)){let i=[];do i.push(n.call(this));while(!this.expectOptionalToken(r));return i}return[]}many(t,n,r){this.expectToken(t);let i=[];do i.push(n.call(this));while(!this.expectOptionalToken(r));return i}delimitedMany(t,n){this.expectOptionalToken(t);let r=[];do r.push(n.call(this));while(this.expectOptionalToken(t));return r}advanceLexer(){let{maxTokens:t}=this._options,n=this._lexer.advance();if(t!==void 0&&n.kind!==Se.TokenKind.EOF&&(++this._tokenCounter,this._tokenCounter>t))throw(0,Au.syntaxError)(this._lexer.source,n.start,`Document contains more that ${t} tokens. Parsing aborted.`)}};ko.Parser=Ru;function am(e){let t=e.value;return VR(e.kind)+(t!=null?` "${t}"`:"")}function VR(e){return(0,qR.isPunctuatorTokenKind)(e)?`"${e}"`:e}});var Mo=w(Dy=>{"use strict";f();N();m();Object.defineProperty(Dy,"__esModule",{value:!0});Dy.didYouMean=qJ;var xJ=5;function qJ(e,t){let[n,r]=t?[e,t]:[void 0,e],i=" Did you mean ";n&&(i+=n+" ");let a=r.map(l=>`"${l}"`);switch(a.length){case 0:return"";case 1:return i+a[0]+"?";case 2:return i+a[0]+" or "+a[1]+"?"}let o=a.slice(0,xJ),c=o.pop();return i+o.join(", ")+", or "+c+"?"}});var jR=w(by=>{"use strict";f();N();m();Object.defineProperty(by,"__esModule",{value:!0});by.identityFunc=VJ;function VJ(e){return e}});var xo=w(Ay=>{"use strict";f();N();m();Object.defineProperty(Ay,"__esModule",{value:!0});Ay.keyMap=jJ;function jJ(e,t){let n=Object.create(null);for(let r of e)n[t(r)]=r;return n}});var Td=w(Ry=>{"use strict";f();N();m();Object.defineProperty(Ry,"__esModule",{value:!0});Ry.keyValMap=KJ;function KJ(e,t,n){let r=Object.create(null);for(let i of e)r[t(i)]=n(i);return r}});var Py=w(Fy=>{"use strict";f();N();m();Object.defineProperty(Fy,"__esModule",{value:!0});Fy.mapValue=GJ;function GJ(e,t){let n=Object.create(null);for(let r of Object.keys(e))n[r]=t(e[r],r);return n}});var Ed=w(Ly=>{"use strict";f();N();m();Object.defineProperty(Ly,"__esModule",{value:!0});Ly.naturalCompare=$J;function $J(e,t){let n=0,r=0;for(;n0);let c=0;do++r,c=c*10+a-wy,a=t.charCodeAt(r);while(sm(a)&&c>0);if(oc)return 1}else{if(ia)return 1;++n,++r}}return e.length-t.length}var wy=48,QJ=57;function sm(e){return!isNaN(e)&&wy<=e&&e<=QJ}});var qo=w(By=>{"use strict";f();N();m();Object.defineProperty(By,"__esModule",{value:!0});By.suggestionList=JJ;var YJ=Ed();function JJ(e,t){let n=Object.create(null),r=new Cy(e),i=Math.floor(e.length*.4)+1;for(let a of t){let o=r.measure(a,i);o!==void 0&&(n[a]=o)}return Object.keys(n).sort((a,o)=>{let c=n[a]-n[o];return c!==0?c:(0,YJ.naturalCompare)(a,o)})}var Cy=class{constructor(t){this._input=t,this._inputLowerCase=t.toLowerCase(),this._inputArray=KR(this._inputLowerCase),this._rows=[new Array(t.length+1).fill(0),new Array(t.length+1).fill(0),new Array(t.length+1).fill(0)]}measure(t,n){if(this._input===t)return 0;let r=t.toLowerCase();if(this._inputLowerCase===r)return 1;let i=KR(r),a=this._inputArray;if(i.lengthn)return;let l=this._rows;for(let T=0;T<=c;T++)l[0][T]=T;for(let T=1;T<=o;T++){let y=l[(T-1)%3],g=l[T%3],_=g[0]=T;for(let F=1;F<=c;F++){let U=i[T-1]===a[F-1]?0:1,K=Math.min(y[F]+1,g[F-1]+1,y[F-1]+U);if(T>1&&F>1&&i[T-1]===a[F-2]&&i[T-2]===a[F-1]){let J=l[(T-2)%3][F-2];K=Math.min(K,J+1)}K<_&&(_=K),g[F]=K}if(_>n)return}let p=l[o%3][c];return p<=n?p:void 0}};function KR(e){let t=e.length,n=new Array(t);for(let r=0;r{"use strict";f();N();m();Object.defineProperty(Uy,"__esModule",{value:!0});Uy.toObjMap=HJ;function HJ(e){if(e==null)return Object.create(null);if(Object.getPrototypeOf(e)===null)return e;let t=Object.create(null);for(let[n,r]of Object.entries(e))t[n]=r;return t}});var GR=w(ky=>{"use strict";f();N();m();Object.defineProperty(ky,"__esModule",{value:!0});ky.printString=zJ;function zJ(e){return`"${e.replace(WJ,XJ)}"`}var WJ=/[\x00-\x1f\x22\x5c\x7f-\x9f]/g;function XJ(e){return ZJ[e.charCodeAt(0)]}var ZJ=["\\u0000","\\u0001","\\u0002","\\u0003","\\u0004","\\u0005","\\u0006","\\u0007","\\b","\\t","\\n","\\u000B","\\f","\\r","\\u000E","\\u000F","\\u0010","\\u0011","\\u0012","\\u0013","\\u0014","\\u0015","\\u0016","\\u0017","\\u0018","\\u0019","\\u001A","\\u001B","\\u001C","\\u001D","\\u001E","\\u001F","","",'\\"',"","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","\\\\","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","\\u007F","\\u0080","\\u0081","\\u0082","\\u0083","\\u0084","\\u0085","\\u0086","\\u0087","\\u0088","\\u0089","\\u008A","\\u008B","\\u008C","\\u008D","\\u008E","\\u008F","\\u0090","\\u0091","\\u0092","\\u0093","\\u0094","\\u0095","\\u0096","\\u0097","\\u0098","\\u0099","\\u009A","\\u009B","\\u009C","\\u009D","\\u009E","\\u009F"]});var Fu=w(Vo=>{"use strict";f();N();m();Object.defineProperty(Vo,"__esModule",{value:!0});Vo.BREAK=void 0;Vo.getEnterLeaveForKind=um;Vo.getVisitFn=iH;Vo.visit=nH;Vo.visitInParallel=rH;var eH=Cr(),tH=Yt(),My=Oa(),$R=Rt(),qc=Object.freeze({});Vo.BREAK=qc;function nH(e,t,n=My.QueryDocumentKeys){let r=new Map;for(let J of Object.values($R.Kind))r.set(J,um(t,J));let i,a=Array.isArray(e),o=[e],c=-1,l=[],p=e,T,y,g=[],_=[];do{c++;let J=c===o.length,ee=J&&l.length!==0;if(J){if(T=_.length===0?void 0:g[g.length-1],p=y,y=_.pop(),ee)if(a){p=p.slice();let Te=0;for(let[de,we]of l){let qe=de-Te;we===null?(p.splice(qe,1),Te++):p[qe]=we}}else{p=Object.defineProperties({},Object.getOwnPropertyDescriptors(p));for(let[Te,de]of l)p[Te]=de}c=i.index,o=i.keys,l=i.edits,a=i.inArray,i=i.prev}else if(y){if(T=a?c:o[c],p=y[T],p==null)continue;g.push(T)}let W;if(!Array.isArray(p)){var F,U;(0,My.isNode)(p)||(0,eH.devAssert)(!1,`Invalid AST Node: ${(0,tH.inspect)(p)}.`);let Te=J?(F=r.get(p.kind))===null||F===void 0?void 0:F.leave:(U=r.get(p.kind))===null||U===void 0?void 0:U.enter;if(W=Te==null?void 0:Te.call(t,p,T,y,g,_),W===qc)break;if(W===!1){if(!J){g.pop();continue}}else if(W!==void 0&&(l.push([T,W]),!J))if((0,My.isNode)(W))p=W;else{g.pop();continue}}if(W===void 0&&ee&&l.push([T,p]),J)g.pop();else{var K;i={inArray:a,index:c,keys:o,edits:l,prev:i},a=Array.isArray(p),o=a?p:(K=n[p.kind])!==null&&K!==void 0?K:[],c=-1,l=[],y&&_.push(y),y=p}}while(i!==void 0);return l.length!==0?l[l.length-1][1]:e}function rH(e){let t=new Array(e.length).fill(null),n=Object.create(null);for(let r of Object.values($R.Kind)){let i=!1,a=new Array(e.length).fill(void 0),o=new Array(e.length).fill(void 0);for(let l=0;l{"use strict";f();N();m();Object.defineProperty(xy,"__esModule",{value:!0});xy.print=uH;var aH=ud(),sH=GR(),oH=Fu();function uH(e){return(0,oH.visit)(e,lH)}var cH=80,lH={Name:{leave:e=>e.value},Variable:{leave:e=>"$"+e.name},Document:{leave:e=>xe(e.definitions,` +spurious results.`)}}return!1};im.instanceOf=FJ});var sm=w(Nd=>{"use strict";m();T();N();Object.defineProperty(Nd,"__esModule",{value:!0});Nd.Source=void 0;Nd.isSource=LJ;var Dy=Cr(),PJ=Yt(),wJ=md(),am=class{constructor(t,n="GraphQL request",r={line:1,column:1}){typeof t=="string"||(0,Dy.devAssert)(!1,`Body must be a string. Received: ${(0,PJ.inspect)(t)}.`),this.body=t,this.name=n,this.locationOffset=r,this.locationOffset.line>0||(0,Dy.devAssert)(!1,"line in locationOffset is 1-indexed and must be positive."),this.locationOffset.column>0||(0,Dy.devAssert)(!1,"column in locationOffset is 1-indexed and must be positive.")}get[Symbol.toStringTag](){return"Source"}};Nd.Source=am;function LJ(e){return(0,wJ.instanceOf)(e,am)}});var xc=w(Mo=>{"use strict";m();T();N();Object.defineProperty(Mo,"__esModule",{value:!0});Mo.Parser=void 0;Mo.parse=BJ;Mo.parseConstValue=kJ;Mo.parseType=MJ;Mo.parseValue=UJ;var Au=Zf(),Td=Oa(),CJ=kc(),st=Rt(),VR=nm(),qR=sm(),Se=dd();function BJ(e,t){return new Ru(e,t).parseDocument()}function UJ(e,t){let n=new Ru(e,t);n.expectToken(Se.TokenKind.SOF);let r=n.parseValueLiteral(!1);return n.expectToken(Se.TokenKind.EOF),r}function kJ(e,t){let n=new Ru(e,t);n.expectToken(Se.TokenKind.SOF);let r=n.parseConstValueLiteral();return n.expectToken(Se.TokenKind.EOF),r}function MJ(e,t){let n=new Ru(e,t);n.expectToken(Se.TokenKind.SOF);let r=n.parseTypeReference();return n.expectToken(Se.TokenKind.EOF),r}var Ru=class{constructor(t,n={}){let r=(0,qR.isSource)(t)?t:new qR.Source(t);this._lexer=new VR.Lexer(r),this._options=n,this._tokenCounter=0}parseName(){let t=this.expectToken(Se.TokenKind.NAME);return this.node(t,{kind:st.Kind.NAME,value:t.value})}parseDocument(){return this.node(this._lexer.token,{kind:st.Kind.DOCUMENT,definitions:this.many(Se.TokenKind.SOF,this.parseDefinition,Se.TokenKind.EOF)})}parseDefinition(){if(this.peek(Se.TokenKind.BRACE_L))return this.parseOperationDefinition();let t=this.peekDescription(),n=t?this._lexer.lookahead():this._lexer.token;if(n.kind===Se.TokenKind.NAME){switch(n.value){case"schema":return this.parseSchemaDefinition();case"scalar":return this.parseScalarTypeDefinition();case"type":return this.parseObjectTypeDefinition();case"interface":return this.parseInterfaceTypeDefinition();case"union":return this.parseUnionTypeDefinition();case"enum":return this.parseEnumTypeDefinition();case"input":return this.parseInputObjectTypeDefinition();case"directive":return this.parseDirectiveDefinition()}if(t)throw(0,Au.syntaxError)(this._lexer.source,this._lexer.token.start,"Unexpected description, descriptions are supported only on type definitions.");switch(n.value){case"query":case"mutation":case"subscription":return this.parseOperationDefinition();case"fragment":return this.parseFragmentDefinition();case"extend":return this.parseTypeSystemExtension()}}throw this.unexpected(n)}parseOperationDefinition(){let t=this._lexer.token;if(this.peek(Se.TokenKind.BRACE_L))return this.node(t,{kind:st.Kind.OPERATION_DEFINITION,operation:Td.OperationTypeNode.QUERY,name:void 0,variableDefinitions:[],directives:[],selectionSet:this.parseSelectionSet()});let n=this.parseOperationType(),r;return this.peek(Se.TokenKind.NAME)&&(r=this.parseName()),this.node(t,{kind:st.Kind.OPERATION_DEFINITION,operation:n,name:r,variableDefinitions:this.parseVariableDefinitions(),directives:this.parseDirectives(!1),selectionSet:this.parseSelectionSet()})}parseOperationType(){let t=this.expectToken(Se.TokenKind.NAME);switch(t.value){case"query":return Td.OperationTypeNode.QUERY;case"mutation":return Td.OperationTypeNode.MUTATION;case"subscription":return Td.OperationTypeNode.SUBSCRIPTION}throw this.unexpected(t)}parseVariableDefinitions(){return this.optionalMany(Se.TokenKind.PAREN_L,this.parseVariableDefinition,Se.TokenKind.PAREN_R)}parseVariableDefinition(){return this.node(this._lexer.token,{kind:st.Kind.VARIABLE_DEFINITION,variable:this.parseVariable(),type:(this.expectToken(Se.TokenKind.COLON),this.parseTypeReference()),defaultValue:this.expectOptionalToken(Se.TokenKind.EQUALS)?this.parseConstValueLiteral():void 0,directives:this.parseConstDirectives()})}parseVariable(){let t=this._lexer.token;return this.expectToken(Se.TokenKind.DOLLAR),this.node(t,{kind:st.Kind.VARIABLE,name:this.parseName()})}parseSelectionSet(){return this.node(this._lexer.token,{kind:st.Kind.SELECTION_SET,selections:this.many(Se.TokenKind.BRACE_L,this.parseSelection,Se.TokenKind.BRACE_R)})}parseSelection(){return this.peek(Se.TokenKind.SPREAD)?this.parseFragment():this.parseField()}parseField(){let t=this._lexer.token,n=this.parseName(),r,i;return this.expectOptionalToken(Se.TokenKind.COLON)?(r=n,i=this.parseName()):i=n,this.node(t,{kind:st.Kind.FIELD,alias:r,name:i,arguments:this.parseArguments(!1),directives:this.parseDirectives(!1),selectionSet:this.peek(Se.TokenKind.BRACE_L)?this.parseSelectionSet():void 0})}parseArguments(t){let n=t?this.parseConstArgument:this.parseArgument;return this.optionalMany(Se.TokenKind.PAREN_L,n,Se.TokenKind.PAREN_R)}parseArgument(t=!1){let n=this._lexer.token,r=this.parseName();return this.expectToken(Se.TokenKind.COLON),this.node(n,{kind:st.Kind.ARGUMENT,name:r,value:this.parseValueLiteral(t)})}parseConstArgument(){return this.parseArgument(!0)}parseFragment(){let t=this._lexer.token;this.expectToken(Se.TokenKind.SPREAD);let n=this.expectOptionalKeyword("on");return!n&&this.peek(Se.TokenKind.NAME)?this.node(t,{kind:st.Kind.FRAGMENT_SPREAD,name:this.parseFragmentName(),directives:this.parseDirectives(!1)}):this.node(t,{kind:st.Kind.INLINE_FRAGMENT,typeCondition:n?this.parseNamedType():void 0,directives:this.parseDirectives(!1),selectionSet:this.parseSelectionSet()})}parseFragmentDefinition(){let t=this._lexer.token;return this.expectKeyword("fragment"),this._options.allowLegacyFragmentVariables===!0?this.node(t,{kind:st.Kind.FRAGMENT_DEFINITION,name:this.parseFragmentName(),variableDefinitions:this.parseVariableDefinitions(),typeCondition:(this.expectKeyword("on"),this.parseNamedType()),directives:this.parseDirectives(!1),selectionSet:this.parseSelectionSet()}):this.node(t,{kind:st.Kind.FRAGMENT_DEFINITION,name:this.parseFragmentName(),typeCondition:(this.expectKeyword("on"),this.parseNamedType()),directives:this.parseDirectives(!1),selectionSet:this.parseSelectionSet()})}parseFragmentName(){if(this._lexer.token.value==="on")throw this.unexpected();return this.parseName()}parseValueLiteral(t){let n=this._lexer.token;switch(n.kind){case Se.TokenKind.BRACKET_L:return this.parseList(t);case Se.TokenKind.BRACE_L:return this.parseObject(t);case Se.TokenKind.INT:return this.advanceLexer(),this.node(n,{kind:st.Kind.INT,value:n.value});case Se.TokenKind.FLOAT:return this.advanceLexer(),this.node(n,{kind:st.Kind.FLOAT,value:n.value});case Se.TokenKind.STRING:case Se.TokenKind.BLOCK_STRING:return this.parseStringLiteral();case Se.TokenKind.NAME:switch(this.advanceLexer(),n.value){case"true":return this.node(n,{kind:st.Kind.BOOLEAN,value:!0});case"false":return this.node(n,{kind:st.Kind.BOOLEAN,value:!1});case"null":return this.node(n,{kind:st.Kind.NULL});default:return this.node(n,{kind:st.Kind.ENUM,value:n.value})}case Se.TokenKind.DOLLAR:if(t)if(this.expectToken(Se.TokenKind.DOLLAR),this._lexer.token.kind===Se.TokenKind.NAME){let r=this._lexer.token.value;throw(0,Au.syntaxError)(this._lexer.source,n.start,`Unexpected variable "$${r}" in constant value.`)}else throw this.unexpected(n);return this.parseVariable();default:throw this.unexpected()}}parseConstValueLiteral(){return this.parseValueLiteral(!0)}parseStringLiteral(){let t=this._lexer.token;return this.advanceLexer(),this.node(t,{kind:st.Kind.STRING,value:t.value,block:t.kind===Se.TokenKind.BLOCK_STRING})}parseList(t){let n=()=>this.parseValueLiteral(t);return this.node(this._lexer.token,{kind:st.Kind.LIST,values:this.any(Se.TokenKind.BRACKET_L,n,Se.TokenKind.BRACKET_R)})}parseObject(t){let n=()=>this.parseObjectField(t);return this.node(this._lexer.token,{kind:st.Kind.OBJECT,fields:this.any(Se.TokenKind.BRACE_L,n,Se.TokenKind.BRACE_R)})}parseObjectField(t){let n=this._lexer.token,r=this.parseName();return this.expectToken(Se.TokenKind.COLON),this.node(n,{kind:st.Kind.OBJECT_FIELD,name:r,value:this.parseValueLiteral(t)})}parseDirectives(t){let n=[];for(;this.peek(Se.TokenKind.AT);)n.push(this.parseDirective(t));return n}parseConstDirectives(){return this.parseDirectives(!0)}parseDirective(t){let n=this._lexer.token;return this.expectToken(Se.TokenKind.AT),this.node(n,{kind:st.Kind.DIRECTIVE,name:this.parseName(),arguments:this.parseArguments(t)})}parseTypeReference(){let t=this._lexer.token,n;if(this.expectOptionalToken(Se.TokenKind.BRACKET_L)){let r=this.parseTypeReference();this.expectToken(Se.TokenKind.BRACKET_R),n=this.node(t,{kind:st.Kind.LIST_TYPE,type:r})}else n=this.parseNamedType();return this.expectOptionalToken(Se.TokenKind.BANG)?this.node(t,{kind:st.Kind.NON_NULL_TYPE,type:n}):n}parseNamedType(){return this.node(this._lexer.token,{kind:st.Kind.NAMED_TYPE,name:this.parseName()})}peekDescription(){return this.peek(Se.TokenKind.STRING)||this.peek(Se.TokenKind.BLOCK_STRING)}parseDescription(){if(this.peekDescription())return this.parseStringLiteral()}parseSchemaDefinition(){let t=this._lexer.token,n=this.parseDescription();this.expectKeyword("schema");let r=this.parseConstDirectives(),i=this.many(Se.TokenKind.BRACE_L,this.parseOperationTypeDefinition,Se.TokenKind.BRACE_R);return this.node(t,{kind:st.Kind.SCHEMA_DEFINITION,description:n,directives:r,operationTypes:i})}parseOperationTypeDefinition(){let t=this._lexer.token,n=this.parseOperationType();this.expectToken(Se.TokenKind.COLON);let r=this.parseNamedType();return this.node(t,{kind:st.Kind.OPERATION_TYPE_DEFINITION,operation:n,type:r})}parseScalarTypeDefinition(){let t=this._lexer.token,n=this.parseDescription();this.expectKeyword("scalar");let r=this.parseName(),i=this.parseConstDirectives();return this.node(t,{kind:st.Kind.SCALAR_TYPE_DEFINITION,description:n,name:r,directives:i})}parseObjectTypeDefinition(){let t=this._lexer.token,n=this.parseDescription();this.expectKeyword("type");let r=this.parseName(),i=this.parseImplementsInterfaces(),a=this.parseConstDirectives(),o=this.parseFieldsDefinition();return this.node(t,{kind:st.Kind.OBJECT_TYPE_DEFINITION,description:n,name:r,interfaces:i,directives:a,fields:o})}parseImplementsInterfaces(){return this.expectOptionalKeyword("implements")?this.delimitedMany(Se.TokenKind.AMP,this.parseNamedType):[]}parseFieldsDefinition(){return this.optionalMany(Se.TokenKind.BRACE_L,this.parseFieldDefinition,Se.TokenKind.BRACE_R)}parseFieldDefinition(){let t=this._lexer.token,n=this.parseDescription(),r=this.parseName(),i=this.parseArgumentDefs();this.expectToken(Se.TokenKind.COLON);let a=this.parseTypeReference(),o=this.parseConstDirectives();return this.node(t,{kind:st.Kind.FIELD_DEFINITION,description:n,name:r,arguments:i,type:a,directives:o})}parseArgumentDefs(){return this.optionalMany(Se.TokenKind.PAREN_L,this.parseInputValueDef,Se.TokenKind.PAREN_R)}parseInputValueDef(){let t=this._lexer.token,n=this.parseDescription(),r=this.parseName();this.expectToken(Se.TokenKind.COLON);let i=this.parseTypeReference(),a;this.expectOptionalToken(Se.TokenKind.EQUALS)&&(a=this.parseConstValueLiteral());let o=this.parseConstDirectives();return this.node(t,{kind:st.Kind.INPUT_VALUE_DEFINITION,description:n,name:r,type:i,defaultValue:a,directives:o})}parseInterfaceTypeDefinition(){let t=this._lexer.token,n=this.parseDescription();this.expectKeyword("interface");let r=this.parseName(),i=this.parseImplementsInterfaces(),a=this.parseConstDirectives(),o=this.parseFieldsDefinition();return this.node(t,{kind:st.Kind.INTERFACE_TYPE_DEFINITION,description:n,name:r,interfaces:i,directives:a,fields:o})}parseUnionTypeDefinition(){let t=this._lexer.token,n=this.parseDescription();this.expectKeyword("union");let r=this.parseName(),i=this.parseConstDirectives(),a=this.parseUnionMemberTypes();return this.node(t,{kind:st.Kind.UNION_TYPE_DEFINITION,description:n,name:r,directives:i,types:a})}parseUnionMemberTypes(){return this.expectOptionalToken(Se.TokenKind.EQUALS)?this.delimitedMany(Se.TokenKind.PIPE,this.parseNamedType):[]}parseEnumTypeDefinition(){let t=this._lexer.token,n=this.parseDescription();this.expectKeyword("enum");let r=this.parseName(),i=this.parseConstDirectives(),a=this.parseEnumValuesDefinition();return this.node(t,{kind:st.Kind.ENUM_TYPE_DEFINITION,description:n,name:r,directives:i,values:a})}parseEnumValuesDefinition(){return this.optionalMany(Se.TokenKind.BRACE_L,this.parseEnumValueDefinition,Se.TokenKind.BRACE_R)}parseEnumValueDefinition(){let t=this._lexer.token,n=this.parseDescription(),r=this.parseEnumValueName(),i=this.parseConstDirectives();return this.node(t,{kind:st.Kind.ENUM_VALUE_DEFINITION,description:n,name:r,directives:i})}parseEnumValueName(){if(this._lexer.token.value==="true"||this._lexer.token.value==="false"||this._lexer.token.value==="null")throw(0,Au.syntaxError)(this._lexer.source,this._lexer.token.start,`${om(this._lexer.token)} is reserved and cannot be used for an enum value.`);return this.parseName()}parseInputObjectTypeDefinition(){let t=this._lexer.token,n=this.parseDescription();this.expectKeyword("input");let r=this.parseName(),i=this.parseConstDirectives(),a=this.parseInputFieldsDefinition();return this.node(t,{kind:st.Kind.INPUT_OBJECT_TYPE_DEFINITION,description:n,name:r,directives:i,fields:a})}parseInputFieldsDefinition(){return this.optionalMany(Se.TokenKind.BRACE_L,this.parseInputValueDef,Se.TokenKind.BRACE_R)}parseTypeSystemExtension(){let t=this._lexer.lookahead();if(t.kind===Se.TokenKind.NAME)switch(t.value){case"schema":return this.parseSchemaExtension();case"scalar":return this.parseScalarTypeExtension();case"type":return this.parseObjectTypeExtension();case"interface":return this.parseInterfaceTypeExtension();case"union":return this.parseUnionTypeExtension();case"enum":return this.parseEnumTypeExtension();case"input":return this.parseInputObjectTypeExtension()}throw this.unexpected(t)}parseSchemaExtension(){let t=this._lexer.token;this.expectKeyword("extend"),this.expectKeyword("schema");let n=this.parseConstDirectives(),r=this.optionalMany(Se.TokenKind.BRACE_L,this.parseOperationTypeDefinition,Se.TokenKind.BRACE_R);if(n.length===0&&r.length===0)throw this.unexpected();return this.node(t,{kind:st.Kind.SCHEMA_EXTENSION,directives:n,operationTypes:r})}parseScalarTypeExtension(){let t=this._lexer.token;this.expectKeyword("extend"),this.expectKeyword("scalar");let n=this.parseName(),r=this.parseConstDirectives();if(r.length===0)throw this.unexpected();return this.node(t,{kind:st.Kind.SCALAR_TYPE_EXTENSION,name:n,directives:r})}parseObjectTypeExtension(){let t=this._lexer.token;this.expectKeyword("extend"),this.expectKeyword("type");let n=this.parseName(),r=this.parseImplementsInterfaces(),i=this.parseConstDirectives(),a=this.parseFieldsDefinition();if(r.length===0&&i.length===0&&a.length===0)throw this.unexpected();return this.node(t,{kind:st.Kind.OBJECT_TYPE_EXTENSION,name:n,interfaces:r,directives:i,fields:a})}parseInterfaceTypeExtension(){let t=this._lexer.token;this.expectKeyword("extend"),this.expectKeyword("interface");let n=this.parseName(),r=this.parseImplementsInterfaces(),i=this.parseConstDirectives(),a=this.parseFieldsDefinition();if(r.length===0&&i.length===0&&a.length===0)throw this.unexpected();return this.node(t,{kind:st.Kind.INTERFACE_TYPE_EXTENSION,name:n,interfaces:r,directives:i,fields:a})}parseUnionTypeExtension(){let t=this._lexer.token;this.expectKeyword("extend"),this.expectKeyword("union");let n=this.parseName(),r=this.parseConstDirectives(),i=this.parseUnionMemberTypes();if(r.length===0&&i.length===0)throw this.unexpected();return this.node(t,{kind:st.Kind.UNION_TYPE_EXTENSION,name:n,directives:r,types:i})}parseEnumTypeExtension(){let t=this._lexer.token;this.expectKeyword("extend"),this.expectKeyword("enum");let n=this.parseName(),r=this.parseConstDirectives(),i=this.parseEnumValuesDefinition();if(r.length===0&&i.length===0)throw this.unexpected();return this.node(t,{kind:st.Kind.ENUM_TYPE_EXTENSION,name:n,directives:r,values:i})}parseInputObjectTypeExtension(){let t=this._lexer.token;this.expectKeyword("extend"),this.expectKeyword("input");let n=this.parseName(),r=this.parseConstDirectives(),i=this.parseInputFieldsDefinition();if(r.length===0&&i.length===0)throw this.unexpected();return this.node(t,{kind:st.Kind.INPUT_OBJECT_TYPE_EXTENSION,name:n,directives:r,fields:i})}parseDirectiveDefinition(){let t=this._lexer.token,n=this.parseDescription();this.expectKeyword("directive"),this.expectToken(Se.TokenKind.AT);let r=this.parseName(),i=this.parseArgumentDefs(),a=this.expectOptionalKeyword("repeatable");this.expectKeyword("on");let o=this.parseDirectiveLocations();return this.node(t,{kind:st.Kind.DIRECTIVE_DEFINITION,description:n,name:r,arguments:i,repeatable:a,locations:o})}parseDirectiveLocations(){return this.delimitedMany(Se.TokenKind.PIPE,this.parseDirectiveLocation)}parseDirectiveLocation(){let t=this._lexer.token,n=this.parseName();if(Object.prototype.hasOwnProperty.call(CJ.DirectiveLocation,n.value))return n;throw this.unexpected(t)}node(t,n){return this._options.noLocation!==!0&&(n.loc=new Td.Location(t,this._lexer.lastToken,this._lexer.source)),n}peek(t){return this._lexer.token.kind===t}expectToken(t){let n=this._lexer.token;if(n.kind===t)return this.advanceLexer(),n;throw(0,Au.syntaxError)(this._lexer.source,n.start,`Expected ${jR(t)}, found ${om(n)}.`)}expectOptionalToken(t){return this._lexer.token.kind===t?(this.advanceLexer(),!0):!1}expectKeyword(t){let n=this._lexer.token;if(n.kind===Se.TokenKind.NAME&&n.value===t)this.advanceLexer();else throw(0,Au.syntaxError)(this._lexer.source,n.start,`Expected "${t}", found ${om(n)}.`)}expectOptionalKeyword(t){let n=this._lexer.token;return n.kind===Se.TokenKind.NAME&&n.value===t?(this.advanceLexer(),!0):!1}unexpected(t){let n=t!=null?t:this._lexer.token;return(0,Au.syntaxError)(this._lexer.source,n.start,`Unexpected ${om(n)}.`)}any(t,n,r){this.expectToken(t);let i=[];for(;!this.expectOptionalToken(r);)i.push(n.call(this));return i}optionalMany(t,n,r){if(this.expectOptionalToken(t)){let i=[];do i.push(n.call(this));while(!this.expectOptionalToken(r));return i}return[]}many(t,n,r){this.expectToken(t);let i=[];do i.push(n.call(this));while(!this.expectOptionalToken(r));return i}delimitedMany(t,n){this.expectOptionalToken(t);let r=[];do r.push(n.call(this));while(this.expectOptionalToken(t));return r}advanceLexer(){let{maxTokens:t}=this._options,n=this._lexer.advance();if(t!==void 0&&n.kind!==Se.TokenKind.EOF&&(++this._tokenCounter,this._tokenCounter>t))throw(0,Au.syntaxError)(this._lexer.source,n.start,`Document contains more that ${t} tokens. Parsing aborted.`)}};Mo.Parser=Ru;function om(e){let t=e.value;return jR(e.kind)+(t!=null?` "${t}"`:"")}function jR(e){return(0,VR.isPunctuatorTokenKind)(e)?`"${e}"`:e}});var xo=w(by=>{"use strict";m();T();N();Object.defineProperty(by,"__esModule",{value:!0});by.didYouMean=qJ;var xJ=5;function qJ(e,t){let[n,r]=t?[e,t]:[void 0,e],i=" Did you mean ";n&&(i+=n+" ");let a=r.map(l=>`"${l}"`);switch(a.length){case 0:return"";case 1:return i+a[0]+"?";case 2:return i+a[0]+" or "+a[1]+"?"}let o=a.slice(0,xJ),c=o.pop();return i+o.join(", ")+", or "+c+"?"}});var KR=w(Ay=>{"use strict";m();T();N();Object.defineProperty(Ay,"__esModule",{value:!0});Ay.identityFunc=VJ;function VJ(e){return e}});var qo=w(Ry=>{"use strict";m();T();N();Object.defineProperty(Ry,"__esModule",{value:!0});Ry.keyMap=jJ;function jJ(e,t){let n=Object.create(null);for(let r of e)n[t(r)]=r;return n}});var Ed=w(Fy=>{"use strict";m();T();N();Object.defineProperty(Fy,"__esModule",{value:!0});Fy.keyValMap=KJ;function KJ(e,t,n){let r=Object.create(null);for(let i of e)r[t(i)]=n(i);return r}});var wy=w(Py=>{"use strict";m();T();N();Object.defineProperty(Py,"__esModule",{value:!0});Py.mapValue=GJ;function GJ(e,t){let n=Object.create(null);for(let r of Object.keys(e))n[r]=t(e[r],r);return n}});var hd=w(Cy=>{"use strict";m();T();N();Object.defineProperty(Cy,"__esModule",{value:!0});Cy.naturalCompare=$J;function $J(e,t){let n=0,r=0;for(;n0);let c=0;do++r,c=c*10+a-Ly,a=t.charCodeAt(r);while(um(a)&&c>0);if(oc)return 1}else{if(ia)return 1;++n,++r}}return e.length-t.length}var Ly=48,QJ=57;function um(e){return!isNaN(e)&&Ly<=e&&e<=QJ}});var Vo=w(Uy=>{"use strict";m();T();N();Object.defineProperty(Uy,"__esModule",{value:!0});Uy.suggestionList=JJ;var YJ=hd();function JJ(e,t){let n=Object.create(null),r=new By(e),i=Math.floor(e.length*.4)+1;for(let a of t){let o=r.measure(a,i);o!==void 0&&(n[a]=o)}return Object.keys(n).sort((a,o)=>{let c=n[a]-n[o];return c!==0?c:(0,YJ.naturalCompare)(a,o)})}var By=class{constructor(t){this._input=t,this._inputLowerCase=t.toLowerCase(),this._inputArray=GR(this._inputLowerCase),this._rows=[new Array(t.length+1).fill(0),new Array(t.length+1).fill(0),new Array(t.length+1).fill(0)]}measure(t,n){if(this._input===t)return 0;let r=t.toLowerCase();if(this._inputLowerCase===r)return 1;let i=GR(r),a=this._inputArray;if(i.lengthn)return;let l=this._rows;for(let f=0;f<=c;f++)l[0][f]=f;for(let f=1;f<=o;f++){let y=l[(f-1)%3],g=l[f%3],_=g[0]=f;for(let F=1;F<=c;F++){let U=i[f-1]===a[F-1]?0:1,K=Math.min(y[F]+1,g[F-1]+1,y[F-1]+U);if(f>1&&F>1&&i[f-1]===a[F-2]&&i[f-2]===a[F-1]){let J=l[(f-2)%3][F-2];K=Math.min(K,J+1)}K<_&&(_=K),g[F]=K}if(_>n)return}let p=l[o%3][c];return p<=n?p:void 0}};function GR(e){let t=e.length,n=new Array(t);for(let r=0;r{"use strict";m();T();N();Object.defineProperty(ky,"__esModule",{value:!0});ky.toObjMap=HJ;function HJ(e){if(e==null)return Object.create(null);if(Object.getPrototypeOf(e)===null)return e;let t=Object.create(null);for(let[n,r]of Object.entries(e))t[n]=r;return t}});var $R=w(My=>{"use strict";m();T();N();Object.defineProperty(My,"__esModule",{value:!0});My.printString=zJ;function zJ(e){return`"${e.replace(WJ,XJ)}"`}var WJ=/[\x00-\x1f\x22\x5c\x7f-\x9f]/g;function XJ(e){return ZJ[e.charCodeAt(0)]}var ZJ=["\\u0000","\\u0001","\\u0002","\\u0003","\\u0004","\\u0005","\\u0006","\\u0007","\\b","\\t","\\n","\\u000B","\\f","\\r","\\u000E","\\u000F","\\u0010","\\u0011","\\u0012","\\u0013","\\u0014","\\u0015","\\u0016","\\u0017","\\u0018","\\u0019","\\u001A","\\u001B","\\u001C","\\u001D","\\u001E","\\u001F","","",'\\"',"","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","\\\\","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","\\u007F","\\u0080","\\u0081","\\u0082","\\u0083","\\u0084","\\u0085","\\u0086","\\u0087","\\u0088","\\u0089","\\u008A","\\u008B","\\u008C","\\u008D","\\u008E","\\u008F","\\u0090","\\u0091","\\u0092","\\u0093","\\u0094","\\u0095","\\u0096","\\u0097","\\u0098","\\u0099","\\u009A","\\u009B","\\u009C","\\u009D","\\u009E","\\u009F"]});var Fu=w(jo=>{"use strict";m();T();N();Object.defineProperty(jo,"__esModule",{value:!0});jo.BREAK=void 0;jo.getEnterLeaveForKind=lm;jo.getVisitFn=iH;jo.visit=nH;jo.visitInParallel=rH;var eH=Cr(),tH=Yt(),xy=Oa(),QR=Rt(),qc=Object.freeze({});jo.BREAK=qc;function nH(e,t,n=xy.QueryDocumentKeys){let r=new Map;for(let J of Object.values(QR.Kind))r.set(J,lm(t,J));let i,a=Array.isArray(e),o=[e],c=-1,l=[],p=e,f,y,g=[],_=[];do{c++;let J=c===o.length,ee=J&&l.length!==0;if(J){if(f=_.length===0?void 0:g[g.length-1],p=y,y=_.pop(),ee)if(a){p=p.slice();let Te=0;for(let[de,we]of l){let qe=de-Te;we===null?(p.splice(qe,1),Te++):p[qe]=we}}else{p=Object.defineProperties({},Object.getOwnPropertyDescriptors(p));for(let[Te,de]of l)p[Te]=de}c=i.index,o=i.keys,l=i.edits,a=i.inArray,i=i.prev}else if(y){if(f=a?c:o[c],p=y[f],p==null)continue;g.push(f)}let W;if(!Array.isArray(p)){var F,U;(0,xy.isNode)(p)||(0,eH.devAssert)(!1,`Invalid AST Node: ${(0,tH.inspect)(p)}.`);let Te=J?(F=r.get(p.kind))===null||F===void 0?void 0:F.leave:(U=r.get(p.kind))===null||U===void 0?void 0:U.enter;if(W=Te==null?void 0:Te.call(t,p,f,y,g,_),W===qc)break;if(W===!1){if(!J){g.pop();continue}}else if(W!==void 0&&(l.push([f,W]),!J))if((0,xy.isNode)(W))p=W;else{g.pop();continue}}if(W===void 0&&ee&&l.push([f,p]),J)g.pop();else{var K;i={inArray:a,index:c,keys:o,edits:l,prev:i},a=Array.isArray(p),o=a?p:(K=n[p.kind])!==null&&K!==void 0?K:[],c=-1,l=[],y&&_.push(y),y=p}}while(i!==void 0);return l.length!==0?l[l.length-1][1]:e}function rH(e){let t=new Array(e.length).fill(null),n=Object.create(null);for(let r of Object.values(QR.Kind)){let i=!1,a=new Array(e.length).fill(void 0),o=new Array(e.length).fill(void 0);for(let l=0;l{"use strict";m();T();N();Object.defineProperty(qy,"__esModule",{value:!0});qy.print=uH;var aH=cd(),sH=$R(),oH=Fu();function uH(e){return(0,oH.visit)(e,lH)}var cH=80,lH={Name:{leave:e=>e.value},Variable:{leave:e=>"$"+e.name},Document:{leave:e=>xe(e.definitions,` `)},OperationDefinition:{leave(e){let t=Ot("(",xe(e.variableDefinitions,", "),")"),n=xe([e.operation,xe([e.name,t]),xe(e.directives," ")]," ");return(n==="query"?"":n+" ")+e.selectionSet}},VariableDefinition:{leave:({variable:e,type:t,defaultValue:n,directives:r})=>e+": "+t+Ot(" = ",n)+Ot(" ",xe(r," "))},SelectionSet:{leave:({selections:e})=>Xi(e)},Field:{leave({alias:e,name:t,arguments:n,directives:r,selectionSet:i}){let a=Ot("",e,": ")+t,o=a+Ot("(",xe(n,", "),")");return o.length>cH&&(o=a+Ot(`( -`,cm(xe(n,` +`,dm(xe(n,` `)),` )`)),xe([o,xe(r," "),i]," ")}},Argument:{leave:({name:e,value:t})=>e+": "+t},FragmentSpread:{leave:({name:e,directives:t})=>"..."+e+Ot(" ",xe(t," "))},InlineFragment:{leave:({typeCondition:e,directives:t,selectionSet:n})=>xe(["...",Ot("on ",e),xe(t," "),n]," ")},FragmentDefinition:{leave:({name:e,typeCondition:t,variableDefinitions:n,directives:r,selectionSet:i})=>`fragment ${e}${Ot("(",xe(n,", "),")")} on ${t} ${Ot("",xe(r," ")," ")}`+i},IntValue:{leave:({value:e})=>e},FloatValue:{leave:({value:e})=>e},StringValue:{leave:({value:e,block:t})=>t?(0,aH.printBlockString)(e):(0,sH.printString)(e)},BooleanValue:{leave:({value:e})=>e?"true":"false"},NullValue:{leave:()=>"null"},EnumValue:{leave:({value:e})=>e},ListValue:{leave:({values:e})=>"["+xe(e,", ")+"]"},ObjectValue:{leave:({fields:e})=>"{"+xe(e,", ")+"}"},ObjectField:{leave:({name:e,value:t})=>e+": "+t},Directive:{leave:({name:e,arguments:t})=>"@"+e+Ot("(",xe(t,", "),")")},NamedType:{leave:({name:e})=>e},ListType:{leave:({type:e})=>"["+e+"]"},NonNullType:{leave:({type:e})=>e+"!"},SchemaDefinition:{leave:({description:e,directives:t,operationTypes:n})=>Ot("",e,` `)+xe(["schema",xe(t," "),Xi(n)]," ")},OperationTypeDefinition:{leave:({operation:e,type:t})=>e+": "+t},ScalarTypeDefinition:{leave:({description:e,name:t,directives:n})=>Ot("",e,` `)+xe(["scalar",t,xe(n," ")]," ")},ObjectTypeDefinition:{leave:({description:e,name:t,interfaces:n,directives:r,fields:i})=>Ot("",e,` `)+xe(["type",t,Ot("implements ",xe(n," & ")),xe(r," "),Xi(i)]," ")},FieldDefinition:{leave:({description:e,name:t,arguments:n,type:r,directives:i})=>Ot("",e,` -`)+t+(QR(n)?Ot(`( -`,cm(xe(n,` +`)+t+(YR(n)?Ot(`( +`,dm(xe(n,` `)),` )`):Ot("(",xe(n,", "),")"))+": "+r+Ot(" ",xe(i," "))},InputValueDefinition:{leave:({description:e,name:t,type:n,defaultValue:r,directives:i})=>Ot("",e,` `)+xe([t+": "+n,Ot("= ",r),xe(i," ")]," ")},InterfaceTypeDefinition:{leave:({description:e,name:t,interfaces:n,directives:r,fields:i})=>Ot("",e,` @@ -51,23 +51,23 @@ spurious results.`)}}return!1};nm.instanceOf=FJ});var im=w(md=>{"use strict";f() `)+xe(["enum",t,xe(n," "),Xi(r)]," ")},EnumValueDefinition:{leave:({description:e,name:t,directives:n})=>Ot("",e,` `)+xe([t,xe(n," ")]," ")},InputObjectTypeDefinition:{leave:({description:e,name:t,directives:n,fields:r})=>Ot("",e,` `)+xe(["input",t,xe(n," "),Xi(r)]," ")},DirectiveDefinition:{leave:({description:e,name:t,arguments:n,repeatable:r,locations:i})=>Ot("",e,` -`)+"directive @"+t+(QR(n)?Ot(`( -`,cm(xe(n,` +`)+"directive @"+t+(YR(n)?Ot(`( +`,dm(xe(n,` `)),` )`):Ot("(",xe(n,", "),")"))+(r?" repeatable":"")+" on "+xe(i," | ")},SchemaExtension:{leave:({directives:e,operationTypes:t})=>xe(["extend schema",xe(e," "),Xi(t)]," ")},ScalarTypeExtension:{leave:({name:e,directives:t})=>xe(["extend scalar",e,xe(t," ")]," ")},ObjectTypeExtension:{leave:({name:e,interfaces:t,directives:n,fields:r})=>xe(["extend type",e,Ot("implements ",xe(t," & ")),xe(n," "),Xi(r)]," ")},InterfaceTypeExtension:{leave:({name:e,interfaces:t,directives:n,fields:r})=>xe(["extend interface",e,Ot("implements ",xe(t," & ")),xe(n," "),Xi(r)]," ")},UnionTypeExtension:{leave:({name:e,directives:t,types:n})=>xe(["extend union",e,xe(t," "),Ot("= ",xe(n," | "))]," ")},EnumTypeExtension:{leave:({name:e,directives:t,values:n})=>xe(["extend enum",e,xe(t," "),Xi(n)]," ")},InputObjectTypeExtension:{leave:({name:e,directives:t,fields:n})=>xe(["extend input",e,xe(t," "),Xi(n)]," ")}};function xe(e,t=""){var n;return(n=e==null?void 0:e.filter(r=>r).join(t))!==null&&n!==void 0?n:""}function Xi(e){return Ot(`{ -`,cm(xe(e,` +`,dm(xe(e,` `)),` -}`)}function Ot(e,t,n=""){return t!=null&&t!==""?e+t+n:""}function cm(e){return Ot(" ",e.replace(/\n/g,` - `))}function QR(e){var t;return(t=e==null?void 0:e.some(n=>n.includes(` -`)))!==null&&t!==void 0?t:!1}});var jy=w(Vy=>{"use strict";f();N();m();Object.defineProperty(Vy,"__esModule",{value:!0});Vy.valueFromASTUntyped=qy;var dH=Td(),ls=Rt();function qy(e,t){switch(e.kind){case ls.Kind.NULL:return null;case ls.Kind.INT:return parseInt(e.value,10);case ls.Kind.FLOAT:return parseFloat(e.value);case ls.Kind.STRING:case ls.Kind.ENUM:case ls.Kind.BOOLEAN:return e.value;case ls.Kind.LIST:return e.values.map(n=>qy(n,t));case ls.Kind.OBJECT:return(0,dH.keyValMap)(e.fields,n=>n.name.value,n=>qy(n.value,t));case ls.Kind.VARIABLE:return t==null?void 0:t[e.name.value]}}});var hd=w(dm=>{"use strict";f();N();m();Object.defineProperty(dm,"__esModule",{value:!0});dm.assertEnumValueName=pH;dm.assertName=HR;var YR=Cr(),lm=He(),JR=Xf();function HR(e){if(e!=null||(0,YR.devAssert)(!1,"Must provide name."),typeof e=="string"||(0,YR.devAssert)(!1,"Expected name to be a string."),e.length===0)throw new lm.GraphQLError("Expected name to be a non-empty string.");for(let t=1;t{"use strict";f();N();m();Object.defineProperty(je,"__esModule",{value:!0});je.GraphQLUnionType=je.GraphQLScalarType=je.GraphQLObjectType=je.GraphQLNonNull=je.GraphQLList=je.GraphQLInterfaceType=je.GraphQLInputObjectType=je.GraphQLEnumType=void 0;je.argsToArgsConfig=uF;je.assertAbstractType=wH;je.assertCompositeType=PH;je.assertEnumType=SH;je.assertInputObjectType=OH;je.assertInputType=AH;je.assertInterfaceType=_H;je.assertLeafType=FH;je.assertListType=DH;je.assertNamedType=UH;je.assertNonNullType=bH;je.assertNullableType=CH;je.assertObjectType=gH;je.assertOutputType=RH;je.assertScalarType=IH;je.assertType=yH;je.assertUnionType=vH;je.assertWrappingType=LH;je.defineArguments=sF;je.getNamedType=kH;je.getNullableType=BH;je.isAbstractType=nF;je.isCompositeType=tF;je.isEnumType=Cu;je.isInputObjectType=Id;je.isInputType=Ky;je.isInterfaceType=wu;je.isLeafType=eF;je.isListType=vm;je.isNamedType=rF;je.isNonNullType=Ko;je.isNullableType=$y;je.isObjectType=jc;je.isOutputType=Gy;je.isRequiredArgument=MH;je.isRequiredInputField=VH;je.isScalarType=Pu;je.isType=_m;je.isUnionType=Lu;je.isWrappingType=gd;je.resolveObjMapThunk=Yy;je.resolveReadonlyArrayThunk=Qy;var ur=Cr(),fH=Mo(),zR=jR(),un=Yt(),jo=fd(),mH=Sa(),NH=xo(),ZR=Td(),gm=Py(),TH=qo(),Da=om(),yd=He(),EH=Rt(),WR=li(),hH=jy(),ba=hd();function _m(e){return Pu(e)||jc(e)||wu(e)||Lu(e)||Cu(e)||Id(e)||vm(e)||Ko(e)}function yH(e){if(!_m(e))throw new Error(`Expected ${(0,un.inspect)(e)} to be a GraphQL type.`);return e}function Pu(e){return(0,jo.instanceOf)(e,Nm)}function IH(e){if(!Pu(e))throw new Error(`Expected ${(0,un.inspect)(e)} to be a GraphQL Scalar type.`);return e}function jc(e){return(0,jo.instanceOf)(e,Tm)}function gH(e){if(!jc(e))throw new Error(`Expected ${(0,un.inspect)(e)} to be a GraphQL Object type.`);return e}function wu(e){return(0,jo.instanceOf)(e,Em)}function _H(e){if(!wu(e))throw new Error(`Expected ${(0,un.inspect)(e)} to be a GraphQL Interface type.`);return e}function Lu(e){return(0,jo.instanceOf)(e,hm)}function vH(e){if(!Lu(e))throw new Error(`Expected ${(0,un.inspect)(e)} to be a GraphQL Union type.`);return e}function Cu(e){return(0,jo.instanceOf)(e,ym)}function SH(e){if(!Cu(e))throw new Error(`Expected ${(0,un.inspect)(e)} to be a GraphQL Enum type.`);return e}function Id(e){return(0,jo.instanceOf)(e,Im)}function OH(e){if(!Id(e))throw new Error(`Expected ${(0,un.inspect)(e)} to be a GraphQL Input Object type.`);return e}function vm(e){return(0,jo.instanceOf)(e,fm)}function DH(e){if(!vm(e))throw new Error(`Expected ${(0,un.inspect)(e)} to be a GraphQL List type.`);return e}function Ko(e){return(0,jo.instanceOf)(e,mm)}function bH(e){if(!Ko(e))throw new Error(`Expected ${(0,un.inspect)(e)} to be a GraphQL Non-Null type.`);return e}function Ky(e){return Pu(e)||Cu(e)||Id(e)||gd(e)&&Ky(e.ofType)}function AH(e){if(!Ky(e))throw new Error(`Expected ${(0,un.inspect)(e)} to be a GraphQL input type.`);return e}function Gy(e){return Pu(e)||jc(e)||wu(e)||Lu(e)||Cu(e)||gd(e)&&Gy(e.ofType)}function RH(e){if(!Gy(e))throw new Error(`Expected ${(0,un.inspect)(e)} to be a GraphQL output type.`);return e}function eF(e){return Pu(e)||Cu(e)}function FH(e){if(!eF(e))throw new Error(`Expected ${(0,un.inspect)(e)} to be a GraphQL leaf type.`);return e}function tF(e){return jc(e)||wu(e)||Lu(e)}function PH(e){if(!tF(e))throw new Error(`Expected ${(0,un.inspect)(e)} to be a GraphQL composite type.`);return e}function nF(e){return wu(e)||Lu(e)}function wH(e){if(!nF(e))throw new Error(`Expected ${(0,un.inspect)(e)} to be a GraphQL abstract type.`);return e}var fm=class{constructor(t){_m(t)||(0,ur.devAssert)(!1,`Expected ${(0,un.inspect)(t)} to be a GraphQL type.`),this.ofType=t}get[Symbol.toStringTag](){return"GraphQLList"}toString(){return"["+String(this.ofType)+"]"}toJSON(){return this.toString()}};je.GraphQLList=fm;var mm=class{constructor(t){$y(t)||(0,ur.devAssert)(!1,`Expected ${(0,un.inspect)(t)} to be a GraphQL nullable type.`),this.ofType=t}get[Symbol.toStringTag](){return"GraphQLNonNull"}toString(){return String(this.ofType)+"!"}toJSON(){return this.toString()}};je.GraphQLNonNull=mm;function gd(e){return vm(e)||Ko(e)}function LH(e){if(!gd(e))throw new Error(`Expected ${(0,un.inspect)(e)} to be a GraphQL wrapping type.`);return e}function $y(e){return _m(e)&&!Ko(e)}function CH(e){if(!$y(e))throw new Error(`Expected ${(0,un.inspect)(e)} to be a GraphQL nullable type.`);return e}function BH(e){if(e)return Ko(e)?e.ofType:e}function rF(e){return Pu(e)||jc(e)||wu(e)||Lu(e)||Cu(e)||Id(e)}function UH(e){if(!rF(e))throw new Error(`Expected ${(0,un.inspect)(e)} to be a GraphQL named type.`);return e}function kH(e){if(e){let t=e;for(;gd(t);)t=t.ofType;return t}}function Qy(e){return typeof e=="function"?e():e}function Yy(e){return typeof e=="function"?e():e}var Nm=class{constructor(t){var n,r,i,a;let o=(n=t.parseValue)!==null&&n!==void 0?n:zR.identityFunc;this.name=(0,ba.assertName)(t.name),this.description=t.description,this.specifiedByURL=t.specifiedByURL,this.serialize=(r=t.serialize)!==null&&r!==void 0?r:zR.identityFunc,this.parseValue=o,this.parseLiteral=(i=t.parseLiteral)!==null&&i!==void 0?i:(c,l)=>o((0,hH.valueFromASTUntyped)(c,l)),this.extensions=(0,Da.toObjMap)(t.extensions),this.astNode=t.astNode,this.extensionASTNodes=(a=t.extensionASTNodes)!==null&&a!==void 0?a:[],t.specifiedByURL==null||typeof t.specifiedByURL=="string"||(0,ur.devAssert)(!1,`${this.name} must provide "specifiedByURL" as a string, but got: ${(0,un.inspect)(t.specifiedByURL)}.`),t.serialize==null||typeof t.serialize=="function"||(0,ur.devAssert)(!1,`${this.name} must provide "serialize" function. If this custom Scalar is also used as an input type, ensure "parseValue" and "parseLiteral" functions are also provided.`),t.parseLiteral&&(typeof t.parseValue=="function"&&typeof t.parseLiteral=="function"||(0,ur.devAssert)(!1,`${this.name} must provide both "parseValue" and "parseLiteral" functions.`))}get[Symbol.toStringTag](){return"GraphQLScalarType"}toConfig(){return{name:this.name,description:this.description,specifiedByURL:this.specifiedByURL,serialize:this.serialize,parseValue:this.parseValue,parseLiteral:this.parseLiteral,extensions:this.extensions,astNode:this.astNode,extensionASTNodes:this.extensionASTNodes}}toString(){return this.name}toJSON(){return this.toString()}};je.GraphQLScalarType=Nm;var Tm=class{constructor(t){var n;this.name=(0,ba.assertName)(t.name),this.description=t.description,this.isTypeOf=t.isTypeOf,this.extensions=(0,Da.toObjMap)(t.extensions),this.astNode=t.astNode,this.extensionASTNodes=(n=t.extensionASTNodes)!==null&&n!==void 0?n:[],this._fields=()=>aF(t),this._interfaces=()=>iF(t),t.isTypeOf==null||typeof t.isTypeOf=="function"||(0,ur.devAssert)(!1,`${this.name} must provide "isTypeOf" as a function, but got: ${(0,un.inspect)(t.isTypeOf)}.`)}get[Symbol.toStringTag](){return"GraphQLObjectType"}getFields(){return typeof this._fields=="function"&&(this._fields=this._fields()),this._fields}getInterfaces(){return typeof this._interfaces=="function"&&(this._interfaces=this._interfaces()),this._interfaces}toConfig(){return{name:this.name,description:this.description,interfaces:this.getInterfaces(),fields:oF(this.getFields()),isTypeOf:this.isTypeOf,extensions:this.extensions,astNode:this.astNode,extensionASTNodes:this.extensionASTNodes}}toString(){return this.name}toJSON(){return this.toString()}};je.GraphQLObjectType=Tm;function iF(e){var t;let n=Qy((t=e.interfaces)!==null&&t!==void 0?t:[]);return Array.isArray(n)||(0,ur.devAssert)(!1,`${e.name} interfaces must be an Array or a function which returns an Array.`),n}function aF(e){let t=Yy(e.fields);return Vc(t)||(0,ur.devAssert)(!1,`${e.name} fields must be an object with field names as keys or a function which returns such an object.`),(0,gm.mapValue)(t,(n,r)=>{var i;Vc(n)||(0,ur.devAssert)(!1,`${e.name}.${r} field config must be an object.`),n.resolve==null||typeof n.resolve=="function"||(0,ur.devAssert)(!1,`${e.name}.${r} field resolver must be a function if provided, but got: ${(0,un.inspect)(n.resolve)}.`);let a=(i=n.args)!==null&&i!==void 0?i:{};return Vc(a)||(0,ur.devAssert)(!1,`${e.name}.${r} args must be an object with argument names as keys.`),{name:(0,ba.assertName)(r),description:n.description,type:n.type,args:sF(a),resolve:n.resolve,subscribe:n.subscribe,deprecationReason:n.deprecationReason,extensions:(0,Da.toObjMap)(n.extensions),astNode:n.astNode}})}function sF(e){return Object.entries(e).map(([t,n])=>({name:(0,ba.assertName)(t),description:n.description,type:n.type,defaultValue:n.defaultValue,deprecationReason:n.deprecationReason,extensions:(0,Da.toObjMap)(n.extensions),astNode:n.astNode}))}function Vc(e){return(0,mH.isObjectLike)(e)&&!Array.isArray(e)}function oF(e){return(0,gm.mapValue)(e,t=>({description:t.description,type:t.type,args:uF(t.args),resolve:t.resolve,subscribe:t.subscribe,deprecationReason:t.deprecationReason,extensions:t.extensions,astNode:t.astNode}))}function uF(e){return(0,ZR.keyValMap)(e,t=>t.name,t=>({description:t.description,type:t.type,defaultValue:t.defaultValue,deprecationReason:t.deprecationReason,extensions:t.extensions,astNode:t.astNode}))}function MH(e){return Ko(e.type)&&e.defaultValue===void 0}var Em=class{constructor(t){var n;this.name=(0,ba.assertName)(t.name),this.description=t.description,this.resolveType=t.resolveType,this.extensions=(0,Da.toObjMap)(t.extensions),this.astNode=t.astNode,this.extensionASTNodes=(n=t.extensionASTNodes)!==null&&n!==void 0?n:[],this._fields=aF.bind(void 0,t),this._interfaces=iF.bind(void 0,t),t.resolveType==null||typeof t.resolveType=="function"||(0,ur.devAssert)(!1,`${this.name} must provide "resolveType" as a function, but got: ${(0,un.inspect)(t.resolveType)}.`)}get[Symbol.toStringTag](){return"GraphQLInterfaceType"}getFields(){return typeof this._fields=="function"&&(this._fields=this._fields()),this._fields}getInterfaces(){return typeof this._interfaces=="function"&&(this._interfaces=this._interfaces()),this._interfaces}toConfig(){return{name:this.name,description:this.description,interfaces:this.getInterfaces(),fields:oF(this.getFields()),resolveType:this.resolveType,extensions:this.extensions,astNode:this.astNode,extensionASTNodes:this.extensionASTNodes}}toString(){return this.name}toJSON(){return this.toString()}};je.GraphQLInterfaceType=Em;var hm=class{constructor(t){var n;this.name=(0,ba.assertName)(t.name),this.description=t.description,this.resolveType=t.resolveType,this.extensions=(0,Da.toObjMap)(t.extensions),this.astNode=t.astNode,this.extensionASTNodes=(n=t.extensionASTNodes)!==null&&n!==void 0?n:[],this._types=xH.bind(void 0,t),t.resolveType==null||typeof t.resolveType=="function"||(0,ur.devAssert)(!1,`${this.name} must provide "resolveType" as a function, but got: ${(0,un.inspect)(t.resolveType)}.`)}get[Symbol.toStringTag](){return"GraphQLUnionType"}getTypes(){return typeof this._types=="function"&&(this._types=this._types()),this._types}toConfig(){return{name:this.name,description:this.description,types:this.getTypes(),resolveType:this.resolveType,extensions:this.extensions,astNode:this.astNode,extensionASTNodes:this.extensionASTNodes}}toString(){return this.name}toJSON(){return this.toString()}};je.GraphQLUnionType=hm;function xH(e){let t=Qy(e.types);return Array.isArray(t)||(0,ur.devAssert)(!1,`Must provide Array of types or a function which returns such an array for Union ${e.name}.`),t}var ym=class{constructor(t){var n;this.name=(0,ba.assertName)(t.name),this.description=t.description,this.extensions=(0,Da.toObjMap)(t.extensions),this.astNode=t.astNode,this.extensionASTNodes=(n=t.extensionASTNodes)!==null&&n!==void 0?n:[],this._values=typeof t.values=="function"?t.values:XR(this.name,t.values),this._valueLookup=null,this._nameLookup=null}get[Symbol.toStringTag](){return"GraphQLEnumType"}getValues(){return typeof this._values=="function"&&(this._values=XR(this.name,this._values())),this._values}getValue(t){return this._nameLookup===null&&(this._nameLookup=(0,NH.keyMap)(this.getValues(),n=>n.name)),this._nameLookup[t]}serialize(t){this._valueLookup===null&&(this._valueLookup=new Map(this.getValues().map(r=>[r.value,r])));let n=this._valueLookup.get(t);if(n===void 0)throw new yd.GraphQLError(`Enum "${this.name}" cannot represent value: ${(0,un.inspect)(t)}`);return n.name}parseValue(t){if(typeof t!="string"){let r=(0,un.inspect)(t);throw new yd.GraphQLError(`Enum "${this.name}" cannot represent non-string value: ${r}.`+pm(this,r))}let n=this.getValue(t);if(n==null)throw new yd.GraphQLError(`Value "${t}" does not exist in "${this.name}" enum.`+pm(this,t));return n.value}parseLiteral(t,n){if(t.kind!==EH.Kind.ENUM){let i=(0,WR.print)(t);throw new yd.GraphQLError(`Enum "${this.name}" cannot represent non-enum value: ${i}.`+pm(this,i),{nodes:t})}let r=this.getValue(t.value);if(r==null){let i=(0,WR.print)(t);throw new yd.GraphQLError(`Value "${i}" does not exist in "${this.name}" enum.`+pm(this,i),{nodes:t})}return r.value}toConfig(){let t=(0,ZR.keyValMap)(this.getValues(),n=>n.name,n=>({description:n.description,value:n.value,deprecationReason:n.deprecationReason,extensions:n.extensions,astNode:n.astNode}));return{name:this.name,description:this.description,values:t,extensions:this.extensions,astNode:this.astNode,extensionASTNodes:this.extensionASTNodes}}toString(){return this.name}toJSON(){return this.toString()}};je.GraphQLEnumType=ym;function pm(e,t){let n=e.getValues().map(i=>i.name),r=(0,TH.suggestionList)(t,n);return(0,fH.didYouMean)("the enum value",r)}function XR(e,t){return Vc(t)||(0,ur.devAssert)(!1,`${e} values must be an object with value names as keys.`),Object.entries(t).map(([n,r])=>(Vc(r)||(0,ur.devAssert)(!1,`${e}.${n} must refer to an object with a "value" key representing an internal value but got: ${(0,un.inspect)(r)}.`),{name:(0,ba.assertEnumValueName)(n),description:r.description,value:r.value!==void 0?r.value:n,deprecationReason:r.deprecationReason,extensions:(0,Da.toObjMap)(r.extensions),astNode:r.astNode}))}var Im=class{constructor(t){var n,r;this.name=(0,ba.assertName)(t.name),this.description=t.description,this.extensions=(0,Da.toObjMap)(t.extensions),this.astNode=t.astNode,this.extensionASTNodes=(n=t.extensionASTNodes)!==null&&n!==void 0?n:[],this.isOneOf=(r=t.isOneOf)!==null&&r!==void 0?r:!1,this._fields=qH.bind(void 0,t)}get[Symbol.toStringTag](){return"GraphQLInputObjectType"}getFields(){return typeof this._fields=="function"&&(this._fields=this._fields()),this._fields}toConfig(){let t=(0,gm.mapValue)(this.getFields(),n=>({description:n.description,type:n.type,defaultValue:n.defaultValue,deprecationReason:n.deprecationReason,extensions:n.extensions,astNode:n.astNode}));return{name:this.name,description:this.description,fields:t,extensions:this.extensions,astNode:this.astNode,extensionASTNodes:this.extensionASTNodes,isOneOf:this.isOneOf}}toString(){return this.name}toJSON(){return this.toString()}};je.GraphQLInputObjectType=Im;function qH(e){let t=Yy(e.fields);return Vc(t)||(0,ur.devAssert)(!1,`${e.name} fields must be an object with field names as keys or a function which returns such an object.`),(0,gm.mapValue)(t,(n,r)=>(!("resolve"in n)||(0,ur.devAssert)(!1,`${e.name}.${r} field has a resolve property, but Input Types cannot define resolvers.`),{name:(0,ba.assertName)(r),description:n.description,type:n.type,defaultValue:n.defaultValue,deprecationReason:n.deprecationReason,extensions:(0,Da.toObjMap)(n.extensions),astNode:n.astNode}))}function VH(e){return Ko(e.type)&&e.defaultValue===void 0}});var vd=w(_d=>{"use strict";f();N();m();Object.defineProperty(_d,"__esModule",{value:!0});_d.doTypesOverlap=jH;_d.isEqualType=Jy;_d.isTypeSubTypeOf=Sm;var gr=Ft();function Jy(e,t){return e===t?!0:(0,gr.isNonNullType)(e)&&(0,gr.isNonNullType)(t)||(0,gr.isListType)(e)&&(0,gr.isListType)(t)?Jy(e.ofType,t.ofType):!1}function Sm(e,t,n){return t===n?!0:(0,gr.isNonNullType)(n)?(0,gr.isNonNullType)(t)?Sm(e,t.ofType,n.ofType):!1:(0,gr.isNonNullType)(t)?Sm(e,t.ofType,n):(0,gr.isListType)(n)?(0,gr.isListType)(t)?Sm(e,t.ofType,n.ofType):!1:(0,gr.isListType)(t)?!1:(0,gr.isAbstractType)(n)&&((0,gr.isInterfaceType)(t)||(0,gr.isObjectType)(t))&&e.isSubType(n,t)}function jH(e,t,n){return t===n?!0:(0,gr.isAbstractType)(t)?(0,gr.isAbstractType)(n)?e.getPossibleTypes(t).some(r=>e.isSubType(n,r)):e.isSubType(t,n):(0,gr.isAbstractType)(n)?e.isSubType(n,t):!1}});var Aa=w(zn=>{"use strict";f();N();m();Object.defineProperty(zn,"__esModule",{value:!0});zn.GraphQLString=zn.GraphQLInt=zn.GraphQLID=zn.GraphQLFloat=zn.GraphQLBoolean=zn.GRAPHQL_MIN_INT=zn.GRAPHQL_MAX_INT=void 0;zn.isSpecifiedScalarType=KH;zn.specifiedScalarTypes=void 0;var Zi=Yt(),cF=Sa(),cr=He(),Bu=Rt(),Sd=li(),Od=Ft(),Om=2147483647;zn.GRAPHQL_MAX_INT=Om;var Dm=-2147483648;zn.GRAPHQL_MIN_INT=Dm;var lF=new Od.GraphQLScalarType({name:"Int",description:"The `Int` scalar type represents non-fractional signed whole numeric values. Int can represent values between -(2^31) and 2^31 - 1.",serialize(e){let t=Dd(e);if(typeof t=="boolean")return t?1:0;let n=t;if(typeof t=="string"&&t!==""&&(n=Number(t)),typeof n!="number"||!Number.isInteger(n))throw new cr.GraphQLError(`Int cannot represent non-integer value: ${(0,Zi.inspect)(t)}`);if(n>Om||nOm||eOm||te.name===t)}function Dd(e){if((0,cF.isObjectLike)(e)){if(typeof e.valueOf=="function"){let t=e.valueOf();if(!(0,cF.isObjectLike)(t))return t}if(typeof e.toJSON=="function")return e.toJSON()}return e}});var $r=w(qn=>{"use strict";f();N();m();Object.defineProperty(qn,"__esModule",{value:!0});qn.GraphQLSpecifiedByDirective=qn.GraphQLSkipDirective=qn.GraphQLOneOfDirective=qn.GraphQLIncludeDirective=qn.GraphQLDirective=qn.GraphQLDeprecatedDirective=qn.DEFAULT_DEPRECATION_REASON=void 0;qn.assertDirective=HH;qn.isDirective=EF;qn.isSpecifiedDirective=zH;qn.specifiedDirectives=void 0;var TF=Cr(),GH=Yt(),$H=fd(),QH=Sa(),YH=om(),Di=kc(),JH=hd(),bd=Ft(),bm=Aa();function EF(e){return(0,$H.instanceOf)(e,ds)}function HH(e){if(!EF(e))throw new Error(`Expected ${(0,GH.inspect)(e)} to be a GraphQL directive.`);return e}var ds=class{constructor(t){var n,r;this.name=(0,JH.assertName)(t.name),this.description=t.description,this.locations=t.locations,this.isRepeatable=(n=t.isRepeatable)!==null&&n!==void 0?n:!1,this.extensions=(0,YH.toObjMap)(t.extensions),this.astNode=t.astNode,Array.isArray(t.locations)||(0,TF.devAssert)(!1,`@${t.name} locations must be an Array.`);let i=(r=t.args)!==null&&r!==void 0?r:{};(0,QH.isObjectLike)(i)&&!Array.isArray(i)||(0,TF.devAssert)(!1,`@${t.name} args must be an object with argument names as keys.`),this.args=(0,bd.defineArguments)(i)}get[Symbol.toStringTag](){return"GraphQLDirective"}toConfig(){return{name:this.name,description:this.description,locations:this.locations,args:(0,bd.argsToArgsConfig)(this.args),isRepeatable:this.isRepeatable,extensions:this.extensions,astNode:this.astNode}}toString(){return"@"+this.name}toJSON(){return this.toString()}};qn.GraphQLDirective=ds;var hF=new ds({name:"include",description:"Directs the executor to include this field or fragment only when the `if` argument is true.",locations:[Di.DirectiveLocation.FIELD,Di.DirectiveLocation.FRAGMENT_SPREAD,Di.DirectiveLocation.INLINE_FRAGMENT],args:{if:{type:new bd.GraphQLNonNull(bm.GraphQLBoolean),description:"Included when true."}}});qn.GraphQLIncludeDirective=hF;var yF=new ds({name:"skip",description:"Directs the executor to skip this field or fragment when the `if` argument is true.",locations:[Di.DirectiveLocation.FIELD,Di.DirectiveLocation.FRAGMENT_SPREAD,Di.DirectiveLocation.INLINE_FRAGMENT],args:{if:{type:new bd.GraphQLNonNull(bm.GraphQLBoolean),description:"Skipped when true."}}});qn.GraphQLSkipDirective=yF;var IF="No longer supported";qn.DEFAULT_DEPRECATION_REASON=IF;var gF=new ds({name:"deprecated",description:"Marks an element of a GraphQL schema as no longer supported.",locations:[Di.DirectiveLocation.FIELD_DEFINITION,Di.DirectiveLocation.ARGUMENT_DEFINITION,Di.DirectiveLocation.INPUT_FIELD_DEFINITION,Di.DirectiveLocation.ENUM_VALUE],args:{reason:{type:bm.GraphQLString,description:"Explains why this element was deprecated, usually also including a suggestion for how to access supported similar data. Formatted using the Markdown syntax, as specified by [CommonMark](https://commonmark.org/).",defaultValue:IF}}});qn.GraphQLDeprecatedDirective=gF;var _F=new ds({name:"specifiedBy",description:"Exposes a URL that specifies the behavior of this scalar.",locations:[Di.DirectiveLocation.SCALAR],args:{url:{type:new bd.GraphQLNonNull(bm.GraphQLString),description:"The URL that specifies the behavior of this scalar."}}});qn.GraphQLSpecifiedByDirective=_F;var vF=new ds({name:"oneOf",description:"Indicates exactly one field must be supplied and this field must not be `null`.",locations:[Di.DirectiveLocation.INPUT_OBJECT],args:{}});qn.GraphQLOneOfDirective=vF;var SF=Object.freeze([hF,yF,gF,_F,vF]);qn.specifiedDirectives=SF;function zH(e){return SF.some(({name:t})=>t===e.name)}});var Am=w(Hy=>{"use strict";f();N();m();Object.defineProperty(Hy,"__esModule",{value:!0});Hy.isIterableObject=WH;function WH(e){return typeof e=="object"&&typeof(e==null?void 0:e[Symbol.iterator])=="function"}});var Fd=w(zy=>{"use strict";f();N();m();Object.defineProperty(zy,"__esModule",{value:!0});zy.astFromValue=Rd;var OF=Yt(),XH=Ir(),ZH=Am(),e3=Sa(),bi=Rt(),Ad=Ft(),t3=Aa();function Rd(e,t){if((0,Ad.isNonNullType)(t)){let n=Rd(e,t.ofType);return(n==null?void 0:n.kind)===bi.Kind.NULL?null:n}if(e===null)return{kind:bi.Kind.NULL};if(e===void 0)return null;if((0,Ad.isListType)(t)){let n=t.ofType;if((0,ZH.isIterableObject)(e)){let r=[];for(let i of e){let a=Rd(i,n);a!=null&&r.push(a)}return{kind:bi.Kind.LIST,values:r}}return Rd(e,n)}if((0,Ad.isInputObjectType)(t)){if(!(0,e3.isObjectLike)(e))return null;let n=[];for(let r of Object.values(t.getFields())){let i=Rd(e[r.name],r.type);i&&n.push({kind:bi.Kind.OBJECT_FIELD,name:{kind:bi.Kind.NAME,value:r.name},value:i})}return{kind:bi.Kind.OBJECT,fields:n}}if((0,Ad.isLeafType)(t)){let n=t.serialize(e);if(n==null)return null;if(typeof n=="boolean")return{kind:bi.Kind.BOOLEAN,value:n};if(typeof n=="number"&&Number.isFinite(n)){let r=String(n);return DF.test(r)?{kind:bi.Kind.INT,value:r}:{kind:bi.Kind.FLOAT,value:r}}if(typeof n=="string")return(0,Ad.isEnumType)(t)?{kind:bi.Kind.ENUM,value:n}:t===t3.GraphQLID&&DF.test(n)?{kind:bi.Kind.INT,value:n}:{kind:bi.Kind.STRING,value:n};throw new TypeError(`Cannot convert value to AST: ${(0,OF.inspect)(n)}.`)}(0,XH.invariant)(!1,"Unexpected input type: "+(0,OF.inspect)(t))}var DF=/^-?(?:0|[1-9][0-9]*)$/});var Ri=w(Jt=>{"use strict";f();N();m();Object.defineProperty(Jt,"__esModule",{value:!0});Jt.introspectionTypes=Jt.__TypeKind=Jt.__Type=Jt.__Schema=Jt.__InputValue=Jt.__Field=Jt.__EnumValue=Jt.__DirectiveLocation=Jt.__Directive=Jt.TypeNameMetaFieldDef=Jt.TypeMetaFieldDef=Jt.TypeKind=Jt.SchemaMetaFieldDef=void 0;Jt.isIntrospectionType=c3;var n3=Yt(),r3=Ir(),Wn=kc(),i3=li(),a3=Fd(),Ue=Ft(),rn=Aa(),Wy=new Ue.GraphQLObjectType({name:"__Schema",description:"A GraphQL Schema defines the capabilities of a GraphQL server. It exposes all available types and directives on the server, as well as the entry points for query, mutation, and subscription operations.",fields:()=>({description:{type:rn.GraphQLString,resolve:e=>e.description},types:{description:"A list of all types supported by this server.",type:new Ue.GraphQLNonNull(new Ue.GraphQLList(new Ue.GraphQLNonNull(Ai))),resolve(e){return Object.values(e.getTypeMap())}},queryType:{description:"The type that query operations will be rooted at.",type:new Ue.GraphQLNonNull(Ai),resolve:e=>e.getQueryType()},mutationType:{description:"If this server supports mutation, the type that mutation operations will be rooted at.",type:Ai,resolve:e=>e.getMutationType()},subscriptionType:{description:"If this server support subscription, the type that subscription operations will be rooted at.",type:Ai,resolve:e=>e.getSubscriptionType()},directives:{description:"A list of all directives supported by this server.",type:new Ue.GraphQLNonNull(new Ue.GraphQLList(new Ue.GraphQLNonNull(Xy))),resolve:e=>e.getDirectives()}})});Jt.__Schema=Wy;var Xy=new Ue.GraphQLObjectType({name:"__Directive",description:`A Directive provides a way to describe alternate runtime execution and type validation behavior in a GraphQL document. +}`)}function Ot(e,t,n=""){return t!=null&&t!==""?e+t+n:""}function dm(e){return Ot(" ",e.replace(/\n/g,` + `))}function YR(e){var t;return(t=e==null?void 0:e.some(n=>n.includes(` +`)))!==null&&t!==void 0?t:!1}});var Ky=w(jy=>{"use strict";m();T();N();Object.defineProperty(jy,"__esModule",{value:!0});jy.valueFromASTUntyped=Vy;var dH=Ed(),ls=Rt();function Vy(e,t){switch(e.kind){case ls.Kind.NULL:return null;case ls.Kind.INT:return parseInt(e.value,10);case ls.Kind.FLOAT:return parseFloat(e.value);case ls.Kind.STRING:case ls.Kind.ENUM:case ls.Kind.BOOLEAN:return e.value;case ls.Kind.LIST:return e.values.map(n=>Vy(n,t));case ls.Kind.OBJECT:return(0,dH.keyValMap)(e.fields,n=>n.name.value,n=>Vy(n.value,t));case ls.Kind.VARIABLE:return t==null?void 0:t[e.name.value]}}});var yd=w(fm=>{"use strict";m();T();N();Object.defineProperty(fm,"__esModule",{value:!0});fm.assertEnumValueName=pH;fm.assertName=zR;var JR=Cr(),pm=He(),HR=em();function zR(e){if(e!=null||(0,JR.devAssert)(!1,"Must provide name."),typeof e=="string"||(0,JR.devAssert)(!1,"Expected name to be a string."),e.length===0)throw new pm.GraphQLError("Expected name to be a non-empty string.");for(let t=1;t{"use strict";m();T();N();Object.defineProperty(je,"__esModule",{value:!0});je.GraphQLUnionType=je.GraphQLScalarType=je.GraphQLObjectType=je.GraphQLNonNull=je.GraphQLList=je.GraphQLInterfaceType=je.GraphQLInputObjectType=je.GraphQLEnumType=void 0;je.argsToArgsConfig=cF;je.assertAbstractType=wH;je.assertCompositeType=PH;je.assertEnumType=SH;je.assertInputObjectType=OH;je.assertInputType=AH;je.assertInterfaceType=_H;je.assertLeafType=FH;je.assertListType=DH;je.assertNamedType=UH;je.assertNonNullType=bH;je.assertNullableType=CH;je.assertObjectType=gH;je.assertOutputType=RH;je.assertScalarType=IH;je.assertType=yH;je.assertUnionType=vH;je.assertWrappingType=LH;je.defineArguments=oF;je.getNamedType=kH;je.getNullableType=BH;je.isAbstractType=rF;je.isCompositeType=nF;je.isEnumType=Cu;je.isInputObjectType=gd;je.isInputType=Gy;je.isInterfaceType=wu;je.isLeafType=tF;je.isListType=Om;je.isNamedType=iF;je.isNonNullType=Go;je.isNullableType=Qy;je.isObjectType=jc;je.isOutputType=$y;je.isRequiredArgument=MH;je.isRequiredInputField=VH;je.isScalarType=Pu;je.isType=Sm;je.isUnionType=Lu;je.isWrappingType=_d;je.resolveObjMapThunk=Jy;je.resolveReadonlyArrayThunk=Yy;var ur=Cr(),fH=xo(),WR=KR(),un=Yt(),Ko=md(),mH=Sa(),NH=qo(),eF=Ed(),vm=wy(),TH=Vo(),Da=cm(),Id=He(),EH=Rt(),XR=li(),hH=Ky(),ba=yd();function Sm(e){return Pu(e)||jc(e)||wu(e)||Lu(e)||Cu(e)||gd(e)||Om(e)||Go(e)}function yH(e){if(!Sm(e))throw new Error(`Expected ${(0,un.inspect)(e)} to be a GraphQL type.`);return e}function Pu(e){return(0,Ko.instanceOf)(e,Em)}function IH(e){if(!Pu(e))throw new Error(`Expected ${(0,un.inspect)(e)} to be a GraphQL Scalar type.`);return e}function jc(e){return(0,Ko.instanceOf)(e,hm)}function gH(e){if(!jc(e))throw new Error(`Expected ${(0,un.inspect)(e)} to be a GraphQL Object type.`);return e}function wu(e){return(0,Ko.instanceOf)(e,ym)}function _H(e){if(!wu(e))throw new Error(`Expected ${(0,un.inspect)(e)} to be a GraphQL Interface type.`);return e}function Lu(e){return(0,Ko.instanceOf)(e,Im)}function vH(e){if(!Lu(e))throw new Error(`Expected ${(0,un.inspect)(e)} to be a GraphQL Union type.`);return e}function Cu(e){return(0,Ko.instanceOf)(e,gm)}function SH(e){if(!Cu(e))throw new Error(`Expected ${(0,un.inspect)(e)} to be a GraphQL Enum type.`);return e}function gd(e){return(0,Ko.instanceOf)(e,_m)}function OH(e){if(!gd(e))throw new Error(`Expected ${(0,un.inspect)(e)} to be a GraphQL Input Object type.`);return e}function Om(e){return(0,Ko.instanceOf)(e,Nm)}function DH(e){if(!Om(e))throw new Error(`Expected ${(0,un.inspect)(e)} to be a GraphQL List type.`);return e}function Go(e){return(0,Ko.instanceOf)(e,Tm)}function bH(e){if(!Go(e))throw new Error(`Expected ${(0,un.inspect)(e)} to be a GraphQL Non-Null type.`);return e}function Gy(e){return Pu(e)||Cu(e)||gd(e)||_d(e)&&Gy(e.ofType)}function AH(e){if(!Gy(e))throw new Error(`Expected ${(0,un.inspect)(e)} to be a GraphQL input type.`);return e}function $y(e){return Pu(e)||jc(e)||wu(e)||Lu(e)||Cu(e)||_d(e)&&$y(e.ofType)}function RH(e){if(!$y(e))throw new Error(`Expected ${(0,un.inspect)(e)} to be a GraphQL output type.`);return e}function tF(e){return Pu(e)||Cu(e)}function FH(e){if(!tF(e))throw new Error(`Expected ${(0,un.inspect)(e)} to be a GraphQL leaf type.`);return e}function nF(e){return jc(e)||wu(e)||Lu(e)}function PH(e){if(!nF(e))throw new Error(`Expected ${(0,un.inspect)(e)} to be a GraphQL composite type.`);return e}function rF(e){return wu(e)||Lu(e)}function wH(e){if(!rF(e))throw new Error(`Expected ${(0,un.inspect)(e)} to be a GraphQL abstract type.`);return e}var Nm=class{constructor(t){Sm(t)||(0,ur.devAssert)(!1,`Expected ${(0,un.inspect)(t)} to be a GraphQL type.`),this.ofType=t}get[Symbol.toStringTag](){return"GraphQLList"}toString(){return"["+String(this.ofType)+"]"}toJSON(){return this.toString()}};je.GraphQLList=Nm;var Tm=class{constructor(t){Qy(t)||(0,ur.devAssert)(!1,`Expected ${(0,un.inspect)(t)} to be a GraphQL nullable type.`),this.ofType=t}get[Symbol.toStringTag](){return"GraphQLNonNull"}toString(){return String(this.ofType)+"!"}toJSON(){return this.toString()}};je.GraphQLNonNull=Tm;function _d(e){return Om(e)||Go(e)}function LH(e){if(!_d(e))throw new Error(`Expected ${(0,un.inspect)(e)} to be a GraphQL wrapping type.`);return e}function Qy(e){return Sm(e)&&!Go(e)}function CH(e){if(!Qy(e))throw new Error(`Expected ${(0,un.inspect)(e)} to be a GraphQL nullable type.`);return e}function BH(e){if(e)return Go(e)?e.ofType:e}function iF(e){return Pu(e)||jc(e)||wu(e)||Lu(e)||Cu(e)||gd(e)}function UH(e){if(!iF(e))throw new Error(`Expected ${(0,un.inspect)(e)} to be a GraphQL named type.`);return e}function kH(e){if(e){let t=e;for(;_d(t);)t=t.ofType;return t}}function Yy(e){return typeof e=="function"?e():e}function Jy(e){return typeof e=="function"?e():e}var Em=class{constructor(t){var n,r,i,a;let o=(n=t.parseValue)!==null&&n!==void 0?n:WR.identityFunc;this.name=(0,ba.assertName)(t.name),this.description=t.description,this.specifiedByURL=t.specifiedByURL,this.serialize=(r=t.serialize)!==null&&r!==void 0?r:WR.identityFunc,this.parseValue=o,this.parseLiteral=(i=t.parseLiteral)!==null&&i!==void 0?i:(c,l)=>o((0,hH.valueFromASTUntyped)(c,l)),this.extensions=(0,Da.toObjMap)(t.extensions),this.astNode=t.astNode,this.extensionASTNodes=(a=t.extensionASTNodes)!==null&&a!==void 0?a:[],t.specifiedByURL==null||typeof t.specifiedByURL=="string"||(0,ur.devAssert)(!1,`${this.name} must provide "specifiedByURL" as a string, but got: ${(0,un.inspect)(t.specifiedByURL)}.`),t.serialize==null||typeof t.serialize=="function"||(0,ur.devAssert)(!1,`${this.name} must provide "serialize" function. If this custom Scalar is also used as an input type, ensure "parseValue" and "parseLiteral" functions are also provided.`),t.parseLiteral&&(typeof t.parseValue=="function"&&typeof t.parseLiteral=="function"||(0,ur.devAssert)(!1,`${this.name} must provide both "parseValue" and "parseLiteral" functions.`))}get[Symbol.toStringTag](){return"GraphQLScalarType"}toConfig(){return{name:this.name,description:this.description,specifiedByURL:this.specifiedByURL,serialize:this.serialize,parseValue:this.parseValue,parseLiteral:this.parseLiteral,extensions:this.extensions,astNode:this.astNode,extensionASTNodes:this.extensionASTNodes}}toString(){return this.name}toJSON(){return this.toString()}};je.GraphQLScalarType=Em;var hm=class{constructor(t){var n;this.name=(0,ba.assertName)(t.name),this.description=t.description,this.isTypeOf=t.isTypeOf,this.extensions=(0,Da.toObjMap)(t.extensions),this.astNode=t.astNode,this.extensionASTNodes=(n=t.extensionASTNodes)!==null&&n!==void 0?n:[],this._fields=()=>sF(t),this._interfaces=()=>aF(t),t.isTypeOf==null||typeof t.isTypeOf=="function"||(0,ur.devAssert)(!1,`${this.name} must provide "isTypeOf" as a function, but got: ${(0,un.inspect)(t.isTypeOf)}.`)}get[Symbol.toStringTag](){return"GraphQLObjectType"}getFields(){return typeof this._fields=="function"&&(this._fields=this._fields()),this._fields}getInterfaces(){return typeof this._interfaces=="function"&&(this._interfaces=this._interfaces()),this._interfaces}toConfig(){return{name:this.name,description:this.description,interfaces:this.getInterfaces(),fields:uF(this.getFields()),isTypeOf:this.isTypeOf,extensions:this.extensions,astNode:this.astNode,extensionASTNodes:this.extensionASTNodes}}toString(){return this.name}toJSON(){return this.toString()}};je.GraphQLObjectType=hm;function aF(e){var t;let n=Yy((t=e.interfaces)!==null&&t!==void 0?t:[]);return Array.isArray(n)||(0,ur.devAssert)(!1,`${e.name} interfaces must be an Array or a function which returns an Array.`),n}function sF(e){let t=Jy(e.fields);return Vc(t)||(0,ur.devAssert)(!1,`${e.name} fields must be an object with field names as keys or a function which returns such an object.`),(0,vm.mapValue)(t,(n,r)=>{var i;Vc(n)||(0,ur.devAssert)(!1,`${e.name}.${r} field config must be an object.`),n.resolve==null||typeof n.resolve=="function"||(0,ur.devAssert)(!1,`${e.name}.${r} field resolver must be a function if provided, but got: ${(0,un.inspect)(n.resolve)}.`);let a=(i=n.args)!==null&&i!==void 0?i:{};return Vc(a)||(0,ur.devAssert)(!1,`${e.name}.${r} args must be an object with argument names as keys.`),{name:(0,ba.assertName)(r),description:n.description,type:n.type,args:oF(a),resolve:n.resolve,subscribe:n.subscribe,deprecationReason:n.deprecationReason,extensions:(0,Da.toObjMap)(n.extensions),astNode:n.astNode}})}function oF(e){return Object.entries(e).map(([t,n])=>({name:(0,ba.assertName)(t),description:n.description,type:n.type,defaultValue:n.defaultValue,deprecationReason:n.deprecationReason,extensions:(0,Da.toObjMap)(n.extensions),astNode:n.astNode}))}function Vc(e){return(0,mH.isObjectLike)(e)&&!Array.isArray(e)}function uF(e){return(0,vm.mapValue)(e,t=>({description:t.description,type:t.type,args:cF(t.args),resolve:t.resolve,subscribe:t.subscribe,deprecationReason:t.deprecationReason,extensions:t.extensions,astNode:t.astNode}))}function cF(e){return(0,eF.keyValMap)(e,t=>t.name,t=>({description:t.description,type:t.type,defaultValue:t.defaultValue,deprecationReason:t.deprecationReason,extensions:t.extensions,astNode:t.astNode}))}function MH(e){return Go(e.type)&&e.defaultValue===void 0}var ym=class{constructor(t){var n;this.name=(0,ba.assertName)(t.name),this.description=t.description,this.resolveType=t.resolveType,this.extensions=(0,Da.toObjMap)(t.extensions),this.astNode=t.astNode,this.extensionASTNodes=(n=t.extensionASTNodes)!==null&&n!==void 0?n:[],this._fields=sF.bind(void 0,t),this._interfaces=aF.bind(void 0,t),t.resolveType==null||typeof t.resolveType=="function"||(0,ur.devAssert)(!1,`${this.name} must provide "resolveType" as a function, but got: ${(0,un.inspect)(t.resolveType)}.`)}get[Symbol.toStringTag](){return"GraphQLInterfaceType"}getFields(){return typeof this._fields=="function"&&(this._fields=this._fields()),this._fields}getInterfaces(){return typeof this._interfaces=="function"&&(this._interfaces=this._interfaces()),this._interfaces}toConfig(){return{name:this.name,description:this.description,interfaces:this.getInterfaces(),fields:uF(this.getFields()),resolveType:this.resolveType,extensions:this.extensions,astNode:this.astNode,extensionASTNodes:this.extensionASTNodes}}toString(){return this.name}toJSON(){return this.toString()}};je.GraphQLInterfaceType=ym;var Im=class{constructor(t){var n;this.name=(0,ba.assertName)(t.name),this.description=t.description,this.resolveType=t.resolveType,this.extensions=(0,Da.toObjMap)(t.extensions),this.astNode=t.astNode,this.extensionASTNodes=(n=t.extensionASTNodes)!==null&&n!==void 0?n:[],this._types=xH.bind(void 0,t),t.resolveType==null||typeof t.resolveType=="function"||(0,ur.devAssert)(!1,`${this.name} must provide "resolveType" as a function, but got: ${(0,un.inspect)(t.resolveType)}.`)}get[Symbol.toStringTag](){return"GraphQLUnionType"}getTypes(){return typeof this._types=="function"&&(this._types=this._types()),this._types}toConfig(){return{name:this.name,description:this.description,types:this.getTypes(),resolveType:this.resolveType,extensions:this.extensions,astNode:this.astNode,extensionASTNodes:this.extensionASTNodes}}toString(){return this.name}toJSON(){return this.toString()}};je.GraphQLUnionType=Im;function xH(e){let t=Yy(e.types);return Array.isArray(t)||(0,ur.devAssert)(!1,`Must provide Array of types or a function which returns such an array for Union ${e.name}.`),t}var gm=class{constructor(t){var n;this.name=(0,ba.assertName)(t.name),this.description=t.description,this.extensions=(0,Da.toObjMap)(t.extensions),this.astNode=t.astNode,this.extensionASTNodes=(n=t.extensionASTNodes)!==null&&n!==void 0?n:[],this._values=typeof t.values=="function"?t.values:ZR(this.name,t.values),this._valueLookup=null,this._nameLookup=null}get[Symbol.toStringTag](){return"GraphQLEnumType"}getValues(){return typeof this._values=="function"&&(this._values=ZR(this.name,this._values())),this._values}getValue(t){return this._nameLookup===null&&(this._nameLookup=(0,NH.keyMap)(this.getValues(),n=>n.name)),this._nameLookup[t]}serialize(t){this._valueLookup===null&&(this._valueLookup=new Map(this.getValues().map(r=>[r.value,r])));let n=this._valueLookup.get(t);if(n===void 0)throw new Id.GraphQLError(`Enum "${this.name}" cannot represent value: ${(0,un.inspect)(t)}`);return n.name}parseValue(t){if(typeof t!="string"){let r=(0,un.inspect)(t);throw new Id.GraphQLError(`Enum "${this.name}" cannot represent non-string value: ${r}.`+mm(this,r))}let n=this.getValue(t);if(n==null)throw new Id.GraphQLError(`Value "${t}" does not exist in "${this.name}" enum.`+mm(this,t));return n.value}parseLiteral(t,n){if(t.kind!==EH.Kind.ENUM){let i=(0,XR.print)(t);throw new Id.GraphQLError(`Enum "${this.name}" cannot represent non-enum value: ${i}.`+mm(this,i),{nodes:t})}let r=this.getValue(t.value);if(r==null){let i=(0,XR.print)(t);throw new Id.GraphQLError(`Value "${i}" does not exist in "${this.name}" enum.`+mm(this,i),{nodes:t})}return r.value}toConfig(){let t=(0,eF.keyValMap)(this.getValues(),n=>n.name,n=>({description:n.description,value:n.value,deprecationReason:n.deprecationReason,extensions:n.extensions,astNode:n.astNode}));return{name:this.name,description:this.description,values:t,extensions:this.extensions,astNode:this.astNode,extensionASTNodes:this.extensionASTNodes}}toString(){return this.name}toJSON(){return this.toString()}};je.GraphQLEnumType=gm;function mm(e,t){let n=e.getValues().map(i=>i.name),r=(0,TH.suggestionList)(t,n);return(0,fH.didYouMean)("the enum value",r)}function ZR(e,t){return Vc(t)||(0,ur.devAssert)(!1,`${e} values must be an object with value names as keys.`),Object.entries(t).map(([n,r])=>(Vc(r)||(0,ur.devAssert)(!1,`${e}.${n} must refer to an object with a "value" key representing an internal value but got: ${(0,un.inspect)(r)}.`),{name:(0,ba.assertEnumValueName)(n),description:r.description,value:r.value!==void 0?r.value:n,deprecationReason:r.deprecationReason,extensions:(0,Da.toObjMap)(r.extensions),astNode:r.astNode}))}var _m=class{constructor(t){var n,r;this.name=(0,ba.assertName)(t.name),this.description=t.description,this.extensions=(0,Da.toObjMap)(t.extensions),this.astNode=t.astNode,this.extensionASTNodes=(n=t.extensionASTNodes)!==null&&n!==void 0?n:[],this.isOneOf=(r=t.isOneOf)!==null&&r!==void 0?r:!1,this._fields=qH.bind(void 0,t)}get[Symbol.toStringTag](){return"GraphQLInputObjectType"}getFields(){return typeof this._fields=="function"&&(this._fields=this._fields()),this._fields}toConfig(){let t=(0,vm.mapValue)(this.getFields(),n=>({description:n.description,type:n.type,defaultValue:n.defaultValue,deprecationReason:n.deprecationReason,extensions:n.extensions,astNode:n.astNode}));return{name:this.name,description:this.description,fields:t,extensions:this.extensions,astNode:this.astNode,extensionASTNodes:this.extensionASTNodes,isOneOf:this.isOneOf}}toString(){return this.name}toJSON(){return this.toString()}};je.GraphQLInputObjectType=_m;function qH(e){let t=Jy(e.fields);return Vc(t)||(0,ur.devAssert)(!1,`${e.name} fields must be an object with field names as keys or a function which returns such an object.`),(0,vm.mapValue)(t,(n,r)=>(!("resolve"in n)||(0,ur.devAssert)(!1,`${e.name}.${r} field has a resolve property, but Input Types cannot define resolvers.`),{name:(0,ba.assertName)(r),description:n.description,type:n.type,defaultValue:n.defaultValue,deprecationReason:n.deprecationReason,extensions:(0,Da.toObjMap)(n.extensions),astNode:n.astNode}))}function VH(e){return Go(e.type)&&e.defaultValue===void 0}});var Sd=w(vd=>{"use strict";m();T();N();Object.defineProperty(vd,"__esModule",{value:!0});vd.doTypesOverlap=jH;vd.isEqualType=Hy;vd.isTypeSubTypeOf=Dm;var gr=Ft();function Hy(e,t){return e===t?!0:(0,gr.isNonNullType)(e)&&(0,gr.isNonNullType)(t)||(0,gr.isListType)(e)&&(0,gr.isListType)(t)?Hy(e.ofType,t.ofType):!1}function Dm(e,t,n){return t===n?!0:(0,gr.isNonNullType)(n)?(0,gr.isNonNullType)(t)?Dm(e,t.ofType,n.ofType):!1:(0,gr.isNonNullType)(t)?Dm(e,t.ofType,n):(0,gr.isListType)(n)?(0,gr.isListType)(t)?Dm(e,t.ofType,n.ofType):!1:(0,gr.isListType)(t)?!1:(0,gr.isAbstractType)(n)&&((0,gr.isInterfaceType)(t)||(0,gr.isObjectType)(t))&&e.isSubType(n,t)}function jH(e,t,n){return t===n?!0:(0,gr.isAbstractType)(t)?(0,gr.isAbstractType)(n)?e.getPossibleTypes(t).some(r=>e.isSubType(n,r)):e.isSubType(t,n):(0,gr.isAbstractType)(n)?e.isSubType(n,t):!1}});var Aa=w(zn=>{"use strict";m();T();N();Object.defineProperty(zn,"__esModule",{value:!0});zn.GraphQLString=zn.GraphQLInt=zn.GraphQLID=zn.GraphQLFloat=zn.GraphQLBoolean=zn.GRAPHQL_MIN_INT=zn.GRAPHQL_MAX_INT=void 0;zn.isSpecifiedScalarType=KH;zn.specifiedScalarTypes=void 0;var Zi=Yt(),lF=Sa(),cr=He(),Bu=Rt(),Od=li(),Dd=Ft(),bm=2147483647;zn.GRAPHQL_MAX_INT=bm;var Am=-2147483648;zn.GRAPHQL_MIN_INT=Am;var dF=new Dd.GraphQLScalarType({name:"Int",description:"The `Int` scalar type represents non-fractional signed whole numeric values. Int can represent values between -(2^31) and 2^31 - 1.",serialize(e){let t=bd(e);if(typeof t=="boolean")return t?1:0;let n=t;if(typeof t=="string"&&t!==""&&(n=Number(t)),typeof n!="number"||!Number.isInteger(n))throw new cr.GraphQLError(`Int cannot represent non-integer value: ${(0,Zi.inspect)(t)}`);if(n>bm||nbm||ebm||te.name===t)}function bd(e){if((0,lF.isObjectLike)(e)){if(typeof e.valueOf=="function"){let t=e.valueOf();if(!(0,lF.isObjectLike)(t))return t}if(typeof e.toJSON=="function")return e.toJSON()}return e}});var $r=w(qn=>{"use strict";m();T();N();Object.defineProperty(qn,"__esModule",{value:!0});qn.GraphQLSpecifiedByDirective=qn.GraphQLSkipDirective=qn.GraphQLOneOfDirective=qn.GraphQLIncludeDirective=qn.GraphQLDirective=qn.GraphQLDeprecatedDirective=qn.DEFAULT_DEPRECATION_REASON=void 0;qn.assertDirective=HH;qn.isDirective=hF;qn.isSpecifiedDirective=zH;qn.specifiedDirectives=void 0;var EF=Cr(),GH=Yt(),$H=md(),QH=Sa(),YH=cm(),Di=kc(),JH=yd(),Ad=Ft(),Rm=Aa();function hF(e){return(0,$H.instanceOf)(e,ds)}function HH(e){if(!hF(e))throw new Error(`Expected ${(0,GH.inspect)(e)} to be a GraphQL directive.`);return e}var ds=class{constructor(t){var n,r;this.name=(0,JH.assertName)(t.name),this.description=t.description,this.locations=t.locations,this.isRepeatable=(n=t.isRepeatable)!==null&&n!==void 0?n:!1,this.extensions=(0,YH.toObjMap)(t.extensions),this.astNode=t.astNode,Array.isArray(t.locations)||(0,EF.devAssert)(!1,`@${t.name} locations must be an Array.`);let i=(r=t.args)!==null&&r!==void 0?r:{};(0,QH.isObjectLike)(i)&&!Array.isArray(i)||(0,EF.devAssert)(!1,`@${t.name} args must be an object with argument names as keys.`),this.args=(0,Ad.defineArguments)(i)}get[Symbol.toStringTag](){return"GraphQLDirective"}toConfig(){return{name:this.name,description:this.description,locations:this.locations,args:(0,Ad.argsToArgsConfig)(this.args),isRepeatable:this.isRepeatable,extensions:this.extensions,astNode:this.astNode}}toString(){return"@"+this.name}toJSON(){return this.toString()}};qn.GraphQLDirective=ds;var yF=new ds({name:"include",description:"Directs the executor to include this field or fragment only when the `if` argument is true.",locations:[Di.DirectiveLocation.FIELD,Di.DirectiveLocation.FRAGMENT_SPREAD,Di.DirectiveLocation.INLINE_FRAGMENT],args:{if:{type:new Ad.GraphQLNonNull(Rm.GraphQLBoolean),description:"Included when true."}}});qn.GraphQLIncludeDirective=yF;var IF=new ds({name:"skip",description:"Directs the executor to skip this field or fragment when the `if` argument is true.",locations:[Di.DirectiveLocation.FIELD,Di.DirectiveLocation.FRAGMENT_SPREAD,Di.DirectiveLocation.INLINE_FRAGMENT],args:{if:{type:new Ad.GraphQLNonNull(Rm.GraphQLBoolean),description:"Skipped when true."}}});qn.GraphQLSkipDirective=IF;var gF="No longer supported";qn.DEFAULT_DEPRECATION_REASON=gF;var _F=new ds({name:"deprecated",description:"Marks an element of a GraphQL schema as no longer supported.",locations:[Di.DirectiveLocation.FIELD_DEFINITION,Di.DirectiveLocation.ARGUMENT_DEFINITION,Di.DirectiveLocation.INPUT_FIELD_DEFINITION,Di.DirectiveLocation.ENUM_VALUE],args:{reason:{type:Rm.GraphQLString,description:"Explains why this element was deprecated, usually also including a suggestion for how to access supported similar data. Formatted using the Markdown syntax, as specified by [CommonMark](https://commonmark.org/).",defaultValue:gF}}});qn.GraphQLDeprecatedDirective=_F;var vF=new ds({name:"specifiedBy",description:"Exposes a URL that specifies the behavior of this scalar.",locations:[Di.DirectiveLocation.SCALAR],args:{url:{type:new Ad.GraphQLNonNull(Rm.GraphQLString),description:"The URL that specifies the behavior of this scalar."}}});qn.GraphQLSpecifiedByDirective=vF;var SF=new ds({name:"oneOf",description:"Indicates exactly one field must be supplied and this field must not be `null`.",locations:[Di.DirectiveLocation.INPUT_OBJECT],args:{}});qn.GraphQLOneOfDirective=SF;var OF=Object.freeze([yF,IF,_F,vF,SF]);qn.specifiedDirectives=OF;function zH(e){return OF.some(({name:t})=>t===e.name)}});var Fm=w(zy=>{"use strict";m();T();N();Object.defineProperty(zy,"__esModule",{value:!0});zy.isIterableObject=WH;function WH(e){return typeof e=="object"&&typeof(e==null?void 0:e[Symbol.iterator])=="function"}});var Pd=w(Wy=>{"use strict";m();T();N();Object.defineProperty(Wy,"__esModule",{value:!0});Wy.astFromValue=Fd;var DF=Yt(),XH=Ir(),ZH=Fm(),e3=Sa(),bi=Rt(),Rd=Ft(),t3=Aa();function Fd(e,t){if((0,Rd.isNonNullType)(t)){let n=Fd(e,t.ofType);return(n==null?void 0:n.kind)===bi.Kind.NULL?null:n}if(e===null)return{kind:bi.Kind.NULL};if(e===void 0)return null;if((0,Rd.isListType)(t)){let n=t.ofType;if((0,ZH.isIterableObject)(e)){let r=[];for(let i of e){let a=Fd(i,n);a!=null&&r.push(a)}return{kind:bi.Kind.LIST,values:r}}return Fd(e,n)}if((0,Rd.isInputObjectType)(t)){if(!(0,e3.isObjectLike)(e))return null;let n=[];for(let r of Object.values(t.getFields())){let i=Fd(e[r.name],r.type);i&&n.push({kind:bi.Kind.OBJECT_FIELD,name:{kind:bi.Kind.NAME,value:r.name},value:i})}return{kind:bi.Kind.OBJECT,fields:n}}if((0,Rd.isLeafType)(t)){let n=t.serialize(e);if(n==null)return null;if(typeof n=="boolean")return{kind:bi.Kind.BOOLEAN,value:n};if(typeof n=="number"&&Number.isFinite(n)){let r=String(n);return bF.test(r)?{kind:bi.Kind.INT,value:r}:{kind:bi.Kind.FLOAT,value:r}}if(typeof n=="string")return(0,Rd.isEnumType)(t)?{kind:bi.Kind.ENUM,value:n}:t===t3.GraphQLID&&bF.test(n)?{kind:bi.Kind.INT,value:n}:{kind:bi.Kind.STRING,value:n};throw new TypeError(`Cannot convert value to AST: ${(0,DF.inspect)(n)}.`)}(0,XH.invariant)(!1,"Unexpected input type: "+(0,DF.inspect)(t))}var bF=/^-?(?:0|[1-9][0-9]*)$/});var Ri=w(Jt=>{"use strict";m();T();N();Object.defineProperty(Jt,"__esModule",{value:!0});Jt.introspectionTypes=Jt.__TypeKind=Jt.__Type=Jt.__Schema=Jt.__InputValue=Jt.__Field=Jt.__EnumValue=Jt.__DirectiveLocation=Jt.__Directive=Jt.TypeNameMetaFieldDef=Jt.TypeMetaFieldDef=Jt.TypeKind=Jt.SchemaMetaFieldDef=void 0;Jt.isIntrospectionType=c3;var n3=Yt(),r3=Ir(),Wn=kc(),i3=li(),a3=Pd(),Ue=Ft(),rn=Aa(),Xy=new Ue.GraphQLObjectType({name:"__Schema",description:"A GraphQL Schema defines the capabilities of a GraphQL server. It exposes all available types and directives on the server, as well as the entry points for query, mutation, and subscription operations.",fields:()=>({description:{type:rn.GraphQLString,resolve:e=>e.description},types:{description:"A list of all types supported by this server.",type:new Ue.GraphQLNonNull(new Ue.GraphQLList(new Ue.GraphQLNonNull(Ai))),resolve(e){return Object.values(e.getTypeMap())}},queryType:{description:"The type that query operations will be rooted at.",type:new Ue.GraphQLNonNull(Ai),resolve:e=>e.getQueryType()},mutationType:{description:"If this server supports mutation, the type that mutation operations will be rooted at.",type:Ai,resolve:e=>e.getMutationType()},subscriptionType:{description:"If this server support subscription, the type that subscription operations will be rooted at.",type:Ai,resolve:e=>e.getSubscriptionType()},directives:{description:"A list of all directives supported by this server.",type:new Ue.GraphQLNonNull(new Ue.GraphQLList(new Ue.GraphQLNonNull(Zy))),resolve:e=>e.getDirectives()}})});Jt.__Schema=Xy;var Zy=new Ue.GraphQLObjectType({name:"__Directive",description:`A Directive provides a way to describe alternate runtime execution and type validation behavior in a GraphQL document. -In some cases, you need to provide options to alter GraphQL's execution behavior in ways field arguments will not suffice, such as conditionally including or skipping a field. Directives provide this by describing additional information to the executor.`,fields:()=>({name:{type:new Ue.GraphQLNonNull(rn.GraphQLString),resolve:e=>e.name},description:{type:rn.GraphQLString,resolve:e=>e.description},isRepeatable:{type:new Ue.GraphQLNonNull(rn.GraphQLBoolean),resolve:e=>e.isRepeatable},locations:{type:new Ue.GraphQLNonNull(new Ue.GraphQLList(new Ue.GraphQLNonNull(Zy))),resolve:e=>e.locations},args:{type:new Ue.GraphQLNonNull(new Ue.GraphQLList(new Ue.GraphQLNonNull(Pd))),args:{includeDeprecated:{type:rn.GraphQLBoolean,defaultValue:!1}},resolve(e,{includeDeprecated:t}){return t?e.args:e.args.filter(n=>n.deprecationReason==null)}}})});Jt.__Directive=Xy;var Zy=new Ue.GraphQLEnumType({name:"__DirectiveLocation",description:"A Directive can be adjacent to many parts of the GraphQL language, a __DirectiveLocation describes one such possible adjacencies.",values:{QUERY:{value:Wn.DirectiveLocation.QUERY,description:"Location adjacent to a query operation."},MUTATION:{value:Wn.DirectiveLocation.MUTATION,description:"Location adjacent to a mutation operation."},SUBSCRIPTION:{value:Wn.DirectiveLocation.SUBSCRIPTION,description:"Location adjacent to a subscription operation."},FIELD:{value:Wn.DirectiveLocation.FIELD,description:"Location adjacent to a field."},FRAGMENT_DEFINITION:{value:Wn.DirectiveLocation.FRAGMENT_DEFINITION,description:"Location adjacent to a fragment definition."},FRAGMENT_SPREAD:{value:Wn.DirectiveLocation.FRAGMENT_SPREAD,description:"Location adjacent to a fragment spread."},INLINE_FRAGMENT:{value:Wn.DirectiveLocation.INLINE_FRAGMENT,description:"Location adjacent to an inline fragment."},VARIABLE_DEFINITION:{value:Wn.DirectiveLocation.VARIABLE_DEFINITION,description:"Location adjacent to a variable definition."},SCHEMA:{value:Wn.DirectiveLocation.SCHEMA,description:"Location adjacent to a schema definition."},SCALAR:{value:Wn.DirectiveLocation.SCALAR,description:"Location adjacent to a scalar definition."},OBJECT:{value:Wn.DirectiveLocation.OBJECT,description:"Location adjacent to an object type definition."},FIELD_DEFINITION:{value:Wn.DirectiveLocation.FIELD_DEFINITION,description:"Location adjacent to a field definition."},ARGUMENT_DEFINITION:{value:Wn.DirectiveLocation.ARGUMENT_DEFINITION,description:"Location adjacent to an argument definition."},INTERFACE:{value:Wn.DirectiveLocation.INTERFACE,description:"Location adjacent to an interface definition."},UNION:{value:Wn.DirectiveLocation.UNION,description:"Location adjacent to a union definition."},ENUM:{value:Wn.DirectiveLocation.ENUM,description:"Location adjacent to an enum definition."},ENUM_VALUE:{value:Wn.DirectiveLocation.ENUM_VALUE,description:"Location adjacent to an enum value definition."},INPUT_OBJECT:{value:Wn.DirectiveLocation.INPUT_OBJECT,description:"Location adjacent to an input object type definition."},INPUT_FIELD_DEFINITION:{value:Wn.DirectiveLocation.INPUT_FIELD_DEFINITION,description:"Location adjacent to an input object field definition."}}});Jt.__DirectiveLocation=Zy;var Ai=new Ue.GraphQLObjectType({name:"__Type",description:"The fundamental unit of any GraphQL Schema is the type. There are many kinds of types in GraphQL as represented by the `__TypeKind` enum.\n\nDepending on the kind of a type, certain fields describe information about that type. Scalar types provide no information beyond a name, description and optional `specifiedByURL`, while Enum types provide their values. Object and Interface types provide the fields they describe. Abstract types, Union and Interface, provide the Object types possible at runtime. List and NonNull types compose other types.",fields:()=>({kind:{type:new Ue.GraphQLNonNull(nI),resolve(e){if((0,Ue.isScalarType)(e))return Xn.SCALAR;if((0,Ue.isObjectType)(e))return Xn.OBJECT;if((0,Ue.isInterfaceType)(e))return Xn.INTERFACE;if((0,Ue.isUnionType)(e))return Xn.UNION;if((0,Ue.isEnumType)(e))return Xn.ENUM;if((0,Ue.isInputObjectType)(e))return Xn.INPUT_OBJECT;if((0,Ue.isListType)(e))return Xn.LIST;if((0,Ue.isNonNullType)(e))return Xn.NON_NULL;(0,r3.invariant)(!1,`Unexpected type: "${(0,n3.inspect)(e)}".`)}},name:{type:rn.GraphQLString,resolve:e=>"name"in e?e.name:void 0},description:{type:rn.GraphQLString,resolve:e=>"description"in e?e.description:void 0},specifiedByURL:{type:rn.GraphQLString,resolve:e=>"specifiedByURL"in e?e.specifiedByURL:void 0},fields:{type:new Ue.GraphQLList(new Ue.GraphQLNonNull(eI)),args:{includeDeprecated:{type:rn.GraphQLBoolean,defaultValue:!1}},resolve(e,{includeDeprecated:t}){if((0,Ue.isObjectType)(e)||(0,Ue.isInterfaceType)(e)){let n=Object.values(e.getFields());return t?n:n.filter(r=>r.deprecationReason==null)}}},interfaces:{type:new Ue.GraphQLList(new Ue.GraphQLNonNull(Ai)),resolve(e){if((0,Ue.isObjectType)(e)||(0,Ue.isInterfaceType)(e))return e.getInterfaces()}},possibleTypes:{type:new Ue.GraphQLList(new Ue.GraphQLNonNull(Ai)),resolve(e,t,n,{schema:r}){if((0,Ue.isAbstractType)(e))return r.getPossibleTypes(e)}},enumValues:{type:new Ue.GraphQLList(new Ue.GraphQLNonNull(tI)),args:{includeDeprecated:{type:rn.GraphQLBoolean,defaultValue:!1}},resolve(e,{includeDeprecated:t}){if((0,Ue.isEnumType)(e)){let n=e.getValues();return t?n:n.filter(r=>r.deprecationReason==null)}}},inputFields:{type:new Ue.GraphQLList(new Ue.GraphQLNonNull(Pd)),args:{includeDeprecated:{type:rn.GraphQLBoolean,defaultValue:!1}},resolve(e,{includeDeprecated:t}){if((0,Ue.isInputObjectType)(e)){let n=Object.values(e.getFields());return t?n:n.filter(r=>r.deprecationReason==null)}}},ofType:{type:Ai,resolve:e=>"ofType"in e?e.ofType:void 0},isOneOf:{type:rn.GraphQLBoolean,resolve:e=>{if((0,Ue.isInputObjectType)(e))return e.isOneOf}}})});Jt.__Type=Ai;var eI=new Ue.GraphQLObjectType({name:"__Field",description:"Object and Interface types are described by a list of Fields, each of which has a name, potentially a list of arguments, and a return type.",fields:()=>({name:{type:new Ue.GraphQLNonNull(rn.GraphQLString),resolve:e=>e.name},description:{type:rn.GraphQLString,resolve:e=>e.description},args:{type:new Ue.GraphQLNonNull(new Ue.GraphQLList(new Ue.GraphQLNonNull(Pd))),args:{includeDeprecated:{type:rn.GraphQLBoolean,defaultValue:!1}},resolve(e,{includeDeprecated:t}){return t?e.args:e.args.filter(n=>n.deprecationReason==null)}},type:{type:new Ue.GraphQLNonNull(Ai),resolve:e=>e.type},isDeprecated:{type:new Ue.GraphQLNonNull(rn.GraphQLBoolean),resolve:e=>e.deprecationReason!=null},deprecationReason:{type:rn.GraphQLString,resolve:e=>e.deprecationReason}})});Jt.__Field=eI;var Pd=new Ue.GraphQLObjectType({name:"__InputValue",description:"Arguments provided to Fields or Directives and the input fields of an InputObject are represented as Input Values which describe their type and optionally a default value.",fields:()=>({name:{type:new Ue.GraphQLNonNull(rn.GraphQLString),resolve:e=>e.name},description:{type:rn.GraphQLString,resolve:e=>e.description},type:{type:new Ue.GraphQLNonNull(Ai),resolve:e=>e.type},defaultValue:{type:rn.GraphQLString,description:"A GraphQL-formatted string representing the default value for this input value.",resolve(e){let{type:t,defaultValue:n}=e,r=(0,a3.astFromValue)(n,t);return r?(0,i3.print)(r):null}},isDeprecated:{type:new Ue.GraphQLNonNull(rn.GraphQLBoolean),resolve:e=>e.deprecationReason!=null},deprecationReason:{type:rn.GraphQLString,resolve:e=>e.deprecationReason}})});Jt.__InputValue=Pd;var tI=new Ue.GraphQLObjectType({name:"__EnumValue",description:"One possible value for a given Enum. Enum values are unique values, not a placeholder for a string or numeric value. However an Enum value is returned in a JSON response as a string.",fields:()=>({name:{type:new Ue.GraphQLNonNull(rn.GraphQLString),resolve:e=>e.name},description:{type:rn.GraphQLString,resolve:e=>e.description},isDeprecated:{type:new Ue.GraphQLNonNull(rn.GraphQLBoolean),resolve:e=>e.deprecationReason!=null},deprecationReason:{type:rn.GraphQLString,resolve:e=>e.deprecationReason}})});Jt.__EnumValue=tI;var Xn;Jt.TypeKind=Xn;(function(e){e.SCALAR="SCALAR",e.OBJECT="OBJECT",e.INTERFACE="INTERFACE",e.UNION="UNION",e.ENUM="ENUM",e.INPUT_OBJECT="INPUT_OBJECT",e.LIST="LIST",e.NON_NULL="NON_NULL"})(Xn||(Jt.TypeKind=Xn={}));var nI=new Ue.GraphQLEnumType({name:"__TypeKind",description:"An enum describing what kind of type a given `__Type` is.",values:{SCALAR:{value:Xn.SCALAR,description:"Indicates this type is a scalar."},OBJECT:{value:Xn.OBJECT,description:"Indicates this type is an object. `fields` and `interfaces` are valid fields."},INTERFACE:{value:Xn.INTERFACE,description:"Indicates this type is an interface. `fields`, `interfaces`, and `possibleTypes` are valid fields."},UNION:{value:Xn.UNION,description:"Indicates this type is a union. `possibleTypes` is a valid field."},ENUM:{value:Xn.ENUM,description:"Indicates this type is an enum. `enumValues` is a valid field."},INPUT_OBJECT:{value:Xn.INPUT_OBJECT,description:"Indicates this type is an input object. `inputFields` is a valid field."},LIST:{value:Xn.LIST,description:"Indicates this type is a list. `ofType` is a valid field."},NON_NULL:{value:Xn.NON_NULL,description:"Indicates this type is a non-null. `ofType` is a valid field."}}});Jt.__TypeKind=nI;var s3={name:"__schema",type:new Ue.GraphQLNonNull(Wy),description:"Access the current type schema of this server.",args:[],resolve:(e,t,n,{schema:r})=>r,deprecationReason:void 0,extensions:Object.create(null),astNode:void 0};Jt.SchemaMetaFieldDef=s3;var o3={name:"__type",type:Ai,description:"Request the type information of a single type.",args:[{name:"name",description:void 0,type:new Ue.GraphQLNonNull(rn.GraphQLString),defaultValue:void 0,deprecationReason:void 0,extensions:Object.create(null),astNode:void 0}],resolve:(e,{name:t},n,{schema:r})=>r.getType(t),deprecationReason:void 0,extensions:Object.create(null),astNode:void 0};Jt.TypeMetaFieldDef=o3;var u3={name:"__typename",type:new Ue.GraphQLNonNull(rn.GraphQLString),description:"The name of the current Object type at runtime.",args:[],resolve:(e,t,n,{parentType:r})=>r.name,deprecationReason:void 0,extensions:Object.create(null),astNode:void 0};Jt.TypeNameMetaFieldDef=u3;var bF=Object.freeze([Wy,Xy,Zy,Ai,eI,Pd,tI,nI]);Jt.introspectionTypes=bF;function c3(e){return bF.some(({name:t})=>e.name===t)}});var Uu=w(Kc=>{"use strict";f();N();m();Object.defineProperty(Kc,"__esModule",{value:!0});Kc.GraphQLSchema=void 0;Kc.assertSchema=m3;Kc.isSchema=RF;var Rm=Cr(),iI=Yt(),l3=fd(),d3=Sa(),p3=om(),rI=Oa(),ea=Ft(),AF=$r(),f3=Ri();function RF(e){return(0,l3.instanceOf)(e,Fm)}function m3(e){if(!RF(e))throw new Error(`Expected ${(0,iI.inspect)(e)} to be a GraphQL schema.`);return e}var Fm=class{constructor(t){var n,r;this.__validationErrors=t.assumeValid===!0?[]:void 0,(0,d3.isObjectLike)(t)||(0,Rm.devAssert)(!1,"Must provide configuration object."),!t.types||Array.isArray(t.types)||(0,Rm.devAssert)(!1,`"types" must be Array if provided but got: ${(0,iI.inspect)(t.types)}.`),!t.directives||Array.isArray(t.directives)||(0,Rm.devAssert)(!1,`"directives" must be Array if provided but got: ${(0,iI.inspect)(t.directives)}.`),this.description=t.description,this.extensions=(0,p3.toObjMap)(t.extensions),this.astNode=t.astNode,this.extensionASTNodes=(n=t.extensionASTNodes)!==null&&n!==void 0?n:[],this._queryType=t.query,this._mutationType=t.mutation,this._subscriptionType=t.subscription,this._directives=(r=t.directives)!==null&&r!==void 0?r:AF.specifiedDirectives;let i=new Set(t.types);if(t.types!=null)for(let a of t.types)i.delete(a),ta(a,i);this._queryType!=null&&ta(this._queryType,i),this._mutationType!=null&&ta(this._mutationType,i),this._subscriptionType!=null&&ta(this._subscriptionType,i);for(let a of this._directives)if((0,AF.isDirective)(a))for(let o of a.args)ta(o.type,i);ta(f3.__Schema,i),this._typeMap=Object.create(null),this._subTypeMap=Object.create(null),this._implementationsMap=Object.create(null);for(let a of i){if(a==null)continue;let o=a.name;if(o||(0,Rm.devAssert)(!1,"One of the provided types for building the Schema is missing a name."),this._typeMap[o]!==void 0)throw new Error(`Schema must contain uniquely named types but contains multiple types named "${o}".`);if(this._typeMap[o]=a,(0,ea.isInterfaceType)(a)){for(let c of a.getInterfaces())if((0,ea.isInterfaceType)(c)){let l=this._implementationsMap[c.name];l===void 0&&(l=this._implementationsMap[c.name]={objects:[],interfaces:[]}),l.interfaces.push(a)}}else if((0,ea.isObjectType)(a)){for(let c of a.getInterfaces())if((0,ea.isInterfaceType)(c)){let l=this._implementationsMap[c.name];l===void 0&&(l=this._implementationsMap[c.name]={objects:[],interfaces:[]}),l.objects.push(a)}}}}get[Symbol.toStringTag](){return"GraphQLSchema"}getQueryType(){return this._queryType}getMutationType(){return this._mutationType}getSubscriptionType(){return this._subscriptionType}getRootType(t){switch(t){case rI.OperationTypeNode.QUERY:return this.getQueryType();case rI.OperationTypeNode.MUTATION:return this.getMutationType();case rI.OperationTypeNode.SUBSCRIPTION:return this.getSubscriptionType()}}getTypeMap(){return this._typeMap}getType(t){return this.getTypeMap()[t]}getPossibleTypes(t){return(0,ea.isUnionType)(t)?t.getTypes():this.getImplementations(t).objects}getImplementations(t){let n=this._implementationsMap[t.name];return n!=null?n:{objects:[],interfaces:[]}}isSubType(t,n){let r=this._subTypeMap[t.name];if(r===void 0){if(r=Object.create(null),(0,ea.isUnionType)(t))for(let i of t.getTypes())r[i.name]=!0;else{let i=this.getImplementations(t);for(let a of i.objects)r[a.name]=!0;for(let a of i.interfaces)r[a.name]=!0}this._subTypeMap[t.name]=r}return r[n.name]!==void 0}getDirectives(){return this._directives}getDirective(t){return this.getDirectives().find(n=>n.name===t)}toConfig(){return{description:this.description,query:this.getQueryType(),mutation:this.getMutationType(),subscription:this.getSubscriptionType(),types:Object.values(this.getTypeMap()),directives:this.getDirectives(),extensions:this.extensions,astNode:this.astNode,extensionASTNodes:this.extensionASTNodes,assumeValid:this.__validationErrors!==void 0}}};Kc.GraphQLSchema=Fm;function ta(e,t){let n=(0,ea.getNamedType)(e);if(!t.has(n)){if(t.add(n),(0,ea.isUnionType)(n))for(let r of n.getTypes())ta(r,t);else if((0,ea.isObjectType)(n)||(0,ea.isInterfaceType)(n)){for(let r of n.getInterfaces())ta(r,t);for(let r of Object.values(n.getFields())){ta(r.type,t);for(let i of r.args)ta(i.type,t)}}else if((0,ea.isInputObjectType)(n))for(let r of Object.values(n.getFields()))ta(r.type,t)}return t}});var Ld=w(Pm=>{"use strict";f();N();m();Object.defineProperty(Pm,"__esModule",{value:!0});Pm.assertValidSchema=h3;Pm.validateSchema=BF;var _r=Yt(),N3=He(),aI=Oa(),FF=vd(),Fn=Ft(),CF=$r(),T3=Ri(),E3=Uu();function BF(e){if((0,E3.assertSchema)(e),e.__validationErrors)return e.__validationErrors;let t=new oI(e);y3(t),I3(t),g3(t);let n=t.getErrors();return e.__validationErrors=n,n}function h3(e){let t=BF(e);if(t.length!==0)throw new Error(t.map(n=>n.message).join(` +In some cases, you need to provide options to alter GraphQL's execution behavior in ways field arguments will not suffice, such as conditionally including or skipping a field. Directives provide this by describing additional information to the executor.`,fields:()=>({name:{type:new Ue.GraphQLNonNull(rn.GraphQLString),resolve:e=>e.name},description:{type:rn.GraphQLString,resolve:e=>e.description},isRepeatable:{type:new Ue.GraphQLNonNull(rn.GraphQLBoolean),resolve:e=>e.isRepeatable},locations:{type:new Ue.GraphQLNonNull(new Ue.GraphQLList(new Ue.GraphQLNonNull(eI))),resolve:e=>e.locations},args:{type:new Ue.GraphQLNonNull(new Ue.GraphQLList(new Ue.GraphQLNonNull(wd))),args:{includeDeprecated:{type:rn.GraphQLBoolean,defaultValue:!1}},resolve(e,{includeDeprecated:t}){return t?e.args:e.args.filter(n=>n.deprecationReason==null)}}})});Jt.__Directive=Zy;var eI=new Ue.GraphQLEnumType({name:"__DirectiveLocation",description:"A Directive can be adjacent to many parts of the GraphQL language, a __DirectiveLocation describes one such possible adjacencies.",values:{QUERY:{value:Wn.DirectiveLocation.QUERY,description:"Location adjacent to a query operation."},MUTATION:{value:Wn.DirectiveLocation.MUTATION,description:"Location adjacent to a mutation operation."},SUBSCRIPTION:{value:Wn.DirectiveLocation.SUBSCRIPTION,description:"Location adjacent to a subscription operation."},FIELD:{value:Wn.DirectiveLocation.FIELD,description:"Location adjacent to a field."},FRAGMENT_DEFINITION:{value:Wn.DirectiveLocation.FRAGMENT_DEFINITION,description:"Location adjacent to a fragment definition."},FRAGMENT_SPREAD:{value:Wn.DirectiveLocation.FRAGMENT_SPREAD,description:"Location adjacent to a fragment spread."},INLINE_FRAGMENT:{value:Wn.DirectiveLocation.INLINE_FRAGMENT,description:"Location adjacent to an inline fragment."},VARIABLE_DEFINITION:{value:Wn.DirectiveLocation.VARIABLE_DEFINITION,description:"Location adjacent to a variable definition."},SCHEMA:{value:Wn.DirectiveLocation.SCHEMA,description:"Location adjacent to a schema definition."},SCALAR:{value:Wn.DirectiveLocation.SCALAR,description:"Location adjacent to a scalar definition."},OBJECT:{value:Wn.DirectiveLocation.OBJECT,description:"Location adjacent to an object type definition."},FIELD_DEFINITION:{value:Wn.DirectiveLocation.FIELD_DEFINITION,description:"Location adjacent to a field definition."},ARGUMENT_DEFINITION:{value:Wn.DirectiveLocation.ARGUMENT_DEFINITION,description:"Location adjacent to an argument definition."},INTERFACE:{value:Wn.DirectiveLocation.INTERFACE,description:"Location adjacent to an interface definition."},UNION:{value:Wn.DirectiveLocation.UNION,description:"Location adjacent to a union definition."},ENUM:{value:Wn.DirectiveLocation.ENUM,description:"Location adjacent to an enum definition."},ENUM_VALUE:{value:Wn.DirectiveLocation.ENUM_VALUE,description:"Location adjacent to an enum value definition."},INPUT_OBJECT:{value:Wn.DirectiveLocation.INPUT_OBJECT,description:"Location adjacent to an input object type definition."},INPUT_FIELD_DEFINITION:{value:Wn.DirectiveLocation.INPUT_FIELD_DEFINITION,description:"Location adjacent to an input object field definition."}}});Jt.__DirectiveLocation=eI;var Ai=new Ue.GraphQLObjectType({name:"__Type",description:"The fundamental unit of any GraphQL Schema is the type. There are many kinds of types in GraphQL as represented by the `__TypeKind` enum.\n\nDepending on the kind of a type, certain fields describe information about that type. Scalar types provide no information beyond a name, description and optional `specifiedByURL`, while Enum types provide their values. Object and Interface types provide the fields they describe. Abstract types, Union and Interface, provide the Object types possible at runtime. List and NonNull types compose other types.",fields:()=>({kind:{type:new Ue.GraphQLNonNull(rI),resolve(e){if((0,Ue.isScalarType)(e))return Xn.SCALAR;if((0,Ue.isObjectType)(e))return Xn.OBJECT;if((0,Ue.isInterfaceType)(e))return Xn.INTERFACE;if((0,Ue.isUnionType)(e))return Xn.UNION;if((0,Ue.isEnumType)(e))return Xn.ENUM;if((0,Ue.isInputObjectType)(e))return Xn.INPUT_OBJECT;if((0,Ue.isListType)(e))return Xn.LIST;if((0,Ue.isNonNullType)(e))return Xn.NON_NULL;(0,r3.invariant)(!1,`Unexpected type: "${(0,n3.inspect)(e)}".`)}},name:{type:rn.GraphQLString,resolve:e=>"name"in e?e.name:void 0},description:{type:rn.GraphQLString,resolve:e=>"description"in e?e.description:void 0},specifiedByURL:{type:rn.GraphQLString,resolve:e=>"specifiedByURL"in e?e.specifiedByURL:void 0},fields:{type:new Ue.GraphQLList(new Ue.GraphQLNonNull(tI)),args:{includeDeprecated:{type:rn.GraphQLBoolean,defaultValue:!1}},resolve(e,{includeDeprecated:t}){if((0,Ue.isObjectType)(e)||(0,Ue.isInterfaceType)(e)){let n=Object.values(e.getFields());return t?n:n.filter(r=>r.deprecationReason==null)}}},interfaces:{type:new Ue.GraphQLList(new Ue.GraphQLNonNull(Ai)),resolve(e){if((0,Ue.isObjectType)(e)||(0,Ue.isInterfaceType)(e))return e.getInterfaces()}},possibleTypes:{type:new Ue.GraphQLList(new Ue.GraphQLNonNull(Ai)),resolve(e,t,n,{schema:r}){if((0,Ue.isAbstractType)(e))return r.getPossibleTypes(e)}},enumValues:{type:new Ue.GraphQLList(new Ue.GraphQLNonNull(nI)),args:{includeDeprecated:{type:rn.GraphQLBoolean,defaultValue:!1}},resolve(e,{includeDeprecated:t}){if((0,Ue.isEnumType)(e)){let n=e.getValues();return t?n:n.filter(r=>r.deprecationReason==null)}}},inputFields:{type:new Ue.GraphQLList(new Ue.GraphQLNonNull(wd)),args:{includeDeprecated:{type:rn.GraphQLBoolean,defaultValue:!1}},resolve(e,{includeDeprecated:t}){if((0,Ue.isInputObjectType)(e)){let n=Object.values(e.getFields());return t?n:n.filter(r=>r.deprecationReason==null)}}},ofType:{type:Ai,resolve:e=>"ofType"in e?e.ofType:void 0},isOneOf:{type:rn.GraphQLBoolean,resolve:e=>{if((0,Ue.isInputObjectType)(e))return e.isOneOf}}})});Jt.__Type=Ai;var tI=new Ue.GraphQLObjectType({name:"__Field",description:"Object and Interface types are described by a list of Fields, each of which has a name, potentially a list of arguments, and a return type.",fields:()=>({name:{type:new Ue.GraphQLNonNull(rn.GraphQLString),resolve:e=>e.name},description:{type:rn.GraphQLString,resolve:e=>e.description},args:{type:new Ue.GraphQLNonNull(new Ue.GraphQLList(new Ue.GraphQLNonNull(wd))),args:{includeDeprecated:{type:rn.GraphQLBoolean,defaultValue:!1}},resolve(e,{includeDeprecated:t}){return t?e.args:e.args.filter(n=>n.deprecationReason==null)}},type:{type:new Ue.GraphQLNonNull(Ai),resolve:e=>e.type},isDeprecated:{type:new Ue.GraphQLNonNull(rn.GraphQLBoolean),resolve:e=>e.deprecationReason!=null},deprecationReason:{type:rn.GraphQLString,resolve:e=>e.deprecationReason}})});Jt.__Field=tI;var wd=new Ue.GraphQLObjectType({name:"__InputValue",description:"Arguments provided to Fields or Directives and the input fields of an InputObject are represented as Input Values which describe their type and optionally a default value.",fields:()=>({name:{type:new Ue.GraphQLNonNull(rn.GraphQLString),resolve:e=>e.name},description:{type:rn.GraphQLString,resolve:e=>e.description},type:{type:new Ue.GraphQLNonNull(Ai),resolve:e=>e.type},defaultValue:{type:rn.GraphQLString,description:"A GraphQL-formatted string representing the default value for this input value.",resolve(e){let{type:t,defaultValue:n}=e,r=(0,a3.astFromValue)(n,t);return r?(0,i3.print)(r):null}},isDeprecated:{type:new Ue.GraphQLNonNull(rn.GraphQLBoolean),resolve:e=>e.deprecationReason!=null},deprecationReason:{type:rn.GraphQLString,resolve:e=>e.deprecationReason}})});Jt.__InputValue=wd;var nI=new Ue.GraphQLObjectType({name:"__EnumValue",description:"One possible value for a given Enum. Enum values are unique values, not a placeholder for a string or numeric value. However an Enum value is returned in a JSON response as a string.",fields:()=>({name:{type:new Ue.GraphQLNonNull(rn.GraphQLString),resolve:e=>e.name},description:{type:rn.GraphQLString,resolve:e=>e.description},isDeprecated:{type:new Ue.GraphQLNonNull(rn.GraphQLBoolean),resolve:e=>e.deprecationReason!=null},deprecationReason:{type:rn.GraphQLString,resolve:e=>e.deprecationReason}})});Jt.__EnumValue=nI;var Xn;Jt.TypeKind=Xn;(function(e){e.SCALAR="SCALAR",e.OBJECT="OBJECT",e.INTERFACE="INTERFACE",e.UNION="UNION",e.ENUM="ENUM",e.INPUT_OBJECT="INPUT_OBJECT",e.LIST="LIST",e.NON_NULL="NON_NULL"})(Xn||(Jt.TypeKind=Xn={}));var rI=new Ue.GraphQLEnumType({name:"__TypeKind",description:"An enum describing what kind of type a given `__Type` is.",values:{SCALAR:{value:Xn.SCALAR,description:"Indicates this type is a scalar."},OBJECT:{value:Xn.OBJECT,description:"Indicates this type is an object. `fields` and `interfaces` are valid fields."},INTERFACE:{value:Xn.INTERFACE,description:"Indicates this type is an interface. `fields`, `interfaces`, and `possibleTypes` are valid fields."},UNION:{value:Xn.UNION,description:"Indicates this type is a union. `possibleTypes` is a valid field."},ENUM:{value:Xn.ENUM,description:"Indicates this type is an enum. `enumValues` is a valid field."},INPUT_OBJECT:{value:Xn.INPUT_OBJECT,description:"Indicates this type is an input object. `inputFields` is a valid field."},LIST:{value:Xn.LIST,description:"Indicates this type is a list. `ofType` is a valid field."},NON_NULL:{value:Xn.NON_NULL,description:"Indicates this type is a non-null. `ofType` is a valid field."}}});Jt.__TypeKind=rI;var s3={name:"__schema",type:new Ue.GraphQLNonNull(Xy),description:"Access the current type schema of this server.",args:[],resolve:(e,t,n,{schema:r})=>r,deprecationReason:void 0,extensions:Object.create(null),astNode:void 0};Jt.SchemaMetaFieldDef=s3;var o3={name:"__type",type:Ai,description:"Request the type information of a single type.",args:[{name:"name",description:void 0,type:new Ue.GraphQLNonNull(rn.GraphQLString),defaultValue:void 0,deprecationReason:void 0,extensions:Object.create(null),astNode:void 0}],resolve:(e,{name:t},n,{schema:r})=>r.getType(t),deprecationReason:void 0,extensions:Object.create(null),astNode:void 0};Jt.TypeMetaFieldDef=o3;var u3={name:"__typename",type:new Ue.GraphQLNonNull(rn.GraphQLString),description:"The name of the current Object type at runtime.",args:[],resolve:(e,t,n,{parentType:r})=>r.name,deprecationReason:void 0,extensions:Object.create(null),astNode:void 0};Jt.TypeNameMetaFieldDef=u3;var AF=Object.freeze([Xy,Zy,eI,Ai,tI,wd,nI,rI]);Jt.introspectionTypes=AF;function c3(e){return AF.some(({name:t})=>e.name===t)}});var Uu=w(Kc=>{"use strict";m();T();N();Object.defineProperty(Kc,"__esModule",{value:!0});Kc.GraphQLSchema=void 0;Kc.assertSchema=m3;Kc.isSchema=FF;var Pm=Cr(),aI=Yt(),l3=md(),d3=Sa(),p3=cm(),iI=Oa(),ea=Ft(),RF=$r(),f3=Ri();function FF(e){return(0,l3.instanceOf)(e,wm)}function m3(e){if(!FF(e))throw new Error(`Expected ${(0,aI.inspect)(e)} to be a GraphQL schema.`);return e}var wm=class{constructor(t){var n,r;this.__validationErrors=t.assumeValid===!0?[]:void 0,(0,d3.isObjectLike)(t)||(0,Pm.devAssert)(!1,"Must provide configuration object."),!t.types||Array.isArray(t.types)||(0,Pm.devAssert)(!1,`"types" must be Array if provided but got: ${(0,aI.inspect)(t.types)}.`),!t.directives||Array.isArray(t.directives)||(0,Pm.devAssert)(!1,`"directives" must be Array if provided but got: ${(0,aI.inspect)(t.directives)}.`),this.description=t.description,this.extensions=(0,p3.toObjMap)(t.extensions),this.astNode=t.astNode,this.extensionASTNodes=(n=t.extensionASTNodes)!==null&&n!==void 0?n:[],this._queryType=t.query,this._mutationType=t.mutation,this._subscriptionType=t.subscription,this._directives=(r=t.directives)!==null&&r!==void 0?r:RF.specifiedDirectives;let i=new Set(t.types);if(t.types!=null)for(let a of t.types)i.delete(a),ta(a,i);this._queryType!=null&&ta(this._queryType,i),this._mutationType!=null&&ta(this._mutationType,i),this._subscriptionType!=null&&ta(this._subscriptionType,i);for(let a of this._directives)if((0,RF.isDirective)(a))for(let o of a.args)ta(o.type,i);ta(f3.__Schema,i),this._typeMap=Object.create(null),this._subTypeMap=Object.create(null),this._implementationsMap=Object.create(null);for(let a of i){if(a==null)continue;let o=a.name;if(o||(0,Pm.devAssert)(!1,"One of the provided types for building the Schema is missing a name."),this._typeMap[o]!==void 0)throw new Error(`Schema must contain uniquely named types but contains multiple types named "${o}".`);if(this._typeMap[o]=a,(0,ea.isInterfaceType)(a)){for(let c of a.getInterfaces())if((0,ea.isInterfaceType)(c)){let l=this._implementationsMap[c.name];l===void 0&&(l=this._implementationsMap[c.name]={objects:[],interfaces:[]}),l.interfaces.push(a)}}else if((0,ea.isObjectType)(a)){for(let c of a.getInterfaces())if((0,ea.isInterfaceType)(c)){let l=this._implementationsMap[c.name];l===void 0&&(l=this._implementationsMap[c.name]={objects:[],interfaces:[]}),l.objects.push(a)}}}}get[Symbol.toStringTag](){return"GraphQLSchema"}getQueryType(){return this._queryType}getMutationType(){return this._mutationType}getSubscriptionType(){return this._subscriptionType}getRootType(t){switch(t){case iI.OperationTypeNode.QUERY:return this.getQueryType();case iI.OperationTypeNode.MUTATION:return this.getMutationType();case iI.OperationTypeNode.SUBSCRIPTION:return this.getSubscriptionType()}}getTypeMap(){return this._typeMap}getType(t){return this.getTypeMap()[t]}getPossibleTypes(t){return(0,ea.isUnionType)(t)?t.getTypes():this.getImplementations(t).objects}getImplementations(t){let n=this._implementationsMap[t.name];return n!=null?n:{objects:[],interfaces:[]}}isSubType(t,n){let r=this._subTypeMap[t.name];if(r===void 0){if(r=Object.create(null),(0,ea.isUnionType)(t))for(let i of t.getTypes())r[i.name]=!0;else{let i=this.getImplementations(t);for(let a of i.objects)r[a.name]=!0;for(let a of i.interfaces)r[a.name]=!0}this._subTypeMap[t.name]=r}return r[n.name]!==void 0}getDirectives(){return this._directives}getDirective(t){return this.getDirectives().find(n=>n.name===t)}toConfig(){return{description:this.description,query:this.getQueryType(),mutation:this.getMutationType(),subscription:this.getSubscriptionType(),types:Object.values(this.getTypeMap()),directives:this.getDirectives(),extensions:this.extensions,astNode:this.astNode,extensionASTNodes:this.extensionASTNodes,assumeValid:this.__validationErrors!==void 0}}};Kc.GraphQLSchema=wm;function ta(e,t){let n=(0,ea.getNamedType)(e);if(!t.has(n)){if(t.add(n),(0,ea.isUnionType)(n))for(let r of n.getTypes())ta(r,t);else if((0,ea.isObjectType)(n)||(0,ea.isInterfaceType)(n)){for(let r of n.getInterfaces())ta(r,t);for(let r of Object.values(n.getFields())){ta(r.type,t);for(let i of r.args)ta(i.type,t)}}else if((0,ea.isInputObjectType)(n))for(let r of Object.values(n.getFields()))ta(r.type,t)}return t}});var Cd=w(Lm=>{"use strict";m();T();N();Object.defineProperty(Lm,"__esModule",{value:!0});Lm.assertValidSchema=h3;Lm.validateSchema=UF;var _r=Yt(),N3=He(),sI=Oa(),PF=Sd(),Fn=Ft(),BF=$r(),T3=Ri(),E3=Uu();function UF(e){if((0,E3.assertSchema)(e),e.__validationErrors)return e.__validationErrors;let t=new uI(e);y3(t),I3(t),g3(t);let n=t.getErrors();return e.__validationErrors=n,n}function h3(e){let t=UF(e);if(t.length!==0)throw new Error(t.map(n=>n.message).join(` -`))}var oI=class{constructor(t){this._errors=[],this.schema=t}reportError(t,n){let r=Array.isArray(n)?n.filter(Boolean):n;this._errors.push(new N3.GraphQLError(t,{nodes:r}))}getErrors(){return this._errors}};function y3(e){let t=e.schema,n=t.getQueryType();if(!n)e.reportError("Query root type must be provided.",t.astNode);else if(!(0,Fn.isObjectType)(n)){var r;e.reportError(`Query root type must be Object type, it cannot be ${(0,_r.inspect)(n)}.`,(r=sI(t,aI.OperationTypeNode.QUERY))!==null&&r!==void 0?r:n.astNode)}let i=t.getMutationType();if(i&&!(0,Fn.isObjectType)(i)){var a;e.reportError(`Mutation root type must be Object type if provided, it cannot be ${(0,_r.inspect)(i)}.`,(a=sI(t,aI.OperationTypeNode.MUTATION))!==null&&a!==void 0?a:i.astNode)}let o=t.getSubscriptionType();if(o&&!(0,Fn.isObjectType)(o)){var c;e.reportError(`Subscription root type must be Object type if provided, it cannot be ${(0,_r.inspect)(o)}.`,(c=sI(t,aI.OperationTypeNode.SUBSCRIPTION))!==null&&c!==void 0?c:o.astNode)}}function sI(e,t){var n;return(n=[e.astNode,...e.extensionASTNodes].flatMap(r=>{var i;return(i=r==null?void 0:r.operationTypes)!==null&&i!==void 0?i:[]}).find(r=>r.operation===t))===null||n===void 0?void 0:n.type}function I3(e){for(let n of e.schema.getDirectives()){if(!(0,CF.isDirective)(n)){e.reportError(`Expected directive but got: ${(0,_r.inspect)(n)}.`,n==null?void 0:n.astNode);continue}ku(e,n);for(let r of n.args)if(ku(e,r),(0,Fn.isInputType)(r.type)||e.reportError(`The type of @${n.name}(${r.name}:) must be Input Type but got: ${(0,_r.inspect)(r.type)}.`,r.astNode),(0,Fn.isRequiredArgument)(r)&&r.deprecationReason!=null){var t;e.reportError(`Required argument @${n.name}(${r.name}:) cannot be deprecated.`,[uI(r.astNode),(t=r.astNode)===null||t===void 0?void 0:t.type])}}}function ku(e,t){t.name.startsWith("__")&&e.reportError(`Name "${t.name}" must not begin with "__", which is reserved by GraphQL introspection.`,t.astNode)}function g3(e){let t=A3(e),n=e.schema.getTypeMap();for(let r of Object.values(n)){if(!(0,Fn.isNamedType)(r)){e.reportError(`Expected GraphQL named type but got: ${(0,_r.inspect)(r)}.`,r.astNode);continue}(0,T3.isIntrospectionType)(r)||ku(e,r),(0,Fn.isObjectType)(r)||(0,Fn.isInterfaceType)(r)?(PF(e,r),wF(e,r)):(0,Fn.isUnionType)(r)?S3(e,r):(0,Fn.isEnumType)(r)?O3(e,r):(0,Fn.isInputObjectType)(r)&&(D3(e,r),t(r))}}function PF(e,t){let n=Object.values(t.getFields());n.length===0&&e.reportError(`Type ${t.name} must define one or more fields.`,[t.astNode,...t.extensionASTNodes]);for(let o of n){if(ku(e,o),!(0,Fn.isOutputType)(o.type)){var r;e.reportError(`The type of ${t.name}.${o.name} must be Output Type but got: ${(0,_r.inspect)(o.type)}.`,(r=o.astNode)===null||r===void 0?void 0:r.type)}for(let c of o.args){let l=c.name;if(ku(e,c),!(0,Fn.isInputType)(c.type)){var i;e.reportError(`The type of ${t.name}.${o.name}(${l}:) must be Input Type but got: ${(0,_r.inspect)(c.type)}.`,(i=c.astNode)===null||i===void 0?void 0:i.type)}if((0,Fn.isRequiredArgument)(c)&&c.deprecationReason!=null){var a;e.reportError(`Required argument ${t.name}.${o.name}(${l}:) cannot be deprecated.`,[uI(c.astNode),(a=c.astNode)===null||a===void 0?void 0:a.type])}}}}function wF(e,t){let n=Object.create(null);for(let r of t.getInterfaces()){if(!(0,Fn.isInterfaceType)(r)){e.reportError(`Type ${(0,_r.inspect)(t)} must only implement Interface types, it cannot implement ${(0,_r.inspect)(r)}.`,wd(t,r));continue}if(t===r){e.reportError(`Type ${t.name} cannot implement itself because it would create a circular reference.`,wd(t,r));continue}if(n[r.name]){e.reportError(`Type ${t.name} can only implement ${r.name} once.`,wd(t,r));continue}n[r.name]=!0,v3(e,t,r),_3(e,t,r)}}function _3(e,t,n){let r=t.getFields();for(let l of Object.values(n.getFields())){let p=l.name,T=r[p];if(!T){e.reportError(`Interface field ${n.name}.${p} expected but ${t.name} does not provide it.`,[l.astNode,t.astNode,...t.extensionASTNodes]);continue}if(!(0,FF.isTypeSubTypeOf)(e.schema,T.type,l.type)){var i,a;e.reportError(`Interface field ${n.name}.${p} expects type ${(0,_r.inspect)(l.type)} but ${t.name}.${p} is type ${(0,_r.inspect)(T.type)}.`,[(i=l.astNode)===null||i===void 0?void 0:i.type,(a=T.astNode)===null||a===void 0?void 0:a.type])}for(let y of l.args){let g=y.name,_=T.args.find(F=>F.name===g);if(!_){e.reportError(`Interface field argument ${n.name}.${p}(${g}:) expected but ${t.name}.${p} does not provide it.`,[y.astNode,T.astNode]);continue}if(!(0,FF.isEqualType)(y.type,_.type)){var o,c;e.reportError(`Interface field argument ${n.name}.${p}(${g}:) expects type ${(0,_r.inspect)(y.type)} but ${t.name}.${p}(${g}:) is type ${(0,_r.inspect)(_.type)}.`,[(o=y.astNode)===null||o===void 0?void 0:o.type,(c=_.astNode)===null||c===void 0?void 0:c.type])}}for(let y of T.args){let g=y.name;!l.args.find(F=>F.name===g)&&(0,Fn.isRequiredArgument)(y)&&e.reportError(`Object field ${t.name}.${p} includes required argument ${g} that is missing from the Interface field ${n.name}.${p}.`,[y.astNode,l.astNode])}}}function v3(e,t,n){let r=t.getInterfaces();for(let i of n.getInterfaces())r.includes(i)||e.reportError(i===t?`Type ${t.name} cannot implement ${n.name} because it would create a circular reference.`:`Type ${t.name} must implement ${i.name} because it is implemented by ${n.name}.`,[...wd(n,i),...wd(t,n)])}function S3(e,t){let n=t.getTypes();n.length===0&&e.reportError(`Union type ${t.name} must define one or more member types.`,[t.astNode,...t.extensionASTNodes]);let r=Object.create(null);for(let i of n){if(r[i.name]){e.reportError(`Union type ${t.name} can only include type ${i.name} once.`,LF(t,i.name));continue}r[i.name]=!0,(0,Fn.isObjectType)(i)||e.reportError(`Union type ${t.name} can only include Object types, it cannot include ${(0,_r.inspect)(i)}.`,LF(t,String(i)))}}function O3(e,t){let n=t.getValues();n.length===0&&e.reportError(`Enum type ${t.name} must define one or more values.`,[t.astNode,...t.extensionASTNodes]);for(let r of n)ku(e,r)}function D3(e,t){let n=Object.values(t.getFields());n.length===0&&e.reportError(`Input Object type ${t.name} must define one or more fields.`,[t.astNode,...t.extensionASTNodes]);for(let a of n){if(ku(e,a),!(0,Fn.isInputType)(a.type)){var r;e.reportError(`The type of ${t.name}.${a.name} must be Input Type but got: ${(0,_r.inspect)(a.type)}.`,(r=a.astNode)===null||r===void 0?void 0:r.type)}if((0,Fn.isRequiredInputField)(a)&&a.deprecationReason!=null){var i;e.reportError(`Required input field ${t.name}.${a.name} cannot be deprecated.`,[uI(a.astNode),(i=a.astNode)===null||i===void 0?void 0:i.type])}t.isOneOf&&b3(t,a,e)}}function b3(e,t,n){if((0,Fn.isNonNullType)(t.type)){var r;n.reportError(`OneOf input field ${e.name}.${t.name} must be nullable.`,(r=t.astNode)===null||r===void 0?void 0:r.type)}t.defaultValue!==void 0&&n.reportError(`OneOf input field ${e.name}.${t.name} cannot have a default value.`,t.astNode)}function A3(e){let t=Object.create(null),n=[],r=Object.create(null);return i;function i(a){if(t[a.name])return;t[a.name]=!0,r[a.name]=n.length;let o=Object.values(a.getFields());for(let c of o)if((0,Fn.isNonNullType)(c.type)&&(0,Fn.isInputObjectType)(c.type.ofType)){let l=c.type.ofType,p=r[l.name];if(n.push(c),p===void 0)i(l);else{let T=n.slice(p),y=T.map(g=>g.name).join(".");e.reportError(`Cannot reference Input Object "${l.name}" within itself through a series of non-null fields: "${y}".`,T.map(g=>g.astNode))}n.pop()}r[a.name]=void 0}}function wd(e,t){let{astNode:n,extensionASTNodes:r}=e;return(n!=null?[n,...r]:r).flatMap(a=>{var o;return(o=a.interfaces)!==null&&o!==void 0?o:[]}).filter(a=>a.name.value===t.name)}function LF(e,t){let{astNode:n,extensionASTNodes:r}=e;return(n!=null?[n,...r]:r).flatMap(a=>{var o;return(o=a.types)!==null&&o!==void 0?o:[]}).filter(a=>a.name.value===t)}function uI(e){var t;return e==null||(t=e.directives)===null||t===void 0?void 0:t.find(n=>n.name.value===CF.GraphQLDeprecatedDirective.name)}});var Ra=w(dI=>{"use strict";f();N();m();Object.defineProperty(dI,"__esModule",{value:!0});dI.typeFromAST=lI;var cI=Rt(),UF=Ft();function lI(e,t){switch(t.kind){case cI.Kind.LIST_TYPE:{let n=lI(e,t.type);return n&&new UF.GraphQLList(n)}case cI.Kind.NON_NULL_TYPE:{let n=lI(e,t.type);return n&&new UF.GraphQLNonNull(n)}case cI.Kind.NAMED_TYPE:return e.getType(t.name.value)}}});var wm=w(Cd=>{"use strict";f();N();m();Object.defineProperty(Cd,"__esModule",{value:!0});Cd.TypeInfo=void 0;Cd.visitWithTypeInfo=P3;var R3=Oa(),Pn=Rt(),kF=Fu(),wn=Ft(),Gc=Ri(),MF=Ra(),pI=class{constructor(t,n,r){this._schema=t,this._typeStack=[],this._parentTypeStack=[],this._inputTypeStack=[],this._fieldDefStack=[],this._defaultValueStack=[],this._directive=null,this._argument=null,this._enumValue=null,this._getFieldDef=r!=null?r:F3,n&&((0,wn.isInputType)(n)&&this._inputTypeStack.push(n),(0,wn.isCompositeType)(n)&&this._parentTypeStack.push(n),(0,wn.isOutputType)(n)&&this._typeStack.push(n))}get[Symbol.toStringTag](){return"TypeInfo"}getType(){if(this._typeStack.length>0)return this._typeStack[this._typeStack.length-1]}getParentType(){if(this._parentTypeStack.length>0)return this._parentTypeStack[this._parentTypeStack.length-1]}getInputType(){if(this._inputTypeStack.length>0)return this._inputTypeStack[this._inputTypeStack.length-1]}getParentInputType(){if(this._inputTypeStack.length>1)return this._inputTypeStack[this._inputTypeStack.length-2]}getFieldDef(){if(this._fieldDefStack.length>0)return this._fieldDefStack[this._fieldDefStack.length-1]}getDefaultValue(){if(this._defaultValueStack.length>0)return this._defaultValueStack[this._defaultValueStack.length-1]}getDirective(){return this._directive}getArgument(){return this._argument}getEnumValue(){return this._enumValue}enter(t){let n=this._schema;switch(t.kind){case Pn.Kind.SELECTION_SET:{let i=(0,wn.getNamedType)(this.getType());this._parentTypeStack.push((0,wn.isCompositeType)(i)?i:void 0);break}case Pn.Kind.FIELD:{let i=this.getParentType(),a,o;i&&(a=this._getFieldDef(n,i,t),a&&(o=a.type)),this._fieldDefStack.push(a),this._typeStack.push((0,wn.isOutputType)(o)?o:void 0);break}case Pn.Kind.DIRECTIVE:this._directive=n.getDirective(t.name.value);break;case Pn.Kind.OPERATION_DEFINITION:{let i=n.getRootType(t.operation);this._typeStack.push((0,wn.isObjectType)(i)?i:void 0);break}case Pn.Kind.INLINE_FRAGMENT:case Pn.Kind.FRAGMENT_DEFINITION:{let i=t.typeCondition,a=i?(0,MF.typeFromAST)(n,i):(0,wn.getNamedType)(this.getType());this._typeStack.push((0,wn.isOutputType)(a)?a:void 0);break}case Pn.Kind.VARIABLE_DEFINITION:{let i=(0,MF.typeFromAST)(n,t.type);this._inputTypeStack.push((0,wn.isInputType)(i)?i:void 0);break}case Pn.Kind.ARGUMENT:{var r;let i,a,o=(r=this.getDirective())!==null&&r!==void 0?r:this.getFieldDef();o&&(i=o.args.find(c=>c.name===t.name.value),i&&(a=i.type)),this._argument=i,this._defaultValueStack.push(i?i.defaultValue:void 0),this._inputTypeStack.push((0,wn.isInputType)(a)?a:void 0);break}case Pn.Kind.LIST:{let i=(0,wn.getNullableType)(this.getInputType()),a=(0,wn.isListType)(i)?i.ofType:i;this._defaultValueStack.push(void 0),this._inputTypeStack.push((0,wn.isInputType)(a)?a:void 0);break}case Pn.Kind.OBJECT_FIELD:{let i=(0,wn.getNamedType)(this.getInputType()),a,o;(0,wn.isInputObjectType)(i)&&(o=i.getFields()[t.name.value],o&&(a=o.type)),this._defaultValueStack.push(o?o.defaultValue:void 0),this._inputTypeStack.push((0,wn.isInputType)(a)?a:void 0);break}case Pn.Kind.ENUM:{let i=(0,wn.getNamedType)(this.getInputType()),a;(0,wn.isEnumType)(i)&&(a=i.getValue(t.value)),this._enumValue=a;break}default:}}leave(t){switch(t.kind){case Pn.Kind.SELECTION_SET:this._parentTypeStack.pop();break;case Pn.Kind.FIELD:this._fieldDefStack.pop(),this._typeStack.pop();break;case Pn.Kind.DIRECTIVE:this._directive=null;break;case Pn.Kind.OPERATION_DEFINITION:case Pn.Kind.INLINE_FRAGMENT:case Pn.Kind.FRAGMENT_DEFINITION:this._typeStack.pop();break;case Pn.Kind.VARIABLE_DEFINITION:this._inputTypeStack.pop();break;case Pn.Kind.ARGUMENT:this._argument=null,this._defaultValueStack.pop(),this._inputTypeStack.pop();break;case Pn.Kind.LIST:case Pn.Kind.OBJECT_FIELD:this._defaultValueStack.pop(),this._inputTypeStack.pop();break;case Pn.Kind.ENUM:this._enumValue=null;break;default:}}};Cd.TypeInfo=pI;function F3(e,t,n){let r=n.name.value;if(r===Gc.SchemaMetaFieldDef.name&&e.getQueryType()===t)return Gc.SchemaMetaFieldDef;if(r===Gc.TypeMetaFieldDef.name&&e.getQueryType()===t)return Gc.TypeMetaFieldDef;if(r===Gc.TypeNameMetaFieldDef.name&&(0,wn.isCompositeType)(t))return Gc.TypeNameMetaFieldDef;if((0,wn.isObjectType)(t)||(0,wn.isInterfaceType)(t))return t.getFields()[r]}function P3(e,t){return{enter(...n){let r=n[0];e.enter(r);let i=(0,kF.getEnterLeaveForKind)(t,r.kind).enter;if(i){let a=i.apply(t,n);return a!==void 0&&(e.leave(r),(0,R3.isNode)(a)&&e.enter(a)),a}},leave(...n){let r=n[0],i=(0,kF.getEnterLeaveForKind)(t,r.kind).leave,a;return i&&(a=i.apply(t,n)),e.leave(r),a}}}});var Mu=w(Fi=>{"use strict";f();N();m();Object.defineProperty(Fi,"__esModule",{value:!0});Fi.isConstValueNode=fI;Fi.isDefinitionNode=w3;Fi.isExecutableDefinitionNode=xF;Fi.isSelectionNode=L3;Fi.isTypeDefinitionNode=jF;Fi.isTypeExtensionNode=GF;Fi.isTypeNode=C3;Fi.isTypeSystemDefinitionNode=VF;Fi.isTypeSystemExtensionNode=KF;Fi.isValueNode=qF;var Pt=Rt();function w3(e){return xF(e)||VF(e)||KF(e)}function xF(e){return e.kind===Pt.Kind.OPERATION_DEFINITION||e.kind===Pt.Kind.FRAGMENT_DEFINITION}function L3(e){return e.kind===Pt.Kind.FIELD||e.kind===Pt.Kind.FRAGMENT_SPREAD||e.kind===Pt.Kind.INLINE_FRAGMENT}function qF(e){return e.kind===Pt.Kind.VARIABLE||e.kind===Pt.Kind.INT||e.kind===Pt.Kind.FLOAT||e.kind===Pt.Kind.STRING||e.kind===Pt.Kind.BOOLEAN||e.kind===Pt.Kind.NULL||e.kind===Pt.Kind.ENUM||e.kind===Pt.Kind.LIST||e.kind===Pt.Kind.OBJECT}function fI(e){return qF(e)&&(e.kind===Pt.Kind.LIST?e.values.some(fI):e.kind===Pt.Kind.OBJECT?e.fields.some(t=>fI(t.value)):e.kind!==Pt.Kind.VARIABLE)}function C3(e){return e.kind===Pt.Kind.NAMED_TYPE||e.kind===Pt.Kind.LIST_TYPE||e.kind===Pt.Kind.NON_NULL_TYPE}function VF(e){return e.kind===Pt.Kind.SCHEMA_DEFINITION||jF(e)||e.kind===Pt.Kind.DIRECTIVE_DEFINITION}function jF(e){return e.kind===Pt.Kind.SCALAR_TYPE_DEFINITION||e.kind===Pt.Kind.OBJECT_TYPE_DEFINITION||e.kind===Pt.Kind.INTERFACE_TYPE_DEFINITION||e.kind===Pt.Kind.UNION_TYPE_DEFINITION||e.kind===Pt.Kind.ENUM_TYPE_DEFINITION||e.kind===Pt.Kind.INPUT_OBJECT_TYPE_DEFINITION}function KF(e){return e.kind===Pt.Kind.SCHEMA_EXTENSION||GF(e)}function GF(e){return e.kind===Pt.Kind.SCALAR_TYPE_EXTENSION||e.kind===Pt.Kind.OBJECT_TYPE_EXTENSION||e.kind===Pt.Kind.INTERFACE_TYPE_EXTENSION||e.kind===Pt.Kind.UNION_TYPE_EXTENSION||e.kind===Pt.Kind.ENUM_TYPE_EXTENSION||e.kind===Pt.Kind.INPUT_OBJECT_TYPE_EXTENSION}});var NI=w(mI=>{"use strict";f();N();m();Object.defineProperty(mI,"__esModule",{value:!0});mI.ExecutableDefinitionsRule=k3;var B3=He(),$F=Rt(),U3=Mu();function k3(e){return{Document(t){for(let n of t.definitions)if(!(0,U3.isExecutableDefinitionNode)(n)){let r=n.kind===$F.Kind.SCHEMA_DEFINITION||n.kind===$F.Kind.SCHEMA_EXTENSION?"schema":'"'+n.name.value+'"';e.reportError(new B3.GraphQLError(`The ${r} definition is not executable.`,{nodes:n}))}return!1}}}});var EI=w(TI=>{"use strict";f();N();m();Object.defineProperty(TI,"__esModule",{value:!0});TI.FieldsOnCorrectTypeRule=V3;var QF=Mo(),M3=Ed(),x3=qo(),q3=He(),Bd=Ft();function V3(e){return{Field(t){let n=e.getParentType();if(n&&!e.getFieldDef()){let i=e.getSchema(),a=t.name.value,o=(0,QF.didYouMean)("to use an inline fragment on",j3(i,n,a));o===""&&(o=(0,QF.didYouMean)(K3(n,a))),e.reportError(new q3.GraphQLError(`Cannot query field "${a}" on type "${n.name}".`+o,{nodes:t}))}}}}function j3(e,t,n){if(!(0,Bd.isAbstractType)(t))return[];let r=new Set,i=Object.create(null);for(let o of e.getPossibleTypes(t))if(o.getFields()[n]){r.add(o),i[o.name]=1;for(let c of o.getInterfaces()){var a;c.getFields()[n]&&(r.add(c),i[c.name]=((a=i[c.name])!==null&&a!==void 0?a:0)+1)}}return[...r].sort((o,c)=>{let l=i[c.name]-i[o.name];return l!==0?l:(0,Bd.isInterfaceType)(o)&&e.isSubType(o,c)?-1:(0,Bd.isInterfaceType)(c)&&e.isSubType(c,o)?1:(0,M3.naturalCompare)(o.name,c.name)}).map(o=>o.name)}function K3(e,t){if((0,Bd.isObjectType)(e)||(0,Bd.isInterfaceType)(e)){let n=Object.keys(e.getFields());return(0,x3.suggestionList)(t,n)}return[]}});var yI=w(hI=>{"use strict";f();N();m();Object.defineProperty(hI,"__esModule",{value:!0});hI.FragmentsOnCompositeTypesRule=G3;var YF=He(),JF=li(),HF=Ft(),zF=Ra();function G3(e){return{InlineFragment(t){let n=t.typeCondition;if(n){let r=(0,zF.typeFromAST)(e.getSchema(),n);if(r&&!(0,HF.isCompositeType)(r)){let i=(0,JF.print)(n);e.reportError(new YF.GraphQLError(`Fragment cannot condition on non composite type "${i}".`,{nodes:n}))}}},FragmentDefinition(t){let n=(0,zF.typeFromAST)(e.getSchema(),t.typeCondition);if(n&&!(0,HF.isCompositeType)(n)){let r=(0,JF.print)(t.typeCondition);e.reportError(new YF.GraphQLError(`Fragment "${t.name.value}" cannot condition on non composite type "${r}".`,{nodes:t.typeCondition}))}}}}});var II=w(Lm=>{"use strict";f();N();m();Object.defineProperty(Lm,"__esModule",{value:!0});Lm.KnownArgumentNamesOnDirectivesRule=eP;Lm.KnownArgumentNamesRule=Y3;var WF=Mo(),XF=qo(),ZF=He(),$3=Rt(),Q3=$r();function Y3(e){return Q(M({},eP(e)),{Argument(t){let n=e.getArgument(),r=e.getFieldDef(),i=e.getParentType();if(!n&&r&&i){let a=t.name.value,o=r.args.map(l=>l.name),c=(0,XF.suggestionList)(a,o);e.reportError(new ZF.GraphQLError(`Unknown argument "${a}" on field "${i.name}.${r.name}".`+(0,WF.didYouMean)(c),{nodes:t}))}}})}function eP(e){let t=Object.create(null),n=e.getSchema(),r=n?n.getDirectives():Q3.specifiedDirectives;for(let o of r)t[o.name]=o.args.map(c=>c.name);let i=e.getDocument().definitions;for(let o of i)if(o.kind===$3.Kind.DIRECTIVE_DEFINITION){var a;let c=(a=o.arguments)!==null&&a!==void 0?a:[];t[o.name.value]=c.map(l=>l.name.value)}return{Directive(o){let c=o.name.value,l=t[c];if(o.arguments&&l)for(let p of o.arguments){let T=p.name.value;if(!l.includes(T)){let y=(0,XF.suggestionList)(T,l);e.reportError(new ZF.GraphQLError(`Unknown argument "${T}" on directive "@${c}".`+(0,WF.didYouMean)(y),{nodes:p}))}}return!1}}}});var SI=w(vI=>{"use strict";f();N();m();Object.defineProperty(vI,"__esModule",{value:!0});vI.KnownDirectivesRule=z3;var J3=Yt(),gI=Ir(),tP=He(),_I=Oa(),Zn=kc(),Tn=Rt(),H3=$r();function z3(e){let t=Object.create(null),n=e.getSchema(),r=n?n.getDirectives():H3.specifiedDirectives;for(let a of r)t[a.name]=a.locations;let i=e.getDocument().definitions;for(let a of i)a.kind===Tn.Kind.DIRECTIVE_DEFINITION&&(t[a.name.value]=a.locations.map(o=>o.value));return{Directive(a,o,c,l,p){let T=a.name.value,y=t[T];if(!y){e.reportError(new tP.GraphQLError(`Unknown directive "@${T}".`,{nodes:a}));return}let g=W3(p);g&&!y.includes(g)&&e.reportError(new tP.GraphQLError(`Directive "@${T}" may not be used on ${g}.`,{nodes:a}))}}}function W3(e){let t=e[e.length-1];switch("kind"in t||(0,gI.invariant)(!1),t.kind){case Tn.Kind.OPERATION_DEFINITION:return X3(t.operation);case Tn.Kind.FIELD:return Zn.DirectiveLocation.FIELD;case Tn.Kind.FRAGMENT_SPREAD:return Zn.DirectiveLocation.FRAGMENT_SPREAD;case Tn.Kind.INLINE_FRAGMENT:return Zn.DirectiveLocation.INLINE_FRAGMENT;case Tn.Kind.FRAGMENT_DEFINITION:return Zn.DirectiveLocation.FRAGMENT_DEFINITION;case Tn.Kind.VARIABLE_DEFINITION:return Zn.DirectiveLocation.VARIABLE_DEFINITION;case Tn.Kind.SCHEMA_DEFINITION:case Tn.Kind.SCHEMA_EXTENSION:return Zn.DirectiveLocation.SCHEMA;case Tn.Kind.SCALAR_TYPE_DEFINITION:case Tn.Kind.SCALAR_TYPE_EXTENSION:return Zn.DirectiveLocation.SCALAR;case Tn.Kind.OBJECT_TYPE_DEFINITION:case Tn.Kind.OBJECT_TYPE_EXTENSION:return Zn.DirectiveLocation.OBJECT;case Tn.Kind.FIELD_DEFINITION:return Zn.DirectiveLocation.FIELD_DEFINITION;case Tn.Kind.INTERFACE_TYPE_DEFINITION:case Tn.Kind.INTERFACE_TYPE_EXTENSION:return Zn.DirectiveLocation.INTERFACE;case Tn.Kind.UNION_TYPE_DEFINITION:case Tn.Kind.UNION_TYPE_EXTENSION:return Zn.DirectiveLocation.UNION;case Tn.Kind.ENUM_TYPE_DEFINITION:case Tn.Kind.ENUM_TYPE_EXTENSION:return Zn.DirectiveLocation.ENUM;case Tn.Kind.ENUM_VALUE_DEFINITION:return Zn.DirectiveLocation.ENUM_VALUE;case Tn.Kind.INPUT_OBJECT_TYPE_DEFINITION:case Tn.Kind.INPUT_OBJECT_TYPE_EXTENSION:return Zn.DirectiveLocation.INPUT_OBJECT;case Tn.Kind.INPUT_VALUE_DEFINITION:{let n=e[e.length-3];return"kind"in n||(0,gI.invariant)(!1),n.kind===Tn.Kind.INPUT_OBJECT_TYPE_DEFINITION?Zn.DirectiveLocation.INPUT_FIELD_DEFINITION:Zn.DirectiveLocation.ARGUMENT_DEFINITION}default:(0,gI.invariant)(!1,"Unexpected kind: "+(0,J3.inspect)(t.kind))}}function X3(e){switch(e){case _I.OperationTypeNode.QUERY:return Zn.DirectiveLocation.QUERY;case _I.OperationTypeNode.MUTATION:return Zn.DirectiveLocation.MUTATION;case _I.OperationTypeNode.SUBSCRIPTION:return Zn.DirectiveLocation.SUBSCRIPTION}}});var DI=w(OI=>{"use strict";f();N();m();Object.defineProperty(OI,"__esModule",{value:!0});OI.KnownFragmentNamesRule=e6;var Z3=He();function e6(e){return{FragmentSpread(t){let n=t.name.value;e.getFragment(n)||e.reportError(new Z3.GraphQLError(`Unknown fragment "${n}".`,{nodes:t.name}))}}}});var RI=w(AI=>{"use strict";f();N();m();Object.defineProperty(AI,"__esModule",{value:!0});AI.KnownTypeNamesRule=s6;var t6=Mo(),n6=qo(),r6=He(),bI=Mu(),i6=Ri(),a6=Aa();function s6(e){let t=e.getSchema(),n=t?t.getTypeMap():Object.create(null),r=Object.create(null);for(let a of e.getDocument().definitions)(0,bI.isTypeDefinitionNode)(a)&&(r[a.name.value]=!0);let i=[...Object.keys(n),...Object.keys(r)];return{NamedType(a,o,c,l,p){let T=a.name.value;if(!n[T]&&!r[T]){var y;let g=(y=p[2])!==null&&y!==void 0?y:c,_=g!=null&&o6(g);if(_&&nP.includes(T))return;let F=(0,n6.suggestionList)(T,_?nP.concat(i):i);e.reportError(new r6.GraphQLError(`Unknown type "${T}".`+(0,t6.didYouMean)(F),{nodes:a}))}}}}var nP=[...a6.specifiedScalarTypes,...i6.introspectionTypes].map(e=>e.name);function o6(e){return"kind"in e&&((0,bI.isTypeSystemDefinitionNode)(e)||(0,bI.isTypeSystemExtensionNode)(e))}});var PI=w(FI=>{"use strict";f();N();m();Object.defineProperty(FI,"__esModule",{value:!0});FI.LoneAnonymousOperationRule=l6;var u6=He(),c6=Rt();function l6(e){let t=0;return{Document(n){t=n.definitions.filter(r=>r.kind===c6.Kind.OPERATION_DEFINITION).length},OperationDefinition(n){!n.name&&t>1&&e.reportError(new u6.GraphQLError("This anonymous operation must be the only defined operation.",{nodes:n}))}}}});var LI=w(wI=>{"use strict";f();N();m();Object.defineProperty(wI,"__esModule",{value:!0});wI.LoneSchemaDefinitionRule=d6;var rP=He();function d6(e){var t,n,r;let i=e.getSchema(),a=(t=(n=(r=i==null?void 0:i.astNode)!==null&&r!==void 0?r:i==null?void 0:i.getQueryType())!==null&&n!==void 0?n:i==null?void 0:i.getMutationType())!==null&&t!==void 0?t:i==null?void 0:i.getSubscriptionType(),o=0;return{SchemaDefinition(c){if(a){e.reportError(new rP.GraphQLError("Cannot define a new schema within a schema extension.",{nodes:c}));return}o>0&&e.reportError(new rP.GraphQLError("Must provide only one schema definition.",{nodes:c})),++o}}}});var BI=w(CI=>{"use strict";f();N();m();Object.defineProperty(CI,"__esModule",{value:!0});CI.MaxIntrospectionDepthRule=m6;var p6=He(),iP=Rt(),f6=3;function m6(e){function t(n,r=Object.create(null),i=0){if(n.kind===iP.Kind.FRAGMENT_SPREAD){let a=n.name.value;if(r[a]===!0)return!1;let o=e.getFragment(a);if(!o)return!1;try{return r[a]=!0,t(o,r,i)}finally{r[a]=void 0}}if(n.kind===iP.Kind.FIELD&&(n.name.value==="fields"||n.name.value==="interfaces"||n.name.value==="possibleTypes"||n.name.value==="inputFields")&&(i++,i>=f6))return!0;if("selectionSet"in n&&n.selectionSet){for(let a of n.selectionSet.selections)if(t(a,r,i))return!0}return!1}return{Field(n){if((n.name.value==="__schema"||n.name.value==="__type")&&t(n))return e.reportError(new p6.GraphQLError("Maximum introspection depth exceeded",{nodes:[n]})),!1}}}});var kI=w(UI=>{"use strict";f();N();m();Object.defineProperty(UI,"__esModule",{value:!0});UI.NoFragmentCyclesRule=T6;var N6=He();function T6(e){let t=Object.create(null),n=[],r=Object.create(null);return{OperationDefinition:()=>!1,FragmentDefinition(a){return i(a),!1}};function i(a){if(t[a.name.value])return;let o=a.name.value;t[o]=!0;let c=e.getFragmentSpreads(a.selectionSet);if(c.length!==0){r[o]=n.length;for(let l of c){let p=l.name.value,T=r[p];if(n.push(l),T===void 0){let y=e.getFragment(p);y&&i(y)}else{let y=n.slice(T),g=y.slice(0,-1).map(_=>'"'+_.name.value+'"').join(", ");e.reportError(new N6.GraphQLError(`Cannot spread fragment "${p}" within itself`+(g!==""?` via ${g}.`:"."),{nodes:y}))}n.pop()}r[o]=void 0}}}});var xI=w(MI=>{"use strict";f();N();m();Object.defineProperty(MI,"__esModule",{value:!0});MI.NoUndefinedVariablesRule=h6;var E6=He();function h6(e){let t=Object.create(null);return{OperationDefinition:{enter(){t=Object.create(null)},leave(n){let r=e.getRecursiveVariableUsages(n);for(let{node:i}of r){let a=i.name.value;t[a]!==!0&&e.reportError(new E6.GraphQLError(n.name?`Variable "$${a}" is not defined by operation "${n.name.value}".`:`Variable "$${a}" is not defined.`,{nodes:[i,n]}))}}},VariableDefinition(n){t[n.variable.name.value]=!0}}}});var VI=w(qI=>{"use strict";f();N();m();Object.defineProperty(qI,"__esModule",{value:!0});qI.NoUnusedFragmentsRule=I6;var y6=He();function I6(e){let t=[],n=[];return{OperationDefinition(r){return t.push(r),!1},FragmentDefinition(r){return n.push(r),!1},Document:{leave(){let r=Object.create(null);for(let i of t)for(let a of e.getRecursivelyReferencedFragments(i))r[a.name.value]=!0;for(let i of n){let a=i.name.value;r[a]!==!0&&e.reportError(new y6.GraphQLError(`Fragment "${a}" is never used.`,{nodes:i}))}}}}}});var KI=w(jI=>{"use strict";f();N();m();Object.defineProperty(jI,"__esModule",{value:!0});jI.NoUnusedVariablesRule=_6;var g6=He();function _6(e){let t=[];return{OperationDefinition:{enter(){t=[]},leave(n){let r=Object.create(null),i=e.getRecursiveVariableUsages(n);for(let{node:a}of i)r[a.name.value]=!0;for(let a of t){let o=a.variable.name.value;r[o]!==!0&&e.reportError(new g6.GraphQLError(n.name?`Variable "$${o}" is never used in operation "${n.name.value}".`:`Variable "$${o}" is never used.`,{nodes:a}))}}},VariableDefinition(n){t.push(n)}}}});var QI=w($I=>{"use strict";f();N();m();Object.defineProperty($I,"__esModule",{value:!0});$I.sortValueNode=GI;var v6=Ed(),ps=Rt();function GI(e){switch(e.kind){case ps.Kind.OBJECT:return Q(M({},e),{fields:S6(e.fields)});case ps.Kind.LIST:return Q(M({},e),{values:e.values.map(GI)});case ps.Kind.INT:case ps.Kind.FLOAT:case ps.Kind.STRING:case ps.Kind.BOOLEAN:case ps.Kind.NULL:case ps.Kind.ENUM:case ps.Kind.VARIABLE:return e}}function S6(e){return e.map(t=>Q(M({},t),{value:GI(t.value)})).sort((t,n)=>(0,v6.naturalCompare)(t.name.value,n.name.value))}});var ZI=w(XI=>{"use strict";f();N();m();Object.defineProperty(XI,"__esModule",{value:!0});XI.OverlappingFieldsCanBeMergedRule=A6;var aP=Yt(),O6=He(),YI=Rt(),D6=li(),Qr=Ft(),b6=QI(),oP=Ra();function uP(e){return Array.isArray(e)?e.map(([t,n])=>`subfields "${t}" conflict because `+uP(n)).join(" and "):e}function A6(e){let t=new zI,n=new Map;return{SelectionSet(r){let i=R6(e,n,t,e.getParentType(),r);for(let[[a,o],c,l]of i){let p=uP(o);e.reportError(new O6.GraphQLError(`Fields "${a}" conflict because ${p}. Use different aliases on the fields to fetch both if this was intentional.`,{nodes:c.concat(l)}))}}}}function R6(e,t,n,r,i){let a=[],[o,c]=Um(e,t,r,i);if(P6(e,a,t,n,o),c.length!==0)for(let l=0;l1)for(let c=0;c[a.value,o]));return n.every(a=>{let o=a.value,c=i.get(a.name.value);return c===void 0?!1:sP(o)===sP(c)})}function sP(e){return(0,D6.print)((0,b6.sortValueNode)(e))}function JI(e,t){return(0,Qr.isListType)(e)?(0,Qr.isListType)(t)?JI(e.ofType,t.ofType):!0:(0,Qr.isListType)(t)?!0:(0,Qr.isNonNullType)(e)?(0,Qr.isNonNullType)(t)?JI(e.ofType,t.ofType):!0:(0,Qr.isNonNullType)(t)?!0:(0,Qr.isLeafType)(e)||(0,Qr.isLeafType)(t)?e!==t:!1}function Um(e,t,n,r){let i=t.get(r);if(i)return i;let a=Object.create(null),o=Object.create(null);lP(e,n,r,a,o);let c=[a,Object.keys(o)];return t.set(r,c),c}function HI(e,t,n){let r=t.get(n.selectionSet);if(r)return r;let i=(0,oP.typeFromAST)(e.getSchema(),n.typeCondition);return Um(e,t,i,n.selectionSet)}function lP(e,t,n,r,i){for(let a of n.selections)switch(a.kind){case YI.Kind.FIELD:{let o=a.name.value,c;((0,Qr.isObjectType)(t)||(0,Qr.isInterfaceType)(t))&&(c=t.getFields()[o]);let l=a.alias?a.alias.value:o;r[l]||(r[l]=[]),r[l].push([t,a,c]);break}case YI.Kind.FRAGMENT_SPREAD:i[a.name.value]=!0;break;case YI.Kind.INLINE_FRAGMENT:{let o=a.typeCondition,c=o?(0,oP.typeFromAST)(e.getSchema(),o):t;lP(e,c,a.selectionSet,r,i);break}}}function L6(e,t,n,r){if(e.length>0)return[[t,e.map(([i])=>i)],[n,...e.map(([,i])=>i).flat()],[r,...e.map(([,,i])=>i).flat()]]}var zI=class{constructor(){this._data=new Map}has(t,n,r){var i;let[a,o]=t{"use strict";f();N();m();Object.defineProperty(tg,"__esModule",{value:!0});tg.PossibleFragmentSpreadsRule=B6;var km=Yt(),dP=He(),eg=Ft(),pP=vd(),C6=Ra();function B6(e){return{InlineFragment(t){let n=e.getType(),r=e.getParentType();if((0,eg.isCompositeType)(n)&&(0,eg.isCompositeType)(r)&&!(0,pP.doTypesOverlap)(e.getSchema(),n,r)){let i=(0,km.inspect)(r),a=(0,km.inspect)(n);e.reportError(new dP.GraphQLError(`Fragment cannot be spread here as objects of type "${i}" can never be of type "${a}".`,{nodes:t}))}},FragmentSpread(t){let n=t.name.value,r=U6(e,n),i=e.getParentType();if(r&&i&&!(0,pP.doTypesOverlap)(e.getSchema(),r,i)){let a=(0,km.inspect)(i),o=(0,km.inspect)(r);e.reportError(new dP.GraphQLError(`Fragment "${n}" cannot be spread here as objects of type "${a}" can never be of type "${o}".`,{nodes:t}))}}}}function U6(e,t){let n=e.getFragment(t);if(n){let r=(0,C6.typeFromAST)(e.getSchema(),n.typeCondition);if((0,eg.isCompositeType)(r))return r}}});var ig=w(rg=>{"use strict";f();N();m();Object.defineProperty(rg,"__esModule",{value:!0});rg.PossibleTypeExtensionsRule=q6;var k6=Mo(),mP=Yt(),NP=Ir(),M6=qo(),fP=He(),yn=Rt(),x6=Mu(),$c=Ft();function q6(e){let t=e.getSchema(),n=Object.create(null);for(let i of e.getDocument().definitions)(0,x6.isTypeDefinitionNode)(i)&&(n[i.name.value]=i);return{ScalarTypeExtension:r,ObjectTypeExtension:r,InterfaceTypeExtension:r,UnionTypeExtension:r,EnumTypeExtension:r,InputObjectTypeExtension:r};function r(i){let a=i.name.value,o=n[a],c=t==null?void 0:t.getType(a),l;if(o?l=V6[o.kind]:c&&(l=j6(c)),l){if(l!==i.kind){let p=K6(i.kind);e.reportError(new fP.GraphQLError(`Cannot extend non-${p} type "${a}".`,{nodes:o?[o,i]:i}))}}else{let p=Object.keys(M(M({},n),t==null?void 0:t.getTypeMap())),T=(0,M6.suggestionList)(a,p);e.reportError(new fP.GraphQLError(`Cannot extend type "${a}" because it is not defined.`+(0,k6.didYouMean)(T),{nodes:i.name}))}}}var V6={[yn.Kind.SCALAR_TYPE_DEFINITION]:yn.Kind.SCALAR_TYPE_EXTENSION,[yn.Kind.OBJECT_TYPE_DEFINITION]:yn.Kind.OBJECT_TYPE_EXTENSION,[yn.Kind.INTERFACE_TYPE_DEFINITION]:yn.Kind.INTERFACE_TYPE_EXTENSION,[yn.Kind.UNION_TYPE_DEFINITION]:yn.Kind.UNION_TYPE_EXTENSION,[yn.Kind.ENUM_TYPE_DEFINITION]:yn.Kind.ENUM_TYPE_EXTENSION,[yn.Kind.INPUT_OBJECT_TYPE_DEFINITION]:yn.Kind.INPUT_OBJECT_TYPE_EXTENSION};function j6(e){if((0,$c.isScalarType)(e))return yn.Kind.SCALAR_TYPE_EXTENSION;if((0,$c.isObjectType)(e))return yn.Kind.OBJECT_TYPE_EXTENSION;if((0,$c.isInterfaceType)(e))return yn.Kind.INTERFACE_TYPE_EXTENSION;if((0,$c.isUnionType)(e))return yn.Kind.UNION_TYPE_EXTENSION;if((0,$c.isEnumType)(e))return yn.Kind.ENUM_TYPE_EXTENSION;if((0,$c.isInputObjectType)(e))return yn.Kind.INPUT_OBJECT_TYPE_EXTENSION;(0,NP.invariant)(!1,"Unexpected type: "+(0,mP.inspect)(e))}function K6(e){switch(e){case yn.Kind.SCALAR_TYPE_EXTENSION:return"scalar";case yn.Kind.OBJECT_TYPE_EXTENSION:return"object";case yn.Kind.INTERFACE_TYPE_EXTENSION:return"interface";case yn.Kind.UNION_TYPE_EXTENSION:return"union";case yn.Kind.ENUM_TYPE_EXTENSION:return"enum";case yn.Kind.INPUT_OBJECT_TYPE_EXTENSION:return"input object";default:(0,NP.invariant)(!1,"Unexpected kind: "+(0,mP.inspect)(e))}}});var sg=w(Mm=>{"use strict";f();N();m();Object.defineProperty(Mm,"__esModule",{value:!0});Mm.ProvidedRequiredArgumentsOnDirectivesRule=IP;Mm.ProvidedRequiredArgumentsRule=Q6;var EP=Yt(),TP=xo(),hP=He(),yP=Rt(),G6=li(),ag=Ft(),$6=$r();function Q6(e){return Q(M({},IP(e)),{Field:{leave(t){var n;let r=e.getFieldDef();if(!r)return!1;let i=new Set((n=t.arguments)===null||n===void 0?void 0:n.map(a=>a.name.value));for(let a of r.args)if(!i.has(a.name)&&(0,ag.isRequiredArgument)(a)){let o=(0,EP.inspect)(a.type);e.reportError(new hP.GraphQLError(`Field "${r.name}" argument "${a.name}" of type "${o}" is required, but it was not provided.`,{nodes:t}))}}}})}function IP(e){var t;let n=Object.create(null),r=e.getSchema(),i=(t=r==null?void 0:r.getDirectives())!==null&&t!==void 0?t:$6.specifiedDirectives;for(let c of i)n[c.name]=(0,TP.keyMap)(c.args.filter(ag.isRequiredArgument),l=>l.name);let a=e.getDocument().definitions;for(let c of a)if(c.kind===yP.Kind.DIRECTIVE_DEFINITION){var o;let l=(o=c.arguments)!==null&&o!==void 0?o:[];n[c.name.value]=(0,TP.keyMap)(l.filter(Y6),p=>p.name.value)}return{Directive:{leave(c){let l=c.name.value,p=n[l];if(p){var T;let y=(T=c.arguments)!==null&&T!==void 0?T:[],g=new Set(y.map(_=>_.name.value));for(let[_,F]of Object.entries(p))if(!g.has(_)){let U=(0,ag.isType)(F.type)?(0,EP.inspect)(F.type):(0,G6.print)(F.type);e.reportError(new hP.GraphQLError(`Directive "@${l}" argument "${_}" of type "${U}" is required, but it was not provided.`,{nodes:c}))}}}}}}function Y6(e){return e.type.kind===yP.Kind.NON_NULL_TYPE&&e.defaultValue==null}});var ug=w(og=>{"use strict";f();N();m();Object.defineProperty(og,"__esModule",{value:!0});og.ScalarLeafsRule=J6;var gP=Yt(),_P=He(),vP=Ft();function J6(e){return{Field(t){let n=e.getType(),r=t.selectionSet;if(n){if((0,vP.isLeafType)((0,vP.getNamedType)(n))){if(r){let i=t.name.value,a=(0,gP.inspect)(n);e.reportError(new _P.GraphQLError(`Field "${i}" must not have a selection since type "${a}" has no subfields.`,{nodes:r}))}}else if(!r){let i=t.name.value,a=(0,gP.inspect)(n);e.reportError(new _P.GraphQLError(`Field "${i}" of type "${a}" must have a selection of subfields. Did you mean "${i} { ... }"?`,{nodes:t}))}}}}}});var lg=w(cg=>{"use strict";f();N();m();Object.defineProperty(cg,"__esModule",{value:!0});cg.printPathArray=H6;function H6(e){return e.map(t=>typeof t=="number"?"["+t.toString()+"]":"."+t).join("")}});var Ud=w(xm=>{"use strict";f();N();m();Object.defineProperty(xm,"__esModule",{value:!0});xm.addPath=z6;xm.pathToArray=W6;function z6(e,t,n){return{prev:e,key:t,typename:n}}function W6(e){let t=[],n=e;for(;n;)t.push(n.key),n=n.prev;return t.reverse()}});var pg=w(dg=>{"use strict";f();N();m();Object.defineProperty(dg,"__esModule",{value:!0});dg.coerceInputValue=iz;var X6=Mo(),qm=Yt(),Z6=Ir(),ez=Am(),tz=Sa(),na=Ud(),nz=lg(),rz=qo(),fs=He(),kd=Ft();function iz(e,t,n=az){return Md(e,t,n,void 0)}function az(e,t,n){let r="Invalid value "+(0,qm.inspect)(t);throw e.length>0&&(r+=` at "value${(0,nz.printPathArray)(e)}"`),n.message=r+": "+n.message,n}function Md(e,t,n,r){if((0,kd.isNonNullType)(t)){if(e!=null)return Md(e,t.ofType,n,r);n((0,na.pathToArray)(r),e,new fs.GraphQLError(`Expected non-nullable type "${(0,qm.inspect)(t)}" not to be null.`));return}if(e==null)return null;if((0,kd.isListType)(t)){let i=t.ofType;return(0,ez.isIterableObject)(e)?Array.from(e,(a,o)=>{let c=(0,na.addPath)(r,o,void 0);return Md(a,i,n,c)}):[Md(e,i,n,r)]}if((0,kd.isInputObjectType)(t)){if(!(0,tz.isObjectLike)(e)){n((0,na.pathToArray)(r),e,new fs.GraphQLError(`Expected type "${t.name}" to be an object.`));return}let i={},a=t.getFields();for(let o of Object.values(a)){let c=e[o.name];if(c===void 0){if(o.defaultValue!==void 0)i[o.name]=o.defaultValue;else if((0,kd.isNonNullType)(o.type)){let l=(0,qm.inspect)(o.type);n((0,na.pathToArray)(r),e,new fs.GraphQLError(`Field "${o.name}" of required type "${l}" was not provided.`))}continue}i[o.name]=Md(c,o.type,n,(0,na.addPath)(r,o.name,t.name))}for(let o of Object.keys(e))if(!a[o]){let c=(0,rz.suggestionList)(o,Object.keys(t.getFields()));n((0,na.pathToArray)(r),e,new fs.GraphQLError(`Field "${o}" is not defined by type "${t.name}".`+(0,X6.didYouMean)(c)))}if(t.isOneOf){let o=Object.keys(i);o.length!==1&&n((0,na.pathToArray)(r),e,new fs.GraphQLError(`Exactly one key must be specified for OneOf type "${t.name}".`));let c=o[0],l=i[c];l===null&&n((0,na.pathToArray)(r).concat(c),l,new fs.GraphQLError(`Field "${c}" must be non-null.`))}return i}if((0,kd.isLeafType)(t)){let i;try{i=t.parseValue(e)}catch(a){a instanceof fs.GraphQLError?n((0,na.pathToArray)(r),e,a):n((0,na.pathToArray)(r),e,new fs.GraphQLError(`Expected type "${t.name}". `+a.message,{originalError:a}));return}return i===void 0&&n((0,na.pathToArray)(r),e,new fs.GraphQLError(`Expected type "${t.name}".`)),i}(0,Z6.invariant)(!1,"Unexpected input type: "+(0,qm.inspect)(t))}});var qd=w(fg=>{"use strict";f();N();m();Object.defineProperty(fg,"__esModule",{value:!0});fg.valueFromAST=xd;var sz=Yt(),oz=Ir(),uz=xo(),Qc=Rt(),xu=Ft();function xd(e,t,n){if(e){if(e.kind===Qc.Kind.VARIABLE){let r=e.name.value;if(n==null||n[r]===void 0)return;let i=n[r];return i===null&&(0,xu.isNonNullType)(t)?void 0:i}if((0,xu.isNonNullType)(t))return e.kind===Qc.Kind.NULL?void 0:xd(e,t.ofType,n);if(e.kind===Qc.Kind.NULL)return null;if((0,xu.isListType)(t)){let r=t.ofType;if(e.kind===Qc.Kind.LIST){let a=[];for(let o of e.values)if(SP(o,n)){if((0,xu.isNonNullType)(r))return;a.push(null)}else{let c=xd(o,r,n);if(c===void 0)return;a.push(c)}return a}let i=xd(e,r,n);return i===void 0?void 0:[i]}if((0,xu.isInputObjectType)(t)){if(e.kind!==Qc.Kind.OBJECT)return;let r=Object.create(null),i=(0,uz.keyMap)(e.fields,a=>a.name.value);for(let a of Object.values(t.getFields())){let o=i[a.name];if(!o||SP(o.value,n)){if(a.defaultValue!==void 0)r[a.name]=a.defaultValue;else if((0,xu.isNonNullType)(a.type))return;continue}let c=xd(o.value,a.type,n);if(c===void 0)return;r[a.name]=c}if(t.isOneOf){let a=Object.keys(r);if(a.length!==1||r[a[0]]===null)return}return r}if((0,xu.isLeafType)(t)){let r;try{r=t.parseLiteral(e,n)}catch(i){return}return r===void 0?void 0:r}(0,oz.invariant)(!1,"Unexpected input type: "+(0,sz.inspect)(t))}}function SP(e,t){return e.kind===Qc.Kind.VARIABLE&&(t==null||t[e.name.value]===void 0)}});var Hc=w(Vd=>{"use strict";f();N();m();Object.defineProperty(Vd,"__esModule",{value:!0});Vd.getArgumentValues=AP;Vd.getDirectiveValues=Nz;Vd.getVariableValues=fz;var Yc=Yt(),cz=xo(),lz=lg(),ms=He(),OP=Rt(),DP=li(),Jc=Ft(),dz=pg(),pz=Ra(),bP=qd();function fz(e,t,n,r){let i=[],a=r==null?void 0:r.maxErrors;try{let o=mz(e,t,n,c=>{if(a!=null&&i.length>=a)throw new ms.GraphQLError("Too many errors processing variables, error limit reached. Execution aborted.");i.push(c)});if(i.length===0)return{coerced:o}}catch(o){i.push(o)}return{errors:i}}function mz(e,t,n,r){let i={};for(let a of t){let o=a.variable.name.value,c=(0,pz.typeFromAST)(e,a.type);if(!(0,Jc.isInputType)(c)){let p=(0,DP.print)(a.type);r(new ms.GraphQLError(`Variable "$${o}" expected value of type "${p}" which cannot be used as an input type.`,{nodes:a.type}));continue}if(!RP(n,o)){if(a.defaultValue)i[o]=(0,bP.valueFromAST)(a.defaultValue,c);else if((0,Jc.isNonNullType)(c)){let p=(0,Yc.inspect)(c);r(new ms.GraphQLError(`Variable "$${o}" of required type "${p}" was not provided.`,{nodes:a}))}continue}let l=n[o];if(l===null&&(0,Jc.isNonNullType)(c)){let p=(0,Yc.inspect)(c);r(new ms.GraphQLError(`Variable "$${o}" of non-null type "${p}" must not be null.`,{nodes:a}));continue}i[o]=(0,dz.coerceInputValue)(l,c,(p,T,y)=>{let g=`Variable "$${o}" got invalid value `+(0,Yc.inspect)(T);p.length>0&&(g+=` at "${o}${(0,lz.printPathArray)(p)}"`),r(new ms.GraphQLError(g+"; "+y.message,{nodes:a,originalError:y}))})}return i}function AP(e,t,n){var r;let i={},a=(r=t.arguments)!==null&&r!==void 0?r:[],o=(0,cz.keyMap)(a,c=>c.name.value);for(let c of e.args){let l=c.name,p=c.type,T=o[l];if(!T){if(c.defaultValue!==void 0)i[l]=c.defaultValue;else if((0,Jc.isNonNullType)(p))throw new ms.GraphQLError(`Argument "${l}" of required type "${(0,Yc.inspect)(p)}" was not provided.`,{nodes:t});continue}let y=T.value,g=y.kind===OP.Kind.NULL;if(y.kind===OP.Kind.VARIABLE){let F=y.name.value;if(n==null||!RP(n,F)){if(c.defaultValue!==void 0)i[l]=c.defaultValue;else if((0,Jc.isNonNullType)(p))throw new ms.GraphQLError(`Argument "${l}" of required type "${(0,Yc.inspect)(p)}" was provided the variable "$${F}" which was not provided a runtime value.`,{nodes:y});continue}g=n[F]==null}if(g&&(0,Jc.isNonNullType)(p))throw new ms.GraphQLError(`Argument "${l}" of non-null type "${(0,Yc.inspect)(p)}" must not be null.`,{nodes:y});let _=(0,bP.valueFromAST)(y,p,n);if(_===void 0)throw new ms.GraphQLError(`Argument "${l}" has invalid value ${(0,DP.print)(y)}.`,{nodes:y});i[l]=_}return i}function Nz(e,t,n){var r;let i=(r=t.directives)===null||r===void 0?void 0:r.find(a=>a.name.value===e.name);if(i)return AP(e,i,n)}function RP(e,t){return Object.prototype.hasOwnProperty.call(e,t)}});var Km=w(jm=>{"use strict";f();N();m();Object.defineProperty(jm,"__esModule",{value:!0});jm.collectFields=hz;jm.collectSubfields=yz;var mg=Rt(),Tz=Ft(),FP=$r(),Ez=Ra(),PP=Hc();function hz(e,t,n,r,i){let a=new Map;return Vm(e,t,n,r,i,a,new Set),a}function yz(e,t,n,r,i){let a=new Map,o=new Set;for(let c of i)c.selectionSet&&Vm(e,t,n,r,c.selectionSet,a,o);return a}function Vm(e,t,n,r,i,a,o){for(let c of i.selections)switch(c.kind){case mg.Kind.FIELD:{if(!Ng(n,c))continue;let l=Iz(c),p=a.get(l);p!==void 0?p.push(c):a.set(l,[c]);break}case mg.Kind.INLINE_FRAGMENT:{if(!Ng(n,c)||!wP(e,c,r))continue;Vm(e,t,n,r,c.selectionSet,a,o);break}case mg.Kind.FRAGMENT_SPREAD:{let l=c.name.value;if(o.has(l)||!Ng(n,c))continue;o.add(l);let p=t[l];if(!p||!wP(e,p,r))continue;Vm(e,t,n,r,p.selectionSet,a,o);break}}}function Ng(e,t){let n=(0,PP.getDirectiveValues)(FP.GraphQLSkipDirective,t,e);if((n==null?void 0:n.if)===!0)return!1;let r=(0,PP.getDirectiveValues)(FP.GraphQLIncludeDirective,t,e);return(r==null?void 0:r.if)!==!1}function wP(e,t,n){let r=t.typeCondition;if(!r)return!0;let i=(0,Ez.typeFromAST)(e,r);return i===n?!0:(0,Tz.isAbstractType)(i)?e.isSubType(i,n):!1}function Iz(e){return e.alias?e.alias.value:e.name.value}});var Eg=w(Tg=>{"use strict";f();N();m();Object.defineProperty(Tg,"__esModule",{value:!0});Tg.SingleFieldSubscriptionsRule=vz;var LP=He(),gz=Rt(),_z=Km();function vz(e){return{OperationDefinition(t){if(t.operation==="subscription"){let n=e.getSchema(),r=n.getSubscriptionType();if(r){let i=t.name?t.name.value:null,a=Object.create(null),o=e.getDocument(),c=Object.create(null);for(let p of o.definitions)p.kind===gz.Kind.FRAGMENT_DEFINITION&&(c[p.name.value]=p);let l=(0,_z.collectFields)(n,c,a,r,t.selectionSet);if(l.size>1){let y=[...l.values()].slice(1).flat();e.reportError(new LP.GraphQLError(i!=null?`Subscription "${i}" must select only one top level field.`:"Anonymous Subscription must select only one top level field.",{nodes:y}))}for(let p of l.values())p[0].name.value.startsWith("__")&&e.reportError(new LP.GraphQLError(i!=null?`Subscription "${i}" must not select an introspection top level field.`:"Anonymous Subscription must not select an introspection top level field.",{nodes:p}))}}}}}});var Gm=w(hg=>{"use strict";f();N();m();Object.defineProperty(hg,"__esModule",{value:!0});hg.groupBy=Sz;function Sz(e,t){let n=new Map;for(let r of e){let i=t(r),a=n.get(i);a===void 0?n.set(i,[r]):a.push(r)}return n}});var Ig=w(yg=>{"use strict";f();N();m();Object.defineProperty(yg,"__esModule",{value:!0});yg.UniqueArgumentDefinitionNamesRule=bz;var Oz=Gm(),Dz=He();function bz(e){return{DirectiveDefinition(r){var i;let a=(i=r.arguments)!==null&&i!==void 0?i:[];return n(`@${r.name.value}`,a)},InterfaceTypeDefinition:t,InterfaceTypeExtension:t,ObjectTypeDefinition:t,ObjectTypeExtension:t};function t(r){var i;let a=r.name.value,o=(i=r.fields)!==null&&i!==void 0?i:[];for(let l of o){var c;let p=l.name.value,T=(c=l.arguments)!==null&&c!==void 0?c:[];n(`${a}.${p}`,T)}return!1}function n(r,i){let a=(0,Oz.groupBy)(i,o=>o.name.value);for(let[o,c]of a)c.length>1&&e.reportError(new Dz.GraphQLError(`Argument "${r}(${o}:)" can only be defined once.`,{nodes:c.map(l=>l.name)}));return!1}}});var _g=w(gg=>{"use strict";f();N();m();Object.defineProperty(gg,"__esModule",{value:!0});gg.UniqueArgumentNamesRule=Fz;var Az=Gm(),Rz=He();function Fz(e){return{Field:t,Directive:t};function t(n){var r;let i=(r=n.arguments)!==null&&r!==void 0?r:[],a=(0,Az.groupBy)(i,o=>o.name.value);for(let[o,c]of a)c.length>1&&e.reportError(new Rz.GraphQLError(`There can be only one argument named "${o}".`,{nodes:c.map(l=>l.name)}))}}});var Sg=w(vg=>{"use strict";f();N();m();Object.defineProperty(vg,"__esModule",{value:!0});vg.UniqueDirectiveNamesRule=Pz;var CP=He();function Pz(e){let t=Object.create(null),n=e.getSchema();return{DirectiveDefinition(r){let i=r.name.value;if(n!=null&&n.getDirective(i)){e.reportError(new CP.GraphQLError(`Directive "@${i}" already exists in the schema. It cannot be redefined.`,{nodes:r.name}));return}return t[i]?e.reportError(new CP.GraphQLError(`There can be only one directive named "@${i}".`,{nodes:[t[i],r.name]})):t[i]=r.name,!1}}}});var bg=w(Dg=>{"use strict";f();N();m();Object.defineProperty(Dg,"__esModule",{value:!0});Dg.UniqueDirectivesPerLocationRule=Cz;var wz=He(),Og=Rt(),BP=Mu(),Lz=$r();function Cz(e){let t=Object.create(null),n=e.getSchema(),r=n?n.getDirectives():Lz.specifiedDirectives;for(let c of r)t[c.name]=!c.isRepeatable;let i=e.getDocument().definitions;for(let c of i)c.kind===Og.Kind.DIRECTIVE_DEFINITION&&(t[c.name.value]=!c.repeatable);let a=Object.create(null),o=Object.create(null);return{enter(c){if(!("directives"in c)||!c.directives)return;let l;if(c.kind===Og.Kind.SCHEMA_DEFINITION||c.kind===Og.Kind.SCHEMA_EXTENSION)l=a;else if((0,BP.isTypeDefinitionNode)(c)||(0,BP.isTypeExtensionNode)(c)){let p=c.name.value;l=o[p],l===void 0&&(o[p]=l=Object.create(null))}else l=Object.create(null);for(let p of c.directives){let T=p.name.value;t[T]&&(l[T]?e.reportError(new wz.GraphQLError(`The directive "@${T}" can only be used once at this location.`,{nodes:[l[T],p]})):l[T]=p)}}}}});var Rg=w(Ag=>{"use strict";f();N();m();Object.defineProperty(Ag,"__esModule",{value:!0});Ag.UniqueEnumValueNamesRule=Uz;var UP=He(),Bz=Ft();function Uz(e){let t=e.getSchema(),n=t?t.getTypeMap():Object.create(null),r=Object.create(null);return{EnumTypeDefinition:i,EnumTypeExtension:i};function i(a){var o;let c=a.name.value;r[c]||(r[c]=Object.create(null));let l=(o=a.values)!==null&&o!==void 0?o:[],p=r[c];for(let T of l){let y=T.name.value,g=n[c];(0,Bz.isEnumType)(g)&&g.getValue(y)?e.reportError(new UP.GraphQLError(`Enum value "${c}.${y}" already exists in the schema. It cannot also be defined in this type extension.`,{nodes:T.name})):p[y]?e.reportError(new UP.GraphQLError(`Enum value "${c}.${y}" can only be defined once.`,{nodes:[p[y],T.name]})):p[y]=T.name}return!1}}});var wg=w(Pg=>{"use strict";f();N();m();Object.defineProperty(Pg,"__esModule",{value:!0});Pg.UniqueFieldDefinitionNamesRule=kz;var kP=He(),Fg=Ft();function kz(e){let t=e.getSchema(),n=t?t.getTypeMap():Object.create(null),r=Object.create(null);return{InputObjectTypeDefinition:i,InputObjectTypeExtension:i,InterfaceTypeDefinition:i,InterfaceTypeExtension:i,ObjectTypeDefinition:i,ObjectTypeExtension:i};function i(a){var o;let c=a.name.value;r[c]||(r[c]=Object.create(null));let l=(o=a.fields)!==null&&o!==void 0?o:[],p=r[c];for(let T of l){let y=T.name.value;Mz(n[c],y)?e.reportError(new kP.GraphQLError(`Field "${c}.${y}" already exists in the schema. It cannot also be defined in this type extension.`,{nodes:T.name})):p[y]?e.reportError(new kP.GraphQLError(`Field "${c}.${y}" can only be defined once.`,{nodes:[p[y],T.name]})):p[y]=T.name}return!1}}function Mz(e,t){return(0,Fg.isObjectType)(e)||(0,Fg.isInterfaceType)(e)||(0,Fg.isInputObjectType)(e)?e.getFields()[t]!=null:!1}});var Cg=w(Lg=>{"use strict";f();N();m();Object.defineProperty(Lg,"__esModule",{value:!0});Lg.UniqueFragmentNamesRule=qz;var xz=He();function qz(e){let t=Object.create(null);return{OperationDefinition:()=>!1,FragmentDefinition(n){let r=n.name.value;return t[r]?e.reportError(new xz.GraphQLError(`There can be only one fragment named "${r}".`,{nodes:[t[r],n.name]})):t[r]=n.name,!1}}}});var Ug=w(Bg=>{"use strict";f();N();m();Object.defineProperty(Bg,"__esModule",{value:!0});Bg.UniqueInputFieldNamesRule=Kz;var Vz=Ir(),jz=He();function Kz(e){let t=[],n=Object.create(null);return{ObjectValue:{enter(){t.push(n),n=Object.create(null)},leave(){let r=t.pop();r||(0,Vz.invariant)(!1),n=r}},ObjectField(r){let i=r.name.value;n[i]?e.reportError(new jz.GraphQLError(`There can be only one input field named "${i}".`,{nodes:[n[i],r.name]})):n[i]=r.name}}}});var Mg=w(kg=>{"use strict";f();N();m();Object.defineProperty(kg,"__esModule",{value:!0});kg.UniqueOperationNamesRule=$z;var Gz=He();function $z(e){let t=Object.create(null);return{OperationDefinition(n){let r=n.name;return r&&(t[r.value]?e.reportError(new Gz.GraphQLError(`There can be only one operation named "${r.value}".`,{nodes:[t[r.value],r]})):t[r.value]=r),!1},FragmentDefinition:()=>!1}}});var qg=w(xg=>{"use strict";f();N();m();Object.defineProperty(xg,"__esModule",{value:!0});xg.UniqueOperationTypesRule=Qz;var MP=He();function Qz(e){let t=e.getSchema(),n=Object.create(null),r=t?{query:t.getQueryType(),mutation:t.getMutationType(),subscription:t.getSubscriptionType()}:{};return{SchemaDefinition:i,SchemaExtension:i};function i(a){var o;let c=(o=a.operationTypes)!==null&&o!==void 0?o:[];for(let l of c){let p=l.operation,T=n[p];r[p]?e.reportError(new MP.GraphQLError(`Type for ${p} already defined in the schema. It cannot be redefined.`,{nodes:l})):T?e.reportError(new MP.GraphQLError(`There can be only one ${p} type in schema.`,{nodes:[T,l]})):n[p]=l}return!1}}});var jg=w(Vg=>{"use strict";f();N();m();Object.defineProperty(Vg,"__esModule",{value:!0});Vg.UniqueTypeNamesRule=Yz;var xP=He();function Yz(e){let t=Object.create(null),n=e.getSchema();return{ScalarTypeDefinition:r,ObjectTypeDefinition:r,InterfaceTypeDefinition:r,UnionTypeDefinition:r,EnumTypeDefinition:r,InputObjectTypeDefinition:r};function r(i){let a=i.name.value;if(n!=null&&n.getType(a)){e.reportError(new xP.GraphQLError(`Type "${a}" already exists in the schema. It cannot also be defined in this type definition.`,{nodes:i.name}));return}return t[a]?e.reportError(new xP.GraphQLError(`There can be only one type named "${a}".`,{nodes:[t[a],i.name]})):t[a]=i.name,!1}}});var Gg=w(Kg=>{"use strict";f();N();m();Object.defineProperty(Kg,"__esModule",{value:!0});Kg.UniqueVariableNamesRule=zz;var Jz=Gm(),Hz=He();function zz(e){return{OperationDefinition(t){var n;let r=(n=t.variableDefinitions)!==null&&n!==void 0?n:[],i=(0,Jz.groupBy)(r,a=>a.variable.name.value);for(let[a,o]of i)o.length>1&&e.reportError(new Hz.GraphQLError(`There can be only one variable named "$${a}".`,{nodes:o.map(c=>c.variable.name)}))}}}});var Yg=w(Qg=>{"use strict";f();N();m();Object.defineProperty(Qg,"__esModule",{value:!0});Qg.ValuesOfCorrectTypeRule=e4;var Wz=Mo(),jd=Yt(),Xz=xo(),Zz=qo(),Pa=He(),$g=Rt(),$m=li(),Fa=Ft();function e4(e){let t={};return{OperationDefinition:{enter(){t={}}},VariableDefinition(n){t[n.variable.name.value]=n},ListValue(n){let r=(0,Fa.getNullableType)(e.getParentInputType());if(!(0,Fa.isListType)(r))return qu(e,n),!1},ObjectValue(n){let r=(0,Fa.getNamedType)(e.getInputType());if(!(0,Fa.isInputObjectType)(r))return qu(e,n),!1;let i=(0,Xz.keyMap)(n.fields,a=>a.name.value);for(let a of Object.values(r.getFields()))if(!i[a.name]&&(0,Fa.isRequiredInputField)(a)){let c=(0,jd.inspect)(a.type);e.reportError(new Pa.GraphQLError(`Field "${r.name}.${a.name}" of required type "${c}" was not provided.`,{nodes:n}))}r.isOneOf&&t4(e,n,r,i,t)},ObjectField(n){let r=(0,Fa.getNamedType)(e.getParentInputType());if(!e.getInputType()&&(0,Fa.isInputObjectType)(r)){let a=(0,Zz.suggestionList)(n.name.value,Object.keys(r.getFields()));e.reportError(new Pa.GraphQLError(`Field "${n.name.value}" is not defined by type "${r.name}".`+(0,Wz.didYouMean)(a),{nodes:n}))}},NullValue(n){let r=e.getInputType();(0,Fa.isNonNullType)(r)&&e.reportError(new Pa.GraphQLError(`Expected value of type "${(0,jd.inspect)(r)}", found ${(0,$m.print)(n)}.`,{nodes:n}))},EnumValue:n=>qu(e,n),IntValue:n=>qu(e,n),FloatValue:n=>qu(e,n),StringValue:n=>qu(e,n),BooleanValue:n=>qu(e,n)}}function qu(e,t){let n=e.getInputType();if(!n)return;let r=(0,Fa.getNamedType)(n);if(!(0,Fa.isLeafType)(r)){let i=(0,jd.inspect)(n);e.reportError(new Pa.GraphQLError(`Expected value of type "${i}", found ${(0,$m.print)(t)}.`,{nodes:t}));return}try{if(r.parseLiteral(t,void 0)===void 0){let a=(0,jd.inspect)(n);e.reportError(new Pa.GraphQLError(`Expected value of type "${a}", found ${(0,$m.print)(t)}.`,{nodes:t}))}}catch(i){let a=(0,jd.inspect)(n);i instanceof Pa.GraphQLError?e.reportError(i):e.reportError(new Pa.GraphQLError(`Expected value of type "${a}", found ${(0,$m.print)(t)}; `+i.message,{nodes:t,originalError:i}))}}function t4(e,t,n,r,i){var a;let o=Object.keys(r);if(o.length!==1){e.reportError(new Pa.GraphQLError(`OneOf Input Object "${n.name}" must specify exactly one key.`,{nodes:[t]}));return}let l=(a=r[o[0]])===null||a===void 0?void 0:a.value,p=!l||l.kind===$g.Kind.NULL,T=(l==null?void 0:l.kind)===$g.Kind.VARIABLE;if(p){e.reportError(new Pa.GraphQLError(`Field "${n.name}.${o[0]}" must be non-null.`,{nodes:[t]}));return}if(T){let y=l.name.value;i[y].type.kind!==$g.Kind.NON_NULL_TYPE&&e.reportError(new Pa.GraphQLError(`Variable "${y}" must be non-nullable to be used for OneOf Input Object "${n.name}".`,{nodes:[t]}))}}});var Hg=w(Jg=>{"use strict";f();N();m();Object.defineProperty(Jg,"__esModule",{value:!0});Jg.VariablesAreInputTypesRule=s4;var n4=He(),r4=li(),i4=Ft(),a4=Ra();function s4(e){return{VariableDefinition(t){let n=(0,a4.typeFromAST)(e.getSchema(),t.type);if(n!==void 0&&!(0,i4.isInputType)(n)){let r=t.variable.name.value,i=(0,r4.print)(t.type);e.reportError(new n4.GraphQLError(`Variable "$${r}" cannot be non-input type "${i}".`,{nodes:t.type}))}}}}});var Wg=w(zg=>{"use strict";f();N();m();Object.defineProperty(zg,"__esModule",{value:!0});zg.VariablesInAllowedPositionRule=l4;var qP=Yt(),o4=He(),u4=Rt(),VP=Ft(),jP=vd(),c4=Ra();function l4(e){let t=Object.create(null);return{OperationDefinition:{enter(){t=Object.create(null)},leave(n){let r=e.getRecursiveVariableUsages(n);for(let{node:i,type:a,defaultValue:o}of r){let c=i.name.value,l=t[c];if(l&&a){let p=e.getSchema(),T=(0,c4.typeFromAST)(p,l.type);if(T&&!d4(p,T,l.defaultValue,a,o)){let y=(0,qP.inspect)(T),g=(0,qP.inspect)(a);e.reportError(new o4.GraphQLError(`Variable "$${c}" of type "${y}" used in position expecting type "${g}".`,{nodes:[l,i]}))}}}}},VariableDefinition(n){t[n.variable.name.value]=n}}}function d4(e,t,n,r,i){if((0,VP.isNonNullType)(r)&&!(0,VP.isNonNullType)(t)){if(!(n!=null&&n.kind!==u4.Kind.NULL)&&!(i!==void 0))return!1;let c=r.ofType;return(0,jP.isTypeSubTypeOf)(e,t,c)}return(0,jP.isTypeSubTypeOf)(e,t,r)}});var Xg=w(Go=>{"use strict";f();N();m();Object.defineProperty(Go,"__esModule",{value:!0});Go.specifiedSDLRules=Go.specifiedRules=Go.recommendedRules=void 0;var p4=NI(),f4=EI(),m4=yI(),KP=II(),GP=SI(),N4=DI(),$P=RI(),T4=PI(),E4=LI(),h4=BI(),y4=kI(),I4=xI(),g4=VI(),_4=KI(),v4=ZI(),S4=ng(),O4=ig(),QP=sg(),D4=ug(),b4=Eg(),A4=Ig(),YP=_g(),R4=Sg(),JP=bg(),F4=Rg(),P4=wg(),w4=Cg(),HP=Ug(),L4=Mg(),C4=qg(),B4=jg(),U4=Gg(),k4=Yg(),M4=Hg(),x4=Wg(),zP=Object.freeze([h4.MaxIntrospectionDepthRule]);Go.recommendedRules=zP;var q4=Object.freeze([p4.ExecutableDefinitionsRule,L4.UniqueOperationNamesRule,T4.LoneAnonymousOperationRule,b4.SingleFieldSubscriptionsRule,$P.KnownTypeNamesRule,m4.FragmentsOnCompositeTypesRule,M4.VariablesAreInputTypesRule,D4.ScalarLeafsRule,f4.FieldsOnCorrectTypeRule,w4.UniqueFragmentNamesRule,N4.KnownFragmentNamesRule,g4.NoUnusedFragmentsRule,S4.PossibleFragmentSpreadsRule,y4.NoFragmentCyclesRule,U4.UniqueVariableNamesRule,I4.NoUndefinedVariablesRule,_4.NoUnusedVariablesRule,GP.KnownDirectivesRule,JP.UniqueDirectivesPerLocationRule,KP.KnownArgumentNamesRule,YP.UniqueArgumentNamesRule,k4.ValuesOfCorrectTypeRule,QP.ProvidedRequiredArgumentsRule,x4.VariablesInAllowedPositionRule,v4.OverlappingFieldsCanBeMergedRule,HP.UniqueInputFieldNamesRule,...zP]);Go.specifiedRules=q4;var V4=Object.freeze([E4.LoneSchemaDefinitionRule,C4.UniqueOperationTypesRule,B4.UniqueTypeNamesRule,F4.UniqueEnumValueNamesRule,P4.UniqueFieldDefinitionNamesRule,A4.UniqueArgumentDefinitionNamesRule,R4.UniqueDirectiveNamesRule,$P.KnownTypeNamesRule,GP.KnownDirectivesRule,JP.UniqueDirectivesPerLocationRule,O4.PossibleTypeExtensionsRule,KP.KnownArgumentNamesOnDirectivesRule,YP.UniqueArgumentNamesRule,HP.UniqueInputFieldNamesRule,QP.ProvidedRequiredArgumentsOnDirectivesRule]);Go.specifiedSDLRules=V4});var t_=w($o=>{"use strict";f();N();m();Object.defineProperty($o,"__esModule",{value:!0});$o.ValidationContext=$o.SDLValidationContext=$o.ASTValidationContext=void 0;var WP=Rt(),j4=Fu(),XP=wm(),Kd=class{constructor(t,n){this._ast=t,this._fragments=void 0,this._fragmentSpreads=new Map,this._recursivelyReferencedFragments=new Map,this._onError=n}get[Symbol.toStringTag](){return"ASTValidationContext"}reportError(t){this._onError(t)}getDocument(){return this._ast}getFragment(t){let n;if(this._fragments)n=this._fragments;else{n=Object.create(null);for(let r of this.getDocument().definitions)r.kind===WP.Kind.FRAGMENT_DEFINITION&&(n[r.name.value]=r);this._fragments=n}return n[t]}getFragmentSpreads(t){let n=this._fragmentSpreads.get(t);if(!n){n=[];let r=[t],i;for(;i=r.pop();)for(let a of i.selections)a.kind===WP.Kind.FRAGMENT_SPREAD?n.push(a):a.selectionSet&&r.push(a.selectionSet);this._fragmentSpreads.set(t,n)}return n}getRecursivelyReferencedFragments(t){let n=this._recursivelyReferencedFragments.get(t);if(!n){n=[];let r=Object.create(null),i=[t.selectionSet],a;for(;a=i.pop();)for(let o of this.getFragmentSpreads(a)){let c=o.name.value;if(r[c]!==!0){r[c]=!0;let l=this.getFragment(c);l&&(n.push(l),i.push(l.selectionSet))}}this._recursivelyReferencedFragments.set(t,n)}return n}};$o.ASTValidationContext=Kd;var Zg=class extends Kd{constructor(t,n,r){super(t,r),this._schema=n}get[Symbol.toStringTag](){return"SDLValidationContext"}getSchema(){return this._schema}};$o.SDLValidationContext=Zg;var e_=class extends Kd{constructor(t,n,r,i){super(n,i),this._schema=t,this._typeInfo=r,this._variableUsages=new Map,this._recursiveVariableUsages=new Map}get[Symbol.toStringTag](){return"ValidationContext"}getSchema(){return this._schema}getVariableUsages(t){let n=this._variableUsages.get(t);if(!n){let r=[],i=new XP.TypeInfo(this._schema);(0,j4.visit)(t,(0,XP.visitWithTypeInfo)(i,{VariableDefinition:()=>!1,Variable(a){r.push({node:a,type:i.getInputType(),defaultValue:i.getDefaultValue()})}})),n=r,this._variableUsages.set(t,n)}return n}getRecursiveVariableUsages(t){let n=this._recursiveVariableUsages.get(t);if(!n){n=this.getVariableUsages(t);for(let r of this.getRecursivelyReferencedFragments(t))n=n.concat(this.getVariableUsages(r));this._recursiveVariableUsages.set(t,n)}return n}getType(){return this._typeInfo.getType()}getParentType(){return this._typeInfo.getParentType()}getInputType(){return this._typeInfo.getInputType()}getParentInputType(){return this._typeInfo.getParentInputType()}getFieldDef(){return this._typeInfo.getFieldDef()}getDirective(){return this._typeInfo.getDirective()}getArgument(){return this._typeInfo.getArgument()}getEnumValue(){return this._typeInfo.getEnumValue()}};$o.ValidationContext=e_});var Wc=w(zc=>{"use strict";f();N();m();Object.defineProperty(zc,"__esModule",{value:!0});zc.assertValidSDL=Y4;zc.assertValidSDLExtension=J4;zc.validate=Q4;zc.validateSDL=n_;var K4=Cr(),G4=He(),Qm=Fu(),$4=Ld(),ZP=wm(),ew=Xg(),tw=t_();function Q4(e,t,n=ew.specifiedRules,r,i=new ZP.TypeInfo(e)){var a;let o=(a=r==null?void 0:r.maxErrors)!==null&&a!==void 0?a:100;t||(0,K4.devAssert)(!1,"Must provide document."),(0,$4.assertValidSchema)(e);let c=Object.freeze({}),l=[],p=new tw.ValidationContext(e,t,i,y=>{if(l.length>=o)throw l.push(new G4.GraphQLError("Too many validation errors, error limit reached. Validation aborted.")),c;l.push(y)}),T=(0,Qm.visitInParallel)(n.map(y=>y(p)));try{(0,Qm.visit)(t,(0,ZP.visitWithTypeInfo)(i,T))}catch(y){if(y!==c)throw y}return l}function n_(e,t,n=ew.specifiedSDLRules){let r=[],i=new tw.SDLValidationContext(e,t,o=>{r.push(o)}),a=n.map(o=>o(i));return(0,Qm.visit)(e,(0,Qm.visitInParallel)(a)),r}function Y4(e){let t=n_(e);if(t.length!==0)throw new Error(t.map(n=>n.message).join(` +`))}var uI=class{constructor(t){this._errors=[],this.schema=t}reportError(t,n){let r=Array.isArray(n)?n.filter(Boolean):n;this._errors.push(new N3.GraphQLError(t,{nodes:r}))}getErrors(){return this._errors}};function y3(e){let t=e.schema,n=t.getQueryType();if(!n)e.reportError("Query root type must be provided.",t.astNode);else if(!(0,Fn.isObjectType)(n)){var r;e.reportError(`Query root type must be Object type, it cannot be ${(0,_r.inspect)(n)}.`,(r=oI(t,sI.OperationTypeNode.QUERY))!==null&&r!==void 0?r:n.astNode)}let i=t.getMutationType();if(i&&!(0,Fn.isObjectType)(i)){var a;e.reportError(`Mutation root type must be Object type if provided, it cannot be ${(0,_r.inspect)(i)}.`,(a=oI(t,sI.OperationTypeNode.MUTATION))!==null&&a!==void 0?a:i.astNode)}let o=t.getSubscriptionType();if(o&&!(0,Fn.isObjectType)(o)){var c;e.reportError(`Subscription root type must be Object type if provided, it cannot be ${(0,_r.inspect)(o)}.`,(c=oI(t,sI.OperationTypeNode.SUBSCRIPTION))!==null&&c!==void 0?c:o.astNode)}}function oI(e,t){var n;return(n=[e.astNode,...e.extensionASTNodes].flatMap(r=>{var i;return(i=r==null?void 0:r.operationTypes)!==null&&i!==void 0?i:[]}).find(r=>r.operation===t))===null||n===void 0?void 0:n.type}function I3(e){for(let n of e.schema.getDirectives()){if(!(0,BF.isDirective)(n)){e.reportError(`Expected directive but got: ${(0,_r.inspect)(n)}.`,n==null?void 0:n.astNode);continue}ku(e,n);for(let r of n.args)if(ku(e,r),(0,Fn.isInputType)(r.type)||e.reportError(`The type of @${n.name}(${r.name}:) must be Input Type but got: ${(0,_r.inspect)(r.type)}.`,r.astNode),(0,Fn.isRequiredArgument)(r)&&r.deprecationReason!=null){var t;e.reportError(`Required argument @${n.name}(${r.name}:) cannot be deprecated.`,[cI(r.astNode),(t=r.astNode)===null||t===void 0?void 0:t.type])}}}function ku(e,t){t.name.startsWith("__")&&e.reportError(`Name "${t.name}" must not begin with "__", which is reserved by GraphQL introspection.`,t.astNode)}function g3(e){let t=A3(e),n=e.schema.getTypeMap();for(let r of Object.values(n)){if(!(0,Fn.isNamedType)(r)){e.reportError(`Expected GraphQL named type but got: ${(0,_r.inspect)(r)}.`,r.astNode);continue}(0,T3.isIntrospectionType)(r)||ku(e,r),(0,Fn.isObjectType)(r)||(0,Fn.isInterfaceType)(r)?(wF(e,r),LF(e,r)):(0,Fn.isUnionType)(r)?S3(e,r):(0,Fn.isEnumType)(r)?O3(e,r):(0,Fn.isInputObjectType)(r)&&(D3(e,r),t(r))}}function wF(e,t){let n=Object.values(t.getFields());n.length===0&&e.reportError(`Type ${t.name} must define one or more fields.`,[t.astNode,...t.extensionASTNodes]);for(let o of n){if(ku(e,o),!(0,Fn.isOutputType)(o.type)){var r;e.reportError(`The type of ${t.name}.${o.name} must be Output Type but got: ${(0,_r.inspect)(o.type)}.`,(r=o.astNode)===null||r===void 0?void 0:r.type)}for(let c of o.args){let l=c.name;if(ku(e,c),!(0,Fn.isInputType)(c.type)){var i;e.reportError(`The type of ${t.name}.${o.name}(${l}:) must be Input Type but got: ${(0,_r.inspect)(c.type)}.`,(i=c.astNode)===null||i===void 0?void 0:i.type)}if((0,Fn.isRequiredArgument)(c)&&c.deprecationReason!=null){var a;e.reportError(`Required argument ${t.name}.${o.name}(${l}:) cannot be deprecated.`,[cI(c.astNode),(a=c.astNode)===null||a===void 0?void 0:a.type])}}}}function LF(e,t){let n=Object.create(null);for(let r of t.getInterfaces()){if(!(0,Fn.isInterfaceType)(r)){e.reportError(`Type ${(0,_r.inspect)(t)} must only implement Interface types, it cannot implement ${(0,_r.inspect)(r)}.`,Ld(t,r));continue}if(t===r){e.reportError(`Type ${t.name} cannot implement itself because it would create a circular reference.`,Ld(t,r));continue}if(n[r.name]){e.reportError(`Type ${t.name} can only implement ${r.name} once.`,Ld(t,r));continue}n[r.name]=!0,v3(e,t,r),_3(e,t,r)}}function _3(e,t,n){let r=t.getFields();for(let l of Object.values(n.getFields())){let p=l.name,f=r[p];if(!f){e.reportError(`Interface field ${n.name}.${p} expected but ${t.name} does not provide it.`,[l.astNode,t.astNode,...t.extensionASTNodes]);continue}if(!(0,PF.isTypeSubTypeOf)(e.schema,f.type,l.type)){var i,a;e.reportError(`Interface field ${n.name}.${p} expects type ${(0,_r.inspect)(l.type)} but ${t.name}.${p} is type ${(0,_r.inspect)(f.type)}.`,[(i=l.astNode)===null||i===void 0?void 0:i.type,(a=f.astNode)===null||a===void 0?void 0:a.type])}for(let y of l.args){let g=y.name,_=f.args.find(F=>F.name===g);if(!_){e.reportError(`Interface field argument ${n.name}.${p}(${g}:) expected but ${t.name}.${p} does not provide it.`,[y.astNode,f.astNode]);continue}if(!(0,PF.isEqualType)(y.type,_.type)){var o,c;e.reportError(`Interface field argument ${n.name}.${p}(${g}:) expects type ${(0,_r.inspect)(y.type)} but ${t.name}.${p}(${g}:) is type ${(0,_r.inspect)(_.type)}.`,[(o=y.astNode)===null||o===void 0?void 0:o.type,(c=_.astNode)===null||c===void 0?void 0:c.type])}}for(let y of f.args){let g=y.name;!l.args.find(F=>F.name===g)&&(0,Fn.isRequiredArgument)(y)&&e.reportError(`Object field ${t.name}.${p} includes required argument ${g} that is missing from the Interface field ${n.name}.${p}.`,[y.astNode,l.astNode])}}}function v3(e,t,n){let r=t.getInterfaces();for(let i of n.getInterfaces())r.includes(i)||e.reportError(i===t?`Type ${t.name} cannot implement ${n.name} because it would create a circular reference.`:`Type ${t.name} must implement ${i.name} because it is implemented by ${n.name}.`,[...Ld(n,i),...Ld(t,n)])}function S3(e,t){let n=t.getTypes();n.length===0&&e.reportError(`Union type ${t.name} must define one or more member types.`,[t.astNode,...t.extensionASTNodes]);let r=Object.create(null);for(let i of n){if(r[i.name]){e.reportError(`Union type ${t.name} can only include type ${i.name} once.`,CF(t,i.name));continue}r[i.name]=!0,(0,Fn.isObjectType)(i)||e.reportError(`Union type ${t.name} can only include Object types, it cannot include ${(0,_r.inspect)(i)}.`,CF(t,String(i)))}}function O3(e,t){let n=t.getValues();n.length===0&&e.reportError(`Enum type ${t.name} must define one or more values.`,[t.astNode,...t.extensionASTNodes]);for(let r of n)ku(e,r)}function D3(e,t){let n=Object.values(t.getFields());n.length===0&&e.reportError(`Input Object type ${t.name} must define one or more fields.`,[t.astNode,...t.extensionASTNodes]);for(let a of n){if(ku(e,a),!(0,Fn.isInputType)(a.type)){var r;e.reportError(`The type of ${t.name}.${a.name} must be Input Type but got: ${(0,_r.inspect)(a.type)}.`,(r=a.astNode)===null||r===void 0?void 0:r.type)}if((0,Fn.isRequiredInputField)(a)&&a.deprecationReason!=null){var i;e.reportError(`Required input field ${t.name}.${a.name} cannot be deprecated.`,[cI(a.astNode),(i=a.astNode)===null||i===void 0?void 0:i.type])}t.isOneOf&&b3(t,a,e)}}function b3(e,t,n){if((0,Fn.isNonNullType)(t.type)){var r;n.reportError(`OneOf input field ${e.name}.${t.name} must be nullable.`,(r=t.astNode)===null||r===void 0?void 0:r.type)}t.defaultValue!==void 0&&n.reportError(`OneOf input field ${e.name}.${t.name} cannot have a default value.`,t.astNode)}function A3(e){let t=Object.create(null),n=[],r=Object.create(null);return i;function i(a){if(t[a.name])return;t[a.name]=!0,r[a.name]=n.length;let o=Object.values(a.getFields());for(let c of o)if((0,Fn.isNonNullType)(c.type)&&(0,Fn.isInputObjectType)(c.type.ofType)){let l=c.type.ofType,p=r[l.name];if(n.push(c),p===void 0)i(l);else{let f=n.slice(p),y=f.map(g=>g.name).join(".");e.reportError(`Cannot reference Input Object "${l.name}" within itself through a series of non-null fields: "${y}".`,f.map(g=>g.astNode))}n.pop()}r[a.name]=void 0}}function Ld(e,t){let{astNode:n,extensionASTNodes:r}=e;return(n!=null?[n,...r]:r).flatMap(a=>{var o;return(o=a.interfaces)!==null&&o!==void 0?o:[]}).filter(a=>a.name.value===t.name)}function CF(e,t){let{astNode:n,extensionASTNodes:r}=e;return(n!=null?[n,...r]:r).flatMap(a=>{var o;return(o=a.types)!==null&&o!==void 0?o:[]}).filter(a=>a.name.value===t)}function cI(e){var t;return e==null||(t=e.directives)===null||t===void 0?void 0:t.find(n=>n.name.value===BF.GraphQLDeprecatedDirective.name)}});var Ra=w(pI=>{"use strict";m();T();N();Object.defineProperty(pI,"__esModule",{value:!0});pI.typeFromAST=dI;var lI=Rt(),kF=Ft();function dI(e,t){switch(t.kind){case lI.Kind.LIST_TYPE:{let n=dI(e,t.type);return n&&new kF.GraphQLList(n)}case lI.Kind.NON_NULL_TYPE:{let n=dI(e,t.type);return n&&new kF.GraphQLNonNull(n)}case lI.Kind.NAMED_TYPE:return e.getType(t.name.value)}}});var Cm=w(Bd=>{"use strict";m();T();N();Object.defineProperty(Bd,"__esModule",{value:!0});Bd.TypeInfo=void 0;Bd.visitWithTypeInfo=P3;var R3=Oa(),Pn=Rt(),MF=Fu(),wn=Ft(),Gc=Ri(),xF=Ra(),fI=class{constructor(t,n,r){this._schema=t,this._typeStack=[],this._parentTypeStack=[],this._inputTypeStack=[],this._fieldDefStack=[],this._defaultValueStack=[],this._directive=null,this._argument=null,this._enumValue=null,this._getFieldDef=r!=null?r:F3,n&&((0,wn.isInputType)(n)&&this._inputTypeStack.push(n),(0,wn.isCompositeType)(n)&&this._parentTypeStack.push(n),(0,wn.isOutputType)(n)&&this._typeStack.push(n))}get[Symbol.toStringTag](){return"TypeInfo"}getType(){if(this._typeStack.length>0)return this._typeStack[this._typeStack.length-1]}getParentType(){if(this._parentTypeStack.length>0)return this._parentTypeStack[this._parentTypeStack.length-1]}getInputType(){if(this._inputTypeStack.length>0)return this._inputTypeStack[this._inputTypeStack.length-1]}getParentInputType(){if(this._inputTypeStack.length>1)return this._inputTypeStack[this._inputTypeStack.length-2]}getFieldDef(){if(this._fieldDefStack.length>0)return this._fieldDefStack[this._fieldDefStack.length-1]}getDefaultValue(){if(this._defaultValueStack.length>0)return this._defaultValueStack[this._defaultValueStack.length-1]}getDirective(){return this._directive}getArgument(){return this._argument}getEnumValue(){return this._enumValue}enter(t){let n=this._schema;switch(t.kind){case Pn.Kind.SELECTION_SET:{let i=(0,wn.getNamedType)(this.getType());this._parentTypeStack.push((0,wn.isCompositeType)(i)?i:void 0);break}case Pn.Kind.FIELD:{let i=this.getParentType(),a,o;i&&(a=this._getFieldDef(n,i,t),a&&(o=a.type)),this._fieldDefStack.push(a),this._typeStack.push((0,wn.isOutputType)(o)?o:void 0);break}case Pn.Kind.DIRECTIVE:this._directive=n.getDirective(t.name.value);break;case Pn.Kind.OPERATION_DEFINITION:{let i=n.getRootType(t.operation);this._typeStack.push((0,wn.isObjectType)(i)?i:void 0);break}case Pn.Kind.INLINE_FRAGMENT:case Pn.Kind.FRAGMENT_DEFINITION:{let i=t.typeCondition,a=i?(0,xF.typeFromAST)(n,i):(0,wn.getNamedType)(this.getType());this._typeStack.push((0,wn.isOutputType)(a)?a:void 0);break}case Pn.Kind.VARIABLE_DEFINITION:{let i=(0,xF.typeFromAST)(n,t.type);this._inputTypeStack.push((0,wn.isInputType)(i)?i:void 0);break}case Pn.Kind.ARGUMENT:{var r;let i,a,o=(r=this.getDirective())!==null&&r!==void 0?r:this.getFieldDef();o&&(i=o.args.find(c=>c.name===t.name.value),i&&(a=i.type)),this._argument=i,this._defaultValueStack.push(i?i.defaultValue:void 0),this._inputTypeStack.push((0,wn.isInputType)(a)?a:void 0);break}case Pn.Kind.LIST:{let i=(0,wn.getNullableType)(this.getInputType()),a=(0,wn.isListType)(i)?i.ofType:i;this._defaultValueStack.push(void 0),this._inputTypeStack.push((0,wn.isInputType)(a)?a:void 0);break}case Pn.Kind.OBJECT_FIELD:{let i=(0,wn.getNamedType)(this.getInputType()),a,o;(0,wn.isInputObjectType)(i)&&(o=i.getFields()[t.name.value],o&&(a=o.type)),this._defaultValueStack.push(o?o.defaultValue:void 0),this._inputTypeStack.push((0,wn.isInputType)(a)?a:void 0);break}case Pn.Kind.ENUM:{let i=(0,wn.getNamedType)(this.getInputType()),a;(0,wn.isEnumType)(i)&&(a=i.getValue(t.value)),this._enumValue=a;break}default:}}leave(t){switch(t.kind){case Pn.Kind.SELECTION_SET:this._parentTypeStack.pop();break;case Pn.Kind.FIELD:this._fieldDefStack.pop(),this._typeStack.pop();break;case Pn.Kind.DIRECTIVE:this._directive=null;break;case Pn.Kind.OPERATION_DEFINITION:case Pn.Kind.INLINE_FRAGMENT:case Pn.Kind.FRAGMENT_DEFINITION:this._typeStack.pop();break;case Pn.Kind.VARIABLE_DEFINITION:this._inputTypeStack.pop();break;case Pn.Kind.ARGUMENT:this._argument=null,this._defaultValueStack.pop(),this._inputTypeStack.pop();break;case Pn.Kind.LIST:case Pn.Kind.OBJECT_FIELD:this._defaultValueStack.pop(),this._inputTypeStack.pop();break;case Pn.Kind.ENUM:this._enumValue=null;break;default:}}};Bd.TypeInfo=fI;function F3(e,t,n){let r=n.name.value;if(r===Gc.SchemaMetaFieldDef.name&&e.getQueryType()===t)return Gc.SchemaMetaFieldDef;if(r===Gc.TypeMetaFieldDef.name&&e.getQueryType()===t)return Gc.TypeMetaFieldDef;if(r===Gc.TypeNameMetaFieldDef.name&&(0,wn.isCompositeType)(t))return Gc.TypeNameMetaFieldDef;if((0,wn.isObjectType)(t)||(0,wn.isInterfaceType)(t))return t.getFields()[r]}function P3(e,t){return{enter(...n){let r=n[0];e.enter(r);let i=(0,MF.getEnterLeaveForKind)(t,r.kind).enter;if(i){let a=i.apply(t,n);return a!==void 0&&(e.leave(r),(0,R3.isNode)(a)&&e.enter(a)),a}},leave(...n){let r=n[0],i=(0,MF.getEnterLeaveForKind)(t,r.kind).leave,a;return i&&(a=i.apply(t,n)),e.leave(r),a}}}});var Mu=w(Fi=>{"use strict";m();T();N();Object.defineProperty(Fi,"__esModule",{value:!0});Fi.isConstValueNode=mI;Fi.isDefinitionNode=w3;Fi.isExecutableDefinitionNode=qF;Fi.isSelectionNode=L3;Fi.isTypeDefinitionNode=KF;Fi.isTypeExtensionNode=$F;Fi.isTypeNode=C3;Fi.isTypeSystemDefinitionNode=jF;Fi.isTypeSystemExtensionNode=GF;Fi.isValueNode=VF;var Pt=Rt();function w3(e){return qF(e)||jF(e)||GF(e)}function qF(e){return e.kind===Pt.Kind.OPERATION_DEFINITION||e.kind===Pt.Kind.FRAGMENT_DEFINITION}function L3(e){return e.kind===Pt.Kind.FIELD||e.kind===Pt.Kind.FRAGMENT_SPREAD||e.kind===Pt.Kind.INLINE_FRAGMENT}function VF(e){return e.kind===Pt.Kind.VARIABLE||e.kind===Pt.Kind.INT||e.kind===Pt.Kind.FLOAT||e.kind===Pt.Kind.STRING||e.kind===Pt.Kind.BOOLEAN||e.kind===Pt.Kind.NULL||e.kind===Pt.Kind.ENUM||e.kind===Pt.Kind.LIST||e.kind===Pt.Kind.OBJECT}function mI(e){return VF(e)&&(e.kind===Pt.Kind.LIST?e.values.some(mI):e.kind===Pt.Kind.OBJECT?e.fields.some(t=>mI(t.value)):e.kind!==Pt.Kind.VARIABLE)}function C3(e){return e.kind===Pt.Kind.NAMED_TYPE||e.kind===Pt.Kind.LIST_TYPE||e.kind===Pt.Kind.NON_NULL_TYPE}function jF(e){return e.kind===Pt.Kind.SCHEMA_DEFINITION||KF(e)||e.kind===Pt.Kind.DIRECTIVE_DEFINITION}function KF(e){return e.kind===Pt.Kind.SCALAR_TYPE_DEFINITION||e.kind===Pt.Kind.OBJECT_TYPE_DEFINITION||e.kind===Pt.Kind.INTERFACE_TYPE_DEFINITION||e.kind===Pt.Kind.UNION_TYPE_DEFINITION||e.kind===Pt.Kind.ENUM_TYPE_DEFINITION||e.kind===Pt.Kind.INPUT_OBJECT_TYPE_DEFINITION}function GF(e){return e.kind===Pt.Kind.SCHEMA_EXTENSION||$F(e)}function $F(e){return e.kind===Pt.Kind.SCALAR_TYPE_EXTENSION||e.kind===Pt.Kind.OBJECT_TYPE_EXTENSION||e.kind===Pt.Kind.INTERFACE_TYPE_EXTENSION||e.kind===Pt.Kind.UNION_TYPE_EXTENSION||e.kind===Pt.Kind.ENUM_TYPE_EXTENSION||e.kind===Pt.Kind.INPUT_OBJECT_TYPE_EXTENSION}});var TI=w(NI=>{"use strict";m();T();N();Object.defineProperty(NI,"__esModule",{value:!0});NI.ExecutableDefinitionsRule=k3;var B3=He(),QF=Rt(),U3=Mu();function k3(e){return{Document(t){for(let n of t.definitions)if(!(0,U3.isExecutableDefinitionNode)(n)){let r=n.kind===QF.Kind.SCHEMA_DEFINITION||n.kind===QF.Kind.SCHEMA_EXTENSION?"schema":'"'+n.name.value+'"';e.reportError(new B3.GraphQLError(`The ${r} definition is not executable.`,{nodes:n}))}return!1}}}});var hI=w(EI=>{"use strict";m();T();N();Object.defineProperty(EI,"__esModule",{value:!0});EI.FieldsOnCorrectTypeRule=V3;var YF=xo(),M3=hd(),x3=Vo(),q3=He(),Ud=Ft();function V3(e){return{Field(t){let n=e.getParentType();if(n&&!e.getFieldDef()){let i=e.getSchema(),a=t.name.value,o=(0,YF.didYouMean)("to use an inline fragment on",j3(i,n,a));o===""&&(o=(0,YF.didYouMean)(K3(n,a))),e.reportError(new q3.GraphQLError(`Cannot query field "${a}" on type "${n.name}".`+o,{nodes:t}))}}}}function j3(e,t,n){if(!(0,Ud.isAbstractType)(t))return[];let r=new Set,i=Object.create(null);for(let o of e.getPossibleTypes(t))if(o.getFields()[n]){r.add(o),i[o.name]=1;for(let c of o.getInterfaces()){var a;c.getFields()[n]&&(r.add(c),i[c.name]=((a=i[c.name])!==null&&a!==void 0?a:0)+1)}}return[...r].sort((o,c)=>{let l=i[c.name]-i[o.name];return l!==0?l:(0,Ud.isInterfaceType)(o)&&e.isSubType(o,c)?-1:(0,Ud.isInterfaceType)(c)&&e.isSubType(c,o)?1:(0,M3.naturalCompare)(o.name,c.name)}).map(o=>o.name)}function K3(e,t){if((0,Ud.isObjectType)(e)||(0,Ud.isInterfaceType)(e)){let n=Object.keys(e.getFields());return(0,x3.suggestionList)(t,n)}return[]}});var II=w(yI=>{"use strict";m();T();N();Object.defineProperty(yI,"__esModule",{value:!0});yI.FragmentsOnCompositeTypesRule=G3;var JF=He(),HF=li(),zF=Ft(),WF=Ra();function G3(e){return{InlineFragment(t){let n=t.typeCondition;if(n){let r=(0,WF.typeFromAST)(e.getSchema(),n);if(r&&!(0,zF.isCompositeType)(r)){let i=(0,HF.print)(n);e.reportError(new JF.GraphQLError(`Fragment cannot condition on non composite type "${i}".`,{nodes:n}))}}},FragmentDefinition(t){let n=(0,WF.typeFromAST)(e.getSchema(),t.typeCondition);if(n&&!(0,zF.isCompositeType)(n)){let r=(0,HF.print)(t.typeCondition);e.reportError(new JF.GraphQLError(`Fragment "${t.name.value}" cannot condition on non composite type "${r}".`,{nodes:t.typeCondition}))}}}}});var gI=w(Bm=>{"use strict";m();T();N();Object.defineProperty(Bm,"__esModule",{value:!0});Bm.KnownArgumentNamesOnDirectivesRule=tP;Bm.KnownArgumentNamesRule=Y3;var XF=xo(),ZF=Vo(),eP=He(),$3=Rt(),Q3=$r();function Y3(e){return Q(M({},tP(e)),{Argument(t){let n=e.getArgument(),r=e.getFieldDef(),i=e.getParentType();if(!n&&r&&i){let a=t.name.value,o=r.args.map(l=>l.name),c=(0,ZF.suggestionList)(a,o);e.reportError(new eP.GraphQLError(`Unknown argument "${a}" on field "${i.name}.${r.name}".`+(0,XF.didYouMean)(c),{nodes:t}))}}})}function tP(e){let t=Object.create(null),n=e.getSchema(),r=n?n.getDirectives():Q3.specifiedDirectives;for(let o of r)t[o.name]=o.args.map(c=>c.name);let i=e.getDocument().definitions;for(let o of i)if(o.kind===$3.Kind.DIRECTIVE_DEFINITION){var a;let c=(a=o.arguments)!==null&&a!==void 0?a:[];t[o.name.value]=c.map(l=>l.name.value)}return{Directive(o){let c=o.name.value,l=t[c];if(o.arguments&&l)for(let p of o.arguments){let f=p.name.value;if(!l.includes(f)){let y=(0,ZF.suggestionList)(f,l);e.reportError(new eP.GraphQLError(`Unknown argument "${f}" on directive "@${c}".`+(0,XF.didYouMean)(y),{nodes:p}))}}return!1}}}});var OI=w(SI=>{"use strict";m();T();N();Object.defineProperty(SI,"__esModule",{value:!0});SI.KnownDirectivesRule=z3;var J3=Yt(),_I=Ir(),nP=He(),vI=Oa(),Zn=kc(),Tn=Rt(),H3=$r();function z3(e){let t=Object.create(null),n=e.getSchema(),r=n?n.getDirectives():H3.specifiedDirectives;for(let a of r)t[a.name]=a.locations;let i=e.getDocument().definitions;for(let a of i)a.kind===Tn.Kind.DIRECTIVE_DEFINITION&&(t[a.name.value]=a.locations.map(o=>o.value));return{Directive(a,o,c,l,p){let f=a.name.value,y=t[f];if(!y){e.reportError(new nP.GraphQLError(`Unknown directive "@${f}".`,{nodes:a}));return}let g=W3(p);g&&!y.includes(g)&&e.reportError(new nP.GraphQLError(`Directive "@${f}" may not be used on ${g}.`,{nodes:a}))}}}function W3(e){let t=e[e.length-1];switch("kind"in t||(0,_I.invariant)(!1),t.kind){case Tn.Kind.OPERATION_DEFINITION:return X3(t.operation);case Tn.Kind.FIELD:return Zn.DirectiveLocation.FIELD;case Tn.Kind.FRAGMENT_SPREAD:return Zn.DirectiveLocation.FRAGMENT_SPREAD;case Tn.Kind.INLINE_FRAGMENT:return Zn.DirectiveLocation.INLINE_FRAGMENT;case Tn.Kind.FRAGMENT_DEFINITION:return Zn.DirectiveLocation.FRAGMENT_DEFINITION;case Tn.Kind.VARIABLE_DEFINITION:return Zn.DirectiveLocation.VARIABLE_DEFINITION;case Tn.Kind.SCHEMA_DEFINITION:case Tn.Kind.SCHEMA_EXTENSION:return Zn.DirectiveLocation.SCHEMA;case Tn.Kind.SCALAR_TYPE_DEFINITION:case Tn.Kind.SCALAR_TYPE_EXTENSION:return Zn.DirectiveLocation.SCALAR;case Tn.Kind.OBJECT_TYPE_DEFINITION:case Tn.Kind.OBJECT_TYPE_EXTENSION:return Zn.DirectiveLocation.OBJECT;case Tn.Kind.FIELD_DEFINITION:return Zn.DirectiveLocation.FIELD_DEFINITION;case Tn.Kind.INTERFACE_TYPE_DEFINITION:case Tn.Kind.INTERFACE_TYPE_EXTENSION:return Zn.DirectiveLocation.INTERFACE;case Tn.Kind.UNION_TYPE_DEFINITION:case Tn.Kind.UNION_TYPE_EXTENSION:return Zn.DirectiveLocation.UNION;case Tn.Kind.ENUM_TYPE_DEFINITION:case Tn.Kind.ENUM_TYPE_EXTENSION:return Zn.DirectiveLocation.ENUM;case Tn.Kind.ENUM_VALUE_DEFINITION:return Zn.DirectiveLocation.ENUM_VALUE;case Tn.Kind.INPUT_OBJECT_TYPE_DEFINITION:case Tn.Kind.INPUT_OBJECT_TYPE_EXTENSION:return Zn.DirectiveLocation.INPUT_OBJECT;case Tn.Kind.INPUT_VALUE_DEFINITION:{let n=e[e.length-3];return"kind"in n||(0,_I.invariant)(!1),n.kind===Tn.Kind.INPUT_OBJECT_TYPE_DEFINITION?Zn.DirectiveLocation.INPUT_FIELD_DEFINITION:Zn.DirectiveLocation.ARGUMENT_DEFINITION}default:(0,_I.invariant)(!1,"Unexpected kind: "+(0,J3.inspect)(t.kind))}}function X3(e){switch(e){case vI.OperationTypeNode.QUERY:return Zn.DirectiveLocation.QUERY;case vI.OperationTypeNode.MUTATION:return Zn.DirectiveLocation.MUTATION;case vI.OperationTypeNode.SUBSCRIPTION:return Zn.DirectiveLocation.SUBSCRIPTION}}});var bI=w(DI=>{"use strict";m();T();N();Object.defineProperty(DI,"__esModule",{value:!0});DI.KnownFragmentNamesRule=e6;var Z3=He();function e6(e){return{FragmentSpread(t){let n=t.name.value;e.getFragment(n)||e.reportError(new Z3.GraphQLError(`Unknown fragment "${n}".`,{nodes:t.name}))}}}});var FI=w(RI=>{"use strict";m();T();N();Object.defineProperty(RI,"__esModule",{value:!0});RI.KnownTypeNamesRule=s6;var t6=xo(),n6=Vo(),r6=He(),AI=Mu(),i6=Ri(),a6=Aa();function s6(e){let t=e.getSchema(),n=t?t.getTypeMap():Object.create(null),r=Object.create(null);for(let a of e.getDocument().definitions)(0,AI.isTypeDefinitionNode)(a)&&(r[a.name.value]=!0);let i=[...Object.keys(n),...Object.keys(r)];return{NamedType(a,o,c,l,p){let f=a.name.value;if(!n[f]&&!r[f]){var y;let g=(y=p[2])!==null&&y!==void 0?y:c,_=g!=null&&o6(g);if(_&&rP.includes(f))return;let F=(0,n6.suggestionList)(f,_?rP.concat(i):i);e.reportError(new r6.GraphQLError(`Unknown type "${f}".`+(0,t6.didYouMean)(F),{nodes:a}))}}}}var rP=[...a6.specifiedScalarTypes,...i6.introspectionTypes].map(e=>e.name);function o6(e){return"kind"in e&&((0,AI.isTypeSystemDefinitionNode)(e)||(0,AI.isTypeSystemExtensionNode)(e))}});var wI=w(PI=>{"use strict";m();T();N();Object.defineProperty(PI,"__esModule",{value:!0});PI.LoneAnonymousOperationRule=l6;var u6=He(),c6=Rt();function l6(e){let t=0;return{Document(n){t=n.definitions.filter(r=>r.kind===c6.Kind.OPERATION_DEFINITION).length},OperationDefinition(n){!n.name&&t>1&&e.reportError(new u6.GraphQLError("This anonymous operation must be the only defined operation.",{nodes:n}))}}}});var CI=w(LI=>{"use strict";m();T();N();Object.defineProperty(LI,"__esModule",{value:!0});LI.LoneSchemaDefinitionRule=d6;var iP=He();function d6(e){var t,n,r;let i=e.getSchema(),a=(t=(n=(r=i==null?void 0:i.astNode)!==null&&r!==void 0?r:i==null?void 0:i.getQueryType())!==null&&n!==void 0?n:i==null?void 0:i.getMutationType())!==null&&t!==void 0?t:i==null?void 0:i.getSubscriptionType(),o=0;return{SchemaDefinition(c){if(a){e.reportError(new iP.GraphQLError("Cannot define a new schema within a schema extension.",{nodes:c}));return}o>0&&e.reportError(new iP.GraphQLError("Must provide only one schema definition.",{nodes:c})),++o}}}});var UI=w(BI=>{"use strict";m();T();N();Object.defineProperty(BI,"__esModule",{value:!0});BI.MaxIntrospectionDepthRule=m6;var p6=He(),aP=Rt(),f6=3;function m6(e){function t(n,r=Object.create(null),i=0){if(n.kind===aP.Kind.FRAGMENT_SPREAD){let a=n.name.value;if(r[a]===!0)return!1;let o=e.getFragment(a);if(!o)return!1;try{return r[a]=!0,t(o,r,i)}finally{r[a]=void 0}}if(n.kind===aP.Kind.FIELD&&(n.name.value==="fields"||n.name.value==="interfaces"||n.name.value==="possibleTypes"||n.name.value==="inputFields")&&(i++,i>=f6))return!0;if("selectionSet"in n&&n.selectionSet){for(let a of n.selectionSet.selections)if(t(a,r,i))return!0}return!1}return{Field(n){if((n.name.value==="__schema"||n.name.value==="__type")&&t(n))return e.reportError(new p6.GraphQLError("Maximum introspection depth exceeded",{nodes:[n]})),!1}}}});var MI=w(kI=>{"use strict";m();T();N();Object.defineProperty(kI,"__esModule",{value:!0});kI.NoFragmentCyclesRule=T6;var N6=He();function T6(e){let t=Object.create(null),n=[],r=Object.create(null);return{OperationDefinition:()=>!1,FragmentDefinition(a){return i(a),!1}};function i(a){if(t[a.name.value])return;let o=a.name.value;t[o]=!0;let c=e.getFragmentSpreads(a.selectionSet);if(c.length!==0){r[o]=n.length;for(let l of c){let p=l.name.value,f=r[p];if(n.push(l),f===void 0){let y=e.getFragment(p);y&&i(y)}else{let y=n.slice(f),g=y.slice(0,-1).map(_=>'"'+_.name.value+'"').join(", ");e.reportError(new N6.GraphQLError(`Cannot spread fragment "${p}" within itself`+(g!==""?` via ${g}.`:"."),{nodes:y}))}n.pop()}r[o]=void 0}}}});var qI=w(xI=>{"use strict";m();T();N();Object.defineProperty(xI,"__esModule",{value:!0});xI.NoUndefinedVariablesRule=h6;var E6=He();function h6(e){let t=Object.create(null);return{OperationDefinition:{enter(){t=Object.create(null)},leave(n){let r=e.getRecursiveVariableUsages(n);for(let{node:i}of r){let a=i.name.value;t[a]!==!0&&e.reportError(new E6.GraphQLError(n.name?`Variable "$${a}" is not defined by operation "${n.name.value}".`:`Variable "$${a}" is not defined.`,{nodes:[i,n]}))}}},VariableDefinition(n){t[n.variable.name.value]=!0}}}});var jI=w(VI=>{"use strict";m();T();N();Object.defineProperty(VI,"__esModule",{value:!0});VI.NoUnusedFragmentsRule=I6;var y6=He();function I6(e){let t=[],n=[];return{OperationDefinition(r){return t.push(r),!1},FragmentDefinition(r){return n.push(r),!1},Document:{leave(){let r=Object.create(null);for(let i of t)for(let a of e.getRecursivelyReferencedFragments(i))r[a.name.value]=!0;for(let i of n){let a=i.name.value;r[a]!==!0&&e.reportError(new y6.GraphQLError(`Fragment "${a}" is never used.`,{nodes:i}))}}}}}});var GI=w(KI=>{"use strict";m();T();N();Object.defineProperty(KI,"__esModule",{value:!0});KI.NoUnusedVariablesRule=_6;var g6=He();function _6(e){let t=[];return{OperationDefinition:{enter(){t=[]},leave(n){let r=Object.create(null),i=e.getRecursiveVariableUsages(n);for(let{node:a}of i)r[a.name.value]=!0;for(let a of t){let o=a.variable.name.value;r[o]!==!0&&e.reportError(new g6.GraphQLError(n.name?`Variable "$${o}" is never used in operation "${n.name.value}".`:`Variable "$${o}" is never used.`,{nodes:a}))}}},VariableDefinition(n){t.push(n)}}}});var YI=w(QI=>{"use strict";m();T();N();Object.defineProperty(QI,"__esModule",{value:!0});QI.sortValueNode=$I;var v6=hd(),ps=Rt();function $I(e){switch(e.kind){case ps.Kind.OBJECT:return Q(M({},e),{fields:S6(e.fields)});case ps.Kind.LIST:return Q(M({},e),{values:e.values.map($I)});case ps.Kind.INT:case ps.Kind.FLOAT:case ps.Kind.STRING:case ps.Kind.BOOLEAN:case ps.Kind.NULL:case ps.Kind.ENUM:case ps.Kind.VARIABLE:return e}}function S6(e){return e.map(t=>Q(M({},t),{value:$I(t.value)})).sort((t,n)=>(0,v6.naturalCompare)(t.name.value,n.name.value))}});var eg=w(ZI=>{"use strict";m();T();N();Object.defineProperty(ZI,"__esModule",{value:!0});ZI.OverlappingFieldsCanBeMergedRule=A6;var sP=Yt(),O6=He(),JI=Rt(),D6=li(),Qr=Ft(),b6=YI(),uP=Ra();function cP(e){return Array.isArray(e)?e.map(([t,n])=>`subfields "${t}" conflict because `+cP(n)).join(" and "):e}function A6(e){let t=new WI,n=new Map;return{SelectionSet(r){let i=R6(e,n,t,e.getParentType(),r);for(let[[a,o],c,l]of i){let p=cP(o);e.reportError(new O6.GraphQLError(`Fields "${a}" conflict because ${p}. Use different aliases on the fields to fetch both if this was intentional.`,{nodes:c.concat(l)}))}}}}function R6(e,t,n,r,i){let a=[],[o,c]=Mm(e,t,r,i);if(P6(e,a,t,n,o),c.length!==0)for(let l=0;l1)for(let c=0;c[a.value,o]));return n.every(a=>{let o=a.value,c=i.get(a.name.value);return c===void 0?!1:oP(o)===oP(c)})}function oP(e){return(0,D6.print)((0,b6.sortValueNode)(e))}function HI(e,t){return(0,Qr.isListType)(e)?(0,Qr.isListType)(t)?HI(e.ofType,t.ofType):!0:(0,Qr.isListType)(t)?!0:(0,Qr.isNonNullType)(e)?(0,Qr.isNonNullType)(t)?HI(e.ofType,t.ofType):!0:(0,Qr.isNonNullType)(t)?!0:(0,Qr.isLeafType)(e)||(0,Qr.isLeafType)(t)?e!==t:!1}function Mm(e,t,n,r){let i=t.get(r);if(i)return i;let a=Object.create(null),o=Object.create(null);dP(e,n,r,a,o);let c=[a,Object.keys(o)];return t.set(r,c),c}function zI(e,t,n){let r=t.get(n.selectionSet);if(r)return r;let i=(0,uP.typeFromAST)(e.getSchema(),n.typeCondition);return Mm(e,t,i,n.selectionSet)}function dP(e,t,n,r,i){for(let a of n.selections)switch(a.kind){case JI.Kind.FIELD:{let o=a.name.value,c;((0,Qr.isObjectType)(t)||(0,Qr.isInterfaceType)(t))&&(c=t.getFields()[o]);let l=a.alias?a.alias.value:o;r[l]||(r[l]=[]),r[l].push([t,a,c]);break}case JI.Kind.FRAGMENT_SPREAD:i[a.name.value]=!0;break;case JI.Kind.INLINE_FRAGMENT:{let o=a.typeCondition,c=o?(0,uP.typeFromAST)(e.getSchema(),o):t;dP(e,c,a.selectionSet,r,i);break}}}function L6(e,t,n,r){if(e.length>0)return[[t,e.map(([i])=>i)],[n,...e.map(([,i])=>i).flat()],[r,...e.map(([,,i])=>i).flat()]]}var WI=class{constructor(){this._data=new Map}has(t,n,r){var i;let[a,o]=t{"use strict";m();T();N();Object.defineProperty(ng,"__esModule",{value:!0});ng.PossibleFragmentSpreadsRule=B6;var xm=Yt(),pP=He(),tg=Ft(),fP=Sd(),C6=Ra();function B6(e){return{InlineFragment(t){let n=e.getType(),r=e.getParentType();if((0,tg.isCompositeType)(n)&&(0,tg.isCompositeType)(r)&&!(0,fP.doTypesOverlap)(e.getSchema(),n,r)){let i=(0,xm.inspect)(r),a=(0,xm.inspect)(n);e.reportError(new pP.GraphQLError(`Fragment cannot be spread here as objects of type "${i}" can never be of type "${a}".`,{nodes:t}))}},FragmentSpread(t){let n=t.name.value,r=U6(e,n),i=e.getParentType();if(r&&i&&!(0,fP.doTypesOverlap)(e.getSchema(),r,i)){let a=(0,xm.inspect)(i),o=(0,xm.inspect)(r);e.reportError(new pP.GraphQLError(`Fragment "${n}" cannot be spread here as objects of type "${a}" can never be of type "${o}".`,{nodes:t}))}}}}function U6(e,t){let n=e.getFragment(t);if(n){let r=(0,C6.typeFromAST)(e.getSchema(),n.typeCondition);if((0,tg.isCompositeType)(r))return r}}});var ag=w(ig=>{"use strict";m();T();N();Object.defineProperty(ig,"__esModule",{value:!0});ig.PossibleTypeExtensionsRule=q6;var k6=xo(),NP=Yt(),TP=Ir(),M6=Vo(),mP=He(),yn=Rt(),x6=Mu(),$c=Ft();function q6(e){let t=e.getSchema(),n=Object.create(null);for(let i of e.getDocument().definitions)(0,x6.isTypeDefinitionNode)(i)&&(n[i.name.value]=i);return{ScalarTypeExtension:r,ObjectTypeExtension:r,InterfaceTypeExtension:r,UnionTypeExtension:r,EnumTypeExtension:r,InputObjectTypeExtension:r};function r(i){let a=i.name.value,o=n[a],c=t==null?void 0:t.getType(a),l;if(o?l=V6[o.kind]:c&&(l=j6(c)),l){if(l!==i.kind){let p=K6(i.kind);e.reportError(new mP.GraphQLError(`Cannot extend non-${p} type "${a}".`,{nodes:o?[o,i]:i}))}}else{let p=Object.keys(M(M({},n),t==null?void 0:t.getTypeMap())),f=(0,M6.suggestionList)(a,p);e.reportError(new mP.GraphQLError(`Cannot extend type "${a}" because it is not defined.`+(0,k6.didYouMean)(f),{nodes:i.name}))}}}var V6={[yn.Kind.SCALAR_TYPE_DEFINITION]:yn.Kind.SCALAR_TYPE_EXTENSION,[yn.Kind.OBJECT_TYPE_DEFINITION]:yn.Kind.OBJECT_TYPE_EXTENSION,[yn.Kind.INTERFACE_TYPE_DEFINITION]:yn.Kind.INTERFACE_TYPE_EXTENSION,[yn.Kind.UNION_TYPE_DEFINITION]:yn.Kind.UNION_TYPE_EXTENSION,[yn.Kind.ENUM_TYPE_DEFINITION]:yn.Kind.ENUM_TYPE_EXTENSION,[yn.Kind.INPUT_OBJECT_TYPE_DEFINITION]:yn.Kind.INPUT_OBJECT_TYPE_EXTENSION};function j6(e){if((0,$c.isScalarType)(e))return yn.Kind.SCALAR_TYPE_EXTENSION;if((0,$c.isObjectType)(e))return yn.Kind.OBJECT_TYPE_EXTENSION;if((0,$c.isInterfaceType)(e))return yn.Kind.INTERFACE_TYPE_EXTENSION;if((0,$c.isUnionType)(e))return yn.Kind.UNION_TYPE_EXTENSION;if((0,$c.isEnumType)(e))return yn.Kind.ENUM_TYPE_EXTENSION;if((0,$c.isInputObjectType)(e))return yn.Kind.INPUT_OBJECT_TYPE_EXTENSION;(0,TP.invariant)(!1,"Unexpected type: "+(0,NP.inspect)(e))}function K6(e){switch(e){case yn.Kind.SCALAR_TYPE_EXTENSION:return"scalar";case yn.Kind.OBJECT_TYPE_EXTENSION:return"object";case yn.Kind.INTERFACE_TYPE_EXTENSION:return"interface";case yn.Kind.UNION_TYPE_EXTENSION:return"union";case yn.Kind.ENUM_TYPE_EXTENSION:return"enum";case yn.Kind.INPUT_OBJECT_TYPE_EXTENSION:return"input object";default:(0,TP.invariant)(!1,"Unexpected kind: "+(0,NP.inspect)(e))}}});var og=w(qm=>{"use strict";m();T();N();Object.defineProperty(qm,"__esModule",{value:!0});qm.ProvidedRequiredArgumentsOnDirectivesRule=gP;qm.ProvidedRequiredArgumentsRule=Q6;var hP=Yt(),EP=qo(),yP=He(),IP=Rt(),G6=li(),sg=Ft(),$6=$r();function Q6(e){return Q(M({},gP(e)),{Field:{leave(t){var n;let r=e.getFieldDef();if(!r)return!1;let i=new Set((n=t.arguments)===null||n===void 0?void 0:n.map(a=>a.name.value));for(let a of r.args)if(!i.has(a.name)&&(0,sg.isRequiredArgument)(a)){let o=(0,hP.inspect)(a.type);e.reportError(new yP.GraphQLError(`Field "${r.name}" argument "${a.name}" of type "${o}" is required, but it was not provided.`,{nodes:t}))}}}})}function gP(e){var t;let n=Object.create(null),r=e.getSchema(),i=(t=r==null?void 0:r.getDirectives())!==null&&t!==void 0?t:$6.specifiedDirectives;for(let c of i)n[c.name]=(0,EP.keyMap)(c.args.filter(sg.isRequiredArgument),l=>l.name);let a=e.getDocument().definitions;for(let c of a)if(c.kind===IP.Kind.DIRECTIVE_DEFINITION){var o;let l=(o=c.arguments)!==null&&o!==void 0?o:[];n[c.name.value]=(0,EP.keyMap)(l.filter(Y6),p=>p.name.value)}return{Directive:{leave(c){let l=c.name.value,p=n[l];if(p){var f;let y=(f=c.arguments)!==null&&f!==void 0?f:[],g=new Set(y.map(_=>_.name.value));for(let[_,F]of Object.entries(p))if(!g.has(_)){let U=(0,sg.isType)(F.type)?(0,hP.inspect)(F.type):(0,G6.print)(F.type);e.reportError(new yP.GraphQLError(`Directive "@${l}" argument "${_}" of type "${U}" is required, but it was not provided.`,{nodes:c}))}}}}}}function Y6(e){return e.type.kind===IP.Kind.NON_NULL_TYPE&&e.defaultValue==null}});var cg=w(ug=>{"use strict";m();T();N();Object.defineProperty(ug,"__esModule",{value:!0});ug.ScalarLeafsRule=J6;var _P=Yt(),vP=He(),SP=Ft();function J6(e){return{Field(t){let n=e.getType(),r=t.selectionSet;if(n){if((0,SP.isLeafType)((0,SP.getNamedType)(n))){if(r){let i=t.name.value,a=(0,_P.inspect)(n);e.reportError(new vP.GraphQLError(`Field "${i}" must not have a selection since type "${a}" has no subfields.`,{nodes:r}))}}else if(!r){let i=t.name.value,a=(0,_P.inspect)(n);e.reportError(new vP.GraphQLError(`Field "${i}" of type "${a}" must have a selection of subfields. Did you mean "${i} { ... }"?`,{nodes:t}))}}}}}});var dg=w(lg=>{"use strict";m();T();N();Object.defineProperty(lg,"__esModule",{value:!0});lg.printPathArray=H6;function H6(e){return e.map(t=>typeof t=="number"?"["+t.toString()+"]":"."+t).join("")}});var kd=w(Vm=>{"use strict";m();T();N();Object.defineProperty(Vm,"__esModule",{value:!0});Vm.addPath=z6;Vm.pathToArray=W6;function z6(e,t,n){return{prev:e,key:t,typename:n}}function W6(e){let t=[],n=e;for(;n;)t.push(n.key),n=n.prev;return t.reverse()}});var fg=w(pg=>{"use strict";m();T();N();Object.defineProperty(pg,"__esModule",{value:!0});pg.coerceInputValue=iz;var X6=xo(),jm=Yt(),Z6=Ir(),ez=Fm(),tz=Sa(),na=kd(),nz=dg(),rz=Vo(),fs=He(),Md=Ft();function iz(e,t,n=az){return xd(e,t,n,void 0)}function az(e,t,n){let r="Invalid value "+(0,jm.inspect)(t);throw e.length>0&&(r+=` at "value${(0,nz.printPathArray)(e)}"`),n.message=r+": "+n.message,n}function xd(e,t,n,r){if((0,Md.isNonNullType)(t)){if(e!=null)return xd(e,t.ofType,n,r);n((0,na.pathToArray)(r),e,new fs.GraphQLError(`Expected non-nullable type "${(0,jm.inspect)(t)}" not to be null.`));return}if(e==null)return null;if((0,Md.isListType)(t)){let i=t.ofType;return(0,ez.isIterableObject)(e)?Array.from(e,(a,o)=>{let c=(0,na.addPath)(r,o,void 0);return xd(a,i,n,c)}):[xd(e,i,n,r)]}if((0,Md.isInputObjectType)(t)){if(!(0,tz.isObjectLike)(e)){n((0,na.pathToArray)(r),e,new fs.GraphQLError(`Expected type "${t.name}" to be an object.`));return}let i={},a=t.getFields();for(let o of Object.values(a)){let c=e[o.name];if(c===void 0){if(o.defaultValue!==void 0)i[o.name]=o.defaultValue;else if((0,Md.isNonNullType)(o.type)){let l=(0,jm.inspect)(o.type);n((0,na.pathToArray)(r),e,new fs.GraphQLError(`Field "${o.name}" of required type "${l}" was not provided.`))}continue}i[o.name]=xd(c,o.type,n,(0,na.addPath)(r,o.name,t.name))}for(let o of Object.keys(e))if(!a[o]){let c=(0,rz.suggestionList)(o,Object.keys(t.getFields()));n((0,na.pathToArray)(r),e,new fs.GraphQLError(`Field "${o}" is not defined by type "${t.name}".`+(0,X6.didYouMean)(c)))}if(t.isOneOf){let o=Object.keys(i);o.length!==1&&n((0,na.pathToArray)(r),e,new fs.GraphQLError(`Exactly one key must be specified for OneOf type "${t.name}".`));let c=o[0],l=i[c];l===null&&n((0,na.pathToArray)(r).concat(c),l,new fs.GraphQLError(`Field "${c}" must be non-null.`))}return i}if((0,Md.isLeafType)(t)){let i;try{i=t.parseValue(e)}catch(a){a instanceof fs.GraphQLError?n((0,na.pathToArray)(r),e,a):n((0,na.pathToArray)(r),e,new fs.GraphQLError(`Expected type "${t.name}". `+a.message,{originalError:a}));return}return i===void 0&&n((0,na.pathToArray)(r),e,new fs.GraphQLError(`Expected type "${t.name}".`)),i}(0,Z6.invariant)(!1,"Unexpected input type: "+(0,jm.inspect)(t))}});var Vd=w(mg=>{"use strict";m();T();N();Object.defineProperty(mg,"__esModule",{value:!0});mg.valueFromAST=qd;var sz=Yt(),oz=Ir(),uz=qo(),Qc=Rt(),xu=Ft();function qd(e,t,n){if(e){if(e.kind===Qc.Kind.VARIABLE){let r=e.name.value;if(n==null||n[r]===void 0)return;let i=n[r];return i===null&&(0,xu.isNonNullType)(t)?void 0:i}if((0,xu.isNonNullType)(t))return e.kind===Qc.Kind.NULL?void 0:qd(e,t.ofType,n);if(e.kind===Qc.Kind.NULL)return null;if((0,xu.isListType)(t)){let r=t.ofType;if(e.kind===Qc.Kind.LIST){let a=[];for(let o of e.values)if(OP(o,n)){if((0,xu.isNonNullType)(r))return;a.push(null)}else{let c=qd(o,r,n);if(c===void 0)return;a.push(c)}return a}let i=qd(e,r,n);return i===void 0?void 0:[i]}if((0,xu.isInputObjectType)(t)){if(e.kind!==Qc.Kind.OBJECT)return;let r=Object.create(null),i=(0,uz.keyMap)(e.fields,a=>a.name.value);for(let a of Object.values(t.getFields())){let o=i[a.name];if(!o||OP(o.value,n)){if(a.defaultValue!==void 0)r[a.name]=a.defaultValue;else if((0,xu.isNonNullType)(a.type))return;continue}let c=qd(o.value,a.type,n);if(c===void 0)return;r[a.name]=c}if(t.isOneOf){let a=Object.keys(r);if(a.length!==1||r[a[0]]===null)return}return r}if((0,xu.isLeafType)(t)){let r;try{r=t.parseLiteral(e,n)}catch(i){return}return r===void 0?void 0:r}(0,oz.invariant)(!1,"Unexpected input type: "+(0,sz.inspect)(t))}}function OP(e,t){return e.kind===Qc.Kind.VARIABLE&&(t==null||t[e.name.value]===void 0)}});var Hc=w(jd=>{"use strict";m();T();N();Object.defineProperty(jd,"__esModule",{value:!0});jd.getArgumentValues=RP;jd.getDirectiveValues=Nz;jd.getVariableValues=fz;var Yc=Yt(),cz=qo(),lz=dg(),ms=He(),DP=Rt(),bP=li(),Jc=Ft(),dz=fg(),pz=Ra(),AP=Vd();function fz(e,t,n,r){let i=[],a=r==null?void 0:r.maxErrors;try{let o=mz(e,t,n,c=>{if(a!=null&&i.length>=a)throw new ms.GraphQLError("Too many errors processing variables, error limit reached. Execution aborted.");i.push(c)});if(i.length===0)return{coerced:o}}catch(o){i.push(o)}return{errors:i}}function mz(e,t,n,r){let i={};for(let a of t){let o=a.variable.name.value,c=(0,pz.typeFromAST)(e,a.type);if(!(0,Jc.isInputType)(c)){let p=(0,bP.print)(a.type);r(new ms.GraphQLError(`Variable "$${o}" expected value of type "${p}" which cannot be used as an input type.`,{nodes:a.type}));continue}if(!FP(n,o)){if(a.defaultValue)i[o]=(0,AP.valueFromAST)(a.defaultValue,c);else if((0,Jc.isNonNullType)(c)){let p=(0,Yc.inspect)(c);r(new ms.GraphQLError(`Variable "$${o}" of required type "${p}" was not provided.`,{nodes:a}))}continue}let l=n[o];if(l===null&&(0,Jc.isNonNullType)(c)){let p=(0,Yc.inspect)(c);r(new ms.GraphQLError(`Variable "$${o}" of non-null type "${p}" must not be null.`,{nodes:a}));continue}i[o]=(0,dz.coerceInputValue)(l,c,(p,f,y)=>{let g=`Variable "$${o}" got invalid value `+(0,Yc.inspect)(f);p.length>0&&(g+=` at "${o}${(0,lz.printPathArray)(p)}"`),r(new ms.GraphQLError(g+"; "+y.message,{nodes:a,originalError:y}))})}return i}function RP(e,t,n){var r;let i={},a=(r=t.arguments)!==null&&r!==void 0?r:[],o=(0,cz.keyMap)(a,c=>c.name.value);for(let c of e.args){let l=c.name,p=c.type,f=o[l];if(!f){if(c.defaultValue!==void 0)i[l]=c.defaultValue;else if((0,Jc.isNonNullType)(p))throw new ms.GraphQLError(`Argument "${l}" of required type "${(0,Yc.inspect)(p)}" was not provided.`,{nodes:t});continue}let y=f.value,g=y.kind===DP.Kind.NULL;if(y.kind===DP.Kind.VARIABLE){let F=y.name.value;if(n==null||!FP(n,F)){if(c.defaultValue!==void 0)i[l]=c.defaultValue;else if((0,Jc.isNonNullType)(p))throw new ms.GraphQLError(`Argument "${l}" of required type "${(0,Yc.inspect)(p)}" was provided the variable "$${F}" which was not provided a runtime value.`,{nodes:y});continue}g=n[F]==null}if(g&&(0,Jc.isNonNullType)(p))throw new ms.GraphQLError(`Argument "${l}" of non-null type "${(0,Yc.inspect)(p)}" must not be null.`,{nodes:y});let _=(0,AP.valueFromAST)(y,p,n);if(_===void 0)throw new ms.GraphQLError(`Argument "${l}" has invalid value ${(0,bP.print)(y)}.`,{nodes:y});i[l]=_}return i}function Nz(e,t,n){var r;let i=(r=t.directives)===null||r===void 0?void 0:r.find(a=>a.name.value===e.name);if(i)return RP(e,i,n)}function FP(e,t){return Object.prototype.hasOwnProperty.call(e,t)}});var $m=w(Gm=>{"use strict";m();T();N();Object.defineProperty(Gm,"__esModule",{value:!0});Gm.collectFields=hz;Gm.collectSubfields=yz;var Ng=Rt(),Tz=Ft(),PP=$r(),Ez=Ra(),wP=Hc();function hz(e,t,n,r,i){let a=new Map;return Km(e,t,n,r,i,a,new Set),a}function yz(e,t,n,r,i){let a=new Map,o=new Set;for(let c of i)c.selectionSet&&Km(e,t,n,r,c.selectionSet,a,o);return a}function Km(e,t,n,r,i,a,o){for(let c of i.selections)switch(c.kind){case Ng.Kind.FIELD:{if(!Tg(n,c))continue;let l=Iz(c),p=a.get(l);p!==void 0?p.push(c):a.set(l,[c]);break}case Ng.Kind.INLINE_FRAGMENT:{if(!Tg(n,c)||!LP(e,c,r))continue;Km(e,t,n,r,c.selectionSet,a,o);break}case Ng.Kind.FRAGMENT_SPREAD:{let l=c.name.value;if(o.has(l)||!Tg(n,c))continue;o.add(l);let p=t[l];if(!p||!LP(e,p,r))continue;Km(e,t,n,r,p.selectionSet,a,o);break}}}function Tg(e,t){let n=(0,wP.getDirectiveValues)(PP.GraphQLSkipDirective,t,e);if((n==null?void 0:n.if)===!0)return!1;let r=(0,wP.getDirectiveValues)(PP.GraphQLIncludeDirective,t,e);return(r==null?void 0:r.if)!==!1}function LP(e,t,n){let r=t.typeCondition;if(!r)return!0;let i=(0,Ez.typeFromAST)(e,r);return i===n?!0:(0,Tz.isAbstractType)(i)?e.isSubType(i,n):!1}function Iz(e){return e.alias?e.alias.value:e.name.value}});var hg=w(Eg=>{"use strict";m();T();N();Object.defineProperty(Eg,"__esModule",{value:!0});Eg.SingleFieldSubscriptionsRule=vz;var CP=He(),gz=Rt(),_z=$m();function vz(e){return{OperationDefinition(t){if(t.operation==="subscription"){let n=e.getSchema(),r=n.getSubscriptionType();if(r){let i=t.name?t.name.value:null,a=Object.create(null),o=e.getDocument(),c=Object.create(null);for(let p of o.definitions)p.kind===gz.Kind.FRAGMENT_DEFINITION&&(c[p.name.value]=p);let l=(0,_z.collectFields)(n,c,a,r,t.selectionSet);if(l.size>1){let y=[...l.values()].slice(1).flat();e.reportError(new CP.GraphQLError(i!=null?`Subscription "${i}" must select only one top level field.`:"Anonymous Subscription must select only one top level field.",{nodes:y}))}for(let p of l.values())p[0].name.value.startsWith("__")&&e.reportError(new CP.GraphQLError(i!=null?`Subscription "${i}" must not select an introspection top level field.`:"Anonymous Subscription must not select an introspection top level field.",{nodes:p}))}}}}}});var Qm=w(yg=>{"use strict";m();T();N();Object.defineProperty(yg,"__esModule",{value:!0});yg.groupBy=Sz;function Sz(e,t){let n=new Map;for(let r of e){let i=t(r),a=n.get(i);a===void 0?n.set(i,[r]):a.push(r)}return n}});var gg=w(Ig=>{"use strict";m();T();N();Object.defineProperty(Ig,"__esModule",{value:!0});Ig.UniqueArgumentDefinitionNamesRule=bz;var Oz=Qm(),Dz=He();function bz(e){return{DirectiveDefinition(r){var i;let a=(i=r.arguments)!==null&&i!==void 0?i:[];return n(`@${r.name.value}`,a)},InterfaceTypeDefinition:t,InterfaceTypeExtension:t,ObjectTypeDefinition:t,ObjectTypeExtension:t};function t(r){var i;let a=r.name.value,o=(i=r.fields)!==null&&i!==void 0?i:[];for(let l of o){var c;let p=l.name.value,f=(c=l.arguments)!==null&&c!==void 0?c:[];n(`${a}.${p}`,f)}return!1}function n(r,i){let a=(0,Oz.groupBy)(i,o=>o.name.value);for(let[o,c]of a)c.length>1&&e.reportError(new Dz.GraphQLError(`Argument "${r}(${o}:)" can only be defined once.`,{nodes:c.map(l=>l.name)}));return!1}}});var vg=w(_g=>{"use strict";m();T();N();Object.defineProperty(_g,"__esModule",{value:!0});_g.UniqueArgumentNamesRule=Fz;var Az=Qm(),Rz=He();function Fz(e){return{Field:t,Directive:t};function t(n){var r;let i=(r=n.arguments)!==null&&r!==void 0?r:[],a=(0,Az.groupBy)(i,o=>o.name.value);for(let[o,c]of a)c.length>1&&e.reportError(new Rz.GraphQLError(`There can be only one argument named "${o}".`,{nodes:c.map(l=>l.name)}))}}});var Og=w(Sg=>{"use strict";m();T();N();Object.defineProperty(Sg,"__esModule",{value:!0});Sg.UniqueDirectiveNamesRule=Pz;var BP=He();function Pz(e){let t=Object.create(null),n=e.getSchema();return{DirectiveDefinition(r){let i=r.name.value;if(n!=null&&n.getDirective(i)){e.reportError(new BP.GraphQLError(`Directive "@${i}" already exists in the schema. It cannot be redefined.`,{nodes:r.name}));return}return t[i]?e.reportError(new BP.GraphQLError(`There can be only one directive named "@${i}".`,{nodes:[t[i],r.name]})):t[i]=r.name,!1}}}});var Ag=w(bg=>{"use strict";m();T();N();Object.defineProperty(bg,"__esModule",{value:!0});bg.UniqueDirectivesPerLocationRule=Cz;var wz=He(),Dg=Rt(),UP=Mu(),Lz=$r();function Cz(e){let t=Object.create(null),n=e.getSchema(),r=n?n.getDirectives():Lz.specifiedDirectives;for(let c of r)t[c.name]=!c.isRepeatable;let i=e.getDocument().definitions;for(let c of i)c.kind===Dg.Kind.DIRECTIVE_DEFINITION&&(t[c.name.value]=!c.repeatable);let a=Object.create(null),o=Object.create(null);return{enter(c){if(!("directives"in c)||!c.directives)return;let l;if(c.kind===Dg.Kind.SCHEMA_DEFINITION||c.kind===Dg.Kind.SCHEMA_EXTENSION)l=a;else if((0,UP.isTypeDefinitionNode)(c)||(0,UP.isTypeExtensionNode)(c)){let p=c.name.value;l=o[p],l===void 0&&(o[p]=l=Object.create(null))}else l=Object.create(null);for(let p of c.directives){let f=p.name.value;t[f]&&(l[f]?e.reportError(new wz.GraphQLError(`The directive "@${f}" can only be used once at this location.`,{nodes:[l[f],p]})):l[f]=p)}}}}});var Fg=w(Rg=>{"use strict";m();T();N();Object.defineProperty(Rg,"__esModule",{value:!0});Rg.UniqueEnumValueNamesRule=Uz;var kP=He(),Bz=Ft();function Uz(e){let t=e.getSchema(),n=t?t.getTypeMap():Object.create(null),r=Object.create(null);return{EnumTypeDefinition:i,EnumTypeExtension:i};function i(a){var o;let c=a.name.value;r[c]||(r[c]=Object.create(null));let l=(o=a.values)!==null&&o!==void 0?o:[],p=r[c];for(let f of l){let y=f.name.value,g=n[c];(0,Bz.isEnumType)(g)&&g.getValue(y)?e.reportError(new kP.GraphQLError(`Enum value "${c}.${y}" already exists in the schema. It cannot also be defined in this type extension.`,{nodes:f.name})):p[y]?e.reportError(new kP.GraphQLError(`Enum value "${c}.${y}" can only be defined once.`,{nodes:[p[y],f.name]})):p[y]=f.name}return!1}}});var Lg=w(wg=>{"use strict";m();T();N();Object.defineProperty(wg,"__esModule",{value:!0});wg.UniqueFieldDefinitionNamesRule=kz;var MP=He(),Pg=Ft();function kz(e){let t=e.getSchema(),n=t?t.getTypeMap():Object.create(null),r=Object.create(null);return{InputObjectTypeDefinition:i,InputObjectTypeExtension:i,InterfaceTypeDefinition:i,InterfaceTypeExtension:i,ObjectTypeDefinition:i,ObjectTypeExtension:i};function i(a){var o;let c=a.name.value;r[c]||(r[c]=Object.create(null));let l=(o=a.fields)!==null&&o!==void 0?o:[],p=r[c];for(let f of l){let y=f.name.value;Mz(n[c],y)?e.reportError(new MP.GraphQLError(`Field "${c}.${y}" already exists in the schema. It cannot also be defined in this type extension.`,{nodes:f.name})):p[y]?e.reportError(new MP.GraphQLError(`Field "${c}.${y}" can only be defined once.`,{nodes:[p[y],f.name]})):p[y]=f.name}return!1}}function Mz(e,t){return(0,Pg.isObjectType)(e)||(0,Pg.isInterfaceType)(e)||(0,Pg.isInputObjectType)(e)?e.getFields()[t]!=null:!1}});var Bg=w(Cg=>{"use strict";m();T();N();Object.defineProperty(Cg,"__esModule",{value:!0});Cg.UniqueFragmentNamesRule=qz;var xz=He();function qz(e){let t=Object.create(null);return{OperationDefinition:()=>!1,FragmentDefinition(n){let r=n.name.value;return t[r]?e.reportError(new xz.GraphQLError(`There can be only one fragment named "${r}".`,{nodes:[t[r],n.name]})):t[r]=n.name,!1}}}});var kg=w(Ug=>{"use strict";m();T();N();Object.defineProperty(Ug,"__esModule",{value:!0});Ug.UniqueInputFieldNamesRule=Kz;var Vz=Ir(),jz=He();function Kz(e){let t=[],n=Object.create(null);return{ObjectValue:{enter(){t.push(n),n=Object.create(null)},leave(){let r=t.pop();r||(0,Vz.invariant)(!1),n=r}},ObjectField(r){let i=r.name.value;n[i]?e.reportError(new jz.GraphQLError(`There can be only one input field named "${i}".`,{nodes:[n[i],r.name]})):n[i]=r.name}}}});var xg=w(Mg=>{"use strict";m();T();N();Object.defineProperty(Mg,"__esModule",{value:!0});Mg.UniqueOperationNamesRule=$z;var Gz=He();function $z(e){let t=Object.create(null);return{OperationDefinition(n){let r=n.name;return r&&(t[r.value]?e.reportError(new Gz.GraphQLError(`There can be only one operation named "${r.value}".`,{nodes:[t[r.value],r]})):t[r.value]=r),!1},FragmentDefinition:()=>!1}}});var Vg=w(qg=>{"use strict";m();T();N();Object.defineProperty(qg,"__esModule",{value:!0});qg.UniqueOperationTypesRule=Qz;var xP=He();function Qz(e){let t=e.getSchema(),n=Object.create(null),r=t?{query:t.getQueryType(),mutation:t.getMutationType(),subscription:t.getSubscriptionType()}:{};return{SchemaDefinition:i,SchemaExtension:i};function i(a){var o;let c=(o=a.operationTypes)!==null&&o!==void 0?o:[];for(let l of c){let p=l.operation,f=n[p];r[p]?e.reportError(new xP.GraphQLError(`Type for ${p} already defined in the schema. It cannot be redefined.`,{nodes:l})):f?e.reportError(new xP.GraphQLError(`There can be only one ${p} type in schema.`,{nodes:[f,l]})):n[p]=l}return!1}}});var Kg=w(jg=>{"use strict";m();T();N();Object.defineProperty(jg,"__esModule",{value:!0});jg.UniqueTypeNamesRule=Yz;var qP=He();function Yz(e){let t=Object.create(null),n=e.getSchema();return{ScalarTypeDefinition:r,ObjectTypeDefinition:r,InterfaceTypeDefinition:r,UnionTypeDefinition:r,EnumTypeDefinition:r,InputObjectTypeDefinition:r};function r(i){let a=i.name.value;if(n!=null&&n.getType(a)){e.reportError(new qP.GraphQLError(`Type "${a}" already exists in the schema. It cannot also be defined in this type definition.`,{nodes:i.name}));return}return t[a]?e.reportError(new qP.GraphQLError(`There can be only one type named "${a}".`,{nodes:[t[a],i.name]})):t[a]=i.name,!1}}});var $g=w(Gg=>{"use strict";m();T();N();Object.defineProperty(Gg,"__esModule",{value:!0});Gg.UniqueVariableNamesRule=zz;var Jz=Qm(),Hz=He();function zz(e){return{OperationDefinition(t){var n;let r=(n=t.variableDefinitions)!==null&&n!==void 0?n:[],i=(0,Jz.groupBy)(r,a=>a.variable.name.value);for(let[a,o]of i)o.length>1&&e.reportError(new Hz.GraphQLError(`There can be only one variable named "$${a}".`,{nodes:o.map(c=>c.variable.name)}))}}}});var Jg=w(Yg=>{"use strict";m();T();N();Object.defineProperty(Yg,"__esModule",{value:!0});Yg.ValuesOfCorrectTypeRule=e4;var Wz=xo(),Kd=Yt(),Xz=qo(),Zz=Vo(),Pa=He(),Qg=Rt(),Ym=li(),Fa=Ft();function e4(e){let t={};return{OperationDefinition:{enter(){t={}}},VariableDefinition(n){t[n.variable.name.value]=n},ListValue(n){let r=(0,Fa.getNullableType)(e.getParentInputType());if(!(0,Fa.isListType)(r))return qu(e,n),!1},ObjectValue(n){let r=(0,Fa.getNamedType)(e.getInputType());if(!(0,Fa.isInputObjectType)(r))return qu(e,n),!1;let i=(0,Xz.keyMap)(n.fields,a=>a.name.value);for(let a of Object.values(r.getFields()))if(!i[a.name]&&(0,Fa.isRequiredInputField)(a)){let c=(0,Kd.inspect)(a.type);e.reportError(new Pa.GraphQLError(`Field "${r.name}.${a.name}" of required type "${c}" was not provided.`,{nodes:n}))}r.isOneOf&&t4(e,n,r,i,t)},ObjectField(n){let r=(0,Fa.getNamedType)(e.getParentInputType());if(!e.getInputType()&&(0,Fa.isInputObjectType)(r)){let a=(0,Zz.suggestionList)(n.name.value,Object.keys(r.getFields()));e.reportError(new Pa.GraphQLError(`Field "${n.name.value}" is not defined by type "${r.name}".`+(0,Wz.didYouMean)(a),{nodes:n}))}},NullValue(n){let r=e.getInputType();(0,Fa.isNonNullType)(r)&&e.reportError(new Pa.GraphQLError(`Expected value of type "${(0,Kd.inspect)(r)}", found ${(0,Ym.print)(n)}.`,{nodes:n}))},EnumValue:n=>qu(e,n),IntValue:n=>qu(e,n),FloatValue:n=>qu(e,n),StringValue:n=>qu(e,n),BooleanValue:n=>qu(e,n)}}function qu(e,t){let n=e.getInputType();if(!n)return;let r=(0,Fa.getNamedType)(n);if(!(0,Fa.isLeafType)(r)){let i=(0,Kd.inspect)(n);e.reportError(new Pa.GraphQLError(`Expected value of type "${i}", found ${(0,Ym.print)(t)}.`,{nodes:t}));return}try{if(r.parseLiteral(t,void 0)===void 0){let a=(0,Kd.inspect)(n);e.reportError(new Pa.GraphQLError(`Expected value of type "${a}", found ${(0,Ym.print)(t)}.`,{nodes:t}))}}catch(i){let a=(0,Kd.inspect)(n);i instanceof Pa.GraphQLError?e.reportError(i):e.reportError(new Pa.GraphQLError(`Expected value of type "${a}", found ${(0,Ym.print)(t)}; `+i.message,{nodes:t,originalError:i}))}}function t4(e,t,n,r,i){var a;let o=Object.keys(r);if(o.length!==1){e.reportError(new Pa.GraphQLError(`OneOf Input Object "${n.name}" must specify exactly one key.`,{nodes:[t]}));return}let l=(a=r[o[0]])===null||a===void 0?void 0:a.value,p=!l||l.kind===Qg.Kind.NULL,f=(l==null?void 0:l.kind)===Qg.Kind.VARIABLE;if(p){e.reportError(new Pa.GraphQLError(`Field "${n.name}.${o[0]}" must be non-null.`,{nodes:[t]}));return}if(f){let y=l.name.value;i[y].type.kind!==Qg.Kind.NON_NULL_TYPE&&e.reportError(new Pa.GraphQLError(`Variable "${y}" must be non-nullable to be used for OneOf Input Object "${n.name}".`,{nodes:[t]}))}}});var zg=w(Hg=>{"use strict";m();T();N();Object.defineProperty(Hg,"__esModule",{value:!0});Hg.VariablesAreInputTypesRule=s4;var n4=He(),r4=li(),i4=Ft(),a4=Ra();function s4(e){return{VariableDefinition(t){let n=(0,a4.typeFromAST)(e.getSchema(),t.type);if(n!==void 0&&!(0,i4.isInputType)(n)){let r=t.variable.name.value,i=(0,r4.print)(t.type);e.reportError(new n4.GraphQLError(`Variable "$${r}" cannot be non-input type "${i}".`,{nodes:t.type}))}}}}});var Xg=w(Wg=>{"use strict";m();T();N();Object.defineProperty(Wg,"__esModule",{value:!0});Wg.VariablesInAllowedPositionRule=l4;var VP=Yt(),o4=He(),u4=Rt(),jP=Ft(),KP=Sd(),c4=Ra();function l4(e){let t=Object.create(null);return{OperationDefinition:{enter(){t=Object.create(null)},leave(n){let r=e.getRecursiveVariableUsages(n);for(let{node:i,type:a,defaultValue:o}of r){let c=i.name.value,l=t[c];if(l&&a){let p=e.getSchema(),f=(0,c4.typeFromAST)(p,l.type);if(f&&!d4(p,f,l.defaultValue,a,o)){let y=(0,VP.inspect)(f),g=(0,VP.inspect)(a);e.reportError(new o4.GraphQLError(`Variable "$${c}" of type "${y}" used in position expecting type "${g}".`,{nodes:[l,i]}))}}}}},VariableDefinition(n){t[n.variable.name.value]=n}}}function d4(e,t,n,r,i){if((0,jP.isNonNullType)(r)&&!(0,jP.isNonNullType)(t)){if(!(n!=null&&n.kind!==u4.Kind.NULL)&&!(i!==void 0))return!1;let c=r.ofType;return(0,KP.isTypeSubTypeOf)(e,t,c)}return(0,KP.isTypeSubTypeOf)(e,t,r)}});var Zg=w($o=>{"use strict";m();T();N();Object.defineProperty($o,"__esModule",{value:!0});$o.specifiedSDLRules=$o.specifiedRules=$o.recommendedRules=void 0;var p4=TI(),f4=hI(),m4=II(),GP=gI(),$P=OI(),N4=bI(),QP=FI(),T4=wI(),E4=CI(),h4=UI(),y4=MI(),I4=qI(),g4=jI(),_4=GI(),v4=eg(),S4=rg(),O4=ag(),YP=og(),D4=cg(),b4=hg(),A4=gg(),JP=vg(),R4=Og(),HP=Ag(),F4=Fg(),P4=Lg(),w4=Bg(),zP=kg(),L4=xg(),C4=Vg(),B4=Kg(),U4=$g(),k4=Jg(),M4=zg(),x4=Xg(),WP=Object.freeze([h4.MaxIntrospectionDepthRule]);$o.recommendedRules=WP;var q4=Object.freeze([p4.ExecutableDefinitionsRule,L4.UniqueOperationNamesRule,T4.LoneAnonymousOperationRule,b4.SingleFieldSubscriptionsRule,QP.KnownTypeNamesRule,m4.FragmentsOnCompositeTypesRule,M4.VariablesAreInputTypesRule,D4.ScalarLeafsRule,f4.FieldsOnCorrectTypeRule,w4.UniqueFragmentNamesRule,N4.KnownFragmentNamesRule,g4.NoUnusedFragmentsRule,S4.PossibleFragmentSpreadsRule,y4.NoFragmentCyclesRule,U4.UniqueVariableNamesRule,I4.NoUndefinedVariablesRule,_4.NoUnusedVariablesRule,$P.KnownDirectivesRule,HP.UniqueDirectivesPerLocationRule,GP.KnownArgumentNamesRule,JP.UniqueArgumentNamesRule,k4.ValuesOfCorrectTypeRule,YP.ProvidedRequiredArgumentsRule,x4.VariablesInAllowedPositionRule,v4.OverlappingFieldsCanBeMergedRule,zP.UniqueInputFieldNamesRule,...WP]);$o.specifiedRules=q4;var V4=Object.freeze([E4.LoneSchemaDefinitionRule,C4.UniqueOperationTypesRule,B4.UniqueTypeNamesRule,F4.UniqueEnumValueNamesRule,P4.UniqueFieldDefinitionNamesRule,A4.UniqueArgumentDefinitionNamesRule,R4.UniqueDirectiveNamesRule,QP.KnownTypeNamesRule,$P.KnownDirectivesRule,HP.UniqueDirectivesPerLocationRule,O4.PossibleTypeExtensionsRule,GP.KnownArgumentNamesOnDirectivesRule,JP.UniqueArgumentNamesRule,zP.UniqueInputFieldNamesRule,YP.ProvidedRequiredArgumentsOnDirectivesRule]);$o.specifiedSDLRules=V4});var n_=w(Qo=>{"use strict";m();T();N();Object.defineProperty(Qo,"__esModule",{value:!0});Qo.ValidationContext=Qo.SDLValidationContext=Qo.ASTValidationContext=void 0;var XP=Rt(),j4=Fu(),ZP=Cm(),Gd=class{constructor(t,n){this._ast=t,this._fragments=void 0,this._fragmentSpreads=new Map,this._recursivelyReferencedFragments=new Map,this._onError=n}get[Symbol.toStringTag](){return"ASTValidationContext"}reportError(t){this._onError(t)}getDocument(){return this._ast}getFragment(t){let n;if(this._fragments)n=this._fragments;else{n=Object.create(null);for(let r of this.getDocument().definitions)r.kind===XP.Kind.FRAGMENT_DEFINITION&&(n[r.name.value]=r);this._fragments=n}return n[t]}getFragmentSpreads(t){let n=this._fragmentSpreads.get(t);if(!n){n=[];let r=[t],i;for(;i=r.pop();)for(let a of i.selections)a.kind===XP.Kind.FRAGMENT_SPREAD?n.push(a):a.selectionSet&&r.push(a.selectionSet);this._fragmentSpreads.set(t,n)}return n}getRecursivelyReferencedFragments(t){let n=this._recursivelyReferencedFragments.get(t);if(!n){n=[];let r=Object.create(null),i=[t.selectionSet],a;for(;a=i.pop();)for(let o of this.getFragmentSpreads(a)){let c=o.name.value;if(r[c]!==!0){r[c]=!0;let l=this.getFragment(c);l&&(n.push(l),i.push(l.selectionSet))}}this._recursivelyReferencedFragments.set(t,n)}return n}};Qo.ASTValidationContext=Gd;var e_=class extends Gd{constructor(t,n,r){super(t,r),this._schema=n}get[Symbol.toStringTag](){return"SDLValidationContext"}getSchema(){return this._schema}};Qo.SDLValidationContext=e_;var t_=class extends Gd{constructor(t,n,r,i){super(n,i),this._schema=t,this._typeInfo=r,this._variableUsages=new Map,this._recursiveVariableUsages=new Map}get[Symbol.toStringTag](){return"ValidationContext"}getSchema(){return this._schema}getVariableUsages(t){let n=this._variableUsages.get(t);if(!n){let r=[],i=new ZP.TypeInfo(this._schema);(0,j4.visit)(t,(0,ZP.visitWithTypeInfo)(i,{VariableDefinition:()=>!1,Variable(a){r.push({node:a,type:i.getInputType(),defaultValue:i.getDefaultValue()})}})),n=r,this._variableUsages.set(t,n)}return n}getRecursiveVariableUsages(t){let n=this._recursiveVariableUsages.get(t);if(!n){n=this.getVariableUsages(t);for(let r of this.getRecursivelyReferencedFragments(t))n=n.concat(this.getVariableUsages(r));this._recursiveVariableUsages.set(t,n)}return n}getType(){return this._typeInfo.getType()}getParentType(){return this._typeInfo.getParentType()}getInputType(){return this._typeInfo.getInputType()}getParentInputType(){return this._typeInfo.getParentInputType()}getFieldDef(){return this._typeInfo.getFieldDef()}getDirective(){return this._typeInfo.getDirective()}getArgument(){return this._typeInfo.getArgument()}getEnumValue(){return this._typeInfo.getEnumValue()}};Qo.ValidationContext=t_});var Wc=w(zc=>{"use strict";m();T();N();Object.defineProperty(zc,"__esModule",{value:!0});zc.assertValidSDL=Y4;zc.assertValidSDLExtension=J4;zc.validate=Q4;zc.validateSDL=r_;var K4=Cr(),G4=He(),Jm=Fu(),$4=Cd(),ew=Cm(),tw=Zg(),nw=n_();function Q4(e,t,n=tw.specifiedRules,r,i=new ew.TypeInfo(e)){var a;let o=(a=r==null?void 0:r.maxErrors)!==null&&a!==void 0?a:100;t||(0,K4.devAssert)(!1,"Must provide document."),(0,$4.assertValidSchema)(e);let c=Object.freeze({}),l=[],p=new nw.ValidationContext(e,t,i,y=>{if(l.length>=o)throw l.push(new G4.GraphQLError("Too many validation errors, error limit reached. Validation aborted.")),c;l.push(y)}),f=(0,Jm.visitInParallel)(n.map(y=>y(p)));try{(0,Jm.visit)(t,(0,ew.visitWithTypeInfo)(i,f))}catch(y){if(y!==c)throw y}return l}function r_(e,t,n=tw.specifiedSDLRules){let r=[],i=new nw.SDLValidationContext(e,t,o=>{r.push(o)}),a=n.map(o=>o(i));return(0,Jm.visit)(e,(0,Jm.visitInParallel)(a)),r}function Y4(e){let t=r_(e);if(t.length!==0)throw new Error(t.map(n=>n.message).join(` -`))}function J4(e,t){let n=n_(e,t);if(n.length!==0)throw new Error(n.map(r=>r.message).join(` +`))}function J4(e,t){let n=r_(e,t);if(n.length!==0)throw new Error(n.map(r=>r.message).join(` -`))}});var nw=w(r_=>{"use strict";f();N();m();Object.defineProperty(r_,"__esModule",{value:!0});r_.memoize3=H4;function H4(e){let t;return function(r,i,a){t===void 0&&(t=new WeakMap);let o=t.get(r);o===void 0&&(o=new WeakMap,t.set(r,o));let c=o.get(i);c===void 0&&(c=new WeakMap,o.set(i,c));let l=c.get(a);return l===void 0&&(l=e(r,i,a),c.set(a,l)),l}}});var rw=w(i_=>{"use strict";f();N();m();Object.defineProperty(i_,"__esModule",{value:!0});i_.promiseForObject=z4;function z4(e){return Promise.all(Object.values(e)).then(t=>{let n=Object.create(null);for(let[r,i]of Object.keys(e).entries())n[i]=t[r];return n})}});var iw=w(a_=>{"use strict";f();N();m();Object.defineProperty(a_,"__esModule",{value:!0});a_.promiseReduce=X4;var W4=Jf();function X4(e,t,n){let r=n;for(let i of e)r=(0,W4.isPromise)(r)?r.then(a=>t(a,i)):t(r,i);return r}});var aw=w(o_=>{"use strict";f();N();m();Object.defineProperty(o_,"__esModule",{value:!0});o_.toError=eW;var Z4=Yt();function eW(e){return e instanceof Error?e:new s_(e)}var s_=class extends Error{constructor(t){super("Unexpected error value: "+(0,Z4.inspect)(t)),this.name="NonErrorThrown",this.thrownValue=t}}});var Ym=w(u_=>{"use strict";f();N();m();Object.defineProperty(u_,"__esModule",{value:!0});u_.locatedError=rW;var tW=aw(),nW=He();function rW(e,t,n){var r;let i=(0,tW.toError)(e);return iW(i)?i:new nW.GraphQLError(i.message,{nodes:(r=i.nodes)!==null&&r!==void 0?r:t,source:i.source,positions:i.positions,path:n,originalError:i})}function iW(e){return Array.isArray(e.path)}});var $d=w(wi=>{"use strict";f();N();m();Object.defineProperty(wi,"__esModule",{value:!0});wi.assertValidExecutionArguments=fw;wi.buildExecutionContext=mw;wi.buildResolveInfo=Tw;wi.defaultTypeResolver=wi.defaultFieldResolver=void 0;wi.execute=pw;wi.executeSync=dW;wi.getFieldDef=hw;var l_=Cr(),Vu=Yt(),aW=Ir(),sW=Am(),f_=Sa(),ra=Jf(),oW=nw(),ju=Ud(),sw=rw(),uW=iw(),Pi=He(),Hm=Ym(),c_=Oa(),ow=Rt(),Qo=Ft(),Xc=Ri(),cW=Ld(),lw=Km(),dw=Hc(),lW=(0,oW.memoize3)((e,t,n)=>(0,lw.collectSubfields)(e.schema,e.fragments,e.variableValues,t,n));function pw(e){arguments.length<2||(0,l_.devAssert)(!1,"graphql@16 dropped long-deprecated support for positional arguments, please pass an object instead.");let{schema:t,document:n,variableValues:r,rootValue:i}=e;fw(t,n,r);let a=mw(e);if(!("schema"in a))return{errors:a};try{let{operation:o}=a,c=pW(a,o,i);return(0,ra.isPromise)(c)?c.then(l=>Jm(l,a.errors),l=>(a.errors.push(l),Jm(null,a.errors))):Jm(c,a.errors)}catch(o){return a.errors.push(o),Jm(null,a.errors)}}function dW(e){let t=pw(e);if((0,ra.isPromise)(t))throw new Error("GraphQL execution failed to complete synchronously.");return t}function Jm(e,t){return t.length===0?{data:e}:{errors:t,data:e}}function fw(e,t,n){t||(0,l_.devAssert)(!1,"Must provide document."),(0,cW.assertValidSchema)(e),n==null||(0,f_.isObjectLike)(n)||(0,l_.devAssert)(!1,"Variables must be provided as an Object where each property is a variable value. Perhaps look to see if an unparsed JSON string was provided.")}function mw(e){var t,n;let{schema:r,document:i,rootValue:a,contextValue:o,variableValues:c,operationName:l,fieldResolver:p,typeResolver:T,subscribeFieldResolver:y}=e,g,_=Object.create(null);for(let K of i.definitions)switch(K.kind){case ow.Kind.OPERATION_DEFINITION:if(l==null){if(g!==void 0)return[new Pi.GraphQLError("Must provide operation name if query contains multiple operations.")];g=K}else((t=K.name)===null||t===void 0?void 0:t.value)===l&&(g=K);break;case ow.Kind.FRAGMENT_DEFINITION:_[K.name.value]=K;break;default:}if(!g)return l!=null?[new Pi.GraphQLError(`Unknown operation named "${l}".`)]:[new Pi.GraphQLError("Must provide an operation.")];let F=(n=g.variableDefinitions)!==null&&n!==void 0?n:[],U=(0,dw.getVariableValues)(r,F,c!=null?c:{},{maxErrors:50});return U.errors?U.errors:{schema:r,fragments:_,rootValue:a,contextValue:o,operation:g,variableValues:U.coerced,fieldResolver:p!=null?p:p_,typeResolver:T!=null?T:Ew,subscribeFieldResolver:y!=null?y:p_,errors:[]}}function pW(e,t,n){let r=e.schema.getRootType(t.operation);if(r==null)throw new Pi.GraphQLError(`Schema is not configured to execute ${t.operation} operation.`,{nodes:t});let i=(0,lw.collectFields)(e.schema,e.fragments,e.variableValues,r,t.selectionSet),a=void 0;switch(t.operation){case c_.OperationTypeNode.QUERY:return zm(e,r,n,a,i);case c_.OperationTypeNode.MUTATION:return fW(e,r,n,a,i);case c_.OperationTypeNode.SUBSCRIPTION:return zm(e,r,n,a,i)}}function fW(e,t,n,r,i){return(0,uW.promiseReduce)(i.entries(),(a,[o,c])=>{let l=(0,ju.addPath)(r,o,t.name),p=Nw(e,t,n,c,l);return p===void 0?a:(0,ra.isPromise)(p)?p.then(T=>(a[o]=T,a)):(a[o]=p,a)},Object.create(null))}function zm(e,t,n,r,i){let a=Object.create(null),o=!1;try{for(let[c,l]of i.entries()){let p=(0,ju.addPath)(r,c,t.name),T=Nw(e,t,n,l,p);T!==void 0&&(a[c]=T,(0,ra.isPromise)(T)&&(o=!0))}}catch(c){if(o)return(0,sw.promiseForObject)(a).finally(()=>{throw c});throw c}return o?(0,sw.promiseForObject)(a):a}function Nw(e,t,n,r,i){var a;let o=hw(e.schema,t,r[0]);if(!o)return;let c=o.type,l=(a=o.resolve)!==null&&a!==void 0?a:e.fieldResolver,p=Tw(e,o,r,t,i);try{let T=(0,dw.getArgumentValues)(o,r[0],e.variableValues),y=e.contextValue,g=l(n,T,y,p),_;return(0,ra.isPromise)(g)?_=g.then(F=>Gd(e,c,r,p,i,F)):_=Gd(e,c,r,p,i,g),(0,ra.isPromise)(_)?_.then(void 0,F=>{let U=(0,Hm.locatedError)(F,r,(0,ju.pathToArray)(i));return Wm(U,c,e)}):_}catch(T){let y=(0,Hm.locatedError)(T,r,(0,ju.pathToArray)(i));return Wm(y,c,e)}}function Tw(e,t,n,r,i){return{fieldName:t.name,fieldNodes:n,returnType:t.type,parentType:r,path:i,schema:e.schema,fragments:e.fragments,rootValue:e.rootValue,operation:e.operation,variableValues:e.variableValues}}function Wm(e,t,n){if((0,Qo.isNonNullType)(t))throw e;return n.errors.push(e),null}function Gd(e,t,n,r,i,a){if(a instanceof Error)throw a;if((0,Qo.isNonNullType)(t)){let o=Gd(e,t.ofType,n,r,i,a);if(o===null)throw new Error(`Cannot return null for non-nullable field ${r.parentType.name}.${r.fieldName}.`);return o}if(a==null)return null;if((0,Qo.isListType)(t))return mW(e,t,n,r,i,a);if((0,Qo.isLeafType)(t))return NW(t,a);if((0,Qo.isAbstractType)(t))return TW(e,t,n,r,i,a);if((0,Qo.isObjectType)(t))return d_(e,t,n,r,i,a);(0,aW.invariant)(!1,"Cannot complete value of unexpected output type: "+(0,Vu.inspect)(t))}function mW(e,t,n,r,i,a){if(!(0,sW.isIterableObject)(a))throw new Pi.GraphQLError(`Expected Iterable, but did not find one for field "${r.parentType.name}.${r.fieldName}".`);let o=t.ofType,c=!1,l=Array.from(a,(p,T)=>{let y=(0,ju.addPath)(i,T,void 0);try{let g;return(0,ra.isPromise)(p)?g=p.then(_=>Gd(e,o,n,r,y,_)):g=Gd(e,o,n,r,y,p),(0,ra.isPromise)(g)?(c=!0,g.then(void 0,_=>{let F=(0,Hm.locatedError)(_,n,(0,ju.pathToArray)(y));return Wm(F,o,e)})):g}catch(g){let _=(0,Hm.locatedError)(g,n,(0,ju.pathToArray)(y));return Wm(_,o,e)}});return c?Promise.all(l):l}function NW(e,t){let n=e.serialize(t);if(n==null)throw new Error(`Expected \`${(0,Vu.inspect)(e)}.serialize(${(0,Vu.inspect)(t)})\` to return non-nullable value, returned: ${(0,Vu.inspect)(n)}`);return n}function TW(e,t,n,r,i,a){var o;let c=(o=t.resolveType)!==null&&o!==void 0?o:e.typeResolver,l=e.contextValue,p=c(a,l,r,t);return(0,ra.isPromise)(p)?p.then(T=>d_(e,uw(T,e,t,n,r,a),n,r,i,a)):d_(e,uw(p,e,t,n,r,a),n,r,i,a)}function uw(e,t,n,r,i,a){if(e==null)throw new Pi.GraphQLError(`Abstract type "${n.name}" must resolve to an Object type at runtime for field "${i.parentType.name}.${i.fieldName}". Either the "${n.name}" type should provide a "resolveType" function or each possible type should provide an "isTypeOf" function.`,r);if((0,Qo.isObjectType)(e))throw new Pi.GraphQLError("Support for returning GraphQLObjectType from resolveType was removed in graphql-js@16.0.0 please return type name instead.");if(typeof e!="string")throw new Pi.GraphQLError(`Abstract type "${n.name}" must resolve to an Object type at runtime for field "${i.parentType.name}.${i.fieldName}" with value ${(0,Vu.inspect)(a)}, received "${(0,Vu.inspect)(e)}".`);let o=t.schema.getType(e);if(o==null)throw new Pi.GraphQLError(`Abstract type "${n.name}" was resolved to a type "${e}" that does not exist inside the schema.`,{nodes:r});if(!(0,Qo.isObjectType)(o))throw new Pi.GraphQLError(`Abstract type "${n.name}" was resolved to a non-object type "${e}".`,{nodes:r});if(!t.schema.isSubType(n,o))throw new Pi.GraphQLError(`Runtime Object type "${o.name}" is not a possible type for "${n.name}".`,{nodes:r});return o}function d_(e,t,n,r,i,a){let o=lW(e,t,n);if(t.isTypeOf){let c=t.isTypeOf(a,e.contextValue,r);if((0,ra.isPromise)(c))return c.then(l=>{if(!l)throw cw(t,a,n);return zm(e,t,a,i,o)});if(!c)throw cw(t,a,n)}return zm(e,t,a,i,o)}function cw(e,t,n){return new Pi.GraphQLError(`Expected value of type "${e.name}" but got: ${(0,Vu.inspect)(t)}.`,{nodes:n})}var Ew=function(e,t,n,r){if((0,f_.isObjectLike)(e)&&typeof e.__typename=="string")return e.__typename;let i=n.schema.getPossibleTypes(r),a=[];for(let o=0;o{for(let c=0;c{"use strict";f();N();m();Object.defineProperty(Xm,"__esModule",{value:!0});Xm.graphql=vW;Xm.graphqlSync=SW;var EW=Cr(),hW=Jf(),yW=xc(),IW=Ld(),gW=Wc(),_W=$d();function vW(e){return new Promise(t=>t(yw(e)))}function SW(e){let t=yw(e);if((0,hW.isPromise)(t))throw new Error("GraphQL execution failed to complete synchronously.");return t}function yw(e){arguments.length<2||(0,EW.devAssert)(!1,"graphql@16 dropped long-deprecated support for positional arguments, please pass an object instead.");let{schema:t,source:n,rootValue:r,contextValue:i,variableValues:a,operationName:o,fieldResolver:c,typeResolver:l}=e,p=(0,IW.validateSchema)(t);if(p.length>0)return{errors:p};let T;try{T=(0,yW.parse)(n)}catch(g){return{errors:[g]}}let y=(0,gW.validate)(t,T);return y.length>0?{errors:y}:(0,_W.execute)({schema:t,document:T,rootValue:r,contextValue:i,variableValues:a,operationName:o,fieldResolver:c,typeResolver:l})}});var vw=w(ye=>{"use strict";f();N();m();Object.defineProperty(ye,"__esModule",{value:!0});Object.defineProperty(ye,"DEFAULT_DEPRECATION_REASON",{enumerable:!0,get:function(){return ia.DEFAULT_DEPRECATION_REASON}});Object.defineProperty(ye,"GRAPHQL_MAX_INT",{enumerable:!0,get:function(){return Ns.GRAPHQL_MAX_INT}});Object.defineProperty(ye,"GRAPHQL_MIN_INT",{enumerable:!0,get:function(){return Ns.GRAPHQL_MIN_INT}});Object.defineProperty(ye,"GraphQLBoolean",{enumerable:!0,get:function(){return Ns.GraphQLBoolean}});Object.defineProperty(ye,"GraphQLDeprecatedDirective",{enumerable:!0,get:function(){return ia.GraphQLDeprecatedDirective}});Object.defineProperty(ye,"GraphQLDirective",{enumerable:!0,get:function(){return ia.GraphQLDirective}});Object.defineProperty(ye,"GraphQLEnumType",{enumerable:!0,get:function(){return nt.GraphQLEnumType}});Object.defineProperty(ye,"GraphQLFloat",{enumerable:!0,get:function(){return Ns.GraphQLFloat}});Object.defineProperty(ye,"GraphQLID",{enumerable:!0,get:function(){return Ns.GraphQLID}});Object.defineProperty(ye,"GraphQLIncludeDirective",{enumerable:!0,get:function(){return ia.GraphQLIncludeDirective}});Object.defineProperty(ye,"GraphQLInputObjectType",{enumerable:!0,get:function(){return nt.GraphQLInputObjectType}});Object.defineProperty(ye,"GraphQLInt",{enumerable:!0,get:function(){return Ns.GraphQLInt}});Object.defineProperty(ye,"GraphQLInterfaceType",{enumerable:!0,get:function(){return nt.GraphQLInterfaceType}});Object.defineProperty(ye,"GraphQLList",{enumerable:!0,get:function(){return nt.GraphQLList}});Object.defineProperty(ye,"GraphQLNonNull",{enumerable:!0,get:function(){return nt.GraphQLNonNull}});Object.defineProperty(ye,"GraphQLObjectType",{enumerable:!0,get:function(){return nt.GraphQLObjectType}});Object.defineProperty(ye,"GraphQLOneOfDirective",{enumerable:!0,get:function(){return ia.GraphQLOneOfDirective}});Object.defineProperty(ye,"GraphQLScalarType",{enumerable:!0,get:function(){return nt.GraphQLScalarType}});Object.defineProperty(ye,"GraphQLSchema",{enumerable:!0,get:function(){return m_.GraphQLSchema}});Object.defineProperty(ye,"GraphQLSkipDirective",{enumerable:!0,get:function(){return ia.GraphQLSkipDirective}});Object.defineProperty(ye,"GraphQLSpecifiedByDirective",{enumerable:!0,get:function(){return ia.GraphQLSpecifiedByDirective}});Object.defineProperty(ye,"GraphQLString",{enumerable:!0,get:function(){return Ns.GraphQLString}});Object.defineProperty(ye,"GraphQLUnionType",{enumerable:!0,get:function(){return nt.GraphQLUnionType}});Object.defineProperty(ye,"SchemaMetaFieldDef",{enumerable:!0,get:function(){return Yr.SchemaMetaFieldDef}});Object.defineProperty(ye,"TypeKind",{enumerable:!0,get:function(){return Yr.TypeKind}});Object.defineProperty(ye,"TypeMetaFieldDef",{enumerable:!0,get:function(){return Yr.TypeMetaFieldDef}});Object.defineProperty(ye,"TypeNameMetaFieldDef",{enumerable:!0,get:function(){return Yr.TypeNameMetaFieldDef}});Object.defineProperty(ye,"__Directive",{enumerable:!0,get:function(){return Yr.__Directive}});Object.defineProperty(ye,"__DirectiveLocation",{enumerable:!0,get:function(){return Yr.__DirectiveLocation}});Object.defineProperty(ye,"__EnumValue",{enumerable:!0,get:function(){return Yr.__EnumValue}});Object.defineProperty(ye,"__Field",{enumerable:!0,get:function(){return Yr.__Field}});Object.defineProperty(ye,"__InputValue",{enumerable:!0,get:function(){return Yr.__InputValue}});Object.defineProperty(ye,"__Schema",{enumerable:!0,get:function(){return Yr.__Schema}});Object.defineProperty(ye,"__Type",{enumerable:!0,get:function(){return Yr.__Type}});Object.defineProperty(ye,"__TypeKind",{enumerable:!0,get:function(){return Yr.__TypeKind}});Object.defineProperty(ye,"assertAbstractType",{enumerable:!0,get:function(){return nt.assertAbstractType}});Object.defineProperty(ye,"assertCompositeType",{enumerable:!0,get:function(){return nt.assertCompositeType}});Object.defineProperty(ye,"assertDirective",{enumerable:!0,get:function(){return ia.assertDirective}});Object.defineProperty(ye,"assertEnumType",{enumerable:!0,get:function(){return nt.assertEnumType}});Object.defineProperty(ye,"assertEnumValueName",{enumerable:!0,get:function(){return _w.assertEnumValueName}});Object.defineProperty(ye,"assertInputObjectType",{enumerable:!0,get:function(){return nt.assertInputObjectType}});Object.defineProperty(ye,"assertInputType",{enumerable:!0,get:function(){return nt.assertInputType}});Object.defineProperty(ye,"assertInterfaceType",{enumerable:!0,get:function(){return nt.assertInterfaceType}});Object.defineProperty(ye,"assertLeafType",{enumerable:!0,get:function(){return nt.assertLeafType}});Object.defineProperty(ye,"assertListType",{enumerable:!0,get:function(){return nt.assertListType}});Object.defineProperty(ye,"assertName",{enumerable:!0,get:function(){return _w.assertName}});Object.defineProperty(ye,"assertNamedType",{enumerable:!0,get:function(){return nt.assertNamedType}});Object.defineProperty(ye,"assertNonNullType",{enumerable:!0,get:function(){return nt.assertNonNullType}});Object.defineProperty(ye,"assertNullableType",{enumerable:!0,get:function(){return nt.assertNullableType}});Object.defineProperty(ye,"assertObjectType",{enumerable:!0,get:function(){return nt.assertObjectType}});Object.defineProperty(ye,"assertOutputType",{enumerable:!0,get:function(){return nt.assertOutputType}});Object.defineProperty(ye,"assertScalarType",{enumerable:!0,get:function(){return nt.assertScalarType}});Object.defineProperty(ye,"assertSchema",{enumerable:!0,get:function(){return m_.assertSchema}});Object.defineProperty(ye,"assertType",{enumerable:!0,get:function(){return nt.assertType}});Object.defineProperty(ye,"assertUnionType",{enumerable:!0,get:function(){return nt.assertUnionType}});Object.defineProperty(ye,"assertValidSchema",{enumerable:!0,get:function(){return gw.assertValidSchema}});Object.defineProperty(ye,"assertWrappingType",{enumerable:!0,get:function(){return nt.assertWrappingType}});Object.defineProperty(ye,"getNamedType",{enumerable:!0,get:function(){return nt.getNamedType}});Object.defineProperty(ye,"getNullableType",{enumerable:!0,get:function(){return nt.getNullableType}});Object.defineProperty(ye,"introspectionTypes",{enumerable:!0,get:function(){return Yr.introspectionTypes}});Object.defineProperty(ye,"isAbstractType",{enumerable:!0,get:function(){return nt.isAbstractType}});Object.defineProperty(ye,"isCompositeType",{enumerable:!0,get:function(){return nt.isCompositeType}});Object.defineProperty(ye,"isDirective",{enumerable:!0,get:function(){return ia.isDirective}});Object.defineProperty(ye,"isEnumType",{enumerable:!0,get:function(){return nt.isEnumType}});Object.defineProperty(ye,"isInputObjectType",{enumerable:!0,get:function(){return nt.isInputObjectType}});Object.defineProperty(ye,"isInputType",{enumerable:!0,get:function(){return nt.isInputType}});Object.defineProperty(ye,"isInterfaceType",{enumerable:!0,get:function(){return nt.isInterfaceType}});Object.defineProperty(ye,"isIntrospectionType",{enumerable:!0,get:function(){return Yr.isIntrospectionType}});Object.defineProperty(ye,"isLeafType",{enumerable:!0,get:function(){return nt.isLeafType}});Object.defineProperty(ye,"isListType",{enumerable:!0,get:function(){return nt.isListType}});Object.defineProperty(ye,"isNamedType",{enumerable:!0,get:function(){return nt.isNamedType}});Object.defineProperty(ye,"isNonNullType",{enumerable:!0,get:function(){return nt.isNonNullType}});Object.defineProperty(ye,"isNullableType",{enumerable:!0,get:function(){return nt.isNullableType}});Object.defineProperty(ye,"isObjectType",{enumerable:!0,get:function(){return nt.isObjectType}});Object.defineProperty(ye,"isOutputType",{enumerable:!0,get:function(){return nt.isOutputType}});Object.defineProperty(ye,"isRequiredArgument",{enumerable:!0,get:function(){return nt.isRequiredArgument}});Object.defineProperty(ye,"isRequiredInputField",{enumerable:!0,get:function(){return nt.isRequiredInputField}});Object.defineProperty(ye,"isScalarType",{enumerable:!0,get:function(){return nt.isScalarType}});Object.defineProperty(ye,"isSchema",{enumerable:!0,get:function(){return m_.isSchema}});Object.defineProperty(ye,"isSpecifiedDirective",{enumerable:!0,get:function(){return ia.isSpecifiedDirective}});Object.defineProperty(ye,"isSpecifiedScalarType",{enumerable:!0,get:function(){return Ns.isSpecifiedScalarType}});Object.defineProperty(ye,"isType",{enumerable:!0,get:function(){return nt.isType}});Object.defineProperty(ye,"isUnionType",{enumerable:!0,get:function(){return nt.isUnionType}});Object.defineProperty(ye,"isWrappingType",{enumerable:!0,get:function(){return nt.isWrappingType}});Object.defineProperty(ye,"resolveObjMapThunk",{enumerable:!0,get:function(){return nt.resolveObjMapThunk}});Object.defineProperty(ye,"resolveReadonlyArrayThunk",{enumerable:!0,get:function(){return nt.resolveReadonlyArrayThunk}});Object.defineProperty(ye,"specifiedDirectives",{enumerable:!0,get:function(){return ia.specifiedDirectives}});Object.defineProperty(ye,"specifiedScalarTypes",{enumerable:!0,get:function(){return Ns.specifiedScalarTypes}});Object.defineProperty(ye,"validateSchema",{enumerable:!0,get:function(){return gw.validateSchema}});var m_=Uu(),nt=Ft(),ia=$r(),Ns=Aa(),Yr=Ri(),gw=Ld(),_w=hd()});var Ow=w(Ct=>{"use strict";f();N();m();Object.defineProperty(Ct,"__esModule",{value:!0});Object.defineProperty(Ct,"BREAK",{enumerable:!0,get:function(){return Qd.BREAK}});Object.defineProperty(Ct,"DirectiveLocation",{enumerable:!0,get:function(){return PW.DirectiveLocation}});Object.defineProperty(Ct,"Kind",{enumerable:!0,get:function(){return bW.Kind}});Object.defineProperty(Ct,"Lexer",{enumerable:!0,get:function(){return RW.Lexer}});Object.defineProperty(Ct,"Location",{enumerable:!0,get:function(){return N_.Location}});Object.defineProperty(Ct,"OperationTypeNode",{enumerable:!0,get:function(){return N_.OperationTypeNode}});Object.defineProperty(Ct,"Source",{enumerable:!0,get:function(){return OW.Source}});Object.defineProperty(Ct,"Token",{enumerable:!0,get:function(){return N_.Token}});Object.defineProperty(Ct,"TokenKind",{enumerable:!0,get:function(){return AW.TokenKind}});Object.defineProperty(Ct,"getEnterLeaveForKind",{enumerable:!0,get:function(){return Qd.getEnterLeaveForKind}});Object.defineProperty(Ct,"getLocation",{enumerable:!0,get:function(){return DW.getLocation}});Object.defineProperty(Ct,"getVisitFn",{enumerable:!0,get:function(){return Qd.getVisitFn}});Object.defineProperty(Ct,"isConstValueNode",{enumerable:!0,get:function(){return wa.isConstValueNode}});Object.defineProperty(Ct,"isDefinitionNode",{enumerable:!0,get:function(){return wa.isDefinitionNode}});Object.defineProperty(Ct,"isExecutableDefinitionNode",{enumerable:!0,get:function(){return wa.isExecutableDefinitionNode}});Object.defineProperty(Ct,"isSelectionNode",{enumerable:!0,get:function(){return wa.isSelectionNode}});Object.defineProperty(Ct,"isTypeDefinitionNode",{enumerable:!0,get:function(){return wa.isTypeDefinitionNode}});Object.defineProperty(Ct,"isTypeExtensionNode",{enumerable:!0,get:function(){return wa.isTypeExtensionNode}});Object.defineProperty(Ct,"isTypeNode",{enumerable:!0,get:function(){return wa.isTypeNode}});Object.defineProperty(Ct,"isTypeSystemDefinitionNode",{enumerable:!0,get:function(){return wa.isTypeSystemDefinitionNode}});Object.defineProperty(Ct,"isTypeSystemExtensionNode",{enumerable:!0,get:function(){return wa.isTypeSystemExtensionNode}});Object.defineProperty(Ct,"isValueNode",{enumerable:!0,get:function(){return wa.isValueNode}});Object.defineProperty(Ct,"parse",{enumerable:!0,get:function(){return Zm.parse}});Object.defineProperty(Ct,"parseConstValue",{enumerable:!0,get:function(){return Zm.parseConstValue}});Object.defineProperty(Ct,"parseType",{enumerable:!0,get:function(){return Zm.parseType}});Object.defineProperty(Ct,"parseValue",{enumerable:!0,get:function(){return Zm.parseValue}});Object.defineProperty(Ct,"print",{enumerable:!0,get:function(){return FW.print}});Object.defineProperty(Ct,"printLocation",{enumerable:!0,get:function(){return Sw.printLocation}});Object.defineProperty(Ct,"printSourceLocation",{enumerable:!0,get:function(){return Sw.printSourceLocation}});Object.defineProperty(Ct,"visit",{enumerable:!0,get:function(){return Qd.visit}});Object.defineProperty(Ct,"visitInParallel",{enumerable:!0,get:function(){return Qd.visitInParallel}});var OW=im(),DW=Hf(),Sw=dy(),bW=Rt(),AW=ld(),RW=em(),Zm=xc(),FW=li(),Qd=Fu(),N_=Oa(),wa=Mu(),PW=kc()});var Dw=w(T_=>{"use strict";f();N();m();Object.defineProperty(T_,"__esModule",{value:!0});T_.isAsyncIterable=wW;function wW(e){return typeof(e==null?void 0:e[Symbol.asyncIterator])=="function"}});var bw=w(E_=>{"use strict";f();N();m();Object.defineProperty(E_,"__esModule",{value:!0});E_.mapAsyncIterator=LW;function LW(e,t){let n=e[Symbol.asyncIterator]();function r(a){return Si(this,null,function*(){if(a.done)return a;try{return{value:yield t(a.value),done:!1}}catch(o){if(typeof n.return=="function")try{yield n.return()}catch(c){}throw o}})}return{next(){return Si(this,null,function*(){return r(yield n.next())})},return(){return Si(this,null,function*(){return typeof n.return=="function"?r(yield n.return()):{value:void 0,done:!0}})},throw(a){return Si(this,null,function*(){if(typeof n.throw=="function")return r(yield n.throw(a));throw a})},[Symbol.asyncIterator](){return this}}}});var Pw=w(eN=>{"use strict";f();N();m();Object.defineProperty(eN,"__esModule",{value:!0});eN.createSourceEventStream=Fw;eN.subscribe=qW;var CW=Cr(),BW=Yt(),Rw=Dw(),Aw=Ud(),h_=He(),UW=Ym(),kW=Km(),Yd=$d(),MW=bw(),xW=Hc();function qW(t){return Si(this,arguments,function*(e){arguments.length<2||(0,CW.devAssert)(!1,"graphql@16 dropped long-deprecated support for positional arguments, please pass an object instead.");let n=yield Fw(e);if(!(0,Rw.isAsyncIterable)(n))return n;let r=i=>(0,Yd.execute)(Q(M({},e),{rootValue:i}));return(0,MW.mapAsyncIterator)(n,r)})}function VW(e){let t=e[0];return t&&"document"in t?t:{schema:t,document:e[1],rootValue:e[2],contextValue:e[3],variableValues:e[4],operationName:e[5],subscribeFieldResolver:e[6]}}function Fw(...e){return Si(this,null,function*(){let t=VW(e),{schema:n,document:r,variableValues:i}=t;(0,Yd.assertValidExecutionArguments)(n,r,i);let a=(0,Yd.buildExecutionContext)(t);if(!("schema"in a))return{errors:a};try{let o=yield jW(a);if(!(0,Rw.isAsyncIterable)(o))throw new Error(`Subscription field must return Async Iterable. Received: ${(0,BW.inspect)(o)}.`);return o}catch(o){if(o instanceof h_.GraphQLError)return{errors:[o]};throw o}})}function jW(e){return Si(this,null,function*(){let{schema:t,fragments:n,operation:r,variableValues:i,rootValue:a}=e,o=t.getSubscriptionType();if(o==null)throw new h_.GraphQLError("Schema is not configured to execute subscription operation.",{nodes:r});let c=(0,kW.collectFields)(t,n,i,o,r.selectionSet),[l,p]=[...c.entries()][0],T=(0,Yd.getFieldDef)(t,o,p[0]);if(!T){let F=p[0].name.value;throw new h_.GraphQLError(`The subscription field "${F}" is not defined.`,{nodes:p})}let y=(0,Aw.addPath)(void 0,l,o.name),g=(0,Yd.buildResolveInfo)(e,T,p,o,y);try{var _;let F=(0,xW.getArgumentValues)(T,p[0],i),U=e.contextValue,J=yield((_=T.subscribe)!==null&&_!==void 0?_:e.subscribeFieldResolver)(a,F,U,g);if(J instanceof Error)throw J;return J}catch(F){throw(0,UW.locatedError)(F,p,(0,Aw.pathToArray)(y))}})}});var Lw=w(Li=>{"use strict";f();N();m();Object.defineProperty(Li,"__esModule",{value:!0});Object.defineProperty(Li,"createSourceEventStream",{enumerable:!0,get:function(){return ww.createSourceEventStream}});Object.defineProperty(Li,"defaultFieldResolver",{enumerable:!0,get:function(){return tN.defaultFieldResolver}});Object.defineProperty(Li,"defaultTypeResolver",{enumerable:!0,get:function(){return tN.defaultTypeResolver}});Object.defineProperty(Li,"execute",{enumerable:!0,get:function(){return tN.execute}});Object.defineProperty(Li,"executeSync",{enumerable:!0,get:function(){return tN.executeSync}});Object.defineProperty(Li,"getArgumentValues",{enumerable:!0,get:function(){return y_.getArgumentValues}});Object.defineProperty(Li,"getDirectiveValues",{enumerable:!0,get:function(){return y_.getDirectiveValues}});Object.defineProperty(Li,"getVariableValues",{enumerable:!0,get:function(){return y_.getVariableValues}});Object.defineProperty(Li,"responsePathAsArray",{enumerable:!0,get:function(){return KW.pathToArray}});Object.defineProperty(Li,"subscribe",{enumerable:!0,get:function(){return ww.subscribe}});var KW=Ud(),tN=$d(),ww=Pw(),y_=Hc()});var Cw=w(__=>{"use strict";f();N();m();Object.defineProperty(__,"__esModule",{value:!0});__.NoDeprecatedCustomRule=GW;var I_=Ir(),Jd=He(),g_=Ft();function GW(e){return{Field(t){let n=e.getFieldDef(),r=n==null?void 0:n.deprecationReason;if(n&&r!=null){let i=e.getParentType();i!=null||(0,I_.invariant)(!1),e.reportError(new Jd.GraphQLError(`The field ${i.name}.${n.name} is deprecated. ${r}`,{nodes:t}))}},Argument(t){let n=e.getArgument(),r=n==null?void 0:n.deprecationReason;if(n&&r!=null){let i=e.getDirective();if(i!=null)e.reportError(new Jd.GraphQLError(`Directive "@${i.name}" argument "${n.name}" is deprecated. ${r}`,{nodes:t}));else{let a=e.getParentType(),o=e.getFieldDef();a!=null&&o!=null||(0,I_.invariant)(!1),e.reportError(new Jd.GraphQLError(`Field "${a.name}.${o.name}" argument "${n.name}" is deprecated. ${r}`,{nodes:t}))}}},ObjectField(t){let n=(0,g_.getNamedType)(e.getParentInputType());if((0,g_.isInputObjectType)(n)){let r=n.getFields()[t.name.value],i=r==null?void 0:r.deprecationReason;i!=null&&e.reportError(new Jd.GraphQLError(`The input field ${n.name}.${r.name} is deprecated. ${i}`,{nodes:t}))}},EnumValue(t){let n=e.getEnumValue(),r=n==null?void 0:n.deprecationReason;if(n&&r!=null){let i=(0,g_.getNamedType)(e.getInputType());i!=null||(0,I_.invariant)(!1),e.reportError(new Jd.GraphQLError(`The enum value "${i.name}.${n.name}" is deprecated. ${r}`,{nodes:t}))}}}}});var Bw=w(v_=>{"use strict";f();N();m();Object.defineProperty(v_,"__esModule",{value:!0});v_.NoSchemaIntrospectionCustomRule=JW;var $W=He(),QW=Ft(),YW=Ri();function JW(e){return{Field(t){let n=(0,QW.getNamedType)(e.getType());n&&(0,YW.isIntrospectionType)(n)&&e.reportError(new $W.GraphQLError(`GraphQL introspection has been disabled, but the requested query contained the field "${t.name.value}".`,{nodes:t}))}}}});var kw=w(dt=>{"use strict";f();N();m();Object.defineProperty(dt,"__esModule",{value:!0});Object.defineProperty(dt,"ExecutableDefinitionsRule",{enumerable:!0,get:function(){return WW.ExecutableDefinitionsRule}});Object.defineProperty(dt,"FieldsOnCorrectTypeRule",{enumerable:!0,get:function(){return XW.FieldsOnCorrectTypeRule}});Object.defineProperty(dt,"FragmentsOnCompositeTypesRule",{enumerable:!0,get:function(){return ZW.FragmentsOnCompositeTypesRule}});Object.defineProperty(dt,"KnownArgumentNamesRule",{enumerable:!0,get:function(){return e8.KnownArgumentNamesRule}});Object.defineProperty(dt,"KnownDirectivesRule",{enumerable:!0,get:function(){return t8.KnownDirectivesRule}});Object.defineProperty(dt,"KnownFragmentNamesRule",{enumerable:!0,get:function(){return n8.KnownFragmentNamesRule}});Object.defineProperty(dt,"KnownTypeNamesRule",{enumerable:!0,get:function(){return r8.KnownTypeNamesRule}});Object.defineProperty(dt,"LoneAnonymousOperationRule",{enumerable:!0,get:function(){return i8.LoneAnonymousOperationRule}});Object.defineProperty(dt,"LoneSchemaDefinitionRule",{enumerable:!0,get:function(){return S8.LoneSchemaDefinitionRule}});Object.defineProperty(dt,"MaxIntrospectionDepthRule",{enumerable:!0,get:function(){return v8.MaxIntrospectionDepthRule}});Object.defineProperty(dt,"NoDeprecatedCustomRule",{enumerable:!0,get:function(){return w8.NoDeprecatedCustomRule}});Object.defineProperty(dt,"NoFragmentCyclesRule",{enumerable:!0,get:function(){return a8.NoFragmentCyclesRule}});Object.defineProperty(dt,"NoSchemaIntrospectionCustomRule",{enumerable:!0,get:function(){return L8.NoSchemaIntrospectionCustomRule}});Object.defineProperty(dt,"NoUndefinedVariablesRule",{enumerable:!0,get:function(){return s8.NoUndefinedVariablesRule}});Object.defineProperty(dt,"NoUnusedFragmentsRule",{enumerable:!0,get:function(){return o8.NoUnusedFragmentsRule}});Object.defineProperty(dt,"NoUnusedVariablesRule",{enumerable:!0,get:function(){return u8.NoUnusedVariablesRule}});Object.defineProperty(dt,"OverlappingFieldsCanBeMergedRule",{enumerable:!0,get:function(){return c8.OverlappingFieldsCanBeMergedRule}});Object.defineProperty(dt,"PossibleFragmentSpreadsRule",{enumerable:!0,get:function(){return l8.PossibleFragmentSpreadsRule}});Object.defineProperty(dt,"PossibleTypeExtensionsRule",{enumerable:!0,get:function(){return P8.PossibleTypeExtensionsRule}});Object.defineProperty(dt,"ProvidedRequiredArgumentsRule",{enumerable:!0,get:function(){return d8.ProvidedRequiredArgumentsRule}});Object.defineProperty(dt,"ScalarLeafsRule",{enumerable:!0,get:function(){return p8.ScalarLeafsRule}});Object.defineProperty(dt,"SingleFieldSubscriptionsRule",{enumerable:!0,get:function(){return f8.SingleFieldSubscriptionsRule}});Object.defineProperty(dt,"UniqueArgumentDefinitionNamesRule",{enumerable:!0,get:function(){return R8.UniqueArgumentDefinitionNamesRule}});Object.defineProperty(dt,"UniqueArgumentNamesRule",{enumerable:!0,get:function(){return m8.UniqueArgumentNamesRule}});Object.defineProperty(dt,"UniqueDirectiveNamesRule",{enumerable:!0,get:function(){return F8.UniqueDirectiveNamesRule}});Object.defineProperty(dt,"UniqueDirectivesPerLocationRule",{enumerable:!0,get:function(){return N8.UniqueDirectivesPerLocationRule}});Object.defineProperty(dt,"UniqueEnumValueNamesRule",{enumerable:!0,get:function(){return b8.UniqueEnumValueNamesRule}});Object.defineProperty(dt,"UniqueFieldDefinitionNamesRule",{enumerable:!0,get:function(){return A8.UniqueFieldDefinitionNamesRule}});Object.defineProperty(dt,"UniqueFragmentNamesRule",{enumerable:!0,get:function(){return T8.UniqueFragmentNamesRule}});Object.defineProperty(dt,"UniqueInputFieldNamesRule",{enumerable:!0,get:function(){return E8.UniqueInputFieldNamesRule}});Object.defineProperty(dt,"UniqueOperationNamesRule",{enumerable:!0,get:function(){return h8.UniqueOperationNamesRule}});Object.defineProperty(dt,"UniqueOperationTypesRule",{enumerable:!0,get:function(){return O8.UniqueOperationTypesRule}});Object.defineProperty(dt,"UniqueTypeNamesRule",{enumerable:!0,get:function(){return D8.UniqueTypeNamesRule}});Object.defineProperty(dt,"UniqueVariableNamesRule",{enumerable:!0,get:function(){return y8.UniqueVariableNamesRule}});Object.defineProperty(dt,"ValidationContext",{enumerable:!0,get:function(){return zW.ValidationContext}});Object.defineProperty(dt,"ValuesOfCorrectTypeRule",{enumerable:!0,get:function(){return I8.ValuesOfCorrectTypeRule}});Object.defineProperty(dt,"VariablesAreInputTypesRule",{enumerable:!0,get:function(){return g8.VariablesAreInputTypesRule}});Object.defineProperty(dt,"VariablesInAllowedPositionRule",{enumerable:!0,get:function(){return _8.VariablesInAllowedPositionRule}});Object.defineProperty(dt,"recommendedRules",{enumerable:!0,get:function(){return Uw.recommendedRules}});Object.defineProperty(dt,"specifiedRules",{enumerable:!0,get:function(){return Uw.specifiedRules}});Object.defineProperty(dt,"validate",{enumerable:!0,get:function(){return HW.validate}});var HW=Wc(),zW=t_(),Uw=Xg(),WW=NI(),XW=EI(),ZW=yI(),e8=II(),t8=SI(),n8=DI(),r8=RI(),i8=PI(),a8=kI(),s8=xI(),o8=VI(),u8=KI(),c8=ZI(),l8=ng(),d8=sg(),p8=ug(),f8=Eg(),m8=_g(),N8=bg(),T8=Cg(),E8=Ug(),h8=Mg(),y8=Gg(),I8=Yg(),g8=Hg(),_8=Wg(),v8=BI(),S8=LI(),O8=qg(),D8=jg(),b8=Rg(),A8=wg(),R8=Ig(),F8=Sg(),P8=ig(),w8=Cw(),L8=Bw()});var Mw=w(Ku=>{"use strict";f();N();m();Object.defineProperty(Ku,"__esModule",{value:!0});Object.defineProperty(Ku,"GraphQLError",{enumerable:!0,get:function(){return S_.GraphQLError}});Object.defineProperty(Ku,"formatError",{enumerable:!0,get:function(){return S_.formatError}});Object.defineProperty(Ku,"locatedError",{enumerable:!0,get:function(){return B8.locatedError}});Object.defineProperty(Ku,"printError",{enumerable:!0,get:function(){return S_.printError}});Object.defineProperty(Ku,"syntaxError",{enumerable:!0,get:function(){return C8.syntaxError}});var S_=He(),C8=Wf(),B8=Ym()});var D_=w(O_=>{"use strict";f();N();m();Object.defineProperty(O_,"__esModule",{value:!0});O_.getIntrospectionQuery=U8;function U8(e){let t=M({descriptions:!0,specifiedByUrl:!1,directiveIsRepeatable:!1,schemaDescription:!1,inputValueDeprecation:!1,oneOf:!1},e),n=t.descriptions?"description":"",r=t.specifiedByUrl?"specifiedByURL":"",i=t.directiveIsRepeatable?"isRepeatable":"",a=t.schemaDescription?n:"";function o(l){return t.inputValueDeprecation?l:""}let c=t.oneOf?"isOneOf":"";return` +`))}});var rw=w(i_=>{"use strict";m();T();N();Object.defineProperty(i_,"__esModule",{value:!0});i_.memoize3=H4;function H4(e){let t;return function(r,i,a){t===void 0&&(t=new WeakMap);let o=t.get(r);o===void 0&&(o=new WeakMap,t.set(r,o));let c=o.get(i);c===void 0&&(c=new WeakMap,o.set(i,c));let l=c.get(a);return l===void 0&&(l=e(r,i,a),c.set(a,l)),l}}});var iw=w(a_=>{"use strict";m();T();N();Object.defineProperty(a_,"__esModule",{value:!0});a_.promiseForObject=z4;function z4(e){return Promise.all(Object.values(e)).then(t=>{let n=Object.create(null);for(let[r,i]of Object.keys(e).entries())n[i]=t[r];return n})}});var aw=w(s_=>{"use strict";m();T();N();Object.defineProperty(s_,"__esModule",{value:!0});s_.promiseReduce=X4;var W4=zf();function X4(e,t,n){let r=n;for(let i of e)r=(0,W4.isPromise)(r)?r.then(a=>t(a,i)):t(r,i);return r}});var sw=w(u_=>{"use strict";m();T();N();Object.defineProperty(u_,"__esModule",{value:!0});u_.toError=eW;var Z4=Yt();function eW(e){return e instanceof Error?e:new o_(e)}var o_=class extends Error{constructor(t){super("Unexpected error value: "+(0,Z4.inspect)(t)),this.name="NonErrorThrown",this.thrownValue=t}}});var Hm=w(c_=>{"use strict";m();T();N();Object.defineProperty(c_,"__esModule",{value:!0});c_.locatedError=rW;var tW=sw(),nW=He();function rW(e,t,n){var r;let i=(0,tW.toError)(e);return iW(i)?i:new nW.GraphQLError(i.message,{nodes:(r=i.nodes)!==null&&r!==void 0?r:t,source:i.source,positions:i.positions,path:n,originalError:i})}function iW(e){return Array.isArray(e.path)}});var Qd=w(wi=>{"use strict";m();T();N();Object.defineProperty(wi,"__esModule",{value:!0});wi.assertValidExecutionArguments=mw;wi.buildExecutionContext=Nw;wi.buildResolveInfo=Ew;wi.defaultTypeResolver=wi.defaultFieldResolver=void 0;wi.execute=fw;wi.executeSync=dW;wi.getFieldDef=yw;var d_=Cr(),Vu=Yt(),aW=Ir(),sW=Fm(),m_=Sa(),ra=zf(),oW=rw(),ju=kd(),ow=iw(),uW=aw(),Pi=He(),Wm=Hm(),l_=Oa(),uw=Rt(),Yo=Ft(),Xc=Ri(),cW=Cd(),dw=$m(),pw=Hc(),lW=(0,oW.memoize3)((e,t,n)=>(0,dw.collectSubfields)(e.schema,e.fragments,e.variableValues,t,n));function fw(e){arguments.length<2||(0,d_.devAssert)(!1,"graphql@16 dropped long-deprecated support for positional arguments, please pass an object instead.");let{schema:t,document:n,variableValues:r,rootValue:i}=e;mw(t,n,r);let a=Nw(e);if(!("schema"in a))return{errors:a};try{let{operation:o}=a,c=pW(a,o,i);return(0,ra.isPromise)(c)?c.then(l=>zm(l,a.errors),l=>(a.errors.push(l),zm(null,a.errors))):zm(c,a.errors)}catch(o){return a.errors.push(o),zm(null,a.errors)}}function dW(e){let t=fw(e);if((0,ra.isPromise)(t))throw new Error("GraphQL execution failed to complete synchronously.");return t}function zm(e,t){return t.length===0?{data:e}:{errors:t,data:e}}function mw(e,t,n){t||(0,d_.devAssert)(!1,"Must provide document."),(0,cW.assertValidSchema)(e),n==null||(0,m_.isObjectLike)(n)||(0,d_.devAssert)(!1,"Variables must be provided as an Object where each property is a variable value. Perhaps look to see if an unparsed JSON string was provided.")}function Nw(e){var t,n;let{schema:r,document:i,rootValue:a,contextValue:o,variableValues:c,operationName:l,fieldResolver:p,typeResolver:f,subscribeFieldResolver:y}=e,g,_=Object.create(null);for(let K of i.definitions)switch(K.kind){case uw.Kind.OPERATION_DEFINITION:if(l==null){if(g!==void 0)return[new Pi.GraphQLError("Must provide operation name if query contains multiple operations.")];g=K}else((t=K.name)===null||t===void 0?void 0:t.value)===l&&(g=K);break;case uw.Kind.FRAGMENT_DEFINITION:_[K.name.value]=K;break;default:}if(!g)return l!=null?[new Pi.GraphQLError(`Unknown operation named "${l}".`)]:[new Pi.GraphQLError("Must provide an operation.")];let F=(n=g.variableDefinitions)!==null&&n!==void 0?n:[],U=(0,pw.getVariableValues)(r,F,c!=null?c:{},{maxErrors:50});return U.errors?U.errors:{schema:r,fragments:_,rootValue:a,contextValue:o,operation:g,variableValues:U.coerced,fieldResolver:p!=null?p:f_,typeResolver:f!=null?f:hw,subscribeFieldResolver:y!=null?y:f_,errors:[]}}function pW(e,t,n){let r=e.schema.getRootType(t.operation);if(r==null)throw new Pi.GraphQLError(`Schema is not configured to execute ${t.operation} operation.`,{nodes:t});let i=(0,dw.collectFields)(e.schema,e.fragments,e.variableValues,r,t.selectionSet),a=void 0;switch(t.operation){case l_.OperationTypeNode.QUERY:return Xm(e,r,n,a,i);case l_.OperationTypeNode.MUTATION:return fW(e,r,n,a,i);case l_.OperationTypeNode.SUBSCRIPTION:return Xm(e,r,n,a,i)}}function fW(e,t,n,r,i){return(0,uW.promiseReduce)(i.entries(),(a,[o,c])=>{let l=(0,ju.addPath)(r,o,t.name),p=Tw(e,t,n,c,l);return p===void 0?a:(0,ra.isPromise)(p)?p.then(f=>(a[o]=f,a)):(a[o]=p,a)},Object.create(null))}function Xm(e,t,n,r,i){let a=Object.create(null),o=!1;try{for(let[c,l]of i.entries()){let p=(0,ju.addPath)(r,c,t.name),f=Tw(e,t,n,l,p);f!==void 0&&(a[c]=f,(0,ra.isPromise)(f)&&(o=!0))}}catch(c){if(o)return(0,ow.promiseForObject)(a).finally(()=>{throw c});throw c}return o?(0,ow.promiseForObject)(a):a}function Tw(e,t,n,r,i){var a;let o=yw(e.schema,t,r[0]);if(!o)return;let c=o.type,l=(a=o.resolve)!==null&&a!==void 0?a:e.fieldResolver,p=Ew(e,o,r,t,i);try{let f=(0,pw.getArgumentValues)(o,r[0],e.variableValues),y=e.contextValue,g=l(n,f,y,p),_;return(0,ra.isPromise)(g)?_=g.then(F=>$d(e,c,r,p,i,F)):_=$d(e,c,r,p,i,g),(0,ra.isPromise)(_)?_.then(void 0,F=>{let U=(0,Wm.locatedError)(F,r,(0,ju.pathToArray)(i));return Zm(U,c,e)}):_}catch(f){let y=(0,Wm.locatedError)(f,r,(0,ju.pathToArray)(i));return Zm(y,c,e)}}function Ew(e,t,n,r,i){return{fieldName:t.name,fieldNodes:n,returnType:t.type,parentType:r,path:i,schema:e.schema,fragments:e.fragments,rootValue:e.rootValue,operation:e.operation,variableValues:e.variableValues}}function Zm(e,t,n){if((0,Yo.isNonNullType)(t))throw e;return n.errors.push(e),null}function $d(e,t,n,r,i,a){if(a instanceof Error)throw a;if((0,Yo.isNonNullType)(t)){let o=$d(e,t.ofType,n,r,i,a);if(o===null)throw new Error(`Cannot return null for non-nullable field ${r.parentType.name}.${r.fieldName}.`);return o}if(a==null)return null;if((0,Yo.isListType)(t))return mW(e,t,n,r,i,a);if((0,Yo.isLeafType)(t))return NW(t,a);if((0,Yo.isAbstractType)(t))return TW(e,t,n,r,i,a);if((0,Yo.isObjectType)(t))return p_(e,t,n,r,i,a);(0,aW.invariant)(!1,"Cannot complete value of unexpected output type: "+(0,Vu.inspect)(t))}function mW(e,t,n,r,i,a){if(!(0,sW.isIterableObject)(a))throw new Pi.GraphQLError(`Expected Iterable, but did not find one for field "${r.parentType.name}.${r.fieldName}".`);let o=t.ofType,c=!1,l=Array.from(a,(p,f)=>{let y=(0,ju.addPath)(i,f,void 0);try{let g;return(0,ra.isPromise)(p)?g=p.then(_=>$d(e,o,n,r,y,_)):g=$d(e,o,n,r,y,p),(0,ra.isPromise)(g)?(c=!0,g.then(void 0,_=>{let F=(0,Wm.locatedError)(_,n,(0,ju.pathToArray)(y));return Zm(F,o,e)})):g}catch(g){let _=(0,Wm.locatedError)(g,n,(0,ju.pathToArray)(y));return Zm(_,o,e)}});return c?Promise.all(l):l}function NW(e,t){let n=e.serialize(t);if(n==null)throw new Error(`Expected \`${(0,Vu.inspect)(e)}.serialize(${(0,Vu.inspect)(t)})\` to return non-nullable value, returned: ${(0,Vu.inspect)(n)}`);return n}function TW(e,t,n,r,i,a){var o;let c=(o=t.resolveType)!==null&&o!==void 0?o:e.typeResolver,l=e.contextValue,p=c(a,l,r,t);return(0,ra.isPromise)(p)?p.then(f=>p_(e,cw(f,e,t,n,r,a),n,r,i,a)):p_(e,cw(p,e,t,n,r,a),n,r,i,a)}function cw(e,t,n,r,i,a){if(e==null)throw new Pi.GraphQLError(`Abstract type "${n.name}" must resolve to an Object type at runtime for field "${i.parentType.name}.${i.fieldName}". Either the "${n.name}" type should provide a "resolveType" function or each possible type should provide an "isTypeOf" function.`,r);if((0,Yo.isObjectType)(e))throw new Pi.GraphQLError("Support for returning GraphQLObjectType from resolveType was removed in graphql-js@16.0.0 please return type name instead.");if(typeof e!="string")throw new Pi.GraphQLError(`Abstract type "${n.name}" must resolve to an Object type at runtime for field "${i.parentType.name}.${i.fieldName}" with value ${(0,Vu.inspect)(a)}, received "${(0,Vu.inspect)(e)}".`);let o=t.schema.getType(e);if(o==null)throw new Pi.GraphQLError(`Abstract type "${n.name}" was resolved to a type "${e}" that does not exist inside the schema.`,{nodes:r});if(!(0,Yo.isObjectType)(o))throw new Pi.GraphQLError(`Abstract type "${n.name}" was resolved to a non-object type "${e}".`,{nodes:r});if(!t.schema.isSubType(n,o))throw new Pi.GraphQLError(`Runtime Object type "${o.name}" is not a possible type for "${n.name}".`,{nodes:r});return o}function p_(e,t,n,r,i,a){let o=lW(e,t,n);if(t.isTypeOf){let c=t.isTypeOf(a,e.contextValue,r);if((0,ra.isPromise)(c))return c.then(l=>{if(!l)throw lw(t,a,n);return Xm(e,t,a,i,o)});if(!c)throw lw(t,a,n)}return Xm(e,t,a,i,o)}function lw(e,t,n){return new Pi.GraphQLError(`Expected value of type "${e.name}" but got: ${(0,Vu.inspect)(t)}.`,{nodes:n})}var hw=function(e,t,n,r){if((0,m_.isObjectLike)(e)&&typeof e.__typename=="string")return e.__typename;let i=n.schema.getPossibleTypes(r),a=[];for(let o=0;o{for(let c=0;c{"use strict";m();T();N();Object.defineProperty(eN,"__esModule",{value:!0});eN.graphql=vW;eN.graphqlSync=SW;var EW=Cr(),hW=zf(),yW=xc(),IW=Cd(),gW=Wc(),_W=Qd();function vW(e){return new Promise(t=>t(Iw(e)))}function SW(e){let t=Iw(e);if((0,hW.isPromise)(t))throw new Error("GraphQL execution failed to complete synchronously.");return t}function Iw(e){arguments.length<2||(0,EW.devAssert)(!1,"graphql@16 dropped long-deprecated support for positional arguments, please pass an object instead.");let{schema:t,source:n,rootValue:r,contextValue:i,variableValues:a,operationName:o,fieldResolver:c,typeResolver:l}=e,p=(0,IW.validateSchema)(t);if(p.length>0)return{errors:p};let f;try{f=(0,yW.parse)(n)}catch(g){return{errors:[g]}}let y=(0,gW.validate)(t,f);return y.length>0?{errors:y}:(0,_W.execute)({schema:t,document:f,rootValue:r,contextValue:i,variableValues:a,operationName:o,fieldResolver:c,typeResolver:l})}});var Sw=w(ye=>{"use strict";m();T();N();Object.defineProperty(ye,"__esModule",{value:!0});Object.defineProperty(ye,"DEFAULT_DEPRECATION_REASON",{enumerable:!0,get:function(){return ia.DEFAULT_DEPRECATION_REASON}});Object.defineProperty(ye,"GRAPHQL_MAX_INT",{enumerable:!0,get:function(){return Ns.GRAPHQL_MAX_INT}});Object.defineProperty(ye,"GRAPHQL_MIN_INT",{enumerable:!0,get:function(){return Ns.GRAPHQL_MIN_INT}});Object.defineProperty(ye,"GraphQLBoolean",{enumerable:!0,get:function(){return Ns.GraphQLBoolean}});Object.defineProperty(ye,"GraphQLDeprecatedDirective",{enumerable:!0,get:function(){return ia.GraphQLDeprecatedDirective}});Object.defineProperty(ye,"GraphQLDirective",{enumerable:!0,get:function(){return ia.GraphQLDirective}});Object.defineProperty(ye,"GraphQLEnumType",{enumerable:!0,get:function(){return nt.GraphQLEnumType}});Object.defineProperty(ye,"GraphQLFloat",{enumerable:!0,get:function(){return Ns.GraphQLFloat}});Object.defineProperty(ye,"GraphQLID",{enumerable:!0,get:function(){return Ns.GraphQLID}});Object.defineProperty(ye,"GraphQLIncludeDirective",{enumerable:!0,get:function(){return ia.GraphQLIncludeDirective}});Object.defineProperty(ye,"GraphQLInputObjectType",{enumerable:!0,get:function(){return nt.GraphQLInputObjectType}});Object.defineProperty(ye,"GraphQLInt",{enumerable:!0,get:function(){return Ns.GraphQLInt}});Object.defineProperty(ye,"GraphQLInterfaceType",{enumerable:!0,get:function(){return nt.GraphQLInterfaceType}});Object.defineProperty(ye,"GraphQLList",{enumerable:!0,get:function(){return nt.GraphQLList}});Object.defineProperty(ye,"GraphQLNonNull",{enumerable:!0,get:function(){return nt.GraphQLNonNull}});Object.defineProperty(ye,"GraphQLObjectType",{enumerable:!0,get:function(){return nt.GraphQLObjectType}});Object.defineProperty(ye,"GraphQLOneOfDirective",{enumerable:!0,get:function(){return ia.GraphQLOneOfDirective}});Object.defineProperty(ye,"GraphQLScalarType",{enumerable:!0,get:function(){return nt.GraphQLScalarType}});Object.defineProperty(ye,"GraphQLSchema",{enumerable:!0,get:function(){return N_.GraphQLSchema}});Object.defineProperty(ye,"GraphQLSkipDirective",{enumerable:!0,get:function(){return ia.GraphQLSkipDirective}});Object.defineProperty(ye,"GraphQLSpecifiedByDirective",{enumerable:!0,get:function(){return ia.GraphQLSpecifiedByDirective}});Object.defineProperty(ye,"GraphQLString",{enumerable:!0,get:function(){return Ns.GraphQLString}});Object.defineProperty(ye,"GraphQLUnionType",{enumerable:!0,get:function(){return nt.GraphQLUnionType}});Object.defineProperty(ye,"SchemaMetaFieldDef",{enumerable:!0,get:function(){return Yr.SchemaMetaFieldDef}});Object.defineProperty(ye,"TypeKind",{enumerable:!0,get:function(){return Yr.TypeKind}});Object.defineProperty(ye,"TypeMetaFieldDef",{enumerable:!0,get:function(){return Yr.TypeMetaFieldDef}});Object.defineProperty(ye,"TypeNameMetaFieldDef",{enumerable:!0,get:function(){return Yr.TypeNameMetaFieldDef}});Object.defineProperty(ye,"__Directive",{enumerable:!0,get:function(){return Yr.__Directive}});Object.defineProperty(ye,"__DirectiveLocation",{enumerable:!0,get:function(){return Yr.__DirectiveLocation}});Object.defineProperty(ye,"__EnumValue",{enumerable:!0,get:function(){return Yr.__EnumValue}});Object.defineProperty(ye,"__Field",{enumerable:!0,get:function(){return Yr.__Field}});Object.defineProperty(ye,"__InputValue",{enumerable:!0,get:function(){return Yr.__InputValue}});Object.defineProperty(ye,"__Schema",{enumerable:!0,get:function(){return Yr.__Schema}});Object.defineProperty(ye,"__Type",{enumerable:!0,get:function(){return Yr.__Type}});Object.defineProperty(ye,"__TypeKind",{enumerable:!0,get:function(){return Yr.__TypeKind}});Object.defineProperty(ye,"assertAbstractType",{enumerable:!0,get:function(){return nt.assertAbstractType}});Object.defineProperty(ye,"assertCompositeType",{enumerable:!0,get:function(){return nt.assertCompositeType}});Object.defineProperty(ye,"assertDirective",{enumerable:!0,get:function(){return ia.assertDirective}});Object.defineProperty(ye,"assertEnumType",{enumerable:!0,get:function(){return nt.assertEnumType}});Object.defineProperty(ye,"assertEnumValueName",{enumerable:!0,get:function(){return vw.assertEnumValueName}});Object.defineProperty(ye,"assertInputObjectType",{enumerable:!0,get:function(){return nt.assertInputObjectType}});Object.defineProperty(ye,"assertInputType",{enumerable:!0,get:function(){return nt.assertInputType}});Object.defineProperty(ye,"assertInterfaceType",{enumerable:!0,get:function(){return nt.assertInterfaceType}});Object.defineProperty(ye,"assertLeafType",{enumerable:!0,get:function(){return nt.assertLeafType}});Object.defineProperty(ye,"assertListType",{enumerable:!0,get:function(){return nt.assertListType}});Object.defineProperty(ye,"assertName",{enumerable:!0,get:function(){return vw.assertName}});Object.defineProperty(ye,"assertNamedType",{enumerable:!0,get:function(){return nt.assertNamedType}});Object.defineProperty(ye,"assertNonNullType",{enumerable:!0,get:function(){return nt.assertNonNullType}});Object.defineProperty(ye,"assertNullableType",{enumerable:!0,get:function(){return nt.assertNullableType}});Object.defineProperty(ye,"assertObjectType",{enumerable:!0,get:function(){return nt.assertObjectType}});Object.defineProperty(ye,"assertOutputType",{enumerable:!0,get:function(){return nt.assertOutputType}});Object.defineProperty(ye,"assertScalarType",{enumerable:!0,get:function(){return nt.assertScalarType}});Object.defineProperty(ye,"assertSchema",{enumerable:!0,get:function(){return N_.assertSchema}});Object.defineProperty(ye,"assertType",{enumerable:!0,get:function(){return nt.assertType}});Object.defineProperty(ye,"assertUnionType",{enumerable:!0,get:function(){return nt.assertUnionType}});Object.defineProperty(ye,"assertValidSchema",{enumerable:!0,get:function(){return _w.assertValidSchema}});Object.defineProperty(ye,"assertWrappingType",{enumerable:!0,get:function(){return nt.assertWrappingType}});Object.defineProperty(ye,"getNamedType",{enumerable:!0,get:function(){return nt.getNamedType}});Object.defineProperty(ye,"getNullableType",{enumerable:!0,get:function(){return nt.getNullableType}});Object.defineProperty(ye,"introspectionTypes",{enumerable:!0,get:function(){return Yr.introspectionTypes}});Object.defineProperty(ye,"isAbstractType",{enumerable:!0,get:function(){return nt.isAbstractType}});Object.defineProperty(ye,"isCompositeType",{enumerable:!0,get:function(){return nt.isCompositeType}});Object.defineProperty(ye,"isDirective",{enumerable:!0,get:function(){return ia.isDirective}});Object.defineProperty(ye,"isEnumType",{enumerable:!0,get:function(){return nt.isEnumType}});Object.defineProperty(ye,"isInputObjectType",{enumerable:!0,get:function(){return nt.isInputObjectType}});Object.defineProperty(ye,"isInputType",{enumerable:!0,get:function(){return nt.isInputType}});Object.defineProperty(ye,"isInterfaceType",{enumerable:!0,get:function(){return nt.isInterfaceType}});Object.defineProperty(ye,"isIntrospectionType",{enumerable:!0,get:function(){return Yr.isIntrospectionType}});Object.defineProperty(ye,"isLeafType",{enumerable:!0,get:function(){return nt.isLeafType}});Object.defineProperty(ye,"isListType",{enumerable:!0,get:function(){return nt.isListType}});Object.defineProperty(ye,"isNamedType",{enumerable:!0,get:function(){return nt.isNamedType}});Object.defineProperty(ye,"isNonNullType",{enumerable:!0,get:function(){return nt.isNonNullType}});Object.defineProperty(ye,"isNullableType",{enumerable:!0,get:function(){return nt.isNullableType}});Object.defineProperty(ye,"isObjectType",{enumerable:!0,get:function(){return nt.isObjectType}});Object.defineProperty(ye,"isOutputType",{enumerable:!0,get:function(){return nt.isOutputType}});Object.defineProperty(ye,"isRequiredArgument",{enumerable:!0,get:function(){return nt.isRequiredArgument}});Object.defineProperty(ye,"isRequiredInputField",{enumerable:!0,get:function(){return nt.isRequiredInputField}});Object.defineProperty(ye,"isScalarType",{enumerable:!0,get:function(){return nt.isScalarType}});Object.defineProperty(ye,"isSchema",{enumerable:!0,get:function(){return N_.isSchema}});Object.defineProperty(ye,"isSpecifiedDirective",{enumerable:!0,get:function(){return ia.isSpecifiedDirective}});Object.defineProperty(ye,"isSpecifiedScalarType",{enumerable:!0,get:function(){return Ns.isSpecifiedScalarType}});Object.defineProperty(ye,"isType",{enumerable:!0,get:function(){return nt.isType}});Object.defineProperty(ye,"isUnionType",{enumerable:!0,get:function(){return nt.isUnionType}});Object.defineProperty(ye,"isWrappingType",{enumerable:!0,get:function(){return nt.isWrappingType}});Object.defineProperty(ye,"resolveObjMapThunk",{enumerable:!0,get:function(){return nt.resolveObjMapThunk}});Object.defineProperty(ye,"resolveReadonlyArrayThunk",{enumerable:!0,get:function(){return nt.resolveReadonlyArrayThunk}});Object.defineProperty(ye,"specifiedDirectives",{enumerable:!0,get:function(){return ia.specifiedDirectives}});Object.defineProperty(ye,"specifiedScalarTypes",{enumerable:!0,get:function(){return Ns.specifiedScalarTypes}});Object.defineProperty(ye,"validateSchema",{enumerable:!0,get:function(){return _w.validateSchema}});var N_=Uu(),nt=Ft(),ia=$r(),Ns=Aa(),Yr=Ri(),_w=Cd(),vw=yd()});var Dw=w(Ct=>{"use strict";m();T();N();Object.defineProperty(Ct,"__esModule",{value:!0});Object.defineProperty(Ct,"BREAK",{enumerable:!0,get:function(){return Yd.BREAK}});Object.defineProperty(Ct,"DirectiveLocation",{enumerable:!0,get:function(){return PW.DirectiveLocation}});Object.defineProperty(Ct,"Kind",{enumerable:!0,get:function(){return bW.Kind}});Object.defineProperty(Ct,"Lexer",{enumerable:!0,get:function(){return RW.Lexer}});Object.defineProperty(Ct,"Location",{enumerable:!0,get:function(){return T_.Location}});Object.defineProperty(Ct,"OperationTypeNode",{enumerable:!0,get:function(){return T_.OperationTypeNode}});Object.defineProperty(Ct,"Source",{enumerable:!0,get:function(){return OW.Source}});Object.defineProperty(Ct,"Token",{enumerable:!0,get:function(){return T_.Token}});Object.defineProperty(Ct,"TokenKind",{enumerable:!0,get:function(){return AW.TokenKind}});Object.defineProperty(Ct,"getEnterLeaveForKind",{enumerable:!0,get:function(){return Yd.getEnterLeaveForKind}});Object.defineProperty(Ct,"getLocation",{enumerable:!0,get:function(){return DW.getLocation}});Object.defineProperty(Ct,"getVisitFn",{enumerable:!0,get:function(){return Yd.getVisitFn}});Object.defineProperty(Ct,"isConstValueNode",{enumerable:!0,get:function(){return wa.isConstValueNode}});Object.defineProperty(Ct,"isDefinitionNode",{enumerable:!0,get:function(){return wa.isDefinitionNode}});Object.defineProperty(Ct,"isExecutableDefinitionNode",{enumerable:!0,get:function(){return wa.isExecutableDefinitionNode}});Object.defineProperty(Ct,"isSelectionNode",{enumerable:!0,get:function(){return wa.isSelectionNode}});Object.defineProperty(Ct,"isTypeDefinitionNode",{enumerable:!0,get:function(){return wa.isTypeDefinitionNode}});Object.defineProperty(Ct,"isTypeExtensionNode",{enumerable:!0,get:function(){return wa.isTypeExtensionNode}});Object.defineProperty(Ct,"isTypeNode",{enumerable:!0,get:function(){return wa.isTypeNode}});Object.defineProperty(Ct,"isTypeSystemDefinitionNode",{enumerable:!0,get:function(){return wa.isTypeSystemDefinitionNode}});Object.defineProperty(Ct,"isTypeSystemExtensionNode",{enumerable:!0,get:function(){return wa.isTypeSystemExtensionNode}});Object.defineProperty(Ct,"isValueNode",{enumerable:!0,get:function(){return wa.isValueNode}});Object.defineProperty(Ct,"parse",{enumerable:!0,get:function(){return tN.parse}});Object.defineProperty(Ct,"parseConstValue",{enumerable:!0,get:function(){return tN.parseConstValue}});Object.defineProperty(Ct,"parseType",{enumerable:!0,get:function(){return tN.parseType}});Object.defineProperty(Ct,"parseValue",{enumerable:!0,get:function(){return tN.parseValue}});Object.defineProperty(Ct,"print",{enumerable:!0,get:function(){return FW.print}});Object.defineProperty(Ct,"printLocation",{enumerable:!0,get:function(){return Ow.printLocation}});Object.defineProperty(Ct,"printSourceLocation",{enumerable:!0,get:function(){return Ow.printSourceLocation}});Object.defineProperty(Ct,"visit",{enumerable:!0,get:function(){return Yd.visit}});Object.defineProperty(Ct,"visitInParallel",{enumerable:!0,get:function(){return Yd.visitInParallel}});var OW=sm(),DW=Wf(),Ow=py(),bW=Rt(),AW=dd(),RW=nm(),tN=xc(),FW=li(),Yd=Fu(),T_=Oa(),wa=Mu(),PW=kc()});var bw=w(E_=>{"use strict";m();T();N();Object.defineProperty(E_,"__esModule",{value:!0});E_.isAsyncIterable=wW;function wW(e){return typeof(e==null?void 0:e[Symbol.asyncIterator])=="function"}});var Aw=w(h_=>{"use strict";m();T();N();Object.defineProperty(h_,"__esModule",{value:!0});h_.mapAsyncIterator=LW;function LW(e,t){let n=e[Symbol.asyncIterator]();function r(a){return Si(this,null,function*(){if(a.done)return a;try{return{value:yield t(a.value),done:!1}}catch(o){if(typeof n.return=="function")try{yield n.return()}catch(c){}throw o}})}return{next(){return Si(this,null,function*(){return r(yield n.next())})},return(){return Si(this,null,function*(){return typeof n.return=="function"?r(yield n.return()):{value:void 0,done:!0}})},throw(a){return Si(this,null,function*(){if(typeof n.throw=="function")return r(yield n.throw(a));throw a})},[Symbol.asyncIterator](){return this}}}});var ww=w(nN=>{"use strict";m();T();N();Object.defineProperty(nN,"__esModule",{value:!0});nN.createSourceEventStream=Pw;nN.subscribe=qW;var CW=Cr(),BW=Yt(),Fw=bw(),Rw=kd(),y_=He(),UW=Hm(),kW=$m(),Jd=Qd(),MW=Aw(),xW=Hc();function qW(t){return Si(this,arguments,function*(e){arguments.length<2||(0,CW.devAssert)(!1,"graphql@16 dropped long-deprecated support for positional arguments, please pass an object instead.");let n=yield Pw(e);if(!(0,Fw.isAsyncIterable)(n))return n;let r=i=>(0,Jd.execute)(Q(M({},e),{rootValue:i}));return(0,MW.mapAsyncIterator)(n,r)})}function VW(e){let t=e[0];return t&&"document"in t?t:{schema:t,document:e[1],rootValue:e[2],contextValue:e[3],variableValues:e[4],operationName:e[5],subscribeFieldResolver:e[6]}}function Pw(...e){return Si(this,null,function*(){let t=VW(e),{schema:n,document:r,variableValues:i}=t;(0,Jd.assertValidExecutionArguments)(n,r,i);let a=(0,Jd.buildExecutionContext)(t);if(!("schema"in a))return{errors:a};try{let o=yield jW(a);if(!(0,Fw.isAsyncIterable)(o))throw new Error(`Subscription field must return Async Iterable. Received: ${(0,BW.inspect)(o)}.`);return o}catch(o){if(o instanceof y_.GraphQLError)return{errors:[o]};throw o}})}function jW(e){return Si(this,null,function*(){let{schema:t,fragments:n,operation:r,variableValues:i,rootValue:a}=e,o=t.getSubscriptionType();if(o==null)throw new y_.GraphQLError("Schema is not configured to execute subscription operation.",{nodes:r});let c=(0,kW.collectFields)(t,n,i,o,r.selectionSet),[l,p]=[...c.entries()][0],f=(0,Jd.getFieldDef)(t,o,p[0]);if(!f){let F=p[0].name.value;throw new y_.GraphQLError(`The subscription field "${F}" is not defined.`,{nodes:p})}let y=(0,Rw.addPath)(void 0,l,o.name),g=(0,Jd.buildResolveInfo)(e,f,p,o,y);try{var _;let F=(0,xW.getArgumentValues)(f,p[0],i),U=e.contextValue,J=yield((_=f.subscribe)!==null&&_!==void 0?_:e.subscribeFieldResolver)(a,F,U,g);if(J instanceof Error)throw J;return J}catch(F){throw(0,UW.locatedError)(F,p,(0,Rw.pathToArray)(y))}})}});var Cw=w(Li=>{"use strict";m();T();N();Object.defineProperty(Li,"__esModule",{value:!0});Object.defineProperty(Li,"createSourceEventStream",{enumerable:!0,get:function(){return Lw.createSourceEventStream}});Object.defineProperty(Li,"defaultFieldResolver",{enumerable:!0,get:function(){return rN.defaultFieldResolver}});Object.defineProperty(Li,"defaultTypeResolver",{enumerable:!0,get:function(){return rN.defaultTypeResolver}});Object.defineProperty(Li,"execute",{enumerable:!0,get:function(){return rN.execute}});Object.defineProperty(Li,"executeSync",{enumerable:!0,get:function(){return rN.executeSync}});Object.defineProperty(Li,"getArgumentValues",{enumerable:!0,get:function(){return I_.getArgumentValues}});Object.defineProperty(Li,"getDirectiveValues",{enumerable:!0,get:function(){return I_.getDirectiveValues}});Object.defineProperty(Li,"getVariableValues",{enumerable:!0,get:function(){return I_.getVariableValues}});Object.defineProperty(Li,"responsePathAsArray",{enumerable:!0,get:function(){return KW.pathToArray}});Object.defineProperty(Li,"subscribe",{enumerable:!0,get:function(){return Lw.subscribe}});var KW=kd(),rN=Qd(),Lw=ww(),I_=Hc()});var Bw=w(v_=>{"use strict";m();T();N();Object.defineProperty(v_,"__esModule",{value:!0});v_.NoDeprecatedCustomRule=GW;var g_=Ir(),Hd=He(),__=Ft();function GW(e){return{Field(t){let n=e.getFieldDef(),r=n==null?void 0:n.deprecationReason;if(n&&r!=null){let i=e.getParentType();i!=null||(0,g_.invariant)(!1),e.reportError(new Hd.GraphQLError(`The field ${i.name}.${n.name} is deprecated. ${r}`,{nodes:t}))}},Argument(t){let n=e.getArgument(),r=n==null?void 0:n.deprecationReason;if(n&&r!=null){let i=e.getDirective();if(i!=null)e.reportError(new Hd.GraphQLError(`Directive "@${i.name}" argument "${n.name}" is deprecated. ${r}`,{nodes:t}));else{let a=e.getParentType(),o=e.getFieldDef();a!=null&&o!=null||(0,g_.invariant)(!1),e.reportError(new Hd.GraphQLError(`Field "${a.name}.${o.name}" argument "${n.name}" is deprecated. ${r}`,{nodes:t}))}}},ObjectField(t){let n=(0,__.getNamedType)(e.getParentInputType());if((0,__.isInputObjectType)(n)){let r=n.getFields()[t.name.value],i=r==null?void 0:r.deprecationReason;i!=null&&e.reportError(new Hd.GraphQLError(`The input field ${n.name}.${r.name} is deprecated. ${i}`,{nodes:t}))}},EnumValue(t){let n=e.getEnumValue(),r=n==null?void 0:n.deprecationReason;if(n&&r!=null){let i=(0,__.getNamedType)(e.getInputType());i!=null||(0,g_.invariant)(!1),e.reportError(new Hd.GraphQLError(`The enum value "${i.name}.${n.name}" is deprecated. ${r}`,{nodes:t}))}}}}});var Uw=w(S_=>{"use strict";m();T();N();Object.defineProperty(S_,"__esModule",{value:!0});S_.NoSchemaIntrospectionCustomRule=JW;var $W=He(),QW=Ft(),YW=Ri();function JW(e){return{Field(t){let n=(0,QW.getNamedType)(e.getType());n&&(0,YW.isIntrospectionType)(n)&&e.reportError(new $W.GraphQLError(`GraphQL introspection has been disabled, but the requested query contained the field "${t.name.value}".`,{nodes:t}))}}}});var Mw=w(dt=>{"use strict";m();T();N();Object.defineProperty(dt,"__esModule",{value:!0});Object.defineProperty(dt,"ExecutableDefinitionsRule",{enumerable:!0,get:function(){return WW.ExecutableDefinitionsRule}});Object.defineProperty(dt,"FieldsOnCorrectTypeRule",{enumerable:!0,get:function(){return XW.FieldsOnCorrectTypeRule}});Object.defineProperty(dt,"FragmentsOnCompositeTypesRule",{enumerable:!0,get:function(){return ZW.FragmentsOnCompositeTypesRule}});Object.defineProperty(dt,"KnownArgumentNamesRule",{enumerable:!0,get:function(){return e8.KnownArgumentNamesRule}});Object.defineProperty(dt,"KnownDirectivesRule",{enumerable:!0,get:function(){return t8.KnownDirectivesRule}});Object.defineProperty(dt,"KnownFragmentNamesRule",{enumerable:!0,get:function(){return n8.KnownFragmentNamesRule}});Object.defineProperty(dt,"KnownTypeNamesRule",{enumerable:!0,get:function(){return r8.KnownTypeNamesRule}});Object.defineProperty(dt,"LoneAnonymousOperationRule",{enumerable:!0,get:function(){return i8.LoneAnonymousOperationRule}});Object.defineProperty(dt,"LoneSchemaDefinitionRule",{enumerable:!0,get:function(){return S8.LoneSchemaDefinitionRule}});Object.defineProperty(dt,"MaxIntrospectionDepthRule",{enumerable:!0,get:function(){return v8.MaxIntrospectionDepthRule}});Object.defineProperty(dt,"NoDeprecatedCustomRule",{enumerable:!0,get:function(){return w8.NoDeprecatedCustomRule}});Object.defineProperty(dt,"NoFragmentCyclesRule",{enumerable:!0,get:function(){return a8.NoFragmentCyclesRule}});Object.defineProperty(dt,"NoSchemaIntrospectionCustomRule",{enumerable:!0,get:function(){return L8.NoSchemaIntrospectionCustomRule}});Object.defineProperty(dt,"NoUndefinedVariablesRule",{enumerable:!0,get:function(){return s8.NoUndefinedVariablesRule}});Object.defineProperty(dt,"NoUnusedFragmentsRule",{enumerable:!0,get:function(){return o8.NoUnusedFragmentsRule}});Object.defineProperty(dt,"NoUnusedVariablesRule",{enumerable:!0,get:function(){return u8.NoUnusedVariablesRule}});Object.defineProperty(dt,"OverlappingFieldsCanBeMergedRule",{enumerable:!0,get:function(){return c8.OverlappingFieldsCanBeMergedRule}});Object.defineProperty(dt,"PossibleFragmentSpreadsRule",{enumerable:!0,get:function(){return l8.PossibleFragmentSpreadsRule}});Object.defineProperty(dt,"PossibleTypeExtensionsRule",{enumerable:!0,get:function(){return P8.PossibleTypeExtensionsRule}});Object.defineProperty(dt,"ProvidedRequiredArgumentsRule",{enumerable:!0,get:function(){return d8.ProvidedRequiredArgumentsRule}});Object.defineProperty(dt,"ScalarLeafsRule",{enumerable:!0,get:function(){return p8.ScalarLeafsRule}});Object.defineProperty(dt,"SingleFieldSubscriptionsRule",{enumerable:!0,get:function(){return f8.SingleFieldSubscriptionsRule}});Object.defineProperty(dt,"UniqueArgumentDefinitionNamesRule",{enumerable:!0,get:function(){return R8.UniqueArgumentDefinitionNamesRule}});Object.defineProperty(dt,"UniqueArgumentNamesRule",{enumerable:!0,get:function(){return m8.UniqueArgumentNamesRule}});Object.defineProperty(dt,"UniqueDirectiveNamesRule",{enumerable:!0,get:function(){return F8.UniqueDirectiveNamesRule}});Object.defineProperty(dt,"UniqueDirectivesPerLocationRule",{enumerable:!0,get:function(){return N8.UniqueDirectivesPerLocationRule}});Object.defineProperty(dt,"UniqueEnumValueNamesRule",{enumerable:!0,get:function(){return b8.UniqueEnumValueNamesRule}});Object.defineProperty(dt,"UniqueFieldDefinitionNamesRule",{enumerable:!0,get:function(){return A8.UniqueFieldDefinitionNamesRule}});Object.defineProperty(dt,"UniqueFragmentNamesRule",{enumerable:!0,get:function(){return T8.UniqueFragmentNamesRule}});Object.defineProperty(dt,"UniqueInputFieldNamesRule",{enumerable:!0,get:function(){return E8.UniqueInputFieldNamesRule}});Object.defineProperty(dt,"UniqueOperationNamesRule",{enumerable:!0,get:function(){return h8.UniqueOperationNamesRule}});Object.defineProperty(dt,"UniqueOperationTypesRule",{enumerable:!0,get:function(){return O8.UniqueOperationTypesRule}});Object.defineProperty(dt,"UniqueTypeNamesRule",{enumerable:!0,get:function(){return D8.UniqueTypeNamesRule}});Object.defineProperty(dt,"UniqueVariableNamesRule",{enumerable:!0,get:function(){return y8.UniqueVariableNamesRule}});Object.defineProperty(dt,"ValidationContext",{enumerable:!0,get:function(){return zW.ValidationContext}});Object.defineProperty(dt,"ValuesOfCorrectTypeRule",{enumerable:!0,get:function(){return I8.ValuesOfCorrectTypeRule}});Object.defineProperty(dt,"VariablesAreInputTypesRule",{enumerable:!0,get:function(){return g8.VariablesAreInputTypesRule}});Object.defineProperty(dt,"VariablesInAllowedPositionRule",{enumerable:!0,get:function(){return _8.VariablesInAllowedPositionRule}});Object.defineProperty(dt,"recommendedRules",{enumerable:!0,get:function(){return kw.recommendedRules}});Object.defineProperty(dt,"specifiedRules",{enumerable:!0,get:function(){return kw.specifiedRules}});Object.defineProperty(dt,"validate",{enumerable:!0,get:function(){return HW.validate}});var HW=Wc(),zW=n_(),kw=Zg(),WW=TI(),XW=hI(),ZW=II(),e8=gI(),t8=OI(),n8=bI(),r8=FI(),i8=wI(),a8=MI(),s8=qI(),o8=jI(),u8=GI(),c8=eg(),l8=rg(),d8=og(),p8=cg(),f8=hg(),m8=vg(),N8=Ag(),T8=Bg(),E8=kg(),h8=xg(),y8=$g(),I8=Jg(),g8=zg(),_8=Xg(),v8=UI(),S8=CI(),O8=Vg(),D8=Kg(),b8=Fg(),A8=Lg(),R8=gg(),F8=Og(),P8=ag(),w8=Bw(),L8=Uw()});var xw=w(Ku=>{"use strict";m();T();N();Object.defineProperty(Ku,"__esModule",{value:!0});Object.defineProperty(Ku,"GraphQLError",{enumerable:!0,get:function(){return O_.GraphQLError}});Object.defineProperty(Ku,"formatError",{enumerable:!0,get:function(){return O_.formatError}});Object.defineProperty(Ku,"locatedError",{enumerable:!0,get:function(){return B8.locatedError}});Object.defineProperty(Ku,"printError",{enumerable:!0,get:function(){return O_.printError}});Object.defineProperty(Ku,"syntaxError",{enumerable:!0,get:function(){return C8.syntaxError}});var O_=He(),C8=Zf(),B8=Hm()});var b_=w(D_=>{"use strict";m();T();N();Object.defineProperty(D_,"__esModule",{value:!0});D_.getIntrospectionQuery=U8;function U8(e){let t=M({descriptions:!0,specifiedByUrl:!1,directiveIsRepeatable:!1,schemaDescription:!1,inputValueDeprecation:!1,oneOf:!1},e),n=t.descriptions?"description":"",r=t.specifiedByUrl?"specifiedByURL":"",i=t.directiveIsRepeatable?"isRepeatable":"",a=t.schemaDescription?n:"";function o(l){return t.inputValueDeprecation?l:""}let c=t.oneOf?"isOneOf":"";return` query IntrospectionQuery { __schema { ${a} @@ -173,25 +173,25 @@ In some cases, you need to provide options to alter GraphQL's execution behavior } } } - `}});var xw=w(b_=>{"use strict";f();N();m();Object.defineProperty(b_,"__esModule",{value:!0});b_.getOperationAST=M8;var k8=Rt();function M8(e,t){let n=null;for(let i of e.definitions)if(i.kind===k8.Kind.OPERATION_DEFINITION){var r;if(t==null){if(n)return null;n=i}else if(((r=i.name)===null||r===void 0?void 0:r.value)===t)return i}return n}});var qw=w(A_=>{"use strict";f();N();m();Object.defineProperty(A_,"__esModule",{value:!0});A_.getOperationRootType=x8;var nN=He();function x8(e,t){if(t.operation==="query"){let n=e.getQueryType();if(!n)throw new nN.GraphQLError("Schema does not define the required query root type.",{nodes:t});return n}if(t.operation==="mutation"){let n=e.getMutationType();if(!n)throw new nN.GraphQLError("Schema is not configured for mutations.",{nodes:t});return n}if(t.operation==="subscription"){let n=e.getSubscriptionType();if(!n)throw new nN.GraphQLError("Schema is not configured for subscriptions.",{nodes:t});return n}throw new nN.GraphQLError("Can only have query, mutation and subscription operations.",{nodes:t})}});var Vw=w(R_=>{"use strict";f();N();m();Object.defineProperty(R_,"__esModule",{value:!0});R_.introspectionFromSchema=G8;var q8=Ir(),V8=xc(),j8=$d(),K8=D_();function G8(e,t){let n=M({specifiedByUrl:!0,directiveIsRepeatable:!0,schemaDescription:!0,inputValueDeprecation:!0,oneOf:!0},t),r=(0,V8.parse)((0,K8.getIntrospectionQuery)(n)),i=(0,j8.executeSync)({schema:e,document:r});return!i.errors&&i.data||(0,q8.invariant)(!1),i.data}});var Kw=w(F_=>{"use strict";f();N();m();Object.defineProperty(F_,"__esModule",{value:!0});F_.buildClientSchema=W8;var $8=Cr(),di=Yt(),jw=Sa(),rN=Td(),Q8=xc(),pi=Ft(),Y8=$r(),La=Ri(),J8=Aa(),H8=Uu(),z8=qd();function W8(e,t){(0,jw.isObjectLike)(e)&&(0,jw.isObjectLike)(e.__schema)||(0,$8.devAssert)(!1,`Invalid or incomplete introspection result. Ensure that you are passing "data" property of introspection response and no "errors" was returned alongside: ${(0,di.inspect)(e)}.`);let n=e.__schema,r=(0,rN.keyValMap)(n.types,X=>X.name,X=>g(X));for(let X of[...J8.specifiedScalarTypes,...La.introspectionTypes])r[X.name]&&(r[X.name]=X);let i=n.queryType?T(n.queryType):null,a=n.mutationType?T(n.mutationType):null,o=n.subscriptionType?T(n.subscriptionType):null,c=n.directives?n.directives.map(et):[];return new H8.GraphQLSchema({description:n.description,query:i,mutation:a,subscription:o,types:Object.values(r),directives:c,assumeValid:t==null?void 0:t.assumeValid});function l(X){if(X.kind===La.TypeKind.LIST){let ve=X.ofType;if(!ve)throw new Error("Decorated type deeper than introspection query.");return new pi.GraphQLList(l(ve))}if(X.kind===La.TypeKind.NON_NULL){let ve=X.ofType;if(!ve)throw new Error("Decorated type deeper than introspection query.");let gt=l(ve);return new pi.GraphQLNonNull((0,pi.assertNullableType)(gt))}return p(X)}function p(X){let ve=X.name;if(!ve)throw new Error(`Unknown type reference: ${(0,di.inspect)(X)}.`);let gt=r[ve];if(!gt)throw new Error(`Invalid or incomplete schema, unknown type: ${ve}. Ensure that a full introspection query is used in order to build a client schema.`);return gt}function T(X){return(0,pi.assertObjectType)(p(X))}function y(X){return(0,pi.assertInterfaceType)(p(X))}function g(X){if(X!=null&&X.name!=null&&X.kind!=null)switch(X.kind){case La.TypeKind.SCALAR:return _(X);case La.TypeKind.OBJECT:return U(X);case La.TypeKind.INTERFACE:return K(X);case La.TypeKind.UNION:return J(X);case La.TypeKind.ENUM:return ee(X);case La.TypeKind.INPUT_OBJECT:return W(X)}let ve=(0,di.inspect)(X);throw new Error(`Invalid or incomplete introspection result. Ensure that a full introspection query is used in order to build a client schema: ${ve}.`)}function _(X){return new pi.GraphQLScalarType({name:X.name,description:X.description,specifiedByURL:X.specifiedByURL})}function F(X){if(X.interfaces===null&&X.kind===La.TypeKind.INTERFACE)return[];if(!X.interfaces){let ve=(0,di.inspect)(X);throw new Error(`Introspection result missing interfaces: ${ve}.`)}return X.interfaces.map(y)}function U(X){return new pi.GraphQLObjectType({name:X.name,description:X.description,interfaces:()=>F(X),fields:()=>Te(X)})}function K(X){return new pi.GraphQLInterfaceType({name:X.name,description:X.description,interfaces:()=>F(X),fields:()=>Te(X)})}function J(X){if(!X.possibleTypes){let ve=(0,di.inspect)(X);throw new Error(`Introspection result missing possibleTypes: ${ve}.`)}return new pi.GraphQLUnionType({name:X.name,description:X.description,types:()=>X.possibleTypes.map(T)})}function ee(X){if(!X.enumValues){let ve=(0,di.inspect)(X);throw new Error(`Introspection result missing enumValues: ${ve}.`)}return new pi.GraphQLEnumType({name:X.name,description:X.description,values:(0,rN.keyValMap)(X.enumValues,ve=>ve.name,ve=>({description:ve.description,deprecationReason:ve.deprecationReason}))})}function W(X){if(!X.inputFields){let ve=(0,di.inspect)(X);throw new Error(`Introspection result missing inputFields: ${ve}.`)}return new pi.GraphQLInputObjectType({name:X.name,description:X.description,fields:()=>we(X.inputFields),isOneOf:X.isOneOf})}function Te(X){if(!X.fields)throw new Error(`Introspection result missing fields: ${(0,di.inspect)(X)}.`);return(0,rN.keyValMap)(X.fields,ve=>ve.name,de)}function de(X){let ve=l(X.type);if(!(0,pi.isOutputType)(ve)){let gt=(0,di.inspect)(ve);throw new Error(`Introspection must provide output type for fields, but received: ${gt}.`)}if(!X.args){let gt=(0,di.inspect)(X);throw new Error(`Introspection result missing field args: ${gt}.`)}return{description:X.description,deprecationReason:X.deprecationReason,type:ve,args:we(X.args)}}function we(X){return(0,rN.keyValMap)(X,ve=>ve.name,qe)}function qe(X){let ve=l(X.type);if(!(0,pi.isInputType)(ve)){let Ht=(0,di.inspect)(ve);throw new Error(`Introspection must provide input type for arguments, but received: ${Ht}.`)}let gt=X.defaultValue!=null?(0,z8.valueFromAST)((0,Q8.parseValue)(X.defaultValue),ve):void 0;return{description:X.description,type:ve,defaultValue:gt,deprecationReason:X.deprecationReason}}function et(X){if(!X.args){let ve=(0,di.inspect)(X);throw new Error(`Introspection result missing directive args: ${ve}.`)}if(!X.locations){let ve=(0,di.inspect)(X);throw new Error(`Introspection result missing directive locations: ${ve}.`)}return new Y8.GraphQLDirective({name:X.name,description:X.description,isRepeatable:X.isRepeatable,locations:X.locations.slice(),args:we(X.args)})}}});var w_=w(aN=>{"use strict";f();N();m();Object.defineProperty(aN,"__esModule",{value:!0});aN.extendSchema=r5;aN.extendSchemaImpl=Ww;var X8=Cr(),Z8=Yt(),e5=Ir(),t5=xo(),Hd=Py(),Ci=Rt(),Gw=Mu(),In=Ft(),zd=$r(),Hw=Ri(),zw=Aa(),$w=Uu(),n5=Wc(),P_=Hc(),Qw=qd();function r5(e,t,n){(0,$w.assertSchema)(e),t!=null&&t.kind===Ci.Kind.DOCUMENT||(0,X8.devAssert)(!1,"Must provide valid Document AST."),(n==null?void 0:n.assumeValid)!==!0&&(n==null?void 0:n.assumeValidSDL)!==!0&&(0,n5.assertValidSDLExtension)(t,e);let r=e.toConfig(),i=Ww(r,t,n);return r===i?e:new $w.GraphQLSchema(i)}function Ww(e,t,n){var r,i,a,o;let c=[],l=Object.create(null),p=[],T,y=[];for(let se of t.definitions)if(se.kind===Ci.Kind.SCHEMA_DEFINITION)T=se;else if(se.kind===Ci.Kind.SCHEMA_EXTENSION)y.push(se);else if((0,Gw.isTypeDefinitionNode)(se))c.push(se);else if((0,Gw.isTypeExtensionNode)(se)){let De=se.name.value,_e=l[De];l[De]=_e?_e.concat([se]):[se]}else se.kind===Ci.Kind.DIRECTIVE_DEFINITION&&p.push(se);if(Object.keys(l).length===0&&c.length===0&&p.length===0&&y.length===0&&T==null)return e;let g=Object.create(null);for(let se of e.types)g[se.name]=ee(se);for(let se of c){var _;let De=se.name.value;g[De]=(_=Yw[De])!==null&&_!==void 0?_:An(se)}let F=M(M({query:e.query&&K(e.query),mutation:e.mutation&&K(e.mutation),subscription:e.subscription&&K(e.subscription)},T&>([T])),gt(y));return Q(M({description:(r=T)===null||r===void 0||(i=r.description)===null||i===void 0?void 0:i.value},F),{types:Object.values(g),directives:[...e.directives.map(J),...p.map(bn)],extensions:Object.create(null),astNode:(a=T)!==null&&a!==void 0?a:e.astNode,extensionASTNodes:e.extensionASTNodes.concat(y),assumeValid:(o=n==null?void 0:n.assumeValid)!==null&&o!==void 0?o:!1});function U(se){return(0,In.isListType)(se)?new In.GraphQLList(U(se.ofType)):(0,In.isNonNullType)(se)?new In.GraphQLNonNull(U(se.ofType)):K(se)}function K(se){return g[se.name]}function J(se){let De=se.toConfig();return new zd.GraphQLDirective(Q(M({},De),{args:(0,Hd.mapValue)(De.args,ve)}))}function ee(se){if((0,Hw.isIntrospectionType)(se)||(0,zw.isSpecifiedScalarType)(se))return se;if((0,In.isScalarType)(se))return de(se);if((0,In.isObjectType)(se))return we(se);if((0,In.isInterfaceType)(se))return qe(se);if((0,In.isUnionType)(se))return et(se);if((0,In.isEnumType)(se))return Te(se);if((0,In.isInputObjectType)(se))return W(se);(0,e5.invariant)(!1,"Unexpected type: "+(0,Z8.inspect)(se))}function W(se){var De;let _e=se.toConfig(),Le=(De=l[_e.name])!==null&&De!==void 0?De:[];return new In.GraphQLInputObjectType(Q(M({},_e),{fields:()=>M(M({},(0,Hd.mapValue)(_e.fields,_t=>Q(M({},_t),{type:U(_t.type)}))),Rr(Le)),extensionASTNodes:_e.extensionASTNodes.concat(Le)}))}function Te(se){var De;let _e=se.toConfig(),Le=(De=l[se.name])!==null&&De!==void 0?De:[];return new In.GraphQLEnumType(Q(M({},_e),{values:M(M({},_e.values),Fr(Le)),extensionASTNodes:_e.extensionASTNodes.concat(Le)}))}function de(se){var De;let _e=se.toConfig(),Le=(De=l[_e.name])!==null&&De!==void 0?De:[],_t=_e.specifiedByURL;for(let ae of Le){var Y;_t=(Y=Jw(ae))!==null&&Y!==void 0?Y:_t}return new In.GraphQLScalarType(Q(M({},_e),{specifiedByURL:_t,extensionASTNodes:_e.extensionASTNodes.concat(Le)}))}function we(se){var De;let _e=se.toConfig(),Le=(De=l[_e.name])!==null&&De!==void 0?De:[];return new In.GraphQLObjectType(Q(M({},_e),{interfaces:()=>[...se.getInterfaces().map(K),...kn(Le)],fields:()=>M(M({},(0,Hd.mapValue)(_e.fields,X)),Vt(Le)),extensionASTNodes:_e.extensionASTNodes.concat(Le)}))}function qe(se){var De;let _e=se.toConfig(),Le=(De=l[_e.name])!==null&&De!==void 0?De:[];return new In.GraphQLInterfaceType(Q(M({},_e),{interfaces:()=>[...se.getInterfaces().map(K),...kn(Le)],fields:()=>M(M({},(0,Hd.mapValue)(_e.fields,X)),Vt(Le)),extensionASTNodes:_e.extensionASTNodes.concat(Le)}))}function et(se){var De;let _e=se.toConfig(),Le=(De=l[_e.name])!==null&&De!==void 0?De:[];return new In.GraphQLUnionType(Q(M({},_e),{types:()=>[...se.getTypes().map(K),...$t(Le)],extensionASTNodes:_e.extensionASTNodes.concat(Le)}))}function X(se){return Q(M({},se),{type:U(se.type),args:se.args&&(0,Hd.mapValue)(se.args,ve)})}function ve(se){return Q(M({},se),{type:U(se.type)})}function gt(se){let De={};for(let Le of se){var _e;let _t=(_e=Le.operationTypes)!==null&&_e!==void 0?_e:[];for(let Y of _t)De[Y.operation]=Ht(Y.type)}return De}function Ht(se){var De;let _e=se.name.value,Le=(De=Yw[_e])!==null&&De!==void 0?De:g[_e];if(Le===void 0)throw new Error(`Unknown type: "${_e}".`);return Le}function zt(se){return se.kind===Ci.Kind.LIST_TYPE?new In.GraphQLList(zt(se.type)):se.kind===Ci.Kind.NON_NULL_TYPE?new In.GraphQLNonNull(zt(se.type)):Ht(se)}function bn(se){var De;return new zd.GraphQLDirective({name:se.name.value,description:(De=se.description)===null||De===void 0?void 0:De.value,locations:se.locations.map(({value:_e})=>_e),isRepeatable:se.repeatable,args:dn(se.arguments),astNode:se})}function Vt(se){let De=Object.create(null);for(let _t of se){var _e;let Y=(_e=_t.fields)!==null&&_e!==void 0?_e:[];for(let ae of Y){var Le;De[ae.name.value]={type:zt(ae.type),description:(Le=ae.description)===null||Le===void 0?void 0:Le.value,args:dn(ae.arguments),deprecationReason:iN(ae),astNode:ae}}}return De}function dn(se){let De=se!=null?se:[],_e=Object.create(null);for(let _t of De){var Le;let Y=zt(_t.type);_e[_t.name.value]={type:Y,description:(Le=_t.description)===null||Le===void 0?void 0:Le.value,defaultValue:(0,Qw.valueFromAST)(_t.defaultValue,Y),deprecationReason:iN(_t),astNode:_t}}return _e}function Rr(se){let De=Object.create(null);for(let _t of se){var _e;let Y=(_e=_t.fields)!==null&&_e!==void 0?_e:[];for(let ae of Y){var Le;let Me=zt(ae.type);De[ae.name.value]={type:Me,description:(Le=ae.description)===null||Le===void 0?void 0:Le.value,defaultValue:(0,Qw.valueFromAST)(ae.defaultValue,Me),deprecationReason:iN(ae),astNode:ae}}}return De}function Fr(se){let De=Object.create(null);for(let _t of se){var _e;let Y=(_e=_t.values)!==null&&_e!==void 0?_e:[];for(let ae of Y){var Le;De[ae.name.value]={description:(Le=ae.description)===null||Le===void 0?void 0:Le.value,deprecationReason:iN(ae),astNode:ae}}}return De}function kn(se){return se.flatMap(De=>{var _e,Le;return(_e=(Le=De.interfaces)===null||Le===void 0?void 0:Le.map(Ht))!==null&&_e!==void 0?_e:[]})}function $t(se){return se.flatMap(De=>{var _e,Le;return(_e=(Le=De.types)===null||Le===void 0?void 0:Le.map(Ht))!==null&&_e!==void 0?_e:[]})}function An(se){var De;let _e=se.name.value,Le=(De=l[_e])!==null&&De!==void 0?De:[];switch(se.kind){case Ci.Kind.OBJECT_TYPE_DEFINITION:{var _t;let tt=[se,...Le];return new In.GraphQLObjectType({name:_e,description:(_t=se.description)===null||_t===void 0?void 0:_t.value,interfaces:()=>kn(tt),fields:()=>Vt(tt),astNode:se,extensionASTNodes:Le})}case Ci.Kind.INTERFACE_TYPE_DEFINITION:{var Y;let tt=[se,...Le];return new In.GraphQLInterfaceType({name:_e,description:(Y=se.description)===null||Y===void 0?void 0:Y.value,interfaces:()=>kn(tt),fields:()=>Vt(tt),astNode:se,extensionASTNodes:Le})}case Ci.Kind.ENUM_TYPE_DEFINITION:{var ae;let tt=[se,...Le];return new In.GraphQLEnumType({name:_e,description:(ae=se.description)===null||ae===void 0?void 0:ae.value,values:Fr(tt),astNode:se,extensionASTNodes:Le})}case Ci.Kind.UNION_TYPE_DEFINITION:{var Me;let tt=[se,...Le];return new In.GraphQLUnionType({name:_e,description:(Me=se.description)===null||Me===void 0?void 0:Me.value,types:()=>$t(tt),astNode:se,extensionASTNodes:Le})}case Ci.Kind.SCALAR_TYPE_DEFINITION:{var Qe;return new In.GraphQLScalarType({name:_e,description:(Qe=se.description)===null||Qe===void 0?void 0:Qe.value,specifiedByURL:Jw(se),astNode:se,extensionASTNodes:Le})}case Ci.Kind.INPUT_OBJECT_TYPE_DEFINITION:{var Lt;let tt=[se,...Le];return new In.GraphQLInputObjectType({name:_e,description:(Lt=se.description)===null||Lt===void 0?void 0:Lt.value,fields:()=>Rr(tt),astNode:se,extensionASTNodes:Le,isOneOf:i5(se)})}}}}var Yw=(0,t5.keyMap)([...zw.specifiedScalarTypes,...Hw.introspectionTypes],e=>e.name);function iN(e){let t=(0,P_.getDirectiveValues)(zd.GraphQLDeprecatedDirective,e);return t==null?void 0:t.reason}function Jw(e){let t=(0,P_.getDirectiveValues)(zd.GraphQLSpecifiedByDirective,e);return t==null?void 0:t.url}function i5(e){return!!(0,P_.getDirectiveValues)(zd.GraphQLOneOfDirective,e)}});var Zw=w(sN=>{"use strict";f();N();m();Object.defineProperty(sN,"__esModule",{value:!0});sN.buildASTSchema=Xw;sN.buildSchema=p5;var a5=Cr(),s5=Rt(),o5=xc(),u5=$r(),c5=Uu(),l5=Wc(),d5=w_();function Xw(e,t){e!=null&&e.kind===s5.Kind.DOCUMENT||(0,a5.devAssert)(!1,"Must provide valid Document AST."),(t==null?void 0:t.assumeValid)!==!0&&(t==null?void 0:t.assumeValidSDL)!==!0&&(0,l5.assertValidSDL)(e);let n={description:void 0,types:[],directives:[],extensions:Object.create(null),extensionASTNodes:[],assumeValid:!1},r=(0,d5.extendSchemaImpl)(n,e,t);if(r.astNode==null)for(let a of r.types)switch(a.name){case"Query":r.query=a;break;case"Mutation":r.mutation=a;break;case"Subscription":r.subscription=a;break}let i=[...r.directives,...u5.specifiedDirectives.filter(a=>r.directives.every(o=>o.name!==a.name))];return new c5.GraphQLSchema(Q(M({},r),{directives:i}))}function p5(e,t){let n=(0,o5.parse)(e,{noLocation:t==null?void 0:t.noLocation,allowLegacyFragmentVariables:t==null?void 0:t.allowLegacyFragmentVariables});return Xw(n,{assumeValidSDL:t==null?void 0:t.assumeValidSDL,assumeValid:t==null?void 0:t.assumeValid})}});var nL=w(C_=>{"use strict";f();N();m();Object.defineProperty(C_,"__esModule",{value:!0});C_.lexicographicSortSchema=y5;var f5=Yt(),m5=Ir(),N5=Td(),eL=Ed(),Br=Ft(),T5=$r(),E5=Ri(),h5=Uu();function y5(e){let t=e.toConfig(),n=(0,N5.keyValMap)(L_(t.types),g=>g.name,y);return new h5.GraphQLSchema(Q(M({},t),{types:Object.values(n),directives:L_(t.directives).map(o),query:a(t.query),mutation:a(t.mutation),subscription:a(t.subscription)}));function r(g){return(0,Br.isListType)(g)?new Br.GraphQLList(r(g.ofType)):(0,Br.isNonNullType)(g)?new Br.GraphQLNonNull(r(g.ofType)):i(g)}function i(g){return n[g.name]}function a(g){return g&&i(g)}function o(g){let _=g.toConfig();return new T5.GraphQLDirective(Q(M({},_),{locations:tL(_.locations,F=>F),args:c(_.args)}))}function c(g){return oN(g,_=>Q(M({},_),{type:r(_.type)}))}function l(g){return oN(g,_=>Q(M({},_),{type:r(_.type),args:_.args&&c(_.args)}))}function p(g){return oN(g,_=>Q(M({},_),{type:r(_.type)}))}function T(g){return L_(g).map(i)}function y(g){if((0,Br.isScalarType)(g)||(0,E5.isIntrospectionType)(g))return g;if((0,Br.isObjectType)(g)){let _=g.toConfig();return new Br.GraphQLObjectType(Q(M({},_),{interfaces:()=>T(_.interfaces),fields:()=>l(_.fields)}))}if((0,Br.isInterfaceType)(g)){let _=g.toConfig();return new Br.GraphQLInterfaceType(Q(M({},_),{interfaces:()=>T(_.interfaces),fields:()=>l(_.fields)}))}if((0,Br.isUnionType)(g)){let _=g.toConfig();return new Br.GraphQLUnionType(Q(M({},_),{types:()=>T(_.types)}))}if((0,Br.isEnumType)(g)){let _=g.toConfig();return new Br.GraphQLEnumType(Q(M({},_),{values:oN(_.values,F=>F)}))}if((0,Br.isInputObjectType)(g)){let _=g.toConfig();return new Br.GraphQLInputObjectType(Q(M({},_),{fields:()=>p(_.fields)}))}(0,m5.invariant)(!1,"Unexpected type: "+(0,f5.inspect)(g))}}function oN(e,t){let n=Object.create(null);for(let r of Object.keys(e).sort(eL.naturalCompare))n[r]=t(e[r]);return n}function L_(e){return tL(e,t=>t.name)}function tL(e,t){return e.slice().sort((n,r)=>{let i=t(n),a=t(r);return(0,eL.naturalCompare)(i,a)})}});var cL=w(Wd=>{"use strict";f();N();m();Object.defineProperty(Wd,"__esModule",{value:!0});Wd.printIntrospectionSchema=D5;Wd.printSchema=O5;Wd.printType=aL;var I5=Yt(),g5=Ir(),_5=ud(),U_=Rt(),uN=li(),Zc=Ft(),k_=$r(),rL=Ri(),v5=Aa(),S5=Fd();function O5(e){return iL(e,t=>!(0,k_.isSpecifiedDirective)(t),b5)}function D5(e){return iL(e,k_.isSpecifiedDirective,rL.isIntrospectionType)}function b5(e){return!(0,v5.isSpecifiedScalarType)(e)&&!(0,rL.isIntrospectionType)(e)}function iL(e,t,n){let r=e.getDirectives().filter(t),i=Object.values(e.getTypeMap()).filter(n);return[A5(e),...r.map(a=>U5(a)),...i.map(a=>aL(a))].filter(Boolean).join(` + `}});var qw=w(A_=>{"use strict";m();T();N();Object.defineProperty(A_,"__esModule",{value:!0});A_.getOperationAST=M8;var k8=Rt();function M8(e,t){let n=null;for(let i of e.definitions)if(i.kind===k8.Kind.OPERATION_DEFINITION){var r;if(t==null){if(n)return null;n=i}else if(((r=i.name)===null||r===void 0?void 0:r.value)===t)return i}return n}});var Vw=w(R_=>{"use strict";m();T();N();Object.defineProperty(R_,"__esModule",{value:!0});R_.getOperationRootType=x8;var iN=He();function x8(e,t){if(t.operation==="query"){let n=e.getQueryType();if(!n)throw new iN.GraphQLError("Schema does not define the required query root type.",{nodes:t});return n}if(t.operation==="mutation"){let n=e.getMutationType();if(!n)throw new iN.GraphQLError("Schema is not configured for mutations.",{nodes:t});return n}if(t.operation==="subscription"){let n=e.getSubscriptionType();if(!n)throw new iN.GraphQLError("Schema is not configured for subscriptions.",{nodes:t});return n}throw new iN.GraphQLError("Can only have query, mutation and subscription operations.",{nodes:t})}});var jw=w(F_=>{"use strict";m();T();N();Object.defineProperty(F_,"__esModule",{value:!0});F_.introspectionFromSchema=G8;var q8=Ir(),V8=xc(),j8=Qd(),K8=b_();function G8(e,t){let n=M({specifiedByUrl:!0,directiveIsRepeatable:!0,schemaDescription:!0,inputValueDeprecation:!0,oneOf:!0},t),r=(0,V8.parse)((0,K8.getIntrospectionQuery)(n)),i=(0,j8.executeSync)({schema:e,document:r});return!i.errors&&i.data||(0,q8.invariant)(!1),i.data}});var Gw=w(P_=>{"use strict";m();T();N();Object.defineProperty(P_,"__esModule",{value:!0});P_.buildClientSchema=W8;var $8=Cr(),di=Yt(),Kw=Sa(),aN=Ed(),Q8=xc(),pi=Ft(),Y8=$r(),La=Ri(),J8=Aa(),H8=Uu(),z8=Vd();function W8(e,t){(0,Kw.isObjectLike)(e)&&(0,Kw.isObjectLike)(e.__schema)||(0,$8.devAssert)(!1,`Invalid or incomplete introspection result. Ensure that you are passing "data" property of introspection response and no "errors" was returned alongside: ${(0,di.inspect)(e)}.`);let n=e.__schema,r=(0,aN.keyValMap)(n.types,X=>X.name,X=>g(X));for(let X of[...J8.specifiedScalarTypes,...La.introspectionTypes])r[X.name]&&(r[X.name]=X);let i=n.queryType?f(n.queryType):null,a=n.mutationType?f(n.mutationType):null,o=n.subscriptionType?f(n.subscriptionType):null,c=n.directives?n.directives.map(et):[];return new H8.GraphQLSchema({description:n.description,query:i,mutation:a,subscription:o,types:Object.values(r),directives:c,assumeValid:t==null?void 0:t.assumeValid});function l(X){if(X.kind===La.TypeKind.LIST){let ve=X.ofType;if(!ve)throw new Error("Decorated type deeper than introspection query.");return new pi.GraphQLList(l(ve))}if(X.kind===La.TypeKind.NON_NULL){let ve=X.ofType;if(!ve)throw new Error("Decorated type deeper than introspection query.");let gt=l(ve);return new pi.GraphQLNonNull((0,pi.assertNullableType)(gt))}return p(X)}function p(X){let ve=X.name;if(!ve)throw new Error(`Unknown type reference: ${(0,di.inspect)(X)}.`);let gt=r[ve];if(!gt)throw new Error(`Invalid or incomplete schema, unknown type: ${ve}. Ensure that a full introspection query is used in order to build a client schema.`);return gt}function f(X){return(0,pi.assertObjectType)(p(X))}function y(X){return(0,pi.assertInterfaceType)(p(X))}function g(X){if(X!=null&&X.name!=null&&X.kind!=null)switch(X.kind){case La.TypeKind.SCALAR:return _(X);case La.TypeKind.OBJECT:return U(X);case La.TypeKind.INTERFACE:return K(X);case La.TypeKind.UNION:return J(X);case La.TypeKind.ENUM:return ee(X);case La.TypeKind.INPUT_OBJECT:return W(X)}let ve=(0,di.inspect)(X);throw new Error(`Invalid or incomplete introspection result. Ensure that a full introspection query is used in order to build a client schema: ${ve}.`)}function _(X){return new pi.GraphQLScalarType({name:X.name,description:X.description,specifiedByURL:X.specifiedByURL})}function F(X){if(X.interfaces===null&&X.kind===La.TypeKind.INTERFACE)return[];if(!X.interfaces){let ve=(0,di.inspect)(X);throw new Error(`Introspection result missing interfaces: ${ve}.`)}return X.interfaces.map(y)}function U(X){return new pi.GraphQLObjectType({name:X.name,description:X.description,interfaces:()=>F(X),fields:()=>Te(X)})}function K(X){return new pi.GraphQLInterfaceType({name:X.name,description:X.description,interfaces:()=>F(X),fields:()=>Te(X)})}function J(X){if(!X.possibleTypes){let ve=(0,di.inspect)(X);throw new Error(`Introspection result missing possibleTypes: ${ve}.`)}return new pi.GraphQLUnionType({name:X.name,description:X.description,types:()=>X.possibleTypes.map(f)})}function ee(X){if(!X.enumValues){let ve=(0,di.inspect)(X);throw new Error(`Introspection result missing enumValues: ${ve}.`)}return new pi.GraphQLEnumType({name:X.name,description:X.description,values:(0,aN.keyValMap)(X.enumValues,ve=>ve.name,ve=>({description:ve.description,deprecationReason:ve.deprecationReason}))})}function W(X){if(!X.inputFields){let ve=(0,di.inspect)(X);throw new Error(`Introspection result missing inputFields: ${ve}.`)}return new pi.GraphQLInputObjectType({name:X.name,description:X.description,fields:()=>we(X.inputFields),isOneOf:X.isOneOf})}function Te(X){if(!X.fields)throw new Error(`Introspection result missing fields: ${(0,di.inspect)(X)}.`);return(0,aN.keyValMap)(X.fields,ve=>ve.name,de)}function de(X){let ve=l(X.type);if(!(0,pi.isOutputType)(ve)){let gt=(0,di.inspect)(ve);throw new Error(`Introspection must provide output type for fields, but received: ${gt}.`)}if(!X.args){let gt=(0,di.inspect)(X);throw new Error(`Introspection result missing field args: ${gt}.`)}return{description:X.description,deprecationReason:X.deprecationReason,type:ve,args:we(X.args)}}function we(X){return(0,aN.keyValMap)(X,ve=>ve.name,qe)}function qe(X){let ve=l(X.type);if(!(0,pi.isInputType)(ve)){let Ht=(0,di.inspect)(ve);throw new Error(`Introspection must provide input type for arguments, but received: ${Ht}.`)}let gt=X.defaultValue!=null?(0,z8.valueFromAST)((0,Q8.parseValue)(X.defaultValue),ve):void 0;return{description:X.description,type:ve,defaultValue:gt,deprecationReason:X.deprecationReason}}function et(X){if(!X.args){let ve=(0,di.inspect)(X);throw new Error(`Introspection result missing directive args: ${ve}.`)}if(!X.locations){let ve=(0,di.inspect)(X);throw new Error(`Introspection result missing directive locations: ${ve}.`)}return new Y8.GraphQLDirective({name:X.name,description:X.description,isRepeatable:X.isRepeatable,locations:X.locations.slice(),args:we(X.args)})}}});var L_=w(oN=>{"use strict";m();T();N();Object.defineProperty(oN,"__esModule",{value:!0});oN.extendSchema=r5;oN.extendSchemaImpl=Xw;var X8=Cr(),Z8=Yt(),e5=Ir(),t5=qo(),zd=wy(),Ci=Rt(),$w=Mu(),In=Ft(),Wd=$r(),zw=Ri(),Ww=Aa(),Qw=Uu(),n5=Wc(),w_=Hc(),Yw=Vd();function r5(e,t,n){(0,Qw.assertSchema)(e),t!=null&&t.kind===Ci.Kind.DOCUMENT||(0,X8.devAssert)(!1,"Must provide valid Document AST."),(n==null?void 0:n.assumeValid)!==!0&&(n==null?void 0:n.assumeValidSDL)!==!0&&(0,n5.assertValidSDLExtension)(t,e);let r=e.toConfig(),i=Xw(r,t,n);return r===i?e:new Qw.GraphQLSchema(i)}function Xw(e,t,n){var r,i,a,o;let c=[],l=Object.create(null),p=[],f,y=[];for(let se of t.definitions)if(se.kind===Ci.Kind.SCHEMA_DEFINITION)f=se;else if(se.kind===Ci.Kind.SCHEMA_EXTENSION)y.push(se);else if((0,$w.isTypeDefinitionNode)(se))c.push(se);else if((0,$w.isTypeExtensionNode)(se)){let De=se.name.value,_e=l[De];l[De]=_e?_e.concat([se]):[se]}else se.kind===Ci.Kind.DIRECTIVE_DEFINITION&&p.push(se);if(Object.keys(l).length===0&&c.length===0&&p.length===0&&y.length===0&&f==null)return e;let g=Object.create(null);for(let se of e.types)g[se.name]=ee(se);for(let se of c){var _;let De=se.name.value;g[De]=(_=Jw[De])!==null&&_!==void 0?_:An(se)}let F=M(M({query:e.query&&K(e.query),mutation:e.mutation&&K(e.mutation),subscription:e.subscription&&K(e.subscription)},f&>([f])),gt(y));return Q(M({description:(r=f)===null||r===void 0||(i=r.description)===null||i===void 0?void 0:i.value},F),{types:Object.values(g),directives:[...e.directives.map(J),...p.map(bn)],extensions:Object.create(null),astNode:(a=f)!==null&&a!==void 0?a:e.astNode,extensionASTNodes:e.extensionASTNodes.concat(y),assumeValid:(o=n==null?void 0:n.assumeValid)!==null&&o!==void 0?o:!1});function U(se){return(0,In.isListType)(se)?new In.GraphQLList(U(se.ofType)):(0,In.isNonNullType)(se)?new In.GraphQLNonNull(U(se.ofType)):K(se)}function K(se){return g[se.name]}function J(se){let De=se.toConfig();return new Wd.GraphQLDirective(Q(M({},De),{args:(0,zd.mapValue)(De.args,ve)}))}function ee(se){if((0,zw.isIntrospectionType)(se)||(0,Ww.isSpecifiedScalarType)(se))return se;if((0,In.isScalarType)(se))return de(se);if((0,In.isObjectType)(se))return we(se);if((0,In.isInterfaceType)(se))return qe(se);if((0,In.isUnionType)(se))return et(se);if((0,In.isEnumType)(se))return Te(se);if((0,In.isInputObjectType)(se))return W(se);(0,e5.invariant)(!1,"Unexpected type: "+(0,Z8.inspect)(se))}function W(se){var De;let _e=se.toConfig(),Le=(De=l[_e.name])!==null&&De!==void 0?De:[];return new In.GraphQLInputObjectType(Q(M({},_e),{fields:()=>M(M({},(0,zd.mapValue)(_e.fields,_t=>Q(M({},_t),{type:U(_t.type)}))),Rr(Le)),extensionASTNodes:_e.extensionASTNodes.concat(Le)}))}function Te(se){var De;let _e=se.toConfig(),Le=(De=l[se.name])!==null&&De!==void 0?De:[];return new In.GraphQLEnumType(Q(M({},_e),{values:M(M({},_e.values),Fr(Le)),extensionASTNodes:_e.extensionASTNodes.concat(Le)}))}function de(se){var De;let _e=se.toConfig(),Le=(De=l[_e.name])!==null&&De!==void 0?De:[],_t=_e.specifiedByURL;for(let ae of Le){var Y;_t=(Y=Hw(ae))!==null&&Y!==void 0?Y:_t}return new In.GraphQLScalarType(Q(M({},_e),{specifiedByURL:_t,extensionASTNodes:_e.extensionASTNodes.concat(Le)}))}function we(se){var De;let _e=se.toConfig(),Le=(De=l[_e.name])!==null&&De!==void 0?De:[];return new In.GraphQLObjectType(Q(M({},_e),{interfaces:()=>[...se.getInterfaces().map(K),...kn(Le)],fields:()=>M(M({},(0,zd.mapValue)(_e.fields,X)),Vt(Le)),extensionASTNodes:_e.extensionASTNodes.concat(Le)}))}function qe(se){var De;let _e=se.toConfig(),Le=(De=l[_e.name])!==null&&De!==void 0?De:[];return new In.GraphQLInterfaceType(Q(M({},_e),{interfaces:()=>[...se.getInterfaces().map(K),...kn(Le)],fields:()=>M(M({},(0,zd.mapValue)(_e.fields,X)),Vt(Le)),extensionASTNodes:_e.extensionASTNodes.concat(Le)}))}function et(se){var De;let _e=se.toConfig(),Le=(De=l[_e.name])!==null&&De!==void 0?De:[];return new In.GraphQLUnionType(Q(M({},_e),{types:()=>[...se.getTypes().map(K),...$t(Le)],extensionASTNodes:_e.extensionASTNodes.concat(Le)}))}function X(se){return Q(M({},se),{type:U(se.type),args:se.args&&(0,zd.mapValue)(se.args,ve)})}function ve(se){return Q(M({},se),{type:U(se.type)})}function gt(se){let De={};for(let Le of se){var _e;let _t=(_e=Le.operationTypes)!==null&&_e!==void 0?_e:[];for(let Y of _t)De[Y.operation]=Ht(Y.type)}return De}function Ht(se){var De;let _e=se.name.value,Le=(De=Jw[_e])!==null&&De!==void 0?De:g[_e];if(Le===void 0)throw new Error(`Unknown type: "${_e}".`);return Le}function zt(se){return se.kind===Ci.Kind.LIST_TYPE?new In.GraphQLList(zt(se.type)):se.kind===Ci.Kind.NON_NULL_TYPE?new In.GraphQLNonNull(zt(se.type)):Ht(se)}function bn(se){var De;return new Wd.GraphQLDirective({name:se.name.value,description:(De=se.description)===null||De===void 0?void 0:De.value,locations:se.locations.map(({value:_e})=>_e),isRepeatable:se.repeatable,args:dn(se.arguments),astNode:se})}function Vt(se){let De=Object.create(null);for(let _t of se){var _e;let Y=(_e=_t.fields)!==null&&_e!==void 0?_e:[];for(let ae of Y){var Le;De[ae.name.value]={type:zt(ae.type),description:(Le=ae.description)===null||Le===void 0?void 0:Le.value,args:dn(ae.arguments),deprecationReason:sN(ae),astNode:ae}}}return De}function dn(se){let De=se!=null?se:[],_e=Object.create(null);for(let _t of De){var Le;let Y=zt(_t.type);_e[_t.name.value]={type:Y,description:(Le=_t.description)===null||Le===void 0?void 0:Le.value,defaultValue:(0,Yw.valueFromAST)(_t.defaultValue,Y),deprecationReason:sN(_t),astNode:_t}}return _e}function Rr(se){let De=Object.create(null);for(let _t of se){var _e;let Y=(_e=_t.fields)!==null&&_e!==void 0?_e:[];for(let ae of Y){var Le;let Me=zt(ae.type);De[ae.name.value]={type:Me,description:(Le=ae.description)===null||Le===void 0?void 0:Le.value,defaultValue:(0,Yw.valueFromAST)(ae.defaultValue,Me),deprecationReason:sN(ae),astNode:ae}}}return De}function Fr(se){let De=Object.create(null);for(let _t of se){var _e;let Y=(_e=_t.values)!==null&&_e!==void 0?_e:[];for(let ae of Y){var Le;De[ae.name.value]={description:(Le=ae.description)===null||Le===void 0?void 0:Le.value,deprecationReason:sN(ae),astNode:ae}}}return De}function kn(se){return se.flatMap(De=>{var _e,Le;return(_e=(Le=De.interfaces)===null||Le===void 0?void 0:Le.map(Ht))!==null&&_e!==void 0?_e:[]})}function $t(se){return se.flatMap(De=>{var _e,Le;return(_e=(Le=De.types)===null||Le===void 0?void 0:Le.map(Ht))!==null&&_e!==void 0?_e:[]})}function An(se){var De;let _e=se.name.value,Le=(De=l[_e])!==null&&De!==void 0?De:[];switch(se.kind){case Ci.Kind.OBJECT_TYPE_DEFINITION:{var _t;let tt=[se,...Le];return new In.GraphQLObjectType({name:_e,description:(_t=se.description)===null||_t===void 0?void 0:_t.value,interfaces:()=>kn(tt),fields:()=>Vt(tt),astNode:se,extensionASTNodes:Le})}case Ci.Kind.INTERFACE_TYPE_DEFINITION:{var Y;let tt=[se,...Le];return new In.GraphQLInterfaceType({name:_e,description:(Y=se.description)===null||Y===void 0?void 0:Y.value,interfaces:()=>kn(tt),fields:()=>Vt(tt),astNode:se,extensionASTNodes:Le})}case Ci.Kind.ENUM_TYPE_DEFINITION:{var ae;let tt=[se,...Le];return new In.GraphQLEnumType({name:_e,description:(ae=se.description)===null||ae===void 0?void 0:ae.value,values:Fr(tt),astNode:se,extensionASTNodes:Le})}case Ci.Kind.UNION_TYPE_DEFINITION:{var Me;let tt=[se,...Le];return new In.GraphQLUnionType({name:_e,description:(Me=se.description)===null||Me===void 0?void 0:Me.value,types:()=>$t(tt),astNode:se,extensionASTNodes:Le})}case Ci.Kind.SCALAR_TYPE_DEFINITION:{var Qe;return new In.GraphQLScalarType({name:_e,description:(Qe=se.description)===null||Qe===void 0?void 0:Qe.value,specifiedByURL:Hw(se),astNode:se,extensionASTNodes:Le})}case Ci.Kind.INPUT_OBJECT_TYPE_DEFINITION:{var Lt;let tt=[se,...Le];return new In.GraphQLInputObjectType({name:_e,description:(Lt=se.description)===null||Lt===void 0?void 0:Lt.value,fields:()=>Rr(tt),astNode:se,extensionASTNodes:Le,isOneOf:i5(se)})}}}}var Jw=(0,t5.keyMap)([...Ww.specifiedScalarTypes,...zw.introspectionTypes],e=>e.name);function sN(e){let t=(0,w_.getDirectiveValues)(Wd.GraphQLDeprecatedDirective,e);return t==null?void 0:t.reason}function Hw(e){let t=(0,w_.getDirectiveValues)(Wd.GraphQLSpecifiedByDirective,e);return t==null?void 0:t.url}function i5(e){return!!(0,w_.getDirectiveValues)(Wd.GraphQLOneOfDirective,e)}});var eL=w(uN=>{"use strict";m();T();N();Object.defineProperty(uN,"__esModule",{value:!0});uN.buildASTSchema=Zw;uN.buildSchema=p5;var a5=Cr(),s5=Rt(),o5=xc(),u5=$r(),c5=Uu(),l5=Wc(),d5=L_();function Zw(e,t){e!=null&&e.kind===s5.Kind.DOCUMENT||(0,a5.devAssert)(!1,"Must provide valid Document AST."),(t==null?void 0:t.assumeValid)!==!0&&(t==null?void 0:t.assumeValidSDL)!==!0&&(0,l5.assertValidSDL)(e);let n={description:void 0,types:[],directives:[],extensions:Object.create(null),extensionASTNodes:[],assumeValid:!1},r=(0,d5.extendSchemaImpl)(n,e,t);if(r.astNode==null)for(let a of r.types)switch(a.name){case"Query":r.query=a;break;case"Mutation":r.mutation=a;break;case"Subscription":r.subscription=a;break}let i=[...r.directives,...u5.specifiedDirectives.filter(a=>r.directives.every(o=>o.name!==a.name))];return new c5.GraphQLSchema(Q(M({},r),{directives:i}))}function p5(e,t){let n=(0,o5.parse)(e,{noLocation:t==null?void 0:t.noLocation,allowLegacyFragmentVariables:t==null?void 0:t.allowLegacyFragmentVariables});return Zw(n,{assumeValidSDL:t==null?void 0:t.assumeValidSDL,assumeValid:t==null?void 0:t.assumeValid})}});var rL=w(B_=>{"use strict";m();T();N();Object.defineProperty(B_,"__esModule",{value:!0});B_.lexicographicSortSchema=y5;var f5=Yt(),m5=Ir(),N5=Ed(),tL=hd(),Br=Ft(),T5=$r(),E5=Ri(),h5=Uu();function y5(e){let t=e.toConfig(),n=(0,N5.keyValMap)(C_(t.types),g=>g.name,y);return new h5.GraphQLSchema(Q(M({},t),{types:Object.values(n),directives:C_(t.directives).map(o),query:a(t.query),mutation:a(t.mutation),subscription:a(t.subscription)}));function r(g){return(0,Br.isListType)(g)?new Br.GraphQLList(r(g.ofType)):(0,Br.isNonNullType)(g)?new Br.GraphQLNonNull(r(g.ofType)):i(g)}function i(g){return n[g.name]}function a(g){return g&&i(g)}function o(g){let _=g.toConfig();return new T5.GraphQLDirective(Q(M({},_),{locations:nL(_.locations,F=>F),args:c(_.args)}))}function c(g){return cN(g,_=>Q(M({},_),{type:r(_.type)}))}function l(g){return cN(g,_=>Q(M({},_),{type:r(_.type),args:_.args&&c(_.args)}))}function p(g){return cN(g,_=>Q(M({},_),{type:r(_.type)}))}function f(g){return C_(g).map(i)}function y(g){if((0,Br.isScalarType)(g)||(0,E5.isIntrospectionType)(g))return g;if((0,Br.isObjectType)(g)){let _=g.toConfig();return new Br.GraphQLObjectType(Q(M({},_),{interfaces:()=>f(_.interfaces),fields:()=>l(_.fields)}))}if((0,Br.isInterfaceType)(g)){let _=g.toConfig();return new Br.GraphQLInterfaceType(Q(M({},_),{interfaces:()=>f(_.interfaces),fields:()=>l(_.fields)}))}if((0,Br.isUnionType)(g)){let _=g.toConfig();return new Br.GraphQLUnionType(Q(M({},_),{types:()=>f(_.types)}))}if((0,Br.isEnumType)(g)){let _=g.toConfig();return new Br.GraphQLEnumType(Q(M({},_),{values:cN(_.values,F=>F)}))}if((0,Br.isInputObjectType)(g)){let _=g.toConfig();return new Br.GraphQLInputObjectType(Q(M({},_),{fields:()=>p(_.fields)}))}(0,m5.invariant)(!1,"Unexpected type: "+(0,f5.inspect)(g))}}function cN(e,t){let n=Object.create(null);for(let r of Object.keys(e).sort(tL.naturalCompare))n[r]=t(e[r]);return n}function C_(e){return nL(e,t=>t.name)}function nL(e,t){return e.slice().sort((n,r)=>{let i=t(n),a=t(r);return(0,tL.naturalCompare)(i,a)})}});var lL=w(Xd=>{"use strict";m();T();N();Object.defineProperty(Xd,"__esModule",{value:!0});Xd.printIntrospectionSchema=D5;Xd.printSchema=O5;Xd.printType=sL;var I5=Yt(),g5=Ir(),_5=cd(),k_=Rt(),lN=li(),Zc=Ft(),M_=$r(),iL=Ri(),v5=Aa(),S5=Pd();function O5(e){return aL(e,t=>!(0,M_.isSpecifiedDirective)(t),b5)}function D5(e){return aL(e,M_.isSpecifiedDirective,iL.isIntrospectionType)}function b5(e){return!(0,v5.isSpecifiedScalarType)(e)&&!(0,iL.isIntrospectionType)(e)}function aL(e,t,n){let r=e.getDirectives().filter(t),i=Object.values(e.getTypeMap()).filter(n);return[A5(e),...r.map(a=>U5(a)),...i.map(a=>sL(a))].filter(Boolean).join(` `)}function A5(e){if(e.description==null&&R5(e))return;let t=[],n=e.getQueryType();n&&t.push(` query: ${n.name}`);let r=e.getMutationType();r&&t.push(` mutation: ${r.name}`);let i=e.getSubscriptionType();return i&&t.push(` subscription: ${i.name}`),Bi(e)+`schema { ${t.join(` `)} -}`}function R5(e){let t=e.getQueryType();if(t&&t.name!=="Query")return!1;let n=e.getMutationType();if(n&&n.name!=="Mutation")return!1;let r=e.getSubscriptionType();return!(r&&r.name!=="Subscription")}function aL(e){if((0,Zc.isScalarType)(e))return F5(e);if((0,Zc.isObjectType)(e))return P5(e);if((0,Zc.isInterfaceType)(e))return w5(e);if((0,Zc.isUnionType)(e))return L5(e);if((0,Zc.isEnumType)(e))return C5(e);if((0,Zc.isInputObjectType)(e))return B5(e);(0,g5.invariant)(!1,"Unexpected type: "+(0,I5.inspect)(e))}function F5(e){return Bi(e)+`scalar ${e.name}`+k5(e)}function sL(e){let t=e.getInterfaces();return t.length?" implements "+t.map(n=>n.name).join(" & "):""}function P5(e){return Bi(e)+`type ${e.name}`+sL(e)+oL(e)}function w5(e){return Bi(e)+`interface ${e.name}`+sL(e)+oL(e)}function L5(e){let t=e.getTypes(),n=t.length?" = "+t.join(" | "):"";return Bi(e)+"union "+e.name+n}function C5(e){let t=e.getValues().map((n,r)=>Bi(n," ",!r)+" "+n.name+x_(n.deprecationReason));return Bi(e)+`enum ${e.name}`+M_(t)}function B5(e){let t=Object.values(e.getFields()).map((n,r)=>Bi(n," ",!r)+" "+B_(n));return Bi(e)+`input ${e.name}`+(e.isOneOf?" @oneOf":"")+M_(t)}function oL(e){let t=Object.values(e.getFields()).map((n,r)=>Bi(n," ",!r)+" "+n.name+uL(n.args," ")+": "+String(n.type)+x_(n.deprecationReason));return M_(t)}function M_(e){return e.length!==0?` { +}`}function R5(e){let t=e.getQueryType();if(t&&t.name!=="Query")return!1;let n=e.getMutationType();if(n&&n.name!=="Mutation")return!1;let r=e.getSubscriptionType();return!(r&&r.name!=="Subscription")}function sL(e){if((0,Zc.isScalarType)(e))return F5(e);if((0,Zc.isObjectType)(e))return P5(e);if((0,Zc.isInterfaceType)(e))return w5(e);if((0,Zc.isUnionType)(e))return L5(e);if((0,Zc.isEnumType)(e))return C5(e);if((0,Zc.isInputObjectType)(e))return B5(e);(0,g5.invariant)(!1,"Unexpected type: "+(0,I5.inspect)(e))}function F5(e){return Bi(e)+`scalar ${e.name}`+k5(e)}function oL(e){let t=e.getInterfaces();return t.length?" implements "+t.map(n=>n.name).join(" & "):""}function P5(e){return Bi(e)+`type ${e.name}`+oL(e)+uL(e)}function w5(e){return Bi(e)+`interface ${e.name}`+oL(e)+uL(e)}function L5(e){let t=e.getTypes(),n=t.length?" = "+t.join(" | "):"";return Bi(e)+"union "+e.name+n}function C5(e){let t=e.getValues().map((n,r)=>Bi(n," ",!r)+" "+n.name+q_(n.deprecationReason));return Bi(e)+`enum ${e.name}`+x_(t)}function B5(e){let t=Object.values(e.getFields()).map((n,r)=>Bi(n," ",!r)+" "+U_(n));return Bi(e)+`input ${e.name}`+(e.isOneOf?" @oneOf":"")+x_(t)}function uL(e){let t=Object.values(e.getFields()).map((n,r)=>Bi(n," ",!r)+" "+n.name+cL(n.args," ")+": "+String(n.type)+q_(n.deprecationReason));return x_(t)}function x_(e){return e.length!==0?` { `+e.join(` `)+` -}`:""}function uL(e,t=""){return e.length===0?"":e.every(n=>!n.description)?"("+e.map(B_).join(", ")+")":`( -`+e.map((n,r)=>Bi(n," "+t,!r)+" "+t+B_(n)).join(` +}`:""}function cL(e,t=""){return e.length===0?"":e.every(n=>!n.description)?"("+e.map(U_).join(", ")+")":`( +`+e.map((n,r)=>Bi(n," "+t,!r)+" "+t+U_(n)).join(` `)+` -`+t+")"}function B_(e){let t=(0,S5.astFromValue)(e.defaultValue,e.type),n=e.name+": "+String(e.type);return t&&(n+=` = ${(0,uN.print)(t)}`),n+x_(e.deprecationReason)}function U5(e){return Bi(e)+"directive @"+e.name+uL(e.args)+(e.isRepeatable?" repeatable":"")+" on "+e.locations.join(" | ")}function x_(e){return e==null?"":e!==k_.DEFAULT_DEPRECATION_REASON?` @deprecated(reason: ${(0,uN.print)({kind:U_.Kind.STRING,value:e})})`:" @deprecated"}function k5(e){return e.specifiedByURL==null?"":` @specifiedBy(url: ${(0,uN.print)({kind:U_.Kind.STRING,value:e.specifiedByURL})})`}function Bi(e,t="",n=!0){let{description:r}=e;if(r==null)return"";let i=(0,uN.print)({kind:U_.Kind.STRING,value:r,block:(0,_5.isPrintableAsBlockString)(r)});return(t&&!n?` +`+t+")"}function U_(e){let t=(0,S5.astFromValue)(e.defaultValue,e.type),n=e.name+": "+String(e.type);return t&&(n+=` = ${(0,lN.print)(t)}`),n+q_(e.deprecationReason)}function U5(e){return Bi(e)+"directive @"+e.name+cL(e.args)+(e.isRepeatable?" repeatable":"")+" on "+e.locations.join(" | ")}function q_(e){return e==null?"":e!==M_.DEFAULT_DEPRECATION_REASON?` @deprecated(reason: ${(0,lN.print)({kind:k_.Kind.STRING,value:e})})`:" @deprecated"}function k5(e){return e.specifiedByURL==null?"":` @specifiedBy(url: ${(0,lN.print)({kind:k_.Kind.STRING,value:e.specifiedByURL})})`}function Bi(e,t="",n=!0){let{description:r}=e;if(r==null)return"";let i=(0,lN.print)({kind:k_.Kind.STRING,value:r,block:(0,_5.isPrintableAsBlockString)(r)});return(t&&!n?` `+t:t)+i.replace(/\n/g,` `+t)+` -`}});var lL=w(q_=>{"use strict";f();N();m();Object.defineProperty(q_,"__esModule",{value:!0});q_.concatAST=x5;var M5=Rt();function x5(e){let t=[];for(let n of e)t.push(...n.definitions);return{kind:M5.Kind.DOCUMENT,definitions:t}}});var fL=w(V_=>{"use strict";f();N();m();Object.defineProperty(V_,"__esModule",{value:!0});V_.separateOperations=V5;var cN=Rt(),q5=Fu();function V5(e){let t=[],n=Object.create(null);for(let i of e.definitions)switch(i.kind){case cN.Kind.OPERATION_DEFINITION:t.push(i);break;case cN.Kind.FRAGMENT_DEFINITION:n[i.name.value]=dL(i.selectionSet);break;default:}let r=Object.create(null);for(let i of t){let a=new Set;for(let c of dL(i.selectionSet))pL(a,n,c);let o=i.name?i.name.value:"";r[o]={kind:cN.Kind.DOCUMENT,definitions:e.definitions.filter(c=>c===i||c.kind===cN.Kind.FRAGMENT_DEFINITION&&a.has(c.name.value))}}return r}function pL(e,t,n){if(!e.has(n)){e.add(n);let r=t[n];if(r!==void 0)for(let i of r)pL(e,t,i)}}function dL(e){let t=[];return(0,q5.visit)(e,{FragmentSpread(n){t.push(n.name.value)}}),t}});var TL=w(K_=>{"use strict";f();N();m();Object.defineProperty(K_,"__esModule",{value:!0});K_.stripIgnoredCharacters=K5;var j5=ud(),mL=em(),NL=im(),j_=ld();function K5(e){let t=(0,NL.isSource)(e)?e:new NL.Source(e),n=t.body,r=new mL.Lexer(t),i="",a=!1;for(;r.advance().kind!==j_.TokenKind.EOF;){let o=r.token,c=o.kind,l=!(0,mL.isPunctuatorTokenKind)(o.kind);a&&(l||o.kind===j_.TokenKind.SPREAD)&&(i+=" ");let p=n.slice(o.start,o.end);c===j_.TokenKind.BLOCK_STRING?i+=(0,j5.printBlockString)(o.value,{minimize:!0}):i+=p,a=l}return i}});var hL=w(lN=>{"use strict";f();N();m();Object.defineProperty(lN,"__esModule",{value:!0});lN.assertValidName=Y5;lN.isValidNameError=EL;var G5=Cr(),$5=He(),Q5=hd();function Y5(e){let t=EL(e);if(t)throw t;return e}function EL(e){if(typeof e=="string"||(0,G5.devAssert)(!1,"Expected name to be a string."),e.startsWith("__"))return new $5.GraphQLError(`Name "${e}" must not begin with "__", which is reserved by GraphQL introspection.`);try{(0,Q5.assertName)(e)}catch(t){return t}}});var DL=w(Ca=>{"use strict";f();N();m();Object.defineProperty(Ca,"__esModule",{value:!0});Ca.DangerousChangeType=Ca.BreakingChangeType=void 0;Ca.findBreakingChanges=Z5;Ca.findDangerousChanges=eX;var J5=Yt(),SL=Ir(),yL=xo(),H5=li(),xt=Ft(),z5=Aa(),W5=Fd(),X5=QI(),Ln;Ca.BreakingChangeType=Ln;(function(e){e.TYPE_REMOVED="TYPE_REMOVED",e.TYPE_CHANGED_KIND="TYPE_CHANGED_KIND",e.TYPE_REMOVED_FROM_UNION="TYPE_REMOVED_FROM_UNION",e.VALUE_REMOVED_FROM_ENUM="VALUE_REMOVED_FROM_ENUM",e.REQUIRED_INPUT_FIELD_ADDED="REQUIRED_INPUT_FIELD_ADDED",e.IMPLEMENTED_INTERFACE_REMOVED="IMPLEMENTED_INTERFACE_REMOVED",e.FIELD_REMOVED="FIELD_REMOVED",e.FIELD_CHANGED_KIND="FIELD_CHANGED_KIND",e.REQUIRED_ARG_ADDED="REQUIRED_ARG_ADDED",e.ARG_REMOVED="ARG_REMOVED",e.ARG_CHANGED_KIND="ARG_CHANGED_KIND",e.DIRECTIVE_REMOVED="DIRECTIVE_REMOVED",e.DIRECTIVE_ARG_REMOVED="DIRECTIVE_ARG_REMOVED",e.REQUIRED_DIRECTIVE_ARG_ADDED="REQUIRED_DIRECTIVE_ARG_ADDED",e.DIRECTIVE_REPEATABLE_REMOVED="DIRECTIVE_REPEATABLE_REMOVED",e.DIRECTIVE_LOCATION_REMOVED="DIRECTIVE_LOCATION_REMOVED"})(Ln||(Ca.BreakingChangeType=Ln={}));var aa;Ca.DangerousChangeType=aa;(function(e){e.VALUE_ADDED_TO_ENUM="VALUE_ADDED_TO_ENUM",e.TYPE_ADDED_TO_UNION="TYPE_ADDED_TO_UNION",e.OPTIONAL_INPUT_FIELD_ADDED="OPTIONAL_INPUT_FIELD_ADDED",e.OPTIONAL_ARG_ADDED="OPTIONAL_ARG_ADDED",e.IMPLEMENTED_INTERFACE_ADDED="IMPLEMENTED_INTERFACE_ADDED",e.ARG_DEFAULT_VALUE_CHANGE="ARG_DEFAULT_VALUE_CHANGE"})(aa||(Ca.DangerousChangeType=aa={}));function Z5(e,t){return OL(e,t).filter(n=>n.type in Ln)}function eX(e,t){return OL(e,t).filter(n=>n.type in aa)}function OL(e,t){return[...nX(e,t),...tX(e,t)]}function tX(e,t){let n=[],r=Ts(e.getDirectives(),t.getDirectives());for(let i of r.removed)n.push({type:Ln.DIRECTIVE_REMOVED,description:`${i.name} was removed.`});for(let[i,a]of r.persisted){let o=Ts(i.args,a.args);for(let c of o.added)(0,xt.isRequiredArgument)(c)&&n.push({type:Ln.REQUIRED_DIRECTIVE_ARG_ADDED,description:`A required arg ${c.name} on directive ${i.name} was added.`});for(let c of o.removed)n.push({type:Ln.DIRECTIVE_ARG_REMOVED,description:`${c.name} was removed from ${i.name}.`});i.isRepeatable&&!a.isRepeatable&&n.push({type:Ln.DIRECTIVE_REPEATABLE_REMOVED,description:`Repeatable flag was removed from ${i.name}.`});for(let c of i.locations)a.locations.includes(c)||n.push({type:Ln.DIRECTIVE_LOCATION_REMOVED,description:`${c} was removed from ${i.name}.`})}return n}function nX(e,t){let n=[],r=Ts(Object.values(e.getTypeMap()),Object.values(t.getTypeMap()));for(let i of r.removed)n.push({type:Ln.TYPE_REMOVED,description:(0,z5.isSpecifiedScalarType)(i)?`Standard scalar ${i.name} was removed because it is not referenced anymore.`:`${i.name} was removed.`});for(let[i,a]of r.persisted)(0,xt.isEnumType)(i)&&(0,xt.isEnumType)(a)?n.push(...aX(i,a)):(0,xt.isUnionType)(i)&&(0,xt.isUnionType)(a)?n.push(...iX(i,a)):(0,xt.isInputObjectType)(i)&&(0,xt.isInputObjectType)(a)?n.push(...rX(i,a)):(0,xt.isObjectType)(i)&&(0,xt.isObjectType)(a)?n.push(...gL(i,a),...IL(i,a)):(0,xt.isInterfaceType)(i)&&(0,xt.isInterfaceType)(a)?n.push(...gL(i,a),...IL(i,a)):i.constructor!==a.constructor&&n.push({type:Ln.TYPE_CHANGED_KIND,description:`${i.name} changed from ${_L(i)} to ${_L(a)}.`});return n}function rX(e,t){let n=[],r=Ts(Object.values(e.getFields()),Object.values(t.getFields()));for(let i of r.added)(0,xt.isRequiredInputField)(i)?n.push({type:Ln.REQUIRED_INPUT_FIELD_ADDED,description:`A required field ${i.name} on input type ${e.name} was added.`}):n.push({type:aa.OPTIONAL_INPUT_FIELD_ADDED,description:`An optional field ${i.name} on input type ${e.name} was added.`});for(let i of r.removed)n.push({type:Ln.FIELD_REMOVED,description:`${e.name}.${i.name} was removed.`});for(let[i,a]of r.persisted)Zd(i.type,a.type)||n.push({type:Ln.FIELD_CHANGED_KIND,description:`${e.name}.${i.name} changed type from ${String(i.type)} to ${String(a.type)}.`});return n}function iX(e,t){let n=[],r=Ts(e.getTypes(),t.getTypes());for(let i of r.added)n.push({type:aa.TYPE_ADDED_TO_UNION,description:`${i.name} was added to union type ${e.name}.`});for(let i of r.removed)n.push({type:Ln.TYPE_REMOVED_FROM_UNION,description:`${i.name} was removed from union type ${e.name}.`});return n}function aX(e,t){let n=[],r=Ts(e.getValues(),t.getValues());for(let i of r.added)n.push({type:aa.VALUE_ADDED_TO_ENUM,description:`${i.name} was added to enum type ${e.name}.`});for(let i of r.removed)n.push({type:Ln.VALUE_REMOVED_FROM_ENUM,description:`${i.name} was removed from enum type ${e.name}.`});return n}function IL(e,t){let n=[],r=Ts(e.getInterfaces(),t.getInterfaces());for(let i of r.added)n.push({type:aa.IMPLEMENTED_INTERFACE_ADDED,description:`${i.name} added to interfaces implemented by ${e.name}.`});for(let i of r.removed)n.push({type:Ln.IMPLEMENTED_INTERFACE_REMOVED,description:`${e.name} no longer implements interface ${i.name}.`});return n}function gL(e,t){let n=[],r=Ts(Object.values(e.getFields()),Object.values(t.getFields()));for(let i of r.removed)n.push({type:Ln.FIELD_REMOVED,description:`${e.name}.${i.name} was removed.`});for(let[i,a]of r.persisted)n.push(...sX(e,i,a)),Xd(i.type,a.type)||n.push({type:Ln.FIELD_CHANGED_KIND,description:`${e.name}.${i.name} changed type from ${String(i.type)} to ${String(a.type)}.`});return n}function sX(e,t,n){let r=[],i=Ts(t.args,n.args);for(let a of i.removed)r.push({type:Ln.ARG_REMOVED,description:`${e.name}.${t.name} arg ${a.name} was removed.`});for(let[a,o]of i.persisted)if(!Zd(a.type,o.type))r.push({type:Ln.ARG_CHANGED_KIND,description:`${e.name}.${t.name} arg ${a.name} has changed type from ${String(a.type)} to ${String(o.type)}.`});else if(a.defaultValue!==void 0)if(o.defaultValue===void 0)r.push({type:aa.ARG_DEFAULT_VALUE_CHANGE,description:`${e.name}.${t.name} arg ${a.name} defaultValue was removed.`});else{let l=vL(a.defaultValue,a.type),p=vL(o.defaultValue,o.type);l!==p&&r.push({type:aa.ARG_DEFAULT_VALUE_CHANGE,description:`${e.name}.${t.name} arg ${a.name} has changed defaultValue from ${l} to ${p}.`})}for(let a of i.added)(0,xt.isRequiredArgument)(a)?r.push({type:Ln.REQUIRED_ARG_ADDED,description:`A required arg ${a.name} on ${e.name}.${t.name} was added.`}):r.push({type:aa.OPTIONAL_ARG_ADDED,description:`An optional arg ${a.name} on ${e.name}.${t.name} was added.`});return r}function Xd(e,t){return(0,xt.isListType)(e)?(0,xt.isListType)(t)&&Xd(e.ofType,t.ofType)||(0,xt.isNonNullType)(t)&&Xd(e,t.ofType):(0,xt.isNonNullType)(e)?(0,xt.isNonNullType)(t)&&Xd(e.ofType,t.ofType):(0,xt.isNamedType)(t)&&e.name===t.name||(0,xt.isNonNullType)(t)&&Xd(e,t.ofType)}function Zd(e,t){return(0,xt.isListType)(e)?(0,xt.isListType)(t)&&Zd(e.ofType,t.ofType):(0,xt.isNonNullType)(e)?(0,xt.isNonNullType)(t)&&Zd(e.ofType,t.ofType)||!(0,xt.isNonNullType)(t)&&Zd(e.ofType,t):(0,xt.isNamedType)(t)&&e.name===t.name}function _L(e){if((0,xt.isScalarType)(e))return"a Scalar type";if((0,xt.isObjectType)(e))return"an Object type";if((0,xt.isInterfaceType)(e))return"an Interface type";if((0,xt.isUnionType)(e))return"a Union type";if((0,xt.isEnumType)(e))return"an Enum type";if((0,xt.isInputObjectType)(e))return"an Input type";(0,SL.invariant)(!1,"Unexpected type: "+(0,J5.inspect)(e))}function vL(e,t){let n=(0,W5.astFromValue)(e,t);return n!=null||(0,SL.invariant)(!1),(0,H5.print)((0,X5.sortValueNode)(n))}function Ts(e,t){let n=[],r=[],i=[],a=(0,yL.keyMap)(e,({name:c})=>c),o=(0,yL.keyMap)(t,({name:c})=>c);for(let c of e){let l=o[c.name];l===void 0?r.push(c):i.push([c,l])}for(let c of t)a[c.name]===void 0&&n.push(c);return{added:n,persisted:i,removed:r}}});var FL=w(Bt=>{"use strict";f();N();m();Object.defineProperty(Bt,"__esModule",{value:!0});Object.defineProperty(Bt,"BreakingChangeType",{enumerable:!0,get:function(){return dN.BreakingChangeType}});Object.defineProperty(Bt,"DangerousChangeType",{enumerable:!0,get:function(){return dN.DangerousChangeType}});Object.defineProperty(Bt,"TypeInfo",{enumerable:!0,get:function(){return AL.TypeInfo}});Object.defineProperty(Bt,"assertValidName",{enumerable:!0,get:function(){return RL.assertValidName}});Object.defineProperty(Bt,"astFromValue",{enumerable:!0,get:function(){return EX.astFromValue}});Object.defineProperty(Bt,"buildASTSchema",{enumerable:!0,get:function(){return bL.buildASTSchema}});Object.defineProperty(Bt,"buildClientSchema",{enumerable:!0,get:function(){return dX.buildClientSchema}});Object.defineProperty(Bt,"buildSchema",{enumerable:!0,get:function(){return bL.buildSchema}});Object.defineProperty(Bt,"coerceInputValue",{enumerable:!0,get:function(){return hX.coerceInputValue}});Object.defineProperty(Bt,"concatAST",{enumerable:!0,get:function(){return yX.concatAST}});Object.defineProperty(Bt,"doTypesOverlap",{enumerable:!0,get:function(){return $_.doTypesOverlap}});Object.defineProperty(Bt,"extendSchema",{enumerable:!0,get:function(){return pX.extendSchema}});Object.defineProperty(Bt,"findBreakingChanges",{enumerable:!0,get:function(){return dN.findBreakingChanges}});Object.defineProperty(Bt,"findDangerousChanges",{enumerable:!0,get:function(){return dN.findDangerousChanges}});Object.defineProperty(Bt,"getIntrospectionQuery",{enumerable:!0,get:function(){return oX.getIntrospectionQuery}});Object.defineProperty(Bt,"getOperationAST",{enumerable:!0,get:function(){return uX.getOperationAST}});Object.defineProperty(Bt,"getOperationRootType",{enumerable:!0,get:function(){return cX.getOperationRootType}});Object.defineProperty(Bt,"introspectionFromSchema",{enumerable:!0,get:function(){return lX.introspectionFromSchema}});Object.defineProperty(Bt,"isEqualType",{enumerable:!0,get:function(){return $_.isEqualType}});Object.defineProperty(Bt,"isTypeSubTypeOf",{enumerable:!0,get:function(){return $_.isTypeSubTypeOf}});Object.defineProperty(Bt,"isValidNameError",{enumerable:!0,get:function(){return RL.isValidNameError}});Object.defineProperty(Bt,"lexicographicSortSchema",{enumerable:!0,get:function(){return fX.lexicographicSortSchema}});Object.defineProperty(Bt,"printIntrospectionSchema",{enumerable:!0,get:function(){return G_.printIntrospectionSchema}});Object.defineProperty(Bt,"printSchema",{enumerable:!0,get:function(){return G_.printSchema}});Object.defineProperty(Bt,"printType",{enumerable:!0,get:function(){return G_.printType}});Object.defineProperty(Bt,"separateOperations",{enumerable:!0,get:function(){return IX.separateOperations}});Object.defineProperty(Bt,"stripIgnoredCharacters",{enumerable:!0,get:function(){return gX.stripIgnoredCharacters}});Object.defineProperty(Bt,"typeFromAST",{enumerable:!0,get:function(){return mX.typeFromAST}});Object.defineProperty(Bt,"valueFromAST",{enumerable:!0,get:function(){return NX.valueFromAST}});Object.defineProperty(Bt,"valueFromASTUntyped",{enumerable:!0,get:function(){return TX.valueFromASTUntyped}});Object.defineProperty(Bt,"visitWithTypeInfo",{enumerable:!0,get:function(){return AL.visitWithTypeInfo}});var oX=D_(),uX=xw(),cX=qw(),lX=Vw(),dX=Kw(),bL=Zw(),pX=w_(),fX=nL(),G_=cL(),mX=Ra(),NX=qd(),TX=jy(),EX=Fd(),AL=wm(),hX=pg(),yX=lL(),IX=fL(),gX=TL(),$_=vd(),RL=hL(),dN=DL()});var Ae=w(V=>{"use strict";f();N();m();Object.defineProperty(V,"__esModule",{value:!0});Object.defineProperty(V,"BREAK",{enumerable:!0,get:function(){return Kt.BREAK}});Object.defineProperty(V,"BreakingChangeType",{enumerable:!0,get:function(){return Gt.BreakingChangeType}});Object.defineProperty(V,"DEFAULT_DEPRECATION_REASON",{enumerable:!0,get:function(){return Ie.DEFAULT_DEPRECATION_REASON}});Object.defineProperty(V,"DangerousChangeType",{enumerable:!0,get:function(){return Gt.DangerousChangeType}});Object.defineProperty(V,"DirectiveLocation",{enumerable:!0,get:function(){return Kt.DirectiveLocation}});Object.defineProperty(V,"ExecutableDefinitionsRule",{enumerable:!0,get:function(){return mt.ExecutableDefinitionsRule}});Object.defineProperty(V,"FieldsOnCorrectTypeRule",{enumerable:!0,get:function(){return mt.FieldsOnCorrectTypeRule}});Object.defineProperty(V,"FragmentsOnCompositeTypesRule",{enumerable:!0,get:function(){return mt.FragmentsOnCompositeTypesRule}});Object.defineProperty(V,"GRAPHQL_MAX_INT",{enumerable:!0,get:function(){return Ie.GRAPHQL_MAX_INT}});Object.defineProperty(V,"GRAPHQL_MIN_INT",{enumerable:!0,get:function(){return Ie.GRAPHQL_MIN_INT}});Object.defineProperty(V,"GraphQLBoolean",{enumerable:!0,get:function(){return Ie.GraphQLBoolean}});Object.defineProperty(V,"GraphQLDeprecatedDirective",{enumerable:!0,get:function(){return Ie.GraphQLDeprecatedDirective}});Object.defineProperty(V,"GraphQLDirective",{enumerable:!0,get:function(){return Ie.GraphQLDirective}});Object.defineProperty(V,"GraphQLEnumType",{enumerable:!0,get:function(){return Ie.GraphQLEnumType}});Object.defineProperty(V,"GraphQLError",{enumerable:!0,get:function(){return ep.GraphQLError}});Object.defineProperty(V,"GraphQLFloat",{enumerable:!0,get:function(){return Ie.GraphQLFloat}});Object.defineProperty(V,"GraphQLID",{enumerable:!0,get:function(){return Ie.GraphQLID}});Object.defineProperty(V,"GraphQLIncludeDirective",{enumerable:!0,get:function(){return Ie.GraphQLIncludeDirective}});Object.defineProperty(V,"GraphQLInputObjectType",{enumerable:!0,get:function(){return Ie.GraphQLInputObjectType}});Object.defineProperty(V,"GraphQLInt",{enumerable:!0,get:function(){return Ie.GraphQLInt}});Object.defineProperty(V,"GraphQLInterfaceType",{enumerable:!0,get:function(){return Ie.GraphQLInterfaceType}});Object.defineProperty(V,"GraphQLList",{enumerable:!0,get:function(){return Ie.GraphQLList}});Object.defineProperty(V,"GraphQLNonNull",{enumerable:!0,get:function(){return Ie.GraphQLNonNull}});Object.defineProperty(V,"GraphQLObjectType",{enumerable:!0,get:function(){return Ie.GraphQLObjectType}});Object.defineProperty(V,"GraphQLOneOfDirective",{enumerable:!0,get:function(){return Ie.GraphQLOneOfDirective}});Object.defineProperty(V,"GraphQLScalarType",{enumerable:!0,get:function(){return Ie.GraphQLScalarType}});Object.defineProperty(V,"GraphQLSchema",{enumerable:!0,get:function(){return Ie.GraphQLSchema}});Object.defineProperty(V,"GraphQLSkipDirective",{enumerable:!0,get:function(){return Ie.GraphQLSkipDirective}});Object.defineProperty(V,"GraphQLSpecifiedByDirective",{enumerable:!0,get:function(){return Ie.GraphQLSpecifiedByDirective}});Object.defineProperty(V,"GraphQLString",{enumerable:!0,get:function(){return Ie.GraphQLString}});Object.defineProperty(V,"GraphQLUnionType",{enumerable:!0,get:function(){return Ie.GraphQLUnionType}});Object.defineProperty(V,"Kind",{enumerable:!0,get:function(){return Kt.Kind}});Object.defineProperty(V,"KnownArgumentNamesRule",{enumerable:!0,get:function(){return mt.KnownArgumentNamesRule}});Object.defineProperty(V,"KnownDirectivesRule",{enumerable:!0,get:function(){return mt.KnownDirectivesRule}});Object.defineProperty(V,"KnownFragmentNamesRule",{enumerable:!0,get:function(){return mt.KnownFragmentNamesRule}});Object.defineProperty(V,"KnownTypeNamesRule",{enumerable:!0,get:function(){return mt.KnownTypeNamesRule}});Object.defineProperty(V,"Lexer",{enumerable:!0,get:function(){return Kt.Lexer}});Object.defineProperty(V,"Location",{enumerable:!0,get:function(){return Kt.Location}});Object.defineProperty(V,"LoneAnonymousOperationRule",{enumerable:!0,get:function(){return mt.LoneAnonymousOperationRule}});Object.defineProperty(V,"LoneSchemaDefinitionRule",{enumerable:!0,get:function(){return mt.LoneSchemaDefinitionRule}});Object.defineProperty(V,"MaxIntrospectionDepthRule",{enumerable:!0,get:function(){return mt.MaxIntrospectionDepthRule}});Object.defineProperty(V,"NoDeprecatedCustomRule",{enumerable:!0,get:function(){return mt.NoDeprecatedCustomRule}});Object.defineProperty(V,"NoFragmentCyclesRule",{enumerable:!0,get:function(){return mt.NoFragmentCyclesRule}});Object.defineProperty(V,"NoSchemaIntrospectionCustomRule",{enumerable:!0,get:function(){return mt.NoSchemaIntrospectionCustomRule}});Object.defineProperty(V,"NoUndefinedVariablesRule",{enumerable:!0,get:function(){return mt.NoUndefinedVariablesRule}});Object.defineProperty(V,"NoUnusedFragmentsRule",{enumerable:!0,get:function(){return mt.NoUnusedFragmentsRule}});Object.defineProperty(V,"NoUnusedVariablesRule",{enumerable:!0,get:function(){return mt.NoUnusedVariablesRule}});Object.defineProperty(V,"OperationTypeNode",{enumerable:!0,get:function(){return Kt.OperationTypeNode}});Object.defineProperty(V,"OverlappingFieldsCanBeMergedRule",{enumerable:!0,get:function(){return mt.OverlappingFieldsCanBeMergedRule}});Object.defineProperty(V,"PossibleFragmentSpreadsRule",{enumerable:!0,get:function(){return mt.PossibleFragmentSpreadsRule}});Object.defineProperty(V,"PossibleTypeExtensionsRule",{enumerable:!0,get:function(){return mt.PossibleTypeExtensionsRule}});Object.defineProperty(V,"ProvidedRequiredArgumentsRule",{enumerable:!0,get:function(){return mt.ProvidedRequiredArgumentsRule}});Object.defineProperty(V,"ScalarLeafsRule",{enumerable:!0,get:function(){return mt.ScalarLeafsRule}});Object.defineProperty(V,"SchemaMetaFieldDef",{enumerable:!0,get:function(){return Ie.SchemaMetaFieldDef}});Object.defineProperty(V,"SingleFieldSubscriptionsRule",{enumerable:!0,get:function(){return mt.SingleFieldSubscriptionsRule}});Object.defineProperty(V,"Source",{enumerable:!0,get:function(){return Kt.Source}});Object.defineProperty(V,"Token",{enumerable:!0,get:function(){return Kt.Token}});Object.defineProperty(V,"TokenKind",{enumerable:!0,get:function(){return Kt.TokenKind}});Object.defineProperty(V,"TypeInfo",{enumerable:!0,get:function(){return Gt.TypeInfo}});Object.defineProperty(V,"TypeKind",{enumerable:!0,get:function(){return Ie.TypeKind}});Object.defineProperty(V,"TypeMetaFieldDef",{enumerable:!0,get:function(){return Ie.TypeMetaFieldDef}});Object.defineProperty(V,"TypeNameMetaFieldDef",{enumerable:!0,get:function(){return Ie.TypeNameMetaFieldDef}});Object.defineProperty(V,"UniqueArgumentDefinitionNamesRule",{enumerable:!0,get:function(){return mt.UniqueArgumentDefinitionNamesRule}});Object.defineProperty(V,"UniqueArgumentNamesRule",{enumerable:!0,get:function(){return mt.UniqueArgumentNamesRule}});Object.defineProperty(V,"UniqueDirectiveNamesRule",{enumerable:!0,get:function(){return mt.UniqueDirectiveNamesRule}});Object.defineProperty(V,"UniqueDirectivesPerLocationRule",{enumerable:!0,get:function(){return mt.UniqueDirectivesPerLocationRule}});Object.defineProperty(V,"UniqueEnumValueNamesRule",{enumerable:!0,get:function(){return mt.UniqueEnumValueNamesRule}});Object.defineProperty(V,"UniqueFieldDefinitionNamesRule",{enumerable:!0,get:function(){return mt.UniqueFieldDefinitionNamesRule}});Object.defineProperty(V,"UniqueFragmentNamesRule",{enumerable:!0,get:function(){return mt.UniqueFragmentNamesRule}});Object.defineProperty(V,"UniqueInputFieldNamesRule",{enumerable:!0,get:function(){return mt.UniqueInputFieldNamesRule}});Object.defineProperty(V,"UniqueOperationNamesRule",{enumerable:!0,get:function(){return mt.UniqueOperationNamesRule}});Object.defineProperty(V,"UniqueOperationTypesRule",{enumerable:!0,get:function(){return mt.UniqueOperationTypesRule}});Object.defineProperty(V,"UniqueTypeNamesRule",{enumerable:!0,get:function(){return mt.UniqueTypeNamesRule}});Object.defineProperty(V,"UniqueVariableNamesRule",{enumerable:!0,get:function(){return mt.UniqueVariableNamesRule}});Object.defineProperty(V,"ValidationContext",{enumerable:!0,get:function(){return mt.ValidationContext}});Object.defineProperty(V,"ValuesOfCorrectTypeRule",{enumerable:!0,get:function(){return mt.ValuesOfCorrectTypeRule}});Object.defineProperty(V,"VariablesAreInputTypesRule",{enumerable:!0,get:function(){return mt.VariablesAreInputTypesRule}});Object.defineProperty(V,"VariablesInAllowedPositionRule",{enumerable:!0,get:function(){return mt.VariablesInAllowedPositionRule}});Object.defineProperty(V,"__Directive",{enumerable:!0,get:function(){return Ie.__Directive}});Object.defineProperty(V,"__DirectiveLocation",{enumerable:!0,get:function(){return Ie.__DirectiveLocation}});Object.defineProperty(V,"__EnumValue",{enumerable:!0,get:function(){return Ie.__EnumValue}});Object.defineProperty(V,"__Field",{enumerable:!0,get:function(){return Ie.__Field}});Object.defineProperty(V,"__InputValue",{enumerable:!0,get:function(){return Ie.__InputValue}});Object.defineProperty(V,"__Schema",{enumerable:!0,get:function(){return Ie.__Schema}});Object.defineProperty(V,"__Type",{enumerable:!0,get:function(){return Ie.__Type}});Object.defineProperty(V,"__TypeKind",{enumerable:!0,get:function(){return Ie.__TypeKind}});Object.defineProperty(V,"assertAbstractType",{enumerable:!0,get:function(){return Ie.assertAbstractType}});Object.defineProperty(V,"assertCompositeType",{enumerable:!0,get:function(){return Ie.assertCompositeType}});Object.defineProperty(V,"assertDirective",{enumerable:!0,get:function(){return Ie.assertDirective}});Object.defineProperty(V,"assertEnumType",{enumerable:!0,get:function(){return Ie.assertEnumType}});Object.defineProperty(V,"assertEnumValueName",{enumerable:!0,get:function(){return Ie.assertEnumValueName}});Object.defineProperty(V,"assertInputObjectType",{enumerable:!0,get:function(){return Ie.assertInputObjectType}});Object.defineProperty(V,"assertInputType",{enumerable:!0,get:function(){return Ie.assertInputType}});Object.defineProperty(V,"assertInterfaceType",{enumerable:!0,get:function(){return Ie.assertInterfaceType}});Object.defineProperty(V,"assertLeafType",{enumerable:!0,get:function(){return Ie.assertLeafType}});Object.defineProperty(V,"assertListType",{enumerable:!0,get:function(){return Ie.assertListType}});Object.defineProperty(V,"assertName",{enumerable:!0,get:function(){return Ie.assertName}});Object.defineProperty(V,"assertNamedType",{enumerable:!0,get:function(){return Ie.assertNamedType}});Object.defineProperty(V,"assertNonNullType",{enumerable:!0,get:function(){return Ie.assertNonNullType}});Object.defineProperty(V,"assertNullableType",{enumerable:!0,get:function(){return Ie.assertNullableType}});Object.defineProperty(V,"assertObjectType",{enumerable:!0,get:function(){return Ie.assertObjectType}});Object.defineProperty(V,"assertOutputType",{enumerable:!0,get:function(){return Ie.assertOutputType}});Object.defineProperty(V,"assertScalarType",{enumerable:!0,get:function(){return Ie.assertScalarType}});Object.defineProperty(V,"assertSchema",{enumerable:!0,get:function(){return Ie.assertSchema}});Object.defineProperty(V,"assertType",{enumerable:!0,get:function(){return Ie.assertType}});Object.defineProperty(V,"assertUnionType",{enumerable:!0,get:function(){return Ie.assertUnionType}});Object.defineProperty(V,"assertValidName",{enumerable:!0,get:function(){return Gt.assertValidName}});Object.defineProperty(V,"assertValidSchema",{enumerable:!0,get:function(){return Ie.assertValidSchema}});Object.defineProperty(V,"assertWrappingType",{enumerable:!0,get:function(){return Ie.assertWrappingType}});Object.defineProperty(V,"astFromValue",{enumerable:!0,get:function(){return Gt.astFromValue}});Object.defineProperty(V,"buildASTSchema",{enumerable:!0,get:function(){return Gt.buildASTSchema}});Object.defineProperty(V,"buildClientSchema",{enumerable:!0,get:function(){return Gt.buildClientSchema}});Object.defineProperty(V,"buildSchema",{enumerable:!0,get:function(){return Gt.buildSchema}});Object.defineProperty(V,"coerceInputValue",{enumerable:!0,get:function(){return Gt.coerceInputValue}});Object.defineProperty(V,"concatAST",{enumerable:!0,get:function(){return Gt.concatAST}});Object.defineProperty(V,"createSourceEventStream",{enumerable:!0,get:function(){return Ba.createSourceEventStream}});Object.defineProperty(V,"defaultFieldResolver",{enumerable:!0,get:function(){return Ba.defaultFieldResolver}});Object.defineProperty(V,"defaultTypeResolver",{enumerable:!0,get:function(){return Ba.defaultTypeResolver}});Object.defineProperty(V,"doTypesOverlap",{enumerable:!0,get:function(){return Gt.doTypesOverlap}});Object.defineProperty(V,"execute",{enumerable:!0,get:function(){return Ba.execute}});Object.defineProperty(V,"executeSync",{enumerable:!0,get:function(){return Ba.executeSync}});Object.defineProperty(V,"extendSchema",{enumerable:!0,get:function(){return Gt.extendSchema}});Object.defineProperty(V,"findBreakingChanges",{enumerable:!0,get:function(){return Gt.findBreakingChanges}});Object.defineProperty(V,"findDangerousChanges",{enumerable:!0,get:function(){return Gt.findDangerousChanges}});Object.defineProperty(V,"formatError",{enumerable:!0,get:function(){return ep.formatError}});Object.defineProperty(V,"getArgumentValues",{enumerable:!0,get:function(){return Ba.getArgumentValues}});Object.defineProperty(V,"getDirectiveValues",{enumerable:!0,get:function(){return Ba.getDirectiveValues}});Object.defineProperty(V,"getEnterLeaveForKind",{enumerable:!0,get:function(){return Kt.getEnterLeaveForKind}});Object.defineProperty(V,"getIntrospectionQuery",{enumerable:!0,get:function(){return Gt.getIntrospectionQuery}});Object.defineProperty(V,"getLocation",{enumerable:!0,get:function(){return Kt.getLocation}});Object.defineProperty(V,"getNamedType",{enumerable:!0,get:function(){return Ie.getNamedType}});Object.defineProperty(V,"getNullableType",{enumerable:!0,get:function(){return Ie.getNullableType}});Object.defineProperty(V,"getOperationAST",{enumerable:!0,get:function(){return Gt.getOperationAST}});Object.defineProperty(V,"getOperationRootType",{enumerable:!0,get:function(){return Gt.getOperationRootType}});Object.defineProperty(V,"getVariableValues",{enumerable:!0,get:function(){return Ba.getVariableValues}});Object.defineProperty(V,"getVisitFn",{enumerable:!0,get:function(){return Kt.getVisitFn}});Object.defineProperty(V,"graphql",{enumerable:!0,get:function(){return wL.graphql}});Object.defineProperty(V,"graphqlSync",{enumerable:!0,get:function(){return wL.graphqlSync}});Object.defineProperty(V,"introspectionFromSchema",{enumerable:!0,get:function(){return Gt.introspectionFromSchema}});Object.defineProperty(V,"introspectionTypes",{enumerable:!0,get:function(){return Ie.introspectionTypes}});Object.defineProperty(V,"isAbstractType",{enumerable:!0,get:function(){return Ie.isAbstractType}});Object.defineProperty(V,"isCompositeType",{enumerable:!0,get:function(){return Ie.isCompositeType}});Object.defineProperty(V,"isConstValueNode",{enumerable:!0,get:function(){return Kt.isConstValueNode}});Object.defineProperty(V,"isDefinitionNode",{enumerable:!0,get:function(){return Kt.isDefinitionNode}});Object.defineProperty(V,"isDirective",{enumerable:!0,get:function(){return Ie.isDirective}});Object.defineProperty(V,"isEnumType",{enumerable:!0,get:function(){return Ie.isEnumType}});Object.defineProperty(V,"isEqualType",{enumerable:!0,get:function(){return Gt.isEqualType}});Object.defineProperty(V,"isExecutableDefinitionNode",{enumerable:!0,get:function(){return Kt.isExecutableDefinitionNode}});Object.defineProperty(V,"isInputObjectType",{enumerable:!0,get:function(){return Ie.isInputObjectType}});Object.defineProperty(V,"isInputType",{enumerable:!0,get:function(){return Ie.isInputType}});Object.defineProperty(V,"isInterfaceType",{enumerable:!0,get:function(){return Ie.isInterfaceType}});Object.defineProperty(V,"isIntrospectionType",{enumerable:!0,get:function(){return Ie.isIntrospectionType}});Object.defineProperty(V,"isLeafType",{enumerable:!0,get:function(){return Ie.isLeafType}});Object.defineProperty(V,"isListType",{enumerable:!0,get:function(){return Ie.isListType}});Object.defineProperty(V,"isNamedType",{enumerable:!0,get:function(){return Ie.isNamedType}});Object.defineProperty(V,"isNonNullType",{enumerable:!0,get:function(){return Ie.isNonNullType}});Object.defineProperty(V,"isNullableType",{enumerable:!0,get:function(){return Ie.isNullableType}});Object.defineProperty(V,"isObjectType",{enumerable:!0,get:function(){return Ie.isObjectType}});Object.defineProperty(V,"isOutputType",{enumerable:!0,get:function(){return Ie.isOutputType}});Object.defineProperty(V,"isRequiredArgument",{enumerable:!0,get:function(){return Ie.isRequiredArgument}});Object.defineProperty(V,"isRequiredInputField",{enumerable:!0,get:function(){return Ie.isRequiredInputField}});Object.defineProperty(V,"isScalarType",{enumerable:!0,get:function(){return Ie.isScalarType}});Object.defineProperty(V,"isSchema",{enumerable:!0,get:function(){return Ie.isSchema}});Object.defineProperty(V,"isSelectionNode",{enumerable:!0,get:function(){return Kt.isSelectionNode}});Object.defineProperty(V,"isSpecifiedDirective",{enumerable:!0,get:function(){return Ie.isSpecifiedDirective}});Object.defineProperty(V,"isSpecifiedScalarType",{enumerable:!0,get:function(){return Ie.isSpecifiedScalarType}});Object.defineProperty(V,"isType",{enumerable:!0,get:function(){return Ie.isType}});Object.defineProperty(V,"isTypeDefinitionNode",{enumerable:!0,get:function(){return Kt.isTypeDefinitionNode}});Object.defineProperty(V,"isTypeExtensionNode",{enumerable:!0,get:function(){return Kt.isTypeExtensionNode}});Object.defineProperty(V,"isTypeNode",{enumerable:!0,get:function(){return Kt.isTypeNode}});Object.defineProperty(V,"isTypeSubTypeOf",{enumerable:!0,get:function(){return Gt.isTypeSubTypeOf}});Object.defineProperty(V,"isTypeSystemDefinitionNode",{enumerable:!0,get:function(){return Kt.isTypeSystemDefinitionNode}});Object.defineProperty(V,"isTypeSystemExtensionNode",{enumerable:!0,get:function(){return Kt.isTypeSystemExtensionNode}});Object.defineProperty(V,"isUnionType",{enumerable:!0,get:function(){return Ie.isUnionType}});Object.defineProperty(V,"isValidNameError",{enumerable:!0,get:function(){return Gt.isValidNameError}});Object.defineProperty(V,"isValueNode",{enumerable:!0,get:function(){return Kt.isValueNode}});Object.defineProperty(V,"isWrappingType",{enumerable:!0,get:function(){return Ie.isWrappingType}});Object.defineProperty(V,"lexicographicSortSchema",{enumerable:!0,get:function(){return Gt.lexicographicSortSchema}});Object.defineProperty(V,"locatedError",{enumerable:!0,get:function(){return ep.locatedError}});Object.defineProperty(V,"parse",{enumerable:!0,get:function(){return Kt.parse}});Object.defineProperty(V,"parseConstValue",{enumerable:!0,get:function(){return Kt.parseConstValue}});Object.defineProperty(V,"parseType",{enumerable:!0,get:function(){return Kt.parseType}});Object.defineProperty(V,"parseValue",{enumerable:!0,get:function(){return Kt.parseValue}});Object.defineProperty(V,"print",{enumerable:!0,get:function(){return Kt.print}});Object.defineProperty(V,"printError",{enumerable:!0,get:function(){return ep.printError}});Object.defineProperty(V,"printIntrospectionSchema",{enumerable:!0,get:function(){return Gt.printIntrospectionSchema}});Object.defineProperty(V,"printLocation",{enumerable:!0,get:function(){return Kt.printLocation}});Object.defineProperty(V,"printSchema",{enumerable:!0,get:function(){return Gt.printSchema}});Object.defineProperty(V,"printSourceLocation",{enumerable:!0,get:function(){return Kt.printSourceLocation}});Object.defineProperty(V,"printType",{enumerable:!0,get:function(){return Gt.printType}});Object.defineProperty(V,"recommendedRules",{enumerable:!0,get:function(){return mt.recommendedRules}});Object.defineProperty(V,"resolveObjMapThunk",{enumerable:!0,get:function(){return Ie.resolveObjMapThunk}});Object.defineProperty(V,"resolveReadonlyArrayThunk",{enumerable:!0,get:function(){return Ie.resolveReadonlyArrayThunk}});Object.defineProperty(V,"responsePathAsArray",{enumerable:!0,get:function(){return Ba.responsePathAsArray}});Object.defineProperty(V,"separateOperations",{enumerable:!0,get:function(){return Gt.separateOperations}});Object.defineProperty(V,"specifiedDirectives",{enumerable:!0,get:function(){return Ie.specifiedDirectives}});Object.defineProperty(V,"specifiedRules",{enumerable:!0,get:function(){return mt.specifiedRules}});Object.defineProperty(V,"specifiedScalarTypes",{enumerable:!0,get:function(){return Ie.specifiedScalarTypes}});Object.defineProperty(V,"stripIgnoredCharacters",{enumerable:!0,get:function(){return Gt.stripIgnoredCharacters}});Object.defineProperty(V,"subscribe",{enumerable:!0,get:function(){return Ba.subscribe}});Object.defineProperty(V,"syntaxError",{enumerable:!0,get:function(){return ep.syntaxError}});Object.defineProperty(V,"typeFromAST",{enumerable:!0,get:function(){return Gt.typeFromAST}});Object.defineProperty(V,"validate",{enumerable:!0,get:function(){return mt.validate}});Object.defineProperty(V,"validateSchema",{enumerable:!0,get:function(){return Ie.validateSchema}});Object.defineProperty(V,"valueFromAST",{enumerable:!0,get:function(){return Gt.valueFromAST}});Object.defineProperty(V,"valueFromASTUntyped",{enumerable:!0,get:function(){return Gt.valueFromASTUntyped}});Object.defineProperty(V,"version",{enumerable:!0,get:function(){return PL.version}});Object.defineProperty(V,"versionInfo",{enumerable:!0,get:function(){return PL.versionInfo}});Object.defineProperty(V,"visit",{enumerable:!0,get:function(){return Kt.visit}});Object.defineProperty(V,"visitInParallel",{enumerable:!0,get:function(){return Kt.visitInParallel}});Object.defineProperty(V,"visitWithTypeInfo",{enumerable:!0,get:function(){return Gt.visitWithTypeInfo}});var PL=DR(),wL=Iw(),Ie=vw(),Kt=Ow(),Ba=Lw(),mt=kw(),ep=Mw(),Gt=FL()});var lr=w(P=>{"use strict";f();N();m();Object.defineProperty(P,"__esModule",{value:!0});P.FLOAT_SCALAR=P.FIRST_ORDINAL=P.FIELD_DEFINITION_UPPER=P.FIELDS=P.FIELD_SET_SCALAR=P.FIELD_UPPER=P.FIELD_PATH=P.FIELD=P.EXTENSIONS=P.EXTENDS=P.EXTERNAL=P.EXECUTION=P.ENUM_VALUE_UPPER=P.ENUM_VALUE=P.ENUM_UPPER=P.ENUM=P.ENTITY_UNION=P.ENTITIES_FIELD=P.ENTITIES=P.EDFS_REDIS_SUBSCRIBE=P.EDFS_REDIS_PUBLISH=P.EDFS_NATS_STREAM_CONFIGURATION=P.EDFS_PUBLISH_RESULT=P.EDFS_NATS_SUBSCRIBE=P.EDFS_NATS_REQUEST=P.EDFS_NATS_PUBLISH=P.EDFS_KAFKA_SUBSCRIBE=P.EDFS_KAFKA_PUBLISH=P.DIRECTIVE_DEFINITION=P.DESCRIPTION_OVERRIDE=P.DEPRECATED_DEFAULT_ARGUMENT_VALUE=P.DEPRECATED=P.DEFAULT_SUBSCRIPTION=P.DEFAULT_QUERY=P.DEFAULT_MUTATION=P.DEFAULT_EDFS_PROVIDER_ID=P.DEFAULT=P.CONSUMER_NAME=P.CONFIGURE_CHILD_DESCRIPTIONS=P.CONFIGURE_DESCRIPTION=P.CONDITION=P.COMPOSE_DIRECTIVE=P.BOOLEAN_SCALAR=P.BOOLEAN=P.ARGUMENT_DEFINITION_UPPER=P.AUTHENTICATED=P.ARGUMENT=P.ANY_SCALAR=P.AND_UPPER=P.AS=void 0;P.PARENT_DEFINITION_DATA_MAP=P.PARENT_DEFINITION_DATA=P.OVERRIDE=P.OR_UPPER=P.OBJECT_UPPER=P.OBJECT=P.OPERATION_TO_DEFAULT=P.NULL=P.NOT_UPPER=P.NON_NULLABLE_STRING=P.NON_NULLABLE_INT=P.NON_NULLABLE_BOOLEAN=P.NON_NULLABLE_EDFS_PUBLISH_EVENT_RESULT=P.NAME=P.NOT_APPLICABLE=P.PROVIDER_TYPE_REDIS=P.PROVIDER_TYPE_NATS=P.PROVIDER_TYPE_KAFKA=P.PROPAGATE=P.MUTATION_UPPER=P.MUTATION=P.NUMBER=P.LITERAL_NEW_LINE=P.LITERAL_SPACE=P.LIST=P.LINK_PURPOSE=P.LINK_IMPORT=P.LINK=P.LEFT_PARENTHESIS=P.KEY=P.INTERFACE_OBJECT=P.INTERFACE_UPPER=P.INTERFACE=P.INT_SCALAR=P.INPUT_VALUE=P.INPUT_OBJECT_UPPER=P.INPUT_OBJECT=P.INPUT_FIELD_DEFINITION_UPPER=P.INPUT_FIELD=P.INLINE_FRAGMENT_UPPER=P.INLINE_FRAGMENT=P.INACCESSIBLE=P.IN_UPPER=P.IMPORT=P.ID_SCALAR=P.HYPHEN_JOIN=P.FROM=P.FRAGMENT_SPREAD_UPPER=P.FRAGMENT_DEFINITION_UPPER=P.FOR=void 0;P.CHANNELS=P.CHANNEL=P.VARIABLE_DEFINITION_UPPER=P.VALUES=P.URL_LOWER=P.UNION_UPPER=P.UNION=P.TOPICS=P.TOPIC=P.TAG=P.SUCCESS=P.SUBSCRIPTION_UPPER=P.SUBSCRIBE=P.SUBSCRIPTION_FILTER_VALUE=P.SUBSCRIPTION_FILTER_CONDITION=P.SUBSCRIPTION_FILTER=P.SUBSCRIPTION_FIELD_CONDITION=P.SUBSCRIPTION=P.SUBJECTS=P.SUBJECT=P.STRING_SCALAR=P.STRING=P.STREAM_NAME=P.CONSUMER_INACTIVE_THRESHOLD=P.STREAM_CONFIGURATION=P.SPECIFIED_BY=P.SHAREABLE=P.SERVICE_FIELD=P.SERVICE_OBJECT=P.SELECTION_REPRESENTATION=P.SECURITY=P.SCOPE_SCALAR=P.SCOPES=P.SCHEMA_UPPER=P.SCHEMA=P.SCALAR_UPPER=P.SCALAR=P.RESOLVABLE=P.REQUIRES_SCOPES=P.REQUIRES=P.REQUEST=P.REASON=P.QUOTATION_JOIN=P.QUERY_UPPER=P.QUERY=P.PUBLISH=P.PROVIDES=P.PROVIDER_ID=P.PERIOD=P.PARENT_EXTENSION_DATA_MAP=void 0;P.IGNORED_FIELDS=P.INHERITABLE_DIRECTIVE_NAMES=P.PERSISTED_CLIENT_DIRECTIVES=P.AUTHORIZATION_DIRECTIVES=P.ROOT_TYPE_NAMES=P.EXECUTABLE_DIRECTIVE_LOCATIONS=void 0;P.AS="as";P.AND_UPPER="AND";P.ANY_SCALAR="_Any";P.ARGUMENT="argument";P.AUTHENTICATED="authenticated";P.ARGUMENT_DEFINITION_UPPER="ARGUMENT_DEFINITION";P.BOOLEAN="boolean";P.BOOLEAN_SCALAR="Boolean";P.COMPOSE_DIRECTIVE="composeDirective";P.CONDITION="condition";P.CONFIGURE_DESCRIPTION="openfed__configureDescription";P.CONFIGURE_CHILD_DESCRIPTIONS="openfed__configureChildDescriptions";P.CONSUMER_NAME="consumerName";P.DEFAULT="default";P.DEFAULT_EDFS_PROVIDER_ID="default";P.DEFAULT_MUTATION="Mutation";P.DEFAULT_QUERY="Query";P.DEFAULT_SUBSCRIPTION="Subscription";P.DEPRECATED="deprecated";P.DEPRECATED_DEFAULT_ARGUMENT_VALUE="No longer supported";P.DESCRIPTION_OVERRIDE="descriptionOverride";P.DIRECTIVE_DEFINITION="directive definition";P.EDFS_KAFKA_PUBLISH="edfs__kafkaPublish";P.EDFS_KAFKA_SUBSCRIBE="edfs__kafkaSubscribe";P.EDFS_NATS_PUBLISH="edfs__natsPublish";P.EDFS_NATS_REQUEST="edfs__natsRequest";P.EDFS_NATS_SUBSCRIBE="edfs__natsSubscribe";P.EDFS_PUBLISH_RESULT="edfs__PublishResult";P.EDFS_NATS_STREAM_CONFIGURATION="edfs__NatsStreamConfiguration";P.EDFS_REDIS_PUBLISH="edfs__redisPublish";P.EDFS_REDIS_SUBSCRIBE="edfs__redisSubscribe";P.ENTITIES="entities";P.ENTITIES_FIELD="_entities";P.ENTITY_UNION="_Entity";P.ENUM="Enum";P.ENUM_UPPER="ENUM";P.ENUM_VALUE="Enum Value";P.ENUM_VALUE_UPPER="ENUM_VALUE";P.EXECUTION="EXECUTION";P.EXTERNAL="external";P.EXTENDS="extends";P.EXTENSIONS="extensions";P.FIELD="Field";P.FIELD_PATH="fieldPath";P.FIELD_UPPER="FIELD";P.FIELD_SET_SCALAR="openfed__FieldSet";P.FIELDS="fields";P.FIELD_DEFINITION_UPPER="FIELD_DEFINITION";P.FIRST_ORDINAL="1st";P.FLOAT_SCALAR="Float";P.FOR="for";P.FRAGMENT_DEFINITION_UPPER="FRAGMENT_DEFINITION";P.FRAGMENT_SPREAD_UPPER="FRAGMENT_SPREAD";P.FROM="from";P.HYPHEN_JOIN=` +`}});var dL=w(V_=>{"use strict";m();T();N();Object.defineProperty(V_,"__esModule",{value:!0});V_.concatAST=x5;var M5=Rt();function x5(e){let t=[];for(let n of e)t.push(...n.definitions);return{kind:M5.Kind.DOCUMENT,definitions:t}}});var mL=w(j_=>{"use strict";m();T();N();Object.defineProperty(j_,"__esModule",{value:!0});j_.separateOperations=V5;var dN=Rt(),q5=Fu();function V5(e){let t=[],n=Object.create(null);for(let i of e.definitions)switch(i.kind){case dN.Kind.OPERATION_DEFINITION:t.push(i);break;case dN.Kind.FRAGMENT_DEFINITION:n[i.name.value]=pL(i.selectionSet);break;default:}let r=Object.create(null);for(let i of t){let a=new Set;for(let c of pL(i.selectionSet))fL(a,n,c);let o=i.name?i.name.value:"";r[o]={kind:dN.Kind.DOCUMENT,definitions:e.definitions.filter(c=>c===i||c.kind===dN.Kind.FRAGMENT_DEFINITION&&a.has(c.name.value))}}return r}function fL(e,t,n){if(!e.has(n)){e.add(n);let r=t[n];if(r!==void 0)for(let i of r)fL(e,t,i)}}function pL(e){let t=[];return(0,q5.visit)(e,{FragmentSpread(n){t.push(n.name.value)}}),t}});var EL=w(G_=>{"use strict";m();T();N();Object.defineProperty(G_,"__esModule",{value:!0});G_.stripIgnoredCharacters=K5;var j5=cd(),NL=nm(),TL=sm(),K_=dd();function K5(e){let t=(0,TL.isSource)(e)?e:new TL.Source(e),n=t.body,r=new NL.Lexer(t),i="",a=!1;for(;r.advance().kind!==K_.TokenKind.EOF;){let o=r.token,c=o.kind,l=!(0,NL.isPunctuatorTokenKind)(o.kind);a&&(l||o.kind===K_.TokenKind.SPREAD)&&(i+=" ");let p=n.slice(o.start,o.end);c===K_.TokenKind.BLOCK_STRING?i+=(0,j5.printBlockString)(o.value,{minimize:!0}):i+=p,a=l}return i}});var yL=w(pN=>{"use strict";m();T();N();Object.defineProperty(pN,"__esModule",{value:!0});pN.assertValidName=Y5;pN.isValidNameError=hL;var G5=Cr(),$5=He(),Q5=yd();function Y5(e){let t=hL(e);if(t)throw t;return e}function hL(e){if(typeof e=="string"||(0,G5.devAssert)(!1,"Expected name to be a string."),e.startsWith("__"))return new $5.GraphQLError(`Name "${e}" must not begin with "__", which is reserved by GraphQL introspection.`);try{(0,Q5.assertName)(e)}catch(t){return t}}});var bL=w(Ca=>{"use strict";m();T();N();Object.defineProperty(Ca,"__esModule",{value:!0});Ca.DangerousChangeType=Ca.BreakingChangeType=void 0;Ca.findBreakingChanges=Z5;Ca.findDangerousChanges=eX;var J5=Yt(),OL=Ir(),IL=qo(),H5=li(),xt=Ft(),z5=Aa(),W5=Pd(),X5=YI(),Ln;Ca.BreakingChangeType=Ln;(function(e){e.TYPE_REMOVED="TYPE_REMOVED",e.TYPE_CHANGED_KIND="TYPE_CHANGED_KIND",e.TYPE_REMOVED_FROM_UNION="TYPE_REMOVED_FROM_UNION",e.VALUE_REMOVED_FROM_ENUM="VALUE_REMOVED_FROM_ENUM",e.REQUIRED_INPUT_FIELD_ADDED="REQUIRED_INPUT_FIELD_ADDED",e.IMPLEMENTED_INTERFACE_REMOVED="IMPLEMENTED_INTERFACE_REMOVED",e.FIELD_REMOVED="FIELD_REMOVED",e.FIELD_CHANGED_KIND="FIELD_CHANGED_KIND",e.REQUIRED_ARG_ADDED="REQUIRED_ARG_ADDED",e.ARG_REMOVED="ARG_REMOVED",e.ARG_CHANGED_KIND="ARG_CHANGED_KIND",e.DIRECTIVE_REMOVED="DIRECTIVE_REMOVED",e.DIRECTIVE_ARG_REMOVED="DIRECTIVE_ARG_REMOVED",e.REQUIRED_DIRECTIVE_ARG_ADDED="REQUIRED_DIRECTIVE_ARG_ADDED",e.DIRECTIVE_REPEATABLE_REMOVED="DIRECTIVE_REPEATABLE_REMOVED",e.DIRECTIVE_LOCATION_REMOVED="DIRECTIVE_LOCATION_REMOVED"})(Ln||(Ca.BreakingChangeType=Ln={}));var aa;Ca.DangerousChangeType=aa;(function(e){e.VALUE_ADDED_TO_ENUM="VALUE_ADDED_TO_ENUM",e.TYPE_ADDED_TO_UNION="TYPE_ADDED_TO_UNION",e.OPTIONAL_INPUT_FIELD_ADDED="OPTIONAL_INPUT_FIELD_ADDED",e.OPTIONAL_ARG_ADDED="OPTIONAL_ARG_ADDED",e.IMPLEMENTED_INTERFACE_ADDED="IMPLEMENTED_INTERFACE_ADDED",e.ARG_DEFAULT_VALUE_CHANGE="ARG_DEFAULT_VALUE_CHANGE"})(aa||(Ca.DangerousChangeType=aa={}));function Z5(e,t){return DL(e,t).filter(n=>n.type in Ln)}function eX(e,t){return DL(e,t).filter(n=>n.type in aa)}function DL(e,t){return[...nX(e,t),...tX(e,t)]}function tX(e,t){let n=[],r=Ts(e.getDirectives(),t.getDirectives());for(let i of r.removed)n.push({type:Ln.DIRECTIVE_REMOVED,description:`${i.name} was removed.`});for(let[i,a]of r.persisted){let o=Ts(i.args,a.args);for(let c of o.added)(0,xt.isRequiredArgument)(c)&&n.push({type:Ln.REQUIRED_DIRECTIVE_ARG_ADDED,description:`A required arg ${c.name} on directive ${i.name} was added.`});for(let c of o.removed)n.push({type:Ln.DIRECTIVE_ARG_REMOVED,description:`${c.name} was removed from ${i.name}.`});i.isRepeatable&&!a.isRepeatable&&n.push({type:Ln.DIRECTIVE_REPEATABLE_REMOVED,description:`Repeatable flag was removed from ${i.name}.`});for(let c of i.locations)a.locations.includes(c)||n.push({type:Ln.DIRECTIVE_LOCATION_REMOVED,description:`${c} was removed from ${i.name}.`})}return n}function nX(e,t){let n=[],r=Ts(Object.values(e.getTypeMap()),Object.values(t.getTypeMap()));for(let i of r.removed)n.push({type:Ln.TYPE_REMOVED,description:(0,z5.isSpecifiedScalarType)(i)?`Standard scalar ${i.name} was removed because it is not referenced anymore.`:`${i.name} was removed.`});for(let[i,a]of r.persisted)(0,xt.isEnumType)(i)&&(0,xt.isEnumType)(a)?n.push(...aX(i,a)):(0,xt.isUnionType)(i)&&(0,xt.isUnionType)(a)?n.push(...iX(i,a)):(0,xt.isInputObjectType)(i)&&(0,xt.isInputObjectType)(a)?n.push(...rX(i,a)):(0,xt.isObjectType)(i)&&(0,xt.isObjectType)(a)?n.push(..._L(i,a),...gL(i,a)):(0,xt.isInterfaceType)(i)&&(0,xt.isInterfaceType)(a)?n.push(..._L(i,a),...gL(i,a)):i.constructor!==a.constructor&&n.push({type:Ln.TYPE_CHANGED_KIND,description:`${i.name} changed from ${vL(i)} to ${vL(a)}.`});return n}function rX(e,t){let n=[],r=Ts(Object.values(e.getFields()),Object.values(t.getFields()));for(let i of r.added)(0,xt.isRequiredInputField)(i)?n.push({type:Ln.REQUIRED_INPUT_FIELD_ADDED,description:`A required field ${i.name} on input type ${e.name} was added.`}):n.push({type:aa.OPTIONAL_INPUT_FIELD_ADDED,description:`An optional field ${i.name} on input type ${e.name} was added.`});for(let i of r.removed)n.push({type:Ln.FIELD_REMOVED,description:`${e.name}.${i.name} was removed.`});for(let[i,a]of r.persisted)ep(i.type,a.type)||n.push({type:Ln.FIELD_CHANGED_KIND,description:`${e.name}.${i.name} changed type from ${String(i.type)} to ${String(a.type)}.`});return n}function iX(e,t){let n=[],r=Ts(e.getTypes(),t.getTypes());for(let i of r.added)n.push({type:aa.TYPE_ADDED_TO_UNION,description:`${i.name} was added to union type ${e.name}.`});for(let i of r.removed)n.push({type:Ln.TYPE_REMOVED_FROM_UNION,description:`${i.name} was removed from union type ${e.name}.`});return n}function aX(e,t){let n=[],r=Ts(e.getValues(),t.getValues());for(let i of r.added)n.push({type:aa.VALUE_ADDED_TO_ENUM,description:`${i.name} was added to enum type ${e.name}.`});for(let i of r.removed)n.push({type:Ln.VALUE_REMOVED_FROM_ENUM,description:`${i.name} was removed from enum type ${e.name}.`});return n}function gL(e,t){let n=[],r=Ts(e.getInterfaces(),t.getInterfaces());for(let i of r.added)n.push({type:aa.IMPLEMENTED_INTERFACE_ADDED,description:`${i.name} added to interfaces implemented by ${e.name}.`});for(let i of r.removed)n.push({type:Ln.IMPLEMENTED_INTERFACE_REMOVED,description:`${e.name} no longer implements interface ${i.name}.`});return n}function _L(e,t){let n=[],r=Ts(Object.values(e.getFields()),Object.values(t.getFields()));for(let i of r.removed)n.push({type:Ln.FIELD_REMOVED,description:`${e.name}.${i.name} was removed.`});for(let[i,a]of r.persisted)n.push(...sX(e,i,a)),Zd(i.type,a.type)||n.push({type:Ln.FIELD_CHANGED_KIND,description:`${e.name}.${i.name} changed type from ${String(i.type)} to ${String(a.type)}.`});return n}function sX(e,t,n){let r=[],i=Ts(t.args,n.args);for(let a of i.removed)r.push({type:Ln.ARG_REMOVED,description:`${e.name}.${t.name} arg ${a.name} was removed.`});for(let[a,o]of i.persisted)if(!ep(a.type,o.type))r.push({type:Ln.ARG_CHANGED_KIND,description:`${e.name}.${t.name} arg ${a.name} has changed type from ${String(a.type)} to ${String(o.type)}.`});else if(a.defaultValue!==void 0)if(o.defaultValue===void 0)r.push({type:aa.ARG_DEFAULT_VALUE_CHANGE,description:`${e.name}.${t.name} arg ${a.name} defaultValue was removed.`});else{let l=SL(a.defaultValue,a.type),p=SL(o.defaultValue,o.type);l!==p&&r.push({type:aa.ARG_DEFAULT_VALUE_CHANGE,description:`${e.name}.${t.name} arg ${a.name} has changed defaultValue from ${l} to ${p}.`})}for(let a of i.added)(0,xt.isRequiredArgument)(a)?r.push({type:Ln.REQUIRED_ARG_ADDED,description:`A required arg ${a.name} on ${e.name}.${t.name} was added.`}):r.push({type:aa.OPTIONAL_ARG_ADDED,description:`An optional arg ${a.name} on ${e.name}.${t.name} was added.`});return r}function Zd(e,t){return(0,xt.isListType)(e)?(0,xt.isListType)(t)&&Zd(e.ofType,t.ofType)||(0,xt.isNonNullType)(t)&&Zd(e,t.ofType):(0,xt.isNonNullType)(e)?(0,xt.isNonNullType)(t)&&Zd(e.ofType,t.ofType):(0,xt.isNamedType)(t)&&e.name===t.name||(0,xt.isNonNullType)(t)&&Zd(e,t.ofType)}function ep(e,t){return(0,xt.isListType)(e)?(0,xt.isListType)(t)&&ep(e.ofType,t.ofType):(0,xt.isNonNullType)(e)?(0,xt.isNonNullType)(t)&&ep(e.ofType,t.ofType)||!(0,xt.isNonNullType)(t)&&ep(e.ofType,t):(0,xt.isNamedType)(t)&&e.name===t.name}function vL(e){if((0,xt.isScalarType)(e))return"a Scalar type";if((0,xt.isObjectType)(e))return"an Object type";if((0,xt.isInterfaceType)(e))return"an Interface type";if((0,xt.isUnionType)(e))return"a Union type";if((0,xt.isEnumType)(e))return"an Enum type";if((0,xt.isInputObjectType)(e))return"an Input type";(0,OL.invariant)(!1,"Unexpected type: "+(0,J5.inspect)(e))}function SL(e,t){let n=(0,W5.astFromValue)(e,t);return n!=null||(0,OL.invariant)(!1),(0,H5.print)((0,X5.sortValueNode)(n))}function Ts(e,t){let n=[],r=[],i=[],a=(0,IL.keyMap)(e,({name:c})=>c),o=(0,IL.keyMap)(t,({name:c})=>c);for(let c of e){let l=o[c.name];l===void 0?r.push(c):i.push([c,l])}for(let c of t)a[c.name]===void 0&&n.push(c);return{added:n,persisted:i,removed:r}}});var PL=w(Bt=>{"use strict";m();T();N();Object.defineProperty(Bt,"__esModule",{value:!0});Object.defineProperty(Bt,"BreakingChangeType",{enumerable:!0,get:function(){return fN.BreakingChangeType}});Object.defineProperty(Bt,"DangerousChangeType",{enumerable:!0,get:function(){return fN.DangerousChangeType}});Object.defineProperty(Bt,"TypeInfo",{enumerable:!0,get:function(){return RL.TypeInfo}});Object.defineProperty(Bt,"assertValidName",{enumerable:!0,get:function(){return FL.assertValidName}});Object.defineProperty(Bt,"astFromValue",{enumerable:!0,get:function(){return EX.astFromValue}});Object.defineProperty(Bt,"buildASTSchema",{enumerable:!0,get:function(){return AL.buildASTSchema}});Object.defineProperty(Bt,"buildClientSchema",{enumerable:!0,get:function(){return dX.buildClientSchema}});Object.defineProperty(Bt,"buildSchema",{enumerable:!0,get:function(){return AL.buildSchema}});Object.defineProperty(Bt,"coerceInputValue",{enumerable:!0,get:function(){return hX.coerceInputValue}});Object.defineProperty(Bt,"concatAST",{enumerable:!0,get:function(){return yX.concatAST}});Object.defineProperty(Bt,"doTypesOverlap",{enumerable:!0,get:function(){return Q_.doTypesOverlap}});Object.defineProperty(Bt,"extendSchema",{enumerable:!0,get:function(){return pX.extendSchema}});Object.defineProperty(Bt,"findBreakingChanges",{enumerable:!0,get:function(){return fN.findBreakingChanges}});Object.defineProperty(Bt,"findDangerousChanges",{enumerable:!0,get:function(){return fN.findDangerousChanges}});Object.defineProperty(Bt,"getIntrospectionQuery",{enumerable:!0,get:function(){return oX.getIntrospectionQuery}});Object.defineProperty(Bt,"getOperationAST",{enumerable:!0,get:function(){return uX.getOperationAST}});Object.defineProperty(Bt,"getOperationRootType",{enumerable:!0,get:function(){return cX.getOperationRootType}});Object.defineProperty(Bt,"introspectionFromSchema",{enumerable:!0,get:function(){return lX.introspectionFromSchema}});Object.defineProperty(Bt,"isEqualType",{enumerable:!0,get:function(){return Q_.isEqualType}});Object.defineProperty(Bt,"isTypeSubTypeOf",{enumerable:!0,get:function(){return Q_.isTypeSubTypeOf}});Object.defineProperty(Bt,"isValidNameError",{enumerable:!0,get:function(){return FL.isValidNameError}});Object.defineProperty(Bt,"lexicographicSortSchema",{enumerable:!0,get:function(){return fX.lexicographicSortSchema}});Object.defineProperty(Bt,"printIntrospectionSchema",{enumerable:!0,get:function(){return $_.printIntrospectionSchema}});Object.defineProperty(Bt,"printSchema",{enumerable:!0,get:function(){return $_.printSchema}});Object.defineProperty(Bt,"printType",{enumerable:!0,get:function(){return $_.printType}});Object.defineProperty(Bt,"separateOperations",{enumerable:!0,get:function(){return IX.separateOperations}});Object.defineProperty(Bt,"stripIgnoredCharacters",{enumerable:!0,get:function(){return gX.stripIgnoredCharacters}});Object.defineProperty(Bt,"typeFromAST",{enumerable:!0,get:function(){return mX.typeFromAST}});Object.defineProperty(Bt,"valueFromAST",{enumerable:!0,get:function(){return NX.valueFromAST}});Object.defineProperty(Bt,"valueFromASTUntyped",{enumerable:!0,get:function(){return TX.valueFromASTUntyped}});Object.defineProperty(Bt,"visitWithTypeInfo",{enumerable:!0,get:function(){return RL.visitWithTypeInfo}});var oX=b_(),uX=qw(),cX=Vw(),lX=jw(),dX=Gw(),AL=eL(),pX=L_(),fX=rL(),$_=lL(),mX=Ra(),NX=Vd(),TX=Ky(),EX=Pd(),RL=Cm(),hX=fg(),yX=dL(),IX=mL(),gX=EL(),Q_=Sd(),FL=yL(),fN=bL()});var Ae=w(V=>{"use strict";m();T();N();Object.defineProperty(V,"__esModule",{value:!0});Object.defineProperty(V,"BREAK",{enumerable:!0,get:function(){return Kt.BREAK}});Object.defineProperty(V,"BreakingChangeType",{enumerable:!0,get:function(){return Gt.BreakingChangeType}});Object.defineProperty(V,"DEFAULT_DEPRECATION_REASON",{enumerable:!0,get:function(){return Ie.DEFAULT_DEPRECATION_REASON}});Object.defineProperty(V,"DangerousChangeType",{enumerable:!0,get:function(){return Gt.DangerousChangeType}});Object.defineProperty(V,"DirectiveLocation",{enumerable:!0,get:function(){return Kt.DirectiveLocation}});Object.defineProperty(V,"ExecutableDefinitionsRule",{enumerable:!0,get:function(){return mt.ExecutableDefinitionsRule}});Object.defineProperty(V,"FieldsOnCorrectTypeRule",{enumerable:!0,get:function(){return mt.FieldsOnCorrectTypeRule}});Object.defineProperty(V,"FragmentsOnCompositeTypesRule",{enumerable:!0,get:function(){return mt.FragmentsOnCompositeTypesRule}});Object.defineProperty(V,"GRAPHQL_MAX_INT",{enumerable:!0,get:function(){return Ie.GRAPHQL_MAX_INT}});Object.defineProperty(V,"GRAPHQL_MIN_INT",{enumerable:!0,get:function(){return Ie.GRAPHQL_MIN_INT}});Object.defineProperty(V,"GraphQLBoolean",{enumerable:!0,get:function(){return Ie.GraphQLBoolean}});Object.defineProperty(V,"GraphQLDeprecatedDirective",{enumerable:!0,get:function(){return Ie.GraphQLDeprecatedDirective}});Object.defineProperty(V,"GraphQLDirective",{enumerable:!0,get:function(){return Ie.GraphQLDirective}});Object.defineProperty(V,"GraphQLEnumType",{enumerable:!0,get:function(){return Ie.GraphQLEnumType}});Object.defineProperty(V,"GraphQLError",{enumerable:!0,get:function(){return tp.GraphQLError}});Object.defineProperty(V,"GraphQLFloat",{enumerable:!0,get:function(){return Ie.GraphQLFloat}});Object.defineProperty(V,"GraphQLID",{enumerable:!0,get:function(){return Ie.GraphQLID}});Object.defineProperty(V,"GraphQLIncludeDirective",{enumerable:!0,get:function(){return Ie.GraphQLIncludeDirective}});Object.defineProperty(V,"GraphQLInputObjectType",{enumerable:!0,get:function(){return Ie.GraphQLInputObjectType}});Object.defineProperty(V,"GraphQLInt",{enumerable:!0,get:function(){return Ie.GraphQLInt}});Object.defineProperty(V,"GraphQLInterfaceType",{enumerable:!0,get:function(){return Ie.GraphQLInterfaceType}});Object.defineProperty(V,"GraphQLList",{enumerable:!0,get:function(){return Ie.GraphQLList}});Object.defineProperty(V,"GraphQLNonNull",{enumerable:!0,get:function(){return Ie.GraphQLNonNull}});Object.defineProperty(V,"GraphQLObjectType",{enumerable:!0,get:function(){return Ie.GraphQLObjectType}});Object.defineProperty(V,"GraphQLOneOfDirective",{enumerable:!0,get:function(){return Ie.GraphQLOneOfDirective}});Object.defineProperty(V,"GraphQLScalarType",{enumerable:!0,get:function(){return Ie.GraphQLScalarType}});Object.defineProperty(V,"GraphQLSchema",{enumerable:!0,get:function(){return Ie.GraphQLSchema}});Object.defineProperty(V,"GraphQLSkipDirective",{enumerable:!0,get:function(){return Ie.GraphQLSkipDirective}});Object.defineProperty(V,"GraphQLSpecifiedByDirective",{enumerable:!0,get:function(){return Ie.GraphQLSpecifiedByDirective}});Object.defineProperty(V,"GraphQLString",{enumerable:!0,get:function(){return Ie.GraphQLString}});Object.defineProperty(V,"GraphQLUnionType",{enumerable:!0,get:function(){return Ie.GraphQLUnionType}});Object.defineProperty(V,"Kind",{enumerable:!0,get:function(){return Kt.Kind}});Object.defineProperty(V,"KnownArgumentNamesRule",{enumerable:!0,get:function(){return mt.KnownArgumentNamesRule}});Object.defineProperty(V,"KnownDirectivesRule",{enumerable:!0,get:function(){return mt.KnownDirectivesRule}});Object.defineProperty(V,"KnownFragmentNamesRule",{enumerable:!0,get:function(){return mt.KnownFragmentNamesRule}});Object.defineProperty(V,"KnownTypeNamesRule",{enumerable:!0,get:function(){return mt.KnownTypeNamesRule}});Object.defineProperty(V,"Lexer",{enumerable:!0,get:function(){return Kt.Lexer}});Object.defineProperty(V,"Location",{enumerable:!0,get:function(){return Kt.Location}});Object.defineProperty(V,"LoneAnonymousOperationRule",{enumerable:!0,get:function(){return mt.LoneAnonymousOperationRule}});Object.defineProperty(V,"LoneSchemaDefinitionRule",{enumerable:!0,get:function(){return mt.LoneSchemaDefinitionRule}});Object.defineProperty(V,"MaxIntrospectionDepthRule",{enumerable:!0,get:function(){return mt.MaxIntrospectionDepthRule}});Object.defineProperty(V,"NoDeprecatedCustomRule",{enumerable:!0,get:function(){return mt.NoDeprecatedCustomRule}});Object.defineProperty(V,"NoFragmentCyclesRule",{enumerable:!0,get:function(){return mt.NoFragmentCyclesRule}});Object.defineProperty(V,"NoSchemaIntrospectionCustomRule",{enumerable:!0,get:function(){return mt.NoSchemaIntrospectionCustomRule}});Object.defineProperty(V,"NoUndefinedVariablesRule",{enumerable:!0,get:function(){return mt.NoUndefinedVariablesRule}});Object.defineProperty(V,"NoUnusedFragmentsRule",{enumerable:!0,get:function(){return mt.NoUnusedFragmentsRule}});Object.defineProperty(V,"NoUnusedVariablesRule",{enumerable:!0,get:function(){return mt.NoUnusedVariablesRule}});Object.defineProperty(V,"OperationTypeNode",{enumerable:!0,get:function(){return Kt.OperationTypeNode}});Object.defineProperty(V,"OverlappingFieldsCanBeMergedRule",{enumerable:!0,get:function(){return mt.OverlappingFieldsCanBeMergedRule}});Object.defineProperty(V,"PossibleFragmentSpreadsRule",{enumerable:!0,get:function(){return mt.PossibleFragmentSpreadsRule}});Object.defineProperty(V,"PossibleTypeExtensionsRule",{enumerable:!0,get:function(){return mt.PossibleTypeExtensionsRule}});Object.defineProperty(V,"ProvidedRequiredArgumentsRule",{enumerable:!0,get:function(){return mt.ProvidedRequiredArgumentsRule}});Object.defineProperty(V,"ScalarLeafsRule",{enumerable:!0,get:function(){return mt.ScalarLeafsRule}});Object.defineProperty(V,"SchemaMetaFieldDef",{enumerable:!0,get:function(){return Ie.SchemaMetaFieldDef}});Object.defineProperty(V,"SingleFieldSubscriptionsRule",{enumerable:!0,get:function(){return mt.SingleFieldSubscriptionsRule}});Object.defineProperty(V,"Source",{enumerable:!0,get:function(){return Kt.Source}});Object.defineProperty(V,"Token",{enumerable:!0,get:function(){return Kt.Token}});Object.defineProperty(V,"TokenKind",{enumerable:!0,get:function(){return Kt.TokenKind}});Object.defineProperty(V,"TypeInfo",{enumerable:!0,get:function(){return Gt.TypeInfo}});Object.defineProperty(V,"TypeKind",{enumerable:!0,get:function(){return Ie.TypeKind}});Object.defineProperty(V,"TypeMetaFieldDef",{enumerable:!0,get:function(){return Ie.TypeMetaFieldDef}});Object.defineProperty(V,"TypeNameMetaFieldDef",{enumerable:!0,get:function(){return Ie.TypeNameMetaFieldDef}});Object.defineProperty(V,"UniqueArgumentDefinitionNamesRule",{enumerable:!0,get:function(){return mt.UniqueArgumentDefinitionNamesRule}});Object.defineProperty(V,"UniqueArgumentNamesRule",{enumerable:!0,get:function(){return mt.UniqueArgumentNamesRule}});Object.defineProperty(V,"UniqueDirectiveNamesRule",{enumerable:!0,get:function(){return mt.UniqueDirectiveNamesRule}});Object.defineProperty(V,"UniqueDirectivesPerLocationRule",{enumerable:!0,get:function(){return mt.UniqueDirectivesPerLocationRule}});Object.defineProperty(V,"UniqueEnumValueNamesRule",{enumerable:!0,get:function(){return mt.UniqueEnumValueNamesRule}});Object.defineProperty(V,"UniqueFieldDefinitionNamesRule",{enumerable:!0,get:function(){return mt.UniqueFieldDefinitionNamesRule}});Object.defineProperty(V,"UniqueFragmentNamesRule",{enumerable:!0,get:function(){return mt.UniqueFragmentNamesRule}});Object.defineProperty(V,"UniqueInputFieldNamesRule",{enumerable:!0,get:function(){return mt.UniqueInputFieldNamesRule}});Object.defineProperty(V,"UniqueOperationNamesRule",{enumerable:!0,get:function(){return mt.UniqueOperationNamesRule}});Object.defineProperty(V,"UniqueOperationTypesRule",{enumerable:!0,get:function(){return mt.UniqueOperationTypesRule}});Object.defineProperty(V,"UniqueTypeNamesRule",{enumerable:!0,get:function(){return mt.UniqueTypeNamesRule}});Object.defineProperty(V,"UniqueVariableNamesRule",{enumerable:!0,get:function(){return mt.UniqueVariableNamesRule}});Object.defineProperty(V,"ValidationContext",{enumerable:!0,get:function(){return mt.ValidationContext}});Object.defineProperty(V,"ValuesOfCorrectTypeRule",{enumerable:!0,get:function(){return mt.ValuesOfCorrectTypeRule}});Object.defineProperty(V,"VariablesAreInputTypesRule",{enumerable:!0,get:function(){return mt.VariablesAreInputTypesRule}});Object.defineProperty(V,"VariablesInAllowedPositionRule",{enumerable:!0,get:function(){return mt.VariablesInAllowedPositionRule}});Object.defineProperty(V,"__Directive",{enumerable:!0,get:function(){return Ie.__Directive}});Object.defineProperty(V,"__DirectiveLocation",{enumerable:!0,get:function(){return Ie.__DirectiveLocation}});Object.defineProperty(V,"__EnumValue",{enumerable:!0,get:function(){return Ie.__EnumValue}});Object.defineProperty(V,"__Field",{enumerable:!0,get:function(){return Ie.__Field}});Object.defineProperty(V,"__InputValue",{enumerable:!0,get:function(){return Ie.__InputValue}});Object.defineProperty(V,"__Schema",{enumerable:!0,get:function(){return Ie.__Schema}});Object.defineProperty(V,"__Type",{enumerable:!0,get:function(){return Ie.__Type}});Object.defineProperty(V,"__TypeKind",{enumerable:!0,get:function(){return Ie.__TypeKind}});Object.defineProperty(V,"assertAbstractType",{enumerable:!0,get:function(){return Ie.assertAbstractType}});Object.defineProperty(V,"assertCompositeType",{enumerable:!0,get:function(){return Ie.assertCompositeType}});Object.defineProperty(V,"assertDirective",{enumerable:!0,get:function(){return Ie.assertDirective}});Object.defineProperty(V,"assertEnumType",{enumerable:!0,get:function(){return Ie.assertEnumType}});Object.defineProperty(V,"assertEnumValueName",{enumerable:!0,get:function(){return Ie.assertEnumValueName}});Object.defineProperty(V,"assertInputObjectType",{enumerable:!0,get:function(){return Ie.assertInputObjectType}});Object.defineProperty(V,"assertInputType",{enumerable:!0,get:function(){return Ie.assertInputType}});Object.defineProperty(V,"assertInterfaceType",{enumerable:!0,get:function(){return Ie.assertInterfaceType}});Object.defineProperty(V,"assertLeafType",{enumerable:!0,get:function(){return Ie.assertLeafType}});Object.defineProperty(V,"assertListType",{enumerable:!0,get:function(){return Ie.assertListType}});Object.defineProperty(V,"assertName",{enumerable:!0,get:function(){return Ie.assertName}});Object.defineProperty(V,"assertNamedType",{enumerable:!0,get:function(){return Ie.assertNamedType}});Object.defineProperty(V,"assertNonNullType",{enumerable:!0,get:function(){return Ie.assertNonNullType}});Object.defineProperty(V,"assertNullableType",{enumerable:!0,get:function(){return Ie.assertNullableType}});Object.defineProperty(V,"assertObjectType",{enumerable:!0,get:function(){return Ie.assertObjectType}});Object.defineProperty(V,"assertOutputType",{enumerable:!0,get:function(){return Ie.assertOutputType}});Object.defineProperty(V,"assertScalarType",{enumerable:!0,get:function(){return Ie.assertScalarType}});Object.defineProperty(V,"assertSchema",{enumerable:!0,get:function(){return Ie.assertSchema}});Object.defineProperty(V,"assertType",{enumerable:!0,get:function(){return Ie.assertType}});Object.defineProperty(V,"assertUnionType",{enumerable:!0,get:function(){return Ie.assertUnionType}});Object.defineProperty(V,"assertValidName",{enumerable:!0,get:function(){return Gt.assertValidName}});Object.defineProperty(V,"assertValidSchema",{enumerable:!0,get:function(){return Ie.assertValidSchema}});Object.defineProperty(V,"assertWrappingType",{enumerable:!0,get:function(){return Ie.assertWrappingType}});Object.defineProperty(V,"astFromValue",{enumerable:!0,get:function(){return Gt.astFromValue}});Object.defineProperty(V,"buildASTSchema",{enumerable:!0,get:function(){return Gt.buildASTSchema}});Object.defineProperty(V,"buildClientSchema",{enumerable:!0,get:function(){return Gt.buildClientSchema}});Object.defineProperty(V,"buildSchema",{enumerable:!0,get:function(){return Gt.buildSchema}});Object.defineProperty(V,"coerceInputValue",{enumerable:!0,get:function(){return Gt.coerceInputValue}});Object.defineProperty(V,"concatAST",{enumerable:!0,get:function(){return Gt.concatAST}});Object.defineProperty(V,"createSourceEventStream",{enumerable:!0,get:function(){return Ba.createSourceEventStream}});Object.defineProperty(V,"defaultFieldResolver",{enumerable:!0,get:function(){return Ba.defaultFieldResolver}});Object.defineProperty(V,"defaultTypeResolver",{enumerable:!0,get:function(){return Ba.defaultTypeResolver}});Object.defineProperty(V,"doTypesOverlap",{enumerable:!0,get:function(){return Gt.doTypesOverlap}});Object.defineProperty(V,"execute",{enumerable:!0,get:function(){return Ba.execute}});Object.defineProperty(V,"executeSync",{enumerable:!0,get:function(){return Ba.executeSync}});Object.defineProperty(V,"extendSchema",{enumerable:!0,get:function(){return Gt.extendSchema}});Object.defineProperty(V,"findBreakingChanges",{enumerable:!0,get:function(){return Gt.findBreakingChanges}});Object.defineProperty(V,"findDangerousChanges",{enumerable:!0,get:function(){return Gt.findDangerousChanges}});Object.defineProperty(V,"formatError",{enumerable:!0,get:function(){return tp.formatError}});Object.defineProperty(V,"getArgumentValues",{enumerable:!0,get:function(){return Ba.getArgumentValues}});Object.defineProperty(V,"getDirectiveValues",{enumerable:!0,get:function(){return Ba.getDirectiveValues}});Object.defineProperty(V,"getEnterLeaveForKind",{enumerable:!0,get:function(){return Kt.getEnterLeaveForKind}});Object.defineProperty(V,"getIntrospectionQuery",{enumerable:!0,get:function(){return Gt.getIntrospectionQuery}});Object.defineProperty(V,"getLocation",{enumerable:!0,get:function(){return Kt.getLocation}});Object.defineProperty(V,"getNamedType",{enumerable:!0,get:function(){return Ie.getNamedType}});Object.defineProperty(V,"getNullableType",{enumerable:!0,get:function(){return Ie.getNullableType}});Object.defineProperty(V,"getOperationAST",{enumerable:!0,get:function(){return Gt.getOperationAST}});Object.defineProperty(V,"getOperationRootType",{enumerable:!0,get:function(){return Gt.getOperationRootType}});Object.defineProperty(V,"getVariableValues",{enumerable:!0,get:function(){return Ba.getVariableValues}});Object.defineProperty(V,"getVisitFn",{enumerable:!0,get:function(){return Kt.getVisitFn}});Object.defineProperty(V,"graphql",{enumerable:!0,get:function(){return LL.graphql}});Object.defineProperty(V,"graphqlSync",{enumerable:!0,get:function(){return LL.graphqlSync}});Object.defineProperty(V,"introspectionFromSchema",{enumerable:!0,get:function(){return Gt.introspectionFromSchema}});Object.defineProperty(V,"introspectionTypes",{enumerable:!0,get:function(){return Ie.introspectionTypes}});Object.defineProperty(V,"isAbstractType",{enumerable:!0,get:function(){return Ie.isAbstractType}});Object.defineProperty(V,"isCompositeType",{enumerable:!0,get:function(){return Ie.isCompositeType}});Object.defineProperty(V,"isConstValueNode",{enumerable:!0,get:function(){return Kt.isConstValueNode}});Object.defineProperty(V,"isDefinitionNode",{enumerable:!0,get:function(){return Kt.isDefinitionNode}});Object.defineProperty(V,"isDirective",{enumerable:!0,get:function(){return Ie.isDirective}});Object.defineProperty(V,"isEnumType",{enumerable:!0,get:function(){return Ie.isEnumType}});Object.defineProperty(V,"isEqualType",{enumerable:!0,get:function(){return Gt.isEqualType}});Object.defineProperty(V,"isExecutableDefinitionNode",{enumerable:!0,get:function(){return Kt.isExecutableDefinitionNode}});Object.defineProperty(V,"isInputObjectType",{enumerable:!0,get:function(){return Ie.isInputObjectType}});Object.defineProperty(V,"isInputType",{enumerable:!0,get:function(){return Ie.isInputType}});Object.defineProperty(V,"isInterfaceType",{enumerable:!0,get:function(){return Ie.isInterfaceType}});Object.defineProperty(V,"isIntrospectionType",{enumerable:!0,get:function(){return Ie.isIntrospectionType}});Object.defineProperty(V,"isLeafType",{enumerable:!0,get:function(){return Ie.isLeafType}});Object.defineProperty(V,"isListType",{enumerable:!0,get:function(){return Ie.isListType}});Object.defineProperty(V,"isNamedType",{enumerable:!0,get:function(){return Ie.isNamedType}});Object.defineProperty(V,"isNonNullType",{enumerable:!0,get:function(){return Ie.isNonNullType}});Object.defineProperty(V,"isNullableType",{enumerable:!0,get:function(){return Ie.isNullableType}});Object.defineProperty(V,"isObjectType",{enumerable:!0,get:function(){return Ie.isObjectType}});Object.defineProperty(V,"isOutputType",{enumerable:!0,get:function(){return Ie.isOutputType}});Object.defineProperty(V,"isRequiredArgument",{enumerable:!0,get:function(){return Ie.isRequiredArgument}});Object.defineProperty(V,"isRequiredInputField",{enumerable:!0,get:function(){return Ie.isRequiredInputField}});Object.defineProperty(V,"isScalarType",{enumerable:!0,get:function(){return Ie.isScalarType}});Object.defineProperty(V,"isSchema",{enumerable:!0,get:function(){return Ie.isSchema}});Object.defineProperty(V,"isSelectionNode",{enumerable:!0,get:function(){return Kt.isSelectionNode}});Object.defineProperty(V,"isSpecifiedDirective",{enumerable:!0,get:function(){return Ie.isSpecifiedDirective}});Object.defineProperty(V,"isSpecifiedScalarType",{enumerable:!0,get:function(){return Ie.isSpecifiedScalarType}});Object.defineProperty(V,"isType",{enumerable:!0,get:function(){return Ie.isType}});Object.defineProperty(V,"isTypeDefinitionNode",{enumerable:!0,get:function(){return Kt.isTypeDefinitionNode}});Object.defineProperty(V,"isTypeExtensionNode",{enumerable:!0,get:function(){return Kt.isTypeExtensionNode}});Object.defineProperty(V,"isTypeNode",{enumerable:!0,get:function(){return Kt.isTypeNode}});Object.defineProperty(V,"isTypeSubTypeOf",{enumerable:!0,get:function(){return Gt.isTypeSubTypeOf}});Object.defineProperty(V,"isTypeSystemDefinitionNode",{enumerable:!0,get:function(){return Kt.isTypeSystemDefinitionNode}});Object.defineProperty(V,"isTypeSystemExtensionNode",{enumerable:!0,get:function(){return Kt.isTypeSystemExtensionNode}});Object.defineProperty(V,"isUnionType",{enumerable:!0,get:function(){return Ie.isUnionType}});Object.defineProperty(V,"isValidNameError",{enumerable:!0,get:function(){return Gt.isValidNameError}});Object.defineProperty(V,"isValueNode",{enumerable:!0,get:function(){return Kt.isValueNode}});Object.defineProperty(V,"isWrappingType",{enumerable:!0,get:function(){return Ie.isWrappingType}});Object.defineProperty(V,"lexicographicSortSchema",{enumerable:!0,get:function(){return Gt.lexicographicSortSchema}});Object.defineProperty(V,"locatedError",{enumerable:!0,get:function(){return tp.locatedError}});Object.defineProperty(V,"parse",{enumerable:!0,get:function(){return Kt.parse}});Object.defineProperty(V,"parseConstValue",{enumerable:!0,get:function(){return Kt.parseConstValue}});Object.defineProperty(V,"parseType",{enumerable:!0,get:function(){return Kt.parseType}});Object.defineProperty(V,"parseValue",{enumerable:!0,get:function(){return Kt.parseValue}});Object.defineProperty(V,"print",{enumerable:!0,get:function(){return Kt.print}});Object.defineProperty(V,"printError",{enumerable:!0,get:function(){return tp.printError}});Object.defineProperty(V,"printIntrospectionSchema",{enumerable:!0,get:function(){return Gt.printIntrospectionSchema}});Object.defineProperty(V,"printLocation",{enumerable:!0,get:function(){return Kt.printLocation}});Object.defineProperty(V,"printSchema",{enumerable:!0,get:function(){return Gt.printSchema}});Object.defineProperty(V,"printSourceLocation",{enumerable:!0,get:function(){return Kt.printSourceLocation}});Object.defineProperty(V,"printType",{enumerable:!0,get:function(){return Gt.printType}});Object.defineProperty(V,"recommendedRules",{enumerable:!0,get:function(){return mt.recommendedRules}});Object.defineProperty(V,"resolveObjMapThunk",{enumerable:!0,get:function(){return Ie.resolveObjMapThunk}});Object.defineProperty(V,"resolveReadonlyArrayThunk",{enumerable:!0,get:function(){return Ie.resolveReadonlyArrayThunk}});Object.defineProperty(V,"responsePathAsArray",{enumerable:!0,get:function(){return Ba.responsePathAsArray}});Object.defineProperty(V,"separateOperations",{enumerable:!0,get:function(){return Gt.separateOperations}});Object.defineProperty(V,"specifiedDirectives",{enumerable:!0,get:function(){return Ie.specifiedDirectives}});Object.defineProperty(V,"specifiedRules",{enumerable:!0,get:function(){return mt.specifiedRules}});Object.defineProperty(V,"specifiedScalarTypes",{enumerable:!0,get:function(){return Ie.specifiedScalarTypes}});Object.defineProperty(V,"stripIgnoredCharacters",{enumerable:!0,get:function(){return Gt.stripIgnoredCharacters}});Object.defineProperty(V,"subscribe",{enumerable:!0,get:function(){return Ba.subscribe}});Object.defineProperty(V,"syntaxError",{enumerable:!0,get:function(){return tp.syntaxError}});Object.defineProperty(V,"typeFromAST",{enumerable:!0,get:function(){return Gt.typeFromAST}});Object.defineProperty(V,"validate",{enumerable:!0,get:function(){return mt.validate}});Object.defineProperty(V,"validateSchema",{enumerable:!0,get:function(){return Ie.validateSchema}});Object.defineProperty(V,"valueFromAST",{enumerable:!0,get:function(){return Gt.valueFromAST}});Object.defineProperty(V,"valueFromASTUntyped",{enumerable:!0,get:function(){return Gt.valueFromASTUntyped}});Object.defineProperty(V,"version",{enumerable:!0,get:function(){return wL.version}});Object.defineProperty(V,"versionInfo",{enumerable:!0,get:function(){return wL.versionInfo}});Object.defineProperty(V,"visit",{enumerable:!0,get:function(){return Kt.visit}});Object.defineProperty(V,"visitInParallel",{enumerable:!0,get:function(){return Kt.visitInParallel}});Object.defineProperty(V,"visitWithTypeInfo",{enumerable:!0,get:function(){return Gt.visitWithTypeInfo}});var wL=bR(),LL=gw(),Ie=Sw(),Kt=Dw(),Ba=Cw(),mt=Mw(),tp=xw(),Gt=PL()});var lr=w(P=>{"use strict";m();T();N();Object.defineProperty(P,"__esModule",{value:!0});P.FLOAT_SCALAR=P.FIRST_ORDINAL=P.FIELD_DEFINITION_UPPER=P.FIELDS=P.FIELD_SET_SCALAR=P.FIELD_UPPER=P.FIELD_PATH=P.FIELD=P.EXTENSIONS=P.EXTENDS=P.EXTERNAL=P.EXECUTION=P.ENUM_VALUE_UPPER=P.ENUM_VALUE=P.ENUM_UPPER=P.ENUM=P.ENTITY_UNION=P.ENTITIES_FIELD=P.ENTITIES=P.EDFS_REDIS_SUBSCRIBE=P.EDFS_REDIS_PUBLISH=P.EDFS_NATS_STREAM_CONFIGURATION=P.EDFS_PUBLISH_RESULT=P.EDFS_NATS_SUBSCRIBE=P.EDFS_NATS_REQUEST=P.EDFS_NATS_PUBLISH=P.EDFS_KAFKA_SUBSCRIBE=P.EDFS_KAFKA_PUBLISH=P.DIRECTIVE_DEFINITION=P.DESCRIPTION_OVERRIDE=P.DEPRECATED_DEFAULT_ARGUMENT_VALUE=P.DEPRECATED=P.DEFAULT_SUBSCRIPTION=P.DEFAULT_QUERY=P.DEFAULT_MUTATION=P.DEFAULT_EDFS_PROVIDER_ID=P.DEFAULT=P.CONSUMER_NAME=P.CONFIGURE_CHILD_DESCRIPTIONS=P.CONFIGURE_DESCRIPTION=P.CONDITION=P.COMPOSE_DIRECTIVE=P.BOOLEAN_SCALAR=P.BOOLEAN=P.ARGUMENT_DEFINITION_UPPER=P.AUTHENTICATED=P.ARGUMENT=P.ANY_SCALAR=P.AND_UPPER=P.AS=void 0;P.PARENT_DEFINITION_DATA_MAP=P.PARENT_DEFINITION_DATA=P.OVERRIDE=P.OR_UPPER=P.OBJECT_UPPER=P.OBJECT=P.OPERATION_TO_DEFAULT=P.NULL=P.NOT_UPPER=P.NON_NULLABLE_STRING=P.NON_NULLABLE_INT=P.NON_NULLABLE_BOOLEAN=P.NON_NULLABLE_EDFS_PUBLISH_EVENT_RESULT=P.NAME=P.NOT_APPLICABLE=P.PROVIDER_TYPE_REDIS=P.PROVIDER_TYPE_NATS=P.PROVIDER_TYPE_KAFKA=P.PROPAGATE=P.MUTATION_UPPER=P.MUTATION=P.NUMBER=P.LITERAL_NEW_LINE=P.LITERAL_SPACE=P.LIST=P.LINK_PURPOSE=P.LINK_IMPORT=P.LINK=P.LEFT_PARENTHESIS=P.KEY=P.INTERFACE_OBJECT=P.INTERFACE_UPPER=P.INTERFACE=P.INT_SCALAR=P.INPUT_VALUE=P.INPUT_OBJECT_UPPER=P.INPUT_OBJECT=P.INPUT_FIELD_DEFINITION_UPPER=P.INPUT_FIELD=P.INLINE_FRAGMENT_UPPER=P.INLINE_FRAGMENT=P.INACCESSIBLE=P.IN_UPPER=P.IMPORT=P.ID_SCALAR=P.HYPHEN_JOIN=P.FROM=P.FRAGMENT_SPREAD_UPPER=P.FRAGMENT_DEFINITION_UPPER=P.FOR=void 0;P.CHANNELS=P.CHANNEL=P.VARIABLE_DEFINITION_UPPER=P.VALUES=P.URL_LOWER=P.UNION_UPPER=P.UNION=P.TOPICS=P.TOPIC=P.TAG=P.SUCCESS=P.SUBSCRIPTION_UPPER=P.SUBSCRIBE=P.SUBSCRIPTION_FILTER_VALUE=P.SUBSCRIPTION_FILTER_CONDITION=P.SUBSCRIPTION_FILTER=P.SUBSCRIPTION_FIELD_CONDITION=P.SUBSCRIPTION=P.SUBJECTS=P.SUBJECT=P.STRING_SCALAR=P.STRING=P.STREAM_NAME=P.CONSUMER_INACTIVE_THRESHOLD=P.STREAM_CONFIGURATION=P.SPECIFIED_BY=P.SHAREABLE=P.SERVICE_FIELD=P.SERVICE_OBJECT=P.SELECTION_REPRESENTATION=P.SECURITY=P.SCOPE_SCALAR=P.SCOPES=P.SCHEMA_UPPER=P.SCHEMA=P.SCALAR_UPPER=P.SCALAR=P.RESOLVABLE=P.REQUIRES_SCOPES=P.REQUIRES=P.REQUEST=P.REASON=P.QUOTATION_JOIN=P.QUERY_UPPER=P.QUERY=P.PUBLISH=P.PROVIDES=P.PROVIDER_ID=P.PERIOD=P.PARENT_EXTENSION_DATA_MAP=void 0;P.IGNORED_FIELDS=P.INHERITABLE_DIRECTIVE_NAMES=P.PERSISTED_CLIENT_DIRECTIVES=P.AUTHORIZATION_DIRECTIVES=P.ROOT_TYPE_NAMES=P.EXECUTABLE_DIRECTIVE_LOCATIONS=void 0;P.AS="as";P.AND_UPPER="AND";P.ANY_SCALAR="_Any";P.ARGUMENT="argument";P.AUTHENTICATED="authenticated";P.ARGUMENT_DEFINITION_UPPER="ARGUMENT_DEFINITION";P.BOOLEAN="boolean";P.BOOLEAN_SCALAR="Boolean";P.COMPOSE_DIRECTIVE="composeDirective";P.CONDITION="condition";P.CONFIGURE_DESCRIPTION="openfed__configureDescription";P.CONFIGURE_CHILD_DESCRIPTIONS="openfed__configureChildDescriptions";P.CONSUMER_NAME="consumerName";P.DEFAULT="default";P.DEFAULT_EDFS_PROVIDER_ID="default";P.DEFAULT_MUTATION="Mutation";P.DEFAULT_QUERY="Query";P.DEFAULT_SUBSCRIPTION="Subscription";P.DEPRECATED="deprecated";P.DEPRECATED_DEFAULT_ARGUMENT_VALUE="No longer supported";P.DESCRIPTION_OVERRIDE="descriptionOverride";P.DIRECTIVE_DEFINITION="directive definition";P.EDFS_KAFKA_PUBLISH="edfs__kafkaPublish";P.EDFS_KAFKA_SUBSCRIBE="edfs__kafkaSubscribe";P.EDFS_NATS_PUBLISH="edfs__natsPublish";P.EDFS_NATS_REQUEST="edfs__natsRequest";P.EDFS_NATS_SUBSCRIBE="edfs__natsSubscribe";P.EDFS_PUBLISH_RESULT="edfs__PublishResult";P.EDFS_NATS_STREAM_CONFIGURATION="edfs__NatsStreamConfiguration";P.EDFS_REDIS_PUBLISH="edfs__redisPublish";P.EDFS_REDIS_SUBSCRIBE="edfs__redisSubscribe";P.ENTITIES="entities";P.ENTITIES_FIELD="_entities";P.ENTITY_UNION="_Entity";P.ENUM="Enum";P.ENUM_UPPER="ENUM";P.ENUM_VALUE="Enum Value";P.ENUM_VALUE_UPPER="ENUM_VALUE";P.EXECUTION="EXECUTION";P.EXTERNAL="external";P.EXTENDS="extends";P.EXTENSIONS="extensions";P.FIELD="Field";P.FIELD_PATH="fieldPath";P.FIELD_UPPER="FIELD";P.FIELD_SET_SCALAR="openfed__FieldSet";P.FIELDS="fields";P.FIELD_DEFINITION_UPPER="FIELD_DEFINITION";P.FIRST_ORDINAL="1st";P.FLOAT_SCALAR="Float";P.FOR="for";P.FRAGMENT_DEFINITION_UPPER="FRAGMENT_DEFINITION";P.FRAGMENT_SPREAD_UPPER="FRAGMENT_SPREAD";P.FROM="from";P.HYPHEN_JOIN=` -`;P.ID_SCALAR="ID";P.IMPORT="import";P.IN_UPPER="IN";P.INACCESSIBLE="inaccessible";P.INLINE_FRAGMENT="inlineFragment";P.INLINE_FRAGMENT_UPPER="INLINE_FRAGMENT";P.INPUT_FIELD="Input field";P.INPUT_FIELD_DEFINITION_UPPER="INPUT_FIELD_DEFINITION";P.INPUT_OBJECT="Input Object";P.INPUT_OBJECT_UPPER="INPUT_OBJECT";P.INPUT_VALUE="Input Value";P.INT_SCALAR="Int";P.INTERFACE="Interface";P.INTERFACE_UPPER="INTERFACE";P.INTERFACE_OBJECT="interfaceObject";P.KEY="key";P.LEFT_PARENTHESIS="(";P.LINK="link";P.LINK_IMPORT="link__Import";P.LINK_PURPOSE="link__Purpose";P.LIST="list";P.LITERAL_SPACE=" ";P.LITERAL_NEW_LINE=` -`;P.NUMBER="number";P.MUTATION="Mutation";P.MUTATION_UPPER="MUTATION";P.PROPAGATE="propagate";P.PROVIDER_TYPE_KAFKA="kafka";P.PROVIDER_TYPE_NATS="nats";P.PROVIDER_TYPE_REDIS="redis";P.NOT_APPLICABLE="N/A";P.NAME="name";P.NON_NULLABLE_EDFS_PUBLISH_EVENT_RESULT="edfs__PublishResult!";P.NON_NULLABLE_BOOLEAN="Boolean!";P.NON_NULLABLE_INT="Int!";P.NON_NULLABLE_STRING="String!";P.NOT_UPPER="NOT";P.NULL="Null";P.OPERATION_TO_DEFAULT="operationTypeNodeToDefaultType";P.OBJECT="Object";P.OBJECT_UPPER="OBJECT";P.OR_UPPER="OR";P.OVERRIDE="override";P.PARENT_DEFINITION_DATA="parentDefinitionDataByTypeName";P.PARENT_DEFINITION_DATA_MAP="parentDefinitionDataByParentTypeName";P.PARENT_EXTENSION_DATA_MAP="parentExtensionDataByParentTypeName";P.PERIOD=".";P.PROVIDER_ID="providerId";P.PROVIDES="provides";P.PUBLISH="publish";P.QUERY="Query";P.QUERY_UPPER="QUERY";P.QUOTATION_JOIN='", "';P.REASON="reason";P.REQUEST="request";P.REQUIRES="requires";P.REQUIRES_SCOPES="requiresScopes";P.RESOLVABLE="resolvable";P.SCALAR="Scalar";P.SCALAR_UPPER="SCALAR";P.SCHEMA="schema";P.SCHEMA_UPPER="SCHEMA";P.SCOPES="scopes";P.SCOPE_SCALAR="openfed__Scope";P.SECURITY="SECURITY";P.SELECTION_REPRESENTATION=" { ... }";P.SERVICE_OBJECT="_Service";P.SERVICE_FIELD="_service";P.SHAREABLE="shareable";P.SPECIFIED_BY="specifiedBy";P.STREAM_CONFIGURATION="streamConfiguration";P.CONSUMER_INACTIVE_THRESHOLD="consumerInactiveThreshold";P.STREAM_NAME="streamName";P.STRING="string";P.STRING_SCALAR="String";P.SUBJECT="subject";P.SUBJECTS="subjects";P.SUBSCRIPTION="Subscription";P.SUBSCRIPTION_FIELD_CONDITION="openfed__SubscriptionFieldCondition";P.SUBSCRIPTION_FILTER="openfed__subscriptionFilter";P.SUBSCRIPTION_FILTER_CONDITION="openfed__SubscriptionFilterCondition";P.SUBSCRIPTION_FILTER_VALUE="openfed__SubscriptionFilterValue";P.SUBSCRIBE="subscribe";P.SUBSCRIPTION_UPPER="SUBSCRIPTION";P.SUCCESS="success";P.TAG="tag";P.TOPIC="topic";P.TOPICS="topics";P.UNION="Union";P.UNION_UPPER="UNION";P.URL_LOWER="url";P.VALUES="values";P.VARIABLE_DEFINITION_UPPER="VARIABLE_DEFINITION";P.CHANNEL="channel";P.CHANNELS="channels";P.EXECUTABLE_DIRECTIVE_LOCATIONS=new Set([P.FIELD_UPPER,P.FRAGMENT_DEFINITION_UPPER,P.FRAGMENT_SPREAD_UPPER,P.INLINE_FRAGMENT_UPPER,P.MUTATION_UPPER,P.QUERY_UPPER,P.SUBSCRIPTION_UPPER]);P.ROOT_TYPE_NAMES=new Set([P.MUTATION,P.QUERY,P.SUBSCRIPTION]);P.AUTHORIZATION_DIRECTIVES=new Set([P.AUTHENTICATED,P.REQUIRES_SCOPES]);P.PERSISTED_CLIENT_DIRECTIVES=new Set([P.DEPRECATED]);P.INHERITABLE_DIRECTIVE_NAMES=[P.EXTERNAL,P.SHAREABLE];P.IGNORED_FIELDS=new Set([P.ENTITIES_FIELD,P.SERVICE_FIELD])});var Jr=w(Qn=>{"use strict";f();N();m();Object.defineProperty(Qn,"__esModule",{value:!0});Qn.operationTypeNodeToDefaultType=void 0;Qn.isObjectLikeNodeEntity=_X;Qn.isNodeInterfaceObject=vX;Qn.stringToNameNode=fN;Qn.stringArrayToNameNodeArray=SX;Qn.setToNameNodeArray=OX;Qn.stringToNamedTypeNode=LL;Qn.setToNamedTypeNodeArray=DX;Qn.nodeKindToDirectiveLocation=bX;Qn.isKindAbstract=AX;Qn.extractExecutableDirectiveLocations=RX;Qn.formatDescription=FX;Qn.lexicographicallySortArgumentNodes=CL;Qn.lexicographicallySortSelectionSetNode=pN;Qn.lexicographicallySortDocumentNode=PX;Qn.parse=BL;Qn.safeParse=wX;var Ut=Ae(),Sn=lr();function _X(e){var t;if(!((t=e.directives)!=null&&t.length))return!1;for(let n of e.directives)if(n.name.value===Sn.KEY)return!0;return!1}function vX(e){var t;if(!((t=e.directives)!=null&&t.length))return!1;for(let n of e.directives)if(n.name.value===Sn.INTERFACE_OBJECT)return!0;return!1}function fN(e){return{kind:Ut.Kind.NAME,value:e}}function SX(e){let t=[];for(let n of e)t.push(fN(n));return t}function OX(e){let t=[];for(let n of e)t.push(fN(n));return t}function LL(e){return{kind:Ut.Kind.NAMED_TYPE,name:fN(e)}}function DX(e){let t=[];for(let n of e)t.push(LL(n));return t}function bX(e){switch(e){case Ut.Kind.ARGUMENT:return Sn.ARGUMENT_DEFINITION_UPPER;case Ut.Kind.ENUM_TYPE_DEFINITION:case Ut.Kind.ENUM_TYPE_EXTENSION:return Sn.ENUM_UPPER;case Ut.Kind.ENUM_VALUE_DEFINITION:return Sn.ENUM_VALUE_UPPER;case Ut.Kind.FIELD_DEFINITION:return Sn.FIELD_DEFINITION_UPPER;case Ut.Kind.FRAGMENT_DEFINITION:return Sn.FRAGMENT_DEFINITION_UPPER;case Ut.Kind.FRAGMENT_SPREAD:return Sn.FRAGMENT_SPREAD_UPPER;case Ut.Kind.INLINE_FRAGMENT:return Sn.INLINE_FRAGMENT_UPPER;case Ut.Kind.INPUT_VALUE_DEFINITION:return Sn.INPUT_FIELD_DEFINITION_UPPER;case Ut.Kind.INPUT_OBJECT_TYPE_DEFINITION:case Ut.Kind.INPUT_OBJECT_TYPE_EXTENSION:return Sn.INPUT_OBJECT_UPPER;case Ut.Kind.INTERFACE_TYPE_DEFINITION:case Ut.Kind.INTERFACE_TYPE_EXTENSION:return Sn.INTERFACE_UPPER;case Ut.Kind.OBJECT_TYPE_DEFINITION:case Ut.Kind.OBJECT_TYPE_EXTENSION:return Sn.OBJECT_UPPER;case Ut.Kind.SCALAR_TYPE_DEFINITION:case Ut.Kind.SCALAR_TYPE_EXTENSION:return Sn.SCALAR_UPPER;case Ut.Kind.SCHEMA_DEFINITION:case Ut.Kind.SCHEMA_EXTENSION:return Sn.SCHEMA_UPPER;case Ut.Kind.UNION_TYPE_DEFINITION:case Ut.Kind.UNION_TYPE_EXTENSION:return Sn.UNION_UPPER;default:return e}}Qn.operationTypeNodeToDefaultType=new Map([[Ut.OperationTypeNode.MUTATION,Sn.MUTATION],[Ut.OperationTypeNode.QUERY,Sn.QUERY],[Ut.OperationTypeNode.SUBSCRIPTION,Sn.SUBSCRIPTION]]);function AX(e){return e===Ut.Kind.INTERFACE_TYPE_DEFINITION||e===Ut.Kind.UNION_TYPE_DEFINITION}function RX(e,t){for(let n of e){let r=n.value;Sn.EXECUTABLE_DIRECTIVE_LOCATIONS.has(r)&&t.add(r)}return t}function FX(e){if(!e)return e;let t=e.value;if(e.block){let n=t.split(` +`;P.NUMBER="number";P.MUTATION="Mutation";P.MUTATION_UPPER="MUTATION";P.PROPAGATE="propagate";P.PROVIDER_TYPE_KAFKA="kafka";P.PROVIDER_TYPE_NATS="nats";P.PROVIDER_TYPE_REDIS="redis";P.NOT_APPLICABLE="N/A";P.NAME="name";P.NON_NULLABLE_EDFS_PUBLISH_EVENT_RESULT="edfs__PublishResult!";P.NON_NULLABLE_BOOLEAN="Boolean!";P.NON_NULLABLE_INT="Int!";P.NON_NULLABLE_STRING="String!";P.NOT_UPPER="NOT";P.NULL="Null";P.OPERATION_TO_DEFAULT="operationTypeNodeToDefaultType";P.OBJECT="Object";P.OBJECT_UPPER="OBJECT";P.OR_UPPER="OR";P.OVERRIDE="override";P.PARENT_DEFINITION_DATA="parentDefinitionDataByTypeName";P.PARENT_DEFINITION_DATA_MAP="parentDefinitionDataByParentTypeName";P.PARENT_EXTENSION_DATA_MAP="parentExtensionDataByParentTypeName";P.PERIOD=".";P.PROVIDER_ID="providerId";P.PROVIDES="provides";P.PUBLISH="publish";P.QUERY="Query";P.QUERY_UPPER="QUERY";P.QUOTATION_JOIN='", "';P.REASON="reason";P.REQUEST="request";P.REQUIRES="requires";P.REQUIRES_SCOPES="requiresScopes";P.RESOLVABLE="resolvable";P.SCALAR="Scalar";P.SCALAR_UPPER="SCALAR";P.SCHEMA="schema";P.SCHEMA_UPPER="SCHEMA";P.SCOPES="scopes";P.SCOPE_SCALAR="openfed__Scope";P.SECURITY="SECURITY";P.SELECTION_REPRESENTATION=" { ... }";P.SERVICE_OBJECT="_Service";P.SERVICE_FIELD="_service";P.SHAREABLE="shareable";P.SPECIFIED_BY="specifiedBy";P.STREAM_CONFIGURATION="streamConfiguration";P.CONSUMER_INACTIVE_THRESHOLD="consumerInactiveThreshold";P.STREAM_NAME="streamName";P.STRING="string";P.STRING_SCALAR="String";P.SUBJECT="subject";P.SUBJECTS="subjects";P.SUBSCRIPTION="Subscription";P.SUBSCRIPTION_FIELD_CONDITION="openfed__SubscriptionFieldCondition";P.SUBSCRIPTION_FILTER="openfed__subscriptionFilter";P.SUBSCRIPTION_FILTER_CONDITION="openfed__SubscriptionFilterCondition";P.SUBSCRIPTION_FILTER_VALUE="openfed__SubscriptionFilterValue";P.SUBSCRIBE="subscribe";P.SUBSCRIPTION_UPPER="SUBSCRIPTION";P.SUCCESS="success";P.TAG="tag";P.TOPIC="topic";P.TOPICS="topics";P.UNION="Union";P.UNION_UPPER="UNION";P.URL_LOWER="url";P.VALUES="values";P.VARIABLE_DEFINITION_UPPER="VARIABLE_DEFINITION";P.CHANNEL="channel";P.CHANNELS="channels";P.EXECUTABLE_DIRECTIVE_LOCATIONS=new Set([P.FIELD_UPPER,P.FRAGMENT_DEFINITION_UPPER,P.FRAGMENT_SPREAD_UPPER,P.INLINE_FRAGMENT_UPPER,P.MUTATION_UPPER,P.QUERY_UPPER,P.SUBSCRIPTION_UPPER]);P.ROOT_TYPE_NAMES=new Set([P.MUTATION,P.QUERY,P.SUBSCRIPTION]);P.AUTHORIZATION_DIRECTIVES=new Set([P.AUTHENTICATED,P.REQUIRES_SCOPES]);P.PERSISTED_CLIENT_DIRECTIVES=new Set([P.DEPRECATED]);P.INHERITABLE_DIRECTIVE_NAMES=[P.EXTERNAL,P.SHAREABLE];P.IGNORED_FIELDS=new Set([P.ENTITIES_FIELD,P.SERVICE_FIELD])});var Jr=w(Qn=>{"use strict";m();T();N();Object.defineProperty(Qn,"__esModule",{value:!0});Qn.operationTypeNodeToDefaultType=void 0;Qn.isObjectLikeNodeEntity=_X;Qn.isNodeInterfaceObject=vX;Qn.stringToNameNode=NN;Qn.stringArrayToNameNodeArray=SX;Qn.setToNameNodeArray=OX;Qn.stringToNamedTypeNode=CL;Qn.setToNamedTypeNodeArray=DX;Qn.nodeKindToDirectiveLocation=bX;Qn.isKindAbstract=AX;Qn.extractExecutableDirectiveLocations=RX;Qn.formatDescription=FX;Qn.lexicographicallySortArgumentNodes=BL;Qn.lexicographicallySortSelectionSetNode=mN;Qn.lexicographicallySortDocumentNode=PX;Qn.parse=UL;Qn.safeParse=wX;var Ut=Ae(),Sn=lr();function _X(e){var t;if(!((t=e.directives)!=null&&t.length))return!1;for(let n of e.directives)if(n.name.value===Sn.KEY)return!0;return!1}function vX(e){var t;if(!((t=e.directives)!=null&&t.length))return!1;for(let n of e.directives)if(n.name.value===Sn.INTERFACE_OBJECT)return!0;return!1}function NN(e){return{kind:Ut.Kind.NAME,value:e}}function SX(e){let t=[];for(let n of e)t.push(NN(n));return t}function OX(e){let t=[];for(let n of e)t.push(NN(n));return t}function CL(e){return{kind:Ut.Kind.NAMED_TYPE,name:NN(e)}}function DX(e){let t=[];for(let n of e)t.push(CL(n));return t}function bX(e){switch(e){case Ut.Kind.ARGUMENT:return Sn.ARGUMENT_DEFINITION_UPPER;case Ut.Kind.ENUM_TYPE_DEFINITION:case Ut.Kind.ENUM_TYPE_EXTENSION:return Sn.ENUM_UPPER;case Ut.Kind.ENUM_VALUE_DEFINITION:return Sn.ENUM_VALUE_UPPER;case Ut.Kind.FIELD_DEFINITION:return Sn.FIELD_DEFINITION_UPPER;case Ut.Kind.FRAGMENT_DEFINITION:return Sn.FRAGMENT_DEFINITION_UPPER;case Ut.Kind.FRAGMENT_SPREAD:return Sn.FRAGMENT_SPREAD_UPPER;case Ut.Kind.INLINE_FRAGMENT:return Sn.INLINE_FRAGMENT_UPPER;case Ut.Kind.INPUT_VALUE_DEFINITION:return Sn.INPUT_FIELD_DEFINITION_UPPER;case Ut.Kind.INPUT_OBJECT_TYPE_DEFINITION:case Ut.Kind.INPUT_OBJECT_TYPE_EXTENSION:return Sn.INPUT_OBJECT_UPPER;case Ut.Kind.INTERFACE_TYPE_DEFINITION:case Ut.Kind.INTERFACE_TYPE_EXTENSION:return Sn.INTERFACE_UPPER;case Ut.Kind.OBJECT_TYPE_DEFINITION:case Ut.Kind.OBJECT_TYPE_EXTENSION:return Sn.OBJECT_UPPER;case Ut.Kind.SCALAR_TYPE_DEFINITION:case Ut.Kind.SCALAR_TYPE_EXTENSION:return Sn.SCALAR_UPPER;case Ut.Kind.SCHEMA_DEFINITION:case Ut.Kind.SCHEMA_EXTENSION:return Sn.SCHEMA_UPPER;case Ut.Kind.UNION_TYPE_DEFINITION:case Ut.Kind.UNION_TYPE_EXTENSION:return Sn.UNION_UPPER;default:return e}}Qn.operationTypeNodeToDefaultType=new Map([[Ut.OperationTypeNode.MUTATION,Sn.MUTATION],[Ut.OperationTypeNode.QUERY,Sn.QUERY],[Ut.OperationTypeNode.SUBSCRIPTION,Sn.SUBSCRIPTION]]);function AX(e){return e===Ut.Kind.INTERFACE_TYPE_DEFINITION||e===Ut.Kind.UNION_TYPE_DEFINITION}function RX(e,t){for(let n of e){let r=n.value;Sn.EXECUTABLE_DIRECTIVE_LOCATIONS.has(r)&&t.add(r)}return t}function FX(e){if(!e)return e;let t=e.value;if(e.block){let n=t.split(` `);n.length>1&&(t=n.map(r=>r.trimStart()).join(` -`))}return Q(M({},e),{value:t,block:!0})}function CL(e){return e.arguments?e.arguments.sort((n,r)=>n.name.value.localeCompare(r.name.value)):e.arguments}function pN(e){let t=e.selections;return Q(M({},e),{selections:t.sort((n,r)=>{var a,o,c,l;return Sn.NAME in n?Sn.NAME in r?n.name.value.localeCompare(r.name.value):-1:Sn.NAME in r?1:((o=(a=n.typeCondition)==null?void 0:a.name.value)!=null?o:"").localeCompare((l=(c=r.typeCondition)==null?void 0:c.name.value)!=null?l:"")}).map(n=>{switch(n.kind){case Ut.Kind.FIELD:return Q(M({},n),{arguments:CL(n),selectionSet:n.selectionSet?pN(n.selectionSet):n.selectionSet});case Ut.Kind.FRAGMENT_SPREAD:return n;case Ut.Kind.INLINE_FRAGMENT:return Q(M({},n),{selectionSet:pN(n.selectionSet)})}})})}function PX(e){return Q(M({},e),{definitions:e.definitions.map(t=>t.kind!==Ut.Kind.OPERATION_DEFINITION?t:Q(M({},t),{selectionSet:pN(t.selectionSet)}))})}function BL(e,t=!0){return(0,Ut.parse)(e,{noLocation:t})}function wX(e,t=!0){try{return{documentNode:BL(e,t)}}catch(n){return{error:n}}}});var ML=w(tl=>{"use strict";f();N();m();Object.defineProperty(tl,"__esModule",{value:!0});tl.AccumulatorMap=void 0;tl.mapValue=el;tl.extendSchemaImpl=LX;var Be=Ae(),Es=class extends Map{get[Symbol.toStringTag](){return"AccumulatorMap"}add(t,n){let r=this.get(t);r===void 0?this.set(t,[n]):r.push(n)}};tl.AccumulatorMap=Es;function el(e,t){let n=Object.create(null);for(let r of Object.keys(e))n[r]=t(e[r],r);return n}function LX(e,t,n){var De,_e,Le,_t;let r=[],i=new Es,a=new Es,o=new Es,c=new Es,l=new Es,p=new Es,T=[],y,g=[],_=!1;for(let Y of t.definitions){switch(Y.kind){case Be.Kind.SCHEMA_DEFINITION:y=Y;break;case Be.Kind.SCHEMA_EXTENSION:g.push(Y);break;case Be.Kind.DIRECTIVE_DEFINITION:T.push(Y);break;case Be.Kind.SCALAR_TYPE_DEFINITION:case Be.Kind.OBJECT_TYPE_DEFINITION:case Be.Kind.INTERFACE_TYPE_DEFINITION:case Be.Kind.UNION_TYPE_DEFINITION:case Be.Kind.ENUM_TYPE_DEFINITION:case Be.Kind.INPUT_OBJECT_TYPE_DEFINITION:r.push(Y);break;case Be.Kind.SCALAR_TYPE_EXTENSION:i.add(Y.name.value,Y);break;case Be.Kind.OBJECT_TYPE_EXTENSION:a.add(Y.name.value,Y);break;case Be.Kind.INTERFACE_TYPE_EXTENSION:o.add(Y.name.value,Y);break;case Be.Kind.UNION_TYPE_EXTENSION:c.add(Y.name.value,Y);break;case Be.Kind.ENUM_TYPE_EXTENSION:l.add(Y.name.value,Y);break;case Be.Kind.INPUT_OBJECT_TYPE_EXTENSION:p.add(Y.name.value,Y);break;default:continue}_=!0}if(!_)return e;let F=new Map;for(let Y of e.types){let ae=W(Y);ae&&F.set(Y.name,ae)}for(let Y of r){let ae=Y.name.value;F.set(ae,(De=UL.get(ae))!=null?De:se(Y))}for(let[Y,ae]of a)F.set(Y,new Be.GraphQLObjectType({name:Y,interfaces:()=>$t(ae),fields:()=>dn(ae),extensionASTNodes:ae}));if(n!=null&&n.addInvalidExtensionOrphans){for(let[Y,ae]of o)F.set(Y,new Be.GraphQLInterfaceType({name:Y,interfaces:()=>$t(ae),fields:()=>dn(ae),extensionASTNodes:ae}));for(let[Y,ae]of l)F.set(Y,new Be.GraphQLEnumType({name:Y,values:kn(ae),extensionASTNodes:ae}));for(let[Y,ae]of c)F.set(Y,new Be.GraphQLUnionType({name:Y,types:()=>An(ae),extensionASTNodes:ae}));for(let[Y,ae]of i)F.set(Y,new Be.GraphQLScalarType({name:Y,extensionASTNodes:ae}));for(let[Y,ae]of p)F.set(Y,new Be.GraphQLInputObjectType({name:Y,fields:()=>Fr(ae),extensionASTNodes:ae}))}let U=M(M({query:e.query&&J(e.query),mutation:e.mutation&&J(e.mutation),subscription:e.subscription&&J(e.subscription)},y&&Ht([y])),Ht(g));return Q(M({description:(Le=(_e=y==null?void 0:y.description)==null?void 0:_e.value)!=null?Le:e.description},U),{types:Array.from(F.values()),directives:[...e.directives.map(ee),...T.map(Vt)],extensions:e.extensions,astNode:y!=null?y:e.astNode,extensionASTNodes:e.extensionASTNodes.concat(g),assumeValid:(_t=n==null?void 0:n.assumeValid)!=null?_t:!1});function K(Y){return(0,Be.isListType)(Y)?new Be.GraphQLList(K(Y.ofType)):(0,Be.isNonNullType)(Y)?new Be.GraphQLNonNull(K(Y.ofType)):J(Y)}function J(Y){return F.get(Y.name)}function ee(Y){if((0,Be.isSpecifiedDirective)(Y))return Y;let ae=Y.toConfig();return new Be.GraphQLDirective(Q(M({},ae),{args:el(ae.args,gt)}))}function W(Y){if((0,Be.isIntrospectionType)(Y)||(0,Be.isSpecifiedScalarType)(Y))return Y;if((0,Be.isScalarType)(Y))return we(Y);if((0,Be.isObjectType)(Y))return qe(Y);if((0,Be.isInterfaceType)(Y))return et(Y);if((0,Be.isUnionType)(Y))return X(Y);if((0,Be.isEnumType)(Y))return de(Y);if((0,Be.isInputObjectType)(Y))return Te(Y)}function Te(Y){var Qe;let ae=Y.toConfig(),Me=(Qe=p.get(ae.name))!=null?Qe:[];return new Be.GraphQLInputObjectType(Q(M({},ae),{fields:()=>M(M({},el(ae.fields,Lt=>Q(M({},Lt),{type:K(Lt.type)}))),Fr(Me)),extensionASTNodes:ae.extensionASTNodes.concat(Me)}))}function de(Y){var Qe;let ae=Y.toConfig(),Me=(Qe=l.get(Y.name))!=null?Qe:[];return new Be.GraphQLEnumType(Q(M({},ae),{values:M(M({},ae.values),kn(Me)),extensionASTNodes:ae.extensionASTNodes.concat(Me)}))}function we(Y){var Lt,tt;let ae=Y.toConfig(),Me=(Lt=i.get(ae.name))!=null?Lt:[],Qe=ae.specifiedByURL;for(let bt of Me)Qe=(tt=kL(bt))!=null?tt:Qe;return new Be.GraphQLScalarType(Q(M({},ae),{specifiedByURL:Qe,extensionASTNodes:ae.extensionASTNodes.concat(Me)}))}function qe(Y){var Qe;let ae=Y.toConfig(),Me=(Qe=a.get(ae.name))!=null?Qe:[];return new Be.GraphQLObjectType(Q(M({},ae),{interfaces:()=>[...Y.getInterfaces().map(J),...$t(Me)],fields:()=>M(M({},el(ae.fields,ve)),dn(Me)),extensionASTNodes:ae.extensionASTNodes.concat(Me)}))}function et(Y){var Qe;let ae=Y.toConfig(),Me=(Qe=o.get(ae.name))!=null?Qe:[];return new Be.GraphQLInterfaceType(Q(M({},ae),{interfaces:()=>[...Y.getInterfaces().map(J),...$t(Me)],fields:()=>M(M({},el(ae.fields,ve)),dn(Me)),extensionASTNodes:ae.extensionASTNodes.concat(Me)}))}function X(Y){var Qe;let ae=Y.toConfig(),Me=(Qe=c.get(ae.name))!=null?Qe:[];return new Be.GraphQLUnionType(Q(M({},ae),{types:()=>[...Y.getTypes().map(J),...An(Me)],extensionASTNodes:ae.extensionASTNodes.concat(Me)}))}function ve(Y){return Q(M({},Y),{type:K(Y.type),args:Y.args&&el(Y.args,gt)})}function gt(Y){return Q(M({},Y),{type:K(Y.type)})}function Ht(Y){var Me;let ae={};for(let Qe of Y){let Lt=(Me=Qe.operationTypes)!=null?Me:[];for(let tt of Lt)ae[tt.operation]=zt(tt.type)}return ae}function zt(Y){var Qe;let ae=Y.name.value,Me=(Qe=UL.get(ae))!=null?Qe:F.get(ae);if(Me===void 0)throw new Error(`Unknown type: "${ae}".`);return Me}function bn(Y){return Y.kind===Be.Kind.LIST_TYPE?new Be.GraphQLList(bn(Y.type)):Y.kind===Be.Kind.NON_NULL_TYPE?new Be.GraphQLNonNull(bn(Y.type)):zt(Y)}function Vt(Y){var ae;return new Be.GraphQLDirective({name:Y.name.value,description:(ae=Y.description)==null?void 0:ae.value,locations:Y.locations.map(({value:Me})=>Me),isRepeatable:Y.repeatable,args:Rr(Y.arguments),astNode:Y})}function dn(Y){var Me,Qe;let ae=Object.create(null);for(let Lt of Y){let tt=(Me=Lt.fields)!=null?Me:[];for(let bt of tt)ae[bt.name.value]={type:bn(bt.type),description:(Qe=bt.description)==null?void 0:Qe.value,args:Rr(bt.arguments),deprecationReason:mN(bt),astNode:bt}}return ae}function Rr(Y){var Qe;let ae=Y!=null?Y:[],Me=Object.create(null);for(let Lt of ae){let tt=bn(Lt.type);Me[Lt.name.value]={type:tt,description:(Qe=Lt.description)==null?void 0:Qe.value,defaultValue:(0,Be.valueFromAST)(Lt.defaultValue,tt),deprecationReason:mN(Lt),astNode:Lt}}return Me}function Fr(Y){var Me,Qe;let ae=Object.create(null);for(let Lt of Y){let tt=(Me=Lt.fields)!=null?Me:[];for(let bt of tt){let za=bn(bt.type);ae[bt.name.value]={type:za,description:(Qe=bt.description)==null?void 0:Qe.value,defaultValue:(0,Be.valueFromAST)(bt.defaultValue,za),deprecationReason:mN(bt),astNode:bt}}}return ae}function kn(Y){var Me,Qe;let ae=Object.create(null);for(let Lt of Y){let tt=(Me=Lt.values)!=null?Me:[];for(let bt of tt)ae[bt.name.value]={description:(Qe=bt.description)==null?void 0:Qe.value,deprecationReason:mN(bt),astNode:bt}}return ae}function $t(Y){return Y.flatMap(ae=>{var Me,Qe;return(Qe=(Me=ae.interfaces)==null?void 0:Me.map(zt))!=null?Qe:[]})}function An(Y){return Y.flatMap(ae=>{var Me,Qe;return(Qe=(Me=ae.types)==null?void 0:Me.map(zt))!=null?Qe:[]})}function se(Y){var Me,Qe,Lt,tt,bt,za,qr,Wa,Ic,ya,mr,ri;let ae=Y.name.value;switch(Y.kind){case Be.Kind.OBJECT_TYPE_DEFINITION:{let Mt=(Me=a.get(ae))!=null?Me:[],Nr=[Y,...Mt];return a.delete(ae),new Be.GraphQLObjectType({name:ae,description:(Qe=Y.description)==null?void 0:Qe.value,interfaces:()=>$t(Nr),fields:()=>dn(Nr),astNode:Y,extensionASTNodes:Mt})}case Be.Kind.INTERFACE_TYPE_DEFINITION:{let Mt=(Lt=o.get(ae))!=null?Lt:[],Nr=[Y,...Mt];return o.delete(ae),new Be.GraphQLInterfaceType({name:ae,description:(tt=Y.description)==null?void 0:tt.value,interfaces:()=>$t(Nr),fields:()=>dn(Nr),astNode:Y,extensionASTNodes:Mt})}case Be.Kind.ENUM_TYPE_DEFINITION:{let Mt=(bt=l.get(ae))!=null?bt:[],Nr=[Y,...Mt];return l.delete(ae),new Be.GraphQLEnumType({name:ae,description:(za=Y.description)==null?void 0:za.value,values:kn(Nr),astNode:Y,extensionASTNodes:Mt})}case Be.Kind.UNION_TYPE_DEFINITION:{let Mt=(qr=c.get(ae))!=null?qr:[],Nr=[Y,...Mt];return c.delete(ae),new Be.GraphQLUnionType({name:ae,description:(Wa=Y.description)==null?void 0:Wa.value,types:()=>An(Nr),astNode:Y,extensionASTNodes:Mt})}case Be.Kind.SCALAR_TYPE_DEFINITION:{let Mt=(Ic=i.get(ae))!=null?Ic:[];return i.delete(ae),new Be.GraphQLScalarType({name:ae,description:(ya=Y.description)==null?void 0:ya.value,specifiedByURL:kL(Y),astNode:Y,extensionASTNodes:Mt})}case Be.Kind.INPUT_OBJECT_TYPE_DEFINITION:{let Mt=(mr=p.get(ae))!=null?mr:[],Nr=[Y,...Mt];return p.delete(ae),new Be.GraphQLInputObjectType({name:ae,description:(ri=Y.description)==null?void 0:ri.value,fields:()=>Fr(Nr),astNode:Y,extensionASTNodes:Mt})}}}}var UL=new Map([...Be.specifiedScalarTypes,...Be.introspectionTypes].map(e=>[e.name,e]));function mN(e){let t=(0,Be.getDirectiveValues)(Be.GraphQLDeprecatedDirective,e);return t==null?void 0:t.reason}function kL(e){let t=(0,Be.getDirectiveValues)(Be.GraphQLSpecifiedByDirective,e);return t==null?void 0:t.url}});var Y_=w(Q_=>{"use strict";f();N();m();Object.defineProperty(Q_,"__esModule",{value:!0});Q_.buildASTSchema=UX;var xL=Ae(),CX=Wc(),BX=ML();function UX(e,t){(t==null?void 0:t.assumeValid)!==!0&&(t==null?void 0:t.assumeValidSDL)!==!0&&(0,CX.assertValidSDL)(e);let n={description:void 0,types:[],directives:[],extensions:Object.create(null),extensionASTNodes:[],assumeValid:!1},r=(0,BX.extendSchemaImpl)(n,e,t);if(r.astNode==null)for(let a of r.types)switch(a.name){case"Query":r.query=a;break;case"Mutation":r.mutation=a;break;case"Subscription":r.subscription=a;break}let i=[...r.directives,...xL.specifiedDirectives.filter(a=>r.directives.every(o=>o.name!==a.name))];return new xL.GraphQLSchema(Q(M({},r),{directives:i}))}});var nl=w(Yo=>{"use strict";f();N();m();Object.defineProperty(Yo,"__esModule",{value:!0});Yo.MAX_INT32=Yo.MAX_SUBSCRIPTION_FILTER_DEPTH=Yo.MAXIMUM_TYPE_NESTING=void 0;Yo.MAXIMUM_TYPE_NESTING=30;Yo.MAX_SUBSCRIPTION_FILTER_DEPTH=5;Yo.MAX_INT32=nn(2,31)-1});var Hr=w(er=>{"use strict";f();N();m();Object.defineProperty(er,"__esModule",{value:!0});er.areSetsEqual=MX;er.getOrThrowError=xX;er.getAllSetDisparities=qX;er.getEntriesNotInHashSet=VX;er.numberToOrdinal=jX;er.addIterableValuesToSet=KX;er.addSets=GX;er.kindToTypeString=$X;er.getValueOrDefault=QX;er.add=YX;er.generateSimpleDirective=JX;er.generateRequiresScopesDirective=HX;er.copyObjectValueMap=zX;er.addNewObjectValueMapEntries=WX;er.copyArrayValueMap=XX;er.addMapEntries=ZX;er.getSingleSetEntry=e9;var an=Ae(),vr=lr(),kX=sa(),J_=Jr();function MX(e,t){if(e.size!==t.size)return!1;for(let n of e)if(!t.has(n))return!1;return!0}function xX(e,t,n){let r=e.get(t);if(r===void 0)throw(0,kX.invalidKeyFatalError)(t,n);return r}function qX(e,t){let n=new Set(t),r=[];for(let i of e)n.delete(i)||r.push(i);for(let i of n)r.push(i);return r}function VX(e,t){let n=[];for(let r of e)t.has(r)||n.push(r);return n}function jX(e){let t=e.toString();switch(t[t.length-1]){case"1":return`${t}st`;case"2":return`${t}nd`;case"3":return`${t}rd`;default:return`${t}th`}}function KX(e,t){for(let n of e)t.add(n)}function GX(e,t){let n=new Set(e);for(let r of t)n.add(r);return n}function $X(e){switch(e){case an.Kind.BOOLEAN:return vr.BOOLEAN_SCALAR;case an.Kind.ENUM:case an.Kind.ENUM_TYPE_DEFINITION:return vr.ENUM;case an.Kind.ENUM_TYPE_EXTENSION:return"Enum extension";case an.Kind.ENUM_VALUE_DEFINITION:return vr.ENUM_VALUE;case an.Kind.FIELD_DEFINITION:return vr.FIELD;case an.Kind.FLOAT:return vr.FLOAT_SCALAR;case an.Kind.INPUT_OBJECT_TYPE_DEFINITION:return vr.INPUT_OBJECT;case an.Kind.INPUT_OBJECT_TYPE_EXTENSION:return"Input Object extension";case an.Kind.INPUT_VALUE_DEFINITION:return vr.INPUT_VALUE;case an.Kind.INT:return vr.INT_SCALAR;case an.Kind.INTERFACE_TYPE_DEFINITION:return vr.INTERFACE;case an.Kind.INTERFACE_TYPE_EXTENSION:return"Interface extension";case an.Kind.NULL:return vr.NULL;case an.Kind.OBJECT:case an.Kind.OBJECT_TYPE_DEFINITION:return vr.OBJECT;case an.Kind.OBJECT_TYPE_EXTENSION:return"Object extension";case an.Kind.STRING:return vr.STRING_SCALAR;case an.Kind.SCALAR_TYPE_DEFINITION:return vr.SCALAR;case an.Kind.SCALAR_TYPE_EXTENSION:return"Scalar extension";case an.Kind.UNION_TYPE_DEFINITION:return vr.UNION;case an.Kind.UNION_TYPE_EXTENSION:return"Union extension";default:return e}}function QX(e,t,n){let r=e.get(t);if(r)return r;let i=n();return e.set(t,i),i}function YX(e,t){return e.has(t)?!1:(e.add(t),!0)}function JX(e){return{kind:an.Kind.DIRECTIVE,name:(0,J_.stringToNameNode)(e)}}function HX(e){let t=[];for(let n of e){let r=[];for(let i of n)r.push({kind:an.Kind.STRING,value:i});t.push({kind:an.Kind.LIST,values:r})}return{kind:an.Kind.DIRECTIVE,name:(0,J_.stringToNameNode)(vr.REQUIRES_SCOPES),arguments:[{kind:an.Kind.ARGUMENT,name:(0,J_.stringToNameNode)(vr.SCOPES),value:{kind:an.Kind.LIST,values:t}}]}}function zX(e){let t=new Map;for(let[n,r]of e)t.set(n,M({},r));return t}function WX(e,t){for(let[n,r]of e)t.set(n,M({},r))}function XX(e){let t=new Map;for(let[n,r]of e)t.set(n,[...r]);return t}function ZX(e,t){for(let[n,r]of e)t.set(n,r)}function e9(e){let{value:t,done:n}=e.values().next();if(!n)return t}});var sa=w(z=>{"use strict";f();N();m();Object.defineProperty(z,"__esModule",{value:!0});z.invalidEventProviderIdErrorMessage=z.invalidNatsStreamConfigurationDefinitionErrorMessage=z.invalidEdfsPublishResultObjectErrorMessage=z.invalidNatsStreamInputErrorMessage=z.inlineFragmentInFieldSetErrorMessage=z.inaccessibleQueryRootTypeError=z.subgraphValidationFailureError=z.minimumSubgraphRequirementError=void 0;z.multipleNamedTypeDefinitionError=t9;z.incompatibleArgumentTypesError=n9;z.incompatibleInputValueDefaultValueTypeError=r9;z.incompatibleChildTypesError=i9;z.incompatibleInputValueDefaultValuesError=a9;z.incompatibleSharedEnumError=s9;z.invalidSubgraphNamesError=o9;z.duplicateDirectiveDefinitionError=u9;z.duplicateEnumValueDefinitionError=c9;z.duplicateFieldDefinitionError=l9;z.duplicateInputFieldDefinitionError=d9;z.duplicateImplementedInterfaceError=p9;z.duplicateUnionMemberDefinitionError=f9;z.duplicateTypeDefinitionError=m9;z.duplicateOperationTypeDefinitionError=N9;z.noBaseDefinitionForExtensionError=T9;z.noBaseScalarDefinitionError=E9;z.noDefinedUnionMembersError=h9;z.noDefinedEnumValuesError=y9;z.operationDefinitionError=I9;z.invalidFieldShareabilityError=g9;z.undefinedDirectiveError=_9;z.undefinedTypeError=v9;z.invalidRepeatedDirectiveErrorMessage=S9;z.invalidDirectiveError=O9;z.invalidRepeatedFederatedDirectiveErrorMessage=D9;z.invalidDirectiveLocationErrorMessage=b9;z.undefinedRequiredArgumentsErrorMessage=A9;z.unexpectedDirectiveArgumentErrorMessage=R9;z.duplicateDirectiveArgumentDefinitionsErrorMessage=F9;z.invalidArgumentValueErrorMessage=P9;z.invalidKeyDirectivesError=w9;z.maximumTypeNestingExceededError=L9;z.unexpectedKindFatalError=C9;z.incompatibleParentKindFatalError=B9;z.unexpectedEdgeFatalError=U9;z.incompatibleParentKindMergeError=k9;z.fieldTypeMergeFatalError=M9;z.unexpectedTypeNodeKindFatalError=x9;z.invalidKeyFatalError=q9;z.unexpectedParentKindForChildError=V9;z.subgraphValidationError=j9;z.invalidSubgraphNameErrorMessage=K9;z.invalidOperationTypeDefinitionError=G9;z.invalidRootTypeDefinitionError=$9;z.subgraphInvalidSyntaxError=Q9;z.invalidInterfaceImplementationError=Y9;z.invalidRequiredInputValueError=J9;z.duplicateArgumentsError=H9;z.invalidArgumentsError=z9;z.noQueryRootTypeError=W9;z.expectedEntityError=X9;z.abstractTypeInKeyFieldSetErrorMessage=Z9;z.unknownTypeInFieldSetErrorMessage=e7;z.invalidSelectionSetErrorMessage=t7;z.invalidSelectionSetDefinitionErrorMessage=n7;z.undefinedFieldInFieldSetErrorMessage=r7;z.unparsableFieldSetErrorMessage=i7;z.unparsableFieldSetSelectionErrorMessage=a7;z.undefinedCompositeOutputTypeError=s7;z.unexpectedArgumentErrorMessage=o7;z.argumentsInKeyFieldSetErrorMessage=u7;z.invalidProvidesOrRequiresDirectivesError=c7;z.duplicateFieldInFieldSetErrorMessage=l7;z.invalidConfigurationDataErrorMessage=d7;z.incompatibleTypeWithProvidesErrorMessage=p7;z.invalidInlineFragmentTypeErrorMessage=f7;z.inlineFragmentWithoutTypeConditionErrorMessage=m7;z.unknownInlineFragmentTypeConditionErrorMessage=N7;z.invalidInlineFragmentTypeConditionTypeErrorMessage=T7;z.invalidInlineFragmentTypeConditionErrorMessage=E7;z.invalidSelectionOnUnionErrorMessage=h7;z.duplicateOverriddenFieldErrorMessage=y7;z.duplicateOverriddenFieldsError=I7;z.noFieldDefinitionsError=g7;z.noInputValueDefinitionsError=_7;z.allChildDefinitionsAreInaccessibleError=v7;z.equivalentSourceAndTargetOverrideErrorMessage=S7;z.undefinedEntityInterfaceImplementationsError=O7;z.orScopesLimitError=D7;z.invalidEventDrivenGraphError=b7;z.invalidRootTypeFieldEventsDirectivesErrorMessage=A7;z.invalidEventDrivenMutationResponseTypeErrorMessage=R7;z.invalidRootTypeFieldResponseTypesEventDrivenErrorMessage=F7;z.invalidNatsStreamInputFieldsErrorMessage=P7;z.invalidKeyFieldSetsEventDrivenErrorMessage=w7;z.nonExternalKeyFieldNamesEventDrivenErrorMessage=L7;z.nonKeyFieldNamesEventDrivenErrorMessage=C7;z.nonEntityObjectExtensionsEventDrivenErrorMessage=B7;z.nonKeyComposingObjectTypeNamesEventDrivenErrorMessage=U7;z.invalidEdfsDirectiveName=k7;z.invalidImplementedTypeError=M7;z.selfImplementationError=x7;z.invalidEventSubjectErrorMessage=q7;z.invalidEventSubjectsErrorMessage=V7;z.invalidEventSubjectsItemErrorMessage=j7;z.invalidEventSubjectsArgumentErrorMessage=K7;z.undefinedEventSubjectsArgumentErrorMessage=G7;z.invalidEventDirectiveError=$7;z.invalidReferencesOfInaccessibleTypeError=Q7;z.inaccessibleRequiredInputValueError=Y7;z.invalidUnionMemberTypeError=J7;z.invalidRootTypeError=H7;z.invalidSubscriptionFilterLocationError=z7;z.invalidSubscriptionFilterDirectiveError=W7;z.subscriptionFilterNamedTypeErrorMessage=X7;z.subscriptionFilterConditionDepthExceededErrorMessage=Z7;z.subscriptionFilterConditionInvalidInputFieldNumberErrorMessage=eZ;z.subscriptionFilterConditionInvalidInputFieldErrorMessage=tZ;z.subscriptionFilterConditionInvalidInputFieldTypeErrorMessage=nZ;z.subscriptionFilterArrayConditionInvalidItemTypeErrorMessage=rZ;z.subscriptionFilterArrayConditionInvalidLengthErrorMessage=iZ;z.invalidInputFieldTypeErrorMessage=aZ;z.subscriptionFieldConditionInvalidInputFieldErrorMessage=sZ;z.subscriptionFieldConditionInvalidValuesArrayErrorMessage=oZ;z.subscriptionFieldConditionEmptyValuesArrayErrorMessage=uZ;z.unknownFieldSubgraphNameError=cZ;z.invalidSubscriptionFieldConditionFieldPathErrorMessage=lZ;z.invalidSubscriptionFieldConditionFieldPathParentErrorMessage=dZ;z.undefinedSubscriptionFieldConditionFieldPathFieldErrorMessage=pZ;z.invalidSubscriptionFieldConditionFieldPathFieldErrorMessage=fZ;z.inaccessibleSubscriptionFieldConditionFieldPathFieldErrorMessage=mZ;z.nonLeafSubscriptionFieldConditionFieldPathFinalFieldErrorMessage=NZ;z.unresolvablePathError=TZ;z.allExternalFieldInstancesError=EZ;z.externalInterfaceFieldsError=hZ;z.nonExternalConditionalFieldError=yZ;z.incompatibleFederatedFieldNamedTypeError=IZ;z.unknownNamedTypeErrorMessage=$L;z.unknownNamedTypeError=gZ;z.unknownFieldDataError=_Z;z.unexpectedNonCompositeOutputTypeError=vZ;z.invalidExternalDirectiveError=SZ;z.configureDescriptionNoDescriptionError=OZ;z.configureDescriptionPropagationError=DZ;z.duplicateDirectiveDefinitionArgumentErrorMessage=bZ;z.duplicateDirectiveDefinitionLocationErrorMessage=AZ;z.invalidDirectiveDefinitionLocationErrorMessage=RZ;z.invalidDirectiveDefinitionError=FZ;z.fieldAlreadyProvidedErrorMessage=PZ;z.invalidInterfaceObjectImplementationDefinitionsError=wZ;var qL=Ae(),Ze=lr(),VL=nl(),tp=Hr();z.minimumSubgraphRequirementError=new Error("At least one subgraph is required for federation.");function t9(e,t,n){return new Error(`The named type "${e}" is defined as both types "${t}" and "${n}". +`))}return Q(M({},e),{value:t,block:!0})}function BL(e){return e.arguments?e.arguments.sort((n,r)=>n.name.value.localeCompare(r.name.value)):e.arguments}function mN(e){let t=e.selections;return Q(M({},e),{selections:t.sort((n,r)=>{var a,o,c,l;return Sn.NAME in n?Sn.NAME in r?n.name.value.localeCompare(r.name.value):-1:Sn.NAME in r?1:((o=(a=n.typeCondition)==null?void 0:a.name.value)!=null?o:"").localeCompare((l=(c=r.typeCondition)==null?void 0:c.name.value)!=null?l:"")}).map(n=>{switch(n.kind){case Ut.Kind.FIELD:return Q(M({},n),{arguments:BL(n),selectionSet:n.selectionSet?mN(n.selectionSet):n.selectionSet});case Ut.Kind.FRAGMENT_SPREAD:return n;case Ut.Kind.INLINE_FRAGMENT:return Q(M({},n),{selectionSet:mN(n.selectionSet)})}})})}function PX(e){return Q(M({},e),{definitions:e.definitions.map(t=>t.kind!==Ut.Kind.OPERATION_DEFINITION?t:Q(M({},t),{selectionSet:mN(t.selectionSet)}))})}function UL(e,t=!0){return(0,Ut.parse)(e,{noLocation:t})}function wX(e,t=!0){try{return{documentNode:UL(e,t)}}catch(n){return{error:n}}}});var xL=w(tl=>{"use strict";m();T();N();Object.defineProperty(tl,"__esModule",{value:!0});tl.AccumulatorMap=void 0;tl.mapValue=el;tl.extendSchemaImpl=LX;var Be=Ae(),Es=class extends Map{get[Symbol.toStringTag](){return"AccumulatorMap"}add(t,n){let r=this.get(t);r===void 0?this.set(t,[n]):r.push(n)}};tl.AccumulatorMap=Es;function el(e,t){let n=Object.create(null);for(let r of Object.keys(e))n[r]=t(e[r],r);return n}function LX(e,t,n){var De,_e,Le,_t;let r=[],i=new Es,a=new Es,o=new Es,c=new Es,l=new Es,p=new Es,f=[],y,g=[],_=!1;for(let Y of t.definitions){switch(Y.kind){case Be.Kind.SCHEMA_DEFINITION:y=Y;break;case Be.Kind.SCHEMA_EXTENSION:g.push(Y);break;case Be.Kind.DIRECTIVE_DEFINITION:f.push(Y);break;case Be.Kind.SCALAR_TYPE_DEFINITION:case Be.Kind.OBJECT_TYPE_DEFINITION:case Be.Kind.INTERFACE_TYPE_DEFINITION:case Be.Kind.UNION_TYPE_DEFINITION:case Be.Kind.ENUM_TYPE_DEFINITION:case Be.Kind.INPUT_OBJECT_TYPE_DEFINITION:r.push(Y);break;case Be.Kind.SCALAR_TYPE_EXTENSION:i.add(Y.name.value,Y);break;case Be.Kind.OBJECT_TYPE_EXTENSION:a.add(Y.name.value,Y);break;case Be.Kind.INTERFACE_TYPE_EXTENSION:o.add(Y.name.value,Y);break;case Be.Kind.UNION_TYPE_EXTENSION:c.add(Y.name.value,Y);break;case Be.Kind.ENUM_TYPE_EXTENSION:l.add(Y.name.value,Y);break;case Be.Kind.INPUT_OBJECT_TYPE_EXTENSION:p.add(Y.name.value,Y);break;default:continue}_=!0}if(!_)return e;let F=new Map;for(let Y of e.types){let ae=W(Y);ae&&F.set(Y.name,ae)}for(let Y of r){let ae=Y.name.value;F.set(ae,(De=kL.get(ae))!=null?De:se(Y))}for(let[Y,ae]of a)F.set(Y,new Be.GraphQLObjectType({name:Y,interfaces:()=>$t(ae),fields:()=>dn(ae),extensionASTNodes:ae}));if(n!=null&&n.addInvalidExtensionOrphans){for(let[Y,ae]of o)F.set(Y,new Be.GraphQLInterfaceType({name:Y,interfaces:()=>$t(ae),fields:()=>dn(ae),extensionASTNodes:ae}));for(let[Y,ae]of l)F.set(Y,new Be.GraphQLEnumType({name:Y,values:kn(ae),extensionASTNodes:ae}));for(let[Y,ae]of c)F.set(Y,new Be.GraphQLUnionType({name:Y,types:()=>An(ae),extensionASTNodes:ae}));for(let[Y,ae]of i)F.set(Y,new Be.GraphQLScalarType({name:Y,extensionASTNodes:ae}));for(let[Y,ae]of p)F.set(Y,new Be.GraphQLInputObjectType({name:Y,fields:()=>Fr(ae),extensionASTNodes:ae}))}let U=M(M({query:e.query&&J(e.query),mutation:e.mutation&&J(e.mutation),subscription:e.subscription&&J(e.subscription)},y&&Ht([y])),Ht(g));return Q(M({description:(Le=(_e=y==null?void 0:y.description)==null?void 0:_e.value)!=null?Le:e.description},U),{types:Array.from(F.values()),directives:[...e.directives.map(ee),...f.map(Vt)],extensions:e.extensions,astNode:y!=null?y:e.astNode,extensionASTNodes:e.extensionASTNodes.concat(g),assumeValid:(_t=n==null?void 0:n.assumeValid)!=null?_t:!1});function K(Y){return(0,Be.isListType)(Y)?new Be.GraphQLList(K(Y.ofType)):(0,Be.isNonNullType)(Y)?new Be.GraphQLNonNull(K(Y.ofType)):J(Y)}function J(Y){return F.get(Y.name)}function ee(Y){if((0,Be.isSpecifiedDirective)(Y))return Y;let ae=Y.toConfig();return new Be.GraphQLDirective(Q(M({},ae),{args:el(ae.args,gt)}))}function W(Y){if((0,Be.isIntrospectionType)(Y)||(0,Be.isSpecifiedScalarType)(Y))return Y;if((0,Be.isScalarType)(Y))return we(Y);if((0,Be.isObjectType)(Y))return qe(Y);if((0,Be.isInterfaceType)(Y))return et(Y);if((0,Be.isUnionType)(Y))return X(Y);if((0,Be.isEnumType)(Y))return de(Y);if((0,Be.isInputObjectType)(Y))return Te(Y)}function Te(Y){var Qe;let ae=Y.toConfig(),Me=(Qe=p.get(ae.name))!=null?Qe:[];return new Be.GraphQLInputObjectType(Q(M({},ae),{fields:()=>M(M({},el(ae.fields,Lt=>Q(M({},Lt),{type:K(Lt.type)}))),Fr(Me)),extensionASTNodes:ae.extensionASTNodes.concat(Me)}))}function de(Y){var Qe;let ae=Y.toConfig(),Me=(Qe=l.get(Y.name))!=null?Qe:[];return new Be.GraphQLEnumType(Q(M({},ae),{values:M(M({},ae.values),kn(Me)),extensionASTNodes:ae.extensionASTNodes.concat(Me)}))}function we(Y){var Lt,tt;let ae=Y.toConfig(),Me=(Lt=i.get(ae.name))!=null?Lt:[],Qe=ae.specifiedByURL;for(let bt of Me)Qe=(tt=ML(bt))!=null?tt:Qe;return new Be.GraphQLScalarType(Q(M({},ae),{specifiedByURL:Qe,extensionASTNodes:ae.extensionASTNodes.concat(Me)}))}function qe(Y){var Qe;let ae=Y.toConfig(),Me=(Qe=a.get(ae.name))!=null?Qe:[];return new Be.GraphQLObjectType(Q(M({},ae),{interfaces:()=>[...Y.getInterfaces().map(J),...$t(Me)],fields:()=>M(M({},el(ae.fields,ve)),dn(Me)),extensionASTNodes:ae.extensionASTNodes.concat(Me)}))}function et(Y){var Qe;let ae=Y.toConfig(),Me=(Qe=o.get(ae.name))!=null?Qe:[];return new Be.GraphQLInterfaceType(Q(M({},ae),{interfaces:()=>[...Y.getInterfaces().map(J),...$t(Me)],fields:()=>M(M({},el(ae.fields,ve)),dn(Me)),extensionASTNodes:ae.extensionASTNodes.concat(Me)}))}function X(Y){var Qe;let ae=Y.toConfig(),Me=(Qe=c.get(ae.name))!=null?Qe:[];return new Be.GraphQLUnionType(Q(M({},ae),{types:()=>[...Y.getTypes().map(J),...An(Me)],extensionASTNodes:ae.extensionASTNodes.concat(Me)}))}function ve(Y){return Q(M({},Y),{type:K(Y.type),args:Y.args&&el(Y.args,gt)})}function gt(Y){return Q(M({},Y),{type:K(Y.type)})}function Ht(Y){var Me;let ae={};for(let Qe of Y){let Lt=(Me=Qe.operationTypes)!=null?Me:[];for(let tt of Lt)ae[tt.operation]=zt(tt.type)}return ae}function zt(Y){var Qe;let ae=Y.name.value,Me=(Qe=kL.get(ae))!=null?Qe:F.get(ae);if(Me===void 0)throw new Error(`Unknown type: "${ae}".`);return Me}function bn(Y){return Y.kind===Be.Kind.LIST_TYPE?new Be.GraphQLList(bn(Y.type)):Y.kind===Be.Kind.NON_NULL_TYPE?new Be.GraphQLNonNull(bn(Y.type)):zt(Y)}function Vt(Y){var ae;return new Be.GraphQLDirective({name:Y.name.value,description:(ae=Y.description)==null?void 0:ae.value,locations:Y.locations.map(({value:Me})=>Me),isRepeatable:Y.repeatable,args:Rr(Y.arguments),astNode:Y})}function dn(Y){var Me,Qe;let ae=Object.create(null);for(let Lt of Y){let tt=(Me=Lt.fields)!=null?Me:[];for(let bt of tt)ae[bt.name.value]={type:bn(bt.type),description:(Qe=bt.description)==null?void 0:Qe.value,args:Rr(bt.arguments),deprecationReason:TN(bt),astNode:bt}}return ae}function Rr(Y){var Qe;let ae=Y!=null?Y:[],Me=Object.create(null);for(let Lt of ae){let tt=bn(Lt.type);Me[Lt.name.value]={type:tt,description:(Qe=Lt.description)==null?void 0:Qe.value,defaultValue:(0,Be.valueFromAST)(Lt.defaultValue,tt),deprecationReason:TN(Lt),astNode:Lt}}return Me}function Fr(Y){var Me,Qe;let ae=Object.create(null);for(let Lt of Y){let tt=(Me=Lt.fields)!=null?Me:[];for(let bt of tt){let za=bn(bt.type);ae[bt.name.value]={type:za,description:(Qe=bt.description)==null?void 0:Qe.value,defaultValue:(0,Be.valueFromAST)(bt.defaultValue,za),deprecationReason:TN(bt),astNode:bt}}}return ae}function kn(Y){var Me,Qe;let ae=Object.create(null);for(let Lt of Y){let tt=(Me=Lt.values)!=null?Me:[];for(let bt of tt)ae[bt.name.value]={description:(Qe=bt.description)==null?void 0:Qe.value,deprecationReason:TN(bt),astNode:bt}}return ae}function $t(Y){return Y.flatMap(ae=>{var Me,Qe;return(Qe=(Me=ae.interfaces)==null?void 0:Me.map(zt))!=null?Qe:[]})}function An(Y){return Y.flatMap(ae=>{var Me,Qe;return(Qe=(Me=ae.types)==null?void 0:Me.map(zt))!=null?Qe:[]})}function se(Y){var Me,Qe,Lt,tt,bt,za,qr,Wa,Ic,ya,mr,ri;let ae=Y.name.value;switch(Y.kind){case Be.Kind.OBJECT_TYPE_DEFINITION:{let Mt=(Me=a.get(ae))!=null?Me:[],Nr=[Y,...Mt];return a.delete(ae),new Be.GraphQLObjectType({name:ae,description:(Qe=Y.description)==null?void 0:Qe.value,interfaces:()=>$t(Nr),fields:()=>dn(Nr),astNode:Y,extensionASTNodes:Mt})}case Be.Kind.INTERFACE_TYPE_DEFINITION:{let Mt=(Lt=o.get(ae))!=null?Lt:[],Nr=[Y,...Mt];return o.delete(ae),new Be.GraphQLInterfaceType({name:ae,description:(tt=Y.description)==null?void 0:tt.value,interfaces:()=>$t(Nr),fields:()=>dn(Nr),astNode:Y,extensionASTNodes:Mt})}case Be.Kind.ENUM_TYPE_DEFINITION:{let Mt=(bt=l.get(ae))!=null?bt:[],Nr=[Y,...Mt];return l.delete(ae),new Be.GraphQLEnumType({name:ae,description:(za=Y.description)==null?void 0:za.value,values:kn(Nr),astNode:Y,extensionASTNodes:Mt})}case Be.Kind.UNION_TYPE_DEFINITION:{let Mt=(qr=c.get(ae))!=null?qr:[],Nr=[Y,...Mt];return c.delete(ae),new Be.GraphQLUnionType({name:ae,description:(Wa=Y.description)==null?void 0:Wa.value,types:()=>An(Nr),astNode:Y,extensionASTNodes:Mt})}case Be.Kind.SCALAR_TYPE_DEFINITION:{let Mt=(Ic=i.get(ae))!=null?Ic:[];return i.delete(ae),new Be.GraphQLScalarType({name:ae,description:(ya=Y.description)==null?void 0:ya.value,specifiedByURL:ML(Y),astNode:Y,extensionASTNodes:Mt})}case Be.Kind.INPUT_OBJECT_TYPE_DEFINITION:{let Mt=(mr=p.get(ae))!=null?mr:[],Nr=[Y,...Mt];return p.delete(ae),new Be.GraphQLInputObjectType({name:ae,description:(ri=Y.description)==null?void 0:ri.value,fields:()=>Fr(Nr),astNode:Y,extensionASTNodes:Mt})}}}}var kL=new Map([...Be.specifiedScalarTypes,...Be.introspectionTypes].map(e=>[e.name,e]));function TN(e){let t=(0,Be.getDirectiveValues)(Be.GraphQLDeprecatedDirective,e);return t==null?void 0:t.reason}function ML(e){let t=(0,Be.getDirectiveValues)(Be.GraphQLSpecifiedByDirective,e);return t==null?void 0:t.url}});var J_=w(Y_=>{"use strict";m();T();N();Object.defineProperty(Y_,"__esModule",{value:!0});Y_.buildASTSchema=UX;var qL=Ae(),CX=Wc(),BX=xL();function UX(e,t){(t==null?void 0:t.assumeValid)!==!0&&(t==null?void 0:t.assumeValidSDL)!==!0&&(0,CX.assertValidSDL)(e);let n={description:void 0,types:[],directives:[],extensions:Object.create(null),extensionASTNodes:[],assumeValid:!1},r=(0,BX.extendSchemaImpl)(n,e,t);if(r.astNode==null)for(let a of r.types)switch(a.name){case"Query":r.query=a;break;case"Mutation":r.mutation=a;break;case"Subscription":r.subscription=a;break}let i=[...r.directives,...qL.specifiedDirectives.filter(a=>r.directives.every(o=>o.name!==a.name))];return new qL.GraphQLSchema(Q(M({},r),{directives:i}))}});var nl=w(Jo=>{"use strict";m();T();N();Object.defineProperty(Jo,"__esModule",{value:!0});Jo.MAX_INT32=Jo.MAX_SUBSCRIPTION_FILTER_DEPTH=Jo.MAXIMUM_TYPE_NESTING=void 0;Jo.MAXIMUM_TYPE_NESTING=30;Jo.MAX_SUBSCRIPTION_FILTER_DEPTH=5;Jo.MAX_INT32=nn(2,31)-1});var Hr=w(er=>{"use strict";m();T();N();Object.defineProperty(er,"__esModule",{value:!0});er.areSetsEqual=MX;er.getOrThrowError=xX;er.getAllSetDisparities=qX;er.getEntriesNotInHashSet=VX;er.numberToOrdinal=jX;er.addIterableValuesToSet=KX;er.addSets=GX;er.kindToTypeString=$X;er.getValueOrDefault=QX;er.add=YX;er.generateSimpleDirective=JX;er.generateRequiresScopesDirective=HX;er.copyObjectValueMap=zX;er.addNewObjectValueMapEntries=WX;er.copyArrayValueMap=XX;er.addMapEntries=ZX;er.getSingleSetEntry=e9;var an=Ae(),vr=lr(),kX=sa(),H_=Jr();function MX(e,t){if(e.size!==t.size)return!1;for(let n of e)if(!t.has(n))return!1;return!0}function xX(e,t,n){let r=e.get(t);if(r===void 0)throw(0,kX.invalidKeyFatalError)(t,n);return r}function qX(e,t){let n=new Set(t),r=[];for(let i of e)n.delete(i)||r.push(i);for(let i of n)r.push(i);return r}function VX(e,t){let n=[];for(let r of e)t.has(r)||n.push(r);return n}function jX(e){let t=e.toString();switch(t[t.length-1]){case"1":return`${t}st`;case"2":return`${t}nd`;case"3":return`${t}rd`;default:return`${t}th`}}function KX(e,t){for(let n of e)t.add(n)}function GX(e,t){let n=new Set(e);for(let r of t)n.add(r);return n}function $X(e){switch(e){case an.Kind.BOOLEAN:return vr.BOOLEAN_SCALAR;case an.Kind.ENUM:case an.Kind.ENUM_TYPE_DEFINITION:return vr.ENUM;case an.Kind.ENUM_TYPE_EXTENSION:return"Enum extension";case an.Kind.ENUM_VALUE_DEFINITION:return vr.ENUM_VALUE;case an.Kind.FIELD_DEFINITION:return vr.FIELD;case an.Kind.FLOAT:return vr.FLOAT_SCALAR;case an.Kind.INPUT_OBJECT_TYPE_DEFINITION:return vr.INPUT_OBJECT;case an.Kind.INPUT_OBJECT_TYPE_EXTENSION:return"Input Object extension";case an.Kind.INPUT_VALUE_DEFINITION:return vr.INPUT_VALUE;case an.Kind.INT:return vr.INT_SCALAR;case an.Kind.INTERFACE_TYPE_DEFINITION:return vr.INTERFACE;case an.Kind.INTERFACE_TYPE_EXTENSION:return"Interface extension";case an.Kind.NULL:return vr.NULL;case an.Kind.OBJECT:case an.Kind.OBJECT_TYPE_DEFINITION:return vr.OBJECT;case an.Kind.OBJECT_TYPE_EXTENSION:return"Object extension";case an.Kind.STRING:return vr.STRING_SCALAR;case an.Kind.SCALAR_TYPE_DEFINITION:return vr.SCALAR;case an.Kind.SCALAR_TYPE_EXTENSION:return"Scalar extension";case an.Kind.UNION_TYPE_DEFINITION:return vr.UNION;case an.Kind.UNION_TYPE_EXTENSION:return"Union extension";default:return e}}function QX(e,t,n){let r=e.get(t);if(r)return r;let i=n();return e.set(t,i),i}function YX(e,t){return e.has(t)?!1:(e.add(t),!0)}function JX(e){return{kind:an.Kind.DIRECTIVE,name:(0,H_.stringToNameNode)(e)}}function HX(e){let t=[];for(let n of e){let r=[];for(let i of n)r.push({kind:an.Kind.STRING,value:i});t.push({kind:an.Kind.LIST,values:r})}return{kind:an.Kind.DIRECTIVE,name:(0,H_.stringToNameNode)(vr.REQUIRES_SCOPES),arguments:[{kind:an.Kind.ARGUMENT,name:(0,H_.stringToNameNode)(vr.SCOPES),value:{kind:an.Kind.LIST,values:t}}]}}function zX(e){let t=new Map;for(let[n,r]of e)t.set(n,M({},r));return t}function WX(e,t){for(let[n,r]of e)t.set(n,M({},r))}function XX(e){let t=new Map;for(let[n,r]of e)t.set(n,[...r]);return t}function ZX(e,t){for(let[n,r]of e)t.set(n,r)}function e9(e){let{value:t,done:n}=e.values().next();if(!n)return t}});var sa=w(z=>{"use strict";m();T();N();Object.defineProperty(z,"__esModule",{value:!0});z.invalidEventProviderIdErrorMessage=z.invalidNatsStreamConfigurationDefinitionErrorMessage=z.invalidEdfsPublishResultObjectErrorMessage=z.invalidNatsStreamInputErrorMessage=z.inlineFragmentInFieldSetErrorMessage=z.inaccessibleQueryRootTypeError=z.subgraphValidationFailureError=z.minimumSubgraphRequirementError=void 0;z.multipleNamedTypeDefinitionError=t9;z.incompatibleArgumentTypesError=n9;z.incompatibleInputValueDefaultValueTypeError=r9;z.incompatibleChildTypesError=i9;z.incompatibleInputValueDefaultValuesError=a9;z.incompatibleSharedEnumError=s9;z.invalidSubgraphNamesError=o9;z.duplicateDirectiveDefinitionError=u9;z.duplicateEnumValueDefinitionError=c9;z.duplicateFieldDefinitionError=l9;z.duplicateInputFieldDefinitionError=d9;z.duplicateImplementedInterfaceError=p9;z.duplicateUnionMemberDefinitionError=f9;z.duplicateTypeDefinitionError=m9;z.duplicateOperationTypeDefinitionError=N9;z.noBaseDefinitionForExtensionError=T9;z.noBaseScalarDefinitionError=E9;z.noDefinedUnionMembersError=h9;z.noDefinedEnumValuesError=y9;z.operationDefinitionError=I9;z.invalidFieldShareabilityError=g9;z.undefinedDirectiveError=_9;z.undefinedTypeError=v9;z.invalidRepeatedDirectiveErrorMessage=S9;z.invalidDirectiveError=O9;z.invalidRepeatedFederatedDirectiveErrorMessage=D9;z.invalidDirectiveLocationErrorMessage=b9;z.undefinedRequiredArgumentsErrorMessage=A9;z.unexpectedDirectiveArgumentErrorMessage=R9;z.duplicateDirectiveArgumentDefinitionsErrorMessage=F9;z.invalidArgumentValueErrorMessage=P9;z.invalidKeyDirectivesError=w9;z.maximumTypeNestingExceededError=L9;z.unexpectedKindFatalError=C9;z.incompatibleParentKindFatalError=B9;z.unexpectedEdgeFatalError=U9;z.incompatibleParentKindMergeError=k9;z.fieldTypeMergeFatalError=M9;z.unexpectedTypeNodeKindFatalError=x9;z.invalidKeyFatalError=q9;z.unexpectedParentKindForChildError=V9;z.subgraphValidationError=j9;z.invalidSubgraphNameErrorMessage=K9;z.invalidOperationTypeDefinitionError=G9;z.invalidRootTypeDefinitionError=$9;z.subgraphInvalidSyntaxError=Q9;z.invalidInterfaceImplementationError=Y9;z.invalidRequiredInputValueError=J9;z.duplicateArgumentsError=H9;z.invalidArgumentsError=z9;z.noQueryRootTypeError=W9;z.expectedEntityError=X9;z.abstractTypeInKeyFieldSetErrorMessage=Z9;z.unknownTypeInFieldSetErrorMessage=e7;z.invalidSelectionSetErrorMessage=t7;z.invalidSelectionSetDefinitionErrorMessage=n7;z.undefinedFieldInFieldSetErrorMessage=r7;z.unparsableFieldSetErrorMessage=i7;z.unparsableFieldSetSelectionErrorMessage=a7;z.undefinedCompositeOutputTypeError=s7;z.unexpectedArgumentErrorMessage=o7;z.argumentsInKeyFieldSetErrorMessage=u7;z.invalidProvidesOrRequiresDirectivesError=c7;z.duplicateFieldInFieldSetErrorMessage=l7;z.invalidConfigurationDataErrorMessage=d7;z.incompatibleTypeWithProvidesErrorMessage=p7;z.invalidInlineFragmentTypeErrorMessage=f7;z.inlineFragmentWithoutTypeConditionErrorMessage=m7;z.unknownInlineFragmentTypeConditionErrorMessage=N7;z.invalidInlineFragmentTypeConditionTypeErrorMessage=T7;z.invalidInlineFragmentTypeConditionErrorMessage=E7;z.invalidSelectionOnUnionErrorMessage=h7;z.duplicateOverriddenFieldErrorMessage=y7;z.duplicateOverriddenFieldsError=I7;z.noFieldDefinitionsError=g7;z.noInputValueDefinitionsError=_7;z.allChildDefinitionsAreInaccessibleError=v7;z.equivalentSourceAndTargetOverrideErrorMessage=S7;z.undefinedEntityInterfaceImplementationsError=O7;z.orScopesLimitError=D7;z.invalidEventDrivenGraphError=b7;z.invalidRootTypeFieldEventsDirectivesErrorMessage=A7;z.invalidEventDrivenMutationResponseTypeErrorMessage=R7;z.invalidRootTypeFieldResponseTypesEventDrivenErrorMessage=F7;z.invalidNatsStreamInputFieldsErrorMessage=P7;z.invalidKeyFieldSetsEventDrivenErrorMessage=w7;z.nonExternalKeyFieldNamesEventDrivenErrorMessage=L7;z.nonKeyFieldNamesEventDrivenErrorMessage=C7;z.nonEntityObjectExtensionsEventDrivenErrorMessage=B7;z.nonKeyComposingObjectTypeNamesEventDrivenErrorMessage=U7;z.invalidEdfsDirectiveName=k7;z.invalidImplementedTypeError=M7;z.selfImplementationError=x7;z.invalidEventSubjectErrorMessage=q7;z.invalidEventSubjectsErrorMessage=V7;z.invalidEventSubjectsItemErrorMessage=j7;z.invalidEventSubjectsArgumentErrorMessage=K7;z.undefinedEventSubjectsArgumentErrorMessage=G7;z.invalidEventDirectiveError=$7;z.invalidReferencesOfInaccessibleTypeError=Q7;z.inaccessibleRequiredInputValueError=Y7;z.invalidUnionMemberTypeError=J7;z.invalidRootTypeError=H7;z.invalidSubscriptionFilterLocationError=z7;z.invalidSubscriptionFilterDirectiveError=W7;z.subscriptionFilterNamedTypeErrorMessage=X7;z.subscriptionFilterConditionDepthExceededErrorMessage=Z7;z.subscriptionFilterConditionInvalidInputFieldNumberErrorMessage=eZ;z.subscriptionFilterConditionInvalidInputFieldErrorMessage=tZ;z.subscriptionFilterConditionInvalidInputFieldTypeErrorMessage=nZ;z.subscriptionFilterArrayConditionInvalidItemTypeErrorMessage=rZ;z.subscriptionFilterArrayConditionInvalidLengthErrorMessage=iZ;z.invalidInputFieldTypeErrorMessage=aZ;z.subscriptionFieldConditionInvalidInputFieldErrorMessage=sZ;z.subscriptionFieldConditionInvalidValuesArrayErrorMessage=oZ;z.subscriptionFieldConditionEmptyValuesArrayErrorMessage=uZ;z.unknownFieldSubgraphNameError=cZ;z.invalidSubscriptionFieldConditionFieldPathErrorMessage=lZ;z.invalidSubscriptionFieldConditionFieldPathParentErrorMessage=dZ;z.undefinedSubscriptionFieldConditionFieldPathFieldErrorMessage=pZ;z.invalidSubscriptionFieldConditionFieldPathFieldErrorMessage=fZ;z.inaccessibleSubscriptionFieldConditionFieldPathFieldErrorMessage=mZ;z.nonLeafSubscriptionFieldConditionFieldPathFinalFieldErrorMessage=NZ;z.unresolvablePathError=TZ;z.allExternalFieldInstancesError=EZ;z.externalInterfaceFieldsError=hZ;z.nonExternalConditionalFieldError=yZ;z.incompatibleFederatedFieldNamedTypeError=IZ;z.unknownNamedTypeErrorMessage=QL;z.unknownNamedTypeError=gZ;z.unknownFieldDataError=_Z;z.unexpectedNonCompositeOutputTypeError=vZ;z.invalidExternalDirectiveError=SZ;z.configureDescriptionNoDescriptionError=OZ;z.configureDescriptionPropagationError=DZ;z.duplicateDirectiveDefinitionArgumentErrorMessage=bZ;z.duplicateDirectiveDefinitionLocationErrorMessage=AZ;z.invalidDirectiveDefinitionLocationErrorMessage=RZ;z.invalidDirectiveDefinitionError=FZ;z.fieldAlreadyProvidedErrorMessage=PZ;z.invalidInterfaceObjectImplementationDefinitionsError=wZ;var VL=Ae(),Ze=lr(),jL=nl(),np=Hr();z.minimumSubgraphRequirementError=new Error("At least one subgraph is required for federation.");function t9(e,t,n){return new Error(`The named type "${e}" is defined as both types "${t}" and "${n}". However, there must be only one type named "${e}".`)}function n9(e,t,n,r){return new Error(`Incompatible types when merging two instances of argument "${e}" on path "${t}": Expected type "${n}" but received "${r}"`)}function r9(e,t,n,r){return new Error(`The ${e} of type "${n}" defined on path "${t}" is incompatible with the default value of "${r}".`)}function i9(e,t,n){return new Error(`Incompatible types when merging two instances of "${e}": Expected type "${t}" but received "${n}"`)}function a9(e,t,n,r,i){return new Error(`Expected the ${e} defined on path "${t}" to define the default value "${r}". @@ -211,16 +211,16 @@ If an instance defines a default value, that default value must be consistently `))}function D9(e,t){return new Error(`The definition for the directive "@${e}" does not define it as repeatable, but the directive has been declared on more than one instance of the type "${t}".`)}function b9(e,t){return` The definition for "@${e}" does not define "${t}" as a valid location.`}function A9(e,t,n){let r=` The definition for "@${e}" defines the following `+t.length+" required argument"+(t.length>1?"s: ":": ")+'"'+t.join('", "')+`". However,`;return n.length<1?r+" no arguments are defined on this instance.":r+" the following required argument"+(n.length>1?"s are":" is")+' not defined on this instance: "'+n.join(Ze.QUOTATION_JOIN)+'".'}function R9(e,t){return` The definition for "@${e}" does not define the following argument`+(t.length>1?"s that are":" that is")+' provided: "'+t.join(Ze.QUOTATION_JOIN)+'".'}function F9(e){return" The following argument"+(e.length>1?"s are":" is")+' defined more than once: "'+e.join(Ze.QUOTATION_JOIN)+'"'}function P9(e,t,n,r){return` The value "${e}" provided to argument "${t}(${n}: ...)" is not a valid "${r}" type.`}function w9(e,t){return new Error(`The entity "${e}" defines the following invalid "key" directive`+(t.length>1?"s":"")+`: `+t.join(` -`))}function L9(e){return new Error(` The type defined at path "${e}" has more than ${VL.MAXIMUM_TYPE_NESTING} layers of nesting, or there is a cyclical error.`)}function C9(e){return new Error(`Fatal: Unexpected type for "${e}"`)}function B9(e,t,n){return new Error(`Fatal: Expected "${e}" to be type ${(0,tp.kindToTypeString)(t)} but received "${(0,tp.kindToTypeString)(n)}".`)}function U9(e,t){return new Error(`Fatal: The type "${e}" visited the following unexpected edge`+(t.length>1?"s":"")+`: +`))}function L9(e){return new Error(` The type defined at path "${e}" has more than ${jL.MAXIMUM_TYPE_NESTING} layers of nesting, or there is a cyclical error.`)}function C9(e){return new Error(`Fatal: Unexpected type for "${e}"`)}function B9(e,t,n){return new Error(`Fatal: Expected "${e}" to be type ${(0,np.kindToTypeString)(t)} but received "${(0,np.kindToTypeString)(n)}".`)}function U9(e,t){return new Error(`Fatal: The type "${e}" visited the following unexpected edge`+(t.length>1?"s":"")+`: " ${t.join(Ze.QUOTATION_JOIN)}".`)}function k9(e,t,n){return new Error(` When merging types, expected "${e}" to be type "${t}" but received "${n}".`)}function M9(e){return new Error(`Fatal: Unsuccessfully merged the cross-subgraph types of field "${e}" without producing a type error object.`)}function x9(e){return new Error(`Fatal: Expected all constituent types at path "${e}" to be one of the following: "LIST_TYPE", "NAMED_TYPE", or "NON_NULL_TYPE".`)}function q9(e,t){return new Error(`Fatal: Expected key "${e}" to exist in the map "${t}".`)}z.subgraphValidationFailureError=new Error(" Fatal: Subgraph validation did not return a valid AST.");function V9(e,t,n,r,i){return new Error(` Expected "${e}" to be type ${t} but received "${n}" when handling child "${r}" of type "${i}".`)}function j9(e,t){return new Error(`The subgraph "${e}" could not be federated for the following reason`+(t.length>1?"s":"")+`: `+t.map(n=>n.message).join(` -`))}function K9(e,t){return`The ${(0,tp.numberToOrdinal)(e+1)} subgraph in the array did not define a name. Consequently, any further errors will temporarily identify this subgraph as "${t}".`}function G9(e,t,n){return new Error(`The schema definition defines the "${e}" operation as type "${t}". However, "${t}" was also used for the "${n}" operation. +`))}function K9(e,t){return`The ${(0,np.numberToOrdinal)(e+1)} subgraph in the array did not define a name. Consequently, any further errors will temporarily identify this subgraph as "${t}".`}function G9(e,t,n){return new Error(`The schema definition defines the "${e}" operation as type "${t}". However, "${t}" was also used for the "${n}" operation. If explicitly defined, each operation type must be a unique and valid Object type.`)}function $9(e,t,n){return new Error(`The schema definition defines the "${e}" operation as type "${t}". However, the schema also defines another type named "${n}", which is the default (root) type name for the "${e}" operation. For federation, it is only possible to use the default root types names ("Mutation", "Query", "Subscription") as operation definitions. No other definitions with these default root type names are valid.`)}function Q9(e){let t="The subgraph has syntax errors and could not be parsed.";return e&&(t+=` The reason provided was: `+e.message),new Error(t)}function Y9(e,t,n){let r=[];for(let[i,a]of n){let o=` The implementation of Interface "${i}" by "${e}" is invalid because: `,c=a.unimplementedFields.length;c&&(o+=` The following field${c>1?"s are":" is"} not implemented: "`+a.unimplementedFields.join('", "')+`" -`);for(let[l,p]of a.invalidFieldImplementations){let T=p.unimplementedArguments.size,y=p.invalidImplementedArguments.length,g=p.invalidAdditionalArguments.size;if(o+=` The field "${l}" is invalid because: -`,T&&(o+=` The following argument${T>1?"s are":" is"} not implemented: "`+[...p.unimplementedArguments].join('", "')+`" +`);for(let[l,p]of a.invalidFieldImplementations){let f=p.unimplementedArguments.size,y=p.invalidImplementedArguments.length,g=p.invalidAdditionalArguments.size;if(o+=` The field "${l}" is invalid because: +`,f&&(o+=` The following argument${f>1?"s are":" is"} not implemented: "`+[...p.unimplementedArguments].join('", "')+`" `),y){o+=` The following implemented argument${y>1?"s are":" is"} invalid: `;for(let _ of p.invalidImplementedArguments)o+=` The argument "${_.argumentName}" must define type "`+_.expectedType+`" and not "${_.actualType}" `}g&&(o+=` If a field from an Interface is implemented, any additional Arguments that were not defined on the original Interface field must be optional (nullable). @@ -250,9 +250,9 @@ For federation, it is only possible to use the default root types names ("Mutati "${e}" This is because "${t}" returns the unknown type "${n}".`}function t7(e,t,n,r){return` The following field set is invalid: "${e}" - This is because of the selection set corresponding to the `+NN(t,n,r)+` Composite types such as "${r}" types must define a selection set with at least one field selection.`}function n7(e,t,n,r){return` The following field set is invalid: + This is because of the selection set corresponding to the `+EN(t,n,r)+` Composite types such as "${r}" types must define a selection set with at least one field selection.`}function n7(e,t,n,r){return` The following field set is invalid: "${e}" - This is because of the selection set corresponding to the `+NN(t,n,r)+` Non-composite types such as "${r}" cannot define a selection set.`}function r7(e,t,n){return` The following field set is invalid: + This is because of the selection set corresponding to the `+EN(t,n,r)+` Non-composite types such as "${r}" cannot define a selection set.`}function r7(e,t,n){return` The following field set is invalid: "${e}" This is because of the selection set corresponding to the field coordinates "${t}.${n}". The type "${t}" does not define a field named "${n}".`}function i7(e,t){let n=` The following field set is invalid: @@ -270,29 +270,29 @@ For federation, it is only possible to use the default root types names ("Mutati `))}function l7(e,t){return` The following field set is invalid: "${e}" This is because "${t}" was included in the field set more than once.`}function d7(e,t,n){return` Expected ConfigurationData to exist for type "${e}" when adding field "${t}" while validating field set "${n}".`}function p7(e,t){return` A "@provides" directive is declared on field "${e}". - However, the response type "${t}" is not an Object nor Interface.`}function H_(e,t,n=!1){return e.length<1?`enclosing type name "${t}". + However, the response type "${t}" is not an Object nor Interface.`}function z_(e,t,n=!1){return e.length<1?`enclosing type name "${t}". `:`field coordinates "${e[e.length-1]}"`+(n?` that returns "${t}"`:"")+`. -`}function NN(e,t,n){return e.length<1?`enclosing type name "${t}", which is type "${n}". +`}function EN(e,t,n){return e.length<1?`enclosing type name "${t}", which is type "${n}". `:`field coordinates "${e[e.length-1]}" that returns "${t}", which is type "${n}". `}function f7(e,t,n,r){return` The following field set is invalid: "${e}" - This is because an inline fragment with the type condition "${n}" is defined on the selection set corresponding to the `+H_(t,r,!0)+` However, "${r}" is not an abstract (Interface or Union) type. + This is because an inline fragment with the type condition "${n}" is defined on the selection set corresponding to the `+z_(t,r,!0)+` However, "${r}" is not an abstract (Interface or Union) type. Consequently, the only valid type condition at this selection set would be "${r}".`}function m7(e,t){return` The following field set is invalid: "${e}" This is because "${t}" defines an inline fragment without a type condition.`}function N7(e,t,n,r){return` The following field set is invalid: "${e}" - This is because an inline fragment with the unknown type condition "${r}" is defined on the selection set corresponding to the `+H_(t,n)}function T7(e,t,n,r,i){return` The following field set is invalid: + This is because an inline fragment with the unknown type condition "${r}" is defined on the selection set corresponding to the `+z_(t,n)}function T7(e,t,n,r,i){return` The following field set is invalid: "${e}" - This is because an inline fragment with the type condition "${r}" is defined on the selection set corresponding to the `+H_(t,n)+` However, "${r}" is type "${i}" when types "Interface" or "Object" would be expected.`}function E7(e,t,n,r,i){let a=` The following field set is invalid: + This is because an inline fragment with the type condition "${r}" is defined on the selection set corresponding to the `+z_(t,n)+` However, "${r}" is type "${i}" when types "Interface" or "Object" would be expected.`}function E7(e,t,n,r,i){let a=` The following field set is invalid: "${e}" - This is because an inline fragment with the type condition "${n}" is defined on the selection set corresponding to the `+NN(t,i,r);return r===Ze.INTERFACE?a+` However, "${n}" does not implement "${i}"`:a+` However, "${n}" is not a member of "${i}".`}function h7(e,t,n){return` The following field set is invalid: + This is because an inline fragment with the type condition "${n}" is defined on the selection set corresponding to the `+EN(t,i,r);return r===Ze.INTERFACE?a+` However, "${n}" does not implement "${i}"`:a+` However, "${n}" is not a member of "${i}".`}function h7(e,t,n){return` The following field set is invalid: "${e}" - This is because of the selection set corresponding to the `+NN(t,n,Ze.UNION)+` Union types such as "${n}" must define field selections (besides "__typename") on an inline fragment whose type condition corresponds to a constituent union member.`}function y7(e,t){return` The field "${e}" declares an @override directive in the following subgraphs: "`+t.join(Ze.QUOTATION_JOIN)+'".'}function I7(e){return new Error('The "@override" directive must only be declared on one single instance of a field. However, an "@override" directive was declared on more than one instance of the following field'+(e.length>1?"s":"")+': "'+e.join(Ze.QUOTATION_JOIN)+`". + This is because of the selection set corresponding to the `+EN(t,n,Ze.UNION)+` Union types such as "${n}" must define field selections (besides "__typename") on an inline fragment whose type condition corresponds to a constituent union member.`}function y7(e,t){return` The field "${e}" declares an @override directive in the following subgraphs: "`+t.join(Ze.QUOTATION_JOIN)+'".'}function I7(e){return new Error('The "@override" directive must only be declared on one single instance of a field. However, an "@override" directive was declared on more than one instance of the following field'+(e.length>1?"s":"")+': "'+e.join(Ze.QUOTATION_JOIN)+`". `)}function g7(e,t){return new Error(`The ${e} "${t}" is invalid because it does not define any fields.`)}function _7(e){return new Error(`The Input Object "${e}" is invalid because it does not define any input values.`)}function v7(e,t,n){return new Error(`The ${e} "${t}" is invalid because all its ${n} definitions are declared "@inaccessible".`)}function S7(e,t){return`Cannot override field "${t}" because the source and target subgraph names are both "${e}"`}function O7(e,t){let n=`Federation was unsuccessful because any one subgraph that defines a specific entity interface must also define each and every entity object that implements that entity interface. -`;for(let[r,i]of e){let o=(0,tp.getOrThrowError)(t,r,"entityInterfaceFederationDataByTypeName").concreteTypeNames;n+=` Across all subgraphs, the entity interface "${r}" is implemented by the following entities`+(o.size>1?"s":"")+`: +`;for(let[r,i]of e){let o=(0,np.getOrThrowError)(t,r,"entityInterfaceFederationDataByTypeName").concreteTypeNames;n+=` Across all subgraphs, the entity interface "${r}" is implemented by the following entities`+(o.size>1?"s":"")+`: "`+Array.from(o).join(Ze.QUOTATION_JOIN)+`" However, the definition of at least one of these implementations is missing in a subgraph that defines the entity interface "${r}": -`;for(let{subgraphName:c,concreteTypeNames:l}of i){let p=(0,tp.getEntriesNotInHashSet)(o,l);n+=` Subgraph "${c}" does not define the following implementations: "`+p.join(Ze.QUOTATION_JOIN)+`" +`;for(let{subgraphName:c,concreteTypeNames:l}of i){let p=(0,np.getEntriesNotInHashSet)(o,l);n+=` Subgraph "${c}" does not define the following implementations: "`+p.join(Ze.QUOTATION_JOIN)+`" `}}return new Error(n)}function D7(e,t){return new Error(`The maximum number of OR scopes that can be defined by @requiresScopes on a single field is ${e}. However, the following coordinates attempt to define more: "`+t.join(Ze.QUOTATION_JOIN)+`" If you require more, please contact support.`)}function b7(e){return new Error(`An "Event Driven" graph\u2014a subgraph that defines event driven directives\u2014must not define any resolvers. @@ -348,14 +348,14 @@ Consequently, the following object extension definition`+(e.length>1?"s are":" i `+n.join(` `))}function Q7(e,t,n){return new Error(`The ${e} "${t}" is declared "@inaccessible"; however, the ${e} is still referenced at the following paths: "`+n.join(Ze.QUOTATION_JOIN)+`" -`)}function Y7(e,t){return new Error(`The ${e.kind===qL.Kind.ARGUMENT?"argument":"Input field"} "${e.name}" defined at coordinates "${e.federatedCoords}" is declared "@inaccessible"; however, it is a required ${e.kind===qL.Kind.ARGUMENT?"argument of field":"field of Input Object"} "${t}".`)}function J7(e,t){return new Error(` The union "${e}" defines the following member`+(t.length>1?"s that are not object types":" that is not an object type")+`: +`)}function Y7(e,t){return new Error(`The ${e.kind===VL.Kind.ARGUMENT?"argument":"Input field"} "${e.name}" defined at coordinates "${e.federatedCoords}" is declared "@inaccessible"; however, it is a required ${e.kind===VL.Kind.ARGUMENT?"argument of field":"field of Input Object"} "${t}".`)}function J7(e,t){return new Error(` The union "${e}" defines the following member`+(t.length>1?"s that are not object types":" that is not an object type")+`: `+t.join(` `))}function H7(e){return new Error(`Expected type "${e}" to be a root type but could not find its respective OperationTypeNode.`)}function z7(e){return new Error(`The "@${Ze.SUBSCRIPTION_FILTER}" directive must only be defined on a subscription root field, but it was defined on the path "${e}".`)}function W7(e,t){return new Error(`The "@${Ze.SUBSCRIPTION_FILTER}" directive defined on path "${e}" is invalid for the following reason`+(t.length>1?"s":"")+`: `+t.join(` -`))}function X7(e){return` Unknown type "${e}".`}function Z7(e){return` The input path "${e}" exceeds the maximum depth of ${VL.MAX_SUBSCRIPTION_FILTER_DEPTH} for any one filter condition. - If you require a larger maximum depth, please contact support.`}var jL=` Each "${Ze.SUBSCRIPTION_FILTER_CONDITION}" input object must define exactly one of the following input value fields: "${Ze.AND_UPPER}", "${Ze.IN_UPPER}", "${Ze.NOT_UPPER}", or "${Ze.OR_UPPER}". -`;function eZ(e,t){return jL+` However, input path "${e}" defines ${t} fields.`}function tZ(e,t){return jL+` However, input path "${e}" defines the invalid input value field "${t}".`}function nZ(e,t,n){return` Expected the value of input path "${e}" to be type "${t}" but received type "${n}"`}var KL=` An AND or OR input field defined on a "${Ze.SUBSCRIPTION_FILTER_CONDITION}" should define a list of 1\u20135 nested conditions. -`;function rZ(e,t){let n=t.length>1;return KL+" However, the following "+(n?"indices":"index")+` defined on input path "${e}" `+(n?"are":"is")+' not type "object": '+t.join(", ")}function iZ(e,t){return KL+` However, the list defined on input path "${e}" has a length of ${t}.`}function aZ(e,t,n){return` Expected the input path "${e}" to be type "${t}" but received "${n}".`}function sZ(e,t,n,r,i){let a=` Each "${Ze.SUBSCRIPTION_FIELD_CONDITION}" input object must only define the following two input value fields: "${Ze.FIELD_PATH}" and "${Ze.VALUES}". +`))}function X7(e){return` Unknown type "${e}".`}function Z7(e){return` The input path "${e}" exceeds the maximum depth of ${jL.MAX_SUBSCRIPTION_FILTER_DEPTH} for any one filter condition. + If you require a larger maximum depth, please contact support.`}var KL=` Each "${Ze.SUBSCRIPTION_FILTER_CONDITION}" input object must define exactly one of the following input value fields: "${Ze.AND_UPPER}", "${Ze.IN_UPPER}", "${Ze.NOT_UPPER}", or "${Ze.OR_UPPER}". +`;function eZ(e,t){return KL+` However, input path "${e}" defines ${t} fields.`}function tZ(e,t){return KL+` However, input path "${e}" defines the invalid input value field "${t}".`}function nZ(e,t,n){return` Expected the value of input path "${e}" to be type "${t}" but received type "${n}"`}var GL=` An AND or OR input field defined on a "${Ze.SUBSCRIPTION_FILTER_CONDITION}" should define a list of 1\u20135 nested conditions. +`;function rZ(e,t){let n=t.length>1;return GL+" However, the following "+(n?"indices":"index")+` defined on input path "${e}" `+(n?"are":"is")+' not type "object": '+t.join(", ")}function iZ(e,t){return GL+` However, the list defined on input path "${e}" has a length of ${t}.`}function aZ(e,t,n){return` Expected the input path "${e}" to be type "${t}" but received "${n}".`}function sZ(e,t,n,r,i){let a=` Each "${Ze.SUBSCRIPTION_FIELD_CONDITION}" input object must only define the following two input value fields: "${Ze.FIELD_PATH}" and "${Ze.VALUES}". However, input path "${e}" is invalid because:`;return t.length>0&&(a+=` The following required field`+(t.length>1?"s are":" is")+` not defined: "`+t.join(Ze.QUOTATION_JOIN)+'"'),n.length>0&&(a+=` @@ -364,8 +364,8 @@ Consequently, the following object extension definition`+(e.length>1?"s are":" i The following invalid field`+(r.length>1?"s are":" is")+` defined: "`+r.join(Ze.QUOTATION_JOIN)+'"'),i.length>0&&(a+=` `+i.join(` - `)),a}var GL=` A "${Ze.SUBSCRIPTION_FIELD_CONDITION}" input object must define a "values" input value field with a list of at least one valid "${Ze.SUBSCRIPTION_FILTER_VALUE}" kind (boolean, enum, float, int, null, or string). -`;function oZ(e,t){let n=t.length>1;return GL+" However, the following "+(n?"indices":"index")+` defined on input path "${e}" `+(n?"are":"is")+` not a valid "${Ze.SUBSCRIPTION_FILTER_VALUE}": `+t.join(", ")}function uZ(e){return GL+` However, the list defined on input path "${e}" is empty.`}function cZ(e){return new Error(` Field "${e}" defined no subgraph names.`)}function lZ(e,t){return` Input path "${e}" defines the value "${t}", which is not a period (.) delimited field path.`}function dZ(e,t,n){return` Input path "${e}" defines the value "${t}". + `)),a}var $L=` A "${Ze.SUBSCRIPTION_FIELD_CONDITION}" input object must define a "values" input value field with a list of at least one valid "${Ze.SUBSCRIPTION_FILTER_VALUE}" kind (boolean, enum, float, int, null, or string). +`;function oZ(e,t){let n=t.length>1;return $L+" However, the following "+(n?"indices":"index")+` defined on input path "${e}" `+(n?"are":"is")+` not a valid "${Ze.SUBSCRIPTION_FILTER_VALUE}": `+t.join(", ")}function uZ(e){return $L+` However, the list defined on input path "${e}" is empty.`}function cZ(e){return new Error(` Field "${e}" defined no subgraph names.`)}function lZ(e,t){return` Input path "${e}" defines the value "${t}", which is not a period (.) delimited field path.`}function dZ(e,t,n){return` Input path "${e}" defines the value "${t}". However, "${n}" is not type "object"`}function pZ(e,t,n,r,i){return` Input path "${e}" defines the value "${t}". However, the path "${n}" is invalid because no field named "${r}" exists on type "${i}".`}function fZ(e,t,n,r,i){return`Input path "${e}" defines the value "${t}". However, only fields that are defined in the same graph as the "@${Ze.SUBSCRIPTION_FILTER}" directive can compose part of an "IN" condition's "fieldPath" input value field. @@ -386,74 +386,74 @@ Consequently, "${n}" is already provided by subgraph "${t}" and should not form The field "${e}" could not be federated due to incompatible types across subgraphs. The discrepancies are as follows: `+n.join(` -`))}function $L(e,t){return`The field "${e}" returns the unknown named type "${t}".`}function gZ(e,t){return new Error($L(e,t))}function _Z(e){return new Error(`Could not find FieldData for field "${e}" +`))}function QL(e,t){return`The field "${e}" returns the unknown named type "${t}".`}function gZ(e,t){return new Error(QL(e,t))}function _Z(e){return new Error(`Could not find FieldData for field "${e}" .This should never happen. Please report this issue on GitHub.`)}function vZ(e,t){return new Error(`Expected named type "${e}" to be a composite output type (Object or Interface) but received "${t}". This should never happen. Please report this issue on GitHub.`)}function SZ(e){return new Error(`The Object field "${e}" is invalidly declared "@external". An Object field should only be declared "@external" if it is part of a "@key", "@provides", or "@requires" field set, or the field is necessary to satisfy an Interface implementation. In the case that none of these conditions is true, the "@external" directive should be removed.`)}function OZ(e,t){return new Error(`The "@openfed__configureDescription" directive defined on ${e} "${t}" is invalid because neither a description nor the "descriptionOverride" argument is defined.`)}function DZ(e,t){return new Error(`The coordinates "${e}" declare "@openfed__configureDescription(propagate: true)" in the following subgraphs: "`+t.join(Ze.QUOTATION_JOIN)+`" A federated graph only supports a single description; consequently, only one subgraph may define argument "propagate" as true (this is the default value).`)}function bZ(e){return"- The following argument"+(e.length>1?"s are":" is")+` defined more than once: "`+e.join(Ze.QUOTATION_JOIN)+'"'}function AZ(e){return`- The location "${e}" is defined multiple times.`}function RZ(e){return`- "${e}" is not a valid directive location.`}function FZ(e,t){return new Error(`The directive definition for "@${e}" is invalid for the following reason`+(t.length>1?"s":"")+`: `+t.join(Ze.LITERAL_NEW_LINE)+'"')}function PZ(e,t,n){return` The field "${e}" is unconditionally provided by subgraph "${t}" and should not form part of any "@${n}" field set. Although "${e}" is declared "@external", it is part of a "@key" directive on an extension type. Such fields are only declared "@external" for legacy syntactical reasons and are not internally considered "@external".`}function wZ(e,t,n){return new Error(`The subgraph that defines an entity Interface Object (using "@interfaceObject") must not define any implementation types of that interface. However, the subgraph "${t}" defines the entity Interface "${e}" as an Interface Object alongside the following implementation type`+(n.length>1?"s":"")+` of "${e}": - "`+n.join(Ze.QUOTATION_JOIN)+'"')}});var YL=w(QL=>{"use strict";f();N();m();Object.defineProperty(QL,"__esModule",{value:!0})});var Jo=w(Or=>{"use strict";f();N();m();Object.defineProperty(Or,"__esModule",{value:!0});Or.getMutableDirectiveDefinitionNode=CZ;Or.getMutableEnumNode=BZ;Or.getMutableEnumValueNode=UZ;Or.getMutableFieldNode=kZ;Or.getMutableInputObjectNode=MZ;Or.getMutableInputValueNode=xZ;Or.getMutableInterfaceNode=qZ;Or.getMutableObjectNode=VZ;Or.getMutableObjectExtensionNode=jZ;Or.getMutableScalarNode=KZ;Or.getMutableTypeNode=z_;Or.getMutableUnionNode=GZ;Or.getTypeNodeNamedTypeName=W_;Or.getNamedTypeNode=HL;var Sr=Ae(),rl=Jr(),JL=sa(),LZ=nl();function CZ(e){return{arguments:[],kind:e.kind,locations:[],name:M({},e.name),repeatable:e.repeatable,description:(0,rl.formatDescription)(e.description)}}function BZ(e){return{kind:Sr.Kind.ENUM_TYPE_DEFINITION,name:M({},e)}}function UZ(e){return{directives:[],kind:e.kind,name:M({},e.name),description:(0,rl.formatDescription)(e.description)}}function kZ(e,t,n){return{arguments:[],directives:[],kind:e.kind,name:M({},e.name),type:z_(e.type,t,n),description:(0,rl.formatDescription)(e.description)}}function MZ(e){return{kind:Sr.Kind.INPUT_OBJECT_TYPE_DEFINITION,name:M({},e)}}function xZ(e,t,n){return{directives:[],kind:e.kind,name:M({},e.name),type:z_(e.type,t,n),defaultValue:e.defaultValue,description:(0,rl.formatDescription)(e.description)}}function qZ(e){return{kind:Sr.Kind.INTERFACE_TYPE_DEFINITION,name:M({},e)}}function VZ(e){return{kind:Sr.Kind.OBJECT_TYPE_DEFINITION,name:M({},e)}}function jZ(e){let t=e.kind===Sr.Kind.OBJECT_TYPE_DEFINITION?e.description:void 0;return{kind:Sr.Kind.OBJECT_TYPE_EXTENSION,name:M({},e.name),description:(0,rl.formatDescription)(t)}}function KZ(e){return{kind:Sr.Kind.SCALAR_TYPE_DEFINITION,name:M({},e)}}function z_(e,t,n){let r={kind:e.kind},i=r;for(let a=0;a{"use strict";f();N();m();Object.defineProperty(TN,"__esModule",{value:!0});TN.DEFAULT_CONSUMER_INACTIVE_THRESHOLD=void 0;TN.DEFAULT_CONSUMER_INACTIVE_THRESHOLD=30});var hs=w(Z=>{"use strict";f();N();m();Object.defineProperty(Z,"__esModule",{value:!0});Z.MAX_OR_SCOPES=Z.EDFS_ARGS_REGEXP=Z.CONFIGURE_CHILD_DESCRIPTIONS_DEFINITION=Z.CONFIGURE_DESCRIPTION_DEFINITION=Z.EDFS_NATS_STREAM_CONFIGURATION_DEFINITION=Z.SCOPE_SCALAR_DEFINITION=Z.FIELD_SET_SCALAR_DEFINITION=Z.VERSION_TWO_DIRECTIVE_DEFINITIONS=Z.EVENT_DRIVEN_DIRECTIVE_DEFINITIONS_BY_DIRECTIVE_NAME=Z.BASE_DIRECTIVE_DEFINITIONS=Z.V2_DIRECTIVE_DEFINITION_BY_DIRECTIVE_NAME=Z.SUBSCRIPTION_FIELD_CONDITION_DEFINITION=Z.SUBSCRIPTION_FILTER_VALUE_DEFINITION=Z.SUBSCRIPTION_FILTER_CONDITION_DEFINITION=Z.SUBSCRIPTION_FILTER_DEFINITION=Z.SHAREABLE_DEFINITION=Z.REQUIRES_SCOPES_DEFINITION=Z.OVERRIDE_DEFINITION=Z.LINK_DEFINITION=Z.LINK_PURPOSE_DEFINITION=Z.LINK_IMPORT_DEFINITION=Z.INTERFACE_OBJECT_DEFINITION=Z.INACCESSIBLE_DEFINITION=Z.COMPOSE_DIRECTIVE_DEFINITION=Z.AUTHENTICATED_DEFINITION=Z.ALL_IN_BUILT_DIRECTIVE_NAMES=Z.BASE_DIRECTIVE_DEFINITION_BY_DIRECTIVE_NAME=Z.EDFS_REDIS_SUBSCRIBE_DEFINITION=Z.EDFS_REDIS_PUBLISH_DEFINITION=Z.TAG_DEFINITION=Z.SPECIFIED_BY_DEFINITION=Z.REQUIRES_DEFINITION=Z.PROVIDES_DEFINITION=Z.KEY_DEFINITION=Z.REQUIRED_FIELDSET_TYPE_NODE=Z.EDFS_NATS_SUBSCRIBE_DEFINITION=Z.EDFS_NATS_REQUEST_DEFINITION=Z.EDFS_NATS_PUBLISH_DEFINITION=Z.EDFS_KAFKA_SUBSCRIBE_DEFINITION=Z.EDFS_KAFKA_PUBLISH_DEFINITION=Z.EXTERNAL_DEFINITION=Z.EXTENDS_DEFINITION=Z.DEPRECATED_DEFINITION=Z.BASE_SCALARS=Z.REQUIRED_STRING_TYPE_NODE=void 0;var ue=Ae(),ie=Jr(),$Z=X_(),B=lr();Z.REQUIRED_STRING_TYPE_NODE={kind:ue.Kind.NON_NULL_TYPE,type:(0,ie.stringToNamedTypeNode)(B.STRING_SCALAR)};Z.BASE_SCALARS=new Set(["_Any","_Entities",B.BOOLEAN_SCALAR,B.FLOAT_SCALAR,B.ID_SCALAR,B.INT_SCALAR,B.FIELD_SET_SCALAR,B.SCOPE_SCALAR,B.STRING_SCALAR]);Z.DEPRECATED_DEFINITION={arguments:[{directives:[],kind:ue.Kind.INPUT_VALUE_DEFINITION,name:(0,ie.stringToNameNode)(B.REASON),type:(0,ie.stringToNamedTypeNode)(B.STRING_SCALAR),defaultValue:{kind:ue.Kind.STRING,value:ue.DEFAULT_DEPRECATION_REASON}}],kind:ue.Kind.DIRECTIVE_DEFINITION,locations:(0,ie.stringArrayToNameNodeArray)([B.ARGUMENT_DEFINITION_UPPER,B.ENUM_VALUE_UPPER,B.FIELD_DEFINITION_UPPER,B.INPUT_FIELD_DEFINITION_UPPER]),name:(0,ie.stringToNameNode)(B.DEPRECATED),repeatable:!1};Z.EXTENDS_DEFINITION={kind:ue.Kind.DIRECTIVE_DEFINITION,locations:(0,ie.stringArrayToNameNodeArray)([B.INTERFACE_UPPER,B.OBJECT_UPPER]),name:(0,ie.stringToNameNode)(B.EXTENDS),repeatable:!1};Z.EXTERNAL_DEFINITION={kind:ue.Kind.DIRECTIVE_DEFINITION,locations:(0,ie.stringArrayToNameNodeArray)([B.FIELD_DEFINITION_UPPER,B.OBJECT_UPPER]),name:(0,ie.stringToNameNode)(B.EXTERNAL),repeatable:!1};Z.EDFS_KAFKA_PUBLISH_DEFINITION={arguments:[{kind:ue.Kind.INPUT_VALUE_DEFINITION,name:(0,ie.stringToNameNode)(B.TOPIC),type:Z.REQUIRED_STRING_TYPE_NODE},{kind:ue.Kind.INPUT_VALUE_DEFINITION,name:(0,ie.stringToNameNode)(B.PROVIDER_ID),type:Z.REQUIRED_STRING_TYPE_NODE,defaultValue:{kind:ue.Kind.STRING,value:B.DEFAULT_EDFS_PROVIDER_ID}}],kind:ue.Kind.DIRECTIVE_DEFINITION,locations:[(0,ie.stringToNameNode)(B.FIELD_DEFINITION_UPPER)],name:(0,ie.stringToNameNode)(B.EDFS_KAFKA_PUBLISH),repeatable:!1};Z.EDFS_KAFKA_SUBSCRIBE_DEFINITION={arguments:[{kind:ue.Kind.INPUT_VALUE_DEFINITION,name:(0,ie.stringToNameNode)(B.TOPICS),type:{kind:ue.Kind.NON_NULL_TYPE,type:{kind:ue.Kind.LIST_TYPE,type:Z.REQUIRED_STRING_TYPE_NODE}}},{kind:ue.Kind.INPUT_VALUE_DEFINITION,name:(0,ie.stringToNameNode)(B.PROVIDER_ID),type:Z.REQUIRED_STRING_TYPE_NODE,defaultValue:{kind:ue.Kind.STRING,value:B.DEFAULT_EDFS_PROVIDER_ID}}],kind:ue.Kind.DIRECTIVE_DEFINITION,locations:[(0,ie.stringToNameNode)(B.FIELD_DEFINITION_UPPER)],name:(0,ie.stringToNameNode)(B.EDFS_KAFKA_SUBSCRIBE),repeatable:!1};Z.EDFS_NATS_PUBLISH_DEFINITION={arguments:[{kind:ue.Kind.INPUT_VALUE_DEFINITION,name:(0,ie.stringToNameNode)(B.SUBJECT),type:Z.REQUIRED_STRING_TYPE_NODE},{kind:ue.Kind.INPUT_VALUE_DEFINITION,name:(0,ie.stringToNameNode)(B.PROVIDER_ID),type:{kind:ue.Kind.NON_NULL_TYPE,type:(0,ie.stringToNamedTypeNode)(B.STRING_SCALAR)},defaultValue:{kind:ue.Kind.STRING,value:B.DEFAULT_EDFS_PROVIDER_ID}}],kind:ue.Kind.DIRECTIVE_DEFINITION,locations:[(0,ie.stringToNameNode)(B.FIELD_DEFINITION_UPPER)],name:(0,ie.stringToNameNode)(B.EDFS_NATS_PUBLISH),repeatable:!1};Z.EDFS_NATS_REQUEST_DEFINITION={arguments:[{kind:ue.Kind.INPUT_VALUE_DEFINITION,name:(0,ie.stringToNameNode)(B.SUBJECT),type:{kind:ue.Kind.NON_NULL_TYPE,type:(0,ie.stringToNamedTypeNode)(B.STRING_SCALAR)}},{kind:ue.Kind.INPUT_VALUE_DEFINITION,name:(0,ie.stringToNameNode)(B.PROVIDER_ID),type:{kind:ue.Kind.NON_NULL_TYPE,type:(0,ie.stringToNamedTypeNode)(B.STRING_SCALAR)},defaultValue:{kind:ue.Kind.STRING,value:B.DEFAULT_EDFS_PROVIDER_ID}}],kind:ue.Kind.DIRECTIVE_DEFINITION,locations:[(0,ie.stringToNameNode)(B.FIELD_DEFINITION_UPPER)],name:(0,ie.stringToNameNode)(B.EDFS_NATS_REQUEST),repeatable:!1};Z.EDFS_NATS_SUBSCRIBE_DEFINITION={arguments:[{kind:ue.Kind.INPUT_VALUE_DEFINITION,name:(0,ie.stringToNameNode)(B.SUBJECTS),type:{kind:ue.Kind.NON_NULL_TYPE,type:{kind:ue.Kind.LIST_TYPE,type:Z.REQUIRED_STRING_TYPE_NODE}}},{kind:ue.Kind.INPUT_VALUE_DEFINITION,name:(0,ie.stringToNameNode)(B.PROVIDER_ID),type:Z.REQUIRED_STRING_TYPE_NODE,defaultValue:{kind:ue.Kind.STRING,value:B.DEFAULT_EDFS_PROVIDER_ID}},{kind:ue.Kind.INPUT_VALUE_DEFINITION,name:(0,ie.stringToNameNode)(B.STREAM_CONFIGURATION),type:(0,ie.stringToNamedTypeNode)(B.EDFS_NATS_STREAM_CONFIGURATION)}],kind:ue.Kind.DIRECTIVE_DEFINITION,locations:[(0,ie.stringToNameNode)(B.FIELD_DEFINITION_UPPER)],name:(0,ie.stringToNameNode)(B.EDFS_NATS_SUBSCRIBE),repeatable:!1};Z.REQUIRED_FIELDSET_TYPE_NODE={kind:ue.Kind.NON_NULL_TYPE,type:(0,ie.stringToNamedTypeNode)(B.FIELD_SET_SCALAR)};Z.KEY_DEFINITION={arguments:[{kind:ue.Kind.INPUT_VALUE_DEFINITION,name:(0,ie.stringToNameNode)(B.FIELDS),type:Z.REQUIRED_FIELDSET_TYPE_NODE},{kind:ue.Kind.INPUT_VALUE_DEFINITION,name:(0,ie.stringToNameNode)(B.RESOLVABLE),type:(0,ie.stringToNamedTypeNode)(B.BOOLEAN_SCALAR),defaultValue:{kind:ue.Kind.BOOLEAN,value:!0}}],kind:ue.Kind.DIRECTIVE_DEFINITION,locations:(0,ie.stringArrayToNameNodeArray)([B.INTERFACE_UPPER,B.OBJECT_UPPER]),name:(0,ie.stringToNameNode)(B.KEY),repeatable:!0};Z.PROVIDES_DEFINITION={arguments:[{kind:ue.Kind.INPUT_VALUE_DEFINITION,name:(0,ie.stringToNameNode)(B.FIELDS),type:Z.REQUIRED_FIELDSET_TYPE_NODE}],kind:ue.Kind.DIRECTIVE_DEFINITION,locations:[(0,ie.stringToNameNode)(B.FIELD_DEFINITION_UPPER)],name:(0,ie.stringToNameNode)(B.PROVIDES),repeatable:!1};Z.REQUIRES_DEFINITION={arguments:[{kind:ue.Kind.INPUT_VALUE_DEFINITION,name:(0,ie.stringToNameNode)(B.FIELDS),type:{kind:ue.Kind.NON_NULL_TYPE,type:(0,ie.stringToNamedTypeNode)(B.FIELD_SET_SCALAR)}}],kind:ue.Kind.DIRECTIVE_DEFINITION,locations:[(0,ie.stringToNameNode)(B.FIELD_DEFINITION_UPPER)],name:(0,ie.stringToNameNode)(B.REQUIRES),repeatable:!1};Z.SPECIFIED_BY_DEFINITION={arguments:[{kind:ue.Kind.INPUT_VALUE_DEFINITION,name:(0,ie.stringToNameNode)(B.URL_LOWER),type:Z.REQUIRED_STRING_TYPE_NODE}],kind:ue.Kind.DIRECTIVE_DEFINITION,locations:(0,ie.stringArrayToNameNodeArray)([B.SCALAR_UPPER]),name:(0,ie.stringToNameNode)(B.SPECIFIED_BY),repeatable:!1};Z.TAG_DEFINITION={arguments:[{directives:[],kind:ue.Kind.INPUT_VALUE_DEFINITION,name:(0,ie.stringToNameNode)(B.NAME),type:{kind:ue.Kind.NON_NULL_TYPE,type:(0,ie.stringToNamedTypeNode)(B.STRING_SCALAR)}}],kind:ue.Kind.DIRECTIVE_DEFINITION,locations:(0,ie.stringArrayToNameNodeArray)([B.ARGUMENT_DEFINITION_UPPER,B.ENUM_UPPER,B.ENUM_VALUE_UPPER,B.FIELD_DEFINITION_UPPER,B.INPUT_FIELD_DEFINITION_UPPER,B.INPUT_OBJECT_UPPER,B.INTERFACE_UPPER,B.OBJECT_UPPER,B.SCALAR_UPPER,B.UNION_UPPER]),name:(0,ie.stringToNameNode)(B.TAG),repeatable:!0};Z.EDFS_REDIS_PUBLISH_DEFINITION={arguments:[{kind:ue.Kind.INPUT_VALUE_DEFINITION,name:(0,ie.stringToNameNode)(B.CHANNEL),type:Z.REQUIRED_STRING_TYPE_NODE},{kind:ue.Kind.INPUT_VALUE_DEFINITION,name:(0,ie.stringToNameNode)(B.PROVIDER_ID),type:Z.REQUIRED_STRING_TYPE_NODE,defaultValue:{kind:ue.Kind.STRING,value:B.DEFAULT_EDFS_PROVIDER_ID}}],kind:ue.Kind.DIRECTIVE_DEFINITION,locations:[(0,ie.stringToNameNode)(B.FIELD_DEFINITION_UPPER)],name:(0,ie.stringToNameNode)(B.EDFS_REDIS_PUBLISH),repeatable:!1};Z.EDFS_REDIS_SUBSCRIBE_DEFINITION={arguments:[{kind:ue.Kind.INPUT_VALUE_DEFINITION,name:(0,ie.stringToNameNode)(B.CHANNELS),type:{kind:ue.Kind.NON_NULL_TYPE,type:{kind:ue.Kind.LIST_TYPE,type:Z.REQUIRED_STRING_TYPE_NODE}}},{kind:ue.Kind.INPUT_VALUE_DEFINITION,name:(0,ie.stringToNameNode)(B.PROVIDER_ID),type:Z.REQUIRED_STRING_TYPE_NODE,defaultValue:{kind:ue.Kind.STRING,value:B.DEFAULT_EDFS_PROVIDER_ID}}],kind:ue.Kind.DIRECTIVE_DEFINITION,locations:[(0,ie.stringToNameNode)(B.FIELD_DEFINITION_UPPER)],name:(0,ie.stringToNameNode)(B.EDFS_REDIS_SUBSCRIBE),repeatable:!1};Z.BASE_DIRECTIVE_DEFINITION_BY_DIRECTIVE_NAME=new Map([[B.DEPRECATED,Z.DEPRECATED_DEFINITION],[B.EXTENDS,Z.EXTENDS_DEFINITION],[B.EXTERNAL,Z.EXTERNAL_DEFINITION],[B.EDFS_KAFKA_PUBLISH,Z.EDFS_KAFKA_PUBLISH_DEFINITION],[B.EDFS_KAFKA_SUBSCRIBE,Z.EDFS_KAFKA_SUBSCRIBE_DEFINITION],[B.EDFS_NATS_PUBLISH,Z.EDFS_NATS_PUBLISH_DEFINITION],[B.EDFS_NATS_REQUEST,Z.EDFS_NATS_REQUEST_DEFINITION],[B.EDFS_NATS_SUBSCRIBE,Z.EDFS_NATS_SUBSCRIBE_DEFINITION],[B.EDFS_REDIS_PUBLISH,Z.EDFS_REDIS_PUBLISH_DEFINITION],[B.EDFS_REDIS_SUBSCRIBE,Z.EDFS_REDIS_SUBSCRIBE_DEFINITION],[B.KEY,Z.KEY_DEFINITION],[B.PROVIDES,Z.PROVIDES_DEFINITION],[B.REQUIRES,Z.REQUIRES_DEFINITION],[B.SPECIFIED_BY,Z.SPECIFIED_BY_DEFINITION],[B.TAG,Z.TAG_DEFINITION]]);Z.ALL_IN_BUILT_DIRECTIVE_NAMES=new Set([B.AUTHENTICATED,B.COMPOSE_DIRECTIVE,B.CONFIGURE_DESCRIPTION,B.CONFIGURE_CHILD_DESCRIPTIONS,B.DEPRECATED,B.EDFS_NATS_PUBLISH,B.EDFS_NATS_REQUEST,B.EDFS_NATS_SUBSCRIBE,B.EDFS_KAFKA_PUBLISH,B.EDFS_KAFKA_SUBSCRIBE,B.EDFS_REDIS_PUBLISH,B.EDFS_REDIS_SUBSCRIBE,B.EXTENDS,B.EXTERNAL,B.INACCESSIBLE,B.INTERFACE_OBJECT,B.KEY,B.LINK,B.OVERRIDE,B.PROVIDES,B.REQUIRES,B.REQUIRES_SCOPES,B.SHAREABLE,B.SPECIFIED_BY,B.SUBSCRIPTION_FILTER,B.TAG]);Z.AUTHENTICATED_DEFINITION={arguments:[],kind:ue.Kind.DIRECTIVE_DEFINITION,locations:(0,ie.stringArrayToNameNodeArray)([B.ENUM_UPPER,B.FIELD_DEFINITION_UPPER,B.INTERFACE_UPPER,B.OBJECT_UPPER,B.SCALAR_UPPER]),name:(0,ie.stringToNameNode)(B.AUTHENTICATED),repeatable:!1};Z.COMPOSE_DIRECTIVE_DEFINITION={arguments:[{kind:ue.Kind.INPUT_VALUE_DEFINITION,name:(0,ie.stringToNameNode)(B.NAME),type:Z.REQUIRED_STRING_TYPE_NODE}],kind:ue.Kind.DIRECTIVE_DEFINITION,locations:(0,ie.stringArrayToNameNodeArray)([B.SCHEMA_UPPER]),name:(0,ie.stringToNameNode)(B.COMPOSE_DIRECTIVE),repeatable:!0};Z.INACCESSIBLE_DEFINITION={arguments:[],kind:ue.Kind.DIRECTIVE_DEFINITION,locations:(0,ie.stringArrayToNameNodeArray)([B.ARGUMENT_DEFINITION_UPPER,B.ENUM_UPPER,B.ENUM_VALUE_UPPER,B.FIELD_DEFINITION_UPPER,B.INPUT_FIELD_DEFINITION_UPPER,B.INPUT_OBJECT_UPPER,B.INTERFACE_UPPER,B.OBJECT_UPPER,B.SCALAR_UPPER,B.UNION_UPPER]),name:(0,ie.stringToNameNode)(B.INACCESSIBLE),repeatable:!1};Z.INTERFACE_OBJECT_DEFINITION={kind:ue.Kind.DIRECTIVE_DEFINITION,locations:(0,ie.stringArrayToNameNodeArray)([B.OBJECT_UPPER]),name:(0,ie.stringToNameNode)(B.INTERFACE_OBJECT),repeatable:!1};Z.LINK_IMPORT_DEFINITION={kind:ue.Kind.SCALAR_TYPE_DEFINITION,name:(0,ie.stringToNameNode)(B.LINK_IMPORT)};Z.LINK_PURPOSE_DEFINITION={kind:ue.Kind.ENUM_TYPE_DEFINITION,name:(0,ie.stringToNameNode)(B.LINK_PURPOSE),values:[{directives:[],kind:ue.Kind.ENUM_VALUE_DEFINITION,name:(0,ie.stringToNameNode)(B.EXECUTION)},{directives:[],kind:ue.Kind.ENUM_VALUE_DEFINITION,name:(0,ie.stringToNameNode)(B.SECURITY)}]};Z.LINK_DEFINITION={arguments:[{kind:ue.Kind.INPUT_VALUE_DEFINITION,name:(0,ie.stringToNameNode)(B.URL_LOWER),type:{kind:ue.Kind.NON_NULL_TYPE,type:(0,ie.stringToNamedTypeNode)(B.STRING_SCALAR)}},{kind:ue.Kind.INPUT_VALUE_DEFINITION,name:(0,ie.stringToNameNode)(B.AS),type:(0,ie.stringToNamedTypeNode)(B.STRING_SCALAR)},{kind:ue.Kind.INPUT_VALUE_DEFINITION,name:(0,ie.stringToNameNode)(B.FOR),type:(0,ie.stringToNamedTypeNode)(B.LINK_PURPOSE)},{kind:ue.Kind.INPUT_VALUE_DEFINITION,name:(0,ie.stringToNameNode)(B.IMPORT),type:{kind:ue.Kind.LIST_TYPE,type:(0,ie.stringToNamedTypeNode)(B.LINK_IMPORT)}}],kind:ue.Kind.DIRECTIVE_DEFINITION,locations:(0,ie.stringArrayToNameNodeArray)([B.SCHEMA_UPPER]),name:(0,ie.stringToNameNode)(B.LINK),repeatable:!0};Z.OVERRIDE_DEFINITION={arguments:[{kind:ue.Kind.INPUT_VALUE_DEFINITION,name:(0,ie.stringToNameNode)(B.FROM),type:{kind:ue.Kind.NON_NULL_TYPE,type:(0,ie.stringToNamedTypeNode)(B.STRING_SCALAR)}}],kind:ue.Kind.DIRECTIVE_DEFINITION,locations:(0,ie.stringArrayToNameNodeArray)([B.FIELD_DEFINITION_UPPER]),name:(0,ie.stringToNameNode)(B.OVERRIDE),repeatable:!1};Z.REQUIRES_SCOPES_DEFINITION={arguments:[{directives:[],kind:ue.Kind.INPUT_VALUE_DEFINITION,name:(0,ie.stringToNameNode)(B.SCOPES),type:{kind:ue.Kind.NON_NULL_TYPE,type:{kind:ue.Kind.LIST_TYPE,type:{kind:ue.Kind.NON_NULL_TYPE,type:{kind:ue.Kind.LIST_TYPE,type:{kind:ue.Kind.NON_NULL_TYPE,type:(0,ie.stringToNamedTypeNode)(B.SCOPE_SCALAR)}}}}}}],kind:ue.Kind.DIRECTIVE_DEFINITION,locations:(0,ie.stringArrayToNameNodeArray)([B.ENUM_UPPER,B.FIELD_DEFINITION_UPPER,B.INTERFACE_UPPER,B.OBJECT_UPPER,B.SCALAR_UPPER]),name:(0,ie.stringToNameNode)(B.REQUIRES_SCOPES),repeatable:!1};Z.SHAREABLE_DEFINITION={kind:ue.Kind.DIRECTIVE_DEFINITION,locations:(0,ie.stringArrayToNameNodeArray)([B.FIELD_DEFINITION_UPPER,B.OBJECT_UPPER]),name:(0,ie.stringToNameNode)(B.SHAREABLE),repeatable:!0};Z.SUBSCRIPTION_FILTER_DEFINITION={arguments:[{kind:ue.Kind.INPUT_VALUE_DEFINITION,name:(0,ie.stringToNameNode)(B.CONDITION),type:{kind:ue.Kind.NON_NULL_TYPE,type:(0,ie.stringToNamedTypeNode)(B.SUBSCRIPTION_FILTER_CONDITION)}}],kind:ue.Kind.DIRECTIVE_DEFINITION,locations:(0,ie.stringArrayToNameNodeArray)([B.FIELD_DEFINITION_UPPER]),name:(0,ie.stringToNameNode)(B.SUBSCRIPTION_FILTER),repeatable:!1};Z.SUBSCRIPTION_FILTER_CONDITION_DEFINITION={fields:[{kind:ue.Kind.INPUT_VALUE_DEFINITION,name:(0,ie.stringToNameNode)(B.AND_UPPER),type:{kind:ue.Kind.LIST_TYPE,type:{kind:ue.Kind.NON_NULL_TYPE,type:(0,ie.stringToNamedTypeNode)(B.SUBSCRIPTION_FILTER_CONDITION)}}},{kind:ue.Kind.INPUT_VALUE_DEFINITION,name:(0,ie.stringToNameNode)(B.IN_UPPER),type:(0,ie.stringToNamedTypeNode)(B.SUBSCRIPTION_FIELD_CONDITION)},{kind:ue.Kind.INPUT_VALUE_DEFINITION,name:(0,ie.stringToNameNode)(B.OR_UPPER),type:{kind:ue.Kind.LIST_TYPE,type:{kind:ue.Kind.NON_NULL_TYPE,type:(0,ie.stringToNamedTypeNode)(B.SUBSCRIPTION_FILTER_CONDITION)}}},{kind:ue.Kind.INPUT_VALUE_DEFINITION,name:(0,ie.stringToNameNode)(B.NOT_UPPER),type:(0,ie.stringToNamedTypeNode)(B.SUBSCRIPTION_FILTER_CONDITION)}],kind:ue.Kind.INPUT_OBJECT_TYPE_DEFINITION,name:(0,ie.stringToNameNode)(B.SUBSCRIPTION_FILTER_CONDITION)};Z.SUBSCRIPTION_FILTER_VALUE_DEFINITION={kind:ue.Kind.SCALAR_TYPE_DEFINITION,name:(0,ie.stringToNameNode)(B.SUBSCRIPTION_FILTER_VALUE)};Z.SUBSCRIPTION_FIELD_CONDITION_DEFINITION={fields:[{kind:ue.Kind.INPUT_VALUE_DEFINITION,name:(0,ie.stringToNameNode)(B.FIELD_PATH),type:{kind:ue.Kind.NON_NULL_TYPE,type:(0,ie.stringToNamedTypeNode)(B.STRING_SCALAR)}},{kind:ue.Kind.INPUT_VALUE_DEFINITION,name:(0,ie.stringToNameNode)(B.VALUES),type:{kind:ue.Kind.NON_NULL_TYPE,type:{kind:ue.Kind.LIST_TYPE,type:(0,ie.stringToNamedTypeNode)(B.SUBSCRIPTION_FILTER_VALUE)}}}],kind:ue.Kind.INPUT_OBJECT_TYPE_DEFINITION,name:(0,ie.stringToNameNode)(B.SUBSCRIPTION_FIELD_CONDITION)};Z.V2_DIRECTIVE_DEFINITION_BY_DIRECTIVE_NAME=new Map([[B.AUTHENTICATED,Z.AUTHENTICATED_DEFINITION],[B.COMPOSE_DIRECTIVE,Z.COMPOSE_DIRECTIVE_DEFINITION],[B.INACCESSIBLE,Z.INACCESSIBLE_DEFINITION],[B.INTERFACE_OBJECT,Z.INTERFACE_OBJECT_DEFINITION],[B.LINK,Z.LINK_DEFINITION],[B.OVERRIDE,Z.OVERRIDE_DEFINITION],[B.REQUIRES_SCOPES,Z.REQUIRES_SCOPES_DEFINITION],[B.SHAREABLE,Z.SHAREABLE_DEFINITION]]);Z.BASE_DIRECTIVE_DEFINITIONS=[Z.DEPRECATED_DEFINITION,Z.EXTENDS_DEFINITION,Z.EXTERNAL_DEFINITION,Z.KEY_DEFINITION,Z.PROVIDES_DEFINITION,Z.REQUIRES_DEFINITION,Z.SPECIFIED_BY_DEFINITION,Z.TAG_DEFINITION];Z.EVENT_DRIVEN_DIRECTIVE_DEFINITIONS_BY_DIRECTIVE_NAME=new Map([[B.EDFS_KAFKA_PUBLISH,Z.EDFS_KAFKA_PUBLISH_DEFINITION],[B.EDFS_KAFKA_SUBSCRIBE,Z.EDFS_KAFKA_SUBSCRIBE_DEFINITION],[B.EDFS_NATS_PUBLISH,Z.EDFS_NATS_PUBLISH_DEFINITION],[B.EDFS_NATS_REQUEST,Z.EDFS_NATS_REQUEST_DEFINITION],[B.EDFS_NATS_SUBSCRIBE,Z.EDFS_NATS_SUBSCRIBE_DEFINITION],[B.EDFS_REDIS_PUBLISH,Z.EDFS_REDIS_PUBLISH_DEFINITION],[B.EDFS_REDIS_SUBSCRIBE,Z.EDFS_REDIS_SUBSCRIBE_DEFINITION]]);Z.VERSION_TWO_DIRECTIVE_DEFINITIONS=[Z.AUTHENTICATED_DEFINITION,Z.COMPOSE_DIRECTIVE_DEFINITION,Z.INACCESSIBLE_DEFINITION,Z.INTERFACE_OBJECT_DEFINITION,Z.OVERRIDE_DEFINITION,Z.REQUIRES_SCOPES_DEFINITION,Z.SHAREABLE_DEFINITION];Z.FIELD_SET_SCALAR_DEFINITION={kind:ue.Kind.SCALAR_TYPE_DEFINITION,name:(0,ie.stringToNameNode)(B.FIELD_SET_SCALAR)};Z.SCOPE_SCALAR_DEFINITION={kind:ue.Kind.SCALAR_TYPE_DEFINITION,name:(0,ie.stringToNameNode)(B.SCOPE_SCALAR)};Z.EDFS_NATS_STREAM_CONFIGURATION_DEFINITION={kind:ue.Kind.INPUT_OBJECT_TYPE_DEFINITION,name:(0,ie.stringToNameNode)(B.EDFS_NATS_STREAM_CONFIGURATION),fields:[{kind:ue.Kind.INPUT_VALUE_DEFINITION,name:(0,ie.stringToNameNode)(B.CONSUMER_NAME),type:{kind:ue.Kind.NON_NULL_TYPE,type:(0,ie.stringToNamedTypeNode)(B.STRING_SCALAR)}},{kind:ue.Kind.INPUT_VALUE_DEFINITION,name:(0,ie.stringToNameNode)(B.STREAM_NAME),type:{kind:ue.Kind.NON_NULL_TYPE,type:(0,ie.stringToNamedTypeNode)(B.STRING_SCALAR)}},{kind:ue.Kind.INPUT_VALUE_DEFINITION,name:(0,ie.stringToNameNode)(B.CONSUMER_INACTIVE_THRESHOLD),type:{kind:ue.Kind.NON_NULL_TYPE,type:(0,ie.stringToNamedTypeNode)(B.INT_SCALAR)},defaultValue:{kind:ue.Kind.INT,value:$Z.DEFAULT_CONSUMER_INACTIVE_THRESHOLD.toString()}}]};Z.CONFIGURE_DESCRIPTION_DEFINITION={arguments:[{directives:[],kind:ue.Kind.INPUT_VALUE_DEFINITION,name:(0,ie.stringToNameNode)(B.PROPAGATE),type:{kind:ue.Kind.NON_NULL_TYPE,type:(0,ie.stringToNamedTypeNode)(B.BOOLEAN_SCALAR)},defaultValue:{kind:ue.Kind.BOOLEAN,value:!0}},{directives:[],kind:ue.Kind.INPUT_VALUE_DEFINITION,name:(0,ie.stringToNameNode)(B.DESCRIPTION_OVERRIDE),type:(0,ie.stringToNamedTypeNode)(B.STRING_SCALAR)}],kind:ue.Kind.DIRECTIVE_DEFINITION,locations:(0,ie.stringArrayToNameNodeArray)([B.ARGUMENT_DEFINITION_UPPER,B.ENUM_UPPER,B.ENUM_VALUE_UPPER,B.FIELD_DEFINITION_UPPER,B.INTERFACE_UPPER,B.INPUT_OBJECT_UPPER,B.INPUT_FIELD_DEFINITION_UPPER,B.OBJECT_UPPER,B.SCALAR_UPPER,B.SCHEMA_UPPER,B.UNION_UPPER]),name:(0,ie.stringToNameNode)(B.CONFIGURE_DESCRIPTION),repeatable:!1};Z.CONFIGURE_CHILD_DESCRIPTIONS_DEFINITION={arguments:[{directives:[],kind:ue.Kind.INPUT_VALUE_DEFINITION,name:(0,ie.stringToNameNode)(B.PROPAGATE),type:{kind:ue.Kind.NON_NULL_TYPE,type:(0,ie.stringToNamedTypeNode)(B.BOOLEAN_SCALAR)},defaultValue:{kind:ue.Kind.BOOLEAN,value:!0}}],kind:ue.Kind.DIRECTIVE_DEFINITION,locations:(0,ie.stringArrayToNameNodeArray)([B.ENUM_UPPER,B.INPUT_OBJECT_UPPER,B.INTERFACE_UPPER,B.OBJECT_UPPER]),name:(0,ie.stringToNameNode)(B.CONFIGURE_CHILD_DESCRIPTIONS),repeatable:!1};Z.EDFS_ARGS_REGEXP=/{{\s*args\.([a-zA-Z0-9_]+)\s*}}/g;Z.MAX_OR_SCOPES=16});var EN=w(Gu=>{"use strict";f();N();m();Object.defineProperty(Gu,"__esModule",{value:!0});Gu.newParentTagData=HZ;Gu.newChildTagData=zZ;Gu.validateImplicitFieldSets=WZ;Gu.newContractTagOptionsFromArrays=XZ;Gu.getDescriptionFromString=ZZ;var QZ=Jo(),zr=Ae(),YZ=hs(),JZ=Jr(),zL=Hr();function HZ(e){return{childTagDataByChildName:new Map,tagNames:new Set,typeName:e}}function zZ(e){return{name:e,tagNames:new Set,tagNamesByArgumentName:new Map}}function WZ({conditionalFieldDataByCoords:e,currentSubgraphName:t,entityData:n,implicitKeys:r,objectData:i,parentDefinitionDataByTypeName:a,graphNode:o}){let c=(0,zL.getValueOrDefault)(n.keyFieldSetDatasBySubgraphName,t,()=>new Map);for(let[l,p]of n.documentNodeByKeyFieldSet){if(c.has(l))continue;let T=[i],y=[],g=[],_=-1,F=!0,U=!0;(0,zr.visit)(p,{Argument:{enter(){return U=!1,zr.BREAK}},Field:{enter(K){let J=T[_];if(F)return U=!1,zr.BREAK;let ee=K.name.value,W=J.fieldDataByFieldName.get(ee);if(!W||W.argumentDataByArgumentName.size||y[_].has(ee))return U=!1,zr.BREAK;let{isUnconditionallyProvided:Te}=(0,zL.getOrThrowError)(W.externalFieldDataBySubgraphName,t,`${W.originalParentTypeName}.${ee}.externalFieldDataBySubgraphName`),de=e.get(`${W.renamedParentTypeName}.${ee}`);if(de){if(de.providedBy.length>0)g.push(...de.providedBy);else if(de.requiredBy.length>0)return U=!1,zr.BREAK}else if(!Te)return U=!1,zr.BREAK;y[_].add(ee);let we=(0,QZ.getTypeNodeNamedTypeName)(W.node.type);if(YZ.BASE_SCALARS.has(we))return;let qe=a.get(we);if(!qe)return U=!1,zr.BREAK;if(qe.kind===zr.Kind.OBJECT_TYPE_DEFINITION){F=!0,T.push(qe);return}if((0,JZ.isKindAbstract)(qe.kind))return U=!1,zr.BREAK}},InlineFragment:{enter(){return U=!1,zr.BREAK}},SelectionSet:{enter(){if(!F||(_+=1,F=!1,_<0||_>=T.length))return U=!1,zr.BREAK;y.push(new Set)},leave(){if(F)return U=!1,zr.BREAK;_-=1,T.pop(),y.pop()}}}),U&&(r.push(Q(M({fieldName:"",selectionSet:l},g.length>0?{conditions:g}:{}),{disableEntityResolver:!0})),o&&o.satisfiedFieldSets.add(l))}}function XZ(e,t){return{tagNamesToExclude:new Set(e),tagNamesToInclude:new Set(t)}}function ZZ(e){if(e)return{block:!0,kind:zr.Kind.STRING,value:e}}});var np=w(Ui=>{"use strict";f();N();m();Object.defineProperty(Ui,"__esModule",{value:!0});Ui.SUBSCRIPTION_FILTER_LIST_INPUT_NAMES=Ui.SUBSCRIPTION_FILTER_INPUT_NAMES=Ui.STREAM_CONFIGURATION_FIELD_NAMES=Ui.EVENT_DIRECTIVE_NAMES=Ui.TYPE_SYSTEM_DIRECTIVE_LOCATIONS=void 0;var cn=lr();Ui.TYPE_SYSTEM_DIRECTIVE_LOCATIONS=new Set([cn.ARGUMENT_DEFINITION_UPPER,cn.ENUM_UPPER,cn.ENUM_VALUE_UPPER,cn.FIELD_DEFINITION_UPPER,cn.INPUT_FIELD_DEFINITION_UPPER,cn.INPUT_OBJECT_UPPER,cn.INTERFACE_UPPER,cn.OBJECT_UPPER,cn.SCALAR_UPPER,cn.SCHEMA_UPPER,cn.UNION_UPPER]);Ui.EVENT_DIRECTIVE_NAMES=new Set([cn.EDFS_KAFKA_PUBLISH,cn.EDFS_KAFKA_SUBSCRIBE,cn.EDFS_NATS_PUBLISH,cn.EDFS_NATS_REQUEST,cn.EDFS_NATS_SUBSCRIBE,cn.EDFS_REDIS_PUBLISH,cn.EDFS_REDIS_SUBSCRIBE]);Ui.STREAM_CONFIGURATION_FIELD_NAMES=new Set([cn.CONSUMER_INACTIVE_THRESHOLD,cn.CONSUMER_NAME,cn.STREAM_NAME]);Ui.SUBSCRIPTION_FILTER_INPUT_NAMES=new Set([cn.AND_UPPER,cn.IN_UPPER,cn.NOT_UPPER,cn.OR_UPPER]);Ui.SUBSCRIPTION_FILTER_LIST_INPUT_NAMES=new Set([cn.AND_UPPER,cn.OR_UPPER])});var ki=w((Z_,WL)=>{"use strict";f();N();m();var rp=function(e){return e&&e.Math===Math&&e};WL.exports=rp(typeof globalThis=="object"&&globalThis)||rp(typeof window=="object"&&window)||rp(typeof self=="object"&&self)||rp(typeof global=="object"&&global)||rp(typeof Z_=="object"&&Z_)||function(){return this}()||Function("return this")()});var ys=w((qge,XL)=>{"use strict";f();N();m();XL.exports=function(e){try{return!!e()}catch(t){return!0}}});var Ho=w((Gge,ZL)=>{"use strict";f();N();m();var eee=ys();ZL.exports=!eee(function(){return Object.defineProperty({},1,{get:function(){return 7}})[1]!==7})});var ev=w((Jge,eC)=>{"use strict";f();N();m();var tee=ys();eC.exports=!tee(function(){var e=function(){}.bind();return typeof e!="function"||e.hasOwnProperty("prototype")})});var $u=w((Xge,tC)=>{"use strict";f();N();m();var nee=ev(),hN=Function.prototype.call;tC.exports=nee?hN.bind(hN):function(){return hN.apply(hN,arguments)}});var aC=w(iC=>{"use strict";f();N();m();var nC={}.propertyIsEnumerable,rC=Object.getOwnPropertyDescriptor,ree=rC&&!nC.call({1:2},1);iC.f=ree?function(t){var n=rC(this,t);return!!n&&n.enumerable}:nC});var tv=w((s_e,sC)=>{"use strict";f();N();m();sC.exports=function(e,t){return{enumerable:!(e&1),configurable:!(e&2),writable:!(e&4),value:t}}});var fi=w((l_e,cC)=>{"use strict";f();N();m();var oC=ev(),uC=Function.prototype,nv=uC.call,iee=oC&&uC.bind.bind(nv,nv);cC.exports=oC?iee:function(e){return function(){return nv.apply(e,arguments)}}});var pC=w((m_e,dC)=>{"use strict";f();N();m();var lC=fi(),aee=lC({}.toString),see=lC("".slice);dC.exports=function(e){return see(aee(e),8,-1)}});var mC=w((h_e,fC)=>{"use strict";f();N();m();var oee=fi(),uee=ys(),cee=pC(),rv=Object,lee=oee("".split);fC.exports=uee(function(){return!rv("z").propertyIsEnumerable(0)})?function(e){return cee(e)==="String"?lee(e,""):rv(e)}:rv});var iv=w((__e,NC)=>{"use strict";f();N();m();NC.exports=function(e){return e==null}});var av=w((D_e,TC)=>{"use strict";f();N();m();var dee=iv(),pee=TypeError;TC.exports=function(e){if(dee(e))throw new pee("Can't call method on "+e);return e}});var yN=w((F_e,EC)=>{"use strict";f();N();m();var fee=mC(),mee=av();EC.exports=function(e){return fee(mee(e))}});var oa=w((C_e,hC)=>{"use strict";f();N();m();var sv=typeof document=="object"&&document.all;hC.exports=typeof sv=="undefined"&&sv!==void 0?function(e){return typeof e=="function"||e===sv}:function(e){return typeof e=="function"}});var il=w((M_e,yC)=>{"use strict";f();N();m();var Nee=oa();yC.exports=function(e){return typeof e=="object"?e!==null:Nee(e)}});var IN=w((j_e,IC)=>{"use strict";f();N();m();var ov=ki(),Tee=oa(),Eee=function(e){return Tee(e)?e:void 0};IC.exports=function(e,t){return arguments.length<2?Eee(ov[e]):ov[e]&&ov[e][t]}});var _C=w((Q_e,gC)=>{"use strict";f();N();m();var hee=fi();gC.exports=hee({}.isPrototypeOf)});var DC=w((z_e,OC)=>{"use strict";f();N();m();var yee=ki(),vC=yee.navigator,SC=vC&&vC.userAgent;OC.exports=SC?String(SC):""});var LC=w((eve,wC)=>{"use strict";f();N();m();var PC=ki(),uv=DC(),bC=PC.process,AC=PC.Deno,RC=bC&&bC.versions||AC&&AC.version,FC=RC&&RC.v8,ua,gN;FC&&(ua=FC.split("."),gN=ua[0]>0&&ua[0]<4?1:+(ua[0]+ua[1]));!gN&&uv&&(ua=uv.match(/Edge\/(\d+)/),(!ua||ua[1]>=74)&&(ua=uv.match(/Chrome\/(\d+)/),ua&&(gN=+ua[1])));wC.exports=gN});var cv=w((ive,BC)=>{"use strict";f();N();m();var CC=LC(),Iee=ys(),gee=ki(),_ee=gee.String;BC.exports=!!Object.getOwnPropertySymbols&&!Iee(function(){var e=Symbol("symbol detection");return!_ee(e)||!(Object(e)instanceof Symbol)||!Symbol.sham&&CC&&CC<41})});var lv=w((uve,UC)=>{"use strict";f();N();m();var vee=cv();UC.exports=vee&&!Symbol.sham&&typeof Symbol.iterator=="symbol"});var dv=w((pve,kC)=>{"use strict";f();N();m();var See=IN(),Oee=oa(),Dee=_C(),bee=lv(),Aee=Object;kC.exports=bee?function(e){return typeof e=="symbol"}:function(e){var t=See("Symbol");return Oee(t)&&Dee(t.prototype,Aee(e))}});var xC=w((Tve,MC)=>{"use strict";f();N();m();var Ree=String;MC.exports=function(e){try{return Ree(e)}catch(t){return"Object"}}});var _N=w((Ive,qC)=>{"use strict";f();N();m();var Fee=oa(),Pee=xC(),wee=TypeError;qC.exports=function(e){if(Fee(e))return e;throw new wee(Pee(e)+" is not a function")}});var pv=w((Sve,VC)=>{"use strict";f();N();m();var Lee=_N(),Cee=iv();VC.exports=function(e,t){var n=e[t];return Cee(n)?void 0:Lee(n)}});var KC=w((Ave,jC)=>{"use strict";f();N();m();var fv=$u(),mv=oa(),Nv=il(),Bee=TypeError;jC.exports=function(e,t){var n,r;if(t==="string"&&mv(n=e.toString)&&!Nv(r=fv(n,e))||mv(n=e.valueOf)&&!Nv(r=fv(n,e))||t!=="string"&&mv(n=e.toString)&&!Nv(r=fv(n,e)))return r;throw new Bee("Can't convert object to primitive value")}});var $C=w((wve,GC)=>{"use strict";f();N();m();GC.exports=!1});var vN=w((Uve,YC)=>{"use strict";f();N();m();var QC=ki(),Uee=Object.defineProperty;YC.exports=function(e,t){try{Uee(QC,e,{value:t,configurable:!0,writable:!0})}catch(n){QC[e]=t}return t}});var SN=w((qve,zC)=>{"use strict";f();N();m();var kee=$C(),Mee=ki(),xee=vN(),JC="__core-js_shared__",HC=zC.exports=Mee[JC]||xee(JC,{});(HC.versions||(HC.versions=[])).push({version:"3.41.0",mode:kee?"pure":"global",copyright:"\xA9 2014-2025 Denis Pushkarev (zloirock.ru)",license:"https://github.com/zloirock/core-js/blob/v3.41.0/LICENSE",source:"https://github.com/zloirock/core-js"})});var Tv=w((Gve,XC)=>{"use strict";f();N();m();var WC=SN();XC.exports=function(e,t){return WC[e]||(WC[e]=t||{})}});var eB=w((Jve,ZC)=>{"use strict";f();N();m();var qee=av(),Vee=Object;ZC.exports=function(e){return Vee(qee(e))}});var zo=w((Xve,tB)=>{"use strict";f();N();m();var jee=fi(),Kee=eB(),Gee=jee({}.hasOwnProperty);tB.exports=Object.hasOwn||function(t,n){return Gee(Kee(t),n)}});var Ev=w((nSe,nB)=>{"use strict";f();N();m();var $ee=fi(),Qee=0,Yee=Math.random(),Jee=$ee(1 .toString);nB.exports=function(e){return"Symbol("+(e===void 0?"":e)+")_"+Jee(++Qee+Yee,36)}});var aB=w((sSe,iB)=>{"use strict";f();N();m();var Hee=ki(),zee=Tv(),rB=zo(),Wee=Ev(),Xee=cv(),Zee=lv(),al=Hee.Symbol,hv=zee("wks"),ete=Zee?al.for||al:al&&al.withoutSetter||Wee;iB.exports=function(e){return rB(hv,e)||(hv[e]=Xee&&rB(al,e)?al[e]:ete("Symbol."+e)),hv[e]}});var cB=w((lSe,uB)=>{"use strict";f();N();m();var tte=$u(),sB=il(),oB=dv(),nte=pv(),rte=KC(),ite=aB(),ate=TypeError,ste=ite("toPrimitive");uB.exports=function(e,t){if(!sB(e)||oB(e))return e;var n=nte(e,ste),r;if(n){if(t===void 0&&(t="default"),r=tte(n,e,t),!sB(r)||oB(r))return r;throw new ate("Can't convert object to primitive value")}return t===void 0&&(t="number"),rte(e,t)}});var yv=w((mSe,lB)=>{"use strict";f();N();m();var ote=cB(),ute=dv();lB.exports=function(e){var t=ote(e,"string");return ute(t)?t:t+""}});var fB=w((hSe,pB)=>{"use strict";f();N();m();var cte=ki(),dB=il(),Iv=cte.document,lte=dB(Iv)&&dB(Iv.createElement);pB.exports=function(e){return lte?Iv.createElement(e):{}}});var gv=w((_Se,mB)=>{"use strict";f();N();m();var dte=Ho(),pte=ys(),fte=fB();mB.exports=!dte&&!pte(function(){return Object.defineProperty(fte("div"),"a",{get:function(){return 7}}).a!==7})});var _v=w(TB=>{"use strict";f();N();m();var mte=Ho(),Nte=$u(),Tte=aC(),Ete=tv(),hte=yN(),yte=yv(),Ite=zo(),gte=gv(),NB=Object.getOwnPropertyDescriptor;TB.f=mte?NB:function(t,n){if(t=hte(t),n=yte(n),gte)try{return NB(t,n)}catch(r){}if(Ite(t,n))return Ete(!Nte(Tte.f,t,n),t[n])}});var hB=w((FSe,EB)=>{"use strict";f();N();m();var _te=Ho(),vte=ys();EB.exports=_te&&vte(function(){return Object.defineProperty(function(){},"prototype",{value:42,writable:!1}).prototype!==42})});var ip=w((CSe,yB)=>{"use strict";f();N();m();var Ste=il(),Ote=String,Dte=TypeError;yB.exports=function(e){if(Ste(e))return e;throw new Dte(Ote(e)+" is not an object")}});var DN=w(gB=>{"use strict";f();N();m();var bte=Ho(),Ate=gv(),Rte=hB(),ON=ip(),IB=yv(),Fte=TypeError,vv=Object.defineProperty,Pte=Object.getOwnPropertyDescriptor,Sv="enumerable",Ov="configurable",Dv="writable";gB.f=bte?Rte?function(t,n,r){if(ON(t),n=IB(n),ON(r),typeof t=="function"&&n==="prototype"&&"value"in r&&Dv in r&&!r[Dv]){var i=Pte(t,n);i&&i[Dv]&&(t[n]=r.value,r={configurable:Ov in r?r[Ov]:i[Ov],enumerable:Sv in r?r[Sv]:i[Sv],writable:!1})}return vv(t,n,r)}:vv:function(t,n,r){if(ON(t),n=IB(n),ON(r),Ate)try{return vv(t,n,r)}catch(i){}if("get"in r||"set"in r)throw new Fte("Accessors not supported");return"value"in r&&(t[n]=r.value),t}});var bv=w((jSe,_B)=>{"use strict";f();N();m();var wte=Ho(),Lte=DN(),Cte=tv();_B.exports=wte?function(e,t,n){return Lte.f(e,t,Cte(1,n))}:function(e,t,n){return e[t]=n,e}});var OB=w((QSe,SB)=>{"use strict";f();N();m();var Av=Ho(),Bte=zo(),vB=Function.prototype,Ute=Av&&Object.getOwnPropertyDescriptor,Rv=Bte(vB,"name"),kte=Rv&&function(){}.name==="something",Mte=Rv&&(!Av||Av&&Ute(vB,"name").configurable);SB.exports={EXISTS:Rv,PROPER:kte,CONFIGURABLE:Mte}});var bB=w((zSe,DB)=>{"use strict";f();N();m();var xte=fi(),qte=oa(),Fv=SN(),Vte=xte(Function.toString);qte(Fv.inspectSource)||(Fv.inspectSource=function(e){return Vte(e)});DB.exports=Fv.inspectSource});var FB=w((eOe,RB)=>{"use strict";f();N();m();var jte=ki(),Kte=oa(),AB=jte.WeakMap;RB.exports=Kte(AB)&&/native code/.test(String(AB))});var LB=w((iOe,wB)=>{"use strict";f();N();m();var Gte=Tv(),$te=Ev(),PB=Gte("keys");wB.exports=function(e){return PB[e]||(PB[e]=$te(e))}});var Pv=w((uOe,CB)=>{"use strict";f();N();m();CB.exports={}});var MB=w((pOe,kB)=>{"use strict";f();N();m();var Qte=FB(),UB=ki(),Yte=il(),Jte=bv(),wv=zo(),Lv=SN(),Hte=LB(),zte=Pv(),BB="Object already initialized",Cv=UB.TypeError,Wte=UB.WeakMap,bN,ap,AN,Xte=function(e){return AN(e)?ap(e):bN(e,{})},Zte=function(e){return function(t){var n;if(!Yte(t)||(n=ap(t)).type!==e)throw new Cv("Incompatible receiver, "+e+" required");return n}};Qte||Lv.state?(ca=Lv.state||(Lv.state=new Wte),ca.get=ca.get,ca.has=ca.has,ca.set=ca.set,bN=function(e,t){if(ca.has(e))throw new Cv(BB);return t.facade=e,ca.set(e,t),t},ap=function(e){return ca.get(e)||{}},AN=function(e){return ca.has(e)}):(Qu=Hte("state"),zte[Qu]=!0,bN=function(e,t){if(wv(e,Qu))throw new Cv(BB);return t.facade=e,Jte(e,Qu,t),t},ap=function(e){return wv(e,Qu)?e[Qu]:{}},AN=function(e){return wv(e,Qu)});var ca,Qu;kB.exports={set:bN,get:ap,has:AN,enforce:Xte,getterFor:Zte}});var jB=w((TOe,VB)=>{"use strict";f();N();m();var Uv=fi(),ene=ys(),tne=oa(),RN=zo(),Bv=Ho(),nne=OB().CONFIGURABLE,rne=bB(),qB=MB(),ine=qB.enforce,ane=qB.get,xB=String,FN=Object.defineProperty,sne=Uv("".slice),one=Uv("".replace),une=Uv([].join),cne=Bv&&!ene(function(){return FN(function(){},"length",{value:8}).length!==8}),lne=String(String).split("String"),dne=VB.exports=function(e,t,n){sne(xB(t),0,7)==="Symbol("&&(t="["+one(xB(t),/^Symbol\(([^)]*)\).*$/,"$1")+"]"),n&&n.getter&&(t="get "+t),n&&n.setter&&(t="set "+t),(!RN(e,"name")||nne&&e.name!==t)&&(Bv?FN(e,"name",{value:t,configurable:!0}):e.name=t),cne&&n&&RN(n,"arity")&&e.length!==n.arity&&FN(e,"length",{value:n.arity});try{n&&RN(n,"constructor")&&n.constructor?Bv&&FN(e,"prototype",{writable:!1}):e.prototype&&(e.prototype=void 0)}catch(i){}var r=ine(e);return RN(r,"source")||(r.source=une(lne,typeof t=="string"?t:"")),e};Function.prototype.toString=dne(function(){return tne(this)&&ane(this).source||rne(this)},"toString")});var GB=w((IOe,KB)=>{"use strict";f();N();m();var pne=oa(),fne=DN(),mne=jB(),Nne=vN();KB.exports=function(e,t,n,r){r||(r={});var i=r.enumerable,a=r.name!==void 0?r.name:t;if(pne(n)&&mne(n,a,r),r.global)i?e[t]=n:Nne(t,n);else{try{r.unsafe?e[t]&&(i=!0):delete e[t]}catch(o){}i?e[t]=n:fne.f(e,t,{value:n,enumerable:!1,configurable:!r.nonConfigurable,writable:!r.nonWritable})}return e}});var QB=w((SOe,$B)=>{"use strict";f();N();m();var Tne=Math.ceil,Ene=Math.floor;$B.exports=Math.trunc||function(t){var n=+t;return(n>0?Ene:Tne)(n)}});var PN=w((AOe,YB)=>{"use strict";f();N();m();var hne=QB();YB.exports=function(e){var t=+e;return t!==t||t===0?0:hne(t)}});var HB=w((wOe,JB)=>{"use strict";f();N();m();var yne=PN(),Ine=Math.max,gne=Math.min;JB.exports=function(e,t){var n=yne(e);return n<0?Ine(n+t,0):gne(n,t)}});var WB=w((UOe,zB)=>{"use strict";f();N();m();var _ne=PN(),vne=Math.min;zB.exports=function(e){var t=_ne(e);return t>0?vne(t,9007199254740991):0}});var ZB=w((qOe,XB)=>{"use strict";f();N();m();var Sne=WB();XB.exports=function(e){return Sne(e.length)}});var nU=w((GOe,tU)=>{"use strict";f();N();m();var One=yN(),Dne=HB(),bne=ZB(),eU=function(e){return function(t,n,r){var i=One(t),a=bne(i);if(a===0)return!e&&-1;var o=Dne(r,a),c;if(e&&n!==n){for(;a>o;)if(c=i[o++],c!==c)return!0}else for(;a>o;o++)if((e||o in i)&&i[o]===n)return e||o||0;return!e&&-1}};tU.exports={includes:eU(!0),indexOf:eU(!1)}});var aU=w((JOe,iU)=>{"use strict";f();N();m();var Ane=fi(),kv=zo(),Rne=yN(),Fne=nU().indexOf,Pne=Pv(),rU=Ane([].push);iU.exports=function(e,t){var n=Rne(e),r=0,i=[],a;for(a in n)!kv(Pne,a)&&kv(n,a)&&rU(i,a);for(;t.length>r;)kv(n,a=t[r++])&&(~Fne(i,a)||rU(i,a));return i}});var oU=w((XOe,sU)=>{"use strict";f();N();m();sU.exports=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"]});var cU=w(uU=>{"use strict";f();N();m();var wne=aU(),Lne=oU(),Cne=Lne.concat("length","prototype");uU.f=Object.getOwnPropertyNames||function(t){return wne(t,Cne)}});var dU=w(lU=>{"use strict";f();N();m();lU.f=Object.getOwnPropertySymbols});var fU=w((lDe,pU)=>{"use strict";f();N();m();var Bne=IN(),Une=fi(),kne=cU(),Mne=dU(),xne=ip(),qne=Une([].concat);pU.exports=Bne("Reflect","ownKeys")||function(t){var n=kne.f(xne(t)),r=Mne.f;return r?qne(n,r(t)):n}});var TU=w((mDe,NU)=>{"use strict";f();N();m();var mU=zo(),Vne=fU(),jne=_v(),Kne=DN();NU.exports=function(e,t,n){for(var r=Vne(t),i=Kne.f,a=jne.f,o=0;o{"use strict";f();N();m();var Gne=ys(),$ne=oa(),Qne=/#|\.prototype\./,sp=function(e,t){var n=Jne[Yne(e)];return n===zne?!0:n===Hne?!1:$ne(t)?Gne(t):!!t},Yne=sp.normalize=function(e){return String(e).replace(Qne,".").toLowerCase()},Jne=sp.data={},Hne=sp.NATIVE="N",zne=sp.POLYFILL="P";EU.exports=sp});var Mv=w((_De,yU)=>{"use strict";f();N();m();var wN=ki(),Wne=_v().f,Xne=bv(),Zne=GB(),ere=vN(),tre=TU(),nre=hU();yU.exports=function(e,t){var n=e.target,r=e.global,i=e.stat,a,o,c,l,p,T;if(r?o=wN:i?o=wN[n]||ere(n,{}):o=wN[n]&&wN[n].prototype,o)for(c in t){if(p=t[c],e.dontCallGetSet?(T=Wne(o,c),l=T&&T.value):l=o[c],a=nre(r?c:n+(i?".":"#")+c,e.forced),!a&&l!==void 0){if(typeof p==typeof l)continue;tre(p,l)}(e.sham||l&&l.sham)&&Xne(p,"sham",!0),Zne(o,c,p,e)}}});var op=w((DDe,IU)=>{"use strict";f();N();m();var xv=fi(),LN=Set.prototype;IU.exports={Set,add:xv(LN.add),has:xv(LN.has),remove:xv(LN.delete),proto:LN}});var qv=w((FDe,gU)=>{"use strict";f();N();m();var rre=op().has;gU.exports=function(e){return rre(e),e}});var vU=w((CDe,_U)=>{"use strict";f();N();m();var ire=fi(),are=_N();_U.exports=function(e,t,n){try{return ire(are(Object.getOwnPropertyDescriptor(e,t)[n]))}catch(r){}}});var Vv=w((MDe,SU)=>{"use strict";f();N();m();var sre=vU(),ore=op();SU.exports=sre(ore.proto,"size","get")||function(e){return e.size}});var jv=w((jDe,OU)=>{"use strict";f();N();m();var ure=$u();OU.exports=function(e,t,n){for(var r=n?e:e.iterator,i=e.next,a,o;!(a=ure(i,r)).done;)if(o=t(a.value),o!==void 0)return o}});var PU=w((QDe,FU)=>{"use strict";f();N();m();var DU=fi(),cre=jv(),bU=op(),lre=bU.Set,AU=bU.proto,dre=DU(AU.forEach),RU=DU(AU.keys),pre=RU(new lre).next;FU.exports=function(e,t,n){return n?cre({iterator:RU(e),next:pre},t):dre(e,t)}});var LU=w((zDe,wU)=>{"use strict";f();N();m();wU.exports=function(e){return{iterator:e,next:e.next,done:!1}}});var Kv=w((ebe,xU)=>{"use strict";f();N();m();var CU=_N(),kU=ip(),BU=$u(),fre=PN(),mre=LU(),UU="Invalid size",Nre=RangeError,Tre=TypeError,Ere=Math.max,MU=function(e,t){this.set=e,this.size=Ere(t,0),this.has=CU(e.has),this.keys=CU(e.keys)};MU.prototype={getIterator:function(){return mre(kU(BU(this.keys,this.set)))},includes:function(e){return BU(this.has,this.set,e)}};xU.exports=function(e){kU(e);var t=+e.size;if(t!==t)throw new Tre(UU);var n=fre(t);if(n<0)throw new Nre(UU);return new MU(e,n)}});var VU=w((ibe,qU)=>{"use strict";f();N();m();var hre=qv(),yre=Vv(),Ire=PU(),gre=Kv();qU.exports=function(t){var n=hre(this),r=gre(t);return yre(n)>r.size?!1:Ire(n,function(i){if(!r.includes(i))return!1},!0)!==!1}});var Gv=w((ube,GU)=>{"use strict";f();N();m();var _re=IN(),jU=function(e){return{size:e,has:function(){return!1},keys:function(){return{next:function(){return{done:!0}}}}}},KU=function(e){return{size:e,has:function(){return!0},keys:function(){throw new Error("e")}}};GU.exports=function(e,t){var n=_re("Set");try{new n()[e](jU(0));try{return new n()[e](jU(-1)),!1}catch(i){if(!t)return!0;try{return new n()[e](KU(-1/0)),!1}catch(a){var r=new n;return r.add(1),r.add(2),t(r[e](KU(1/0)))}}}catch(i){return!1}}});var $U=w(()=>{"use strict";f();N();m();var vre=Mv(),Sre=VU(),Ore=Gv(),Dre=!Ore("isSubsetOf",function(e){return e});vre({target:"Set",proto:!0,real:!0,forced:Dre},{isSubsetOf:Sre})});var QU=w(()=>{"use strict";f();N();m();$U()});var HU=w((_be,JU)=>{"use strict";f();N();m();var bre=$u(),YU=ip(),Are=pv();JU.exports=function(e,t,n){var r,i;YU(e);try{if(r=Are(e,"return"),!r){if(t==="throw")throw n;return n}r=bre(r,e)}catch(a){i=!0,r=a}if(t==="throw")throw n;if(i)throw r;return YU(r),n}});var WU=w((Dbe,zU)=>{"use strict";f();N();m();var Rre=qv(),Fre=op().has,Pre=Vv(),wre=Kv(),Lre=jv(),Cre=HU();zU.exports=function(t){var n=Rre(this),r=wre(t);if(Pre(n){"use strict";f();N();m();var Bre=Mv(),Ure=WU(),kre=Gv(),Mre=!kre("isSupersetOf",function(e){return!e});Bre({target:"Set",proto:!0,real:!0,forced:Mre},{isSupersetOf:Ure})});var ZU=w(()=>{"use strict";f();N();m();XU()});var up=w(Cn=>{"use strict";f();N();m();Object.defineProperty(Cn,"__esModule",{value:!0});Cn.subtractSet=xre;Cn.mapToArrayOfValues=qre;Cn.kindToConvertedTypeString=Vre;Cn.fieldDatasToSimpleFieldDatas=jre;Cn.isNodeLeaf=Kre;Cn.newEntityInterfaceFederationData=Gre;Cn.upsertEntityInterfaceFederationData=$re;Cn.upsertEntityData=Yre;Cn.updateEntityData=ek;Cn.newFieldAuthorizationData=Jre;Cn.newAuthorizationData=Hre;Cn.addScopes=$v;Cn.mergeRequiredScopesByAND=UN;Cn.mergeRequiredScopesByOR=Qv;Cn.upsertFieldAuthorizationData=tk;Cn.upsertAuthorizationData=Xre;Cn.upsertAuthorizationConfiguration=Zre;Cn.isNodeKindObject=eie;Cn.isInterfaceDefinitionData=tie;Cn.isObjectDefinitionData=nie;var Zt=Ae(),Wr=lr(),CN=Hr(),BN=hs();QU();ZU();function xre(e,t){for(let n of e)t.delete(n)}function qre(e){let t=[];for(let n of e.values())t.push(n);return t}function Vre(e){switch(e){case Zt.Kind.BOOLEAN:return Wr.BOOLEAN_SCALAR;case Zt.Kind.ENUM:case Zt.Kind.ENUM_TYPE_DEFINITION:case Zt.Kind.ENUM_TYPE_EXTENSION:return Wr.ENUM;case Zt.Kind.ENUM_VALUE_DEFINITION:return Wr.ENUM_VALUE;case Zt.Kind.FIELD_DEFINITION:return Wr.FIELD;case Zt.Kind.FLOAT:return Wr.FLOAT_SCALAR;case Zt.Kind.INPUT_OBJECT_TYPE_DEFINITION:case Zt.Kind.INPUT_OBJECT_TYPE_EXTENSION:return Wr.INPUT_OBJECT;case Zt.Kind.INPUT_VALUE_DEFINITION:return Wr.INPUT_VALUE;case Zt.Kind.INT:return Wr.INT_SCALAR;case Zt.Kind.INTERFACE_TYPE_DEFINITION:case Zt.Kind.INTERFACE_TYPE_EXTENSION:return Wr.INTERFACE;case Zt.Kind.NULL:return Wr.NULL;case Zt.Kind.OBJECT:case Zt.Kind.OBJECT_TYPE_DEFINITION:case Zt.Kind.OBJECT_TYPE_EXTENSION:return Wr.OBJECT;case Zt.Kind.STRING:return Wr.STRING_SCALAR;case Zt.Kind.SCALAR_TYPE_DEFINITION:case Zt.Kind.SCALAR_TYPE_EXTENSION:return Wr.SCALAR;case Zt.Kind.UNION_TYPE_DEFINITION:case Zt.Kind.UNION_TYPE_EXTENSION:return Wr.UNION;default:return e}}function jre(e){let t=[];for(let{name:n,namedTypeName:r}of e)t.push({name:n,namedTypeName:r});return t}function Kre(e){if(!e)return!0;switch(e){case Zt.Kind.OBJECT_TYPE_DEFINITION:case Zt.Kind.INTERFACE_TYPE_DEFINITION:case Zt.Kind.UNION_TYPE_DEFINITION:return!1;default:return!0}}function Gre(e,t){return{concreteTypeNames:new Set(e.concreteTypeNames),fieldDatasBySubgraphName:new Map([[t,e.fieldDatas]]),interfaceFieldNames:new Set(e.interfaceFieldNames),interfaceObjectFieldNames:new Set(e.interfaceObjectFieldNames),interfaceObjectSubgraphs:new Set(e.isInterfaceObject?[t]:[]),subgraphDataByTypeName:new Map([[t,e]]),typeName:e.typeName}}function $re(e,t,n){(0,CN.addIterableValuesToSet)(t.concreteTypeNames,e.concreteTypeNames),e.subgraphDataByTypeName.set(n,t),e.fieldDatasBySubgraphName.set(n,t.fieldDatas),(0,CN.addIterableValuesToSet)(t.interfaceFieldNames,e.interfaceFieldNames),(0,CN.addIterableValuesToSet)(t.interfaceObjectFieldNames,e.interfaceObjectFieldNames),t.isInterfaceObject&&e.interfaceObjectSubgraphs.add(n)}function Qre({keyFieldSetDataByFieldSet:e,subgraphName:t,typeName:n}){let r=new Map([[t,e]]),i=new Map;for(let[a,{documentNode:o,isUnresolvable:c}]of e)c||i.set(a,o);return{keyFieldSetDatasBySubgraphName:r,documentNodeByKeyFieldSet:i,keyFieldSets:new Set,subgraphNames:new Set([t]),typeName:n}}function Yre({entityDataByTypeName:e,keyFieldSetDataByFieldSet:t,subgraphName:n,typeName:r}){let i=e.get(r);i?ek({entityData:i,keyFieldSetDataByFieldSet:t,subgraphName:n}):e.set(r,Qre({keyFieldSetDataByFieldSet:t,subgraphName:n,typeName:r}))}function ek({entityData:e,keyFieldSetDataByFieldSet:t,subgraphName:n}){e.subgraphNames.add(n);let r=e.keyFieldSetDatasBySubgraphName.get(n);if(!r){e.keyFieldSetDatasBySubgraphName.set(n,t);for(let[i,{documentNode:a,isUnresolvable:o}]of t)o||e.documentNodeByKeyFieldSet.set(i,a);return}for(let[i,a]of t){a.isUnresolvable||e.documentNodeByKeyFieldSet.set(i,a.documentNode);let o=r.get(i);if(o){o.isUnresolvable||(o.isUnresolvable=a.isUnresolvable);continue}r.set(i,a)}}function Jre(e){return{fieldName:e,inheritedData:{requiredScopes:[],requiredScopesByOR:[],requiresAuthentication:!1},originalData:{requiredScopes:[],requiresAuthentication:!1}}}function Hre(e){return{fieldAuthDataByFieldName:new Map,requiredScopes:[],requiredScopesByOR:[],requiresAuthentication:!1,typeName:e}}function $v(e,t){for(let n=e.length-1;n>-1;n--){if(e[n].isSubsetOf(t))return;e[n].isSupersetOf(t)&&e.splice(n,1)}e.push(t)}function UN(e,t){if(e.length<1||t.length<1){for(let r of t)e.push(new Set(r));return e}let n=[];for(let r of t)for(let i of e){let a=(0,CN.addSets)(r,i);$v(n,a)}return n}function Qv(e,t){for(let n of t)$v(e,n);return e.length<=BN.MAX_OR_SCOPES}function tk(e,t){var i,a;let n=t.fieldName,r=e.get(n);return r?((i=r.inheritedData).requiresAuthentication||(i.requiresAuthentication=t.inheritedData.requiresAuthentication),(a=r.originalData).requiresAuthentication||(a.requiresAuthentication=t.originalData.requiresAuthentication),!Qv(r.inheritedData.requiredScopesByOR,t.inheritedData.requiredScopes)||r.inheritedData.requiredScopes.length*t.inheritedData.requiredScopes.length>BN.MAX_OR_SCOPES||r.originalData.requiredScopes.length*t.originalData.requiredScopes.length>BN.MAX_OR_SCOPES?!1:(r.inheritedData.requiredScopes=UN(r.inheritedData.requiredScopes,t.inheritedData.requiredScopes),r.originalData.requiredScopes=UN(r.originalData.requiredScopes,t.originalData.requiredScopes),!0)):(e.set(n,nk(t)),!0)}function zre(e){let t=new Map;for(let[n,r]of e)t.set(n,nk(r));return t}function nk(e){return{fieldName:e.fieldName,inheritedData:{requiredScopes:[...e.inheritedData.requiredScopes],requiredScopesByOR:[...e.inheritedData.requiredScopes],requiresAuthentication:e.inheritedData.requiresAuthentication},originalData:{requiredScopes:[...e.originalData.requiredScopes],requiresAuthentication:e.originalData.requiresAuthentication}}}function Wre(e){return{fieldAuthDataByFieldName:zre(e.fieldAuthDataByFieldName),requiredScopes:[...e.requiredScopes],requiredScopesByOR:[...e.requiredScopes],requiresAuthentication:e.requiresAuthentication,typeName:e.typeName}}function Xre(e,t,n){let r=e.get(t.typeName);if(!r){e.set(t.typeName,Wre(t));return}r.requiresAuthentication||(r.requiresAuthentication=t.requiresAuthentication),!Qv(r.requiredScopesByOR,t.requiredScopes)||r.requiredScopes.length*t.requiredScopes.length>BN.MAX_OR_SCOPES?n.add(t.typeName):r.requiredScopes=UN(r.requiredScopes,t.requiredScopes);for(let[i,a]of t.fieldAuthDataByFieldName)tk(r.fieldAuthDataByFieldName,a)||n.add(`${t.typeName}.${i}`)}function Zre(e,t){let n=t.typeName;for(let[r,i]of t.fieldAuthDataByFieldName){let a=`${n}.${r}`,o=e.get(a);o?(o.requiresAuthentication=i.inheritedData.requiresAuthentication,o.requiredScopes=i.inheritedData.requiredScopes.map(c=>[...c]),o.requiredScopesByOR=i.inheritedData.requiredScopesByOR.map(c=>[...c])):e.set(a,{argumentNames:[],typeName:n,fieldName:r,requiresAuthentication:i.inheritedData.requiresAuthentication,requiredScopes:i.inheritedData.requiredScopes.map(c=>[...c]),requiredScopesByOR:i.inheritedData.requiredScopesByOR.map(c=>[...c])})}}function eie(e){return e===Zt.Kind.OBJECT_TYPE_DEFINITION||e===Zt.Kind.OBJECT_TYPE_EXTENSION}function tie(e){return e.kind===Zt.Kind.INTERFACE_TYPE_DEFINITION}function nie(e){return e?e.kind===Zt.Kind.OBJECT_TYPE_DEFINITION:!1}});var Hv={};jf(Hv,{__addDisposableResource:()=>vk,__assign:()=>kN,__asyncDelegator:()=>Nk,__asyncGenerator:()=>mk,__asyncValues:()=>Tk,__await:()=>sl,__awaiter:()=>uk,__classPrivateFieldGet:()=>Ik,__classPrivateFieldIn:()=>_k,__classPrivateFieldSet:()=>gk,__createBinding:()=>xN,__decorate:()=>ak,__disposeResources:()=>Sk,__esDecorate:()=>rie,__exportStar:()=>lk,__extends:()=>rk,__generator:()=>ck,__importDefault:()=>yk,__importStar:()=>hk,__makeTemplateObject:()=>Ek,__metadata:()=>ok,__param:()=>sk,__propKey:()=>aie,__read:()=>Jv,__rest:()=>ik,__runInitializers:()=>iie,__setFunctionName:()=>sie,__spread:()=>dk,__spreadArray:()=>fk,__spreadArrays:()=>pk,__values:()=>MN,default:()=>cie});function rk(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");Yv(e,t);function n(){this.constructor=e}e.prototype=t===null?Object.create(t):(n.prototype=t.prototype,new n)}function ik(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var i=0,r=Object.getOwnPropertySymbols(e);i=0;c--)(o=e[c])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a}function sk(e,t){return function(n,r){t(n,r,e)}}function rie(e,t,n,r,i,a){function o(J){if(J!==void 0&&typeof J!="function")throw new TypeError("Function expected");return J}for(var c=r.kind,l=c==="getter"?"get":c==="setter"?"set":"value",p=!t&&e?r.static?e:e.prototype:null,T=t||(p?Object.getOwnPropertyDescriptor(p,r.name):{}),y,g=!1,_=n.length-1;_>=0;_--){var F={};for(var U in r)F[U]=U==="access"?{}:r[U];for(var U in r.access)F.access[U]=r.access[U];F.addInitializer=function(J){if(g)throw new TypeError("Cannot add initializers after decoration has completed");a.push(o(J||null))};var K=(0,n[_])(c==="accessor"?{get:T.get,set:T.set}:T[l],F);if(c==="accessor"){if(K===void 0)continue;if(K===null||typeof K!="object")throw new TypeError("Object expected");(y=o(K.get))&&(T.get=y),(y=o(K.set))&&(T.set=y),(y=o(K.init))&&i.unshift(y)}else(y=o(K))&&(c==="field"?i.unshift(y):T[l]=y)}p&&Object.defineProperty(p,r.name,T),g=!0}function iie(e,t,n){for(var r=arguments.length>2,i=0;i0&&a[a.length-1])&&(p[0]===6||p[0]===2)){n=0;continue}if(p[0]===3&&(!a||p[1]>a[0]&&p[1]=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")}function Jv(e,t){var n=typeof Symbol=="function"&&e[Symbol.iterator];if(!n)return e;var r=n.call(e),i,a=[],o;try{for(;(t===void 0||t-- >0)&&!(i=r.next()).done;)a.push(i.value)}catch(c){o={error:c}}finally{try{i&&!i.done&&(n=r.return)&&n.call(r)}finally{if(o)throw o.error}}return a}function dk(){for(var e=[],t=0;t1||c(g,_)})})}function c(g,_){try{l(r[g](_))}catch(F){y(a[0][3],F)}}function l(g){g.value instanceof sl?Promise.resolve(g.value.v).then(p,T):y(a[0][2],g)}function p(g){c("next",g)}function T(g){c("throw",g)}function y(g,_){g(_),a.shift(),a.length&&c(a[0][0],a[0][1])}}function Nk(e){var t,n;return t={},r("next"),r("throw",function(i){throw i}),r("return"),t[Symbol.iterator]=function(){return this},t;function r(i,a){t[i]=e[i]?function(o){return(n=!n)?{value:sl(e[i](o)),done:!1}:a?a(o):o}:a}}function Tk(e){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var t=e[Symbol.asyncIterator],n;return t?t.call(e):(e=typeof MN=="function"?MN(e):e[Symbol.iterator](),n={},r("next"),r("throw"),r("return"),n[Symbol.asyncIterator]=function(){return this},n);function r(a){n[a]=e[a]&&function(o){return new Promise(function(c,l){o=e[a](o),i(c,l,o.done,o.value)})}}function i(a,o,c,l){Promise.resolve(l).then(function(p){a({value:p,done:c})},o)}}function Ek(e,t){return Object.defineProperty?Object.defineProperty(e,"raw",{value:t}):e.raw=t,e}function hk(e){if(e&&e.__esModule)return e;var t={};if(e!=null)for(var n in e)n!=="default"&&Object.prototype.hasOwnProperty.call(e,n)&&xN(t,e,n);return oie(t,e),t}function yk(e){return e&&e.__esModule?e:{default:e}}function Ik(e,t,n,r){if(n==="a"&&!r)throw new TypeError("Private accessor was defined without a getter");if(typeof t=="function"?e!==t||!r:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return n==="m"?r:n==="a"?r.call(e):r?r.value:t.get(e)}function gk(e,t,n,r,i){if(r==="m")throw new TypeError("Private method is not writable");if(r==="a"&&!i)throw new TypeError("Private accessor was defined without a setter");if(typeof t=="function"?e!==t||!i:!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return r==="a"?i.call(e,n):i?i.value=n:t.set(e,n),n}function _k(e,t){if(t===null||typeof t!="object"&&typeof t!="function")throw new TypeError("Cannot use 'in' operator on non-object");return typeof e=="function"?t===e:e.has(t)}function vk(e,t,n){if(t!=null){if(typeof t!="object"&&typeof t!="function")throw new TypeError("Object expected.");var r;if(n){if(!Symbol.asyncDispose)throw new TypeError("Symbol.asyncDispose is not defined.");r=t[Symbol.asyncDispose]}if(r===void 0){if(!Symbol.dispose)throw new TypeError("Symbol.dispose is not defined.");r=t[Symbol.dispose]}if(typeof r!="function")throw new TypeError("Object not disposable.");e.stack.push({value:t,dispose:r,async:n})}else n&&e.stack.push({async:!0});return t}function Sk(e){function t(r){e.error=e.hasError?new uie(r,e.error,"An error was suppressed during disposal."):r,e.hasError=!0}function n(){for(;e.stack.length;){var r=e.stack.pop();try{var i=r.dispose&&r.dispose.call(r.value);if(r.async)return Promise.resolve(i).then(n,function(a){return t(a),n()})}catch(a){t(a)}}if(e.hasError)throw e.error}return n()}var Yv,kN,xN,oie,uie,cie,zv=gu(()=>{"use strict";f();N();m();Yv=function(e,t){return Yv=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,r){n.__proto__=r}||function(n,r){for(var i in r)Object.prototype.hasOwnProperty.call(r,i)&&(n[i]=r[i])},Yv(e,t)};kN=function(){return kN=Object.assign||function(t){for(var n,r=1,i=arguments.length;r$k,__assign:()=>qN,__asyncDelegator:()=>kk,__asyncGenerator:()=>Uk,__asyncValues:()=>Mk,__await:()=>ol,__awaiter:()=>Fk,__classPrivateFieldGet:()=>jk,__classPrivateFieldIn:()=>Gk,__classPrivateFieldSet:()=>Kk,__createBinding:()=>jN,__decorate:()=>bk,__disposeResources:()=>Qk,__esDecorate:()=>lie,__exportStar:()=>wk,__extends:()=>Ok,__generator:()=>Pk,__importDefault:()=>Vk,__importStar:()=>qk,__makeTemplateObject:()=>xk,__metadata:()=>Rk,__param:()=>Ak,__propKey:()=>pie,__read:()=>Xv,__rest:()=>Dk,__runInitializers:()=>die,__setFunctionName:()=>fie,__spread:()=>Lk,__spreadArray:()=>Bk,__spreadArrays:()=>Ck,__values:()=>VN,default:()=>Tie});function Ok(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");Wv(e,t);function n(){this.constructor=e}e.prototype=t===null?Object.create(t):(n.prototype=t.prototype,new n)}function Dk(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var i=0,r=Object.getOwnPropertySymbols(e);i=0;c--)(o=e[c])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a}function Ak(e,t){return function(n,r){t(n,r,e)}}function lie(e,t,n,r,i,a){function o(J){if(J!==void 0&&typeof J!="function")throw new TypeError("Function expected");return J}for(var c=r.kind,l=c==="getter"?"get":c==="setter"?"set":"value",p=!t&&e?r.static?e:e.prototype:null,T=t||(p?Object.getOwnPropertyDescriptor(p,r.name):{}),y,g=!1,_=n.length-1;_>=0;_--){var F={};for(var U in r)F[U]=U==="access"?{}:r[U];for(var U in r.access)F.access[U]=r.access[U];F.addInitializer=function(J){if(g)throw new TypeError("Cannot add initializers after decoration has completed");a.push(o(J||null))};var K=(0,n[_])(c==="accessor"?{get:T.get,set:T.set}:T[l],F);if(c==="accessor"){if(K===void 0)continue;if(K===null||typeof K!="object")throw new TypeError("Object expected");(y=o(K.get))&&(T.get=y),(y=o(K.set))&&(T.set=y),(y=o(K.init))&&i.unshift(y)}else(y=o(K))&&(c==="field"?i.unshift(y):T[l]=y)}p&&Object.defineProperty(p,r.name,T),g=!0}function die(e,t,n){for(var r=arguments.length>2,i=0;i0&&a[a.length-1])&&(p[0]===6||p[0]===2)){n=0;continue}if(p[0]===3&&(!a||p[1]>a[0]&&p[1]=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")}function Xv(e,t){var n=typeof Symbol=="function"&&e[Symbol.iterator];if(!n)return e;var r=n.call(e),i,a=[],o;try{for(;(t===void 0||t-- >0)&&!(i=r.next()).done;)a.push(i.value)}catch(c){o={error:c}}finally{try{i&&!i.done&&(n=r.return)&&n.call(r)}finally{if(o)throw o.error}}return a}function Lk(){for(var e=[],t=0;t1||c(g,_)})})}function c(g,_){try{l(r[g](_))}catch(F){y(a[0][3],F)}}function l(g){g.value instanceof ol?Promise.resolve(g.value.v).then(p,T):y(a[0][2],g)}function p(g){c("next",g)}function T(g){c("throw",g)}function y(g,_){g(_),a.shift(),a.length&&c(a[0][0],a[0][1])}}function kk(e){var t,n;return t={},r("next"),r("throw",function(i){throw i}),r("return"),t[Symbol.iterator]=function(){return this},t;function r(i,a){t[i]=e[i]?function(o){return(n=!n)?{value:ol(e[i](o)),done:!1}:a?a(o):o}:a}}function Mk(e){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var t=e[Symbol.asyncIterator],n;return t?t.call(e):(e=typeof VN=="function"?VN(e):e[Symbol.iterator](),n={},r("next"),r("throw"),r("return"),n[Symbol.asyncIterator]=function(){return this},n);function r(a){n[a]=e[a]&&function(o){return new Promise(function(c,l){o=e[a](o),i(c,l,o.done,o.value)})}}function i(a,o,c,l){Promise.resolve(l).then(function(p){a({value:p,done:c})},o)}}function xk(e,t){return Object.defineProperty?Object.defineProperty(e,"raw",{value:t}):e.raw=t,e}function qk(e){if(e&&e.__esModule)return e;var t={};if(e!=null)for(var n in e)n!=="default"&&Object.prototype.hasOwnProperty.call(e,n)&&jN(t,e,n);return mie(t,e),t}function Vk(e){return e&&e.__esModule?e:{default:e}}function jk(e,t,n,r){if(n==="a"&&!r)throw new TypeError("Private accessor was defined without a getter");if(typeof t=="function"?e!==t||!r:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return n==="m"?r:n==="a"?r.call(e):r?r.value:t.get(e)}function Kk(e,t,n,r,i){if(r==="m")throw new TypeError("Private method is not writable");if(r==="a"&&!i)throw new TypeError("Private accessor was defined without a setter");if(typeof t=="function"?e!==t||!i:!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return r==="a"?i.call(e,n):i?i.value=n:t.set(e,n),n}function Gk(e,t){if(t===null||typeof t!="object"&&typeof t!="function")throw new TypeError("Cannot use 'in' operator on non-object");return typeof e=="function"?t===e:e.has(t)}function $k(e,t,n){if(t!=null){if(typeof t!="object"&&typeof t!="function")throw new TypeError("Object expected.");var r;if(n){if(!Symbol.asyncDispose)throw new TypeError("Symbol.asyncDispose is not defined.");r=t[Symbol.asyncDispose]}if(r===void 0){if(!Symbol.dispose)throw new TypeError("Symbol.dispose is not defined.");r=t[Symbol.dispose]}if(typeof r!="function")throw new TypeError("Object not disposable.");e.stack.push({value:t,dispose:r,async:n})}else n&&e.stack.push({async:!0});return t}function Qk(e){function t(r){e.error=e.hasError?new Nie(r,e.error,"An error was suppressed during disposal."):r,e.hasError=!0}function n(){for(;e.stack.length;){var r=e.stack.pop();try{var i=r.dispose&&r.dispose.call(r.value);if(r.async)return Promise.resolve(i).then(n,function(a){return t(a),n()})}catch(a){t(a)}}if(e.hasError)throw e.error}return n()}var Wv,qN,jN,mie,Nie,Tie,Jk=gu(()=>{"use strict";f();N();m();Wv=function(e,t){return Wv=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,r){n.__proto__=r}||function(n,r){for(var i in r)Object.prototype.hasOwnProperty.call(r,i)&&(n[i]=r[i])},Wv(e,t)};qN=function(){return qN=Object.assign||function(t){for(var n,r=1,i=arguments.length;r{"use strict";f();N();m()});var cp=w(dr=>{"use strict";f();N();m();Object.defineProperty(dr,"__esModule",{value:!0});dr.assertSome=dr.isSome=dr.compareNodes=dr.nodeToString=dr.compareStrings=dr.isValidPath=dr.isDocumentString=dr.asArray=void 0;var Eie=Ae(),hie=e=>Array.isArray(e)?e:e?[e]:[];dr.asArray=hie;var yie=/\.[a-z0-9]+$/i;function Iie(e){if(typeof e!="string"||yie.test(e))return!1;try{return(0,Eie.parse)(e),!0}catch(t){}return!1}dr.isDocumentString=Iie;var gie=/[‘“!%^<>`]/;function _ie(e){return typeof e=="string"&&!gie.test(e)}dr.isValidPath=_ie;function zk(e,t){return String(e)String(t)?1:0}dr.compareStrings=zk;function Zv(e){var n,r;let t;return"alias"in e&&(t=(n=e.alias)==null?void 0:n.value),t==null&&"name"in e&&(t=(r=e.name)==null?void 0:r.value),t==null&&(t=e.kind),t}dr.nodeToString=Zv;function vie(e,t,n){let r=Zv(e),i=Zv(t);return typeof n=="function"?n(r,i):zk(r,i)}dr.compareNodes=vie;function Sie(e){return e!=null}dr.isSome=Sie;function Oie(e,t="Value should be something"){if(e==null)throw new Error(t)}dr.assertSome=Oie});var lp=w(GN=>{"use strict";f();N();m();Object.defineProperty(GN,"__esModule",{value:!0});GN.inspect=void 0;var Zk=3;function Die(e){return KN(e,[])}GN.inspect=Die;function KN(e,t){switch(typeof e){case"string":return JSON.stringify(e);case"function":return e.name?`[function ${e.name}]`:"[function]";case"object":return bie(e,t);default:return String(e)}}function Wk(e){return(e.name="GraphQLError")?e.toString():`${e.name}: ${e.message}; - ${e.stack}`}function bie(e,t){if(e===null)return"null";if(e instanceof Error)return e.name==="AggregateError"?Wk(e)+` -`+Xk(e.errors,t):Wk(e);if(t.includes(e))return"[Circular]";let n=[...t,e];if(Aie(e)){let r=e.toJSON();if(r!==e)return typeof r=="string"?r:KN(r,n)}else if(Array.isArray(e))return Xk(e,n);return Rie(e,n)}function Aie(e){return typeof e.toJSON=="function"}function Rie(e,t){let n=Object.entries(e);return n.length===0?"{}":t.length>Zk?"["+Fie(e)+"]":"{ "+n.map(([i,a])=>i+": "+KN(a,t)).join(", ")+" }"}function Xk(e,t){if(e.length===0)return"[]";if(t.length>Zk)return"[Array]";let n=e.length,r=[];for(let i=0;i{"use strict";f();N();m();Object.defineProperty(ul,"__esModule",{value:!0});ul.relocatedError=ul.createGraphQLError=void 0;var eS=Ae(),Pie=["message","locations","path","nodes","source","positions","originalError","name","stack","extensions"];function wie(e){return e!=null&&typeof e=="object"&&Object.keys(e).every(t=>Pie.includes(t))}function tS(e,t){return t!=null&&t.originalError&&!(t.originalError instanceof Error)&&wie(t.originalError)&&(t.originalError=tS(t.originalError.message,t.originalError)),eS.versionInfo.major>=17?new eS.GraphQLError(e,t):new eS.GraphQLError(e,t==null?void 0:t.nodes,t==null?void 0:t.source,t==null?void 0:t.positions,t==null?void 0:t.path,t==null?void 0:t.originalError,t==null?void 0:t.extensions)}ul.createGraphQLError=tS;function Lie(e,t){return tS(e.message,{nodes:e.nodes,source:e.source,positions:e.positions,path:t==null?e.path:t,originalError:e,extensions:e.extensions})}ul.relocatedError=Lie});var dp=w(Mi=>{"use strict";f();N();m();Object.defineProperty(Mi,"__esModule",{value:!0});Mi.hasOwnProperty=Mi.promiseReduce=Mi.isPromise=Mi.isObjectLike=Mi.isIterableObject=void 0;function Cie(e){return e!=null&&typeof e=="object"&&Symbol.iterator in e}Mi.isIterableObject=Cie;function Bie(e){return typeof e=="object"&&e!==null}Mi.isObjectLike=Bie;function eM(e){return(e==null?void 0:e.then)!=null}Mi.isPromise=eM;function Uie(e,t,n){let r=n;for(let i of e)r=eM(r)?r.then(a=>t(a,i)):t(r,i);return r}Mi.promiseReduce=Uie;function kie(e,t){return Object.prototype.hasOwnProperty.call(e,t)}Mi.hasOwnProperty=kie});var rS=w(YN=>{"use strict";f();N();m();Object.defineProperty(YN,"__esModule",{value:!0});YN.getArgumentValues=void 0;var nS=lp(),Yu=Ae(),QN=$N(),Mie=dp();function xie(e,t,n={}){var o;let r={},a=((o=t.arguments)!=null?o:[]).reduce((c,l)=>Q(M({},c),{[l.name.value]:l}),{});for(let{name:c,type:l,defaultValue:p}of e.args){let T=a[c];if(!T){if(p!==void 0)r[c]=p;else if((0,Yu.isNonNullType)(l))throw(0,QN.createGraphQLError)(`Argument "${c}" of required type "${(0,nS.inspect)(l)}" was not provided.`,{nodes:[t]});continue}let y=T.value,g=y.kind===Yu.Kind.NULL;if(y.kind===Yu.Kind.VARIABLE){let F=y.name.value;if(n==null||!(0,Mie.hasOwnProperty)(n,F)){if(p!==void 0)r[c]=p;else if((0,Yu.isNonNullType)(l))throw(0,QN.createGraphQLError)(`Argument "${c}" of required type "${(0,nS.inspect)(l)}" was provided the variable "$${F}" which was not provided a runtime value.`,{nodes:[y]});continue}g=n[F]==null}if(g&&(0,Yu.isNonNullType)(l))throw(0,QN.createGraphQLError)(`Argument "${c}" of non-null type "${(0,nS.inspect)(l)}" must not be null.`,{nodes:[y]});let _=(0,Yu.valueFromAST)(y,l,n);if(_===void 0)throw(0,QN.createGraphQLError)(`Argument "${c}" has invalid value ${(0,Yu.print)(y)}.`,{nodes:[y]});r[c]=_}return r}YN.getArgumentValues=xie});var iS=w(Ua=>{"use strict";f();N();m();Object.defineProperty(Ua,"__esModule",{value:!0});Ua.getDirective=Ua.getDirectives=Ua.getDirectiveInExtensions=Ua.getDirectivesInExtensions=void 0;var nM=rS();function rM(e,t=["directives"]){return t.reduce((n,r)=>n==null?n:n[r],e==null?void 0:e.extensions)}Ua.getDirectivesInExtensions=rM;function tM(e,t){let n=e.filter(r=>r.name===t);if(n.length)return n.map(r=>{var i;return(i=r.args)!=null?i:{}})}function iM(e,t,n=["directives"]){let r=n.reduce((a,o)=>a==null?a:a[o],e==null?void 0:e.extensions);if(r===void 0)return;if(Array.isArray(r))return tM(r,t);let i=[];for(let[a,o]of Object.entries(r))if(Array.isArray(o))for(let c of o)i.push({name:a,args:c});else i.push({name:a,args:o});return tM(i,t)}Ua.getDirectiveInExtensions=iM;function qie(e,t,n=["directives"]){let r=rM(t,n);if(r!=null&&r.length>0)return r;let a=(e&&e.getDirectives?e.getDirectives():[]).reduce((l,p)=>(l[p.name]=p,l),{}),o=[];t.astNode&&o.push(t.astNode),"extensionASTNodes"in t&&t.extensionASTNodes&&(o=[...o,...t.extensionASTNodes]);let c=[];for(let l of o)if(l.directives)for(let p of l.directives){let T=a[p.name.value];T&&c.push({name:p.name.value,args:(0,nM.getArgumentValues)(T,p)})}return c}Ua.getDirectives=qie;function Vie(e,t,n,r=["directives"]){let i=iM(t,n,r);if(i!=null)return i;let a=e&&e.getDirective?e.getDirective(n):void 0;if(a==null)return;let o=[];t.astNode&&o.push(t.astNode),"extensionASTNodes"in t&&t.extensionASTNodes&&(o=[...o,...t.extensionASTNodes]);let c=[];for(let l of o)if(l.directives)for(let p of l.directives)p.name.value===n&&c.push((0,nM.getArgumentValues)(a,p));if(c.length)return c}Ua.getDirective=Vie});var aS=w(JN=>{"use strict";f();N();m();Object.defineProperty(JN,"__esModule",{value:!0});JN.getFieldsWithDirectives=void 0;var jie=Ae();function Kie(e,t={}){let n={},r=["ObjectTypeDefinition","ObjectTypeExtension"];t.includeInputTypes&&(r=[...r,"InputObjectTypeDefinition","InputObjectTypeExtension"]);let i=e.definitions.filter(a=>r.includes(a.kind));for(let a of i){let o=a.name.value;if(a.fields!=null){for(let c of a.fields)if(c.directives&&c.directives.length>0){let l=c.name.value,p=`${o}.${l}`,T=c.directives.map(y=>({name:y.name.value,args:(y.arguments||[]).reduce((g,_)=>Q(M({},g),{[_.name.value]:(0,jie.valueFromASTUntyped)(_.value)}),{})}));n[p]=T}}}return n}JN.getFieldsWithDirectives=Kie});var aM=w(HN=>{"use strict";f();N();m();Object.defineProperty(HN,"__esModule",{value:!0});HN.getArgumentsWithDirectives=void 0;var sS=Ae();function Gie(e){return e.kind===sS.Kind.OBJECT_TYPE_DEFINITION||e.kind===sS.Kind.OBJECT_TYPE_EXTENSION}function $ie(e){var r;let t={},n=e.definitions.filter(Gie);for(let i of n)if(i.fields!=null)for(let a of i.fields){let o=(r=a.arguments)==null?void 0:r.filter(l=>{var p;return(p=l.directives)==null?void 0:p.length});if(!(o!=null&&o.length))continue;let c=t[`${i.name.value}.${a.name.value}`]={};for(let l of o){let p=l.directives.map(T=>({name:T.name.value,args:(T.arguments||[]).reduce((y,g)=>Q(M({},y),{[g.name.value]:(0,sS.valueFromASTUntyped)(g.value)}),{})}));c[l.name.value]=p}}return t}HN.getArgumentsWithDirectives=$ie});var oS=w(zN=>{"use strict";f();N();m();Object.defineProperty(zN,"__esModule",{value:!0});zN.getImplementingTypes=void 0;var Qie=Ae();function Yie(e,t){let n=t.getTypeMap(),r=[];for(let i in n){let a=n[i];(0,Qie.isObjectType)(a)&&a.getInterfaces().find(c=>c.name===e)&&r.push(a.name)}return r}zN.getImplementingTypes=Yie});var cS=w(WN=>{"use strict";f();N();m();Object.defineProperty(WN,"__esModule",{value:!0});WN.astFromType=void 0;var Jie=lp(),Ju=Ae();function uS(e){if((0,Ju.isNonNullType)(e)){let t=uS(e.ofType);if(t.kind===Ju.Kind.NON_NULL_TYPE)throw new Error(`Invalid type node ${(0,Jie.inspect)(e)}. Inner type of non-null type cannot be a non-null type.`);return{kind:Ju.Kind.NON_NULL_TYPE,type:t}}else if((0,Ju.isListType)(e))return{kind:Ju.Kind.LIST_TYPE,type:uS(e.ofType)};return{kind:Ju.Kind.NAMED_TYPE,name:{kind:Ju.Kind.NAME,value:e.name}}}WN.astFromType=uS});var ZN=w(XN=>{"use strict";f();N();m();Object.defineProperty(XN,"__esModule",{value:!0});XN.astFromValueUntyped=void 0;var ka=Ae();function lS(e){if(e===null)return{kind:ka.Kind.NULL};if(e===void 0)return null;if(Array.isArray(e)){let t=[];for(let n of e){let r=lS(n);r!=null&&t.push(r)}return{kind:ka.Kind.LIST,values:t}}if(typeof e=="object"){let t=[];for(let n in e){let r=e[n],i=lS(r);i&&t.push({kind:ka.Kind.OBJECT_FIELD,name:{kind:ka.Kind.NAME,value:n},value:i})}return{kind:ka.Kind.OBJECT,fields:t}}if(typeof e=="boolean")return{kind:ka.Kind.BOOLEAN,value:e};if(typeof e=="bigint")return{kind:ka.Kind.INT,value:String(e)};if(typeof e=="number"&&isFinite(e)){let t=String(e);return Hie.test(t)?{kind:ka.Kind.INT,value:t}:{kind:ka.Kind.FLOAT,value:t}}if(typeof e=="string")return{kind:ka.Kind.STRING,value:e};throw new TypeError(`Cannot convert value to AST: ${e}.`)}XN.astFromValueUntyped=lS;var Hie=/^-?(?:0|[1-9][0-9]*)$/});var oM=w(eT=>{"use strict";f();N();m();Object.defineProperty(eT,"__esModule",{value:!0});eT.astFromValue=void 0;var zie=lp(),mi=Ae(),Wie=ZN(),sM=dp();function pp(e,t){if((0,mi.isNonNullType)(t)){let n=pp(e,t.ofType);return(n==null?void 0:n.kind)===mi.Kind.NULL?null:n}if(e===null)return{kind:mi.Kind.NULL};if(e===void 0)return null;if((0,mi.isListType)(t)){let n=t.ofType;if((0,sM.isIterableObject)(e)){let r=[];for(let i of e){let a=pp(i,n);a!=null&&r.push(a)}return{kind:mi.Kind.LIST,values:r}}return pp(e,n)}if((0,mi.isInputObjectType)(t)){if(!(0,sM.isObjectLike)(e))return null;let n=[];for(let r of Object.values(t.getFields())){let i=pp(e[r.name],r.type);i&&n.push({kind:mi.Kind.OBJECT_FIELD,name:{kind:mi.Kind.NAME,value:r.name},value:i})}return{kind:mi.Kind.OBJECT,fields:n}}if((0,mi.isLeafType)(t)){let n=t.serialize(e);return n==null?null:(0,mi.isEnumType)(t)?{kind:mi.Kind.ENUM,value:n}:t.name==="ID"&&typeof n=="string"&&Xie.test(n)?{kind:mi.Kind.INT,value:n}:(0,Wie.astFromValueUntyped)(n)}console.assert(!1,"Unexpected input type: "+(0,zie.inspect)(t))}eT.astFromValue=pp;var Xie=/^-?(?:0|[1-9][0-9]*)$/});var uM=w(tT=>{"use strict";f();N();m();Object.defineProperty(tT,"__esModule",{value:!0});tT.getDescriptionNode=void 0;var Zie=Ae();function eae(e){var t;if((t=e.astNode)!=null&&t.description)return Q(M({},e.astNode.description),{block:!0});if(e.description)return{kind:Zie.Kind.STRING,value:e.description,block:!0}}tT.getDescriptionNode=eae});var cl=w(Dr=>{"use strict";f();N();m();Object.defineProperty(Dr,"__esModule",{value:!0});Dr.memoize2of5=Dr.memoize2of4=Dr.memoize5=Dr.memoize4=Dr.memoize3=Dr.memoize2=Dr.memoize1=void 0;function tae(e){let t=new WeakMap;return function(r){let i=t.get(r);if(i===void 0){let a=e(r);return t.set(r,a),a}return i}}Dr.memoize1=tae;function nae(e){let t=new WeakMap;return function(r,i){let a=t.get(r);if(!a){a=new WeakMap,t.set(r,a);let c=e(r,i);return a.set(i,c),c}let o=a.get(i);if(o===void 0){let c=e(r,i);return a.set(i,c),c}return o}}Dr.memoize2=nae;function rae(e){let t=new WeakMap;return function(r,i,a){let o=t.get(r);if(!o){o=new WeakMap,t.set(r,o);let p=new WeakMap;o.set(i,p);let T=e(r,i,a);return p.set(a,T),T}let c=o.get(i);if(!c){c=new WeakMap,o.set(i,c);let p=e(r,i,a);return c.set(a,p),p}let l=c.get(a);if(l===void 0){let p=e(r,i,a);return c.set(a,p),p}return l}}Dr.memoize3=rae;function iae(e){let t=new WeakMap;return function(r,i,a,o){let c=t.get(r);if(!c){c=new WeakMap,t.set(r,c);let y=new WeakMap;c.set(i,y);let g=new WeakMap;y.set(a,g);let _=e(r,i,a,o);return g.set(o,_),_}let l=c.get(i);if(!l){l=new WeakMap,c.set(i,l);let y=new WeakMap;l.set(a,y);let g=e(r,i,a,o);return y.set(o,g),g}let p=l.get(a);if(!p){let y=new WeakMap;l.set(a,y);let g=e(r,i,a,o);return y.set(o,g),g}let T=p.get(o);if(T===void 0){let y=e(r,i,a,o);return p.set(o,y),y}return T}}Dr.memoize4=iae;function aae(e){let t=new WeakMap;return function(r,i,a,o,c){let l=t.get(r);if(!l){l=new WeakMap,t.set(r,l);let _=new WeakMap;l.set(i,_);let F=new WeakMap;_.set(a,F);let U=new WeakMap;F.set(o,U);let K=e(r,i,a,o,c);return U.set(c,K),K}let p=l.get(i);if(!p){p=new WeakMap,l.set(i,p);let _=new WeakMap;p.set(a,_);let F=new WeakMap;_.set(o,F);let U=e(r,i,a,o,c);return F.set(c,U),U}let T=p.get(a);if(!T){T=new WeakMap,p.set(a,T);let _=new WeakMap;T.set(o,_);let F=e(r,i,a,o,c);return _.set(c,F),F}let y=T.get(o);if(!y){y=new WeakMap,T.set(o,y);let _=e(r,i,a,o,c);return y.set(c,_),_}let g=y.get(c);if(g===void 0){let _=e(r,i,a,o,c);return y.set(c,_),_}return g}}Dr.memoize5=aae;function sae(e){let t=new WeakMap;return function(r,i,a,o){let c=t.get(r);if(!c){c=new WeakMap,t.set(r,c);let p=e(r,i,a,o);return c.set(i,p),p}let l=c.get(i);if(l===void 0){let p=e(r,i,a,o);return c.set(i,p),p}return l}}Dr.memoize2of4=sae;function oae(e){let t=new WeakMap;return function(r,i,a,o,c){let l=t.get(r);if(!l){l=new WeakMap,t.set(r,l);let T=e(r,i,a,o,c);return l.set(i,T),T}let p=l.get(i);if(p===void 0){let T=e(r,i,a,o,c);return l.set(i,T),T}return p}}Dr.memoize2of5=oae});var fp=w(Ni=>{"use strict";f();N();m();Object.defineProperty(Ni,"__esModule",{value:!0});Ni.getRootTypeMap=Ni.getRootTypes=Ni.getRootTypeNames=Ni.getDefinedRootType=void 0;var uae=$N(),dS=cl();function cae(e,t,n){let i=(0,Ni.getRootTypeMap)(e).get(t);if(i==null)throw(0,uae.createGraphQLError)(`Schema is not configured to execute ${t} operation.`,{nodes:n});return i}Ni.getDefinedRootType=cae;Ni.getRootTypeNames=(0,dS.memoize1)(function(t){let n=(0,Ni.getRootTypes)(t);return new Set([...n].map(r=>r.name))});Ni.getRootTypes=(0,dS.memoize1)(function(t){let n=(0,Ni.getRootTypeMap)(t);return new Set(n.values())});Ni.getRootTypeMap=(0,dS.memoize1)(function(t){let n=new Map,r=t.getQueryType();r&&n.set("query",r);let i=t.getMutationType();i&&n.set("mutation",i);let a=t.getSubscriptionType();return a&&n.set("subscription",a),n})});var TS=w(ht=>{"use strict";f();N();m();Object.defineProperty(ht,"__esModule",{value:!0});ht.makeDirectiveNodes=ht.makeDirectiveNode=ht.makeDeprecatedDirective=ht.astFromEnumValue=ht.astFromInputField=ht.astFromField=ht.astFromScalarType=ht.astFromEnumType=ht.astFromInputObjectType=ht.astFromUnionType=ht.astFromInterfaceType=ht.astFromObjectType=ht.astFromArg=ht.getDeprecatableDirectiveNodes=ht.getDirectiveNodes=ht.astFromDirective=ht.astFromSchema=ht.printSchemaWithDirectives=ht.getDocumentNodeFromSchema=void 0;var ut=Ae(),Hu=cS(),pS=oM(),lae=ZN(),xi=uM(),fS=iS(),dae=cp(),pae=fp();function cM(e,t={}){let n=t.pathToDirectivesInExtensions,r=e.getTypeMap(),i=lM(e,n),a=i!=null?[i]:[],o=e.getDirectives();for(let c of o)(0,ut.isSpecifiedDirective)(c)||a.push(dM(c,e,n));for(let c in r){let l=r[c],p=(0,ut.isSpecifiedScalarType)(l),T=(0,ut.isIntrospectionType)(l);if(!(p||T))if((0,ut.isObjectType)(l))a.push(pM(l,e,n));else if((0,ut.isInterfaceType)(l))a.push(fM(l,e,n));else if((0,ut.isUnionType)(l))a.push(mM(l,e,n));else if((0,ut.isInputObjectType)(l))a.push(NM(l,e,n));else if((0,ut.isEnumType)(l))a.push(TM(l,e,n));else if((0,ut.isScalarType)(l))a.push(EM(l,e,n));else throw new Error(`Unknown type ${l}.`)}return{kind:ut.Kind.DOCUMENT,definitions:a}}ht.getDocumentNodeFromSchema=cM;function fae(e,t={}){let n=cM(e,t);return(0,ut.print)(n)}ht.printSchemaWithDirectives=fae;function lM(e,t){let n=new Map([["query",void 0],["mutation",void 0],["subscription",void 0]]),r=[];if(e.astNode!=null&&r.push(e.astNode),e.extensionASTNodes!=null)for(let p of e.extensionASTNodes)r.push(p);for(let p of r)if(p.operationTypes)for(let T of p.operationTypes)n.set(T.operation,T);let i=(0,pae.getRootTypeMap)(e);for(let[p,T]of n){let y=i.get(p);if(y!=null){let g=(0,Hu.astFromType)(y);T!=null?T.type=g:n.set(p,{kind:ut.Kind.OPERATION_TYPE_DEFINITION,operation:p,type:g})}}let a=[...n.values()].filter(dae.isSome),o=zu(e,e,t);if(!a.length&&!o.length)return null;let c={kind:a!=null?ut.Kind.SCHEMA_DEFINITION:ut.Kind.SCHEMA_EXTENSION,operationTypes:a,directives:o},l=(0,xi.getDescriptionNode)(e);return l&&(c.description=l),c}ht.astFromSchema=lM;function dM(e,t,n){var r,i;return{kind:ut.Kind.DIRECTIVE_DEFINITION,description:(0,xi.getDescriptionNode)(e),name:{kind:ut.Kind.NAME,value:e.name},arguments:(r=e.args)==null?void 0:r.map(a=>mS(a,t,n)),repeatable:e.isRepeatable,locations:((i=e.locations)==null?void 0:i.map(a=>({kind:ut.Kind.NAME,value:a})))||[]}}ht.astFromDirective=dM;function zu(e,t,n){let r=(0,fS.getDirectivesInExtensions)(e,n),i=[];e.astNode!=null&&i.push(e.astNode),"extensionASTNodes"in e&&e.extensionASTNodes!=null&&(i=i.concat(e.extensionASTNodes));let a;if(r!=null)a=nT(t,r);else{a=[];for(let o of i)o.directives&&a.push(...o.directives)}return a}ht.getDirectiveNodes=zu;function Np(e,t,n){var c,l;let r=[],i=null,a=(0,fS.getDirectivesInExtensions)(e,n),o;return a!=null?o=nT(t,a):o=(c=e.astNode)==null?void 0:c.directives,o!=null&&(r=o.filter(p=>p.name.value!=="deprecated"),e.deprecationReason!=null&&(i=(l=o.filter(p=>p.name.value==="deprecated"))==null?void 0:l[0])),e.deprecationReason!=null&&i==null&&(i=IM(e.deprecationReason)),i==null?r:[i].concat(r)}ht.getDeprecatableDirectiveNodes=Np;function mS(e,t,n){var r;return{kind:ut.Kind.INPUT_VALUE_DEFINITION,description:(0,xi.getDescriptionNode)(e),name:{kind:ut.Kind.NAME,value:e.name},type:(0,Hu.astFromType)(e.type),defaultValue:e.defaultValue!==void 0&&(r=(0,pS.astFromValue)(e.defaultValue,e.type))!=null?r:void 0,directives:Np(e,t,n)}}ht.astFromArg=mS;function pM(e,t,n){return{kind:ut.Kind.OBJECT_TYPE_DEFINITION,description:(0,xi.getDescriptionNode)(e),name:{kind:ut.Kind.NAME,value:e.name},fields:Object.values(e.getFields()).map(r=>NS(r,t,n)),interfaces:Object.values(e.getInterfaces()).map(r=>(0,Hu.astFromType)(r)),directives:zu(e,t,n)}}ht.astFromObjectType=pM;function fM(e,t,n){let r={kind:ut.Kind.INTERFACE_TYPE_DEFINITION,description:(0,xi.getDescriptionNode)(e),name:{kind:ut.Kind.NAME,value:e.name},fields:Object.values(e.getFields()).map(i=>NS(i,t,n)),directives:zu(e,t,n)};return"getInterfaces"in e&&(r.interfaces=Object.values(e.getInterfaces()).map(i=>(0,Hu.astFromType)(i))),r}ht.astFromInterfaceType=fM;function mM(e,t,n){return{kind:ut.Kind.UNION_TYPE_DEFINITION,description:(0,xi.getDescriptionNode)(e),name:{kind:ut.Kind.NAME,value:e.name},directives:zu(e,t,n),types:e.getTypes().map(r=>(0,Hu.astFromType)(r))}}ht.astFromUnionType=mM;function NM(e,t,n){return{kind:ut.Kind.INPUT_OBJECT_TYPE_DEFINITION,description:(0,xi.getDescriptionNode)(e),name:{kind:ut.Kind.NAME,value:e.name},fields:Object.values(e.getFields()).map(r=>hM(r,t,n)),directives:zu(e,t,n)}}ht.astFromInputObjectType=NM;function TM(e,t,n){return{kind:ut.Kind.ENUM_TYPE_DEFINITION,description:(0,xi.getDescriptionNode)(e),name:{kind:ut.Kind.NAME,value:e.name},values:Object.values(e.getValues()).map(r=>yM(r,t,n)),directives:zu(e,t,n)}}ht.astFromEnumType=TM;function EM(e,t,n){var o;let r=(0,fS.getDirectivesInExtensions)(e,n),i=r?nT(t,r):((o=e.astNode)==null?void 0:o.directives)||[],a=e.specifiedByUrl||e.specifiedByURL;if(a&&!i.some(c=>c.name.value==="specifiedBy")){let c={url:a};i.push(mp("specifiedBy",c))}return{kind:ut.Kind.SCALAR_TYPE_DEFINITION,description:(0,xi.getDescriptionNode)(e),name:{kind:ut.Kind.NAME,value:e.name},directives:i}}ht.astFromScalarType=EM;function NS(e,t,n){return{kind:ut.Kind.FIELD_DEFINITION,description:(0,xi.getDescriptionNode)(e),name:{kind:ut.Kind.NAME,value:e.name},arguments:e.args.map(r=>mS(r,t,n)),type:(0,Hu.astFromType)(e.type),directives:Np(e,t,n)}}ht.astFromField=NS;function hM(e,t,n){var r;return{kind:ut.Kind.INPUT_VALUE_DEFINITION,description:(0,xi.getDescriptionNode)(e),name:{kind:ut.Kind.NAME,value:e.name},type:(0,Hu.astFromType)(e.type),directives:Np(e,t,n),defaultValue:(r=(0,pS.astFromValue)(e.defaultValue,e.type))!=null?r:void 0}}ht.astFromInputField=hM;function yM(e,t,n){return{kind:ut.Kind.ENUM_VALUE_DEFINITION,description:(0,xi.getDescriptionNode)(e),name:{kind:ut.Kind.NAME,value:e.name},directives:Np(e,t,n)}}ht.astFromEnumValue=yM;function IM(e){return mp("deprecated",{reason:e},ut.GraphQLDeprecatedDirective)}ht.makeDeprecatedDirective=IM;function mp(e,t,n){let r=[];if(n!=null)for(let i of n.args){let a=i.name,o=t[a];if(o!==void 0){let c=(0,pS.astFromValue)(o,i.type);c&&r.push({kind:ut.Kind.ARGUMENT,name:{kind:ut.Kind.NAME,value:a},value:c})}}else for(let i in t){let a=t[i],o=(0,lae.astFromValueUntyped)(a);o&&r.push({kind:ut.Kind.ARGUMENT,name:{kind:ut.Kind.NAME,value:i},value:o})}return{kind:ut.Kind.DIRECTIVE,name:{kind:ut.Kind.NAME,value:e},arguments:r}}ht.makeDirectiveNode=mp;function nT(e,t){let n=[];for(let r in t){let i=t[r],a=e==null?void 0:e.getDirective(r);if(Array.isArray(i))for(let o of i)n.push(mp(r,o,a));else n.push(mp(r,i,a))}return n}ht.makeDirectiveNodes=nT});var _M=w(ll=>{"use strict";f();N();m();Object.defineProperty(ll,"__esModule",{value:!0});ll.createDefaultRules=ll.validateGraphQlDocuments=void 0;var Tp=Ae();function mae(e,t,n=gM()){var c;let r=new Set,i=new Map;for(let l of t)for(let p of l.definitions)p.kind===Tp.Kind.FRAGMENT_DEFINITION?i.set(p.name.value,p):r.add(p);let a={kind:Tp.Kind.DOCUMENT,definitions:Array.from([...r,...i.values()])},o=(0,Tp.validate)(e,a,n);for(let l of o)if(l.stack=l.message,l.locations)for(let p of l.locations)l.stack+=` - at ${(c=l.source)==null?void 0:c.name}:${p.line}:${p.column}`;return o}ll.validateGraphQlDocuments=mae;function gM(){let e=["NoUnusedFragmentsRule","NoUnusedVariablesRule","KnownDirectivesRule"];return Tp.versionInfo.major<15&&(e=e.map(t=>t.replace(/Rule$/,""))),Tp.specifiedRules.filter(t=>!e.includes(t.name))}ll.createDefaultRules=gM});var vM=w(rT=>{"use strict";f();N();m();Object.defineProperty(rT,"__esModule",{value:!0});rT.parseGraphQLJSON=void 0;var Nae=Ae();function Tae(e){return e=e.toString(),e.charCodeAt(0)===65279&&(e=e.slice(1)),e}function Eae(e){return JSON.parse(Tae(e))}function hae(e,t,n){let r=Eae(t);if(r.data&&(r=r.data),r.kind==="Document")return{location:e,document:r};if(r.__schema){let i=(0,Nae.buildClientSchema)(r,n);return{location:e,schema:i}}else if(typeof r=="string")return{location:e,rawSDL:r};throw new Error("Not valid JSON content")}rT.parseGraphQLJSON=hae});var hS=w(Bn=>{"use strict";f();N();m();Object.defineProperty(Bn,"__esModule",{value:!0});Bn.getBlockStringIndentation=Bn.dedentBlockStringValue=Bn.getLeadingCommentBlock=Bn.getComment=Bn.getDescription=Bn.printWithComments=Bn.printComment=Bn.pushComment=Bn.collectComment=Bn.resetComments=void 0;var bM=Ae(),yae=80,dl={};function Iae(){dl={}}Bn.resetComments=Iae;function gae(e){var n;let t=(n=e.name)==null?void 0:n.value;if(t!=null)switch(Ep(e,t),e.kind){case"EnumTypeDefinition":if(e.values)for(let r of e.values)Ep(r,t,r.name.value);break;case"ObjectTypeDefinition":case"InputObjectTypeDefinition":case"InterfaceTypeDefinition":if(e.fields){for(let r of e.fields)if(Ep(r,t,r.name.value),Dae(r)&&r.arguments)for(let i of r.arguments)Ep(i,t,r.name.value,i.name.value)}break}}Bn.collectComment=gae;function Ep(e,t,n,r){let i=ES(e);if(typeof i!="string"||i.length===0)return;let a=[t];n&&(a.push(n),r&&a.push(r));let o=a.join(".");dl[o]||(dl[o]=[]),dl[o].push(i)}Bn.pushComment=Ep;function AM(e){return` + "`+n.join(Ze.QUOTATION_JOIN)+'"')}});var JL=w(YL=>{"use strict";m();T();N();Object.defineProperty(YL,"__esModule",{value:!0})});var Ho=w(Or=>{"use strict";m();T();N();Object.defineProperty(Or,"__esModule",{value:!0});Or.getMutableDirectiveDefinitionNode=CZ;Or.getMutableEnumNode=BZ;Or.getMutableEnumValueNode=UZ;Or.getMutableFieldNode=kZ;Or.getMutableInputObjectNode=MZ;Or.getMutableInputValueNode=xZ;Or.getMutableInterfaceNode=qZ;Or.getMutableObjectNode=VZ;Or.getMutableObjectExtensionNode=jZ;Or.getMutableScalarNode=KZ;Or.getMutableTypeNode=W_;Or.getMutableUnionNode=GZ;Or.getTypeNodeNamedTypeName=X_;Or.getNamedTypeNode=zL;var Sr=Ae(),rl=Jr(),HL=sa(),LZ=nl();function CZ(e){return{arguments:[],kind:e.kind,locations:[],name:M({},e.name),repeatable:e.repeatable,description:(0,rl.formatDescription)(e.description)}}function BZ(e){return{kind:Sr.Kind.ENUM_TYPE_DEFINITION,name:M({},e)}}function UZ(e){return{directives:[],kind:e.kind,name:M({},e.name),description:(0,rl.formatDescription)(e.description)}}function kZ(e,t,n){return{arguments:[],directives:[],kind:e.kind,name:M({},e.name),type:W_(e.type,t,n),description:(0,rl.formatDescription)(e.description)}}function MZ(e){return{kind:Sr.Kind.INPUT_OBJECT_TYPE_DEFINITION,name:M({},e)}}function xZ(e,t,n){return{directives:[],kind:e.kind,name:M({},e.name),type:W_(e.type,t,n),defaultValue:e.defaultValue,description:(0,rl.formatDescription)(e.description)}}function qZ(e){return{kind:Sr.Kind.INTERFACE_TYPE_DEFINITION,name:M({},e)}}function VZ(e){return{kind:Sr.Kind.OBJECT_TYPE_DEFINITION,name:M({},e)}}function jZ(e){let t=e.kind===Sr.Kind.OBJECT_TYPE_DEFINITION?e.description:void 0;return{kind:Sr.Kind.OBJECT_TYPE_EXTENSION,name:M({},e.name),description:(0,rl.formatDescription)(t)}}function KZ(e){return{kind:Sr.Kind.SCALAR_TYPE_DEFINITION,name:M({},e)}}function W_(e,t,n){let r={kind:e.kind},i=r;for(let a=0;a{"use strict";m();T();N();Object.defineProperty(hN,"__esModule",{value:!0});hN.DEFAULT_CONSUMER_INACTIVE_THRESHOLD=void 0;hN.DEFAULT_CONSUMER_INACTIVE_THRESHOLD=30});var hs=w(Z=>{"use strict";m();T();N();Object.defineProperty(Z,"__esModule",{value:!0});Z.MAX_OR_SCOPES=Z.EDFS_ARGS_REGEXP=Z.CONFIGURE_CHILD_DESCRIPTIONS_DEFINITION=Z.CONFIGURE_DESCRIPTION_DEFINITION=Z.EDFS_NATS_STREAM_CONFIGURATION_DEFINITION=Z.SCOPE_SCALAR_DEFINITION=Z.FIELD_SET_SCALAR_DEFINITION=Z.VERSION_TWO_DIRECTIVE_DEFINITIONS=Z.EVENT_DRIVEN_DIRECTIVE_DEFINITIONS_BY_DIRECTIVE_NAME=Z.BASE_DIRECTIVE_DEFINITIONS=Z.V2_DIRECTIVE_DEFINITION_BY_DIRECTIVE_NAME=Z.SUBSCRIPTION_FIELD_CONDITION_DEFINITION=Z.SUBSCRIPTION_FILTER_VALUE_DEFINITION=Z.SUBSCRIPTION_FILTER_CONDITION_DEFINITION=Z.SUBSCRIPTION_FILTER_DEFINITION=Z.SHAREABLE_DEFINITION=Z.REQUIRES_SCOPES_DEFINITION=Z.OVERRIDE_DEFINITION=Z.LINK_DEFINITION=Z.LINK_PURPOSE_DEFINITION=Z.LINK_IMPORT_DEFINITION=Z.INTERFACE_OBJECT_DEFINITION=Z.INACCESSIBLE_DEFINITION=Z.COMPOSE_DIRECTIVE_DEFINITION=Z.AUTHENTICATED_DEFINITION=Z.ALL_IN_BUILT_DIRECTIVE_NAMES=Z.BASE_DIRECTIVE_DEFINITION_BY_DIRECTIVE_NAME=Z.EDFS_REDIS_SUBSCRIBE_DEFINITION=Z.EDFS_REDIS_PUBLISH_DEFINITION=Z.TAG_DEFINITION=Z.SPECIFIED_BY_DEFINITION=Z.REQUIRES_DEFINITION=Z.PROVIDES_DEFINITION=Z.KEY_DEFINITION=Z.REQUIRED_FIELDSET_TYPE_NODE=Z.EDFS_NATS_SUBSCRIBE_DEFINITION=Z.EDFS_NATS_REQUEST_DEFINITION=Z.EDFS_NATS_PUBLISH_DEFINITION=Z.EDFS_KAFKA_SUBSCRIBE_DEFINITION=Z.EDFS_KAFKA_PUBLISH_DEFINITION=Z.EXTERNAL_DEFINITION=Z.EXTENDS_DEFINITION=Z.DEPRECATED_DEFINITION=Z.BASE_SCALARS=Z.REQUIRED_STRING_TYPE_NODE=void 0;var ue=Ae(),ie=Jr(),$Z=Z_(),B=lr();Z.REQUIRED_STRING_TYPE_NODE={kind:ue.Kind.NON_NULL_TYPE,type:(0,ie.stringToNamedTypeNode)(B.STRING_SCALAR)};Z.BASE_SCALARS=new Set(["_Any","_Entities",B.BOOLEAN_SCALAR,B.FLOAT_SCALAR,B.ID_SCALAR,B.INT_SCALAR,B.FIELD_SET_SCALAR,B.SCOPE_SCALAR,B.STRING_SCALAR]);Z.DEPRECATED_DEFINITION={arguments:[{directives:[],kind:ue.Kind.INPUT_VALUE_DEFINITION,name:(0,ie.stringToNameNode)(B.REASON),type:(0,ie.stringToNamedTypeNode)(B.STRING_SCALAR),defaultValue:{kind:ue.Kind.STRING,value:ue.DEFAULT_DEPRECATION_REASON}}],kind:ue.Kind.DIRECTIVE_DEFINITION,locations:(0,ie.stringArrayToNameNodeArray)([B.ARGUMENT_DEFINITION_UPPER,B.ENUM_VALUE_UPPER,B.FIELD_DEFINITION_UPPER,B.INPUT_FIELD_DEFINITION_UPPER]),name:(0,ie.stringToNameNode)(B.DEPRECATED),repeatable:!1};Z.EXTENDS_DEFINITION={kind:ue.Kind.DIRECTIVE_DEFINITION,locations:(0,ie.stringArrayToNameNodeArray)([B.INTERFACE_UPPER,B.OBJECT_UPPER]),name:(0,ie.stringToNameNode)(B.EXTENDS),repeatable:!1};Z.EXTERNAL_DEFINITION={kind:ue.Kind.DIRECTIVE_DEFINITION,locations:(0,ie.stringArrayToNameNodeArray)([B.FIELD_DEFINITION_UPPER,B.OBJECT_UPPER]),name:(0,ie.stringToNameNode)(B.EXTERNAL),repeatable:!1};Z.EDFS_KAFKA_PUBLISH_DEFINITION={arguments:[{kind:ue.Kind.INPUT_VALUE_DEFINITION,name:(0,ie.stringToNameNode)(B.TOPIC),type:Z.REQUIRED_STRING_TYPE_NODE},{kind:ue.Kind.INPUT_VALUE_DEFINITION,name:(0,ie.stringToNameNode)(B.PROVIDER_ID),type:Z.REQUIRED_STRING_TYPE_NODE,defaultValue:{kind:ue.Kind.STRING,value:B.DEFAULT_EDFS_PROVIDER_ID}}],kind:ue.Kind.DIRECTIVE_DEFINITION,locations:[(0,ie.stringToNameNode)(B.FIELD_DEFINITION_UPPER)],name:(0,ie.stringToNameNode)(B.EDFS_KAFKA_PUBLISH),repeatable:!1};Z.EDFS_KAFKA_SUBSCRIBE_DEFINITION={arguments:[{kind:ue.Kind.INPUT_VALUE_DEFINITION,name:(0,ie.stringToNameNode)(B.TOPICS),type:{kind:ue.Kind.NON_NULL_TYPE,type:{kind:ue.Kind.LIST_TYPE,type:Z.REQUIRED_STRING_TYPE_NODE}}},{kind:ue.Kind.INPUT_VALUE_DEFINITION,name:(0,ie.stringToNameNode)(B.PROVIDER_ID),type:Z.REQUIRED_STRING_TYPE_NODE,defaultValue:{kind:ue.Kind.STRING,value:B.DEFAULT_EDFS_PROVIDER_ID}}],kind:ue.Kind.DIRECTIVE_DEFINITION,locations:[(0,ie.stringToNameNode)(B.FIELD_DEFINITION_UPPER)],name:(0,ie.stringToNameNode)(B.EDFS_KAFKA_SUBSCRIBE),repeatable:!1};Z.EDFS_NATS_PUBLISH_DEFINITION={arguments:[{kind:ue.Kind.INPUT_VALUE_DEFINITION,name:(0,ie.stringToNameNode)(B.SUBJECT),type:Z.REQUIRED_STRING_TYPE_NODE},{kind:ue.Kind.INPUT_VALUE_DEFINITION,name:(0,ie.stringToNameNode)(B.PROVIDER_ID),type:{kind:ue.Kind.NON_NULL_TYPE,type:(0,ie.stringToNamedTypeNode)(B.STRING_SCALAR)},defaultValue:{kind:ue.Kind.STRING,value:B.DEFAULT_EDFS_PROVIDER_ID}}],kind:ue.Kind.DIRECTIVE_DEFINITION,locations:[(0,ie.stringToNameNode)(B.FIELD_DEFINITION_UPPER)],name:(0,ie.stringToNameNode)(B.EDFS_NATS_PUBLISH),repeatable:!1};Z.EDFS_NATS_REQUEST_DEFINITION={arguments:[{kind:ue.Kind.INPUT_VALUE_DEFINITION,name:(0,ie.stringToNameNode)(B.SUBJECT),type:{kind:ue.Kind.NON_NULL_TYPE,type:(0,ie.stringToNamedTypeNode)(B.STRING_SCALAR)}},{kind:ue.Kind.INPUT_VALUE_DEFINITION,name:(0,ie.stringToNameNode)(B.PROVIDER_ID),type:{kind:ue.Kind.NON_NULL_TYPE,type:(0,ie.stringToNamedTypeNode)(B.STRING_SCALAR)},defaultValue:{kind:ue.Kind.STRING,value:B.DEFAULT_EDFS_PROVIDER_ID}}],kind:ue.Kind.DIRECTIVE_DEFINITION,locations:[(0,ie.stringToNameNode)(B.FIELD_DEFINITION_UPPER)],name:(0,ie.stringToNameNode)(B.EDFS_NATS_REQUEST),repeatable:!1};Z.EDFS_NATS_SUBSCRIBE_DEFINITION={arguments:[{kind:ue.Kind.INPUT_VALUE_DEFINITION,name:(0,ie.stringToNameNode)(B.SUBJECTS),type:{kind:ue.Kind.NON_NULL_TYPE,type:{kind:ue.Kind.LIST_TYPE,type:Z.REQUIRED_STRING_TYPE_NODE}}},{kind:ue.Kind.INPUT_VALUE_DEFINITION,name:(0,ie.stringToNameNode)(B.PROVIDER_ID),type:Z.REQUIRED_STRING_TYPE_NODE,defaultValue:{kind:ue.Kind.STRING,value:B.DEFAULT_EDFS_PROVIDER_ID}},{kind:ue.Kind.INPUT_VALUE_DEFINITION,name:(0,ie.stringToNameNode)(B.STREAM_CONFIGURATION),type:(0,ie.stringToNamedTypeNode)(B.EDFS_NATS_STREAM_CONFIGURATION)}],kind:ue.Kind.DIRECTIVE_DEFINITION,locations:[(0,ie.stringToNameNode)(B.FIELD_DEFINITION_UPPER)],name:(0,ie.stringToNameNode)(B.EDFS_NATS_SUBSCRIBE),repeatable:!1};Z.REQUIRED_FIELDSET_TYPE_NODE={kind:ue.Kind.NON_NULL_TYPE,type:(0,ie.stringToNamedTypeNode)(B.FIELD_SET_SCALAR)};Z.KEY_DEFINITION={arguments:[{kind:ue.Kind.INPUT_VALUE_DEFINITION,name:(0,ie.stringToNameNode)(B.FIELDS),type:Z.REQUIRED_FIELDSET_TYPE_NODE},{kind:ue.Kind.INPUT_VALUE_DEFINITION,name:(0,ie.stringToNameNode)(B.RESOLVABLE),type:(0,ie.stringToNamedTypeNode)(B.BOOLEAN_SCALAR),defaultValue:{kind:ue.Kind.BOOLEAN,value:!0}}],kind:ue.Kind.DIRECTIVE_DEFINITION,locations:(0,ie.stringArrayToNameNodeArray)([B.INTERFACE_UPPER,B.OBJECT_UPPER]),name:(0,ie.stringToNameNode)(B.KEY),repeatable:!0};Z.PROVIDES_DEFINITION={arguments:[{kind:ue.Kind.INPUT_VALUE_DEFINITION,name:(0,ie.stringToNameNode)(B.FIELDS),type:Z.REQUIRED_FIELDSET_TYPE_NODE}],kind:ue.Kind.DIRECTIVE_DEFINITION,locations:[(0,ie.stringToNameNode)(B.FIELD_DEFINITION_UPPER)],name:(0,ie.stringToNameNode)(B.PROVIDES),repeatable:!1};Z.REQUIRES_DEFINITION={arguments:[{kind:ue.Kind.INPUT_VALUE_DEFINITION,name:(0,ie.stringToNameNode)(B.FIELDS),type:{kind:ue.Kind.NON_NULL_TYPE,type:(0,ie.stringToNamedTypeNode)(B.FIELD_SET_SCALAR)}}],kind:ue.Kind.DIRECTIVE_DEFINITION,locations:[(0,ie.stringToNameNode)(B.FIELD_DEFINITION_UPPER)],name:(0,ie.stringToNameNode)(B.REQUIRES),repeatable:!1};Z.SPECIFIED_BY_DEFINITION={arguments:[{kind:ue.Kind.INPUT_VALUE_DEFINITION,name:(0,ie.stringToNameNode)(B.URL_LOWER),type:Z.REQUIRED_STRING_TYPE_NODE}],kind:ue.Kind.DIRECTIVE_DEFINITION,locations:(0,ie.stringArrayToNameNodeArray)([B.SCALAR_UPPER]),name:(0,ie.stringToNameNode)(B.SPECIFIED_BY),repeatable:!1};Z.TAG_DEFINITION={arguments:[{directives:[],kind:ue.Kind.INPUT_VALUE_DEFINITION,name:(0,ie.stringToNameNode)(B.NAME),type:{kind:ue.Kind.NON_NULL_TYPE,type:(0,ie.stringToNamedTypeNode)(B.STRING_SCALAR)}}],kind:ue.Kind.DIRECTIVE_DEFINITION,locations:(0,ie.stringArrayToNameNodeArray)([B.ARGUMENT_DEFINITION_UPPER,B.ENUM_UPPER,B.ENUM_VALUE_UPPER,B.FIELD_DEFINITION_UPPER,B.INPUT_FIELD_DEFINITION_UPPER,B.INPUT_OBJECT_UPPER,B.INTERFACE_UPPER,B.OBJECT_UPPER,B.SCALAR_UPPER,B.UNION_UPPER]),name:(0,ie.stringToNameNode)(B.TAG),repeatable:!0};Z.EDFS_REDIS_PUBLISH_DEFINITION={arguments:[{kind:ue.Kind.INPUT_VALUE_DEFINITION,name:(0,ie.stringToNameNode)(B.CHANNEL),type:Z.REQUIRED_STRING_TYPE_NODE},{kind:ue.Kind.INPUT_VALUE_DEFINITION,name:(0,ie.stringToNameNode)(B.PROVIDER_ID),type:Z.REQUIRED_STRING_TYPE_NODE,defaultValue:{kind:ue.Kind.STRING,value:B.DEFAULT_EDFS_PROVIDER_ID}}],kind:ue.Kind.DIRECTIVE_DEFINITION,locations:[(0,ie.stringToNameNode)(B.FIELD_DEFINITION_UPPER)],name:(0,ie.stringToNameNode)(B.EDFS_REDIS_PUBLISH),repeatable:!1};Z.EDFS_REDIS_SUBSCRIBE_DEFINITION={arguments:[{kind:ue.Kind.INPUT_VALUE_DEFINITION,name:(0,ie.stringToNameNode)(B.CHANNELS),type:{kind:ue.Kind.NON_NULL_TYPE,type:{kind:ue.Kind.LIST_TYPE,type:Z.REQUIRED_STRING_TYPE_NODE}}},{kind:ue.Kind.INPUT_VALUE_DEFINITION,name:(0,ie.stringToNameNode)(B.PROVIDER_ID),type:Z.REQUIRED_STRING_TYPE_NODE,defaultValue:{kind:ue.Kind.STRING,value:B.DEFAULT_EDFS_PROVIDER_ID}}],kind:ue.Kind.DIRECTIVE_DEFINITION,locations:[(0,ie.stringToNameNode)(B.FIELD_DEFINITION_UPPER)],name:(0,ie.stringToNameNode)(B.EDFS_REDIS_SUBSCRIBE),repeatable:!1};Z.BASE_DIRECTIVE_DEFINITION_BY_DIRECTIVE_NAME=new Map([[B.DEPRECATED,Z.DEPRECATED_DEFINITION],[B.EXTENDS,Z.EXTENDS_DEFINITION],[B.EXTERNAL,Z.EXTERNAL_DEFINITION],[B.EDFS_KAFKA_PUBLISH,Z.EDFS_KAFKA_PUBLISH_DEFINITION],[B.EDFS_KAFKA_SUBSCRIBE,Z.EDFS_KAFKA_SUBSCRIBE_DEFINITION],[B.EDFS_NATS_PUBLISH,Z.EDFS_NATS_PUBLISH_DEFINITION],[B.EDFS_NATS_REQUEST,Z.EDFS_NATS_REQUEST_DEFINITION],[B.EDFS_NATS_SUBSCRIBE,Z.EDFS_NATS_SUBSCRIBE_DEFINITION],[B.EDFS_REDIS_PUBLISH,Z.EDFS_REDIS_PUBLISH_DEFINITION],[B.EDFS_REDIS_SUBSCRIBE,Z.EDFS_REDIS_SUBSCRIBE_DEFINITION],[B.KEY,Z.KEY_DEFINITION],[B.PROVIDES,Z.PROVIDES_DEFINITION],[B.REQUIRES,Z.REQUIRES_DEFINITION],[B.SPECIFIED_BY,Z.SPECIFIED_BY_DEFINITION],[B.TAG,Z.TAG_DEFINITION]]);Z.ALL_IN_BUILT_DIRECTIVE_NAMES=new Set([B.AUTHENTICATED,B.COMPOSE_DIRECTIVE,B.CONFIGURE_DESCRIPTION,B.CONFIGURE_CHILD_DESCRIPTIONS,B.DEPRECATED,B.EDFS_NATS_PUBLISH,B.EDFS_NATS_REQUEST,B.EDFS_NATS_SUBSCRIBE,B.EDFS_KAFKA_PUBLISH,B.EDFS_KAFKA_SUBSCRIBE,B.EDFS_REDIS_PUBLISH,B.EDFS_REDIS_SUBSCRIBE,B.EXTENDS,B.EXTERNAL,B.INACCESSIBLE,B.INTERFACE_OBJECT,B.KEY,B.LINK,B.OVERRIDE,B.PROVIDES,B.REQUIRES,B.REQUIRES_SCOPES,B.SHAREABLE,B.SPECIFIED_BY,B.SUBSCRIPTION_FILTER,B.TAG]);Z.AUTHENTICATED_DEFINITION={arguments:[],kind:ue.Kind.DIRECTIVE_DEFINITION,locations:(0,ie.stringArrayToNameNodeArray)([B.ENUM_UPPER,B.FIELD_DEFINITION_UPPER,B.INTERFACE_UPPER,B.OBJECT_UPPER,B.SCALAR_UPPER]),name:(0,ie.stringToNameNode)(B.AUTHENTICATED),repeatable:!1};Z.COMPOSE_DIRECTIVE_DEFINITION={arguments:[{kind:ue.Kind.INPUT_VALUE_DEFINITION,name:(0,ie.stringToNameNode)(B.NAME),type:Z.REQUIRED_STRING_TYPE_NODE}],kind:ue.Kind.DIRECTIVE_DEFINITION,locations:(0,ie.stringArrayToNameNodeArray)([B.SCHEMA_UPPER]),name:(0,ie.stringToNameNode)(B.COMPOSE_DIRECTIVE),repeatable:!0};Z.INACCESSIBLE_DEFINITION={arguments:[],kind:ue.Kind.DIRECTIVE_DEFINITION,locations:(0,ie.stringArrayToNameNodeArray)([B.ARGUMENT_DEFINITION_UPPER,B.ENUM_UPPER,B.ENUM_VALUE_UPPER,B.FIELD_DEFINITION_UPPER,B.INPUT_FIELD_DEFINITION_UPPER,B.INPUT_OBJECT_UPPER,B.INTERFACE_UPPER,B.OBJECT_UPPER,B.SCALAR_UPPER,B.UNION_UPPER]),name:(0,ie.stringToNameNode)(B.INACCESSIBLE),repeatable:!1};Z.INTERFACE_OBJECT_DEFINITION={kind:ue.Kind.DIRECTIVE_DEFINITION,locations:(0,ie.stringArrayToNameNodeArray)([B.OBJECT_UPPER]),name:(0,ie.stringToNameNode)(B.INTERFACE_OBJECT),repeatable:!1};Z.LINK_IMPORT_DEFINITION={kind:ue.Kind.SCALAR_TYPE_DEFINITION,name:(0,ie.stringToNameNode)(B.LINK_IMPORT)};Z.LINK_PURPOSE_DEFINITION={kind:ue.Kind.ENUM_TYPE_DEFINITION,name:(0,ie.stringToNameNode)(B.LINK_PURPOSE),values:[{directives:[],kind:ue.Kind.ENUM_VALUE_DEFINITION,name:(0,ie.stringToNameNode)(B.EXECUTION)},{directives:[],kind:ue.Kind.ENUM_VALUE_DEFINITION,name:(0,ie.stringToNameNode)(B.SECURITY)}]};Z.LINK_DEFINITION={arguments:[{kind:ue.Kind.INPUT_VALUE_DEFINITION,name:(0,ie.stringToNameNode)(B.URL_LOWER),type:{kind:ue.Kind.NON_NULL_TYPE,type:(0,ie.stringToNamedTypeNode)(B.STRING_SCALAR)}},{kind:ue.Kind.INPUT_VALUE_DEFINITION,name:(0,ie.stringToNameNode)(B.AS),type:(0,ie.stringToNamedTypeNode)(B.STRING_SCALAR)},{kind:ue.Kind.INPUT_VALUE_DEFINITION,name:(0,ie.stringToNameNode)(B.FOR),type:(0,ie.stringToNamedTypeNode)(B.LINK_PURPOSE)},{kind:ue.Kind.INPUT_VALUE_DEFINITION,name:(0,ie.stringToNameNode)(B.IMPORT),type:{kind:ue.Kind.LIST_TYPE,type:(0,ie.stringToNamedTypeNode)(B.LINK_IMPORT)}}],kind:ue.Kind.DIRECTIVE_DEFINITION,locations:(0,ie.stringArrayToNameNodeArray)([B.SCHEMA_UPPER]),name:(0,ie.stringToNameNode)(B.LINK),repeatable:!0};Z.OVERRIDE_DEFINITION={arguments:[{kind:ue.Kind.INPUT_VALUE_DEFINITION,name:(0,ie.stringToNameNode)(B.FROM),type:{kind:ue.Kind.NON_NULL_TYPE,type:(0,ie.stringToNamedTypeNode)(B.STRING_SCALAR)}}],kind:ue.Kind.DIRECTIVE_DEFINITION,locations:(0,ie.stringArrayToNameNodeArray)([B.FIELD_DEFINITION_UPPER]),name:(0,ie.stringToNameNode)(B.OVERRIDE),repeatable:!1};Z.REQUIRES_SCOPES_DEFINITION={arguments:[{directives:[],kind:ue.Kind.INPUT_VALUE_DEFINITION,name:(0,ie.stringToNameNode)(B.SCOPES),type:{kind:ue.Kind.NON_NULL_TYPE,type:{kind:ue.Kind.LIST_TYPE,type:{kind:ue.Kind.NON_NULL_TYPE,type:{kind:ue.Kind.LIST_TYPE,type:{kind:ue.Kind.NON_NULL_TYPE,type:(0,ie.stringToNamedTypeNode)(B.SCOPE_SCALAR)}}}}}}],kind:ue.Kind.DIRECTIVE_DEFINITION,locations:(0,ie.stringArrayToNameNodeArray)([B.ENUM_UPPER,B.FIELD_DEFINITION_UPPER,B.INTERFACE_UPPER,B.OBJECT_UPPER,B.SCALAR_UPPER]),name:(0,ie.stringToNameNode)(B.REQUIRES_SCOPES),repeatable:!1};Z.SHAREABLE_DEFINITION={kind:ue.Kind.DIRECTIVE_DEFINITION,locations:(0,ie.stringArrayToNameNodeArray)([B.FIELD_DEFINITION_UPPER,B.OBJECT_UPPER]),name:(0,ie.stringToNameNode)(B.SHAREABLE),repeatable:!0};Z.SUBSCRIPTION_FILTER_DEFINITION={arguments:[{kind:ue.Kind.INPUT_VALUE_DEFINITION,name:(0,ie.stringToNameNode)(B.CONDITION),type:{kind:ue.Kind.NON_NULL_TYPE,type:(0,ie.stringToNamedTypeNode)(B.SUBSCRIPTION_FILTER_CONDITION)}}],kind:ue.Kind.DIRECTIVE_DEFINITION,locations:(0,ie.stringArrayToNameNodeArray)([B.FIELD_DEFINITION_UPPER]),name:(0,ie.stringToNameNode)(B.SUBSCRIPTION_FILTER),repeatable:!1};Z.SUBSCRIPTION_FILTER_CONDITION_DEFINITION={fields:[{kind:ue.Kind.INPUT_VALUE_DEFINITION,name:(0,ie.stringToNameNode)(B.AND_UPPER),type:{kind:ue.Kind.LIST_TYPE,type:{kind:ue.Kind.NON_NULL_TYPE,type:(0,ie.stringToNamedTypeNode)(B.SUBSCRIPTION_FILTER_CONDITION)}}},{kind:ue.Kind.INPUT_VALUE_DEFINITION,name:(0,ie.stringToNameNode)(B.IN_UPPER),type:(0,ie.stringToNamedTypeNode)(B.SUBSCRIPTION_FIELD_CONDITION)},{kind:ue.Kind.INPUT_VALUE_DEFINITION,name:(0,ie.stringToNameNode)(B.OR_UPPER),type:{kind:ue.Kind.LIST_TYPE,type:{kind:ue.Kind.NON_NULL_TYPE,type:(0,ie.stringToNamedTypeNode)(B.SUBSCRIPTION_FILTER_CONDITION)}}},{kind:ue.Kind.INPUT_VALUE_DEFINITION,name:(0,ie.stringToNameNode)(B.NOT_UPPER),type:(0,ie.stringToNamedTypeNode)(B.SUBSCRIPTION_FILTER_CONDITION)}],kind:ue.Kind.INPUT_OBJECT_TYPE_DEFINITION,name:(0,ie.stringToNameNode)(B.SUBSCRIPTION_FILTER_CONDITION)};Z.SUBSCRIPTION_FILTER_VALUE_DEFINITION={kind:ue.Kind.SCALAR_TYPE_DEFINITION,name:(0,ie.stringToNameNode)(B.SUBSCRIPTION_FILTER_VALUE)};Z.SUBSCRIPTION_FIELD_CONDITION_DEFINITION={fields:[{kind:ue.Kind.INPUT_VALUE_DEFINITION,name:(0,ie.stringToNameNode)(B.FIELD_PATH),type:{kind:ue.Kind.NON_NULL_TYPE,type:(0,ie.stringToNamedTypeNode)(B.STRING_SCALAR)}},{kind:ue.Kind.INPUT_VALUE_DEFINITION,name:(0,ie.stringToNameNode)(B.VALUES),type:{kind:ue.Kind.NON_NULL_TYPE,type:{kind:ue.Kind.LIST_TYPE,type:(0,ie.stringToNamedTypeNode)(B.SUBSCRIPTION_FILTER_VALUE)}}}],kind:ue.Kind.INPUT_OBJECT_TYPE_DEFINITION,name:(0,ie.stringToNameNode)(B.SUBSCRIPTION_FIELD_CONDITION)};Z.V2_DIRECTIVE_DEFINITION_BY_DIRECTIVE_NAME=new Map([[B.AUTHENTICATED,Z.AUTHENTICATED_DEFINITION],[B.COMPOSE_DIRECTIVE,Z.COMPOSE_DIRECTIVE_DEFINITION],[B.INACCESSIBLE,Z.INACCESSIBLE_DEFINITION],[B.INTERFACE_OBJECT,Z.INTERFACE_OBJECT_DEFINITION],[B.LINK,Z.LINK_DEFINITION],[B.OVERRIDE,Z.OVERRIDE_DEFINITION],[B.REQUIRES_SCOPES,Z.REQUIRES_SCOPES_DEFINITION],[B.SHAREABLE,Z.SHAREABLE_DEFINITION]]);Z.BASE_DIRECTIVE_DEFINITIONS=[Z.DEPRECATED_DEFINITION,Z.EXTENDS_DEFINITION,Z.EXTERNAL_DEFINITION,Z.KEY_DEFINITION,Z.PROVIDES_DEFINITION,Z.REQUIRES_DEFINITION,Z.SPECIFIED_BY_DEFINITION,Z.TAG_DEFINITION];Z.EVENT_DRIVEN_DIRECTIVE_DEFINITIONS_BY_DIRECTIVE_NAME=new Map([[B.EDFS_KAFKA_PUBLISH,Z.EDFS_KAFKA_PUBLISH_DEFINITION],[B.EDFS_KAFKA_SUBSCRIBE,Z.EDFS_KAFKA_SUBSCRIBE_DEFINITION],[B.EDFS_NATS_PUBLISH,Z.EDFS_NATS_PUBLISH_DEFINITION],[B.EDFS_NATS_REQUEST,Z.EDFS_NATS_REQUEST_DEFINITION],[B.EDFS_NATS_SUBSCRIBE,Z.EDFS_NATS_SUBSCRIBE_DEFINITION],[B.EDFS_REDIS_PUBLISH,Z.EDFS_REDIS_PUBLISH_DEFINITION],[B.EDFS_REDIS_SUBSCRIBE,Z.EDFS_REDIS_SUBSCRIBE_DEFINITION]]);Z.VERSION_TWO_DIRECTIVE_DEFINITIONS=[Z.AUTHENTICATED_DEFINITION,Z.COMPOSE_DIRECTIVE_DEFINITION,Z.INACCESSIBLE_DEFINITION,Z.INTERFACE_OBJECT_DEFINITION,Z.OVERRIDE_DEFINITION,Z.REQUIRES_SCOPES_DEFINITION,Z.SHAREABLE_DEFINITION];Z.FIELD_SET_SCALAR_DEFINITION={kind:ue.Kind.SCALAR_TYPE_DEFINITION,name:(0,ie.stringToNameNode)(B.FIELD_SET_SCALAR)};Z.SCOPE_SCALAR_DEFINITION={kind:ue.Kind.SCALAR_TYPE_DEFINITION,name:(0,ie.stringToNameNode)(B.SCOPE_SCALAR)};Z.EDFS_NATS_STREAM_CONFIGURATION_DEFINITION={kind:ue.Kind.INPUT_OBJECT_TYPE_DEFINITION,name:(0,ie.stringToNameNode)(B.EDFS_NATS_STREAM_CONFIGURATION),fields:[{kind:ue.Kind.INPUT_VALUE_DEFINITION,name:(0,ie.stringToNameNode)(B.CONSUMER_NAME),type:{kind:ue.Kind.NON_NULL_TYPE,type:(0,ie.stringToNamedTypeNode)(B.STRING_SCALAR)}},{kind:ue.Kind.INPUT_VALUE_DEFINITION,name:(0,ie.stringToNameNode)(B.STREAM_NAME),type:{kind:ue.Kind.NON_NULL_TYPE,type:(0,ie.stringToNamedTypeNode)(B.STRING_SCALAR)}},{kind:ue.Kind.INPUT_VALUE_DEFINITION,name:(0,ie.stringToNameNode)(B.CONSUMER_INACTIVE_THRESHOLD),type:{kind:ue.Kind.NON_NULL_TYPE,type:(0,ie.stringToNamedTypeNode)(B.INT_SCALAR)},defaultValue:{kind:ue.Kind.INT,value:$Z.DEFAULT_CONSUMER_INACTIVE_THRESHOLD.toString()}}]};Z.CONFIGURE_DESCRIPTION_DEFINITION={arguments:[{directives:[],kind:ue.Kind.INPUT_VALUE_DEFINITION,name:(0,ie.stringToNameNode)(B.PROPAGATE),type:{kind:ue.Kind.NON_NULL_TYPE,type:(0,ie.stringToNamedTypeNode)(B.BOOLEAN_SCALAR)},defaultValue:{kind:ue.Kind.BOOLEAN,value:!0}},{directives:[],kind:ue.Kind.INPUT_VALUE_DEFINITION,name:(0,ie.stringToNameNode)(B.DESCRIPTION_OVERRIDE),type:(0,ie.stringToNamedTypeNode)(B.STRING_SCALAR)}],kind:ue.Kind.DIRECTIVE_DEFINITION,locations:(0,ie.stringArrayToNameNodeArray)([B.ARGUMENT_DEFINITION_UPPER,B.ENUM_UPPER,B.ENUM_VALUE_UPPER,B.FIELD_DEFINITION_UPPER,B.INTERFACE_UPPER,B.INPUT_OBJECT_UPPER,B.INPUT_FIELD_DEFINITION_UPPER,B.OBJECT_UPPER,B.SCALAR_UPPER,B.SCHEMA_UPPER,B.UNION_UPPER]),name:(0,ie.stringToNameNode)(B.CONFIGURE_DESCRIPTION),repeatable:!1};Z.CONFIGURE_CHILD_DESCRIPTIONS_DEFINITION={arguments:[{directives:[],kind:ue.Kind.INPUT_VALUE_DEFINITION,name:(0,ie.stringToNameNode)(B.PROPAGATE),type:{kind:ue.Kind.NON_NULL_TYPE,type:(0,ie.stringToNamedTypeNode)(B.BOOLEAN_SCALAR)},defaultValue:{kind:ue.Kind.BOOLEAN,value:!0}}],kind:ue.Kind.DIRECTIVE_DEFINITION,locations:(0,ie.stringArrayToNameNodeArray)([B.ENUM_UPPER,B.INPUT_OBJECT_UPPER,B.INTERFACE_UPPER,B.OBJECT_UPPER]),name:(0,ie.stringToNameNode)(B.CONFIGURE_CHILD_DESCRIPTIONS),repeatable:!1};Z.EDFS_ARGS_REGEXP=/{{\s*args\.([a-zA-Z0-9_]+)\s*}}/g;Z.MAX_OR_SCOPES=16});var yN=w(Gu=>{"use strict";m();T();N();Object.defineProperty(Gu,"__esModule",{value:!0});Gu.newParentTagData=HZ;Gu.newChildTagData=zZ;Gu.validateImplicitFieldSets=WZ;Gu.newContractTagOptionsFromArrays=XZ;Gu.getDescriptionFromString=ZZ;var QZ=Ho(),zr=Ae(),YZ=hs(),JZ=Jr(),WL=Hr();function HZ(e){return{childTagDataByChildName:new Map,tagNames:new Set,typeName:e}}function zZ(e){return{name:e,tagNames:new Set,tagNamesByArgumentName:new Map}}function WZ({conditionalFieldDataByCoords:e,currentSubgraphName:t,entityData:n,implicitKeys:r,objectData:i,parentDefinitionDataByTypeName:a,graphNode:o}){let c=(0,WL.getValueOrDefault)(n.keyFieldSetDatasBySubgraphName,t,()=>new Map);for(let[l,p]of n.documentNodeByKeyFieldSet){if(c.has(l))continue;let f=[i],y=[],g=[],_=-1,F=!0,U=!0;(0,zr.visit)(p,{Argument:{enter(){return U=!1,zr.BREAK}},Field:{enter(K){let J=f[_];if(F)return U=!1,zr.BREAK;let ee=K.name.value,W=J.fieldDataByFieldName.get(ee);if(!W||W.argumentDataByArgumentName.size||y[_].has(ee))return U=!1,zr.BREAK;let{isUnconditionallyProvided:Te}=(0,WL.getOrThrowError)(W.externalFieldDataBySubgraphName,t,`${W.originalParentTypeName}.${ee}.externalFieldDataBySubgraphName`),de=e.get(`${W.renamedParentTypeName}.${ee}`);if(de){if(de.providedBy.length>0)g.push(...de.providedBy);else if(de.requiredBy.length>0)return U=!1,zr.BREAK}else if(!Te)return U=!1,zr.BREAK;y[_].add(ee);let we=(0,QZ.getTypeNodeNamedTypeName)(W.node.type);if(YZ.BASE_SCALARS.has(we))return;let qe=a.get(we);if(!qe)return U=!1,zr.BREAK;if(qe.kind===zr.Kind.OBJECT_TYPE_DEFINITION){F=!0,f.push(qe);return}if((0,JZ.isKindAbstract)(qe.kind))return U=!1,zr.BREAK}},InlineFragment:{enter(){return U=!1,zr.BREAK}},SelectionSet:{enter(){if(!F||(_+=1,F=!1,_<0||_>=f.length))return U=!1,zr.BREAK;y.push(new Set)},leave(){if(F)return U=!1,zr.BREAK;_-=1,f.pop(),y.pop()}}}),U&&(r.push(Q(M({fieldName:"",selectionSet:l},g.length>0?{conditions:g}:{}),{disableEntityResolver:!0})),o&&o.satisfiedFieldSets.add(l))}}function XZ(e,t){return{tagNamesToExclude:new Set(e),tagNamesToInclude:new Set(t)}}function ZZ(e){if(e)return{block:!0,kind:zr.Kind.STRING,value:e}}});var rp=w(Ui=>{"use strict";m();T();N();Object.defineProperty(Ui,"__esModule",{value:!0});Ui.SUBSCRIPTION_FILTER_LIST_INPUT_NAMES=Ui.SUBSCRIPTION_FILTER_INPUT_NAMES=Ui.STREAM_CONFIGURATION_FIELD_NAMES=Ui.EVENT_DIRECTIVE_NAMES=Ui.TYPE_SYSTEM_DIRECTIVE_LOCATIONS=void 0;var cn=lr();Ui.TYPE_SYSTEM_DIRECTIVE_LOCATIONS=new Set([cn.ARGUMENT_DEFINITION_UPPER,cn.ENUM_UPPER,cn.ENUM_VALUE_UPPER,cn.FIELD_DEFINITION_UPPER,cn.INPUT_FIELD_DEFINITION_UPPER,cn.INPUT_OBJECT_UPPER,cn.INTERFACE_UPPER,cn.OBJECT_UPPER,cn.SCALAR_UPPER,cn.SCHEMA_UPPER,cn.UNION_UPPER]);Ui.EVENT_DIRECTIVE_NAMES=new Set([cn.EDFS_KAFKA_PUBLISH,cn.EDFS_KAFKA_SUBSCRIBE,cn.EDFS_NATS_PUBLISH,cn.EDFS_NATS_REQUEST,cn.EDFS_NATS_SUBSCRIBE,cn.EDFS_REDIS_PUBLISH,cn.EDFS_REDIS_SUBSCRIBE]);Ui.STREAM_CONFIGURATION_FIELD_NAMES=new Set([cn.CONSUMER_INACTIVE_THRESHOLD,cn.CONSUMER_NAME,cn.STREAM_NAME]);Ui.SUBSCRIPTION_FILTER_INPUT_NAMES=new Set([cn.AND_UPPER,cn.IN_UPPER,cn.NOT_UPPER,cn.OR_UPPER]);Ui.SUBSCRIPTION_FILTER_LIST_INPUT_NAMES=new Set([cn.AND_UPPER,cn.OR_UPPER])});var ki=w((ev,XL)=>{"use strict";m();T();N();var ip=function(e){return e&&e.Math===Math&&e};XL.exports=ip(typeof globalThis=="object"&&globalThis)||ip(typeof window=="object"&&window)||ip(typeof self=="object"&&self)||ip(typeof global=="object"&&global)||ip(typeof ev=="object"&&ev)||function(){return this}()||Function("return this")()});var ys=w((qge,ZL)=>{"use strict";m();T();N();ZL.exports=function(e){try{return!!e()}catch(t){return!0}}});var zo=w((Gge,eC)=>{"use strict";m();T();N();var eee=ys();eC.exports=!eee(function(){return Object.defineProperty({},1,{get:function(){return 7}})[1]!==7})});var tv=w((Jge,tC)=>{"use strict";m();T();N();var tee=ys();tC.exports=!tee(function(){var e=function(){}.bind();return typeof e!="function"||e.hasOwnProperty("prototype")})});var $u=w((Xge,nC)=>{"use strict";m();T();N();var nee=tv(),IN=Function.prototype.call;nC.exports=nee?IN.bind(IN):function(){return IN.apply(IN,arguments)}});var sC=w(aC=>{"use strict";m();T();N();var rC={}.propertyIsEnumerable,iC=Object.getOwnPropertyDescriptor,ree=iC&&!rC.call({1:2},1);aC.f=ree?function(t){var n=iC(this,t);return!!n&&n.enumerable}:rC});var nv=w((s_e,oC)=>{"use strict";m();T();N();oC.exports=function(e,t){return{enumerable:!(e&1),configurable:!(e&2),writable:!(e&4),value:t}}});var fi=w((l_e,lC)=>{"use strict";m();T();N();var uC=tv(),cC=Function.prototype,rv=cC.call,iee=uC&&cC.bind.bind(rv,rv);lC.exports=uC?iee:function(e){return function(){return rv.apply(e,arguments)}}});var fC=w((m_e,pC)=>{"use strict";m();T();N();var dC=fi(),aee=dC({}.toString),see=dC("".slice);pC.exports=function(e){return see(aee(e),8,-1)}});var NC=w((h_e,mC)=>{"use strict";m();T();N();var oee=fi(),uee=ys(),cee=fC(),iv=Object,lee=oee("".split);mC.exports=uee(function(){return!iv("z").propertyIsEnumerable(0)})?function(e){return cee(e)==="String"?lee(e,""):iv(e)}:iv});var av=w((__e,TC)=>{"use strict";m();T();N();TC.exports=function(e){return e==null}});var sv=w((D_e,EC)=>{"use strict";m();T();N();var dee=av(),pee=TypeError;EC.exports=function(e){if(dee(e))throw new pee("Can't call method on "+e);return e}});var gN=w((F_e,hC)=>{"use strict";m();T();N();var fee=NC(),mee=sv();hC.exports=function(e){return fee(mee(e))}});var oa=w((C_e,yC)=>{"use strict";m();T();N();var ov=typeof document=="object"&&document.all;yC.exports=typeof ov=="undefined"&&ov!==void 0?function(e){return typeof e=="function"||e===ov}:function(e){return typeof e=="function"}});var il=w((M_e,IC)=>{"use strict";m();T();N();var Nee=oa();IC.exports=function(e){return typeof e=="object"?e!==null:Nee(e)}});var _N=w((j_e,gC)=>{"use strict";m();T();N();var uv=ki(),Tee=oa(),Eee=function(e){return Tee(e)?e:void 0};gC.exports=function(e,t){return arguments.length<2?Eee(uv[e]):uv[e]&&uv[e][t]}});var vC=w((Q_e,_C)=>{"use strict";m();T();N();var hee=fi();_C.exports=hee({}.isPrototypeOf)});var bC=w((z_e,DC)=>{"use strict";m();T();N();var yee=ki(),SC=yee.navigator,OC=SC&&SC.userAgent;DC.exports=OC?String(OC):""});var CC=w((eve,LC)=>{"use strict";m();T();N();var wC=ki(),cv=bC(),AC=wC.process,RC=wC.Deno,FC=AC&&AC.versions||RC&&RC.version,PC=FC&&FC.v8,ua,vN;PC&&(ua=PC.split("."),vN=ua[0]>0&&ua[0]<4?1:+(ua[0]+ua[1]));!vN&&cv&&(ua=cv.match(/Edge\/(\d+)/),(!ua||ua[1]>=74)&&(ua=cv.match(/Chrome\/(\d+)/),ua&&(vN=+ua[1])));LC.exports=vN});var lv=w((ive,UC)=>{"use strict";m();T();N();var BC=CC(),Iee=ys(),gee=ki(),_ee=gee.String;UC.exports=!!Object.getOwnPropertySymbols&&!Iee(function(){var e=Symbol("symbol detection");return!_ee(e)||!(Object(e)instanceof Symbol)||!Symbol.sham&&BC&&BC<41})});var dv=w((uve,kC)=>{"use strict";m();T();N();var vee=lv();kC.exports=vee&&!Symbol.sham&&typeof Symbol.iterator=="symbol"});var pv=w((pve,MC)=>{"use strict";m();T();N();var See=_N(),Oee=oa(),Dee=vC(),bee=dv(),Aee=Object;MC.exports=bee?function(e){return typeof e=="symbol"}:function(e){var t=See("Symbol");return Oee(t)&&Dee(t.prototype,Aee(e))}});var qC=w((Tve,xC)=>{"use strict";m();T();N();var Ree=String;xC.exports=function(e){try{return Ree(e)}catch(t){return"Object"}}});var SN=w((Ive,VC)=>{"use strict";m();T();N();var Fee=oa(),Pee=qC(),wee=TypeError;VC.exports=function(e){if(Fee(e))return e;throw new wee(Pee(e)+" is not a function")}});var fv=w((Sve,jC)=>{"use strict";m();T();N();var Lee=SN(),Cee=av();jC.exports=function(e,t){var n=e[t];return Cee(n)?void 0:Lee(n)}});var GC=w((Ave,KC)=>{"use strict";m();T();N();var mv=$u(),Nv=oa(),Tv=il(),Bee=TypeError;KC.exports=function(e,t){var n,r;if(t==="string"&&Nv(n=e.toString)&&!Tv(r=mv(n,e))||Nv(n=e.valueOf)&&!Tv(r=mv(n,e))||t!=="string"&&Nv(n=e.toString)&&!Tv(r=mv(n,e)))return r;throw new Bee("Can't convert object to primitive value")}});var QC=w((wve,$C)=>{"use strict";m();T();N();$C.exports=!1});var ON=w((Uve,JC)=>{"use strict";m();T();N();var YC=ki(),Uee=Object.defineProperty;JC.exports=function(e,t){try{Uee(YC,e,{value:t,configurable:!0,writable:!0})}catch(n){YC[e]=t}return t}});var DN=w((qve,WC)=>{"use strict";m();T();N();var kee=QC(),Mee=ki(),xee=ON(),HC="__core-js_shared__",zC=WC.exports=Mee[HC]||xee(HC,{});(zC.versions||(zC.versions=[])).push({version:"3.41.0",mode:kee?"pure":"global",copyright:"\xA9 2014-2025 Denis Pushkarev (zloirock.ru)",license:"https://github.com/zloirock/core-js/blob/v3.41.0/LICENSE",source:"https://github.com/zloirock/core-js"})});var Ev=w((Gve,ZC)=>{"use strict";m();T();N();var XC=DN();ZC.exports=function(e,t){return XC[e]||(XC[e]=t||{})}});var tB=w((Jve,eB)=>{"use strict";m();T();N();var qee=sv(),Vee=Object;eB.exports=function(e){return Vee(qee(e))}});var Wo=w((Xve,nB)=>{"use strict";m();T();N();var jee=fi(),Kee=tB(),Gee=jee({}.hasOwnProperty);nB.exports=Object.hasOwn||function(t,n){return Gee(Kee(t),n)}});var hv=w((nSe,rB)=>{"use strict";m();T();N();var $ee=fi(),Qee=0,Yee=Math.random(),Jee=$ee(1 .toString);rB.exports=function(e){return"Symbol("+(e===void 0?"":e)+")_"+Jee(++Qee+Yee,36)}});var sB=w((sSe,aB)=>{"use strict";m();T();N();var Hee=ki(),zee=Ev(),iB=Wo(),Wee=hv(),Xee=lv(),Zee=dv(),al=Hee.Symbol,yv=zee("wks"),ete=Zee?al.for||al:al&&al.withoutSetter||Wee;aB.exports=function(e){return iB(yv,e)||(yv[e]=Xee&&iB(al,e)?al[e]:ete("Symbol."+e)),yv[e]}});var lB=w((lSe,cB)=>{"use strict";m();T();N();var tte=$u(),oB=il(),uB=pv(),nte=fv(),rte=GC(),ite=sB(),ate=TypeError,ste=ite("toPrimitive");cB.exports=function(e,t){if(!oB(e)||uB(e))return e;var n=nte(e,ste),r;if(n){if(t===void 0&&(t="default"),r=tte(n,e,t),!oB(r)||uB(r))return r;throw new ate("Can't convert object to primitive value")}return t===void 0&&(t="number"),rte(e,t)}});var Iv=w((mSe,dB)=>{"use strict";m();T();N();var ote=lB(),ute=pv();dB.exports=function(e){var t=ote(e,"string");return ute(t)?t:t+""}});var mB=w((hSe,fB)=>{"use strict";m();T();N();var cte=ki(),pB=il(),gv=cte.document,lte=pB(gv)&&pB(gv.createElement);fB.exports=function(e){return lte?gv.createElement(e):{}}});var _v=w((_Se,NB)=>{"use strict";m();T();N();var dte=zo(),pte=ys(),fte=mB();NB.exports=!dte&&!pte(function(){return Object.defineProperty(fte("div"),"a",{get:function(){return 7}}).a!==7})});var vv=w(EB=>{"use strict";m();T();N();var mte=zo(),Nte=$u(),Tte=sC(),Ete=nv(),hte=gN(),yte=Iv(),Ite=Wo(),gte=_v(),TB=Object.getOwnPropertyDescriptor;EB.f=mte?TB:function(t,n){if(t=hte(t),n=yte(n),gte)try{return TB(t,n)}catch(r){}if(Ite(t,n))return Ete(!Nte(Tte.f,t,n),t[n])}});var yB=w((FSe,hB)=>{"use strict";m();T();N();var _te=zo(),vte=ys();hB.exports=_te&&vte(function(){return Object.defineProperty(function(){},"prototype",{value:42,writable:!1}).prototype!==42})});var ap=w((CSe,IB)=>{"use strict";m();T();N();var Ste=il(),Ote=String,Dte=TypeError;IB.exports=function(e){if(Ste(e))return e;throw new Dte(Ote(e)+" is not an object")}});var AN=w(_B=>{"use strict";m();T();N();var bte=zo(),Ate=_v(),Rte=yB(),bN=ap(),gB=Iv(),Fte=TypeError,Sv=Object.defineProperty,Pte=Object.getOwnPropertyDescriptor,Ov="enumerable",Dv="configurable",bv="writable";_B.f=bte?Rte?function(t,n,r){if(bN(t),n=gB(n),bN(r),typeof t=="function"&&n==="prototype"&&"value"in r&&bv in r&&!r[bv]){var i=Pte(t,n);i&&i[bv]&&(t[n]=r.value,r={configurable:Dv in r?r[Dv]:i[Dv],enumerable:Ov in r?r[Ov]:i[Ov],writable:!1})}return Sv(t,n,r)}:Sv:function(t,n,r){if(bN(t),n=gB(n),bN(r),Ate)try{return Sv(t,n,r)}catch(i){}if("get"in r||"set"in r)throw new Fte("Accessors not supported");return"value"in r&&(t[n]=r.value),t}});var Av=w((jSe,vB)=>{"use strict";m();T();N();var wte=zo(),Lte=AN(),Cte=nv();vB.exports=wte?function(e,t,n){return Lte.f(e,t,Cte(1,n))}:function(e,t,n){return e[t]=n,e}});var DB=w((QSe,OB)=>{"use strict";m();T();N();var Rv=zo(),Bte=Wo(),SB=Function.prototype,Ute=Rv&&Object.getOwnPropertyDescriptor,Fv=Bte(SB,"name"),kte=Fv&&function(){}.name==="something",Mte=Fv&&(!Rv||Rv&&Ute(SB,"name").configurable);OB.exports={EXISTS:Fv,PROPER:kte,CONFIGURABLE:Mte}});var AB=w((zSe,bB)=>{"use strict";m();T();N();var xte=fi(),qte=oa(),Pv=DN(),Vte=xte(Function.toString);qte(Pv.inspectSource)||(Pv.inspectSource=function(e){return Vte(e)});bB.exports=Pv.inspectSource});var PB=w((eOe,FB)=>{"use strict";m();T();N();var jte=ki(),Kte=oa(),RB=jte.WeakMap;FB.exports=Kte(RB)&&/native code/.test(String(RB))});var CB=w((iOe,LB)=>{"use strict";m();T();N();var Gte=Ev(),$te=hv(),wB=Gte("keys");LB.exports=function(e){return wB[e]||(wB[e]=$te(e))}});var wv=w((uOe,BB)=>{"use strict";m();T();N();BB.exports={}});var xB=w((pOe,MB)=>{"use strict";m();T();N();var Qte=PB(),kB=ki(),Yte=il(),Jte=Av(),Lv=Wo(),Cv=DN(),Hte=CB(),zte=wv(),UB="Object already initialized",Bv=kB.TypeError,Wte=kB.WeakMap,RN,sp,FN,Xte=function(e){return FN(e)?sp(e):RN(e,{})},Zte=function(e){return function(t){var n;if(!Yte(t)||(n=sp(t)).type!==e)throw new Bv("Incompatible receiver, "+e+" required");return n}};Qte||Cv.state?(ca=Cv.state||(Cv.state=new Wte),ca.get=ca.get,ca.has=ca.has,ca.set=ca.set,RN=function(e,t){if(ca.has(e))throw new Bv(UB);return t.facade=e,ca.set(e,t),t},sp=function(e){return ca.get(e)||{}},FN=function(e){return ca.has(e)}):(Qu=Hte("state"),zte[Qu]=!0,RN=function(e,t){if(Lv(e,Qu))throw new Bv(UB);return t.facade=e,Jte(e,Qu,t),t},sp=function(e){return Lv(e,Qu)?e[Qu]:{}},FN=function(e){return Lv(e,Qu)});var ca,Qu;MB.exports={set:RN,get:sp,has:FN,enforce:Xte,getterFor:Zte}});var KB=w((TOe,jB)=>{"use strict";m();T();N();var kv=fi(),ene=ys(),tne=oa(),PN=Wo(),Uv=zo(),nne=DB().CONFIGURABLE,rne=AB(),VB=xB(),ine=VB.enforce,ane=VB.get,qB=String,wN=Object.defineProperty,sne=kv("".slice),one=kv("".replace),une=kv([].join),cne=Uv&&!ene(function(){return wN(function(){},"length",{value:8}).length!==8}),lne=String(String).split("String"),dne=jB.exports=function(e,t,n){sne(qB(t),0,7)==="Symbol("&&(t="["+one(qB(t),/^Symbol\(([^)]*)\).*$/,"$1")+"]"),n&&n.getter&&(t="get "+t),n&&n.setter&&(t="set "+t),(!PN(e,"name")||nne&&e.name!==t)&&(Uv?wN(e,"name",{value:t,configurable:!0}):e.name=t),cne&&n&&PN(n,"arity")&&e.length!==n.arity&&wN(e,"length",{value:n.arity});try{n&&PN(n,"constructor")&&n.constructor?Uv&&wN(e,"prototype",{writable:!1}):e.prototype&&(e.prototype=void 0)}catch(i){}var r=ine(e);return PN(r,"source")||(r.source=une(lne,typeof t=="string"?t:"")),e};Function.prototype.toString=dne(function(){return tne(this)&&ane(this).source||rne(this)},"toString")});var $B=w((IOe,GB)=>{"use strict";m();T();N();var pne=oa(),fne=AN(),mne=KB(),Nne=ON();GB.exports=function(e,t,n,r){r||(r={});var i=r.enumerable,a=r.name!==void 0?r.name:t;if(pne(n)&&mne(n,a,r),r.global)i?e[t]=n:Nne(t,n);else{try{r.unsafe?e[t]&&(i=!0):delete e[t]}catch(o){}i?e[t]=n:fne.f(e,t,{value:n,enumerable:!1,configurable:!r.nonConfigurable,writable:!r.nonWritable})}return e}});var YB=w((SOe,QB)=>{"use strict";m();T();N();var Tne=Math.ceil,Ene=Math.floor;QB.exports=Math.trunc||function(t){var n=+t;return(n>0?Ene:Tne)(n)}});var LN=w((AOe,JB)=>{"use strict";m();T();N();var hne=YB();JB.exports=function(e){var t=+e;return t!==t||t===0?0:hne(t)}});var zB=w((wOe,HB)=>{"use strict";m();T();N();var yne=LN(),Ine=Math.max,gne=Math.min;HB.exports=function(e,t){var n=yne(e);return n<0?Ine(n+t,0):gne(n,t)}});var XB=w((UOe,WB)=>{"use strict";m();T();N();var _ne=LN(),vne=Math.min;WB.exports=function(e){var t=_ne(e);return t>0?vne(t,9007199254740991):0}});var eU=w((qOe,ZB)=>{"use strict";m();T();N();var Sne=XB();ZB.exports=function(e){return Sne(e.length)}});var rU=w((GOe,nU)=>{"use strict";m();T();N();var One=gN(),Dne=zB(),bne=eU(),tU=function(e){return function(t,n,r){var i=One(t),a=bne(i);if(a===0)return!e&&-1;var o=Dne(r,a),c;if(e&&n!==n){for(;a>o;)if(c=i[o++],c!==c)return!0}else for(;a>o;o++)if((e||o in i)&&i[o]===n)return e||o||0;return!e&&-1}};nU.exports={includes:tU(!0),indexOf:tU(!1)}});var sU=w((JOe,aU)=>{"use strict";m();T();N();var Ane=fi(),Mv=Wo(),Rne=gN(),Fne=rU().indexOf,Pne=wv(),iU=Ane([].push);aU.exports=function(e,t){var n=Rne(e),r=0,i=[],a;for(a in n)!Mv(Pne,a)&&Mv(n,a)&&iU(i,a);for(;t.length>r;)Mv(n,a=t[r++])&&(~Fne(i,a)||iU(i,a));return i}});var uU=w((XOe,oU)=>{"use strict";m();T();N();oU.exports=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"]});var lU=w(cU=>{"use strict";m();T();N();var wne=sU(),Lne=uU(),Cne=Lne.concat("length","prototype");cU.f=Object.getOwnPropertyNames||function(t){return wne(t,Cne)}});var pU=w(dU=>{"use strict";m();T();N();dU.f=Object.getOwnPropertySymbols});var mU=w((lDe,fU)=>{"use strict";m();T();N();var Bne=_N(),Une=fi(),kne=lU(),Mne=pU(),xne=ap(),qne=Une([].concat);fU.exports=Bne("Reflect","ownKeys")||function(t){var n=kne.f(xne(t)),r=Mne.f;return r?qne(n,r(t)):n}});var EU=w((mDe,TU)=>{"use strict";m();T();N();var NU=Wo(),Vne=mU(),jne=vv(),Kne=AN();TU.exports=function(e,t,n){for(var r=Vne(t),i=Kne.f,a=jne.f,o=0;o{"use strict";m();T();N();var Gne=ys(),$ne=oa(),Qne=/#|\.prototype\./,op=function(e,t){var n=Jne[Yne(e)];return n===zne?!0:n===Hne?!1:$ne(t)?Gne(t):!!t},Yne=op.normalize=function(e){return String(e).replace(Qne,".").toLowerCase()},Jne=op.data={},Hne=op.NATIVE="N",zne=op.POLYFILL="P";hU.exports=op});var xv=w((_De,IU)=>{"use strict";m();T();N();var CN=ki(),Wne=vv().f,Xne=Av(),Zne=$B(),ere=ON(),tre=EU(),nre=yU();IU.exports=function(e,t){var n=e.target,r=e.global,i=e.stat,a,o,c,l,p,f;if(r?o=CN:i?o=CN[n]||ere(n,{}):o=CN[n]&&CN[n].prototype,o)for(c in t){if(p=t[c],e.dontCallGetSet?(f=Wne(o,c),l=f&&f.value):l=o[c],a=nre(r?c:n+(i?".":"#")+c,e.forced),!a&&l!==void 0){if(typeof p==typeof l)continue;tre(p,l)}(e.sham||l&&l.sham)&&Xne(p,"sham",!0),Zne(o,c,p,e)}}});var up=w((DDe,gU)=>{"use strict";m();T();N();var qv=fi(),BN=Set.prototype;gU.exports={Set,add:qv(BN.add),has:qv(BN.has),remove:qv(BN.delete),proto:BN}});var Vv=w((FDe,_U)=>{"use strict";m();T();N();var rre=up().has;_U.exports=function(e){return rre(e),e}});var SU=w((CDe,vU)=>{"use strict";m();T();N();var ire=fi(),are=SN();vU.exports=function(e,t,n){try{return ire(are(Object.getOwnPropertyDescriptor(e,t)[n]))}catch(r){}}});var jv=w((MDe,OU)=>{"use strict";m();T();N();var sre=SU(),ore=up();OU.exports=sre(ore.proto,"size","get")||function(e){return e.size}});var Kv=w((jDe,DU)=>{"use strict";m();T();N();var ure=$u();DU.exports=function(e,t,n){for(var r=n?e:e.iterator,i=e.next,a,o;!(a=ure(i,r)).done;)if(o=t(a.value),o!==void 0)return o}});var wU=w((QDe,PU)=>{"use strict";m();T();N();var bU=fi(),cre=Kv(),AU=up(),lre=AU.Set,RU=AU.proto,dre=bU(RU.forEach),FU=bU(RU.keys),pre=FU(new lre).next;PU.exports=function(e,t,n){return n?cre({iterator:FU(e),next:pre},t):dre(e,t)}});var CU=w((zDe,LU)=>{"use strict";m();T();N();LU.exports=function(e){return{iterator:e,next:e.next,done:!1}}});var Gv=w((ebe,qU)=>{"use strict";m();T();N();var BU=SN(),MU=ap(),UU=$u(),fre=LN(),mre=CU(),kU="Invalid size",Nre=RangeError,Tre=TypeError,Ere=Math.max,xU=function(e,t){this.set=e,this.size=Ere(t,0),this.has=BU(e.has),this.keys=BU(e.keys)};xU.prototype={getIterator:function(){return mre(MU(UU(this.keys,this.set)))},includes:function(e){return UU(this.has,this.set,e)}};qU.exports=function(e){MU(e);var t=+e.size;if(t!==t)throw new Tre(kU);var n=fre(t);if(n<0)throw new Nre(kU);return new xU(e,n)}});var jU=w((ibe,VU)=>{"use strict";m();T();N();var hre=Vv(),yre=jv(),Ire=wU(),gre=Gv();VU.exports=function(t){var n=hre(this),r=gre(t);return yre(n)>r.size?!1:Ire(n,function(i){if(!r.includes(i))return!1},!0)!==!1}});var $v=w((ube,$U)=>{"use strict";m();T();N();var _re=_N(),KU=function(e){return{size:e,has:function(){return!1},keys:function(){return{next:function(){return{done:!0}}}}}},GU=function(e){return{size:e,has:function(){return!0},keys:function(){throw new Error("e")}}};$U.exports=function(e,t){var n=_re("Set");try{new n()[e](KU(0));try{return new n()[e](KU(-1)),!1}catch(i){if(!t)return!0;try{return new n()[e](GU(-1/0)),!1}catch(a){var r=new n;return r.add(1),r.add(2),t(r[e](GU(1/0)))}}}catch(i){return!1}}});var QU=w(()=>{"use strict";m();T();N();var vre=xv(),Sre=jU(),Ore=$v(),Dre=!Ore("isSubsetOf",function(e){return e});vre({target:"Set",proto:!0,real:!0,forced:Dre},{isSubsetOf:Sre})});var YU=w(()=>{"use strict";m();T();N();QU()});var zU=w((_be,HU)=>{"use strict";m();T();N();var bre=$u(),JU=ap(),Are=fv();HU.exports=function(e,t,n){var r,i;JU(e);try{if(r=Are(e,"return"),!r){if(t==="throw")throw n;return n}r=bre(r,e)}catch(a){i=!0,r=a}if(t==="throw")throw n;if(i)throw r;return JU(r),n}});var XU=w((Dbe,WU)=>{"use strict";m();T();N();var Rre=Vv(),Fre=up().has,Pre=jv(),wre=Gv(),Lre=Kv(),Cre=zU();WU.exports=function(t){var n=Rre(this),r=wre(t);if(Pre(n){"use strict";m();T();N();var Bre=xv(),Ure=XU(),kre=$v(),Mre=!kre("isSupersetOf",function(e){return!e});Bre({target:"Set",proto:!0,real:!0,forced:Mre},{isSupersetOf:Ure})});var ek=w(()=>{"use strict";m();T();N();ZU()});var cp=w(Cn=>{"use strict";m();T();N();Object.defineProperty(Cn,"__esModule",{value:!0});Cn.subtractSet=xre;Cn.mapToArrayOfValues=qre;Cn.kindToConvertedTypeString=Vre;Cn.fieldDatasToSimpleFieldDatas=jre;Cn.isNodeLeaf=Kre;Cn.newEntityInterfaceFederationData=Gre;Cn.upsertEntityInterfaceFederationData=$re;Cn.upsertEntityData=Yre;Cn.updateEntityData=tk;Cn.newFieldAuthorizationData=Jre;Cn.newAuthorizationData=Hre;Cn.addScopes=Qv;Cn.mergeRequiredScopesByAND=MN;Cn.mergeRequiredScopesByOR=Yv;Cn.upsertFieldAuthorizationData=nk;Cn.upsertAuthorizationData=Xre;Cn.upsertAuthorizationConfiguration=Zre;Cn.isNodeKindObject=eie;Cn.isInterfaceDefinitionData=tie;Cn.isObjectDefinitionData=nie;var Zt=Ae(),Wr=lr(),UN=Hr(),kN=hs();YU();ek();function xre(e,t){for(let n of e)t.delete(n)}function qre(e){let t=[];for(let n of e.values())t.push(n);return t}function Vre(e){switch(e){case Zt.Kind.BOOLEAN:return Wr.BOOLEAN_SCALAR;case Zt.Kind.ENUM:case Zt.Kind.ENUM_TYPE_DEFINITION:case Zt.Kind.ENUM_TYPE_EXTENSION:return Wr.ENUM;case Zt.Kind.ENUM_VALUE_DEFINITION:return Wr.ENUM_VALUE;case Zt.Kind.FIELD_DEFINITION:return Wr.FIELD;case Zt.Kind.FLOAT:return Wr.FLOAT_SCALAR;case Zt.Kind.INPUT_OBJECT_TYPE_DEFINITION:case Zt.Kind.INPUT_OBJECT_TYPE_EXTENSION:return Wr.INPUT_OBJECT;case Zt.Kind.INPUT_VALUE_DEFINITION:return Wr.INPUT_VALUE;case Zt.Kind.INT:return Wr.INT_SCALAR;case Zt.Kind.INTERFACE_TYPE_DEFINITION:case Zt.Kind.INTERFACE_TYPE_EXTENSION:return Wr.INTERFACE;case Zt.Kind.NULL:return Wr.NULL;case Zt.Kind.OBJECT:case Zt.Kind.OBJECT_TYPE_DEFINITION:case Zt.Kind.OBJECT_TYPE_EXTENSION:return Wr.OBJECT;case Zt.Kind.STRING:return Wr.STRING_SCALAR;case Zt.Kind.SCALAR_TYPE_DEFINITION:case Zt.Kind.SCALAR_TYPE_EXTENSION:return Wr.SCALAR;case Zt.Kind.UNION_TYPE_DEFINITION:case Zt.Kind.UNION_TYPE_EXTENSION:return Wr.UNION;default:return e}}function jre(e){let t=[];for(let{name:n,namedTypeName:r}of e)t.push({name:n,namedTypeName:r});return t}function Kre(e){if(!e)return!0;switch(e){case Zt.Kind.OBJECT_TYPE_DEFINITION:case Zt.Kind.INTERFACE_TYPE_DEFINITION:case Zt.Kind.UNION_TYPE_DEFINITION:return!1;default:return!0}}function Gre(e,t){return{concreteTypeNames:new Set(e.concreteTypeNames),fieldDatasBySubgraphName:new Map([[t,e.fieldDatas]]),interfaceFieldNames:new Set(e.interfaceFieldNames),interfaceObjectFieldNames:new Set(e.interfaceObjectFieldNames),interfaceObjectSubgraphs:new Set(e.isInterfaceObject?[t]:[]),subgraphDataByTypeName:new Map([[t,e]]),typeName:e.typeName}}function $re(e,t,n){(0,UN.addIterableValuesToSet)(t.concreteTypeNames,e.concreteTypeNames),e.subgraphDataByTypeName.set(n,t),e.fieldDatasBySubgraphName.set(n,t.fieldDatas),(0,UN.addIterableValuesToSet)(t.interfaceFieldNames,e.interfaceFieldNames),(0,UN.addIterableValuesToSet)(t.interfaceObjectFieldNames,e.interfaceObjectFieldNames),t.isInterfaceObject&&e.interfaceObjectSubgraphs.add(n)}function Qre({keyFieldSetDataByFieldSet:e,subgraphName:t,typeName:n}){let r=new Map([[t,e]]),i=new Map;for(let[a,{documentNode:o,isUnresolvable:c}]of e)c||i.set(a,o);return{keyFieldSetDatasBySubgraphName:r,documentNodeByKeyFieldSet:i,keyFieldSets:new Set,subgraphNames:new Set([t]),typeName:n}}function Yre({entityDataByTypeName:e,keyFieldSetDataByFieldSet:t,subgraphName:n,typeName:r}){let i=e.get(r);i?tk({entityData:i,keyFieldSetDataByFieldSet:t,subgraphName:n}):e.set(r,Qre({keyFieldSetDataByFieldSet:t,subgraphName:n,typeName:r}))}function tk({entityData:e,keyFieldSetDataByFieldSet:t,subgraphName:n}){e.subgraphNames.add(n);let r=e.keyFieldSetDatasBySubgraphName.get(n);if(!r){e.keyFieldSetDatasBySubgraphName.set(n,t);for(let[i,{documentNode:a,isUnresolvable:o}]of t)o||e.documentNodeByKeyFieldSet.set(i,a);return}for(let[i,a]of t){a.isUnresolvable||e.documentNodeByKeyFieldSet.set(i,a.documentNode);let o=r.get(i);if(o){o.isUnresolvable||(o.isUnresolvable=a.isUnresolvable);continue}r.set(i,a)}}function Jre(e){return{fieldName:e,inheritedData:{requiredScopes:[],requiredScopesByOR:[],requiresAuthentication:!1},originalData:{requiredScopes:[],requiresAuthentication:!1}}}function Hre(e){return{fieldAuthDataByFieldName:new Map,requiredScopes:[],requiredScopesByOR:[],requiresAuthentication:!1,typeName:e}}function Qv(e,t){for(let n=e.length-1;n>-1;n--){if(e[n].isSubsetOf(t))return;e[n].isSupersetOf(t)&&e.splice(n,1)}e.push(t)}function MN(e,t){if(e.length<1||t.length<1){for(let r of t)e.push(new Set(r));return e}let n=[];for(let r of t)for(let i of e){let a=(0,UN.addSets)(r,i);Qv(n,a)}return n}function Yv(e,t){for(let n of t)Qv(e,n);return e.length<=kN.MAX_OR_SCOPES}function nk(e,t){var i,a;let n=t.fieldName,r=e.get(n);return r?((i=r.inheritedData).requiresAuthentication||(i.requiresAuthentication=t.inheritedData.requiresAuthentication),(a=r.originalData).requiresAuthentication||(a.requiresAuthentication=t.originalData.requiresAuthentication),!Yv(r.inheritedData.requiredScopesByOR,t.inheritedData.requiredScopes)||r.inheritedData.requiredScopes.length*t.inheritedData.requiredScopes.length>kN.MAX_OR_SCOPES||r.originalData.requiredScopes.length*t.originalData.requiredScopes.length>kN.MAX_OR_SCOPES?!1:(r.inheritedData.requiredScopes=MN(r.inheritedData.requiredScopes,t.inheritedData.requiredScopes),r.originalData.requiredScopes=MN(r.originalData.requiredScopes,t.originalData.requiredScopes),!0)):(e.set(n,rk(t)),!0)}function zre(e){let t=new Map;for(let[n,r]of e)t.set(n,rk(r));return t}function rk(e){return{fieldName:e.fieldName,inheritedData:{requiredScopes:[...e.inheritedData.requiredScopes],requiredScopesByOR:[...e.inheritedData.requiredScopes],requiresAuthentication:e.inheritedData.requiresAuthentication},originalData:{requiredScopes:[...e.originalData.requiredScopes],requiresAuthentication:e.originalData.requiresAuthentication}}}function Wre(e){return{fieldAuthDataByFieldName:zre(e.fieldAuthDataByFieldName),requiredScopes:[...e.requiredScopes],requiredScopesByOR:[...e.requiredScopes],requiresAuthentication:e.requiresAuthentication,typeName:e.typeName}}function Xre(e,t,n){let r=e.get(t.typeName);if(!r){e.set(t.typeName,Wre(t));return}r.requiresAuthentication||(r.requiresAuthentication=t.requiresAuthentication),!Yv(r.requiredScopesByOR,t.requiredScopes)||r.requiredScopes.length*t.requiredScopes.length>kN.MAX_OR_SCOPES?n.add(t.typeName):r.requiredScopes=MN(r.requiredScopes,t.requiredScopes);for(let[i,a]of t.fieldAuthDataByFieldName)nk(r.fieldAuthDataByFieldName,a)||n.add(`${t.typeName}.${i}`)}function Zre(e,t){let n=t.typeName;for(let[r,i]of t.fieldAuthDataByFieldName){let a=`${n}.${r}`,o=e.get(a);o?(o.requiresAuthentication=i.inheritedData.requiresAuthentication,o.requiredScopes=i.inheritedData.requiredScopes.map(c=>[...c]),o.requiredScopesByOR=i.inheritedData.requiredScopesByOR.map(c=>[...c])):e.set(a,{argumentNames:[],typeName:n,fieldName:r,requiresAuthentication:i.inheritedData.requiresAuthentication,requiredScopes:i.inheritedData.requiredScopes.map(c=>[...c]),requiredScopesByOR:i.inheritedData.requiredScopesByOR.map(c=>[...c])})}}function eie(e){return e===Zt.Kind.OBJECT_TYPE_DEFINITION||e===Zt.Kind.OBJECT_TYPE_EXTENSION}function tie(e){return e.kind===Zt.Kind.INTERFACE_TYPE_DEFINITION}function nie(e){return e?e.kind===Zt.Kind.OBJECT_TYPE_DEFINITION:!1}});var zv={};Gf(zv,{__addDisposableResource:()=>Sk,__assign:()=>xN,__asyncDelegator:()=>Tk,__asyncGenerator:()=>Nk,__asyncValues:()=>Ek,__await:()=>sl,__awaiter:()=>ck,__classPrivateFieldGet:()=>gk,__classPrivateFieldIn:()=>vk,__classPrivateFieldSet:()=>_k,__createBinding:()=>VN,__decorate:()=>sk,__disposeResources:()=>Ok,__esDecorate:()=>rie,__exportStar:()=>dk,__extends:()=>ik,__generator:()=>lk,__importDefault:()=>Ik,__importStar:()=>yk,__makeTemplateObject:()=>hk,__metadata:()=>uk,__param:()=>ok,__propKey:()=>aie,__read:()=>Hv,__rest:()=>ak,__runInitializers:()=>iie,__setFunctionName:()=>sie,__spread:()=>pk,__spreadArray:()=>mk,__spreadArrays:()=>fk,__values:()=>qN,default:()=>cie});function ik(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");Jv(e,t);function n(){this.constructor=e}e.prototype=t===null?Object.create(t):(n.prototype=t.prototype,new n)}function ak(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var i=0,r=Object.getOwnPropertySymbols(e);i=0;c--)(o=e[c])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a}function ok(e,t){return function(n,r){t(n,r,e)}}function rie(e,t,n,r,i,a){function o(J){if(J!==void 0&&typeof J!="function")throw new TypeError("Function expected");return J}for(var c=r.kind,l=c==="getter"?"get":c==="setter"?"set":"value",p=!t&&e?r.static?e:e.prototype:null,f=t||(p?Object.getOwnPropertyDescriptor(p,r.name):{}),y,g=!1,_=n.length-1;_>=0;_--){var F={};for(var U in r)F[U]=U==="access"?{}:r[U];for(var U in r.access)F.access[U]=r.access[U];F.addInitializer=function(J){if(g)throw new TypeError("Cannot add initializers after decoration has completed");a.push(o(J||null))};var K=(0,n[_])(c==="accessor"?{get:f.get,set:f.set}:f[l],F);if(c==="accessor"){if(K===void 0)continue;if(K===null||typeof K!="object")throw new TypeError("Object expected");(y=o(K.get))&&(f.get=y),(y=o(K.set))&&(f.set=y),(y=o(K.init))&&i.unshift(y)}else(y=o(K))&&(c==="field"?i.unshift(y):f[l]=y)}p&&Object.defineProperty(p,r.name,f),g=!0}function iie(e,t,n){for(var r=arguments.length>2,i=0;i0&&a[a.length-1])&&(p[0]===6||p[0]===2)){n=0;continue}if(p[0]===3&&(!a||p[1]>a[0]&&p[1]=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")}function Hv(e,t){var n=typeof Symbol=="function"&&e[Symbol.iterator];if(!n)return e;var r=n.call(e),i,a=[],o;try{for(;(t===void 0||t-- >0)&&!(i=r.next()).done;)a.push(i.value)}catch(c){o={error:c}}finally{try{i&&!i.done&&(n=r.return)&&n.call(r)}finally{if(o)throw o.error}}return a}function pk(){for(var e=[],t=0;t1||c(g,_)})})}function c(g,_){try{l(r[g](_))}catch(F){y(a[0][3],F)}}function l(g){g.value instanceof sl?Promise.resolve(g.value.v).then(p,f):y(a[0][2],g)}function p(g){c("next",g)}function f(g){c("throw",g)}function y(g,_){g(_),a.shift(),a.length&&c(a[0][0],a[0][1])}}function Tk(e){var t,n;return t={},r("next"),r("throw",function(i){throw i}),r("return"),t[Symbol.iterator]=function(){return this},t;function r(i,a){t[i]=e[i]?function(o){return(n=!n)?{value:sl(e[i](o)),done:!1}:a?a(o):o}:a}}function Ek(e){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var t=e[Symbol.asyncIterator],n;return t?t.call(e):(e=typeof qN=="function"?qN(e):e[Symbol.iterator](),n={},r("next"),r("throw"),r("return"),n[Symbol.asyncIterator]=function(){return this},n);function r(a){n[a]=e[a]&&function(o){return new Promise(function(c,l){o=e[a](o),i(c,l,o.done,o.value)})}}function i(a,o,c,l){Promise.resolve(l).then(function(p){a({value:p,done:c})},o)}}function hk(e,t){return Object.defineProperty?Object.defineProperty(e,"raw",{value:t}):e.raw=t,e}function yk(e){if(e&&e.__esModule)return e;var t={};if(e!=null)for(var n in e)n!=="default"&&Object.prototype.hasOwnProperty.call(e,n)&&VN(t,e,n);return oie(t,e),t}function Ik(e){return e&&e.__esModule?e:{default:e}}function gk(e,t,n,r){if(n==="a"&&!r)throw new TypeError("Private accessor was defined without a getter");if(typeof t=="function"?e!==t||!r:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return n==="m"?r:n==="a"?r.call(e):r?r.value:t.get(e)}function _k(e,t,n,r,i){if(r==="m")throw new TypeError("Private method is not writable");if(r==="a"&&!i)throw new TypeError("Private accessor was defined without a setter");if(typeof t=="function"?e!==t||!i:!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return r==="a"?i.call(e,n):i?i.value=n:t.set(e,n),n}function vk(e,t){if(t===null||typeof t!="object"&&typeof t!="function")throw new TypeError("Cannot use 'in' operator on non-object");return typeof e=="function"?t===e:e.has(t)}function Sk(e,t,n){if(t!=null){if(typeof t!="object"&&typeof t!="function")throw new TypeError("Object expected.");var r;if(n){if(!Symbol.asyncDispose)throw new TypeError("Symbol.asyncDispose is not defined.");r=t[Symbol.asyncDispose]}if(r===void 0){if(!Symbol.dispose)throw new TypeError("Symbol.dispose is not defined.");r=t[Symbol.dispose]}if(typeof r!="function")throw new TypeError("Object not disposable.");e.stack.push({value:t,dispose:r,async:n})}else n&&e.stack.push({async:!0});return t}function Ok(e){function t(r){e.error=e.hasError?new uie(r,e.error,"An error was suppressed during disposal."):r,e.hasError=!0}function n(){for(;e.stack.length;){var r=e.stack.pop();try{var i=r.dispose&&r.dispose.call(r.value);if(r.async)return Promise.resolve(i).then(n,function(a){return t(a),n()})}catch(a){t(a)}}if(e.hasError)throw e.error}return n()}var Jv,xN,VN,oie,uie,cie,Wv=gu(()=>{"use strict";m();T();N();Jv=function(e,t){return Jv=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,r){n.__proto__=r}||function(n,r){for(var i in r)Object.prototype.hasOwnProperty.call(r,i)&&(n[i]=r[i])},Jv(e,t)};xN=function(){return xN=Object.assign||function(t){for(var n,r=1,i=arguments.length;rQk,__assign:()=>jN,__asyncDelegator:()=>Mk,__asyncGenerator:()=>kk,__asyncValues:()=>xk,__await:()=>ol,__awaiter:()=>Pk,__classPrivateFieldGet:()=>Kk,__classPrivateFieldIn:()=>$k,__classPrivateFieldSet:()=>Gk,__createBinding:()=>GN,__decorate:()=>Ak,__disposeResources:()=>Yk,__esDecorate:()=>lie,__exportStar:()=>Lk,__extends:()=>Dk,__generator:()=>wk,__importDefault:()=>jk,__importStar:()=>Vk,__makeTemplateObject:()=>qk,__metadata:()=>Fk,__param:()=>Rk,__propKey:()=>pie,__read:()=>Zv,__rest:()=>bk,__runInitializers:()=>die,__setFunctionName:()=>fie,__spread:()=>Ck,__spreadArray:()=>Uk,__spreadArrays:()=>Bk,__values:()=>KN,default:()=>Tie});function Dk(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");Xv(e,t);function n(){this.constructor=e}e.prototype=t===null?Object.create(t):(n.prototype=t.prototype,new n)}function bk(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var i=0,r=Object.getOwnPropertySymbols(e);i=0;c--)(o=e[c])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a}function Rk(e,t){return function(n,r){t(n,r,e)}}function lie(e,t,n,r,i,a){function o(J){if(J!==void 0&&typeof J!="function")throw new TypeError("Function expected");return J}for(var c=r.kind,l=c==="getter"?"get":c==="setter"?"set":"value",p=!t&&e?r.static?e:e.prototype:null,f=t||(p?Object.getOwnPropertyDescriptor(p,r.name):{}),y,g=!1,_=n.length-1;_>=0;_--){var F={};for(var U in r)F[U]=U==="access"?{}:r[U];for(var U in r.access)F.access[U]=r.access[U];F.addInitializer=function(J){if(g)throw new TypeError("Cannot add initializers after decoration has completed");a.push(o(J||null))};var K=(0,n[_])(c==="accessor"?{get:f.get,set:f.set}:f[l],F);if(c==="accessor"){if(K===void 0)continue;if(K===null||typeof K!="object")throw new TypeError("Object expected");(y=o(K.get))&&(f.get=y),(y=o(K.set))&&(f.set=y),(y=o(K.init))&&i.unshift(y)}else(y=o(K))&&(c==="field"?i.unshift(y):f[l]=y)}p&&Object.defineProperty(p,r.name,f),g=!0}function die(e,t,n){for(var r=arguments.length>2,i=0;i0&&a[a.length-1])&&(p[0]===6||p[0]===2)){n=0;continue}if(p[0]===3&&(!a||p[1]>a[0]&&p[1]=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")}function Zv(e,t){var n=typeof Symbol=="function"&&e[Symbol.iterator];if(!n)return e;var r=n.call(e),i,a=[],o;try{for(;(t===void 0||t-- >0)&&!(i=r.next()).done;)a.push(i.value)}catch(c){o={error:c}}finally{try{i&&!i.done&&(n=r.return)&&n.call(r)}finally{if(o)throw o.error}}return a}function Ck(){for(var e=[],t=0;t1||c(g,_)})})}function c(g,_){try{l(r[g](_))}catch(F){y(a[0][3],F)}}function l(g){g.value instanceof ol?Promise.resolve(g.value.v).then(p,f):y(a[0][2],g)}function p(g){c("next",g)}function f(g){c("throw",g)}function y(g,_){g(_),a.shift(),a.length&&c(a[0][0],a[0][1])}}function Mk(e){var t,n;return t={},r("next"),r("throw",function(i){throw i}),r("return"),t[Symbol.iterator]=function(){return this},t;function r(i,a){t[i]=e[i]?function(o){return(n=!n)?{value:ol(e[i](o)),done:!1}:a?a(o):o}:a}}function xk(e){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var t=e[Symbol.asyncIterator],n;return t?t.call(e):(e=typeof KN=="function"?KN(e):e[Symbol.iterator](),n={},r("next"),r("throw"),r("return"),n[Symbol.asyncIterator]=function(){return this},n);function r(a){n[a]=e[a]&&function(o){return new Promise(function(c,l){o=e[a](o),i(c,l,o.done,o.value)})}}function i(a,o,c,l){Promise.resolve(l).then(function(p){a({value:p,done:c})},o)}}function qk(e,t){return Object.defineProperty?Object.defineProperty(e,"raw",{value:t}):e.raw=t,e}function Vk(e){if(e&&e.__esModule)return e;var t={};if(e!=null)for(var n in e)n!=="default"&&Object.prototype.hasOwnProperty.call(e,n)&&GN(t,e,n);return mie(t,e),t}function jk(e){return e&&e.__esModule?e:{default:e}}function Kk(e,t,n,r){if(n==="a"&&!r)throw new TypeError("Private accessor was defined without a getter");if(typeof t=="function"?e!==t||!r:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return n==="m"?r:n==="a"?r.call(e):r?r.value:t.get(e)}function Gk(e,t,n,r,i){if(r==="m")throw new TypeError("Private method is not writable");if(r==="a"&&!i)throw new TypeError("Private accessor was defined without a setter");if(typeof t=="function"?e!==t||!i:!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return r==="a"?i.call(e,n):i?i.value=n:t.set(e,n),n}function $k(e,t){if(t===null||typeof t!="object"&&typeof t!="function")throw new TypeError("Cannot use 'in' operator on non-object");return typeof e=="function"?t===e:e.has(t)}function Qk(e,t,n){if(t!=null){if(typeof t!="object"&&typeof t!="function")throw new TypeError("Object expected.");var r;if(n){if(!Symbol.asyncDispose)throw new TypeError("Symbol.asyncDispose is not defined.");r=t[Symbol.asyncDispose]}if(r===void 0){if(!Symbol.dispose)throw new TypeError("Symbol.dispose is not defined.");r=t[Symbol.dispose]}if(typeof r!="function")throw new TypeError("Object not disposable.");e.stack.push({value:t,dispose:r,async:n})}else n&&e.stack.push({async:!0});return t}function Yk(e){function t(r){e.error=e.hasError?new Nie(r,e.error,"An error was suppressed during disposal."):r,e.hasError=!0}function n(){for(;e.stack.length;){var r=e.stack.pop();try{var i=r.dispose&&r.dispose.call(r.value);if(r.async)return Promise.resolve(i).then(n,function(a){return t(a),n()})}catch(a){t(a)}}if(e.hasError)throw e.error}return n()}var Xv,jN,GN,mie,Nie,Tie,Hk=gu(()=>{"use strict";m();T();N();Xv=function(e,t){return Xv=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,r){n.__proto__=r}||function(n,r){for(var i in r)Object.prototype.hasOwnProperty.call(r,i)&&(n[i]=r[i])},Xv(e,t)};jN=function(){return jN=Object.assign||function(t){for(var n,r=1,i=arguments.length;r{"use strict";m();T();N()});var lp=w(dr=>{"use strict";m();T();N();Object.defineProperty(dr,"__esModule",{value:!0});dr.assertSome=dr.isSome=dr.compareNodes=dr.nodeToString=dr.compareStrings=dr.isValidPath=dr.isDocumentString=dr.asArray=void 0;var Eie=Ae(),hie=e=>Array.isArray(e)?e:e?[e]:[];dr.asArray=hie;var yie=/\.[a-z0-9]+$/i;function Iie(e){if(typeof e!="string"||yie.test(e))return!1;try{return(0,Eie.parse)(e),!0}catch(t){}return!1}dr.isDocumentString=Iie;var gie=/[‘“!%^<>`]/;function _ie(e){return typeof e=="string"&&!gie.test(e)}dr.isValidPath=_ie;function Wk(e,t){return String(e)String(t)?1:0}dr.compareStrings=Wk;function eS(e){var n,r;let t;return"alias"in e&&(t=(n=e.alias)==null?void 0:n.value),t==null&&"name"in e&&(t=(r=e.name)==null?void 0:r.value),t==null&&(t=e.kind),t}dr.nodeToString=eS;function vie(e,t,n){let r=eS(e),i=eS(t);return typeof n=="function"?n(r,i):Wk(r,i)}dr.compareNodes=vie;function Sie(e){return e!=null}dr.isSome=Sie;function Oie(e,t="Value should be something"){if(e==null)throw new Error(t)}dr.assertSome=Oie});var dp=w(QN=>{"use strict";m();T();N();Object.defineProperty(QN,"__esModule",{value:!0});QN.inspect=void 0;var eM=3;function Die(e){return $N(e,[])}QN.inspect=Die;function $N(e,t){switch(typeof e){case"string":return JSON.stringify(e);case"function":return e.name?`[function ${e.name}]`:"[function]";case"object":return bie(e,t);default:return String(e)}}function Xk(e){return(e.name="GraphQLError")?e.toString():`${e.name}: ${e.message}; + ${e.stack}`}function bie(e,t){if(e===null)return"null";if(e instanceof Error)return e.name==="AggregateError"?Xk(e)+` +`+Zk(e.errors,t):Xk(e);if(t.includes(e))return"[Circular]";let n=[...t,e];if(Aie(e)){let r=e.toJSON();if(r!==e)return typeof r=="string"?r:$N(r,n)}else if(Array.isArray(e))return Zk(e,n);return Rie(e,n)}function Aie(e){return typeof e.toJSON=="function"}function Rie(e,t){let n=Object.entries(e);return n.length===0?"{}":t.length>eM?"["+Fie(e)+"]":"{ "+n.map(([i,a])=>i+": "+$N(a,t)).join(", ")+" }"}function Zk(e,t){if(e.length===0)return"[]";if(t.length>eM)return"[Array]";let n=e.length,r=[];for(let i=0;i{"use strict";m();T();N();Object.defineProperty(ul,"__esModule",{value:!0});ul.relocatedError=ul.createGraphQLError=void 0;var tS=Ae(),Pie=["message","locations","path","nodes","source","positions","originalError","name","stack","extensions"];function wie(e){return e!=null&&typeof e=="object"&&Object.keys(e).every(t=>Pie.includes(t))}function nS(e,t){return t!=null&&t.originalError&&!(t.originalError instanceof Error)&&wie(t.originalError)&&(t.originalError=nS(t.originalError.message,t.originalError)),tS.versionInfo.major>=17?new tS.GraphQLError(e,t):new tS.GraphQLError(e,t==null?void 0:t.nodes,t==null?void 0:t.source,t==null?void 0:t.positions,t==null?void 0:t.path,t==null?void 0:t.originalError,t==null?void 0:t.extensions)}ul.createGraphQLError=nS;function Lie(e,t){return nS(e.message,{nodes:e.nodes,source:e.source,positions:e.positions,path:t==null?e.path:t,originalError:e,extensions:e.extensions})}ul.relocatedError=Lie});var pp=w(Mi=>{"use strict";m();T();N();Object.defineProperty(Mi,"__esModule",{value:!0});Mi.hasOwnProperty=Mi.promiseReduce=Mi.isPromise=Mi.isObjectLike=Mi.isIterableObject=void 0;function Cie(e){return e!=null&&typeof e=="object"&&Symbol.iterator in e}Mi.isIterableObject=Cie;function Bie(e){return typeof e=="object"&&e!==null}Mi.isObjectLike=Bie;function tM(e){return(e==null?void 0:e.then)!=null}Mi.isPromise=tM;function Uie(e,t,n){let r=n;for(let i of e)r=tM(r)?r.then(a=>t(a,i)):t(r,i);return r}Mi.promiseReduce=Uie;function kie(e,t){return Object.prototype.hasOwnProperty.call(e,t)}Mi.hasOwnProperty=kie});var iS=w(HN=>{"use strict";m();T();N();Object.defineProperty(HN,"__esModule",{value:!0});HN.getArgumentValues=void 0;var rS=dp(),Yu=Ae(),JN=YN(),Mie=pp();function xie(e,t,n={}){var o;let r={},a=((o=t.arguments)!=null?o:[]).reduce((c,l)=>Q(M({},c),{[l.name.value]:l}),{});for(let{name:c,type:l,defaultValue:p}of e.args){let f=a[c];if(!f){if(p!==void 0)r[c]=p;else if((0,Yu.isNonNullType)(l))throw(0,JN.createGraphQLError)(`Argument "${c}" of required type "${(0,rS.inspect)(l)}" was not provided.`,{nodes:[t]});continue}let y=f.value,g=y.kind===Yu.Kind.NULL;if(y.kind===Yu.Kind.VARIABLE){let F=y.name.value;if(n==null||!(0,Mie.hasOwnProperty)(n,F)){if(p!==void 0)r[c]=p;else if((0,Yu.isNonNullType)(l))throw(0,JN.createGraphQLError)(`Argument "${c}" of required type "${(0,rS.inspect)(l)}" was provided the variable "$${F}" which was not provided a runtime value.`,{nodes:[y]});continue}g=n[F]==null}if(g&&(0,Yu.isNonNullType)(l))throw(0,JN.createGraphQLError)(`Argument "${c}" of non-null type "${(0,rS.inspect)(l)}" must not be null.`,{nodes:[y]});let _=(0,Yu.valueFromAST)(y,l,n);if(_===void 0)throw(0,JN.createGraphQLError)(`Argument "${c}" has invalid value ${(0,Yu.print)(y)}.`,{nodes:[y]});r[c]=_}return r}HN.getArgumentValues=xie});var aS=w(Ua=>{"use strict";m();T();N();Object.defineProperty(Ua,"__esModule",{value:!0});Ua.getDirective=Ua.getDirectives=Ua.getDirectiveInExtensions=Ua.getDirectivesInExtensions=void 0;var rM=iS();function iM(e,t=["directives"]){return t.reduce((n,r)=>n==null?n:n[r],e==null?void 0:e.extensions)}Ua.getDirectivesInExtensions=iM;function nM(e,t){let n=e.filter(r=>r.name===t);if(n.length)return n.map(r=>{var i;return(i=r.args)!=null?i:{}})}function aM(e,t,n=["directives"]){let r=n.reduce((a,o)=>a==null?a:a[o],e==null?void 0:e.extensions);if(r===void 0)return;if(Array.isArray(r))return nM(r,t);let i=[];for(let[a,o]of Object.entries(r))if(Array.isArray(o))for(let c of o)i.push({name:a,args:c});else i.push({name:a,args:o});return nM(i,t)}Ua.getDirectiveInExtensions=aM;function qie(e,t,n=["directives"]){let r=iM(t,n);if(r!=null&&r.length>0)return r;let a=(e&&e.getDirectives?e.getDirectives():[]).reduce((l,p)=>(l[p.name]=p,l),{}),o=[];t.astNode&&o.push(t.astNode),"extensionASTNodes"in t&&t.extensionASTNodes&&(o=[...o,...t.extensionASTNodes]);let c=[];for(let l of o)if(l.directives)for(let p of l.directives){let f=a[p.name.value];f&&c.push({name:p.name.value,args:(0,rM.getArgumentValues)(f,p)})}return c}Ua.getDirectives=qie;function Vie(e,t,n,r=["directives"]){let i=aM(t,n,r);if(i!=null)return i;let a=e&&e.getDirective?e.getDirective(n):void 0;if(a==null)return;let o=[];t.astNode&&o.push(t.astNode),"extensionASTNodes"in t&&t.extensionASTNodes&&(o=[...o,...t.extensionASTNodes]);let c=[];for(let l of o)if(l.directives)for(let p of l.directives)p.name.value===n&&c.push((0,rM.getArgumentValues)(a,p));if(c.length)return c}Ua.getDirective=Vie});var sS=w(zN=>{"use strict";m();T();N();Object.defineProperty(zN,"__esModule",{value:!0});zN.getFieldsWithDirectives=void 0;var jie=Ae();function Kie(e,t={}){let n={},r=["ObjectTypeDefinition","ObjectTypeExtension"];t.includeInputTypes&&(r=[...r,"InputObjectTypeDefinition","InputObjectTypeExtension"]);let i=e.definitions.filter(a=>r.includes(a.kind));for(let a of i){let o=a.name.value;if(a.fields!=null){for(let c of a.fields)if(c.directives&&c.directives.length>0){let l=c.name.value,p=`${o}.${l}`,f=c.directives.map(y=>({name:y.name.value,args:(y.arguments||[]).reduce((g,_)=>Q(M({},g),{[_.name.value]:(0,jie.valueFromASTUntyped)(_.value)}),{})}));n[p]=f}}}return n}zN.getFieldsWithDirectives=Kie});var sM=w(WN=>{"use strict";m();T();N();Object.defineProperty(WN,"__esModule",{value:!0});WN.getArgumentsWithDirectives=void 0;var oS=Ae();function Gie(e){return e.kind===oS.Kind.OBJECT_TYPE_DEFINITION||e.kind===oS.Kind.OBJECT_TYPE_EXTENSION}function $ie(e){var r;let t={},n=e.definitions.filter(Gie);for(let i of n)if(i.fields!=null)for(let a of i.fields){let o=(r=a.arguments)==null?void 0:r.filter(l=>{var p;return(p=l.directives)==null?void 0:p.length});if(!(o!=null&&o.length))continue;let c=t[`${i.name.value}.${a.name.value}`]={};for(let l of o){let p=l.directives.map(f=>({name:f.name.value,args:(f.arguments||[]).reduce((y,g)=>Q(M({},y),{[g.name.value]:(0,oS.valueFromASTUntyped)(g.value)}),{})}));c[l.name.value]=p}}return t}WN.getArgumentsWithDirectives=$ie});var uS=w(XN=>{"use strict";m();T();N();Object.defineProperty(XN,"__esModule",{value:!0});XN.getImplementingTypes=void 0;var Qie=Ae();function Yie(e,t){let n=t.getTypeMap(),r=[];for(let i in n){let a=n[i];(0,Qie.isObjectType)(a)&&a.getInterfaces().find(c=>c.name===e)&&r.push(a.name)}return r}XN.getImplementingTypes=Yie});var lS=w(ZN=>{"use strict";m();T();N();Object.defineProperty(ZN,"__esModule",{value:!0});ZN.astFromType=void 0;var Jie=dp(),Ju=Ae();function cS(e){if((0,Ju.isNonNullType)(e)){let t=cS(e.ofType);if(t.kind===Ju.Kind.NON_NULL_TYPE)throw new Error(`Invalid type node ${(0,Jie.inspect)(e)}. Inner type of non-null type cannot be a non-null type.`);return{kind:Ju.Kind.NON_NULL_TYPE,type:t}}else if((0,Ju.isListType)(e))return{kind:Ju.Kind.LIST_TYPE,type:cS(e.ofType)};return{kind:Ju.Kind.NAMED_TYPE,name:{kind:Ju.Kind.NAME,value:e.name}}}ZN.astFromType=cS});var tT=w(eT=>{"use strict";m();T();N();Object.defineProperty(eT,"__esModule",{value:!0});eT.astFromValueUntyped=void 0;var ka=Ae();function dS(e){if(e===null)return{kind:ka.Kind.NULL};if(e===void 0)return null;if(Array.isArray(e)){let t=[];for(let n of e){let r=dS(n);r!=null&&t.push(r)}return{kind:ka.Kind.LIST,values:t}}if(typeof e=="object"){let t=[];for(let n in e){let r=e[n],i=dS(r);i&&t.push({kind:ka.Kind.OBJECT_FIELD,name:{kind:ka.Kind.NAME,value:n},value:i})}return{kind:ka.Kind.OBJECT,fields:t}}if(typeof e=="boolean")return{kind:ka.Kind.BOOLEAN,value:e};if(typeof e=="bigint")return{kind:ka.Kind.INT,value:String(e)};if(typeof e=="number"&&isFinite(e)){let t=String(e);return Hie.test(t)?{kind:ka.Kind.INT,value:t}:{kind:ka.Kind.FLOAT,value:t}}if(typeof e=="string")return{kind:ka.Kind.STRING,value:e};throw new TypeError(`Cannot convert value to AST: ${e}.`)}eT.astFromValueUntyped=dS;var Hie=/^-?(?:0|[1-9][0-9]*)$/});var uM=w(nT=>{"use strict";m();T();N();Object.defineProperty(nT,"__esModule",{value:!0});nT.astFromValue=void 0;var zie=dp(),mi=Ae(),Wie=tT(),oM=pp();function fp(e,t){if((0,mi.isNonNullType)(t)){let n=fp(e,t.ofType);return(n==null?void 0:n.kind)===mi.Kind.NULL?null:n}if(e===null)return{kind:mi.Kind.NULL};if(e===void 0)return null;if((0,mi.isListType)(t)){let n=t.ofType;if((0,oM.isIterableObject)(e)){let r=[];for(let i of e){let a=fp(i,n);a!=null&&r.push(a)}return{kind:mi.Kind.LIST,values:r}}return fp(e,n)}if((0,mi.isInputObjectType)(t)){if(!(0,oM.isObjectLike)(e))return null;let n=[];for(let r of Object.values(t.getFields())){let i=fp(e[r.name],r.type);i&&n.push({kind:mi.Kind.OBJECT_FIELD,name:{kind:mi.Kind.NAME,value:r.name},value:i})}return{kind:mi.Kind.OBJECT,fields:n}}if((0,mi.isLeafType)(t)){let n=t.serialize(e);return n==null?null:(0,mi.isEnumType)(t)?{kind:mi.Kind.ENUM,value:n}:t.name==="ID"&&typeof n=="string"&&Xie.test(n)?{kind:mi.Kind.INT,value:n}:(0,Wie.astFromValueUntyped)(n)}console.assert(!1,"Unexpected input type: "+(0,zie.inspect)(t))}nT.astFromValue=fp;var Xie=/^-?(?:0|[1-9][0-9]*)$/});var cM=w(rT=>{"use strict";m();T();N();Object.defineProperty(rT,"__esModule",{value:!0});rT.getDescriptionNode=void 0;var Zie=Ae();function eae(e){var t;if((t=e.astNode)!=null&&t.description)return Q(M({},e.astNode.description),{block:!0});if(e.description)return{kind:Zie.Kind.STRING,value:e.description,block:!0}}rT.getDescriptionNode=eae});var cl=w(Dr=>{"use strict";m();T();N();Object.defineProperty(Dr,"__esModule",{value:!0});Dr.memoize2of5=Dr.memoize2of4=Dr.memoize5=Dr.memoize4=Dr.memoize3=Dr.memoize2=Dr.memoize1=void 0;function tae(e){let t=new WeakMap;return function(r){let i=t.get(r);if(i===void 0){let a=e(r);return t.set(r,a),a}return i}}Dr.memoize1=tae;function nae(e){let t=new WeakMap;return function(r,i){let a=t.get(r);if(!a){a=new WeakMap,t.set(r,a);let c=e(r,i);return a.set(i,c),c}let o=a.get(i);if(o===void 0){let c=e(r,i);return a.set(i,c),c}return o}}Dr.memoize2=nae;function rae(e){let t=new WeakMap;return function(r,i,a){let o=t.get(r);if(!o){o=new WeakMap,t.set(r,o);let p=new WeakMap;o.set(i,p);let f=e(r,i,a);return p.set(a,f),f}let c=o.get(i);if(!c){c=new WeakMap,o.set(i,c);let p=e(r,i,a);return c.set(a,p),p}let l=c.get(a);if(l===void 0){let p=e(r,i,a);return c.set(a,p),p}return l}}Dr.memoize3=rae;function iae(e){let t=new WeakMap;return function(r,i,a,o){let c=t.get(r);if(!c){c=new WeakMap,t.set(r,c);let y=new WeakMap;c.set(i,y);let g=new WeakMap;y.set(a,g);let _=e(r,i,a,o);return g.set(o,_),_}let l=c.get(i);if(!l){l=new WeakMap,c.set(i,l);let y=new WeakMap;l.set(a,y);let g=e(r,i,a,o);return y.set(o,g),g}let p=l.get(a);if(!p){let y=new WeakMap;l.set(a,y);let g=e(r,i,a,o);return y.set(o,g),g}let f=p.get(o);if(f===void 0){let y=e(r,i,a,o);return p.set(o,y),y}return f}}Dr.memoize4=iae;function aae(e){let t=new WeakMap;return function(r,i,a,o,c){let l=t.get(r);if(!l){l=new WeakMap,t.set(r,l);let _=new WeakMap;l.set(i,_);let F=new WeakMap;_.set(a,F);let U=new WeakMap;F.set(o,U);let K=e(r,i,a,o,c);return U.set(c,K),K}let p=l.get(i);if(!p){p=new WeakMap,l.set(i,p);let _=new WeakMap;p.set(a,_);let F=new WeakMap;_.set(o,F);let U=e(r,i,a,o,c);return F.set(c,U),U}let f=p.get(a);if(!f){f=new WeakMap,p.set(a,f);let _=new WeakMap;f.set(o,_);let F=e(r,i,a,o,c);return _.set(c,F),F}let y=f.get(o);if(!y){y=new WeakMap,f.set(o,y);let _=e(r,i,a,o,c);return y.set(c,_),_}let g=y.get(c);if(g===void 0){let _=e(r,i,a,o,c);return y.set(c,_),_}return g}}Dr.memoize5=aae;function sae(e){let t=new WeakMap;return function(r,i,a,o){let c=t.get(r);if(!c){c=new WeakMap,t.set(r,c);let p=e(r,i,a,o);return c.set(i,p),p}let l=c.get(i);if(l===void 0){let p=e(r,i,a,o);return c.set(i,p),p}return l}}Dr.memoize2of4=sae;function oae(e){let t=new WeakMap;return function(r,i,a,o,c){let l=t.get(r);if(!l){l=new WeakMap,t.set(r,l);let f=e(r,i,a,o,c);return l.set(i,f),f}let p=l.get(i);if(p===void 0){let f=e(r,i,a,o,c);return l.set(i,f),f}return p}}Dr.memoize2of5=oae});var mp=w(Ni=>{"use strict";m();T();N();Object.defineProperty(Ni,"__esModule",{value:!0});Ni.getRootTypeMap=Ni.getRootTypes=Ni.getRootTypeNames=Ni.getDefinedRootType=void 0;var uae=YN(),pS=cl();function cae(e,t,n){let i=(0,Ni.getRootTypeMap)(e).get(t);if(i==null)throw(0,uae.createGraphQLError)(`Schema is not configured to execute ${t} operation.`,{nodes:n});return i}Ni.getDefinedRootType=cae;Ni.getRootTypeNames=(0,pS.memoize1)(function(t){let n=(0,Ni.getRootTypes)(t);return new Set([...n].map(r=>r.name))});Ni.getRootTypes=(0,pS.memoize1)(function(t){let n=(0,Ni.getRootTypeMap)(t);return new Set(n.values())});Ni.getRootTypeMap=(0,pS.memoize1)(function(t){let n=new Map,r=t.getQueryType();r&&n.set("query",r);let i=t.getMutationType();i&&n.set("mutation",i);let a=t.getSubscriptionType();return a&&n.set("subscription",a),n})});var ES=w(ht=>{"use strict";m();T();N();Object.defineProperty(ht,"__esModule",{value:!0});ht.makeDirectiveNodes=ht.makeDirectiveNode=ht.makeDeprecatedDirective=ht.astFromEnumValue=ht.astFromInputField=ht.astFromField=ht.astFromScalarType=ht.astFromEnumType=ht.astFromInputObjectType=ht.astFromUnionType=ht.astFromInterfaceType=ht.astFromObjectType=ht.astFromArg=ht.getDeprecatableDirectiveNodes=ht.getDirectiveNodes=ht.astFromDirective=ht.astFromSchema=ht.printSchemaWithDirectives=ht.getDocumentNodeFromSchema=void 0;var ut=Ae(),Hu=lS(),fS=uM(),lae=tT(),xi=cM(),mS=aS(),dae=lp(),pae=mp();function lM(e,t={}){let n=t.pathToDirectivesInExtensions,r=e.getTypeMap(),i=dM(e,n),a=i!=null?[i]:[],o=e.getDirectives();for(let c of o)(0,ut.isSpecifiedDirective)(c)||a.push(pM(c,e,n));for(let c in r){let l=r[c],p=(0,ut.isSpecifiedScalarType)(l),f=(0,ut.isIntrospectionType)(l);if(!(p||f))if((0,ut.isObjectType)(l))a.push(fM(l,e,n));else if((0,ut.isInterfaceType)(l))a.push(mM(l,e,n));else if((0,ut.isUnionType)(l))a.push(NM(l,e,n));else if((0,ut.isInputObjectType)(l))a.push(TM(l,e,n));else if((0,ut.isEnumType)(l))a.push(EM(l,e,n));else if((0,ut.isScalarType)(l))a.push(hM(l,e,n));else throw new Error(`Unknown type ${l}.`)}return{kind:ut.Kind.DOCUMENT,definitions:a}}ht.getDocumentNodeFromSchema=lM;function fae(e,t={}){let n=lM(e,t);return(0,ut.print)(n)}ht.printSchemaWithDirectives=fae;function dM(e,t){let n=new Map([["query",void 0],["mutation",void 0],["subscription",void 0]]),r=[];if(e.astNode!=null&&r.push(e.astNode),e.extensionASTNodes!=null)for(let p of e.extensionASTNodes)r.push(p);for(let p of r)if(p.operationTypes)for(let f of p.operationTypes)n.set(f.operation,f);let i=(0,pae.getRootTypeMap)(e);for(let[p,f]of n){let y=i.get(p);if(y!=null){let g=(0,Hu.astFromType)(y);f!=null?f.type=g:n.set(p,{kind:ut.Kind.OPERATION_TYPE_DEFINITION,operation:p,type:g})}}let a=[...n.values()].filter(dae.isSome),o=zu(e,e,t);if(!a.length&&!o.length)return null;let c={kind:a!=null?ut.Kind.SCHEMA_DEFINITION:ut.Kind.SCHEMA_EXTENSION,operationTypes:a,directives:o},l=(0,xi.getDescriptionNode)(e);return l&&(c.description=l),c}ht.astFromSchema=dM;function pM(e,t,n){var r,i;return{kind:ut.Kind.DIRECTIVE_DEFINITION,description:(0,xi.getDescriptionNode)(e),name:{kind:ut.Kind.NAME,value:e.name},arguments:(r=e.args)==null?void 0:r.map(a=>NS(a,t,n)),repeatable:e.isRepeatable,locations:((i=e.locations)==null?void 0:i.map(a=>({kind:ut.Kind.NAME,value:a})))||[]}}ht.astFromDirective=pM;function zu(e,t,n){let r=(0,mS.getDirectivesInExtensions)(e,n),i=[];e.astNode!=null&&i.push(e.astNode),"extensionASTNodes"in e&&e.extensionASTNodes!=null&&(i=i.concat(e.extensionASTNodes));let a;if(r!=null)a=iT(t,r);else{a=[];for(let o of i)o.directives&&a.push(...o.directives)}return a}ht.getDirectiveNodes=zu;function Tp(e,t,n){var c,l;let r=[],i=null,a=(0,mS.getDirectivesInExtensions)(e,n),o;return a!=null?o=iT(t,a):o=(c=e.astNode)==null?void 0:c.directives,o!=null&&(r=o.filter(p=>p.name.value!=="deprecated"),e.deprecationReason!=null&&(i=(l=o.filter(p=>p.name.value==="deprecated"))==null?void 0:l[0])),e.deprecationReason!=null&&i==null&&(i=gM(e.deprecationReason)),i==null?r:[i].concat(r)}ht.getDeprecatableDirectiveNodes=Tp;function NS(e,t,n){var r;return{kind:ut.Kind.INPUT_VALUE_DEFINITION,description:(0,xi.getDescriptionNode)(e),name:{kind:ut.Kind.NAME,value:e.name},type:(0,Hu.astFromType)(e.type),defaultValue:e.defaultValue!==void 0&&(r=(0,fS.astFromValue)(e.defaultValue,e.type))!=null?r:void 0,directives:Tp(e,t,n)}}ht.astFromArg=NS;function fM(e,t,n){return{kind:ut.Kind.OBJECT_TYPE_DEFINITION,description:(0,xi.getDescriptionNode)(e),name:{kind:ut.Kind.NAME,value:e.name},fields:Object.values(e.getFields()).map(r=>TS(r,t,n)),interfaces:Object.values(e.getInterfaces()).map(r=>(0,Hu.astFromType)(r)),directives:zu(e,t,n)}}ht.astFromObjectType=fM;function mM(e,t,n){let r={kind:ut.Kind.INTERFACE_TYPE_DEFINITION,description:(0,xi.getDescriptionNode)(e),name:{kind:ut.Kind.NAME,value:e.name},fields:Object.values(e.getFields()).map(i=>TS(i,t,n)),directives:zu(e,t,n)};return"getInterfaces"in e&&(r.interfaces=Object.values(e.getInterfaces()).map(i=>(0,Hu.astFromType)(i))),r}ht.astFromInterfaceType=mM;function NM(e,t,n){return{kind:ut.Kind.UNION_TYPE_DEFINITION,description:(0,xi.getDescriptionNode)(e),name:{kind:ut.Kind.NAME,value:e.name},directives:zu(e,t,n),types:e.getTypes().map(r=>(0,Hu.astFromType)(r))}}ht.astFromUnionType=NM;function TM(e,t,n){return{kind:ut.Kind.INPUT_OBJECT_TYPE_DEFINITION,description:(0,xi.getDescriptionNode)(e),name:{kind:ut.Kind.NAME,value:e.name},fields:Object.values(e.getFields()).map(r=>yM(r,t,n)),directives:zu(e,t,n)}}ht.astFromInputObjectType=TM;function EM(e,t,n){return{kind:ut.Kind.ENUM_TYPE_DEFINITION,description:(0,xi.getDescriptionNode)(e),name:{kind:ut.Kind.NAME,value:e.name},values:Object.values(e.getValues()).map(r=>IM(r,t,n)),directives:zu(e,t,n)}}ht.astFromEnumType=EM;function hM(e,t,n){var o;let r=(0,mS.getDirectivesInExtensions)(e,n),i=r?iT(t,r):((o=e.astNode)==null?void 0:o.directives)||[],a=e.specifiedByUrl||e.specifiedByURL;if(a&&!i.some(c=>c.name.value==="specifiedBy")){let c={url:a};i.push(Np("specifiedBy",c))}return{kind:ut.Kind.SCALAR_TYPE_DEFINITION,description:(0,xi.getDescriptionNode)(e),name:{kind:ut.Kind.NAME,value:e.name},directives:i}}ht.astFromScalarType=hM;function TS(e,t,n){return{kind:ut.Kind.FIELD_DEFINITION,description:(0,xi.getDescriptionNode)(e),name:{kind:ut.Kind.NAME,value:e.name},arguments:e.args.map(r=>NS(r,t,n)),type:(0,Hu.astFromType)(e.type),directives:Tp(e,t,n)}}ht.astFromField=TS;function yM(e,t,n){var r;return{kind:ut.Kind.INPUT_VALUE_DEFINITION,description:(0,xi.getDescriptionNode)(e),name:{kind:ut.Kind.NAME,value:e.name},type:(0,Hu.astFromType)(e.type),directives:Tp(e,t,n),defaultValue:(r=(0,fS.astFromValue)(e.defaultValue,e.type))!=null?r:void 0}}ht.astFromInputField=yM;function IM(e,t,n){return{kind:ut.Kind.ENUM_VALUE_DEFINITION,description:(0,xi.getDescriptionNode)(e),name:{kind:ut.Kind.NAME,value:e.name},directives:Tp(e,t,n)}}ht.astFromEnumValue=IM;function gM(e){return Np("deprecated",{reason:e},ut.GraphQLDeprecatedDirective)}ht.makeDeprecatedDirective=gM;function Np(e,t,n){let r=[];if(n!=null)for(let i of n.args){let a=i.name,o=t[a];if(o!==void 0){let c=(0,fS.astFromValue)(o,i.type);c&&r.push({kind:ut.Kind.ARGUMENT,name:{kind:ut.Kind.NAME,value:a},value:c})}}else for(let i in t){let a=t[i],o=(0,lae.astFromValueUntyped)(a);o&&r.push({kind:ut.Kind.ARGUMENT,name:{kind:ut.Kind.NAME,value:i},value:o})}return{kind:ut.Kind.DIRECTIVE,name:{kind:ut.Kind.NAME,value:e},arguments:r}}ht.makeDirectiveNode=Np;function iT(e,t){let n=[];for(let r in t){let i=t[r],a=e==null?void 0:e.getDirective(r);if(Array.isArray(i))for(let o of i)n.push(Np(r,o,a));else n.push(Np(r,i,a))}return n}ht.makeDirectiveNodes=iT});var vM=w(ll=>{"use strict";m();T();N();Object.defineProperty(ll,"__esModule",{value:!0});ll.createDefaultRules=ll.validateGraphQlDocuments=void 0;var Ep=Ae();function mae(e,t,n=_M()){var c;let r=new Set,i=new Map;for(let l of t)for(let p of l.definitions)p.kind===Ep.Kind.FRAGMENT_DEFINITION?i.set(p.name.value,p):r.add(p);let a={kind:Ep.Kind.DOCUMENT,definitions:Array.from([...r,...i.values()])},o=(0,Ep.validate)(e,a,n);for(let l of o)if(l.stack=l.message,l.locations)for(let p of l.locations)l.stack+=` + at ${(c=l.source)==null?void 0:c.name}:${p.line}:${p.column}`;return o}ll.validateGraphQlDocuments=mae;function _M(){let e=["NoUnusedFragmentsRule","NoUnusedVariablesRule","KnownDirectivesRule"];return Ep.versionInfo.major<15&&(e=e.map(t=>t.replace(/Rule$/,""))),Ep.specifiedRules.filter(t=>!e.includes(t.name))}ll.createDefaultRules=_M});var SM=w(aT=>{"use strict";m();T();N();Object.defineProperty(aT,"__esModule",{value:!0});aT.parseGraphQLJSON=void 0;var Nae=Ae();function Tae(e){return e=e.toString(),e.charCodeAt(0)===65279&&(e=e.slice(1)),e}function Eae(e){return JSON.parse(Tae(e))}function hae(e,t,n){let r=Eae(t);if(r.data&&(r=r.data),r.kind==="Document")return{location:e,document:r};if(r.__schema){let i=(0,Nae.buildClientSchema)(r,n);return{location:e,schema:i}}else if(typeof r=="string")return{location:e,rawSDL:r};throw new Error("Not valid JSON content")}aT.parseGraphQLJSON=hae});var yS=w(Bn=>{"use strict";m();T();N();Object.defineProperty(Bn,"__esModule",{value:!0});Bn.getBlockStringIndentation=Bn.dedentBlockStringValue=Bn.getLeadingCommentBlock=Bn.getComment=Bn.getDescription=Bn.printWithComments=Bn.printComment=Bn.pushComment=Bn.collectComment=Bn.resetComments=void 0;var AM=Ae(),yae=80,dl={};function Iae(){dl={}}Bn.resetComments=Iae;function gae(e){var n;let t=(n=e.name)==null?void 0:n.value;if(t!=null)switch(hp(e,t),e.kind){case"EnumTypeDefinition":if(e.values)for(let r of e.values)hp(r,t,r.name.value);break;case"ObjectTypeDefinition":case"InputObjectTypeDefinition":case"InterfaceTypeDefinition":if(e.fields){for(let r of e.fields)if(hp(r,t,r.name.value),Dae(r)&&r.arguments)for(let i of r.arguments)hp(i,t,r.name.value,i.name.value)}break}}Bn.collectComment=gae;function hp(e,t,n,r){let i=hS(e);if(typeof i!="string"||i.length===0)return;let a=[t];n&&(a.push(n),r&&a.push(r));let o=a.join(".");dl[o]||(dl[o]=[]),dl[o].push(i)}Bn.pushComment=hp;function RM(e){return` # `+e.replace(/\n/g,` -# `)}Bn.printComment=AM;function ke(e,t){return e?e.filter(n=>n).join(t||""):""}function SM(e){var t;return(t=e==null?void 0:e.some(n=>n.includes(` -`)))!=null?t:!1}function _ae(e){return(t,n,r,i,a)=>{var T;let o=[],c=i.reduce((y,g)=>(["fields","arguments","values"].includes(g)&&y.name&&o.push(y.name.value),y[g]),a[0]),l=[...o,(T=c==null?void 0:c.name)==null?void 0:T.value].filter(Boolean).join("."),p=[];return t.kind.includes("Definition")&&dl[l]&&p.push(...dl[l]),ke([...p.map(AM),t.description,e(t,n,r,i,a)],` -`)}}function hp(e){return e&&` ${e.replace(/\n/g,` +# `)}Bn.printComment=RM;function ke(e,t){return e?e.filter(n=>n).join(t||""):""}function OM(e){var t;return(t=e==null?void 0:e.some(n=>n.includes(` +`)))!=null?t:!1}function _ae(e){return(t,n,r,i,a)=>{var f;let o=[],c=i.reduce((y,g)=>(["fields","arguments","values"].includes(g)&&y.name&&o.push(y.name.value),y[g]),a[0]),l=[...o,(f=c==null?void 0:c.name)==null?void 0:f.value].filter(Boolean).join("."),p=[];return t.kind.includes("Definition")&&dl[l]&&p.push(...dl[l]),ke([...p.map(RM),t.description,e(t,n,r,i,a)],` +`)}}function yp(e){return e&&` ${e.replace(/\n/g,` `)}`}function la(e){return e&&e.length!==0?`{ -${hp(ke(e,` +${yp(ke(e,` `))} }`:""}function On(e,t,n){return t?e+t+(n||""):""}function vae(e,t=!1){let n=e.replace(/"""/g,'\\"""');return(e[0]===" "||e[0]===" ")&&e.indexOf(` `)===-1?`"""${n.replace(/"$/,`" `)}"""`:`""" -${t?n:hp(n)} -"""`}var OM={Name:{leave:e=>e.value},Variable:{leave:e=>"$"+e.name},Document:{leave:e=>ke(e.definitions,` +${t?n:yp(n)} +"""`}var DM={Name:{leave:e=>e.value},Variable:{leave:e=>"$"+e.name},Document:{leave:e=>ke(e.definitions,` `)},OperationDefinition:{leave:e=>{let t=On("(",ke(e.variableDefinitions,", "),")");return ke([e.operation,ke([e.name,t]),ke(e.directives," ")]," ")+" "+e.selectionSet}},VariableDefinition:{leave:({variable:e,type:t,defaultValue:n,directives:r})=>e+": "+t+On(" = ",n)+On(" ",ke(r," "))},SelectionSet:{leave:({selections:e})=>la(e)},Field:{leave({alias:e,name:t,arguments:n,directives:r,selectionSet:i}){let a=On("",e,": ")+t,o=a+On("(",ke(n,", "),")");return o.length>yae&&(o=a+On(`( -`,hp(ke(n,` +`,yp(ke(n,` `)),` -)`)),ke([o,ke(r," "),i]," ")}},Argument:{leave:({name:e,value:t})=>e+": "+t},FragmentSpread:{leave:({name:e,directives:t})=>"..."+e+On(" ",ke(t," "))},InlineFragment:{leave:({typeCondition:e,directives:t,selectionSet:n})=>ke(["...",On("on ",e),ke(t," "),n]," ")},FragmentDefinition:{leave:({name:e,typeCondition:t,variableDefinitions:n,directives:r,selectionSet:i})=>`fragment ${e}${On("(",ke(n,", "),")")} on ${t} ${On("",ke(r," ")," ")}`+i},IntValue:{leave:({value:e})=>e},FloatValue:{leave:({value:e})=>e},StringValue:{leave:({value:e,block:t})=>t?vae(e):JSON.stringify(e)},BooleanValue:{leave:({value:e})=>e?"true":"false"},NullValue:{leave:()=>"null"},EnumValue:{leave:({value:e})=>e},ListValue:{leave:({values:e})=>"["+ke(e,", ")+"]"},ObjectValue:{leave:({fields:e})=>"{"+ke(e,", ")+"}"},ObjectField:{leave:({name:e,value:t})=>e+": "+t},Directive:{leave:({name:e,arguments:t})=>"@"+e+On("(",ke(t,", "),")")},NamedType:{leave:({name:e})=>e},ListType:{leave:({type:e})=>"["+e+"]"},NonNullType:{leave:({type:e})=>e+"!"},SchemaDefinition:{leave:({directives:e,operationTypes:t})=>ke(["schema",ke(e," "),la(t)]," ")},OperationTypeDefinition:{leave:({operation:e,type:t})=>e+": "+t},ScalarTypeDefinition:{leave:({name:e,directives:t})=>ke(["scalar",e,ke(t," ")]," ")},ObjectTypeDefinition:{leave:({name:e,interfaces:t,directives:n,fields:r})=>ke(["type",e,On("implements ",ke(t," & ")),ke(n," "),la(r)]," ")},FieldDefinition:{leave:({name:e,arguments:t,type:n,directives:r})=>e+(SM(t)?On(`( -`,hp(ke(t,` +)`)),ke([o,ke(r," "),i]," ")}},Argument:{leave:({name:e,value:t})=>e+": "+t},FragmentSpread:{leave:({name:e,directives:t})=>"..."+e+On(" ",ke(t," "))},InlineFragment:{leave:({typeCondition:e,directives:t,selectionSet:n})=>ke(["...",On("on ",e),ke(t," "),n]," ")},FragmentDefinition:{leave:({name:e,typeCondition:t,variableDefinitions:n,directives:r,selectionSet:i})=>`fragment ${e}${On("(",ke(n,", "),")")} on ${t} ${On("",ke(r," ")," ")}`+i},IntValue:{leave:({value:e})=>e},FloatValue:{leave:({value:e})=>e},StringValue:{leave:({value:e,block:t})=>t?vae(e):JSON.stringify(e)},BooleanValue:{leave:({value:e})=>e?"true":"false"},NullValue:{leave:()=>"null"},EnumValue:{leave:({value:e})=>e},ListValue:{leave:({values:e})=>"["+ke(e,", ")+"]"},ObjectValue:{leave:({fields:e})=>"{"+ke(e,", ")+"}"},ObjectField:{leave:({name:e,value:t})=>e+": "+t},Directive:{leave:({name:e,arguments:t})=>"@"+e+On("(",ke(t,", "),")")},NamedType:{leave:({name:e})=>e},ListType:{leave:({type:e})=>"["+e+"]"},NonNullType:{leave:({type:e})=>e+"!"},SchemaDefinition:{leave:({directives:e,operationTypes:t})=>ke(["schema",ke(e," "),la(t)]," ")},OperationTypeDefinition:{leave:({operation:e,type:t})=>e+": "+t},ScalarTypeDefinition:{leave:({name:e,directives:t})=>ke(["scalar",e,ke(t," ")]," ")},ObjectTypeDefinition:{leave:({name:e,interfaces:t,directives:n,fields:r})=>ke(["type",e,On("implements ",ke(t," & ")),ke(n," "),la(r)]," ")},FieldDefinition:{leave:({name:e,arguments:t,type:n,directives:r})=>e+(OM(t)?On(`( +`,yp(ke(t,` `)),` -)`):On("(",ke(t,", "),")"))+": "+n+On(" ",ke(r," "))},InputValueDefinition:{leave:({name:e,type:t,defaultValue:n,directives:r})=>ke([e+": "+t,On("= ",n),ke(r," ")]," ")},InterfaceTypeDefinition:{leave:({name:e,interfaces:t,directives:n,fields:r})=>ke(["interface",e,On("implements ",ke(t," & ")),ke(n," "),la(r)]," ")},UnionTypeDefinition:{leave:({name:e,directives:t,types:n})=>ke(["union",e,ke(t," "),On("= ",ke(n," | "))]," ")},EnumTypeDefinition:{leave:({name:e,directives:t,values:n})=>ke(["enum",e,ke(t," "),la(n)]," ")},EnumValueDefinition:{leave:({name:e,directives:t})=>ke([e,ke(t," ")]," ")},InputObjectTypeDefinition:{leave:({name:e,directives:t,fields:n})=>ke(["input",e,ke(t," "),la(n)]," ")},DirectiveDefinition:{leave:({name:e,arguments:t,repeatable:n,locations:r})=>"directive @"+e+(SM(t)?On(`( -`,hp(ke(t,` +)`):On("(",ke(t,", "),")"))+": "+n+On(" ",ke(r," "))},InputValueDefinition:{leave:({name:e,type:t,defaultValue:n,directives:r})=>ke([e+": "+t,On("= ",n),ke(r," ")]," ")},InterfaceTypeDefinition:{leave:({name:e,interfaces:t,directives:n,fields:r})=>ke(["interface",e,On("implements ",ke(t," & ")),ke(n," "),la(r)]," ")},UnionTypeDefinition:{leave:({name:e,directives:t,types:n})=>ke(["union",e,ke(t," "),On("= ",ke(n," | "))]," ")},EnumTypeDefinition:{leave:({name:e,directives:t,values:n})=>ke(["enum",e,ke(t," "),la(n)]," ")},EnumValueDefinition:{leave:({name:e,directives:t})=>ke([e,ke(t," ")]," ")},InputObjectTypeDefinition:{leave:({name:e,directives:t,fields:n})=>ke(["input",e,ke(t," "),la(n)]," ")},DirectiveDefinition:{leave:({name:e,arguments:t,repeatable:n,locations:r})=>"directive @"+e+(OM(t)?On(`( +`,yp(ke(t,` `)),` -)`):On("(",ke(t,", "),")"))+(n?" repeatable":"")+" on "+ke(r," | ")},SchemaExtension:{leave:({directives:e,operationTypes:t})=>ke(["extend schema",ke(e," "),la(t)]," ")},ScalarTypeExtension:{leave:({name:e,directives:t})=>ke(["extend scalar",e,ke(t," ")]," ")},ObjectTypeExtension:{leave:({name:e,interfaces:t,directives:n,fields:r})=>ke(["extend type",e,On("implements ",ke(t," & ")),ke(n," "),la(r)]," ")},InterfaceTypeExtension:{leave:({name:e,interfaces:t,directives:n,fields:r})=>ke(["extend interface",e,On("implements ",ke(t," & ")),ke(n," "),la(r)]," ")},UnionTypeExtension:{leave:({name:e,directives:t,types:n})=>ke(["extend union",e,ke(t," "),On("= ",ke(n," | "))]," ")},EnumTypeExtension:{leave:({name:e,directives:t,values:n})=>ke(["extend enum",e,ke(t," "),la(n)]," ")},InputObjectTypeExtension:{leave:({name:e,directives:t,fields:n})=>ke(["extend input",e,ke(t," "),la(n)]," ")}},Sae=Object.keys(OM).reduce((e,t)=>Q(M({},e),{[t]:{leave:_ae(OM[t].leave)}}),{});function Oae(e){return(0,bM.visit)(e,Sae)}Bn.printWithComments=Oae;function Dae(e){return e.kind==="FieldDefinition"}function bae(e,t){if(e.description!=null)return e.description.value;if(t!=null&&t.commentDescriptions)return ES(e)}Bn.getDescription=bae;function ES(e){let t=RM(e);if(t!==void 0)return FM(` -${t}`)}Bn.getComment=ES;function RM(e){let t=e.loc;if(!t)return;let n=[],r=t.startToken.prev;for(;r!=null&&r.kind===bM.TokenKind.COMMENT&&r.next!=null&&r.prev!=null&&r.line+1===r.next.line&&r.line!==r.prev.line;){let i=String(r.value);n.push(i),r=r.prev}return n.length>0?n.reverse().join(` -`):void 0}Bn.getLeadingCommentBlock=RM;function FM(e){let t=e.split(/\r\n|[\n\r]/g),n=PM(t);if(n!==0)for(let r=1;r0&&DM(t[0]);)t.shift();for(;t.length>0&&DM(t[t.length-1]);)t.pop();return t.join(` -`)}Bn.dedentBlockStringValue=FM;function PM(e){let t=null;for(let n=1;n{"use strict";f();N();m();Object.defineProperty(Wo,"__esModule",{value:!0});Wo.isDescribable=Wo.transformCommentsToDescriptions=Wo.parseGraphQLSDL=void 0;var qi=Ae(),LM=hS();function Aae(e,t,n={}){let r;try{n.commentDescriptions&&t.includes("#")?(r=CM(t,n),n.noLocation&&(r=(0,qi.parse)((0,qi.print)(r),n))):r=(0,qi.parse)(new qi.Source(t,e),n)}catch(i){if(i.message.includes("EOF")&&t.replace(/(\#[^*]*)/g,"").trim()==="")r={kind:qi.Kind.DOCUMENT,definitions:[]};else throw i}return{location:e,document:r}}Wo.parseGraphQLSDL=Aae;function CM(e,t={}){let n=(0,qi.parse)(e,Q(M({},t),{noLocation:!1}));return(0,qi.visit)(n,{leave:i=>{if(BM(i)){let a=(0,LM.getLeadingCommentBlock)(i);if(a!==void 0){let o=(0,LM.dedentBlockStringValue)(` +)`):On("(",ke(t,", "),")"))+(n?" repeatable":"")+" on "+ke(r," | ")},SchemaExtension:{leave:({directives:e,operationTypes:t})=>ke(["extend schema",ke(e," "),la(t)]," ")},ScalarTypeExtension:{leave:({name:e,directives:t})=>ke(["extend scalar",e,ke(t," ")]," ")},ObjectTypeExtension:{leave:({name:e,interfaces:t,directives:n,fields:r})=>ke(["extend type",e,On("implements ",ke(t," & ")),ke(n," "),la(r)]," ")},InterfaceTypeExtension:{leave:({name:e,interfaces:t,directives:n,fields:r})=>ke(["extend interface",e,On("implements ",ke(t," & ")),ke(n," "),la(r)]," ")},UnionTypeExtension:{leave:({name:e,directives:t,types:n})=>ke(["extend union",e,ke(t," "),On("= ",ke(n," | "))]," ")},EnumTypeExtension:{leave:({name:e,directives:t,values:n})=>ke(["extend enum",e,ke(t," "),la(n)]," ")},InputObjectTypeExtension:{leave:({name:e,directives:t,fields:n})=>ke(["extend input",e,ke(t," "),la(n)]," ")}},Sae=Object.keys(DM).reduce((e,t)=>Q(M({},e),{[t]:{leave:_ae(DM[t].leave)}}),{});function Oae(e){return(0,AM.visit)(e,Sae)}Bn.printWithComments=Oae;function Dae(e){return e.kind==="FieldDefinition"}function bae(e,t){if(e.description!=null)return e.description.value;if(t!=null&&t.commentDescriptions)return hS(e)}Bn.getDescription=bae;function hS(e){let t=FM(e);if(t!==void 0)return PM(` +${t}`)}Bn.getComment=hS;function FM(e){let t=e.loc;if(!t)return;let n=[],r=t.startToken.prev;for(;r!=null&&r.kind===AM.TokenKind.COMMENT&&r.next!=null&&r.prev!=null&&r.line+1===r.next.line&&r.line!==r.prev.line;){let i=String(r.value);n.push(i),r=r.prev}return n.length>0?n.reverse().join(` +`):void 0}Bn.getLeadingCommentBlock=FM;function PM(e){let t=e.split(/\r\n|[\n\r]/g),n=wM(t);if(n!==0)for(let r=1;r0&&bM(t[0]);)t.shift();for(;t.length>0&&bM(t[t.length-1]);)t.pop();return t.join(` +`)}Bn.dedentBlockStringValue=PM;function wM(e){let t=null;for(let n=1;n{"use strict";m();T();N();Object.defineProperty(Xo,"__esModule",{value:!0});Xo.isDescribable=Xo.transformCommentsToDescriptions=Xo.parseGraphQLSDL=void 0;var qi=Ae(),CM=yS();function Aae(e,t,n={}){let r;try{n.commentDescriptions&&t.includes("#")?(r=BM(t,n),n.noLocation&&(r=(0,qi.parse)((0,qi.print)(r),n))):r=(0,qi.parse)(new qi.Source(t,e),n)}catch(i){if(i.message.includes("EOF")&&t.replace(/(\#[^*]*)/g,"").trim()==="")r={kind:qi.Kind.DOCUMENT,definitions:[]};else throw i}return{location:e,document:r}}Xo.parseGraphQLSDL=Aae;function BM(e,t={}){let n=(0,qi.parse)(e,Q(M({},t),{noLocation:!1}));return(0,qi.visit)(n,{leave:i=>{if(UM(i)){let a=(0,CM.getLeadingCommentBlock)(i);if(a!==void 0){let o=(0,CM.dedentBlockStringValue)(` `+a),c=o.includes(` `);return i.description?Q(M({},i),{description:Q(M({},i.description),{value:i.description.value+` -`+o,block:!0})}):Q(M({},i),{description:{kind:qi.Kind.STRING,value:o,block:c}})}}}})}Wo.transformCommentsToDescriptions=CM;function BM(e){return(0,qi.isTypeSystemDefinitionNode)(e)||e.kind===qi.Kind.FIELD_DEFINITION||e.kind===qi.Kind.INPUT_VALUE_DEFINITION||e.kind===qi.Kind.ENUM_VALUE_DEFINITION}Wo.isDescribable=BM});var GM=w(aT=>{"use strict";f();N();m();Object.defineProperty(aT,"__esModule",{value:!0});aT.buildOperationNodeForField=void 0;var ct=Ae(),qM=fp(),gS=[],iT=new Map;function VM(e){gS.push(e)}function kM(){gS=[]}function MM(){iT=new Map}function Rae({schema:e,kind:t,field:n,models:r,ignore:i=[],depthLimit:a,circularReferenceDepth:o,argNames:c,selectedFields:l=!0}){kM(),MM();let p=(0,qM.getRootTypeNames)(e),T=Fae({schema:e,fieldName:n,kind:t,models:r||[],ignore:i,depthLimit:a||1/0,circularReferenceDepth:o||1,argNames:c,selectedFields:l,rootTypeNames:p});return T.variableDefinitions=[...gS],kM(),MM(),T}aT.buildOperationNodeForField=Rae;function Fae({schema:e,fieldName:t,kind:n,models:r,ignore:i,depthLimit:a,circularReferenceDepth:o,argNames:c,selectedFields:l,rootTypeNames:p}){let T=(0,qM.getDefinedRootType)(e,n),y=T.getFields()[t],g=`${t}_${n}`;if(y.args)for(let _ of y.args){let F=_.name;(!c||c.includes(F))&&VM(jM(_,F))}return{kind:ct.Kind.OPERATION_DEFINITION,operation:n,name:{kind:ct.Kind.NAME,value:g},variableDefinitions:[],selectionSet:{kind:ct.Kind.SELECTION_SET,selections:[KM({type:T,field:y,models:r,firstCall:!0,path:[],ancestors:[],ignore:i,depthLimit:a,circularReferenceDepth:o,schema:e,depth:0,argNames:c,selectedFields:l,rootTypeNames:p})]}}}function IS({parent:e,type:t,models:n,firstCall:r,path:i,ancestors:a,ignore:o,depthLimit:c,circularReferenceDepth:l,schema:p,depth:T,argNames:y,selectedFields:g,rootTypeNames:_}){if(!(typeof g=="boolean"&&T>c)){if((0,ct.isUnionType)(t)){let F=t.getTypes();return{kind:ct.Kind.SELECTION_SET,selections:F.filter(U=>!yS([...a,U],{depth:l})).map(U=>({kind:ct.Kind.INLINE_FRAGMENT,typeCondition:{kind:ct.Kind.NAMED_TYPE,name:{kind:ct.Kind.NAME,value:U.name}},selectionSet:IS({parent:t,type:U,models:n,path:i,ancestors:a,ignore:o,depthLimit:c,circularReferenceDepth:l,schema:p,depth:T,argNames:y,selectedFields:g,rootTypeNames:_})})).filter(U=>{var K,J;return((J=(K=U==null?void 0:U.selectionSet)==null?void 0:K.selections)==null?void 0:J.length)>0})}}if((0,ct.isInterfaceType)(t)){let F=Object.values(p.getTypeMap()).filter(U=>(0,ct.isObjectType)(U)&&U.getInterfaces().includes(t));return{kind:ct.Kind.SELECTION_SET,selections:F.filter(U=>!yS([...a,U],{depth:l})).map(U=>({kind:ct.Kind.INLINE_FRAGMENT,typeCondition:{kind:ct.Kind.NAMED_TYPE,name:{kind:ct.Kind.NAME,value:U.name}},selectionSet:IS({parent:t,type:U,models:n,path:i,ancestors:a,ignore:o,depthLimit:c,circularReferenceDepth:l,schema:p,depth:T,argNames:y,selectedFields:g,rootTypeNames:_})})).filter(U=>{var K,J;return((J=(K=U==null?void 0:U.selectionSet)==null?void 0:K.selections)==null?void 0:J.length)>0})}}if((0,ct.isObjectType)(t)&&!_.has(t.name)){let F=o.includes(t.name)||o.includes(`${e.name}.${i[i.length-1]}`),U=n.includes(t.name);if(!r&&U&&!F)return{kind:ct.Kind.SELECTION_SET,selections:[{kind:ct.Kind.FIELD,name:{kind:ct.Kind.NAME,value:"id"}}]};let K=t.getFields();return{kind:ct.Kind.SELECTION_SET,selections:Object.keys(K).filter(J=>!yS([...a,(0,ct.getNamedType)(K[J].type)],{depth:l})).map(J=>{let ee=typeof g=="object"?g[J]:!0;return ee?KM({type:t,field:K[J],models:n,path:[...i,J],ancestors:a,ignore:o,depthLimit:c,circularReferenceDepth:l,schema:p,depth:T,argNames:y,selectedFields:ee,rootTypeNames:_}):null}).filter(J=>{var ee,W;return J==null?!1:"selectionSet"in J?!!((W=(ee=J.selectionSet)==null?void 0:ee.selections)!=null&&W.length):!0})}}}}function jM(e,t){function n(r){return(0,ct.isListType)(r)?{kind:ct.Kind.LIST_TYPE,type:n(r.ofType)}:(0,ct.isNonNullType)(r)?{kind:ct.Kind.NON_NULL_TYPE,type:n(r.ofType)}:{kind:ct.Kind.NAMED_TYPE,name:{kind:ct.Kind.NAME,value:r.name}}}return{kind:ct.Kind.VARIABLE_DEFINITION,variable:{kind:ct.Kind.VARIABLE,name:{kind:ct.Kind.NAME,value:t||e.name}},type:n(e.type)}}function xM(e,t){return[...t,e].join("_")}function KM({type:e,field:t,models:n,firstCall:r,path:i,ancestors:a,ignore:o,depthLimit:c,circularReferenceDepth:l,schema:p,depth:T,argNames:y,selectedFields:g,rootTypeNames:_}){let F=(0,ct.getNamedType)(t.type),U=[],K=!1;if(t.args&&t.args.length&&(U=t.args.map(Te=>{let de=xM(Te.name,i);return y&&!y.includes(de)?((0,ct.isNonNullType)(Te.type)&&(K=!0),null):(r||VM(jM(Te,de)),{kind:ct.Kind.ARGUMENT,name:{kind:ct.Kind.NAME,value:Te.name},value:{kind:ct.Kind.VARIABLE,name:{kind:ct.Kind.NAME,value:xM(Te.name,i)}}})}).filter(Boolean)),K)return null;let J=[...i,t.name],ee=J.join("."),W=t.name;return iT.has(ee)&&iT.get(ee)!==t.type.toString()&&(W+=t.type.toString().replace("!","NonNull").replace("[","List").replace("]","")),iT.set(ee,t.type.toString()),!(0,ct.isScalarType)(F)&&!(0,ct.isEnumType)(F)?Q(M({kind:ct.Kind.FIELD,name:{kind:ct.Kind.NAME,value:t.name}},W!==t.name&&{alias:{kind:ct.Kind.NAME,value:W}}),{selectionSet:IS({parent:e,type:F,models:n,firstCall:r,path:J,ancestors:[...a,e],ignore:o,depthLimit:c,circularReferenceDepth:l,schema:p,depth:T+1,argNames:y,selectedFields:g,rootTypeNames:_})||void 0,arguments:U}):Q(M({kind:ct.Kind.FIELD,name:{kind:ct.Kind.NAME,value:t.name}},W!==t.name&&{alias:{kind:ct.Kind.NAME,value:W}}),{arguments:U})}function yS(e,t={depth:1}){let n=e[e.length-1];return(0,ct.isScalarType)(n)?!1:e.filter(i=>i.name===n.name).length>t.depth}});var QM=w(sT=>{"use strict";f();N();m();Object.defineProperty(sT,"__esModule",{value:!0});sT.DirectiveLocation=void 0;var $M;(function(e){e.QUERY="QUERY",e.MUTATION="MUTATION",e.SUBSCRIPTION="SUBSCRIPTION",e.FIELD="FIELD",e.FRAGMENT_DEFINITION="FRAGMENT_DEFINITION",e.FRAGMENT_SPREAD="FRAGMENT_SPREAD",e.INLINE_FRAGMENT="INLINE_FRAGMENT",e.VARIABLE_DEFINITION="VARIABLE_DEFINITION",e.SCHEMA="SCHEMA",e.SCALAR="SCALAR",e.OBJECT="OBJECT",e.FIELD_DEFINITION="FIELD_DEFINITION",e.ARGUMENT_DEFINITION="ARGUMENT_DEFINITION",e.INTERFACE="INTERFACE",e.UNION="UNION",e.ENUM="ENUM",e.ENUM_VALUE="ENUM_VALUE",e.INPUT_OBJECT="INPUT_OBJECT",e.INPUT_FIELD_DEFINITION="INPUT_FIELD_DEFINITION"})($M||(sT.DirectiveLocation=$M={}))});var Wu=w(oT=>{"use strict";f();N();m();Object.defineProperty(oT,"__esModule",{value:!0});oT.MapperKind=void 0;var YM;(function(e){e.TYPE="MapperKind.TYPE",e.SCALAR_TYPE="MapperKind.SCALAR_TYPE",e.ENUM_TYPE="MapperKind.ENUM_TYPE",e.COMPOSITE_TYPE="MapperKind.COMPOSITE_TYPE",e.OBJECT_TYPE="MapperKind.OBJECT_TYPE",e.INPUT_OBJECT_TYPE="MapperKind.INPUT_OBJECT_TYPE",e.ABSTRACT_TYPE="MapperKind.ABSTRACT_TYPE",e.UNION_TYPE="MapperKind.UNION_TYPE",e.INTERFACE_TYPE="MapperKind.INTERFACE_TYPE",e.ROOT_OBJECT="MapperKind.ROOT_OBJECT",e.QUERY="MapperKind.QUERY",e.MUTATION="MapperKind.MUTATION",e.SUBSCRIPTION="MapperKind.SUBSCRIPTION",e.DIRECTIVE="MapperKind.DIRECTIVE",e.FIELD="MapperKind.FIELD",e.COMPOSITE_FIELD="MapperKind.COMPOSITE_FIELD",e.OBJECT_FIELD="MapperKind.OBJECT_FIELD",e.ROOT_FIELD="MapperKind.ROOT_FIELD",e.QUERY_ROOT_FIELD="MapperKind.QUERY_ROOT_FIELD",e.MUTATION_ROOT_FIELD="MapperKind.MUTATION_ROOT_FIELD",e.SUBSCRIPTION_ROOT_FIELD="MapperKind.SUBSCRIPTION_ROOT_FIELD",e.INTERFACE_FIELD="MapperKind.INTERFACE_FIELD",e.INPUT_OBJECT_FIELD="MapperKind.INPUT_OBJECT_FIELD",e.ARGUMENT="MapperKind.ARGUMENT",e.ENUM_VALUE="MapperKind.ENUM_VALUE"})(YM||(oT.MapperKind=YM={}))});var _S=w(uT=>{"use strict";f();N();m();Object.defineProperty(uT,"__esModule",{value:!0});uT.getObjectTypeFromTypeMap=void 0;var Pae=Ae();function wae(e,t){if(t){let n=e[t.name];if((0,Pae.isObjectType)(n))return n}}uT.getObjectTypeFromTypeMap=wae});var OS=w(Ma=>{"use strict";f();N();m();Object.defineProperty(Ma,"__esModule",{value:!0});Ma.getBuiltInForStub=Ma.isNamedStub=Ma.createStub=Ma.createNamedStub=void 0;var pr=Ae();function vS(e,t){let n;return t==="object"?n=pr.GraphQLObjectType:t==="interface"?n=pr.GraphQLInterfaceType:n=pr.GraphQLInputObjectType,new n({name:e,fields:{_fake:{type:pr.GraphQLString}}})}Ma.createNamedStub=vS;function SS(e,t){switch(e.kind){case pr.Kind.LIST_TYPE:return new pr.GraphQLList(SS(e.type,t));case pr.Kind.NON_NULL_TYPE:return new pr.GraphQLNonNull(SS(e.type,t));default:return t==="output"?vS(e.name.value,"object"):vS(e.name.value,"input")}}Ma.createStub=SS;function Lae(e){if("getFields"in e){let t=e.getFields();for(let n in t)return t[n].name==="_fake"}return!1}Ma.isNamedStub=Lae;function Cae(e){switch(e.name){case pr.GraphQLInt.name:return pr.GraphQLInt;case pr.GraphQLFloat.name:return pr.GraphQLFloat;case pr.GraphQLString.name:return pr.GraphQLString;case pr.GraphQLBoolean.name:return pr.GraphQLBoolean;case pr.GraphQLID.name:return pr.GraphQLID;default:return e}}Ma.getBuiltInForStub=Cae});var lT=w(cT=>{"use strict";f();N();m();Object.defineProperty(cT,"__esModule",{value:!0});cT.rewireTypes=void 0;var Yn=Ae(),JM=OS();function Bae(e,t){let n=Object.create(null);for(let g in e)n[g]=e[g];let r=Object.create(null);for(let g in n){let _=n[g];if(_==null||g.startsWith("__"))continue;let F=_.name;if(!F.startsWith("__")){if(r[F]!=null){console.warn(`Duplicate schema type name ${F} found; keeping the existing one found in the schema`);continue}r[F]=_}}for(let g in r)r[g]=c(r[g]);let i=t.map(g=>a(g));return{typeMap:r,directives:i};function a(g){if((0,Yn.isSpecifiedDirective)(g))return g;let _=g.toConfig();return _.args=o(_.args),new Yn.GraphQLDirective(_)}function o(g){let _={};for(let F in g){let U=g[F],K=y(U.type);K!=null&&(U.type=K,_[F]=U)}return _}function c(g){if((0,Yn.isObjectType)(g)){let _=g.toConfig(),F=Q(M({},_),{fields:()=>l(_.fields),interfaces:()=>T(_.interfaces)});return new Yn.GraphQLObjectType(F)}else if((0,Yn.isInterfaceType)(g)){let _=g.toConfig(),F=Q(M({},_),{fields:()=>l(_.fields)});return"interfaces"in F&&(F.interfaces=()=>T(_.interfaces)),new Yn.GraphQLInterfaceType(F)}else if((0,Yn.isUnionType)(g)){let _=g.toConfig(),F=Q(M({},_),{types:()=>T(_.types)});return new Yn.GraphQLUnionType(F)}else if((0,Yn.isInputObjectType)(g)){let _=g.toConfig(),F=Q(M({},_),{fields:()=>p(_.fields)});return new Yn.GraphQLInputObjectType(F)}else if((0,Yn.isEnumType)(g)){let _=g.toConfig();return new Yn.GraphQLEnumType(_)}else if((0,Yn.isScalarType)(g)){if((0,Yn.isSpecifiedScalarType)(g))return g;let _=g.toConfig();return new Yn.GraphQLScalarType(_)}throw new Error(`Unexpected schema type: ${g}`)}function l(g){let _={};for(let F in g){let U=g[F],K=y(U.type);K!=null&&U.args&&(U.type=K,U.args=o(U.args),_[F]=U)}return _}function p(g){let _={};for(let F in g){let U=g[F],K=y(U.type);K!=null&&(U.type=K,_[F]=U)}return _}function T(g){let _=[];for(let F of g){let U=y(F);U!=null&&_.push(U)}return _}function y(g){if((0,Yn.isListType)(g)){let _=y(g.ofType);return _!=null?new Yn.GraphQLList(_):null}else if((0,Yn.isNonNullType)(g)){let _=y(g.ofType);return _!=null?new Yn.GraphQLNonNull(_):null}else if((0,Yn.isNamedType)(g)){let _=n[g.name];return _===void 0&&(_=(0,JM.isNamedStub)(g)?(0,JM.getBuiltInForStub)(g):c(g),r[_.name]=n[g.name]=_),_!=null?r[_.name]:null}return null}}cT.rewireTypes=Bae});var DS=w(xa=>{"use strict";f();N();m();Object.defineProperty(xa,"__esModule",{value:!0});xa.parseInputValueLiteral=xa.parseInputValue=xa.serializeInputValue=xa.transformInputValue=void 0;var dT=Ae(),Uae=cp();function pl(e,t,n=null,r=null){if(t==null)return t;let i=(0,dT.getNullableType)(e);if((0,dT.isLeafType)(i))return n!=null?n(i,t):t;if((0,dT.isListType)(i))return(0,Uae.asArray)(t).map(a=>pl(i.ofType,a,n,r));if((0,dT.isInputObjectType)(i)){let a=i.getFields(),o={};for(let c in t){let l=a[c];l!=null&&(o[c]=pl(l.type,t[c],n,r))}return r!=null?r(i,o):o}}xa.transformInputValue=pl;function kae(e,t){return pl(e,t,(n,r)=>{try{return n.serialize(r)}catch(i){return r}})}xa.serializeInputValue=kae;function Mae(e,t){return pl(e,t,(n,r)=>{try{return n.parseValue(r)}catch(i){return r}})}xa.parseInputValue=Mae;function xae(e,t){return pl(e,t,(n,r)=>n.parseLiteral(r,{}))}xa.parseInputValueLiteral=xae});var Nl=w(ml=>{"use strict";f();N();m();Object.defineProperty(ml,"__esModule",{value:!0});ml.correctASTNodes=ml.mapSchema=void 0;var rt=Ae(),fl=_S(),Dt=Wu(),qae=lT(),HM=DS();function Vae(e,t={}){let n=XM(WM(bS(zM(jae(bS(zM(e.getTypeMap(),e,HM.serializeInputValue),e,t,c=>(0,rt.isLeafType)(c)),e,t),e,HM.parseInputValue),e,t,c=>!(0,rt.isLeafType)(c)),e,t),e,t),r=e.getDirectives(),i=Kae(r,e,t),{typeMap:a,directives:o}=(0,qae.rewireTypes)(n,i);return new rt.GraphQLSchema(Q(M({},e.toConfig()),{query:(0,fl.getObjectTypeFromTypeMap)(a,(0,fl.getObjectTypeFromTypeMap)(n,e.getQueryType())),mutation:(0,fl.getObjectTypeFromTypeMap)(a,(0,fl.getObjectTypeFromTypeMap)(n,e.getMutationType())),subscription:(0,fl.getObjectTypeFromTypeMap)(a,(0,fl.getObjectTypeFromTypeMap)(n,e.getSubscriptionType())),types:Object.values(a),directives:o}))}ml.mapSchema=Vae;function bS(e,t,n,r=()=>!0){let i={};for(let a in e)if(!a.startsWith("__")){let o=e[a];if(o==null||!r(o)){i[a]=o;continue}let c=$ae(t,n,a);if(c==null){i[a]=o;continue}let l=c(o,t);if(l===void 0){i[a]=o;continue}i[a]=l}return i}function jae(e,t,n){let r=zae(n);return r?bS(e,t,{[Dt.MapperKind.ENUM_TYPE]:i=>{let a=i.toConfig(),o=a.values,c={};for(let l in o){let p=o[l],T=r(p,i.name,t,l);if(T===void 0)c[l]=p;else if(Array.isArray(T)){let[y,g]=T;c[y]=g===void 0?p:g}else T!==null&&(c[l]=T)}return yp(new rt.GraphQLEnumType(Q(M({},a),{values:c})))}},i=>(0,rt.isEnumType)(i)):e}function zM(e,t,n){let r=XM(e,t,{[Dt.MapperKind.ARGUMENT]:i=>{if(i.defaultValue===void 0)return i;let a=pT(e,i.type);if(a!=null)return Q(M({},i),{defaultValue:n(a,i.defaultValue)})}});return WM(r,t,{[Dt.MapperKind.INPUT_OBJECT_FIELD]:i=>{if(i.defaultValue===void 0)return i;let a=pT(r,i.type);if(a!=null)return Q(M({},i),{defaultValue:n(a,i.defaultValue)})}})}function pT(e,t){if((0,rt.isListType)(t)){let n=pT(e,t.ofType);return n!=null?new rt.GraphQLList(n):null}else if((0,rt.isNonNullType)(t)){let n=pT(e,t.ofType);return n!=null?new rt.GraphQLNonNull(n):null}else if((0,rt.isNamedType)(t)){let n=e[t.name];return n!=null?n:null}return null}function WM(e,t,n){let r={};for(let i in e)if(!i.startsWith("__")){let a=e[i];if(!(0,rt.isObjectType)(a)&&!(0,rt.isInterfaceType)(a)&&!(0,rt.isInputObjectType)(a)){r[i]=a;continue}let o=Yae(t,n,i);if(o==null){r[i]=a;continue}let c=a.toConfig(),l=c.fields,p={};for(let T in l){let y=l[T],g=o(y,T,i,t);if(g===void 0)p[T]=y;else if(Array.isArray(g)){let[_,F]=g;F.astNode!=null&&(F.astNode=Q(M({},F.astNode),{name:Q(M({},F.astNode.name),{value:_})})),p[_]=F===void 0?y:F}else g!==null&&(p[T]=g)}(0,rt.isObjectType)(a)?r[i]=yp(new rt.GraphQLObjectType(Q(M({},c),{fields:p}))):(0,rt.isInterfaceType)(a)?r[i]=yp(new rt.GraphQLInterfaceType(Q(M({},c),{fields:p}))):r[i]=yp(new rt.GraphQLInputObjectType(Q(M({},c),{fields:p})))}return r}function XM(e,t,n){let r={};for(let i in e)if(!i.startsWith("__")){let a=e[i];if(!(0,rt.isObjectType)(a)&&!(0,rt.isInterfaceType)(a)){r[i]=a;continue}let o=Jae(n);if(o==null){r[i]=a;continue}let c=a.toConfig(),l=c.fields,p={};for(let T in l){let y=l[T],g=y.args;if(g==null){p[T]=y;continue}let _=Object.keys(g);if(!_.length){p[T]=y;continue}let F={};for(let U of _){let K=g[U],J=o(K,T,i,t);if(J===void 0)F[U]=K;else if(Array.isArray(J)){let[ee,W]=J;F[ee]=W}else J!==null&&(F[U]=J)}p[T]=Q(M({},y),{args:F})}(0,rt.isObjectType)(a)?r[i]=new rt.GraphQLObjectType(Q(M({},c),{fields:p})):(0,rt.isInterfaceType)(a)?r[i]=new rt.GraphQLInterfaceType(Q(M({},c),{fields:p})):r[i]=new rt.GraphQLInputObjectType(Q(M({},c),{fields:p}))}return r}function Kae(e,t,n){let r=Hae(n);if(r==null)return e.slice();let i=[];for(let a of e){let o=r(a,t);o===void 0?i.push(a):o!==null&&i.push(o)}return i}function Gae(e,t){var i,a,o;let n=e.getType(t),r=[Dt.MapperKind.TYPE];return(0,rt.isObjectType)(n)?(r.push(Dt.MapperKind.COMPOSITE_TYPE,Dt.MapperKind.OBJECT_TYPE),t===((i=e.getQueryType())==null?void 0:i.name)?r.push(Dt.MapperKind.ROOT_OBJECT,Dt.MapperKind.QUERY):t===((a=e.getMutationType())==null?void 0:a.name)?r.push(Dt.MapperKind.ROOT_OBJECT,Dt.MapperKind.MUTATION):t===((o=e.getSubscriptionType())==null?void 0:o.name)&&r.push(Dt.MapperKind.ROOT_OBJECT,Dt.MapperKind.SUBSCRIPTION)):(0,rt.isInputObjectType)(n)?r.push(Dt.MapperKind.INPUT_OBJECT_TYPE):(0,rt.isInterfaceType)(n)?r.push(Dt.MapperKind.COMPOSITE_TYPE,Dt.MapperKind.ABSTRACT_TYPE,Dt.MapperKind.INTERFACE_TYPE):(0,rt.isUnionType)(n)?r.push(Dt.MapperKind.COMPOSITE_TYPE,Dt.MapperKind.ABSTRACT_TYPE,Dt.MapperKind.UNION_TYPE):(0,rt.isEnumType)(n)?r.push(Dt.MapperKind.ENUM_TYPE):(0,rt.isScalarType)(n)&&r.push(Dt.MapperKind.SCALAR_TYPE),r}function $ae(e,t,n){let r=Gae(e,n),i,a=[...r];for(;!i&&a.length>0;){let o=a.pop();i=t[o]}return i!=null?i:null}function Qae(e,t){var i,a,o;let n=e.getType(t),r=[Dt.MapperKind.FIELD];return(0,rt.isObjectType)(n)?(r.push(Dt.MapperKind.COMPOSITE_FIELD,Dt.MapperKind.OBJECT_FIELD),t===((i=e.getQueryType())==null?void 0:i.name)?r.push(Dt.MapperKind.ROOT_FIELD,Dt.MapperKind.QUERY_ROOT_FIELD):t===((a=e.getMutationType())==null?void 0:a.name)?r.push(Dt.MapperKind.ROOT_FIELD,Dt.MapperKind.MUTATION_ROOT_FIELD):t===((o=e.getSubscriptionType())==null?void 0:o.name)&&r.push(Dt.MapperKind.ROOT_FIELD,Dt.MapperKind.SUBSCRIPTION_ROOT_FIELD)):(0,rt.isInterfaceType)(n)?r.push(Dt.MapperKind.COMPOSITE_FIELD,Dt.MapperKind.INTERFACE_FIELD):(0,rt.isInputObjectType)(n)&&r.push(Dt.MapperKind.INPUT_OBJECT_FIELD),r}function Yae(e,t,n){let r=Qae(e,n),i,a=[...r];for(;!i&&a.length>0;){let o=a.pop();i=t[o]}return i!=null?i:null}function Jae(e){let t=e[Dt.MapperKind.ARGUMENT];return t!=null?t:null}function Hae(e){let t=e[Dt.MapperKind.DIRECTIVE];return t!=null?t:null}function zae(e){let t=e[Dt.MapperKind.ENUM_VALUE];return t!=null?t:null}function yp(e){if((0,rt.isObjectType)(e)){let t=e.toConfig();if(t.astNode!=null){let n=[];for(let r in t.fields){let i=t.fields[r];i.astNode!=null&&n.push(i.astNode)}t.astNode=Q(M({},t.astNode),{kind:rt.Kind.OBJECT_TYPE_DEFINITION,fields:n})}return t.extensionASTNodes!=null&&(t.extensionASTNodes=t.extensionASTNodes.map(n=>Q(M({},n),{kind:rt.Kind.OBJECT_TYPE_EXTENSION,fields:void 0}))),new rt.GraphQLObjectType(t)}else if((0,rt.isInterfaceType)(e)){let t=e.toConfig();if(t.astNode!=null){let n=[];for(let r in t.fields){let i=t.fields[r];i.astNode!=null&&n.push(i.astNode)}t.astNode=Q(M({},t.astNode),{kind:rt.Kind.INTERFACE_TYPE_DEFINITION,fields:n})}return t.extensionASTNodes!=null&&(t.extensionASTNodes=t.extensionASTNodes.map(n=>Q(M({},n),{kind:rt.Kind.INTERFACE_TYPE_EXTENSION,fields:void 0}))),new rt.GraphQLInterfaceType(t)}else if((0,rt.isInputObjectType)(e)){let t=e.toConfig();if(t.astNode!=null){let n=[];for(let r in t.fields){let i=t.fields[r];i.astNode!=null&&n.push(i.astNode)}t.astNode=Q(M({},t.astNode),{kind:rt.Kind.INPUT_OBJECT_TYPE_DEFINITION,fields:n})}return t.extensionASTNodes!=null&&(t.extensionASTNodes=t.extensionASTNodes.map(n=>Q(M({},n),{kind:rt.Kind.INPUT_OBJECT_TYPE_EXTENSION,fields:void 0}))),new rt.GraphQLInputObjectType(t)}else if((0,rt.isEnumType)(e)){let t=e.toConfig();if(t.astNode!=null){let n=[];for(let r in t.values){let i=t.values[r];i.astNode!=null&&n.push(i.astNode)}t.astNode=Q(M({},t.astNode),{values:n})}return t.extensionASTNodes!=null&&(t.extensionASTNodes=t.extensionASTNodes.map(n=>Q(M({},n),{values:void 0}))),new rt.GraphQLEnumType(t)}else return e}ml.correctASTNodes=yp});var ZM=w(mT=>{"use strict";f();N();m();Object.defineProperty(mT,"__esModule",{value:!0});mT.filterSchema=void 0;var fT=Ae(),Is=Wu(),Wae=Nl();function Xae({schema:e,typeFilter:t=()=>!0,fieldFilter:n=void 0,rootFieldFilter:r=void 0,objectFieldFilter:i=void 0,interfaceFieldFilter:a=void 0,inputObjectFieldFilter:o=void 0,argumentFilter:c=void 0}){return(0,Wae.mapSchema)(e,{[Is.MapperKind.QUERY]:p=>AS(p,"Query",r,c),[Is.MapperKind.MUTATION]:p=>AS(p,"Mutation",r,c),[Is.MapperKind.SUBSCRIPTION]:p=>AS(p,"Subscription",r,c),[Is.MapperKind.OBJECT_TYPE]:p=>t(p.name,p)?RS(fT.GraphQLObjectType,p,i||n,c):null,[Is.MapperKind.INTERFACE_TYPE]:p=>t(p.name,p)?RS(fT.GraphQLInterfaceType,p,a||n,c):null,[Is.MapperKind.INPUT_OBJECT_TYPE]:p=>t(p.name,p)?RS(fT.GraphQLInputObjectType,p,o||n):null,[Is.MapperKind.UNION_TYPE]:p=>t(p.name,p)?void 0:null,[Is.MapperKind.ENUM_TYPE]:p=>t(p.name,p)?void 0:null,[Is.MapperKind.SCALAR_TYPE]:p=>t(p.name,p)?void 0:null})}mT.filterSchema=Xae;function AS(e,t,n,r){if(n||r){let i=e.toConfig();for(let a in i.fields){let o=i.fields[a];if(n&&!n(t,a,i.fields[a]))delete i.fields[a];else if(r&&o.args)for(let c in o.args)r(t,a,c,o.args[c])||delete o.args[c]}return new fT.GraphQLObjectType(i)}return e}function RS(e,t,n,r){if(n||r){let i=t.toConfig();for(let a in i.fields){let o=i.fields[a];if(n&&!n(t.name,a,i.fields[a]))delete i.fields[a];else if(r&&"args"in o)for(let c in o.args)r(t.name,a,c,o.args[c])||delete o.args[c]}return new e(i)}}});var tx=w(Tl=>{"use strict";f();N();m();Object.defineProperty(Tl,"__esModule",{value:!0});Tl.healTypes=Tl.healSchema=void 0;var qa=Ae();function Zae(e){return ex(e.getTypeMap(),e.getDirectives()),e}Tl.healSchema=Zae;function ex(e,t){let n=Object.create(null);for(let p in e){let T=e[p];if(T==null||p.startsWith("__"))continue;let y=T.name;if(!y.startsWith("__")){if(n[y]!=null){console.warn(`Duplicate schema type name ${y} found; keeping the existing one found in the schema`);continue}n[y]=T}}for(let p in n){let T=n[p];e[p]=T}for(let p of t)p.args=p.args.filter(T=>(T.type=l(T.type),T.type!==null));for(let p in e){let T=e[p];!p.startsWith("__")&&p in n&&T!=null&&r(T)}for(let p in e)!p.startsWith("__")&&!(p in n)&&delete e[p];function r(p){if((0,qa.isObjectType)(p)){i(p),a(p);return}else if((0,qa.isInterfaceType)(p)){i(p),"getInterfaces"in p&&a(p);return}else if((0,qa.isUnionType)(p)){c(p);return}else if((0,qa.isInputObjectType)(p)){o(p);return}else if((0,qa.isLeafType)(p))return;throw new Error(`Unexpected schema type: ${p}`)}function i(p){let T=p.getFields();for(let[y,g]of Object.entries(T))g.args.map(_=>(_.type=l(_.type),_.type===null?null:_)).filter(Boolean),g.type=l(g.type),g.type===null&&delete T[y]}function a(p){if("getInterfaces"in p){let T=p.getInterfaces();T.push(...T.splice(0).map(y=>l(y)).filter(Boolean))}}function o(p){let T=p.getFields();for(let[y,g]of Object.entries(T))g.type=l(g.type),g.type===null&&delete T[y]}function c(p){let T=p.getTypes();T.push(...T.splice(0).map(y=>l(y)).filter(Boolean))}function l(p){if((0,qa.isListType)(p)){let T=l(p.ofType);return T!=null?new qa.GraphQLList(T):null}else if((0,qa.isNonNullType)(p)){let T=l(p.ofType);return T!=null?new qa.GraphQLNonNull(T):null}else if((0,qa.isNamedType)(p)){let T=e[p.name];if(T&&p!==T)return T}return p}}Tl.healTypes=ex});var nx=w(NT=>{"use strict";f();N();m();Object.defineProperty(NT,"__esModule",{value:!0});NT.getResolversFromSchema=void 0;var Xu=Ae();function ese(e,t){var i,a;let n=Object.create(null),r=e.getTypeMap();for(let o in r)if(!o.startsWith("__")){let c=r[o];if((0,Xu.isScalarType)(c)){if(!(0,Xu.isSpecifiedScalarType)(c)){let l=c.toConfig();delete l.astNode,n[o]=new Xu.GraphQLScalarType(l)}}else if((0,Xu.isEnumType)(c)){n[o]={};let l=c.getValues();for(let p of l)n[o][p.name]=p.value}else if((0,Xu.isInterfaceType)(c))c.resolveType!=null&&(n[o]={__resolveType:c.resolveType});else if((0,Xu.isUnionType)(c))c.resolveType!=null&&(n[o]={__resolveType:c.resolveType});else if((0,Xu.isObjectType)(c)){n[o]={},c.isTypeOf!=null&&(n[o].__isTypeOf=c.isTypeOf);let l=c.getFields();for(let p in l){let T=l[p];if(T.subscribe!=null&&(n[o][p]=n[o][p]||{},n[o][p].subscribe=T.subscribe),T.resolve!=null&&((i=T.resolve)==null?void 0:i.name)!=="defaultFieldResolver"){switch((a=T.resolve)==null?void 0:a.name){case"defaultMergedResolver":if(!t)continue;break;case"defaultFieldResolver":continue}n[o][p]=n[o][p]||{},n[o][p].resolve=T.resolve}}}}return n}NT.getResolversFromSchema=ese});var ix=w(TT=>{"use strict";f();N();m();Object.defineProperty(TT,"__esModule",{value:!0});TT.forEachField=void 0;var rx=Ae();function tse(e,t){let n=e.getTypeMap();for(let r in n){let i=n[r];if(!(0,rx.getNamedType)(i).name.startsWith("__")&&(0,rx.isObjectType)(i)){let a=i.getFields();for(let o in a){let c=a[o];t(c,r,o)}}}}TT.forEachField=tse});var ax=w(ET=>{"use strict";f();N();m();Object.defineProperty(ET,"__esModule",{value:!0});ET.forEachDefaultValue=void 0;var FS=Ae();function nse(e,t){let n=e.getTypeMap();for(let r in n){let i=n[r];if(!(0,FS.getNamedType)(i).name.startsWith("__")){if((0,FS.isObjectType)(i)){let a=i.getFields();for(let o in a){let c=a[o];for(let l of c.args)l.defaultValue=t(l.type,l.defaultValue)}}else if((0,FS.isInputObjectType)(i)){let a=i.getFields();for(let o in a){let c=a[o];c.defaultValue=t(c.type,c.defaultValue)}}}}}ET.forEachDefaultValue=nse});var LS=w(hT=>{"use strict";f();N();m();Object.defineProperty(hT,"__esModule",{value:!0});hT.addTypes=void 0;var PS=Ae(),wS=_S(),rse=lT();function ise(e,t){let n=e.toConfig(),r={};for(let c of n.types)r[c.name]=c;let i={};for(let c of n.directives)i[c.name]=c;for(let c of t)(0,PS.isNamedType)(c)?r[c.name]=c:(0,PS.isDirective)(c)&&(i[c.name]=c);let{typeMap:a,directives:o}=(0,rse.rewireTypes)(r,Object.values(i));return new PS.GraphQLSchema(Q(M({},n),{query:(0,wS.getObjectTypeFromTypeMap)(a,e.getQueryType()),mutation:(0,wS.getObjectTypeFromTypeMap)(a,e.getMutationType()),subscription:(0,wS.getObjectTypeFromTypeMap)(a,e.getSubscriptionType()),types:Object.values(a),directives:o}))}hT.addTypes=ise});var ox=w(IT=>{"use strict";f();N();m();Object.defineProperty(IT,"__esModule",{value:!0});IT.pruneSchema=void 0;var tr=Ae(),ase=oS(),sse=Wu(),ose=Nl(),use=fp();function cse(e,t={}){let{skipEmptyCompositeTypePruning:n,skipEmptyUnionPruning:r,skipPruning:i,skipUnimplementedInterfacesPruning:a,skipUnusedTypesPruning:o}=t,c=[],l=e;do{let p=lse(l);if(i){let T=[];for(let y in l.getTypeMap()){if(y.startsWith("__"))continue;let g=l.getType(y);g&&i(g)&&T.push(y)}p=sx(T,l,p)}c=[],l=(0,ose.mapSchema)(l,{[sse.MapperKind.TYPE]:T=>!p.has(T.name)&&!(0,tr.isSpecifiedScalarType)(T)?((0,tr.isUnionType)(T)||(0,tr.isInputObjectType)(T)||(0,tr.isInterfaceType)(T)||(0,tr.isObjectType)(T)||(0,tr.isScalarType)(T))&&(o||(0,tr.isUnionType)(T)&&r&&!Object.keys(T.getTypes()).length||((0,tr.isInputObjectType)(T)||(0,tr.isInterfaceType)(T)||(0,tr.isObjectType)(T))&&n&&!Object.keys(T.getFields()).length||(0,tr.isInterfaceType)(T)&&a)?T:(c.push(T.name),p.delete(T.name),null):T})}while(c.length);return l}IT.pruneSchema=cse;function lse(e){let t=[];for(let n of(0,use.getRootTypes)(e))t.push(n.name);return sx(t,e)}function sx(e,t,n=new Set){let r=new Map;for(;e.length;){let i=e.pop();if(n.has(i)&&r[i]!==!0)continue;let a=t.getType(i);if(a){if((0,tr.isUnionType)(a)&&e.push(...a.getTypes().map(o=>o.name)),(0,tr.isInterfaceType)(a)&&r[i]===!0&&(e.push(...(0,ase.getImplementingTypes)(a.name,t)),r[i]=!1),(0,tr.isEnumType)(a)&&e.push(...a.getValues().flatMap(o=>o.astNode?yT(t,o.astNode):[])),"getInterfaces"in a&&e.push(...a.getInterfaces().map(o=>o.name)),"getFields"in a){let o=a.getFields(),c=Object.entries(o);if(!c.length)continue;for(let[,l]of c){(0,tr.isObjectType)(a)&&e.push(...l.args.flatMap(T=>{let y=[(0,tr.getNamedType)(T.type).name];return T.astNode&&y.push(...yT(t,T.astNode)),y}));let p=(0,tr.getNamedType)(l.type);e.push(p.name),l.astNode&&e.push(...yT(t,l.astNode)),(0,tr.isInterfaceType)(p)&&!(p.name in r)&&(r[p.name]=!0)}}a.astNode&&e.push(...yT(t,a.astNode)),n.add(i)}}return n}function yT(e,t){var n;return((n=t.directives)!=null?n:[]).flatMap(r=>{var i,a;return(a=(i=e.getDirective(r.name.value))==null?void 0:i.args.map(o=>(0,tr.getNamedType)(o.type).name))!=null?a:[]})}});var cx=w(gT=>{"use strict";f();N();m();Object.defineProperty(gT,"__esModule",{value:!0});gT.mergeDeep=void 0;var dse=cp();function ux(e,t=!1,n=!1){let r=e[0]||{},i={};t&&Object.setPrototypeOf(i,Object.create(Object.getPrototypeOf(r)));for(let a of e)if(CS(r)&&CS(a)){if(t){let o=Object.getPrototypeOf(i),c=Object.getPrototypeOf(a);if(c)for(let l of Object.getOwnPropertyNames(c)){let p=Object.getOwnPropertyDescriptor(c,l);(0,dse.isSome)(p)&&Object.defineProperty(o,l,p)}}for(let o in a)CS(a[o])?o in i?i[o]=ux([i[o],a[o]],t,n):Object.assign(i,{[o]:a[o]}):n&&Array.isArray(i[o])?Array.isArray(a[o])?i[o].push(...a[o]):i[o].push(a[o]):Object.assign(i,{[o]:a[o]})}else if(n&&Array.isArray(r))Array.isArray(a)?r.push(...a):r.push(a);else if(n&&Array.isArray(a))return[r,...a];return i}gT.mergeDeep=ux;function CS(e){return e&&typeof e=="object"&&!Array.isArray(e)}});var lx=w(_T=>{"use strict";f();N();m();Object.defineProperty(_T,"__esModule",{value:!0});_T.parseSelectionSet=void 0;var pse=Ae();function fse(e,t){return(0,pse.parse)(e,t).definitions[0].selectionSet}_T.parseSelectionSet=fse});var dx=w(vT=>{"use strict";f();N();m();Object.defineProperty(vT,"__esModule",{value:!0});vT.getResponseKeyFromInfo=void 0;function mse(e){return e.fieldNodes[0].alias!=null?e.fieldNodes[0].alias.value:e.fieldName}vT.getResponseKeyFromInfo=mse});var px=w(Va=>{"use strict";f();N();m();Object.defineProperty(Va,"__esModule",{value:!0});Va.modifyObjectFields=Va.selectObjectFields=Va.removeObjectFields=Va.appendObjectFields=void 0;var ST=Ae(),Nse=LS(),OT=Wu(),Zu=Nl();function Tse(e,t,n){return e.getType(t)==null?(0,Nse.addTypes)(e,[new ST.GraphQLObjectType({name:t,fields:n})]):(0,Zu.mapSchema)(e,{[OT.MapperKind.OBJECT_TYPE]:r=>{if(r.name===t){let i=r.toConfig(),a=i.fields,o={};for(let c in a)o[c]=a[c];for(let c in n)o[c]=n[c];return(0,Zu.correctASTNodes)(new ST.GraphQLObjectType(Q(M({},i),{fields:o})))}}})}Va.appendObjectFields=Tse;function Ese(e,t,n){let r={};return[(0,Zu.mapSchema)(e,{[OT.MapperKind.OBJECT_TYPE]:a=>{if(a.name===t){let o=a.toConfig(),c=o.fields,l={};for(let p in c){let T=c[p];n(p,T)?r[p]=T:l[p]=T}return(0,Zu.correctASTNodes)(new ST.GraphQLObjectType(Q(M({},o),{fields:l})))}}}),r]}Va.removeObjectFields=Ese;function hse(e,t,n){let r={};return(0,Zu.mapSchema)(e,{[OT.MapperKind.OBJECT_TYPE]:i=>{if(i.name===t){let o=i.toConfig().fields;for(let c in o){let l=o[c];n(c,l)&&(r[c]=l)}}}}),r}Va.selectObjectFields=hse;function yse(e,t,n,r){let i={};return[(0,Zu.mapSchema)(e,{[OT.MapperKind.OBJECT_TYPE]:o=>{if(o.name===t){let c=o.toConfig(),l=c.fields,p={};for(let T in l){let y=l[T];n(T,y)?i[T]=y:p[T]=y}for(let T in r){let y=r[T];p[T]=y}return(0,Zu.correctASTNodes)(new ST.GraphQLObjectType(Q(M({},c),{fields:p})))}}}),i]}Va.modifyObjectFields=yse});var fx=w(DT=>{"use strict";f();N();m();Object.defineProperty(DT,"__esModule",{value:!0});DT.renameType=void 0;var Vi=Ae();function Ise(e,t){if((0,Vi.isObjectType)(e))return new Vi.GraphQLObjectType(Q(M({},e.toConfig()),{name:t,astNode:e.astNode==null?e.astNode:Q(M({},e.astNode),{name:Q(M({},e.astNode.name),{value:t})}),extensionASTNodes:e.extensionASTNodes==null?e.extensionASTNodes:e.extensionASTNodes.map(n=>Q(M({},n),{name:Q(M({},n.name),{value:t})}))}));if((0,Vi.isInterfaceType)(e))return new Vi.GraphQLInterfaceType(Q(M({},e.toConfig()),{name:t,astNode:e.astNode==null?e.astNode:Q(M({},e.astNode),{name:Q(M({},e.astNode.name),{value:t})}),extensionASTNodes:e.extensionASTNodes==null?e.extensionASTNodes:e.extensionASTNodes.map(n=>Q(M({},n),{name:Q(M({},n.name),{value:t})}))}));if((0,Vi.isUnionType)(e))return new Vi.GraphQLUnionType(Q(M({},e.toConfig()),{name:t,astNode:e.astNode==null?e.astNode:Q(M({},e.astNode),{name:Q(M({},e.astNode.name),{value:t})}),extensionASTNodes:e.extensionASTNodes==null?e.extensionASTNodes:e.extensionASTNodes.map(n=>Q(M({},n),{name:Q(M({},n.name),{value:t})}))}));if((0,Vi.isInputObjectType)(e))return new Vi.GraphQLInputObjectType(Q(M({},e.toConfig()),{name:t,astNode:e.astNode==null?e.astNode:Q(M({},e.astNode),{name:Q(M({},e.astNode.name),{value:t})}),extensionASTNodes:e.extensionASTNodes==null?e.extensionASTNodes:e.extensionASTNodes.map(n=>Q(M({},n),{name:Q(M({},n.name),{value:t})}))}));if((0,Vi.isEnumType)(e))return new Vi.GraphQLEnumType(Q(M({},e.toConfig()),{name:t,astNode:e.astNode==null?e.astNode:Q(M({},e.astNode),{name:Q(M({},e.astNode.name),{value:t})}),extensionASTNodes:e.extensionASTNodes==null?e.extensionASTNodes:e.extensionASTNodes.map(n=>Q(M({},n),{name:Q(M({},n.name),{value:t})}))}));if((0,Vi.isScalarType)(e))return new Vi.GraphQLScalarType(Q(M({},e.toConfig()),{name:t,astNode:e.astNode==null?e.astNode:Q(M({},e.astNode),{name:Q(M({},e.astNode.name),{value:t})}),extensionASTNodes:e.extensionASTNodes==null?e.extensionASTNodes:e.extensionASTNodes.map(n=>Q(M({},n),{name:Q(M({},n.name),{value:t})}))}));throw new Error(`Unknown type ${e}.`)}DT.renameType=Ise});var Tx=w(bT=>{"use strict";f();N();m();Object.defineProperty(bT,"__esModule",{value:!0});bT.mapAsyncIterator=void 0;var gse=dp();function _se(e,t,n,r){let i,a,o;r&&(o=p=>{let T=r();return(0,gse.isPromise)(T)?T.then(()=>p):p}),typeof e.return=="function"&&(i=e.return,a=p=>{let T=()=>Promise.reject(p);return i.call(e).then(T,T)});function c(p){return p.done?o?o(p):p:mx(p.value,t).then(Nx,a)}let l;if(n){let p=n;l=T=>mx(T,p).then(Nx,a)}return{next(){return e.next().then(c,l)},return(){let p=i?i.call(e).then(c,l):Promise.resolve({value:void 0,done:!0});return o?p.then(o):p},throw(p){return typeof e.throw=="function"?e.throw(p).then(c,l):Promise.reject(p).catch(a)},[Symbol.asyncIterator](){return this}}}bT.mapAsyncIterator=_se;function mx(e,t){return new Promise(n=>n(t(e)))}function Nx(e){return{value:e,done:!1}}});var Ex=w(El=>{"use strict";f();N();m();Object.defineProperty(El,"__esModule",{value:!0});El.createVariableNameGenerator=El.updateArgument=void 0;var ec=Ae(),vse=cS();function Sse(e,t,n,r,i,a,o){if(e[r]={kind:ec.Kind.ARGUMENT,name:{kind:ec.Kind.NAME,value:r},value:{kind:ec.Kind.VARIABLE,name:{kind:ec.Kind.NAME,value:i}}},t[i]={kind:ec.Kind.VARIABLE_DEFINITION,variable:{kind:ec.Kind.VARIABLE,name:{kind:ec.Kind.NAME,value:i}},type:(0,vse.astFromType)(a)},o!==void 0){n[i]=o;return}i in n&&delete n[i]}El.updateArgument=Sse;function Ose(e){let t=0;return n=>{let r;do r=`_v${(t++).toString()}_${n}`;while(r in e);return r}}El.createVariableNameGenerator=Ose});var hx=w(AT=>{"use strict";f();N();m();Object.defineProperty(AT,"__esModule",{value:!0});AT.implementsAbstractType=void 0;var BS=Ae();function Dse(e,t,n){return n==null||t==null?!1:t===n?!0:(0,BS.isCompositeType)(t)&&(0,BS.isCompositeType)(n)?(0,BS.doTypesOverlap)(e,t,n):!1}AT.implementsAbstractType=Dse});var yx=w(RT=>{"use strict";f();N();m();Object.defineProperty(RT,"__esModule",{value:!0});RT.observableToAsyncIterable=void 0;function bse(e){let t=[],n=[],r=!0,i=T=>{t.length!==0?t.shift()({value:T,done:!1}):n.push({value:T,done:!1})},a=T=>{t.length!==0?t.shift()({value:{errors:[T]},done:!1}):n.push({value:{errors:[T]},done:!1})},o=()=>{t.length!==0?t.shift()({done:!0}):n.push({done:!0})},c=()=>new Promise(T=>{if(n.length!==0){let y=n.shift();T(y)}else t.push(T)}),l=e.subscribe({next(T){i(T)},error(T){a(T)},complete(){o()}}),p=()=>{if(r){r=!1,l.unsubscribe();for(let T of t)T({value:void 0,done:!0});t.length=0,n.length=0}};return{next(){return r?c():this.return()},return(){return p(),Promise.resolve({value:void 0,done:!0})},throw(T){return p(),Promise.reject(T)},[Symbol.asyncIterator](){return this}}}RT.observableToAsyncIterable=bse});var Ix=w(FT=>{"use strict";f();N();m();Object.defineProperty(FT,"__esModule",{value:!0});FT.AccumulatorMap=void 0;var US=class extends Map{get[Symbol.toStringTag](){return"AccumulatorMap"}add(t,n){let r=this.get(t);r===void 0?this.set(t,[n]):r.push(n)}};FT.AccumulatorMap=US});var kS=w(hl=>{"use strict";f();N();m();Object.defineProperty(hl,"__esModule",{value:!0});hl.GraphQLStreamDirective=hl.GraphQLDeferDirective=void 0;var ji=Ae();hl.GraphQLDeferDirective=new ji.GraphQLDirective({name:"defer",description:"Directs the executor to defer this fragment when the `if` argument is true or undefined.",locations:[ji.DirectiveLocation.FRAGMENT_SPREAD,ji.DirectiveLocation.INLINE_FRAGMENT],args:{if:{type:new ji.GraphQLNonNull(ji.GraphQLBoolean),description:"Deferred when true or undefined.",defaultValue:!0},label:{type:ji.GraphQLString,description:"Unique name"}}});hl.GraphQLStreamDirective=new ji.GraphQLDirective({name:"stream",description:"Directs the executor to stream plural fields when the `if` argument is true or undefined.",locations:[ji.DirectiveLocation.FIELD],args:{if:{type:new ji.GraphQLNonNull(ji.GraphQLBoolean),description:"Stream when true or undefined.",defaultValue:!0},label:{type:ji.GraphQLString,description:"Unique name"},initialCount:{defaultValue:0,type:ji.GraphQLInt,description:"Number of items to return immediately"}}})});var qS=w(Xr=>{"use strict";f();N();m();Object.defineProperty(Xr,"__esModule",{value:!0});Xr.collectSubFields=Xr.getDeferValues=Xr.getFieldEntryKey=Xr.doesFragmentConditionMatch=Xr.shouldIncludeNode=Xr.collectFields=void 0;var ja=Ae(),wT=Ix(),Ase=kS(),Rse=cl();function yl(e,t,n,r,i,a,o,c){for(let l of i.selections)switch(l.kind){case ja.Kind.FIELD:{if(!PT(n,l))continue;a.add(gx(l),l);break}case ja.Kind.INLINE_FRAGMENT:{if(!PT(n,l)||!MS(e,l,r))continue;let p=xS(n,l);if(p){let T=new wT.AccumulatorMap;yl(e,t,n,r,l.selectionSet,T,o,c),o.push({label:p.label,fields:T})}else yl(e,t,n,r,l.selectionSet,a,o,c);break}case ja.Kind.FRAGMENT_SPREAD:{let p=l.name.value;if(!PT(n,l))continue;let T=xS(n,l);if(c.has(p)&&!T)continue;let y=t[p];if(!y||!MS(e,y,r))continue;if(T||c.add(p),T){let g=new wT.AccumulatorMap;yl(e,t,n,r,y.selectionSet,g,o,c),o.push({label:T.label,fields:g})}else yl(e,t,n,r,y.selectionSet,a,o,c);break}}}function Fse(e,t,n,r,i){let a=new wT.AccumulatorMap,o=[];return yl(e,t,n,r,i,a,o,new Set),{fields:a,patches:o}}Xr.collectFields=Fse;function PT(e,t){let n=(0,ja.getDirectiveValues)(ja.GraphQLSkipDirective,t,e);if((n==null?void 0:n.if)===!0)return!1;let r=(0,ja.getDirectiveValues)(ja.GraphQLIncludeDirective,t,e);return(r==null?void 0:r.if)!==!1}Xr.shouldIncludeNode=PT;function MS(e,t,n){let r=t.typeCondition;if(!r)return!0;let i=(0,ja.typeFromAST)(e,r);return i===n?!0:(0,ja.isAbstractType)(i)?e.getPossibleTypes(i).includes(n):!1}Xr.doesFragmentConditionMatch=MS;function gx(e){return e.alias?e.alias.value:e.name.value}Xr.getFieldEntryKey=gx;function xS(e,t){let n=(0,ja.getDirectiveValues)(Ase.GraphQLDeferDirective,t,e);if(n&&n.if!==!1)return{label:typeof n.label=="string"?n.label:void 0}}Xr.getDeferValues=xS;Xr.collectSubFields=(0,Rse.memoize5)(function(t,n,r,i,a){let o=new wT.AccumulatorMap,c=new Set,l=[],p={fields:o,patches:l};for(let T of a)T.selectionSet&&yl(t,n,r,i,T.selectionSet,o,l,c);return p})});var VS=w(Il=>{"use strict";f();N();m();Object.defineProperty(Il,"__esModule",{value:!0});Il.getOperationASTFromRequest=Il.getOperationASTFromDocument=void 0;var Pse=Ae(),wse=cl();function _x(e,t){let n=(0,Pse.getOperationAST)(e,t);if(!n)throw new Error(`Cannot infer operation ${t||""}`);return n}Il.getOperationASTFromDocument=_x;Il.getOperationASTFromRequest=(0,wse.memoize1)(function(t){return _x(t.document,t.operationName)})});var Ox=w(Zo=>{"use strict";f();N();m();Object.defineProperty(Zo,"__esModule",{value:!0});Zo.visitResult=Zo.visitErrors=Zo.visitData=void 0;var Xo=Ae(),jS=qS(),Lse=VS();function KS(e,t,n){if(Array.isArray(e))return e.map(r=>KS(r,t,n));if(typeof e=="object"){let r=t!=null?t(e):e;if(r!=null)for(let i in r){let a=r[i];Object.defineProperty(r,i,{value:KS(a,t,n)})}return n!=null?n(r):r}return e}Zo.visitData=KS;function Cse(e,t){return e.map(n=>t(n))}Zo.visitErrors=Cse;function Bse(e,t,n,r,i){let a=t.document.definitions.reduce((g,_)=>(_.kind===Xo.Kind.FRAGMENT_DEFINITION&&(g[_.name.value]=_),g),{}),o=t.variables||{},c={segmentInfoMap:new Map,unpathedErrors:new Set},l=e.data,p=e.errors,T=p!=null&&i!=null,y=(0,Lse.getOperationASTFromRequest)(t);return l!=null&&y!=null&&(e.data=Mse(l,y,n,a,o,r,T?p:void 0,c)),p!=null&&i&&(e.errors=Use(p,i,c)),e}Zo.visitResult=Bse;function Use(e,t,n){let r=n.segmentInfoMap,i=n.unpathedErrors,a=t.__unpathed;return e.map(o=>{let c=r.get(o),l=c==null?o:c.reduceRight((p,T)=>{let y=T.type.name,g=t[y];if(g==null)return p;let _=g[T.fieldName];return _==null?p:_(p,T.pathIndex)},o);return a&&i.has(o)?a(l):l})}function kse(e,t){switch(t.operation){case"query":return e.getQueryType();case"mutation":return e.getMutationType();case"subscription":return e.getSubscriptionType()}}function Mse(e,t,n,r,i,a,o,c){let l=kse(n,t),{fields:p}=(0,jS.collectFields)(n,r,i,l,t.selectionSet);return GS(e,l,p,n,r,i,a,0,o,c)}function GS(e,t,n,r,i,a,o,c,l,p){var ee;let T=t.getFields(),y=o==null?void 0:o[t.name],g=y==null?void 0:y.__enter,_=g!=null?g(e):e,F,U=null;if(l!=null){F=qse(l,c),U=F.errorMap;for(let W of F.unpathedErrors)p.unpathedErrors.add(W)}for(let[W,Te]of n){let de=Te[0].name.value,we=(ee=T[de])==null?void 0:ee.type;if(we==null)switch(de){case"__typename":we=Xo.TypeNameMetaFieldDef.type;break;case"__schema":we=Xo.SchemaMetaFieldDef.type;break;case"__type":we=Xo.TypeMetaFieldDef.type;break}let qe=c+1,et;U&&(et=U[W],et!=null&&delete U[W],Vse(t,de,qe,et,p));let X=Sx(e[W],we,Te,r,i,a,o,qe,et,p);vx(_,W,X,y,de)}let K=_.__typename;if(K!=null&&vx(_,"__typename",K,y,"__typename"),U)for(let W in U){let Te=U[W];for(let de of Te)p.unpathedErrors.add(de)}let J=y==null?void 0:y.__leave;return J!=null?J(_):_}function vx(e,t,n,r,i){if(r==null){e[t]=n;return}let a=r[i];if(a==null){e[t]=n;return}let o=a(n);if(o===void 0){delete e[t];return}e[t]=o}function xse(e,t,n,r,i,a,o,c,l,p){return e.map(T=>Sx(T,t,n,r,i,a,o,c+1,l,p))}function Sx(e,t,n,r,i,a,o,c,l=[],p){if(e==null)return e;let T=(0,Xo.getNullableType)(t);if((0,Xo.isListType)(T))return xse(e,T.ofType,n,r,i,a,o,c,l,p);if((0,Xo.isAbstractType)(T)){let _=r.getType(e.__typename),{fields:F}=(0,jS.collectSubFields)(r,i,a,_,n);return GS(e,_,F,r,i,a,o,c,l,p)}else if((0,Xo.isObjectType)(T)){let{fields:_}=(0,jS.collectSubFields)(r,i,a,T,n);return GS(e,T,_,r,i,a,o,c,l,p)}let y=o==null?void 0:o[T.name];if(y==null)return e;let g=y(e);return g===void 0?e:g}function qse(e,t){var i;let n=Object.create(null),r=new Set;for(let a of e){let o=(i=a.path)==null?void 0:i[t];if(o==null){r.add(a);continue}o in n?n[o].push(a):n[o]=[a]}return{errorMap:n,unpathedErrors:r}}function Vse(e,t,n,r=[],i){for(let a of r){let o={type:e,fieldName:t,pathIndex:n},c=i.segmentInfoMap.get(a);c==null?i.segmentInfoMap.set(a,[o]):c.push(o)}}});var Dx=w(LT=>{"use strict";f();N();m();Object.defineProperty(LT,"__esModule",{value:!0});LT.valueMatchesCriteria=void 0;function $S(e,t){return e==null?e===t:Array.isArray(e)?Array.isArray(t)&&e.every((n,r)=>$S(n,t[r])):typeof e=="object"?typeof t=="object"&&t&&Object.keys(t).every(n=>$S(e[n],t[n])):t instanceof RegExp?t.test(e):e===t}LT.valueMatchesCriteria=$S});var bx=w(CT=>{"use strict";f();N();m();Object.defineProperty(CT,"__esModule",{value:!0});CT.isAsyncIterable=void 0;function jse(e){return(e==null?void 0:e[Symbol.asyncIterator])!=null}CT.isAsyncIterable=jse});var Ax=w(BT=>{"use strict";f();N();m();Object.defineProperty(BT,"__esModule",{value:!0});BT.isDocumentNode=void 0;var Kse=Ae();function Gse(e){return e&&typeof e=="object"&&"kind"in e&&e.kind===Kse.Kind.DOCUMENT}BT.isDocumentNode=Gse});var Rx=w(()=>{"use strict";f();N();m()});var Lx=w(eu=>{"use strict";f();N();m();Object.defineProperty(eu,"__esModule",{value:!0});eu.withCancel=eu.getAsyncIterableWithCancel=eu.getAsyncIteratorWithCancel=void 0;var $se=cl();function Qse(e){return Si(this,null,function*(){return{value:e,done:!0}})}var Fx=(0,$se.memoize2)(function(t,n){return function(...i){return Reflect.apply(n,t,i)}});function Px(e,t){return new Proxy(e,{has(n,r){return r==="return"?!0:Reflect.has(n,r)},get(n,r,i){let a=Reflect.get(n,r,i);if(r==="return"){let o=a||Qse;return function(l){return Si(this,null,function*(){let p=yield t(l);return Reflect.apply(o,n,[p])})}}else if(typeof a=="function")return Fx(n,a);return a}})}eu.getAsyncIteratorWithCancel=Px;function wx(e,t){return new Proxy(e,{get(n,r,i){let a=Reflect.get(n,r,i);return Symbol.asyncIterator===r?function(){let c=Reflect.apply(a,n,[]);return Px(c,t)}:typeof a=="function"?Fx(n,a):a}})}eu.getAsyncIterableWithCancel=wx;eu.withCancel=wx});var Cx=w(UT=>{"use strict";f();N();m();Object.defineProperty(UT,"__esModule",{value:!0});UT.fixSchemaAst=void 0;var Yse=Ae(),Jse=TS();function Hse(e,t){let n=(0,Jse.getDocumentNodeFromSchema)(e);return(0,Yse.buildASTSchema)(n,M({},t||{}))}function zse(e,t){let n;return(!e.astNode||!e.extensionASTNodes)&&(n=Hse(e,t)),!e.astNode&&(n!=null&&n.astNode)&&(e.astNode=n.astNode),!e.extensionASTNodes&&(n!=null&&n.astNode)&&(e.extensionASTNodes=n.extensionASTNodes),e}UT.fixSchemaAst=zse});var Bx=w(kT=>{"use strict";f();N();m();Object.defineProperty(kT,"__esModule",{value:!0});kT.extractExtensionsFromSchema=void 0;var gs=Wu(),Wse=Nl();function da(e={}){let t=M({},e),n=t.directives;if(n!=null)for(let r in n){let i=n[r];Array.isArray(i)||(n[r]=[i])}return t}function Xse(e){let t={schemaExtensions:da(e.extensions),types:{}};return(0,Wse.mapSchema)(e,{[gs.MapperKind.OBJECT_TYPE]:n=>(t.types[n.name]={fields:{},type:"object",extensions:da(n.extensions)},n),[gs.MapperKind.INTERFACE_TYPE]:n=>(t.types[n.name]={fields:{},type:"interface",extensions:da(n.extensions)},n),[gs.MapperKind.FIELD]:(n,r,i)=>{t.types[i].fields[r]={arguments:{},extensions:da(n.extensions)};let a=n.args;if(a!=null)for(let o in a)t.types[i].fields[r].arguments[o]=da(a[o].extensions);return n},[gs.MapperKind.ENUM_TYPE]:n=>(t.types[n.name]={values:{},type:"enum",extensions:da(n.extensions)},n),[gs.MapperKind.ENUM_VALUE]:(n,r,i,a)=>(t.types[r].values[a]=da(n.extensions),n),[gs.MapperKind.SCALAR_TYPE]:n=>(t.types[n.name]={type:"scalar",extensions:da(n.extensions)},n),[gs.MapperKind.UNION_TYPE]:n=>(t.types[n.name]={type:"union",extensions:da(n.extensions)},n),[gs.MapperKind.INPUT_OBJECT_TYPE]:n=>(t.types[n.name]={fields:{},type:"input",extensions:da(n.extensions)},n),[gs.MapperKind.INPUT_OBJECT_FIELD]:(n,r,i)=>(t.types[i].fields[r]={extensions:da(n.extensions)},n)}),t}kT.extractExtensionsFromSchema=Xse});var Ux=w(tu=>{"use strict";f();N();m();Object.defineProperty(tu,"__esModule",{value:!0});tu.printPathArray=tu.pathToArray=tu.addPath=void 0;function Zse(e,t,n){return{prev:e,key:t,typename:n}}tu.addPath=Zse;function eoe(e){let t=[],n=e;for(;n;)t.push(n.key),n=n.prev;return t.reverse()}tu.pathToArray=eoe;function toe(e){return e.map(t=>typeof t=="number"?"["+t.toString()+"]":"."+t).join("")}tu.printPathArray=toe});var kx=w(QS=>{"use strict";f();N();m();function MT(e,t,n){if(typeof e=="object"&&typeof t=="object"){if(Array.isArray(e)&&Array.isArray(t))for(n=0;n{"use strict";f();N();m();Object.defineProperty(xT,"__esModule",{value:!0});xT.mergeIncrementalResult=void 0;var YS=kx();function Mx({incrementalResult:e,executionResult:t}){var r;let n=["data",...(r=e.path)!=null?r:[]];if(e.items)for(let i of e.items)(0,YS.dset)(t,n,i),n[n.length-1]++;e.data&&(0,YS.dset)(t,n,e.data),e.errors&&(t.errors=t.errors||[],t.errors.push(...e.errors)),e.extensions&&(0,YS.dset)(t,"extensions",e.extensions),e.incremental&&e.incremental.forEach(i=>{Mx({incrementalResult:i,executionResult:t})})}xT.mergeIncrementalResult=Mx});var Vx=w(gl=>{"use strict";f();N();m();Object.defineProperty(gl,"__esModule",{value:!0});gl.debugTimerEnd=gl.debugTimerStart=void 0;var qx=new Set;function roe(e){let t=(globalThis==null?void 0:globalThis.process.env.DEBUG)||globalThis.DEBUG;(t==="1"||t!=null&&t.includes(e))&&(qx.add(e),console.time(e))}gl.debugTimerStart=roe;function ioe(e){qx.has(e)&&console.timeEnd(e)}gl.debugTimerEnd=ioe});var pa=w(Ke=>{"use strict";f();N();m();Object.defineProperty(Ke,"__esModule",{value:!0});Ke.inspect=void 0;var Ye=(Jk(),Kf(Yk));Ye.__exportStar(Hk(),Ke);Ye.__exportStar(cp(),Ke);Ye.__exportStar(iS(),Ke);Ye.__exportStar(aS(),Ke);Ye.__exportStar(aM(),Ke);Ye.__exportStar(oS(),Ke);Ye.__exportStar(TS(),Ke);Ye.__exportStar(aS(),Ke);Ye.__exportStar(_M(),Ke);Ye.__exportStar(vM(),Ke);Ye.__exportStar(UM(),Ke);Ye.__exportStar(GM(),Ke);Ye.__exportStar(QM(),Ke);Ye.__exportStar(ZM(),Ke);Ye.__exportStar(tx(),Ke);Ye.__exportStar(nx(),Ke);Ye.__exportStar(ix(),Ke);Ye.__exportStar(ax(),Ke);Ye.__exportStar(Nl(),Ke);Ye.__exportStar(LS(),Ke);Ye.__exportStar(lT(),Ke);Ye.__exportStar(ox(),Ke);Ye.__exportStar(cx(),Ke);Ye.__exportStar(Wu(),Ke);Ye.__exportStar(OS(),Ke);Ye.__exportStar(lx(),Ke);Ye.__exportStar(dx(),Ke);Ye.__exportStar(px(),Ke);Ye.__exportStar(fx(),Ke);Ye.__exportStar(DS(),Ke);Ye.__exportStar(Tx(),Ke);Ye.__exportStar(Ex(),Ke);Ye.__exportStar(hx(),Ke);Ye.__exportStar($N(),Ke);Ye.__exportStar(yx(),Ke);Ye.__exportStar(Ox(),Ke);Ye.__exportStar(rS(),Ke);Ye.__exportStar(Dx(),Ke);Ye.__exportStar(bx(),Ke);Ye.__exportStar(Ax(),Ke);Ye.__exportStar(ZN(),Ke);Ye.__exportStar(Rx(),Ke);Ye.__exportStar(Lx(),Ke);Ye.__exportStar(fp(),Ke);Ye.__exportStar(hS(),Ke);Ye.__exportStar(qS(),Ke);var aoe=lp();Object.defineProperty(Ke,"inspect",{enumerable:!0,get:function(){return aoe.inspect}});Ye.__exportStar(cl(),Ke);Ye.__exportStar(Cx(),Ke);Ye.__exportStar(VS(),Ke);Ye.__exportStar(Bx(),Ke);Ye.__exportStar(Ux(),Ke);Ye.__exportStar(dp(),Ke);Ye.__exportStar(kS(),Ke);Ye.__exportStar(xx(),Ke);Ye.__exportStar(Vx(),Ke)});var Kx=w(qT=>{"use strict";f();N();m();Object.defineProperty(qT,"__esModule",{value:!0});qT.mergeResolvers=void 0;var soe=pa();function jx(e,t){if(!e||Array.isArray(e)&&e.length===0)return{};if(!Array.isArray(e))return e;if(e.length===1)return e[0]||{};let n=new Array;for(let i of e)Array.isArray(i)&&(i=jx(i)),typeof i=="object"&&i&&n.push(i);let r=(0,soe.mergeDeep)(n,!0);if(t!=null&&t.exclusions)for(let i of t.exclusions){let[a,o]=i.split(".");!o||o==="*"?delete r[a]:r[a]&&delete r[a][o]}return r}qT.mergeResolvers=jx});var JS=w(VT=>{"use strict";f();N();m();Object.defineProperty(VT,"__esModule",{value:!0});VT.mergeArguments=void 0;var Gx=pa();function ooe(e,t,n){let r=uoe([...t,...e].filter(Gx.isSome),n);return n&&n.sort&&r.sort(Gx.compareNodes),r}VT.mergeArguments=ooe;function uoe(e,t){return e.reduce((n,r)=>{let i=n.findIndex(a=>a.name.value===r.name.value);return i===-1?n.concat([r]):(t!=null&&t.reverseArguments||(n[i]=r),n)},[])}});var Ki=w(_l=>{"use strict";f();N();m();Object.defineProperty(_l,"__esModule",{value:!0});_l.mergeDirective=_l.mergeDirectives=void 0;var $x=Ae(),coe=pa();function loe(e,t){return!!e.find(n=>n.name.value===t.name.value)}function Qx(e,t){var n;return!!((n=t==null?void 0:t[e.name.value])!=null&&n.repeatable)}function doe(e,t){return t.some(({value:n})=>n===e.value)}function Yx(e,t){let n=[...t];for(let r of e){let i=n.findIndex(a=>a.name.value===r.name.value);if(i>-1){let a=n[i];if(a.value.kind==="ListValue"){let o=a.value.values,c=r.value.values;a.value.values=Toe(o,c,(l,p)=>{let T=l.value;return!T||!p.some(y=>y.value===T)})}else a.value=r.value}else n.push(r)}return n}function poe(e,t){return e.map((n,r,i)=>{let a=i.findIndex(o=>o.name.value===n.name.value);if(a!==r&&!Qx(n,t)){let o=i[a];return n.arguments=Yx(n.arguments,o.arguments),null}return n}).filter(coe.isSome)}function foe(e=[],t=[],n,r){let i=n&&n.reverseDirectives,a=i?e:t,o=i?t:e,c=poe([...a],r);for(let l of o)if(loe(c,l)&&!Qx(l,r)){let p=c.findIndex(y=>y.name.value===l.name.value),T=c[p];c[p].arguments=Yx(l.arguments||[],T.arguments||[])}else c.push(l);return c}_l.mergeDirectives=foe;function moe(e,t){let n=(0,$x.print)(Q(M({},e),{description:void 0})),r=(0,$x.print)(Q(M({},t),{description:void 0})),i=new RegExp("(directive @w*d*)|( on .*$)","g");if(!(n.replace(i,"")===r.replace(i,"")))throw new Error(`Unable to merge GraphQL directive "${e.name.value}". +`+o,block:!0})}):Q(M({},i),{description:{kind:qi.Kind.STRING,value:o,block:c}})}}}})}Xo.transformCommentsToDescriptions=BM;function UM(e){return(0,qi.isTypeSystemDefinitionNode)(e)||e.kind===qi.Kind.FIELD_DEFINITION||e.kind===qi.Kind.INPUT_VALUE_DEFINITION||e.kind===qi.Kind.ENUM_VALUE_DEFINITION}Xo.isDescribable=UM});var $M=w(oT=>{"use strict";m();T();N();Object.defineProperty(oT,"__esModule",{value:!0});oT.buildOperationNodeForField=void 0;var ct=Ae(),VM=mp(),_S=[],sT=new Map;function jM(e){_S.push(e)}function MM(){_S=[]}function xM(){sT=new Map}function Rae({schema:e,kind:t,field:n,models:r,ignore:i=[],depthLimit:a,circularReferenceDepth:o,argNames:c,selectedFields:l=!0}){MM(),xM();let p=(0,VM.getRootTypeNames)(e),f=Fae({schema:e,fieldName:n,kind:t,models:r||[],ignore:i,depthLimit:a||1/0,circularReferenceDepth:o||1,argNames:c,selectedFields:l,rootTypeNames:p});return f.variableDefinitions=[..._S],MM(),xM(),f}oT.buildOperationNodeForField=Rae;function Fae({schema:e,fieldName:t,kind:n,models:r,ignore:i,depthLimit:a,circularReferenceDepth:o,argNames:c,selectedFields:l,rootTypeNames:p}){let f=(0,VM.getDefinedRootType)(e,n),y=f.getFields()[t],g=`${t}_${n}`;if(y.args)for(let _ of y.args){let F=_.name;(!c||c.includes(F))&&jM(KM(_,F))}return{kind:ct.Kind.OPERATION_DEFINITION,operation:n,name:{kind:ct.Kind.NAME,value:g},variableDefinitions:[],selectionSet:{kind:ct.Kind.SELECTION_SET,selections:[GM({type:f,field:y,models:r,firstCall:!0,path:[],ancestors:[],ignore:i,depthLimit:a,circularReferenceDepth:o,schema:e,depth:0,argNames:c,selectedFields:l,rootTypeNames:p})]}}}function gS({parent:e,type:t,models:n,firstCall:r,path:i,ancestors:a,ignore:o,depthLimit:c,circularReferenceDepth:l,schema:p,depth:f,argNames:y,selectedFields:g,rootTypeNames:_}){if(!(typeof g=="boolean"&&f>c)){if((0,ct.isUnionType)(t)){let F=t.getTypes();return{kind:ct.Kind.SELECTION_SET,selections:F.filter(U=>!IS([...a,U],{depth:l})).map(U=>({kind:ct.Kind.INLINE_FRAGMENT,typeCondition:{kind:ct.Kind.NAMED_TYPE,name:{kind:ct.Kind.NAME,value:U.name}},selectionSet:gS({parent:t,type:U,models:n,path:i,ancestors:a,ignore:o,depthLimit:c,circularReferenceDepth:l,schema:p,depth:f,argNames:y,selectedFields:g,rootTypeNames:_})})).filter(U=>{var K,J;return((J=(K=U==null?void 0:U.selectionSet)==null?void 0:K.selections)==null?void 0:J.length)>0})}}if((0,ct.isInterfaceType)(t)){let F=Object.values(p.getTypeMap()).filter(U=>(0,ct.isObjectType)(U)&&U.getInterfaces().includes(t));return{kind:ct.Kind.SELECTION_SET,selections:F.filter(U=>!IS([...a,U],{depth:l})).map(U=>({kind:ct.Kind.INLINE_FRAGMENT,typeCondition:{kind:ct.Kind.NAMED_TYPE,name:{kind:ct.Kind.NAME,value:U.name}},selectionSet:gS({parent:t,type:U,models:n,path:i,ancestors:a,ignore:o,depthLimit:c,circularReferenceDepth:l,schema:p,depth:f,argNames:y,selectedFields:g,rootTypeNames:_})})).filter(U=>{var K,J;return((J=(K=U==null?void 0:U.selectionSet)==null?void 0:K.selections)==null?void 0:J.length)>0})}}if((0,ct.isObjectType)(t)&&!_.has(t.name)){let F=o.includes(t.name)||o.includes(`${e.name}.${i[i.length-1]}`),U=n.includes(t.name);if(!r&&U&&!F)return{kind:ct.Kind.SELECTION_SET,selections:[{kind:ct.Kind.FIELD,name:{kind:ct.Kind.NAME,value:"id"}}]};let K=t.getFields();return{kind:ct.Kind.SELECTION_SET,selections:Object.keys(K).filter(J=>!IS([...a,(0,ct.getNamedType)(K[J].type)],{depth:l})).map(J=>{let ee=typeof g=="object"?g[J]:!0;return ee?GM({type:t,field:K[J],models:n,path:[...i,J],ancestors:a,ignore:o,depthLimit:c,circularReferenceDepth:l,schema:p,depth:f,argNames:y,selectedFields:ee,rootTypeNames:_}):null}).filter(J=>{var ee,W;return J==null?!1:"selectionSet"in J?!!((W=(ee=J.selectionSet)==null?void 0:ee.selections)!=null&&W.length):!0})}}}}function KM(e,t){function n(r){return(0,ct.isListType)(r)?{kind:ct.Kind.LIST_TYPE,type:n(r.ofType)}:(0,ct.isNonNullType)(r)?{kind:ct.Kind.NON_NULL_TYPE,type:n(r.ofType)}:{kind:ct.Kind.NAMED_TYPE,name:{kind:ct.Kind.NAME,value:r.name}}}return{kind:ct.Kind.VARIABLE_DEFINITION,variable:{kind:ct.Kind.VARIABLE,name:{kind:ct.Kind.NAME,value:t||e.name}},type:n(e.type)}}function qM(e,t){return[...t,e].join("_")}function GM({type:e,field:t,models:n,firstCall:r,path:i,ancestors:a,ignore:o,depthLimit:c,circularReferenceDepth:l,schema:p,depth:f,argNames:y,selectedFields:g,rootTypeNames:_}){let F=(0,ct.getNamedType)(t.type),U=[],K=!1;if(t.args&&t.args.length&&(U=t.args.map(Te=>{let de=qM(Te.name,i);return y&&!y.includes(de)?((0,ct.isNonNullType)(Te.type)&&(K=!0),null):(r||jM(KM(Te,de)),{kind:ct.Kind.ARGUMENT,name:{kind:ct.Kind.NAME,value:Te.name},value:{kind:ct.Kind.VARIABLE,name:{kind:ct.Kind.NAME,value:qM(Te.name,i)}}})}).filter(Boolean)),K)return null;let J=[...i,t.name],ee=J.join("."),W=t.name;return sT.has(ee)&&sT.get(ee)!==t.type.toString()&&(W+=t.type.toString().replace("!","NonNull").replace("[","List").replace("]","")),sT.set(ee,t.type.toString()),!(0,ct.isScalarType)(F)&&!(0,ct.isEnumType)(F)?Q(M({kind:ct.Kind.FIELD,name:{kind:ct.Kind.NAME,value:t.name}},W!==t.name&&{alias:{kind:ct.Kind.NAME,value:W}}),{selectionSet:gS({parent:e,type:F,models:n,firstCall:r,path:J,ancestors:[...a,e],ignore:o,depthLimit:c,circularReferenceDepth:l,schema:p,depth:f+1,argNames:y,selectedFields:g,rootTypeNames:_})||void 0,arguments:U}):Q(M({kind:ct.Kind.FIELD,name:{kind:ct.Kind.NAME,value:t.name}},W!==t.name&&{alias:{kind:ct.Kind.NAME,value:W}}),{arguments:U})}function IS(e,t={depth:1}){let n=e[e.length-1];return(0,ct.isScalarType)(n)?!1:e.filter(i=>i.name===n.name).length>t.depth}});var YM=w(uT=>{"use strict";m();T();N();Object.defineProperty(uT,"__esModule",{value:!0});uT.DirectiveLocation=void 0;var QM;(function(e){e.QUERY="QUERY",e.MUTATION="MUTATION",e.SUBSCRIPTION="SUBSCRIPTION",e.FIELD="FIELD",e.FRAGMENT_DEFINITION="FRAGMENT_DEFINITION",e.FRAGMENT_SPREAD="FRAGMENT_SPREAD",e.INLINE_FRAGMENT="INLINE_FRAGMENT",e.VARIABLE_DEFINITION="VARIABLE_DEFINITION",e.SCHEMA="SCHEMA",e.SCALAR="SCALAR",e.OBJECT="OBJECT",e.FIELD_DEFINITION="FIELD_DEFINITION",e.ARGUMENT_DEFINITION="ARGUMENT_DEFINITION",e.INTERFACE="INTERFACE",e.UNION="UNION",e.ENUM="ENUM",e.ENUM_VALUE="ENUM_VALUE",e.INPUT_OBJECT="INPUT_OBJECT",e.INPUT_FIELD_DEFINITION="INPUT_FIELD_DEFINITION"})(QM||(uT.DirectiveLocation=QM={}))});var Wu=w(cT=>{"use strict";m();T();N();Object.defineProperty(cT,"__esModule",{value:!0});cT.MapperKind=void 0;var JM;(function(e){e.TYPE="MapperKind.TYPE",e.SCALAR_TYPE="MapperKind.SCALAR_TYPE",e.ENUM_TYPE="MapperKind.ENUM_TYPE",e.COMPOSITE_TYPE="MapperKind.COMPOSITE_TYPE",e.OBJECT_TYPE="MapperKind.OBJECT_TYPE",e.INPUT_OBJECT_TYPE="MapperKind.INPUT_OBJECT_TYPE",e.ABSTRACT_TYPE="MapperKind.ABSTRACT_TYPE",e.UNION_TYPE="MapperKind.UNION_TYPE",e.INTERFACE_TYPE="MapperKind.INTERFACE_TYPE",e.ROOT_OBJECT="MapperKind.ROOT_OBJECT",e.QUERY="MapperKind.QUERY",e.MUTATION="MapperKind.MUTATION",e.SUBSCRIPTION="MapperKind.SUBSCRIPTION",e.DIRECTIVE="MapperKind.DIRECTIVE",e.FIELD="MapperKind.FIELD",e.COMPOSITE_FIELD="MapperKind.COMPOSITE_FIELD",e.OBJECT_FIELD="MapperKind.OBJECT_FIELD",e.ROOT_FIELD="MapperKind.ROOT_FIELD",e.QUERY_ROOT_FIELD="MapperKind.QUERY_ROOT_FIELD",e.MUTATION_ROOT_FIELD="MapperKind.MUTATION_ROOT_FIELD",e.SUBSCRIPTION_ROOT_FIELD="MapperKind.SUBSCRIPTION_ROOT_FIELD",e.INTERFACE_FIELD="MapperKind.INTERFACE_FIELD",e.INPUT_OBJECT_FIELD="MapperKind.INPUT_OBJECT_FIELD",e.ARGUMENT="MapperKind.ARGUMENT",e.ENUM_VALUE="MapperKind.ENUM_VALUE"})(JM||(cT.MapperKind=JM={}))});var vS=w(lT=>{"use strict";m();T();N();Object.defineProperty(lT,"__esModule",{value:!0});lT.getObjectTypeFromTypeMap=void 0;var Pae=Ae();function wae(e,t){if(t){let n=e[t.name];if((0,Pae.isObjectType)(n))return n}}lT.getObjectTypeFromTypeMap=wae});var DS=w(Ma=>{"use strict";m();T();N();Object.defineProperty(Ma,"__esModule",{value:!0});Ma.getBuiltInForStub=Ma.isNamedStub=Ma.createStub=Ma.createNamedStub=void 0;var pr=Ae();function SS(e,t){let n;return t==="object"?n=pr.GraphQLObjectType:t==="interface"?n=pr.GraphQLInterfaceType:n=pr.GraphQLInputObjectType,new n({name:e,fields:{_fake:{type:pr.GraphQLString}}})}Ma.createNamedStub=SS;function OS(e,t){switch(e.kind){case pr.Kind.LIST_TYPE:return new pr.GraphQLList(OS(e.type,t));case pr.Kind.NON_NULL_TYPE:return new pr.GraphQLNonNull(OS(e.type,t));default:return t==="output"?SS(e.name.value,"object"):SS(e.name.value,"input")}}Ma.createStub=OS;function Lae(e){if("getFields"in e){let t=e.getFields();for(let n in t)return t[n].name==="_fake"}return!1}Ma.isNamedStub=Lae;function Cae(e){switch(e.name){case pr.GraphQLInt.name:return pr.GraphQLInt;case pr.GraphQLFloat.name:return pr.GraphQLFloat;case pr.GraphQLString.name:return pr.GraphQLString;case pr.GraphQLBoolean.name:return pr.GraphQLBoolean;case pr.GraphQLID.name:return pr.GraphQLID;default:return e}}Ma.getBuiltInForStub=Cae});var pT=w(dT=>{"use strict";m();T();N();Object.defineProperty(dT,"__esModule",{value:!0});dT.rewireTypes=void 0;var Yn=Ae(),HM=DS();function Bae(e,t){let n=Object.create(null);for(let g in e)n[g]=e[g];let r=Object.create(null);for(let g in n){let _=n[g];if(_==null||g.startsWith("__"))continue;let F=_.name;if(!F.startsWith("__")){if(r[F]!=null){console.warn(`Duplicate schema type name ${F} found; keeping the existing one found in the schema`);continue}r[F]=_}}for(let g in r)r[g]=c(r[g]);let i=t.map(g=>a(g));return{typeMap:r,directives:i};function a(g){if((0,Yn.isSpecifiedDirective)(g))return g;let _=g.toConfig();return _.args=o(_.args),new Yn.GraphQLDirective(_)}function o(g){let _={};for(let F in g){let U=g[F],K=y(U.type);K!=null&&(U.type=K,_[F]=U)}return _}function c(g){if((0,Yn.isObjectType)(g)){let _=g.toConfig(),F=Q(M({},_),{fields:()=>l(_.fields),interfaces:()=>f(_.interfaces)});return new Yn.GraphQLObjectType(F)}else if((0,Yn.isInterfaceType)(g)){let _=g.toConfig(),F=Q(M({},_),{fields:()=>l(_.fields)});return"interfaces"in F&&(F.interfaces=()=>f(_.interfaces)),new Yn.GraphQLInterfaceType(F)}else if((0,Yn.isUnionType)(g)){let _=g.toConfig(),F=Q(M({},_),{types:()=>f(_.types)});return new Yn.GraphQLUnionType(F)}else if((0,Yn.isInputObjectType)(g)){let _=g.toConfig(),F=Q(M({},_),{fields:()=>p(_.fields)});return new Yn.GraphQLInputObjectType(F)}else if((0,Yn.isEnumType)(g)){let _=g.toConfig();return new Yn.GraphQLEnumType(_)}else if((0,Yn.isScalarType)(g)){if((0,Yn.isSpecifiedScalarType)(g))return g;let _=g.toConfig();return new Yn.GraphQLScalarType(_)}throw new Error(`Unexpected schema type: ${g}`)}function l(g){let _={};for(let F in g){let U=g[F],K=y(U.type);K!=null&&U.args&&(U.type=K,U.args=o(U.args),_[F]=U)}return _}function p(g){let _={};for(let F in g){let U=g[F],K=y(U.type);K!=null&&(U.type=K,_[F]=U)}return _}function f(g){let _=[];for(let F of g){let U=y(F);U!=null&&_.push(U)}return _}function y(g){if((0,Yn.isListType)(g)){let _=y(g.ofType);return _!=null?new Yn.GraphQLList(_):null}else if((0,Yn.isNonNullType)(g)){let _=y(g.ofType);return _!=null?new Yn.GraphQLNonNull(_):null}else if((0,Yn.isNamedType)(g)){let _=n[g.name];return _===void 0&&(_=(0,HM.isNamedStub)(g)?(0,HM.getBuiltInForStub)(g):c(g),r[_.name]=n[g.name]=_),_!=null?r[_.name]:null}return null}}dT.rewireTypes=Bae});var bS=w(xa=>{"use strict";m();T();N();Object.defineProperty(xa,"__esModule",{value:!0});xa.parseInputValueLiteral=xa.parseInputValue=xa.serializeInputValue=xa.transformInputValue=void 0;var fT=Ae(),Uae=lp();function pl(e,t,n=null,r=null){if(t==null)return t;let i=(0,fT.getNullableType)(e);if((0,fT.isLeafType)(i))return n!=null?n(i,t):t;if((0,fT.isListType)(i))return(0,Uae.asArray)(t).map(a=>pl(i.ofType,a,n,r));if((0,fT.isInputObjectType)(i)){let a=i.getFields(),o={};for(let c in t){let l=a[c];l!=null&&(o[c]=pl(l.type,t[c],n,r))}return r!=null?r(i,o):o}}xa.transformInputValue=pl;function kae(e,t){return pl(e,t,(n,r)=>{try{return n.serialize(r)}catch(i){return r}})}xa.serializeInputValue=kae;function Mae(e,t){return pl(e,t,(n,r)=>{try{return n.parseValue(r)}catch(i){return r}})}xa.parseInputValue=Mae;function xae(e,t){return pl(e,t,(n,r)=>n.parseLiteral(r,{}))}xa.parseInputValueLiteral=xae});var Nl=w(ml=>{"use strict";m();T();N();Object.defineProperty(ml,"__esModule",{value:!0});ml.correctASTNodes=ml.mapSchema=void 0;var rt=Ae(),fl=vS(),Dt=Wu(),qae=pT(),zM=bS();function Vae(e,t={}){let n=ZM(XM(AS(WM(jae(AS(WM(e.getTypeMap(),e,zM.serializeInputValue),e,t,c=>(0,rt.isLeafType)(c)),e,t),e,zM.parseInputValue),e,t,c=>!(0,rt.isLeafType)(c)),e,t),e,t),r=e.getDirectives(),i=Kae(r,e,t),{typeMap:a,directives:o}=(0,qae.rewireTypes)(n,i);return new rt.GraphQLSchema(Q(M({},e.toConfig()),{query:(0,fl.getObjectTypeFromTypeMap)(a,(0,fl.getObjectTypeFromTypeMap)(n,e.getQueryType())),mutation:(0,fl.getObjectTypeFromTypeMap)(a,(0,fl.getObjectTypeFromTypeMap)(n,e.getMutationType())),subscription:(0,fl.getObjectTypeFromTypeMap)(a,(0,fl.getObjectTypeFromTypeMap)(n,e.getSubscriptionType())),types:Object.values(a),directives:o}))}ml.mapSchema=Vae;function AS(e,t,n,r=()=>!0){let i={};for(let a in e)if(!a.startsWith("__")){let o=e[a];if(o==null||!r(o)){i[a]=o;continue}let c=$ae(t,n,a);if(c==null){i[a]=o;continue}let l=c(o,t);if(l===void 0){i[a]=o;continue}i[a]=l}return i}function jae(e,t,n){let r=zae(n);return r?AS(e,t,{[Dt.MapperKind.ENUM_TYPE]:i=>{let a=i.toConfig(),o=a.values,c={};for(let l in o){let p=o[l],f=r(p,i.name,t,l);if(f===void 0)c[l]=p;else if(Array.isArray(f)){let[y,g]=f;c[y]=g===void 0?p:g}else f!==null&&(c[l]=f)}return Ip(new rt.GraphQLEnumType(Q(M({},a),{values:c})))}},i=>(0,rt.isEnumType)(i)):e}function WM(e,t,n){let r=ZM(e,t,{[Dt.MapperKind.ARGUMENT]:i=>{if(i.defaultValue===void 0)return i;let a=mT(e,i.type);if(a!=null)return Q(M({},i),{defaultValue:n(a,i.defaultValue)})}});return XM(r,t,{[Dt.MapperKind.INPUT_OBJECT_FIELD]:i=>{if(i.defaultValue===void 0)return i;let a=mT(r,i.type);if(a!=null)return Q(M({},i),{defaultValue:n(a,i.defaultValue)})}})}function mT(e,t){if((0,rt.isListType)(t)){let n=mT(e,t.ofType);return n!=null?new rt.GraphQLList(n):null}else if((0,rt.isNonNullType)(t)){let n=mT(e,t.ofType);return n!=null?new rt.GraphQLNonNull(n):null}else if((0,rt.isNamedType)(t)){let n=e[t.name];return n!=null?n:null}return null}function XM(e,t,n){let r={};for(let i in e)if(!i.startsWith("__")){let a=e[i];if(!(0,rt.isObjectType)(a)&&!(0,rt.isInterfaceType)(a)&&!(0,rt.isInputObjectType)(a)){r[i]=a;continue}let o=Yae(t,n,i);if(o==null){r[i]=a;continue}let c=a.toConfig(),l=c.fields,p={};for(let f in l){let y=l[f],g=o(y,f,i,t);if(g===void 0)p[f]=y;else if(Array.isArray(g)){let[_,F]=g;F.astNode!=null&&(F.astNode=Q(M({},F.astNode),{name:Q(M({},F.astNode.name),{value:_})})),p[_]=F===void 0?y:F}else g!==null&&(p[f]=g)}(0,rt.isObjectType)(a)?r[i]=Ip(new rt.GraphQLObjectType(Q(M({},c),{fields:p}))):(0,rt.isInterfaceType)(a)?r[i]=Ip(new rt.GraphQLInterfaceType(Q(M({},c),{fields:p}))):r[i]=Ip(new rt.GraphQLInputObjectType(Q(M({},c),{fields:p})))}return r}function ZM(e,t,n){let r={};for(let i in e)if(!i.startsWith("__")){let a=e[i];if(!(0,rt.isObjectType)(a)&&!(0,rt.isInterfaceType)(a)){r[i]=a;continue}let o=Jae(n);if(o==null){r[i]=a;continue}let c=a.toConfig(),l=c.fields,p={};for(let f in l){let y=l[f],g=y.args;if(g==null){p[f]=y;continue}let _=Object.keys(g);if(!_.length){p[f]=y;continue}let F={};for(let U of _){let K=g[U],J=o(K,f,i,t);if(J===void 0)F[U]=K;else if(Array.isArray(J)){let[ee,W]=J;F[ee]=W}else J!==null&&(F[U]=J)}p[f]=Q(M({},y),{args:F})}(0,rt.isObjectType)(a)?r[i]=new rt.GraphQLObjectType(Q(M({},c),{fields:p})):(0,rt.isInterfaceType)(a)?r[i]=new rt.GraphQLInterfaceType(Q(M({},c),{fields:p})):r[i]=new rt.GraphQLInputObjectType(Q(M({},c),{fields:p}))}return r}function Kae(e,t,n){let r=Hae(n);if(r==null)return e.slice();let i=[];for(let a of e){let o=r(a,t);o===void 0?i.push(a):o!==null&&i.push(o)}return i}function Gae(e,t){var i,a,o;let n=e.getType(t),r=[Dt.MapperKind.TYPE];return(0,rt.isObjectType)(n)?(r.push(Dt.MapperKind.COMPOSITE_TYPE,Dt.MapperKind.OBJECT_TYPE),t===((i=e.getQueryType())==null?void 0:i.name)?r.push(Dt.MapperKind.ROOT_OBJECT,Dt.MapperKind.QUERY):t===((a=e.getMutationType())==null?void 0:a.name)?r.push(Dt.MapperKind.ROOT_OBJECT,Dt.MapperKind.MUTATION):t===((o=e.getSubscriptionType())==null?void 0:o.name)&&r.push(Dt.MapperKind.ROOT_OBJECT,Dt.MapperKind.SUBSCRIPTION)):(0,rt.isInputObjectType)(n)?r.push(Dt.MapperKind.INPUT_OBJECT_TYPE):(0,rt.isInterfaceType)(n)?r.push(Dt.MapperKind.COMPOSITE_TYPE,Dt.MapperKind.ABSTRACT_TYPE,Dt.MapperKind.INTERFACE_TYPE):(0,rt.isUnionType)(n)?r.push(Dt.MapperKind.COMPOSITE_TYPE,Dt.MapperKind.ABSTRACT_TYPE,Dt.MapperKind.UNION_TYPE):(0,rt.isEnumType)(n)?r.push(Dt.MapperKind.ENUM_TYPE):(0,rt.isScalarType)(n)&&r.push(Dt.MapperKind.SCALAR_TYPE),r}function $ae(e,t,n){let r=Gae(e,n),i,a=[...r];for(;!i&&a.length>0;){let o=a.pop();i=t[o]}return i!=null?i:null}function Qae(e,t){var i,a,o;let n=e.getType(t),r=[Dt.MapperKind.FIELD];return(0,rt.isObjectType)(n)?(r.push(Dt.MapperKind.COMPOSITE_FIELD,Dt.MapperKind.OBJECT_FIELD),t===((i=e.getQueryType())==null?void 0:i.name)?r.push(Dt.MapperKind.ROOT_FIELD,Dt.MapperKind.QUERY_ROOT_FIELD):t===((a=e.getMutationType())==null?void 0:a.name)?r.push(Dt.MapperKind.ROOT_FIELD,Dt.MapperKind.MUTATION_ROOT_FIELD):t===((o=e.getSubscriptionType())==null?void 0:o.name)&&r.push(Dt.MapperKind.ROOT_FIELD,Dt.MapperKind.SUBSCRIPTION_ROOT_FIELD)):(0,rt.isInterfaceType)(n)?r.push(Dt.MapperKind.COMPOSITE_FIELD,Dt.MapperKind.INTERFACE_FIELD):(0,rt.isInputObjectType)(n)&&r.push(Dt.MapperKind.INPUT_OBJECT_FIELD),r}function Yae(e,t,n){let r=Qae(e,n),i,a=[...r];for(;!i&&a.length>0;){let o=a.pop();i=t[o]}return i!=null?i:null}function Jae(e){let t=e[Dt.MapperKind.ARGUMENT];return t!=null?t:null}function Hae(e){let t=e[Dt.MapperKind.DIRECTIVE];return t!=null?t:null}function zae(e){let t=e[Dt.MapperKind.ENUM_VALUE];return t!=null?t:null}function Ip(e){if((0,rt.isObjectType)(e)){let t=e.toConfig();if(t.astNode!=null){let n=[];for(let r in t.fields){let i=t.fields[r];i.astNode!=null&&n.push(i.astNode)}t.astNode=Q(M({},t.astNode),{kind:rt.Kind.OBJECT_TYPE_DEFINITION,fields:n})}return t.extensionASTNodes!=null&&(t.extensionASTNodes=t.extensionASTNodes.map(n=>Q(M({},n),{kind:rt.Kind.OBJECT_TYPE_EXTENSION,fields:void 0}))),new rt.GraphQLObjectType(t)}else if((0,rt.isInterfaceType)(e)){let t=e.toConfig();if(t.astNode!=null){let n=[];for(let r in t.fields){let i=t.fields[r];i.astNode!=null&&n.push(i.astNode)}t.astNode=Q(M({},t.astNode),{kind:rt.Kind.INTERFACE_TYPE_DEFINITION,fields:n})}return t.extensionASTNodes!=null&&(t.extensionASTNodes=t.extensionASTNodes.map(n=>Q(M({},n),{kind:rt.Kind.INTERFACE_TYPE_EXTENSION,fields:void 0}))),new rt.GraphQLInterfaceType(t)}else if((0,rt.isInputObjectType)(e)){let t=e.toConfig();if(t.astNode!=null){let n=[];for(let r in t.fields){let i=t.fields[r];i.astNode!=null&&n.push(i.astNode)}t.astNode=Q(M({},t.astNode),{kind:rt.Kind.INPUT_OBJECT_TYPE_DEFINITION,fields:n})}return t.extensionASTNodes!=null&&(t.extensionASTNodes=t.extensionASTNodes.map(n=>Q(M({},n),{kind:rt.Kind.INPUT_OBJECT_TYPE_EXTENSION,fields:void 0}))),new rt.GraphQLInputObjectType(t)}else if((0,rt.isEnumType)(e)){let t=e.toConfig();if(t.astNode!=null){let n=[];for(let r in t.values){let i=t.values[r];i.astNode!=null&&n.push(i.astNode)}t.astNode=Q(M({},t.astNode),{values:n})}return t.extensionASTNodes!=null&&(t.extensionASTNodes=t.extensionASTNodes.map(n=>Q(M({},n),{values:void 0}))),new rt.GraphQLEnumType(t)}else return e}ml.correctASTNodes=Ip});var ex=w(TT=>{"use strict";m();T();N();Object.defineProperty(TT,"__esModule",{value:!0});TT.filterSchema=void 0;var NT=Ae(),Is=Wu(),Wae=Nl();function Xae({schema:e,typeFilter:t=()=>!0,fieldFilter:n=void 0,rootFieldFilter:r=void 0,objectFieldFilter:i=void 0,interfaceFieldFilter:a=void 0,inputObjectFieldFilter:o=void 0,argumentFilter:c=void 0}){return(0,Wae.mapSchema)(e,{[Is.MapperKind.QUERY]:p=>RS(p,"Query",r,c),[Is.MapperKind.MUTATION]:p=>RS(p,"Mutation",r,c),[Is.MapperKind.SUBSCRIPTION]:p=>RS(p,"Subscription",r,c),[Is.MapperKind.OBJECT_TYPE]:p=>t(p.name,p)?FS(NT.GraphQLObjectType,p,i||n,c):null,[Is.MapperKind.INTERFACE_TYPE]:p=>t(p.name,p)?FS(NT.GraphQLInterfaceType,p,a||n,c):null,[Is.MapperKind.INPUT_OBJECT_TYPE]:p=>t(p.name,p)?FS(NT.GraphQLInputObjectType,p,o||n):null,[Is.MapperKind.UNION_TYPE]:p=>t(p.name,p)?void 0:null,[Is.MapperKind.ENUM_TYPE]:p=>t(p.name,p)?void 0:null,[Is.MapperKind.SCALAR_TYPE]:p=>t(p.name,p)?void 0:null})}TT.filterSchema=Xae;function RS(e,t,n,r){if(n||r){let i=e.toConfig();for(let a in i.fields){let o=i.fields[a];if(n&&!n(t,a,i.fields[a]))delete i.fields[a];else if(r&&o.args)for(let c in o.args)r(t,a,c,o.args[c])||delete o.args[c]}return new NT.GraphQLObjectType(i)}return e}function FS(e,t,n,r){if(n||r){let i=t.toConfig();for(let a in i.fields){let o=i.fields[a];if(n&&!n(t.name,a,i.fields[a]))delete i.fields[a];else if(r&&"args"in o)for(let c in o.args)r(t.name,a,c,o.args[c])||delete o.args[c]}return new e(i)}}});var nx=w(Tl=>{"use strict";m();T();N();Object.defineProperty(Tl,"__esModule",{value:!0});Tl.healTypes=Tl.healSchema=void 0;var qa=Ae();function Zae(e){return tx(e.getTypeMap(),e.getDirectives()),e}Tl.healSchema=Zae;function tx(e,t){let n=Object.create(null);for(let p in e){let f=e[p];if(f==null||p.startsWith("__"))continue;let y=f.name;if(!y.startsWith("__")){if(n[y]!=null){console.warn(`Duplicate schema type name ${y} found; keeping the existing one found in the schema`);continue}n[y]=f}}for(let p in n){let f=n[p];e[p]=f}for(let p of t)p.args=p.args.filter(f=>(f.type=l(f.type),f.type!==null));for(let p in e){let f=e[p];!p.startsWith("__")&&p in n&&f!=null&&r(f)}for(let p in e)!p.startsWith("__")&&!(p in n)&&delete e[p];function r(p){if((0,qa.isObjectType)(p)){i(p),a(p);return}else if((0,qa.isInterfaceType)(p)){i(p),"getInterfaces"in p&&a(p);return}else if((0,qa.isUnionType)(p)){c(p);return}else if((0,qa.isInputObjectType)(p)){o(p);return}else if((0,qa.isLeafType)(p))return;throw new Error(`Unexpected schema type: ${p}`)}function i(p){let f=p.getFields();for(let[y,g]of Object.entries(f))g.args.map(_=>(_.type=l(_.type),_.type===null?null:_)).filter(Boolean),g.type=l(g.type),g.type===null&&delete f[y]}function a(p){if("getInterfaces"in p){let f=p.getInterfaces();f.push(...f.splice(0).map(y=>l(y)).filter(Boolean))}}function o(p){let f=p.getFields();for(let[y,g]of Object.entries(f))g.type=l(g.type),g.type===null&&delete f[y]}function c(p){let f=p.getTypes();f.push(...f.splice(0).map(y=>l(y)).filter(Boolean))}function l(p){if((0,qa.isListType)(p)){let f=l(p.ofType);return f!=null?new qa.GraphQLList(f):null}else if((0,qa.isNonNullType)(p)){let f=l(p.ofType);return f!=null?new qa.GraphQLNonNull(f):null}else if((0,qa.isNamedType)(p)){let f=e[p.name];if(f&&p!==f)return f}return p}}Tl.healTypes=tx});var rx=w(ET=>{"use strict";m();T();N();Object.defineProperty(ET,"__esModule",{value:!0});ET.getResolversFromSchema=void 0;var Xu=Ae();function ese(e,t){var i,a;let n=Object.create(null),r=e.getTypeMap();for(let o in r)if(!o.startsWith("__")){let c=r[o];if((0,Xu.isScalarType)(c)){if(!(0,Xu.isSpecifiedScalarType)(c)){let l=c.toConfig();delete l.astNode,n[o]=new Xu.GraphQLScalarType(l)}}else if((0,Xu.isEnumType)(c)){n[o]={};let l=c.getValues();for(let p of l)n[o][p.name]=p.value}else if((0,Xu.isInterfaceType)(c))c.resolveType!=null&&(n[o]={__resolveType:c.resolveType});else if((0,Xu.isUnionType)(c))c.resolveType!=null&&(n[o]={__resolveType:c.resolveType});else if((0,Xu.isObjectType)(c)){n[o]={},c.isTypeOf!=null&&(n[o].__isTypeOf=c.isTypeOf);let l=c.getFields();for(let p in l){let f=l[p];if(f.subscribe!=null&&(n[o][p]=n[o][p]||{},n[o][p].subscribe=f.subscribe),f.resolve!=null&&((i=f.resolve)==null?void 0:i.name)!=="defaultFieldResolver"){switch((a=f.resolve)==null?void 0:a.name){case"defaultMergedResolver":if(!t)continue;break;case"defaultFieldResolver":continue}n[o][p]=n[o][p]||{},n[o][p].resolve=f.resolve}}}}return n}ET.getResolversFromSchema=ese});var ax=w(hT=>{"use strict";m();T();N();Object.defineProperty(hT,"__esModule",{value:!0});hT.forEachField=void 0;var ix=Ae();function tse(e,t){let n=e.getTypeMap();for(let r in n){let i=n[r];if(!(0,ix.getNamedType)(i).name.startsWith("__")&&(0,ix.isObjectType)(i)){let a=i.getFields();for(let o in a){let c=a[o];t(c,r,o)}}}}hT.forEachField=tse});var sx=w(yT=>{"use strict";m();T();N();Object.defineProperty(yT,"__esModule",{value:!0});yT.forEachDefaultValue=void 0;var PS=Ae();function nse(e,t){let n=e.getTypeMap();for(let r in n){let i=n[r];if(!(0,PS.getNamedType)(i).name.startsWith("__")){if((0,PS.isObjectType)(i)){let a=i.getFields();for(let o in a){let c=a[o];for(let l of c.args)l.defaultValue=t(l.type,l.defaultValue)}}else if((0,PS.isInputObjectType)(i)){let a=i.getFields();for(let o in a){let c=a[o];c.defaultValue=t(c.type,c.defaultValue)}}}}}yT.forEachDefaultValue=nse});var CS=w(IT=>{"use strict";m();T();N();Object.defineProperty(IT,"__esModule",{value:!0});IT.addTypes=void 0;var wS=Ae(),LS=vS(),rse=pT();function ise(e,t){let n=e.toConfig(),r={};for(let c of n.types)r[c.name]=c;let i={};for(let c of n.directives)i[c.name]=c;for(let c of t)(0,wS.isNamedType)(c)?r[c.name]=c:(0,wS.isDirective)(c)&&(i[c.name]=c);let{typeMap:a,directives:o}=(0,rse.rewireTypes)(r,Object.values(i));return new wS.GraphQLSchema(Q(M({},n),{query:(0,LS.getObjectTypeFromTypeMap)(a,e.getQueryType()),mutation:(0,LS.getObjectTypeFromTypeMap)(a,e.getMutationType()),subscription:(0,LS.getObjectTypeFromTypeMap)(a,e.getSubscriptionType()),types:Object.values(a),directives:o}))}IT.addTypes=ise});var ux=w(_T=>{"use strict";m();T();N();Object.defineProperty(_T,"__esModule",{value:!0});_T.pruneSchema=void 0;var tr=Ae(),ase=uS(),sse=Wu(),ose=Nl(),use=mp();function cse(e,t={}){let{skipEmptyCompositeTypePruning:n,skipEmptyUnionPruning:r,skipPruning:i,skipUnimplementedInterfacesPruning:a,skipUnusedTypesPruning:o}=t,c=[],l=e;do{let p=lse(l);if(i){let f=[];for(let y in l.getTypeMap()){if(y.startsWith("__"))continue;let g=l.getType(y);g&&i(g)&&f.push(y)}p=ox(f,l,p)}c=[],l=(0,ose.mapSchema)(l,{[sse.MapperKind.TYPE]:f=>!p.has(f.name)&&!(0,tr.isSpecifiedScalarType)(f)?((0,tr.isUnionType)(f)||(0,tr.isInputObjectType)(f)||(0,tr.isInterfaceType)(f)||(0,tr.isObjectType)(f)||(0,tr.isScalarType)(f))&&(o||(0,tr.isUnionType)(f)&&r&&!Object.keys(f.getTypes()).length||((0,tr.isInputObjectType)(f)||(0,tr.isInterfaceType)(f)||(0,tr.isObjectType)(f))&&n&&!Object.keys(f.getFields()).length||(0,tr.isInterfaceType)(f)&&a)?f:(c.push(f.name),p.delete(f.name),null):f})}while(c.length);return l}_T.pruneSchema=cse;function lse(e){let t=[];for(let n of(0,use.getRootTypes)(e))t.push(n.name);return ox(t,e)}function ox(e,t,n=new Set){let r=new Map;for(;e.length;){let i=e.pop();if(n.has(i)&&r[i]!==!0)continue;let a=t.getType(i);if(a){if((0,tr.isUnionType)(a)&&e.push(...a.getTypes().map(o=>o.name)),(0,tr.isInterfaceType)(a)&&r[i]===!0&&(e.push(...(0,ase.getImplementingTypes)(a.name,t)),r[i]=!1),(0,tr.isEnumType)(a)&&e.push(...a.getValues().flatMap(o=>o.astNode?gT(t,o.astNode):[])),"getInterfaces"in a&&e.push(...a.getInterfaces().map(o=>o.name)),"getFields"in a){let o=a.getFields(),c=Object.entries(o);if(!c.length)continue;for(let[,l]of c){(0,tr.isObjectType)(a)&&e.push(...l.args.flatMap(f=>{let y=[(0,tr.getNamedType)(f.type).name];return f.astNode&&y.push(...gT(t,f.astNode)),y}));let p=(0,tr.getNamedType)(l.type);e.push(p.name),l.astNode&&e.push(...gT(t,l.astNode)),(0,tr.isInterfaceType)(p)&&!(p.name in r)&&(r[p.name]=!0)}}a.astNode&&e.push(...gT(t,a.astNode)),n.add(i)}}return n}function gT(e,t){var n;return((n=t.directives)!=null?n:[]).flatMap(r=>{var i,a;return(a=(i=e.getDirective(r.name.value))==null?void 0:i.args.map(o=>(0,tr.getNamedType)(o.type).name))!=null?a:[]})}});var lx=w(vT=>{"use strict";m();T();N();Object.defineProperty(vT,"__esModule",{value:!0});vT.mergeDeep=void 0;var dse=lp();function cx(e,t=!1,n=!1){let r=e[0]||{},i={};t&&Object.setPrototypeOf(i,Object.create(Object.getPrototypeOf(r)));for(let a of e)if(BS(r)&&BS(a)){if(t){let o=Object.getPrototypeOf(i),c=Object.getPrototypeOf(a);if(c)for(let l of Object.getOwnPropertyNames(c)){let p=Object.getOwnPropertyDescriptor(c,l);(0,dse.isSome)(p)&&Object.defineProperty(o,l,p)}}for(let o in a)BS(a[o])?o in i?i[o]=cx([i[o],a[o]],t,n):Object.assign(i,{[o]:a[o]}):n&&Array.isArray(i[o])?Array.isArray(a[o])?i[o].push(...a[o]):i[o].push(a[o]):Object.assign(i,{[o]:a[o]})}else if(n&&Array.isArray(r))Array.isArray(a)?r.push(...a):r.push(a);else if(n&&Array.isArray(a))return[r,...a];return i}vT.mergeDeep=cx;function BS(e){return e&&typeof e=="object"&&!Array.isArray(e)}});var dx=w(ST=>{"use strict";m();T();N();Object.defineProperty(ST,"__esModule",{value:!0});ST.parseSelectionSet=void 0;var pse=Ae();function fse(e,t){return(0,pse.parse)(e,t).definitions[0].selectionSet}ST.parseSelectionSet=fse});var px=w(OT=>{"use strict";m();T();N();Object.defineProperty(OT,"__esModule",{value:!0});OT.getResponseKeyFromInfo=void 0;function mse(e){return e.fieldNodes[0].alias!=null?e.fieldNodes[0].alias.value:e.fieldName}OT.getResponseKeyFromInfo=mse});var fx=w(Va=>{"use strict";m();T();N();Object.defineProperty(Va,"__esModule",{value:!0});Va.modifyObjectFields=Va.selectObjectFields=Va.removeObjectFields=Va.appendObjectFields=void 0;var DT=Ae(),Nse=CS(),bT=Wu(),Zu=Nl();function Tse(e,t,n){return e.getType(t)==null?(0,Nse.addTypes)(e,[new DT.GraphQLObjectType({name:t,fields:n})]):(0,Zu.mapSchema)(e,{[bT.MapperKind.OBJECT_TYPE]:r=>{if(r.name===t){let i=r.toConfig(),a=i.fields,o={};for(let c in a)o[c]=a[c];for(let c in n)o[c]=n[c];return(0,Zu.correctASTNodes)(new DT.GraphQLObjectType(Q(M({},i),{fields:o})))}}})}Va.appendObjectFields=Tse;function Ese(e,t,n){let r={};return[(0,Zu.mapSchema)(e,{[bT.MapperKind.OBJECT_TYPE]:a=>{if(a.name===t){let o=a.toConfig(),c=o.fields,l={};for(let p in c){let f=c[p];n(p,f)?r[p]=f:l[p]=f}return(0,Zu.correctASTNodes)(new DT.GraphQLObjectType(Q(M({},o),{fields:l})))}}}),r]}Va.removeObjectFields=Ese;function hse(e,t,n){let r={};return(0,Zu.mapSchema)(e,{[bT.MapperKind.OBJECT_TYPE]:i=>{if(i.name===t){let o=i.toConfig().fields;for(let c in o){let l=o[c];n(c,l)&&(r[c]=l)}}}}),r}Va.selectObjectFields=hse;function yse(e,t,n,r){let i={};return[(0,Zu.mapSchema)(e,{[bT.MapperKind.OBJECT_TYPE]:o=>{if(o.name===t){let c=o.toConfig(),l=c.fields,p={};for(let f in l){let y=l[f];n(f,y)?i[f]=y:p[f]=y}for(let f in r){let y=r[f];p[f]=y}return(0,Zu.correctASTNodes)(new DT.GraphQLObjectType(Q(M({},c),{fields:p})))}}}),i]}Va.modifyObjectFields=yse});var mx=w(AT=>{"use strict";m();T();N();Object.defineProperty(AT,"__esModule",{value:!0});AT.renameType=void 0;var Vi=Ae();function Ise(e,t){if((0,Vi.isObjectType)(e))return new Vi.GraphQLObjectType(Q(M({},e.toConfig()),{name:t,astNode:e.astNode==null?e.astNode:Q(M({},e.astNode),{name:Q(M({},e.astNode.name),{value:t})}),extensionASTNodes:e.extensionASTNodes==null?e.extensionASTNodes:e.extensionASTNodes.map(n=>Q(M({},n),{name:Q(M({},n.name),{value:t})}))}));if((0,Vi.isInterfaceType)(e))return new Vi.GraphQLInterfaceType(Q(M({},e.toConfig()),{name:t,astNode:e.astNode==null?e.astNode:Q(M({},e.astNode),{name:Q(M({},e.astNode.name),{value:t})}),extensionASTNodes:e.extensionASTNodes==null?e.extensionASTNodes:e.extensionASTNodes.map(n=>Q(M({},n),{name:Q(M({},n.name),{value:t})}))}));if((0,Vi.isUnionType)(e))return new Vi.GraphQLUnionType(Q(M({},e.toConfig()),{name:t,astNode:e.astNode==null?e.astNode:Q(M({},e.astNode),{name:Q(M({},e.astNode.name),{value:t})}),extensionASTNodes:e.extensionASTNodes==null?e.extensionASTNodes:e.extensionASTNodes.map(n=>Q(M({},n),{name:Q(M({},n.name),{value:t})}))}));if((0,Vi.isInputObjectType)(e))return new Vi.GraphQLInputObjectType(Q(M({},e.toConfig()),{name:t,astNode:e.astNode==null?e.astNode:Q(M({},e.astNode),{name:Q(M({},e.astNode.name),{value:t})}),extensionASTNodes:e.extensionASTNodes==null?e.extensionASTNodes:e.extensionASTNodes.map(n=>Q(M({},n),{name:Q(M({},n.name),{value:t})}))}));if((0,Vi.isEnumType)(e))return new Vi.GraphQLEnumType(Q(M({},e.toConfig()),{name:t,astNode:e.astNode==null?e.astNode:Q(M({},e.astNode),{name:Q(M({},e.astNode.name),{value:t})}),extensionASTNodes:e.extensionASTNodes==null?e.extensionASTNodes:e.extensionASTNodes.map(n=>Q(M({},n),{name:Q(M({},n.name),{value:t})}))}));if((0,Vi.isScalarType)(e))return new Vi.GraphQLScalarType(Q(M({},e.toConfig()),{name:t,astNode:e.astNode==null?e.astNode:Q(M({},e.astNode),{name:Q(M({},e.astNode.name),{value:t})}),extensionASTNodes:e.extensionASTNodes==null?e.extensionASTNodes:e.extensionASTNodes.map(n=>Q(M({},n),{name:Q(M({},n.name),{value:t})}))}));throw new Error(`Unknown type ${e}.`)}AT.renameType=Ise});var Ex=w(RT=>{"use strict";m();T();N();Object.defineProperty(RT,"__esModule",{value:!0});RT.mapAsyncIterator=void 0;var gse=pp();function _se(e,t,n,r){let i,a,o;r&&(o=p=>{let f=r();return(0,gse.isPromise)(f)?f.then(()=>p):p}),typeof e.return=="function"&&(i=e.return,a=p=>{let f=()=>Promise.reject(p);return i.call(e).then(f,f)});function c(p){return p.done?o?o(p):p:Nx(p.value,t).then(Tx,a)}let l;if(n){let p=n;l=f=>Nx(f,p).then(Tx,a)}return{next(){return e.next().then(c,l)},return(){let p=i?i.call(e).then(c,l):Promise.resolve({value:void 0,done:!0});return o?p.then(o):p},throw(p){return typeof e.throw=="function"?e.throw(p).then(c,l):Promise.reject(p).catch(a)},[Symbol.asyncIterator](){return this}}}RT.mapAsyncIterator=_se;function Nx(e,t){return new Promise(n=>n(t(e)))}function Tx(e){return{value:e,done:!1}}});var hx=w(El=>{"use strict";m();T();N();Object.defineProperty(El,"__esModule",{value:!0});El.createVariableNameGenerator=El.updateArgument=void 0;var ec=Ae(),vse=lS();function Sse(e,t,n,r,i,a,o){if(e[r]={kind:ec.Kind.ARGUMENT,name:{kind:ec.Kind.NAME,value:r},value:{kind:ec.Kind.VARIABLE,name:{kind:ec.Kind.NAME,value:i}}},t[i]={kind:ec.Kind.VARIABLE_DEFINITION,variable:{kind:ec.Kind.VARIABLE,name:{kind:ec.Kind.NAME,value:i}},type:(0,vse.astFromType)(a)},o!==void 0){n[i]=o;return}i in n&&delete n[i]}El.updateArgument=Sse;function Ose(e){let t=0;return n=>{let r;do r=`_v${(t++).toString()}_${n}`;while(r in e);return r}}El.createVariableNameGenerator=Ose});var yx=w(FT=>{"use strict";m();T();N();Object.defineProperty(FT,"__esModule",{value:!0});FT.implementsAbstractType=void 0;var US=Ae();function Dse(e,t,n){return n==null||t==null?!1:t===n?!0:(0,US.isCompositeType)(t)&&(0,US.isCompositeType)(n)?(0,US.doTypesOverlap)(e,t,n):!1}FT.implementsAbstractType=Dse});var Ix=w(PT=>{"use strict";m();T();N();Object.defineProperty(PT,"__esModule",{value:!0});PT.observableToAsyncIterable=void 0;function bse(e){let t=[],n=[],r=!0,i=f=>{t.length!==0?t.shift()({value:f,done:!1}):n.push({value:f,done:!1})},a=f=>{t.length!==0?t.shift()({value:{errors:[f]},done:!1}):n.push({value:{errors:[f]},done:!1})},o=()=>{t.length!==0?t.shift()({done:!0}):n.push({done:!0})},c=()=>new Promise(f=>{if(n.length!==0){let y=n.shift();f(y)}else t.push(f)}),l=e.subscribe({next(f){i(f)},error(f){a(f)},complete(){o()}}),p=()=>{if(r){r=!1,l.unsubscribe();for(let f of t)f({value:void 0,done:!0});t.length=0,n.length=0}};return{next(){return r?c():this.return()},return(){return p(),Promise.resolve({value:void 0,done:!0})},throw(f){return p(),Promise.reject(f)},[Symbol.asyncIterator](){return this}}}PT.observableToAsyncIterable=bse});var gx=w(wT=>{"use strict";m();T();N();Object.defineProperty(wT,"__esModule",{value:!0});wT.AccumulatorMap=void 0;var kS=class extends Map{get[Symbol.toStringTag](){return"AccumulatorMap"}add(t,n){let r=this.get(t);r===void 0?this.set(t,[n]):r.push(n)}};wT.AccumulatorMap=kS});var MS=w(hl=>{"use strict";m();T();N();Object.defineProperty(hl,"__esModule",{value:!0});hl.GraphQLStreamDirective=hl.GraphQLDeferDirective=void 0;var ji=Ae();hl.GraphQLDeferDirective=new ji.GraphQLDirective({name:"defer",description:"Directs the executor to defer this fragment when the `if` argument is true or undefined.",locations:[ji.DirectiveLocation.FRAGMENT_SPREAD,ji.DirectiveLocation.INLINE_FRAGMENT],args:{if:{type:new ji.GraphQLNonNull(ji.GraphQLBoolean),description:"Deferred when true or undefined.",defaultValue:!0},label:{type:ji.GraphQLString,description:"Unique name"}}});hl.GraphQLStreamDirective=new ji.GraphQLDirective({name:"stream",description:"Directs the executor to stream plural fields when the `if` argument is true or undefined.",locations:[ji.DirectiveLocation.FIELD],args:{if:{type:new ji.GraphQLNonNull(ji.GraphQLBoolean),description:"Stream when true or undefined.",defaultValue:!0},label:{type:ji.GraphQLString,description:"Unique name"},initialCount:{defaultValue:0,type:ji.GraphQLInt,description:"Number of items to return immediately"}}})});var VS=w(Xr=>{"use strict";m();T();N();Object.defineProperty(Xr,"__esModule",{value:!0});Xr.collectSubFields=Xr.getDeferValues=Xr.getFieldEntryKey=Xr.doesFragmentConditionMatch=Xr.shouldIncludeNode=Xr.collectFields=void 0;var ja=Ae(),CT=gx(),Ase=MS(),Rse=cl();function yl(e,t,n,r,i,a,o,c){for(let l of i.selections)switch(l.kind){case ja.Kind.FIELD:{if(!LT(n,l))continue;a.add(_x(l),l);break}case ja.Kind.INLINE_FRAGMENT:{if(!LT(n,l)||!xS(e,l,r))continue;let p=qS(n,l);if(p){let f=new CT.AccumulatorMap;yl(e,t,n,r,l.selectionSet,f,o,c),o.push({label:p.label,fields:f})}else yl(e,t,n,r,l.selectionSet,a,o,c);break}case ja.Kind.FRAGMENT_SPREAD:{let p=l.name.value;if(!LT(n,l))continue;let f=qS(n,l);if(c.has(p)&&!f)continue;let y=t[p];if(!y||!xS(e,y,r))continue;if(f||c.add(p),f){let g=new CT.AccumulatorMap;yl(e,t,n,r,y.selectionSet,g,o,c),o.push({label:f.label,fields:g})}else yl(e,t,n,r,y.selectionSet,a,o,c);break}}}function Fse(e,t,n,r,i){let a=new CT.AccumulatorMap,o=[];return yl(e,t,n,r,i,a,o,new Set),{fields:a,patches:o}}Xr.collectFields=Fse;function LT(e,t){let n=(0,ja.getDirectiveValues)(ja.GraphQLSkipDirective,t,e);if((n==null?void 0:n.if)===!0)return!1;let r=(0,ja.getDirectiveValues)(ja.GraphQLIncludeDirective,t,e);return(r==null?void 0:r.if)!==!1}Xr.shouldIncludeNode=LT;function xS(e,t,n){let r=t.typeCondition;if(!r)return!0;let i=(0,ja.typeFromAST)(e,r);return i===n?!0:(0,ja.isAbstractType)(i)?e.getPossibleTypes(i).includes(n):!1}Xr.doesFragmentConditionMatch=xS;function _x(e){return e.alias?e.alias.value:e.name.value}Xr.getFieldEntryKey=_x;function qS(e,t){let n=(0,ja.getDirectiveValues)(Ase.GraphQLDeferDirective,t,e);if(n&&n.if!==!1)return{label:typeof n.label=="string"?n.label:void 0}}Xr.getDeferValues=qS;Xr.collectSubFields=(0,Rse.memoize5)(function(t,n,r,i,a){let o=new CT.AccumulatorMap,c=new Set,l=[],p={fields:o,patches:l};for(let f of a)f.selectionSet&&yl(t,n,r,i,f.selectionSet,o,l,c);return p})});var jS=w(Il=>{"use strict";m();T();N();Object.defineProperty(Il,"__esModule",{value:!0});Il.getOperationASTFromRequest=Il.getOperationASTFromDocument=void 0;var Pse=Ae(),wse=cl();function vx(e,t){let n=(0,Pse.getOperationAST)(e,t);if(!n)throw new Error(`Cannot infer operation ${t||""}`);return n}Il.getOperationASTFromDocument=vx;Il.getOperationASTFromRequest=(0,wse.memoize1)(function(t){return vx(t.document,t.operationName)})});var Dx=w(eu=>{"use strict";m();T();N();Object.defineProperty(eu,"__esModule",{value:!0});eu.visitResult=eu.visitErrors=eu.visitData=void 0;var Zo=Ae(),KS=VS(),Lse=jS();function GS(e,t,n){if(Array.isArray(e))return e.map(r=>GS(r,t,n));if(typeof e=="object"){let r=t!=null?t(e):e;if(r!=null)for(let i in r){let a=r[i];Object.defineProperty(r,i,{value:GS(a,t,n)})}return n!=null?n(r):r}return e}eu.visitData=GS;function Cse(e,t){return e.map(n=>t(n))}eu.visitErrors=Cse;function Bse(e,t,n,r,i){let a=t.document.definitions.reduce((g,_)=>(_.kind===Zo.Kind.FRAGMENT_DEFINITION&&(g[_.name.value]=_),g),{}),o=t.variables||{},c={segmentInfoMap:new Map,unpathedErrors:new Set},l=e.data,p=e.errors,f=p!=null&&i!=null,y=(0,Lse.getOperationASTFromRequest)(t);return l!=null&&y!=null&&(e.data=Mse(l,y,n,a,o,r,f?p:void 0,c)),p!=null&&i&&(e.errors=Use(p,i,c)),e}eu.visitResult=Bse;function Use(e,t,n){let r=n.segmentInfoMap,i=n.unpathedErrors,a=t.__unpathed;return e.map(o=>{let c=r.get(o),l=c==null?o:c.reduceRight((p,f)=>{let y=f.type.name,g=t[y];if(g==null)return p;let _=g[f.fieldName];return _==null?p:_(p,f.pathIndex)},o);return a&&i.has(o)?a(l):l})}function kse(e,t){switch(t.operation){case"query":return e.getQueryType();case"mutation":return e.getMutationType();case"subscription":return e.getSubscriptionType()}}function Mse(e,t,n,r,i,a,o,c){let l=kse(n,t),{fields:p}=(0,KS.collectFields)(n,r,i,l,t.selectionSet);return $S(e,l,p,n,r,i,a,0,o,c)}function $S(e,t,n,r,i,a,o,c,l,p){var ee;let f=t.getFields(),y=o==null?void 0:o[t.name],g=y==null?void 0:y.__enter,_=g!=null?g(e):e,F,U=null;if(l!=null){F=qse(l,c),U=F.errorMap;for(let W of F.unpathedErrors)p.unpathedErrors.add(W)}for(let[W,Te]of n){let de=Te[0].name.value,we=(ee=f[de])==null?void 0:ee.type;if(we==null)switch(de){case"__typename":we=Zo.TypeNameMetaFieldDef.type;break;case"__schema":we=Zo.SchemaMetaFieldDef.type;break;case"__type":we=Zo.TypeMetaFieldDef.type;break}let qe=c+1,et;U&&(et=U[W],et!=null&&delete U[W],Vse(t,de,qe,et,p));let X=Ox(e[W],we,Te,r,i,a,o,qe,et,p);Sx(_,W,X,y,de)}let K=_.__typename;if(K!=null&&Sx(_,"__typename",K,y,"__typename"),U)for(let W in U){let Te=U[W];for(let de of Te)p.unpathedErrors.add(de)}let J=y==null?void 0:y.__leave;return J!=null?J(_):_}function Sx(e,t,n,r,i){if(r==null){e[t]=n;return}let a=r[i];if(a==null){e[t]=n;return}let o=a(n);if(o===void 0){delete e[t];return}e[t]=o}function xse(e,t,n,r,i,a,o,c,l,p){return e.map(f=>Ox(f,t,n,r,i,a,o,c+1,l,p))}function Ox(e,t,n,r,i,a,o,c,l=[],p){if(e==null)return e;let f=(0,Zo.getNullableType)(t);if((0,Zo.isListType)(f))return xse(e,f.ofType,n,r,i,a,o,c,l,p);if((0,Zo.isAbstractType)(f)){let _=r.getType(e.__typename),{fields:F}=(0,KS.collectSubFields)(r,i,a,_,n);return $S(e,_,F,r,i,a,o,c,l,p)}else if((0,Zo.isObjectType)(f)){let{fields:_}=(0,KS.collectSubFields)(r,i,a,f,n);return $S(e,f,_,r,i,a,o,c,l,p)}let y=o==null?void 0:o[f.name];if(y==null)return e;let g=y(e);return g===void 0?e:g}function qse(e,t){var i;let n=Object.create(null),r=new Set;for(let a of e){let o=(i=a.path)==null?void 0:i[t];if(o==null){r.add(a);continue}o in n?n[o].push(a):n[o]=[a]}return{errorMap:n,unpathedErrors:r}}function Vse(e,t,n,r=[],i){for(let a of r){let o={type:e,fieldName:t,pathIndex:n},c=i.segmentInfoMap.get(a);c==null?i.segmentInfoMap.set(a,[o]):c.push(o)}}});var bx=w(BT=>{"use strict";m();T();N();Object.defineProperty(BT,"__esModule",{value:!0});BT.valueMatchesCriteria=void 0;function QS(e,t){return e==null?e===t:Array.isArray(e)?Array.isArray(t)&&e.every((n,r)=>QS(n,t[r])):typeof e=="object"?typeof t=="object"&&t&&Object.keys(t).every(n=>QS(e[n],t[n])):t instanceof RegExp?t.test(e):e===t}BT.valueMatchesCriteria=QS});var Ax=w(UT=>{"use strict";m();T();N();Object.defineProperty(UT,"__esModule",{value:!0});UT.isAsyncIterable=void 0;function jse(e){return(e==null?void 0:e[Symbol.asyncIterator])!=null}UT.isAsyncIterable=jse});var Rx=w(kT=>{"use strict";m();T();N();Object.defineProperty(kT,"__esModule",{value:!0});kT.isDocumentNode=void 0;var Kse=Ae();function Gse(e){return e&&typeof e=="object"&&"kind"in e&&e.kind===Kse.Kind.DOCUMENT}kT.isDocumentNode=Gse});var Fx=w(()=>{"use strict";m();T();N()});var Cx=w(tu=>{"use strict";m();T();N();Object.defineProperty(tu,"__esModule",{value:!0});tu.withCancel=tu.getAsyncIterableWithCancel=tu.getAsyncIteratorWithCancel=void 0;var $se=cl();function Qse(e){return Si(this,null,function*(){return{value:e,done:!0}})}var Px=(0,$se.memoize2)(function(t,n){return function(...i){return Reflect.apply(n,t,i)}});function wx(e,t){return new Proxy(e,{has(n,r){return r==="return"?!0:Reflect.has(n,r)},get(n,r,i){let a=Reflect.get(n,r,i);if(r==="return"){let o=a||Qse;return function(l){return Si(this,null,function*(){let p=yield t(l);return Reflect.apply(o,n,[p])})}}else if(typeof a=="function")return Px(n,a);return a}})}tu.getAsyncIteratorWithCancel=wx;function Lx(e,t){return new Proxy(e,{get(n,r,i){let a=Reflect.get(n,r,i);return Symbol.asyncIterator===r?function(){let c=Reflect.apply(a,n,[]);return wx(c,t)}:typeof a=="function"?Px(n,a):a}})}tu.getAsyncIterableWithCancel=Lx;tu.withCancel=Lx});var Bx=w(MT=>{"use strict";m();T();N();Object.defineProperty(MT,"__esModule",{value:!0});MT.fixSchemaAst=void 0;var Yse=Ae(),Jse=ES();function Hse(e,t){let n=(0,Jse.getDocumentNodeFromSchema)(e);return(0,Yse.buildASTSchema)(n,M({},t||{}))}function zse(e,t){let n;return(!e.astNode||!e.extensionASTNodes)&&(n=Hse(e,t)),!e.astNode&&(n!=null&&n.astNode)&&(e.astNode=n.astNode),!e.extensionASTNodes&&(n!=null&&n.astNode)&&(e.extensionASTNodes=n.extensionASTNodes),e}MT.fixSchemaAst=zse});var Ux=w(xT=>{"use strict";m();T();N();Object.defineProperty(xT,"__esModule",{value:!0});xT.extractExtensionsFromSchema=void 0;var gs=Wu(),Wse=Nl();function da(e={}){let t=M({},e),n=t.directives;if(n!=null)for(let r in n){let i=n[r];Array.isArray(i)||(n[r]=[i])}return t}function Xse(e){let t={schemaExtensions:da(e.extensions),types:{}};return(0,Wse.mapSchema)(e,{[gs.MapperKind.OBJECT_TYPE]:n=>(t.types[n.name]={fields:{},type:"object",extensions:da(n.extensions)},n),[gs.MapperKind.INTERFACE_TYPE]:n=>(t.types[n.name]={fields:{},type:"interface",extensions:da(n.extensions)},n),[gs.MapperKind.FIELD]:(n,r,i)=>{t.types[i].fields[r]={arguments:{},extensions:da(n.extensions)};let a=n.args;if(a!=null)for(let o in a)t.types[i].fields[r].arguments[o]=da(a[o].extensions);return n},[gs.MapperKind.ENUM_TYPE]:n=>(t.types[n.name]={values:{},type:"enum",extensions:da(n.extensions)},n),[gs.MapperKind.ENUM_VALUE]:(n,r,i,a)=>(t.types[r].values[a]=da(n.extensions),n),[gs.MapperKind.SCALAR_TYPE]:n=>(t.types[n.name]={type:"scalar",extensions:da(n.extensions)},n),[gs.MapperKind.UNION_TYPE]:n=>(t.types[n.name]={type:"union",extensions:da(n.extensions)},n),[gs.MapperKind.INPUT_OBJECT_TYPE]:n=>(t.types[n.name]={fields:{},type:"input",extensions:da(n.extensions)},n),[gs.MapperKind.INPUT_OBJECT_FIELD]:(n,r,i)=>(t.types[i].fields[r]={extensions:da(n.extensions)},n)}),t}xT.extractExtensionsFromSchema=Xse});var kx=w(nu=>{"use strict";m();T();N();Object.defineProperty(nu,"__esModule",{value:!0});nu.printPathArray=nu.pathToArray=nu.addPath=void 0;function Zse(e,t,n){return{prev:e,key:t,typename:n}}nu.addPath=Zse;function eoe(e){let t=[],n=e;for(;n;)t.push(n.key),n=n.prev;return t.reverse()}nu.pathToArray=eoe;function toe(e){return e.map(t=>typeof t=="number"?"["+t.toString()+"]":"."+t).join("")}nu.printPathArray=toe});var Mx=w(YS=>{"use strict";m();T();N();function qT(e,t,n){if(typeof e=="object"&&typeof t=="object"){if(Array.isArray(e)&&Array.isArray(t))for(n=0;n{"use strict";m();T();N();Object.defineProperty(VT,"__esModule",{value:!0});VT.mergeIncrementalResult=void 0;var JS=Mx();function xx({incrementalResult:e,executionResult:t}){var r;let n=["data",...(r=e.path)!=null?r:[]];if(e.items)for(let i of e.items)(0,JS.dset)(t,n,i),n[n.length-1]++;e.data&&(0,JS.dset)(t,n,e.data),e.errors&&(t.errors=t.errors||[],t.errors.push(...e.errors)),e.extensions&&(0,JS.dset)(t,"extensions",e.extensions),e.incremental&&e.incremental.forEach(i=>{xx({incrementalResult:i,executionResult:t})})}VT.mergeIncrementalResult=xx});var jx=w(gl=>{"use strict";m();T();N();Object.defineProperty(gl,"__esModule",{value:!0});gl.debugTimerEnd=gl.debugTimerStart=void 0;var Vx=new Set;function roe(e){let t=(globalThis==null?void 0:globalThis.process.env.DEBUG)||globalThis.DEBUG;(t==="1"||t!=null&&t.includes(e))&&(Vx.add(e),console.time(e))}gl.debugTimerStart=roe;function ioe(e){Vx.has(e)&&console.timeEnd(e)}gl.debugTimerEnd=ioe});var pa=w(Ke=>{"use strict";m();T();N();Object.defineProperty(Ke,"__esModule",{value:!0});Ke.inspect=void 0;var Ye=(Hk(),$f(Jk));Ye.__exportStar(zk(),Ke);Ye.__exportStar(lp(),Ke);Ye.__exportStar(aS(),Ke);Ye.__exportStar(sS(),Ke);Ye.__exportStar(sM(),Ke);Ye.__exportStar(uS(),Ke);Ye.__exportStar(ES(),Ke);Ye.__exportStar(sS(),Ke);Ye.__exportStar(vM(),Ke);Ye.__exportStar(SM(),Ke);Ye.__exportStar(kM(),Ke);Ye.__exportStar($M(),Ke);Ye.__exportStar(YM(),Ke);Ye.__exportStar(ex(),Ke);Ye.__exportStar(nx(),Ke);Ye.__exportStar(rx(),Ke);Ye.__exportStar(ax(),Ke);Ye.__exportStar(sx(),Ke);Ye.__exportStar(Nl(),Ke);Ye.__exportStar(CS(),Ke);Ye.__exportStar(pT(),Ke);Ye.__exportStar(ux(),Ke);Ye.__exportStar(lx(),Ke);Ye.__exportStar(Wu(),Ke);Ye.__exportStar(DS(),Ke);Ye.__exportStar(dx(),Ke);Ye.__exportStar(px(),Ke);Ye.__exportStar(fx(),Ke);Ye.__exportStar(mx(),Ke);Ye.__exportStar(bS(),Ke);Ye.__exportStar(Ex(),Ke);Ye.__exportStar(hx(),Ke);Ye.__exportStar(yx(),Ke);Ye.__exportStar(YN(),Ke);Ye.__exportStar(Ix(),Ke);Ye.__exportStar(Dx(),Ke);Ye.__exportStar(iS(),Ke);Ye.__exportStar(bx(),Ke);Ye.__exportStar(Ax(),Ke);Ye.__exportStar(Rx(),Ke);Ye.__exportStar(tT(),Ke);Ye.__exportStar(Fx(),Ke);Ye.__exportStar(Cx(),Ke);Ye.__exportStar(mp(),Ke);Ye.__exportStar(yS(),Ke);Ye.__exportStar(VS(),Ke);var aoe=dp();Object.defineProperty(Ke,"inspect",{enumerable:!0,get:function(){return aoe.inspect}});Ye.__exportStar(cl(),Ke);Ye.__exportStar(Bx(),Ke);Ye.__exportStar(jS(),Ke);Ye.__exportStar(Ux(),Ke);Ye.__exportStar(kx(),Ke);Ye.__exportStar(pp(),Ke);Ye.__exportStar(MS(),Ke);Ye.__exportStar(qx(),Ke);Ye.__exportStar(jx(),Ke)});var Gx=w(jT=>{"use strict";m();T();N();Object.defineProperty(jT,"__esModule",{value:!0});jT.mergeResolvers=void 0;var soe=pa();function Kx(e,t){if(!e||Array.isArray(e)&&e.length===0)return{};if(!Array.isArray(e))return e;if(e.length===1)return e[0]||{};let n=new Array;for(let i of e)Array.isArray(i)&&(i=Kx(i)),typeof i=="object"&&i&&n.push(i);let r=(0,soe.mergeDeep)(n,!0);if(t!=null&&t.exclusions)for(let i of t.exclusions){let[a,o]=i.split(".");!o||o==="*"?delete r[a]:r[a]&&delete r[a][o]}return r}jT.mergeResolvers=Kx});var HS=w(KT=>{"use strict";m();T();N();Object.defineProperty(KT,"__esModule",{value:!0});KT.mergeArguments=void 0;var $x=pa();function ooe(e,t,n){let r=uoe([...t,...e].filter($x.isSome),n);return n&&n.sort&&r.sort($x.compareNodes),r}KT.mergeArguments=ooe;function uoe(e,t){return e.reduce((n,r)=>{let i=n.findIndex(a=>a.name.value===r.name.value);return i===-1?n.concat([r]):(t!=null&&t.reverseArguments||(n[i]=r),n)},[])}});var Ki=w(_l=>{"use strict";m();T();N();Object.defineProperty(_l,"__esModule",{value:!0});_l.mergeDirective=_l.mergeDirectives=void 0;var Qx=Ae(),coe=pa();function loe(e,t){return!!e.find(n=>n.name.value===t.name.value)}function Yx(e,t){var n;return!!((n=t==null?void 0:t[e.name.value])!=null&&n.repeatable)}function doe(e,t){return t.some(({value:n})=>n===e.value)}function Jx(e,t){let n=[...t];for(let r of e){let i=n.findIndex(a=>a.name.value===r.name.value);if(i>-1){let a=n[i];if(a.value.kind==="ListValue"){let o=a.value.values,c=r.value.values;a.value.values=Toe(o,c,(l,p)=>{let f=l.value;return!f||!p.some(y=>y.value===f)})}else a.value=r.value}else n.push(r)}return n}function poe(e,t){return e.map((n,r,i)=>{let a=i.findIndex(o=>o.name.value===n.name.value);if(a!==r&&!Yx(n,t)){let o=i[a];return n.arguments=Jx(n.arguments,o.arguments),null}return n}).filter(coe.isSome)}function foe(e=[],t=[],n,r){let i=n&&n.reverseDirectives,a=i?e:t,o=i?t:e,c=poe([...a],r);for(let l of o)if(loe(c,l)&&!Yx(l,r)){let p=c.findIndex(y=>y.name.value===l.name.value),f=c[p];c[p].arguments=Jx(l.arguments||[],f.arguments||[])}else c.push(l);return c}_l.mergeDirectives=foe;function moe(e,t){let n=(0,Qx.print)(Q(M({},e),{description:void 0})),r=(0,Qx.print)(Q(M({},t),{description:void 0})),i=new RegExp("(directive @w*d*)|( on .*$)","g");if(!(n.replace(i,"")===r.replace(i,"")))throw new Error(`Unable to merge GraphQL directive "${e.name.value}". Existing directive: ${r} Received directive: - ${n}`)}function Noe(e,t){return t?(moe(e,t),Q(M({},e),{locations:[...t.locations,...e.locations.filter(n=>!doe(n,t.locations))]})):e}_l.mergeDirective=Noe;function Toe(e,t,n){return e.concat(t.filter(r=>n(r,e)))}});var HS=w(jT=>{"use strict";f();N();m();Object.defineProperty(jT,"__esModule",{value:!0});jT.mergeEnumValues=void 0;var Eoe=Ki(),hoe=pa();function yoe(e,t,n,r){if(n!=null&&n.consistentEnumMerge){let o=[];e&&o.push(...e),e=t,t=o}let i=new Map;if(e)for(let o of e)i.set(o.name.value,o);if(t)for(let o of t){let c=o.name.value;if(i.has(c)){let l=i.get(c);l.description=o.description||l.description,l.directives=(0,Eoe.mergeDirectives)(o.directives,l.directives,r)}else i.set(c,o)}let a=[...i.values()];return n&&n.sort&&a.sort(hoe.compareNodes),a}jT.mergeEnumValues=yoe});var zS=w(KT=>{"use strict";f();N();m();Object.defineProperty(KT,"__esModule",{value:!0});KT.mergeEnum=void 0;var Ioe=Ae(),goe=Ki(),_oe=HS();function voe(e,t,n,r){return t?{name:e.name,description:e.description||t.description,kind:n!=null&&n.convertExtensions||e.kind==="EnumTypeDefinition"||t.kind==="EnumTypeDefinition"?"EnumTypeDefinition":"EnumTypeExtension",loc:e.loc,directives:(0,goe.mergeDirectives)(e.directives,t.directives,n,r),values:(0,_oe.mergeEnumValues)(e.values,t.values,n)}:n!=null&&n.convertExtensions?Q(M({},e),{kind:Ioe.Kind.ENUM_TYPE_DEFINITION}):e}KT.mergeEnum=voe});var GT=w(Vn=>{"use strict";f();N();m();Object.defineProperty(Vn,"__esModule",{value:!0});Vn.defaultStringComparator=Vn.CompareVal=Vn.printTypeNode=Vn.isNonNullTypeNode=Vn.isListTypeNode=Vn.isWrappingTypeNode=Vn.extractType=Vn.isSourceTypes=Vn.isStringTypes=void 0;var Ip=Ae();function Soe(e){return typeof e=="string"}Vn.isStringTypes=Soe;function Ooe(e){return e instanceof Ip.Source}Vn.isSourceTypes=Ooe;function Doe(e){let t=e;for(;t.kind===Ip.Kind.LIST_TYPE||t.kind==="NonNullType";)t=t.type;return t}Vn.extractType=Doe;function boe(e){return e.kind!==Ip.Kind.NAMED_TYPE}Vn.isWrappingTypeNode=boe;function Jx(e){return e.kind===Ip.Kind.LIST_TYPE}Vn.isListTypeNode=Jx;function Hx(e){return e.kind===Ip.Kind.NON_NULL_TYPE}Vn.isNonNullTypeNode=Hx;function WS(e){return Jx(e)?`[${WS(e.type)}]`:Hx(e)?`${WS(e.type)}!`:e.name.value}Vn.printTypeNode=WS;var tc;(function(e){e[e.A_SMALLER_THAN_B=-1]="A_SMALLER_THAN_B",e[e.A_EQUALS_B=0]="A_EQUALS_B",e[e.A_GREATER_THAN_B=1]="A_GREATER_THAN_B"})(tc=Vn.CompareVal||(Vn.CompareVal={}));function Aoe(e,t){return e==null&&t==null?tc.A_EQUALS_B:e==null?tc.A_SMALLER_THAN_B:t==null?tc.A_GREATER_THAN_B:et?tc.A_GREATER_THAN_B:tc.A_EQUALS_B}Vn.defaultStringComparator=Aoe});var _p=w($T=>{"use strict";f();N();m();Object.defineProperty($T,"__esModule",{value:!0});$T.mergeFields=void 0;var Zr=GT(),Roe=Ki(),Foe=pa(),Poe=JS();function woe(e,t){let n=e.findIndex(r=>r.name.value===t.name.value);return[n>-1?e[n]:null,n]}function Loe(e,t,n,r,i){let a=[];if(n!=null&&a.push(...n),t!=null)for(let o of t){let[c,l]=woe(a,o);if(c&&!(r!=null&&r.ignoreFieldConflicts)){let p=(r==null?void 0:r.onFieldTypeConflict)&&r.onFieldTypeConflict(c,o,e,r==null?void 0:r.throwOnConflict)||Coe(e,c,o,r==null?void 0:r.throwOnConflict);p.arguments=(0,Poe.mergeArguments)(o.arguments||[],c.arguments||[],r),p.directives=(0,Roe.mergeDirectives)(o.directives,c.directives,r,i),p.description=o.description||c.description,a[l]=p}else a.push(o)}if(r&&r.sort&&a.sort(Foe.compareNodes),r&&r.exclusions){let o=r.exclusions;return a.filter(c=>!o.includes(`${e.name.value}.${c.name.value}`))}return a}$T.mergeFields=Loe;function Coe(e,t,n,r=!1){let i=(0,Zr.printTypeNode)(t.type),a=(0,Zr.printTypeNode)(n.type);if(i!==a){let o=(0,Zr.extractType)(t.type),c=(0,Zr.extractType)(n.type);if(o.name.value!==c.name.value)throw new Error(`Field "${n.name.value}" already defined with a different type. Declared as "${o.name.value}", but you tried to override with "${c.name.value}"`);if(!gp(t.type,n.type,!r))throw new Error(`Field '${e.name.value}.${t.name.value}' changed type from '${i}' to '${a}'`)}return(0,Zr.isNonNullTypeNode)(n.type)&&!(0,Zr.isNonNullTypeNode)(t.type)&&(t.type=n.type),t}function gp(e,t,n=!1){if(!(0,Zr.isWrappingTypeNode)(e)&&!(0,Zr.isWrappingTypeNode)(t))return e.toString()===t.toString();if((0,Zr.isNonNullTypeNode)(t)){let r=(0,Zr.isNonNullTypeNode)(e)?e.type:e;return gp(r,t.type)}return(0,Zr.isNonNullTypeNode)(e)?gp(t,e,n):(0,Zr.isListTypeNode)(e)?(0,Zr.isListTypeNode)(t)&&gp(e.type,t.type)||(0,Zr.isNonNullTypeNode)(t)&&gp(e,t.type):!1}});var XS=w(QT=>{"use strict";f();N();m();Object.defineProperty(QT,"__esModule",{value:!0});QT.mergeInputType=void 0;var Boe=Ae(),Uoe=_p(),koe=Ki();function Moe(e,t,n,r){if(t)try{return{name:e.name,description:e.description||t.description,kind:n!=null&&n.convertExtensions||e.kind==="InputObjectTypeDefinition"||t.kind==="InputObjectTypeDefinition"?"InputObjectTypeDefinition":"InputObjectTypeExtension",loc:e.loc,fields:(0,Uoe.mergeFields)(e,e.fields,t.fields,n),directives:(0,koe.mergeDirectives)(e.directives,t.directives,n,r)}}catch(i){throw new Error(`Unable to merge GraphQL input type "${e.name.value}": ${i.message}`)}return n!=null&&n.convertExtensions?Q(M({},e),{kind:Boe.Kind.INPUT_OBJECT_TYPE_DEFINITION}):e}QT.mergeInputType=Moe});var vp=w(YT=>{"use strict";f();N();m();Object.defineProperty(YT,"__esModule",{value:!0});YT.mergeNamedTypeArray=void 0;var xoe=pa();function qoe(e,t){return!!e.find(n=>n.name.value===t.name.value)}function Voe(e=[],t=[],n={}){let r=[...t,...e.filter(i=>!qoe(t,i))];return n&&n.sort&&r.sort(xoe.compareNodes),r}YT.mergeNamedTypeArray=Voe});var ZS=w(JT=>{"use strict";f();N();m();Object.defineProperty(JT,"__esModule",{value:!0});JT.mergeInterface=void 0;var joe=Ae(),Koe=_p(),Goe=Ki(),$oe=vp();function Qoe(e,t,n,r){if(t)try{return{name:e.name,description:e.description||t.description,kind:n!=null&&n.convertExtensions||e.kind==="InterfaceTypeDefinition"||t.kind==="InterfaceTypeDefinition"?"InterfaceTypeDefinition":"InterfaceTypeExtension",loc:e.loc,fields:(0,Koe.mergeFields)(e,e.fields,t.fields,n),directives:(0,Goe.mergeDirectives)(e.directives,t.directives,n,r),interfaces:e.interfaces?(0,$oe.mergeNamedTypeArray)(e.interfaces,t.interfaces,n):void 0}}catch(i){throw new Error(`Unable to merge GraphQL interface "${e.name.value}": ${i.message}`)}return n!=null&&n.convertExtensions?Q(M({},e),{kind:joe.Kind.INTERFACE_TYPE_DEFINITION}):e}JT.mergeInterface=Qoe});var eO=w(HT=>{"use strict";f();N();m();Object.defineProperty(HT,"__esModule",{value:!0});HT.mergeType=void 0;var Yoe=Ae(),Joe=_p(),Hoe=Ki(),zoe=vp();function Woe(e,t,n,r){if(t)try{return{name:e.name,description:e.description||t.description,kind:n!=null&&n.convertExtensions||e.kind==="ObjectTypeDefinition"||t.kind==="ObjectTypeDefinition"?"ObjectTypeDefinition":"ObjectTypeExtension",loc:e.loc,fields:(0,Joe.mergeFields)(e,e.fields,t.fields,n),directives:(0,Hoe.mergeDirectives)(e.directives,t.directives,n,r),interfaces:(0,zoe.mergeNamedTypeArray)(e.interfaces,t.interfaces,n)}}catch(i){throw new Error(`Unable to merge GraphQL type "${e.name.value}": ${i.message}`)}return n!=null&&n.convertExtensions?Q(M({},e),{kind:Yoe.Kind.OBJECT_TYPE_DEFINITION}):e}HT.mergeType=Woe});var tO=w(zT=>{"use strict";f();N();m();Object.defineProperty(zT,"__esModule",{value:!0});zT.mergeScalar=void 0;var Xoe=Ae(),Zoe=Ki();function eue(e,t,n,r){return t?{name:e.name,description:e.description||t.description,kind:n!=null&&n.convertExtensions||e.kind==="ScalarTypeDefinition"||t.kind==="ScalarTypeDefinition"?"ScalarTypeDefinition":"ScalarTypeExtension",loc:e.loc,directives:(0,Zoe.mergeDirectives)(e.directives,t.directives,n,r)}:n!=null&&n.convertExtensions?Q(M({},e),{kind:Xoe.Kind.SCALAR_TYPE_DEFINITION}):e}zT.mergeScalar=eue});var rO=w(WT=>{"use strict";f();N();m();Object.defineProperty(WT,"__esModule",{value:!0});WT.mergeUnion=void 0;var nO=Ae(),tue=Ki(),nue=vp();function rue(e,t,n,r){return t?{name:e.name,description:e.description||t.description,directives:(0,tue.mergeDirectives)(e.directives,t.directives,n,r),kind:n!=null&&n.convertExtensions||e.kind==="UnionTypeDefinition"||t.kind==="UnionTypeDefinition"?nO.Kind.UNION_TYPE_DEFINITION:nO.Kind.UNION_TYPE_EXTENSION,loc:e.loc,types:(0,nue.mergeNamedTypeArray)(e.types,t.types,n)}:n!=null&&n.convertExtensions?Q(M({},e),{kind:nO.Kind.UNION_TYPE_DEFINITION}):e}WT.mergeUnion=rue});var iO=w(nc=>{"use strict";f();N();m();Object.defineProperty(nc,"__esModule",{value:!0});nc.mergeSchemaDefs=nc.DEFAULT_OPERATION_TYPE_NAME_MAP=void 0;var Sp=Ae(),iue=Ki();nc.DEFAULT_OPERATION_TYPE_NAME_MAP={query:"Query",mutation:"Mutation",subscription:"Subscription"};function aue(e=[],t=[]){let n=[];for(let r in nc.DEFAULT_OPERATION_TYPE_NAME_MAP){let i=e.find(a=>a.operation===r)||t.find(a=>a.operation===r);i&&n.push(i)}return n}function sue(e,t,n,r){return t?{kind:e.kind===Sp.Kind.SCHEMA_DEFINITION||t.kind===Sp.Kind.SCHEMA_DEFINITION?Sp.Kind.SCHEMA_DEFINITION:Sp.Kind.SCHEMA_EXTENSION,description:e.description||t.description,directives:(0,iue.mergeDirectives)(e.directives,t.directives,n,r),operationTypes:aue(e.operationTypes,t.operationTypes)}:n!=null&&n.convertExtensions?Q(M({},e),{kind:Sp.Kind.SCHEMA_DEFINITION}):e}nc.mergeSchemaDefs=sue});var aO=w(Ka=>{"use strict";f();N();m();Object.defineProperty(Ka,"__esModule",{value:!0});Ka.mergeGraphQLNodes=Ka.isNamedDefinitionNode=Ka.schemaDefSymbol=void 0;var Ur=Ae(),oue=eO(),uue=zS(),cue=tO(),lue=rO(),due=XS(),pue=ZS(),fue=Ki(),mue=iO(),Nue=pa();Ka.schemaDefSymbol="SCHEMA_DEF_SYMBOL";function zx(e){return"name"in e}Ka.isNamedDefinitionNode=zx;function Tue(e,t,n={}){var i,a,o;let r=n;for(let c of e)if(zx(c)){let l=(i=c.name)==null?void 0:i.value;if(t!=null&&t.commentDescriptions&&(0,Nue.collectComment)(c),l==null)continue;if((a=t==null?void 0:t.exclusions)!=null&&a.includes(l+".*")||(o=t==null?void 0:t.exclusions)!=null&&o.includes(l))delete r[l];else switch(c.kind){case Ur.Kind.OBJECT_TYPE_DEFINITION:case Ur.Kind.OBJECT_TYPE_EXTENSION:r[l]=(0,oue.mergeType)(c,r[l],t,n);break;case Ur.Kind.ENUM_TYPE_DEFINITION:case Ur.Kind.ENUM_TYPE_EXTENSION:r[l]=(0,uue.mergeEnum)(c,r[l],t,n);break;case Ur.Kind.UNION_TYPE_DEFINITION:case Ur.Kind.UNION_TYPE_EXTENSION:r[l]=(0,lue.mergeUnion)(c,r[l],t,n);break;case Ur.Kind.SCALAR_TYPE_DEFINITION:case Ur.Kind.SCALAR_TYPE_EXTENSION:r[l]=(0,cue.mergeScalar)(c,r[l],t,n);break;case Ur.Kind.INPUT_OBJECT_TYPE_DEFINITION:case Ur.Kind.INPUT_OBJECT_TYPE_EXTENSION:r[l]=(0,due.mergeInputType)(c,r[l],t,n);break;case Ur.Kind.INTERFACE_TYPE_DEFINITION:case Ur.Kind.INTERFACE_TYPE_EXTENSION:r[l]=(0,pue.mergeInterface)(c,r[l],t,n);break;case Ur.Kind.DIRECTIVE_DEFINITION:r[l]=(0,fue.mergeDirective)(c,r[l]);break}}else(c.kind===Ur.Kind.SCHEMA_DEFINITION||c.kind===Ur.Kind.SCHEMA_EXTENSION)&&(r[Ka.schemaDefSymbol]=(0,mue.mergeSchemaDefs)(c,r[Ka.schemaDefSymbol],t));return r}Ka.mergeGraphQLNodes=Tue});var Zx=w(Dl=>{"use strict";f();N();m();Object.defineProperty(Dl,"__esModule",{value:!0});Dl.mergeGraphQLTypes=Dl.mergeTypeDefs=void 0;var Gi=Ae(),sO=GT(),vl=aO(),Ol=pa(),Wx=iO();function Eue(e,t){(0,Ol.resetComments)();let n={kind:Gi.Kind.DOCUMENT,definitions:Xx(e,M({useSchemaDefinition:!0,forceSchemaDefinition:!1,throwOnConflict:!1,commentDescriptions:!1},t))},r;return t!=null&&t.commentDescriptions?r=(0,Ol.printWithComments)(n):r=n,(0,Ol.resetComments)(),r}Dl.mergeTypeDefs=Eue;function Sl(e,t,n=[],r=[],i=new Set){if(e&&!i.has(e))if(i.add(e),typeof e=="function")Sl(e(),t,n,r,i);else if(Array.isArray(e))for(let a of e)Sl(a,t,n,r,i);else if((0,Gi.isSchema)(e)){let a=(0,Ol.getDocumentNodeFromSchema)(e,t);Sl(a.definitions,t,n,r,i)}else if((0,sO.isStringTypes)(e)||(0,sO.isSourceTypes)(e)){let a=(0,Gi.parse)(e,t);Sl(a.definitions,t,n,r,i)}else if(typeof e=="object"&&(0,Gi.isDefinitionNode)(e))e.kind===Gi.Kind.DIRECTIVE_DEFINITION?n.push(e):r.push(e);else if((0,Ol.isDocumentNode)(e))Sl(e.definitions,t,n,r,i);else throw new Error(`typeDefs must contain only strings, documents, schemas, or functions, got ${typeof e}`);return{allDirectives:n,allNodes:r}}function Xx(e,t){var c,l,p;(0,Ol.resetComments)();let{allDirectives:n,allNodes:r}=Sl(e,t),i=(0,vl.mergeGraphQLNodes)(n,t),a=(0,vl.mergeGraphQLNodes)(r,t,i);if(t!=null&&t.useSchemaDefinition){let T=a[vl.schemaDefSymbol]||{kind:Gi.Kind.SCHEMA_DEFINITION,operationTypes:[]},y=T.operationTypes;for(let g in Wx.DEFAULT_OPERATION_TYPE_NAME_MAP)if(!y.find(F=>F.operation===g)){let F=Wx.DEFAULT_OPERATION_TYPE_NAME_MAP[g],U=a[F];U!=null&&U.name!=null&&y.push({kind:Gi.Kind.OPERATION_TYPE_DEFINITION,type:{kind:Gi.Kind.NAMED_TYPE,name:U.name},operation:g})}((c=T==null?void 0:T.operationTypes)==null?void 0:c.length)!=null&&T.operationTypes.length>0&&(a[vl.schemaDefSymbol]=T)}t!=null&&t.forceSchemaDefinition&&!((p=(l=a[vl.schemaDefSymbol])==null?void 0:l.operationTypes)!=null&&p.length)&&(a[vl.schemaDefSymbol]={kind:Gi.Kind.SCHEMA_DEFINITION,operationTypes:[{kind:Gi.Kind.OPERATION_TYPE_DEFINITION,operation:"query",type:{kind:Gi.Kind.NAMED_TYPE,name:{kind:Gi.Kind.NAME,value:"Query"}}}]});let o=Object.values(a);if(t!=null&&t.sort){let T=typeof t.sort=="function"?t.sort:sO.defaultStringComparator;o.sort((y,g)=>{var _,F;return T((_=y.name)==null?void 0:_.value,(F=g.name)==null?void 0:F.value)})}return o}Dl.mergeGraphQLTypes=Xx});var eq=w(br=>{"use strict";f();N();m();Object.defineProperty(br,"__esModule",{value:!0});var ei=(zv(),Kf(Hv));ei.__exportStar(JS(),br);ei.__exportStar(Ki(),br);ei.__exportStar(HS(),br);ei.__exportStar(zS(),br);ei.__exportStar(_p(),br);ei.__exportStar(XS(),br);ei.__exportStar(ZS(),br);ei.__exportStar(vp(),br);ei.__exportStar(aO(),br);ei.__exportStar(Zx(),br);ei.__exportStar(tO(),br);ei.__exportStar(eO(),br);ei.__exportStar(rO(),br);ei.__exportStar(GT(),br)});var nq=w(nu=>{"use strict";f();N();m();Object.defineProperty(nu,"__esModule",{value:!0});nu.applyExtensions=nu.mergeExtensions=nu.extractExtensionsFromSchema=void 0;var tq=pa(),hue=pa();Object.defineProperty(nu,"extractExtensionsFromSchema",{enumerable:!0,get:function(){return hue.extractExtensionsFromSchema}});function yue(e){return(0,tq.mergeDeep)(e)}nu.mergeExtensions=yue;function bl(e,t){e&&(e.extensions=(0,tq.mergeDeep)([e.extensions||{},t||{}]))}function Iue(e,t){bl(e,t.schemaExtensions);for(let[n,r]of Object.entries(t.types||{})){let i=e.getType(n);if(i){if(bl(i,r.extensions),r.type==="object"||r.type==="interface")for(let[a,o]of Object.entries(r.fields)){let c=i.getFields()[a];if(c){bl(c,o.extensions);for(let[l,p]of Object.entries(o.arguments))bl(c.args.find(T=>T.name===l),p)}}else if(r.type==="input")for(let[a,o]of Object.entries(r.fields)){let c=i.getFields()[a];bl(c,o.extensions)}else if(r.type==="enum")for(let[a,o]of Object.entries(r.values)){let c=i.getValue(a);bl(c,o)}}}return e}nu.applyExtensions=Iue});var uO=w(Op=>{"use strict";f();N();m();Object.defineProperty(Op,"__esModule",{value:!0});var oO=(zv(),Kf(Hv));oO.__exportStar(Kx(),Op);oO.__exportStar(eq(),Op);oO.__exportStar(nq(),Op)});var cO=w(Je=>{"use strict";f();N();m();Object.defineProperty(Je,"__esModule",{value:!0});Je.TAG_DEFINITION_DATA=Je.SUBSCRIPTION_FILTER_DEFINITION_DATA=Je.SHAREABLE_DEFINITION_DATA=Je.SPECIFIED_BY_DEFINITION_DATA=Je.REQUIRES_SCOPES_DEFINITION_DATA=Je.REQUIRES_DEFINITION_DATA=Je.PROVIDES_DEFINITION_DATA=Je.LINK_DEFINITION_DATA=Je.KEY_DEFINITION_DATA=Je.OVERRIDE_DEFINITION_DATA=Je.REDIS_SUBSCRIBE_DEFINITION_DATA=Je.REDIS_PUBLISH_DEFINITION_DATA=Je.NATS_SUBSCRIBE_DEFINITION_DATA=Je.NATS_REQUEST_DEFINITION_DATA=Je.NATS_PUBLISH_DEFINITION_DATA=Je.KAFKA_SUBSCRIBE_DEFINITION_DATA=Je.KAFKA_PUBLISH_DEFINITION_DATA=Je.INTERFACE_OBJECT_DEFINITION_DATA=Je.INACCESSIBLE_DEFINITION_DATA=Je.EXTERNAL_DEFINITION_DATA=Je.EXTENDS_DEFINITION_DATA=Je.DEPRECATED_DEFINITION_DATA=Je.CONFIGURE_CHILD_DESCRIPTIONS_DEFINITION_DATA=Je.CONFIGURE_DESCRIPTION_DEFINITION_DATA=Je.COMPOSE_DIRECTIVE_DEFINITION_DATA=Je.AUTHENTICATED_DEFINITION_DATA=void 0;var it=hs(),fa=Jr(),ln=Ae(),q=lr();Je.AUTHENTICATED_DEFINITION_DATA={argumentTypeNodeByArgumentName:new Map([]),isRepeatable:!1,locations:new Set([q.ENUM_UPPER,q.FIELD_DEFINITION_UPPER,q.INTERFACE_UPPER,q.OBJECT_UPPER,q.SCALAR_UPPER]),name:q.AUTHENTICATED,node:it.AUTHENTICATED_DEFINITION,optionalArgumentNames:new Set,requiredArgumentNames:new Set};Je.COMPOSE_DIRECTIVE_DEFINITION_DATA={argumentTypeNodeByArgumentName:new Map([[q.NAME,{name:q.NAME,typeNode:it.REQUIRED_STRING_TYPE_NODE}]]),isRepeatable:!0,locations:new Set([q.SCHEMA_UPPER]),name:q.COMPOSE_DIRECTIVE,node:it.COMPOSE_DIRECTIVE_DEFINITION,optionalArgumentNames:new Set,requiredArgumentNames:new Set([q.NAME])};Je.CONFIGURE_DESCRIPTION_DEFINITION_DATA={argumentTypeNodeByArgumentName:new Map([[q.PROPAGATE,{name:q.PROPAGATE,typeNode:{kind:ln.Kind.NON_NULL_TYPE,type:(0,fa.stringToNamedTypeNode)(q.BOOLEAN_SCALAR)},defaultValue:{kind:ln.Kind.BOOLEAN,value:!0}}],[q.DESCRIPTION_OVERRIDE,{name:q.DESCRIPTION_OVERRIDE,typeNode:(0,fa.stringToNamedTypeNode)(q.STRING_SCALAR)}]]),isRepeatable:!1,locations:new Set([q.ARGUMENT_DEFINITION_UPPER,q.ENUM_UPPER,q.ENUM_VALUE_UPPER,q.FIELD_DEFINITION_UPPER,q.INTERFACE_UPPER,q.INPUT_OBJECT_UPPER,q.INPUT_FIELD_DEFINITION_UPPER,q.OBJECT_UPPER,q.SCALAR_UPPER,q.SCHEMA_UPPER,q.UNION_UPPER]),name:q.CONFIGURE_DESCRIPTION,node:it.CONFIGURE_DESCRIPTION_DEFINITION,optionalArgumentNames:new Set([q.PROPAGATE,q.DESCRIPTION_OVERRIDE]),requiredArgumentNames:new Set};Je.CONFIGURE_CHILD_DESCRIPTIONS_DEFINITION_DATA={argumentTypeNodeByArgumentName:new Map([[q.PROPAGATE,{name:q.PROPAGATE,typeNode:{kind:ln.Kind.NON_NULL_TYPE,type:(0,fa.stringToNamedTypeNode)(q.BOOLEAN_SCALAR)},defaultValue:{kind:ln.Kind.BOOLEAN,value:!0}}]]),isRepeatable:!1,locations:new Set([q.ENUM_UPPER,q.INPUT_OBJECT_UPPER,q.INTERFACE_UPPER,q.OBJECT_UPPER]),name:q.CONFIGURE_CHILD_DESCRIPTIONS,node:it.CONFIGURE_CHILD_DESCRIPTIONS_DEFINITION,optionalArgumentNames:new Set([q.PROPAGATE]),requiredArgumentNames:new Set};Je.DEPRECATED_DEFINITION_DATA={argumentTypeNodeByArgumentName:new Map([[q.REASON,{name:q.REASON,typeNode:(0,fa.stringToNamedTypeNode)(q.STRING_SCALAR),defaultValue:{kind:ln.Kind.STRING,value:ln.DEFAULT_DEPRECATION_REASON}}]]),isRepeatable:!1,locations:new Set([q.ARGUMENT_DEFINITION_UPPER,q.ENUM_VALUE_UPPER,q.FIELD_DEFINITION_UPPER,q.INPUT_FIELD_DEFINITION_UPPER]),name:q.DEPRECATED,node:it.DEPRECATED_DEFINITION,optionalArgumentNames:new Set([q.REASON]),requiredArgumentNames:new Set};Je.EXTENDS_DEFINITION_DATA={argumentTypeNodeByArgumentName:new Map,isRepeatable:!1,locations:new Set([q.INTERFACE_UPPER,q.OBJECT_UPPER]),name:q.EXTENDS,node:it.EXTENDS_DEFINITION,optionalArgumentNames:new Set,requiredArgumentNames:new Set};Je.EXTERNAL_DEFINITION_DATA={argumentTypeNodeByArgumentName:new Map,isRepeatable:!1,locations:new Set([q.FIELD_DEFINITION_UPPER,q.OBJECT_UPPER]),name:q.EXTERNAL,node:it.EXTERNAL_DEFINITION,optionalArgumentNames:new Set,requiredArgumentNames:new Set};Je.INACCESSIBLE_DEFINITION_DATA={argumentTypeNodeByArgumentName:new Map,isRepeatable:!1,locations:new Set([q.ARGUMENT_DEFINITION_UPPER,q.ENUM_UPPER,q.ENUM_VALUE_UPPER,q.FIELD_DEFINITION_UPPER,q.INPUT_FIELD_DEFINITION_UPPER,q.INPUT_OBJECT_UPPER,q.INTERFACE_UPPER,q.OBJECT_UPPER,q.SCALAR_UPPER,q.UNION_UPPER]),name:q.INACCESSIBLE,node:it.INACCESSIBLE_DEFINITION,optionalArgumentNames:new Set,requiredArgumentNames:new Set};Je.INTERFACE_OBJECT_DEFINITION_DATA={argumentTypeNodeByArgumentName:new Map,isRepeatable:!1,locations:new Set([q.OBJECT_UPPER]),name:q.INTERFACE_OBJECT,node:it.INTERFACE_OBJECT_DEFINITION,optionalArgumentNames:new Set,requiredArgumentNames:new Set};Je.KAFKA_PUBLISH_DEFINITION_DATA={argumentTypeNodeByArgumentName:new Map([[q.TOPIC,{name:q.TOPIC,typeNode:it.REQUIRED_STRING_TYPE_NODE}],[q.PROVIDER_ID,{name:q.PROVIDER_ID,typeNode:it.REQUIRED_STRING_TYPE_NODE,defaultValue:{kind:ln.Kind.STRING,value:q.DEFAULT_EDFS_PROVIDER_ID}}]]),isRepeatable:!1,locations:new Set([q.FIELD_DEFINITION_UPPER]),name:q.EDFS_KAFKA_PUBLISH,node:it.EDFS_KAFKA_PUBLISH_DEFINITION,optionalArgumentNames:new Set([q.PROVIDER_ID]),requiredArgumentNames:new Set([q.TOPIC])};Je.KAFKA_SUBSCRIBE_DEFINITION_DATA={argumentTypeNodeByArgumentName:new Map([[q.TOPICS,{name:q.TOPICS,typeNode:{kind:ln.Kind.NON_NULL_TYPE,type:{kind:ln.Kind.LIST_TYPE,type:it.REQUIRED_STRING_TYPE_NODE}}}],[q.PROVIDER_ID,{name:q.PROVIDER_ID,typeNode:it.REQUIRED_STRING_TYPE_NODE,defaultValue:{kind:ln.Kind.STRING,value:q.DEFAULT_EDFS_PROVIDER_ID}}]]),isRepeatable:!1,locations:new Set([q.FIELD_DEFINITION_UPPER]),name:q.EDFS_KAFKA_SUBSCRIBE,node:it.EDFS_KAFKA_SUBSCRIBE_DEFINITION,optionalArgumentNames:new Set([q.PROVIDER_ID]),requiredArgumentNames:new Set([q.TOPICS])};Je.NATS_PUBLISH_DEFINITION_DATA={argumentTypeNodeByArgumentName:new Map([[q.SUBJECT,{name:q.SUBJECT,typeNode:it.REQUIRED_STRING_TYPE_NODE}],[q.PROVIDER_ID,{name:q.PROVIDER_ID,typeNode:it.REQUIRED_STRING_TYPE_NODE,defaultValue:{kind:ln.Kind.STRING,value:q.DEFAULT_EDFS_PROVIDER_ID}}]]),isRepeatable:!1,locations:new Set([q.FIELD_DEFINITION_UPPER]),name:q.EDFS_NATS_PUBLISH,node:it.EDFS_NATS_PUBLISH_DEFINITION,optionalArgumentNames:new Set([q.PROVIDER_ID]),requiredArgumentNames:new Set([q.SUBJECT])};Je.NATS_REQUEST_DEFINITION_DATA={argumentTypeNodeByArgumentName:new Map([[q.SUBJECT,{name:q.SUBJECT,typeNode:it.REQUIRED_STRING_TYPE_NODE}],[q.PROVIDER_ID,{name:q.PROVIDER_ID,typeNode:it.REQUIRED_STRING_TYPE_NODE,defaultValue:{kind:ln.Kind.STRING,value:q.DEFAULT_EDFS_PROVIDER_ID}}]]),isRepeatable:!1,locations:new Set([q.FIELD_DEFINITION_UPPER]),name:q.EDFS_NATS_REQUEST,node:it.EDFS_NATS_REQUEST_DEFINITION,optionalArgumentNames:new Set([q.PROVIDER_ID]),requiredArgumentNames:new Set([q.SUBJECT])};Je.NATS_SUBSCRIBE_DEFINITION_DATA={argumentTypeNodeByArgumentName:new Map([[q.SUBJECTS,{name:q.SUBJECTS,typeNode:{kind:ln.Kind.NON_NULL_TYPE,type:{kind:ln.Kind.LIST_TYPE,type:it.REQUIRED_STRING_TYPE_NODE}}}],[q.PROVIDER_ID,{name:q.PROVIDER_ID,typeNode:it.REQUIRED_STRING_TYPE_NODE,defaultValue:{kind:ln.Kind.STRING,value:q.DEFAULT_EDFS_PROVIDER_ID}}],[q.STREAM_CONFIGURATION,{name:q.STREAM_CONFIGURATION,typeNode:(0,fa.stringToNamedTypeNode)(q.EDFS_NATS_STREAM_CONFIGURATION)}]]),isRepeatable:!1,locations:new Set([q.FIELD_DEFINITION_UPPER]),name:q.EDFS_NATS_SUBSCRIBE,node:it.EDFS_NATS_SUBSCRIBE_DEFINITION,optionalArgumentNames:new Set([q.PROVIDER_ID]),requiredArgumentNames:new Set([q.SUBJECTS])};Je.REDIS_PUBLISH_DEFINITION_DATA={argumentTypeNodeByArgumentName:new Map([[q.CHANNEL,{name:q.CHANNEL,typeNode:it.REQUIRED_STRING_TYPE_NODE}],[q.PROVIDER_ID,{name:q.PROVIDER_ID,typeNode:it.REQUIRED_STRING_TYPE_NODE,defaultValue:{kind:ln.Kind.STRING,value:q.DEFAULT_EDFS_PROVIDER_ID}}]]),isRepeatable:!1,locations:new Set([q.FIELD_DEFINITION_UPPER]),name:q.EDFS_REDIS_PUBLISH,node:it.EDFS_REDIS_PUBLISH_DEFINITION,optionalArgumentNames:new Set([q.PROVIDER_ID]),requiredArgumentNames:new Set([q.CHANNEL])};Je.REDIS_SUBSCRIBE_DEFINITION_DATA={argumentTypeNodeByArgumentName:new Map([[q.CHANNELS,{name:q.CHANNELS,typeNode:{kind:ln.Kind.NON_NULL_TYPE,type:{kind:ln.Kind.LIST_TYPE,type:it.REQUIRED_STRING_TYPE_NODE}}}],[q.PROVIDER_ID,{name:q.PROVIDER_ID,typeNode:it.REQUIRED_STRING_TYPE_NODE,defaultValue:{kind:ln.Kind.STRING,value:q.DEFAULT_EDFS_PROVIDER_ID}}]]),isRepeatable:!1,locations:new Set([q.FIELD_DEFINITION_UPPER]),name:q.EDFS_REDIS_SUBSCRIBE,node:it.EDFS_REDIS_SUBSCRIBE_DEFINITION,optionalArgumentNames:new Set([q.PROVIDER_ID]),requiredArgumentNames:new Set([q.CHANNELS])};Je.OVERRIDE_DEFINITION_DATA={argumentTypeNodeByArgumentName:new Map([[q.FROM,{name:q.FROM,typeNode:it.REQUIRED_STRING_TYPE_NODE}]]),isRepeatable:!1,locations:new Set([q.FIELD_DEFINITION_UPPER]),name:q.OVERRIDE,node:it.OVERRIDE_DEFINITION,optionalArgumentNames:new Set,requiredArgumentNames:new Set([q.FROM])};Je.KEY_DEFINITION_DATA={argumentTypeNodeByArgumentName:new Map([[q.FIELDS,{name:q.FIELDS,typeNode:it.REQUIRED_FIELDSET_TYPE_NODE}],[q.RESOLVABLE,{name:q.RESOLVABLE,typeNode:(0,fa.stringToNamedTypeNode)(q.BOOLEAN_SCALAR),defaultValue:{kind:ln.Kind.BOOLEAN,value:!0}}]]),isRepeatable:!0,locations:new Set([q.INTERFACE_UPPER,q.OBJECT_UPPER]),name:q.KEY,node:it.KEY_DEFINITION,optionalArgumentNames:new Set([q.RESOLVABLE]),requiredArgumentNames:new Set([q.FIELDS])};Je.LINK_DEFINITION_DATA={argumentTypeNodeByArgumentName:new Map([[q.URL_LOWER,{name:q.URL_LOWER,typeNode:it.REQUIRED_STRING_TYPE_NODE}],[q.AS,{name:q.AS,typeNode:(0,fa.stringToNamedTypeNode)(q.STRING_SCALAR)}],[q.FOR,{name:q.FOR,typeNode:(0,fa.stringToNamedTypeNode)(q.LINK_PURPOSE)}],[q.IMPORT,{name:q.IMPORT,typeNode:{kind:ln.Kind.LIST_TYPE,type:(0,fa.stringToNamedTypeNode)(q.LINK_IMPORT)}}]]),isRepeatable:!0,locations:new Set([q.SCHEMA_UPPER]),name:q.LINK,node:it.LINK_DEFINITION,optionalArgumentNames:new Set([q.AS,q.FOR,q.IMPORT]),requiredArgumentNames:new Set([q.URL_LOWER])};Je.PROVIDES_DEFINITION_DATA={argumentTypeNodeByArgumentName:new Map([[q.FIELDS,{name:q.FIELDS,typeNode:it.REQUIRED_FIELDSET_TYPE_NODE}]]),isRepeatable:!1,locations:new Set([q.FIELD_DEFINITION_UPPER]),name:q.PROVIDES,node:it.PROVIDES_DEFINITION,optionalArgumentNames:new Set,requiredArgumentNames:new Set([q.FIELDS])};Je.REQUIRES_DEFINITION_DATA={argumentTypeNodeByArgumentName:new Map([[q.FIELDS,{name:q.FIELDS,typeNode:it.REQUIRED_FIELDSET_TYPE_NODE}]]),isRepeatable:!1,locations:new Set([q.FIELD_DEFINITION_UPPER]),name:q.REQUIRES,node:it.REQUIRES_DEFINITION,optionalArgumentNames:new Set,requiredArgumentNames:new Set([q.FIELDS])};Je.REQUIRES_SCOPES_DEFINITION_DATA={argumentTypeNodeByArgumentName:new Map([[q.SCOPES,{name:q.SCOPES,typeNode:{kind:ln.Kind.NON_NULL_TYPE,type:{kind:ln.Kind.LIST_TYPE,type:{kind:ln.Kind.NON_NULL_TYPE,type:{kind:ln.Kind.LIST_TYPE,type:{kind:ln.Kind.NON_NULL_TYPE,type:(0,fa.stringToNamedTypeNode)(q.SCOPE_SCALAR)}}}}}}]]),isRepeatable:!1,locations:new Set([q.ENUM_UPPER,q.FIELD_DEFINITION_UPPER,q.INTERFACE_UPPER,q.OBJECT_UPPER,q.SCALAR_UPPER]),name:q.REQUIRES_SCOPES,node:it.REQUIRES_SCOPES_DEFINITION,optionalArgumentNames:new Set,requiredArgumentNames:new Set([q.SCOPES])};Je.SPECIFIED_BY_DEFINITION_DATA={argumentTypeNodeByArgumentName:new Map([[q.URL_LOWER,{name:q.URL_LOWER,typeNode:it.REQUIRED_STRING_TYPE_NODE}]]),isRepeatable:!1,locations:new Set([q.SCALAR_UPPER]),name:q.SPECIFIED_BY,node:it.SPECIFIED_BY_DEFINITION,optionalArgumentNames:new Set,requiredArgumentNames:new Set([q.URL_LOWER])};Je.SHAREABLE_DEFINITION_DATA={argumentTypeNodeByArgumentName:new Map,isRepeatable:!0,locations:new Set([q.FIELD_DEFINITION_UPPER,q.OBJECT_UPPER]),name:q.SHAREABLE,node:it.SHAREABLE_DEFINITION,optionalArgumentNames:new Set,requiredArgumentNames:new Set};Je.SUBSCRIPTION_FILTER_DEFINITION_DATA={argumentTypeNodeByArgumentName:new Map([[q.CONDITION,{name:q.CONDITION,typeNode:{kind:ln.Kind.NON_NULL_TYPE,type:(0,fa.stringToNamedTypeNode)(q.SUBSCRIPTION_FILTER_CONDITION)}}]]),isRepeatable:!1,locations:new Set([q.FIELD_DEFINITION_UPPER]),name:q.SUBSCRIPTION_FILTER,node:it.SUBSCRIPTION_FILTER_DEFINITION,optionalArgumentNames:new Set,requiredArgumentNames:new Set([q.CONDITION])};Je.TAG_DEFINITION_DATA={argumentTypeNodeByArgumentName:new Map([[q.NAME,{name:q.NAME,typeNode:it.REQUIRED_STRING_TYPE_NODE}]]),isRepeatable:!0,locations:new Set([q.ARGUMENT_DEFINITION_UPPER,q.ENUM_UPPER,q.ENUM_VALUE_UPPER,q.FIELD_DEFINITION_UPPER,q.INPUT_FIELD_DEFINITION_UPPER,q.INPUT_OBJECT_UPPER,q.INTERFACE_UPPER,q.OBJECT_UPPER,q.SCALAR_UPPER,q.UNION_UPPER]),name:q.TAG,node:it.TAG_DEFINITION,optionalArgumentNames:new Set,requiredArgumentNames:new Set([q.NAME])}});var Dp=w(ma=>{"use strict";f();N();m();Object.defineProperty(ma,"__esModule",{value:!0});ma.newFieldSetData=gue;ma.extractFieldSetValue=_ue;ma.getNormalizedFieldSet=vue;ma.getInitialFieldCoordsPath=Sue;ma.validateKeyFieldSets=Oue;ma.getConditionalFieldSetDirectiveName=Due;ma.isNodeQuery=bue;ma.validateArgumentTemplateReferences=Aue;ma.initializeDirectiveDefinitionDatas=Rue;var nr=Ae(),rq=Jr(),Ar=sa(),iq=hs(),lO=Jo(),mn=cO(),kt=lr(),ru=Hr();function gue(){return{provides:new Map,requires:new Map}}function _ue(e,t,n){if(!n||n.length>1)return;let r=n[0].arguments;if(!r||r.length!==1)return;let i=r[0];i.name.value!==kt.FIELDS||i.value.kind!==nr.Kind.STRING||t.set(e,i.value.value)}function vue(e){return(0,nr.print)((0,rq.lexicographicallySortDocumentNode)(e)).replaceAll(/\s+/g," ").slice(2,-2)}function Sue(e,t){return e?[t]:[]}function Oue(e,t,n){let r=e.entityInterfaceDataByTypeName.get(t.name),i=t.name,a=[],o=[],c=r?void 0:e.internalGraph.addEntityDataNode(t.name),l=e.internalGraph.addOrUpdateNode(t.name),p=0;for(let[T,{documentNode:y,isUnresolvable:g,rawFieldSet:_}]of n){r&&(r.resolvable||(r.resolvable=!g)),p+=1;let F=[],U=[t],K=[],J=[],ee=new Set,W=-1,Te=!0,de="";if((0,nr.visit)(y,{Argument:{enter(we){return F.push((0,Ar.unexpectedArgumentErrorMessage)(_,`${U[W].name}.${de}`,we.name.value)),nr.BREAK}},Field:{enter(we){let qe=U[W],et=qe.name;if(Te){let bn=`${et}.${de}`,Vt=qe.fieldDataByFieldName.get(de);if(!Vt)return F.push((0,Ar.undefinedFieldInFieldSetErrorMessage)(_,bn,de)),nr.BREAK;let dn=(0,lO.getTypeNodeNamedTypeName)(Vt.node.type),Rr=e.parentDefinitionDataByTypeName.get(dn),Fr=Rr?Rr.kind:nr.Kind.SCALAR_TYPE_DEFINITION;return F.push((0,Ar.invalidSelectionSetErrorMessage)(_,[bn],dn,(0,ru.kindToTypeString)(Fr))),nr.BREAK}let X=we.name.value,ve=`${et}.${X}`;de=X;let gt=qe.fieldDataByFieldName.get(X);if(!gt)return F.push((0,Ar.undefinedFieldInFieldSetErrorMessage)(_,et,X)),nr.BREAK;if(gt.argumentDataByArgumentName.size)return F.push((0,Ar.argumentsInKeyFieldSetErrorMessage)(_,ve)),nr.BREAK;if(K[W].has(X))return F.push((0,Ar.duplicateFieldInFieldSetErrorMessage)(_,ve)),nr.BREAK;(0,ru.getValueOrDefault)((0,ru.getValueOrDefault)(e.keyFieldSetsByEntityTypeNameByFieldCoords,ve,()=>new Map),i,()=>new Set).add(T),J.push(X),gt.isShareableBySubgraphName.set(e.subgraphName,!0),K[W].add(X),(0,ru.getValueOrDefault)(e.keyFieldNamesByParentTypeName,et,()=>new Set).add(X);let Ht=(0,lO.getTypeNodeNamedTypeName)(gt.node.type);if(iq.BASE_SCALARS.has(Ht)){ee.add(J.join(kt.PERIOD)),J.pop();return}let zt=e.parentDefinitionDataByTypeName.get(Ht);if(!zt)return F.push((0,Ar.unknownTypeInFieldSetErrorMessage)(_,ve,Ht)),nr.BREAK;if(zt.kind===nr.Kind.OBJECT_TYPE_DEFINITION){Te=!0,U.push(zt);return}if((0,rq.isKindAbstract)(zt.kind))return F.push((0,Ar.abstractTypeInKeyFieldSetErrorMessage)(_,ve,Ht,(0,ru.kindToTypeString)(zt.kind))),nr.BREAK;ee.add(J.join(kt.PERIOD)),J.pop()}},InlineFragment:{enter(){return F.push(Ar.inlineFragmentInFieldSetErrorMessage),nr.BREAK}},SelectionSet:{enter(){if(!Te){let we=U[W],et=`${we.name}.${de}`,X=we.fieldDataByFieldName.get(de);if(!X)return F.push((0,Ar.undefinedFieldInFieldSetErrorMessage)(_,et,de)),nr.BREAK;let ve=(0,lO.getTypeNodeNamedTypeName)(X.node.type),gt=e.parentDefinitionDataByTypeName.get(ve),Ht=gt?gt.kind:nr.Kind.SCALAR_TYPE_DEFINITION;return F.push((0,Ar.invalidSelectionSetDefinitionErrorMessage)(_,[et],ve,(0,ru.kindToTypeString)(Ht))),nr.BREAK}if(W+=1,Te=!1,W<0||W>=U.length)return F.push((0,Ar.unparsableFieldSetSelectionErrorMessage)(_,de)),nr.BREAK;K.push(new Set)},leave(){if(Te){let qe=U[W].name,et=U[W+1],X=`${qe}.${de}`;F.push((0,Ar.invalidSelectionSetErrorMessage)(_,[X],et.name,(0,ru.kindToTypeString)(et.kind))),Te=!1}W-=1,U.pop(),K.pop()}}}),F.length>0){e.errors.push((0,Ar.invalidDirectiveError)(kt.KEY,i,(0,ru.numberToOrdinal)(p),F));continue}a.push(M({fieldName:"",selectionSet:T},g?{disableEntityResolver:!0}:{})),l.satisfiedFieldSets.add(T),!g&&(c==null||c.addTargetSubgraphByFieldSet(T,e.subgraphName),o.push(ee))}if(a.length>0)return a}function Due(e){return e?kt.PROVIDES:kt.REQUIRES}function bue(e,t){return e===kt.QUERY||t===nr.OperationTypeNode.QUERY}function Aue(e,t,n){let r=e.matchAll(iq.EDFS_ARGS_REGEXP),i=new Set,a=new Set;for(let o of r){if(o.length<2){a.add(o[0]);continue}t.has(o[1])||i.add(o[1])}for(let o of i)n.push((0,Ar.undefinedEventSubjectsArgumentErrorMessage)(o));for(let o of a)n.push((0,Ar.invalidEventSubjectsArgumentErrorMessage)(o))}function Rue(){return new Map([[kt.AUTHENTICATED,mn.AUTHENTICATED_DEFINITION_DATA],[kt.COMPOSE_DIRECTIVE,mn.COMPOSE_DIRECTIVE_DEFINITION_DATA],[kt.CONFIGURE_DESCRIPTION,mn.CONFIGURE_DESCRIPTION_DEFINITION_DATA],[kt.CONFIGURE_CHILD_DESCRIPTIONS,mn.CONFIGURE_CHILD_DESCRIPTIONS_DEFINITION_DATA],[kt.DEPRECATED,mn.DEPRECATED_DEFINITION_DATA],[kt.EDFS_KAFKA_PUBLISH,mn.KAFKA_PUBLISH_DEFINITION_DATA],[kt.EDFS_KAFKA_SUBSCRIBE,mn.KAFKA_SUBSCRIBE_DEFINITION_DATA],[kt.EDFS_NATS_PUBLISH,mn.NATS_PUBLISH_DEFINITION_DATA],[kt.EDFS_NATS_REQUEST,mn.NATS_REQUEST_DEFINITION_DATA],[kt.EDFS_NATS_SUBSCRIBE,mn.NATS_SUBSCRIBE_DEFINITION_DATA],[kt.EDFS_REDIS_PUBLISH,mn.REDIS_PUBLISH_DEFINITION_DATA],[kt.EDFS_REDIS_SUBSCRIBE,mn.REDIS_SUBSCRIBE_DEFINITION_DATA],[kt.EXTENDS,mn.EXTENDS_DEFINITION_DATA],[kt.EXTERNAL,mn.EXTERNAL_DEFINITION_DATA],[kt.INACCESSIBLE,mn.INACCESSIBLE_DEFINITION_DATA],[kt.INTERFACE_OBJECT,mn.INTERFACE_OBJECT_DEFINITION_DATA],[kt.KEY,mn.KEY_DEFINITION_DATA],[kt.LINK,mn.LINK_DEFINITION_DATA],[kt.OVERRIDE,mn.OVERRIDE_DEFINITION_DATA],[kt.PROVIDES,mn.PROVIDES_DEFINITION_DATA],[kt.REQUIRES,mn.REQUIRES_DEFINITION_DATA],[kt.REQUIRES_SCOPES,mn.REQUIRES_SCOPES_DEFINITION_DATA],[kt.SHAREABLE,mn.SHAREABLE_DEFINITION_DATA],[kt.SPECIFIED_BY,mn.SPECIFIED_BY_DEFINITION_DATA],[kt.SUBSCRIPTION_FILTER,mn.SUBSCRIPTION_FILTER_DEFINITION_DATA],[kt.TAG,mn.TAG_DEFINITION_DATA]])}});var pO=w(dO=>{"use strict";f();N();m();Object.defineProperty(dO,"__esModule",{value:!0});dO.recordSubgraphName=Fue;function Fue(e,t,n){if(!t.has(e)){t.add(e);return}n.add(e)}});var mO=w(XT=>{"use strict";f();N();m();Object.defineProperty(XT,"__esModule",{value:!0});XT.Warning=void 0;var fO=class extends Error{constructor(n){super(n.message);v(this,"subgraph");this.name="Warning",this.subgraph=n.subgraph}};XT.Warning=fO});var eE=w(Na=>{"use strict";f();N();m();Object.defineProperty(Na,"__esModule",{value:!0});Na.invalidOverrideTargetSubgraphNameWarning=Pue;Na.externalInterfaceFieldsWarning=wue;Na.nonExternalConditionalFieldWarning=Lue;Na.unimplementedInterfaceOutputTypeWarning=Cue;Na.invalidExternalFieldWarning=Bue;Na.requiresDefinedOnNonEntityFieldWarning=Uue;Na.consumerInactiveThresholdInvalidValueWarning=kue;Na.externalEntityExtensionKeyFieldWarning=Mue;Na.fieldAlreadyProvidedWarning=xue;var _s=mO(),NO=lr();function Pue(e,t,n,r){return new _s.Warning({message:`The Object type "${t}" defines the directive "@override(from: "${e}")" on the following field`+(n.length>1?"s":"")+': "'+n.join(NO.QUOTATION_JOIN)+`". + ${n}`)}function Noe(e,t){return t?(moe(e,t),Q(M({},e),{locations:[...t.locations,...e.locations.filter(n=>!doe(n,t.locations))]})):e}_l.mergeDirective=Noe;function Toe(e,t,n){return e.concat(t.filter(r=>n(r,e)))}});var zS=w(GT=>{"use strict";m();T();N();Object.defineProperty(GT,"__esModule",{value:!0});GT.mergeEnumValues=void 0;var Eoe=Ki(),hoe=pa();function yoe(e,t,n,r){if(n!=null&&n.consistentEnumMerge){let o=[];e&&o.push(...e),e=t,t=o}let i=new Map;if(e)for(let o of e)i.set(o.name.value,o);if(t)for(let o of t){let c=o.name.value;if(i.has(c)){let l=i.get(c);l.description=o.description||l.description,l.directives=(0,Eoe.mergeDirectives)(o.directives,l.directives,r)}else i.set(c,o)}let a=[...i.values()];return n&&n.sort&&a.sort(hoe.compareNodes),a}GT.mergeEnumValues=yoe});var WS=w($T=>{"use strict";m();T();N();Object.defineProperty($T,"__esModule",{value:!0});$T.mergeEnum=void 0;var Ioe=Ae(),goe=Ki(),_oe=zS();function voe(e,t,n,r){return t?{name:e.name,description:e.description||t.description,kind:n!=null&&n.convertExtensions||e.kind==="EnumTypeDefinition"||t.kind==="EnumTypeDefinition"?"EnumTypeDefinition":"EnumTypeExtension",loc:e.loc,directives:(0,goe.mergeDirectives)(e.directives,t.directives,n,r),values:(0,_oe.mergeEnumValues)(e.values,t.values,n)}:n!=null&&n.convertExtensions?Q(M({},e),{kind:Ioe.Kind.ENUM_TYPE_DEFINITION}):e}$T.mergeEnum=voe});var QT=w(Vn=>{"use strict";m();T();N();Object.defineProperty(Vn,"__esModule",{value:!0});Vn.defaultStringComparator=Vn.CompareVal=Vn.printTypeNode=Vn.isNonNullTypeNode=Vn.isListTypeNode=Vn.isWrappingTypeNode=Vn.extractType=Vn.isSourceTypes=Vn.isStringTypes=void 0;var gp=Ae();function Soe(e){return typeof e=="string"}Vn.isStringTypes=Soe;function Ooe(e){return e instanceof gp.Source}Vn.isSourceTypes=Ooe;function Doe(e){let t=e;for(;t.kind===gp.Kind.LIST_TYPE||t.kind==="NonNullType";)t=t.type;return t}Vn.extractType=Doe;function boe(e){return e.kind!==gp.Kind.NAMED_TYPE}Vn.isWrappingTypeNode=boe;function Hx(e){return e.kind===gp.Kind.LIST_TYPE}Vn.isListTypeNode=Hx;function zx(e){return e.kind===gp.Kind.NON_NULL_TYPE}Vn.isNonNullTypeNode=zx;function XS(e){return Hx(e)?`[${XS(e.type)}]`:zx(e)?`${XS(e.type)}!`:e.name.value}Vn.printTypeNode=XS;var tc;(function(e){e[e.A_SMALLER_THAN_B=-1]="A_SMALLER_THAN_B",e[e.A_EQUALS_B=0]="A_EQUALS_B",e[e.A_GREATER_THAN_B=1]="A_GREATER_THAN_B"})(tc=Vn.CompareVal||(Vn.CompareVal={}));function Aoe(e,t){return e==null&&t==null?tc.A_EQUALS_B:e==null?tc.A_SMALLER_THAN_B:t==null?tc.A_GREATER_THAN_B:et?tc.A_GREATER_THAN_B:tc.A_EQUALS_B}Vn.defaultStringComparator=Aoe});var vp=w(YT=>{"use strict";m();T();N();Object.defineProperty(YT,"__esModule",{value:!0});YT.mergeFields=void 0;var Zr=QT(),Roe=Ki(),Foe=pa(),Poe=HS();function woe(e,t){let n=e.findIndex(r=>r.name.value===t.name.value);return[n>-1?e[n]:null,n]}function Loe(e,t,n,r,i){let a=[];if(n!=null&&a.push(...n),t!=null)for(let o of t){let[c,l]=woe(a,o);if(c&&!(r!=null&&r.ignoreFieldConflicts)){let p=(r==null?void 0:r.onFieldTypeConflict)&&r.onFieldTypeConflict(c,o,e,r==null?void 0:r.throwOnConflict)||Coe(e,c,o,r==null?void 0:r.throwOnConflict);p.arguments=(0,Poe.mergeArguments)(o.arguments||[],c.arguments||[],r),p.directives=(0,Roe.mergeDirectives)(o.directives,c.directives,r,i),p.description=o.description||c.description,a[l]=p}else a.push(o)}if(r&&r.sort&&a.sort(Foe.compareNodes),r&&r.exclusions){let o=r.exclusions;return a.filter(c=>!o.includes(`${e.name.value}.${c.name.value}`))}return a}YT.mergeFields=Loe;function Coe(e,t,n,r=!1){let i=(0,Zr.printTypeNode)(t.type),a=(0,Zr.printTypeNode)(n.type);if(i!==a){let o=(0,Zr.extractType)(t.type),c=(0,Zr.extractType)(n.type);if(o.name.value!==c.name.value)throw new Error(`Field "${n.name.value}" already defined with a different type. Declared as "${o.name.value}", but you tried to override with "${c.name.value}"`);if(!_p(t.type,n.type,!r))throw new Error(`Field '${e.name.value}.${t.name.value}' changed type from '${i}' to '${a}'`)}return(0,Zr.isNonNullTypeNode)(n.type)&&!(0,Zr.isNonNullTypeNode)(t.type)&&(t.type=n.type),t}function _p(e,t,n=!1){if(!(0,Zr.isWrappingTypeNode)(e)&&!(0,Zr.isWrappingTypeNode)(t))return e.toString()===t.toString();if((0,Zr.isNonNullTypeNode)(t)){let r=(0,Zr.isNonNullTypeNode)(e)?e.type:e;return _p(r,t.type)}return(0,Zr.isNonNullTypeNode)(e)?_p(t,e,n):(0,Zr.isListTypeNode)(e)?(0,Zr.isListTypeNode)(t)&&_p(e.type,t.type)||(0,Zr.isNonNullTypeNode)(t)&&_p(e,t.type):!1}});var ZS=w(JT=>{"use strict";m();T();N();Object.defineProperty(JT,"__esModule",{value:!0});JT.mergeInputType=void 0;var Boe=Ae(),Uoe=vp(),koe=Ki();function Moe(e,t,n,r){if(t)try{return{name:e.name,description:e.description||t.description,kind:n!=null&&n.convertExtensions||e.kind==="InputObjectTypeDefinition"||t.kind==="InputObjectTypeDefinition"?"InputObjectTypeDefinition":"InputObjectTypeExtension",loc:e.loc,fields:(0,Uoe.mergeFields)(e,e.fields,t.fields,n),directives:(0,koe.mergeDirectives)(e.directives,t.directives,n,r)}}catch(i){throw new Error(`Unable to merge GraphQL input type "${e.name.value}": ${i.message}`)}return n!=null&&n.convertExtensions?Q(M({},e),{kind:Boe.Kind.INPUT_OBJECT_TYPE_DEFINITION}):e}JT.mergeInputType=Moe});var Sp=w(HT=>{"use strict";m();T();N();Object.defineProperty(HT,"__esModule",{value:!0});HT.mergeNamedTypeArray=void 0;var xoe=pa();function qoe(e,t){return!!e.find(n=>n.name.value===t.name.value)}function Voe(e=[],t=[],n={}){let r=[...t,...e.filter(i=>!qoe(t,i))];return n&&n.sort&&r.sort(xoe.compareNodes),r}HT.mergeNamedTypeArray=Voe});var eO=w(zT=>{"use strict";m();T();N();Object.defineProperty(zT,"__esModule",{value:!0});zT.mergeInterface=void 0;var joe=Ae(),Koe=vp(),Goe=Ki(),$oe=Sp();function Qoe(e,t,n,r){if(t)try{return{name:e.name,description:e.description||t.description,kind:n!=null&&n.convertExtensions||e.kind==="InterfaceTypeDefinition"||t.kind==="InterfaceTypeDefinition"?"InterfaceTypeDefinition":"InterfaceTypeExtension",loc:e.loc,fields:(0,Koe.mergeFields)(e,e.fields,t.fields,n),directives:(0,Goe.mergeDirectives)(e.directives,t.directives,n,r),interfaces:e.interfaces?(0,$oe.mergeNamedTypeArray)(e.interfaces,t.interfaces,n):void 0}}catch(i){throw new Error(`Unable to merge GraphQL interface "${e.name.value}": ${i.message}`)}return n!=null&&n.convertExtensions?Q(M({},e),{kind:joe.Kind.INTERFACE_TYPE_DEFINITION}):e}zT.mergeInterface=Qoe});var tO=w(WT=>{"use strict";m();T();N();Object.defineProperty(WT,"__esModule",{value:!0});WT.mergeType=void 0;var Yoe=Ae(),Joe=vp(),Hoe=Ki(),zoe=Sp();function Woe(e,t,n,r){if(t)try{return{name:e.name,description:e.description||t.description,kind:n!=null&&n.convertExtensions||e.kind==="ObjectTypeDefinition"||t.kind==="ObjectTypeDefinition"?"ObjectTypeDefinition":"ObjectTypeExtension",loc:e.loc,fields:(0,Joe.mergeFields)(e,e.fields,t.fields,n),directives:(0,Hoe.mergeDirectives)(e.directives,t.directives,n,r),interfaces:(0,zoe.mergeNamedTypeArray)(e.interfaces,t.interfaces,n)}}catch(i){throw new Error(`Unable to merge GraphQL type "${e.name.value}": ${i.message}`)}return n!=null&&n.convertExtensions?Q(M({},e),{kind:Yoe.Kind.OBJECT_TYPE_DEFINITION}):e}WT.mergeType=Woe});var nO=w(XT=>{"use strict";m();T();N();Object.defineProperty(XT,"__esModule",{value:!0});XT.mergeScalar=void 0;var Xoe=Ae(),Zoe=Ki();function eue(e,t,n,r){return t?{name:e.name,description:e.description||t.description,kind:n!=null&&n.convertExtensions||e.kind==="ScalarTypeDefinition"||t.kind==="ScalarTypeDefinition"?"ScalarTypeDefinition":"ScalarTypeExtension",loc:e.loc,directives:(0,Zoe.mergeDirectives)(e.directives,t.directives,n,r)}:n!=null&&n.convertExtensions?Q(M({},e),{kind:Xoe.Kind.SCALAR_TYPE_DEFINITION}):e}XT.mergeScalar=eue});var iO=w(ZT=>{"use strict";m();T();N();Object.defineProperty(ZT,"__esModule",{value:!0});ZT.mergeUnion=void 0;var rO=Ae(),tue=Ki(),nue=Sp();function rue(e,t,n,r){return t?{name:e.name,description:e.description||t.description,directives:(0,tue.mergeDirectives)(e.directives,t.directives,n,r),kind:n!=null&&n.convertExtensions||e.kind==="UnionTypeDefinition"||t.kind==="UnionTypeDefinition"?rO.Kind.UNION_TYPE_DEFINITION:rO.Kind.UNION_TYPE_EXTENSION,loc:e.loc,types:(0,nue.mergeNamedTypeArray)(e.types,t.types,n)}:n!=null&&n.convertExtensions?Q(M({},e),{kind:rO.Kind.UNION_TYPE_DEFINITION}):e}ZT.mergeUnion=rue});var aO=w(nc=>{"use strict";m();T();N();Object.defineProperty(nc,"__esModule",{value:!0});nc.mergeSchemaDefs=nc.DEFAULT_OPERATION_TYPE_NAME_MAP=void 0;var Op=Ae(),iue=Ki();nc.DEFAULT_OPERATION_TYPE_NAME_MAP={query:"Query",mutation:"Mutation",subscription:"Subscription"};function aue(e=[],t=[]){let n=[];for(let r in nc.DEFAULT_OPERATION_TYPE_NAME_MAP){let i=e.find(a=>a.operation===r)||t.find(a=>a.operation===r);i&&n.push(i)}return n}function sue(e,t,n,r){return t?{kind:e.kind===Op.Kind.SCHEMA_DEFINITION||t.kind===Op.Kind.SCHEMA_DEFINITION?Op.Kind.SCHEMA_DEFINITION:Op.Kind.SCHEMA_EXTENSION,description:e.description||t.description,directives:(0,iue.mergeDirectives)(e.directives,t.directives,n,r),operationTypes:aue(e.operationTypes,t.operationTypes)}:n!=null&&n.convertExtensions?Q(M({},e),{kind:Op.Kind.SCHEMA_DEFINITION}):e}nc.mergeSchemaDefs=sue});var sO=w(Ka=>{"use strict";m();T();N();Object.defineProperty(Ka,"__esModule",{value:!0});Ka.mergeGraphQLNodes=Ka.isNamedDefinitionNode=Ka.schemaDefSymbol=void 0;var Ur=Ae(),oue=tO(),uue=WS(),cue=nO(),lue=iO(),due=ZS(),pue=eO(),fue=Ki(),mue=aO(),Nue=pa();Ka.schemaDefSymbol="SCHEMA_DEF_SYMBOL";function Wx(e){return"name"in e}Ka.isNamedDefinitionNode=Wx;function Tue(e,t,n={}){var i,a,o;let r=n;for(let c of e)if(Wx(c)){let l=(i=c.name)==null?void 0:i.value;if(t!=null&&t.commentDescriptions&&(0,Nue.collectComment)(c),l==null)continue;if((a=t==null?void 0:t.exclusions)!=null&&a.includes(l+".*")||(o=t==null?void 0:t.exclusions)!=null&&o.includes(l))delete r[l];else switch(c.kind){case Ur.Kind.OBJECT_TYPE_DEFINITION:case Ur.Kind.OBJECT_TYPE_EXTENSION:r[l]=(0,oue.mergeType)(c,r[l],t,n);break;case Ur.Kind.ENUM_TYPE_DEFINITION:case Ur.Kind.ENUM_TYPE_EXTENSION:r[l]=(0,uue.mergeEnum)(c,r[l],t,n);break;case Ur.Kind.UNION_TYPE_DEFINITION:case Ur.Kind.UNION_TYPE_EXTENSION:r[l]=(0,lue.mergeUnion)(c,r[l],t,n);break;case Ur.Kind.SCALAR_TYPE_DEFINITION:case Ur.Kind.SCALAR_TYPE_EXTENSION:r[l]=(0,cue.mergeScalar)(c,r[l],t,n);break;case Ur.Kind.INPUT_OBJECT_TYPE_DEFINITION:case Ur.Kind.INPUT_OBJECT_TYPE_EXTENSION:r[l]=(0,due.mergeInputType)(c,r[l],t,n);break;case Ur.Kind.INTERFACE_TYPE_DEFINITION:case Ur.Kind.INTERFACE_TYPE_EXTENSION:r[l]=(0,pue.mergeInterface)(c,r[l],t,n);break;case Ur.Kind.DIRECTIVE_DEFINITION:r[l]=(0,fue.mergeDirective)(c,r[l]);break}}else(c.kind===Ur.Kind.SCHEMA_DEFINITION||c.kind===Ur.Kind.SCHEMA_EXTENSION)&&(r[Ka.schemaDefSymbol]=(0,mue.mergeSchemaDefs)(c,r[Ka.schemaDefSymbol],t));return r}Ka.mergeGraphQLNodes=Tue});var eq=w(Dl=>{"use strict";m();T();N();Object.defineProperty(Dl,"__esModule",{value:!0});Dl.mergeGraphQLTypes=Dl.mergeTypeDefs=void 0;var Gi=Ae(),oO=QT(),vl=sO(),Ol=pa(),Xx=aO();function Eue(e,t){(0,Ol.resetComments)();let n={kind:Gi.Kind.DOCUMENT,definitions:Zx(e,M({useSchemaDefinition:!0,forceSchemaDefinition:!1,throwOnConflict:!1,commentDescriptions:!1},t))},r;return t!=null&&t.commentDescriptions?r=(0,Ol.printWithComments)(n):r=n,(0,Ol.resetComments)(),r}Dl.mergeTypeDefs=Eue;function Sl(e,t,n=[],r=[],i=new Set){if(e&&!i.has(e))if(i.add(e),typeof e=="function")Sl(e(),t,n,r,i);else if(Array.isArray(e))for(let a of e)Sl(a,t,n,r,i);else if((0,Gi.isSchema)(e)){let a=(0,Ol.getDocumentNodeFromSchema)(e,t);Sl(a.definitions,t,n,r,i)}else if((0,oO.isStringTypes)(e)||(0,oO.isSourceTypes)(e)){let a=(0,Gi.parse)(e,t);Sl(a.definitions,t,n,r,i)}else if(typeof e=="object"&&(0,Gi.isDefinitionNode)(e))e.kind===Gi.Kind.DIRECTIVE_DEFINITION?n.push(e):r.push(e);else if((0,Ol.isDocumentNode)(e))Sl(e.definitions,t,n,r,i);else throw new Error(`typeDefs must contain only strings, documents, schemas, or functions, got ${typeof e}`);return{allDirectives:n,allNodes:r}}function Zx(e,t){var c,l,p;(0,Ol.resetComments)();let{allDirectives:n,allNodes:r}=Sl(e,t),i=(0,vl.mergeGraphQLNodes)(n,t),a=(0,vl.mergeGraphQLNodes)(r,t,i);if(t!=null&&t.useSchemaDefinition){let f=a[vl.schemaDefSymbol]||{kind:Gi.Kind.SCHEMA_DEFINITION,operationTypes:[]},y=f.operationTypes;for(let g in Xx.DEFAULT_OPERATION_TYPE_NAME_MAP)if(!y.find(F=>F.operation===g)){let F=Xx.DEFAULT_OPERATION_TYPE_NAME_MAP[g],U=a[F];U!=null&&U.name!=null&&y.push({kind:Gi.Kind.OPERATION_TYPE_DEFINITION,type:{kind:Gi.Kind.NAMED_TYPE,name:U.name},operation:g})}((c=f==null?void 0:f.operationTypes)==null?void 0:c.length)!=null&&f.operationTypes.length>0&&(a[vl.schemaDefSymbol]=f)}t!=null&&t.forceSchemaDefinition&&!((p=(l=a[vl.schemaDefSymbol])==null?void 0:l.operationTypes)!=null&&p.length)&&(a[vl.schemaDefSymbol]={kind:Gi.Kind.SCHEMA_DEFINITION,operationTypes:[{kind:Gi.Kind.OPERATION_TYPE_DEFINITION,operation:"query",type:{kind:Gi.Kind.NAMED_TYPE,name:{kind:Gi.Kind.NAME,value:"Query"}}}]});let o=Object.values(a);if(t!=null&&t.sort){let f=typeof t.sort=="function"?t.sort:oO.defaultStringComparator;o.sort((y,g)=>{var _,F;return f((_=y.name)==null?void 0:_.value,(F=g.name)==null?void 0:F.value)})}return o}Dl.mergeGraphQLTypes=Zx});var tq=w(br=>{"use strict";m();T();N();Object.defineProperty(br,"__esModule",{value:!0});var ei=(Wv(),$f(zv));ei.__exportStar(HS(),br);ei.__exportStar(Ki(),br);ei.__exportStar(zS(),br);ei.__exportStar(WS(),br);ei.__exportStar(vp(),br);ei.__exportStar(ZS(),br);ei.__exportStar(eO(),br);ei.__exportStar(Sp(),br);ei.__exportStar(sO(),br);ei.__exportStar(eq(),br);ei.__exportStar(nO(),br);ei.__exportStar(tO(),br);ei.__exportStar(iO(),br);ei.__exportStar(QT(),br)});var rq=w(ru=>{"use strict";m();T();N();Object.defineProperty(ru,"__esModule",{value:!0});ru.applyExtensions=ru.mergeExtensions=ru.extractExtensionsFromSchema=void 0;var nq=pa(),hue=pa();Object.defineProperty(ru,"extractExtensionsFromSchema",{enumerable:!0,get:function(){return hue.extractExtensionsFromSchema}});function yue(e){return(0,nq.mergeDeep)(e)}ru.mergeExtensions=yue;function bl(e,t){e&&(e.extensions=(0,nq.mergeDeep)([e.extensions||{},t||{}]))}function Iue(e,t){bl(e,t.schemaExtensions);for(let[n,r]of Object.entries(t.types||{})){let i=e.getType(n);if(i){if(bl(i,r.extensions),r.type==="object"||r.type==="interface")for(let[a,o]of Object.entries(r.fields)){let c=i.getFields()[a];if(c){bl(c,o.extensions);for(let[l,p]of Object.entries(o.arguments))bl(c.args.find(f=>f.name===l),p)}}else if(r.type==="input")for(let[a,o]of Object.entries(r.fields)){let c=i.getFields()[a];bl(c,o.extensions)}else if(r.type==="enum")for(let[a,o]of Object.entries(r.values)){let c=i.getValue(a);bl(c,o)}}}return e}ru.applyExtensions=Iue});var cO=w(Dp=>{"use strict";m();T();N();Object.defineProperty(Dp,"__esModule",{value:!0});var uO=(Wv(),$f(zv));uO.__exportStar(Gx(),Dp);uO.__exportStar(tq(),Dp);uO.__exportStar(rq(),Dp)});var lO=w(Je=>{"use strict";m();T();N();Object.defineProperty(Je,"__esModule",{value:!0});Je.TAG_DEFINITION_DATA=Je.SUBSCRIPTION_FILTER_DEFINITION_DATA=Je.SHAREABLE_DEFINITION_DATA=Je.SPECIFIED_BY_DEFINITION_DATA=Je.REQUIRES_SCOPES_DEFINITION_DATA=Je.REQUIRES_DEFINITION_DATA=Je.PROVIDES_DEFINITION_DATA=Je.LINK_DEFINITION_DATA=Je.KEY_DEFINITION_DATA=Je.OVERRIDE_DEFINITION_DATA=Je.REDIS_SUBSCRIBE_DEFINITION_DATA=Je.REDIS_PUBLISH_DEFINITION_DATA=Je.NATS_SUBSCRIBE_DEFINITION_DATA=Je.NATS_REQUEST_DEFINITION_DATA=Je.NATS_PUBLISH_DEFINITION_DATA=Je.KAFKA_SUBSCRIBE_DEFINITION_DATA=Je.KAFKA_PUBLISH_DEFINITION_DATA=Je.INTERFACE_OBJECT_DEFINITION_DATA=Je.INACCESSIBLE_DEFINITION_DATA=Je.EXTERNAL_DEFINITION_DATA=Je.EXTENDS_DEFINITION_DATA=Je.DEPRECATED_DEFINITION_DATA=Je.CONFIGURE_CHILD_DESCRIPTIONS_DEFINITION_DATA=Je.CONFIGURE_DESCRIPTION_DEFINITION_DATA=Je.COMPOSE_DIRECTIVE_DEFINITION_DATA=Je.AUTHENTICATED_DEFINITION_DATA=void 0;var it=hs(),fa=Jr(),ln=Ae(),q=lr();Je.AUTHENTICATED_DEFINITION_DATA={argumentTypeNodeByArgumentName:new Map([]),isRepeatable:!1,locations:new Set([q.ENUM_UPPER,q.FIELD_DEFINITION_UPPER,q.INTERFACE_UPPER,q.OBJECT_UPPER,q.SCALAR_UPPER]),name:q.AUTHENTICATED,node:it.AUTHENTICATED_DEFINITION,optionalArgumentNames:new Set,requiredArgumentNames:new Set};Je.COMPOSE_DIRECTIVE_DEFINITION_DATA={argumentTypeNodeByArgumentName:new Map([[q.NAME,{name:q.NAME,typeNode:it.REQUIRED_STRING_TYPE_NODE}]]),isRepeatable:!0,locations:new Set([q.SCHEMA_UPPER]),name:q.COMPOSE_DIRECTIVE,node:it.COMPOSE_DIRECTIVE_DEFINITION,optionalArgumentNames:new Set,requiredArgumentNames:new Set([q.NAME])};Je.CONFIGURE_DESCRIPTION_DEFINITION_DATA={argumentTypeNodeByArgumentName:new Map([[q.PROPAGATE,{name:q.PROPAGATE,typeNode:{kind:ln.Kind.NON_NULL_TYPE,type:(0,fa.stringToNamedTypeNode)(q.BOOLEAN_SCALAR)},defaultValue:{kind:ln.Kind.BOOLEAN,value:!0}}],[q.DESCRIPTION_OVERRIDE,{name:q.DESCRIPTION_OVERRIDE,typeNode:(0,fa.stringToNamedTypeNode)(q.STRING_SCALAR)}]]),isRepeatable:!1,locations:new Set([q.ARGUMENT_DEFINITION_UPPER,q.ENUM_UPPER,q.ENUM_VALUE_UPPER,q.FIELD_DEFINITION_UPPER,q.INTERFACE_UPPER,q.INPUT_OBJECT_UPPER,q.INPUT_FIELD_DEFINITION_UPPER,q.OBJECT_UPPER,q.SCALAR_UPPER,q.SCHEMA_UPPER,q.UNION_UPPER]),name:q.CONFIGURE_DESCRIPTION,node:it.CONFIGURE_DESCRIPTION_DEFINITION,optionalArgumentNames:new Set([q.PROPAGATE,q.DESCRIPTION_OVERRIDE]),requiredArgumentNames:new Set};Je.CONFIGURE_CHILD_DESCRIPTIONS_DEFINITION_DATA={argumentTypeNodeByArgumentName:new Map([[q.PROPAGATE,{name:q.PROPAGATE,typeNode:{kind:ln.Kind.NON_NULL_TYPE,type:(0,fa.stringToNamedTypeNode)(q.BOOLEAN_SCALAR)},defaultValue:{kind:ln.Kind.BOOLEAN,value:!0}}]]),isRepeatable:!1,locations:new Set([q.ENUM_UPPER,q.INPUT_OBJECT_UPPER,q.INTERFACE_UPPER,q.OBJECT_UPPER]),name:q.CONFIGURE_CHILD_DESCRIPTIONS,node:it.CONFIGURE_CHILD_DESCRIPTIONS_DEFINITION,optionalArgumentNames:new Set([q.PROPAGATE]),requiredArgumentNames:new Set};Je.DEPRECATED_DEFINITION_DATA={argumentTypeNodeByArgumentName:new Map([[q.REASON,{name:q.REASON,typeNode:(0,fa.stringToNamedTypeNode)(q.STRING_SCALAR),defaultValue:{kind:ln.Kind.STRING,value:ln.DEFAULT_DEPRECATION_REASON}}]]),isRepeatable:!1,locations:new Set([q.ARGUMENT_DEFINITION_UPPER,q.ENUM_VALUE_UPPER,q.FIELD_DEFINITION_UPPER,q.INPUT_FIELD_DEFINITION_UPPER]),name:q.DEPRECATED,node:it.DEPRECATED_DEFINITION,optionalArgumentNames:new Set([q.REASON]),requiredArgumentNames:new Set};Je.EXTENDS_DEFINITION_DATA={argumentTypeNodeByArgumentName:new Map,isRepeatable:!1,locations:new Set([q.INTERFACE_UPPER,q.OBJECT_UPPER]),name:q.EXTENDS,node:it.EXTENDS_DEFINITION,optionalArgumentNames:new Set,requiredArgumentNames:new Set};Je.EXTERNAL_DEFINITION_DATA={argumentTypeNodeByArgumentName:new Map,isRepeatable:!1,locations:new Set([q.FIELD_DEFINITION_UPPER,q.OBJECT_UPPER]),name:q.EXTERNAL,node:it.EXTERNAL_DEFINITION,optionalArgumentNames:new Set,requiredArgumentNames:new Set};Je.INACCESSIBLE_DEFINITION_DATA={argumentTypeNodeByArgumentName:new Map,isRepeatable:!1,locations:new Set([q.ARGUMENT_DEFINITION_UPPER,q.ENUM_UPPER,q.ENUM_VALUE_UPPER,q.FIELD_DEFINITION_UPPER,q.INPUT_FIELD_DEFINITION_UPPER,q.INPUT_OBJECT_UPPER,q.INTERFACE_UPPER,q.OBJECT_UPPER,q.SCALAR_UPPER,q.UNION_UPPER]),name:q.INACCESSIBLE,node:it.INACCESSIBLE_DEFINITION,optionalArgumentNames:new Set,requiredArgumentNames:new Set};Je.INTERFACE_OBJECT_DEFINITION_DATA={argumentTypeNodeByArgumentName:new Map,isRepeatable:!1,locations:new Set([q.OBJECT_UPPER]),name:q.INTERFACE_OBJECT,node:it.INTERFACE_OBJECT_DEFINITION,optionalArgumentNames:new Set,requiredArgumentNames:new Set};Je.KAFKA_PUBLISH_DEFINITION_DATA={argumentTypeNodeByArgumentName:new Map([[q.TOPIC,{name:q.TOPIC,typeNode:it.REQUIRED_STRING_TYPE_NODE}],[q.PROVIDER_ID,{name:q.PROVIDER_ID,typeNode:it.REQUIRED_STRING_TYPE_NODE,defaultValue:{kind:ln.Kind.STRING,value:q.DEFAULT_EDFS_PROVIDER_ID}}]]),isRepeatable:!1,locations:new Set([q.FIELD_DEFINITION_UPPER]),name:q.EDFS_KAFKA_PUBLISH,node:it.EDFS_KAFKA_PUBLISH_DEFINITION,optionalArgumentNames:new Set([q.PROVIDER_ID]),requiredArgumentNames:new Set([q.TOPIC])};Je.KAFKA_SUBSCRIBE_DEFINITION_DATA={argumentTypeNodeByArgumentName:new Map([[q.TOPICS,{name:q.TOPICS,typeNode:{kind:ln.Kind.NON_NULL_TYPE,type:{kind:ln.Kind.LIST_TYPE,type:it.REQUIRED_STRING_TYPE_NODE}}}],[q.PROVIDER_ID,{name:q.PROVIDER_ID,typeNode:it.REQUIRED_STRING_TYPE_NODE,defaultValue:{kind:ln.Kind.STRING,value:q.DEFAULT_EDFS_PROVIDER_ID}}]]),isRepeatable:!1,locations:new Set([q.FIELD_DEFINITION_UPPER]),name:q.EDFS_KAFKA_SUBSCRIBE,node:it.EDFS_KAFKA_SUBSCRIBE_DEFINITION,optionalArgumentNames:new Set([q.PROVIDER_ID]),requiredArgumentNames:new Set([q.TOPICS])};Je.NATS_PUBLISH_DEFINITION_DATA={argumentTypeNodeByArgumentName:new Map([[q.SUBJECT,{name:q.SUBJECT,typeNode:it.REQUIRED_STRING_TYPE_NODE}],[q.PROVIDER_ID,{name:q.PROVIDER_ID,typeNode:it.REQUIRED_STRING_TYPE_NODE,defaultValue:{kind:ln.Kind.STRING,value:q.DEFAULT_EDFS_PROVIDER_ID}}]]),isRepeatable:!1,locations:new Set([q.FIELD_DEFINITION_UPPER]),name:q.EDFS_NATS_PUBLISH,node:it.EDFS_NATS_PUBLISH_DEFINITION,optionalArgumentNames:new Set([q.PROVIDER_ID]),requiredArgumentNames:new Set([q.SUBJECT])};Je.NATS_REQUEST_DEFINITION_DATA={argumentTypeNodeByArgumentName:new Map([[q.SUBJECT,{name:q.SUBJECT,typeNode:it.REQUIRED_STRING_TYPE_NODE}],[q.PROVIDER_ID,{name:q.PROVIDER_ID,typeNode:it.REQUIRED_STRING_TYPE_NODE,defaultValue:{kind:ln.Kind.STRING,value:q.DEFAULT_EDFS_PROVIDER_ID}}]]),isRepeatable:!1,locations:new Set([q.FIELD_DEFINITION_UPPER]),name:q.EDFS_NATS_REQUEST,node:it.EDFS_NATS_REQUEST_DEFINITION,optionalArgumentNames:new Set([q.PROVIDER_ID]),requiredArgumentNames:new Set([q.SUBJECT])};Je.NATS_SUBSCRIBE_DEFINITION_DATA={argumentTypeNodeByArgumentName:new Map([[q.SUBJECTS,{name:q.SUBJECTS,typeNode:{kind:ln.Kind.NON_NULL_TYPE,type:{kind:ln.Kind.LIST_TYPE,type:it.REQUIRED_STRING_TYPE_NODE}}}],[q.PROVIDER_ID,{name:q.PROVIDER_ID,typeNode:it.REQUIRED_STRING_TYPE_NODE,defaultValue:{kind:ln.Kind.STRING,value:q.DEFAULT_EDFS_PROVIDER_ID}}],[q.STREAM_CONFIGURATION,{name:q.STREAM_CONFIGURATION,typeNode:(0,fa.stringToNamedTypeNode)(q.EDFS_NATS_STREAM_CONFIGURATION)}]]),isRepeatable:!1,locations:new Set([q.FIELD_DEFINITION_UPPER]),name:q.EDFS_NATS_SUBSCRIBE,node:it.EDFS_NATS_SUBSCRIBE_DEFINITION,optionalArgumentNames:new Set([q.PROVIDER_ID]),requiredArgumentNames:new Set([q.SUBJECTS])};Je.REDIS_PUBLISH_DEFINITION_DATA={argumentTypeNodeByArgumentName:new Map([[q.CHANNEL,{name:q.CHANNEL,typeNode:it.REQUIRED_STRING_TYPE_NODE}],[q.PROVIDER_ID,{name:q.PROVIDER_ID,typeNode:it.REQUIRED_STRING_TYPE_NODE,defaultValue:{kind:ln.Kind.STRING,value:q.DEFAULT_EDFS_PROVIDER_ID}}]]),isRepeatable:!1,locations:new Set([q.FIELD_DEFINITION_UPPER]),name:q.EDFS_REDIS_PUBLISH,node:it.EDFS_REDIS_PUBLISH_DEFINITION,optionalArgumentNames:new Set([q.PROVIDER_ID]),requiredArgumentNames:new Set([q.CHANNEL])};Je.REDIS_SUBSCRIBE_DEFINITION_DATA={argumentTypeNodeByArgumentName:new Map([[q.CHANNELS,{name:q.CHANNELS,typeNode:{kind:ln.Kind.NON_NULL_TYPE,type:{kind:ln.Kind.LIST_TYPE,type:it.REQUIRED_STRING_TYPE_NODE}}}],[q.PROVIDER_ID,{name:q.PROVIDER_ID,typeNode:it.REQUIRED_STRING_TYPE_NODE,defaultValue:{kind:ln.Kind.STRING,value:q.DEFAULT_EDFS_PROVIDER_ID}}]]),isRepeatable:!1,locations:new Set([q.FIELD_DEFINITION_UPPER]),name:q.EDFS_REDIS_SUBSCRIBE,node:it.EDFS_REDIS_SUBSCRIBE_DEFINITION,optionalArgumentNames:new Set([q.PROVIDER_ID]),requiredArgumentNames:new Set([q.CHANNELS])};Je.OVERRIDE_DEFINITION_DATA={argumentTypeNodeByArgumentName:new Map([[q.FROM,{name:q.FROM,typeNode:it.REQUIRED_STRING_TYPE_NODE}]]),isRepeatable:!1,locations:new Set([q.FIELD_DEFINITION_UPPER]),name:q.OVERRIDE,node:it.OVERRIDE_DEFINITION,optionalArgumentNames:new Set,requiredArgumentNames:new Set([q.FROM])};Je.KEY_DEFINITION_DATA={argumentTypeNodeByArgumentName:new Map([[q.FIELDS,{name:q.FIELDS,typeNode:it.REQUIRED_FIELDSET_TYPE_NODE}],[q.RESOLVABLE,{name:q.RESOLVABLE,typeNode:(0,fa.stringToNamedTypeNode)(q.BOOLEAN_SCALAR),defaultValue:{kind:ln.Kind.BOOLEAN,value:!0}}]]),isRepeatable:!0,locations:new Set([q.INTERFACE_UPPER,q.OBJECT_UPPER]),name:q.KEY,node:it.KEY_DEFINITION,optionalArgumentNames:new Set([q.RESOLVABLE]),requiredArgumentNames:new Set([q.FIELDS])};Je.LINK_DEFINITION_DATA={argumentTypeNodeByArgumentName:new Map([[q.URL_LOWER,{name:q.URL_LOWER,typeNode:it.REQUIRED_STRING_TYPE_NODE}],[q.AS,{name:q.AS,typeNode:(0,fa.stringToNamedTypeNode)(q.STRING_SCALAR)}],[q.FOR,{name:q.FOR,typeNode:(0,fa.stringToNamedTypeNode)(q.LINK_PURPOSE)}],[q.IMPORT,{name:q.IMPORT,typeNode:{kind:ln.Kind.LIST_TYPE,type:(0,fa.stringToNamedTypeNode)(q.LINK_IMPORT)}}]]),isRepeatable:!0,locations:new Set([q.SCHEMA_UPPER]),name:q.LINK,node:it.LINK_DEFINITION,optionalArgumentNames:new Set([q.AS,q.FOR,q.IMPORT]),requiredArgumentNames:new Set([q.URL_LOWER])};Je.PROVIDES_DEFINITION_DATA={argumentTypeNodeByArgumentName:new Map([[q.FIELDS,{name:q.FIELDS,typeNode:it.REQUIRED_FIELDSET_TYPE_NODE}]]),isRepeatable:!1,locations:new Set([q.FIELD_DEFINITION_UPPER]),name:q.PROVIDES,node:it.PROVIDES_DEFINITION,optionalArgumentNames:new Set,requiredArgumentNames:new Set([q.FIELDS])};Je.REQUIRES_DEFINITION_DATA={argumentTypeNodeByArgumentName:new Map([[q.FIELDS,{name:q.FIELDS,typeNode:it.REQUIRED_FIELDSET_TYPE_NODE}]]),isRepeatable:!1,locations:new Set([q.FIELD_DEFINITION_UPPER]),name:q.REQUIRES,node:it.REQUIRES_DEFINITION,optionalArgumentNames:new Set,requiredArgumentNames:new Set([q.FIELDS])};Je.REQUIRES_SCOPES_DEFINITION_DATA={argumentTypeNodeByArgumentName:new Map([[q.SCOPES,{name:q.SCOPES,typeNode:{kind:ln.Kind.NON_NULL_TYPE,type:{kind:ln.Kind.LIST_TYPE,type:{kind:ln.Kind.NON_NULL_TYPE,type:{kind:ln.Kind.LIST_TYPE,type:{kind:ln.Kind.NON_NULL_TYPE,type:(0,fa.stringToNamedTypeNode)(q.SCOPE_SCALAR)}}}}}}]]),isRepeatable:!1,locations:new Set([q.ENUM_UPPER,q.FIELD_DEFINITION_UPPER,q.INTERFACE_UPPER,q.OBJECT_UPPER,q.SCALAR_UPPER]),name:q.REQUIRES_SCOPES,node:it.REQUIRES_SCOPES_DEFINITION,optionalArgumentNames:new Set,requiredArgumentNames:new Set([q.SCOPES])};Je.SPECIFIED_BY_DEFINITION_DATA={argumentTypeNodeByArgumentName:new Map([[q.URL_LOWER,{name:q.URL_LOWER,typeNode:it.REQUIRED_STRING_TYPE_NODE}]]),isRepeatable:!1,locations:new Set([q.SCALAR_UPPER]),name:q.SPECIFIED_BY,node:it.SPECIFIED_BY_DEFINITION,optionalArgumentNames:new Set,requiredArgumentNames:new Set([q.URL_LOWER])};Je.SHAREABLE_DEFINITION_DATA={argumentTypeNodeByArgumentName:new Map,isRepeatable:!0,locations:new Set([q.FIELD_DEFINITION_UPPER,q.OBJECT_UPPER]),name:q.SHAREABLE,node:it.SHAREABLE_DEFINITION,optionalArgumentNames:new Set,requiredArgumentNames:new Set};Je.SUBSCRIPTION_FILTER_DEFINITION_DATA={argumentTypeNodeByArgumentName:new Map([[q.CONDITION,{name:q.CONDITION,typeNode:{kind:ln.Kind.NON_NULL_TYPE,type:(0,fa.stringToNamedTypeNode)(q.SUBSCRIPTION_FILTER_CONDITION)}}]]),isRepeatable:!1,locations:new Set([q.FIELD_DEFINITION_UPPER]),name:q.SUBSCRIPTION_FILTER,node:it.SUBSCRIPTION_FILTER_DEFINITION,optionalArgumentNames:new Set,requiredArgumentNames:new Set([q.CONDITION])};Je.TAG_DEFINITION_DATA={argumentTypeNodeByArgumentName:new Map([[q.NAME,{name:q.NAME,typeNode:it.REQUIRED_STRING_TYPE_NODE}]]),isRepeatable:!0,locations:new Set([q.ARGUMENT_DEFINITION_UPPER,q.ENUM_UPPER,q.ENUM_VALUE_UPPER,q.FIELD_DEFINITION_UPPER,q.INPUT_FIELD_DEFINITION_UPPER,q.INPUT_OBJECT_UPPER,q.INTERFACE_UPPER,q.OBJECT_UPPER,q.SCALAR_UPPER,q.UNION_UPPER]),name:q.TAG,node:it.TAG_DEFINITION,optionalArgumentNames:new Set,requiredArgumentNames:new Set([q.NAME])}});var bp=w(ma=>{"use strict";m();T();N();Object.defineProperty(ma,"__esModule",{value:!0});ma.newFieldSetData=gue;ma.extractFieldSetValue=_ue;ma.getNormalizedFieldSet=vue;ma.getInitialFieldCoordsPath=Sue;ma.validateKeyFieldSets=Oue;ma.getConditionalFieldSetDirectiveName=Due;ma.isNodeQuery=bue;ma.validateArgumentTemplateReferences=Aue;ma.initializeDirectiveDefinitionDatas=Rue;var nr=Ae(),iq=Jr(),Ar=sa(),aq=hs(),dO=Ho(),mn=lO(),kt=lr(),iu=Hr();function gue(){return{provides:new Map,requires:new Map}}function _ue(e,t,n){if(!n||n.length>1)return;let r=n[0].arguments;if(!r||r.length!==1)return;let i=r[0];i.name.value!==kt.FIELDS||i.value.kind!==nr.Kind.STRING||t.set(e,i.value.value)}function vue(e){return(0,nr.print)((0,iq.lexicographicallySortDocumentNode)(e)).replaceAll(/\s+/g," ").slice(2,-2)}function Sue(e,t){return e?[t]:[]}function Oue(e,t,n){let r=e.entityInterfaceDataByTypeName.get(t.name),i=t.name,a=[],o=[],c=r?void 0:e.internalGraph.addEntityDataNode(t.name),l=e.internalGraph.addOrUpdateNode(t.name),p=0;for(let[f,{documentNode:y,isUnresolvable:g,rawFieldSet:_}]of n){r&&(r.resolvable||(r.resolvable=!g)),p+=1;let F=[],U=[t],K=[],J=[],ee=new Set,W=-1,Te=!0,de="";if((0,nr.visit)(y,{Argument:{enter(we){return F.push((0,Ar.unexpectedArgumentErrorMessage)(_,`${U[W].name}.${de}`,we.name.value)),nr.BREAK}},Field:{enter(we){let qe=U[W],et=qe.name;if(Te){let bn=`${et}.${de}`,Vt=qe.fieldDataByFieldName.get(de);if(!Vt)return F.push((0,Ar.undefinedFieldInFieldSetErrorMessage)(_,bn,de)),nr.BREAK;let dn=(0,dO.getTypeNodeNamedTypeName)(Vt.node.type),Rr=e.parentDefinitionDataByTypeName.get(dn),Fr=Rr?Rr.kind:nr.Kind.SCALAR_TYPE_DEFINITION;return F.push((0,Ar.invalidSelectionSetErrorMessage)(_,[bn],dn,(0,iu.kindToTypeString)(Fr))),nr.BREAK}let X=we.name.value,ve=`${et}.${X}`;de=X;let gt=qe.fieldDataByFieldName.get(X);if(!gt)return F.push((0,Ar.undefinedFieldInFieldSetErrorMessage)(_,et,X)),nr.BREAK;if(gt.argumentDataByArgumentName.size)return F.push((0,Ar.argumentsInKeyFieldSetErrorMessage)(_,ve)),nr.BREAK;if(K[W].has(X))return F.push((0,Ar.duplicateFieldInFieldSetErrorMessage)(_,ve)),nr.BREAK;(0,iu.getValueOrDefault)((0,iu.getValueOrDefault)(e.keyFieldSetsByEntityTypeNameByFieldCoords,ve,()=>new Map),i,()=>new Set).add(f),J.push(X),gt.isShareableBySubgraphName.set(e.subgraphName,!0),K[W].add(X),(0,iu.getValueOrDefault)(e.keyFieldNamesByParentTypeName,et,()=>new Set).add(X);let Ht=(0,dO.getTypeNodeNamedTypeName)(gt.node.type);if(aq.BASE_SCALARS.has(Ht)){ee.add(J.join(kt.PERIOD)),J.pop();return}let zt=e.parentDefinitionDataByTypeName.get(Ht);if(!zt)return F.push((0,Ar.unknownTypeInFieldSetErrorMessage)(_,ve,Ht)),nr.BREAK;if(zt.kind===nr.Kind.OBJECT_TYPE_DEFINITION){Te=!0,U.push(zt);return}if((0,iq.isKindAbstract)(zt.kind))return F.push((0,Ar.abstractTypeInKeyFieldSetErrorMessage)(_,ve,Ht,(0,iu.kindToTypeString)(zt.kind))),nr.BREAK;ee.add(J.join(kt.PERIOD)),J.pop()}},InlineFragment:{enter(){return F.push(Ar.inlineFragmentInFieldSetErrorMessage),nr.BREAK}},SelectionSet:{enter(){if(!Te){let we=U[W],et=`${we.name}.${de}`,X=we.fieldDataByFieldName.get(de);if(!X)return F.push((0,Ar.undefinedFieldInFieldSetErrorMessage)(_,et,de)),nr.BREAK;let ve=(0,dO.getTypeNodeNamedTypeName)(X.node.type),gt=e.parentDefinitionDataByTypeName.get(ve),Ht=gt?gt.kind:nr.Kind.SCALAR_TYPE_DEFINITION;return F.push((0,Ar.invalidSelectionSetDefinitionErrorMessage)(_,[et],ve,(0,iu.kindToTypeString)(Ht))),nr.BREAK}if(W+=1,Te=!1,W<0||W>=U.length)return F.push((0,Ar.unparsableFieldSetSelectionErrorMessage)(_,de)),nr.BREAK;K.push(new Set)},leave(){if(Te){let qe=U[W].name,et=U[W+1],X=`${qe}.${de}`;F.push((0,Ar.invalidSelectionSetErrorMessage)(_,[X],et.name,(0,iu.kindToTypeString)(et.kind))),Te=!1}W-=1,U.pop(),K.pop()}}}),F.length>0){e.errors.push((0,Ar.invalidDirectiveError)(kt.KEY,i,(0,iu.numberToOrdinal)(p),F));continue}a.push(M({fieldName:"",selectionSet:f},g?{disableEntityResolver:!0}:{})),l.satisfiedFieldSets.add(f),!g&&(c==null||c.addTargetSubgraphByFieldSet(f,e.subgraphName),o.push(ee))}if(a.length>0)return a}function Due(e){return e?kt.PROVIDES:kt.REQUIRES}function bue(e,t){return e===kt.QUERY||t===nr.OperationTypeNode.QUERY}function Aue(e,t,n){let r=e.matchAll(aq.EDFS_ARGS_REGEXP),i=new Set,a=new Set;for(let o of r){if(o.length<2){a.add(o[0]);continue}t.has(o[1])||i.add(o[1])}for(let o of i)n.push((0,Ar.undefinedEventSubjectsArgumentErrorMessage)(o));for(let o of a)n.push((0,Ar.invalidEventSubjectsArgumentErrorMessage)(o))}function Rue(){return new Map([[kt.AUTHENTICATED,mn.AUTHENTICATED_DEFINITION_DATA],[kt.COMPOSE_DIRECTIVE,mn.COMPOSE_DIRECTIVE_DEFINITION_DATA],[kt.CONFIGURE_DESCRIPTION,mn.CONFIGURE_DESCRIPTION_DEFINITION_DATA],[kt.CONFIGURE_CHILD_DESCRIPTIONS,mn.CONFIGURE_CHILD_DESCRIPTIONS_DEFINITION_DATA],[kt.DEPRECATED,mn.DEPRECATED_DEFINITION_DATA],[kt.EDFS_KAFKA_PUBLISH,mn.KAFKA_PUBLISH_DEFINITION_DATA],[kt.EDFS_KAFKA_SUBSCRIBE,mn.KAFKA_SUBSCRIBE_DEFINITION_DATA],[kt.EDFS_NATS_PUBLISH,mn.NATS_PUBLISH_DEFINITION_DATA],[kt.EDFS_NATS_REQUEST,mn.NATS_REQUEST_DEFINITION_DATA],[kt.EDFS_NATS_SUBSCRIBE,mn.NATS_SUBSCRIBE_DEFINITION_DATA],[kt.EDFS_REDIS_PUBLISH,mn.REDIS_PUBLISH_DEFINITION_DATA],[kt.EDFS_REDIS_SUBSCRIBE,mn.REDIS_SUBSCRIBE_DEFINITION_DATA],[kt.EXTENDS,mn.EXTENDS_DEFINITION_DATA],[kt.EXTERNAL,mn.EXTERNAL_DEFINITION_DATA],[kt.INACCESSIBLE,mn.INACCESSIBLE_DEFINITION_DATA],[kt.INTERFACE_OBJECT,mn.INTERFACE_OBJECT_DEFINITION_DATA],[kt.KEY,mn.KEY_DEFINITION_DATA],[kt.LINK,mn.LINK_DEFINITION_DATA],[kt.OVERRIDE,mn.OVERRIDE_DEFINITION_DATA],[kt.PROVIDES,mn.PROVIDES_DEFINITION_DATA],[kt.REQUIRES,mn.REQUIRES_DEFINITION_DATA],[kt.REQUIRES_SCOPES,mn.REQUIRES_SCOPES_DEFINITION_DATA],[kt.SHAREABLE,mn.SHAREABLE_DEFINITION_DATA],[kt.SPECIFIED_BY,mn.SPECIFIED_BY_DEFINITION_DATA],[kt.SUBSCRIPTION_FILTER,mn.SUBSCRIPTION_FILTER_DEFINITION_DATA],[kt.TAG,mn.TAG_DEFINITION_DATA]])}});var fO=w(pO=>{"use strict";m();T();N();Object.defineProperty(pO,"__esModule",{value:!0});pO.recordSubgraphName=Fue;function Fue(e,t,n){if(!t.has(e)){t.add(e);return}n.add(e)}});var NO=w(eE=>{"use strict";m();T();N();Object.defineProperty(eE,"__esModule",{value:!0});eE.Warning=void 0;var mO=class extends Error{constructor(n){super(n.message);v(this,"subgraph");this.name="Warning",this.subgraph=n.subgraph}};eE.Warning=mO});var nE=w(Na=>{"use strict";m();T();N();Object.defineProperty(Na,"__esModule",{value:!0});Na.invalidOverrideTargetSubgraphNameWarning=Pue;Na.externalInterfaceFieldsWarning=wue;Na.nonExternalConditionalFieldWarning=Lue;Na.unimplementedInterfaceOutputTypeWarning=Cue;Na.invalidExternalFieldWarning=Bue;Na.requiresDefinedOnNonEntityFieldWarning=Uue;Na.consumerInactiveThresholdInvalidValueWarning=kue;Na.externalEntityExtensionKeyFieldWarning=Mue;Na.fieldAlreadyProvidedWarning=xue;var _s=NO(),TO=lr();function Pue(e,t,n,r){return new _s.Warning({message:`The Object type "${t}" defines the directive "@override(from: "${e}")" on the following field`+(n.length>1?"s":"")+': "'+n.join(TO.QUOTATION_JOIN)+`". The required "from" argument of type "String!" should be provided with an existing subgraph name. However, a subgraph by the name of "${e}" does not exist. -If this subgraph has been recently deleted, remember to clean up unused "@override" directives that reference this subgraph.`,subgraph:{name:r}})}function ZT(e){return`The subgraph "${e}" is currently a "version one" subgraph, but if it were updated to "version two" in its current state, composition would be unsuccessful due to the following warning that would instead propagate as an error: -`}function wue(e,t,n){return new _s.Warning({message:ZT(e)+`The Interface "${t}" is invalid because the following field definition`+(n.length>1?"s are":" is")+` declared "@external": - "`+n.join(NO.QUOTATION_JOIN)+`" -Interface fields should not be declared "@external". This is because Interface fields do not resolve directly, but the "@external" directive relates to whether a Field instance can be resolved by the subgraph in which it is defined.`,subgraph:{name:e}})}function Lue(e,t,n,r,i){return new _s.Warning({message:ZT(t)+`The Field "${e}" in subgraph "${t}" defines a "@${i}" directive with the following field set: +If this subgraph has been recently deleted, remember to clean up unused "@override" directives that reference this subgraph.`,subgraph:{name:r}})}function tE(e){return`The subgraph "${e}" is currently a "version one" subgraph, but if it were updated to "version two" in its current state, composition would be unsuccessful due to the following warning that would instead propagate as an error: +`}function wue(e,t,n){return new _s.Warning({message:tE(e)+`The Interface "${t}" is invalid because the following field definition`+(n.length>1?"s are":" is")+` declared "@external": + "`+n.join(TO.QUOTATION_JOIN)+`" +Interface fields should not be declared "@external". This is because Interface fields do not resolve directly, but the "@external" directive relates to whether a Field instance can be resolved by the subgraph in which it is defined.`,subgraph:{name:e}})}function Lue(e,t,n,r,i){return new _s.Warning({message:tE(t)+`The Field "${e}" in subgraph "${t}" defines a "@${i}" directive with the following field set: "${r}". However, neither the field "${n}" nor any of its field set ancestors are declared @external. -Consequently, "${n}" is already provided by subgraph "${t}" and should not form part of a "@${i}" directive field set.`,subgraph:{name:t}})}function Cue(e,t){return new _s.Warning({message:`Subgraph "${e}": The Interface "${t}" is used as an output type without at least one Object type implementation defined in the schema.`,subgraph:{name:e}})}function Bue(e,t){return new _s.Warning({message:ZT(t)+` The Object Field "${e}" is invalidly declared "@external". An Object field should only be declared "@external" if it is part of a "@key", "@provides", or "@requires" filed set, or the field is necessary to satisfy an Interface implementation. In the case that none of these conditions is true, the "@external" directive should be removed.`,subgraph:{name:t}})}function Uue(e,t){return new _s.Warning({message:` The Object Field "${e}" defines a "@requires" directive, but the Object is not an entity. Consequently, the "@requires" FieldSet cannot be satisfied because there is no entity resolver with which to provide the required Fields.`,subgraph:{name:t}})}function kue(e,t=""){return new _s.Warning({message:'The "consumerInactiveThreshold" argument of type "Int" should be positive and smaller than 2,147,483,648.'+ +t?` +Consequently, "${n}" is already provided by subgraph "${t}" and should not form part of a "@${i}" directive field set.`,subgraph:{name:t}})}function Cue(e,t){return new _s.Warning({message:`Subgraph "${e}": The Interface "${t}" is used as an output type without at least one Object type implementation defined in the schema.`,subgraph:{name:e}})}function Bue(e,t){return new _s.Warning({message:tE(t)+` The Object Field "${e}" is invalidly declared "@external". An Object field should only be declared "@external" if it is part of a "@key", "@provides", or "@requires" filed set, or the field is necessary to satisfy an Interface implementation. In the case that none of these conditions is true, the "@external" directive should be removed.`,subgraph:{name:t}})}function Uue(e,t){return new _s.Warning({message:` The Object Field "${e}" defines a "@requires" directive, but the Object is not an entity. Consequently, the "@requires" FieldSet cannot be satisfied because there is no entity resolver with which to provide the required Fields.`,subgraph:{name:t}})}function kue(e,t=""){return new _s.Warning({message:'The "consumerInactiveThreshold" argument of type "Int" should be positive and smaller than 2,147,483,648.'+ +t?` ${t}`:"",subgraph:{name:e}})}function Mue(e,t,n,r){return new _s.Warning({message:`The entity extension "${e}" defined in subgraph "${r}" defines a "@key" directive with the field set "${t}". The following field coordinates that form part of that field set are declared "@external": - "`+n.join(NO.QUOTATION_JOIN)+`" -Please note fields that form part of entity extension "@key" field sets are always provided in that subgraph. Any such "@external" declarations are unnecessary relics of Federation Version 1 syntax and are effectively ignored.`,subgraph:{name:r}})}function xue(e,t,n,r){return new _s.Warning({message:ZT(r)+`The field "${e}" is unconditionally provided by subgraph "${r}" and should not form part of any "@${t}" field set. + "`+n.join(TO.QUOTATION_JOIN)+`" +Please note fields that form part of entity extension "@key" field sets are always provided in that subgraph. Any such "@external" declarations are unnecessary relics of Federation Version 1 syntax and are effectively ignored.`,subgraph:{name:r}})}function xue(e,t,n,r){return new _s.Warning({message:tE(r)+`The field "${e}" is unconditionally provided by subgraph "${r}" and should not form part of any "@${t}" field set. However, "${e}" forms part of the "@${t}" field set defined "${n}". -Although "${e}" is declared "@external", it is part of a "@key" directive on an extension type. Such fields are only declared "@external" for legacy syntactical reasons and are not internally considered "@external".`,subgraph:{name:r}})}});var bp=w(tE=>{"use strict";f();N();m();Object.defineProperty(tE,"__esModule",{value:!0});tE.ExtensionType=void 0;var aq;(function(e){e[e.EXTENDS=0]="EXTENDS",e[e.NONE=1]="NONE",e[e.REAL=2]="REAL"})(aq||(tE.ExtensionType=aq={}))});var Rp=w(Nt=>{"use strict";f();N();m();Object.defineProperty(Nt,"__esModule",{value:!0});Nt.MergeMethod=void 0;Nt.newPersistedDirectivesData=Vue;Nt.isNodeExternalOrShareable=jue;Nt.isTypeRequired=Kue;Nt.areDefaultValuesCompatible=oq;Nt.compareAndValidateInputValueDefaultValues=Gue;Nt.setMutualExecutableLocations=$ue;Nt.isTypeNameRootType=Que;Nt.getRenamedRootTypeName=Yue;Nt.childMapToValueArray=Hue;Nt.removeInheritableDirectivesFromObjectParent=zue;Nt.setLongestDescription=Wue;Nt.isParentDataRootType=uq;Nt.isParentDataInterfaceType=Xue;Nt.setParentDataExtensionType=Zue;Nt.extractPersistedDirectives=nce;Nt.propagateAuthDirectives=rce;Nt.propagateFieldAuthDirectives=ice;Nt.generateDeprecatedDirective=yO;Nt.getClientPersistedDirectiveNodes=EO;Nt.getNodeForRouterSchemaByData=sce;Nt.getClientSchemaFieldNodeByFieldData=oce;Nt.getNodeWithPersistedDirectivesByInputValueData=lq;Nt.addValidPersistedDirectiveDefinitionNodeByData=cce;Nt.newInvalidFieldNames=lce;Nt.validateExternalAndShareable=dce;Nt.isTypeValidImplementation=nE;Nt.isNodeDataInaccessible=dq;Nt.isLeafKind=pce;Nt.getSubscriptionFilterValue=fce;Nt.getParentTypeName=mce;Nt.newConditionalFieldData=Nce;Nt.getDefinitionDataCoords=Tce;Nt.isParentDataCompositeOutputType=Ece;Nt.newExternalFieldData=hce;Nt.getInitialFederatedDescription=yce;Nt.areKindsEqual=Ice;Nt.isFieldData=pq;var at=Ae(),TO=bp(),Al=Jr(),hO=sa(),qt=lr(),Ap=Hr(),que=EN();function Vue(){return{deprecatedReason:"",directivesByDirectiveName:new Map,isDeprecated:!1,tagDirectiveByName:new Map}}function jue(e,t,n){var i;let r={isExternal:n.has(qt.EXTERNAL),isShareable:t||n.has(qt.SHAREABLE)};if(!((i=e.directives)!=null&&i.length))return r;for(let a of e.directives){let o=a.name.value;if(o===qt.EXTERNAL){r.isExternal=!0;continue}o===qt.SHAREABLE&&(r.isShareable=!0)}return r}function Kue(e){return e.kind===at.Kind.NON_NULL_TYPE}function oq(e,t){switch(e.kind){case at.Kind.LIST_TYPE:return t.kind===at.Kind.LIST||t.kind===at.Kind.NULL;case at.Kind.NAMED_TYPE:if(t.kind===at.Kind.NULL)return!0;switch(e.name.value){case qt.BOOLEAN_SCALAR:return t.kind===at.Kind.BOOLEAN;case qt.FLOAT_SCALAR:return t.kind===at.Kind.INT||t.kind===at.Kind.FLOAT;case qt.INT_SCALAR:return t.kind===at.Kind.INT;case qt.STRING_SCALAR:return t.kind===at.Kind.STRING;default:return!0}case at.Kind.NON_NULL_TYPE:return t.kind===at.Kind.NULL?!1:oq(e.type,t)}}function Gue(e,t,n){if(!e.defaultValue)return;if(!t.defaultValue){e.includeDefaultValue=!1;return}let r=(0,at.print)(e.defaultValue),i=(0,at.print)(t.defaultValue);if(r!==i){n.push((0,hO.incompatibleInputValueDefaultValuesError)(`${e.isArgument?qt.ARGUMENT:qt.INPUT_FIELD} "${e.name}"`,e.originalCoords,[...t.subgraphNames],r,i));return}}function $ue(e,t){let n=new Set;for(let r of t)e.executableLocations.has(r)&&n.add(r);e.executableLocations=n}function Que(e,t){return qt.ROOT_TYPE_NAMES.has(e)||t.has(e)}function Yue(e,t){let n=t.get(e);if(!n)return e;switch(n){case at.OperationTypeNode.MUTATION:return qt.MUTATION;case at.OperationTypeNode.SUBSCRIPTION:return qt.SUBSCRIPTION;default:return qt.QUERY}}function Jue(e){for(let t of e.argumentDataByArgumentName.values()){for(let n of t.directivesByDirectiveName.values())t.node.directives.push(...n);e.node.arguments.push(t.node)}}function Hue(e){let t=[];for(let n of e.values()){pq(n)&&Jue(n);for(let r of n.directivesByDirectiveName.values())n.node.directives.push(...r);t.push(n.node)}return t}function zue(e){if(e.kind===at.Kind.OBJECT_TYPE_DEFINITION)for(let t of qt.INHERITABLE_DIRECTIVE_NAMES)e.directivesByDirectiveName.delete(t)}function Wue(e,t){if(t.description){if("configureDescriptionDataBySubgraphName"in t){for(let{propagate:n}of t.configureDescriptionDataBySubgraphName.values())if(!n)return}(!e.description||e.description.value.length0&&e.persistedDirectivesData.directivesByDirectiveName.set(qt.REQUIRES_SCOPES,[(0,Ap.generateRequiresScopesDirective)(t.requiredScopes)]))}function ice(e,t){if(!t)return;let n=t.fieldAuthDataByFieldName.get(e.name);n&&(n.originalData.requiresAuthentication&&e.persistedDirectivesData.directivesByDirectiveName.set(qt.AUTHENTICATED,[(0,Ap.generateSimpleDirective)(qt.AUTHENTICATED)]),n.originalData.requiredScopes.length>0&&e.persistedDirectivesData.directivesByDirectiveName.set(qt.REQUIRES_SCOPES,[(0,Ap.generateRequiresScopesDirective)(n.originalData.requiredScopes)]))}function yO(e){return{kind:at.Kind.DIRECTIVE,name:(0,Al.stringToNameNode)(qt.DEPRECATED),arguments:[{kind:at.Kind.ARGUMENT,name:(0,Al.stringToNameNode)(qt.REASON),value:{kind:at.Kind.STRING,value:e||qt.DEPRECATED_DEFAULT_ARGUMENT_VALUE}}]}}function ace(e,t,n,r){let i=[];for(let[a,o]of e){let c=t.get(a);if(c){if(o.length<2){i.push(...o);continue}if(!c.repeatable){r.push((0,hO.invalidRepeatedFederatedDirectiveErrorMessage)(a,n));continue}i.push(...o)}}return i}function cq(e,t,n){let r=[...e.persistedDirectivesData.tagDirectiveByName.values()];return e.persistedDirectivesData.isDeprecated&&r.push(yO(e.persistedDirectivesData.deprecatedReason)),r.push(...ace(e.persistedDirectivesData.directivesByDirectiveName,t,e.name,n)),r}function EO(e){let t=[];e.persistedDirectivesData.isDeprecated&&t.push(yO(e.persistedDirectivesData.deprecatedReason));for(let[n,r]of e.persistedDirectivesData.directivesByDirectiveName)qt.PERSISTED_CLIENT_DIRECTIVES.has(n)&&t.push(r[0]);return t}function sce(e,t,n){return e.node.name=(0,Al.stringToNameNode)(e.name),e.node.description=e.description,e.node.directives=cq(e,t,n),e.node}function oce(e){let t=EO(e),n=[];for(let r of e.argumentDataByArgumentName.values())dq(r)||n.push(Q(M({},r.node),{directives:EO(r)}));return Q(M({},e.node),{directives:t,arguments:n})}function lq(e,t,n){return e.node.name=(0,Al.stringToNameNode)(e.name),e.node.type=e.type,e.node.description=e.description,e.node.directives=cq(e,t,n),e.includeDefaultValue&&(e.node.defaultValue=e.defaultValue),e.node}function uce(e,t,n,r,i){let a=[];for(let[o,c]of t.argumentDataByArgumentName){let l=(0,Ap.getEntriesNotInHashSet)(t.subgraphNames,c.subgraphNames);if(l.length>0){c.requiredSubgraphNames.size>0&&a.push({inputValueName:o,missingSubgraphs:l,requiredSubgraphs:[...c.requiredSubgraphNames]});continue}e.push(lq(c,n,r)),i&&i.add(o)}return a.length>0?(r.push((0,hO.invalidRequiredInputValueError)(qt.DIRECTIVE_DEFINITION,`@${t.name}`,a)),!1):!0}function cce(e,t,n,r){let i=[];uce(i,t,n,r)&&e.push({arguments:i,kind:at.Kind.DIRECTIVE_DEFINITION,locations:(0,Al.setToNameNodeArray)(t.executableLocations),name:(0,Al.stringToNameNode)(t.name),repeatable:t.repeatable,description:t.description})}function lce(){return{byShareable:new Set,subgraphNamesByExternalFieldName:new Map}}function dce(e,t){let n=e.isShareableBySubgraphName.size,r=[],i=0;for(let[a,o]of e.isShareableBySubgraphName){let c=e.externalFieldDataBySubgraphName.get(a);if(c&&!c.isUnconditionallyProvided){r.push(a);continue}o||(i+=1)}switch(i){case 0:n===r.length&&t.subgraphNamesByExternalFieldName.set(e.name,r);return;case 1:if(n===1)return;n-r.length!==1&&t.byShareable.add(e.name);return;default:t.byShareable.add(e.name)}}var sq;(function(e){e[e.UNION=0]="UNION",e[e.INTERSECTION=1]="INTERSECTION",e[e.CONSISTENT=2]="CONSISTENT"})(sq||(Nt.MergeMethod=sq={}));function nE(e,t,n){if(e.kind===at.Kind.NON_NULL_TYPE)return t.kind!==at.Kind.NON_NULL_TYPE?!1:nE(e.type,t.type,n);if(t.kind===at.Kind.NON_NULL_TYPE)return nE(e,t.type,n);switch(e.kind){case at.Kind.NAMED_TYPE:if(t.kind===at.Kind.NAMED_TYPE){let r=e.name.value,i=t.name.value;if(r===i)return!0;let a=n.get(r);return a?a.has(i):!1}return!1;default:return t.kind===at.Kind.LIST_TYPE?nE(e.type,t.type,n):!1}}function dq(e){return e.persistedDirectivesData.directivesByDirectiveName.has(qt.INACCESSIBLE)||e.directivesByDirectiveName.has(qt.INACCESSIBLE)}function pce(e){return e===at.Kind.SCALAR_TYPE_DEFINITION||e===at.Kind.ENUM_TYPE_DEFINITION}function fce(e){switch(e.kind){case at.Kind.BOOLEAN:return e.value;case at.Kind.ENUM:case at.Kind.STRING:return e.value;case at.Kind.FLOAT:case at.Kind.INT:try{return parseFloat(e.value)}catch(t){return"NaN"}case at.Kind.NULL:return null}}function mce(e){return e.kind===at.Kind.OBJECT_TYPE_DEFINITION&&e.renamedTypeName||e.name}function Nce(){return{providedBy:[],requiredBy:[]}}function Tce(e,t){switch(e.kind){case at.Kind.ENUM_VALUE_DEFINITION:return`${e.parentTypeName}.${e.name}`;case at.Kind.FIELD_DEFINITION:return`${t?e.renamedParentTypeName:e.originalParentTypeName}.${e.name}`;case at.Kind.ARGUMENT:case at.Kind.INPUT_VALUE_DEFINITION:return t?e.federatedCoords:e.originalCoords;case at.Kind.OBJECT_TYPE_DEFINITION:return t?e.renamedTypeName:e.name;default:return e.name}}function Ece(e){return e.kind===at.Kind.OBJECT_TYPE_DEFINITION||e.kind===at.Kind.INTERFACE_TYPE_DEFINITION}function hce(e){return{isDefinedExternal:e,isUnconditionallyProvided:!e}}function yce(e){let{value:t,done:n}=e.configureDescriptionDataBySubgraphName.values().next();if(n)return e.description;if(t.propagate)return(0,que.getDescriptionFromString)(t.description)||e.description}function Ice(e,t){return e.kind===t.kind}function pq(e){return e.kind===at.Kind.FIELD_DEFINITION}});var gO=w(iE=>{"use strict";f();N();m();Object.defineProperty(iE,"__esModule",{value:!0});iE.upsertDirectiveSchemaAndEntityDefinitions=vce;iE.upsertParentsAndChildren=Sce;var jn=Ae(),iu=sa(),ic=hs(),rE=up(),Rl=Jr(),IO=Dp(),gce=np(),rc=Rp(),Fp=Jo(),_ce=eE(),rr=lr(),fr=Hr();function vce(e,t){(0,jn.visit)(t,{Directive:{enter(n){let r=n.name.value;if(gce.EVENT_DIRECTIVE_NAMES.has(r)&&e.edfsDirectiveReferences.add(r),ic.V2_DIRECTIVE_DEFINITION_BY_DIRECTIVE_NAME.has(r))return e.isSubgraphVersionTwo=!0,!1;if(ic.BASE_DIRECTIVE_DEFINITION_BY_DIRECTIVE_NAME.has(r))return!1;switch(r){case rr.SUBSCRIPTION_FILTER:{e.directiveDefinitionByDirectiveName.set(rr.SUBSCRIPTION_FILTER,ic.SUBSCRIPTION_FILTER_DEFINITION);break}case rr.CONFIGURE_DESCRIPTION:{e.directiveDefinitionByDirectiveName.set(rr.CONFIGURE_DESCRIPTION,ic.CONFIGURE_DESCRIPTION_DEFINITION);break}case rr.CONFIGURE_CHILD_DESCRIPTIONS:{e.directiveDefinitionByDirectiveName.set(rr.CONFIGURE_CHILD_DESCRIPTIONS,ic.CONFIGURE_CHILD_DESCRIPTIONS_DEFINITION);break}}e.referencedDirectiveNames.add(r)}},DirectiveDefinition:{enter(n){return e.addDirectiveDefinitionDataByNode(n)&&e.customDirectiveDefinitions.set(n.name.value,n),!1}},InterfaceTypeDefinition:{enter(n){let r=n.name.value;if(e.internalGraph.addOrUpdateNode(r,{isAbstract:!0}),!(0,Rl.isObjectLikeNodeEntity)(n))return;let i=(0,fr.getValueOrDefault)(e.keyFieldSetDatasByTypeName,r,()=>new Map);e.extractKeyFieldSets(n,i),(0,rE.upsertEntityData)({entityDataByTypeName:e.entityDataByTypeName,keyFieldSetDataByFieldSet:i,subgraphName:e.subgraphName,typeName:r}),(0,fr.getValueOrDefault)(e.entityInterfaceDataByTypeName,r,()=>({concreteTypeNames:new Set,fieldDatas:[],interfaceFieldNames:new Set,interfaceObjectFieldNames:new Set,isInterfaceObject:!1,resolvable:!1,typeName:r}))}},InterfaceTypeExtension:{enter(n){let r=n.name.value;if(e.internalGraph.addOrUpdateNode(r,{isAbstract:!0}),!(0,Rl.isObjectLikeNodeEntity)(n))return;let i=(0,fr.getValueOrDefault)(e.keyFieldSetDatasByTypeName,r,()=>new Map);e.extractKeyFieldSets(n,i),(0,rE.upsertEntityData)({entityDataByTypeName:e.entityDataByTypeName,keyFieldSetDataByFieldSet:i,subgraphName:e.subgraphName,typeName:r}),(0,fr.getValueOrDefault)(e.entityInterfaceDataByTypeName,r,()=>({concreteTypeNames:new Set,fieldDatas:[],interfaceFieldNames:new Set,interfaceObjectFieldNames:new Set,isInterfaceObject:!1,resolvable:!1,typeName:r}))}},ObjectTypeDefinition:{enter(n){if(!(0,Rl.isObjectLikeNodeEntity)(n))return;let r=n.name.value;(0,Rl.isNodeInterfaceObject)(n)&&(e.entityInterfaceDataByTypeName.set(r,{concreteTypeNames:new Set,fieldDatas:[],interfaceObjectFieldNames:new Set,interfaceFieldNames:new Set,isInterfaceObject:!0,resolvable:!1,typeName:r}),e.internalGraph.addOrUpdateNode(r,{isAbstract:!0}));let i=(0,fr.getValueOrDefault)(e.keyFieldSetDatasByTypeName,r,()=>new Map);e.extractKeyFieldSets(n,i),(0,rE.upsertEntityData)({entityDataByTypeName:e.entityDataByTypeName,keyFieldSetDataByFieldSet:i,subgraphName:e.subgraphName,typeName:r})}},ObjectTypeExtension:{enter(n){if(!(0,Rl.isObjectLikeNodeEntity)(n))return;let r=n.name.value,i=(0,fr.getValueOrDefault)(e.keyFieldSetDatasByTypeName,r,()=>new Map);e.extractKeyFieldSets(n,i),(0,rE.upsertEntityData)({entityDataByTypeName:e.entityDataByTypeName,keyFieldSetDataByFieldSet:i,subgraphName:e.subgraphName,typeName:r})}},OperationTypeDefinition:{enter(n){let r=n.operation,i=e.schemaData.operationTypes.get(r),a=(0,Fp.getTypeNodeNamedTypeName)(n.type);if(i)return(0,iu.duplicateOperationTypeDefinitionError)(r,a,(0,Fp.getTypeNodeNamedTypeName)(i.type)),!1;let o=e.operationTypeNodeByTypeName.get(a);return o?(e.errors.push((0,iu.invalidOperationTypeDefinitionError)(o,a,r)),!1):(e.operationTypeNodeByTypeName.set(a,r),e.schemaData.operationTypes.set(r,n),!1)}},SchemaDefinition:{enter(n){e.schemaData.description=n.description,e.extractDirectives(n,e.schemaData.directivesByDirectiveName)}},SchemaExtension:{enter(n){e.extractDirectives(n,e.schemaData.directivesByDirectiveName)}}})}function Sce(e,t){let n=!1,r;(0,jn.visit)(t,{EnumTypeDefinition:{enter(i){e.originalParentTypeName=i.name.value,e.lastParentNodeKind=i.kind,e.upsertEnumDataByNode(i)},leave(){e.originalParentTypeName="",e.lastParentNodeKind=jn.Kind.NULL}},EnumTypeExtension:{enter(i){e.originalParentTypeName=i.name.value,e.lastParentNodeKind=i.kind,e.upsertEnumDataByNode(i,!0)},leave(){e.originalParentTypeName="",e.lastParentNodeKind=jn.Kind.NULL}},EnumValueDefinition:{enter(i){let a=i.name.value;e.lastChildNodeKind=i.kind;let o=(0,fr.getOrThrowError)(e.parentDefinitionDataByTypeName,e.originalParentTypeName,rr.PARENT_DEFINITION_DATA);if(o.kind!==jn.Kind.ENUM_TYPE_DEFINITION){e.errors.push((0,iu.unexpectedParentKindForChildError)(e.originalParentTypeName,"Enum or Enum extension",(0,fr.kindToTypeString)(o.kind),a,(0,fr.kindToTypeString)(i.kind)));return}if(o.enumValueDataByValueName.has(a)){e.errors.push((0,iu.duplicateEnumValueDefinitionError)(e.originalParentTypeName,a));return}o.enumValueDataByValueName.set(a,{appearances:1,configureDescriptionDataBySubgraphName:new Map,directivesByDirectiveName:e.extractDirectives(i,new Map),federatedCoords:`${e.originalParentTypeName}.${a}`,kind:jn.Kind.ENUM_VALUE_DEFINITION,name:a,node:(0,Fp.getMutableEnumValueNode)(i),parentTypeName:e.originalParentTypeName,persistedDirectivesData:(0,rc.newPersistedDirectivesData)(),subgraphNames:new Set([e.subgraphName]),description:(0,Rl.formatDescription)(i.description)})},leave(){e.lastChildNodeKind=jn.Kind.NULL}},FieldDefinition:{enter(i){let a=i.name.value;if(n&&rr.IGNORED_FIELDS.has(a))return!1;e.edfsDirectiveReferences.size>0&&e.validateSubscriptionFilterDirectiveLocation(i),e.lastChildNodeKind=i.kind;let o=(0,Fp.getTypeNodeNamedTypeName)(i.type);(0,fr.getValueOrDefault)(e.fieldCoordsByNamedTypeName,o,()=>new Set).add(`${e.renamedParentTypeName||e.originalParentTypeName}.${a}`),r&&!r.isAbstract&&e.internalGraph.addEdge(r,e.internalGraph.addOrUpdateNode(o),a),ic.BASE_SCALARS.has(o)||e.referencedTypeNames.add(o);let c=(0,fr.getOrThrowError)(e.parentDefinitionDataByTypeName,e.originalParentTypeName,rr.PARENT_DEFINITION_DATA);if(!(0,rc.isParentDataCompositeOutputType)(c)){e.errors.push((0,iu.unexpectedParentKindForChildError)(e.originalParentTypeName,'"Object" or "Interface"',(0,fr.kindToTypeString)(c.kind),a,(0,fr.kindToTypeString)(i.kind)));return}if(c.fieldDataByFieldName.has(a)){e.errors.push((0,iu.duplicateFieldDefinitionError)((0,fr.kindToTypeString)(c.kind),c.name,a));return}let l=e.extractArguments(new Map,i),p=e.extractDirectives(i,new Map);(0,rc.isParentDataInterfaceType)(c)||(e.addInheritedDirectivesToFieldData(p),p.has(rr.EXTERNAL)&&e.unvalidatedExternalFieldCoords.add(`${e.originalParentTypeName}.${a}`));let T=e.addFieldDataByNode(c.fieldDataByFieldName,i,l,p);n&&e.extractEventDirectivesToConfiguration(i,l);let y=T.directivesByDirectiveName.get(rr.PROVIDES),g=T.directivesByDirectiveName.get(rr.REQUIRES);if(!g&&!y)return;let _=e.entityDataByTypeName.get(e.originalParentTypeName),F=(0,fr.getValueOrDefault)(e.fieldSetDataByTypeName,e.originalParentTypeName,IO.newFieldSetData);y&&(0,IO.extractFieldSetValue)(a,F.provides,y),g&&(_||e.warnings.push((0,_ce.requiresDefinedOnNonEntityFieldWarning)(`${e.originalParentTypeName}.${a}`,e.subgraphName)),(0,IO.extractFieldSetValue)(a,F.requires,g))},leave(){e.lastChildNodeKind=jn.Kind.NULL}},InputObjectTypeDefinition:{enter(i){e.originalParentTypeName=i.name.value,e.lastParentNodeKind=i.kind,e.upsertInputObjectByNode(i)},leave(){e.lastParentNodeKind=jn.Kind.NULL,e.originalParentTypeName=""}},InputObjectTypeExtension:{enter(i){e.originalParentTypeName=i.name.value,e.lastParentNodeKind=i.kind,e.upsertInputObjectByNode(i,!0)},leave(){e.originalParentTypeName="",e.lastParentNodeKind=jn.Kind.NULL}},InputValueDefinition:{enter(i){let a=i.name.value;if(e.lastParentNodeKind!==jn.Kind.INPUT_OBJECT_TYPE_DEFINITION&&e.lastParentNodeKind!==jn.Kind.INPUT_OBJECT_TYPE_EXTENSION){e.argumentName=a;return}e.lastChildNodeKind=i.kind;let o=`${e.originalParentTypeName}.${a}`,c=(0,Fp.getTypeNodeNamedTypeName)(i.type);ic.BASE_SCALARS.has(c)||e.referencedTypeNames.add(c);let l=(0,fr.getOrThrowError)(e.parentDefinitionDataByTypeName,e.originalParentTypeName,rr.PARENT_DEFINITION_DATA);if(l.kind!==jn.Kind.INPUT_OBJECT_TYPE_DEFINITION)return e.errors.push((0,iu.unexpectedParentKindForChildError)(e.originalParentTypeName,"input object or input object extension",(0,fr.kindToTypeString)(l.kind),a,(0,fr.kindToTypeString)(i.kind))),!1;if(l.inputValueDataByValueName.has(a)){e.errors.push((0,iu.duplicateInputFieldDefinitionError)(e.originalParentTypeName,a));return}e.addInputValueDataByNode(l.inputValueDataByValueName,i,o)},leave(){e.argumentName="",e.lastChildNodeKind===jn.Kind.INPUT_VALUE_DEFINITION&&(e.lastChildNodeKind=jn.Kind.NULL)}},InterfaceTypeDefinition:{enter(i){e.originalParentTypeName=i.name.value,e.lastParentNodeKind=i.kind,e.upsertInterfaceDataByNode(i)},leave(){e.originalParentTypeName="",e.lastParentNodeKind=jn.Kind.NULL}},InterfaceTypeExtension:{enter(i){e.originalParentTypeName=i.name.value,e.lastParentNodeKind=i.kind,e.upsertInterfaceDataByNode(i,!0)},leave(){e.originalParentTypeName="",e.lastParentNodeKind=jn.Kind.NULL}},ObjectTypeDefinition:{enter(i){if(i.name.value===rr.SERVICE_OBJECT)return!1;e.originalParentTypeName=i.name.value,n=(0,rc.isTypeNameRootType)(e.originalParentTypeName,e.operationTypeNodeByTypeName),e.renamedParentTypeName=(0,rc.getRenamedRootTypeName)(e.originalParentTypeName,e.operationTypeNodeByTypeName),e.originalTypeNameByRenamedTypeName.set(e.renamedParentTypeName,e.originalParentTypeName),r=n?e.internalGraph.getRootNode(e.renamedParentTypeName):e.internalGraph.addOrUpdateNode(e.renamedParentTypeName),e.lastParentNodeKind=i.kind,e.upsertObjectDataByNode(i)},leave(){r=void 0,n=!1,e.originalParentTypeName="",e.renamedParentTypeName="",e.lastParentNodeKind=jn.Kind.NULL,e.isParentObjectExternal=!1,e.isParentObjectShareable=!1}},ObjectTypeExtension:{enter(i){if(i.name.value===rr.SERVICE_OBJECT)return!1;e.originalParentTypeName=i.name.value,n=(0,rc.isTypeNameRootType)(e.originalParentTypeName,e.operationTypeNodeByTypeName),e.renamedParentTypeName=(0,rc.getRenamedRootTypeName)(e.originalParentTypeName,e.operationTypeNodeByTypeName),e.originalTypeNameByRenamedTypeName.set(e.renamedParentTypeName,e.originalParentTypeName),r=n?e.internalGraph.getRootNode(e.renamedParentTypeName):e.internalGraph.addOrUpdateNode(e.renamedParentTypeName),e.lastParentNodeKind=i.kind,e.upsertObjectDataByNode(i,!0)},leave(){r=void 0,n=!1,e.originalParentTypeName="",e.renamedParentTypeName="",e.lastParentNodeKind=jn.Kind.NULL,e.isParentObjectExternal=!1,e.isParentObjectShareable=!1}},ScalarTypeDefinition:{enter(i){if(i.name.value===rr.ANY_SCALAR)return!1;e.originalParentTypeName=i.name.value,e.lastParentNodeKind=i.kind,e.upsertScalarByNode(i)},leave(){e.originalParentTypeName="",e.lastParentNodeKind=jn.Kind.NULL}},ScalarTypeExtension:{enter(i){if(i.name.value===rr.ANY_SCALAR)return!1;e.originalParentTypeName=i.name.value,e.lastParentNodeKind=i.kind,e.upsertScalarByNode(i,!0)},leave(){e.originalParentTypeName="",e.lastParentNodeKind=jn.Kind.NULL}},UnionTypeDefinition:{enter(i){i.name.value!==rr.ENTITY_UNION&&e.upsertUnionByNode(i)}},UnionTypeExtension:{enter(i){if(i.name.value===rr.ENTITY_UNION)return!1;e.upsertUnionByNode(i,!0)}}})}});var DO=w(Ga=>{"use strict";f();N();m();Object.defineProperty(Ga,"__esModule",{value:!0});Ga.EntityDataNode=Ga.RootNode=Ga.GraphNode=Ga.Edge=void 0;var aE=Hr(),_O=class{constructor(t,n,r,i=!1){v(this,"edgeName");v(this,"id");v(this,"isAbstractEdge");v(this,"isInaccessible",!1);v(this,"node");v(this,"visitedIndices",new Set);this.edgeName=i?`... on ${r}`:r,this.id=t,this.isAbstractEdge=i,this.node=n}};Ga.Edge=_O;var vO=class{constructor(t,n,r){v(this,"fieldDataByFieldName",new Map);v(this,"headToTailEdges",new Map);v(this,"entityEdges",[]);v(this,"nodeName");v(this,"hasEntitySiblings",!1);v(this,"isAbstract");v(this,"isInaccessible",!1);v(this,"isLeaf",!1);v(this,"isRootNode",!1);v(this,"satisfiedFieldSets",new Set);v(this,"subgraphName");v(this,"typeName");this.isAbstract=!!(r!=null&&r.isAbstract),this.isLeaf=!!(r!=null&&r.isLeaf),this.nodeName=`${t}.${n}`,this.subgraphName=t,this.typeName=n}handleInaccessibleEdges(){if(this.isAbstract)return;let t=(0,aE.getEntriesNotInHashSet)(this.headToTailEdges.keys(),this.fieldDataByFieldName);for(let n of t){let r=this.headToTailEdges.get(n);r&&(r.isInaccessible=!0)}}getAllAccessibleEntityNodeNames(){let t=new Set([this.nodeName]);return this.getAccessibleEntityNodeNames(this,t),t.delete(this.nodeName),t}getAccessibleEntityNodeNames(t,n){for(let r of t.entityEdges)(0,aE.add)(n,r.node.nodeName)&&this.getAccessibleEntityNodeNames(r.node,n)}};Ga.GraphNode=vO;var SO=class{constructor(t){v(this,"fieldDataByFieldName",new Map);v(this,"headToShareableTailEdges",new Map);v(this,"isAbstract",!1);v(this,"isRootNode",!0);v(this,"typeName");this.typeName=t}removeInaccessibleEdges(t){for(let[n,r]of this.headToShareableTailEdges)if(!t.has(n))for(let i of r)i.isInaccessible=!0}};Ga.RootNode=SO;var OO=class{constructor(t){v(this,"fieldSetsByTargetSubgraphName",new Map);v(this,"targetSubgraphNamesByFieldSet",new Map);v(this,"typeName");this.typeName=t}addTargetSubgraphByFieldSet(t,n){(0,aE.getValueOrDefault)(this.targetSubgraphNamesByFieldSet,t,()=>new Set).add(n),(0,aE.getValueOrDefault)(this.fieldSetsByTargetSubgraphName,n,()=>new Set).add(t)}};Ga.EntityDataNode=OO});var AO=w(vs=>{"use strict";f();N();m();Object.defineProperty(vs,"__esModule",{value:!0});vs.NodeResolutionData=void 0;vs.newRootFieldData=Oce;vs.generateResolvabilityErrorReasons=Nq;vs.generateSelectionSetSegments=Tq;vs.renderSelectionSet=Eq;vs.generateResolvabilityErrors=Ace;var fq=sa(),ac=lr(),mq=Hr(),bO=class{constructor(t,n){v(this,"fieldDataByFieldName");v(this,"isResolved",!1);v(this,"resolvedFieldNames",new Set);v(this,"typeName");this.fieldDataByFieldName=n,this.typeName=t}add(t){if(this.resolvedFieldNames.add(t),this.resolvedFieldNames.size>this.fieldDataByFieldName.size){let n=(0,mq.getEntriesNotInHashSet)(this.resolvedFieldNames,this.fieldDataByFieldName);throw(0,fq.unexpectedEdgeFatalError)(this.typeName,n)}return this.isResolved=this.resolvedFieldNames.size===this.fieldDataByFieldName.size,this.isResolved}};vs.NodeResolutionData=bO;function Oce(e,t,n){return{coordinate:`${e}.${t}`,message:`The root type field "${e}.${t}" is defined in the following subgraph`+(n.size>1?"s":"")+`: "${[...n].join(ac.QUOTATION_JOIN)}".`,subgraphNames:n}}function Dce(e,t){return e.isLeaf?e.name+` <-- +Although "${e}" is declared "@external", it is part of a "@key" directive on an extension type. Such fields are only declared "@external" for legacy syntactical reasons and are not internally considered "@external".`,subgraph:{name:r}})}});var Ap=w(rE=>{"use strict";m();T();N();Object.defineProperty(rE,"__esModule",{value:!0});rE.ExtensionType=void 0;var sq;(function(e){e[e.EXTENDS=0]="EXTENDS",e[e.NONE=1]="NONE",e[e.REAL=2]="REAL"})(sq||(rE.ExtensionType=sq={}))});var Fp=w(Nt=>{"use strict";m();T();N();Object.defineProperty(Nt,"__esModule",{value:!0});Nt.MergeMethod=void 0;Nt.newPersistedDirectivesData=Vue;Nt.isNodeExternalOrShareable=jue;Nt.isTypeRequired=Kue;Nt.areDefaultValuesCompatible=uq;Nt.compareAndValidateInputValueDefaultValues=Gue;Nt.setMutualExecutableLocations=$ue;Nt.isTypeNameRootType=Que;Nt.getRenamedRootTypeName=Yue;Nt.childMapToValueArray=Hue;Nt.removeInheritableDirectivesFromObjectParent=zue;Nt.setLongestDescription=Wue;Nt.isParentDataRootType=cq;Nt.isParentDataInterfaceType=Xue;Nt.setParentDataExtensionType=Zue;Nt.extractPersistedDirectives=nce;Nt.propagateAuthDirectives=rce;Nt.propagateFieldAuthDirectives=ice;Nt.generateDeprecatedDirective=IO;Nt.getClientPersistedDirectiveNodes=hO;Nt.getNodeForRouterSchemaByData=sce;Nt.getClientSchemaFieldNodeByFieldData=oce;Nt.getNodeWithPersistedDirectivesByInputValueData=dq;Nt.addValidPersistedDirectiveDefinitionNodeByData=cce;Nt.newInvalidFieldNames=lce;Nt.validateExternalAndShareable=dce;Nt.isTypeValidImplementation=iE;Nt.isNodeDataInaccessible=pq;Nt.isLeafKind=pce;Nt.getSubscriptionFilterValue=fce;Nt.getParentTypeName=mce;Nt.newConditionalFieldData=Nce;Nt.getDefinitionDataCoords=Tce;Nt.isParentDataCompositeOutputType=Ece;Nt.newExternalFieldData=hce;Nt.getInitialFederatedDescription=yce;Nt.areKindsEqual=Ice;Nt.isFieldData=fq;var at=Ae(),EO=Ap(),Al=Jr(),yO=sa(),qt=lr(),Rp=Hr(),que=yN();function Vue(){return{deprecatedReason:"",directivesByDirectiveName:new Map,isDeprecated:!1,tagDirectiveByName:new Map}}function jue(e,t,n){var i;let r={isExternal:n.has(qt.EXTERNAL),isShareable:t||n.has(qt.SHAREABLE)};if(!((i=e.directives)!=null&&i.length))return r;for(let a of e.directives){let o=a.name.value;if(o===qt.EXTERNAL){r.isExternal=!0;continue}o===qt.SHAREABLE&&(r.isShareable=!0)}return r}function Kue(e){return e.kind===at.Kind.NON_NULL_TYPE}function uq(e,t){switch(e.kind){case at.Kind.LIST_TYPE:return t.kind===at.Kind.LIST||t.kind===at.Kind.NULL;case at.Kind.NAMED_TYPE:if(t.kind===at.Kind.NULL)return!0;switch(e.name.value){case qt.BOOLEAN_SCALAR:return t.kind===at.Kind.BOOLEAN;case qt.FLOAT_SCALAR:return t.kind===at.Kind.INT||t.kind===at.Kind.FLOAT;case qt.INT_SCALAR:return t.kind===at.Kind.INT;case qt.STRING_SCALAR:return t.kind===at.Kind.STRING;default:return!0}case at.Kind.NON_NULL_TYPE:return t.kind===at.Kind.NULL?!1:uq(e.type,t)}}function Gue(e,t,n){if(!e.defaultValue)return;if(!t.defaultValue){e.includeDefaultValue=!1;return}let r=(0,at.print)(e.defaultValue),i=(0,at.print)(t.defaultValue);if(r!==i){n.push((0,yO.incompatibleInputValueDefaultValuesError)(`${e.isArgument?qt.ARGUMENT:qt.INPUT_FIELD} "${e.name}"`,e.originalCoords,[...t.subgraphNames],r,i));return}}function $ue(e,t){let n=new Set;for(let r of t)e.executableLocations.has(r)&&n.add(r);e.executableLocations=n}function Que(e,t){return qt.ROOT_TYPE_NAMES.has(e)||t.has(e)}function Yue(e,t){let n=t.get(e);if(!n)return e;switch(n){case at.OperationTypeNode.MUTATION:return qt.MUTATION;case at.OperationTypeNode.SUBSCRIPTION:return qt.SUBSCRIPTION;default:return qt.QUERY}}function Jue(e){for(let t of e.argumentDataByArgumentName.values()){for(let n of t.directivesByDirectiveName.values())t.node.directives.push(...n);e.node.arguments.push(t.node)}}function Hue(e){let t=[];for(let n of e.values()){fq(n)&&Jue(n);for(let r of n.directivesByDirectiveName.values())n.node.directives.push(...r);t.push(n.node)}return t}function zue(e){if(e.kind===at.Kind.OBJECT_TYPE_DEFINITION)for(let t of qt.INHERITABLE_DIRECTIVE_NAMES)e.directivesByDirectiveName.delete(t)}function Wue(e,t){if(t.description){if("configureDescriptionDataBySubgraphName"in t){for(let{propagate:n}of t.configureDescriptionDataBySubgraphName.values())if(!n)return}(!e.description||e.description.value.length0&&e.persistedDirectivesData.directivesByDirectiveName.set(qt.REQUIRES_SCOPES,[(0,Rp.generateRequiresScopesDirective)(t.requiredScopes)]))}function ice(e,t){if(!t)return;let n=t.fieldAuthDataByFieldName.get(e.name);n&&(n.originalData.requiresAuthentication&&e.persistedDirectivesData.directivesByDirectiveName.set(qt.AUTHENTICATED,[(0,Rp.generateSimpleDirective)(qt.AUTHENTICATED)]),n.originalData.requiredScopes.length>0&&e.persistedDirectivesData.directivesByDirectiveName.set(qt.REQUIRES_SCOPES,[(0,Rp.generateRequiresScopesDirective)(n.originalData.requiredScopes)]))}function IO(e){return{kind:at.Kind.DIRECTIVE,name:(0,Al.stringToNameNode)(qt.DEPRECATED),arguments:[{kind:at.Kind.ARGUMENT,name:(0,Al.stringToNameNode)(qt.REASON),value:{kind:at.Kind.STRING,value:e||qt.DEPRECATED_DEFAULT_ARGUMENT_VALUE}}]}}function ace(e,t,n,r){let i=[];for(let[a,o]of e){let c=t.get(a);if(c){if(o.length<2){i.push(...o);continue}if(!c.repeatable){r.push((0,yO.invalidRepeatedFederatedDirectiveErrorMessage)(a,n));continue}i.push(...o)}}return i}function lq(e,t,n){let r=[...e.persistedDirectivesData.tagDirectiveByName.values()];return e.persistedDirectivesData.isDeprecated&&r.push(IO(e.persistedDirectivesData.deprecatedReason)),r.push(...ace(e.persistedDirectivesData.directivesByDirectiveName,t,e.name,n)),r}function hO(e){let t=[];e.persistedDirectivesData.isDeprecated&&t.push(IO(e.persistedDirectivesData.deprecatedReason));for(let[n,r]of e.persistedDirectivesData.directivesByDirectiveName)qt.PERSISTED_CLIENT_DIRECTIVES.has(n)&&t.push(r[0]);return t}function sce(e,t,n){return e.node.name=(0,Al.stringToNameNode)(e.name),e.node.description=e.description,e.node.directives=lq(e,t,n),e.node}function oce(e){let t=hO(e),n=[];for(let r of e.argumentDataByArgumentName.values())pq(r)||n.push(Q(M({},r.node),{directives:hO(r)}));return Q(M({},e.node),{directives:t,arguments:n})}function dq(e,t,n){return e.node.name=(0,Al.stringToNameNode)(e.name),e.node.type=e.type,e.node.description=e.description,e.node.directives=lq(e,t,n),e.includeDefaultValue&&(e.node.defaultValue=e.defaultValue),e.node}function uce(e,t,n,r,i){let a=[];for(let[o,c]of t.argumentDataByArgumentName){let l=(0,Rp.getEntriesNotInHashSet)(t.subgraphNames,c.subgraphNames);if(l.length>0){c.requiredSubgraphNames.size>0&&a.push({inputValueName:o,missingSubgraphs:l,requiredSubgraphs:[...c.requiredSubgraphNames]});continue}e.push(dq(c,n,r)),i&&i.add(o)}return a.length>0?(r.push((0,yO.invalidRequiredInputValueError)(qt.DIRECTIVE_DEFINITION,`@${t.name}`,a)),!1):!0}function cce(e,t,n,r){let i=[];uce(i,t,n,r)&&e.push({arguments:i,kind:at.Kind.DIRECTIVE_DEFINITION,locations:(0,Al.setToNameNodeArray)(t.executableLocations),name:(0,Al.stringToNameNode)(t.name),repeatable:t.repeatable,description:t.description})}function lce(){return{byShareable:new Set,subgraphNamesByExternalFieldName:new Map}}function dce(e,t){let n=e.isShareableBySubgraphName.size,r=[],i=0;for(let[a,o]of e.isShareableBySubgraphName){let c=e.externalFieldDataBySubgraphName.get(a);if(c&&!c.isUnconditionallyProvided){r.push(a);continue}o||(i+=1)}switch(i){case 0:n===r.length&&t.subgraphNamesByExternalFieldName.set(e.name,r);return;case 1:if(n===1)return;n-r.length!==1&&t.byShareable.add(e.name);return;default:t.byShareable.add(e.name)}}var oq;(function(e){e[e.UNION=0]="UNION",e[e.INTERSECTION=1]="INTERSECTION",e[e.CONSISTENT=2]="CONSISTENT"})(oq||(Nt.MergeMethod=oq={}));function iE(e,t,n){if(e.kind===at.Kind.NON_NULL_TYPE)return t.kind!==at.Kind.NON_NULL_TYPE?!1:iE(e.type,t.type,n);if(t.kind===at.Kind.NON_NULL_TYPE)return iE(e,t.type,n);switch(e.kind){case at.Kind.NAMED_TYPE:if(t.kind===at.Kind.NAMED_TYPE){let r=e.name.value,i=t.name.value;if(r===i)return!0;let a=n.get(r);return a?a.has(i):!1}return!1;default:return t.kind===at.Kind.LIST_TYPE?iE(e.type,t.type,n):!1}}function pq(e){return e.persistedDirectivesData.directivesByDirectiveName.has(qt.INACCESSIBLE)||e.directivesByDirectiveName.has(qt.INACCESSIBLE)}function pce(e){return e===at.Kind.SCALAR_TYPE_DEFINITION||e===at.Kind.ENUM_TYPE_DEFINITION}function fce(e){switch(e.kind){case at.Kind.BOOLEAN:return e.value;case at.Kind.ENUM:case at.Kind.STRING:return e.value;case at.Kind.FLOAT:case at.Kind.INT:try{return parseFloat(e.value)}catch(t){return"NaN"}case at.Kind.NULL:return null}}function mce(e){return e.kind===at.Kind.OBJECT_TYPE_DEFINITION&&e.renamedTypeName||e.name}function Nce(){return{providedBy:[],requiredBy:[]}}function Tce(e,t){switch(e.kind){case at.Kind.ENUM_VALUE_DEFINITION:return`${e.parentTypeName}.${e.name}`;case at.Kind.FIELD_DEFINITION:return`${t?e.renamedParentTypeName:e.originalParentTypeName}.${e.name}`;case at.Kind.ARGUMENT:case at.Kind.INPUT_VALUE_DEFINITION:return t?e.federatedCoords:e.originalCoords;case at.Kind.OBJECT_TYPE_DEFINITION:return t?e.renamedTypeName:e.name;default:return e.name}}function Ece(e){return e.kind===at.Kind.OBJECT_TYPE_DEFINITION||e.kind===at.Kind.INTERFACE_TYPE_DEFINITION}function hce(e){return{isDefinedExternal:e,isUnconditionallyProvided:!e}}function yce(e){let{value:t,done:n}=e.configureDescriptionDataBySubgraphName.values().next();if(n)return e.description;if(t.propagate)return(0,que.getDescriptionFromString)(t.description)||e.description}function Ice(e,t){return e.kind===t.kind}function fq(e){return e.kind===at.Kind.FIELD_DEFINITION}});var _O=w(sE=>{"use strict";m();T();N();Object.defineProperty(sE,"__esModule",{value:!0});sE.upsertDirectiveSchemaAndEntityDefinitions=vce;sE.upsertParentsAndChildren=Sce;var jn=Ae(),au=sa(),ic=hs(),aE=cp(),Rl=Jr(),gO=bp(),gce=rp(),rc=Fp(),Pp=Ho(),_ce=nE(),rr=lr(),fr=Hr();function vce(e,t){(0,jn.visit)(t,{Directive:{enter(n){let r=n.name.value;if(gce.EVENT_DIRECTIVE_NAMES.has(r)&&e.edfsDirectiveReferences.add(r),ic.V2_DIRECTIVE_DEFINITION_BY_DIRECTIVE_NAME.has(r))return e.isSubgraphVersionTwo=!0,!1;if(ic.BASE_DIRECTIVE_DEFINITION_BY_DIRECTIVE_NAME.has(r))return!1;switch(r){case rr.SUBSCRIPTION_FILTER:{e.directiveDefinitionByDirectiveName.set(rr.SUBSCRIPTION_FILTER,ic.SUBSCRIPTION_FILTER_DEFINITION);break}case rr.CONFIGURE_DESCRIPTION:{e.directiveDefinitionByDirectiveName.set(rr.CONFIGURE_DESCRIPTION,ic.CONFIGURE_DESCRIPTION_DEFINITION);break}case rr.CONFIGURE_CHILD_DESCRIPTIONS:{e.directiveDefinitionByDirectiveName.set(rr.CONFIGURE_CHILD_DESCRIPTIONS,ic.CONFIGURE_CHILD_DESCRIPTIONS_DEFINITION);break}}e.referencedDirectiveNames.add(r)}},DirectiveDefinition:{enter(n){return e.addDirectiveDefinitionDataByNode(n)&&e.customDirectiveDefinitions.set(n.name.value,n),!1}},InterfaceTypeDefinition:{enter(n){let r=n.name.value;if(e.internalGraph.addOrUpdateNode(r,{isAbstract:!0}),!(0,Rl.isObjectLikeNodeEntity)(n))return;let i=(0,fr.getValueOrDefault)(e.keyFieldSetDatasByTypeName,r,()=>new Map);e.extractKeyFieldSets(n,i),(0,aE.upsertEntityData)({entityDataByTypeName:e.entityDataByTypeName,keyFieldSetDataByFieldSet:i,subgraphName:e.subgraphName,typeName:r}),(0,fr.getValueOrDefault)(e.entityInterfaceDataByTypeName,r,()=>({concreteTypeNames:new Set,fieldDatas:[],interfaceFieldNames:new Set,interfaceObjectFieldNames:new Set,isInterfaceObject:!1,resolvable:!1,typeName:r}))}},InterfaceTypeExtension:{enter(n){let r=n.name.value;if(e.internalGraph.addOrUpdateNode(r,{isAbstract:!0}),!(0,Rl.isObjectLikeNodeEntity)(n))return;let i=(0,fr.getValueOrDefault)(e.keyFieldSetDatasByTypeName,r,()=>new Map);e.extractKeyFieldSets(n,i),(0,aE.upsertEntityData)({entityDataByTypeName:e.entityDataByTypeName,keyFieldSetDataByFieldSet:i,subgraphName:e.subgraphName,typeName:r}),(0,fr.getValueOrDefault)(e.entityInterfaceDataByTypeName,r,()=>({concreteTypeNames:new Set,fieldDatas:[],interfaceFieldNames:new Set,interfaceObjectFieldNames:new Set,isInterfaceObject:!1,resolvable:!1,typeName:r}))}},ObjectTypeDefinition:{enter(n){if(!(0,Rl.isObjectLikeNodeEntity)(n))return;let r=n.name.value;(0,Rl.isNodeInterfaceObject)(n)&&(e.entityInterfaceDataByTypeName.set(r,{concreteTypeNames:new Set,fieldDatas:[],interfaceObjectFieldNames:new Set,interfaceFieldNames:new Set,isInterfaceObject:!0,resolvable:!1,typeName:r}),e.internalGraph.addOrUpdateNode(r,{isAbstract:!0}));let i=(0,fr.getValueOrDefault)(e.keyFieldSetDatasByTypeName,r,()=>new Map);e.extractKeyFieldSets(n,i),(0,aE.upsertEntityData)({entityDataByTypeName:e.entityDataByTypeName,keyFieldSetDataByFieldSet:i,subgraphName:e.subgraphName,typeName:r})}},ObjectTypeExtension:{enter(n){if(!(0,Rl.isObjectLikeNodeEntity)(n))return;let r=n.name.value,i=(0,fr.getValueOrDefault)(e.keyFieldSetDatasByTypeName,r,()=>new Map);e.extractKeyFieldSets(n,i),(0,aE.upsertEntityData)({entityDataByTypeName:e.entityDataByTypeName,keyFieldSetDataByFieldSet:i,subgraphName:e.subgraphName,typeName:r})}},OperationTypeDefinition:{enter(n){let r=n.operation,i=e.schemaData.operationTypes.get(r),a=(0,Pp.getTypeNodeNamedTypeName)(n.type);if(i)return(0,au.duplicateOperationTypeDefinitionError)(r,a,(0,Pp.getTypeNodeNamedTypeName)(i.type)),!1;let o=e.operationTypeNodeByTypeName.get(a);return o?(e.errors.push((0,au.invalidOperationTypeDefinitionError)(o,a,r)),!1):(e.operationTypeNodeByTypeName.set(a,r),e.schemaData.operationTypes.set(r,n),!1)}},SchemaDefinition:{enter(n){e.schemaData.description=n.description,e.extractDirectives(n,e.schemaData.directivesByDirectiveName)}},SchemaExtension:{enter(n){e.extractDirectives(n,e.schemaData.directivesByDirectiveName)}}})}function Sce(e,t){let n=!1,r;(0,jn.visit)(t,{EnumTypeDefinition:{enter(i){e.originalParentTypeName=i.name.value,e.lastParentNodeKind=i.kind,e.upsertEnumDataByNode(i)},leave(){e.originalParentTypeName="",e.lastParentNodeKind=jn.Kind.NULL}},EnumTypeExtension:{enter(i){e.originalParentTypeName=i.name.value,e.lastParentNodeKind=i.kind,e.upsertEnumDataByNode(i,!0)},leave(){e.originalParentTypeName="",e.lastParentNodeKind=jn.Kind.NULL}},EnumValueDefinition:{enter(i){let a=i.name.value;e.lastChildNodeKind=i.kind;let o=(0,fr.getOrThrowError)(e.parentDefinitionDataByTypeName,e.originalParentTypeName,rr.PARENT_DEFINITION_DATA);if(o.kind!==jn.Kind.ENUM_TYPE_DEFINITION){e.errors.push((0,au.unexpectedParentKindForChildError)(e.originalParentTypeName,"Enum or Enum extension",(0,fr.kindToTypeString)(o.kind),a,(0,fr.kindToTypeString)(i.kind)));return}if(o.enumValueDataByValueName.has(a)){e.errors.push((0,au.duplicateEnumValueDefinitionError)(e.originalParentTypeName,a));return}o.enumValueDataByValueName.set(a,{appearances:1,configureDescriptionDataBySubgraphName:new Map,directivesByDirectiveName:e.extractDirectives(i,new Map),federatedCoords:`${e.originalParentTypeName}.${a}`,kind:jn.Kind.ENUM_VALUE_DEFINITION,name:a,node:(0,Pp.getMutableEnumValueNode)(i),parentTypeName:e.originalParentTypeName,persistedDirectivesData:(0,rc.newPersistedDirectivesData)(),subgraphNames:new Set([e.subgraphName]),description:(0,Rl.formatDescription)(i.description)})},leave(){e.lastChildNodeKind=jn.Kind.NULL}},FieldDefinition:{enter(i){let a=i.name.value;if(n&&rr.IGNORED_FIELDS.has(a))return!1;e.edfsDirectiveReferences.size>0&&e.validateSubscriptionFilterDirectiveLocation(i),e.lastChildNodeKind=i.kind;let o=(0,Pp.getTypeNodeNamedTypeName)(i.type);(0,fr.getValueOrDefault)(e.fieldCoordsByNamedTypeName,o,()=>new Set).add(`${e.renamedParentTypeName||e.originalParentTypeName}.${a}`),r&&!r.isAbstract&&e.internalGraph.addEdge(r,e.internalGraph.addOrUpdateNode(o),a),ic.BASE_SCALARS.has(o)||e.referencedTypeNames.add(o);let c=(0,fr.getOrThrowError)(e.parentDefinitionDataByTypeName,e.originalParentTypeName,rr.PARENT_DEFINITION_DATA);if(!(0,rc.isParentDataCompositeOutputType)(c)){e.errors.push((0,au.unexpectedParentKindForChildError)(e.originalParentTypeName,'"Object" or "Interface"',(0,fr.kindToTypeString)(c.kind),a,(0,fr.kindToTypeString)(i.kind)));return}if(c.fieldDataByFieldName.has(a)){e.errors.push((0,au.duplicateFieldDefinitionError)((0,fr.kindToTypeString)(c.kind),c.name,a));return}let l=e.extractArguments(new Map,i),p=e.extractDirectives(i,new Map);(0,rc.isParentDataInterfaceType)(c)||(e.addInheritedDirectivesToFieldData(p),p.has(rr.EXTERNAL)&&e.unvalidatedExternalFieldCoords.add(`${e.originalParentTypeName}.${a}`));let f=e.addFieldDataByNode(c.fieldDataByFieldName,i,l,p);n&&e.extractEventDirectivesToConfiguration(i,l);let y=f.directivesByDirectiveName.get(rr.PROVIDES),g=f.directivesByDirectiveName.get(rr.REQUIRES);if(!g&&!y)return;let _=e.entityDataByTypeName.get(e.originalParentTypeName),F=(0,fr.getValueOrDefault)(e.fieldSetDataByTypeName,e.originalParentTypeName,gO.newFieldSetData);y&&(0,gO.extractFieldSetValue)(a,F.provides,y),g&&(_||e.warnings.push((0,_ce.requiresDefinedOnNonEntityFieldWarning)(`${e.originalParentTypeName}.${a}`,e.subgraphName)),(0,gO.extractFieldSetValue)(a,F.requires,g))},leave(){e.lastChildNodeKind=jn.Kind.NULL}},InputObjectTypeDefinition:{enter(i){e.originalParentTypeName=i.name.value,e.lastParentNodeKind=i.kind,e.upsertInputObjectByNode(i)},leave(){e.lastParentNodeKind=jn.Kind.NULL,e.originalParentTypeName=""}},InputObjectTypeExtension:{enter(i){e.originalParentTypeName=i.name.value,e.lastParentNodeKind=i.kind,e.upsertInputObjectByNode(i,!0)},leave(){e.originalParentTypeName="",e.lastParentNodeKind=jn.Kind.NULL}},InputValueDefinition:{enter(i){let a=i.name.value;if(e.lastParentNodeKind!==jn.Kind.INPUT_OBJECT_TYPE_DEFINITION&&e.lastParentNodeKind!==jn.Kind.INPUT_OBJECT_TYPE_EXTENSION){e.argumentName=a;return}e.lastChildNodeKind=i.kind;let o=`${e.originalParentTypeName}.${a}`,c=(0,Pp.getTypeNodeNamedTypeName)(i.type);ic.BASE_SCALARS.has(c)||e.referencedTypeNames.add(c);let l=(0,fr.getOrThrowError)(e.parentDefinitionDataByTypeName,e.originalParentTypeName,rr.PARENT_DEFINITION_DATA);if(l.kind!==jn.Kind.INPUT_OBJECT_TYPE_DEFINITION)return e.errors.push((0,au.unexpectedParentKindForChildError)(e.originalParentTypeName,"input object or input object extension",(0,fr.kindToTypeString)(l.kind),a,(0,fr.kindToTypeString)(i.kind))),!1;if(l.inputValueDataByValueName.has(a)){e.errors.push((0,au.duplicateInputFieldDefinitionError)(e.originalParentTypeName,a));return}e.addInputValueDataByNode(l.inputValueDataByValueName,i,o)},leave(){e.argumentName="",e.lastChildNodeKind===jn.Kind.INPUT_VALUE_DEFINITION&&(e.lastChildNodeKind=jn.Kind.NULL)}},InterfaceTypeDefinition:{enter(i){e.originalParentTypeName=i.name.value,e.lastParentNodeKind=i.kind,e.upsertInterfaceDataByNode(i)},leave(){e.originalParentTypeName="",e.lastParentNodeKind=jn.Kind.NULL}},InterfaceTypeExtension:{enter(i){e.originalParentTypeName=i.name.value,e.lastParentNodeKind=i.kind,e.upsertInterfaceDataByNode(i,!0)},leave(){e.originalParentTypeName="",e.lastParentNodeKind=jn.Kind.NULL}},ObjectTypeDefinition:{enter(i){if(i.name.value===rr.SERVICE_OBJECT)return!1;e.originalParentTypeName=i.name.value,n=(0,rc.isTypeNameRootType)(e.originalParentTypeName,e.operationTypeNodeByTypeName),e.renamedParentTypeName=(0,rc.getRenamedRootTypeName)(e.originalParentTypeName,e.operationTypeNodeByTypeName),e.originalTypeNameByRenamedTypeName.set(e.renamedParentTypeName,e.originalParentTypeName),r=n?e.internalGraph.getRootNode(e.renamedParentTypeName):e.internalGraph.addOrUpdateNode(e.renamedParentTypeName),e.lastParentNodeKind=i.kind,e.upsertObjectDataByNode(i)},leave(){r=void 0,n=!1,e.originalParentTypeName="",e.renamedParentTypeName="",e.lastParentNodeKind=jn.Kind.NULL,e.isParentObjectExternal=!1,e.isParentObjectShareable=!1}},ObjectTypeExtension:{enter(i){if(i.name.value===rr.SERVICE_OBJECT)return!1;e.originalParentTypeName=i.name.value,n=(0,rc.isTypeNameRootType)(e.originalParentTypeName,e.operationTypeNodeByTypeName),e.renamedParentTypeName=(0,rc.getRenamedRootTypeName)(e.originalParentTypeName,e.operationTypeNodeByTypeName),e.originalTypeNameByRenamedTypeName.set(e.renamedParentTypeName,e.originalParentTypeName),r=n?e.internalGraph.getRootNode(e.renamedParentTypeName):e.internalGraph.addOrUpdateNode(e.renamedParentTypeName),e.lastParentNodeKind=i.kind,e.upsertObjectDataByNode(i,!0)},leave(){r=void 0,n=!1,e.originalParentTypeName="",e.renamedParentTypeName="",e.lastParentNodeKind=jn.Kind.NULL,e.isParentObjectExternal=!1,e.isParentObjectShareable=!1}},ScalarTypeDefinition:{enter(i){if(i.name.value===rr.ANY_SCALAR)return!1;e.originalParentTypeName=i.name.value,e.lastParentNodeKind=i.kind,e.upsertScalarByNode(i)},leave(){e.originalParentTypeName="",e.lastParentNodeKind=jn.Kind.NULL}},ScalarTypeExtension:{enter(i){if(i.name.value===rr.ANY_SCALAR)return!1;e.originalParentTypeName=i.name.value,e.lastParentNodeKind=i.kind,e.upsertScalarByNode(i,!0)},leave(){e.originalParentTypeName="",e.lastParentNodeKind=jn.Kind.NULL}},UnionTypeDefinition:{enter(i){i.name.value!==rr.ENTITY_UNION&&e.upsertUnionByNode(i)}},UnionTypeExtension:{enter(i){if(i.name.value===rr.ENTITY_UNION)return!1;e.upsertUnionByNode(i,!0)}}})}});var bO=w(Ga=>{"use strict";m();T();N();Object.defineProperty(Ga,"__esModule",{value:!0});Ga.EntityDataNode=Ga.RootNode=Ga.GraphNode=Ga.Edge=void 0;var oE=Hr(),vO=class{constructor(t,n,r,i=!1){v(this,"edgeName");v(this,"id");v(this,"isAbstractEdge");v(this,"isInaccessible",!1);v(this,"node");v(this,"visitedIndices",new Set);this.edgeName=i?`... on ${r}`:r,this.id=t,this.isAbstractEdge=i,this.node=n}};Ga.Edge=vO;var SO=class{constructor(t,n,r){v(this,"fieldDataByFieldName",new Map);v(this,"headToTailEdges",new Map);v(this,"entityEdges",[]);v(this,"nodeName");v(this,"hasEntitySiblings",!1);v(this,"isAbstract");v(this,"isInaccessible",!1);v(this,"isLeaf",!1);v(this,"isRootNode",!1);v(this,"satisfiedFieldSets",new Set);v(this,"subgraphName");v(this,"typeName");this.isAbstract=!!(r!=null&&r.isAbstract),this.isLeaf=!!(r!=null&&r.isLeaf),this.nodeName=`${t}.${n}`,this.subgraphName=t,this.typeName=n}handleInaccessibleEdges(){if(this.isAbstract)return;let t=(0,oE.getEntriesNotInHashSet)(this.headToTailEdges.keys(),this.fieldDataByFieldName);for(let n of t){let r=this.headToTailEdges.get(n);r&&(r.isInaccessible=!0)}}getAllAccessibleEntityNodeNames(){let t=new Set([this.nodeName]);return this.getAccessibleEntityNodeNames(this,t),t.delete(this.nodeName),t}getAccessibleEntityNodeNames(t,n){for(let r of t.entityEdges)(0,oE.add)(n,r.node.nodeName)&&this.getAccessibleEntityNodeNames(r.node,n)}};Ga.GraphNode=SO;var OO=class{constructor(t){v(this,"fieldDataByFieldName",new Map);v(this,"headToShareableTailEdges",new Map);v(this,"isAbstract",!1);v(this,"isRootNode",!0);v(this,"typeName");this.typeName=t}removeInaccessibleEdges(t){for(let[n,r]of this.headToShareableTailEdges)if(!t.has(n))for(let i of r)i.isInaccessible=!0}};Ga.RootNode=OO;var DO=class{constructor(t){v(this,"fieldSetsByTargetSubgraphName",new Map);v(this,"targetSubgraphNamesByFieldSet",new Map);v(this,"typeName");this.typeName=t}addTargetSubgraphByFieldSet(t,n){(0,oE.getValueOrDefault)(this.targetSubgraphNamesByFieldSet,t,()=>new Set).add(n),(0,oE.getValueOrDefault)(this.fieldSetsByTargetSubgraphName,n,()=>new Set).add(t)}};Ga.EntityDataNode=DO});var RO=w(vs=>{"use strict";m();T();N();Object.defineProperty(vs,"__esModule",{value:!0});vs.NodeResolutionData=void 0;vs.newRootFieldData=Oce;vs.generateResolvabilityErrorReasons=Tq;vs.generateSelectionSetSegments=Eq;vs.renderSelectionSet=hq;vs.generateResolvabilityErrors=Ace;var mq=sa(),ac=lr(),Nq=Hr(),AO=class{constructor(t,n){v(this,"fieldDataByFieldName");v(this,"isResolved",!1);v(this,"resolvedFieldNames",new Set);v(this,"typeName");this.fieldDataByFieldName=n,this.typeName=t}add(t){if(this.resolvedFieldNames.add(t),this.resolvedFieldNames.size>this.fieldDataByFieldName.size){let n=(0,Nq.getEntriesNotInHashSet)(this.resolvedFieldNames,this.fieldDataByFieldName);throw(0,mq.unexpectedEdgeFatalError)(this.typeName,n)}return this.isResolved=this.resolvedFieldNames.size===this.fieldDataByFieldName.size,this.isResolved}};vs.NodeResolutionData=AO;function Oce(e,t,n){return{coordinate:`${e}.${t}`,message:`The root type field "${e}.${t}" is defined in the following subgraph`+(n.size>1?"s":"")+`: "${[...n].join(ac.QUOTATION_JOIN)}".`,subgraphNames:n}}function Dce(e,t){return e.isLeaf?e.name+` <-- `:e.name+` { <-- `+ac.LITERAL_SPACE.repeat(t+3)+`... `+ac.LITERAL_SPACE.repeat(t+2)+`} -`}function Nq({entityAncestorData:e,rootFieldData:t,unresolvableFieldData:n}){let{fieldName:r,typeName:i,subgraphNames:a}=n,o=[t.message,`The field "${i}.${r}" is defined in the following subgraph`+(a.size>1?"s":"")+`: "${[...a].join(ac.QUOTATION_JOIN)}".`];if(e){let c=!1;for(let[l,p]of e.fieldSetsByTargetSubgraphName)if(a.has(l)){c=!0;for(let T of p)o.push(`The entity ancestor "${e.typeName}" in subgraph "${e.subgraphName}" does not satisfy the key field set "${T}" to access subgraph "${l}".`)}c||o.push(`The entity ancestor "${e.typeName}" in subgraph "${e.subgraphName}" has no accessible target entities (resolvable @key directives) in the subgraphs where "${i}.${r}" is defined.`),o.push(`The type "${i}" is not a descendent of any other entity ancestors that can provide a shared route to access "${r}".`)}else t.subgraphNames.size>1&&o.push(`None of the subgraphs that share the same root type field "${t.coordinate}" can provide a route to access "${r}".`),o.push(`The type "${i}" is not a descendent of an entity ancestor that can provide a shared route to access "${r}".`);return i!==(e==null?void 0:e.typeName)&&o.push(`The type "${i}" has no accessible target entities (resolvable @key directives) in any other subgraph, so accessing other subgraphs is not possible.`),o}function Tq(e){let t=e.split(new RegExp("(?<=\\w)\\.")),n="",r="";for(let i=0;i1?"s":"")+`: "${[...a].join(ac.QUOTATION_JOIN)}".`];if(e){let c=!1;for(let[l,p]of e.fieldSetsByTargetSubgraphName)if(a.has(l)){c=!0;for(let f of p)o.push(`The entity ancestor "${e.typeName}" in subgraph "${e.subgraphName}" does not satisfy the key field set "${f}" to access subgraph "${l}".`)}c||o.push(`The entity ancestor "${e.typeName}" in subgraph "${e.subgraphName}" has no accessible target entities (resolvable @key directives) in the subgraphs where "${i}.${r}" is defined.`),o.push(`The type "${i}" is not a descendent of any other entity ancestors that can provide a shared route to access "${r}".`)}else t.subgraphNames.size>1&&o.push(`None of the subgraphs that share the same root type field "${t.coordinate}" can provide a route to access "${r}".`),o.push(`The type "${i}" is not a descendent of an entity ancestor that can provide a shared route to access "${r}".`);return i!==(e==null?void 0:e.typeName)&&o.push(`The type "${i}" has no accessible target entities (resolvable @key directives) in any other subgraph, so accessing other subgraphs is not possible.`),o}function Eq(e){let t=e.split(new RegExp("(?<=\\w)\\.")),n="",r="";for(let i=0;i{"use strict";f();N();m();Object.defineProperty(sE,"__esModule",{value:!0});sE.Graph=void 0;var Fl=DO(),Pl=AO(),hq=lr(),kr=Hr(),RO=class{constructor(){v(this,"edgeId",-1);v(this,"entityDataNodes",new Map);v(this,"entityNodeNamesBySharedFieldPath",new Map);v(this,"nodeByNodeName",new Map);v(this,"nodesByTypeName",new Map);v(this,"rootNodeByRootTypeName",new Map);v(this,"subgraphName",hq.NOT_APPLICABLE);v(this,"resolvableFieldNamesByRelativeFieldPathByEntityNodeName",new Map);v(this,"nodeResolutionDataByFieldPath",new Map);v(this,"unresolvableFieldPaths",new Set);v(this,"failureResultByEntityNodeName",new Map);v(this,"walkerIndex",-1)}getRootNode(t){return(0,kr.getValueOrDefault)(this.rootNodeByRootTypeName,t,()=>new Fl.RootNode(t))}addOrUpdateNode(t,n){let r=`${this.subgraphName}.${t}`,i=this.nodeByNodeName.get(r);if(i)return i.isAbstract||(i.isAbstract=!!(n!=null&&n.isAbstract)),!i.isLeaf&&(n!=null&&n.isLeaf)&&(i.isLeaf=!0),i;let a=new Fl.GraphNode(this.subgraphName,t,n);return this.nodeByNodeName.set(r,a),(0,kr.getValueOrDefault)(this.nodesByTypeName,t,()=>[]).push(a),a}addEdge(t,n,r,i=!1){if(t.isRootNode){let c=new Fl.Edge(this.getNextEdgeId(),n,r);return(0,kr.getValueOrDefault)(t.headToShareableTailEdges,r,()=>[]).push(c),c}let a=t,o=new Fl.Edge(this.getNextEdgeId(),n,i?n.typeName:r,i);return a.headToTailEdges.set(r,o),o}addEntityDataNode(t){let n=this.entityDataNodes.get(t);if(n)return n;let r=new Fl.EntityDataNode(t);return this.entityDataNodes.set(t,r),r}getNextEdgeId(){return this.edgeId+=1}setNodeInaccessible(t){let n=this.nodesByTypeName.get(t);if(n)for(let r of n)r.isInaccessible=!0}initializeNode(t,n){let r=this.entityDataNodes.get(t);if(hq.ROOT_TYPE_NAMES.has(t)){let a=this.getRootNode(t);a.removeInaccessibleEdges(n),a.fieldDataByFieldName=n;return}let i=this.nodesByTypeName.get(t);if(i){for(let a of i)if(a.fieldDataByFieldName=n,a.handleInaccessibleEdges(),a.isLeaf=!1,!!r){a.hasEntitySiblings=!0;for(let o of a.satisfiedFieldSets){let c=r.targetSubgraphNamesByFieldSet.get(o);for(let l of c||[]){if(l===a.subgraphName)continue;let p=this.nodeByNodeName.get(`${l}.${a.typeName}`);p&&a.entityEdges.push(new Fl.Edge(this.getNextEdgeId(),p,""))}}}}}setSubgraphName(t){this.subgraphName=t}validateEntities(t,n){let r=new Map;for(let[i,a]of t){let o=a.size>1,c,l=o?new Map:void 0,p=new Set,T=new Map;for(let y of a){let g=this.nodeByNodeName.get(y);if(!g)throw new Error(`Fatal: Could not find entity node for "${y}".`);if(this.resolvableFieldNamesByRelativeFieldPathByEntityNodeName.get(y)){let J=this.failureResultByEntityNodeName.get(y);if(!J){c=void 0;break}if(!o)return J}let F=this.nodesByTypeName.get(g.typeName)||[],U=(0,kr.getValueOrDefault)(r,y,()=>o?T:new Map),K=new FO({interSubgraphNodes:F,entityNodeNamesBySharedFieldPath:U,originNode:g,resolvableFieldNamesByRelativeFieldPathByEntityNodeName:this.resolvableFieldNamesByRelativeFieldPathByEntityNodeName,walkerIndex:this.walkerIndex+=1,sharedResolvableFieldNamesByRelativeFieldPath:l,unresolvableSharedFieldPaths:p});if(K.visitEntityNode(g),K.unresolvableFieldPaths.size>0){if(o&&p.size<1){c=void 0;break}c={entityAncestorData:{fieldSetsByTargetSubgraphName:(0,kr.getOrThrowError)(this.entityDataNodes,g.typeName,"entityDataNodes").fieldSetsByTargetSubgraphName,subgraphName:g.subgraphName,typeName:g.typeName},nodeName:y,parentFieldPathForEntityReference:[i],success:!1,typeName:g.typeName,unresolvableFieldPaths:o?p:K.unresolvableFieldPaths},this.failureResultByEntityNodeName.set(y,c);continue}c=void 0;break}if(c)return o&&l&&this.resolvableFieldNamesByRelativeFieldPathByEntityNodeName.set(c.nodeName,l),c}if(r.size>0)for(let[i,a]of r){let o=this.validateEntities(a,n);if(!o.success){for(let[c,l]of t)if(l.has(i)){o.parentFieldPathForEntityReference.push(c);break}return o}}return{success:!0}}validate(){let t=[];for(let n of this.rootNodeByRootTypeName.values())e:for(let[r,i]of n.headToShareableTailEdges){for(let c of i){if(c.isInaccessible)continue e;this.walkerIndex+=1,this.visitEdge(c,`${n.typeName.toLowerCase()}`)}let a=(0,kr.getOrThrowError)(n.fieldDataByFieldName,r,"fieldDataByFieldName"),o=(0,Pl.newRootFieldData)(n.typeName,r,a.subgraphNames);if(this.unresolvableFieldPaths.size>0&&(0,Pl.generateResolvabilityErrors)({unresolvableFieldPaths:this.unresolvableFieldPaths,nodeResolutionDataByFieldPath:this.nodeResolutionDataByFieldPath,rootFieldData:o,errors:t}),this.entityNodeNamesBySharedFieldPath.size>0){let c=this.validateEntities(this.entityNodeNamesBySharedFieldPath,o);c.success||this.generateEntityResolvabilityErrors(c,o,t)}if(t.length>0)return t;this.entityNodeNamesBySharedFieldPath=new Map}return[]}visitEdge(t,n){return t.isInaccessible||t.node.isInaccessible?!1:(!(0,kr.add)(t.visitedIndices,this.walkerIndex)||t.node.isLeaf||(t.node.isAbstract?this.validateAbstractNode(t.node,`${n}.${t.edgeName}`):this.validateConcreteNode(t.node,`${n}.${t.edgeName}`)),!0)}validateConcreteNode(t,n){if(t.headToTailEdges.size<1)return;if(t.hasEntitySiblings){(0,kr.getValueOrDefault)(this.entityNodeNamesBySharedFieldPath,n,()=>new Set).add(t.nodeName);return}let r=(0,kr.getValueOrDefault)(this.nodeResolutionDataByFieldPath,n,()=>new Pl.NodeResolutionData(t.typeName,t.fieldDataByFieldName));for(let[i,a]of t.headToTailEdges)this.visitEdge(a,n)&&r.add(i);r.isResolved?this.unresolvableFieldPaths.delete(n):this.unresolvableFieldPaths.add(n)}validateAbstractNode(t,n){if(!(t.headToTailEdges.size<1))for(let r of t.headToTailEdges.values())this.visitEdge(r,n)}generateEntityResolvabilityErrors(t,n,r){let i=(0,kr.getOrThrowError)(this.resolvableFieldNamesByRelativeFieldPathByEntityNodeName,t.nodeName,"resolvableFieldNamesByRelativeFieldPathByEntityNodeName"),a="";for(let o of t.parentFieldPathForEntityReference)a=o+a;(0,Pl.generateResolvabilityErrors)({unresolvableFieldPaths:t.unresolvableFieldPaths,nodeResolutionDataByFieldPath:i,rootFieldData:n,errors:r,pathFromRoot:a,entityAncestorData:t.entityAncestorData})}};sE.Graph=RO;var FO=class{constructor({entityNodeNamesBySharedFieldPath:t,interSubgraphNodes:n,originNode:r,resolvableFieldNamesByRelativeFieldPathByEntityNodeName:i,unresolvableSharedFieldPaths:a,walkerIndex:o,sharedResolvableFieldNamesByRelativeFieldPath:c}){v(this,"entityNodeNamesBySharedFieldPath");v(this,"interSubgraphNodes");v(this,"originNode");v(this,"resolvableFieldNamesByRelativeFieldPath");v(this,"resolvableFieldNamesByRelativeFieldPathByEntityNodeName");v(this,"unresolvableFieldPaths",new Set);v(this,"unresolvableSharedFieldPaths");v(this,"walkerIndex");v(this,"sharedResolvableFieldNamesByRelativeFieldPath");this.entityNodeNamesBySharedFieldPath=t,this.interSubgraphNodes=n,this.originNode=r,this.resolvableFieldNamesByRelativeFieldPathByEntityNodeName=i,this.resolvableFieldNamesByRelativeFieldPath=(0,kr.getValueOrDefault)(this.resolvableFieldNamesByRelativeFieldPathByEntityNodeName,r.nodeName,()=>new Map),this.unresolvableSharedFieldPaths=a,this.walkerIndex=o,this.sharedResolvableFieldNamesByRelativeFieldPath=c}visitEntityNode(t){this.validateEntityRelatedConcreteNode(t,"");let n=t.getAllAccessibleEntityNodeNames();for(let r of this.interSubgraphNodes){if(this.unresolvableFieldPaths.size<0)return;n.has(r.nodeName)&&this.validateEntityRelatedConcreteNode(r,"")}}visitEntityRelatedEdge(t,n){return t.isInaccessible||t.node.isInaccessible?!1:!(0,kr.add)(t.visitedIndices,this.walkerIndex)||t.node.isLeaf?!0:t.node.hasEntitySiblings?((0,kr.getValueOrDefault)(this.entityNodeNamesBySharedFieldPath,`${n}.${t.edgeName}`,()=>new Set).add(t.node.nodeName),!0):(t.node.isAbstract?this.validateEntityRelatedAbstractNode(t.node,`${n}.${t.edgeName}`):this.validateEntityRelatedConcreteNode(t.node,`${n}.${t.edgeName}`),!0)}validateEntityRelatedConcreteNode(t,n){if(t.headToTailEdges.size<1)return;let r=(0,kr.getValueOrDefault)(this.resolvableFieldNamesByRelativeFieldPath,n,()=>new Pl.NodeResolutionData(t.typeName,t.fieldDataByFieldName)),i=this.sharedResolvableFieldNamesByRelativeFieldPath?(0,kr.getValueOrDefault)(this.sharedResolvableFieldNamesByRelativeFieldPath,n,()=>new Pl.NodeResolutionData(t.typeName,t.fieldDataByFieldName)):void 0;for(let[a,o]of t.headToTailEdges)this.visitEntityRelatedEdge(o,n)&&(r.add(a),i==null||i.add(a));r.isResolved?this.unresolvableFieldPaths.delete(n):this.unresolvableFieldPaths.add(n),i&&(i.isResolved?this.unresolvableSharedFieldPaths.delete(n):this.unresolvableSharedFieldPaths.add(n))}validateEntityRelatedAbstractNode(t,n){if(!(t.headToTailEdges.size<1))for(let r of t.headToTailEdges.values())this.visitEntityRelatedEdge(r,n)}}});var wO=w(oE=>{"use strict";f();N();m();Object.defineProperty(oE,"__esModule",{value:!0});oE.newFieldSetConditionData=Rce;oE.newConfigurationData=Fce;function Rce({fieldCoordinatesPath:e,fieldPath:t}){return{fieldCoordinatesPath:e,fieldPath:t}}function Fce(e,t){return{fieldNames:new Set,isRootNode:e,typeName:t}}});var CO=w(sc=>{"use strict";f();N();m();Object.defineProperty(sc,"__esModule",{value:!0});sc.NormalizationFactory=void 0;sc.normalizeSubgraphFromString=Cce;sc.normalizeSubgraph=Iq;sc.batchNormalize=Bce;var oe=Ae(),Dn=Jr(),ti=Dp(),en=hs(),ar=up(),pe=sa(),uE=np(),Pce=Y_(),$i=uO(),wce=pO(),Ss=eE(),yq=gO(),$a=bp(),gn=Rp(),ir=Jo(),LO=PO(),cE=X_(),ne=lr(),Lce=nl(),Ge=Hr(),_n=Ae(),Pp=wO();function Cce(e,t=!0){let{error:n,documentNode:r}=(0,Dn.safeParse)(e,t);return n||!r?{errors:[(0,pe.subgraphInvalidSyntaxError)(n)],success:!1,warnings:[]}:new wp(new LO.Graph).normalize(r)}function Iq(e,t,n){return new wp(n||new LO.Graph,t).normalize(e)}var wp=class{constructor(t,n){v(this,"argumentName","");v(this,"authorizationDataByParentTypeName",new Map);v(this,"concreteTypeNamesByAbstractTypeName",new Map);v(this,"conditionalFieldDataByCoords",new Map);v(this,"configurationDataByTypeName",new Map);v(this,"customDirectiveDefinitions",new Map);v(this,"definedDirectiveNames",new Set);v(this,"directiveDefinitionByDirectiveName",new Map);v(this,"directiveDefinitionDataByDirectiveName",(0,ti.initializeDirectiveDefinitionDatas)());v(this,"edfsDirectiveReferences",new Set);v(this,"errors",[]);v(this,"entityDataByTypeName",new Map);v(this,"entityInterfaceDataByTypeName",new Map);v(this,"eventsConfigurations",new Map);v(this,"fieldSetDataByTypeName",new Map);v(this,"internalGraph");v(this,"invalidConfigureDescriptionNodeDatas",[]);v(this,"invalidRepeatedDirectiveNameByCoords",new Map);v(this,"isCurrentParentExtension",!1);v(this,"isParentObjectExternal",!1);v(this,"isParentObjectShareable",!1);v(this,"isSubgraphEventDrivenGraph",!1);v(this,"isSubgraphVersionTwo",!1);v(this,"keyFieldSetDatasByTypeName",new Map);v(this,"lastParentNodeKind",oe.Kind.NULL);v(this,"lastChildNodeKind",oe.Kind.NULL);v(this,"parentTypeNamesWithAuthDirectives",new Set);v(this,"keyFieldSetDataByTypeName",new Map);v(this,"keyFieldSetsByEntityTypeNameByFieldCoords",new Map);v(this,"keyFieldNamesByParentTypeName",new Map);v(this,"fieldCoordsByNamedTypeName",new Map);v(this,"operationTypeNodeByTypeName",new Map);v(this,"originalParentTypeName","");v(this,"originalTypeNameByRenamedTypeName",new Map);v(this,"parentDefinitionDataByTypeName",new Map);v(this,"parentsWithChildArguments",new Set);v(this,"overridesByTargetSubgraphName",new Map);v(this,"invalidORScopesCoords",new Set);v(this,"schemaData");v(this,"referencedDirectiveNames",new Set);v(this,"referencedTypeNames",new Set);v(this,"renamedParentTypeName","");v(this,"subgraphName");v(this,"unvalidatedExternalFieldCoords",new Set);v(this,"usesEdfsNatsStreamConfiguration",!1);v(this,"warnings",[]);for(let[r,i]of en.BASE_DIRECTIVE_DEFINITION_BY_DIRECTIVE_NAME)this.directiveDefinitionByDirectiveName.set(r,i);this.subgraphName=n||ne.NOT_APPLICABLE,this.internalGraph=t,this.internalGraph.setSubgraphName(this.subgraphName),this.schemaData={directivesByDirectiveName:new Map,kind:oe.Kind.SCHEMA_DEFINITION,name:ne.SCHEMA,operationTypes:new Map}}validateInputNamedType(t){if(en.BASE_SCALARS.has(t))return{hasUnhandledError:!1,typeString:""};let n=this.parentDefinitionDataByTypeName.get(t);if(!n)return{hasUnhandledError:!1,typeString:""};switch(n.kind){case oe.Kind.ENUM_TYPE_DEFINITION:case oe.Kind.INPUT_OBJECT_TYPE_DEFINITION:case oe.Kind.SCALAR_TYPE_DEFINITION:return{hasUnhandledError:!1,typeString:""};default:return{hasUnhandledError:!0,typeString:(0,Ge.kindToTypeString)(n.kind)}}}validateArguments(t,n){let r=[];for(let[i,a]of t.argumentDataByArgumentName){let o=(0,ir.getTypeNodeNamedTypeName)(a.type);en.BASE_SCALARS.has(o)||this.referencedTypeNames.add(o);let{hasUnhandledError:c,typeString:l}=this.validateInputNamedType(o);c&&r.push({argumentName:i,namedType:o,typeString:l,typeName:(0,$i.printTypeNode)(a.type)})}r.length>0&&this.errors.push((0,pe.invalidArgumentsError)(n,r))}isTypeNameRootType(t){return ne.ROOT_TYPE_NAMES.has(t)||this.operationTypeNodeByTypeName.has(t)}isArgumentValueValid(t,n){if(n.kind===oe.Kind.NULL)return t.kind!==oe.Kind.NON_NULL_TYPE;switch(t.kind){case oe.Kind.LIST_TYPE:{if(n.kind!==oe.Kind.LIST)return this.isArgumentValueValid((0,ir.getNamedTypeNode)(t.type),n);for(let r of n.values)if(!this.isArgumentValueValid(t.type,r))return!1;return!0}case oe.Kind.NAMED_TYPE:switch(t.name.value){case ne.BOOLEAN_SCALAR:return n.kind===oe.Kind.BOOLEAN;case ne.FLOAT_SCALAR:return n.kind===oe.Kind.FLOAT||n.kind===oe.Kind.INT;case ne.ID_SCALAR:return n.kind===oe.Kind.STRING||n.kind===oe.Kind.INT;case ne.INT_SCALAR:return n.kind===oe.Kind.INT;case ne.FIELD_SET_SCALAR:case ne.SCOPE_SCALAR:case ne.STRING_SCALAR:return n.kind===oe.Kind.STRING;case ne.LINK_IMPORT:return!0;case ne.LINK_PURPOSE:return n.kind!==oe.Kind.ENUM?!1:n.value===ne.SECURITY||n.value===ne.EXECUTION;case ne.SUBSCRIPTION_FIELD_CONDITION:case ne.SUBSCRIPTION_FILTER_CONDITION:return n.kind===oe.Kind.OBJECT;default:{let r=this.parentDefinitionDataByTypeName.get(t.name.value);if(!r)return!1;if(r.kind===oe.Kind.SCALAR_TYPE_DEFINITION)return!0;if(r.kind===oe.Kind.ENUM_TYPE_DEFINITION){if(n.kind!==oe.Kind.ENUM)return!1;let i=r.enumValueDataByValueName.get(n.value);return i?!i.directivesByDirectiveName.has(ne.INACCESSIBLE):!1}return r.kind!==oe.Kind.INPUT_OBJECT_TYPE_DEFINITION?!1:n.kind===oe.Kind.OBJECT}}default:return this.isArgumentValueValid(t.type,n)}}addInheritedDirectivesToFieldData(t){return this.isParentObjectShareable&&(0,Ge.getValueOrDefault)(t,ne.SHAREABLE,()=>[(0,Ge.generateSimpleDirective)(ne.SHAREABLE)]),this.isParentObjectExternal&&(0,Ge.getValueOrDefault)(t,ne.EXTERNAL,()=>[(0,Ge.generateSimpleDirective)(ne.EXTERNAL)]),t}extractDirectives(t,n){if(!t.directives)return n;for(let r of t.directives){let i=r.name.value;i===ne.SHAREABLE?(0,Ge.getValueOrDefault)(n,i,()=>[r]):(0,Ge.getValueOrDefault)(n,i,()=>[]).push(r),(0,ar.isNodeKindObject)(t.kind)&&(this.isParentObjectExternal||(this.isParentObjectExternal=i===ne.EXTERNAL),this.isParentObjectShareable||(this.isParentObjectShareable=i===ne.SHAREABLE))}return n}validateDirective({data:t,definitionData:n,directiveCoords:r,directiveNode:i,errorMessages:a,requiredArgumentNames:o}){let c=i.name.value,l=t.kind===oe.Kind.FIELD_DEFINITION?t.renamedParentTypeName||t.originalParentTypeName:t.name,p=c===ne.AUTHENTICATED,T=c===ne.OVERRIDE,y=c===ne.REQUIRES_SCOPES;if(!i.arguments||i.arguments.length<1)return n.requiredArgumentNames.size>0&&a.push((0,pe.undefinedRequiredArgumentsErrorMessage)(c,o,[])),p&&this.handleAuthenticatedDirective(t,l),a;let g=new Set,_=new Set,F=new Set,U=[];for(let ee of i.arguments){let W=ee.name.value;if(g.has(W)){_.add(W);continue}g.add(W);let Te=n.argumentTypeNodeByArgumentName.get(W);if(!Te){F.add(W);continue}if(!this.isArgumentValueValid(Te.typeNode,ee.value)){a.push((0,pe.invalidArgumentValueErrorMessage)((0,oe.print)(ee.value),`@${c}`,W,(0,$i.printTypeNode)(Te.typeNode)));continue}if(T&&t.kind===oe.Kind.FIELD_DEFINITION){this.handleOverrideDirective({data:t,directiveCoords:r,errorMessages:a,targetSubgraphName:ee.value.value});continue}!y||W!==ne.SCOPES||this.extractRequiredScopes({directiveCoords:r,orScopes:ee.value.values,requiredScopes:U})}_.size>0&&a.push((0,pe.duplicateDirectiveArgumentDefinitionsErrorMessage)([..._])),F.size>0&&a.push((0,pe.unexpectedDirectiveArgumentErrorMessage)(c,[...F]));let K=(0,Ge.getEntriesNotInHashSet)(o,g);if(K.length>0&&a.push((0,pe.undefinedRequiredArgumentsErrorMessage)(c,o,K)),a.length>0||!y)return a;let J=(0,Ge.getValueOrDefault)(this.authorizationDataByParentTypeName,l,()=>(0,ar.newAuthorizationData)(l));if(t.kind!==oe.Kind.FIELD_DEFINITION)this.parentTypeNamesWithAuthDirectives.add(l),J.requiredScopes.push(...U);else{let ee=(0,Ge.getValueOrDefault)(J.fieldAuthDataByFieldName,t.name,()=>(0,ar.newFieldAuthorizationData)(t.name));ee.inheritedData.requiredScopes.push(...U),ee.originalData.requiredScopes.push(...U)}return a}validateDirectives(t,n){let r=new Set;for(let[i,a]of t.directivesByDirectiveName){let o=this.directiveDefinitionDataByDirectiveName.get(i);if(!o){r.has(i)||(this.errors.push((0,pe.undefinedDirectiveError)(i,n)),r.add(i));continue}let c=[],l=(0,Dn.nodeKindToDirectiveLocation)(t.kind);if(o.locations.has(l)||c.push((0,pe.invalidDirectiveLocationErrorMessage)(i,l)),a.length>1&&!o.isRepeatable){let T=(0,Ge.getValueOrDefault)(this.invalidRepeatedDirectiveNameByCoords,n,()=>new Set);T.has(i)||(T.add(i),c.push((0,pe.invalidRepeatedDirectiveErrorMessage)(i)))}let p=[...o.requiredArgumentNames];for(let T=0;T0&&this.errors.push((0,pe.invalidDirectiveError)(i,n,(0,Ge.numberToOrdinal)(T+1),y))}}switch(t.kind){case oe.Kind.ENUM_TYPE_DEFINITION:{for(let[i,a]of t.enumValueDataByValueName)this.validateDirectives(a,`${t.name}.${i}`);return}case oe.Kind.FIELD_DEFINITION:{for(let[i,a]of t.argumentDataByArgumentName)this.validateDirectives(a,`${t.originalParentTypeName}.${t.name}(${i}: ...)`);return}case oe.Kind.INPUT_OBJECT_TYPE_DEFINITION:{for(let[i,a]of t.inputValueDataByValueName)this.validateDirectives(a,`${t.name}.${i}`);return}case oe.Kind.INTERFACE_TYPE_DEFINITION:case oe.Kind.OBJECT_TYPE_DEFINITION:{for(let[i,a]of t.fieldDataByFieldName)this.validateDirectives(a,`${t.name}.${i}`);return}default:return}}getNodeExtensionType(t,n,r=!1){return t?$a.ExtensionType.REAL:r||!n.has(ne.EXTENDS)?$a.ExtensionType.NONE:$a.ExtensionType.EXTENDS}setParentDataExtensionType(t,n){switch(t.extensionType){case $a.ExtensionType.EXTENDS:case $a.ExtensionType.NONE:{if(n===$a.ExtensionType.REAL)return;this.errors.push((0,pe.duplicateTypeDefinitionError)((0,Ge.kindToTypeString)(t.kind),t.name));return}default:t.extensionType=n}}extractConfigureDescriptionData(t,n){var i,a;if(!n.arguments||n.arguments.length<1){t.description||this.invalidConfigureDescriptionNodeDatas.push(t),t.configureDescriptionDataBySubgraphName.set(this.subgraphName,{propagate:!0,description:((i=t.description)==null?void 0:i.value)||""});return}let r={propagate:!0,description:((a=t.description)==null?void 0:a.value)||""};for(let o of n.arguments)switch(o.name.value){case ne.PROPAGATE:{if(o.value.kind!=oe.Kind.BOOLEAN)return;r.propagate=o.value.value;break}case ne.DESCRIPTION_OVERRIDE:{if(o.value.kind!=oe.Kind.STRING)return;r.description=o.value.value;break}default:return}!t.description&&!r.description&&this.invalidConfigureDescriptionNodeDatas.push(t),t.configureDescriptionDataBySubgraphName.set(this.subgraphName,r)}extractConfigureDescriptionsData(t){let n=t.directivesByDirectiveName.get(ne.CONFIGURE_DESCRIPTION);n&&n.length==1&&this.extractConfigureDescriptionData(t,n[0])}extractImplementedInterfaceTypeNames(t,n){if(!t.interfaces)return n;let r=t.name.value;for(let i of t.interfaces){let a=i.name.value;if(n.has(a)){this.errors.push((0,pe.duplicateImplementedInterfaceError)((0,ar.kindToConvertedTypeString)(t.kind),r,a));continue}n.add(a)}return n}updateCompositeOutputDataByNode(t,n,r){this.setParentDataExtensionType(n,r),this.extractImplementedInterfaceTypeNames(t,n.implementedInterfaceTypeNames),n.description||(n.description=(0,Dn.formatDescription)("description"in t?t.description:void 0)),this.extractConfigureDescriptionsData(n),n.isEntity||(n.isEntity=n.directivesByDirectiveName.has(ne.KEY)),n.isInaccessible||(n.isInaccessible=n.directivesByDirectiveName.has(ne.INACCESSIBLE)),n.subgraphNames.add(this.subgraphName)}addConcreteTypeNamesForImplementedInterfaces(t,n){for(let r of t)(0,Ge.getValueOrDefault)(this.concreteTypeNamesByAbstractTypeName,r,()=>new Set).add(n),this.internalGraph.addEdge(this.internalGraph.addOrUpdateNode(r,{isAbstract:!0}),this.internalGraph.addOrUpdateNode(n),n,!0)}extractArguments(t,n){var c;if(!((c=n.arguments)!=null&&c.length))return t;let r=n.name.value,i=`${this.originalParentTypeName}.${r}`,a=`${this.renamedParentTypeName}.${r}`;this.parentsWithChildArguments.add(this.originalParentTypeName);let o=new Set;for(let l of n.arguments){let p=l.name.value;if(t.has(p)){o.add(p);continue}this.addInputValueDataByNode(t,l,`${i}(${p}: ...)`,`${a}(${p}: ...)`)}return o.size>0&&this.errors.push((0,pe.duplicateArgumentsError)(i,[...o])),t}addPersistedDirectiveDefinitionDataByNode(t,n,r){let i=n.name.value,a=new Map;for(let o of n.arguments||[]){let c=`@${i}(${o.name.value}: ...)`;this.addInputValueDataByNode(a,o,c,c)}t.set(i,{argumentDataByArgumentName:a,executableLocations:r,name:i,repeatable:n.repeatable,subgraphNames:new Set([this.subgraphName]),description:(0,Dn.formatDescription)(n.description)})}extractDirectiveLocations(t,n){let r=new Set,i=new Set;for(let a of t.locations){let o=a.value;if(!i.has(o)){if(!ne.EXECUTABLE_DIRECTIVE_LOCATIONS.has(o)&&!uE.TYPE_SYSTEM_DIRECTIVE_LOCATIONS.has(o)){n.push((0,pe.invalidDirectiveDefinitionLocationErrorMessage)(o)),i.add(o);continue}if(r.has(o)){n.push((0,pe.duplicateDirectiveDefinitionLocationErrorMessage)(o)),i.add(o);continue}r.add(o)}}return r}extractArgumentData(t,n){let r=new Map,i=new Set,a=new Set,o={argumentTypeNodeByArgumentName:r,optionalArgumentNames:i,requiredArgumentNames:a};if(!t)return o;let c=new Set;for(let l of t){let p=l.name.value;if(r.has(p)){c.add(p);continue}l.defaultValue&&i.add(p),(0,gn.isTypeRequired)(l.type)&&!l.defaultValue&&a.add(p),r.set(p,{name:p,typeNode:l.type,defaultValue:l.defaultValue})}return c.size>0&&n.push((0,pe.duplicateDirectiveDefinitionArgumentErrorMessage)([...c])),o}addDirectiveDefinitionDataByNode(t){let n=t.name.value;if(this.definedDirectiveNames.has(n))return this.errors.push((0,pe.duplicateDirectiveDefinitionError)(n)),!1;if(this.definedDirectiveNames.add(n),this.directiveDefinitionByDirectiveName.set(n,t),en.V2_DIRECTIVE_DEFINITION_BY_DIRECTIVE_NAME.has(n))return this.isSubgraphVersionTwo=!0,!1;if(en.ALL_IN_BUILT_DIRECTIVE_NAMES.has(n))return!1;let r=[],{argumentTypeNodeByArgumentName:i,optionalArgumentNames:a,requiredArgumentNames:o}=this.extractArgumentData(t.arguments,r);return this.directiveDefinitionDataByDirectiveName.set(n,{argumentTypeNodeByArgumentName:i,isRepeatable:t.repeatable,locations:this.extractDirectiveLocations(t,r),name:n,node:t,optionalArgumentNames:a,requiredArgumentNames:o}),r.length>0&&this.errors.push((0,pe.invalidDirectiveDefinitionError)(n,r)),!0}addFieldDataByNode(t,n,r,i){let a=n.name.value,o=this.renamedParentTypeName||this.originalParentTypeName,c=`${this.originalParentTypeName}.${a}`,{isExternal:l,isShareable:p}=(0,gn.isNodeExternalOrShareable)(n,!this.isSubgraphVersionTwo,i),T={argumentDataByArgumentName:r,configureDescriptionDataBySubgraphName:new Map,externalFieldDataBySubgraphName:new Map([[this.subgraphName,(0,gn.newExternalFieldData)(l)]]),federatedCoords:`${o}.${a}`,isInaccessible:i.has(ne.INACCESSIBLE),isShareableBySubgraphName:new Map([[this.subgraphName,p]]),kind:oe.Kind.FIELD_DEFINITION,name:a,namedTypeName:(0,ir.getTypeNodeNamedTypeName)(n.type),node:(0,ir.getMutableFieldNode)(n,c,this.errors),originalParentTypeName:this.originalParentTypeName,persistedDirectivesData:(0,gn.newPersistedDirectivesData)(),renamedParentTypeName:o,subgraphNames:new Set([this.subgraphName]),type:(0,ir.getMutableTypeNode)(n.type,c,this.errors),directivesByDirectiveName:i,description:(0,Dn.formatDescription)(n.description)};return en.BASE_SCALARS.has(T.namedTypeName)||this.referencedTypeNames.add(T.namedTypeName),this.extractConfigureDescriptionsData(T),t.set(a,T),T}addInputValueDataByNode(t,n,r,i){let a=n.name.value,o=!!i;n.defaultValue&&!(0,gn.areDefaultValuesCompatible)(n.type,n.defaultValue)&&this.errors.push((0,pe.incompatibleInputValueDefaultValueTypeError)((o?ne.ARGUMENT:ne.INPUT_FIELD)+` "${a}"`,r,(0,$i.printTypeNode)(n.type),(0,oe.print)(n.defaultValue)));let c={configureDescriptionDataBySubgraphName:new Map,directivesByDirectiveName:this.extractDirectives(n,new Map),includeDefaultValue:!!n.defaultValue,isArgument:o,kind:o?oe.Kind.ARGUMENT:oe.Kind.INPUT_VALUE_DEFINITION,name:a,namedTypeName:(0,ir.getTypeNodeNamedTypeName)(n.type),node:(0,ir.getMutableInputValueNode)(n,r,this.errors),originalCoords:r,persistedDirectivesData:(0,gn.newPersistedDirectivesData)(),federatedCoords:i||r,requiredSubgraphNames:new Set((0,gn.isTypeRequired)(n.type)?[this.subgraphName]:[]),subgraphNames:new Set([this.subgraphName]),type:(0,ir.getMutableTypeNode)(n.type,r,this.errors),defaultValue:n.defaultValue,description:(0,Dn.formatDescription)(n.description)};this.extractConfigureDescriptionsData(c),t.set(a,c)}upsertInterfaceDataByNode(t,n=!1){let r=t.name.value,i=this.parentDefinitionDataByTypeName.get(r),a=this.extractDirectives(t,(i==null?void 0:i.directivesByDirectiveName)||new Map),o=this.getNodeExtensionType(n,a),c=this.entityInterfaceDataByTypeName.get(r);if(c&&t.fields)for(let p of t.fields)c.interfaceFieldNames.add(p.name.value);if(i){if(i.kind!==oe.Kind.INTERFACE_TYPE_DEFINITION){this.errors.push((0,pe.multipleNamedTypeDefinitionError)(r,(0,Ge.kindToTypeString)(i.kind),(0,ar.kindToConvertedTypeString)(t.kind)));return}this.updateCompositeOutputDataByNode(t,i,o);return}let l={configureDescriptionDataBySubgraphName:new Map,directivesByDirectiveName:a,extensionType:o,fieldDataByFieldName:new Map,implementedInterfaceTypeNames:this.extractImplementedInterfaceTypeNames(t,new Set),isEntity:a.has(ne.KEY),isInaccessible:a.has(ne.INACCESSIBLE),kind:oe.Kind.INTERFACE_TYPE_DEFINITION,name:r,node:(0,ir.getMutableInterfaceNode)(t.name),persistedDirectivesData:(0,gn.newPersistedDirectivesData)(),subgraphNames:new Set([this.subgraphName]),description:(0,Dn.formatDescription)("description"in t?t.description:void 0)};this.extractConfigureDescriptionsData(l),this.parentDefinitionDataByTypeName.set(r,l)}getRenamedRootTypeName(t){let n=this.operationTypeNodeByTypeName.get(t);if(!n)return t;switch(n){case oe.OperationTypeNode.MUTATION:return ne.MUTATION;case oe.OperationTypeNode.SUBSCRIPTION:return ne.SUBSCRIPTION;default:return ne.QUERY}}addInterfaceObjectFieldsByNode(t){let n=t.name.value,r=this.entityInterfaceDataByTypeName.get(n);if(!(!r||!r.isInterfaceObject||!t.fields))for(let i of t.fields)r.interfaceObjectFieldNames.add(i.name.value)}upsertObjectDataByNode(t,n=!1){let r=t.name.value,i=this.parentDefinitionDataByTypeName.get(r),a=this.extractDirectives(t,(i==null?void 0:i.directivesByDirectiveName)||new Map),o=this.isTypeNameRootType(r),c=this.getNodeExtensionType(n,a,o);if(this.addInterfaceObjectFieldsByNode(t),i){if(i.kind!==oe.Kind.OBJECT_TYPE_DEFINITION){this.errors.push((0,pe.multipleNamedTypeDefinitionError)(r,(0,Ge.kindToTypeString)(i.kind),(0,ar.kindToConvertedTypeString)(t.kind)));return}this.updateCompositeOutputDataByNode(t,i,c),this.addConcreteTypeNamesForImplementedInterfaces(i.implementedInterfaceTypeNames,r);return}let l=this.extractImplementedInterfaceTypeNames(t,new Set);this.addConcreteTypeNamesForImplementedInterfaces(l,r);let p={configureDescriptionDataBySubgraphName:new Map,directivesByDirectiveName:a,extensionType:c,fieldDataByFieldName:new Map,implementedInterfaceTypeNames:l,isEntity:a.has(ne.KEY),isInaccessible:a.has(ne.INACCESSIBLE),isRootType:o,kind:oe.Kind.OBJECT_TYPE_DEFINITION,name:r,node:(0,ir.getMutableObjectNode)(t.name),persistedDirectivesData:(0,gn.newPersistedDirectivesData)(),renamedTypeName:this.getRenamedRootTypeName(r),subgraphNames:new Set([this.subgraphName]),description:(0,Dn.formatDescription)("description"in t?t.description:void 0)};this.extractConfigureDescriptionsData(p),this.parentDefinitionDataByTypeName.set(r,p)}upsertEnumDataByNode(t,n=!1){let r=t.name.value;this.internalGraph.addOrUpdateNode(r,{isLeaf:!0});let i=this.parentDefinitionDataByTypeName.get(r),a=this.extractDirectives(t,(i==null?void 0:i.directivesByDirectiveName)||new Map),o=this.getNodeExtensionType(n,a);if(i){if(i.kind!==oe.Kind.ENUM_TYPE_DEFINITION){this.errors.push((0,pe.multipleNamedTypeDefinitionError)(r,(0,Ge.kindToTypeString)(i.kind),(0,ar.kindToConvertedTypeString)(t.kind)));return}this.setParentDataExtensionType(i,o),i.isInaccessible||(i.isInaccessible=a.has(ne.INACCESSIBLE)),i.subgraphNames.add(this.subgraphName),i.description||(i.description=(0,Dn.formatDescription)("description"in t?t.description:void 0)),this.extractConfigureDescriptionsData(i);return}let c={appearances:1,configureDescriptionDataBySubgraphName:new Map,directivesByDirectiveName:a,extensionType:o,enumValueDataByValueName:new Map,isInaccessible:a.has(ne.INACCESSIBLE),kind:oe.Kind.ENUM_TYPE_DEFINITION,name:r,node:(0,ir.getMutableEnumNode)(t.name),persistedDirectivesData:(0,gn.newPersistedDirectivesData)(),subgraphNames:new Set([this.subgraphName]),description:(0,Dn.formatDescription)("description"in t?t.description:void 0)};this.extractConfigureDescriptionsData(c),this.parentDefinitionDataByTypeName.set(r,c)}upsertInputObjectByNode(t,n=!1){let r=t.name.value,i=this.parentDefinitionDataByTypeName.get(r),a=this.extractDirectives(t,(i==null?void 0:i.directivesByDirectiveName)||new Map),o=this.getNodeExtensionType(n,a);if(i){if(i.kind!==oe.Kind.INPUT_OBJECT_TYPE_DEFINITION){this.errors.push((0,pe.multipleNamedTypeDefinitionError)(r,(0,Ge.kindToTypeString)(i.kind),(0,ar.kindToConvertedTypeString)(t.kind)));return}this.setParentDataExtensionType(i,o),i.isInaccessible||(i.isInaccessible=a.has(ne.INACCESSIBLE)),i.subgraphNames.add(this.subgraphName),i.description||(i.description=(0,Dn.formatDescription)("description"in t?t.description:void 0)),this.extractConfigureDescriptionsData(i);return}let c={configureDescriptionDataBySubgraphName:new Map,directivesByDirectiveName:a,extensionType:o,inputValueDataByValueName:new Map,isInaccessible:a.has(ne.INACCESSIBLE),kind:oe.Kind.INPUT_OBJECT_TYPE_DEFINITION,name:r,node:(0,ir.getMutableInputObjectNode)(t.name),persistedDirectivesData:(0,gn.newPersistedDirectivesData)(),subgraphNames:new Set([this.subgraphName]),description:(0,Dn.formatDescription)("description"in t?t.description:void 0)};this.extractConfigureDescriptionsData(c),this.parentDefinitionDataByTypeName.set(r,c)}upsertScalarByNode(t,n=!1){let r=t.name.value;this.internalGraph.addOrUpdateNode(r,{isLeaf:!0});let i=this.parentDefinitionDataByTypeName.get(r),a=this.extractDirectives(t,(i==null?void 0:i.directivesByDirectiveName)||new Map),o=this.getNodeExtensionType(n,a);if(i){if(i.kind!==oe.Kind.SCALAR_TYPE_DEFINITION){this.errors.push((0,pe.multipleNamedTypeDefinitionError)(r,(0,Ge.kindToTypeString)(i.kind),(0,ar.kindToConvertedTypeString)(t.kind)));return}this.setParentDataExtensionType(i,o),i.description||(i.description=(0,Dn.formatDescription)("description"in t?t.description:void 0)),i.subgraphNames.add(this.subgraphName),this.extractConfigureDescriptionsData(i);return}let c={configureDescriptionDataBySubgraphName:new Map,directivesByDirectiveName:a,extensionType:o,kind:oe.Kind.SCALAR_TYPE_DEFINITION,name:r,node:(0,ir.getMutableScalarNode)(t.name),persistedDirectivesData:(0,gn.newPersistedDirectivesData)(),subgraphNames:new Set([this.subgraphName]),description:(0,Dn.formatDescription)("description"in t?t.description:void 0)};this.extractConfigureDescriptionsData(c),this.parentDefinitionDataByTypeName.set(r,c)}extractUnionMembers(t,n){if(!t.types)return n;let r=t.name.value;for(let i of t.types){let a=i.name.value;if(n.has(a)){this.errors.push((0,pe.duplicateUnionMemberDefinitionError)(r,a));continue}(0,Ge.getValueOrDefault)(this.concreteTypeNamesByAbstractTypeName,r,()=>new Set).add(a),en.BASE_SCALARS.has(a)||this.referencedTypeNames.add(a),n.set(a,i)}return n}upsertUnionByNode(t,n=!1){let r=t.name.value,i=this.parentDefinitionDataByTypeName.get(r),a=this.extractDirectives(t,(i==null?void 0:i.directivesByDirectiveName)||new Map),o=this.getNodeExtensionType(n,a);if(this.addConcreteTypeNamesForUnion(t),i){if(i.kind!==oe.Kind.UNION_TYPE_DEFINITION){this.errors.push((0,pe.multipleNamedTypeDefinitionError)(r,(0,Ge.kindToTypeString)(i.kind),(0,ar.kindToConvertedTypeString)(t.kind)));return}this.setParentDataExtensionType(i,o),this.extractUnionMembers(t,i.memberByMemberTypeName),i.description||(i.description=(0,Dn.formatDescription)("description"in t?t.description:void 0)),i.subgraphNames.add(this.subgraphName),this.extractConfigureDescriptionsData(i);return}let c={configureDescriptionDataBySubgraphName:new Map,directivesByDirectiveName:a,extensionType:o,kind:oe.Kind.UNION_TYPE_DEFINITION,memberByMemberTypeName:this.extractUnionMembers(t,new Map),name:r,node:(0,ir.getMutableUnionNode)(t.name),persistedDirectivesData:(0,gn.newPersistedDirectivesData)(),subgraphNames:new Set([this.subgraphName]),description:(0,Dn.formatDescription)("description"in t?t.description:void 0)};this.extractConfigureDescriptionsData(c),this.parentDefinitionDataByTypeName.set(r,c)}extractKeyFieldSets(t,n){var a;let r=t.name.value;if(!((a=t.directives)!=null&&a.length)){this.errors.push((0,pe.expectedEntityError)(r));return}let i=0;for(let o of t.directives){if(o.name.value!==ne.KEY||(i+=1,!o.arguments||o.arguments.length<1))continue;let c,l=!1;for(let _ of o.arguments){if(_.name.value===ne.RESOLVABLE){_.value.kind===oe.Kind.BOOLEAN&&!_.value.value&&(l=!0);continue}if(_.name.value!==ne.FIELDS){c=void 0;break}if(_.value.kind!==oe.Kind.STRING){c=void 0;break}c=_.value.value}if(c===void 0)continue;let{error:p,documentNode:T}=(0,Dn.safeParse)("{"+c+"}");if(p||!T){this.errors.push((0,pe.invalidDirectiveError)(ne.KEY,r,(0,Ge.numberToOrdinal)(i),[(0,pe.unparsableFieldSetErrorMessage)(c,p)]));continue}let y=(0,ti.getNormalizedFieldSet)(T),g=n.get(y);g?g.isUnresolvable||(g.isUnresolvable=l):n.set(y,{documentNode:T,isUnresolvable:l,normalizedFieldSet:y,rawFieldSet:c})}}getFieldSetParent(t,n,r,i){if(!t)return{fieldSetParentData:n};let a=(0,Ge.getOrThrowError)(n.fieldDataByFieldName,r,`${i}.fieldDataByFieldName`),o=(0,ir.getTypeNodeNamedTypeName)(a.node.type),c=this.parentDefinitionDataByTypeName.get(o);return c?c.kind!==oe.Kind.INTERFACE_TYPE_DEFINITION&&c.kind!==oe.Kind.OBJECT_TYPE_DEFINITION?{errorString:(0,pe.incompatibleTypeWithProvidesErrorMessage)(`${i}.${r}`,o)}:{fieldSetParentData:c}:{errorString:(0,pe.unknownNamedTypeErrorMessage)(`${i}.${r}`,o)}}validateConditionalFieldSet(t,n,r,i,a){let{error:o,documentNode:c}=(0,Dn.safeParse)("{"+n+"}");if(o||!c)return{errorMessages:[(0,pe.unparsableFieldSetErrorMessage)(n,o)]};let l=this,p=[t],T=(0,ti.getConditionalFieldSetDirectiveName)(i),y=[],g=`${a}.${r}`,_=(0,ti.getInitialFieldCoordsPath)(i,g),F=[r],U=new Set,K=[],J=-1,ee=!0,W=r,Te=!1;return(0,_n.visit)(c,{Argument:{enter(){return!1}},Field:{enter(de){let we=p[J],qe=we.name;if(we.kind===oe.Kind.UNION_TYPE_DEFINITION)return K.push((0,pe.invalidSelectionOnUnionErrorMessage)(n,_,qe)),_n.BREAK;let et=de.name.value,X=`${qe}.${et}`;if(l.unvalidatedExternalFieldCoords.delete(X),ee)return K.push((0,pe.invalidSelectionSetErrorMessage)(n,_,qe,(0,Ge.kindToTypeString)(we.kind))),_n.BREAK;_.push(X),F.push(et),W=et;let ve=we.fieldDataByFieldName.get(et);if(!ve)return K.push((0,pe.undefinedFieldInFieldSetErrorMessage)(n,qe,et)),_n.BREAK;if(y[J].has(et))return K.push((0,pe.duplicateFieldInFieldSetErrorMessage)(n,X)),_n.BREAK;y[J].add(et);let{isDefinedExternal:gt,isUnconditionallyProvided:Ht}=(0,Ge.getOrThrowError)(ve.externalFieldDataBySubgraphName,l.subgraphName,`${X}.externalFieldDataBySubgraphName`),zt=gt&&!Ht;Ht||(Te=!0);let bn=(0,ir.getTypeNodeNamedTypeName)(ve.node.type),Vt=l.parentDefinitionDataByTypeName.get(bn);if(en.BASE_SCALARS.has(bn)||(Vt==null?void 0:Vt.kind)===oe.Kind.SCALAR_TYPE_DEFINITION||(Vt==null?void 0:Vt.kind)===oe.Kind.ENUM_TYPE_DEFINITION){if(U.size<1&&!gt){if(l.isSubgraphVersionTwo){l.errors.push((0,pe.nonExternalConditionalFieldError)(g,l.subgraphName,X,n,T));return}l.warnings.push((0,Ss.nonExternalConditionalFieldWarning)(g,l.subgraphName,X,n,T));return}if(U.size<1&&Ht){l.isSubgraphVersionTwo?K.push((0,pe.fieldAlreadyProvidedErrorMessage)(X,l.subgraphName,T)):l.warnings.push((0,Ss.fieldAlreadyProvidedWarning)(X,T,g,l.subgraphName));return}if(!zt&&!i)return;let dn=(0,Ge.getValueOrDefault)(l.conditionalFieldDataByCoords,X,gn.newConditionalFieldData),Rr=(0,Pp.newFieldSetConditionData)({fieldCoordinatesPath:[..._],fieldPath:[...F]});i?dn.providedBy.push(Rr):dn.requiredBy.push(Rr);return}if(!Vt)return K.push((0,pe.unknownTypeInFieldSetErrorMessage)(n,X,bn)),_n.BREAK;if(gt&&(i&&(0,Ge.getValueOrDefault)(l.conditionalFieldDataByCoords,X,gn.newConditionalFieldData).providedBy.push((0,Pp.newFieldSetConditionData)({fieldCoordinatesPath:[..._],fieldPath:[...F]})),U.add(X)),Vt.kind===oe.Kind.OBJECT_TYPE_DEFINITION||Vt.kind===oe.Kind.INTERFACE_TYPE_DEFINITION||Vt.kind===oe.Kind.UNION_TYPE_DEFINITION){ee=!0,p.push(Vt);return}},leave(){U.delete(_.pop()||""),F.pop()}},InlineFragment:{enter(de){let we=p[J],qe=we.name,et=_.length<1?t.name:_[_.length-1];if(!de.typeCondition)return K.push((0,pe.inlineFragmentWithoutTypeConditionErrorMessage)(n,et)),_n.BREAK;let X=de.typeCondition.name.value;if(X===qe){p.push(we),ee=!0;return}if(!(0,Dn.isKindAbstract)(we.kind))return K.push((0,pe.invalidInlineFragmentTypeErrorMessage)(n,_,X,qe)),_n.BREAK;let ve=l.parentDefinitionDataByTypeName.get(X);if(!ve)return K.push((0,pe.unknownInlineFragmentTypeConditionErrorMessage)(n,_,qe,X)),_n.BREAK;switch(ee=!0,ve.kind){case oe.Kind.INTERFACE_TYPE_DEFINITION:{if(!ve.implementedInterfaceTypeNames.has(qe))break;p.push(ve);return}case oe.Kind.OBJECT_TYPE_DEFINITION:{let gt=l.concreteTypeNamesByAbstractTypeName.get(qe);if(!gt||!gt.has(X))break;p.push(ve);return}case oe.Kind.UNION_TYPE_DEFINITION:{p.push(ve);return}default:return K.push((0,pe.invalidInlineFragmentTypeConditionTypeErrorMessage)(n,_,qe,X,(0,Ge.kindToTypeString)(ve.kind))),_n.BREAK}return K.push((0,pe.invalidInlineFragmentTypeConditionErrorMessage)(n,_,X,(0,Ge.kindToTypeString)(we.kind),qe)),_n.BREAK}},SelectionSet:{enter(){if(!ee){let de=p[J];if(de.kind===oe.Kind.UNION_TYPE_DEFINITION)return K.push((0,pe.unparsableFieldSetSelectionErrorMessage)(n,W)),_n.BREAK;let we=de.fieldDataByFieldName.get(W);if(!we)return K.push((0,pe.undefinedFieldInFieldSetErrorMessage)(n,de.name,W)),_n.BREAK;let qe=(0,ir.getTypeNodeNamedTypeName)(we.node.type),et=l.parentDefinitionDataByTypeName.get(qe),X=et?et.kind:oe.Kind.SCALAR_TYPE_DEFINITION;return K.push((0,pe.invalidSelectionSetDefinitionErrorMessage)(n,_,qe,(0,Ge.kindToTypeString)(X))),_n.BREAK}if(J+=1,ee=!1,J<0||J>=p.length)return K.push((0,pe.unparsableFieldSetSelectionErrorMessage)(n,W)),_n.BREAK;y.push(new Set)},leave(){if(ee){let de=p[J+1];K.push((0,pe.invalidSelectionSetErrorMessage)(n,_,de.name,(0,Ge.kindToTypeString)(de.kind))),ee=!1}J-=1,p.pop(),y.pop()}}}),K.length>0||!Te?{errorMessages:K}:{configuration:{fieldName:r,selectionSet:(0,ti.getNormalizedFieldSet)(c)},errorMessages:K}}validateProvidesOrRequires(t,n,r){let i=[],a=[],o=(0,gn.getParentTypeName)(t);for(let[c,l]of n){let{fieldSetParentData:p,errorString:T}=this.getFieldSetParent(r,t,c,o),y=`${o}.${c}`;if(T){i.push(T);continue}if(!p)continue;let{errorMessages:g,configuration:_}=this.validateConditionalFieldSet(p,l,c,r,o);if(g.length>0){i.push(` On field "${y}": - -`+g.join(ne.HYPHEN_JOIN));continue}_&&a.push(_)}if(i.length>0){this.errors.push((0,pe.invalidProvidesOrRequiresDirectivesError)((0,ti.getConditionalFieldSetDirectiveName)(r),i));return}if(a.length>0)return a}validateInterfaceImplementations(t){if(t.implementedInterfaceTypeNames.size<1)return;let n=t.directivesByDirectiveName.has(ne.INACCESSIBLE),r=new Map,i=new Map,a=!1;for(let o of t.implementedInterfaceTypeNames){let c=this.parentDefinitionDataByTypeName.get(o);if(en.BASE_SCALARS.has(o)&&this.referencedTypeNames.add(o),!c)continue;if(c.kind!==oe.Kind.INTERFACE_TYPE_DEFINITION){i.set(c.name,(0,Ge.kindToTypeString)(c.kind));continue}if(t.name===c.name){a=!0;continue}let l={invalidFieldImplementations:new Map,unimplementedFields:[]},p=!1;for(let[T,y]of c.fieldDataByFieldName){this.unvalidatedExternalFieldCoords.delete(`${t.name}.${T}`);let g=!1,_=t.fieldDataByFieldName.get(T);if(!_){p=!0,l.unimplementedFields.push(T);continue}let F={invalidAdditionalArguments:new Set,invalidImplementedArguments:[],isInaccessible:!1,originalResponseType:(0,$i.printTypeNode)(y.node.type),unimplementedArguments:new Set};(0,gn.isTypeValidImplementation)(y.node.type,_.node.type,this.concreteTypeNamesByAbstractTypeName)||(p=!0,g=!0,F.implementedResponseType=(0,$i.printTypeNode)(_.node.type));let U=new Set;for(let[K,J]of y.argumentDataByArgumentName){U.add(K);let ee=_.argumentDataByArgumentName.get(K);if(!ee){p=!0,g=!0,F.unimplementedArguments.add(K);continue}let W=(0,$i.printTypeNode)(ee.type),Te=(0,$i.printTypeNode)(J.type);Te!==W&&(p=!0,g=!0,F.invalidImplementedArguments.push({actualType:W,argumentName:K,expectedType:Te}))}for(let[K,J]of _.argumentDataByArgumentName)U.has(K)||J.type.kind===oe.Kind.NON_NULL_TYPE&&(p=!0,g=!0,F.invalidAdditionalArguments.add(K));!n&&_.isInaccessible&&!y.isInaccessible&&(p=!0,g=!0,F.isInaccessible=!0),g&&l.invalidFieldImplementations.set(T,F)}p&&r.set(o,l)}i.size>0&&this.errors.push((0,pe.invalidImplementedTypeError)(t.name,i)),a&&this.errors.push((0,pe.selfImplementationError)(t.name)),r.size>0&&this.errors.push((0,pe.invalidInterfaceImplementationError)(t.name,(0,Ge.kindToTypeString)(t.kind),r))}handleAuthenticatedDirective(t,n){let r=(0,Ge.getValueOrDefault)(this.authorizationDataByParentTypeName,n,()=>(0,ar.newAuthorizationData)(n));if(t.kind===oe.Kind.FIELD_DEFINITION){let i=(0,Ge.getValueOrDefault)(r.fieldAuthDataByFieldName,t.name,()=>(0,ar.newFieldAuthorizationData)(t.name));i.inheritedData.requiresAuthentication=!0,i.originalData.requiresAuthentication=!0}else r.requiresAuthentication=!0,this.parentTypeNamesWithAuthDirectives.add(n)}handleOverrideDirective({data:t,directiveCoords:n,errorMessages:r,targetSubgraphName:i}){if(i===this.subgraphName){r.push((0,pe.equivalentSourceAndTargetOverrideErrorMessage)(i,n));return}let a=(0,Ge.getValueOrDefault)(this.overridesByTargetSubgraphName,i,()=>new Map);(0,Ge.getValueOrDefault)(a,t.renamedParentTypeName,()=>new Set).add(t.name)}extractRequiredScopes({directiveCoords:t,orScopes:n,requiredScopes:r}){if(n.length>en.MAX_OR_SCOPES){this.invalidORScopesCoords.add(t);return}for(let i of n){let a=new Set;for(let o of i.values)a.add(o.value);a.size<1||(0,ar.addScopes)(r,a)}}getKafkaPublishConfiguration(t,n,r,i){let a=[],o=ne.DEFAULT_EDFS_PROVIDER_ID;for(let c of t.arguments||[])switch(c.name.value){case ne.TOPIC:{if(c.value.kind!==oe.Kind.STRING||c.value.value.length<1){i.push((0,pe.invalidEventSubjectErrorMessage)(ne.TOPIC));continue}(0,ti.validateArgumentTemplateReferences)(c.value.value,n,i),a.push(c.value.value);break}case ne.PROVIDER_ID:{if(c.value.kind!==oe.Kind.STRING||c.value.value.length<1){i.push(pe.invalidEventProviderIdErrorMessage);continue}o=c.value.value;break}}if(!(i.length>0))return{fieldName:r,providerId:o,providerType:ne.PROVIDER_TYPE_KAFKA,topics:a,type:ne.PUBLISH}}getKafkaSubscribeConfiguration(t,n,r,i){let a=[],o=ne.DEFAULT_EDFS_PROVIDER_ID;for(let c of t.arguments||[])switch(c.name.value){case ne.TOPICS:{if(c.value.kind!==oe.Kind.LIST){i.push((0,pe.invalidEventSubjectsErrorMessage)(ne.TOPICS));continue}for(let l of c.value.values){if(l.kind!==oe.Kind.STRING||l.value.length<1){i.push((0,pe.invalidEventSubjectsItemErrorMessage)(ne.TOPICS));break}(0,ti.validateArgumentTemplateReferences)(l.value,n,i),a.push(l.value)}break}case ne.PROVIDER_ID:{if(c.value.kind!==oe.Kind.STRING||c.value.value.length<1){i.push(pe.invalidEventProviderIdErrorMessage);continue}o=c.value.value;break}}if(!(i.length>0))return{fieldName:r,providerId:o,providerType:ne.PROVIDER_TYPE_KAFKA,topics:a,type:ne.SUBSCRIBE}}getNatsPublishAndRequestConfiguration(t,n,r,i,a){let o=[],c=ne.DEFAULT_EDFS_PROVIDER_ID;for(let l of n.arguments||[])switch(l.name.value){case ne.SUBJECT:{if(l.value.kind!==oe.Kind.STRING||l.value.value.length<1){a.push((0,pe.invalidEventSubjectErrorMessage)(ne.SUBJECT));continue}(0,ti.validateArgumentTemplateReferences)(l.value.value,r,a),o.push(l.value.value);break}case ne.PROVIDER_ID:{if(l.value.kind!==oe.Kind.STRING||l.value.value.length<1){a.push(pe.invalidEventProviderIdErrorMessage);continue}c=l.value.value;break}}if(!(a.length>0))return{fieldName:i,providerId:c,providerType:ne.PROVIDER_TYPE_NATS,subjects:o,type:t}}getNatsSubscribeConfiguration(t,n,r,i){let a=[],o=ne.DEFAULT_EDFS_PROVIDER_ID,c=cE.DEFAULT_CONSUMER_INACTIVE_THRESHOLD,l="",p="";for(let T of t.arguments||[])switch(T.name.value){case ne.SUBJECTS:{if(T.value.kind!==oe.Kind.LIST){i.push((0,pe.invalidEventSubjectsErrorMessage)(ne.SUBJECTS));continue}for(let y of T.value.values){if(y.kind!==oe.Kind.STRING||y.value.length<1){i.push((0,pe.invalidEventSubjectsItemErrorMessage)(ne.SUBJECTS));break}(0,ti.validateArgumentTemplateReferences)(y.value,n,i),a.push(y.value)}break}case ne.PROVIDER_ID:{if(T.value.kind!==oe.Kind.STRING||T.value.value.length<1){i.push(pe.invalidEventProviderIdErrorMessage);continue}o=T.value.value;break}case ne.STREAM_CONFIGURATION:{if(this.usesEdfsNatsStreamConfiguration=!0,T.value.kind!==oe.Kind.OBJECT||T.value.fields.length<1){i.push(pe.invalidNatsStreamInputErrorMessage);continue}let y=!0,g=new Set,_=new Set(uE.STREAM_CONFIGURATION_FIELD_NAMES),F=new Set([ne.CONSUMER_NAME,ne.STREAM_NAME]),U=new Set,K=new Set;for(let J of T.value.fields){let ee=J.name.value;if(!uE.STREAM_CONFIGURATION_FIELD_NAMES.has(ee)){g.add(ee),y=!1;continue}if(_.has(ee))_.delete(ee);else{U.add(ee),y=!1;continue}switch(F.has(ee)&&F.delete(ee),ee){case ne.CONSUMER_NAME:if(J.value.kind!=oe.Kind.STRING||J.value.value.length<1){K.add(ee),y=!1;continue}l=J.value.value;break;case ne.STREAM_NAME:if(J.value.kind!=oe.Kind.STRING||J.value.value.length<1){K.add(ee),y=!1;continue}p=J.value.value;break;case ne.CONSUMER_INACTIVE_THRESHOLD:if(J.value.kind!=oe.Kind.INT){i.push((0,pe.invalidArgumentValueErrorMessage)((0,oe.print)(J.value),"edfs__NatsStreamConfiguration","consumerInactiveThreshold",ne.INT_SCALAR)),y=!1;continue}try{c=parseInt(J.value.value,10)}catch(W){i.push((0,pe.invalidArgumentValueErrorMessage)((0,oe.print)(J.value),"edfs__NatsStreamConfiguration","consumerInactiveThreshold",ne.INT_SCALAR)),y=!1}break}}(!y||F.size>0)&&i.push((0,pe.invalidNatsStreamInputFieldsErrorMessage)([...F],[...U],[...K],[...g]))}}if(!(i.length>0))return c<0?(c=cE.DEFAULT_CONSUMER_INACTIVE_THRESHOLD,this.warnings.push((0,Ss.consumerInactiveThresholdInvalidValueWarning)(this.subgraphName,`The value has been set to ${cE.DEFAULT_CONSUMER_INACTIVE_THRESHOLD}.`))):c>Lce.MAX_INT32&&(c=0,this.warnings.push((0,Ss.consumerInactiveThresholdInvalidValueWarning)(this.subgraphName,"The value has been set to 0. This means the consumer will remain indefinitely active until its manual deletion."))),M({fieldName:r,providerId:o,providerType:ne.PROVIDER_TYPE_NATS,subjects:a,type:ne.SUBSCRIBE},l&&p?{streamConfiguration:{consumerInactiveThreshold:c,consumerName:l,streamName:p}}:{})}getRedisPublishConfiguration(t,n,r,i){let a=[],o=ne.DEFAULT_EDFS_PROVIDER_ID;for(let c of t.arguments||[])switch(c.name.value){case ne.CHANNEL:{if(c.value.kind!==oe.Kind.STRING||c.value.value.length<1){i.push((0,pe.invalidEventSubjectErrorMessage)(ne.CHANNEL));continue}(0,ti.validateArgumentTemplateReferences)(c.value.value,n,i),a.push(c.value.value);break}case ne.PROVIDER_ID:{if(c.value.kind!==oe.Kind.STRING||c.value.value.length<1){i.push(pe.invalidEventProviderIdErrorMessage);continue}o=c.value.value;break}}if(!(i.length>0))return{fieldName:r,providerId:o,providerType:ne.PROVIDER_TYPE_REDIS,channels:a,type:ne.PUBLISH}}getRedisSubscribeConfiguration(t,n,r,i){let a=[],o=ne.DEFAULT_EDFS_PROVIDER_ID;for(let c of t.arguments||[])switch(c.name.value){case ne.CHANNELS:{if(c.value.kind!==oe.Kind.LIST){i.push((0,pe.invalidEventSubjectsErrorMessage)(ne.CHANNELS));continue}for(let l of c.value.values){if(l.kind!==oe.Kind.STRING||l.value.length<1){i.push((0,pe.invalidEventSubjectsItemErrorMessage)(ne.CHANNELS));break}(0,ti.validateArgumentTemplateReferences)(l.value,n,i),a.push(l.value)}break}case ne.PROVIDER_ID:{if(c.value.kind!==oe.Kind.STRING||c.value.value.length<1){i.push(pe.invalidEventProviderIdErrorMessage);continue}o=c.value.value;break}}if(!(i.length>0))return{fieldName:r,providerId:o,providerType:ne.PROVIDER_TYPE_REDIS,channels:a,type:ne.SUBSCRIBE}}validateSubscriptionFilterDirectiveLocation(t){if(!t.directives)return;let n=this.renamedParentTypeName||this.originalParentTypeName,r=`${n}.${t.name.value}`,i=this.getOperationTypeNodeForRootTypeName(n)===oe.OperationTypeNode.SUBSCRIPTION;for(let a of t.directives)if(a.name.value===ne.SUBSCRIPTION_FILTER&&!i){this.errors.push((0,pe.invalidSubscriptionFilterLocationError)(r));return}}extractEventDirectivesToConfiguration(t,n){if(!t.directives)return;let r=t.name.value,i=`${this.renamedParentTypeName||this.originalParentTypeName}.${r}`;for(let a of t.directives){let o=[],c;switch(a.name.value){case ne.EDFS_KAFKA_PUBLISH:c=this.getKafkaPublishConfiguration(a,n,r,o);break;case ne.EDFS_KAFKA_SUBSCRIBE:c=this.getKafkaSubscribeConfiguration(a,n,r,o);break;case ne.EDFS_NATS_PUBLISH:{c=this.getNatsPublishAndRequestConfiguration(ne.PUBLISH,a,n,r,o);break}case ne.EDFS_NATS_REQUEST:{c=this.getNatsPublishAndRequestConfiguration(ne.REQUEST,a,n,r,o);break}case ne.EDFS_NATS_SUBSCRIBE:{c=this.getNatsSubscribeConfiguration(a,n,r,o);break}case ne.EDFS_REDIS_PUBLISH:{c=this.getRedisPublishConfiguration(a,n,r,o);break}case ne.EDFS_REDIS_SUBSCRIBE:{c=this.getRedisSubscribeConfiguration(a,n,r,o);break}default:continue}if(o.length>0){this.errors.push((0,pe.invalidEventDirectiveError)(a.name.value,i,o));continue}c&&(0,Ge.getValueOrDefault)(this.eventsConfigurations,this.renamedParentTypeName||this.originalParentTypeName,()=>[]).push(c)}}getValidEventsDirectiveNamesForOperationTypeNode(t){switch(t){case oe.OperationTypeNode.MUTATION:return new Set([ne.EDFS_KAFKA_PUBLISH,ne.EDFS_NATS_PUBLISH,ne.EDFS_NATS_REQUEST,ne.EDFS_REDIS_PUBLISH]);case oe.OperationTypeNode.QUERY:return new Set([ne.EDFS_NATS_REQUEST]);case oe.OperationTypeNode.SUBSCRIPTION:return new Set([ne.EDFS_KAFKA_SUBSCRIBE,ne.EDFS_NATS_SUBSCRIBE,ne.EDFS_REDIS_SUBSCRIBE])}}getOperationTypeNodeForRootTypeName(t){let n=this.operationTypeNodeByTypeName.get(t);if(n)return n;switch(t){case ne.MUTATION:return oe.OperationTypeNode.MUTATION;case ne.QUERY:return oe.OperationTypeNode.QUERY;case ne.SUBSCRIPTION:return oe.OperationTypeNode.SUBSCRIPTION;default:return}}validateEventDrivenRootType(t,n,r,i){let a=this.getOperationTypeNodeForRootTypeName(t.name);if(!a){this.errors.push((0,pe.invalidRootTypeError)(t.name));return}let o=this.getValidEventsDirectiveNamesForOperationTypeNode(a);for(let[c,l]of t.fieldDataByFieldName){let p=`${l.originalParentTypeName}.${c}`,T=new Set;for(let K of uE.EVENT_DIRECTIVE_NAMES)l.directivesByDirectiveName.has(K)&&T.add(K);let y=new Set;for(let K of T)o.has(K)||y.add(K);if((T.size<1||y.size>0)&&n.set(p,{definesDirectives:T.size>0,invalidDirectiveNames:[...y]}),a===oe.OperationTypeNode.MUTATION){let K=(0,$i.printTypeNode)(l.type);K!==ne.NON_NULLABLE_EDFS_PUBLISH_EVENT_RESULT&&i.set(p,K);continue}let g=(0,$i.printTypeNode)(l.type),_=l.namedTypeName+"!",F=!1,U=this.concreteTypeNamesByAbstractTypeName.get(l.namedTypeName)||new Set([l.namedTypeName]);for(let K of U)if(F||(F=this.entityDataByTypeName.has(K)),F)break;(!F||g!==_)&&r.set(p,g)}}validateEventDrivenKeyDefinition(t,n){let r=this.keyFieldSetDatasByTypeName.get(t);if(r)for(let[i,{isUnresolvable:a}]of r)a||(0,Ge.getValueOrDefault)(n,t,()=>[]).push(i)}validateEventDrivenObjectFields(t,n,r,i){var a;for(let[o,c]of t){let l=`${c.originalParentTypeName}.${o}`;if(n.has(o)){(a=c.externalFieldDataBySubgraphName.get(this.subgraphName))!=null&&a.isDefinedExternal||r.set(l,o);continue}i.set(l,o)}}isEdfsPublishResultValid(){let t=this.parentDefinitionDataByTypeName.get(ne.EDFS_PUBLISH_RESULT);if(!t)return!0;if(t.kind!==oe.Kind.OBJECT_TYPE_DEFINITION||t.fieldDataByFieldName.size!=1)return!1;for(let[n,r]of t.fieldDataByFieldName)if(r.argumentDataByArgumentName.size>0||n!==ne.SUCCESS||(0,$i.printTypeNode)(r.type)!==ne.NON_NULLABLE_BOOLEAN)return!1;return!0}isNatsStreamConfigurationInputObjectValid(t){if(t.kind!==oe.Kind.INPUT_OBJECT_TYPE_DEFINITION||t.inputValueDataByValueName.size!=3)return!1;for(let[n,r]of t.inputValueDataByValueName)switch(n){case ne.CONSUMER_INACTIVE_THRESHOLD:{if((0,$i.printTypeNode)(r.type)!==ne.NON_NULLABLE_INT||!r.defaultValue||r.defaultValue.kind!==oe.Kind.INT||r.defaultValue.value!==`${cE.DEFAULT_CONSUMER_INACTIVE_THRESHOLD}`)return!1;break}case ne.CONSUMER_NAME:case ne.STREAM_NAME:{if((0,$i.printTypeNode)(r.type)!==ne.NON_NULLABLE_STRING)return!1;break}default:return!1}return!0}validateEventDrivenSubgraph(t){let n=[],r=new Map,i=new Map,a=new Map,o=new Map,c=new Map,l=new Map,p=new Set,T=new Set;for(let[y,g]of this.parentDefinitionDataByTypeName){if(y===ne.EDFS_PUBLISH_RESULT||y===ne.EDFS_NATS_STREAM_CONFIGURATION||g.kind!==oe.Kind.OBJECT_TYPE_DEFINITION)continue;if(g.isRootType){this.validateEventDrivenRootType(g,r,i,a);continue}let _=this.keyFieldNamesByParentTypeName.get(y);if(!_){T.add(y);continue}this.validateEventDrivenKeyDefinition(y,o),this.validateEventDrivenObjectFields(g.fieldDataByFieldName,_,c,l)}if(this.isEdfsPublishResultValid()||n.push(pe.invalidEdfsPublishResultObjectErrorMessage),this.edfsDirectiveReferences.has(ne.EDFS_NATS_SUBSCRIBE)){let y=this.parentDefinitionDataByTypeName.get(ne.EDFS_NATS_STREAM_CONFIGURATION);y&&this.usesEdfsNatsStreamConfiguration&&!this.isNatsStreamConfigurationInputObjectValid(y)&&n.push(pe.invalidNatsStreamConfigurationDefinitionErrorMessage),this.parentDefinitionDataByTypeName.delete(ne.EDFS_NATS_STREAM_CONFIGURATION),t.push(en.EDFS_NATS_STREAM_CONFIGURATION_DEFINITION)}this.referencedDirectiveNames.has(ne.LINK)&&(t.push(en.LINK_DEFINITION),t.push(en.LINK_IMPORT_DEFINITION),t.push(en.LINK_PURPOSE_DEFINITION)),r.size>0&&n.push((0,pe.invalidRootTypeFieldEventsDirectivesErrorMessage)(r)),a.size>0&&n.push((0,pe.invalidEventDrivenMutationResponseTypeErrorMessage)(a)),i.size>0&&n.push((0,pe.invalidRootTypeFieldResponseTypesEventDrivenErrorMessage)(i)),o.size>0&&n.push((0,pe.invalidKeyFieldSetsEventDrivenErrorMessage)(o)),c.size>0&&n.push((0,pe.nonExternalKeyFieldNamesEventDrivenErrorMessage)(c)),l.size>0&&n.push((0,pe.nonKeyFieldNamesEventDrivenErrorMessage)(l)),p.size>0&&n.push((0,pe.nonEntityObjectExtensionsEventDrivenErrorMessage)([...p])),T.size>0&&n.push((0,pe.nonKeyComposingObjectTypeNamesEventDrivenErrorMessage)([...T])),n.length>0&&this.errors.push((0,pe.invalidEventDrivenGraphError)(n))}validateUnionMembers(t){if(t.memberByMemberTypeName.size<1){this.errors.push((0,pe.noDefinedUnionMembersError)(t.name));return}let n=[];for(let r of t.memberByMemberTypeName.keys()){let i=this.parentDefinitionDataByTypeName.get(r);i&&i.kind!==oe.Kind.OBJECT_TYPE_DEFINITION&&n.push(`"${r}", which is type "${(0,Ge.kindToTypeString)(i.kind)}"`)}n.length>0&&this.errors.push((0,pe.invalidUnionMemberTypeError)(t.name,n))}addConcreteTypeNamesForUnion(t){if(!t.types||t.types.length<1)return;let n=t.name.value;for(let r of t.types){let i=r.name.value;(0,Ge.getValueOrDefault)(this.concreteTypeNamesByAbstractTypeName,n,()=>new Set).add(i),this.internalGraph.addEdge(this.internalGraph.addOrUpdateNode(n,{isAbstract:!0}),this.internalGraph.addOrUpdateNode(i),i,!0)}}addValidKeyFieldSetConfigurations(){for(let[t,n]of this.keyFieldSetDatasByTypeName){let r=this.parentDefinitionDataByTypeName.get(t);if(!r||r.kind!==oe.Kind.OBJECT_TYPE_DEFINITION&&r.kind!==oe.Kind.INTERFACE_TYPE_DEFINITION){this.errors.push((0,pe.undefinedCompositeOutputTypeError)(t));continue}let i=(0,gn.getParentTypeName)(r),a=(0,Ge.getValueOrDefault)(this.configurationDataByTypeName,i,()=>(0,Pp.newConfigurationData)(!0,i)),o=(0,ti.validateKeyFieldSets)(this,r,n);o&&(a.keys=o)}}getValidFlattenedDirectiveArray(t,n){let r=[];for(let[i,a]of t){let o=this.directiveDefinitionDataByDirectiveName.get(i);if(!o)continue;if(!o.isRepeatable&&a.length>1){let p=(0,Ge.getValueOrDefault)(this.invalidRepeatedDirectiveNameByCoords,n,()=>new Set);p.has(i)||(p.add(i),this.errors.push((0,pe.invalidDirectiveError)(i,n,"1st",[(0,pe.invalidRepeatedDirectiveErrorMessage)(i)])));continue}if(i!==ne.KEY){r.push(...a);continue}let c=[],l=new Set;for(let p=0;pnew Set).add(U)),(0,Ge.getValueOrDefault)(a.keyFieldNamesByParentTypeName,_,()=>new Set).add(F);let ee=(0,ir.getTypeNodeNamedTypeName)(K.node.type);if(en.BASE_SCALARS.has(ee))return;let W=a.parentDefinitionDataByTypeName.get(ee);if(!W)return _n.BREAK;if(W.kind===oe.Kind.OBJECT_TYPE_DEFINITION){T=!0,c.push(W);return}if((0,Dn.isKindAbstract)(W.kind))return _n.BREAK}},InlineFragment:{enter(){return _n.BREAK}},SelectionSet:{enter(){if(!T||(p+=1,T=!1,p<0||p>=c.length))return _n.BREAK},leave(){T&&(T=!1),p-=1,c.pop()}}}),!(l.size<1))for(let[y,g]of l)this.warnings.push((0,Ss.externalEntityExtensionKeyFieldWarning)(i.name,y,[...g],this.subgraphName))}}for(let n of t)this.keyFieldSetDatasByTypeName.delete(n)}addValidConditionalFieldSetConfigurations(){for(let[t,n]of this.fieldSetDataByTypeName){let r=this.parentDefinitionDataByTypeName.get(t);if(!r||r.kind!==oe.Kind.OBJECT_TYPE_DEFINITION&&r.kind!==oe.Kind.INTERFACE_TYPE_DEFINITION){this.errors.push((0,pe.undefinedCompositeOutputTypeError)(t));continue}let i=(0,gn.getParentTypeName)(r),a=(0,Ge.getValueOrDefault)(this.configurationDataByTypeName,i,()=>(0,Pp.newConfigurationData)(!1,i)),o=this.validateProvidesOrRequires(r,n.provides,!0);o&&(a.provides=o);let c=this.validateProvidesOrRequires(r,n.requires,!1);c&&(a.requires=c)}}addFieldNamesToConfigurationData(t,n){let r=new Set;for(let[i,a]of t){let o=a.externalFieldDataBySubgraphName.get(this.subgraphName);if(!o||o.isUnconditionallyProvided){n.fieldNames.add(i);continue}r.add(i),this.edfsDirectiveReferences.size>0&&n.fieldNames.add(i)}r.size>0&&(n.externalFieldNames=r)}normalize(t){var a;(0,yq.upsertDirectiveSchemaAndEntityDefinitions)(this,t),(0,yq.upsertParentsAndChildren)(this,t),this.validateDirectives(this.schemaData,ne.SCHEMA);for(let[o,c]of this.parentDefinitionDataByTypeName)this.validateDirectives(c,o);this.invalidORScopesCoords.size>0&&this.errors.push((0,pe.orScopesLimitError)(en.MAX_OR_SCOPES,[...this.invalidORScopesCoords]));let n=[];for(let o of en.BASE_DIRECTIVE_DEFINITIONS)n.push(o);if(n.push(en.FIELD_SET_SCALAR_DEFINITION),this.isSubgraphVersionTwo){for(let o of en.VERSION_TWO_DIRECTIVE_DEFINITIONS)n.push(o),this.directiveDefinitionByDirectiveName.set(o.name.value,o);n.push(en.SCOPE_SCALAR_DEFINITION)}for(let o of this.edfsDirectiveReferences){let c=en.EVENT_DRIVEN_DIRECTIVE_DEFINITIONS_BY_DIRECTIVE_NAME.get(o);if(!c){this.errors.push((0,pe.invalidEdfsDirectiveName)(o));continue}n.push(c)}this.edfsDirectiveReferences.size>0&&this.referencedDirectiveNames.has(ne.SUBSCRIPTION_FILTER)&&(n.push(en.SUBSCRIPTION_FILTER_DEFINITION),n.push(en.SUBSCRIPTION_FILTER_CONDITION_DEFINITION),n.push(en.SUBSCRIPTION_FIELD_CONDITION_DEFINITION),n.push(en.SUBSCRIPTION_FILTER_VALUE_DEFINITION)),this.referencedDirectiveNames.has(ne.CONFIGURE_DESCRIPTION)&&n.push(en.CONFIGURE_DESCRIPTION_DEFINITION),this.referencedDirectiveNames.has(ne.CONFIGURE_CHILD_DESCRIPTIONS)&&n.push(en.CONFIGURE_CHILD_DESCRIPTIONS_DEFINITION);for(let o of this.customDirectiveDefinitions.values())n.push(o);this.schemaData.operationTypes.size>0&&n.push(this.getSchemaNodeByData(this.schemaData));for(let o of this.invalidConfigureDescriptionNodeDatas)o.description||this.errors.push((0,pe.configureDescriptionNoDescriptionError)((0,Ge.kindToTypeString)(o.kind),o.name));this.evaluateExternalKeyFields();for(let[o,c]of this.parentDefinitionDataByTypeName)switch(c.kind){case oe.Kind.ENUM_TYPE_DEFINITION:if(c.enumValueDataByValueName.size<1){this.errors.push((0,pe.noDefinedEnumValuesError)(o));break}n.push(this.getEnumNodeByData(c));break;case oe.Kind.INPUT_OBJECT_TYPE_DEFINITION:if(c.inputValueDataByValueName.size<1){this.errors.push((0,pe.noInputValueDefinitionsError)(o));break}n.push(this.getInputObjectNodeByData(c));break;case oe.Kind.INTERFACE_TYPE_DEFINITION:case oe.Kind.OBJECT_TYPE_DEFINITION:let l=this.entityDataByTypeName.has(o),p=this.operationTypeNodeByTypeName.get(o),T=c.kind===oe.Kind.OBJECT_TYPE_DEFINITION;if(this.isSubgraphVersionTwo&&c.extensionType===$a.ExtensionType.EXTENDS&&(c.extensionType=$a.ExtensionType.NONE),p&&(c.fieldDataByFieldName.delete(ne.SERVICE_FIELD),c.fieldDataByFieldName.delete(ne.ENTITIES_FIELD)),(0,gn.removeInheritableDirectivesFromObjectParent)(c),this.parentsWithChildArguments.has(o)||!T){let U=[];for(let[K,J]of c.fieldDataByFieldName)!T&&((a=J.externalFieldDataBySubgraphName.get(this.subgraphName))!=null&&a.isDefinedExternal)&&U.push(K),this.validateArguments(J,`${o}.${K}`);U.length>0&&(this.isSubgraphVersionTwo?this.errors.push((0,pe.externalInterfaceFieldsError)(o,U)):this.warnings.push((0,Ss.externalInterfaceFieldsWarning)(this.subgraphName,o,U)))}let y=(0,gn.getParentTypeName)(c),g=(0,Ge.getValueOrDefault)(this.configurationDataByTypeName,y,()=>(0,Pp.newConfigurationData)(l,o)),_=this.entityInterfaceDataByTypeName.get(o);if(_){_.fieldDatas=(0,ar.fieldDatasToSimpleFieldDatas)(c.fieldDataByFieldName.values());let U=this.concreteTypeNamesByAbstractTypeName.get(o);U&&(0,Ge.addIterableValuesToSet)(U,_.concreteTypeNames),g.isInterfaceObject=_.isInterfaceObject,g.entityInterfaceConcreteTypeNames=_.concreteTypeNames}let F=this.eventsConfigurations.get(y);F&&(g.events=F),this.addFieldNamesToConfigurationData(c.fieldDataByFieldName,g),this.validateInterfaceImplementations(c),n.push(this.getCompositeOutputNodeByData(c)),c.fieldDataByFieldName.size<1&&!(0,ti.isNodeQuery)(o,p)&&this.errors.push((0,pe.noFieldDefinitionsError)((0,Ge.kindToTypeString)(c.kind),o));break;case oe.Kind.SCALAR_TYPE_DEFINITION:if(c.extensionType===$a.ExtensionType.REAL){this.errors.push((0,pe.noBaseScalarDefinitionError)(o));break}n.push(this.getScalarNodeByData(c));break;case oe.Kind.UNION_TYPE_DEFINITION:n.push(this.getUnionNodeByData(c)),this.validateUnionMembers(c);break;default:throw(0,pe.unexpectedKindFatalError)(o)}this.addValidConditionalFieldSetConfigurations(),this.addValidKeyFieldSetConfigurations();for(let o of Object.values(oe.OperationTypeNode)){let c=this.schemaData.operationTypes.get(o),l=(0,Ge.getOrThrowError)(Dn.operationTypeNodeToDefaultType,o,ne.OPERATION_TO_DEFAULT),p=c?(0,ir.getTypeNodeNamedTypeName)(c.type):l;if(en.BASE_SCALARS.has(p)&&this.referencedTypeNames.add(p),p!==l&&this.parentDefinitionDataByTypeName.has(l)){this.errors.push((0,pe.invalidRootTypeDefinitionError)(o,p,l));continue}let T=this.parentDefinitionDataByTypeName.get(p);if(c){if(!T)continue;this.operationTypeNodeByTypeName.set(p,o)}if(!T)continue;let y=this.configurationDataByTypeName.get(l);y&&(y.isRootNode=!0,y.typeName=l),T.kind!==oe.Kind.OBJECT_TYPE_DEFINITION&&this.errors.push((0,pe.operationDefinitionError)(p,o,T.kind))}for(let o of this.referencedTypeNames){let c=this.parentDefinitionDataByTypeName.get(o);if(c){if(c.kind!==oe.Kind.INTERFACE_TYPE_DEFINITION)continue;let l=this.concreteTypeNamesByAbstractTypeName.get(o);(!l||l.size<0)&&this.warnings.push((0,Ss.unimplementedInterfaceOutputTypeWarning)(this.subgraphName,o));continue}this.entityDataByTypeName.has(o)||this.errors.push((0,pe.undefinedTypeError)(o))}let r=new Map;for(let o of this.directiveDefinitionByDirectiveName.values()){let c=(0,Dn.extractExecutableDirectiveLocations)(o.locations,new Set);c.size<1||this.addPersistedDirectiveDefinitionDataByNode(r,o,c)}this.isSubgraphEventDrivenGraph=this.edfsDirectiveReferences.size>0,this.isSubgraphEventDrivenGraph&&this.validateEventDrivenSubgraph(n);for(let o of this.unvalidatedExternalFieldCoords)this.isSubgraphVersionTwo?this.errors.push((0,pe.invalidExternalDirectiveError)(o)):this.warnings.push((0,Ss.invalidExternalFieldWarning)(o,this.subgraphName));if(this.errors.length>0)return{success:!1,errors:this.errors,warnings:this.warnings};let i={kind:oe.Kind.DOCUMENT,definitions:n};return{authorizationDataByParentTypeName:this.authorizationDataByParentTypeName,concreteTypeNamesByAbstractTypeName:this.concreteTypeNamesByAbstractTypeName,conditionalFieldDataByCoordinates:this.conditionalFieldDataByCoords,configurationDataByTypeName:this.configurationDataByTypeName,entityDataByTypeName:this.entityDataByTypeName,entityInterfaces:this.entityInterfaceDataByTypeName,fieldCoordsByNamedTypeName:this.fieldCoordsByNamedTypeName,isEventDrivenGraph:this.isSubgraphEventDrivenGraph,isVersionTwo:this.isSubgraphVersionTwo,keyFieldNamesByParentTypeName:this.keyFieldNamesByParentTypeName,keyFieldSetsByEntityTypeNameByKeyFieldCoords:this.keyFieldSetsByEntityTypeNameByFieldCoords,operationTypes:this.operationTypeNodeByTypeName,originalTypeNameByRenamedTypeName:this.originalTypeNameByRenamedTypeName,overridesByTargetSubgraphName:this.overridesByTargetSubgraphName,parentDefinitionDataByTypeName:this.parentDefinitionDataByTypeName,persistedDirectiveDefinitionDataByDirectiveName:r,subgraphAST:i,subgraphString:(0,oe.print)(i),schema:(0,Pce.buildASTSchema)(i,{assumeValid:!0,assumeValidSDL:!0}),success:!0,warnings:this.warnings}}};sc.NormalizationFactory=wp;function Bce(e){let t=new Map,n=new Map,r=new Map,i=new Map,a=new Map,o=new Map,c=new Set,l=new Map,p=new Set,T=new Set,y=[],g=new Set,_=new Map,F=[],U=[];for(let ee of e)ee.name&&(0,wce.recordSubgraphName)(ee.name,p,T);let K=new LO.Graph;for(let ee=0;ee0&&F.push(...de.warnings),!de.success){U.push((0,pe.subgraphValidationError)(Te,de.errors));continue}if(!de){U.push((0,pe.subgraphValidationError)(Te,[pe.subgraphValidationFailureError]));continue}l.set(Te,de.parentDefinitionDataByTypeName);for(let we of de.authorizationDataByParentTypeName.values())(0,ar.upsertAuthorizationData)(t,we,g);for(let[we,qe]of de.fieldCoordsByNamedTypeName)(0,Ge.addIterableValuesToSet)(qe,(0,Ge.getValueOrDefault)(_,we,()=>new Set));for(let[we,qe]of de.concreteTypeNamesByAbstractTypeName){let et=n.get(we);if(!et){n.set(we,new Set(qe));continue}(0,Ge.addIterableValuesToSet)(qe,et)}for(let[we,qe]of de.entityDataByTypeName){let et=qe.keyFieldSetDatasBySubgraphName.get(Te);et&&(0,ar.upsertEntityData)({entityDataByTypeName:r,keyFieldSetDataByFieldSet:et,typeName:we,subgraphName:Te})}if(W.name&&i.set(Te,{conditionalFieldDataByCoordinates:de.conditionalFieldDataByCoordinates,configurationDataByTypeName:de.configurationDataByTypeName,definitions:de.subgraphAST,entityInterfaces:de.entityInterfaces,isVersionTwo:de.isVersionTwo,keyFieldNamesByParentTypeName:de.keyFieldNamesByParentTypeName,name:Te,operationTypes:de.operationTypes,overriddenFieldNamesByParentTypeName:new Map,parentDefinitionDataByTypeName:de.parentDefinitionDataByTypeName,persistedDirectiveDefinitionDataByDirectiveName:de.persistedDirectiveDefinitionDataByDirectiveName,schema:de.schema,url:W.url}),!(de.overridesByTargetSubgraphName.size<1))for(let[we,qe]of de.overridesByTargetSubgraphName){let et=p.has(we);for(let[X,ve]of qe){let gt=de.originalTypeNameByRenamedTypeName.get(X)||X;if(!et)F.push((0,Ss.invalidOverrideTargetSubgraphNameWarning)(we,gt,[...ve],W.name));else{let Ht=(0,Ge.getValueOrDefault)(a,we,()=>new Map),zt=(0,Ge.getValueOrDefault)(Ht,X,()=>new Set(ve));(0,Ge.addIterableValuesToSet)(ve,zt)}for(let Ht of ve){let zt=`${gt}.${Ht}`,bn=o.get(zt);if(!bn){o.set(zt,[Te]);continue}bn.push(Te),c.add(zt)}}}}let J=[];if(g.size>0&&J.push((0,pe.orScopesLimitError)(en.MAX_OR_SCOPES,[...g])),(y.length>0||T.size>0)&&J.push((0,pe.invalidSubgraphNamesError)([...T],y)),c.size>0){let ee=[];for(let W of c){let Te=(0,Ge.getOrThrowError)(o,W,"overrideSourceSubgraphNamesByFieldPath");ee.push((0,pe.duplicateOverriddenFieldErrorMessage)(W,Te))}J.push((0,pe.duplicateOverriddenFieldsError)(ee))}if(J.push(...U),J.length>0)return{errors:J,success:!1,warnings:F};for(let[ee,W]of a){let Te=(0,Ge.getOrThrowError)(i,ee,"internalSubgraphBySubgraphName");Te.overriddenFieldNamesByParentTypeName=W;for(let[de,we]of W){let qe=Te.configurationDataByTypeName.get(de);qe&&((0,ar.subtractSet)(we,qe.fieldNames),qe.fieldNames.size<1&&Te.configurationDataByTypeName.delete(de))}}return{authorizationDataByParentTypeName:t,concreteTypeNamesByAbstractTypeName:n,entityDataByTypeName:r,fieldCoordsByNamedTypeName:_,internalSubgraphBySubgraphName:i,internalGraph:K,success:!0,warnings:F}}});var lE=w(cc=>{"use strict";f();N();m();Object.defineProperty(cc,"__esModule",{value:!0});cc.DivergentType=void 0;cc.getLeastRestrictiveMergedTypeNode=kce;cc.getMostRestrictiveMergedTypeNode=Mce;cc.renameNamedTypeName=xce;var oc=Ae(),_q=sa(),Uce=Jo(),gq=Jr(),vq=nl(),uc;(function(e){e[e.NONE=0]="NONE",e[e.CURRENT=1]="CURRENT",e[e.OTHER=2]="OTHER"})(uc||(cc.DivergentType=uc={}));function Sq(e,t,n,r,i){t=(0,Uce.getMutableTypeNode)(t,n,i);let a={kind:e.kind},o=uc.NONE,c=a;for(let l=0;l{"use strict";f();N();m();Object.defineProperty(UO,"__esModule",{value:!0});UO.renameRootTypes=jce;var qce=Ae(),BO=Jr(),Vce=lE(),au=lr(),lc=Hr();function jce(e,t){let n,r=!1,i;(0,qce.visit)(t.definitions,{FieldDefinition:{enter(a){let o=a.name.value;if(r&&(o===au.SERVICE_FIELD||o===au.ENTITIES_FIELD))return n.fieldDataByFieldName.delete(o),!1;let c=n.name,l=(0,lc.getOrThrowError)(n.fieldDataByFieldName,o,`${c}.fieldDataByFieldName`),p=t.operationTypes.get(l.namedTypeName);if(p){let T=(0,lc.getOrThrowError)(BO.operationTypeNodeToDefaultType,p,au.OPERATION_TO_DEFAULT);l.namedTypeName!==T&&(0,Vce.renameNamedTypeName)(l,T,e.errors)}return i!=null&&i.has(o)&&l.isShareableBySubgraphName.delete(t.name),!1}},InterfaceTypeDefinition:{enter(a){let o=a.name.value;if(!e.entityInterfaceFederationDataByTypeName.get(o))return!1;n=(0,lc.getOrThrowError)(t.parentDefinitionDataByTypeName,o,au.PARENT_DEFINITION_DATA)},leave(){n=void 0}},ObjectTypeDefinition:{enter(a){let o=a.name.value,c=t.operationTypes.get(o),l=c?(0,lc.getOrThrowError)(BO.operationTypeNodeToDefaultType,c,au.OPERATION_TO_DEFAULT):o;n=(0,lc.getOrThrowError)(t.parentDefinitionDataByTypeName,o,au.PARENT_DEFINITION_DATA),r=n.isRootType,!e.entityInterfaceFederationDataByTypeName.get(o)&&(e.addValidPrimaryKeyTargetsToEntityData(o),i=t.overriddenFieldNamesByParentTypeName.get(l),o!==l&&(n.name=l,t.parentDefinitionDataByTypeName.set(l,n),t.parentDefinitionDataByTypeName.delete(o)))},leave(){n=void 0,r=!1,i=void 0}},ObjectTypeExtension:{enter(a){let o=a.name.value,c=t.operationTypes.get(o),l=c?(0,lc.getOrThrowError)(BO.operationTypeNodeToDefaultType,c,au.OPERATION_TO_DEFAULT):o;n=(0,lc.getOrThrowError)(t.parentDefinitionDataByTypeName,o,au.PARENT_DEFINITION_DATA),r=n.isRootType,e.addValidPrimaryKeyTargetsToEntityData(o),i=t.overriddenFieldNamesByParentTypeName.get(o),o!==l&&(n.name=l,t.parentDefinitionDataByTypeName.set(l,n),t.parentDefinitionDataByTypeName.delete(o))},leave(){n=void 0,r=!1,i=void 0}}})}});var Oq=w((wl,Lp)=>{"use strict";f();N();m();(function(){var e,t="4.17.21",n=200,r="Unsupported core-js use. Try https://npms.io/search?q=ponyfill.",i="Expected a function",a="Invalid `variable` option passed into `_.template`",o="__lodash_hash_undefined__",c=500,l="__lodash_placeholder__",p=1,T=2,y=4,g=1,_=2,F=1,U=2,K=4,J=8,ee=16,W=32,Te=64,de=128,we=256,qe=512,et=30,X="...",ve=800,gt=16,Ht=1,zt=2,bn=3,Vt=1/0,dn=9007199254740991,Rr=17976931348623157e292,Fr=NaN,kn=4294967295,$t=kn-1,An=kn>>>1,se=[["ary",de],["bind",F],["bindKey",U],["curry",J],["curryRight",ee],["flip",qe],["partial",W],["partialRight",Te],["rearg",we]],De="[object Arguments]",_e="[object Array]",Le="[object AsyncFunction]",_t="[object Boolean]",Y="[object Date]",ae="[object DOMException]",Me="[object Error]",Qe="[object Function]",Lt="[object GeneratorFunction]",tt="[object Map]",bt="[object Number]",za="[object Null]",qr="[object Object]",Wa="[object Promise]",Ic="[object Proxy]",ya="[object RegExp]",mr="[object Set]",ri="[object String]",Mt="[object Symbol]",Nr="[object Undefined]",lu="[object WeakMap]",Ia="[object WeakSet]",du="[object ArrayBuffer]",A="[object DataView]",h="[object Float32Array]",I="[object Float64Array]",C="[object Int8Array]",G="[object Int16Array]",te="[object Int32Array]",le="[object Uint8Array]",pt="[object Uint8ClampedArray]",pn="[object Uint16Array]",tn="[object Uint32Array]",En=/\b__p \+= '';/g,Wt=/\b(__p \+=) '' \+/g,zV=/(__e\(.*?\)|\b__t\)) \+\n'';/g,AD=/&(?:amp|lt|gt|quot|#39);/g,RD=/[&<>"']/g,WV=RegExp(AD.source),XV=RegExp(RD.source),ZV=/<%-([\s\S]+?)%>/g,ej=/<%([\s\S]+?)%>/g,FD=/<%=([\s\S]+?)%>/g,tj=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,nj=/^\w*$/,rj=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,GE=/[\\^$.*+?()[\]{}|]/g,ij=RegExp(GE.source),$E=/^\s+/,aj=/\s/,sj=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/,oj=/\{\n\/\* \[wrapped with (.+)\] \*/,uj=/,? & /,cj=/[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g,lj=/[()=,{}\[\]\/\s]/,dj=/\\(\\)?/g,pj=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,PD=/\w*$/,fj=/^[-+]0x[0-9a-f]+$/i,mj=/^0b[01]+$/i,Nj=/^\[object .+?Constructor\]$/,Tj=/^0o[0-7]+$/i,Ej=/^(?:0|[1-9]\d*)$/,hj=/[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g,Zp=/($^)/,yj=/['\n\r\u2028\u2029\\]/g,ef="\\ud800-\\udfff",Ij="\\u0300-\\u036f",gj="\\ufe20-\\ufe2f",_j="\\u20d0-\\u20ff",wD=Ij+gj+_j,LD="\\u2700-\\u27bf",CD="a-z\\xdf-\\xf6\\xf8-\\xff",vj="\\xac\\xb1\\xd7\\xf7",Sj="\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf",Oj="\\u2000-\\u206f",Dj=" \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000",BD="A-Z\\xc0-\\xd6\\xd8-\\xde",UD="\\ufe0e\\ufe0f",kD=vj+Sj+Oj+Dj,QE="['\u2019]",bj="["+ef+"]",MD="["+kD+"]",tf="["+wD+"]",xD="\\d+",Aj="["+LD+"]",qD="["+CD+"]",VD="[^"+ef+kD+xD+LD+CD+BD+"]",YE="\\ud83c[\\udffb-\\udfff]",Rj="(?:"+tf+"|"+YE+")",jD="[^"+ef+"]",JE="(?:\\ud83c[\\udde6-\\uddff]){2}",HE="[\\ud800-\\udbff][\\udc00-\\udfff]",gc="["+BD+"]",KD="\\u200d",GD="(?:"+qD+"|"+VD+")",Fj="(?:"+gc+"|"+VD+")",$D="(?:"+QE+"(?:d|ll|m|re|s|t|ve))?",QD="(?:"+QE+"(?:D|LL|M|RE|S|T|VE))?",YD=Rj+"?",JD="["+UD+"]?",Pj="(?:"+KD+"(?:"+[jD,JE,HE].join("|")+")"+JD+YD+")*",wj="\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])",Lj="\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])",HD=JD+YD+Pj,Cj="(?:"+[Aj,JE,HE].join("|")+")"+HD,Bj="(?:"+[jD+tf+"?",tf,JE,HE,bj].join("|")+")",Uj=RegExp(QE,"g"),kj=RegExp(tf,"g"),zE=RegExp(YE+"(?="+YE+")|"+Bj+HD,"g"),Mj=RegExp([gc+"?"+qD+"+"+$D+"(?="+[MD,gc,"$"].join("|")+")",Fj+"+"+QD+"(?="+[MD,gc+GD,"$"].join("|")+")",gc+"?"+GD+"+"+$D,gc+"+"+QD,Lj,wj,xD,Cj].join("|"),"g"),xj=RegExp("["+KD+ef+wD+UD+"]"),qj=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,Vj=["Array","Buffer","DataView","Date","Error","Float32Array","Float64Array","Function","Int8Array","Int16Array","Int32Array","Map","Math","Object","Promise","RegExp","Set","String","Symbol","TypeError","Uint8Array","Uint8ClampedArray","Uint16Array","Uint32Array","WeakMap","_","clearTimeout","isFinite","parseInt","setTimeout"],jj=-1,Nn={};Nn[h]=Nn[I]=Nn[C]=Nn[G]=Nn[te]=Nn[le]=Nn[pt]=Nn[pn]=Nn[tn]=!0,Nn[De]=Nn[_e]=Nn[du]=Nn[_t]=Nn[A]=Nn[Y]=Nn[Me]=Nn[Qe]=Nn[tt]=Nn[bt]=Nn[qr]=Nn[ya]=Nn[mr]=Nn[ri]=Nn[lu]=!1;var fn={};fn[De]=fn[_e]=fn[du]=fn[A]=fn[_t]=fn[Y]=fn[h]=fn[I]=fn[C]=fn[G]=fn[te]=fn[tt]=fn[bt]=fn[qr]=fn[ya]=fn[mr]=fn[ri]=fn[Mt]=fn[le]=fn[pt]=fn[pn]=fn[tn]=!0,fn[Me]=fn[Qe]=fn[lu]=!1;var Kj={\u00C0:"A",\u00C1:"A",\u00C2:"A",\u00C3:"A",\u00C4:"A",\u00C5:"A",\u00E0:"a",\u00E1:"a",\u00E2:"a",\u00E3:"a",\u00E4:"a",\u00E5:"a",\u00C7:"C",\u00E7:"c",\u00D0:"D",\u00F0:"d",\u00C8:"E",\u00C9:"E",\u00CA:"E",\u00CB:"E",\u00E8:"e",\u00E9:"e",\u00EA:"e",\u00EB:"e",\u00CC:"I",\u00CD:"I",\u00CE:"I",\u00CF:"I",\u00EC:"i",\u00ED:"i",\u00EE:"i",\u00EF:"i",\u00D1:"N",\u00F1:"n",\u00D2:"O",\u00D3:"O",\u00D4:"O",\u00D5:"O",\u00D6:"O",\u00D8:"O",\u00F2:"o",\u00F3:"o",\u00F4:"o",\u00F5:"o",\u00F6:"o",\u00F8:"o",\u00D9:"U",\u00DA:"U",\u00DB:"U",\u00DC:"U",\u00F9:"u",\u00FA:"u",\u00FB:"u",\u00FC:"u",\u00DD:"Y",\u00FD:"y",\u00FF:"y",\u00C6:"Ae",\u00E6:"ae",\u00DE:"Th",\u00FE:"th",\u00DF:"ss",\u0100:"A",\u0102:"A",\u0104:"A",\u0101:"a",\u0103:"a",\u0105:"a",\u0106:"C",\u0108:"C",\u010A:"C",\u010C:"C",\u0107:"c",\u0109:"c",\u010B:"c",\u010D:"c",\u010E:"D",\u0110:"D",\u010F:"d",\u0111:"d",\u0112:"E",\u0114:"E",\u0116:"E",\u0118:"E",\u011A:"E",\u0113:"e",\u0115:"e",\u0117:"e",\u0119:"e",\u011B:"e",\u011C:"G",\u011E:"G",\u0120:"G",\u0122:"G",\u011D:"g",\u011F:"g",\u0121:"g",\u0123:"g",\u0124:"H",\u0126:"H",\u0125:"h",\u0127:"h",\u0128:"I",\u012A:"I",\u012C:"I",\u012E:"I",\u0130:"I",\u0129:"i",\u012B:"i",\u012D:"i",\u012F:"i",\u0131:"i",\u0134:"J",\u0135:"j",\u0136:"K",\u0137:"k",\u0138:"k",\u0139:"L",\u013B:"L",\u013D:"L",\u013F:"L",\u0141:"L",\u013A:"l",\u013C:"l",\u013E:"l",\u0140:"l",\u0142:"l",\u0143:"N",\u0145:"N",\u0147:"N",\u014A:"N",\u0144:"n",\u0146:"n",\u0148:"n",\u014B:"n",\u014C:"O",\u014E:"O",\u0150:"O",\u014D:"o",\u014F:"o",\u0151:"o",\u0154:"R",\u0156:"R",\u0158:"R",\u0155:"r",\u0157:"r",\u0159:"r",\u015A:"S",\u015C:"S",\u015E:"S",\u0160:"S",\u015B:"s",\u015D:"s",\u015F:"s",\u0161:"s",\u0162:"T",\u0164:"T",\u0166:"T",\u0163:"t",\u0165:"t",\u0167:"t",\u0168:"U",\u016A:"U",\u016C:"U",\u016E:"U",\u0170:"U",\u0172:"U",\u0169:"u",\u016B:"u",\u016D:"u",\u016F:"u",\u0171:"u",\u0173:"u",\u0174:"W",\u0175:"w",\u0176:"Y",\u0177:"y",\u0178:"Y",\u0179:"Z",\u017B:"Z",\u017D:"Z",\u017A:"z",\u017C:"z",\u017E:"z",\u0132:"IJ",\u0133:"ij",\u0152:"Oe",\u0153:"oe",\u0149:"'n",\u017F:"s"},Gj={"&":"&","<":"<",">":">",'"':""","'":"'"},$j={"&":"&","<":"<",">":">",""":'"',"'":"'"},Qj={"\\":"\\","'":"'","\n":"n","\r":"r","\u2028":"u2028","\u2029":"u2029"},Yj=parseFloat,Jj=parseInt,zD=typeof global=="object"&&global&&global.Object===Object&&global,Hj=typeof self=="object"&&self&&self.Object===Object&&self,sr=zD||Hj||Function("return this")(),WE=typeof wl=="object"&&wl&&!wl.nodeType&&wl,pu=WE&&typeof Lp=="object"&&Lp&&!Lp.nodeType&&Lp,WD=pu&&pu.exports===WE,XE=WD&&zD.process,Ti=function(){try{var $=pu&&pu.require&&pu.require("util").types;return $||XE&&XE.binding&&XE.binding("util")}catch(ce){}}(),XD=Ti&&Ti.isArrayBuffer,ZD=Ti&&Ti.isDate,eb=Ti&&Ti.isMap,tb=Ti&&Ti.isRegExp,nb=Ti&&Ti.isSet,rb=Ti&&Ti.isTypedArray;function ii($,ce,re){switch(re.length){case 0:return $.call(ce);case 1:return $.call(ce,re[0]);case 2:return $.call(ce,re[0],re[1]);case 3:return $.call(ce,re[0],re[1],re[2])}return $.apply(ce,re)}function zj($,ce,re,Ce){for(var ot=-1,jt=$==null?0:$.length;++ot-1}function ZE($,ce,re){for(var Ce=-1,ot=$==null?0:$.length;++Ce-1;);return re}function db($,ce){for(var re=$.length;re--&&_c(ce,$[re],0)>-1;);return re}function a1($,ce){for(var re=$.length,Ce=0;re--;)$[re]===ce&&++Ce;return Ce}var s1=rh(Kj),o1=rh(Gj);function u1($){return"\\"+Qj[$]}function c1($,ce){return $==null?e:$[ce]}function vc($){return xj.test($)}function l1($){return qj.test($)}function d1($){for(var ce,re=[];!(ce=$.next()).done;)re.push(ce.value);return re}function oh($){var ce=-1,re=Array($.size);return $.forEach(function(Ce,ot){re[++ce]=[ot,Ce]}),re}function pb($,ce){return function(re){return $(ce(re))}}function Ao($,ce){for(var re=-1,Ce=$.length,ot=0,jt=[];++re-1}function X1(s,u){var d=this.__data__,E=If(d,s);return E<0?(++this.size,d.push([s,u])):d[E][1]=u,this}Xa.prototype.clear=J1,Xa.prototype.delete=H1,Xa.prototype.get=z1,Xa.prototype.has=W1,Xa.prototype.set=X1;function Za(s){var u=-1,d=s==null?0:s.length;for(this.clear();++u=u?s:u)),s}function Ii(s,u,d,E,S,L){var k,j=u&p,H=u&T,fe=u&y;if(d&&(k=S?d(s,E,S,L):d(s)),k!==e)return k;if(!vn(s))return s;var me=lt(s);if(me){if(k=nG(s),!j)return Vr(s,k)}else{var Ee=hr(s),be=Ee==Qe||Ee==Lt;if(Bo(s))return Jb(s,j);if(Ee==qr||Ee==De||be&&!S){if(k=H||be?{}:f0(s),!j)return H?$K(s,mK(k,s)):GK(s,Sb(k,s))}else{if(!fn[Ee])return S?s:{};k=rG(s,Ee,j)}}L||(L=new Ji);var Ve=L.get(s);if(Ve)return Ve;L.set(s,k),j0(s)?s.forEach(function(Xe){k.add(Ii(Xe,u,d,Xe,s,L))}):q0(s)&&s.forEach(function(Xe,vt){k.set(vt,Ii(Xe,u,d,vt,s,L))});var We=fe?H?Lh:wh:H?Kr:or,Et=me?e:We(s);return Ei(Et||s,function(Xe,vt){Et&&(vt=Xe,Xe=s[vt]),Jl(k,vt,Ii(Xe,u,d,vt,s,L))}),k}function NK(s){var u=or(s);return function(d){return Ob(d,s,u)}}function Ob(s,u,d){var E=d.length;if(s==null)return!E;for(s=on(s);E--;){var S=d[E],L=u[S],k=s[S];if(k===e&&!(S in s)||!L(k))return!1}return!0}function Db(s,u,d){if(typeof s!="function")throw new hi(i);return td(function(){s.apply(e,d)},u)}function Hl(s,u,d,E){var S=-1,L=nf,k=!0,j=s.length,H=[],fe=u.length;if(!j)return H;d&&(u=hn(u,ai(d))),E?(L=ZE,k=!1):u.length>=n&&(L=jl,k=!1,u=new Nu(u));e:for(;++SS?0:S+d),E=E===e||E>S?S:ft(E),E<0&&(E+=S),E=d>E?0:G0(E);d0&&d(j)?u>1?Tr(j,u-1,d,E,S):bo(S,j):E||(S[S.length]=j)}return S}var mh=e0(),Rb=e0(!0);function ga(s,u){return s&&mh(s,u,or)}function Nh(s,u){return s&&Rb(s,u,or)}function _f(s,u){return Do(u,function(d){return is(s[d])})}function Eu(s,u){u=Lo(u,s);for(var d=0,E=u.length;s!=null&&du}function hK(s,u){return s!=null&&Xt.call(s,u)}function yK(s,u){return s!=null&&u in on(s)}function IK(s,u,d){return s>=Er(u,d)&&s=120&&me.length>=120)?new Nu(k&&me):e}me=s[0];var Ee=-1,be=j[0];e:for(;++Ee-1;)j!==s&&ff.call(j,H,1),ff.call(s,H,1);return s}function qb(s,u){for(var d=s?u.length:0,E=d-1;d--;){var S=u[d];if(d==E||S!==L){var L=S;rs(S)?ff.call(s,S,1):Oh(s,S)}}return s}function _h(s,u){return s+Tf(Ib()*(u-s+1))}function LK(s,u,d,E){for(var S=-1,L=Hn(Nf((u-s)/(d||1)),0),k=re(L);L--;)k[E?L:++S]=s,s+=d;return k}function vh(s,u){var d="";if(!s||u<1||u>dn)return d;do u%2&&(d+=s),u=Tf(u/2),u&&(s+=s);while(u);return d}function yt(s,u){return qh(T0(s,u,Gr),s+"")}function CK(s){return vb(Lc(s))}function BK(s,u){var d=Lc(s);return Lf(d,Tu(u,0,d.length))}function Xl(s,u,d,E){if(!vn(s))return s;u=Lo(u,s);for(var S=-1,L=u.length,k=L-1,j=s;j!=null&&++SS?0:S+u),d=d>S?S:d,d<0&&(d+=S),S=u>d?0:d-u>>>0,u>>>=0;for(var L=re(S);++E>>1,k=s[L];k!==null&&!oi(k)&&(d?k<=u:k=n){var fe=u?null:HK(s);if(fe)return af(fe);k=!1,S=jl,H=new Nu}else H=u?[]:j;e:for(;++E=E?s:gi(s,u,d)}var Yb=D1||function(s){return sr.clearTimeout(s)};function Jb(s,u){if(u)return s.slice();var d=s.length,E=Nb?Nb(d):new s.constructor(d);return s.copy(E),E}function Rh(s){var u=new s.constructor(s.byteLength);return new df(u).set(new df(s)),u}function qK(s,u){var d=u?Rh(s.buffer):s.buffer;return new s.constructor(d,s.byteOffset,s.byteLength)}function VK(s){var u=new s.constructor(s.source,PD.exec(s));return u.lastIndex=s.lastIndex,u}function jK(s){return Yl?on(Yl.call(s)):{}}function Hb(s,u){var d=u?Rh(s.buffer):s.buffer;return new s.constructor(d,s.byteOffset,s.length)}function zb(s,u){if(s!==u){var d=s!==e,E=s===null,S=s===s,L=oi(s),k=u!==e,j=u===null,H=u===u,fe=oi(u);if(!j&&!fe&&!L&&s>u||L&&k&&H&&!j&&!fe||E&&k&&H||!d&&H||!S)return 1;if(!E&&!L&&!fe&&s=j)return H;var fe=d[E];return H*(fe=="desc"?-1:1)}}return s.index-u.index}function Wb(s,u,d,E){for(var S=-1,L=s.length,k=d.length,j=-1,H=u.length,fe=Hn(L-k,0),me=re(H+fe),Ee=!E;++j1?d[S-1]:e,k=S>2?d[2]:e;for(L=s.length>3&&typeof L=="function"?(S--,L):e,k&&wr(d[0],d[1],k)&&(L=S<3?e:L,S=1),u=on(u);++E-1?S[L?u[k]:k]:e}}function r0(s){return ns(function(u){var d=u.length,E=d,S=yi.prototype.thru;for(s&&u.reverse();E--;){var L=u[E];if(typeof L!="function")throw new hi(i);if(S&&!k&&Pf(L)=="wrapper")var k=new yi([],!0)}for(E=k?E:d;++E1&&At.reverse(),me&&Hj))return!1;var fe=L.get(s),me=L.get(u);if(fe&&me)return fe==u&&me==s;var Ee=-1,be=!0,Ve=d&_?new Nu:e;for(L.set(s,u),L.set(u,s);++Ee1?"& ":"")+u[E],u=u.join(d>2?", ":" "),s.replace(sj,`{ +`+r;return{outputEnd:r,outputStart:n,pathNodes:t}}function hq({outputEnd:e,outputStart:t,pathNodes:n},r){return t+ac.LITERAL_SPACE.repeat(n.length+1)+Dce(r,n.length)+e}function bce(e,t){return t?e?`${t}${e}`:t:e}function Ace({entityAncestorData:e,errors:t,nodeResolutionDataByFieldPath:n,pathFromRoot:r,rootFieldData:i,unresolvableFieldPaths:a}){let o=[];for(let c of a){let l=(0,Nq.getOrThrowError)(n,c,"nodeResolutionDataByFieldPath"),p=new Map;for(let[g,_]of l.fieldDataByFieldName)l.resolvedFieldNames.has(g)||p.set(g,_);let f=bce(c,r),y=Eq(f);for(let[g,_]of p)o.push({fieldName:g,selectionSet:hq(y,_),subgraphNames:_.subgraphNames,typeName:l.typeName})}for(let c of o)t.push((0,mq.unresolvablePathError)(c,Tq({rootFieldData:i,unresolvableFieldData:c,entityAncestorData:e})))}});var wO=w(uE=>{"use strict";m();T();N();Object.defineProperty(uE,"__esModule",{value:!0});uE.Graph=void 0;var Fl=bO(),Pl=RO(),yq=lr(),kr=Hr(),FO=class{constructor(){v(this,"edgeId",-1);v(this,"entityDataNodes",new Map);v(this,"entityNodeNamesBySharedFieldPath",new Map);v(this,"nodeByNodeName",new Map);v(this,"nodesByTypeName",new Map);v(this,"rootNodeByRootTypeName",new Map);v(this,"subgraphName",yq.NOT_APPLICABLE);v(this,"resolvableFieldNamesByRelativeFieldPathByEntityNodeName",new Map);v(this,"nodeResolutionDataByFieldPath",new Map);v(this,"unresolvableFieldPaths",new Set);v(this,"failureResultByEntityNodeName",new Map);v(this,"walkerIndex",-1)}getRootNode(t){return(0,kr.getValueOrDefault)(this.rootNodeByRootTypeName,t,()=>new Fl.RootNode(t))}addOrUpdateNode(t,n){let r=`${this.subgraphName}.${t}`,i=this.nodeByNodeName.get(r);if(i)return i.isAbstract||(i.isAbstract=!!(n!=null&&n.isAbstract)),!i.isLeaf&&(n!=null&&n.isLeaf)&&(i.isLeaf=!0),i;let a=new Fl.GraphNode(this.subgraphName,t,n);return this.nodeByNodeName.set(r,a),(0,kr.getValueOrDefault)(this.nodesByTypeName,t,()=>[]).push(a),a}addEdge(t,n,r,i=!1){if(t.isRootNode){let c=new Fl.Edge(this.getNextEdgeId(),n,r);return(0,kr.getValueOrDefault)(t.headToShareableTailEdges,r,()=>[]).push(c),c}let a=t,o=new Fl.Edge(this.getNextEdgeId(),n,i?n.typeName:r,i);return a.headToTailEdges.set(r,o),o}addEntityDataNode(t){let n=this.entityDataNodes.get(t);if(n)return n;let r=new Fl.EntityDataNode(t);return this.entityDataNodes.set(t,r),r}getNextEdgeId(){return this.edgeId+=1}setNodeInaccessible(t){let n=this.nodesByTypeName.get(t);if(n)for(let r of n)r.isInaccessible=!0}initializeNode(t,n){let r=this.entityDataNodes.get(t);if(yq.ROOT_TYPE_NAMES.has(t)){let a=this.getRootNode(t);a.removeInaccessibleEdges(n),a.fieldDataByFieldName=n;return}let i=this.nodesByTypeName.get(t);if(i){for(let a of i)if(a.fieldDataByFieldName=n,a.handleInaccessibleEdges(),a.isLeaf=!1,!!r){a.hasEntitySiblings=!0;for(let o of a.satisfiedFieldSets){let c=r.targetSubgraphNamesByFieldSet.get(o);for(let l of c||[]){if(l===a.subgraphName)continue;let p=this.nodeByNodeName.get(`${l}.${a.typeName}`);p&&a.entityEdges.push(new Fl.Edge(this.getNextEdgeId(),p,""))}}}}}setSubgraphName(t){this.subgraphName=t}validateEntities(t,n){let r=new Map;for(let[i,a]of t){let o=a.size>1,c,l=o?new Map:void 0,p=new Set,f=new Map;for(let y of a){let g=this.nodeByNodeName.get(y);if(!g)throw new Error(`Fatal: Could not find entity node for "${y}".`);if(this.resolvableFieldNamesByRelativeFieldPathByEntityNodeName.get(y)){let J=this.failureResultByEntityNodeName.get(y);if(!J){c=void 0;break}if(!o)return J}let F=this.nodesByTypeName.get(g.typeName)||[],U=(0,kr.getValueOrDefault)(r,y,()=>o?f:new Map),K=new PO({interSubgraphNodes:F,entityNodeNamesBySharedFieldPath:U,originNode:g,resolvableFieldNamesByRelativeFieldPathByEntityNodeName:this.resolvableFieldNamesByRelativeFieldPathByEntityNodeName,walkerIndex:this.walkerIndex+=1,sharedResolvableFieldNamesByRelativeFieldPath:l,unresolvableSharedFieldPaths:p});if(K.visitEntityNode(g),K.unresolvableFieldPaths.size>0){if(o&&p.size<1){c=void 0;break}c={entityAncestorData:{fieldSetsByTargetSubgraphName:(0,kr.getOrThrowError)(this.entityDataNodes,g.typeName,"entityDataNodes").fieldSetsByTargetSubgraphName,subgraphName:g.subgraphName,typeName:g.typeName},nodeName:y,parentFieldPathForEntityReference:[i],success:!1,typeName:g.typeName,unresolvableFieldPaths:o?p:K.unresolvableFieldPaths},this.failureResultByEntityNodeName.set(y,c);continue}c=void 0;break}if(c)return o&&l&&this.resolvableFieldNamesByRelativeFieldPathByEntityNodeName.set(c.nodeName,l),c}if(r.size>0)for(let[i,a]of r){let o=this.validateEntities(a,n);if(!o.success){for(let[c,l]of t)if(l.has(i)){o.parentFieldPathForEntityReference.push(c);break}return o}}return{success:!0}}validate(){let t=[];for(let n of this.rootNodeByRootTypeName.values())e:for(let[r,i]of n.headToShareableTailEdges){for(let c of i){if(c.isInaccessible)continue e;this.walkerIndex+=1,this.visitEdge(c,`${n.typeName.toLowerCase()}`)}let a=(0,kr.getOrThrowError)(n.fieldDataByFieldName,r,"fieldDataByFieldName"),o=(0,Pl.newRootFieldData)(n.typeName,r,a.subgraphNames);if(this.unresolvableFieldPaths.size>0&&(0,Pl.generateResolvabilityErrors)({unresolvableFieldPaths:this.unresolvableFieldPaths,nodeResolutionDataByFieldPath:this.nodeResolutionDataByFieldPath,rootFieldData:o,errors:t}),this.entityNodeNamesBySharedFieldPath.size>0){let c=this.validateEntities(this.entityNodeNamesBySharedFieldPath,o);c.success||this.generateEntityResolvabilityErrors(c,o,t)}if(t.length>0)return t;this.entityNodeNamesBySharedFieldPath=new Map}return[]}visitEdge(t,n){return t.isInaccessible||t.node.isInaccessible?!1:(!(0,kr.add)(t.visitedIndices,this.walkerIndex)||t.node.isLeaf||(t.node.isAbstract?this.validateAbstractNode(t.node,`${n}.${t.edgeName}`):this.validateConcreteNode(t.node,`${n}.${t.edgeName}`)),!0)}validateConcreteNode(t,n){if(t.headToTailEdges.size<1)return;if(t.hasEntitySiblings){(0,kr.getValueOrDefault)(this.entityNodeNamesBySharedFieldPath,n,()=>new Set).add(t.nodeName);return}let r=(0,kr.getValueOrDefault)(this.nodeResolutionDataByFieldPath,n,()=>new Pl.NodeResolutionData(t.typeName,t.fieldDataByFieldName));for(let[i,a]of t.headToTailEdges)this.visitEdge(a,n)&&r.add(i);r.isResolved?this.unresolvableFieldPaths.delete(n):this.unresolvableFieldPaths.add(n)}validateAbstractNode(t,n){if(!(t.headToTailEdges.size<1))for(let r of t.headToTailEdges.values())this.visitEdge(r,n)}generateEntityResolvabilityErrors(t,n,r){let i=(0,kr.getOrThrowError)(this.resolvableFieldNamesByRelativeFieldPathByEntityNodeName,t.nodeName,"resolvableFieldNamesByRelativeFieldPathByEntityNodeName"),a="";for(let o of t.parentFieldPathForEntityReference)a=o+a;(0,Pl.generateResolvabilityErrors)({unresolvableFieldPaths:t.unresolvableFieldPaths,nodeResolutionDataByFieldPath:i,rootFieldData:n,errors:r,pathFromRoot:a,entityAncestorData:t.entityAncestorData})}};uE.Graph=FO;var PO=class{constructor({entityNodeNamesBySharedFieldPath:t,interSubgraphNodes:n,originNode:r,resolvableFieldNamesByRelativeFieldPathByEntityNodeName:i,unresolvableSharedFieldPaths:a,walkerIndex:o,sharedResolvableFieldNamesByRelativeFieldPath:c}){v(this,"entityNodeNamesBySharedFieldPath");v(this,"interSubgraphNodes");v(this,"originNode");v(this,"resolvableFieldNamesByRelativeFieldPath");v(this,"resolvableFieldNamesByRelativeFieldPathByEntityNodeName");v(this,"unresolvableFieldPaths",new Set);v(this,"unresolvableSharedFieldPaths");v(this,"walkerIndex");v(this,"sharedResolvableFieldNamesByRelativeFieldPath");this.entityNodeNamesBySharedFieldPath=t,this.interSubgraphNodes=n,this.originNode=r,this.resolvableFieldNamesByRelativeFieldPathByEntityNodeName=i,this.resolvableFieldNamesByRelativeFieldPath=(0,kr.getValueOrDefault)(this.resolvableFieldNamesByRelativeFieldPathByEntityNodeName,r.nodeName,()=>new Map),this.unresolvableSharedFieldPaths=a,this.walkerIndex=o,this.sharedResolvableFieldNamesByRelativeFieldPath=c}visitEntityNode(t){this.validateEntityRelatedConcreteNode(t,"");let n=t.getAllAccessibleEntityNodeNames();for(let r of this.interSubgraphNodes){if(this.unresolvableFieldPaths.size<0)return;n.has(r.nodeName)&&this.validateEntityRelatedConcreteNode(r,"")}}visitEntityRelatedEdge(t,n){return t.isInaccessible||t.node.isInaccessible?!1:!(0,kr.add)(t.visitedIndices,this.walkerIndex)||t.node.isLeaf?!0:t.node.hasEntitySiblings?((0,kr.getValueOrDefault)(this.entityNodeNamesBySharedFieldPath,`${n}.${t.edgeName}`,()=>new Set).add(t.node.nodeName),!0):(t.node.isAbstract?this.validateEntityRelatedAbstractNode(t.node,`${n}.${t.edgeName}`):this.validateEntityRelatedConcreteNode(t.node,`${n}.${t.edgeName}`),!0)}validateEntityRelatedConcreteNode(t,n){if(t.headToTailEdges.size<1)return;let r=(0,kr.getValueOrDefault)(this.resolvableFieldNamesByRelativeFieldPath,n,()=>new Pl.NodeResolutionData(t.typeName,t.fieldDataByFieldName)),i=this.sharedResolvableFieldNamesByRelativeFieldPath?(0,kr.getValueOrDefault)(this.sharedResolvableFieldNamesByRelativeFieldPath,n,()=>new Pl.NodeResolutionData(t.typeName,t.fieldDataByFieldName)):void 0;for(let[a,o]of t.headToTailEdges)this.visitEntityRelatedEdge(o,n)&&(r.add(a),i==null||i.add(a));r.isResolved?this.unresolvableFieldPaths.delete(n):this.unresolvableFieldPaths.add(n),i&&(i.isResolved?this.unresolvableSharedFieldPaths.delete(n):this.unresolvableSharedFieldPaths.add(n))}validateEntityRelatedAbstractNode(t,n){if(!(t.headToTailEdges.size<1))for(let r of t.headToTailEdges.values())this.visitEntityRelatedEdge(r,n)}}});var LO=w(cE=>{"use strict";m();T();N();Object.defineProperty(cE,"__esModule",{value:!0});cE.newFieldSetConditionData=Rce;cE.newConfigurationData=Fce;function Rce({fieldCoordinatesPath:e,fieldPath:t}){return{fieldCoordinatesPath:e,fieldPath:t}}function Fce(e,t){return{fieldNames:new Set,isRootNode:e,typeName:t}}});var BO=w(sc=>{"use strict";m();T();N();Object.defineProperty(sc,"__esModule",{value:!0});sc.NormalizationFactory=void 0;sc.normalizeSubgraphFromString=Cce;sc.normalizeSubgraph=gq;sc.batchNormalize=Bce;var oe=Ae(),Dn=Jr(),ti=bp(),en=hs(),ar=cp(),pe=sa(),lE=rp(),Pce=J_(),$i=cO(),wce=fO(),Ss=nE(),Iq=_O(),$a=Ap(),gn=Fp(),ir=Ho(),CO=wO(),dE=Z_(),ne=lr(),Lce=nl(),Ge=Hr(),_n=Ae(),wp=LO();function Cce(e,t=!0){let{error:n,documentNode:r}=(0,Dn.safeParse)(e,t);return n||!r?{errors:[(0,pe.subgraphInvalidSyntaxError)(n)],success:!1,warnings:[]}:new Lp(new CO.Graph).normalize(r)}function gq(e,t,n){return new Lp(n||new CO.Graph,t).normalize(e)}var Lp=class{constructor(t,n){v(this,"argumentName","");v(this,"authorizationDataByParentTypeName",new Map);v(this,"concreteTypeNamesByAbstractTypeName",new Map);v(this,"conditionalFieldDataByCoords",new Map);v(this,"configurationDataByTypeName",new Map);v(this,"customDirectiveDefinitions",new Map);v(this,"definedDirectiveNames",new Set);v(this,"directiveDefinitionByDirectiveName",new Map);v(this,"directiveDefinitionDataByDirectiveName",(0,ti.initializeDirectiveDefinitionDatas)());v(this,"edfsDirectiveReferences",new Set);v(this,"errors",[]);v(this,"entityDataByTypeName",new Map);v(this,"entityInterfaceDataByTypeName",new Map);v(this,"eventsConfigurations",new Map);v(this,"fieldSetDataByTypeName",new Map);v(this,"internalGraph");v(this,"invalidConfigureDescriptionNodeDatas",[]);v(this,"invalidRepeatedDirectiveNameByCoords",new Map);v(this,"isCurrentParentExtension",!1);v(this,"isParentObjectExternal",!1);v(this,"isParentObjectShareable",!1);v(this,"isSubgraphEventDrivenGraph",!1);v(this,"isSubgraphVersionTwo",!1);v(this,"keyFieldSetDatasByTypeName",new Map);v(this,"lastParentNodeKind",oe.Kind.NULL);v(this,"lastChildNodeKind",oe.Kind.NULL);v(this,"parentTypeNamesWithAuthDirectives",new Set);v(this,"keyFieldSetDataByTypeName",new Map);v(this,"keyFieldSetsByEntityTypeNameByFieldCoords",new Map);v(this,"keyFieldNamesByParentTypeName",new Map);v(this,"fieldCoordsByNamedTypeName",new Map);v(this,"operationTypeNodeByTypeName",new Map);v(this,"originalParentTypeName","");v(this,"originalTypeNameByRenamedTypeName",new Map);v(this,"parentDefinitionDataByTypeName",new Map);v(this,"parentsWithChildArguments",new Set);v(this,"overridesByTargetSubgraphName",new Map);v(this,"invalidORScopesCoords",new Set);v(this,"schemaData");v(this,"referencedDirectiveNames",new Set);v(this,"referencedTypeNames",new Set);v(this,"renamedParentTypeName","");v(this,"subgraphName");v(this,"unvalidatedExternalFieldCoords",new Set);v(this,"usesEdfsNatsStreamConfiguration",!1);v(this,"warnings",[]);for(let[r,i]of en.BASE_DIRECTIVE_DEFINITION_BY_DIRECTIVE_NAME)this.directiveDefinitionByDirectiveName.set(r,i);this.subgraphName=n||ne.NOT_APPLICABLE,this.internalGraph=t,this.internalGraph.setSubgraphName(this.subgraphName),this.schemaData={directivesByDirectiveName:new Map,kind:oe.Kind.SCHEMA_DEFINITION,name:ne.SCHEMA,operationTypes:new Map}}validateInputNamedType(t){if(en.BASE_SCALARS.has(t))return{hasUnhandledError:!1,typeString:""};let n=this.parentDefinitionDataByTypeName.get(t);if(!n)return{hasUnhandledError:!1,typeString:""};switch(n.kind){case oe.Kind.ENUM_TYPE_DEFINITION:case oe.Kind.INPUT_OBJECT_TYPE_DEFINITION:case oe.Kind.SCALAR_TYPE_DEFINITION:return{hasUnhandledError:!1,typeString:""};default:return{hasUnhandledError:!0,typeString:(0,Ge.kindToTypeString)(n.kind)}}}validateArguments(t,n){let r=[];for(let[i,a]of t.argumentDataByArgumentName){let o=(0,ir.getTypeNodeNamedTypeName)(a.type);en.BASE_SCALARS.has(o)||this.referencedTypeNames.add(o);let{hasUnhandledError:c,typeString:l}=this.validateInputNamedType(o);c&&r.push({argumentName:i,namedType:o,typeString:l,typeName:(0,$i.printTypeNode)(a.type)})}r.length>0&&this.errors.push((0,pe.invalidArgumentsError)(n,r))}isTypeNameRootType(t){return ne.ROOT_TYPE_NAMES.has(t)||this.operationTypeNodeByTypeName.has(t)}isArgumentValueValid(t,n){if(n.kind===oe.Kind.NULL)return t.kind!==oe.Kind.NON_NULL_TYPE;switch(t.kind){case oe.Kind.LIST_TYPE:{if(n.kind!==oe.Kind.LIST)return this.isArgumentValueValid((0,ir.getNamedTypeNode)(t.type),n);for(let r of n.values)if(!this.isArgumentValueValid(t.type,r))return!1;return!0}case oe.Kind.NAMED_TYPE:switch(t.name.value){case ne.BOOLEAN_SCALAR:return n.kind===oe.Kind.BOOLEAN;case ne.FLOAT_SCALAR:return n.kind===oe.Kind.FLOAT||n.kind===oe.Kind.INT;case ne.ID_SCALAR:return n.kind===oe.Kind.STRING||n.kind===oe.Kind.INT;case ne.INT_SCALAR:return n.kind===oe.Kind.INT;case ne.FIELD_SET_SCALAR:case ne.SCOPE_SCALAR:case ne.STRING_SCALAR:return n.kind===oe.Kind.STRING;case ne.LINK_IMPORT:return!0;case ne.LINK_PURPOSE:return n.kind!==oe.Kind.ENUM?!1:n.value===ne.SECURITY||n.value===ne.EXECUTION;case ne.SUBSCRIPTION_FIELD_CONDITION:case ne.SUBSCRIPTION_FILTER_CONDITION:return n.kind===oe.Kind.OBJECT;default:{let r=this.parentDefinitionDataByTypeName.get(t.name.value);if(!r)return!1;if(r.kind===oe.Kind.SCALAR_TYPE_DEFINITION)return!0;if(r.kind===oe.Kind.ENUM_TYPE_DEFINITION){if(n.kind!==oe.Kind.ENUM)return!1;let i=r.enumValueDataByValueName.get(n.value);return i?!i.directivesByDirectiveName.has(ne.INACCESSIBLE):!1}return r.kind!==oe.Kind.INPUT_OBJECT_TYPE_DEFINITION?!1:n.kind===oe.Kind.OBJECT}}default:return this.isArgumentValueValid(t.type,n)}}addInheritedDirectivesToFieldData(t){return this.isParentObjectShareable&&(0,Ge.getValueOrDefault)(t,ne.SHAREABLE,()=>[(0,Ge.generateSimpleDirective)(ne.SHAREABLE)]),this.isParentObjectExternal&&(0,Ge.getValueOrDefault)(t,ne.EXTERNAL,()=>[(0,Ge.generateSimpleDirective)(ne.EXTERNAL)]),t}extractDirectives(t,n){if(!t.directives)return n;for(let r of t.directives){let i=r.name.value;i===ne.SHAREABLE?(0,Ge.getValueOrDefault)(n,i,()=>[r]):(0,Ge.getValueOrDefault)(n,i,()=>[]).push(r),(0,ar.isNodeKindObject)(t.kind)&&(this.isParentObjectExternal||(this.isParentObjectExternal=i===ne.EXTERNAL),this.isParentObjectShareable||(this.isParentObjectShareable=i===ne.SHAREABLE))}return n}validateDirective({data:t,definitionData:n,directiveCoords:r,directiveNode:i,errorMessages:a,requiredArgumentNames:o}){let c=i.name.value,l=t.kind===oe.Kind.FIELD_DEFINITION?t.renamedParentTypeName||t.originalParentTypeName:t.name,p=c===ne.AUTHENTICATED,f=c===ne.OVERRIDE,y=c===ne.REQUIRES_SCOPES;if(!i.arguments||i.arguments.length<1)return n.requiredArgumentNames.size>0&&a.push((0,pe.undefinedRequiredArgumentsErrorMessage)(c,o,[])),p&&this.handleAuthenticatedDirective(t,l),a;let g=new Set,_=new Set,F=new Set,U=[];for(let ee of i.arguments){let W=ee.name.value;if(g.has(W)){_.add(W);continue}g.add(W);let Te=n.argumentTypeNodeByArgumentName.get(W);if(!Te){F.add(W);continue}if(!this.isArgumentValueValid(Te.typeNode,ee.value)){a.push((0,pe.invalidArgumentValueErrorMessage)((0,oe.print)(ee.value),`@${c}`,W,(0,$i.printTypeNode)(Te.typeNode)));continue}if(f&&t.kind===oe.Kind.FIELD_DEFINITION){this.handleOverrideDirective({data:t,directiveCoords:r,errorMessages:a,targetSubgraphName:ee.value.value});continue}!y||W!==ne.SCOPES||this.extractRequiredScopes({directiveCoords:r,orScopes:ee.value.values,requiredScopes:U})}_.size>0&&a.push((0,pe.duplicateDirectiveArgumentDefinitionsErrorMessage)([..._])),F.size>0&&a.push((0,pe.unexpectedDirectiveArgumentErrorMessage)(c,[...F]));let K=(0,Ge.getEntriesNotInHashSet)(o,g);if(K.length>0&&a.push((0,pe.undefinedRequiredArgumentsErrorMessage)(c,o,K)),a.length>0||!y)return a;let J=(0,Ge.getValueOrDefault)(this.authorizationDataByParentTypeName,l,()=>(0,ar.newAuthorizationData)(l));if(t.kind!==oe.Kind.FIELD_DEFINITION)this.parentTypeNamesWithAuthDirectives.add(l),J.requiredScopes.push(...U);else{let ee=(0,Ge.getValueOrDefault)(J.fieldAuthDataByFieldName,t.name,()=>(0,ar.newFieldAuthorizationData)(t.name));ee.inheritedData.requiredScopes.push(...U),ee.originalData.requiredScopes.push(...U)}return a}validateDirectives(t,n){let r=new Set;for(let[i,a]of t.directivesByDirectiveName){let o=this.directiveDefinitionDataByDirectiveName.get(i);if(!o){r.has(i)||(this.errors.push((0,pe.undefinedDirectiveError)(i,n)),r.add(i));continue}let c=[],l=(0,Dn.nodeKindToDirectiveLocation)(t.kind);if(o.locations.has(l)||c.push((0,pe.invalidDirectiveLocationErrorMessage)(i,l)),a.length>1&&!o.isRepeatable){let f=(0,Ge.getValueOrDefault)(this.invalidRepeatedDirectiveNameByCoords,n,()=>new Set);f.has(i)||(f.add(i),c.push((0,pe.invalidRepeatedDirectiveErrorMessage)(i)))}let p=[...o.requiredArgumentNames];for(let f=0;f0&&this.errors.push((0,pe.invalidDirectiveError)(i,n,(0,Ge.numberToOrdinal)(f+1),y))}}switch(t.kind){case oe.Kind.ENUM_TYPE_DEFINITION:{for(let[i,a]of t.enumValueDataByValueName)this.validateDirectives(a,`${t.name}.${i}`);return}case oe.Kind.FIELD_DEFINITION:{for(let[i,a]of t.argumentDataByArgumentName)this.validateDirectives(a,`${t.originalParentTypeName}.${t.name}(${i}: ...)`);return}case oe.Kind.INPUT_OBJECT_TYPE_DEFINITION:{for(let[i,a]of t.inputValueDataByValueName)this.validateDirectives(a,`${t.name}.${i}`);return}case oe.Kind.INTERFACE_TYPE_DEFINITION:case oe.Kind.OBJECT_TYPE_DEFINITION:{for(let[i,a]of t.fieldDataByFieldName)this.validateDirectives(a,`${t.name}.${i}`);return}default:return}}getNodeExtensionType(t,n,r=!1){return t?$a.ExtensionType.REAL:r||!n.has(ne.EXTENDS)?$a.ExtensionType.NONE:$a.ExtensionType.EXTENDS}setParentDataExtensionType(t,n){switch(t.extensionType){case $a.ExtensionType.EXTENDS:case $a.ExtensionType.NONE:{if(n===$a.ExtensionType.REAL)return;this.errors.push((0,pe.duplicateTypeDefinitionError)((0,Ge.kindToTypeString)(t.kind),t.name));return}default:t.extensionType=n}}extractConfigureDescriptionData(t,n){var i,a;if(!n.arguments||n.arguments.length<1){t.description||this.invalidConfigureDescriptionNodeDatas.push(t),t.configureDescriptionDataBySubgraphName.set(this.subgraphName,{propagate:!0,description:((i=t.description)==null?void 0:i.value)||""});return}let r={propagate:!0,description:((a=t.description)==null?void 0:a.value)||""};for(let o of n.arguments)switch(o.name.value){case ne.PROPAGATE:{if(o.value.kind!=oe.Kind.BOOLEAN)return;r.propagate=o.value.value;break}case ne.DESCRIPTION_OVERRIDE:{if(o.value.kind!=oe.Kind.STRING)return;r.description=o.value.value;break}default:return}!t.description&&!r.description&&this.invalidConfigureDescriptionNodeDatas.push(t),t.configureDescriptionDataBySubgraphName.set(this.subgraphName,r)}extractConfigureDescriptionsData(t){let n=t.directivesByDirectiveName.get(ne.CONFIGURE_DESCRIPTION);n&&n.length==1&&this.extractConfigureDescriptionData(t,n[0])}extractImplementedInterfaceTypeNames(t,n){if(!t.interfaces)return n;let r=t.name.value;for(let i of t.interfaces){let a=i.name.value;if(n.has(a)){this.errors.push((0,pe.duplicateImplementedInterfaceError)((0,ar.kindToConvertedTypeString)(t.kind),r,a));continue}n.add(a)}return n}updateCompositeOutputDataByNode(t,n,r){this.setParentDataExtensionType(n,r),this.extractImplementedInterfaceTypeNames(t,n.implementedInterfaceTypeNames),n.description||(n.description=(0,Dn.formatDescription)("description"in t?t.description:void 0)),this.extractConfigureDescriptionsData(n),n.isEntity||(n.isEntity=n.directivesByDirectiveName.has(ne.KEY)),n.isInaccessible||(n.isInaccessible=n.directivesByDirectiveName.has(ne.INACCESSIBLE)),n.subgraphNames.add(this.subgraphName)}addConcreteTypeNamesForImplementedInterfaces(t,n){for(let r of t)(0,Ge.getValueOrDefault)(this.concreteTypeNamesByAbstractTypeName,r,()=>new Set).add(n),this.internalGraph.addEdge(this.internalGraph.addOrUpdateNode(r,{isAbstract:!0}),this.internalGraph.addOrUpdateNode(n),n,!0)}extractArguments(t,n){var c;if(!((c=n.arguments)!=null&&c.length))return t;let r=n.name.value,i=`${this.originalParentTypeName}.${r}`,a=`${this.renamedParentTypeName}.${r}`;this.parentsWithChildArguments.add(this.originalParentTypeName);let o=new Set;for(let l of n.arguments){let p=l.name.value;if(t.has(p)){o.add(p);continue}this.addInputValueDataByNode(t,l,`${i}(${p}: ...)`,`${a}(${p}: ...)`)}return o.size>0&&this.errors.push((0,pe.duplicateArgumentsError)(i,[...o])),t}addPersistedDirectiveDefinitionDataByNode(t,n,r){let i=n.name.value,a=new Map;for(let o of n.arguments||[]){let c=`@${i}(${o.name.value}: ...)`;this.addInputValueDataByNode(a,o,c,c)}t.set(i,{argumentDataByArgumentName:a,executableLocations:r,name:i,repeatable:n.repeatable,subgraphNames:new Set([this.subgraphName]),description:(0,Dn.formatDescription)(n.description)})}extractDirectiveLocations(t,n){let r=new Set,i=new Set;for(let a of t.locations){let o=a.value;if(!i.has(o)){if(!ne.EXECUTABLE_DIRECTIVE_LOCATIONS.has(o)&&!lE.TYPE_SYSTEM_DIRECTIVE_LOCATIONS.has(o)){n.push((0,pe.invalidDirectiveDefinitionLocationErrorMessage)(o)),i.add(o);continue}if(r.has(o)){n.push((0,pe.duplicateDirectiveDefinitionLocationErrorMessage)(o)),i.add(o);continue}r.add(o)}}return r}extractArgumentData(t,n){let r=new Map,i=new Set,a=new Set,o={argumentTypeNodeByArgumentName:r,optionalArgumentNames:i,requiredArgumentNames:a};if(!t)return o;let c=new Set;for(let l of t){let p=l.name.value;if(r.has(p)){c.add(p);continue}l.defaultValue&&i.add(p),(0,gn.isTypeRequired)(l.type)&&!l.defaultValue&&a.add(p),r.set(p,{name:p,typeNode:l.type,defaultValue:l.defaultValue})}return c.size>0&&n.push((0,pe.duplicateDirectiveDefinitionArgumentErrorMessage)([...c])),o}addDirectiveDefinitionDataByNode(t){let n=t.name.value;if(this.definedDirectiveNames.has(n))return this.errors.push((0,pe.duplicateDirectiveDefinitionError)(n)),!1;if(this.definedDirectiveNames.add(n),this.directiveDefinitionByDirectiveName.set(n,t),en.V2_DIRECTIVE_DEFINITION_BY_DIRECTIVE_NAME.has(n))return this.isSubgraphVersionTwo=!0,!1;if(en.ALL_IN_BUILT_DIRECTIVE_NAMES.has(n))return!1;let r=[],{argumentTypeNodeByArgumentName:i,optionalArgumentNames:a,requiredArgumentNames:o}=this.extractArgumentData(t.arguments,r);return this.directiveDefinitionDataByDirectiveName.set(n,{argumentTypeNodeByArgumentName:i,isRepeatable:t.repeatable,locations:this.extractDirectiveLocations(t,r),name:n,node:t,optionalArgumentNames:a,requiredArgumentNames:o}),r.length>0&&this.errors.push((0,pe.invalidDirectiveDefinitionError)(n,r)),!0}addFieldDataByNode(t,n,r,i){let a=n.name.value,o=this.renamedParentTypeName||this.originalParentTypeName,c=`${this.originalParentTypeName}.${a}`,{isExternal:l,isShareable:p}=(0,gn.isNodeExternalOrShareable)(n,!this.isSubgraphVersionTwo,i),f={argumentDataByArgumentName:r,configureDescriptionDataBySubgraphName:new Map,externalFieldDataBySubgraphName:new Map([[this.subgraphName,(0,gn.newExternalFieldData)(l)]]),federatedCoords:`${o}.${a}`,isInaccessible:i.has(ne.INACCESSIBLE),isShareableBySubgraphName:new Map([[this.subgraphName,p]]),kind:oe.Kind.FIELD_DEFINITION,name:a,namedTypeName:(0,ir.getTypeNodeNamedTypeName)(n.type),node:(0,ir.getMutableFieldNode)(n,c,this.errors),originalParentTypeName:this.originalParentTypeName,persistedDirectivesData:(0,gn.newPersistedDirectivesData)(),renamedParentTypeName:o,subgraphNames:new Set([this.subgraphName]),type:(0,ir.getMutableTypeNode)(n.type,c,this.errors),directivesByDirectiveName:i,description:(0,Dn.formatDescription)(n.description)};return en.BASE_SCALARS.has(f.namedTypeName)||this.referencedTypeNames.add(f.namedTypeName),this.extractConfigureDescriptionsData(f),t.set(a,f),f}addInputValueDataByNode(t,n,r,i){let a=n.name.value,o=!!i;n.defaultValue&&!(0,gn.areDefaultValuesCompatible)(n.type,n.defaultValue)&&this.errors.push((0,pe.incompatibleInputValueDefaultValueTypeError)((o?ne.ARGUMENT:ne.INPUT_FIELD)+` "${a}"`,r,(0,$i.printTypeNode)(n.type),(0,oe.print)(n.defaultValue)));let c={configureDescriptionDataBySubgraphName:new Map,directivesByDirectiveName:this.extractDirectives(n,new Map),includeDefaultValue:!!n.defaultValue,isArgument:o,kind:o?oe.Kind.ARGUMENT:oe.Kind.INPUT_VALUE_DEFINITION,name:a,namedTypeName:(0,ir.getTypeNodeNamedTypeName)(n.type),node:(0,ir.getMutableInputValueNode)(n,r,this.errors),originalCoords:r,persistedDirectivesData:(0,gn.newPersistedDirectivesData)(),federatedCoords:i||r,requiredSubgraphNames:new Set((0,gn.isTypeRequired)(n.type)?[this.subgraphName]:[]),subgraphNames:new Set([this.subgraphName]),type:(0,ir.getMutableTypeNode)(n.type,r,this.errors),defaultValue:n.defaultValue,description:(0,Dn.formatDescription)(n.description)};this.extractConfigureDescriptionsData(c),t.set(a,c)}upsertInterfaceDataByNode(t,n=!1){let r=t.name.value,i=this.parentDefinitionDataByTypeName.get(r),a=this.extractDirectives(t,(i==null?void 0:i.directivesByDirectiveName)||new Map),o=this.getNodeExtensionType(n,a),c=this.entityInterfaceDataByTypeName.get(r);if(c&&t.fields)for(let p of t.fields)c.interfaceFieldNames.add(p.name.value);if(i){if(i.kind!==oe.Kind.INTERFACE_TYPE_DEFINITION){this.errors.push((0,pe.multipleNamedTypeDefinitionError)(r,(0,Ge.kindToTypeString)(i.kind),(0,ar.kindToConvertedTypeString)(t.kind)));return}this.updateCompositeOutputDataByNode(t,i,o);return}let l={configureDescriptionDataBySubgraphName:new Map,directivesByDirectiveName:a,extensionType:o,fieldDataByFieldName:new Map,implementedInterfaceTypeNames:this.extractImplementedInterfaceTypeNames(t,new Set),isEntity:a.has(ne.KEY),isInaccessible:a.has(ne.INACCESSIBLE),kind:oe.Kind.INTERFACE_TYPE_DEFINITION,name:r,node:(0,ir.getMutableInterfaceNode)(t.name),persistedDirectivesData:(0,gn.newPersistedDirectivesData)(),subgraphNames:new Set([this.subgraphName]),description:(0,Dn.formatDescription)("description"in t?t.description:void 0)};this.extractConfigureDescriptionsData(l),this.parentDefinitionDataByTypeName.set(r,l)}getRenamedRootTypeName(t){let n=this.operationTypeNodeByTypeName.get(t);if(!n)return t;switch(n){case oe.OperationTypeNode.MUTATION:return ne.MUTATION;case oe.OperationTypeNode.SUBSCRIPTION:return ne.SUBSCRIPTION;default:return ne.QUERY}}addInterfaceObjectFieldsByNode(t){let n=t.name.value,r=this.entityInterfaceDataByTypeName.get(n);if(!(!r||!r.isInterfaceObject||!t.fields))for(let i of t.fields)r.interfaceObjectFieldNames.add(i.name.value)}upsertObjectDataByNode(t,n=!1){let r=t.name.value,i=this.parentDefinitionDataByTypeName.get(r),a=this.extractDirectives(t,(i==null?void 0:i.directivesByDirectiveName)||new Map),o=this.isTypeNameRootType(r),c=this.getNodeExtensionType(n,a,o);if(this.addInterfaceObjectFieldsByNode(t),i){if(i.kind!==oe.Kind.OBJECT_TYPE_DEFINITION){this.errors.push((0,pe.multipleNamedTypeDefinitionError)(r,(0,Ge.kindToTypeString)(i.kind),(0,ar.kindToConvertedTypeString)(t.kind)));return}this.updateCompositeOutputDataByNode(t,i,c),this.addConcreteTypeNamesForImplementedInterfaces(i.implementedInterfaceTypeNames,r);return}let l=this.extractImplementedInterfaceTypeNames(t,new Set);this.addConcreteTypeNamesForImplementedInterfaces(l,r);let p={configureDescriptionDataBySubgraphName:new Map,directivesByDirectiveName:a,extensionType:c,fieldDataByFieldName:new Map,implementedInterfaceTypeNames:l,isEntity:a.has(ne.KEY),isInaccessible:a.has(ne.INACCESSIBLE),isRootType:o,kind:oe.Kind.OBJECT_TYPE_DEFINITION,name:r,node:(0,ir.getMutableObjectNode)(t.name),persistedDirectivesData:(0,gn.newPersistedDirectivesData)(),renamedTypeName:this.getRenamedRootTypeName(r),subgraphNames:new Set([this.subgraphName]),description:(0,Dn.formatDescription)("description"in t?t.description:void 0)};this.extractConfigureDescriptionsData(p),this.parentDefinitionDataByTypeName.set(r,p)}upsertEnumDataByNode(t,n=!1){let r=t.name.value;this.internalGraph.addOrUpdateNode(r,{isLeaf:!0});let i=this.parentDefinitionDataByTypeName.get(r),a=this.extractDirectives(t,(i==null?void 0:i.directivesByDirectiveName)||new Map),o=this.getNodeExtensionType(n,a);if(i){if(i.kind!==oe.Kind.ENUM_TYPE_DEFINITION){this.errors.push((0,pe.multipleNamedTypeDefinitionError)(r,(0,Ge.kindToTypeString)(i.kind),(0,ar.kindToConvertedTypeString)(t.kind)));return}this.setParentDataExtensionType(i,o),i.isInaccessible||(i.isInaccessible=a.has(ne.INACCESSIBLE)),i.subgraphNames.add(this.subgraphName),i.description||(i.description=(0,Dn.formatDescription)("description"in t?t.description:void 0)),this.extractConfigureDescriptionsData(i);return}let c={appearances:1,configureDescriptionDataBySubgraphName:new Map,directivesByDirectiveName:a,extensionType:o,enumValueDataByValueName:new Map,isInaccessible:a.has(ne.INACCESSIBLE),kind:oe.Kind.ENUM_TYPE_DEFINITION,name:r,node:(0,ir.getMutableEnumNode)(t.name),persistedDirectivesData:(0,gn.newPersistedDirectivesData)(),subgraphNames:new Set([this.subgraphName]),description:(0,Dn.formatDescription)("description"in t?t.description:void 0)};this.extractConfigureDescriptionsData(c),this.parentDefinitionDataByTypeName.set(r,c)}upsertInputObjectByNode(t,n=!1){let r=t.name.value,i=this.parentDefinitionDataByTypeName.get(r),a=this.extractDirectives(t,(i==null?void 0:i.directivesByDirectiveName)||new Map),o=this.getNodeExtensionType(n,a);if(i){if(i.kind!==oe.Kind.INPUT_OBJECT_TYPE_DEFINITION){this.errors.push((0,pe.multipleNamedTypeDefinitionError)(r,(0,Ge.kindToTypeString)(i.kind),(0,ar.kindToConvertedTypeString)(t.kind)));return}this.setParentDataExtensionType(i,o),i.isInaccessible||(i.isInaccessible=a.has(ne.INACCESSIBLE)),i.subgraphNames.add(this.subgraphName),i.description||(i.description=(0,Dn.formatDescription)("description"in t?t.description:void 0)),this.extractConfigureDescriptionsData(i);return}let c={configureDescriptionDataBySubgraphName:new Map,directivesByDirectiveName:a,extensionType:o,inputValueDataByValueName:new Map,isInaccessible:a.has(ne.INACCESSIBLE),kind:oe.Kind.INPUT_OBJECT_TYPE_DEFINITION,name:r,node:(0,ir.getMutableInputObjectNode)(t.name),persistedDirectivesData:(0,gn.newPersistedDirectivesData)(),subgraphNames:new Set([this.subgraphName]),description:(0,Dn.formatDescription)("description"in t?t.description:void 0)};this.extractConfigureDescriptionsData(c),this.parentDefinitionDataByTypeName.set(r,c)}upsertScalarByNode(t,n=!1){let r=t.name.value;this.internalGraph.addOrUpdateNode(r,{isLeaf:!0});let i=this.parentDefinitionDataByTypeName.get(r),a=this.extractDirectives(t,(i==null?void 0:i.directivesByDirectiveName)||new Map),o=this.getNodeExtensionType(n,a);if(i){if(i.kind!==oe.Kind.SCALAR_TYPE_DEFINITION){this.errors.push((0,pe.multipleNamedTypeDefinitionError)(r,(0,Ge.kindToTypeString)(i.kind),(0,ar.kindToConvertedTypeString)(t.kind)));return}this.setParentDataExtensionType(i,o),i.description||(i.description=(0,Dn.formatDescription)("description"in t?t.description:void 0)),i.subgraphNames.add(this.subgraphName),this.extractConfigureDescriptionsData(i);return}let c={configureDescriptionDataBySubgraphName:new Map,directivesByDirectiveName:a,extensionType:o,kind:oe.Kind.SCALAR_TYPE_DEFINITION,name:r,node:(0,ir.getMutableScalarNode)(t.name),persistedDirectivesData:(0,gn.newPersistedDirectivesData)(),subgraphNames:new Set([this.subgraphName]),description:(0,Dn.formatDescription)("description"in t?t.description:void 0)};this.extractConfigureDescriptionsData(c),this.parentDefinitionDataByTypeName.set(r,c)}extractUnionMembers(t,n){if(!t.types)return n;let r=t.name.value;for(let i of t.types){let a=i.name.value;if(n.has(a)){this.errors.push((0,pe.duplicateUnionMemberDefinitionError)(r,a));continue}(0,Ge.getValueOrDefault)(this.concreteTypeNamesByAbstractTypeName,r,()=>new Set).add(a),en.BASE_SCALARS.has(a)||this.referencedTypeNames.add(a),n.set(a,i)}return n}upsertUnionByNode(t,n=!1){let r=t.name.value,i=this.parentDefinitionDataByTypeName.get(r),a=this.extractDirectives(t,(i==null?void 0:i.directivesByDirectiveName)||new Map),o=this.getNodeExtensionType(n,a);if(this.addConcreteTypeNamesForUnion(t),i){if(i.kind!==oe.Kind.UNION_TYPE_DEFINITION){this.errors.push((0,pe.multipleNamedTypeDefinitionError)(r,(0,Ge.kindToTypeString)(i.kind),(0,ar.kindToConvertedTypeString)(t.kind)));return}this.setParentDataExtensionType(i,o),this.extractUnionMembers(t,i.memberByMemberTypeName),i.description||(i.description=(0,Dn.formatDescription)("description"in t?t.description:void 0)),i.subgraphNames.add(this.subgraphName),this.extractConfigureDescriptionsData(i);return}let c={configureDescriptionDataBySubgraphName:new Map,directivesByDirectiveName:a,extensionType:o,kind:oe.Kind.UNION_TYPE_DEFINITION,memberByMemberTypeName:this.extractUnionMembers(t,new Map),name:r,node:(0,ir.getMutableUnionNode)(t.name),persistedDirectivesData:(0,gn.newPersistedDirectivesData)(),subgraphNames:new Set([this.subgraphName]),description:(0,Dn.formatDescription)("description"in t?t.description:void 0)};this.extractConfigureDescriptionsData(c),this.parentDefinitionDataByTypeName.set(r,c)}extractKeyFieldSets(t,n){var a;let r=t.name.value;if(!((a=t.directives)!=null&&a.length)){this.errors.push((0,pe.expectedEntityError)(r));return}let i=0;for(let o of t.directives){if(o.name.value!==ne.KEY||(i+=1,!o.arguments||o.arguments.length<1))continue;let c,l=!1;for(let _ of o.arguments){if(_.name.value===ne.RESOLVABLE){_.value.kind===oe.Kind.BOOLEAN&&!_.value.value&&(l=!0);continue}if(_.name.value!==ne.FIELDS){c=void 0;break}if(_.value.kind!==oe.Kind.STRING){c=void 0;break}c=_.value.value}if(c===void 0)continue;let{error:p,documentNode:f}=(0,Dn.safeParse)("{"+c+"}");if(p||!f){this.errors.push((0,pe.invalidDirectiveError)(ne.KEY,r,(0,Ge.numberToOrdinal)(i),[(0,pe.unparsableFieldSetErrorMessage)(c,p)]));continue}let y=(0,ti.getNormalizedFieldSet)(f),g=n.get(y);g?g.isUnresolvable||(g.isUnresolvable=l):n.set(y,{documentNode:f,isUnresolvable:l,normalizedFieldSet:y,rawFieldSet:c})}}getFieldSetParent(t,n,r,i){if(!t)return{fieldSetParentData:n};let a=(0,Ge.getOrThrowError)(n.fieldDataByFieldName,r,`${i}.fieldDataByFieldName`),o=(0,ir.getTypeNodeNamedTypeName)(a.node.type),c=this.parentDefinitionDataByTypeName.get(o);return c?c.kind!==oe.Kind.INTERFACE_TYPE_DEFINITION&&c.kind!==oe.Kind.OBJECT_TYPE_DEFINITION?{errorString:(0,pe.incompatibleTypeWithProvidesErrorMessage)(`${i}.${r}`,o)}:{fieldSetParentData:c}:{errorString:(0,pe.unknownNamedTypeErrorMessage)(`${i}.${r}`,o)}}validateConditionalFieldSet(t,n,r,i,a){let{error:o,documentNode:c}=(0,Dn.safeParse)("{"+n+"}");if(o||!c)return{errorMessages:[(0,pe.unparsableFieldSetErrorMessage)(n,o)]};let l=this,p=[t],f=(0,ti.getConditionalFieldSetDirectiveName)(i),y=[],g=`${a}.${r}`,_=(0,ti.getInitialFieldCoordsPath)(i,g),F=[r],U=new Set,K=[],J=-1,ee=!0,W=r,Te=!1;return(0,_n.visit)(c,{Argument:{enter(){return!1}},Field:{enter(de){let we=p[J],qe=we.name;if(we.kind===oe.Kind.UNION_TYPE_DEFINITION)return K.push((0,pe.invalidSelectionOnUnionErrorMessage)(n,_,qe)),_n.BREAK;let et=de.name.value,X=`${qe}.${et}`;if(l.unvalidatedExternalFieldCoords.delete(X),ee)return K.push((0,pe.invalidSelectionSetErrorMessage)(n,_,qe,(0,Ge.kindToTypeString)(we.kind))),_n.BREAK;_.push(X),F.push(et),W=et;let ve=we.fieldDataByFieldName.get(et);if(!ve)return K.push((0,pe.undefinedFieldInFieldSetErrorMessage)(n,qe,et)),_n.BREAK;if(y[J].has(et))return K.push((0,pe.duplicateFieldInFieldSetErrorMessage)(n,X)),_n.BREAK;y[J].add(et);let{isDefinedExternal:gt,isUnconditionallyProvided:Ht}=(0,Ge.getOrThrowError)(ve.externalFieldDataBySubgraphName,l.subgraphName,`${X}.externalFieldDataBySubgraphName`),zt=gt&&!Ht;Ht||(Te=!0);let bn=(0,ir.getTypeNodeNamedTypeName)(ve.node.type),Vt=l.parentDefinitionDataByTypeName.get(bn);if(en.BASE_SCALARS.has(bn)||(Vt==null?void 0:Vt.kind)===oe.Kind.SCALAR_TYPE_DEFINITION||(Vt==null?void 0:Vt.kind)===oe.Kind.ENUM_TYPE_DEFINITION){if(U.size<1&&!gt){if(l.isSubgraphVersionTwo){l.errors.push((0,pe.nonExternalConditionalFieldError)(g,l.subgraphName,X,n,f));return}l.warnings.push((0,Ss.nonExternalConditionalFieldWarning)(g,l.subgraphName,X,n,f));return}if(U.size<1&&Ht){l.isSubgraphVersionTwo?K.push((0,pe.fieldAlreadyProvidedErrorMessage)(X,l.subgraphName,f)):l.warnings.push((0,Ss.fieldAlreadyProvidedWarning)(X,f,g,l.subgraphName));return}if(!zt&&!i)return;let dn=(0,Ge.getValueOrDefault)(l.conditionalFieldDataByCoords,X,gn.newConditionalFieldData),Rr=(0,wp.newFieldSetConditionData)({fieldCoordinatesPath:[..._],fieldPath:[...F]});i?dn.providedBy.push(Rr):dn.requiredBy.push(Rr);return}if(!Vt)return K.push((0,pe.unknownTypeInFieldSetErrorMessage)(n,X,bn)),_n.BREAK;if(gt&&(i&&(0,Ge.getValueOrDefault)(l.conditionalFieldDataByCoords,X,gn.newConditionalFieldData).providedBy.push((0,wp.newFieldSetConditionData)({fieldCoordinatesPath:[..._],fieldPath:[...F]})),U.add(X)),Vt.kind===oe.Kind.OBJECT_TYPE_DEFINITION||Vt.kind===oe.Kind.INTERFACE_TYPE_DEFINITION||Vt.kind===oe.Kind.UNION_TYPE_DEFINITION){ee=!0,p.push(Vt);return}},leave(){U.delete(_.pop()||""),F.pop()}},InlineFragment:{enter(de){let we=p[J],qe=we.name,et=_.length<1?t.name:_[_.length-1];if(!de.typeCondition)return K.push((0,pe.inlineFragmentWithoutTypeConditionErrorMessage)(n,et)),_n.BREAK;let X=de.typeCondition.name.value;if(X===qe){p.push(we),ee=!0;return}if(!(0,Dn.isKindAbstract)(we.kind))return K.push((0,pe.invalidInlineFragmentTypeErrorMessage)(n,_,X,qe)),_n.BREAK;let ve=l.parentDefinitionDataByTypeName.get(X);if(!ve)return K.push((0,pe.unknownInlineFragmentTypeConditionErrorMessage)(n,_,qe,X)),_n.BREAK;switch(ee=!0,ve.kind){case oe.Kind.INTERFACE_TYPE_DEFINITION:{if(!ve.implementedInterfaceTypeNames.has(qe))break;p.push(ve);return}case oe.Kind.OBJECT_TYPE_DEFINITION:{let gt=l.concreteTypeNamesByAbstractTypeName.get(qe);if(!gt||!gt.has(X))break;p.push(ve);return}case oe.Kind.UNION_TYPE_DEFINITION:{p.push(ve);return}default:return K.push((0,pe.invalidInlineFragmentTypeConditionTypeErrorMessage)(n,_,qe,X,(0,Ge.kindToTypeString)(ve.kind))),_n.BREAK}return K.push((0,pe.invalidInlineFragmentTypeConditionErrorMessage)(n,_,X,(0,Ge.kindToTypeString)(we.kind),qe)),_n.BREAK}},SelectionSet:{enter(){if(!ee){let de=p[J];if(de.kind===oe.Kind.UNION_TYPE_DEFINITION)return K.push((0,pe.unparsableFieldSetSelectionErrorMessage)(n,W)),_n.BREAK;let we=de.fieldDataByFieldName.get(W);if(!we)return K.push((0,pe.undefinedFieldInFieldSetErrorMessage)(n,de.name,W)),_n.BREAK;let qe=(0,ir.getTypeNodeNamedTypeName)(we.node.type),et=l.parentDefinitionDataByTypeName.get(qe),X=et?et.kind:oe.Kind.SCALAR_TYPE_DEFINITION;return K.push((0,pe.invalidSelectionSetDefinitionErrorMessage)(n,_,qe,(0,Ge.kindToTypeString)(X))),_n.BREAK}if(J+=1,ee=!1,J<0||J>=p.length)return K.push((0,pe.unparsableFieldSetSelectionErrorMessage)(n,W)),_n.BREAK;y.push(new Set)},leave(){if(ee){let de=p[J+1];K.push((0,pe.invalidSelectionSetErrorMessage)(n,_,de.name,(0,Ge.kindToTypeString)(de.kind))),ee=!1}J-=1,p.pop(),y.pop()}}}),K.length>0||!Te?{errorMessages:K}:{configuration:{fieldName:r,selectionSet:(0,ti.getNormalizedFieldSet)(c)},errorMessages:K}}validateProvidesOrRequires(t,n,r){let i=[],a=[],o=(0,gn.getParentTypeName)(t);for(let[c,l]of n){let{fieldSetParentData:p,errorString:f}=this.getFieldSetParent(r,t,c,o),y=`${o}.${c}`;if(f){i.push(f);continue}if(!p)continue;let{errorMessages:g,configuration:_}=this.validateConditionalFieldSet(p,l,c,r,o);if(g.length>0){i.push(` On field "${y}": + -`+g.join(ne.HYPHEN_JOIN));continue}_&&a.push(_)}if(i.length>0){this.errors.push((0,pe.invalidProvidesOrRequiresDirectivesError)((0,ti.getConditionalFieldSetDirectiveName)(r),i));return}if(a.length>0)return a}validateInterfaceImplementations(t){if(t.implementedInterfaceTypeNames.size<1)return;let n=t.directivesByDirectiveName.has(ne.INACCESSIBLE),r=new Map,i=new Map,a=!1;for(let o of t.implementedInterfaceTypeNames){let c=this.parentDefinitionDataByTypeName.get(o);if(en.BASE_SCALARS.has(o)&&this.referencedTypeNames.add(o),!c)continue;if(c.kind!==oe.Kind.INTERFACE_TYPE_DEFINITION){i.set(c.name,(0,Ge.kindToTypeString)(c.kind));continue}if(t.name===c.name){a=!0;continue}let l={invalidFieldImplementations:new Map,unimplementedFields:[]},p=!1;for(let[f,y]of c.fieldDataByFieldName){this.unvalidatedExternalFieldCoords.delete(`${t.name}.${f}`);let g=!1,_=t.fieldDataByFieldName.get(f);if(!_){p=!0,l.unimplementedFields.push(f);continue}let F={invalidAdditionalArguments:new Set,invalidImplementedArguments:[],isInaccessible:!1,originalResponseType:(0,$i.printTypeNode)(y.node.type),unimplementedArguments:new Set};(0,gn.isTypeValidImplementation)(y.node.type,_.node.type,this.concreteTypeNamesByAbstractTypeName)||(p=!0,g=!0,F.implementedResponseType=(0,$i.printTypeNode)(_.node.type));let U=new Set;for(let[K,J]of y.argumentDataByArgumentName){U.add(K);let ee=_.argumentDataByArgumentName.get(K);if(!ee){p=!0,g=!0,F.unimplementedArguments.add(K);continue}let W=(0,$i.printTypeNode)(ee.type),Te=(0,$i.printTypeNode)(J.type);Te!==W&&(p=!0,g=!0,F.invalidImplementedArguments.push({actualType:W,argumentName:K,expectedType:Te}))}for(let[K,J]of _.argumentDataByArgumentName)U.has(K)||J.type.kind===oe.Kind.NON_NULL_TYPE&&(p=!0,g=!0,F.invalidAdditionalArguments.add(K));!n&&_.isInaccessible&&!y.isInaccessible&&(p=!0,g=!0,F.isInaccessible=!0),g&&l.invalidFieldImplementations.set(f,F)}p&&r.set(o,l)}i.size>0&&this.errors.push((0,pe.invalidImplementedTypeError)(t.name,i)),a&&this.errors.push((0,pe.selfImplementationError)(t.name)),r.size>0&&this.errors.push((0,pe.invalidInterfaceImplementationError)(t.name,(0,Ge.kindToTypeString)(t.kind),r))}handleAuthenticatedDirective(t,n){let r=(0,Ge.getValueOrDefault)(this.authorizationDataByParentTypeName,n,()=>(0,ar.newAuthorizationData)(n));if(t.kind===oe.Kind.FIELD_DEFINITION){let i=(0,Ge.getValueOrDefault)(r.fieldAuthDataByFieldName,t.name,()=>(0,ar.newFieldAuthorizationData)(t.name));i.inheritedData.requiresAuthentication=!0,i.originalData.requiresAuthentication=!0}else r.requiresAuthentication=!0,this.parentTypeNamesWithAuthDirectives.add(n)}handleOverrideDirective({data:t,directiveCoords:n,errorMessages:r,targetSubgraphName:i}){if(i===this.subgraphName){r.push((0,pe.equivalentSourceAndTargetOverrideErrorMessage)(i,n));return}let a=(0,Ge.getValueOrDefault)(this.overridesByTargetSubgraphName,i,()=>new Map);(0,Ge.getValueOrDefault)(a,t.renamedParentTypeName,()=>new Set).add(t.name)}extractRequiredScopes({directiveCoords:t,orScopes:n,requiredScopes:r}){if(n.length>en.MAX_OR_SCOPES){this.invalidORScopesCoords.add(t);return}for(let i of n){let a=new Set;for(let o of i.values)a.add(o.value);a.size<1||(0,ar.addScopes)(r,a)}}getKafkaPublishConfiguration(t,n,r,i){let a=[],o=ne.DEFAULT_EDFS_PROVIDER_ID;for(let c of t.arguments||[])switch(c.name.value){case ne.TOPIC:{if(c.value.kind!==oe.Kind.STRING||c.value.value.length<1){i.push((0,pe.invalidEventSubjectErrorMessage)(ne.TOPIC));continue}(0,ti.validateArgumentTemplateReferences)(c.value.value,n,i),a.push(c.value.value);break}case ne.PROVIDER_ID:{if(c.value.kind!==oe.Kind.STRING||c.value.value.length<1){i.push(pe.invalidEventProviderIdErrorMessage);continue}o=c.value.value;break}}if(!(i.length>0))return{fieldName:r,providerId:o,providerType:ne.PROVIDER_TYPE_KAFKA,topics:a,type:ne.PUBLISH}}getKafkaSubscribeConfiguration(t,n,r,i){let a=[],o=ne.DEFAULT_EDFS_PROVIDER_ID;for(let c of t.arguments||[])switch(c.name.value){case ne.TOPICS:{if(c.value.kind!==oe.Kind.LIST){i.push((0,pe.invalidEventSubjectsErrorMessage)(ne.TOPICS));continue}for(let l of c.value.values){if(l.kind!==oe.Kind.STRING||l.value.length<1){i.push((0,pe.invalidEventSubjectsItemErrorMessage)(ne.TOPICS));break}(0,ti.validateArgumentTemplateReferences)(l.value,n,i),a.push(l.value)}break}case ne.PROVIDER_ID:{if(c.value.kind!==oe.Kind.STRING||c.value.value.length<1){i.push(pe.invalidEventProviderIdErrorMessage);continue}o=c.value.value;break}}if(!(i.length>0))return{fieldName:r,providerId:o,providerType:ne.PROVIDER_TYPE_KAFKA,topics:a,type:ne.SUBSCRIBE}}getNatsPublishAndRequestConfiguration(t,n,r,i,a){let o=[],c=ne.DEFAULT_EDFS_PROVIDER_ID;for(let l of n.arguments||[])switch(l.name.value){case ne.SUBJECT:{if(l.value.kind!==oe.Kind.STRING||l.value.value.length<1){a.push((0,pe.invalidEventSubjectErrorMessage)(ne.SUBJECT));continue}(0,ti.validateArgumentTemplateReferences)(l.value.value,r,a),o.push(l.value.value);break}case ne.PROVIDER_ID:{if(l.value.kind!==oe.Kind.STRING||l.value.value.length<1){a.push(pe.invalidEventProviderIdErrorMessage);continue}c=l.value.value;break}}if(!(a.length>0))return{fieldName:i,providerId:c,providerType:ne.PROVIDER_TYPE_NATS,subjects:o,type:t}}getNatsSubscribeConfiguration(t,n,r,i){let a=[],o=ne.DEFAULT_EDFS_PROVIDER_ID,c=dE.DEFAULT_CONSUMER_INACTIVE_THRESHOLD,l="",p="";for(let f of t.arguments||[])switch(f.name.value){case ne.SUBJECTS:{if(f.value.kind!==oe.Kind.LIST){i.push((0,pe.invalidEventSubjectsErrorMessage)(ne.SUBJECTS));continue}for(let y of f.value.values){if(y.kind!==oe.Kind.STRING||y.value.length<1){i.push((0,pe.invalidEventSubjectsItemErrorMessage)(ne.SUBJECTS));break}(0,ti.validateArgumentTemplateReferences)(y.value,n,i),a.push(y.value)}break}case ne.PROVIDER_ID:{if(f.value.kind!==oe.Kind.STRING||f.value.value.length<1){i.push(pe.invalidEventProviderIdErrorMessage);continue}o=f.value.value;break}case ne.STREAM_CONFIGURATION:{if(this.usesEdfsNatsStreamConfiguration=!0,f.value.kind!==oe.Kind.OBJECT||f.value.fields.length<1){i.push(pe.invalidNatsStreamInputErrorMessage);continue}let y=!0,g=new Set,_=new Set(lE.STREAM_CONFIGURATION_FIELD_NAMES),F=new Set([ne.CONSUMER_NAME,ne.STREAM_NAME]),U=new Set,K=new Set;for(let J of f.value.fields){let ee=J.name.value;if(!lE.STREAM_CONFIGURATION_FIELD_NAMES.has(ee)){g.add(ee),y=!1;continue}if(_.has(ee))_.delete(ee);else{U.add(ee),y=!1;continue}switch(F.has(ee)&&F.delete(ee),ee){case ne.CONSUMER_NAME:if(J.value.kind!=oe.Kind.STRING||J.value.value.length<1){K.add(ee),y=!1;continue}l=J.value.value;break;case ne.STREAM_NAME:if(J.value.kind!=oe.Kind.STRING||J.value.value.length<1){K.add(ee),y=!1;continue}p=J.value.value;break;case ne.CONSUMER_INACTIVE_THRESHOLD:if(J.value.kind!=oe.Kind.INT){i.push((0,pe.invalidArgumentValueErrorMessage)((0,oe.print)(J.value),"edfs__NatsStreamConfiguration","consumerInactiveThreshold",ne.INT_SCALAR)),y=!1;continue}try{c=parseInt(J.value.value,10)}catch(W){i.push((0,pe.invalidArgumentValueErrorMessage)((0,oe.print)(J.value),"edfs__NatsStreamConfiguration","consumerInactiveThreshold",ne.INT_SCALAR)),y=!1}break}}(!y||F.size>0)&&i.push((0,pe.invalidNatsStreamInputFieldsErrorMessage)([...F],[...U],[...K],[...g]))}}if(!(i.length>0))return c<0?(c=dE.DEFAULT_CONSUMER_INACTIVE_THRESHOLD,this.warnings.push((0,Ss.consumerInactiveThresholdInvalidValueWarning)(this.subgraphName,`The value has been set to ${dE.DEFAULT_CONSUMER_INACTIVE_THRESHOLD}.`))):c>Lce.MAX_INT32&&(c=0,this.warnings.push((0,Ss.consumerInactiveThresholdInvalidValueWarning)(this.subgraphName,"The value has been set to 0. This means the consumer will remain indefinitely active until its manual deletion."))),M({fieldName:r,providerId:o,providerType:ne.PROVIDER_TYPE_NATS,subjects:a,type:ne.SUBSCRIBE},l&&p?{streamConfiguration:{consumerInactiveThreshold:c,consumerName:l,streamName:p}}:{})}getRedisPublishConfiguration(t,n,r,i){let a=[],o=ne.DEFAULT_EDFS_PROVIDER_ID;for(let c of t.arguments||[])switch(c.name.value){case ne.CHANNEL:{if(c.value.kind!==oe.Kind.STRING||c.value.value.length<1){i.push((0,pe.invalidEventSubjectErrorMessage)(ne.CHANNEL));continue}(0,ti.validateArgumentTemplateReferences)(c.value.value,n,i),a.push(c.value.value);break}case ne.PROVIDER_ID:{if(c.value.kind!==oe.Kind.STRING||c.value.value.length<1){i.push(pe.invalidEventProviderIdErrorMessage);continue}o=c.value.value;break}}if(!(i.length>0))return{fieldName:r,providerId:o,providerType:ne.PROVIDER_TYPE_REDIS,channels:a,type:ne.PUBLISH}}getRedisSubscribeConfiguration(t,n,r,i){let a=[],o=ne.DEFAULT_EDFS_PROVIDER_ID;for(let c of t.arguments||[])switch(c.name.value){case ne.CHANNELS:{if(c.value.kind!==oe.Kind.LIST){i.push((0,pe.invalidEventSubjectsErrorMessage)(ne.CHANNELS));continue}for(let l of c.value.values){if(l.kind!==oe.Kind.STRING||l.value.length<1){i.push((0,pe.invalidEventSubjectsItemErrorMessage)(ne.CHANNELS));break}(0,ti.validateArgumentTemplateReferences)(l.value,n,i),a.push(l.value)}break}case ne.PROVIDER_ID:{if(c.value.kind!==oe.Kind.STRING||c.value.value.length<1){i.push(pe.invalidEventProviderIdErrorMessage);continue}o=c.value.value;break}}if(!(i.length>0))return{fieldName:r,providerId:o,providerType:ne.PROVIDER_TYPE_REDIS,channels:a,type:ne.SUBSCRIBE}}validateSubscriptionFilterDirectiveLocation(t){if(!t.directives)return;let n=this.renamedParentTypeName||this.originalParentTypeName,r=`${n}.${t.name.value}`,i=this.getOperationTypeNodeForRootTypeName(n)===oe.OperationTypeNode.SUBSCRIPTION;for(let a of t.directives)if(a.name.value===ne.SUBSCRIPTION_FILTER&&!i){this.errors.push((0,pe.invalidSubscriptionFilterLocationError)(r));return}}extractEventDirectivesToConfiguration(t,n){if(!t.directives)return;let r=t.name.value,i=`${this.renamedParentTypeName||this.originalParentTypeName}.${r}`;for(let a of t.directives){let o=[],c;switch(a.name.value){case ne.EDFS_KAFKA_PUBLISH:c=this.getKafkaPublishConfiguration(a,n,r,o);break;case ne.EDFS_KAFKA_SUBSCRIBE:c=this.getKafkaSubscribeConfiguration(a,n,r,o);break;case ne.EDFS_NATS_PUBLISH:{c=this.getNatsPublishAndRequestConfiguration(ne.PUBLISH,a,n,r,o);break}case ne.EDFS_NATS_REQUEST:{c=this.getNatsPublishAndRequestConfiguration(ne.REQUEST,a,n,r,o);break}case ne.EDFS_NATS_SUBSCRIBE:{c=this.getNatsSubscribeConfiguration(a,n,r,o);break}case ne.EDFS_REDIS_PUBLISH:{c=this.getRedisPublishConfiguration(a,n,r,o);break}case ne.EDFS_REDIS_SUBSCRIBE:{c=this.getRedisSubscribeConfiguration(a,n,r,o);break}default:continue}if(o.length>0){this.errors.push((0,pe.invalidEventDirectiveError)(a.name.value,i,o));continue}c&&(0,Ge.getValueOrDefault)(this.eventsConfigurations,this.renamedParentTypeName||this.originalParentTypeName,()=>[]).push(c)}}getValidEventsDirectiveNamesForOperationTypeNode(t){switch(t){case oe.OperationTypeNode.MUTATION:return new Set([ne.EDFS_KAFKA_PUBLISH,ne.EDFS_NATS_PUBLISH,ne.EDFS_NATS_REQUEST,ne.EDFS_REDIS_PUBLISH]);case oe.OperationTypeNode.QUERY:return new Set([ne.EDFS_NATS_REQUEST]);case oe.OperationTypeNode.SUBSCRIPTION:return new Set([ne.EDFS_KAFKA_SUBSCRIBE,ne.EDFS_NATS_SUBSCRIBE,ne.EDFS_REDIS_SUBSCRIBE])}}getOperationTypeNodeForRootTypeName(t){let n=this.operationTypeNodeByTypeName.get(t);if(n)return n;switch(t){case ne.MUTATION:return oe.OperationTypeNode.MUTATION;case ne.QUERY:return oe.OperationTypeNode.QUERY;case ne.SUBSCRIPTION:return oe.OperationTypeNode.SUBSCRIPTION;default:return}}validateEventDrivenRootType(t,n,r,i){let a=this.getOperationTypeNodeForRootTypeName(t.name);if(!a){this.errors.push((0,pe.invalidRootTypeError)(t.name));return}let o=this.getValidEventsDirectiveNamesForOperationTypeNode(a);for(let[c,l]of t.fieldDataByFieldName){let p=`${l.originalParentTypeName}.${c}`,f=new Set;for(let K of lE.EVENT_DIRECTIVE_NAMES)l.directivesByDirectiveName.has(K)&&f.add(K);let y=new Set;for(let K of f)o.has(K)||y.add(K);if((f.size<1||y.size>0)&&n.set(p,{definesDirectives:f.size>0,invalidDirectiveNames:[...y]}),a===oe.OperationTypeNode.MUTATION){let K=(0,$i.printTypeNode)(l.type);K!==ne.NON_NULLABLE_EDFS_PUBLISH_EVENT_RESULT&&i.set(p,K);continue}let g=(0,$i.printTypeNode)(l.type),_=l.namedTypeName+"!",F=!1,U=this.concreteTypeNamesByAbstractTypeName.get(l.namedTypeName)||new Set([l.namedTypeName]);for(let K of U)if(F||(F=this.entityDataByTypeName.has(K)),F)break;(!F||g!==_)&&r.set(p,g)}}validateEventDrivenKeyDefinition(t,n){let r=this.keyFieldSetDatasByTypeName.get(t);if(r)for(let[i,{isUnresolvable:a}]of r)a||(0,Ge.getValueOrDefault)(n,t,()=>[]).push(i)}validateEventDrivenObjectFields(t,n,r,i){var a;for(let[o,c]of t){let l=`${c.originalParentTypeName}.${o}`;if(n.has(o)){(a=c.externalFieldDataBySubgraphName.get(this.subgraphName))!=null&&a.isDefinedExternal||r.set(l,o);continue}i.set(l,o)}}isEdfsPublishResultValid(){let t=this.parentDefinitionDataByTypeName.get(ne.EDFS_PUBLISH_RESULT);if(!t)return!0;if(t.kind!==oe.Kind.OBJECT_TYPE_DEFINITION||t.fieldDataByFieldName.size!=1)return!1;for(let[n,r]of t.fieldDataByFieldName)if(r.argumentDataByArgumentName.size>0||n!==ne.SUCCESS||(0,$i.printTypeNode)(r.type)!==ne.NON_NULLABLE_BOOLEAN)return!1;return!0}isNatsStreamConfigurationInputObjectValid(t){if(t.kind!==oe.Kind.INPUT_OBJECT_TYPE_DEFINITION||t.inputValueDataByValueName.size!=3)return!1;for(let[n,r]of t.inputValueDataByValueName)switch(n){case ne.CONSUMER_INACTIVE_THRESHOLD:{if((0,$i.printTypeNode)(r.type)!==ne.NON_NULLABLE_INT||!r.defaultValue||r.defaultValue.kind!==oe.Kind.INT||r.defaultValue.value!==`${dE.DEFAULT_CONSUMER_INACTIVE_THRESHOLD}`)return!1;break}case ne.CONSUMER_NAME:case ne.STREAM_NAME:{if((0,$i.printTypeNode)(r.type)!==ne.NON_NULLABLE_STRING)return!1;break}default:return!1}return!0}validateEventDrivenSubgraph(t){let n=[],r=new Map,i=new Map,a=new Map,o=new Map,c=new Map,l=new Map,p=new Set,f=new Set;for(let[y,g]of this.parentDefinitionDataByTypeName){if(y===ne.EDFS_PUBLISH_RESULT||y===ne.EDFS_NATS_STREAM_CONFIGURATION||g.kind!==oe.Kind.OBJECT_TYPE_DEFINITION)continue;if(g.isRootType){this.validateEventDrivenRootType(g,r,i,a);continue}let _=this.keyFieldNamesByParentTypeName.get(y);if(!_){f.add(y);continue}this.validateEventDrivenKeyDefinition(y,o),this.validateEventDrivenObjectFields(g.fieldDataByFieldName,_,c,l)}if(this.isEdfsPublishResultValid()||n.push(pe.invalidEdfsPublishResultObjectErrorMessage),this.edfsDirectiveReferences.has(ne.EDFS_NATS_SUBSCRIBE)){let y=this.parentDefinitionDataByTypeName.get(ne.EDFS_NATS_STREAM_CONFIGURATION);y&&this.usesEdfsNatsStreamConfiguration&&!this.isNatsStreamConfigurationInputObjectValid(y)&&n.push(pe.invalidNatsStreamConfigurationDefinitionErrorMessage),this.parentDefinitionDataByTypeName.delete(ne.EDFS_NATS_STREAM_CONFIGURATION),t.push(en.EDFS_NATS_STREAM_CONFIGURATION_DEFINITION)}this.referencedDirectiveNames.has(ne.LINK)&&(t.push(en.LINK_DEFINITION),t.push(en.LINK_IMPORT_DEFINITION),t.push(en.LINK_PURPOSE_DEFINITION)),r.size>0&&n.push((0,pe.invalidRootTypeFieldEventsDirectivesErrorMessage)(r)),a.size>0&&n.push((0,pe.invalidEventDrivenMutationResponseTypeErrorMessage)(a)),i.size>0&&n.push((0,pe.invalidRootTypeFieldResponseTypesEventDrivenErrorMessage)(i)),o.size>0&&n.push((0,pe.invalidKeyFieldSetsEventDrivenErrorMessage)(o)),c.size>0&&n.push((0,pe.nonExternalKeyFieldNamesEventDrivenErrorMessage)(c)),l.size>0&&n.push((0,pe.nonKeyFieldNamesEventDrivenErrorMessage)(l)),p.size>0&&n.push((0,pe.nonEntityObjectExtensionsEventDrivenErrorMessage)([...p])),f.size>0&&n.push((0,pe.nonKeyComposingObjectTypeNamesEventDrivenErrorMessage)([...f])),n.length>0&&this.errors.push((0,pe.invalidEventDrivenGraphError)(n))}validateUnionMembers(t){if(t.memberByMemberTypeName.size<1){this.errors.push((0,pe.noDefinedUnionMembersError)(t.name));return}let n=[];for(let r of t.memberByMemberTypeName.keys()){let i=this.parentDefinitionDataByTypeName.get(r);i&&i.kind!==oe.Kind.OBJECT_TYPE_DEFINITION&&n.push(`"${r}", which is type "${(0,Ge.kindToTypeString)(i.kind)}"`)}n.length>0&&this.errors.push((0,pe.invalidUnionMemberTypeError)(t.name,n))}addConcreteTypeNamesForUnion(t){if(!t.types||t.types.length<1)return;let n=t.name.value;for(let r of t.types){let i=r.name.value;(0,Ge.getValueOrDefault)(this.concreteTypeNamesByAbstractTypeName,n,()=>new Set).add(i),this.internalGraph.addEdge(this.internalGraph.addOrUpdateNode(n,{isAbstract:!0}),this.internalGraph.addOrUpdateNode(i),i,!0)}}addValidKeyFieldSetConfigurations(){for(let[t,n]of this.keyFieldSetDatasByTypeName){let r=this.parentDefinitionDataByTypeName.get(t);if(!r||r.kind!==oe.Kind.OBJECT_TYPE_DEFINITION&&r.kind!==oe.Kind.INTERFACE_TYPE_DEFINITION){this.errors.push((0,pe.undefinedCompositeOutputTypeError)(t));continue}let i=(0,gn.getParentTypeName)(r),a=(0,Ge.getValueOrDefault)(this.configurationDataByTypeName,i,()=>(0,wp.newConfigurationData)(!0,i)),o=(0,ti.validateKeyFieldSets)(this,r,n);o&&(a.keys=o)}}getValidFlattenedDirectiveArray(t,n){let r=[];for(let[i,a]of t){let o=this.directiveDefinitionDataByDirectiveName.get(i);if(!o)continue;if(!o.isRepeatable&&a.length>1){let p=(0,Ge.getValueOrDefault)(this.invalidRepeatedDirectiveNameByCoords,n,()=>new Set);p.has(i)||(p.add(i),this.errors.push((0,pe.invalidDirectiveError)(i,n,"1st",[(0,pe.invalidRepeatedDirectiveErrorMessage)(i)])));continue}if(i!==ne.KEY){r.push(...a);continue}let c=[],l=new Set;for(let p=0;pnew Set).add(U)),(0,Ge.getValueOrDefault)(a.keyFieldNamesByParentTypeName,_,()=>new Set).add(F);let ee=(0,ir.getTypeNodeNamedTypeName)(K.node.type);if(en.BASE_SCALARS.has(ee))return;let W=a.parentDefinitionDataByTypeName.get(ee);if(!W)return _n.BREAK;if(W.kind===oe.Kind.OBJECT_TYPE_DEFINITION){f=!0,c.push(W);return}if((0,Dn.isKindAbstract)(W.kind))return _n.BREAK}},InlineFragment:{enter(){return _n.BREAK}},SelectionSet:{enter(){if(!f||(p+=1,f=!1,p<0||p>=c.length))return _n.BREAK},leave(){f&&(f=!1),p-=1,c.pop()}}}),!(l.size<1))for(let[y,g]of l)this.warnings.push((0,Ss.externalEntityExtensionKeyFieldWarning)(i.name,y,[...g],this.subgraphName))}}for(let n of t)this.keyFieldSetDatasByTypeName.delete(n)}addValidConditionalFieldSetConfigurations(){for(let[t,n]of this.fieldSetDataByTypeName){let r=this.parentDefinitionDataByTypeName.get(t);if(!r||r.kind!==oe.Kind.OBJECT_TYPE_DEFINITION&&r.kind!==oe.Kind.INTERFACE_TYPE_DEFINITION){this.errors.push((0,pe.undefinedCompositeOutputTypeError)(t));continue}let i=(0,gn.getParentTypeName)(r),a=(0,Ge.getValueOrDefault)(this.configurationDataByTypeName,i,()=>(0,wp.newConfigurationData)(!1,i)),o=this.validateProvidesOrRequires(r,n.provides,!0);o&&(a.provides=o);let c=this.validateProvidesOrRequires(r,n.requires,!1);c&&(a.requires=c)}}addFieldNamesToConfigurationData(t,n){let r=new Set;for(let[i,a]of t){let o=a.externalFieldDataBySubgraphName.get(this.subgraphName);if(!o||o.isUnconditionallyProvided){n.fieldNames.add(i);continue}r.add(i),this.edfsDirectiveReferences.size>0&&n.fieldNames.add(i)}r.size>0&&(n.externalFieldNames=r)}normalize(t){var a;(0,Iq.upsertDirectiveSchemaAndEntityDefinitions)(this,t),(0,Iq.upsertParentsAndChildren)(this,t),this.validateDirectives(this.schemaData,ne.SCHEMA);for(let[o,c]of this.parentDefinitionDataByTypeName)this.validateDirectives(c,o);this.invalidORScopesCoords.size>0&&this.errors.push((0,pe.orScopesLimitError)(en.MAX_OR_SCOPES,[...this.invalidORScopesCoords]));let n=[];for(let o of en.BASE_DIRECTIVE_DEFINITIONS)n.push(o);if(n.push(en.FIELD_SET_SCALAR_DEFINITION),this.isSubgraphVersionTwo){for(let o of en.VERSION_TWO_DIRECTIVE_DEFINITIONS)n.push(o),this.directiveDefinitionByDirectiveName.set(o.name.value,o);n.push(en.SCOPE_SCALAR_DEFINITION)}for(let o of this.edfsDirectiveReferences){let c=en.EVENT_DRIVEN_DIRECTIVE_DEFINITIONS_BY_DIRECTIVE_NAME.get(o);if(!c){this.errors.push((0,pe.invalidEdfsDirectiveName)(o));continue}n.push(c)}this.edfsDirectiveReferences.size>0&&this.referencedDirectiveNames.has(ne.SUBSCRIPTION_FILTER)&&(n.push(en.SUBSCRIPTION_FILTER_DEFINITION),n.push(en.SUBSCRIPTION_FILTER_CONDITION_DEFINITION),n.push(en.SUBSCRIPTION_FIELD_CONDITION_DEFINITION),n.push(en.SUBSCRIPTION_FILTER_VALUE_DEFINITION)),this.referencedDirectiveNames.has(ne.CONFIGURE_DESCRIPTION)&&n.push(en.CONFIGURE_DESCRIPTION_DEFINITION),this.referencedDirectiveNames.has(ne.CONFIGURE_CHILD_DESCRIPTIONS)&&n.push(en.CONFIGURE_CHILD_DESCRIPTIONS_DEFINITION);for(let o of this.customDirectiveDefinitions.values())n.push(o);this.schemaData.operationTypes.size>0&&n.push(this.getSchemaNodeByData(this.schemaData));for(let o of this.invalidConfigureDescriptionNodeDatas)o.description||this.errors.push((0,pe.configureDescriptionNoDescriptionError)((0,Ge.kindToTypeString)(o.kind),o.name));this.evaluateExternalKeyFields();for(let[o,c]of this.parentDefinitionDataByTypeName)switch(c.kind){case oe.Kind.ENUM_TYPE_DEFINITION:if(c.enumValueDataByValueName.size<1){this.errors.push((0,pe.noDefinedEnumValuesError)(o));break}n.push(this.getEnumNodeByData(c));break;case oe.Kind.INPUT_OBJECT_TYPE_DEFINITION:if(c.inputValueDataByValueName.size<1){this.errors.push((0,pe.noInputValueDefinitionsError)(o));break}n.push(this.getInputObjectNodeByData(c));break;case oe.Kind.INTERFACE_TYPE_DEFINITION:case oe.Kind.OBJECT_TYPE_DEFINITION:let l=this.entityDataByTypeName.has(o),p=this.operationTypeNodeByTypeName.get(o),f=c.kind===oe.Kind.OBJECT_TYPE_DEFINITION;if(this.isSubgraphVersionTwo&&c.extensionType===$a.ExtensionType.EXTENDS&&(c.extensionType=$a.ExtensionType.NONE),p&&(c.fieldDataByFieldName.delete(ne.SERVICE_FIELD),c.fieldDataByFieldName.delete(ne.ENTITIES_FIELD)),(0,gn.removeInheritableDirectivesFromObjectParent)(c),this.parentsWithChildArguments.has(o)||!f){let U=[];for(let[K,J]of c.fieldDataByFieldName)!f&&((a=J.externalFieldDataBySubgraphName.get(this.subgraphName))!=null&&a.isDefinedExternal)&&U.push(K),this.validateArguments(J,`${o}.${K}`);U.length>0&&(this.isSubgraphVersionTwo?this.errors.push((0,pe.externalInterfaceFieldsError)(o,U)):this.warnings.push((0,Ss.externalInterfaceFieldsWarning)(this.subgraphName,o,U)))}let y=(0,gn.getParentTypeName)(c),g=(0,Ge.getValueOrDefault)(this.configurationDataByTypeName,y,()=>(0,wp.newConfigurationData)(l,o)),_=this.entityInterfaceDataByTypeName.get(o);if(_){_.fieldDatas=(0,ar.fieldDatasToSimpleFieldDatas)(c.fieldDataByFieldName.values());let U=this.concreteTypeNamesByAbstractTypeName.get(o);U&&(0,Ge.addIterableValuesToSet)(U,_.concreteTypeNames),g.isInterfaceObject=_.isInterfaceObject,g.entityInterfaceConcreteTypeNames=_.concreteTypeNames}let F=this.eventsConfigurations.get(y);F&&(g.events=F),this.addFieldNamesToConfigurationData(c.fieldDataByFieldName,g),this.validateInterfaceImplementations(c),n.push(this.getCompositeOutputNodeByData(c)),c.fieldDataByFieldName.size<1&&!(0,ti.isNodeQuery)(o,p)&&this.errors.push((0,pe.noFieldDefinitionsError)((0,Ge.kindToTypeString)(c.kind),o));break;case oe.Kind.SCALAR_TYPE_DEFINITION:if(c.extensionType===$a.ExtensionType.REAL){this.errors.push((0,pe.noBaseScalarDefinitionError)(o));break}n.push(this.getScalarNodeByData(c));break;case oe.Kind.UNION_TYPE_DEFINITION:n.push(this.getUnionNodeByData(c)),this.validateUnionMembers(c);break;default:throw(0,pe.unexpectedKindFatalError)(o)}this.addValidConditionalFieldSetConfigurations(),this.addValidKeyFieldSetConfigurations();for(let o of Object.values(oe.OperationTypeNode)){let c=this.schemaData.operationTypes.get(o),l=(0,Ge.getOrThrowError)(Dn.operationTypeNodeToDefaultType,o,ne.OPERATION_TO_DEFAULT),p=c?(0,ir.getTypeNodeNamedTypeName)(c.type):l;if(en.BASE_SCALARS.has(p)&&this.referencedTypeNames.add(p),p!==l&&this.parentDefinitionDataByTypeName.has(l)){this.errors.push((0,pe.invalidRootTypeDefinitionError)(o,p,l));continue}let f=this.parentDefinitionDataByTypeName.get(p);if(c){if(!f)continue;this.operationTypeNodeByTypeName.set(p,o)}if(!f)continue;let y=this.configurationDataByTypeName.get(l);y&&(y.isRootNode=!0,y.typeName=l),f.kind!==oe.Kind.OBJECT_TYPE_DEFINITION&&this.errors.push((0,pe.operationDefinitionError)(p,o,f.kind))}for(let o of this.referencedTypeNames){let c=this.parentDefinitionDataByTypeName.get(o);if(c){if(c.kind!==oe.Kind.INTERFACE_TYPE_DEFINITION)continue;let l=this.concreteTypeNamesByAbstractTypeName.get(o);(!l||l.size<0)&&this.warnings.push((0,Ss.unimplementedInterfaceOutputTypeWarning)(this.subgraphName,o));continue}this.entityDataByTypeName.has(o)||this.errors.push((0,pe.undefinedTypeError)(o))}let r=new Map;for(let o of this.directiveDefinitionByDirectiveName.values()){let c=(0,Dn.extractExecutableDirectiveLocations)(o.locations,new Set);c.size<1||this.addPersistedDirectiveDefinitionDataByNode(r,o,c)}this.isSubgraphEventDrivenGraph=this.edfsDirectiveReferences.size>0,this.isSubgraphEventDrivenGraph&&this.validateEventDrivenSubgraph(n);for(let o of this.unvalidatedExternalFieldCoords)this.isSubgraphVersionTwo?this.errors.push((0,pe.invalidExternalDirectiveError)(o)):this.warnings.push((0,Ss.invalidExternalFieldWarning)(o,this.subgraphName));if(this.errors.length>0)return{success:!1,errors:this.errors,warnings:this.warnings};let i={kind:oe.Kind.DOCUMENT,definitions:n};return{authorizationDataByParentTypeName:this.authorizationDataByParentTypeName,concreteTypeNamesByAbstractTypeName:this.concreteTypeNamesByAbstractTypeName,conditionalFieldDataByCoordinates:this.conditionalFieldDataByCoords,configurationDataByTypeName:this.configurationDataByTypeName,entityDataByTypeName:this.entityDataByTypeName,entityInterfaces:this.entityInterfaceDataByTypeName,fieldCoordsByNamedTypeName:this.fieldCoordsByNamedTypeName,isEventDrivenGraph:this.isSubgraphEventDrivenGraph,isVersionTwo:this.isSubgraphVersionTwo,keyFieldNamesByParentTypeName:this.keyFieldNamesByParentTypeName,keyFieldSetsByEntityTypeNameByKeyFieldCoords:this.keyFieldSetsByEntityTypeNameByFieldCoords,operationTypes:this.operationTypeNodeByTypeName,originalTypeNameByRenamedTypeName:this.originalTypeNameByRenamedTypeName,overridesByTargetSubgraphName:this.overridesByTargetSubgraphName,parentDefinitionDataByTypeName:this.parentDefinitionDataByTypeName,persistedDirectiveDefinitionDataByDirectiveName:r,subgraphAST:i,subgraphString:(0,oe.print)(i),schema:(0,Pce.buildASTSchema)(i,{assumeValid:!0,assumeValidSDL:!0}),success:!0,warnings:this.warnings}}};sc.NormalizationFactory=Lp;function Bce(e){let t=new Map,n=new Map,r=new Map,i=new Map,a=new Map,o=new Map,c=new Set,l=new Map,p=new Set,f=new Set,y=[],g=new Set,_=new Map,F=[],U=[];for(let ee of e)ee.name&&(0,wce.recordSubgraphName)(ee.name,p,f);let K=new CO.Graph;for(let ee=0;ee0&&F.push(...de.warnings),!de.success){U.push((0,pe.subgraphValidationError)(Te,de.errors));continue}if(!de){U.push((0,pe.subgraphValidationError)(Te,[pe.subgraphValidationFailureError]));continue}l.set(Te,de.parentDefinitionDataByTypeName);for(let we of de.authorizationDataByParentTypeName.values())(0,ar.upsertAuthorizationData)(t,we,g);for(let[we,qe]of de.fieldCoordsByNamedTypeName)(0,Ge.addIterableValuesToSet)(qe,(0,Ge.getValueOrDefault)(_,we,()=>new Set));for(let[we,qe]of de.concreteTypeNamesByAbstractTypeName){let et=n.get(we);if(!et){n.set(we,new Set(qe));continue}(0,Ge.addIterableValuesToSet)(qe,et)}for(let[we,qe]of de.entityDataByTypeName){let et=qe.keyFieldSetDatasBySubgraphName.get(Te);et&&(0,ar.upsertEntityData)({entityDataByTypeName:r,keyFieldSetDataByFieldSet:et,typeName:we,subgraphName:Te})}if(W.name&&i.set(Te,{conditionalFieldDataByCoordinates:de.conditionalFieldDataByCoordinates,configurationDataByTypeName:de.configurationDataByTypeName,definitions:de.subgraphAST,entityInterfaces:de.entityInterfaces,isVersionTwo:de.isVersionTwo,keyFieldNamesByParentTypeName:de.keyFieldNamesByParentTypeName,name:Te,operationTypes:de.operationTypes,overriddenFieldNamesByParentTypeName:new Map,parentDefinitionDataByTypeName:de.parentDefinitionDataByTypeName,persistedDirectiveDefinitionDataByDirectiveName:de.persistedDirectiveDefinitionDataByDirectiveName,schema:de.schema,url:W.url}),!(de.overridesByTargetSubgraphName.size<1))for(let[we,qe]of de.overridesByTargetSubgraphName){let et=p.has(we);for(let[X,ve]of qe){let gt=de.originalTypeNameByRenamedTypeName.get(X)||X;if(!et)F.push((0,Ss.invalidOverrideTargetSubgraphNameWarning)(we,gt,[...ve],W.name));else{let Ht=(0,Ge.getValueOrDefault)(a,we,()=>new Map),zt=(0,Ge.getValueOrDefault)(Ht,X,()=>new Set(ve));(0,Ge.addIterableValuesToSet)(ve,zt)}for(let Ht of ve){let zt=`${gt}.${Ht}`,bn=o.get(zt);if(!bn){o.set(zt,[Te]);continue}bn.push(Te),c.add(zt)}}}}let J=[];if(g.size>0&&J.push((0,pe.orScopesLimitError)(en.MAX_OR_SCOPES,[...g])),(y.length>0||f.size>0)&&J.push((0,pe.invalidSubgraphNamesError)([...f],y)),c.size>0){let ee=[];for(let W of c){let Te=(0,Ge.getOrThrowError)(o,W,"overrideSourceSubgraphNamesByFieldPath");ee.push((0,pe.duplicateOverriddenFieldErrorMessage)(W,Te))}J.push((0,pe.duplicateOverriddenFieldsError)(ee))}if(J.push(...U),J.length>0)return{errors:J,success:!1,warnings:F};for(let[ee,W]of a){let Te=(0,Ge.getOrThrowError)(i,ee,"internalSubgraphBySubgraphName");Te.overriddenFieldNamesByParentTypeName=W;for(let[de,we]of W){let qe=Te.configurationDataByTypeName.get(de);qe&&((0,ar.subtractSet)(we,qe.fieldNames),qe.fieldNames.size<1&&Te.configurationDataByTypeName.delete(de))}}return{authorizationDataByParentTypeName:t,concreteTypeNamesByAbstractTypeName:n,entityDataByTypeName:r,fieldCoordsByNamedTypeName:_,internalSubgraphBySubgraphName:i,internalGraph:K,success:!0,warnings:F}}});var pE=w(cc=>{"use strict";m();T();N();Object.defineProperty(cc,"__esModule",{value:!0});cc.DivergentType=void 0;cc.getLeastRestrictiveMergedTypeNode=kce;cc.getMostRestrictiveMergedTypeNode=Mce;cc.renameNamedTypeName=xce;var oc=Ae(),vq=sa(),Uce=Ho(),_q=Jr(),Sq=nl(),uc;(function(e){e[e.NONE=0]="NONE",e[e.CURRENT=1]="CURRENT",e[e.OTHER=2]="OTHER"})(uc||(cc.DivergentType=uc={}));function Oq(e,t,n,r,i){t=(0,Uce.getMutableTypeNode)(t,n,i);let a={kind:e.kind},o=uc.NONE,c=a;for(let l=0;l{"use strict";m();T();N();Object.defineProperty(kO,"__esModule",{value:!0});kO.renameRootTypes=jce;var qce=Ae(),UO=Jr(),Vce=pE(),su=lr(),lc=Hr();function jce(e,t){let n,r=!1,i;(0,qce.visit)(t.definitions,{FieldDefinition:{enter(a){let o=a.name.value;if(r&&(o===su.SERVICE_FIELD||o===su.ENTITIES_FIELD))return n.fieldDataByFieldName.delete(o),!1;let c=n.name,l=(0,lc.getOrThrowError)(n.fieldDataByFieldName,o,`${c}.fieldDataByFieldName`),p=t.operationTypes.get(l.namedTypeName);if(p){let f=(0,lc.getOrThrowError)(UO.operationTypeNodeToDefaultType,p,su.OPERATION_TO_DEFAULT);l.namedTypeName!==f&&(0,Vce.renameNamedTypeName)(l,f,e.errors)}return i!=null&&i.has(o)&&l.isShareableBySubgraphName.delete(t.name),!1}},InterfaceTypeDefinition:{enter(a){let o=a.name.value;if(!e.entityInterfaceFederationDataByTypeName.get(o))return!1;n=(0,lc.getOrThrowError)(t.parentDefinitionDataByTypeName,o,su.PARENT_DEFINITION_DATA)},leave(){n=void 0}},ObjectTypeDefinition:{enter(a){let o=a.name.value,c=t.operationTypes.get(o),l=c?(0,lc.getOrThrowError)(UO.operationTypeNodeToDefaultType,c,su.OPERATION_TO_DEFAULT):o;n=(0,lc.getOrThrowError)(t.parentDefinitionDataByTypeName,o,su.PARENT_DEFINITION_DATA),r=n.isRootType,!e.entityInterfaceFederationDataByTypeName.get(o)&&(e.addValidPrimaryKeyTargetsToEntityData(o),i=t.overriddenFieldNamesByParentTypeName.get(l),o!==l&&(n.name=l,t.parentDefinitionDataByTypeName.set(l,n),t.parentDefinitionDataByTypeName.delete(o)))},leave(){n=void 0,r=!1,i=void 0}},ObjectTypeExtension:{enter(a){let o=a.name.value,c=t.operationTypes.get(o),l=c?(0,lc.getOrThrowError)(UO.operationTypeNodeToDefaultType,c,su.OPERATION_TO_DEFAULT):o;n=(0,lc.getOrThrowError)(t.parentDefinitionDataByTypeName,o,su.PARENT_DEFINITION_DATA),r=n.isRootType,e.addValidPrimaryKeyTargetsToEntityData(o),i=t.overriddenFieldNamesByParentTypeName.get(o),o!==l&&(n.name=l,t.parentDefinitionDataByTypeName.set(l,n),t.parentDefinitionDataByTypeName.delete(o))},leave(){n=void 0,r=!1,i=void 0}}})}});var Dq=w((wl,Cp)=>{"use strict";m();T();N();(function(){var e,t="4.17.21",n=200,r="Unsupported core-js use. Try https://npms.io/search?q=ponyfill.",i="Expected a function",a="Invalid `variable` option passed into `_.template`",o="__lodash_hash_undefined__",c=500,l="__lodash_placeholder__",p=1,f=2,y=4,g=1,_=2,F=1,U=2,K=4,J=8,ee=16,W=32,Te=64,de=128,we=256,qe=512,et=30,X="...",ve=800,gt=16,Ht=1,zt=2,bn=3,Vt=1/0,dn=9007199254740991,Rr=17976931348623157e292,Fr=NaN,kn=4294967295,$t=kn-1,An=kn>>>1,se=[["ary",de],["bind",F],["bindKey",U],["curry",J],["curryRight",ee],["flip",qe],["partial",W],["partialRight",Te],["rearg",we]],De="[object Arguments]",_e="[object Array]",Le="[object AsyncFunction]",_t="[object Boolean]",Y="[object Date]",ae="[object DOMException]",Me="[object Error]",Qe="[object Function]",Lt="[object GeneratorFunction]",tt="[object Map]",bt="[object Number]",za="[object Null]",qr="[object Object]",Wa="[object Promise]",Ic="[object Proxy]",ya="[object RegExp]",mr="[object Set]",ri="[object String]",Mt="[object Symbol]",Nr="[object Undefined]",lu="[object WeakMap]",Ia="[object WeakSet]",du="[object ArrayBuffer]",A="[object DataView]",h="[object Float32Array]",I="[object Float64Array]",C="[object Int8Array]",G="[object Int16Array]",te="[object Int32Array]",le="[object Uint8Array]",pt="[object Uint8ClampedArray]",pn="[object Uint16Array]",tn="[object Uint32Array]",En=/\b__p \+= '';/g,Wt=/\b(__p \+=) '' \+/g,zV=/(__e\(.*?\)|\b__t\)) \+\n'';/g,RD=/&(?:amp|lt|gt|quot|#39);/g,FD=/[&<>"']/g,WV=RegExp(RD.source),XV=RegExp(FD.source),ZV=/<%-([\s\S]+?)%>/g,ej=/<%([\s\S]+?)%>/g,PD=/<%=([\s\S]+?)%>/g,tj=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,nj=/^\w*$/,rj=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,$E=/[\\^$.*+?()[\]{}|]/g,ij=RegExp($E.source),QE=/^\s+/,aj=/\s/,sj=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/,oj=/\{\n\/\* \[wrapped with (.+)\] \*/,uj=/,? & /,cj=/[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g,lj=/[()=,{}\[\]\/\s]/,dj=/\\(\\)?/g,pj=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,wD=/\w*$/,fj=/^[-+]0x[0-9a-f]+$/i,mj=/^0b[01]+$/i,Nj=/^\[object .+?Constructor\]$/,Tj=/^0o[0-7]+$/i,Ej=/^(?:0|[1-9]\d*)$/,hj=/[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g,tf=/($^)/,yj=/['\n\r\u2028\u2029\\]/g,nf="\\ud800-\\udfff",Ij="\\u0300-\\u036f",gj="\\ufe20-\\ufe2f",_j="\\u20d0-\\u20ff",LD=Ij+gj+_j,CD="\\u2700-\\u27bf",BD="a-z\\xdf-\\xf6\\xf8-\\xff",vj="\\xac\\xb1\\xd7\\xf7",Sj="\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf",Oj="\\u2000-\\u206f",Dj=" \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000",UD="A-Z\\xc0-\\xd6\\xd8-\\xde",kD="\\ufe0e\\ufe0f",MD=vj+Sj+Oj+Dj,YE="['\u2019]",bj="["+nf+"]",xD="["+MD+"]",rf="["+LD+"]",qD="\\d+",Aj="["+CD+"]",VD="["+BD+"]",jD="[^"+nf+MD+qD+CD+BD+UD+"]",JE="\\ud83c[\\udffb-\\udfff]",Rj="(?:"+rf+"|"+JE+")",KD="[^"+nf+"]",HE="(?:\\ud83c[\\udde6-\\uddff]){2}",zE="[\\ud800-\\udbff][\\udc00-\\udfff]",gc="["+UD+"]",GD="\\u200d",$D="(?:"+VD+"|"+jD+")",Fj="(?:"+gc+"|"+jD+")",QD="(?:"+YE+"(?:d|ll|m|re|s|t|ve))?",YD="(?:"+YE+"(?:D|LL|M|RE|S|T|VE))?",JD=Rj+"?",HD="["+kD+"]?",Pj="(?:"+GD+"(?:"+[KD,HE,zE].join("|")+")"+HD+JD+")*",wj="\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])",Lj="\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])",zD=HD+JD+Pj,Cj="(?:"+[Aj,HE,zE].join("|")+")"+zD,Bj="(?:"+[KD+rf+"?",rf,HE,zE,bj].join("|")+")",Uj=RegExp(YE,"g"),kj=RegExp(rf,"g"),WE=RegExp(JE+"(?="+JE+")|"+Bj+zD,"g"),Mj=RegExp([gc+"?"+VD+"+"+QD+"(?="+[xD,gc,"$"].join("|")+")",Fj+"+"+YD+"(?="+[xD,gc+$D,"$"].join("|")+")",gc+"?"+$D+"+"+QD,gc+"+"+YD,Lj,wj,qD,Cj].join("|"),"g"),xj=RegExp("["+GD+nf+LD+kD+"]"),qj=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,Vj=["Array","Buffer","DataView","Date","Error","Float32Array","Float64Array","Function","Int8Array","Int16Array","Int32Array","Map","Math","Object","Promise","RegExp","Set","String","Symbol","TypeError","Uint8Array","Uint8ClampedArray","Uint16Array","Uint32Array","WeakMap","_","clearTimeout","isFinite","parseInt","setTimeout"],jj=-1,Nn={};Nn[h]=Nn[I]=Nn[C]=Nn[G]=Nn[te]=Nn[le]=Nn[pt]=Nn[pn]=Nn[tn]=!0,Nn[De]=Nn[_e]=Nn[du]=Nn[_t]=Nn[A]=Nn[Y]=Nn[Me]=Nn[Qe]=Nn[tt]=Nn[bt]=Nn[qr]=Nn[ya]=Nn[mr]=Nn[ri]=Nn[lu]=!1;var fn={};fn[De]=fn[_e]=fn[du]=fn[A]=fn[_t]=fn[Y]=fn[h]=fn[I]=fn[C]=fn[G]=fn[te]=fn[tt]=fn[bt]=fn[qr]=fn[ya]=fn[mr]=fn[ri]=fn[Mt]=fn[le]=fn[pt]=fn[pn]=fn[tn]=!0,fn[Me]=fn[Qe]=fn[lu]=!1;var Kj={\u00C0:"A",\u00C1:"A",\u00C2:"A",\u00C3:"A",\u00C4:"A",\u00C5:"A",\u00E0:"a",\u00E1:"a",\u00E2:"a",\u00E3:"a",\u00E4:"a",\u00E5:"a",\u00C7:"C",\u00E7:"c",\u00D0:"D",\u00F0:"d",\u00C8:"E",\u00C9:"E",\u00CA:"E",\u00CB:"E",\u00E8:"e",\u00E9:"e",\u00EA:"e",\u00EB:"e",\u00CC:"I",\u00CD:"I",\u00CE:"I",\u00CF:"I",\u00EC:"i",\u00ED:"i",\u00EE:"i",\u00EF:"i",\u00D1:"N",\u00F1:"n",\u00D2:"O",\u00D3:"O",\u00D4:"O",\u00D5:"O",\u00D6:"O",\u00D8:"O",\u00F2:"o",\u00F3:"o",\u00F4:"o",\u00F5:"o",\u00F6:"o",\u00F8:"o",\u00D9:"U",\u00DA:"U",\u00DB:"U",\u00DC:"U",\u00F9:"u",\u00FA:"u",\u00FB:"u",\u00FC:"u",\u00DD:"Y",\u00FD:"y",\u00FF:"y",\u00C6:"Ae",\u00E6:"ae",\u00DE:"Th",\u00FE:"th",\u00DF:"ss",\u0100:"A",\u0102:"A",\u0104:"A",\u0101:"a",\u0103:"a",\u0105:"a",\u0106:"C",\u0108:"C",\u010A:"C",\u010C:"C",\u0107:"c",\u0109:"c",\u010B:"c",\u010D:"c",\u010E:"D",\u0110:"D",\u010F:"d",\u0111:"d",\u0112:"E",\u0114:"E",\u0116:"E",\u0118:"E",\u011A:"E",\u0113:"e",\u0115:"e",\u0117:"e",\u0119:"e",\u011B:"e",\u011C:"G",\u011E:"G",\u0120:"G",\u0122:"G",\u011D:"g",\u011F:"g",\u0121:"g",\u0123:"g",\u0124:"H",\u0126:"H",\u0125:"h",\u0127:"h",\u0128:"I",\u012A:"I",\u012C:"I",\u012E:"I",\u0130:"I",\u0129:"i",\u012B:"i",\u012D:"i",\u012F:"i",\u0131:"i",\u0134:"J",\u0135:"j",\u0136:"K",\u0137:"k",\u0138:"k",\u0139:"L",\u013B:"L",\u013D:"L",\u013F:"L",\u0141:"L",\u013A:"l",\u013C:"l",\u013E:"l",\u0140:"l",\u0142:"l",\u0143:"N",\u0145:"N",\u0147:"N",\u014A:"N",\u0144:"n",\u0146:"n",\u0148:"n",\u014B:"n",\u014C:"O",\u014E:"O",\u0150:"O",\u014D:"o",\u014F:"o",\u0151:"o",\u0154:"R",\u0156:"R",\u0158:"R",\u0155:"r",\u0157:"r",\u0159:"r",\u015A:"S",\u015C:"S",\u015E:"S",\u0160:"S",\u015B:"s",\u015D:"s",\u015F:"s",\u0161:"s",\u0162:"T",\u0164:"T",\u0166:"T",\u0163:"t",\u0165:"t",\u0167:"t",\u0168:"U",\u016A:"U",\u016C:"U",\u016E:"U",\u0170:"U",\u0172:"U",\u0169:"u",\u016B:"u",\u016D:"u",\u016F:"u",\u0171:"u",\u0173:"u",\u0174:"W",\u0175:"w",\u0176:"Y",\u0177:"y",\u0178:"Y",\u0179:"Z",\u017B:"Z",\u017D:"Z",\u017A:"z",\u017C:"z",\u017E:"z",\u0132:"IJ",\u0133:"ij",\u0152:"Oe",\u0153:"oe",\u0149:"'n",\u017F:"s"},Gj={"&":"&","<":"<",">":">",'"':""","'":"'"},$j={"&":"&","<":"<",">":">",""":'"',"'":"'"},Qj={"\\":"\\","'":"'","\n":"n","\r":"r","\u2028":"u2028","\u2029":"u2029"},Yj=parseFloat,Jj=parseInt,WD=typeof global=="object"&&global&&global.Object===Object&&global,Hj=typeof self=="object"&&self&&self.Object===Object&&self,sr=WD||Hj||Function("return this")(),XE=typeof wl=="object"&&wl&&!wl.nodeType&&wl,pu=XE&&typeof Cp=="object"&&Cp&&!Cp.nodeType&&Cp,XD=pu&&pu.exports===XE,ZE=XD&&WD.process,Ti=function(){try{var $=pu&&pu.require&&pu.require("util").types;return $||ZE&&ZE.binding&&ZE.binding("util")}catch(ce){}}(),ZD=Ti&&Ti.isArrayBuffer,eb=Ti&&Ti.isDate,tb=Ti&&Ti.isMap,nb=Ti&&Ti.isRegExp,rb=Ti&&Ti.isSet,ib=Ti&&Ti.isTypedArray;function ii($,ce,re){switch(re.length){case 0:return $.call(ce);case 1:return $.call(ce,re[0]);case 2:return $.call(ce,re[0],re[1]);case 3:return $.call(ce,re[0],re[1],re[2])}return $.apply(ce,re)}function zj($,ce,re,Ce){for(var ot=-1,jt=$==null?0:$.length;++ot-1}function eh($,ce,re){for(var Ce=-1,ot=$==null?0:$.length;++Ce-1;);return re}function pb($,ce){for(var re=$.length;re--&&_c(ce,$[re],0)>-1;);return re}function a1($,ce){for(var re=$.length,Ce=0;re--;)$[re]===ce&&++Ce;return Ce}var s1=ih(Kj),o1=ih(Gj);function u1($){return"\\"+Qj[$]}function c1($,ce){return $==null?e:$[ce]}function vc($){return xj.test($)}function l1($){return qj.test($)}function d1($){for(var ce,re=[];!(ce=$.next()).done;)re.push(ce.value);return re}function uh($){var ce=-1,re=Array($.size);return $.forEach(function(Ce,ot){re[++ce]=[ot,Ce]}),re}function fb($,ce){return function(re){return $(ce(re))}}function Ro($,ce){for(var re=-1,Ce=$.length,ot=0,jt=[];++re-1}function X1(s,u){var d=this.__data__,E=_f(d,s);return E<0?(++this.size,d.push([s,u])):d[E][1]=u,this}Xa.prototype.clear=J1,Xa.prototype.delete=H1,Xa.prototype.get=z1,Xa.prototype.has=W1,Xa.prototype.set=X1;function Za(s){var u=-1,d=s==null?0:s.length;for(this.clear();++u=u?s:u)),s}function Ii(s,u,d,E,S,L){var k,j=u&p,H=u&f,fe=u&y;if(d&&(k=S?d(s,E,S,L):d(s)),k!==e)return k;if(!vn(s))return s;var me=lt(s);if(me){if(k=nG(s),!j)return Vr(s,k)}else{var Ee=hr(s),be=Ee==Qe||Ee==Lt;if(Uo(s))return Hb(s,j);if(Ee==qr||Ee==De||be&&!S){if(k=H||be?{}:m0(s),!j)return H?$K(s,mK(k,s)):GK(s,Ob(k,s))}else{if(!fn[Ee])return S?s:{};k=rG(s,Ee,j)}}L||(L=new Ji);var Ve=L.get(s);if(Ve)return Ve;L.set(s,k),K0(s)?s.forEach(function(Xe){k.add(Ii(Xe,u,d,Xe,s,L))}):V0(s)&&s.forEach(function(Xe,vt){k.set(vt,Ii(Xe,u,d,vt,s,L))});var We=fe?H?Ch:Lh:H?Kr:or,Et=me?e:We(s);return Ei(Et||s,function(Xe,vt){Et&&(vt=Xe,Xe=s[vt]),Hl(k,vt,Ii(Xe,u,d,vt,s,L))}),k}function NK(s){var u=or(s);return function(d){return Db(d,s,u)}}function Db(s,u,d){var E=d.length;if(s==null)return!E;for(s=on(s);E--;){var S=d[E],L=u[S],k=s[S];if(k===e&&!(S in s)||!L(k))return!1}return!0}function bb(s,u,d){if(typeof s!="function")throw new hi(i);return nd(function(){s.apply(e,d)},u)}function zl(s,u,d,E){var S=-1,L=af,k=!0,j=s.length,H=[],fe=u.length;if(!j)return H;d&&(u=hn(u,ai(d))),E?(L=eh,k=!1):u.length>=n&&(L=Kl,k=!1,u=new Nu(u));e:for(;++SS?0:S+d),E=E===e||E>S?S:ft(E),E<0&&(E+=S),E=d>E?0:$0(E);d0&&d(j)?u>1?Tr(j,u-1,d,E,S):Ao(S,j):E||(S[S.length]=j)}return S}var Nh=t0(),Fb=t0(!0);function ga(s,u){return s&&Nh(s,u,or)}function Th(s,u){return s&&Fb(s,u,or)}function Sf(s,u){return bo(u,function(d){return is(s[d])})}function Eu(s,u){u=Co(u,s);for(var d=0,E=u.length;s!=null&&du}function hK(s,u){return s!=null&&Xt.call(s,u)}function yK(s,u){return s!=null&&u in on(s)}function IK(s,u,d){return s>=Er(u,d)&&s=120&&me.length>=120)?new Nu(k&&me):e}me=s[0];var Ee=-1,be=j[0];e:for(;++Ee-1;)j!==s&&Nf.call(j,H,1),Nf.call(s,H,1);return s}function Vb(s,u){for(var d=s?u.length:0,E=d-1;d--;){var S=u[d];if(d==E||S!==L){var L=S;rs(S)?Nf.call(s,S,1):Dh(s,S)}}return s}function vh(s,u){return s+hf(gb()*(u-s+1))}function LK(s,u,d,E){for(var S=-1,L=Hn(Ef((u-s)/(d||1)),0),k=re(L);L--;)k[E?L:++S]=s,s+=d;return k}function Sh(s,u){var d="";if(!s||u<1||u>dn)return d;do u%2&&(d+=s),u=hf(u/2),u&&(s+=s);while(u);return d}function yt(s,u){return Vh(E0(s,u,Gr),s+"")}function CK(s){return Sb(Lc(s))}function BK(s,u){var d=Lc(s);return Bf(d,Tu(u,0,d.length))}function Zl(s,u,d,E){if(!vn(s))return s;u=Co(u,s);for(var S=-1,L=u.length,k=L-1,j=s;j!=null&&++SS?0:S+u),d=d>S?S:d,d<0&&(d+=S),S=u>d?0:d-u>>>0,u>>>=0;for(var L=re(S);++E>>1,k=s[L];k!==null&&!oi(k)&&(d?k<=u:k=n){var fe=u?null:HK(s);if(fe)return of(fe);k=!1,S=Kl,H=new Nu}else H=u?[]:j;e:for(;++E=E?s:gi(s,u,d)}var Jb=D1||function(s){return sr.clearTimeout(s)};function Hb(s,u){if(u)return s.slice();var d=s.length,E=Tb?Tb(d):new s.constructor(d);return s.copy(E),E}function Fh(s){var u=new s.constructor(s.byteLength);return new ff(u).set(new ff(s)),u}function qK(s,u){var d=u?Fh(s.buffer):s.buffer;return new s.constructor(d,s.byteOffset,s.byteLength)}function VK(s){var u=new s.constructor(s.source,wD.exec(s));return u.lastIndex=s.lastIndex,u}function jK(s){return Jl?on(Jl.call(s)):{}}function zb(s,u){var d=u?Fh(s.buffer):s.buffer;return new s.constructor(d,s.byteOffset,s.length)}function Wb(s,u){if(s!==u){var d=s!==e,E=s===null,S=s===s,L=oi(s),k=u!==e,j=u===null,H=u===u,fe=oi(u);if(!j&&!fe&&!L&&s>u||L&&k&&H&&!j&&!fe||E&&k&&H||!d&&H||!S)return 1;if(!E&&!L&&!fe&&s=j)return H;var fe=d[E];return H*(fe=="desc"?-1:1)}}return s.index-u.index}function Xb(s,u,d,E){for(var S=-1,L=s.length,k=d.length,j=-1,H=u.length,fe=Hn(L-k,0),me=re(H+fe),Ee=!E;++j1?d[S-1]:e,k=S>2?d[2]:e;for(L=s.length>3&&typeof L=="function"?(S--,L):e,k&&wr(d[0],d[1],k)&&(L=S<3?e:L,S=1),u=on(u);++E-1?S[L?u[k]:k]:e}}function i0(s){return ns(function(u){var d=u.length,E=d,S=yi.prototype.thru;for(s&&u.reverse();E--;){var L=u[E];if(typeof L!="function")throw new hi(i);if(S&&!k&&Lf(L)=="wrapper")var k=new yi([],!0)}for(E=k?E:d;++E1&&At.reverse(),me&&Hj))return!1;var fe=L.get(s),me=L.get(u);if(fe&&me)return fe==u&&me==s;var Ee=-1,be=!0,Ve=d&_?new Nu:e;for(L.set(s,u),L.set(u,s);++Ee1?"& ":"")+u[E],u=u.join(d>2?", ":" "),s.replace(sj,`{ /* [wrapped with `+u+`] */ -`)}function aG(s){return lt(s)||Iu(s)||!!(hb&&s&&s[hb])}function rs(s,u){var d=typeof s;return u=u==null?dn:u,!!u&&(d=="number"||d!="symbol"&&Ej.test(s))&&s>-1&&s%1==0&&s0){if(++u>=ve)return arguments[0]}else u=0;return s.apply(e,arguments)}}function Lf(s,u){var d=-1,E=s.length,S=E-1;for(u=u===e?E:u;++d1?s[u-1]:e;return d=typeof d=="function"?(s.pop(),d):e,A0(s,d)});function R0(s){var u=R(s);return u.__chain__=!0,u}function T$(s,u){return u(s),s}function Cf(s,u){return u(s)}var E$=ns(function(s){var u=s.length,d=u?s[0]:0,E=this.__wrapped__,S=function(L){return fh(L,s)};return u>1||this.__actions__.length||!(E instanceof St)||!rs(d)?this.thru(S):(E=E.slice(d,+d+(u?1:0)),E.__actions__.push({func:Cf,args:[S],thisArg:e}),new yi(E,this.__chain__).thru(function(L){return u&&!L.length&&L.push(e),L}))});function h$(){return R0(this)}function y$(){return new yi(this.value(),this.__chain__)}function I$(){this.__values__===e&&(this.__values__=K0(this.value()));var s=this.__index__>=this.__values__.length,u=s?e:this.__values__[this.__index__++];return{done:s,value:u}}function g$(){return this}function _$(s){for(var u,d=this;d instanceof yf;){var E=_0(d);E.__index__=0,E.__values__=e,u?S.__wrapped__=E:u=E;var S=E;d=d.__wrapped__}return S.__wrapped__=s,u}function v$(){var s=this.__wrapped__;if(s instanceof St){var u=s;return this.__actions__.length&&(u=new St(this)),u=u.reverse(),u.__actions__.push({func:Cf,args:[Vh],thisArg:e}),new yi(u,this.__chain__)}return this.thru(Vh)}function S$(){return $b(this.__wrapped__,this.__actions__)}var O$=Df(function(s,u,d){Xt.call(s,d)?++s[d]:es(s,d,1)});function D$(s,u,d){var E=lt(s)?ib:TK;return d&&wr(s,u,d)&&(u=e),E(s,ze(u,3))}function b$(s,u){var d=lt(s)?Do:Ab;return d(s,ze(u,3))}var A$=n0(v0),R$=n0(S0);function F$(s,u){return Tr(Bf(s,u),1)}function P$(s,u){return Tr(Bf(s,u),Vt)}function w$(s,u,d){return d=d===e?1:ft(d),Tr(Bf(s,u),d)}function F0(s,u){var d=lt(s)?Ei:Po;return d(s,ze(u,3))}function P0(s,u){var d=lt(s)?Wj:bb;return d(s,ze(u,3))}var L$=Df(function(s,u,d){Xt.call(s,d)?s[d].push(u):es(s,d,[u])});function C$(s,u,d,E){s=jr(s)?s:Lc(s),d=d&&!E?ft(d):0;var S=s.length;return d<0&&(d=Hn(S+d,0)),qf(s)?d<=S&&s.indexOf(u,d)>-1:!!S&&_c(s,u,d)>-1}var B$=yt(function(s,u,d){var E=-1,S=typeof u=="function",L=jr(s)?re(s.length):[];return Po(s,function(k){L[++E]=S?ii(u,k,d):zl(k,u,d)}),L}),U$=Df(function(s,u,d){es(s,d,u)});function Bf(s,u){var d=lt(s)?hn:Cb;return d(s,ze(u,3))}function k$(s,u,d,E){return s==null?[]:(lt(u)||(u=u==null?[]:[u]),d=E?e:d,lt(d)||(d=d==null?[]:[d]),Mb(s,u,d))}var M$=Df(function(s,u,d){s[d?0:1].push(u)},function(){return[[],[]]});function x$(s,u,d){var E=lt(s)?eh:ub,S=arguments.length<3;return E(s,ze(u,4),d,S,Po)}function q$(s,u,d){var E=lt(s)?Xj:ub,S=arguments.length<3;return E(s,ze(u,4),d,S,bb)}function V$(s,u){var d=lt(s)?Do:Ab;return d(s,Mf(ze(u,3)))}function j$(s){var u=lt(s)?vb:CK;return u(s)}function K$(s,u,d){(d?wr(s,u,d):u===e)?u=1:u=ft(u);var E=lt(s)?dK:BK;return E(s,u)}function G$(s){var u=lt(s)?pK:kK;return u(s)}function $$(s){if(s==null)return 0;if(jr(s))return qf(s)?Sc(s):s.length;var u=hr(s);return u==tt||u==mr?s.size:yh(s).length}function Q$(s,u,d){var E=lt(s)?th:MK;return d&&wr(s,u,d)&&(u=e),E(s,ze(u,3))}var Y$=yt(function(s,u){if(s==null)return[];var d=u.length;return d>1&&wr(s,u[0],u[1])?u=[]:d>2&&wr(u[0],u[1],u[2])&&(u=[u[0]]),Mb(s,Tr(u,1),[])}),Uf=b1||function(){return sr.Date.now()};function J$(s,u){if(typeof u!="function")throw new hi(i);return s=ft(s),function(){if(--s<1)return u.apply(this,arguments)}}function w0(s,u,d){return u=d?e:u,u=s&&u==null?s.length:u,ts(s,de,e,e,e,e,u)}function L0(s,u){var d;if(typeof u!="function")throw new hi(i);return s=ft(s),function(){return--s>0&&(d=u.apply(this,arguments)),s<=1&&(u=e),d}}var Kh=yt(function(s,u,d){var E=F;if(d.length){var S=Ao(d,Pc(Kh));E|=W}return ts(s,E,u,d,S)}),C0=yt(function(s,u,d){var E=F|U;if(d.length){var S=Ao(d,Pc(C0));E|=W}return ts(u,E,s,d,S)});function B0(s,u,d){u=d?e:u;var E=ts(s,J,e,e,e,e,e,u);return E.placeholder=B0.placeholder,E}function U0(s,u,d){u=d?e:u;var E=ts(s,ee,e,e,e,e,e,u);return E.placeholder=U0.placeholder,E}function k0(s,u,d){var E,S,L,k,j,H,fe=0,me=!1,Ee=!1,be=!0;if(typeof s!="function")throw new hi(i);u=vi(u)||0,vn(d)&&(me=!!d.leading,Ee="maxWait"in d,L=Ee?Hn(vi(d.maxWait)||0,u):L,be="trailing"in d?!!d.trailing:be);function Ve(xn){var zi=E,ss=S;return E=S=e,fe=xn,k=s.apply(ss,zi),k}function We(xn){return fe=xn,j=td(vt,u),me?Ve(xn):k}function Et(xn){var zi=xn-H,ss=xn-fe,nA=u-zi;return Ee?Er(nA,L-ss):nA}function Xe(xn){var zi=xn-H,ss=xn-fe;return H===e||zi>=u||zi<0||Ee&&ss>=L}function vt(){var xn=Uf();if(Xe(xn))return At(xn);j=td(vt,Et(xn))}function At(xn){return j=e,be&&E?Ve(xn):(E=S=e,k)}function ui(){j!==e&&Yb(j),fe=0,E=H=S=j=e}function Lr(){return j===e?k:At(Uf())}function ci(){var xn=Uf(),zi=Xe(xn);if(E=arguments,S=this,H=xn,zi){if(j===e)return We(H);if(Ee)return Yb(j),j=td(vt,u),Ve(H)}return j===e&&(j=td(vt,u)),k}return ci.cancel=ui,ci.flush=Lr,ci}var H$=yt(function(s,u){return Db(s,1,u)}),z$=yt(function(s,u,d){return Db(s,vi(u)||0,d)});function W$(s){return ts(s,qe)}function kf(s,u){if(typeof s!="function"||u!=null&&typeof u!="function")throw new hi(i);var d=function(){var E=arguments,S=u?u.apply(this,E):E[0],L=d.cache;if(L.has(S))return L.get(S);var k=s.apply(this,E);return d.cache=L.set(S,k)||L,k};return d.cache=new(kf.Cache||Za),d}kf.Cache=Za;function Mf(s){if(typeof s!="function")throw new hi(i);return function(){var u=arguments;switch(u.length){case 0:return!s.call(this);case 1:return!s.call(this,u[0]);case 2:return!s.call(this,u[0],u[1]);case 3:return!s.call(this,u[0],u[1],u[2])}return!s.apply(this,u)}}function X$(s){return L0(2,s)}var Z$=xK(function(s,u){u=u.length==1&<(u[0])?hn(u[0],ai(ze())):hn(Tr(u,1),ai(ze()));var d=u.length;return yt(function(E){for(var S=-1,L=Er(E.length,d);++S=u}),Iu=Pb(function(){return arguments}())?Pb:function(s){return Rn(s)&&Xt.call(s,"callee")&&!Eb.call(s,"callee")},lt=re.isArray,mQ=XD?ai(XD):_K;function jr(s){return s!=null&&xf(s.length)&&!is(s)}function Mn(s){return Rn(s)&&jr(s)}function NQ(s){return s===!0||s===!1||Rn(s)&&Pr(s)==_t}var Bo=R1||ty,TQ=ZD?ai(ZD):vK;function EQ(s){return Rn(s)&&s.nodeType===1&&!nd(s)}function hQ(s){if(s==null)return!0;if(jr(s)&&(lt(s)||typeof s=="string"||typeof s.splice=="function"||Bo(s)||wc(s)||Iu(s)))return!s.length;var u=hr(s);if(u==tt||u==mr)return!s.size;if(ed(s))return!yh(s).length;for(var d in s)if(Xt.call(s,d))return!1;return!0}function yQ(s,u){return Wl(s,u)}function IQ(s,u,d){d=typeof d=="function"?d:e;var E=d?d(s,u):e;return E===e?Wl(s,u,e,d):!!E}function $h(s){if(!Rn(s))return!1;var u=Pr(s);return u==Me||u==ae||typeof s.message=="string"&&typeof s.name=="string"&&!nd(s)}function gQ(s){return typeof s=="number"&&yb(s)}function is(s){if(!vn(s))return!1;var u=Pr(s);return u==Qe||u==Lt||u==Le||u==Ic}function x0(s){return typeof s=="number"&&s==ft(s)}function xf(s){return typeof s=="number"&&s>-1&&s%1==0&&s<=dn}function vn(s){var u=typeof s;return s!=null&&(u=="object"||u=="function")}function Rn(s){return s!=null&&typeof s=="object"}var q0=eb?ai(eb):OK;function _Q(s,u){return s===u||hh(s,u,Bh(u))}function vQ(s,u,d){return d=typeof d=="function"?d:e,hh(s,u,Bh(u),d)}function SQ(s){return V0(s)&&s!=+s}function OQ(s){if(uG(s))throw new ot(r);return wb(s)}function DQ(s){return s===null}function bQ(s){return s==null}function V0(s){return typeof s=="number"||Rn(s)&&Pr(s)==bt}function nd(s){if(!Rn(s)||Pr(s)!=qr)return!1;var u=pf(s);if(u===null)return!0;var d=Xt.call(u,"constructor")&&u.constructor;return typeof d=="function"&&d instanceof d&&uf.call(d)==v1}var Qh=tb?ai(tb):DK;function AQ(s){return x0(s)&&s>=-dn&&s<=dn}var j0=nb?ai(nb):bK;function qf(s){return typeof s=="string"||!lt(s)&&Rn(s)&&Pr(s)==ri}function oi(s){return typeof s=="symbol"||Rn(s)&&Pr(s)==Mt}var wc=rb?ai(rb):AK;function RQ(s){return s===e}function FQ(s){return Rn(s)&&hr(s)==lu}function PQ(s){return Rn(s)&&Pr(s)==Ia}var wQ=Ff(Ih),LQ=Ff(function(s,u){return s<=u});function K0(s){if(!s)return[];if(jr(s))return qf(s)?Yi(s):Vr(s);if(Kl&&s[Kl])return d1(s[Kl]());var u=hr(s),d=u==tt?oh:u==mr?af:Lc;return d(s)}function as(s){if(!s)return s===0?s:0;if(s=vi(s),s===Vt||s===-Vt){var u=s<0?-1:1;return u*Rr}return s===s?s:0}function ft(s){var u=as(s),d=u%1;return u===u?d?u-d:u:0}function G0(s){return s?Tu(ft(s),0,kn):0}function vi(s){if(typeof s=="number")return s;if(oi(s))return Fr;if(vn(s)){var u=typeof s.valueOf=="function"?s.valueOf():s;s=vn(u)?u+"":u}if(typeof s!="string")return s===0?s:+s;s=cb(s);var d=mj.test(s);return d||Tj.test(s)?Jj(s.slice(2),d?2:8):fj.test(s)?Fr:+s}function $0(s){return _a(s,Kr(s))}function CQ(s){return s?Tu(ft(s),-dn,dn):s===0?s:0}function Qt(s){return s==null?"":si(s)}var BQ=Rc(function(s,u){if(ed(u)||jr(u)){_a(u,or(u),s);return}for(var d in u)Xt.call(u,d)&&Jl(s,d,u[d])}),Q0=Rc(function(s,u){_a(u,Kr(u),s)}),Vf=Rc(function(s,u,d,E){_a(u,Kr(u),s,E)}),UQ=Rc(function(s,u,d,E){_a(u,or(u),s,E)}),kQ=ns(fh);function MQ(s,u){var d=Ac(s);return u==null?d:Sb(d,u)}var xQ=yt(function(s,u){s=on(s);var d=-1,E=u.length,S=E>2?u[2]:e;for(S&&wr(u[0],u[1],S)&&(E=1);++d1),L}),_a(s,Lh(s),d),E&&(d=Ii(d,p|T|y,zK));for(var S=u.length;S--;)Oh(d,u[S]);return d});function r2(s,u){return J0(s,Mf(ze(u)))}var i2=ns(function(s,u){return s==null?{}:PK(s,u)});function J0(s,u){if(s==null)return{};var d=hn(Lh(s),function(E){return[E]});return u=ze(u),xb(s,d,function(E,S){return u(E,S[0])})}function a2(s,u,d){u=Lo(u,s);var E=-1,S=u.length;for(S||(S=1,s=e);++Eu){var E=s;s=u,u=E}if(d||s%1||u%1){var S=Ib();return Er(s+S*(u-s+Yj("1e-"+((S+"").length-1))),u)}return _h(s,u)}var T2=Fc(function(s,u,d){return u=u.toLowerCase(),s+(d?W0(u):u)});function W0(s){return Hh(Qt(s).toLowerCase())}function X0(s){return s=Qt(s),s&&s.replace(hj,s1).replace(kj,"")}function E2(s,u,d){s=Qt(s),u=si(u);var E=s.length;d=d===e?E:Tu(ft(d),0,E);var S=d;return d-=u.length,d>=0&&s.slice(d,S)==u}function h2(s){return s=Qt(s),s&&XV.test(s)?s.replace(RD,o1):s}function y2(s){return s=Qt(s),s&&ij.test(s)?s.replace(GE,"\\$&"):s}var I2=Fc(function(s,u,d){return s+(d?"-":"")+u.toLowerCase()}),g2=Fc(function(s,u,d){return s+(d?" ":"")+u.toLowerCase()}),_2=t0("toLowerCase");function v2(s,u,d){s=Qt(s),u=ft(u);var E=u?Sc(s):0;if(!u||E>=u)return s;var S=(u-E)/2;return Rf(Tf(S),d)+s+Rf(Nf(S),d)}function S2(s,u,d){s=Qt(s),u=ft(u);var E=u?Sc(s):0;return u&&E>>0,d?(s=Qt(s),s&&(typeof u=="string"||u!=null&&!Qh(u))&&(u=si(u),!u&&vc(s))?Co(Yi(s),0,d):s.split(u,d)):[]}var P2=Fc(function(s,u,d){return s+(d?" ":"")+Hh(u)});function w2(s,u,d){return s=Qt(s),d=d==null?0:Tu(ft(d),0,s.length),u=si(u),s.slice(d,d+u.length)==u}function L2(s,u,d){var E=R.templateSettings;d&&wr(s,u,d)&&(u=e),s=Qt(s),u=Vf({},u,E,u0);var S=Vf({},u.imports,E.imports,u0),L=or(S),k=sh(S,L),j,H,fe=0,me=u.interpolate||Zp,Ee="__p += '",be=uh((u.escape||Zp).source+"|"+me.source+"|"+(me===FD?pj:Zp).source+"|"+(u.evaluate||Zp).source+"|$","g"),Ve="//# sourceURL="+(Xt.call(u,"sourceURL")?(u.sourceURL+"").replace(/\s/g," "):"lodash.templateSources["+ ++jj+"]")+` +`)}function aG(s){return lt(s)||Iu(s)||!!(yb&&s&&s[yb])}function rs(s,u){var d=typeof s;return u=u==null?dn:u,!!u&&(d=="number"||d!="symbol"&&Ej.test(s))&&s>-1&&s%1==0&&s0){if(++u>=ve)return arguments[0]}else u=0;return s.apply(e,arguments)}}function Bf(s,u){var d=-1,E=s.length,S=E-1;for(u=u===e?E:u;++d1?s[u-1]:e;return d=typeof d=="function"?(s.pop(),d):e,R0(s,d)});function F0(s){var u=R(s);return u.__chain__=!0,u}function T$(s,u){return u(s),s}function Uf(s,u){return u(s)}var E$=ns(function(s){var u=s.length,d=u?s[0]:0,E=this.__wrapped__,S=function(L){return mh(L,s)};return u>1||this.__actions__.length||!(E instanceof St)||!rs(d)?this.thru(S):(E=E.slice(d,+d+(u?1:0)),E.__actions__.push({func:Uf,args:[S],thisArg:e}),new yi(E,this.__chain__).thru(function(L){return u&&!L.length&&L.push(e),L}))});function h$(){return F0(this)}function y$(){return new yi(this.value(),this.__chain__)}function I$(){this.__values__===e&&(this.__values__=G0(this.value()));var s=this.__index__>=this.__values__.length,u=s?e:this.__values__[this.__index__++];return{done:s,value:u}}function g$(){return this}function _$(s){for(var u,d=this;d instanceof gf;){var E=v0(d);E.__index__=0,E.__values__=e,u?S.__wrapped__=E:u=E;var S=E;d=d.__wrapped__}return S.__wrapped__=s,u}function v$(){var s=this.__wrapped__;if(s instanceof St){var u=s;return this.__actions__.length&&(u=new St(this)),u=u.reverse(),u.__actions__.push({func:Uf,args:[jh],thisArg:e}),new yi(u,this.__chain__)}return this.thru(jh)}function S$(){return Qb(this.__wrapped__,this.__actions__)}var O$=Af(function(s,u,d){Xt.call(s,d)?++s[d]:es(s,d,1)});function D$(s,u,d){var E=lt(s)?ab:TK;return d&&wr(s,u,d)&&(u=e),E(s,ze(u,3))}function b$(s,u){var d=lt(s)?bo:Rb;return d(s,ze(u,3))}var A$=r0(S0),R$=r0(O0);function F$(s,u){return Tr(kf(s,u),1)}function P$(s,u){return Tr(kf(s,u),Vt)}function w$(s,u,d){return d=d===e?1:ft(d),Tr(kf(s,u),d)}function P0(s,u){var d=lt(s)?Ei:wo;return d(s,ze(u,3))}function w0(s,u){var d=lt(s)?Wj:Ab;return d(s,ze(u,3))}var L$=Af(function(s,u,d){Xt.call(s,d)?s[d].push(u):es(s,d,[u])});function C$(s,u,d,E){s=jr(s)?s:Lc(s),d=d&&!E?ft(d):0;var S=s.length;return d<0&&(d=Hn(S+d,0)),jf(s)?d<=S&&s.indexOf(u,d)>-1:!!S&&_c(s,u,d)>-1}var B$=yt(function(s,u,d){var E=-1,S=typeof u=="function",L=jr(s)?re(s.length):[];return wo(s,function(k){L[++E]=S?ii(u,k,d):Wl(k,u,d)}),L}),U$=Af(function(s,u,d){es(s,d,u)});function kf(s,u){var d=lt(s)?hn:Bb;return d(s,ze(u,3))}function k$(s,u,d,E){return s==null?[]:(lt(u)||(u=u==null?[]:[u]),d=E?e:d,lt(d)||(d=d==null?[]:[d]),xb(s,u,d))}var M$=Af(function(s,u,d){s[d?0:1].push(u)},function(){return[[],[]]});function x$(s,u,d){var E=lt(s)?th:cb,S=arguments.length<3;return E(s,ze(u,4),d,S,wo)}function q$(s,u,d){var E=lt(s)?Xj:cb,S=arguments.length<3;return E(s,ze(u,4),d,S,Ab)}function V$(s,u){var d=lt(s)?bo:Rb;return d(s,qf(ze(u,3)))}function j$(s){var u=lt(s)?Sb:CK;return u(s)}function K$(s,u,d){(d?wr(s,u,d):u===e)?u=1:u=ft(u);var E=lt(s)?dK:BK;return E(s,u)}function G$(s){var u=lt(s)?pK:kK;return u(s)}function $$(s){if(s==null)return 0;if(jr(s))return jf(s)?Sc(s):s.length;var u=hr(s);return u==tt||u==mr?s.size:Ih(s).length}function Q$(s,u,d){var E=lt(s)?nh:MK;return d&&wr(s,u,d)&&(u=e),E(s,ze(u,3))}var Y$=yt(function(s,u){if(s==null)return[];var d=u.length;return d>1&&wr(s,u[0],u[1])?u=[]:d>2&&wr(u[0],u[1],u[2])&&(u=[u[0]]),xb(s,Tr(u,1),[])}),Mf=b1||function(){return sr.Date.now()};function J$(s,u){if(typeof u!="function")throw new hi(i);return s=ft(s),function(){if(--s<1)return u.apply(this,arguments)}}function L0(s,u,d){return u=d?e:u,u=s&&u==null?s.length:u,ts(s,de,e,e,e,e,u)}function C0(s,u){var d;if(typeof u!="function")throw new hi(i);return s=ft(s),function(){return--s>0&&(d=u.apply(this,arguments)),s<=1&&(u=e),d}}var Gh=yt(function(s,u,d){var E=F;if(d.length){var S=Ro(d,Pc(Gh));E|=W}return ts(s,E,u,d,S)}),B0=yt(function(s,u,d){var E=F|U;if(d.length){var S=Ro(d,Pc(B0));E|=W}return ts(u,E,s,d,S)});function U0(s,u,d){u=d?e:u;var E=ts(s,J,e,e,e,e,e,u);return E.placeholder=U0.placeholder,E}function k0(s,u,d){u=d?e:u;var E=ts(s,ee,e,e,e,e,e,u);return E.placeholder=k0.placeholder,E}function M0(s,u,d){var E,S,L,k,j,H,fe=0,me=!1,Ee=!1,be=!0;if(typeof s!="function")throw new hi(i);u=vi(u)||0,vn(d)&&(me=!!d.leading,Ee="maxWait"in d,L=Ee?Hn(vi(d.maxWait)||0,u):L,be="trailing"in d?!!d.trailing:be);function Ve(xn){var zi=E,ss=S;return E=S=e,fe=xn,k=s.apply(ss,zi),k}function We(xn){return fe=xn,j=nd(vt,u),me?Ve(xn):k}function Et(xn){var zi=xn-H,ss=xn-fe,rA=u-zi;return Ee?Er(rA,L-ss):rA}function Xe(xn){var zi=xn-H,ss=xn-fe;return H===e||zi>=u||zi<0||Ee&&ss>=L}function vt(){var xn=Mf();if(Xe(xn))return At(xn);j=nd(vt,Et(xn))}function At(xn){return j=e,be&&E?Ve(xn):(E=S=e,k)}function ui(){j!==e&&Jb(j),fe=0,E=H=S=j=e}function Lr(){return j===e?k:At(Mf())}function ci(){var xn=Mf(),zi=Xe(xn);if(E=arguments,S=this,H=xn,zi){if(j===e)return We(H);if(Ee)return Jb(j),j=nd(vt,u),Ve(H)}return j===e&&(j=nd(vt,u)),k}return ci.cancel=ui,ci.flush=Lr,ci}var H$=yt(function(s,u){return bb(s,1,u)}),z$=yt(function(s,u,d){return bb(s,vi(u)||0,d)});function W$(s){return ts(s,qe)}function xf(s,u){if(typeof s!="function"||u!=null&&typeof u!="function")throw new hi(i);var d=function(){var E=arguments,S=u?u.apply(this,E):E[0],L=d.cache;if(L.has(S))return L.get(S);var k=s.apply(this,E);return d.cache=L.set(S,k)||L,k};return d.cache=new(xf.Cache||Za),d}xf.Cache=Za;function qf(s){if(typeof s!="function")throw new hi(i);return function(){var u=arguments;switch(u.length){case 0:return!s.call(this);case 1:return!s.call(this,u[0]);case 2:return!s.call(this,u[0],u[1]);case 3:return!s.call(this,u[0],u[1],u[2])}return!s.apply(this,u)}}function X$(s){return C0(2,s)}var Z$=xK(function(s,u){u=u.length==1&<(u[0])?hn(u[0],ai(ze())):hn(Tr(u,1),ai(ze()));var d=u.length;return yt(function(E){for(var S=-1,L=Er(E.length,d);++S=u}),Iu=wb(function(){return arguments}())?wb:function(s){return Rn(s)&&Xt.call(s,"callee")&&!hb.call(s,"callee")},lt=re.isArray,mQ=ZD?ai(ZD):_K;function jr(s){return s!=null&&Vf(s.length)&&!is(s)}function Mn(s){return Rn(s)&&jr(s)}function NQ(s){return s===!0||s===!1||Rn(s)&&Pr(s)==_t}var Uo=R1||ny,TQ=eb?ai(eb):vK;function EQ(s){return Rn(s)&&s.nodeType===1&&!rd(s)}function hQ(s){if(s==null)return!0;if(jr(s)&&(lt(s)||typeof s=="string"||typeof s.splice=="function"||Uo(s)||wc(s)||Iu(s)))return!s.length;var u=hr(s);if(u==tt||u==mr)return!s.size;if(td(s))return!Ih(s).length;for(var d in s)if(Xt.call(s,d))return!1;return!0}function yQ(s,u){return Xl(s,u)}function IQ(s,u,d){d=typeof d=="function"?d:e;var E=d?d(s,u):e;return E===e?Xl(s,u,e,d):!!E}function Qh(s){if(!Rn(s))return!1;var u=Pr(s);return u==Me||u==ae||typeof s.message=="string"&&typeof s.name=="string"&&!rd(s)}function gQ(s){return typeof s=="number"&&Ib(s)}function is(s){if(!vn(s))return!1;var u=Pr(s);return u==Qe||u==Lt||u==Le||u==Ic}function q0(s){return typeof s=="number"&&s==ft(s)}function Vf(s){return typeof s=="number"&&s>-1&&s%1==0&&s<=dn}function vn(s){var u=typeof s;return s!=null&&(u=="object"||u=="function")}function Rn(s){return s!=null&&typeof s=="object"}var V0=tb?ai(tb):OK;function _Q(s,u){return s===u||yh(s,u,Uh(u))}function vQ(s,u,d){return d=typeof d=="function"?d:e,yh(s,u,Uh(u),d)}function SQ(s){return j0(s)&&s!=+s}function OQ(s){if(uG(s))throw new ot(r);return Lb(s)}function DQ(s){return s===null}function bQ(s){return s==null}function j0(s){return typeof s=="number"||Rn(s)&&Pr(s)==bt}function rd(s){if(!Rn(s)||Pr(s)!=qr)return!1;var u=mf(s);if(u===null)return!0;var d=Xt.call(u,"constructor")&&u.constructor;return typeof d=="function"&&d instanceof d&&lf.call(d)==v1}var Yh=nb?ai(nb):DK;function AQ(s){return q0(s)&&s>=-dn&&s<=dn}var K0=rb?ai(rb):bK;function jf(s){return typeof s=="string"||!lt(s)&&Rn(s)&&Pr(s)==ri}function oi(s){return typeof s=="symbol"||Rn(s)&&Pr(s)==Mt}var wc=ib?ai(ib):AK;function RQ(s){return s===e}function FQ(s){return Rn(s)&&hr(s)==lu}function PQ(s){return Rn(s)&&Pr(s)==Ia}var wQ=wf(gh),LQ=wf(function(s,u){return s<=u});function G0(s){if(!s)return[];if(jr(s))return jf(s)?Yi(s):Vr(s);if(Gl&&s[Gl])return d1(s[Gl]());var u=hr(s),d=u==tt?uh:u==mr?of:Lc;return d(s)}function as(s){if(!s)return s===0?s:0;if(s=vi(s),s===Vt||s===-Vt){var u=s<0?-1:1;return u*Rr}return s===s?s:0}function ft(s){var u=as(s),d=u%1;return u===u?d?u-d:u:0}function $0(s){return s?Tu(ft(s),0,kn):0}function vi(s){if(typeof s=="number")return s;if(oi(s))return Fr;if(vn(s)){var u=typeof s.valueOf=="function"?s.valueOf():s;s=vn(u)?u+"":u}if(typeof s!="string")return s===0?s:+s;s=lb(s);var d=mj.test(s);return d||Tj.test(s)?Jj(s.slice(2),d?2:8):fj.test(s)?Fr:+s}function Q0(s){return _a(s,Kr(s))}function CQ(s){return s?Tu(ft(s),-dn,dn):s===0?s:0}function Qt(s){return s==null?"":si(s)}var BQ=Rc(function(s,u){if(td(u)||jr(u)){_a(u,or(u),s);return}for(var d in u)Xt.call(u,d)&&Hl(s,d,u[d])}),Y0=Rc(function(s,u){_a(u,Kr(u),s)}),Kf=Rc(function(s,u,d,E){_a(u,Kr(u),s,E)}),UQ=Rc(function(s,u,d,E){_a(u,or(u),s,E)}),kQ=ns(mh);function MQ(s,u){var d=Ac(s);return u==null?d:Ob(d,u)}var xQ=yt(function(s,u){s=on(s);var d=-1,E=u.length,S=E>2?u[2]:e;for(S&&wr(u[0],u[1],S)&&(E=1);++d1),L}),_a(s,Ch(s),d),E&&(d=Ii(d,p|f|y,zK));for(var S=u.length;S--;)Dh(d,u[S]);return d});function r2(s,u){return H0(s,qf(ze(u)))}var i2=ns(function(s,u){return s==null?{}:PK(s,u)});function H0(s,u){if(s==null)return{};var d=hn(Ch(s),function(E){return[E]});return u=ze(u),qb(s,d,function(E,S){return u(E,S[0])})}function a2(s,u,d){u=Co(u,s);var E=-1,S=u.length;for(S||(S=1,s=e);++Eu){var E=s;s=u,u=E}if(d||s%1||u%1){var S=gb();return Er(s+S*(u-s+Yj("1e-"+((S+"").length-1))),u)}return vh(s,u)}var T2=Fc(function(s,u,d){return u=u.toLowerCase(),s+(d?X0(u):u)});function X0(s){return zh(Qt(s).toLowerCase())}function Z0(s){return s=Qt(s),s&&s.replace(hj,s1).replace(kj,"")}function E2(s,u,d){s=Qt(s),u=si(u);var E=s.length;d=d===e?E:Tu(ft(d),0,E);var S=d;return d-=u.length,d>=0&&s.slice(d,S)==u}function h2(s){return s=Qt(s),s&&XV.test(s)?s.replace(FD,o1):s}function y2(s){return s=Qt(s),s&&ij.test(s)?s.replace($E,"\\$&"):s}var I2=Fc(function(s,u,d){return s+(d?"-":"")+u.toLowerCase()}),g2=Fc(function(s,u,d){return s+(d?" ":"")+u.toLowerCase()}),_2=n0("toLowerCase");function v2(s,u,d){s=Qt(s),u=ft(u);var E=u?Sc(s):0;if(!u||E>=u)return s;var S=(u-E)/2;return Pf(hf(S),d)+s+Pf(Ef(S),d)}function S2(s,u,d){s=Qt(s),u=ft(u);var E=u?Sc(s):0;return u&&E>>0,d?(s=Qt(s),s&&(typeof u=="string"||u!=null&&!Yh(u))&&(u=si(u),!u&&vc(s))?Bo(Yi(s),0,d):s.split(u,d)):[]}var P2=Fc(function(s,u,d){return s+(d?" ":"")+zh(u)});function w2(s,u,d){return s=Qt(s),d=d==null?0:Tu(ft(d),0,s.length),u=si(u),s.slice(d,d+u.length)==u}function L2(s,u,d){var E=R.templateSettings;d&&wr(s,u,d)&&(u=e),s=Qt(s),u=Kf({},u,E,c0);var S=Kf({},u.imports,E.imports,c0),L=or(S),k=oh(S,L),j,H,fe=0,me=u.interpolate||tf,Ee="__p += '",be=ch((u.escape||tf).source+"|"+me.source+"|"+(me===PD?pj:tf).source+"|"+(u.evaluate||tf).source+"|$","g"),Ve="//# sourceURL="+(Xt.call(u,"sourceURL")?(u.sourceURL+"").replace(/\s/g," "):"lodash.templateSources["+ ++jj+"]")+` `;s.replace(be,function(Xe,vt,At,ui,Lr,ci){return At||(At=ui),Ee+=s.slice(fe,ci).replace(yj,u1),vt&&(j=!0,Ee+=`' + __e(`+vt+`) + '`),Lr&&(H=!0,Ee+=`'; @@ -470,10 +470,10 @@ __p += '`),At&&(Ee+=`' + function print() { __p += __j.call(arguments, '') } `:`; `)+Ee+`return __p -}`;var Et=eA(function(){return jt(L,Ve+"return "+Ee).apply(e,k)});if(Et.source=Ee,$h(Et))throw Et;return Et}function C2(s){return Qt(s).toLowerCase()}function B2(s){return Qt(s).toUpperCase()}function U2(s,u,d){if(s=Qt(s),s&&(d||u===e))return cb(s);if(!s||!(u=si(u)))return s;var E=Yi(s),S=Yi(u),L=lb(E,S),k=db(E,S)+1;return Co(E,L,k).join("")}function k2(s,u,d){if(s=Qt(s),s&&(d||u===e))return s.slice(0,fb(s)+1);if(!s||!(u=si(u)))return s;var E=Yi(s),S=db(E,Yi(u))+1;return Co(E,0,S).join("")}function M2(s,u,d){if(s=Qt(s),s&&(d||u===e))return s.replace($E,"");if(!s||!(u=si(u)))return s;var E=Yi(s),S=lb(E,Yi(u));return Co(E,S).join("")}function x2(s,u){var d=et,E=X;if(vn(u)){var S="separator"in u?u.separator:S;d="length"in u?ft(u.length):d,E="omission"in u?si(u.omission):E}s=Qt(s);var L=s.length;if(vc(s)){var k=Yi(s);L=k.length}if(d>=L)return s;var j=d-Sc(E);if(j<1)return E;var H=k?Co(k,0,j).join(""):s.slice(0,j);if(S===e)return H+E;if(k&&(j+=H.length-j),Qh(S)){if(s.slice(j).search(S)){var fe,me=H;for(S.global||(S=uh(S.source,Qt(PD.exec(S))+"g")),S.lastIndex=0;fe=S.exec(me);)var Ee=fe.index;H=H.slice(0,Ee===e?j:Ee)}}else if(s.indexOf(si(S),j)!=j){var be=H.lastIndexOf(S);be>-1&&(H=H.slice(0,be))}return H+E}function q2(s){return s=Qt(s),s&&WV.test(s)?s.replace(AD,N1):s}var V2=Fc(function(s,u,d){return s+(d?" ":"")+u.toUpperCase()}),Hh=t0("toUpperCase");function Z0(s,u,d){return s=Qt(s),u=d?e:u,u===e?l1(s)?h1(s):t1(s):s.match(u)||[]}var eA=yt(function(s,u){try{return ii(s,e,u)}catch(d){return $h(d)?d:new ot(d)}}),j2=ns(function(s,u){return Ei(u,function(d){d=va(d),es(s,d,Kh(s[d],s))}),s});function K2(s){var u=s==null?0:s.length,d=ze();return s=u?hn(s,function(E){if(typeof E[1]!="function")throw new hi(i);return[d(E[0]),E[1]]}):[],yt(function(E){for(var S=-1;++Sdn)return[];var d=kn,E=Er(s,kn);u=ze(u),s-=kn;for(var S=ah(E,u);++d0||u<0)?new St(d):(s<0?d=d.takeRight(-s):s&&(d=d.drop(s)),u!==e&&(u=ft(u),d=u<0?d.dropRight(-u):d.take(u-s)),d)},St.prototype.takeRightWhile=function(s){return this.reverse().takeWhile(s).reverse()},St.prototype.toArray=function(){return this.take(kn)},ga(St.prototype,function(s,u){var d=/^(?:filter|find|map|reject)|While$/.test(u),E=/^(?:head|last)$/.test(u),S=R[E?"take"+(u=="last"?"Right":""):u],L=E||/^find/.test(u);S&&(R.prototype[u]=function(){var k=this.__wrapped__,j=E?[1]:arguments,H=k instanceof St,fe=j[0],me=H||lt(k),Ee=function(vt){var At=S.apply(R,bo([vt],j));return E&&be?At[0]:At};me&&d&&typeof fe=="function"&&fe.length!=1&&(H=me=!1);var be=this.__chain__,Ve=!!this.__actions__.length,We=L&&!be,Et=H&&!Ve;if(!L&&me){k=Et?k:new St(this);var Xe=s.apply(k,j);return Xe.__actions__.push({func:Cf,args:[Ee],thisArg:e}),new yi(Xe,be)}return We&&Et?s.apply(this,j):(Xe=this.thru(Ee),We?E?Xe.value()[0]:Xe.value():Xe)})}),Ei(["pop","push","shift","sort","splice","unshift"],function(s){var u=sf[s],d=/^(?:push|sort|unshift)$/.test(s)?"tap":"thru",E=/^(?:pop|shift)$/.test(s);R.prototype[s]=function(){var S=arguments;if(E&&!this.__chain__){var L=this.value();return u.apply(lt(L)?L:[],S)}return this[d](function(k){return u.apply(lt(k)?k:[],S)})}}),ga(St.prototype,function(s,u){var d=R[u];if(d){var E=d.name+"";Xt.call(bc,E)||(bc[E]=[]),bc[E].push({name:u,func:d})}}),bc[bf(e,U).name]=[{name:"wrapper",func:e}],St.prototype.clone=q1,St.prototype.reverse=V1,St.prototype.value=j1,R.prototype.at=E$,R.prototype.chain=h$,R.prototype.commit=y$,R.prototype.next=I$,R.prototype.plant=_$,R.prototype.reverse=v$,R.prototype.toJSON=R.prototype.valueOf=R.prototype.value=S$,R.prototype.first=R.prototype.head,Kl&&(R.prototype[Kl]=g$),R},Ro=y1();typeof define=="function"&&typeof define.amd=="object"&&define.amd?(sr._=Ro,define(function(){return Ro})):pu?((pu.exports=Ro)._=Ro,WE._=Ro):sr._=Ro}).call(wl)});var Fq=w(pc=>{"use strict";f();N();m();Object.defineProperty(pc,"__esModule",{value:!0});pc.FederationFactory=void 0;pc.federateSubgraphs=Qce;pc.federateSubgraphsWithContracts=Yce;pc.federateSubgraphsContract=Jce;var Re=Ae(),Dq=Jo(),Mr=Jr(),Fe=sa(),dc=EN(),bq=np(),ni=up(),dE=uO(),Kn=hs(),Kce=CO(),Gce=Dp(),Aq=bp(),ge=Rp(),$ce=kO(),Rq=Oq(),Ll=lE(),Oe=lr(),pE=nl(),he=Hr(),fE=class{constructor(t){v(this,"authorizationDataByParentTypeName");v(this,"concreteTypeNamesByAbstractTypeName");v(this,"clientDefinitions",[Kn.DEPRECATED_DEFINITION]);v(this,"currentSubgraphName","");v(this,"subgraphNamesByNamedTypeNameByFieldCoords",new Map);v(this,"entityDataByTypeName");v(this,"entityInterfaceFederationDataByTypeName");v(this,"errors",[]);v(this,"fieldConfigurationByFieldCoords",new Map);v(this,"fieldCoordsByNamedTypeName");v(this,"inaccessibleCoords",new Set);v(this,"inaccessibleRequiredInputValueErrorByCoords",new Map);v(this,"isMaxDepth",!1);v(this,"internalGraph");v(this,"internalSubgraphBySubgraphName");v(this,"invalidORScopesCoords",new Set);v(this,"isVersionTwo",!1);v(this,"namedInputValueTypeNames",new Set);v(this,"namedOutputTypeNames",new Set);v(this,"parentDefinitionDataByTypeName",new Map);v(this,"parentTagDataByTypeName",new Map);v(this,"coordsByNamedTypeName",new Map);v(this,"persistedDirectiveDefinitionByDirectiveName",new Map([[Oe.AUTHENTICATED,Kn.AUTHENTICATED_DEFINITION],[Oe.DEPRECATED,Kn.DEPRECATED_DEFINITION],[Oe.INACCESSIBLE,Kn.INACCESSIBLE_DEFINITION],[Oe.REQUIRES_SCOPES,Kn.REQUIRES_SCOPES_DEFINITION],[Oe.TAG,Kn.TAG_DEFINITION]]));v(this,"persistedDirectiveDefinitions",new Set([Oe.AUTHENTICATED,Oe.DEPRECATED,Oe.INACCESSIBLE,Oe.TAG,Oe.REQUIRES_SCOPES]));v(this,"potentialPersistedDirectiveDefinitionDataByDirectiveName",new Map);v(this,"routerDefinitions",[Kn.DEPRECATED_DEFINITION,Kn.TAG_DEFINITION]);v(this,"subscriptionFilterDataByFieldPath",new Map);v(this,"tagNamesByCoords",new Map);v(this,"warnings");this.authorizationDataByParentTypeName=t.authorizationDataByParentTypeName,this.concreteTypeNamesByAbstractTypeName=t.concreteTypeNamesByAbstractTypeName,this.entityDataByTypeName=t.entityDataByTypeName,this.entityInterfaceFederationDataByTypeName=t.entityInterfaceFederationDataByTypeName,this.fieldCoordsByNamedTypeName=t.fieldCoordsByNamedTypeName,this.internalSubgraphBySubgraphName=t.internalSubgraphBySubgraphName,this.internalGraph=t.internalGraph,this.warnings=t.warnings}getValidImplementedInterfaces(t){var o;let n=[];if(t.implementedInterfaceTypeNames.size<1)return n;let r=(0,ge.isNodeDataInaccessible)(t),i=new Map,a=new Map;for(let c of t.implementedInterfaceTypeNames){n.push((0,Mr.stringToNamedTypeNode)(c));let l=(0,he.getOrThrowError)(this.parentDefinitionDataByTypeName,c,Oe.PARENT_DEFINITION_DATA);if(l.kind!==Re.Kind.INTERFACE_TYPE_DEFINITION){a.set(l.name,(0,he.kindToTypeString)(l.kind));continue}let p={invalidFieldImplementations:new Map,unimplementedFields:[]},T=!1;for(let[y,g]of l.fieldDataByFieldName){let _=!1,F=t.fieldDataByFieldName.get(y);if(!F){T=!0,p.unimplementedFields.push(y);continue}let U={invalidAdditionalArguments:new Set,invalidImplementedArguments:[],isInaccessible:!1,originalResponseType:(0,dE.printTypeNode)(g.node.type),unimplementedArguments:new Set};(0,ge.isTypeValidImplementation)(g.node.type,F.node.type,this.concreteTypeNamesByAbstractTypeName)||(T=!0,_=!0,U.implementedResponseType=(0,dE.printTypeNode)(F.node.type));let K=new Set;for(let[J,ee]of g.argumentDataByArgumentName){let W=ee.node;K.add(J);let Te=(o=F.argumentDataByArgumentName.get(J))==null?void 0:o.node;if(!Te){T=!0,_=!0,U.unimplementedArguments.add(J);continue}let de=(0,dE.printTypeNode)(Te.type),we=(0,dE.printTypeNode)(W.type);we!==de&&(T=!0,_=!0,U.invalidImplementedArguments.push({actualType:de,argumentName:J,expectedType:we}))}for(let[J,ee]of F.argumentDataByArgumentName){let W=ee.node;K.has(J)||W.type.kind===Re.Kind.NON_NULL_TYPE&&(T=!0,_=!0,U.invalidAdditionalArguments.add(J))}!r&&F.isInaccessible&&!g.isInaccessible&&(T=!0,_=!0,U.isInaccessible=!0),_&&p.invalidFieldImplementations.set(y,U)}T&&i.set(c,p)}return a.size>0&&this.errors.push((0,Fe.invalidImplementedTypeError)(t.name,a)),i.size>0&&this.errors.push((0,Fe.invalidInterfaceImplementationError)(t.node.name.value,(0,he.kindToTypeString)(t.kind),i)),n}addValidPrimaryKeyTargetsToEntityData(t){var T;let n=this.entityDataByTypeName.get(t);if(!n)return;let r=(0,he.getOrThrowError)(this.internalSubgraphBySubgraphName,this.currentSubgraphName,"internalSubgraphBySubgraphName"),i=r.parentDefinitionDataByTypeName,a=i.get(n.typeName);if(!a||a.kind!==Re.Kind.OBJECT_TYPE_DEFINITION)throw(0,Fe.incompatibleParentKindFatalError)(n.typeName,Re.Kind.OBJECT_TYPE_DEFINITION,(a==null?void 0:a.kind)||Re.Kind.NULL);let o=(0,he.getOrThrowError)(r.configurationDataByTypeName,n.typeName,"internalSubgraph.configurationDataByTypeName"),c=[],l=this.internalGraph.nodeByNodeName.get(`${this.currentSubgraphName}.${n.typeName}`);(0,dc.validateImplicitFieldSets)({conditionalFieldDataByCoords:r.conditionalFieldDataByCoordinates,currentSubgraphName:this.currentSubgraphName,entityData:n,implicitKeys:c,objectData:a,parentDefinitionDataByTypeName:i,graphNode:l});for(let[y,g]of this.entityInterfaceFederationDataByTypeName){if(!((T=g.concreteTypeNames)!=null&&T.has(n.typeName)))continue;let _=this.entityDataByTypeName.get(y);_&&(0,dc.validateImplicitFieldSets)({conditionalFieldDataByCoords:r.conditionalFieldDataByCoordinates,currentSubgraphName:this.currentSubgraphName,entityData:_,implicitKeys:c,objectData:a,parentDefinitionDataByTypeName:i,graphNode:l})}if(c.length<1)return;if(!o.keys||o.keys.length<1){o.isRootNode=!0,o.keys=c;return}let p=new Set(o.keys.map(y=>y.selectionSet));for(let y of c)p.has(y.selectionSet)||(o.keys.push(y),p.add(y.selectionSet))}addValidPrimaryKeyTargetsFromInterfaceObject(t,n,r,i){let a=t.parentDefinitionDataByTypeName,o=a.get(n);if(!o||!(0,ge.isParentDataCompositeOutputType)(o))throw(0,Fe.incompatibleParentKindFatalError)(n,Re.Kind.INTERFACE_TYPE_DEFINITION,(o==null?void 0:o.kind)||Re.Kind.NULL);let c=(0,he.getOrThrowError)(t.configurationDataByTypeName,r.typeName,"internalSubgraph.configurationDataByTypeName"),l=[];if((0,dc.validateImplicitFieldSets)({conditionalFieldDataByCoords:t.conditionalFieldDataByCoordinates,currentSubgraphName:t.name,entityData:r,implicitKeys:l,objectData:o,parentDefinitionDataByTypeName:a,graphNode:i}),l.length<1)return;if(!c.keys||c.keys.length<1){c.isRootNode=!0,c.keys=l;return}let p=new Set(c.keys.map(T=>T.selectionSet));for(let T of l)p.has(T.selectionSet)||(c.keys.push(T),p.add(T.selectionSet))}getEnumValueMergeMethod(t){return this.namedInputValueTypeNames.has(t)?this.namedOutputTypeNames.has(t)?ge.MergeMethod.CONSISTENT:ge.MergeMethod.INTERSECTION:ge.MergeMethod.UNION}generateTagData(){for(let[t,n]of this.tagNamesByCoords){let r=t.split(".");if(r.length<1)continue;let i=(0,he.getValueOrDefault)(this.parentTagDataByTypeName,r[0],()=>(0,dc.newParentTagData)(r[0]));switch(r.length){case 1:for(let l of n)i.tagNames.add(l);break;case 2:let a=(0,he.getValueOrDefault)(i.childTagDataByChildName,r[1],()=>(0,dc.newChildTagData)(r[1]));for(let l of n)a.tagNames.add(l);break;case 3:let o=(0,he.getValueOrDefault)(i.childTagDataByChildName,r[1],()=>(0,dc.newChildTagData)(r[1])),c=(0,he.getValueOrDefault)(o.tagNamesByArgumentName,r[2],()=>new Set);for(let l of n)c.add(l);break;default:break}}}upsertEnumValueData(t,n,r){let i=t.get(n.name),a=i||this.copyEnumValueData(n);(0,ge.extractPersistedDirectives)(a.persistedDirectivesData,n.directivesByDirectiveName,this.persistedDirectiveDefinitionByDirectiveName);let o=(0,ge.isNodeDataInaccessible)(n);if((r||o)&&this.inaccessibleCoords.add(a.federatedCoords),this.recordTagNamesByCoords(a,a.federatedCoords),!i){t.set(a.name,a);return}a.appearances+=1,(0,he.addNewObjectValueMapEntries)(n.configureDescriptionDataBySubgraphName,a.configureDescriptionDataBySubgraphName),(0,ge.setLongestDescription)(a,n),(0,he.addIterableValuesToSet)(n.subgraphNames,a.subgraphNames)}upsertInputValueData(t,n,r,i){let a=t.get(n.name),o=a||this.copyInputValueData(n);if((0,ge.extractPersistedDirectives)(o.persistedDirectivesData,n.directivesByDirectiveName,this.persistedDirectiveDefinitionByDirectiveName),this.recordTagNamesByCoords(o,`${r}.${o.name}`),this.namedInputValueTypeNames.add(o.namedTypeName),(0,he.getValueOrDefault)(this.coordsByNamedTypeName,o.namedTypeName,()=>new Set).add(o.federatedCoords),!a){t.set(o.name,o);return}(0,he.addNewObjectValueMapEntries)(n.configureDescriptionDataBySubgraphName,o.configureDescriptionDataBySubgraphName),(0,ge.setLongestDescription)(o,n),(0,he.addIterableValuesToSet)(n.requiredSubgraphNames,o.requiredSubgraphNames),(0,he.addIterableValuesToSet)(n.subgraphNames,o.subgraphNames),this.handleInputValueInaccessibility(i,o,r);let{typeErrors:c,typeNode:l}=(0,Ll.getMostRestrictiveMergedTypeNode)(o.type,n.type,o.originalCoords,this.errors);if(l)o.type=l;else{if(!c||c.length<2)throw(0,Fe.fieldTypeMergeFatalError)(o.name);a.isArgument?this.errors.push((0,Fe.incompatibleArgumentTypesError)(o.name,o.federatedCoords,c[0],c[1])):this.errors.push((0,Fe.incompatibleChildTypesError)(o.federatedCoords,c[0],c[1]))}(0,ge.compareAndValidateInputValueDefaultValues)(o,n,this.errors)}handleInputValueInaccessibility(t,n,r){if(t){this.inaccessibleRequiredInputValueErrorByCoords.delete(n.federatedCoords),this.inaccessibleCoords.add(n.federatedCoords);return}if((0,ge.isNodeDataInaccessible)(n)){if((0,ge.isTypeRequired)(n.type)){this.inaccessibleRequiredInputValueErrorByCoords.set(n.federatedCoords,(0,Fe.inaccessibleRequiredInputValueError)(n,r));return}this.inaccessibleCoords.add(n.federatedCoords)}}handleSubscriptionFilterDirective(t,n){let r=t.directivesByDirectiveName.get(Oe.SUBSCRIPTION_FILTER);if(!r)return;let i=(0,he.getSingleSetEntry)(t.subgraphNames);if(i===void 0){this.errors.push((0,Fe.unknownFieldSubgraphNameError)(t.federatedCoords));return}this.subscriptionFilterDataByFieldPath.set(t.federatedCoords,{directive:r[0],fieldData:n||t,directiveSubgraphName:i})}federateOutputType({current:t,other:n,coords:r,mostRestrictive:i}){n=(0,Dq.getMutableTypeNode)(n,r,this.errors);let a={kind:t.kind},o=Ll.DivergentType.NONE,c=a;for(let l=0;lnew Set))}upsertFieldData(t,n,r){let i=t.get(n.name),a=i||this.copyFieldData(n,r||(0,ge.isNodeDataInaccessible)(n));(0,he.getValueOrDefault)(this.coordsByNamedTypeName,n.namedTypeName,()=>new Set).add(a.federatedCoords),this.namedOutputTypeNames.add(n.namedTypeName),this.handleSubscriptionFilterDirective(n,a),(0,ge.extractPersistedDirectives)(a.persistedDirectivesData,n.directivesByDirectiveName,this.persistedDirectiveDefinitionByDirectiveName);let o=r||(0,ge.isNodeDataInaccessible)(a);if(o&&this.inaccessibleCoords.add(a.federatedCoords),this.recordTagNamesByCoords(a,a.federatedCoords),!i){t.set(a.name,a);return}let c=this.federateOutputType({current:a.type,other:n.type,coords:a.federatedCoords,mostRestrictive:!1});if(c.success)if(a.type=c.typeNode,a.namedTypeName!==n.namedTypeName){let l=(0,he.getValueOrDefault)(this.subgraphNamesByNamedTypeNameByFieldCoords,a.federatedCoords,()=>new Map),p=(0,he.getValueOrDefault)(l,a.namedTypeName,()=>new Set);if(p.size<1)for(let T of a.subgraphNames)n.subgraphNames.has(T)||p.add(T);(0,he.addIterableValuesToSet)(n.subgraphNames,(0,he.getValueOrDefault)(l,n.namedTypeName,()=>new Set))}else this.addSubgraphNameToExistingFieldNamedTypeDisparity(n);for(let l of n.argumentDataByArgumentName.values())this.upsertInputValueData(a.argumentDataByArgumentName,l,a.federatedCoords,o);(0,he.addNewObjectValueMapEntries)(n.configureDescriptionDataBySubgraphName,i.configureDescriptionDataBySubgraphName),(0,ge.setLongestDescription)(a,n),a.isInaccessible||(a.isInaccessible=n.isInaccessible),(0,he.addNewObjectValueMapEntries)(n.externalFieldDataBySubgraphName,a.externalFieldDataBySubgraphName),(0,he.addMapEntries)(n.isShareableBySubgraphName,a.isShareableBySubgraphName),(0,he.addIterableValuesToSet)(n.subgraphNames,a.subgraphNames)}getClientSchemaUnionMembers(t){let n=[];for(let[r,i]of t.memberByMemberTypeName)this.inaccessibleCoords.has(r)||n.push(i);return n}recordTagNamesByCoords(t,n){let r=n||t.name;if(t.persistedDirectivesData.tagDirectiveByName.size<1)return;let i=(0,he.getValueOrDefault)(this.tagNamesByCoords,r,()=>new Set);for(let a of t.persistedDirectivesData.tagDirectiveByName.keys())i.add(a)}copyMutualParentDefinitionData(t){return{configureDescriptionDataBySubgraphName:(0,he.copyObjectValueMap)(t.configureDescriptionDataBySubgraphName),directivesByDirectiveName:(0,he.copyArrayValueMap)(t.directivesByDirectiveName),extensionType:t.extensionType,name:t.name,persistedDirectivesData:(0,ge.extractPersistedDirectives)((0,ge.newPersistedDirectivesData)(),t.directivesByDirectiveName,this.persistedDirectiveDefinitionByDirectiveName),description:(0,ge.getInitialFederatedDescription)(t)}}copyEnumValueData(t){return{appearances:t.appearances,configureDescriptionDataBySubgraphName:(0,he.copyObjectValueMap)(t.configureDescriptionDataBySubgraphName),federatedCoords:t.federatedCoords,directivesByDirectiveName:(0,he.copyArrayValueMap)(t.directivesByDirectiveName),kind:t.kind,name:t.name,node:{directives:[],kind:t.kind,name:(0,Mr.stringToNameNode)(t.name)},parentTypeName:t.parentTypeName,persistedDirectivesData:(0,ge.extractPersistedDirectives)((0,ge.newPersistedDirectivesData)(),t.directivesByDirectiveName,this.persistedDirectiveDefinitionByDirectiveName),subgraphNames:new Set(t.subgraphNames),description:(0,ge.getInitialFederatedDescription)(t)}}copyInputValueData(t){return{configureDescriptionDataBySubgraphName:(0,he.copyObjectValueMap)(t.configureDescriptionDataBySubgraphName),directivesByDirectiveName:(0,he.copyArrayValueMap)(t.directivesByDirectiveName),includeDefaultValue:t.includeDefaultValue,isArgument:t.isArgument,kind:t.kind,name:t.name,namedTypeName:t.namedTypeName,node:{directives:[],kind:Re.Kind.INPUT_VALUE_DEFINITION,name:(0,Mr.stringToNameNode)(t.name),type:t.type},originalCoords:t.originalCoords,persistedDirectivesData:(0,ge.extractPersistedDirectives)((0,ge.newPersistedDirectivesData)(),t.directivesByDirectiveName,this.persistedDirectiveDefinitionByDirectiveName),federatedCoords:t.federatedCoords,requiredSubgraphNames:new Set(t.requiredSubgraphNames),subgraphNames:new Set(t.subgraphNames),type:t.type,defaultValue:t.defaultValue,description:(0,ge.getInitialFederatedDescription)(t)}}copyInputValueDataByValueName(t,n,r){let i=new Map;for(let[a,o]of t){let c=this.copyInputValueData(o);this.handleInputValueInaccessibility(n,c,r),(0,he.getValueOrDefault)(this.coordsByNamedTypeName,c.namedTypeName,()=>new Set).add(c.federatedCoords),this.namedInputValueTypeNames.add(c.namedTypeName),this.recordTagNamesByCoords(c,`${r}.${o.name}`),i.set(a,c)}return i}copyFieldData(t,n){return{argumentDataByArgumentName:this.copyInputValueDataByValueName(t.argumentDataByArgumentName,n,t.federatedCoords),configureDescriptionDataBySubgraphName:(0,he.copyObjectValueMap)(t.configureDescriptionDataBySubgraphName),directivesByDirectiveName:(0,he.copyArrayValueMap)(t.directivesByDirectiveName),externalFieldDataBySubgraphName:(0,he.copyObjectValueMap)(t.externalFieldDataBySubgraphName),federatedCoords:t.federatedCoords,isInaccessible:t.isInaccessible,isShareableBySubgraphName:new Map(t.isShareableBySubgraphName),kind:t.kind,name:t.name,namedTypeName:t.namedTypeName,node:{arguments:[],directives:[],kind:t.kind,name:(0,Mr.stringToNameNode)(t.name),type:t.type},originalParentTypeName:t.originalParentTypeName,persistedDirectivesData:(0,ge.extractPersistedDirectives)((0,ge.newPersistedDirectivesData)(),t.directivesByDirectiveName,this.persistedDirectiveDefinitionByDirectiveName),renamedParentTypeName:t.renamedParentTypeName,subgraphNames:new Set(t.subgraphNames),type:t.type,description:(0,ge.getInitialFederatedDescription)(t)}}copyEnumValueDataByValueName(t,n){let r=new Map;for(let[i,a]of t){let o=this.copyEnumValueData(a);this.recordTagNamesByCoords(o,o.federatedCoords),(n||(0,ge.isNodeDataInaccessible)(o))&&this.inaccessibleCoords.add(o.federatedCoords),r.set(i,o)}return r}copyFieldDataByFieldName(t,n){let r=new Map;for(let[i,a]of t){let o=n||(0,ge.isNodeDataInaccessible)(a),c=this.copyFieldData(a,o);this.handleSubscriptionFilterDirective(c),(0,he.getValueOrDefault)(this.coordsByNamedTypeName,c.namedTypeName,()=>new Set).add(c.federatedCoords),this.namedOutputTypeNames.add(c.namedTypeName),this.recordTagNamesByCoords(c,c.federatedCoords),o&&this.inaccessibleCoords.add(c.federatedCoords),r.set(i,c)}return r}copyParentDefinitionData(t){let n=this.copyMutualParentDefinitionData(t);switch(t.kind){case Re.Kind.ENUM_TYPE_DEFINITION:return Q(M({},n),{appearances:t.appearances,enumValueDataByValueName:this.copyEnumValueDataByValueName(t.enumValueDataByValueName,t.isInaccessible),isInaccessible:t.isInaccessible,kind:t.kind,node:{kind:t.kind,name:(0,Mr.stringToNameNode)(t.name)},subgraphNames:new Set(t.subgraphNames)});case Re.Kind.INPUT_OBJECT_TYPE_DEFINITION:return Q(M({},n),{inputValueDataByValueName:this.copyInputValueDataByValueName(t.inputValueDataByValueName,t.isInaccessible,t.name),isInaccessible:t.isInaccessible,kind:t.kind,node:{kind:t.kind,name:(0,Mr.stringToNameNode)(t.name)},subgraphNames:new Set(t.subgraphNames)});case Re.Kind.INTERFACE_TYPE_DEFINITION:return Q(M({},n),{fieldDataByFieldName:this.copyFieldDataByFieldName(t.fieldDataByFieldName,t.isInaccessible),implementedInterfaceTypeNames:new Set(t.implementedInterfaceTypeNames),isEntity:t.isEntity,isInaccessible:t.isInaccessible,kind:t.kind,node:{kind:t.kind,name:(0,Mr.stringToNameNode)(t.name)},subgraphNames:new Set(t.subgraphNames)});case Re.Kind.OBJECT_TYPE_DEFINITION:return Q(M({},n),{fieldDataByFieldName:this.copyFieldDataByFieldName(t.fieldDataByFieldName,t.isInaccessible),implementedInterfaceTypeNames:new Set(t.implementedInterfaceTypeNames),isEntity:t.isEntity,isInaccessible:t.isInaccessible,isRootType:t.isRootType,kind:t.kind,node:{kind:t.kind,name:(0,Mr.stringToNameNode)(t.renamedTypeName||t.name)},renamedTypeName:t.renamedTypeName,subgraphNames:new Set(t.subgraphNames)});case Re.Kind.SCALAR_TYPE_DEFINITION:return Q(M({},n),{kind:t.kind,node:{kind:t.kind,name:(0,Mr.stringToNameNode)(t.name)},subgraphNames:new Set(t.subgraphNames)});case Re.Kind.UNION_TYPE_DEFINITION:return Q(M({},n),{kind:t.kind,node:{kind:t.kind,name:(0,Mr.stringToNameNode)(t.name)},memberByMemberTypeName:new Map(t.memberByMemberTypeName),subgraphNames:new Set(t.subgraphNames)})}}getParentTargetData({existingData:t,incomingData:n}){if(!t){let r=this.copyParentDefinitionData(n);return(0,ge.isParentDataRootType)(r)&&(r.extensionType=Aq.ExtensionType.NONE),r}return(0,ge.extractPersistedDirectives)(t.persistedDirectivesData,n.directivesByDirectiveName,this.persistedDirectiveDefinitionByDirectiveName),t}upsertParentDefinitionData(t,n){let r=this.entityInterfaceFederationDataByTypeName.get(t.name),i=this.parentDefinitionDataByTypeName.get(t.name),a=this.getParentTargetData({existingData:i,incomingData:t});this.recordTagNamesByCoords(a);let o=(0,ge.isNodeDataInaccessible)(a);if(o&&this.inaccessibleCoords.add(a.name),r&&r.interfaceObjectSubgraphs.has(n)&&(a.kind=Re.Kind.INTERFACE_TYPE_DEFINITION,a.node.kind=Re.Kind.INTERFACE_TYPE_DEFINITION),!i){this.parentDefinitionDataByTypeName.set(a.name,a);return}if(a.kind!==t.kind&&(!r||!r.interfaceObjectSubgraphs.has(n)||a.kind!==Re.Kind.INTERFACE_TYPE_DEFINITION||t.kind!==Re.Kind.OBJECT_TYPE_DEFINITION)){this.errors.push((0,Fe.incompatibleParentKindMergeError)(a.name,(0,he.kindToTypeString)(a.kind),(0,he.kindToTypeString)(t.kind)));return}switch((0,he.addNewObjectValueMapEntries)(t.configureDescriptionDataBySubgraphName,a.configureDescriptionDataBySubgraphName),(0,ge.setLongestDescription)(a,t),(0,ge.setParentDataExtensionType)(a,t),a.kind){case Re.Kind.ENUM_TYPE_DEFINITION:if(!(0,ge.areKindsEqual)(a,t))return;a.appearances+=1,a.isInaccessible||(a.isInaccessible=o),(0,he.addIterableValuesToSet)(t.subgraphNames,a.subgraphNames);for(let l of t.enumValueDataByValueName.values())this.upsertEnumValueData(a.enumValueDataByValueName,l,o);return;case Re.Kind.INPUT_OBJECT_TYPE_DEFINITION:if(!(0,ge.areKindsEqual)(a,t))return;o&&!a.isInaccessible&&this.propagateInaccessibilityToExistingChildren(a),a.isInaccessible||(a.isInaccessible=o),(0,he.addIterableValuesToSet)(t.subgraphNames,a.subgraphNames);for(let l of t.inputValueDataByValueName.values())this.upsertInputValueData(a.inputValueDataByValueName,l,a.name,a.isInaccessible);return;case Re.Kind.INTERFACE_TYPE_DEFINITION:case Re.Kind.OBJECT_TYPE_DEFINITION:let c=t;o&&!a.isInaccessible&&this.propagateInaccessibilityToExistingChildren(a),a.isInaccessible||(a.isInaccessible=o),(0,he.addIterableValuesToSet)(c.implementedInterfaceTypeNames,a.implementedInterfaceTypeNames),(0,he.addIterableValuesToSet)(c.subgraphNames,a.subgraphNames);for(let l of c.fieldDataByFieldName.values())this.upsertFieldData(a.fieldDataByFieldName,l,a.isInaccessible);return;case Re.Kind.UNION_TYPE_DEFINITION:if(!(0,ge.areKindsEqual)(a,t))return;(0,he.addMapEntries)(t.memberByMemberTypeName,a.memberByMemberTypeName),(0,he.addIterableValuesToSet)(t.subgraphNames,a.subgraphNames);return;default:(0,he.addIterableValuesToSet)(t.subgraphNames,a.subgraphNames);return}}propagateInaccessibilityToExistingChildren(t){switch(t.kind){case Re.Kind.INPUT_OBJECT_TYPE_DEFINITION:for(let n of t.inputValueDataByValueName.values())this.inaccessibleCoords.add(n.federatedCoords);break;default:for(let n of t.fieldDataByFieldName.values()){this.inaccessibleCoords.add(n.federatedCoords);for(let r of n.argumentDataByArgumentName.values())this.inaccessibleCoords.add(r.federatedCoords)}}}upsertPersistedDirectiveDefinitionData(t,n){let r=t.name,i=this.potentialPersistedDirectiveDefinitionDataByDirectiveName.get(r);if(!i){if(n>1)return;let a=new Map;for(let o of t.argumentDataByArgumentName.values())this.namedInputValueTypeNames.add(o.namedTypeName),this.upsertInputValueData(a,o,`@${t.name}`,!1);this.potentialPersistedDirectiveDefinitionDataByDirectiveName.set(r,{argumentDataByArgumentName:a,executableLocations:new Set(t.executableLocations),name:r,repeatable:t.repeatable,subgraphNames:new Set(t.subgraphNames),description:t.description});return}if(i.subgraphNames.size+1!==n){this.potentialPersistedDirectiveDefinitionDataByDirectiveName.delete(r);return}if((0,ge.setMutualExecutableLocations)(i,t.executableLocations),i.executableLocations.size<1){this.potentialPersistedDirectiveDefinitionDataByDirectiveName.delete(r);return}for(let a of t.argumentDataByArgumentName.values())this.namedInputValueTypeNames.add((0,Dq.getTypeNodeNamedTypeName)(a.type)),this.upsertInputValueData(i.argumentDataByArgumentName,a,`@${i.name}`,!1);(0,ge.setLongestDescription)(i,t),i.repeatable&&(i.repeatable=t.repeatable),(0,he.addIterableValuesToSet)(t.subgraphNames,i.subgraphNames)}shouldUpdateFederatedFieldAbstractNamedType(t,n){if(!t)return!1;let r=this.concreteTypeNamesByAbstractTypeName.get(t);if(!r||r.size<1)return!1;for(let i of n)if(!r.has(i))return!1;return!0}updateTypeNodeNamedType(t,n){let r=t;for(let i=0;i1){this.errors.push((0,Fe.incompatibleFederatedFieldNamedTypeError)(t,n));continue}break}case Re.Kind.UNION_TYPE_DEFINITION:{if(l){this.errors.push((0,Fe.incompatibleFederatedFieldNamedTypeError)(t,n));continue}l=T;break}default:{this.errors.push((0,Fe.incompatibleFederatedFieldNamedTypeError)(t,n));break}}}if(o.size<0&&!l){this.errors.push((0,Fe.incompatibleFederatedFieldNamedTypeError)(t,n));continue}let p=l;if(o.size>0){if(l){this.errors.push((0,Fe.incompatibleFederatedFieldNamedTypeError)(t,n));continue}for(let T of o.keys()){p=T;for(let[y,g]of o)if(T!==y&&!g.implementedInterfaceTypeNames.has(T)){p="";break}if(p)break}}if(!this.shouldUpdateFederatedFieldAbstractNamedType(p,c)){this.errors.push((0,Fe.incompatibleFederatedFieldNamedTypeError)(t,n));continue}a.namedTypeName=p,this.updateTypeNodeNamedType(a.type,p)}}federateInternalSubgraphData(){let t=0,n=!1;for(let r of this.internalSubgraphBySubgraphName.values()){t+=1,this.currentSubgraphName=r.name,this.isVersionTwo||(this.isVersionTwo=r.isVersionTwo),(0,$ce.renameRootTypes)(this,r);for(let i of r.parentDefinitionDataByTypeName.values())this.upsertParentDefinitionData(i,r.name);if(!n){if(!r.persistedDirectiveDefinitionDataByDirectiveName.size){n=!0;continue}for(let i of r.persistedDirectiveDefinitionDataByDirectiveName.values())this.upsertPersistedDirectiveDefinitionData(i,t);this.potentialPersistedDirectiveDefinitionDataByDirectiveName.size<1&&(n=!0)}}this.handleDisparateFieldNamedTypes()}handleInterfaceObjectForInternalGraph({entityData:t,internalSubgraph:n,interfaceObjectData:r,interfaceObjectNode:i,resolvableKeyFieldSets:a,subgraphName:o}){let c=this.internalGraph.addOrUpdateNode(t.typeName),l=this.internalGraph.addEntityDataNode(t.typeName);for(let T of i.satisfiedFieldSets)c.satisfiedFieldSets.add(T),a.has(T)&&l.addTargetSubgraphByFieldSet(T,o);let p=r.fieldDatasBySubgraphName.get(o);for(let{name:T,namedTypeName:y}of p||[])this.internalGraph.addEdge(c,this.internalGraph.addOrUpdateNode(y),T);this.internalGraph.addEdge(i,c,t.typeName,!0),this.addValidPrimaryKeyTargetsFromInterfaceObject(n,i.typeName,t,c)}handleEntityInterfaces(){for(let[t,n]of this.entityInterfaceFederationDataByTypeName){(0,ni.subtractSet)(n.interfaceFieldNames,n.interfaceObjectFieldNames);let r=(0,he.getOrThrowError)(this.parentDefinitionDataByTypeName,t,Oe.PARENT_DEFINITION_DATA);if(r.kind===Re.Kind.INTERFACE_TYPE_DEFINITION)for(let i of n.interfaceObjectSubgraphs){let a=(0,he.getOrThrowError)(this.internalSubgraphBySubgraphName,i,"internalSubgraphBySubgraphName"),o=a.configurationDataByTypeName,c=this.concreteTypeNamesByAbstractTypeName.get(t);if(!c)continue;let l=(0,he.getOrThrowError)(o,t,"configurationDataMap"),p=l.keys;if(!p)continue;l.entityInterfaceConcreteTypeNames=n.concreteTypeNames;let T=l.fieldNames;this.internalGraph.setSubgraphName(i);let y=this.internalGraph.addOrUpdateNode(t,{isAbstract:!0});for(let g of c){if(o.has(g))continue;let _=(0,he.getOrThrowError)(this.parentDefinitionDataByTypeName,g,Oe.PARENT_DEFINITION_DATA);if(!(0,ni.isObjectDefinitionData)(_))continue;let F=(0,he.getOrThrowError)(this.entityDataByTypeName,g,"entityDataByTypeName");F.subgraphNames.add(i);let U={fieldNames:T,isRootNode:!0,keys:p,typeName:g},K=new Set;for(let ee of p.filter(W=>!W.disableEntityResolver))K.add(ee.selectionSet);let J=this.authorizationDataByParentTypeName.get(t);for(let ee of n.interfaceObjectFieldNames){let W=`${g}.${ee}`,Te=(0,he.getOrThrowError)(r.fieldDataByFieldName,ee,`${t}.fieldDataByFieldName`);(0,he.getValueOrDefault)(this.fieldCoordsByNamedTypeName,Te.namedTypeName,()=>new Set).add(W);let de=J==null?void 0:J.fieldAuthDataByFieldName.get(ee);if(de){let et=(0,he.getValueOrDefault)(this.authorizationDataByParentTypeName,g,()=>(0,ni.newAuthorizationData)(g));(0,ni.upsertFieldAuthorizationData)(et.fieldAuthDataByFieldName,de)||this.invalidORScopesCoords.add(W)}if(_.fieldDataByFieldName.get(ee))continue;let qe=r.isInaccessible||_.isInaccessible||Te.isInaccessible;_.fieldDataByFieldName.set(ee,this.copyFieldData(Te,qe))}o.set(g,U),this.handleInterfaceObjectForInternalGraph({internalSubgraph:a,subgraphName:i,interfaceObjectData:n,interfaceObjectNode:y,resolvableKeyFieldSets:K,entityData:F})}}}}fieldDataToGraphFieldData(t){var n;return{name:t.name,namedTypeName:t.namedTypeName,isLeaf:(0,ni.isNodeLeaf)((n=this.parentDefinitionDataByTypeName.get(t.namedTypeName))==null?void 0:n.kind),subgraphNames:t.subgraphNames}}getValidFlattenedPersistedDirectiveNodeArray(t,n){let r=[];for(let[i,a]of t){let o=this.persistedDirectiveDefinitionByDirectiveName.get(i);if(o){if(a.length<2){r.push(...a);continue}if(!o.repeatable){this.errors.push((0,Fe.invalidRepeatedFederatedDirectiveErrorMessage)(i,n));continue}r.push(...a)}}return r}getRouterPersistedDirectiveNodes(t){let n=[...t.persistedDirectivesData.tagDirectiveByName.values()];return t.persistedDirectivesData.isDeprecated&&n.push((0,ge.generateDeprecatedDirective)(t.persistedDirectivesData.deprecatedReason)),n.push(...this.getValidFlattenedPersistedDirectiveNodeArray(t.persistedDirectivesData.directivesByDirectiveName,t.name)),n}getFederatedGraphNodeDescription(t){if(t.configureDescriptionDataBySubgraphName.size<1)return t.description;let n=[],r="";for(let[i,{propagate:a,description:o}]of t.configureDescriptionDataBySubgraphName)a&&(n.push(i),r=o);if(n.length===1)return(0,dc.getDescriptionFromString)(r);if(n.length<1)return t.description;this.errors.push((0,Fe.configureDescriptionPropagationError)((0,ge.getDefinitionDataCoords)(t,!0),n))}getNodeForRouterSchemaByData(t){return t.node.name=(0,Mr.stringToNameNode)(t.name),t.node.description=this.getFederatedGraphNodeDescription(t),t.node.directives=this.getRouterPersistedDirectiveNodes(t),t.node}getNodeWithPersistedDirectivesByInputValueData(t){return t.node.name=(0,Mr.stringToNameNode)(t.name),t.node.type=t.type,t.node.description=this.getFederatedGraphNodeDescription(t),t.node.directives=this.getRouterPersistedDirectiveNodes(t),t.includeDefaultValue&&(t.node.defaultValue=t.defaultValue),t.node}getValidFieldArgumentNodes(t){let n=[],r=[],i=[],a=`${t.renamedParentTypeName}.${t.name}`;for(let[o,c]of t.argumentDataByArgumentName)t.subgraphNames.size===c.subgraphNames.size?(r.push(o),n.push(this.getNodeWithPersistedDirectivesByInputValueData(c))):(0,ge.isTypeRequired)(c.type)&&i.push({inputValueName:o,missingSubgraphs:(0,he.getEntriesNotInHashSet)(t.subgraphNames,c.subgraphNames),requiredSubgraphs:[...c.requiredSubgraphNames]});return i.length>0?this.errors.push((0,Fe.invalidRequiredInputValueError)(Oe.FIELD,a,i)):r.length>0&&((0,he.getValueOrDefault)(this.fieldConfigurationByFieldCoords,a,()=>({argumentNames:r,fieldName:t.name,typeName:t.renamedParentTypeName})).argumentNames=r),n}getNodeWithPersistedDirectivesByFieldData(t,n){return t.node.arguments=n,t.node.name=(0,Mr.stringToNameNode)(t.name),t.node.type=t.type,t.node.description=this.getFederatedGraphNodeDescription(t),t.node.directives=this.getRouterPersistedDirectiveNodes(t),t.node}pushParentDefinitionDataToDocumentDefinitions(t){for(let[n,r]of this.parentDefinitionDataByTypeName)switch(r.extensionType!==Aq.ExtensionType.NONE&&this.errors.push((0,Fe.noBaseDefinitionForExtensionError)((0,he.kindToTypeString)(r.kind),n)),r.kind){case Re.Kind.ENUM_TYPE_DEFINITION:let i=[],a=[],o=this.getEnumValueMergeMethod(n);(0,ge.propagateAuthDirectives)(r,this.authorizationDataByParentTypeName.get(n));for(let ee of r.enumValueDataByValueName.values()){let W=(0,ge.getNodeForRouterSchemaByData)(ee,this.persistedDirectiveDefinitionByDirectiveName,this.errors),Te=(0,ge.isNodeDataInaccessible)(ee),de=Q(M({},ee.node),{directives:(0,ge.getClientPersistedDirectiveNodes)(ee)});switch(o){case ge.MergeMethod.CONSISTENT:!Te&&r.appearances>ee.appearances&&this.errors.push((0,Fe.incompatibleSharedEnumError)(n)),i.push(W),Te||a.push(de);break;case ge.MergeMethod.INTERSECTION:r.appearances===ee.appearances&&(i.push(W),Te||a.push(de));break;default:i.push(W),Te||a.push(de);break}}if(r.node.values=i,this.routerDefinitions.push(this.getNodeForRouterSchemaByData(r)),(0,ge.isNodeDataInaccessible)(r)){this.validateReferencesOfInaccessibleType(r),this.internalGraph.setNodeInaccessible(r.name);break}if(a.length<1){this.errors.push((0,Fe.allChildDefinitionsAreInaccessibleError)((0,he.kindToTypeString)(r.kind),n,Oe.ENUM_VALUE));break}this.clientDefinitions.push(Q(M({},r.node),{directives:(0,ge.getClientPersistedDirectiveNodes)(r),values:a}));break;case Re.Kind.INPUT_OBJECT_TYPE_DEFINITION:let c=[],l=[],p=[];for(let[ee,W]of r.inputValueDataByValueName)if(r.subgraphNames.size===W.subgraphNames.size){if(l.push(this.getNodeWithPersistedDirectivesByInputValueData(W)),(0,ge.isNodeDataInaccessible)(W))continue;p.push(Q(M({},W.node),{directives:(0,ge.getClientPersistedDirectiveNodes)(W)}))}else(0,ge.isTypeRequired)(W.type)&&c.push({inputValueName:ee,missingSubgraphs:(0,he.getEntriesNotInHashSet)(r.subgraphNames,W.subgraphNames),requiredSubgraphs:[...W.requiredSubgraphNames]});if(c.length>0){this.errors.push((0,Fe.invalidRequiredInputValueError)(Oe.INPUT_OBJECT,n,c,!1));break}if(r.node.fields=l,this.routerDefinitions.push(this.getNodeForRouterSchemaByData(r)),(0,ge.isNodeDataInaccessible)(r)){this.validateReferencesOfInaccessibleType(r);break}if(p.length<1){this.errors.push((0,Fe.allChildDefinitionsAreInaccessibleError)((0,he.kindToTypeString)(r.kind),n,"input field"));break}this.clientDefinitions.push(Q(M({},r.node),{directives:(0,ge.getClientPersistedDirectiveNodes)(r),fields:p}));break;case Re.Kind.INTERFACE_TYPE_DEFINITION:case Re.Kind.OBJECT_TYPE_DEFINITION:let T=[],y=[],g=new Map,_=(0,ge.newInvalidFieldNames)(),F=r.kind===Re.Kind.OBJECT_TYPE_DEFINITION,U=this.authorizationDataByParentTypeName.get(n);(0,ge.propagateAuthDirectives)(r,U);for(let[ee,W]of r.fieldDataByFieldName){(0,ge.propagateFieldAuthDirectives)(W,U);let Te=this.getValidFieldArgumentNodes(W);F&&(0,ge.validateExternalAndShareable)(W,_),T.push(this.getNodeWithPersistedDirectivesByFieldData(W,Te)),!(0,ge.isNodeDataInaccessible)(W)&&(y.push((0,ge.getClientSchemaFieldNodeByFieldData)(W)),g.set(ee,this.fieldDataToGraphFieldData(W)))}if(F&&(_.byShareable.size>0&&this.errors.push((0,Fe.invalidFieldShareabilityError)(r,_.byShareable)),_.subgraphNamesByExternalFieldName.size>0&&this.errors.push((0,Fe.allExternalFieldInstancesError)(n,_.subgraphNamesByExternalFieldName))),r.node.fields=T,this.internalGraph.initializeNode(n,g),r.implementedInterfaceTypeNames.size>0){t.push({data:r,clientSchemaFieldNodes:y});break}this.routerDefinitions.push(this.getNodeForRouterSchemaByData(r));let K=(0,Gce.isNodeQuery)(n);if((0,ge.isNodeDataInaccessible)(r)){if(K){this.errors.push(Fe.inaccessibleQueryRootTypeError);break}this.validateReferencesOfInaccessibleType(r),this.internalGraph.setNodeInaccessible(r.name);break}if(y.length<1){let ee=K?(0,Fe.noQueryRootTypeError)(!1):(0,Fe.allChildDefinitionsAreInaccessibleError)((0,he.kindToTypeString)(r.kind),n,Oe.FIELD);this.errors.push(ee);break}this.clientDefinitions.push(Q(M({},r.node),{directives:(0,ge.getClientPersistedDirectiveNodes)(r),fields:y}));break;case Re.Kind.SCALAR_TYPE_DEFINITION:if(Kn.BASE_SCALARS.has(n))break;if((0,ge.propagateAuthDirectives)(r,this.authorizationDataByParentTypeName.get(n)),this.routerDefinitions.push(this.getNodeForRouterSchemaByData(r)),(0,ge.isNodeDataInaccessible)(r)){this.validateReferencesOfInaccessibleType(r),this.internalGraph.setNodeInaccessible(r.name);break}this.clientDefinitions.push(Q(M({},r.node),{directives:(0,ge.getClientPersistedDirectiveNodes)(r)}));break;case Re.Kind.UNION_TYPE_DEFINITION:if(r.node.types=(0,ni.mapToArrayOfValues)(r.memberByMemberTypeName),this.routerDefinitions.push(this.getNodeForRouterSchemaByData(r)),(0,ge.isNodeDataInaccessible)(r)){this.validateReferencesOfInaccessibleType(r),this.internalGraph.setNodeInaccessible(r.name);break}let J=this.getClientSchemaUnionMembers(r);if(J.length<1){this.errors.push((0,Fe.allChildDefinitionsAreInaccessibleError)(Oe.UNION,n,"union member type"));break}this.clientDefinitions.push(Q(M({},r.node),{directives:(0,ge.getClientPersistedDirectiveNodes)(r),types:J}));break}}pushNamedTypeAuthDataToFields(){var t;for(let[n,r]of this.authorizationDataByParentTypeName){if(!r.requiresAuthentication&&r.requiredScopes.length<1)continue;let i=this.fieldCoordsByNamedTypeName.get(n);if(i)for(let a of i){let o=a.split(Oe.PERIOD);switch(o.length){case 2:{let c=(0,he.getValueOrDefault)(this.authorizationDataByParentTypeName,o[0],()=>(0,ni.newAuthorizationData)(o[0])),l=(0,he.getValueOrDefault)(c.fieldAuthDataByFieldName,o[1],()=>(0,ni.newFieldAuthorizationData)(o[1]));(t=l.inheritedData).requiresAuthentication||(t.requiresAuthentication=r.requiresAuthentication),l.inheritedData.requiredScopes.length*r.requiredScopes.length>Kn.MAX_OR_SCOPES?this.invalidORScopesCoords.add(a):(l.inheritedData.requiredScopesByOR=(0,ni.mergeRequiredScopesByAND)(l.inheritedData.requiredScopesByOR,r.requiredScopesByOR),l.inheritedData.requiredScopes=(0,ni.mergeRequiredScopesByAND)(l.inheritedData.requiredScopes,r.requiredScopes));break}default:break}}}}federateSubgraphData(){this.federateInternalSubgraphData(),this.handleEntityInterfaces(),this.generateTagData(),this.pushVersionTwoDirectiveDefinitionsToDocumentDefinitions(),this.pushNamedTypeAuthDataToFields()}validateInterfaceImplementationsAndPushToDocumentDefinitions(t){for(let{data:n,clientSchemaFieldNodes:r}of t){if(n.node.interfaces=this.getValidImplementedInterfaces(n),this.routerDefinitions.push((0,ge.getNodeForRouterSchemaByData)(n,this.persistedDirectiveDefinitionByDirectiveName,this.errors)),(0,ge.isNodeDataInaccessible)(n)){this.validateReferencesOfInaccessibleType(n),this.internalGraph.setNodeInaccessible(n.name);continue}let i=[];for(let a of n.implementedInterfaceTypeNames)this.inaccessibleCoords.has(a)||i.push((0,Mr.stringToNamedTypeNode)(a));this.clientDefinitions.push(Q(M({},n.node),{directives:(0,ge.getClientPersistedDirectiveNodes)(n),fields:r,interfaces:i}))}}pushVersionTwoDirectiveDefinitionsToDocumentDefinitions(){this.isVersionTwo&&(this.routerDefinitions=[Kn.AUTHENTICATED_DEFINITION,Kn.DEPRECATED_DEFINITION,Kn.INACCESSIBLE_DEFINITION,Kn.REQUIRES_SCOPES_DEFINITION,Kn.TAG_DEFINITION,Kn.SCOPE_SCALAR_DEFINITION],this.clientDefinitions=[Kn.DEPRECATED_DEFINITION])}validatePathSegmentInaccessibility(t){if(!t)return!1;let r=t.split(Oe.LEFT_PARENTHESIS)[0].split(Oe.PERIOD),i=r[0];for(let a=0;a0&&this.errors.push((0,Fe.invalidReferencesOfInaccessibleTypeError)((0,he.kindToTypeString)(t.kind),t.name,r))}validateQueryRootType(){let t=this.parentDefinitionDataByTypeName.get(Oe.QUERY);if(!t||t.kind!==Re.Kind.OBJECT_TYPE_DEFINITION||t.fieldDataByFieldName.size<1){this.errors.push((0,Fe.noQueryRootTypeError)());return}for(let n of t.fieldDataByFieldName.values())if(!(0,ge.isNodeDataInaccessible)(n))return;this.errors.push((0,Fe.noQueryRootTypeError)())}validateSubscriptionFieldConditionFieldPath(t,n,r,i,a){let o=t.split(Oe.PERIOD);if(o.length<1)return a.push((0,Fe.invalidSubscriptionFieldConditionFieldPathErrorMessage)(r,t)),[];let c=n;if(this.inaccessibleCoords.has(c.renamedTypeName))return a.push((0,Fe.inaccessibleSubscriptionFieldConditionFieldPathFieldErrorMessage)(r,t,o[0],c.renamedTypeName)),[];let l="";for(let p=0;p0?`.${T}`:T,c.kind!==Re.Kind.OBJECT_TYPE_DEFINITION)return a.push((0,Fe.invalidSubscriptionFieldConditionFieldPathParentErrorMessage)(r,t,l)),[];let y=c.fieldDataByFieldName.get(T);if(!y)return a.push((0,Fe.undefinedSubscriptionFieldConditionFieldPathFieldErrorMessage)(r,t,l,T,c.renamedTypeName)),[];let g=`${c.renamedTypeName}.${T}`;if(!y.subgraphNames.has(i))return a.push((0,Fe.invalidSubscriptionFieldConditionFieldPathFieldErrorMessage)(r,t,l,g,i)),[];if(this.inaccessibleCoords.has(g))return a.push((0,Fe.inaccessibleSubscriptionFieldConditionFieldPathFieldErrorMessage)(r,t,l,g)),[];if(Kn.BASE_SCALARS.has(y.namedTypeName)){c={kind:Re.Kind.SCALAR_TYPE_DEFINITION,name:y.namedTypeName};continue}c=(0,he.getOrThrowError)(this.parentDefinitionDataByTypeName,y.namedTypeName,Oe.PARENT_DEFINITION_DATA)}return(0,ge.isLeafKind)(c.kind)?o:(a.push((0,Fe.nonLeafSubscriptionFieldConditionFieldPathFinalFieldErrorMessage)(r,t,o[o.length-1],(0,he.kindToTypeString)(c.kind),c.name)),[])}validateSubscriptionFieldCondition(t,n,r,i,a,o,c){if(i>pE.MAX_SUBSCRIPTION_FILTER_DEPTH||this.isMaxDepth)return c.push((0,Fe.subscriptionFilterConditionDepthExceededErrorMessage)(a)),this.isMaxDepth=!0,!1;let l=!1,p=new Set([Oe.FIELD_PATH,Oe.VALUES]),T=new Set,y=new Set,g=[];for(let _ of t.fields){let F=_.name.value,U=a+`.${F}`;switch(F){case Oe.FIELD_PATH:{if(p.has(Oe.FIELD_PATH))p.delete(Oe.FIELD_PATH);else{l=!0,T.add(Oe.FIELD_PATH);break}if(_.value.kind!==Re.Kind.STRING){g.push((0,Fe.invalidInputFieldTypeErrorMessage)(U,Oe.STRING,(0,he.kindToTypeString)(_.value.kind))),l=!0;break}let K=this.validateSubscriptionFieldConditionFieldPath(_.value.value,r,U,o,g);if(K.length<1){l=!0;break}n.fieldPath=K;break}case Oe.VALUES:{if(p.has(Oe.VALUES))p.delete(Oe.VALUES);else{l=!0,T.add(Oe.VALUES);break}let K=_.value.kind;if(K==Re.Kind.NULL||K==Re.Kind.OBJECT){g.push((0,Fe.invalidInputFieldTypeErrorMessage)(U,Oe.LIST,(0,he.kindToTypeString)(_.value.kind))),l=!0;break}if(K!==Re.Kind.LIST){n.values=[(0,ge.getSubscriptionFilterValue)(_.value)];break}let J=new Set,ee=[];for(let W=0;W<_.value.values.length;W++){let Te=_.value.values[W];if(Te.kind===Re.Kind.OBJECT||Te.kind===Re.Kind.LIST){l=!0,ee.push(W);continue}J.add((0,ge.getSubscriptionFilterValue)(Te))}if(ee.length>0){g.push((0,Fe.subscriptionFieldConditionInvalidValuesArrayErrorMessage)(U,ee));continue}if(J.size<1){l=!0,g.push((0,Fe.subscriptionFieldConditionEmptyValuesArrayErrorMessage)(U));continue}n.values=[...J];break}default:l=!0,y.add(F)}}return l?(c.push((0,Fe.subscriptionFieldConditionInvalidInputFieldErrorMessage)(a,[...p],[...T],[...y],g)),!1):!0}validateSubscriptionFilterCondition(t,n,r,i,a,o,c){if(i>pE.MAX_SUBSCRIPTION_FILTER_DEPTH||this.isMaxDepth)return c.push((0,Fe.subscriptionFilterConditionDepthExceededErrorMessage)(a)),this.isMaxDepth=!0,!1;if(i+=1,t.fields.length!==1)return c.push((0,Fe.subscriptionFilterConditionInvalidInputFieldNumberErrorMessage)(a,t.fields.length)),!1;let l=t.fields[0],p=l.name.value;if(!bq.SUBSCRIPTION_FILTER_INPUT_NAMES.has(p))return c.push((0,Fe.subscriptionFilterConditionInvalidInputFieldErrorMessage)(a,p)),!1;let T=a+`.${p}`;switch(l.value.kind){case Re.Kind.OBJECT:switch(p){case Oe.IN_UPPER:return n.in={fieldPath:[],values:[]},this.validateSubscriptionFieldCondition(l.value,n.in,r,i,a+".IN",o,c);case Oe.NOT_UPPER:return n.not={},this.validateSubscriptionFilterCondition(l.value,n.not,r,i,a+".NOT",o,c);default:return c.push((0,Fe.subscriptionFilterConditionInvalidInputFieldTypeErrorMessage)(T,Oe.LIST,Oe.OBJECT)),!1}case Re.Kind.LIST:{let y=[];switch(p){case Oe.AND_UPPER:{n.and=y;break}case Oe.OR_UPPER:{n.or=y;break}default:return c.push((0,Fe.subscriptionFilterConditionInvalidInputFieldTypeErrorMessage)(T,Oe.OBJECT,Oe.LIST)),!1}let g=l.value.values.length;if(g<1||g>5)return c.push((0,Fe.subscriptionFilterArrayConditionInvalidLengthErrorMessage)(T,g)),!1;let _=!0,F=[];for(let U=0;U0?(c.push((0,Fe.subscriptionFilterArrayConditionInvalidItemTypeErrorMessage)(T,F)),!1):_}default:{let y=bq.SUBSCRIPTION_FILTER_LIST_INPUT_NAMES.has(p)?Oe.LIST:Oe.OBJECT;return c.push((0,Fe.subscriptionFilterConditionInvalidInputFieldTypeErrorMessage)(T,y,(0,he.kindToTypeString)(l.value.kind))),!1}}}validateSubscriptionFilterAndGenerateConfiguration(t,n,r,i,a,o){if(!t.arguments||t.arguments.length!==1)return;let c=t.arguments[0];if(c.value.kind!==Re.Kind.OBJECT){this.errors.push((0,Fe.invalidSubscriptionFilterDirectiveError)(r,[(0,Fe.subscriptionFilterConditionInvalidInputFieldTypeErrorMessage)(Oe.CONDITION,Oe.OBJECT,(0,he.kindToTypeString)(c.value.kind))]));return}let l={},p=[];if(!this.validateSubscriptionFilterCondition(c.value,l,n,0,Oe.CONDITION,o,p)){this.errors.push((0,Fe.invalidSubscriptionFilterDirectiveError)(r,p)),this.isMaxDepth=!1;return}(0,he.getValueOrDefault)(this.fieldConfigurationByFieldCoords,r,()=>({argumentNames:[],fieldName:i,typeName:a})).subscriptionFilterCondition=l}validateSubscriptionFiltersAndGenerateConfiguration(){for(let[t,n]of this.subscriptionFilterDataByFieldPath){if(this.inaccessibleCoords.has(t))continue;let r=this.parentDefinitionDataByTypeName.get(n.fieldData.namedTypeName);if(!r){this.errors.push((0,Fe.invalidSubscriptionFilterDirectiveError)(t,[(0,Fe.subscriptionFilterNamedTypeErrorMessage)(n.fieldData.namedTypeName)]));continue}(0,ge.isNodeDataInaccessible)(r)||r.kind===Re.Kind.OBJECT_TYPE_DEFINITION&&this.validateSubscriptionFilterAndGenerateConfiguration(n.directive,r,t,n.fieldData.name,n.fieldData.renamedParentTypeName,n.directiveSubgraphName)}}buildFederationResult(){this.subscriptionFilterDataByFieldPath.size>0&&this.validateSubscriptionFiltersAndGenerateConfiguration(),this.invalidORScopesCoords.size>0&&this.errors.push((0,Fe.orScopesLimitError)(Kn.MAX_OR_SCOPES,[...this.invalidORScopesCoords]));for(let a of this.potentialPersistedDirectiveDefinitionDataByDirectiveName.values())(0,ge.addValidPersistedDirectiveDefinitionNodeByData)(this.routerDefinitions,a,this.persistedDirectiveDefinitionByDirectiveName,this.errors);let t=[];this.pushParentDefinitionDataToDocumentDefinitions(t),this.validateInterfaceImplementationsAndPushToDocumentDefinitions(t),this.validateQueryRootType();for(let a of this.inaccessibleRequiredInputValueErrorByCoords.values())this.errors.push(a);if(this.errors.length>0)return{errors:this.errors,success:!1,warnings:this.warnings};if(this.internalSubgraphBySubgraphName.size>1){let a=this.internalGraph.validate();if(a.length>0)return{errors:a,success:!1,warnings:this.warnings}}if(this.errors.length>0)return{errors:this.errors,success:!1,warnings:this.warnings};let n={kind:Re.Kind.DOCUMENT,definitions:this.routerDefinitions},r=(0,Re.buildASTSchema)({kind:Re.Kind.DOCUMENT,definitions:this.clientDefinitions},{assumeValid:!0,assumeValidSDL:!0}),i=new Map;for(let a of this.internalSubgraphBySubgraphName.values())i.set(a.name,{configurationDataByTypeName:a.configurationDataByTypeName,parentDefinitionDataByTypeName:a.parentDefinitionDataByTypeName,schema:a.schema});for(let a of this.authorizationDataByParentTypeName.values())(0,ni.upsertAuthorizationConfiguration)(this.fieldConfigurationByFieldCoords,a);return M({fieldConfigurations:Array.from(this.fieldConfigurationByFieldCoords.values()),subgraphConfigBySubgraphName:i,federatedGraphAST:n,federatedGraphSchema:(0,Re.buildASTSchema)(n,{assumeValid:!0,assumeValidSDL:!0}),federatedGraphClientSchema:r,parentDefinitionDataByTypeName:this.parentDefinitionDataByTypeName,success:!0,warnings:this.warnings},this.getClientSchemaObjectBoolean())}getClientSchemaObjectBoolean(){return this.inaccessibleCoords.size<1&&this.tagNamesByCoords.size<1?{}:{shouldIncludeClientSchema:!0}}handleChildTagExclusions(t,n,r,i){let a=n.size;for(let[o,c]of r){let l=(0,he.getOrThrowError)(n,o,`${t.name}.childDataByChildName`);if((0,ge.isNodeDataInaccessible)(l)){a-=1;continue}i.isDisjointFrom(c.tagNames)||((0,he.getValueOrDefault)(l.persistedDirectivesData.directivesByDirectiveName,Oe.INACCESSIBLE,()=>[(0,he.generateSimpleDirective)(Oe.INACCESSIBLE)]),this.inaccessibleCoords.add(`${t.name}.${o}`),a-=1)}a<1&&(t.persistedDirectivesData.directivesByDirectiveName.set(Oe.INACCESSIBLE,[(0,he.generateSimpleDirective)(Oe.INACCESSIBLE)]),this.inaccessibleCoords.add(t.name))}handleChildTagInclusions(t,n,r,i){let a=n.size;for(let[o,c]of n){if((0,ge.isNodeDataInaccessible)(c)){a-=1;continue}let l=r.get(o);(!l||i.isDisjointFrom(l.tagNames))&&((0,he.getValueOrDefault)(c.persistedDirectivesData.directivesByDirectiveName,Oe.INACCESSIBLE,()=>[(0,he.generateSimpleDirective)(Oe.INACCESSIBLE)]),this.inaccessibleCoords.add(`${t.name}.${o}`),a-=1)}a<1&&(t.persistedDirectivesData.directivesByDirectiveName.set(Oe.INACCESSIBLE,[(0,he.generateSimpleDirective)(Oe.INACCESSIBLE)]),this.inaccessibleCoords.add(t.name))}buildFederationContractResult(t){if(this.isVersionTwo||this.routerDefinitions.push(Kn.INACCESSIBLE_DEFINITION),t.tagNamesToExclude.size>0)for(let[o,c]of this.parentTagDataByTypeName){let l=(0,he.getOrThrowError)(this.parentDefinitionDataByTypeName,o,Oe.PARENT_DEFINITION_DATA);if(!(0,ge.isNodeDataInaccessible)(l)){if(!t.tagNamesToExclude.isDisjointFrom(c.tagNames)){l.persistedDirectivesData.directivesByDirectiveName.set(Oe.INACCESSIBLE,[(0,he.generateSimpleDirective)(Oe.INACCESSIBLE)]),this.inaccessibleCoords.add(o);continue}if(!(c.childTagDataByChildName.size<1))switch(l.kind){case Re.Kind.SCALAR_TYPE_DEFINITION:case Re.Kind.UNION_TYPE_DEFINITION:continue;case Re.Kind.ENUM_TYPE_DEFINITION:this.handleChildTagExclusions(l,l.enumValueDataByValueName,c.childTagDataByChildName,t.tagNamesToExclude);break;case Re.Kind.INPUT_OBJECT_TYPE_DEFINITION:this.handleChildTagExclusions(l,l.inputValueDataByValueName,c.childTagDataByChildName,t.tagNamesToExclude);break;default:let p=l.fieldDataByFieldName.size;for(let[T,y]of c.childTagDataByChildName){let g=(0,he.getOrThrowError)(l.fieldDataByFieldName,T,`${o}.fieldDataByFieldName`);if((0,ge.isNodeDataInaccessible)(g)){p-=1;continue}if(!t.tagNamesToExclude.isDisjointFrom(y.tagNames)){(0,he.getValueOrDefault)(g.persistedDirectivesData.directivesByDirectiveName,Oe.INACCESSIBLE,()=>[(0,he.generateSimpleDirective)(Oe.INACCESSIBLE)]),this.inaccessibleCoords.add(g.federatedCoords),p-=1;continue}for(let[_,F]of y.tagNamesByArgumentName){let U=(0,he.getOrThrowError)(g.argumentDataByArgumentName,_,`${T}.argumentDataByArgumentName`);(0,ge.isNodeDataInaccessible)(U)||F.isDisjointFrom(F)||((0,he.getValueOrDefault)(U.persistedDirectivesData.directivesByDirectiveName,Oe.INACCESSIBLE,()=>[(0,he.generateSimpleDirective)(Oe.INACCESSIBLE)]),this.inaccessibleCoords.add(U.federatedCoords))}}p<1&&(l.persistedDirectivesData.directivesByDirectiveName.set(Oe.INACCESSIBLE,[(0,he.generateSimpleDirective)(Oe.INACCESSIBLE)]),this.inaccessibleCoords.add(o))}}}else if(t.tagNamesToInclude.size>0)for(let[o,c]of this.parentDefinitionDataByTypeName){if((0,ge.isNodeDataInaccessible)(c))continue;let l=this.parentTagDataByTypeName.get(o);if(!l){c.persistedDirectivesData.directivesByDirectiveName.set(Oe.INACCESSIBLE,[(0,he.generateSimpleDirective)(Oe.INACCESSIBLE)]),this.inaccessibleCoords.add(o);continue}if(t.tagNamesToInclude.isDisjointFrom(l.tagNames)){if(l.childTagDataByChildName.size<1){c.persistedDirectivesData.directivesByDirectiveName.set(Oe.INACCESSIBLE,[(0,he.generateSimpleDirective)(Oe.INACCESSIBLE)]),this.inaccessibleCoords.add(o);continue}switch(c.kind){case Re.Kind.SCALAR_TYPE_DEFINITION:case Re.Kind.UNION_TYPE_DEFINITION:continue;case Re.Kind.ENUM_TYPE_DEFINITION:this.handleChildTagInclusions(c,c.enumValueDataByValueName,l.childTagDataByChildName,t.tagNamesToInclude);break;case Re.Kind.INPUT_OBJECT_TYPE_DEFINITION:this.handleChildTagInclusions(c,c.inputValueDataByValueName,l.childTagDataByChildName,t.tagNamesToInclude);break;default:let p=c.fieldDataByFieldName.size;for(let[T,y]of c.fieldDataByFieldName){if((0,ge.isNodeDataInaccessible)(y)){p-=1;continue}let g=l.childTagDataByChildName.get(T);(!g||t.tagNamesToInclude.isDisjointFrom(g.tagNames))&&((0,he.getValueOrDefault)(y.persistedDirectivesData.directivesByDirectiveName,Oe.INACCESSIBLE,()=>[(0,he.generateSimpleDirective)(Oe.INACCESSIBLE)]),this.inaccessibleCoords.add(y.federatedCoords),p-=1)}p<1&&(c.persistedDirectivesData.directivesByDirectiveName.set(Oe.INACCESSIBLE,[(0,he.generateSimpleDirective)(Oe.INACCESSIBLE)]),this.inaccessibleCoords.add(o))}}}this.subscriptionFilterDataByFieldPath.size>0&&this.validateSubscriptionFiltersAndGenerateConfiguration();for(let o of this.potentialPersistedDirectiveDefinitionDataByDirectiveName.values())(0,ge.addValidPersistedDirectiveDefinitionNodeByData)(this.routerDefinitions,o,this.persistedDirectiveDefinitionByDirectiveName,this.errors);let n=[];if(this.pushParentDefinitionDataToDocumentDefinitions(n),this.validateInterfaceImplementationsAndPushToDocumentDefinitions(n),this.validateQueryRootType(),this.errors.length>0)return{errors:this.errors,success:!1,warnings:this.warnings};let r={kind:Re.Kind.DOCUMENT,definitions:this.routerDefinitions},i=(0,Re.buildASTSchema)({kind:Re.Kind.DOCUMENT,definitions:this.clientDefinitions},{assumeValid:!0,assumeValidSDL:!0}),a=new Map;for(let o of this.internalSubgraphBySubgraphName.values())a.set(o.name,{configurationDataByTypeName:o.configurationDataByTypeName,parentDefinitionDataByTypeName:o.parentDefinitionDataByTypeName,schema:o.schema});for(let o of this.authorizationDataByParentTypeName.values())(0,ni.upsertAuthorizationConfiguration)(this.fieldConfigurationByFieldCoords,o);return M({fieldConfigurations:Array.from(this.fieldConfigurationByFieldCoords.values()),subgraphConfigBySubgraphName:a,federatedGraphAST:r,federatedGraphSchema:(0,Re.buildASTSchema)(r,{assumeValid:!0,assumeValidSDL:!0}),federatedGraphClientSchema:i,parentDefinitionDataByTypeName:this.parentDefinitionDataByTypeName,success:!0,warnings:this.warnings},this.getClientSchemaObjectBoolean())}federateSubgraphsInternal(){return this.federateSubgraphData(),this.buildFederationResult()}};pc.FederationFactory=fE;function MO(e){if(e.length<1)return{errors:[Fe.minimumSubgraphRequirementError],success:!1,warnings:[]};let t=(0,Kce.batchNormalize)(e);if(!t.success)return{errors:t.errors,success:!1,warnings:t.warnings};let n=new Map,r=new Map;for(let[a,o]of t.internalSubgraphBySubgraphName)for(let[c,l]of o.entityInterfaces){let p=n.get(c);if(!p){n.set(c,(0,ni.newEntityInterfaceFederationData)(l,a));continue}(0,ni.upsertEntityInterfaceFederationData)(p,l,a)}let i=[];for(let[a,o]of n){let c=o.concreteTypeNames.size;for(let[l,p]of o.subgraphDataByTypeName){if(!p.isInterfaceObject){p.resolvable&&p.concreteTypeNames.size!==c&&(0,he.getValueOrDefault)(r,a,()=>[]).push({subgraphName:l,concreteTypeNames:p.concreteTypeNames});continue}let T=(0,he.getOrThrowError)(t.internalSubgraphBySubgraphName,l,"internalSubgraphBySubgraphName").parentDefinitionDataByTypeName,y=[];for(let g of o.concreteTypeNames)T.has(g)&&y.push(g);y.length>0&&i.push((0,Fe.invalidInterfaceObjectImplementationDefinitionsError)(a,l,y))}}return r.size>0&&i.push((0,Fe.undefinedEntityInterfaceImplementationsError)(r,n)),i.length>0?{errors:i,success:!1,warnings:t.warnings}:{federationFactory:new fE({authorizationDataByParentTypeName:t.authorizationDataByParentTypeName,concreteTypeNamesByAbstractTypeName:t.concreteTypeNamesByAbstractTypeName,entityDataByTypeName:t.entityDataByTypeName,entityInterfaceFederationDataByTypeName:n,fieldCoordsByNamedTypeName:t.fieldCoordsByNamedTypeName,internalSubgraphBySubgraphName:t.internalSubgraphBySubgraphName,internalGraph:t.internalGraph,warnings:t.warnings}),success:!0,warnings:t.warnings}}function Qce(e){let t=MO(e);return t.success?t.federationFactory.federateSubgraphsInternal():{errors:t.errors,success:!1,warnings:t.warnings}}function Yce(e,t){let n=MO(e);if(!n.success)return{errors:n.errors,success:!1,warnings:n.warnings};n.federationFactory.federateSubgraphData();let r=[(0,Rq.cloneDeep)(n.federationFactory)],i=n.federationFactory.buildFederationResult();if(!i.success)return{errors:i.errors,success:!1,warnings:i.warnings};let a=t.size-1,o=new Map,c=0;for(let[l,p]of t){c!==a&&r.push((0,Rq.cloneDeep)(r[c]));let T=r[c].buildFederationContractResult(p);o.set(l,T),c++}return Q(M({},i),{federationResultByContractName:o})}function Jce(e,t){let n=MO(e);return n.success?(n.federationFactory.federateSubgraphData(),n.federationFactory.buildFederationContractResult(t)):{errors:n.errors,success:!1,warnings:n.warnings}}});var mE=w(Os=>{"use strict";f();N();m();Object.defineProperty(Os,"__esModule",{value:!0});Os.LATEST_ROUTER_COMPATIBILITY_VERSION=Os.ROUTER_COMPATIBILITY_VERSIONS=Os.ROUTER_COMPATIBILITY_VERSION_ONE=void 0;Os.ROUTER_COMPATIBILITY_VERSION_ONE="1";Os.ROUTER_COMPATIBILITY_VERSIONS=new Set([Os.ROUTER_COMPATIBILITY_VERSION_ONE]);Os.LATEST_ROUTER_COMPATIBILITY_VERSION="1"});var Pq=w(Cp=>{"use strict";f();N();m();Object.defineProperty(Cp,"__esModule",{value:!0});Cp.federateSubgraphs=Hce;Cp.federateSubgraphsWithContracts=zce;Cp.federateSubgraphsContract=Wce;var xO=Fq(),qO=mE();function Hce(e,t=qO.ROUTER_COMPATIBILITY_VERSION_ONE){switch(t){default:return(0,xO.federateSubgraphs)(e)}}function zce(e,t,n=qO.ROUTER_COMPATIBILITY_VERSION_ONE){switch(n){default:return(0,xO.federateSubgraphsWithContracts)(e,t)}}function Wce(e,t,n=qO.ROUTER_COMPATIBILITY_VERSION_ONE){switch(n){default:return(0,xO.federateSubgraphsContract)(e,t)}}});var Lq=w(wq=>{"use strict";f();N();m();Object.defineProperty(wq,"__esModule",{value:!0})});var Cq=w(Bp=>{"use strict";f();N();m();Object.defineProperty(Bp,"__esModule",{value:!0});Bp.normalizeSubgraphFromString=Xce;Bp.normalizeSubgraph=Zce;Bp.batchNormalize=ele;var VO=CO(),jO=mE();function Xce(e,t=!0,n=jO.ROUTER_COMPATIBILITY_VERSION_ONE){switch(n){default:return(0,VO.normalizeSubgraphFromString)(e,t)}}function Zce(e,t,n,r=jO.ROUTER_COMPATIBILITY_VERSION_ONE){switch(r){default:return(0,VO.normalizeSubgraph)(e,t,n)}}function ele(e,t=jO.ROUTER_COMPATIBILITY_VERSION_ONE){switch(t){default:return(0,VO.batchNormalize)(e)}}});var Uq=w(Bq=>{"use strict";f();N();m();Object.defineProperty(Bq,"__esModule",{value:!0})});var Mq=w(kq=>{"use strict";f();N();m();Object.defineProperty(kq,"__esModule",{value:!0})});var qq=w(xq=>{"use strict";f();N();m();Object.defineProperty(xq,"__esModule",{value:!0})});var Vq=w(NE=>{"use strict";f();N();m();Object.defineProperty(NE,"__esModule",{value:!0});NE.COMPOSITION_VERSION=void 0;NE.COMPOSITION_VERSION="{{$COMPOSITION__VERSION}}"});var Kq=w(jq=>{"use strict";f();N();m();Object.defineProperty(jq,"__esModule",{value:!0})});var $q=w(Gq=>{"use strict";f();N();m();Object.defineProperty(Gq,"__esModule",{value:!0})});var TE=w(Tt=>{"use strict";f();N();m();var tle=Tt&&Tt.__createBinding||(Object.create?function(e,t,n,r){r===void 0&&(r=n);var i=Object.getOwnPropertyDescriptor(t,n);(!i||("get"in i?!t.__esModule:i.writable||i.configurable))&&(i={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,i)}:function(e,t,n,r){r===void 0&&(r=n),e[r]=t[n]}),wt=Tt&&Tt.__exportStar||function(e,t){for(var n in e)n!=="default"&&!Object.prototype.hasOwnProperty.call(t,n)&&tle(t,e,n)};Object.defineProperty(Tt,"__esModule",{value:!0});wt(Jr(),Tt);wt(Y_(),Tt);wt(sa(),Tt);wt(YL(),Tt);wt(Pq(),Tt);wt(Lq(),Tt);wt(Cq(),Tt);wt(Uq(),Tt);wt(PO(),Tt);wt(DO(),Tt);wt(AO(),Tt);wt(mE(),Tt);wt(Mq(),Tt);wt(wO(),Tt);wt(Jo(),Tt);wt(bp(),Tt);wt(Rp(),Tt);wt(qq(),Tt);wt(Vq(),Tt);wt(lr(),Tt);wt(Kq(),Tt);wt(Hr(),Tt);wt(mO(),Tt);wt(EN(),Tt);wt(kO(),Tt);wt(cO(),Tt);wt(Dp(),Tt);wt($q(),Tt);wt(gO(),Tt);wt(lE(),Tt);wt(pO(),Tt);wt(hs(),Tt);wt(up(),Tt);wt(np(),Tt);wt(eE(),Tt)});var Jle={};jf(Jle,{buildRouterConfiguration:()=>Yle,federateSubgraphs:()=>Qle});f();N();m();var hc=os(TE());f();N();m();f();N();m();function KO(e){if(!e)return e;if(!URL.canParse(e))throw new Error("Invalid URL");let t=e.indexOf("?"),n=e.indexOf("#"),r=e;return t>0?r=r.slice(0,n>0?Math.min(t,n):t):n>0&&(r=r.slice(0,n)),r}f();N();m();f();N();m();var Qq={};f();N();m();function Yq(e){return e!=null}f();N();m();f();N();m();var Xq=os(Ae(),1);f();N();m();var Jq;if(typeof AggregateError=="undefined"){class e extends Error{constructor(n,r=""){super(r),this.errors=n,this.name="AggregateError",Error.captureStackTrace(this,e)}}Jq=function(t,n){return new e(t,n)}}else Jq=AggregateError;function Hq(e){return"errors"in e&&Array.isArray(e.errors)}var Zq=3;function eV(e){return EE(e,[])}function EE(e,t){switch(typeof e){case"string":return JSON.stringify(e);case"function":return e.name?`[function ${e.name}]`:"[function]";case"object":return nle(e,t);default:return String(e)}}function zq(e){return e instanceof Xq.GraphQLError?e.toString():`${e.name}: ${e.message}; - ${e.stack}`}function nle(e,t){if(e===null)return"null";if(e instanceof Error)return Hq(e)?zq(e)+` -`+Wq(e.errors,t):zq(e);if(t.includes(e))return"[Circular]";let n=[...t,e];if(rle(e)){let r=e.toJSON();if(r!==e)return typeof r=="string"?r:EE(r,n)}else if(Array.isArray(e))return Wq(e,n);return ile(e,n)}function rle(e){return typeof e.toJSON=="function"}function ile(e,t){let n=Object.entries(e);return n.length===0?"{}":t.length>Zq?"["+ale(e)+"]":"{ "+n.map(([i,a])=>i+": "+EE(a,t)).join(", ")+" }"}function Wq(e,t){if(e.length===0)return"[]";if(t.length>Zq)return"[Array]";let n=e.length,r=[];for(let i=0;in==null?n:n[r],e==null?void 0:e.extensions)}f();N();m();var Pe=os(Ae(),1);f();N();m();var Qa=os(Ae(),1);function Ya(e){if((0,Qa.isNonNullType)(e)){let t=Ya(e.ofType);if(t.kind===Qa.Kind.NON_NULL_TYPE)throw new Error(`Invalid type node ${eV(e)}. Inner type of non-null type cannot be a non-null type.`);return{kind:Qa.Kind.NON_NULL_TYPE,type:t}}else if((0,Qa.isListType)(e))return{kind:Qa.Kind.LIST_TYPE,type:Ya(e.ofType)};return{kind:Qa.Kind.NAMED_TYPE,name:{kind:Qa.Kind.NAME,value:e.name}}}f();N();m();var Ja=os(Ae(),1);function yE(e){if(e===null)return{kind:Ja.Kind.NULL};if(e===void 0)return null;if(Array.isArray(e)){let t=[];for(let n of e){let r=yE(n);r!=null&&t.push(r)}return{kind:Ja.Kind.LIST,values:t}}if(typeof e=="object"){let t=[];for(let n in e){let r=e[n],i=yE(r);i&&t.push({kind:Ja.Kind.OBJECT_FIELD,name:{kind:Ja.Kind.NAME,value:n},value:i})}return{kind:Ja.Kind.OBJECT,fields:t}}if(typeof e=="boolean")return{kind:Ja.Kind.BOOLEAN,value:e};if(typeof e=="number"&&isFinite(e)){let t=String(e);return sle.test(t)?{kind:Ja.Kind.INT,value:t}:{kind:Ja.Kind.FLOAT,value:t}}if(typeof e=="string")return{kind:Ja.Kind.STRING,value:e};throw new TypeError(`Cannot convert value to AST: ${e}.`)}var sle=/^-?(?:0|[1-9][0-9]*)$/;f();N();m();f();N();m();function IE(e){let t=new WeakMap;return function(r){let i=t.get(r);if(i===void 0){let a=e(r);return t.set(r,a),a}return i}}var hUe=IE(function(t){let n=ole(t);return new Set([...n].map(r=>r.name))}),ole=IE(function(t){let n=GO(t);return new Set(n.values())}),GO=IE(function(t){let n=new Map,r=t.getQueryType();r&&n.set("query",r);let i=t.getMutationType();i&&n.set("mutation",i);let a=t.getSubscriptionType();return a&&n.set("subscription",a),n});function ule(e,t={}){let n=t.pathToDirectivesInExtensions,r=e.getTypeMap(),i=cle(e,n),a=i!=null?[i]:[],o=e.getDirectives();for(let c of o)(0,Pe.isSpecifiedDirective)(c)||a.push(lle(c,e,n));for(let c in r){let l=r[c],p=(0,Pe.isSpecifiedScalarType)(l),T=(0,Pe.isIntrospectionType)(l);if(!(p||T))if((0,Pe.isObjectType)(l))a.push(dle(l,e,n));else if((0,Pe.isInterfaceType)(l))a.push(ple(l,e,n));else if((0,Pe.isUnionType)(l))a.push(fle(l,e,n));else if((0,Pe.isInputObjectType)(l))a.push(mle(l,e,n));else if((0,Pe.isEnumType)(l))a.push(Nle(l,e,n));else if((0,Pe.isScalarType)(l))a.push(Tle(l,e,n));else throw new Error(`Unknown type ${l}.`)}return{kind:Pe.Kind.DOCUMENT,definitions:a}}function tV(e,t={}){let n=ule(e,t);return(0,Pe.print)(n)}function cle(e,t){var n,r;let i=new Map([["query",void 0],["mutation",void 0],["subscription",void 0]]),a=[];if(e.astNode!=null&&a.push(e.astNode),e.extensionASTNodes!=null)for(let T of e.extensionASTNodes)a.push(T);for(let T of a)if(T.operationTypes)for(let y of T.operationTypes)i.set(y.operation,y);let o=GO(e);for(let[T,y]of i){let g=o.get(T);if(g!=null){let _=Ya(g);y!=null?y.type=_:i.set(T,{kind:Pe.Kind.OPERATION_TYPE_DEFINITION,operation:T,type:_})}}let c=[...i.values()].filter(Yq),l=Cl(e,e,t);if(!c.length&&!l.length)return null;let p={kind:c!=null?Pe.Kind.SCHEMA_DEFINITION:Pe.Kind.SCHEMA_EXTENSION,operationTypes:c,directives:l};return p.description=((r=(n=e.astNode)===null||n===void 0?void 0:n.description)!==null&&r!==void 0?r:e.description!=null)?{kind:Pe.Kind.STRING,value:e.description,block:!0}:void 0,p}function lle(e,t,n){var r,i,a,o;return{kind:Pe.Kind.DIRECTIVE_DEFINITION,description:(i=(r=e.astNode)===null||r===void 0?void 0:r.description)!==null&&i!==void 0?i:e.description?{kind:Pe.Kind.STRING,value:e.description}:void 0,name:{kind:Pe.Kind.NAME,value:e.name},arguments:(a=e.args)===null||a===void 0?void 0:a.map(c=>nV(c,t,n)),repeatable:e.isRepeatable,locations:((o=e.locations)===null||o===void 0?void 0:o.map(c=>({kind:Pe.Kind.NAME,value:c})))||[]}}function Cl(e,t,n){let r=hE(e,n),i=[];e.astNode!=null&&i.push(e.astNode),"extensionASTNodes"in e&&e.extensionASTNodes!=null&&(i=i.concat(e.extensionASTNodes));let a;if(r!=null)a=$O(t,r);else{a=[];for(let o of i)o.directives&&a.push(...o.directives)}return a}function _E(e,t,n){var r,i;let a=[],o=null,c=hE(e,n),l;return c!=null?l=$O(t,c):l=(r=e.astNode)===null||r===void 0?void 0:r.directives,l!=null&&(a=l.filter(p=>p.name.value!=="deprecated"),e.deprecationReason!=null&&(o=(i=l.filter(p=>p.name.value==="deprecated"))===null||i===void 0?void 0:i[0])),e.deprecationReason!=null&&o==null&&(o=yle(e.deprecationReason)),o==null?a:[o].concat(a)}function nV(e,t,n){var r,i,a;return{kind:Pe.Kind.INPUT_VALUE_DEFINITION,description:(i=(r=e.astNode)===null||r===void 0?void 0:r.description)!==null&&i!==void 0?i:e.description?{kind:Pe.Kind.STRING,value:e.description,block:!0}:void 0,name:{kind:Pe.Kind.NAME,value:e.name},type:Ya(e.type),defaultValue:e.defaultValue!==void 0&&(a=(0,Pe.astFromValue)(e.defaultValue,e.type))!==null&&a!==void 0?a:void 0,directives:_E(e,t,n)}}function dle(e,t,n){var r,i;return{kind:Pe.Kind.OBJECT_TYPE_DEFINITION,description:(i=(r=e.astNode)===null||r===void 0?void 0:r.description)!==null&&i!==void 0?i:e.description?{kind:Pe.Kind.STRING,value:e.description,block:!0}:void 0,name:{kind:Pe.Kind.NAME,value:e.name},fields:Object.values(e.getFields()).map(a=>rV(a,t,n)),interfaces:Object.values(e.getInterfaces()).map(a=>Ya(a)),directives:Cl(e,t,n)}}function ple(e,t,n){var r,i;let a={kind:Pe.Kind.INTERFACE_TYPE_DEFINITION,description:(i=(r=e.astNode)===null||r===void 0?void 0:r.description)!==null&&i!==void 0?i:e.description?{kind:Pe.Kind.STRING,value:e.description,block:!0}:void 0,name:{kind:Pe.Kind.NAME,value:e.name},fields:Object.values(e.getFields()).map(o=>rV(o,t,n)),directives:Cl(e,t,n)};return"getInterfaces"in e&&(a.interfaces=Object.values(e.getInterfaces()).map(o=>Ya(o))),a}function fle(e,t,n){var r,i;return{kind:Pe.Kind.UNION_TYPE_DEFINITION,description:(i=(r=e.astNode)===null||r===void 0?void 0:r.description)!==null&&i!==void 0?i:e.description?{kind:Pe.Kind.STRING,value:e.description,block:!0}:void 0,name:{kind:Pe.Kind.NAME,value:e.name},directives:Cl(e,t,n),types:e.getTypes().map(a=>Ya(a))}}function mle(e,t,n){var r,i;return{kind:Pe.Kind.INPUT_OBJECT_TYPE_DEFINITION,description:(i=(r=e.astNode)===null||r===void 0?void 0:r.description)!==null&&i!==void 0?i:e.description?{kind:Pe.Kind.STRING,value:e.description,block:!0}:void 0,name:{kind:Pe.Kind.NAME,value:e.name},fields:Object.values(e.getFields()).map(a=>Ele(a,t,n)),directives:Cl(e,t,n)}}function Nle(e,t,n){var r,i;return{kind:Pe.Kind.ENUM_TYPE_DEFINITION,description:(i=(r=e.astNode)===null||r===void 0?void 0:r.description)!==null&&i!==void 0?i:e.description?{kind:Pe.Kind.STRING,value:e.description,block:!0}:void 0,name:{kind:Pe.Kind.NAME,value:e.name},values:Object.values(e.getValues()).map(a=>hle(a,t,n)),directives:Cl(e,t,n)}}function Tle(e,t,n){var r,i,a;let o=hE(e,n),c=o?$O(t,o):((r=e.astNode)===null||r===void 0?void 0:r.directives)||[],l=e.specifiedByUrl||e.specifiedByURL;if(l&&!c.some(p=>p.name.value==="specifiedBy")){let p={url:l};c.push(gE("specifiedBy",p))}return{kind:Pe.Kind.SCALAR_TYPE_DEFINITION,description:(a=(i=e.astNode)===null||i===void 0?void 0:i.description)!==null&&a!==void 0?a:e.description?{kind:Pe.Kind.STRING,value:e.description,block:!0}:void 0,name:{kind:Pe.Kind.NAME,value:e.name},directives:c}}function rV(e,t,n){var r,i;return{kind:Pe.Kind.FIELD_DEFINITION,description:(i=(r=e.astNode)===null||r===void 0?void 0:r.description)!==null&&i!==void 0?i:e.description?{kind:Pe.Kind.STRING,value:e.description,block:!0}:void 0,name:{kind:Pe.Kind.NAME,value:e.name},arguments:e.args.map(a=>nV(a,t,n)),type:Ya(e.type),directives:_E(e,t,n)}}function Ele(e,t,n){var r,i,a;return{kind:Pe.Kind.INPUT_VALUE_DEFINITION,description:(i=(r=e.astNode)===null||r===void 0?void 0:r.description)!==null&&i!==void 0?i:e.description?{kind:Pe.Kind.STRING,value:e.description,block:!0}:void 0,name:{kind:Pe.Kind.NAME,value:e.name},type:Ya(e.type),directives:_E(e,t,n),defaultValue:(a=(0,Pe.astFromValue)(e.defaultValue,e.type))!==null&&a!==void 0?a:void 0}}function hle(e,t,n){var r,i;return{kind:Pe.Kind.ENUM_VALUE_DEFINITION,description:(i=(r=e.astNode)===null||r===void 0?void 0:r.description)!==null&&i!==void 0?i:e.description?{kind:Pe.Kind.STRING,value:e.description,block:!0}:void 0,name:{kind:Pe.Kind.NAME,value:e.name},directives:_E(e,t,n)}}function yle(e){return gE("deprecated",{reason:e},Pe.GraphQLDeprecatedDirective)}function gE(e,t,n){let r=[];if(n!=null)for(let i of n.args){let a=i.name,o=t[a];if(o!==void 0){let c=(0,Pe.astFromValue)(o,i.type);c&&r.push({kind:Pe.Kind.ARGUMENT,name:{kind:Pe.Kind.NAME,value:a},value:c})}}else for(let i in t){let a=t[i],o=yE(a);o&&r.push({kind:Pe.Kind.ARGUMENT,name:{kind:Pe.Kind.NAME,value:i},value:o})}return{kind:Pe.Kind.DIRECTIVE,name:{kind:Pe.Kind.NAME,value:e},arguments:r}}function $O(e,t){let n=[];for(let r in t){let i=t[r],a=e==null?void 0:e.getDirective(r);if(Array.isArray(i))for(let o of i)n.push(gE(r,o,a));else n.push(gE(r,i,a))}return n}var Vl=os(TE(),1),YV=os(Ae(),1);f();N();m();f();N();m();f();N();m();f();N();m();f();N();m();f();N();m();function sn(e,t){if(!e)throw new Error(t)}var Ile=34028234663852886e22,gle=-34028234663852886e22,_le=4294967295,vle=2147483647,Sle=-2147483648;function Bl(e){if(typeof e!="number")throw new Error("invalid int 32: "+typeof e);if(!Number.isInteger(e)||e>vle||e_le||e<0)throw new Error("invalid uint 32: "+e)}function vE(e){if(typeof e!="number")throw new Error("invalid float 32: "+typeof e);if(Number.isFinite(e)&&(e>Ile||e({no:i.no,name:i.name,localName:e[i.no]})),r)}function YO(e,t,n){let r=Object.create(null),i=Object.create(null),a=[];for(let o of t){let c=oV(o);a.push(c),r[o.name]=c,i[o.no]=c}return{typeName:e,values:a,findName(o){return r[o]},findNumber(o){return i[o]}}}function sV(e,t,n){let r={};for(let i of t){let a=oV(i);r[a.localName]=a.no,r[a.no]=a.localName}return QO(r,e,t,n),r}function oV(e){return"localName"in e?e:Object.assign(Object.assign({},e),{localName:e.name})}f();N();m();f();N();m();var $e=class{equals(t){return this.getType().runtime.util.equals(this.getType(),this,t)}clone(){return this.getType().runtime.util.clone(this)}fromBinary(t,n){let r=this.getType(),i=r.runtime.bin,a=i.makeReadOptions(n);return i.readMessage(this,a.readerFactory(t),t.byteLength,a),this}fromJson(t,n){let r=this.getType(),i=r.runtime.json,a=i.makeReadOptions(n);return i.readMessage(r,t,a,this),this}fromJsonString(t,n){let r;try{r=JSON.parse(t)}catch(i){throw new Error(`cannot decode ${this.getType().typeName} from JSON: ${i instanceof Error?i.message:String(i)}`)}return this.fromJson(r,n)}toBinary(t){let n=this.getType(),r=n.runtime.bin,i=r.makeWriteOptions(t),a=i.writerFactory();return r.writeMessage(this,a,i),a.finish()}toJson(t){let n=this.getType(),r=n.runtime.json,i=r.makeWriteOptions(t);return r.writeMessage(this,i)}toJsonString(t){var n;let r=this.toJson(t);return JSON.stringify(r,null,(n=t==null?void 0:t.prettySpaces)!==null&&n!==void 0?n:0)}toJSON(){return this.toJson({emitDefaultValues:!0})}getType(){return Object.getPrototypeOf(this).constructor}};function uV(e,t,n,r){var i;let a=(i=r==null?void 0:r.localName)!==null&&i!==void 0?i:t.substring(t.lastIndexOf(".")+1),o={[a]:function(c){e.util.initFields(this),e.util.initPartial(c,this)}}[a];return Object.setPrototypeOf(o.prototype,new $e),Object.assign(o,{runtime:e,typeName:t,fields:e.util.newFieldList(n),fromBinary(c,l){return new o().fromBinary(c,l)},fromJson(c,l){return new o().fromJson(c,l)},fromJsonString(c,l){return new o().fromJsonString(c,l)},equals(c,l){return e.util.equals(o,c,l)}}),o}f();N();m();f();N();m();f();N();m();f();N();m();function lV(){let e=0,t=0;for(let r=0;r<28;r+=7){let i=this.buf[this.pos++];if(e|=(i&127)<>4,!(n&128))return this.assertBounds(),[e,t];for(let r=3;r<=31;r+=7){let i=this.buf[this.pos++];if(t|=(i&127)<>>a,c=!(!(o>>>7)&&t==0),l=(c?o|128:o)&255;if(n.push(l),!c)return}let r=e>>>28&15|(t&7)<<4,i=!!(t>>3);if(n.push((i?r|128:r)&255),!!i){for(let a=3;a<31;a=a+7){let o=t>>>a,c=!!(o>>>7),l=(c?o|128:o)&255;if(n.push(l),!c)return}n.push(t>>>31&1)}}var SE=4294967296;function JO(e){let t=e[0]==="-";t&&(e=e.slice(1));let n=1e6,r=0,i=0;function a(o,c){let l=Number(e.slice(o,c));i*=n,r=r*n+l,r>=SE&&(i=i+(r/SE|0),r=r%SE)}return a(-24,-18),a(-18,-12),a(-12,-6),a(-6),t?pV(r,i):zO(r,i)}function dV(e,t){let n=zO(e,t),r=n.hi&2147483648;r&&(n=pV(n.lo,n.hi));let i=HO(n.lo,n.hi);return r?"-"+i:i}function HO(e,t){if({lo:e,hi:t}=Ole(e,t),t<=2097151)return String(SE*t+e);let n=e&16777215,r=(e>>>24|t<<8)&16777215,i=t>>16&65535,a=n+r*6777216+i*6710656,o=r+i*8147497,c=i*2,l=1e7;return a>=l&&(o+=Math.floor(a/l),a%=l),o>=l&&(c+=Math.floor(o/l),o%=l),c.toString()+cV(o)+cV(a)}function Ole(e,t){return{lo:e>>>0,hi:t>>>0}}function zO(e,t){return{lo:e|0,hi:t|0}}function pV(e,t){return t=~t,e?e=~e+1:t+=1,zO(e,t)}var cV=e=>{let t=String(e);return"0000000".slice(t.length)+t};function WO(e,t){if(e>=0){for(;e>127;)t.push(e&127|128),e=e>>>7;t.push(e)}else{for(let n=0;n<9;n++)t.push(e&127|128),e=e>>7;t.push(1)}}function fV(){let e=this.buf[this.pos++],t=e&127;if(!(e&128))return this.assertBounds(),t;if(e=this.buf[this.pos++],t|=(e&127)<<7,!(e&128))return this.assertBounds(),t;if(e=this.buf[this.pos++],t|=(e&127)<<14,!(e&128))return this.assertBounds(),t;if(e=this.buf[this.pos++],t|=(e&127)<<21,!(e&128))return this.assertBounds(),t;e=this.buf[this.pos++],t|=(e&15)<<28;for(let n=5;e&128&&n<10;n++)e=this.buf[this.pos++];if(e&128)throw new Error("invalid varint");return this.assertBounds(),t>>>0}function Dle(){let e=new DataView(new ArrayBuffer(8));if(typeof BigInt=="function"&&typeof e.getBigInt64=="function"&&typeof e.getBigUint64=="function"&&typeof e.setBigInt64=="function"&&typeof e.setBigUint64=="function"&&(typeof O!="object"||typeof O.env!="object"||O.env.BUF_BIGINT_DISABLE!=="1")){let i=BigInt("-9223372036854775808"),a=BigInt("9223372036854775807"),o=BigInt("0"),c=BigInt("18446744073709551615");return{zero:BigInt(0),supported:!0,parse(l){let p=typeof l=="bigint"?l:BigInt(l);if(p>a||pc||psn(/^-?[0-9]+$/.test(i),`int64 invalid: ${i}`),r=i=>sn(/^[0-9]+$/.test(i),`uint64 invalid: ${i}`);return{zero:"0",supported:!1,parse(i){return typeof i!="string"&&(i=i.toString()),n(i),i},uParse(i){return typeof i!="string"&&(i=i.toString()),r(i),i},enc(i){return typeof i!="string"&&(i=i.toString()),n(i),JO(i)},uEnc(i){return typeof i!="string"&&(i=i.toString()),r(i),JO(i)},dec(i,a){return dV(i,a)},uDec(i,a){return HO(i,a)}}}var Gn=Dle();f();N();m();var Ne;(function(e){e[e.DOUBLE=1]="DOUBLE",e[e.FLOAT=2]="FLOAT",e[e.INT64=3]="INT64",e[e.UINT64=4]="UINT64",e[e.INT32=5]="INT32",e[e.FIXED64=6]="FIXED64",e[e.FIXED32=7]="FIXED32",e[e.BOOL=8]="BOOL",e[e.STRING=9]="STRING",e[e.BYTES=12]="BYTES",e[e.UINT32=13]="UINT32",e[e.SFIXED32=15]="SFIXED32",e[e.SFIXED64=16]="SFIXED64",e[e.SINT32=17]="SINT32",e[e.SINT64=18]="SINT64"})(Ne||(Ne={}));var Ta;(function(e){e[e.BIGINT=0]="BIGINT",e[e.STRING=1]="STRING"})(Ta||(Ta={}));function Ds(e,t,n){if(t===n)return!0;if(e==Ne.BYTES){if(!(t instanceof Uint8Array)||!(n instanceof Uint8Array)||t.length!==n.length)return!1;for(let r=0;r>>0)}raw(t){return this.buf.length&&(this.chunks.push(new Uint8Array(this.buf)),this.buf=[]),this.chunks.push(t),this}uint32(t){for(Up(t);t>127;)this.buf.push(t&127|128),t=t>>>7;return this.buf.push(t),this}int32(t){return Bl(t),WO(t,this.buf),this}bool(t){return this.buf.push(t?1:0),this}bytes(t){return this.uint32(t.byteLength),this.raw(t)}string(t){let n=this.textEncoder.encode(t);return this.uint32(n.byteLength),this.raw(n)}float(t){vE(t);let n=new Uint8Array(4);return new DataView(n.buffer).setFloat32(0,t,!0),this.raw(n)}double(t){let n=new Uint8Array(8);return new DataView(n.buffer).setFloat64(0,t,!0),this.raw(n)}fixed32(t){Up(t);let n=new Uint8Array(4);return new DataView(n.buffer).setUint32(0,t,!0),this.raw(n)}sfixed32(t){Bl(t);let n=new Uint8Array(4);return new DataView(n.buffer).setInt32(0,t,!0),this.raw(n)}sint32(t){return Bl(t),t=(t<<1^t>>31)>>>0,WO(t,this.buf),this}sfixed64(t){let n=new Uint8Array(8),r=new DataView(n.buffer),i=Gn.enc(t);return r.setInt32(0,i.lo,!0),r.setInt32(4,i.hi,!0),this.raw(n)}fixed64(t){let n=new Uint8Array(8),r=new DataView(n.buffer),i=Gn.uEnc(t);return r.setInt32(0,i.lo,!0),r.setInt32(4,i.hi,!0),this.raw(n)}int64(t){let n=Gn.enc(t);return OE(n.lo,n.hi,this.buf),this}sint64(t){let n=Gn.enc(t),r=n.hi>>31,i=n.lo<<1^r,a=(n.hi<<1|n.lo>>>31)^r;return OE(i,a,this.buf),this}uint64(t){let n=Gn.uEnc(t);return OE(n.lo,n.hi,this.buf),this}},AE=class{constructor(t,n){this.varint64=lV,this.uint32=fV,this.buf=t,this.len=t.length,this.pos=0,this.view=new DataView(t.buffer,t.byteOffset,t.byteLength),this.textDecoder=n!=null?n:new TextDecoder}tag(){let t=this.uint32(),n=t>>>3,r=t&7;if(n<=0||r<0||r>5)throw new Error("illegal tag: field no "+n+" wire type "+r);return[n,r]}skip(t){let n=this.pos;switch(t){case Un.Varint:for(;this.buf[this.pos++]&128;);break;case Un.Bit64:this.pos+=4;case Un.Bit32:this.pos+=4;break;case Un.LengthDelimited:let r=this.uint32();this.pos+=r;break;case Un.StartGroup:let i;for(;(i=this.tag()[1])!==Un.EndGroup;)this.skip(i);break;default:throw new Error("cant skip wire type "+t)}return this.assertBounds(),this.buf.subarray(n,this.pos)}assertBounds(){if(this.pos>this.len)throw new RangeError("premature EOF")}int32(){return this.uint32()|0}sint32(){let t=this.uint32();return t>>>1^-(t&1)}int64(){return Gn.dec(...this.varint64())}uint64(){return Gn.uDec(...this.varint64())}sint64(){let[t,n]=this.varint64(),r=-(t&1);return t=(t>>>1|(n&1)<<31)^r,n=n>>>1^r,Gn.dec(t,n)}bool(){let[t,n]=this.varint64();return t!==0||n!==0}fixed32(){return this.view.getUint32((this.pos+=4)-4,!0)}sfixed32(){return this.view.getInt32((this.pos+=4)-4,!0)}fixed64(){return Gn.uDec(this.sfixed32(),this.sfixed32())}sfixed64(){return Gn.dec(this.sfixed32(),this.sfixed32())}float(){return this.view.getFloat32((this.pos+=4)-4,!0)}double(){return this.view.getFloat64((this.pos+=8)-8,!0)}bytes(){let t=this.uint32(),n=this.pos;return this.pos+=t,this.assertBounds(),this.buf.subarray(n,n+t)}string(){return this.textDecoder.decode(this.bytes())}};function mV(e,t,n,r){let i;return{typeName:t,extendee:n,get field(){if(!i){let a=typeof r=="function"?r():r;a.name=t.split(".").pop(),a.jsonName=`[${t}]`,i=e.util.newFieldList([a]).list()[0]}return i},runtime:e}}function RE(e){let t=e.field.localName,n=Object.create(null);return n[t]=ble(e),[n,()=>n[t]]}function ble(e){let t=e.field;if(t.repeated)return[];if(t.default!==void 0)return t.default;switch(t.kind){case"enum":return t.T.values[0].no;case"scalar":return Ea(t.T,t.L);case"message":let n=t.T,r=new n;return n.fieldWrapper?n.fieldWrapper.unwrapField(r):r;case"map":throw"map fields are not allowed to be extensions"}}function NV(e,t){if(!t.repeated&&(t.kind=="enum"||t.kind=="scalar")){for(let n=e.length-1;n>=0;--n)if(e[n].no==t.no)return[e[n]];return[]}return e.filter(n=>n.no===t.no)}f();N();m();f();N();m();var bs="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split(""),FE=[];for(let e=0;e>4,o=a,i=2;break;case 2:n[r++]=(o&15)<<4|(a&60)>>2,o=a,i=3;break;case 3:n[r++]=(o&3)<<6|a,i=0;break}}if(i==1)throw Error("invalid base64 string.");return n.subarray(0,r)},enc(e){let t="",n=0,r,i=0;for(let a=0;a>2],i=(r&3)<<4,n=1;break;case 1:t+=bs[i|r>>4],i=(r&15)<<2,n=2;break;case 2:t+=bs[i|r>>6],t+=bs[r&63],n=0;break}return n&&(t+=bs[i],t+="=",n==1&&(t+="=")),t}};f();N();m();function TV(e,t,n){hV(t,e);let r=t.runtime.bin.makeReadOptions(n),i=NV(e.getType().runtime.bin.listUnknownFields(e),t.field),[a,o]=RE(t);for(let c of i)t.runtime.bin.readField(a,r.readerFactory(c.data),t.field,c.wireType,r);return o()}function EV(e,t,n,r){hV(t,e);let i=t.runtime.bin.makeReadOptions(r),a=t.runtime.bin.makeWriteOptions(r);if(ZO(e,t)){let p=e.getType().runtime.bin.listUnknownFields(e).filter(T=>T.no!=t.field.no);e.getType().runtime.bin.discardUnknownFields(e);for(let T of p)e.getType().runtime.bin.onUnknownField(e,T.no,T.wireType,T.data)}let o=a.writerFactory(),c=t.field;!c.opt&&!c.repeated&&(c.kind=="enum"||c.kind=="scalar")&&(c=Object.assign(Object.assign({},t.field),{opt:!0})),t.runtime.bin.writeField(c,n,o,a);let l=i.readerFactory(o.finish());for(;l.posr.no==t.field.no)}function hV(e,t){sn(e.extendee.typeName==t.getType().typeName,`extension ${e.typeName} can only be applied to message ${e.extendee.typeName}`)}f();N();m();function PE(e,t){let n=e.localName;if(e.repeated)return t[n].length>0;if(e.oneof)return t[e.oneof.localName].case===n;switch(e.kind){case"enum":case"scalar":return e.opt||e.req?t[n]!==void 0:e.kind=="enum"?t[n]!==e.T.values[0].no:!DE(e.T,t[n]);case"message":return t[n]!==void 0;case"map":return Object.keys(t[n]).length>0}}function eD(e,t){let n=e.localName,r=!e.opt&&!e.req;if(e.repeated)t[n]=[];else if(e.oneof)t[e.oneof.localName]={case:void 0};else switch(e.kind){case"map":t[n]={};break;case"enum":t[n]=r?e.T.values[0].no:void 0;break;case"scalar":t[n]=r?Ea(e.T,e.L):void 0;break;case"message":t[n]=void 0;break}}f();N();m();f();N();m();function ha(e,t){if(e===null||typeof e!="object"||!Object.getOwnPropertyNames($e.prototype).every(r=>r in e&&typeof e[r]=="function"))return!1;let n=e.getType();return n===null||typeof n!="function"||!("typeName"in n)||typeof n.typeName!="string"?!1:t===void 0?!0:n.typeName==t.typeName}function wE(e,t){return ha(t)||!e.fieldWrapper?t:e.fieldWrapper.wrapField(t)}var Wke={"google.protobuf.DoubleValue":Ne.DOUBLE,"google.protobuf.FloatValue":Ne.FLOAT,"google.protobuf.Int64Value":Ne.INT64,"google.protobuf.UInt64Value":Ne.UINT64,"google.protobuf.Int32Value":Ne.INT32,"google.protobuf.UInt32Value":Ne.UINT32,"google.protobuf.BoolValue":Ne.BOOL,"google.protobuf.StringValue":Ne.STRING,"google.protobuf.BytesValue":Ne.BYTES};var yV={ignoreUnknownFields:!1},IV={emitDefaultValues:!1,enumAsInteger:!1,useProtoFieldName:!1,prettySpaces:0};function Ale(e){return e?Object.assign(Object.assign({},yV),e):yV}function Rle(e){return e?Object.assign(Object.assign({},IV),e):IV}var BE=Symbol(),LE=Symbol();function vV(){return{makeReadOptions:Ale,makeWriteOptions:Rle,readMessage(e,t,n,r){if(t==null||Array.isArray(t)||typeof t!="object")throw new Error(`cannot decode message ${e.typeName} from JSON: ${Ha(t)}`);r=r!=null?r:new e;let i=new Map,a=n.typeRegistry;for(let[o,c]of Object.entries(t)){let l=e.fields.findJsonName(o);if(l){if(l.oneof){if(c===null&&l.kind=="scalar")continue;let p=i.get(l.oneof);if(p!==void 0)throw new Error(`cannot decode message ${e.typeName} from JSON: multiple keys for oneof "${l.oneof.name}" present: "${p}", "${o}"`);i.set(l.oneof,o)}gV(r,c,l,n,e)}else{let p=!1;if(a!=null&&a.findExtension&&o.startsWith("[")&&o.endsWith("]")){let T=a.findExtension(o.substring(1,o.length-1));if(T&&T.extendee.typeName==e.typeName){p=!0;let[y,g]=RE(T);gV(y,c,T.field,n,T),EV(r,T,g(),n)}}if(!p&&!n.ignoreUnknownFields)throw new Error(`cannot decode message ${e.typeName} from JSON: key "${o}" is unknown`)}}return r},writeMessage(e,t){let n=e.getType(),r={},i;try{for(i of n.fields.byNumber()){if(!PE(i,e)){if(i.req)throw"required field not set";if(!t.emitDefaultValues||!Ple(i))continue}let o=i.oneof?e[i.oneof.localName].value:e[i.localName],c=_V(i,o,t);c!==void 0&&(r[t.useProtoFieldName?i.name:i.jsonName]=c)}let a=t.typeRegistry;if(a!=null&&a.findExtensionFor)for(let o of n.runtime.bin.listUnknownFields(e)){let c=a.findExtensionFor(n.typeName,o.no);if(c&&ZO(e,c)){let l=TV(e,c,t),p=_V(c.field,l,t);p!==void 0&&(r[c.field.jsonName]=p)}}}catch(a){let o=i?`cannot encode field ${n.typeName}.${i.name} to JSON`:`cannot encode message ${n.typeName} to JSON`,c=a instanceof Error?a.message:String(a);throw new Error(o+(c.length>0?`: ${c}`:""))}return r},readScalar(e,t,n){return kp(e,t,n!=null?n:Ta.BIGINT,!0)},writeScalar(e,t,n){if(t!==void 0&&(n||DE(e,t)))return CE(e,t)},debug:Ha}}function Ha(e){if(e===null)return"null";switch(typeof e){case"object":return Array.isArray(e)?"array":"object";case"string":return e.length>100?"string":`"${e.split('"').join('\\"')}"`;default:return String(e)}}function gV(e,t,n,r,i){let a=n.localName;if(n.repeated){if(sn(n.kind!="map"),t===null)return;if(!Array.isArray(t))throw new Error(`cannot decode field ${i.typeName}.${n.name} from JSON: ${Ha(t)}`);let o=e[a];for(let c of t){if(c===null)throw new Error(`cannot decode field ${i.typeName}.${n.name} from JSON: ${Ha(c)}`);switch(n.kind){case"message":o.push(n.T.fromJson(c,r));break;case"enum":let l=tD(n.T,c,r.ignoreUnknownFields,!0);l!==LE&&o.push(l);break;case"scalar":try{o.push(kp(n.T,c,n.L,!0))}catch(p){let T=`cannot decode field ${i.typeName}.${n.name} from JSON: ${Ha(c)}`;throw p instanceof Error&&p.message.length>0&&(T+=`: ${p.message}`),new Error(T)}break}}}else if(n.kind=="map"){if(t===null)return;if(typeof t!="object"||Array.isArray(t))throw new Error(`cannot decode field ${i.typeName}.${n.name} from JSON: ${Ha(t)}`);let o=e[a];for(let[c,l]of Object.entries(t)){if(l===null)throw new Error(`cannot decode field ${i.typeName}.${n.name} from JSON: map value null`);let p;try{p=Fle(n.K,c)}catch(T){let y=`cannot decode map key for field ${i.typeName}.${n.name} from JSON: ${Ha(t)}`;throw T instanceof Error&&T.message.length>0&&(y+=`: ${T.message}`),new Error(y)}switch(n.V.kind){case"message":o[p]=n.V.T.fromJson(l,r);break;case"enum":let T=tD(n.V.T,l,r.ignoreUnknownFields,!0);T!==LE&&(o[p]=T);break;case"scalar":try{o[p]=kp(n.V.T,l,Ta.BIGINT,!0)}catch(y){let g=`cannot decode map value for field ${i.typeName}.${n.name} from JSON: ${Ha(t)}`;throw y instanceof Error&&y.message.length>0&&(g+=`: ${y.message}`),new Error(g)}break}}}else switch(n.oneof&&(e=e[n.oneof.localName]={case:a},a="value"),n.kind){case"message":let o=n.T;if(t===null&&o.typeName!="google.protobuf.Value")return;let c=e[a];ha(c)?c.fromJson(t,r):(e[a]=c=o.fromJson(t,r),o.fieldWrapper&&!n.oneof&&(e[a]=o.fieldWrapper.unwrapField(c)));break;case"enum":let l=tD(n.T,t,r.ignoreUnknownFields,!1);switch(l){case BE:eD(n,e);break;case LE:break;default:e[a]=l;break}break;case"scalar":try{let p=kp(n.T,t,n.L,!1);switch(p){case BE:eD(n,e);break;default:e[a]=p;break}}catch(p){let T=`cannot decode field ${i.typeName}.${n.name} from JSON: ${Ha(t)}`;throw p instanceof Error&&p.message.length>0&&(T+=`: ${p.message}`),new Error(T)}break}}function Fle(e,t){if(e===Ne.BOOL)switch(t){case"true":t=!0;break;case"false":t=!1;break}return kp(e,t,Ta.BIGINT,!0).toString()}function kp(e,t,n,r){if(t===null)return r?Ea(e,n):BE;switch(e){case Ne.DOUBLE:case Ne.FLOAT:if(t==="NaN")return Number.NaN;if(t==="Infinity")return Number.POSITIVE_INFINITY;if(t==="-Infinity")return Number.NEGATIVE_INFINITY;if(t===""||typeof t=="string"&&t.trim().length!==t.length||typeof t!="string"&&typeof t!="number")break;let i=Number(t);if(Number.isNaN(i)||!Number.isFinite(i))break;return e==Ne.FLOAT&&vE(i),i;case Ne.INT32:case Ne.FIXED32:case Ne.SFIXED32:case Ne.SINT32:case Ne.UINT32:let a;if(typeof t=="number"?a=t:typeof t=="string"&&t.length>0&&t.trim().length===t.length&&(a=Number(t)),a===void 0)break;return e==Ne.UINT32||e==Ne.FIXED32?Up(a):Bl(a),a;case Ne.INT64:case Ne.SFIXED64:case Ne.SINT64:if(typeof t!="number"&&typeof t!="string")break;let o=Gn.parse(t);return n?o.toString():o;case Ne.FIXED64:case Ne.UINT64:if(typeof t!="number"&&typeof t!="string")break;let c=Gn.uParse(t);return n?c.toString():c;case Ne.BOOL:if(typeof t!="boolean")break;return t;case Ne.STRING:if(typeof t!="string")break;try{encodeURIComponent(t)}catch(l){throw new Error("invalid UTF8")}return t;case Ne.BYTES:if(t==="")return new Uint8Array(0);if(typeof t!="string")break;return XO.dec(t)}throw new Error}function tD(e,t,n,r){if(t===null)return e.typeName=="google.protobuf.NullValue"?0:r?e.values[0].no:BE;switch(typeof t){case"number":if(Number.isInteger(t))return t;break;case"string":let i=e.findName(t);if(i!==void 0)return i.no;if(n)return LE;break}throw new Error(`cannot decode enum ${e.typeName} from JSON: ${Ha(t)}`)}function Ple(e){return e.repeated||e.kind=="map"?!0:!(e.oneof||e.kind=="message"||e.opt||e.req)}function _V(e,t,n){if(e.kind=="map"){sn(typeof t=="object"&&t!=null);let r={},i=Object.entries(t);switch(e.V.kind){case"scalar":for(let[o,c]of i)r[o.toString()]=CE(e.V.T,c);break;case"message":for(let[o,c]of i)r[o.toString()]=c.toJson(n);break;case"enum":let a=e.V.T;for(let[o,c]of i)r[o.toString()]=nD(a,c,n.enumAsInteger);break}return n.emitDefaultValues||i.length>0?r:void 0}if(e.repeated){sn(Array.isArray(t));let r=[];switch(e.kind){case"scalar":for(let i=0;i0?r:void 0}switch(e.kind){case"scalar":return CE(e.T,t);case"enum":return nD(e.T,t,n.enumAsInteger);case"message":return wE(e.T,t).toJson(n)}}function nD(e,t,n){var r;if(sn(typeof t=="number"),e.typeName=="google.protobuf.NullValue")return null;if(n)return t;let i=e.findNumber(t);return(r=i==null?void 0:i.name)!==null&&r!==void 0?r:t}function CE(e,t){switch(e){case Ne.INT32:case Ne.SFIXED32:case Ne.SINT32:case Ne.FIXED32:case Ne.UINT32:return sn(typeof t=="number"),t;case Ne.FLOAT:case Ne.DOUBLE:return sn(typeof t=="number"),Number.isNaN(t)?"NaN":t===Number.POSITIVE_INFINITY?"Infinity":t===Number.NEGATIVE_INFINITY?"-Infinity":t;case Ne.STRING:return sn(typeof t=="string"),t;case Ne.BOOL:return sn(typeof t=="boolean"),t;case Ne.UINT64:case Ne.FIXED64:case Ne.INT64:case Ne.SFIXED64:case Ne.SINT64:return sn(typeof t=="bigint"||typeof t=="string"||typeof t=="number"),t.toString();case Ne.BYTES:return sn(t instanceof Uint8Array),XO.enc(t)}}f();N();m();var Ul=Symbol("@bufbuild/protobuf/unknown-fields"),SV={readUnknownFields:!0,readerFactory:e=>new AE(e)},OV={writeUnknownFields:!0,writerFactory:()=>new bE};function wle(e){return e?Object.assign(Object.assign({},SV),e):SV}function Lle(e){return e?Object.assign(Object.assign({},OV),e):OV}function RV(){return{makeReadOptions:wle,makeWriteOptions:Lle,listUnknownFields(e){var t;return(t=e[Ul])!==null&&t!==void 0?t:[]},discardUnknownFields(e){delete e[Ul]},writeUnknownFields(e,t){let r=e[Ul];if(r)for(let i of r)t.tag(i.no,i.wireType).raw(i.data)},onUnknownField(e,t,n,r){let i=e;Array.isArray(i[Ul])||(i[Ul]=[]),i[Ul].push({no:t,wireType:n,data:r})},readMessage(e,t,n,r,i){let a=e.getType(),o=i?t.len:t.pos+n,c,l;for(;t.pos0&&(l=Ble),a){let g=e[o];if(r==Un.LengthDelimited&&c!=Ne.STRING&&c!=Ne.BYTES){let F=t.uint32()+t.pos;for(;t.posha(g,y)?g:new y(g));else{let g=o[i];y.fieldWrapper?y.typeName==="google.protobuf.BytesValue"?a[i]=xp(g):a[i]=g:a[i]=ha(g,y)?g:new y(g)}break}}},equals(e,t,n){return t===n?!0:!t||!n?!1:e.fields.byMember().every(r=>{let i=t[r.localName],a=n[r.localName];if(r.repeated){if(i.length!==a.length)return!1;switch(r.kind){case"message":return i.every((o,c)=>r.T.equals(o,a[c]));case"scalar":return i.every((o,c)=>Ds(r.T,o,a[c]));case"enum":return i.every((o,c)=>Ds(Ne.INT32,o,a[c]))}throw new Error(`repeated cannot contain ${r.kind}`)}switch(r.kind){case"message":return r.T.equals(i,a);case"enum":return Ds(Ne.INT32,i,a);case"scalar":return Ds(r.T,i,a);case"oneof":if(i.case!==a.case)return!1;let o=r.findField(i.case);if(o===void 0)return!0;switch(o.kind){case"message":return o.T.equals(i.value,a.value);case"enum":return Ds(Ne.INT32,i.value,a.value);case"scalar":return Ds(o.T,i.value,a.value)}throw new Error(`oneof cannot contain ${o.kind}`);case"map":let c=Object.keys(i).concat(Object.keys(a));switch(r.V.kind){case"message":let l=r.V.T;return c.every(T=>l.equals(i[T],a[T]));case"enum":return c.every(T=>Ds(Ne.INT32,i[T],a[T]));case"scalar":let p=r.V.T;return c.every(T=>Ds(p,i[T],a[T]))}break}})},clone(e){let t=e.getType(),n=new t,r=n;for(let i of t.fields.byMember()){let a=e[i.localName],o;if(i.repeated)o=a.map(ME);else if(i.kind=="map"){o=r[i.localName];for(let[c,l]of Object.entries(a))o[c]=ME(l)}else i.kind=="oneof"?o=i.findField(a.case)?{case:a.case,value:ME(a.value)}:{case:void 0}:o=ME(a);r[i.localName]=o}for(let i of t.runtime.bin.listUnknownFields(e))t.runtime.bin.onUnknownField(r,i.no,i.wireType,i.data);return n}}}function ME(e){if(e===void 0)return e;if(ha(e))return e.clone();if(e instanceof Uint8Array){let t=new Uint8Array(e.byteLength);return t.set(e),t}return e}function xp(e){return e instanceof Uint8Array?e:new Uint8Array(e)}function wV(e,t,n){return{syntax:e,json:vV(),bin:RV(),util:Object.assign(Object.assign({},PV()),{newFieldList:t,initFields:n}),makeMessageType(r,i,a){return uV(this,r,i,a)},makeEnum:sV,makeEnumType:YO,getEnumType:aV,makeExtension(r,i,a){return mV(this,r,i,a)}}}f();N();m();var xE=class{constructor(t,n){this._fields=t,this._normalizer=n}findJsonName(t){if(!this.jsonNames){let n={};for(let r of this.list())n[r.jsonName]=n[r.name]=r;this.jsonNames=n}return this.jsonNames[t]}find(t){if(!this.numbers){let n={};for(let r of this.list())n[r.no]=r;this.numbers=n}return this.numbers[t]}list(){return this.all||(this.all=this._normalizer(this._fields)),this.all}byNumber(){return this.numbersAsc||(this.numbersAsc=this.list().concat().sort((t,n)=>t.no-n.no)),this.numbersAsc}byMember(){if(!this.members){this.members=[];let t=this.members,n;for(let r of this.list())r.oneof?r.oneof!==n&&(n=r.oneof,t.push(n)):t.push(r)}return this.members}};f();N();m();f();N();m();f();N();m();function rD(e,t){let n=BV(e);return t?n:Vle(qle(n))}function LV(e){return rD(e,!1)}var CV=BV;function BV(e){let t=!1,n=[];for(let r=0;r`${e}$`,qle=e=>xle.has(e)?UV(e):e,Vle=e=>Mle.has(e)?UV(e):e;var qE=class{constructor(t){this.kind="oneof",this.repeated=!1,this.packed=!1,this.opt=!1,this.req=!1,this.default=void 0,this.fields=[],this.name=t,this.localName=LV(t)}addField(t){sn(t.oneof===this,`field ${t.name} not one of ${this.name}`),this.fields.push(t)}findField(t){if(!this._lookup){this._lookup=Object.create(null);for(let n=0;nnew xE(e,t=>kV(t,!0)),e=>{for(let t of e.getType().fields.byMember()){if(t.opt)continue;let n=t.localName,r=e;if(t.repeated){r[n]=[];continue}switch(t.kind){case"oneof":r[n]={case:void 0};break;case"enum":r[n]=0;break;case"map":r[n]={};break;case"scalar":r[n]=Ea(t.T,t.L);break;case"message":break}}});var kl;(function(e){e[e.OK=0]="OK",e[e.ERR=1]="ERR",e[e.ERR_NOT_FOUND=2]="ERR_NOT_FOUND",e[e.ERR_ALREADY_EXISTS=3]="ERR_ALREADY_EXISTS",e[e.ERR_INVALID_SUBGRAPH_SCHEMA=4]="ERR_INVALID_SUBGRAPH_SCHEMA",e[e.ERR_SUBGRAPH_COMPOSITION_FAILED=5]="ERR_SUBGRAPH_COMPOSITION_FAILED",e[e.ERR_SUBGRAPH_CHECK_FAILED=6]="ERR_SUBGRAPH_CHECK_FAILED",e[e.ERR_INVALID_LABELS=7]="ERR_INVALID_LABELS",e[e.ERR_ANALYTICS_DISABLED=8]="ERR_ANALYTICS_DISABLED",e[e.ERROR_NOT_AUTHENTICATED=9]="ERROR_NOT_AUTHENTICATED",e[e.ERR_OPENAI_DISABLED=10]="ERR_OPENAI_DISABLED",e[e.ERR_FREE_TRIAL_EXPIRED=11]="ERR_FREE_TRIAL_EXPIRED",e[e.ERROR_NOT_AUTHORIZED=12]="ERROR_NOT_AUTHORIZED",e[e.ERR_LIMIT_REACHED=13]="ERR_LIMIT_REACHED",e[e.ERR_DEPLOYMENT_FAILED=14]="ERR_DEPLOYMENT_FAILED",e[e.ERR_INVALID_NAME=15]="ERR_INVALID_NAME",e[e.ERR_UPGRADE_PLAN=16]="ERR_UPGRADE_PLAN",e[e.ERR_BAD_REQUEST=17]="ERR_BAD_REQUEST",e[e.ERR_SCHEMA_MISMATCH_WITH_APPROVED_PROPOSAL=18]="ERR_SCHEMA_MISMATCH_WITH_APPROVED_PROPOSAL"})(kl||(kl={}));x.util.setEnumType(kl,"wg.cosmo.common.EnumStatusCode",[{no:0,name:"OK"},{no:1,name:"ERR"},{no:2,name:"ERR_NOT_FOUND"},{no:3,name:"ERR_ALREADY_EXISTS"},{no:4,name:"ERR_INVALID_SUBGRAPH_SCHEMA"},{no:5,name:"ERR_SUBGRAPH_COMPOSITION_FAILED"},{no:6,name:"ERR_SUBGRAPH_CHECK_FAILED"},{no:7,name:"ERR_INVALID_LABELS"},{no:8,name:"ERR_ANALYTICS_DISABLED"},{no:9,name:"ERROR_NOT_AUTHENTICATED"},{no:10,name:"ERR_OPENAI_DISABLED"},{no:11,name:"ERR_FREE_TRIAL_EXPIRED"},{no:12,name:"ERROR_NOT_AUTHORIZED"},{no:13,name:"ERR_LIMIT_REACHED"},{no:14,name:"ERR_DEPLOYMENT_FAILED"},{no:15,name:"ERR_INVALID_NAME"},{no:16,name:"ERR_UPGRADE_PLAN"},{no:17,name:"ERR_BAD_REQUEST"},{no:18,name:"ERR_SCHEMA_MISMATCH_WITH_APPROVED_PROPOSAL"}]);var As;(function(e){e[e.GRAPHQL_SUBSCRIPTION_PROTOCOL_WS=0]="GRAPHQL_SUBSCRIPTION_PROTOCOL_WS",e[e.GRAPHQL_SUBSCRIPTION_PROTOCOL_SSE=1]="GRAPHQL_SUBSCRIPTION_PROTOCOL_SSE",e[e.GRAPHQL_SUBSCRIPTION_PROTOCOL_SSE_POST=2]="GRAPHQL_SUBSCRIPTION_PROTOCOL_SSE_POST"})(As||(As={}));x.util.setEnumType(As,"wg.cosmo.common.GraphQLSubscriptionProtocol",[{no:0,name:"GRAPHQL_SUBSCRIPTION_PROTOCOL_WS"},{no:1,name:"GRAPHQL_SUBSCRIPTION_PROTOCOL_SSE"},{no:2,name:"GRAPHQL_SUBSCRIPTION_PROTOCOL_SSE_POST"}]);var Rs;(function(e){e[e.GRAPHQL_WEBSOCKET_SUBPROTOCOL_AUTO=0]="GRAPHQL_WEBSOCKET_SUBPROTOCOL_AUTO",e[e.GRAPHQL_WEBSOCKET_SUBPROTOCOL_WS=1]="GRAPHQL_WEBSOCKET_SUBPROTOCOL_WS",e[e.GRAPHQL_WEBSOCKET_SUBPROTOCOL_TRANSPORT_WS=2]="GRAPHQL_WEBSOCKET_SUBPROTOCOL_TRANSPORT_WS"})(Rs||(Rs={}));x.util.setEnumType(Rs,"wg.cosmo.common.GraphQLWebsocketSubprotocol",[{no:0,name:"GRAPHQL_WEBSOCKET_SUBPROTOCOL_AUTO"},{no:1,name:"GRAPHQL_WEBSOCKET_SUBPROTOCOL_WS"},{no:2,name:"GRAPHQL_WEBSOCKET_SUBPROTOCOL_TRANSPORT_WS"}]);f();N();m();var iD;(function(e){e[e.RENDER_ARGUMENT_DEFAULT=0]="RENDER_ARGUMENT_DEFAULT",e[e.RENDER_ARGUMENT_AS_GRAPHQL_VALUE=1]="RENDER_ARGUMENT_AS_GRAPHQL_VALUE",e[e.RENDER_ARGUMENT_AS_ARRAY_CSV=2]="RENDER_ARGUMENT_AS_ARRAY_CSV"})(iD||(iD={}));x.util.setEnumType(iD,"wg.cosmo.node.v1.ArgumentRenderConfiguration",[{no:0,name:"RENDER_ARGUMENT_DEFAULT"},{no:1,name:"RENDER_ARGUMENT_AS_GRAPHQL_VALUE"},{no:2,name:"RENDER_ARGUMENT_AS_ARRAY_CSV"}]);var mc;(function(e){e[e.OBJECT_FIELD=0]="OBJECT_FIELD",e[e.FIELD_ARGUMENT=1]="FIELD_ARGUMENT"})(mc||(mc={}));x.util.setEnumType(mc,"wg.cosmo.node.v1.ArgumentSource",[{no:0,name:"OBJECT_FIELD"},{no:1,name:"FIELD_ARGUMENT"}]);var su;(function(e){e[e.STATIC=0]="STATIC",e[e.GRAPHQL=1]="GRAPHQL",e[e.PUBSUB=2]="PUBSUB"})(su||(su={}));x.util.setEnumType(su,"wg.cosmo.node.v1.DataSourceKind",[{no:0,name:"STATIC"},{no:1,name:"GRAPHQL"},{no:2,name:"PUBSUB"}]);var Oo;(function(e){e[e.PUBLISH=0]="PUBLISH",e[e.REQUEST=1]="REQUEST",e[e.SUBSCRIBE=2]="SUBSCRIBE"})(Oo||(Oo={}));x.util.setEnumType(Oo,"wg.cosmo.node.v1.EventType",[{no:0,name:"PUBLISH"},{no:1,name:"REQUEST"},{no:2,name:"SUBSCRIBE"}]);var ou;(function(e){e[e.STATIC_CONFIGURATION_VARIABLE=0]="STATIC_CONFIGURATION_VARIABLE",e[e.ENV_CONFIGURATION_VARIABLE=1]="ENV_CONFIGURATION_VARIABLE",e[e.PLACEHOLDER_CONFIGURATION_VARIABLE=2]="PLACEHOLDER_CONFIGURATION_VARIABLE"})(ou||(ou={}));x.util.setEnumType(ou,"wg.cosmo.node.v1.ConfigurationVariableKind",[{no:0,name:"STATIC_CONFIGURATION_VARIABLE"},{no:1,name:"ENV_CONFIGURATION_VARIABLE"},{no:2,name:"PLACEHOLDER_CONFIGURATION_VARIABLE"}]);var Nc;(function(e){e[e.GET=0]="GET",e[e.POST=1]="POST",e[e.PUT=2]="PUT",e[e.DELETE=3]="DELETE",e[e.OPTIONS=4]="OPTIONS"})(Nc||(Nc={}));x.util.setEnumType(Nc,"wg.cosmo.node.v1.HTTPMethod",[{no:0,name:"GET"},{no:1,name:"POST"},{no:2,name:"PUT"},{no:3,name:"DELETE"},{no:4,name:"OPTIONS"}]);var Fs=class Fs extends $e{constructor(n){super();v(this,"id","");v(this,"name","");v(this,"routingUrl","");x.util.initPartial(n,this)}static fromBinary(n,r){return new Fs().fromBinary(n,r)}static fromJson(n,r){return new Fs().fromJson(n,r)}static fromJsonString(n,r){return new Fs().fromJsonString(n,r)}static equals(n,r){return x.util.equals(Fs,n,r)}};v(Fs,"runtime",x),v(Fs,"typeName","wg.cosmo.node.v1.Subgraph"),v(Fs,"fields",x.util.newFieldList(()=>[{no:1,name:"id",kind:"scalar",T:9},{no:2,name:"name",kind:"scalar",T:9},{no:3,name:"routing_url",kind:"scalar",T:9}]));var VE=Fs,Ps=class Ps extends $e{constructor(n){super();v(this,"configByFeatureFlagName",{});x.util.initPartial(n,this)}static fromBinary(n,r){return new Ps().fromBinary(n,r)}static fromJson(n,r){return new Ps().fromJson(n,r)}static fromJsonString(n,r){return new Ps().fromJsonString(n,r)}static equals(n,r){return x.util.equals(Ps,n,r)}};v(Ps,"runtime",x),v(Ps,"typeName","wg.cosmo.node.v1.FeatureFlagRouterExecutionConfigs"),v(Ps,"fields",x.util.newFieldList(()=>[{no:1,name:"config_by_feature_flag_name",kind:"map",K:9,V:{kind:"message",T:sD}}]));var aD=Ps,ws=class ws extends $e{constructor(n){super();v(this,"engineConfig");v(this,"version","");v(this,"subgraphs",[]);x.util.initPartial(n,this)}static fromBinary(n,r){return new ws().fromBinary(n,r)}static fromJson(n,r){return new ws().fromJson(n,r)}static fromJsonString(n,r){return new ws().fromJsonString(n,r)}static equals(n,r){return x.util.equals(ws,n,r)}};v(ws,"runtime",x),v(ws,"typeName","wg.cosmo.node.v1.FeatureFlagRouterExecutionConfig"),v(ws,"fields",x.util.newFieldList(()=>[{no:1,name:"engine_config",kind:"message",T:Ml},{no:2,name:"version",kind:"scalar",T:9},{no:3,name:"subgraphs",kind:"message",T:VE,repeated:!0}]));var sD=ws,Ls=class Ls extends $e{constructor(n){super();v(this,"engineConfig");v(this,"version","");v(this,"subgraphs",[]);v(this,"featureFlagConfigs");v(this,"compatibilityVersion","");x.util.initPartial(n,this)}static fromBinary(n,r){return new Ls().fromBinary(n,r)}static fromJson(n,r){return new Ls().fromJson(n,r)}static fromJsonString(n,r){return new Ls().fromJsonString(n,r)}static equals(n,r){return x.util.equals(Ls,n,r)}};v(Ls,"runtime",x),v(Ls,"typeName","wg.cosmo.node.v1.RouterConfig"),v(Ls,"fields",x.util.newFieldList(()=>[{no:1,name:"engine_config",kind:"message",T:Ml},{no:2,name:"version",kind:"scalar",T:9},{no:3,name:"subgraphs",kind:"message",T:VE,repeated:!0},{no:4,name:"feature_flag_configs",kind:"message",T:aD,opt:!0},{no:5,name:"compatibility_version",kind:"scalar",T:9}]));var qp=Ls,Cs=class Cs extends $e{constructor(n){super();v(this,"code",kl.OK);v(this,"details");x.util.initPartial(n,this)}static fromBinary(n,r){return new Cs().fromBinary(n,r)}static fromJson(n,r){return new Cs().fromJson(n,r)}static fromJsonString(n,r){return new Cs().fromJsonString(n,r)}static equals(n,r){return x.util.equals(Cs,n,r)}};v(Cs,"runtime",x),v(Cs,"typeName","wg.cosmo.node.v1.Response"),v(Cs,"fields",x.util.newFieldList(()=>[{no:1,name:"code",kind:"enum",T:x.getEnumType(kl)},{no:2,name:"details",kind:"scalar",T:9,opt:!0}]));var oD=Cs,Bs=class Bs extends $e{constructor(n){super();v(this,"code",0);v(this,"message","");x.util.initPartial(n,this)}static fromBinary(n,r){return new Bs().fromBinary(n,r)}static fromJson(n,r){return new Bs().fromJson(n,r)}static fromJsonString(n,r){return new Bs().fromJsonString(n,r)}static equals(n,r){return x.util.equals(Bs,n,r)}};v(Bs,"runtime",x),v(Bs,"typeName","wg.cosmo.node.v1.ResponseStatus"),v(Bs,"fields",x.util.newFieldList(()=>[{no:1,name:"code",kind:"scalar",T:5},{no:2,name:"message",kind:"scalar",T:9}]));var MV=Bs,Us=class Us extends $e{constructor(n){super();v(this,"accountLimits");v(this,"graphPublicKey","");x.util.initPartial(n,this)}static fromBinary(n,r){return new Us().fromBinary(n,r)}static fromJson(n,r){return new Us().fromJson(n,r)}static fromJsonString(n,r){return new Us().fromJsonString(n,r)}static equals(n,r){return x.util.equals(Us,n,r)}};v(Us,"runtime",x),v(Us,"typeName","wg.cosmo.node.v1.RegistrationInfo"),v(Us,"fields",x.util.newFieldList(()=>[{no:1,name:"account_limits",kind:"message",T:cD},{no:2,name:"graph_public_key",kind:"scalar",T:9}]));var uD=Us,ks=class ks extends $e{constructor(n){super();v(this,"traceSamplingRate",0);x.util.initPartial(n,this)}static fromBinary(n,r){return new ks().fromBinary(n,r)}static fromJson(n,r){return new ks().fromJson(n,r)}static fromJsonString(n,r){return new ks().fromJsonString(n,r)}static equals(n,r){return x.util.equals(ks,n,r)}};v(ks,"runtime",x),v(ks,"typeName","wg.cosmo.node.v1.AccountLimits"),v(ks,"fields",x.util.newFieldList(()=>[{no:1,name:"trace_sampling_rate",kind:"scalar",T:2}]));var cD=ks,Ms=class Ms extends $e{constructor(t){super(),x.util.initPartial(t,this)}static fromBinary(t,n){return new Ms().fromBinary(t,n)}static fromJson(t,n){return new Ms().fromJson(t,n)}static fromJsonString(t,n){return new Ms().fromJsonString(t,n)}static equals(t,n){return x.util.equals(Ms,t,n)}};v(Ms,"runtime",x),v(Ms,"typeName","wg.cosmo.node.v1.SelfRegisterRequest"),v(Ms,"fields",x.util.newFieldList(()=>[]));var xV=Ms,xs=class xs extends $e{constructor(n){super();v(this,"response");v(this,"registrationInfo");x.util.initPartial(n,this)}static fromBinary(n,r){return new xs().fromBinary(n,r)}static fromJson(n,r){return new xs().fromJson(n,r)}static fromJsonString(n,r){return new xs().fromJsonString(n,r)}static equals(n,r){return x.util.equals(xs,n,r)}};v(xs,"runtime",x),v(xs,"typeName","wg.cosmo.node.v1.SelfRegisterResponse"),v(xs,"fields",x.util.newFieldList(()=>[{no:1,name:"response",kind:"message",T:oD},{no:2,name:"registrationInfo",kind:"message",T:uD,opt:!0}]));var qV=xs,qs=class qs extends $e{constructor(n){super();v(this,"defaultFlushInterval",Gn.zero);v(this,"datasourceConfigurations",[]);v(this,"fieldConfigurations",[]);v(this,"graphqlSchema","");v(this,"typeConfigurations",[]);v(this,"stringStorage",{});v(this,"graphqlClientSchema");x.util.initPartial(n,this)}static fromBinary(n,r){return new qs().fromBinary(n,r)}static fromJson(n,r){return new qs().fromJson(n,r)}static fromJsonString(n,r){return new qs().fromJsonString(n,r)}static equals(n,r){return x.util.equals(qs,n,r)}};v(qs,"runtime",x),v(qs,"typeName","wg.cosmo.node.v1.EngineConfiguration"),v(qs,"fields",x.util.newFieldList(()=>[{no:1,name:"defaultFlushInterval",kind:"scalar",T:3},{no:2,name:"datasource_configurations",kind:"message",T:Vp,repeated:!0},{no:3,name:"field_configurations",kind:"message",T:Gp,repeated:!0},{no:4,name:"graphqlSchema",kind:"scalar",T:9},{no:5,name:"type_configurations",kind:"message",T:lD,repeated:!0},{no:6,name:"string_storage",kind:"map",K:9,V:{kind:"scalar",T:9}},{no:7,name:"graphql_client_schema",kind:"scalar",T:9,opt:!0}]));var Ml=qs,Vs=class Vs extends $e{constructor(n){super();v(this,"kind",su.STATIC);v(this,"rootNodes",[]);v(this,"childNodes",[]);v(this,"overrideFieldPathFromAlias",!1);v(this,"customGraphql");v(this,"customStatic");v(this,"directives",[]);v(this,"requestTimeoutSeconds",Gn.zero);v(this,"id","");v(this,"keys",[]);v(this,"provides",[]);v(this,"requires",[]);v(this,"customEvents");v(this,"entityInterfaces",[]);v(this,"interfaceObjects",[]);x.util.initPartial(n,this)}static fromBinary(n,r){return new Vs().fromBinary(n,r)}static fromJson(n,r){return new Vs().fromJson(n,r)}static fromJsonString(n,r){return new Vs().fromJsonString(n,r)}static equals(n,r){return x.util.equals(Vs,n,r)}};v(Vs,"runtime",x),v(Vs,"typeName","wg.cosmo.node.v1.DataSourceConfiguration"),v(Vs,"fields",x.util.newFieldList(()=>[{no:1,name:"kind",kind:"enum",T:x.getEnumType(su)},{no:2,name:"root_nodes",kind:"message",T:xl,repeated:!0},{no:3,name:"child_nodes",kind:"message",T:xl,repeated:!0},{no:4,name:"override_field_path_from_alias",kind:"scalar",T:8},{no:5,name:"custom_graphql",kind:"message",T:Yp},{no:6,name:"custom_static",kind:"message",T:fD},{no:7,name:"directives",kind:"message",T:mD,repeated:!0},{no:8,name:"request_timeout_seconds",kind:"scalar",T:3},{no:9,name:"id",kind:"scalar",T:9},{no:10,name:"keys",kind:"message",T:fc,repeated:!0},{no:11,name:"provides",kind:"message",T:fc,repeated:!0},{no:12,name:"requires",kind:"message",T:fc,repeated:!0},{no:13,name:"custom_events",kind:"message",T:Ec},{no:14,name:"entity_interfaces",kind:"message",T:ql,repeated:!0},{no:15,name:"interface_objects",kind:"message",T:ql,repeated:!0}]));var Vp=Vs,js=class js extends $e{constructor(n){super();v(this,"name","");v(this,"sourceType",mc.OBJECT_FIELD);x.util.initPartial(n,this)}static fromBinary(n,r){return new js().fromBinary(n,r)}static fromJson(n,r){return new js().fromJson(n,r)}static fromJsonString(n,r){return new js().fromJsonString(n,r)}static equals(n,r){return x.util.equals(js,n,r)}};v(js,"runtime",x),v(js,"typeName","wg.cosmo.node.v1.ArgumentConfiguration"),v(js,"fields",x.util.newFieldList(()=>[{no:1,name:"name",kind:"scalar",T:9},{no:2,name:"source_type",kind:"enum",T:x.getEnumType(mc)}]));var jp=js,Ks=class Ks extends $e{constructor(n){super();v(this,"requiredAndScopes",[]);x.util.initPartial(n,this)}static fromBinary(n,r){return new Ks().fromBinary(n,r)}static fromJson(n,r){return new Ks().fromJson(n,r)}static fromJsonString(n,r){return new Ks().fromJsonString(n,r)}static equals(n,r){return x.util.equals(Ks,n,r)}};v(Ks,"runtime",x),v(Ks,"typeName","wg.cosmo.node.v1.Scopes"),v(Ks,"fields",x.util.newFieldList(()=>[{no:1,name:"required_and_scopes",kind:"scalar",T:9,repeated:!0}]));var Tc=Ks,Gs=class Gs extends $e{constructor(n){super();v(this,"requiresAuthentication",!1);v(this,"requiredOrScopes",[]);v(this,"requiredOrScopesByOr",[]);x.util.initPartial(n,this)}static fromBinary(n,r){return new Gs().fromBinary(n,r)}static fromJson(n,r){return new Gs().fromJson(n,r)}static fromJsonString(n,r){return new Gs().fromJsonString(n,r)}static equals(n,r){return x.util.equals(Gs,n,r)}};v(Gs,"runtime",x),v(Gs,"typeName","wg.cosmo.node.v1.AuthorizationConfiguration"),v(Gs,"fields",x.util.newFieldList(()=>[{no:1,name:"requires_authentication",kind:"scalar",T:8},{no:2,name:"required_or_scopes",kind:"message",T:Tc,repeated:!0},{no:3,name:"required_or_scopes_by_or",kind:"message",T:Tc,repeated:!0}]));var Kp=Gs,$s=class $s extends $e{constructor(n){super();v(this,"typeName","");v(this,"fieldName","");v(this,"argumentsConfiguration",[]);v(this,"authorizationConfiguration");v(this,"subscriptionFilterCondition");x.util.initPartial(n,this)}static fromBinary(n,r){return new $s().fromBinary(n,r)}static fromJson(n,r){return new $s().fromJson(n,r)}static fromJsonString(n,r){return new $s().fromJsonString(n,r)}static equals(n,r){return x.util.equals($s,n,r)}};v($s,"runtime",x),v($s,"typeName","wg.cosmo.node.v1.FieldConfiguration"),v($s,"fields",x.util.newFieldList(()=>[{no:1,name:"type_name",kind:"scalar",T:9},{no:2,name:"field_name",kind:"scalar",T:9},{no:3,name:"arguments_configuration",kind:"message",T:jp,repeated:!0},{no:4,name:"authorization_configuration",kind:"message",T:Kp},{no:5,name:"subscription_filter_condition",kind:"message",T:cu,opt:!0}]));var Gp=$s,Qs=class Qs extends $e{constructor(n){super();v(this,"typeName","");v(this,"renameTo","");x.util.initPartial(n,this)}static fromBinary(n,r){return new Qs().fromBinary(n,r)}static fromJson(n,r){return new Qs().fromJson(n,r)}static fromJsonString(n,r){return new Qs().fromJsonString(n,r)}static equals(n,r){return x.util.equals(Qs,n,r)}};v(Qs,"runtime",x),v(Qs,"typeName","wg.cosmo.node.v1.TypeConfiguration"),v(Qs,"fields",x.util.newFieldList(()=>[{no:1,name:"type_name",kind:"scalar",T:9},{no:2,name:"rename_to",kind:"scalar",T:9}]));var lD=Qs,Ys=class Ys extends $e{constructor(n){super();v(this,"typeName","");v(this,"fieldNames",[]);v(this,"externalFieldNames",[]);x.util.initPartial(n,this)}static fromBinary(n,r){return new Ys().fromBinary(n,r)}static fromJson(n,r){return new Ys().fromJson(n,r)}static fromJsonString(n,r){return new Ys().fromJsonString(n,r)}static equals(n,r){return x.util.equals(Ys,n,r)}};v(Ys,"runtime",x),v(Ys,"typeName","wg.cosmo.node.v1.TypeField"),v(Ys,"fields",x.util.newFieldList(()=>[{no:1,name:"type_name",kind:"scalar",T:9},{no:2,name:"field_names",kind:"scalar",T:9,repeated:!0},{no:3,name:"external_field_names",kind:"scalar",T:9,repeated:!0}]));var xl=Ys,Js=class Js extends $e{constructor(n){super();v(this,"fieldName","");v(this,"typeName","");x.util.initPartial(n,this)}static fromBinary(n,r){return new Js().fromBinary(n,r)}static fromJson(n,r){return new Js().fromJson(n,r)}static fromJsonString(n,r){return new Js().fromJsonString(n,r)}static equals(n,r){return x.util.equals(Js,n,r)}};v(Js,"runtime",x),v(Js,"typeName","wg.cosmo.node.v1.FieldCoordinates"),v(Js,"fields",x.util.newFieldList(()=>[{no:1,name:"field_name",kind:"scalar",T:9},{no:2,name:"type_name",kind:"scalar",T:9}]));var $p=Js,Hs=class Hs extends $e{constructor(n){super();v(this,"fieldCoordinatesPath",[]);v(this,"fieldPath",[]);x.util.initPartial(n,this)}static fromBinary(n,r){return new Hs().fromBinary(n,r)}static fromJson(n,r){return new Hs().fromJson(n,r)}static fromJsonString(n,r){return new Hs().fromJsonString(n,r)}static equals(n,r){return x.util.equals(Hs,n,r)}};v(Hs,"runtime",x),v(Hs,"typeName","wg.cosmo.node.v1.FieldSetCondition"),v(Hs,"fields",x.util.newFieldList(()=>[{no:1,name:"field_coordinates_path",kind:"message",T:$p,repeated:!0},{no:2,name:"field_path",kind:"scalar",T:9,repeated:!0}]));var Qp=Hs,zs=class zs extends $e{constructor(n){super();v(this,"typeName","");v(this,"fieldName","");v(this,"selectionSet","");v(this,"disableEntityResolver",!1);v(this,"conditions",[]);x.util.initPartial(n,this)}static fromBinary(n,r){return new zs().fromBinary(n,r)}static fromJson(n,r){return new zs().fromJson(n,r)}static fromJsonString(n,r){return new zs().fromJsonString(n,r)}static equals(n,r){return x.util.equals(zs,n,r)}};v(zs,"runtime",x),v(zs,"typeName","wg.cosmo.node.v1.RequiredField"),v(zs,"fields",x.util.newFieldList(()=>[{no:1,name:"type_name",kind:"scalar",T:9},{no:2,name:"field_name",kind:"scalar",T:9},{no:3,name:"selection_set",kind:"scalar",T:9},{no:4,name:"disable_entity_resolver",kind:"scalar",T:8},{no:5,name:"conditions",kind:"message",T:Qp,repeated:!0}]));var fc=zs,Ws=class Ws extends $e{constructor(n){super();v(this,"interfaceTypeName","");v(this,"concreteTypeNames",[]);x.util.initPartial(n,this)}static fromBinary(n,r){return new Ws().fromBinary(n,r)}static fromJson(n,r){return new Ws().fromJson(n,r)}static fromJsonString(n,r){return new Ws().fromJsonString(n,r)}static equals(n,r){return x.util.equals(Ws,n,r)}};v(Ws,"runtime",x),v(Ws,"typeName","wg.cosmo.node.v1.EntityInterfaceConfiguration"),v(Ws,"fields",x.util.newFieldList(()=>[{no:1,name:"interface_type_name",kind:"scalar",T:9},{no:2,name:"concrete_type_names",kind:"scalar",T:9,repeated:!0}]));var ql=Ws,Xs=class Xs extends $e{constructor(n){super();v(this,"url");v(this,"method",Nc.GET);v(this,"header",{});v(this,"body");v(this,"query",[]);v(this,"urlEncodeBody",!1);v(this,"mtls");v(this,"baseUrl");v(this,"path");v(this,"httpProxyUrl");x.util.initPartial(n,this)}static fromBinary(n,r){return new Xs().fromBinary(n,r)}static fromJson(n,r){return new Xs().fromJson(n,r)}static fromJsonString(n,r){return new Xs().fromJsonString(n,r)}static equals(n,r){return x.util.equals(Xs,n,r)}};v(Xs,"runtime",x),v(Xs,"typeName","wg.cosmo.node.v1.FetchConfiguration"),v(Xs,"fields",x.util.newFieldList(()=>[{no:1,name:"url",kind:"message",T:xr},{no:2,name:"method",kind:"enum",T:x.getEnumType(Nc)},{no:3,name:"header",kind:"map",K:9,V:{kind:"message",T:TD}},{no:4,name:"body",kind:"message",T:xr},{no:5,name:"query",kind:"message",T:ND,repeated:!0},{no:7,name:"url_encode_body",kind:"scalar",T:8},{no:8,name:"mtls",kind:"message",T:ED},{no:9,name:"base_url",kind:"message",T:xr},{no:10,name:"path",kind:"message",T:xr},{no:11,name:"http_proxy_url",kind:"message",T:xr,opt:!0}]));var dD=Xs,Zs=class Zs extends $e{constructor(n){super();v(this,"statusCode",Gn.zero);v(this,"typeName","");v(this,"injectStatusCodeIntoBody",!1);x.util.initPartial(n,this)}static fromBinary(n,r){return new Zs().fromBinary(n,r)}static fromJson(n,r){return new Zs().fromJson(n,r)}static fromJsonString(n,r){return new Zs().fromJsonString(n,r)}static equals(n,r){return x.util.equals(Zs,n,r)}};v(Zs,"runtime",x),v(Zs,"typeName","wg.cosmo.node.v1.StatusCodeTypeMapping"),v(Zs,"fields",x.util.newFieldList(()=>[{no:1,name:"status_code",kind:"scalar",T:3},{no:2,name:"type_name",kind:"scalar",T:9},{no:3,name:"inject_status_code_into_body",kind:"scalar",T:8}]));var VV=Zs,eo=class eo extends $e{constructor(n){super();v(this,"fetch");v(this,"subscription");v(this,"federation");v(this,"upstreamSchema");v(this,"customScalarTypeFields",[]);x.util.initPartial(n,this)}static fromBinary(n,r){return new eo().fromBinary(n,r)}static fromJson(n,r){return new eo().fromJson(n,r)}static fromJsonString(n,r){return new eo().fromJsonString(n,r)}static equals(n,r){return x.util.equals(eo,n,r)}};v(eo,"runtime",x),v(eo,"typeName","wg.cosmo.node.v1.DataSourceCustom_GraphQL"),v(eo,"fields",x.util.newFieldList(()=>[{no:1,name:"fetch",kind:"message",T:dD},{no:2,name:"subscription",kind:"message",T:hD},{no:3,name:"federation",kind:"message",T:yD},{no:4,name:"upstream_schema",kind:"message",T:Wp},{no:6,name:"custom_scalar_type_fields",kind:"message",T:ID,repeated:!0}]));var Yp=eo,to=class to extends $e{constructor(n){super();v(this,"consumerName","");v(this,"streamName","");v(this,"consumerInactiveThreshold",0);x.util.initPartial(n,this)}static fromBinary(n,r){return new to().fromBinary(n,r)}static fromJson(n,r){return new to().fromJson(n,r)}static fromJsonString(n,r){return new to().fromJsonString(n,r)}static equals(n,r){return x.util.equals(to,n,r)}};v(to,"runtime",x),v(to,"typeName","wg.cosmo.node.v1.NatsStreamConfiguration"),v(to,"fields",x.util.newFieldList(()=>[{no:1,name:"consumer_name",kind:"scalar",T:9},{no:2,name:"stream_name",kind:"scalar",T:9},{no:3,name:"consumer_inactive_threshold",kind:"scalar",T:5}]));var Jp=to,no=class no extends $e{constructor(n){super();v(this,"engineEventConfiguration");v(this,"subjects",[]);v(this,"streamConfiguration");x.util.initPartial(n,this)}static fromBinary(n,r){return new no().fromBinary(n,r)}static fromJson(n,r){return new no().fromJson(n,r)}static fromJsonString(n,r){return new no().fromJsonString(n,r)}static equals(n,r){return x.util.equals(no,n,r)}};v(no,"runtime",x),v(no,"typeName","wg.cosmo.node.v1.NatsEventConfiguration"),v(no,"fields",x.util.newFieldList(()=>[{no:1,name:"engine_event_configuration",kind:"message",T:uu},{no:2,name:"subjects",kind:"scalar",T:9,repeated:!0},{no:3,name:"stream_configuration",kind:"message",T:Jp}]));var Hp=no,ro=class ro extends $e{constructor(n){super();v(this,"engineEventConfiguration");v(this,"topics",[]);x.util.initPartial(n,this)}static fromBinary(n,r){return new ro().fromBinary(n,r)}static fromJson(n,r){return new ro().fromJson(n,r)}static fromJsonString(n,r){return new ro().fromJsonString(n,r)}static equals(n,r){return x.util.equals(ro,n,r)}};v(ro,"runtime",x),v(ro,"typeName","wg.cosmo.node.v1.KafkaEventConfiguration"),v(ro,"fields",x.util.newFieldList(()=>[{no:1,name:"engine_event_configuration",kind:"message",T:uu},{no:2,name:"topics",kind:"scalar",T:9,repeated:!0}]));var zp=ro,io=class io extends $e{constructor(n){super();v(this,"engineEventConfiguration");v(this,"channels",[]);x.util.initPartial(n,this)}static fromBinary(n,r){return new io().fromBinary(n,r)}static fromJson(n,r){return new io().fromJson(n,r)}static fromJsonString(n,r){return new io().fromJsonString(n,r)}static equals(n,r){return x.util.equals(io,n,r)}};v(io,"runtime",x),v(io,"typeName","wg.cosmo.node.v1.RedisEventConfiguration"),v(io,"fields",x.util.newFieldList(()=>[{no:1,name:"engine_event_configuration",kind:"message",T:uu},{no:2,name:"channels",kind:"scalar",T:9,repeated:!0}]));var pD=io,ao=class ao extends $e{constructor(n){super();v(this,"providerId","");v(this,"type",Oo.PUBLISH);v(this,"typeName","");v(this,"fieldName","");x.util.initPartial(n,this)}static fromBinary(n,r){return new ao().fromBinary(n,r)}static fromJson(n,r){return new ao().fromJson(n,r)}static fromJsonString(n,r){return new ao().fromJsonString(n,r)}static equals(n,r){return x.util.equals(ao,n,r)}};v(ao,"runtime",x),v(ao,"typeName","wg.cosmo.node.v1.EngineEventConfiguration"),v(ao,"fields",x.util.newFieldList(()=>[{no:1,name:"provider_id",kind:"scalar",T:9},{no:2,name:"type",kind:"enum",T:x.getEnumType(Oo)},{no:3,name:"type_name",kind:"scalar",T:9},{no:4,name:"field_name",kind:"scalar",T:9}]));var uu=ao,so=class so extends $e{constructor(n){super();v(this,"nats",[]);v(this,"kafka",[]);v(this,"redis",[]);x.util.initPartial(n,this)}static fromBinary(n,r){return new so().fromBinary(n,r)}static fromJson(n,r){return new so().fromJson(n,r)}static fromJsonString(n,r){return new so().fromJsonString(n,r)}static equals(n,r){return x.util.equals(so,n,r)}};v(so,"runtime",x),v(so,"typeName","wg.cosmo.node.v1.DataSourceCustomEvents"),v(so,"fields",x.util.newFieldList(()=>[{no:1,name:"nats",kind:"message",T:Hp,repeated:!0},{no:2,name:"kafka",kind:"message",T:zp,repeated:!0},{no:3,name:"redis",kind:"message",T:pD,repeated:!0}]));var Ec=so,oo=class oo extends $e{constructor(n){super();v(this,"data");x.util.initPartial(n,this)}static fromBinary(n,r){return new oo().fromBinary(n,r)}static fromJson(n,r){return new oo().fromJson(n,r)}static fromJsonString(n,r){return new oo().fromJsonString(n,r)}static equals(n,r){return x.util.equals(oo,n,r)}};v(oo,"runtime",x),v(oo,"typeName","wg.cosmo.node.v1.DataSourceCustom_Static"),v(oo,"fields",x.util.newFieldList(()=>[{no:1,name:"data",kind:"message",T:xr}]));var fD=oo,uo=class uo extends $e{constructor(n){super();v(this,"kind",ou.STATIC_CONFIGURATION_VARIABLE);v(this,"staticVariableContent","");v(this,"environmentVariableName","");v(this,"environmentVariableDefaultValue","");v(this,"placeholderVariableName","");x.util.initPartial(n,this)}static fromBinary(n,r){return new uo().fromBinary(n,r)}static fromJson(n,r){return new uo().fromJson(n,r)}static fromJsonString(n,r){return new uo().fromJsonString(n,r)}static equals(n,r){return x.util.equals(uo,n,r)}};v(uo,"runtime",x),v(uo,"typeName","wg.cosmo.node.v1.ConfigurationVariable"),v(uo,"fields",x.util.newFieldList(()=>[{no:1,name:"kind",kind:"enum",T:x.getEnumType(ou)},{no:2,name:"static_variable_content",kind:"scalar",T:9},{no:3,name:"environment_variable_name",kind:"scalar",T:9},{no:4,name:"environment_variable_default_value",kind:"scalar",T:9},{no:5,name:"placeholder_variable_name",kind:"scalar",T:9}]));var xr=uo,co=class co extends $e{constructor(n){super();v(this,"directiveName","");v(this,"renameTo","");x.util.initPartial(n,this)}static fromBinary(n,r){return new co().fromBinary(n,r)}static fromJson(n,r){return new co().fromJson(n,r)}static fromJsonString(n,r){return new co().fromJsonString(n,r)}static equals(n,r){return x.util.equals(co,n,r)}};v(co,"runtime",x),v(co,"typeName","wg.cosmo.node.v1.DirectiveConfiguration"),v(co,"fields",x.util.newFieldList(()=>[{no:1,name:"directive_name",kind:"scalar",T:9},{no:2,name:"rename_to",kind:"scalar",T:9}]));var mD=co,lo=class lo extends $e{constructor(n){super();v(this,"name","");v(this,"value","");x.util.initPartial(n,this)}static fromBinary(n,r){return new lo().fromBinary(n,r)}static fromJson(n,r){return new lo().fromJson(n,r)}static fromJsonString(n,r){return new lo().fromJsonString(n,r)}static equals(n,r){return x.util.equals(lo,n,r)}};v(lo,"runtime",x),v(lo,"typeName","wg.cosmo.node.v1.URLQueryConfiguration"),v(lo,"fields",x.util.newFieldList(()=>[{no:1,name:"name",kind:"scalar",T:9},{no:2,name:"value",kind:"scalar",T:9}]));var ND=lo,po=class po extends $e{constructor(n){super();v(this,"values",[]);x.util.initPartial(n,this)}static fromBinary(n,r){return new po().fromBinary(n,r)}static fromJson(n,r){return new po().fromJson(n,r)}static fromJsonString(n,r){return new po().fromJsonString(n,r)}static equals(n,r){return x.util.equals(po,n,r)}};v(po,"runtime",x),v(po,"typeName","wg.cosmo.node.v1.HTTPHeader"),v(po,"fields",x.util.newFieldList(()=>[{no:1,name:"values",kind:"message",T:xr,repeated:!0}]));var TD=po,fo=class fo extends $e{constructor(n){super();v(this,"key");v(this,"cert");v(this,"insecureSkipVerify",!1);x.util.initPartial(n,this)}static fromBinary(n,r){return new fo().fromBinary(n,r)}static fromJson(n,r){return new fo().fromJson(n,r)}static fromJsonString(n,r){return new fo().fromJsonString(n,r)}static equals(n,r){return x.util.equals(fo,n,r)}};v(fo,"runtime",x),v(fo,"typeName","wg.cosmo.node.v1.MTLSConfiguration"),v(fo,"fields",x.util.newFieldList(()=>[{no:1,name:"key",kind:"message",T:xr},{no:2,name:"cert",kind:"message",T:xr},{no:3,name:"insecureSkipVerify",kind:"scalar",T:8}]));var ED=fo,mo=class mo extends $e{constructor(n){super();v(this,"enabled",!1);v(this,"url");v(this,"useSSE");v(this,"protocol");v(this,"websocketSubprotocol");x.util.initPartial(n,this)}static fromBinary(n,r){return new mo().fromBinary(n,r)}static fromJson(n,r){return new mo().fromJson(n,r)}static fromJsonString(n,r){return new mo().fromJsonString(n,r)}static equals(n,r){return x.util.equals(mo,n,r)}};v(mo,"runtime",x),v(mo,"typeName","wg.cosmo.node.v1.GraphQLSubscriptionConfiguration"),v(mo,"fields",x.util.newFieldList(()=>[{no:1,name:"enabled",kind:"scalar",T:8},{no:2,name:"url",kind:"message",T:xr},{no:3,name:"useSSE",kind:"scalar",T:8,opt:!0},{no:4,name:"protocol",kind:"enum",T:x.getEnumType(As),opt:!0},{no:5,name:"websocketSubprotocol",kind:"enum",T:x.getEnumType(Rs),opt:!0}]));var hD=mo,No=class No extends $e{constructor(n){super();v(this,"enabled",!1);v(this,"serviceSdl","");x.util.initPartial(n,this)}static fromBinary(n,r){return new No().fromBinary(n,r)}static fromJson(n,r){return new No().fromJson(n,r)}static fromJsonString(n,r){return new No().fromJsonString(n,r)}static equals(n,r){return x.util.equals(No,n,r)}};v(No,"runtime",x),v(No,"typeName","wg.cosmo.node.v1.GraphQLFederationConfiguration"),v(No,"fields",x.util.newFieldList(()=>[{no:1,name:"enabled",kind:"scalar",T:8},{no:2,name:"serviceSdl",kind:"scalar",T:9}]));var yD=No,To=class To extends $e{constructor(n){super();v(this,"key","");x.util.initPartial(n,this)}static fromBinary(n,r){return new To().fromBinary(n,r)}static fromJson(n,r){return new To().fromJson(n,r)}static fromJsonString(n,r){return new To().fromJsonString(n,r)}static equals(n,r){return x.util.equals(To,n,r)}};v(To,"runtime",x),v(To,"typeName","wg.cosmo.node.v1.InternedString"),v(To,"fields",x.util.newFieldList(()=>[{no:1,name:"key",kind:"scalar",T:9}]));var Wp=To,Eo=class Eo extends $e{constructor(n){super();v(this,"typeName","");v(this,"fieldName","");x.util.initPartial(n,this)}static fromBinary(n,r){return new Eo().fromBinary(n,r)}static fromJson(n,r){return new Eo().fromJson(n,r)}static fromJsonString(n,r){return new Eo().fromJsonString(n,r)}static equals(n,r){return x.util.equals(Eo,n,r)}};v(Eo,"runtime",x),v(Eo,"typeName","wg.cosmo.node.v1.SingleTypeField"),v(Eo,"fields",x.util.newFieldList(()=>[{no:1,name:"type_name",kind:"scalar",T:9},{no:2,name:"field_name",kind:"scalar",T:9}]));var ID=Eo,ho=class ho extends $e{constructor(n){super();v(this,"fieldPath",[]);v(this,"json","");x.util.initPartial(n,this)}static fromBinary(n,r){return new ho().fromBinary(n,r)}static fromJson(n,r){return new ho().fromJson(n,r)}static fromJsonString(n,r){return new ho().fromJsonString(n,r)}static equals(n,r){return x.util.equals(ho,n,r)}};v(ho,"runtime",x),v(ho,"typeName","wg.cosmo.node.v1.SubscriptionFieldCondition"),v(ho,"fields",x.util.newFieldList(()=>[{no:1,name:"field_path",kind:"scalar",T:9,repeated:!0},{no:2,name:"json",kind:"scalar",T:9}]));var Xp=ho,Qi=class Qi extends $e{constructor(n){super();v(this,"and",[]);v(this,"in");v(this,"not");v(this,"or",[]);x.util.initPartial(n,this)}static fromBinary(n,r){return new Qi().fromBinary(n,r)}static fromJson(n,r){return new Qi().fromJson(n,r)}static fromJsonString(n,r){return new Qi().fromJsonString(n,r)}static equals(n,r){return x.util.equals(Qi,n,r)}};v(Qi,"runtime",x),v(Qi,"typeName","wg.cosmo.node.v1.SubscriptionFilterCondition"),v(Qi,"fields",x.util.newFieldList(()=>[{no:1,name:"and",kind:"message",T:Qi,repeated:!0},{no:2,name:"in",kind:"message",T:Xp,opt:!0},{no:3,name:"not",kind:"message",T:Qi,opt:!0},{no:4,name:"or",kind:"message",T:Qi,repeated:!0}]));var cu=Qi,yo=class yo extends $e{constructor(n){super();v(this,"operations",[]);x.util.initPartial(n,this)}static fromBinary(n,r){return new yo().fromBinary(n,r)}static fromJson(n,r){return new yo().fromJson(n,r)}static fromJsonString(n,r){return new yo().fromJsonString(n,r)}static equals(n,r){return x.util.equals(yo,n,r)}};v(yo,"runtime",x),v(yo,"typeName","wg.cosmo.node.v1.CacheWarmerOperations"),v(yo,"fields",x.util.newFieldList(()=>[{no:1,name:"operations",kind:"message",T:gD,repeated:!0}]));var jV=yo,Io=class Io extends $e{constructor(n){super();v(this,"request");v(this,"client");x.util.initPartial(n,this)}static fromBinary(n,r){return new Io().fromBinary(n,r)}static fromJson(n,r){return new Io().fromJson(n,r)}static fromJsonString(n,r){return new Io().fromJsonString(n,r)}static equals(n,r){return x.util.equals(Io,n,r)}};v(Io,"runtime",x),v(Io,"typeName","wg.cosmo.node.v1.Operation"),v(Io,"fields",x.util.newFieldList(()=>[{no:1,name:"request",kind:"message",T:_D},{no:2,name:"client",kind:"message",T:OD}]));var gD=Io,go=class go extends $e{constructor(n){super();v(this,"operationName","");v(this,"query","");v(this,"extensions");x.util.initPartial(n,this)}static fromBinary(n,r){return new go().fromBinary(n,r)}static fromJson(n,r){return new go().fromJson(n,r)}static fromJsonString(n,r){return new go().fromJsonString(n,r)}static equals(n,r){return x.util.equals(go,n,r)}};v(go,"runtime",x),v(go,"typeName","wg.cosmo.node.v1.OperationRequest"),v(go,"fields",x.util.newFieldList(()=>[{no:1,name:"operation_name",kind:"scalar",T:9},{no:2,name:"query",kind:"scalar",T:9},{no:3,name:"extensions",kind:"message",T:vD}]));var _D=go,_o=class _o extends $e{constructor(n){super();v(this,"persistedQuery");x.util.initPartial(n,this)}static fromBinary(n,r){return new _o().fromBinary(n,r)}static fromJson(n,r){return new _o().fromJson(n,r)}static fromJsonString(n,r){return new _o().fromJsonString(n,r)}static equals(n,r){return x.util.equals(_o,n,r)}};v(_o,"runtime",x),v(_o,"typeName","wg.cosmo.node.v1.Extension"),v(_o,"fields",x.util.newFieldList(()=>[{no:1,name:"persisted_query",kind:"message",T:SD}]));var vD=_o,vo=class vo extends $e{constructor(n){super();v(this,"sha256Hash","");v(this,"version",0);x.util.initPartial(n,this)}static fromBinary(n,r){return new vo().fromBinary(n,r)}static fromJson(n,r){return new vo().fromJson(n,r)}static fromJsonString(n,r){return new vo().fromJsonString(n,r)}static equals(n,r){return x.util.equals(vo,n,r)}};v(vo,"runtime",x),v(vo,"typeName","wg.cosmo.node.v1.PersistedQuery"),v(vo,"fields",x.util.newFieldList(()=>[{no:1,name:"sha256_hash",kind:"scalar",T:9},{no:2,name:"version",kind:"scalar",T:5}]));var SD=vo,So=class So extends $e{constructor(n){super();v(this,"name","");v(this,"version","");x.util.initPartial(n,this)}static fromBinary(n,r){return new So().fromBinary(n,r)}static fromJson(n,r){return new So().fromJson(n,r)}static fromJsonString(n,r){return new So().fromJsonString(n,r)}static equals(n,r){return x.util.equals(So,n,r)}};v(So,"runtime",x),v(So,"typeName","wg.cosmo.node.v1.ClientInfo"),v(So,"fields",x.util.newFieldList(()=>[{no:1,name:"name",kind:"scalar",T:9},{no:2,name:"version",kind:"scalar",T:9}]));var OD=So;f();N();m();var KE=os(TE(),1);function jle(e){if(!e.conditions)return;let t=[];for(let n of e.conditions){let r=[];for(let i of n.fieldCoordinatesPath){let a=i.split(".");if(a.length!==2)throw new Error(`fatal: malformed conditional field coordinates "${i}" for field set "${e.selectionSet}".`);r.push(new $p({fieldName:a[1],typeName:a[0]}))}t.push(new Qp({fieldCoordinatesPath:r,fieldPath:n.fieldPath}))}return t}function DD(e,t,n){if(e)for(let r of e){let i=jle(r);t.push(new fc(M(M({typeName:n,fieldName:r.fieldName,selectionSet:r.selectionSet},r.disableEntityResolver?{disableEntityResolver:!0}:{}),i?{conditions:i}:{})))}}function KV(e){switch(e){case"publish":return Oo.PUBLISH;case"request":return Oo.REQUEST;case"subscribe":return Oo.SUBSCRIBE}}function GV(e){var n;let t={rootNodes:[],childNodes:[],keys:[],provides:[],events:new Ec({nats:[],kafka:[]}),requires:[],entityInterfaces:[],interfaceObjects:[]};for(let r of e.values()){let i=r.typeName,a=[...r.fieldNames],o=new xl({typeName:i,fieldNames:a});if(r.externalFieldNames&&r.externalFieldNames.size>0&&(o.externalFieldNames=[...r.externalFieldNames]),r.isRootNode?t.rootNodes.push(o):t.childNodes.push(o),r.entityInterfaceConcreteTypeNames){let p=new ql({interfaceTypeName:i,concreteTypeNames:[...r.entityInterfaceConcreteTypeNames]});r.isInterfaceObject?t.interfaceObjects.push(p):t.entityInterfaces.push(p)}DD(r.keys,t.keys,i),DD(r.provides,t.provides,i),DD(r.requires,t.requires,i);let c=[],l=[];for(let p of(n=r.events)!=null?n:[])switch(p.providerType){case KE.PROVIDER_TYPE_KAFKA:{l.push(new zp({engineEventConfiguration:new uu({fieldName:p.fieldName,providerId:p.providerId,type:KV(p.type),typeName:i}),topics:p.topics}));break}case KE.PROVIDER_TYPE_NATS:{c.push(new Hp(M({engineEventConfiguration:new uu({fieldName:p.fieldName,providerId:p.providerId,type:KV(p.type),typeName:i}),subjects:p.subjects},p.streamConfiguration?{streamConfiguration:new Jp({consumerInactiveThreshold:p.streamConfiguration.consumerInactiveThreshold,consumerName:p.streamConfiguration.consumerName,streamName:p.streamConfiguration.streamName})}:{})));break}default:throw new Error("Fatal: Unknown event provider.")}t.events.nats.push(...c),t.events.kafka.push(...l)}return t}function $V(e){var n,r;let t=[];for(let i of e){let a=i.argumentNames.map(T=>new jp({name:T,sourceType:mc.FIELD_ARGUMENT})),o=new Gp({argumentsConfiguration:a,fieldName:i.fieldName,typeName:i.typeName}),c=((n=i.requiredScopes)==null?void 0:n.map(T=>new Tc({requiredAndScopes:T})))||[],l=((r=i.requiredScopesByOR)==null?void 0:r.map(T=>new Tc({requiredAndScopes:T})))||[],p=c.length>0;if((i.requiresAuthentication||p)&&(o.authorizationConfiguration=new Kp({requiresAuthentication:i.requiresAuthentication||p,requiredOrScopes:c,requiredOrScopesByOr:l})),i.subscriptionFilterCondition){let T=new cu;jE(T,i.subscriptionFilterCondition),o.subscriptionFilterCondition=T}t.push(o)}return t}function jE(e,t){if(t.and!==void 0){let n=[];for(let r of t.and){let i=new cu;jE(i,r),n.push(i)}e.and=n;return}if(t.in!==void 0){e.in=new Xp({fieldPath:t.in.fieldPath,json:JSON.stringify(t.in.values)});return}if(t.not!==void 0){e.not=new cu,jE(e.not,t.not);return}if(t.or!==void 0){let n=[];for(let r of t.or){let i=new cu;jE(i,r),n.push(i)}e.or=n;return}throw new Error("Fatal: Incoming SubscriptionCondition object was malformed.")}f();N();m();function bD(e){return new Error(`Normalization failed to return a ${e}.`)}function QV(e){return new Error(`Invalid router compatibility version "${e}".`)}var Kle=(e,t)=>{let n=stringHash(t);return e.stringStorage[n]=t,new Wp({key:n})},Gle=e=>{switch(e){case"ws":return As.GRAPHQL_SUBSCRIPTION_PROTOCOL_WS;case"sse":return As.GRAPHQL_SUBSCRIPTION_PROTOCOL_SSE;case"sse_post":return As.GRAPHQL_SUBSCRIPTION_PROTOCOL_SSE_POST}throw new Error(`Unsupported subscription protocol '${e}'`)},$le=e=>{switch(e){case"auto":return Rs.GRAPHQL_WEBSOCKET_SUBPROTOCOL_AUTO;case"graphql-ws":return Rs.GRAPHQL_WEBSOCKET_SUBPROTOCOL_WS;case"graphql-transport-ws":return Rs.GRAPHQL_WEBSOCKET_SUBPROTOCOL_TRANSPORT_WS}throw new Error(`Unsupported websocket subprotocol '${e}'`)},JV=function(e){if(!Vl.ROUTER_COMPATIBILITY_VERSIONS.has(e.routerCompatibilityVersion))throw QV(e.routerCompatibilityVersion);let t=new Ml({defaultFlushInterval:BigInt(500),datasourceConfigurations:[],fieldConfigurations:[],graphqlSchema:"",stringStorage:{},typeConfigurations:[]});for(let n of e.subgraphs){if(!n.configurationDataByTypeName)throw bD("ConfigurationDataByTypeName");if(!n.schema)throw bD("GraphQLSchema");let r=Kle(t,tV((0,YV.lexicographicSortSchema)(n.schema))),{childNodes:i,entityInterfaces:a,events:o,interfaceObjects:c,keys:l,provides:p,requires:T,rootNodes:y}=GV(n.configurationDataByTypeName),g=Gle(n.subscriptionProtocol||"ws"),_=$le(n.websocketSubprotocol||"auto"),F,U,K;if(o.kafka.length>0||o.nats.length>0){F=su.PUBSUB,K=new Ec({kafka:o.kafka,nats:o.nats});let ee=de=>Vl.ROOT_TYPE_NAMES.has(de.typeName),W=0,Te=0;for(;W({id:n.id,name:n.name,routingUrl:n.url})),compatibilityVersion:`${e.routerCompatibilityVersion}:${Vl.COMPOSITION_VERSION}`})};f();N();m();var yc=os(Ae());function HV(e){let t;try{t=(0,yc.parse)(e.schema)}catch(n){throw new Error(`could not parse schema for Graph ${e.name}: ${n}`)}return{definitions:t,name:e.name,url:e.url}}function Qle(e){let t=(0,hc.federateSubgraphs)(e.map(HV),hc.LATEST_ROUTER_COMPATIBILITY_VERSION);if(!t.success)throw new Error(`could not federate schema: ${t.errors.map(n=>n.message).join(", ")}`);return{fieldConfigurations:t.fieldConfigurations,sdl:(0,yc.print)(t.federatedGraphAST)}}function Yle(e){let t=(0,hc.federateSubgraphs)(e.map(HV),hc.LATEST_ROUTER_COMPATIBILITY_VERSION);if(!t.success)throw new Error(`could not federate schema: ${t.errors.map(r=>r.message).join(", ")}`);return JV({federatedClientSDL:(0,yc.printSchema)(t.federatedGraphClientSchema),federatedSDL:(0,yc.printSchema)(t.federatedGraphSchema),fieldConfigurations:t.fieldConfigurations,routerCompatibilityVersion:hc.LATEST_ROUTER_COMPATIBILITY_VERSION,schemaVersionId:"",subgraphs:e.map((r,i)=>{var l,p;let a=t.subgraphConfigBySubgraphName.get(r.name),o=a==null?void 0:a.schema,c=a==null?void 0:a.configurationDataByTypeName;return{id:`${i}`,name:r.name,url:KO(r.url),sdl:r.schema,subscriptionUrl:KO((l=r.subscription_url)!=null?l:r.url),subscriptionProtocol:(p=r.subscription_protocol)!=null?p:"ws",websocketSubprotocol:r.subscription_protocol==="ws"?r.websocketSubprotocol||"auto":void 0,schema:o,configurationDataByTypeName:c}})}).toJsonString()}return Kf(Jle);})(); +}`;var Et=tA(function(){return jt(L,Ve+"return "+Ee).apply(e,k)});if(Et.source=Ee,Qh(Et))throw Et;return Et}function C2(s){return Qt(s).toLowerCase()}function B2(s){return Qt(s).toUpperCase()}function U2(s,u,d){if(s=Qt(s),s&&(d||u===e))return lb(s);if(!s||!(u=si(u)))return s;var E=Yi(s),S=Yi(u),L=db(E,S),k=pb(E,S)+1;return Bo(E,L,k).join("")}function k2(s,u,d){if(s=Qt(s),s&&(d||u===e))return s.slice(0,mb(s)+1);if(!s||!(u=si(u)))return s;var E=Yi(s),S=pb(E,Yi(u))+1;return Bo(E,0,S).join("")}function M2(s,u,d){if(s=Qt(s),s&&(d||u===e))return s.replace(QE,"");if(!s||!(u=si(u)))return s;var E=Yi(s),S=db(E,Yi(u));return Bo(E,S).join("")}function x2(s,u){var d=et,E=X;if(vn(u)){var S="separator"in u?u.separator:S;d="length"in u?ft(u.length):d,E="omission"in u?si(u.omission):E}s=Qt(s);var L=s.length;if(vc(s)){var k=Yi(s);L=k.length}if(d>=L)return s;var j=d-Sc(E);if(j<1)return E;var H=k?Bo(k,0,j).join(""):s.slice(0,j);if(S===e)return H+E;if(k&&(j+=H.length-j),Yh(S)){if(s.slice(j).search(S)){var fe,me=H;for(S.global||(S=ch(S.source,Qt(wD.exec(S))+"g")),S.lastIndex=0;fe=S.exec(me);)var Ee=fe.index;H=H.slice(0,Ee===e?j:Ee)}}else if(s.indexOf(si(S),j)!=j){var be=H.lastIndexOf(S);be>-1&&(H=H.slice(0,be))}return H+E}function q2(s){return s=Qt(s),s&&WV.test(s)?s.replace(RD,N1):s}var V2=Fc(function(s,u,d){return s+(d?" ":"")+u.toUpperCase()}),zh=n0("toUpperCase");function eA(s,u,d){return s=Qt(s),u=d?e:u,u===e?l1(s)?h1(s):t1(s):s.match(u)||[]}var tA=yt(function(s,u){try{return ii(s,e,u)}catch(d){return Qh(d)?d:new ot(d)}}),j2=ns(function(s,u){return Ei(u,function(d){d=va(d),es(s,d,Gh(s[d],s))}),s});function K2(s){var u=s==null?0:s.length,d=ze();return s=u?hn(s,function(E){if(typeof E[1]!="function")throw new hi(i);return[d(E[0]),E[1]]}):[],yt(function(E){for(var S=-1;++Sdn)return[];var d=kn,E=Er(s,kn);u=ze(u),s-=kn;for(var S=sh(E,u);++d0||u<0)?new St(d):(s<0?d=d.takeRight(-s):s&&(d=d.drop(s)),u!==e&&(u=ft(u),d=u<0?d.dropRight(-u):d.take(u-s)),d)},St.prototype.takeRightWhile=function(s){return this.reverse().takeWhile(s).reverse()},St.prototype.toArray=function(){return this.take(kn)},ga(St.prototype,function(s,u){var d=/^(?:filter|find|map|reject)|While$/.test(u),E=/^(?:head|last)$/.test(u),S=R[E?"take"+(u=="last"?"Right":""):u],L=E||/^find/.test(u);S&&(R.prototype[u]=function(){var k=this.__wrapped__,j=E?[1]:arguments,H=k instanceof St,fe=j[0],me=H||lt(k),Ee=function(vt){var At=S.apply(R,Ao([vt],j));return E&&be?At[0]:At};me&&d&&typeof fe=="function"&&fe.length!=1&&(H=me=!1);var be=this.__chain__,Ve=!!this.__actions__.length,We=L&&!be,Et=H&&!Ve;if(!L&&me){k=Et?k:new St(this);var Xe=s.apply(k,j);return Xe.__actions__.push({func:Uf,args:[Ee],thisArg:e}),new yi(Xe,be)}return We&&Et?s.apply(this,j):(Xe=this.thru(Ee),We?E?Xe.value()[0]:Xe.value():Xe)})}),Ei(["pop","push","shift","sort","splice","unshift"],function(s){var u=uf[s],d=/^(?:push|sort|unshift)$/.test(s)?"tap":"thru",E=/^(?:pop|shift)$/.test(s);R.prototype[s]=function(){var S=arguments;if(E&&!this.__chain__){var L=this.value();return u.apply(lt(L)?L:[],S)}return this[d](function(k){return u.apply(lt(k)?k:[],S)})}}),ga(St.prototype,function(s,u){var d=R[u];if(d){var E=d.name+"";Xt.call(bc,E)||(bc[E]=[]),bc[E].push({name:u,func:d})}}),bc[Rf(e,U).name]=[{name:"wrapper",func:e}],St.prototype.clone=q1,St.prototype.reverse=V1,St.prototype.value=j1,R.prototype.at=E$,R.prototype.chain=h$,R.prototype.commit=y$,R.prototype.next=I$,R.prototype.plant=_$,R.prototype.reverse=v$,R.prototype.toJSON=R.prototype.valueOf=R.prototype.value=S$,R.prototype.first=R.prototype.head,Gl&&(R.prototype[Gl]=g$),R},Fo=y1();typeof define=="function"&&typeof define.amd=="object"&&define.amd?(sr._=Fo,define(function(){return Fo})):pu?((pu.exports=Fo)._=Fo,XE._=Fo):sr._=Fo}).call(wl)});var Pq=w(pc=>{"use strict";m();T();N();Object.defineProperty(pc,"__esModule",{value:!0});pc.FederationFactory=void 0;pc.federateSubgraphs=Qce;pc.federateSubgraphsWithContracts=Yce;pc.federateSubgraphsContract=Jce;var Re=Ae(),bq=Ho(),Mr=Jr(),Fe=sa(),dc=yN(),Aq=rp(),ni=cp(),fE=cO(),Kn=hs(),Kce=BO(),Gce=bp(),Rq=Ap(),ge=Fp(),$ce=MO(),Fq=Dq(),Ll=pE(),Oe=lr(),mE=nl(),he=Hr(),NE=class{constructor(t){v(this,"authorizationDataByParentTypeName");v(this,"concreteTypeNamesByAbstractTypeName");v(this,"clientDefinitions",[Kn.DEPRECATED_DEFINITION]);v(this,"currentSubgraphName","");v(this,"subgraphNamesByNamedTypeNameByFieldCoords",new Map);v(this,"entityDataByTypeName");v(this,"entityInterfaceFederationDataByTypeName");v(this,"errors",[]);v(this,"fieldConfigurationByFieldCoords",new Map);v(this,"fieldCoordsByNamedTypeName");v(this,"inaccessibleCoords",new Set);v(this,"inaccessibleRequiredInputValueErrorByCoords",new Map);v(this,"isMaxDepth",!1);v(this,"internalGraph");v(this,"internalSubgraphBySubgraphName");v(this,"invalidORScopesCoords",new Set);v(this,"isVersionTwo",!1);v(this,"namedInputValueTypeNames",new Set);v(this,"namedOutputTypeNames",new Set);v(this,"parentDefinitionDataByTypeName",new Map);v(this,"parentTagDataByTypeName",new Map);v(this,"coordsByNamedTypeName",new Map);v(this,"persistedDirectiveDefinitionByDirectiveName",new Map([[Oe.AUTHENTICATED,Kn.AUTHENTICATED_DEFINITION],[Oe.DEPRECATED,Kn.DEPRECATED_DEFINITION],[Oe.INACCESSIBLE,Kn.INACCESSIBLE_DEFINITION],[Oe.REQUIRES_SCOPES,Kn.REQUIRES_SCOPES_DEFINITION],[Oe.TAG,Kn.TAG_DEFINITION]]));v(this,"persistedDirectiveDefinitions",new Set([Oe.AUTHENTICATED,Oe.DEPRECATED,Oe.INACCESSIBLE,Oe.TAG,Oe.REQUIRES_SCOPES]));v(this,"potentialPersistedDirectiveDefinitionDataByDirectiveName",new Map);v(this,"routerDefinitions",[Kn.DEPRECATED_DEFINITION,Kn.TAG_DEFINITION]);v(this,"subscriptionFilterDataByFieldPath",new Map);v(this,"tagNamesByCoords",new Map);v(this,"warnings");this.authorizationDataByParentTypeName=t.authorizationDataByParentTypeName,this.concreteTypeNamesByAbstractTypeName=t.concreteTypeNamesByAbstractTypeName,this.entityDataByTypeName=t.entityDataByTypeName,this.entityInterfaceFederationDataByTypeName=t.entityInterfaceFederationDataByTypeName,this.fieldCoordsByNamedTypeName=t.fieldCoordsByNamedTypeName,this.internalSubgraphBySubgraphName=t.internalSubgraphBySubgraphName,this.internalGraph=t.internalGraph,this.warnings=t.warnings}getValidImplementedInterfaces(t){var o;let n=[];if(t.implementedInterfaceTypeNames.size<1)return n;let r=(0,ge.isNodeDataInaccessible)(t),i=new Map,a=new Map;for(let c of t.implementedInterfaceTypeNames){n.push((0,Mr.stringToNamedTypeNode)(c));let l=(0,he.getOrThrowError)(this.parentDefinitionDataByTypeName,c,Oe.PARENT_DEFINITION_DATA);if(l.kind!==Re.Kind.INTERFACE_TYPE_DEFINITION){a.set(l.name,(0,he.kindToTypeString)(l.kind));continue}let p={invalidFieldImplementations:new Map,unimplementedFields:[]},f=!1;for(let[y,g]of l.fieldDataByFieldName){let _=!1,F=t.fieldDataByFieldName.get(y);if(!F){f=!0,p.unimplementedFields.push(y);continue}let U={invalidAdditionalArguments:new Set,invalidImplementedArguments:[],isInaccessible:!1,originalResponseType:(0,fE.printTypeNode)(g.node.type),unimplementedArguments:new Set};(0,ge.isTypeValidImplementation)(g.node.type,F.node.type,this.concreteTypeNamesByAbstractTypeName)||(f=!0,_=!0,U.implementedResponseType=(0,fE.printTypeNode)(F.node.type));let K=new Set;for(let[J,ee]of g.argumentDataByArgumentName){let W=ee.node;K.add(J);let Te=(o=F.argumentDataByArgumentName.get(J))==null?void 0:o.node;if(!Te){f=!0,_=!0,U.unimplementedArguments.add(J);continue}let de=(0,fE.printTypeNode)(Te.type),we=(0,fE.printTypeNode)(W.type);we!==de&&(f=!0,_=!0,U.invalidImplementedArguments.push({actualType:de,argumentName:J,expectedType:we}))}for(let[J,ee]of F.argumentDataByArgumentName){let W=ee.node;K.has(J)||W.type.kind===Re.Kind.NON_NULL_TYPE&&(f=!0,_=!0,U.invalidAdditionalArguments.add(J))}!r&&F.isInaccessible&&!g.isInaccessible&&(f=!0,_=!0,U.isInaccessible=!0),_&&p.invalidFieldImplementations.set(y,U)}f&&i.set(c,p)}return a.size>0&&this.errors.push((0,Fe.invalidImplementedTypeError)(t.name,a)),i.size>0&&this.errors.push((0,Fe.invalidInterfaceImplementationError)(t.node.name.value,(0,he.kindToTypeString)(t.kind),i)),n}addValidPrimaryKeyTargetsToEntityData(t){var f;let n=this.entityDataByTypeName.get(t);if(!n)return;let r=(0,he.getOrThrowError)(this.internalSubgraphBySubgraphName,this.currentSubgraphName,"internalSubgraphBySubgraphName"),i=r.parentDefinitionDataByTypeName,a=i.get(n.typeName);if(!a||a.kind!==Re.Kind.OBJECT_TYPE_DEFINITION)throw(0,Fe.incompatibleParentKindFatalError)(n.typeName,Re.Kind.OBJECT_TYPE_DEFINITION,(a==null?void 0:a.kind)||Re.Kind.NULL);let o=(0,he.getOrThrowError)(r.configurationDataByTypeName,n.typeName,"internalSubgraph.configurationDataByTypeName"),c=[],l=this.internalGraph.nodeByNodeName.get(`${this.currentSubgraphName}.${n.typeName}`);(0,dc.validateImplicitFieldSets)({conditionalFieldDataByCoords:r.conditionalFieldDataByCoordinates,currentSubgraphName:this.currentSubgraphName,entityData:n,implicitKeys:c,objectData:a,parentDefinitionDataByTypeName:i,graphNode:l});for(let[y,g]of this.entityInterfaceFederationDataByTypeName){if(!((f=g.concreteTypeNames)!=null&&f.has(n.typeName)))continue;let _=this.entityDataByTypeName.get(y);_&&(0,dc.validateImplicitFieldSets)({conditionalFieldDataByCoords:r.conditionalFieldDataByCoordinates,currentSubgraphName:this.currentSubgraphName,entityData:_,implicitKeys:c,objectData:a,parentDefinitionDataByTypeName:i,graphNode:l})}if(c.length<1)return;if(!o.keys||o.keys.length<1){o.isRootNode=!0,o.keys=c;return}let p=new Set(o.keys.map(y=>y.selectionSet));for(let y of c)p.has(y.selectionSet)||(o.keys.push(y),p.add(y.selectionSet))}addValidPrimaryKeyTargetsFromInterfaceObject(t,n,r,i){let a=t.parentDefinitionDataByTypeName,o=a.get(n);if(!o||!(0,ge.isParentDataCompositeOutputType)(o))throw(0,Fe.incompatibleParentKindFatalError)(n,Re.Kind.INTERFACE_TYPE_DEFINITION,(o==null?void 0:o.kind)||Re.Kind.NULL);let c=(0,he.getOrThrowError)(t.configurationDataByTypeName,r.typeName,"internalSubgraph.configurationDataByTypeName"),l=[];if((0,dc.validateImplicitFieldSets)({conditionalFieldDataByCoords:t.conditionalFieldDataByCoordinates,currentSubgraphName:t.name,entityData:r,implicitKeys:l,objectData:o,parentDefinitionDataByTypeName:a,graphNode:i}),l.length<1)return;if(!c.keys||c.keys.length<1){c.isRootNode=!0,c.keys=l;return}let p=new Set(c.keys.map(f=>f.selectionSet));for(let f of l)p.has(f.selectionSet)||(c.keys.push(f),p.add(f.selectionSet))}getEnumValueMergeMethod(t){return this.namedInputValueTypeNames.has(t)?this.namedOutputTypeNames.has(t)?ge.MergeMethod.CONSISTENT:ge.MergeMethod.INTERSECTION:ge.MergeMethod.UNION}generateTagData(){for(let[t,n]of this.tagNamesByCoords){let r=t.split(".");if(r.length<1)continue;let i=(0,he.getValueOrDefault)(this.parentTagDataByTypeName,r[0],()=>(0,dc.newParentTagData)(r[0]));switch(r.length){case 1:for(let l of n)i.tagNames.add(l);break;case 2:let a=(0,he.getValueOrDefault)(i.childTagDataByChildName,r[1],()=>(0,dc.newChildTagData)(r[1]));for(let l of n)a.tagNames.add(l);break;case 3:let o=(0,he.getValueOrDefault)(i.childTagDataByChildName,r[1],()=>(0,dc.newChildTagData)(r[1])),c=(0,he.getValueOrDefault)(o.tagNamesByArgumentName,r[2],()=>new Set);for(let l of n)c.add(l);break;default:break}}}upsertEnumValueData(t,n,r){let i=t.get(n.name),a=i||this.copyEnumValueData(n);(0,ge.extractPersistedDirectives)(a.persistedDirectivesData,n.directivesByDirectiveName,this.persistedDirectiveDefinitionByDirectiveName);let o=(0,ge.isNodeDataInaccessible)(n);if((r||o)&&this.inaccessibleCoords.add(a.federatedCoords),this.recordTagNamesByCoords(a,a.federatedCoords),!i){t.set(a.name,a);return}a.appearances+=1,(0,he.addNewObjectValueMapEntries)(n.configureDescriptionDataBySubgraphName,a.configureDescriptionDataBySubgraphName),(0,ge.setLongestDescription)(a,n),(0,he.addIterableValuesToSet)(n.subgraphNames,a.subgraphNames)}upsertInputValueData(t,n,r,i){let a=t.get(n.name),o=a||this.copyInputValueData(n);if((0,ge.extractPersistedDirectives)(o.persistedDirectivesData,n.directivesByDirectiveName,this.persistedDirectiveDefinitionByDirectiveName),this.recordTagNamesByCoords(o,`${r}.${o.name}`),this.namedInputValueTypeNames.add(o.namedTypeName),(0,he.getValueOrDefault)(this.coordsByNamedTypeName,o.namedTypeName,()=>new Set).add(o.federatedCoords),!a){t.set(o.name,o);return}(0,he.addNewObjectValueMapEntries)(n.configureDescriptionDataBySubgraphName,o.configureDescriptionDataBySubgraphName),(0,ge.setLongestDescription)(o,n),(0,he.addIterableValuesToSet)(n.requiredSubgraphNames,o.requiredSubgraphNames),(0,he.addIterableValuesToSet)(n.subgraphNames,o.subgraphNames),this.handleInputValueInaccessibility(i,o,r);let{typeErrors:c,typeNode:l}=(0,Ll.getMostRestrictiveMergedTypeNode)(o.type,n.type,o.originalCoords,this.errors);if(l)o.type=l;else{if(!c||c.length<2)throw(0,Fe.fieldTypeMergeFatalError)(o.name);a.isArgument?this.errors.push((0,Fe.incompatibleArgumentTypesError)(o.name,o.federatedCoords,c[0],c[1])):this.errors.push((0,Fe.incompatibleChildTypesError)(o.federatedCoords,c[0],c[1]))}(0,ge.compareAndValidateInputValueDefaultValues)(o,n,this.errors)}handleInputValueInaccessibility(t,n,r){if(t){this.inaccessibleRequiredInputValueErrorByCoords.delete(n.federatedCoords),this.inaccessibleCoords.add(n.federatedCoords);return}if((0,ge.isNodeDataInaccessible)(n)){if((0,ge.isTypeRequired)(n.type)){this.inaccessibleRequiredInputValueErrorByCoords.set(n.federatedCoords,(0,Fe.inaccessibleRequiredInputValueError)(n,r));return}this.inaccessibleCoords.add(n.federatedCoords)}}handleSubscriptionFilterDirective(t,n){let r=t.directivesByDirectiveName.get(Oe.SUBSCRIPTION_FILTER);if(!r)return;let i=(0,he.getSingleSetEntry)(t.subgraphNames);if(i===void 0){this.errors.push((0,Fe.unknownFieldSubgraphNameError)(t.federatedCoords));return}this.subscriptionFilterDataByFieldPath.set(t.federatedCoords,{directive:r[0],fieldData:n||t,directiveSubgraphName:i})}federateOutputType({current:t,other:n,coords:r,mostRestrictive:i}){n=(0,bq.getMutableTypeNode)(n,r,this.errors);let a={kind:t.kind},o=Ll.DivergentType.NONE,c=a;for(let l=0;lnew Set))}upsertFieldData(t,n,r){let i=t.get(n.name),a=i||this.copyFieldData(n,r||(0,ge.isNodeDataInaccessible)(n));(0,he.getValueOrDefault)(this.coordsByNamedTypeName,n.namedTypeName,()=>new Set).add(a.federatedCoords),this.namedOutputTypeNames.add(n.namedTypeName),this.handleSubscriptionFilterDirective(n,a),(0,ge.extractPersistedDirectives)(a.persistedDirectivesData,n.directivesByDirectiveName,this.persistedDirectiveDefinitionByDirectiveName);let o=r||(0,ge.isNodeDataInaccessible)(a);if(o&&this.inaccessibleCoords.add(a.federatedCoords),this.recordTagNamesByCoords(a,a.federatedCoords),!i){t.set(a.name,a);return}let c=this.federateOutputType({current:a.type,other:n.type,coords:a.federatedCoords,mostRestrictive:!1});if(c.success)if(a.type=c.typeNode,a.namedTypeName!==n.namedTypeName){let l=(0,he.getValueOrDefault)(this.subgraphNamesByNamedTypeNameByFieldCoords,a.federatedCoords,()=>new Map),p=(0,he.getValueOrDefault)(l,a.namedTypeName,()=>new Set);if(p.size<1)for(let f of a.subgraphNames)n.subgraphNames.has(f)||p.add(f);(0,he.addIterableValuesToSet)(n.subgraphNames,(0,he.getValueOrDefault)(l,n.namedTypeName,()=>new Set))}else this.addSubgraphNameToExistingFieldNamedTypeDisparity(n);for(let l of n.argumentDataByArgumentName.values())this.upsertInputValueData(a.argumentDataByArgumentName,l,a.federatedCoords,o);(0,he.addNewObjectValueMapEntries)(n.configureDescriptionDataBySubgraphName,i.configureDescriptionDataBySubgraphName),(0,ge.setLongestDescription)(a,n),a.isInaccessible||(a.isInaccessible=n.isInaccessible),(0,he.addNewObjectValueMapEntries)(n.externalFieldDataBySubgraphName,a.externalFieldDataBySubgraphName),(0,he.addMapEntries)(n.isShareableBySubgraphName,a.isShareableBySubgraphName),(0,he.addIterableValuesToSet)(n.subgraphNames,a.subgraphNames)}getClientSchemaUnionMembers(t){let n=[];for(let[r,i]of t.memberByMemberTypeName)this.inaccessibleCoords.has(r)||n.push(i);return n}recordTagNamesByCoords(t,n){let r=n||t.name;if(t.persistedDirectivesData.tagDirectiveByName.size<1)return;let i=(0,he.getValueOrDefault)(this.tagNamesByCoords,r,()=>new Set);for(let a of t.persistedDirectivesData.tagDirectiveByName.keys())i.add(a)}copyMutualParentDefinitionData(t){return{configureDescriptionDataBySubgraphName:(0,he.copyObjectValueMap)(t.configureDescriptionDataBySubgraphName),directivesByDirectiveName:(0,he.copyArrayValueMap)(t.directivesByDirectiveName),extensionType:t.extensionType,name:t.name,persistedDirectivesData:(0,ge.extractPersistedDirectives)((0,ge.newPersistedDirectivesData)(),t.directivesByDirectiveName,this.persistedDirectiveDefinitionByDirectiveName),description:(0,ge.getInitialFederatedDescription)(t)}}copyEnumValueData(t){return{appearances:t.appearances,configureDescriptionDataBySubgraphName:(0,he.copyObjectValueMap)(t.configureDescriptionDataBySubgraphName),federatedCoords:t.federatedCoords,directivesByDirectiveName:(0,he.copyArrayValueMap)(t.directivesByDirectiveName),kind:t.kind,name:t.name,node:{directives:[],kind:t.kind,name:(0,Mr.stringToNameNode)(t.name)},parentTypeName:t.parentTypeName,persistedDirectivesData:(0,ge.extractPersistedDirectives)((0,ge.newPersistedDirectivesData)(),t.directivesByDirectiveName,this.persistedDirectiveDefinitionByDirectiveName),subgraphNames:new Set(t.subgraphNames),description:(0,ge.getInitialFederatedDescription)(t)}}copyInputValueData(t){return{configureDescriptionDataBySubgraphName:(0,he.copyObjectValueMap)(t.configureDescriptionDataBySubgraphName),directivesByDirectiveName:(0,he.copyArrayValueMap)(t.directivesByDirectiveName),includeDefaultValue:t.includeDefaultValue,isArgument:t.isArgument,kind:t.kind,name:t.name,namedTypeName:t.namedTypeName,node:{directives:[],kind:Re.Kind.INPUT_VALUE_DEFINITION,name:(0,Mr.stringToNameNode)(t.name),type:t.type},originalCoords:t.originalCoords,persistedDirectivesData:(0,ge.extractPersistedDirectives)((0,ge.newPersistedDirectivesData)(),t.directivesByDirectiveName,this.persistedDirectiveDefinitionByDirectiveName),federatedCoords:t.federatedCoords,requiredSubgraphNames:new Set(t.requiredSubgraphNames),subgraphNames:new Set(t.subgraphNames),type:t.type,defaultValue:t.defaultValue,description:(0,ge.getInitialFederatedDescription)(t)}}copyInputValueDataByValueName(t,n,r){let i=new Map;for(let[a,o]of t){let c=this.copyInputValueData(o);this.handleInputValueInaccessibility(n,c,r),(0,he.getValueOrDefault)(this.coordsByNamedTypeName,c.namedTypeName,()=>new Set).add(c.federatedCoords),this.namedInputValueTypeNames.add(c.namedTypeName),this.recordTagNamesByCoords(c,`${r}.${o.name}`),i.set(a,c)}return i}copyFieldData(t,n){return{argumentDataByArgumentName:this.copyInputValueDataByValueName(t.argumentDataByArgumentName,n,t.federatedCoords),configureDescriptionDataBySubgraphName:(0,he.copyObjectValueMap)(t.configureDescriptionDataBySubgraphName),directivesByDirectiveName:(0,he.copyArrayValueMap)(t.directivesByDirectiveName),externalFieldDataBySubgraphName:(0,he.copyObjectValueMap)(t.externalFieldDataBySubgraphName),federatedCoords:t.federatedCoords,isInaccessible:t.isInaccessible,isShareableBySubgraphName:new Map(t.isShareableBySubgraphName),kind:t.kind,name:t.name,namedTypeName:t.namedTypeName,node:{arguments:[],directives:[],kind:t.kind,name:(0,Mr.stringToNameNode)(t.name),type:t.type},originalParentTypeName:t.originalParentTypeName,persistedDirectivesData:(0,ge.extractPersistedDirectives)((0,ge.newPersistedDirectivesData)(),t.directivesByDirectiveName,this.persistedDirectiveDefinitionByDirectiveName),renamedParentTypeName:t.renamedParentTypeName,subgraphNames:new Set(t.subgraphNames),type:t.type,description:(0,ge.getInitialFederatedDescription)(t)}}copyEnumValueDataByValueName(t,n){let r=new Map;for(let[i,a]of t){let o=this.copyEnumValueData(a);this.recordTagNamesByCoords(o,o.federatedCoords),(n||(0,ge.isNodeDataInaccessible)(o))&&this.inaccessibleCoords.add(o.federatedCoords),r.set(i,o)}return r}copyFieldDataByFieldName(t,n){let r=new Map;for(let[i,a]of t){let o=n||(0,ge.isNodeDataInaccessible)(a),c=this.copyFieldData(a,o);this.handleSubscriptionFilterDirective(c),(0,he.getValueOrDefault)(this.coordsByNamedTypeName,c.namedTypeName,()=>new Set).add(c.federatedCoords),this.namedOutputTypeNames.add(c.namedTypeName),this.recordTagNamesByCoords(c,c.federatedCoords),o&&this.inaccessibleCoords.add(c.federatedCoords),r.set(i,c)}return r}copyParentDefinitionData(t){let n=this.copyMutualParentDefinitionData(t);switch(t.kind){case Re.Kind.ENUM_TYPE_DEFINITION:return Q(M({},n),{appearances:t.appearances,enumValueDataByValueName:this.copyEnumValueDataByValueName(t.enumValueDataByValueName,t.isInaccessible),isInaccessible:t.isInaccessible,kind:t.kind,node:{kind:t.kind,name:(0,Mr.stringToNameNode)(t.name)},subgraphNames:new Set(t.subgraphNames)});case Re.Kind.INPUT_OBJECT_TYPE_DEFINITION:return Q(M({},n),{inputValueDataByValueName:this.copyInputValueDataByValueName(t.inputValueDataByValueName,t.isInaccessible,t.name),isInaccessible:t.isInaccessible,kind:t.kind,node:{kind:t.kind,name:(0,Mr.stringToNameNode)(t.name)},subgraphNames:new Set(t.subgraphNames)});case Re.Kind.INTERFACE_TYPE_DEFINITION:return Q(M({},n),{fieldDataByFieldName:this.copyFieldDataByFieldName(t.fieldDataByFieldName,t.isInaccessible),implementedInterfaceTypeNames:new Set(t.implementedInterfaceTypeNames),isEntity:t.isEntity,isInaccessible:t.isInaccessible,kind:t.kind,node:{kind:t.kind,name:(0,Mr.stringToNameNode)(t.name)},subgraphNames:new Set(t.subgraphNames)});case Re.Kind.OBJECT_TYPE_DEFINITION:return Q(M({},n),{fieldDataByFieldName:this.copyFieldDataByFieldName(t.fieldDataByFieldName,t.isInaccessible),implementedInterfaceTypeNames:new Set(t.implementedInterfaceTypeNames),isEntity:t.isEntity,isInaccessible:t.isInaccessible,isRootType:t.isRootType,kind:t.kind,node:{kind:t.kind,name:(0,Mr.stringToNameNode)(t.renamedTypeName||t.name)},renamedTypeName:t.renamedTypeName,subgraphNames:new Set(t.subgraphNames)});case Re.Kind.SCALAR_TYPE_DEFINITION:return Q(M({},n),{kind:t.kind,node:{kind:t.kind,name:(0,Mr.stringToNameNode)(t.name)},subgraphNames:new Set(t.subgraphNames)});case Re.Kind.UNION_TYPE_DEFINITION:return Q(M({},n),{kind:t.kind,node:{kind:t.kind,name:(0,Mr.stringToNameNode)(t.name)},memberByMemberTypeName:new Map(t.memberByMemberTypeName),subgraphNames:new Set(t.subgraphNames)})}}getParentTargetData({existingData:t,incomingData:n}){if(!t){let r=this.copyParentDefinitionData(n);return(0,ge.isParentDataRootType)(r)&&(r.extensionType=Rq.ExtensionType.NONE),r}return(0,ge.extractPersistedDirectives)(t.persistedDirectivesData,n.directivesByDirectiveName,this.persistedDirectiveDefinitionByDirectiveName),t}upsertParentDefinitionData(t,n){let r=this.entityInterfaceFederationDataByTypeName.get(t.name),i=this.parentDefinitionDataByTypeName.get(t.name),a=this.getParentTargetData({existingData:i,incomingData:t});this.recordTagNamesByCoords(a);let o=(0,ge.isNodeDataInaccessible)(a);if(o&&this.inaccessibleCoords.add(a.name),r&&r.interfaceObjectSubgraphs.has(n)&&(a.kind=Re.Kind.INTERFACE_TYPE_DEFINITION,a.node.kind=Re.Kind.INTERFACE_TYPE_DEFINITION),!i){this.parentDefinitionDataByTypeName.set(a.name,a);return}if(a.kind!==t.kind&&(!r||!r.interfaceObjectSubgraphs.has(n)||a.kind!==Re.Kind.INTERFACE_TYPE_DEFINITION||t.kind!==Re.Kind.OBJECT_TYPE_DEFINITION)){this.errors.push((0,Fe.incompatibleParentKindMergeError)(a.name,(0,he.kindToTypeString)(a.kind),(0,he.kindToTypeString)(t.kind)));return}switch((0,he.addNewObjectValueMapEntries)(t.configureDescriptionDataBySubgraphName,a.configureDescriptionDataBySubgraphName),(0,ge.setLongestDescription)(a,t),(0,ge.setParentDataExtensionType)(a,t),a.kind){case Re.Kind.ENUM_TYPE_DEFINITION:if(!(0,ge.areKindsEqual)(a,t))return;a.appearances+=1,a.isInaccessible||(a.isInaccessible=o),(0,he.addIterableValuesToSet)(t.subgraphNames,a.subgraphNames);for(let l of t.enumValueDataByValueName.values())this.upsertEnumValueData(a.enumValueDataByValueName,l,o);return;case Re.Kind.INPUT_OBJECT_TYPE_DEFINITION:if(!(0,ge.areKindsEqual)(a,t))return;o&&!a.isInaccessible&&this.propagateInaccessibilityToExistingChildren(a),a.isInaccessible||(a.isInaccessible=o),(0,he.addIterableValuesToSet)(t.subgraphNames,a.subgraphNames);for(let l of t.inputValueDataByValueName.values())this.upsertInputValueData(a.inputValueDataByValueName,l,a.name,a.isInaccessible);return;case Re.Kind.INTERFACE_TYPE_DEFINITION:case Re.Kind.OBJECT_TYPE_DEFINITION:let c=t;o&&!a.isInaccessible&&this.propagateInaccessibilityToExistingChildren(a),a.isInaccessible||(a.isInaccessible=o),(0,he.addIterableValuesToSet)(c.implementedInterfaceTypeNames,a.implementedInterfaceTypeNames),(0,he.addIterableValuesToSet)(c.subgraphNames,a.subgraphNames);for(let l of c.fieldDataByFieldName.values())this.upsertFieldData(a.fieldDataByFieldName,l,a.isInaccessible);return;case Re.Kind.UNION_TYPE_DEFINITION:if(!(0,ge.areKindsEqual)(a,t))return;(0,he.addMapEntries)(t.memberByMemberTypeName,a.memberByMemberTypeName),(0,he.addIterableValuesToSet)(t.subgraphNames,a.subgraphNames);return;default:(0,he.addIterableValuesToSet)(t.subgraphNames,a.subgraphNames);return}}propagateInaccessibilityToExistingChildren(t){switch(t.kind){case Re.Kind.INPUT_OBJECT_TYPE_DEFINITION:for(let n of t.inputValueDataByValueName.values())this.inaccessibleCoords.add(n.federatedCoords);break;default:for(let n of t.fieldDataByFieldName.values()){this.inaccessibleCoords.add(n.federatedCoords);for(let r of n.argumentDataByArgumentName.values())this.inaccessibleCoords.add(r.federatedCoords)}}}upsertPersistedDirectiveDefinitionData(t,n){let r=t.name,i=this.potentialPersistedDirectiveDefinitionDataByDirectiveName.get(r);if(!i){if(n>1)return;let a=new Map;for(let o of t.argumentDataByArgumentName.values())this.namedInputValueTypeNames.add(o.namedTypeName),this.upsertInputValueData(a,o,`@${t.name}`,!1);this.potentialPersistedDirectiveDefinitionDataByDirectiveName.set(r,{argumentDataByArgumentName:a,executableLocations:new Set(t.executableLocations),name:r,repeatable:t.repeatable,subgraphNames:new Set(t.subgraphNames),description:t.description});return}if(i.subgraphNames.size+1!==n){this.potentialPersistedDirectiveDefinitionDataByDirectiveName.delete(r);return}if((0,ge.setMutualExecutableLocations)(i,t.executableLocations),i.executableLocations.size<1){this.potentialPersistedDirectiveDefinitionDataByDirectiveName.delete(r);return}for(let a of t.argumentDataByArgumentName.values())this.namedInputValueTypeNames.add((0,bq.getTypeNodeNamedTypeName)(a.type)),this.upsertInputValueData(i.argumentDataByArgumentName,a,`@${i.name}`,!1);(0,ge.setLongestDescription)(i,t),i.repeatable&&(i.repeatable=t.repeatable),(0,he.addIterableValuesToSet)(t.subgraphNames,i.subgraphNames)}shouldUpdateFederatedFieldAbstractNamedType(t,n){if(!t)return!1;let r=this.concreteTypeNamesByAbstractTypeName.get(t);if(!r||r.size<1)return!1;for(let i of n)if(!r.has(i))return!1;return!0}updateTypeNodeNamedType(t,n){let r=t;for(let i=0;i1){this.errors.push((0,Fe.incompatibleFederatedFieldNamedTypeError)(t,n));continue}break}case Re.Kind.UNION_TYPE_DEFINITION:{if(l){this.errors.push((0,Fe.incompatibleFederatedFieldNamedTypeError)(t,n));continue}l=f;break}default:{this.errors.push((0,Fe.incompatibleFederatedFieldNamedTypeError)(t,n));break}}}if(o.size<0&&!l){this.errors.push((0,Fe.incompatibleFederatedFieldNamedTypeError)(t,n));continue}let p=l;if(o.size>0){if(l){this.errors.push((0,Fe.incompatibleFederatedFieldNamedTypeError)(t,n));continue}for(let f of o.keys()){p=f;for(let[y,g]of o)if(f!==y&&!g.implementedInterfaceTypeNames.has(f)){p="";break}if(p)break}}if(!this.shouldUpdateFederatedFieldAbstractNamedType(p,c)){this.errors.push((0,Fe.incompatibleFederatedFieldNamedTypeError)(t,n));continue}a.namedTypeName=p,this.updateTypeNodeNamedType(a.type,p)}}federateInternalSubgraphData(){let t=0,n=!1;for(let r of this.internalSubgraphBySubgraphName.values()){t+=1,this.currentSubgraphName=r.name,this.isVersionTwo||(this.isVersionTwo=r.isVersionTwo),(0,$ce.renameRootTypes)(this,r);for(let i of r.parentDefinitionDataByTypeName.values())this.upsertParentDefinitionData(i,r.name);if(!n){if(!r.persistedDirectiveDefinitionDataByDirectiveName.size){n=!0;continue}for(let i of r.persistedDirectiveDefinitionDataByDirectiveName.values())this.upsertPersistedDirectiveDefinitionData(i,t);this.potentialPersistedDirectiveDefinitionDataByDirectiveName.size<1&&(n=!0)}}this.handleDisparateFieldNamedTypes()}handleInterfaceObjectForInternalGraph({entityData:t,internalSubgraph:n,interfaceObjectData:r,interfaceObjectNode:i,resolvableKeyFieldSets:a,subgraphName:o}){let c=this.internalGraph.addOrUpdateNode(t.typeName),l=this.internalGraph.addEntityDataNode(t.typeName);for(let f of i.satisfiedFieldSets)c.satisfiedFieldSets.add(f),a.has(f)&&l.addTargetSubgraphByFieldSet(f,o);let p=r.fieldDatasBySubgraphName.get(o);for(let{name:f,namedTypeName:y}of p||[])this.internalGraph.addEdge(c,this.internalGraph.addOrUpdateNode(y),f);this.internalGraph.addEdge(i,c,t.typeName,!0),this.addValidPrimaryKeyTargetsFromInterfaceObject(n,i.typeName,t,c)}handleEntityInterfaces(){for(let[t,n]of this.entityInterfaceFederationDataByTypeName){(0,ni.subtractSet)(n.interfaceFieldNames,n.interfaceObjectFieldNames);let r=(0,he.getOrThrowError)(this.parentDefinitionDataByTypeName,t,Oe.PARENT_DEFINITION_DATA);if(r.kind===Re.Kind.INTERFACE_TYPE_DEFINITION)for(let i of n.interfaceObjectSubgraphs){let a=(0,he.getOrThrowError)(this.internalSubgraphBySubgraphName,i,"internalSubgraphBySubgraphName"),o=a.configurationDataByTypeName,c=this.concreteTypeNamesByAbstractTypeName.get(t);if(!c)continue;let l=(0,he.getOrThrowError)(o,t,"configurationDataMap"),p=l.keys;if(!p)continue;l.entityInterfaceConcreteTypeNames=n.concreteTypeNames;let f=l.fieldNames;this.internalGraph.setSubgraphName(i);let y=this.internalGraph.addOrUpdateNode(t,{isAbstract:!0});for(let g of c){if(o.has(g))continue;let _=(0,he.getOrThrowError)(this.parentDefinitionDataByTypeName,g,Oe.PARENT_DEFINITION_DATA);if(!(0,ni.isObjectDefinitionData)(_))continue;let F=(0,he.getOrThrowError)(this.entityDataByTypeName,g,"entityDataByTypeName");F.subgraphNames.add(i);let U={fieldNames:f,isRootNode:!0,keys:p,typeName:g},K=new Set;for(let ee of p.filter(W=>!W.disableEntityResolver))K.add(ee.selectionSet);let J=this.authorizationDataByParentTypeName.get(t);for(let ee of n.interfaceObjectFieldNames){let W=`${g}.${ee}`,Te=(0,he.getOrThrowError)(r.fieldDataByFieldName,ee,`${t}.fieldDataByFieldName`);(0,he.getValueOrDefault)(this.fieldCoordsByNamedTypeName,Te.namedTypeName,()=>new Set).add(W);let de=J==null?void 0:J.fieldAuthDataByFieldName.get(ee);if(de){let et=(0,he.getValueOrDefault)(this.authorizationDataByParentTypeName,g,()=>(0,ni.newAuthorizationData)(g));(0,ni.upsertFieldAuthorizationData)(et.fieldAuthDataByFieldName,de)||this.invalidORScopesCoords.add(W)}if(_.fieldDataByFieldName.get(ee))continue;let qe=r.isInaccessible||_.isInaccessible||Te.isInaccessible;_.fieldDataByFieldName.set(ee,this.copyFieldData(Te,qe))}o.set(g,U),this.handleInterfaceObjectForInternalGraph({internalSubgraph:a,subgraphName:i,interfaceObjectData:n,interfaceObjectNode:y,resolvableKeyFieldSets:K,entityData:F})}}}}fieldDataToGraphFieldData(t){var n;return{name:t.name,namedTypeName:t.namedTypeName,isLeaf:(0,ni.isNodeLeaf)((n=this.parentDefinitionDataByTypeName.get(t.namedTypeName))==null?void 0:n.kind),subgraphNames:t.subgraphNames}}getValidFlattenedPersistedDirectiveNodeArray(t,n){let r=[];for(let[i,a]of t){let o=this.persistedDirectiveDefinitionByDirectiveName.get(i);if(o){if(a.length<2){r.push(...a);continue}if(!o.repeatable){this.errors.push((0,Fe.invalidRepeatedFederatedDirectiveErrorMessage)(i,n));continue}r.push(...a)}}return r}getRouterPersistedDirectiveNodes(t){let n=[...t.persistedDirectivesData.tagDirectiveByName.values()];return t.persistedDirectivesData.isDeprecated&&n.push((0,ge.generateDeprecatedDirective)(t.persistedDirectivesData.deprecatedReason)),n.push(...this.getValidFlattenedPersistedDirectiveNodeArray(t.persistedDirectivesData.directivesByDirectiveName,t.name)),n}getFederatedGraphNodeDescription(t){if(t.configureDescriptionDataBySubgraphName.size<1)return t.description;let n=[],r="";for(let[i,{propagate:a,description:o}]of t.configureDescriptionDataBySubgraphName)a&&(n.push(i),r=o);if(n.length===1)return(0,dc.getDescriptionFromString)(r);if(n.length<1)return t.description;this.errors.push((0,Fe.configureDescriptionPropagationError)((0,ge.getDefinitionDataCoords)(t,!0),n))}getNodeForRouterSchemaByData(t){return t.node.name=(0,Mr.stringToNameNode)(t.name),t.node.description=this.getFederatedGraphNodeDescription(t),t.node.directives=this.getRouterPersistedDirectiveNodes(t),t.node}getNodeWithPersistedDirectivesByInputValueData(t){return t.node.name=(0,Mr.stringToNameNode)(t.name),t.node.type=t.type,t.node.description=this.getFederatedGraphNodeDescription(t),t.node.directives=this.getRouterPersistedDirectiveNodes(t),t.includeDefaultValue&&(t.node.defaultValue=t.defaultValue),t.node}getValidFieldArgumentNodes(t){let n=[],r=[],i=[],a=`${t.renamedParentTypeName}.${t.name}`;for(let[o,c]of t.argumentDataByArgumentName)t.subgraphNames.size===c.subgraphNames.size?(r.push(o),n.push(this.getNodeWithPersistedDirectivesByInputValueData(c))):(0,ge.isTypeRequired)(c.type)&&i.push({inputValueName:o,missingSubgraphs:(0,he.getEntriesNotInHashSet)(t.subgraphNames,c.subgraphNames),requiredSubgraphs:[...c.requiredSubgraphNames]});return i.length>0?this.errors.push((0,Fe.invalidRequiredInputValueError)(Oe.FIELD,a,i)):r.length>0&&((0,he.getValueOrDefault)(this.fieldConfigurationByFieldCoords,a,()=>({argumentNames:r,fieldName:t.name,typeName:t.renamedParentTypeName})).argumentNames=r),n}getNodeWithPersistedDirectivesByFieldData(t,n){return t.node.arguments=n,t.node.name=(0,Mr.stringToNameNode)(t.name),t.node.type=t.type,t.node.description=this.getFederatedGraphNodeDescription(t),t.node.directives=this.getRouterPersistedDirectiveNodes(t),t.node}pushParentDefinitionDataToDocumentDefinitions(t){for(let[n,r]of this.parentDefinitionDataByTypeName)switch(r.extensionType!==Rq.ExtensionType.NONE&&this.errors.push((0,Fe.noBaseDefinitionForExtensionError)((0,he.kindToTypeString)(r.kind),n)),r.kind){case Re.Kind.ENUM_TYPE_DEFINITION:let i=[],a=[],o=this.getEnumValueMergeMethod(n);(0,ge.propagateAuthDirectives)(r,this.authorizationDataByParentTypeName.get(n));for(let ee of r.enumValueDataByValueName.values()){let W=(0,ge.getNodeForRouterSchemaByData)(ee,this.persistedDirectiveDefinitionByDirectiveName,this.errors),Te=(0,ge.isNodeDataInaccessible)(ee),de=Q(M({},ee.node),{directives:(0,ge.getClientPersistedDirectiveNodes)(ee)});switch(o){case ge.MergeMethod.CONSISTENT:!Te&&r.appearances>ee.appearances&&this.errors.push((0,Fe.incompatibleSharedEnumError)(n)),i.push(W),Te||a.push(de);break;case ge.MergeMethod.INTERSECTION:r.appearances===ee.appearances&&(i.push(W),Te||a.push(de));break;default:i.push(W),Te||a.push(de);break}}if(r.node.values=i,this.routerDefinitions.push(this.getNodeForRouterSchemaByData(r)),(0,ge.isNodeDataInaccessible)(r)){this.validateReferencesOfInaccessibleType(r),this.internalGraph.setNodeInaccessible(r.name);break}if(a.length<1){this.errors.push((0,Fe.allChildDefinitionsAreInaccessibleError)((0,he.kindToTypeString)(r.kind),n,Oe.ENUM_VALUE));break}this.clientDefinitions.push(Q(M({},r.node),{directives:(0,ge.getClientPersistedDirectiveNodes)(r),values:a}));break;case Re.Kind.INPUT_OBJECT_TYPE_DEFINITION:let c=[],l=[],p=[];for(let[ee,W]of r.inputValueDataByValueName)if(r.subgraphNames.size===W.subgraphNames.size){if(l.push(this.getNodeWithPersistedDirectivesByInputValueData(W)),(0,ge.isNodeDataInaccessible)(W))continue;p.push(Q(M({},W.node),{directives:(0,ge.getClientPersistedDirectiveNodes)(W)}))}else(0,ge.isTypeRequired)(W.type)&&c.push({inputValueName:ee,missingSubgraphs:(0,he.getEntriesNotInHashSet)(r.subgraphNames,W.subgraphNames),requiredSubgraphs:[...W.requiredSubgraphNames]});if(c.length>0){this.errors.push((0,Fe.invalidRequiredInputValueError)(Oe.INPUT_OBJECT,n,c,!1));break}if(r.node.fields=l,this.routerDefinitions.push(this.getNodeForRouterSchemaByData(r)),(0,ge.isNodeDataInaccessible)(r)){this.validateReferencesOfInaccessibleType(r);break}if(p.length<1){this.errors.push((0,Fe.allChildDefinitionsAreInaccessibleError)((0,he.kindToTypeString)(r.kind),n,"input field"));break}this.clientDefinitions.push(Q(M({},r.node),{directives:(0,ge.getClientPersistedDirectiveNodes)(r),fields:p}));break;case Re.Kind.INTERFACE_TYPE_DEFINITION:case Re.Kind.OBJECT_TYPE_DEFINITION:let f=[],y=[],g=new Map,_=(0,ge.newInvalidFieldNames)(),F=r.kind===Re.Kind.OBJECT_TYPE_DEFINITION,U=this.authorizationDataByParentTypeName.get(n);(0,ge.propagateAuthDirectives)(r,U);for(let[ee,W]of r.fieldDataByFieldName){(0,ge.propagateFieldAuthDirectives)(W,U);let Te=this.getValidFieldArgumentNodes(W);F&&(0,ge.validateExternalAndShareable)(W,_),f.push(this.getNodeWithPersistedDirectivesByFieldData(W,Te)),!(0,ge.isNodeDataInaccessible)(W)&&(y.push((0,ge.getClientSchemaFieldNodeByFieldData)(W)),g.set(ee,this.fieldDataToGraphFieldData(W)))}if(F&&(_.byShareable.size>0&&this.errors.push((0,Fe.invalidFieldShareabilityError)(r,_.byShareable)),_.subgraphNamesByExternalFieldName.size>0&&this.errors.push((0,Fe.allExternalFieldInstancesError)(n,_.subgraphNamesByExternalFieldName))),r.node.fields=f,this.internalGraph.initializeNode(n,g),r.implementedInterfaceTypeNames.size>0){t.push({data:r,clientSchemaFieldNodes:y});break}this.routerDefinitions.push(this.getNodeForRouterSchemaByData(r));let K=(0,Gce.isNodeQuery)(n);if((0,ge.isNodeDataInaccessible)(r)){if(K){this.errors.push(Fe.inaccessibleQueryRootTypeError);break}this.validateReferencesOfInaccessibleType(r),this.internalGraph.setNodeInaccessible(r.name);break}if(y.length<1){let ee=K?(0,Fe.noQueryRootTypeError)(!1):(0,Fe.allChildDefinitionsAreInaccessibleError)((0,he.kindToTypeString)(r.kind),n,Oe.FIELD);this.errors.push(ee);break}this.clientDefinitions.push(Q(M({},r.node),{directives:(0,ge.getClientPersistedDirectiveNodes)(r),fields:y}));break;case Re.Kind.SCALAR_TYPE_DEFINITION:if(Kn.BASE_SCALARS.has(n))break;if((0,ge.propagateAuthDirectives)(r,this.authorizationDataByParentTypeName.get(n)),this.routerDefinitions.push(this.getNodeForRouterSchemaByData(r)),(0,ge.isNodeDataInaccessible)(r)){this.validateReferencesOfInaccessibleType(r),this.internalGraph.setNodeInaccessible(r.name);break}this.clientDefinitions.push(Q(M({},r.node),{directives:(0,ge.getClientPersistedDirectiveNodes)(r)}));break;case Re.Kind.UNION_TYPE_DEFINITION:if(r.node.types=(0,ni.mapToArrayOfValues)(r.memberByMemberTypeName),this.routerDefinitions.push(this.getNodeForRouterSchemaByData(r)),(0,ge.isNodeDataInaccessible)(r)){this.validateReferencesOfInaccessibleType(r),this.internalGraph.setNodeInaccessible(r.name);break}let J=this.getClientSchemaUnionMembers(r);if(J.length<1){this.errors.push((0,Fe.allChildDefinitionsAreInaccessibleError)(Oe.UNION,n,"union member type"));break}this.clientDefinitions.push(Q(M({},r.node),{directives:(0,ge.getClientPersistedDirectiveNodes)(r),types:J}));break}}pushNamedTypeAuthDataToFields(){var t;for(let[n,r]of this.authorizationDataByParentTypeName){if(!r.requiresAuthentication&&r.requiredScopes.length<1)continue;let i=this.fieldCoordsByNamedTypeName.get(n);if(i)for(let a of i){let o=a.split(Oe.PERIOD);switch(o.length){case 2:{let c=(0,he.getValueOrDefault)(this.authorizationDataByParentTypeName,o[0],()=>(0,ni.newAuthorizationData)(o[0])),l=(0,he.getValueOrDefault)(c.fieldAuthDataByFieldName,o[1],()=>(0,ni.newFieldAuthorizationData)(o[1]));(t=l.inheritedData).requiresAuthentication||(t.requiresAuthentication=r.requiresAuthentication),l.inheritedData.requiredScopes.length*r.requiredScopes.length>Kn.MAX_OR_SCOPES?this.invalidORScopesCoords.add(a):(l.inheritedData.requiredScopesByOR=(0,ni.mergeRequiredScopesByAND)(l.inheritedData.requiredScopesByOR,r.requiredScopesByOR),l.inheritedData.requiredScopes=(0,ni.mergeRequiredScopesByAND)(l.inheritedData.requiredScopes,r.requiredScopes));break}default:break}}}}federateSubgraphData(){this.federateInternalSubgraphData(),this.handleEntityInterfaces(),this.generateTagData(),this.pushVersionTwoDirectiveDefinitionsToDocumentDefinitions(),this.pushNamedTypeAuthDataToFields()}validateInterfaceImplementationsAndPushToDocumentDefinitions(t){for(let{data:n,clientSchemaFieldNodes:r}of t){if(n.node.interfaces=this.getValidImplementedInterfaces(n),this.routerDefinitions.push((0,ge.getNodeForRouterSchemaByData)(n,this.persistedDirectiveDefinitionByDirectiveName,this.errors)),(0,ge.isNodeDataInaccessible)(n)){this.validateReferencesOfInaccessibleType(n),this.internalGraph.setNodeInaccessible(n.name);continue}let i=[];for(let a of n.implementedInterfaceTypeNames)this.inaccessibleCoords.has(a)||i.push((0,Mr.stringToNamedTypeNode)(a));this.clientDefinitions.push(Q(M({},n.node),{directives:(0,ge.getClientPersistedDirectiveNodes)(n),fields:r,interfaces:i}))}}pushVersionTwoDirectiveDefinitionsToDocumentDefinitions(){this.isVersionTwo&&(this.routerDefinitions=[Kn.AUTHENTICATED_DEFINITION,Kn.DEPRECATED_DEFINITION,Kn.INACCESSIBLE_DEFINITION,Kn.REQUIRES_SCOPES_DEFINITION,Kn.TAG_DEFINITION,Kn.SCOPE_SCALAR_DEFINITION],this.clientDefinitions=[Kn.DEPRECATED_DEFINITION])}validatePathSegmentInaccessibility(t){if(!t)return!1;let r=t.split(Oe.LEFT_PARENTHESIS)[0].split(Oe.PERIOD),i=r[0];for(let a=0;a0&&this.errors.push((0,Fe.invalidReferencesOfInaccessibleTypeError)((0,he.kindToTypeString)(t.kind),t.name,r))}validateQueryRootType(){let t=this.parentDefinitionDataByTypeName.get(Oe.QUERY);if(!t||t.kind!==Re.Kind.OBJECT_TYPE_DEFINITION||t.fieldDataByFieldName.size<1){this.errors.push((0,Fe.noQueryRootTypeError)());return}for(let n of t.fieldDataByFieldName.values())if(!(0,ge.isNodeDataInaccessible)(n))return;this.errors.push((0,Fe.noQueryRootTypeError)())}validateSubscriptionFieldConditionFieldPath(t,n,r,i,a){let o=t.split(Oe.PERIOD);if(o.length<1)return a.push((0,Fe.invalidSubscriptionFieldConditionFieldPathErrorMessage)(r,t)),[];let c=n;if(this.inaccessibleCoords.has(c.renamedTypeName))return a.push((0,Fe.inaccessibleSubscriptionFieldConditionFieldPathFieldErrorMessage)(r,t,o[0],c.renamedTypeName)),[];let l="";for(let p=0;p0?`.${f}`:f,c.kind!==Re.Kind.OBJECT_TYPE_DEFINITION)return a.push((0,Fe.invalidSubscriptionFieldConditionFieldPathParentErrorMessage)(r,t,l)),[];let y=c.fieldDataByFieldName.get(f);if(!y)return a.push((0,Fe.undefinedSubscriptionFieldConditionFieldPathFieldErrorMessage)(r,t,l,f,c.renamedTypeName)),[];let g=`${c.renamedTypeName}.${f}`;if(!y.subgraphNames.has(i))return a.push((0,Fe.invalidSubscriptionFieldConditionFieldPathFieldErrorMessage)(r,t,l,g,i)),[];if(this.inaccessibleCoords.has(g))return a.push((0,Fe.inaccessibleSubscriptionFieldConditionFieldPathFieldErrorMessage)(r,t,l,g)),[];if(Kn.BASE_SCALARS.has(y.namedTypeName)){c={kind:Re.Kind.SCALAR_TYPE_DEFINITION,name:y.namedTypeName};continue}c=(0,he.getOrThrowError)(this.parentDefinitionDataByTypeName,y.namedTypeName,Oe.PARENT_DEFINITION_DATA)}return(0,ge.isLeafKind)(c.kind)?o:(a.push((0,Fe.nonLeafSubscriptionFieldConditionFieldPathFinalFieldErrorMessage)(r,t,o[o.length-1],(0,he.kindToTypeString)(c.kind),c.name)),[])}validateSubscriptionFieldCondition(t,n,r,i,a,o,c){if(i>mE.MAX_SUBSCRIPTION_FILTER_DEPTH||this.isMaxDepth)return c.push((0,Fe.subscriptionFilterConditionDepthExceededErrorMessage)(a)),this.isMaxDepth=!0,!1;let l=!1,p=new Set([Oe.FIELD_PATH,Oe.VALUES]),f=new Set,y=new Set,g=[];for(let _ of t.fields){let F=_.name.value,U=a+`.${F}`;switch(F){case Oe.FIELD_PATH:{if(p.has(Oe.FIELD_PATH))p.delete(Oe.FIELD_PATH);else{l=!0,f.add(Oe.FIELD_PATH);break}if(_.value.kind!==Re.Kind.STRING){g.push((0,Fe.invalidInputFieldTypeErrorMessage)(U,Oe.STRING,(0,he.kindToTypeString)(_.value.kind))),l=!0;break}let K=this.validateSubscriptionFieldConditionFieldPath(_.value.value,r,U,o,g);if(K.length<1){l=!0;break}n.fieldPath=K;break}case Oe.VALUES:{if(p.has(Oe.VALUES))p.delete(Oe.VALUES);else{l=!0,f.add(Oe.VALUES);break}let K=_.value.kind;if(K==Re.Kind.NULL||K==Re.Kind.OBJECT){g.push((0,Fe.invalidInputFieldTypeErrorMessage)(U,Oe.LIST,(0,he.kindToTypeString)(_.value.kind))),l=!0;break}if(K!==Re.Kind.LIST){n.values=[(0,ge.getSubscriptionFilterValue)(_.value)];break}let J=new Set,ee=[];for(let W=0;W<_.value.values.length;W++){let Te=_.value.values[W];if(Te.kind===Re.Kind.OBJECT||Te.kind===Re.Kind.LIST){l=!0,ee.push(W);continue}J.add((0,ge.getSubscriptionFilterValue)(Te))}if(ee.length>0){g.push((0,Fe.subscriptionFieldConditionInvalidValuesArrayErrorMessage)(U,ee));continue}if(J.size<1){l=!0,g.push((0,Fe.subscriptionFieldConditionEmptyValuesArrayErrorMessage)(U));continue}n.values=[...J];break}default:l=!0,y.add(F)}}return l?(c.push((0,Fe.subscriptionFieldConditionInvalidInputFieldErrorMessage)(a,[...p],[...f],[...y],g)),!1):!0}validateSubscriptionFilterCondition(t,n,r,i,a,o,c){if(i>mE.MAX_SUBSCRIPTION_FILTER_DEPTH||this.isMaxDepth)return c.push((0,Fe.subscriptionFilterConditionDepthExceededErrorMessage)(a)),this.isMaxDepth=!0,!1;if(i+=1,t.fields.length!==1)return c.push((0,Fe.subscriptionFilterConditionInvalidInputFieldNumberErrorMessage)(a,t.fields.length)),!1;let l=t.fields[0],p=l.name.value;if(!Aq.SUBSCRIPTION_FILTER_INPUT_NAMES.has(p))return c.push((0,Fe.subscriptionFilterConditionInvalidInputFieldErrorMessage)(a,p)),!1;let f=a+`.${p}`;switch(l.value.kind){case Re.Kind.OBJECT:switch(p){case Oe.IN_UPPER:return n.in={fieldPath:[],values:[]},this.validateSubscriptionFieldCondition(l.value,n.in,r,i,a+".IN",o,c);case Oe.NOT_UPPER:return n.not={},this.validateSubscriptionFilterCondition(l.value,n.not,r,i,a+".NOT",o,c);default:return c.push((0,Fe.subscriptionFilterConditionInvalidInputFieldTypeErrorMessage)(f,Oe.LIST,Oe.OBJECT)),!1}case Re.Kind.LIST:{let y=[];switch(p){case Oe.AND_UPPER:{n.and=y;break}case Oe.OR_UPPER:{n.or=y;break}default:return c.push((0,Fe.subscriptionFilterConditionInvalidInputFieldTypeErrorMessage)(f,Oe.OBJECT,Oe.LIST)),!1}let g=l.value.values.length;if(g<1||g>5)return c.push((0,Fe.subscriptionFilterArrayConditionInvalidLengthErrorMessage)(f,g)),!1;let _=!0,F=[];for(let U=0;U0?(c.push((0,Fe.subscriptionFilterArrayConditionInvalidItemTypeErrorMessage)(f,F)),!1):_}default:{let y=Aq.SUBSCRIPTION_FILTER_LIST_INPUT_NAMES.has(p)?Oe.LIST:Oe.OBJECT;return c.push((0,Fe.subscriptionFilterConditionInvalidInputFieldTypeErrorMessage)(f,y,(0,he.kindToTypeString)(l.value.kind))),!1}}}validateSubscriptionFilterAndGenerateConfiguration(t,n,r,i,a,o){if(!t.arguments||t.arguments.length!==1)return;let c=t.arguments[0];if(c.value.kind!==Re.Kind.OBJECT){this.errors.push((0,Fe.invalidSubscriptionFilterDirectiveError)(r,[(0,Fe.subscriptionFilterConditionInvalidInputFieldTypeErrorMessage)(Oe.CONDITION,Oe.OBJECT,(0,he.kindToTypeString)(c.value.kind))]));return}let l={},p=[];if(!this.validateSubscriptionFilterCondition(c.value,l,n,0,Oe.CONDITION,o,p)){this.errors.push((0,Fe.invalidSubscriptionFilterDirectiveError)(r,p)),this.isMaxDepth=!1;return}(0,he.getValueOrDefault)(this.fieldConfigurationByFieldCoords,r,()=>({argumentNames:[],fieldName:i,typeName:a})).subscriptionFilterCondition=l}validateSubscriptionFiltersAndGenerateConfiguration(){for(let[t,n]of this.subscriptionFilterDataByFieldPath){if(this.inaccessibleCoords.has(t))continue;let r=this.parentDefinitionDataByTypeName.get(n.fieldData.namedTypeName);if(!r){this.errors.push((0,Fe.invalidSubscriptionFilterDirectiveError)(t,[(0,Fe.subscriptionFilterNamedTypeErrorMessage)(n.fieldData.namedTypeName)]));continue}(0,ge.isNodeDataInaccessible)(r)||r.kind===Re.Kind.OBJECT_TYPE_DEFINITION&&this.validateSubscriptionFilterAndGenerateConfiguration(n.directive,r,t,n.fieldData.name,n.fieldData.renamedParentTypeName,n.directiveSubgraphName)}}buildFederationResult(){this.subscriptionFilterDataByFieldPath.size>0&&this.validateSubscriptionFiltersAndGenerateConfiguration(),this.invalidORScopesCoords.size>0&&this.errors.push((0,Fe.orScopesLimitError)(Kn.MAX_OR_SCOPES,[...this.invalidORScopesCoords]));for(let a of this.potentialPersistedDirectiveDefinitionDataByDirectiveName.values())(0,ge.addValidPersistedDirectiveDefinitionNodeByData)(this.routerDefinitions,a,this.persistedDirectiveDefinitionByDirectiveName,this.errors);let t=[];this.pushParentDefinitionDataToDocumentDefinitions(t),this.validateInterfaceImplementationsAndPushToDocumentDefinitions(t),this.validateQueryRootType();for(let a of this.inaccessibleRequiredInputValueErrorByCoords.values())this.errors.push(a);if(this.errors.length>0)return{errors:this.errors,success:!1,warnings:this.warnings};if(this.internalSubgraphBySubgraphName.size>1){let a=this.internalGraph.validate();if(a.length>0)return{errors:a,success:!1,warnings:this.warnings}}if(this.errors.length>0)return{errors:this.errors,success:!1,warnings:this.warnings};let n={kind:Re.Kind.DOCUMENT,definitions:this.routerDefinitions},r=(0,Re.buildASTSchema)({kind:Re.Kind.DOCUMENT,definitions:this.clientDefinitions},{assumeValid:!0,assumeValidSDL:!0}),i=new Map;for(let a of this.internalSubgraphBySubgraphName.values())i.set(a.name,{configurationDataByTypeName:a.configurationDataByTypeName,parentDefinitionDataByTypeName:a.parentDefinitionDataByTypeName,schema:a.schema});for(let a of this.authorizationDataByParentTypeName.values())(0,ni.upsertAuthorizationConfiguration)(this.fieldConfigurationByFieldCoords,a);return M({fieldConfigurations:Array.from(this.fieldConfigurationByFieldCoords.values()),subgraphConfigBySubgraphName:i,federatedGraphAST:n,federatedGraphSchema:(0,Re.buildASTSchema)(n,{assumeValid:!0,assumeValidSDL:!0}),federatedGraphClientSchema:r,parentDefinitionDataByTypeName:this.parentDefinitionDataByTypeName,success:!0,warnings:this.warnings},this.getClientSchemaObjectBoolean())}getClientSchemaObjectBoolean(){return this.inaccessibleCoords.size<1&&this.tagNamesByCoords.size<1?{}:{shouldIncludeClientSchema:!0}}handleChildTagExclusions(t,n,r,i){let a=n.size;for(let[o,c]of r){let l=(0,he.getOrThrowError)(n,o,`${t.name}.childDataByChildName`);if((0,ge.isNodeDataInaccessible)(l)){a-=1;continue}i.isDisjointFrom(c.tagNames)||((0,he.getValueOrDefault)(l.persistedDirectivesData.directivesByDirectiveName,Oe.INACCESSIBLE,()=>[(0,he.generateSimpleDirective)(Oe.INACCESSIBLE)]),this.inaccessibleCoords.add(`${t.name}.${o}`),a-=1)}a<1&&(t.persistedDirectivesData.directivesByDirectiveName.set(Oe.INACCESSIBLE,[(0,he.generateSimpleDirective)(Oe.INACCESSIBLE)]),this.inaccessibleCoords.add(t.name))}handleChildTagInclusions(t,n,r,i){let a=n.size;for(let[o,c]of n){if((0,ge.isNodeDataInaccessible)(c)){a-=1;continue}let l=r.get(o);(!l||i.isDisjointFrom(l.tagNames))&&((0,he.getValueOrDefault)(c.persistedDirectivesData.directivesByDirectiveName,Oe.INACCESSIBLE,()=>[(0,he.generateSimpleDirective)(Oe.INACCESSIBLE)]),this.inaccessibleCoords.add(`${t.name}.${o}`),a-=1)}a<1&&(t.persistedDirectivesData.directivesByDirectiveName.set(Oe.INACCESSIBLE,[(0,he.generateSimpleDirective)(Oe.INACCESSIBLE)]),this.inaccessibleCoords.add(t.name))}buildFederationContractResult(t){if(this.isVersionTwo||this.routerDefinitions.push(Kn.INACCESSIBLE_DEFINITION),t.tagNamesToExclude.size>0)for(let[o,c]of this.parentTagDataByTypeName){let l=(0,he.getOrThrowError)(this.parentDefinitionDataByTypeName,o,Oe.PARENT_DEFINITION_DATA);if(!(0,ge.isNodeDataInaccessible)(l)){if(!t.tagNamesToExclude.isDisjointFrom(c.tagNames)){l.persistedDirectivesData.directivesByDirectiveName.set(Oe.INACCESSIBLE,[(0,he.generateSimpleDirective)(Oe.INACCESSIBLE)]),this.inaccessibleCoords.add(o);continue}if(!(c.childTagDataByChildName.size<1))switch(l.kind){case Re.Kind.SCALAR_TYPE_DEFINITION:case Re.Kind.UNION_TYPE_DEFINITION:continue;case Re.Kind.ENUM_TYPE_DEFINITION:this.handleChildTagExclusions(l,l.enumValueDataByValueName,c.childTagDataByChildName,t.tagNamesToExclude);break;case Re.Kind.INPUT_OBJECT_TYPE_DEFINITION:this.handleChildTagExclusions(l,l.inputValueDataByValueName,c.childTagDataByChildName,t.tagNamesToExclude);break;default:let p=l.fieldDataByFieldName.size;for(let[f,y]of c.childTagDataByChildName){let g=(0,he.getOrThrowError)(l.fieldDataByFieldName,f,`${o}.fieldDataByFieldName`);if((0,ge.isNodeDataInaccessible)(g)){p-=1;continue}if(!t.tagNamesToExclude.isDisjointFrom(y.tagNames)){(0,he.getValueOrDefault)(g.persistedDirectivesData.directivesByDirectiveName,Oe.INACCESSIBLE,()=>[(0,he.generateSimpleDirective)(Oe.INACCESSIBLE)]),this.inaccessibleCoords.add(g.federatedCoords),p-=1;continue}for(let[_,F]of y.tagNamesByArgumentName){let U=(0,he.getOrThrowError)(g.argumentDataByArgumentName,_,`${f}.argumentDataByArgumentName`);(0,ge.isNodeDataInaccessible)(U)||F.isDisjointFrom(F)||((0,he.getValueOrDefault)(U.persistedDirectivesData.directivesByDirectiveName,Oe.INACCESSIBLE,()=>[(0,he.generateSimpleDirective)(Oe.INACCESSIBLE)]),this.inaccessibleCoords.add(U.federatedCoords))}}p<1&&(l.persistedDirectivesData.directivesByDirectiveName.set(Oe.INACCESSIBLE,[(0,he.generateSimpleDirective)(Oe.INACCESSIBLE)]),this.inaccessibleCoords.add(o))}}}else if(t.tagNamesToInclude.size>0)for(let[o,c]of this.parentDefinitionDataByTypeName){if((0,ge.isNodeDataInaccessible)(c))continue;let l=this.parentTagDataByTypeName.get(o);if(!l){c.persistedDirectivesData.directivesByDirectiveName.set(Oe.INACCESSIBLE,[(0,he.generateSimpleDirective)(Oe.INACCESSIBLE)]),this.inaccessibleCoords.add(o);continue}if(t.tagNamesToInclude.isDisjointFrom(l.tagNames)){if(l.childTagDataByChildName.size<1){c.persistedDirectivesData.directivesByDirectiveName.set(Oe.INACCESSIBLE,[(0,he.generateSimpleDirective)(Oe.INACCESSIBLE)]),this.inaccessibleCoords.add(o);continue}switch(c.kind){case Re.Kind.SCALAR_TYPE_DEFINITION:case Re.Kind.UNION_TYPE_DEFINITION:continue;case Re.Kind.ENUM_TYPE_DEFINITION:this.handleChildTagInclusions(c,c.enumValueDataByValueName,l.childTagDataByChildName,t.tagNamesToInclude);break;case Re.Kind.INPUT_OBJECT_TYPE_DEFINITION:this.handleChildTagInclusions(c,c.inputValueDataByValueName,l.childTagDataByChildName,t.tagNamesToInclude);break;default:let p=c.fieldDataByFieldName.size;for(let[f,y]of c.fieldDataByFieldName){if((0,ge.isNodeDataInaccessible)(y)){p-=1;continue}let g=l.childTagDataByChildName.get(f);(!g||t.tagNamesToInclude.isDisjointFrom(g.tagNames))&&((0,he.getValueOrDefault)(y.persistedDirectivesData.directivesByDirectiveName,Oe.INACCESSIBLE,()=>[(0,he.generateSimpleDirective)(Oe.INACCESSIBLE)]),this.inaccessibleCoords.add(y.federatedCoords),p-=1)}p<1&&(c.persistedDirectivesData.directivesByDirectiveName.set(Oe.INACCESSIBLE,[(0,he.generateSimpleDirective)(Oe.INACCESSIBLE)]),this.inaccessibleCoords.add(o))}}}this.subscriptionFilterDataByFieldPath.size>0&&this.validateSubscriptionFiltersAndGenerateConfiguration();for(let o of this.potentialPersistedDirectiveDefinitionDataByDirectiveName.values())(0,ge.addValidPersistedDirectiveDefinitionNodeByData)(this.routerDefinitions,o,this.persistedDirectiveDefinitionByDirectiveName,this.errors);let n=[];if(this.pushParentDefinitionDataToDocumentDefinitions(n),this.validateInterfaceImplementationsAndPushToDocumentDefinitions(n),this.validateQueryRootType(),this.errors.length>0)return{errors:this.errors,success:!1,warnings:this.warnings};let r={kind:Re.Kind.DOCUMENT,definitions:this.routerDefinitions},i=(0,Re.buildASTSchema)({kind:Re.Kind.DOCUMENT,definitions:this.clientDefinitions},{assumeValid:!0,assumeValidSDL:!0}),a=new Map;for(let o of this.internalSubgraphBySubgraphName.values())a.set(o.name,{configurationDataByTypeName:o.configurationDataByTypeName,parentDefinitionDataByTypeName:o.parentDefinitionDataByTypeName,schema:o.schema});for(let o of this.authorizationDataByParentTypeName.values())(0,ni.upsertAuthorizationConfiguration)(this.fieldConfigurationByFieldCoords,o);return M({fieldConfigurations:Array.from(this.fieldConfigurationByFieldCoords.values()),subgraphConfigBySubgraphName:a,federatedGraphAST:r,federatedGraphSchema:(0,Re.buildASTSchema)(r,{assumeValid:!0,assumeValidSDL:!0}),federatedGraphClientSchema:i,parentDefinitionDataByTypeName:this.parentDefinitionDataByTypeName,success:!0,warnings:this.warnings},this.getClientSchemaObjectBoolean())}federateSubgraphsInternal(){return this.federateSubgraphData(),this.buildFederationResult()}};pc.FederationFactory=NE;function xO(e){if(e.length<1)return{errors:[Fe.minimumSubgraphRequirementError],success:!1,warnings:[]};let t=(0,Kce.batchNormalize)(e);if(!t.success)return{errors:t.errors,success:!1,warnings:t.warnings};let n=new Map,r=new Map;for(let[a,o]of t.internalSubgraphBySubgraphName)for(let[c,l]of o.entityInterfaces){let p=n.get(c);if(!p){n.set(c,(0,ni.newEntityInterfaceFederationData)(l,a));continue}(0,ni.upsertEntityInterfaceFederationData)(p,l,a)}let i=[];for(let[a,o]of n){let c=o.concreteTypeNames.size;for(let[l,p]of o.subgraphDataByTypeName){if(!p.isInterfaceObject){p.resolvable&&p.concreteTypeNames.size!==c&&(0,he.getValueOrDefault)(r,a,()=>[]).push({subgraphName:l,concreteTypeNames:p.concreteTypeNames});continue}let f=(0,he.getOrThrowError)(t.internalSubgraphBySubgraphName,l,"internalSubgraphBySubgraphName").parentDefinitionDataByTypeName,y=[];for(let g of o.concreteTypeNames)f.has(g)&&y.push(g);y.length>0&&i.push((0,Fe.invalidInterfaceObjectImplementationDefinitionsError)(a,l,y))}}return r.size>0&&i.push((0,Fe.undefinedEntityInterfaceImplementationsError)(r,n)),i.length>0?{errors:i,success:!1,warnings:t.warnings}:{federationFactory:new NE({authorizationDataByParentTypeName:t.authorizationDataByParentTypeName,concreteTypeNamesByAbstractTypeName:t.concreteTypeNamesByAbstractTypeName,entityDataByTypeName:t.entityDataByTypeName,entityInterfaceFederationDataByTypeName:n,fieldCoordsByNamedTypeName:t.fieldCoordsByNamedTypeName,internalSubgraphBySubgraphName:t.internalSubgraphBySubgraphName,internalGraph:t.internalGraph,warnings:t.warnings}),success:!0,warnings:t.warnings}}function Qce(e){let t=xO(e);return t.success?t.federationFactory.federateSubgraphsInternal():{errors:t.errors,success:!1,warnings:t.warnings}}function Yce(e,t){let n=xO(e);if(!n.success)return{errors:n.errors,success:!1,warnings:n.warnings};n.federationFactory.federateSubgraphData();let r=[(0,Fq.cloneDeep)(n.federationFactory)],i=n.federationFactory.buildFederationResult();if(!i.success)return{errors:i.errors,success:!1,warnings:i.warnings};let a=t.size-1,o=new Map,c=0;for(let[l,p]of t){c!==a&&r.push((0,Fq.cloneDeep)(r[c]));let f=r[c].buildFederationContractResult(p);o.set(l,f),c++}return Q(M({},i),{federationResultByContractName:o})}function Jce(e,t){let n=xO(e);return n.success?(n.federationFactory.federateSubgraphData(),n.federationFactory.buildFederationContractResult(t)):{errors:n.errors,success:!1,warnings:n.warnings}}});var TE=w(Os=>{"use strict";m();T();N();Object.defineProperty(Os,"__esModule",{value:!0});Os.LATEST_ROUTER_COMPATIBILITY_VERSION=Os.ROUTER_COMPATIBILITY_VERSIONS=Os.ROUTER_COMPATIBILITY_VERSION_ONE=void 0;Os.ROUTER_COMPATIBILITY_VERSION_ONE="1";Os.ROUTER_COMPATIBILITY_VERSIONS=new Set([Os.ROUTER_COMPATIBILITY_VERSION_ONE]);Os.LATEST_ROUTER_COMPATIBILITY_VERSION="1"});var wq=w(Bp=>{"use strict";m();T();N();Object.defineProperty(Bp,"__esModule",{value:!0});Bp.federateSubgraphs=Hce;Bp.federateSubgraphsWithContracts=zce;Bp.federateSubgraphsContract=Wce;var qO=Pq(),VO=TE();function Hce(e,t=VO.ROUTER_COMPATIBILITY_VERSION_ONE){switch(t){default:return(0,qO.federateSubgraphs)(e)}}function zce(e,t,n=VO.ROUTER_COMPATIBILITY_VERSION_ONE){switch(n){default:return(0,qO.federateSubgraphsWithContracts)(e,t)}}function Wce(e,t,n=VO.ROUTER_COMPATIBILITY_VERSION_ONE){switch(n){default:return(0,qO.federateSubgraphsContract)(e,t)}}});var Cq=w(Lq=>{"use strict";m();T();N();Object.defineProperty(Lq,"__esModule",{value:!0})});var Bq=w(Up=>{"use strict";m();T();N();Object.defineProperty(Up,"__esModule",{value:!0});Up.normalizeSubgraphFromString=Xce;Up.normalizeSubgraph=Zce;Up.batchNormalize=ele;var jO=BO(),KO=TE();function Xce(e,t=!0,n=KO.ROUTER_COMPATIBILITY_VERSION_ONE){switch(n){default:return(0,jO.normalizeSubgraphFromString)(e,t)}}function Zce(e,t,n,r=KO.ROUTER_COMPATIBILITY_VERSION_ONE){switch(r){default:return(0,jO.normalizeSubgraph)(e,t,n)}}function ele(e,t=KO.ROUTER_COMPATIBILITY_VERSION_ONE){switch(t){default:return(0,jO.batchNormalize)(e)}}});var kq=w(Uq=>{"use strict";m();T();N();Object.defineProperty(Uq,"__esModule",{value:!0})});var xq=w(Mq=>{"use strict";m();T();N();Object.defineProperty(Mq,"__esModule",{value:!0})});var Vq=w(qq=>{"use strict";m();T();N();Object.defineProperty(qq,"__esModule",{value:!0})});var jq=w(EE=>{"use strict";m();T();N();Object.defineProperty(EE,"__esModule",{value:!0});EE.COMPOSITION_VERSION=void 0;EE.COMPOSITION_VERSION="{{$COMPOSITION__VERSION}}"});var Gq=w(Kq=>{"use strict";m();T();N();Object.defineProperty(Kq,"__esModule",{value:!0})});var Qq=w($q=>{"use strict";m();T();N();Object.defineProperty($q,"__esModule",{value:!0})});var hE=w(Tt=>{"use strict";m();T();N();var tle=Tt&&Tt.__createBinding||(Object.create?function(e,t,n,r){r===void 0&&(r=n);var i=Object.getOwnPropertyDescriptor(t,n);(!i||("get"in i?!t.__esModule:i.writable||i.configurable))&&(i={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,i)}:function(e,t,n,r){r===void 0&&(r=n),e[r]=t[n]}),wt=Tt&&Tt.__exportStar||function(e,t){for(var n in e)n!=="default"&&!Object.prototype.hasOwnProperty.call(t,n)&&tle(t,e,n)};Object.defineProperty(Tt,"__esModule",{value:!0});wt(Jr(),Tt);wt(J_(),Tt);wt(sa(),Tt);wt(JL(),Tt);wt(wq(),Tt);wt(Cq(),Tt);wt(Bq(),Tt);wt(kq(),Tt);wt(wO(),Tt);wt(bO(),Tt);wt(RO(),Tt);wt(TE(),Tt);wt(xq(),Tt);wt(LO(),Tt);wt(Ho(),Tt);wt(Ap(),Tt);wt(Fp(),Tt);wt(Vq(),Tt);wt(jq(),Tt);wt(lr(),Tt);wt(Gq(),Tt);wt(Hr(),Tt);wt(NO(),Tt);wt(yN(),Tt);wt(MO(),Tt);wt(lO(),Tt);wt(bp(),Tt);wt(Qq(),Tt);wt(_O(),Tt);wt(pE(),Tt);wt(fO(),Tt);wt(hs(),Tt);wt(cp(),Tt);wt(rp(),Tt);wt(nE(),Tt)});var Jle={};Gf(Jle,{buildRouterConfiguration:()=>Yle,federateSubgraphs:()=>Qle});m();T();N();var hc=os(hE());m();T();N();m();T();N();function GO(e){if(!e)return e;if(!URL.canParse(e))throw new Error("Invalid URL");let t=e.indexOf("?"),n=e.indexOf("#"),r=e;return t>0?r=r.slice(0,n>0?Math.min(t,n):t):n>0&&(r=r.slice(0,n)),r}m();T();N();m();T();N();var Yq={};m();T();N();function Jq(e){return e!=null}m();T();N();m();T();N();var Zq=os(Ae(),1);m();T();N();var Hq;if(typeof AggregateError=="undefined"){class e extends Error{constructor(n,r=""){super(r),this.errors=n,this.name="AggregateError",Error.captureStackTrace(this,e)}}Hq=function(t,n){return new e(t,n)}}else Hq=AggregateError;function zq(e){return"errors"in e&&Array.isArray(e.errors)}var eV=3;function tV(e){return yE(e,[])}function yE(e,t){switch(typeof e){case"string":return JSON.stringify(e);case"function":return e.name?`[function ${e.name}]`:"[function]";case"object":return nle(e,t);default:return String(e)}}function Wq(e){return e instanceof Zq.GraphQLError?e.toString():`${e.name}: ${e.message}; + ${e.stack}`}function nle(e,t){if(e===null)return"null";if(e instanceof Error)return zq(e)?Wq(e)+` +`+Xq(e.errors,t):Wq(e);if(t.includes(e))return"[Circular]";let n=[...t,e];if(rle(e)){let r=e.toJSON();if(r!==e)return typeof r=="string"?r:yE(r,n)}else if(Array.isArray(e))return Xq(e,n);return ile(e,n)}function rle(e){return typeof e.toJSON=="function"}function ile(e,t){let n=Object.entries(e);return n.length===0?"{}":t.length>eV?"["+ale(e)+"]":"{ "+n.map(([i,a])=>i+": "+yE(a,t)).join(", ")+" }"}function Xq(e,t){if(e.length===0)return"[]";if(t.length>eV)return"[Array]";let n=e.length,r=[];for(let i=0;in==null?n:n[r],e==null?void 0:e.extensions)}m();T();N();var Pe=os(Ae(),1);m();T();N();var Qa=os(Ae(),1);function Ya(e){if((0,Qa.isNonNullType)(e)){let t=Ya(e.ofType);if(t.kind===Qa.Kind.NON_NULL_TYPE)throw new Error(`Invalid type node ${tV(e)}. Inner type of non-null type cannot be a non-null type.`);return{kind:Qa.Kind.NON_NULL_TYPE,type:t}}else if((0,Qa.isListType)(e))return{kind:Qa.Kind.LIST_TYPE,type:Ya(e.ofType)};return{kind:Qa.Kind.NAMED_TYPE,name:{kind:Qa.Kind.NAME,value:e.name}}}m();T();N();var Ja=os(Ae(),1);function gE(e){if(e===null)return{kind:Ja.Kind.NULL};if(e===void 0)return null;if(Array.isArray(e)){let t=[];for(let n of e){let r=gE(n);r!=null&&t.push(r)}return{kind:Ja.Kind.LIST,values:t}}if(typeof e=="object"){let t=[];for(let n in e){let r=e[n],i=gE(r);i&&t.push({kind:Ja.Kind.OBJECT_FIELD,name:{kind:Ja.Kind.NAME,value:n},value:i})}return{kind:Ja.Kind.OBJECT,fields:t}}if(typeof e=="boolean")return{kind:Ja.Kind.BOOLEAN,value:e};if(typeof e=="number"&&isFinite(e)){let t=String(e);return sle.test(t)?{kind:Ja.Kind.INT,value:t}:{kind:Ja.Kind.FLOAT,value:t}}if(typeof e=="string")return{kind:Ja.Kind.STRING,value:e};throw new TypeError(`Cannot convert value to AST: ${e}.`)}var sle=/^-?(?:0|[1-9][0-9]*)$/;m();T();N();m();T();N();function _E(e){let t=new WeakMap;return function(r){let i=t.get(r);if(i===void 0){let a=e(r);return t.set(r,a),a}return i}}var hUe=_E(function(t){let n=ole(t);return new Set([...n].map(r=>r.name))}),ole=_E(function(t){let n=$O(t);return new Set(n.values())}),$O=_E(function(t){let n=new Map,r=t.getQueryType();r&&n.set("query",r);let i=t.getMutationType();i&&n.set("mutation",i);let a=t.getSubscriptionType();return a&&n.set("subscription",a),n});function ule(e,t={}){let n=t.pathToDirectivesInExtensions,r=e.getTypeMap(),i=cle(e,n),a=i!=null?[i]:[],o=e.getDirectives();for(let c of o)(0,Pe.isSpecifiedDirective)(c)||a.push(lle(c,e,n));for(let c in r){let l=r[c],p=(0,Pe.isSpecifiedScalarType)(l),f=(0,Pe.isIntrospectionType)(l);if(!(p||f))if((0,Pe.isObjectType)(l))a.push(dle(l,e,n));else if((0,Pe.isInterfaceType)(l))a.push(ple(l,e,n));else if((0,Pe.isUnionType)(l))a.push(fle(l,e,n));else if((0,Pe.isInputObjectType)(l))a.push(mle(l,e,n));else if((0,Pe.isEnumType)(l))a.push(Nle(l,e,n));else if((0,Pe.isScalarType)(l))a.push(Tle(l,e,n));else throw new Error(`Unknown type ${l}.`)}return{kind:Pe.Kind.DOCUMENT,definitions:a}}function nV(e,t={}){let n=ule(e,t);return(0,Pe.print)(n)}function cle(e,t){var n,r;let i=new Map([["query",void 0],["mutation",void 0],["subscription",void 0]]),a=[];if(e.astNode!=null&&a.push(e.astNode),e.extensionASTNodes!=null)for(let f of e.extensionASTNodes)a.push(f);for(let f of a)if(f.operationTypes)for(let y of f.operationTypes)i.set(y.operation,y);let o=$O(e);for(let[f,y]of i){let g=o.get(f);if(g!=null){let _=Ya(g);y!=null?y.type=_:i.set(f,{kind:Pe.Kind.OPERATION_TYPE_DEFINITION,operation:f,type:_})}}let c=[...i.values()].filter(Jq),l=Cl(e,e,t);if(!c.length&&!l.length)return null;let p={kind:c!=null?Pe.Kind.SCHEMA_DEFINITION:Pe.Kind.SCHEMA_EXTENSION,operationTypes:c,directives:l};return p.description=((r=(n=e.astNode)===null||n===void 0?void 0:n.description)!==null&&r!==void 0?r:e.description!=null)?{kind:Pe.Kind.STRING,value:e.description,block:!0}:void 0,p}function lle(e,t,n){var r,i,a,o;return{kind:Pe.Kind.DIRECTIVE_DEFINITION,description:(i=(r=e.astNode)===null||r===void 0?void 0:r.description)!==null&&i!==void 0?i:e.description?{kind:Pe.Kind.STRING,value:e.description}:void 0,name:{kind:Pe.Kind.NAME,value:e.name},arguments:(a=e.args)===null||a===void 0?void 0:a.map(c=>rV(c,t,n)),repeatable:e.isRepeatable,locations:((o=e.locations)===null||o===void 0?void 0:o.map(c=>({kind:Pe.Kind.NAME,value:c})))||[]}}function Cl(e,t,n){let r=IE(e,n),i=[];e.astNode!=null&&i.push(e.astNode),"extensionASTNodes"in e&&e.extensionASTNodes!=null&&(i=i.concat(e.extensionASTNodes));let a;if(r!=null)a=QO(t,r);else{a=[];for(let o of i)o.directives&&a.push(...o.directives)}return a}function SE(e,t,n){var r,i;let a=[],o=null,c=IE(e,n),l;return c!=null?l=QO(t,c):l=(r=e.astNode)===null||r===void 0?void 0:r.directives,l!=null&&(a=l.filter(p=>p.name.value!=="deprecated"),e.deprecationReason!=null&&(o=(i=l.filter(p=>p.name.value==="deprecated"))===null||i===void 0?void 0:i[0])),e.deprecationReason!=null&&o==null&&(o=yle(e.deprecationReason)),o==null?a:[o].concat(a)}function rV(e,t,n){var r,i,a;return{kind:Pe.Kind.INPUT_VALUE_DEFINITION,description:(i=(r=e.astNode)===null||r===void 0?void 0:r.description)!==null&&i!==void 0?i:e.description?{kind:Pe.Kind.STRING,value:e.description,block:!0}:void 0,name:{kind:Pe.Kind.NAME,value:e.name},type:Ya(e.type),defaultValue:e.defaultValue!==void 0&&(a=(0,Pe.astFromValue)(e.defaultValue,e.type))!==null&&a!==void 0?a:void 0,directives:SE(e,t,n)}}function dle(e,t,n){var r,i;return{kind:Pe.Kind.OBJECT_TYPE_DEFINITION,description:(i=(r=e.astNode)===null||r===void 0?void 0:r.description)!==null&&i!==void 0?i:e.description?{kind:Pe.Kind.STRING,value:e.description,block:!0}:void 0,name:{kind:Pe.Kind.NAME,value:e.name},fields:Object.values(e.getFields()).map(a=>iV(a,t,n)),interfaces:Object.values(e.getInterfaces()).map(a=>Ya(a)),directives:Cl(e,t,n)}}function ple(e,t,n){var r,i;let a={kind:Pe.Kind.INTERFACE_TYPE_DEFINITION,description:(i=(r=e.astNode)===null||r===void 0?void 0:r.description)!==null&&i!==void 0?i:e.description?{kind:Pe.Kind.STRING,value:e.description,block:!0}:void 0,name:{kind:Pe.Kind.NAME,value:e.name},fields:Object.values(e.getFields()).map(o=>iV(o,t,n)),directives:Cl(e,t,n)};return"getInterfaces"in e&&(a.interfaces=Object.values(e.getInterfaces()).map(o=>Ya(o))),a}function fle(e,t,n){var r,i;return{kind:Pe.Kind.UNION_TYPE_DEFINITION,description:(i=(r=e.astNode)===null||r===void 0?void 0:r.description)!==null&&i!==void 0?i:e.description?{kind:Pe.Kind.STRING,value:e.description,block:!0}:void 0,name:{kind:Pe.Kind.NAME,value:e.name},directives:Cl(e,t,n),types:e.getTypes().map(a=>Ya(a))}}function mle(e,t,n){var r,i;return{kind:Pe.Kind.INPUT_OBJECT_TYPE_DEFINITION,description:(i=(r=e.astNode)===null||r===void 0?void 0:r.description)!==null&&i!==void 0?i:e.description?{kind:Pe.Kind.STRING,value:e.description,block:!0}:void 0,name:{kind:Pe.Kind.NAME,value:e.name},fields:Object.values(e.getFields()).map(a=>Ele(a,t,n)),directives:Cl(e,t,n)}}function Nle(e,t,n){var r,i;return{kind:Pe.Kind.ENUM_TYPE_DEFINITION,description:(i=(r=e.astNode)===null||r===void 0?void 0:r.description)!==null&&i!==void 0?i:e.description?{kind:Pe.Kind.STRING,value:e.description,block:!0}:void 0,name:{kind:Pe.Kind.NAME,value:e.name},values:Object.values(e.getValues()).map(a=>hle(a,t,n)),directives:Cl(e,t,n)}}function Tle(e,t,n){var r,i,a;let o=IE(e,n),c=o?QO(t,o):((r=e.astNode)===null||r===void 0?void 0:r.directives)||[],l=e.specifiedByUrl||e.specifiedByURL;if(l&&!c.some(p=>p.name.value==="specifiedBy")){let p={url:l};c.push(vE("specifiedBy",p))}return{kind:Pe.Kind.SCALAR_TYPE_DEFINITION,description:(a=(i=e.astNode)===null||i===void 0?void 0:i.description)!==null&&a!==void 0?a:e.description?{kind:Pe.Kind.STRING,value:e.description,block:!0}:void 0,name:{kind:Pe.Kind.NAME,value:e.name},directives:c}}function iV(e,t,n){var r,i;return{kind:Pe.Kind.FIELD_DEFINITION,description:(i=(r=e.astNode)===null||r===void 0?void 0:r.description)!==null&&i!==void 0?i:e.description?{kind:Pe.Kind.STRING,value:e.description,block:!0}:void 0,name:{kind:Pe.Kind.NAME,value:e.name},arguments:e.args.map(a=>rV(a,t,n)),type:Ya(e.type),directives:SE(e,t,n)}}function Ele(e,t,n){var r,i,a;return{kind:Pe.Kind.INPUT_VALUE_DEFINITION,description:(i=(r=e.astNode)===null||r===void 0?void 0:r.description)!==null&&i!==void 0?i:e.description?{kind:Pe.Kind.STRING,value:e.description,block:!0}:void 0,name:{kind:Pe.Kind.NAME,value:e.name},type:Ya(e.type),directives:SE(e,t,n),defaultValue:(a=(0,Pe.astFromValue)(e.defaultValue,e.type))!==null&&a!==void 0?a:void 0}}function hle(e,t,n){var r,i;return{kind:Pe.Kind.ENUM_VALUE_DEFINITION,description:(i=(r=e.astNode)===null||r===void 0?void 0:r.description)!==null&&i!==void 0?i:e.description?{kind:Pe.Kind.STRING,value:e.description,block:!0}:void 0,name:{kind:Pe.Kind.NAME,value:e.name},directives:SE(e,t,n)}}function yle(e){return vE("deprecated",{reason:e},Pe.GraphQLDeprecatedDirective)}function vE(e,t,n){let r=[];if(n!=null)for(let i of n.args){let a=i.name,o=t[a];if(o!==void 0){let c=(0,Pe.astFromValue)(o,i.type);c&&r.push({kind:Pe.Kind.ARGUMENT,name:{kind:Pe.Kind.NAME,value:a},value:c})}}else for(let i in t){let a=t[i],o=gE(a);o&&r.push({kind:Pe.Kind.ARGUMENT,name:{kind:Pe.Kind.NAME,value:i},value:o})}return{kind:Pe.Kind.DIRECTIVE,name:{kind:Pe.Kind.NAME,value:e},arguments:r}}function QO(e,t){let n=[];for(let r in t){let i=t[r],a=e==null?void 0:e.getDirective(r);if(Array.isArray(i))for(let o of i)n.push(vE(r,o,a));else n.push(vE(r,i,a))}return n}var jl=os(hE(),1),YV=os(Ae(),1);m();T();N();m();T();N();m();T();N();m();T();N();m();T();N();m();T();N();function sn(e,t){if(!e)throw new Error(t)}var Ile=34028234663852886e22,gle=-34028234663852886e22,_le=4294967295,vle=2147483647,Sle=-2147483648;function Bl(e){if(typeof e!="number")throw new Error("invalid int 32: "+typeof e);if(!Number.isInteger(e)||e>vle||e_le||e<0)throw new Error("invalid uint 32: "+e)}function OE(e){if(typeof e!="number")throw new Error("invalid float 32: "+typeof e);if(Number.isFinite(e)&&(e>Ile||e({no:i.no,name:i.name,localName:e[i.no]})),r)}function JO(e,t,n){let r=Object.create(null),i=Object.create(null),a=[];for(let o of t){let c=uV(o);a.push(c),r[o.name]=c,i[o.no]=c}return{typeName:e,values:a,findName(o){return r[o]},findNumber(o){return i[o]}}}function oV(e,t,n){let r={};for(let i of t){let a=uV(i);r[a.localName]=a.no,r[a.no]=a.localName}return YO(r,e,t,n),r}function uV(e){return"localName"in e?e:Object.assign(Object.assign({},e),{localName:e.name})}m();T();N();m();T();N();var $e=class{equals(t){return this.getType().runtime.util.equals(this.getType(),this,t)}clone(){return this.getType().runtime.util.clone(this)}fromBinary(t,n){let r=this.getType(),i=r.runtime.bin,a=i.makeReadOptions(n);return i.readMessage(this,a.readerFactory(t),t.byteLength,a),this}fromJson(t,n){let r=this.getType(),i=r.runtime.json,a=i.makeReadOptions(n);return i.readMessage(r,t,a,this),this}fromJsonString(t,n){let r;try{r=JSON.parse(t)}catch(i){throw new Error(`cannot decode ${this.getType().typeName} from JSON: ${i instanceof Error?i.message:String(i)}`)}return this.fromJson(r,n)}toBinary(t){let n=this.getType(),r=n.runtime.bin,i=r.makeWriteOptions(t),a=i.writerFactory();return r.writeMessage(this,a,i),a.finish()}toJson(t){let n=this.getType(),r=n.runtime.json,i=r.makeWriteOptions(t);return r.writeMessage(this,i)}toJsonString(t){var n;let r=this.toJson(t);return JSON.stringify(r,null,(n=t==null?void 0:t.prettySpaces)!==null&&n!==void 0?n:0)}toJSON(){return this.toJson({emitDefaultValues:!0})}getType(){return Object.getPrototypeOf(this).constructor}};function cV(e,t,n,r){var i;let a=(i=r==null?void 0:r.localName)!==null&&i!==void 0?i:t.substring(t.lastIndexOf(".")+1),o={[a]:function(c){e.util.initFields(this),e.util.initPartial(c,this)}}[a];return Object.setPrototypeOf(o.prototype,new $e),Object.assign(o,{runtime:e,typeName:t,fields:e.util.newFieldList(n),fromBinary(c,l){return new o().fromBinary(c,l)},fromJson(c,l){return new o().fromJson(c,l)},fromJsonString(c,l){return new o().fromJsonString(c,l)},equals(c,l){return e.util.equals(o,c,l)}}),o}m();T();N();m();T();N();m();T();N();m();T();N();function dV(){let e=0,t=0;for(let r=0;r<28;r+=7){let i=this.buf[this.pos++];if(e|=(i&127)<>4,!(n&128))return this.assertBounds(),[e,t];for(let r=3;r<=31;r+=7){let i=this.buf[this.pos++];if(t|=(i&127)<>>a,c=!(!(o>>>7)&&t==0),l=(c?o|128:o)&255;if(n.push(l),!c)return}let r=e>>>28&15|(t&7)<<4,i=!!(t>>3);if(n.push((i?r|128:r)&255),!!i){for(let a=3;a<31;a=a+7){let o=t>>>a,c=!!(o>>>7),l=(c?o|128:o)&255;if(n.push(l),!c)return}n.push(t>>>31&1)}}var DE=4294967296;function HO(e){let t=e[0]==="-";t&&(e=e.slice(1));let n=1e6,r=0,i=0;function a(o,c){let l=Number(e.slice(o,c));i*=n,r=r*n+l,r>=DE&&(i=i+(r/DE|0),r=r%DE)}return a(-24,-18),a(-18,-12),a(-12,-6),a(-6),t?fV(r,i):WO(r,i)}function pV(e,t){let n=WO(e,t),r=n.hi&2147483648;r&&(n=fV(n.lo,n.hi));let i=zO(n.lo,n.hi);return r?"-"+i:i}function zO(e,t){if({lo:e,hi:t}=Ole(e,t),t<=2097151)return String(DE*t+e);let n=e&16777215,r=(e>>>24|t<<8)&16777215,i=t>>16&65535,a=n+r*6777216+i*6710656,o=r+i*8147497,c=i*2,l=1e7;return a>=l&&(o+=Math.floor(a/l),a%=l),o>=l&&(c+=Math.floor(o/l),o%=l),c.toString()+lV(o)+lV(a)}function Ole(e,t){return{lo:e>>>0,hi:t>>>0}}function WO(e,t){return{lo:e|0,hi:t|0}}function fV(e,t){return t=~t,e?e=~e+1:t+=1,WO(e,t)}var lV=e=>{let t=String(e);return"0000000".slice(t.length)+t};function XO(e,t){if(e>=0){for(;e>127;)t.push(e&127|128),e=e>>>7;t.push(e)}else{for(let n=0;n<9;n++)t.push(e&127|128),e=e>>7;t.push(1)}}function mV(){let e=this.buf[this.pos++],t=e&127;if(!(e&128))return this.assertBounds(),t;if(e=this.buf[this.pos++],t|=(e&127)<<7,!(e&128))return this.assertBounds(),t;if(e=this.buf[this.pos++],t|=(e&127)<<14,!(e&128))return this.assertBounds(),t;if(e=this.buf[this.pos++],t|=(e&127)<<21,!(e&128))return this.assertBounds(),t;e=this.buf[this.pos++],t|=(e&15)<<28;for(let n=5;e&128&&n<10;n++)e=this.buf[this.pos++];if(e&128)throw new Error("invalid varint");return this.assertBounds(),t>>>0}function Dle(){let e=new DataView(new ArrayBuffer(8));if(typeof BigInt=="function"&&typeof e.getBigInt64=="function"&&typeof e.getBigUint64=="function"&&typeof e.setBigInt64=="function"&&typeof e.setBigUint64=="function"&&(typeof O!="object"||typeof O.env!="object"||O.env.BUF_BIGINT_DISABLE!=="1")){let i=BigInt("-9223372036854775808"),a=BigInt("9223372036854775807"),o=BigInt("0"),c=BigInt("18446744073709551615");return{zero:BigInt(0),supported:!0,parse(l){let p=typeof l=="bigint"?l:BigInt(l);if(p>a||pc||psn(/^-?[0-9]+$/.test(i),`int64 invalid: ${i}`),r=i=>sn(/^[0-9]+$/.test(i),`uint64 invalid: ${i}`);return{zero:"0",supported:!1,parse(i){return typeof i!="string"&&(i=i.toString()),n(i),i},uParse(i){return typeof i!="string"&&(i=i.toString()),r(i),i},enc(i){return typeof i!="string"&&(i=i.toString()),n(i),HO(i)},uEnc(i){return typeof i!="string"&&(i=i.toString()),r(i),HO(i)},dec(i,a){return pV(i,a)},uDec(i,a){return zO(i,a)}}}var Gn=Dle();m();T();N();var Ne;(function(e){e[e.DOUBLE=1]="DOUBLE",e[e.FLOAT=2]="FLOAT",e[e.INT64=3]="INT64",e[e.UINT64=4]="UINT64",e[e.INT32=5]="INT32",e[e.FIXED64=6]="FIXED64",e[e.FIXED32=7]="FIXED32",e[e.BOOL=8]="BOOL",e[e.STRING=9]="STRING",e[e.BYTES=12]="BYTES",e[e.UINT32=13]="UINT32",e[e.SFIXED32=15]="SFIXED32",e[e.SFIXED64=16]="SFIXED64",e[e.SINT32=17]="SINT32",e[e.SINT64=18]="SINT64"})(Ne||(Ne={}));var Ta;(function(e){e[e.BIGINT=0]="BIGINT",e[e.STRING=1]="STRING"})(Ta||(Ta={}));function Ds(e,t,n){if(t===n)return!0;if(e==Ne.BYTES){if(!(t instanceof Uint8Array)||!(n instanceof Uint8Array)||t.length!==n.length)return!1;for(let r=0;r>>0)}raw(t){return this.buf.length&&(this.chunks.push(new Uint8Array(this.buf)),this.buf=[]),this.chunks.push(t),this}uint32(t){for(kp(t);t>127;)this.buf.push(t&127|128),t=t>>>7;return this.buf.push(t),this}int32(t){return Bl(t),XO(t,this.buf),this}bool(t){return this.buf.push(t?1:0),this}bytes(t){return this.uint32(t.byteLength),this.raw(t)}string(t){let n=this.textEncoder.encode(t);return this.uint32(n.byteLength),this.raw(n)}float(t){OE(t);let n=new Uint8Array(4);return new DataView(n.buffer).setFloat32(0,t,!0),this.raw(n)}double(t){let n=new Uint8Array(8);return new DataView(n.buffer).setFloat64(0,t,!0),this.raw(n)}fixed32(t){kp(t);let n=new Uint8Array(4);return new DataView(n.buffer).setUint32(0,t,!0),this.raw(n)}sfixed32(t){Bl(t);let n=new Uint8Array(4);return new DataView(n.buffer).setInt32(0,t,!0),this.raw(n)}sint32(t){return Bl(t),t=(t<<1^t>>31)>>>0,XO(t,this.buf),this}sfixed64(t){let n=new Uint8Array(8),r=new DataView(n.buffer),i=Gn.enc(t);return r.setInt32(0,i.lo,!0),r.setInt32(4,i.hi,!0),this.raw(n)}fixed64(t){let n=new Uint8Array(8),r=new DataView(n.buffer),i=Gn.uEnc(t);return r.setInt32(0,i.lo,!0),r.setInt32(4,i.hi,!0),this.raw(n)}int64(t){let n=Gn.enc(t);return bE(n.lo,n.hi,this.buf),this}sint64(t){let n=Gn.enc(t),r=n.hi>>31,i=n.lo<<1^r,a=(n.hi<<1|n.lo>>>31)^r;return bE(i,a,this.buf),this}uint64(t){let n=Gn.uEnc(t);return bE(n.lo,n.hi,this.buf),this}},FE=class{constructor(t,n){this.varint64=dV,this.uint32=mV,this.buf=t,this.len=t.length,this.pos=0,this.view=new DataView(t.buffer,t.byteOffset,t.byteLength),this.textDecoder=n!=null?n:new TextDecoder}tag(){let t=this.uint32(),n=t>>>3,r=t&7;if(n<=0||r<0||r>5)throw new Error("illegal tag: field no "+n+" wire type "+r);return[n,r]}skip(t){let n=this.pos;switch(t){case Un.Varint:for(;this.buf[this.pos++]&128;);break;case Un.Bit64:this.pos+=4;case Un.Bit32:this.pos+=4;break;case Un.LengthDelimited:let r=this.uint32();this.pos+=r;break;case Un.StartGroup:let i;for(;(i=this.tag()[1])!==Un.EndGroup;)this.skip(i);break;default:throw new Error("cant skip wire type "+t)}return this.assertBounds(),this.buf.subarray(n,this.pos)}assertBounds(){if(this.pos>this.len)throw new RangeError("premature EOF")}int32(){return this.uint32()|0}sint32(){let t=this.uint32();return t>>>1^-(t&1)}int64(){return Gn.dec(...this.varint64())}uint64(){return Gn.uDec(...this.varint64())}sint64(){let[t,n]=this.varint64(),r=-(t&1);return t=(t>>>1|(n&1)<<31)^r,n=n>>>1^r,Gn.dec(t,n)}bool(){let[t,n]=this.varint64();return t!==0||n!==0}fixed32(){return this.view.getUint32((this.pos+=4)-4,!0)}sfixed32(){return this.view.getInt32((this.pos+=4)-4,!0)}fixed64(){return Gn.uDec(this.sfixed32(),this.sfixed32())}sfixed64(){return Gn.dec(this.sfixed32(),this.sfixed32())}float(){return this.view.getFloat32((this.pos+=4)-4,!0)}double(){return this.view.getFloat64((this.pos+=8)-8,!0)}bytes(){let t=this.uint32(),n=this.pos;return this.pos+=t,this.assertBounds(),this.buf.subarray(n,n+t)}string(){return this.textDecoder.decode(this.bytes())}};function NV(e,t,n,r){let i;return{typeName:t,extendee:n,get field(){if(!i){let a=typeof r=="function"?r():r;a.name=t.split(".").pop(),a.jsonName=`[${t}]`,i=e.util.newFieldList([a]).list()[0]}return i},runtime:e}}function PE(e){let t=e.field.localName,n=Object.create(null);return n[t]=ble(e),[n,()=>n[t]]}function ble(e){let t=e.field;if(t.repeated)return[];if(t.default!==void 0)return t.default;switch(t.kind){case"enum":return t.T.values[0].no;case"scalar":return Ea(t.T,t.L);case"message":let n=t.T,r=new n;return n.fieldWrapper?n.fieldWrapper.unwrapField(r):r;case"map":throw"map fields are not allowed to be extensions"}}function TV(e,t){if(!t.repeated&&(t.kind=="enum"||t.kind=="scalar")){for(let n=e.length-1;n>=0;--n)if(e[n].no==t.no)return[e[n]];return[]}return e.filter(n=>n.no===t.no)}m();T();N();m();T();N();var bs="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split(""),wE=[];for(let e=0;e>4,o=a,i=2;break;case 2:n[r++]=(o&15)<<4|(a&60)>>2,o=a,i=3;break;case 3:n[r++]=(o&3)<<6|a,i=0;break}}if(i==1)throw Error("invalid base64 string.");return n.subarray(0,r)},enc(e){let t="",n=0,r,i=0;for(let a=0;a>2],i=(r&3)<<4,n=1;break;case 1:t+=bs[i|r>>4],i=(r&15)<<2,n=2;break;case 2:t+=bs[i|r>>6],t+=bs[r&63],n=0;break}return n&&(t+=bs[i],t+="=",n==1&&(t+="=")),t}};m();T();N();function EV(e,t,n){yV(t,e);let r=t.runtime.bin.makeReadOptions(n),i=TV(e.getType().runtime.bin.listUnknownFields(e),t.field),[a,o]=PE(t);for(let c of i)t.runtime.bin.readField(a,r.readerFactory(c.data),t.field,c.wireType,r);return o()}function hV(e,t,n,r){yV(t,e);let i=t.runtime.bin.makeReadOptions(r),a=t.runtime.bin.makeWriteOptions(r);if(eD(e,t)){let p=e.getType().runtime.bin.listUnknownFields(e).filter(f=>f.no!=t.field.no);e.getType().runtime.bin.discardUnknownFields(e);for(let f of p)e.getType().runtime.bin.onUnknownField(e,f.no,f.wireType,f.data)}let o=a.writerFactory(),c=t.field;!c.opt&&!c.repeated&&(c.kind=="enum"||c.kind=="scalar")&&(c=Object.assign(Object.assign({},t.field),{opt:!0})),t.runtime.bin.writeField(c,n,o,a);let l=i.readerFactory(o.finish());for(;l.posr.no==t.field.no)}function yV(e,t){sn(e.extendee.typeName==t.getType().typeName,`extension ${e.typeName} can only be applied to message ${e.extendee.typeName}`)}m();T();N();function LE(e,t){let n=e.localName;if(e.repeated)return t[n].length>0;if(e.oneof)return t[e.oneof.localName].case===n;switch(e.kind){case"enum":case"scalar":return e.opt||e.req?t[n]!==void 0:e.kind=="enum"?t[n]!==e.T.values[0].no:!AE(e.T,t[n]);case"message":return t[n]!==void 0;case"map":return Object.keys(t[n]).length>0}}function tD(e,t){let n=e.localName,r=!e.opt&&!e.req;if(e.repeated)t[n]=[];else if(e.oneof)t[e.oneof.localName]={case:void 0};else switch(e.kind){case"map":t[n]={};break;case"enum":t[n]=r?e.T.values[0].no:void 0;break;case"scalar":t[n]=r?Ea(e.T,e.L):void 0;break;case"message":t[n]=void 0;break}}m();T();N();m();T();N();function ha(e,t){if(e===null||typeof e!="object"||!Object.getOwnPropertyNames($e.prototype).every(r=>r in e&&typeof e[r]=="function"))return!1;let n=e.getType();return n===null||typeof n!="function"||!("typeName"in n)||typeof n.typeName!="string"?!1:t===void 0?!0:n.typeName==t.typeName}function CE(e,t){return ha(t)||!e.fieldWrapper?t:e.fieldWrapper.wrapField(t)}var Wke={"google.protobuf.DoubleValue":Ne.DOUBLE,"google.protobuf.FloatValue":Ne.FLOAT,"google.protobuf.Int64Value":Ne.INT64,"google.protobuf.UInt64Value":Ne.UINT64,"google.protobuf.Int32Value":Ne.INT32,"google.protobuf.UInt32Value":Ne.UINT32,"google.protobuf.BoolValue":Ne.BOOL,"google.protobuf.StringValue":Ne.STRING,"google.protobuf.BytesValue":Ne.BYTES};var IV={ignoreUnknownFields:!1},gV={emitDefaultValues:!1,enumAsInteger:!1,useProtoFieldName:!1,prettySpaces:0};function Ale(e){return e?Object.assign(Object.assign({},IV),e):IV}function Rle(e){return e?Object.assign(Object.assign({},gV),e):gV}var kE=Symbol(),BE=Symbol();function SV(){return{makeReadOptions:Ale,makeWriteOptions:Rle,readMessage(e,t,n,r){if(t==null||Array.isArray(t)||typeof t!="object")throw new Error(`cannot decode message ${e.typeName} from JSON: ${Ha(t)}`);r=r!=null?r:new e;let i=new Map,a=n.typeRegistry;for(let[o,c]of Object.entries(t)){let l=e.fields.findJsonName(o);if(l){if(l.oneof){if(c===null&&l.kind=="scalar")continue;let p=i.get(l.oneof);if(p!==void 0)throw new Error(`cannot decode message ${e.typeName} from JSON: multiple keys for oneof "${l.oneof.name}" present: "${p}", "${o}"`);i.set(l.oneof,o)}_V(r,c,l,n,e)}else{let p=!1;if(a!=null&&a.findExtension&&o.startsWith("[")&&o.endsWith("]")){let f=a.findExtension(o.substring(1,o.length-1));if(f&&f.extendee.typeName==e.typeName){p=!0;let[y,g]=PE(f);_V(y,c,f.field,n,f),hV(r,f,g(),n)}}if(!p&&!n.ignoreUnknownFields)throw new Error(`cannot decode message ${e.typeName} from JSON: key "${o}" is unknown`)}}return r},writeMessage(e,t){let n=e.getType(),r={},i;try{for(i of n.fields.byNumber()){if(!LE(i,e)){if(i.req)throw"required field not set";if(!t.emitDefaultValues||!Ple(i))continue}let o=i.oneof?e[i.oneof.localName].value:e[i.localName],c=vV(i,o,t);c!==void 0&&(r[t.useProtoFieldName?i.name:i.jsonName]=c)}let a=t.typeRegistry;if(a!=null&&a.findExtensionFor)for(let o of n.runtime.bin.listUnknownFields(e)){let c=a.findExtensionFor(n.typeName,o.no);if(c&&eD(e,c)){let l=EV(e,c,t),p=vV(c.field,l,t);p!==void 0&&(r[c.field.jsonName]=p)}}}catch(a){let o=i?`cannot encode field ${n.typeName}.${i.name} to JSON`:`cannot encode message ${n.typeName} to JSON`,c=a instanceof Error?a.message:String(a);throw new Error(o+(c.length>0?`: ${c}`:""))}return r},readScalar(e,t,n){return Mp(e,t,n!=null?n:Ta.BIGINT,!0)},writeScalar(e,t,n){if(t!==void 0&&(n||AE(e,t)))return UE(e,t)},debug:Ha}}function Ha(e){if(e===null)return"null";switch(typeof e){case"object":return Array.isArray(e)?"array":"object";case"string":return e.length>100?"string":`"${e.split('"').join('\\"')}"`;default:return String(e)}}function _V(e,t,n,r,i){let a=n.localName;if(n.repeated){if(sn(n.kind!="map"),t===null)return;if(!Array.isArray(t))throw new Error(`cannot decode field ${i.typeName}.${n.name} from JSON: ${Ha(t)}`);let o=e[a];for(let c of t){if(c===null)throw new Error(`cannot decode field ${i.typeName}.${n.name} from JSON: ${Ha(c)}`);switch(n.kind){case"message":o.push(n.T.fromJson(c,r));break;case"enum":let l=nD(n.T,c,r.ignoreUnknownFields,!0);l!==BE&&o.push(l);break;case"scalar":try{o.push(Mp(n.T,c,n.L,!0))}catch(p){let f=`cannot decode field ${i.typeName}.${n.name} from JSON: ${Ha(c)}`;throw p instanceof Error&&p.message.length>0&&(f+=`: ${p.message}`),new Error(f)}break}}}else if(n.kind=="map"){if(t===null)return;if(typeof t!="object"||Array.isArray(t))throw new Error(`cannot decode field ${i.typeName}.${n.name} from JSON: ${Ha(t)}`);let o=e[a];for(let[c,l]of Object.entries(t)){if(l===null)throw new Error(`cannot decode field ${i.typeName}.${n.name} from JSON: map value null`);let p;try{p=Fle(n.K,c)}catch(f){let y=`cannot decode map key for field ${i.typeName}.${n.name} from JSON: ${Ha(t)}`;throw f instanceof Error&&f.message.length>0&&(y+=`: ${f.message}`),new Error(y)}switch(n.V.kind){case"message":o[p]=n.V.T.fromJson(l,r);break;case"enum":let f=nD(n.V.T,l,r.ignoreUnknownFields,!0);f!==BE&&(o[p]=f);break;case"scalar":try{o[p]=Mp(n.V.T,l,Ta.BIGINT,!0)}catch(y){let g=`cannot decode map value for field ${i.typeName}.${n.name} from JSON: ${Ha(t)}`;throw y instanceof Error&&y.message.length>0&&(g+=`: ${y.message}`),new Error(g)}break}}}else switch(n.oneof&&(e=e[n.oneof.localName]={case:a},a="value"),n.kind){case"message":let o=n.T;if(t===null&&o.typeName!="google.protobuf.Value")return;let c=e[a];ha(c)?c.fromJson(t,r):(e[a]=c=o.fromJson(t,r),o.fieldWrapper&&!n.oneof&&(e[a]=o.fieldWrapper.unwrapField(c)));break;case"enum":let l=nD(n.T,t,r.ignoreUnknownFields,!1);switch(l){case kE:tD(n,e);break;case BE:break;default:e[a]=l;break}break;case"scalar":try{let p=Mp(n.T,t,n.L,!1);switch(p){case kE:tD(n,e);break;default:e[a]=p;break}}catch(p){let f=`cannot decode field ${i.typeName}.${n.name} from JSON: ${Ha(t)}`;throw p instanceof Error&&p.message.length>0&&(f+=`: ${p.message}`),new Error(f)}break}}function Fle(e,t){if(e===Ne.BOOL)switch(t){case"true":t=!0;break;case"false":t=!1;break}return Mp(e,t,Ta.BIGINT,!0).toString()}function Mp(e,t,n,r){if(t===null)return r?Ea(e,n):kE;switch(e){case Ne.DOUBLE:case Ne.FLOAT:if(t==="NaN")return Number.NaN;if(t==="Infinity")return Number.POSITIVE_INFINITY;if(t==="-Infinity")return Number.NEGATIVE_INFINITY;if(t===""||typeof t=="string"&&t.trim().length!==t.length||typeof t!="string"&&typeof t!="number")break;let i=Number(t);if(Number.isNaN(i)||!Number.isFinite(i))break;return e==Ne.FLOAT&&OE(i),i;case Ne.INT32:case Ne.FIXED32:case Ne.SFIXED32:case Ne.SINT32:case Ne.UINT32:let a;if(typeof t=="number"?a=t:typeof t=="string"&&t.length>0&&t.trim().length===t.length&&(a=Number(t)),a===void 0)break;return e==Ne.UINT32||e==Ne.FIXED32?kp(a):Bl(a),a;case Ne.INT64:case Ne.SFIXED64:case Ne.SINT64:if(typeof t!="number"&&typeof t!="string")break;let o=Gn.parse(t);return n?o.toString():o;case Ne.FIXED64:case Ne.UINT64:if(typeof t!="number"&&typeof t!="string")break;let c=Gn.uParse(t);return n?c.toString():c;case Ne.BOOL:if(typeof t!="boolean")break;return t;case Ne.STRING:if(typeof t!="string")break;try{encodeURIComponent(t)}catch(l){throw new Error("invalid UTF8")}return t;case Ne.BYTES:if(t==="")return new Uint8Array(0);if(typeof t!="string")break;return ZO.dec(t)}throw new Error}function nD(e,t,n,r){if(t===null)return e.typeName=="google.protobuf.NullValue"?0:r?e.values[0].no:kE;switch(typeof t){case"number":if(Number.isInteger(t))return t;break;case"string":let i=e.findName(t);if(i!==void 0)return i.no;if(n)return BE;break}throw new Error(`cannot decode enum ${e.typeName} from JSON: ${Ha(t)}`)}function Ple(e){return e.repeated||e.kind=="map"?!0:!(e.oneof||e.kind=="message"||e.opt||e.req)}function vV(e,t,n){if(e.kind=="map"){sn(typeof t=="object"&&t!=null);let r={},i=Object.entries(t);switch(e.V.kind){case"scalar":for(let[o,c]of i)r[o.toString()]=UE(e.V.T,c);break;case"message":for(let[o,c]of i)r[o.toString()]=c.toJson(n);break;case"enum":let a=e.V.T;for(let[o,c]of i)r[o.toString()]=rD(a,c,n.enumAsInteger);break}return n.emitDefaultValues||i.length>0?r:void 0}if(e.repeated){sn(Array.isArray(t));let r=[];switch(e.kind){case"scalar":for(let i=0;i0?r:void 0}switch(e.kind){case"scalar":return UE(e.T,t);case"enum":return rD(e.T,t,n.enumAsInteger);case"message":return CE(e.T,t).toJson(n)}}function rD(e,t,n){var r;if(sn(typeof t=="number"),e.typeName=="google.protobuf.NullValue")return null;if(n)return t;let i=e.findNumber(t);return(r=i==null?void 0:i.name)!==null&&r!==void 0?r:t}function UE(e,t){switch(e){case Ne.INT32:case Ne.SFIXED32:case Ne.SINT32:case Ne.FIXED32:case Ne.UINT32:return sn(typeof t=="number"),t;case Ne.FLOAT:case Ne.DOUBLE:return sn(typeof t=="number"),Number.isNaN(t)?"NaN":t===Number.POSITIVE_INFINITY?"Infinity":t===Number.NEGATIVE_INFINITY?"-Infinity":t;case Ne.STRING:return sn(typeof t=="string"),t;case Ne.BOOL:return sn(typeof t=="boolean"),t;case Ne.UINT64:case Ne.FIXED64:case Ne.INT64:case Ne.SFIXED64:case Ne.SINT64:return sn(typeof t=="bigint"||typeof t=="string"||typeof t=="number"),t.toString();case Ne.BYTES:return sn(t instanceof Uint8Array),ZO.enc(t)}}m();T();N();var Ul=Symbol("@bufbuild/protobuf/unknown-fields"),OV={readUnknownFields:!0,readerFactory:e=>new FE(e)},DV={writeUnknownFields:!0,writerFactory:()=>new RE};function wle(e){return e?Object.assign(Object.assign({},OV),e):OV}function Lle(e){return e?Object.assign(Object.assign({},DV),e):DV}function FV(){return{makeReadOptions:wle,makeWriteOptions:Lle,listUnknownFields(e){var t;return(t=e[Ul])!==null&&t!==void 0?t:[]},discardUnknownFields(e){delete e[Ul]},writeUnknownFields(e,t){let r=e[Ul];if(r)for(let i of r)t.tag(i.no,i.wireType).raw(i.data)},onUnknownField(e,t,n,r){let i=e;Array.isArray(i[Ul])||(i[Ul]=[]),i[Ul].push({no:t,wireType:n,data:r})},readMessage(e,t,n,r,i){let a=e.getType(),o=i?t.len:t.pos+n,c,l;for(;t.pos0&&(l=Ble),a){let g=e[o];if(r==Un.LengthDelimited&&c!=Ne.STRING&&c!=Ne.BYTES){let F=t.uint32()+t.pos;for(;t.posha(g,y)?g:new y(g));else{let g=o[i];y.fieldWrapper?y.typeName==="google.protobuf.BytesValue"?a[i]=qp(g):a[i]=g:a[i]=ha(g,y)?g:new y(g)}break}}},equals(e,t,n){return t===n?!0:!t||!n?!1:e.fields.byMember().every(r=>{let i=t[r.localName],a=n[r.localName];if(r.repeated){if(i.length!==a.length)return!1;switch(r.kind){case"message":return i.every((o,c)=>r.T.equals(o,a[c]));case"scalar":return i.every((o,c)=>Ds(r.T,o,a[c]));case"enum":return i.every((o,c)=>Ds(Ne.INT32,o,a[c]))}throw new Error(`repeated cannot contain ${r.kind}`)}switch(r.kind){case"message":return r.T.equals(i,a);case"enum":return Ds(Ne.INT32,i,a);case"scalar":return Ds(r.T,i,a);case"oneof":if(i.case!==a.case)return!1;let o=r.findField(i.case);if(o===void 0)return!0;switch(o.kind){case"message":return o.T.equals(i.value,a.value);case"enum":return Ds(Ne.INT32,i.value,a.value);case"scalar":return Ds(o.T,i.value,a.value)}throw new Error(`oneof cannot contain ${o.kind}`);case"map":let c=Object.keys(i).concat(Object.keys(a));switch(r.V.kind){case"message":let l=r.V.T;return c.every(f=>l.equals(i[f],a[f]));case"enum":return c.every(f=>Ds(Ne.INT32,i[f],a[f]));case"scalar":let p=r.V.T;return c.every(f=>Ds(p,i[f],a[f]))}break}})},clone(e){let t=e.getType(),n=new t,r=n;for(let i of t.fields.byMember()){let a=e[i.localName],o;if(i.repeated)o=a.map(qE);else if(i.kind=="map"){o=r[i.localName];for(let[c,l]of Object.entries(a))o[c]=qE(l)}else i.kind=="oneof"?o=i.findField(a.case)?{case:a.case,value:qE(a.value)}:{case:void 0}:o=qE(a);r[i.localName]=o}for(let i of t.runtime.bin.listUnknownFields(e))t.runtime.bin.onUnknownField(r,i.no,i.wireType,i.data);return n}}}function qE(e){if(e===void 0)return e;if(ha(e))return e.clone();if(e instanceof Uint8Array){let t=new Uint8Array(e.byteLength);return t.set(e),t}return e}function qp(e){return e instanceof Uint8Array?e:new Uint8Array(e)}function LV(e,t,n){return{syntax:e,json:SV(),bin:FV(),util:Object.assign(Object.assign({},wV()),{newFieldList:t,initFields:n}),makeMessageType(r,i,a){return cV(this,r,i,a)},makeEnum:oV,makeEnumType:JO,getEnumType:sV,makeExtension(r,i,a){return NV(this,r,i,a)}}}m();T();N();var VE=class{constructor(t,n){this._fields=t,this._normalizer=n}findJsonName(t){if(!this.jsonNames){let n={};for(let r of this.list())n[r.jsonName]=n[r.name]=r;this.jsonNames=n}return this.jsonNames[t]}find(t){if(!this.numbers){let n={};for(let r of this.list())n[r.no]=r;this.numbers=n}return this.numbers[t]}list(){return this.all||(this.all=this._normalizer(this._fields)),this.all}byNumber(){return this.numbersAsc||(this.numbersAsc=this.list().concat().sort((t,n)=>t.no-n.no)),this.numbersAsc}byMember(){if(!this.members){this.members=[];let t=this.members,n;for(let r of this.list())r.oneof?r.oneof!==n&&(n=r.oneof,t.push(n)):t.push(r)}return this.members}};m();T();N();m();T();N();m();T();N();function iD(e,t){let n=UV(e);return t?n:Vle(qle(n))}function CV(e){return iD(e,!1)}var BV=UV;function UV(e){let t=!1,n=[];for(let r=0;r`${e}$`,qle=e=>xle.has(e)?kV(e):e,Vle=e=>Mle.has(e)?kV(e):e;var jE=class{constructor(t){this.kind="oneof",this.repeated=!1,this.packed=!1,this.opt=!1,this.req=!1,this.default=void 0,this.fields=[],this.name=t,this.localName=CV(t)}addField(t){sn(t.oneof===this,`field ${t.name} not one of ${this.name}`),this.fields.push(t)}findField(t){if(!this._lookup){this._lookup=Object.create(null);for(let n=0;nnew VE(e,t=>MV(t,!0)),e=>{for(let t of e.getType().fields.byMember()){if(t.opt)continue;let n=t.localName,r=e;if(t.repeated){r[n]=[];continue}switch(t.kind){case"oneof":r[n]={case:void 0};break;case"enum":r[n]=0;break;case"map":r[n]={};break;case"scalar":r[n]=Ea(t.T,t.L);break;case"message":break}}});var kl;(function(e){e[e.OK=0]="OK",e[e.ERR=1]="ERR",e[e.ERR_NOT_FOUND=2]="ERR_NOT_FOUND",e[e.ERR_ALREADY_EXISTS=3]="ERR_ALREADY_EXISTS",e[e.ERR_INVALID_SUBGRAPH_SCHEMA=4]="ERR_INVALID_SUBGRAPH_SCHEMA",e[e.ERR_SUBGRAPH_COMPOSITION_FAILED=5]="ERR_SUBGRAPH_COMPOSITION_FAILED",e[e.ERR_SUBGRAPH_CHECK_FAILED=6]="ERR_SUBGRAPH_CHECK_FAILED",e[e.ERR_INVALID_LABELS=7]="ERR_INVALID_LABELS",e[e.ERR_ANALYTICS_DISABLED=8]="ERR_ANALYTICS_DISABLED",e[e.ERROR_NOT_AUTHENTICATED=9]="ERROR_NOT_AUTHENTICATED",e[e.ERR_OPENAI_DISABLED=10]="ERR_OPENAI_DISABLED",e[e.ERR_FREE_TRIAL_EXPIRED=11]="ERR_FREE_TRIAL_EXPIRED",e[e.ERROR_NOT_AUTHORIZED=12]="ERROR_NOT_AUTHORIZED",e[e.ERR_LIMIT_REACHED=13]="ERR_LIMIT_REACHED",e[e.ERR_DEPLOYMENT_FAILED=14]="ERR_DEPLOYMENT_FAILED",e[e.ERR_INVALID_NAME=15]="ERR_INVALID_NAME",e[e.ERR_UPGRADE_PLAN=16]="ERR_UPGRADE_PLAN",e[e.ERR_BAD_REQUEST=17]="ERR_BAD_REQUEST",e[e.ERR_SCHEMA_MISMATCH_WITH_APPROVED_PROPOSAL=18]="ERR_SCHEMA_MISMATCH_WITH_APPROVED_PROPOSAL"})(kl||(kl={}));x.util.setEnumType(kl,"wg.cosmo.common.EnumStatusCode",[{no:0,name:"OK"},{no:1,name:"ERR"},{no:2,name:"ERR_NOT_FOUND"},{no:3,name:"ERR_ALREADY_EXISTS"},{no:4,name:"ERR_INVALID_SUBGRAPH_SCHEMA"},{no:5,name:"ERR_SUBGRAPH_COMPOSITION_FAILED"},{no:6,name:"ERR_SUBGRAPH_CHECK_FAILED"},{no:7,name:"ERR_INVALID_LABELS"},{no:8,name:"ERR_ANALYTICS_DISABLED"},{no:9,name:"ERROR_NOT_AUTHENTICATED"},{no:10,name:"ERR_OPENAI_DISABLED"},{no:11,name:"ERR_FREE_TRIAL_EXPIRED"},{no:12,name:"ERROR_NOT_AUTHORIZED"},{no:13,name:"ERR_LIMIT_REACHED"},{no:14,name:"ERR_DEPLOYMENT_FAILED"},{no:15,name:"ERR_INVALID_NAME"},{no:16,name:"ERR_UPGRADE_PLAN"},{no:17,name:"ERR_BAD_REQUEST"},{no:18,name:"ERR_SCHEMA_MISMATCH_WITH_APPROVED_PROPOSAL"}]);var As;(function(e){e[e.GRAPHQL_SUBSCRIPTION_PROTOCOL_WS=0]="GRAPHQL_SUBSCRIPTION_PROTOCOL_WS",e[e.GRAPHQL_SUBSCRIPTION_PROTOCOL_SSE=1]="GRAPHQL_SUBSCRIPTION_PROTOCOL_SSE",e[e.GRAPHQL_SUBSCRIPTION_PROTOCOL_SSE_POST=2]="GRAPHQL_SUBSCRIPTION_PROTOCOL_SSE_POST"})(As||(As={}));x.util.setEnumType(As,"wg.cosmo.common.GraphQLSubscriptionProtocol",[{no:0,name:"GRAPHQL_SUBSCRIPTION_PROTOCOL_WS"},{no:1,name:"GRAPHQL_SUBSCRIPTION_PROTOCOL_SSE"},{no:2,name:"GRAPHQL_SUBSCRIPTION_PROTOCOL_SSE_POST"}]);var Rs;(function(e){e[e.GRAPHQL_WEBSOCKET_SUBPROTOCOL_AUTO=0]="GRAPHQL_WEBSOCKET_SUBPROTOCOL_AUTO",e[e.GRAPHQL_WEBSOCKET_SUBPROTOCOL_WS=1]="GRAPHQL_WEBSOCKET_SUBPROTOCOL_WS",e[e.GRAPHQL_WEBSOCKET_SUBPROTOCOL_TRANSPORT_WS=2]="GRAPHQL_WEBSOCKET_SUBPROTOCOL_TRANSPORT_WS"})(Rs||(Rs={}));x.util.setEnumType(Rs,"wg.cosmo.common.GraphQLWebsocketSubprotocol",[{no:0,name:"GRAPHQL_WEBSOCKET_SUBPROTOCOL_AUTO"},{no:1,name:"GRAPHQL_WEBSOCKET_SUBPROTOCOL_WS"},{no:2,name:"GRAPHQL_WEBSOCKET_SUBPROTOCOL_TRANSPORT_WS"}]);m();T();N();var aD;(function(e){e[e.RENDER_ARGUMENT_DEFAULT=0]="RENDER_ARGUMENT_DEFAULT",e[e.RENDER_ARGUMENT_AS_GRAPHQL_VALUE=1]="RENDER_ARGUMENT_AS_GRAPHQL_VALUE",e[e.RENDER_ARGUMENT_AS_ARRAY_CSV=2]="RENDER_ARGUMENT_AS_ARRAY_CSV"})(aD||(aD={}));x.util.setEnumType(aD,"wg.cosmo.node.v1.ArgumentRenderConfiguration",[{no:0,name:"RENDER_ARGUMENT_DEFAULT"},{no:1,name:"RENDER_ARGUMENT_AS_GRAPHQL_VALUE"},{no:2,name:"RENDER_ARGUMENT_AS_ARRAY_CSV"}]);var mc;(function(e){e[e.OBJECT_FIELD=0]="OBJECT_FIELD",e[e.FIELD_ARGUMENT=1]="FIELD_ARGUMENT"})(mc||(mc={}));x.util.setEnumType(mc,"wg.cosmo.node.v1.ArgumentSource",[{no:0,name:"OBJECT_FIELD"},{no:1,name:"FIELD_ARGUMENT"}]);var ou;(function(e){e[e.STATIC=0]="STATIC",e[e.GRAPHQL=1]="GRAPHQL",e[e.PUBSUB=2]="PUBSUB"})(ou||(ou={}));x.util.setEnumType(ou,"wg.cosmo.node.v1.DataSourceKind",[{no:0,name:"STATIC"},{no:1,name:"GRAPHQL"},{no:2,name:"PUBSUB"}]);var Oo;(function(e){e[e.PUBLISH=0]="PUBLISH",e[e.REQUEST=1]="REQUEST",e[e.SUBSCRIBE=2]="SUBSCRIBE"})(Oo||(Oo={}));x.util.setEnumType(Oo,"wg.cosmo.node.v1.EventType",[{no:0,name:"PUBLISH"},{no:1,name:"REQUEST"},{no:2,name:"SUBSCRIBE"}]);var uu;(function(e){e[e.STATIC_CONFIGURATION_VARIABLE=0]="STATIC_CONFIGURATION_VARIABLE",e[e.ENV_CONFIGURATION_VARIABLE=1]="ENV_CONFIGURATION_VARIABLE",e[e.PLACEHOLDER_CONFIGURATION_VARIABLE=2]="PLACEHOLDER_CONFIGURATION_VARIABLE"})(uu||(uu={}));x.util.setEnumType(uu,"wg.cosmo.node.v1.ConfigurationVariableKind",[{no:0,name:"STATIC_CONFIGURATION_VARIABLE"},{no:1,name:"ENV_CONFIGURATION_VARIABLE"},{no:2,name:"PLACEHOLDER_CONFIGURATION_VARIABLE"}]);var Nc;(function(e){e[e.GET=0]="GET",e[e.POST=1]="POST",e[e.PUT=2]="PUT",e[e.DELETE=3]="DELETE",e[e.OPTIONS=4]="OPTIONS"})(Nc||(Nc={}));x.util.setEnumType(Nc,"wg.cosmo.node.v1.HTTPMethod",[{no:0,name:"GET"},{no:1,name:"POST"},{no:2,name:"PUT"},{no:3,name:"DELETE"},{no:4,name:"OPTIONS"}]);var Fs=class Fs extends $e{constructor(n){super();v(this,"id","");v(this,"name","");v(this,"routingUrl","");x.util.initPartial(n,this)}static fromBinary(n,r){return new Fs().fromBinary(n,r)}static fromJson(n,r){return new Fs().fromJson(n,r)}static fromJsonString(n,r){return new Fs().fromJsonString(n,r)}static equals(n,r){return x.util.equals(Fs,n,r)}};v(Fs,"runtime",x),v(Fs,"typeName","wg.cosmo.node.v1.Subgraph"),v(Fs,"fields",x.util.newFieldList(()=>[{no:1,name:"id",kind:"scalar",T:9},{no:2,name:"name",kind:"scalar",T:9},{no:3,name:"routing_url",kind:"scalar",T:9}]));var KE=Fs,Ps=class Ps extends $e{constructor(n){super();v(this,"configByFeatureFlagName",{});x.util.initPartial(n,this)}static fromBinary(n,r){return new Ps().fromBinary(n,r)}static fromJson(n,r){return new Ps().fromJson(n,r)}static fromJsonString(n,r){return new Ps().fromJsonString(n,r)}static equals(n,r){return x.util.equals(Ps,n,r)}};v(Ps,"runtime",x),v(Ps,"typeName","wg.cosmo.node.v1.FeatureFlagRouterExecutionConfigs"),v(Ps,"fields",x.util.newFieldList(()=>[{no:1,name:"config_by_feature_flag_name",kind:"map",K:9,V:{kind:"message",T:oD}}]));var sD=Ps,ws=class ws extends $e{constructor(n){super();v(this,"engineConfig");v(this,"version","");v(this,"subgraphs",[]);x.util.initPartial(n,this)}static fromBinary(n,r){return new ws().fromBinary(n,r)}static fromJson(n,r){return new ws().fromJson(n,r)}static fromJsonString(n,r){return new ws().fromJsonString(n,r)}static equals(n,r){return x.util.equals(ws,n,r)}};v(ws,"runtime",x),v(ws,"typeName","wg.cosmo.node.v1.FeatureFlagRouterExecutionConfig"),v(ws,"fields",x.util.newFieldList(()=>[{no:1,name:"engine_config",kind:"message",T:Ml},{no:2,name:"version",kind:"scalar",T:9},{no:3,name:"subgraphs",kind:"message",T:KE,repeated:!0}]));var oD=ws,Ls=class Ls extends $e{constructor(n){super();v(this,"engineConfig");v(this,"version","");v(this,"subgraphs",[]);v(this,"featureFlagConfigs");v(this,"compatibilityVersion","");x.util.initPartial(n,this)}static fromBinary(n,r){return new Ls().fromBinary(n,r)}static fromJson(n,r){return new Ls().fromJson(n,r)}static fromJsonString(n,r){return new Ls().fromJsonString(n,r)}static equals(n,r){return x.util.equals(Ls,n,r)}};v(Ls,"runtime",x),v(Ls,"typeName","wg.cosmo.node.v1.RouterConfig"),v(Ls,"fields",x.util.newFieldList(()=>[{no:1,name:"engine_config",kind:"message",T:Ml},{no:2,name:"version",kind:"scalar",T:9},{no:3,name:"subgraphs",kind:"message",T:KE,repeated:!0},{no:4,name:"feature_flag_configs",kind:"message",T:sD,opt:!0},{no:5,name:"compatibility_version",kind:"scalar",T:9}]));var Vp=Ls,Cs=class Cs extends $e{constructor(n){super();v(this,"code",kl.OK);v(this,"details");x.util.initPartial(n,this)}static fromBinary(n,r){return new Cs().fromBinary(n,r)}static fromJson(n,r){return new Cs().fromJson(n,r)}static fromJsonString(n,r){return new Cs().fromJsonString(n,r)}static equals(n,r){return x.util.equals(Cs,n,r)}};v(Cs,"runtime",x),v(Cs,"typeName","wg.cosmo.node.v1.Response"),v(Cs,"fields",x.util.newFieldList(()=>[{no:1,name:"code",kind:"enum",T:x.getEnumType(kl)},{no:2,name:"details",kind:"scalar",T:9,opt:!0}]));var uD=Cs,Bs=class Bs extends $e{constructor(n){super();v(this,"code",0);v(this,"message","");x.util.initPartial(n,this)}static fromBinary(n,r){return new Bs().fromBinary(n,r)}static fromJson(n,r){return new Bs().fromJson(n,r)}static fromJsonString(n,r){return new Bs().fromJsonString(n,r)}static equals(n,r){return x.util.equals(Bs,n,r)}};v(Bs,"runtime",x),v(Bs,"typeName","wg.cosmo.node.v1.ResponseStatus"),v(Bs,"fields",x.util.newFieldList(()=>[{no:1,name:"code",kind:"scalar",T:5},{no:2,name:"message",kind:"scalar",T:9}]));var xV=Bs,Us=class Us extends $e{constructor(n){super();v(this,"accountLimits");v(this,"graphPublicKey","");x.util.initPartial(n,this)}static fromBinary(n,r){return new Us().fromBinary(n,r)}static fromJson(n,r){return new Us().fromJson(n,r)}static fromJsonString(n,r){return new Us().fromJsonString(n,r)}static equals(n,r){return x.util.equals(Us,n,r)}};v(Us,"runtime",x),v(Us,"typeName","wg.cosmo.node.v1.RegistrationInfo"),v(Us,"fields",x.util.newFieldList(()=>[{no:1,name:"account_limits",kind:"message",T:lD},{no:2,name:"graph_public_key",kind:"scalar",T:9}]));var cD=Us,ks=class ks extends $e{constructor(n){super();v(this,"traceSamplingRate",0);x.util.initPartial(n,this)}static fromBinary(n,r){return new ks().fromBinary(n,r)}static fromJson(n,r){return new ks().fromJson(n,r)}static fromJsonString(n,r){return new ks().fromJsonString(n,r)}static equals(n,r){return x.util.equals(ks,n,r)}};v(ks,"runtime",x),v(ks,"typeName","wg.cosmo.node.v1.AccountLimits"),v(ks,"fields",x.util.newFieldList(()=>[{no:1,name:"trace_sampling_rate",kind:"scalar",T:2}]));var lD=ks,Ms=class Ms extends $e{constructor(t){super(),x.util.initPartial(t,this)}static fromBinary(t,n){return new Ms().fromBinary(t,n)}static fromJson(t,n){return new Ms().fromJson(t,n)}static fromJsonString(t,n){return new Ms().fromJsonString(t,n)}static equals(t,n){return x.util.equals(Ms,t,n)}};v(Ms,"runtime",x),v(Ms,"typeName","wg.cosmo.node.v1.SelfRegisterRequest"),v(Ms,"fields",x.util.newFieldList(()=>[]));var qV=Ms,xs=class xs extends $e{constructor(n){super();v(this,"response");v(this,"registrationInfo");x.util.initPartial(n,this)}static fromBinary(n,r){return new xs().fromBinary(n,r)}static fromJson(n,r){return new xs().fromJson(n,r)}static fromJsonString(n,r){return new xs().fromJsonString(n,r)}static equals(n,r){return x.util.equals(xs,n,r)}};v(xs,"runtime",x),v(xs,"typeName","wg.cosmo.node.v1.SelfRegisterResponse"),v(xs,"fields",x.util.newFieldList(()=>[{no:1,name:"response",kind:"message",T:uD},{no:2,name:"registrationInfo",kind:"message",T:cD,opt:!0}]));var VV=xs,qs=class qs extends $e{constructor(n){super();v(this,"defaultFlushInterval",Gn.zero);v(this,"datasourceConfigurations",[]);v(this,"fieldConfigurations",[]);v(this,"graphqlSchema","");v(this,"typeConfigurations",[]);v(this,"stringStorage",{});v(this,"graphqlClientSchema");x.util.initPartial(n,this)}static fromBinary(n,r){return new qs().fromBinary(n,r)}static fromJson(n,r){return new qs().fromJson(n,r)}static fromJsonString(n,r){return new qs().fromJsonString(n,r)}static equals(n,r){return x.util.equals(qs,n,r)}};v(qs,"runtime",x),v(qs,"typeName","wg.cosmo.node.v1.EngineConfiguration"),v(qs,"fields",x.util.newFieldList(()=>[{no:1,name:"defaultFlushInterval",kind:"scalar",T:3},{no:2,name:"datasource_configurations",kind:"message",T:jp,repeated:!0},{no:3,name:"field_configurations",kind:"message",T:$p,repeated:!0},{no:4,name:"graphqlSchema",kind:"scalar",T:9},{no:5,name:"type_configurations",kind:"message",T:dD,repeated:!0},{no:6,name:"string_storage",kind:"map",K:9,V:{kind:"scalar",T:9}},{no:7,name:"graphql_client_schema",kind:"scalar",T:9,opt:!0}]));var Ml=qs,Vs=class Vs extends $e{constructor(n){super();v(this,"kind",ou.STATIC);v(this,"rootNodes",[]);v(this,"childNodes",[]);v(this,"overrideFieldPathFromAlias",!1);v(this,"customGraphql");v(this,"customStatic");v(this,"directives",[]);v(this,"requestTimeoutSeconds",Gn.zero);v(this,"id","");v(this,"keys",[]);v(this,"provides",[]);v(this,"requires",[]);v(this,"customEvents");v(this,"entityInterfaces",[]);v(this,"interfaceObjects",[]);x.util.initPartial(n,this)}static fromBinary(n,r){return new Vs().fromBinary(n,r)}static fromJson(n,r){return new Vs().fromJson(n,r)}static fromJsonString(n,r){return new Vs().fromJsonString(n,r)}static equals(n,r){return x.util.equals(Vs,n,r)}};v(Vs,"runtime",x),v(Vs,"typeName","wg.cosmo.node.v1.DataSourceConfiguration"),v(Vs,"fields",x.util.newFieldList(()=>[{no:1,name:"kind",kind:"enum",T:x.getEnumType(ou)},{no:2,name:"root_nodes",kind:"message",T:xl,repeated:!0},{no:3,name:"child_nodes",kind:"message",T:xl,repeated:!0},{no:4,name:"override_field_path_from_alias",kind:"scalar",T:8},{no:5,name:"custom_graphql",kind:"message",T:Jp},{no:6,name:"custom_static",kind:"message",T:fD},{no:7,name:"directives",kind:"message",T:mD,repeated:!0},{no:8,name:"request_timeout_seconds",kind:"scalar",T:3},{no:9,name:"id",kind:"scalar",T:9},{no:10,name:"keys",kind:"message",T:fc,repeated:!0},{no:11,name:"provides",kind:"message",T:fc,repeated:!0},{no:12,name:"requires",kind:"message",T:fc,repeated:!0},{no:13,name:"custom_events",kind:"message",T:Ec},{no:14,name:"entity_interfaces",kind:"message",T:ql,repeated:!0},{no:15,name:"interface_objects",kind:"message",T:ql,repeated:!0}]));var jp=Vs,js=class js extends $e{constructor(n){super();v(this,"name","");v(this,"sourceType",mc.OBJECT_FIELD);x.util.initPartial(n,this)}static fromBinary(n,r){return new js().fromBinary(n,r)}static fromJson(n,r){return new js().fromJson(n,r)}static fromJsonString(n,r){return new js().fromJsonString(n,r)}static equals(n,r){return x.util.equals(js,n,r)}};v(js,"runtime",x),v(js,"typeName","wg.cosmo.node.v1.ArgumentConfiguration"),v(js,"fields",x.util.newFieldList(()=>[{no:1,name:"name",kind:"scalar",T:9},{no:2,name:"source_type",kind:"enum",T:x.getEnumType(mc)}]));var Kp=js,Ks=class Ks extends $e{constructor(n){super();v(this,"requiredAndScopes",[]);x.util.initPartial(n,this)}static fromBinary(n,r){return new Ks().fromBinary(n,r)}static fromJson(n,r){return new Ks().fromJson(n,r)}static fromJsonString(n,r){return new Ks().fromJsonString(n,r)}static equals(n,r){return x.util.equals(Ks,n,r)}};v(Ks,"runtime",x),v(Ks,"typeName","wg.cosmo.node.v1.Scopes"),v(Ks,"fields",x.util.newFieldList(()=>[{no:1,name:"required_and_scopes",kind:"scalar",T:9,repeated:!0}]));var Tc=Ks,Gs=class Gs extends $e{constructor(n){super();v(this,"requiresAuthentication",!1);v(this,"requiredOrScopes",[]);v(this,"requiredOrScopesByOr",[]);x.util.initPartial(n,this)}static fromBinary(n,r){return new Gs().fromBinary(n,r)}static fromJson(n,r){return new Gs().fromJson(n,r)}static fromJsonString(n,r){return new Gs().fromJsonString(n,r)}static equals(n,r){return x.util.equals(Gs,n,r)}};v(Gs,"runtime",x),v(Gs,"typeName","wg.cosmo.node.v1.AuthorizationConfiguration"),v(Gs,"fields",x.util.newFieldList(()=>[{no:1,name:"requires_authentication",kind:"scalar",T:8},{no:2,name:"required_or_scopes",kind:"message",T:Tc,repeated:!0},{no:3,name:"required_or_scopes_by_or",kind:"message",T:Tc,repeated:!0}]));var Gp=Gs,$s=class $s extends $e{constructor(n){super();v(this,"typeName","");v(this,"fieldName","");v(this,"argumentsConfiguration",[]);v(this,"authorizationConfiguration");v(this,"subscriptionFilterCondition");x.util.initPartial(n,this)}static fromBinary(n,r){return new $s().fromBinary(n,r)}static fromJson(n,r){return new $s().fromJson(n,r)}static fromJsonString(n,r){return new $s().fromJsonString(n,r)}static equals(n,r){return x.util.equals($s,n,r)}};v($s,"runtime",x),v($s,"typeName","wg.cosmo.node.v1.FieldConfiguration"),v($s,"fields",x.util.newFieldList(()=>[{no:1,name:"type_name",kind:"scalar",T:9},{no:2,name:"field_name",kind:"scalar",T:9},{no:3,name:"arguments_configuration",kind:"message",T:Kp,repeated:!0},{no:4,name:"authorization_configuration",kind:"message",T:Gp},{no:5,name:"subscription_filter_condition",kind:"message",T:cu,opt:!0}]));var $p=$s,Qs=class Qs extends $e{constructor(n){super();v(this,"typeName","");v(this,"renameTo","");x.util.initPartial(n,this)}static fromBinary(n,r){return new Qs().fromBinary(n,r)}static fromJson(n,r){return new Qs().fromJson(n,r)}static fromJsonString(n,r){return new Qs().fromJsonString(n,r)}static equals(n,r){return x.util.equals(Qs,n,r)}};v(Qs,"runtime",x),v(Qs,"typeName","wg.cosmo.node.v1.TypeConfiguration"),v(Qs,"fields",x.util.newFieldList(()=>[{no:1,name:"type_name",kind:"scalar",T:9},{no:2,name:"rename_to",kind:"scalar",T:9}]));var dD=Qs,Ys=class Ys extends $e{constructor(n){super();v(this,"typeName","");v(this,"fieldNames",[]);v(this,"externalFieldNames",[]);x.util.initPartial(n,this)}static fromBinary(n,r){return new Ys().fromBinary(n,r)}static fromJson(n,r){return new Ys().fromJson(n,r)}static fromJsonString(n,r){return new Ys().fromJsonString(n,r)}static equals(n,r){return x.util.equals(Ys,n,r)}};v(Ys,"runtime",x),v(Ys,"typeName","wg.cosmo.node.v1.TypeField"),v(Ys,"fields",x.util.newFieldList(()=>[{no:1,name:"type_name",kind:"scalar",T:9},{no:2,name:"field_names",kind:"scalar",T:9,repeated:!0},{no:3,name:"external_field_names",kind:"scalar",T:9,repeated:!0}]));var xl=Ys,Js=class Js extends $e{constructor(n){super();v(this,"fieldName","");v(this,"typeName","");x.util.initPartial(n,this)}static fromBinary(n,r){return new Js().fromBinary(n,r)}static fromJson(n,r){return new Js().fromJson(n,r)}static fromJsonString(n,r){return new Js().fromJsonString(n,r)}static equals(n,r){return x.util.equals(Js,n,r)}};v(Js,"runtime",x),v(Js,"typeName","wg.cosmo.node.v1.FieldCoordinates"),v(Js,"fields",x.util.newFieldList(()=>[{no:1,name:"field_name",kind:"scalar",T:9},{no:2,name:"type_name",kind:"scalar",T:9}]));var Qp=Js,Hs=class Hs extends $e{constructor(n){super();v(this,"fieldCoordinatesPath",[]);v(this,"fieldPath",[]);x.util.initPartial(n,this)}static fromBinary(n,r){return new Hs().fromBinary(n,r)}static fromJson(n,r){return new Hs().fromJson(n,r)}static fromJsonString(n,r){return new Hs().fromJsonString(n,r)}static equals(n,r){return x.util.equals(Hs,n,r)}};v(Hs,"runtime",x),v(Hs,"typeName","wg.cosmo.node.v1.FieldSetCondition"),v(Hs,"fields",x.util.newFieldList(()=>[{no:1,name:"field_coordinates_path",kind:"message",T:Qp,repeated:!0},{no:2,name:"field_path",kind:"scalar",T:9,repeated:!0}]));var Yp=Hs,zs=class zs extends $e{constructor(n){super();v(this,"typeName","");v(this,"fieldName","");v(this,"selectionSet","");v(this,"disableEntityResolver",!1);v(this,"conditions",[]);x.util.initPartial(n,this)}static fromBinary(n,r){return new zs().fromBinary(n,r)}static fromJson(n,r){return new zs().fromJson(n,r)}static fromJsonString(n,r){return new zs().fromJsonString(n,r)}static equals(n,r){return x.util.equals(zs,n,r)}};v(zs,"runtime",x),v(zs,"typeName","wg.cosmo.node.v1.RequiredField"),v(zs,"fields",x.util.newFieldList(()=>[{no:1,name:"type_name",kind:"scalar",T:9},{no:2,name:"field_name",kind:"scalar",T:9},{no:3,name:"selection_set",kind:"scalar",T:9},{no:4,name:"disable_entity_resolver",kind:"scalar",T:8},{no:5,name:"conditions",kind:"message",T:Yp,repeated:!0}]));var fc=zs,Ws=class Ws extends $e{constructor(n){super();v(this,"interfaceTypeName","");v(this,"concreteTypeNames",[]);x.util.initPartial(n,this)}static fromBinary(n,r){return new Ws().fromBinary(n,r)}static fromJson(n,r){return new Ws().fromJson(n,r)}static fromJsonString(n,r){return new Ws().fromJsonString(n,r)}static equals(n,r){return x.util.equals(Ws,n,r)}};v(Ws,"runtime",x),v(Ws,"typeName","wg.cosmo.node.v1.EntityInterfaceConfiguration"),v(Ws,"fields",x.util.newFieldList(()=>[{no:1,name:"interface_type_name",kind:"scalar",T:9},{no:2,name:"concrete_type_names",kind:"scalar",T:9,repeated:!0}]));var ql=Ws,Xs=class Xs extends $e{constructor(n){super();v(this,"url");v(this,"method",Nc.GET);v(this,"header",{});v(this,"body");v(this,"query",[]);v(this,"urlEncodeBody",!1);v(this,"mtls");v(this,"baseUrl");v(this,"path");v(this,"httpProxyUrl");x.util.initPartial(n,this)}static fromBinary(n,r){return new Xs().fromBinary(n,r)}static fromJson(n,r){return new Xs().fromJson(n,r)}static fromJsonString(n,r){return new Xs().fromJsonString(n,r)}static equals(n,r){return x.util.equals(Xs,n,r)}};v(Xs,"runtime",x),v(Xs,"typeName","wg.cosmo.node.v1.FetchConfiguration"),v(Xs,"fields",x.util.newFieldList(()=>[{no:1,name:"url",kind:"message",T:xr},{no:2,name:"method",kind:"enum",T:x.getEnumType(Nc)},{no:3,name:"header",kind:"map",K:9,V:{kind:"message",T:TD}},{no:4,name:"body",kind:"message",T:xr},{no:5,name:"query",kind:"message",T:ND,repeated:!0},{no:7,name:"url_encode_body",kind:"scalar",T:8},{no:8,name:"mtls",kind:"message",T:ED},{no:9,name:"base_url",kind:"message",T:xr},{no:10,name:"path",kind:"message",T:xr},{no:11,name:"http_proxy_url",kind:"message",T:xr,opt:!0}]));var pD=Xs,Zs=class Zs extends $e{constructor(n){super();v(this,"statusCode",Gn.zero);v(this,"typeName","");v(this,"injectStatusCodeIntoBody",!1);x.util.initPartial(n,this)}static fromBinary(n,r){return new Zs().fromBinary(n,r)}static fromJson(n,r){return new Zs().fromJson(n,r)}static fromJsonString(n,r){return new Zs().fromJsonString(n,r)}static equals(n,r){return x.util.equals(Zs,n,r)}};v(Zs,"runtime",x),v(Zs,"typeName","wg.cosmo.node.v1.StatusCodeTypeMapping"),v(Zs,"fields",x.util.newFieldList(()=>[{no:1,name:"status_code",kind:"scalar",T:3},{no:2,name:"type_name",kind:"scalar",T:9},{no:3,name:"inject_status_code_into_body",kind:"scalar",T:8}]));var jV=Zs,eo=class eo extends $e{constructor(n){super();v(this,"fetch");v(this,"subscription");v(this,"federation");v(this,"upstreamSchema");v(this,"customScalarTypeFields",[]);x.util.initPartial(n,this)}static fromBinary(n,r){return new eo().fromBinary(n,r)}static fromJson(n,r){return new eo().fromJson(n,r)}static fromJsonString(n,r){return new eo().fromJsonString(n,r)}static equals(n,r){return x.util.equals(eo,n,r)}};v(eo,"runtime",x),v(eo,"typeName","wg.cosmo.node.v1.DataSourceCustom_GraphQL"),v(eo,"fields",x.util.newFieldList(()=>[{no:1,name:"fetch",kind:"message",T:pD},{no:2,name:"subscription",kind:"message",T:hD},{no:3,name:"federation",kind:"message",T:yD},{no:4,name:"upstream_schema",kind:"message",T:Zp},{no:6,name:"custom_scalar_type_fields",kind:"message",T:ID,repeated:!0}]));var Jp=eo,to=class to extends $e{constructor(n){super();v(this,"consumerName","");v(this,"streamName","");v(this,"consumerInactiveThreshold",0);x.util.initPartial(n,this)}static fromBinary(n,r){return new to().fromBinary(n,r)}static fromJson(n,r){return new to().fromJson(n,r)}static fromJsonString(n,r){return new to().fromJsonString(n,r)}static equals(n,r){return x.util.equals(to,n,r)}};v(to,"runtime",x),v(to,"typeName","wg.cosmo.node.v1.NatsStreamConfiguration"),v(to,"fields",x.util.newFieldList(()=>[{no:1,name:"consumer_name",kind:"scalar",T:9},{no:2,name:"stream_name",kind:"scalar",T:9},{no:3,name:"consumer_inactive_threshold",kind:"scalar",T:5}]));var Hp=to,no=class no extends $e{constructor(n){super();v(this,"engineEventConfiguration");v(this,"subjects",[]);v(this,"streamConfiguration");x.util.initPartial(n,this)}static fromBinary(n,r){return new no().fromBinary(n,r)}static fromJson(n,r){return new no().fromJson(n,r)}static fromJsonString(n,r){return new no().fromJsonString(n,r)}static equals(n,r){return x.util.equals(no,n,r)}};v(no,"runtime",x),v(no,"typeName","wg.cosmo.node.v1.NatsEventConfiguration"),v(no,"fields",x.util.newFieldList(()=>[{no:1,name:"engine_event_configuration",kind:"message",T:Do},{no:2,name:"subjects",kind:"scalar",T:9,repeated:!0},{no:3,name:"stream_configuration",kind:"message",T:Hp}]));var zp=no,ro=class ro extends $e{constructor(n){super();v(this,"engineEventConfiguration");v(this,"topics",[]);x.util.initPartial(n,this)}static fromBinary(n,r){return new ro().fromBinary(n,r)}static fromJson(n,r){return new ro().fromJson(n,r)}static fromJsonString(n,r){return new ro().fromJsonString(n,r)}static equals(n,r){return x.util.equals(ro,n,r)}};v(ro,"runtime",x),v(ro,"typeName","wg.cosmo.node.v1.KafkaEventConfiguration"),v(ro,"fields",x.util.newFieldList(()=>[{no:1,name:"engine_event_configuration",kind:"message",T:Do},{no:2,name:"topics",kind:"scalar",T:9,repeated:!0}]));var Wp=ro,io=class io extends $e{constructor(n){super();v(this,"engineEventConfiguration");v(this,"channels",[]);x.util.initPartial(n,this)}static fromBinary(n,r){return new io().fromBinary(n,r)}static fromJson(n,r){return new io().fromJson(n,r)}static fromJsonString(n,r){return new io().fromJsonString(n,r)}static equals(n,r){return x.util.equals(io,n,r)}};v(io,"runtime",x),v(io,"typeName","wg.cosmo.node.v1.RedisEventConfiguration"),v(io,"fields",x.util.newFieldList(()=>[{no:1,name:"engine_event_configuration",kind:"message",T:Do},{no:2,name:"channels",kind:"scalar",T:9,repeated:!0}]));var Xp=io,ao=class ao extends $e{constructor(n){super();v(this,"providerId","");v(this,"type",Oo.PUBLISH);v(this,"typeName","");v(this,"fieldName","");x.util.initPartial(n,this)}static fromBinary(n,r){return new ao().fromBinary(n,r)}static fromJson(n,r){return new ao().fromJson(n,r)}static fromJsonString(n,r){return new ao().fromJsonString(n,r)}static equals(n,r){return x.util.equals(ao,n,r)}};v(ao,"runtime",x),v(ao,"typeName","wg.cosmo.node.v1.EngineEventConfiguration"),v(ao,"fields",x.util.newFieldList(()=>[{no:1,name:"provider_id",kind:"scalar",T:9},{no:2,name:"type",kind:"enum",T:x.getEnumType(Oo)},{no:3,name:"type_name",kind:"scalar",T:9},{no:4,name:"field_name",kind:"scalar",T:9}]));var Do=ao,so=class so extends $e{constructor(n){super();v(this,"nats",[]);v(this,"kafka",[]);v(this,"redis",[]);x.util.initPartial(n,this)}static fromBinary(n,r){return new so().fromBinary(n,r)}static fromJson(n,r){return new so().fromJson(n,r)}static fromJsonString(n,r){return new so().fromJsonString(n,r)}static equals(n,r){return x.util.equals(so,n,r)}};v(so,"runtime",x),v(so,"typeName","wg.cosmo.node.v1.DataSourceCustomEvents"),v(so,"fields",x.util.newFieldList(()=>[{no:1,name:"nats",kind:"message",T:zp,repeated:!0},{no:2,name:"kafka",kind:"message",T:Wp,repeated:!0},{no:3,name:"redis",kind:"message",T:Xp,repeated:!0}]));var Ec=so,oo=class oo extends $e{constructor(n){super();v(this,"data");x.util.initPartial(n,this)}static fromBinary(n,r){return new oo().fromBinary(n,r)}static fromJson(n,r){return new oo().fromJson(n,r)}static fromJsonString(n,r){return new oo().fromJsonString(n,r)}static equals(n,r){return x.util.equals(oo,n,r)}};v(oo,"runtime",x),v(oo,"typeName","wg.cosmo.node.v1.DataSourceCustom_Static"),v(oo,"fields",x.util.newFieldList(()=>[{no:1,name:"data",kind:"message",T:xr}]));var fD=oo,uo=class uo extends $e{constructor(n){super();v(this,"kind",uu.STATIC_CONFIGURATION_VARIABLE);v(this,"staticVariableContent","");v(this,"environmentVariableName","");v(this,"environmentVariableDefaultValue","");v(this,"placeholderVariableName","");x.util.initPartial(n,this)}static fromBinary(n,r){return new uo().fromBinary(n,r)}static fromJson(n,r){return new uo().fromJson(n,r)}static fromJsonString(n,r){return new uo().fromJsonString(n,r)}static equals(n,r){return x.util.equals(uo,n,r)}};v(uo,"runtime",x),v(uo,"typeName","wg.cosmo.node.v1.ConfigurationVariable"),v(uo,"fields",x.util.newFieldList(()=>[{no:1,name:"kind",kind:"enum",T:x.getEnumType(uu)},{no:2,name:"static_variable_content",kind:"scalar",T:9},{no:3,name:"environment_variable_name",kind:"scalar",T:9},{no:4,name:"environment_variable_default_value",kind:"scalar",T:9},{no:5,name:"placeholder_variable_name",kind:"scalar",T:9}]));var xr=uo,co=class co extends $e{constructor(n){super();v(this,"directiveName","");v(this,"renameTo","");x.util.initPartial(n,this)}static fromBinary(n,r){return new co().fromBinary(n,r)}static fromJson(n,r){return new co().fromJson(n,r)}static fromJsonString(n,r){return new co().fromJsonString(n,r)}static equals(n,r){return x.util.equals(co,n,r)}};v(co,"runtime",x),v(co,"typeName","wg.cosmo.node.v1.DirectiveConfiguration"),v(co,"fields",x.util.newFieldList(()=>[{no:1,name:"directive_name",kind:"scalar",T:9},{no:2,name:"rename_to",kind:"scalar",T:9}]));var mD=co,lo=class lo extends $e{constructor(n){super();v(this,"name","");v(this,"value","");x.util.initPartial(n,this)}static fromBinary(n,r){return new lo().fromBinary(n,r)}static fromJson(n,r){return new lo().fromJson(n,r)}static fromJsonString(n,r){return new lo().fromJsonString(n,r)}static equals(n,r){return x.util.equals(lo,n,r)}};v(lo,"runtime",x),v(lo,"typeName","wg.cosmo.node.v1.URLQueryConfiguration"),v(lo,"fields",x.util.newFieldList(()=>[{no:1,name:"name",kind:"scalar",T:9},{no:2,name:"value",kind:"scalar",T:9}]));var ND=lo,po=class po extends $e{constructor(n){super();v(this,"values",[]);x.util.initPartial(n,this)}static fromBinary(n,r){return new po().fromBinary(n,r)}static fromJson(n,r){return new po().fromJson(n,r)}static fromJsonString(n,r){return new po().fromJsonString(n,r)}static equals(n,r){return x.util.equals(po,n,r)}};v(po,"runtime",x),v(po,"typeName","wg.cosmo.node.v1.HTTPHeader"),v(po,"fields",x.util.newFieldList(()=>[{no:1,name:"values",kind:"message",T:xr,repeated:!0}]));var TD=po,fo=class fo extends $e{constructor(n){super();v(this,"key");v(this,"cert");v(this,"insecureSkipVerify",!1);x.util.initPartial(n,this)}static fromBinary(n,r){return new fo().fromBinary(n,r)}static fromJson(n,r){return new fo().fromJson(n,r)}static fromJsonString(n,r){return new fo().fromJsonString(n,r)}static equals(n,r){return x.util.equals(fo,n,r)}};v(fo,"runtime",x),v(fo,"typeName","wg.cosmo.node.v1.MTLSConfiguration"),v(fo,"fields",x.util.newFieldList(()=>[{no:1,name:"key",kind:"message",T:xr},{no:2,name:"cert",kind:"message",T:xr},{no:3,name:"insecureSkipVerify",kind:"scalar",T:8}]));var ED=fo,mo=class mo extends $e{constructor(n){super();v(this,"enabled",!1);v(this,"url");v(this,"useSSE");v(this,"protocol");v(this,"websocketSubprotocol");x.util.initPartial(n,this)}static fromBinary(n,r){return new mo().fromBinary(n,r)}static fromJson(n,r){return new mo().fromJson(n,r)}static fromJsonString(n,r){return new mo().fromJsonString(n,r)}static equals(n,r){return x.util.equals(mo,n,r)}};v(mo,"runtime",x),v(mo,"typeName","wg.cosmo.node.v1.GraphQLSubscriptionConfiguration"),v(mo,"fields",x.util.newFieldList(()=>[{no:1,name:"enabled",kind:"scalar",T:8},{no:2,name:"url",kind:"message",T:xr},{no:3,name:"useSSE",kind:"scalar",T:8,opt:!0},{no:4,name:"protocol",kind:"enum",T:x.getEnumType(As),opt:!0},{no:5,name:"websocketSubprotocol",kind:"enum",T:x.getEnumType(Rs),opt:!0}]));var hD=mo,No=class No extends $e{constructor(n){super();v(this,"enabled",!1);v(this,"serviceSdl","");x.util.initPartial(n,this)}static fromBinary(n,r){return new No().fromBinary(n,r)}static fromJson(n,r){return new No().fromJson(n,r)}static fromJsonString(n,r){return new No().fromJsonString(n,r)}static equals(n,r){return x.util.equals(No,n,r)}};v(No,"runtime",x),v(No,"typeName","wg.cosmo.node.v1.GraphQLFederationConfiguration"),v(No,"fields",x.util.newFieldList(()=>[{no:1,name:"enabled",kind:"scalar",T:8},{no:2,name:"serviceSdl",kind:"scalar",T:9}]));var yD=No,To=class To extends $e{constructor(n){super();v(this,"key","");x.util.initPartial(n,this)}static fromBinary(n,r){return new To().fromBinary(n,r)}static fromJson(n,r){return new To().fromJson(n,r)}static fromJsonString(n,r){return new To().fromJsonString(n,r)}static equals(n,r){return x.util.equals(To,n,r)}};v(To,"runtime",x),v(To,"typeName","wg.cosmo.node.v1.InternedString"),v(To,"fields",x.util.newFieldList(()=>[{no:1,name:"key",kind:"scalar",T:9}]));var Zp=To,Eo=class Eo extends $e{constructor(n){super();v(this,"typeName","");v(this,"fieldName","");x.util.initPartial(n,this)}static fromBinary(n,r){return new Eo().fromBinary(n,r)}static fromJson(n,r){return new Eo().fromJson(n,r)}static fromJsonString(n,r){return new Eo().fromJsonString(n,r)}static equals(n,r){return x.util.equals(Eo,n,r)}};v(Eo,"runtime",x),v(Eo,"typeName","wg.cosmo.node.v1.SingleTypeField"),v(Eo,"fields",x.util.newFieldList(()=>[{no:1,name:"type_name",kind:"scalar",T:9},{no:2,name:"field_name",kind:"scalar",T:9}]));var ID=Eo,ho=class ho extends $e{constructor(n){super();v(this,"fieldPath",[]);v(this,"json","");x.util.initPartial(n,this)}static fromBinary(n,r){return new ho().fromBinary(n,r)}static fromJson(n,r){return new ho().fromJson(n,r)}static fromJsonString(n,r){return new ho().fromJsonString(n,r)}static equals(n,r){return x.util.equals(ho,n,r)}};v(ho,"runtime",x),v(ho,"typeName","wg.cosmo.node.v1.SubscriptionFieldCondition"),v(ho,"fields",x.util.newFieldList(()=>[{no:1,name:"field_path",kind:"scalar",T:9,repeated:!0},{no:2,name:"json",kind:"scalar",T:9}]));var ef=ho,Qi=class Qi extends $e{constructor(n){super();v(this,"and",[]);v(this,"in");v(this,"not");v(this,"or",[]);x.util.initPartial(n,this)}static fromBinary(n,r){return new Qi().fromBinary(n,r)}static fromJson(n,r){return new Qi().fromJson(n,r)}static fromJsonString(n,r){return new Qi().fromJsonString(n,r)}static equals(n,r){return x.util.equals(Qi,n,r)}};v(Qi,"runtime",x),v(Qi,"typeName","wg.cosmo.node.v1.SubscriptionFilterCondition"),v(Qi,"fields",x.util.newFieldList(()=>[{no:1,name:"and",kind:"message",T:Qi,repeated:!0},{no:2,name:"in",kind:"message",T:ef,opt:!0},{no:3,name:"not",kind:"message",T:Qi,opt:!0},{no:4,name:"or",kind:"message",T:Qi,repeated:!0}]));var cu=Qi,yo=class yo extends $e{constructor(n){super();v(this,"operations",[]);x.util.initPartial(n,this)}static fromBinary(n,r){return new yo().fromBinary(n,r)}static fromJson(n,r){return new yo().fromJson(n,r)}static fromJsonString(n,r){return new yo().fromJsonString(n,r)}static equals(n,r){return x.util.equals(yo,n,r)}};v(yo,"runtime",x),v(yo,"typeName","wg.cosmo.node.v1.CacheWarmerOperations"),v(yo,"fields",x.util.newFieldList(()=>[{no:1,name:"operations",kind:"message",T:gD,repeated:!0}]));var KV=yo,Io=class Io extends $e{constructor(n){super();v(this,"request");v(this,"client");x.util.initPartial(n,this)}static fromBinary(n,r){return new Io().fromBinary(n,r)}static fromJson(n,r){return new Io().fromJson(n,r)}static fromJsonString(n,r){return new Io().fromJsonString(n,r)}static equals(n,r){return x.util.equals(Io,n,r)}};v(Io,"runtime",x),v(Io,"typeName","wg.cosmo.node.v1.Operation"),v(Io,"fields",x.util.newFieldList(()=>[{no:1,name:"request",kind:"message",T:_D},{no:2,name:"client",kind:"message",T:OD}]));var gD=Io,go=class go extends $e{constructor(n){super();v(this,"operationName","");v(this,"query","");v(this,"extensions");x.util.initPartial(n,this)}static fromBinary(n,r){return new go().fromBinary(n,r)}static fromJson(n,r){return new go().fromJson(n,r)}static fromJsonString(n,r){return new go().fromJsonString(n,r)}static equals(n,r){return x.util.equals(go,n,r)}};v(go,"runtime",x),v(go,"typeName","wg.cosmo.node.v1.OperationRequest"),v(go,"fields",x.util.newFieldList(()=>[{no:1,name:"operation_name",kind:"scalar",T:9},{no:2,name:"query",kind:"scalar",T:9},{no:3,name:"extensions",kind:"message",T:vD}]));var _D=go,_o=class _o extends $e{constructor(n){super();v(this,"persistedQuery");x.util.initPartial(n,this)}static fromBinary(n,r){return new _o().fromBinary(n,r)}static fromJson(n,r){return new _o().fromJson(n,r)}static fromJsonString(n,r){return new _o().fromJsonString(n,r)}static equals(n,r){return x.util.equals(_o,n,r)}};v(_o,"runtime",x),v(_o,"typeName","wg.cosmo.node.v1.Extension"),v(_o,"fields",x.util.newFieldList(()=>[{no:1,name:"persisted_query",kind:"message",T:SD}]));var vD=_o,vo=class vo extends $e{constructor(n){super();v(this,"sha256Hash","");v(this,"version",0);x.util.initPartial(n,this)}static fromBinary(n,r){return new vo().fromBinary(n,r)}static fromJson(n,r){return new vo().fromJson(n,r)}static fromJsonString(n,r){return new vo().fromJsonString(n,r)}static equals(n,r){return x.util.equals(vo,n,r)}};v(vo,"runtime",x),v(vo,"typeName","wg.cosmo.node.v1.PersistedQuery"),v(vo,"fields",x.util.newFieldList(()=>[{no:1,name:"sha256_hash",kind:"scalar",T:9},{no:2,name:"version",kind:"scalar",T:5}]));var SD=vo,So=class So extends $e{constructor(n){super();v(this,"name","");v(this,"version","");x.util.initPartial(n,this)}static fromBinary(n,r){return new So().fromBinary(n,r)}static fromJson(n,r){return new So().fromJson(n,r)}static fromJsonString(n,r){return new So().fromJsonString(n,r)}static equals(n,r){return x.util.equals(So,n,r)}};v(So,"runtime",x),v(So,"typeName","wg.cosmo.node.v1.ClientInfo"),v(So,"fields",x.util.newFieldList(()=>[{no:1,name:"name",kind:"scalar",T:9},{no:2,name:"version",kind:"scalar",T:9}]));var OD=So;m();T();N();var Vl=os(hE(),1);function jle(e){if(!e.conditions)return;let t=[];for(let n of e.conditions){let r=[];for(let i of n.fieldCoordinatesPath){let a=i.split(".");if(a.length!==2)throw new Error(`fatal: malformed conditional field coordinates "${i}" for field set "${e.selectionSet}".`);r.push(new Qp({fieldName:a[1],typeName:a[0]}))}t.push(new Yp({fieldCoordinatesPath:r,fieldPath:n.fieldPath}))}return t}function DD(e,t,n){if(e)for(let r of e){let i=jle(r);t.push(new fc(M(M({typeName:n,fieldName:r.fieldName,selectionSet:r.selectionSet},r.disableEntityResolver?{disableEntityResolver:!0}:{}),i?{conditions:i}:{})))}}function bD(e){switch(e){case"publish":return Oo.PUBLISH;case"request":return Oo.REQUEST;case"subscribe":return Oo.SUBSCRIBE}}function GV(e){var n;let t={rootNodes:[],childNodes:[],keys:[],provides:[],events:new Ec({nats:[],kafka:[],redis:[]}),requires:[],entityInterfaces:[],interfaceObjects:[]};for(let r of e.values()){let i=r.typeName,a=[...r.fieldNames],o=new xl({typeName:i,fieldNames:a});if(r.externalFieldNames&&r.externalFieldNames.size>0&&(o.externalFieldNames=[...r.externalFieldNames]),r.isRootNode?t.rootNodes.push(o):t.childNodes.push(o),r.entityInterfaceConcreteTypeNames){let f=new ql({interfaceTypeName:i,concreteTypeNames:[...r.entityInterfaceConcreteTypeNames]});r.isInterfaceObject?t.interfaceObjects.push(f):t.entityInterfaces.push(f)}DD(r.keys,t.keys,i),DD(r.provides,t.provides,i),DD(r.requires,t.requires,i);let c=[],l=[],p=[];for(let f of(n=r.events)!=null?n:[])switch(f.providerType){case Vl.PROVIDER_TYPE_KAFKA:{l.push(new Wp({engineEventConfiguration:new Do({fieldName:f.fieldName,providerId:f.providerId,type:bD(f.type),typeName:i}),topics:f.topics}));break}case Vl.PROVIDER_TYPE_NATS:{c.push(new zp(M({engineEventConfiguration:new Do({fieldName:f.fieldName,providerId:f.providerId,type:bD(f.type),typeName:i}),subjects:f.subjects},f.streamConfiguration?{streamConfiguration:new Hp({consumerInactiveThreshold:f.streamConfiguration.consumerInactiveThreshold,consumerName:f.streamConfiguration.consumerName,streamName:f.streamConfiguration.streamName})}:{})));break}case Vl.PROVIDER_TYPE_REDIS:{p.push(new Xp({engineEventConfiguration:new Do({fieldName:f.fieldName,providerId:f.providerId,type:bD(f.type),typeName:i}),channels:f.channels}));break}default:throw new Error("Fatal: Unknown event provider.")}t.events.nats.push(...c),t.events.kafka.push(...l),t.events.redis.push(...p)}return t}function $V(e){var n,r;let t=[];for(let i of e){let a=i.argumentNames.map(f=>new Kp({name:f,sourceType:mc.FIELD_ARGUMENT})),o=new $p({argumentsConfiguration:a,fieldName:i.fieldName,typeName:i.typeName}),c=((n=i.requiredScopes)==null?void 0:n.map(f=>new Tc({requiredAndScopes:f})))||[],l=((r=i.requiredScopesByOR)==null?void 0:r.map(f=>new Tc({requiredAndScopes:f})))||[],p=c.length>0;if((i.requiresAuthentication||p)&&(o.authorizationConfiguration=new Gp({requiresAuthentication:i.requiresAuthentication||p,requiredOrScopes:c,requiredOrScopesByOr:l})),i.subscriptionFilterCondition){let f=new cu;GE(f,i.subscriptionFilterCondition),o.subscriptionFilterCondition=f}t.push(o)}return t}function GE(e,t){if(t.and!==void 0){let n=[];for(let r of t.and){let i=new cu;GE(i,r),n.push(i)}e.and=n;return}if(t.in!==void 0){e.in=new ef({fieldPath:t.in.fieldPath,json:JSON.stringify(t.in.values)});return}if(t.not!==void 0){e.not=new cu,GE(e.not,t.not);return}if(t.or!==void 0){let n=[];for(let r of t.or){let i=new cu;GE(i,r),n.push(i)}e.or=n;return}throw new Error("Fatal: Incoming SubscriptionCondition object was malformed.")}m();T();N();function AD(e){return new Error(`Normalization failed to return a ${e}.`)}function QV(e){return new Error(`Invalid router compatibility version "${e}".`)}var Kle=(e,t)=>{let n=stringHash(t);return e.stringStorage[n]=t,new Zp({key:n})},Gle=e=>{switch(e){case"ws":return As.GRAPHQL_SUBSCRIPTION_PROTOCOL_WS;case"sse":return As.GRAPHQL_SUBSCRIPTION_PROTOCOL_SSE;case"sse_post":return As.GRAPHQL_SUBSCRIPTION_PROTOCOL_SSE_POST}throw new Error(`Unsupported subscription protocol '${e}'`)},$le=e=>{switch(e){case"auto":return Rs.GRAPHQL_WEBSOCKET_SUBPROTOCOL_AUTO;case"graphql-ws":return Rs.GRAPHQL_WEBSOCKET_SUBPROTOCOL_WS;case"graphql-transport-ws":return Rs.GRAPHQL_WEBSOCKET_SUBPROTOCOL_TRANSPORT_WS}throw new Error(`Unsupported websocket subprotocol '${e}'`)},JV=function(e){if(!jl.ROUTER_COMPATIBILITY_VERSIONS.has(e.routerCompatibilityVersion))throw QV(e.routerCompatibilityVersion);let t=new Ml({defaultFlushInterval:BigInt(500),datasourceConfigurations:[],fieldConfigurations:[],graphqlSchema:"",stringStorage:{},typeConfigurations:[]});for(let n of e.subgraphs){if(!n.configurationDataByTypeName)throw AD("ConfigurationDataByTypeName");if(!n.schema)throw AD("GraphQLSchema");let r=Kle(t,nV((0,YV.lexicographicSortSchema)(n.schema))),{childNodes:i,entityInterfaces:a,events:o,interfaceObjects:c,keys:l,provides:p,requires:f,rootNodes:y}=GV(n.configurationDataByTypeName),g=Gle(n.subscriptionProtocol||"ws"),_=$le(n.websocketSubprotocol||"auto"),F,U,K;if(o.kafka.length>0||o.nats.length>0||o.redis.length>0){F=ou.PUBSUB,K=new Ec({kafka:o.kafka,nats:o.nats,redis:o.redis});let ee=de=>jl.ROOT_TYPE_NAMES.has(de.typeName),W=0,Te=0;for(;W({id:n.id,name:n.name,routingUrl:n.url})),compatibilityVersion:`${e.routerCompatibilityVersion}:${jl.COMPOSITION_VERSION}`})};m();T();N();var yc=os(Ae());function HV(e){let t;try{t=(0,yc.parse)(e.schema)}catch(n){throw new Error(`could not parse schema for Graph ${e.name}: ${n}`)}return{definitions:t,name:e.name,url:e.url}}function Qle(e){let t=(0,hc.federateSubgraphs)(e.map(HV),hc.LATEST_ROUTER_COMPATIBILITY_VERSION);if(!t.success)throw new Error(`could not federate schema: ${t.errors.map(n=>n.message).join(", ")}`);return{fieldConfigurations:t.fieldConfigurations,sdl:(0,yc.print)(t.federatedGraphAST)}}function Yle(e){let t=(0,hc.federateSubgraphs)(e.map(HV),hc.LATEST_ROUTER_COMPATIBILITY_VERSION);if(!t.success)throw new Error(`could not federate schema: ${t.errors.map(r=>r.message).join(", ")}`);return JV({federatedClientSDL:(0,yc.printSchema)(t.federatedGraphClientSchema),federatedSDL:(0,yc.printSchema)(t.federatedGraphSchema),fieldConfigurations:t.fieldConfigurations,routerCompatibilityVersion:hc.LATEST_ROUTER_COMPATIBILITY_VERSION,schemaVersionId:"",subgraphs:e.map((r,i)=>{var l,p;let a=t.subgraphConfigBySubgraphName.get(r.name),o=a==null?void 0:a.schema,c=a==null?void 0:a.configurationDataByTypeName;return{id:`${i}`,name:r.name,url:GO(r.url),sdl:r.schema,subscriptionUrl:GO((l=r.subscription_url)!=null?l:r.url),subscriptionProtocol:(p=r.subscription_protocol)!=null?p:"ws",websocketSubprotocol:r.subscription_protocol==="ws"?r.websocketSubprotocol||"auto":void 0,schema:o,configurationDataByTypeName:c}})}).toJsonString()}return $f(Jle);})(); /*! Bundled license information: @jspm/core/nodelibs/browser/buffer.js: From 0d0912d7a2c1fedae141530feb65710870ccb2d8 Mon Sep 17 00:00:00 2001 From: Alessandro Pagnin Date: Mon, 26 May 2025 15:41:48 +0200 Subject: [PATCH 068/126] feat: add Redis configuration support in schema and fixtures --- router/pkg/config/config.schema.json | 23 +++++++++++++++++++ router/pkg/config/fixtures/full.yaml | 4 ++++ .../pkg/config/testdata/config_defaults.json | 3 ++- router/pkg/config/testdata/config_full.json | 8 +++++++ 4 files changed, 37 insertions(+), 1 deletion(-) diff --git a/router/pkg/config/config.schema.json b/router/pkg/config/config.schema.json index 6ad5913426..6b7def7268 100644 --- a/router/pkg/config/config.schema.json +++ b/router/pkg/config/config.schema.json @@ -1990,6 +1990,29 @@ } } } + }, + "redis": { + "type": "array", + "description": "The Redis configuration. The Redis is used to configure the event-driven federated subscriptions.", + "items": { + "type": "object", + "additionalProperties": false, + "required": ["id", "urls"], + "properties": { + "id": { + "type": "string", + "description": "The provider ID. The provider ID is used to identify the provider in the configuration." + }, + "urls": { + "type": "array", + "description": "The list of Redis URLs. The URLs are used to connect to the Redis provider.", + "items": { + "type": "string", + "format": "hostname-port" + } + } + } + } } } } diff --git a/router/pkg/config/fixtures/full.yaml b/router/pkg/config/fixtures/full.yaml index 9565ca4198..17108dbf9c 100644 --- a/router/pkg/config/fixtures/full.yaml +++ b/router/pkg/config/fixtures/full.yaml @@ -292,6 +292,10 @@ events: sasl_plain: username: "admin" password: "admin" + redis: + - id: my-redis + urls: + - "localhost:6379" engine: enable_single_flight: true diff --git a/router/pkg/config/testdata/config_defaults.json b/router/pkg/config/testdata/config_defaults.json index 9b3727132a..3c8a167b3c 100644 --- a/router/pkg/config/testdata/config_defaults.json +++ b/router/pkg/config/testdata/config_defaults.json @@ -255,7 +255,8 @@ "Events": { "Providers": { "Nats": null, - "Kafka": null + "Kafka": null, + "Redis": null } }, "CacheWarmup": { diff --git a/router/pkg/config/testdata/config_full.json b/router/pkg/config/testdata/config_full.json index e9805df7d5..a635511335 100644 --- a/router/pkg/config/testdata/config_full.json +++ b/router/pkg/config/testdata/config_full.json @@ -523,6 +523,14 @@ "Enabled": true } } + ], + "Redis": [ + { + "ID": "my-redis", + "URLs": [ + "localhost:6379" + ] + } ] } }, From 2597f57738e427bf6ea13462c74f97bca4e98180 Mon Sep 17 00:00:00 2001 From: Alessandro Pagnin Date: Mon, 26 May 2025 15:57:46 +0200 Subject: [PATCH 069/126] chore: fix small typo --- router/pkg/pubsub/nats/provider_builder.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/router/pkg/pubsub/nats/provider_builder.go b/router/pkg/pubsub/nats/provider_builder.go index 49d6c8911b..5893898ded 100644 --- a/router/pkg/pubsub/nats/provider_builder.go +++ b/router/pkg/pubsub/nats/provider_builder.go @@ -67,8 +67,8 @@ func (p *PubSubProviderBuilder) Providers(ids []string) ([]datasource.PubSubProv func (p *PubSubProviderBuilder) EngineEventConfigurations(in *nodev1.DataSourceConfiguration) []datasource.EngineEventConfiguration { natsData := make([]datasource.EngineEventConfiguration, 0, len(in.GetCustomEvents().GetNats())) - for _, kafkaEvent := range in.GetCustomEvents().GetNats() { - natsData = append(natsData, kafkaEvent) + for _, natsEvent := range in.GetCustomEvents().GetNats() { + natsData = append(natsData, natsEvent) } return natsData From 31af4dad3ce1fc615835725f176bb275c255e684 Mon Sep 17 00:00:00 2001 From: Alessandro Pagnin Date: Mon, 26 May 2025 17:07:51 +0200 Subject: [PATCH 070/126] test: update base config to include redis operations, update structured logging tests to include Redis configuration and fix redis test --- router-tests/events/events_config_test.go | 2 +- router-tests/structured_logging_test.go | 1 + .../testenv/testdata/configWithEdfs.json | 10739 ++++++++-------- 3 files changed, 5599 insertions(+), 5143 deletions(-) diff --git a/router-tests/events/events_config_test.go b/router-tests/events/events_config_test.go index 957807acfd..50d19dbaed 100644 --- a/router-tests/events/events_config_test.go +++ b/router-tests/events/events_config_test.go @@ -55,6 +55,6 @@ func TestEventsConfig(t *testing.T) { }, func(t *testing.T, xEnv *testenv.Environment) { assert.Fail(t, "should not be called") }) - assert.ErrorContains(t, err, "failed to find Redis provider with ID") + assert.ErrorContains(t, err, "redis provider with ID my-redis is not defined") }) } diff --git a/router-tests/structured_logging_test.go b/router-tests/structured_logging_test.go index 157283d041..169f498331 100644 --- a/router-tests/structured_logging_test.go +++ b/router-tests/structured_logging_test.go @@ -158,6 +158,7 @@ func TestRouterStartLogs(t *testing.T) { RouterConfigJSONTemplate: testenv.ConfigWithEdfsJSONTemplate, EnableNats: true, EnableKafka: true, + EnableRedis: true, LogObservation: testenv.LogObservationConfig{ Enabled: true, LogLevel: zapcore.InfoLevel, diff --git a/router-tests/testenv/testdata/configWithEdfs.json b/router-tests/testenv/testdata/configWithEdfs.json index 65fc336d0e..c86ed7ebc6 100644 --- a/router-tests/testenv/testdata/configWithEdfs.json +++ b/router-tests/testenv/testdata/configWithEdfs.json @@ -1,5474 +1,5929 @@ { "engineConfig": { - "defaultFlushInterval": "500", - "datasourceConfigurations": [ - { - "kind": "GRAPHQL", - "rootNodes": [ - { - "typeName": "Query", - "fieldNames": [ - "employee", - "employeeAsList", - "employees", - "products", - "teammates", - "firstEmployee" - ] - }, - { - "typeName": "Mutation", - "fieldNames": [ - "updateEmployeeTag", - "singleUpload", - "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 multipleUpload(files: [Upload!]!): Boolean!\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": "2d13a1cb09f08b0fa816437718003adc0413e98b" - } - }, - "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 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\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": "a2004ce79c42883f0c26905f98b3b76f69fcbf1b" - } - }, - "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": "762d2fb5bb46eb251aefc68cfde989f510a980f7" - } - }, - "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" - ] - }, - { - "typeName": "Mutation", - "fieldNames": [ - "addFact" - ] - }, - { - "typeName": "Employee", - "fieldNames": [ - "id", - "products", - "notes" - ] - }, - { - "typeName": "Consultancy", - "fieldNames": [ - "upc", - "name" - ] - }, - { - "typeName": "Cosmo", - "fieldNames": [ - "upc", - "name", - "repositoryURL" - ] - } - ], - "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}\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" - }, - "upstreamSchema": { - "key": "4d960cef267543b7bd24472e73ab217ac52f3624" - } - }, - "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", - "bigAbstractResponse", - "rootFieldWithListArg", - "rootFieldWithNestedListArg", - "rootFieldWithListOfInputArg", - "rootFieldWithListOfEnumArg", - "rootFieldWithInput", - "floatField", - "sharedThings" - ] - }, - { - "typeName": "Subscription", - "fieldNames": [ - "headerValue", - "initPayloadValue", - "initialPayload", - "returnsError" - ] - }, - { - "typeName": "Employee", - "fieldNames": [ - "id", - "fieldThrowsError" - ] - } - ], - "childNodes": [ - { - "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 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\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": "240c0d7c6ae4413fe2b491a5d03a8e65638437ea" - } - }, - "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 updateAvailability(employeeID: Int!, isAvailable: Boolean!): Employee!\n}\ntype Employee @key(fields: \"id\") {\n id: Int!\n isAvailable: Boolean!\n}\n" - }, - "upstreamSchema": { - "key": "c8333d72d5932f614528df92392ef7302f90858a" - } - }, - "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 updateMood(employeeID: Int!, mood: Mood!): Employee!\n}\n\nenum Mood {\n HAPPY\n SAD\n}\n\ntype Employee @key(fields: \"id\") {\n id: Int!\n currentMood: Mood!\n}\n" - }, - "upstreamSchema": { - "key": "5a9fb4590b3a3d9aae43f5dd99719064f6f57783" - } - }, - "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": "991f4fcb3e42d335889684af6c8737f49a9b7079" - } - }, - "requestTimeoutSeconds": "10", - "id": "7", - "keys": [ - { - "typeName": "Country", - "selectionSet": "key { name }" - } - ] - }, - { - "kind": "PUBSUB", - "rootNodes": [ - { - "typeName": "Query", - "fieldNames": [ - "employeeFromEvent", - "employeeFromEventMyNats" - ] - }, - { - "typeName": "Mutation", - "fieldNames": [ - "updateEmployeeMyKafka", - "updateEmployeeMyNats" - ] - }, - { - "typeName": "Subscription", - "fieldNames": [ - "employeeUpdated", - "employeeUpdatedMyKafka", - "employeeUpdatedMyNats", - "employeeUpdatedNatsStream", - "filteredEmployeeUpdated", - "filteredEmployeeUpdatedMyKafka", - "filteredEmployeeUpdatedMyKafkaWithListFieldArguments", - "filteredEmployeeUpdatedMyKafkaWithNestedListFieldArgument" - ] - } - ], - "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" - ] - } - ] - } - } - ], - "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": "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": "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": "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": "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": "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" - ] - } - ] - } - }, - { - "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": "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": [ + "defaultFlushInterval": "500", + "datasourceConfigurations": [ { - "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": "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" - ] - } - ] - } - }, - { - "typeName": "Query", - "fieldName": "topSecretFederationFacts", - "authorizationConfiguration": { - "requiresAuthentication": true, - "requiredOrScopes": [ - { - "requiredAndScopes": [ - "read:fact" - ] - }, - { - "requiredAndScopes": [ - "read:all" - ] - } - ] - } - }, - { - "typeName": "Query", - "fieldName": "factTypes", - "authorizationConfiguration": { - "requiresAuthentication": true - } - }, - { - "typeName": "MiscellaneousFact", - "fieldName": "description", - "authorizationConfiguration": { - "requiresAuthentication": true, - "requiredOrScopes": [ - { - "requiredAndScopes": [ - "read:miscellaneous", - "read:scalar" - ] - }, - { - "requiredAndScopes": [ - "read:miscellaneous", - "read:all" - ] - } - ] - } - }, - { - "typeName": "MiscellaneousFact", - "fieldName": "factType", - "authorizationConfiguration": { - "requiresAuthentication": true - } - }, - { - "typeName": "TopSecretFact", - "fieldName": "description", - "authorizationConfiguration": { - "requiresAuthentication": true, - "requiredOrScopes": [ - { - "requiredAndScopes": [ - "read:scalar" - ] - }, - { - "requiredAndScopes": [ - "read:all" - ] - } - ] - } - }, - { - "typeName": "TopSecretFact", - "fieldName": "factType", - "authorizationConfiguration": { - "requiresAuthentication": true - } - }, - { - "typeName": "DirectiveFact", - "fieldName": "title", - "authorizationConfiguration": { - "requiresAuthentication": true - } - }, - { - "typeName": "DirectiveFact", - "fieldName": "description", - "authorizationConfiguration": { - "requiresAuthentication": true, - "requiredOrScopes": [ - { - "requiredAndScopes": [ - "read:scalar" - ] - }, - { - "requiredAndScopes": [ - "read:all" - ] - } - ] - } - }, - { - "typeName": "DirectiveFact", - "fieldName": "factType", - "authorizationConfiguration": { - "requiresAuthentication": true - } - }, - { - "typeName": "EntityFact", - "fieldName": "title", - "authorizationConfiguration": { - "requiresAuthentication": true, - "requiredOrScopes": [ - { - "requiredAndScopes": [ - "read:entity" - ] - } - ] - } - }, - { - "typeName": "EntityFact", - "fieldName": "description", - "authorizationConfiguration": { - "requiresAuthentication": true, - "requiredOrScopes": [ - { - "requiredAndScopes": [ - "read:entity", - "read:scalar" - ] - }, - { - "requiredAndScopes": [ - "read:entity", - "read:all" - ] - } - ] - } - }, - { - "typeName": "EntityFact", - "fieldName": "factType", - "authorizationConfiguration": { - "requiresAuthentication": true, - "requiredOrScopes": [ - { - "requiredAndScopes": [ - "read:entity" - ] - } - ] - } - } - ], - "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\nunion Products = Consultancy | Cosmo | SDK | Documentation\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 findEmployees(criteria: SearchInput): [Employee!]!\n productTypes: [Products!]!\n topSecretFederationFacts: [TopSecretFact!]! @requiresScopes(scopes: [[\"read:fact\"], [\"read:all\"]])\n factTypes: [TopSecretFactType!] @authenticated\n sharedThings(numOfA: Int!, numOfB: Int!): [Thing!]!\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 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 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 multipleUpload(files: [Upload!]!): Boolean!\n addFact(fact: TopSecretFactInput!): TopSecretFact! @requiresScopes(scopes: [[\"write:fact\"], [\"write:all\"]])\n updateAvailability(employeeID: Int!, isAvailable: Boolean!): 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}\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 filteredEmployeeUpdated(id: Int!): Employee!\n filteredEmployeeUpdatedMyKafka(employeeID: ID!): Employee!\n filteredEmployeeUpdatedMyKafkaWithListFieldArguments(firstIds: [ID!]!, secondIds: [ID!]!): Employee!\n filteredEmployeeUpdatedMyKafkaWithNestedListFieldArgument(input: KafkaInput!): 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}\n\ntype ErrorWrapper {\n okField: String\n errorField: String\n}\n\ntype Time {\n unixTime: Int!\n timeStamp: String!\n}\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\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! @authenticated @requiresScopes(scopes: [[\"read:scalar\"], [\"read:all\"]])\n factType: TopSecretFactType @authenticated\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\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\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\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 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! @authenticated\n description: FactContent! @authenticated @requiresScopes(scopes: [[\"read:scalar\"], [\"read:all\"]])\n factType: TopSecretFactType @authenticated\n}\n\ntype EntityFact implements TopSecretFact {\n title: String! @requiresScopes(scopes: [[\"read:entity\"]])\n description: FactContent! @authenticated @requiresScopes(scopes: [[\"read:entity\", \"read:scalar\"], [\"read:entity\", \"read:all\"]])\n factType: TopSecretFactType @authenticated @requiresScopes(scopes: [[\"read:entity\"]])\n}\n\ntype MiscellaneousFact implements TopSecretFact {\n title: String!\n description: FactContent! @authenticated @requiresScopes(scopes: [[\"read:miscellaneous\", \"read:scalar\"], [\"read:miscellaneous\", \"read:all\"]])\n factType: TopSecretFactType @authenticated\n}", - "stringStorage": { - "2d13a1cb09f08b0fa816437718003adc0413e98b": "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 @link(as: String, for: String, import: [String], url: String!) repeatable on SCHEMA\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 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\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\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 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", - "a2004ce79c42883f0c26905f98b3b76f69fcbf1b": "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 @link(as: String, for: String, import: [String], url: String!) repeatable on SCHEMA\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 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 findEmployees(criteria: SearchInput): [Employee!]!\n}\n\ninput SearchInput {\n hasPets: Boolean\n nationality: Nationality\n nested: NestedSearchInput\n}\n\nscalar openfed__FieldSet\n\nscalar openfed__Scope", - "762d2fb5bb46eb251aefc68cfde989f510a980f7": "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 @link(as: String, for: String, import: [String], url: String!) repeatable on SCHEMA\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 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", - "4d960cef267543b7bd24472e73ab217ac52f3624": "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 @link(as: String, for: String, import: [String], url: String!) repeatable on SCHEMA\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 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 {\n description: FactContent! @authenticated @requiresScopes(scopes: [[\"read:scalar\"], [\"read:all\"]])\n factType: TopSecretFactType @authenticated\n title: String! @authenticated\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\n products: [ProductName!]!\n}\n\ntype EntityFact implements TopSecretFact {\n description: FactContent! @authenticated @requiresScopes(scopes: [[\"read:entity\", \"read:scalar\"], [\"read:entity\", \"read:all\"]])\n factType: TopSecretFactType @authenticated @requiresScopes(scopes: [[\"read:entity\"]])\n title: String! @requiresScopes(scopes: [[\"read:entity\"]])\n}\n\nscalar FactContent\n\ntype MiscellaneousFact implements TopSecretFact {\n description: FactContent! @authenticated @requiresScopes(scopes: [[\"read:miscellaneous\", \"read:scalar\"], [\"read:miscellaneous\", \"read:all\"]])\n factType: TopSecretFactType @authenticated\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 sharedThings(numOfA: Int!, numOfB: Int!): [Thing!]! @shareable\n topSecretFederationFacts: [TopSecretFact!]!\n}\n\ntype Thing {\n a: String! @shareable\n}\n\ninterface TopSecretFact {\n description: FactContent! @authenticated @requiresScopes(scopes: [[\"read:scalar\"], [\"read:all\"]])\n factType: TopSecretFactType @authenticated\n}\n\ninput TopSecretFactInput {\n description: FactContent!\n factType: TopSecretFactType!\n title: String!\n}\n\nenum TopSecretFactType {\n DIRECTIVE\n ENTITY\n MISCELLANEOUS\n}\n\nscalar openfed__FieldSet\n\nscalar openfed__Scope", - "240c0d7c6ae4413fe2b491a5d03a8e65638437ea": "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 @link(as: String, for: String, import: [String], url: String!) repeatable on SCHEMA\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 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 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 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 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", - "c8333d72d5932f614528df92392ef7302f90858a": "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 @link(as: String, for: String, import: [String], url: String!) repeatable on SCHEMA\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 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 updateAvailability(employeeID: Int!, isAvailable: Boolean!): Employee!\n}\n\nscalar openfed__FieldSet\n\nscalar openfed__Scope", - "5a9fb4590b3a3d9aae43f5dd99719064f6f57783": "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 @link(as: String, for: String, import: [String], url: String!) repeatable on SCHEMA\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 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 HAPPY\n SAD\n}\n\ntype Mutation {\n updateMood(employeeID: Int!, mood: Mood!): Employee!\n}\n\nscalar openfed__FieldSet\n\nscalar openfed__Scope", - "991f4fcb3e42d335889684af6c8737f49a9b7079": "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 @link(as: String, for: String, import: [String], url: String!) repeatable on SCHEMA\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 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", - "5208a01e1056994295a616bcc7260e65dec66795": "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__kafkaPublish(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 @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}\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 employeeUpdatedNatsStream(id: Int!): Employee! @edfs__natsSubscribe(subjects: [\"employeeUpdated.{{ args.id }}\"], streamConfiguration: {consumerName: \"consumerName\", streamName: \"streamName\"})\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}\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": "directive @authenticated on ENUM | FIELD_DEFINITION | INTERFACE | OBJECT | SCALAR\n\ndirective @requiresScopes(scopes: [[openfed__Scope!]!]!) on ENUM | FIELD_DEFINITION | INTERFACE | OBJECT | SCALAR\n\nscalar openfed__Scope\n\nunion Products = Consultancy | Cosmo | SDK | Documentation\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!\n findEmployees(criteria: SearchInput): [Employee!]!\n productTypes: [Products!]!\n topSecretFederationFacts: [TopSecretFact!]!\n factTypes: [TopSecretFactType!]\n sharedThings(numOfA: Int!, numOfB: Int!): [Thing!]!\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 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 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 multipleUpload(files: [Upload!]!): Boolean!\n addFact(fact: TopSecretFactInput!): TopSecretFact!\n updateAvailability(employeeID: Int!, isAvailable: Boolean!): 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}\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 filteredEmployeeUpdated(id: Int!): Employee!\n filteredEmployeeUpdatedMyKafka(employeeID: ID!): Employee!\n filteredEmployeeUpdatedMyKafkaWithListFieldArguments(firstIds: [ID!]!, secondIds: [ID!]!): Employee!\n filteredEmployeeUpdatedMyKafkaWithNestedListFieldArgument(input: KafkaInput!): 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\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\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\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\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\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 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}" - }, - "version": "f4741461-3eaa-4075-98f5-ca95dc61075f", - "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" - } - ], - "featureFlagConfigs": { - "configByFeatureFlagName": { - "myff": { - "engineConfig": { - "defaultFlushInterval": "500", - "datasourceConfigurations": [ - { "kind": "GRAPHQL", "rootNodes": [ - { - "typeName": "Query", - "fieldNames": [ - "employee", - "employeeAsList", - "employees", - "products", - "teammates", - "firstEmployee" - ] - }, - { - "typeName": "Mutation", - "fieldNames": [ - "updateEmployeeTag", - "singleUpload", - "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" - ] - } + { + "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" - ] - } + { + "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 multipleUpload(files: [Upload!]!): Boolean!\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": "2d13a1cb09f08b0fa816437718003adc0413e98b" - } + "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" - } + { + "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 }" - } + { + "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" - ] - } + { + "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" - ] - } + { + "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 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\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": "a2004ce79c42883f0c26905f98b3b76f69fcbf1b" - } + "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" - } + { + "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" - ] - } + { + "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" - ] - } + { + "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": "762d2fb5bb46eb251aefc68cfde989f510a980f7" - } + "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" - } + { + "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" - ] - } + { + "typeName": "Query", + "fieldNames": [ + "productTypes", + "topSecretFederationFacts", + "factTypes", + "sharedThings" + ] + }, + { + "typeName": "Mutation", + "fieldNames": [ + "addFact" + ] + }, + { + "typeName": "Employee", + "fieldNames": [ + "id", + "products", + "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" - ] - } + { + "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: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": "4bcd0a5073400055343f65089fd0cb374a5c691c" - } + "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}\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" + }, + "upstreamSchema": { + "key": "c8cc058566134270eaf1cf6638137eec5a7de07e" + } }, "requestTimeoutSeconds": "10", "id": "3", "keys": [ - { - "typeName": "Employee", - "selectionSet": "id" - }, - { - "typeName": "Consultancy", - "selectionSet": "upc" - }, - { - "typeName": "Cosmo", - "selectionSet": "upc" - } + { + "typeName": "Employee", + "selectionSet": "id" + }, + { + "typeName": "Consultancy", + "selectionSet": "upc" + }, + { + "typeName": "Cosmo", + "selectionSet": "upc" + } ] - }, - { + }, + { "kind": "GRAPHQL", "rootNodes": [ - { - "typeName": "Query", - "fieldNames": [ - "headerValue", - "initPayloadValue", - "initialPayload", - "delay", - "bigResponse", - "bigAbstractResponse", - "rootFieldWithListArg", - "rootFieldWithNestedListArg", - "rootFieldWithListOfInputArg", - "rootFieldWithListOfEnumArg", - "rootFieldWithInput", - "floatField", - "sharedThings" - ] - }, - { - "typeName": "Subscription", - "fieldNames": [ - "headerValue", - "initPayloadValue", - "initialPayload", - "returnsError" - ] - }, - { - "typeName": "Employee", - "fieldNames": [ - "id", - "fieldThrowsError" - ] - } + { + "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": "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" - ] - } + { + "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 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\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": "240c0d7c6ae4413fe2b491a5d03a8e65638437ea" - } + "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" - } + { + "typeName": "Employee", + "selectionSet": "id" + } ] - }, - { + }, + { "kind": "GRAPHQL", "rootNodes": [ - { - "typeName": "Mutation", - "fieldNames": [ - "updateAvailability" - ] - }, - { - "typeName": "Employee", - "fieldNames": [ - "id", - "isAvailable" - ] - } + { + "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 updateAvailability(employeeID: Int!, isAvailable: Boolean!): Employee!\n}\ntype Employee @key(fields: \"id\") {\n id: Int!\n isAvailable: Boolean!\n}\n" - }, - "upstreamSchema": { - "key": "c8333d72d5932f614528df92392ef7302f90858a" - } + "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" - } + { + "typeName": "Employee", + "selectionSet": "id" + } ] - }, - { + }, + { "kind": "GRAPHQL", "rootNodes": [ - { - "typeName": "Mutation", - "fieldNames": [ - "updateMood" - ] - }, - { - "typeName": "Employee", - "fieldNames": [ - "id", - "currentMood" - ] - } + { + "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 updateMood(employeeID: Int!, mood: Mood!): Employee!\n}\n\nenum Mood {\n HAPPY\n SAD\n}\n\ntype Employee @key(fields: \"id\") {\n id: Int!\n currentMood: Mood!\n}\n" - }, - "upstreamSchema": { - "key": "5a9fb4590b3a3d9aae43f5dd99719064f6f57783" - } + "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" - } + { + "typeName": "Employee", + "selectionSet": "id" + } ] - }, - { + }, + { "kind": "GRAPHQL", "rootNodes": [ - { - "typeName": "Country", - "fieldNames": [ - "key", - "language" - ] - } + { + "typeName": "Country", + "fieldNames": [ + "key", + "language" + ] + } ], "childNodes": [ - { - "typeName": "CountryKey", - "fieldNames": [ - "name" - ] - } + { + "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": "991f4fcb3e42d335889684af6c8737f49a9b7079" - } + "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 }" - } + { + "typeName": "Country", + "selectionSet": "key { name }" + } ] - }, - { + }, + { "kind": "PUBSUB", "rootNodes": [ - { - "typeName": "Query", - "fieldNames": [ - "employeeFromEvent", - "employeeFromEventMyNats" - ] - }, - { - "typeName": "Mutation", - "fieldNames": [ - "updateEmployeeMyKafka", - "updateEmployeeMyNats" - ] - }, - { - "typeName": "Subscription", - "fieldNames": [ - "employeeUpdated", - "employeeUpdatedMyKafka", - "employeeUpdatedMyNats", - "employeeUpdatedNatsStream", - "filteredEmployeeUpdated", - "filteredEmployeeUpdatedMyKafka", - "filteredEmployeeUpdatedMyKafkaWithListFieldArguments", - "filteredEmployeeUpdatedMyKafkaWithNestedListFieldArgument" - ] - } - ], - "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 }}" - ] + "fieldNames": [ + "employeeFromEvent", + "employeeFromEventMyNats" + ] }, { - "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 }}" - ] + "fieldNames": [ + "updateEmployeeMyKafka", + "updateEmployeeMyNats", + "updateEmployeeMyRedis", + "updateEmployeeMyRedisOnCustomChannel" + ] }, { - "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 }}" - ] + "fieldNames": [ + "employeeUpdated", + "employeeUpdatedMyKafka", + "employeeUpdatedMyNats", + "employeeUpdatedNatsStream", + "employeeUpdatedMyRedis", + "employeeUpdates", + "filteredEmployeeUpdated", + "filteredEmployeeUpdatedMyKafka", + "filteredEmployeeUpdatedMyKafkaWithListFieldArguments", + "filteredEmployeeUpdatedMyKafkaWithNestedListFieldArgument", + "filteredEmployeeUpdatedMyRedis" + ] } - ], - "kafka": [ - { - "engineEventConfiguration": { - "providerId": "my-kafka", - "typeName": "Mutation", - "fieldName": "updateEmployeeMyKafka" - }, - "topics": [ - "employeeUpdated" - ] - }, - { - "engineEventConfiguration": { - "providerId": "my-kafka", - "type": "SUBSCRIBE", - "typeName": "Subscription", - "fieldName": "employeeUpdatedMyKafka" - }, - "topics": [ - "employeeUpdated", - "employeeUpdatedTwo" - ] - }, + ], + "childNodes": [ { - "engineEventConfiguration": { - "providerId": "my-kafka", - "type": "SUBSCRIBE", - "typeName": "Subscription", - "fieldName": "filteredEmployeeUpdatedMyKafka" - }, - "topics": [ - "employeeUpdated", - "employeeUpdatedTwo" - ] + "typeName": "edfs__PublishResult", + "fieldNames": [ + "success" + ] }, { - "engineEventConfiguration": { - "providerId": "my-kafka", - "type": "SUBSCRIBE", - "typeName": "Subscription", - "fieldName": "filteredEmployeeUpdatedMyKafkaWithListFieldArguments" - }, - "topics": [ - "employeeUpdated", - "employeeUpdatedTwo" - ] - }, + "typeName": "Employee", + "fieldNames": [ + "id" + ], + "externalFieldNames": [ + "id" + ] + } + ], + "overrideFieldPathFromAlias": true, + "requestTimeoutSeconds": "10", + "id": "8", + "keys": [ { - "engineEventConfiguration": { - "providerId": "my-kafka", - "type": "SUBSCRIBE", - "typeName": "Subscription", - "fieldName": "filteredEmployeeUpdatedMyKafkaWithNestedListFieldArgument" - }, - "topics": [ - "employeeUpdated", - "employeeUpdatedTwo" - ] + "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": [ - { + } + ], + "fieldConfigurations": [ + { "typeName": "Subscription", "fieldName": "filteredEmployeeUpdated", "argumentsConfiguration": [ - { - "name": "id", - "sourceType": "FIELD_ARGUMENT" - } + { + "name": "id", + "sourceType": "FIELD_ARGUMENT" + } ], "subscriptionFilterCondition": { - "not": { - "in": { - "fieldPath": [ - "id" - ], - "json": "[2,6,9,10,12]" + "not": { + "in": { + "fieldPath": [ + "id" + ], + "json": "[2,6,9,10,12]" + } } - } } - }, - { + }, + { "typeName": "Subscription", "fieldName": "filteredEmployeeUpdatedMyKafka", "argumentsConfiguration": [ - { - "name": "employeeID", - "sourceType": "FIELD_ARGUMENT" - } + { + "name": "employeeID", + "sourceType": "FIELD_ARGUMENT" + } ], "subscriptionFilterCondition": { - "in": { - "fieldPath": [ - "id" - ], - "json": "[1,3,4,7,11]" - } + "in": { + "fieldPath": [ + "id" + ], + "json": "[1,3,4,7,11]" + } } - }, - { + }, + { "typeName": "Subscription", "fieldName": "filteredEmployeeUpdatedMyKafkaWithListFieldArguments", "argumentsConfiguration": [ - { - "name": "firstIds", - "sourceType": "FIELD_ARGUMENT" - }, - { - "name": "secondIds", - "sourceType": "FIELD_ARGUMENT" - } + { + "name": "firstIds", + "sourceType": "FIELD_ARGUMENT" + }, + { + "name": "secondIds", + "sourceType": "FIELD_ARGUMENT" + } ], "subscriptionFilterCondition": { - "in": { - "fieldPath": [ - "id" - ], - "json": "[\"{{ args.firstIds }}\",\"{{ args.secondIds }}\"]" - } + "in": { + "fieldPath": [ + "id" + ], + "json": "[\"{{ args.firstIds }}\",\"{{ args.secondIds }}\"]" + } } - }, - { + }, + { "typeName": "Subscription", "fieldName": "filteredEmployeeUpdatedMyKafkaWithNestedListFieldArgument", "argumentsConfiguration": [ - { - "name": "input", - "sourceType": "FIELD_ARGUMENT" - } + { + "name": "input", + "sourceType": "FIELD_ARGUMENT" + } ], "subscriptionFilterCondition": { - "or": [ - { - "in": { - "fieldPath": [ - "id" - ], - "json": "[\"{{ args.input.ids }}\"]" - } - }, + "or": [ + { + "in": { + "fieldPath": [ + "id" + ], + "json": "[\"{{ args.input.ids }}\"]" + } + }, + { + "in": { + "fieldPath": [ + "id" + ], + "json": "[\"1\"]" + } + } + ] + } + }, + { + "typeName": "Subscription", + "fieldName": "filteredEmployeeUpdatedMyRedis", + "argumentsConfiguration": [ { - "in": { + "name": "id", + "sourceType": "FIELD_ARGUMENT" + } + ], + "subscriptionFilterCondition": { + "in": { "fieldPath": [ - "id" + "id" ], - "json": "[\"1\"]" - } + "json": "[1,3,4,7,11]" } - ] } - }, - { + }, + { "typeName": "Query", "fieldName": "employee", "argumentsConfiguration": [ - { - "name": "id", - "sourceType": "FIELD_ARGUMENT" - } + { + "name": "id", + "sourceType": "FIELD_ARGUMENT" + } ] - }, - { + }, + { "typeName": "Query", "fieldName": "employeeAsList", "argumentsConfiguration": [ - { - "name": "id", - "sourceType": "FIELD_ARGUMENT" - } + { + "name": "id", + "sourceType": "FIELD_ARGUMENT" + } ] - }, - { + }, + { "typeName": "Query", "fieldName": "teammates", "argumentsConfiguration": [ - { - "name": "team", - "sourceType": "FIELD_ARGUMENT" - } + { + "name": "team", + "sourceType": "FIELD_ARGUMENT" + } ] - }, - { + }, + { "typeName": "Query", "fieldName": "findEmployees", "argumentsConfiguration": [ - { - "name": "criteria", - "sourceType": "FIELD_ARGUMENT" - } + { + "name": "criteria", + "sourceType": "FIELD_ARGUMENT" + } + ] + }, + { + "typeName": "Query", + "fieldName": "sharedThings", + "argumentsConfiguration": [ + { + "name": "numOfA", + "sourceType": "FIELD_ARGUMENT" + }, + { + "name": "numOfB", + "sourceType": "FIELD_ARGUMENT" + } ] - }, - { + }, + { "typeName": "Query", "fieldName": "headerValue", "argumentsConfiguration": [ - { - "name": "name", - "sourceType": "FIELD_ARGUMENT" - } + { + "name": "name", + "sourceType": "FIELD_ARGUMENT" + } ] - }, - { + }, + { "typeName": "Query", "fieldName": "initPayloadValue", "argumentsConfiguration": [ - { - "name": "key", - "sourceType": "FIELD_ARGUMENT" - } + { + "name": "key", + "sourceType": "FIELD_ARGUMENT" + } ] - }, - { + }, + { "typeName": "Query", "fieldName": "delay", "argumentsConfiguration": [ - { - "name": "response", - "sourceType": "FIELD_ARGUMENT" - }, - { - "name": "ms", - "sourceType": "FIELD_ARGUMENT" - } + { + "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" - } + { + "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" - } + { + "name": "arg", + "sourceType": "FIELD_ARGUMENT" + } ] - }, - { + }, + { "typeName": "Query", "fieldName": "rootFieldWithNestedListArg", "argumentsConfiguration": [ - { - "name": "arg", - "sourceType": "FIELD_ARGUMENT" - } + { + "name": "arg", + "sourceType": "FIELD_ARGUMENT" + } ] - }, - { + }, + { "typeName": "Query", "fieldName": "rootFieldWithListOfInputArg", "argumentsConfiguration": [ - { - "name": "arg", - "sourceType": "FIELD_ARGUMENT" - } + { + "name": "arg", + "sourceType": "FIELD_ARGUMENT" + } ] - }, - { + }, + { "typeName": "Query", "fieldName": "rootFieldWithListOfEnumArg", "argumentsConfiguration": [ - { - "name": "arg", - "sourceType": "FIELD_ARGUMENT" - } + { + "name": "arg", + "sourceType": "FIELD_ARGUMENT" + } ] - }, - { + }, + { "typeName": "Query", "fieldName": "rootFieldWithInput", "argumentsConfiguration": [ - { - "name": "arg", - "sourceType": "FIELD_ARGUMENT" - } + { + "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" - } + { + "name": "arg", + "sourceType": "FIELD_ARGUMENT" + } ] - }, - { + }, + { "typeName": "Query", "fieldName": "employeeFromEvent", "argumentsConfiguration": [ - { - "name": "id", - "sourceType": "FIELD_ARGUMENT" - } + { + "name": "id", + "sourceType": "FIELD_ARGUMENT" + } ] - }, - { + }, + { "typeName": "Query", "fieldName": "employeeFromEventMyNats", "argumentsConfiguration": [ - { - "name": "employeeID", - "sourceType": "FIELD_ARGUMENT" - } + { + "name": "employeeID", + "sourceType": "FIELD_ARGUMENT" + } ] - }, - { + }, + { "typeName": "Mutation", "fieldName": "updateEmployeeTag", "argumentsConfiguration": [ - { - "name": "id", - "sourceType": "FIELD_ARGUMENT" - }, - { - "name": "tag", - "sourceType": "FIELD_ARGUMENT" - } + { + "name": "id", + "sourceType": "FIELD_ARGUMENT" + }, + { + "name": "tag", + "sourceType": "FIELD_ARGUMENT" + } ] - }, - { + }, + { "typeName": "Mutation", "fieldName": "singleUpload", "argumentsConfiguration": [ - { - "name": "file", - "sourceType": "FIELD_ARGUMENT" - } + { + "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" - } + { + "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": "addFact", + "fieldName": "updateMood", "argumentsConfiguration": [ - { - "name": "fact", - "sourceType": "FIELD_ARGUMENT" - } - ], - "authorizationConfiguration": { - "requiresAuthentication": true, - "requiredOrScopes": [ { - "requiredAndScopes": [ - "write:fact" - ] + "name": "employeeID", + "sourceType": "FIELD_ARGUMENT" }, { - "requiredAndScopes": [ - "write:all" - ] + "name": "mood", + "sourceType": "FIELD_ARGUMENT" } - ] - } - }, - { + ] + }, + { "typeName": "Mutation", - "fieldName": "updateAvailability", + "fieldName": "updateEmployeeMyKafka", "argumentsConfiguration": [ - { - "name": "employeeID", - "sourceType": "FIELD_ARGUMENT" - }, - { - "name": "isAvailable", - "sourceType": "FIELD_ARGUMENT" - } + { + "name": "employeeID", + "sourceType": "FIELD_ARGUMENT" + }, + { + "name": "update", + "sourceType": "FIELD_ARGUMENT" + } ] - }, - { + }, + { "typeName": "Mutation", - "fieldName": "updateMood", + "fieldName": "updateEmployeeMyNats", "argumentsConfiguration": [ - { - "name": "employeeID", - "sourceType": "FIELD_ARGUMENT" - }, - { - "name": "mood", - "sourceType": "FIELD_ARGUMENT" - } + { + "name": "id", + "sourceType": "FIELD_ARGUMENT" + }, + { + "name": "update", + "sourceType": "FIELD_ARGUMENT" + } ] - }, - { + }, + { "typeName": "Mutation", - "fieldName": "updateEmployeeMyKafka", + "fieldName": "updateEmployeeMyRedis", "argumentsConfiguration": [ - { - "name": "employeeID", - "sourceType": "FIELD_ARGUMENT" - }, - { - "name": "update", - "sourceType": "FIELD_ARGUMENT" - } + { + "name": "id", + "sourceType": "FIELD_ARGUMENT" + }, + { + "name": "update", + "sourceType": "FIELD_ARGUMENT" + } ] - }, - { + }, + { "typeName": "Mutation", - "fieldName": "updateEmployeeMyNats", + "fieldName": "updateEmployeeMyRedisOnCustomChannel", "argumentsConfiguration": [ - { - "name": "id", - "sourceType": "FIELD_ARGUMENT" - }, - { - "name": "update", - "sourceType": "FIELD_ARGUMENT" - } + { + "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" - } + { + "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" - } + { + "name": "max", + "sourceType": "FIELD_ARGUMENT" + }, + { + "name": "intervalMilliseconds", + "sourceType": "FIELD_ARGUMENT" + } ] - }, - { + }, + { "typeName": "Subscription", "fieldName": "countFor", "argumentsConfiguration": [ - { - "name": "count", - "sourceType": "FIELD_ARGUMENT" - } + { + "name": "count", + "sourceType": "FIELD_ARGUMENT" + } ] - }, - { + }, + { "typeName": "Subscription", "fieldName": "countHob", "argumentsConfiguration": [ - { - "name": "max", - "sourceType": "FIELD_ARGUMENT" - }, - { - "name": "intervalMilliseconds", - "sourceType": "FIELD_ARGUMENT" - } + { + "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" - } + { + "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" - } + { + "name": "key", + "sourceType": "FIELD_ARGUMENT" + }, + { + "name": "repeat", + "sourceType": "FIELD_ARGUMENT" + } ] - }, - { + }, + { "typeName": "Subscription", "fieldName": "initialPayload", "argumentsConfiguration": [ - { - "name": "repeat", - "sourceType": "FIELD_ARGUMENT" - } + { + "name": "repeat", + "sourceType": "FIELD_ARGUMENT" + } ] - }, - { + }, + { "typeName": "Subscription", "fieldName": "employeeUpdated", "argumentsConfiguration": [ - { - "name": "employeeID", - "sourceType": "FIELD_ARGUMENT" - } + { + "name": "employeeID", + "sourceType": "FIELD_ARGUMENT" + } ] - }, - { + }, + { "typeName": "Subscription", "fieldName": "employeeUpdatedMyKafka", "argumentsConfiguration": [ - { - "name": "employeeID", - "sourceType": "FIELD_ARGUMENT" - } + { + "name": "employeeID", + "sourceType": "FIELD_ARGUMENT" + } ] - }, - { + }, + { "typeName": "Subscription", "fieldName": "employeeUpdatedMyNats", "argumentsConfiguration": [ - { - "name": "id", - "sourceType": "FIELD_ARGUMENT" - } + { + "name": "id", + "sourceType": "FIELD_ARGUMENT" + } ] - }, - { + }, + { "typeName": "Subscription", "fieldName": "employeeUpdatedNatsStream", "argumentsConfiguration": [ - { - "name": "id", - "sourceType": "FIELD_ARGUMENT" - } + { + "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" - } + { + "name": "product", + "sourceType": "FIELD_ARGUMENT" + } ] - }, - { + }, + { "typeName": "Documentation", "fieldName": "urls", "argumentsConfiguration": [ - { - "name": "products", - "sourceType": "FIELD_ARGUMENT" - } + { + "name": "products", + "sourceType": "FIELD_ARGUMENT" + } ] - }, - { + }, + { "typeName": "Employee", "fieldName": "startDate", "authorizationConfiguration": { - "requiresAuthentication": true, - "requiredOrScopes": [ - { - "requiredAndScopes": [ - "read:employee", - "read:private" - ] - }, - { - "requiredAndScopes": [ - "read:all" - ] - } - ] + "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" - ] - } - ] + "requiresAuthentication": true, + "requiredOrScopes": [ + { + "requiredAndScopes": [ + "read:fact" + ] + }, + { + "requiredAndScopes": [ + "read:all" + ] + } + ], + "requiredOrScopesByOr": [ + { + "requiredAndScopes": [ + "read:fact" + ] + }, + { + "requiredAndScopes": [ + "read:all" + ] + } + ] } - }, - { + }, + { "typeName": "Query", - "fieldName": "factTypes", + "fieldName": "secret", "authorizationConfiguration": { - "requiresAuthentication": true + "requiresAuthentication": true, + "requiredOrScopes": [ + { + "requiredAndScopes": [ + "read:secret" + ] + } + ], + "requiredOrScopesByOr": [ + { + "requiredAndScopes": [ + "read:secret" + ] + } + ] } - }, - { - "typeName": "MiscellaneousFact", - "fieldName": "description", + }, + { + "typeName": "Query", + "fieldName": "factTypes", "authorizationConfiguration": { - "requiresAuthentication": true, - "requiredOrScopes": [ - { - "requiredAndScopes": [ - "read:miscellaneous", - "read:scalar" - ] - }, - { - "requiredAndScopes": [ - "read:miscellaneous", - "read:all" - ] - } - ] + "requiresAuthentication": true } - }, - { - "typeName": "MiscellaneousFact", + }, + { + "typeName": "TopSecretFact", "fieldName": "factType", "authorizationConfiguration": { - "requiresAuthentication": true + "requiresAuthentication": true } - }, - { + }, + { "typeName": "TopSecretFact", "fieldName": "description", "authorizationConfiguration": { - "requiresAuthentication": true, - "requiredOrScopes": [ - { - "requiredAndScopes": [ - "read:scalar" - ] - }, - { - "requiredAndScopes": [ - "read:all" - ] - } - ] - } - }, - { - "typeName": "TopSecretFact", - "fieldName": "factType", - "authorizationConfiguration": { - "requiresAuthentication": true + "requiresAuthentication": true, + "requiredOrScopes": [ + { + "requiredAndScopes": [ + "read:scalar" + ] + }, + { + "requiredAndScopes": [ + "read:all" + ] + } + ], + "requiredOrScopesByOr": [ + { + "requiredAndScopes": [ + "read:scalar" + ] + }, + { + "requiredAndScopes": [ + "read:all" + ] + } + ] } - }, - { + }, + { "typeName": "DirectiveFact", - "fieldName": "title", + "fieldName": "factType", "authorizationConfiguration": { - "requiresAuthentication": true + "requiresAuthentication": true } - }, - { + }, + { "typeName": "DirectiveFact", "fieldName": "description", "authorizationConfiguration": { - "requiresAuthentication": true, - "requiredOrScopes": [ - { - "requiredAndScopes": [ - "read:scalar" - ] - }, - { - "requiredAndScopes": [ - "read:all" - ] - } - ] + "requiresAuthentication": true, + "requiredOrScopes": [ + { + "requiredAndScopes": [ + "read:scalar" + ] + }, + { + "requiredAndScopes": [ + "read:all" + ] + } + ], + "requiredOrScopesByOr": [ + { + "requiredAndScopes": [ + "read:scalar" + ] + }, + { + "requiredAndScopes": [ + "read:all" + ] + } + ] } - }, - { - "typeName": "DirectiveFact", + }, + { + "typeName": "EntityFact", "fieldName": "factType", "authorizationConfiguration": { - "requiresAuthentication": true + "requiresAuthentication": true } - }, - { + }, + { "typeName": "EntityFact", - "fieldName": "title", + "fieldName": "description", "authorizationConfiguration": { - "requiresAuthentication": true, - "requiredOrScopes": [ - { - "requiredAndScopes": [ - "read:entity" - ] - } - ] + "requiresAuthentication": true, + "requiredOrScopes": [ + { + "requiredAndScopes": [ + "read:scalar" + ] + }, + { + "requiredAndScopes": [ + "read:all" + ] + } + ], + "requiredOrScopesByOr": [ + { + "requiredAndScopes": [ + "read:scalar" + ] + }, + { + "requiredAndScopes": [ + "read:all" + ] + } + ] } - }, - { - "typeName": "EntityFact", + }, + { + "typeName": "MiscellaneousFact", "fieldName": "description", "authorizationConfiguration": { - "requiresAuthentication": true, - "requiredOrScopes": [ - { - "requiredAndScopes": [ - "read:entity", - "read:scalar" - ] - }, - { - "requiredAndScopes": [ - "read:entity", - "read:all" - ] - } - ] + "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": "EntityFact", + }, + { + "typeName": "MiscellaneousFact", "fieldName": "factType", "authorizationConfiguration": { - "requiresAuthentication": true, - "requiredOrScopes": [ + "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 \"\"\"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}\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(id: 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 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\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}\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", + "c8cc058566134270eaf1cf6638137eec5a7de07e": "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 productTypes: [Products!]!\n sharedThings(numOfA: Int!, numOfB: Int!): [Thing!]! @shareable\n topSecretFederationFacts: [TopSecretFact!]! @requiresScopes(scopes: [[\"read:fact\"], [\"read:all\"]])\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", + "1ea9d2a6e116faae6ece1507db3dc79851ed7dfe": "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(id: ID!): Employee! @edfs__redisSubscribe(channels: [\"employeeUpdatedMyRedis\"], providerId: \"my-redis\") @openfed__subscriptionFilter(condition: {IN: {fieldPath: \"id\", values: [1, 3, 4, 7, 11]}})\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 sharedThings(numOfA: Int!, numOfB: Int!): [Thing!]!\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}\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(id: 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 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\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}\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}" + }, + "version": "95ba3fb0-2862-4bde-ae30-dbe6620defcb", + "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" + } + ], + "featureFlagConfigs": { + "configByFeatureFlagName": { + "myff": { + "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": "id", + "sourceType": "FIELD_ARGUMENT" + } + ], + "subscriptionFilterCondition": { + "in": { + "fieldPath": [ + "id" + ], + "json": "[1,3,4,7,11]" + } + } + }, + { + "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(id: 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", + "1ea9d2a6e116faae6ece1507db3dc79851ed7dfe": "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(id: ID!): Employee! @edfs__redisSubscribe(channels: [\"employeeUpdatedMyRedis\"], providerId: \"my-redis\") @openfed__subscriptionFilter(condition: {IN: {fieldPath: \"id\", values: [1, 3, 4, 7, 11]}})\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(id: 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}" + }, + "version": "22742eba-674a-4a20-b3cd-c53b25a905ed", + "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" + }, { - "requiredAndScopes": [ - "read:entity" - ] + "id": "8", + "name": "employeeupdated" } - ] - } - } - ], - "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\nunion Products = Consultancy | Cosmo | SDK | Documentation\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 findEmployees(criteria: SearchInput): [Employee!]!\n productTypes: [Products!]!\n topSecretFederationFacts: [TopSecretFact!]! @requiresScopes(scopes: [[\"read:fact\"], [\"read:all\"]])\n factTypes: [TopSecretFactType!] @authenticated\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 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 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 multipleUpload(files: [Upload!]!): Boolean!\n addFact(fact: TopSecretFactInput!): TopSecretFact! @requiresScopes(scopes: [[\"write:fact\"], [\"write:all\"]])\n updateAvailability(employeeID: Int!, isAvailable: Boolean!): 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}\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 filteredEmployeeUpdated(id: Int!): Employee!\n filteredEmployeeUpdatedMyKafka(employeeID: ID!): Employee!\n filteredEmployeeUpdatedMyKafkaWithListFieldArguments(firstIds: [ID!]!, secondIds: [ID!]!): Employee!\n filteredEmployeeUpdatedMyKafkaWithNestedListFieldArgument(input: KafkaInput!): 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}\n\ntype ErrorWrapper {\n okField: String\n errorField: String\n}\n\ntype Time {\n unixTime: Int!\n timeStamp: String!\n}\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\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! @authenticated @requiresScopes(scopes: [[\"read:scalar\"], [\"read:all\"]])\n factType: TopSecretFactType @authenticated\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\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 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\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 {\n title: String! @authenticated\n description: FactContent! @authenticated @requiresScopes(scopes: [[\"read:scalar\"], [\"read:all\"]])\n factType: TopSecretFactType @authenticated\n}\n\ntype EntityFact implements TopSecretFact {\n title: String! @requiresScopes(scopes: [[\"read:entity\"]])\n description: FactContent! @authenticated @requiresScopes(scopes: [[\"read:entity\", \"read:scalar\"], [\"read:entity\", \"read:all\"]])\n factType: TopSecretFactType @authenticated @requiresScopes(scopes: [[\"read:entity\"]])\n}\n\ntype MiscellaneousFact implements TopSecretFact {\n title: String!\n description: FactContent! @authenticated @requiresScopes(scopes: [[\"read:miscellaneous\", \"read:scalar\"], [\"read:miscellaneous\", \"read:all\"]])\n factType: TopSecretFactType @authenticated\n}", - "stringStorage": { - "2d13a1cb09f08b0fa816437718003adc0413e98b": "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 @link(as: String, for: String, import: [String], url: String!) repeatable on SCHEMA\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 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\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\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 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", - "a2004ce79c42883f0c26905f98b3b76f69fcbf1b": "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 @link(as: String, for: String, import: [String], url: String!) repeatable on SCHEMA\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 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 findEmployees(criteria: SearchInput): [Employee!]!\n}\n\ninput SearchInput {\n hasPets: Boolean\n nationality: Nationality\n nested: NestedSearchInput\n}\n\nscalar openfed__FieldSet\n\nscalar openfed__Scope", - "762d2fb5bb46eb251aefc68cfde989f510a980f7": "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 @link(as: String, for: String, import: [String], url: String!) repeatable on SCHEMA\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 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", - "4bcd0a5073400055343f65089fd0cb374a5c691c": "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 @link(as: String, for: String, import: [String], url: String!) repeatable on SCHEMA\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 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 {\n description: FactContent! @authenticated @requiresScopes(scopes: [[\"read:scalar\"], [\"read:all\"]])\n factType: TopSecretFactType @authenticated\n title: String! @authenticated\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\n productCount: Int!\n products: [ProductName!]!\n}\n\ntype EntityFact implements TopSecretFact {\n description: FactContent! @authenticated @requiresScopes(scopes: [[\"read:entity\", \"read:scalar\"], [\"read:entity\", \"read:all\"]])\n factType: TopSecretFactType @authenticated @requiresScopes(scopes: [[\"read:entity\"]])\n title: String! @requiresScopes(scopes: [[\"read:entity\"]])\n}\n\nscalar FactContent\n\ntype MiscellaneousFact implements TopSecretFact {\n description: FactContent! @authenticated @requiresScopes(scopes: [[\"read:miscellaneous\", \"read:scalar\"], [\"read:miscellaneous\", \"read:all\"]])\n factType: TopSecretFactType @authenticated\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!]!\n}\n\ninterface TopSecretFact {\n description: FactContent! @authenticated @requiresScopes(scopes: [[\"read:scalar\"], [\"read:all\"]])\n factType: TopSecretFactType @authenticated\n}\n\ninput TopSecretFactInput {\n description: FactContent!\n factType: TopSecretFactType!\n title: String!\n}\n\nenum TopSecretFactType {\n DIRECTIVE\n ENTITY\n MISCELLANEOUS\n}\n\nscalar openfed__FieldSet\n\nscalar openfed__Scope", - "240c0d7c6ae4413fe2b491a5d03a8e65638437ea": "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 @link(as: String, for: String, import: [String], url: String!) repeatable on SCHEMA\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 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 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 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 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", - "c8333d72d5932f614528df92392ef7302f90858a": "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 @link(as: String, for: String, import: [String], url: String!) repeatable on SCHEMA\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 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 updateAvailability(employeeID: Int!, isAvailable: Boolean!): Employee!\n}\n\nscalar openfed__FieldSet\n\nscalar openfed__Scope", - "5a9fb4590b3a3d9aae43f5dd99719064f6f57783": "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 @link(as: String, for: String, import: [String], url: String!) repeatable on SCHEMA\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 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 HAPPY\n SAD\n}\n\ntype Mutation {\n updateMood(employeeID: Int!, mood: Mood!): Employee!\n}\n\nscalar openfed__FieldSet\n\nscalar openfed__Scope", - "991f4fcb3e42d335889684af6c8737f49a9b7079": "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 @link(as: String, for: String, import: [String], url: String!) repeatable on SCHEMA\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 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", - "5208a01e1056994295a616bcc7260e65dec66795": "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__kafkaPublish(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 @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}\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 employeeUpdatedNatsStream(id: Int!): Employee! @edfs__natsSubscribe(subjects: [\"employeeUpdated.{{ args.id }}\"], streamConfiguration: {consumerName: \"consumerName\", streamName: \"streamName\"})\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}\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": "directive @authenticated on ENUM | FIELD_DEFINITION | INTERFACE | OBJECT | SCALAR\n\ndirective @requiresScopes(scopes: [[openfed__Scope!]!]!) on ENUM | FIELD_DEFINITION | INTERFACE | OBJECT | SCALAR\n\nscalar openfed__Scope\n\nunion Products = Consultancy | Cosmo | SDK | Documentation\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!\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 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 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 multipleUpload(files: [Upload!]!): Boolean!\n addFact(fact: TopSecretFactInput!): TopSecretFact!\n updateAvailability(employeeID: Int!, isAvailable: Boolean!): 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}\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 filteredEmployeeUpdated(id: Int!): Employee!\n filteredEmployeeUpdatedMyKafka(employeeID: ID!): Employee!\n filteredEmployeeUpdatedMyKafkaWithListFieldArguments(firstIds: [ID!]!, secondIds: [ID!]!): Employee!\n filteredEmployeeUpdatedMyKafkaWithNestedListFieldArgument(input: KafkaInput!): 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\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\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\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 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\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}" - }, - "version": "b823d5fb-c673-44f6-9e84-4f0a8e86af1e", - "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" + ] } - ] } - } - } + }, + "compatibilityVersion": "1:{{$COMPOSITION__VERSION}}" } \ No newline at end of file From 89b29c96b88be006db3873752b9a1094ad06928b Mon Sep 17 00:00:00 2001 From: Alessandro Pagnin Date: Mon, 26 May 2025 17:09:12 +0200 Subject: [PATCH 071/126] chore: add redis config to demo config --- router/demo.config.yaml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/router/demo.config.yaml b/router/demo.config.yaml index 859751a691..bae4c8e3f0 100644 --- a/router/demo.config.yaml +++ b/router/demo.config.yaml @@ -15,4 +15,8 @@ events: kafka: - id: my-kafka brokers: - - "localhost:9092" \ No newline at end of file + - "localhost:9092" + redis: + - id: my-redis + urls: + - "localhost:6379" \ No newline at end of file From 4395be22bfcaf68c17782999d22835a7c3e48b02 Mon Sep 17 00:00:00 2001 From: Alessandro Pagnin Date: Tue, 27 May 2025 09:32:05 +0200 Subject: [PATCH 072/126] feat: update Redis configuration to use the right format in demo config and fixtures, improve filteredEmployeeUpdatedMyRedis --- .../employeeupdated/subgraph/schema.graphqls | 4 +- router-tests/testenv/testdata/config.json | 4 +- .../testenv/testdata/configWithEdfs.json | 11126 ++++++++-------- .../testenv/testdata/configWithEdfsRedis.json | 24 +- router/demo.config.yaml | 2 +- router/pkg/config/config.schema.json | 5 +- router/pkg/config/fixtures/full.yaml | 2 +- router/pkg/config/testdata/config_full.json | 2 +- 8 files changed, 5584 insertions(+), 5585 deletions(-) diff --git a/demo/pkg/subgraphs/employeeupdated/subgraph/schema.graphqls b/demo/pkg/subgraphs/employeeupdated/subgraph/schema.graphqls index b7bf9e6509..8d0ab38563 100644 --- a/demo/pkg/subgraphs/employeeupdated/subgraph/schema.graphqls +++ b/demo/pkg/subgraphs/employeeupdated/subgraph/schema.graphqls @@ -62,9 +62,9 @@ type Subscription { { IN: { fieldPath: "id", values: ["1"] } }, ], }) - filteredEmployeeUpdatedMyRedis(id: ID!): Employee! + filteredEmployeeUpdatedMyRedis(ids: [ID!]!): Employee! @edfs__redisSubscribe(channels: ["employeeUpdatedMyRedis"], providerId: "my-redis") - @openfed__subscriptionFilter(condition: { IN: { fieldPath: "id", values: [1, 3, 4, 7, 11] } }) + @openfed__subscriptionFilter(condition: { IN: { fieldPath: "id", values: ["{{ args.ids }}"] } }) } input KafkaInput { diff --git a/router-tests/testenv/testdata/config.json b/router-tests/testenv/testdata/config.json index 0f83367593..7c6a739281 100644 --- a/router-tests/testenv/testdata/config.json +++ b/router-tests/testenv/testdata/config.json @@ -2415,7 +2415,7 @@ }, "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\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}\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}\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}\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 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\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}\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}" }, - "version": "798bc572-a27d-4908-a0c9-f5f2b8f23a42", + "version": "1882c075-610f-4c7f-986d-89d0a46d4473", "subgraphs": [ { "id": "0", @@ -4871,7 +4871,7 @@ }, "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}\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}\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}\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\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}" }, - "version": "a2a0c58b-d8f0-48e9-8250-cde52e3317ce", + "version": "a0358306-5fec-411e-a0e7-8d32e7452eec", "subgraphs": [ { "id": "0", diff --git a/router-tests/testenv/testdata/configWithEdfs.json b/router-tests/testenv/testdata/configWithEdfs.json index c86ed7ebc6..5fd58ff22b 100644 --- a/router-tests/testenv/testdata/configWithEdfs.json +++ b/router-tests/testenv/testdata/configWithEdfs.json @@ -1,5929 +1,5929 @@ { "engineConfig": { - "defaultFlushInterval": "500", - "datasourceConfigurations": [ + "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" + ] + }, + { + "typeName": "Mutation", + "fieldNames": [ + "addFact" + ] + }, + { + "typeName": "Employee", + "fieldNames": [ + "id", + "products", + "notes" + ] + }, + { + "typeName": "Consultancy", + "fieldNames": [ + "upc", + "name" + ] + }, + { + "typeName": "Cosmo", + "fieldNames": [ + "upc", + "name", + "repositoryURL" + ] + } + ], + "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}\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" + }, + "upstreamSchema": { + "key": "c8cc058566134270eaf1cf6638137eec5a7de07e" + } + }, + "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": "id", + "sourceType": "FIELD_ARGUMENT" + } + ], + "subscriptionFilterCondition": { + "in": { + "fieldPath": [ + "id" + ], + "json": "[1,3,4,7,11]" + } + } + }, + { + "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": "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": "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 sharedThings(numOfA: Int!, numOfB: Int!): [Thing!]!\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}\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(id: 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 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\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}\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", + "c8cc058566134270eaf1cf6638137eec5a7de07e": "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 productTypes: [Products!]!\n sharedThings(numOfA: Int!, numOfB: Int!): [Thing!]! @shareable\n topSecretFederationFacts: [TopSecretFact!]! @requiresScopes(scopes: [[\"read:fact\"], [\"read:all\"]])\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", + "1ea9d2a6e116faae6ece1507db3dc79851ed7dfe": "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(id: ID!): Employee! @edfs__redisSubscribe(channels: [\"employeeUpdatedMyRedis\"], providerId: \"my-redis\") @openfed__subscriptionFilter(condition: {IN: {fieldPath: \"id\", values: [1, 3, 4, 7, 11]}})\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 sharedThings(numOfA: Int!, numOfB: Int!): [Thing!]!\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}\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(id: 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 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\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}\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}" + }, + "version": "b913410e-b7c8-4fa9-a314-834070d563e8", + "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" + } + ], + "featureFlagConfigs": { + "configByFeatureFlagName": { + "myff": { + "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" - ] - } + { + "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" - ] - } + { + "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" - } + "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" - } + { + "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 }" - } + { + "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" - ] - } + { + "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" - } + "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" - } + { + "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" - ] - } + { + "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" - ] - } + { + "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" - } + "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" - } + { + "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" - ] - }, - { - "typeName": "Mutation", - "fieldNames": [ - "addFact" - ] - }, - { - "typeName": "Employee", - "fieldNames": [ - "id", - "products", - "notes" - ] - }, - { - "typeName": "Consultancy", - "fieldNames": [ - "upc", - "name" - ] - }, - { - "typeName": "Cosmo", - "fieldNames": [ - "upc", - "name", - "repositoryURL" - ] - } + { + "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": "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" - ] - } + { + "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}\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" - }, - "upstreamSchema": { - "key": "c8cc058566134270eaf1cf6638137eec5a7de07e" - } + "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" - } + { + "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" - ] - } + { + "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" - ] - } + { + "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" - } + "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" - } + { + "typeName": "Employee", + "selectionSet": "id" + } ] - }, - { + }, + { "kind": "GRAPHQL", "rootNodes": [ - { - "typeName": "Mutation", - "fieldNames": [ - "updateAvailability" - ] - }, - { - "typeName": "Employee", - "fieldNames": [ - "id", - "isAvailable" - ] - } + { + "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" - } + "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" - } + { + "typeName": "Employee", + "selectionSet": "id" + } ] - }, - { + }, + { "kind": "GRAPHQL", "rootNodes": [ - { - "typeName": "Mutation", - "fieldNames": [ - "updateMood" - ] - }, - { - "typeName": "Employee", - "fieldNames": [ - "id", - "currentMood" - ] - } + { + "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" - } + "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" - } + { + "typeName": "Employee", + "selectionSet": "id" + } ] - }, - { + }, + { "kind": "GRAPHQL", "rootNodes": [ - { - "typeName": "Country", - "fieldNames": [ - "key", - "language" - ] - } + { + "typeName": "Country", + "fieldNames": [ + "key", + "language" + ] + } ], "childNodes": [ - { - "typeName": "CountryKey", - "fieldNames": [ - "name" - ] - } + { + "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" - } + "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 }" - } + { + "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", - "fieldNames": [ - "employeeFromEvent", - "employeeFromEventMyNats" - ] + "fieldName": "employeeFromEventMyNats" + }, + "subjects": [ + "getEmployeeMyNats.{{ args.employeeID }}" + ] }, { + "engineEventConfiguration": { + "providerId": "my-nats", "typeName": "Mutation", - "fieldNames": [ - "updateEmployeeMyKafka", - "updateEmployeeMyNats", - "updateEmployeeMyRedis", - "updateEmployeeMyRedisOnCustomChannel" - ] + "fieldName": "updateEmployeeMyNats" + }, + "subjects": [ + "employeeUpdatedMyNats.{{ args.id }}" + ] }, { + "engineEventConfiguration": { + "providerId": "default", + "type": "SUBSCRIBE", "typeName": "Subscription", - "fieldNames": [ - "employeeUpdated", - "employeeUpdatedMyKafka", - "employeeUpdatedMyNats", - "employeeUpdatedNatsStream", - "employeeUpdatedMyRedis", - "employeeUpdates", - "filteredEmployeeUpdated", - "filteredEmployeeUpdatedMyKafka", - "filteredEmployeeUpdatedMyKafkaWithListFieldArguments", - "filteredEmployeeUpdatedMyKafkaWithNestedListFieldArgument", - "filteredEmployeeUpdatedMyRedis" - ] + "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 }}" + ] } - ], - "childNodes": [ + ], + "kafka": [ { - "typeName": "edfs__PublishResult", - "fieldNames": [ - "success" - ] + "engineEventConfiguration": { + "providerId": "my-kafka", + "typeName": "Mutation", + "fieldName": "updateEmployeeMyKafka" + }, + "topics": [ + "employeeUpdated" + ] }, { - "typeName": "Employee", - "fieldNames": [ - "id" - ], - "externalFieldNames": [ - "id" - ] + "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" + ] } - ], - "overrideFieldPathFromAlias": true, - "requestTimeoutSeconds": "10", - "id": "8", - "keys": [ + ], + "redis": [ + { + "engineEventConfiguration": { + "providerId": "my-redis", + "typeName": "Mutation", + "fieldName": "updateEmployeeMyRedis" + }, + "channels": [ + "employeeUpdatedMyRedis" + ] + }, + { + "engineEventConfiguration": { + "providerId": "my-redis", + "typeName": "Mutation", + "fieldName": "updateEmployeeMyRedisOnCustomChannel" + }, + "channels": [ + "employeeUpdatedMyRedis.{{ args.id }}" + ] + }, { - "typeName": "Employee", - "selectionSet": "id", - "disableEntityResolver": true + "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" + ] } - ], - "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": [ - { + } + ], + "fieldConfigurations": [ + { "typeName": "Subscription", "fieldName": "filteredEmployeeUpdated", "argumentsConfiguration": [ - { - "name": "id", - "sourceType": "FIELD_ARGUMENT" - } + { + "name": "id", + "sourceType": "FIELD_ARGUMENT" + } ], "subscriptionFilterCondition": { - "not": { - "in": { - "fieldPath": [ - "id" - ], - "json": "[2,6,9,10,12]" - } + "not": { + "in": { + "fieldPath": [ + "id" + ], + "json": "[2,6,9,10,12]" } + } } - }, - { + }, + { "typeName": "Subscription", "fieldName": "filteredEmployeeUpdatedMyKafka", "argumentsConfiguration": [ - { - "name": "employeeID", - "sourceType": "FIELD_ARGUMENT" - } + { + "name": "employeeID", + "sourceType": "FIELD_ARGUMENT" + } ], "subscriptionFilterCondition": { - "in": { - "fieldPath": [ - "id" - ], - "json": "[1,3,4,7,11]" - } + "in": { + "fieldPath": [ + "id" + ], + "json": "[1,3,4,7,11]" + } } - }, - { + }, + { "typeName": "Subscription", "fieldName": "filteredEmployeeUpdatedMyKafkaWithListFieldArguments", "argumentsConfiguration": [ - { - "name": "firstIds", - "sourceType": "FIELD_ARGUMENT" - }, - { - "name": "secondIds", - "sourceType": "FIELD_ARGUMENT" - } + { + "name": "firstIds", + "sourceType": "FIELD_ARGUMENT" + }, + { + "name": "secondIds", + "sourceType": "FIELD_ARGUMENT" + } ], "subscriptionFilterCondition": { - "in": { - "fieldPath": [ - "id" - ], - "json": "[\"{{ args.firstIds }}\",\"{{ args.secondIds }}\"]" - } + "in": { + "fieldPath": [ + "id" + ], + "json": "[\"{{ args.firstIds }}\",\"{{ args.secondIds }}\"]" + } } - }, - { + }, + { "typeName": "Subscription", "fieldName": "filteredEmployeeUpdatedMyKafkaWithNestedListFieldArgument", "argumentsConfiguration": [ - { - "name": "input", - "sourceType": "FIELD_ARGUMENT" - } + { + "name": "input", + "sourceType": "FIELD_ARGUMENT" + } ], "subscriptionFilterCondition": { - "or": [ - { - "in": { - "fieldPath": [ - "id" - ], - "json": "[\"{{ args.input.ids }}\"]" - } - }, - { - "in": { - "fieldPath": [ - "id" - ], - "json": "[\"1\"]" - } - } - ] + "or": [ + { + "in": { + "fieldPath": [ + "id" + ], + "json": "[\"{{ args.input.ids }}\"]" + } + }, + { + "in": { + "fieldPath": [ + "id" + ], + "json": "[\"1\"]" + } + } + ] } - }, - { + }, + { "typeName": "Subscription", "fieldName": "filteredEmployeeUpdatedMyRedis", "argumentsConfiguration": [ - { - "name": "id", - "sourceType": "FIELD_ARGUMENT" - } + { + "name": "id", + "sourceType": "FIELD_ARGUMENT" + } ], "subscriptionFilterCondition": { - "in": { - "fieldPath": [ - "id" - ], - "json": "[1,3,4,7,11]" - } + "in": { + "fieldPath": [ + "id" + ], + "json": "[1,3,4,7,11]" + } } - }, - { + }, + { "typeName": "Query", "fieldName": "employee", "argumentsConfiguration": [ - { - "name": "id", - "sourceType": "FIELD_ARGUMENT" - } + { + "name": "id", + "sourceType": "FIELD_ARGUMENT" + } ] - }, - { + }, + { "typeName": "Query", "fieldName": "employeeAsList", "argumentsConfiguration": [ - { - "name": "id", - "sourceType": "FIELD_ARGUMENT" - } + { + "name": "id", + "sourceType": "FIELD_ARGUMENT" + } ] - }, - { + }, + { "typeName": "Query", "fieldName": "teammates", "argumentsConfiguration": [ - { - "name": "team", - "sourceType": "FIELD_ARGUMENT" - } + { + "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" - } + { + "name": "criteria", + "sourceType": "FIELD_ARGUMENT" + } ] - }, - { + }, + { "typeName": "Query", "fieldName": "headerValue", "argumentsConfiguration": [ - { - "name": "name", - "sourceType": "FIELD_ARGUMENT" - } + { + "name": "name", + "sourceType": "FIELD_ARGUMENT" + } ] - }, - { + }, + { "typeName": "Query", "fieldName": "initPayloadValue", "argumentsConfiguration": [ - { - "name": "key", - "sourceType": "FIELD_ARGUMENT" - } + { + "name": "key", + "sourceType": "FIELD_ARGUMENT" + } ] - }, - { + }, + { "typeName": "Query", "fieldName": "delay", "argumentsConfiguration": [ - { - "name": "response", - "sourceType": "FIELD_ARGUMENT" - }, - { - "name": "ms", - "sourceType": "FIELD_ARGUMENT" - } + { + "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" - } + { + "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" - } + { + "name": "artificialDelay", + "sourceType": "FIELD_ARGUMENT" + }, + { + "name": "bytes", + "sourceType": "FIELD_ARGUMENT" + } ] - }, - { + }, + { "typeName": "Query", "fieldName": "rootFieldWithListArg", "argumentsConfiguration": [ - { - "name": "arg", - "sourceType": "FIELD_ARGUMENT" - } + { + "name": "arg", + "sourceType": "FIELD_ARGUMENT" + } ] - }, - { + }, + { "typeName": "Query", "fieldName": "rootFieldWithNestedListArg", "argumentsConfiguration": [ - { - "name": "arg", - "sourceType": "FIELD_ARGUMENT" - } + { + "name": "arg", + "sourceType": "FIELD_ARGUMENT" + } ] - }, - { + }, + { "typeName": "Query", "fieldName": "rootFieldWithListOfInputArg", "argumentsConfiguration": [ - { - "name": "arg", - "sourceType": "FIELD_ARGUMENT" - } + { + "name": "arg", + "sourceType": "FIELD_ARGUMENT" + } ] - }, - { + }, + { "typeName": "Query", "fieldName": "rootFieldWithListOfEnumArg", "argumentsConfiguration": [ - { - "name": "arg", - "sourceType": "FIELD_ARGUMENT" - } + { + "name": "arg", + "sourceType": "FIELD_ARGUMENT" + } ] - }, - { + }, + { "typeName": "Query", "fieldName": "rootFieldWithInput", "argumentsConfiguration": [ - { - "name": "arg", - "sourceType": "FIELD_ARGUMENT" - } + { + "name": "arg", + "sourceType": "FIELD_ARGUMENT" + } ] - }, - { + }, + { "typeName": "Query", "fieldName": "floatField", "argumentsConfiguration": [ - { - "name": "arg", - "sourceType": "FIELD_ARGUMENT" - } + { + "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" - } + { + "name": "id", + "sourceType": "FIELD_ARGUMENT" + } ] - }, - { + }, + { "typeName": "Query", "fieldName": "employeeFromEventMyNats", "argumentsConfiguration": [ - { - "name": "employeeID", - "sourceType": "FIELD_ARGUMENT" - } + { + "name": "employeeID", + "sourceType": "FIELD_ARGUMENT" + } ] - }, - { + }, + { "typeName": "Mutation", "fieldName": "updateEmployeeTag", "argumentsConfiguration": [ - { - "name": "id", - "sourceType": "FIELD_ARGUMENT" - }, - { - "name": "tag", - "sourceType": "FIELD_ARGUMENT" - } + { + "name": "id", + "sourceType": "FIELD_ARGUMENT" + }, + { + "name": "tag", + "sourceType": "FIELD_ARGUMENT" + } ] - }, - { + }, + { "typeName": "Mutation", "fieldName": "singleUpload", "argumentsConfiguration": [ - { - "name": "file", - "sourceType": "FIELD_ARGUMENT" - } + { + "name": "file", + "sourceType": "FIELD_ARGUMENT" + } ] - }, - { + }, + { "typeName": "Mutation", "fieldName": "singleUploadWithInput", "argumentsConfiguration": [ - { - "name": "arg", - "sourceType": "FIELD_ARGUMENT" - } + { + "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" - ] - } - ] - } - }, - { + { + "name": "files", + "sourceType": "FIELD_ARGUMENT" + } + ] + }, + { "typeName": "Mutation", - "fieldName": "updateAvailability", + "fieldName": "addFact", "argumentsConfiguration": [ + { + "name": "fact", + "sourceType": "FIELD_ARGUMENT" + } + ], + "authorizationConfiguration": { + "requiresAuthentication": true, + "requiredOrScopes": [ { - "name": "employeeID", - "sourceType": "FIELD_ARGUMENT" + "requiredAndScopes": [ + "write:fact" + ] }, { - "name": "isAvailable", - "sourceType": "FIELD_ARGUMENT" + "requiredAndScopes": [ + "write:all" + ] } - ] - }, - { - "typeName": "Mutation", - "fieldName": "updateMood", - "argumentsConfiguration": [ + ], + "requiredOrScopesByOr": [ { - "name": "employeeID", - "sourceType": "FIELD_ARGUMENT" + "requiredAndScopes": [ + "write:fact" + ] }, { - "name": "mood", - "sourceType": "FIELD_ARGUMENT" + "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" - } + { + "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" - } + { + "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" - } + { + "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" - } + { + "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" - } + { + "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" - } + { + "name": "max", + "sourceType": "FIELD_ARGUMENT" + }, + { + "name": "intervalMilliseconds", + "sourceType": "FIELD_ARGUMENT" + } ] - }, - { + }, + { "typeName": "Subscription", "fieldName": "countFor", "argumentsConfiguration": [ - { - "name": "count", - "sourceType": "FIELD_ARGUMENT" - } + { + "name": "count", + "sourceType": "FIELD_ARGUMENT" + } ] - }, - { + }, + { "typeName": "Subscription", "fieldName": "countHob", "argumentsConfiguration": [ - { - "name": "max", - "sourceType": "FIELD_ARGUMENT" - }, - { - "name": "intervalMilliseconds", - "sourceType": "FIELD_ARGUMENT" - } + { + "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" - } + { + "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" - } + { + "name": "key", + "sourceType": "FIELD_ARGUMENT" + }, + { + "name": "repeat", + "sourceType": "FIELD_ARGUMENT" + } ] - }, - { + }, + { "typeName": "Subscription", "fieldName": "initialPayload", "argumentsConfiguration": [ - { - "name": "repeat", - "sourceType": "FIELD_ARGUMENT" - } + { + "name": "repeat", + "sourceType": "FIELD_ARGUMENT" + } ] - }, - { + }, + { "typeName": "Subscription", "fieldName": "employeeUpdated", "argumentsConfiguration": [ - { - "name": "employeeID", - "sourceType": "FIELD_ARGUMENT" - } + { + "name": "employeeID", + "sourceType": "FIELD_ARGUMENT" + } ] - }, - { + }, + { "typeName": "Subscription", "fieldName": "employeeUpdatedMyKafka", "argumentsConfiguration": [ - { - "name": "employeeID", - "sourceType": "FIELD_ARGUMENT" - } + { + "name": "employeeID", + "sourceType": "FIELD_ARGUMENT" + } ] - }, - { + }, + { "typeName": "Subscription", "fieldName": "employeeUpdatedMyNats", "argumentsConfiguration": [ - { - "name": "id", - "sourceType": "FIELD_ARGUMENT" - } + { + "name": "id", + "sourceType": "FIELD_ARGUMENT" + } ] - }, - { + }, + { "typeName": "Subscription", "fieldName": "employeeUpdatedNatsStream", "argumentsConfiguration": [ - { - "name": "id", - "sourceType": "FIELD_ARGUMENT" - } + { + "name": "id", + "sourceType": "FIELD_ARGUMENT" + } ] - }, - { + }, + { "typeName": "Subscription", "fieldName": "employeeUpdatedMyRedis", "argumentsConfiguration": [ - { - "name": "id", - "sourceType": "FIELD_ARGUMENT" - } + { + "name": "id", + "sourceType": "FIELD_ARGUMENT" + } ] - }, - { + }, + { "typeName": "Documentation", "fieldName": "url", "argumentsConfiguration": [ - { - "name": "product", - "sourceType": "FIELD_ARGUMENT" - } + { + "name": "product", + "sourceType": "FIELD_ARGUMENT" + } ] - }, - { + }, + { "typeName": "Documentation", "fieldName": "urls", "argumentsConfiguration": [ - { - "name": "products", - "sourceType": "FIELD_ARGUMENT" - } + { + "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" - ] - } - ] + "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" - ] - } - ] + "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" - ] - } - ] + "requiresAuthentication": true, + "requiredOrScopes": [ + { + "requiredAndScopes": [ + "read:secret" + ] + } + ], + "requiredOrScopesByOr": [ + { + "requiredAndScopes": [ + "read:secret" + ] + } + ] } - }, - { + }, + { "typeName": "Query", "fieldName": "factTypes", "authorizationConfiguration": { - "requiresAuthentication": true + "requiresAuthentication": true } - }, - { + }, + { "typeName": "TopSecretFact", "fieldName": "factType", "authorizationConfiguration": { - "requiresAuthentication": true + "requiresAuthentication": true } - }, - { + }, + { "typeName": "TopSecretFact", "fieldName": "description", "authorizationConfiguration": { - "requiresAuthentication": true, - "requiredOrScopes": [ - { - "requiredAndScopes": [ - "read:scalar" - ] - }, - { - "requiredAndScopes": [ - "read:all" - ] - } - ], - "requiredOrScopesByOr": [ - { - "requiredAndScopes": [ - "read:scalar" - ] - }, - { - "requiredAndScopes": [ - "read:all" - ] - } - ] + "requiresAuthentication": true, + "requiredOrScopes": [ + { + "requiredAndScopes": [ + "read:scalar" + ] + }, + { + "requiredAndScopes": [ + "read:all" + ] + } + ], + "requiredOrScopesByOr": [ + { + "requiredAndScopes": [ + "read:scalar" + ] + }, + { + "requiredAndScopes": [ + "read:all" + ] + } + ] } - }, - { + }, + { "typeName": "DirectiveFact", "fieldName": "factType", "authorizationConfiguration": { - "requiresAuthentication": true + "requiresAuthentication": true } - }, - { + }, + { "typeName": "DirectiveFact", "fieldName": "description", "authorizationConfiguration": { - "requiresAuthentication": true, - "requiredOrScopes": [ - { - "requiredAndScopes": [ - "read:scalar" - ] - }, - { - "requiredAndScopes": [ - "read:all" - ] - } - ], - "requiredOrScopesByOr": [ - { - "requiredAndScopes": [ - "read:scalar" - ] - }, - { - "requiredAndScopes": [ - "read:all" - ] - } - ] + "requiresAuthentication": true, + "requiredOrScopes": [ + { + "requiredAndScopes": [ + "read:scalar" + ] + }, + { + "requiredAndScopes": [ + "read:all" + ] + } + ], + "requiredOrScopesByOr": [ + { + "requiredAndScopes": [ + "read:scalar" + ] + }, + { + "requiredAndScopes": [ + "read:all" + ] + } + ] } - }, - { + }, + { "typeName": "EntityFact", "fieldName": "factType", "authorizationConfiguration": { - "requiresAuthentication": true + "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 \"\"\"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}\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(id: 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 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\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}\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", - "c8cc058566134270eaf1cf6638137eec5a7de07e": "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 productTypes: [Products!]!\n sharedThings(numOfA: Int!, numOfB: Int!): [Thing!]! @shareable\n topSecretFederationFacts: [TopSecretFact!]! @requiresScopes(scopes: [[\"read:fact\"], [\"read:all\"]])\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", - "1ea9d2a6e116faae6ece1507db3dc79851ed7dfe": "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(id: ID!): Employee! @edfs__redisSubscribe(channels: [\"employeeUpdatedMyRedis\"], providerId: \"my-redis\") @openfed__subscriptionFilter(condition: {IN: {fieldPath: \"id\", values: [1, 3, 4, 7, 11]}})\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 sharedThings(numOfA: Int!, numOfB: Int!): [Thing!]!\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}\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(id: 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 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\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}\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}" - }, - "version": "95ba3fb0-2862-4bde-ae30-dbe6620defcb", - "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" - } - ], - "featureFlagConfigs": { - "configByFeatureFlagName": { - "myff": { - "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": "id", - "sourceType": "FIELD_ARGUMENT" - } - ], - "subscriptionFilterCondition": { - "in": { - "fieldPath": [ - "id" - ], - "json": "[1,3,4,7,11]" - } - } - }, - { - "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(id: 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", - "1ea9d2a6e116faae6ece1507db3dc79851ed7dfe": "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(id: ID!): Employee! @edfs__redisSubscribe(channels: [\"employeeUpdatedMyRedis\"], providerId: \"my-redis\") @openfed__subscriptionFilter(condition: {IN: {fieldPath: \"id\", values: [1, 3, 4, 7, 11]}})\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(id: 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}" - }, - "version": "22742eba-674a-4a20-b3cd-c53b25a905ed", - "subgraphs": [ + "requiresAuthentication": true, + "requiredOrScopes": [ { - "id": "0", - "name": "employees", - "routingUrl": "http://localhost:4001/graphql" + "requiredAndScopes": [ + "read:scalar" + ] }, { - "id": "1", - "name": "family", - "routingUrl": "http://localhost:4002/graphql" - }, - { - "id": "2", - "name": "hobbies", - "routingUrl": "http://localhost:4003/graphql" - }, + "requiredAndScopes": [ + "read:all" + ] + } + ], + "requiredOrScopesByOr": [ { - "id": "3", - "name": "products_fg", - "routingUrl": "http://localhost:4010/graphql" + "requiredAndScopes": [ + "read:scalar" + ] }, { - "id": "4", - "name": "test1", - "routingUrl": "http://localhost:4006/graphql" - }, + "requiredAndScopes": [ + "read:all" + ] + } + ] + } + }, + { + "typeName": "MiscellaneousFact", + "fieldName": "description", + "authorizationConfiguration": { + "requiresAuthentication": true, + "requiredOrScopes": [ { - "id": "5", - "name": "availability", - "routingUrl": "http://localhost:4007/graphql" + "requiredAndScopes": [ + "read:scalar", + "read:miscellaneous" + ] }, { - "id": "6", - "name": "mood", - "routingUrl": "http://localhost:4008/graphql" - }, + "requiredAndScopes": [ + "read:all", + "read:miscellaneous" + ] + } + ], + "requiredOrScopesByOr": [ { - "id": "7", - "name": "countries", - "routingUrl": "http://localhost:4009/graphql" + "requiredAndScopes": [ + "read:scalar", + "read:miscellaneous" + ] }, { - "id": "8", - "name": "employeeupdated" + "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(id: 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", + "1ea9d2a6e116faae6ece1507db3dc79851ed7dfe": "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(id: ID!): Employee! @edfs__redisSubscribe(channels: [\"employeeUpdatedMyRedis\"], providerId: \"my-redis\") @openfed__subscriptionFilter(condition: {IN: {fieldPath: \"id\", values: [1, 3, 4, 7, 11]}})\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(id: 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}" + }, + "version": "6332a859-deb5-4809-9904-ff3f8a38cc50", + "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" } + ] } + } }, "compatibilityVersion": "1:{{$COMPOSITION__VERSION}}" -} \ No newline at end of file +} diff --git a/router-tests/testenv/testdata/configWithEdfsRedis.json b/router-tests/testenv/testdata/configWithEdfsRedis.json index 7e8927c849..d7d472f341 100644 --- a/router-tests/testenv/testdata/configWithEdfsRedis.json +++ b/router-tests/testenv/testdata/configWithEdfsRedis.json @@ -1859,7 +1859,7 @@ "fieldName": "filteredEmployeeUpdatedMyRedis", "argumentsConfiguration": [ { - "name": "id", + "name": "ids", "sourceType": "FIELD_ARGUMENT" } ], @@ -1868,7 +1868,7 @@ "fieldPath": [ "id" ], - "json": "[1,3,4,7,11]" + "json": "[\"{{ args.ids }}\"]" } } }, @@ -2562,7 +2562,7 @@ } } ], - "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 \"\"\"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}\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 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 employeeUpdatedMyRedis(id: Int!): Employee!\n employeeUpdates: Employee!\n filteredEmployeeUpdatedMyRedis(id: 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 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\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 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}", + "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 \"\"\"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}\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 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 employeeUpdatedMyRedis(id: Int!): Employee!\n employeeUpdates: 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 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\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 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", @@ -2572,11 +2572,11 @@ "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", - "759739c7be53a5653a2cede9e5dec9b32c9875df": "schema {\n mutation: Mutation\n subscription: Subscription\n}\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\ntype Mutation {\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 Subscription {\n employeeUpdatedMyRedis(id: Int!): Employee! @edfs__redisSubscribe(channels: [\"employeeUpdatedMyRedis.{{ args.id }}\"], providerId: \"my-redis\")\n employeeUpdates: Employee! @edfs__redisSubscribe(channels: [\"employeeUpdatedMyRedis\"], providerId: \"my-redis\")\n filteredEmployeeUpdatedMyRedis(id: ID!): Employee! @edfs__redisSubscribe(channels: [\"employeeUpdatedMyRedis\"], providerId: \"my-redis\") @openfed__subscriptionFilter(condition: {IN: {fieldPath: \"id\", values: [1, 3, 4, 7, 11]}})\n}\n\ninput UpdateEmployeeInput {\n email: String\n name: 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" + "f53c03f6dee11d83b7f517125ad06e775cebab17": "schema {\n mutation: Mutation\n subscription: Subscription\n}\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\ntype Mutation {\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 Subscription {\n employeeUpdatedMyRedis(id: Int!): Employee! @edfs__redisSubscribe(channels: [\"employeeUpdatedMyRedis.{{ args.id }}\"], providerId: \"my-redis\")\n employeeUpdates: Employee! @edfs__redisSubscribe(channels: [\"employeeUpdatedMyRedis\"], providerId: \"my-redis\")\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\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 sharedThings(numOfA: Int!, numOfB: Int!): [Thing!]!\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}\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 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 employeeUpdatedMyRedis(id: Int!): Employee!\n employeeUpdates: Employee!\n filteredEmployeeUpdatedMyRedis(id: 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 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\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 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}" + "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\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}\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 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 employeeUpdatedMyRedis(id: Int!): Employee!\n employeeUpdates: 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 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\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 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}" }, - "version": "54ebb491-3bdb-437b-85ec-2c53e68e55d4", + "version": "0e669fbe-011c-47f3-8edb-5f2478d60ec5", "subgraphs": [ { "id": "0", @@ -4480,7 +4480,7 @@ "fieldName": "filteredEmployeeUpdatedMyRedis", "argumentsConfiguration": [ { - "name": "id", + "name": "ids", "sourceType": "FIELD_ARGUMENT" } ], @@ -4489,7 +4489,7 @@ "fieldPath": [ "id" ], - "json": "[1,3,4,7,11]" + "json": "[\"{{ args.ids }}\"]" } } }, @@ -5183,7 +5183,7 @@ } } ], - "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}\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 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 employeeUpdatedMyRedis(id: Int!): Employee!\n employeeUpdates: Employee!\n filteredEmployeeUpdatedMyRedis(id: 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\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}", + "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}\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 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 employeeUpdatedMyRedis(id: Int!): Employee!\n employeeUpdates: 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\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", @@ -5193,11 +5193,11 @@ "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", - "759739c7be53a5653a2cede9e5dec9b32c9875df": "schema {\n mutation: Mutation\n subscription: Subscription\n}\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\ntype Mutation {\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 Subscription {\n employeeUpdatedMyRedis(id: Int!): Employee! @edfs__redisSubscribe(channels: [\"employeeUpdatedMyRedis.{{ args.id }}\"], providerId: \"my-redis\")\n employeeUpdates: Employee! @edfs__redisSubscribe(channels: [\"employeeUpdatedMyRedis\"], providerId: \"my-redis\")\n filteredEmployeeUpdatedMyRedis(id: ID!): Employee! @edfs__redisSubscribe(channels: [\"employeeUpdatedMyRedis\"], providerId: \"my-redis\") @openfed__subscriptionFilter(condition: {IN: {fieldPath: \"id\", values: [1, 3, 4, 7, 11]}})\n}\n\ninput UpdateEmployeeInput {\n email: String\n name: 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" + "f53c03f6dee11d83b7f517125ad06e775cebab17": "schema {\n mutation: Mutation\n subscription: Subscription\n}\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\ntype Mutation {\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 Subscription {\n employeeUpdatedMyRedis(id: Int!): Employee! @edfs__redisSubscribe(channels: [\"employeeUpdatedMyRedis.{{ args.id }}\"], providerId: \"my-redis\")\n employeeUpdates: Employee! @edfs__redisSubscribe(channels: [\"employeeUpdatedMyRedis\"], providerId: \"my-redis\")\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\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}\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 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 employeeUpdatedMyRedis(id: Int!): Employee!\n employeeUpdates: Employee!\n filteredEmployeeUpdatedMyRedis(id: 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\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}" + "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}\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 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 employeeUpdatedMyRedis(id: Int!): Employee!\n employeeUpdates: 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\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}" }, - "version": "cc6cf16b-668a-4061-869d-ad9a8423c334", + "version": "863b7fb6-4b5b-4cd9-b9e6-3dc39bda9099", "subgraphs": [ { "id": "0", diff --git a/router/demo.config.yaml b/router/demo.config.yaml index bae4c8e3f0..9a72e31de2 100644 --- a/router/demo.config.yaml +++ b/router/demo.config.yaml @@ -19,4 +19,4 @@ events: redis: - id: my-redis urls: - - "localhost:6379" \ No newline at end of file + - "redis://localhost:6379/2" \ No newline at end of file diff --git a/router/pkg/config/config.schema.json b/router/pkg/config/config.schema.json index 6b7def7268..d431802479 100644 --- a/router/pkg/config/config.schema.json +++ b/router/pkg/config/config.schema.json @@ -2005,10 +2005,9 @@ }, "urls": { "type": "array", - "description": "The list of Redis URLs. The URLs are used to connect to the Redis provider.", + "description": "The list of Redis URLs. An example of URL is \"redis://username:password@localhost:6379/11\"", "items": { - "type": "string", - "format": "hostname-port" + "type": "string" } } } diff --git a/router/pkg/config/fixtures/full.yaml b/router/pkg/config/fixtures/full.yaml index 17108dbf9c..fcf6f5d5a8 100644 --- a/router/pkg/config/fixtures/full.yaml +++ b/router/pkg/config/fixtures/full.yaml @@ -295,7 +295,7 @@ events: redis: - id: my-redis urls: - - "localhost:6379" + - "redis://localhost:6379/11" engine: enable_single_flight: true diff --git a/router/pkg/config/testdata/config_full.json b/router/pkg/config/testdata/config_full.json index a635511335..84021413f4 100644 --- a/router/pkg/config/testdata/config_full.json +++ b/router/pkg/config/testdata/config_full.json @@ -528,7 +528,7 @@ { "ID": "my-redis", "URLs": [ - "localhost:6379" + "redis://localhost:6379/11" ] } ] From b535e9f2b2dd877dee67a2cae30fb38170345572 Mon Sep 17 00:00:00 2001 From: Alessandro Pagnin Date: Tue, 27 May 2025 23:23:38 +0200 Subject: [PATCH 073/126] refactor: streamline provider and data source construction in PubSub - Consolidated the logic for building providers and data sources into a single function, `BuildProvidersAndDataSources`, improving code clarity and reducing redundancy. - Removed the old `ProviderBuilderFactories` function and integrated its functionality into the new structure. - Added unit tests for the new implementation to ensure correctness and reliability. - Deleted outdated test files that are no longer relevant to the current architecture. --- router/core/factoryresolver.go | 40 ++- router/pkg/pubsub/datasource/builder.go | 87 +----- router/pkg/pubsub/datasource/builder_test.go | 268 ------------------ router/pkg/pubsub/datasource/provider.go | 21 +- router/pkg/pubsub/kafka/provider.go | 3 +- router/pkg/pubsub/kafka/provider_builder.go | 56 ++-- .../pkg/pubsub/kafka/provider_builder_test.go | 40 +-- router/pkg/pubsub/nats/provider.go | 3 +- router/pkg/pubsub/nats/provider_builder.go | 54 +--- .../pkg/pubsub/nats/provider_builder_test.go | 47 +-- router/pkg/pubsub/pubsub.go | 123 +++++++- router/pkg/pubsub/pubsub_test.go | 67 +++++ 12 files changed, 274 insertions(+), 535 deletions(-) delete mode 100644 router/pkg/pubsub/datasource/builder_test.go create mode 100644 router/pkg/pubsub/pubsub_test.go diff --git a/router/core/factoryresolver.go b/router/core/factoryresolver.go index 9a4283ad50..15f8e65046 100644 --- a/router/core/factoryresolver.go +++ b/router/core/factoryresolver.go @@ -443,28 +443,24 @@ func (l *Loader) Load(engineConfig *nodev1.EngineConfiguration, subgraphs []*nod } } - for _, providerBuilderFactory := range pubsub.ProviderBuilderFactories() { - providerBuilder := providerBuilderFactory( - l.ctx, - routerEngineConfig.Events, - l.logger, - l.resolver.InstanceData().HostName, - l.resolver.InstanceData().ListenAddress, - ) - factoryProviders, factoryDataSources, err := pubsub_datasource.BuildProvidersAndDataSources( - l.ctx, - providerBuilder, - pubSubDS, - ) - if err != nil { - return nil, providers, err - } - if len(factoryProviders) > 0 { - providers = append(providers, factoryProviders...) - } - if len(factoryDataSources) > 0 { - outConfig.DataSources = append(outConfig.DataSources, factoryDataSources...) - } + factoryProviders, factoryDataSources, err := pubsub.BuildProvidersAndDataSources( + l.ctx, + routerEngineConfig.Events, + l.logger, + pubSubDS, + l.resolver.InstanceData().HostName, + l.resolver.InstanceData().ListenAddress, + ) + if err != nil { + return nil, providers, err + } + + if len(factoryProviders) > 0 { + providers = append(providers, factoryProviders...) + } + + if len(factoryDataSources) > 0 { + outConfig.DataSources = append(outConfig.DataSources, factoryDataSources...) } return &outConfig, providers, nil diff --git a/router/pkg/pubsub/datasource/builder.go b/router/pkg/pubsub/datasource/builder.go index 75d805d841..814cebbd31 100644 --- a/router/pkg/pubsub/datasource/builder.go +++ b/router/pkg/pubsub/datasource/builder.go @@ -1,11 +1,7 @@ package datasource import ( - "context" - "slices" - "strconv" - - "github.com/wundergraph/cosmo/router/gen/proto/wg/cosmo/node/v1" + nodev1 "github.com/wundergraph/cosmo/router/gen/proto/wg/cosmo/node/v1" "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/plan" ) @@ -13,84 +9,3 @@ type DataSourceConfigurationWithMetadata struct { Configuration *nodev1.DataSourceConfiguration Metadata *plan.DataSourceMetadata } - -// BuildProvidersAndDataSources is a generic function that builds providers and data sources for the given provider -// builder and event configurations. -func BuildProvidersAndDataSources( - ctx context.Context, - providerBuilder PubSubProviderBuilder, - dsConfs []DataSourceConfigurationWithMetadata, -) ([]PubSubProvider, []plan.DataSource, error) { - - // Collect providers to initialize - var providerIds []string - for _, dsConf := range dsConfs { - for _, event := range providerBuilder.EngineEventConfigurations(dsConf.Configuration) { - providerId := event.GetEngineEventConfiguration().GetProviderId() - if !slices.Contains(providerIds, providerId) { - providerIds = append(providerIds, providerId) - } - } - } - - // Initialize used providers - pubSubProviders, err := providerBuilder.Providers(providerIds) - if err != nil { - return nil, nil, err - } - - // Create data sources - var outs []plan.DataSource - for _, dsConf := range dsConfs { - for i, event := range providerBuilder.EngineEventConfigurations(dsConf.Configuration) { - pubSubDataSource, err := providerBuilder.DataSource(event) - if err != nil { - return nil, nil, err - } - out, err := plan.NewDataSourceConfiguration( - dsConf.Configuration.Id+"-"+providerBuilder.TypeID()+"-"+strconv.Itoa(i), - NewFactory(ctx, pubSubDataSource), - getFilteredDataSourceMetadata(event, dsConf.Metadata), - pubSubDataSource, - ) - if err != nil { - return nil, nil, err - } - outs = append(outs, out) - } - } - - return pubSubProviders, outs, nil -} - -func getFilteredDataSourceMetadata[E EngineEventConfiguration](event E, dsMeta *plan.DataSourceMetadata) *plan.DataSourceMetadata { - // find used root types and fields - rootFields := make(map[string][]string) - - typeName := event.GetEngineEventConfiguration().GetTypeName() - fieldName := event.GetEngineEventConfiguration().GetFieldName() - if _, ok := rootFields[typeName]; !ok { - rootFields[typeName] = []string{} - } - rootFields[typeName] = append(rootFields[typeName], fieldName) - - // filter dsMeta.RootNodes - newRootNodes := []plan.TypeField{} - for _, node := range dsMeta.RootNodes { - newRootNode := plan.TypeField{ - TypeName: node.TypeName, - FieldNames: []string{}, - ExternalFieldNames: node.ExternalFieldNames, - } - for _, fieldName := range node.FieldNames { - if slices.Contains(rootFields[node.TypeName], fieldName) { - newRootNode.FieldNames = append(newRootNode.FieldNames, fieldName) - } - } - newRootNodes = append(newRootNodes, newRootNode) - } - newDsMeta := *dsMeta - newDsMeta.RootNodes = newRootNodes - - return &newDsMeta -} diff --git a/router/pkg/pubsub/datasource/builder_test.go b/router/pkg/pubsub/datasource/builder_test.go deleted file mode 100644 index f4b3b0bc25..0000000000 --- a/router/pkg/pubsub/datasource/builder_test.go +++ /dev/null @@ -1,268 +0,0 @@ -package datasource - -import ( - "context" - "errors" - "testing" - - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/mock" - "github.com/stretchr/testify/require" - "github.com/wundergraph/cosmo/router/gen/proto/wg/cosmo/node/v1" - "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/plan" - "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/resolve" -) - -func TestBuildProvidersAndDataSources_OK(t *testing.T) { - ctx := context.Background() - mockBuilder := new(MockPubSubProviderBuilder) - - dsMeta := &plan.DataSourceMetadata{ - RootNodes: []plan.TypeField{ - { - TypeName: "Type1", - FieldNames: []string{"Field1", "Field2"}, - }, - }, - } - - // Mock input data - event := &nodev1.EngineEventConfiguration{ - ProviderId: "provider-1", - TypeName: "Type1", - FieldName: "Field1", - Type: nodev1.EventType_PUBLISH, - } - dsConf := DataSourceConfigurationWithMetadata{ - Configuration: &nodev1.DataSourceConfiguration{ - Id: "test-id", - CustomEvents: &nodev1.DataSourceCustomEvents{ - Nats: []*nodev1.NatsEventConfiguration{ - { - EngineEventConfiguration: event, - }, - }, - }, - }, - Metadata: dsMeta, - } - dsConfs := []DataSourceConfigurationWithMetadata{dsConf} - var generalEvents []EngineEventConfiguration - for _, e := range dsConfs[0].Configuration.CustomEvents.Nats { - generalEvents = append(generalEvents, e) - } - - mockBuilder.On("EngineEventConfigurations", dsConf.Configuration).Return(generalEvents) - mockBuilder.On("Providers", []string{"provider-1"}).Return([]PubSubProvider{&MockPubSubProvider{}}, nil) - mockBuilder.On("DataSource", generalEvents[0]).Return(PubSubDataSource(&MockPubSubDataSource{}), nil) - - // Execute the function - providers, dataSources, err := BuildProvidersAndDataSources(ctx, mockBuilder, dsConfs) - - // Assertions - mockBuilder.AssertExpectations(t) - assert.NoError(t, err) - require.Len(t, providers, 1) - require.Len(t, dataSources, 1) - assert.True(t, dataSources[0].HasRootNode("Type1", "Field1")) - assert.False(t, dataSources[0].HasRootNode("Type1", "Field2")) -} - -func TestBuildProvidersAndDataSources_ProviderError(t *testing.T) { - ctx := context.Background() - mockBuilder := new(MockPubSubProviderBuilder) - - dsMeta := &plan.DataSourceMetadata{ - RootNodes: []plan.TypeField{ - { - TypeName: "Type1", - FieldNames: []string{"Field1", "Field2"}, - }, - }, - } - - // Mock input data - event := &nodev1.EngineEventConfiguration{ - ProviderId: "provider-1", - TypeName: "Type1", - FieldName: "Field1", - Type: nodev1.EventType_PUBLISH, - } - dsConf := DataSourceConfigurationWithMetadata{ - Configuration: &nodev1.DataSourceConfiguration{ - Id: "test-id", - CustomEvents: &nodev1.DataSourceCustomEvents{ - Nats: []*nodev1.NatsEventConfiguration{ - { - EngineEventConfiguration: event, - }, - }, - }, - }, - Metadata: dsMeta, - } - dsConfs := []DataSourceConfigurationWithMetadata{dsConf} - var generalEvents []EngineEventConfiguration - for _, e := range dsConfs[0].Configuration.CustomEvents.Nats { - generalEvents = append(generalEvents, e) - } - - mockBuilder.On("EngineEventConfigurations", dsConf.Configuration).Return(generalEvents) - mockBuilder.On("Providers", []string{"provider-1"}).Return(nil, errors.New("provider error")) - - // Execute the function - providers, dataSources, err := BuildProvidersAndDataSources(ctx, mockBuilder, dsConfs) - - // Assertions - mockBuilder.AssertExpectations(t) - assert.Error(t, err) - require.Len(t, providers, 0) - require.Len(t, dataSources, 0) -} - -func TestBuildProvidersAndDataSources_DataSourceError(t *testing.T) { - ctx := context.Background() - mockBuilder := new(MockPubSubProviderBuilder) - - dsMeta := &plan.DataSourceMetadata{ - RootNodes: []plan.TypeField{ - { - TypeName: "Type1", - FieldNames: []string{"Field1", "Field2"}, - }, - }, - } - - // Mock input data - event := &nodev1.EngineEventConfiguration{ - ProviderId: "provider-1", - TypeName: "Type1", - FieldName: "Field1", - Type: nodev1.EventType_PUBLISH, - } - dsConf := DataSourceConfigurationWithMetadata{ - Configuration: &nodev1.DataSourceConfiguration{ - Id: "test-id", - CustomEvents: &nodev1.DataSourceCustomEvents{ - Nats: []*nodev1.NatsEventConfiguration{ - { - EngineEventConfiguration: event, - }, - }, - }, - }, - Metadata: dsMeta, - } - dsConfs := []DataSourceConfigurationWithMetadata{dsConf} - var generalEvents []EngineEventConfiguration - for _, e := range dsConfs[0].Configuration.CustomEvents.Nats { - generalEvents = append(generalEvents, e) - } - - mockBuilder.On("EngineEventConfigurations", dsConf.Configuration).Return(generalEvents) - mockBuilder.On("Providers", []string{"provider-1"}).Return([]PubSubProvider{&MockPubSubProvider{}}, nil) - mockBuilder.On("DataSource", generalEvents[0]).Return(nil, errors.New("data source error")) - - // Execute the function - providers, dataSources, err := BuildProvidersAndDataSources(ctx, mockBuilder, dsConfs) - - // Assertions - mockBuilder.AssertExpectations(t) - assert.Error(t, err) - require.Len(t, providers, 0) - require.Len(t, dataSources, 0) -} - -type MockPubSubProviderBuilder struct { - mock.Mock -} - -func (m *MockPubSubProviderBuilder) EngineEventConfigurations(config *nodev1.DataSourceConfiguration) []EngineEventConfiguration { - args := m.Called(config) - arg := args.Get(0) - if arg == nil { - return nil - } - return arg.([]EngineEventConfiguration) -} - -func (m *MockPubSubProviderBuilder) Providers(providerIds []string) ([]PubSubProvider, error) { - args := m.Called(providerIds) - arg := args.Get(0) - if arg == nil { - return nil, args.Error(1) - } - return arg.([]PubSubProvider), args.Error(1) -} - -func (m *MockPubSubProviderBuilder) DataSource(event EngineEventConfiguration) (PubSubDataSource, error) { - args := m.Called(event) - arg := args.Get(0) - if arg == nil { - return nil, args.Error(1) - } - return arg.(PubSubDataSource), args.Error(1) -} - -func (m *MockPubSubProviderBuilder) TypeID() string { - return "mockType" -} - -type MockPubSubDataSource struct { - mock.Mock -} - -func (m *MockPubSubDataSource) ResolveDataSource() (resolve.DataSource, error) { - args := m.Called() - return args.Get(0).(resolve.DataSource), args.Error(1) -} - -func (m *MockPubSubDataSource) ResolveDataSourceInput(event []byte) (string, error) { - args := m.Called(event) - return args.String(0), args.Error(1) -} - -func (m *MockPubSubDataSource) EngineEventConfiguration() *nodev1.EngineEventConfiguration { - args := m.Called() - return args.Get(0).(*nodev1.EngineEventConfiguration) -} - -func (m *MockPubSubDataSource) ResolveDataSourceSubscription() (resolve.SubscriptionDataSource, error) { - args := m.Called() - return args.Get(0).(resolve.SubscriptionDataSource), args.Error(1) -} - -func (m *MockPubSubDataSource) ResolveDataSourceSubscriptionInput() (string, error) { - args := m.Called() - return args.String(0), args.Error(1) -} - -func (m *MockPubSubDataSource) TransformEventData(extractFn ArgumentTemplateCallback) error { - args := m.Called(extractFn) - return args.Error(0) -} - -// MockPubSubProvider is a mock implementation of the PubSubProvider interface -type MockPubSubProvider struct { - mock.Mock -} - -func (m *MockPubSubProvider) ID() string { - args := m.Called() - return args.String(0) -} - -func (m *MockPubSubProvider) TypeID() string { - args := m.Called() - return args.String(0) -} - -func (m *MockPubSubProvider) Startup(ctx context.Context) error { - args := m.Called(ctx) - return args.Error(0) -} - -func (m *MockPubSubProvider) Shutdown(ctx context.Context) error { - args := m.Called(ctx) - return args.Error(0) -} diff --git a/router/pkg/pubsub/datasource/provider.go b/router/pkg/pubsub/datasource/provider.go index b29581b5f3..a93d1e80c6 100644 --- a/router/pkg/pubsub/datasource/provider.go +++ b/router/pkg/pubsub/datasource/provider.go @@ -4,14 +4,15 @@ import ( "context" nodev1 "github.com/wundergraph/cosmo/router/gen/proto/wg/cosmo/node/v1" - "github.com/wundergraph/cosmo/router/pkg/config" - "go.uber.org/zap" ) -type PubSubProviderBuilderFactory func(ctx context.Context, config config.EventsConfiguration, logger *zap.Logger, hostName string, routerListenAddr string) PubSubProviderBuilder - type ArgumentTemplateCallback func(tpl string) (string, error) +type Lifecycle interface { + Startup(ctx context.Context) error + Shutdown(ctx context.Context) error +} + // PubSubProvider is the interface that the PubSub provider must implement type PubSubProvider interface { // ID Get the provider ID as specified in the configuration @@ -29,13 +30,11 @@ type EngineEventConfiguration interface { } // PubSubProviderBuilder is the interface that the provider builder must implement. -type PubSubProviderBuilder interface { +type PubSubProviderBuilder[P any, E any] interface { // TypeID Get the provider type id (e.g. "kafka", "nats") TypeID() string - // Providers Build the providers and their adapters; if ids are empty, all providers are built - Providers(ids []string) ([]PubSubProvider, error) - // DataSource Build the data source for the given provider and event configuration - DataSource(data EngineEventConfiguration) (PubSubDataSource, error) - // EngineEventConfigurations Get the engine event configurations for the given data source configuration - EngineEventConfigurations(in *nodev1.DataSourceConfiguration) []EngineEventConfiguration + // BuildProvider Build the provider and the adapter + BuildProvider(options P) (PubSubProvider, error) + // BuildDataSource Build the data source for the given provider and event configuration + BuildDataSource(data E) (PubSubDataSource, error) } diff --git a/router/pkg/pubsub/kafka/provider.go b/router/pkg/pubsub/kafka/provider.go index 59474dec56..c0854b1232 100644 --- a/router/pkg/pubsub/kafka/provider.go +++ b/router/pkg/pubsub/kafka/provider.go @@ -3,6 +3,7 @@ package kafka import ( "context" + "github.com/wundergraph/cosmo/router/pkg/pubsub/datasource" "go.uber.org/zap" ) @@ -10,7 +11,7 @@ const providerTypeID = "kafka" type PubSubProvider struct { id string - Adapter AdapterInterface + Adapter datasource.Lifecycle Logger *zap.Logger } diff --git a/router/pkg/pubsub/kafka/provider_builder.go b/router/pkg/pubsub/kafka/provider_builder.go index 02b009a76d..6225c4e7ec 100644 --- a/router/pkg/pubsub/kafka/provider_builder.go +++ b/router/pkg/pubsub/kafka/provider_builder.go @@ -4,7 +4,6 @@ import ( "context" "crypto/tls" "fmt" - "slices" "time" "github.com/twmb/franz-go/pkg/kgo" @@ -28,56 +27,37 @@ func (p *PubSubProviderBuilder) TypeID() string { return providerTypeID } -func (p *PubSubProviderBuilder) DataSource(data datasource.EngineEventConfiguration) (datasource.PubSubDataSource, error) { - kafkaEvent, ok := data.(*nodev1.KafkaEventConfiguration) - if !ok { - return nil, fmt.Errorf("failed to cast data to KafkaEventConfiguration") - } - providerId := kafkaEvent.GetEngineEventConfiguration().GetProviderId() +func (p *PubSubProviderBuilder) BuildDataSource(data *nodev1.KafkaEventConfiguration) (datasource.PubSubDataSource, error) { + providerId := data.GetEngineEventConfiguration().GetProviderId() adapter, ok := p.adapters[providerId] if !ok { return nil, fmt.Errorf("failed to get adapter for provider %s with ID %s", p.TypeID(), providerId) } return &PubSubDataSource{ - EventConfiguration: kafkaEvent, + EventConfiguration: data, KafkaAdapter: adapter, }, nil } -func (p *PubSubProviderBuilder) Providers(ids []string) ([]datasource.PubSubProvider, error) { - p.adapters = make(map[string]AdapterInterface) - pubSubProviders := []datasource.PubSubProvider{} - - // create providers - for _, provider := range p.config { - if !slices.Contains(ids, provider.ID) { - continue - } - adapter, pubSubProvider, err := buildProvider(p.ctx, provider, p.logger) - if err != nil { - return nil, err - } - p.adapters[provider.ID] = adapter - pubSubProviders = append(pubSubProviders, pubSubProvider) +func (p *PubSubProviderBuilder) BuildProvider(provider config.KafkaEventSource) (datasource.PubSubProvider, error) { + if p.adapters == nil { + p.adapters = make(map[string]AdapterInterface) } - for _, id := range ids { - if _, ok := p.adapters[id]; !ok { - return nil, fmt.Errorf("%s provider with ID %s is not defined", p.TypeID(), id) - } + if provider.ID == "" { + return nil, fmt.Errorf("provider ID is empty") } - return pubSubProviders, nil -} - -func (p *PubSubProviderBuilder) EngineEventConfigurations(in *nodev1.DataSourceConfiguration) []datasource.EngineEventConfiguration { - kafkaData := make([]datasource.EngineEventConfiguration, 0, len(in.GetCustomEvents().GetKafka())) - for _, kafkaEvent := range in.GetCustomEvents().GetKafka() { - kafkaData = append(kafkaData, kafkaEvent) + // create providers + adapter, pubSubProvider, err := buildProvider(p.ctx, provider, p.logger) + if err != nil { + return nil, err } - return kafkaData + p.adapters[provider.ID] = adapter + + return pubSubProvider, nil } // buildKafkaOptions creates a list of kgo.Opt options for the given Kafka event source configuration. @@ -126,16 +106,14 @@ func buildProvider(ctx context.Context, provider config.KafkaEventSource, logger return adapter, pubSubProvider, nil } -func PubSubProviderBuilderFactory( +func NewPubSubProviderBuilder( ctx context.Context, - config config.EventsConfiguration, logger *zap.Logger, hostName string, routerListenAddr string, -) datasource.PubSubProviderBuilder { +) datasource.PubSubProviderBuilder[config.KafkaEventSource, *nodev1.KafkaEventConfiguration] { return &PubSubProviderBuilder{ ctx: ctx, - config: config.Providers.Kafka, logger: logger, hostName: hostName, routerListenAddr: routerListenAddr, diff --git a/router/pkg/pubsub/kafka/provider_builder_test.go b/router/pkg/pubsub/kafka/provider_builder_test.go index 49ef049446..04a0a730e2 100644 --- a/router/pkg/pubsub/kafka/provider_builder_test.go +++ b/router/pkg/pubsub/kafka/provider_builder_test.go @@ -86,54 +86,38 @@ func TestBuildKafkaOptions(t *testing.T) { } func TestPubSubProviderBuilderFactory(t *testing.T) { - t.Run("returns nil if no Kafka configuration", func(t *testing.T) { + t.Run("errors if provider ID is empty", func(t *testing.T) { ctx := context.Background() - cfg := config.EventsConfiguration{} + cfg := config.KafkaEventSource{} logger := zaptest.NewLogger(t) - builder := PubSubProviderBuilderFactory(ctx, cfg, logger, "host", "addr") + builder := NewPubSubProviderBuilder(ctx, logger, "host", "addr") require.NotNil(t, builder) - providers, err := builder.Providers(nil) - require.NoError(t, err) - require.Empty(t, providers) - }) - - t.Run("errors if provider not found", func(t *testing.T) { - ctx := context.Background() - cfg := config.EventsConfiguration{} - logger := zaptest.NewLogger(t) - - builder := PubSubProviderBuilderFactory(ctx, cfg, logger, "host", "addr") - require.NotNil(t, builder) - providers, err := builder.Providers([]string{"unknown"}) + provider, err := builder.BuildProvider(cfg) require.Error(t, err) - require.Empty(t, providers) - assert.Contains(t, err.Error(), "provider with ID unknown is not defined") + require.Nil(t, provider) + assert.Contains(t, err.Error(), "provider ID is empty") }) t.Run("creates provider with configured adapters", func(t *testing.T) { providerId := "test-provider" - cfg := config.EventsConfiguration{ - Providers: config.EventProviders{ - Kafka: []config.KafkaEventSource{ - {ID: providerId, Brokers: []string{"localhost:9092"}}, - }, - }, + cfg := config.KafkaEventSource{ + ID: providerId, + Brokers: []string{"localhost:9092"}, } logger := zaptest.NewLogger(t) ctx := context.Background() - builder := PubSubProviderBuilderFactory(ctx, cfg, logger, "host", "addr") + builder := NewPubSubProviderBuilder(ctx, logger, "host", "addr") require.NotNil(t, builder) - providers, err := builder.Providers([]string{providerId}) + provider, err := builder.BuildProvider(cfg) require.NoError(t, err) - require.Len(t, providers, 1) // Check the returned provider - kafkaProvider, ok := providers[0].(*PubSubProvider) + kafkaProvider, ok := provider.(*PubSubProvider) require.True(t, ok) assert.NotNil(t, kafkaProvider.Logger) assert.NotNil(t, kafkaProvider.Adapter) diff --git a/router/pkg/pubsub/nats/provider.go b/router/pkg/pubsub/nats/provider.go index 16addceb14..bd574a9282 100644 --- a/router/pkg/pubsub/nats/provider.go +++ b/router/pkg/pubsub/nats/provider.go @@ -3,6 +3,7 @@ package nats import ( "context" + "github.com/wundergraph/cosmo/router/pkg/pubsub/datasource" "go.uber.org/zap" ) @@ -10,7 +11,7 @@ const providerTypeID = "nats" type PubSubProvider struct { id string - Adapter AdapterInterface + Adapter datasource.Lifecycle Logger *zap.Logger } diff --git a/router/pkg/pubsub/nats/provider_builder.go b/router/pkg/pubsub/nats/provider_builder.go index 5893898ded..5603c7ceb0 100644 --- a/router/pkg/pubsub/nats/provider_builder.go +++ b/router/pkg/pubsub/nats/provider_builder.go @@ -4,7 +4,6 @@ import ( "context" "errors" "fmt" - "slices" "time" "github.com/nats-io/nats.go" @@ -16,7 +15,6 @@ import ( type PubSubProviderBuilder struct { ctx context.Context - config []config.NatsEventSource logger *zap.Logger hostName string routerListenAddr string @@ -27,51 +25,29 @@ func (p *PubSubProviderBuilder) TypeID() string { return providerTypeID } -func (p *PubSubProviderBuilder) DataSource(data datasource.EngineEventConfiguration) (datasource.PubSubDataSource, error) { - natsEvent, ok := data.(*nodev1.NatsEventConfiguration) - if !ok { - return nil, fmt.Errorf("failed to cast data to NatsEventConfiguration") - } - providerId := natsEvent.GetEngineEventConfiguration().GetProviderId() +func (p *PubSubProviderBuilder) BuildDataSource(data *nodev1.NatsEventConfiguration) (datasource.PubSubDataSource, error) { + providerId := data.GetEngineEventConfiguration().GetProviderId() return &PubSubDataSource{ - EventConfiguration: natsEvent, + EventConfiguration: data, NatsAdapter: p.adapters[providerId], }, nil } -func (p *PubSubProviderBuilder) Providers(ids []string) ([]datasource.PubSubProvider, error) { +func (p *PubSubProviderBuilder) BuildProvider(provider config.NatsEventSource) (datasource.PubSubProvider, error) { p.adapters = make(map[string]AdapterInterface) - pubSubProviders := []datasource.PubSubProvider{} - // create providers - for _, provider := range p.config { - if !slices.Contains(ids, provider.ID) { - continue - } - adapter, pubSubProvider, err := buildProvider(p.ctx, provider, p.logger, p.hostName, p.routerListenAddr) - if err != nil { - return nil, err - } - p.adapters[provider.ID] = adapter - pubSubProviders = append(pubSubProviders, pubSubProvider) + if provider.ID == "" { + return nil, fmt.Errorf("provider ID is empty") } - for _, id := range ids { - if _, ok := p.adapters[id]; !ok { - return nil, fmt.Errorf("%s provider with ID %s is not defined", p.TypeID(), id) - } - } - - return pubSubProviders, nil -} - -func (p *PubSubProviderBuilder) EngineEventConfigurations(in *nodev1.DataSourceConfiguration) []datasource.EngineEventConfiguration { - natsData := make([]datasource.EngineEventConfiguration, 0, len(in.GetCustomEvents().GetNats())) - for _, natsEvent := range in.GetCustomEvents().GetNats() { - natsData = append(natsData, natsEvent) + // create providers + adapter, pubSubProvider, err := buildProvider(p.ctx, provider, p.logger, p.hostName, p.routerListenAddr) + if err != nil { + return nil, err } + p.adapters[provider.ID] = adapter - return natsData + return pubSubProvider, nil } func buildNatsOptions(eventSource config.NatsEventSource, logger *zap.Logger) ([]nats.Option, error) { @@ -136,16 +112,14 @@ func buildProvider(ctx context.Context, provider config.NatsEventSource, logger return adapter, pubSubProvider, nil } -func PubSubProviderBuilderFactory( +func NewPubSubProviderBuilder( ctx context.Context, - config config.EventsConfiguration, logger *zap.Logger, hostName string, routerListenAddr string, -) datasource.PubSubProviderBuilder { +) datasource.PubSubProviderBuilder[config.NatsEventSource, *nodev1.NatsEventConfiguration] { return &PubSubProviderBuilder{ ctx: ctx, - config: config.Providers.Nats, logger: logger, hostName: hostName, routerListenAddr: routerListenAddr, diff --git a/router/pkg/pubsub/nats/provider_builder_test.go b/router/pkg/pubsub/nats/provider_builder_test.go index 61efd1d0e0..53fa9ddf20 100644 --- a/router/pkg/pubsub/nats/provider_builder_test.go +++ b/router/pkg/pubsub/nats/provider_builder_test.go @@ -158,60 +158,41 @@ func TestTransformEventConfig(t *testing.T) { } func TestPubSubProviderBuilderFactory(t *testing.T) { - t.Run("returns nil if no NATS configuration", func(t *testing.T) { + t.Run("errors if provider ID is empty", func(t *testing.T) { ctx := context.Background() - cfg := config.EventsConfiguration{} + cfg := config.NatsEventSource{} logger := zaptest.NewLogger(t) - builder := PubSubProviderBuilderFactory(ctx, cfg, logger, "host", "addr") + builder := NewPubSubProviderBuilder(ctx, logger, "host", "addr") require.NotNil(t, builder) - providers, err := builder.Providers(nil) - require.NoError(t, err) - require.Empty(t, providers) - }) - - t.Run("errors if provider not found", func(t *testing.T) { - ctx := context.Background() - cfg := config.EventsConfiguration{} - logger := zaptest.NewLogger(t) - - builder := PubSubProviderBuilderFactory(ctx, cfg, logger, "host", "addr") - require.NotNil(t, builder) - providers, err := builder.Providers([]string{"unknown"}) + provider, err := builder.BuildProvider(cfg) require.Error(t, err) - require.Empty(t, providers) - assert.Contains(t, err.Error(), "provider with ID unknown is not defined") + require.Nil(t, provider) + assert.Contains(t, err.Error(), "provider ID is empty") }) t.Run("creates provider with configured adapters", func(t *testing.T) { providerId := "test-provider" - cfg := config.EventsConfiguration{ - Providers: config.EventProviders{ - Nats: []config.NatsEventSource{ - { - ID: providerId, - URL: "nats://localhost:4222", - }, - }, - }, + cfg := config.NatsEventSource{ + ID: providerId, + URL: "nats://localhost:4222", } logger := zaptest.NewLogger(t) ctx := context.Background() - builder := PubSubProviderBuilderFactory(ctx, cfg, logger, "host", "addr") + builder := NewPubSubProviderBuilder(ctx, logger, "host", "addr") require.NotNil(t, builder) - providers, err := builder.Providers([]string{providerId}) + provider, err := builder.BuildProvider(cfg) require.NoError(t, err) - require.Len(t, providers, 1) // Check the returned provider - kafkaProvider, ok := providers[0].(*PubSubProvider) + natsProvider, ok := provider.(*PubSubProvider) require.True(t, ok) - assert.NotNil(t, kafkaProvider.Logger) - assert.NotNil(t, kafkaProvider.Adapter) + assert.NotNil(t, natsProvider.Logger) + assert.NotNil(t, natsProvider.Adapter) }) } diff --git a/router/pkg/pubsub/pubsub.go b/router/pkg/pubsub/pubsub.go index a42bb64ebd..0a270848c2 100644 --- a/router/pkg/pubsub/pubsub.go +++ b/router/pkg/pubsub/pubsub.go @@ -1,15 +1,126 @@ package pubsub import ( - "github.com/wundergraph/cosmo/router/pkg/pubsub/datasource" + "context" + "slices" + "strconv" + + "github.com/wundergraph/cosmo/router/pkg/config" + pubsub_datasource "github.com/wundergraph/cosmo/router/pkg/pubsub/datasource" "github.com/wundergraph/cosmo/router/pkg/pubsub/kafka" "github.com/wundergraph/cosmo/router/pkg/pubsub/nats" + "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/plan" + "go.uber.org/zap" ) -// ProvidersAndDataSourcesBuilders returns a list of all PubSub builders -func ProviderBuilderFactories() []datasource.PubSubProviderBuilderFactory { - return []datasource.PubSubProviderBuilderFactory{ - kafka.PubSubProviderBuilderFactory, - nats.PubSubProviderBuilderFactory, +// BuildProvidersAndDataSources is a generic function that builds providers and data sources for the given provider +// builder and event configurations. +func BuildProvidersAndDataSources( + ctx context.Context, + config config.EventsConfiguration, + logger *zap.Logger, + dsConfs []pubsub_datasource.DataSourceConfigurationWithMetadata, + hostName string, + routerListenAddr string, +) ([]pubsub_datasource.PubSubProvider, []plan.DataSource, error) { + var pubSubProviders []pubsub_datasource.PubSubProvider + + kafkaBuilder := kafka.NewPubSubProviderBuilder(ctx, logger, hostName, routerListenAddr) + kafkaProviderIds := []string{} + natsBuilder := nats.NewPubSubProviderBuilder(ctx, logger, hostName, routerListenAddr) + natsProviderIds := []string{} + + for _, event := range config.Providers.Kafka { + provider, err := kafkaBuilder.BuildProvider(event) + if err != nil { + return nil, nil, err + } + pubSubProviders = append(pubSubProviders, provider) + kafkaProviderIds = append(kafkaProviderIds, event.ID) + } + for _, event := range config.Providers.Nats { + provider, err := natsBuilder.BuildProvider(event) + if err != nil { + return nil, nil, err + } + pubSubProviders = append(pubSubProviders, provider) + natsProviderIds = append(natsProviderIds, event.ID) + } + + // Create data sources + var outs []plan.DataSource + for _, dsConf := range dsConfs { + for i, event := range dsConf.Configuration.GetCustomEvents().GetKafka() { + if !slices.Contains(kafkaProviderIds, event.GetEngineEventConfiguration().GetProviderId()) { + continue + } + pubSubDataSource, err := kafkaBuilder.BuildDataSource(event) + if err != nil { + return nil, nil, err + } + out, err := plan.NewDataSourceConfiguration( + dsConf.Configuration.Id+"-"+kafkaBuilder.TypeID()+"-"+strconv.Itoa(i), + pubsub_datasource.NewFactory(ctx, pubSubDataSource), + getFilteredDataSourceMetadata(event, dsConf.Metadata), + pubSubDataSource, + ) + if err != nil { + return nil, nil, err + } + outs = append(outs, out) + } + for i, event := range dsConf.Configuration.GetCustomEvents().GetNats() { + if !slices.Contains(natsProviderIds, event.GetEngineEventConfiguration().GetProviderId()) { + continue + } + pubSubDataSource, err := natsBuilder.BuildDataSource(event) + if err != nil { + return nil, nil, err + } + out, err := plan.NewDataSourceConfiguration( + dsConf.Configuration.Id+"-"+natsBuilder.TypeID()+"-"+strconv.Itoa(i), + pubsub_datasource.NewFactory(ctx, pubSubDataSource), + getFilteredDataSourceMetadata(event, dsConf.Metadata), + pubSubDataSource, + ) + if err != nil { + return nil, nil, err + } + outs = append(outs, out) + } + } + + return pubSubProviders, outs, nil +} + +func getFilteredDataSourceMetadata[E pubsub_datasource.EngineEventConfiguration](event E, dsMeta *plan.DataSourceMetadata) *plan.DataSourceMetadata { + // find used root types and fields + rootFields := make(map[string][]string) + + typeName := event.GetEngineEventConfiguration().GetTypeName() + fieldName := event.GetEngineEventConfiguration().GetFieldName() + if _, ok := rootFields[typeName]; !ok { + rootFields[typeName] = []string{} } + rootFields[typeName] = append(rootFields[typeName], fieldName) + + // filter dsMeta.RootNodes + newRootNodes := []plan.TypeField{} + for _, node := range dsMeta.RootNodes { + newRootNode := plan.TypeField{ + TypeName: node.TypeName, + FieldNames: []string{}, + ExternalFieldNames: node.ExternalFieldNames, + } + for _, fieldName := range node.FieldNames { + if slices.Contains(rootFields[node.TypeName], fieldName) { + newRootNode.FieldNames = append(newRootNode.FieldNames, fieldName) + } + } + newRootNodes = append(newRootNodes, newRootNode) + } + newDsMeta := *dsMeta + newDsMeta.RootNodes = newRootNodes + + return &newDsMeta } diff --git a/router/pkg/pubsub/pubsub_test.go b/router/pkg/pubsub/pubsub_test.go new file mode 100644 index 0000000000..637223b1df --- /dev/null +++ b/router/pkg/pubsub/pubsub_test.go @@ -0,0 +1,67 @@ +package pubsub + +import ( + "context" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + nodev1 "github.com/wundergraph/cosmo/router/gen/proto/wg/cosmo/node/v1" + "github.com/wundergraph/cosmo/router/pkg/config" + pubsub_datasource "github.com/wundergraph/cosmo/router/pkg/pubsub/datasource" + "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/plan" + "go.uber.org/zap" +) + +func TestBuildProvidersAndDataSources_OK(t *testing.T) { + ctx := context.Background() + + dsMeta := &plan.DataSourceMetadata{ + RootNodes: []plan.TypeField{ + { + TypeName: "Type1", + FieldNames: []string{"Field1", "Field2"}, + }, + }, + } + + // Mock input data + event := &nodev1.EngineEventConfiguration{ + ProviderId: "provider-1", + TypeName: "Type1", + FieldName: "Field1", + Type: nodev1.EventType_PUBLISH, + } + dsConf := pubsub_datasource.DataSourceConfigurationWithMetadata{ + Configuration: &nodev1.DataSourceConfiguration{ + Id: "test-id", + CustomEvents: &nodev1.DataSourceCustomEvents{ + Nats: []*nodev1.NatsEventConfiguration{ + { + EngineEventConfiguration: event, + }, + }, + }, + }, + Metadata: dsMeta, + } + dsConfs := []pubsub_datasource.DataSourceConfigurationWithMetadata{dsConf} + + // Execute the function + providers, dataSources, err := BuildProvidersAndDataSources(ctx, config.EventsConfiguration{ + Providers: config.EventProviders{ + Nats: []config.NatsEventSource{ + {ID: "provider-1"}, + }, + }, + }, zap.NewNop(), dsConfs, "host", "addr") + + // Assertions + assert.NoError(t, err) + require.Len(t, providers, 1) + require.Equal(t, providers[0].ID(), "provider-1") + require.Equal(t, providers[0].TypeID(), "nats") + require.Len(t, dataSources, 1) + assert.True(t, dataSources[0].HasRootNode("Type1", "Field1")) + assert.False(t, dataSources[0].HasRootNode("Type1", "Field2")) +} From cb6ce981a174683809363b55f2329bcc7fc890a8 Mon Sep 17 00:00:00 2001 From: Alessandro Pagnin Date: Wed, 28 May 2025 08:15:44 +0200 Subject: [PATCH 074/126] chore: fix unused field --- router/pkg/pubsub/kafka/provider_builder.go | 1 - 1 file changed, 1 deletion(-) diff --git a/router/pkg/pubsub/kafka/provider_builder.go b/router/pkg/pubsub/kafka/provider_builder.go index 6225c4e7ec..e4c8e52a40 100644 --- a/router/pkg/pubsub/kafka/provider_builder.go +++ b/router/pkg/pubsub/kafka/provider_builder.go @@ -16,7 +16,6 @@ import ( type PubSubProviderBuilder struct { ctx context.Context - config []config.KafkaEventSource logger *zap.Logger hostName string routerListenAddr string From dec7f6d98fcf3173579d569d5c57dcf938cc91d5 Mon Sep 17 00:00:00 2001 From: Alessandro Pagnin Date: Wed, 28 May 2025 10:22:43 +0200 Subject: [PATCH 075/126] chore: testenv now don't add empty providers --- router-tests/events/nats_events_test.go | 2 +- router-tests/structured_logging_test.go | 44 +++++++++---------- router-tests/testenv/testenv.go | 18 ++++---- router/pkg/pubsub/kafka/provider_builder.go | 10 +---- .../pkg/pubsub/kafka/provider_builder_test.go | 13 ------ router/pkg/pubsub/nats/provider_builder.go | 15 +++---- .../pkg/pubsub/nats/provider_builder_test.go | 13 ------ router/pkg/pubsub/pubsub.go | 17 +++---- 8 files changed, 50 insertions(+), 82 deletions(-) diff --git a/router-tests/events/nats_events_test.go b/router-tests/events/nats_events_test.go index 531bcee18a..365c93fba2 100644 --- a/router-tests/events/nats_events_test.go +++ b/router-tests/events/nats_events_test.go @@ -138,7 +138,7 @@ func TestNatsEvents(t *testing.T) { xEnv.WaitForConnectionCount(0, NatsWaitTimeout) natsLogs := xEnv.Observer().FilterMessageSnippet("Nats").All() - require.Len(t, natsLogs, 4) + require.Len(t, natsLogs, 2) providerIDFields := xEnv.Observer().FilterField(zap.String("provider_id", "my-nats")).All() require.Len(t, providerIDFields, 3) }) diff --git a/router-tests/structured_logging_test.go b/router-tests/structured_logging_test.go index 157283d041..8948b40701 100644 --- a/router-tests/structured_logging_test.go +++ b/router-tests/structured_logging_test.go @@ -164,15 +164,15 @@ func TestRouterStartLogs(t *testing.T) { }, }, func(t *testing.T, xEnv *testenv.Environment) { logEntries := xEnv.Observer().All() - require.Len(t, logEntries, 15) + require.Len(t, logEntries, 12) natsLogs := xEnv.Observer().FilterMessageSnippet("Nats Event source enabled").All() - require.Len(t, natsLogs, 4) + require.Len(t, natsLogs, 2) natsConnectedLogs := xEnv.Observer().FilterMessageSnippet("NATS connection established").All() require.Len(t, natsConnectedLogs, 4) providerIDFields := xEnv.Observer().FilterField(zap.String("provider_id", "default")).All() require.Len(t, providerIDFields, 3) kafkaLogs := xEnv.Observer().FilterMessageSnippet("Kafka Event source enabled").All() - require.Len(t, kafkaLogs, 2) + require.Len(t, kafkaLogs, 1) playgroundLog := xEnv.Observer().FilterMessage("Serving GraphQL playground") require.Equal(t, playgroundLog.Len(), 1) featureFlagLog := xEnv.Observer().FilterMessage("Feature flags enabled") @@ -316,7 +316,7 @@ func TestFlakyAccessLogs(t *testing.T) { }) require.JSONEq(t, employeesIDData, res.Body) logEntries := xEnv.Observer().All() - require.Len(t, logEntries, 10) + require.Len(t, logEntries, 6) requestLog := xEnv.Observer().FilterMessage("/graphql") require.Equal(t, requestLog.Len(), 1) requestContext := requestLog.All()[0].ContextMap() @@ -352,7 +352,7 @@ func TestFlakyAccessLogs(t *testing.T) { }) require.JSONEq(t, employeesIDData, res.Body) logEntries := xEnv.Observer().All() - require.Len(t, logEntries, 10) + require.Len(t, logEntries, 6) requestLog := xEnv.Observer().FilterMessage("/graphql") require.Equal(t, requestLog.Len(), 1) requestContext := requestLog.All()[0].ContextMap() @@ -450,7 +450,7 @@ func TestFlakyAccessLogs(t *testing.T) { }) require.JSONEq(t, employeesIDData, res.Body) logEntries := xEnv.Observer().All() - require.Len(t, logEntries, 10) + require.Len(t, logEntries, 6) requestLog := xEnv.Observer().FilterMessage("/graphql") require.Equal(t, requestLog.Len(), 1) requestContext := requestLog.All()[0].ContextMap() @@ -511,7 +511,7 @@ func TestFlakyAccessLogs(t *testing.T) { }) require.JSONEq(t, employeesIDData, res.Body) logEntries := xEnv.Observer().All() - require.Len(t, logEntries, 10) + require.Len(t, logEntries, 6) requestLog := xEnv.Observer().FilterMessage("/graphql") require.Equal(t, requestLog.Len(), 1) requestContext := requestLog.All()[0].ContextMap() @@ -556,7 +556,7 @@ func TestFlakyAccessLogs(t *testing.T) { }) require.JSONEq(t, employeesIDData, res.Body) logEntries := xEnv.Observer().All() - require.Len(t, logEntries, 10) + require.Len(t, logEntries, 6) requestLog := xEnv.Observer().FilterMessage("/graphql") require.Equal(t, requestLog.Len(), 1) requestContext := requestLog.All()[0].ContextMap() @@ -671,7 +671,7 @@ func TestFlakyAccessLogs(t *testing.T) { require.NoError(t, err) require.Equal(t, `{"errors":[{"message":"unexpected token - got: EOF want one of: [RBRACE IDENT SPREAD]","locations":[{"line":0,"column":0}]}]}`, res.Body) logEntries := xEnv.Observer().All() - require.Len(t, logEntries, 10) + require.Len(t, logEntries, 6) requestLog := xEnv.Observer().FilterMessage("/graphql") require.Equal(t, requestLog.Len(), 1) requestContext := requestLog.All()[0].ContextMap() @@ -790,7 +790,7 @@ func TestFlakyAccessLogs(t *testing.T) { require.NoError(t, err) require.Equal(t, `{"errors":[{"message":"field: notExists not defined on type: Query","path":["query"]}]}`, res.Body) logEntries := xEnv.Observer().All() - require.Len(t, logEntries, 10) + require.Len(t, logEntries, 6) requestLog := xEnv.Observer().FilterMessage("/graphql") require.Equal(t, requestLog.Len(), 1) requestContext := requestLog.All()[0].ContextMap() @@ -923,7 +923,7 @@ func TestFlakyAccessLogs(t *testing.T) { require.NoError(t, err) require.Equal(t, "", res.Body) logEntries := xEnv.Observer().All() - require.Len(t, logEntries, 11) + require.Len(t, logEntries, 7) requestLog := xEnv.Observer().FilterMessage("[Recovery from panic]") require.Equal(t, requestLog.Len(), 1) requestContext := requestLog.All()[0].ContextMap() @@ -954,7 +954,7 @@ func TestFlakyAccessLogs(t *testing.T) { "validation_time", } - require.NotEmpty(t, logEntries[10].Stack) + require.NotEmpty(t, logEntries[6].Stack) checkValues(t, requestContext, expectedValues, additionalExpectedKeys) }) @@ -1060,7 +1060,7 @@ func TestFlakyAccessLogs(t *testing.T) { require.NoError(t, err) require.Equal(t, "", res.Body) logEntries := xEnv.Observer().All() - require.Len(t, logEntries, 11) + require.Len(t, logEntries, 7) requestLog := xEnv.Observer().FilterMessage("[Recovery from panic]") require.Equal(t, requestLog.Len(), 1) requestContext := requestLog.All()[0].ContextMap() @@ -1091,7 +1091,7 @@ func TestFlakyAccessLogs(t *testing.T) { "validation_time", } - require.NotEmpty(t, logEntries[10].Stack) + require.NotEmpty(t, logEntries[6].Stack) checkValues(t, requestContext, expectedValues, additionalExpectedKeys) }) @@ -1149,7 +1149,7 @@ func TestFlakyAccessLogs(t *testing.T) { }) require.Equal(t, `{"errors":[{"message":"Failed to fetch from Subgraph 'products' at Path 'employees'.","extensions":{"errors":[{"message":"Unauthorized","extensions":{"code":"UNAUTHORIZED"}}],"statusCode":403}}],"data":{"employees":[{"id":1,"details":{"forename":"Jens","surname":"Neuse"},"notes":null},{"id":2,"details":{"forename":"Dustin","surname":"Deus"},"notes":null},{"id":3,"details":{"forename":"Stefan","surname":"Avram"},"notes":null},{"id":4,"details":{"forename":"Björn","surname":"Schwenzer"},"notes":null},{"id":5,"details":{"forename":"Sergiy","surname":"Petrunin"},"notes":null},{"id":7,"details":{"forename":"Suvij","surname":"Surya"},"notes":null},{"id":8,"details":{"forename":"Nithin","surname":"Kumar"},"notes":null},{"id":10,"details":{"forename":"Eelco","surname":"Wiersma"},"notes":null},{"id":11,"details":{"forename":"Alexandra","surname":"Neuse"},"notes":null},{"id":12,"details":{"forename":"David","surname":"Stutt"},"notes":null}]}}`, res.Body) logEntries := xEnv.Observer().All() - require.Len(t, logEntries, 10) + require.Len(t, logEntries, 6) requestLog := xEnv.Observer().FilterMessage("/graphql") require.Equal(t, requestLog.Len(), 1) requestContext := requestLog.All()[0].ContextMap() @@ -1194,7 +1194,7 @@ func TestFlakyAccessLogs(t *testing.T) { }) require.JSONEq(t, employeesIDData, res.Body) logEntries := xEnv.Observer().All() - require.Len(t, logEntries, 11) + require.Len(t, logEntries, 7) requestLog := xEnv.Observer().FilterMessage("/graphql") require.Equal(t, requestLog.Len(), 2) @@ -1245,7 +1245,7 @@ func TestFlakyAccessLogs(t *testing.T) { }) require.JSONEq(t, employeesIDData, res.Body) logEntries := xEnv.Observer().All() - require.Len(t, logEntries, 11) + require.Len(t, logEntries, 7) requestLog := xEnv.Observer().FilterMessage("/graphql") require.Equal(t, requestLog.Len(), 2) requestContext := requestLog.All()[0].ContextMap() @@ -1350,7 +1350,7 @@ func TestFlakyAccessLogs(t *testing.T) { }) require.JSONEq(t, employeesIDData, res.Body) logEntries := xEnv.Observer().All() - require.Len(t, logEntries, 11) + require.Len(t, logEntries, 7) requestLog := xEnv.Observer().FilterMessage("/graphql") require.Equal(t, requestLog.Len(), 2) requestContext := requestLog.All()[0].ContextMap() @@ -1437,7 +1437,7 @@ func TestFlakyAccessLogs(t *testing.T) { }) require.JSONEq(t, employeesIDData, res.Body) logEntries := xEnv.Observer().All() - require.Len(t, logEntries, 11) + require.Len(t, logEntries, 7) requestLog := xEnv.Observer().FilterMessage("/graphql") require.Equal(t, requestLog.Len(), 2) requestContext := requestLog.All()[0].ContextMap() @@ -1532,7 +1532,7 @@ func TestFlakyAccessLogs(t *testing.T) { }) require.Equal(t, `{"errors":[{"message":"Failed to fetch from Subgraph 'products' at Path 'employees'.","extensions":{"errors":[{"message":"Unauthorized","extensions":{"code":"UNAUTHORIZED"}}],"statusCode":403}}],"data":{"employees":[{"id":1,"details":{"forename":"Jens","surname":"Neuse"},"notes":null},{"id":2,"details":{"forename":"Dustin","surname":"Deus"},"notes":null},{"id":3,"details":{"forename":"Stefan","surname":"Avram"},"notes":null},{"id":4,"details":{"forename":"Björn","surname":"Schwenzer"},"notes":null},{"id":5,"details":{"forename":"Sergiy","surname":"Petrunin"},"notes":null},{"id":7,"details":{"forename":"Suvij","surname":"Surya"},"notes":null},{"id":8,"details":{"forename":"Nithin","surname":"Kumar"},"notes":null},{"id":10,"details":{"forename":"Eelco","surname":"Wiersma"},"notes":null},{"id":11,"details":{"forename":"Alexandra","surname":"Neuse"},"notes":null},{"id":12,"details":{"forename":"David","surname":"Stutt"},"notes":null}]}}`, res.Body) logEntries := xEnv.Observer().All() - require.Len(t, logEntries, 12) + require.Len(t, logEntries, 8) requestLog := xEnv.Observer().FilterMessage("/graphql") require.Equal(t, requestLog.Len(), 3) @@ -1715,7 +1715,7 @@ func TestFlakyAccessLogs(t *testing.T) { require.NoError(t, err) require.Equal(t, `{"data":{"employees":[{"id":1},{"id":2},{"id":3},{"id":4},{"id":5},{"id":7},{"id":8},{"id":10},{"id":11},{"id":12}]}}`, res.Body) logEntries := xEnv.Observer().All() - require.Len(t, logEntries, 11) + require.Len(t, logEntries, 7) requestLog := xEnv.Observer().FilterMessage("/graphql") require.Equal(t, requestLog.Len(), 2) requestContext := requestLog.All()[0].ContextMap() @@ -1808,7 +1808,7 @@ func TestFlakyAccessLogs(t *testing.T) { }) require.Equal(t, `{"errors":[{"message":"Failed to fetch from Subgraph 'products' at Path 'employees'."}],"data":{"employees":[{"id":1,"details":{"forename":"Jens","surname":"Neuse"},"notes":null},{"id":2,"details":{"forename":"Dustin","surname":"Deus"},"notes":null},{"id":3,"details":{"forename":"Stefan","surname":"Avram"},"notes":null},{"id":4,"details":{"forename":"Björn","surname":"Schwenzer"},"notes":null},{"id":5,"details":{"forename":"Sergiy","surname":"Petrunin"},"notes":null},{"id":7,"details":{"forename":"Suvij","surname":"Surya"},"notes":null},{"id":8,"details":{"forename":"Nithin","surname":"Kumar"},"notes":null},{"id":10,"details":{"forename":"Eelco","surname":"Wiersma"},"notes":null},{"id":11,"details":{"forename":"Alexandra","surname":"Neuse"},"notes":null},{"id":12,"details":{"forename":"David","surname":"Stutt"},"notes":null}]}}`, res.Body) logEntries := xEnv.Observer().All() - require.Len(t, logEntries, 12) + require.Len(t, logEntries, 8) requestLog := xEnv.Observer().FilterMessage("/graphql") require.Equal(t, requestLog.Len(), 3) diff --git a/router-tests/testenv/testenv.go b/router-tests/testenv/testenv.go index 22ef283ccd..23cf321423 100644 --- a/router-tests/testenv/testenv.go +++ b/router-tests/testenv/testenv.go @@ -374,7 +374,6 @@ func CreateTestEnv(t testing.TB, cfg *Config) (*Environment, error) { if cfg.EnableKafka { cfg.KafkaSeeds = []string{"localhost:9092"} - client, err := kgo.NewClient( kgo.SeedBrokers(cfg.KafkaSeeds...), ) @@ -848,8 +847,8 @@ func configureRouter(listenerAddr string, testConfig *Config, routerConfig *node testConfig.ModifySubgraphErrorPropagation(&cfg.SubgraphErrorPropagation) } - natsEventSources := make([]config.NatsEventSource, len(DemoNatsProviders)) - kafkaEventSources := make([]config.KafkaEventSource, len(DemoKafkaProviders)) + var natsEventSources []config.NatsEventSource + var kafkaEventSources []config.KafkaEventSource if natsData != nil { for _, sourceName := range DemoNatsProviders { @@ -859,11 +858,14 @@ func configureRouter(listenerAddr string, testConfig *Config, routerConfig *node }) } } - for _, sourceName := range DemoKafkaProviders { - kafkaEventSources = append(kafkaEventSources, config.KafkaEventSource{ - ID: sourceName, - Brokers: testConfig.KafkaSeeds, - }) + + if testConfig.KafkaSeeds != nil { + for _, sourceName := range DemoKafkaProviders { + kafkaEventSources = append(kafkaEventSources, config.KafkaEventSource{ + ID: sourceName, + Brokers: testConfig.KafkaSeeds, + }) + } } eventsConfiguration := config.EventsConfiguration{ diff --git a/router/pkg/pubsub/kafka/provider_builder.go b/router/pkg/pubsub/kafka/provider_builder.go index e4c8e52a40..a613cbe8db 100644 --- a/router/pkg/pubsub/kafka/provider_builder.go +++ b/router/pkg/pubsub/kafka/provider_builder.go @@ -40,15 +40,6 @@ func (p *PubSubProviderBuilder) BuildDataSource(data *nodev1.KafkaEventConfigura } func (p *PubSubProviderBuilder) BuildProvider(provider config.KafkaEventSource) (datasource.PubSubProvider, error) { - if p.adapters == nil { - p.adapters = make(map[string]AdapterInterface) - } - - if provider.ID == "" { - return nil, fmt.Errorf("provider ID is empty") - } - - // create providers adapter, pubSubProvider, err := buildProvider(p.ctx, provider, p.logger) if err != nil { return nil, err @@ -116,5 +107,6 @@ func NewPubSubProviderBuilder( logger: logger, hostName: hostName, routerListenAddr: routerListenAddr, + adapters: make(map[string]AdapterInterface), } } diff --git a/router/pkg/pubsub/kafka/provider_builder_test.go b/router/pkg/pubsub/kafka/provider_builder_test.go index 04a0a730e2..4ae39743d4 100644 --- a/router/pkg/pubsub/kafka/provider_builder_test.go +++ b/router/pkg/pubsub/kafka/provider_builder_test.go @@ -86,19 +86,6 @@ func TestBuildKafkaOptions(t *testing.T) { } func TestPubSubProviderBuilderFactory(t *testing.T) { - t.Run("errors if provider ID is empty", func(t *testing.T) { - ctx := context.Background() - cfg := config.KafkaEventSource{} - logger := zaptest.NewLogger(t) - - builder := NewPubSubProviderBuilder(ctx, logger, "host", "addr") - require.NotNil(t, builder) - provider, err := builder.BuildProvider(cfg) - require.Error(t, err) - require.Nil(t, provider) - assert.Contains(t, err.Error(), "provider ID is empty") - }) - t.Run("creates provider with configured adapters", func(t *testing.T) { providerId := "test-provider" diff --git a/router/pkg/pubsub/nats/provider_builder.go b/router/pkg/pubsub/nats/provider_builder.go index 5603c7ceb0..0b6f193ecf 100644 --- a/router/pkg/pubsub/nats/provider_builder.go +++ b/router/pkg/pubsub/nats/provider_builder.go @@ -27,20 +27,18 @@ func (p *PubSubProviderBuilder) TypeID() string { func (p *PubSubProviderBuilder) BuildDataSource(data *nodev1.NatsEventConfiguration) (datasource.PubSubDataSource, error) { providerId := data.GetEngineEventConfiguration().GetProviderId() + adapter, ok := p.adapters[providerId] + if !ok { + return nil, fmt.Errorf("failed to get adapter for provider %s with ID %s", p.TypeID(), providerId) + } + return &PubSubDataSource{ EventConfiguration: data, - NatsAdapter: p.adapters[providerId], + NatsAdapter: adapter, }, nil } func (p *PubSubProviderBuilder) BuildProvider(provider config.NatsEventSource) (datasource.PubSubProvider, error) { - p.adapters = make(map[string]AdapterInterface) - - if provider.ID == "" { - return nil, fmt.Errorf("provider ID is empty") - } - - // create providers adapter, pubSubProvider, err := buildProvider(p.ctx, provider, p.logger, p.hostName, p.routerListenAddr) if err != nil { return nil, err @@ -123,5 +121,6 @@ func NewPubSubProviderBuilder( logger: logger, hostName: hostName, routerListenAddr: routerListenAddr, + adapters: make(map[string]AdapterInterface), } } diff --git a/router/pkg/pubsub/nats/provider_builder_test.go b/router/pkg/pubsub/nats/provider_builder_test.go index 53fa9ddf20..8b6d60d34f 100644 --- a/router/pkg/pubsub/nats/provider_builder_test.go +++ b/router/pkg/pubsub/nats/provider_builder_test.go @@ -158,19 +158,6 @@ func TestTransformEventConfig(t *testing.T) { } func TestPubSubProviderBuilderFactory(t *testing.T) { - t.Run("errors if provider ID is empty", func(t *testing.T) { - ctx := context.Background() - cfg := config.NatsEventSource{} - logger := zaptest.NewLogger(t) - - builder := NewPubSubProviderBuilder(ctx, logger, "host", "addr") - require.NotNil(t, builder) - provider, err := builder.BuildProvider(cfg) - require.Error(t, err) - require.Nil(t, provider) - assert.Contains(t, err.Error(), "provider ID is empty") - }) - t.Run("creates provider with configured adapters", func(t *testing.T) { providerId := "test-provider" diff --git a/router/pkg/pubsub/pubsub.go b/router/pkg/pubsub/pubsub.go index 0a270848c2..fa9b2ad797 100644 --- a/router/pkg/pubsub/pubsub.go +++ b/router/pkg/pubsub/pubsub.go @@ -2,6 +2,7 @@ package pubsub import ( "context" + "fmt" "slices" "strconv" @@ -30,21 +31,21 @@ func BuildProvidersAndDataSources( natsBuilder := nats.NewPubSubProviderBuilder(ctx, logger, hostName, routerListenAddr) natsProviderIds := []string{} - for _, event := range config.Providers.Kafka { - provider, err := kafkaBuilder.BuildProvider(event) + for _, providerData := range config.Providers.Kafka { + provider, err := kafkaBuilder.BuildProvider(providerData) if err != nil { return nil, nil, err } pubSubProviders = append(pubSubProviders, provider) - kafkaProviderIds = append(kafkaProviderIds, event.ID) + kafkaProviderIds = append(kafkaProviderIds, providerData.ID) } - for _, event := range config.Providers.Nats { - provider, err := natsBuilder.BuildProvider(event) + for _, providerData := range config.Providers.Nats { + provider, err := natsBuilder.BuildProvider(providerData) if err != nil { return nil, nil, err } pubSubProviders = append(pubSubProviders, provider) - natsProviderIds = append(natsProviderIds, event.ID) + natsProviderIds = append(natsProviderIds, providerData.ID) } // Create data sources @@ -52,7 +53,7 @@ func BuildProvidersAndDataSources( for _, dsConf := range dsConfs { for i, event := range dsConf.Configuration.GetCustomEvents().GetKafka() { if !slices.Contains(kafkaProviderIds, event.GetEngineEventConfiguration().GetProviderId()) { - continue + return pubSubProviders, outs, fmt.Errorf("kafka provider with ID %s is not defined", event.GetEngineEventConfiguration().GetProviderId()) } pubSubDataSource, err := kafkaBuilder.BuildDataSource(event) if err != nil { @@ -71,7 +72,7 @@ func BuildProvidersAndDataSources( } for i, event := range dsConf.Configuration.GetCustomEvents().GetNats() { if !slices.Contains(natsProviderIds, event.GetEngineEventConfiguration().GetProviderId()) { - continue + return pubSubProviders, outs, fmt.Errorf("nats provider with ID %s is not defined", event.GetEngineEventConfiguration().GetProviderId()) } pubSubDataSource, err := natsBuilder.BuildDataSource(event) if err != nil { From 49db63a622612c76f415bfd940929d0ca77b520e Mon Sep 17 00:00:00 2001 From: Alessandro Pagnin Date: Wed, 28 May 2025 10:57:24 +0200 Subject: [PATCH 076/126] refactor: update datasource import to use pubsub_datasource in factoryresolver.go --- router/core/factoryresolver.go | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/router/core/factoryresolver.go b/router/core/factoryresolver.go index acdc0d6cb7..1145d708fd 100644 --- a/router/core/factoryresolver.go +++ b/router/core/factoryresolver.go @@ -11,7 +11,6 @@ import ( "github.com/buger/jsonparser" "github.com/wundergraph/cosmo/router/pkg/pubsub" - "github.com/wundergraph/cosmo/router/pkg/pubsub/datasource" pubsub_datasource "github.com/wundergraph/cosmo/router/pkg/pubsub/datasource" "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/argument_templates" "google.golang.org/grpc" @@ -477,7 +476,7 @@ func (l *Loader) Load(engineConfig *nodev1.EngineConfiguration, subgraphs []*nod out, err = plan.NewDataSourceConfiguration( in.Id, - datasource.NewFactory(l.ctx, routerEngineConfig.Events, providers), + pubsub_datasource.NewFactory(l.ctx, routerEngineConfig.Events, providers), dsMeta, providers, ) From 0e3ffe4825aec23e4ca38a113b81b440ef4f734a Mon Sep 17 00:00:00 2001 From: Alessandro Pagnin Date: Wed, 28 May 2025 11:55:18 +0200 Subject: [PATCH 077/126] feat: add ProviderNotDefinedError and separated logic by provider --- router/pkg/pubsub/pubsub.go | 59 ++++++++++++++++++++++++++----------- 1 file changed, 42 insertions(+), 17 deletions(-) diff --git a/router/pkg/pubsub/pubsub.go b/router/pkg/pubsub/pubsub.go index fa9b2ad797..ab3170be9c 100644 --- a/router/pkg/pubsub/pubsub.go +++ b/router/pkg/pubsub/pubsub.go @@ -14,6 +14,15 @@ import ( "go.uber.org/zap" ) +type ProviderNotDefinedError struct { + ProviderID string + ProviderTypeID string +} + +func (e *ProviderNotDefinedError) Error() string { + return fmt.Sprintf("%s provider with ID %s is not defined", e.ProviderTypeID, e.ProviderID) +} + // BuildProvidersAndDataSources is a generic function that builds providers and data sources for the given provider // builder and event configurations. func BuildProvidersAndDataSources( @@ -25,12 +34,11 @@ func BuildProvidersAndDataSources( routerListenAddr string, ) ([]pubsub_datasource.PubSubProvider, []plan.DataSource, error) { var pubSubProviders []pubsub_datasource.PubSubProvider + var outs []plan.DataSource + // Initialize Kafka providers and data sources kafkaBuilder := kafka.NewPubSubProviderBuilder(ctx, logger, hostName, routerListenAddr) kafkaProviderIds := []string{} - natsBuilder := nats.NewPubSubProviderBuilder(ctx, logger, hostName, routerListenAddr) - natsProviderIds := []string{} - for _, providerData := range config.Providers.Kafka { provider, err := kafkaBuilder.BuildProvider(providerData) if err != nil { @@ -39,22 +47,18 @@ func BuildProvidersAndDataSources( pubSubProviders = append(pubSubProviders, provider) kafkaProviderIds = append(kafkaProviderIds, providerData.ID) } - for _, providerData := range config.Providers.Nats { - provider, err := natsBuilder.BuildProvider(providerData) - if err != nil { - return nil, nil, err + for _, dsConf := range dsConfs { + for _, event := range dsConf.Configuration.GetCustomEvents().GetKafka() { + if !slices.Contains(kafkaProviderIds, event.GetEngineEventConfiguration().GetProviderId()) { + return pubSubProviders, nil, &ProviderNotDefinedError{ + ProviderID: event.GetEngineEventConfiguration().GetProviderId(), + ProviderTypeID: kafkaBuilder.TypeID(), + } + } } - pubSubProviders = append(pubSubProviders, provider) - natsProviderIds = append(natsProviderIds, providerData.ID) } - - // Create data sources - var outs []plan.DataSource for _, dsConf := range dsConfs { for i, event := range dsConf.Configuration.GetCustomEvents().GetKafka() { - if !slices.Contains(kafkaProviderIds, event.GetEngineEventConfiguration().GetProviderId()) { - return pubSubProviders, outs, fmt.Errorf("kafka provider with ID %s is not defined", event.GetEngineEventConfiguration().GetProviderId()) - } pubSubDataSource, err := kafkaBuilder.BuildDataSource(event) if err != nil { return nil, nil, err @@ -70,10 +74,31 @@ func BuildProvidersAndDataSources( } outs = append(outs, out) } - for i, event := range dsConf.Configuration.GetCustomEvents().GetNats() { + } + + // Initialize NATS providers and data sources + natsBuilder := nats.NewPubSubProviderBuilder(ctx, logger, hostName, routerListenAddr) + natsProviderIds := []string{} + for _, providerData := range config.Providers.Nats { + provider, err := natsBuilder.BuildProvider(providerData) + if err != nil { + return nil, nil, err + } + pubSubProviders = append(pubSubProviders, provider) + natsProviderIds = append(natsProviderIds, providerData.ID) + } + for _, dsConf := range dsConfs { + for _, event := range dsConf.Configuration.GetCustomEvents().GetNats() { if !slices.Contains(natsProviderIds, event.GetEngineEventConfiguration().GetProviderId()) { - return pubSubProviders, outs, fmt.Errorf("nats provider with ID %s is not defined", event.GetEngineEventConfiguration().GetProviderId()) + return pubSubProviders, nil, &ProviderNotDefinedError{ + ProviderID: event.GetEngineEventConfiguration().GetProviderId(), + ProviderTypeID: natsBuilder.TypeID(), + } } + } + } + for _, dsConf := range dsConfs { + for i, event := range dsConf.Configuration.GetCustomEvents().GetNats() { pubSubDataSource, err := natsBuilder.BuildDataSource(event) if err != nil { return nil, nil, err From 2e37a4044cf38d1d21d2e9bbe9a549235d71e2dd Mon Sep 17 00:00:00 2001 From: Alessandro Pagnin Date: Wed, 28 May 2025 12:26:23 +0200 Subject: [PATCH 078/126] chore: add a basic provider implementation for common usage and removed the (useless) specific one --- router/core/factoryresolver.go | 4 +- router/pkg/pubsub/datasource/builder.go | 11 -- router/pkg/pubsub/datasource/provider_impl.go | 45 ++++++++ .../provider_impl_test.go} | 28 ++--- router/pkg/pubsub/kafka/provider.go | 38 ------- router/pkg/pubsub/kafka/provider_builder.go | 10 +- .../pkg/pubsub/kafka/provider_builder_test.go | 27 +---- router/pkg/pubsub/nats/provider.go | 32 ------ router/pkg/pubsub/nats/provider_builder.go | 8 +- .../pkg/pubsub/nats/provider_builder_test.go | 27 +---- router/pkg/pubsub/nats/provider_test.go | 107 ------------------ router/pkg/pubsub/pubsub.go | 8 +- router/pkg/pubsub/pubsub_test.go | 5 +- 13 files changed, 77 insertions(+), 273 deletions(-) delete mode 100644 router/pkg/pubsub/datasource/builder.go create mode 100644 router/pkg/pubsub/datasource/provider_impl.go rename router/pkg/pubsub/{kafka/provider_test.go => datasource/provider_impl_test.go} (74%) delete mode 100644 router/pkg/pubsub/kafka/provider.go delete mode 100644 router/pkg/pubsub/nats/provider.go delete mode 100644 router/pkg/pubsub/nats/provider_test.go diff --git a/router/core/factoryresolver.go b/router/core/factoryresolver.go index 8ee4eb2a0f..173a5deea1 100644 --- a/router/core/factoryresolver.go +++ b/router/core/factoryresolver.go @@ -297,7 +297,7 @@ func (l *Loader) Load(engineConfig *nodev1.EngineConfiguration, subgraphs []*nod } var providers []pubsub_datasource.PubSubProvider - var pubSubDS []pubsub_datasource.DataSourceConfigurationWithMetadata + var pubSubDS []pubsub.DataSourceConfigurationWithMetadata for _, in := range engineConfig.DatasourceConfigurations { var out plan.DataSource @@ -452,7 +452,7 @@ func (l *Loader) Load(engineConfig *nodev1.EngineConfiguration, subgraphs []*nod } case nodev1.DataSourceKind_PUBSUB: - pubSubDS = append(pubSubDS, pubsub_datasource.DataSourceConfigurationWithMetadata{ + pubSubDS = append(pubSubDS, pubsub.DataSourceConfigurationWithMetadata{ Configuration: in, Metadata: l.dataSourceMetaData(in), }) diff --git a/router/pkg/pubsub/datasource/builder.go b/router/pkg/pubsub/datasource/builder.go deleted file mode 100644 index 814cebbd31..0000000000 --- a/router/pkg/pubsub/datasource/builder.go +++ /dev/null @@ -1,11 +0,0 @@ -package datasource - -import ( - nodev1 "github.com/wundergraph/cosmo/router/gen/proto/wg/cosmo/node/v1" - "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/plan" -) - -type DataSourceConfigurationWithMetadata struct { - Configuration *nodev1.DataSourceConfiguration - Metadata *plan.DataSourceMetadata -} diff --git a/router/pkg/pubsub/datasource/provider_impl.go b/router/pkg/pubsub/datasource/provider_impl.go new file mode 100644 index 0000000000..71047f0dc7 --- /dev/null +++ b/router/pkg/pubsub/datasource/provider_impl.go @@ -0,0 +1,45 @@ +package datasource + +import ( + "context" + + "go.uber.org/zap" +) + +type PubSubProviderImpl struct { + id string + typeID string + Adapter Lifecycle + Logger *zap.Logger +} + +func (p *PubSubProviderImpl) ID() string { + return p.id +} + +func (p *PubSubProviderImpl) TypeID() string { + return p.typeID +} + +func (p *PubSubProviderImpl) Startup(ctx context.Context) error { + if err := p.Adapter.Startup(ctx); err != nil { + return err + } + return nil +} + +func (p *PubSubProviderImpl) Shutdown(ctx context.Context) error { + if err := p.Adapter.Shutdown(ctx); err != nil { + return err + } + return nil +} + +func NewPubSubProviderImpl(id string, typeID string, adapter Lifecycle, logger *zap.Logger) *PubSubProviderImpl { + return &PubSubProviderImpl{ + id: id, + typeID: typeID, + Adapter: adapter, + Logger: logger, + } +} diff --git a/router/pkg/pubsub/kafka/provider_test.go b/router/pkg/pubsub/datasource/provider_impl_test.go similarity index 74% rename from router/pkg/pubsub/kafka/provider_test.go rename to router/pkg/pubsub/datasource/provider_impl_test.go index 7c4606f294..02da3f20d8 100644 --- a/router/pkg/pubsub/kafka/provider_test.go +++ b/router/pkg/pubsub/datasource/provider_impl_test.go @@ -1,4 +1,4 @@ -package kafka +package datasource import ( "context" @@ -7,7 +7,6 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/mock" - "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/resolve" ) // MockAdapter is a mock implementation of AdapterInterface. @@ -25,21 +24,11 @@ func (m *MockAdapter) Shutdown(ctx context.Context) error { return args.Error(0) } -func (m *MockAdapter) Publish(ctx context.Context, event PublishEventConfiguration) error { - args := m.Called(ctx, event) - return args.Error(0) -} - -func (m *MockAdapter) Subscribe(ctx context.Context, event SubscriptionEventConfiguration, updater resolve.SubscriptionUpdater) error { - args := m.Called(ctx, event, updater) - return args.Error(0) -} - func TestProvider_Startup_Success(t *testing.T) { mockAdapter := new(MockAdapter) mockAdapter.On("Startup", mock.Anything).Return(nil) - provider := PubSubProvider{ + provider := PubSubProviderImpl{ Adapter: mockAdapter, } err := provider.Startup(context.Background()) @@ -52,7 +41,7 @@ func TestProvider_Startup_Error(t *testing.T) { mockAdapter := new(MockAdapter) mockAdapter.On("Startup", mock.Anything).Return(errors.New("connect error")) - provider := PubSubProvider{ + provider := PubSubProviderImpl{ Adapter: mockAdapter, } err := provider.Startup(context.Background()) @@ -65,7 +54,7 @@ func TestProvider_Shutdown_Success(t *testing.T) { mockAdapter := new(MockAdapter) mockAdapter.On("Shutdown", mock.Anything).Return(nil) - provider := PubSubProvider{ + provider := PubSubProviderImpl{ Adapter: mockAdapter, } err := provider.Shutdown(context.Background()) @@ -78,7 +67,7 @@ func TestProvider_Shutdown_Error(t *testing.T) { mockAdapter := new(MockAdapter) mockAdapter.On("Shutdown", mock.Anything).Return(errors.New("close error")) - provider := PubSubProvider{ + provider := PubSubProviderImpl{ Adapter: mockAdapter, } err := provider.Shutdown(context.Background()) @@ -89,13 +78,16 @@ func TestProvider_Shutdown_Error(t *testing.T) { func TestProvider_ID(t *testing.T) { const testID = "test-id" - provider := PubSubProvider{ + provider := PubSubProviderImpl{ id: testID, } assert.Equal(t, testID, provider.ID()) } func TestProvider_TypeID(t *testing.T) { - provider := PubSubProvider{} + const providerTypeID = "test-type-id" + provider := PubSubProviderImpl{ + typeID: providerTypeID, + } assert.Equal(t, providerTypeID, provider.TypeID()) } diff --git a/router/pkg/pubsub/kafka/provider.go b/router/pkg/pubsub/kafka/provider.go deleted file mode 100644 index c0854b1232..0000000000 --- a/router/pkg/pubsub/kafka/provider.go +++ /dev/null @@ -1,38 +0,0 @@ -package kafka - -import ( - "context" - - "github.com/wundergraph/cosmo/router/pkg/pubsub/datasource" - "go.uber.org/zap" -) - -const providerTypeID = "kafka" - -type PubSubProvider struct { - id string - Adapter datasource.Lifecycle - Logger *zap.Logger -} - -func (c *PubSubProvider) ID() string { - return c.id -} - -func (c *PubSubProvider) TypeID() string { - return providerTypeID -} - -func (c *PubSubProvider) Startup(ctx context.Context) error { - if err := c.Adapter.Startup(ctx); err != nil { - return err - } - return nil -} - -func (c *PubSubProvider) Shutdown(ctx context.Context) error { - if err := c.Adapter.Shutdown(ctx); err != nil { - return err - } - return nil -} diff --git a/router/pkg/pubsub/kafka/provider_builder.go b/router/pkg/pubsub/kafka/provider_builder.go index a613cbe8db..d7b7663200 100644 --- a/router/pkg/pubsub/kafka/provider_builder.go +++ b/router/pkg/pubsub/kafka/provider_builder.go @@ -14,6 +14,8 @@ import ( "go.uber.org/zap" ) +const providerTypeID = "kafka" + type PubSubProviderBuilder struct { ctx context.Context logger *zap.Logger @@ -87,11 +89,7 @@ func buildProvider(ctx context.Context, provider config.KafkaEventSource, logger if err != nil { return nil, nil, fmt.Errorf("failed to create adapter for Kafka provider with ID \"%s\": %w", provider.ID, err) } - pubSubProvider := &PubSubProvider{ - id: provider.ID, - Adapter: adapter, - Logger: logger, - } + pubSubProvider := datasource.NewPubSubProviderImpl(provider.ID, providerTypeID, adapter, logger) return adapter, pubSubProvider, nil } @@ -101,7 +99,7 @@ func NewPubSubProviderBuilder( logger *zap.Logger, hostName string, routerListenAddr string, -) datasource.PubSubProviderBuilder[config.KafkaEventSource, *nodev1.KafkaEventConfiguration] { +) *PubSubProviderBuilder { return &PubSubProviderBuilder{ ctx: ctx, logger: logger, diff --git a/router/pkg/pubsub/kafka/provider_builder_test.go b/router/pkg/pubsub/kafka/provider_builder_test.go index 4ae39743d4..af10571ffa 100644 --- a/router/pkg/pubsub/kafka/provider_builder_test.go +++ b/router/pkg/pubsub/kafka/provider_builder_test.go @@ -8,8 +8,8 @@ import ( "github.com/stretchr/testify/mock" "github.com/stretchr/testify/require" "github.com/wundergraph/cosmo/router/pkg/config" + "github.com/wundergraph/cosmo/router/pkg/pubsub/datasource" "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/resolve" - "go.uber.org/zap" "go.uber.org/zap/zaptest" ) @@ -104,32 +104,9 @@ func TestPubSubProviderBuilderFactory(t *testing.T) { require.NoError(t, err) // Check the returned provider - kafkaProvider, ok := provider.(*PubSubProvider) + kafkaProvider, ok := provider.(*datasource.PubSubProviderImpl) require.True(t, ok) assert.NotNil(t, kafkaProvider.Logger) assert.NotNil(t, kafkaProvider.Adapter) }) } - -func TestPubSubProvider(t *testing.T) { - mocked := &mockAdapter{} - - provider := &PubSubProvider{ - Logger: zap.NewNop(), - Adapter: mocked, - } - - t.Run("calling Shutdown calls adapter Shutdown", func(t *testing.T) { - mocked.On("Shutdown", context.Background()).Return(nil) - err := provider.Shutdown(context.Background()) - require.NoError(t, err) - mocked.AssertCalled(t, "Shutdown", context.Background()) - }) - - t.Run("calling Startup calls adapter Startup", func(t *testing.T) { - mocked.On("Startup", context.Background()).Return(nil) - err := provider.Startup(context.Background()) - require.NoError(t, err) - mocked.AssertCalled(t, "Startup", context.Background()) - }) -} diff --git a/router/pkg/pubsub/nats/provider.go b/router/pkg/pubsub/nats/provider.go deleted file mode 100644 index bd574a9282..0000000000 --- a/router/pkg/pubsub/nats/provider.go +++ /dev/null @@ -1,32 +0,0 @@ -package nats - -import ( - "context" - - "github.com/wundergraph/cosmo/router/pkg/pubsub/datasource" - "go.uber.org/zap" -) - -const providerTypeID = "nats" - -type PubSubProvider struct { - id string - Adapter datasource.Lifecycle - Logger *zap.Logger -} - -func (c *PubSubProvider) ID() string { - return c.id -} - -func (c *PubSubProvider) TypeID() string { - return providerTypeID -} - -func (c *PubSubProvider) Startup(ctx context.Context) error { - return c.Adapter.Startup(ctx) -} - -func (c *PubSubProvider) Shutdown(ctx context.Context) error { - return c.Adapter.Shutdown(ctx) -} diff --git a/router/pkg/pubsub/nats/provider_builder.go b/router/pkg/pubsub/nats/provider_builder.go index 0b6f193ecf..e0439b39a3 100644 --- a/router/pkg/pubsub/nats/provider_builder.go +++ b/router/pkg/pubsub/nats/provider_builder.go @@ -13,6 +13,8 @@ import ( "go.uber.org/zap" ) +const providerTypeID = "nats" + type PubSubProviderBuilder struct { ctx context.Context logger *zap.Logger @@ -101,11 +103,7 @@ func buildProvider(ctx context.Context, provider config.NatsEventSource, logger if err != nil { return nil, nil, fmt.Errorf("failed to create adapter for Nats provider with ID \"%s\": %w", provider.ID, err) } - pubSubProvider := &PubSubProvider{ - id: provider.ID, - Adapter: adapter, - Logger: logger, - } + pubSubProvider := datasource.NewPubSubProviderImpl(provider.ID, providerTypeID, adapter, logger) return adapter, pubSubProvider, nil } diff --git a/router/pkg/pubsub/nats/provider_builder_test.go b/router/pkg/pubsub/nats/provider_builder_test.go index 8b6d60d34f..2bb16ea768 100644 --- a/router/pkg/pubsub/nats/provider_builder_test.go +++ b/router/pkg/pubsub/nats/provider_builder_test.go @@ -10,8 +10,8 @@ import ( "github.com/stretchr/testify/require" nodev1 "github.com/wundergraph/cosmo/router/gen/proto/wg/cosmo/node/v1" "github.com/wundergraph/cosmo/router/pkg/config" + "github.com/wundergraph/cosmo/router/pkg/pubsub/datasource" "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/resolve" - "go.uber.org/zap" "go.uber.org/zap/zaptest" ) @@ -176,32 +176,9 @@ func TestPubSubProviderBuilderFactory(t *testing.T) { require.NoError(t, err) // Check the returned provider - natsProvider, ok := provider.(*PubSubProvider) + natsProvider, ok := provider.(*datasource.PubSubProviderImpl) require.True(t, ok) assert.NotNil(t, natsProvider.Logger) assert.NotNil(t, natsProvider.Adapter) }) } - -func TestPubSubProvider_FindPubSubDataSource(t *testing.T) { - mockNats := &mockAdapter{} - - provider := &PubSubProvider{ - Logger: zap.NewNop(), - Adapter: mockNats, - } - - t.Run("calling Startup", func(t *testing.T) { - mockNats.On("Startup", context.Background()).Return(nil) - err := provider.Startup(context.Background()) - require.NoError(t, err) - mockNats.AssertCalled(t, "Startup", context.Background()) - }) - - t.Run("calling Shutdown", func(t *testing.T) { - mockNats.On("Shutdown", context.Background()).Return(nil) - err := provider.Shutdown(context.Background()) - require.NoError(t, err) - mockNats.AssertCalled(t, "Shutdown", context.Background()) - }) -} diff --git a/router/pkg/pubsub/nats/provider_test.go b/router/pkg/pubsub/nats/provider_test.go deleted file mode 100644 index a3910f2850..0000000000 --- a/router/pkg/pubsub/nats/provider_test.go +++ /dev/null @@ -1,107 +0,0 @@ -package nats - -import ( - "context" - "errors" - "io" - "testing" - - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/mock" - "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/resolve" -) - -// MockAdapter is a mock implementation of AdapterInterface. -type MockAdapter struct { - mock.Mock -} - -func (m *MockAdapter) Startup(ctx context.Context) error { - args := m.Called(ctx) - return args.Error(0) -} - -func (m *MockAdapter) Shutdown(ctx context.Context) error { - args := m.Called(ctx) - return args.Error(0) -} - -func (m *MockAdapter) Publish(ctx context.Context, event PublishAndRequestEventConfiguration) error { - args := m.Called(ctx, event) - return args.Error(0) -} - -func (m *MockAdapter) Subscribe(ctx context.Context, event SubscriptionEventConfiguration, updater resolve.SubscriptionUpdater) error { - args := m.Called(ctx, event, updater) - return args.Error(0) -} - -func (m *MockAdapter) Request(ctx context.Context, event PublishAndRequestEventConfiguration, w io.Writer) error { - args := m.Called(ctx, event, w) - return args.Error(0) -} - -func TestProvider_Startup_Success(t *testing.T) { - mockAdapter := new(MockAdapter) - mockAdapter.On("Startup", mock.Anything).Return(nil) - - provider := PubSubProvider{ - Adapter: mockAdapter, - } - err := provider.Startup(context.Background()) - - assert.NoError(t, err) - mockAdapter.AssertExpectations(t) -} - -func TestProvider_Startup_Error(t *testing.T) { - mockAdapter := new(MockAdapter) - mockAdapter.On("Startup", mock.Anything).Return(errors.New("connect error")) - - provider := PubSubProvider{ - Adapter: mockAdapter, - } - err := provider.Startup(context.Background()) - - assert.Error(t, err) - mockAdapter.AssertExpectations(t) -} - -func TestProvider_Shutdown_Success(t *testing.T) { - mockAdapter := new(MockAdapter) - mockAdapter.On("Shutdown", mock.Anything).Return(nil) - - provider := PubSubProvider{ - Adapter: mockAdapter, - } - err := provider.Shutdown(context.Background()) - - assert.NoError(t, err) - mockAdapter.AssertExpectations(t) -} - -func TestProvider_Shutdown_Error(t *testing.T) { - mockAdapter := new(MockAdapter) - mockAdapter.On("Shutdown", mock.Anything).Return(errors.New("close error")) - - provider := PubSubProvider{ - Adapter: mockAdapter, - } - err := provider.Shutdown(context.Background()) - - assert.Error(t, err) - mockAdapter.AssertExpectations(t) -} - -func TestProvider_ID(t *testing.T) { - const testID = "test-id" - provider := PubSubProvider{ - id: testID, - } - assert.Equal(t, testID, provider.ID()) -} - -func TestProvider_TypeID(t *testing.T) { - provider := PubSubProvider{} - assert.Equal(t, providerTypeID, provider.TypeID()) -} diff --git a/router/pkg/pubsub/pubsub.go b/router/pkg/pubsub/pubsub.go index ab3170be9c..4adb5494e6 100644 --- a/router/pkg/pubsub/pubsub.go +++ b/router/pkg/pubsub/pubsub.go @@ -6,6 +6,7 @@ import ( "slices" "strconv" + nodev1 "github.com/wundergraph/cosmo/router/gen/proto/wg/cosmo/node/v1" "github.com/wundergraph/cosmo/router/pkg/config" pubsub_datasource "github.com/wundergraph/cosmo/router/pkg/pubsub/datasource" "github.com/wundergraph/cosmo/router/pkg/pubsub/kafka" @@ -14,6 +15,11 @@ import ( "go.uber.org/zap" ) +type DataSourceConfigurationWithMetadata struct { + Configuration *nodev1.DataSourceConfiguration + Metadata *plan.DataSourceMetadata +} + type ProviderNotDefinedError struct { ProviderID string ProviderTypeID string @@ -29,7 +35,7 @@ func BuildProvidersAndDataSources( ctx context.Context, config config.EventsConfiguration, logger *zap.Logger, - dsConfs []pubsub_datasource.DataSourceConfigurationWithMetadata, + dsConfs []DataSourceConfigurationWithMetadata, hostName string, routerListenAddr string, ) ([]pubsub_datasource.PubSubProvider, []plan.DataSource, error) { diff --git a/router/pkg/pubsub/pubsub_test.go b/router/pkg/pubsub/pubsub_test.go index 637223b1df..0660237e6c 100644 --- a/router/pkg/pubsub/pubsub_test.go +++ b/router/pkg/pubsub/pubsub_test.go @@ -8,7 +8,6 @@ import ( "github.com/stretchr/testify/require" nodev1 "github.com/wundergraph/cosmo/router/gen/proto/wg/cosmo/node/v1" "github.com/wundergraph/cosmo/router/pkg/config" - pubsub_datasource "github.com/wundergraph/cosmo/router/pkg/pubsub/datasource" "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/plan" "go.uber.org/zap" ) @@ -32,7 +31,7 @@ func TestBuildProvidersAndDataSources_OK(t *testing.T) { FieldName: "Field1", Type: nodev1.EventType_PUBLISH, } - dsConf := pubsub_datasource.DataSourceConfigurationWithMetadata{ + dsConf := DataSourceConfigurationWithMetadata{ Configuration: &nodev1.DataSourceConfiguration{ Id: "test-id", CustomEvents: &nodev1.DataSourceCustomEvents{ @@ -45,7 +44,7 @@ func TestBuildProvidersAndDataSources_OK(t *testing.T) { }, Metadata: dsMeta, } - dsConfs := []pubsub_datasource.DataSourceConfigurationWithMetadata{dsConf} + dsConfs := []DataSourceConfigurationWithMetadata{dsConf} // Execute the function providers, dataSources, err := BuildProvidersAndDataSources(ctx, config.EventsConfiguration{ From eb8f95e4a494cb8a7732c1dd3f3d45aba0df1eb0 Mon Sep 17 00:00:00 2001 From: Alessandro Pagnin Date: Wed, 28 May 2025 12:52:59 +0200 Subject: [PATCH 079/126] chore: removed reference to *nodev1.EngineEventConfiguration and *nodev1.EngineEventConfiguration from datasource package --- router/pkg/pubsub/datasource/datasource.go | 5 ++- router/pkg/pubsub/datasource/planner.go | 4 +-- router/pkg/pubsub/datasource/provider.go | 5 ++- router/pkg/pubsub/kafka/adapter.go | 33 +++++++++----------- router/pkg/pubsub/kafka/pubsub_datasource.go | 4 +-- router/pkg/pubsub/nats/pubsub_datasource.go | 4 +-- router/pkg/pubsub/pubsub.go | 8 ++--- router/pkg/pubsub/pubsubtest/pubsubtest.go | 6 ++-- 8 files changed, 32 insertions(+), 37 deletions(-) diff --git a/router/pkg/pubsub/datasource/datasource.go b/router/pkg/pubsub/datasource/datasource.go index 6a43fcf80c..a90850e81f 100644 --- a/router/pkg/pubsub/datasource/datasource.go +++ b/router/pkg/pubsub/datasource/datasource.go @@ -1,7 +1,6 @@ package datasource import ( - nodev1 "github.com/wundergraph/cosmo/router/gen/proto/wg/cosmo/node/v1" "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/resolve" ) @@ -14,13 +13,13 @@ import ( // For detailed implementation guidelines, see: // https://github.com/wundergraph/cosmo/blob/main/router/pkg/pubsub/README.md type PubSubDataSource interface { + // GetFieldName get the field name where the data source is defined + GetFieldName() string // ResolveDataSource returns the engine DataSource implementation that contains // methods which will be called by the Planner when resolving a field ResolveDataSource() (resolve.DataSource, error) // ResolveDataSourceInput build the input that will be passed to the engine DataSource ResolveDataSourceInput(event []byte) (string, error) - // EngineEventConfiguration get the engine event configuration, contains the provider id, type, type name and field name - EngineEventConfiguration() *nodev1.EngineEventConfiguration // ResolveDataSourceSubscription returns the engine SubscriptionDataSource implementation // that contains methods to start a subscription, which will be called by the Planner // when a subscription is initiated diff --git a/router/pkg/pubsub/datasource/planner.go b/router/pkg/pubsub/datasource/planner.go index 62d26454bf..791a3d93cc 100644 --- a/router/pkg/pubsub/datasource/planner.go +++ b/router/pkg/pubsub/datasource/planner.go @@ -79,7 +79,7 @@ func (p *Planner) ConfigureFetch() resolve.FetchConfiguration { Variables: p.variables, DataSource: dataSource, PostProcessing: resolve.PostProcessingConfiguration{ - MergePath: []string{p.pubSubDataSource.EngineEventConfiguration().GetFieldName()}, + MergePath: []string{p.pubSubDataSource.GetFieldName()}, }, } } @@ -107,7 +107,7 @@ func (p *Planner) ConfigureSubscription() plan.SubscriptionConfiguration { Variables: p.variables, DataSource: dataSource, PostProcessing: resolve.PostProcessingConfiguration{ - MergePath: []string{p.pubSubDataSource.EngineEventConfiguration().GetFieldName()}, + MergePath: []string{p.pubSubDataSource.GetFieldName()}, }, } } diff --git a/router/pkg/pubsub/datasource/provider.go b/router/pkg/pubsub/datasource/provider.go index a93d1e80c6..39b4bf9a27 100644 --- a/router/pkg/pubsub/datasource/provider.go +++ b/router/pkg/pubsub/datasource/provider.go @@ -2,8 +2,6 @@ package datasource import ( "context" - - nodev1 "github.com/wundergraph/cosmo/router/gen/proto/wg/cosmo/node/v1" ) type ArgumentTemplateCallback func(tpl string) (string, error) @@ -26,7 +24,8 @@ type PubSubProvider interface { } type EngineEventConfiguration interface { - GetEngineEventConfiguration() *nodev1.EngineEventConfiguration + GetTypeName() string + GetFieldName() string } // PubSubProviderBuilder is the interface that the provider builder must implement. diff --git a/router/pkg/pubsub/kafka/adapter.go b/router/pkg/pubsub/kafka/adapter.go index 7e9d3486c0..301a8b4990 100644 --- a/router/pkg/pubsub/kafka/adapter.go +++ b/router/pkg/pubsub/kafka/adapter.go @@ -19,21 +19,6 @@ var ( errClientClosed = errors.New("client closed") ) -func NewAdapter(ctx context.Context, logger *zap.Logger, opts []kgo.Opt) (AdapterInterface, error) { - ctx, cancel := context.WithCancel(ctx) - if logger == nil { - logger = zap.NewNop() - } - - return &Adapter{ - ctx: ctx, - logger: logger.With(zap.String("pubsub", "kafka")), - opts: opts, - closeWg: sync.WaitGroup{}, - cancel: cancel, - }, nil -} - // AdapterInterface defines the interface for Kafka adapter operations type AdapterInterface interface { Subscribe(ctx context.Context, event SubscriptionEventConfiguration, updater resolve.SubscriptionUpdater) error @@ -56,9 +41,6 @@ type Adapter struct { cancel context.CancelFunc } -// Ensure Adapter implements AdapterInterface -var _ AdapterInterface = (*Adapter)(nil) - // topicPoller polls the Kafka topic for new records and calls the updateTriggers function. func (p *Adapter) topicPoller(ctx context.Context, client *kgo.Client, updater resolve.SubscriptionUpdater) error { for { @@ -239,3 +221,18 @@ func (p *Adapter) Shutdown(ctx context.Context) error { return nil } + +func NewAdapter(ctx context.Context, logger *zap.Logger, opts []kgo.Opt) (*Adapter, error) { + ctx, cancel := context.WithCancel(ctx) + if logger == nil { + logger = zap.NewNop() + } + + return &Adapter{ + ctx: ctx, + logger: logger.With(zap.String("pubsub", "kafka")), + opts: opts, + closeWg: sync.WaitGroup{}, + cancel: cancel, + }, nil +} diff --git a/router/pkg/pubsub/kafka/pubsub_datasource.go b/router/pkg/pubsub/kafka/pubsub_datasource.go index 51c0a834cb..4de1b0a4e4 100644 --- a/router/pkg/pubsub/kafka/pubsub_datasource.go +++ b/router/pkg/pubsub/kafka/pubsub_datasource.go @@ -14,8 +14,8 @@ type PubSubDataSource struct { KafkaAdapter AdapterInterface } -func (c *PubSubDataSource) EngineEventConfiguration() *nodev1.EngineEventConfiguration { - return c.EventConfiguration.GetEngineEventConfiguration() +func (c *PubSubDataSource) GetFieldName() string { + return c.EventConfiguration.GetEngineEventConfiguration().GetFieldName() } func (c *PubSubDataSource) ResolveDataSource() (resolve.DataSource, error) { diff --git a/router/pkg/pubsub/nats/pubsub_datasource.go b/router/pkg/pubsub/nats/pubsub_datasource.go index 7b3a86c853..a89310ddea 100644 --- a/router/pkg/pubsub/nats/pubsub_datasource.go +++ b/router/pkg/pubsub/nats/pubsub_datasource.go @@ -16,8 +16,8 @@ type PubSubDataSource struct { NatsAdapter AdapterInterface } -func (c *PubSubDataSource) EngineEventConfiguration() *nodev1.EngineEventConfiguration { - return c.EventConfiguration.GetEngineEventConfiguration() +func (c *PubSubDataSource) GetFieldName() string { + return c.EventConfiguration.GetEngineEventConfiguration().GetFieldName() } func (c *PubSubDataSource) ResolveDataSource() (resolve.DataSource, error) { diff --git a/router/pkg/pubsub/pubsub.go b/router/pkg/pubsub/pubsub.go index 4adb5494e6..6ac587b2fd 100644 --- a/router/pkg/pubsub/pubsub.go +++ b/router/pkg/pubsub/pubsub.go @@ -72,7 +72,7 @@ func BuildProvidersAndDataSources( out, err := plan.NewDataSourceConfiguration( dsConf.Configuration.Id+"-"+kafkaBuilder.TypeID()+"-"+strconv.Itoa(i), pubsub_datasource.NewFactory(ctx, pubSubDataSource), - getFilteredDataSourceMetadata(event, dsConf.Metadata), + getFilteredDataSourceMetadata(event.GetEngineEventConfiguration(), dsConf.Metadata), pubSubDataSource, ) if err != nil { @@ -112,7 +112,7 @@ func BuildProvidersAndDataSources( out, err := plan.NewDataSourceConfiguration( dsConf.Configuration.Id+"-"+natsBuilder.TypeID()+"-"+strconv.Itoa(i), pubsub_datasource.NewFactory(ctx, pubSubDataSource), - getFilteredDataSourceMetadata(event, dsConf.Metadata), + getFilteredDataSourceMetadata(event.GetEngineEventConfiguration(), dsConf.Metadata), pubSubDataSource, ) if err != nil { @@ -129,8 +129,8 @@ func getFilteredDataSourceMetadata[E pubsub_datasource.EngineEventConfiguration] // find used root types and fields rootFields := make(map[string][]string) - typeName := event.GetEngineEventConfiguration().GetTypeName() - fieldName := event.GetEngineEventConfiguration().GetFieldName() + typeName := event.GetTypeName() + fieldName := event.GetFieldName() if _, ok := rootFields[typeName]; !ok { rootFields[typeName] = []string{} } diff --git a/router/pkg/pubsub/pubsubtest/pubsubtest.go b/router/pkg/pubsub/pubsubtest/pubsubtest.go index 09ad3b25b0..1a67461062 100644 --- a/router/pkg/pubsub/pubsubtest/pubsubtest.go +++ b/router/pkg/pubsub/pubsubtest/pubsubtest.go @@ -12,9 +12,9 @@ import ( // VerifyPubSubDataSourceImplementation is a common test function to verify any PubSubDataSource implementation // This function can be used by other packages to test their PubSubDataSource implementations func VerifyPubSubDataSourceImplementation(t *testing.T, pubSub datasource.PubSubDataSource) { - // Test GetEngineEventConfiguration - engineEventConfig := pubSub.EngineEventConfiguration() - require.NotNil(t, engineEventConfig, "Expected non-nil EngineEventConfiguration") + // Test GetFieldName + fieldName := pubSub.GetFieldName() + require.NotEmpty(t, fieldName, "Expected non-empty field name") // Test GetResolveDataSource dataSource, err := pubSub.ResolveDataSource() From 28f489de08e5acb036face62497144b273604144 Mon Sep 17 00:00:00 2001 From: Alessandro Pagnin Date: Wed, 28 May 2025 12:58:33 +0200 Subject: [PATCH 080/126] chore: remove unused interface --- router/pkg/pubsub/lifecycle.go | 8 -------- 1 file changed, 8 deletions(-) delete mode 100644 router/pkg/pubsub/lifecycle.go diff --git a/router/pkg/pubsub/lifecycle.go b/router/pkg/pubsub/lifecycle.go deleted file mode 100644 index d68418f9f3..0000000000 --- a/router/pkg/pubsub/lifecycle.go +++ /dev/null @@ -1,8 +0,0 @@ -package pubsub - -import "context" - -type Lifecycle interface { - // Shutdown all the resources used by the pubsub - Shutdown(ctx context.Context) error -} From 72830c99588bc735483fb6414c9f5c1a11f6494e Mon Sep 17 00:00:00 2001 From: Alessandro Pagnin Date: Wed, 28 May 2025 13:18:42 +0200 Subject: [PATCH 081/126] chore: move EngineEventConfiguration in a more appropriate package --- router/pkg/pubsub/datasource/provider.go | 5 ----- router/pkg/pubsub/pubsub.go | 7 ++++++- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/router/pkg/pubsub/datasource/provider.go b/router/pkg/pubsub/datasource/provider.go index 39b4bf9a27..f18b219503 100644 --- a/router/pkg/pubsub/datasource/provider.go +++ b/router/pkg/pubsub/datasource/provider.go @@ -23,11 +23,6 @@ type PubSubProvider interface { Shutdown(ctx context.Context) error } -type EngineEventConfiguration interface { - GetTypeName() string - GetFieldName() string -} - // PubSubProviderBuilder is the interface that the provider builder must implement. type PubSubProviderBuilder[P any, E any] interface { // TypeID Get the provider type id (e.g. "kafka", "nats") diff --git a/router/pkg/pubsub/pubsub.go b/router/pkg/pubsub/pubsub.go index 6ac587b2fd..1a6a287181 100644 --- a/router/pkg/pubsub/pubsub.go +++ b/router/pkg/pubsub/pubsub.go @@ -20,6 +20,11 @@ type DataSourceConfigurationWithMetadata struct { Metadata *plan.DataSourceMetadata } +type EngineEventConfiguration interface { + GetTypeName() string + GetFieldName() string +} + type ProviderNotDefinedError struct { ProviderID string ProviderTypeID string @@ -125,7 +130,7 @@ func BuildProvidersAndDataSources( return pubSubProviders, outs, nil } -func getFilteredDataSourceMetadata[E pubsub_datasource.EngineEventConfiguration](event E, dsMeta *plan.DataSourceMetadata) *plan.DataSourceMetadata { +func getFilteredDataSourceMetadata[E EngineEventConfiguration](event E, dsMeta *plan.DataSourceMetadata) *plan.DataSourceMetadata { // find used root types and fields rootFields := make(map[string][]string) From 8276186bec8df58dff79b32eff992b9669035181 Mon Sep 17 00:00:00 2001 From: Alessandro Pagnin Date: Wed, 28 May 2025 14:39:32 +0200 Subject: [PATCH 082/126] chore: generate mocks with mockery --- Makefile | 2 + router/.mockery.yml | 29 ++ router/Makefile | 5 +- router/pkg/pubsub/datasource/mocks.go | 140 ++++++++ router/pkg/pubsub/datasource/mocks_resolve.go | 109 ++++++ .../pubsub/datasource/provider_impl_test.go | 27 +- .../pubsub/kafka/engine_datasource_test.go | 50 +-- router/pkg/pubsub/kafka/mocks.go | 261 ++++++++++++++ .../pkg/pubsub/kafka/provider_builder_test.go | 27 -- .../pubsub/kafka/pubsub_datasource_test.go | 7 +- .../pkg/pubsub/nats/engine_datasource_test.go | 45 +-- router/pkg/pubsub/nats/mocks.go | 325 ++++++++++++++++++ .../pkg/pubsub/nats/provider_builder_test.go | 33 -- .../pkg/pubsub/nats/pubsub_datasource_test.go | 12 +- 14 files changed, 912 insertions(+), 160 deletions(-) create mode 100644 router/.mockery.yml create mode 100644 router/pkg/pubsub/datasource/mocks.go create mode 100644 router/pkg/pubsub/datasource/mocks_resolve.go create mode 100644 router/pkg/pubsub/kafka/mocks.go create mode 100644 router/pkg/pubsub/nats/mocks.go diff --git a/Makefile b/Makefile index ea649adb3b..805a3c8d2c 100644 --- a/Makefile +++ b/Makefile @@ -10,6 +10,7 @@ setup-dev-tools: setup-build-tools go install honnef.co/go/tools/cmd/staticcheck@2024.1.1 go install github.com/yannh/kubeconform/cmd/kubeconform@v0.6.3 go install github.com/norwoodj/helm-docs/cmd/helm-docs@v1.11.3 + go install github.com/vektra/mockery/v3@v3.3.1 prerequisites: setup-dev-tools go version @@ -17,6 +18,7 @@ prerequisites: setup-dev-tools node -v docker -v dbmate -v + mockery version infra-up: dc-dev diff --git a/router/.mockery.yml b/router/.mockery.yml new file mode 100644 index 0000000000..97021c4b66 --- /dev/null +++ b/router/.mockery.yml @@ -0,0 +1,29 @@ +all: false +dir: '{{.InterfaceDir}}' +filename: mocks.go +force-file-write: true +formatter: goimports +log-level: info +structname: '{{.Mock}}{{.InterfaceName}}' +pkgname: '{{.SrcPackageName}}' +recursive: false +require-template-schema-exists: true +template: testify +template-schema: '{{.Template}}.schema.json' +packages: + github.com/wundergraph/cosmo/router/pkg/pubsub/datasource: + interfaces: + Lifecycle: + github.com/wundergraph/cosmo/router/pkg/pubsub/nats: + interfaces: + AdapterInterface: + github.com/wundergraph/cosmo/router/pkg/pubsub/kafka: + interfaces: + AdapterInterface: + github.com/wundergraph/graphql-go-tools/v2/pkg/engine/resolve: + config: + dir: 'pkg/pubsub/datasource' + pkgname: 'datasource' + filename: 'mocks_resolve.go' + interfaces: + SubscriptionUpdater: \ No newline at end of file diff --git a/router/Makefile b/router/Makefile index 02524bc1b1..c96959643d 100644 --- a/router/Makefile +++ b/router/Makefile @@ -37,6 +37,7 @@ build-race: build-custom: CGO_ENABLED=0 go build -trimpath -ldflags "-extldflags -static -X github.com/wundergraph/cosmo/router/core.Version=$(VERSION) -X github.com/wundergraph/cosmo/router/core.Date=$(DATE) -X github.com/wundergraph/cosmo/router/core.Commit=$(COMMIT)" -a -o router cmd/custom/main.go -.PHONY: dev test build lint bump-engine update-snapshot - +generate-mocks: + mockery +.PHONY: dev test build lint bump-engine update-snapshot diff --git a/router/pkg/pubsub/datasource/mocks.go b/router/pkg/pubsub/datasource/mocks.go new file mode 100644 index 0000000000..23d8351b2d --- /dev/null +++ b/router/pkg/pubsub/datasource/mocks.go @@ -0,0 +1,140 @@ +// Code generated by mockery; DO NOT EDIT. +// github.com/vektra/mockery +// template: testify + +package datasource + +import ( + "context" + + mock "github.com/stretchr/testify/mock" +) + +// NewMockLifecycle creates a new instance of MockLifecycle. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations. +// The first argument is typically a *testing.T value. +func NewMockLifecycle(t interface { + mock.TestingT + Cleanup(func()) +}) *MockLifecycle { + mock := &MockLifecycle{} + mock.Mock.Test(t) + + t.Cleanup(func() { mock.AssertExpectations(t) }) + + return mock +} + +// MockLifecycle is an autogenerated mock type for the Lifecycle type +type MockLifecycle struct { + mock.Mock +} + +type MockLifecycle_Expecter struct { + mock *mock.Mock +} + +func (_m *MockLifecycle) EXPECT() *MockLifecycle_Expecter { + return &MockLifecycle_Expecter{mock: &_m.Mock} +} + +// Shutdown provides a mock function for the type MockLifecycle +func (_mock *MockLifecycle) Shutdown(ctx context.Context) error { + ret := _mock.Called(ctx) + + if len(ret) == 0 { + panic("no return value specified for Shutdown") + } + + var r0 error + if returnFunc, ok := ret.Get(0).(func(context.Context) error); ok { + r0 = returnFunc(ctx) + } else { + r0 = ret.Error(0) + } + return r0 +} + +// MockLifecycle_Shutdown_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'Shutdown' +type MockLifecycle_Shutdown_Call struct { + *mock.Call +} + +// Shutdown is a helper method to define mock.On call +// - ctx context.Context +func (_e *MockLifecycle_Expecter) Shutdown(ctx interface{}) *MockLifecycle_Shutdown_Call { + return &MockLifecycle_Shutdown_Call{Call: _e.mock.On("Shutdown", ctx)} +} + +func (_c *MockLifecycle_Shutdown_Call) Run(run func(ctx context.Context)) *MockLifecycle_Shutdown_Call { + _c.Call.Run(func(args mock.Arguments) { + var arg0 context.Context + if args[0] != nil { + arg0 = args[0].(context.Context) + } + run( + arg0, + ) + }) + return _c +} + +func (_c *MockLifecycle_Shutdown_Call) Return(err error) *MockLifecycle_Shutdown_Call { + _c.Call.Return(err) + return _c +} + +func (_c *MockLifecycle_Shutdown_Call) RunAndReturn(run func(ctx context.Context) error) *MockLifecycle_Shutdown_Call { + _c.Call.Return(run) + return _c +} + +// Startup provides a mock function for the type MockLifecycle +func (_mock *MockLifecycle) Startup(ctx context.Context) error { + ret := _mock.Called(ctx) + + if len(ret) == 0 { + panic("no return value specified for Startup") + } + + var r0 error + if returnFunc, ok := ret.Get(0).(func(context.Context) error); ok { + r0 = returnFunc(ctx) + } else { + r0 = ret.Error(0) + } + return r0 +} + +// MockLifecycle_Startup_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'Startup' +type MockLifecycle_Startup_Call struct { + *mock.Call +} + +// Startup is a helper method to define mock.On call +// - ctx context.Context +func (_e *MockLifecycle_Expecter) Startup(ctx interface{}) *MockLifecycle_Startup_Call { + return &MockLifecycle_Startup_Call{Call: _e.mock.On("Startup", ctx)} +} + +func (_c *MockLifecycle_Startup_Call) Run(run func(ctx context.Context)) *MockLifecycle_Startup_Call { + _c.Call.Run(func(args mock.Arguments) { + var arg0 context.Context + if args[0] != nil { + arg0 = args[0].(context.Context) + } + run( + arg0, + ) + }) + return _c +} + +func (_c *MockLifecycle_Startup_Call) Return(err error) *MockLifecycle_Startup_Call { + _c.Call.Return(err) + return _c +} + +func (_c *MockLifecycle_Startup_Call) RunAndReturn(run func(ctx context.Context) error) *MockLifecycle_Startup_Call { + _c.Call.Return(run) + return _c +} diff --git a/router/pkg/pubsub/datasource/mocks_resolve.go b/router/pkg/pubsub/datasource/mocks_resolve.go new file mode 100644 index 0000000000..b2589f6eae --- /dev/null +++ b/router/pkg/pubsub/datasource/mocks_resolve.go @@ -0,0 +1,109 @@ +// Code generated by mockery; DO NOT EDIT. +// github.com/vektra/mockery +// template: testify + +package datasource + +import ( + mock "github.com/stretchr/testify/mock" +) + +// NewMockSubscriptionUpdater creates a new instance of MockSubscriptionUpdater. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations. +// The first argument is typically a *testing.T value. +func NewMockSubscriptionUpdater(t interface { + mock.TestingT + Cleanup(func()) +}) *MockSubscriptionUpdater { + mock := &MockSubscriptionUpdater{} + mock.Mock.Test(t) + + t.Cleanup(func() { mock.AssertExpectations(t) }) + + return mock +} + +// MockSubscriptionUpdater is an autogenerated mock type for the SubscriptionUpdater type +type MockSubscriptionUpdater struct { + mock.Mock +} + +type MockSubscriptionUpdater_Expecter struct { + mock *mock.Mock +} + +func (_m *MockSubscriptionUpdater) EXPECT() *MockSubscriptionUpdater_Expecter { + return &MockSubscriptionUpdater_Expecter{mock: &_m.Mock} +} + +// Done provides a mock function for the type MockSubscriptionUpdater +func (_mock *MockSubscriptionUpdater) Done() { + _mock.Called() + return +} + +// MockSubscriptionUpdater_Done_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'Done' +type MockSubscriptionUpdater_Done_Call struct { + *mock.Call +} + +// Done is a helper method to define mock.On call +func (_e *MockSubscriptionUpdater_Expecter) Done() *MockSubscriptionUpdater_Done_Call { + return &MockSubscriptionUpdater_Done_Call{Call: _e.mock.On("Done")} +} + +func (_c *MockSubscriptionUpdater_Done_Call) Run(run func()) *MockSubscriptionUpdater_Done_Call { + _c.Call.Run(func(args mock.Arguments) { + run() + }) + return _c +} + +func (_c *MockSubscriptionUpdater_Done_Call) Return() *MockSubscriptionUpdater_Done_Call { + _c.Call.Return() + return _c +} + +func (_c *MockSubscriptionUpdater_Done_Call) RunAndReturn(run func()) *MockSubscriptionUpdater_Done_Call { + _c.Run(run) + return _c +} + +// Update provides a mock function for the type MockSubscriptionUpdater +func (_mock *MockSubscriptionUpdater) Update(data []byte) { + _mock.Called(data) + return +} + +// MockSubscriptionUpdater_Update_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'Update' +type MockSubscriptionUpdater_Update_Call struct { + *mock.Call +} + +// Update is a helper method to define mock.On call +// - data []byte +func (_e *MockSubscriptionUpdater_Expecter) Update(data interface{}) *MockSubscriptionUpdater_Update_Call { + return &MockSubscriptionUpdater_Update_Call{Call: _e.mock.On("Update", data)} +} + +func (_c *MockSubscriptionUpdater_Update_Call) Run(run func(data []byte)) *MockSubscriptionUpdater_Update_Call { + _c.Call.Run(func(args mock.Arguments) { + var arg0 []byte + if args[0] != nil { + arg0 = args[0].([]byte) + } + run( + arg0, + ) + }) + return _c +} + +func (_c *MockSubscriptionUpdater_Update_Call) Return() *MockSubscriptionUpdater_Update_Call { + _c.Call.Return() + return _c +} + +func (_c *MockSubscriptionUpdater_Update_Call) RunAndReturn(run func(data []byte)) *MockSubscriptionUpdater_Update_Call { + _c.Run(run) + return _c +} diff --git a/router/pkg/pubsub/datasource/provider_impl_test.go b/router/pkg/pubsub/datasource/provider_impl_test.go index 02da3f20d8..33515768fd 100644 --- a/router/pkg/pubsub/datasource/provider_impl_test.go +++ b/router/pkg/pubsub/datasource/provider_impl_test.go @@ -9,23 +9,8 @@ import ( "github.com/stretchr/testify/mock" ) -// MockAdapter is a mock implementation of AdapterInterface. -type MockAdapter struct { - mock.Mock -} - -func (m *MockAdapter) Startup(ctx context.Context) error { - args := m.Called(ctx) - return args.Error(0) -} - -func (m *MockAdapter) Shutdown(ctx context.Context) error { - args := m.Called(ctx) - return args.Error(0) -} - func TestProvider_Startup_Success(t *testing.T) { - mockAdapter := new(MockAdapter) + mockAdapter := NewMockLifecycle(t) mockAdapter.On("Startup", mock.Anything).Return(nil) provider := PubSubProviderImpl{ @@ -34,11 +19,10 @@ func TestProvider_Startup_Success(t *testing.T) { err := provider.Startup(context.Background()) assert.NoError(t, err) - mockAdapter.AssertExpectations(t) } func TestProvider_Startup_Error(t *testing.T) { - mockAdapter := new(MockAdapter) + mockAdapter := NewMockLifecycle(t) mockAdapter.On("Startup", mock.Anything).Return(errors.New("connect error")) provider := PubSubProviderImpl{ @@ -47,11 +31,10 @@ func TestProvider_Startup_Error(t *testing.T) { err := provider.Startup(context.Background()) assert.Error(t, err) - mockAdapter.AssertExpectations(t) } func TestProvider_Shutdown_Success(t *testing.T) { - mockAdapter := new(MockAdapter) + mockAdapter := NewMockLifecycle(t) mockAdapter.On("Shutdown", mock.Anything).Return(nil) provider := PubSubProviderImpl{ @@ -60,11 +43,10 @@ func TestProvider_Shutdown_Success(t *testing.T) { err := provider.Shutdown(context.Background()) assert.NoError(t, err) - mockAdapter.AssertExpectations(t) } func TestProvider_Shutdown_Error(t *testing.T) { - mockAdapter := new(MockAdapter) + mockAdapter := NewMockLifecycle(t) mockAdapter.On("Shutdown", mock.Anything).Return(errors.New("close error")) provider := PubSubProviderImpl{ @@ -73,7 +55,6 @@ func TestProvider_Shutdown_Error(t *testing.T) { err := provider.Shutdown(context.Background()) assert.Error(t, err) - mockAdapter.AssertExpectations(t) } func TestProvider_ID(t *testing.T) { diff --git a/router/pkg/pubsub/kafka/engine_datasource_test.go b/router/pkg/pubsub/kafka/engine_datasource_test.go index b390f315bb..ec9f50f2ed 100644 --- a/router/pkg/pubsub/kafka/engine_datasource_test.go +++ b/router/pkg/pubsub/kafka/engine_datasource_test.go @@ -11,22 +11,10 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/mock" "github.com/stretchr/testify/require" + "github.com/wundergraph/cosmo/router/pkg/pubsub/datasource" "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/resolve" ) -// MockSubscriptionUpdater implements resolve.SubscriptionUpdater -type MockSubscriptionUpdater struct { - mock.Mock -} - -func (m *MockSubscriptionUpdater) Update(data []byte) { - m.Called(data) -} - -func (m *MockSubscriptionUpdater) Done() { - m.Called() -} - func TestPublishEventConfiguration_MarshalJSONTemplate(t *testing.T) { tests := []struct { name string @@ -90,7 +78,7 @@ func TestSubscriptionSource_UniqueRequestID(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { source := &SubscriptionDataSource{ - pubSub: &mockAdapter{}, + pubSub: NewMockAdapterInterface(t), } ctx := &resolve.Context{} input := []byte(tt.input) @@ -117,13 +105,13 @@ func TestSubscriptionSource_Start(t *testing.T) { tests := []struct { name string input string - mockSetup func(*mockAdapter) + mockSetup func(*MockAdapterInterface, *datasource.MockSubscriptionUpdater) expectError bool }{ { name: "successful subscription", input: `{"topics":["topic1", "topic2"], "providerId":"test-provider"}`, - mockSetup: func(m *mockAdapter) { + mockSetup: func(m *MockAdapterInterface, updater *datasource.MockSubscriptionUpdater) { m.On("Subscribe", mock.Anything, SubscriptionEventConfiguration{ ProviderID: "test-provider", Topics: []string{"topic1", "topic2"}, @@ -134,7 +122,7 @@ func TestSubscriptionSource_Start(t *testing.T) { { name: "adapter returns error", input: `{"topics":["topic1"], "providerId":"test-provider"}`, - mockSetup: func(m *mockAdapter) { + mockSetup: func(m *MockAdapterInterface, updater *datasource.MockSubscriptionUpdater) { m.On("Subscribe", mock.Anything, SubscriptionEventConfiguration{ ProviderID: "test-provider", Topics: []string{"topic1"}, @@ -145,15 +133,16 @@ func TestSubscriptionSource_Start(t *testing.T) { { name: "invalid input json", input: `{"invalid json":`, - mockSetup: func(m *mockAdapter) {}, + mockSetup: func(m *MockAdapterInterface, updater *datasource.MockSubscriptionUpdater) {}, expectError: true, }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - mockAdapter := new(mockAdapter) - tt.mockSetup(mockAdapter) + mockAdapter := NewMockAdapterInterface(t) + updater := datasource.NewMockSubscriptionUpdater(t) + tt.mockSetup(mockAdapter, updater) source := &SubscriptionDataSource{ pubSub: mockAdapter, @@ -166,10 +155,6 @@ func TestSubscriptionSource_Start(t *testing.T) { resolveCtx := &resolve.Context{} resolveCtx = resolveCtx.WithContext(goCtx) - // Create a proper mock updater - updater := new(MockSubscriptionUpdater) - updater.On("Done").Return() - input := []byte(tt.input) err := source.Start(resolveCtx, input, updater) @@ -178,7 +163,6 @@ func TestSubscriptionSource_Start(t *testing.T) { } else { require.NoError(t, err) } - mockAdapter.AssertExpectations(t) }) } } @@ -187,7 +171,7 @@ func TestKafkaPublishDataSource_Load(t *testing.T) { tests := []struct { name string input string - mockSetup func(*mockAdapter) + mockSetup func(*MockAdapterInterface) expectError bool expectedOutput string expectPublished bool @@ -195,7 +179,7 @@ func TestKafkaPublishDataSource_Load(t *testing.T) { { name: "successful publish", input: `{"topic":"test-topic", "data":{"message":"hello"}, "providerId":"test-provider"}`, - mockSetup: func(m *mockAdapter) { + mockSetup: func(m *MockAdapterInterface) { m.On("Publish", mock.Anything, mock.MatchedBy(func(event PublishEventConfiguration) bool { return event.ProviderID == "test-provider" && event.Topic == "test-topic" && @@ -209,7 +193,7 @@ func TestKafkaPublishDataSource_Load(t *testing.T) { { name: "publish error", input: `{"topic":"test-topic", "data":{"message":"hello"}, "providerId":"test-provider"}`, - mockSetup: func(m *mockAdapter) { + mockSetup: func(m *MockAdapterInterface) { m.On("Publish", mock.Anything, mock.Anything).Return(errors.New("publish error")) }, expectError: false, // The Load method doesn't return the publish error directly @@ -219,7 +203,7 @@ func TestKafkaPublishDataSource_Load(t *testing.T) { { name: "invalid input json", input: `{"invalid json":`, - mockSetup: func(m *mockAdapter) {}, + mockSetup: func(m *MockAdapterInterface) {}, expectError: true, expectPublished: false, }, @@ -227,7 +211,7 @@ func TestKafkaPublishDataSource_Load(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - mockAdapter := new(mockAdapter) + mockAdapter := NewMockAdapterInterface(t) tt.mockSetup(mockAdapter) dataSource := &PublishDataSource{ @@ -245,10 +229,6 @@ func TestKafkaPublishDataSource_Load(t *testing.T) { require.NoError(t, err) assert.Equal(t, tt.expectedOutput, out.String()) } - - if tt.expectPublished { - mockAdapter.AssertExpectations(t) - } }) } } @@ -256,7 +236,7 @@ func TestKafkaPublishDataSource_Load(t *testing.T) { func TestKafkaPublishDataSource_LoadWithFiles(t *testing.T) { t.Run("panic on not implemented", func(t *testing.T) { dataSource := &PublishDataSource{ - pubSub: &mockAdapter{}, + pubSub: NewMockAdapterInterface(t), } assert.Panics(t, func() { diff --git a/router/pkg/pubsub/kafka/mocks.go b/router/pkg/pubsub/kafka/mocks.go new file mode 100644 index 0000000000..dfc61e6422 --- /dev/null +++ b/router/pkg/pubsub/kafka/mocks.go @@ -0,0 +1,261 @@ +// Code generated by mockery; DO NOT EDIT. +// github.com/vektra/mockery +// template: testify + +package kafka + +import ( + "context" + + mock "github.com/stretchr/testify/mock" + "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/resolve" +) + +// NewMockAdapterInterface creates a new instance of MockAdapterInterface. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations. +// The first argument is typically a *testing.T value. +func NewMockAdapterInterface(t interface { + mock.TestingT + Cleanup(func()) +}) *MockAdapterInterface { + mock := &MockAdapterInterface{} + mock.Mock.Test(t) + + t.Cleanup(func() { mock.AssertExpectations(t) }) + + return mock +} + +// MockAdapterInterface is an autogenerated mock type for the AdapterInterface type +type MockAdapterInterface struct { + mock.Mock +} + +type MockAdapterInterface_Expecter struct { + mock *mock.Mock +} + +func (_m *MockAdapterInterface) EXPECT() *MockAdapterInterface_Expecter { + return &MockAdapterInterface_Expecter{mock: &_m.Mock} +} + +// Publish provides a mock function for the type MockAdapterInterface +func (_mock *MockAdapterInterface) Publish(ctx context.Context, event PublishEventConfiguration) error { + ret := _mock.Called(ctx, event) + + if len(ret) == 0 { + panic("no return value specified for Publish") + } + + var r0 error + if returnFunc, ok := ret.Get(0).(func(context.Context, PublishEventConfiguration) error); ok { + r0 = returnFunc(ctx, event) + } else { + r0 = ret.Error(0) + } + return r0 +} + +// MockAdapterInterface_Publish_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'Publish' +type MockAdapterInterface_Publish_Call struct { + *mock.Call +} + +// Publish is a helper method to define mock.On call +// - ctx context.Context +// - event PublishEventConfiguration +func (_e *MockAdapterInterface_Expecter) Publish(ctx interface{}, event interface{}) *MockAdapterInterface_Publish_Call { + return &MockAdapterInterface_Publish_Call{Call: _e.mock.On("Publish", ctx, event)} +} + +func (_c *MockAdapterInterface_Publish_Call) Run(run func(ctx context.Context, event PublishEventConfiguration)) *MockAdapterInterface_Publish_Call { + _c.Call.Run(func(args mock.Arguments) { + var arg0 context.Context + if args[0] != nil { + arg0 = args[0].(context.Context) + } + var arg1 PublishEventConfiguration + if args[1] != nil { + arg1 = args[1].(PublishEventConfiguration) + } + run( + arg0, + arg1, + ) + }) + return _c +} + +func (_c *MockAdapterInterface_Publish_Call) Return(err error) *MockAdapterInterface_Publish_Call { + _c.Call.Return(err) + return _c +} + +func (_c *MockAdapterInterface_Publish_Call) RunAndReturn(run func(ctx context.Context, event PublishEventConfiguration) error) *MockAdapterInterface_Publish_Call { + _c.Call.Return(run) + return _c +} + +// Shutdown provides a mock function for the type MockAdapterInterface +func (_mock *MockAdapterInterface) Shutdown(ctx context.Context) error { + ret := _mock.Called(ctx) + + if len(ret) == 0 { + panic("no return value specified for Shutdown") + } + + var r0 error + if returnFunc, ok := ret.Get(0).(func(context.Context) error); ok { + r0 = returnFunc(ctx) + } else { + r0 = ret.Error(0) + } + return r0 +} + +// MockAdapterInterface_Shutdown_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'Shutdown' +type MockAdapterInterface_Shutdown_Call struct { + *mock.Call +} + +// Shutdown is a helper method to define mock.On call +// - ctx context.Context +func (_e *MockAdapterInterface_Expecter) Shutdown(ctx interface{}) *MockAdapterInterface_Shutdown_Call { + return &MockAdapterInterface_Shutdown_Call{Call: _e.mock.On("Shutdown", ctx)} +} + +func (_c *MockAdapterInterface_Shutdown_Call) Run(run func(ctx context.Context)) *MockAdapterInterface_Shutdown_Call { + _c.Call.Run(func(args mock.Arguments) { + var arg0 context.Context + if args[0] != nil { + arg0 = args[0].(context.Context) + } + run( + arg0, + ) + }) + return _c +} + +func (_c *MockAdapterInterface_Shutdown_Call) Return(err error) *MockAdapterInterface_Shutdown_Call { + _c.Call.Return(err) + return _c +} + +func (_c *MockAdapterInterface_Shutdown_Call) RunAndReturn(run func(ctx context.Context) error) *MockAdapterInterface_Shutdown_Call { + _c.Call.Return(run) + return _c +} + +// Startup provides a mock function for the type MockAdapterInterface +func (_mock *MockAdapterInterface) Startup(ctx context.Context) error { + ret := _mock.Called(ctx) + + if len(ret) == 0 { + panic("no return value specified for Startup") + } + + var r0 error + if returnFunc, ok := ret.Get(0).(func(context.Context) error); ok { + r0 = returnFunc(ctx) + } else { + r0 = ret.Error(0) + } + return r0 +} + +// MockAdapterInterface_Startup_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'Startup' +type MockAdapterInterface_Startup_Call struct { + *mock.Call +} + +// Startup is a helper method to define mock.On call +// - ctx context.Context +func (_e *MockAdapterInterface_Expecter) Startup(ctx interface{}) *MockAdapterInterface_Startup_Call { + return &MockAdapterInterface_Startup_Call{Call: _e.mock.On("Startup", ctx)} +} + +func (_c *MockAdapterInterface_Startup_Call) Run(run func(ctx context.Context)) *MockAdapterInterface_Startup_Call { + _c.Call.Run(func(args mock.Arguments) { + var arg0 context.Context + if args[0] != nil { + arg0 = args[0].(context.Context) + } + run( + arg0, + ) + }) + return _c +} + +func (_c *MockAdapterInterface_Startup_Call) Return(err error) *MockAdapterInterface_Startup_Call { + _c.Call.Return(err) + return _c +} + +func (_c *MockAdapterInterface_Startup_Call) RunAndReturn(run func(ctx context.Context) error) *MockAdapterInterface_Startup_Call { + _c.Call.Return(run) + return _c +} + +// Subscribe provides a mock function for the type MockAdapterInterface +func (_mock *MockAdapterInterface) Subscribe(ctx context.Context, event SubscriptionEventConfiguration, updater resolve.SubscriptionUpdater) error { + ret := _mock.Called(ctx, event, updater) + + if len(ret) == 0 { + panic("no return value specified for Subscribe") + } + + var r0 error + if returnFunc, ok := ret.Get(0).(func(context.Context, SubscriptionEventConfiguration, resolve.SubscriptionUpdater) error); ok { + r0 = returnFunc(ctx, event, updater) + } else { + r0 = ret.Error(0) + } + return r0 +} + +// MockAdapterInterface_Subscribe_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'Subscribe' +type MockAdapterInterface_Subscribe_Call struct { + *mock.Call +} + +// Subscribe is a helper method to define mock.On call +// - ctx context.Context +// - event SubscriptionEventConfiguration +// - updater resolve.SubscriptionUpdater +func (_e *MockAdapterInterface_Expecter) Subscribe(ctx interface{}, event interface{}, updater interface{}) *MockAdapterInterface_Subscribe_Call { + return &MockAdapterInterface_Subscribe_Call{Call: _e.mock.On("Subscribe", ctx, event, updater)} +} + +func (_c *MockAdapterInterface_Subscribe_Call) Run(run func(ctx context.Context, event SubscriptionEventConfiguration, updater resolve.SubscriptionUpdater)) *MockAdapterInterface_Subscribe_Call { + _c.Call.Run(func(args mock.Arguments) { + var arg0 context.Context + if args[0] != nil { + arg0 = args[0].(context.Context) + } + var arg1 SubscriptionEventConfiguration + if args[1] != nil { + arg1 = args[1].(SubscriptionEventConfiguration) + } + var arg2 resolve.SubscriptionUpdater + if args[2] != nil { + arg2 = args[2].(resolve.SubscriptionUpdater) + } + run( + arg0, + arg1, + arg2, + ) + }) + return _c +} + +func (_c *MockAdapterInterface_Subscribe_Call) Return(err error) *MockAdapterInterface_Subscribe_Call { + _c.Call.Return(err) + return _c +} + +func (_c *MockAdapterInterface_Subscribe_Call) RunAndReturn(run func(ctx context.Context, event SubscriptionEventConfiguration, updater resolve.SubscriptionUpdater) error) *MockAdapterInterface_Subscribe_Call { + _c.Call.Return(run) + return _c +} diff --git a/router/pkg/pubsub/kafka/provider_builder_test.go b/router/pkg/pubsub/kafka/provider_builder_test.go index af10571ffa..81664810ea 100644 --- a/router/pkg/pubsub/kafka/provider_builder_test.go +++ b/router/pkg/pubsub/kafka/provider_builder_test.go @@ -5,39 +5,12 @@ import ( "testing" "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/mock" "github.com/stretchr/testify/require" "github.com/wundergraph/cosmo/router/pkg/config" "github.com/wundergraph/cosmo/router/pkg/pubsub/datasource" - "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/resolve" "go.uber.org/zap/zaptest" ) -// mockAdapter is a mock of AdapterInterface -type mockAdapter struct { - mock.Mock -} - -func (m *mockAdapter) Subscribe(ctx context.Context, event SubscriptionEventConfiguration, updater resolve.SubscriptionUpdater) error { - args := m.Called(ctx, event, updater) - return args.Error(0) -} - -func (m *mockAdapter) Publish(ctx context.Context, event PublishEventConfiguration) error { - args := m.Called(ctx, event) - return args.Error(0) -} - -func (m *mockAdapter) Startup(ctx context.Context) error { - args := m.Called(ctx) - return args.Error(0) -} - -func (m *mockAdapter) Shutdown(ctx context.Context) error { - args := m.Called(ctx) - return args.Error(0) -} - func TestBuildKafkaOptions(t *testing.T) { t.Run("basic configuration", func(t *testing.T) { cfg := config.KafkaEventSource{ diff --git a/router/pkg/pubsub/kafka/pubsub_datasource_test.go b/router/pkg/pubsub/kafka/pubsub_datasource_test.go index cd10a1eadb..626619f2be 100644 --- a/router/pkg/pubsub/kafka/pubsub_datasource_test.go +++ b/router/pkg/pubsub/kafka/pubsub_datasource_test.go @@ -53,7 +53,7 @@ func TestPubSubDataSourceWithMockAdapter(t *testing.T) { } // Create mock adapter - mockAdapter := new(mockAdapter) + mockAdapter := NewMockAdapterInterface(t) // Configure mock expectations for Publish mockAdapter.On("Publish", mock.Anything, mock.MatchedBy(func(event PublishEventConfiguration) bool { @@ -79,9 +79,6 @@ func TestPubSubDataSourceWithMockAdapter(t *testing.T) { err = ds.Load(context.Background(), []byte(input), out) require.NoError(t, err) require.Equal(t, `{"success": true}`, out.String()) - - // Verify mock expectations - mockAdapter.AssertExpectations(t) } // TestPubSubDataSource_GetResolveDataSource_WrongType tests the PubSubDataSource with a mocked adapter @@ -100,7 +97,7 @@ func TestPubSubDataSource_GetResolveDataSource_WrongType(t *testing.T) { } // Create mock adapter - mockAdapter := new(mockAdapter) + mockAdapter := NewMockAdapterInterface(t) // Create the data source with mock adapter pubsub := &PubSubDataSource{ diff --git a/router/pkg/pubsub/nats/engine_datasource_test.go b/router/pkg/pubsub/nats/engine_datasource_test.go index 4a4dfdd20a..39f9df7c7d 100644 --- a/router/pkg/pubsub/nats/engine_datasource_test.go +++ b/router/pkg/pubsub/nats/engine_datasource_test.go @@ -12,6 +12,7 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/mock" "github.com/stretchr/testify/require" + "github.com/wundergraph/cosmo/router/pkg/pubsub/datasource" "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/resolve" ) @@ -125,7 +126,7 @@ func TestSubscriptionSource_UniqueRequestID(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { source := &SubscriptionSource{ - pubSub: &mockAdapter{}, + pubSub: NewMockAdapterInterface(t), } ctx := &resolve.Context{} input := []byte(tt.input) @@ -152,13 +153,13 @@ func TestSubscriptionSource_Start(t *testing.T) { tests := []struct { name string input string - mockSetup func(*mockAdapter) + mockSetup func(*MockAdapterInterface, *datasource.MockSubscriptionUpdater) expectError bool }{ { name: "successful subscription", input: `{"subjects":["subject1", "subject2"], "providerId":"test-provider"}`, - mockSetup: func(m *mockAdapter) { + mockSetup: func(m *MockAdapterInterface, updater *datasource.MockSubscriptionUpdater) { m.On("Subscribe", mock.Anything, SubscriptionEventConfiguration{ ProviderID: "test-provider", Subjects: []string{"subject1", "subject2"}, @@ -169,7 +170,7 @@ func TestSubscriptionSource_Start(t *testing.T) { { name: "adapter returns error", input: `{"subjects":["subject1"], "providerId":"test-provider"}`, - mockSetup: func(m *mockAdapter) { + mockSetup: func(m *MockAdapterInterface, updater *datasource.MockSubscriptionUpdater) { m.On("Subscribe", mock.Anything, SubscriptionEventConfiguration{ ProviderID: "test-provider", Subjects: []string{"subject1"}, @@ -180,15 +181,16 @@ func TestSubscriptionSource_Start(t *testing.T) { { name: "invalid input json", input: `{"invalid json":`, - mockSetup: func(m *mockAdapter) {}, + mockSetup: func(m *MockAdapterInterface, updater *datasource.MockSubscriptionUpdater) {}, expectError: true, }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - mockAdapter := new(mockAdapter) - tt.mockSetup(mockAdapter) + mockAdapter := NewMockAdapterInterface(t) + updater := datasource.NewMockSubscriptionUpdater(t) + tt.mockSetup(mockAdapter, updater) source := &SubscriptionSource{ pubSub: mockAdapter, @@ -201,10 +203,6 @@ func TestSubscriptionSource_Start(t *testing.T) { resolveCtx := &resolve.Context{} resolveCtx = resolveCtx.WithContext(goCtx) - // Create a proper mock updater - updater := new(MockSubscriptionUpdater) - updater.On("Done").Return() - input := []byte(tt.input) err := source.Start(resolveCtx, input, updater) @@ -213,7 +211,6 @@ func TestSubscriptionSource_Start(t *testing.T) { } else { require.NoError(t, err) } - mockAdapter.AssertExpectations(t) }) } } @@ -222,7 +219,7 @@ func TestNatsPublishDataSource_Load(t *testing.T) { tests := []struct { name string input string - mockSetup func(*mockAdapter) + mockSetup func(*MockAdapterInterface) expectError bool expectedOutput string expectPublished bool @@ -230,7 +227,7 @@ func TestNatsPublishDataSource_Load(t *testing.T) { { name: "successful publish", input: `{"subject":"test-subject", "data":{"message":"hello"}, "providerId":"test-provider"}`, - mockSetup: func(m *mockAdapter) { + mockSetup: func(m *MockAdapterInterface) { m.On("Publish", mock.Anything, mock.MatchedBy(func(event PublishAndRequestEventConfiguration) bool { return event.ProviderID == "test-provider" && event.Subject == "test-subject" && @@ -244,7 +241,7 @@ func TestNatsPublishDataSource_Load(t *testing.T) { { name: "publish error", input: `{"subject":"test-subject", "data":{"message":"hello"}, "providerId":"test-provider"}`, - mockSetup: func(m *mockAdapter) { + mockSetup: func(m *MockAdapterInterface) { m.On("Publish", mock.Anything, mock.Anything).Return(errors.New("publish error")) }, expectError: false, // The Load method doesn't return the publish error directly @@ -254,7 +251,7 @@ func TestNatsPublishDataSource_Load(t *testing.T) { { name: "invalid input json", input: `{"invalid json":`, - mockSetup: func(m *mockAdapter) {}, + mockSetup: func(m *MockAdapterInterface) {}, expectError: true, expectPublished: false, }, @@ -262,7 +259,7 @@ func TestNatsPublishDataSource_Load(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - mockAdapter := new(mockAdapter) + mockAdapter := NewMockAdapterInterface(t) tt.mockSetup(mockAdapter) dataSource := &NatsPublishDataSource{ @@ -279,9 +276,6 @@ func TestNatsPublishDataSource_Load(t *testing.T) { require.Error(t, err) } else { require.NoError(t, err) - if tt.expectPublished { - mockAdapter.AssertExpectations(t) - } if tt.expectedOutput != "" { assert.Equal(t, tt.expectedOutput, out.String()) } @@ -301,14 +295,14 @@ func TestNatsRequestDataSource_Load(t *testing.T) { tests := []struct { name string input string - mockSetup func(*mockAdapter) + mockSetup func(*MockAdapterInterface) expectError bool expectedOutput string }{ { name: "successful request", input: `{"subject":"test-subject", "data":{"message":"hello"}, "providerId":"test-provider"}`, - mockSetup: func(m *mockAdapter) { + mockSetup: func(m *MockAdapterInterface) { m.On("Request", mock.Anything, mock.MatchedBy(func(event PublishAndRequestEventConfiguration) bool { return event.ProviderID == "test-provider" && event.Subject == "test-subject" && @@ -325,7 +319,7 @@ func TestNatsRequestDataSource_Load(t *testing.T) { { name: "request error", input: `{"subject":"test-subject", "data":{"message":"hello"}, "providerId":"test-provider"}`, - mockSetup: func(m *mockAdapter) { + mockSetup: func(m *MockAdapterInterface) { m.On("Request", mock.Anything, mock.Anything, mock.Anything).Return(errors.New("request error")) }, expectError: true, @@ -334,7 +328,7 @@ func TestNatsRequestDataSource_Load(t *testing.T) { { name: "invalid input json", input: `{"invalid json":`, - mockSetup: func(m *mockAdapter) {}, + mockSetup: func(m *MockAdapterInterface) {}, expectError: true, expectedOutput: "", }, @@ -342,7 +336,7 @@ func TestNatsRequestDataSource_Load(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - mockAdapter := new(mockAdapter) + mockAdapter := NewMockAdapterInterface(t) tt.mockSetup(mockAdapter) dataSource := &NatsRequestDataSource{ @@ -359,7 +353,6 @@ func TestNatsRequestDataSource_Load(t *testing.T) { require.Error(t, err) } else { require.NoError(t, err) - mockAdapter.AssertExpectations(t) if tt.expectedOutput != "" { assert.Equal(t, tt.expectedOutput, out.String()) } diff --git a/router/pkg/pubsub/nats/mocks.go b/router/pkg/pubsub/nats/mocks.go new file mode 100644 index 0000000000..4cdbdb6254 --- /dev/null +++ b/router/pkg/pubsub/nats/mocks.go @@ -0,0 +1,325 @@ +// Code generated by mockery; DO NOT EDIT. +// github.com/vektra/mockery +// template: testify + +package nats + +import ( + "context" + "io" + + mock "github.com/stretchr/testify/mock" + "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/resolve" +) + +// NewMockAdapterInterface creates a new instance of MockAdapterInterface. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations. +// The first argument is typically a *testing.T value. +func NewMockAdapterInterface(t interface { + mock.TestingT + Cleanup(func()) +}) *MockAdapterInterface { + mock := &MockAdapterInterface{} + mock.Mock.Test(t) + + t.Cleanup(func() { mock.AssertExpectations(t) }) + + return mock +} + +// MockAdapterInterface is an autogenerated mock type for the AdapterInterface type +type MockAdapterInterface struct { + mock.Mock +} + +type MockAdapterInterface_Expecter struct { + mock *mock.Mock +} + +func (_m *MockAdapterInterface) EXPECT() *MockAdapterInterface_Expecter { + return &MockAdapterInterface_Expecter{mock: &_m.Mock} +} + +// Publish provides a mock function for the type MockAdapterInterface +func (_mock *MockAdapterInterface) Publish(ctx context.Context, event PublishAndRequestEventConfiguration) error { + ret := _mock.Called(ctx, event) + + if len(ret) == 0 { + panic("no return value specified for Publish") + } + + var r0 error + if returnFunc, ok := ret.Get(0).(func(context.Context, PublishAndRequestEventConfiguration) error); ok { + r0 = returnFunc(ctx, event) + } else { + r0 = ret.Error(0) + } + return r0 +} + +// MockAdapterInterface_Publish_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'Publish' +type MockAdapterInterface_Publish_Call struct { + *mock.Call +} + +// Publish is a helper method to define mock.On call +// - ctx context.Context +// - event PublishAndRequestEventConfiguration +func (_e *MockAdapterInterface_Expecter) Publish(ctx interface{}, event interface{}) *MockAdapterInterface_Publish_Call { + return &MockAdapterInterface_Publish_Call{Call: _e.mock.On("Publish", ctx, event)} +} + +func (_c *MockAdapterInterface_Publish_Call) Run(run func(ctx context.Context, event PublishAndRequestEventConfiguration)) *MockAdapterInterface_Publish_Call { + _c.Call.Run(func(args mock.Arguments) { + var arg0 context.Context + if args[0] != nil { + arg0 = args[0].(context.Context) + } + var arg1 PublishAndRequestEventConfiguration + if args[1] != nil { + arg1 = args[1].(PublishAndRequestEventConfiguration) + } + run( + arg0, + arg1, + ) + }) + return _c +} + +func (_c *MockAdapterInterface_Publish_Call) Return(err error) *MockAdapterInterface_Publish_Call { + _c.Call.Return(err) + return _c +} + +func (_c *MockAdapterInterface_Publish_Call) RunAndReturn(run func(ctx context.Context, event PublishAndRequestEventConfiguration) error) *MockAdapterInterface_Publish_Call { + _c.Call.Return(run) + return _c +} + +// Request provides a mock function for the type MockAdapterInterface +func (_mock *MockAdapterInterface) Request(ctx context.Context, event PublishAndRequestEventConfiguration, w io.Writer) error { + ret := _mock.Called(ctx, event, w) + + if len(ret) == 0 { + panic("no return value specified for Request") + } + + var r0 error + if returnFunc, ok := ret.Get(0).(func(context.Context, PublishAndRequestEventConfiguration, io.Writer) error); ok { + r0 = returnFunc(ctx, event, w) + } else { + r0 = ret.Error(0) + } + return r0 +} + +// MockAdapterInterface_Request_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'Request' +type MockAdapterInterface_Request_Call struct { + *mock.Call +} + +// Request is a helper method to define mock.On call +// - ctx context.Context +// - event PublishAndRequestEventConfiguration +// - w io.Writer +func (_e *MockAdapterInterface_Expecter) Request(ctx interface{}, event interface{}, w interface{}) *MockAdapterInterface_Request_Call { + return &MockAdapterInterface_Request_Call{Call: _e.mock.On("Request", ctx, event, w)} +} + +func (_c *MockAdapterInterface_Request_Call) Run(run func(ctx context.Context, event PublishAndRequestEventConfiguration, w io.Writer)) *MockAdapterInterface_Request_Call { + _c.Call.Run(func(args mock.Arguments) { + var arg0 context.Context + if args[0] != nil { + arg0 = args[0].(context.Context) + } + var arg1 PublishAndRequestEventConfiguration + if args[1] != nil { + arg1 = args[1].(PublishAndRequestEventConfiguration) + } + var arg2 io.Writer + if args[2] != nil { + arg2 = args[2].(io.Writer) + } + run( + arg0, + arg1, + arg2, + ) + }) + return _c +} + +func (_c *MockAdapterInterface_Request_Call) Return(err error) *MockAdapterInterface_Request_Call { + _c.Call.Return(err) + return _c +} + +func (_c *MockAdapterInterface_Request_Call) RunAndReturn(run func(ctx context.Context, event PublishAndRequestEventConfiguration, w io.Writer) error) *MockAdapterInterface_Request_Call { + _c.Call.Return(run) + return _c +} + +// Shutdown provides a mock function for the type MockAdapterInterface +func (_mock *MockAdapterInterface) Shutdown(ctx context.Context) error { + ret := _mock.Called(ctx) + + if len(ret) == 0 { + panic("no return value specified for Shutdown") + } + + var r0 error + if returnFunc, ok := ret.Get(0).(func(context.Context) error); ok { + r0 = returnFunc(ctx) + } else { + r0 = ret.Error(0) + } + return r0 +} + +// MockAdapterInterface_Shutdown_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'Shutdown' +type MockAdapterInterface_Shutdown_Call struct { + *mock.Call +} + +// Shutdown is a helper method to define mock.On call +// - ctx context.Context +func (_e *MockAdapterInterface_Expecter) Shutdown(ctx interface{}) *MockAdapterInterface_Shutdown_Call { + return &MockAdapterInterface_Shutdown_Call{Call: _e.mock.On("Shutdown", ctx)} +} + +func (_c *MockAdapterInterface_Shutdown_Call) Run(run func(ctx context.Context)) *MockAdapterInterface_Shutdown_Call { + _c.Call.Run(func(args mock.Arguments) { + var arg0 context.Context + if args[0] != nil { + arg0 = args[0].(context.Context) + } + run( + arg0, + ) + }) + return _c +} + +func (_c *MockAdapterInterface_Shutdown_Call) Return(err error) *MockAdapterInterface_Shutdown_Call { + _c.Call.Return(err) + return _c +} + +func (_c *MockAdapterInterface_Shutdown_Call) RunAndReturn(run func(ctx context.Context) error) *MockAdapterInterface_Shutdown_Call { + _c.Call.Return(run) + return _c +} + +// Startup provides a mock function for the type MockAdapterInterface +func (_mock *MockAdapterInterface) Startup(ctx context.Context) error { + ret := _mock.Called(ctx) + + if len(ret) == 0 { + panic("no return value specified for Startup") + } + + var r0 error + if returnFunc, ok := ret.Get(0).(func(context.Context) error); ok { + r0 = returnFunc(ctx) + } else { + r0 = ret.Error(0) + } + return r0 +} + +// MockAdapterInterface_Startup_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'Startup' +type MockAdapterInterface_Startup_Call struct { + *mock.Call +} + +// Startup is a helper method to define mock.On call +// - ctx context.Context +func (_e *MockAdapterInterface_Expecter) Startup(ctx interface{}) *MockAdapterInterface_Startup_Call { + return &MockAdapterInterface_Startup_Call{Call: _e.mock.On("Startup", ctx)} +} + +func (_c *MockAdapterInterface_Startup_Call) Run(run func(ctx context.Context)) *MockAdapterInterface_Startup_Call { + _c.Call.Run(func(args mock.Arguments) { + var arg0 context.Context + if args[0] != nil { + arg0 = args[0].(context.Context) + } + run( + arg0, + ) + }) + return _c +} + +func (_c *MockAdapterInterface_Startup_Call) Return(err error) *MockAdapterInterface_Startup_Call { + _c.Call.Return(err) + return _c +} + +func (_c *MockAdapterInterface_Startup_Call) RunAndReturn(run func(ctx context.Context) error) *MockAdapterInterface_Startup_Call { + _c.Call.Return(run) + return _c +} + +// Subscribe provides a mock function for the type MockAdapterInterface +func (_mock *MockAdapterInterface) Subscribe(ctx context.Context, event SubscriptionEventConfiguration, updater resolve.SubscriptionUpdater) error { + ret := _mock.Called(ctx, event, updater) + + if len(ret) == 0 { + panic("no return value specified for Subscribe") + } + + var r0 error + if returnFunc, ok := ret.Get(0).(func(context.Context, SubscriptionEventConfiguration, resolve.SubscriptionUpdater) error); ok { + r0 = returnFunc(ctx, event, updater) + } else { + r0 = ret.Error(0) + } + return r0 +} + +// MockAdapterInterface_Subscribe_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'Subscribe' +type MockAdapterInterface_Subscribe_Call struct { + *mock.Call +} + +// Subscribe is a helper method to define mock.On call +// - ctx context.Context +// - event SubscriptionEventConfiguration +// - updater resolve.SubscriptionUpdater +func (_e *MockAdapterInterface_Expecter) Subscribe(ctx interface{}, event interface{}, updater interface{}) *MockAdapterInterface_Subscribe_Call { + return &MockAdapterInterface_Subscribe_Call{Call: _e.mock.On("Subscribe", ctx, event, updater)} +} + +func (_c *MockAdapterInterface_Subscribe_Call) Run(run func(ctx context.Context, event SubscriptionEventConfiguration, updater resolve.SubscriptionUpdater)) *MockAdapterInterface_Subscribe_Call { + _c.Call.Run(func(args mock.Arguments) { + var arg0 context.Context + if args[0] != nil { + arg0 = args[0].(context.Context) + } + var arg1 SubscriptionEventConfiguration + if args[1] != nil { + arg1 = args[1].(SubscriptionEventConfiguration) + } + var arg2 resolve.SubscriptionUpdater + if args[2] != nil { + arg2 = args[2].(resolve.SubscriptionUpdater) + } + run( + arg0, + arg1, + arg2, + ) + }) + return _c +} + +func (_c *MockAdapterInterface_Subscribe_Call) Return(err error) *MockAdapterInterface_Subscribe_Call { + _c.Call.Return(err) + return _c +} + +func (_c *MockAdapterInterface_Subscribe_Call) RunAndReturn(run func(ctx context.Context, event SubscriptionEventConfiguration, updater resolve.SubscriptionUpdater) error) *MockAdapterInterface_Subscribe_Call { + _c.Call.Return(run) + return _c +} diff --git a/router/pkg/pubsub/nats/provider_builder_test.go b/router/pkg/pubsub/nats/provider_builder_test.go index 2bb16ea768..0f97c3d1fe 100644 --- a/router/pkg/pubsub/nats/provider_builder_test.go +++ b/router/pkg/pubsub/nats/provider_builder_test.go @@ -2,49 +2,16 @@ package nats import ( "context" - "io" "testing" "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/mock" "github.com/stretchr/testify/require" nodev1 "github.com/wundergraph/cosmo/router/gen/proto/wg/cosmo/node/v1" "github.com/wundergraph/cosmo/router/pkg/config" "github.com/wundergraph/cosmo/router/pkg/pubsub/datasource" - "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/resolve" "go.uber.org/zap/zaptest" ) -// mockAdapter is a mock of AdapterInterface -type mockAdapter struct { - mock.Mock -} - -func (m *mockAdapter) Subscribe(ctx context.Context, event SubscriptionEventConfiguration, updater resolve.SubscriptionUpdater) error { - args := m.Called(ctx, event, updater) - return args.Error(0) -} - -func (m *mockAdapter) Publish(ctx context.Context, event PublishAndRequestEventConfiguration) error { - args := m.Called(ctx, event) - return args.Error(0) -} - -func (m *mockAdapter) Request(ctx context.Context, event PublishAndRequestEventConfiguration, w io.Writer) error { - args := m.Called(ctx, event, w) - return args.Error(0) -} - -func (m *mockAdapter) Startup(ctx context.Context) error { - args := m.Called(ctx) - return args.Error(0) -} - -func (m *mockAdapter) Shutdown(ctx context.Context) error { - args := m.Called(ctx) - return args.Error(0) -} - func TestBuildNatsOptions(t *testing.T) { t.Run("basic configuration", func(t *testing.T) { cfg := config.NatsEventSource{ diff --git a/router/pkg/pubsub/nats/pubsub_datasource_test.go b/router/pkg/pubsub/nats/pubsub_datasource_test.go index e48639b0c9..8f8ccc49a8 100644 --- a/router/pkg/pubsub/nats/pubsub_datasource_test.go +++ b/router/pkg/pubsub/nats/pubsub_datasource_test.go @@ -53,7 +53,7 @@ func TestPubSubDataSourceWithMockAdapter(t *testing.T) { } // Create mock adapter - mockAdapter := new(mockAdapter) + mockAdapter := NewMockAdapterInterface(t) // Configure mock expectations for Publish mockAdapter.On("Publish", mock.Anything, mock.MatchedBy(func(event PublishAndRequestEventConfiguration) bool { @@ -79,9 +79,6 @@ func TestPubSubDataSourceWithMockAdapter(t *testing.T) { err = ds.Load(context.Background(), []byte(input), out) require.NoError(t, err) require.Equal(t, `{"success": true}`, out.String()) - - // Verify mock expectations - mockAdapter.AssertExpectations(t) } func TestPubSubDataSource_GetResolveDataSource_WrongType(t *testing.T) { @@ -99,7 +96,7 @@ func TestPubSubDataSource_GetResolveDataSource_WrongType(t *testing.T) { } // Create mock adapter - mockAdapter := new(mockAdapter) + mockAdapter := NewMockAdapterInterface(t) // Create the data source with mock adapter pubsub := &PubSubDataSource{ @@ -250,7 +247,7 @@ func TestPubSubDataSource_RequestDataSource(t *testing.T) { } // Create mock adapter - mockAdapter := new(mockAdapter) + mockAdapter := NewMockAdapterInterface(t) // Configure mock expectations for Request mockAdapter.On("Request", mock.Anything, mock.MatchedBy(func(event PublishAndRequestEventConfiguration) bool { @@ -280,7 +277,4 @@ func TestPubSubDataSource_RequestDataSource(t *testing.T) { err = ds.Load(context.Background(), []byte(input), out) require.NoError(t, err) require.Equal(t, `{"response": "test"}`, out.String()) - - // Verify mock expectations - mockAdapter.AssertExpectations(t) } From 4764c74fa613d0965c09cd3f531085b9812e6d72 Mon Sep 17 00:00:00 2001 From: Alessandro Pagnin Date: Wed, 28 May 2025 14:44:18 +0200 Subject: [PATCH 083/126] chore: update go.mod and go.sum by removing unused dependencies and adding new indirect dependencies --- router-tests/go.mod | 24 ++------------- router-tests/go.sum | 73 +-------------------------------------------- 2 files changed, 3 insertions(+), 94 deletions(-) diff --git a/router-tests/go.mod b/router-tests/go.mod index ed12f3b82e..34b416509e 100644 --- a/router-tests/go.mod +++ b/router-tests/go.mod @@ -15,7 +15,6 @@ require ( github.com/hasura/go-graphql-client v0.12.2 github.com/mark3labs/mcp-go v0.30.0 github.com/nats-io/nats.go v1.35.0 - github.com/ory/dockertest/v3 v3.12.0 github.com/prometheus/client_golang v1.19.1 github.com/prometheus/client_model v0.6.1 github.com/redis/go-redis/v9 v9.4.0 @@ -26,7 +25,6 @@ require ( github.com/twmb/franz-go/pkg/kadm v1.11.0 github.com/wundergraph/cosmo/demo v0.0.0-20250522134511-06b5a6a4aef5 github.com/wundergraph/cosmo/router v0.0.0-20250522134511-06b5a6a4aef5 - github.com/wundergraph/graphql-go-tools/v2 v2.0.0-rc.181 go.opentelemetry.io/otel v1.28.0 go.opentelemetry.io/otel/sdk v1.28.0 go.opentelemetry.io/otel/sdk/metric v1.28.0 @@ -41,13 +39,9 @@ require ( require ( connectrpc.com/connect v1.16.2 // indirect - dario.cat/mergo v1.0.0 // indirect github.com/99designs/gqlgen v0.17.63 // indirect - github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161 // indirect github.com/KimMachineGun/automemlimit v0.6.1 // indirect github.com/MicahParks/keyfunc/v3 v3.3.5 // indirect - github.com/Microsoft/go-winio v0.6.2 // indirect - github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5 // indirect github.com/agnivade/levenshtein v1.2.0 // indirect github.com/andybalholm/brotli v1.1.0 // indirect github.com/benbjohnson/clock v1.3.0 // indirect @@ -58,15 +52,11 @@ require ( github.com/cespare/xxhash/v2 v2.3.0 // indirect github.com/cilium/ebpf v0.16.0 // indirect github.com/containerd/cgroups/v3 v3.0.2 // indirect - github.com/containerd/continuity v0.4.5 // indirect github.com/coreos/go-systemd/v22 v22.5.0 // indirect github.com/cpuguy83/go-md2man/v2 v2.0.5 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/dgraph-io/ristretto/v2 v2.1.0 // indirect github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect - github.com/docker/cli v27.4.1+incompatible // indirect - github.com/docker/docker v27.1.1+incompatible // indirect - github.com/docker/go-connections v0.5.0 // indirect github.com/docker/go-units v0.5.0 // indirect github.com/dustin/go-humanize v1.0.1 // indirect github.com/expr-lang/expr v1.17.3 // indirect @@ -85,9 +75,7 @@ require ( github.com/goccy/go-json v0.10.3 // indirect github.com/goccy/go-yaml v1.17.1 // indirect github.com/godbus/dbus/v5 v5.1.0 // indirect - github.com/gogo/protobuf v1.3.2 // indirect github.com/golang/protobuf v1.5.4 // indirect - github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 // indirect github.com/grpc-ecosystem/grpc-gateway/v2 v2.19.0 // indirect github.com/hashicorp/errwrap v1.1.0 // indirect github.com/hashicorp/go-hclog v1.6.3 // indirect @@ -108,16 +96,10 @@ require ( github.com/minio/md5-simd v1.1.2 // indirect github.com/minio/minio-go/v7 v7.0.74 // indirect github.com/mitchellh/mapstructure v1.5.0 // indirect - github.com/moby/docker-image-spec v1.3.1 // indirect - github.com/moby/sys/user v0.3.0 // indirect - github.com/moby/term v0.5.0 // indirect github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect github.com/nats-io/nkeys v0.4.7 // indirect github.com/nats-io/nuid v1.0.1 // indirect github.com/oklog/run v1.0.0 // indirect - github.com/opencontainers/go-digest v1.0.0 // indirect - github.com/opencontainers/image-spec v1.1.0 // indirect - github.com/opencontainers/runc v1.2.3 // indirect github.com/opencontainers/runtime-spec v1.2.0 // indirect github.com/pbnjay/memory v0.0.0-20210728143218-7b4eea64cf58 // indirect github.com/phf/go-queue v0.0.0-20170504031614-9abe38d0371d // indirect @@ -139,6 +121,7 @@ require ( github.com/sirupsen/logrus v1.9.3 // indirect github.com/sosodev/duration v1.3.1 // indirect github.com/spf13/cast v1.7.1 // indirect + github.com/stretchr/objx v0.5.2 // indirect github.com/tidwall/match v1.1.1 // indirect github.com/tidwall/pretty v1.2.1 // indirect github.com/tidwall/sjson v1.2.5 // indirect @@ -149,9 +132,7 @@ require ( github.com/urfave/cli/v2 v2.27.5 // indirect github.com/vektah/gqlparser/v2 v2.5.21 // indirect github.com/wundergraph/astjson v0.0.0-20250106123708-be463c97e083 // indirect - github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb // indirect - github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 // indirect - github.com/xeipuuv/gojsonschema v1.2.0 // indirect + github.com/wundergraph/graphql-go-tools/v2 v2.0.0-rc.181 // indirect github.com/xrash/smetrics v0.0.0-20240521201337-686a1a2994c1 // indirect github.com/yosida95/uritemplate/v3 v3.0.2 // indirect github.com/yusufpapurcu/wmi v1.2.4 // indirect @@ -182,7 +163,6 @@ require ( google.golang.org/genproto/googleapis/rpc v0.0.0-20250115164207-1a7da9e5054f // indirect google.golang.org/grpc v1.68.1 // indirect gopkg.in/cenkalti/backoff.v1 v1.1.0 // indirect - gopkg.in/yaml.v2 v2.4.0 // indirect nhooyr.io/websocket v1.8.11 // indirect ) diff --git a/router-tests/go.sum b/router-tests/go.sum index d795a6fa6e..02b540282d 100644 --- a/router-tests/go.sum +++ b/router-tests/go.sum @@ -1,13 +1,7 @@ connectrpc.com/connect v1.16.2 h1:ybd6y+ls7GOlb7Bh5C8+ghA6SvCBajHwxssO2CGFjqE= connectrpc.com/connect v1.16.2/go.mod h1:n2kgwskMHXC+lVqb18wngEpF95ldBHXjZYJussz5FRc= -dario.cat/mergo v1.0.0 h1:AGCNq9Evsj31mOgNPcLyXc+4PNABt905YmuqPYYpBWk= -dario.cat/mergo v1.0.0/go.mod h1:uNxQE+84aUszobStD9th8a29P2fMDhsBdgRYvZOxGmk= -filippo.io/edwards25519 v1.1.0 h1:FNf4tywRC1HmFuKW5xopWpigGjJKiJSV0Cqo0cJWDaA= -filippo.io/edwards25519 v1.1.0/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4= github.com/99designs/gqlgen v0.17.63 h1:HCdaYDPd9HqUXRchEvmE3EFzELRwLlaJ8DBuyC8Cqto= github.com/99designs/gqlgen v0.17.63/go.mod h1:sVCM2iwIZisJjTI/DEC3fpH+HFgxY1496ZJ+jbT9IjA= -github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161 h1:L/gRVlceqvL25UVaW/CKtUDjefjrs0SPonmDGUVOYP0= -github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/KimMachineGun/automemlimit v0.6.1 h1:ILa9j1onAAMadBsyyUJv5cack8Y1WT26yLj/V+ulKp8= github.com/KimMachineGun/automemlimit v0.6.1/go.mod h1:T7xYht7B8r6AG/AqFcUdc7fzd2bIdBKmepfP2S1svPY= @@ -15,10 +9,6 @@ github.com/MicahParks/jwkset v0.9.0 h1:xDlGu6mZJdJ+mgAI4mIRqWm2p8Vrx0U98LMgRObw4 github.com/MicahParks/jwkset v0.9.0/go.mod h1:fVrj6TmG1aKlJEeceAz7JsXGTXEn72zP1px3us53JrA= github.com/MicahParks/keyfunc/v3 v3.3.5 h1:7ceAJLUAldnoueHDNzF8Bx06oVcQ5CfJnYwNt1U3YYo= github.com/MicahParks/keyfunc/v3 v3.3.5/go.mod h1:SdCCyMJn/bYqWDvARspC6nCT8Sk74MjuAY22C7dCST8= -github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY= -github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU= -github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5 h1:TngWCqHvy9oXAN6lEVMRuU21PR1EtLVZJmdB18Gu3Rw= -github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5/go.mod h1:lmUJ/7eu/Q8D7ML55dXQrVaamCz2vxCfdQBasLZfHKk= github.com/PuerkitoBio/goquery v1.9.3 h1:mpJr/ikUA9/GNJB/DBZcGeFDXUtosHRyRrwh7KGdTG0= github.com/PuerkitoBio/goquery v1.9.3/go.mod h1:1ndLHPdTz+DyQPICCWYlYQMPl0oXZj0G6D4LCYA6u4U= github.com/agnivade/levenshtein v1.2.0 h1:U9L4IOT0Y3i0TIlUIDJ7rVUziKi/zPbrJGaFrtYH3SY= @@ -61,14 +51,10 @@ github.com/coder/websocket v1.8.12 h1:5bUXkEPPIbewrnkU8LTCLVaxi4N4J8ahufH2vlo4NA github.com/coder/websocket v1.8.12/go.mod h1:LNVeNrXQZfe5qhS9ALED3uA+l5pPqvwXg3CKoDBB2gs= github.com/containerd/cgroups/v3 v3.0.2 h1:f5WFqIVSgo5IZmtTT3qVBo6TzI1ON6sycSBKkymb9L0= github.com/containerd/cgroups/v3 v3.0.2/go.mod h1:JUgITrzdFqp42uI2ryGA+ge0ap/nxzYgkGmIcetmErE= -github.com/containerd/continuity v0.4.5 h1:ZRoN1sXq9u7V6QoHMcVWGhOwDFqZ4B9i5H6un1Wh0x4= -github.com/containerd/continuity v0.4.5/go.mod h1:/lNJvtJKUQStBzpVQ1+rasXO1LAWtUQssk28EZvJ3nE= github.com/coreos/go-systemd/v22 v22.5.0 h1:RrqgGjYQKalulkV8NGVIfkXQf6YYmOyiJKk8iXXhfZs= github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= github.com/cpuguy83/go-md2man/v2 v2.0.5 h1:ZtcqGrnekaHpVLArFSe4HK5DoKx1T0rq2DwVB0alcyc= github.com/cpuguy83/go-md2man/v2 v2.0.5/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= -github.com/creack/pty v1.1.18 h1:n56/Zwd5o6whRC5PMGretI4IdRLlmBXYNjScPaBgsbY= -github.com/creack/pty v1.1.18/go.mod h1:MOBLtS5ELjhRRrroQr9kyvTxUAFNvYEK993ew/Vr4O4= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= @@ -83,12 +69,6 @@ github.com/dgryski/trifles v0.0.0-20230903005119-f50d829f2e54 h1:SG7nF6SRlWhcT7c github.com/dgryski/trifles v0.0.0-20230903005119-f50d829f2e54/go.mod h1:if7Fbed8SFyPtHLHbg49SI7NAdJiC5WIA09pe59rfAA= github.com/dlclark/regexp2 v1.11.0 h1:G/nrcoOa7ZXlpoa/91N3X7mM3r8eIlMBBJZvsz/mxKI= github.com/dlclark/regexp2 v1.11.0/go.mod h1:DHkYz0B9wPfa6wondMfaivmHpzrQ3v9q8cnmRbL6yW8= -github.com/docker/cli v27.4.1+incompatible h1:VzPiUlRJ/xh+otB75gva3r05isHMo5wXDfPRi5/b4hI= -github.com/docker/cli v27.4.1+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= -github.com/docker/docker v27.1.1+incompatible h1:hO/M4MtV36kzKldqnA37IWhebRA+LnqqcqDja6kVaKY= -github.com/docker/docker v27.1.1+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= -github.com/docker/go-connections v0.5.0 h1:USnMq7hx7gwdVZq1L49hLXaFtUdTADjXGp+uj1Br63c= -github.com/docker/go-connections v0.5.0/go.mod h1:ov60Kzw0kKElRwhNs9UlUHAE/F9Fe6GLaXnqyDdmEXc= github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4= github.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY= @@ -117,8 +97,6 @@ github.com/go-quicktest/qt v1.101.0 h1:O1K29Txy5P2OK0dGo59b7b0LR6wKfIhttaAhHUyn7 github.com/go-quicktest/qt v1.101.0/go.mod h1:14Bz/f7NwaXPtdYEgzsx46kqSxVwTbzVZsDC26tQJow= github.com/go-redis/redis_rate/v10 v10.0.1 h1:calPxi7tVlxojKunJwQ72kwfozdy25RjA0bCj1h0MUo= github.com/go-redis/redis_rate/v10 v10.0.1/go.mod h1:EMiuO9+cjRkR7UvdvwMO7vbgqJkltQHtwbdIQvaBKIU= -github.com/go-sql-driver/mysql v1.8.1 h1:LedoTUt/eveggdHS9qUFC1EFSa8bU2+1pZjSRpvNJ1Y= -github.com/go-sql-driver/mysql v1.8.1/go.mod h1:wEBSXgmK//2ZFJyE+qWnIsVGmvmEKlqwuVSjsCm7DZg= github.com/go-viper/mapstructure/v2 v2.2.1 h1:ZAaOCxANMuZx5RCeg0mBdEZk7DZasvvZIxtHqx8aGss= github.com/go-viper/mapstructure/v2 v2.2.1/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM= github.com/gobwas/httphead v0.1.0 h1:exrUm0f4YX0L7EBwZHuCF4GDp8aJfVeBrlLQrs6NqWU= @@ -134,8 +112,6 @@ github.com/goccy/go-yaml v1.17.1/go.mod h1:XBurs7gK8ATbW4ZPGKgcbrY1Br56PdM69F7Lk github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/godbus/dbus/v5 v5.1.0 h1:4KLkAxT3aOY8Li4FRJe/KvhoNFFxo0m6fNuFUO8QJUk= github.com/godbus/dbus/v5 v5.1.0/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= -github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= -github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= github.com/golang-jwt/jwt/v5 v5.2.2 h1:Rl4B7itRWVtYIHFrSNd7vhTiz9UpLdi6gZhZ3wEeDy8= github.com/golang-jwt/jwt/v5 v5.2.2/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk= github.com/golang/mock v1.6.0 h1:ErTB+efbowRARo13NNdxyJji2egdxLGQhRaY+DUumQc= @@ -147,8 +123,6 @@ github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeN github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= -github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 h1:El6M4kTTCOh6aBiKaUGG7oYTSPP8MxqL4YI3kZKwcP4= -github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510/go.mod h1:pupxD2MaaD3pAXIBCelhxNneeOaAeabZDe5s4K6zSpQ= github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/gorilla/websocket v1.5.1 h1:gmztn0JnHVt9JZquRuzLw3g4wouNVzKL15iLr/zn/QY= @@ -190,7 +164,6 @@ github.com/jsimonetti/rtnetlink/v2 v2.0.1 h1:xda7qaHDSVOsADNouv7ukSuicKZO7GgVUCX github.com/jsimonetti/rtnetlink/v2 v2.0.1/go.mod h1:7MoNYNbb3UaDHtF8udiJo/RH6VsTKP1pqKLUTVCvToE= github.com/kingledion/go-tools v0.6.0 h1:y8C/4mWoHgLkO45dB+Y/j0o4Y4WUB5lDTAcMPMtFpTg= github.com/kingledion/go-tools v0.6.0/go.mod h1:qcDJQxBui/H/hterGb90GMlLs9Yi7QrwaJL8OGdbsms= -github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/klauspost/compress v1.17.9 h1:6KIumPrER1LHsvBVuDa0r5xaG0Es51mhhB9BQB2qeMA= github.com/klauspost/compress v1.17.9/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw= @@ -207,8 +180,6 @@ github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc= github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= -github.com/lib/pq v1.10.9 h1:YXG7RB+JIjhP29X+OtkiDnYaXQwpS4JEWq7dtCCRUEw= -github.com/lib/pq v1.10.9/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= github.com/logrusorgru/aurora/v4 v4.0.0 h1:sRjfPpun/63iADiSvGGjgA1cAYegEWMPCJdUpJYn9JA= github.com/logrusorgru/aurora/v4 v4.0.0/go.mod h1:lP0iIa2nrnT/qoFXcOZSrZQpJ1o6n2CUf/hyHi2Q4ZQ= github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 h1:6E+4a0GO5zZEnZ81pIr0yLvtUWk2if982qA3F3QD6H4= @@ -234,12 +205,6 @@ github.com/minio/minio-go/v7 v7.0.74 h1:fTo/XlPBTSpo3BAMshlwKL5RspXRv9us5UeHEGYC github.com/minio/minio-go/v7 v7.0.74/go.mod h1:qydcVzV8Hqtj1VtEocfxbmVFa2siu6HGa+LDEPogjD8= github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= -github.com/moby/docker-image-spec v1.3.1 h1:jMKff3w6PgbfSa69GfNg+zN/XLhfXJGnEx3Nl2EsFP0= -github.com/moby/docker-image-spec v1.3.1/go.mod h1:eKmb5VW8vQEh/BAr2yvVNvuiJuY6UIocYsFu/DxxRpo= -github.com/moby/sys/user v0.3.0 h1:9ni5DlcW5an3SvRSx4MouotOygvzaXbaSrc/wGDFWPo= -github.com/moby/sys/user v0.3.0/go.mod h1:bG+tYYYJgaMtRKgEmuueC0hJEAZWwtIbZTB+85uoHjs= -github.com/moby/term v0.5.0 h1:xt8Q1nalod/v7BqbG21f8mQPqH+xAaC9C3N3wfWbVP0= -github.com/moby/term v0.5.0/go.mod h1:8FzsFHVUBGZdbDsJw/ot+X+d5HLUbvklYLJ9uGfcI3Y= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= github.com/nats-io/nats.go v1.35.0 h1:XFNqNM7v5B+MQMKqVGAyHwYhyKb48jrenXNxIU20ULk= @@ -250,16 +215,8 @@ github.com/nats-io/nuid v1.0.1 h1:5iA8DT8V7q8WK2EScv2padNa/rTESc1KdnPw4TC2paw= github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c= github.com/oklog/run v1.0.0 h1:Ru7dDtJNOyC66gQ5dQmaCa0qIsAUFY3sFpK1Xk8igrw= github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA= -github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= -github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= -github.com/opencontainers/image-spec v1.1.0 h1:8SG7/vwALn54lVB/0yZ/MMwhFrPYtpEHQb2IpWsCzug= -github.com/opencontainers/image-spec v1.1.0/go.mod h1:W4s4sFTMaBeK1BQLXbG4AdM2szdn85PY75RI83NrTrM= -github.com/opencontainers/runc v1.2.3 h1:fxE7amCzfZflJO2lHXf4y/y8M1BoAqp+FVmG19oYB80= -github.com/opencontainers/runc v1.2.3/go.mod h1:nSxcWUydXrsBZVYNSkTjoQ/N6rcyTtn+1SD5D4+kRIM= github.com/opencontainers/runtime-spec v1.2.0 h1:z97+pHb3uELt/yiAWD691HNHQIF07bE7dzrbT927iTk= github.com/opencontainers/runtime-spec v1.2.0/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= -github.com/ory/dockertest/v3 v3.12.0 h1:3oV9d0sDzlSQfHtIaB5k6ghUCVMVLpAY8hwrqoCyRCw= -github.com/ory/dockertest/v3 v3.12.0/go.mod h1:aKNDTva3cp8dwOWwb9cWuX84aH5akkxXRvO7KCwWVjE= github.com/pbnjay/memory v0.0.0-20210728143218-7b4eea64cf58 h1:onHthvaw9LFnH4t2DcNVpwGmV9E1BkGknEliJkfwQj0= github.com/pbnjay/memory v0.0.0-20210728143218-7b4eea64cf58/go.mod h1:DXv8WO4yhMYhSNPKjeNKa5WY9YCIEBRbNzFFPJbWO6Y= github.com/phf/go-queue v0.0.0-20170504031614-9abe38d0371d h1:U+PMnTlV2tu7RuMK5etusZG3Cf+rpow5hqQByeCzJ2g= @@ -323,6 +280,7 @@ github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+ github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= +github.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY= github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= @@ -368,19 +326,10 @@ github.com/wundergraph/consul/sdk v0.0.0-20250204115147-ed842a8fd301 h1:EzfKHQoT github.com/wundergraph/consul/sdk v0.0.0-20250204115147-ed842a8fd301/go.mod h1:wxI0Nak5dI5RvJuzGyiEK4nZj0O9X+Aw6U0tC1wPKq0= github.com/wundergraph/graphql-go-tools/v2 v2.0.0-rc.181 h1:OOWS4e7T3MLDXAk68AQxx33v/7Ybx90Ifvz3R9VqDYY= github.com/wundergraph/graphql-go-tools/v2 v2.0.0-rc.181/go.mod h1:8N4c4JRDknFdph84ZCcHxgNBjnW7f3aiIycmpG/IhCc= -github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= -github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb h1:zGWFAtiMcyryUHoUjUJX0/lt1H2+i2Ka2n+D3DImSNo= -github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= -github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 h1:EzJWgHovont7NscjpAxXsDA8S8BMYve8Y5+7cuRE7R0= -github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ= -github.com/xeipuuv/gojsonschema v1.2.0 h1:LhYJRs+L4fBtjZUfuSZIKGeVu0QRy8e5Xi7D17UxZ74= -github.com/xeipuuv/gojsonschema v1.2.0/go.mod h1:anYRn/JVcOK2ZgGU+IjEV4nwlhoK5sQluxsYJ78Id3Y= github.com/xrash/smetrics v0.0.0-20240521201337-686a1a2994c1 h1:gEOO8jv9F4OT7lGCjxCBTO/36wtF6j2nSip77qHd4x4= github.com/xrash/smetrics v0.0.0-20240521201337-686a1a2994c1/go.mod h1:Ohn+xnUBiLI6FVj/9LpzZWtj1/D6lUovWYBkxHVV3aM= github.com/yosida95/uritemplate/v3 v3.0.2 h1:Ed3Oyj9yrmi9087+NczuL5BwkIc4wvTb5zIM+UJPGz4= github.com/yosida95/uritemplate/v3 v3.0.2/go.mod h1:ILOh0sOhIJR3+L/8afwt/kE++YT040gmv5BQTMR2HP4= -github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/gopher-lua v1.1.1 h1:kYKnWBjvbNP4XLT3+bPEwAXJx262OhaHDWDVOPjL46M= github.com/yuin/gopher-lua v1.1.1/go.mod h1:GBR0iDaNXjAgGg9zfCvksxSRnQx76gclCIb7kdAd1Pw= github.com/yusufpapurcu/wmi v1.2.4 h1:zFUKzehAFReQwLys1b/iSMl+JQGSCSjtVqQn9bBrPo0= @@ -435,29 +384,21 @@ go.withmatt.com/connect-brotli v0.4.0 h1:7ObWkYmEbUXK3EKglD0Lgj0BBnnD3jNdAxeDRct go.withmatt.com/connect-brotli v0.4.0/go.mod h1:c2eELz56za+/Mxh1yJrlglZ4VM9krpOCPqS2Vxf8NVk= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.35.0 h1:b15kiHdrGCHrP6LvwaQ3c03kgNhhiMgvlhxHQhmg2Xs= golang.org/x/crypto v0.35.0/go.mod h1:dy7dXNW32cAb/6/PRuTNsix8T+vJAqvuIy5Bli/x0YQ= golang.org/x/exp v0.0.0-20240613232115-7f521ea00fb8 h1:yixxcjnhBmY0nkL253HFVIm0JsFHwrHdT3Yh6szTnfY= golang.org/x/exp v0.0.0-20240613232115-7f521ea00fb8/go.mod h1:jj3sYF3dwk5D+ghuXyeI3r5MFf+NT2An6/9dOA95KSI= golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= -golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.20.0 h1:utOm6MM3R3dnawAiJgn0y+xvuYRsm1RKM/4giyfDgV0= golang.org/x/mod v0.20.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20191116160921-f9c825593386/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.34.0 h1:Mb7Mrk043xzHgnRM88suvJFwzVrRfHEHJEl5/71CKw0= golang.org/x/net v0.34.0/go.mod h1:di0qlW3YNM5oh6GqDGQr92MyTozJPmybPK4Ev/Gm31k= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.11.0 h1:GGz8+XQP4FvTTrjZPzNKTMFtSXH80RAzG+5ghFPgK9w= golang.org/x/sync v0.11.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -466,9 +407,7 @@ golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201204225414-ed752295db88/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220503163025-988cb79eb6c6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -482,25 +421,18 @@ golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.30.0 h1:QjkSwP/36a20jFYWkSue1YwXzLmsV5Gfq7Eiy72C1uc= golang.org/x/sys v0.30.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.22.0 h1:bofq7m3/HAFvbF51jz3Q9wLg3jkvSPuiZu/pD1XwgtM= golang.org/x/text v0.22.0/go.mod h1:YRoo4H8PVmsu+E3Ou7cqLVH8oXWIHVoX0jqUWALQhfY= golang.org/x/time v0.9.0 h1:EsRrnYcQiGH+5FfbgvV4AP7qEZstoyrHB0DzarOQ4ZY= golang.org/x/time v0.9.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= -golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.24.0 h1:J1shsA93PJUEVaUSaay7UXAyE8aimq3GW0pjlolpa24= golang.org/x/tools v0.24.0/go.mod h1:YhNqVBIfWHdzvTLs0d8LCuMhkKUgSUKldakyV7W/WDQ= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= gonum.org/v1/gonum v0.14.0 h1:2NiG67LD1tEH0D7kM+ps2V+fXmsAnpUeec7n8tcr4S0= gonum.org/v1/gonum v0.14.0/go.mod h1:AoWeoz0becf9QMWtE8iWXNXc27fK4fNeHNf/oMejGfU= google.golang.org/genproto/googleapis/api v0.0.0-20250106144421-5f5ef82da422 h1:GVIKPyP/kLIyVOgOnTwFOrvQaQUzOzGMCxgFUOEmm24= @@ -520,13 +452,10 @@ gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntN gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gotest.tools/v3 v3.5.1 h1:EENdUnS3pdur5nybKYIh2Vfgc8IUNBjxDPSjtiJcOzU= -gotest.tools/v3 v3.5.1/go.mod h1:isy3WKz7GK6uNw/sbHzfKBLvlvXwUyV06n6brMxxopU= honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= nhooyr.io/websocket v1.8.11 h1:f/qXNc2/3DpoSZkHt1DQu6rj4zGC8JmkkLkWss0MgN0= nhooyr.io/websocket v1.8.11/go.mod h1:rN9OFWIUwuxg4fR5tELlYC04bXYowCP9GX47ivo2l+c= From d5c19d85492bb440155bbb641774130f270b82a9 Mon Sep 17 00:00:00 2001 From: Alessandro Pagnin Date: Wed, 28 May 2025 17:22:05 +0200 Subject: [PATCH 084/126] chore: avoid duplicated code inside BuildProvidersAndDataSources, restored logic to only initialize providers that are used --- router/pkg/config/config.go | 8 +++ router/pkg/pubsub/pubsub.go | 121 ++++++++++++++++++++++-------------- 2 files changed, 82 insertions(+), 47 deletions(-) diff --git a/router/pkg/config/config.go b/router/pkg/config/config.go index 3cf5a79b0c..2edfa8d718 100644 --- a/router/pkg/config/config.go +++ b/router/pkg/config/config.go @@ -513,6 +513,10 @@ type NatsEventSource struct { Authentication *NatsAuthentication `yaml:"authentication,omitempty"` } +func (n NatsEventSource) GetID() string { + return n.ID +} + type KafkaSASLPlainAuthentication struct { Password *string `yaml:"password,omitempty"` Username *string `yaml:"username,omitempty"` @@ -533,6 +537,10 @@ type KafkaEventSource struct { TLS *KafkaTLSConfiguration `yaml:"tls,omitempty"` } +func (k KafkaEventSource) GetID() string { + return k.ID +} + type EventProviders struct { Nats []NatsEventSource `yaml:"nats,omitempty"` Kafka []KafkaEventSource `yaml:"kafka,omitempty"` diff --git a/router/pkg/pubsub/pubsub.go b/router/pkg/pubsub/pubsub.go index 1a6a287181..4cb5d3f06d 100644 --- a/router/pkg/pubsub/pubsub.go +++ b/router/pkg/pubsub/pubsub.go @@ -20,9 +20,18 @@ type DataSourceConfigurationWithMetadata struct { Metadata *plan.DataSourceMetadata } +type GetID interface { + GetID() string +} + +type GetEngineEventConfiguration interface { + GetEngineEventConfiguration() *nodev1.EngineEventConfiguration +} + type EngineEventConfiguration interface { GetTypeName() string GetFieldName() string + GetProviderId() string } type ProviderNotDefinedError struct { @@ -30,6 +39,11 @@ type ProviderNotDefinedError struct { ProviderTypeID string } +type dsConfAndEvents[E GetEngineEventConfiguration] struct { + dsConf *DataSourceConfigurationWithMetadata + events []E +} + func (e *ProviderNotDefinedError) Error() string { return fmt.Sprintf("%s provider with ID %s is not defined", e.ProviderTypeID, e.ProviderID) } @@ -49,75 +63,88 @@ func BuildProvidersAndDataSources( // Initialize Kafka providers and data sources kafkaBuilder := kafka.NewPubSubProviderBuilder(ctx, logger, hostName, routerListenAddr) - kafkaProviderIds := []string{} - for _, providerData := range config.Providers.Kafka { - provider, err := kafkaBuilder.BuildProvider(providerData) - if err != nil { - return nil, nil, err - } - pubSubProviders = append(pubSubProviders, provider) - kafkaProviderIds = append(kafkaProviderIds, providerData.ID) + kafkaDsConfsWithEvents := []dsConfAndEvents[*nodev1.KafkaEventConfiguration]{} + for _, dsConf := range dsConfs { + kafkaDsConfsWithEvents = append(kafkaDsConfsWithEvents, dsConfAndEvents[*nodev1.KafkaEventConfiguration]{ + dsConf: &dsConf, + events: dsConf.Configuration.GetCustomEvents().GetKafka(), + }) + } + kafkaPubSubProviders, kafkaOuts, err := buildProvidersAndDataSources(ctx, kafkaBuilder, config.Providers.Kafka, kafkaDsConfsWithEvents) + if err != nil { + return nil, nil, err } + pubSubProviders = append(pubSubProviders, kafkaPubSubProviders...) + outs = append(outs, kafkaOuts...) + + // initialize NATS providers and data sources + natsBuilder := nats.NewPubSubProviderBuilder(ctx, logger, hostName, routerListenAddr) + natsDsConfsWithEvents := []dsConfAndEvents[*nodev1.NatsEventConfiguration]{} for _, dsConf := range dsConfs { - for _, event := range dsConf.Configuration.GetCustomEvents().GetKafka() { - if !slices.Contains(kafkaProviderIds, event.GetEngineEventConfiguration().GetProviderId()) { - return pubSubProviders, nil, &ProviderNotDefinedError{ - ProviderID: event.GetEngineEventConfiguration().GetProviderId(), - ProviderTypeID: kafkaBuilder.TypeID(), - } - } - } + natsDsConfsWithEvents = append(natsDsConfsWithEvents, dsConfAndEvents[*nodev1.NatsEventConfiguration]{ + dsConf: &dsConf, + events: dsConf.Configuration.GetCustomEvents().GetNats(), + }) + } + natsPubSubProviders, natsOuts, err := buildProvidersAndDataSources(ctx, natsBuilder, config.Providers.Nats, natsDsConfsWithEvents) + if err != nil { + return nil, nil, err } + pubSubProviders = append(pubSubProviders, natsPubSubProviders...) + outs = append(outs, natsOuts...) + + return pubSubProviders, outs, nil +} + +func buildProvidersAndDataSources[P GetID, E GetEngineEventConfiguration](ctx context.Context, builder pubsub_datasource.PubSubProviderBuilder[P, E], providersData []P, dsConfs []dsConfAndEvents[E]) ([]pubsub_datasource.PubSubProvider, []plan.DataSource, error) { + var pubSubProviders []pubsub_datasource.PubSubProvider + var outs []plan.DataSource + + // check used providers + usedProviderIds := []string{} for _, dsConf := range dsConfs { - for i, event := range dsConf.Configuration.GetCustomEvents().GetKafka() { - pubSubDataSource, err := kafkaBuilder.BuildDataSource(event) - if err != nil { - return nil, nil, err + for _, event := range dsConf.events { + if !slices.Contains(usedProviderIds, event.GetEngineEventConfiguration().GetProviderId()) { + usedProviderIds = append(usedProviderIds, event.GetEngineEventConfiguration().GetProviderId()) } - out, err := plan.NewDataSourceConfiguration( - dsConf.Configuration.Id+"-"+kafkaBuilder.TypeID()+"-"+strconv.Itoa(i), - pubsub_datasource.NewFactory(ctx, pubSubDataSource), - getFilteredDataSourceMetadata(event.GetEngineEventConfiguration(), dsConf.Metadata), - pubSubDataSource, - ) - if err != nil { - return nil, nil, err - } - outs = append(outs, out) } } - // Initialize NATS providers and data sources - natsBuilder := nats.NewPubSubProviderBuilder(ctx, logger, hostName, routerListenAddr) - natsProviderIds := []string{} - for _, providerData := range config.Providers.Nats { - provider, err := natsBuilder.BuildProvider(providerData) + // initialize providers if used + providerIds := []string{} + for _, providerData := range providersData { + if !slices.Contains(usedProviderIds, providerData.GetID()) { + continue + } + provider, err := builder.BuildProvider(providerData) if err != nil { return nil, nil, err } pubSubProviders = append(pubSubProviders, provider) - natsProviderIds = append(natsProviderIds, providerData.ID) + providerIds = append(providerIds, provider.ID()) } - for _, dsConf := range dsConfs { - for _, event := range dsConf.Configuration.GetCustomEvents().GetNats() { - if !slices.Contains(natsProviderIds, event.GetEngineEventConfiguration().GetProviderId()) { - return pubSubProviders, nil, &ProviderNotDefinedError{ - ProviderID: event.GetEngineEventConfiguration().GetProviderId(), - ProviderTypeID: natsBuilder.TypeID(), - } + + // check if all used providers are initialized + for _, providerId := range usedProviderIds { + if !slices.Contains(providerIds, providerId) { + return pubSubProviders, nil, &ProviderNotDefinedError{ + ProviderID: providerId, + ProviderTypeID: builder.TypeID(), } } } + + // build data sources for each event for _, dsConf := range dsConfs { - for i, event := range dsConf.Configuration.GetCustomEvents().GetNats() { - pubSubDataSource, err := natsBuilder.BuildDataSource(event) + for i, event := range dsConf.events { + pubSubDataSource, err := builder.BuildDataSource(event) if err != nil { return nil, nil, err } out, err := plan.NewDataSourceConfiguration( - dsConf.Configuration.Id+"-"+natsBuilder.TypeID()+"-"+strconv.Itoa(i), + dsConf.dsConf.Configuration.Id+"-"+builder.TypeID()+"-"+strconv.Itoa(i), pubsub_datasource.NewFactory(ctx, pubSubDataSource), - getFilteredDataSourceMetadata(event.GetEngineEventConfiguration(), dsConf.Metadata), + getFilteredDataSourceMetadata(event.GetEngineEventConfiguration(), dsConf.dsConf.Metadata), pubSubDataSource, ) if err != nil { From 8f29bf05d2302e08f1b34ab7d971ea2835ea0650 Mon Sep 17 00:00:00 2001 From: Alessandro Pagnin Date: Thu, 29 May 2025 09:32:34 +0200 Subject: [PATCH 085/126] chore: add mock implementations for PubSubProvider and PubSubDataSource, and add tests of build method --- router/.mockery.yml | 3 + router/pkg/pubsub/datasource/mocks.go | 758 ++++++++++++++++++++++++++ router/pkg/pubsub/pubsub.go | 6 +- router/pkg/pubsub/pubsub_test.go | 299 ++++++++++ 4 files changed, 1063 insertions(+), 3 deletions(-) diff --git a/router/.mockery.yml b/router/.mockery.yml index 97021c4b66..0ebdb2b876 100644 --- a/router/.mockery.yml +++ b/router/.mockery.yml @@ -14,6 +14,9 @@ packages: github.com/wundergraph/cosmo/router/pkg/pubsub/datasource: interfaces: Lifecycle: + PubSubProviderBuilder: + PubSubDataSource: + PubSubProvider: github.com/wundergraph/cosmo/router/pkg/pubsub/nats: interfaces: AdapterInterface: diff --git a/router/pkg/pubsub/datasource/mocks.go b/router/pkg/pubsub/datasource/mocks.go index 23d8351b2d..4eb4f0ba44 100644 --- a/router/pkg/pubsub/datasource/mocks.go +++ b/router/pkg/pubsub/datasource/mocks.go @@ -8,8 +8,354 @@ import ( "context" mock "github.com/stretchr/testify/mock" + "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/resolve" ) +// NewMockPubSubDataSource creates a new instance of MockPubSubDataSource. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations. +// The first argument is typically a *testing.T value. +func NewMockPubSubDataSource(t interface { + mock.TestingT + Cleanup(func()) +}) *MockPubSubDataSource { + mock := &MockPubSubDataSource{} + mock.Mock.Test(t) + + t.Cleanup(func() { mock.AssertExpectations(t) }) + + return mock +} + +// MockPubSubDataSource is an autogenerated mock type for the PubSubDataSource type +type MockPubSubDataSource struct { + mock.Mock +} + +type MockPubSubDataSource_Expecter struct { + mock *mock.Mock +} + +func (_m *MockPubSubDataSource) EXPECT() *MockPubSubDataSource_Expecter { + return &MockPubSubDataSource_Expecter{mock: &_m.Mock} +} + +// GetFieldName provides a mock function for the type MockPubSubDataSource +func (_mock *MockPubSubDataSource) GetFieldName() string { + ret := _mock.Called() + + if len(ret) == 0 { + panic("no return value specified for GetFieldName") + } + + var r0 string + if returnFunc, ok := ret.Get(0).(func() string); ok { + r0 = returnFunc() + } else { + r0 = ret.Get(0).(string) + } + return r0 +} + +// MockPubSubDataSource_GetFieldName_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'GetFieldName' +type MockPubSubDataSource_GetFieldName_Call struct { + *mock.Call +} + +// GetFieldName is a helper method to define mock.On call +func (_e *MockPubSubDataSource_Expecter) GetFieldName() *MockPubSubDataSource_GetFieldName_Call { + return &MockPubSubDataSource_GetFieldName_Call{Call: _e.mock.On("GetFieldName")} +} + +func (_c *MockPubSubDataSource_GetFieldName_Call) Run(run func()) *MockPubSubDataSource_GetFieldName_Call { + _c.Call.Run(func(args mock.Arguments) { + run() + }) + return _c +} + +func (_c *MockPubSubDataSource_GetFieldName_Call) Return(s string) *MockPubSubDataSource_GetFieldName_Call { + _c.Call.Return(s) + return _c +} + +func (_c *MockPubSubDataSource_GetFieldName_Call) RunAndReturn(run func() string) *MockPubSubDataSource_GetFieldName_Call { + _c.Call.Return(run) + return _c +} + +// ResolveDataSource provides a mock function for the type MockPubSubDataSource +func (_mock *MockPubSubDataSource) ResolveDataSource() (resolve.DataSource, error) { + ret := _mock.Called() + + if len(ret) == 0 { + panic("no return value specified for ResolveDataSource") + } + + var r0 resolve.DataSource + var r1 error + if returnFunc, ok := ret.Get(0).(func() (resolve.DataSource, error)); ok { + return returnFunc() + } + if returnFunc, ok := ret.Get(0).(func() resolve.DataSource); ok { + r0 = returnFunc() + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(resolve.DataSource) + } + } + if returnFunc, ok := ret.Get(1).(func() error); ok { + r1 = returnFunc() + } else { + r1 = ret.Error(1) + } + return r0, r1 +} + +// MockPubSubDataSource_ResolveDataSource_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ResolveDataSource' +type MockPubSubDataSource_ResolveDataSource_Call struct { + *mock.Call +} + +// ResolveDataSource is a helper method to define mock.On call +func (_e *MockPubSubDataSource_Expecter) ResolveDataSource() *MockPubSubDataSource_ResolveDataSource_Call { + return &MockPubSubDataSource_ResolveDataSource_Call{Call: _e.mock.On("ResolveDataSource")} +} + +func (_c *MockPubSubDataSource_ResolveDataSource_Call) Run(run func()) *MockPubSubDataSource_ResolveDataSource_Call { + _c.Call.Run(func(args mock.Arguments) { + run() + }) + return _c +} + +func (_c *MockPubSubDataSource_ResolveDataSource_Call) Return(dataSource resolve.DataSource, err error) *MockPubSubDataSource_ResolveDataSource_Call { + _c.Call.Return(dataSource, err) + return _c +} + +func (_c *MockPubSubDataSource_ResolveDataSource_Call) RunAndReturn(run func() (resolve.DataSource, error)) *MockPubSubDataSource_ResolveDataSource_Call { + _c.Call.Return(run) + return _c +} + +// ResolveDataSourceInput provides a mock function for the type MockPubSubDataSource +func (_mock *MockPubSubDataSource) ResolveDataSourceInput(event []byte) (string, error) { + ret := _mock.Called(event) + + if len(ret) == 0 { + panic("no return value specified for ResolveDataSourceInput") + } + + var r0 string + var r1 error + if returnFunc, ok := ret.Get(0).(func([]byte) (string, error)); ok { + return returnFunc(event) + } + if returnFunc, ok := ret.Get(0).(func([]byte) string); ok { + r0 = returnFunc(event) + } else { + r0 = ret.Get(0).(string) + } + if returnFunc, ok := ret.Get(1).(func([]byte) error); ok { + r1 = returnFunc(event) + } else { + r1 = ret.Error(1) + } + return r0, r1 +} + +// MockPubSubDataSource_ResolveDataSourceInput_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ResolveDataSourceInput' +type MockPubSubDataSource_ResolveDataSourceInput_Call struct { + *mock.Call +} + +// ResolveDataSourceInput is a helper method to define mock.On call +// - event []byte +func (_e *MockPubSubDataSource_Expecter) ResolveDataSourceInput(event interface{}) *MockPubSubDataSource_ResolveDataSourceInput_Call { + return &MockPubSubDataSource_ResolveDataSourceInput_Call{Call: _e.mock.On("ResolveDataSourceInput", event)} +} + +func (_c *MockPubSubDataSource_ResolveDataSourceInput_Call) Run(run func(event []byte)) *MockPubSubDataSource_ResolveDataSourceInput_Call { + _c.Call.Run(func(args mock.Arguments) { + var arg0 []byte + if args[0] != nil { + arg0 = args[0].([]byte) + } + run( + arg0, + ) + }) + return _c +} + +func (_c *MockPubSubDataSource_ResolveDataSourceInput_Call) Return(s string, err error) *MockPubSubDataSource_ResolveDataSourceInput_Call { + _c.Call.Return(s, err) + return _c +} + +func (_c *MockPubSubDataSource_ResolveDataSourceInput_Call) RunAndReturn(run func(event []byte) (string, error)) *MockPubSubDataSource_ResolveDataSourceInput_Call { + _c.Call.Return(run) + return _c +} + +// ResolveDataSourceSubscription provides a mock function for the type MockPubSubDataSource +func (_mock *MockPubSubDataSource) ResolveDataSourceSubscription() (resolve.SubscriptionDataSource, error) { + ret := _mock.Called() + + if len(ret) == 0 { + panic("no return value specified for ResolveDataSourceSubscription") + } + + var r0 resolve.SubscriptionDataSource + var r1 error + if returnFunc, ok := ret.Get(0).(func() (resolve.SubscriptionDataSource, error)); ok { + return returnFunc() + } + if returnFunc, ok := ret.Get(0).(func() resolve.SubscriptionDataSource); ok { + r0 = returnFunc() + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(resolve.SubscriptionDataSource) + } + } + if returnFunc, ok := ret.Get(1).(func() error); ok { + r1 = returnFunc() + } else { + r1 = ret.Error(1) + } + return r0, r1 +} + +// MockPubSubDataSource_ResolveDataSourceSubscription_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ResolveDataSourceSubscription' +type MockPubSubDataSource_ResolveDataSourceSubscription_Call struct { + *mock.Call +} + +// ResolveDataSourceSubscription is a helper method to define mock.On call +func (_e *MockPubSubDataSource_Expecter) ResolveDataSourceSubscription() *MockPubSubDataSource_ResolveDataSourceSubscription_Call { + return &MockPubSubDataSource_ResolveDataSourceSubscription_Call{Call: _e.mock.On("ResolveDataSourceSubscription")} +} + +func (_c *MockPubSubDataSource_ResolveDataSourceSubscription_Call) Run(run func()) *MockPubSubDataSource_ResolveDataSourceSubscription_Call { + _c.Call.Run(func(args mock.Arguments) { + run() + }) + return _c +} + +func (_c *MockPubSubDataSource_ResolveDataSourceSubscription_Call) Return(subscriptionDataSource resolve.SubscriptionDataSource, err error) *MockPubSubDataSource_ResolveDataSourceSubscription_Call { + _c.Call.Return(subscriptionDataSource, err) + return _c +} + +func (_c *MockPubSubDataSource_ResolveDataSourceSubscription_Call) RunAndReturn(run func() (resolve.SubscriptionDataSource, error)) *MockPubSubDataSource_ResolveDataSourceSubscription_Call { + _c.Call.Return(run) + return _c +} + +// ResolveDataSourceSubscriptionInput provides a mock function for the type MockPubSubDataSource +func (_mock *MockPubSubDataSource) ResolveDataSourceSubscriptionInput() (string, error) { + ret := _mock.Called() + + if len(ret) == 0 { + panic("no return value specified for ResolveDataSourceSubscriptionInput") + } + + var r0 string + var r1 error + if returnFunc, ok := ret.Get(0).(func() (string, error)); ok { + return returnFunc() + } + if returnFunc, ok := ret.Get(0).(func() string); ok { + r0 = returnFunc() + } else { + r0 = ret.Get(0).(string) + } + if returnFunc, ok := ret.Get(1).(func() error); ok { + r1 = returnFunc() + } else { + r1 = ret.Error(1) + } + return r0, r1 +} + +// MockPubSubDataSource_ResolveDataSourceSubscriptionInput_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ResolveDataSourceSubscriptionInput' +type MockPubSubDataSource_ResolveDataSourceSubscriptionInput_Call struct { + *mock.Call +} + +// ResolveDataSourceSubscriptionInput is a helper method to define mock.On call +func (_e *MockPubSubDataSource_Expecter) ResolveDataSourceSubscriptionInput() *MockPubSubDataSource_ResolveDataSourceSubscriptionInput_Call { + return &MockPubSubDataSource_ResolveDataSourceSubscriptionInput_Call{Call: _e.mock.On("ResolveDataSourceSubscriptionInput")} +} + +func (_c *MockPubSubDataSource_ResolveDataSourceSubscriptionInput_Call) Run(run func()) *MockPubSubDataSource_ResolveDataSourceSubscriptionInput_Call { + _c.Call.Run(func(args mock.Arguments) { + run() + }) + return _c +} + +func (_c *MockPubSubDataSource_ResolveDataSourceSubscriptionInput_Call) Return(s string, err error) *MockPubSubDataSource_ResolveDataSourceSubscriptionInput_Call { + _c.Call.Return(s, err) + return _c +} + +func (_c *MockPubSubDataSource_ResolveDataSourceSubscriptionInput_Call) RunAndReturn(run func() (string, error)) *MockPubSubDataSource_ResolveDataSourceSubscriptionInput_Call { + _c.Call.Return(run) + return _c +} + +// TransformEventData provides a mock function for the type MockPubSubDataSource +func (_mock *MockPubSubDataSource) TransformEventData(extractFn ArgumentTemplateCallback) error { + ret := _mock.Called(extractFn) + + if len(ret) == 0 { + panic("no return value specified for TransformEventData") + } + + var r0 error + if returnFunc, ok := ret.Get(0).(func(ArgumentTemplateCallback) error); ok { + r0 = returnFunc(extractFn) + } else { + r0 = ret.Error(0) + } + return r0 +} + +// MockPubSubDataSource_TransformEventData_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'TransformEventData' +type MockPubSubDataSource_TransformEventData_Call struct { + *mock.Call +} + +// TransformEventData is a helper method to define mock.On call +// - extractFn ArgumentTemplateCallback +func (_e *MockPubSubDataSource_Expecter) TransformEventData(extractFn interface{}) *MockPubSubDataSource_TransformEventData_Call { + return &MockPubSubDataSource_TransformEventData_Call{Call: _e.mock.On("TransformEventData", extractFn)} +} + +func (_c *MockPubSubDataSource_TransformEventData_Call) Run(run func(extractFn ArgumentTemplateCallback)) *MockPubSubDataSource_TransformEventData_Call { + _c.Call.Run(func(args mock.Arguments) { + var arg0 ArgumentTemplateCallback + if args[0] != nil { + arg0 = args[0].(ArgumentTemplateCallback) + } + run( + arg0, + ) + }) + return _c +} + +func (_c *MockPubSubDataSource_TransformEventData_Call) Return(err error) *MockPubSubDataSource_TransformEventData_Call { + _c.Call.Return(err) + return _c +} + +func (_c *MockPubSubDataSource_TransformEventData_Call) RunAndReturn(run func(extractFn ArgumentTemplateCallback) error) *MockPubSubDataSource_TransformEventData_Call { + _c.Call.Return(run) + return _c +} + // NewMockLifecycle creates a new instance of MockLifecycle. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations. // The first argument is typically a *testing.T value. func NewMockLifecycle(t interface { @@ -138,3 +484,415 @@ func (_c *MockLifecycle_Startup_Call) RunAndReturn(run func(ctx context.Context) _c.Call.Return(run) return _c } + +// NewMockPubSubProvider creates a new instance of MockPubSubProvider. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations. +// The first argument is typically a *testing.T value. +func NewMockPubSubProvider(t interface { + mock.TestingT + Cleanup(func()) +}) *MockPubSubProvider { + mock := &MockPubSubProvider{} + mock.Mock.Test(t) + + t.Cleanup(func() { mock.AssertExpectations(t) }) + + return mock +} + +// MockPubSubProvider is an autogenerated mock type for the PubSubProvider type +type MockPubSubProvider struct { + mock.Mock +} + +type MockPubSubProvider_Expecter struct { + mock *mock.Mock +} + +func (_m *MockPubSubProvider) EXPECT() *MockPubSubProvider_Expecter { + return &MockPubSubProvider_Expecter{mock: &_m.Mock} +} + +// ID provides a mock function for the type MockPubSubProvider +func (_mock *MockPubSubProvider) ID() string { + ret := _mock.Called() + + if len(ret) == 0 { + panic("no return value specified for ID") + } + + var r0 string + if returnFunc, ok := ret.Get(0).(func() string); ok { + r0 = returnFunc() + } else { + r0 = ret.Get(0).(string) + } + return r0 +} + +// MockPubSubProvider_ID_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ID' +type MockPubSubProvider_ID_Call struct { + *mock.Call +} + +// ID is a helper method to define mock.On call +func (_e *MockPubSubProvider_Expecter) ID() *MockPubSubProvider_ID_Call { + return &MockPubSubProvider_ID_Call{Call: _e.mock.On("ID")} +} + +func (_c *MockPubSubProvider_ID_Call) Run(run func()) *MockPubSubProvider_ID_Call { + _c.Call.Run(func(args mock.Arguments) { + run() + }) + return _c +} + +func (_c *MockPubSubProvider_ID_Call) Return(s string) *MockPubSubProvider_ID_Call { + _c.Call.Return(s) + return _c +} + +func (_c *MockPubSubProvider_ID_Call) RunAndReturn(run func() string) *MockPubSubProvider_ID_Call { + _c.Call.Return(run) + return _c +} + +// Shutdown provides a mock function for the type MockPubSubProvider +func (_mock *MockPubSubProvider) Shutdown(ctx context.Context) error { + ret := _mock.Called(ctx) + + if len(ret) == 0 { + panic("no return value specified for Shutdown") + } + + var r0 error + if returnFunc, ok := ret.Get(0).(func(context.Context) error); ok { + r0 = returnFunc(ctx) + } else { + r0 = ret.Error(0) + } + return r0 +} + +// MockPubSubProvider_Shutdown_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'Shutdown' +type MockPubSubProvider_Shutdown_Call struct { + *mock.Call +} + +// Shutdown is a helper method to define mock.On call +// - ctx context.Context +func (_e *MockPubSubProvider_Expecter) Shutdown(ctx interface{}) *MockPubSubProvider_Shutdown_Call { + return &MockPubSubProvider_Shutdown_Call{Call: _e.mock.On("Shutdown", ctx)} +} + +func (_c *MockPubSubProvider_Shutdown_Call) Run(run func(ctx context.Context)) *MockPubSubProvider_Shutdown_Call { + _c.Call.Run(func(args mock.Arguments) { + var arg0 context.Context + if args[0] != nil { + arg0 = args[0].(context.Context) + } + run( + arg0, + ) + }) + return _c +} + +func (_c *MockPubSubProvider_Shutdown_Call) Return(err error) *MockPubSubProvider_Shutdown_Call { + _c.Call.Return(err) + return _c +} + +func (_c *MockPubSubProvider_Shutdown_Call) RunAndReturn(run func(ctx context.Context) error) *MockPubSubProvider_Shutdown_Call { + _c.Call.Return(run) + return _c +} + +// Startup provides a mock function for the type MockPubSubProvider +func (_mock *MockPubSubProvider) Startup(ctx context.Context) error { + ret := _mock.Called(ctx) + + if len(ret) == 0 { + panic("no return value specified for Startup") + } + + var r0 error + if returnFunc, ok := ret.Get(0).(func(context.Context) error); ok { + r0 = returnFunc(ctx) + } else { + r0 = ret.Error(0) + } + return r0 +} + +// MockPubSubProvider_Startup_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'Startup' +type MockPubSubProvider_Startup_Call struct { + *mock.Call +} + +// Startup is a helper method to define mock.On call +// - ctx context.Context +func (_e *MockPubSubProvider_Expecter) Startup(ctx interface{}) *MockPubSubProvider_Startup_Call { + return &MockPubSubProvider_Startup_Call{Call: _e.mock.On("Startup", ctx)} +} + +func (_c *MockPubSubProvider_Startup_Call) Run(run func(ctx context.Context)) *MockPubSubProvider_Startup_Call { + _c.Call.Run(func(args mock.Arguments) { + var arg0 context.Context + if args[0] != nil { + arg0 = args[0].(context.Context) + } + run( + arg0, + ) + }) + return _c +} + +func (_c *MockPubSubProvider_Startup_Call) Return(err error) *MockPubSubProvider_Startup_Call { + _c.Call.Return(err) + return _c +} + +func (_c *MockPubSubProvider_Startup_Call) RunAndReturn(run func(ctx context.Context) error) *MockPubSubProvider_Startup_Call { + _c.Call.Return(run) + return _c +} + +// TypeID provides a mock function for the type MockPubSubProvider +func (_mock *MockPubSubProvider) TypeID() string { + ret := _mock.Called() + + if len(ret) == 0 { + panic("no return value specified for TypeID") + } + + var r0 string + if returnFunc, ok := ret.Get(0).(func() string); ok { + r0 = returnFunc() + } else { + r0 = ret.Get(0).(string) + } + return r0 +} + +// MockPubSubProvider_TypeID_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'TypeID' +type MockPubSubProvider_TypeID_Call struct { + *mock.Call +} + +// TypeID is a helper method to define mock.On call +func (_e *MockPubSubProvider_Expecter) TypeID() *MockPubSubProvider_TypeID_Call { + return &MockPubSubProvider_TypeID_Call{Call: _e.mock.On("TypeID")} +} + +func (_c *MockPubSubProvider_TypeID_Call) Run(run func()) *MockPubSubProvider_TypeID_Call { + _c.Call.Run(func(args mock.Arguments) { + run() + }) + return _c +} + +func (_c *MockPubSubProvider_TypeID_Call) Return(s string) *MockPubSubProvider_TypeID_Call { + _c.Call.Return(s) + return _c +} + +func (_c *MockPubSubProvider_TypeID_Call) RunAndReturn(run func() string) *MockPubSubProvider_TypeID_Call { + _c.Call.Return(run) + return _c +} + +// NewMockPubSubProviderBuilder creates a new instance of MockPubSubProviderBuilder. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations. +// The first argument is typically a *testing.T value. +func NewMockPubSubProviderBuilder[P any, E any](t interface { + mock.TestingT + Cleanup(func()) +}) *MockPubSubProviderBuilder[P, E] { + mock := &MockPubSubProviderBuilder[P, E]{} + mock.Mock.Test(t) + + t.Cleanup(func() { mock.AssertExpectations(t) }) + + return mock +} + +// MockPubSubProviderBuilder is an autogenerated mock type for the PubSubProviderBuilder type +type MockPubSubProviderBuilder[P any, E any] struct { + mock.Mock +} + +type MockPubSubProviderBuilder_Expecter[P any, E any] struct { + mock *mock.Mock +} + +func (_m *MockPubSubProviderBuilder[P, E]) EXPECT() *MockPubSubProviderBuilder_Expecter[P, E] { + return &MockPubSubProviderBuilder_Expecter[P, E]{mock: &_m.Mock} +} + +// BuildDataSource provides a mock function for the type MockPubSubProviderBuilder +func (_mock *MockPubSubProviderBuilder[P, E]) BuildDataSource(data E) (PubSubDataSource, error) { + ret := _mock.Called(data) + + if len(ret) == 0 { + panic("no return value specified for BuildDataSource") + } + + var r0 PubSubDataSource + var r1 error + if returnFunc, ok := ret.Get(0).(func(E) (PubSubDataSource, error)); ok { + return returnFunc(data) + } + if returnFunc, ok := ret.Get(0).(func(E) PubSubDataSource); ok { + r0 = returnFunc(data) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(PubSubDataSource) + } + } + if returnFunc, ok := ret.Get(1).(func(E) error); ok { + r1 = returnFunc(data) + } else { + r1 = ret.Error(1) + } + return r0, r1 +} + +// MockPubSubProviderBuilder_BuildDataSource_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'BuildDataSource' +type MockPubSubProviderBuilder_BuildDataSource_Call[P any, E any] struct { + *mock.Call +} + +// BuildDataSource is a helper method to define mock.On call +// - data E +func (_e *MockPubSubProviderBuilder_Expecter[P, E]) BuildDataSource(data interface{}) *MockPubSubProviderBuilder_BuildDataSource_Call[P, E] { + return &MockPubSubProviderBuilder_BuildDataSource_Call[P, E]{Call: _e.mock.On("BuildDataSource", data)} +} + +func (_c *MockPubSubProviderBuilder_BuildDataSource_Call[P, E]) Run(run func(data E)) *MockPubSubProviderBuilder_BuildDataSource_Call[P, E] { + _c.Call.Run(func(args mock.Arguments) { + var arg0 E + if args[0] != nil { + arg0 = args[0].(E) + } + run( + arg0, + ) + }) + return _c +} + +func (_c *MockPubSubProviderBuilder_BuildDataSource_Call[P, E]) Return(pubSubDataSource PubSubDataSource, err error) *MockPubSubProviderBuilder_BuildDataSource_Call[P, E] { + _c.Call.Return(pubSubDataSource, err) + return _c +} + +func (_c *MockPubSubProviderBuilder_BuildDataSource_Call[P, E]) RunAndReturn(run func(data E) (PubSubDataSource, error)) *MockPubSubProviderBuilder_BuildDataSource_Call[P, E] { + _c.Call.Return(run) + return _c +} + +// BuildProvider provides a mock function for the type MockPubSubProviderBuilder +func (_mock *MockPubSubProviderBuilder[P, E]) BuildProvider(options P) (PubSubProvider, error) { + ret := _mock.Called(options) + + if len(ret) == 0 { + panic("no return value specified for BuildProvider") + } + + var r0 PubSubProvider + var r1 error + if returnFunc, ok := ret.Get(0).(func(P) (PubSubProvider, error)); ok { + return returnFunc(options) + } + if returnFunc, ok := ret.Get(0).(func(P) PubSubProvider); ok { + r0 = returnFunc(options) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(PubSubProvider) + } + } + if returnFunc, ok := ret.Get(1).(func(P) error); ok { + r1 = returnFunc(options) + } else { + r1 = ret.Error(1) + } + return r0, r1 +} + +// MockPubSubProviderBuilder_BuildProvider_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'BuildProvider' +type MockPubSubProviderBuilder_BuildProvider_Call[P any, E any] struct { + *mock.Call +} + +// BuildProvider is a helper method to define mock.On call +// - options P +func (_e *MockPubSubProviderBuilder_Expecter[P, E]) BuildProvider(options interface{}) *MockPubSubProviderBuilder_BuildProvider_Call[P, E] { + return &MockPubSubProviderBuilder_BuildProvider_Call[P, E]{Call: _e.mock.On("BuildProvider", options)} +} + +func (_c *MockPubSubProviderBuilder_BuildProvider_Call[P, E]) Run(run func(options P)) *MockPubSubProviderBuilder_BuildProvider_Call[P, E] { + _c.Call.Run(func(args mock.Arguments) { + var arg0 P + if args[0] != nil { + arg0 = args[0].(P) + } + run( + arg0, + ) + }) + return _c +} + +func (_c *MockPubSubProviderBuilder_BuildProvider_Call[P, E]) Return(pubSubProvider PubSubProvider, err error) *MockPubSubProviderBuilder_BuildProvider_Call[P, E] { + _c.Call.Return(pubSubProvider, err) + return _c +} + +func (_c *MockPubSubProviderBuilder_BuildProvider_Call[P, E]) RunAndReturn(run func(options P) (PubSubProvider, error)) *MockPubSubProviderBuilder_BuildProvider_Call[P, E] { + _c.Call.Return(run) + return _c +} + +// TypeID provides a mock function for the type MockPubSubProviderBuilder +func (_mock *MockPubSubProviderBuilder[P, E]) TypeID() string { + ret := _mock.Called() + + if len(ret) == 0 { + panic("no return value specified for TypeID") + } + + var r0 string + if returnFunc, ok := ret.Get(0).(func() string); ok { + r0 = returnFunc() + } else { + r0 = ret.Get(0).(string) + } + return r0 +} + +// MockPubSubProviderBuilder_TypeID_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'TypeID' +type MockPubSubProviderBuilder_TypeID_Call[P any, E any] struct { + *mock.Call +} + +// TypeID is a helper method to define mock.On call +func (_e *MockPubSubProviderBuilder_Expecter[P, E]) TypeID() *MockPubSubProviderBuilder_TypeID_Call[P, E] { + return &MockPubSubProviderBuilder_TypeID_Call[P, E]{Call: _e.mock.On("TypeID")} +} + +func (_c *MockPubSubProviderBuilder_TypeID_Call[P, E]) Run(run func()) *MockPubSubProviderBuilder_TypeID_Call[P, E] { + _c.Call.Run(func(args mock.Arguments) { + run() + }) + return _c +} + +func (_c *MockPubSubProviderBuilder_TypeID_Call[P, E]) Return(s string) *MockPubSubProviderBuilder_TypeID_Call[P, E] { + _c.Call.Return(s) + return _c +} + +func (_c *MockPubSubProviderBuilder_TypeID_Call[P, E]) RunAndReturn(run func() string) *MockPubSubProviderBuilder_TypeID_Call[P, E] { + _c.Call.Return(run) + return _c +} diff --git a/router/pkg/pubsub/pubsub.go b/router/pkg/pubsub/pubsub.go index 4cb5d3f06d..c281a9c5b4 100644 --- a/router/pkg/pubsub/pubsub.go +++ b/router/pkg/pubsub/pubsub.go @@ -70,7 +70,7 @@ func BuildProvidersAndDataSources( events: dsConf.Configuration.GetCustomEvents().GetKafka(), }) } - kafkaPubSubProviders, kafkaOuts, err := buildProvidersAndDataSources(ctx, kafkaBuilder, config.Providers.Kafka, kafkaDsConfsWithEvents) + kafkaPubSubProviders, kafkaOuts, err := build(ctx, kafkaBuilder, config.Providers.Kafka, kafkaDsConfsWithEvents) if err != nil { return nil, nil, err } @@ -86,7 +86,7 @@ func BuildProvidersAndDataSources( events: dsConf.Configuration.GetCustomEvents().GetNats(), }) } - natsPubSubProviders, natsOuts, err := buildProvidersAndDataSources(ctx, natsBuilder, config.Providers.Nats, natsDsConfsWithEvents) + natsPubSubProviders, natsOuts, err := build(ctx, natsBuilder, config.Providers.Nats, natsDsConfsWithEvents) if err != nil { return nil, nil, err } @@ -96,7 +96,7 @@ func BuildProvidersAndDataSources( return pubSubProviders, outs, nil } -func buildProvidersAndDataSources[P GetID, E GetEngineEventConfiguration](ctx context.Context, builder pubsub_datasource.PubSubProviderBuilder[P, E], providersData []P, dsConfs []dsConfAndEvents[E]) ([]pubsub_datasource.PubSubProvider, []plan.DataSource, error) { +func build[P GetID, E GetEngineEventConfiguration](ctx context.Context, builder pubsub_datasource.PubSubProviderBuilder[P, E], providersData []P, dsConfs []dsConfAndEvents[E]) ([]pubsub_datasource.PubSubProvider, []plan.DataSource, error) { var pubSubProviders []pubsub_datasource.PubSubProvider var outs []plan.DataSource diff --git a/router/pkg/pubsub/pubsub_test.go b/router/pkg/pubsub/pubsub_test.go index 0660237e6c..ef4d4d9657 100644 --- a/router/pkg/pubsub/pubsub_test.go +++ b/router/pkg/pubsub/pubsub_test.go @@ -2,16 +2,315 @@ package pubsub import ( "context" + "errors" "testing" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" nodev1 "github.com/wundergraph/cosmo/router/gen/proto/wg/cosmo/node/v1" "github.com/wundergraph/cosmo/router/pkg/config" + "github.com/wundergraph/cosmo/router/pkg/pubsub/datasource" "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/plan" "go.uber.org/zap" ) +func TestBuild_OK(t *testing.T) { + ctx := context.Background() + mockBuilder := datasource.NewMockPubSubProviderBuilder[config.NatsEventSource, *nodev1.NatsEventConfiguration](t) + mockPubSubProvider := datasource.NewMockPubSubProvider(t) + mockPubSubDataSource := datasource.NewMockPubSubDataSource(t) + + dsMeta := &plan.DataSourceMetadata{ + RootNodes: []plan.TypeField{ + { + TypeName: "Type1", + FieldNames: []string{"Field1", "Field2"}, + }, + }, + } + + // Mock input data + event := &nodev1.EngineEventConfiguration{ + ProviderId: "provider-1", + TypeName: "Type1", + FieldName: "Field1", + Type: nodev1.EventType_PUBLISH, + } + dsConf := DataSourceConfigurationWithMetadata{ + Configuration: &nodev1.DataSourceConfiguration{ + Id: "test-id", + CustomEvents: &nodev1.DataSourceCustomEvents{ + Nats: []*nodev1.NatsEventConfiguration{ + { + EngineEventConfiguration: event, + }, + }, + }, + }, + Metadata: dsMeta, + } + dsConfs := []dsConfAndEvents[*nodev1.NatsEventConfiguration]{ + { + dsConf: &dsConf, + events: dsConf.Configuration.GetCustomEvents().GetNats(), + }, + } + natsEventSources := []config.NatsEventSource{ + {ID: "provider-1"}, + } + + mockPubSubProvider.On("ID").Return("provider-1") + + mockBuilder.On("TypeID").Return("nats") + mockBuilder.On("BuildProvider", natsEventSources[0]).Return(mockPubSubProvider, nil) + mockBuilder.On("BuildDataSource", dsConf.Configuration.GetCustomEvents().GetNats()[0]).Return(mockPubSubDataSource, nil) + + // ctx, kafkaBuilder, config.Providers.Kafka, kafkaDsConfsWithEvents + // Execute the function + providers, dataSources, err := build(ctx, mockBuilder, natsEventSources, dsConfs) + + // Assertions + assert.NoError(t, err) + require.Len(t, providers, 1) + require.Len(t, dataSources, 1) + assert.True(t, dataSources[0].HasRootNode("Type1", "Field1")) + assert.False(t, dataSources[0].HasRootNode("Type1", "Field2")) +} + +func TestBuild_ProviderError(t *testing.T) { + ctx := context.Background() + mockBuilder := datasource.NewMockPubSubProviderBuilder[config.NatsEventSource, *nodev1.NatsEventConfiguration](t) + + dsMeta := &plan.DataSourceMetadata{ + RootNodes: []plan.TypeField{ + { + TypeName: "Type1", + FieldNames: []string{"Field1", "Field2"}, + }, + }, + } + + // Mock input data + event := &nodev1.EngineEventConfiguration{ + ProviderId: "provider-1", + TypeName: "Type1", + FieldName: "Field1", + Type: nodev1.EventType_PUBLISH, + } + dsConf := DataSourceConfigurationWithMetadata{ + Configuration: &nodev1.DataSourceConfiguration{ + Id: "test-id", + CustomEvents: &nodev1.DataSourceCustomEvents{ + Nats: []*nodev1.NatsEventConfiguration{ + { + EngineEventConfiguration: event, + }, + }, + }, + }, + Metadata: dsMeta, + } + dsConfs := []dsConfAndEvents[*nodev1.NatsEventConfiguration]{ + { + dsConf: &dsConf, + events: dsConf.Configuration.GetCustomEvents().GetNats(), + }, + } + natsEventSources := []config.NatsEventSource{ + {ID: "provider-1"}, + } + + mockBuilder.On("BuildProvider", natsEventSources[0]).Return(nil, errors.New("provider error")) + + // Execute the function + providers, dataSources, err := build(ctx, mockBuilder, natsEventSources, dsConfs) + + // Assertions + assert.Error(t, err) + require.Len(t, providers, 0) + require.Len(t, dataSources, 0) +} + +func TestBuild_DataSourceError(t *testing.T) { + ctx := context.Background() + mockBuilder := datasource.NewMockPubSubProviderBuilder[config.NatsEventSource, *nodev1.NatsEventConfiguration](t) + mockPubSubProvider := datasource.NewMockPubSubProvider(t) + + dsMeta := &plan.DataSourceMetadata{ + RootNodes: []plan.TypeField{ + { + TypeName: "Type1", + FieldNames: []string{"Field1", "Field2"}, + }, + }, + } + + // Mock input data + event := &nodev1.EngineEventConfiguration{ + ProviderId: "provider-1", + TypeName: "Type1", + FieldName: "Field1", + Type: nodev1.EventType_PUBLISH, + } + dsConf := DataSourceConfigurationWithMetadata{ + Configuration: &nodev1.DataSourceConfiguration{ + Id: "test-id", + CustomEvents: &nodev1.DataSourceCustomEvents{ + Nats: []*nodev1.NatsEventConfiguration{ + { + EngineEventConfiguration: event, + }, + }, + }, + }, + Metadata: dsMeta, + } + dsConfs := []dsConfAndEvents[*nodev1.NatsEventConfiguration]{ + { + dsConf: &dsConf, + events: dsConf.Configuration.GetCustomEvents().GetNats(), + }, + } + natsEventSources := []config.NatsEventSource{ + {ID: "provider-1"}, + } + + mockPubSubProvider.On("ID").Return("provider-1") + + mockBuilder.On("BuildProvider", natsEventSources[0]).Return(mockPubSubProvider, nil) + mockBuilder.On("BuildDataSource", dsConf.Configuration.GetCustomEvents().GetNats()[0]).Return(nil, errors.New("data source error")) + + // Execute the function + providers, dataSources, err := build(ctx, mockBuilder, natsEventSources, dsConfs) + + // Assertions + assert.Error(t, err) + require.Len(t, providers, 0) + require.Len(t, dataSources, 0) +} + +func TestBuild_ShouldGetAnErrorIfProviderIsNotDefined(t *testing.T) { + ctx := context.Background() + mockBuilder := datasource.NewMockPubSubProviderBuilder[config.NatsEventSource, *nodev1.NatsEventConfiguration](t) + //mockPubSubProvider := datasource.NewMockPubSubProvider(t) + + dsMeta := &plan.DataSourceMetadata{ + RootNodes: []plan.TypeField{ + { + TypeName: "Type1", + FieldNames: []string{"Field1", "Field2"}, + }, + }, + } + + // Mock input data + event := &nodev1.EngineEventConfiguration{ + ProviderId: "provider-2", + TypeName: "Type1", + FieldName: "Field1", + Type: nodev1.EventType_PUBLISH, + } + dsConf := DataSourceConfigurationWithMetadata{ + Configuration: &nodev1.DataSourceConfiguration{ + Id: "test-id", + CustomEvents: &nodev1.DataSourceCustomEvents{ + Nats: []*nodev1.NatsEventConfiguration{ + { + EngineEventConfiguration: event, + }, + }, + }, + }, + Metadata: dsMeta, + } + dsConfs := []dsConfAndEvents[*nodev1.NatsEventConfiguration]{ + { + dsConf: &dsConf, + events: dsConf.Configuration.GetCustomEvents().GetNats(), + }, + } + natsEventSources := []config.NatsEventSource{ + {ID: "provider-1"}, + } + + mockBuilder.On("TypeID").Return("nats") + + // Execute the function + providers, dataSources, err := build(ctx, mockBuilder, natsEventSources, dsConfs) + + // Assertions + assert.Error(t, err) + assert.IsType(t, &ProviderNotDefinedError{ + ProviderID: "provider-2", + ProviderTypeID: "nats", + }, err) + require.Len(t, providers, 0) + require.Len(t, dataSources, 0) +} + +func TestBuild_ShouldNotInitializeProviderIfNotUsed(t *testing.T) { + ctx := context.Background() + mockBuilder := datasource.NewMockPubSubProviderBuilder[config.NatsEventSource, *nodev1.NatsEventConfiguration](t) + mockPubSubUsedProvider := datasource.NewMockPubSubProvider(t) + mockPubSubDataSource := datasource.NewMockPubSubDataSource(t) + + dsMeta := &plan.DataSourceMetadata{ + RootNodes: []plan.TypeField{ + { + TypeName: "Type1", + FieldNames: []string{"Field1", "Field2"}, + }, + }, + } + + // Mock input data + event := &nodev1.EngineEventConfiguration{ + ProviderId: "provider-2", + TypeName: "Type1", + FieldName: "Field1", + Type: nodev1.EventType_PUBLISH, + } + dsConf := DataSourceConfigurationWithMetadata{ + Configuration: &nodev1.DataSourceConfiguration{ + Id: "test-id", + CustomEvents: &nodev1.DataSourceCustomEvents{ + Nats: []*nodev1.NatsEventConfiguration{ + { + EngineEventConfiguration: event, + }, + }, + }, + }, + Metadata: dsMeta, + } + dsConfs := []dsConfAndEvents[*nodev1.NatsEventConfiguration]{ + { + dsConf: &dsConf, + events: dsConf.Configuration.GetCustomEvents().GetNats(), + }, + } + natsEventSources := []config.NatsEventSource{ + {ID: "provider-1"}, + {ID: "provider-2"}, + } + + mockPubSubUsedProvider.On("ID").Return("provider-2") + + mockBuilder.On("TypeID").Return("nats") + mockBuilder.On("BuildProvider", natsEventSources[1]).Return(mockPubSubUsedProvider, nil) + mockBuilder.On("BuildDataSource", dsConf.Configuration.GetCustomEvents().GetNats()[0]).Return(mockPubSubDataSource, nil) + + // Execute the function + providers, dataSources, err := build(ctx, mockBuilder, natsEventSources, dsConfs) + + // Assertions + assert.NoError(t, err) + require.Len(t, providers, 1) + require.Len(t, dataSources, 1) + assert.True(t, dataSources[0].HasRootNode("Type1", "Field1")) + assert.False(t, dataSources[0].HasRootNode("Type1", "Field2")) +} + func TestBuildProvidersAndDataSources_OK(t *testing.T) { ctx := context.Background() From 0f7fd6fb97e47ae2118b471066f0b45ffd14be1b Mon Sep 17 00:00:00 2001 From: Alessandro Pagnin Date: Thu, 29 May 2025 09:46:04 +0200 Subject: [PATCH 086/126] style: update comment formatting in BuildProvidersAndDataSources function for consistency --- router/pkg/pubsub/pubsub.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/router/pkg/pubsub/pubsub.go b/router/pkg/pubsub/pubsub.go index c281a9c5b4..35e2658526 100644 --- a/router/pkg/pubsub/pubsub.go +++ b/router/pkg/pubsub/pubsub.go @@ -61,7 +61,7 @@ func BuildProvidersAndDataSources( var pubSubProviders []pubsub_datasource.PubSubProvider var outs []plan.DataSource - // Initialize Kafka providers and data sources + // initialize Kafka providers and data sources kafkaBuilder := kafka.NewPubSubProviderBuilder(ctx, logger, hostName, routerListenAddr) kafkaDsConfsWithEvents := []dsConfAndEvents[*nodev1.KafkaEventConfiguration]{} for _, dsConf := range dsConfs { From 7000f5a3d085efa9c6afe673581e3b8a9b4dae54 Mon Sep 17 00:00:00 2001 From: Alessandro Pagnin Date: Thu, 29 May 2025 11:49:10 +0200 Subject: [PATCH 087/126] docs: enhance README for PubSub provider integration and update configuration structures in Kafka and NATS implementations --- router/pkg/pubsub/README.md | 94 +++++++++++-------- router/pkg/pubsub/kafka/engine_datasource.go | 16 ++++ router/pkg/pubsub/kafka/pubsub_datasource.go | 15 --- router/pkg/pubsub/nats/engine_datasource.go | 23 +++++ .../pkg/pubsub/nats/engine_datasource_test.go | 6 +- router/pkg/pubsub/nats/pubsub_datasource.go | 34 +------ 6 files changed, 97 insertions(+), 91 deletions(-) diff --git a/router/pkg/pubsub/README.md b/router/pkg/pubsub/README.md index 9922825bb6..cec9213bcd 100644 --- a/router/pkg/pubsub/README.md +++ b/router/pkg/pubsub/README.md @@ -1,29 +1,43 @@ -# How to add a PubSub Provider +# Adding a PubSub Provider -## Add the data to the router proto +This guide outlines the steps required to integrate a new PubSub provider into the router. -You need to change the [router proto](../../../proto/wg/cosmo/node/v1/node.proto) as follows. +## Modify the Router Proto -Add the provider configuration like the `KafkaEventConfiguration` and then add it as repeated inside the `DataSourceCustomEvents`. +Update the [`router.proto`](../../../proto/wg/cosmo/node/v1/node.proto) file by adding your provider’s configuration. Follow these steps: -The fields of `KafkaEventConfiguration` will depends on the provider. If the providers use as grouping mechanisms of the messages "channel," it will be called "channels," if it is "Topic," it will be "topics," and so on. +- Define a new configuration message similar to `KafkaEventConfiguration`. +- Add this configuration as a repeated field within the `DataSourceCustomEvents` message. +- Field naming should reflect the provider's message grouping mechanism. For example, use `channels` if the provider groups messages by channel, or `topics` if it uses topics. -After this you will have to compile the proto launching from the main folder the command `make generate-go`. +After making these changes, compile the updated proto definitions by running the following command from the root directory: +```bash +make generate-go +``` + +This will generate the new proto files in the `gen` folder. + + +## Implement the PubSub Provider -## Build the PubSub Provider +To implement a new PubSub provider, the following components must be created: +- `SubscriptionEventConfiguration` and `PublishEventConfiguration`: Define the data structures used for communication between the adapter and the engine. +- `Adapter`: Implements the logic that interfaces with the provider’s client or SDK. +- `SubscriptionDataSource` and `PublishDataSource`: Engine components that leverage the configurations to subscribe and publish data. +- `PubSubDataSource`: Bridges the engine and the provider. +- `PubSubProviderBuilder`: Used by the router to instantiate the provider. -To build a PubSub provider, you need to implement five things: -- `Adapter` -- `PubSubDataSource` -- `PubSubProvider` -- `PubSubProviderBuilder` -- `PubSubProviderBuilderFactory` +### `SubscriptionEventConfiguration` and `PublishEventConfiguration` -### Adapter +These structures should be placed at the top of the `engine_datasource.go` file. Their design is specific to each provider. -The Adapter contains the logic actually calling the provider. Usually it implements an interface as follows: +Refer to the [kafka implementation](./kafka/engine_datasource.go) for a working example. + +### `Adapter` + +This component encapsulates the provider-specific logic. Although not required, it’s best practice to implement the following interface to facilitate testing via mocks: ```go type AdapterInterface interface { @@ -34,48 +48,48 @@ type AdapterInterface interface { } ``` -The content of `SubscriptionEventConfiguration` and `PublishEventConfiguration` depends on the provider, you can see an example of them in the [kafka implementation](./kafka/pubsub_datasource.go). - +Refer to the [kafka implementation](./kafka/adapter.go) for a working example. -### PubSubDataSource +### `SubscriptionDataSource` and `PublishDataSource` -The `[PubSubDataSource](./datasource/datasource.go)` is the junction between the engine `resolve.DataSource` and the Provider that we are implementing. +These are the core engine interfaces: -You can see an example in [kafka `PubSubDataSource`](./kafka/pubsub_datasource.go). +The engine expect two kind of structures: +- `SubscriptionDataSource`: Implements `resolve.SubscriptionDataSource` +- `PublishDataSource`: Implements `resolve.DataSource` -To complete the `PubSubDataSource` implementation you should also add the engine data source. +The implementation of `SubscriptionDataSource` and `PublishDataSource` should be in the `engine_datasource.go` file. -Then you have to implement a `SubscriptionDataSource`, a structure that must implement all the methods needed by the interface `resolve.SubscriptionDataSource`, like the [kafka implementation](./kafka/engine_datasource.go). +They are going to use the `SubscriptionEventConfiguration` and `PublishEventConfiguration` that you have implemented in the first step. -And also, you have to implement a `DataSource`, a structure that must implement all the methods needed by the interface `resolve.DataSource`, like `PublishDataSource` in the [kafka implementation](./kafka/pubsub_datasource.go). +Implement these in the `engine_datasource.go` file, referencing the [kafka implementation](./kafka/engine_datasource.go) for a working example. +### `PubSubDataSource` -### PubSubProvider +This structure connects the engine (resolve.DataSource and resolve.SubscriptionDataSource) with the provider implementation. It must implement the `PubSubProvider` interface defined in [provider.go](./datasource/provider.go). -The PubSubProvider expose the `Startup` and `Shutdown` methods of the adapter to the router. +Refer to the [kafka implementation](./kafka/pubsub_datasource.go) for a working example. -You can see as an example of the `PubSubProvider` in the [kafka implementation](./kafka/provider.go). +### `PubSubProviderBuilder` -### PubSubProviderBuilder +The builder is responsible for instantiating the provider within the router. It must implement the [PubSubProviderBuilder](./datasource/provider.go) interface. -The `PubSubProviderBuilder` is the structure that the router uses to create the provider. -It must implement all the methods specified in [datasource.PubSubProviderBuilder interface](./datasource/provider.go). +The interface has two generic types: +- `P`, the generic type of the options that the provider builder will need, as defined in the [config.go](../config/config.go) (NatsEventSource, KafkaEventSource, ...) +- `E`, the generic type of the event configuration that the provider builder will receive, as defined in the [proto/wg/cosmo/node/v1/node.proto](../../../proto/wg/cosmo/node/v1/node.proto) (KafkaEventConfiguration, NatsEventConfiguration, ...) -You can see as an example of the `PubSubProviderBuilder` in the [kafka implementation](./kafka/provider_builder.go). +Key methods: +- `BuildProvider`: Initializes the provider with its configuration and receive the provider options (defined by the `P` type) +- `BuildDataSource`: Creates the data source and receive the event configuration (defined by the `E` type) +Refer to the [kafka implementation](./kafka/provider_builder.go) for a working example. -### PubSubProviderBuilderFactory +## Add the provider to the router -The `PubSubProviderBuilderFactory` is the initial contact point where you receive: -- `ctx context.Context`, usually passed down to the adapter -- [`config.EventsConfiguration`](../config/config.go) that contains the config needed to set up the provider connection -- `*zap.Logger` -- `hostName string`, useful if you need to identify the connection based on the local host name -- `routerListenAddr string`, useful if you need to identify the connection based on different router instances in the same host +Update the `BuildProvidersAndDataSources` function in the [pubsub.go](./pubsub.go) file to include your new provider. -You can see as an example of the `PubSubProviderBuilderFactory` function in the [kafka implementation](./kafka/provider_builder.go). -# How to use the new PubSub Provider +## How to use the new PubSub Provider After you have implemented all the above, you can use your PubSub Provider by adding the following to your router config: @@ -86,4 +100,4 @@ pubsub: type: new-provider ``` -But to use it in the schema, you will have to work in the [composition](../../../composition) folder. \ No newline at end of file +But to use it in the GraphQL schema, you will have to work in the [composition](../../../composition) package. \ No newline at end of file diff --git a/router/pkg/pubsub/kafka/engine_datasource.go b/router/pkg/pubsub/kafka/engine_datasource.go index f31758ffa7..1a29457aaf 100644 --- a/router/pkg/pubsub/kafka/engine_datasource.go +++ b/router/pkg/pubsub/kafka/engine_datasource.go @@ -4,6 +4,7 @@ import ( "bytes" "context" "encoding/json" + "fmt" "io" "github.com/buger/jsonparser" @@ -12,6 +13,21 @@ import ( "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/resolve" ) +type SubscriptionEventConfiguration struct { + ProviderID string `json:"providerId"` + Topics []string `json:"topics"` +} + +type PublishEventConfiguration struct { + ProviderID string `json:"providerId"` + Topic string `json:"topic"` + Data json.RawMessage `json:"data"` +} + +func (s *PublishEventConfiguration) MarshalJSONTemplate() string { + return fmt.Sprintf(`{"topic":"%s", "data": %s, "providerId":"%s"}`, s.Topic, s.Data, s.ProviderID) +} + type SubscriptionDataSource struct { pubSub AdapterInterface } diff --git a/router/pkg/pubsub/kafka/pubsub_datasource.go b/router/pkg/pubsub/kafka/pubsub_datasource.go index 4de1b0a4e4..a04d714208 100644 --- a/router/pkg/pubsub/kafka/pubsub_datasource.go +++ b/router/pkg/pubsub/kafka/pubsub_datasource.go @@ -76,18 +76,3 @@ func (c *PubSubDataSource) ResolveDataSourceSubscriptionInput() (string, error) func (c *PubSubDataSource) TransformEventData(extractFn datasource.ArgumentTemplateCallback) error { return nil } - -type SubscriptionEventConfiguration struct { - ProviderID string `json:"providerId"` - Topics []string `json:"topics"` -} - -type PublishEventConfiguration struct { - ProviderID string `json:"providerId"` - Topic string `json:"topic"` - Data json.RawMessage `json:"data"` -} - -func (s *PublishEventConfiguration) MarshalJSONTemplate() string { - return fmt.Sprintf(`{"topic":"%s", "data": %s, "providerId":"%s"}`, s.Topic, s.Data, s.ProviderID) -} diff --git a/router/pkg/pubsub/nats/engine_datasource.go b/router/pkg/pubsub/nats/engine_datasource.go index c63da7ad0f..ad0d1f859c 100644 --- a/router/pkg/pubsub/nats/engine_datasource.go +++ b/router/pkg/pubsub/nats/engine_datasource.go @@ -4,6 +4,7 @@ import ( "bytes" "context" "encoding/json" + "fmt" "io" "github.com/buger/jsonparser" @@ -12,6 +13,28 @@ import ( "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/resolve" ) +type StreamConfiguration struct { + Consumer string `json:"consumer"` + ConsumerInactiveThreshold int32 `json:"consumerInactiveThreshold"` + StreamName string `json:"streamName"` +} + +type SubscriptionEventConfiguration struct { + ProviderID string `json:"providerId"` + Subjects []string `json:"subjects"` + StreamConfiguration *StreamConfiguration `json:"streamConfiguration,omitempty"` +} + +type PublishAndRequestEventConfiguration struct { + ProviderID string `json:"providerId"` + Subject string `json:"subject"` + Data json.RawMessage `json:"data"` +} + +func (s *PublishAndRequestEventConfiguration) MarshalJSONTemplate() string { + return fmt.Sprintf(`{"subject":"%s", "data": %s, "providerId":"%s"}`, s.Subject, s.Data, s.ProviderID) +} + type SubscriptionSource struct { pubSub AdapterInterface } diff --git a/router/pkg/pubsub/nats/engine_datasource_test.go b/router/pkg/pubsub/nats/engine_datasource_test.go index 39f9df7c7d..ba586a64a0 100644 --- a/router/pkg/pubsub/nats/engine_datasource_test.go +++ b/router/pkg/pubsub/nats/engine_datasource_test.go @@ -32,12 +32,12 @@ func (m *MockSubscriptionUpdater) Done() { func TestPublishEventConfiguration_MarshalJSONTemplate(t *testing.T) { tests := []struct { name string - config PublishEventConfiguration + config PublishAndRequestEventConfiguration wantPattern string }{ { name: "simple configuration", - config: PublishEventConfiguration{ + config: PublishAndRequestEventConfiguration{ ProviderID: "test-provider", Subject: "test-subject", Data: json.RawMessage(`{"message":"hello"}`), @@ -46,7 +46,7 @@ func TestPublishEventConfiguration_MarshalJSONTemplate(t *testing.T) { }, { name: "with special characters", - config: PublishEventConfiguration{ + config: PublishAndRequestEventConfiguration{ ProviderID: "test-provider-id", Subject: "subject-with-hyphens", Data: json.RawMessage(`{"message":"special \"quotes\" here"}`), diff --git a/router/pkg/pubsub/nats/pubsub_datasource.go b/router/pkg/pubsub/nats/pubsub_datasource.go index a89310ddea..7b0bced5d4 100644 --- a/router/pkg/pubsub/nats/pubsub_datasource.go +++ b/router/pkg/pubsub/nats/pubsub_datasource.go @@ -51,7 +51,7 @@ func (c *PubSubDataSource) ResolveDataSourceInput(eventData []byte) (string, err providerId := c.EventConfiguration.GetEngineEventConfiguration().GetProviderId() - evtCfg := PublishEventConfiguration{ + evtCfg := PublishAndRequestEventConfiguration{ ProviderID: providerId, Subject: subject, Data: eventData, @@ -96,38 +96,6 @@ func (c *PubSubDataSource) TransformEventData(extractFn datasource.ArgumentTempl return nil } -type StreamConfiguration struct { - Consumer string `json:"consumer"` - ConsumerInactiveThreshold int32 `json:"consumerInactiveThreshold"` - StreamName string `json:"streamName"` -} - -type SubscriptionEventConfiguration struct { - ProviderID string `json:"providerId"` - Subjects []string `json:"subjects"` - StreamConfiguration *StreamConfiguration `json:"streamConfiguration,omitempty"` -} - -type PublishAndRequestEventConfiguration struct { - ProviderID string `json:"providerId"` - Subject string `json:"subject"` - Data json.RawMessage `json:"data"` -} - -func (s *PublishAndRequestEventConfiguration) MarshalJSONTemplate() string { - return fmt.Sprintf(`{"subject":"%s", "data": %s, "providerId":"%s"}`, s.Subject, s.Data, s.ProviderID) -} - -type PublishEventConfiguration struct { - ProviderID string `json:"providerId"` - Subject string `json:"subject"` - Data json.RawMessage `json:"data"` -} - -func (s *PublishEventConfiguration) MarshalJSONTemplate() string { - return fmt.Sprintf(`{"subject":"%s", "data": %s, "providerId":"%s"}`, s.Subject, s.Data, s.ProviderID) -} - func transformEventConfig(cfg *nodev1.NatsEventConfiguration, fn datasource.ArgumentTemplateCallback) (*nodev1.NatsEventConfiguration, error) { switch v := cfg.GetEngineEventConfiguration().GetType(); v { case nodev1.EventType_PUBLISH, nodev1.EventType_REQUEST: From 22503c966aceb1f14c4abc6a67cd8a177b59c3a5 Mon Sep 17 00:00:00 2001 From: Alessandro Pagnin Date: Thu, 29 May 2025 11:58:14 +0200 Subject: [PATCH 088/126] test: rename existing test and add Kafka provider test for BuildProvidersAndDataSources --- router/pkg/pubsub/README.md | 48 ++++++++++++++++ .../pkg/pubsub/nats/engine_datasource_test.go | 13 ----- router/pkg/pubsub/pubsub_test.go | 55 ++++++++++++++++++- 3 files changed, 102 insertions(+), 14 deletions(-) diff --git a/router/pkg/pubsub/README.md b/router/pkg/pubsub/README.md index cec9213bcd..a8a2b03899 100644 --- a/router/pkg/pubsub/README.md +++ b/router/pkg/pubsub/README.md @@ -84,6 +84,54 @@ Key methods: Refer to the [kafka implementation](./kafka/provider_builder.go) for a working example. +### Add tests + +You should also add tests to your provider. + +### Generate mocks +As a first step, you can use the [mockery](https://github.com/vektra/mockery) tool to generate the mocks for the Adapter interface you have implemented. To do this, add the following to the `.mockery.yml` file: + +```yaml +packages: + github.com/wundergraph/cosmo/router/pkg/pubsub/{your-provider-name}: + interfaces: + AdapterInterface: +``` + +Then run the following command from the router directory: + +```bash +make generate-mocks +``` + +This will generate the mocks in the `{your-provider-name}/mocks.go` file. + +You can then use the mocks in your tests. + +#### Add engine_datasource_test.go + +You should also add tests of your engine_datasource.go file. + +You can use the [kafka implementation](./kafka/engine_datasource_test.go) as a reference. + +#### Add pubsub_datasource_test.go + +You should also add tests of your pubsub_datasource.go file. + +You can use the [kafka implementation](./kafka/pubsub_datasource_test.go) as a reference. + +#### Add provider_builder_test.go + +You should also add tests of your provider_builder.go file. + +You can use the [kafka implementation](./kafka/provider_builder_test.go) as a reference. + +#### Add pubsub_test.go + +You should also add tests of your changes to the [pubsub.go](./pubsub.go) file. + +You can use the [TestBuildProvidersAndDataSources_Kafka_OK](./pubsub_test.go) as a reference. + ## Add the provider to the router Update the `BuildProvidersAndDataSources` function in the [pubsub.go](./pubsub.go) file to include your new provider. diff --git a/router/pkg/pubsub/nats/engine_datasource_test.go b/router/pkg/pubsub/nats/engine_datasource_test.go index ba586a64a0..780bc47005 100644 --- a/router/pkg/pubsub/nats/engine_datasource_test.go +++ b/router/pkg/pubsub/nats/engine_datasource_test.go @@ -16,19 +16,6 @@ import ( "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/resolve" ) -// MockSubscriptionUpdater implements resolve.SubscriptionUpdater -type MockSubscriptionUpdater struct { - mock.Mock -} - -func (m *MockSubscriptionUpdater) Update(data []byte) { - m.Called(data) -} - -func (m *MockSubscriptionUpdater) Done() { - m.Called() -} - func TestPublishEventConfiguration_MarshalJSONTemplate(t *testing.T) { tests := []struct { name string diff --git a/router/pkg/pubsub/pubsub_test.go b/router/pkg/pubsub/pubsub_test.go index ef4d4d9657..1056873ecd 100644 --- a/router/pkg/pubsub/pubsub_test.go +++ b/router/pkg/pubsub/pubsub_test.go @@ -311,7 +311,7 @@ func TestBuild_ShouldNotInitializeProviderIfNotUsed(t *testing.T) { assert.False(t, dataSources[0].HasRootNode("Type1", "Field2")) } -func TestBuildProvidersAndDataSources_OK(t *testing.T) { +func TestBuildProvidersAndDataSources_Nats_OK(t *testing.T) { ctx := context.Background() dsMeta := &plan.DataSourceMetadata{ @@ -363,3 +363,56 @@ func TestBuildProvidersAndDataSources_OK(t *testing.T) { assert.True(t, dataSources[0].HasRootNode("Type1", "Field1")) assert.False(t, dataSources[0].HasRootNode("Type1", "Field2")) } + +func TestBuildProvidersAndDataSources_Kafka_OK(t *testing.T) { + ctx := context.Background() + + dsMeta := &plan.DataSourceMetadata{ + RootNodes: []plan.TypeField{ + { + TypeName: "Type1", + FieldNames: []string{"Field1", "Field2"}, + }, + }, + } + + // Mock input data + event := &nodev1.EngineEventConfiguration{ + ProviderId: "provider-1", + TypeName: "Type1", + FieldName: "Field1", + Type: nodev1.EventType_PUBLISH, + } + dsConf := DataSourceConfigurationWithMetadata{ + Configuration: &nodev1.DataSourceConfiguration{ + Id: "test-id", + CustomEvents: &nodev1.DataSourceCustomEvents{ + Kafka: []*nodev1.KafkaEventConfiguration{ + { + EngineEventConfiguration: event, + }, + }, + }, + }, + Metadata: dsMeta, + } + dsConfs := []DataSourceConfigurationWithMetadata{dsConf} + + // Execute the function + providers, dataSources, err := BuildProvidersAndDataSources(ctx, config.EventsConfiguration{ + Providers: config.EventProviders{ + Kafka: []config.KafkaEventSource{ + {ID: "provider-1"}, + }, + }, + }, zap.NewNop(), dsConfs, "host", "addr") + + // Assertions + assert.NoError(t, err) + require.Len(t, providers, 1) + require.Equal(t, providers[0].ID(), "provider-1") + require.Equal(t, providers[0].TypeID(), "kafka") + require.Len(t, dataSources, 1) + assert.True(t, dataSources[0].HasRootNode("Type1", "Field1")) + assert.False(t, dataSources[0].HasRootNode("Type1", "Field2")) +} From f7e48bf6f1847b48c3bc4a4ca57b1339c01794db Mon Sep 17 00:00:00 2001 From: Alessandro Pagnin Date: Thu, 29 May 2025 12:23:32 +0200 Subject: [PATCH 089/126] chore: update redis implementation --- router-tests/testenv/testenv.go | 9 +++ router/pkg/config/config.go | 4 + router/pkg/pubsub/pubsub.go | 17 ++++ router/pkg/pubsub/pubsub_test.go | 53 +++++++++++++ router/pkg/pubsub/redis/adapter.go | 18 ----- router/pkg/pubsub/redis/engine_datasource.go | 18 +++++ router/pkg/pubsub/redis/provider.go | 33 -------- router/pkg/pubsub/redis/provider_builder.go | 82 +++----------------- router/pkg/pubsub/redis/pubsub_datasource.go | 4 + 9 files changed, 117 insertions(+), 121 deletions(-) delete mode 100644 router/pkg/pubsub/redis/provider.go diff --git a/router-tests/testenv/testenv.go b/router-tests/testenv/testenv.go index 8edc5b8bdc..eb9f1a2ed5 100644 --- a/router-tests/testenv/testenv.go +++ b/router-tests/testenv/testenv.go @@ -755,6 +755,10 @@ func CreateTestSupervisorEnv(t testing.TB, cfg *Config) (*Environment, error) { e.NatsConnectionMyNats = natsSetup.Connections[1] } + if enableRedis { + e.RedisHosts = []string{redisHost} + } + if routerConfig.FeatureFlagConfigs != nil { myFF, ok := routerConfig.FeatureFlagConfigs.ConfigByFeatureFlagName["myff"] if ok { @@ -812,6 +816,11 @@ func CreateTestEnv(t testing.TB, cfg *Config) (*Environment, error) { natsSetup = s } + var enableRedis bool + if cfg.EnableRedis { + enableRedis = true + } + if cfg.AssertCacheMetrics != nil { if cfg.MetricReader == nil { cfg.MetricReader = metric.NewManualReader() diff --git a/router/pkg/config/config.go b/router/pkg/config/config.go index e9eb1a7a16..0b12040c27 100644 --- a/router/pkg/config/config.go +++ b/router/pkg/config/config.go @@ -546,6 +546,10 @@ type RedisEventSource struct { URLs []string `yaml:"urls,omitempty" env:"STORAGE_PROVIDER_REDIS_URLS"` } +func (r RedisEventSource) GetID() string { + return r.ID +} + type EventProviders struct { Nats []NatsEventSource `yaml:"nats,omitempty"` Kafka []KafkaEventSource `yaml:"kafka,omitempty"` diff --git a/router/pkg/pubsub/pubsub.go b/router/pkg/pubsub/pubsub.go index 35e2658526..bebe49ce8d 100644 --- a/router/pkg/pubsub/pubsub.go +++ b/router/pkg/pubsub/pubsub.go @@ -11,6 +11,7 @@ import ( pubsub_datasource "github.com/wundergraph/cosmo/router/pkg/pubsub/datasource" "github.com/wundergraph/cosmo/router/pkg/pubsub/kafka" "github.com/wundergraph/cosmo/router/pkg/pubsub/nats" + "github.com/wundergraph/cosmo/router/pkg/pubsub/redis" "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/plan" "go.uber.org/zap" ) @@ -93,6 +94,22 @@ func BuildProvidersAndDataSources( pubSubProviders = append(pubSubProviders, natsPubSubProviders...) outs = append(outs, natsOuts...) + // initialize Redis providers and data sources + redisBuilder := redis.NewPubSubProviderBuilder(ctx, logger, hostName, routerListenAddr) + redisDsConfsWithEvents := []dsConfAndEvents[*nodev1.RedisEventConfiguration]{} + for _, dsConf := range dsConfs { + redisDsConfsWithEvents = append(redisDsConfsWithEvents, dsConfAndEvents[*nodev1.RedisEventConfiguration]{ + dsConf: &dsConf, + events: dsConf.Configuration.GetCustomEvents().GetRedis(), + }) + } + redisPubSubProviders, redisOuts, err := build(ctx, redisBuilder, config.Providers.Redis, redisDsConfsWithEvents) + if err != nil { + return nil, nil, err + } + pubSubProviders = append(pubSubProviders, redisPubSubProviders...) + outs = append(outs, redisOuts...) + return pubSubProviders, outs, nil } diff --git a/router/pkg/pubsub/pubsub_test.go b/router/pkg/pubsub/pubsub_test.go index 1056873ecd..ae0be7c118 100644 --- a/router/pkg/pubsub/pubsub_test.go +++ b/router/pkg/pubsub/pubsub_test.go @@ -416,3 +416,56 @@ func TestBuildProvidersAndDataSources_Kafka_OK(t *testing.T) { assert.True(t, dataSources[0].HasRootNode("Type1", "Field1")) assert.False(t, dataSources[0].HasRootNode("Type1", "Field2")) } + +func TestBuildProvidersAndDataSources_Redis_OK(t *testing.T) { + ctx := context.Background() + + dsMeta := &plan.DataSourceMetadata{ + RootNodes: []plan.TypeField{ + { + TypeName: "Type1", + FieldNames: []string{"Field1", "Field2"}, + }, + }, + } + + // Mock input data + event := &nodev1.EngineEventConfiguration{ + ProviderId: "provider-1", + TypeName: "Type1", + FieldName: "Field1", + Type: nodev1.EventType_PUBLISH, + } + dsConf := DataSourceConfigurationWithMetadata{ + Configuration: &nodev1.DataSourceConfiguration{ + Id: "test-id", + CustomEvents: &nodev1.DataSourceCustomEvents{ + Redis: []*nodev1.RedisEventConfiguration{ + { + EngineEventConfiguration: event, + }, + }, + }, + }, + Metadata: dsMeta, + } + dsConfs := []DataSourceConfigurationWithMetadata{dsConf} + + // Execute the function + providers, dataSources, err := BuildProvidersAndDataSources(ctx, config.EventsConfiguration{ + Providers: config.EventProviders{ + Redis: []config.RedisEventSource{ + {ID: "provider-1", URLs: []string{"redis://localhost:6379"}}, + }, + }, + }, zap.NewNop(), dsConfs, "host", "addr") + + // Assertions + assert.NoError(t, err) + require.Len(t, providers, 1) + require.Equal(t, providers[0].ID(), "provider-1") + require.Equal(t, providers[0].TypeID(), "redis") + require.Len(t, dataSources, 1) + assert.True(t, dataSources[0].HasRootNode("Type1", "Field1")) + assert.False(t, dataSources[0].HasRootNode("Type1", "Field2")) +} diff --git a/router/pkg/pubsub/redis/adapter.go b/router/pkg/pubsub/redis/adapter.go index 9c577f2b1c..70e4258d36 100644 --- a/router/pkg/pubsub/redis/adapter.go +++ b/router/pkg/pubsub/redis/adapter.go @@ -2,7 +2,6 @@ package redis import ( "context" - "encoding/json" "fmt" "sync" @@ -12,23 +11,6 @@ import ( "go.uber.org/zap" ) -// SubscriptionEventConfiguration contains configuration for subscription events -type SubscriptionEventConfiguration struct { - ProviderID string `json:"providerId"` - Channels []string `json:"channels"` -} - -// PublishEventConfiguration contains configuration for publish events -type PublishEventConfiguration struct { - ProviderID string `json:"providerId"` - Channel string `json:"channel"` - Data json.RawMessage `json:"data"` -} - -func (s *PublishEventConfiguration) MarshalJSONTemplate() (string, error) { - return fmt.Sprintf(`{"channel":"%s", "data": %s, "providerId":"%s"}`, s.Channel, s.Data, s.ProviderID), nil -} - // AdapterInterface defines the methods that a Redis adapter should implement type AdapterInterface interface { // Subscribe subscribes to the given events and sends updates to the updater diff --git a/router/pkg/pubsub/redis/engine_datasource.go b/router/pkg/pubsub/redis/engine_datasource.go index b6ea1de1c2..e6024c4287 100644 --- a/router/pkg/pubsub/redis/engine_datasource.go +++ b/router/pkg/pubsub/redis/engine_datasource.go @@ -4,6 +4,7 @@ import ( "bytes" "context" "encoding/json" + "fmt" "io" "github.com/buger/jsonparser" @@ -12,6 +13,23 @@ import ( "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/resolve" ) +// SubscriptionEventConfiguration contains configuration for subscription events +type SubscriptionEventConfiguration struct { + ProviderID string `json:"providerId"` + Channels []string `json:"channels"` +} + +// PublishEventConfiguration contains configuration for publish events +type PublishEventConfiguration struct { + ProviderID string `json:"providerId"` + Channel string `json:"channel"` + Data json.RawMessage `json:"data"` +} + +func (s *PublishEventConfiguration) MarshalJSONTemplate() (string, error) { + return fmt.Sprintf(`{"channel":"%s", "data": %s, "providerId":"%s"}`, s.Channel, s.Data, s.ProviderID), nil +} + // SubscriptionDataSource implements resolve.SubscriptionDataSource for Redis type SubscriptionDataSource struct { pubSub AdapterInterface diff --git a/router/pkg/pubsub/redis/provider.go b/router/pkg/pubsub/redis/provider.go deleted file mode 100644 index 80374900b1..0000000000 --- a/router/pkg/pubsub/redis/provider.go +++ /dev/null @@ -1,33 +0,0 @@ -package redis - -import ( - "context" -) - -const providerTypeID = "redis" - -// Provider implements the PubSub provider for Redis -type Provider struct { - id string - adapter AdapterInterface -} - -// ID returns the provider ID -func (p *Provider) ID() string { - return p.id -} - -// TypeID returns the provider type -func (p *Provider) TypeID() string { - return providerTypeID -} - -// Startup initializes the provider -func (p *Provider) Startup(ctx context.Context) error { - return p.adapter.Startup(ctx) -} - -// Shutdown gracefully shuts down the provider -func (p *Provider) Shutdown(ctx context.Context) error { - return p.adapter.Shutdown(ctx) -} diff --git a/router/pkg/pubsub/redis/provider_builder.go b/router/pkg/pubsub/redis/provider_builder.go index b828580998..346f7982c0 100644 --- a/router/pkg/pubsub/redis/provider_builder.go +++ b/router/pkg/pubsub/redis/provider_builder.go @@ -3,7 +3,6 @@ package redis import ( "context" "fmt" - "slices" nodev1 "github.com/wundergraph/cosmo/router/gen/proto/wg/cosmo/node/v1" "github.com/wundergraph/cosmo/router/pkg/config" @@ -11,11 +10,12 @@ import ( "go.uber.org/zap" ) +const providerTypeID = "redis" + // ProviderBuilder builds Redis PubSub providers type PubSubProviderBuilder struct { ctx context.Context logger *zap.Logger - config []config.RedisEventSource hostName string routerListenAddr string adapters map[string]AdapterInterface @@ -24,14 +24,12 @@ type PubSubProviderBuilder struct { // NewProviderBuilder creates a new Redis PubSub provider builder func NewPubSubProviderBuilder( ctx context.Context, - config []config.RedisEventSource, logger *zap.Logger, hostName string, routerListenAddr string, ) *PubSubProviderBuilder { return &PubSubProviderBuilder{ ctx: ctx, - config: config, logger: logger, hostName: hostName, routerListenAddr: routerListenAddr, @@ -45,79 +43,23 @@ func (b *PubSubProviderBuilder) TypeID() string { } // Providers returns the Redis PubSub providers for the given provider IDs -func (b *PubSubProviderBuilder) Providers(ids []string) ([]datasource.PubSubProvider, error) { - b.adapters = make(map[string]AdapterInterface) - var providers []datasource.PubSubProvider - - if len(ids) == 0 { - return providers, nil - } - - // Create providers for each requested ID - for _, provider := range b.config { - if !slices.Contains(ids, provider.ID) { - continue - } - - adapter := NewAdapter(b.logger, provider.URLs) - if err := adapter.Startup(b.ctx); err != nil { - return nil, fmt.Errorf("failed to start Redis adapter for provider with ID \"%s\": %w", provider.ID, err) - } - - pubSubProvider := &Provider{ - id: provider.ID, - adapter: adapter, - } - b.adapters[provider.ID] = adapter - providers = append(providers, pubSubProvider) +func (b *PubSubProviderBuilder) BuildProvider(provider config.RedisEventSource) (datasource.PubSubProvider, error) { + adapter := NewAdapter(b.logger, provider.URLs) + if err := adapter.Startup(b.ctx); err != nil { + return nil, fmt.Errorf("failed to start Redis adapter for provider with ID \"%s\": %w", provider.ID, err) } - // Check that all requested providers were found - for _, id := range ids { - if _, ok := b.adapters[id]; !ok { - return nil, fmt.Errorf("%s provider with ID %s is not defined", b.TypeID(), id) - } - } + pubSubProvider := datasource.NewPubSubProviderImpl(provider.ID, providerTypeID, adapter, b.logger) + b.adapters[provider.ID] = adapter - return providers, nil + return pubSubProvider, nil } // DataSource creates a Redis PubSub data source for the given event configuration -func (b *PubSubProviderBuilder) DataSource(data datasource.EngineEventConfiguration) (datasource.PubSubDataSource, error) { - redisEvent, ok := data.(*nodev1.RedisEventConfiguration) - if !ok { - return nil, fmt.Errorf("failed to cast data to RedisEventConfiguration") - } - providerId := redisEvent.GetEngineEventConfiguration().GetProviderId() +func (b *PubSubProviderBuilder) BuildDataSource(event *nodev1.RedisEventConfiguration) (datasource.PubSubDataSource, error) { + providerId := event.GetEngineEventConfiguration().GetProviderId() return &PubSubDataSource{ - EventConfiguration: redisEvent, + EventConfiguration: event, RedisAdapter: b.adapters[providerId], }, nil } - -// EngineEventConfigurations returns an empty slice since Redis is not yet in proto -func (b *PubSubProviderBuilder) EngineEventConfigurations(in *nodev1.DataSourceConfiguration) []datasource.EngineEventConfiguration { - redisData := make([]datasource.EngineEventConfiguration, 0, len(in.GetCustomEvents().GetRedis())) - for _, redisEvent := range in.GetCustomEvents().GetRedis() { - redisData = append(redisData, redisEvent) - } - - return redisData -} - -// PubSubProviderBuilderFactory creates a Redis PubSub provider builder -func PubSubProviderBuilderFactory( - ctx context.Context, - config config.EventsConfiguration, - logger *zap.Logger, - hostName string, - routerListenAddr string, -) datasource.PubSubProviderBuilder { - return &PubSubProviderBuilder{ - ctx: ctx, - config: config.Providers.Redis, - logger: logger, - hostName: hostName, - routerListenAddr: routerListenAddr, - } -} diff --git a/router/pkg/pubsub/redis/pubsub_datasource.go b/router/pkg/pubsub/redis/pubsub_datasource.go index 969cba1cb3..818858e076 100644 --- a/router/pkg/pubsub/redis/pubsub_datasource.go +++ b/router/pkg/pubsub/redis/pubsub_datasource.go @@ -15,6 +15,10 @@ type PubSubDataSource struct { RedisAdapter AdapterInterface } +func (c *PubSubDataSource) GetFieldName() string { + return c.EventConfiguration.GetEngineEventConfiguration().GetFieldName() +} + // EngineEventConfiguration returns the engine event configuration func (c *PubSubDataSource) EngineEventConfiguration() *nodev1.EngineEventConfiguration { return c.EventConfiguration.GetEngineEventConfiguration() From 4b6e2113e8a69db3a5e376d1a13908c21c74b49c Mon Sep 17 00:00:00 2001 From: Alessandro Pagnin Date: Thu, 29 May 2025 13:03:06 +0200 Subject: [PATCH 090/126] chore: restored test "subscribe async with filter" --- router-tests/events/redis_events_test.go | 256 ++++++++++++----------- 1 file changed, 132 insertions(+), 124 deletions(-) diff --git a/router-tests/events/redis_events_test.go b/router-tests/events/redis_events_test.go index 268c2b583b..c7878ef01f 100644 --- a/router-tests/events/redis_events_test.go +++ b/router-tests/events/redis_events_test.go @@ -4,6 +4,8 @@ import ( "bufio" "bytes" "context" + "encoding/json" + "fmt" "net/http" "net/url" "sync/atomic" @@ -654,130 +656,136 @@ func TestRedisEvents(t *testing.T) { t.Run("subscribe async with filter", func(t *testing.T) { t.Parallel() - // topics := []string{"employeeUpdatedMyRedis"} - - // testenv.Run(t, &testenv.Config{ - // RouterConfigJSONTemplate: testenv.ConfigWithEdfsRedisJSONTemplate, - // EnableRedis: true, - // }, func(t *testing.T, xEnv *testenv.Environment) { - - // type subscriptionPayload struct { - // Data struct { - // FilteredEmployeeUpdatedMyRedis struct { - // ID float64 `graphql:"id"` - // Details struct { - // Forename string `graphql:"forename"` - // Surname string `graphql:"surname"` - // } `graphql:"details"` - // } `graphql:"filteredEmployeeUpdatedMyRedis(employeeID: 1)"` - // } `json:"data"` - // } - - // // conn.Close() is called in a cleanup defined in the function - // conn := xEnv.InitGraphQLWebSocketConnection(nil, nil, nil) - // err := conn.WriteJSON(&testenv.WebSocketMessage{ - // ID: "1", - // Type: "subscribe", - // Payload: []byte(`{"query":"subscription { filteredEmployeeUpdatedMyRedis(employeeID: 1) { id details { forename, surname } } }"}`), - // }) - - // require.NoError(t, err) - // var msg testenv.WebSocketMessage - // var payload subscriptionPayload - - // xEnv.WaitForSubscriptionCount(1, RedisWaitTimeout) - - // var produced atomic.Uint32 - // var consumed atomic.Uint32 - // const MsgCount = uint32(12) - - // go func() { - // consumed.Add(1) // the first message is ignored - - // require.Eventually(t, func() bool { - // return produced.Load() == MsgCount-11 - // }, RedisWaitTimeout, time.Millisecond*100) - // gErr := conn.ReadJSON(&msg) - // require.NoError(t, gErr) - // require.Equal(t, "1", msg.ID) - // require.Equal(t, "next", msg.Type) - // gErr = json.Unmarshal(msg.Payload, &payload) - // require.NoError(t, gErr) - // require.Equal(t, float64(11), payload.Data.FilteredEmployeeUpdatedMyRedis.ID) - // require.Equal(t, "Alexandra", payload.Data.FilteredEmployeeUpdatedMyRedis.Details.Forename) - // require.Equal(t, "Neuse", payload.Data.FilteredEmployeeUpdatedMyRedis.Details.Surname) - // consumed.Add(4) // should arrive to 5th message, with id 7 - - // require.Eventually(t, func() bool { - // return produced.Load() == MsgCount-7 - // }, RedisWaitTimeout, time.Millisecond*100) - // gErr = conn.ReadJSON(&msg) - // require.NoError(t, gErr) - // require.Equal(t, "1", msg.ID) - // require.Equal(t, "next", msg.Type) - // gErr = json.Unmarshal(msg.Payload, &payload) - // require.NoError(t, gErr) - // require.Equal(t, float64(7), payload.Data.FilteredEmployeeUpdatedMyRedis.ID) - // require.Equal(t, "Suvij", payload.Data.FilteredEmployeeUpdatedMyRedis.Details.Forename) - // require.Equal(t, "Surya", payload.Data.FilteredEmployeeUpdatedMyRedis.Details.Surname) - // consumed.Add(3) // should arrive to 8th message, with id 4 - - // require.Eventually(t, func() bool { - // return produced.Load() == MsgCount-4 - // }, RedisWaitTimeout, time.Millisecond*100) - // gErr = conn.ReadJSON(&msg) - // require.NoError(t, gErr) - // require.Equal(t, "1", msg.ID) - // require.Equal(t, "next", msg.Type) - // gErr = json.Unmarshal(msg.Payload, &payload) - // require.NoError(t, gErr) - // require.Equal(t, float64(4), payload.Data.FilteredEmployeeUpdatedMyRedis.ID) - // require.Equal(t, "Björn", payload.Data.FilteredEmployeeUpdatedMyRedis.Details.Forename) - // require.Equal(t, "Schwenzer", payload.Data.FilteredEmployeeUpdatedMyRedis.Details.Surname) - // consumed.Add(1) - - // require.Eventually(t, func() bool { - // return produced.Load() == MsgCount-3 - // }, RedisWaitTimeout, time.Millisecond*100) - // gErr = conn.ReadJSON(&msg) - // require.NoError(t, gErr) - // require.Equal(t, "1", msg.ID) - // require.Equal(t, "next", msg.Type) - // gErr = json.Unmarshal(msg.Payload, &payload) - // require.NoError(t, gErr) - // require.Equal(t, float64(3), payload.Data.FilteredEmployeeUpdatedMyRedis.ID) - // require.Equal(t, "Stefan", payload.Data.FilteredEmployeeUpdatedMyRedis.Details.Forename) - // require.Equal(t, "Avram", payload.Data.FilteredEmployeeUpdatedMyRedis.Details.Surname) - // consumed.Add(2) // should arrive to 10th message, with id 2 - - // require.Eventually(t, func() bool { - // return produced.Load() == MsgCount-1 - // }, RedisWaitTimeout, time.Millisecond*100) - // gErr = conn.ReadJSON(&msg) - // require.NoError(t, gErr) - // require.Equal(t, "1", msg.ID) - // require.Equal(t, "next", msg.Type) - // gErr = json.Unmarshal(msg.Payload, &payload) - // require.NoError(t, gErr) - // require.Equal(t, float64(1), payload.Data.FilteredEmployeeUpdatedMyRedis.ID) - // require.Equal(t, "Jens", payload.Data.FilteredEmployeeUpdatedMyRedis.Details.Forename) - // require.Equal(t, "Neuse", payload.Data.FilteredEmployeeUpdatedMyRedis.Details.Surname) - // consumed.Add(1) - // }() - - // // Events 1, 3, 4, 7, and 11 should be included - // for i := MsgCount; i > 0; i-- { - // require.Eventually(t, func() bool { - // return consumed.Load() >= MsgCount-i - // }, RedisWaitTimeout, time.Millisecond*100) - // produceRedisMessage(t, xEnv, topics[0], fmt.Sprintf(`{"__typename":"Employee","id":%d}`, i)) - // produced.Add(1) - // } - - // require.Eventually(t, func() bool { - // return consumed.Load() == MsgCount && produced.Load() == MsgCount - // }, RedisWaitTimeout, time.Millisecond*100) - // }) + topics := []string{"employeeUpdatedMyRedis"} + + testenv.Run(t, &testenv.Config{ + RouterConfigJSONTemplate: testenv.ConfigWithEdfsRedisJSONTemplate, + EnableRedis: true, + }, func(t *testing.T, xEnv *testenv.Environment) { + + type subscriptionPayload struct { + Data struct { + FilteredEmployeeUpdatedMyRedis struct { + ID float64 `graphql:"id"` + Details struct { + Forename string `graphql:"forename"` + Surname string `graphql:"surname"` + } `graphql:"details"` + } `graphql:"filteredEmployeeUpdatedMyRedis(ids: [1, 3, 4, 7, 11])"` + } `json:"data"` + } + + // conn.Close() is called in a cleanup defined in the function + conn := xEnv.InitGraphQLWebSocketConnection(nil, nil, nil) + err := conn.WriteJSON(&testenv.WebSocketMessage{ + ID: "1", + Type: "subscribe", + Payload: []byte(`{"query":"subscription { filteredEmployeeUpdatedMyRedis(ids: [1, 3, 4, 7, 11]) { id details { forename, surname } } }"}`), + }) + require.NoError(t, err) + + // msg1 := testenv.WebSocketMessage{} + // conn.ReadJSON(&msg1) + // require.Equal(t, "1", msg1.ID) + // require.Equal(t, "next", msg1.Type) + // require.Equal(t, "{\"data\":{\"filteredEmployeeUpdatedMyRedis\":{\"id\":1,\"details\":{\"forename\":\"Jens\",\"surname\":\"Neuse\"}}}}", string(msg1.Payload)) + + var msg testenv.WebSocketMessage + var payload subscriptionPayload + + xEnv.WaitForSubscriptionCount(1, RedisWaitTimeout) + + var produced atomic.Uint32 + var consumed atomic.Uint32 + const MsgCount = uint32(12) + + go func() { + consumed.Add(1) // the first message is ignored + + require.Eventually(t, func() bool { + return produced.Load() == MsgCount-11 + }, RedisWaitTimeout, time.Millisecond*100) + gErr := conn.ReadJSON(&msg) + require.NoError(t, gErr) + require.Equal(t, "1", msg.ID) + require.Equal(t, "next", msg.Type) + gErr = json.Unmarshal(msg.Payload, &payload) + require.NoError(t, gErr) + require.Equal(t, float64(11), payload.Data.FilteredEmployeeUpdatedMyRedis.ID) + require.Equal(t, "Alexandra", payload.Data.FilteredEmployeeUpdatedMyRedis.Details.Forename) + require.Equal(t, "Neuse", payload.Data.FilteredEmployeeUpdatedMyRedis.Details.Surname) + consumed.Add(4) // should arrive to 5th message, with id 7 + + require.Eventually(t, func() bool { + return produced.Load() == MsgCount-7 + }, RedisWaitTimeout, time.Millisecond*100) + gErr = conn.ReadJSON(&msg) + require.NoError(t, gErr) + require.Equal(t, "1", msg.ID) + require.Equal(t, "next", msg.Type) + gErr = json.Unmarshal(msg.Payload, &payload) + require.NoError(t, gErr) + require.Equal(t, float64(7), payload.Data.FilteredEmployeeUpdatedMyRedis.ID) + require.Equal(t, "Suvij", payload.Data.FilteredEmployeeUpdatedMyRedis.Details.Forename) + require.Equal(t, "Surya", payload.Data.FilteredEmployeeUpdatedMyRedis.Details.Surname) + consumed.Add(3) // should arrive to 8th message, with id 4 + + require.Eventually(t, func() bool { + return produced.Load() == MsgCount-4 + }, RedisWaitTimeout, time.Millisecond*100) + gErr = conn.ReadJSON(&msg) + require.NoError(t, gErr) + require.Equal(t, "1", msg.ID) + require.Equal(t, "next", msg.Type) + gErr = json.Unmarshal(msg.Payload, &payload) + require.NoError(t, gErr) + require.Equal(t, float64(4), payload.Data.FilteredEmployeeUpdatedMyRedis.ID) + require.Equal(t, "Björn", payload.Data.FilteredEmployeeUpdatedMyRedis.Details.Forename) + require.Equal(t, "Schwenzer", payload.Data.FilteredEmployeeUpdatedMyRedis.Details.Surname) + consumed.Add(1) + + require.Eventually(t, func() bool { + return produced.Load() == MsgCount-3 + }, RedisWaitTimeout, time.Millisecond*100) + gErr = conn.ReadJSON(&msg) + require.NoError(t, gErr) + require.Equal(t, "1", msg.ID) + require.Equal(t, "next", msg.Type) + gErr = json.Unmarshal(msg.Payload, &payload) + require.NoError(t, gErr) + require.Equal(t, float64(3), payload.Data.FilteredEmployeeUpdatedMyRedis.ID) + require.Equal(t, "Stefan", payload.Data.FilteredEmployeeUpdatedMyRedis.Details.Forename) + require.Equal(t, "Avram", payload.Data.FilteredEmployeeUpdatedMyRedis.Details.Surname) + consumed.Add(2) // should arrive to 10th message, with id 2 + + require.Eventually(t, func() bool { + return produced.Load() == MsgCount-1 + }, RedisWaitTimeout, time.Millisecond*100) + gErr = conn.ReadJSON(&msg) + require.NoError(t, gErr) + require.Equal(t, "1", msg.ID) + require.Equal(t, "next", msg.Type) + gErr = json.Unmarshal(msg.Payload, &payload) + require.NoError(t, gErr) + require.Equal(t, float64(1), payload.Data.FilteredEmployeeUpdatedMyRedis.ID) + require.Equal(t, "Jens", payload.Data.FilteredEmployeeUpdatedMyRedis.Details.Forename) + require.Equal(t, "Neuse", payload.Data.FilteredEmployeeUpdatedMyRedis.Details.Surname) + consumed.Add(1) + }() + + // Events 1, 3, 4, 7, and 11 should be included + for i := MsgCount; i > 0; i-- { + require.Eventually(t, func() bool { + return consumed.Load() >= MsgCount-i + }, RedisWaitTimeout, time.Millisecond*100) + produceRedisMessage(t, xEnv, topics[0], fmt.Sprintf(`{"__typename":"Employee","id":%d}`, i)) + produced.Add(1) + } + + require.Eventually(t, func() bool { + return consumed.Load() == MsgCount && produced.Load() == MsgCount + }, RedisWaitTimeout, time.Millisecond*100) + }) }) t.Run("message with invalid JSON should give a specific error", func(t *testing.T) { From ad15f0071c35b0ba4177377861e90f7d06fdeed2 Mon Sep 17 00:00:00 2001 From: Alessandro Pagnin Date: Thu, 29 May 2025 13:15:53 +0200 Subject: [PATCH 091/126] fix: remove unnecessary URLs from Redis event source in tests and clean up Redis adapter startup logic --- router/pkg/pubsub/pubsub_test.go | 2 +- router/pkg/pubsub/redis/provider_builder.go | 5 ----- 2 files changed, 1 insertion(+), 6 deletions(-) diff --git a/router/pkg/pubsub/pubsub_test.go b/router/pkg/pubsub/pubsub_test.go index ae0be7c118..282a745f80 100644 --- a/router/pkg/pubsub/pubsub_test.go +++ b/router/pkg/pubsub/pubsub_test.go @@ -455,7 +455,7 @@ func TestBuildProvidersAndDataSources_Redis_OK(t *testing.T) { providers, dataSources, err := BuildProvidersAndDataSources(ctx, config.EventsConfiguration{ Providers: config.EventProviders{ Redis: []config.RedisEventSource{ - {ID: "provider-1", URLs: []string{"redis://localhost:6379"}}, + {ID: "provider-1"}, }, }, }, zap.NewNop(), dsConfs, "host", "addr") diff --git a/router/pkg/pubsub/redis/provider_builder.go b/router/pkg/pubsub/redis/provider_builder.go index 346f7982c0..5f609f2ac5 100644 --- a/router/pkg/pubsub/redis/provider_builder.go +++ b/router/pkg/pubsub/redis/provider_builder.go @@ -2,7 +2,6 @@ package redis import ( "context" - "fmt" nodev1 "github.com/wundergraph/cosmo/router/gen/proto/wg/cosmo/node/v1" "github.com/wundergraph/cosmo/router/pkg/config" @@ -45,10 +44,6 @@ func (b *PubSubProviderBuilder) TypeID() string { // Providers returns the Redis PubSub providers for the given provider IDs func (b *PubSubProviderBuilder) BuildProvider(provider config.RedisEventSource) (datasource.PubSubProvider, error) { adapter := NewAdapter(b.logger, provider.URLs) - if err := adapter.Startup(b.ctx); err != nil { - return nil, fmt.Errorf("failed to start Redis adapter for provider with ID \"%s\": %w", provider.ID, err) - } - pubSubProvider := datasource.NewPubSubProviderImpl(provider.ID, providerTypeID, adapter, b.logger) b.adapters[provider.ID] = adapter From 156916b213ba7c9603e41f082da688ae560376e4 Mon Sep 17 00:00:00 2001 From: Alessandro Pagnin Date: Fri, 30 May 2025 16:24:02 +0200 Subject: [PATCH 092/126] chore: build the datasource when the planner gets int o ConfigureFetch or ConfigureSubscription, to avoid data leaking between graphql requests --- .../pubsub/datasource/datasource_factory.go | 17 ++ router/pkg/pubsub/datasource/factory.go | 24 +- router/pkg/pubsub/datasource/mocks.go | 53 ++++ router/pkg/pubsub/datasource/planner.go | 93 ++++--- router/pkg/pubsub/datasource/provider.go | 4 +- router/pkg/pubsub/kafka/provider_builder.go | 22 +- router/pkg/pubsub/kafka/pubsub_datasource.go | 45 ++-- .../pubsub/kafka/pubsub_datasource_test.go | 121 +++------ router/pkg/pubsub/nats/provider_builder.go | 36 ++- .../pkg/pubsub/nats/provider_builder_test.go | 57 ----- router/pkg/pubsub/nats/pubsub_datasource.go | 98 ++++---- .../pkg/pubsub/nats/pubsub_datasource_test.go | 230 ++++++++---------- router/pkg/pubsub/pubsub.go | 9 +- 13 files changed, 411 insertions(+), 398 deletions(-) create mode 100644 router/pkg/pubsub/datasource/datasource_factory.go diff --git a/router/pkg/pubsub/datasource/datasource_factory.go b/router/pkg/pubsub/datasource/datasource_factory.go new file mode 100644 index 0000000000..2eb8db4d7f --- /dev/null +++ b/router/pkg/pubsub/datasource/datasource_factory.go @@ -0,0 +1,17 @@ +package datasource + +type PubSubDataSourceFactory[P, E any] struct { + providerBuilder PubSubProviderBuilder[P, E] + event E +} + +func (p *PubSubDataSourceFactory[P, E]) BuildDataSource() (PubSubDataSource, error) { + return p.providerBuilder.BuildDataSource(p.event) +} + +func NewPubSubDataSourceFactory[P, E any](builder PubSubProviderBuilder[P, E], event E) *PubSubDataSourceFactory[P, E] { + return &PubSubDataSourceFactory[P, E]{ + providerBuilder: builder, + event: event, + } +} diff --git a/router/pkg/pubsub/datasource/factory.go b/router/pkg/pubsub/datasource/factory.go index c531540102..1b9c2d9083 100644 --- a/router/pkg/pubsub/datasource/factory.go +++ b/router/pkg/pubsub/datasource/factory.go @@ -8,28 +8,28 @@ import ( "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/plan" ) -func NewFactory(executionContext context.Context, pubSubDataSource PubSubDataSource) *Factory { - return &Factory{ - pubSubDataSource: pubSubDataSource, - executionContext: executionContext, +func NewFactory[P, E any](executionContext context.Context, pubSubDataSourceFactory *PubSubDataSourceFactory[P, E]) *Factory[P, E] { + return &Factory[P, E]{ + pubSubDataSourceFactory: pubSubDataSourceFactory, + executionContext: executionContext, } } -type Factory struct { - pubSubDataSource PubSubDataSource - executionContext context.Context +type Factory[P, E any] struct { + pubSubDataSourceFactory *PubSubDataSourceFactory[P, E] + executionContext context.Context } -func (f *Factory) Planner(_ abstractlogger.Logger) plan.DataSourcePlanner[PubSubDataSource] { - return &Planner{ - pubSubDataSource: f.pubSubDataSource, +func (f *Factory[P, E]) Planner(_ abstractlogger.Logger) plan.DataSourcePlanner[*PubSubDataSourceFactory[P, E]] { + return &Planner[P, E]{ + pubSubDataSourceFactory: f.pubSubDataSourceFactory, } } -func (f *Factory) Context() context.Context { +func (f *Factory[P, E]) Context() context.Context { return f.executionContext } -func (f *Factory) UpstreamSchema(dataSourceConfig plan.DataSourceConfiguration[PubSubDataSource]) (*ast.Document, bool) { +func (f *Factory[P, E]) UpstreamSchema(dataSourceConfig plan.DataSourceConfiguration[*PubSubDataSourceFactory[P, E]]) (*ast.Document, bool) { return nil, false } diff --git a/router/pkg/pubsub/datasource/mocks.go b/router/pkg/pubsub/datasource/mocks.go index 4eb4f0ba44..2059a5788f 100644 --- a/router/pkg/pubsub/datasource/mocks.go +++ b/router/pkg/pubsub/datasource/mocks.go @@ -791,6 +791,59 @@ func (_c *MockPubSubProviderBuilder_BuildDataSource_Call[P, E]) RunAndReturn(run return _c } +// BuildDataSourceFactory provides a mock function for the type MockPubSubProviderBuilder +func (_mock *MockPubSubProviderBuilder[P, E]) BuildDataSourceFactory(data E) *PubSubDataSourceFactory[P, E] { + ret := _mock.Called(data) + + if len(ret) == 0 { + panic("no return value specified for BuildDataSourceFactory") + } + + var r0 *PubSubDataSourceFactory[P, E] + if returnFunc, ok := ret.Get(0).(func(E) *PubSubDataSourceFactory[P, E]); ok { + r0 = returnFunc(data) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*PubSubDataSourceFactory[P, E]) + } + } + return r0 +} + +// MockPubSubProviderBuilder_BuildDataSourceFactory_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'BuildDataSourceFactory' +type MockPubSubProviderBuilder_BuildDataSourceFactory_Call[P any, E any] struct { + *mock.Call +} + +// BuildDataSourceFactory is a helper method to define mock.On call +// - data E +func (_e *MockPubSubProviderBuilder_Expecter[P, E]) BuildDataSourceFactory(data interface{}) *MockPubSubProviderBuilder_BuildDataSourceFactory_Call[P, E] { + return &MockPubSubProviderBuilder_BuildDataSourceFactory_Call[P, E]{Call: _e.mock.On("BuildDataSourceFactory", data)} +} + +func (_c *MockPubSubProviderBuilder_BuildDataSourceFactory_Call[P, E]) Run(run func(data E)) *MockPubSubProviderBuilder_BuildDataSourceFactory_Call[P, E] { + _c.Call.Run(func(args mock.Arguments) { + var arg0 E + if args[0] != nil { + arg0 = args[0].(E) + } + run( + arg0, + ) + }) + return _c +} + +func (_c *MockPubSubProviderBuilder_BuildDataSourceFactory_Call[P, E]) Return(pubSubDataSourceFactory *PubSubDataSourceFactory[P, E]) *MockPubSubProviderBuilder_BuildDataSourceFactory_Call[P, E] { + _c.Call.Return(pubSubDataSourceFactory) + return _c +} + +func (_c *MockPubSubProviderBuilder_BuildDataSourceFactory_Call[P, E]) RunAndReturn(run func(data E) *PubSubDataSourceFactory[P, E]) *MockPubSubProviderBuilder_BuildDataSourceFactory_Call[P, E] { + _c.Call.Return(run) + return _c +} + // BuildProvider provides a mock function for the type MockPubSubProviderBuilder func (_mock *MockPubSubProviderBuilder[P, E]) BuildProvider(options P) (PubSubProvider, error) { ret := _mock.Called(options) diff --git a/router/pkg/pubsub/datasource/planner.go b/router/pkg/pubsub/datasource/planner.go index 791a3d93cc..786385df41 100644 --- a/router/pkg/pubsub/datasource/planner.go +++ b/router/pkg/pubsub/datasource/planner.go @@ -11,52 +11,62 @@ import ( "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/resolve" ) -type Planner struct { - id int - pubSubDataSource PubSubDataSource - rootFieldRef int - variables resolve.Variables - visitor *plan.Visitor +type Planner[P, E any] struct { + id int + pubSubDataSourceFactory *PubSubDataSourceFactory[P, E] + rootFieldRef int + variables resolve.Variables + visitor *plan.Visitor + extractFn func(tpl string) (string, error) } -func (p *Planner) SetID(id int) { +func (p *Planner[P, E]) SetID(id int) { p.id = id } -func (p *Planner) ID() (id int) { +func (p *Planner[P, E]) ID() (id int) { return p.id } -func (p *Planner) DownstreamResponseFieldAlias(downstreamFieldRef int) (alias string, exists bool) { +func (p *Planner[P, E]) DownstreamResponseFieldAlias(downstreamFieldRef int) (alias string, exists bool) { // skip, not required return } -func (p *Planner) DataSourcePlanningBehavior() plan.DataSourcePlanningBehavior { +func (p *Planner[P, E]) DataSourcePlanningBehavior() plan.DataSourcePlanningBehavior { return plan.DataSourcePlanningBehavior{ MergeAliasedRootNodes: false, OverrideFieldPathFromAlias: false, } } -func (p *Planner) Register(visitor *plan.Visitor, configuration plan.DataSourceConfiguration[PubSubDataSource], _ plan.DataSourcePlannerConfiguration) error { +func (p *Planner[P, E]) Register(visitor *plan.Visitor, configuration plan.DataSourceConfiguration[*PubSubDataSourceFactory[P, E]], _ plan.DataSourcePlannerConfiguration) error { p.visitor = visitor visitor.Walker.RegisterEnterFieldVisitor(p) visitor.Walker.RegisterEnterDocumentVisitor(p) - p.pubSubDataSource = configuration.CustomConfiguration() + p.pubSubDataSourceFactory = configuration.CustomConfiguration() return nil } -func (p *Planner) ConfigureFetch() resolve.FetchConfiguration { - var dataSource resolve.DataSource - - if p.pubSubDataSource == nil { +func (p *Planner[P, E]) ConfigureFetch() resolve.FetchConfiguration { + if p.pubSubDataSourceFactory == nil { p.visitor.Walker.StopWithInternalErr(fmt.Errorf("data source not set")) return resolve.FetchConfiguration{} } - dataSource, err := p.pubSubDataSource.ResolveDataSource() + pubSubDataSource, err := p.pubSubDataSourceFactory.BuildDataSource() + if err != nil { + p.visitor.Walker.StopWithInternalErr(fmt.Errorf("failed to build data source: %w", err)) + return resolve.FetchConfiguration{} + } + + err = pubSubDataSource.TransformEventData(p.extractFn) + if err != nil { + p.visitor.Walker.StopWithInternalErr(err) + } + + dataSource, err := pubSubDataSource.ResolveDataSource() if err != nil { p.visitor.Walker.StopWithInternalErr(fmt.Errorf("failed to get data source: %w", err)) return resolve.FetchConfiguration{} @@ -68,7 +78,7 @@ func (p *Planner) ConfigureFetch() resolve.FetchConfiguration { return resolve.FetchConfiguration{} } - input, err := p.pubSubDataSource.ResolveDataSourceInput(event) + input, err := pubSubDataSource.ResolveDataSourceInput(event) if err != nil { p.visitor.Walker.StopWithInternalErr(fmt.Errorf("failed to get resolve data source input: %w", err)) return resolve.FetchConfiguration{} @@ -79,24 +89,35 @@ func (p *Planner) ConfigureFetch() resolve.FetchConfiguration { Variables: p.variables, DataSource: dataSource, PostProcessing: resolve.PostProcessingConfiguration{ - MergePath: []string{p.pubSubDataSource.GetFieldName()}, + MergePath: []string{pubSubDataSource.GetFieldName()}, }, } } -func (p *Planner) ConfigureSubscription() plan.SubscriptionConfiguration { - if p.pubSubDataSource == nil { +func (p *Planner[P, E]) ConfigureSubscription() plan.SubscriptionConfiguration { + if p.pubSubDataSourceFactory == nil { p.visitor.Walker.StopWithInternalErr(fmt.Errorf("data source not set")) return plan.SubscriptionConfiguration{} } - dataSource, err := p.pubSubDataSource.ResolveDataSourceSubscription() + pubSubDataSource, err := p.pubSubDataSourceFactory.BuildDataSource() if err != nil { p.visitor.Walker.StopWithInternalErr(fmt.Errorf("failed to get resolve data source subscription: %w", err)) return plan.SubscriptionConfiguration{} } - input, err := p.pubSubDataSource.ResolveDataSourceSubscriptionInput() + err = pubSubDataSource.TransformEventData(p.extractFn) + if err != nil { + p.visitor.Walker.StopWithInternalErr(err) + } + + dataSource, err := pubSubDataSource.ResolveDataSourceSubscription() + if err != nil { + p.visitor.Walker.StopWithInternalErr(fmt.Errorf("failed to get resolve data source subscription: %w", err)) + return plan.SubscriptionConfiguration{} + } + + input, err := pubSubDataSource.ResolveDataSourceSubscriptionInput() if err != nil { p.visitor.Walker.StopWithInternalErr(fmt.Errorf("failed to get resolve data source subscription input: %w", err)) return plan.SubscriptionConfiguration{} @@ -107,13 +128,13 @@ func (p *Planner) ConfigureSubscription() plan.SubscriptionConfiguration { Variables: p.variables, DataSource: dataSource, PostProcessing: resolve.PostProcessingConfiguration{ - MergePath: []string{p.pubSubDataSource.GetFieldName()}, + MergePath: []string{pubSubDataSource.GetFieldName()}, }, } } -func (p *Planner) addContextVariableByArgumentRef(argumentRef int, argumentPath []string) (string, error) { - variablePath, err := p.visitor.Operation.VariablePathByArgumentRefAndArgumentPath(argumentRef, argumentPath, p.visitor.Walker.Ancestors[0].Ref) +func (p *Planner[P, E]) addContextVariableByArgumentRef(argumentRef int, operationTypeRef int, argumentPath []string) (string, error) { + variablePath, err := p.visitor.Operation.VariablePathByArgumentRefAndArgumentPath(argumentRef, argumentPath, operationTypeRef) if err != nil { return "", err } @@ -128,7 +149,7 @@ func (p *Planner) addContextVariableByArgumentRef(argumentRef int, argumentPath return variablePlaceHolder, nil } -func (p *Planner) extractArgumentTemplate(fieldRef int, template string) (string, error) { +func (p *Planner[P, E]) extractArgumentTemplate(fieldRef int, operationDefinitionRef int, typeDefinitionRef int, template string) (string, error) { matches := argument_templates.ArgumentTemplateRegex.FindAllStringSubmatch(template, -1) // If no argument templates are defined, there are only static values if len(matches) < 1 { @@ -136,7 +157,7 @@ func (p *Planner) extractArgumentTemplate(fieldRef int, template string) (string } fieldNameBytes := p.visitor.Operation.FieldNameBytes(fieldRef) // TODO: handling for interfaces and unions - fieldDefinitionRef, ok := p.visitor.Definition.ObjectTypeDefinitionFieldWithName(p.visitor.Walker.EnclosingTypeDefinition.Ref, fieldNameBytes) + fieldDefinitionRef, ok := p.visitor.Definition.ObjectTypeDefinitionFieldWithName(typeDefinitionRef, fieldNameBytes) if !ok { return "", fmt.Errorf(`expected field definition to exist for field "%s"`, fieldNameBytes) } @@ -156,7 +177,7 @@ func (p *Planner) extractArgumentTemplate(fieldRef int, template string) (string return "", fmt.Errorf(`operation field "%s" does not define argument "%s"`, fieldNameBytes, argumentNameBytes) } // variablePlaceholder has the form $$0$$, $$1$$, etc. - variablePlaceholder, err := p.addContextVariableByArgumentRef(argumentRef, validationResult.ArgumentPath) + variablePlaceholder, err := p.addContextVariableByArgumentRef(argumentRef, operationDefinitionRef, validationResult.ArgumentPath) if err != nil { return "", fmt.Errorf(`failed to retrieve variable placeholder for argument ""%s" defined on operation field "%s": %w`, argumentNameBytes, fieldNameBytes, err) } @@ -167,23 +188,21 @@ func (p *Planner) extractArgumentTemplate(fieldRef int, template string) (string return templateWithVariableTemplateReplacements, nil } -func (p *Planner) EnterDocument(_, _ *ast.Document) { +func (p *Planner[P, E]) EnterDocument(_, _ *ast.Document) { p.rootFieldRef = -1 } -func (p *Planner) EnterField(ref int) { +func (p *Planner[P, E]) EnterField(ref int) { if p.rootFieldRef != -1 { // This is a nested field; nothing needs to be done return } p.rootFieldRef = ref - extractFn := func(tpl string) (string, error) { - return p.extractArgumentTemplate(ref, tpl) - } + operationDefinitionRef := p.visitor.Walker.Ancestors[0].Ref + typeDefinitionRef := p.visitor.Walker.EnclosingTypeDefinition.Ref - err := p.pubSubDataSource.TransformEventData(extractFn) - if err != nil { - p.visitor.Walker.StopWithInternalErr(err) + p.extractFn = func(tpl string) (string, error) { + return p.extractArgumentTemplate(ref, operationDefinitionRef, typeDefinitionRef, tpl) } } diff --git a/router/pkg/pubsub/datasource/provider.go b/router/pkg/pubsub/datasource/provider.go index f18b219503..3c7b8c0962 100644 --- a/router/pkg/pubsub/datasource/provider.go +++ b/router/pkg/pubsub/datasource/provider.go @@ -24,11 +24,13 @@ type PubSubProvider interface { } // PubSubProviderBuilder is the interface that the provider builder must implement. -type PubSubProviderBuilder[P any, E any] interface { +type PubSubProviderBuilder[P, E any] interface { // TypeID Get the provider type id (e.g. "kafka", "nats") TypeID() string // BuildProvider Build the provider and the adapter BuildProvider(options P) (PubSubProvider, error) // BuildDataSource Build the data source for the given provider and event configuration BuildDataSource(data E) (PubSubDataSource, error) + // BuildDataSource Build the data source for the given provider and event configuration + BuildDataSourceFactory(data E) *PubSubDataSourceFactory[P, E] } diff --git a/router/pkg/pubsub/kafka/provider_builder.go b/router/pkg/pubsub/kafka/provider_builder.go index d7b7663200..d62c15280d 100644 --- a/router/pkg/pubsub/kafka/provider_builder.go +++ b/router/pkg/pubsub/kafka/provider_builder.go @@ -28,6 +28,10 @@ func (p *PubSubProviderBuilder) TypeID() string { return providerTypeID } +func (p *PubSubProviderBuilder) BuildDataSourceFactory(data *nodev1.KafkaEventConfiguration) *datasource.PubSubDataSourceFactory[config.KafkaEventSource, *nodev1.KafkaEventConfiguration] { + return datasource.NewPubSubDataSourceFactory(p, data) +} + func (p *PubSubProviderBuilder) BuildDataSource(data *nodev1.KafkaEventConfiguration) (datasource.PubSubDataSource, error) { providerId := data.GetEngineEventConfiguration().GetProviderId() adapter, ok := p.adapters[providerId] @@ -35,9 +39,23 @@ func (p *PubSubProviderBuilder) BuildDataSource(data *nodev1.KafkaEventConfigura return nil, fmt.Errorf("failed to get adapter for provider %s with ID %s", p.TypeID(), providerId) } + var eventType EventType + switch data.GetEngineEventConfiguration().GetType() { + case nodev1.EventType_PUBLISH: + eventType = EventTypePublish + case nodev1.EventType_SUBSCRIBE: + eventType = EventTypeSubscribe + default: + return nil, fmt.Errorf("unsupported event type: %s", data.GetEngineEventConfiguration().GetType()) + } + return &PubSubDataSource{ - EventConfiguration: data, - KafkaAdapter: adapter, + fieldName: data.GetEngineEventConfiguration().GetFieldName(), + typeName: data.GetEngineEventConfiguration().GetTypeName(), + eventType: eventType, + topics: data.GetTopics(), + providerId: providerId, + KafkaAdapter: adapter, }, nil } diff --git a/router/pkg/pubsub/kafka/pubsub_datasource.go b/router/pkg/pubsub/kafka/pubsub_datasource.go index a04d714208..527eab1b12 100644 --- a/router/pkg/pubsub/kafka/pubsub_datasource.go +++ b/router/pkg/pubsub/kafka/pubsub_datasource.go @@ -4,50 +4,54 @@ import ( "encoding/json" "fmt" - nodev1 "github.com/wundergraph/cosmo/router/gen/proto/wg/cosmo/node/v1" "github.com/wundergraph/cosmo/router/pkg/pubsub/datasource" "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/resolve" ) +type EventType int + +const ( + EventTypePublish EventType = iota + EventTypeSubscribe +) + type PubSubDataSource struct { - EventConfiguration *nodev1.KafkaEventConfiguration - KafkaAdapter AdapterInterface + fieldName string + typeName string + eventType EventType + topics []string + providerId string + + KafkaAdapter AdapterInterface } func (c *PubSubDataSource) GetFieldName() string { - return c.EventConfiguration.GetEngineEventConfiguration().GetFieldName() + return c.fieldName } func (c *PubSubDataSource) ResolveDataSource() (resolve.DataSource, error) { var dataSource resolve.DataSource - eventType := c.EventConfiguration.GetEngineEventConfiguration().GetType() - switch eventType { - case nodev1.EventType_PUBLISH: + switch c.eventType { + case EventTypePublish: dataSource = &PublishDataSource{ pubSub: c.KafkaAdapter, } default: - return nil, fmt.Errorf("failed to configure fetch: invalid event type \"%s\" for Kafka", eventType.String()) + return nil, fmt.Errorf("failed to configure fetch: invalid event type \"%d\" for Kafka", c.eventType) } return dataSource, nil } func (c *PubSubDataSource) ResolveDataSourceInput(eventData []byte) (string, error) { - topics := c.EventConfiguration.GetTopics() - - if len(topics) != 1 { - return "", fmt.Errorf("publish events should define one topic but received %d", len(topics)) + if len(c.topics) != 1 { + return "", fmt.Errorf("publish events should define one topic but received %d", len(c.topics)) } - topic := topics[0] - - providerId := c.EventConfiguration.GetEngineEventConfiguration().GetProviderId() - evtCfg := PublishEventConfiguration{ - ProviderID: providerId, - Topic: topic, + ProviderID: c.providerId, + Topic: c.topics[0], Data: eventData, } @@ -61,10 +65,9 @@ func (c *PubSubDataSource) ResolveDataSourceSubscription() (resolve.Subscription } func (c *PubSubDataSource) ResolveDataSourceSubscriptionInput() (string, error) { - providerId := c.EventConfiguration.GetEngineEventConfiguration().GetProviderId() evtCfg := SubscriptionEventConfiguration{ - ProviderID: providerId, - Topics: c.EventConfiguration.GetTopics(), + ProviderID: c.providerId, + Topics: c.topics, } object, err := json.Marshal(evtCfg) if err != nil { diff --git a/router/pkg/pubsub/kafka/pubsub_datasource_test.go b/router/pkg/pubsub/kafka/pubsub_datasource_test.go index 626619f2be..bf548728d9 100644 --- a/router/pkg/pubsub/kafka/pubsub_datasource_test.go +++ b/router/pkg/pubsub/kafka/pubsub_datasource_test.go @@ -8,29 +8,19 @@ import ( "github.com/stretchr/testify/mock" "github.com/stretchr/testify/require" - nodev1 "github.com/wundergraph/cosmo/router/gen/proto/wg/cosmo/node/v1" "github.com/wundergraph/cosmo/router/pkg/pubsub/pubsubtest" ) func TestKafkaPubSubDataSource(t *testing.T) { - // Create event configuration with required fields - engineEventConfig := &nodev1.EngineEventConfiguration{ - ProviderId: "test-provider", - Type: nodev1.EventType_PUBLISH, - TypeName: "TestType", - FieldName: "testField", - } - - kafkaCfg := &nodev1.KafkaEventConfiguration{ - EngineEventConfiguration: engineEventConfig, - Topics: []string{"test-topic"}, - } - // Create the data source to test with a real adapter adapter := &Adapter{} pubsub := &PubSubDataSource{ - EventConfiguration: kafkaCfg, - KafkaAdapter: adapter, + KafkaAdapter: adapter, + fieldName: "testField", + typeName: "TestType", + eventType: EventTypePublish, + topics: []string{"test-topic"}, + providerId: "test-provider", } // Run the standard test suite @@ -39,19 +29,6 @@ func TestKafkaPubSubDataSource(t *testing.T) { // TestPubSubDataSourceWithMockAdapter tests the PubSubDataSource with a mocked adapter func TestPubSubDataSourceWithMockAdapter(t *testing.T) { - // Create event configuration with required fields - engineEventConfig := &nodev1.EngineEventConfiguration{ - ProviderId: "test-provider", - Type: nodev1.EventType_PUBLISH, - TypeName: "TestType", - FieldName: "testField", - } - - kafkaCfg := &nodev1.KafkaEventConfiguration{ - EngineEventConfiguration: engineEventConfig, - Topics: []string{"test-topic"}, - } - // Create mock adapter mockAdapter := NewMockAdapterInterface(t) @@ -62,8 +39,12 @@ func TestPubSubDataSourceWithMockAdapter(t *testing.T) { // Create the data source with mock adapter pubsub := &PubSubDataSource{ - EventConfiguration: kafkaCfg, - KafkaAdapter: mockAdapter, + KafkaAdapter: mockAdapter, + fieldName: "testField", + typeName: "TestType", + eventType: EventTypePublish, + topics: []string{"test-topic"}, + providerId: "test-provider", } // Get the data source @@ -83,26 +64,17 @@ func TestPubSubDataSourceWithMockAdapter(t *testing.T) { // TestPubSubDataSource_GetResolveDataSource_WrongType tests the PubSubDataSource with a mocked adapter func TestPubSubDataSource_GetResolveDataSource_WrongType(t *testing.T) { - // Create event configuration with required fields - engineEventConfig := &nodev1.EngineEventConfiguration{ - ProviderId: "test-provider", - Type: nodev1.EventType_SUBSCRIBE, - TypeName: "TestType", - FieldName: "testField", - } - - kafkaCfg := &nodev1.KafkaEventConfiguration{ - EngineEventConfiguration: engineEventConfig, - Topics: []string{"test-topic"}, - } - // Create mock adapter mockAdapter := NewMockAdapterInterface(t) // Create the data source with mock adapter pubsub := &PubSubDataSource{ - EventConfiguration: kafkaCfg, - KafkaAdapter: mockAdapter, + KafkaAdapter: mockAdapter, + fieldName: "testField", + typeName: "TestType", + eventType: EventTypeSubscribe, + topics: []string{"test-topic"}, + providerId: "test-provider", } // Get the data source @@ -113,22 +85,13 @@ func TestPubSubDataSource_GetResolveDataSource_WrongType(t *testing.T) { // TestPubSubDataSource_GetResolveDataSourceInput_MultipleTopics tests the PubSubDataSource with a mocked adapter func TestPubSubDataSource_GetResolveDataSourceInput_MultipleTopics(t *testing.T) { - // Create event configuration with required fields - engineEventConfig := &nodev1.EngineEventConfiguration{ - ProviderId: "test-provider", - Type: nodev1.EventType_PUBLISH, - TypeName: "TestType", - FieldName: "testField", - } - - kafkaCfg := &nodev1.KafkaEventConfiguration{ - EngineEventConfiguration: engineEventConfig, - Topics: []string{"test-topic-1", "test-topic-2"}, - } - // Create the data source with mock adapter pubsub := &PubSubDataSource{ - EventConfiguration: kafkaCfg, + fieldName: "testField", + typeName: "TestType", + eventType: EventTypePublish, + topics: []string{"test-topic-1", "test-topic-2"}, + providerId: "test-provider", } // Get the input @@ -139,22 +102,13 @@ func TestPubSubDataSource_GetResolveDataSourceInput_MultipleTopics(t *testing.T) // TestPubSubDataSource_GetResolveDataSourceInput_NoTopics tests the PubSubDataSource with a mocked adapter func TestPubSubDataSource_GetResolveDataSourceInput_NoTopics(t *testing.T) { - // Create event configuration with required fields - engineEventConfig := &nodev1.EngineEventConfiguration{ - ProviderId: "test-provider", - Type: nodev1.EventType_PUBLISH, - TypeName: "TestType", - FieldName: "testField", - } - - kafkaCfg := &nodev1.KafkaEventConfiguration{ - EngineEventConfiguration: engineEventConfig, - Topics: []string{}, - } - // Create the data source with mock adapter pubsub := &PubSubDataSource{ - EventConfiguration: kafkaCfg, + fieldName: "testField", + typeName: "TestType", + eventType: EventTypePublish, + topics: []string{}, + providerId: "test-provider", } // Get the input @@ -167,22 +121,13 @@ func TestPubSubDataSource_GetResolveDataSourceInput_NoTopics(t *testing.T) { // for multiple topics. The publish and resolve datasource tests are skipped since they // do not support multiple topics. func TestKafkaPubSubDataSourceMultiTopicSubscription(t *testing.T) { - // Create event configuration with multiple topics - engineEventConfig := &nodev1.EngineEventConfiguration{ - ProviderId: "test-provider", - Type: nodev1.EventType_PUBLISH, // Must be PUBLISH as it's the only supported type - TypeName: "TestType", - FieldName: "testField", - } - - kafkaCfg := &nodev1.KafkaEventConfiguration{ - EngineEventConfiguration: engineEventConfig, - Topics: []string{"test-topic-1", "test-topic-2"}, - } - // Create the data source to test with mock adapter pubsub := &PubSubDataSource{ - EventConfiguration: kafkaCfg, + fieldName: "testField", + typeName: "TestType", + eventType: EventTypePublish, + topics: []string{"test-topic-1", "test-topic-2"}, + providerId: "test-provider", } // Test GetResolveDataSourceSubscriptionInput diff --git a/router/pkg/pubsub/nats/provider_builder.go b/router/pkg/pubsub/nats/provider_builder.go index e0439b39a3..ca403f3d93 100644 --- a/router/pkg/pubsub/nats/provider_builder.go +++ b/router/pkg/pubsub/nats/provider_builder.go @@ -27,6 +27,10 @@ func (p *PubSubProviderBuilder) TypeID() string { return providerTypeID } +func (p *PubSubProviderBuilder) BuildDataSourceFactory(data *nodev1.NatsEventConfiguration) *datasource.PubSubDataSourceFactory[config.NatsEventSource, *nodev1.NatsEventConfiguration] { + return datasource.NewPubSubDataSourceFactory(p, data) +} + func (p *PubSubProviderBuilder) BuildDataSource(data *nodev1.NatsEventConfiguration) (datasource.PubSubDataSource, error) { providerId := data.GetEngineEventConfiguration().GetProviderId() adapter, ok := p.adapters[providerId] @@ -34,10 +38,34 @@ func (p *PubSubProviderBuilder) BuildDataSource(data *nodev1.NatsEventConfigurat return nil, fmt.Errorf("failed to get adapter for provider %s with ID %s", p.TypeID(), providerId) } - return &PubSubDataSource{ - EventConfiguration: data, - NatsAdapter: adapter, - }, nil + var eventType EventType + switch data.GetEngineEventConfiguration().GetType() { + case nodev1.EventType_PUBLISH: + eventType = EventTypePublish + case nodev1.EventType_SUBSCRIBE: + eventType = EventTypeSubscribe + case nodev1.EventType_REQUEST: + eventType = EventTypeRequest + default: + return nil, fmt.Errorf("unsupported event type: %s", data.GetEngineEventConfiguration().GetType()) + } + pubSubDataSource := &PubSubDataSource{ + NatsAdapter: adapter, + fieldName: data.GetEngineEventConfiguration().GetFieldName(), + eventType: eventType, + subjects: data.GetSubjects(), + providerId: providerId, + withStreamConfiguration: data.GetStreamConfiguration() != nil, + } + + if data.GetStreamConfiguration() != nil { + pubSubDataSource.withStreamConfiguration = true + pubSubDataSource.consumerName = data.GetStreamConfiguration().GetConsumerName() + pubSubDataSource.streamName = data.GetStreamConfiguration().GetStreamName() + pubSubDataSource.consumerInactiveThreshold = data.GetStreamConfiguration().GetConsumerInactiveThreshold() + } + + return pubSubDataSource, nil } func (p *PubSubProviderBuilder) BuildProvider(provider config.NatsEventSource) (datasource.PubSubProvider, error) { diff --git a/router/pkg/pubsub/nats/provider_builder_test.go b/router/pkg/pubsub/nats/provider_builder_test.go index 0f97c3d1fe..138d63a00d 100644 --- a/router/pkg/pubsub/nats/provider_builder_test.go +++ b/router/pkg/pubsub/nats/provider_builder_test.go @@ -6,7 +6,6 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - nodev1 "github.com/wundergraph/cosmo/router/gen/proto/wg/cosmo/node/v1" "github.com/wundergraph/cosmo/router/pkg/config" "github.com/wundergraph/cosmo/router/pkg/pubsub/datasource" "go.uber.org/zap/zaptest" @@ -68,62 +67,6 @@ func TestBuildNatsOptions(t *testing.T) { }) } -func TestTransformEventConfig(t *testing.T) { - t.Run("publish event", func(t *testing.T) { - cfg := &nodev1.NatsEventConfiguration{ - EngineEventConfiguration: &nodev1.EngineEventConfiguration{ - Type: nodev1.EventType_PUBLISH, - }, - Subjects: []string{"original.subject"}, - } - - // Simple transform function that adds "transformed." prefix - transformFn := func(s string) (string, error) { - return "transformed." + s, nil - } - - transformedCfg, err := transformEventConfig(cfg, transformFn) - require.NoError(t, err) - require.Equal(t, []string{"transformed.original.subject"}, transformedCfg.Subjects) - }) - - t.Run("subscribe event", func(t *testing.T) { - cfg := &nodev1.NatsEventConfiguration{ - EngineEventConfiguration: &nodev1.EngineEventConfiguration{ - Type: nodev1.EventType_SUBSCRIBE, - }, - Subjects: []string{"original.subject1", "original.subject2"}, - } - - // Simple transform function that adds "transformed." prefix - transformFn := func(s string) (string, error) { - return "transformed." + s, nil - } - - transformedCfg, err := transformEventConfig(cfg, transformFn) - require.NoError(t, err) - // Since the function sorts the subjects - require.Equal(t, []string{"transformed.original.subject1", "transformed.original.subject2"}, transformedCfg.Subjects) - }) - - t.Run("invalid subject", func(t *testing.T) { - cfg := &nodev1.NatsEventConfiguration{ - EngineEventConfiguration: &nodev1.EngineEventConfiguration{ - Type: nodev1.EventType_PUBLISH, - }, - Subjects: []string{"invalid subject with spaces"}, - } - - transformFn := func(s string) (string, error) { - return s, nil - } - - _, err := transformEventConfig(cfg, transformFn) - require.Error(t, err) - assert.Contains(t, err.Error(), "invalid subject") - }) -} - func TestPubSubProviderBuilderFactory(t *testing.T) { t.Run("creates provider with configured adapters", func(t *testing.T) { providerId := "test-provider" diff --git a/router/pkg/pubsub/nats/pubsub_datasource.go b/router/pkg/pubsub/nats/pubsub_datasource.go index 7b0bced5d4..44dcde4a66 100644 --- a/router/pkg/pubsub/nats/pubsub_datasource.go +++ b/router/pkg/pubsub/nats/pubsub_datasource.go @@ -5,54 +5,66 @@ import ( "fmt" "slices" - nodev1 "github.com/wundergraph/cosmo/router/gen/proto/wg/cosmo/node/v1" "github.com/wundergraph/cosmo/router/pkg/pubsub/datasource" "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/resolve" ) +type EventType int + +const ( + EventTypePublish EventType = iota + EventTypeRequest + EventTypeSubscribe +) + type PubSubDataSource struct { - EventConfiguration *nodev1.NatsEventConfiguration - NatsAdapter AdapterInterface + NatsAdapter AdapterInterface + + fieldName string + typeName string + eventType EventType + subjects []string + providerId string + + withStreamConfiguration bool + consumerName string + streamName string + consumerInactiveThreshold int32 } func (c *PubSubDataSource) GetFieldName() string { - return c.EventConfiguration.GetEngineEventConfiguration().GetFieldName() + return c.fieldName } func (c *PubSubDataSource) ResolveDataSource() (resolve.DataSource, error) { var dataSource resolve.DataSource - eventType := c.EventConfiguration.GetEngineEventConfiguration().GetType() - switch eventType { - case nodev1.EventType_PUBLISH: + switch c.eventType { + case EventTypePublish: dataSource = &NatsPublishDataSource{ pubSub: c.NatsAdapter, } - case nodev1.EventType_REQUEST: + case EventTypeRequest: dataSource = &NatsRequestDataSource{ pubSub: c.NatsAdapter, } default: - return nil, fmt.Errorf("failed to configure fetch: invalid event type \"%s\" for Nats", eventType.String()) + return nil, fmt.Errorf("failed to configure fetch: invalid event type \"%d\" for Nats", c.eventType) } return dataSource, nil } func (c *PubSubDataSource) ResolveDataSourceInput(eventData []byte) (string, error) { - subjects := c.EventConfiguration.GetSubjects() - - if len(subjects) != 1 { - return "", fmt.Errorf("publish and request events should define one subject but received %d", len(subjects)) + if len(c.subjects) != 1 { + return "", fmt.Errorf("publish and request events should define one subject but received %d", len(c.subjects)) } - subject := subjects[0] - - providerId := c.EventConfiguration.GetEngineEventConfiguration().GetProviderId() + subject := c.subjects[0] evtCfg := PublishAndRequestEventConfiguration{ - ProviderID: providerId, + ProviderID: c.providerId, Subject: subject, Data: eventData, } @@ -67,17 +79,15 @@ func (c *PubSubDataSource) ResolveDataSourceSubscription() (resolve.Subscription } func (c *PubSubDataSource) ResolveDataSourceSubscriptionInput() (string, error) { - providerId := c.EventConfiguration.GetEngineEventConfiguration().GetProviderId() - evtCfg := SubscriptionEventConfiguration{ - ProviderID: providerId, - Subjects: c.EventConfiguration.GetSubjects(), + ProviderID: c.providerId, + Subjects: c.subjects, } - if c.EventConfiguration.GetStreamConfiguration() != nil { + if c.withStreamConfiguration { evtCfg.StreamConfiguration = &StreamConfiguration{ - Consumer: c.EventConfiguration.GetStreamConfiguration().GetConsumerName(), - StreamName: c.EventConfiguration.GetStreamConfiguration().GetStreamName(), - ConsumerInactiveThreshold: c.EventConfiguration.GetStreamConfiguration().GetConsumerInactiveThreshold(), + Consumer: c.consumerName, + StreamName: c.streamName, + ConsumerInactiveThreshold: c.consumerInactiveThreshold, } } object, err := json.Marshal(evtCfg) @@ -88,39 +98,31 @@ func (c *PubSubDataSource) ResolveDataSourceSubscriptionInput() (string, error) } func (c *PubSubDataSource) TransformEventData(extractFn datasource.ArgumentTemplateCallback) error { - transformedEventConfig, err := transformEventConfig(c.EventConfiguration, extractFn) - if err != nil { - return err - } - c.EventConfiguration = transformedEventConfig - return nil -} - -func transformEventConfig(cfg *nodev1.NatsEventConfiguration, fn datasource.ArgumentTemplateCallback) (*nodev1.NatsEventConfiguration, error) { - switch v := cfg.GetEngineEventConfiguration().GetType(); v { - case nodev1.EventType_PUBLISH, nodev1.EventType_REQUEST: - extractedSubject, err := fn(cfg.GetSubjects()[0]) + switch c.eventType { + case EventTypePublish, EventTypeRequest: + extractedSubject, err := extractFn(c.subjects[0]) if err != nil { - return cfg, fmt.Errorf("unable to parse subject with id %s", cfg.GetSubjects()[0]) + return fmt.Errorf("unable to parse subject with id %s", c.subjects[0]) } if !isValidNatsSubject(extractedSubject) { - return cfg, fmt.Errorf("invalid subject: %s", extractedSubject) + return fmt.Errorf("invalid subject: %s", extractedSubject) } - cfg.Subjects = []string{extractedSubject} - case nodev1.EventType_SUBSCRIBE: - extractedSubjects := make([]string, 0, len(cfg.Subjects)) - for _, rawSubject := range cfg.Subjects { - extractedSubject, err := fn(rawSubject) + c.subjects = []string{extractedSubject} + case EventTypeSubscribe: + extractedSubjects := make([]string, 0, len(c.subjects)) + for _, rawSubject := range c.subjects { + extractedSubject, err := extractFn(rawSubject) if err != nil { - return cfg, nil + return nil } if !isValidNatsSubject(extractedSubject) { - return cfg, fmt.Errorf("invalid subject: %s", extractedSubject) + return fmt.Errorf("invalid subject: %s", extractedSubject) } extractedSubjects = append(extractedSubjects, extractedSubject) } slices.Sort(extractedSubjects) - cfg.Subjects = extractedSubjects + c.subjects = extractedSubjects } - return cfg, nil + + return nil } diff --git a/router/pkg/pubsub/nats/pubsub_datasource_test.go b/router/pkg/pubsub/nats/pubsub_datasource_test.go index 8f8ccc49a8..730c4189d0 100644 --- a/router/pkg/pubsub/nats/pubsub_datasource_test.go +++ b/router/pkg/pubsub/nats/pubsub_datasource_test.go @@ -7,31 +7,22 @@ import ( "io" "testing" + "github.com/stretchr/testify/assert" "github.com/stretchr/testify/mock" "github.com/stretchr/testify/require" - nodev1 "github.com/wundergraph/cosmo/router/gen/proto/wg/cosmo/node/v1" "github.com/wundergraph/cosmo/router/pkg/pubsub/pubsubtest" ) func TestNatsPubSubDataSource(t *testing.T) { - // Create event configuration with required fields - engineEventConfig := &nodev1.EngineEventConfiguration{ - ProviderId: "test-provider", - Type: nodev1.EventType_PUBLISH, - TypeName: "TestType", - FieldName: "testField", - } - - natsCfg := &nodev1.NatsEventConfiguration{ - EngineEventConfiguration: engineEventConfig, - Subjects: []string{"test-subject"}, - } - // Create the data source to test with a real adapter adapter := &Adapter{} pubsub := &PubSubDataSource{ - EventConfiguration: natsCfg, - NatsAdapter: adapter, + providerId: "test-provider", + eventType: EventTypePublish, + subjects: []string{"test-subject"}, + fieldName: "testField", + typeName: "TestType", + NatsAdapter: adapter, } // Run the standard test suite @@ -39,19 +30,6 @@ func TestNatsPubSubDataSource(t *testing.T) { } func TestPubSubDataSourceWithMockAdapter(t *testing.T) { - // Create event configuration with required fields - engineEventConfig := &nodev1.EngineEventConfiguration{ - ProviderId: "test-provider", - Type: nodev1.EventType_PUBLISH, - TypeName: "TestType", - FieldName: "testField", - } - - natsCfg := &nodev1.NatsEventConfiguration{ - EngineEventConfiguration: engineEventConfig, - Subjects: []string{"test-subject"}, - } - // Create mock adapter mockAdapter := NewMockAdapterInterface(t) @@ -62,8 +40,12 @@ func TestPubSubDataSourceWithMockAdapter(t *testing.T) { // Create the data source with mock adapter pubsub := &PubSubDataSource{ - EventConfiguration: natsCfg, - NatsAdapter: mockAdapter, + providerId: "test-provider", + eventType: EventTypePublish, + subjects: []string{"test-subject"}, + fieldName: "testField", + typeName: "TestType", + NatsAdapter: mockAdapter, } // Get the data source @@ -82,26 +64,17 @@ func TestPubSubDataSourceWithMockAdapter(t *testing.T) { } func TestPubSubDataSource_GetResolveDataSource_WrongType(t *testing.T) { - // Create event configuration with required fields - engineEventConfig := &nodev1.EngineEventConfiguration{ - ProviderId: "test-provider", - Type: nodev1.EventType_SUBSCRIBE, // This is not supported - TypeName: "TestType", - FieldName: "testField", - } - - natsCfg := &nodev1.NatsEventConfiguration{ - EngineEventConfiguration: engineEventConfig, - Subjects: []string{"test-subject"}, - } - // Create mock adapter mockAdapter := NewMockAdapterInterface(t) // Create the data source with mock adapter pubsub := &PubSubDataSource{ - EventConfiguration: natsCfg, - NatsAdapter: mockAdapter, + providerId: "test-provider", + eventType: EventTypePublish, + subjects: []string{"test-subject"}, + fieldName: "testField", + typeName: "TestType", + NatsAdapter: mockAdapter, } // Get the data source @@ -111,22 +84,13 @@ func TestPubSubDataSource_GetResolveDataSource_WrongType(t *testing.T) { } func TestPubSubDataSource_GetResolveDataSourceInput_MultipleSubjects(t *testing.T) { - // Create event configuration with required fields - engineEventConfig := &nodev1.EngineEventConfiguration{ - ProviderId: "test-provider", - Type: nodev1.EventType_PUBLISH, - TypeName: "TestType", - FieldName: "testField", - } - - natsCfg := &nodev1.NatsEventConfiguration{ - EngineEventConfiguration: engineEventConfig, - Subjects: []string{"test-subject-1", "test-subject-2"}, - } - // Create the data source with mock adapter pubsub := &PubSubDataSource{ - EventConfiguration: natsCfg, + providerId: "test-provider", + eventType: EventTypePublish, + subjects: []string{"test-subject-1", "test-subject-2"}, + fieldName: "testField", + typeName: "TestType", } // Get the input @@ -136,22 +100,13 @@ func TestPubSubDataSource_GetResolveDataSourceInput_MultipleSubjects(t *testing. } func TestPubSubDataSource_GetResolveDataSourceInput_NoSubjects(t *testing.T) { - // Create event configuration with required fields - engineEventConfig := &nodev1.EngineEventConfiguration{ - ProviderId: "test-provider", - Type: nodev1.EventType_PUBLISH, - TypeName: "TestType", - FieldName: "testField", - } - - natsCfg := &nodev1.NatsEventConfiguration{ - EngineEventConfiguration: engineEventConfig, - Subjects: []string{}, - } - // Create the data source with mock adapter pubsub := &PubSubDataSource{ - EventConfiguration: natsCfg, + providerId: "test-provider", + eventType: EventTypePublish, + subjects: []string{}, + fieldName: "testField", + typeName: "TestType", } // Get the input @@ -161,22 +116,13 @@ func TestPubSubDataSource_GetResolveDataSourceInput_NoSubjects(t *testing.T) { } func TestNatsPubSubDataSourceMultiSubjectSubscription(t *testing.T) { - // Create event configuration with multiple subjects - engineEventConfig := &nodev1.EngineEventConfiguration{ - ProviderId: "test-provider", - Type: nodev1.EventType_PUBLISH, // Must be PUBLISH as it's the only supported type - TypeName: "TestType", - FieldName: "testField", - } - - natsCfg := &nodev1.NatsEventConfiguration{ - EngineEventConfiguration: engineEventConfig, - Subjects: []string{"test-subject-1", "test-subject-2"}, - } - // Create the data source to test with mock adapter pubsub := &PubSubDataSource{ - EventConfiguration: natsCfg, + providerId: "test-provider", + eventType: EventTypePublish, + subjects: []string{"test-subject-1", "test-subject-2"}, + fieldName: "testField", + typeName: "TestType", } // Test GetResolveDataSourceSubscriptionInput @@ -194,27 +140,17 @@ func TestNatsPubSubDataSourceMultiSubjectSubscription(t *testing.T) { } func TestNatsPubSubDataSourceWithStreamConfiguration(t *testing.T) { - // Create event configuration with stream configuration - engineEventConfig := &nodev1.EngineEventConfiguration{ - ProviderId: "test-provider", - Type: nodev1.EventType_PUBLISH, - TypeName: "TestType", - FieldName: "testField", - } - - natsCfg := &nodev1.NatsEventConfiguration{ - EngineEventConfiguration: engineEventConfig, - Subjects: []string{"test-subject"}, - StreamConfiguration: &nodev1.NatsStreamConfiguration{ - StreamName: "test-stream", - ConsumerName: "test-consumer", - ConsumerInactiveThreshold: 30, - }, - } - // Create the data source to test pubsub := &PubSubDataSource{ - EventConfiguration: natsCfg, + providerId: "test-provider", + eventType: EventTypePublish, + subjects: []string{"test-subject"}, + fieldName: "testField", + typeName: "TestType", + withStreamConfiguration: true, + consumerName: "test-consumer", + streamName: "test-stream", + consumerInactiveThreshold: 30, } // Test GetResolveDataSourceSubscriptionInput with stream configuration @@ -233,19 +169,6 @@ func TestNatsPubSubDataSourceWithStreamConfiguration(t *testing.T) { } func TestPubSubDataSource_RequestDataSource(t *testing.T) { - // Create event configuration with REQUEST type - engineEventConfig := &nodev1.EngineEventConfiguration{ - ProviderId: "test-provider", - Type: nodev1.EventType_REQUEST, - TypeName: "TestType", - FieldName: "testField", - } - - natsCfg := &nodev1.NatsEventConfiguration{ - EngineEventConfiguration: engineEventConfig, - Subjects: []string{"test-subject"}, - } - // Create mock adapter mockAdapter := NewMockAdapterInterface(t) @@ -259,8 +182,12 @@ func TestPubSubDataSource_RequestDataSource(t *testing.T) { // Create the data source with mock adapter pubsub := &PubSubDataSource{ - EventConfiguration: natsCfg, - NatsAdapter: mockAdapter, + providerId: "test-provider", + eventType: EventTypeRequest, + subjects: []string{"test-subject"}, + fieldName: "testField", + typeName: "TestType", + NatsAdapter: mockAdapter, } // Get the data source @@ -278,3 +205,62 @@ func TestPubSubDataSource_RequestDataSource(t *testing.T) { require.NoError(t, err) require.Equal(t, `{"response": "test"}`, out.String()) } + +func TestTransformEventConfig(t *testing.T) { + t.Run("publish event", func(t *testing.T) { + cfg := &PubSubDataSource{ + providerId: "test-provider", + eventType: EventTypePublish, + subjects: []string{"original.subject"}, + fieldName: "testField", + typeName: "TestType", + } + + // Simple transform function that adds "transformed." prefix + transformFn := func(s string) (string, error) { + return "transformed." + s, nil + } + + err := cfg.TransformEventData(transformFn) + require.NoError(t, err) + require.Equal(t, []string{"transformed.original.subject"}, cfg.subjects) + }) + + t.Run("subscribe event", func(t *testing.T) { + cfg := &PubSubDataSource{ + providerId: "test-provider", + eventType: EventTypeSubscribe, + subjects: []string{"original.subject1", "original.subject2"}, + fieldName: "testField", + typeName: "TestType", + } + + // Simple transform function that adds "transformed." prefix + transformFn := func(s string) (string, error) { + return "transformed." + s, nil + } + + err := cfg.TransformEventData(transformFn) + require.NoError(t, err) + // Since the function sorts the subjects + require.Equal(t, []string{"transformed.original.subject1", "transformed.original.subject2"}, cfg.subjects) + }) + + t.Run("invalid subject", func(t *testing.T) { + cfg := &PubSubDataSource{ + providerId: "test-provider", + eventType: EventTypePublish, + subjects: []string{"invalid subject with spaces"}, + fieldName: "testField", + typeName: "TestType", + } + + transformFn := func(s string) (string, error) { + return s, nil + } + + err := cfg.TransformEventData(transformFn) + require.Error(t, err) + assert.Contains(t, err.Error(), "invalid subject") + }) +} diff --git a/router/pkg/pubsub/pubsub.go b/router/pkg/pubsub/pubsub.go index 35e2658526..64933e92a9 100644 --- a/router/pkg/pubsub/pubsub.go +++ b/router/pkg/pubsub/pubsub.go @@ -137,15 +137,12 @@ func build[P GetID, E GetEngineEventConfiguration](ctx context.Context, builder // build data sources for each event for _, dsConf := range dsConfs { for i, event := range dsConf.events { - pubSubDataSource, err := builder.BuildDataSource(event) - if err != nil { - return nil, nil, err - } + dataSourceFactory := builder.BuildDataSourceFactory(event) out, err := plan.NewDataSourceConfiguration( dsConf.dsConf.Configuration.Id+"-"+builder.TypeID()+"-"+strconv.Itoa(i), - pubsub_datasource.NewFactory(ctx, pubSubDataSource), + pubsub_datasource.NewFactory(ctx, dataSourceFactory), getFilteredDataSourceMetadata(event.GetEngineEventConfiguration(), dsConf.dsConf.Metadata), - pubSubDataSource, + dataSourceFactory, ) if err != nil { return nil, nil, err From 684a4fcadb8c484e35ecc6c3adf10febbe22f625 Mon Sep 17 00:00:00 2001 From: Alessandro Pagnin Date: Fri, 30 May 2025 16:28:33 +0200 Subject: [PATCH 093/126] chore: add test to verify no double transformation happens when the same subscription is run more than one time on the same router instance --- router-tests/events/nats_events_test.go | 84 +++++++++++++++++++++++++ 1 file changed, 84 insertions(+) diff --git a/router-tests/events/nats_events_test.go b/router-tests/events/nats_events_test.go index 365c93fba2..e50faafea1 100644 --- a/router-tests/events/nats_events_test.go +++ b/router-tests/events/nats_events_test.go @@ -1836,6 +1836,90 @@ func TestNatsEvents(t *testing.T) { assert.Error(t, errRouter) }) + + t.Run("multiple subscribe async with variables", func(t *testing.T) { + t.Parallel() + + testenv.Run(t, &testenv.Config{ + RouterConfigJSONTemplate: testenv.ConfigWithEdfsNatsJSONTemplate, + EnableNats: true, + LogObservation: testenv.LogObservationConfig{ + Enabled: true, + LogLevel: zapcore.InfoLevel, + }, + NoRetryClient: true, + }, func(t *testing.T, xEnv *testenv.Environment) { + var subscriptionOne struct { + employeeUpdated struct { + ID float64 `graphql:"id"` + Details struct { + Surname string `graphql:"surname"` + } `graphql:"details"` + } `graphql:"employeeUpdatedMyNats(id: 1)"` + } + + var subscriptionTwo struct { + employeeUpdated struct { + ID float64 `graphql:"id"` + Details struct { + Forename string `graphql:"forename"` + } `graphql:"details"` + } `graphql:"employeeUpdatedMyNats(id: 1)"` + } + + surl := xEnv.GraphQLWebSocketSubscriptionURL() + client1 := graphql.NewSubscriptionClient(surl) + t.Cleanup(func() { + _ = client1.Close() + }) + client2 := graphql.NewSubscriptionClient(surl) + t.Cleanup(func() { + _ = client2.Close() + }) + + var subscriptionOneCalled atomic.Uint32 + var subscriptionTwoCalled atomic.Uint32 + + subscriptionOneID, err := client1.Subscribe(&subscriptionOne, nil, func(dataValue []byte, errValue error) error { + subscriptionOneCalled.Add(1) + require.NoError(t, errValue) + require.JSONEq(t, `{"employeeUpdated":{"id":3,"details":{"surname":"Avram"}}}`, string(dataValue)) + return nil + }) + require.NoError(t, err) + require.NotEqual(t, "", subscriptionOneID) + go func() { + clientErr := client1.Run() + require.NoError(t, clientErr) + }() + xEnv.WaitForSubscriptionCount(1, NatsWaitTimeout) + errUnsubscribeOne := client1.Unsubscribe(subscriptionOneID) + require.NoError(t, errUnsubscribeOne) + xEnv.WaitForSubscriptionCount(0, NatsWaitTimeout) + + subscriptionTwoID, err := client2.Subscribe(&subscriptionTwo, nil, func(dataValue []byte, errValue error) error { + subscriptionTwoCalled.Add(1) + require.NoError(t, errValue) + require.JSONEq(t, `{"employeeUpdated":{"id":3,"details":{"forename":"Stefan"}}}`, string(dataValue)) + return nil + }) + require.NoError(t, err) + require.NotEqual(t, "", subscriptionTwoID) + go func() { + clientErr := client2.Run() + require.NoError(t, clientErr) + }() + xEnv.WaitForSubscriptionCount(1, NatsWaitTimeout) + errUnsubscribeTwo := client2.Unsubscribe(subscriptionTwoID) + require.NoError(t, errUnsubscribeTwo) + xEnv.WaitForSubscriptionCount(0, NatsWaitTimeout) + + errClose1 := client1.Close() + require.NoError(t, errClose1) + errClose2 := client2.Close() + require.NoError(t, errClose2) + }) + }) } func TestFlakyNatsEvents(t *testing.T) { From b72c7b5aad6fca5f5bc2f9cd89a91267fd2c0609 Mon Sep 17 00:00:00 2001 From: Alessandro Pagnin Date: Fri, 30 May 2025 16:32:41 +0200 Subject: [PATCH 094/126] chore: go mod tidy --- router-tests/go.mod | 3 +-- router-tests/go.sum | 7 ------- 2 files changed, 1 insertion(+), 9 deletions(-) diff --git a/router-tests/go.mod b/router-tests/go.mod index 419b9b0080..6c4df81900 100644 --- a/router-tests/go.mod +++ b/router-tests/go.mod @@ -25,7 +25,6 @@ require ( github.com/twmb/franz-go/pkg/kadm v1.11.0 github.com/wundergraph/cosmo/demo v0.0.0-20250522134511-06b5a6a4aef5 github.com/wundergraph/cosmo/router v0.0.0-20250522134511-06b5a6a4aef5 - github.com/wundergraph/graphql-go-tools/v2 v2.0.0-rc.183 go.opentelemetry.io/otel v1.28.0 go.opentelemetry.io/otel/sdk v1.28.0 go.opentelemetry.io/otel/sdk/metric v1.28.0 @@ -133,7 +132,7 @@ require ( github.com/urfave/cli/v2 v2.27.5 // indirect github.com/vektah/gqlparser/v2 v2.5.21 // indirect github.com/wundergraph/astjson v0.0.0-20250106123708-be463c97e083 // indirect - github.com/wundergraph/graphql-go-tools/v2 v2.0.0-rc.181 // indirect + github.com/wundergraph/graphql-go-tools/v2 v2.0.0-rc.183 // indirect github.com/xrash/smetrics v0.0.0-20240521201337-686a1a2994c1 // indirect github.com/yosida95/uritemplate/v3 v3.0.2 // indirect github.com/yusufpapurcu/wmi v1.2.4 // indirect diff --git a/router-tests/go.sum b/router-tests/go.sum index 56289d7c21..64667d0670 100644 --- a/router-tests/go.sum +++ b/router-tests/go.sum @@ -326,13 +326,6 @@ github.com/wundergraph/consul/sdk v0.0.0-20250204115147-ed842a8fd301 h1:EzfKHQoT github.com/wundergraph/consul/sdk v0.0.0-20250204115147-ed842a8fd301/go.mod h1:wxI0Nak5dI5RvJuzGyiEK4nZj0O9X+Aw6U0tC1wPKq0= github.com/wundergraph/graphql-go-tools/v2 v2.0.0-rc.183 h1:NsUlVUR0sZWKSi5Sbgsx6c527+R0wqXj5WDithbg4TQ= github.com/wundergraph/graphql-go-tools/v2 v2.0.0-rc.183/go.mod h1:8N4c4JRDknFdph84ZCcHxgNBjnW7f3aiIycmpG/IhCc= -github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= -github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb h1:zGWFAtiMcyryUHoUjUJX0/lt1H2+i2Ka2n+D3DImSNo= -github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= -github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 h1:EzJWgHovont7NscjpAxXsDA8S8BMYve8Y5+7cuRE7R0= -github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ= -github.com/xeipuuv/gojsonschema v1.2.0 h1:LhYJRs+L4fBtjZUfuSZIKGeVu0QRy8e5Xi7D17UxZ74= -github.com/xeipuuv/gojsonschema v1.2.0/go.mod h1:anYRn/JVcOK2ZgGU+IjEV4nwlhoK5sQluxsYJ78Id3Y= github.com/xrash/smetrics v0.0.0-20240521201337-686a1a2994c1 h1:gEOO8jv9F4OT7lGCjxCBTO/36wtF6j2nSip77qHd4x4= github.com/xrash/smetrics v0.0.0-20240521201337-686a1a2994c1/go.mod h1:Ohn+xnUBiLI6FVj/9LpzZWtj1/D6lUovWYBkxHVV3aM= github.com/yosida95/uritemplate/v3 v3.0.2 h1:Ed3Oyj9yrmi9087+NczuL5BwkIc4wvTb5zIM+UJPGz4= From 22bf957363b730a98f673de421799e74b652156c Mon Sep 17 00:00:00 2001 From: Alessandro Pagnin Date: Fri, 30 May 2025 17:03:22 +0200 Subject: [PATCH 095/126] test: update PubSub data source tests to use BuildDataSourceFactory and change event type to subscribe --- .../pkg/pubsub/nats/pubsub_datasource_test.go | 2 +- router/pkg/pubsub/pubsub_test.go | 70 +++---------------- 2 files changed, 9 insertions(+), 63 deletions(-) diff --git a/router/pkg/pubsub/nats/pubsub_datasource_test.go b/router/pkg/pubsub/nats/pubsub_datasource_test.go index 730c4189d0..0c2587e707 100644 --- a/router/pkg/pubsub/nats/pubsub_datasource_test.go +++ b/router/pkg/pubsub/nats/pubsub_datasource_test.go @@ -70,7 +70,7 @@ func TestPubSubDataSource_GetResolveDataSource_WrongType(t *testing.T) { // Create the data source with mock adapter pubsub := &PubSubDataSource{ providerId: "test-provider", - eventType: EventTypePublish, + eventType: EventTypeSubscribe, subjects: []string{"test-subject"}, fieldName: "testField", typeName: "TestType", diff --git a/router/pkg/pubsub/pubsub_test.go b/router/pkg/pubsub/pubsub_test.go index 1056873ecd..32bdbb54bc 100644 --- a/router/pkg/pubsub/pubsub_test.go +++ b/router/pkg/pubsub/pubsub_test.go @@ -18,7 +18,6 @@ func TestBuild_OK(t *testing.T) { ctx := context.Background() mockBuilder := datasource.NewMockPubSubProviderBuilder[config.NatsEventSource, *nodev1.NatsEventConfiguration](t) mockPubSubProvider := datasource.NewMockPubSubProvider(t) - mockPubSubDataSource := datasource.NewMockPubSubDataSource(t) dsMeta := &plan.DataSourceMetadata{ RootNodes: []plan.TypeField{ @@ -63,7 +62,10 @@ func TestBuild_OK(t *testing.T) { mockBuilder.On("TypeID").Return("nats") mockBuilder.On("BuildProvider", natsEventSources[0]).Return(mockPubSubProvider, nil) - mockBuilder.On("BuildDataSource", dsConf.Configuration.GetCustomEvents().GetNats()[0]).Return(mockPubSubDataSource, nil) + mockBuilder.On("BuildDataSourceFactory", dsConf.Configuration.GetCustomEvents().GetNats()[0]).Return( + datasource.NewPubSubDataSourceFactory(mockBuilder, dsConf.Configuration.GetCustomEvents().GetNats()[0]), + nil, + ) // ctx, kafkaBuilder, config.Providers.Kafka, kafkaDsConfsWithEvents // Execute the function @@ -131,64 +133,6 @@ func TestBuild_ProviderError(t *testing.T) { require.Len(t, dataSources, 0) } -func TestBuild_DataSourceError(t *testing.T) { - ctx := context.Background() - mockBuilder := datasource.NewMockPubSubProviderBuilder[config.NatsEventSource, *nodev1.NatsEventConfiguration](t) - mockPubSubProvider := datasource.NewMockPubSubProvider(t) - - dsMeta := &plan.DataSourceMetadata{ - RootNodes: []plan.TypeField{ - { - TypeName: "Type1", - FieldNames: []string{"Field1", "Field2"}, - }, - }, - } - - // Mock input data - event := &nodev1.EngineEventConfiguration{ - ProviderId: "provider-1", - TypeName: "Type1", - FieldName: "Field1", - Type: nodev1.EventType_PUBLISH, - } - dsConf := DataSourceConfigurationWithMetadata{ - Configuration: &nodev1.DataSourceConfiguration{ - Id: "test-id", - CustomEvents: &nodev1.DataSourceCustomEvents{ - Nats: []*nodev1.NatsEventConfiguration{ - { - EngineEventConfiguration: event, - }, - }, - }, - }, - Metadata: dsMeta, - } - dsConfs := []dsConfAndEvents[*nodev1.NatsEventConfiguration]{ - { - dsConf: &dsConf, - events: dsConf.Configuration.GetCustomEvents().GetNats(), - }, - } - natsEventSources := []config.NatsEventSource{ - {ID: "provider-1"}, - } - - mockPubSubProvider.On("ID").Return("provider-1") - - mockBuilder.On("BuildProvider", natsEventSources[0]).Return(mockPubSubProvider, nil) - mockBuilder.On("BuildDataSource", dsConf.Configuration.GetCustomEvents().GetNats()[0]).Return(nil, errors.New("data source error")) - - // Execute the function - providers, dataSources, err := build(ctx, mockBuilder, natsEventSources, dsConfs) - - // Assertions - assert.Error(t, err) - require.Len(t, providers, 0) - require.Len(t, dataSources, 0) -} - func TestBuild_ShouldGetAnErrorIfProviderIsNotDefined(t *testing.T) { ctx := context.Background() mockBuilder := datasource.NewMockPubSubProviderBuilder[config.NatsEventSource, *nodev1.NatsEventConfiguration](t) @@ -252,7 +196,6 @@ func TestBuild_ShouldNotInitializeProviderIfNotUsed(t *testing.T) { ctx := context.Background() mockBuilder := datasource.NewMockPubSubProviderBuilder[config.NatsEventSource, *nodev1.NatsEventConfiguration](t) mockPubSubUsedProvider := datasource.NewMockPubSubProvider(t) - mockPubSubDataSource := datasource.NewMockPubSubDataSource(t) dsMeta := &plan.DataSourceMetadata{ RootNodes: []plan.TypeField{ @@ -298,7 +241,10 @@ func TestBuild_ShouldNotInitializeProviderIfNotUsed(t *testing.T) { mockBuilder.On("TypeID").Return("nats") mockBuilder.On("BuildProvider", natsEventSources[1]).Return(mockPubSubUsedProvider, nil) - mockBuilder.On("BuildDataSource", dsConf.Configuration.GetCustomEvents().GetNats()[0]).Return(mockPubSubDataSource, nil) + mockBuilder.On("BuildDataSourceFactory", dsConf.Configuration.GetCustomEvents().GetNats()[0]).Return( + datasource.NewPubSubDataSourceFactory(mockBuilder, dsConf.Configuration.GetCustomEvents().GetNats()[0]), + nil, + ) // Execute the function providers, dataSources, err := build(ctx, mockBuilder, natsEventSources, dsConfs) From 0a93736e5f967878780a5587a7b4fc0b716ca1aa Mon Sep 17 00:00:00 2001 From: Alessandro Pagnin Date: Tue, 3 Jun 2025 09:21:13 +0200 Subject: [PATCH 096/126] refactor: add BuildDataSourceFactory to redis implementation --- router/pkg/pubsub/redis/provider_builder.go | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/router/pkg/pubsub/redis/provider_builder.go b/router/pkg/pubsub/redis/provider_builder.go index 5f609f2ac5..4bd7db61bc 100644 --- a/router/pkg/pubsub/redis/provider_builder.go +++ b/router/pkg/pubsub/redis/provider_builder.go @@ -41,13 +41,8 @@ func (b *PubSubProviderBuilder) TypeID() string { return providerTypeID } -// Providers returns the Redis PubSub providers for the given provider IDs -func (b *PubSubProviderBuilder) BuildProvider(provider config.RedisEventSource) (datasource.PubSubProvider, error) { - adapter := NewAdapter(b.logger, provider.URLs) - pubSubProvider := datasource.NewPubSubProviderImpl(provider.ID, providerTypeID, adapter, b.logger) - b.adapters[provider.ID] = adapter - - return pubSubProvider, nil +func (p *PubSubProviderBuilder) BuildDataSourceFactory(data *nodev1.RedisEventConfiguration) *datasource.PubSubDataSourceFactory[config.RedisEventSource, *nodev1.RedisEventConfiguration] { + return datasource.NewPubSubDataSourceFactory(p, data) } // DataSource creates a Redis PubSub data source for the given event configuration @@ -58,3 +53,12 @@ func (b *PubSubProviderBuilder) BuildDataSource(event *nodev1.RedisEventConfigur RedisAdapter: b.adapters[providerId], }, nil } + +// Providers returns the Redis PubSub providers for the given provider IDs +func (b *PubSubProviderBuilder) BuildProvider(provider config.RedisEventSource) (datasource.PubSubProvider, error) { + adapter := NewAdapter(b.logger, provider.URLs) + pubSubProvider := datasource.NewPubSubProviderImpl(provider.ID, providerTypeID, adapter, b.logger) + b.adapters[provider.ID] = adapter + + return pubSubProvider, nil +} From dfd3bf9257a350fc60919496eaf4524503a4a59f Mon Sep 17 00:00:00 2001 From: Alessandro Pagnin Date: Tue, 3 Jun 2025 12:17:56 +0200 Subject: [PATCH 097/126] chore: add tests to Redis pubsub provider --- router/.mockery.yml | 3 + .../pkg/pubsub/nats/engine_datasource_test.go | 34 --- .../pubsub/redis/engine_datasource_test.go | 247 +++++++++++++++++ router/pkg/pubsub/redis/mocks.go | 261 ++++++++++++++++++ .../pkg/pubsub/redis/provider_builder_test.go | 75 +++++ .../pubsub/redis/pubsub_datasource_test.go | 170 ++++++++++++ 6 files changed, 756 insertions(+), 34 deletions(-) create mode 100644 router/pkg/pubsub/redis/engine_datasource_test.go create mode 100644 router/pkg/pubsub/redis/mocks.go create mode 100644 router/pkg/pubsub/redis/provider_builder_test.go create mode 100644 router/pkg/pubsub/redis/pubsub_datasource_test.go diff --git a/router/.mockery.yml b/router/.mockery.yml index 0ebdb2b876..abe974eb3b 100644 --- a/router/.mockery.yml +++ b/router/.mockery.yml @@ -23,6 +23,9 @@ packages: github.com/wundergraph/cosmo/router/pkg/pubsub/kafka: interfaces: AdapterInterface: + github.com/wundergraph/cosmo/router/pkg/pubsub/redis: + interfaces: + AdapterInterface: github.com/wundergraph/graphql-go-tools/v2/pkg/engine/resolve: config: dir: 'pkg/pubsub/datasource' diff --git a/router/pkg/pubsub/nats/engine_datasource_test.go b/router/pkg/pubsub/nats/engine_datasource_test.go index 780bc47005..4189ed189c 100644 --- a/router/pkg/pubsub/nats/engine_datasource_test.go +++ b/router/pkg/pubsub/nats/engine_datasource_test.go @@ -16,40 +16,6 @@ import ( "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/resolve" ) -func TestPublishEventConfiguration_MarshalJSONTemplate(t *testing.T) { - tests := []struct { - name string - config PublishAndRequestEventConfiguration - wantPattern string - }{ - { - name: "simple configuration", - config: PublishAndRequestEventConfiguration{ - ProviderID: "test-provider", - Subject: "test-subject", - Data: json.RawMessage(`{"message":"hello"}`), - }, - wantPattern: `{"subject":"test-subject", "data": {"message":"hello"}, "providerId":"test-provider"}`, - }, - { - name: "with special characters", - config: PublishAndRequestEventConfiguration{ - ProviderID: "test-provider-id", - Subject: "subject-with-hyphens", - Data: json.RawMessage(`{"message":"special \"quotes\" here"}`), - }, - wantPattern: `{"subject":"subject-with-hyphens", "data": {"message":"special \"quotes\" here"}, "providerId":"test-provider-id"}`, - }, - } - - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - result := tt.config.MarshalJSONTemplate() - assert.Equal(t, tt.wantPattern, result) - }) - } -} - func TestPublishAndRequestEventConfiguration_MarshalJSONTemplate(t *testing.T) { tests := []struct { name string diff --git a/router/pkg/pubsub/redis/engine_datasource_test.go b/router/pkg/pubsub/redis/engine_datasource_test.go new file mode 100644 index 0000000000..23868c97f7 --- /dev/null +++ b/router/pkg/pubsub/redis/engine_datasource_test.go @@ -0,0 +1,247 @@ +package redis + +import ( + "bytes" + "context" + "encoding/json" + "errors" + "testing" + + "github.com/cespare/xxhash/v2" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/mock" + "github.com/stretchr/testify/require" + "github.com/wundergraph/cosmo/router/pkg/pubsub/datasource" + "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/resolve" +) + +func TestPublishEventConfiguration_MarshalJSONTemplate(t *testing.T) { + tests := []struct { + name string + config PublishEventConfiguration + wantPattern string + }{ + { + name: "simple configuration", + config: PublishEventConfiguration{ + ProviderID: "test-provider", + Channel: "test-channel", + Data: json.RawMessage(`{"message":"hello"}`), + }, + wantPattern: `{"channel":"test-channel", "data": {"message":"hello"}, "providerId":"test-provider"}`, + }, + { + name: "with special characters", + config: PublishEventConfiguration{ + ProviderID: "test-provider-id", + Channel: "channel-with-hyphens", + Data: json.RawMessage(`{"message":"special \"quotes\" here"}`), + }, + wantPattern: `{"channel":"channel-with-hyphens", "data": {"message":"special \"quotes\" here"}, "providerId":"test-provider-id"}`, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + result, err := tt.config.MarshalJSONTemplate() + require.NoError(t, err) + assert.Equal(t, tt.wantPattern, result) + }) + } +} + +func TestSubscriptionSource_UniqueRequestID(t *testing.T) { + tests := []struct { + name string + input string + expectError bool + expectedError error + }{ + { + name: "valid input", + input: `{"channels":["channel1", "channel2"], "providerId":"test-provider"}`, + expectError: false, + }, + { + name: "missing channels", + input: `{"providerId":"test-provider"}`, + expectError: true, + expectedError: errors.New("Key path not found"), + }, + { + name: "missing providerId", + input: `{"channels":["channel1", "channel2"]}`, + expectError: true, + expectedError: errors.New("Key path not found"), + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + source := &SubscriptionDataSource{ + pubSub: NewMockAdapterInterface(t), + } + ctx := &resolve.Context{} + input := []byte(tt.input) + xxh := xxhash.New() + + err := source.UniqueRequestID(ctx, input, xxh) + + if tt.expectError { + require.Error(t, err) + if tt.expectedError != nil { + // For jsonparser errors, just check if the error message contains the expected text + assert.Contains(t, err.Error(), tt.expectedError.Error()) + } + } else { + require.NoError(t, err) + // Check that the hash has been updated + assert.NotEqual(t, 0, xxh.Sum64()) + } + }) + } +} + +func TestSubscriptionSource_Start(t *testing.T) { + tests := []struct { + name string + input string + mockSetup func(*MockAdapterInterface, *datasource.MockSubscriptionUpdater) + expectError bool + }{ + { + name: "successful subscription", + input: `{"channels":["channel1", "channel2"], "providerId":"test-provider"}`, + mockSetup: func(m *MockAdapterInterface, updater *datasource.MockSubscriptionUpdater) { + m.On("Subscribe", mock.Anything, SubscriptionEventConfiguration{ + ProviderID: "test-provider", + Channels: []string{"channel1", "channel2"}, + }, mock.Anything).Return(nil) + }, + expectError: false, + }, + { + name: "adapter returns error", + input: `{"channels":["channel1"], "providerId":"test-provider"}`, + mockSetup: func(m *MockAdapterInterface, updater *datasource.MockSubscriptionUpdater) { + m.On("Subscribe", mock.Anything, SubscriptionEventConfiguration{ + ProviderID: "test-provider", + Channels: []string{"channel1"}, + }, mock.Anything).Return(errors.New("subscription error")) + }, + expectError: true, + }, + { + name: "invalid input json", + input: `{"invalid json":`, + mockSetup: func(m *MockAdapterInterface, updater *datasource.MockSubscriptionUpdater) {}, + expectError: true, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + mockAdapter := NewMockAdapterInterface(t) + updater := datasource.NewMockSubscriptionUpdater(t) + tt.mockSetup(mockAdapter, updater) + + source := &SubscriptionDataSource{ + pubSub: mockAdapter, + } + + // Set up go context + goCtx := context.Background() + + // Create a resolve.Context with the standard context + resolveCtx := &resolve.Context{} + resolveCtx = resolveCtx.WithContext(goCtx) + + input := []byte(tt.input) + err := source.Start(resolveCtx, input, updater) + + if tt.expectError { + require.Error(t, err) + } else { + require.NoError(t, err) + } + }) + } +} + +func TestRedisPublishDataSource_Load(t *testing.T) { + tests := []struct { + name string + input string + mockSetup func(*MockAdapterInterface) + expectError bool + expectedOutput string + expectPublished bool + }{ + { + name: "successful publish", + input: `{"channel":"test-channel", "data":{"message":"hello"}, "providerId":"test-provider"}`, + mockSetup: func(m *MockAdapterInterface) { + m.On("Publish", mock.Anything, mock.MatchedBy(func(event PublishEventConfiguration) bool { + return event.ProviderID == "test-provider" && + event.Channel == "test-channel" && + string(event.Data) == `{"message":"hello"}` + })).Return(nil) + }, + expectError: false, + expectedOutput: `{"success": true}`, + expectPublished: true, + }, + { + name: "publish error", + input: `{"channel":"test-channel", "data":{"message":"hello"}, "providerId":"test-provider"}`, + mockSetup: func(m *MockAdapterInterface) { + m.On("Publish", mock.Anything, mock.Anything).Return(errors.New("publish error")) + }, + expectError: false, // The Load method doesn't return the publish error directly + expectedOutput: `{"success": false}`, + expectPublished: true, + }, + { + name: "invalid input json", + input: `{"invalid json":`, + mockSetup: func(m *MockAdapterInterface) {}, + expectError: true, + expectPublished: false, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + mockAdapter := NewMockAdapterInterface(t) + tt.mockSetup(mockAdapter) + + dataSource := &PublishDataSource{ + pubSub: mockAdapter, + } + ctx := context.Background() + input := []byte(tt.input) + out := &bytes.Buffer{} + + err := dataSource.Load(ctx, input, out) + + if tt.expectError { + require.Error(t, err) + } else { + require.NoError(t, err) + assert.Equal(t, tt.expectedOutput, out.String()) + } + }) + } +} + +func TestRedisPublishDataSource_LoadWithFiles(t *testing.T) { + t.Run("panic on not implemented", func(t *testing.T) { + dataSource := &PublishDataSource{ + pubSub: NewMockAdapterInterface(t), + } + + assert.Panics(t, func() { + dataSource.LoadWithFiles(context.Background(), nil, nil, &bytes.Buffer{}) + }) + }) +} diff --git a/router/pkg/pubsub/redis/mocks.go b/router/pkg/pubsub/redis/mocks.go new file mode 100644 index 0000000000..1257b5706d --- /dev/null +++ b/router/pkg/pubsub/redis/mocks.go @@ -0,0 +1,261 @@ +// Code generated by mockery; DO NOT EDIT. +// github.com/vektra/mockery +// template: testify + +package redis + +import ( + "context" + + mock "github.com/stretchr/testify/mock" + "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/resolve" +) + +// NewMockAdapterInterface creates a new instance of MockAdapterInterface. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations. +// The first argument is typically a *testing.T value. +func NewMockAdapterInterface(t interface { + mock.TestingT + Cleanup(func()) +}) *MockAdapterInterface { + mock := &MockAdapterInterface{} + mock.Mock.Test(t) + + t.Cleanup(func() { mock.AssertExpectations(t) }) + + return mock +} + +// MockAdapterInterface is an autogenerated mock type for the AdapterInterface type +type MockAdapterInterface struct { + mock.Mock +} + +type MockAdapterInterface_Expecter struct { + mock *mock.Mock +} + +func (_m *MockAdapterInterface) EXPECT() *MockAdapterInterface_Expecter { + return &MockAdapterInterface_Expecter{mock: &_m.Mock} +} + +// Publish provides a mock function for the type MockAdapterInterface +func (_mock *MockAdapterInterface) Publish(ctx context.Context, event PublishEventConfiguration) error { + ret := _mock.Called(ctx, event) + + if len(ret) == 0 { + panic("no return value specified for Publish") + } + + var r0 error + if returnFunc, ok := ret.Get(0).(func(context.Context, PublishEventConfiguration) error); ok { + r0 = returnFunc(ctx, event) + } else { + r0 = ret.Error(0) + } + return r0 +} + +// MockAdapterInterface_Publish_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'Publish' +type MockAdapterInterface_Publish_Call struct { + *mock.Call +} + +// Publish is a helper method to define mock.On call +// - ctx context.Context +// - event PublishEventConfiguration +func (_e *MockAdapterInterface_Expecter) Publish(ctx interface{}, event interface{}) *MockAdapterInterface_Publish_Call { + return &MockAdapterInterface_Publish_Call{Call: _e.mock.On("Publish", ctx, event)} +} + +func (_c *MockAdapterInterface_Publish_Call) Run(run func(ctx context.Context, event PublishEventConfiguration)) *MockAdapterInterface_Publish_Call { + _c.Call.Run(func(args mock.Arguments) { + var arg0 context.Context + if args[0] != nil { + arg0 = args[0].(context.Context) + } + var arg1 PublishEventConfiguration + if args[1] != nil { + arg1 = args[1].(PublishEventConfiguration) + } + run( + arg0, + arg1, + ) + }) + return _c +} + +func (_c *MockAdapterInterface_Publish_Call) Return(err error) *MockAdapterInterface_Publish_Call { + _c.Call.Return(err) + return _c +} + +func (_c *MockAdapterInterface_Publish_Call) RunAndReturn(run func(ctx context.Context, event PublishEventConfiguration) error) *MockAdapterInterface_Publish_Call { + _c.Call.Return(run) + return _c +} + +// Shutdown provides a mock function for the type MockAdapterInterface +func (_mock *MockAdapterInterface) Shutdown(ctx context.Context) error { + ret := _mock.Called(ctx) + + if len(ret) == 0 { + panic("no return value specified for Shutdown") + } + + var r0 error + if returnFunc, ok := ret.Get(0).(func(context.Context) error); ok { + r0 = returnFunc(ctx) + } else { + r0 = ret.Error(0) + } + return r0 +} + +// MockAdapterInterface_Shutdown_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'Shutdown' +type MockAdapterInterface_Shutdown_Call struct { + *mock.Call +} + +// Shutdown is a helper method to define mock.On call +// - ctx context.Context +func (_e *MockAdapterInterface_Expecter) Shutdown(ctx interface{}) *MockAdapterInterface_Shutdown_Call { + return &MockAdapterInterface_Shutdown_Call{Call: _e.mock.On("Shutdown", ctx)} +} + +func (_c *MockAdapterInterface_Shutdown_Call) Run(run func(ctx context.Context)) *MockAdapterInterface_Shutdown_Call { + _c.Call.Run(func(args mock.Arguments) { + var arg0 context.Context + if args[0] != nil { + arg0 = args[0].(context.Context) + } + run( + arg0, + ) + }) + return _c +} + +func (_c *MockAdapterInterface_Shutdown_Call) Return(err error) *MockAdapterInterface_Shutdown_Call { + _c.Call.Return(err) + return _c +} + +func (_c *MockAdapterInterface_Shutdown_Call) RunAndReturn(run func(ctx context.Context) error) *MockAdapterInterface_Shutdown_Call { + _c.Call.Return(run) + return _c +} + +// Startup provides a mock function for the type MockAdapterInterface +func (_mock *MockAdapterInterface) Startup(ctx context.Context) error { + ret := _mock.Called(ctx) + + if len(ret) == 0 { + panic("no return value specified for Startup") + } + + var r0 error + if returnFunc, ok := ret.Get(0).(func(context.Context) error); ok { + r0 = returnFunc(ctx) + } else { + r0 = ret.Error(0) + } + return r0 +} + +// MockAdapterInterface_Startup_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'Startup' +type MockAdapterInterface_Startup_Call struct { + *mock.Call +} + +// Startup is a helper method to define mock.On call +// - ctx context.Context +func (_e *MockAdapterInterface_Expecter) Startup(ctx interface{}) *MockAdapterInterface_Startup_Call { + return &MockAdapterInterface_Startup_Call{Call: _e.mock.On("Startup", ctx)} +} + +func (_c *MockAdapterInterface_Startup_Call) Run(run func(ctx context.Context)) *MockAdapterInterface_Startup_Call { + _c.Call.Run(func(args mock.Arguments) { + var arg0 context.Context + if args[0] != nil { + arg0 = args[0].(context.Context) + } + run( + arg0, + ) + }) + return _c +} + +func (_c *MockAdapterInterface_Startup_Call) Return(err error) *MockAdapterInterface_Startup_Call { + _c.Call.Return(err) + return _c +} + +func (_c *MockAdapterInterface_Startup_Call) RunAndReturn(run func(ctx context.Context) error) *MockAdapterInterface_Startup_Call { + _c.Call.Return(run) + return _c +} + +// Subscribe provides a mock function for the type MockAdapterInterface +func (_mock *MockAdapterInterface) Subscribe(ctx context.Context, event SubscriptionEventConfiguration, updater resolve.SubscriptionUpdater) error { + ret := _mock.Called(ctx, event, updater) + + if len(ret) == 0 { + panic("no return value specified for Subscribe") + } + + var r0 error + if returnFunc, ok := ret.Get(0).(func(context.Context, SubscriptionEventConfiguration, resolve.SubscriptionUpdater) error); ok { + r0 = returnFunc(ctx, event, updater) + } else { + r0 = ret.Error(0) + } + return r0 +} + +// MockAdapterInterface_Subscribe_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'Subscribe' +type MockAdapterInterface_Subscribe_Call struct { + *mock.Call +} + +// Subscribe is a helper method to define mock.On call +// - ctx context.Context +// - event SubscriptionEventConfiguration +// - updater resolve.SubscriptionUpdater +func (_e *MockAdapterInterface_Expecter) Subscribe(ctx interface{}, event interface{}, updater interface{}) *MockAdapterInterface_Subscribe_Call { + return &MockAdapterInterface_Subscribe_Call{Call: _e.mock.On("Subscribe", ctx, event, updater)} +} + +func (_c *MockAdapterInterface_Subscribe_Call) Run(run func(ctx context.Context, event SubscriptionEventConfiguration, updater resolve.SubscriptionUpdater)) *MockAdapterInterface_Subscribe_Call { + _c.Call.Run(func(args mock.Arguments) { + var arg0 context.Context + if args[0] != nil { + arg0 = args[0].(context.Context) + } + var arg1 SubscriptionEventConfiguration + if args[1] != nil { + arg1 = args[1].(SubscriptionEventConfiguration) + } + var arg2 resolve.SubscriptionUpdater + if args[2] != nil { + arg2 = args[2].(resolve.SubscriptionUpdater) + } + run( + arg0, + arg1, + arg2, + ) + }) + return _c +} + +func (_c *MockAdapterInterface_Subscribe_Call) Return(err error) *MockAdapterInterface_Subscribe_Call { + _c.Call.Return(err) + return _c +} + +func (_c *MockAdapterInterface_Subscribe_Call) RunAndReturn(run func(ctx context.Context, event SubscriptionEventConfiguration, updater resolve.SubscriptionUpdater) error) *MockAdapterInterface_Subscribe_Call { + _c.Call.Return(run) + return _c +} diff --git a/router/pkg/pubsub/redis/provider_builder_test.go b/router/pkg/pubsub/redis/provider_builder_test.go new file mode 100644 index 0000000000..c73420e50f --- /dev/null +++ b/router/pkg/pubsub/redis/provider_builder_test.go @@ -0,0 +1,75 @@ +package redis + +import ( + "context" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + "github.com/wundergraph/cosmo/router/pkg/config" + "github.com/wundergraph/cosmo/router/pkg/pubsub/datasource" + "go.uber.org/zap/zaptest" +) + +func TestBuildRedisOptions(t *testing.T) { + t.Run("basic configuration", func(t *testing.T) { + cfg := config.RedisEventSource{ + URLs: []string{"redis://localhost:6379"}, + } + + // Test that the provider can be built + logger := zaptest.NewLogger(t) + ctx := context.Background() + builder := NewPubSubProviderBuilder(ctx, logger, "host", "addr") + provider, err := builder.BuildProvider(cfg) + + require.NoError(t, err) + require.NotNil(t, provider) + assert.Equal(t, cfg.ID, provider.ID()) + assert.Equal(t, providerTypeID, provider.TypeID()) + }) + + t.Run("with cluster enabled", func(t *testing.T) { + cfg := config.RedisEventSource{ + ID: "redis-with-cluster", + URLs: []string{"redis://localhost:6379"}, + } + + // Test that the provider can be built + logger := zaptest.NewLogger(t) + ctx := context.Background() + builder := NewPubSubProviderBuilder(ctx, logger, "host", "addr") + provider, err := builder.BuildProvider(cfg) + + require.NoError(t, err) + require.NotNil(t, provider) + assert.Equal(t, cfg.ID, provider.ID()) + assert.Equal(t, providerTypeID, provider.TypeID()) + }) +} + +func TestPubSubProviderBuilderFactory(t *testing.T) { + t.Run("creates provider with configured adapters", func(t *testing.T) { + providerId := "test-provider" + + cfg := config.RedisEventSource{ + ID: providerId, + URLs: []string{"redis://localhost:6379"}, + } + + logger := zaptest.NewLogger(t) + + ctx := context.Background() + + builder := NewPubSubProviderBuilder(ctx, logger, "host", "addr") + require.NotNil(t, builder) + provider, err := builder.BuildProvider(cfg) + require.NoError(t, err) + + // Check the returned provider + redisProvider, ok := provider.(*datasource.PubSubProviderImpl) + require.True(t, ok) + assert.NotNil(t, redisProvider.Logger) + assert.NotNil(t, redisProvider.Adapter) + }) +} diff --git a/router/pkg/pubsub/redis/pubsub_datasource_test.go b/router/pkg/pubsub/redis/pubsub_datasource_test.go new file mode 100644 index 0000000000..0fdf9becca --- /dev/null +++ b/router/pkg/pubsub/redis/pubsub_datasource_test.go @@ -0,0 +1,170 @@ +package redis + +import ( + "bytes" + "context" + "encoding/json" + "testing" + + "github.com/stretchr/testify/mock" + "github.com/stretchr/testify/require" + nodev1 "github.com/wundergraph/cosmo/router/gen/proto/wg/cosmo/node/v1" + "github.com/wundergraph/cosmo/router/pkg/pubsub/pubsubtest" +) + +func TestRedisPubSubDataSource(t *testing.T) { + // Create the data source to test with a real adapter + adapter := &Adapter{} + pubsub := &PubSubDataSource{ + EventConfiguration: &nodev1.RedisEventConfiguration{ + EngineEventConfiguration: &nodev1.EngineEventConfiguration{ + FieldName: "testField", + TypeName: "TestType", + Type: nodev1.EventType_PUBLISH, + ProviderId: "test-provider", + }, + Channels: []string{"test-channel"}, + }, + RedisAdapter: adapter, + } + + // Run the standard test suite + pubsubtest.VerifyPubSubDataSourceImplementation(t, pubsub) +} + +// TestPubSubDataSourceWithMockAdapter tests the PubSubDataSource with a mocked adapter +func TestPubSubDataSourceWithMockAdapter(t *testing.T) { + // Create mock adapter + mockAdapter := NewMockAdapterInterface(t) + + // Configure mock expectations for Publish + mockAdapter.On("Publish", mock.Anything, mock.MatchedBy(func(event PublishEventConfiguration) bool { + return event.ProviderID == "test-provider" && event.Channel == "test-channel" + })).Return(nil) + + // Create the data source with mock adapter + pubsub := &PubSubDataSource{ + EventConfiguration: &nodev1.RedisEventConfiguration{ + EngineEventConfiguration: &nodev1.EngineEventConfiguration{ + FieldName: "testField", + TypeName: "TestType", + Type: nodev1.EventType_PUBLISH, + ProviderId: "test-provider", + }, + Channels: []string{"test-channel"}, + }, + RedisAdapter: mockAdapter, + } + + // Get the data source + ds, err := pubsub.ResolveDataSource() + require.NoError(t, err) + + // Get the input + input, err := pubsub.ResolveDataSourceInput([]byte(`{"test":"data"}`)) + require.NoError(t, err) + + // Call Load on the data source + out := &bytes.Buffer{} + err = ds.Load(context.Background(), []byte(input), out) + require.NoError(t, err) + require.Equal(t, `{"success": true}`, out.String()) +} + +// TestPubSubDataSource_GetResolveDataSource_WrongType tests the PubSubDataSource with a mocked adapter +func TestPubSubDataSource_GetResolveDataSource_WrongType(t *testing.T) { + // Create mock adapter + mockAdapter := NewMockAdapterInterface(t) + + // Create the data source with mock adapter + pubsub := &PubSubDataSource{ + EventConfiguration: &nodev1.RedisEventConfiguration{ + EngineEventConfiguration: &nodev1.EngineEventConfiguration{ + FieldName: "testField", + TypeName: "TestType", + Type: nodev1.EventType_SUBSCRIBE, + ProviderId: "test-provider", + }, + Channels: []string{"test-channel"}, + }, + RedisAdapter: mockAdapter, + } + + // Get the data source + ds, err := pubsub.ResolveDataSource() + require.Error(t, err) + require.Nil(t, ds) +} + +// TestPubSubDataSource_GetResolveDataSourceInput_MultipleChannels tests the PubSubDataSource with a mocked adapter +func TestPubSubDataSource_GetResolveDataSourceInput_MultipleChannels(t *testing.T) { + // Create the data source with mock adapter + pubsub := &PubSubDataSource{ + EventConfiguration: &nodev1.RedisEventConfiguration{ + EngineEventConfiguration: &nodev1.EngineEventConfiguration{ + FieldName: "testField", + TypeName: "TestType", + Type: nodev1.EventType_PUBLISH, + ProviderId: "test-provider", + }, + Channels: []string{"test-channel-1", "test-channel-2"}, + }, + } + + // Get the input + input, err := pubsub.ResolveDataSourceInput([]byte(`{"test":"data"}`)) + require.Error(t, err) + require.Empty(t, input) +} + +// TestPubSubDataSource_GetResolveDataSourceInput_NoChannels tests the PubSubDataSource with a mocked adapter +func TestPubSubDataSource_GetResolveDataSourceInput_NoChannels(t *testing.T) { + // Create the data source with mock adapter + pubsub := &PubSubDataSource{ + EventConfiguration: &nodev1.RedisEventConfiguration{ + EngineEventConfiguration: &nodev1.EngineEventConfiguration{ + FieldName: "testField", + TypeName: "TestType", + Type: nodev1.EventType_PUBLISH, + ProviderId: "test-provider", + }, + Channels: []string{}, + }, + } + + // Get the input + input, err := pubsub.ResolveDataSourceInput([]byte(`{"test":"data"}`)) + require.Error(t, err) + require.Empty(t, input) +} + +// TestRedisPubSubDataSourceMultiChannelSubscription tests only the subscription functionality +// for multiple channels. The publish and resolve datasource tests are skipped since they +// do not support multiple channels. +func TestRedisPubSubDataSourceMultiChannelSubscription(t *testing.T) { + // Create the data source to test with mock adapter + pubsub := &PubSubDataSource{ + EventConfiguration: &nodev1.RedisEventConfiguration{ + EngineEventConfiguration: &nodev1.EngineEventConfiguration{ + FieldName: "testField", + TypeName: "TestType", + Type: nodev1.EventType_PUBLISH, + ProviderId: "test-provider", + }, + Channels: []string{"test-channel-1", "test-channel-2"}, + }, + } + + // Test GetResolveDataSourceSubscriptionInput + subscriptionInput, err := pubsub.ResolveDataSourceSubscriptionInput() + require.NoError(t, err, "Expected no error from GetResolveDataSourceSubscriptionInput") + require.NotEmpty(t, subscriptionInput, "Expected non-empty subscription input") + + // Verify the subscription input contains both channels + var subscriptionConfig SubscriptionEventConfiguration + err = json.Unmarshal([]byte(subscriptionInput), &subscriptionConfig) + require.NoError(t, err, "Expected valid JSON from GetResolveDataSourceSubscriptionInput") + require.Equal(t, 2, len(subscriptionConfig.Channels), "Expected 2 channels in subscription configuration") + require.Equal(t, "test-channel-1", subscriptionConfig.Channels[0], "Expected first channel to be 'test-channel-1'") + require.Equal(t, "test-channel-2", subscriptionConfig.Channels[1], "Expected second channel to be 'test-channel-2'") +} From aeced3b234b7468737e207673eee6b74da8cc7a7 Mon Sep 17 00:00:00 2001 From: Alessandro Pagnin Date: Thu, 5 Jun 2025 09:21:47 +0200 Subject: [PATCH 098/126] chore: reduce parallel things in the matrix --- .github/workflows/router-ci.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/router-ci.yaml b/.github/workflows/router-ci.yaml index 4659f5712f..244f9cfbd3 100644 --- a/.github/workflows/router-ci.yaml +++ b/.github/workflows/router-ci.yaml @@ -137,6 +137,7 @@ jobs: runs-on: ubuntu-latest timeout-minutes: 30 strategy: + max-parallel: 1 matrix: test_target: [non_flaky, flaky] services: From ac59b12155c08becafd3a9700adec85821e0631d Mon Sep 17 00:00:00 2001 From: Alessandro Pagnin Date: Thu, 5 Jun 2025 16:30:30 +0200 Subject: [PATCH 099/126] chore: go mod tidy --- demo/go.mod | 2 +- router-tests/go.mod | 1 - router-tests/go.sum | 7 ------- 3 files changed, 1 insertion(+), 9 deletions(-) diff --git a/demo/go.mod b/demo/go.mod index c6334a6a10..8987afbe84 100644 --- a/demo/go.mod +++ b/demo/go.mod @@ -13,7 +13,6 @@ require ( github.com/wundergraph/cosmo/composition-go v0.0.0-20240124120900-5effe48a4a1d github.com/wundergraph/cosmo/router v0.0.0-20250603094938-922424d50778 github.com/wundergraph/cosmo/router-tests v0.0.0-20250603094938-922424d50778 - github.com/wundergraph/graphql-go-tools/v2 v2.0.0-rc.183 go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.46.1 go.opentelemetry.io/otel v1.28.0 go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.23.1 @@ -150,6 +149,7 @@ require ( github.com/twmb/franz-go/pkg/kmsg v1.7.0 // indirect github.com/urfave/cli/v2 v2.27.5 // indirect github.com/wundergraph/astjson v0.0.0-20250106123708-be463c97e083 // indirect + github.com/wundergraph/graphql-go-tools/v2 v2.0.0-rc.183 // indirect github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb // indirect github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 // indirect github.com/xeipuuv/gojsonschema v1.2.0 // indirect diff --git a/router-tests/go.mod b/router-tests/go.mod index 819549aa03..fa1400e45f 100644 --- a/router-tests/go.mod +++ b/router-tests/go.mod @@ -133,7 +133,6 @@ require ( github.com/urfave/cli/v2 v2.27.5 // indirect github.com/vektah/gqlparser/v2 v2.5.21 // indirect github.com/wundergraph/astjson v0.0.0-20250106123708-be463c97e083 // indirect - github.com/wundergraph/graphql-go-tools/v2 v2.0.0-rc.183 // indirect github.com/xrash/smetrics v0.0.0-20240521201337-686a1a2994c1 // indirect github.com/yosida95/uritemplate/v3 v3.0.2 // indirect github.com/yusufpapurcu/wmi v1.2.4 // indirect diff --git a/router-tests/go.sum b/router-tests/go.sum index 57b5dacde0..bc55656c86 100644 --- a/router-tests/go.sum +++ b/router-tests/go.sum @@ -326,13 +326,6 @@ github.com/wundergraph/consul/sdk v0.0.0-20250204115147-ed842a8fd301 h1:EzfKHQoT github.com/wundergraph/consul/sdk v0.0.0-20250204115147-ed842a8fd301/go.mod h1:wxI0Nak5dI5RvJuzGyiEK4nZj0O9X+Aw6U0tC1wPKq0= github.com/wundergraph/graphql-go-tools/v2 v2.0.0-rc.185 h1:QiUOozHuaU9yqE4pA0QFJ84/5leQdokrK9QWGUbnj68= github.com/wundergraph/graphql-go-tools/v2 v2.0.0-rc.185/go.mod h1:8N4c4JRDknFdph84ZCcHxgNBjnW7f3aiIycmpG/IhCc= -github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= -github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb h1:zGWFAtiMcyryUHoUjUJX0/lt1H2+i2Ka2n+D3DImSNo= -github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= -github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 h1:EzJWgHovont7NscjpAxXsDA8S8BMYve8Y5+7cuRE7R0= -github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ= -github.com/xeipuuv/gojsonschema v1.2.0 h1:LhYJRs+L4fBtjZUfuSZIKGeVu0QRy8e5Xi7D17UxZ74= -github.com/xeipuuv/gojsonschema v1.2.0/go.mod h1:anYRn/JVcOK2ZgGU+IjEV4nwlhoK5sQluxsYJ78Id3Y= github.com/xrash/smetrics v0.0.0-20240521201337-686a1a2994c1 h1:gEOO8jv9F4OT7lGCjxCBTO/36wtF6j2nSip77qHd4x4= github.com/xrash/smetrics v0.0.0-20240521201337-686a1a2994c1/go.mod h1:Ohn+xnUBiLI6FVj/9LpzZWtj1/D6lUovWYBkxHVV3aM= github.com/yosida95/uritemplate/v3 v3.0.2 h1:Ed3Oyj9yrmi9087+NczuL5BwkIc4wvTb5zIM+UJPGz4= From 31ae243dd7dfad03b93a936d8bb1369df41e38b7 Mon Sep 17 00:00:00 2001 From: Alessandro Pagnin Date: Thu, 5 Jun 2025 16:48:05 +0200 Subject: [PATCH 100/126] chore: use table in the README --- router/pkg/pubsub/README.md | 30 ++++++++---------------------- 1 file changed, 8 insertions(+), 22 deletions(-) diff --git a/router/pkg/pubsub/README.md b/router/pkg/pubsub/README.md index a8a2b03899..ef55b9525b 100644 --- a/router/pkg/pubsub/README.md +++ b/router/pkg/pubsub/README.md @@ -108,35 +108,21 @@ This will generate the mocks in the `{your-provider-name}/mocks.go` file. You can then use the mocks in your tests. -#### Add engine_datasource_test.go +### Tests -You should also add tests of your engine_datasource.go file. +You should add tests as specified in the table below. -You can use the [kafka implementation](./kafka/engine_datasource_test.go) as a reference. - -#### Add pubsub_datasource_test.go - -You should also add tests of your pubsub_datasource.go file. - -You can use the [kafka implementation](./kafka/pubsub_datasource_test.go) as a reference. - -#### Add provider_builder_test.go - -You should also add tests of your provider_builder.go file. - -You can use the [kafka implementation](./kafka/provider_builder_test.go) as a reference. - -#### Add pubsub_test.go - -You should also add tests of your changes to the [pubsub.go](./pubsub.go) file. - -You can use the [TestBuildProvidersAndDataSources_Kafka_OK](./pubsub_test.go) as a reference. +| Implementation File | Test File | Reference File | +|-------------------|-----------|-----------------| +| engine_datasource.go | engine_datasource_test.go | [kafka implementation](./kafka/engine_datasource_test.go) | +| pubsub_datasource.go | pubsub_datasource_test.go | [kafka implementation](./kafka/pubsub_datasource_test.go) | +| provider_builder.go | provider_builder_test.go | [kafka implementation](./kafka/provider_builder_test.go) | +| pubsub.go | pubsub_test.go | TestBuildProvidersAndDataSources_Kafka_OK | ## Add the provider to the router Update the `BuildProvidersAndDataSources` function in the [pubsub.go](./pubsub.go) file to include your new provider. - ## How to use the new PubSub Provider After you have implemented all the above, you can use your PubSub Provider by adding the following to your router config: From 5dbef227aacfd665807bf31c8ec551c6360bd12b Mon Sep 17 00:00:00 2001 From: Alessandro Pagnin Date: Thu, 5 Jun 2025 17:16:05 +0200 Subject: [PATCH 101/126] chore: made changes suggested in PR --- router/.mockery.yml | 6 +- router/core/executor.go | 4 +- router/core/factoryresolver.go | 4 +- router/core/graph_server.go | 8 +- .../pubsub/datasource/datasource_factory.go | 4 +- router/pkg/pubsub/datasource/factory.go | 12 +- router/pkg/pubsub/datasource/mocks.go | 244 +++++++++--------- router/pkg/pubsub/datasource/provider.go | 19 +- router/pkg/pubsub/datasource/provider_impl.go | 45 ---- .../pkg/pubsub/datasource/pubsubprovider.go | 45 ++++ ...er_impl_test.go => pubsubprovider_test.go} | 20 +- router/pkg/pubsub/kafka/provider_builder.go | 7 +- .../pkg/pubsub/kafka/provider_builder_test.go | 2 +- router/pkg/pubsub/kafka/pubsub_datasource.go | 1 - .../pubsub/kafka/pubsub_datasource_test.go | 6 - router/pkg/pubsub/nats/provider_builder.go | 8 +- .../pkg/pubsub/nats/provider_builder_test.go | 2 +- router/pkg/pubsub/nats/pubsub_datasource.go | 1 - .../pkg/pubsub/nats/pubsub_datasource_test.go | 11 - router/pkg/pubsub/pubsub.go | 10 +- router/pkg/pubsub/pubsub_test.go | 12 +- 21 files changed, 225 insertions(+), 246 deletions(-) delete mode 100644 router/pkg/pubsub/datasource/provider_impl.go create mode 100644 router/pkg/pubsub/datasource/pubsubprovider.go rename router/pkg/pubsub/datasource/{provider_impl_test.go => pubsubprovider_test.go} (78%) diff --git a/router/.mockery.yml b/router/.mockery.yml index 0ebdb2b876..5389f97584 100644 --- a/router/.mockery.yml +++ b/router/.mockery.yml @@ -13,10 +13,10 @@ template-schema: '{{.Template}}.schema.json' packages: github.com/wundergraph/cosmo/router/pkg/pubsub/datasource: interfaces: - Lifecycle: - PubSubProviderBuilder: + ProviderLifecycle: + ProviderBuilder: PubSubDataSource: - PubSubProvider: + Provider: github.com/wundergraph/cosmo/router/pkg/pubsub/nats: interfaces: AdapterInterface: diff --git a/router/core/executor.go b/router/core/executor.go index a911890e4c..74a5225ccd 100644 --- a/router/core/executor.go +++ b/router/core/executor.go @@ -62,7 +62,7 @@ type ExecutorBuildOptions struct { InstanceData InstanceData } -func (b *ExecutorConfigurationBuilder) Build(ctx context.Context, opts *ExecutorBuildOptions) (*Executor, []pubsub_datasource.PubSubProvider, error) { +func (b *ExecutorConfigurationBuilder) Build(ctx context.Context, opts *ExecutorBuildOptions) (*Executor, []pubsub_datasource.Provider, error) { planConfig, providers, err := b.buildPlannerConfiguration(ctx, opts.EngineConfig, opts.Subgraphs, opts.RouterEngineConfig, opts.PluginsEnabled) if err != nil { return nil, nil, fmt.Errorf("failed to build planner configuration: %w", err) @@ -200,7 +200,7 @@ func (b *ExecutorConfigurationBuilder) Build(ctx context.Context, opts *Executor }, providers, nil } -func (b *ExecutorConfigurationBuilder) buildPlannerConfiguration(ctx context.Context, engineConfig *nodev1.EngineConfiguration, subgraphs []*nodev1.Subgraph, routerEngineCfg *RouterEngineConfiguration, pluginsEnabled bool) (*plan.Configuration, []pubsub_datasource.PubSubProvider, error) { +func (b *ExecutorConfigurationBuilder) buildPlannerConfiguration(ctx context.Context, engineConfig *nodev1.EngineConfiguration, subgraphs []*nodev1.Subgraph, routerEngineCfg *RouterEngineConfiguration, pluginsEnabled bool) (*plan.Configuration, []pubsub_datasource.Provider, error) { // this loader is used to take the engine config and create a plan config // the plan config is what the engine uses to turn a GraphQL Request into an execution plan // the plan config is stateful as it carries connection pools and other things diff --git a/router/core/factoryresolver.go b/router/core/factoryresolver.go index 767e37f748..ceece61fc8 100644 --- a/router/core/factoryresolver.go +++ b/router/core/factoryresolver.go @@ -266,7 +266,7 @@ func mapProtoFilterToPlanFilter(input *nodev1.SubscriptionFilterCondition, outpu return nil } -func (l *Loader) Load(engineConfig *nodev1.EngineConfiguration, subgraphs []*nodev1.Subgraph, routerEngineConfig *RouterEngineConfiguration, pluginsEnabled bool) (*plan.Configuration, []pubsub_datasource.PubSubProvider, error) { +func (l *Loader) Load(engineConfig *nodev1.EngineConfiguration, subgraphs []*nodev1.Subgraph, routerEngineConfig *RouterEngineConfiguration, pluginsEnabled bool) (*plan.Configuration, []pubsub_datasource.Provider, error) { var outConfig plan.Configuration // attach field usage information to the plan outConfig.DefaultFlushIntervalMillis = engineConfig.DefaultFlushInterval @@ -301,7 +301,7 @@ func (l *Loader) Load(engineConfig *nodev1.EngineConfiguration, subgraphs []*nod }) } - var providers []pubsub_datasource.PubSubProvider + var providers []pubsub_datasource.Provider var pubSubDS []pubsub.DataSourceConfigurationWithMetadata for _, in := range engineConfig.DatasourceConfigurations { diff --git a/router/core/graph_server.go b/router/core/graph_server.go index 2552542d44..447382c1e3 100644 --- a/router/core/graph_server.go +++ b/router/core/graph_server.go @@ -90,7 +90,7 @@ type ( prometheusEngineMetrics *rmetric.EngineMetrics connectionMetrics *rmetric.ConnectionMetrics instanceData InstanceData - pubSubProviders []datasource.PubSubProvider + pubSubProviders []datasource.Provider traceDialer *TraceDialer pluginHost *routerplugin.Host } @@ -1487,7 +1487,7 @@ func (s *graphServer) startupPubSubProviders(ctx context.Context) error { // Default timeout for pubsub provider startup const defaultStartupTimeout = 5 * time.Second - return s.providersActionWithTimeout(ctx, func(ctx context.Context, provider datasource.PubSubProvider) error { + return s.providersActionWithTimeout(ctx, func(ctx context.Context, provider datasource.Provider) error { return provider.Startup(ctx) }, defaultStartupTimeout, "pubsub provider startup timed out") } @@ -1499,12 +1499,12 @@ func (s *graphServer) shutdownPubSubProviders(ctx context.Context) error { // Default timeout for pubsub provider shutdown const defaultShutdownTimeout = 5 * time.Second - return s.providersActionWithTimeout(ctx, func(ctx context.Context, provider datasource.PubSubProvider) error { + return s.providersActionWithTimeout(ctx, func(ctx context.Context, provider datasource.Provider) error { return provider.Shutdown(ctx) }, defaultShutdownTimeout, "pubsub provider shutdown timed out") } -func (s *graphServer) providersActionWithTimeout(ctx context.Context, action func(ctx context.Context, provider datasource.PubSubProvider) error, timeout time.Duration, timeoutMessage string) error { +func (s *graphServer) providersActionWithTimeout(ctx context.Context, action func(ctx context.Context, provider datasource.Provider) error, timeout time.Duration, timeoutMessage string) error { cancellableCtx, cancel := context.WithCancel(ctx) defer cancel() diff --git a/router/pkg/pubsub/datasource/datasource_factory.go b/router/pkg/pubsub/datasource/datasource_factory.go index 2eb8db4d7f..bef3eb7ee1 100644 --- a/router/pkg/pubsub/datasource/datasource_factory.go +++ b/router/pkg/pubsub/datasource/datasource_factory.go @@ -1,7 +1,7 @@ package datasource type PubSubDataSourceFactory[P, E any] struct { - providerBuilder PubSubProviderBuilder[P, E] + providerBuilder ProviderBuilder[P, E] event E } @@ -9,7 +9,7 @@ func (p *PubSubDataSourceFactory[P, E]) BuildDataSource() (PubSubDataSource, err return p.providerBuilder.BuildDataSource(p.event) } -func NewPubSubDataSourceFactory[P, E any](builder PubSubProviderBuilder[P, E], event E) *PubSubDataSourceFactory[P, E] { +func NewPubSubDataSourceFactory[P, E any](builder ProviderBuilder[P, E], event E) *PubSubDataSourceFactory[P, E] { return &PubSubDataSourceFactory[P, E]{ providerBuilder: builder, event: event, diff --git a/router/pkg/pubsub/datasource/factory.go b/router/pkg/pubsub/datasource/factory.go index 1b9c2d9083..44640a4478 100644 --- a/router/pkg/pubsub/datasource/factory.go +++ b/router/pkg/pubsub/datasource/factory.go @@ -8,28 +8,28 @@ import ( "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/plan" ) -func NewFactory[P, E any](executionContext context.Context, pubSubDataSourceFactory *PubSubDataSourceFactory[P, E]) *Factory[P, E] { - return &Factory[P, E]{ +func NewPlannerFactory[P, E any](executionContext context.Context, pubSubDataSourceFactory *PubSubDataSourceFactory[P, E]) *PlannerFactory[P, E] { + return &PlannerFactory[P, E]{ pubSubDataSourceFactory: pubSubDataSourceFactory, executionContext: executionContext, } } -type Factory[P, E any] struct { +type PlannerFactory[P, E any] struct { pubSubDataSourceFactory *PubSubDataSourceFactory[P, E] executionContext context.Context } -func (f *Factory[P, E]) Planner(_ abstractlogger.Logger) plan.DataSourcePlanner[*PubSubDataSourceFactory[P, E]] { +func (f *PlannerFactory[P, E]) Planner(_ abstractlogger.Logger) plan.DataSourcePlanner[*PubSubDataSourceFactory[P, E]] { return &Planner[P, E]{ pubSubDataSourceFactory: f.pubSubDataSourceFactory, } } -func (f *Factory[P, E]) Context() context.Context { +func (f *PlannerFactory[P, E]) Context() context.Context { return f.executionContext } -func (f *Factory[P, E]) UpstreamSchema(dataSourceConfig plan.DataSourceConfiguration[*PubSubDataSourceFactory[P, E]]) (*ast.Document, bool) { +func (f *PlannerFactory[P, E]) UpstreamSchema(dataSourceConfig plan.DataSourceConfiguration[*PubSubDataSourceFactory[P, E]]) (*ast.Document, bool) { return nil, false } diff --git a/router/pkg/pubsub/datasource/mocks.go b/router/pkg/pubsub/datasource/mocks.go index 2059a5788f..6b03698588 100644 --- a/router/pkg/pubsub/datasource/mocks.go +++ b/router/pkg/pubsub/datasource/mocks.go @@ -356,13 +356,13 @@ func (_c *MockPubSubDataSource_TransformEventData_Call) RunAndReturn(run func(ex return _c } -// NewMockLifecycle creates a new instance of MockLifecycle. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations. +// NewMockProviderLifecycle creates a new instance of MockProviderLifecycle. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations. // The first argument is typically a *testing.T value. -func NewMockLifecycle(t interface { +func NewMockProviderLifecycle(t interface { mock.TestingT Cleanup(func()) -}) *MockLifecycle { - mock := &MockLifecycle{} +}) *MockProviderLifecycle { + mock := &MockProviderLifecycle{} mock.Mock.Test(t) t.Cleanup(func() { mock.AssertExpectations(t) }) @@ -370,21 +370,21 @@ func NewMockLifecycle(t interface { return mock } -// MockLifecycle is an autogenerated mock type for the Lifecycle type -type MockLifecycle struct { +// MockProviderLifecycle is an autogenerated mock type for the ProviderLifecycle type +type MockProviderLifecycle struct { mock.Mock } -type MockLifecycle_Expecter struct { +type MockProviderLifecycle_Expecter struct { mock *mock.Mock } -func (_m *MockLifecycle) EXPECT() *MockLifecycle_Expecter { - return &MockLifecycle_Expecter{mock: &_m.Mock} +func (_m *MockProviderLifecycle) EXPECT() *MockProviderLifecycle_Expecter { + return &MockProviderLifecycle_Expecter{mock: &_m.Mock} } -// Shutdown provides a mock function for the type MockLifecycle -func (_mock *MockLifecycle) Shutdown(ctx context.Context) error { +// Shutdown provides a mock function for the type MockProviderLifecycle +func (_mock *MockProviderLifecycle) Shutdown(ctx context.Context) error { ret := _mock.Called(ctx) if len(ret) == 0 { @@ -400,18 +400,18 @@ func (_mock *MockLifecycle) Shutdown(ctx context.Context) error { return r0 } -// MockLifecycle_Shutdown_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'Shutdown' -type MockLifecycle_Shutdown_Call struct { +// MockProviderLifecycle_Shutdown_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'Shutdown' +type MockProviderLifecycle_Shutdown_Call struct { *mock.Call } // Shutdown is a helper method to define mock.On call // - ctx context.Context -func (_e *MockLifecycle_Expecter) Shutdown(ctx interface{}) *MockLifecycle_Shutdown_Call { - return &MockLifecycle_Shutdown_Call{Call: _e.mock.On("Shutdown", ctx)} +func (_e *MockProviderLifecycle_Expecter) Shutdown(ctx interface{}) *MockProviderLifecycle_Shutdown_Call { + return &MockProviderLifecycle_Shutdown_Call{Call: _e.mock.On("Shutdown", ctx)} } -func (_c *MockLifecycle_Shutdown_Call) Run(run func(ctx context.Context)) *MockLifecycle_Shutdown_Call { +func (_c *MockProviderLifecycle_Shutdown_Call) Run(run func(ctx context.Context)) *MockProviderLifecycle_Shutdown_Call { _c.Call.Run(func(args mock.Arguments) { var arg0 context.Context if args[0] != nil { @@ -424,18 +424,18 @@ func (_c *MockLifecycle_Shutdown_Call) Run(run func(ctx context.Context)) *MockL return _c } -func (_c *MockLifecycle_Shutdown_Call) Return(err error) *MockLifecycle_Shutdown_Call { +func (_c *MockProviderLifecycle_Shutdown_Call) Return(err error) *MockProviderLifecycle_Shutdown_Call { _c.Call.Return(err) return _c } -func (_c *MockLifecycle_Shutdown_Call) RunAndReturn(run func(ctx context.Context) error) *MockLifecycle_Shutdown_Call { +func (_c *MockProviderLifecycle_Shutdown_Call) RunAndReturn(run func(ctx context.Context) error) *MockProviderLifecycle_Shutdown_Call { _c.Call.Return(run) return _c } -// Startup provides a mock function for the type MockLifecycle -func (_mock *MockLifecycle) Startup(ctx context.Context) error { +// Startup provides a mock function for the type MockProviderLifecycle +func (_mock *MockProviderLifecycle) Startup(ctx context.Context) error { ret := _mock.Called(ctx) if len(ret) == 0 { @@ -451,18 +451,18 @@ func (_mock *MockLifecycle) Startup(ctx context.Context) error { return r0 } -// MockLifecycle_Startup_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'Startup' -type MockLifecycle_Startup_Call struct { +// MockProviderLifecycle_Startup_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'Startup' +type MockProviderLifecycle_Startup_Call struct { *mock.Call } // Startup is a helper method to define mock.On call // - ctx context.Context -func (_e *MockLifecycle_Expecter) Startup(ctx interface{}) *MockLifecycle_Startup_Call { - return &MockLifecycle_Startup_Call{Call: _e.mock.On("Startup", ctx)} +func (_e *MockProviderLifecycle_Expecter) Startup(ctx interface{}) *MockProviderLifecycle_Startup_Call { + return &MockProviderLifecycle_Startup_Call{Call: _e.mock.On("Startup", ctx)} } -func (_c *MockLifecycle_Startup_Call) Run(run func(ctx context.Context)) *MockLifecycle_Startup_Call { +func (_c *MockProviderLifecycle_Startup_Call) Run(run func(ctx context.Context)) *MockProviderLifecycle_Startup_Call { _c.Call.Run(func(args mock.Arguments) { var arg0 context.Context if args[0] != nil { @@ -475,23 +475,23 @@ func (_c *MockLifecycle_Startup_Call) Run(run func(ctx context.Context)) *MockLi return _c } -func (_c *MockLifecycle_Startup_Call) Return(err error) *MockLifecycle_Startup_Call { +func (_c *MockProviderLifecycle_Startup_Call) Return(err error) *MockProviderLifecycle_Startup_Call { _c.Call.Return(err) return _c } -func (_c *MockLifecycle_Startup_Call) RunAndReturn(run func(ctx context.Context) error) *MockLifecycle_Startup_Call { +func (_c *MockProviderLifecycle_Startup_Call) RunAndReturn(run func(ctx context.Context) error) *MockProviderLifecycle_Startup_Call { _c.Call.Return(run) return _c } -// NewMockPubSubProvider creates a new instance of MockPubSubProvider. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations. +// NewMockProvider creates a new instance of MockProvider. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations. // The first argument is typically a *testing.T value. -func NewMockPubSubProvider(t interface { +func NewMockProvider(t interface { mock.TestingT Cleanup(func()) -}) *MockPubSubProvider { - mock := &MockPubSubProvider{} +}) *MockProvider { + mock := &MockProvider{} mock.Mock.Test(t) t.Cleanup(func() { mock.AssertExpectations(t) }) @@ -499,21 +499,21 @@ func NewMockPubSubProvider(t interface { return mock } -// MockPubSubProvider is an autogenerated mock type for the PubSubProvider type -type MockPubSubProvider struct { +// MockProvider is an autogenerated mock type for the Provider type +type MockProvider struct { mock.Mock } -type MockPubSubProvider_Expecter struct { +type MockProvider_Expecter struct { mock *mock.Mock } -func (_m *MockPubSubProvider) EXPECT() *MockPubSubProvider_Expecter { - return &MockPubSubProvider_Expecter{mock: &_m.Mock} +func (_m *MockProvider) EXPECT() *MockProvider_Expecter { + return &MockProvider_Expecter{mock: &_m.Mock} } -// ID provides a mock function for the type MockPubSubProvider -func (_mock *MockPubSubProvider) ID() string { +// ID provides a mock function for the type MockProvider +func (_mock *MockProvider) ID() string { ret := _mock.Called() if len(ret) == 0 { @@ -529,35 +529,35 @@ func (_mock *MockPubSubProvider) ID() string { return r0 } -// MockPubSubProvider_ID_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ID' -type MockPubSubProvider_ID_Call struct { +// MockProvider_ID_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ID' +type MockProvider_ID_Call struct { *mock.Call } // ID is a helper method to define mock.On call -func (_e *MockPubSubProvider_Expecter) ID() *MockPubSubProvider_ID_Call { - return &MockPubSubProvider_ID_Call{Call: _e.mock.On("ID")} +func (_e *MockProvider_Expecter) ID() *MockProvider_ID_Call { + return &MockProvider_ID_Call{Call: _e.mock.On("ID")} } -func (_c *MockPubSubProvider_ID_Call) Run(run func()) *MockPubSubProvider_ID_Call { +func (_c *MockProvider_ID_Call) Run(run func()) *MockProvider_ID_Call { _c.Call.Run(func(args mock.Arguments) { run() }) return _c } -func (_c *MockPubSubProvider_ID_Call) Return(s string) *MockPubSubProvider_ID_Call { +func (_c *MockProvider_ID_Call) Return(s string) *MockProvider_ID_Call { _c.Call.Return(s) return _c } -func (_c *MockPubSubProvider_ID_Call) RunAndReturn(run func() string) *MockPubSubProvider_ID_Call { +func (_c *MockProvider_ID_Call) RunAndReturn(run func() string) *MockProvider_ID_Call { _c.Call.Return(run) return _c } -// Shutdown provides a mock function for the type MockPubSubProvider -func (_mock *MockPubSubProvider) Shutdown(ctx context.Context) error { +// Shutdown provides a mock function for the type MockProvider +func (_mock *MockProvider) Shutdown(ctx context.Context) error { ret := _mock.Called(ctx) if len(ret) == 0 { @@ -573,18 +573,18 @@ func (_mock *MockPubSubProvider) Shutdown(ctx context.Context) error { return r0 } -// MockPubSubProvider_Shutdown_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'Shutdown' -type MockPubSubProvider_Shutdown_Call struct { +// MockProvider_Shutdown_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'Shutdown' +type MockProvider_Shutdown_Call struct { *mock.Call } // Shutdown is a helper method to define mock.On call // - ctx context.Context -func (_e *MockPubSubProvider_Expecter) Shutdown(ctx interface{}) *MockPubSubProvider_Shutdown_Call { - return &MockPubSubProvider_Shutdown_Call{Call: _e.mock.On("Shutdown", ctx)} +func (_e *MockProvider_Expecter) Shutdown(ctx interface{}) *MockProvider_Shutdown_Call { + return &MockProvider_Shutdown_Call{Call: _e.mock.On("Shutdown", ctx)} } -func (_c *MockPubSubProvider_Shutdown_Call) Run(run func(ctx context.Context)) *MockPubSubProvider_Shutdown_Call { +func (_c *MockProvider_Shutdown_Call) Run(run func(ctx context.Context)) *MockProvider_Shutdown_Call { _c.Call.Run(func(args mock.Arguments) { var arg0 context.Context if args[0] != nil { @@ -597,18 +597,18 @@ func (_c *MockPubSubProvider_Shutdown_Call) Run(run func(ctx context.Context)) * return _c } -func (_c *MockPubSubProvider_Shutdown_Call) Return(err error) *MockPubSubProvider_Shutdown_Call { +func (_c *MockProvider_Shutdown_Call) Return(err error) *MockProvider_Shutdown_Call { _c.Call.Return(err) return _c } -func (_c *MockPubSubProvider_Shutdown_Call) RunAndReturn(run func(ctx context.Context) error) *MockPubSubProvider_Shutdown_Call { +func (_c *MockProvider_Shutdown_Call) RunAndReturn(run func(ctx context.Context) error) *MockProvider_Shutdown_Call { _c.Call.Return(run) return _c } -// Startup provides a mock function for the type MockPubSubProvider -func (_mock *MockPubSubProvider) Startup(ctx context.Context) error { +// Startup provides a mock function for the type MockProvider +func (_mock *MockProvider) Startup(ctx context.Context) error { ret := _mock.Called(ctx) if len(ret) == 0 { @@ -624,18 +624,18 @@ func (_mock *MockPubSubProvider) Startup(ctx context.Context) error { return r0 } -// MockPubSubProvider_Startup_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'Startup' -type MockPubSubProvider_Startup_Call struct { +// MockProvider_Startup_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'Startup' +type MockProvider_Startup_Call struct { *mock.Call } // Startup is a helper method to define mock.On call // - ctx context.Context -func (_e *MockPubSubProvider_Expecter) Startup(ctx interface{}) *MockPubSubProvider_Startup_Call { - return &MockPubSubProvider_Startup_Call{Call: _e.mock.On("Startup", ctx)} +func (_e *MockProvider_Expecter) Startup(ctx interface{}) *MockProvider_Startup_Call { + return &MockProvider_Startup_Call{Call: _e.mock.On("Startup", ctx)} } -func (_c *MockPubSubProvider_Startup_Call) Run(run func(ctx context.Context)) *MockPubSubProvider_Startup_Call { +func (_c *MockProvider_Startup_Call) Run(run func(ctx context.Context)) *MockProvider_Startup_Call { _c.Call.Run(func(args mock.Arguments) { var arg0 context.Context if args[0] != nil { @@ -648,18 +648,18 @@ func (_c *MockPubSubProvider_Startup_Call) Run(run func(ctx context.Context)) *M return _c } -func (_c *MockPubSubProvider_Startup_Call) Return(err error) *MockPubSubProvider_Startup_Call { +func (_c *MockProvider_Startup_Call) Return(err error) *MockProvider_Startup_Call { _c.Call.Return(err) return _c } -func (_c *MockPubSubProvider_Startup_Call) RunAndReturn(run func(ctx context.Context) error) *MockPubSubProvider_Startup_Call { +func (_c *MockProvider_Startup_Call) RunAndReturn(run func(ctx context.Context) error) *MockProvider_Startup_Call { _c.Call.Return(run) return _c } -// TypeID provides a mock function for the type MockPubSubProvider -func (_mock *MockPubSubProvider) TypeID() string { +// TypeID provides a mock function for the type MockProvider +func (_mock *MockProvider) TypeID() string { ret := _mock.Called() if len(ret) == 0 { @@ -675,40 +675,40 @@ func (_mock *MockPubSubProvider) TypeID() string { return r0 } -// MockPubSubProvider_TypeID_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'TypeID' -type MockPubSubProvider_TypeID_Call struct { +// MockProvider_TypeID_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'TypeID' +type MockProvider_TypeID_Call struct { *mock.Call } // TypeID is a helper method to define mock.On call -func (_e *MockPubSubProvider_Expecter) TypeID() *MockPubSubProvider_TypeID_Call { - return &MockPubSubProvider_TypeID_Call{Call: _e.mock.On("TypeID")} +func (_e *MockProvider_Expecter) TypeID() *MockProvider_TypeID_Call { + return &MockProvider_TypeID_Call{Call: _e.mock.On("TypeID")} } -func (_c *MockPubSubProvider_TypeID_Call) Run(run func()) *MockPubSubProvider_TypeID_Call { +func (_c *MockProvider_TypeID_Call) Run(run func()) *MockProvider_TypeID_Call { _c.Call.Run(func(args mock.Arguments) { run() }) return _c } -func (_c *MockPubSubProvider_TypeID_Call) Return(s string) *MockPubSubProvider_TypeID_Call { +func (_c *MockProvider_TypeID_Call) Return(s string) *MockProvider_TypeID_Call { _c.Call.Return(s) return _c } -func (_c *MockPubSubProvider_TypeID_Call) RunAndReturn(run func() string) *MockPubSubProvider_TypeID_Call { +func (_c *MockProvider_TypeID_Call) RunAndReturn(run func() string) *MockProvider_TypeID_Call { _c.Call.Return(run) return _c } -// NewMockPubSubProviderBuilder creates a new instance of MockPubSubProviderBuilder. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations. +// NewMockProviderBuilder creates a new instance of MockProviderBuilder. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations. // The first argument is typically a *testing.T value. -func NewMockPubSubProviderBuilder[P any, E any](t interface { +func NewMockProviderBuilder[P any, E any](t interface { mock.TestingT Cleanup(func()) -}) *MockPubSubProviderBuilder[P, E] { - mock := &MockPubSubProviderBuilder[P, E]{} +}) *MockProviderBuilder[P, E] { + mock := &MockProviderBuilder[P, E]{} mock.Mock.Test(t) t.Cleanup(func() { mock.AssertExpectations(t) }) @@ -716,21 +716,21 @@ func NewMockPubSubProviderBuilder[P any, E any](t interface { return mock } -// MockPubSubProviderBuilder is an autogenerated mock type for the PubSubProviderBuilder type -type MockPubSubProviderBuilder[P any, E any] struct { +// MockProviderBuilder is an autogenerated mock type for the ProviderBuilder type +type MockProviderBuilder[P any, E any] struct { mock.Mock } -type MockPubSubProviderBuilder_Expecter[P any, E any] struct { +type MockProviderBuilder_Expecter[P any, E any] struct { mock *mock.Mock } -func (_m *MockPubSubProviderBuilder[P, E]) EXPECT() *MockPubSubProviderBuilder_Expecter[P, E] { - return &MockPubSubProviderBuilder_Expecter[P, E]{mock: &_m.Mock} +func (_m *MockProviderBuilder[P, E]) EXPECT() *MockProviderBuilder_Expecter[P, E] { + return &MockProviderBuilder_Expecter[P, E]{mock: &_m.Mock} } -// BuildDataSource provides a mock function for the type MockPubSubProviderBuilder -func (_mock *MockPubSubProviderBuilder[P, E]) BuildDataSource(data E) (PubSubDataSource, error) { +// BuildDataSource provides a mock function for the type MockProviderBuilder +func (_mock *MockProviderBuilder[P, E]) BuildDataSource(data E) (PubSubDataSource, error) { ret := _mock.Called(data) if len(ret) == 0 { @@ -757,18 +757,18 @@ func (_mock *MockPubSubProviderBuilder[P, E]) BuildDataSource(data E) (PubSubDat return r0, r1 } -// MockPubSubProviderBuilder_BuildDataSource_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'BuildDataSource' -type MockPubSubProviderBuilder_BuildDataSource_Call[P any, E any] struct { +// MockProviderBuilder_BuildDataSource_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'BuildDataSource' +type MockProviderBuilder_BuildDataSource_Call[P any, E any] struct { *mock.Call } // BuildDataSource is a helper method to define mock.On call // - data E -func (_e *MockPubSubProviderBuilder_Expecter[P, E]) BuildDataSource(data interface{}) *MockPubSubProviderBuilder_BuildDataSource_Call[P, E] { - return &MockPubSubProviderBuilder_BuildDataSource_Call[P, E]{Call: _e.mock.On("BuildDataSource", data)} +func (_e *MockProviderBuilder_Expecter[P, E]) BuildDataSource(data interface{}) *MockProviderBuilder_BuildDataSource_Call[P, E] { + return &MockProviderBuilder_BuildDataSource_Call[P, E]{Call: _e.mock.On("BuildDataSource", data)} } -func (_c *MockPubSubProviderBuilder_BuildDataSource_Call[P, E]) Run(run func(data E)) *MockPubSubProviderBuilder_BuildDataSource_Call[P, E] { +func (_c *MockProviderBuilder_BuildDataSource_Call[P, E]) Run(run func(data E)) *MockProviderBuilder_BuildDataSource_Call[P, E] { _c.Call.Run(func(args mock.Arguments) { var arg0 E if args[0] != nil { @@ -781,18 +781,18 @@ func (_c *MockPubSubProviderBuilder_BuildDataSource_Call[P, E]) Run(run func(dat return _c } -func (_c *MockPubSubProviderBuilder_BuildDataSource_Call[P, E]) Return(pubSubDataSource PubSubDataSource, err error) *MockPubSubProviderBuilder_BuildDataSource_Call[P, E] { +func (_c *MockProviderBuilder_BuildDataSource_Call[P, E]) Return(pubSubDataSource PubSubDataSource, err error) *MockProviderBuilder_BuildDataSource_Call[P, E] { _c.Call.Return(pubSubDataSource, err) return _c } -func (_c *MockPubSubProviderBuilder_BuildDataSource_Call[P, E]) RunAndReturn(run func(data E) (PubSubDataSource, error)) *MockPubSubProviderBuilder_BuildDataSource_Call[P, E] { +func (_c *MockProviderBuilder_BuildDataSource_Call[P, E]) RunAndReturn(run func(data E) (PubSubDataSource, error)) *MockProviderBuilder_BuildDataSource_Call[P, E] { _c.Call.Return(run) return _c } -// BuildDataSourceFactory provides a mock function for the type MockPubSubProviderBuilder -func (_mock *MockPubSubProviderBuilder[P, E]) BuildDataSourceFactory(data E) *PubSubDataSourceFactory[P, E] { +// BuildDataSourceFactory provides a mock function for the type MockProviderBuilder +func (_mock *MockProviderBuilder[P, E]) BuildDataSourceFactory(data E) *PubSubDataSourceFactory[P, E] { ret := _mock.Called(data) if len(ret) == 0 { @@ -810,18 +810,18 @@ func (_mock *MockPubSubProviderBuilder[P, E]) BuildDataSourceFactory(data E) *Pu return r0 } -// MockPubSubProviderBuilder_BuildDataSourceFactory_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'BuildDataSourceFactory' -type MockPubSubProviderBuilder_BuildDataSourceFactory_Call[P any, E any] struct { +// MockProviderBuilder_BuildDataSourceFactory_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'BuildDataSourceFactory' +type MockProviderBuilder_BuildDataSourceFactory_Call[P any, E any] struct { *mock.Call } // BuildDataSourceFactory is a helper method to define mock.On call // - data E -func (_e *MockPubSubProviderBuilder_Expecter[P, E]) BuildDataSourceFactory(data interface{}) *MockPubSubProviderBuilder_BuildDataSourceFactory_Call[P, E] { - return &MockPubSubProviderBuilder_BuildDataSourceFactory_Call[P, E]{Call: _e.mock.On("BuildDataSourceFactory", data)} +func (_e *MockProviderBuilder_Expecter[P, E]) BuildDataSourceFactory(data interface{}) *MockProviderBuilder_BuildDataSourceFactory_Call[P, E] { + return &MockProviderBuilder_BuildDataSourceFactory_Call[P, E]{Call: _e.mock.On("BuildDataSourceFactory", data)} } -func (_c *MockPubSubProviderBuilder_BuildDataSourceFactory_Call[P, E]) Run(run func(data E)) *MockPubSubProviderBuilder_BuildDataSourceFactory_Call[P, E] { +func (_c *MockProviderBuilder_BuildDataSourceFactory_Call[P, E]) Run(run func(data E)) *MockProviderBuilder_BuildDataSourceFactory_Call[P, E] { _c.Call.Run(func(args mock.Arguments) { var arg0 E if args[0] != nil { @@ -834,34 +834,34 @@ func (_c *MockPubSubProviderBuilder_BuildDataSourceFactory_Call[P, E]) Run(run f return _c } -func (_c *MockPubSubProviderBuilder_BuildDataSourceFactory_Call[P, E]) Return(pubSubDataSourceFactory *PubSubDataSourceFactory[P, E]) *MockPubSubProviderBuilder_BuildDataSourceFactory_Call[P, E] { +func (_c *MockProviderBuilder_BuildDataSourceFactory_Call[P, E]) Return(pubSubDataSourceFactory *PubSubDataSourceFactory[P, E]) *MockProviderBuilder_BuildDataSourceFactory_Call[P, E] { _c.Call.Return(pubSubDataSourceFactory) return _c } -func (_c *MockPubSubProviderBuilder_BuildDataSourceFactory_Call[P, E]) RunAndReturn(run func(data E) *PubSubDataSourceFactory[P, E]) *MockPubSubProviderBuilder_BuildDataSourceFactory_Call[P, E] { +func (_c *MockProviderBuilder_BuildDataSourceFactory_Call[P, E]) RunAndReturn(run func(data E) *PubSubDataSourceFactory[P, E]) *MockProviderBuilder_BuildDataSourceFactory_Call[P, E] { _c.Call.Return(run) return _c } -// BuildProvider provides a mock function for the type MockPubSubProviderBuilder -func (_mock *MockPubSubProviderBuilder[P, E]) BuildProvider(options P) (PubSubProvider, error) { +// BuildProvider provides a mock function for the type MockProviderBuilder +func (_mock *MockProviderBuilder[P, E]) BuildProvider(options P) (Provider, error) { ret := _mock.Called(options) if len(ret) == 0 { panic("no return value specified for BuildProvider") } - var r0 PubSubProvider + var r0 Provider var r1 error - if returnFunc, ok := ret.Get(0).(func(P) (PubSubProvider, error)); ok { + if returnFunc, ok := ret.Get(0).(func(P) (Provider, error)); ok { return returnFunc(options) } - if returnFunc, ok := ret.Get(0).(func(P) PubSubProvider); ok { + if returnFunc, ok := ret.Get(0).(func(P) Provider); ok { r0 = returnFunc(options) } else { if ret.Get(0) != nil { - r0 = ret.Get(0).(PubSubProvider) + r0 = ret.Get(0).(Provider) } } if returnFunc, ok := ret.Get(1).(func(P) error); ok { @@ -872,18 +872,18 @@ func (_mock *MockPubSubProviderBuilder[P, E]) BuildProvider(options P) (PubSubPr return r0, r1 } -// MockPubSubProviderBuilder_BuildProvider_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'BuildProvider' -type MockPubSubProviderBuilder_BuildProvider_Call[P any, E any] struct { +// MockProviderBuilder_BuildProvider_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'BuildProvider' +type MockProviderBuilder_BuildProvider_Call[P any, E any] struct { *mock.Call } // BuildProvider is a helper method to define mock.On call // - options P -func (_e *MockPubSubProviderBuilder_Expecter[P, E]) BuildProvider(options interface{}) *MockPubSubProviderBuilder_BuildProvider_Call[P, E] { - return &MockPubSubProviderBuilder_BuildProvider_Call[P, E]{Call: _e.mock.On("BuildProvider", options)} +func (_e *MockProviderBuilder_Expecter[P, E]) BuildProvider(options interface{}) *MockProviderBuilder_BuildProvider_Call[P, E] { + return &MockProviderBuilder_BuildProvider_Call[P, E]{Call: _e.mock.On("BuildProvider", options)} } -func (_c *MockPubSubProviderBuilder_BuildProvider_Call[P, E]) Run(run func(options P)) *MockPubSubProviderBuilder_BuildProvider_Call[P, E] { +func (_c *MockProviderBuilder_BuildProvider_Call[P, E]) Run(run func(options P)) *MockProviderBuilder_BuildProvider_Call[P, E] { _c.Call.Run(func(args mock.Arguments) { var arg0 P if args[0] != nil { @@ -896,18 +896,18 @@ func (_c *MockPubSubProviderBuilder_BuildProvider_Call[P, E]) Run(run func(optio return _c } -func (_c *MockPubSubProviderBuilder_BuildProvider_Call[P, E]) Return(pubSubProvider PubSubProvider, err error) *MockPubSubProviderBuilder_BuildProvider_Call[P, E] { - _c.Call.Return(pubSubProvider, err) +func (_c *MockProviderBuilder_BuildProvider_Call[P, E]) Return(provider Provider, err error) *MockProviderBuilder_BuildProvider_Call[P, E] { + _c.Call.Return(provider, err) return _c } -func (_c *MockPubSubProviderBuilder_BuildProvider_Call[P, E]) RunAndReturn(run func(options P) (PubSubProvider, error)) *MockPubSubProviderBuilder_BuildProvider_Call[P, E] { +func (_c *MockProviderBuilder_BuildProvider_Call[P, E]) RunAndReturn(run func(options P) (Provider, error)) *MockProviderBuilder_BuildProvider_Call[P, E] { _c.Call.Return(run) return _c } -// TypeID provides a mock function for the type MockPubSubProviderBuilder -func (_mock *MockPubSubProviderBuilder[P, E]) TypeID() string { +// TypeID provides a mock function for the type MockProviderBuilder +func (_mock *MockProviderBuilder[P, E]) TypeID() string { ret := _mock.Called() if len(ret) == 0 { @@ -923,29 +923,29 @@ func (_mock *MockPubSubProviderBuilder[P, E]) TypeID() string { return r0 } -// MockPubSubProviderBuilder_TypeID_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'TypeID' -type MockPubSubProviderBuilder_TypeID_Call[P any, E any] struct { +// MockProviderBuilder_TypeID_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'TypeID' +type MockProviderBuilder_TypeID_Call[P any, E any] struct { *mock.Call } // TypeID is a helper method to define mock.On call -func (_e *MockPubSubProviderBuilder_Expecter[P, E]) TypeID() *MockPubSubProviderBuilder_TypeID_Call[P, E] { - return &MockPubSubProviderBuilder_TypeID_Call[P, E]{Call: _e.mock.On("TypeID")} +func (_e *MockProviderBuilder_Expecter[P, E]) TypeID() *MockProviderBuilder_TypeID_Call[P, E] { + return &MockProviderBuilder_TypeID_Call[P, E]{Call: _e.mock.On("TypeID")} } -func (_c *MockPubSubProviderBuilder_TypeID_Call[P, E]) Run(run func()) *MockPubSubProviderBuilder_TypeID_Call[P, E] { +func (_c *MockProviderBuilder_TypeID_Call[P, E]) Run(run func()) *MockProviderBuilder_TypeID_Call[P, E] { _c.Call.Run(func(args mock.Arguments) { run() }) return _c } -func (_c *MockPubSubProviderBuilder_TypeID_Call[P, E]) Return(s string) *MockPubSubProviderBuilder_TypeID_Call[P, E] { +func (_c *MockProviderBuilder_TypeID_Call[P, E]) Return(s string) *MockProviderBuilder_TypeID_Call[P, E] { _c.Call.Return(s) return _c } -func (_c *MockPubSubProviderBuilder_TypeID_Call[P, E]) RunAndReturn(run func() string) *MockPubSubProviderBuilder_TypeID_Call[P, E] { +func (_c *MockProviderBuilder_TypeID_Call[P, E]) RunAndReturn(run func() string) *MockProviderBuilder_TypeID_Call[P, E] { _c.Call.Return(run) return _c } diff --git a/router/pkg/pubsub/datasource/provider.go b/router/pkg/pubsub/datasource/provider.go index 3c7b8c0962..507af1900b 100644 --- a/router/pkg/pubsub/datasource/provider.go +++ b/router/pkg/pubsub/datasource/provider.go @@ -6,29 +6,28 @@ import ( type ArgumentTemplateCallback func(tpl string) (string, error) -type Lifecycle interface { +type ProviderLifecycle interface { + // Startup is the method called when the provider is started Startup(ctx context.Context) error + // Shutdown is the method called when the provider is shut down Shutdown(ctx context.Context) error } -// PubSubProvider is the interface that the PubSub provider must implement -type PubSubProvider interface { +// Provider is the interface that the PubSub provider must implement +type Provider interface { + ProviderLifecycle // ID Get the provider ID as specified in the configuration ID() string // TypeID Get the provider type id (e.g. "kafka", "nats") TypeID() string - // Startup is the method called when the provider is started - Startup(ctx context.Context) error - // Shutdown is the method called when the provider is shut down - Shutdown(ctx context.Context) error } -// PubSubProviderBuilder is the interface that the provider builder must implement. -type PubSubProviderBuilder[P, E any] interface { +// ProviderBuilder is the interface that the provider builder must implement. +type ProviderBuilder[P, E any] interface { // TypeID Get the provider type id (e.g. "kafka", "nats") TypeID() string // BuildProvider Build the provider and the adapter - BuildProvider(options P) (PubSubProvider, error) + BuildProvider(options P) (Provider, error) // BuildDataSource Build the data source for the given provider and event configuration BuildDataSource(data E) (PubSubDataSource, error) // BuildDataSource Build the data source for the given provider and event configuration diff --git a/router/pkg/pubsub/datasource/provider_impl.go b/router/pkg/pubsub/datasource/provider_impl.go deleted file mode 100644 index 71047f0dc7..0000000000 --- a/router/pkg/pubsub/datasource/provider_impl.go +++ /dev/null @@ -1,45 +0,0 @@ -package datasource - -import ( - "context" - - "go.uber.org/zap" -) - -type PubSubProviderImpl struct { - id string - typeID string - Adapter Lifecycle - Logger *zap.Logger -} - -func (p *PubSubProviderImpl) ID() string { - return p.id -} - -func (p *PubSubProviderImpl) TypeID() string { - return p.typeID -} - -func (p *PubSubProviderImpl) Startup(ctx context.Context) error { - if err := p.Adapter.Startup(ctx); err != nil { - return err - } - return nil -} - -func (p *PubSubProviderImpl) Shutdown(ctx context.Context) error { - if err := p.Adapter.Shutdown(ctx); err != nil { - return err - } - return nil -} - -func NewPubSubProviderImpl(id string, typeID string, adapter Lifecycle, logger *zap.Logger) *PubSubProviderImpl { - return &PubSubProviderImpl{ - id: id, - typeID: typeID, - Adapter: adapter, - Logger: logger, - } -} diff --git a/router/pkg/pubsub/datasource/pubsubprovider.go b/router/pkg/pubsub/datasource/pubsubprovider.go new file mode 100644 index 0000000000..9e1223d950 --- /dev/null +++ b/router/pkg/pubsub/datasource/pubsubprovider.go @@ -0,0 +1,45 @@ +package datasource + +import ( + "context" + + "go.uber.org/zap" +) + +type PubSubProvider struct { + id string + typeID string + Adapter ProviderLifecycle + Logger *zap.Logger +} + +func (p *PubSubProvider) ID() string { + return p.id +} + +func (p *PubSubProvider) TypeID() string { + return p.typeID +} + +func (p *PubSubProvider) Startup(ctx context.Context) error { + if err := p.Adapter.Startup(ctx); err != nil { + return err + } + return nil +} + +func (p *PubSubProvider) Shutdown(ctx context.Context) error { + if err := p.Adapter.Shutdown(ctx); err != nil { + return err + } + return nil +} + +func NewPubSubProvider(id string, typeID string, adapter ProviderLifecycle, logger *zap.Logger) *PubSubProvider { + return &PubSubProvider{ + id: id, + typeID: typeID, + Adapter: adapter, + Logger: logger, + } +} diff --git a/router/pkg/pubsub/datasource/provider_impl_test.go b/router/pkg/pubsub/datasource/pubsubprovider_test.go similarity index 78% rename from router/pkg/pubsub/datasource/provider_impl_test.go rename to router/pkg/pubsub/datasource/pubsubprovider_test.go index 33515768fd..6579b62072 100644 --- a/router/pkg/pubsub/datasource/provider_impl_test.go +++ b/router/pkg/pubsub/datasource/pubsubprovider_test.go @@ -10,10 +10,10 @@ import ( ) func TestProvider_Startup_Success(t *testing.T) { - mockAdapter := NewMockLifecycle(t) + mockAdapter := NewMockProviderLifecycle(t) mockAdapter.On("Startup", mock.Anything).Return(nil) - provider := PubSubProviderImpl{ + provider := PubSubProvider{ Adapter: mockAdapter, } err := provider.Startup(context.Background()) @@ -22,10 +22,10 @@ func TestProvider_Startup_Success(t *testing.T) { } func TestProvider_Startup_Error(t *testing.T) { - mockAdapter := NewMockLifecycle(t) + mockAdapter := NewMockProviderLifecycle(t) mockAdapter.On("Startup", mock.Anything).Return(errors.New("connect error")) - provider := PubSubProviderImpl{ + provider := PubSubProvider{ Adapter: mockAdapter, } err := provider.Startup(context.Background()) @@ -34,10 +34,10 @@ func TestProvider_Startup_Error(t *testing.T) { } func TestProvider_Shutdown_Success(t *testing.T) { - mockAdapter := NewMockLifecycle(t) + mockAdapter := NewMockProviderLifecycle(t) mockAdapter.On("Shutdown", mock.Anything).Return(nil) - provider := PubSubProviderImpl{ + provider := PubSubProvider{ Adapter: mockAdapter, } err := provider.Shutdown(context.Background()) @@ -46,10 +46,10 @@ func TestProvider_Shutdown_Success(t *testing.T) { } func TestProvider_Shutdown_Error(t *testing.T) { - mockAdapter := NewMockLifecycle(t) + mockAdapter := NewMockProviderLifecycle(t) mockAdapter.On("Shutdown", mock.Anything).Return(errors.New("close error")) - provider := PubSubProviderImpl{ + provider := PubSubProvider{ Adapter: mockAdapter, } err := provider.Shutdown(context.Background()) @@ -59,7 +59,7 @@ func TestProvider_Shutdown_Error(t *testing.T) { func TestProvider_ID(t *testing.T) { const testID = "test-id" - provider := PubSubProviderImpl{ + provider := PubSubProvider{ id: testID, } assert.Equal(t, testID, provider.ID()) @@ -67,7 +67,7 @@ func TestProvider_ID(t *testing.T) { func TestProvider_TypeID(t *testing.T) { const providerTypeID = "test-type-id" - provider := PubSubProviderImpl{ + provider := PubSubProvider{ typeID: providerTypeID, } assert.Equal(t, providerTypeID, provider.TypeID()) diff --git a/router/pkg/pubsub/kafka/provider_builder.go b/router/pkg/pubsub/kafka/provider_builder.go index d62c15280d..2bd55ba1cd 100644 --- a/router/pkg/pubsub/kafka/provider_builder.go +++ b/router/pkg/pubsub/kafka/provider_builder.go @@ -51,7 +51,6 @@ func (p *PubSubProviderBuilder) BuildDataSource(data *nodev1.KafkaEventConfigura return &PubSubDataSource{ fieldName: data.GetEngineEventConfiguration().GetFieldName(), - typeName: data.GetEngineEventConfiguration().GetTypeName(), eventType: eventType, topics: data.GetTopics(), providerId: providerId, @@ -59,7 +58,7 @@ func (p *PubSubProviderBuilder) BuildDataSource(data *nodev1.KafkaEventConfigura }, nil } -func (p *PubSubProviderBuilder) BuildProvider(provider config.KafkaEventSource) (datasource.PubSubProvider, error) { +func (p *PubSubProviderBuilder) BuildProvider(provider config.KafkaEventSource) (datasource.Provider, error) { adapter, pubSubProvider, err := buildProvider(p.ctx, provider, p.logger) if err != nil { return nil, err @@ -98,7 +97,7 @@ func buildKafkaOptions(eventSource config.KafkaEventSource) ([]kgo.Opt, error) { return opts, nil } -func buildProvider(ctx context.Context, provider config.KafkaEventSource, logger *zap.Logger) (AdapterInterface, datasource.PubSubProvider, error) { +func buildProvider(ctx context.Context, provider config.KafkaEventSource, logger *zap.Logger) (AdapterInterface, datasource.Provider, error) { options, err := buildKafkaOptions(provider) if err != nil { return nil, nil, fmt.Errorf("failed to build options for Kafka provider with ID \"%s\": %w", provider.ID, err) @@ -107,7 +106,7 @@ func buildProvider(ctx context.Context, provider config.KafkaEventSource, logger if err != nil { return nil, nil, fmt.Errorf("failed to create adapter for Kafka provider with ID \"%s\": %w", provider.ID, err) } - pubSubProvider := datasource.NewPubSubProviderImpl(provider.ID, providerTypeID, adapter, logger) + pubSubProvider := datasource.NewPubSubProvider(provider.ID, providerTypeID, adapter, logger) return adapter, pubSubProvider, nil } diff --git a/router/pkg/pubsub/kafka/provider_builder_test.go b/router/pkg/pubsub/kafka/provider_builder_test.go index 81664810ea..a964bd9dcc 100644 --- a/router/pkg/pubsub/kafka/provider_builder_test.go +++ b/router/pkg/pubsub/kafka/provider_builder_test.go @@ -77,7 +77,7 @@ func TestPubSubProviderBuilderFactory(t *testing.T) { require.NoError(t, err) // Check the returned provider - kafkaProvider, ok := provider.(*datasource.PubSubProviderImpl) + kafkaProvider, ok := provider.(*datasource.PubSubProvider) require.True(t, ok) assert.NotNil(t, kafkaProvider.Logger) assert.NotNil(t, kafkaProvider.Adapter) diff --git a/router/pkg/pubsub/kafka/pubsub_datasource.go b/router/pkg/pubsub/kafka/pubsub_datasource.go index 527eab1b12..1198b29022 100644 --- a/router/pkg/pubsub/kafka/pubsub_datasource.go +++ b/router/pkg/pubsub/kafka/pubsub_datasource.go @@ -17,7 +17,6 @@ const ( type PubSubDataSource struct { fieldName string - typeName string eventType EventType topics []string providerId string diff --git a/router/pkg/pubsub/kafka/pubsub_datasource_test.go b/router/pkg/pubsub/kafka/pubsub_datasource_test.go index bf548728d9..f935b6277b 100644 --- a/router/pkg/pubsub/kafka/pubsub_datasource_test.go +++ b/router/pkg/pubsub/kafka/pubsub_datasource_test.go @@ -17,7 +17,6 @@ func TestKafkaPubSubDataSource(t *testing.T) { pubsub := &PubSubDataSource{ KafkaAdapter: adapter, fieldName: "testField", - typeName: "TestType", eventType: EventTypePublish, topics: []string{"test-topic"}, providerId: "test-provider", @@ -41,7 +40,6 @@ func TestPubSubDataSourceWithMockAdapter(t *testing.T) { pubsub := &PubSubDataSource{ KafkaAdapter: mockAdapter, fieldName: "testField", - typeName: "TestType", eventType: EventTypePublish, topics: []string{"test-topic"}, providerId: "test-provider", @@ -71,7 +69,6 @@ func TestPubSubDataSource_GetResolveDataSource_WrongType(t *testing.T) { pubsub := &PubSubDataSource{ KafkaAdapter: mockAdapter, fieldName: "testField", - typeName: "TestType", eventType: EventTypeSubscribe, topics: []string{"test-topic"}, providerId: "test-provider", @@ -88,7 +85,6 @@ func TestPubSubDataSource_GetResolveDataSourceInput_MultipleTopics(t *testing.T) // Create the data source with mock adapter pubsub := &PubSubDataSource{ fieldName: "testField", - typeName: "TestType", eventType: EventTypePublish, topics: []string{"test-topic-1", "test-topic-2"}, providerId: "test-provider", @@ -105,7 +101,6 @@ func TestPubSubDataSource_GetResolveDataSourceInput_NoTopics(t *testing.T) { // Create the data source with mock adapter pubsub := &PubSubDataSource{ fieldName: "testField", - typeName: "TestType", eventType: EventTypePublish, topics: []string{}, providerId: "test-provider", @@ -124,7 +119,6 @@ func TestKafkaPubSubDataSourceMultiTopicSubscription(t *testing.T) { // Create the data source to test with mock adapter pubsub := &PubSubDataSource{ fieldName: "testField", - typeName: "TestType", eventType: EventTypePublish, topics: []string{"test-topic-1", "test-topic-2"}, providerId: "test-provider", diff --git a/router/pkg/pubsub/nats/provider_builder.go b/router/pkg/pubsub/nats/provider_builder.go index ca403f3d93..775fdabc9c 100644 --- a/router/pkg/pubsub/nats/provider_builder.go +++ b/router/pkg/pubsub/nats/provider_builder.go @@ -68,7 +68,7 @@ func (p *PubSubProviderBuilder) BuildDataSource(data *nodev1.NatsEventConfigurat return pubSubDataSource, nil } -func (p *PubSubProviderBuilder) BuildProvider(provider config.NatsEventSource) (datasource.PubSubProvider, error) { +func (p *PubSubProviderBuilder) BuildProvider(provider config.NatsEventSource) (datasource.Provider, error) { adapter, pubSubProvider, err := buildProvider(p.ctx, provider, p.logger, p.hostName, p.routerListenAddr) if err != nil { return nil, err @@ -122,7 +122,7 @@ func buildNatsOptions(eventSource config.NatsEventSource, logger *zap.Logger) ([ return opts, nil } -func buildProvider(ctx context.Context, provider config.NatsEventSource, logger *zap.Logger, hostName string, routerListenAddr string) (AdapterInterface, datasource.PubSubProvider, error) { +func buildProvider(ctx context.Context, provider config.NatsEventSource, logger *zap.Logger, hostName string, routerListenAddr string) (AdapterInterface, datasource.Provider, error) { options, err := buildNatsOptions(provider, logger) if err != nil { return nil, nil, fmt.Errorf("failed to build options for Nats provider with ID \"%s\": %w", provider.ID, err) @@ -131,7 +131,7 @@ func buildProvider(ctx context.Context, provider config.NatsEventSource, logger if err != nil { return nil, nil, fmt.Errorf("failed to create adapter for Nats provider with ID \"%s\": %w", provider.ID, err) } - pubSubProvider := datasource.NewPubSubProviderImpl(provider.ID, providerTypeID, adapter, logger) + pubSubProvider := datasource.NewPubSubProvider(provider.ID, providerTypeID, adapter, logger) return adapter, pubSubProvider, nil } @@ -141,7 +141,7 @@ func NewPubSubProviderBuilder( logger *zap.Logger, hostName string, routerListenAddr string, -) datasource.PubSubProviderBuilder[config.NatsEventSource, *nodev1.NatsEventConfiguration] { +) datasource.ProviderBuilder[config.NatsEventSource, *nodev1.NatsEventConfiguration] { return &PubSubProviderBuilder{ ctx: ctx, logger: logger, diff --git a/router/pkg/pubsub/nats/provider_builder_test.go b/router/pkg/pubsub/nats/provider_builder_test.go index 138d63a00d..26b82d67f2 100644 --- a/router/pkg/pubsub/nats/provider_builder_test.go +++ b/router/pkg/pubsub/nats/provider_builder_test.go @@ -86,7 +86,7 @@ func TestPubSubProviderBuilderFactory(t *testing.T) { require.NoError(t, err) // Check the returned provider - natsProvider, ok := provider.(*datasource.PubSubProviderImpl) + natsProvider, ok := provider.(*datasource.PubSubProvider) require.True(t, ok) assert.NotNil(t, natsProvider.Logger) assert.NotNil(t, natsProvider.Adapter) diff --git a/router/pkg/pubsub/nats/pubsub_datasource.go b/router/pkg/pubsub/nats/pubsub_datasource.go index 44dcde4a66..dc618816be 100644 --- a/router/pkg/pubsub/nats/pubsub_datasource.go +++ b/router/pkg/pubsub/nats/pubsub_datasource.go @@ -22,7 +22,6 @@ type PubSubDataSource struct { NatsAdapter AdapterInterface fieldName string - typeName string eventType EventType subjects []string providerId string diff --git a/router/pkg/pubsub/nats/pubsub_datasource_test.go b/router/pkg/pubsub/nats/pubsub_datasource_test.go index 0c2587e707..d501321fe7 100644 --- a/router/pkg/pubsub/nats/pubsub_datasource_test.go +++ b/router/pkg/pubsub/nats/pubsub_datasource_test.go @@ -21,7 +21,6 @@ func TestNatsPubSubDataSource(t *testing.T) { eventType: EventTypePublish, subjects: []string{"test-subject"}, fieldName: "testField", - typeName: "TestType", NatsAdapter: adapter, } @@ -44,7 +43,6 @@ func TestPubSubDataSourceWithMockAdapter(t *testing.T) { eventType: EventTypePublish, subjects: []string{"test-subject"}, fieldName: "testField", - typeName: "TestType", NatsAdapter: mockAdapter, } @@ -73,7 +71,6 @@ func TestPubSubDataSource_GetResolveDataSource_WrongType(t *testing.T) { eventType: EventTypeSubscribe, subjects: []string{"test-subject"}, fieldName: "testField", - typeName: "TestType", NatsAdapter: mockAdapter, } @@ -90,7 +87,6 @@ func TestPubSubDataSource_GetResolveDataSourceInput_MultipleSubjects(t *testing. eventType: EventTypePublish, subjects: []string{"test-subject-1", "test-subject-2"}, fieldName: "testField", - typeName: "TestType", } // Get the input @@ -106,7 +102,6 @@ func TestPubSubDataSource_GetResolveDataSourceInput_NoSubjects(t *testing.T) { eventType: EventTypePublish, subjects: []string{}, fieldName: "testField", - typeName: "TestType", } // Get the input @@ -122,7 +117,6 @@ func TestNatsPubSubDataSourceMultiSubjectSubscription(t *testing.T) { eventType: EventTypePublish, subjects: []string{"test-subject-1", "test-subject-2"}, fieldName: "testField", - typeName: "TestType", } // Test GetResolveDataSourceSubscriptionInput @@ -146,7 +140,6 @@ func TestNatsPubSubDataSourceWithStreamConfiguration(t *testing.T) { eventType: EventTypePublish, subjects: []string{"test-subject"}, fieldName: "testField", - typeName: "TestType", withStreamConfiguration: true, consumerName: "test-consumer", streamName: "test-stream", @@ -186,7 +179,6 @@ func TestPubSubDataSource_RequestDataSource(t *testing.T) { eventType: EventTypeRequest, subjects: []string{"test-subject"}, fieldName: "testField", - typeName: "TestType", NatsAdapter: mockAdapter, } @@ -213,7 +205,6 @@ func TestTransformEventConfig(t *testing.T) { eventType: EventTypePublish, subjects: []string{"original.subject"}, fieldName: "testField", - typeName: "TestType", } // Simple transform function that adds "transformed." prefix @@ -232,7 +223,6 @@ func TestTransformEventConfig(t *testing.T) { eventType: EventTypeSubscribe, subjects: []string{"original.subject1", "original.subject2"}, fieldName: "testField", - typeName: "TestType", } // Simple transform function that adds "transformed." prefix @@ -252,7 +242,6 @@ func TestTransformEventConfig(t *testing.T) { eventType: EventTypePublish, subjects: []string{"invalid subject with spaces"}, fieldName: "testField", - typeName: "TestType", } transformFn := func(s string) (string, error) { diff --git a/router/pkg/pubsub/pubsub.go b/router/pkg/pubsub/pubsub.go index 64933e92a9..7b40765e05 100644 --- a/router/pkg/pubsub/pubsub.go +++ b/router/pkg/pubsub/pubsub.go @@ -57,8 +57,8 @@ func BuildProvidersAndDataSources( dsConfs []DataSourceConfigurationWithMetadata, hostName string, routerListenAddr string, -) ([]pubsub_datasource.PubSubProvider, []plan.DataSource, error) { - var pubSubProviders []pubsub_datasource.PubSubProvider +) ([]pubsub_datasource.Provider, []plan.DataSource, error) { + var pubSubProviders []pubsub_datasource.Provider var outs []plan.DataSource // initialize Kafka providers and data sources @@ -96,8 +96,8 @@ func BuildProvidersAndDataSources( return pubSubProviders, outs, nil } -func build[P GetID, E GetEngineEventConfiguration](ctx context.Context, builder pubsub_datasource.PubSubProviderBuilder[P, E], providersData []P, dsConfs []dsConfAndEvents[E]) ([]pubsub_datasource.PubSubProvider, []plan.DataSource, error) { - var pubSubProviders []pubsub_datasource.PubSubProvider +func build[P GetID, E GetEngineEventConfiguration](ctx context.Context, builder pubsub_datasource.ProviderBuilder[P, E], providersData []P, dsConfs []dsConfAndEvents[E]) ([]pubsub_datasource.Provider, []plan.DataSource, error) { + var pubSubProviders []pubsub_datasource.Provider var outs []plan.DataSource // check used providers @@ -140,7 +140,7 @@ func build[P GetID, E GetEngineEventConfiguration](ctx context.Context, builder dataSourceFactory := builder.BuildDataSourceFactory(event) out, err := plan.NewDataSourceConfiguration( dsConf.dsConf.Configuration.Id+"-"+builder.TypeID()+"-"+strconv.Itoa(i), - pubsub_datasource.NewFactory(ctx, dataSourceFactory), + pubsub_datasource.NewPlannerFactory(ctx, dataSourceFactory), getFilteredDataSourceMetadata(event.GetEngineEventConfiguration(), dsConf.dsConf.Metadata), dataSourceFactory, ) diff --git a/router/pkg/pubsub/pubsub_test.go b/router/pkg/pubsub/pubsub_test.go index 32bdbb54bc..daa6966a0b 100644 --- a/router/pkg/pubsub/pubsub_test.go +++ b/router/pkg/pubsub/pubsub_test.go @@ -16,8 +16,8 @@ import ( func TestBuild_OK(t *testing.T) { ctx := context.Background() - mockBuilder := datasource.NewMockPubSubProviderBuilder[config.NatsEventSource, *nodev1.NatsEventConfiguration](t) - mockPubSubProvider := datasource.NewMockPubSubProvider(t) + mockBuilder := datasource.NewMockProviderBuilder[config.NatsEventSource, *nodev1.NatsEventConfiguration](t) + mockPubSubProvider := datasource.NewMockProvider(t) dsMeta := &plan.DataSourceMetadata{ RootNodes: []plan.TypeField{ @@ -81,7 +81,7 @@ func TestBuild_OK(t *testing.T) { func TestBuild_ProviderError(t *testing.T) { ctx := context.Background() - mockBuilder := datasource.NewMockPubSubProviderBuilder[config.NatsEventSource, *nodev1.NatsEventConfiguration](t) + mockBuilder := datasource.NewMockProviderBuilder[config.NatsEventSource, *nodev1.NatsEventConfiguration](t) dsMeta := &plan.DataSourceMetadata{ RootNodes: []plan.TypeField{ @@ -135,7 +135,7 @@ func TestBuild_ProviderError(t *testing.T) { func TestBuild_ShouldGetAnErrorIfProviderIsNotDefined(t *testing.T) { ctx := context.Background() - mockBuilder := datasource.NewMockPubSubProviderBuilder[config.NatsEventSource, *nodev1.NatsEventConfiguration](t) + mockBuilder := datasource.NewMockProviderBuilder[config.NatsEventSource, *nodev1.NatsEventConfiguration](t) //mockPubSubProvider := datasource.NewMockPubSubProvider(t) dsMeta := &plan.DataSourceMetadata{ @@ -194,8 +194,8 @@ func TestBuild_ShouldGetAnErrorIfProviderIsNotDefined(t *testing.T) { func TestBuild_ShouldNotInitializeProviderIfNotUsed(t *testing.T) { ctx := context.Background() - mockBuilder := datasource.NewMockPubSubProviderBuilder[config.NatsEventSource, *nodev1.NatsEventConfiguration](t) - mockPubSubUsedProvider := datasource.NewMockPubSubProvider(t) + mockBuilder := datasource.NewMockProviderBuilder[config.NatsEventSource, *nodev1.NatsEventConfiguration](t) + mockPubSubUsedProvider := datasource.NewMockProvider(t) dsMeta := &plan.DataSourceMetadata{ RootNodes: []plan.TypeField{ From 8a1a03649f701e6ee317312def3400bd1055e740 Mon Sep 17 00:00:00 2001 From: Alessandro Pagnin Date: Fri, 6 Jun 2025 09:22:15 +0200 Subject: [PATCH 102/126] chore: change adapters names --- .../subgraphs/availability/availability.go | 2 +- .../availability/subgraph/resolver.go | 2 +- demo/pkg/subgraphs/countries/countries.go | 2 +- .../subgraphs/countries/subgraph/resolver.go | 2 +- demo/pkg/subgraphs/employees/employees.go | 2 +- .../subgraphs/employees/subgraph/resolver.go | 2 +- demo/pkg/subgraphs/family/family.go | 2 +- .../pkg/subgraphs/family/subgraph/resolver.go | 2 +- demo/pkg/subgraphs/hobbies/hobbies.go | 2 +- .../subgraphs/hobbies/subgraph/resolver.go | 2 +- demo/pkg/subgraphs/mood/mood.go | 2 +- demo/pkg/subgraphs/mood/subgraph/resolver.go | 2 +- demo/pkg/subgraphs/products/products.go | 2 +- .../subgraphs/products/subgraph/resolver.go | 2 +- demo/pkg/subgraphs/products_fg/products.go | 2 +- .../products_fg/subgraph/resolver.go | 2 +- demo/pkg/subgraphs/subgraphs.go | 4 +- demo/pkg/subgraphs/test1/subgraph/resolver.go | 2 +- demo/pkg/subgraphs/test1/test1.go | 2 +- router-tests/testenv/testenv.go | 4 +- router/.mockery.yml | 4 +- router/core/plan_generator.go | 4 +- router/pkg/pubsub/README.md | 10 +- router/pkg/pubsub/kafka/adapter.go | 22 ++-- router/pkg/pubsub/kafka/engine_datasource.go | 4 +- .../pubsub/kafka/engine_datasource_test.go | 24 ++-- router/pkg/pubsub/kafka/mocks.go | 90 +++++++-------- router/pkg/pubsub/kafka/provider_builder.go | 8 +- router/pkg/pubsub/kafka/pubsub_datasource.go | 2 +- .../pubsub/kafka/pubsub_datasource_test.go | 6 +- router/pkg/pubsub/nats/adapter.go | 28 ++--- router/pkg/pubsub/nats/engine_datasource.go | 6 +- .../pkg/pubsub/nats/engine_datasource_test.go | 32 +++--- router/pkg/pubsub/nats/mocks.go | 108 +++++++++--------- router/pkg/pubsub/nats/provider_builder.go | 6 +- router/pkg/pubsub/nats/pubsub_datasource.go | 2 +- .../pkg/pubsub/nats/pubsub_datasource_test.go | 8 +- 37 files changed, 204 insertions(+), 204 deletions(-) diff --git a/demo/pkg/subgraphs/availability/availability.go b/demo/pkg/subgraphs/availability/availability.go index 412ffd1ac3..d3b8bb8bb4 100644 --- a/demo/pkg/subgraphs/availability/availability.go +++ b/demo/pkg/subgraphs/availability/availability.go @@ -8,7 +8,7 @@ import ( "github.com/wundergraph/cosmo/demo/pkg/subgraphs/availability/subgraph/generated" ) -func NewSchema(pubSubBySourceName map[string]nats.AdapterInterface, pubSubName func(string) string) graphql.ExecutableSchema { +func NewSchema(pubSubBySourceName map[string]nats.Adapter, pubSubName func(string) string) graphql.ExecutableSchema { return generated.NewExecutableSchema(generated.Config{Resolvers: &subgraph.Resolver{ NatsPubSubByProviderID: pubSubBySourceName, GetPubSubName: pubSubName, diff --git a/demo/pkg/subgraphs/availability/subgraph/resolver.go b/demo/pkg/subgraphs/availability/subgraph/resolver.go index a5461fac82..d89a97d01c 100644 --- a/demo/pkg/subgraphs/availability/subgraph/resolver.go +++ b/demo/pkg/subgraphs/availability/subgraph/resolver.go @@ -9,6 +9,6 @@ import ( // It serves as dependency injection for your app, add any dependencies you require here. type Resolver struct { - NatsPubSubByProviderID map[string]nats.AdapterInterface + NatsPubSubByProviderID map[string]nats.Adapter GetPubSubName func(string) string } diff --git a/demo/pkg/subgraphs/countries/countries.go b/demo/pkg/subgraphs/countries/countries.go index 726ef1834a..a562eb31f7 100644 --- a/demo/pkg/subgraphs/countries/countries.go +++ b/demo/pkg/subgraphs/countries/countries.go @@ -8,7 +8,7 @@ import ( "github.com/wundergraph/cosmo/demo/pkg/subgraphs/countries/subgraph/generated" ) -func NewSchema(pubSubBySourceName map[string]nats.AdapterInterface) graphql.ExecutableSchema { +func NewSchema(pubSubBySourceName map[string]nats.Adapter) graphql.ExecutableSchema { return generated.NewExecutableSchema(generated.Config{Resolvers: &subgraph.Resolver{ NatsPubSubByProviderID: pubSubBySourceName, }}) diff --git a/demo/pkg/subgraphs/countries/subgraph/resolver.go b/demo/pkg/subgraphs/countries/subgraph/resolver.go index e2f350a70a..c8cf455fd4 100644 --- a/demo/pkg/subgraphs/countries/subgraph/resolver.go +++ b/demo/pkg/subgraphs/countries/subgraph/resolver.go @@ -12,5 +12,5 @@ import ( type Resolver struct { mux sync.Mutex - NatsPubSubByProviderID map[string]nats.AdapterInterface + NatsPubSubByProviderID map[string]nats.Adapter } diff --git a/demo/pkg/subgraphs/employees/employees.go b/demo/pkg/subgraphs/employees/employees.go index aa8c38b134..c60ff2201a 100644 --- a/demo/pkg/subgraphs/employees/employees.go +++ b/demo/pkg/subgraphs/employees/employees.go @@ -7,7 +7,7 @@ import ( "github.com/wundergraph/cosmo/router/pkg/pubsub/nats" ) -func NewSchema(natsPubSubByProviderID map[string]nats.AdapterInterface) graphql.ExecutableSchema { +func NewSchema(natsPubSubByProviderID map[string]nats.Adapter) graphql.ExecutableSchema { return generated.NewExecutableSchema(generated.Config{Resolvers: &subgraph.Resolver{ NatsPubSubByProviderID: natsPubSubByProviderID, EmployeesData: subgraph.Employees, diff --git a/demo/pkg/subgraphs/employees/subgraph/resolver.go b/demo/pkg/subgraphs/employees/subgraph/resolver.go index 8f416f6390..3fd878a209 100644 --- a/demo/pkg/subgraphs/employees/subgraph/resolver.go +++ b/demo/pkg/subgraphs/employees/subgraph/resolver.go @@ -15,7 +15,7 @@ import ( type Resolver struct { mux sync.Mutex - NatsPubSubByProviderID map[string]nats.AdapterInterface + NatsPubSubByProviderID map[string]nats.Adapter EmployeesData []*model.Employee } diff --git a/demo/pkg/subgraphs/family/family.go b/demo/pkg/subgraphs/family/family.go index aa3234ab45..a8800d0229 100644 --- a/demo/pkg/subgraphs/family/family.go +++ b/demo/pkg/subgraphs/family/family.go @@ -8,7 +8,7 @@ import ( "github.com/wundergraph/cosmo/demo/pkg/subgraphs/family/subgraph/generated" ) -func NewSchema(natsPubSubByProviderID map[string]nats.AdapterInterface) graphql.ExecutableSchema { +func NewSchema(natsPubSubByProviderID map[string]nats.Adapter) graphql.ExecutableSchema { return generated.NewExecutableSchema(generated.Config{Resolvers: &subgraph.Resolver{ NatsPubSubByProviderID: natsPubSubByProviderID, }}) diff --git a/demo/pkg/subgraphs/family/subgraph/resolver.go b/demo/pkg/subgraphs/family/subgraph/resolver.go index 6cea8bd318..906dfaf4ae 100644 --- a/demo/pkg/subgraphs/family/subgraph/resolver.go +++ b/demo/pkg/subgraphs/family/subgraph/resolver.go @@ -9,5 +9,5 @@ import ( // It serves as dependency injection for your app, add any dependencies you require here. type Resolver struct { - NatsPubSubByProviderID map[string]nats.AdapterInterface + NatsPubSubByProviderID map[string]nats.Adapter } diff --git a/demo/pkg/subgraphs/hobbies/hobbies.go b/demo/pkg/subgraphs/hobbies/hobbies.go index cf43f3ddfb..0b79ec1929 100644 --- a/demo/pkg/subgraphs/hobbies/hobbies.go +++ b/demo/pkg/subgraphs/hobbies/hobbies.go @@ -8,7 +8,7 @@ import ( "github.com/wundergraph/cosmo/demo/pkg/subgraphs/hobbies/subgraph/generated" ) -func NewSchema(natsPubSubByProviderID map[string]nats.AdapterInterface) graphql.ExecutableSchema { +func NewSchema(natsPubSubByProviderID map[string]nats.Adapter) graphql.ExecutableSchema { return generated.NewExecutableSchema(generated.Config{Resolvers: &subgraph.Resolver{ NatsPubSubByProviderID: natsPubSubByProviderID, }}) diff --git a/demo/pkg/subgraphs/hobbies/subgraph/resolver.go b/demo/pkg/subgraphs/hobbies/subgraph/resolver.go index 9206076fc1..d6f0de5609 100644 --- a/demo/pkg/subgraphs/hobbies/subgraph/resolver.go +++ b/demo/pkg/subgraphs/hobbies/subgraph/resolver.go @@ -12,7 +12,7 @@ import ( // It serves as dependency injection for your app, add any dependencies you require here. type Resolver struct { - NatsPubSubByProviderID map[string]nats.AdapterInterface + NatsPubSubByProviderID map[string]nats.Adapter } func (r *Resolver) Employees(hobby model.Hobby) ([]*model.Employee, error) { diff --git a/demo/pkg/subgraphs/mood/mood.go b/demo/pkg/subgraphs/mood/mood.go index efbc307be6..44b8275d85 100644 --- a/demo/pkg/subgraphs/mood/mood.go +++ b/demo/pkg/subgraphs/mood/mood.go @@ -8,7 +8,7 @@ import ( "github.com/wundergraph/cosmo/demo/pkg/subgraphs/mood/subgraph/generated" ) -func NewSchema(natsPubSubByProviderID map[string]nats.AdapterInterface, getPubSubName func(string) string) graphql.ExecutableSchema { +func NewSchema(natsPubSubByProviderID map[string]nats.Adapter, getPubSubName func(string) string) graphql.ExecutableSchema { return generated.NewExecutableSchema(generated.Config{Resolvers: &subgraph.Resolver{ NatsPubSubByProviderID: natsPubSubByProviderID, GetPubSubName: getPubSubName, diff --git a/demo/pkg/subgraphs/mood/subgraph/resolver.go b/demo/pkg/subgraphs/mood/subgraph/resolver.go index a5461fac82..d89a97d01c 100644 --- a/demo/pkg/subgraphs/mood/subgraph/resolver.go +++ b/demo/pkg/subgraphs/mood/subgraph/resolver.go @@ -9,6 +9,6 @@ import ( // It serves as dependency injection for your app, add any dependencies you require here. type Resolver struct { - NatsPubSubByProviderID map[string]nats.AdapterInterface + NatsPubSubByProviderID map[string]nats.Adapter GetPubSubName func(string) string } diff --git a/demo/pkg/subgraphs/products/products.go b/demo/pkg/subgraphs/products/products.go index 6a2c8c5984..0ed88bda57 100644 --- a/demo/pkg/subgraphs/products/products.go +++ b/demo/pkg/subgraphs/products/products.go @@ -8,7 +8,7 @@ import ( "github.com/wundergraph/cosmo/demo/pkg/subgraphs/products/subgraph/generated" ) -func NewSchema(natsPubSubByProviderID map[string]nats.AdapterInterface) graphql.ExecutableSchema { +func NewSchema(natsPubSubByProviderID map[string]nats.Adapter) graphql.ExecutableSchema { return generated.NewExecutableSchema(generated.Config{Resolvers: &subgraph.Resolver{ NatsPubSubByProviderID: natsPubSubByProviderID, TopSecretFederationFactsData: subgraph.TopSecretFederationFacts, diff --git a/demo/pkg/subgraphs/products/subgraph/resolver.go b/demo/pkg/subgraphs/products/subgraph/resolver.go index db8de70257..7eb404b9ca 100644 --- a/demo/pkg/subgraphs/products/subgraph/resolver.go +++ b/demo/pkg/subgraphs/products/subgraph/resolver.go @@ -13,6 +13,6 @@ import ( type Resolver struct { mux sync.Mutex - NatsPubSubByProviderID map[string]nats.AdapterInterface + NatsPubSubByProviderID map[string]nats.Adapter TopSecretFederationFactsData []model.TopSecretFact } diff --git a/demo/pkg/subgraphs/products_fg/products.go b/demo/pkg/subgraphs/products_fg/products.go index 73e2082af4..66aa068c13 100644 --- a/demo/pkg/subgraphs/products_fg/products.go +++ b/demo/pkg/subgraphs/products_fg/products.go @@ -8,7 +8,7 @@ import ( "github.com/wundergraph/cosmo/demo/pkg/subgraphs/products_fg/subgraph/generated" ) -func NewSchema(natsPubSubByProviderID map[string]nats.AdapterInterface) graphql.ExecutableSchema { +func NewSchema(natsPubSubByProviderID map[string]nats.Adapter) graphql.ExecutableSchema { return generated.NewExecutableSchema(generated.Config{Resolvers: &subgraph.Resolver{ NatsPubSubByProviderID: natsPubSubByProviderID, TopSecretFederationFactsData: subgraph.TopSecretFederationFacts, diff --git a/demo/pkg/subgraphs/products_fg/subgraph/resolver.go b/demo/pkg/subgraphs/products_fg/subgraph/resolver.go index 78a07d51ce..194c91f88b 100644 --- a/demo/pkg/subgraphs/products_fg/subgraph/resolver.go +++ b/demo/pkg/subgraphs/products_fg/subgraph/resolver.go @@ -13,6 +13,6 @@ import ( type Resolver struct { mux sync.Mutex - NatsPubSubByProviderID map[string]nats.AdapterInterface + NatsPubSubByProviderID map[string]nats.Adapter TopSecretFederationFactsData []model.TopSecretFact } diff --git a/demo/pkg/subgraphs/subgraphs.go b/demo/pkg/subgraphs/subgraphs.go index a66199e643..88f3f4b147 100644 --- a/demo/pkg/subgraphs/subgraphs.go +++ b/demo/pkg/subgraphs/subgraphs.go @@ -161,7 +161,7 @@ func subgraphHandler(schema graphql.ExecutableSchema) http.Handler { } type SubgraphOptions struct { - NatsPubSubByProviderID map[string]natsPubsub.AdapterInterface + NatsPubSubByProviderID map[string]natsPubsub.Adapter GetPubSubName func(string) string } @@ -207,7 +207,7 @@ func New(ctx context.Context, config *Config) (*Subgraphs, error) { url = defaultSourceNameURL } - natsPubSubByProviderID := map[string]natsPubsub.AdapterInterface{} + natsPubSubByProviderID := map[string]natsPubsub.Adapter{} defaultAdapter, err := natsPubsub.NewAdapter(ctx, zap.NewNop(), url, []nats.Option{}, "hostname", "test") if err != nil { diff --git a/demo/pkg/subgraphs/test1/subgraph/resolver.go b/demo/pkg/subgraphs/test1/subgraph/resolver.go index 6cea8bd318..906dfaf4ae 100644 --- a/demo/pkg/subgraphs/test1/subgraph/resolver.go +++ b/demo/pkg/subgraphs/test1/subgraph/resolver.go @@ -9,5 +9,5 @@ import ( // It serves as dependency injection for your app, add any dependencies you require here. type Resolver struct { - NatsPubSubByProviderID map[string]nats.AdapterInterface + NatsPubSubByProviderID map[string]nats.Adapter } diff --git a/demo/pkg/subgraphs/test1/test1.go b/demo/pkg/subgraphs/test1/test1.go index 3234af4209..0ce50a2440 100644 --- a/demo/pkg/subgraphs/test1/test1.go +++ b/demo/pkg/subgraphs/test1/test1.go @@ -8,7 +8,7 @@ import ( "github.com/wundergraph/cosmo/demo/pkg/subgraphs/test1/subgraph/generated" ) -func NewSchema(natsPubSubByProviderID map[string]nats.AdapterInterface) graphql.ExecutableSchema { +func NewSchema(natsPubSubByProviderID map[string]nats.Adapter) graphql.ExecutableSchema { return generated.NewExecutableSchema(generated.Config{Resolvers: &subgraph.Resolver{ NatsPubSubByProviderID: natsPubSubByProviderID, }}) diff --git a/router-tests/testenv/testenv.go b/router-tests/testenv/testenv.go index 93932a44b8..616a402a7f 100644 --- a/router-tests/testenv/testenv.go +++ b/router-tests/testenv/testenv.go @@ -2679,11 +2679,11 @@ func WSWriteJSON(t testing.TB, conn *websocket.Conn, v interface{}) (err error) func subgraphOptions(ctx context.Context, t testing.TB, logger *zap.Logger, natsData *NatsData, pubSubName func(string) string) *subgraphs.SubgraphOptions { if natsData == nil { return &subgraphs.SubgraphOptions{ - NatsPubSubByProviderID: map[string]pubsubNats.AdapterInterface{}, + NatsPubSubByProviderID: map[string]pubsubNats.Adapter{}, GetPubSubName: pubSubName, } } - natsPubSubByProviderID := make(map[string]pubsubNats.AdapterInterface, len(DemoNatsProviders)) + natsPubSubByProviderID := make(map[string]pubsubNats.Adapter, len(DemoNatsProviders)) for _, sourceName := range DemoNatsProviders { adapter, err := pubsubNats.NewAdapter(ctx, logger, natsData.Params[0].Url, natsData.Params[0].Opts, "hostname", "listenaddr") require.NoError(t, err) diff --git a/router/.mockery.yml b/router/.mockery.yml index 5389f97584..0862b3337e 100644 --- a/router/.mockery.yml +++ b/router/.mockery.yml @@ -19,10 +19,10 @@ packages: Provider: github.com/wundergraph/cosmo/router/pkg/pubsub/nats: interfaces: - AdapterInterface: + Adapter: github.com/wundergraph/cosmo/router/pkg/pubsub/kafka: interfaces: - AdapterInterface: + Adapter: github.com/wundergraph/graphql-go-tools/v2/pkg/engine/resolve: config: dir: 'pkg/pubsub/datasource' diff --git a/router/core/plan_generator.go b/router/core/plan_generator.go index 1cc30c2eff..01e45ec915 100644 --- a/router/core/plan_generator.go +++ b/router/core/plan_generator.go @@ -237,8 +237,8 @@ func (pg *PlanGenerator) buildRouterConfig(configFilePath string) (*nodev1.Route func (pg *PlanGenerator) loadConfiguration(routerConfig *nodev1.RouterConfig, logger *zap.Logger, maxDataSourceCollectorsConcurrency uint) error { routerEngineConfig := RouterEngineConfiguration{} - natSources := map[string]*nats.Adapter{} - kafkaSources := map[string]*kafka.Adapter{} + natSources := map[string]*nats.ProviderAdapter{} + kafkaSources := map[string]*kafka.ProviderAdapter{} for _, ds := range routerConfig.GetEngineConfig().GetDatasourceConfigurations() { if ds.GetKind() != nodev1.DataSourceKind_PUBSUB || ds.GetCustomEvents() == nil { continue diff --git a/router/pkg/pubsub/README.md b/router/pkg/pubsub/README.md index ef55b9525b..f8e90d6cb6 100644 --- a/router/pkg/pubsub/README.md +++ b/router/pkg/pubsub/README.md @@ -24,7 +24,7 @@ This will generate the new proto files in the `gen` folder. To implement a new PubSub provider, the following components must be created: - `SubscriptionEventConfiguration` and `PublishEventConfiguration`: Define the data structures used for communication between the adapter and the engine. -- `Adapter`: Implements the logic that interfaces with the provider’s client or SDK. +- `ProviderAdapter`: Implements the logic that interfaces with the provider’s client or SDK. - `SubscriptionDataSource` and `PublishDataSource`: Engine components that leverage the configurations to subscribe and publish data. - `PubSubDataSource`: Bridges the engine and the provider. - `PubSubProviderBuilder`: Used by the router to instantiate the provider. @@ -35,12 +35,12 @@ These structures should be placed at the top of the `engine_datasource.go` file. Refer to the [kafka implementation](./kafka/engine_datasource.go) for a working example. -### `Adapter` +### `ProviderAdapter` This component encapsulates the provider-specific logic. Although not required, it’s best practice to implement the following interface to facilitate testing via mocks: ```go -type AdapterInterface interface { +type Adapter interface { Subscribe(ctx context.Context, event SubscriptionEventConfiguration, updater resolve.SubscriptionUpdater) error Publish(ctx context.Context, event PublishEventConfiguration) error Startup(ctx context.Context) error @@ -89,13 +89,13 @@ Refer to the [kafka implementation](./kafka/provider_builder.go) for a working e You should also add tests to your provider. ### Generate mocks -As a first step, you can use the [mockery](https://github.com/vektra/mockery) tool to generate the mocks for the Adapter interface you have implemented. To do this, add the following to the `.mockery.yml` file: +As a first step, you can use the [mockery](https://github.com/vektra/mockery) tool to generate the mocks for the ProviderAdapter interface you have implemented. To do this, add the following to the `.mockery.yml` file: ```yaml packages: github.com/wundergraph/cosmo/router/pkg/pubsub/{your-provider-name}: interfaces: - AdapterInterface: + Adapter: ``` Then run the following command from the router directory: diff --git a/router/pkg/pubsub/kafka/adapter.go b/router/pkg/pubsub/kafka/adapter.go index 301a8b4990..503b8f6f37 100644 --- a/router/pkg/pubsub/kafka/adapter.go +++ b/router/pkg/pubsub/kafka/adapter.go @@ -19,20 +19,20 @@ var ( errClientClosed = errors.New("client closed") ) -// AdapterInterface defines the interface for Kafka adapter operations -type AdapterInterface interface { +// Adapter defines the interface for Kafka adapter operations +type Adapter interface { Subscribe(ctx context.Context, event SubscriptionEventConfiguration, updater resolve.SubscriptionUpdater) error Publish(ctx context.Context, event PublishEventConfiguration) error Startup(ctx context.Context) error Shutdown(ctx context.Context) error } -// Adapter is a Kafka pubsub implementation. +// ProviderAdapter is a Kafka pubsub implementation. // It uses the franz-go Kafka client to consume and produce messages. // The pubsub is stateless and does not store any messages. // It uses a single write client to produce messages and a client per topic to consume messages. // Each client polls the Kafka topic for new records and updates the subscriptions with the new data. -type Adapter struct { +type ProviderAdapter struct { ctx context.Context opts []kgo.Opt logger *zap.Logger @@ -42,7 +42,7 @@ type Adapter struct { } // topicPoller polls the Kafka topic for new records and calls the updateTriggers function. -func (p *Adapter) topicPoller(ctx context.Context, client *kgo.Client, updater resolve.SubscriptionUpdater) error { +func (p *ProviderAdapter) topicPoller(ctx context.Context, client *kgo.Client, updater resolve.SubscriptionUpdater) error { for { select { case <-p.ctx.Done(): // Close the poller if the application context was canceled @@ -96,7 +96,7 @@ func (p *Adapter) topicPoller(ctx context.Context, client *kgo.Client, updater r // Subscribe subscribes to the given topics and updates the subscription updater. // The engine already deduplicates subscriptions with the same topics, stream configuration, extensions, headers, etc. -func (p *Adapter) Subscribe(ctx context.Context, event SubscriptionEventConfiguration, updater resolve.SubscriptionUpdater) error { +func (p *ProviderAdapter) Subscribe(ctx context.Context, event SubscriptionEventConfiguration, updater resolve.SubscriptionUpdater) error { log := p.logger.With( zap.String("provider_id", event.ProviderID), @@ -146,7 +146,7 @@ func (p *Adapter) Subscribe(ctx context.Context, event SubscriptionEventConfigur // Publish publishes the given event to the Kafka topic in a non-blocking way. // Publish errors are logged and returned as a pubsub error. // The event is written with a dedicated write client. -func (p *Adapter) Publish(ctx context.Context, event PublishEventConfiguration) error { +func (p *ProviderAdapter) Publish(ctx context.Context, event PublishEventConfiguration) error { log := p.logger.With( zap.String("provider_id", event.ProviderID), zap.String("method", "publish"), @@ -184,7 +184,7 @@ func (p *Adapter) Publish(ctx context.Context, event PublishEventConfiguration) return nil } -func (p *Adapter) Startup(ctx context.Context) (err error) { +func (p *ProviderAdapter) Startup(ctx context.Context) (err error) { p.writeClient, err = kgo.NewClient(append(p.opts, // For observability, we set the client ID to "router" kgo.ClientID("cosmo.router.producer"))..., @@ -196,7 +196,7 @@ func (p *Adapter) Startup(ctx context.Context) (err error) { return } -func (p *Adapter) Shutdown(ctx context.Context) error { +func (p *ProviderAdapter) Shutdown(ctx context.Context) error { if p.writeClient == nil { return nil @@ -222,13 +222,13 @@ func (p *Adapter) Shutdown(ctx context.Context) error { return nil } -func NewAdapter(ctx context.Context, logger *zap.Logger, opts []kgo.Opt) (*Adapter, error) { +func NewProviderAdapter(ctx context.Context, logger *zap.Logger, opts []kgo.Opt) (*ProviderAdapter, error) { ctx, cancel := context.WithCancel(ctx) if logger == nil { logger = zap.NewNop() } - return &Adapter{ + return &ProviderAdapter{ ctx: ctx, logger: logger.With(zap.String("pubsub", "kafka")), opts: opts, diff --git a/router/pkg/pubsub/kafka/engine_datasource.go b/router/pkg/pubsub/kafka/engine_datasource.go index 1a29457aaf..55f846f088 100644 --- a/router/pkg/pubsub/kafka/engine_datasource.go +++ b/router/pkg/pubsub/kafka/engine_datasource.go @@ -29,7 +29,7 @@ func (s *PublishEventConfiguration) MarshalJSONTemplate() string { } type SubscriptionDataSource struct { - pubSub AdapterInterface + pubSub Adapter } func (s *SubscriptionDataSource) UniqueRequestID(ctx *resolve.Context, input []byte, xxh *xxhash.Digest) error { @@ -63,7 +63,7 @@ func (s *SubscriptionDataSource) Start(ctx *resolve.Context, input []byte, updat } type PublishDataSource struct { - pubSub AdapterInterface + pubSub Adapter } func (s *PublishDataSource) Load(ctx context.Context, input []byte, out *bytes.Buffer) error { diff --git a/router/pkg/pubsub/kafka/engine_datasource_test.go b/router/pkg/pubsub/kafka/engine_datasource_test.go index ec9f50f2ed..0ad92aeb20 100644 --- a/router/pkg/pubsub/kafka/engine_datasource_test.go +++ b/router/pkg/pubsub/kafka/engine_datasource_test.go @@ -78,7 +78,7 @@ func TestSubscriptionSource_UniqueRequestID(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { source := &SubscriptionDataSource{ - pubSub: NewMockAdapterInterface(t), + pubSub: NewMockAdapter(t), } ctx := &resolve.Context{} input := []byte(tt.input) @@ -105,13 +105,13 @@ func TestSubscriptionSource_Start(t *testing.T) { tests := []struct { name string input string - mockSetup func(*MockAdapterInterface, *datasource.MockSubscriptionUpdater) + mockSetup func(*MockAdapter, *datasource.MockSubscriptionUpdater) expectError bool }{ { name: "successful subscription", input: `{"topics":["topic1", "topic2"], "providerId":"test-provider"}`, - mockSetup: func(m *MockAdapterInterface, updater *datasource.MockSubscriptionUpdater) { + mockSetup: func(m *MockAdapter, updater *datasource.MockSubscriptionUpdater) { m.On("Subscribe", mock.Anything, SubscriptionEventConfiguration{ ProviderID: "test-provider", Topics: []string{"topic1", "topic2"}, @@ -122,7 +122,7 @@ func TestSubscriptionSource_Start(t *testing.T) { { name: "adapter returns error", input: `{"topics":["topic1"], "providerId":"test-provider"}`, - mockSetup: func(m *MockAdapterInterface, updater *datasource.MockSubscriptionUpdater) { + mockSetup: func(m *MockAdapter, updater *datasource.MockSubscriptionUpdater) { m.On("Subscribe", mock.Anything, SubscriptionEventConfiguration{ ProviderID: "test-provider", Topics: []string{"topic1"}, @@ -133,14 +133,14 @@ func TestSubscriptionSource_Start(t *testing.T) { { name: "invalid input json", input: `{"invalid json":`, - mockSetup: func(m *MockAdapterInterface, updater *datasource.MockSubscriptionUpdater) {}, + mockSetup: func(m *MockAdapter, updater *datasource.MockSubscriptionUpdater) {}, expectError: true, }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - mockAdapter := NewMockAdapterInterface(t) + mockAdapter := NewMockAdapter(t) updater := datasource.NewMockSubscriptionUpdater(t) tt.mockSetup(mockAdapter, updater) @@ -171,7 +171,7 @@ func TestKafkaPublishDataSource_Load(t *testing.T) { tests := []struct { name string input string - mockSetup func(*MockAdapterInterface) + mockSetup func(*MockAdapter) expectError bool expectedOutput string expectPublished bool @@ -179,7 +179,7 @@ func TestKafkaPublishDataSource_Load(t *testing.T) { { name: "successful publish", input: `{"topic":"test-topic", "data":{"message":"hello"}, "providerId":"test-provider"}`, - mockSetup: func(m *MockAdapterInterface) { + mockSetup: func(m *MockAdapter) { m.On("Publish", mock.Anything, mock.MatchedBy(func(event PublishEventConfiguration) bool { return event.ProviderID == "test-provider" && event.Topic == "test-topic" && @@ -193,7 +193,7 @@ func TestKafkaPublishDataSource_Load(t *testing.T) { { name: "publish error", input: `{"topic":"test-topic", "data":{"message":"hello"}, "providerId":"test-provider"}`, - mockSetup: func(m *MockAdapterInterface) { + mockSetup: func(m *MockAdapter) { m.On("Publish", mock.Anything, mock.Anything).Return(errors.New("publish error")) }, expectError: false, // The Load method doesn't return the publish error directly @@ -203,7 +203,7 @@ func TestKafkaPublishDataSource_Load(t *testing.T) { { name: "invalid input json", input: `{"invalid json":`, - mockSetup: func(m *MockAdapterInterface) {}, + mockSetup: func(m *MockAdapter) {}, expectError: true, expectPublished: false, }, @@ -211,7 +211,7 @@ func TestKafkaPublishDataSource_Load(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - mockAdapter := NewMockAdapterInterface(t) + mockAdapter := NewMockAdapter(t) tt.mockSetup(mockAdapter) dataSource := &PublishDataSource{ @@ -236,7 +236,7 @@ func TestKafkaPublishDataSource_Load(t *testing.T) { func TestKafkaPublishDataSource_LoadWithFiles(t *testing.T) { t.Run("panic on not implemented", func(t *testing.T) { dataSource := &PublishDataSource{ - pubSub: NewMockAdapterInterface(t), + pubSub: NewMockAdapter(t), } assert.Panics(t, func() { diff --git a/router/pkg/pubsub/kafka/mocks.go b/router/pkg/pubsub/kafka/mocks.go index dfc61e6422..f39aee8b4e 100644 --- a/router/pkg/pubsub/kafka/mocks.go +++ b/router/pkg/pubsub/kafka/mocks.go @@ -11,13 +11,13 @@ import ( "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/resolve" ) -// NewMockAdapterInterface creates a new instance of MockAdapterInterface. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations. +// NewMockAdapter creates a new instance of MockAdapter. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations. // The first argument is typically a *testing.T value. -func NewMockAdapterInterface(t interface { +func NewMockAdapter(t interface { mock.TestingT Cleanup(func()) -}) *MockAdapterInterface { - mock := &MockAdapterInterface{} +}) *MockAdapter { + mock := &MockAdapter{} mock.Mock.Test(t) t.Cleanup(func() { mock.AssertExpectations(t) }) @@ -25,21 +25,21 @@ func NewMockAdapterInterface(t interface { return mock } -// MockAdapterInterface is an autogenerated mock type for the AdapterInterface type -type MockAdapterInterface struct { +// MockAdapter is an autogenerated mock type for the Adapter type +type MockAdapter struct { mock.Mock } -type MockAdapterInterface_Expecter struct { +type MockAdapter_Expecter struct { mock *mock.Mock } -func (_m *MockAdapterInterface) EXPECT() *MockAdapterInterface_Expecter { - return &MockAdapterInterface_Expecter{mock: &_m.Mock} +func (_m *MockAdapter) EXPECT() *MockAdapter_Expecter { + return &MockAdapter_Expecter{mock: &_m.Mock} } -// Publish provides a mock function for the type MockAdapterInterface -func (_mock *MockAdapterInterface) Publish(ctx context.Context, event PublishEventConfiguration) error { +// Publish provides a mock function for the type MockAdapter +func (_mock *MockAdapter) Publish(ctx context.Context, event PublishEventConfiguration) error { ret := _mock.Called(ctx, event) if len(ret) == 0 { @@ -55,19 +55,19 @@ func (_mock *MockAdapterInterface) Publish(ctx context.Context, event PublishEve return r0 } -// MockAdapterInterface_Publish_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'Publish' -type MockAdapterInterface_Publish_Call struct { +// MockAdapter_Publish_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'Publish' +type MockAdapter_Publish_Call struct { *mock.Call } // Publish is a helper method to define mock.On call // - ctx context.Context // - event PublishEventConfiguration -func (_e *MockAdapterInterface_Expecter) Publish(ctx interface{}, event interface{}) *MockAdapterInterface_Publish_Call { - return &MockAdapterInterface_Publish_Call{Call: _e.mock.On("Publish", ctx, event)} +func (_e *MockAdapter_Expecter) Publish(ctx interface{}, event interface{}) *MockAdapter_Publish_Call { + return &MockAdapter_Publish_Call{Call: _e.mock.On("Publish", ctx, event)} } -func (_c *MockAdapterInterface_Publish_Call) Run(run func(ctx context.Context, event PublishEventConfiguration)) *MockAdapterInterface_Publish_Call { +func (_c *MockAdapter_Publish_Call) Run(run func(ctx context.Context, event PublishEventConfiguration)) *MockAdapter_Publish_Call { _c.Call.Run(func(args mock.Arguments) { var arg0 context.Context if args[0] != nil { @@ -85,18 +85,18 @@ func (_c *MockAdapterInterface_Publish_Call) Run(run func(ctx context.Context, e return _c } -func (_c *MockAdapterInterface_Publish_Call) Return(err error) *MockAdapterInterface_Publish_Call { +func (_c *MockAdapter_Publish_Call) Return(err error) *MockAdapter_Publish_Call { _c.Call.Return(err) return _c } -func (_c *MockAdapterInterface_Publish_Call) RunAndReturn(run func(ctx context.Context, event PublishEventConfiguration) error) *MockAdapterInterface_Publish_Call { +func (_c *MockAdapter_Publish_Call) RunAndReturn(run func(ctx context.Context, event PublishEventConfiguration) error) *MockAdapter_Publish_Call { _c.Call.Return(run) return _c } -// Shutdown provides a mock function for the type MockAdapterInterface -func (_mock *MockAdapterInterface) Shutdown(ctx context.Context) error { +// Shutdown provides a mock function for the type MockAdapter +func (_mock *MockAdapter) Shutdown(ctx context.Context) error { ret := _mock.Called(ctx) if len(ret) == 0 { @@ -112,18 +112,18 @@ func (_mock *MockAdapterInterface) Shutdown(ctx context.Context) error { return r0 } -// MockAdapterInterface_Shutdown_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'Shutdown' -type MockAdapterInterface_Shutdown_Call struct { +// MockAdapter_Shutdown_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'Shutdown' +type MockAdapter_Shutdown_Call struct { *mock.Call } // Shutdown is a helper method to define mock.On call // - ctx context.Context -func (_e *MockAdapterInterface_Expecter) Shutdown(ctx interface{}) *MockAdapterInterface_Shutdown_Call { - return &MockAdapterInterface_Shutdown_Call{Call: _e.mock.On("Shutdown", ctx)} +func (_e *MockAdapter_Expecter) Shutdown(ctx interface{}) *MockAdapter_Shutdown_Call { + return &MockAdapter_Shutdown_Call{Call: _e.mock.On("Shutdown", ctx)} } -func (_c *MockAdapterInterface_Shutdown_Call) Run(run func(ctx context.Context)) *MockAdapterInterface_Shutdown_Call { +func (_c *MockAdapter_Shutdown_Call) Run(run func(ctx context.Context)) *MockAdapter_Shutdown_Call { _c.Call.Run(func(args mock.Arguments) { var arg0 context.Context if args[0] != nil { @@ -136,18 +136,18 @@ func (_c *MockAdapterInterface_Shutdown_Call) Run(run func(ctx context.Context)) return _c } -func (_c *MockAdapterInterface_Shutdown_Call) Return(err error) *MockAdapterInterface_Shutdown_Call { +func (_c *MockAdapter_Shutdown_Call) Return(err error) *MockAdapter_Shutdown_Call { _c.Call.Return(err) return _c } -func (_c *MockAdapterInterface_Shutdown_Call) RunAndReturn(run func(ctx context.Context) error) *MockAdapterInterface_Shutdown_Call { +func (_c *MockAdapter_Shutdown_Call) RunAndReturn(run func(ctx context.Context) error) *MockAdapter_Shutdown_Call { _c.Call.Return(run) return _c } -// Startup provides a mock function for the type MockAdapterInterface -func (_mock *MockAdapterInterface) Startup(ctx context.Context) error { +// Startup provides a mock function for the type MockAdapter +func (_mock *MockAdapter) Startup(ctx context.Context) error { ret := _mock.Called(ctx) if len(ret) == 0 { @@ -163,18 +163,18 @@ func (_mock *MockAdapterInterface) Startup(ctx context.Context) error { return r0 } -// MockAdapterInterface_Startup_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'Startup' -type MockAdapterInterface_Startup_Call struct { +// MockAdapter_Startup_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'Startup' +type MockAdapter_Startup_Call struct { *mock.Call } // Startup is a helper method to define mock.On call // - ctx context.Context -func (_e *MockAdapterInterface_Expecter) Startup(ctx interface{}) *MockAdapterInterface_Startup_Call { - return &MockAdapterInterface_Startup_Call{Call: _e.mock.On("Startup", ctx)} +func (_e *MockAdapter_Expecter) Startup(ctx interface{}) *MockAdapter_Startup_Call { + return &MockAdapter_Startup_Call{Call: _e.mock.On("Startup", ctx)} } -func (_c *MockAdapterInterface_Startup_Call) Run(run func(ctx context.Context)) *MockAdapterInterface_Startup_Call { +func (_c *MockAdapter_Startup_Call) Run(run func(ctx context.Context)) *MockAdapter_Startup_Call { _c.Call.Run(func(args mock.Arguments) { var arg0 context.Context if args[0] != nil { @@ -187,18 +187,18 @@ func (_c *MockAdapterInterface_Startup_Call) Run(run func(ctx context.Context)) return _c } -func (_c *MockAdapterInterface_Startup_Call) Return(err error) *MockAdapterInterface_Startup_Call { +func (_c *MockAdapter_Startup_Call) Return(err error) *MockAdapter_Startup_Call { _c.Call.Return(err) return _c } -func (_c *MockAdapterInterface_Startup_Call) RunAndReturn(run func(ctx context.Context) error) *MockAdapterInterface_Startup_Call { +func (_c *MockAdapter_Startup_Call) RunAndReturn(run func(ctx context.Context) error) *MockAdapter_Startup_Call { _c.Call.Return(run) return _c } -// Subscribe provides a mock function for the type MockAdapterInterface -func (_mock *MockAdapterInterface) Subscribe(ctx context.Context, event SubscriptionEventConfiguration, updater resolve.SubscriptionUpdater) error { +// Subscribe provides a mock function for the type MockAdapter +func (_mock *MockAdapter) Subscribe(ctx context.Context, event SubscriptionEventConfiguration, updater resolve.SubscriptionUpdater) error { ret := _mock.Called(ctx, event, updater) if len(ret) == 0 { @@ -214,8 +214,8 @@ func (_mock *MockAdapterInterface) Subscribe(ctx context.Context, event Subscrip return r0 } -// MockAdapterInterface_Subscribe_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'Subscribe' -type MockAdapterInterface_Subscribe_Call struct { +// MockAdapter_Subscribe_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'Subscribe' +type MockAdapter_Subscribe_Call struct { *mock.Call } @@ -223,11 +223,11 @@ type MockAdapterInterface_Subscribe_Call struct { // - ctx context.Context // - event SubscriptionEventConfiguration // - updater resolve.SubscriptionUpdater -func (_e *MockAdapterInterface_Expecter) Subscribe(ctx interface{}, event interface{}, updater interface{}) *MockAdapterInterface_Subscribe_Call { - return &MockAdapterInterface_Subscribe_Call{Call: _e.mock.On("Subscribe", ctx, event, updater)} +func (_e *MockAdapter_Expecter) Subscribe(ctx interface{}, event interface{}, updater interface{}) *MockAdapter_Subscribe_Call { + return &MockAdapter_Subscribe_Call{Call: _e.mock.On("Subscribe", ctx, event, updater)} } -func (_c *MockAdapterInterface_Subscribe_Call) Run(run func(ctx context.Context, event SubscriptionEventConfiguration, updater resolve.SubscriptionUpdater)) *MockAdapterInterface_Subscribe_Call { +func (_c *MockAdapter_Subscribe_Call) Run(run func(ctx context.Context, event SubscriptionEventConfiguration, updater resolve.SubscriptionUpdater)) *MockAdapter_Subscribe_Call { _c.Call.Run(func(args mock.Arguments) { var arg0 context.Context if args[0] != nil { @@ -250,12 +250,12 @@ func (_c *MockAdapterInterface_Subscribe_Call) Run(run func(ctx context.Context, return _c } -func (_c *MockAdapterInterface_Subscribe_Call) Return(err error) *MockAdapterInterface_Subscribe_Call { +func (_c *MockAdapter_Subscribe_Call) Return(err error) *MockAdapter_Subscribe_Call { _c.Call.Return(err) return _c } -func (_c *MockAdapterInterface_Subscribe_Call) RunAndReturn(run func(ctx context.Context, event SubscriptionEventConfiguration, updater resolve.SubscriptionUpdater) error) *MockAdapterInterface_Subscribe_Call { +func (_c *MockAdapter_Subscribe_Call) RunAndReturn(run func(ctx context.Context, event SubscriptionEventConfiguration, updater resolve.SubscriptionUpdater) error) *MockAdapter_Subscribe_Call { _c.Call.Return(run) return _c } diff --git a/router/pkg/pubsub/kafka/provider_builder.go b/router/pkg/pubsub/kafka/provider_builder.go index 2bd55ba1cd..ef90526036 100644 --- a/router/pkg/pubsub/kafka/provider_builder.go +++ b/router/pkg/pubsub/kafka/provider_builder.go @@ -21,7 +21,7 @@ type PubSubProviderBuilder struct { logger *zap.Logger hostName string routerListenAddr string - adapters map[string]AdapterInterface + adapters map[string]Adapter } func (p *PubSubProviderBuilder) TypeID() string { @@ -97,12 +97,12 @@ func buildKafkaOptions(eventSource config.KafkaEventSource) ([]kgo.Opt, error) { return opts, nil } -func buildProvider(ctx context.Context, provider config.KafkaEventSource, logger *zap.Logger) (AdapterInterface, datasource.Provider, error) { +func buildProvider(ctx context.Context, provider config.KafkaEventSource, logger *zap.Logger) (Adapter, datasource.Provider, error) { options, err := buildKafkaOptions(provider) if err != nil { return nil, nil, fmt.Errorf("failed to build options for Kafka provider with ID \"%s\": %w", provider.ID, err) } - adapter, err := NewAdapter(ctx, logger, options) + adapter, err := NewProviderAdapter(ctx, logger, options) if err != nil { return nil, nil, fmt.Errorf("failed to create adapter for Kafka provider with ID \"%s\": %w", provider.ID, err) } @@ -122,6 +122,6 @@ func NewPubSubProviderBuilder( logger: logger, hostName: hostName, routerListenAddr: routerListenAddr, - adapters: make(map[string]AdapterInterface), + adapters: make(map[string]Adapter), } } diff --git a/router/pkg/pubsub/kafka/pubsub_datasource.go b/router/pkg/pubsub/kafka/pubsub_datasource.go index 1198b29022..6b44dfc256 100644 --- a/router/pkg/pubsub/kafka/pubsub_datasource.go +++ b/router/pkg/pubsub/kafka/pubsub_datasource.go @@ -21,7 +21,7 @@ type PubSubDataSource struct { topics []string providerId string - KafkaAdapter AdapterInterface + KafkaAdapter Adapter } func (c *PubSubDataSource) GetFieldName() string { diff --git a/router/pkg/pubsub/kafka/pubsub_datasource_test.go b/router/pkg/pubsub/kafka/pubsub_datasource_test.go index f935b6277b..061d42fac2 100644 --- a/router/pkg/pubsub/kafka/pubsub_datasource_test.go +++ b/router/pkg/pubsub/kafka/pubsub_datasource_test.go @@ -13,7 +13,7 @@ import ( func TestKafkaPubSubDataSource(t *testing.T) { // Create the data source to test with a real adapter - adapter := &Adapter{} + adapter := &ProviderAdapter{} pubsub := &PubSubDataSource{ KafkaAdapter: adapter, fieldName: "testField", @@ -29,7 +29,7 @@ func TestKafkaPubSubDataSource(t *testing.T) { // TestPubSubDataSourceWithMockAdapter tests the PubSubDataSource with a mocked adapter func TestPubSubDataSourceWithMockAdapter(t *testing.T) { // Create mock adapter - mockAdapter := NewMockAdapterInterface(t) + mockAdapter := NewMockAdapter(t) // Configure mock expectations for Publish mockAdapter.On("Publish", mock.Anything, mock.MatchedBy(func(event PublishEventConfiguration) bool { @@ -63,7 +63,7 @@ func TestPubSubDataSourceWithMockAdapter(t *testing.T) { // TestPubSubDataSource_GetResolveDataSource_WrongType tests the PubSubDataSource with a mocked adapter func TestPubSubDataSource_GetResolveDataSource_WrongType(t *testing.T) { // Create mock adapter - mockAdapter := NewMockAdapterInterface(t) + mockAdapter := NewMockAdapter(t) // Create the data source with mock adapter pubsub := &PubSubDataSource{ diff --git a/router/pkg/pubsub/nats/adapter.go b/router/pkg/pubsub/nats/adapter.go index a355cb676a..a0bef13f45 100644 --- a/router/pkg/pubsub/nats/adapter.go +++ b/router/pkg/pubsub/nats/adapter.go @@ -16,8 +16,8 @@ import ( "go.uber.org/zap" ) -// AdapterInterface defines the methods that a NATS adapter should implement -type AdapterInterface interface { +// Adapter defines the methods that a NATS adapter should implement +type Adapter interface { // Subscribe subscribes to the given events and sends updates to the updater Subscribe(ctx context.Context, event SubscriptionEventConfiguration, updater resolve.SubscriptionUpdater) error // Publish publishes the given event to the specified subject @@ -30,8 +30,8 @@ type AdapterInterface interface { Shutdown(ctx context.Context) error } -// Adapter implements the AdapterInterface for NATS pub/sub -type Adapter struct { +// ProviderAdapter implements the AdapterInterface for NATS pub/sub +type ProviderAdapter struct { ctx context.Context client *nats.Conn js jetstream.JetStream @@ -48,7 +48,7 @@ type Adapter struct { // We use the hostname and the address the router is listening on, which should provide a good representation // of what a unique instance is from the perspective of the client that has started a subscription to this instance // and want to restart the subscription after a failure on the client or router side. -func (p *Adapter) getInstanceIdentifier() string { +func (p *ProviderAdapter) getInstanceIdentifier() string { return fmt.Sprintf("%s-%s", p.hostName, p.routerListenAddr) } @@ -56,7 +56,7 @@ func (p *Adapter) getInstanceIdentifier() string { // we need to make sure that the durable consumer name is unique for each instance and subjects to prevent // multiple routers from changing the same consumer, which would lead to message loss and wrong messages delivered // to the subscribers -func (p *Adapter) getDurableConsumerName(durableName string, subjects []string) (string, error) { +func (p *ProviderAdapter) getDurableConsumerName(durableName string, subjects []string) (string, error) { subjHash := xxhash.New() _, err := subjHash.WriteString(p.getInstanceIdentifier()) if err != nil { @@ -72,7 +72,7 @@ func (p *Adapter) getDurableConsumerName(durableName string, subjects []string) return fmt.Sprintf("%s-%x", durableName, subjHash.Sum64()), nil } -func (p *Adapter) Subscribe(ctx context.Context, event SubscriptionEventConfiguration, updater resolve.SubscriptionUpdater) error { +func (p *ProviderAdapter) Subscribe(ctx context.Context, event SubscriptionEventConfiguration, updater resolve.SubscriptionUpdater) error { log := p.logger.With( zap.String("provider_id", event.ProviderID), zap.String("method", "subscribe"), @@ -197,7 +197,7 @@ func (p *Adapter) Subscribe(ctx context.Context, event SubscriptionEventConfigur return nil } -func (p *Adapter) Publish(_ context.Context, event PublishAndRequestEventConfiguration) error { +func (p *ProviderAdapter) Publish(_ context.Context, event PublishAndRequestEventConfiguration) error { log := p.logger.With( zap.String("provider_id", event.ProviderID), zap.String("method", "publish"), @@ -219,7 +219,7 @@ func (p *Adapter) Publish(_ context.Context, event PublishAndRequestEventConfigu return nil } -func (p *Adapter) Request(ctx context.Context, event PublishAndRequestEventConfiguration, w io.Writer) error { +func (p *ProviderAdapter) Request(ctx context.Context, event PublishAndRequestEventConfiguration, w io.Writer) error { log := p.logger.With( zap.String("provider_id", event.ProviderID), zap.String("method", "request"), @@ -247,7 +247,7 @@ func (p *Adapter) Request(ctx context.Context, event PublishAndRequestEventConfi return err } -func (p *Adapter) flush(ctx context.Context) error { +func (p *ProviderAdapter) flush(ctx context.Context) error { if p.client == nil { return nil } @@ -260,7 +260,7 @@ func (p *Adapter) flush(ctx context.Context) error { return p.client.FlushWithContext(ctx) } -func (p *Adapter) Startup(ctx context.Context) (err error) { +func (p *ProviderAdapter) Startup(ctx context.Context) (err error) { p.client, err = nats.Connect(p.url, p.opts...) if err != nil { return err @@ -272,7 +272,7 @@ func (p *Adapter) Startup(ctx context.Context) (err error) { return nil } -func (p *Adapter) Shutdown(ctx context.Context) error { +func (p *ProviderAdapter) Shutdown(ctx context.Context) error { if p.client == nil { return nil } @@ -303,12 +303,12 @@ func (p *Adapter) Shutdown(ctx context.Context) error { return nil } -func NewAdapter(ctx context.Context, logger *zap.Logger, url string, opts []nats.Option, hostName string, routerListenAddr string) (AdapterInterface, error) { +func NewAdapter(ctx context.Context, logger *zap.Logger, url string, opts []nats.Option, hostName string, routerListenAddr string) (Adapter, error) { if logger == nil { logger = zap.NewNop() } - return &Adapter{ + return &ProviderAdapter{ ctx: ctx, logger: logger.With(zap.String("pubsub", "nats")), closeWg: sync.WaitGroup{}, diff --git a/router/pkg/pubsub/nats/engine_datasource.go b/router/pkg/pubsub/nats/engine_datasource.go index ad0d1f859c..ef9300236c 100644 --- a/router/pkg/pubsub/nats/engine_datasource.go +++ b/router/pkg/pubsub/nats/engine_datasource.go @@ -36,7 +36,7 @@ func (s *PublishAndRequestEventConfiguration) MarshalJSONTemplate() string { } type SubscriptionSource struct { - pubSub AdapterInterface + pubSub Adapter } func (s *SubscriptionSource) UniqueRequestID(ctx *resolve.Context, input []byte, xxh *xxhash.Digest) error { @@ -71,7 +71,7 @@ func (s *SubscriptionSource) Start(ctx *resolve.Context, input []byte, updater r } type NatsPublishDataSource struct { - pubSub AdapterInterface + pubSub Adapter } func (s *NatsPublishDataSource) Load(ctx context.Context, input []byte, out *bytes.Buffer) error { @@ -94,7 +94,7 @@ func (s *NatsPublishDataSource) LoadWithFiles(ctx context.Context, input []byte, } type NatsRequestDataSource struct { - pubSub AdapterInterface + pubSub Adapter } func (s *NatsRequestDataSource) Load(ctx context.Context, input []byte, out *bytes.Buffer) error { diff --git a/router/pkg/pubsub/nats/engine_datasource_test.go b/router/pkg/pubsub/nats/engine_datasource_test.go index 780bc47005..da21d4de88 100644 --- a/router/pkg/pubsub/nats/engine_datasource_test.go +++ b/router/pkg/pubsub/nats/engine_datasource_test.go @@ -113,7 +113,7 @@ func TestSubscriptionSource_UniqueRequestID(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { source := &SubscriptionSource{ - pubSub: NewMockAdapterInterface(t), + pubSub: NewMockAdapter(t), } ctx := &resolve.Context{} input := []byte(tt.input) @@ -140,13 +140,13 @@ func TestSubscriptionSource_Start(t *testing.T) { tests := []struct { name string input string - mockSetup func(*MockAdapterInterface, *datasource.MockSubscriptionUpdater) + mockSetup func(*MockAdapter, *datasource.MockSubscriptionUpdater) expectError bool }{ { name: "successful subscription", input: `{"subjects":["subject1", "subject2"], "providerId":"test-provider"}`, - mockSetup: func(m *MockAdapterInterface, updater *datasource.MockSubscriptionUpdater) { + mockSetup: func(m *MockAdapter, updater *datasource.MockSubscriptionUpdater) { m.On("Subscribe", mock.Anything, SubscriptionEventConfiguration{ ProviderID: "test-provider", Subjects: []string{"subject1", "subject2"}, @@ -157,7 +157,7 @@ func TestSubscriptionSource_Start(t *testing.T) { { name: "adapter returns error", input: `{"subjects":["subject1"], "providerId":"test-provider"}`, - mockSetup: func(m *MockAdapterInterface, updater *datasource.MockSubscriptionUpdater) { + mockSetup: func(m *MockAdapter, updater *datasource.MockSubscriptionUpdater) { m.On("Subscribe", mock.Anything, SubscriptionEventConfiguration{ ProviderID: "test-provider", Subjects: []string{"subject1"}, @@ -168,14 +168,14 @@ func TestSubscriptionSource_Start(t *testing.T) { { name: "invalid input json", input: `{"invalid json":`, - mockSetup: func(m *MockAdapterInterface, updater *datasource.MockSubscriptionUpdater) {}, + mockSetup: func(m *MockAdapter, updater *datasource.MockSubscriptionUpdater) {}, expectError: true, }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - mockAdapter := NewMockAdapterInterface(t) + mockAdapter := NewMockAdapter(t) updater := datasource.NewMockSubscriptionUpdater(t) tt.mockSetup(mockAdapter, updater) @@ -206,7 +206,7 @@ func TestNatsPublishDataSource_Load(t *testing.T) { tests := []struct { name string input string - mockSetup func(*MockAdapterInterface) + mockSetup func(*MockAdapter) expectError bool expectedOutput string expectPublished bool @@ -214,7 +214,7 @@ func TestNatsPublishDataSource_Load(t *testing.T) { { name: "successful publish", input: `{"subject":"test-subject", "data":{"message":"hello"}, "providerId":"test-provider"}`, - mockSetup: func(m *MockAdapterInterface) { + mockSetup: func(m *MockAdapter) { m.On("Publish", mock.Anything, mock.MatchedBy(func(event PublishAndRequestEventConfiguration) bool { return event.ProviderID == "test-provider" && event.Subject == "test-subject" && @@ -228,7 +228,7 @@ func TestNatsPublishDataSource_Load(t *testing.T) { { name: "publish error", input: `{"subject":"test-subject", "data":{"message":"hello"}, "providerId":"test-provider"}`, - mockSetup: func(m *MockAdapterInterface) { + mockSetup: func(m *MockAdapter) { m.On("Publish", mock.Anything, mock.Anything).Return(errors.New("publish error")) }, expectError: false, // The Load method doesn't return the publish error directly @@ -238,7 +238,7 @@ func TestNatsPublishDataSource_Load(t *testing.T) { { name: "invalid input json", input: `{"invalid json":`, - mockSetup: func(m *MockAdapterInterface) {}, + mockSetup: func(m *MockAdapter) {}, expectError: true, expectPublished: false, }, @@ -246,7 +246,7 @@ func TestNatsPublishDataSource_Load(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - mockAdapter := NewMockAdapterInterface(t) + mockAdapter := NewMockAdapter(t) tt.mockSetup(mockAdapter) dataSource := &NatsPublishDataSource{ @@ -282,14 +282,14 @@ func TestNatsRequestDataSource_Load(t *testing.T) { tests := []struct { name string input string - mockSetup func(*MockAdapterInterface) + mockSetup func(*MockAdapter) expectError bool expectedOutput string }{ { name: "successful request", input: `{"subject":"test-subject", "data":{"message":"hello"}, "providerId":"test-provider"}`, - mockSetup: func(m *MockAdapterInterface) { + mockSetup: func(m *MockAdapter) { m.On("Request", mock.Anything, mock.MatchedBy(func(event PublishAndRequestEventConfiguration) bool { return event.ProviderID == "test-provider" && event.Subject == "test-subject" && @@ -306,7 +306,7 @@ func TestNatsRequestDataSource_Load(t *testing.T) { { name: "request error", input: `{"subject":"test-subject", "data":{"message":"hello"}, "providerId":"test-provider"}`, - mockSetup: func(m *MockAdapterInterface) { + mockSetup: func(m *MockAdapter) { m.On("Request", mock.Anything, mock.Anything, mock.Anything).Return(errors.New("request error")) }, expectError: true, @@ -315,7 +315,7 @@ func TestNatsRequestDataSource_Load(t *testing.T) { { name: "invalid input json", input: `{"invalid json":`, - mockSetup: func(m *MockAdapterInterface) {}, + mockSetup: func(m *MockAdapter) {}, expectError: true, expectedOutput: "", }, @@ -323,7 +323,7 @@ func TestNatsRequestDataSource_Load(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - mockAdapter := NewMockAdapterInterface(t) + mockAdapter := NewMockAdapter(t) tt.mockSetup(mockAdapter) dataSource := &NatsRequestDataSource{ diff --git a/router/pkg/pubsub/nats/mocks.go b/router/pkg/pubsub/nats/mocks.go index 4cdbdb6254..de49c6ae7e 100644 --- a/router/pkg/pubsub/nats/mocks.go +++ b/router/pkg/pubsub/nats/mocks.go @@ -12,13 +12,13 @@ import ( "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/resolve" ) -// NewMockAdapterInterface creates a new instance of MockAdapterInterface. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations. +// NewMockAdapter creates a new instance of MockAdapter. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations. // The first argument is typically a *testing.T value. -func NewMockAdapterInterface(t interface { +func NewMockAdapter(t interface { mock.TestingT Cleanup(func()) -}) *MockAdapterInterface { - mock := &MockAdapterInterface{} +}) *MockAdapter { + mock := &MockAdapter{} mock.Mock.Test(t) t.Cleanup(func() { mock.AssertExpectations(t) }) @@ -26,21 +26,21 @@ func NewMockAdapterInterface(t interface { return mock } -// MockAdapterInterface is an autogenerated mock type for the AdapterInterface type -type MockAdapterInterface struct { +// MockAdapter is an autogenerated mock type for the Adapter type +type MockAdapter struct { mock.Mock } -type MockAdapterInterface_Expecter struct { +type MockAdapter_Expecter struct { mock *mock.Mock } -func (_m *MockAdapterInterface) EXPECT() *MockAdapterInterface_Expecter { - return &MockAdapterInterface_Expecter{mock: &_m.Mock} +func (_m *MockAdapter) EXPECT() *MockAdapter_Expecter { + return &MockAdapter_Expecter{mock: &_m.Mock} } -// Publish provides a mock function for the type MockAdapterInterface -func (_mock *MockAdapterInterface) Publish(ctx context.Context, event PublishAndRequestEventConfiguration) error { +// Publish provides a mock function for the type MockAdapter +func (_mock *MockAdapter) Publish(ctx context.Context, event PublishAndRequestEventConfiguration) error { ret := _mock.Called(ctx, event) if len(ret) == 0 { @@ -56,19 +56,19 @@ func (_mock *MockAdapterInterface) Publish(ctx context.Context, event PublishAnd return r0 } -// MockAdapterInterface_Publish_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'Publish' -type MockAdapterInterface_Publish_Call struct { +// MockAdapter_Publish_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'Publish' +type MockAdapter_Publish_Call struct { *mock.Call } // Publish is a helper method to define mock.On call // - ctx context.Context // - event PublishAndRequestEventConfiguration -func (_e *MockAdapterInterface_Expecter) Publish(ctx interface{}, event interface{}) *MockAdapterInterface_Publish_Call { - return &MockAdapterInterface_Publish_Call{Call: _e.mock.On("Publish", ctx, event)} +func (_e *MockAdapter_Expecter) Publish(ctx interface{}, event interface{}) *MockAdapter_Publish_Call { + return &MockAdapter_Publish_Call{Call: _e.mock.On("Publish", ctx, event)} } -func (_c *MockAdapterInterface_Publish_Call) Run(run func(ctx context.Context, event PublishAndRequestEventConfiguration)) *MockAdapterInterface_Publish_Call { +func (_c *MockAdapter_Publish_Call) Run(run func(ctx context.Context, event PublishAndRequestEventConfiguration)) *MockAdapter_Publish_Call { _c.Call.Run(func(args mock.Arguments) { var arg0 context.Context if args[0] != nil { @@ -86,18 +86,18 @@ func (_c *MockAdapterInterface_Publish_Call) Run(run func(ctx context.Context, e return _c } -func (_c *MockAdapterInterface_Publish_Call) Return(err error) *MockAdapterInterface_Publish_Call { +func (_c *MockAdapter_Publish_Call) Return(err error) *MockAdapter_Publish_Call { _c.Call.Return(err) return _c } -func (_c *MockAdapterInterface_Publish_Call) RunAndReturn(run func(ctx context.Context, event PublishAndRequestEventConfiguration) error) *MockAdapterInterface_Publish_Call { +func (_c *MockAdapter_Publish_Call) RunAndReturn(run func(ctx context.Context, event PublishAndRequestEventConfiguration) error) *MockAdapter_Publish_Call { _c.Call.Return(run) return _c } -// Request provides a mock function for the type MockAdapterInterface -func (_mock *MockAdapterInterface) Request(ctx context.Context, event PublishAndRequestEventConfiguration, w io.Writer) error { +// Request provides a mock function for the type MockAdapter +func (_mock *MockAdapter) Request(ctx context.Context, event PublishAndRequestEventConfiguration, w io.Writer) error { ret := _mock.Called(ctx, event, w) if len(ret) == 0 { @@ -113,8 +113,8 @@ func (_mock *MockAdapterInterface) Request(ctx context.Context, event PublishAnd return r0 } -// MockAdapterInterface_Request_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'Request' -type MockAdapterInterface_Request_Call struct { +// MockAdapter_Request_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'Request' +type MockAdapter_Request_Call struct { *mock.Call } @@ -122,11 +122,11 @@ type MockAdapterInterface_Request_Call struct { // - ctx context.Context // - event PublishAndRequestEventConfiguration // - w io.Writer -func (_e *MockAdapterInterface_Expecter) Request(ctx interface{}, event interface{}, w interface{}) *MockAdapterInterface_Request_Call { - return &MockAdapterInterface_Request_Call{Call: _e.mock.On("Request", ctx, event, w)} +func (_e *MockAdapter_Expecter) Request(ctx interface{}, event interface{}, w interface{}) *MockAdapter_Request_Call { + return &MockAdapter_Request_Call{Call: _e.mock.On("Request", ctx, event, w)} } -func (_c *MockAdapterInterface_Request_Call) Run(run func(ctx context.Context, event PublishAndRequestEventConfiguration, w io.Writer)) *MockAdapterInterface_Request_Call { +func (_c *MockAdapter_Request_Call) Run(run func(ctx context.Context, event PublishAndRequestEventConfiguration, w io.Writer)) *MockAdapter_Request_Call { _c.Call.Run(func(args mock.Arguments) { var arg0 context.Context if args[0] != nil { @@ -149,18 +149,18 @@ func (_c *MockAdapterInterface_Request_Call) Run(run func(ctx context.Context, e return _c } -func (_c *MockAdapterInterface_Request_Call) Return(err error) *MockAdapterInterface_Request_Call { +func (_c *MockAdapter_Request_Call) Return(err error) *MockAdapter_Request_Call { _c.Call.Return(err) return _c } -func (_c *MockAdapterInterface_Request_Call) RunAndReturn(run func(ctx context.Context, event PublishAndRequestEventConfiguration, w io.Writer) error) *MockAdapterInterface_Request_Call { +func (_c *MockAdapter_Request_Call) RunAndReturn(run func(ctx context.Context, event PublishAndRequestEventConfiguration, w io.Writer) error) *MockAdapter_Request_Call { _c.Call.Return(run) return _c } -// Shutdown provides a mock function for the type MockAdapterInterface -func (_mock *MockAdapterInterface) Shutdown(ctx context.Context) error { +// Shutdown provides a mock function for the type MockAdapter +func (_mock *MockAdapter) Shutdown(ctx context.Context) error { ret := _mock.Called(ctx) if len(ret) == 0 { @@ -176,18 +176,18 @@ func (_mock *MockAdapterInterface) Shutdown(ctx context.Context) error { return r0 } -// MockAdapterInterface_Shutdown_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'Shutdown' -type MockAdapterInterface_Shutdown_Call struct { +// MockAdapter_Shutdown_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'Shutdown' +type MockAdapter_Shutdown_Call struct { *mock.Call } // Shutdown is a helper method to define mock.On call // - ctx context.Context -func (_e *MockAdapterInterface_Expecter) Shutdown(ctx interface{}) *MockAdapterInterface_Shutdown_Call { - return &MockAdapterInterface_Shutdown_Call{Call: _e.mock.On("Shutdown", ctx)} +func (_e *MockAdapter_Expecter) Shutdown(ctx interface{}) *MockAdapter_Shutdown_Call { + return &MockAdapter_Shutdown_Call{Call: _e.mock.On("Shutdown", ctx)} } -func (_c *MockAdapterInterface_Shutdown_Call) Run(run func(ctx context.Context)) *MockAdapterInterface_Shutdown_Call { +func (_c *MockAdapter_Shutdown_Call) Run(run func(ctx context.Context)) *MockAdapter_Shutdown_Call { _c.Call.Run(func(args mock.Arguments) { var arg0 context.Context if args[0] != nil { @@ -200,18 +200,18 @@ func (_c *MockAdapterInterface_Shutdown_Call) Run(run func(ctx context.Context)) return _c } -func (_c *MockAdapterInterface_Shutdown_Call) Return(err error) *MockAdapterInterface_Shutdown_Call { +func (_c *MockAdapter_Shutdown_Call) Return(err error) *MockAdapter_Shutdown_Call { _c.Call.Return(err) return _c } -func (_c *MockAdapterInterface_Shutdown_Call) RunAndReturn(run func(ctx context.Context) error) *MockAdapterInterface_Shutdown_Call { +func (_c *MockAdapter_Shutdown_Call) RunAndReturn(run func(ctx context.Context) error) *MockAdapter_Shutdown_Call { _c.Call.Return(run) return _c } -// Startup provides a mock function for the type MockAdapterInterface -func (_mock *MockAdapterInterface) Startup(ctx context.Context) error { +// Startup provides a mock function for the type MockAdapter +func (_mock *MockAdapter) Startup(ctx context.Context) error { ret := _mock.Called(ctx) if len(ret) == 0 { @@ -227,18 +227,18 @@ func (_mock *MockAdapterInterface) Startup(ctx context.Context) error { return r0 } -// MockAdapterInterface_Startup_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'Startup' -type MockAdapterInterface_Startup_Call struct { +// MockAdapter_Startup_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'Startup' +type MockAdapter_Startup_Call struct { *mock.Call } // Startup is a helper method to define mock.On call // - ctx context.Context -func (_e *MockAdapterInterface_Expecter) Startup(ctx interface{}) *MockAdapterInterface_Startup_Call { - return &MockAdapterInterface_Startup_Call{Call: _e.mock.On("Startup", ctx)} +func (_e *MockAdapter_Expecter) Startup(ctx interface{}) *MockAdapter_Startup_Call { + return &MockAdapter_Startup_Call{Call: _e.mock.On("Startup", ctx)} } -func (_c *MockAdapterInterface_Startup_Call) Run(run func(ctx context.Context)) *MockAdapterInterface_Startup_Call { +func (_c *MockAdapter_Startup_Call) Run(run func(ctx context.Context)) *MockAdapter_Startup_Call { _c.Call.Run(func(args mock.Arguments) { var arg0 context.Context if args[0] != nil { @@ -251,18 +251,18 @@ func (_c *MockAdapterInterface_Startup_Call) Run(run func(ctx context.Context)) return _c } -func (_c *MockAdapterInterface_Startup_Call) Return(err error) *MockAdapterInterface_Startup_Call { +func (_c *MockAdapter_Startup_Call) Return(err error) *MockAdapter_Startup_Call { _c.Call.Return(err) return _c } -func (_c *MockAdapterInterface_Startup_Call) RunAndReturn(run func(ctx context.Context) error) *MockAdapterInterface_Startup_Call { +func (_c *MockAdapter_Startup_Call) RunAndReturn(run func(ctx context.Context) error) *MockAdapter_Startup_Call { _c.Call.Return(run) return _c } -// Subscribe provides a mock function for the type MockAdapterInterface -func (_mock *MockAdapterInterface) Subscribe(ctx context.Context, event SubscriptionEventConfiguration, updater resolve.SubscriptionUpdater) error { +// Subscribe provides a mock function for the type MockAdapter +func (_mock *MockAdapter) Subscribe(ctx context.Context, event SubscriptionEventConfiguration, updater resolve.SubscriptionUpdater) error { ret := _mock.Called(ctx, event, updater) if len(ret) == 0 { @@ -278,8 +278,8 @@ func (_mock *MockAdapterInterface) Subscribe(ctx context.Context, event Subscrip return r0 } -// MockAdapterInterface_Subscribe_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'Subscribe' -type MockAdapterInterface_Subscribe_Call struct { +// MockAdapter_Subscribe_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'Subscribe' +type MockAdapter_Subscribe_Call struct { *mock.Call } @@ -287,11 +287,11 @@ type MockAdapterInterface_Subscribe_Call struct { // - ctx context.Context // - event SubscriptionEventConfiguration // - updater resolve.SubscriptionUpdater -func (_e *MockAdapterInterface_Expecter) Subscribe(ctx interface{}, event interface{}, updater interface{}) *MockAdapterInterface_Subscribe_Call { - return &MockAdapterInterface_Subscribe_Call{Call: _e.mock.On("Subscribe", ctx, event, updater)} +func (_e *MockAdapter_Expecter) Subscribe(ctx interface{}, event interface{}, updater interface{}) *MockAdapter_Subscribe_Call { + return &MockAdapter_Subscribe_Call{Call: _e.mock.On("Subscribe", ctx, event, updater)} } -func (_c *MockAdapterInterface_Subscribe_Call) Run(run func(ctx context.Context, event SubscriptionEventConfiguration, updater resolve.SubscriptionUpdater)) *MockAdapterInterface_Subscribe_Call { +func (_c *MockAdapter_Subscribe_Call) Run(run func(ctx context.Context, event SubscriptionEventConfiguration, updater resolve.SubscriptionUpdater)) *MockAdapter_Subscribe_Call { _c.Call.Run(func(args mock.Arguments) { var arg0 context.Context if args[0] != nil { @@ -314,12 +314,12 @@ func (_c *MockAdapterInterface_Subscribe_Call) Run(run func(ctx context.Context, return _c } -func (_c *MockAdapterInterface_Subscribe_Call) Return(err error) *MockAdapterInterface_Subscribe_Call { +func (_c *MockAdapter_Subscribe_Call) Return(err error) *MockAdapter_Subscribe_Call { _c.Call.Return(err) return _c } -func (_c *MockAdapterInterface_Subscribe_Call) RunAndReturn(run func(ctx context.Context, event SubscriptionEventConfiguration, updater resolve.SubscriptionUpdater) error) *MockAdapterInterface_Subscribe_Call { +func (_c *MockAdapter_Subscribe_Call) RunAndReturn(run func(ctx context.Context, event SubscriptionEventConfiguration, updater resolve.SubscriptionUpdater) error) *MockAdapter_Subscribe_Call { _c.Call.Return(run) return _c } diff --git a/router/pkg/pubsub/nats/provider_builder.go b/router/pkg/pubsub/nats/provider_builder.go index 775fdabc9c..5137f6ad71 100644 --- a/router/pkg/pubsub/nats/provider_builder.go +++ b/router/pkg/pubsub/nats/provider_builder.go @@ -20,7 +20,7 @@ type PubSubProviderBuilder struct { logger *zap.Logger hostName string routerListenAddr string - adapters map[string]AdapterInterface + adapters map[string]Adapter } func (p *PubSubProviderBuilder) TypeID() string { @@ -122,7 +122,7 @@ func buildNatsOptions(eventSource config.NatsEventSource, logger *zap.Logger) ([ return opts, nil } -func buildProvider(ctx context.Context, provider config.NatsEventSource, logger *zap.Logger, hostName string, routerListenAddr string) (AdapterInterface, datasource.Provider, error) { +func buildProvider(ctx context.Context, provider config.NatsEventSource, logger *zap.Logger, hostName string, routerListenAddr string) (Adapter, datasource.Provider, error) { options, err := buildNatsOptions(provider, logger) if err != nil { return nil, nil, fmt.Errorf("failed to build options for Nats provider with ID \"%s\": %w", provider.ID, err) @@ -147,6 +147,6 @@ func NewPubSubProviderBuilder( logger: logger, hostName: hostName, routerListenAddr: routerListenAddr, - adapters: make(map[string]AdapterInterface), + adapters: make(map[string]Adapter), } } diff --git a/router/pkg/pubsub/nats/pubsub_datasource.go b/router/pkg/pubsub/nats/pubsub_datasource.go index dc618816be..9c0e8434e8 100644 --- a/router/pkg/pubsub/nats/pubsub_datasource.go +++ b/router/pkg/pubsub/nats/pubsub_datasource.go @@ -19,7 +19,7 @@ const ( ) type PubSubDataSource struct { - NatsAdapter AdapterInterface + NatsAdapter Adapter fieldName string eventType EventType diff --git a/router/pkg/pubsub/nats/pubsub_datasource_test.go b/router/pkg/pubsub/nats/pubsub_datasource_test.go index d501321fe7..16d2ed96bb 100644 --- a/router/pkg/pubsub/nats/pubsub_datasource_test.go +++ b/router/pkg/pubsub/nats/pubsub_datasource_test.go @@ -15,7 +15,7 @@ import ( func TestNatsPubSubDataSource(t *testing.T) { // Create the data source to test with a real adapter - adapter := &Adapter{} + adapter := &ProviderAdapter{} pubsub := &PubSubDataSource{ providerId: "test-provider", eventType: EventTypePublish, @@ -30,7 +30,7 @@ func TestNatsPubSubDataSource(t *testing.T) { func TestPubSubDataSourceWithMockAdapter(t *testing.T) { // Create mock adapter - mockAdapter := NewMockAdapterInterface(t) + mockAdapter := NewMockAdapter(t) // Configure mock expectations for Publish mockAdapter.On("Publish", mock.Anything, mock.MatchedBy(func(event PublishAndRequestEventConfiguration) bool { @@ -63,7 +63,7 @@ func TestPubSubDataSourceWithMockAdapter(t *testing.T) { func TestPubSubDataSource_GetResolveDataSource_WrongType(t *testing.T) { // Create mock adapter - mockAdapter := NewMockAdapterInterface(t) + mockAdapter := NewMockAdapter(t) // Create the data source with mock adapter pubsub := &PubSubDataSource{ @@ -163,7 +163,7 @@ func TestNatsPubSubDataSourceWithStreamConfiguration(t *testing.T) { func TestPubSubDataSource_RequestDataSource(t *testing.T) { // Create mock adapter - mockAdapter := NewMockAdapterInterface(t) + mockAdapter := NewMockAdapter(t) // Configure mock expectations for Request mockAdapter.On("Request", mock.Anything, mock.MatchedBy(func(event PublishAndRequestEventConfiguration) bool { From 6b50be0893dcc487643e15ff80c9e0d0c88a7fee Mon Sep 17 00:00:00 2001 From: Alessandro Pagnin Date: Fri, 6 Jun 2025 09:48:25 +0200 Subject: [PATCH 103/126] chore: remove BuildDataSourceFactory from ProviderBuilder --- router/pkg/pubsub/datasource/mocks.go | 53 --------------------- router/pkg/pubsub/datasource/provider.go | 2 - router/pkg/pubsub/kafka/provider_builder.go | 4 -- router/pkg/pubsub/nats/provider_builder.go | 4 -- router/pkg/pubsub/pubsub.go | 2 +- router/pkg/pubsub/pubsub_test.go | 8 ---- 6 files changed, 1 insertion(+), 72 deletions(-) diff --git a/router/pkg/pubsub/datasource/mocks.go b/router/pkg/pubsub/datasource/mocks.go index 6b03698588..78573facfa 100644 --- a/router/pkg/pubsub/datasource/mocks.go +++ b/router/pkg/pubsub/datasource/mocks.go @@ -791,59 +791,6 @@ func (_c *MockProviderBuilder_BuildDataSource_Call[P, E]) RunAndReturn(run func( return _c } -// BuildDataSourceFactory provides a mock function for the type MockProviderBuilder -func (_mock *MockProviderBuilder[P, E]) BuildDataSourceFactory(data E) *PubSubDataSourceFactory[P, E] { - ret := _mock.Called(data) - - if len(ret) == 0 { - panic("no return value specified for BuildDataSourceFactory") - } - - var r0 *PubSubDataSourceFactory[P, E] - if returnFunc, ok := ret.Get(0).(func(E) *PubSubDataSourceFactory[P, E]); ok { - r0 = returnFunc(data) - } else { - if ret.Get(0) != nil { - r0 = ret.Get(0).(*PubSubDataSourceFactory[P, E]) - } - } - return r0 -} - -// MockProviderBuilder_BuildDataSourceFactory_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'BuildDataSourceFactory' -type MockProviderBuilder_BuildDataSourceFactory_Call[P any, E any] struct { - *mock.Call -} - -// BuildDataSourceFactory is a helper method to define mock.On call -// - data E -func (_e *MockProviderBuilder_Expecter[P, E]) BuildDataSourceFactory(data interface{}) *MockProviderBuilder_BuildDataSourceFactory_Call[P, E] { - return &MockProviderBuilder_BuildDataSourceFactory_Call[P, E]{Call: _e.mock.On("BuildDataSourceFactory", data)} -} - -func (_c *MockProviderBuilder_BuildDataSourceFactory_Call[P, E]) Run(run func(data E)) *MockProviderBuilder_BuildDataSourceFactory_Call[P, E] { - _c.Call.Run(func(args mock.Arguments) { - var arg0 E - if args[0] != nil { - arg0 = args[0].(E) - } - run( - arg0, - ) - }) - return _c -} - -func (_c *MockProviderBuilder_BuildDataSourceFactory_Call[P, E]) Return(pubSubDataSourceFactory *PubSubDataSourceFactory[P, E]) *MockProviderBuilder_BuildDataSourceFactory_Call[P, E] { - _c.Call.Return(pubSubDataSourceFactory) - return _c -} - -func (_c *MockProviderBuilder_BuildDataSourceFactory_Call[P, E]) RunAndReturn(run func(data E) *PubSubDataSourceFactory[P, E]) *MockProviderBuilder_BuildDataSourceFactory_Call[P, E] { - _c.Call.Return(run) - return _c -} - // BuildProvider provides a mock function for the type MockProviderBuilder func (_mock *MockProviderBuilder[P, E]) BuildProvider(options P) (Provider, error) { ret := _mock.Called(options) diff --git a/router/pkg/pubsub/datasource/provider.go b/router/pkg/pubsub/datasource/provider.go index 507af1900b..fd4ce13d02 100644 --- a/router/pkg/pubsub/datasource/provider.go +++ b/router/pkg/pubsub/datasource/provider.go @@ -30,6 +30,4 @@ type ProviderBuilder[P, E any] interface { BuildProvider(options P) (Provider, error) // BuildDataSource Build the data source for the given provider and event configuration BuildDataSource(data E) (PubSubDataSource, error) - // BuildDataSource Build the data source for the given provider and event configuration - BuildDataSourceFactory(data E) *PubSubDataSourceFactory[P, E] } diff --git a/router/pkg/pubsub/kafka/provider_builder.go b/router/pkg/pubsub/kafka/provider_builder.go index ef90526036..744ffc54fb 100644 --- a/router/pkg/pubsub/kafka/provider_builder.go +++ b/router/pkg/pubsub/kafka/provider_builder.go @@ -28,10 +28,6 @@ func (p *PubSubProviderBuilder) TypeID() string { return providerTypeID } -func (p *PubSubProviderBuilder) BuildDataSourceFactory(data *nodev1.KafkaEventConfiguration) *datasource.PubSubDataSourceFactory[config.KafkaEventSource, *nodev1.KafkaEventConfiguration] { - return datasource.NewPubSubDataSourceFactory(p, data) -} - func (p *PubSubProviderBuilder) BuildDataSource(data *nodev1.KafkaEventConfiguration) (datasource.PubSubDataSource, error) { providerId := data.GetEngineEventConfiguration().GetProviderId() adapter, ok := p.adapters[providerId] diff --git a/router/pkg/pubsub/nats/provider_builder.go b/router/pkg/pubsub/nats/provider_builder.go index 5137f6ad71..c36355d2fc 100644 --- a/router/pkg/pubsub/nats/provider_builder.go +++ b/router/pkg/pubsub/nats/provider_builder.go @@ -27,10 +27,6 @@ func (p *PubSubProviderBuilder) TypeID() string { return providerTypeID } -func (p *PubSubProviderBuilder) BuildDataSourceFactory(data *nodev1.NatsEventConfiguration) *datasource.PubSubDataSourceFactory[config.NatsEventSource, *nodev1.NatsEventConfiguration] { - return datasource.NewPubSubDataSourceFactory(p, data) -} - func (p *PubSubProviderBuilder) BuildDataSource(data *nodev1.NatsEventConfiguration) (datasource.PubSubDataSource, error) { providerId := data.GetEngineEventConfiguration().GetProviderId() adapter, ok := p.adapters[providerId] diff --git a/router/pkg/pubsub/pubsub.go b/router/pkg/pubsub/pubsub.go index 7b40765e05..4c72c1d8c5 100644 --- a/router/pkg/pubsub/pubsub.go +++ b/router/pkg/pubsub/pubsub.go @@ -137,7 +137,7 @@ func build[P GetID, E GetEngineEventConfiguration](ctx context.Context, builder // build data sources for each event for _, dsConf := range dsConfs { for i, event := range dsConf.events { - dataSourceFactory := builder.BuildDataSourceFactory(event) + dataSourceFactory := pubsub_datasource.NewPubSubDataSourceFactory(builder, event) out, err := plan.NewDataSourceConfiguration( dsConf.dsConf.Configuration.Id+"-"+builder.TypeID()+"-"+strconv.Itoa(i), pubsub_datasource.NewPlannerFactory(ctx, dataSourceFactory), diff --git a/router/pkg/pubsub/pubsub_test.go b/router/pkg/pubsub/pubsub_test.go index daa6966a0b..9cf54bc6fa 100644 --- a/router/pkg/pubsub/pubsub_test.go +++ b/router/pkg/pubsub/pubsub_test.go @@ -62,10 +62,6 @@ func TestBuild_OK(t *testing.T) { mockBuilder.On("TypeID").Return("nats") mockBuilder.On("BuildProvider", natsEventSources[0]).Return(mockPubSubProvider, nil) - mockBuilder.On("BuildDataSourceFactory", dsConf.Configuration.GetCustomEvents().GetNats()[0]).Return( - datasource.NewPubSubDataSourceFactory(mockBuilder, dsConf.Configuration.GetCustomEvents().GetNats()[0]), - nil, - ) // ctx, kafkaBuilder, config.Providers.Kafka, kafkaDsConfsWithEvents // Execute the function @@ -241,10 +237,6 @@ func TestBuild_ShouldNotInitializeProviderIfNotUsed(t *testing.T) { mockBuilder.On("TypeID").Return("nats") mockBuilder.On("BuildProvider", natsEventSources[1]).Return(mockPubSubUsedProvider, nil) - mockBuilder.On("BuildDataSourceFactory", dsConf.Configuration.GetCustomEvents().GetNats()[0]).Return( - datasource.NewPubSubDataSourceFactory(mockBuilder, dsConf.Configuration.GetCustomEvents().GetNats()[0]), - nil, - ) // Execute the function providers, dataSources, err := build(ctx, mockBuilder, natsEventSources, dsConfs) From 0ff66a991247138c6dd14d189a4dcdeb73acfa26 Mon Sep 17 00:00:00 2001 From: Alessandro Pagnin Date: Fri, 6 Jun 2025 12:11:54 +0200 Subject: [PATCH 104/126] chore: renamed PubSubDataSource -> EngineDataSourceFactory, removed PubSubDataSourceFactory --- router/.mockery.yml | 2 +- router/pkg/pubsub/README.md | 16 +- router/pkg/pubsub/datasource/datasource.go | 4 +- .../pubsub/datasource/datasource_factory.go | 17 -- router/pkg/pubsub/datasource/factory.go | 36 ++-- router/pkg/pubsub/datasource/mocks.go | 158 +++++++++--------- router/pkg/pubsub/datasource/planner.go | 46 ++--- router/pkg/pubsub/datasource/provider.go | 4 +- ...source.go => engine_datasource_factory.go} | 14 +- ...t.go => engine_datasource_factory_test.go} | 36 ++-- router/pkg/pubsub/kafka/provider_builder.go | 16 +- .../pkg/pubsub/kafka/provider_builder_test.go | 2 +- ...source.go => engine_datasource_factory.go} | 14 +- ...t.go => engine_datasource_factory_test.go} | 40 ++--- router/pkg/pubsub/nats/provider_builder.go | 24 +-- .../pkg/pubsub/nats/provider_builder_test.go | 2 +- router/pkg/pubsub/pubsub.go | 10 +- router/pkg/pubsub/pubsubtest/pubsubtest.go | 6 +- 18 files changed, 221 insertions(+), 226 deletions(-) delete mode 100644 router/pkg/pubsub/datasource/datasource_factory.go rename router/pkg/pubsub/kafka/{pubsub_datasource.go => engine_datasource_factory.go} (69%) rename router/pkg/pubsub/kafka/{pubsub_datasource_test.go => engine_datasource_factory_test.go} (73%) rename router/pkg/pubsub/nats/{pubsub_datasource.go => engine_datasource_factory.go} (82%) rename router/pkg/pubsub/nats/{pubsub_datasource_test.go => engine_datasource_factory_test.go} (87%) diff --git a/router/.mockery.yml b/router/.mockery.yml index 0862b3337e..97e6e1a774 100644 --- a/router/.mockery.yml +++ b/router/.mockery.yml @@ -15,7 +15,7 @@ packages: interfaces: ProviderLifecycle: ProviderBuilder: - PubSubDataSource: + EngineDataSourceFactory: Provider: github.com/wundergraph/cosmo/router/pkg/pubsub/nats: interfaces: diff --git a/router/pkg/pubsub/README.md b/router/pkg/pubsub/README.md index f8e90d6cb6..b3ea6ae408 100644 --- a/router/pkg/pubsub/README.md +++ b/router/pkg/pubsub/README.md @@ -26,8 +26,8 @@ To implement a new PubSub provider, the following components must be created: - `SubscriptionEventConfiguration` and `PublishEventConfiguration`: Define the data structures used for communication between the adapter and the engine. - `ProviderAdapter`: Implements the logic that interfaces with the provider’s client or SDK. - `SubscriptionDataSource` and `PublishDataSource`: Engine components that leverage the configurations to subscribe and publish data. -- `PubSubDataSource`: Bridges the engine and the provider. -- `PubSubProviderBuilder`: Used by the router to instantiate the provider. +- `EngineDataSourceFactory`: Bridges the engine and the provider. +- `ProviderBuilder`: Used by the router to instantiate the provider. ### `SubscriptionEventConfiguration` and `PublishEventConfiguration` @@ -64,15 +64,15 @@ They are going to use the `SubscriptionEventConfiguration` and `PublishEventConf Implement these in the `engine_datasource.go` file, referencing the [kafka implementation](./kafka/engine_datasource.go) for a working example. -### `PubSubDataSource` +### `EngineDataSourceFactory` -This structure connects the engine (resolve.DataSource and resolve.SubscriptionDataSource) with the provider implementation. It must implement the `PubSubProvider` interface defined in [provider.go](./datasource/provider.go). +This structure connects the engine (resolve.DataSource and resolve.SubscriptionDataSource) with the provider implementation. It must implement the `EngineDataSourceFactory` interface defined in [datasource.go](./datasource/datasource.go). Refer to the [kafka implementation](./kafka/pubsub_datasource.go) for a working example. -### `PubSubProviderBuilder` +### `ProviderBuilder` -The builder is responsible for instantiating the provider within the router. It must implement the [PubSubProviderBuilder](./datasource/provider.go) interface. +The builder is responsible for instantiating the provider within the router. It must implement the [ProviderBuilder](./datasource/provider.go) interface. The interface has two generic types: - `P`, the generic type of the options that the provider builder will need, as defined in the [config.go](../config/config.go) (NatsEventSource, KafkaEventSource, ...) @@ -80,7 +80,7 @@ The interface has two generic types: Key methods: - `BuildProvider`: Initializes the provider with its configuration and receive the provider options (defined by the `P` type) -- `BuildDataSource`: Creates the data source and receive the event configuration (defined by the `E` type) +- `BuildEngineDataSourceFactory`: Creates the data source and receive the event configuration (defined by the `E` type) Refer to the [kafka implementation](./kafka/provider_builder.go) for a working example. @@ -115,7 +115,7 @@ You should add tests as specified in the table below. | Implementation File | Test File | Reference File | |-------------------|-----------|-----------------| | engine_datasource.go | engine_datasource_test.go | [kafka implementation](./kafka/engine_datasource_test.go) | -| pubsub_datasource.go | pubsub_datasource_test.go | [kafka implementation](./kafka/pubsub_datasource_test.go) | +| engine_datasource_factory.go | engine_datasource_factory_test.go | [kafka implementation](./kafka/engine_datasource_factory_test.go) | | provider_builder.go | provider_builder_test.go | [kafka implementation](./kafka/provider_builder_test.go) | | pubsub.go | pubsub_test.go | TestBuildProvidersAndDataSources_Kafka_OK | diff --git a/router/pkg/pubsub/datasource/datasource.go b/router/pkg/pubsub/datasource/datasource.go index a90850e81f..2f08b97074 100644 --- a/router/pkg/pubsub/datasource/datasource.go +++ b/router/pkg/pubsub/datasource/datasource.go @@ -4,7 +4,7 @@ import ( "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/resolve" ) -// PubSubDataSource is the interface that all pubsub data sources must implement. +// EngineDataSourceFactory is the interface that all pubsub data sources must implement. // It serves three main purposes: // 1. Resolving the data source and subscription data source // 2. Generating the appropriate input for these data sources @@ -12,7 +12,7 @@ import ( // // For detailed implementation guidelines, see: // https://github.com/wundergraph/cosmo/blob/main/router/pkg/pubsub/README.md -type PubSubDataSource interface { +type EngineDataSourceFactory interface { // GetFieldName get the field name where the data source is defined GetFieldName() string // ResolveDataSource returns the engine DataSource implementation that contains diff --git a/router/pkg/pubsub/datasource/datasource_factory.go b/router/pkg/pubsub/datasource/datasource_factory.go deleted file mode 100644 index bef3eb7ee1..0000000000 --- a/router/pkg/pubsub/datasource/datasource_factory.go +++ /dev/null @@ -1,17 +0,0 @@ -package datasource - -type PubSubDataSourceFactory[P, E any] struct { - providerBuilder ProviderBuilder[P, E] - event E -} - -func (p *PubSubDataSourceFactory[P, E]) BuildDataSource() (PubSubDataSource, error) { - return p.providerBuilder.BuildDataSource(p.event) -} - -func NewPubSubDataSourceFactory[P, E any](builder ProviderBuilder[P, E], event E) *PubSubDataSourceFactory[P, E] { - return &PubSubDataSourceFactory[P, E]{ - providerBuilder: builder, - event: event, - } -} diff --git a/router/pkg/pubsub/datasource/factory.go b/router/pkg/pubsub/datasource/factory.go index 44640a4478..5221d22dc9 100644 --- a/router/pkg/pubsub/datasource/factory.go +++ b/router/pkg/pubsub/datasource/factory.go @@ -8,28 +8,40 @@ import ( "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/plan" ) -func NewPlannerFactory[P, E any](executionContext context.Context, pubSubDataSourceFactory *PubSubDataSourceFactory[P, E]) *PlannerFactory[P, E] { - return &PlannerFactory[P, E]{ - pubSubDataSourceFactory: pubSubDataSourceFactory, - executionContext: executionContext, +type PlannerConfig[PB ProviderBuilder[P, E], P any, E any] struct { + ProviderBuilder PB + Event E +} + +func NewPlannerConfig[PB ProviderBuilder[P, E], P any, E any](providerBuilder PB, event E) *PlannerConfig[PB, P, E] { + return &PlannerConfig[PB, P, E]{ + ProviderBuilder: providerBuilder, + Event: event, + } +} + +func NewPlannerFactory[PB ProviderBuilder[P, E], P any, E any](ctx context.Context, config *PlannerConfig[PB, P, E]) *PlannerFactory[PB, P, E] { + return &PlannerFactory[PB, P, E]{ + config: config, + executionContext: ctx, } } -type PlannerFactory[P, E any] struct { - pubSubDataSourceFactory *PubSubDataSourceFactory[P, E] - executionContext context.Context +type PlannerFactory[PB ProviderBuilder[P, E], P any, E any] struct { + config *PlannerConfig[PB, P, E] + executionContext context.Context } -func (f *PlannerFactory[P, E]) Planner(_ abstractlogger.Logger) plan.DataSourcePlanner[*PubSubDataSourceFactory[P, E]] { - return &Planner[P, E]{ - pubSubDataSourceFactory: f.pubSubDataSourceFactory, +func (f *PlannerFactory[PB, P, E]) Planner(_ abstractlogger.Logger) plan.DataSourcePlanner[*PlannerConfig[PB, P, E]] { + return &Planner[PB, P, E]{ + config: f.config, } } -func (f *PlannerFactory[P, E]) Context() context.Context { +func (f *PlannerFactory[PB, P, E]) Context() context.Context { return f.executionContext } -func (f *PlannerFactory[P, E]) UpstreamSchema(dataSourceConfig plan.DataSourceConfiguration[*PubSubDataSourceFactory[P, E]]) (*ast.Document, bool) { +func (f *PlannerFactory[PB, P, E]) UpstreamSchema(dataSourceConfig plan.DataSourceConfiguration[*PlannerConfig[PB, P, E]]) (*ast.Document, bool) { return nil, false } diff --git a/router/pkg/pubsub/datasource/mocks.go b/router/pkg/pubsub/datasource/mocks.go index 78573facfa..067da9c86c 100644 --- a/router/pkg/pubsub/datasource/mocks.go +++ b/router/pkg/pubsub/datasource/mocks.go @@ -11,13 +11,13 @@ import ( "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/resolve" ) -// NewMockPubSubDataSource creates a new instance of MockPubSubDataSource. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations. +// NewMockEngineDataSourceFactory creates a new instance of MockEngineDataSourceFactory. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations. // The first argument is typically a *testing.T value. -func NewMockPubSubDataSource(t interface { +func NewMockEngineDataSourceFactory(t interface { mock.TestingT Cleanup(func()) -}) *MockPubSubDataSource { - mock := &MockPubSubDataSource{} +}) *MockEngineDataSourceFactory { + mock := &MockEngineDataSourceFactory{} mock.Mock.Test(t) t.Cleanup(func() { mock.AssertExpectations(t) }) @@ -25,21 +25,21 @@ func NewMockPubSubDataSource(t interface { return mock } -// MockPubSubDataSource is an autogenerated mock type for the PubSubDataSource type -type MockPubSubDataSource struct { +// MockEngineDataSourceFactory is an autogenerated mock type for the EngineDataSourceFactory type +type MockEngineDataSourceFactory struct { mock.Mock } -type MockPubSubDataSource_Expecter struct { +type MockEngineDataSourceFactory_Expecter struct { mock *mock.Mock } -func (_m *MockPubSubDataSource) EXPECT() *MockPubSubDataSource_Expecter { - return &MockPubSubDataSource_Expecter{mock: &_m.Mock} +func (_m *MockEngineDataSourceFactory) EXPECT() *MockEngineDataSourceFactory_Expecter { + return &MockEngineDataSourceFactory_Expecter{mock: &_m.Mock} } -// GetFieldName provides a mock function for the type MockPubSubDataSource -func (_mock *MockPubSubDataSource) GetFieldName() string { +// GetFieldName provides a mock function for the type MockEngineDataSourceFactory +func (_mock *MockEngineDataSourceFactory) GetFieldName() string { ret := _mock.Called() if len(ret) == 0 { @@ -55,35 +55,35 @@ func (_mock *MockPubSubDataSource) GetFieldName() string { return r0 } -// MockPubSubDataSource_GetFieldName_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'GetFieldName' -type MockPubSubDataSource_GetFieldName_Call struct { +// MockEngineDataSourceFactory_GetFieldName_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'GetFieldName' +type MockEngineDataSourceFactory_GetFieldName_Call struct { *mock.Call } // GetFieldName is a helper method to define mock.On call -func (_e *MockPubSubDataSource_Expecter) GetFieldName() *MockPubSubDataSource_GetFieldName_Call { - return &MockPubSubDataSource_GetFieldName_Call{Call: _e.mock.On("GetFieldName")} +func (_e *MockEngineDataSourceFactory_Expecter) GetFieldName() *MockEngineDataSourceFactory_GetFieldName_Call { + return &MockEngineDataSourceFactory_GetFieldName_Call{Call: _e.mock.On("GetFieldName")} } -func (_c *MockPubSubDataSource_GetFieldName_Call) Run(run func()) *MockPubSubDataSource_GetFieldName_Call { +func (_c *MockEngineDataSourceFactory_GetFieldName_Call) Run(run func()) *MockEngineDataSourceFactory_GetFieldName_Call { _c.Call.Run(func(args mock.Arguments) { run() }) return _c } -func (_c *MockPubSubDataSource_GetFieldName_Call) Return(s string) *MockPubSubDataSource_GetFieldName_Call { +func (_c *MockEngineDataSourceFactory_GetFieldName_Call) Return(s string) *MockEngineDataSourceFactory_GetFieldName_Call { _c.Call.Return(s) return _c } -func (_c *MockPubSubDataSource_GetFieldName_Call) RunAndReturn(run func() string) *MockPubSubDataSource_GetFieldName_Call { +func (_c *MockEngineDataSourceFactory_GetFieldName_Call) RunAndReturn(run func() string) *MockEngineDataSourceFactory_GetFieldName_Call { _c.Call.Return(run) return _c } -// ResolveDataSource provides a mock function for the type MockPubSubDataSource -func (_mock *MockPubSubDataSource) ResolveDataSource() (resolve.DataSource, error) { +// ResolveDataSource provides a mock function for the type MockEngineDataSourceFactory +func (_mock *MockEngineDataSourceFactory) ResolveDataSource() (resolve.DataSource, error) { ret := _mock.Called() if len(ret) == 0 { @@ -110,35 +110,35 @@ func (_mock *MockPubSubDataSource) ResolveDataSource() (resolve.DataSource, erro return r0, r1 } -// MockPubSubDataSource_ResolveDataSource_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ResolveDataSource' -type MockPubSubDataSource_ResolveDataSource_Call struct { +// MockEngineDataSourceFactory_ResolveDataSource_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ResolveDataSource' +type MockEngineDataSourceFactory_ResolveDataSource_Call struct { *mock.Call } // ResolveDataSource is a helper method to define mock.On call -func (_e *MockPubSubDataSource_Expecter) ResolveDataSource() *MockPubSubDataSource_ResolveDataSource_Call { - return &MockPubSubDataSource_ResolveDataSource_Call{Call: _e.mock.On("ResolveDataSource")} +func (_e *MockEngineDataSourceFactory_Expecter) ResolveDataSource() *MockEngineDataSourceFactory_ResolveDataSource_Call { + return &MockEngineDataSourceFactory_ResolveDataSource_Call{Call: _e.mock.On("ResolveDataSource")} } -func (_c *MockPubSubDataSource_ResolveDataSource_Call) Run(run func()) *MockPubSubDataSource_ResolveDataSource_Call { +func (_c *MockEngineDataSourceFactory_ResolveDataSource_Call) Run(run func()) *MockEngineDataSourceFactory_ResolveDataSource_Call { _c.Call.Run(func(args mock.Arguments) { run() }) return _c } -func (_c *MockPubSubDataSource_ResolveDataSource_Call) Return(dataSource resolve.DataSource, err error) *MockPubSubDataSource_ResolveDataSource_Call { +func (_c *MockEngineDataSourceFactory_ResolveDataSource_Call) Return(dataSource resolve.DataSource, err error) *MockEngineDataSourceFactory_ResolveDataSource_Call { _c.Call.Return(dataSource, err) return _c } -func (_c *MockPubSubDataSource_ResolveDataSource_Call) RunAndReturn(run func() (resolve.DataSource, error)) *MockPubSubDataSource_ResolveDataSource_Call { +func (_c *MockEngineDataSourceFactory_ResolveDataSource_Call) RunAndReturn(run func() (resolve.DataSource, error)) *MockEngineDataSourceFactory_ResolveDataSource_Call { _c.Call.Return(run) return _c } -// ResolveDataSourceInput provides a mock function for the type MockPubSubDataSource -func (_mock *MockPubSubDataSource) ResolveDataSourceInput(event []byte) (string, error) { +// ResolveDataSourceInput provides a mock function for the type MockEngineDataSourceFactory +func (_mock *MockEngineDataSourceFactory) ResolveDataSourceInput(event []byte) (string, error) { ret := _mock.Called(event) if len(ret) == 0 { @@ -163,18 +163,18 @@ func (_mock *MockPubSubDataSource) ResolveDataSourceInput(event []byte) (string, return r0, r1 } -// MockPubSubDataSource_ResolveDataSourceInput_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ResolveDataSourceInput' -type MockPubSubDataSource_ResolveDataSourceInput_Call struct { +// MockEngineDataSourceFactory_ResolveDataSourceInput_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ResolveDataSourceInput' +type MockEngineDataSourceFactory_ResolveDataSourceInput_Call struct { *mock.Call } // ResolveDataSourceInput is a helper method to define mock.On call // - event []byte -func (_e *MockPubSubDataSource_Expecter) ResolveDataSourceInput(event interface{}) *MockPubSubDataSource_ResolveDataSourceInput_Call { - return &MockPubSubDataSource_ResolveDataSourceInput_Call{Call: _e.mock.On("ResolveDataSourceInput", event)} +func (_e *MockEngineDataSourceFactory_Expecter) ResolveDataSourceInput(event interface{}) *MockEngineDataSourceFactory_ResolveDataSourceInput_Call { + return &MockEngineDataSourceFactory_ResolveDataSourceInput_Call{Call: _e.mock.On("ResolveDataSourceInput", event)} } -func (_c *MockPubSubDataSource_ResolveDataSourceInput_Call) Run(run func(event []byte)) *MockPubSubDataSource_ResolveDataSourceInput_Call { +func (_c *MockEngineDataSourceFactory_ResolveDataSourceInput_Call) Run(run func(event []byte)) *MockEngineDataSourceFactory_ResolveDataSourceInput_Call { _c.Call.Run(func(args mock.Arguments) { var arg0 []byte if args[0] != nil { @@ -187,18 +187,18 @@ func (_c *MockPubSubDataSource_ResolveDataSourceInput_Call) Run(run func(event [ return _c } -func (_c *MockPubSubDataSource_ResolveDataSourceInput_Call) Return(s string, err error) *MockPubSubDataSource_ResolveDataSourceInput_Call { +func (_c *MockEngineDataSourceFactory_ResolveDataSourceInput_Call) Return(s string, err error) *MockEngineDataSourceFactory_ResolveDataSourceInput_Call { _c.Call.Return(s, err) return _c } -func (_c *MockPubSubDataSource_ResolveDataSourceInput_Call) RunAndReturn(run func(event []byte) (string, error)) *MockPubSubDataSource_ResolveDataSourceInput_Call { +func (_c *MockEngineDataSourceFactory_ResolveDataSourceInput_Call) RunAndReturn(run func(event []byte) (string, error)) *MockEngineDataSourceFactory_ResolveDataSourceInput_Call { _c.Call.Return(run) return _c } -// ResolveDataSourceSubscription provides a mock function for the type MockPubSubDataSource -func (_mock *MockPubSubDataSource) ResolveDataSourceSubscription() (resolve.SubscriptionDataSource, error) { +// ResolveDataSourceSubscription provides a mock function for the type MockEngineDataSourceFactory +func (_mock *MockEngineDataSourceFactory) ResolveDataSourceSubscription() (resolve.SubscriptionDataSource, error) { ret := _mock.Called() if len(ret) == 0 { @@ -225,35 +225,35 @@ func (_mock *MockPubSubDataSource) ResolveDataSourceSubscription() (resolve.Subs return r0, r1 } -// MockPubSubDataSource_ResolveDataSourceSubscription_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ResolveDataSourceSubscription' -type MockPubSubDataSource_ResolveDataSourceSubscription_Call struct { +// MockEngineDataSourceFactory_ResolveDataSourceSubscription_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ResolveDataSourceSubscription' +type MockEngineDataSourceFactory_ResolveDataSourceSubscription_Call struct { *mock.Call } // ResolveDataSourceSubscription is a helper method to define mock.On call -func (_e *MockPubSubDataSource_Expecter) ResolveDataSourceSubscription() *MockPubSubDataSource_ResolveDataSourceSubscription_Call { - return &MockPubSubDataSource_ResolveDataSourceSubscription_Call{Call: _e.mock.On("ResolveDataSourceSubscription")} +func (_e *MockEngineDataSourceFactory_Expecter) ResolveDataSourceSubscription() *MockEngineDataSourceFactory_ResolveDataSourceSubscription_Call { + return &MockEngineDataSourceFactory_ResolveDataSourceSubscription_Call{Call: _e.mock.On("ResolveDataSourceSubscription")} } -func (_c *MockPubSubDataSource_ResolveDataSourceSubscription_Call) Run(run func()) *MockPubSubDataSource_ResolveDataSourceSubscription_Call { +func (_c *MockEngineDataSourceFactory_ResolveDataSourceSubscription_Call) Run(run func()) *MockEngineDataSourceFactory_ResolveDataSourceSubscription_Call { _c.Call.Run(func(args mock.Arguments) { run() }) return _c } -func (_c *MockPubSubDataSource_ResolveDataSourceSubscription_Call) Return(subscriptionDataSource resolve.SubscriptionDataSource, err error) *MockPubSubDataSource_ResolveDataSourceSubscription_Call { +func (_c *MockEngineDataSourceFactory_ResolveDataSourceSubscription_Call) Return(subscriptionDataSource resolve.SubscriptionDataSource, err error) *MockEngineDataSourceFactory_ResolveDataSourceSubscription_Call { _c.Call.Return(subscriptionDataSource, err) return _c } -func (_c *MockPubSubDataSource_ResolveDataSourceSubscription_Call) RunAndReturn(run func() (resolve.SubscriptionDataSource, error)) *MockPubSubDataSource_ResolveDataSourceSubscription_Call { +func (_c *MockEngineDataSourceFactory_ResolveDataSourceSubscription_Call) RunAndReturn(run func() (resolve.SubscriptionDataSource, error)) *MockEngineDataSourceFactory_ResolveDataSourceSubscription_Call { _c.Call.Return(run) return _c } -// ResolveDataSourceSubscriptionInput provides a mock function for the type MockPubSubDataSource -func (_mock *MockPubSubDataSource) ResolveDataSourceSubscriptionInput() (string, error) { +// ResolveDataSourceSubscriptionInput provides a mock function for the type MockEngineDataSourceFactory +func (_mock *MockEngineDataSourceFactory) ResolveDataSourceSubscriptionInput() (string, error) { ret := _mock.Called() if len(ret) == 0 { @@ -278,35 +278,35 @@ func (_mock *MockPubSubDataSource) ResolveDataSourceSubscriptionInput() (string, return r0, r1 } -// MockPubSubDataSource_ResolveDataSourceSubscriptionInput_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ResolveDataSourceSubscriptionInput' -type MockPubSubDataSource_ResolveDataSourceSubscriptionInput_Call struct { +// MockEngineDataSourceFactory_ResolveDataSourceSubscriptionInput_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ResolveDataSourceSubscriptionInput' +type MockEngineDataSourceFactory_ResolveDataSourceSubscriptionInput_Call struct { *mock.Call } // ResolveDataSourceSubscriptionInput is a helper method to define mock.On call -func (_e *MockPubSubDataSource_Expecter) ResolveDataSourceSubscriptionInput() *MockPubSubDataSource_ResolveDataSourceSubscriptionInput_Call { - return &MockPubSubDataSource_ResolveDataSourceSubscriptionInput_Call{Call: _e.mock.On("ResolveDataSourceSubscriptionInput")} +func (_e *MockEngineDataSourceFactory_Expecter) ResolveDataSourceSubscriptionInput() *MockEngineDataSourceFactory_ResolveDataSourceSubscriptionInput_Call { + return &MockEngineDataSourceFactory_ResolveDataSourceSubscriptionInput_Call{Call: _e.mock.On("ResolveDataSourceSubscriptionInput")} } -func (_c *MockPubSubDataSource_ResolveDataSourceSubscriptionInput_Call) Run(run func()) *MockPubSubDataSource_ResolveDataSourceSubscriptionInput_Call { +func (_c *MockEngineDataSourceFactory_ResolveDataSourceSubscriptionInput_Call) Run(run func()) *MockEngineDataSourceFactory_ResolveDataSourceSubscriptionInput_Call { _c.Call.Run(func(args mock.Arguments) { run() }) return _c } -func (_c *MockPubSubDataSource_ResolveDataSourceSubscriptionInput_Call) Return(s string, err error) *MockPubSubDataSource_ResolveDataSourceSubscriptionInput_Call { +func (_c *MockEngineDataSourceFactory_ResolveDataSourceSubscriptionInput_Call) Return(s string, err error) *MockEngineDataSourceFactory_ResolveDataSourceSubscriptionInput_Call { _c.Call.Return(s, err) return _c } -func (_c *MockPubSubDataSource_ResolveDataSourceSubscriptionInput_Call) RunAndReturn(run func() (string, error)) *MockPubSubDataSource_ResolveDataSourceSubscriptionInput_Call { +func (_c *MockEngineDataSourceFactory_ResolveDataSourceSubscriptionInput_Call) RunAndReturn(run func() (string, error)) *MockEngineDataSourceFactory_ResolveDataSourceSubscriptionInput_Call { _c.Call.Return(run) return _c } -// TransformEventData provides a mock function for the type MockPubSubDataSource -func (_mock *MockPubSubDataSource) TransformEventData(extractFn ArgumentTemplateCallback) error { +// TransformEventData provides a mock function for the type MockEngineDataSourceFactory +func (_mock *MockEngineDataSourceFactory) TransformEventData(extractFn ArgumentTemplateCallback) error { ret := _mock.Called(extractFn) if len(ret) == 0 { @@ -322,18 +322,18 @@ func (_mock *MockPubSubDataSource) TransformEventData(extractFn ArgumentTemplate return r0 } -// MockPubSubDataSource_TransformEventData_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'TransformEventData' -type MockPubSubDataSource_TransformEventData_Call struct { +// MockEngineDataSourceFactory_TransformEventData_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'TransformEventData' +type MockEngineDataSourceFactory_TransformEventData_Call struct { *mock.Call } // TransformEventData is a helper method to define mock.On call // - extractFn ArgumentTemplateCallback -func (_e *MockPubSubDataSource_Expecter) TransformEventData(extractFn interface{}) *MockPubSubDataSource_TransformEventData_Call { - return &MockPubSubDataSource_TransformEventData_Call{Call: _e.mock.On("TransformEventData", extractFn)} +func (_e *MockEngineDataSourceFactory_Expecter) TransformEventData(extractFn interface{}) *MockEngineDataSourceFactory_TransformEventData_Call { + return &MockEngineDataSourceFactory_TransformEventData_Call{Call: _e.mock.On("TransformEventData", extractFn)} } -func (_c *MockPubSubDataSource_TransformEventData_Call) Run(run func(extractFn ArgumentTemplateCallback)) *MockPubSubDataSource_TransformEventData_Call { +func (_c *MockEngineDataSourceFactory_TransformEventData_Call) Run(run func(extractFn ArgumentTemplateCallback)) *MockEngineDataSourceFactory_TransformEventData_Call { _c.Call.Run(func(args mock.Arguments) { var arg0 ArgumentTemplateCallback if args[0] != nil { @@ -346,12 +346,12 @@ func (_c *MockPubSubDataSource_TransformEventData_Call) Run(run func(extractFn A return _c } -func (_c *MockPubSubDataSource_TransformEventData_Call) Return(err error) *MockPubSubDataSource_TransformEventData_Call { +func (_c *MockEngineDataSourceFactory_TransformEventData_Call) Return(err error) *MockEngineDataSourceFactory_TransformEventData_Call { _c.Call.Return(err) return _c } -func (_c *MockPubSubDataSource_TransformEventData_Call) RunAndReturn(run func(extractFn ArgumentTemplateCallback) error) *MockPubSubDataSource_TransformEventData_Call { +func (_c *MockEngineDataSourceFactory_TransformEventData_Call) RunAndReturn(run func(extractFn ArgumentTemplateCallback) error) *MockEngineDataSourceFactory_TransformEventData_Call { _c.Call.Return(run) return _c } @@ -729,24 +729,24 @@ func (_m *MockProviderBuilder[P, E]) EXPECT() *MockProviderBuilder_Expecter[P, E return &MockProviderBuilder_Expecter[P, E]{mock: &_m.Mock} } -// BuildDataSource provides a mock function for the type MockProviderBuilder -func (_mock *MockProviderBuilder[P, E]) BuildDataSource(data E) (PubSubDataSource, error) { +// BuildEngineDataSourceFactory provides a mock function for the type MockProviderBuilder +func (_mock *MockProviderBuilder[P, E]) BuildEngineDataSourceFactory(data E) (EngineDataSourceFactory, error) { ret := _mock.Called(data) if len(ret) == 0 { - panic("no return value specified for BuildDataSource") + panic("no return value specified for BuildEngineDataSourceFactory") } - var r0 PubSubDataSource + var r0 EngineDataSourceFactory var r1 error - if returnFunc, ok := ret.Get(0).(func(E) (PubSubDataSource, error)); ok { + if returnFunc, ok := ret.Get(0).(func(E) (EngineDataSourceFactory, error)); ok { return returnFunc(data) } - if returnFunc, ok := ret.Get(0).(func(E) PubSubDataSource); ok { + if returnFunc, ok := ret.Get(0).(func(E) EngineDataSourceFactory); ok { r0 = returnFunc(data) } else { if ret.Get(0) != nil { - r0 = ret.Get(0).(PubSubDataSource) + r0 = ret.Get(0).(EngineDataSourceFactory) } } if returnFunc, ok := ret.Get(1).(func(E) error); ok { @@ -757,18 +757,18 @@ func (_mock *MockProviderBuilder[P, E]) BuildDataSource(data E) (PubSubDataSourc return r0, r1 } -// MockProviderBuilder_BuildDataSource_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'BuildDataSource' -type MockProviderBuilder_BuildDataSource_Call[P any, E any] struct { +// MockProviderBuilder_BuildEngineDataSourceFactory_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'BuildEngineDataSourceFactory' +type MockProviderBuilder_BuildEngineDataSourceFactory_Call[P any, E any] struct { *mock.Call } -// BuildDataSource is a helper method to define mock.On call +// BuildEngineDataSourceFactory is a helper method to define mock.On call // - data E -func (_e *MockProviderBuilder_Expecter[P, E]) BuildDataSource(data interface{}) *MockProviderBuilder_BuildDataSource_Call[P, E] { - return &MockProviderBuilder_BuildDataSource_Call[P, E]{Call: _e.mock.On("BuildDataSource", data)} +func (_e *MockProviderBuilder_Expecter[P, E]) BuildEngineDataSourceFactory(data interface{}) *MockProviderBuilder_BuildEngineDataSourceFactory_Call[P, E] { + return &MockProviderBuilder_BuildEngineDataSourceFactory_Call[P, E]{Call: _e.mock.On("BuildEngineDataSourceFactory", data)} } -func (_c *MockProviderBuilder_BuildDataSource_Call[P, E]) Run(run func(data E)) *MockProviderBuilder_BuildDataSource_Call[P, E] { +func (_c *MockProviderBuilder_BuildEngineDataSourceFactory_Call[P, E]) Run(run func(data E)) *MockProviderBuilder_BuildEngineDataSourceFactory_Call[P, E] { _c.Call.Run(func(args mock.Arguments) { var arg0 E if args[0] != nil { @@ -781,12 +781,12 @@ func (_c *MockProviderBuilder_BuildDataSource_Call[P, E]) Run(run func(data E)) return _c } -func (_c *MockProviderBuilder_BuildDataSource_Call[P, E]) Return(pubSubDataSource PubSubDataSource, err error) *MockProviderBuilder_BuildDataSource_Call[P, E] { - _c.Call.Return(pubSubDataSource, err) +func (_c *MockProviderBuilder_BuildEngineDataSourceFactory_Call[P, E]) Return(engineDataSourceFactory EngineDataSourceFactory, err error) *MockProviderBuilder_BuildEngineDataSourceFactory_Call[P, E] { + _c.Call.Return(engineDataSourceFactory, err) return _c } -func (_c *MockProviderBuilder_BuildDataSource_Call[P, E]) RunAndReturn(run func(data E) (PubSubDataSource, error)) *MockProviderBuilder_BuildDataSource_Call[P, E] { +func (_c *MockProviderBuilder_BuildEngineDataSourceFactory_Call[P, E]) RunAndReturn(run func(data E) (EngineDataSourceFactory, error)) *MockProviderBuilder_BuildEngineDataSourceFactory_Call[P, E] { _c.Call.Return(run) return _c } diff --git a/router/pkg/pubsub/datasource/planner.go b/router/pkg/pubsub/datasource/planner.go index 786385df41..cde11b6d42 100644 --- a/router/pkg/pubsub/datasource/planner.go +++ b/router/pkg/pubsub/datasource/planner.go @@ -11,51 +11,51 @@ import ( "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/resolve" ) -type Planner[P, E any] struct { - id int - pubSubDataSourceFactory *PubSubDataSourceFactory[P, E] - rootFieldRef int - variables resolve.Variables - visitor *plan.Visitor - extractFn func(tpl string) (string, error) +type Planner[PB ProviderBuilder[P, E], P any, E any] struct { + id int + config *PlannerConfig[PB, P, E] + rootFieldRef int + variables resolve.Variables + visitor *plan.Visitor + extractFn func(tpl string) (string, error) } -func (p *Planner[P, E]) SetID(id int) { +func (p *Planner[PB, P, E]) SetID(id int) { p.id = id } -func (p *Planner[P, E]) ID() (id int) { +func (p *Planner[PB, P, E]) ID() (id int) { return p.id } -func (p *Planner[P, E]) DownstreamResponseFieldAlias(downstreamFieldRef int) (alias string, exists bool) { +func (p *Planner[PB, P, E]) DownstreamResponseFieldAlias(downstreamFieldRef int) (alias string, exists bool) { // skip, not required return } -func (p *Planner[P, E]) DataSourcePlanningBehavior() plan.DataSourcePlanningBehavior { +func (p *Planner[PB, P, E]) DataSourcePlanningBehavior() plan.DataSourcePlanningBehavior { return plan.DataSourcePlanningBehavior{ MergeAliasedRootNodes: false, OverrideFieldPathFromAlias: false, } } -func (p *Planner[P, E]) Register(visitor *plan.Visitor, configuration plan.DataSourceConfiguration[*PubSubDataSourceFactory[P, E]], _ plan.DataSourcePlannerConfiguration) error { +func (p *Planner[PB, P, E]) Register(visitor *plan.Visitor, configuration plan.DataSourceConfiguration[*PlannerConfig[PB, P, E]], _ plan.DataSourcePlannerConfiguration) error { p.visitor = visitor visitor.Walker.RegisterEnterFieldVisitor(p) visitor.Walker.RegisterEnterDocumentVisitor(p) - p.pubSubDataSourceFactory = configuration.CustomConfiguration() + p.config = configuration.CustomConfiguration() return nil } -func (p *Planner[P, E]) ConfigureFetch() resolve.FetchConfiguration { - if p.pubSubDataSourceFactory == nil { +func (p *Planner[PB, P, E]) ConfigureFetch() resolve.FetchConfiguration { + if p.config == nil { p.visitor.Walker.StopWithInternalErr(fmt.Errorf("data source not set")) return resolve.FetchConfiguration{} } - pubSubDataSource, err := p.pubSubDataSourceFactory.BuildDataSource() + pubSubDataSource, err := p.config.ProviderBuilder.BuildEngineDataSourceFactory(p.config.Event) if err != nil { p.visitor.Walker.StopWithInternalErr(fmt.Errorf("failed to build data source: %w", err)) return resolve.FetchConfiguration{} @@ -94,13 +94,13 @@ func (p *Planner[P, E]) ConfigureFetch() resolve.FetchConfiguration { } } -func (p *Planner[P, E]) ConfigureSubscription() plan.SubscriptionConfiguration { - if p.pubSubDataSourceFactory == nil { +func (p *Planner[PB, P, E]) ConfigureSubscription() plan.SubscriptionConfiguration { + if p.config == nil { p.visitor.Walker.StopWithInternalErr(fmt.Errorf("data source not set")) return plan.SubscriptionConfiguration{} } - pubSubDataSource, err := p.pubSubDataSourceFactory.BuildDataSource() + pubSubDataSource, err := p.config.ProviderBuilder.BuildEngineDataSourceFactory(p.config.Event) if err != nil { p.visitor.Walker.StopWithInternalErr(fmt.Errorf("failed to get resolve data source subscription: %w", err)) return plan.SubscriptionConfiguration{} @@ -133,7 +133,7 @@ func (p *Planner[P, E]) ConfigureSubscription() plan.SubscriptionConfiguration { } } -func (p *Planner[P, E]) addContextVariableByArgumentRef(argumentRef int, operationTypeRef int, argumentPath []string) (string, error) { +func (p *Planner[PB, P, E]) addContextVariableByArgumentRef(argumentRef int, operationTypeRef int, argumentPath []string) (string, error) { variablePath, err := p.visitor.Operation.VariablePathByArgumentRefAndArgumentPath(argumentRef, argumentPath, operationTypeRef) if err != nil { return "", err @@ -149,7 +149,7 @@ func (p *Planner[P, E]) addContextVariableByArgumentRef(argumentRef int, operati return variablePlaceHolder, nil } -func (p *Planner[P, E]) extractArgumentTemplate(fieldRef int, operationDefinitionRef int, typeDefinitionRef int, template string) (string, error) { +func (p *Planner[PB, P, E]) extractArgumentTemplate(fieldRef int, operationDefinitionRef int, typeDefinitionRef int, template string) (string, error) { matches := argument_templates.ArgumentTemplateRegex.FindAllStringSubmatch(template, -1) // If no argument templates are defined, there are only static values if len(matches) < 1 { @@ -188,11 +188,11 @@ func (p *Planner[P, E]) extractArgumentTemplate(fieldRef int, operationDefinitio return templateWithVariableTemplateReplacements, nil } -func (p *Planner[P, E]) EnterDocument(_, _ *ast.Document) { +func (p *Planner[PB, P, E]) EnterDocument(_, _ *ast.Document) { p.rootFieldRef = -1 } -func (p *Planner[P, E]) EnterField(ref int) { +func (p *Planner[PB, P, E]) EnterField(ref int) { if p.rootFieldRef != -1 { // This is a nested field; nothing needs to be done return diff --git a/router/pkg/pubsub/datasource/provider.go b/router/pkg/pubsub/datasource/provider.go index fd4ce13d02..f90446a712 100644 --- a/router/pkg/pubsub/datasource/provider.go +++ b/router/pkg/pubsub/datasource/provider.go @@ -28,6 +28,6 @@ type ProviderBuilder[P, E any] interface { TypeID() string // BuildProvider Build the provider and the adapter BuildProvider(options P) (Provider, error) - // BuildDataSource Build the data source for the given provider and event configuration - BuildDataSource(data E) (PubSubDataSource, error) + // BuildEngineDataSourceFactory Build the data source for the given provider and event configuration + BuildEngineDataSourceFactory(data E) (EngineDataSourceFactory, error) } diff --git a/router/pkg/pubsub/kafka/pubsub_datasource.go b/router/pkg/pubsub/kafka/engine_datasource_factory.go similarity index 69% rename from router/pkg/pubsub/kafka/pubsub_datasource.go rename to router/pkg/pubsub/kafka/engine_datasource_factory.go index 6b44dfc256..d360f02f26 100644 --- a/router/pkg/pubsub/kafka/pubsub_datasource.go +++ b/router/pkg/pubsub/kafka/engine_datasource_factory.go @@ -15,7 +15,7 @@ const ( EventTypeSubscribe ) -type PubSubDataSource struct { +type EngineDataSourceFactory struct { fieldName string eventType EventType topics []string @@ -24,11 +24,11 @@ type PubSubDataSource struct { KafkaAdapter Adapter } -func (c *PubSubDataSource) GetFieldName() string { +func (c *EngineDataSourceFactory) GetFieldName() string { return c.fieldName } -func (c *PubSubDataSource) ResolveDataSource() (resolve.DataSource, error) { +func (c *EngineDataSourceFactory) ResolveDataSource() (resolve.DataSource, error) { var dataSource resolve.DataSource switch c.eventType { @@ -43,7 +43,7 @@ func (c *PubSubDataSource) ResolveDataSource() (resolve.DataSource, error) { return dataSource, nil } -func (c *PubSubDataSource) ResolveDataSourceInput(eventData []byte) (string, error) { +func (c *EngineDataSourceFactory) ResolveDataSourceInput(eventData []byte) (string, error) { if len(c.topics) != 1 { return "", fmt.Errorf("publish events should define one topic but received %d", len(c.topics)) } @@ -57,13 +57,13 @@ func (c *PubSubDataSource) ResolveDataSourceInput(eventData []byte) (string, err return evtCfg.MarshalJSONTemplate(), nil } -func (c *PubSubDataSource) ResolveDataSourceSubscription() (resolve.SubscriptionDataSource, error) { +func (c *EngineDataSourceFactory) ResolveDataSourceSubscription() (resolve.SubscriptionDataSource, error) { return &SubscriptionDataSource{ pubSub: c.KafkaAdapter, }, nil } -func (c *PubSubDataSource) ResolveDataSourceSubscriptionInput() (string, error) { +func (c *EngineDataSourceFactory) ResolveDataSourceSubscriptionInput() (string, error) { evtCfg := SubscriptionEventConfiguration{ ProviderID: c.providerId, Topics: c.topics, @@ -75,6 +75,6 @@ func (c *PubSubDataSource) ResolveDataSourceSubscriptionInput() (string, error) return string(object), nil } -func (c *PubSubDataSource) TransformEventData(extractFn datasource.ArgumentTemplateCallback) error { +func (c *EngineDataSourceFactory) TransformEventData(extractFn datasource.ArgumentTemplateCallback) error { return nil } diff --git a/router/pkg/pubsub/kafka/pubsub_datasource_test.go b/router/pkg/pubsub/kafka/engine_datasource_factory_test.go similarity index 73% rename from router/pkg/pubsub/kafka/pubsub_datasource_test.go rename to router/pkg/pubsub/kafka/engine_datasource_factory_test.go index 061d42fac2..254359a4bc 100644 --- a/router/pkg/pubsub/kafka/pubsub_datasource_test.go +++ b/router/pkg/pubsub/kafka/engine_datasource_factory_test.go @@ -11,10 +11,10 @@ import ( "github.com/wundergraph/cosmo/router/pkg/pubsub/pubsubtest" ) -func TestKafkaPubSubDataSource(t *testing.T) { +func TestKafkaEngineDataSourceFactory(t *testing.T) { // Create the data source to test with a real adapter adapter := &ProviderAdapter{} - pubsub := &PubSubDataSource{ + pubsub := &EngineDataSourceFactory{ KafkaAdapter: adapter, fieldName: "testField", eventType: EventTypePublish, @@ -23,11 +23,11 @@ func TestKafkaPubSubDataSource(t *testing.T) { } // Run the standard test suite - pubsubtest.VerifyPubSubDataSourceImplementation(t, pubsub) + pubsubtest.VerifyEngineDataSourceFactoryImplementation(t, pubsub) } -// TestPubSubDataSourceWithMockAdapter tests the PubSubDataSource with a mocked adapter -func TestPubSubDataSourceWithMockAdapter(t *testing.T) { +// TestEngineDataSourceFactoryWithMockAdapter tests the EngineDataSourceFactory with a mocked adapter +func TestEngineDataSourceFactoryWithMockAdapter(t *testing.T) { // Create mock adapter mockAdapter := NewMockAdapter(t) @@ -37,7 +37,7 @@ func TestPubSubDataSourceWithMockAdapter(t *testing.T) { })).Return(nil) // Create the data source with mock adapter - pubsub := &PubSubDataSource{ + pubsub := &EngineDataSourceFactory{ KafkaAdapter: mockAdapter, fieldName: "testField", eventType: EventTypePublish, @@ -60,13 +60,13 @@ func TestPubSubDataSourceWithMockAdapter(t *testing.T) { require.Equal(t, `{"success": true}`, out.String()) } -// TestPubSubDataSource_GetResolveDataSource_WrongType tests the PubSubDataSource with a mocked adapter -func TestPubSubDataSource_GetResolveDataSource_WrongType(t *testing.T) { +// TestEngineDataSourceFactory_GetResolveDataSource_WrongType tests the EngineDataSourceFactory with a mocked adapter +func TestEngineDataSourceFactory_GetResolveDataSource_WrongType(t *testing.T) { // Create mock adapter mockAdapter := NewMockAdapter(t) // Create the data source with mock adapter - pubsub := &PubSubDataSource{ + pubsub := &EngineDataSourceFactory{ KafkaAdapter: mockAdapter, fieldName: "testField", eventType: EventTypeSubscribe, @@ -80,10 +80,10 @@ func TestPubSubDataSource_GetResolveDataSource_WrongType(t *testing.T) { require.Nil(t, ds) } -// TestPubSubDataSource_GetResolveDataSourceInput_MultipleTopics tests the PubSubDataSource with a mocked adapter -func TestPubSubDataSource_GetResolveDataSourceInput_MultipleTopics(t *testing.T) { +// TestEngineDataSourceFactory_GetResolveDataSourceInput_MultipleTopics tests the EngineDataSourceFactory with a mocked adapter +func TestEngineDataSourceFactory_GetResolveDataSourceInput_MultipleTopics(t *testing.T) { // Create the data source with mock adapter - pubsub := &PubSubDataSource{ + pubsub := &EngineDataSourceFactory{ fieldName: "testField", eventType: EventTypePublish, topics: []string{"test-topic-1", "test-topic-2"}, @@ -96,10 +96,10 @@ func TestPubSubDataSource_GetResolveDataSourceInput_MultipleTopics(t *testing.T) require.Empty(t, input) } -// TestPubSubDataSource_GetResolveDataSourceInput_NoTopics tests the PubSubDataSource with a mocked adapter -func TestPubSubDataSource_GetResolveDataSourceInput_NoTopics(t *testing.T) { +// TestEngineDataSourceFactory_GetResolveDataSourceInput_NoTopics tests the EngineDataSourceFactory with a mocked adapter +func TestEngineDataSourceFactory_GetResolveDataSourceInput_NoTopics(t *testing.T) { // Create the data source with mock adapter - pubsub := &PubSubDataSource{ + pubsub := &EngineDataSourceFactory{ fieldName: "testField", eventType: EventTypePublish, topics: []string{}, @@ -112,12 +112,12 @@ func TestPubSubDataSource_GetResolveDataSourceInput_NoTopics(t *testing.T) { require.Empty(t, input) } -// TestKafkaPubSubDataSourceMultiTopicSubscription tests only the subscription functionality +// TestKafkaEngineDataSourceFactoryMultiTopicSubscription tests only the subscription functionality // for multiple topics. The publish and resolve datasource tests are skipped since they // do not support multiple topics. -func TestKafkaPubSubDataSourceMultiTopicSubscription(t *testing.T) { +func TestKafkaEngineDataSourceFactoryMultiTopicSubscription(t *testing.T) { // Create the data source to test with mock adapter - pubsub := &PubSubDataSource{ + pubsub := &EngineDataSourceFactory{ fieldName: "testField", eventType: EventTypePublish, topics: []string{"test-topic-1", "test-topic-2"}, diff --git a/router/pkg/pubsub/kafka/provider_builder.go b/router/pkg/pubsub/kafka/provider_builder.go index 744ffc54fb..28fa09a469 100644 --- a/router/pkg/pubsub/kafka/provider_builder.go +++ b/router/pkg/pubsub/kafka/provider_builder.go @@ -16,7 +16,7 @@ import ( const providerTypeID = "kafka" -type PubSubProviderBuilder struct { +type ProviderBuilder struct { ctx context.Context logger *zap.Logger hostName string @@ -24,11 +24,11 @@ type PubSubProviderBuilder struct { adapters map[string]Adapter } -func (p *PubSubProviderBuilder) TypeID() string { +func (p *ProviderBuilder) TypeID() string { return providerTypeID } -func (p *PubSubProviderBuilder) BuildDataSource(data *nodev1.KafkaEventConfiguration) (datasource.PubSubDataSource, error) { +func (p *ProviderBuilder) BuildEngineDataSourceFactory(data *nodev1.KafkaEventConfiguration) (datasource.EngineDataSourceFactory, error) { providerId := data.GetEngineEventConfiguration().GetProviderId() adapter, ok := p.adapters[providerId] if !ok { @@ -45,7 +45,7 @@ func (p *PubSubProviderBuilder) BuildDataSource(data *nodev1.KafkaEventConfigura return nil, fmt.Errorf("unsupported event type: %s", data.GetEngineEventConfiguration().GetType()) } - return &PubSubDataSource{ + return &EngineDataSourceFactory{ fieldName: data.GetEngineEventConfiguration().GetFieldName(), eventType: eventType, topics: data.GetTopics(), @@ -54,7 +54,7 @@ func (p *PubSubProviderBuilder) BuildDataSource(data *nodev1.KafkaEventConfigura }, nil } -func (p *PubSubProviderBuilder) BuildProvider(provider config.KafkaEventSource) (datasource.Provider, error) { +func (p *ProviderBuilder) BuildProvider(provider config.KafkaEventSource) (datasource.Provider, error) { adapter, pubSubProvider, err := buildProvider(p.ctx, provider, p.logger) if err != nil { return nil, err @@ -107,13 +107,13 @@ func buildProvider(ctx context.Context, provider config.KafkaEventSource, logger return adapter, pubSubProvider, nil } -func NewPubSubProviderBuilder( +func NewProviderBuilder( ctx context.Context, logger *zap.Logger, hostName string, routerListenAddr string, -) *PubSubProviderBuilder { - return &PubSubProviderBuilder{ +) *ProviderBuilder { + return &ProviderBuilder{ ctx: ctx, logger: logger, hostName: hostName, diff --git a/router/pkg/pubsub/kafka/provider_builder_test.go b/router/pkg/pubsub/kafka/provider_builder_test.go index a964bd9dcc..c9cada1253 100644 --- a/router/pkg/pubsub/kafka/provider_builder_test.go +++ b/router/pkg/pubsub/kafka/provider_builder_test.go @@ -71,7 +71,7 @@ func TestPubSubProviderBuilderFactory(t *testing.T) { ctx := context.Background() - builder := NewPubSubProviderBuilder(ctx, logger, "host", "addr") + builder := NewProviderBuilder(ctx, logger, "host", "addr") require.NotNil(t, builder) provider, err := builder.BuildProvider(cfg) require.NoError(t, err) diff --git a/router/pkg/pubsub/nats/pubsub_datasource.go b/router/pkg/pubsub/nats/engine_datasource_factory.go similarity index 82% rename from router/pkg/pubsub/nats/pubsub_datasource.go rename to router/pkg/pubsub/nats/engine_datasource_factory.go index 9c0e8434e8..48fd2849f7 100644 --- a/router/pkg/pubsub/nats/pubsub_datasource.go +++ b/router/pkg/pubsub/nats/engine_datasource_factory.go @@ -18,7 +18,7 @@ const ( EventTypeSubscribe ) -type PubSubDataSource struct { +type EngineDataSourceFactory struct { NatsAdapter Adapter fieldName string @@ -32,11 +32,11 @@ type PubSubDataSource struct { consumerInactiveThreshold int32 } -func (c *PubSubDataSource) GetFieldName() string { +func (c *EngineDataSourceFactory) GetFieldName() string { return c.fieldName } -func (c *PubSubDataSource) ResolveDataSource() (resolve.DataSource, error) { +func (c *EngineDataSourceFactory) ResolveDataSource() (resolve.DataSource, error) { var dataSource resolve.DataSource switch c.eventType { @@ -55,7 +55,7 @@ func (c *PubSubDataSource) ResolveDataSource() (resolve.DataSource, error) { return dataSource, nil } -func (c *PubSubDataSource) ResolveDataSourceInput(eventData []byte) (string, error) { +func (c *EngineDataSourceFactory) ResolveDataSourceInput(eventData []byte) (string, error) { if len(c.subjects) != 1 { return "", fmt.Errorf("publish and request events should define one subject but received %d", len(c.subjects)) } @@ -71,13 +71,13 @@ func (c *PubSubDataSource) ResolveDataSourceInput(eventData []byte) (string, err return evtCfg.MarshalJSONTemplate(), nil } -func (c *PubSubDataSource) ResolveDataSourceSubscription() (resolve.SubscriptionDataSource, error) { +func (c *EngineDataSourceFactory) ResolveDataSourceSubscription() (resolve.SubscriptionDataSource, error) { return &SubscriptionSource{ pubSub: c.NatsAdapter, }, nil } -func (c *PubSubDataSource) ResolveDataSourceSubscriptionInput() (string, error) { +func (c *EngineDataSourceFactory) ResolveDataSourceSubscriptionInput() (string, error) { evtCfg := SubscriptionEventConfiguration{ ProviderID: c.providerId, Subjects: c.subjects, @@ -96,7 +96,7 @@ func (c *PubSubDataSource) ResolveDataSourceSubscriptionInput() (string, error) return string(object), nil } -func (c *PubSubDataSource) TransformEventData(extractFn datasource.ArgumentTemplateCallback) error { +func (c *EngineDataSourceFactory) TransformEventData(extractFn datasource.ArgumentTemplateCallback) error { switch c.eventType { case EventTypePublish, EventTypeRequest: extractedSubject, err := extractFn(c.subjects[0]) diff --git a/router/pkg/pubsub/nats/pubsub_datasource_test.go b/router/pkg/pubsub/nats/engine_datasource_factory_test.go similarity index 87% rename from router/pkg/pubsub/nats/pubsub_datasource_test.go rename to router/pkg/pubsub/nats/engine_datasource_factory_test.go index 16d2ed96bb..57426ad34c 100644 --- a/router/pkg/pubsub/nats/pubsub_datasource_test.go +++ b/router/pkg/pubsub/nats/engine_datasource_factory_test.go @@ -13,10 +13,10 @@ import ( "github.com/wundergraph/cosmo/router/pkg/pubsub/pubsubtest" ) -func TestNatsPubSubDataSource(t *testing.T) { +func TestNatsEngineDataSourceFactory(t *testing.T) { // Create the data source to test with a real adapter adapter := &ProviderAdapter{} - pubsub := &PubSubDataSource{ + pubsub := &EngineDataSourceFactory{ providerId: "test-provider", eventType: EventTypePublish, subjects: []string{"test-subject"}, @@ -25,10 +25,10 @@ func TestNatsPubSubDataSource(t *testing.T) { } // Run the standard test suite - pubsubtest.VerifyPubSubDataSourceImplementation(t, pubsub) + pubsubtest.VerifyEngineDataSourceFactoryImplementation(t, pubsub) } -func TestPubSubDataSourceWithMockAdapter(t *testing.T) { +func TestEngineDataSourceFactoryWithMockAdapter(t *testing.T) { // Create mock adapter mockAdapter := NewMockAdapter(t) @@ -38,7 +38,7 @@ func TestPubSubDataSourceWithMockAdapter(t *testing.T) { })).Return(nil) // Create the data source with mock adapter - pubsub := &PubSubDataSource{ + pubsub := &EngineDataSourceFactory{ providerId: "test-provider", eventType: EventTypePublish, subjects: []string{"test-subject"}, @@ -61,12 +61,12 @@ func TestPubSubDataSourceWithMockAdapter(t *testing.T) { require.Equal(t, `{"success": true}`, out.String()) } -func TestPubSubDataSource_GetResolveDataSource_WrongType(t *testing.T) { +func TestEngineDataSourceFactory_GetResolveDataSource_WrongType(t *testing.T) { // Create mock adapter mockAdapter := NewMockAdapter(t) // Create the data source with mock adapter - pubsub := &PubSubDataSource{ + pubsub := &EngineDataSourceFactory{ providerId: "test-provider", eventType: EventTypeSubscribe, subjects: []string{"test-subject"}, @@ -80,9 +80,9 @@ func TestPubSubDataSource_GetResolveDataSource_WrongType(t *testing.T) { require.Nil(t, ds) } -func TestPubSubDataSource_GetResolveDataSourceInput_MultipleSubjects(t *testing.T) { +func TestEngineDataSourceFactory_GetResolveDataSourceInput_MultipleSubjects(t *testing.T) { // Create the data source with mock adapter - pubsub := &PubSubDataSource{ + pubsub := &EngineDataSourceFactory{ providerId: "test-provider", eventType: EventTypePublish, subjects: []string{"test-subject-1", "test-subject-2"}, @@ -95,9 +95,9 @@ func TestPubSubDataSource_GetResolveDataSourceInput_MultipleSubjects(t *testing. require.Empty(t, input) } -func TestPubSubDataSource_GetResolveDataSourceInput_NoSubjects(t *testing.T) { +func TestEngineDataSourceFactory_GetResolveDataSourceInput_NoSubjects(t *testing.T) { // Create the data source with mock adapter - pubsub := &PubSubDataSource{ + pubsub := &EngineDataSourceFactory{ providerId: "test-provider", eventType: EventTypePublish, subjects: []string{}, @@ -110,9 +110,9 @@ func TestPubSubDataSource_GetResolveDataSourceInput_NoSubjects(t *testing.T) { require.Empty(t, input) } -func TestNatsPubSubDataSourceMultiSubjectSubscription(t *testing.T) { +func TestNatsEngineDataSourceFactoryMultiSubjectSubscription(t *testing.T) { // Create the data source to test with mock adapter - pubsub := &PubSubDataSource{ + pubsub := &EngineDataSourceFactory{ providerId: "test-provider", eventType: EventTypePublish, subjects: []string{"test-subject-1", "test-subject-2"}, @@ -133,9 +133,9 @@ func TestNatsPubSubDataSourceMultiSubjectSubscription(t *testing.T) { require.Equal(t, "test-subject-2", subscriptionConfig.Subjects[1], "Expected second subject to be 'test-subject-2'") } -func TestNatsPubSubDataSourceWithStreamConfiguration(t *testing.T) { +func TestNatsEngineDataSourceFactoryWithStreamConfiguration(t *testing.T) { // Create the data source to test - pubsub := &PubSubDataSource{ + pubsub := &EngineDataSourceFactory{ providerId: "test-provider", eventType: EventTypePublish, subjects: []string{"test-subject"}, @@ -161,7 +161,7 @@ func TestNatsPubSubDataSourceWithStreamConfiguration(t *testing.T) { require.Equal(t, int32(30), subscriptionConfig.StreamConfiguration.ConsumerInactiveThreshold, "Expected consumer inactive threshold to be 30") } -func TestPubSubDataSource_RequestDataSource(t *testing.T) { +func TestEngineDataSourceFactory_RequestDataSource(t *testing.T) { // Create mock adapter mockAdapter := NewMockAdapter(t) @@ -174,7 +174,7 @@ func TestPubSubDataSource_RequestDataSource(t *testing.T) { }) // Create the data source with mock adapter - pubsub := &PubSubDataSource{ + pubsub := &EngineDataSourceFactory{ providerId: "test-provider", eventType: EventTypeRequest, subjects: []string{"test-subject"}, @@ -200,7 +200,7 @@ func TestPubSubDataSource_RequestDataSource(t *testing.T) { func TestTransformEventConfig(t *testing.T) { t.Run("publish event", func(t *testing.T) { - cfg := &PubSubDataSource{ + cfg := &EngineDataSourceFactory{ providerId: "test-provider", eventType: EventTypePublish, subjects: []string{"original.subject"}, @@ -218,7 +218,7 @@ func TestTransformEventConfig(t *testing.T) { }) t.Run("subscribe event", func(t *testing.T) { - cfg := &PubSubDataSource{ + cfg := &EngineDataSourceFactory{ providerId: "test-provider", eventType: EventTypeSubscribe, subjects: []string{"original.subject1", "original.subject2"}, @@ -237,7 +237,7 @@ func TestTransformEventConfig(t *testing.T) { }) t.Run("invalid subject", func(t *testing.T) { - cfg := &PubSubDataSource{ + cfg := &EngineDataSourceFactory{ providerId: "test-provider", eventType: EventTypePublish, subjects: []string{"invalid subject with spaces"}, diff --git a/router/pkg/pubsub/nats/provider_builder.go b/router/pkg/pubsub/nats/provider_builder.go index c36355d2fc..e1ae0a1e70 100644 --- a/router/pkg/pubsub/nats/provider_builder.go +++ b/router/pkg/pubsub/nats/provider_builder.go @@ -15,7 +15,7 @@ import ( const providerTypeID = "nats" -type PubSubProviderBuilder struct { +type ProviderBuilder struct { ctx context.Context logger *zap.Logger hostName string @@ -23,11 +23,11 @@ type PubSubProviderBuilder struct { adapters map[string]Adapter } -func (p *PubSubProviderBuilder) TypeID() string { +func (p *ProviderBuilder) TypeID() string { return providerTypeID } -func (p *PubSubProviderBuilder) BuildDataSource(data *nodev1.NatsEventConfiguration) (datasource.PubSubDataSource, error) { +func (p *ProviderBuilder) BuildEngineDataSourceFactory(data *nodev1.NatsEventConfiguration) (datasource.EngineDataSourceFactory, error) { providerId := data.GetEngineEventConfiguration().GetProviderId() adapter, ok := p.adapters[providerId] if !ok { @@ -45,7 +45,7 @@ func (p *PubSubProviderBuilder) BuildDataSource(data *nodev1.NatsEventConfigurat default: return nil, fmt.Errorf("unsupported event type: %s", data.GetEngineEventConfiguration().GetType()) } - pubSubDataSource := &PubSubDataSource{ + dataSourceFactory := &EngineDataSourceFactory{ NatsAdapter: adapter, fieldName: data.GetEngineEventConfiguration().GetFieldName(), eventType: eventType, @@ -55,16 +55,16 @@ func (p *PubSubProviderBuilder) BuildDataSource(data *nodev1.NatsEventConfigurat } if data.GetStreamConfiguration() != nil { - pubSubDataSource.withStreamConfiguration = true - pubSubDataSource.consumerName = data.GetStreamConfiguration().GetConsumerName() - pubSubDataSource.streamName = data.GetStreamConfiguration().GetStreamName() - pubSubDataSource.consumerInactiveThreshold = data.GetStreamConfiguration().GetConsumerInactiveThreshold() + dataSourceFactory.withStreamConfiguration = true + dataSourceFactory.consumerName = data.GetStreamConfiguration().GetConsumerName() + dataSourceFactory.streamName = data.GetStreamConfiguration().GetStreamName() + dataSourceFactory.consumerInactiveThreshold = data.GetStreamConfiguration().GetConsumerInactiveThreshold() } - return pubSubDataSource, nil + return dataSourceFactory, nil } -func (p *PubSubProviderBuilder) BuildProvider(provider config.NatsEventSource) (datasource.Provider, error) { +func (p *ProviderBuilder) BuildProvider(provider config.NatsEventSource) (datasource.Provider, error) { adapter, pubSubProvider, err := buildProvider(p.ctx, provider, p.logger, p.hostName, p.routerListenAddr) if err != nil { return nil, err @@ -132,13 +132,13 @@ func buildProvider(ctx context.Context, provider config.NatsEventSource, logger return adapter, pubSubProvider, nil } -func NewPubSubProviderBuilder( +func NewProviderBuilder( ctx context.Context, logger *zap.Logger, hostName string, routerListenAddr string, ) datasource.ProviderBuilder[config.NatsEventSource, *nodev1.NatsEventConfiguration] { - return &PubSubProviderBuilder{ + return &ProviderBuilder{ ctx: ctx, logger: logger, hostName: hostName, diff --git a/router/pkg/pubsub/nats/provider_builder_test.go b/router/pkg/pubsub/nats/provider_builder_test.go index 26b82d67f2..d2646b1941 100644 --- a/router/pkg/pubsub/nats/provider_builder_test.go +++ b/router/pkg/pubsub/nats/provider_builder_test.go @@ -80,7 +80,7 @@ func TestPubSubProviderBuilderFactory(t *testing.T) { ctx := context.Background() - builder := NewPubSubProviderBuilder(ctx, logger, "host", "addr") + builder := NewProviderBuilder(ctx, logger, "host", "addr") require.NotNil(t, builder) provider, err := builder.BuildProvider(cfg) require.NoError(t, err) diff --git a/router/pkg/pubsub/pubsub.go b/router/pkg/pubsub/pubsub.go index 4c72c1d8c5..5822953f45 100644 --- a/router/pkg/pubsub/pubsub.go +++ b/router/pkg/pubsub/pubsub.go @@ -62,7 +62,7 @@ func BuildProvidersAndDataSources( var outs []plan.DataSource // initialize Kafka providers and data sources - kafkaBuilder := kafka.NewPubSubProviderBuilder(ctx, logger, hostName, routerListenAddr) + kafkaBuilder := kafka.NewProviderBuilder(ctx, logger, hostName, routerListenAddr) kafkaDsConfsWithEvents := []dsConfAndEvents[*nodev1.KafkaEventConfiguration]{} for _, dsConf := range dsConfs { kafkaDsConfsWithEvents = append(kafkaDsConfsWithEvents, dsConfAndEvents[*nodev1.KafkaEventConfiguration]{ @@ -78,7 +78,7 @@ func BuildProvidersAndDataSources( outs = append(outs, kafkaOuts...) // initialize NATS providers and data sources - natsBuilder := nats.NewPubSubProviderBuilder(ctx, logger, hostName, routerListenAddr) + natsBuilder := nats.NewProviderBuilder(ctx, logger, hostName, routerListenAddr) natsDsConfsWithEvents := []dsConfAndEvents[*nodev1.NatsEventConfiguration]{} for _, dsConf := range dsConfs { natsDsConfsWithEvents = append(natsDsConfsWithEvents, dsConfAndEvents[*nodev1.NatsEventConfiguration]{ @@ -137,12 +137,12 @@ func build[P GetID, E GetEngineEventConfiguration](ctx context.Context, builder // build data sources for each event for _, dsConf := range dsConfs { for i, event := range dsConf.events { - dataSourceFactory := pubsub_datasource.NewPubSubDataSourceFactory(builder, event) + plannerConfig := pubsub_datasource.NewPlannerConfig(builder, event) out, err := plan.NewDataSourceConfiguration( dsConf.dsConf.Configuration.Id+"-"+builder.TypeID()+"-"+strconv.Itoa(i), - pubsub_datasource.NewPlannerFactory(ctx, dataSourceFactory), + pubsub_datasource.NewPlannerFactory(ctx, plannerConfig), getFilteredDataSourceMetadata(event.GetEngineEventConfiguration(), dsConf.dsConf.Metadata), - dataSourceFactory, + plannerConfig, ) if err != nil { return nil, nil, err diff --git a/router/pkg/pubsub/pubsubtest/pubsubtest.go b/router/pkg/pubsub/pubsubtest/pubsubtest.go index 1a67461062..254d1e8609 100644 --- a/router/pkg/pubsub/pubsubtest/pubsubtest.go +++ b/router/pkg/pubsub/pubsubtest/pubsubtest.go @@ -9,9 +9,9 @@ import ( "github.com/wundergraph/cosmo/router/pkg/pubsub/datasource" ) -// VerifyPubSubDataSourceImplementation is a common test function to verify any PubSubDataSource implementation -// This function can be used by other packages to test their PubSubDataSource implementations -func VerifyPubSubDataSourceImplementation(t *testing.T, pubSub datasource.PubSubDataSource) { +// VerifyEngineDataSourceFactoryImplementation is a common test function to verify any EngineDataSourceFactory implementation +// This function can be used by other packages to test their EngineDataSourceFactory implementations +func VerifyEngineDataSourceFactoryImplementation(t *testing.T, pubSub datasource.EngineDataSourceFactory) { // Test GetFieldName fieldName := pubSub.GetFieldName() require.NotEmpty(t, fieldName, "Expected non-empty field name") From 3a6875d1b91136aa066d3ea569a8f0552d55fd40 Mon Sep 17 00:00:00 2001 From: Alessandro Pagnin Date: Fri, 6 Jun 2025 13:21:18 +0200 Subject: [PATCH 105/126] chore: port the adapter to new pubsub structure --- router-tests/events/redis_events_test.go | 35 +++++++- router/pkg/pubsub/pubsub.go | 2 +- router/pkg/pubsub/redis/adapter.go | 18 ++-- router/pkg/pubsub/redis/engine_datasource.go | 4 +- ...source.go => engine_datasource_factory.go} | 20 ++--- ...t.go => engine_datasource_factory_test.go} | 42 ++++----- .../pubsub/redis/engine_datasource_test.go | 24 ++--- router/pkg/pubsub/redis/mocks.go | 90 +++++++++---------- router/pkg/pubsub/redis/provider_builder.go | 28 +++--- .../pkg/pubsub/redis/provider_builder_test.go | 8 +- 10 files changed, 148 insertions(+), 123 deletions(-) rename router/pkg/pubsub/redis/{pubsub_datasource.go => engine_datasource_factory.go} (73%) rename router/pkg/pubsub/redis/{pubsub_datasource_test.go => engine_datasource_factory_test.go} (76%) diff --git a/router-tests/events/redis_events_test.go b/router-tests/events/redis_events_test.go index c7878ef01f..ef508b0ca7 100644 --- a/router-tests/events/redis_events_test.go +++ b/router-tests/events/redis_events_test.go @@ -25,6 +25,35 @@ import ( const RedisWaitTimeout = time.Second * 30 +func assertRedisLineEquals(t *testing.T, reader *bufio.Reader, expected string) { + t.Helper() + line, _, err := reader.ReadLine() + assert.NoError(t, err) + assert.Equal(t, expected, string(line)) +} + +func assertRedisMultipartPrefix(t *testing.T, reader *bufio.Reader) { + t.Helper() + assertRedisLineEquals(t, reader, "") + assertRedisLineEquals(t, reader, "--graphql") + assertRedisLineEquals(t, reader, "Content-Type: application/json") + assertRedisLineEquals(t, reader, "") +} + +func assertRedisMultipartValueEventually(t *testing.T, reader *bufio.Reader, expected string) { + t.Helper() + assert.Eventually(t, func() bool { + assertRedisMultipartPrefix(t, reader) + line, _, err := reader.ReadLine() + assert.NoError(t, err) + if string(line) == "{}" { + return false + } + assert.Equal(t, expected, string(line)) + return true + }, NatsWaitTimeout, time.Millisecond*100) +} + func TestRedisEvents(t *testing.T) { t.Parallel() @@ -430,13 +459,13 @@ func TestRedisEvents(t *testing.T) { assert.Eventually(t, func() bool { return produced.Load() == 1 }, RedisWaitTimeout, time.Millisecond*100) - assertMultipartValueEventually(t, reader, "{\"payload\":{\"data\":{\"employeeUpdates\":{\"id\":1,\"details\":{\"forename\":\"Jens\",\"surname\":\"Neuse\"}}}}}") + assertRedisMultipartValueEventually(t, reader, "{\"payload\":{\"data\":{\"employeeUpdates\":{\"id\":1,\"details\":{\"forename\":\"Jens\",\"surname\":\"Neuse\"}}}}}") consumed.Add(1) assert.Eventually(t, func() bool { return produced.Load() == 2 }, RedisWaitTimeout, time.Millisecond*100) - assertMultipartValueEventually(t, reader, "{\"payload\":{\"data\":{\"employeeUpdates\":{\"id\":1,\"details\":{\"forename\":\"Jens\",\"surname\":\"Neuse\"}}}}}") + assertRedisMultipartValueEventually(t, reader, "{\"payload\":{\"data\":{\"employeeUpdates\":{\"id\":1,\"details\":{\"forename\":\"Jens\",\"surname\":\"Neuse\"}}}}}") consumed.Add(1) }() @@ -485,7 +514,7 @@ func TestRedisEvents(t *testing.T) { defer resp.Body.Close() reader := bufio.NewReader(resp.Body) - assertMultipartValueEventually(t, reader, "{\"payload\":{\"errors\":[{\"message\":\"operation type 'subscription' is blocked\"}]}}") + assertRedisMultipartValueEventually(t, reader, "{\"payload\":{\"errors\":[{\"message\":\"operation type 'subscription' is blocked\"}]}}") xEnv.WaitForSubscriptionCount(0, RedisWaitTimeout) xEnv.WaitForConnectionCount(0, RedisWaitTimeout) diff --git a/router/pkg/pubsub/pubsub.go b/router/pkg/pubsub/pubsub.go index 5261a99cf1..2936365000 100644 --- a/router/pkg/pubsub/pubsub.go +++ b/router/pkg/pubsub/pubsub.go @@ -95,7 +95,7 @@ func BuildProvidersAndDataSources( outs = append(outs, natsOuts...) // initialize Redis providers and data sources - redisBuilder := redis.NewPubSubProviderBuilder(ctx, logger, hostName, routerListenAddr) + redisBuilder := redis.NewProviderBuilder(ctx, logger, hostName, routerListenAddr) redisDsConfsWithEvents := []dsConfAndEvents[*nodev1.RedisEventConfiguration]{} for _, dsConf := range dsConfs { redisDsConfsWithEvents = append(redisDsConfsWithEvents, dsConfAndEvents[*nodev1.RedisEventConfiguration]{ diff --git a/router/pkg/pubsub/redis/adapter.go b/router/pkg/pubsub/redis/adapter.go index 70e4258d36..824434baff 100644 --- a/router/pkg/pubsub/redis/adapter.go +++ b/router/pkg/pubsub/redis/adapter.go @@ -11,8 +11,8 @@ import ( "go.uber.org/zap" ) -// AdapterInterface defines the methods that a Redis adapter should implement -type AdapterInterface interface { +// Adapter defines the methods that a Redis adapter should implement +type Adapter interface { // Subscribe subscribes to the given events and sends updates to the updater Subscribe(ctx context.Context, event SubscriptionEventConfiguration, updater resolve.SubscriptionUpdater) error // Publish publishes the given event to the specified channel @@ -23,15 +23,15 @@ type AdapterInterface interface { Shutdown(ctx context.Context) error } -func NewAdapter(logger *zap.Logger, urls []string) AdapterInterface { - return &Adapter{ +func NewProviderAdapter(logger *zap.Logger, urls []string) Adapter { + return &ProviderAdapter{ logger: logger, urls: urls, clusterEnabled: false, } } -type Adapter struct { +type ProviderAdapter struct { conn rd.RDCloser logger *zap.Logger closeWg sync.WaitGroup @@ -39,7 +39,7 @@ type Adapter struct { clusterEnabled bool } -func (p *Adapter) Startup(ctx context.Context) error { +func (p *ProviderAdapter) Startup(ctx context.Context) error { rdCloser, err := rd.NewRedisCloser(&rd.RedisCloserOptions{ Logger: p.logger, URLs: p.urls, @@ -54,11 +54,11 @@ func (p *Adapter) Startup(ctx context.Context) error { return nil } -func (p *Adapter) Shutdown(ctx context.Context) error { +func (p *ProviderAdapter) Shutdown(ctx context.Context) error { return p.conn.Close() } -func (p *Adapter) Subscribe(ctx context.Context, event SubscriptionEventConfiguration, updater resolve.SubscriptionUpdater) error { +func (p *ProviderAdapter) Subscribe(ctx context.Context, event SubscriptionEventConfiguration, updater resolve.SubscriptionUpdater) error { log := p.logger.With( zap.String("provider_id", event.ProviderID), zap.String("method", "subscribe"), @@ -92,7 +92,7 @@ func (p *Adapter) Subscribe(ctx context.Context, event SubscriptionEventConfigur return err } -func (p *Adapter) Publish(ctx context.Context, event PublishEventConfiguration) error { +func (p *ProviderAdapter) Publish(ctx context.Context, event PublishEventConfiguration) error { log := p.logger.With( zap.String("provider_id", event.ProviderID), zap.String("method", "publish"), diff --git a/router/pkg/pubsub/redis/engine_datasource.go b/router/pkg/pubsub/redis/engine_datasource.go index e6024c4287..d24a4fb959 100644 --- a/router/pkg/pubsub/redis/engine_datasource.go +++ b/router/pkg/pubsub/redis/engine_datasource.go @@ -32,7 +32,7 @@ func (s *PublishEventConfiguration) MarshalJSONTemplate() (string, error) { // SubscriptionDataSource implements resolve.SubscriptionDataSource for Redis type SubscriptionDataSource struct { - pubSub AdapterInterface + pubSub Adapter } // UniqueRequestID computes a unique ID for the subscription request @@ -74,7 +74,7 @@ func (s *SubscriptionDataSource) LoadInitialData(ctx context.Context) (initial [ // PublishDataSource implements resolve.DataSource for Redis publishing type PublishDataSource struct { - pubSub AdapterInterface + pubSub Adapter } // Load processes a request to publish to Redis diff --git a/router/pkg/pubsub/redis/pubsub_datasource.go b/router/pkg/pubsub/redis/engine_datasource_factory.go similarity index 73% rename from router/pkg/pubsub/redis/pubsub_datasource.go rename to router/pkg/pubsub/redis/engine_datasource_factory.go index 818858e076..c2689c188b 100644 --- a/router/pkg/pubsub/redis/pubsub_datasource.go +++ b/router/pkg/pubsub/redis/engine_datasource_factory.go @@ -9,23 +9,23 @@ import ( "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/resolve" ) -// PubSubDataSource implements the datasource.PubSubDataSource interface for Redis -type PubSubDataSource struct { +// EngineDataSourceFactory implements the datasource.EngineDataSourceFactory interface for Redis +type EngineDataSourceFactory struct { EventConfiguration *nodev1.RedisEventConfiguration - RedisAdapter AdapterInterface + RedisAdapter Adapter } -func (c *PubSubDataSource) GetFieldName() string { +func (c *EngineDataSourceFactory) GetFieldName() string { return c.EventConfiguration.GetEngineEventConfiguration().GetFieldName() } // EngineEventConfiguration returns the engine event configuration -func (c *PubSubDataSource) EngineEventConfiguration() *nodev1.EngineEventConfiguration { +func (c *EngineDataSourceFactory) EngineEventConfiguration() *nodev1.EngineEventConfiguration { return c.EventConfiguration.GetEngineEventConfiguration() } // ResolveDataSource returns the appropriate data source based on the event type -func (c *PubSubDataSource) ResolveDataSource() (resolve.DataSource, error) { +func (c *EngineDataSourceFactory) ResolveDataSource() (resolve.DataSource, error) { var dataSource resolve.DataSource eventType := c.EventConfiguration.GetEngineEventConfiguration().GetType() @@ -42,7 +42,7 @@ func (c *PubSubDataSource) ResolveDataSource() (resolve.DataSource, error) { } // ResolveDataSourceInput builds the input for the data source -func (c *PubSubDataSource) ResolveDataSourceInput(eventData []byte) (string, error) { +func (c *EngineDataSourceFactory) ResolveDataSourceInput(eventData []byte) (string, error) { channels := c.EventConfiguration.GetChannels() if len(channels) != 1 { @@ -62,14 +62,14 @@ func (c *PubSubDataSource) ResolveDataSourceInput(eventData []byte) (string, err } // ResolveDataSourceSubscription returns the subscription data source -func (c *PubSubDataSource) ResolveDataSourceSubscription() (resolve.SubscriptionDataSource, error) { +func (c *EngineDataSourceFactory) ResolveDataSourceSubscription() (resolve.SubscriptionDataSource, error) { return &SubscriptionDataSource{ pubSub: c.RedisAdapter, }, nil } // ResolveDataSourceSubscriptionInput builds the input for the subscription data source -func (c *PubSubDataSource) ResolveDataSourceSubscriptionInput() (string, error) { +func (c *EngineDataSourceFactory) ResolveDataSourceSubscriptionInput() (string, error) { providerId := c.EventConfiguration.GetEngineEventConfiguration().GetProviderId() evtCfg := SubscriptionEventConfiguration{ ProviderID: providerId, @@ -83,7 +83,7 @@ func (c *PubSubDataSource) ResolveDataSourceSubscriptionInput() (string, error) } // TransformEventData transforms the event data using the extract function -func (c *PubSubDataSource) TransformEventData(extractFn datasource.ArgumentTemplateCallback) error { +func (c *EngineDataSourceFactory) TransformEventData(extractFn datasource.ArgumentTemplateCallback) error { // No operation needed until full proto support is added return nil } diff --git a/router/pkg/pubsub/redis/pubsub_datasource_test.go b/router/pkg/pubsub/redis/engine_datasource_factory_test.go similarity index 76% rename from router/pkg/pubsub/redis/pubsub_datasource_test.go rename to router/pkg/pubsub/redis/engine_datasource_factory_test.go index 0fdf9becca..859f7465ee 100644 --- a/router/pkg/pubsub/redis/pubsub_datasource_test.go +++ b/router/pkg/pubsub/redis/engine_datasource_factory_test.go @@ -12,10 +12,10 @@ import ( "github.com/wundergraph/cosmo/router/pkg/pubsub/pubsubtest" ) -func TestRedisPubSubDataSource(t *testing.T) { +func TestRedisEngineDataSourceFactory(t *testing.T) { // Create the data source to test with a real adapter - adapter := &Adapter{} - pubsub := &PubSubDataSource{ + adapter := &ProviderAdapter{} + pubsub := &EngineDataSourceFactory{ EventConfiguration: &nodev1.RedisEventConfiguration{ EngineEventConfiguration: &nodev1.EngineEventConfiguration{ FieldName: "testField", @@ -29,13 +29,13 @@ func TestRedisPubSubDataSource(t *testing.T) { } // Run the standard test suite - pubsubtest.VerifyPubSubDataSourceImplementation(t, pubsub) + pubsubtest.VerifyEngineDataSourceFactoryImplementation(t, pubsub) } -// TestPubSubDataSourceWithMockAdapter tests the PubSubDataSource with a mocked adapter -func TestPubSubDataSourceWithMockAdapter(t *testing.T) { +// TestEngineDataSourceFactoryWithMockAdapter tests the EngineDataSourceFactory with a mocked adapter +func TestEngineDataSourceFactoryWithMockAdapter(t *testing.T) { // Create mock adapter - mockAdapter := NewMockAdapterInterface(t) + mockAdapter := NewMockAdapter(t) // Configure mock expectations for Publish mockAdapter.On("Publish", mock.Anything, mock.MatchedBy(func(event PublishEventConfiguration) bool { @@ -43,7 +43,7 @@ func TestPubSubDataSourceWithMockAdapter(t *testing.T) { })).Return(nil) // Create the data source with mock adapter - pubsub := &PubSubDataSource{ + pubsub := &EngineDataSourceFactory{ EventConfiguration: &nodev1.RedisEventConfiguration{ EngineEventConfiguration: &nodev1.EngineEventConfiguration{ FieldName: "testField", @@ -71,13 +71,13 @@ func TestPubSubDataSourceWithMockAdapter(t *testing.T) { require.Equal(t, `{"success": true}`, out.String()) } -// TestPubSubDataSource_GetResolveDataSource_WrongType tests the PubSubDataSource with a mocked adapter -func TestPubSubDataSource_GetResolveDataSource_WrongType(t *testing.T) { +// TestEngineDataSourceFactory_GetResolveDataSource_WrongType tests the EngineDataSourceFactory with a mocked adapter +func TestEngineDataSourceFactory_GetResolveDataSource_WrongType(t *testing.T) { // Create mock adapter - mockAdapter := NewMockAdapterInterface(t) + mockAdapter := NewMockAdapter(t) // Create the data source with mock adapter - pubsub := &PubSubDataSource{ + pubsub := &EngineDataSourceFactory{ EventConfiguration: &nodev1.RedisEventConfiguration{ EngineEventConfiguration: &nodev1.EngineEventConfiguration{ FieldName: "testField", @@ -96,10 +96,10 @@ func TestPubSubDataSource_GetResolveDataSource_WrongType(t *testing.T) { require.Nil(t, ds) } -// TestPubSubDataSource_GetResolveDataSourceInput_MultipleChannels tests the PubSubDataSource with a mocked adapter -func TestPubSubDataSource_GetResolveDataSourceInput_MultipleChannels(t *testing.T) { +// TestEngineDataSourceFactory_GetResolveDataSourceInput_MultipleChannels tests the EngineDataSourceFactory with a mocked adapter +func TestEngineDataSourceFactory_GetResolveDataSourceInput_MultipleChannels(t *testing.T) { // Create the data source with mock adapter - pubsub := &PubSubDataSource{ + pubsub := &EngineDataSourceFactory{ EventConfiguration: &nodev1.RedisEventConfiguration{ EngineEventConfiguration: &nodev1.EngineEventConfiguration{ FieldName: "testField", @@ -117,10 +117,10 @@ func TestPubSubDataSource_GetResolveDataSourceInput_MultipleChannels(t *testing. require.Empty(t, input) } -// TestPubSubDataSource_GetResolveDataSourceInput_NoChannels tests the PubSubDataSource with a mocked adapter -func TestPubSubDataSource_GetResolveDataSourceInput_NoChannels(t *testing.T) { +// TestEngineDataSourceFactory_GetResolveDataSourceInput_NoChannels tests the EngineDataSourceFactory with a mocked adapter +func TestEngineDataSourceFactory_GetResolveDataSourceInput_NoChannels(t *testing.T) { // Create the data source with mock adapter - pubsub := &PubSubDataSource{ + pubsub := &EngineDataSourceFactory{ EventConfiguration: &nodev1.RedisEventConfiguration{ EngineEventConfiguration: &nodev1.EngineEventConfiguration{ FieldName: "testField", @@ -138,12 +138,12 @@ func TestPubSubDataSource_GetResolveDataSourceInput_NoChannels(t *testing.T) { require.Empty(t, input) } -// TestRedisPubSubDataSourceMultiChannelSubscription tests only the subscription functionality +// TestRedisEngineDataSourceFactoryMultiChannelSubscription tests only the subscription functionality // for multiple channels. The publish and resolve datasource tests are skipped since they // do not support multiple channels. -func TestRedisPubSubDataSourceMultiChannelSubscription(t *testing.T) { +func TestRedisEngineDataSourceFactoryMultiChannelSubscription(t *testing.T) { // Create the data source to test with mock adapter - pubsub := &PubSubDataSource{ + pubsub := &EngineDataSourceFactory{ EventConfiguration: &nodev1.RedisEventConfiguration{ EngineEventConfiguration: &nodev1.EngineEventConfiguration{ FieldName: "testField", diff --git a/router/pkg/pubsub/redis/engine_datasource_test.go b/router/pkg/pubsub/redis/engine_datasource_test.go index 23868c97f7..7c47d47cc6 100644 --- a/router/pkg/pubsub/redis/engine_datasource_test.go +++ b/router/pkg/pubsub/redis/engine_datasource_test.go @@ -79,7 +79,7 @@ func TestSubscriptionSource_UniqueRequestID(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { source := &SubscriptionDataSource{ - pubSub: NewMockAdapterInterface(t), + pubSub: NewMockAdapter(t), } ctx := &resolve.Context{} input := []byte(tt.input) @@ -106,13 +106,13 @@ func TestSubscriptionSource_Start(t *testing.T) { tests := []struct { name string input string - mockSetup func(*MockAdapterInterface, *datasource.MockSubscriptionUpdater) + mockSetup func(*MockAdapter, *datasource.MockSubscriptionUpdater) expectError bool }{ { name: "successful subscription", input: `{"channels":["channel1", "channel2"], "providerId":"test-provider"}`, - mockSetup: func(m *MockAdapterInterface, updater *datasource.MockSubscriptionUpdater) { + mockSetup: func(m *MockAdapter, updater *datasource.MockSubscriptionUpdater) { m.On("Subscribe", mock.Anything, SubscriptionEventConfiguration{ ProviderID: "test-provider", Channels: []string{"channel1", "channel2"}, @@ -123,7 +123,7 @@ func TestSubscriptionSource_Start(t *testing.T) { { name: "adapter returns error", input: `{"channels":["channel1"], "providerId":"test-provider"}`, - mockSetup: func(m *MockAdapterInterface, updater *datasource.MockSubscriptionUpdater) { + mockSetup: func(m *MockAdapter, updater *datasource.MockSubscriptionUpdater) { m.On("Subscribe", mock.Anything, SubscriptionEventConfiguration{ ProviderID: "test-provider", Channels: []string{"channel1"}, @@ -134,14 +134,14 @@ func TestSubscriptionSource_Start(t *testing.T) { { name: "invalid input json", input: `{"invalid json":`, - mockSetup: func(m *MockAdapterInterface, updater *datasource.MockSubscriptionUpdater) {}, + mockSetup: func(m *MockAdapter, updater *datasource.MockSubscriptionUpdater) {}, expectError: true, }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - mockAdapter := NewMockAdapterInterface(t) + mockAdapter := NewMockAdapter(t) updater := datasource.NewMockSubscriptionUpdater(t) tt.mockSetup(mockAdapter, updater) @@ -172,7 +172,7 @@ func TestRedisPublishDataSource_Load(t *testing.T) { tests := []struct { name string input string - mockSetup func(*MockAdapterInterface) + mockSetup func(*MockAdapter) expectError bool expectedOutput string expectPublished bool @@ -180,7 +180,7 @@ func TestRedisPublishDataSource_Load(t *testing.T) { { name: "successful publish", input: `{"channel":"test-channel", "data":{"message":"hello"}, "providerId":"test-provider"}`, - mockSetup: func(m *MockAdapterInterface) { + mockSetup: func(m *MockAdapter) { m.On("Publish", mock.Anything, mock.MatchedBy(func(event PublishEventConfiguration) bool { return event.ProviderID == "test-provider" && event.Channel == "test-channel" && @@ -194,7 +194,7 @@ func TestRedisPublishDataSource_Load(t *testing.T) { { name: "publish error", input: `{"channel":"test-channel", "data":{"message":"hello"}, "providerId":"test-provider"}`, - mockSetup: func(m *MockAdapterInterface) { + mockSetup: func(m *MockAdapter) { m.On("Publish", mock.Anything, mock.Anything).Return(errors.New("publish error")) }, expectError: false, // The Load method doesn't return the publish error directly @@ -204,7 +204,7 @@ func TestRedisPublishDataSource_Load(t *testing.T) { { name: "invalid input json", input: `{"invalid json":`, - mockSetup: func(m *MockAdapterInterface) {}, + mockSetup: func(m *MockAdapter) {}, expectError: true, expectPublished: false, }, @@ -212,7 +212,7 @@ func TestRedisPublishDataSource_Load(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - mockAdapter := NewMockAdapterInterface(t) + mockAdapter := NewMockAdapter(t) tt.mockSetup(mockAdapter) dataSource := &PublishDataSource{ @@ -237,7 +237,7 @@ func TestRedisPublishDataSource_Load(t *testing.T) { func TestRedisPublishDataSource_LoadWithFiles(t *testing.T) { t.Run("panic on not implemented", func(t *testing.T) { dataSource := &PublishDataSource{ - pubSub: NewMockAdapterInterface(t), + pubSub: NewMockAdapter(t), } assert.Panics(t, func() { diff --git a/router/pkg/pubsub/redis/mocks.go b/router/pkg/pubsub/redis/mocks.go index 1257b5706d..603a5dd548 100644 --- a/router/pkg/pubsub/redis/mocks.go +++ b/router/pkg/pubsub/redis/mocks.go @@ -11,13 +11,13 @@ import ( "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/resolve" ) -// NewMockAdapterInterface creates a new instance of MockAdapterInterface. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations. +// NewMockAdapter creates a new instance of MockAdapter. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations. // The first argument is typically a *testing.T value. -func NewMockAdapterInterface(t interface { +func NewMockAdapter(t interface { mock.TestingT Cleanup(func()) -}) *MockAdapterInterface { - mock := &MockAdapterInterface{} +}) *MockAdapter { + mock := &MockAdapter{} mock.Mock.Test(t) t.Cleanup(func() { mock.AssertExpectations(t) }) @@ -25,21 +25,21 @@ func NewMockAdapterInterface(t interface { return mock } -// MockAdapterInterface is an autogenerated mock type for the AdapterInterface type -type MockAdapterInterface struct { +// MockAdapter is an autogenerated mock type for the Adapter type +type MockAdapter struct { mock.Mock } -type MockAdapterInterface_Expecter struct { +type MockAdapter_Expecter struct { mock *mock.Mock } -func (_m *MockAdapterInterface) EXPECT() *MockAdapterInterface_Expecter { - return &MockAdapterInterface_Expecter{mock: &_m.Mock} +func (_m *MockAdapter) EXPECT() *MockAdapter_Expecter { + return &MockAdapter_Expecter{mock: &_m.Mock} } -// Publish provides a mock function for the type MockAdapterInterface -func (_mock *MockAdapterInterface) Publish(ctx context.Context, event PublishEventConfiguration) error { +// Publish provides a mock function for the type MockAdapter +func (_mock *MockAdapter) Publish(ctx context.Context, event PublishEventConfiguration) error { ret := _mock.Called(ctx, event) if len(ret) == 0 { @@ -55,19 +55,19 @@ func (_mock *MockAdapterInterface) Publish(ctx context.Context, event PublishEve return r0 } -// MockAdapterInterface_Publish_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'Publish' -type MockAdapterInterface_Publish_Call struct { +// MockAdapter_Publish_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'Publish' +type MockAdapter_Publish_Call struct { *mock.Call } // Publish is a helper method to define mock.On call // - ctx context.Context // - event PublishEventConfiguration -func (_e *MockAdapterInterface_Expecter) Publish(ctx interface{}, event interface{}) *MockAdapterInterface_Publish_Call { - return &MockAdapterInterface_Publish_Call{Call: _e.mock.On("Publish", ctx, event)} +func (_e *MockAdapter_Expecter) Publish(ctx interface{}, event interface{}) *MockAdapter_Publish_Call { + return &MockAdapter_Publish_Call{Call: _e.mock.On("Publish", ctx, event)} } -func (_c *MockAdapterInterface_Publish_Call) Run(run func(ctx context.Context, event PublishEventConfiguration)) *MockAdapterInterface_Publish_Call { +func (_c *MockAdapter_Publish_Call) Run(run func(ctx context.Context, event PublishEventConfiguration)) *MockAdapter_Publish_Call { _c.Call.Run(func(args mock.Arguments) { var arg0 context.Context if args[0] != nil { @@ -85,18 +85,18 @@ func (_c *MockAdapterInterface_Publish_Call) Run(run func(ctx context.Context, e return _c } -func (_c *MockAdapterInterface_Publish_Call) Return(err error) *MockAdapterInterface_Publish_Call { +func (_c *MockAdapter_Publish_Call) Return(err error) *MockAdapter_Publish_Call { _c.Call.Return(err) return _c } -func (_c *MockAdapterInterface_Publish_Call) RunAndReturn(run func(ctx context.Context, event PublishEventConfiguration) error) *MockAdapterInterface_Publish_Call { +func (_c *MockAdapter_Publish_Call) RunAndReturn(run func(ctx context.Context, event PublishEventConfiguration) error) *MockAdapter_Publish_Call { _c.Call.Return(run) return _c } -// Shutdown provides a mock function for the type MockAdapterInterface -func (_mock *MockAdapterInterface) Shutdown(ctx context.Context) error { +// Shutdown provides a mock function for the type MockAdapter +func (_mock *MockAdapter) Shutdown(ctx context.Context) error { ret := _mock.Called(ctx) if len(ret) == 0 { @@ -112,18 +112,18 @@ func (_mock *MockAdapterInterface) Shutdown(ctx context.Context) error { return r0 } -// MockAdapterInterface_Shutdown_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'Shutdown' -type MockAdapterInterface_Shutdown_Call struct { +// MockAdapter_Shutdown_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'Shutdown' +type MockAdapter_Shutdown_Call struct { *mock.Call } // Shutdown is a helper method to define mock.On call // - ctx context.Context -func (_e *MockAdapterInterface_Expecter) Shutdown(ctx interface{}) *MockAdapterInterface_Shutdown_Call { - return &MockAdapterInterface_Shutdown_Call{Call: _e.mock.On("Shutdown", ctx)} +func (_e *MockAdapter_Expecter) Shutdown(ctx interface{}) *MockAdapter_Shutdown_Call { + return &MockAdapter_Shutdown_Call{Call: _e.mock.On("Shutdown", ctx)} } -func (_c *MockAdapterInterface_Shutdown_Call) Run(run func(ctx context.Context)) *MockAdapterInterface_Shutdown_Call { +func (_c *MockAdapter_Shutdown_Call) Run(run func(ctx context.Context)) *MockAdapter_Shutdown_Call { _c.Call.Run(func(args mock.Arguments) { var arg0 context.Context if args[0] != nil { @@ -136,18 +136,18 @@ func (_c *MockAdapterInterface_Shutdown_Call) Run(run func(ctx context.Context)) return _c } -func (_c *MockAdapterInterface_Shutdown_Call) Return(err error) *MockAdapterInterface_Shutdown_Call { +func (_c *MockAdapter_Shutdown_Call) Return(err error) *MockAdapter_Shutdown_Call { _c.Call.Return(err) return _c } -func (_c *MockAdapterInterface_Shutdown_Call) RunAndReturn(run func(ctx context.Context) error) *MockAdapterInterface_Shutdown_Call { +func (_c *MockAdapter_Shutdown_Call) RunAndReturn(run func(ctx context.Context) error) *MockAdapter_Shutdown_Call { _c.Call.Return(run) return _c } -// Startup provides a mock function for the type MockAdapterInterface -func (_mock *MockAdapterInterface) Startup(ctx context.Context) error { +// Startup provides a mock function for the type MockAdapter +func (_mock *MockAdapter) Startup(ctx context.Context) error { ret := _mock.Called(ctx) if len(ret) == 0 { @@ -163,18 +163,18 @@ func (_mock *MockAdapterInterface) Startup(ctx context.Context) error { return r0 } -// MockAdapterInterface_Startup_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'Startup' -type MockAdapterInterface_Startup_Call struct { +// MockAdapter_Startup_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'Startup' +type MockAdapter_Startup_Call struct { *mock.Call } // Startup is a helper method to define mock.On call // - ctx context.Context -func (_e *MockAdapterInterface_Expecter) Startup(ctx interface{}) *MockAdapterInterface_Startup_Call { - return &MockAdapterInterface_Startup_Call{Call: _e.mock.On("Startup", ctx)} +func (_e *MockAdapter_Expecter) Startup(ctx interface{}) *MockAdapter_Startup_Call { + return &MockAdapter_Startup_Call{Call: _e.mock.On("Startup", ctx)} } -func (_c *MockAdapterInterface_Startup_Call) Run(run func(ctx context.Context)) *MockAdapterInterface_Startup_Call { +func (_c *MockAdapter_Startup_Call) Run(run func(ctx context.Context)) *MockAdapter_Startup_Call { _c.Call.Run(func(args mock.Arguments) { var arg0 context.Context if args[0] != nil { @@ -187,18 +187,18 @@ func (_c *MockAdapterInterface_Startup_Call) Run(run func(ctx context.Context)) return _c } -func (_c *MockAdapterInterface_Startup_Call) Return(err error) *MockAdapterInterface_Startup_Call { +func (_c *MockAdapter_Startup_Call) Return(err error) *MockAdapter_Startup_Call { _c.Call.Return(err) return _c } -func (_c *MockAdapterInterface_Startup_Call) RunAndReturn(run func(ctx context.Context) error) *MockAdapterInterface_Startup_Call { +func (_c *MockAdapter_Startup_Call) RunAndReturn(run func(ctx context.Context) error) *MockAdapter_Startup_Call { _c.Call.Return(run) return _c } -// Subscribe provides a mock function for the type MockAdapterInterface -func (_mock *MockAdapterInterface) Subscribe(ctx context.Context, event SubscriptionEventConfiguration, updater resolve.SubscriptionUpdater) error { +// Subscribe provides a mock function for the type MockAdapter +func (_mock *MockAdapter) Subscribe(ctx context.Context, event SubscriptionEventConfiguration, updater resolve.SubscriptionUpdater) error { ret := _mock.Called(ctx, event, updater) if len(ret) == 0 { @@ -214,8 +214,8 @@ func (_mock *MockAdapterInterface) Subscribe(ctx context.Context, event Subscrip return r0 } -// MockAdapterInterface_Subscribe_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'Subscribe' -type MockAdapterInterface_Subscribe_Call struct { +// MockAdapter_Subscribe_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'Subscribe' +type MockAdapter_Subscribe_Call struct { *mock.Call } @@ -223,11 +223,11 @@ type MockAdapterInterface_Subscribe_Call struct { // - ctx context.Context // - event SubscriptionEventConfiguration // - updater resolve.SubscriptionUpdater -func (_e *MockAdapterInterface_Expecter) Subscribe(ctx interface{}, event interface{}, updater interface{}) *MockAdapterInterface_Subscribe_Call { - return &MockAdapterInterface_Subscribe_Call{Call: _e.mock.On("Subscribe", ctx, event, updater)} +func (_e *MockAdapter_Expecter) Subscribe(ctx interface{}, event interface{}, updater interface{}) *MockAdapter_Subscribe_Call { + return &MockAdapter_Subscribe_Call{Call: _e.mock.On("Subscribe", ctx, event, updater)} } -func (_c *MockAdapterInterface_Subscribe_Call) Run(run func(ctx context.Context, event SubscriptionEventConfiguration, updater resolve.SubscriptionUpdater)) *MockAdapterInterface_Subscribe_Call { +func (_c *MockAdapter_Subscribe_Call) Run(run func(ctx context.Context, event SubscriptionEventConfiguration, updater resolve.SubscriptionUpdater)) *MockAdapter_Subscribe_Call { _c.Call.Run(func(args mock.Arguments) { var arg0 context.Context if args[0] != nil { @@ -250,12 +250,12 @@ func (_c *MockAdapterInterface_Subscribe_Call) Run(run func(ctx context.Context, return _c } -func (_c *MockAdapterInterface_Subscribe_Call) Return(err error) *MockAdapterInterface_Subscribe_Call { +func (_c *MockAdapter_Subscribe_Call) Return(err error) *MockAdapter_Subscribe_Call { _c.Call.Return(err) return _c } -func (_c *MockAdapterInterface_Subscribe_Call) RunAndReturn(run func(ctx context.Context, event SubscriptionEventConfiguration, updater resolve.SubscriptionUpdater) error) *MockAdapterInterface_Subscribe_Call { +func (_c *MockAdapter_Subscribe_Call) RunAndReturn(run func(ctx context.Context, event SubscriptionEventConfiguration, updater resolve.SubscriptionUpdater) error) *MockAdapter_Subscribe_Call { _c.Call.Return(run) return _c } diff --git a/router/pkg/pubsub/redis/provider_builder.go b/router/pkg/pubsub/redis/provider_builder.go index 4bd7db61bc..a089f507c6 100644 --- a/router/pkg/pubsub/redis/provider_builder.go +++ b/router/pkg/pubsub/redis/provider_builder.go @@ -12,52 +12,48 @@ import ( const providerTypeID = "redis" // ProviderBuilder builds Redis PubSub providers -type PubSubProviderBuilder struct { +type ProviderBuilder struct { ctx context.Context logger *zap.Logger hostName string routerListenAddr string - adapters map[string]AdapterInterface + adapters map[string]Adapter } // NewProviderBuilder creates a new Redis PubSub provider builder -func NewPubSubProviderBuilder( +func NewProviderBuilder( ctx context.Context, logger *zap.Logger, hostName string, routerListenAddr string, -) *PubSubProviderBuilder { - return &PubSubProviderBuilder{ +) *ProviderBuilder { + return &ProviderBuilder{ ctx: ctx, logger: logger, hostName: hostName, routerListenAddr: routerListenAddr, - adapters: make(map[string]AdapterInterface), + adapters: make(map[string]Adapter), } } // TypeID returns the provider type ID -func (b *PubSubProviderBuilder) TypeID() string { +func (b *ProviderBuilder) TypeID() string { return providerTypeID } -func (p *PubSubProviderBuilder) BuildDataSourceFactory(data *nodev1.RedisEventConfiguration) *datasource.PubSubDataSourceFactory[config.RedisEventSource, *nodev1.RedisEventConfiguration] { - return datasource.NewPubSubDataSourceFactory(p, data) -} - // DataSource creates a Redis PubSub data source for the given event configuration -func (b *PubSubProviderBuilder) BuildDataSource(event *nodev1.RedisEventConfiguration) (datasource.PubSubDataSource, error) { +func (b *ProviderBuilder) BuildEngineDataSourceFactory(event *nodev1.RedisEventConfiguration) (datasource.EngineDataSourceFactory, error) { providerId := event.GetEngineEventConfiguration().GetProviderId() - return &PubSubDataSource{ + return &EngineDataSourceFactory{ EventConfiguration: event, RedisAdapter: b.adapters[providerId], }, nil } // Providers returns the Redis PubSub providers for the given provider IDs -func (b *PubSubProviderBuilder) BuildProvider(provider config.RedisEventSource) (datasource.PubSubProvider, error) { - adapter := NewAdapter(b.logger, provider.URLs) - pubSubProvider := datasource.NewPubSubProviderImpl(provider.ID, providerTypeID, adapter, b.logger) +func (b *ProviderBuilder) BuildProvider(provider config.RedisEventSource) (datasource.Provider, error) { + adapter := NewProviderAdapter(b.logger, provider.URLs) + pubSubProvider := datasource.NewPubSubProvider(provider.ID, providerTypeID, adapter, b.logger) b.adapters[provider.ID] = adapter return pubSubProvider, nil diff --git a/router/pkg/pubsub/redis/provider_builder_test.go b/router/pkg/pubsub/redis/provider_builder_test.go index c73420e50f..2cbaad10b9 100644 --- a/router/pkg/pubsub/redis/provider_builder_test.go +++ b/router/pkg/pubsub/redis/provider_builder_test.go @@ -20,7 +20,7 @@ func TestBuildRedisOptions(t *testing.T) { // Test that the provider can be built logger := zaptest.NewLogger(t) ctx := context.Background() - builder := NewPubSubProviderBuilder(ctx, logger, "host", "addr") + builder := NewProviderBuilder(ctx, logger, "host", "addr") provider, err := builder.BuildProvider(cfg) require.NoError(t, err) @@ -38,7 +38,7 @@ func TestBuildRedisOptions(t *testing.T) { // Test that the provider can be built logger := zaptest.NewLogger(t) ctx := context.Background() - builder := NewPubSubProviderBuilder(ctx, logger, "host", "addr") + builder := NewProviderBuilder(ctx, logger, "host", "addr") provider, err := builder.BuildProvider(cfg) require.NoError(t, err) @@ -61,13 +61,13 @@ func TestPubSubProviderBuilderFactory(t *testing.T) { ctx := context.Background() - builder := NewPubSubProviderBuilder(ctx, logger, "host", "addr") + builder := NewProviderBuilder(ctx, logger, "host", "addr") require.NotNil(t, builder) provider, err := builder.BuildProvider(cfg) require.NoError(t, err) // Check the returned provider - redisProvider, ok := provider.(*datasource.PubSubProviderImpl) + redisProvider, ok := provider.(*datasource.PubSubProvider) require.True(t, ok) assert.NotNil(t, redisProvider.Logger) assert.NotNil(t, redisProvider.Adapter) From f794a57d1545abd181b9c837a61cffddce950ad6 Mon Sep 17 00:00:00 2001 From: Alessandro Pagnin Date: Fri, 6 Jun 2025 13:24:52 +0200 Subject: [PATCH 106/126] chore: read redis tests --- .github/workflows/router-ci.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/router-ci.yaml b/.github/workflows/router-ci.yaml index 4ac4e62178..b2e2204f90 100644 --- a/.github/workflows/router-ci.yaml +++ b/.github/workflows/router-ci.yaml @@ -138,7 +138,7 @@ jobs: strategy: fail-fast: false matrix: - test_target: ["./. ./fuzzquery ./lifecycle ./modules", "./telemetry", "./events/events_config_test.go", "./events/nats_events_test.go", "./events/kafka_events_test.go"] + test_target: ["./. ./fuzzquery ./lifecycle ./modules", "./telemetry", "./events/events_config_test.go", "./events/nats_events_test.go", "./events/kafka_events_test.go", "./events/redis_events_test.go"] services: nats: image: ghcr.io/wundergraph/cosmo/nats:2.11.0-alpine From e6b5c6731325c40ec8b7772857097b1fd5b1c54d Mon Sep 17 00:00:00 2001 From: Alessandro Pagnin Date: Fri, 6 Jun 2025 13:55:02 +0200 Subject: [PATCH 107/126] chore: explain the MarshalJSONTemplate --- router/pkg/pubsub/kafka/engine_datasource.go | 2 ++ router/pkg/pubsub/nats/engine_datasource.go | 2 ++ 2 files changed, 4 insertions(+) diff --git a/router/pkg/pubsub/kafka/engine_datasource.go b/router/pkg/pubsub/kafka/engine_datasource.go index 55f846f088..7b82a766b0 100644 --- a/router/pkg/pubsub/kafka/engine_datasource.go +++ b/router/pkg/pubsub/kafka/engine_datasource.go @@ -25,6 +25,8 @@ type PublishEventConfiguration struct { } func (s *PublishEventConfiguration) MarshalJSONTemplate() string { + // The content of the data field could be not valid JSON, so we can't use json.Marshal + // e.g. {"id":$$0$$,"update":$$1$$} return fmt.Sprintf(`{"topic":"%s", "data": %s, "providerId":"%s"}`, s.Topic, s.Data, s.ProviderID) } diff --git a/router/pkg/pubsub/nats/engine_datasource.go b/router/pkg/pubsub/nats/engine_datasource.go index ef9300236c..ffc23ca838 100644 --- a/router/pkg/pubsub/nats/engine_datasource.go +++ b/router/pkg/pubsub/nats/engine_datasource.go @@ -32,6 +32,8 @@ type PublishAndRequestEventConfiguration struct { } func (s *PublishAndRequestEventConfiguration) MarshalJSONTemplate() string { + // The content of the data field could be not valid JSON, so we can't use json.Marshal + // e.g. {"id":$$0$$,"update":$$1$$} return fmt.Sprintf(`{"subject":"%s", "data": %s, "providerId":"%s"}`, s.Subject, s.Data, s.ProviderID) } From 03f69ebfbc8a5377be5db4a59fb1bb96596d3f09 Mon Sep 17 00:00:00 2001 From: Alessandro Pagnin Date: Fri, 6 Jun 2025 13:57:44 +0200 Subject: [PATCH 108/126] chore: fix comment --- router/pkg/pubsub/pubsub.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/router/pkg/pubsub/pubsub.go b/router/pkg/pubsub/pubsub.go index 5822953f45..9a9bf58807 100644 --- a/router/pkg/pubsub/pubsub.go +++ b/router/pkg/pubsub/pubsub.go @@ -48,8 +48,8 @@ func (e *ProviderNotDefinedError) Error() string { return fmt.Sprintf("%s provider with ID %s is not defined", e.ProviderTypeID, e.ProviderID) } -// BuildProvidersAndDataSources is a generic function that builds providers and data sources for the given provider -// builder and event configurations. +// BuildProvidersAndDataSources is a generic function that builds providers and data sources for the given +// EventsConfiguration and DataSourceConfigurationWithMetadata func BuildProvidersAndDataSources( ctx context.Context, config config.EventsConfiguration, From 605fa02ac1ad6c770afb1815aa0420cdcfa5f4ff Mon Sep 17 00:00:00 2001 From: Alessandro Pagnin Date: Fri, 6 Jun 2025 18:06:52 +0200 Subject: [PATCH 109/126] chore: fix redis tests --- router-tests/events/redis_events_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/router-tests/events/redis_events_test.go b/router-tests/events/redis_events_test.go index ef508b0ca7..d82d0eb5cc 100644 --- a/router-tests/events/redis_events_test.go +++ b/router-tests/events/redis_events_test.go @@ -51,7 +51,7 @@ func assertRedisMultipartValueEventually(t *testing.T, reader *bufio.Reader, exp } assert.Equal(t, expected, string(line)) return true - }, NatsWaitTimeout, time.Millisecond*100) + }, RedisWaitTimeout, time.Millisecond*100) } func TestRedisEvents(t *testing.T) { From 76b957d354723069b45160690471298ec4008ef9 Mon Sep 17 00:00:00 2001 From: Alessandro Pagnin Date: Mon, 9 Jun 2025 09:55:48 +0200 Subject: [PATCH 110/126] chore: fix mockery config --- router/.mockery.yml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/router/.mockery.yml b/router/.mockery.yml index 1363cee5ec..c835d3af50 100644 --- a/router/.mockery.yml +++ b/router/.mockery.yml @@ -20,16 +20,16 @@ packages: github.com/wundergraph/cosmo/router/pkg/pubsub/nats: interfaces: Adapter: - github.com/wundergraph/cosmo/router/pkg/pubsub/kafka: - interfaces: - Adapter: - github.com/wundergraph/cosmo/router/pkg/pubsub/redis: - interfaces: - Adapter: + github.com/wundergraph/cosmo/router/pkg/pubsub/kafka: + interfaces: + Adapter: + github.com/wundergraph/cosmo/router/pkg/pubsub/redis: + interfaces: + Adapter: github.com/wundergraph/graphql-go-tools/v2/pkg/engine/resolve: config: dir: 'pkg/pubsub/datasource' pkgname: 'datasource' filename: 'mocks_resolve.go' interfaces: - SubscriptionUpdater:all: false \ No newline at end of file + SubscriptionUpdater: \ No newline at end of file From 1348137d15f70af00467c10c0de261f4c6fbf079 Mon Sep 17 00:00:00 2001 From: Alessandro Pagnin Date: Mon, 9 Jun 2025 10:38:11 +0200 Subject: [PATCH 111/126] chore: go back to basic runner --- .github/workflows/router-ci.yaml | 2 +- router-tests/testenv/testenv.go | 14 ++------------ 2 files changed, 3 insertions(+), 13 deletions(-) diff --git a/.github/workflows/router-ci.yaml b/.github/workflows/router-ci.yaml index b2e2204f90..f41c7117eb 100644 --- a/.github/workflows/router-ci.yaml +++ b/.github/workflows/router-ci.yaml @@ -133,7 +133,7 @@ jobs: run: make build integration_test: - runs-on: ubuntu-latest-xl + runs-on: ubuntu-latest timeout-minutes: 30 strategy: fail-fast: false diff --git a/router-tests/testenv/testenv.go b/router-tests/testenv/testenv.go index efa181cfa9..35ff4955d2 100644 --- a/router-tests/testenv/testenv.go +++ b/router-tests/testenv/testenv.go @@ -415,11 +415,6 @@ func CreateTestSupervisorEnv(t testing.TB, cfg *Config) (*Environment, error) { natsSetup = s } - var enableRedis bool - if cfg.EnableRedis { - enableRedis = true - } - if cfg.AssertCacheMetrics != nil { if cfg.MetricReader == nil { cfg.MetricReader = metric.NewManualReader() @@ -764,7 +759,7 @@ func CreateTestSupervisorEnv(t testing.TB, cfg *Config) (*Environment, error) { e.NatsConnectionMyNats = natsSetup.Connections[1] } - if enableRedis { + if cfg.EnableRedis { e.RedisHosts = []string{redisHost} } @@ -825,11 +820,6 @@ func CreateTestEnv(t testing.TB, cfg *Config) (*Environment, error) { natsSetup = s } - var enableRedis bool - if cfg.EnableRedis { - enableRedis = true - } - if cfg.AssertCacheMetrics != nil { if cfg.MetricReader == nil { cfg.MetricReader = metric.NewManualReader() @@ -1166,7 +1156,7 @@ func CreateTestEnv(t testing.TB, cfg *Config) (*Environment, error) { e.NatsConnectionMyNats = natsSetup.Connections[1] } - if enableRedis { + if cfg.EnableRedis { e.RedisHosts = []string{redisHost} } From e8ea17b0499dedc849a791770f645959a11bf913 Mon Sep 17 00:00:00 2001 From: Alessandro Pagnin Date: Mon, 9 Jun 2025 10:59:31 +0200 Subject: [PATCH 112/126] chore: restore runner ubuntu-latest-xl --- .github/workflows/router-ci.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/router-ci.yaml b/.github/workflows/router-ci.yaml index f41c7117eb..b2e2204f90 100644 --- a/.github/workflows/router-ci.yaml +++ b/.github/workflows/router-ci.yaml @@ -133,7 +133,7 @@ jobs: run: make build integration_test: - runs-on: ubuntu-latest + runs-on: ubuntu-latest-xl timeout-minutes: 30 strategy: fail-fast: false From f3b1e82fc2a50951299dc5e7794adbba7f6cb8e1 Mon Sep 17 00:00:00 2001 From: Alessandro Pagnin Date: Mon, 9 Jun 2025 11:23:37 +0200 Subject: [PATCH 113/126] chore: change runner to ubuntu-latest-l --- .github/workflows/router-ci.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/router-ci.yaml b/.github/workflows/router-ci.yaml index b2e2204f90..6bcead88ad 100644 --- a/.github/workflows/router-ci.yaml +++ b/.github/workflows/router-ci.yaml @@ -133,7 +133,7 @@ jobs: run: make build integration_test: - runs-on: ubuntu-latest-xl + runs-on: ubuntu-latest-l timeout-minutes: 30 strategy: fail-fast: false From 299d2c451903b2248f1462769f9ecad76feaaa68 Mon Sep 17 00:00:00 2001 From: Alessandro Pagnin Date: Mon, 9 Jun 2025 15:27:44 +0200 Subject: [PATCH 114/126] feat: add redis cluster support --- router/debug.config.yaml | 4 ++ router/full-demo.config.yaml | 6 ++- router/pkg/config/config.go | 5 +- router/pkg/config/config.schema.json | 6 +++ router/pkg/config/config_events_redis_test.go | 50 +++++++++++++++++++ router/pkg/config/fixtures/full.yaml | 1 + router/pkg/config/testdata/config_full.json | 3 +- router/pkg/pubsub/redis/adapter.go | 9 ++-- router/pkg/pubsub/redis/provider_builder.go | 2 +- 9 files changed, 78 insertions(+), 8 deletions(-) create mode 100644 router/pkg/config/config_events_redis_test.go diff --git a/router/debug.config.yaml b/router/debug.config.yaml index 251fa4ae7f..bed83ed3b5 100644 --- a/router/debug.config.yaml +++ b/router/debug.config.yaml @@ -36,3 +36,7 @@ events: - id: my-kafka brokers: - 'localhost:9092' + redis: + - id: my-redis + urls: + - 'redis://localhost:6379/2' \ No newline at end of file diff --git a/router/full-demo.config.yaml b/router/full-demo.config.yaml index 6bbffa6b77..df7e7cc8c4 100644 --- a/router/full-demo.config.yaml +++ b/router/full-demo.config.yaml @@ -15,4 +15,8 @@ events: kafka: - id: my-kafka brokers: - - "kafka:9092" \ No newline at end of file + - "kafka:9092" + redis: + - id: my-redis + urls: + - "redis://localhost:6379/2" \ No newline at end of file diff --git a/router/pkg/config/config.go b/router/pkg/config/config.go index 5dd3489526..857fb3e897 100644 --- a/router/pkg/config/config.go +++ b/router/pkg/config/config.go @@ -544,8 +544,9 @@ func (k KafkaEventSource) GetID() string { } type RedisEventSource struct { - ID string `yaml:"id,omitempty" env:"STORAGE_PROVIDER_REDIS_ID"` - URLs []string `yaml:"urls,omitempty" env:"STORAGE_PROVIDER_REDIS_URLS"` + ID string `yaml:"id,omitempty"` + URLs []string `yaml:"urls,omitempty"` + ClusterEnabled bool `yaml:"cluster_enabled"` } func (r RedisEventSource) GetID() string { diff --git a/router/pkg/config/config.schema.json b/router/pkg/config/config.schema.json index 67d89c9ef0..3537aba100 100644 --- a/router/pkg/config/config.schema.json +++ b/router/pkg/config/config.schema.json @@ -2056,9 +2056,15 @@ "urls": { "type": "array", "description": "The list of Redis URLs. An example of URL is \"redis://username:password@localhost:6379/11\"", + "minItems": 1, "items": { "type": "string" } + }, + "cluster_enabled": { + "type": "boolean", + "description": "Enable the Redis cluster. If enabled, the Redis cluster is used to connect to the Redis provider.", + "default": false } } } diff --git a/router/pkg/config/config_events_redis_test.go b/router/pkg/config/config_events_redis_test.go new file mode 100644 index 0000000000..bd23bbe7cf --- /dev/null +++ b/router/pkg/config/config_events_redis_test.go @@ -0,0 +1,50 @@ +package config + +import ( + "testing" + + "github.com/stretchr/testify/require" +) + +func TestFullValidRedisProvider(t *testing.T) { + t.Parallel() + + f := createTempFileFromFixture(t, ` +version: "1" + +graph: + token: "token" +events: + providers: + redis: + - id: my-redis + urls: + - "redis://localhost:6379" + cluster_enabled: true + +`) + + _, err := LoadConfig(f) + require.NoError(t, err) +} + +func TestInvalidRedisProviderWithoutUrl(t *testing.T) { + t.Parallel() + + f := createTempFileFromFixture(t, ` +version: "1" + +graph: + token: "token" + +events: + providers: + redis: + - id: my-redis + urls: [] + +`) + + _, err := LoadConfig(f) + require.ErrorContains(t, err, "router config validation error: jsonschema validation failed with 'https://raw.githubusercontent.com/wundergraph/cosmo/main/router/pkg/config/config.schema.json#'\n- at '/events/providers/redis/0/urls': minItems: got 0, want 1") +} diff --git a/router/pkg/config/fixtures/full.yaml b/router/pkg/config/fixtures/full.yaml index 60e38eca34..9a891bc8f1 100644 --- a/router/pkg/config/fixtures/full.yaml +++ b/router/pkg/config/fixtures/full.yaml @@ -314,6 +314,7 @@ events: - id: my-redis urls: - "redis://localhost:6379/11" + cluster_enabled: true engine: enable_single_flight: true diff --git a/router/pkg/config/testdata/config_full.json b/router/pkg/config/testdata/config_full.json index 9a22e20c6e..3a12e197be 100644 --- a/router/pkg/config/testdata/config_full.json +++ b/router/pkg/config/testdata/config_full.json @@ -552,7 +552,8 @@ "ID": "my-redis", "URLs": [ "redis://localhost:6379/11" - ] + ], + "ClusterEnabled": true } ] } diff --git a/router/pkg/pubsub/redis/adapter.go b/router/pkg/pubsub/redis/adapter.go index 824434baff..37a4465b73 100644 --- a/router/pkg/pubsub/redis/adapter.go +++ b/router/pkg/pubsub/redis/adapter.go @@ -23,11 +23,11 @@ type Adapter interface { Shutdown(ctx context.Context) error } -func NewProviderAdapter(logger *zap.Logger, urls []string) Adapter { +func NewProviderAdapter(logger *zap.Logger, urls []string, clusterEnabled bool) Adapter { return &ProviderAdapter{ logger: logger, urls: urls, - clusterEnabled: false, + clusterEnabled: clusterEnabled, } } @@ -79,7 +79,10 @@ func (p *ProviderAdapter) Subscribe(ctx context.Context, event SubscriptionEvent log.Debug("subscription update", zap.String("message_channel", msg.Channel), zap.String("data", msg.Payload)) updater.Update([]byte(msg.Payload)) case <-ctx.Done(): - // When the application context is done, we stop the subscriptions + // When the application context is done, we stop the subscriptions if it is not already done + if sub == nil { + return + } err = sub.PUnsubscribe(ctx, event.Channels...) if err != nil { log.Error(fmt.Sprintf("error unsubscribing from redis for topics %v", event.Channels), zap.Error(err)) diff --git a/router/pkg/pubsub/redis/provider_builder.go b/router/pkg/pubsub/redis/provider_builder.go index a089f507c6..5a7b0598d7 100644 --- a/router/pkg/pubsub/redis/provider_builder.go +++ b/router/pkg/pubsub/redis/provider_builder.go @@ -52,7 +52,7 @@ func (b *ProviderBuilder) BuildEngineDataSourceFactory(event *nodev1.RedisEventC // Providers returns the Redis PubSub providers for the given provider IDs func (b *ProviderBuilder) BuildProvider(provider config.RedisEventSource) (datasource.Provider, error) { - adapter := NewProviderAdapter(b.logger, provider.URLs) + adapter := NewProviderAdapter(b.logger, provider.URLs, provider.ClusterEnabled) pubSubProvider := datasource.NewPubSubProvider(provider.ID, providerTypeID, adapter, b.logger) b.adapters[provider.ID] = adapter From 2cfd1c1caf5fa18dcc2655d75598d84e884052e9 Mon Sep 17 00:00:00 2001 From: Alessandro Pagnin Date: Tue, 10 Jun 2025 10:44:37 +0200 Subject: [PATCH 115/126] chore: fixed redis adapter behaviour on shutdown and removed nodeev1 usage --- router/pkg/pubsub/redis/adapter.go | 57 +++++++-- .../pubsub/redis/engine_datasource_factory.go | 60 ++++++--- .../redis/engine_datasource_factory_test.go | 118 ++++++++++-------- router/pkg/pubsub/redis/provider_builder.go | 9 +- 4 files changed, 156 insertions(+), 88 deletions(-) diff --git a/router/pkg/pubsub/redis/adapter.go b/router/pkg/pubsub/redis/adapter.go index 37a4465b73..3efcabbf92 100644 --- a/router/pkg/pubsub/redis/adapter.go +++ b/router/pkg/pubsub/redis/adapter.go @@ -23,8 +23,11 @@ type Adapter interface { Shutdown(ctx context.Context) error } -func NewProviderAdapter(logger *zap.Logger, urls []string, clusterEnabled bool) Adapter { +func NewProviderAdapter(ctx context.Context, logger *zap.Logger, urls []string, clusterEnabled bool) Adapter { + ctx, cancel := context.WithCancel(ctx) return &ProviderAdapter{ + ctx: ctx, + cancel: cancel, logger: logger, urls: urls, clusterEnabled: clusterEnabled, @@ -32,6 +35,8 @@ func NewProviderAdapter(logger *zap.Logger, urls []string, clusterEnabled bool) } type ProviderAdapter struct { + ctx context.Context + cancel context.CancelFunc conn rd.RDCloser logger *zap.Logger closeWg sync.WaitGroup @@ -55,6 +60,17 @@ func (p *ProviderAdapter) Startup(ctx context.Context) error { } func (p *ProviderAdapter) Shutdown(ctx context.Context) error { + if p.conn == nil { + return nil + } + + // Cancel the context to stop the subscriptions + p.cancel() + + // Wait for the subscriptions to be closed + p.closeWg.Wait() + + // Close the connection return p.conn.Close() } @@ -67,32 +83,46 @@ func (p *ProviderAdapter) Subscribe(ctx context.Context, event SubscriptionEvent sub := p.conn.PSubscribe(ctx, event.Channels...) msgChan := sub.Channel() + cleanup := func() { + err := sub.PUnsubscribe(ctx, event.Channels...) + if err != nil { + log.Error(fmt.Sprintf("error unsubscribing from redis for topics %v", event.Channels), zap.Error(err)) + } + } + p.closeWg.Add(1) - var err error go func() { defer p.closeWg.Done() for { select { - case msg := <-msgChan: - log.Debug("subscription update", zap.String("message_channel", msg.Channel), zap.String("data", msg.Payload)) - updater.Update([]byte(msg.Payload)) - case <-ctx.Done(): - // When the application context is done, we stop the subscriptions if it is not already done - if sub == nil { + case msg, ok := <-msgChan: + if !ok { + log.Debug("subscription closed, stopping") return } - err = sub.PUnsubscribe(ctx, event.Channels...) - if err != nil { - log.Error(fmt.Sprintf("error unsubscribing from redis for topics %v", event.Channels), zap.Error(err)) + if msg == nil { + log.Debug("empty message received on subscription update, skipping") + return } + log.Debug("subscription update", zap.String("message_channel", msg.Channel), zap.String("data", msg.Payload)) + updater.Update([]byte(msg.Payload)) + case <-p.ctx.Done(): + // When the application context is done, we stop the subscription if it is not already done + log.Debug("application context done, stopping subscription") + cleanup() + return + case <-ctx.Done(): + // When the subscription context is done, we stop the subscription if it is not already done + log.Debug("subscription context done, stopping subscription") + cleanup() return } } }() - return err + return nil } func (p *ProviderAdapter) Publish(ctx context.Context, event PublishEventConfiguration) error { @@ -109,6 +139,9 @@ func (p *ProviderAdapter) Publish(ctx context.Context, event PublishEventConfigu log.Error("error marshalling data", zap.Error(dataErr)) return datasource.NewError("error marshalling data", dataErr) } + if p.conn == nil { + return datasource.NewError("redis connection not initialized", nil) + } intCmd := p.conn.Publish(ctx, event.Channel, data) if intCmd.Err() != nil { log.Error("publish error", zap.Error(intCmd.Err())) diff --git a/router/pkg/pubsub/redis/engine_datasource_factory.go b/router/pkg/pubsub/redis/engine_datasource_factory.go index c2689c188b..c5383ff16a 100644 --- a/router/pkg/pubsub/redis/engine_datasource_factory.go +++ b/router/pkg/pubsub/redis/engine_datasource_factory.go @@ -3,39 +3,45 @@ package redis import ( "encoding/json" "fmt" + "slices" - nodev1 "github.com/wundergraph/cosmo/router/gen/proto/wg/cosmo/node/v1" "github.com/wundergraph/cosmo/router/pkg/pubsub/datasource" "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/resolve" ) +type EventType int + +const ( + EventTypePublish EventType = iota + EventTypeSubscribe +) + // EngineDataSourceFactory implements the datasource.EngineDataSourceFactory interface for Redis type EngineDataSourceFactory struct { - EventConfiguration *nodev1.RedisEventConfiguration - RedisAdapter Adapter -} + RedisAdapter Adapter -func (c *EngineDataSourceFactory) GetFieldName() string { - return c.EventConfiguration.GetEngineEventConfiguration().GetFieldName() + fieldName string + eventType EventType + channels []string + providerId string } -// EngineEventConfiguration returns the engine event configuration -func (c *EngineDataSourceFactory) EngineEventConfiguration() *nodev1.EngineEventConfiguration { - return c.EventConfiguration.GetEngineEventConfiguration() +func (c *EngineDataSourceFactory) GetFieldName() string { + return c.fieldName } // ResolveDataSource returns the appropriate data source based on the event type func (c *EngineDataSourceFactory) ResolveDataSource() (resolve.DataSource, error) { var dataSource resolve.DataSource - eventType := c.EventConfiguration.GetEngineEventConfiguration().GetType() + eventType := c.eventType switch eventType { - case nodev1.EventType_PUBLISH: + case EventTypePublish: dataSource = &PublishDataSource{ pubSub: c.RedisAdapter, } default: - return nil, fmt.Errorf("failed to configure fetch: invalid event type \"%s\" for Redis", eventType.String()) + return nil, fmt.Errorf("failed to configure fetch: invalid event type \"%d\" for Redis", eventType) } return dataSource, nil @@ -43,14 +49,14 @@ func (c *EngineDataSourceFactory) ResolveDataSource() (resolve.DataSource, error // ResolveDataSourceInput builds the input for the data source func (c *EngineDataSourceFactory) ResolveDataSourceInput(eventData []byte) (string, error) { - channels := c.EventConfiguration.GetChannels() + channels := c.channels if len(channels) != 1 { return "", fmt.Errorf("publish events should define one channel but received %d", len(channels)) } channel := channels[0] - providerId := c.EventConfiguration.GetEngineEventConfiguration().GetProviderId() + providerId := c.providerId evtCfg := PublishEventConfiguration{ ProviderID: providerId, @@ -70,10 +76,9 @@ func (c *EngineDataSourceFactory) ResolveDataSourceSubscription() (resolve.Subsc // ResolveDataSourceSubscriptionInput builds the input for the subscription data source func (c *EngineDataSourceFactory) ResolveDataSourceSubscriptionInput() (string, error) { - providerId := c.EventConfiguration.GetEngineEventConfiguration().GetProviderId() evtCfg := SubscriptionEventConfiguration{ - ProviderID: providerId, - Channels: c.EventConfiguration.GetChannels(), + ProviderID: c.providerId, + Channels: c.channels, } object, err := json.Marshal(evtCfg) if err != nil { @@ -84,6 +89,25 @@ func (c *EngineDataSourceFactory) ResolveDataSourceSubscriptionInput() (string, // TransformEventData transforms the event data using the extract function func (c *EngineDataSourceFactory) TransformEventData(extractFn datasource.ArgumentTemplateCallback) error { - // No operation needed until full proto support is added + switch c.eventType { + case EventTypePublish: + extractedChannel, err := extractFn(c.channels[0]) + if err != nil { + return fmt.Errorf("unable to parse channel with id %s", c.channels[0]) + } + c.channels = []string{extractedChannel} + case EventTypeSubscribe: + extractedChannels := make([]string, 0, len(c.channels)) + for _, rawChannel := range c.channels { + extractedChannel, err := extractFn(rawChannel) + if err != nil { + return nil + } + extractedChannels = append(extractedChannels, extractedChannel) + } + slices.Sort(extractedChannels) + c.channels = extractedChannels + } + return nil } diff --git a/router/pkg/pubsub/redis/engine_datasource_factory_test.go b/router/pkg/pubsub/redis/engine_datasource_factory_test.go index 859f7465ee..0c1344048a 100644 --- a/router/pkg/pubsub/redis/engine_datasource_factory_test.go +++ b/router/pkg/pubsub/redis/engine_datasource_factory_test.go @@ -8,7 +8,6 @@ import ( "github.com/stretchr/testify/mock" "github.com/stretchr/testify/require" - nodev1 "github.com/wundergraph/cosmo/router/gen/proto/wg/cosmo/node/v1" "github.com/wundergraph/cosmo/router/pkg/pubsub/pubsubtest" ) @@ -16,15 +15,10 @@ func TestRedisEngineDataSourceFactory(t *testing.T) { // Create the data source to test with a real adapter adapter := &ProviderAdapter{} pubsub := &EngineDataSourceFactory{ - EventConfiguration: &nodev1.RedisEventConfiguration{ - EngineEventConfiguration: &nodev1.EngineEventConfiguration{ - FieldName: "testField", - TypeName: "TestType", - Type: nodev1.EventType_PUBLISH, - ProviderId: "test-provider", - }, - Channels: []string{"test-channel"}, - }, + fieldName: "testField", + eventType: EventTypePublish, + channels: []string{"test-channel"}, + providerId: "test-provider", RedisAdapter: adapter, } @@ -44,15 +38,10 @@ func TestEngineDataSourceFactoryWithMockAdapter(t *testing.T) { // Create the data source with mock adapter pubsub := &EngineDataSourceFactory{ - EventConfiguration: &nodev1.RedisEventConfiguration{ - EngineEventConfiguration: &nodev1.EngineEventConfiguration{ - FieldName: "testField", - TypeName: "TestType", - Type: nodev1.EventType_PUBLISH, - ProviderId: "test-provider", - }, - Channels: []string{"test-channel"}, - }, + fieldName: "testField", + eventType: EventTypePublish, + channels: []string{"test-channel"}, + providerId: "test-provider", RedisAdapter: mockAdapter, } @@ -78,15 +67,10 @@ func TestEngineDataSourceFactory_GetResolveDataSource_WrongType(t *testing.T) { // Create the data source with mock adapter pubsub := &EngineDataSourceFactory{ - EventConfiguration: &nodev1.RedisEventConfiguration{ - EngineEventConfiguration: &nodev1.EngineEventConfiguration{ - FieldName: "testField", - TypeName: "TestType", - Type: nodev1.EventType_SUBSCRIBE, - ProviderId: "test-provider", - }, - Channels: []string{"test-channel"}, - }, + fieldName: "testField", + eventType: EventTypeSubscribe, + channels: []string{"test-channel"}, + providerId: "test-provider", RedisAdapter: mockAdapter, } @@ -100,15 +84,10 @@ func TestEngineDataSourceFactory_GetResolveDataSource_WrongType(t *testing.T) { func TestEngineDataSourceFactory_GetResolveDataSourceInput_MultipleChannels(t *testing.T) { // Create the data source with mock adapter pubsub := &EngineDataSourceFactory{ - EventConfiguration: &nodev1.RedisEventConfiguration{ - EngineEventConfiguration: &nodev1.EngineEventConfiguration{ - FieldName: "testField", - TypeName: "TestType", - Type: nodev1.EventType_PUBLISH, - ProviderId: "test-provider", - }, - Channels: []string{"test-channel-1", "test-channel-2"}, - }, + fieldName: "testField", + eventType: EventTypePublish, + channels: []string{"test-channel-1", "test-channel-2"}, + providerId: "test-provider", } // Get the input @@ -121,15 +100,10 @@ func TestEngineDataSourceFactory_GetResolveDataSourceInput_MultipleChannels(t *t func TestEngineDataSourceFactory_GetResolveDataSourceInput_NoChannels(t *testing.T) { // Create the data source with mock adapter pubsub := &EngineDataSourceFactory{ - EventConfiguration: &nodev1.RedisEventConfiguration{ - EngineEventConfiguration: &nodev1.EngineEventConfiguration{ - FieldName: "testField", - TypeName: "TestType", - Type: nodev1.EventType_PUBLISH, - ProviderId: "test-provider", - }, - Channels: []string{}, - }, + fieldName: "testField", + eventType: EventTypePublish, + channels: []string{}, + providerId: "test-provider", } // Get the input @@ -144,15 +118,10 @@ func TestEngineDataSourceFactory_GetResolveDataSourceInput_NoChannels(t *testing func TestRedisEngineDataSourceFactoryMultiChannelSubscription(t *testing.T) { // Create the data source to test with mock adapter pubsub := &EngineDataSourceFactory{ - EventConfiguration: &nodev1.RedisEventConfiguration{ - EngineEventConfiguration: &nodev1.EngineEventConfiguration{ - FieldName: "testField", - TypeName: "TestType", - Type: nodev1.EventType_PUBLISH, - ProviderId: "test-provider", - }, - Channels: []string{"test-channel-1", "test-channel-2"}, - }, + fieldName: "testField", + eventType: EventTypePublish, + channels: []string{"test-channel-1", "test-channel-2"}, + providerId: "test-provider", } // Test GetResolveDataSourceSubscriptionInput @@ -168,3 +137,42 @@ func TestRedisEngineDataSourceFactoryMultiChannelSubscription(t *testing.T) { require.Equal(t, "test-channel-1", subscriptionConfig.Channels[0], "Expected first channel to be 'test-channel-1'") require.Equal(t, "test-channel-2", subscriptionConfig.Channels[1], "Expected second channel to be 'test-channel-2'") } + +func TestTransformEventConfig(t *testing.T) { + t.Run("publish event", func(t *testing.T) { + cfg := &EngineDataSourceFactory{ + providerId: "test-provider", + eventType: EventTypePublish, + channels: []string{"original.subject"}, + fieldName: "testField", + } + + // Simple transform function that adds "transformed." prefix + transformFn := func(s string) (string, error) { + return "transformed." + s, nil + } + + err := cfg.TransformEventData(transformFn) + require.NoError(t, err) + require.Equal(t, []string{"transformed.original.subject"}, cfg.channels) + }) + + t.Run("subscribe event", func(t *testing.T) { + cfg := &EngineDataSourceFactory{ + providerId: "test-provider", + eventType: EventTypeSubscribe, + channels: []string{"original.subject1", "original.subject2"}, + fieldName: "testField", + } + + // Simple transform function that adds "transformed." prefix + transformFn := func(s string) (string, error) { + return "transformed." + s, nil + } + + err := cfg.TransformEventData(transformFn) + require.NoError(t, err) + // Since the function sorts the subjects + require.Equal(t, []string{"transformed.original.subject1", "transformed.original.subject2"}, cfg.channels) + }) +} diff --git a/router/pkg/pubsub/redis/provider_builder.go b/router/pkg/pubsub/redis/provider_builder.go index 5a7b0598d7..19161084bc 100644 --- a/router/pkg/pubsub/redis/provider_builder.go +++ b/router/pkg/pubsub/redis/provider_builder.go @@ -45,14 +45,17 @@ func (b *ProviderBuilder) TypeID() string { func (b *ProviderBuilder) BuildEngineDataSourceFactory(event *nodev1.RedisEventConfiguration) (datasource.EngineDataSourceFactory, error) { providerId := event.GetEngineEventConfiguration().GetProviderId() return &EngineDataSourceFactory{ - EventConfiguration: event, - RedisAdapter: b.adapters[providerId], + RedisAdapter: b.adapters[providerId], + fieldName: event.GetEngineEventConfiguration().GetFieldName(), + eventType: EventTypePublish, + channels: event.GetChannels(), + providerId: providerId, }, nil } // Providers returns the Redis PubSub providers for the given provider IDs func (b *ProviderBuilder) BuildProvider(provider config.RedisEventSource) (datasource.Provider, error) { - adapter := NewProviderAdapter(b.logger, provider.URLs, provider.ClusterEnabled) + adapter := NewProviderAdapter(b.ctx, b.logger, provider.URLs, provider.ClusterEnabled) pubSubProvider := datasource.NewPubSubProvider(provider.ID, providerTypeID, adapter, b.logger) b.adapters[provider.ID] = adapter From 7ac3b925bc69075896ea61e5123f85d221e42d54 Mon Sep 17 00:00:00 2001 From: Alessandro Pagnin Date: Tue, 10 Jun 2025 11:51:45 +0200 Subject: [PATCH 116/126] fix: redis event mapping --- router/pkg/pubsub/redis/provider_builder.go | 22 ++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/router/pkg/pubsub/redis/provider_builder.go b/router/pkg/pubsub/redis/provider_builder.go index 19161084bc..415963b885 100644 --- a/router/pkg/pubsub/redis/provider_builder.go +++ b/router/pkg/pubsub/redis/provider_builder.go @@ -2,6 +2,7 @@ package redis import ( "context" + "fmt" nodev1 "github.com/wundergraph/cosmo/router/gen/proto/wg/cosmo/node/v1" "github.com/wundergraph/cosmo/router/pkg/config" @@ -42,13 +43,24 @@ func (b *ProviderBuilder) TypeID() string { } // DataSource creates a Redis PubSub data source for the given event configuration -func (b *ProviderBuilder) BuildEngineDataSourceFactory(event *nodev1.RedisEventConfiguration) (datasource.EngineDataSourceFactory, error) { - providerId := event.GetEngineEventConfiguration().GetProviderId() +func (b *ProviderBuilder) BuildEngineDataSourceFactory(data *nodev1.RedisEventConfiguration) (datasource.EngineDataSourceFactory, error) { + providerId := data.GetEngineEventConfiguration().GetProviderId() + + var eventType EventType + switch data.GetEngineEventConfiguration().GetType() { + case nodev1.EventType_PUBLISH: + eventType = EventTypePublish + case nodev1.EventType_SUBSCRIBE: + eventType = EventTypeSubscribe + default: + return nil, fmt.Errorf("unsupported event type: %s", data.GetEngineEventConfiguration().GetType()) + } + return &EngineDataSourceFactory{ RedisAdapter: b.adapters[providerId], - fieldName: event.GetEngineEventConfiguration().GetFieldName(), - eventType: EventTypePublish, - channels: event.GetChannels(), + fieldName: data.GetEngineEventConfiguration().GetFieldName(), + eventType: eventType, + channels: data.GetChannels(), providerId: providerId, }, nil } From e2553f3a5f581cff15f7ee315f571b521b2da3a3 Mon Sep 17 00:00:00 2001 From: Alessandro Pagnin Date: Tue, 10 Jun 2025 12:28:45 +0200 Subject: [PATCH 117/126] test: add redis cluster tests --- router-tests/events/redis_events_test.go | 123 +++++++++++++++++++++-- router-tests/testenv/testenv.go | 22 ++++ 2 files changed, 139 insertions(+), 6 deletions(-) diff --git a/router-tests/events/redis_events_test.go b/router-tests/events/redis_events_test.go index d82d0eb5cc..c893cbb89f 100644 --- a/router-tests/events/redis_events_test.go +++ b/router-tests/events/redis_events_test.go @@ -928,6 +928,102 @@ func TestRedisEvents(t *testing.T) { }) } +func TestRedisClusterEvents(t *testing.T) { + t.Parallel() + + if testing.Short() { + t.Skip("skipping test in short mode.") + } + + t.Run("subscribe async", func(t *testing.T) { + t.Parallel() + + topics := []string{"employeeUpdatedMyRedis"} + + testenv.Run(t, &testenv.Config{ + RouterConfigJSONTemplate: testenv.ConfigWithEdfsRedisJSONTemplate, + EnableRedisCluster: true, + }, func(t *testing.T, xEnv *testenv.Environment) { + var subscriptionOne struct { + employeeUpdates struct { + ID float64 `graphql:"id"` + Details struct { + Forename string `graphql:"forename"` + Surname string `graphql:"surname"` + } `graphql:"details"` + } `graphql:"employeeUpdates"` + } + + surl := xEnv.GraphQLWebSocketSubscriptionURL() + client := graphql.NewSubscriptionClient(surl) + t.Cleanup(func() { + _ = client.Close() + }) + + var counter atomic.Uint32 + + subscriptionOneID, err := client.Subscribe(&subscriptionOne, nil, func(dataValue []byte, errValue error) error { + defer counter.Add(1) + require.NoError(t, errValue) + require.JSONEq(t, `{"employeeUpdates":{"id":1,"details":{"forename":"Jens","surname":"Neuse"}}}`, string(dataValue)) + return nil + }) + require.NoError(t, err) + require.NotEmpty(t, subscriptionOneID) + + go func() { + clientErr := client.Run() + require.NoError(t, clientErr) + }() + + go func() { + require.Eventually(t, func() bool { + return counter.Load() == 1 + }, RedisWaitTimeout, time.Millisecond*100) + _ = client.Close() + }() + + xEnv.WaitForSubscriptionCount(1, RedisWaitTimeout) + + produceRedisMessage(t, xEnv, topics[0], `{"__typename":"Employee","id": 1,"update":{"name":"foo"}}`) + + xEnv.WaitForMessagesSent(1, RedisWaitTimeout) + xEnv.WaitForSubscriptionCount(0, RedisWaitTimeout) + xEnv.WaitForConnectionCount(0, RedisWaitTimeout) + }) + }) + + t.Run("mutate", func(t *testing.T) { + t.Parallel() + + channels := []string{"employeeUpdatedMyRedis"} + + testenv.Run(t, &testenv.Config{ + RouterConfigJSONTemplate: testenv.ConfigWithEdfsRedisJSONTemplate, + EnableRedisCluster: true, + NoRetryClient: true, + }, func(t *testing.T, xEnv *testenv.Environment) { + var msgCh <-chan *redis.Message + var started atomic.Bool + go func() { + var err error + msgCh, err = readRedisMessages(t, xEnv, channels[0]) + started.Store(true) + require.NoError(t, err) + }() + require.Eventually(t, started.Load, RedisWaitTimeout, time.Millisecond*100) + // Send a mutation to trigger the first subscription + resOne := xEnv.MakeGraphQLRequestOK(testenv.GraphQLRequest{ + Query: `mutation { updateEmployeeMyRedis(id: 3, update: {name: "name test"}) { success } }`, + }) + require.JSONEq(t, `{"data":{"updateEmployeeMyRedis":{"success":true}}}`, resOne.Body) + m := <-msgCh + require.Equal(t, `{"id":3,"update":{"name":"name test"}}`, m.Payload) + }) + }) + +} + func produceRedisMessage(t *testing.T, xEnv *testenv.Environment, topicName string, message string) { ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) defer cancel() @@ -936,9 +1032,17 @@ func produceRedisMessage(t *testing.T, xEnv *testenv.Environment, topicName stri if err != nil { t.Fatalf("Failed to parse Redis URL: %v", err) } - redisConn := redis.NewClient(&redis.Options{ - Addr: parsedURL.Host, - }) + var redisConn redis.UniversalClient + if !xEnv.RedisWithClusterMode { + redisConn = redis.NewClient(&redis.Options{ + Addr: parsedURL.Host, + }) + } else { + redisConn = redis.NewClusterClient(&redis.ClusterOptions{ + Addrs: []string{parsedURL.Host}, + }) + } + intCmd := redisConn.Publish(ctx, xEnv.GetPubSubName(topicName), message) require.NoError(t, intCmd.Err()) } @@ -951,9 +1055,16 @@ func readRedisMessages(t *testing.T, xEnv *testenv.Environment, channelName stri if err != nil { return nil, err } - redisConn := redis.NewClient(&redis.Options{ - Addr: parsedURL.Host, - }) + var redisConn redis.UniversalClient + if !xEnv.RedisWithClusterMode { + redisConn = redis.NewClient(&redis.Options{ + Addr: parsedURL.Host, + }) + } else { + redisConn = redis.NewClusterClient(&redis.ClusterOptions{ + Addrs: []string{parsedURL.Host}, + }) + } sub := redisConn.Subscribe(ctx, xEnv.GetPubSubName(channelName)) t.Cleanup(func() { sub.Close() diff --git a/router-tests/testenv/testenv.go b/router-tests/testenv/testenv.go index 35ff4955d2..2d17061c1c 100644 --- a/router-tests/testenv/testenv.go +++ b/router-tests/testenv/testenv.go @@ -323,6 +323,7 @@ type Config struct { NoShutdownTestServer bool MCP config.MCPConfiguration EnableRedis bool + EnableRedisCluster bool Plugins PluginConfig } @@ -380,6 +381,7 @@ type MCPConfig struct { } var redisHost = "redis://localhost:6379" +var redisClusterHost = "redis://localhost:7001" // CreateTestSupervisorEnv is currently tailored specifically for /lifecycle/supervisor_test.go, refer to that test // for usage example. CreateTestSupervisorEnv is not a drop-in replacement for CreateTestEnv! @@ -763,6 +765,11 @@ func CreateTestSupervisorEnv(t testing.TB, cfg *Config) (*Environment, error) { e.RedisHosts = []string{redisHost} } + if cfg.EnableRedisCluster { + e.RedisHosts = []string{redisClusterHost} + e.RedisWithClusterMode = true + } + if routerConfig.FeatureFlagConfigs != nil { myFF, ok := routerConfig.FeatureFlagConfigs.ConfigByFeatureFlagName["myff"] if ok { @@ -1160,6 +1167,11 @@ func CreateTestEnv(t testing.TB, cfg *Config) (*Environment, error) { e.RedisHosts = []string{redisHost} } + if cfg.EnableRedisCluster { + e.RedisHosts = []string{redisClusterHost} + e.RedisWithClusterMode = true + } + if routerConfig.FeatureFlagConfigs != nil { myFF, ok := routerConfig.FeatureFlagConfigs.ConfigByFeatureFlagName["myff"] if ok { @@ -1309,6 +1321,15 @@ func configureRouter(listenerAddr string, testConfig *Config, routerConfig *node } } + if testConfig.EnableRedisCluster { + for _, sourceName := range DemoRedisProviders { + redisEventSources = append(redisEventSources, config.RedisEventSource{ + ID: sourceName, + URLs: []string{redisClusterHost}, + }) + } + } + eventsConfiguration := config.EventsConfiguration{ Providers: config.EventProviders{ Nats: natsEventSources, @@ -1646,6 +1667,7 @@ type Environment struct { getPubSubName func(name string) string MCPClient *mcpclient.Client RedisHosts []string + RedisWithClusterMode bool shutdownDelay time.Duration extraURLQueryValues url.Values From ba217869182916081b63198b77b0f2938f43d344 Mon Sep 17 00:00:00 2001 From: Alessandro Pagnin Date: Tue, 10 Jun 2025 12:46:45 +0200 Subject: [PATCH 118/126] fix: redis-cluster-configure is launched only after the redis nodes are up and also after they are stopped/started --- docker-compose.yml | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index 10f56720ad..5df7e10f93 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -260,6 +260,11 @@ services: - '16371:16379' volumes: - ./docker/redis/redis-cluster.conf:/usr/local/etc/redis/redis.conf + healthcheck: + test: ["CMD", "redis-cli", "-p", "6379", "ping"] + interval: 10s + timeout: 5s + retries: 3 profiles: - dev @@ -273,6 +278,11 @@ services: - '16372:16379' volumes: - ./docker/redis/redis-cluster.conf:/usr/local/etc/redis/redis.conf + healthcheck: + test: ["CMD", "redis-cli", "-p", "6379", "ping"] + interval: 10s + timeout: 5s + retries: 3 profiles: - dev @@ -286,6 +296,11 @@ services: - '16373:16379' volumes: - ./docker/redis/redis-cluster.conf:/usr/local/etc/redis/redis.conf + healthcheck: + test: ["CMD", "redis-cli", "-p", "6379", "ping"] + interval: 10s + timeout: 5s + retries: 3 profiles: - dev @@ -295,11 +310,15 @@ services: networks: - primary depends_on: - - redis-cluster-node-1 - - redis-cluster-node-2 - - redis-cluster-node-3 + redis-cluster-node-1: + condition: service_healthy + redis-cluster-node-2: + condition: service_healthy + redis-cluster-node-3: + condition: service_healthy volumes: - ./docker/redis/:/usr/local/etc/redis/ + restart: on-failure:1 profiles: - dev From 9814f31e9eb6f02d922481236facd065f9d24396 Mon Sep 17 00:00:00 2001 From: Alessandro Pagnin Date: Wed, 11 Jun 2025 12:21:46 +0200 Subject: [PATCH 119/126] test: rewrote test to not use testify.require/assert inside go routine and other small things suggested by testifylint --- Makefile | 2 + router-tests/events/redis_events_test.go | 910 ++++++++++++----------- 2 files changed, 489 insertions(+), 423 deletions(-) diff --git a/Makefile b/Makefile index 805a3c8d2c..b5cb6a28ea 100644 --- a/Makefile +++ b/Makefile @@ -11,6 +11,7 @@ setup-dev-tools: setup-build-tools go install github.com/yannh/kubeconform/cmd/kubeconform@v0.6.3 go install github.com/norwoodj/helm-docs/cmd/helm-docs@v1.11.3 go install github.com/vektra/mockery/v3@v3.3.1 + go install github.com/Antonboom/testifylint@v1.6.1 prerequisites: setup-dev-tools go version @@ -19,6 +20,7 @@ prerequisites: setup-dev-tools docker -v dbmate -v mockery version + testifylint -V=full infra-up: dc-dev diff --git a/router-tests/events/redis_events_test.go b/router-tests/events/redis_events_test.go index c893cbb89f..39d4212b60 100644 --- a/router-tests/events/redis_events_test.go +++ b/router-tests/events/redis_events_test.go @@ -8,7 +8,6 @@ import ( "fmt" "net/http" "net/url" - "sync/atomic" "testing" "time" @@ -18,7 +17,6 @@ import ( "github.com/hasura/go-graphql-client" "github.com/stretchr/testify/require" - "github.com/tidwall/gjson" "github.com/wundergraph/cosmo/router-tests/testenv" "github.com/wundergraph/cosmo/router/pkg/config" ) @@ -28,7 +26,7 @@ const RedisWaitTimeout = time.Second * 30 func assertRedisLineEquals(t *testing.T, reader *bufio.Reader, expected string) { t.Helper() line, _, err := reader.ReadLine() - assert.NoError(t, err) + require.NoError(t, err) assert.Equal(t, expected, string(line)) } @@ -54,6 +52,11 @@ func assertRedisMultipartValueEventually(t *testing.T, reader *bufio.Reader, exp }, RedisWaitTimeout, time.Millisecond*100) } +type subscriptionArgs struct { + dataValue []byte + errValue error +} + func TestRedisEvents(t *testing.T) { t.Parallel() @@ -82,40 +85,46 @@ func TestRedisEvents(t *testing.T) { surl := xEnv.GraphQLWebSocketSubscriptionURL() client := graphql.NewSubscriptionClient(surl) - t.Cleanup(func() { - _ = client.Close() - }) - - var counter atomic.Uint32 + subscriptionArgsCh := make(chan subscriptionArgs) subscriptionOneID, err := client.Subscribe(&subscriptionOne, nil, func(dataValue []byte, errValue error) error { - defer counter.Add(1) - require.NoError(t, errValue) - require.JSONEq(t, `{"employeeUpdates":{"id":1,"details":{"forename":"Jens","surname":"Neuse"}}}`, string(dataValue)) + subscriptionArgsCh <- subscriptionArgs{dataValue, errValue} return nil }) require.NoError(t, err) require.NotEmpty(t, subscriptionOneID) + runCh := make(chan error) go func() { - clientErr := client.Run() - require.NoError(t, clientErr) - }() - - go func() { - require.Eventually(t, func() bool { - return counter.Load() == 1 - }, RedisWaitTimeout, time.Millisecond*100) - _ = client.Close() + // start subscription + runCh <- client.Run() }() + // Wait for the subscription to be started xEnv.WaitForSubscriptionCount(1, RedisWaitTimeout) + // produce a message produceRedisMessage(t, xEnv, topics[0], `{"__typename":"Employee","id": 1,"update":{"name":"foo"}}`) - xEnv.WaitForMessagesSent(1, RedisWaitTimeout) - xEnv.WaitForSubscriptionCount(0, RedisWaitTimeout) - xEnv.WaitForConnectionCount(0, RedisWaitTimeout) + // process the message + select { + case subscriptionArgs := <-subscriptionArgsCh: + require.NoError(t, subscriptionArgs.errValue) + require.JSONEq(t, `{"employeeUpdates":{"id":1,"details":{"forename":"Jens","surname":"Neuse"}}}`, string(subscriptionArgs.dataValue)) + case <-time.After(RedisWaitTimeout): + t.Fatal("timeout waiting for first message error") + } + + // close the client + client.Close() + + // check that the client is closed correctly + select { + case err := <-runCh: + require.NoError(t, err) + case <-time.After(RedisWaitTimeout): + t.Fatal("timeout waiting for client to close") + } }) }) @@ -144,61 +153,74 @@ func TestRedisEvents(t *testing.T) { _ = client.Close() }) - var counter atomic.Uint32 - + subscriptionArgsCh := make(chan subscriptionArgs) subscriptionOneID, err := client.Subscribe(&subscriptionOne, nil, func(dataValue []byte, errValue error) error { - oldCount := counter.Load() - counter.Add(1) - - if oldCount == 0 { - var gqlErr graphql.Errors - require.ErrorAs(t, errValue, &gqlErr) - require.Equal(t, "Invalid message received", gqlErr[0].Message) - } else if oldCount == 1 || oldCount == 3 { - require.NoError(t, errValue) - require.JSONEq(t, `{"employeeUpdates":{"id":1,"details":{"forename":"Jens","surname":"Neuse"}}}`, string(dataValue)) - } else if oldCount == 2 { - var gqlErr graphql.Errors - require.ErrorAs(t, errValue, &gqlErr) - require.Equal(t, "Cannot return null for non-nullable field 'Subscription.employeeUpdates.id'.", gqlErr[0].Message) - } - + subscriptionArgsCh <- subscriptionArgs{dataValue, errValue} return nil }) require.NoError(t, err) require.NotEmpty(t, subscriptionOneID) + runCh := make(chan error) go func() { - clientErr := client.Run() - require.NoError(t, clientErr) + runCh <- client.Run() }() + // Wait for the subscription to be started before producing a message xEnv.WaitForSubscriptionCount(1, RedisWaitTimeout) - produceRedisMessage(t, xEnv, topics[0], ``) // Empty message - require.Eventually(t, func() bool { - return counter.Load() == 1 - }, RedisWaitTimeout, time.Millisecond*100) + // produce an empty message + produceRedisMessage(t, xEnv, topics[0], ``) + // process the message + select { + case subscriptionArgs := <-subscriptionArgsCh: + var gqlErr graphql.Errors + require.ErrorAs(t, subscriptionArgs.errValue, &gqlErr) + require.Equal(t, "Invalid message received", gqlErr[0].Message) + case <-time.After(RedisWaitTimeout): + t.Fatal("timeout waiting for first message error") + } produceRedisMessage(t, xEnv, topics[0], `{"__typename":"Employee","id": 1,"update":{"name":"foo"}}`) // Correct message - require.Eventually(t, func() bool { - return counter.Load() == 2 - }, RedisWaitTimeout, time.Millisecond*100) + select { + case subscriptionArgs := <-subscriptionArgsCh: + require.NoError(t, subscriptionArgs.errValue) + require.JSONEq(t, `{"employeeUpdates":{"id":1,"details":{"forename":"Jens","surname":"Neuse"}}}`, string(subscriptionArgs.dataValue)) + case <-time.After(RedisWaitTimeout): + t.Fatal("timeout waiting for first message error") + } - produceRedisMessage(t, xEnv, topics[0], `{"__typename":"Employee","update":{"name":"foo"}}`) // Missing entity = Resolver error - require.Eventually(t, func() bool { - return counter.Load() == 3 - }, RedisWaitTimeout, time.Millisecond*100) + // Missing entity = Resolver error + produceRedisMessage(t, xEnv, topics[0], `{"__typename":"Employee","update":{"name":"foo"}}`) + select { + case subscriptionArgs := <-subscriptionArgsCh: + var gqlErr graphql.Errors + require.ErrorAs(t, subscriptionArgs.errValue, &gqlErr) + require.Equal(t, "Cannot return null for non-nullable field 'Subscription.employeeUpdates.id'.", gqlErr[0].Message) + case <-time.After(RedisWaitTimeout): + t.Fatal("timeout waiting for first message error") + } - produceRedisMessage(t, xEnv, topics[0], `{"__typename":"Employee","id": 1,"update":{"name":"foo"}}`) // Correct message - require.Eventually(t, func() bool { - return counter.Load() == 4 - }, RedisWaitTimeout, time.Millisecond*100) + // Correct message + produceRedisMessage(t, xEnv, topics[0], `{"__typename":"Employee","id": 1,"update":{"name":"foo"}}`) + select { + case subscriptionArgs := <-subscriptionArgsCh: + require.NoError(t, subscriptionArgs.errValue) + require.JSONEq(t, `{"employeeUpdates":{"id":1,"details":{"forename":"Jens","surname":"Neuse"}}}`, string(subscriptionArgs.dataValue)) + case <-time.After(RedisWaitTimeout): + t.Fatal("timeout waiting for first message error") + } + // close the client require.NoError(t, client.Close()) - xEnv.WaitForSubscriptionCount(0, RedisWaitTimeout) - xEnv.WaitForConnectionCount(0, RedisWaitTimeout) + // check that the client is closed correctly + select { + case err := <-runCh: + require.NoError(t, err) + case <-time.After(RedisWaitTimeout): + t.Fatal("timeout waiting for client to close") + } }) }) @@ -225,45 +247,62 @@ func TestRedisEvents(t *testing.T) { surl := xEnv.GraphQLWebSocketSubscriptionURL() client := graphql.NewSubscriptionClient(surl) - var counter atomic.Uint32 + subscriptionOneArgsCh := make(chan subscriptionArgs) subscriptionOneID, err := client.Subscribe(&subscriptionOne, nil, func(dataValue []byte, errValue error) error { - defer counter.Add(1) - require.NoError(t, errValue) - require.JSONEq(t, `{"employeeUpdates":{"id":1,"details":{"forename":"Jens","surname":"Neuse"}}}`, string(dataValue)) + subscriptionOneArgsCh <- subscriptionArgs{dataValue, errValue} return nil }) require.NoError(t, err) require.NotEmpty(t, subscriptionOneID) + subscriptionTwoArgsCh := make(chan subscriptionArgs) subscriptionTwoID, err := client.Subscribe(&subscriptionOne, nil, func(dataValue []byte, errValue error) error { - defer counter.Add(1) - require.NoError(t, errValue) - require.JSONEq(t, `{"employeeUpdates":{"id":1,"details":{"forename":"Jens","surname":"Neuse"}}}`, string(dataValue)) + subscriptionTwoArgsCh <- subscriptionArgs{dataValue, errValue} return nil }) require.NoError(t, err) require.NotEmpty(t, subscriptionTwoID) + runCh := make(chan error) go func() { - clientErr := client.Run() - require.NoError(t, clientErr) + runCh <- client.Run() }() + // Wait for the subscription to be started xEnv.WaitForSubscriptionCount(2, RedisWaitTimeout) + // produce a message produceRedisMessage(t, xEnv, topics[0], `{"__typename":"Employee","id": 1,"update":{"name":"foo"}}`) - xEnv.WaitForMessagesSent(2, RedisWaitTimeout) + // read the message from the first subscription + select { + case subscriptionArgs := <-subscriptionOneArgsCh: + require.NoError(t, subscriptionArgs.errValue) + require.JSONEq(t, `{"employeeUpdates":{"id":1,"details":{"forename":"Jens","surname":"Neuse"}}}`, string(subscriptionArgs.dataValue)) + case <-time.After(RedisWaitTimeout): + t.Fatal("timeout waiting for first message error") + } - require.Eventually(t, func() bool { - return counter.Load() == 2 - }, RedisWaitTimeout, time.Millisecond*100) + // read the message from the second subscription + select { + case subscriptionArgs := <-subscriptionTwoArgsCh: + require.NoError(t, subscriptionArgs.errValue) + require.JSONEq(t, `{"employeeUpdates":{"id":1,"details":{"forename":"Jens","surname":"Neuse"}}}`, string(subscriptionArgs.dataValue)) + case <-time.After(RedisWaitTimeout): + t.Fatal("timeout waiting for second message error") + } - _ = client.Close() + // close the client + require.NoError(t, client.Close()) - xEnv.WaitForSubscriptionCount(0, RedisWaitTimeout) - xEnv.WaitForConnectionCount(0, RedisWaitTimeout) + // check that the client is closed correctly + select { + case err := <-runCh: + require.NoError(t, err) + case <-time.After(RedisWaitTimeout): + t.Fatal("timeout waiting for client to close") + } }) }) @@ -289,71 +328,83 @@ func TestRedisEvents(t *testing.T) { surl := xEnv.GraphQLWebSocketSubscriptionURL() client := graphql.NewSubscriptionClient(surl) - t.Cleanup(func() { - _ = client.Close() - }) - - var counter atomic.Uint32 + subscriptionOneArgsCh := make(chan subscriptionArgs) subscriptionOneID, err := client.Subscribe(&subscriptionOne, nil, func(dataValue []byte, errValue error) error { - defer counter.Add(1) - - require.NoError(t, errValue) - - employeeID := gjson.GetBytes(dataValue, "employeeUpdates.id").Int() - - if employeeID == 1 { - require.JSONEq(t, `{"employeeUpdates":{"id":1,"details":{"forename":"Jens","surname":"Neuse"}}}`, string(dataValue)) - } else if employeeID == 2 { - require.JSONEq(t, `{"employeeUpdates":{"id":2,"details":{"forename":"Dustin","surname":"Deus"}}}`, string(dataValue)) - } else { - t.Errorf("unexpected employeeID %d", employeeID) - } - + subscriptionOneArgsCh <- subscriptionArgs{dataValue, errValue} return nil }) require.NoError(t, err) require.NotEmpty(t, subscriptionOneID) + subscriptionTwoArgsCh := make(chan subscriptionArgs) subscriptionTwoID, err := client.Subscribe(&subscriptionOne, nil, func(dataValue []byte, errValue error) error { - defer counter.Add(1) - - require.NoError(t, errValue) - - employeeID := gjson.GetBytes(dataValue, "employeeUpdates.id").Int() - - if employeeID == 1 { - require.JSONEq(t, `{"employeeUpdates":{"id":1,"details":{"forename":"Jens","surname":"Neuse"}}}`, string(dataValue)) - } else if employeeID == 2 { - require.JSONEq(t, `{"employeeUpdates":{"id":2,"details":{"forename":"Dustin","surname":"Deus"}}}`, string(dataValue)) - } else { - t.Errorf("unexpected employeeID %d", employeeID) - } - + subscriptionTwoArgsCh <- subscriptionArgs{dataValue, errValue} return nil }) require.NoError(t, err) require.NotEmpty(t, subscriptionTwoID) + runCh := make(chan error) go func() { - clientErr := client.Run() - require.NoError(t, clientErr) + runCh <- client.Run() }() + // Wait for the subscription to be started xEnv.WaitForSubscriptionCount(2, RedisWaitTimeout) + // produce a message produceRedisMessage(t, xEnv, topics[0], `{"__typename":"Employee","id": 1,"update":{"name":"foo"}}`) + + // read the message from the first subscription + select { + case subscriptionArgs := <-subscriptionOneArgsCh: + require.NoError(t, subscriptionArgs.errValue) + require.JSONEq(t, `{"employeeUpdates":{"id":1,"details":{"forename":"Jens","surname":"Neuse"}}}`, string(subscriptionArgs.dataValue)) + case <-time.After(RedisWaitTimeout): + t.Fatal("timeout waiting for first message error") + } + + // read the message from the second subscription + select { + case subscriptionArgs := <-subscriptionTwoArgsCh: + require.NoError(t, subscriptionArgs.errValue) + require.JSONEq(t, `{"employeeUpdates":{"id":1,"details":{"forename":"Jens","surname":"Neuse"}}}`, string(subscriptionArgs.dataValue)) + case <-time.After(RedisWaitTimeout): + t.Fatal("timeout waiting for second message error") + } + + // produce a message produceRedisMessage(t, xEnv, topics[0], `{"__typename":"Employee","id": 2,"update":{"name":"foo"}}`) - require.Eventually(t, func() bool { - return counter.Load() == 4 - }, RedisWaitTimeout, time.Millisecond*100, "expected 4 events, got %d", counter.Load()) + // read the message from the first subscription + select { + case subscriptionArgs := <-subscriptionOneArgsCh: + require.NoError(t, subscriptionArgs.errValue) + require.JSONEq(t, `{"employeeUpdates":{"id":2,"details":{"forename":"Dustin","surname":"Deus"}}}`, string(subscriptionArgs.dataValue)) + case <-time.After(RedisWaitTimeout): + t.Fatal("timeout waiting for first message error") + } + + // read the message from the second subscription + select { + case subscriptionArgs := <-subscriptionTwoArgsCh: + require.NoError(t, subscriptionArgs.errValue) + require.JSONEq(t, `{"employeeUpdates":{"id":2,"details":{"forename":"Dustin","surname":"Deus"}}}`, string(subscriptionArgs.dataValue)) + case <-time.After(RedisWaitTimeout): + t.Fatal("timeout waiting for second message error") + } + // close the client require.NoError(t, client.Close()) - xEnv.WaitForMessagesSent(4, RedisWaitTimeout) - xEnv.WaitForSubscriptionCount(0, RedisWaitTimeout) - xEnv.WaitForConnectionCount(0, RedisWaitTimeout) + // check that the client is closed correctly + select { + case err := <-runCh: + require.NoError(t, err) + case <-time.After(RedisWaitTimeout): + t.Fatal("timeout waiting for client to close") + } }) }) @@ -370,7 +421,6 @@ func TestRedisEvents(t *testing.T) { engineExecutionConfiguration.WebSocketClientReadTimeout = time.Millisecond * 100 }, }, func(t *testing.T, xEnv *testenv.Environment) { - var subscriptionOne struct { employeeUpdates struct { ID float64 `graphql:"id"` @@ -383,40 +433,45 @@ func TestRedisEvents(t *testing.T) { surl := xEnv.GraphQLWebSocketSubscriptionURL() client := graphql.NewSubscriptionClient(surl) - t.Cleanup(func() { - _ = client.Close() - }) - - var counter atomic.Uint32 + subscriptionOneArgsCh := make(chan subscriptionArgs) subscriptionOneID, err := client.Subscribe(&subscriptionOne, nil, func(dataValue []byte, errValue error) error { - defer counter.Add(1) - require.NoError(t, errValue) - require.JSONEq(t, `{"employeeUpdates":{"id":1,"details":{"forename":"Jens","surname":"Neuse"}}}`, string(dataValue)) + subscriptionOneArgsCh <- subscriptionArgs{dataValue, errValue} return nil }) require.NoError(t, err) require.NotEmpty(t, subscriptionOneID) + runCh := make(chan error) go func() { - clientErr := client.Run() - require.NoError(t, clientErr) - }() - - go func() { - require.Eventually(t, func() bool { - return counter.Load() == 1 - }, RedisWaitTimeout, time.Millisecond*100) - _ = client.Close() + runCh <- client.Run() }() + // Wait for the subscription to be started xEnv.WaitForSubscriptionCount(1, RedisWaitTimeout) + // produce a message produceRedisMessage(t, xEnv, topics[0], `{"__typename":"Employee","id": 1,"update":{"name":"foo"}}`) - xEnv.WaitForMessagesSent(1, RedisWaitTimeout) - xEnv.WaitForSubscriptionCount(0, RedisWaitTimeout) - xEnv.WaitForConnectionCount(0, RedisWaitTimeout) + // read the message from the subscription + select { + case subscriptionArgs := <-subscriptionOneArgsCh: + require.NoError(t, subscriptionArgs.errValue) + require.JSONEq(t, `{"employeeUpdates":{"id":1,"details":{"forename":"Jens","surname":"Neuse"}}}`, string(subscriptionArgs.dataValue)) + case <-time.After(RedisWaitTimeout): + t.Fatal("timeout waiting for first message error") + } + + // close the client + require.NoError(t, client.Close()) + + // check that the client is closed correctly + select { + case err := <-runCh: + require.NoError(t, err) + case <-time.After(RedisWaitTimeout): + t.Fatal("timeout waiting for client to close") + } }) }) @@ -437,55 +492,31 @@ func TestRedisEvents(t *testing.T) { core.WithMultipartHeartbeatInterval(multipartHeartbeatInterval), }, }, func(t *testing.T, xEnv *testenv.Environment) { - subscribePayload := []byte(`{"query":"subscription { employeeUpdates { id details { forename surname } }}"}`) - var started atomic.Bool - var consumed atomic.Uint32 - var produced atomic.Uint32 - - go func() { - client := http.Client{ - Timeout: time.Second * 100, - } - req := xEnv.MakeGraphQLMultipartRequest(http.MethodPost, bytes.NewReader(subscribePayload)) - resp, gErr := client.Do(req) - require.NoError(t, gErr) - require.Equal(t, http.StatusOK, resp.StatusCode) - defer resp.Body.Close() - reader := bufio.NewReader(resp.Body) - started.Store(true) - - assert.Eventually(t, func() bool { - return produced.Load() == 1 - }, RedisWaitTimeout, time.Millisecond*100) - assertRedisMultipartValueEventually(t, reader, "{\"payload\":{\"data\":{\"employeeUpdates\":{\"id\":1,\"details\":{\"forename\":\"Jens\",\"surname\":\"Neuse\"}}}}}") - consumed.Add(1) - - assert.Eventually(t, func() bool { - return produced.Load() == 2 - }, RedisWaitTimeout, time.Millisecond*100) - assertRedisMultipartValueEventually(t, reader, "{\"payload\":{\"data\":{\"employeeUpdates\":{\"id\":1,\"details\":{\"forename\":\"Jens\",\"surname\":\"Neuse\"}}}}}") - consumed.Add(1) - }() + // start the subscription + client := http.Client{ + Timeout: time.Second * 100, + } + req := xEnv.MakeGraphQLMultipartRequest(http.MethodPost, bytes.NewReader(subscribePayload)) + resp, gErr := client.Do(req) + require.NoError(t, gErr) + require.Equal(t, http.StatusOK, resp.StatusCode) + defer resp.Body.Close() + reader := bufio.NewReader(resp.Body) + // Wait for the subscription to be started xEnv.WaitForSubscriptionCount(1, RedisWaitTimeout) - assert.Eventually(t, started.Load, RedisWaitTimeout, time.Millisecond*100) + // produce a message produceRedisMessage(t, xEnv, topics[0], `{"__typename":"Employee","id": 1,"update":{"name":"foo"}}`) - produced.Add(1) + // read the message from the subscription + assertRedisMultipartValueEventually(t, reader, "{\"payload\":{\"data\":{\"employeeUpdates\":{\"id\":1,\"details\":{\"forename\":\"Jens\",\"surname\":\"Neuse\"}}}}}") - assert.Eventually(t, func() bool { - return consumed.Load() == 1 - }, RedisWaitTimeout, time.Millisecond*100) + // produce a message produceRedisMessage(t, xEnv, topics[0], `{"__typename":"Employee","id": 1,"update":{"name":"foo"}}`) - produced.Add(1) - - // Wait for the client to finish - require.Eventually(t, func() bool { return consumed.Load() == 2 }, RedisWaitTimeout*2, time.Millisecond*100) - - xEnv.WaitForSubscriptionCount(0, RedisWaitTimeout) - xEnv.WaitForConnectionCount(0, RedisWaitTimeout) + // read the message from the subscription + assertRedisMultipartValueEventually(t, reader, "{\"payload\":{\"data\":{\"employeeUpdates\":{\"id\":1,\"details\":{\"forename\":\"Jens\",\"surname\":\"Neuse\"}}}}}") }) }) @@ -534,49 +565,65 @@ func TestRedisEvents(t *testing.T) { subscribePayload := []byte(`{"query":"subscription { employeeUpdates { id details { forename surname } }}"}`) - var counter atomic.Uint32 - - go func() { - defer counter.Add(1) - - client := http.Client{ - Timeout: time.Second * 10, - } - req, gErr := http.NewRequest(http.MethodPost, xEnv.GraphQLRequestURL(), bytes.NewReader(subscribePayload)) - require.NoError(t, gErr) - - req.Header.Set("Content-Type", "application/json") - req.Header.Set("Accept", "text/event-stream") - req.Header.Set("Connection", "keep-alive") - req.Header.Set("Cache-Control", "no-cache") + client := http.Client{ + Timeout: time.Second * 10, + } + req, gErr := http.NewRequest(http.MethodPost, xEnv.GraphQLRequestURL(), bytes.NewReader(subscribePayload)) + require.NoError(t, gErr) - resp, gErr := client.Do(req) - require.NoError(t, gErr) - require.Equal(t, http.StatusOK, resp.StatusCode) - defer resp.Body.Close() - reader := bufio.NewReader(resp.Body) + req.Header.Set("Content-Type", "application/json") + req.Header.Set("Accept", "text/event-stream") + req.Header.Set("Connection", "keep-alive") + req.Header.Set("Cache-Control", "no-cache") - eventNext, _, gErr := reader.ReadLine() - require.NoError(t, gErr) - require.Equal(t, "event: next", string(eventNext)) - data, _, gErr := reader.ReadLine() - require.NoError(t, gErr) - require.Equal(t, "data: {\"data\":{\"employeeUpdates\":{\"id\":1,\"details\":{\"forename\":\"Jens\",\"surname\":\"Neuse\"}}}}", string(data)) - line, _, gErr := reader.ReadLine() - require.NoError(t, gErr) - require.Equal(t, "", string(line)) + // start the subscription + clientRetCh := make(chan struct { + resp *http.Response + err error + }) + go func() { + resp, err := client.Do(req) + clientRetCh <- struct { + resp *http.Response + err error + }{resp, err} }() + // Wait for the subscription to be started xEnv.WaitForSubscriptionCount(1, RedisWaitTimeout) + // produce a message so that the subscription is triggered produceRedisMessage(t, xEnv, topics[0], `{"__typename":"Employee","id": 1,"update":{"name":"foo"}}`) - require.Eventually(t, func() bool { - return counter.Load() == 1 - }, RedisWaitTimeout, time.Millisecond*100) + // get the client response + var clientRet struct { + resp *http.Response + err error + } + select { + case clientRet = <-clientRetCh: + case <-time.After(RedisWaitTimeout): + t.Fatal("timeout waiting for client response") + } + defer func() { + if clientRet.resp != nil { + clientRet.resp.Body.Close() + } + }() + require.NoError(t, clientRet.err) + require.Equal(t, http.StatusOK, clientRet.resp.StatusCode) - xEnv.WaitForSubscriptionCount(0, RedisWaitTimeout) - xEnv.WaitForConnectionCount(0, RedisWaitTimeout) + // read the message from the subscription + reader := bufio.NewReader(clientRet.resp.Body) + eventNext, _, gErr := reader.ReadLine() + require.NoError(t, gErr) + require.Equal(t, "event: next", string(eventNext)) + data, _, gErr := reader.ReadLine() + require.NoError(t, gErr) + require.Equal(t, "data: {\"data\":{\"employeeUpdates\":{\"id\":1,\"details\":{\"forename\":\"Jens\",\"surname\":\"Neuse\"}}}}", string(data)) + line, _, gErr := reader.ReadLine() + require.NoError(t, gErr) + require.Empty(t, string(line)) }) }) @@ -591,50 +638,65 @@ func TestRedisEvents(t *testing.T) { }, func(t *testing.T, xEnv *testenv.Environment) { subscribePayload := []byte(`{"query":"subscription { employeeUpdates { id details { forename surname } }}"}`) + client := http.Client{ + Timeout: time.Second * 10, + } + req, gErr := http.NewRequest(http.MethodPost, xEnv.GraphQLRequestURL(), bytes.NewReader(subscribePayload)) + require.NoError(t, gErr) + req.Header.Set("Content-Type", "application/json") + req.Header.Set("Accept", "text/event-stream") + req.Header.Set("Connection", "keep-alive") + req.Header.Set("Cache-Control", "no-cache") - var counter atomic.Uint32 + clientRetCh := make(chan struct { + resp *http.Response + err error + }) + // start the subscription go func() { - defer counter.Add(1) - - client := http.Client{ - Timeout: time.Second * 10, - } - req, gErr := http.NewRequest(http.MethodPost, xEnv.GraphQLRequestURL(), bytes.NewReader(subscribePayload)) - require.NoError(t, gErr) - - req.Header.Set("Content-Type", "application/json") - req.Header.Set("Accept", "text/event-stream") - req.Header.Set("Connection", "keep-alive") - req.Header.Set("Cache-Control", "no-cache") - - resp, gErr := client.Do(req) - require.NoError(t, gErr) - require.Equal(t, http.StatusOK, resp.StatusCode) - defer resp.Body.Close() - reader := bufio.NewReader(resp.Body) - - eventNext, _, gErr := reader.ReadLine() - require.NoError(t, gErr) - require.Equal(t, "event: next", string(eventNext)) - data, _, gErr := reader.ReadLine() - require.NoError(t, gErr) - require.Equal(t, "data: {\"data\":{\"employeeUpdates\":{\"id\":1,\"details\":{\"forename\":\"Jens\",\"surname\":\"Neuse\"}}}}", string(data)) - line, _, gErr := reader.ReadLine() - require.NoError(t, gErr) - require.Equal(t, "", string(line)) + resp, err := client.Do(req) + clientRetCh <- struct { + resp *http.Response + err error + }{resp, err} }() + // Wait for the subscription to be started xEnv.WaitForSubscriptionCount(1, RedisWaitTimeout) + // produce a message so that the subscription is triggered produceRedisMessage(t, xEnv, topics[0], `{"__typename":"Employee","id": 1,"update":{"name":"foo"}}`) - require.Eventually(t, func() bool { - return counter.Load() == 1 - }, RedisWaitTimeout, time.Millisecond*100) + // get the client response + var clientRet struct { + resp *http.Response + err error + } + select { + case clientRet = <-clientRetCh: + case <-time.After(RedisWaitTimeout): + t.Fatal("timeout waiting for client response") + } + defer func() { + if clientRet.resp != nil { + clientRet.resp.Body.Close() + } + }() + require.NoError(t, clientRet.err) + require.Equal(t, http.StatusOK, clientRet.resp.StatusCode) - xEnv.WaitForSubscriptionCount(0, RedisWaitTimeout) - xEnv.WaitForConnectionCount(0, RedisWaitTimeout) + // read the message from the subscription + reader := bufio.NewReader(clientRet.resp.Body) + eventNext, _, gErr := reader.ReadLine() + require.NoError(t, gErr) + require.Equal(t, "event: next", string(eventNext)) + data, _, gErr := reader.ReadLine() + require.NoError(t, gErr) + require.Equal(t, "data: {\"data\":{\"employeeUpdates\":{\"id\":1,\"details\":{\"forename\":\"Jens\",\"surname\":\"Neuse\"}}}}", string(data)) + line, _, gErr := reader.ReadLine() + require.NoError(t, gErr) + require.Empty(t, string(line)) }) }) @@ -695,7 +757,7 @@ func TestRedisEvents(t *testing.T) { type subscriptionPayload struct { Data struct { FilteredEmployeeUpdatedMyRedis struct { - ID float64 `graphql:"id"` + ID int `graphql:"id"` Details struct { Forename string `graphql:"forename"` Surname string `graphql:"surname"` @@ -713,107 +775,78 @@ func TestRedisEvents(t *testing.T) { }) require.NoError(t, err) - // msg1 := testenv.WebSocketMessage{} - // conn.ReadJSON(&msg1) - // require.Equal(t, "1", msg1.ID) - // require.Equal(t, "next", msg1.Type) - // require.Equal(t, "{\"data\":{\"filteredEmployeeUpdatedMyRedis\":{\"id\":1,\"details\":{\"forename\":\"Jens\",\"surname\":\"Neuse\"}}}}", string(msg1.Payload)) - var msg testenv.WebSocketMessage var payload subscriptionPayload xEnv.WaitForSubscriptionCount(1, RedisWaitTimeout) - var produced atomic.Uint32 - var consumed atomic.Uint32 const MsgCount = uint32(12) - go func() { - consumed.Add(1) // the first message is ignored - - require.Eventually(t, func() bool { - return produced.Load() == MsgCount-11 - }, RedisWaitTimeout, time.Millisecond*100) - gErr := conn.ReadJSON(&msg) - require.NoError(t, gErr) - require.Equal(t, "1", msg.ID) - require.Equal(t, "next", msg.Type) - gErr = json.Unmarshal(msg.Payload, &payload) - require.NoError(t, gErr) - require.Equal(t, float64(11), payload.Data.FilteredEmployeeUpdatedMyRedis.ID) - require.Equal(t, "Alexandra", payload.Data.FilteredEmployeeUpdatedMyRedis.Details.Forename) - require.Equal(t, "Neuse", payload.Data.FilteredEmployeeUpdatedMyRedis.Details.Surname) - consumed.Add(4) // should arrive to 5th message, with id 7 - - require.Eventually(t, func() bool { - return produced.Load() == MsgCount-7 - }, RedisWaitTimeout, time.Millisecond*100) - gErr = conn.ReadJSON(&msg) - require.NoError(t, gErr) - require.Equal(t, "1", msg.ID) - require.Equal(t, "next", msg.Type) - gErr = json.Unmarshal(msg.Payload, &payload) - require.NoError(t, gErr) - require.Equal(t, float64(7), payload.Data.FilteredEmployeeUpdatedMyRedis.ID) - require.Equal(t, "Suvij", payload.Data.FilteredEmployeeUpdatedMyRedis.Details.Forename) - require.Equal(t, "Surya", payload.Data.FilteredEmployeeUpdatedMyRedis.Details.Surname) - consumed.Add(3) // should arrive to 8th message, with id 4 - - require.Eventually(t, func() bool { - return produced.Load() == MsgCount-4 - }, RedisWaitTimeout, time.Millisecond*100) - gErr = conn.ReadJSON(&msg) - require.NoError(t, gErr) - require.Equal(t, "1", msg.ID) - require.Equal(t, "next", msg.Type) - gErr = json.Unmarshal(msg.Payload, &payload) - require.NoError(t, gErr) - require.Equal(t, float64(4), payload.Data.FilteredEmployeeUpdatedMyRedis.ID) - require.Equal(t, "Björn", payload.Data.FilteredEmployeeUpdatedMyRedis.Details.Forename) - require.Equal(t, "Schwenzer", payload.Data.FilteredEmployeeUpdatedMyRedis.Details.Surname) - consumed.Add(1) - - require.Eventually(t, func() bool { - return produced.Load() == MsgCount-3 - }, RedisWaitTimeout, time.Millisecond*100) - gErr = conn.ReadJSON(&msg) - require.NoError(t, gErr) - require.Equal(t, "1", msg.ID) - require.Equal(t, "next", msg.Type) - gErr = json.Unmarshal(msg.Payload, &payload) - require.NoError(t, gErr) - require.Equal(t, float64(3), payload.Data.FilteredEmployeeUpdatedMyRedis.ID) - require.Equal(t, "Stefan", payload.Data.FilteredEmployeeUpdatedMyRedis.Details.Forename) - require.Equal(t, "Avram", payload.Data.FilteredEmployeeUpdatedMyRedis.Details.Surname) - consumed.Add(2) // should arrive to 10th message, with id 2 - - require.Eventually(t, func() bool { - return produced.Load() == MsgCount-1 - }, RedisWaitTimeout, time.Millisecond*100) - gErr = conn.ReadJSON(&msg) - require.NoError(t, gErr) - require.Equal(t, "1", msg.ID) - require.Equal(t, "next", msg.Type) - gErr = json.Unmarshal(msg.Payload, &payload) - require.NoError(t, gErr) - require.Equal(t, float64(1), payload.Data.FilteredEmployeeUpdatedMyRedis.ID) - require.Equal(t, "Jens", payload.Data.FilteredEmployeeUpdatedMyRedis.Details.Forename) - require.Equal(t, "Neuse", payload.Data.FilteredEmployeeUpdatedMyRedis.Details.Surname) - consumed.Add(1) - }() - // Events 1, 3, 4, 7, and 11 should be included for i := MsgCount; i > 0; i-- { - require.Eventually(t, func() bool { - return consumed.Load() >= MsgCount-i - }, RedisWaitTimeout, time.Millisecond*100) produceRedisMessage(t, xEnv, topics[0], fmt.Sprintf(`{"__typename":"Employee","id":%d}`, i)) - produced.Add(1) - } - require.Eventually(t, func() bool { - return consumed.Load() == MsgCount && produced.Load() == MsgCount - }, RedisWaitTimeout, time.Millisecond*100) + var gErr error + if i == 11 { + gErr := conn.ReadJSON(&msg) + require.NoError(t, gErr) + require.Equal(t, "1", msg.ID) + require.Equal(t, "next", msg.Type) + gErr = json.Unmarshal(msg.Payload, &payload) + require.NoError(t, gErr) + require.Equal(t, 11, payload.Data.FilteredEmployeeUpdatedMyRedis.ID) + require.Equal(t, "Alexandra", payload.Data.FilteredEmployeeUpdatedMyRedis.Details.Forename) + require.Equal(t, "Neuse", payload.Data.FilteredEmployeeUpdatedMyRedis.Details.Surname) + } + + if i == 7 { + gErr = conn.ReadJSON(&msg) + require.NoError(t, gErr) + require.Equal(t, "1", msg.ID) + require.Equal(t, "next", msg.Type) + gErr = json.Unmarshal(msg.Payload, &payload) + require.NoError(t, gErr) + require.Equal(t, 7, payload.Data.FilteredEmployeeUpdatedMyRedis.ID) + require.Equal(t, "Suvij", payload.Data.FilteredEmployeeUpdatedMyRedis.Details.Forename) + require.Equal(t, "Surya", payload.Data.FilteredEmployeeUpdatedMyRedis.Details.Surname) + } + + if i == 4 { + gErr = conn.ReadJSON(&msg) + require.NoError(t, gErr) + require.Equal(t, "1", msg.ID) + require.Equal(t, "next", msg.Type) + gErr = json.Unmarshal(msg.Payload, &payload) + require.NoError(t, gErr) + require.Equal(t, 4, payload.Data.FilteredEmployeeUpdatedMyRedis.ID) + require.Equal(t, "Björn", payload.Data.FilteredEmployeeUpdatedMyRedis.Details.Forename) + require.Equal(t, "Schwenzer", payload.Data.FilteredEmployeeUpdatedMyRedis.Details.Surname) + } + + if i == 3 { + gErr = conn.ReadJSON(&msg) + require.NoError(t, gErr) + require.Equal(t, "1", msg.ID) + require.Equal(t, "next", msg.Type) + gErr = json.Unmarshal(msg.Payload, &payload) + require.NoError(t, gErr) + require.Equal(t, 3, payload.Data.FilteredEmployeeUpdatedMyRedis.ID) + require.Equal(t, "Stefan", payload.Data.FilteredEmployeeUpdatedMyRedis.Details.Forename) + require.Equal(t, "Avram", payload.Data.FilteredEmployeeUpdatedMyRedis.Details.Surname) + } + + if i == 1 { + gErr = conn.ReadJSON(&msg) + require.NoError(t, gErr) + require.Equal(t, "1", msg.ID) + require.Equal(t, "next", msg.Type) + gErr = json.Unmarshal(msg.Payload, &payload) + require.NoError(t, gErr) + require.Equal(t, 1, payload.Data.FilteredEmployeeUpdatedMyRedis.ID) + require.Equal(t, "Jens", payload.Data.FilteredEmployeeUpdatedMyRedis.Details.Forename) + require.Equal(t, "Neuse", payload.Data.FilteredEmployeeUpdatedMyRedis.Details.Surname) + } + } }) }) @@ -829,7 +862,7 @@ func TestRedisEvents(t *testing.T) { var subscriptionOne struct { employeeUpdates struct { - ID float64 `graphql:"id"` + ID int `graphql:"id"` Details struct { Forename string `graphql:"forename"` Surname string `graphql:"surname"` @@ -839,62 +872,81 @@ func TestRedisEvents(t *testing.T) { surl := xEnv.GraphQLWebSocketSubscriptionURL() client := graphql.NewSubscriptionClient(surl) - t.Cleanup(func() { - _ = client.Close() - }) - - var counter atomic.Uint32 + subscriptionOneArgsCh := make(chan subscriptionArgs) subscriptionOneID, err := client.Subscribe(&subscriptionOne, nil, func(dataValue []byte, errValue error) error { - oldCount := counter.Load() - counter.Add(1) - - if oldCount == 0 { - var gqlErr graphql.Errors - require.ErrorAs(t, errValue, &gqlErr) - require.Equal(t, "Invalid message received", gqlErr[0].Message) - } else if oldCount == 1 || oldCount == 3 { - require.NoError(t, errValue) - require.JSONEq(t, `{"employeeUpdates":{"id":1,"details":{"forename":"Jens","surname":"Neuse"}}}`, string(dataValue)) - } else if oldCount == 2 { - var gqlErr graphql.Errors - require.ErrorAs(t, errValue, &gqlErr) - require.Equal(t, "Cannot return null for non-nullable field 'Subscription.employeeUpdates.id'.", gqlErr[0].Message) + subscriptionOneArgsCh <- subscriptionArgs{ + dataValue: dataValue, + errValue: errValue, } - return nil }) require.NoError(t, err) require.NotEmpty(t, subscriptionOneID) + // start the subscription + clientRunCh := make(chan error) go func() { - clientErr := client.Run() - require.NoError(t, clientErr) + clientRunCh <- client.Run() }() + // Wait for the subscription to be started xEnv.WaitForSubscriptionCount(1, RedisWaitTimeout) - produceRedisMessage(t, xEnv, topics[0], `{asas`) // Invalid message - require.Eventually(t, func() bool { - return counter.Load() == 1 - }, RedisWaitTimeout, time.Millisecond*100) - produceRedisMessage(t, xEnv, topics[0], `{"__typename":"Employee","id":1}`) // Correct message - require.Eventually(t, func() bool { - return counter.Load() == 2 - }, RedisWaitTimeout, time.Millisecond*100) - produceRedisMessage(t, xEnv, topics[0], `{"__typename":"Employee","update":{"name":"foo"}}`) // Missing entity = Resolver error - require.Eventually(t, func() bool { - return counter.Load() == 3 - }, RedisWaitTimeout, time.Millisecond*100) - produceRedisMessage(t, xEnv, topics[0], `{"__typename":"Employee","id": 1,"update":{"name":"foo"}}`) // Correct message - require.Eventually(t, func() bool { - return counter.Load() == 4 - }, RedisWaitTimeout, time.Millisecond*100) + // produce an invalid message + produceRedisMessage(t, xEnv, topics[0], `{asas`) + // get the client response + select { + case args := <-subscriptionOneArgsCh: + var gqlErr graphql.Errors + require.ErrorAs(t, args.errValue, &gqlErr) + require.Equal(t, "Invalid message received", gqlErr[0].Message) + case <-time.After(RedisWaitTimeout): + t.Fatal("timeout waiting for client response") + } + + // produce a correct message + produceRedisMessage(t, xEnv, topics[0], `{"__typename":"Employee","id":1}`) + // get the client response + select { + case args := <-subscriptionOneArgsCh: + require.NoError(t, args.errValue) + require.JSONEq(t, `{"employeeUpdates":{"id":1,"details":{"forename":"Jens","surname":"Neuse"}}}`, string(args.dataValue)) + case <-time.After(RedisWaitTimeout): + t.Fatal("timeout waiting for client response") + } + + // produce a message with a missing entity + produceRedisMessage(t, xEnv, topics[0], `{"__typename":"Employee","update":{"name":"foo"}}`) + // get the client response + select { + case args := <-subscriptionOneArgsCh: + var gqlErr graphql.Errors + require.ErrorAs(t, args.errValue, &gqlErr) + require.Equal(t, "Cannot return null for non-nullable field 'Subscription.employeeUpdates.id'.", gqlErr[0].Message) + case <-time.After(RedisWaitTimeout): + t.Fatal("timeout waiting for client response") + } + + // produce a correct message + produceRedisMessage(t, xEnv, topics[0], `{"__typename":"Employee","id": 1,"update":{"name":"foo"}}`) + // get the client response + select { + case args := <-subscriptionOneArgsCh: + require.NoError(t, args.errValue) + require.JSONEq(t, `{"employeeUpdates":{"id":1,"details":{"forename":"Jens","surname":"Neuse"}}}`, string(args.dataValue)) + case <-time.After(RedisWaitTimeout): + t.Fatal("timeout waiting for client response") + } require.NoError(t, client.Close()) - xEnv.WaitForSubscriptionCount(0, RedisWaitTimeout) - xEnv.WaitForConnectionCount(0, RedisWaitTimeout) + select { + case err := <-clientRunCh: + require.NoError(t, err) + case <-time.After(RedisWaitTimeout): + t.Fatal("timeout waiting for client response") + } }) }) @@ -908,22 +960,23 @@ func TestRedisEvents(t *testing.T) { EnableRedis: true, NoRetryClient: true, }, func(t *testing.T, xEnv *testenv.Environment) { - var msgCh <-chan *redis.Message - var started atomic.Bool - go func() { - var err error - msgCh, err = readRedisMessages(t, xEnv, channels[0]) - started.Store(true) - require.NoError(t, err) - }() - require.Eventually(t, started.Load, RedisWaitTimeout, time.Millisecond*100) - // Send a mutation to trigger the first subscription + // start reading the messages from the channel + msgCh, err := readRedisMessages(t, xEnv, channels[0]) + require.NoError(t, err) + + // send a mutation to trigger the first subscription resOne := xEnv.MakeGraphQLRequestOK(testenv.GraphQLRequest{ Query: `mutation { updateEmployeeMyRedis(id: 3, update: {name: "name test"}) { success } }`, }) require.JSONEq(t, `{"data":{"updateEmployeeMyRedis":{"success":true}}}`, resOne.Body) - m := <-msgCh - require.Equal(t, `{"id":3,"update":{"name":"name test"}}`, m.Payload) + + // read the message + select { + case m := <-msgCh: + require.JSONEq(t, `{"id":3,"update":{"name":"name test"}}`, m.Payload) + case <-time.After(RedisWaitTimeout): + t.Fatal("timeout waiting for client response") + } }) }) } @@ -956,40 +1009,50 @@ func TestRedisClusterEvents(t *testing.T) { surl := xEnv.GraphQLWebSocketSubscriptionURL() client := graphql.NewSubscriptionClient(surl) - t.Cleanup(func() { - _ = client.Close() - }) - - var counter atomic.Uint32 + // create the subscription + subscriptionOneArgsCh := make(chan subscriptionArgs) subscriptionOneID, err := client.Subscribe(&subscriptionOne, nil, func(dataValue []byte, errValue error) error { - defer counter.Add(1) - require.NoError(t, errValue) - require.JSONEq(t, `{"employeeUpdates":{"id":1,"details":{"forename":"Jens","surname":"Neuse"}}}`, string(dataValue)) + subscriptionOneArgsCh <- subscriptionArgs{ + dataValue: dataValue, + errValue: errValue, + } return nil }) require.NoError(t, err) require.NotEmpty(t, subscriptionOneID) + // start the client with the subscription + clientRunCh := make(chan error) go func() { - clientErr := client.Run() - require.NoError(t, clientErr) - }() - - go func() { - require.Eventually(t, func() bool { - return counter.Load() == 1 - }, RedisWaitTimeout, time.Millisecond*100) - _ = client.Close() + clientRunCh <- client.Run() }() + // Wait for the subscription to be started xEnv.WaitForSubscriptionCount(1, RedisWaitTimeout) + // produce a message produceRedisMessage(t, xEnv, topics[0], `{"__typename":"Employee","id": 1,"update":{"name":"foo"}}`) - xEnv.WaitForMessagesSent(1, RedisWaitTimeout) - xEnv.WaitForSubscriptionCount(0, RedisWaitTimeout) - xEnv.WaitForConnectionCount(0, RedisWaitTimeout) + // read the message + select { + case args := <-subscriptionOneArgsCh: + require.NoError(t, args.errValue) + require.JSONEq(t, `{"employeeUpdates":{"id":1,"details":{"forename":"Jens","surname":"Neuse"}}}`, string(args.dataValue)) + case <-time.After(RedisWaitTimeout): + t.Fatal("timeout waiting for client response") + } + + // close the client + require.NoError(t, client.Close()) + + // wait for the client to be closed + select { + case err := <-clientRunCh: + require.NoError(t, err) + case <-time.After(RedisWaitTimeout): + t.Fatal("timeout waiting for client response") + } }) }) @@ -1003,22 +1066,23 @@ func TestRedisClusterEvents(t *testing.T) { EnableRedisCluster: true, NoRetryClient: true, }, func(t *testing.T, xEnv *testenv.Environment) { - var msgCh <-chan *redis.Message - var started atomic.Bool - go func() { - var err error - msgCh, err = readRedisMessages(t, xEnv, channels[0]) - started.Store(true) - require.NoError(t, err) - }() - require.Eventually(t, started.Load, RedisWaitTimeout, time.Millisecond*100) - // Send a mutation to trigger the first subscription + // start reading the messages from the channel + msgCh, err := readRedisMessages(t, xEnv, channels[0]) + require.NoError(t, err) + + // send a mutation to produce a message resOne := xEnv.MakeGraphQLRequestOK(testenv.GraphQLRequest{ Query: `mutation { updateEmployeeMyRedis(id: 3, update: {name: "name test"}) { success } }`, }) require.JSONEq(t, `{"data":{"updateEmployeeMyRedis":{"success":true}}}`, resOne.Body) - m := <-msgCh - require.Equal(t, `{"id":3,"update":{"name":"name test"}}`, m.Payload) + + // read the message + select { + case m := <-msgCh: + require.JSONEq(t, `{"id":3,"update":{"name":"name test"}}`, m.Payload) + case <-time.After(RedisWaitTimeout): + t.Fatal("timeout waiting for client response") + } }) }) From fba9f189276a7d216c06a6e5d192cf7fa7b12090 Mon Sep 17 00:00:00 2001 From: Alessandro Pagnin Date: Wed, 11 Jun 2025 13:18:17 +0200 Subject: [PATCH 120/126] test: remove useless test --- router-tests/events/redis_events_test.go | 3 --- 1 file changed, 3 deletions(-) diff --git a/router-tests/events/redis_events_test.go b/router-tests/events/redis_events_test.go index 39d4212b60..b294a8f3b1 100644 --- a/router-tests/events/redis_events_test.go +++ b/router-tests/events/redis_events_test.go @@ -546,9 +546,6 @@ func TestRedisEvents(t *testing.T) { reader := bufio.NewReader(resp.Body) assertRedisMultipartValueEventually(t, reader, "{\"payload\":{\"errors\":[{\"message\":\"operation type 'subscription' is blocked\"}]}}") - - xEnv.WaitForSubscriptionCount(0, RedisWaitTimeout) - xEnv.WaitForConnectionCount(0, RedisWaitTimeout) }) }) }) From 1c80b98b50a3c0ef864f45122948e81afa9632e3 Mon Sep 17 00:00:00 2001 From: Alessandro Pagnin Date: Wed, 11 Jun 2025 17:24:38 +0200 Subject: [PATCH 121/126] chore: remove redundant code in a test, fixed config descriptions --- router-tests/events/redis_events_test.go | 70 ++++++------------------ router/pkg/config/config.schema.json | 8 +-- 2 files changed, 20 insertions(+), 58 deletions(-) diff --git a/router-tests/events/redis_events_test.go b/router-tests/events/redis_events_test.go index b294a8f3b1..407e9a9348 100644 --- a/router-tests/events/redis_events_test.go +++ b/router-tests/events/redis_events_test.go @@ -777,71 +777,33 @@ func TestRedisEvents(t *testing.T) { xEnv.WaitForSubscriptionCount(1, RedisWaitTimeout) - const MsgCount = uint32(12) + const MsgCount = 12 + + employeesCheck := map[int]struct { + Forename string + Surname string + }{ + 1: {"Jens", "Neuse"}, + 3: {"Stefan", "Avram"}, + 4: {"Björn", "Schwenzer"}, + 7: {"Suvij", "Surya"}, + 11: {"Alexandra", "Neuse"}, + } // Events 1, 3, 4, 7, and 11 should be included for i := MsgCount; i > 0; i-- { produceRedisMessage(t, xEnv, topics[0], fmt.Sprintf(`{"__typename":"Employee","id":%d}`, i)) - var gErr error - if i == 11 { + if i == 11 || i == 7 || i == 4 || i == 3 || i == 1 { gErr := conn.ReadJSON(&msg) require.NoError(t, gErr) require.Equal(t, "1", msg.ID) require.Equal(t, "next", msg.Type) gErr = json.Unmarshal(msg.Payload, &payload) require.NoError(t, gErr) - require.Equal(t, 11, payload.Data.FilteredEmployeeUpdatedMyRedis.ID) - require.Equal(t, "Alexandra", payload.Data.FilteredEmployeeUpdatedMyRedis.Details.Forename) - require.Equal(t, "Neuse", payload.Data.FilteredEmployeeUpdatedMyRedis.Details.Surname) - } - - if i == 7 { - gErr = conn.ReadJSON(&msg) - require.NoError(t, gErr) - require.Equal(t, "1", msg.ID) - require.Equal(t, "next", msg.Type) - gErr = json.Unmarshal(msg.Payload, &payload) - require.NoError(t, gErr) - require.Equal(t, 7, payload.Data.FilteredEmployeeUpdatedMyRedis.ID) - require.Equal(t, "Suvij", payload.Data.FilteredEmployeeUpdatedMyRedis.Details.Forename) - require.Equal(t, "Surya", payload.Data.FilteredEmployeeUpdatedMyRedis.Details.Surname) - } - - if i == 4 { - gErr = conn.ReadJSON(&msg) - require.NoError(t, gErr) - require.Equal(t, "1", msg.ID) - require.Equal(t, "next", msg.Type) - gErr = json.Unmarshal(msg.Payload, &payload) - require.NoError(t, gErr) - require.Equal(t, 4, payload.Data.FilteredEmployeeUpdatedMyRedis.ID) - require.Equal(t, "Björn", payload.Data.FilteredEmployeeUpdatedMyRedis.Details.Forename) - require.Equal(t, "Schwenzer", payload.Data.FilteredEmployeeUpdatedMyRedis.Details.Surname) - } - - if i == 3 { - gErr = conn.ReadJSON(&msg) - require.NoError(t, gErr) - require.Equal(t, "1", msg.ID) - require.Equal(t, "next", msg.Type) - gErr = json.Unmarshal(msg.Payload, &payload) - require.NoError(t, gErr) - require.Equal(t, 3, payload.Data.FilteredEmployeeUpdatedMyRedis.ID) - require.Equal(t, "Stefan", payload.Data.FilteredEmployeeUpdatedMyRedis.Details.Forename) - require.Equal(t, "Avram", payload.Data.FilteredEmployeeUpdatedMyRedis.Details.Surname) - } - - if i == 1 { - gErr = conn.ReadJSON(&msg) - require.NoError(t, gErr) - require.Equal(t, "1", msg.ID) - require.Equal(t, "next", msg.Type) - gErr = json.Unmarshal(msg.Payload, &payload) - require.NoError(t, gErr) - require.Equal(t, 1, payload.Data.FilteredEmployeeUpdatedMyRedis.ID) - require.Equal(t, "Jens", payload.Data.FilteredEmployeeUpdatedMyRedis.Details.Forename) - require.Equal(t, "Neuse", payload.Data.FilteredEmployeeUpdatedMyRedis.Details.Surname) + require.Equal(t, int(i), payload.Data.FilteredEmployeeUpdatedMyRedis.ID) + require.Equal(t, employeesCheck[i].Forename, payload.Data.FilteredEmployeeUpdatedMyRedis.Details.Forename) + require.Equal(t, employeesCheck[i].Surname, payload.Data.FilteredEmployeeUpdatedMyRedis.Details.Surname) } } }) diff --git a/router/pkg/config/config.schema.json b/router/pkg/config/config.schema.json index 3537aba100..60a495fe77 100644 --- a/router/pkg/config/config.schema.json +++ b/router/pkg/config/config.schema.json @@ -1923,7 +1923,7 @@ "properties": { "nats": { "type": "array", - "description": "The NATS configuration. The NATS is used to configure the event-driven federated subscriptions.", + "description": "Configuration used by the EDFS provider to connect to the NATS server.", "items": { "type": "object", "required": ["id", "url"], @@ -1982,7 +1982,7 @@ }, "kafka": { "type": "array", - "description": "The Kafka configuration. The Kafka is used to configure the event-driven federated subscriptions.", + "description": "Configuration used by the EDFS provider to connect to the Kafka server.", "items": { "type": "object", "additionalProperties": false, @@ -2043,7 +2043,7 @@ }, "redis": { "type": "array", - "description": "The Redis configuration. The Redis is used to configure the event-driven federated subscriptions.", + "description": "Configuration used by the EDFS provider to connect to the Redis server.", "items": { "type": "object", "additionalProperties": false, @@ -2063,7 +2063,7 @@ }, "cluster_enabled": { "type": "boolean", - "description": "Enable the Redis cluster. If enabled, the Redis cluster is used to connect to the Redis provider.", + "description": "If enabled, the Redis cluster client is used to connect to the server.", "default": false } } From 267a9aea45e5dfca50c404755f30e5f6da299e49 Mon Sep 17 00:00:00 2001 From: Alessandro Pagnin Date: Tue, 17 Jun 2025 12:28:55 +0200 Subject: [PATCH 122/126] chore: improve redis-cluster-create reliability --- docker/redis/redis-cluster-create.sh | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/docker/redis/redis-cluster-create.sh b/docker/redis/redis-cluster-create.sh index 418a55df70..3c91a0cc3f 100755 --- a/docker/redis/redis-cluster-create.sh +++ b/docker/redis/redis-cluster-create.sh @@ -5,9 +5,11 @@ node_1_ip=$(getent hosts redis-cluster-node-1 | awk '{ print $1 }') node_2_ip=$(getent hosts redis-cluster-node-2 | awk '{ print $1 }') node_3_ip=$(getent hosts redis-cluster-node-3 | awk '{ print $1 }') -# Set cluster properties dynamically for each node +# Prepare the nodes for the cluster for ip in $node_1_ip $node_2_ip $node_3_ip; do - echo "Configuring Redis node at $ip" + echo "Emptying db 0 of Redis node at $ip and resetting cluster" + redis-cli -h $ip -p 6379 FLUSHDB + redis-cli -h $ip -p 6379 CLUSTER RESET redis-cli -h $ip -p 6379 CONFIG SET cluster-announce-ip "$ip" done From 0b64e462554e930b9edb0e43b2f07919d217865b Mon Sep 17 00:00:00 2001 From: Alessandro Pagnin Date: Tue, 17 Jun 2025 12:53:37 +0200 Subject: [PATCH 123/126] chore: fix redis test after last changes to configuration --- router/pkg/config/config_events_redis_test.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/router/pkg/config/config_events_redis_test.go b/router/pkg/config/config_events_redis_test.go index bd23bbe7cf..9be0399a06 100644 --- a/router/pkg/config/config_events_redis_test.go +++ b/router/pkg/config/config_events_redis_test.go @@ -24,7 +24,7 @@ events: `) - _, err := LoadConfig(f) + _, err := LoadConfig([]string{f}) require.NoError(t, err) } @@ -45,6 +45,6 @@ events: `) - _, err := LoadConfig(f) + _, err := LoadConfig([]string{f}) require.ErrorContains(t, err, "router config validation error: jsonschema validation failed with 'https://raw.githubusercontent.com/wundergraph/cosmo/main/router/pkg/config/config.schema.json#'\n- at '/events/providers/redis/0/urls': minItems: got 0, want 1") } From 2007f563ff5f850996bfcc6fb07fb646add9aba0 Mon Sep 17 00:00:00 2001 From: Alessandro Pagnin Date: Tue, 17 Jun 2025 13:04:08 +0200 Subject: [PATCH 124/126] chore: fix redis test after merge --- router/pkg/config/config_events_redis_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/router/pkg/config/config_events_redis_test.go b/router/pkg/config/config_events_redis_test.go index 9be0399a06..21bd43f0c7 100644 --- a/router/pkg/config/config_events_redis_test.go +++ b/router/pkg/config/config_events_redis_test.go @@ -46,5 +46,5 @@ events: `) _, err := LoadConfig([]string{f}) - require.ErrorContains(t, err, "router config validation error: jsonschema validation failed with 'https://raw.githubusercontent.com/wundergraph/cosmo/main/router/pkg/config/config.schema.json#'\n- at '/events/providers/redis/0/urls': minItems: got 0, want 1") + require.ErrorContains(t, err, "at '/events/providers/redis/0/urls': minItems: got 0, want 1") } From 7a15d0f18e982261185cac04c02be2d8a5691640 Mon Sep 17 00:00:00 2001 From: Alessandro Pagnin Date: Wed, 25 Jun 2025 15:26:53 +0200 Subject: [PATCH 125/126] chore: don't use normalizeSubgraph --- composition/tests/v1/events.test.ts | 516 +++++++++++++--------------- 1 file changed, 233 insertions(+), 283 deletions(-) diff --git a/composition/tests/v1/events.test.ts b/composition/tests/v1/events.test.ts index 8c60bb4620..ddd164496e 100644 --- a/composition/tests/v1/events.test.ts +++ b/composition/tests/v1/events.test.ts @@ -7,8 +7,6 @@ import { EDFS_NATS_PUBLISH, EDFS_NATS_REQUEST, EDFS_NATS_SUBSCRIBE, - EDFS_REDIS_PUBLISH, - EDFS_REDIS_SUBSCRIBE, federateSubgraphs, FederationResultFailure, FederationResultSuccess, @@ -52,18 +50,20 @@ import { versionOnePersistedDirectiveDefinitions, versionOneSubscriptionEventDefinitions, } from './utils/utils'; -import { normalizeString, schemaToSortedNormalizedString } from '../utils/utils'; +import { + normalizeString, + normalizeSubgraphFailure, + normalizeSubgraphSuccess, + schemaToSortedNormalizedString, +} from '../utils/utils'; describe('events Configuration tests', () => { describe('Normalization tests', () => { test('that events configuration is correctly generated', () => { - const result = normalizeSubgraph( - subgraphA.definitions, - subgraphA.name, - undefined, + const result = normalizeSubgraphSuccess( + subgraphA, ROUTER_COMPATIBILITY_VERSION_ONE, - ) as NormalizationResultSuccess; - expect(result.success).toBe(true); + ); expect(result.configurationDataByTypeName).toStrictEqual( new Map([ [ @@ -156,30 +156,30 @@ describe('events Configuration tests', () => { type Entity @key(fields: "id", resolvable: false) { id: ID! @external } - + type Mutation { updateEntity(id: ID!, name: String!): edfs__PublishResult! @edfs__natsPublish(subject: "updateEntity.{{ args.id }}") } - + type Query { findEntity(id: ID!): Entity! @edfs__natsRequest(subject: "findEntity.{{ args.id }}") } - + type Subscription { entitySubscription(id: ID!): Entity! @edfs__natsSubscribe(subjects: ["entities.{{ args.id }}"], providerId: "my-provider") entitySubscriptionTwo(firstID: ID!, secondID: ID!): Entity! @edfs__natsSubscribe(subjects: ["firstSub.{{ args.firstID }}", "secondSub.{{ args.secondID }}"], providerId: "double", streamConfiguration: {consumerName: "consumer", streamName: "streamName", consumerInactiveThreshold: 300}) } - + input edfs__NatsStreamConfiguration { consumerInactiveThreshold: Int! = 30 consumerName: String! streamName: String! } - + type edfs__PublishResult { success: Boolean! } - + scalar openfed__FieldSet `, ), @@ -309,13 +309,10 @@ describe('events Configuration tests', () => { }); test('that errors are returned if an event directive is invalid #1', () => { - const result = normalizeSubgraph( - subgraphN.definitions, - subgraphN.name, - undefined, + const result = normalizeSubgraphFailure( + subgraphN, ROUTER_COMPATIBILITY_VERSION_ONE, - ) as NormalizationResultFailure; - expect(result.success).toBe(false); + ); expect(result.errors).toHaveLength(2); const rootFieldPath = 'Subscription.entitySubscription'; expect(result.errors[0]).toStrictEqual( @@ -335,13 +332,10 @@ describe('events Configuration tests', () => { }); test('that errors are returned if an event directive is invalid #2', () => { - const result = normalizeSubgraph( - subgraphR.definitions, - subgraphR.name, - undefined, + const result = normalizeSubgraphFailure( + subgraphR, ROUTER_COMPATIBILITY_VERSION_ONE, - ) as NormalizationResultFailure; - expect(result.success).toBe(false); + ); expect(result.errors).toHaveLength(1); const directiveName = 'edfs__natsSubscribe'; const rootFieldPath = 'Subscription.entitySubscription'; @@ -353,13 +347,10 @@ describe('events Configuration tests', () => { }); test('that an error is returned if edfs__NatsStreamConfiguration is improperly defined', () => { - const result = normalizeSubgraph( - subgraphP.definitions, - subgraphP.name, - undefined, + const result = normalizeSubgraphFailure( + subgraphP, ROUTER_COMPATIBILITY_VERSION_ONE, - ) as NormalizationResultFailure; - expect(result.success).toBe(false); + ); expect(result.errors).toHaveLength(1); expect(result.errors[0]).toStrictEqual( invalidEventDrivenGraphError([invalidNatsStreamConfigurationDefinitionErrorMessage]), @@ -367,13 +358,10 @@ describe('events Configuration tests', () => { }); test('that an error is returned if streamConfiguration input is invalid #1', () => { - const result = normalizeSubgraph( - subgraphQ.definitions, - subgraphQ.name, - undefined, + const result = normalizeSubgraphFailure( + subgraphQ, ROUTER_COMPATIBILITY_VERSION_ONE, - ) as NormalizationResultFailure; - expect(result.success).toBe(false); + ); expect(result.errors).toHaveLength(1); expect(result.errors[0]).toStrictEqual( invalidEventDirectiveError('edfs__natsSubscribe', 'Subscription.entitySubscription', [ @@ -383,13 +371,10 @@ describe('events Configuration tests', () => { }); test('that an error is returned if streamConfiguration input is invalid #2', () => { - const result = normalizeSubgraph( - subgraphS.definitions, - subgraphS.name, - undefined, + const result = normalizeSubgraphFailure( + subgraphS, ROUTER_COMPATIBILITY_VERSION_ONE, - ) as NormalizationResultFailure; - expect(result.success).toBe(false); + ); expect(result.errors).toHaveLength(1); expect(result.errors[0]).toStrictEqual( invalidEventDirectiveError('edfs__natsSubscribe', 'Subscription.entitySubscription', [ @@ -399,13 +384,10 @@ describe('events Configuration tests', () => { }); test('that an error is returned if streamConfiguration input is invalid #3', () => { - const result = normalizeSubgraph( - subgraphT.definitions, - subgraphT.name, - undefined, + const result = normalizeSubgraphFailure( + subgraphT, ROUTER_COMPATIBILITY_VERSION_ONE, - ) as NormalizationResultFailure; - expect(result.success).toBe(false); + ); expect(result.errors).toHaveLength(1); expect(result.errors[0]).toStrictEqual( invalidEventDirectiveError('edfs__natsSubscribe', 'Subscription.entitySubscription', [ @@ -420,13 +402,10 @@ describe('events Configuration tests', () => { }); test('that edfs__NatsStreamConfiguration does not need to be defined if @edfs__natsSubscribe is not defined', () => { - const result = normalizeSubgraph( - subgraphU.definitions, - subgraphU.name, - undefined, + const result = normalizeSubgraphSuccess( + subgraphU, ROUTER_COMPATIBILITY_VERSION_ONE, - ) as NormalizationResultSuccess; - expect(result.success).toBe(true); + ); expect(result.configurationDataByTypeName).toStrictEqual( new Map([ [ @@ -510,12 +489,10 @@ describe('events Configuration tests', () => { }); test('that an error is returned if a NATS subscribe subject references an invalid argument', () => { - const result = normalizeSubgraph( - subgraphW.definitions, - subgraphW.name, - undefined, + const result = normalizeSubgraphFailure( + subgraphW, ROUTER_COMPATIBILITY_VERSION_ONE, - ) as NormalizationResultFailure; + ); expect(result.success).toBe(false); expect(result.errors).toHaveLength(1); expect(result.errors[0]).toStrictEqual( @@ -526,12 +503,10 @@ describe('events Configuration tests', () => { }); test('that an error is returned if a NATS request subject references an invalid argument', () => { - const result = normalizeSubgraph( - subgraphX.definitions, - subgraphX.name, - undefined, + const result = normalizeSubgraphFailure( + subgraphX, ROUTER_COMPATIBILITY_VERSION_ONE, - ) as NormalizationResultFailure; + ); expect(result.success).toBe(false); expect(result.errors).toHaveLength(1); expect(result.errors[0]).toStrictEqual( @@ -542,13 +517,10 @@ describe('events Configuration tests', () => { }); test('that an error is returned if a NATS publish subject references an invalid argument', () => { - const result = normalizeSubgraph( - subgraphY.definitions, - subgraphY.name, - undefined, + const result = normalizeSubgraphFailure( + subgraphY, ROUTER_COMPATIBILITY_VERSION_ONE, - ) as NormalizationResultFailure; - expect(result.success).toBe(false); + ); expect(result.errors).toHaveLength(1); expect(result.errors[0]).toStrictEqual( invalidEventDirectiveError('edfs__natsPublish', 'Mutation.entityPublish', [ @@ -558,13 +530,10 @@ describe('events Configuration tests', () => { }); test('that an error is returned if a Kafka subscribe subject references an invalid argument', () => { - const result = normalizeSubgraph( - subgraphZ.definitions, - subgraphZ.name, - undefined, + const result = normalizeSubgraphFailure( + subgraphZ, ROUTER_COMPATIBILITY_VERSION_ONE, - ) as NormalizationResultFailure; - expect(result.success).toBe(false); + ); expect(result.errors).toHaveLength(1); expect(result.errors[0]).toStrictEqual( invalidEventDirectiveError('edfs__kafkaSubscribe', 'Subscription.entitySubscription', [ @@ -574,13 +543,10 @@ describe('events Configuration tests', () => { }); test('that an error is returned if a Kafka publish subject references an invalid argument', () => { - const result = normalizeSubgraph( - subgraphAA.definitions, - subgraphAA.name, - undefined, + const result = normalizeSubgraphFailure( + subgraphAA, ROUTER_COMPATIBILITY_VERSION_ONE, - ) as NormalizationResultFailure; - expect(result.success).toBe(false); + ); expect(result.errors).toHaveLength(1); expect(result.errors[0]).toStrictEqual( invalidEventDirectiveError('edfs__kafkaPublish', 'Mutation.entityPublish', [ @@ -590,13 +556,10 @@ describe('events Configuration tests', () => { }); test('that an error is returned if a NATS subscribe subject references two invalid arguments', () => { - const result = normalizeSubgraph( - subgraphAB.definitions, - subgraphAB.name, - undefined, + const result = normalizeSubgraphFailure( + subgraphAB, ROUTER_COMPATIBILITY_VERSION_ONE, - ) as NormalizationResultFailure; - expect(result.success).toBe(false); + ); expect(result.errors).toHaveLength(1); expect(result.errors[0]).toStrictEqual( invalidEventDirectiveError('edfs__natsSubscribe', 'Subscription.entitySubscription', [ @@ -607,13 +570,10 @@ describe('events Configuration tests', () => { }); test('that an error is returned if a NATS request subject references two invalid arguments', () => { - const result = normalizeSubgraph( - subgraphAC.definitions, - subgraphAC.name, - undefined, + const result = normalizeSubgraphFailure( + subgraphAC, ROUTER_COMPATIBILITY_VERSION_ONE, - ) as NormalizationResultFailure; - expect(result.success).toBe(false); + ); expect(result.errors).toHaveLength(1); expect(result.errors[0]).toStrictEqual( invalidEventDirectiveError('edfs__natsRequest', 'Query.entityRequest', [ @@ -624,13 +584,10 @@ describe('events Configuration tests', () => { }); test('that an error is returned if a NATS publish subject references two invalid arguments', () => { - const result = normalizeSubgraph( - subgraphAD.definitions, - subgraphAD.name, - undefined, + const result = normalizeSubgraphFailure( + subgraphAD, ROUTER_COMPATIBILITY_VERSION_ONE, - ) as NormalizationResultFailure; - expect(result.success).toBe(false); + ); expect(result.errors).toHaveLength(1); expect(result.errors[0]).toStrictEqual( invalidEventDirectiveError('edfs__natsPublish', 'Mutation.entityPublish', [ @@ -641,13 +598,10 @@ describe('events Configuration tests', () => { }); test('that an error is returned if a Kafka subscribe subject references two invalid arguments', () => { - const result = normalizeSubgraph( - subgraphAE.definitions, - subgraphAE.name, - undefined, + const result = normalizeSubgraphFailure( + subgraphAE, ROUTER_COMPATIBILITY_VERSION_ONE, - ) as NormalizationResultFailure; - expect(result.success).toBe(false); + ); expect(result.errors).toHaveLength(1); expect(result.errors[0]).toStrictEqual( invalidEventDirectiveError('edfs__kafkaSubscribe', 'Subscription.entitySubscription', [ @@ -658,13 +612,10 @@ describe('events Configuration tests', () => { }); test('that an error is returned if a Kafka publish subject references two invalid arguments', () => { - const result = normalizeSubgraph( - subgraphAF.definitions, - subgraphAF.name, - undefined, + const result = normalizeSubgraphFailure( + subgraphAF, ROUTER_COMPATIBILITY_VERSION_ONE, - ) as NormalizationResultFailure; - expect(result.success).toBe(false); + ); expect(result.errors).toHaveLength(1); expect(result.errors[0]).toStrictEqual( invalidEventDirectiveError('edfs__kafkaPublish', 'Mutation.entityPublish', [ @@ -676,13 +627,10 @@ describe('events Configuration tests', () => { }); test('that an error is returned if a NATS subscribe subject references a valid argument and an invalid one', () => { - const result = normalizeSubgraph( - subgraphAG.definitions, - subgraphAG.name, - undefined, + const result = normalizeSubgraphFailure( + subgraphAG, ROUTER_COMPATIBILITY_VERSION_ONE, - ) as NormalizationResultFailure; - expect(result.success).toBe(false); + ); expect(result.errors).toHaveLength(1); expect(result.errors[0]).toStrictEqual( invalidEventDirectiveError('edfs__natsSubscribe', 'Subscription.entitySubscription', [ @@ -692,13 +640,10 @@ describe('events Configuration tests', () => { }); test('that an error is returned if a NATS request subject references a valid argument and an invalid one', () => { - const result = normalizeSubgraph( - subgraphAH.definitions, - subgraphAH.name, - undefined, + const result = normalizeSubgraphFailure( + subgraphAH, ROUTER_COMPATIBILITY_VERSION_ONE, - ) as NormalizationResultFailure; - expect(result.success).toBe(false); + ); expect(result.errors).toHaveLength(1); expect(result.errors[0]).toStrictEqual( invalidEventDirectiveError('edfs__natsRequest', 'Query.entityRequest', [ @@ -708,13 +653,10 @@ describe('events Configuration tests', () => { }); test('that an error is returned if a NATS request subject uses streamConfiguration and there is a wrong definition of edfs__NatsStreamConfiguration', () => { - const result = normalizeSubgraph( - subgraphAN.definitions, - subgraphAN.name, - undefined, + const result = normalizeSubgraphFailure( + subgraphAN, ROUTER_COMPATIBILITY_VERSION_ONE, - ) as NormalizationResultFailure; - expect(result.success).toBe(false); + ); expect(result.errors).toHaveLength(1); expect(result.errors[0]).toStrictEqual( invalidEventDrivenGraphError([invalidNatsStreamConfigurationDefinitionErrorMessage]), @@ -722,13 +664,10 @@ describe('events Configuration tests', () => { }); test('that no error is returned if a NATS request subject is without streamConfiguration and there is a wrong definition of edfs__NatsStreamConfiguration', () => { - const result = normalizeSubgraph( - subgraphAO.definitions, - subgraphAO.name, - undefined, + const result = normalizeSubgraphSuccess( + subgraphAO, ROUTER_COMPATIBILITY_VERSION_ONE, - ) as NormalizationResultSuccess; - expect(result.success).toBe(true); + ); expect(schemaToSortedNormalizedString(result.schema)).toBe( normalizeString( versionOneSubscriptionEventDefinitions + @@ -736,19 +675,19 @@ describe('events Configuration tests', () => { type Entity @key(fields: "id", resolvable: false) { id: ID! @external } - + type Subscription { entitySubscription(id: ID!): Entity! @edfs__natsSubscribe( subjects: ["entities.{{ args.id }}"] ) } - + input edfs__NatsStreamConfiguration { consumerInactiveThreshold: Int! = 30 consumerName: String! streamName: String! } - + scalar openfed__FieldSet `, ), @@ -756,13 +695,10 @@ describe('events Configuration tests', () => { }); test('that no error is returned if a NATS request subject is with a streamConfiguration and there is a correct definition of edfs__NatsStreamConfiguration', () => { - const result = normalizeSubgraph( - subgraphAP.definitions, - subgraphAP.name, - undefined, + const result = normalizeSubgraphSuccess( + subgraphAP, ROUTER_COMPATIBILITY_VERSION_ONE, - ) as NormalizationResultSuccess; - expect(result.success).toBe(true); + ); expect(schemaToSortedNormalizedString(result.schema)).toBe( normalizeString( versionOneSubscriptionEventDefinitions + @@ -770,20 +706,20 @@ describe('events Configuration tests', () => { type Entity @key(fields: "id", resolvable: false) { id: ID! @external } - + type Subscription { entitySubscription(id: ID!): Entity! @edfs__natsSubscribe( subjects: ["entities.{{ args.id }}"], streamConfiguration: {consumerInactiveThreshold: 300, consumerName: "consumer", streamName: "streamName"} ) } - + input edfs__NatsStreamConfiguration { consumerInactiveThreshold: Int! = 30 consumerName: String! streamName: String! } - + scalar openfed__FieldSet `, ), @@ -791,13 +727,10 @@ describe('events Configuration tests', () => { }); test('that an error is returned if a NATS request subject is with a streamConfiguration and there is a definition of edfs__NatsStreamConfiguration without default consumerInactiveThreshold', () => { - const result = normalizeSubgraph( - subgraphAQ.definitions, - subgraphAQ.name, - undefined, + const result = normalizeSubgraphFailure( + subgraphAQ, ROUTER_COMPATIBILITY_VERSION_ONE, - ) as NormalizationResultFailure; - expect(result.success).toBe(false); + ); expect(result.errors).toHaveLength(1); expect(result.errors[0]).toStrictEqual( invalidEventDrivenGraphError([invalidNatsStreamConfigurationDefinitionErrorMessage]), @@ -805,13 +738,10 @@ describe('events Configuration tests', () => { }); test('that an error is returned if a NATS request subject is with a streamConfiguration and there is a definition of edfs__NatsStreamConfiguration with an incorrect consumerInactiveThreshold default value', () => { - const result = normalizeSubgraph( - subgraphAR.definitions, - subgraphAR.name, - undefined, + const result = normalizeSubgraphFailure( + subgraphAR, ROUTER_COMPATIBILITY_VERSION_ONE, - ) as NormalizationResultFailure; - expect(result.success).toBe(false); + ); expect(result.errors).toHaveLength(1); expect(result.errors[0]).toStrictEqual( invalidEventDrivenGraphError([invalidNatsStreamConfigurationDefinitionErrorMessage]), @@ -819,13 +749,10 @@ describe('events Configuration tests', () => { }); test('that an error is returned if a NATS publish subject references a valid argument and an invalid one', () => { - const result = normalizeSubgraph( - subgraphAI.definitions, - subgraphAI.name, - undefined, + const result = normalizeSubgraphFailure( + subgraphAI, ROUTER_COMPATIBILITY_VERSION_ONE, - ) as NormalizationResultFailure; - expect(result.success).toBe(false); + ); expect(result.errors).toHaveLength(1); expect(result.errors[0]).toStrictEqual( invalidEventDirectiveError('edfs__natsPublish', 'Mutation.entityPublish', [ @@ -835,13 +762,10 @@ describe('events Configuration tests', () => { }); test('that an error is returned if a Kafka subscribe subject references a valid argument and an invalid one', () => { - const result = normalizeSubgraph( - subgraphAL.definitions, - subgraphAL.name, - undefined, + const result = normalizeSubgraphFailure( + subgraphAL, ROUTER_COMPATIBILITY_VERSION_ONE, - ) as NormalizationResultFailure; - expect(result.success).toBe(false); + ); expect(result.errors).toHaveLength(1); expect(result.errors[0]).toStrictEqual( invalidEventDirectiveError('edfs__kafkaSubscribe', 'Subscription.entitySubscription', [ @@ -851,13 +775,10 @@ describe('events Configuration tests', () => { }); test('that an error is returned if a Kafka publish subject references a valid argument and an invalid one', () => { - const result = normalizeSubgraph( - subgraphAM.definitions, - subgraphAM.name, - undefined, + const result = normalizeSubgraphFailure( + subgraphAM, ROUTER_COMPATIBILITY_VERSION_ONE, - ) as NormalizationResultFailure; - expect(result.success).toBe(false); + ); expect(result.errors).toHaveLength(1); expect(result.errors[0]).toStrictEqual( invalidEventDirectiveError('edfs__kafkaPublish', 'Mutation.entityPublish', [ @@ -867,13 +788,10 @@ describe('events Configuration tests', () => { }); test('that an error is returned if a Redis subscribe subject references a valid argument and an invalid one', () => { - const result = normalizeSubgraph( - subgraphAS.definitions, - subgraphAS.name, - undefined, + const result = normalizeSubgraphFailure( + subgraphAS, ROUTER_COMPATIBILITY_VERSION_ONE, - ) as NormalizationResultFailure; - expect(result.success).toBe(false); + ); expect(result.errors).toHaveLength(1); expect(result.errors[0]).toStrictEqual( invalidEventDirectiveError('edfs__redisSubscribe', 'Subscription.entitySubscription', [ @@ -883,13 +801,10 @@ describe('events Configuration tests', () => { }); test('that an error is returned if a Redis publish subject references a valid argument and an invalid one', () => { - const result = normalizeSubgraph( - subgraphAT.definitions, - subgraphAT.name, - undefined, + const result = normalizeSubgraphFailure( + subgraphAT, ROUTER_COMPATIBILITY_VERSION_ONE, - ) as NormalizationResultFailure; - expect(result.success).toBe(false); + ); expect(result.errors).toHaveLength(1); expect(result.errors[0]).toStrictEqual( invalidEventDirectiveError('edfs__redisPublish', 'Mutation.entityPublish', [ @@ -899,13 +814,10 @@ describe('events Configuration tests', () => { }); test('that an error is returned if a Redis subscribe subject references two invalid arguments', () => { - const result = normalizeSubgraph( - subgraphAU.definitions, - subgraphAU.name, - undefined, + const result = normalizeSubgraphFailure( + subgraphAU, ROUTER_COMPATIBILITY_VERSION_ONE, - ) as NormalizationResultFailure; - expect(result.success).toBe(false); + ); expect(result.errors).toHaveLength(1); expect(result.errors[0]).toStrictEqual( invalidEventDirectiveError('edfs__redisSubscribe', 'Subscription.entitySubscription', [ @@ -916,13 +828,10 @@ describe('events Configuration tests', () => { }); test('that an error is returned if a Redis publish subject references two invalid arguments', () => { - const result = normalizeSubgraph( - subgraphAV.definitions, - subgraphAV.name, - undefined, + const result = normalizeSubgraphFailure( + subgraphAV, ROUTER_COMPATIBILITY_VERSION_ONE, - ) as NormalizationResultFailure; - expect(result.success).toBe(false); + ); expect(result.errors).toHaveLength(1); expect(result.errors[0]).toStrictEqual( invalidEventDirectiveError('edfs__redisPublish', 'Mutation.entityPublish', [ @@ -933,13 +842,10 @@ describe('events Configuration tests', () => { }); test('that Redis configuration is correctly generated', () => { - const result = normalizeSubgraph( - subgraphAW.definitions, - subgraphAW.name, - undefined, + const result = normalizeSubgraphSuccess( + subgraphAW, ROUTER_COMPATIBILITY_VERSION_ONE, - ) as NormalizationResultSuccess; - expect(result.success).toBe(true); + ); expect(result.configurationDataByTypeName).toStrictEqual( new Map([ [ @@ -1127,19 +1033,19 @@ describe('events Configuration tests', () => { id: ID! object: Object } - + interface Interface { id: ID! } - + type Object { id: ID! } - + type Query { findEntity(fieldSet: String!): Interface! } - + type Subscription { entitySubscription(fieldSet: String!): Interface! } @@ -1166,19 +1072,19 @@ describe('events Configuration tests', () => { id: ID! object: Object } - + type Object { id: ID! } - + type Query { findEntity(fieldSet: String!): Union! } - + type Subscription { entitySubscription(fieldSet: String!): Union! } - + union Union = Entity `, ), @@ -1231,24 +1137,24 @@ const subgraphA: Subgraph = { type Query { findEntity(id: ID!): Entity! @edfs__natsRequest(subject: "findEntity.{{ args.id }}") } - + type edfs__PublishResult { success: Boolean! } - + type Mutation { updateEntity(id: ID!, name: String!): edfs__PublishResult! @edfs__natsPublish(subject: "updateEntity.{{ args.id }}") } - + type Subscription { entitySubscription(id: ID!): Entity! @edfs__natsSubscribe(subjects: ["entities.{{ args.id }}"], providerId: "my-provider") entitySubscriptionTwo(firstID: ID!, secondID: ID!): Entity! @edfs__natsSubscribe(subjects: ["firstSub.{{ args.firstID }}", "secondSub.{{ args.secondID }}"], providerId: "double", streamConfiguration: {consumerName: "consumer", streamName: "streamName", consumerInactiveThreshold: 300}) } - + type Entity @key(fields: "id", resolvable: false) { id: ID! @external } - + input edfs__NatsStreamConfiguration { consumerInactiveThreshold: Int! = 30 consumerName: String! @@ -1261,11 +1167,11 @@ const subgraphStringB = ` schema { subscription: Subscriptions } - + type Subscriptions { entitySubscription(id: ID!): Entity! @edfs__natsSubscribe(subjects: ["entities.{{ args.id }}"]) } - + type Entity @key(fields: "id", resolvable: false) { id: ID! @external } @@ -1279,15 +1185,15 @@ const subgraphStringC = ` type edfs__PublishResult { success: Boolean! } - + type Mutation { updateEntity(id: ID!, name: String!): edfs__PublishResult! @edfs__natsPublish(subject: "updateEntity.{{ args.id }}", providerId: "myMutationSourceName") } - + type Subscription { entitySubscription(id: ID!): Entity! @edfs__natsSubscribe(subjects: ["entities.{{ args.id }}"], providerId: "mySubscriptionSourceName") } - + type Entity @key(fields: "id", resolvable: false) { id: ID! @external } @@ -1300,11 +1206,11 @@ const subgraphC: Subgraph = { type Query { findEntity(id: ID!): Entity! @edfs__natsRequest(subject: "findEntity.{{ args.id }}") } - + type Subscription { entitySubscription(id: ID!): Entity! @edfs__natsSubscribe(subjects: ["entities.{{ args.id }}"]) } - + type Entity @key(fields: "id", resolvable: false) { id: ID! @external name: String! @@ -1319,11 +1225,11 @@ const subgraphD: Subgraph = { type Query { findEntity(id: ID!): Entity! @edfs__natsRequest(subject: "findEntity.{{ args.id }}") } - + type Subscription { entitySubscription(id: ID!): Entity! @edfs__natsSubscribe(subjects: ["entities.{{ args.id }}"]) } - + type Entity @key(fields: "id", resolvable: false) { id: ID! } @@ -1337,21 +1243,21 @@ const subgraphE: Subgraph = { type Query { requestEntity(id: ID!): Entity! } - - + + type edfs__PublishResult { success: Boolean! } - + type Mutation { publishEntity(id: ID!): edfs__PublishResult! } - + type Subscription { subscribeEntity(id: ID!): Entity! entitySubscription(id: ID!): Entity! @edfs__natsSubscribe(subjects: ["entities.{{ args.id }}"]) } - + type Entity @key(fields: "id", resolvable: false) { id: ID! @external } @@ -1365,11 +1271,11 @@ const subgraphF: Subgraph = { type Query { requestEntity(id: ID!): String! @edfs__natsRequest(subject: "findEntity.{{ args.id }}") } - + type Subscription { entitySubscription(id: ID!): Entity! @edfs__natsSubscribe(subjects: ["entities.{{ args.id }}"]) } - + type Entity @key(fields: "id", resolvable: false) { id: ID! @external } @@ -1383,11 +1289,11 @@ const subgraphG: Subgraph = { type Query { findEntity(id: ID!): Entity! @edfs__natsRequest(subject: "findEntity.{{ args.id }}") } - + type Subscription { entitySubscription(id: ID!): Entity! @edfs__natsSubscribe(subjects: ["entities.{{ args.id }}"]) } - + type Entity @key(fields: "id") { id: ID! @external } @@ -1401,16 +1307,16 @@ const subgraphH: Subgraph = { type Query { findEntity(fieldSet: String!): Entity! @edfs__natsRequest(subject: "findEntity.{{ args.fieldSet }}") } - + type Subscription { entitySubscription(fieldSet: String!): Entity! @edfs__natsSubscribe(subjects: ["entities.{{ args.fieldSet }}"]) } - + type Entity @key(fields: "id object { id }", resolvable: false) { id: ID! @external object: Object @external } - + extend type Object { id: ID! @external } @@ -1424,20 +1330,20 @@ const subgraphI: Subgraph = { type Query { findEntity(fieldSet: String!): Interface! @edfs__natsRequest(subject: "findEntity.{{ args.fieldSet }}") } - + type Subscription { entitySubscription(fieldSet: String!): Interface! @edfs__natsSubscribe(subjects: ["entities.{{ args.fieldSet }}"]) } - + interface Interface { id: ID! } - + type Entity implements Interface @key(fields: "id object { id }", resolvable: false) { id: ID! @external object: Object @external } - + type Object { id: ID! @external } @@ -1451,18 +1357,18 @@ const subgraphJ: Subgraph = { type Query { findEntity(fieldSet: String!): Union! @edfs__natsRequest(subject: "findEntity.{{ args.fieldSet }}") } - + type Subscription { entitySubscription(fieldSet: String!): Union! @edfs__natsSubscribe(subjects: ["entities.{{ args.fieldSet }}"]) } - + union Union = Entity - + type Entity @key(fields: "id object { id }", resolvable: false) { id: ID! @external object: Object @external } - + type Object { id: ID! @external } @@ -1476,23 +1382,23 @@ const subgraphK: Subgraph = { type Query { findEntity(id: ID!): Entity! @edfs__natsPublish(subject: "findEntity.{{ args.id }}") } - + type edfs__PublishResult { success: Boolean! } - + type Mutation { publishEntity(id: ID!): edfs__PublishResult! @edfs__natsSubscribe(subjects: ["publishEntity.{{ args.id }}"]) } - + type Subscription { entitySubscription(id: ID!): Entity! @edfs__natsRequest(subject: "entities.{{ args.id }}") } - + type Entity @key(fields: "id", resolvable: false) { id: ID! @external } - + input edfs__NatsStreamConfiguration { consumerName: String! streamName: String! @@ -1507,15 +1413,15 @@ const subgraphL: Subgraph = { type Mutation { publishEntity(id: ID!): Entity! @edfs__natsPublish(subject: "publishEntity.{{ args.id }}") } - + type Subscription { entitySubscription(id: ID!): Entity! @edfs__natsSubscribe(subjects: ["entities.{{ args.id }}"]) } - + type Entity @key(fields: "id", resolvable: false) { id: ID! @external } - + input edfs__NatsStreamConfiguration { consumerName: String! streamName: String! @@ -1530,15 +1436,15 @@ const subgraphM: Subgraph = { type Query { findEntity(id: ID!): Entity @edfs__natsRequest(subject: "findEntity.{{ args.id }}") } - + type Subscription { entitySubscription(id: ID!): [Entity!]! @edfs__natsSubscribe(subjects: ["entities.{{ args.id }}"]) } - + type Entity @key(fields: "id", resolvable: false) { id: ID! @external } - + input edfs__NatsStreamConfiguration { consumerName: String! streamName: String! @@ -1553,11 +1459,11 @@ const subgraphN: Subgraph = { type Subscription { entitySubscription(id: ID!): Entity! @edfs__natsSubscribe(subjects: [1], subjects: ["topic"], providerId: false, providerId: "providerId", unknownArgument: null) } - + type Entity @key(fields: "id", resolvable: false) { id: ID! @external } - + input edfs__NatsStreamConfiguration { consumerName: String! streamName: String! @@ -1572,7 +1478,7 @@ const subgraphO: Subgraph = { type Subscription { entitySubscription(id: ID!): Entity! @edfs__natsSubscribe(subjects: ["entities.{{ args.id }}"]) } - + type Entity @key(fields: "id", resolvable: false) { id: ID! @external } @@ -1586,11 +1492,11 @@ const subgraphP: Subgraph = { type Subscription { entitySubscription(id: ID!): Entity! @edfs__natsSubscribe(subjects: ["entities.{{ args.id }}"], streamConfiguration: { consumerName: "consumerName", streamName: "streamName" }) } - + type Entity @key(fields: "id", resolvable: false) { id: ID! @external } - + scalar edfs__NatsStreamConfiguration `), }; @@ -1605,11 +1511,11 @@ const subgraphQ: Subgraph = { streamConfiguration: { consumerName: "consumerName", consumerName: "hello", invalidField: 1 } ) } - + type Entity @key(fields: "id", resolvable: false) { id: ID! @external } - + input edfs__NatsStreamConfiguration { consumerInactiveThreshold: Int! = 30 consumerName: String! @@ -1625,7 +1531,7 @@ const subgraphR: Subgraph = { type Subscription { entitySubscription(id: ID!): Entity! @edfs__natsSubscribe } - + type Entity @key(fields: "id", resolvable: false) { id: ID! @external } @@ -1642,11 +1548,11 @@ const subgraphS: Subgraph = { streamConfiguration: { consumerName: 1, streamName: "", } ) } - + type Entity @key(fields: "id", resolvable: false) { id: ID! @external } - + input edfs__NatsStreamConfiguration { consumerInactiveThreshold: Int! = 30 consumerName: String! @@ -1665,11 +1571,11 @@ const subgraphT: Subgraph = { streamConfiguration: { invalidFieldOne: 1, invalidFieldTwo: "test", } ) } - + type Entity @key(fields: "id", resolvable: false) { id: ID! @external } - + input edfs__NatsStreamConfiguration { consumerInactiveThreshold: Int! = 30 consumerName: String! @@ -1685,20 +1591,20 @@ const subgraphU: Subgraph = { type Entity @key(fields: "id", resolvable: false) { id: ID! @external } - + type Mutation { kafkaMutation: edfs__PublishResult! @edfs__kafkaPublish(topic: "entityAdded", providerId: "myKafka") natsMutation(id: ID!): edfs__PublishResult! @edfs__natsPublish(subject: "updateEntity.{{ args.id }}", providerId: "myNats") } - + type Query { natsQuery(id: ID!): Entity! @edfs__natsRequest(subject: "updateEntity.{{ args.id }}", providerId: "myNats") } - + type Subscription { kafkaSubscription: Entity! @edfs__kafkaSubscribe(topics: ["entityAdded", "entityUpdated"], providerId: "myKafka") } - + type edfs__PublishResult { success: Boolean! } @@ -2157,15 +2063,59 @@ const subgraphAW: Subgraph = { type Entity @key(fields: "id", resolvable: false) { id: ID! @external } - + type Mutation { redisMutation: edfs__PublishResult! @edfs__redisPublish(channel: "entityAdded", providerId: "myRedis") } - + type Subscription { redisSubscription: Entity! @edfs__redisSubscribe(channels: ["entityAdded", "entityUpdated"], providerId: "myRedis") } - + + type edfs__PublishResult { + success: Boolean! + } + `), +}; + +const subgraphAX: Subgraph = { + name: 'subgraph-ax', + url: '', + definitions: parse(` + type Entity @key(fields: "id", resolvable: false) { + id: ID! @external + } + + type Mutation { + redisMutation: edfs__PublishResult! @edfs__redisPublish(channel: "entityAdded", providerId: "myRedis", providerId: "myRedis2") + } + + type Subscription { + redisSubscription: Entity! @edfs__redisSubscribe(channels: ["entityAdded", "entityUpdated"], providerId: "myRedis", channels: ["entityAdded1", "entityUpdated1"]) + } + + type edfs__PublishResult { + success: Boolean! + } + `), +}; + +const subgraphAY: Subgraph = { + name: 'subgraph-ay', + url: '', + definitions: parse(` + type Entity @key(fields: "id", resolvable: false) { + id: ID! @external + } + + type Mutation { + redisMutation: edfs__PublishResult! @edfs__redisPublish(channel: "entityAdded", providerId: "myRedis", wrongArgument: "test") + } + + type Subscription { + redisSubscription: Entity! @edfs__redisSubscribe(channels: ["entityAdded", "entityUpdated"], providerId: "myRedis", anotherWrongArgument: "test2") + } + type edfs__PublishResult { success: Boolean! } From 74ccdb2ea80449fdf4023aa9a646115be3b508a2 Mon Sep 17 00:00:00 2001 From: Alessandro Pagnin Date: Wed, 25 Jun 2025 15:37:36 +0200 Subject: [PATCH 126/126] chore: formatting --- composition/tests/v1/events.test.ts | 165 ++++++---------------------- 1 file changed, 33 insertions(+), 132 deletions(-) diff --git a/composition/tests/v1/events.test.ts b/composition/tests/v1/events.test.ts index ddd164496e..e001eac19f 100644 --- a/composition/tests/v1/events.test.ts +++ b/composition/tests/v1/events.test.ts @@ -60,10 +60,7 @@ import { describe('events Configuration tests', () => { describe('Normalization tests', () => { test('that events configuration is correctly generated', () => { - const result = normalizeSubgraphSuccess( - subgraphA, - ROUTER_COMPATIBILITY_VERSION_ONE, - ); + const result = normalizeSubgraphSuccess(subgraphA, ROUTER_COMPATIBILITY_VERSION_ONE); expect(result.configurationDataByTypeName).toStrictEqual( new Map([ [ @@ -309,10 +306,7 @@ describe('events Configuration tests', () => { }); test('that errors are returned if an event directive is invalid #1', () => { - const result = normalizeSubgraphFailure( - subgraphN, - ROUTER_COMPATIBILITY_VERSION_ONE, - ); + const result = normalizeSubgraphFailure(subgraphN, ROUTER_COMPATIBILITY_VERSION_ONE); expect(result.errors).toHaveLength(2); const rootFieldPath = 'Subscription.entitySubscription'; expect(result.errors[0]).toStrictEqual( @@ -332,10 +326,7 @@ describe('events Configuration tests', () => { }); test('that errors are returned if an event directive is invalid #2', () => { - const result = normalizeSubgraphFailure( - subgraphR, - ROUTER_COMPATIBILITY_VERSION_ONE, - ); + const result = normalizeSubgraphFailure(subgraphR, ROUTER_COMPATIBILITY_VERSION_ONE); expect(result.errors).toHaveLength(1); const directiveName = 'edfs__natsSubscribe'; const rootFieldPath = 'Subscription.entitySubscription'; @@ -347,10 +338,7 @@ describe('events Configuration tests', () => { }); test('that an error is returned if edfs__NatsStreamConfiguration is improperly defined', () => { - const result = normalizeSubgraphFailure( - subgraphP, - ROUTER_COMPATIBILITY_VERSION_ONE, - ); + const result = normalizeSubgraphFailure(subgraphP, ROUTER_COMPATIBILITY_VERSION_ONE); expect(result.errors).toHaveLength(1); expect(result.errors[0]).toStrictEqual( invalidEventDrivenGraphError([invalidNatsStreamConfigurationDefinitionErrorMessage]), @@ -358,10 +346,7 @@ describe('events Configuration tests', () => { }); test('that an error is returned if streamConfiguration input is invalid #1', () => { - const result = normalizeSubgraphFailure( - subgraphQ, - ROUTER_COMPATIBILITY_VERSION_ONE, - ); + const result = normalizeSubgraphFailure(subgraphQ, ROUTER_COMPATIBILITY_VERSION_ONE); expect(result.errors).toHaveLength(1); expect(result.errors[0]).toStrictEqual( invalidEventDirectiveError('edfs__natsSubscribe', 'Subscription.entitySubscription', [ @@ -371,10 +356,7 @@ describe('events Configuration tests', () => { }); test('that an error is returned if streamConfiguration input is invalid #2', () => { - const result = normalizeSubgraphFailure( - subgraphS, - ROUTER_COMPATIBILITY_VERSION_ONE, - ); + const result = normalizeSubgraphFailure(subgraphS, ROUTER_COMPATIBILITY_VERSION_ONE); expect(result.errors).toHaveLength(1); expect(result.errors[0]).toStrictEqual( invalidEventDirectiveError('edfs__natsSubscribe', 'Subscription.entitySubscription', [ @@ -384,10 +366,7 @@ describe('events Configuration tests', () => { }); test('that an error is returned if streamConfiguration input is invalid #3', () => { - const result = normalizeSubgraphFailure( - subgraphT, - ROUTER_COMPATIBILITY_VERSION_ONE, - ); + const result = normalizeSubgraphFailure(subgraphT, ROUTER_COMPATIBILITY_VERSION_ONE); expect(result.errors).toHaveLength(1); expect(result.errors[0]).toStrictEqual( invalidEventDirectiveError('edfs__natsSubscribe', 'Subscription.entitySubscription', [ @@ -402,10 +381,7 @@ describe('events Configuration tests', () => { }); test('that edfs__NatsStreamConfiguration does not need to be defined if @edfs__natsSubscribe is not defined', () => { - const result = normalizeSubgraphSuccess( - subgraphU, - ROUTER_COMPATIBILITY_VERSION_ONE, - ); + const result = normalizeSubgraphSuccess(subgraphU, ROUTER_COMPATIBILITY_VERSION_ONE); expect(result.configurationDataByTypeName).toStrictEqual( new Map([ [ @@ -489,10 +465,7 @@ describe('events Configuration tests', () => { }); test('that an error is returned if a NATS subscribe subject references an invalid argument', () => { - const result = normalizeSubgraphFailure( - subgraphW, - ROUTER_COMPATIBILITY_VERSION_ONE, - ); + const result = normalizeSubgraphFailure(subgraphW, ROUTER_COMPATIBILITY_VERSION_ONE); expect(result.success).toBe(false); expect(result.errors).toHaveLength(1); expect(result.errors[0]).toStrictEqual( @@ -503,10 +476,7 @@ describe('events Configuration tests', () => { }); test('that an error is returned if a NATS request subject references an invalid argument', () => { - const result = normalizeSubgraphFailure( - subgraphX, - ROUTER_COMPATIBILITY_VERSION_ONE, - ); + const result = normalizeSubgraphFailure(subgraphX, ROUTER_COMPATIBILITY_VERSION_ONE); expect(result.success).toBe(false); expect(result.errors).toHaveLength(1); expect(result.errors[0]).toStrictEqual( @@ -517,10 +487,7 @@ describe('events Configuration tests', () => { }); test('that an error is returned if a NATS publish subject references an invalid argument', () => { - const result = normalizeSubgraphFailure( - subgraphY, - ROUTER_COMPATIBILITY_VERSION_ONE, - ); + const result = normalizeSubgraphFailure(subgraphY, ROUTER_COMPATIBILITY_VERSION_ONE); expect(result.errors).toHaveLength(1); expect(result.errors[0]).toStrictEqual( invalidEventDirectiveError('edfs__natsPublish', 'Mutation.entityPublish', [ @@ -530,10 +497,7 @@ describe('events Configuration tests', () => { }); test('that an error is returned if a Kafka subscribe subject references an invalid argument', () => { - const result = normalizeSubgraphFailure( - subgraphZ, - ROUTER_COMPATIBILITY_VERSION_ONE, - ); + const result = normalizeSubgraphFailure(subgraphZ, ROUTER_COMPATIBILITY_VERSION_ONE); expect(result.errors).toHaveLength(1); expect(result.errors[0]).toStrictEqual( invalidEventDirectiveError('edfs__kafkaSubscribe', 'Subscription.entitySubscription', [ @@ -543,10 +507,7 @@ describe('events Configuration tests', () => { }); test('that an error is returned if a Kafka publish subject references an invalid argument', () => { - const result = normalizeSubgraphFailure( - subgraphAA, - ROUTER_COMPATIBILITY_VERSION_ONE, - ); + const result = normalizeSubgraphFailure(subgraphAA, ROUTER_COMPATIBILITY_VERSION_ONE); expect(result.errors).toHaveLength(1); expect(result.errors[0]).toStrictEqual( invalidEventDirectiveError('edfs__kafkaPublish', 'Mutation.entityPublish', [ @@ -556,10 +517,7 @@ describe('events Configuration tests', () => { }); test('that an error is returned if a NATS subscribe subject references two invalid arguments', () => { - const result = normalizeSubgraphFailure( - subgraphAB, - ROUTER_COMPATIBILITY_VERSION_ONE, - ); + const result = normalizeSubgraphFailure(subgraphAB, ROUTER_COMPATIBILITY_VERSION_ONE); expect(result.errors).toHaveLength(1); expect(result.errors[0]).toStrictEqual( invalidEventDirectiveError('edfs__natsSubscribe', 'Subscription.entitySubscription', [ @@ -570,10 +528,7 @@ describe('events Configuration tests', () => { }); test('that an error is returned if a NATS request subject references two invalid arguments', () => { - const result = normalizeSubgraphFailure( - subgraphAC, - ROUTER_COMPATIBILITY_VERSION_ONE, - ); + const result = normalizeSubgraphFailure(subgraphAC, ROUTER_COMPATIBILITY_VERSION_ONE); expect(result.errors).toHaveLength(1); expect(result.errors[0]).toStrictEqual( invalidEventDirectiveError('edfs__natsRequest', 'Query.entityRequest', [ @@ -584,10 +539,7 @@ describe('events Configuration tests', () => { }); test('that an error is returned if a NATS publish subject references two invalid arguments', () => { - const result = normalizeSubgraphFailure( - subgraphAD, - ROUTER_COMPATIBILITY_VERSION_ONE, - ); + const result = normalizeSubgraphFailure(subgraphAD, ROUTER_COMPATIBILITY_VERSION_ONE); expect(result.errors).toHaveLength(1); expect(result.errors[0]).toStrictEqual( invalidEventDirectiveError('edfs__natsPublish', 'Mutation.entityPublish', [ @@ -598,10 +550,7 @@ describe('events Configuration tests', () => { }); test('that an error is returned if a Kafka subscribe subject references two invalid arguments', () => { - const result = normalizeSubgraphFailure( - subgraphAE, - ROUTER_COMPATIBILITY_VERSION_ONE, - ); + const result = normalizeSubgraphFailure(subgraphAE, ROUTER_COMPATIBILITY_VERSION_ONE); expect(result.errors).toHaveLength(1); expect(result.errors[0]).toStrictEqual( invalidEventDirectiveError('edfs__kafkaSubscribe', 'Subscription.entitySubscription', [ @@ -612,10 +561,7 @@ describe('events Configuration tests', () => { }); test('that an error is returned if a Kafka publish subject references two invalid arguments', () => { - const result = normalizeSubgraphFailure( - subgraphAF, - ROUTER_COMPATIBILITY_VERSION_ONE, - ); + const result = normalizeSubgraphFailure(subgraphAF, ROUTER_COMPATIBILITY_VERSION_ONE); expect(result.errors).toHaveLength(1); expect(result.errors[0]).toStrictEqual( invalidEventDirectiveError('edfs__kafkaPublish', 'Mutation.entityPublish', [ @@ -627,10 +573,7 @@ describe('events Configuration tests', () => { }); test('that an error is returned if a NATS subscribe subject references a valid argument and an invalid one', () => { - const result = normalizeSubgraphFailure( - subgraphAG, - ROUTER_COMPATIBILITY_VERSION_ONE, - ); + const result = normalizeSubgraphFailure(subgraphAG, ROUTER_COMPATIBILITY_VERSION_ONE); expect(result.errors).toHaveLength(1); expect(result.errors[0]).toStrictEqual( invalidEventDirectiveError('edfs__natsSubscribe', 'Subscription.entitySubscription', [ @@ -640,10 +583,7 @@ describe('events Configuration tests', () => { }); test('that an error is returned if a NATS request subject references a valid argument and an invalid one', () => { - const result = normalizeSubgraphFailure( - subgraphAH, - ROUTER_COMPATIBILITY_VERSION_ONE, - ); + const result = normalizeSubgraphFailure(subgraphAH, ROUTER_COMPATIBILITY_VERSION_ONE); expect(result.errors).toHaveLength(1); expect(result.errors[0]).toStrictEqual( invalidEventDirectiveError('edfs__natsRequest', 'Query.entityRequest', [ @@ -653,10 +593,7 @@ describe('events Configuration tests', () => { }); test('that an error is returned if a NATS request subject uses streamConfiguration and there is a wrong definition of edfs__NatsStreamConfiguration', () => { - const result = normalizeSubgraphFailure( - subgraphAN, - ROUTER_COMPATIBILITY_VERSION_ONE, - ); + const result = normalizeSubgraphFailure(subgraphAN, ROUTER_COMPATIBILITY_VERSION_ONE); expect(result.errors).toHaveLength(1); expect(result.errors[0]).toStrictEqual( invalidEventDrivenGraphError([invalidNatsStreamConfigurationDefinitionErrorMessage]), @@ -664,10 +601,7 @@ describe('events Configuration tests', () => { }); test('that no error is returned if a NATS request subject is without streamConfiguration and there is a wrong definition of edfs__NatsStreamConfiguration', () => { - const result = normalizeSubgraphSuccess( - subgraphAO, - ROUTER_COMPATIBILITY_VERSION_ONE, - ); + const result = normalizeSubgraphSuccess(subgraphAO, ROUTER_COMPATIBILITY_VERSION_ONE); expect(schemaToSortedNormalizedString(result.schema)).toBe( normalizeString( versionOneSubscriptionEventDefinitions + @@ -695,10 +629,7 @@ describe('events Configuration tests', () => { }); test('that no error is returned if a NATS request subject is with a streamConfiguration and there is a correct definition of edfs__NatsStreamConfiguration', () => { - const result = normalizeSubgraphSuccess( - subgraphAP, - ROUTER_COMPATIBILITY_VERSION_ONE, - ); + const result = normalizeSubgraphSuccess(subgraphAP, ROUTER_COMPATIBILITY_VERSION_ONE); expect(schemaToSortedNormalizedString(result.schema)).toBe( normalizeString( versionOneSubscriptionEventDefinitions + @@ -727,10 +658,7 @@ describe('events Configuration tests', () => { }); test('that an error is returned if a NATS request subject is with a streamConfiguration and there is a definition of edfs__NatsStreamConfiguration without default consumerInactiveThreshold', () => { - const result = normalizeSubgraphFailure( - subgraphAQ, - ROUTER_COMPATIBILITY_VERSION_ONE, - ); + const result = normalizeSubgraphFailure(subgraphAQ, ROUTER_COMPATIBILITY_VERSION_ONE); expect(result.errors).toHaveLength(1); expect(result.errors[0]).toStrictEqual( invalidEventDrivenGraphError([invalidNatsStreamConfigurationDefinitionErrorMessage]), @@ -738,10 +666,7 @@ describe('events Configuration tests', () => { }); test('that an error is returned if a NATS request subject is with a streamConfiguration and there is a definition of edfs__NatsStreamConfiguration with an incorrect consumerInactiveThreshold default value', () => { - const result = normalizeSubgraphFailure( - subgraphAR, - ROUTER_COMPATIBILITY_VERSION_ONE, - ); + const result = normalizeSubgraphFailure(subgraphAR, ROUTER_COMPATIBILITY_VERSION_ONE); expect(result.errors).toHaveLength(1); expect(result.errors[0]).toStrictEqual( invalidEventDrivenGraphError([invalidNatsStreamConfigurationDefinitionErrorMessage]), @@ -749,10 +674,7 @@ describe('events Configuration tests', () => { }); test('that an error is returned if a NATS publish subject references a valid argument and an invalid one', () => { - const result = normalizeSubgraphFailure( - subgraphAI, - ROUTER_COMPATIBILITY_VERSION_ONE, - ); + const result = normalizeSubgraphFailure(subgraphAI, ROUTER_COMPATIBILITY_VERSION_ONE); expect(result.errors).toHaveLength(1); expect(result.errors[0]).toStrictEqual( invalidEventDirectiveError('edfs__natsPublish', 'Mutation.entityPublish', [ @@ -762,10 +684,7 @@ describe('events Configuration tests', () => { }); test('that an error is returned if a Kafka subscribe subject references a valid argument and an invalid one', () => { - const result = normalizeSubgraphFailure( - subgraphAL, - ROUTER_COMPATIBILITY_VERSION_ONE, - ); + const result = normalizeSubgraphFailure(subgraphAL, ROUTER_COMPATIBILITY_VERSION_ONE); expect(result.errors).toHaveLength(1); expect(result.errors[0]).toStrictEqual( invalidEventDirectiveError('edfs__kafkaSubscribe', 'Subscription.entitySubscription', [ @@ -775,10 +694,7 @@ describe('events Configuration tests', () => { }); test('that an error is returned if a Kafka publish subject references a valid argument and an invalid one', () => { - const result = normalizeSubgraphFailure( - subgraphAM, - ROUTER_COMPATIBILITY_VERSION_ONE, - ); + const result = normalizeSubgraphFailure(subgraphAM, ROUTER_COMPATIBILITY_VERSION_ONE); expect(result.errors).toHaveLength(1); expect(result.errors[0]).toStrictEqual( invalidEventDirectiveError('edfs__kafkaPublish', 'Mutation.entityPublish', [ @@ -788,10 +704,7 @@ describe('events Configuration tests', () => { }); test('that an error is returned if a Redis subscribe subject references a valid argument and an invalid one', () => { - const result = normalizeSubgraphFailure( - subgraphAS, - ROUTER_COMPATIBILITY_VERSION_ONE, - ); + const result = normalizeSubgraphFailure(subgraphAS, ROUTER_COMPATIBILITY_VERSION_ONE); expect(result.errors).toHaveLength(1); expect(result.errors[0]).toStrictEqual( invalidEventDirectiveError('edfs__redisSubscribe', 'Subscription.entitySubscription', [ @@ -801,10 +714,7 @@ describe('events Configuration tests', () => { }); test('that an error is returned if a Redis publish subject references a valid argument and an invalid one', () => { - const result = normalizeSubgraphFailure( - subgraphAT, - ROUTER_COMPATIBILITY_VERSION_ONE, - ); + const result = normalizeSubgraphFailure(subgraphAT, ROUTER_COMPATIBILITY_VERSION_ONE); expect(result.errors).toHaveLength(1); expect(result.errors[0]).toStrictEqual( invalidEventDirectiveError('edfs__redisPublish', 'Mutation.entityPublish', [ @@ -814,10 +724,7 @@ describe('events Configuration tests', () => { }); test('that an error is returned if a Redis subscribe subject references two invalid arguments', () => { - const result = normalizeSubgraphFailure( - subgraphAU, - ROUTER_COMPATIBILITY_VERSION_ONE, - ); + const result = normalizeSubgraphFailure(subgraphAU, ROUTER_COMPATIBILITY_VERSION_ONE); expect(result.errors).toHaveLength(1); expect(result.errors[0]).toStrictEqual( invalidEventDirectiveError('edfs__redisSubscribe', 'Subscription.entitySubscription', [ @@ -828,10 +735,7 @@ describe('events Configuration tests', () => { }); test('that an error is returned if a Redis publish subject references two invalid arguments', () => { - const result = normalizeSubgraphFailure( - subgraphAV, - ROUTER_COMPATIBILITY_VERSION_ONE, - ); + const result = normalizeSubgraphFailure(subgraphAV, ROUTER_COMPATIBILITY_VERSION_ONE); expect(result.errors).toHaveLength(1); expect(result.errors[0]).toStrictEqual( invalidEventDirectiveError('edfs__redisPublish', 'Mutation.entityPublish', [ @@ -842,10 +746,7 @@ describe('events Configuration tests', () => { }); test('that Redis configuration is correctly generated', () => { - const result = normalizeSubgraphSuccess( - subgraphAW, - ROUTER_COMPATIBILITY_VERSION_ONE, - ); + const result = normalizeSubgraphSuccess(subgraphAW, ROUTER_COMPATIBILITY_VERSION_ONE); expect(result.configurationDataByTypeName).toStrictEqual( new Map([ [