UNPKG

3.6 kBTypeScriptView Raw
1import { HttpRequest } from "./http";
2import { FinalizeHandler, FinalizeHandlerArguments, FinalizeHandlerOutput, HandlerExecutionContext } from "./middleware";
3import { MetadataBearer } from "./response";
4/**
5 * @public
6 *
7 * An event stream message. The headers and body properties will always be
8 * defined, with empty headers represented as an object with no keys and an
9 * empty body represented as a zero-length Uint8Array.
10 */
11export interface Message {
12 headers: MessageHeaders;
13 body: Uint8Array;
14}
15/**
16 * @public
17 */
18export type MessageHeaders = Record<string, MessageHeaderValue>;
19/**
20 * @public
21 */
22export interface BooleanHeaderValue {
23 type: "boolean";
24 value: boolean;
25}
26/**
27 * @public
28 */
29export interface ByteHeaderValue {
30 type: "byte";
31 value: number;
32}
33/**
34 * @public
35 */
36export interface ShortHeaderValue {
37 type: "short";
38 value: number;
39}
40/**
41 * @public
42 */
43export interface IntegerHeaderValue {
44 type: "integer";
45 value: number;
46}
47/**
48 * @public
49 */
50export interface LongHeaderValue {
51 type: "long";
52 value: Int64;
53}
54/**
55 * @public
56 */
57export interface BinaryHeaderValue {
58 type: "binary";
59 value: Uint8Array;
60}
61/**
62 * @public
63 */
64export interface StringHeaderValue {
65 type: "string";
66 value: string;
67}
68/**
69 * @public
70 */
71export interface TimestampHeaderValue {
72 type: "timestamp";
73 value: Date;
74}
75/**
76 * @public
77 */
78export interface UuidHeaderValue {
79 type: "uuid";
80 value: string;
81}
82/**
83 * @public
84 */
85export type MessageHeaderValue = BooleanHeaderValue | ByteHeaderValue | ShortHeaderValue | IntegerHeaderValue | LongHeaderValue | BinaryHeaderValue | StringHeaderValue | TimestampHeaderValue | UuidHeaderValue;
86/**
87 * @public
88 */
89export interface Int64 {
90 readonly bytes: Uint8Array;
91 valueOf: () => number;
92 toString: () => string;
93}
94/**
95 * @public
96 *
97 * Util functions for serializing or deserializing event stream
98 */
99export interface EventStreamSerdeContext {
100 eventStreamMarshaller: EventStreamMarshaller;
101}
102/**
103 * @public
104 *
105 * A function which deserializes binary event stream message into modeled shape.
106 */
107export interface EventStreamMarshallerDeserFn<StreamType> {
108 <T>(body: StreamType, deserializer: (input: Record<string, Message>) => Promise<T>): AsyncIterable<T>;
109}
110/**
111 * @public
112 *
113 * A function that serializes modeled shape into binary stream message.
114 */
115export interface EventStreamMarshallerSerFn<StreamType> {
116 <T>(input: AsyncIterable<T>, serializer: (event: T) => Message): StreamType;
117}
118/**
119 * @public
120 *
121 * An interface which provides functions for serializing and deserializing binary event stream
122 * to/from corresponsing modeled shape.
123 */
124export interface EventStreamMarshaller<StreamType = any> {
125 deserialize: EventStreamMarshallerDeserFn<StreamType>;
126 serialize: EventStreamMarshallerSerFn<StreamType>;
127}
128/**
129 * @public
130 */
131export interface EventStreamRequestSigner {
132 sign(request: HttpRequest): Promise<HttpRequest>;
133}
134/**
135 * @public
136 */
137export interface EventStreamPayloadHandler {
138 handle: <Input extends object, Output extends MetadataBearer>(next: FinalizeHandler<Input, Output>, args: FinalizeHandlerArguments<Input>, context?: HandlerExecutionContext) => Promise<FinalizeHandlerOutput<Output>>;
139}
140/**
141 * @public
142 */
143export interface EventStreamPayloadHandlerProvider {
144 (options: any): EventStreamPayloadHandler;
145}
146/**
147 * @public
148 */
149export interface EventStreamSerdeProvider {
150 (options: any): EventStreamMarshaller;
151}
152/**
153 * @public
154 */
155export interface EventStreamSignerProvider {
156 (options: any): EventStreamRequestSigner;
157}