graphql

package
v1.60.4 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 28, 2022 License: MIT Imports: 37 Imported by: 6

Documentation

Index

Constants

View Source
const (
	// SubscriptionTypeUnknown is for unknown or undefined subscriptions.
	SubscriptionTypeUnknown = iota
	// SubscriptionTypeSSE is for Server-Sent Events (SSE) subscriptions.
	SubscriptionTypeSSE
	// SubscriptionTypeGraphQLWS is for subscriptions using a WebSocket connection with
	// 'graphql-ws' as protocol.
	SubscriptionTypeGraphQLWS
	// SubscriptionTypeGraphQLTransportWS is for subscriptions using a WebSocket connection with
	// 'graphql-transport-ws' as protocol.
	SubscriptionTypeGraphQLTransportWS
)
View Source
const (
	DefaultFlushIntervalInMilliseconds = 1000
)

Variables

View Source
var (
	ErrEmptyRequest = errors.New("the provided request is empty")
	ErrNilSchema    = errors.New("the provided schema is nil")
)
View Source
var DefaultComplexityCalculator = defaultComplexityCalculator{}

Functions

func CreateTypeFieldArgumentsLookupMap

func CreateTypeFieldArgumentsLookupMap(typeFieldArgs []TypeFieldArguments) map[TypeFieldLookupKey]TypeFieldArguments

func UnmarshalHttpRequest

func UnmarshalHttpRequest(r *http.Request, request *Request) error

func UnmarshalRequest

func UnmarshalRequest(reader io.Reader, request *Request) error

Types

type ComplexityCalculator

type ComplexityCalculator interface {
	Calculate(operation, definition *ast.Document) (ComplexityResult, error)
}

type ComplexityResult

type ComplexityResult struct {
	NodeCount    int
	Complexity   int
	Depth        int
	PerRootField []FieldComplexityResult
	Errors       Errors
}

type DataSourceGraphqlOptions

type DataSourceGraphqlOptions struct {
	HttpClient         *http.Client
	WhitelistedSchemes []string
	Hooks              *datasource.Hooks
}

type DataSourceHttpJsonOptions

type DataSourceHttpJsonOptions struct {
	HttpClient         *http.Client
	WhitelistedSchemes []string
	Hooks              *datasource.Hooks
}

type DataSourceV2GeneratorOption added in v1.59.0

type DataSourceV2GeneratorOption func(options *dataSourceV2GeneratorOptions)

func WithDataSourceV2GeneratorSubscriptionClientFactory added in v1.59.0

func WithDataSourceV2GeneratorSubscriptionClientFactory(factory graphqlDataSource.GraphQLSubscriptionClientFactory) DataSourceV2GeneratorOption

func WithDataSourceV2GeneratorSubscriptionConfiguration added in v1.59.0

func WithDataSourceV2GeneratorSubscriptionConfiguration(streamingClient *http.Client, subscriptionType SubscriptionType) DataSourceV2GeneratorOption

type DefaultFieldsValidator

type DefaultFieldsValidator struct {
}

func (DefaultFieldsValidator) Validate deprecated

func (d DefaultFieldsValidator) Validate(request *Request, schema *Schema, restrictions []Type) (RequestFieldsValidationResult, error)

Validate validates a request by checking if `restrictions` contains blocked fields.

Deprecated: This function can only handle blocked fields. Use `ValidateByFieldList` if you want to check for blocked or allowed fields instead.

func (DefaultFieldsValidator) ValidateByFieldList

func (d DefaultFieldsValidator) ValidateByFieldList(request *Request, schema *Schema, restrictionList FieldRestrictionList) (RequestFieldsValidationResult, error)

ValidateByFieldList will validate a request by using a list of allowed or blocked fields.

type EngineResultWriter

type EngineResultWriter struct {
	// contains filtered or unexported fields
}

func NewEngineResultWriter

func NewEngineResultWriter() EngineResultWriter

func NewEngineResultWriterFromBuffer

func NewEngineResultWriterFromBuffer(buf *bytes.Buffer) EngineResultWriter

func (*EngineResultWriter) AsHTTPResponse

func (e *EngineResultWriter) AsHTTPResponse(status int, headers http.Header) *http.Response

func (*EngineResultWriter) Bytes

func (e *EngineResultWriter) Bytes() []byte

func (*EngineResultWriter) Flush

func (e *EngineResultWriter) Flush()

