@reptilestyle/grpc-js 1.9.14-compression.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +201 -0
- package/README.md +79 -0
- package/build/src/admin.d.ts +11 -0
- package/build/src/admin.js +30 -0
- package/build/src/admin.js.map +1 -0
- package/build/src/backoff-timeout.d.ts +90 -0
- package/build/src/backoff-timeout.js +174 -0
- package/build/src/backoff-timeout.js.map +1 -0
- package/build/src/call-credentials.d.ts +56 -0
- package/build/src/call-credentials.js +153 -0
- package/build/src/call-credentials.js.map +1 -0
- package/build/src/call-interface.d.ts +85 -0
- package/build/src/call-interface.js +84 -0
- package/build/src/call-interface.js.map +1 -0
- package/build/src/call-number.d.ts +1 -0
- package/build/src/call-number.js +24 -0
- package/build/src/call-number.js.map +1 -0
- package/build/src/call.d.ts +80 -0
- package/build/src/call.js +136 -0
- package/build/src/call.js.map +1 -0
- package/build/src/channel-credentials.d.ts +81 -0
- package/build/src/channel-credentials.js +177 -0
- package/build/src/channel-credentials.js.map +1 -0
- package/build/src/channel-options.d.ts +72 -0
- package/build/src/channel-options.js +69 -0
- package/build/src/channel-options.js.map +1 -0
- package/build/src/channel.d.ts +76 -0
- package/build/src/channel.js +68 -0
- package/build/src/channel.js.map +1 -0
- package/build/src/channelz.d.ts +108 -0
- package/build/src/channelz.js +637 -0
- package/build/src/channelz.js.map +1 -0
- package/build/src/client-interceptors.d.ts +120 -0
- package/build/src/client-interceptors.js +428 -0
- package/build/src/client-interceptors.js.map +1 -0
- package/build/src/client.d.ts +74 -0
- package/build/src/client.js +431 -0
- package/build/src/client.js.map +1 -0
- package/build/src/compression-algorithms.d.ts +5 -0
- package/build/src/compression-algorithms.js +26 -0
- package/build/src/compression-algorithms.js.map +1 -0
- package/build/src/compression-filter.d.ts +26 -0
- package/build/src/compression-filter.js +257 -0
- package/build/src/compression-filter.js.map +1 -0
- package/build/src/connectivity-state.d.ts +7 -0
- package/build/src/connectivity-state.js +28 -0
- package/build/src/connectivity-state.js.map +1 -0
- package/build/src/constants.d.ts +38 -0
- package/build/src/constants.js +64 -0
- package/build/src/constants.js.map +1 -0
- package/build/src/control-plane-status.d.ts +5 -0
- package/build/src/control-plane-status.js +42 -0
- package/build/src/control-plane-status.js.map +1 -0
- package/build/src/deadline.d.ts +14 -0
- package/build/src/deadline.js +97 -0
- package/build/src/deadline.js.map +1 -0
- package/build/src/duration.d.ts +7 -0
- package/build/src/duration.js +34 -0
- package/build/src/duration.js.map +1 -0
- package/build/src/error.d.ts +2 -0
- package/build/src/error.js +40 -0
- package/build/src/error.js.map +1 -0
- package/build/src/events.d.ts +9 -0
- package/build/src/events.js +19 -0
- package/build/src/events.js.map +1 -0
- package/build/src/experimental.d.ts +16 -0
- package/build/src/experimental.js +39 -0
- package/build/src/experimental.js.map +1 -0
- package/build/src/filter-stack.d.ts +21 -0
- package/build/src/filter-stack.js +82 -0
- package/build/src/filter-stack.js.map +1 -0
- package/build/src/filter.d.ts +25 -0
- package/build/src/filter.js +38 -0
- package/build/src/filter.js.map +1 -0
- package/build/src/generated/channelz.d.ts +72 -0
- package/build/src/generated/channelz.js +3 -0
- package/build/src/generated/channelz.js.map +1 -0
- package/build/src/generated/google/protobuf/Any.d.ts +9 -0
- package/build/src/generated/google/protobuf/Any.js +4 -0
- package/build/src/generated/google/protobuf/Any.js.map +1 -0
- package/build/src/generated/google/protobuf/BoolValue.d.ts +6 -0
- package/build/src/generated/google/protobuf/BoolValue.js +4 -0
- package/build/src/generated/google/protobuf/BoolValue.js.map +1 -0
- package/build/src/generated/google/protobuf/BytesValue.d.ts +6 -0
- package/build/src/generated/google/protobuf/BytesValue.js +4 -0
- package/build/src/generated/google/protobuf/BytesValue.js.map +1 -0
- package/build/src/generated/google/protobuf/DoubleValue.d.ts +6 -0
- package/build/src/generated/google/protobuf/DoubleValue.js +4 -0
- package/build/src/generated/google/protobuf/DoubleValue.js.map +1 -0
- package/build/src/generated/google/protobuf/Duration.d.ts +9 -0
- package/build/src/generated/google/protobuf/Duration.js +4 -0
- package/build/src/generated/google/protobuf/Duration.js.map +1 -0
- package/build/src/generated/google/protobuf/FloatValue.d.ts +6 -0
- package/build/src/generated/google/protobuf/FloatValue.js +4 -0
- package/build/src/generated/google/protobuf/FloatValue.js.map +1 -0
- package/build/src/generated/google/protobuf/Int32Value.d.ts +6 -0
- package/build/src/generated/google/protobuf/Int32Value.js +4 -0
- package/build/src/generated/google/protobuf/Int32Value.js.map +1 -0
- package/build/src/generated/google/protobuf/Int64Value.d.ts +7 -0
- package/build/src/generated/google/protobuf/Int64Value.js +4 -0
- package/build/src/generated/google/protobuf/Int64Value.js.map +1 -0
- package/build/src/generated/google/protobuf/StringValue.d.ts +6 -0
- package/build/src/generated/google/protobuf/StringValue.js +4 -0
- package/build/src/generated/google/protobuf/StringValue.js.map +1 -0
- package/build/src/generated/google/protobuf/Timestamp.d.ts +9 -0
- package/build/src/generated/google/protobuf/Timestamp.js +4 -0
- package/build/src/generated/google/protobuf/Timestamp.js.map +1 -0
- package/build/src/generated/google/protobuf/UInt32Value.d.ts +6 -0
- package/build/src/generated/google/protobuf/UInt32Value.js +4 -0
- package/build/src/generated/google/protobuf/UInt32Value.js.map +1 -0
- package/build/src/generated/google/protobuf/UInt64Value.d.ts +7 -0
- package/build/src/generated/google/protobuf/UInt64Value.js +4 -0
- package/build/src/generated/google/protobuf/UInt64Value.js.map +1 -0
- package/build/src/generated/grpc/channelz/v1/Address.d.ts +79 -0
- package/build/src/generated/grpc/channelz/v1/Address.js +4 -0
- package/build/src/generated/grpc/channelz/v1/Address.js.map +1 -0
- package/build/src/generated/grpc/channelz/v1/Channel.d.ts +64 -0
- package/build/src/generated/grpc/channelz/v1/Channel.js +4 -0
- package/build/src/generated/grpc/channelz/v1/Channel.js.map +1 -0
- package/build/src/generated/grpc/channelz/v1/ChannelConnectivityState.d.ts +24 -0
- package/build/src/generated/grpc/channelz/v1/ChannelConnectivityState.js +14 -0
- package/build/src/generated/grpc/channelz/v1/ChannelConnectivityState.js.map +1 -0
- package/build/src/generated/grpc/channelz/v1/ChannelData.d.ts +72 -0
- package/build/src/generated/grpc/channelz/v1/ChannelData.js +4 -0
- package/build/src/generated/grpc/channelz/v1/ChannelData.js.map +1 -0
- package/build/src/generated/grpc/channelz/v1/ChannelRef.d.ts +27 -0
- package/build/src/generated/grpc/channelz/v1/ChannelRef.js +4 -0
- package/build/src/generated/grpc/channelz/v1/ChannelRef.js.map +1 -0
- package/build/src/generated/grpc/channelz/v1/ChannelTrace.d.ts +41 -0
- package/build/src/generated/grpc/channelz/v1/ChannelTrace.js +4 -0
- package/build/src/generated/grpc/channelz/v1/ChannelTrace.js.map +1 -0
- package/build/src/generated/grpc/channelz/v1/ChannelTraceEvent.d.ts +74 -0
- package/build/src/generated/grpc/channelz/v1/ChannelTraceEvent.js +15 -0
- package/build/src/generated/grpc/channelz/v1/ChannelTraceEvent.js.map +1 -0
- package/build/src/generated/grpc/channelz/v1/Channelz.d.ts +159 -0
- package/build/src/generated/grpc/channelz/v1/Channelz.js +4 -0
- package/build/src/generated/grpc/channelz/v1/Channelz.js.map +1 -0
- package/build/src/generated/grpc/channelz/v1/GetChannelRequest.d.ts +13 -0
- package/build/src/generated/grpc/channelz/v1/GetChannelRequest.js +4 -0
- package/build/src/generated/grpc/channelz/v1/GetChannelRequest.js.map +1 -0
- package/build/src/generated/grpc/channelz/v1/GetChannelResponse.d.ts +15 -0
- package/build/src/generated/grpc/channelz/v1/GetChannelResponse.js +4 -0
- package/build/src/generated/grpc/channelz/v1/GetChannelResponse.js.map +1 -0
- package/build/src/generated/grpc/channelz/v1/GetServerRequest.d.ts +13 -0
- package/build/src/generated/grpc/channelz/v1/GetServerRequest.js +4 -0
- package/build/src/generated/grpc/channelz/v1/GetServerRequest.js.map +1 -0
- package/build/src/generated/grpc/channelz/v1/GetServerResponse.d.ts +15 -0
- package/build/src/generated/grpc/channelz/v1/GetServerResponse.js +4 -0
- package/build/src/generated/grpc/channelz/v1/GetServerResponse.js.map +1 -0
- package/build/src/generated/grpc/channelz/v1/GetServerSocketsRequest.d.ts +35 -0
- package/build/src/generated/grpc/channelz/v1/GetServerSocketsRequest.js +4 -0
- package/build/src/generated/grpc/channelz/v1/GetServerSocketsRequest.js.map +1 -0
- package/build/src/generated/grpc/channelz/v1/GetServerSocketsResponse.d.ts +29 -0
- package/build/src/generated/grpc/channelz/v1/GetServerSocketsResponse.js +4 -0
- package/build/src/generated/grpc/channelz/v1/GetServerSocketsResponse.js.map +1 -0
- package/build/src/generated/grpc/channelz/v1/GetServersRequest.d.ts +33 -0
- package/build/src/generated/grpc/channelz/v1/GetServersRequest.js +4 -0
- package/build/src/generated/grpc/channelz/v1/GetServersRequest.js.map +1 -0
- package/build/src/generated/grpc/channelz/v1/GetServersResponse.d.ts +29 -0
- package/build/src/generated/grpc/channelz/v1/GetServersResponse.js +4 -0
- package/build/src/generated/grpc/channelz/v1/GetServersResponse.js.map +1 -0
- package/build/src/generated/grpc/channelz/v1/GetSocketRequest.d.ts +25 -0
- package/build/src/generated/grpc/channelz/v1/GetSocketRequest.js +4 -0
- package/build/src/generated/grpc/channelz/v1/GetSocketRequest.js.map +1 -0
- package/build/src/generated/grpc/channelz/v1/GetSocketResponse.d.ts +15 -0
- package/build/src/generated/grpc/channelz/v1/GetSocketResponse.js +4 -0
- package/build/src/generated/grpc/channelz/v1/GetSocketResponse.js.map +1 -0
- package/build/src/generated/grpc/channelz/v1/GetSubchannelRequest.d.ts +13 -0
- package/build/src/generated/grpc/channelz/v1/GetSubchannelRequest.js +4 -0
- package/build/src/generated/grpc/channelz/v1/GetSubchannelRequest.js.map +1 -0
- package/build/src/generated/grpc/channelz/v1/GetSubchannelResponse.d.ts +15 -0
- package/build/src/generated/grpc/channelz/v1/GetSubchannelResponse.js +4 -0
- package/build/src/generated/grpc/channelz/v1/GetSubchannelResponse.js.map +1 -0
- package/build/src/generated/grpc/channelz/v1/GetTopChannelsRequest.d.ts +33 -0
- package/build/src/generated/grpc/channelz/v1/GetTopChannelsRequest.js +4 -0
- package/build/src/generated/grpc/channelz/v1/GetTopChannelsRequest.js.map +1 -0
- package/build/src/generated/grpc/channelz/v1/GetTopChannelsResponse.d.ts +29 -0
- package/build/src/generated/grpc/channelz/v1/GetTopChannelsResponse.js +4 -0
- package/build/src/generated/grpc/channelz/v1/GetTopChannelsResponse.js.map +1 -0
- package/build/src/generated/grpc/channelz/v1/Security.d.ts +79 -0
- package/build/src/generated/grpc/channelz/v1/Security.js +4 -0
- package/build/src/generated/grpc/channelz/v1/Security.js.map +1 -0
- package/build/src/generated/grpc/channelz/v1/Server.d.ts +41 -0
- package/build/src/generated/grpc/channelz/v1/Server.js +4 -0
- package/build/src/generated/grpc/channelz/v1/Server.js.map +1 -0
- package/build/src/generated/grpc/channelz/v1/ServerData.d.ts +53 -0
- package/build/src/generated/grpc/channelz/v1/ServerData.js +4 -0
- package/build/src/generated/grpc/channelz/v1/ServerData.js.map +1 -0
- package/build/src/generated/grpc/channelz/v1/ServerRef.d.ts +27 -0
- package/build/src/generated/grpc/channelz/v1/ServerRef.js +4 -0
- package/build/src/generated/grpc/channelz/v1/ServerRef.js.map +1 -0
- package/build/src/generated/grpc/channelz/v1/Socket.d.ts +66 -0
- package/build/src/generated/grpc/channelz/v1/Socket.js +4 -0
- package/build/src/generated/grpc/channelz/v1/Socket.js.map +1 -0
- package/build/src/generated/grpc/channelz/v1/SocketData.d.ts +146 -0
- package/build/src/generated/grpc/channelz/v1/SocketData.js +4 -0
- package/build/src/generated/grpc/channelz/v1/SocketData.js.map +1 -0
- package/build/src/generated/grpc/channelz/v1/SocketOption.d.ts +43 -0
- package/build/src/generated/grpc/channelz/v1/SocketOption.js +4 -0
- package/build/src/generated/grpc/channelz/v1/SocketOption.js.map +1 -0
- package/build/src/generated/grpc/channelz/v1/SocketOptionLinger.d.ts +29 -0
- package/build/src/generated/grpc/channelz/v1/SocketOptionLinger.js +4 -0
- package/build/src/generated/grpc/channelz/v1/SocketOptionLinger.js.map +1 -0
- package/build/src/generated/grpc/channelz/v1/SocketOptionTcpInfo.d.ts +70 -0
- package/build/src/generated/grpc/channelz/v1/SocketOptionTcpInfo.js +4 -0
- package/build/src/generated/grpc/channelz/v1/SocketOptionTcpInfo.js.map +1 -0
- package/build/src/generated/grpc/channelz/v1/SocketOptionTimeout.d.ts +15 -0
- package/build/src/generated/grpc/channelz/v1/SocketOptionTimeout.js +4 -0
- package/build/src/generated/grpc/channelz/v1/SocketOptionTimeout.js.map +1 -0
- package/build/src/generated/grpc/channelz/v1/SocketRef.d.ts +27 -0
- package/build/src/generated/grpc/channelz/v1/SocketRef.js +4 -0
- package/build/src/generated/grpc/channelz/v1/SocketRef.js.map +1 -0
- package/build/src/generated/grpc/channelz/v1/Subchannel.d.ts +66 -0
- package/build/src/generated/grpc/channelz/v1/Subchannel.js +4 -0
- package/build/src/generated/grpc/channelz/v1/Subchannel.js.map +1 -0
- package/build/src/generated/grpc/channelz/v1/SubchannelRef.d.ts +27 -0
- package/build/src/generated/grpc/channelz/v1/SubchannelRef.js +4 -0
- package/build/src/generated/grpc/channelz/v1/SubchannelRef.js.map +1 -0
- package/build/src/http_proxy.d.ts +15 -0
- package/build/src/http_proxy.js +259 -0
- package/build/src/http_proxy.js.map +1 -0
- package/build/src/index.d.ts +76 -0
- package/build/src/index.js +140 -0
- package/build/src/index.js.map +1 -0
- package/build/src/internal-channel.d.ts +118 -0
- package/build/src/internal-channel.js +535 -0
- package/build/src/internal-channel.js.map +1 -0
- package/build/src/load-balancer-child-handler.d.ts +24 -0
- package/build/src/load-balancer-child-handler.js +151 -0
- package/build/src/load-balancer-child-handler.js.map +1 -0
- package/build/src/load-balancer-outlier-detection.d.ts +61 -0
- package/build/src/load-balancer-outlier-detection.js +608 -0
- package/build/src/load-balancer-outlier-detection.js.map +1 -0
- package/build/src/load-balancer-pick-first.d.ts +97 -0
- package/build/src/load-balancer-pick-first.js +393 -0
- package/build/src/load-balancer-pick-first.js.map +1 -0
- package/build/src/load-balancer-round-robin.d.ts +21 -0
- package/build/src/load-balancer-round-robin.js +174 -0
- package/build/src/load-balancer-round-robin.js.map +1 -0
- package/build/src/load-balancer.d.ts +97 -0
- package/build/src/load-balancer.js +102 -0
- package/build/src/load-balancer.js.map +1 -0
- package/build/src/load-balancing-call.d.ts +44 -0
- package/build/src/load-balancing-call.js +269 -0
- package/build/src/load-balancing-call.js.map +1 -0
- package/build/src/logging.d.ts +7 -0
- package/build/src/logging.js +114 -0
- package/build/src/logging.js.map +1 -0
- package/build/src/make-client.d.ts +71 -0
- package/build/src/make-client.js +143 -0
- package/build/src/make-client.js.map +1 -0
- package/build/src/max-message-size-filter.d.ts +15 -0
- package/build/src/max-message-size-filter.js +86 -0
- package/build/src/max-message-size-filter.js.map +1 -0
- package/build/src/metadata.d.ts +84 -0
- package/build/src/metadata.js +249 -0
- package/build/src/metadata.js.map +1 -0
- package/build/src/object-stream.d.ts +27 -0
- package/build/src/object-stream.js +19 -0
- package/build/src/object-stream.js.map +1 -0
- package/build/src/picker.d.ts +91 -0
- package/build/src/picker.js +78 -0
- package/build/src/picker.js.map +1 -0
- package/build/src/resolver-dns.d.ts +13 -0
- package/build/src/resolver-dns.js +328 -0
- package/build/src/resolver-dns.js.map +1 -0
- package/build/src/resolver-ip.d.ts +1 -0
- package/build/src/resolver-ip.js +104 -0
- package/build/src/resolver-ip.js.map +1 -0
- package/build/src/resolver-uds.d.ts +1 -0
- package/build/src/resolver-uds.js +50 -0
- package/build/src/resolver-uds.js.map +1 -0
- package/build/src/resolver.d.ts +105 -0
- package/build/src/resolver.js +87 -0
- package/build/src/resolver.js.map +1 -0
- package/build/src/resolving-call.d.ts +44 -0
- package/build/src/resolving-call.js +273 -0
- package/build/src/resolving-call.js.map +1 -0
- package/build/src/resolving-load-balancer.d.ts +67 -0
- package/build/src/resolving-load-balancer.js +304 -0
- package/build/src/resolving-load-balancer.js.map +1 -0
- package/build/src/retrying-call.d.ts +94 -0
- package/build/src/retrying-call.js +639 -0
- package/build/src/retrying-call.js.map +1 -0
- package/build/src/server-call.d.ts +159 -0
- package/build/src/server-call.js +700 -0
- package/build/src/server-call.js.map +1 -0
- package/build/src/server-credentials.d.ts +11 -0
- package/build/src/server-credentials.js +81 -0
- package/build/src/server-credentials.js.map +1 -0
- package/build/src/server.d.ts +56 -0
- package/build/src/server.js +892 -0
- package/build/src/server.js.map +1 -0
- package/build/src/service-config.d.ts +56 -0
- package/build/src/service-config.js +416 -0
- package/build/src/service-config.js.map +1 -0
- package/build/src/status-builder.d.ts +28 -0
- package/build/src/status-builder.js +68 -0
- package/build/src/status-builder.js.map +1 -0
- package/build/src/stream-decoder.d.ts +10 -0
- package/build/src/stream-decoder.js +96 -0
- package/build/src/stream-decoder.js.map +1 -0
- package/build/src/subchannel-address.d.ts +18 -0
- package/build/src/subchannel-address.js +65 -0
- package/build/src/subchannel-address.js.map +1 -0
- package/build/src/subchannel-call.d.ts +61 -0
- package/build/src/subchannel-call.js +461 -0
- package/build/src/subchannel-call.js.map +1 -0
- package/build/src/subchannel-interface.d.ts +49 -0
- package/build/src/subchannel-interface.js +59 -0
- package/build/src/subchannel-interface.js.map +1 -0
- package/build/src/subchannel-pool.d.ts +40 -0
- package/build/src/subchannel-pool.js +137 -0
- package/build/src/subchannel-pool.js.map +1 -0
- package/build/src/subchannel.d.ts +119 -0
- package/build/src/subchannel.js +353 -0
- package/build/src/subchannel.js.map +1 -0
- package/build/src/tls-helpers.d.ts +2 -0
- package/build/src/tls-helpers.js +34 -0
- package/build/src/tls-helpers.js.map +1 -0
- package/build/src/transport.d.ts +130 -0
- package/build/src/transport.js +640 -0
- package/build/src/transport.js.map +1 -0
- package/build/src/uri-parser.d.ts +12 -0
- package/build/src/uri-parser.js +110 -0
- package/build/src/uri-parser.js.map +1 -0
- package/package.json +85 -0
- package/proto/channelz.proto +564 -0
- package/src/admin.ts +45 -0
- package/src/backoff-timeout.ts +196 -0
- package/src/call-credentials.ts +226 -0
- package/src/call-interface.ts +173 -0
- package/src/call-number.ts +22 -0
- package/src/call.ts +200 -0
- package/src/channel-credentials.ts +267 -0
- package/src/channel-options.ts +119 -0
- package/src/channel.ts +174 -0
- package/src/channelz.ts +886 -0
- package/src/client-interceptors.ts +577 -0
- package/src/client.ts +715 -0
- package/src/compression-algorithms.ts +22 -0
- package/src/compression-filter.ts +315 -0
- package/src/connectivity-state.ts +24 -0
- package/src/constants.ts +66 -0
- package/src/control-plane-status.ts +43 -0
- package/src/deadline.ts +95 -0
- package/src/duration.ts +36 -0
- package/src/error.ts +37 -0
- package/src/events.ts +26 -0
- package/src/experimental.ts +48 -0
- package/src/filter-stack.ts +100 -0
- package/src/filter.ts +63 -0
- package/src/generated/channelz.ts +73 -0
- package/src/generated/google/protobuf/Any.ts +13 -0
- package/src/generated/google/protobuf/BoolValue.ts +10 -0
- package/src/generated/google/protobuf/BytesValue.ts +10 -0
- package/src/generated/google/protobuf/DoubleValue.ts +10 -0
- package/src/generated/google/protobuf/Duration.ts +13 -0
- package/src/generated/google/protobuf/FloatValue.ts +10 -0
- package/src/generated/google/protobuf/Int32Value.ts +10 -0
- package/src/generated/google/protobuf/Int64Value.ts +11 -0
- package/src/generated/google/protobuf/StringValue.ts +10 -0
- package/src/generated/google/protobuf/Timestamp.ts +13 -0
- package/src/generated/google/protobuf/UInt32Value.ts +10 -0
- package/src/generated/google/protobuf/UInt64Value.ts +11 -0
- package/src/generated/grpc/channelz/v1/Address.ts +89 -0
- package/src/generated/grpc/channelz/v1/Channel.ts +68 -0
- package/src/generated/grpc/channelz/v1/ChannelConnectivityState.ts +45 -0
- package/src/generated/grpc/channelz/v1/ChannelData.ts +76 -0
- package/src/generated/grpc/channelz/v1/ChannelRef.ts +31 -0
- package/src/generated/grpc/channelz/v1/ChannelTrace.ts +45 -0
- package/src/generated/grpc/channelz/v1/ChannelTraceEvent.ts +91 -0
- package/src/generated/grpc/channelz/v1/Channelz.ts +178 -0
- package/src/generated/grpc/channelz/v1/GetChannelRequest.ts +17 -0
- package/src/generated/grpc/channelz/v1/GetChannelResponse.ts +19 -0
- package/src/generated/grpc/channelz/v1/GetServerRequest.ts +17 -0
- package/src/generated/grpc/channelz/v1/GetServerResponse.ts +19 -0
- package/src/generated/grpc/channelz/v1/GetServerSocketsRequest.ts +39 -0
- package/src/generated/grpc/channelz/v1/GetServerSocketsResponse.ts +33 -0
- package/src/generated/grpc/channelz/v1/GetServersRequest.ts +37 -0
- package/src/generated/grpc/channelz/v1/GetServersResponse.ts +33 -0
- package/src/generated/grpc/channelz/v1/GetSocketRequest.ts +29 -0
- package/src/generated/grpc/channelz/v1/GetSocketResponse.ts +19 -0
- package/src/generated/grpc/channelz/v1/GetSubchannelRequest.ts +17 -0
- package/src/generated/grpc/channelz/v1/GetSubchannelResponse.ts +19 -0
- package/src/generated/grpc/channelz/v1/GetTopChannelsRequest.ts +37 -0
- package/src/generated/grpc/channelz/v1/GetTopChannelsResponse.ts +33 -0
- package/src/generated/grpc/channelz/v1/Security.ts +87 -0
- package/src/generated/grpc/channelz/v1/Server.ts +45 -0
- package/src/generated/grpc/channelz/v1/ServerData.ts +57 -0
- package/src/generated/grpc/channelz/v1/ServerRef.ts +31 -0
- package/src/generated/grpc/channelz/v1/Socket.ts +70 -0
- package/src/generated/grpc/channelz/v1/SocketData.ts +150 -0
- package/src/generated/grpc/channelz/v1/SocketOption.ts +47 -0
- package/src/generated/grpc/channelz/v1/SocketOptionLinger.ts +33 -0
- package/src/generated/grpc/channelz/v1/SocketOptionTcpInfo.ts +74 -0
- package/src/generated/grpc/channelz/v1/SocketOptionTimeout.ts +19 -0
- package/src/generated/grpc/channelz/v1/SocketRef.ts +31 -0
- package/src/generated/grpc/channelz/v1/Subchannel.ts +70 -0
- package/src/generated/grpc/channelz/v1/SubchannelRef.ts +31 -0
- package/src/http_proxy.ts +311 -0
- package/src/index.ts +284 -0
- package/src/internal-channel.ts +832 -0
- package/src/load-balancer-child-handler.ts +169 -0
- package/src/load-balancer-outlier-detection.ts +882 -0
- package/src/load-balancer-pick-first.ts +487 -0
- package/src/load-balancer-round-robin.ts +249 -0
- package/src/load-balancer.ts +230 -0
- package/src/load-balancing-call.ts +351 -0
- package/src/logging.ts +123 -0
- package/src/make-client.ts +238 -0
- package/src/max-message-size-filter.ts +88 -0
- package/src/metadata.ts +298 -0
- package/src/object-stream.ts +66 -0
- package/src/picker.ts +146 -0
- package/src/resolver-dns.ts +412 -0
- package/src/resolver-ip.ts +120 -0
- package/src/resolver-uds.ts +63 -0
- package/src/resolver.ts +180 -0
- package/src/resolving-call.ts +331 -0
- package/src/resolving-load-balancer.ts +403 -0
- package/src/retrying-call.ts +821 -0
- package/src/server-call.ts +1033 -0
- package/src/server-credentials.ts +108 -0
- package/src/server.ts +1300 -0
- package/src/service-config.ts +542 -0
- package/src/status-builder.ts +80 -0
- package/src/stream-decoder.ts +105 -0
- package/src/subchannel-address.ts +88 -0
- package/src/subchannel-call.ts +539 -0
- package/src/subchannel-interface.ts +97 -0
- package/src/subchannel-pool.ts +176 -0
- package/src/subchannel.ts +482 -0
- package/src/tls-helpers.ts +35 -0
- package/src/transport.ts +824 -0
- package/src/uri-parser.ts +114 -0
|
@@ -0,0 +1,640 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/*
|
|
3
|
+
* Copyright 2023 gRPC authors.
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
16
|
+
*
|
|
17
|
+
*/
|
|
18
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
19
|
+
exports.Http2SubchannelConnector = void 0;
|
|
20
|
+
const http2 = require("http2");
|
|
21
|
+
const tls_1 = require("tls");
|
|
22
|
+
const channelz_1 = require("./channelz");
|
|
23
|
+
const constants_1 = require("./constants");
|
|
24
|
+
const http_proxy_1 = require("./http_proxy");
|
|
25
|
+
const logging = require("./logging");
|
|
26
|
+
const resolver_1 = require("./resolver");
|
|
27
|
+
const subchannel_address_1 = require("./subchannel-address");
|
|
28
|
+
const uri_parser_1 = require("./uri-parser");
|
|
29
|
+
const net = require("net");
|
|
30
|
+
const subchannel_call_1 = require("./subchannel-call");
|
|
31
|
+
const call_number_1 = require("./call-number");
|
|
32
|
+
const TRACER_NAME = 'transport';
|
|
33
|
+
const FLOW_CONTROL_TRACER_NAME = 'transport_flowctrl';
|
|
34
|
+
const clientVersion = require('../../package.json').version;
|
|
35
|
+
const { HTTP2_HEADER_AUTHORITY, HTTP2_HEADER_CONTENT_TYPE, HTTP2_HEADER_METHOD, HTTP2_HEADER_PATH, HTTP2_HEADER_TE, HTTP2_HEADER_USER_AGENT, } = http2.constants;
|
|
36
|
+
const KEEPALIVE_TIMEOUT_MS = 20000;
|
|
37
|
+
const tooManyPingsData = Buffer.from('too_many_pings', 'ascii');
|
|
38
|
+
class Http2Transport {
|
|
39
|
+
constructor(session, subchannelAddress, options,
|
|
40
|
+
/**
|
|
41
|
+
* Name of the remote server, if it is not the same as the subchannel
|
|
42
|
+
* address, i.e. if connecting through an HTTP CONNECT proxy.
|
|
43
|
+
*/
|
|
44
|
+
remoteName) {
|
|
45
|
+
this.session = session;
|
|
46
|
+
this.remoteName = remoteName;
|
|
47
|
+
/**
|
|
48
|
+
* The amount of time in between sending pings
|
|
49
|
+
*/
|
|
50
|
+
this.keepaliveTimeMs = -1;
|
|
51
|
+
/**
|
|
52
|
+
* The amount of time to wait for an acknowledgement after sending a ping
|
|
53
|
+
*/
|
|
54
|
+
this.keepaliveTimeoutMs = KEEPALIVE_TIMEOUT_MS;
|
|
55
|
+
/**
|
|
56
|
+
* Timer reference for timeout that indicates when to send the next ping
|
|
57
|
+
*/
|
|
58
|
+
this.keepaliveTimerId = null;
|
|
59
|
+
/**
|
|
60
|
+
* Indicates that the keepalive timer ran out while there were no active
|
|
61
|
+
* calls, and a ping should be sent the next time a call starts.
|
|
62
|
+
*/
|
|
63
|
+
this.pendingSendKeepalivePing = false;
|
|
64
|
+
/**
|
|
65
|
+
* Timer reference tracking when the most recent ping will be considered lost
|
|
66
|
+
*/
|
|
67
|
+
this.keepaliveTimeoutId = null;
|
|
68
|
+
/**
|
|
69
|
+
* Indicates whether keepalive pings should be sent without any active calls
|
|
70
|
+
*/
|
|
71
|
+
this.keepaliveWithoutCalls = false;
|
|
72
|
+
this.activeCalls = new Set();
|
|
73
|
+
this.disconnectListeners = [];
|
|
74
|
+
this.disconnectHandled = false;
|
|
75
|
+
this.channelzEnabled = true;
|
|
76
|
+
this.streamTracker = new channelz_1.ChannelzCallTracker();
|
|
77
|
+
this.keepalivesSent = 0;
|
|
78
|
+
this.messagesSent = 0;
|
|
79
|
+
this.messagesReceived = 0;
|
|
80
|
+
this.lastMessageSentTimestamp = null;
|
|
81
|
+
this.lastMessageReceivedTimestamp = null;
|
|
82
|
+
/* Populate subchannelAddressString and channelzRef before doing anything
|
|
83
|
+
* else, because they are used in the trace methods. */
|
|
84
|
+
this.subchannelAddressString = (0, subchannel_address_1.subchannelAddressToString)(subchannelAddress);
|
|
85
|
+
if (options['grpc.enable_channelz'] === 0) {
|
|
86
|
+
this.channelzEnabled = false;
|
|
87
|
+
}
|
|
88
|
+
this.channelzRef = (0, channelz_1.registerChannelzSocket)(this.subchannelAddressString, () => this.getChannelzInfo(), this.channelzEnabled);
|
|
89
|
+
// Build user-agent string.
|
|
90
|
+
this.userAgent = [
|
|
91
|
+
options['grpc.primary_user_agent'],
|
|
92
|
+
`grpc-node-js/${clientVersion}`,
|
|
93
|
+
options['grpc.secondary_user_agent'],
|
|
94
|
+
]
|
|
95
|
+
.filter(e => e)
|
|
96
|
+
.join(' '); // remove falsey values first
|
|
97
|
+
if ('grpc.keepalive_time_ms' in options) {
|
|
98
|
+
this.keepaliveTimeMs = options['grpc.keepalive_time_ms'];
|
|
99
|
+
}
|
|
100
|
+
if ('grpc.keepalive_timeout_ms' in options) {
|
|
101
|
+
this.keepaliveTimeoutMs = options['grpc.keepalive_timeout_ms'];
|
|
102
|
+
}
|
|
103
|
+
if ('grpc.keepalive_permit_without_calls' in options) {
|
|
104
|
+
this.keepaliveWithoutCalls =
|
|
105
|
+
options['grpc.keepalive_permit_without_calls'] === 1;
|
|
106
|
+
}
|
|
107
|
+
else {
|
|
108
|
+
this.keepaliveWithoutCalls = false;
|
|
109
|
+
}
|
|
110
|
+
session.once('close', () => {
|
|
111
|
+
this.trace('session closed');
|
|
112
|
+
this.stopKeepalivePings();
|
|
113
|
+
this.handleDisconnect();
|
|
114
|
+
});
|
|
115
|
+
session.once('goaway', (errorCode, lastStreamID, opaqueData) => {
|
|
116
|
+
let tooManyPings = false;
|
|
117
|
+
/* See the last paragraph of
|
|
118
|
+
* https://github.com/grpc/proposal/blob/master/A8-client-side-keepalive.md#basic-keepalive */
|
|
119
|
+
if (errorCode === http2.constants.NGHTTP2_ENHANCE_YOUR_CALM &&
|
|
120
|
+
opaqueData &&
|
|
121
|
+
opaqueData.equals(tooManyPingsData)) {
|
|
122
|
+
tooManyPings = true;
|
|
123
|
+
}
|
|
124
|
+
this.trace('connection closed by GOAWAY with code ' + errorCode + ' and data ' + (opaqueData === null || opaqueData === void 0 ? void 0 : opaqueData.toString()));
|
|
125
|
+
this.reportDisconnectToOwner(tooManyPings);
|
|
126
|
+
});
|
|
127
|
+
session.once('error', error => {
|
|
128
|
+
/* Do nothing here. Any error should also trigger a close event, which is
|
|
129
|
+
* where we want to handle that. */
|
|
130
|
+
this.trace('connection closed with error ' + error.message);
|
|
131
|
+
});
|
|
132
|
+
if (logging.isTracerEnabled(TRACER_NAME)) {
|
|
133
|
+
session.on('remoteSettings', (settings) => {
|
|
134
|
+
this.trace('new settings received' +
|
|
135
|
+
(this.session !== session ? ' on the old connection' : '') +
|
|
136
|
+
': ' +
|
|
137
|
+
JSON.stringify(settings));
|
|
138
|
+
});
|
|
139
|
+
session.on('localSettings', (settings) => {
|
|
140
|
+
this.trace('local settings acknowledged by remote' +
|
|
141
|
+
(this.session !== session ? ' on the old connection' : '') +
|
|
142
|
+
': ' +
|
|
143
|
+
JSON.stringify(settings));
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
/* Start the keepalive timer last, because this can trigger trace logs,
|
|
147
|
+
* which should only happen after everything else is set up. */
|
|
148
|
+
if (this.keepaliveWithoutCalls) {
|
|
149
|
+
this.maybeStartKeepalivePingTimer();
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
getChannelzInfo() {
|
|
153
|
+
var _a, _b, _c;
|
|
154
|
+
const sessionSocket = this.session.socket;
|
|
155
|
+
const remoteAddress = sessionSocket.remoteAddress
|
|
156
|
+
? (0, subchannel_address_1.stringToSubchannelAddress)(sessionSocket.remoteAddress, sessionSocket.remotePort)
|
|
157
|
+
: null;
|
|
158
|
+
const localAddress = sessionSocket.localAddress
|
|
159
|
+
? (0, subchannel_address_1.stringToSubchannelAddress)(sessionSocket.localAddress, sessionSocket.localPort)
|
|
160
|
+
: null;
|
|
161
|
+
let tlsInfo;
|
|
162
|
+
if (this.session.encrypted) {
|
|
163
|
+
const tlsSocket = sessionSocket;
|
|
164
|
+
const cipherInfo = tlsSocket.getCipher();
|
|
165
|
+
const certificate = tlsSocket.getCertificate();
|
|
166
|
+
const peerCertificate = tlsSocket.getPeerCertificate();
|
|
167
|
+
tlsInfo = {
|
|
168
|
+
cipherSuiteStandardName: (_a = cipherInfo.standardName) !== null && _a !== void 0 ? _a : null,
|
|
169
|
+
cipherSuiteOtherName: cipherInfo.standardName ? null : cipherInfo.name,
|
|
170
|
+
localCertificate: certificate && 'raw' in certificate ? certificate.raw : null,
|
|
171
|
+
remoteCertificate: peerCertificate && 'raw' in peerCertificate
|
|
172
|
+
? peerCertificate.raw
|
|
173
|
+
: null,
|
|
174
|
+
};
|
|
175
|
+
}
|
|
176
|
+
else {
|
|
177
|
+
tlsInfo = null;
|
|
178
|
+
}
|
|
179
|
+
const socketInfo = {
|
|
180
|
+
remoteAddress: remoteAddress,
|
|
181
|
+
localAddress: localAddress,
|
|
182
|
+
security: tlsInfo,
|
|
183
|
+
remoteName: this.remoteName,
|
|
184
|
+
streamsStarted: this.streamTracker.callsStarted,
|
|
185
|
+
streamsSucceeded: this.streamTracker.callsSucceeded,
|
|
186
|
+
streamsFailed: this.streamTracker.callsFailed,
|
|
187
|
+
messagesSent: this.messagesSent,
|
|
188
|
+
messagesReceived: this.messagesReceived,
|
|
189
|
+
keepAlivesSent: this.keepalivesSent,
|
|
190
|
+
lastLocalStreamCreatedTimestamp: this.streamTracker.lastCallStartedTimestamp,
|
|
191
|
+
lastRemoteStreamCreatedTimestamp: null,
|
|
192
|
+
lastMessageSentTimestamp: this.lastMessageSentTimestamp,
|
|
193
|
+
lastMessageReceivedTimestamp: this.lastMessageReceivedTimestamp,
|
|
194
|
+
localFlowControlWindow: (_b = this.session.state.localWindowSize) !== null && _b !== void 0 ? _b : null,
|
|
195
|
+
remoteFlowControlWindow: (_c = this.session.state.remoteWindowSize) !== null && _c !== void 0 ? _c : null,
|
|
196
|
+
};
|
|
197
|
+
return socketInfo;
|
|
198
|
+
}
|
|
199
|
+
trace(text) {
|
|
200
|
+
logging.trace(constants_1.LogVerbosity.DEBUG, TRACER_NAME, '(' +
|
|
201
|
+
this.channelzRef.id +
|
|
202
|
+
') ' +
|
|
203
|
+
this.subchannelAddressString +
|
|
204
|
+
' ' +
|
|
205
|
+
text);
|
|
206
|
+
}
|
|
207
|
+
keepaliveTrace(text) {
|
|
208
|
+
logging.trace(constants_1.LogVerbosity.DEBUG, 'keepalive', '(' +
|
|
209
|
+
this.channelzRef.id +
|
|
210
|
+
') ' +
|
|
211
|
+
this.subchannelAddressString +
|
|
212
|
+
' ' +
|
|
213
|
+
text);
|
|
214
|
+
}
|
|
215
|
+
flowControlTrace(text) {
|
|
216
|
+
logging.trace(constants_1.LogVerbosity.DEBUG, FLOW_CONTROL_TRACER_NAME, '(' +
|
|
217
|
+
this.channelzRef.id +
|
|
218
|
+
') ' +
|
|
219
|
+
this.subchannelAddressString +
|
|
220
|
+
' ' +
|
|
221
|
+
text);
|
|
222
|
+
}
|
|
223
|
+
internalsTrace(text) {
|
|
224
|
+
logging.trace(constants_1.LogVerbosity.DEBUG, 'transport_internals', '(' +
|
|
225
|
+
this.channelzRef.id +
|
|
226
|
+
') ' +
|
|
227
|
+
this.subchannelAddressString +
|
|
228
|
+
' ' +
|
|
229
|
+
text);
|
|
230
|
+
}
|
|
231
|
+
/**
|
|
232
|
+
* Indicate to the owner of this object that this transport should no longer
|
|
233
|
+
* be used. That happens if the connection drops, or if the server sends a
|
|
234
|
+
* GOAWAY.
|
|
235
|
+
* @param tooManyPings If true, this was triggered by a GOAWAY with data
|
|
236
|
+
* indicating that the session was closed becaues the client sent too many
|
|
237
|
+
* pings.
|
|
238
|
+
* @returns
|
|
239
|
+
*/
|
|
240
|
+
reportDisconnectToOwner(tooManyPings) {
|
|
241
|
+
if (this.disconnectHandled) {
|
|
242
|
+
return;
|
|
243
|
+
}
|
|
244
|
+
this.disconnectHandled = true;
|
|
245
|
+
this.disconnectListeners.forEach(listener => listener(tooManyPings));
|
|
246
|
+
}
|
|
247
|
+
/**
|
|
248
|
+
* Handle connection drops, but not GOAWAYs.
|
|
249
|
+
*/
|
|
250
|
+
handleDisconnect() {
|
|
251
|
+
this.reportDisconnectToOwner(false);
|
|
252
|
+
/* Give calls an event loop cycle to finish naturally before reporting the
|
|
253
|
+
* disconnnection to them. */
|
|
254
|
+
setImmediate(() => {
|
|
255
|
+
for (const call of this.activeCalls) {
|
|
256
|
+
call.onDisconnect();
|
|
257
|
+
}
|
|
258
|
+
});
|
|
259
|
+
}
|
|
260
|
+
addDisconnectListener(listener) {
|
|
261
|
+
this.disconnectListeners.push(listener);
|
|
262
|
+
}
|
|
263
|
+
clearKeepaliveTimer() {
|
|
264
|
+
if (!this.keepaliveTimerId) {
|
|
265
|
+
return;
|
|
266
|
+
}
|
|
267
|
+
clearTimeout(this.keepaliveTimerId);
|
|
268
|
+
this.keepaliveTimerId = null;
|
|
269
|
+
}
|
|
270
|
+
clearKeepaliveTimeout() {
|
|
271
|
+
if (!this.keepaliveTimeoutId) {
|
|
272
|
+
return;
|
|
273
|
+
}
|
|
274
|
+
clearTimeout(this.keepaliveTimeoutId);
|
|
275
|
+
this.keepaliveTimeoutId = null;
|
|
276
|
+
}
|
|
277
|
+
canSendPing() {
|
|
278
|
+
return (this.keepaliveTimeMs > 0 &&
|
|
279
|
+
(this.keepaliveWithoutCalls || this.activeCalls.size > 0));
|
|
280
|
+
}
|
|
281
|
+
maybeSendPing() {
|
|
282
|
+
var _a, _b;
|
|
283
|
+
this.clearKeepaliveTimer();
|
|
284
|
+
if (!this.canSendPing()) {
|
|
285
|
+
this.pendingSendKeepalivePing = true;
|
|
286
|
+
return;
|
|
287
|
+
}
|
|
288
|
+
if (this.channelzEnabled) {
|
|
289
|
+
this.keepalivesSent += 1;
|
|
290
|
+
}
|
|
291
|
+
this.keepaliveTrace('Sending ping with timeout ' + this.keepaliveTimeoutMs + 'ms');
|
|
292
|
+
if (!this.keepaliveTimeoutId) {
|
|
293
|
+
this.keepaliveTimeoutId = setTimeout(() => {
|
|
294
|
+
this.keepaliveTrace('Ping timeout passed without response');
|
|
295
|
+
this.handleDisconnect();
|
|
296
|
+
}, this.keepaliveTimeoutMs);
|
|
297
|
+
(_b = (_a = this.keepaliveTimeoutId).unref) === null || _b === void 0 ? void 0 : _b.call(_a);
|
|
298
|
+
}
|
|
299
|
+
try {
|
|
300
|
+
this.session.ping((err, duration, payload) => {
|
|
301
|
+
if (err) {
|
|
302
|
+
this.keepaliveTrace('Ping failed with error ' + err.message);
|
|
303
|
+
this.handleDisconnect();
|
|
304
|
+
}
|
|
305
|
+
this.keepaliveTrace('Received ping response');
|
|
306
|
+
this.clearKeepaliveTimeout();
|
|
307
|
+
this.maybeStartKeepalivePingTimer();
|
|
308
|
+
});
|
|
309
|
+
}
|
|
310
|
+
catch (e) {
|
|
311
|
+
/* If we fail to send a ping, the connection is no longer functional, so
|
|
312
|
+
* we should discard it. */
|
|
313
|
+
this.handleDisconnect();
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
/**
|
|
317
|
+
* Starts the keepalive ping timer if appropriate. If the timer already ran
|
|
318
|
+
* out while there were no active requests, instead send a ping immediately.
|
|
319
|
+
* If the ping timer is already running or a ping is currently in flight,
|
|
320
|
+
* instead do nothing and wait for them to resolve.
|
|
321
|
+
*/
|
|
322
|
+
maybeStartKeepalivePingTimer() {
|
|
323
|
+
var _a, _b;
|
|
324
|
+
if (!this.canSendPing()) {
|
|
325
|
+
return;
|
|
326
|
+
}
|
|
327
|
+
if (this.pendingSendKeepalivePing) {
|
|
328
|
+
this.pendingSendKeepalivePing = false;
|
|
329
|
+
this.maybeSendPing();
|
|
330
|
+
}
|
|
331
|
+
else if (!this.keepaliveTimerId && !this.keepaliveTimeoutId) {
|
|
332
|
+
this.keepaliveTrace('Starting keepalive timer for ' + this.keepaliveTimeMs + 'ms');
|
|
333
|
+
this.keepaliveTimerId = (_b = (_a = setTimeout(() => {
|
|
334
|
+
this.maybeSendPing();
|
|
335
|
+
}, this.keepaliveTimeMs)).unref) === null || _b === void 0 ? void 0 : _b.call(_a);
|
|
336
|
+
}
|
|
337
|
+
/* Otherwise, there is already either a keepalive timer or a ping pending,
|
|
338
|
+
* wait for those to resolve. */
|
|
339
|
+
}
|
|
340
|
+
stopKeepalivePings() {
|
|
341
|
+
if (this.keepaliveTimerId) {
|
|
342
|
+
clearTimeout(this.keepaliveTimerId);
|
|
343
|
+
this.keepaliveTimerId = null;
|
|
344
|
+
}
|
|
345
|
+
this.clearKeepaliveTimeout();
|
|
346
|
+
}
|
|
347
|
+
removeActiveCall(call) {
|
|
348
|
+
this.activeCalls.delete(call);
|
|
349
|
+
if (this.activeCalls.size === 0) {
|
|
350
|
+
this.session.unref();
|
|
351
|
+
}
|
|
352
|
+
}
|
|
353
|
+
addActiveCall(call) {
|
|
354
|
+
this.activeCalls.add(call);
|
|
355
|
+
if (this.activeCalls.size === 1) {
|
|
356
|
+
this.session.ref();
|
|
357
|
+
if (!this.keepaliveWithoutCalls) {
|
|
358
|
+
this.maybeStartKeepalivePingTimer();
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
}
|
|
362
|
+
createCall(metadata, host, method, listener, subchannelCallStatsTracker) {
|
|
363
|
+
const headers = metadata.toHttp2Headers();
|
|
364
|
+
headers[HTTP2_HEADER_AUTHORITY] = host;
|
|
365
|
+
headers[HTTP2_HEADER_USER_AGENT] = this.userAgent;
|
|
366
|
+
headers[HTTP2_HEADER_CONTENT_TYPE] = 'application/grpc';
|
|
367
|
+
headers[HTTP2_HEADER_METHOD] = 'POST';
|
|
368
|
+
headers[HTTP2_HEADER_PATH] = method;
|
|
369
|
+
headers[HTTP2_HEADER_TE] = 'trailers';
|
|
370
|
+
let http2Stream;
|
|
371
|
+
/* In theory, if an error is thrown by session.request because session has
|
|
372
|
+
* become unusable (e.g. because it has received a goaway), this subchannel
|
|
373
|
+
* should soon see the corresponding close or goaway event anyway and leave
|
|
374
|
+
* READY. But we have seen reports that this does not happen
|
|
375
|
+
* (https://github.com/googleapis/nodejs-firestore/issues/1023#issuecomment-653204096)
|
|
376
|
+
* so for defense in depth, we just discard the session when we see an
|
|
377
|
+
* error here.
|
|
378
|
+
*/
|
|
379
|
+
try {
|
|
380
|
+
http2Stream = this.session.request(headers);
|
|
381
|
+
}
|
|
382
|
+
catch (e) {
|
|
383
|
+
this.handleDisconnect();
|
|
384
|
+
throw e;
|
|
385
|
+
}
|
|
386
|
+
this.flowControlTrace('local window size: ' +
|
|
387
|
+
this.session.state.localWindowSize +
|
|
388
|
+
' remote window size: ' +
|
|
389
|
+
this.session.state.remoteWindowSize);
|
|
390
|
+
this.internalsTrace('session.closed=' +
|
|
391
|
+
this.session.closed +
|
|
392
|
+
' session.destroyed=' +
|
|
393
|
+
this.session.destroyed +
|
|
394
|
+
' session.socket.destroyed=' +
|
|
395
|
+
this.session.socket.destroyed);
|
|
396
|
+
let eventTracker;
|
|
397
|
+
// eslint-disable-next-line prefer-const
|
|
398
|
+
let call;
|
|
399
|
+
if (this.channelzEnabled) {
|
|
400
|
+
this.streamTracker.addCallStarted();
|
|
401
|
+
eventTracker = {
|
|
402
|
+
addMessageSent: () => {
|
|
403
|
+
var _a;
|
|
404
|
+
this.messagesSent += 1;
|
|
405
|
+
this.lastMessageSentTimestamp = new Date();
|
|
406
|
+
(_a = subchannelCallStatsTracker.addMessageSent) === null || _a === void 0 ? void 0 : _a.call(subchannelCallStatsTracker);
|
|
407
|
+
},
|
|
408
|
+
addMessageReceived: () => {
|
|
409
|
+
var _a;
|
|
410
|
+
this.messagesReceived += 1;
|
|
411
|
+
this.lastMessageReceivedTimestamp = new Date();
|
|
412
|
+
(_a = subchannelCallStatsTracker.addMessageReceived) === null || _a === void 0 ? void 0 : _a.call(subchannelCallStatsTracker);
|
|
413
|
+
},
|
|
414
|
+
onCallEnd: status => {
|
|
415
|
+
var _a;
|
|
416
|
+
(_a = subchannelCallStatsTracker.onCallEnd) === null || _a === void 0 ? void 0 : _a.call(subchannelCallStatsTracker, status);
|
|
417
|
+
this.removeActiveCall(call);
|
|
418
|
+
},
|
|
419
|
+
onStreamEnd: success => {
|
|
420
|
+
var _a;
|
|
421
|
+
if (success) {
|
|
422
|
+
this.streamTracker.addCallSucceeded();
|
|
423
|
+
}
|
|
424
|
+
else {
|
|
425
|
+
this.streamTracker.addCallFailed();
|
|
426
|
+
}
|
|
427
|
+
(_a = subchannelCallStatsTracker.onStreamEnd) === null || _a === void 0 ? void 0 : _a.call(subchannelCallStatsTracker, success);
|
|
428
|
+
},
|
|
429
|
+
};
|
|
430
|
+
}
|
|
431
|
+
else {
|
|
432
|
+
eventTracker = {
|
|
433
|
+
addMessageSent: () => {
|
|
434
|
+
var _a;
|
|
435
|
+
(_a = subchannelCallStatsTracker.addMessageSent) === null || _a === void 0 ? void 0 : _a.call(subchannelCallStatsTracker);
|
|
436
|
+
},
|
|
437
|
+
addMessageReceived: () => {
|
|
438
|
+
var _a;
|
|
439
|
+
(_a = subchannelCallStatsTracker.addMessageReceived) === null || _a === void 0 ? void 0 : _a.call(subchannelCallStatsTracker);
|
|
440
|
+
},
|
|
441
|
+
onCallEnd: status => {
|
|
442
|
+
var _a;
|
|
443
|
+
(_a = subchannelCallStatsTracker.onCallEnd) === null || _a === void 0 ? void 0 : _a.call(subchannelCallStatsTracker, status);
|
|
444
|
+
this.removeActiveCall(call);
|
|
445
|
+
},
|
|
446
|
+
onStreamEnd: success => {
|
|
447
|
+
var _a;
|
|
448
|
+
(_a = subchannelCallStatsTracker.onStreamEnd) === null || _a === void 0 ? void 0 : _a.call(subchannelCallStatsTracker, success);
|
|
449
|
+
},
|
|
450
|
+
};
|
|
451
|
+
}
|
|
452
|
+
call = new subchannel_call_1.Http2SubchannelCall(http2Stream, eventTracker, listener, this, (0, call_number_1.getNextCallNumber)());
|
|
453
|
+
this.addActiveCall(call);
|
|
454
|
+
return call;
|
|
455
|
+
}
|
|
456
|
+
getChannelzRef() {
|
|
457
|
+
return this.channelzRef;
|
|
458
|
+
}
|
|
459
|
+
getPeerName() {
|
|
460
|
+
return this.subchannelAddressString;
|
|
461
|
+
}
|
|
462
|
+
shutdown() {
|
|
463
|
+
this.session.close();
|
|
464
|
+
(0, channelz_1.unregisterChannelzRef)(this.channelzRef);
|
|
465
|
+
}
|
|
466
|
+
}
|
|
467
|
+
class Http2SubchannelConnector {
|
|
468
|
+
constructor(channelTarget) {
|
|
469
|
+
this.channelTarget = channelTarget;
|
|
470
|
+
this.session = null;
|
|
471
|
+
this.isShutdown = false;
|
|
472
|
+
}
|
|
473
|
+
trace(text) {
|
|
474
|
+
logging.trace(constants_1.LogVerbosity.DEBUG, TRACER_NAME, (0, uri_parser_1.uriToString)(this.channelTarget) + ' ' + text);
|
|
475
|
+
}
|
|
476
|
+
createSession(address, credentials, options, proxyConnectionResult) {
|
|
477
|
+
if (this.isShutdown) {
|
|
478
|
+
return Promise.reject();
|
|
479
|
+
}
|
|
480
|
+
return new Promise((resolve, reject) => {
|
|
481
|
+
var _a, _b, _c;
|
|
482
|
+
let remoteName;
|
|
483
|
+
if (proxyConnectionResult.realTarget) {
|
|
484
|
+
remoteName = (0, uri_parser_1.uriToString)(proxyConnectionResult.realTarget);
|
|
485
|
+
this.trace('creating HTTP/2 session through proxy to ' +
|
|
486
|
+
(0, uri_parser_1.uriToString)(proxyConnectionResult.realTarget));
|
|
487
|
+
}
|
|
488
|
+
else {
|
|
489
|
+
remoteName = null;
|
|
490
|
+
this.trace('creating HTTP/2 session to ' + (0, subchannel_address_1.subchannelAddressToString)(address));
|
|
491
|
+
}
|
|
492
|
+
const targetAuthority = (0, resolver_1.getDefaultAuthority)((_a = proxyConnectionResult.realTarget) !== null && _a !== void 0 ? _a : this.channelTarget);
|
|
493
|
+
let connectionOptions = credentials._getConnectionOptions() || {};
|
|
494
|
+
connectionOptions.maxSendHeaderBlockLength = Number.MAX_SAFE_INTEGER;
|
|
495
|
+
if ('grpc-node.max_session_memory' in options) {
|
|
496
|
+
connectionOptions.maxSessionMemory =
|
|
497
|
+
options['grpc-node.max_session_memory'];
|
|
498
|
+
}
|
|
499
|
+
else {
|
|
500
|
+
/* By default, set a very large max session memory limit, to effectively
|
|
501
|
+
* disable enforcement of the limit. Some testing indicates that Node's
|
|
502
|
+
* behavior degrades badly when this limit is reached, so we solve that
|
|
503
|
+
* by disabling the check entirely. */
|
|
504
|
+
connectionOptions.maxSessionMemory = Number.MAX_SAFE_INTEGER;
|
|
505
|
+
}
|
|
506
|
+
let addressScheme = 'http://';
|
|
507
|
+
if ('secureContext' in connectionOptions) {
|
|
508
|
+
addressScheme = 'https://';
|
|
509
|
+
// If provided, the value of grpc.ssl_target_name_override should be used
|
|
510
|
+
// to override the target hostname when checking server identity.
|
|
511
|
+
// This option is used for testing only.
|
|
512
|
+
if (options['grpc.ssl_target_name_override']) {
|
|
513
|
+
const sslTargetNameOverride = options['grpc.ssl_target_name_override'];
|
|
514
|
+
connectionOptions.checkServerIdentity = (host, cert) => {
|
|
515
|
+
return (0, tls_1.checkServerIdentity)(sslTargetNameOverride, cert);
|
|
516
|
+
};
|
|
517
|
+
connectionOptions.servername = sslTargetNameOverride;
|
|
518
|
+
}
|
|
519
|
+
else {
|
|
520
|
+
const authorityHostname = (_c = (_b = (0, uri_parser_1.splitHostPort)(targetAuthority)) === null || _b === void 0 ? void 0 : _b.host) !== null && _c !== void 0 ? _c : 'localhost';
|
|
521
|
+
// We want to always set servername to support SNI
|
|
522
|
+
connectionOptions.servername = authorityHostname;
|
|
523
|
+
}
|
|
524
|
+
if (proxyConnectionResult.socket) {
|
|
525
|
+
/* This is part of the workaround for
|
|
526
|
+
* https://github.com/nodejs/node/issues/32922. Without that bug,
|
|
527
|
+
* proxyConnectionResult.socket would always be a plaintext socket and
|
|
528
|
+
* this would say
|
|
529
|
+
* connectionOptions.socket = proxyConnectionResult.socket; */
|
|
530
|
+
connectionOptions.createConnection = (authority, option) => {
|
|
531
|
+
return proxyConnectionResult.socket;
|
|
532
|
+
};
|
|
533
|
+
}
|
|
534
|
+
}
|
|
535
|
+
else {
|
|
536
|
+
/* In all but the most recent versions of Node, http2.connect does not use
|
|
537
|
+
* the options when establishing plaintext connections, so we need to
|
|
538
|
+
* establish that connection explicitly. */
|
|
539
|
+
connectionOptions.createConnection = (authority, option) => {
|
|
540
|
+
if (proxyConnectionResult.socket) {
|
|
541
|
+
return proxyConnectionResult.socket;
|
|
542
|
+
}
|
|
543
|
+
else {
|
|
544
|
+
/* net.NetConnectOpts is declared in a way that is more restrictive
|
|
545
|
+
* than what net.connect will actually accept, so we use the type
|
|
546
|
+
* assertion to work around that. */
|
|
547
|
+
return net.connect(address);
|
|
548
|
+
}
|
|
549
|
+
};
|
|
550
|
+
}
|
|
551
|
+
connectionOptions = Object.assign(Object.assign(Object.assign({}, connectionOptions), address), { enableTrace: options['grpc-node.tls_enable_trace'] === 1 });
|
|
552
|
+
/* http2.connect uses the options here:
|
|
553
|
+
* https://github.com/nodejs/node/blob/70c32a6d190e2b5d7b9ff9d5b6a459d14e8b7d59/lib/internal/http2/core.js#L3028-L3036
|
|
554
|
+
* The spread operator overides earlier values with later ones, so any port
|
|
555
|
+
* or host values in the options will be used rather than any values extracted
|
|
556
|
+
* from the first argument. In addition, the path overrides the host and port,
|
|
557
|
+
* as documented for plaintext connections here:
|
|
558
|
+
* https://nodejs.org/api/net.html#net_socket_connect_options_connectlistener
|
|
559
|
+
* and for TLS connections here:
|
|
560
|
+
* https://nodejs.org/api/tls.html#tls_tls_connect_options_callback. In
|
|
561
|
+
* earlier versions of Node, http2.connect passes these options to
|
|
562
|
+
* tls.connect but not net.connect, so in the insecure case we still need
|
|
563
|
+
* to set the createConnection option above to create the connection
|
|
564
|
+
* explicitly. We cannot do that in the TLS case because http2.connect
|
|
565
|
+
* passes necessary additional options to tls.connect.
|
|
566
|
+
* The first argument just needs to be parseable as a URL and the scheme
|
|
567
|
+
* determines whether the connection will be established over TLS or not.
|
|
568
|
+
*/
|
|
569
|
+
const session = http2.connect(addressScheme + targetAuthority, connectionOptions);
|
|
570
|
+
this.session = session;
|
|
571
|
+
let errorMessage = 'Failed to connect';
|
|
572
|
+
session.unref();
|
|
573
|
+
session.once('connect', () => {
|
|
574
|
+
session.removeAllListeners();
|
|
575
|
+
resolve(new Http2Transport(session, address, options, remoteName));
|
|
576
|
+
this.session = null;
|
|
577
|
+
});
|
|
578
|
+
session.once('close', () => {
|
|
579
|
+
this.session = null;
|
|
580
|
+
// Leave time for error event to happen before rejecting
|
|
581
|
+
setImmediate(() => {
|
|
582
|
+
reject(`${errorMessage} (${new Date().toISOString()})`);
|
|
583
|
+
});
|
|
584
|
+
});
|
|
585
|
+
session.once('error', error => {
|
|
586
|
+
errorMessage = error.message;
|
|
587
|
+
this.trace('connection failed with error ' + errorMessage);
|
|
588
|
+
});
|
|
589
|
+
});
|
|
590
|
+
}
|
|
591
|
+
connect(address, credentials, options) {
|
|
592
|
+
var _a, _b;
|
|
593
|
+
if (this.isShutdown) {
|
|
594
|
+
return Promise.reject();
|
|
595
|
+
}
|
|
596
|
+
/* Pass connection options through to the proxy so that it's able to
|
|
597
|
+
* upgrade it's connection to support tls if needed.
|
|
598
|
+
* This is a workaround for https://github.com/nodejs/node/issues/32922
|
|
599
|
+
* See https://github.com/grpc/grpc-node/pull/1369 for more info. */
|
|
600
|
+
const connectionOptions = credentials._getConnectionOptions() || {};
|
|
601
|
+
if ('secureContext' in connectionOptions) {
|
|
602
|
+
connectionOptions.ALPNProtocols = ['h2'];
|
|
603
|
+
// If provided, the value of grpc.ssl_target_name_override should be used
|
|
604
|
+
// to override the target hostname when checking server identity.
|
|
605
|
+
// This option is used for testing only.
|
|
606
|
+
if (options['grpc.ssl_target_name_override']) {
|
|
607
|
+
const sslTargetNameOverride = options['grpc.ssl_target_name_override'];
|
|
608
|
+
connectionOptions.checkServerIdentity = (host, cert) => {
|
|
609
|
+
return (0, tls_1.checkServerIdentity)(sslTargetNameOverride, cert);
|
|
610
|
+
};
|
|
611
|
+
connectionOptions.servername = sslTargetNameOverride;
|
|
612
|
+
}
|
|
613
|
+
else {
|
|
614
|
+
if ('grpc.http_connect_target' in options) {
|
|
615
|
+
/* This is more or less how servername will be set in createSession
|
|
616
|
+
* if a connection is successfully established through the proxy.
|
|
617
|
+
* If the proxy is not used, these connectionOptions are discarded
|
|
618
|
+
* anyway */
|
|
619
|
+
const targetPath = (0, resolver_1.getDefaultAuthority)((_a = (0, uri_parser_1.parseUri)(options['grpc.http_connect_target'])) !== null && _a !== void 0 ? _a : {
|
|
620
|
+
path: 'localhost',
|
|
621
|
+
});
|
|
622
|
+
const hostPort = (0, uri_parser_1.splitHostPort)(targetPath);
|
|
623
|
+
connectionOptions.servername = (_b = hostPort === null || hostPort === void 0 ? void 0 : hostPort.host) !== null && _b !== void 0 ? _b : targetPath;
|
|
624
|
+
}
|
|
625
|
+
}
|
|
626
|
+
if (options['grpc-node.tls_enable_trace']) {
|
|
627
|
+
connectionOptions.enableTrace = true;
|
|
628
|
+
}
|
|
629
|
+
}
|
|
630
|
+
return (0, http_proxy_1.getProxiedConnection)(address, options, connectionOptions).then(result => this.createSession(address, credentials, options, result));
|
|
631
|
+
}
|
|
632
|
+
shutdown() {
|
|
633
|
+
var _a;
|
|
634
|
+
this.isShutdown = true;
|
|
635
|
+
(_a = this.session) === null || _a === void 0 ? void 0 : _a.close();
|
|
636
|
+
this.session = null;
|
|
637
|
+
}
|
|
638
|
+
}
|
|
639
|
+
exports.Http2SubchannelConnector = Http2SubchannelConnector;
|
|
640
|
+
//# sourceMappingURL=transport.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transport.js","sourceRoot":"","sources":["../../src/transport.ts"],"names":[],"mappings":"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"}
|