UNPKG

5.79 kBTypeScriptView Raw
1/// <reference types="node" />
2import * as http2 from 'http2';
3import { CallCredentials } from './call-credentials';
4import { Status } from './constants';
5import { Filter } from './filter';
6import { FilterStackFactory, FilterStack } from './filter-stack';
7import { Metadata } from './metadata';
8import { ChannelImplementation } from './channel';
9import { SubchannelCallStatsTracker, Subchannel } from './subchannel';
10import { ServerSurfaceCall } from './server-call';
11export declare type Deadline = Date | number;
12export interface CallStreamOptions {
13 deadline: Deadline;
14 flags: number;
15 host: string;
16 parentCall: ServerSurfaceCall | null;
17}
18export declare type PartialCallStreamOptions = Partial<CallStreamOptions>;
19export interface StatusObject {
20 code: Status;
21 details: string;
22 metadata: Metadata;
23}
24export declare const enum WriteFlags {
25 BufferHint = 1,
26 NoCompress = 2,
27 WriteThrough = 4
28}
29export interface WriteObject {
30 message: Buffer;
31 flags?: number;
32}
33export interface MetadataListener {
34 (metadata: Metadata, next: (metadata: Metadata) => void): void;
35}
36export interface MessageListener {
37 (message: any, next: (message: any) => void): void;
38}
39export interface StatusListener {
40 (status: StatusObject, next: (status: StatusObject) => void): void;
41}
42export interface FullListener {
43 onReceiveMetadata: MetadataListener;
44 onReceiveMessage: MessageListener;
45 onReceiveStatus: StatusListener;
46}
47export declare type Listener = Partial<FullListener>;
48/**
49 * An object with methods for handling the responses to a call.
50 */
51export interface InterceptingListener {
52 onReceiveMetadata(metadata: Metadata): void;
53 onReceiveMessage(message: any): void;
54 onReceiveStatus(status: StatusObject): void;
55}
56export declare function isInterceptingListener(listener: Listener | InterceptingListener): listener is InterceptingListener;
57export declare class InterceptingListenerImpl implements InterceptingListener {
58 private listener;
59 private nextListener;
60 private processingMetadata;
61 private hasPendingMessage;
62 private pendingMessage;
63 private processingMessage;
64 private pendingStatus;
65 constructor(listener: FullListener, nextListener: InterceptingListener);
66 private processPendingMessage;
67 private processPendingStatus;
68 onReceiveMetadata(metadata: Metadata): void;
69 onReceiveMessage(message: any): void;
70 onReceiveStatus(status: StatusObject): void;
71}
72export interface WriteCallback {
73 (error?: Error | null): void;
74}
75export interface MessageContext {
76 callback?: WriteCallback;
77 flags?: number;
78}
79export interface Call {
80 cancelWithStatus(status: Status, details: string): void;
81 getPeer(): string;
82 start(metadata: Metadata, listener: InterceptingListener): void;
83 sendMessageWithContext(context: MessageContext, message: Buffer): void;
84 startRead(): void;
85 halfClose(): void;
86 getDeadline(): Deadline;
87 getCredentials(): CallCredentials;
88 setCredentials(credentials: CallCredentials): void;
89 getMethod(): string;
90 getHost(): string;
91}
92export declare class Http2CallStream implements Call {
93 private readonly methodName;
94 private readonly channel;
95 private readonly options;
96 private readonly channelCallCredentials;
97 private readonly callNumber;
98 credentials: CallCredentials;
99 filterStack: FilterStack;
100 private http2Stream;
101 private pendingRead;
102 private isWriteFilterPending;
103 private pendingWrite;
104 private pendingWriteCallback;
105 private writesClosed;
106 private decoder;
107 private isReadFilterPending;
108 private canPush;
109 /**
110 * Indicates that an 'end' event has come from the http2 stream, so there
111 * will be no more data events.
112 */
113 private readsClosed;
114 private statusOutput;
115 private unpushedReadMessages;
116 private unfilteredReadMessages;
117 private mappedStatusCode;
118 private finalStatus;
119 private subchannel;
120 private disconnectListener;
121 private listener;
122 private internalError;
123 private configDeadline;
124 private statusWatchers;
125 private streamEndWatchers;
126 private callStatsTracker;
127 constructor(methodName: string, channel: ChannelImplementation, options: CallStreamOptions, filterStackFactory: FilterStackFactory, channelCallCredentials: CallCredentials, callNumber: number);
128 private outputStatus;
129 private trace;
130 /**
131 * On first call, emits a 'status' event with the given StatusObject.
132 * Subsequent calls are no-ops.
133 * @param status The status of the call.
134 */
135 private endCall;
136 private maybeOutputStatus;
137 private push;
138 private handleFilterError;
139 private handleFilteredRead;
140 private filterReceivedMessage;
141 private tryPush;
142 private handleTrailers;
143 private writeMessageToStream;
144 attachHttp2Stream(stream: http2.ClientHttp2Stream, subchannel: Subchannel, extraFilters: Filter[], callStatsTracker: SubchannelCallStatsTracker): void;
145 start(metadata: Metadata, listener: InterceptingListener): void;
146 private destroyHttp2Stream;
147 cancelWithStatus(status: Status, details: string): void;
148 getDeadline(): Deadline;
149 getCredentials(): CallCredentials;
150 setCredentials(credentials: CallCredentials): void;
151 getStatus(): StatusObject | null;
152 getPeer(): string;
153 getMethod(): string;
154 getHost(): string;
155 setConfigDeadline(configDeadline: Deadline): void;
156 addStatusWatcher(watcher: (status: StatusObject) => void): void;
157 addStreamEndWatcher(watcher: (success: boolean) => void): void;
158 addFilters(extraFilters: Filter[]): void;
159 getCallNumber(): number;
160 startRead(): void;
161 private maybeCloseWrites;
162 sendMessageWithContext(context: MessageContext, message: Buffer): void;
163 halfClose(): void;
164}