func (*EngineResultWriter) Len

func (e *EngineResultWriter) Len() int

func (*EngineResultWriter) Read

func (e *EngineResultWriter) Read(p []byte) (n int, err error)

func (*EngineResultWriter) Reset

func (e *EngineResultWriter) Reset()

func (*EngineResultWriter) SetFlushCallback

func (e *EngineResultWriter) SetFlushCallback(flushCb func(data []byte))

func (*EngineResultWriter) String

func (e *EngineResultWriter) String() string

func (*EngineResultWriter) Write

func (e *EngineResultWriter) Write(p []byte) (n int, err error)

type EngineV2Configuration

type EngineV2Configuration struct {
	// contains filtered or unexported fields
}

func NewEngineV2Configuration

func NewEngineV2Configuration(schema *Schema) EngineV2Configuration

func (*EngineV2Configuration) AddDataSource

func (e *EngineV2Configuration) AddDataSource(dataSource plan.DataSourceConfiguration)

func (*EngineV2Configuration) AddFieldConfiguration

func (e *EngineV2Configuration) AddFieldConfiguration(fieldConfig plan.FieldConfiguration)

func (*EngineV2Configuration) DataSources

func (*EngineV2Configuration) EnableDataLoader

func (e *EngineV2Configuration) EnableDataLoader(enable bool)

func (*EngineV2Configuration) EnableSingleFlight added in v1.59.1

func (e *EngineV2Configuration) EnableSingleFlight(enable bool)

func (*EngineV2Configuration) FieldConfigurations

func (e *EngineV2Configuration) FieldConfigurations() plan.FieldConfigurations

func (*EngineV2Configuration) SetDataSources

func (e *EngineV2Configuration) SetDataSources(dataSources []plan.DataSourceConfiguration)

func (*EngineV2Configuration) SetFieldConfigurations

func (e *EngineV2Configuration) SetFieldConfigurations(fieldConfigs plan.FieldConfigurations)

func (*EngineV2Configuration) SetWebsocketBeforeStartHook

func (e *EngineV2Configuration) SetWebsocketBeforeStartHook(hook WebsocketBeforeStartHook)

SetWebsocketBeforeStartHook - sets before start hook which will be called before processing any operation sent over websockets

type ErrorPath

type ErrorPath struct {
	// contains filtered or unexported fields
}

func (*ErrorPath) Len

func (e *ErrorPath) Len() int

func (*ErrorPath) MarshalJSON

func (e *ErrorPath) MarshalJSON() ([]byte, error)

func (*ErrorPath) String

func (e *ErrorPath) String() string

type Errors

type Errors interface {
	error
	WriteResponse(writer io.Writer) (n int, err error)
	Count() int
	ErrorByIndex(i int) error
}

type ExecutionEngine

type ExecutionEngine struct {
	// contains filtered or unexported fields
}

func NewExecutionEngine

func NewExecutionEngine(logger abstractlogger.Logger, schema *Schema, plannerConfig datasource.PlannerConfiguration) (*ExecutionEngine, error)

func (*ExecutionEngine) AddDataSource

func (e *ExecutionEngine) AddDataSource(name string, plannerFactoryFactory datasource.PlannerFactoryFactory) error

func (*ExecutionEngine) AddGraphqlDataSource

func (e *ExecutionEngine) AddGraphqlDataSource(name string) error

func (*ExecutionEngine) AddGraphqlDataSourceWithOptions

func (e *ExecutionEngine) AddGraphqlDataSourceWithOptions(name string, options DataSourceGraphqlOptions) error

func (*ExecutionEngine) AddHttpJsonDataSource

func (e *ExecutionEngine) AddHttpJsonDataSource(name string) error

func (*ExecutionEngine) AddHttpJsonDataSourceWithOptions

func (e *ExecutionEngine) AddHttpJsonDataSourceWithOptions(name string, options DataSourceHttpJsonOptions) error

func (*ExecutionEngine) Execute

func (e *ExecutionEngine) Execute(ctx context.Context, operation *Request, options ExecutionOptions) (*ExecutionResult, error)

func (*ExecutionEngine) ExecuteWithWriter

func (e *ExecutionEngine) ExecuteWithWriter(ctx context.Context, operation *Request, writer io.Writer, options ExecutionOptions) error

func (*ExecutionEngine) NewExecutionHandler

func (e *ExecutionEngine) NewExecutionHandler() *execution.Handler

