Documentation ¶
Index ¶
- Constants
- Variables
- func Handle(done chan bool, errChan chan error, conn net.Conn, ...)
- func HandleWithOptions(done chan bool, errChan chan error, conn net.Conn, ...)
- type Client
- type CloseReason
- type CompiledCloseReason
- type GraphQLTransportWSEventHandler
- type GraphQLTransportWSMessage
- type GraphQLTransportWSMessageReader
- type GraphQLTransportWSMessageSubscribePayload
- type GraphQLTransportWSMessageType
- type GraphQLTransportWSMessageWriter
- func (g *GraphQLTransportWSMessageWriter) WriteComplete(id string) error
- func (g *GraphQLTransportWSMessageWriter) WriteConnectionAck() error
- func (g *GraphQLTransportWSMessageWriter) WriteError(id string, graphqlErrors graphql.RequestErrors) error
- func (g *GraphQLTransportWSMessageWriter) WriteNext(id string, executionResult []byte) error
- func (g *GraphQLTransportWSMessageWriter) WritePing(payload []byte) error
- func (g *GraphQLTransportWSMessageWriter) WritePong(payload []byte) error
- type GraphQLWSMessage
- type GraphQLWSMessageReader
- type GraphQLWSMessageType
- type GraphQLWSMessageWriter
- func (g *GraphQLWSMessageWriter) WriteAck() error
- func (g *GraphQLWSMessageWriter) WriteComplete(id string) error
- func (g *GraphQLWSMessageWriter) WriteConnectionError(reason string) error
- func (g *GraphQLWSMessageWriter) WriteData(id string, responseData []byte) error
- func (g *GraphQLWSMessageWriter) WriteError(id string, errors graphql.RequestErrors) error
- func (g *GraphQLWSMessageWriter) WriteKeepAlive() error
- func (g *GraphQLWSMessageWriter) WriteTerminate(reason string) error
- type GraphQLWSWriteEventHandler
- type HandleOptionFunc
- func WithCustomClient(client subscription.TransportClient) HandleOptionFunc
- func WithCustomConnectionInitTimeOut(connectionInitTimeOut time.Duration) HandleOptionFunc
- func WithCustomKeepAliveInterval(keepAliveInterval time.Duration) HandleOptionFunc
- func WithCustomReadErrorTimeOut(readErrorTimeOut time.Duration) HandleOptionFunc
- func WithCustomSubscriptionEngine(subscriptionEngine subscription.Engine) HandleOptionFunc
- func WithCustomSubscriptionUpdateInterval(subscriptionUpdateInterval time.Duration) HandleOptionFunc
- func WithInitFunc(initFunc InitFunc) HandleOptionFunc
- func WithLogger(logger abstractlogger.Logger) HandleOptionFunc
- func WithProtocol(protocol Protocol) HandleOptionFunc
- func WithProtocolFromRequestHeaders(req *http.Request) HandleOptionFunc
- type HandleOptions
- type InitFunc
- type InitPayload
- type Protocol
- type ProtocolGraphQLTransportWSHandler
- type ProtocolGraphQLTransportWSHandlerOptions
- type ProtocolGraphQLWSHandler
- type ProtocolGraphQLWSHandlerOptions
Constants ¶
const ( DefaultConnectionInitTimeOut = "15s" HeaderSecWebSocketProtocol = "Sec-WebSocket-Protocol" )
const (
GraphQLTransportWSHeartbeatPayload = `{"type":"heartbeat"}`
)
Variables ¶
var DefaultProtocol = ProtocolGraphQLTransportWS
var ErrGraphQLWSUnexpectedMessageType = errors.New("unexpected message type")
Functions ¶
func Handle ¶
func Handle(done chan bool, errChan chan error, conn net.Conn, executorPool subscription.ExecutorPool, options ...HandleOptionFunc)
Handle will handle the websocket subscription. It can take optional option functions to customize the handler. behavior. By default, it uses the 'graphql-transport-ws' protocol.
func HandleWithOptions ¶
func HandleWithOptions(done chan bool, errChan chan error, conn net.Conn, executorPool subscription.ExecutorPool, options HandleOptions)
HandleWithOptions will handle the websocket connection. It requires an option struct to define the behavior.
Types ¶
type Client ¶
type Client struct {
// contains filtered or unexported fields
}
Client is an actual implementation of the subscription client interface.
func NewClient ¶
func NewClient(logger abstractlogger.Logger, clientConn net.Conn) *Client
NewClient will create a new websocket subscription client.
func (*Client) Disconnect ¶
Disconnect will close the websocket connection.
func (*Client) DisconnectWithReason ¶
DisconnectWithReason will close the websocket and provide the close code and reason. It can only consume CloseReason or CompiledCloseReason.
func (*Client) IsConnected ¶
IsConnected will indicate if the websocket connection is still established.
func (*Client) ReadBytesFromClient ¶
ReadBytesFromClient will read a subscription message from the websocket client.
func (*Client) WriteBytesToClient ¶
WriteBytesToClient will write a subscription message to the websocket client.
type CloseReason ¶
CloseReason is type that is used to provide a close reason to Client.DisconnectWithReason.
func NewCloseReason ¶
func NewCloseReason(code uint16, reason string) CloseReason
NewCloseReason is used to compose a close frame with code and reason message.
type CompiledCloseReason ¶
type CompiledCloseReason []byte
CompiledCloseReason is a pre-compiled close reason to be provided to Client.DisconnectWithReason.
var ( CompiledCloseReasonNormal CompiledCloseReason = ws.MustCompileFrame( ws.NewCloseFrame(ws.NewCloseFrameBody( ws.StatusNormalClosure, "Normal Closure", )), ) CompiledCloseReasonInternalServerError CompiledCloseReason = ws.MustCompileFrame( ws.NewCloseFrame(ws.NewCloseFrameBody( ws.StatusInternalServerError, "Internal Server Error", )), ) )
type GraphQLTransportWSEventHandler ¶
type GraphQLTransportWSEventHandler struct { Writer GraphQLTransportWSMessageWriter OnConnectionOpened func() // contains filtered or unexported fields }
GraphQLTransportWSEventHandler can be used to handle subscription events and forward them to a GraphQLTransportWSMessageWriter.
func (*GraphQLTransportWSEventHandler) Emit ¶
func (g *GraphQLTransportWSEventHandler) Emit(eventType subscription.EventType, id string, data []byte, err error)
Emit is an implementation of subscription.EventHandler. It forwards some events to the HandleWriteEvent.
func (*GraphQLTransportWSEventHandler) HandleWriteEvent ¶
func (g *GraphQLTransportWSEventHandler) HandleWriteEvent(messageType GraphQLTransportWSMessageType, id string, data []byte, providedErr error)
HandleWriteEvent forwards messages to the underlying writer.
type GraphQLTransportWSMessage ¶
type GraphQLTransportWSMessage struct { Id string `json:"id,omitempty"` Type GraphQLTransportWSMessageType `json:"type"` Payload json.RawMessage `json:"payload,omitempty"` }
GraphQLTransportWSMessage is a struct that can be (de)serialized to graphql-transport-ws message format.
type GraphQLTransportWSMessageReader ¶
type GraphQLTransportWSMessageReader struct {
// contains filtered or unexported fields
}
GraphQLTransportWSMessageReader can be used to read graphql-transport-ws messages.
func (*GraphQLTransportWSMessageReader) DeserializeSubscribePayload ¶
func (g *GraphQLTransportWSMessageReader) DeserializeSubscribePayload(message *GraphQLTransportWSMessage) (*GraphQLTransportWSMessageSubscribePayload, error)
DeserializeSubscribePayload deserialized the subscribe payload from a graphql-transport-ws message.
func (*GraphQLTransportWSMessageReader) Read ¶
func (g *GraphQLTransportWSMessageReader) Read(data []byte) (*GraphQLTransportWSMessage, error)
Read deserializes a byte slice to the GraphQLTransportWSMessage struct.
type GraphQLTransportWSMessageSubscribePayload ¶
type GraphQLTransportWSMessageSubscribePayload struct { OperationName string `json:"operationName,omitempty"` Query string `json:"query"` Variables json.RawMessage `json:"variables,omitempty"` Extensions json.RawMessage `json:"extensions,omitempty"` }
GraphQLTransportWSMessageSubscribePayload is a struct that can be (de)serialized to graphql-transport-ws message payload format.
type GraphQLTransportWSMessageType ¶
type GraphQLTransportWSMessageType string
GraphQLTransportWSMessageType is a type that defines graphql-transport-ws message type names.
const ( GraphQLTransportWSMessageTypeConnectionInit GraphQLTransportWSMessageType = "connection_init" GraphQLTransportWSMessageTypeConnectionAck GraphQLTransportWSMessageType = "connection_ack" GraphQLTransportWSMessageTypePing GraphQLTransportWSMessageType = "ping" GraphQLTransportWSMessageTypePong GraphQLTransportWSMessageType = "pong" GraphQLTransportWSMessageTypeSubscribe GraphQLTransportWSMessageType = "subscribe" GraphQLTransportWSMessageTypeNext GraphQLTransportWSMessageType = "next" GraphQLTransportWSMessageTypeError GraphQLTransportWSMessageType = "error" GraphQLTransportWSMessageTypeComplete GraphQLTransportWSMessageType = "complete" )
type GraphQLTransportWSMessageWriter ¶
type GraphQLTransportWSMessageWriter struct { Client subscription.TransportClient // contains filtered or unexported fields }
GraphQLTransportWSMessageWriter can be used to write graphql-transport-ws messages to a transport client.
func (*GraphQLTransportWSMessageWriter) WriteComplete ¶
func (g *GraphQLTransportWSMessageWriter) WriteComplete(id string) error
WriteComplete writes a message of type 'complete' to the transport client.
func (*GraphQLTransportWSMessageWriter) WriteConnectionAck ¶
func (g *GraphQLTransportWSMessageWriter) WriteConnectionAck() error
WriteConnectionAck writes a message of type 'connection_ack' to the transport client.
func (*GraphQLTransportWSMessageWriter) WriteError ¶
func (g *GraphQLTransportWSMessageWriter) WriteError(id string, graphqlErrors graphql.RequestErrors) error
WriteError writes a message of type 'error' to the transport client including the graphql errors as payload.
func (*GraphQLTransportWSMessageWriter) WriteNext ¶
func (g *GraphQLTransportWSMessageWriter) WriteNext(id string, executionResult []byte) error
WriteNext writes a message of type 'next' to the transport client including the execution result as payload.
func (*GraphQLTransportWSMessageWriter) WritePing ¶
func (g *GraphQLTransportWSMessageWriter) WritePing(payload []byte) error
WritePing writes a message of type 'ping' to the transport client. Payload is optional.
func (*GraphQLTransportWSMessageWriter) WritePong ¶
func (g *GraphQLTransportWSMessageWriter) WritePong(payload []byte) error
WritePong writes a message of type 'pong' to the transport client. Payload is optional.
type GraphQLWSMessage ¶
type GraphQLWSMessage struct { Id string `json:"id,omitempty"` Type GraphQLWSMessageType `json:"type"` Payload json.RawMessage `json:"payload,omitempty"` }
GraphQLWSMessage is a struct that can be (de)serialized to graphql-ws message format.
type GraphQLWSMessageReader ¶
type GraphQLWSMessageReader struct {
// contains filtered or unexported fields
}
GraphQLWSMessageReader can be used to read graphql-ws messages.
func (*GraphQLWSMessageReader) Read ¶
func (g *GraphQLWSMessageReader) Read(data []byte) (*GraphQLWSMessage, error)
Read deserializes a byte slice to the GraphQLWSMessage struct.
type GraphQLWSMessageType ¶
type GraphQLWSMessageType string
GraphQLWSMessageType is a type that defines graphql-ws message type names.
const ( GraphQLWSMessageTypeConnectionInit GraphQLWSMessageType = "connection_init" GraphQLWSMessageTypeConnectionAck GraphQLWSMessageType = "connection_ack" GraphQLWSMessageTypeConnectionError GraphQLWSMessageType = "connection_error" GraphQLWSMessageTypeConnectionTerminate GraphQLWSMessageType = "connection_terminate" GraphQLWSMessageTypeConnectionKeepAlive GraphQLWSMessageType = "ka" GraphQLWSMessageTypeStart GraphQLWSMessageType = "start" GraphQLWSMessageTypeStop GraphQLWSMessageType = "stop" GraphQLWSMessageTypeData GraphQLWSMessageType = "data" GraphQLWSMessageTypeError GraphQLWSMessageType = "error" GraphQLWSMessageTypeComplete GraphQLWSMessageType = "complete" )
type GraphQLWSMessageWriter ¶
type GraphQLWSMessageWriter struct { Client subscription.TransportClient // contains filtered or unexported fields }
GraphQLWSMessageWriter can be used to write graphql-ws messages to a transport client.
func (*GraphQLWSMessageWriter) WriteAck ¶
func (g *GraphQLWSMessageWriter) WriteAck() error
WriteAck writes a message of type 'connection_ack' to the transport client.
func (*GraphQLWSMessageWriter) WriteComplete ¶
func (g *GraphQLWSMessageWriter) WriteComplete(id string) error
WriteComplete writes a message of type 'complete' to the transport client.
func (*GraphQLWSMessageWriter) WriteConnectionError ¶
func (g *GraphQLWSMessageWriter) WriteConnectionError(reason string) error
WriteConnectionError writes a message of type 'connection_error' to the transport client.
func (*GraphQLWSMessageWriter) WriteData ¶
func (g *GraphQLWSMessageWriter) WriteData(id string, responseData []byte) error
WriteData writes a message of type 'data' to the transport client.
func (*GraphQLWSMessageWriter) WriteError ¶
func (g *GraphQLWSMessageWriter) WriteError(id string, errors graphql.RequestErrors) error
WriteError writes a message of type 'error' to the transport client.
func (*GraphQLWSMessageWriter) WriteKeepAlive ¶
func (g *GraphQLWSMessageWriter) WriteKeepAlive() error
WriteKeepAlive writes a message of type 'ka' to the transport client.
func (*GraphQLWSMessageWriter) WriteTerminate ¶
func (g *GraphQLWSMessageWriter) WriteTerminate(reason string) error
WriteTerminate writes a message of type 'connection_terminate' to the transport client.
type GraphQLWSWriteEventHandler ¶
type GraphQLWSWriteEventHandler struct { Writer GraphQLWSMessageWriter // contains filtered or unexported fields }
GraphQLWSWriteEventHandler can be used to handle subscription events and forward them to a GraphQLWSMessageWriter.
func (*GraphQLWSWriteEventHandler) Emit ¶
func (g *GraphQLWSWriteEventHandler) Emit(eventType subscription.EventType, id string, data []byte, err error)
Emit is an implementation of subscription.EventHandler. It forwards events to the HandleWriteEvent.
func (*GraphQLWSWriteEventHandler) HandleWriteEvent ¶
func (g *GraphQLWSWriteEventHandler) HandleWriteEvent(messageType GraphQLWSMessageType, id string, data []byte, providedErr error)
HandleWriteEvent forwards messages to the underlying writer.
type HandleOptionFunc ¶
type HandleOptionFunc func(opts *HandleOptions)
HandleOptionFunc can be used to define option functions.
func WithCustomClient ¶
func WithCustomClient(client subscription.TransportClient) HandleOptionFunc
WithCustomClient is a function that set a custom transport client for the websocket handler.
func WithCustomConnectionInitTimeOut ¶
func WithCustomConnectionInitTimeOut(connectionInitTimeOut time.Duration) HandleOptionFunc
WithCustomConnectionInitTimeOut is a function that sets a custom connection init time out.
func WithCustomKeepAliveInterval ¶
func WithCustomKeepAliveInterval(keepAliveInterval time.Duration) HandleOptionFunc
WithCustomKeepAliveInterval is a function that sets a custom keep-alive interval for the websocket handler.
func WithCustomReadErrorTimeOut ¶
func WithCustomReadErrorTimeOut(readErrorTimeOut time.Duration) HandleOptionFunc
WithCustomReadErrorTimeOut is a function that sets a custom read error time out for the websocket handler.
func WithCustomSubscriptionEngine ¶
func WithCustomSubscriptionEngine(subscriptionEngine subscription.Engine) HandleOptionFunc
WithCustomSubscriptionEngine is a function that sets a custom subscription engine for the websocket handler.
func WithCustomSubscriptionUpdateInterval ¶
func WithCustomSubscriptionUpdateInterval(subscriptionUpdateInterval time.Duration) HandleOptionFunc
WithCustomSubscriptionUpdateInterval is a function that sets a custom subscription update interval for the websocket handler.
func WithInitFunc ¶
func WithInitFunc(initFunc InitFunc) HandleOptionFunc
WithInitFunc is a function that sets the init function for the websocket handler.
func WithLogger ¶
func WithLogger(logger abstractlogger.Logger) HandleOptionFunc
WithLogger is a function that sets a logger for the websocket handler.
func WithProtocol ¶
func WithProtocol(protocol Protocol) HandleOptionFunc
WithProtocol is a function that sets the protocol.
func WithProtocolFromRequestHeaders ¶
func WithProtocolFromRequestHeaders(req *http.Request) HandleOptionFunc
WithProtocolFromRequestHeaders is a function that sets the protocol based on the request headers. It fallbacks to the DefaultProtocol if the header can't be found, the value is invalid or no request was provided.
type HandleOptions ¶
type HandleOptions struct { Logger abstractlogger.Logger Protocol Protocol WebSocketInitFunc InitFunc CustomClient subscription.TransportClient CustomKeepAliveInterval time.Duration CustomSubscriptionUpdateInterval time.Duration CustomConnectionInitTimeOut time.Duration CustomReadErrorTimeOut time.Duration CustomSubscriptionEngine subscription.Engine }
HandleOptions can be used to pass options to the websocket handler.
type InitFunc ¶
InitFunc is called when the server receives connection init message from the client. This can be used to check initial payload to see whether to accept the websocket connection.
type InitPayload ¶
type InitPayload json.RawMessage
InitPayload is a structure that is parsed from the websocket init message payload.
func (InitPayload) Authorization ¶
func (p InitPayload) Authorization() string
Authorization is a shorthand for getting the Authorization header from the payload.
func (InitPayload) GetString ¶
func (p InitPayload) GetString(key string) string
GetString safely gets a string value from the payload. It returns an empty string if the payload is nil or the value isn't set.
type ProtocolGraphQLTransportWSHandler ¶
type ProtocolGraphQLTransportWSHandler struct {
// contains filtered or unexported fields
}
ProtocolGraphQLTransportWSHandler is able to handle the graphql-transport-ws protocol.
func NewProtocolGraphQLTransportWSHandler ¶
func NewProtocolGraphQLTransportWSHandler(client subscription.TransportClient) (*ProtocolGraphQLTransportWSHandler, error)
NewProtocolGraphQLTransportWSHandler creates a new ProtocolGraphQLTransportWSHandler with default options.
func NewProtocolGraphQLTransportWSHandlerWithOptions ¶
func NewProtocolGraphQLTransportWSHandlerWithOptions(client subscription.TransportClient, opts ProtocolGraphQLTransportWSHandlerOptions) (*ProtocolGraphQLTransportWSHandler, error)
NewProtocolGraphQLTransportWSHandlerWithOptions creates a new ProtocolGraphQLTransportWSHandler. It requires an option struct.
func (*ProtocolGraphQLTransportWSHandler) EventHandler ¶
func (p *ProtocolGraphQLTransportWSHandler) EventHandler() subscription.EventHandler
EventHandler returns the underlying graphql-transport-ws event handler. It's an implementation of subscription.Protocol.
func (*ProtocolGraphQLTransportWSHandler) Handle ¶
func (p *ProtocolGraphQLTransportWSHandler) Handle(ctx context.Context, engine subscription.Engine, data []byte) error
Handle will handle the actual graphql-transport-ws protocol messages. It's an implementation of subscription.Protocol.
type ProtocolGraphQLTransportWSHandlerOptions ¶
type ProtocolGraphQLTransportWSHandlerOptions struct { Logger abstractlogger.Logger WebSocketInitFunc InitFunc CustomKeepAliveInterval time.Duration CustomInitTimeOutDuration time.Duration }
ProtocolGraphQLTransportWSHandlerOptions can be used to provide options to the graphql-transport-ws protocol handler.
type ProtocolGraphQLWSHandler ¶
type ProtocolGraphQLWSHandler struct {
// contains filtered or unexported fields
}
ProtocolGraphQLWSHandler is able to handle the graphql-ws protocol.
func NewProtocolGraphQLWSHandler ¶
func NewProtocolGraphQLWSHandler(client subscription.TransportClient) (*ProtocolGraphQLWSHandler, error)
NewProtocolGraphQLWSHandler creates a new ProtocolGraphQLWSHandler with default options.
func NewProtocolGraphQLWSHandlerWithOptions ¶
func NewProtocolGraphQLWSHandlerWithOptions(client subscription.TransportClient, opts ProtocolGraphQLWSHandlerOptions) (*ProtocolGraphQLWSHandler, error)
NewProtocolGraphQLWSHandlerWithOptions creates a new ProtocolGraphQLWSHandler. It requires an option struct.
func (*ProtocolGraphQLWSHandler) EventHandler ¶
func (p *ProtocolGraphQLWSHandler) EventHandler() subscription.EventHandler
EventHandler returns the underlying graphql-ws event handler. It's an implementation of subscription.Protocol.
func (*ProtocolGraphQLWSHandler) Handle ¶
func (p *ProtocolGraphQLWSHandler) Handle(ctx context.Context, engine subscription.Engine, data []byte) error
Handle will handle the actual graphql-ws protocol messages. It's an implementation of subscription.Protocol.
type ProtocolGraphQLWSHandlerOptions ¶
type ProtocolGraphQLWSHandlerOptions struct { Logger abstractlogger.Logger WebSocketInitFunc InitFunc CustomKeepAliveInterval time.Duration }
ProtocolGraphQLWSHandlerOptions can be used to provide options to the graphql-ws protocol handler.