UNPKG

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
/** * * 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>;