type ExecutionEngineV2

type ExecutionEngineV2 struct {
	// contains filtered or unexported fields
}

func NewExecutionEngineV2

func NewExecutionEngineV2(ctx context.Context, logger abstractlogger.Logger, engineConfig EngineV2Configuration) (*ExecutionEngineV2, error)

func (*ExecutionEngineV2) Execute

func (e *ExecutionEngineV2) Execute(ctx context.Context, operation *Request, writer resolve.FlushWriter, options ...ExecutionOptionsV2) error

func (*ExecutionEngineV2) GetWebsocketBeforeStartHook

func (e *ExecutionEngineV2) GetWebsocketBeforeStartHook() WebsocketBeforeStartHook

type ExecutionOptions

type ExecutionOptions struct {
	ExtraArguments json.RawMessage
}

type ExecutionOptionsV2

type ExecutionOptionsV2 func(ctx *internalExecutionContext)

func WithAdditionalHttpHeaders

func WithAdditionalHttpHeaders(headers http.Header, excludeByKeys ...string) ExecutionOptionsV2

func WithAfterFetchHook

func WithAfterFetchHook(hook resolve.AfterFetchHook) ExecutionOptionsV2

func WithBeforeFetchHook

func WithBeforeFetchHook(hook resolve.BeforeFetchHook) ExecutionOptionsV2

type ExecutionResult

type ExecutionResult struct {
	// contains filtered or unexported fields
}

func SchemaIntrospection

func SchemaIntrospection(schema *Schema) (*ExecutionResult, error)

func (*ExecutionResult) Buffer

func (r *ExecutionResult) Buffer() *bytes.Buffer

func (*ExecutionResult) GetAsHTTPResponse

func (r *ExecutionResult) GetAsHTTPResponse() (res *http.Response)

type Extractor

type Extractor struct {
	// contains filtered or unexported fields
}

func NewExtractor

func NewExtractor() *Extractor

func (*Extractor) ExtractFieldsFromRequest

func (e *Extractor) ExtractFieldsFromRequest(request *Request, schema *Schema, report *operationreport.Report, data RequestTypes)

type FederationEngineConfigFactory

type FederationEngineConfigFactory struct {
	// contains filtered or unexported fields
}

FederationEngineConfigFactory is used to create a v2 engine config for a supergraph with multiple data sources for subgraphs.

func (*FederationEngineConfigFactory) EngineV2Configuration

func (f *FederationEngineConfigFactory) EngineV2Configuration() (conf EngineV2Configuration, err error)

func (*FederationEngineConfigFactory) MergedSchema

func (f *FederationEngineConfigFactory) MergedSchema() (*Schema, error)

func (*FederationEngineConfigFactory) SetMergedSchemaFromString

func (f *FederationEngineConfigFactory) SetMergedSchemaFromString(mergedSchema string) (err error)

type FederationEngineConfigFactoryOption

type FederationEngineConfigFactoryOption func(options *federationEngineConfigFactoryOptions)

func WithFederationHttpClient

func WithFederationHttpClient(client *http.Client) FederationEngineConfigFactoryOption

func WithFederationStreamingClient added in v1.59.0

func WithFederationStreamingClient(client *http.Client) FederationEngineConfigFactoryOption

func WithFederationSubscriptionType added in v1.59.0

func WithFederationSubscriptionType(subscriptionType SubscriptionType) FederationEngineConfigFactoryOption

type FieldComplexityResult

type FieldComplexityResult struct {
	TypeName   string
	FieldName  string
	Alias      string
	NodeCount  int
	Complexity int
	Depth      int
}

type FieldRestrictionList

type FieldRestrictionList struct {
	Kind  FieldRestrictionListKind
	Types []Type
}

type FieldRestrictionListKind

type FieldRestrictionListKind int
const (
	AllowList FieldRestrictionListKind = iota
	BlockList
)

type FieldRestrictionValidator

type FieldRestrictionValidator interface {
	ValidateByFieldList(request *Request, schema *Schema, restrictionList FieldRestrictionList) (RequestFieldsValidationResult, error)
}

type NormalizationResult

type NormalizationResult struct {
	Successful bool
	Errors     Errors
}

type OperationType

type OperationType ast.OperationType

type ProxyEngineConfigFactory

type ProxyEngineConfigFactory struct {
	// contains filtered or unexported fields
}

ProxyEngineConfigFactory is used to create a v2 engine config with a single upstream and a single data source for this upstream.

