Documentation
¶
Index ¶
- Constants
- Variables
- func EntityInterfacesPlanConfiguration(t *testing.T, factory plan.PlannerFactory[Configuration]) *plan.Configuration
- func EntityInterfacesPlanConfigurationBench(t *testing.B, factory plan.PlannerFactory[Configuration]) *plan.Configuration
- func IsDefaultGraphQLSubscriptionClient(client GraphQLSubscriptionClient) bool
- type Configuration
- type ConfigurationInput
- type DefaultSubscriptionClientFactory
- type Factory
- func NewFactory(executionContext context.Context, httpClient *http.Client, ...) (*Factory[Configuration], error)
- func NewFactoryGRPC(executionContext context.Context, grpcClient grpc.ClientConnInterface) (*Factory[Configuration], error)
- func NewFactoryGRPCClientProvider(executionContext context.Context, ...) (*Factory[Configuration], error)
- func (f *Factory[T]) Context() context.Context
- func (f *Factory[T]) EnableSubgraphFieldSelectionMergingNullabilityRelaxation()
- func (f *Factory[T]) Planner(logger abstractlogger.Logger) plan.DataSourcePlanner[T]
- func (f *Factory[T]) PlanningBehavior() plan.DataSourcePlanningBehavior
- func (f *Factory[T]) UpstreamSchema(dataSourceConfig plan.DataSourceConfiguration[T]) (*ast.Document, bool)
- type FederationConfiguration
- type FetchConfiguration
- type GraphQLBody
- type GraphQLSubscriptionClient
- type GraphQLSubscriptionClientFactory
- type GraphQLSubscriptionOptions
- type OnWsConnectionInitCallback
- type Planner
- func (p *Planner[T]) ConfigureFetch() resolve.FetchConfiguration
- func (p *Planner[T]) ConfigureSubscription() plan.SubscriptionConfiguration
- func (p *Planner[T]) DebugPrint(args ...interface{})
- func (p *Planner[T]) DownstreamResponseFieldAlias(downstreamFieldRef int) (alias string, exists bool)
- func (p *Planner[T]) EnableDebug()
- func (p *Planner[T]) EnableDebugQueryPlanLogging()
- func (p *Planner[T]) EnableSubgraphRequestMinifier()
- func (p *Planner[T]) EnterArgument(_ int)
- func (p *Planner[T]) EnterDirective(ref int)
- func (p *Planner[T]) EnterDocument(_, _ *ast.Document)
- func (p *Planner[T]) EnterField(ref int)
- func (p *Planner[T]) EnterInlineFragment(ref int)
- func (p *Planner[T]) EnterOperationDefinition(ref int)
- func (p *Planner[T]) EnterSelectionSet(ref int)
- func (p *Planner[T]) EnterVariableDefinition(ref int)
- func (p *Planner[T]) ID() (id int)
- func (p *Planner[T]) IncludeQueryPlanInFetchConfiguration()
- func (p *Planner[T]) LeaveDocument(_, _ *ast.Document)
- func (p *Planner[T]) LeaveField(ref int)
- func (p *Planner[T]) LeaveInlineFragment(ref int)
- func (p *Planner[T]) LeaveOperationDefinition(_ int)
- func (p *Planner[T]) LeaveSelectionSet(ref int)
- func (p *Planner[T]) LeaveVariableDefinition(_ int)
- func (p *Planner[T]) Register(visitor *plan.Visitor, configuration plan.DataSourceConfiguration[T], ...) error
- func (p *Planner[T]) SetID(id int)
- type RegularExpression
- type SchemaConfiguration
- type SingleTypeField
- type Source
- type SubscriptionClientOption
- func WithAckTimeout(d time.Duration) SubscriptionClientOption
- func WithDefaultErrorExtensionCode(code string) SubscriptionClientOption
- func WithLogger(log abstractlogger.Logger) SubscriptionClientOption
- func WithPingInterval(d time.Duration) SubscriptionClientOption
- func WithPingTimeout(d time.Duration) SubscriptionClientOption
- func WithReadLimit(n int64) SubscriptionClientOption
- func WithStreamingClient(c *http.Client) SubscriptionClientOption
- func WithUpgradeClient(c *http.Client) SubscriptionClientOption
- func WithWriteTimeout(d time.Duration) SubscriptionClientOption
- type SubscriptionConfiguration
- type SubscriptionOnStartFn
- type SubscriptionSource
Constants ¶
const EntityInterfacesDefinition = `` /* 1096-byte string literal not displayed */
Variables ¶
var ( DefaultPostProcessingConfiguration = resolve.PostProcessingConfiguration{ SelectResponseDataPath: []string{"data"}, SelectResponseErrorsPath: []string{"errors"}, } EntitiesPostProcessingConfiguration = resolve.PostProcessingConfiguration{ SelectResponseDataPath: []string{"data", "_entities"}, SelectResponseErrorsPath: []string{"errors"}, } SingleEntityPostProcessingConfiguration = resolve.PostProcessingConfiguration{ SelectResponseDataPath: []string{"data", "_entities", "0"}, SelectResponseErrorsPath: []string{"errors"}, } )
Functions ¶
func EntityInterfacesPlanConfiguration ¶
func EntityInterfacesPlanConfiguration(t *testing.T, factory plan.PlannerFactory[Configuration]) *plan.Configuration
func EntityInterfacesPlanConfigurationBench ¶
func EntityInterfacesPlanConfigurationBench(t *testing.B, factory plan.PlannerFactory[Configuration]) *plan.Configuration
func IsDefaultGraphQLSubscriptionClient ¶
func IsDefaultGraphQLSubscriptionClient(client GraphQLSubscriptionClient) bool
Types ¶
type Configuration ¶
type Configuration struct {
// contains filtered or unexported fields
}
func NewConfiguration ¶
func NewConfiguration(input ConfigurationInput) (Configuration, error)
func (*Configuration) FederationConfiguration ¶
func (c *Configuration) FederationConfiguration() *FederationConfiguration
func (*Configuration) IsFederationEnabled ¶
func (c *Configuration) IsFederationEnabled() bool
func (*Configuration) IsGRPC ¶
func (c *Configuration) IsGRPC() bool
func (*Configuration) UpstreamSchema ¶
func (c *Configuration) UpstreamSchema() (*ast.Document, error)
type ConfigurationInput ¶
type ConfigurationInput struct {
Fetch *FetchConfiguration
Subscription *SubscriptionConfiguration
SchemaConfiguration *SchemaConfiguration
CustomScalarTypeFields []SingleTypeField
GRPC *grpcdatasource.GRPCConfiguration
}
type DefaultSubscriptionClientFactory ¶
type DefaultSubscriptionClientFactory struct{}
func (*DefaultSubscriptionClientFactory) NewSubscriptionClient ¶
func (d *DefaultSubscriptionClientFactory) NewSubscriptionClient(ctx context.Context, options ...SubscriptionClientOption) GraphQLSubscriptionClient
type Factory ¶
type Factory[T Configuration] struct { // contains filtered or unexported fields }
func NewFactory ¶
func NewFactory(executionContext context.Context, httpClient *http.Client, subscriptionClient GraphQLSubscriptionClient) (*Factory[Configuration], error)
NewFactory (HTTP) creates a new factory for the GraphQL datasource planner Graphql Datasource could be stateful in case you are using subscriptions, make sure you are using the same execution context for all datasources
func NewFactoryGRPC ¶
func NewFactoryGRPC(executionContext context.Context, grpcClient grpc.ClientConnInterface) (*Factory[Configuration], error)
NewFactoryGRPC creates a gRPC factory for the GraphQL datasource planner. Graphql Datasource could be stateful in case you are using subscriptions, make sure you are using the same execution context for all datasources.
func NewFactoryGRPCClientProvider ¶
func NewFactoryGRPCClientProvider(executionContext context.Context, clientProvider func() grpc.ClientConnInterface) (*Factory[Configuration], error)
NewFactoryGRPCClientProvider creates a new factory for the GraphQL datasource planner This factory is used when the gRPC client is provided by a function. This is useful when you don't want to provide a static client to the factory and let the consumer decide how to provide the client to the datasource. For example, when you need to recreate the client in case of a connection error.
func (*Factory[T]) EnableSubgraphFieldSelectionMergingNullabilityRelaxation ¶
func (f *Factory[T]) EnableSubgraphFieldSelectionMergingNullabilityRelaxation()
EnableSubgraphFieldSelectionMergingNullabilityRelaxation implements plan.SubgraphFieldSelectionMergingNullabilityRelaxer. It configures the factory to use a shared pool whose validator allows differing nullability on fields in non-overlapping concrete types.
func (*Factory[T]) Planner ¶
func (f *Factory[T]) Planner(logger abstractlogger.Logger) plan.DataSourcePlanner[T]
func (*Factory[T]) PlanningBehavior ¶
func (f *Factory[T]) PlanningBehavior() plan.DataSourcePlanningBehavior
func (*Factory[T]) UpstreamSchema ¶
type FederationConfiguration ¶
type FetchConfiguration ¶
type GraphQLBody ¶
type GraphQLBody struct {
Query string `json:"query,omitempty"`
OperationName string `json:"operationName,omitempty"`
Variables json.RawMessage `json:"variables,omitempty"`
Extensions json.RawMessage `json:"extensions,omitempty"`
}
type GraphQLSubscriptionClient ¶
type GraphQLSubscriptionClient interface {
// Subscribe to the origin source. The implementation must not block the calling goroutine.
Subscribe(ctx *resolve.Context, options GraphQLSubscriptionOptions, updater resolve.SubscriptionUpdater) error
}
func NewGraphQLSubscriptionClient ¶
func NewGraphQLSubscriptionClient(ctx context.Context, opts ...SubscriptionClientOption) GraphQLSubscriptionClient
NewGraphQLSubscriptionClient creates a new subscription client.
type GraphQLSubscriptionClientFactory ¶
type GraphQLSubscriptionClientFactory interface {
NewSubscriptionClient(ctx context.Context, options ...SubscriptionClientOption) GraphQLSubscriptionClient
}
GraphQLSubscriptionClientFactory abstracts the way of creating a new GraphQLSubscriptionClient. This can be very handy for testing purposes.
type GraphQLSubscriptionOptions ¶
type GraphQLSubscriptionOptions struct {
URL string `json:"url"`
InitialPayload json.RawMessage `json:"initial_payload"`
Body GraphQLBody `json:"body"`
Header http.Header `json:"header"`
UseSSE bool `json:"use_sse"`
SSEMethodPost bool `json:"sse_method_post"`
ForwardedClientHeaderNames []string `json:"forwarded_client_header_names"`
ForwardedClientHeaderRegularExpressions []RegularExpression `json:"forwarded_client_header_regular_expressions"`
WsSubProtocol string `json:"ws_sub_protocol"`
// contains filtered or unexported fields
}
type Planner ¶
type Planner[T Configuration] struct { // contains filtered or unexported fields }
Planner creates the subgraph operation.
func (*Planner[T]) ConfigureFetch ¶
func (p *Planner[T]) ConfigureFetch() resolve.FetchConfiguration
func (*Planner[T]) ConfigureSubscription ¶
func (p *Planner[T]) ConfigureSubscription() plan.SubscriptionConfiguration
func (*Planner[T]) DebugPrint ¶
func (p *Planner[T]) DebugPrint(args ...interface{})
func (*Planner[T]) DownstreamResponseFieldAlias ¶
func (*Planner[T]) EnableDebug ¶
func (p *Planner[T]) EnableDebug()
func (*Planner[T]) EnableDebugQueryPlanLogging ¶
func (p *Planner[T]) EnableDebugQueryPlanLogging()
func (*Planner[T]) EnableSubgraphRequestMinifier ¶
func (p *Planner[T]) EnableSubgraphRequestMinifier()
func (*Planner[T]) EnterArgument ¶
func (*Planner[T]) EnterDirective ¶
func (*Planner[T]) EnterDocument ¶
func (*Planner[T]) EnterField ¶
func (*Planner[T]) EnterInlineFragment ¶
func (*Planner[T]) EnterOperationDefinition ¶
func (*Planner[T]) EnterSelectionSet ¶
func (*Planner[T]) EnterVariableDefinition ¶
func (*Planner[T]) IncludeQueryPlanInFetchConfiguration ¶
func (p *Planner[T]) IncludeQueryPlanInFetchConfiguration()
func (*Planner[T]) LeaveDocument ¶
func (*Planner[T]) LeaveField ¶
func (*Planner[T]) LeaveInlineFragment ¶
func (*Planner[T]) LeaveOperationDefinition ¶
func (*Planner[T]) LeaveSelectionSet ¶
func (*Planner[T]) LeaveVariableDefinition ¶
func (*Planner[T]) Register ¶
func (p *Planner[T]) Register(visitor *plan.Visitor, configuration plan.DataSourceConfiguration[T], dataSourcePlannerConfiguration plan.DataSourcePlannerConfiguration) error
type RegularExpression ¶
type SchemaConfiguration ¶
type SchemaConfiguration struct {
// contains filtered or unexported fields
}
func NewSchemaConfiguration ¶
func NewSchemaConfiguration(upstreamSchema string, federationCfg *FederationConfiguration) (*SchemaConfiguration, error)
func (*SchemaConfiguration) FederationServiceSDL ¶
func (c *SchemaConfiguration) FederationServiceSDL() string
func (*SchemaConfiguration) IsFederationEnabled ¶
func (c *SchemaConfiguration) IsFederationEnabled() bool
type SingleTypeField ¶
type Source ¶
type Source struct {
// contains filtered or unexported fields
}
func (*Source) LoadWithFiles ¶
func (s *Source) LoadWithFiles(ctx context.Context, headers http.Header, input []byte, files []*httpclient.FileUpload) (data []byte, err error)
type SubscriptionClientOption ¶ added in v2.1.0
type SubscriptionClientOption func(*subscriptionClientConfig)
SubscriptionClientOption configures the subscription client.
func WithAckTimeout ¶ added in v2.1.0
func WithAckTimeout(d time.Duration) SubscriptionClientOption
WithAckTimeout sets the maximum time to wait for connection_ack after connection_init.
func WithDefaultErrorExtensionCode ¶ added in v2.1.0
func WithDefaultErrorExtensionCode(code string) SubscriptionClientOption
WithDefaultErrorExtensionCode sets the extension code attached to GraphQL errors produced by upstream connection failures.
func WithLogger ¶
func WithLogger(log abstractlogger.Logger) SubscriptionClientOption
WithLogger sets the logger for the client and its transports. If not set, logging is disabled (silent operation).
func WithPingInterval ¶
func WithPingInterval(d time.Duration) SubscriptionClientOption
WithPingInterval sets the interval between ping messages for connection health checks. Only applies to graphql-transport-ws protocol (legacy graphql-ws uses server-initiated keepalive). Default: 30s. Set to 0 to disable client-initiated pings.
func WithPingTimeout ¶
func WithPingTimeout(d time.Duration) SubscriptionClientOption
WithPingTimeout sets the maximum time to wait for a pong response. If no pong is received within this duration, the connection is considered dead. Default: 10s. Set to 0 to disable the pong-timeout check.
func WithReadLimit ¶ added in v2.1.0
func WithReadLimit(n int64) SubscriptionClientOption
WithReadLimit sets the maximum size in bytes for incoming WebSocket messages.
func WithStreamingClient ¶ added in v2.1.0
func WithStreamingClient(c *http.Client) SubscriptionClientOption
WithStreamingClient sets the HTTP client used for SSE requests. This client should have appropriate timeouts for long-lived connections.
func WithUpgradeClient ¶ added in v2.1.0
func WithUpgradeClient(c *http.Client) SubscriptionClientOption
WithUpgradeClient sets the HTTP client used for WebSocket upgrade requests.
func WithWriteTimeout ¶ added in v2.1.0
func WithWriteTimeout(d time.Duration) SubscriptionClientOption
WithWriteTimeout sets the timeout for WebSocket write operations (subscribe, unsubscribe, ping, pong).
type SubscriptionConfiguration ¶
type SubscriptionConfiguration struct {
URL string
Header http.Header
UseSSE bool
SSEMethodPost bool
// ForwardedClientHeaderNames indicates headers names that might be forwarded from the
// client to the upstream server. This is used to determine which connections
// can be multiplexed together, but the subscription engine does not forward
// these headers by itself.
ForwardedClientHeaderNames []string
// ForwardedClientHeaderRegularExpressions regular expressions that if matched to the header
// name might be forwarded from the client to the upstream server. This is used to determine
// which connections can be multiplexed together, but the subscription engine does not forward
// these headers by itself.
ForwardedClientHeaderRegularExpressions []RegularExpression
WsSubProtocol string
// StartupHooks contains the method called when a subscription is started
StartupHooks []SubscriptionOnStartFn
}
type SubscriptionOnStartFn ¶
type SubscriptionOnStartFn func(ctx resolve.StartupHookContext, input []byte) (err error)
SubscriptionOnStartFn defines a hook function that is called when a subscription starts. It receives the resolve context and the input of the subscription. The function can return an error.
type SubscriptionSource ¶
type SubscriptionSource struct {
// contains filtered or unexported fields
}
func (*SubscriptionSource) Start ¶
func (s *SubscriptionSource) Start(ctx *resolve.Context, headers http.Header, input []byte, updater resolve.SubscriptionUpdater) error
Start the subscription. The updater is called on new events. Start needs to be called in a separate goroutine.
func (*SubscriptionSource) SubscriptionOnStart ¶
func (s *SubscriptionSource) SubscriptionOnStart(ctx resolve.StartupHookContext, input []byte) error
SubscriptionOnStart is called when a subscription is started. Hooks are invoked sequentially, short-circuiting on the first error.