Documentation ¶
Overview ¶
Package graphql provides a GraphQL client implementation.
For more information, see package git.matagi.id/putra/graphql-client
For now, see README for more details.
Index ¶
- Constants
- Variables
- func ConstructMutation(v interface{}, variables map[string]interface{}, options ...Option) (string, error)
- func ConstructQuery(v interface{}, variables map[string]interface{}, options ...Option) (string, error)
- func ConstructSubscription(v interface{}, variables map[string]interface{}, options ...Option) (string, string, error)
- func ElemSafe(v reflect.Value) reflect.Value
- func FieldSafe(valStruct reflect.Value, i int) reflect.Value
- func IndexSafe(v reflect.Value, i int) reflect.Value
- func UnmarshalGraphQL(data []byte, v interface{}) error
- type Boolean
- type Client
- func (c *Client) Exec(ctx context.Context, query string, v interface{}, ...) error
- func (c *Client) ExecRaw(ctx context.Context, query string, variables map[string]interface{}, ...) ([]byte, error)
- func (c *Client) Mutate(ctx context.Context, m interface{}, variables map[string]interface{}, ...) error
- func (c *Client) MutateRaw(ctx context.Context, m interface{}, variables map[string]interface{}, ...) ([]byte, error)
- func (c *Client) NamedMutate(ctx context.Context, name string, m interface{}, ...) errordeprecated
- func (c *Client) NamedMutateRaw(ctx context.Context, name string, m interface{}, ...) ([]byte, error)
- func (c *Client) NamedQuery(ctx context.Context, name string, q interface{}, ...) errordeprecated
- func (c *Client) NamedQueryRaw(ctx context.Context, name string, q interface{}, ...) ([]byte, error)
- func (c *Client) Query(ctx context.Context, q interface{}, variables map[string]interface{}, ...) error
- func (c *Client) QueryRaw(ctx context.Context, q interface{}, variables map[string]interface{}, ...) ([]byte, error)
- func (c *Client) WithDebug(debug bool) *Client
- func (c *Client) WithRequestModifier(f RequestModifier) *Client
- type Doer
- type Error
- type Errors
- type Float
- type GraphQLRequestPayload
- type GraphQLType
- type ID
- type Int
- type OperationMessage
- type OperationMessageType
- type Option
- type OptionType
- type RequestModifier
- type String
- type Subscription
- func (s Subscription) GetHandler() func(data []byte, err error)
- func (s Subscription) GetID() string
- func (s Subscription) GetKey() string
- func (s Subscription) GetPayload() GraphQLRequestPayload
- func (s Subscription) GetStatus() SubscriptionStatus
- func (s *Subscription) SetStatus(status SubscriptionStatus)
- type SubscriptionClient
- func (sc *SubscriptionClient) Close() (err error)
- func (sc *SubscriptionClient) Exec(query string, variables map[string]interface{}, ...) (string, error)
- func (sc *SubscriptionClient) GetContext() context.Context
- func (sc *SubscriptionClient) GetTimeout() time.Duration
- func (sc *SubscriptionClient) GetURL() string
- func (sc *SubscriptionClient) NamedSubscribe(name string, v interface{}, variables map[string]interface{}, ...) (string, error)deprecated
- func (sc *SubscriptionClient) OnConnected(fn func()) *SubscriptionClient
- func (sc *SubscriptionClient) OnConnectionAlive(fn func()) *SubscriptionClient
- func (sc *SubscriptionClient) OnDisconnected(fn func()) *SubscriptionClient
- func (sc *SubscriptionClient) OnError(onError func(sc *SubscriptionClient, err error) error) *SubscriptionClient
- func (sc *SubscriptionClient) OnSubscriptionComplete(fn func(sub Subscription)) *SubscriptionClient
- func (sc *SubscriptionClient) Run() error
- func (sc *SubscriptionClient) Subscribe(v interface{}, variables map[string]interface{}, ...) (string, error)
- func (sc *SubscriptionClient) SubscribeRaw(query string, variables map[string]interface{}, ...) (string, error)
- func (sc *SubscriptionClient) Unsubscribe(id string) error
- func (sc *SubscriptionClient) WithConnectionParams(params map[string]interface{}) *SubscriptionClient
- func (sc *SubscriptionClient) WithConnectionParamsFn(fn func() map[string]interface{}) *SubscriptionClient
- func (sc *SubscriptionClient) WithExitWhenNoSubscription(value bool) *SubscriptionClient
- func (sc *SubscriptionClient) WithLog(logger func(args ...interface{})) *SubscriptionClient
- func (sc *SubscriptionClient) WithProtocol(protocol SubscriptionProtocolType) *SubscriptionClient
- func (sc *SubscriptionClient) WithReadLimit(limit int64) *SubscriptionClient
- func (sc *SubscriptionClient) WithRetryStatusCodes(codes ...string) *SubscriptionClient
- func (sc *SubscriptionClient) WithRetryTimeout(timeout time.Duration) *SubscriptionClient
- func (sc *SubscriptionClient) WithTimeout(timeout time.Duration) *SubscriptionClient
- func (sc *SubscriptionClient) WithWebSocket(fn func(sc *SubscriptionClient) (WebsocketConn, error)) *SubscriptionClient
- func (sc *SubscriptionClient) WithWebSocketOptions(options WebsocketOptions) *SubscriptionClient
- func (sc *SubscriptionClient) WithoutLogTypes(types ...OperationMessageType) *SubscriptionClient
- type SubscriptionContext
- func (sc *SubscriptionContext) Cancel()
- func (sc *SubscriptionContext) Close() error
- func (sc *SubscriptionContext) GetAcknowledge() bool
- func (sc *SubscriptionContext) GetContext() context.Context
- func (sc *SubscriptionContext) GetSubscription(id string) *Subscription
- func (sc *SubscriptionContext) GetSubscriptions() map[string]Subscription
- func (sc *SubscriptionContext) GetSubscriptionsLength(status []SubscriptionStatus) int
- func (sc *SubscriptionContext) GetWebsocketConn() WebsocketConn
- func (sc *SubscriptionContext) Log(message interface{}, source string, opType OperationMessageType)
- func (sc *SubscriptionContext) NewContext()
- func (sc *SubscriptionContext) Send(message interface{}, opType OperationMessageType) error
- func (sc *SubscriptionContext) SetAcknowledge(value bool)
- func (sc *SubscriptionContext) SetSubscription(key string, sub *Subscription)
- func (sc *SubscriptionContext) SetWebsocketConn(conn WebsocketConn)
- type SubscriptionProtocol
- type SubscriptionProtocolType
- type SubscriptionStatus
- type WebsocketConn
- type WebsocketHandler
- type WebsocketOptions
Constants ¶
const ( ErrRequestError = "request_error" ErrJsonEncode = "json_encode_error" ErrJsonDecode = "json_decode_error" ErrGraphQLEncode = "graphql_encode_error" ErrGraphQLDecode = "graphql_decode_error" )
const ( // SubscriptionWaiting the subscription hasn't been registered to the server SubscriptionWaiting SubscriptionStatus = 0 // SubscriptionRunning the subscription is up and running SubscriptionRunning SubscriptionStatus = 1 // SubscriptionUnsubscribed the subscription was manually unsubscribed by the user SubscriptionUnsubscribed SubscriptionStatus = 2 // SubscriptionsTransportWS the enum implements the subscription transport that follows Apollo's subscriptions-transport-ws protocol specification // https://github.com/apollographql/subscriptions-transport-ws/blob/master/PROTOCOL.md SubscriptionsTransportWS SubscriptionProtocolType = "subscriptions-transport-ws" // GraphQLWS enum implements GraphQL over WebSocket Protocol (graphql-ws) // https://github.com/enisdenjo/graphql-ws/blob/master/PROTOCOL.md GraphQLWS SubscriptionProtocolType = "graphql-ws" // Receiving a message of a type or format which is not specified in this document // The <error-message> can be vaguely descriptive on why the received message is invalid. StatusInvalidMessage websocket.StatusCode = 4400 StatusUnauthorized websocket.StatusCode = 4401 // Connection initialisation timeout StatusConnectionInitialisationTimeout websocket.StatusCode = 4408 // Subscriber for <generated-id> already exists StatusSubscriberAlreadyExists websocket.StatusCode = 4409 // Too many initialisation requests StatusTooManyInitialisationRequests websocket.StatusCode = 4429 )
const ( // Unknown operation type, for logging only GQLUnknown OperationMessageType = "unknown" // Internal status, for logging only GQLInternal OperationMessageType = "internal" // @deprecated: use GQLUnknown instead GQL_UNKNOWN = GQLUnknown // @deprecated: use GQLInternal instead GQL_INTERNAL = GQLInternal )
const ( // The server may responses with this message to the GQL_CONNECTION_INIT from client, indicates the server rejected the connection. GQLConnectionError OperationMessageType = "connection_error" // Client sends this message to execute GraphQL operation GQLStart OperationMessageType = "start" // Client sends this message in order to stop a running GraphQL operation execution (for example: unsubscribe) GQLStop OperationMessageType = "stop" // Client sends this message in order to stop a running GraphQL operation execution (for example: unsubscribe) GQLData OperationMessageType = "data" // Server message that should be sent right after each GQL_CONNECTION_ACK processed and then periodically to keep the client connection alive. // The client starts to consider the keep alive message only upon the first received keep alive message from the server. GQLConnectionKeepAlive OperationMessageType = "ka" // Client sends this message to terminate the connection. GQLConnectionTerminate OperationMessageType = "connection_terminate" // Client sends this message after plain websocket connection to start the communication with the server // @deprecated: use GQLConnectionInit instead GQL_CONNECTION_INIT = GQLConnectionInit // The server may responses with this message to the GQL_CONNECTION_INIT from client, indicates the server rejected the connection. // @deprecated: use GQLConnectionError instead GQL_CONNECTION_ERROR = GQLConnectionError // Client sends this message to execute GraphQL operation // @deprecated: use GQLStart instead GQL_START = GQLStart // Client sends this message in order to stop a running GraphQL operation execution (for example: unsubscribe) // @deprecated: use GQLStop instead GQL_STOP = GQLStop // Server sends this message upon a failing operation, before the GraphQL execution, usually due to GraphQL validation errors (resolver errors are part of GQL_DATA message, and will be added as errors array) // @deprecated: use GQLError instead GQL_ERROR = GQLError // The server sends this message to transfer the GraphQL execution result from the server to the client, this message is a response for GQL_START message. // @deprecated: use GQLData instead GQL_DATA = GQLData // Server sends this message to indicate that a GraphQL operation is done, and no more data will arrive for the specific operation. // @deprecated: use GQLComplete instead GQL_COMPLETE = GQLComplete // Server message that should be sent right after each GQL_CONNECTION_ACK processed and then periodically to keep the client connection alive. // The client starts to consider the keep alive message only upon the first received keep alive message from the server. // @deprecated: use GQLConnectionKeepAlive instead GQL_CONNECTION_KEEP_ALIVE = GQLConnectionKeepAlive // The server may responses with this message to the GQL_CONNECTION_INIT from client, indicates the server accepted the connection. May optionally include a payload. // @deprecated: use GQLConnectionAck instead GQL_CONNECTION_ACK = GQLConnectionAck // Client sends this message to terminate the connection. // @deprecated: use GQLConnectionTerminate instead GQL_CONNECTION_TERMINATE = GQLConnectionTerminate )
Variables ¶
var ( // ErrSubscriptionStopped a special error which forces the subscription stop ErrSubscriptionStopped = errors.New("subscription stopped") // ErrSubscriptionNotExists an error denoting that subscription does not exist ErrSubscriptionNotExists = errors.New("subscription does not exist") )
Functions ¶
func ConstructMutation ¶
func ConstructMutation(v interface{}, variables map[string]interface{}, options ...Option) (string, error)
ConstructQuery build GraphQL mutation string from struct and variables
func ConstructQuery ¶
func ConstructQuery(v interface{}, variables map[string]interface{}, options ...Option) (string, error)
ConstructQuery build GraphQL query string from struct and variables
func ConstructSubscription ¶
func ConstructSubscription(v interface{}, variables map[string]interface{}, options ...Option) (string, string, error)
ConstructSubscription build GraphQL subscription string from struct and variables
func UnmarshalGraphQL ¶
UnmarshalGraphQL parses the JSON-encoded GraphQL response data and stores the result in the GraphQL query data structure pointed to by v.
The implementation is created on top of the JSON tokenizer available in "encoding/json".Decoder. This function is re-exported from the internal package
Types ¶
type Boolean ¶
type Boolean bool
Boolean represents true or false values. Deprecated.
func NewBoolean ¶
NewBoolean is a helper to make a new *Boolean. Deprecated.
type Client ¶
type Client struct {
// contains filtered or unexported fields
}
Client is a GraphQL client.
func NewClient ¶
NewClient creates a GraphQL client targeting the specified GraphQL server URL. If httpClient is nil, then http.DefaultClient is used.
func (*Client) Exec ¶
func (c *Client) Exec(ctx context.Context, query string, v interface{}, variables map[string]interface{}, options ...Option) error
Executes a pre-built query and unmarshals the response into v. Unlike the Query method you have to specify in the query the fields that you want to receive as they are not inferred from v. This method is useful if you need to build the query dynamically.
func (*Client) ExecRaw ¶
func (c *Client) ExecRaw(ctx context.Context, query string, variables map[string]interface{}, options ...Option) ([]byte, error)
Executes a pre-built query and returns the raw json message. Unlike the Query method you have to specify in the query the fields that you want to receive as they are not inferred from the interface. This method is useful if you need to build the query dynamically.
func (*Client) Mutate ¶
func (c *Client) Mutate(ctx context.Context, m interface{}, variables map[string]interface{}, options ...Option) error
Mutate executes a single GraphQL mutation request, with a mutation derived from m, populating the response into it. m should be a pointer to struct that corresponds to the GraphQL schema.
func (*Client) MutateRaw ¶
func (c *Client) MutateRaw(ctx context.Context, m interface{}, variables map[string]interface{}, options ...Option) ([]byte, error)
MutateRaw executes a single GraphQL mutation request, with a mutation derived from m, populating the response into it. m should be a pointer to struct that corresponds to the GraphQL schema. return raw bytes message.
func (*Client) NamedMutate
deprecated
func (*Client) NamedMutateRaw ¶
func (c *Client) NamedMutateRaw(ctx context.Context, name string, m interface{}, variables map[string]interface{}, options ...Option) ([]byte, error)
NamedMutateRaw executes a single GraphQL mutation request, with operation name return raw bytes message.
func (*Client) NamedQuery
deprecated
func (*Client) NamedQueryRaw ¶
func (c *Client) NamedQueryRaw(ctx context.Context, name string, q interface{}, variables map[string]interface{}, options ...Option) ([]byte, error)
NamedQueryRaw executes a single GraphQL query request, with operation name return raw bytes message.
func (*Client) Query ¶
func (c *Client) Query(ctx context.Context, q interface{}, variables map[string]interface{}, options ...Option) error
Query executes a single GraphQL query request, with a query derived from q, populating the response into it. q should be a pointer to struct that corresponds to the GraphQL schema.
func (*Client) QueryRaw ¶
func (c *Client) QueryRaw(ctx context.Context, q interface{}, variables map[string]interface{}, options ...Option) ([]byte, error)
Query executes a single GraphQL query request, with a query derived from q, populating the response into it. q should be a pointer to struct that corresponds to the GraphQL schema. return raw bytes message.
func (*Client) WithRequestModifier ¶
func (c *Client) WithRequestModifier(f RequestModifier) *Client
Returns a copy of the client with the request modifier set. This allows you to reuse the same TCP connection for multiple slightly different requests to the same server (i.e. different authentication headers for multitenant applications)
type Doer ¶
Doer interface has the method required to use a type as custom http client. The net/*http.Client type satisfies this interface.
type Error ¶
type Errors ¶
type Errors []Error
errors represents the "errors" array in a response from a GraphQL server. If returned via error interface, the slice is expected to contain at least 1 element.
Specification: https://facebook.github.io/graphql/#sec-Errors.
type Float ¶
type Float float64
Float represents signed double-precision fractional values as specified by IEEE 754. Deprecated.
type GraphQLRequestPayload ¶
type GraphQLRequestPayload struct { Query string `json:"query"` Variables map[string]interface{} `json:"variables,omitempty"` OperationName string `json:"operationName,omitempty"` }
GraphQLRequestPayload represents the graphql JSON-encoded request body https://graphql.org/learn/serving-over-http/#post-request
type GraphQLType ¶
type GraphQLType interface {
GetGraphQLType() string
}
GraphQLType interface is used to specify the GraphQL type associated with a particular type. If a type implements this interface, the name of the variable used while creating the GraphQL query will be the output of the function defined below.
In the current implementation, the GetGraphQLType function is applied to the zero value of the type to get the GraphQL type. So those who are implementing the function should avoid referencing the value of the type inside the function. Further, by this design, the output of the GetGraphQLType function will be a constant.
type ID ¶
type ID string
ID represents a unique identifier that is Base64 obfuscated. It is often used to refetch an object or as key for a cache. The ID type appears in a JSON response as a String; however, it is not intended to be human-readable. When expected as an input type, any string (such as "VXNlci0xMA==") or integer (such as 4) input value will be accepted as an ID.
type Int ¶
type Int int32
Int represents non-fractional signed whole numeric values. Int can represent values between -(2^31) and 2^31 - 1. Deprecated.
type OperationMessage ¶
type OperationMessage struct { ID string `json:"id,omitempty"` Type OperationMessageType `json:"type"` Payload json.RawMessage `json:"payload,omitempty"` }
OperationMessage represents a subscription operation message
func (OperationMessage) String ¶
func (om OperationMessage) String() string
String overrides the default Stringer to return json string for debugging
type OperationMessageType ¶
type OperationMessageType string
OperationMessageType represents a subscription message enum type
const ( // Indicates that the client wants to establish a connection within the existing socket. // This connection is not the actual WebSocket communication channel, but is rather a frame within it asking the server to allow future operation requests. GQLConnectionInit OperationMessageType = "connection_init" // Expected response to the ConnectionInit message from the client acknowledging a successful connection with the server. GQLConnectionAck OperationMessageType = "connection_ack" // The Ping message can be sent at any time within the established socket. GQLPing OperationMessageType = "ping" // The response to the Ping message. Must be sent as soon as the Ping message is received. GQLPong OperationMessageType = "pong" // Requests an operation specified in the message payload. This message provides a unique ID field to connect published messages to the operation requested by this message. GQLSubscribe OperationMessageType = "subscribe" // Operation execution result(s) from the source stream created by the binding Subscribe message. After all results have been emitted, the Complete message will follow indicating stream completion. GQLNext OperationMessageType = "next" // Operation execution error(s) in response to the Subscribe message. // This can occur before execution starts, usually due to validation errors, or during the execution of the request. GQLError OperationMessageType = "error" // indicates that the requested operation execution has completed. If the server dispatched the Error message relative to the original Subscribe message, no Complete message will be emitted. GQLComplete OperationMessageType = "complete" )
type Option ¶
type Option interface { // Type returns the supported type of the renderer // available types: operation_name and operation_directive Type() OptionType // String returns the query component string String() string }
Option abstracts an extra render interface for the query string They are optional parts. By default GraphQL queries can request data without them
func OperationName ¶
OperationName creates the operation name option
type OptionType ¶
type OptionType string
OptionType represents the logic of graphql query construction
const (
OptionTypeOperationDirective OptionType = "operation_directive"
)
type RequestModifier ¶
This function allows you to tweak the HTTP request. It might be useful to set authentication headers amongst other things
type String ¶
type String string
String represents textual data as UTF-8 character sequences. This type is most often used by GraphQL to represent free-form human-readable text. Deprecated.
type Subscription ¶
type Subscription struct {
// contains filtered or unexported fields
}
Subscription stores the subscription declaration and its state
func (Subscription) GetHandler ¶
func (s Subscription) GetHandler() func(data []byte, err error)
GetHandler a public getter for the subscription handler
func (Subscription) GetKey ¶
func (s Subscription) GetKey() string
GetKey returns the unique key of the subscription map Key is the immutable id of the subscription that is generated the first time It is used for searching because the subscription id is refreshed whenever the client reset
func (Subscription) GetPayload ¶
func (s Subscription) GetPayload() GraphQLRequestPayload
GetPayload returns the graphql request payload
func (Subscription) GetStatus ¶
func (s Subscription) GetStatus() SubscriptionStatus
GetStatus a public getter for the subscription status
func (*Subscription) SetStatus ¶
func (s *Subscription) SetStatus(status SubscriptionStatus)
SetStatus a public getter for the subscription status
type SubscriptionClient ¶
type SubscriptionClient struct {
// contains filtered or unexported fields
}
SubscriptionClient is a GraphQL subscription client.
func NewSubscriptionClient ¶
func NewSubscriptionClient(url string) *SubscriptionClient
NewSubscriptionClient constructs new subscription client
func (*SubscriptionClient) Close ¶
func (sc *SubscriptionClient) Close() (err error)
Close closes all subscription channel and websocket as well
func (*SubscriptionClient) Exec ¶
func (sc *SubscriptionClient) Exec(query string, variables map[string]interface{}, handler func(message []byte, err error) error) (string, error)
Exec sends start message to server and open a channel to receive data, with raw query
func (*SubscriptionClient) GetContext ¶
func (sc *SubscriptionClient) GetContext() context.Context
GetContext returns current context of subscription client
func (*SubscriptionClient) GetTimeout ¶
func (sc *SubscriptionClient) GetTimeout() time.Duration
GetTimeout returns write timeout of websocket client
func (*SubscriptionClient) GetURL ¶
func (sc *SubscriptionClient) GetURL() string
GetURL returns GraphQL server's URL
func (*SubscriptionClient) NamedSubscribe
deprecated
func (sc *SubscriptionClient) NamedSubscribe(name string, v interface{}, variables map[string]interface{}, handler func(message []byte, err error) error, options ...Option) (string, error)
NamedSubscribe sends start message to server and open a channel to receive data, with operation name
Deprecated: this is the shortcut of Subscribe method, with NewOperationName option
func (*SubscriptionClient) OnConnected ¶
func (sc *SubscriptionClient) OnConnected(fn func()) *SubscriptionClient
OnConnected event is triggered when the websocket connected to GraphQL server successfully
func (*SubscriptionClient) OnConnectionAlive ¶
func (sc *SubscriptionClient) OnConnectionAlive(fn func()) *SubscriptionClient
OnConnectionAlive event is triggered when the websocket receive a connection alive message (differs per protocol)
func (*SubscriptionClient) OnDisconnected ¶
func (sc *SubscriptionClient) OnDisconnected(fn func()) *SubscriptionClient
OnDisconnected event is triggered when the websocket client was disconnected
func (*SubscriptionClient) OnError ¶
func (sc *SubscriptionClient) OnError(onError func(sc *SubscriptionClient, err error) error) *SubscriptionClient
OnError event is triggered when there is any connection error. This is bottom exception handler level If this function is empty, or returns nil, the client restarts the connection If returns error, the websocket connection will be terminated
func (*SubscriptionClient) OnSubscriptionComplete ¶
func (sc *SubscriptionClient) OnSubscriptionComplete(fn func(sub Subscription)) *SubscriptionClient
OnSubscriptionComplete event is triggered when the subscription receives a terminated message from the server
func (*SubscriptionClient) Run ¶
func (sc *SubscriptionClient) Run() error
Run start the WebSocket client and subscriptions. If the client is running, recalling this function will restart all registered subscriptions If this function is run with goroutine, it can be stopped after closed
func (*SubscriptionClient) Subscribe ¶
func (sc *SubscriptionClient) Subscribe(v interface{}, variables map[string]interface{}, handler func(message []byte, err error) error, options ...Option) (string, error)
Subscribe sends start message to server and open a channel to receive data. The handler callback function will receive raw message data or error. If the call return error, onError event will be triggered The function returns subscription ID and error. You can use subscription ID to unsubscribe the subscription
func (*SubscriptionClient) SubscribeRaw ¶
func (sc *SubscriptionClient) SubscribeRaw(query string, variables map[string]interface{}, handler func(message []byte, err error) error) (string, error)
SubscribeRaw sends start message to server and open a channel to receive data, with raw query Deprecated: use Exec instead
func (*SubscriptionClient) Unsubscribe ¶
func (sc *SubscriptionClient) Unsubscribe(id string) error
Unsubscribe sends stop message to server and close subscription channel The input parameter is subscription ID that is returned from Subscribe function
func (*SubscriptionClient) WithConnectionParams ¶
func (sc *SubscriptionClient) WithConnectionParams(params map[string]interface{}) *SubscriptionClient
WithConnectionParams updates connection params for sending to server through GQL_CONNECTION_INIT event It's usually used for authentication handshake
func (*SubscriptionClient) WithConnectionParamsFn ¶
func (sc *SubscriptionClient) WithConnectionParamsFn(fn func() map[string]interface{}) *SubscriptionClient
WithConnectionParamsFn set a function that returns connection params for sending to server through GQL_CONNECTION_INIT event It's suitable for short-lived access tokens that need to be refreshed frequently
func (*SubscriptionClient) WithExitWhenNoSubscription ¶
func (sc *SubscriptionClient) WithExitWhenNoSubscription(value bool) *SubscriptionClient
WithExitWhenNoSubscription the client should exit when all subscriptions were closed
func (*SubscriptionClient) WithLog ¶
func (sc *SubscriptionClient) WithLog(logger func(args ...interface{})) *SubscriptionClient
WithLog sets logging function to print out received messages. By default, nothing is printed
func (*SubscriptionClient) WithProtocol ¶
func (sc *SubscriptionClient) WithProtocol(protocol SubscriptionProtocolType) *SubscriptionClient
WithProtocol changes the subscription protocol implementation By default the subscription client uses the subscriptions-transport-ws protocol
func (*SubscriptionClient) WithReadLimit ¶
func (sc *SubscriptionClient) WithReadLimit(limit int64) *SubscriptionClient
WithReadLimit set max size of response message
func (*SubscriptionClient) WithRetryStatusCodes ¶
func (sc *SubscriptionClient) WithRetryStatusCodes(codes ...string) *SubscriptionClient
WithRetryStatusCodes allow retry the subscription connection when receiving one of these codes the input parameter can be number string or range, e.g 4000-5000
func (*SubscriptionClient) WithRetryTimeout ¶
func (sc *SubscriptionClient) WithRetryTimeout(timeout time.Duration) *SubscriptionClient
WithRetryTimeout updates reconnecting timeout. When the websocket server was stopped, the client will retry connecting every second until timeout The zero value means unlimited timeout
func (*SubscriptionClient) WithTimeout ¶
func (sc *SubscriptionClient) WithTimeout(timeout time.Duration) *SubscriptionClient
WithTimeout updates read and write timeout of websocket client
func (*SubscriptionClient) WithWebSocket ¶
func (sc *SubscriptionClient) WithWebSocket(fn func(sc *SubscriptionClient) (WebsocketConn, error)) *SubscriptionClient
WithWebSocket replaces customized websocket client constructor In default, subscription client uses https://github.com/nhooyr/websocket
func (*SubscriptionClient) WithWebSocketOptions ¶
func (sc *SubscriptionClient) WithWebSocketOptions(options WebsocketOptions) *SubscriptionClient
WithWebSocketOptions provides options to the websocket client
func (*SubscriptionClient) WithoutLogTypes ¶
func (sc *SubscriptionClient) WithoutLogTypes(types ...OperationMessageType) *SubscriptionClient
WithoutLogTypes these operation types won't be printed
type SubscriptionContext ¶
type SubscriptionContext struct { context.Context OnConnected func() OnDisconnected func() OnConnectionAlive func() OnSubscriptionComplete func(sub Subscription) // contains filtered or unexported fields }
SubscriptionContext represents a shared context for protocol implementations with the websocket connection inside
func (*SubscriptionContext) Cancel ¶
func (sc *SubscriptionContext) Cancel()
SetCancel set the cancel function of the inner context
func (*SubscriptionContext) Close ¶
func (sc *SubscriptionContext) Close() error
Close closes the context and the inner websocket connection if exists
func (*SubscriptionContext) GetAcknowledge ¶
func (sc *SubscriptionContext) GetAcknowledge() bool
GetAcknowledge get the acknowledge status
func (*SubscriptionContext) GetContext ¶
func (sc *SubscriptionContext) GetContext() context.Context
GetContext get the inner context
func (*SubscriptionContext) GetSubscription ¶
func (sc *SubscriptionContext) GetSubscription(id string) *Subscription
GetSubscription get the subscription state by id
func (*SubscriptionContext) GetSubscriptions ¶
func (sc *SubscriptionContext) GetSubscriptions() map[string]Subscription
GetSubscription get all available subscriptions in the context
func (*SubscriptionContext) GetSubscriptionsLength ¶
func (sc *SubscriptionContext) GetSubscriptionsLength(status []SubscriptionStatus) int
GetSubscriptionsLength returns the length of subscriptions by status
func (*SubscriptionContext) GetWebsocketConn ¶
func (sc *SubscriptionContext) GetWebsocketConn() WebsocketConn
GetWebsocketConn get the current websocket connection
func (*SubscriptionContext) Log ¶
func (sc *SubscriptionContext) Log(message interface{}, source string, opType OperationMessageType)
Log prints condition logging with message type filters
func (*SubscriptionContext) NewContext ¶
func (sc *SubscriptionContext) NewContext()
GetContext set the inner context
func (*SubscriptionContext) Send ¶
func (sc *SubscriptionContext) Send(message interface{}, opType OperationMessageType) error
Send emits a message to the graphql server
func (*SubscriptionContext) SetAcknowledge ¶
func (sc *SubscriptionContext) SetAcknowledge(value bool)
SetAcknowledge set the acknowledge status
func (*SubscriptionContext) SetSubscription ¶
func (sc *SubscriptionContext) SetSubscription(key string, sub *Subscription)
SetSubscription set the input subscription state into the context if subscription is nil, removes the subscription from the map
func (*SubscriptionContext) SetWebsocketConn ¶
func (sc *SubscriptionContext) SetWebsocketConn(conn WebsocketConn)
SetWebsocketConn set the current websocket connection
type SubscriptionProtocol ¶
type SubscriptionProtocol interface { // GetSubprotocols returns subprotocol names of the subscription transport // The graphql server depends on the Sec-WebSocket-Protocol header to return the correct message specification GetSubprotocols() []string // ConnectionInit sends a initial request to establish a connection within the existing socket ConnectionInit(ctx *SubscriptionContext, connectionParams map[string]interface{}) error // Subscribe requests an graphql operation specified in the payload message Subscribe(ctx *SubscriptionContext, sub Subscription) error // Unsubscribe sends a request to stop listening and complete the subscription Unsubscribe(ctx *SubscriptionContext, sub Subscription) error // OnMessage listens ongoing messages from server OnMessage(ctx *SubscriptionContext, subscription Subscription, message OperationMessage) error // Close terminates all subscriptions of the current websocket Close(ctx *SubscriptionContext) error }
SubscriptionProtocol abstracts the life-cycle of subscription protocol implementation for a specific transport protocol
type SubscriptionProtocolType ¶
type SubscriptionProtocolType string
SubscriptionProtocolType represents the protocol specification enum of the subscription
type WebsocketConn ¶
type WebsocketConn interface { ReadJSON(v interface{}) error WriteJSON(v interface{}) error Close() error // SetReadLimit sets the maximum size in bytes for a message read from the peer. If a // message exceeds the limit, the connection sends a close message to the peer // and returns ErrReadLimit to the application. SetReadLimit(limit int64) // GetCloseStatus tries to get WebSocket close status from error // return -1 if the error is unknown // https://www.iana.org/assignments/websocket/websocket.xhtml GetCloseStatus(error) int32 }
WebsocketHandler abstracts WebSocket connection functions ReadJSON and WriteJSON data of a frame from the WebSocket connection. Close the WebSocket connection.
type WebsocketHandler ¶
default websocket handler implementation using https://github.com/nhooyr/websocket
func (*WebsocketHandler) Close ¶
func (wh *WebsocketHandler) Close() error
Close implements the function to close the websocket connection
func (*WebsocketHandler) GetCloseStatus ¶
func (wh *WebsocketHandler) GetCloseStatus(err error) int32
GetCloseStatus tries to get WebSocket close status from error https://www.iana.org/assignments/websocket/websocket.xhtml
func (*WebsocketHandler) ReadJSON ¶
func (wh *WebsocketHandler) ReadJSON(v interface{}) error
ReadJSON implements the function to decode the json message from the server
func (*WebsocketHandler) WriteJSON ¶
func (wh *WebsocketHandler) WriteJSON(v interface{}) error
WriteJSON implements the function to encode and send message in json format to the server
type WebsocketOptions ¶
WebsocketOptions allows implementation agnostic configuration of the websocket client
Source Files ¶
Directories ¶
Path | Synopsis |
---|---|
example
|
|
graphqldev
graphqldev is a test program currently being used for developing graphql package.
|
graphqldev is a test program currently being used for developing graphql package. |
subscription
subscription is a test program currently being used for developing graphql package.
|
subscription is a test program currently being used for developing graphql package. |
Package ident provides functions for parsing and converting identifier names between various naming convention.
|
Package ident provides functions for parsing and converting identifier names between various naming convention. |
pkg
|
|
jsonutil
Package jsonutil provides a function for decoding JSON into a GraphQL query data structure.
|
Package jsonutil provides a function for decoding JSON into a GraphQL query data structure. |