func NewProxyEngineConfigFactory

func NewProxyEngineConfigFactory(schema *Schema, proxyUpstreamConfig ProxyUpstreamConfig, batchFactory resolve.DataSourceBatchFactory, opts ...ProxyEngineConfigFactoryOption) *ProxyEngineConfigFactory

func (*ProxyEngineConfigFactory) EngineV2Configuration

func (p *ProxyEngineConfigFactory) EngineV2Configuration() (EngineV2Configuration, error)

type ProxyEngineConfigFactoryOption

type ProxyEngineConfigFactoryOption func(options *proxyEngineConfigFactoryOptions)

func WithProxyHttpClient

func WithProxyHttpClient(client *http.Client) ProxyEngineConfigFactoryOption

func WithProxyStreamingClient added in v1.59.0

func WithProxyStreamingClient(client *http.Client) ProxyEngineConfigFactoryOption

func WithProxySubscriptionClientFactory added in v1.59.0

func WithProxySubscriptionClientFactory(factory graphqlDataSource.GraphQLSubscriptionClientFactory) ProxyEngineConfigFactoryOption

type ProxyUpstreamConfig

type ProxyUpstreamConfig struct {
	URL              string
	Method           string
	StaticHeaders    http.Header
	SubscriptionType SubscriptionType
}

ProxyUpstreamConfig holds configuration to configure a single data source to a single upstream.

type Request

type Request struct {
	OperationName string          `json:"operationName"`
	Variables     json.RawMessage `json:"variables"`
	Query         string          `json:"query"`
	// contains filtered or unexported fields
}

func (*Request) CalculateComplexity

func (r *Request) CalculateComplexity(complexityCalculator ComplexityCalculator, schema *Schema) (ComplexityResult, error)

func (*Request) IsIntrospectionQuery

func (r *Request) IsIntrospectionQuery() (result bool, err error)

func (*Request) IsNormalized

func (r *Request) IsNormalized() bool

func (*Request) Normalize

func (r *Request) Normalize(schema *Schema) (result NormalizationResult, err error)

func (*Request) OperationType

func (r *Request) OperationType() (OperationType, error)

func (Request) Print

func (r Request) Print(writer io.Writer) (n int, err error)

func (*Request) SetHeader

func (r *Request) SetHeader(header http.Header)

func (*Request) ValidateFieldRestrictions

func (r *Request) ValidateFieldRestrictions(schema *Schema, restrictedFieldsList FieldRestrictionList, validator FieldRestrictionValidator) (RequestFieldsValidationResult, error)

ValidateFieldRestrictions will validate a request by using a list of allowed or blocked fields.

func (*Request) ValidateForSchema

func (r *Request) ValidateForSchema(schema *Schema) (result ValidationResult, err error)

func (*Request) ValidateRestrictedFields deprecated

func (r *Request) ValidateRestrictedFields(schema *Schema, restrictedFields []Type) (RequestFieldsValidationResult, error)

ValidateRestrictedFields validates a request by checking if `restrictedFields` contains blocked fields.

Deprecated: This function can only handle blocked fields. Use `ValidateFieldRestrictions` if you want to check for blocked or allowed fields instead.

type RequestError

type RequestError struct {
	Message   string                   `json:"message"`
	Locations []graphqlerrors.Location `json:"locations,omitempty"`
	Path      ErrorPath                `json:"path"`
}

func (RequestError) Error

func (o RequestError) Error() string

func (RequestError) MarshalJSON

func (o RequestError) MarshalJSON() ([]byte, error)

type RequestErrors

type RequestErrors []RequestError

func RequestErrorsFromError

func RequestErrorsFromError(err error) RequestErrors

func RequestErrorsFromOperationReport

func RequestErrorsFromOperationReport(report operationreport.Report) (errors RequestErrors)

func (RequestErrors) Count

func (o RequestErrors) Count() int

func (RequestErrors) Error

func (o RequestErrors) Error() string

func (RequestErrors) ErrorByIndex

func (o RequestErrors) ErrorByIndex(i int) error

func (RequestErrors) WriteResponse

func (o RequestErrors) WriteResponse(writer io.Writer) (n int, err error)

type RequestFields

type RequestFields map[string]struct{}

type RequestFieldsValidationResult

type RequestFieldsValidationResult struct {
	Valid  bool
	Errors Errors
}

