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