graphql-sse
Version:
Zero-dependency, HTTP/1 safe, simple, GraphQL over Server-Sent Events Protocol server and client
107 lines (106 loc) • 3.6 kB
text/typescript
/**
*
* common
*
*/
import type { GraphQLError } from 'graphql';
/**
* Header key through which the event stream token is transmitted
* when using the client in "single connection mode".
*
* Read more: https://github.com/enisdenjo/graphql-sse/blob/master/PROTOCOL.md#single-connection-mode
*
* @category Common
*/
export declare const TOKEN_HEADER_KEY: "x-graphql-event-stream-token";
/**
* URL query parameter key through which the event stream token is transmitted
* when using the client in "single connection mode".
*
* Read more: https://github.com/enisdenjo/graphql-sse/blob/master/PROTOCOL.md#single-connection-mode
*
* @category Common
*/
export declare const TOKEN_QUERY_KEY: "token";
/**
* Parameters for GraphQL's request for execution.
*
* Reference: https://github.com/graphql/graphql-over-http/blob/main/spec/GraphQLOverHTTP.md#request
*
* @category Common
*/
export interface RequestParams {
operationName?: string;
query: string;
variables?: Record<string, unknown>;
extensions?: Record<string, unknown>;
}
/**
* Represents a message in an event stream.
*
* Read more: https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events/Using_server-sent_events#Event_stream_format
*
* @category Common
*/
export interface StreamMessage<ForID extends boolean, E extends StreamEvent> {
event: E;
data: ForID extends true ? StreamDataForID<E> : StreamData<E>;
}
/** @category Common */
export type StreamEvent = 'next' | 'complete';
/** @category Common */
export declare function validateStreamEvent(e: unknown): StreamEvent;
/** @category Common */
export declare function print<ForID extends boolean, E extends StreamEvent>(msg: StreamMessage<ForID, E>): string;
/** @category Common */
export interface ExecutionResult<Data = Record<string, unknown>, Extensions = Record<string, unknown>> {
errors?: ReadonlyArray<GraphQLError>;
data?: Data | null;
hasNext?: boolean;
extensions?: Extensions;
}
/** @category Common */
export interface ExecutionPatchResult<Data = unknown, Extensions = Record<string, unknown>> {
errors?: ReadonlyArray<GraphQLError>;
data?: Data | null;
path?: ReadonlyArray<string | number>;
label?: string;
hasNext: boolean;
extensions?: Extensions;
}
/** @category Common */
export type StreamData<E extends StreamEvent> = E extends 'next' ? ExecutionResult | ExecutionPatchResult : E extends 'complete' ? null : never;
/** @category Common */
export type StreamDataForID<E extends StreamEvent> = E extends 'next' ? {
id: string;
payload: ExecutionResult | ExecutionPatchResult;
} : E extends 'complete' ? {
id: string;
} : never;
/** @category Common */
export declare function parseStreamData<ForID extends boolean, E extends StreamEvent>(e: E, data: string): ForID extends true ? StreamDataForID<E> : StreamData<E>;
/**
* A representation of any set of values over any amount of time.
*
* @category Common
*/
export interface Sink<T = unknown> {
/** Next value arriving. */
next(value: T): void;
/** An error that has occurred. This function "closes" the sink. */
error(error: unknown): void;
/** The sink has completed. This function "closes" the sink. */
complete(): void;
}
/**
* Checks whether the provided value is an async iterable.
*
* @category Common
*/
export declare function isAsyncIterable<T>(val: unknown): val is AsyncIterable<T>;
/**
* Checks whether the provided value is an async generator.
*
* @category Common
*/
export declare function isAsyncGenerator<T>(val: unknown): val is AsyncGenerator<T>;