type RequestFieldsValidator

type RequestFieldsValidator interface {
	Validate(request *Request, schema *Schema, restrictions []Type) (RequestFieldsValidationResult, error)
}

type RequestTypes

type RequestTypes map[string]RequestFields

type Response

type Response struct {
	Errors Errors `json:"errors,omitempty"`
}

func (Response) Marshal

func (r Response) Marshal() ([]byte, error)

type Schema

type Schema struct {
	// contains filtered or unexported fields
}

func NewSchemaFromReader

func NewSchemaFromReader(reader io.Reader) (*Schema, error)

func NewSchemaFromString

func NewSchemaFromString(schema string) (*Schema, error)

func (*Schema) Document

func (s *Schema) Document() []byte

func (*Schema) GetAllFieldArguments

func (s *Schema) GetAllFieldArguments(skipFieldFuncs ...SkipFieldFunc) []TypeFieldArguments

func (*Schema) GetAllNestedFieldChildrenFromTypeField

func (s *Schema) GetAllNestedFieldChildrenFromTypeField(typeName string, fieldName string, skipFieldFuncs ...SkipFieldFunc) []TypeFields

func (*Schema) HasMutationType

func (s *Schema) HasMutationType() bool

func (*Schema) HasQueryType

func (s *Schema) HasQueryType() bool

HasQueryType TODO: should be deprecated?

func (*Schema) HasSubscriptionType

func (s *Schema) HasSubscriptionType() bool

func (*Schema) Hash

func (s *Schema) Hash() uint64

Hash returns the hash of the schema.

func (*Schema) Input

func (s *Schema) Input() []byte

func (*Schema) IntrospectionResponse

func (s *Schema) IntrospectionResponse(out io.Writer) error

IntrospectionResponse - writes full schema introspection response into writer

func (*Schema) IsNormalized

func (s *Schema) IsNormalized() bool

func (*Schema) MutationTypeName

func (s *Schema) MutationTypeName() string

func (*Schema) Normalize

func (s *Schema) Normalize() (result NormalizationResult, err error)

func (*Schema) QueryTypeName

func (s *Schema) QueryTypeName() string

func (*Schema) SubscriptionTypeName

func (s *Schema) SubscriptionTypeName() string

func (*Schema) Validate

func (s *Schema) Validate() (result ValidationResult, err error)

type SchemaValidationError

type SchemaValidationError struct {
	Message string `json:"message"`
}

func (SchemaValidationError) Error

func (s SchemaValidationError) Error() string

type SchemaValidationErrors

type SchemaValidationErrors []SchemaValidationError

func (SchemaValidationErrors) Count

func (s SchemaValidationErrors) Count() int

func (SchemaValidationErrors) Error

func (s SchemaValidationErrors) Error() string

func (SchemaValidationErrors) ErrorByIndex

func (s SchemaValidationErrors) ErrorByIndex(i int) error

func (SchemaValidationErrors) WriteResponse

func (s SchemaValidationErrors) WriteResponse(writer io.Writer) (n int, err error)

type SkipFieldFunc

type SkipFieldFunc func(typeName, fieldName string, definition ast.Document) bool

func NewIsDataSourceConfigV2RootFieldSkipFunc

func NewIsDataSourceConfigV2RootFieldSkipFunc(dataSources []plan.DataSourceConfiguration) SkipFieldFunc

func NewSkipReservedNamesFunc

func NewSkipReservedNamesFunc() SkipFieldFunc

type SubscriptionType added in v1.59.0

type SubscriptionType int

type Type

type Type struct {
	Name   string   `json:"name"`
	Fields []string `json:"fields"`
}

type TypeFieldArguments

type TypeFieldArguments struct {
	TypeName      string
	FieldName     string
	ArgumentNames []string
}

type TypeFieldLookupKey

type TypeFieldLookupKey string

func CreateTypeFieldLookupKey

func CreateTypeFieldLookupKey(typeName string, fieldName string) TypeFieldLookupKey

type TypeFields

type TypeFields struct {
	TypeName   string
	FieldNames []string
}

type ValidationResult

type ValidationResult struct {
	Valid  bool
	Errors Errors
}

func ValidateSchemaString

func ValidateSchemaString(schema string) (result ValidationResult, err error)

type WebsocketBeforeStartHook

type WebsocketBeforeStartHook interface {
	OnBeforeStart(reqCtx context.Context, operation *Request) error
}

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL